From 15c7d660333c20922dc76b9f7c4b7caea632c0d2 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Sun, 18 Jul 2010 03:00:16 +0000 Subject: [PATCH] rt2860sta, rt2870sta: Apply changes from Linux 2.6.33 and 2.6.34 rt3090sta: Replace with rt2860sta (Closes: #588863) svn path=/dists/sid/linux-2.6/; revision=15991 --- debian/changelog | 2 + debian/config/kernelarch-x86/config | 5 - ...pdates-from-vendor-s-V2.1.0.0-driver.patch | 79796 +++++++++++ ...remove-unused-code-from-common-dfs.c.patch | 496 + ...ng-rt2860-add-RT3090-chipset-support.patch | 3191 + ...emove-no-longer-needed-rt3090-driver.patch | 105373 +++++++++++++++ ...rt28x0-remove-unused-eewrite-methods.patch | 222 + ...emove-unused-code-from-common-ee_efu.patch | 412 + ...emove-private-RTPRIV_IOCTL_SET-ioctl.patch | 40 + ...emove-private-RTPRIV_IOCTL_GSITESURV.patch | 131 + ...-rt28x0-remove-private-WEXT-handlers.patch | 4115 + ...emove-support-for-private-driver-par.patch | 181 + ...emove-optional-loading-of-EEPROM-fro.patch | 992 + ...aging-rt28x0-fix-some-build-warnings.patch | 349 + ...emove-optional-cmm-profile-parameter.patch | 1875 + ...8x0-remove-dead-code-from-rtmp_phy.h.patch | 77 + ...ing-rt28x0-remove-unused-SHA256-code.patch | 358 + ...0016-Staging-rt28x0-remove-dead-code.patch | 152 + ...ing-rt28x0-remove-__LINE__-instances.patch | 80 + ...-rt28x0-run-.c-files-through-Lindent.patch | 16892 +++ ...-run-common-.c-files-through-Lindent.patch | 47154 +++++++ ...8x0-run-sta-.c-files-through-Lindent.patch | 13626 ++ ...-rt28x0-run-.h-files-through-Lindent.patch | 17149 +++ ...ging-rt28x0-fix-comments-in-.c-files.patch | 5538 + ...28x0-fix-comments-in-common-.c-files.patch | 19769 +++ ...-rt28x0-fix-comments-in-sta-.c-files.patch | 5809 + ...ging-rt28x0-fix-comments-in-.h-files.patch | 9877 ++ ...ging-rt28x0-remove-typedefs-part-one.patch | 28225 ++++ ...ging-rt28x0-remove-typedefs-part-two.patch | 2928 + ...ng-rt28x0-remove-typedefs-part-three.patch | 21194 +++ ...emove-remainders-of-etc-reading-stuf.patch | 51 + ...g-rt2860-remove-superfluous-newlines.patch | 65 + ...t28x0-fix-comments-in-chip-mac_pci.h.patch | 189 + ...reduce-superfluous-exclamation-marks.patch | 830 + ...emove-no-longer-needed-common-cmm_da.patch | 1222 + ...est-off-by-one-in-RtmpAsicSendComman.patch | 32 + ...tusb_probe-should-be-in-section-__de.patch | 37 + ...emove-unnecessary-forward-declaratio.patch | 33 + ...-Staging-rt2860-Use-skb_tail_pointer.patch | 79 + ...ta_ioctl.c-Two-branches-the-same-in-.patch | 34 + ...a-constify-RTUSBMultiWrite-RTUSBFirm.patch | 89 + ...2870-sta-Use-request_firmware-to-loa.patch | 291 + ...orrect-onstack-wait_queue_head-decla.patch | 35 + ...dd-Belkin-F5D8055-Wireless-N-USB-Don.patch | 31 + .../all/rt28x0/remove-rt3090-driver.commands | 1 + debian/patches/series/18 | 46 + 46 files changed, 389068 insertions(+), 5 deletions(-) create mode 100644 debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch create mode 100644 debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch create mode 100644 debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch create mode 100644 debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch create mode 100644 debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch create mode 100644 debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch create mode 100644 debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch create mode 100644 debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch create mode 100644 debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch create mode 100644 debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch create mode 100644 debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch create mode 100644 debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch create mode 100644 debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch create mode 100644 debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch create mode 100644 debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch create mode 100644 debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch create mode 100644 debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch create mode 100644 debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch create mode 100644 debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch create mode 100644 debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch create mode 100644 debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch create mode 100644 debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch create mode 100644 debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch create mode 100644 debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch create mode 100644 debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch create mode 100644 debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch create mode 100644 debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch create mode 100644 debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch create mode 100644 debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch create mode 100644 debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch create mode 100644 debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch create mode 100644 debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch create mode 100644 debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch create mode 100644 debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch create mode 100644 debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch create mode 100644 debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch create mode 100644 debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch create mode 100644 debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch create mode 100644 debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch create mode 100644 debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch create mode 100644 debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch create mode 100644 debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch create mode 100644 debian/patches/features/all/rt28x0/remove-rt3090-driver.commands diff --git a/debian/changelog b/debian/changelog index 085266aa6..846f7a485 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ linux-2.6 (2.6.32-18) UNRELEASED; urgency=low allocation failure (Closes: #580124) * postinst: Remove support for 'default' boot loaders. Warn users on upgrade if the current configuration may rely on this. + * rt2860sta, rt2870sta: Apply changes from Linux 2.6.33 and 2.6.34 + * rt3090sta: Replace with rt2860sta (Closes: #588863) [ Martin Michlmayr ] * Add some patches from the Orion tree, including support for Marvell's diff --git a/debian/config/kernelarch-x86/config b/debian/config/kernelarch-x86/config index 767e74f97..12c66bea6 100644 --- a/debian/config/kernelarch-x86/config +++ b/debian/config/kernelarch-x86/config @@ -1085,11 +1085,6 @@ CONFIG_RT2860=m ## CONFIG_RT2870=m -## -## file: drivers/staging/rt3090/Kconfig -## -CONFIG_RT3090=m - ## ## file: drivers/staging/rtl8187se/Kconfig ## diff --git a/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch b/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch new file mode 100644 index 000000000..39999b85f --- /dev/null +++ b/debian/patches/features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch @@ -0,0 +1,79796 @@ +From ff63aac6c30d40f9b4e7d7cdd9ceb708f3b0604b Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Tue, 22 Sep 2009 20:44:07 +0200 +Subject: [PATCH 01/42] Staging: rt28x0: updates from vendor's V2.1.0.0 drivers + +commit ca97b8388838ee9ea4b4bad04948f8f7f8a607a3 upstream. + +Port changes from: + +* 2009_0420_RT2860_Linux_STA_V2.1.0.0 +* 2009_0302_RT2870_Linux_STA_v2.1.0.0 +* 2009_0525_RT3070_Linux_STA_v2.1.1.0 + +to in-kernel drivers. + +From the RT2860 driver release note: + +[2.1.0.0] +1. New generation schema for multiple OS porting +2. Fixed Ad-hoc ping failed in noisy environment. (Probe Response has too + many retry packet then cause "not enough space in MgmtRing") +3. Fixed WPA(2)PSK issue when group cipher of AP is WEP40 or WEP104. +4. Modified iwpriv ra0 get_site_survey: + In scan list result: Security shows "NONE" when AP is OPEN/NONE, + shows "WEP" when AP is OPEN/WEP or SHARED/WEP, shows + "WPAPSK(WPA2PSK)/TKIP(AES)" when AP is WPAPSK(WPA2PSK)/TKIP(AES) + shows "WPA(WPA2)/TKIP(AES)" when AP is WPA(WPA2)/TKIP(AES) +5. Support kthread. +6. Add New A band channel list region 15 contains the whole channels in + the A band region 4 and the new CE channel 167,169,171,173 +7. Add New IEEE802.11r functionality. +8. Fixed WPA2-Enterprise failed when AP reboot or turn off then turn on. +9. Fixed STA cannot connect to 11B only AP when the setting of is PHY_11GN. + +From the RT2870 driver release note: + +[V2.1.0.0] +1. New generation schema for multiple OS porting. +2. Fixed Ad-hoc ping failed in noisy environment. (Probe Response has too + many retry packet then cause "not enough space in MgmtRing"). +3. Fixed WPS failed with D-Link DIR-628 in 5GHz. +4. Change FastRoaming in DAT file to AutoRoaming. +5. Support kthread. +6. Add New A band channel list region 15 contains the whole channels in + the A band region and the new CE channel 167,169,171,173. +7. New IEEE802.11r functionality. + +From the RT3070 driver release note: + +Version V2.1.1.0 + 1. Linux kernel 2.6.29 support. + 2. Fix eFuse write from BIN file bug. + +Version 2.1.0.0 + 1. New generation schema for multiple OS porting + 2. Fixed Ad-hoc ping failed in noisy environment. + 3. Modified iwpriv ra0 get_site_survey: + 4. Change FastRoaming in DAT file to AutoRoaming. + 5. Support kthread. + 6. New IEEE802.11r functionality. + +Tested with RT2860 and RT3070 chipsets. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +[bwh: Strip firmware; adjust for 2.6.32.16] +--- + drivers/staging/rt2860/2860_main_dev.c | 1319 ------ + drivers/staging/rt2860/Makefile | 26 +- + drivers/staging/rt2860/aironet.h | 210 - + drivers/staging/rt2860/ap.h | 12 +- + drivers/staging/rt2860/chip/mac_pci.h | 365 ++ + drivers/staging/rt2860/chip/mac_usb.h | 365 ++ + drivers/staging/rt2860/chip/rt2860.h | 56 + + drivers/staging/rt2860/chip/rt2870.h | 47 + + drivers/staging/rt2860/chip/rt3070.h | 68 + + drivers/staging/rt2860/chip/rt30xx.h | 48 + + drivers/staging/rt2860/chip/rtmp_mac.h | 1334 ++++++ + drivers/staging/rt2860/chip/rtmp_phy.h | 405 ++ + drivers/staging/rt2860/chips/rt3070.c | 185 + + drivers/staging/rt2860/chips/rt30xx.c | 525 +++ + drivers/staging/rt2860/chlist.h | 1223 +------ + drivers/staging/rt2860/common/2860_rtmp_init.c | 897 ----- + drivers/staging/rt2860/common/action.c | 12 +- + drivers/staging/rt2860/common/ba_action.c | 147 +- + drivers/staging/rt2860/common/cmm_aes.c | 1404 +++++++ + drivers/staging/rt2860/common/cmm_asic.c | 2531 ++++++++++++ + drivers/staging/rt2860/common/cmm_cfg.c | 290 ++ + drivers/staging/rt2860/common/cmm_data.c | 906 +---- + drivers/staging/rt2860/common/cmm_data_pci.c | 1153 ++++++ + drivers/staging/rt2860/common/cmm_data_usb.c | 968 +++++ + drivers/staging/rt2860/common/cmm_info.c | 820 +++-- + drivers/staging/rt2860/common/cmm_mac_pci.c | 1504 +++++++ + drivers/staging/rt2860/common/cmm_mac_usb.c | 1216 ++++++ + drivers/staging/rt2860/common/cmm_profile.c | 1736 ++++++++ + drivers/staging/rt2860/common/cmm_sanity.c | 233 +- + drivers/staging/rt2860/common/cmm_sync.c | 70 +- + drivers/staging/rt2860/common/cmm_tkip.c | 882 ++++ + drivers/staging/rt2860/common/cmm_wep.c | 499 +++ + drivers/staging/rt2860/common/cmm_wpa.c | 2428 +++++++++++- + drivers/staging/rt2860/common/crypt_hmac.c | 194 + + drivers/staging/rt2860/common/crypt_md5.c | 352 ++ + drivers/staging/rt2860/common/crypt_sha2.c | 535 +++ + drivers/staging/rt2860/common/dfs.c | 66 +- + drivers/staging/rt2860/common/ee_efuse.c | 1525 +++++++ + drivers/staging/rt2860/common/ee_prom.c | 270 ++ + drivers/staging/rt2860/common/eeprom.c | 1460 +------- + drivers/staging/rt2860/common/md5.c | 1415 ------- + drivers/staging/rt2860/common/mlme.c | 5122 ++++++------------------ + drivers/staging/rt2860/common/rt_channel.c | 1280 ++++++ + drivers/staging/rt2860/common/rt_rf.c | 194 + + drivers/staging/rt2860/common/rtmp_init.c | 1963 ++++------ + drivers/staging/rt2860/common/rtmp_mcu.c | 233 ++ + drivers/staging/rt2860/common/rtmp_timer.c | 323 ++ + drivers/staging/rt2860/common/rtmp_tkip.c | 1586 -------- + drivers/staging/rt2860/common/rtmp_wep.c | 497 --- + drivers/staging/rt2860/common/spectrum.c | 460 ++- + drivers/staging/rt2860/config.mk | 241 -- + drivers/staging/rt2860/crypt_hmac.h | 82 + + drivers/staging/rt2860/crypt_md5.h | 80 + + drivers/staging/rt2860/crypt_sha2.h | 109 + + drivers/staging/rt2860/dfs.h | 32 +- + drivers/staging/rt2860/eeprom.h | 93 + + drivers/staging/rt2860/iface/rtmp_pci.h | 83 + + drivers/staging/rt2860/iface/rtmp_usb.h | 200 + + drivers/staging/rt2860/md5.h | 107 - + drivers/staging/rt2860/mlme.h | 89 +- + drivers/staging/rt2860/oid.h | 135 +- + drivers/staging/rt2860/pci_main_dev.c | 873 ++++ + drivers/staging/rt2860/rt2860.h | 333 -- + drivers/staging/rt2860/rt28xx.h | 1688 -------- + drivers/staging/rt2860/rt_config.h | 32 +- + drivers/staging/rt2860/rt_linux.c | 615 +++- + drivers/staging/rt2860/rt_linux.h | 972 +++--- + drivers/staging/rt2860/rt_main_dev.c | 750 ++--- + drivers/staging/rt2860/rt_pci_rbus.c | 877 ++++ + drivers/staging/rt2860/rt_profile.c | 1839 +--------- + drivers/staging/rt2860/rt_usb.c | 828 ++++ + drivers/staging/rt2860/rtmp.h | 2876 ++++++-------- + drivers/staging/rt2860/rtmp_chip.h | 265 ++ + drivers/staging/rt2860/rtmp_def.h | 289 +- + drivers/staging/rt2860/rtmp_dot11.h | 102 + + drivers/staging/rt2860/rtmp_iface.h | 84 + + drivers/staging/rt2860/rtmp_mcu.h | 55 + + drivers/staging/rt2860/rtmp_os.h | 98 + + drivers/staging/rt2860/rtmp_timer.h | 156 + + drivers/staging/rt2860/rtmp_type.h | 55 +- + drivers/staging/rt2860/rtusb_io.h | 189 + + drivers/staging/rt2860/spectrum.h | 169 +- + drivers/staging/rt2860/spectrum_def.h | 148 +- + drivers/staging/rt2860/sta/aironet.c | 1312 ------ + drivers/staging/rt2860/sta/assoc.c | 327 +-- + drivers/staging/rt2860/sta/auth.c | 138 +- + drivers/staging/rt2860/sta/auth_rsp.c | 16 +- + drivers/staging/rt2860/sta/connect.c | 637 ++-- + drivers/staging/rt2860/sta/rtmp_data.c | 257 +- + drivers/staging/rt2860/sta/sanity.c | 44 +- + drivers/staging/rt2860/sta/sync.c | 398 +-- + drivers/staging/rt2860/sta/wpa.c | 1992 +--------- + drivers/staging/rt2860/sta_ioctl.c | 761 +++-- + drivers/staging/rt2860/usb_main_dev.c | 897 +++++ + drivers/staging/rt2860/wpa.h | 104 +- + drivers/staging/rt2870/2870_main_dev.c | 1530 ------- + drivers/staging/rt2870/Makefile | 32 +- + drivers/staging/rt2870/chips/rt3070.c | 1 + + drivers/staging/rt2870/chips/rt30xx.c | 1 + + drivers/staging/rt2870/common/2870_rtmp_init.c | 1730 -------- + drivers/staging/rt2870/common/acction.c | 1 + + drivers/staging/rt2870/common/cmm_aes.c | 1 + + drivers/staging/rt2870/common/cmm_asic.c | 1 + + drivers/staging/rt2870/common/cmm_cfg.c | 1 + + drivers/staging/rt2870/common/cmm_data_2870.c | 936 ----- + drivers/staging/rt2870/common/cmm_data_usb.c | 1 + + drivers/staging/rt2870/common/cmm_mac_usb.c | 1 + + drivers/staging/rt2870/common/cmm_profile.c | 1 + + drivers/staging/rt2870/common/cmm_tkip.c | 1 + + drivers/staging/rt2870/common/cmm_wep.c | 1 + + drivers/staging/rt2870/common/crypt_hmac.c | 1 + + drivers/staging/rt2870/common/crypt_md5.c | 1 + + drivers/staging/rt2870/common/crypt_sha2.c | 1 + + drivers/staging/rt2870/common/ee_efuse.c | 1 + + drivers/staging/rt2870/common/rt_channel.c | 1 + + drivers/staging/rt2870/common/rt_rf.c | 1 + + drivers/staging/rt2870/common/rtmp_mcu.c | 1 + + drivers/staging/rt2870/common/rtmp_timer.c | 1 + + drivers/staging/rt2870/common/rtusb_bulk.c | 37 +- + drivers/staging/rt2870/common/rtusb_data.c | 55 + + drivers/staging/rt2870/common/rtusb_io.c | 465 +-- + drivers/staging/rt2870/rt2870.h | 583 --- + drivers/staging/rt2870/rt_usb.c | 1 + + drivers/staging/rt2870/usb_main_dev.c | 1 + + 124 files changed, 36334 insertions(+), 31841 deletions(-) + delete mode 100644 drivers/staging/rt2860/2860_main_dev.c + delete mode 100644 drivers/staging/rt2860/aironet.h + create mode 100644 drivers/staging/rt2860/chip/mac_pci.h + create mode 100644 drivers/staging/rt2860/chip/mac_usb.h + create mode 100644 drivers/staging/rt2860/chip/rt2860.h + create mode 100644 drivers/staging/rt2860/chip/rt2870.h + create mode 100644 drivers/staging/rt2860/chip/rt3070.h + create mode 100644 drivers/staging/rt2860/chip/rt30xx.h + create mode 100644 drivers/staging/rt2860/chip/rtmp_mac.h + create mode 100644 drivers/staging/rt2860/chip/rtmp_phy.h + create mode 100644 drivers/staging/rt2860/chips/rt3070.c + create mode 100644 drivers/staging/rt2860/chips/rt30xx.c + delete mode 100644 drivers/staging/rt2860/common/2860_rtmp_init.c + create mode 100644 drivers/staging/rt2860/common/cmm_aes.c + create mode 100644 drivers/staging/rt2860/common/cmm_asic.c + create mode 100644 drivers/staging/rt2860/common/cmm_cfg.c + create mode 100644 drivers/staging/rt2860/common/cmm_data_pci.c + create mode 100644 drivers/staging/rt2860/common/cmm_data_usb.c + create mode 100644 drivers/staging/rt2860/common/cmm_mac_pci.c + create mode 100644 drivers/staging/rt2860/common/cmm_mac_usb.c + create mode 100644 drivers/staging/rt2860/common/cmm_profile.c + create mode 100644 drivers/staging/rt2860/common/cmm_tkip.c + create mode 100644 drivers/staging/rt2860/common/cmm_wep.c + create mode 100644 drivers/staging/rt2860/common/crypt_hmac.c + create mode 100644 drivers/staging/rt2860/common/crypt_md5.c + create mode 100644 drivers/staging/rt2860/common/crypt_sha2.c + create mode 100644 drivers/staging/rt2860/common/ee_efuse.c + create mode 100644 drivers/staging/rt2860/common/ee_prom.c + delete mode 100644 drivers/staging/rt2860/common/md5.c + create mode 100644 drivers/staging/rt2860/common/rt_channel.c + create mode 100644 drivers/staging/rt2860/common/rt_rf.c + create mode 100644 drivers/staging/rt2860/common/rtmp_mcu.c + create mode 100644 drivers/staging/rt2860/common/rtmp_timer.c + delete mode 100644 drivers/staging/rt2860/common/rtmp_tkip.c + delete mode 100644 drivers/staging/rt2860/common/rtmp_wep.c + delete mode 100644 drivers/staging/rt2860/config.mk + create mode 100644 drivers/staging/rt2860/crypt_hmac.h + create mode 100644 drivers/staging/rt2860/crypt_md5.h + create mode 100644 drivers/staging/rt2860/crypt_sha2.h + create mode 100644 drivers/staging/rt2860/eeprom.h + create mode 100644 drivers/staging/rt2860/iface/rtmp_pci.h + create mode 100644 drivers/staging/rt2860/iface/rtmp_usb.h + delete mode 100644 drivers/staging/rt2860/md5.h + create mode 100644 drivers/staging/rt2860/pci_main_dev.c + delete mode 100644 drivers/staging/rt2860/rt2860.h + delete mode 100644 drivers/staging/rt2860/rt28xx.h + create mode 100644 drivers/staging/rt2860/rt_pci_rbus.c + create mode 100644 drivers/staging/rt2860/rt_usb.c + create mode 100644 drivers/staging/rt2860/rtmp_chip.h + create mode 100644 drivers/staging/rt2860/rtmp_dot11.h + create mode 100644 drivers/staging/rt2860/rtmp_iface.h + create mode 100644 drivers/staging/rt2860/rtmp_mcu.h + create mode 100644 drivers/staging/rt2860/rtmp_os.h + create mode 100644 drivers/staging/rt2860/rtmp_timer.h + create mode 100644 drivers/staging/rt2860/rtusb_io.h + delete mode 100644 drivers/staging/rt2860/sta/aironet.c + create mode 100644 drivers/staging/rt2860/usb_main_dev.c + delete mode 100644 drivers/staging/rt2870/2870_main_dev.c + create mode 100644 drivers/staging/rt2870/chips/rt3070.c + create mode 100644 drivers/staging/rt2870/chips/rt30xx.c + delete mode 100644 drivers/staging/rt2870/common/2870_rtmp_init.c + create mode 100644 drivers/staging/rt2870/common/acction.c + create mode 100644 drivers/staging/rt2870/common/cmm_aes.c + create mode 100644 drivers/staging/rt2870/common/cmm_asic.c + create mode 100644 drivers/staging/rt2870/common/cmm_cfg.c + delete mode 100644 drivers/staging/rt2870/common/cmm_data_2870.c + create mode 100644 drivers/staging/rt2870/common/cmm_data_usb.c + create mode 100644 drivers/staging/rt2870/common/cmm_mac_usb.c + create mode 100644 drivers/staging/rt2870/common/cmm_profile.c + create mode 100644 drivers/staging/rt2870/common/cmm_tkip.c + create mode 100644 drivers/staging/rt2870/common/cmm_wep.c + create mode 100644 drivers/staging/rt2870/common/crypt_hmac.c + create mode 100644 drivers/staging/rt2870/common/crypt_md5.c + create mode 100644 drivers/staging/rt2870/common/crypt_sha2.c + create mode 100644 drivers/staging/rt2870/common/ee_efuse.c + create mode 100644 drivers/staging/rt2870/common/rt_channel.c + create mode 100644 drivers/staging/rt2870/common/rt_rf.c + create mode 100644 drivers/staging/rt2870/common/rtmp_mcu.c + create mode 100644 drivers/staging/rt2870/common/rtmp_timer.c + delete mode 100644 drivers/staging/rt2870/rt2870.h + create mode 100644 drivers/staging/rt2870/rt_usb.c + create mode 100644 drivers/staging/rt2870/usb_main_dev.c + +diff --git a/drivers/staging/rt2860/2860_main_dev.c b/drivers/staging/rt2860/2860_main_dev.c +deleted file mode 100644 +index c2f0296..0000000 +--- a/drivers/staging/rt2860/2860_main_dev.c ++++ /dev/null +@@ -1,1319 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- 2870_main_dev.c +- +- Abstract: +- Create and register network interface. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "rt_config.h" +- +-extern INT __devinit rt28xx_probe(IN void *_dev_p, IN void *_dev_id_p, +- IN UINT argc, OUT PRTMP_ADAPTER *ppAd); +- +-static void rx_done_tasklet(unsigned long data); +-static void mgmt_dma_done_tasklet(unsigned long data); +-static void ac0_dma_done_tasklet(unsigned long data); +-static void ac1_dma_done_tasklet(unsigned long data); +-static void ac2_dma_done_tasklet(unsigned long data); +-static void ac3_dma_done_tasklet(unsigned long data); +-static void hcca_dma_done_tasklet(unsigned long data); +-static void fifo_statistic_full_tasklet(unsigned long data); +- +- +-/*---------------------------------------------------------------------*/ +-/* Symbol & Macro Definitions */ +-/*---------------------------------------------------------------------*/ +-#define RT2860_INT_RX_DLY (1<<0) // bit 0 +-#define RT2860_INT_TX_DLY (1<<1) // bit 1 +-#define RT2860_INT_RX_DONE (1<<2) // bit 2 +-#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 +-#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 +-#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 +-#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 +-#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 +-#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 +- +-#define INT_RX RT2860_INT_RX_DONE +- +-#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_MGMT_DLY RT2860_INT_MGMT_DONE +- +-/*---------------------------------------------------------------------*/ +-/* Prototypes of Functions Used */ +-/*---------------------------------------------------------------------*/ +-/* function declarations */ +-static INT __devinit rt2860_init_one (struct pci_dev *pci_dev, const struct pci_device_id *ent); +-static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev); +-static INT __devinit rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent); +-void init_thread_task(PRTMP_ADAPTER pAd); +-static void __exit rt2860_cleanup_module(void); +-static int __init rt2860_init_module(void); +- +-#ifdef CONFIG_PM +-static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); +-static int rt2860_resume(struct pci_dev *pci_dev); +-#endif // CONFIG_PM // +- +- +-// +-// Ralink PCI device table, include all supported chipsets +-// +-static struct pci_device_id rt2860_pci_tbl[] __devinitdata = +-{ +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2760_PCI_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2790_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(VEN_AWT_PCI_VENDOR_ID, VEN_AWT_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7708)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7728)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7758)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7727)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7738)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7748)}, +- {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7768)}, +- {0,} // terminate list +-}; +- +-MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); +-MODULE_LICENSE("GPL"); +-#ifdef MODULE_VERSION +-MODULE_VERSION(STA_DRIVER_VERSION); +-#endif +- +-// +-// Our PCI driver structure +-// +-static struct pci_driver rt2860_driver = +-{ +- name: "rt2860", +- id_table: rt2860_pci_tbl, +- probe: rt2860_init_one, +- remove: __devexit_p(rt2860_remove_one), +- +-#ifdef CONFIG_PM +- suspend: rt2860_suspend, +- resume: rt2860_resume, +-#endif +-}; +- +- +-#ifdef CONFIG_PM +- +-VOID RT2860RejectPendingPackets( +- IN PRTMP_ADAPTER pAd) +-{ +- // clear PS packets +- // clear TxSw packets +-} +- +-static int rt2860_suspend( +- struct pci_dev *pci_dev, +- pm_message_t state) +-{ +- struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- INT32 retval; +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); +- +- if (net_dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- { +- pAd = net_dev->ml_priv; +- +- /* we can not use IFF_UP because ra0 down but ra1 up */ +- /* and 1 suspend/resume function for 1 module, not for each interface */ +- /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { +- // avoid users do suspend after interface is down +- +- // stop interface +- netif_carrier_off(net_dev); +- netif_stop_queue(net_dev); +- +- // mark device as removed from system and therefore no longer available +- netif_device_detach(net_dev); +- +- // mark halt flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // take down the device +- rt28xx_close((PNET_DEV)net_dev); +- +- RT_MOD_DEC_USE_COUNT(); +- } +- } +- +- // reference to http://vovo2000.com/type-lab/linux/kernel-api/linux-kernel-api.html +- // enable device to generate PME# when suspended +- // pci_choose_state(): Choose the power state of a PCI device to be suspended +- retval = pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), 1); +- // save the PCI configuration space of a device before suspending +- pci_save_state(pci_dev); +- // disable PCI device after use +- pci_disable_device(pci_dev); +- +- retval = pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_suspend()\n")); +- return retval; +-} +- +-static int rt2860_resume( +- struct pci_dev *pci_dev) +-{ +- struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- INT32 retval; +- +- +- // set the power state of a PCI device +- // PCI has 4 power states, DO (normal) ~ D3(less power) +- // in include/linux/pci.h, you can find that +- // #define PCI_D0 ((pci_power_t __force) 0) +- // #define PCI_D1 ((pci_power_t __force) 1) +- // #define PCI_D2 ((pci_power_t __force) 2) +- // #define PCI_D3hot ((pci_power_t __force) 3) +- // #define PCI_D3cold ((pci_power_t __force) 4) +- // #define PCI_UNKNOWN ((pci_power_t __force) 5) +- // #define PCI_POWER_ERROR ((pci_power_t __force) -1) +- retval = pci_set_power_state(pci_dev, PCI_D0); +- +- // restore the saved state of a PCI device +- pci_restore_state(pci_dev); +- +- // initialize device before it's used by a driver +- if (pci_enable_device(pci_dev)) +- { +- printk("pci enable fail!\n"); +- return 0; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_resume()\n")); +- +- if (net_dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- pAd = net_dev->ml_priv; +- +- if (pAd != NULL) +- { +- /* we can not use IFF_UP because ra0 down but ra1 up */ +- /* and 1 suspend/resume function for 1 module, not for each interface */ +- /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { +- // mark device as attached from system and restart if needed +- netif_device_attach(net_dev); +- +- if (rt28xx_open((PNET_DEV)net_dev) != 0) +- { +- // open fail +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); +- return 0; +- } +- +- // increase MODULE use count +- RT_MOD_INC_USE_COUNT(); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- netif_start_queue(net_dev); +- netif_carrier_on(net_dev); +- netif_wake_queue(net_dev); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); +- return 0; +-} +-#endif // CONFIG_PM // +- +- +-static INT __init rt2860_init_module(VOID) +-{ +- return pci_register_driver(&rt2860_driver); +-} +- +- +-// +-// Driver module unload function +-// +-static VOID __exit rt2860_cleanup_module(VOID) +-{ +- pci_unregister_driver(&rt2860_driver); +-} +- +-module_init(rt2860_init_module); +-module_exit(rt2860_cleanup_module); +- +- +-static INT __devinit rt2860_init_one ( +- IN struct pci_dev *pci_dev, +- IN const struct pci_device_id *ent) +-{ +- INT rc; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_init_one\n")); +- +- // wake up and enable device +- if (pci_enable_device (pci_dev)) +- { +- rc = -EIO; +- } +- else +- { +- rc = rt2860_probe(pci_dev, ent); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_init_one\n")); +- return rc; +-} +- +- +-static VOID __devexit rt2860_remove_one( +- IN struct pci_dev *pci_dev) +-{ +- struct net_device *net_dev = pci_get_drvdata(pci_dev); +- RTMP_ADAPTER *pAd = net_dev->ml_priv; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); +- +- if (pAd != NULL) +- { +- // Unregister network device +- unregister_netdev(net_dev); +- +- // Unmap CSR base address +- iounmap((char *)(net_dev->base_addr)); +- +- RTMPFreeAdapter(pAd); +- +- // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- } +- else +- { +- // Unregister network device +- unregister_netdev(net_dev); +- +- // Unmap CSR base address +- iounmap((char *)(net_dev->base_addr)); +- +- // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- } +- +- // Free pre-allocated net_device memory +- free_netdev(net_dev); +-} +- +-// +-// PCI device probe & initialization function +-// +-static INT __devinit rt2860_probe( +- IN struct pci_dev *pci_dev, +- IN const struct pci_device_id *ent) +-{ +- PRTMP_ADAPTER pAd; +- INT rv = 0; +- +- rv = (INT)rt28xx_probe((void *)pci_dev, (void *)ent, 0, &pAd); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); +- return rv; +-} +- +- +-void init_thread_task(IN PRTMP_ADAPTER pAd) +-{ +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->hcca_dma_done_task, hcca_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd); +-} +- +-void kill_thread_task(IN PRTMP_ADAPTER pAd) +-{ +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- tasklet_kill(&pObj->rx_done_task); +- tasklet_kill(&pObj->mgmt_dma_done_task); +- tasklet_kill(&pObj->ac0_dma_done_task); +- tasklet_kill(&pObj->ac1_dma_done_task); +- tasklet_kill(&pObj->ac2_dma_done_task); +- tasklet_kill(&pObj->ac3_dma_done_task); +- tasklet_kill(&pObj->hcca_dma_done_task); +- tasklet_kill(&pObj->tbtt_task); +- tasklet_kill(&pObj->fifo_statistic_full_task); +-} +- +- +-static void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) +-{ +- u32 regValue; +- +- pAd->int_disable_mask &= ~(mode); +- regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable +- +- if (regValue != 0) +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +-} +- +- +-static void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) +-{ +- u32 regValue; +- +- pAd->int_disable_mask |= mode; +- regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable +- +- if (regValue == 0) +- { +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +- } +-} +- +-static void mgmt_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.MgmtDmaDone = 1; +- pAd->int_pending &= ~INT_MGMT_DLY; +- +- RTMPHandleMgmtRingDmaDoneInterrupt(pAd); +- +- // if you use RTMP_SEM_LOCK, sometimes kernel will hang up, no any +- // bug report output +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if (pAd->int_pending & INT_MGMT_DLY) +- { +- tasklet_hi_schedule(&pObj->mgmt_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_MGMT_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-static void rx_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- BOOLEAN bReschedule = 0; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- pAd->int_pending &= ~(INT_RX); +- +- bReschedule = STARxDoneInterruptHandle(pAd, 0); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid rotting packet +- */ +- if (pAd->int_pending & INT_RX || bReschedule) +- { +- tasklet_hi_schedule(&pObj->rx_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable RxINT again */ +- rt2860_int_enable(pAd, INT_RX); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- +-} +- +-void fifo_statistic_full_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- pAd->int_pending &= ~(FifoStaFullInt); +- NICUpdateFifoStaCounters(pAd); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid rotting packet +- */ +- if (pAd->int_pending & FifoStaFullInt) +- { +- tasklet_hi_schedule(&pObj->fifo_statistic_full_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable RxINT again */ +- +- rt2860_int_enable(pAd, FifoStaFullInt); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- +-} +- +-static void hcca_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- +- IntSource.word = 0; +- IntSource.field.HccaDmaDone = 1; +- pAd->int_pending &= ~INT_HCCA_DLY; +- +- RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if (pAd->int_pending & INT_HCCA_DLY) +- { +- tasklet_hi_schedule(&pObj->hcca_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_HCCA_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-static void ac3_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.Ac3DmaDone = 1; +- pAd->int_pending &= ~INT_AC3_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac3_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC3_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-static void ac2_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.Ac2DmaDone = 1; +- pAd->int_pending &= ~INT_AC2_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac2_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC2_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-static void ac1_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.Ac1DmaDone = 1; +- pAd->int_pending &= ~INT_AC1_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac1_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC1_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-static void ac0_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.Ac0DmaDone = 1; +- pAd->int_pending &= ~INT_AC0_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac0_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC0_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +-int print_int_count; +- +-IRQ_HANDLE_TYPE +-rt2860_interrupt(int irq, void *dev_instance) +-{ +- struct net_device *net_dev = (struct net_device *) dev_instance; +- PRTMP_ADAPTER pAd = net_dev->ml_priv; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bOldValue; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- +- /* Note 03312008: we can not return here before +- RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); +- Or kernel will panic after ifconfig ra0 down sometimes */ +- +- +- // +- // Inital the Interrupt source. +- // +- IntSource.word = 0x00000000L; +-// McuIntSource.word = 0x00000000L; +- +- // +- // Get the interrupt sources & saved to local variable +- // +- //RTMP_IO_READ32(pAd, where, &McuIntSource.word); +- //RTMP_IO_WRITE32(pAd, , McuIntSource.word); +- +- // +- // Flag fOP_STATUS_DOZE On, means ASIC put to sleep, elase means ASICK WakeUp +- // And at the same time, clock maybe turned off that say there is no DMA service. +- // when ASIC get to sleep. +- // To prevent system hang on power saving. +- // We need to check it before handle the INT_SOURCE_CSR, ASIC must be wake up. +- // +- // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. +- // RT2860 => when ASIC is sleeping, MAC register can be read and written. +- +- bOldValue = pAd->bPCIclkOff; +- pAd->bPCIclkOff = FALSE; +- { +- RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear +- } +- pAd->bPCIclkOff = bOldValue; +- +- // Do nothing if Reset in progress +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- { +- return IRQ_HANDLED; +- } +- +- // +- // Handle interrupt, walk through all bits +- // Should start from highest priority interrupt +- // The priority can be adjust by altering processing if statement +- // +- +- // If required spinlock, each interrupt service routine has to acquire +- // and release itself. +- // +- +- // Do nothing if NIC doesn't exist +- if (IntSource.word == 0xffffffff) +- { +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS); +- printk("snowpin - IntSource.word == 0xffffffff\n"); +- return IRQ_HANDLED; +- } +- +- if (IntSource.word & TxCoherent) +- { +- DBGPRINT(RT_DEBUG_ERROR, (">>>TxCoherent<<<\n")); +- RTMPHandleRxCoherentInterrupt(pAd); +- } +- +- if (IntSource.word & RxCoherent) +- { +- DBGPRINT(RT_DEBUG_ERROR, (">>>RxCoherent<<<\n")); +- RTMPHandleRxCoherentInterrupt(pAd); +- } +- +- if (IntSource.word & FifoStaFullInt) +- { +-#if 1 +- if ((pAd->int_disable_mask & FifoStaFullInt) == 0) +- { +- /* mask FifoStaFullInt */ +- rt2860_int_disable(pAd, FifoStaFullInt); +- tasklet_hi_schedule(&pObj->fifo_statistic_full_task); +- } +- pAd->int_pending |= FifoStaFullInt; +-#else +- NICUpdateFifoStaCounters(pAd); +-#endif +- } +- +- if (IntSource.word & INT_MGMT_DLY) +- { +- if ((pAd->int_disable_mask & INT_MGMT_DLY) ==0 ) +- { +- rt2860_int_disable(pAd, INT_MGMT_DLY); +- tasklet_hi_schedule(&pObj->mgmt_dma_done_task); +- } +- pAd->int_pending |= INT_MGMT_DLY ; +- } +- +- if (IntSource.word & INT_RX) +- { +- if ((pAd->int_disable_mask & INT_RX) == 0) +- { +- /* mask RxINT */ +- rt2860_int_disable(pAd, INT_RX); +- tasklet_hi_schedule(&pObj->rx_done_task); +- } +- pAd->int_pending |= INT_RX; +- } +- +- if (IntSource.word & INT_HCCA_DLY) +- { +- +- if ((pAd->int_disable_mask & INT_HCCA_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_HCCA_DLY); +- tasklet_hi_schedule(&pObj->hcca_dma_done_task); +- } +- pAd->int_pending |= INT_HCCA_DLY; +- } +- +- if (IntSource.word & INT_AC3_DLY) +- { +- +- if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC3_DLY); +- tasklet_hi_schedule(&pObj->ac3_dma_done_task); +- } +- pAd->int_pending |= INT_AC3_DLY; +- } +- +- if (IntSource.word & INT_AC2_DLY) +- { +- +- if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC2_DLY); +- tasklet_hi_schedule(&pObj->ac2_dma_done_task); +- } +- pAd->int_pending |= INT_AC2_DLY; +- } +- +- if (IntSource.word & INT_AC1_DLY) +- { +- +- pAd->int_pending |= INT_AC1_DLY; +- +- if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC1_DLY); +- tasklet_hi_schedule(&pObj->ac1_dma_done_task); +- } +- +- } +- +- if (IntSource.word & INT_AC0_DLY) +- { +- pAd->int_pending |= INT_AC0_DLY; +- +- if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC0_DLY); +- tasklet_hi_schedule(&pObj->ac0_dma_done_task); +- } +- +- } +- +- if (IntSource.word & PreTBTTInt) +- { +- RTMPHandlePreTBTTInterrupt(pAd); +- } +- +- if (IntSource.word & TBTTInt) +- { +- RTMPHandleTBTTInterrupt(pAd); +- } +- +- if (IntSource.word & AutoWakeupInt) +- RTMPHandleTwakeupInterrupt(pAd); +- +- return IRQ_HANDLED; +-} +- +-/* +-======================================================================== +-Routine Description: +- Check the chipset vendor/product ID. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- +-Return Value: +- TRUE Check ok +- FALSE Check fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p) +-{ +- /* always TRUE */ +- return TRUE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Init net device structure. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- *net_dev Point to the net device +- *pAd the raxx interface data pointer +- +-Return Value: +- TRUE Init ok +- FALSE Init fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXNetDevInit( +- IN void *_dev_p, +- IN struct net_device *net_dev, +- IN RTMP_ADAPTER *pAd) +-{ +- struct pci_dev *pci_dev = (struct pci_dev *)_dev_p; +- const CHAR *print_name; +- ULONG csr_addr; +- +- +- print_name = pci_dev ? pci_name(pci_dev) : "rt2860"; +- +- net_dev->base_addr = 0; +- net_dev->irq = 0; +- +- if (pci_request_regions(pci_dev, print_name)) +- goto err_out_free_netdev; +- +- // interrupt IRQ number +- net_dev->irq = pci_dev->irq; +- +- // map physical address to virtual address for accessing register +- csr_addr = (unsigned long) ioremap(pci_resource_start(pci_dev, 0), +- pci_resource_len(pci_dev, 0)); +- +- if (!csr_addr) +- { +- DBGPRINT(RT_DEBUG_ERROR, +- ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", +- print_name, (ULONG)pci_resource_len(pci_dev, 0), +- (ULONG)pci_resource_start(pci_dev, 0))); +- goto err_out_free_res; +- } +- +- // Save CSR virtual address and irq to device structure +- net_dev->base_addr = csr_addr; +- pAd->CSRBaseAddress = (PUCHAR)net_dev->base_addr; +- +- // Set DMA master +- pci_set_master(pci_dev); +- +- net_dev->priv_flags = INT_MAIN; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", +- net_dev->name, (ULONG)pci_resource_start(pci_dev, 0), +- (ULONG)csr_addr, pci_dev->irq)); +- return TRUE; +- +- +- /* --------------------------- ERROR HANDLE --------------------------- */ +-err_out_free_res: +- pci_release_regions(pci_dev); +-err_out_free_netdev: +- /* free netdev in caller, not here */ +- return FALSE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Init net device structure. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- *pAd the raxx interface data pointer +- +-Return Value: +- TRUE Config ok +- FALSE Config fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXProbePostConfig( +- IN void *_dev_p, +- IN RTMP_ADAPTER *pAd, +- IN INT32 argc) +-{ +- /* no use */ +- return TRUE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Disable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Enable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- int i = 0; +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); +- RTMPusecDelay(1000); +- i++; +- }while ( i <200); +- +- RTMPusecDelay(50); +- +- GloCfg.field.EnTXWriteBackDDONE = 1; +- GloCfg.field.WPDMABurstSIZE = 2; +- GloCfg.field.EnableRxDMA = 1; +- GloCfg.field.EnableTxDMA = 1; +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +-} +- +-/* +-======================================================================== +-Routine Description: +- Write Beacon buffer to Asic. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER *pAd, +- IN INT apidx, +- IN ULONG FrameLen, +- IN ULONG UpdatePos) +-{ +- ULONG CapInfoPos = 0; +- UCHAR *ptr, *ptr_update, *ptr_capinfo; +- UINT i; +- BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; +- +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s() : No valid Interface be found.\n", __func__)); +- return; +- } +- +- if (bBcnReq == FALSE) +- { +- /* when the ra interface is down, do not send its beacon frame */ +- /* clear all zero */ +- for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); +- } +- else +- { +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- +- for (i=0; iBeaconOffset[bcn_idx] + i, longptr); +- ptr += 4; +- } +- +- // Update CapabilityInfo in Beacon +- for (i = CapInfoPos; i < (CapInfoPos+2); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_capinfo); +- ptr_capinfo ++; +- } +- +- if (FrameLen > UpdatePos) +- { +- for (i= UpdatePos; i< (FrameLen); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_update); +- ptr_update ++; +- } +- } +- +- } +- +-} +- +-VOID RTMPInitPCIeLinkCtrlValue( +- IN PRTMP_ADAPTER pAd) +-{ +-} +- +-VOID RTMPFindHostPCIDev( +- IN PRTMP_ADAPTER pAd) +-{ +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Level = RESTORE_HALT : Restore PCI host and Ralink PCIe Link Control field to its default value. +- Level = Other Value : Restore from dot11 power save or radio off status. And force PCI host Link Control fields to 0x1 +- +- ======================================================================== +-*/ +-VOID RTMPPCIeLinkCtrlValueRestore( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) +-{ +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Max : limit Host PCI and Ralink PCIe device's LINK CONTROL field's value. +- Because now frequently set our device to mode 1 or mode 3 will cause problem. +- +- ======================================================================== +-*/ +-VOID RTMPPCIeLinkCtrlSetting( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Max) +-{ +-} +- +-VOID rt2860_stop(struct net_device *net_dev) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- if (net_dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- pAd = net_dev->ml_priv; +- +- if (pAd != NULL) +- { +- // stop interface +- netif_carrier_off(net_dev); +- netif_stop_queue(net_dev); +- +- // mark device as removed from system and therefore no longer available +- netif_device_detach(net_dev); +- +- // mark halt flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // take down the device +- rt28xx_close((PNET_DEV)net_dev); +- RT_MOD_DEC_USE_COUNT(); +- } +- return; +-} +- +-/* +- * invaild or writeback cache +- * and convert virtual address to physical address +- */ +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction) +-{ +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- +- /* +- ------ Porting Information ------ +- > For Tx Alloc: +- mgmt packets => sd_idx = 0 +- SwIdx: pAd->MgmtRing.TxCpuIdx +- pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa; +- +- data packets => sd_idx = 1 +- TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx +- QueIdx: pTxBlk->QueIdx +- pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa; +- +- > For Rx Alloc: +- sd_idx = -1 +- */ +- +- pAd = (PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- if (sd_idx == 1) +- { +- PTX_BLK pTxBlk; +- pTxBlk = (PTX_BLK)ptr; +- return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, direction); +- } +- else +- { +- return pci_map_single(pObj->pci_dev, ptr, size, direction); +- } +- +-} +- +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction) +-{ +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- +- pAd=(PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); +- +-} +- +diff --git a/drivers/staging/rt2860/Makefile b/drivers/staging/rt2860/Makefile +index c9fe925..4404ddb 100644 +--- a/drivers/staging/rt2860/Makefile ++++ b/drivers/staging/rt2860/Makefile +@@ -2,26 +2,33 @@ obj-$(CONFIG_RT2860) += rt2860sta.o + + # TODO: all of these should be removed + EXTRA_CFLAGS += -DLINUX -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT +-EXTRA_CFLAGS += -DRT2860 ++EXTRA_CFLAGS += -DRTMP_MAC_PCI -DRTMP_PCI_SUPPORT -DRT2860 + EXTRA_CFLAGS += -DDBG + + rt2860sta-objs := \ +- common/md5.o \ ++ common/crypt_md5.o \ ++ common/crypt_sha2.o \ ++ common/crypt_hmac.o \ + common/mlme.o \ +- common/rtmp_wep.o \ ++ common/cmm_wep.o \ + common/action.o \ + common/cmm_data.o \ + common/rtmp_init.o \ +- common/rtmp_tkip.o \ ++ common/cmm_tkip.o \ ++ common/cmm_aes.o \ + common/cmm_sync.o \ + common/eeprom.o \ + common/cmm_sanity.o \ + common/cmm_info.o \ ++ common/cmm_cfg.o \ + common/cmm_wpa.o \ + common/dfs.o \ + common/spectrum.o \ ++ common/rtmp_timer.o \ ++ common/rt_channel.o \ ++ common/cmm_profile.o \ ++ common/cmm_asic.o \ + sta/assoc.o \ +- sta/aironet.o \ + sta/auth.o \ + sta/auth_rsp.o \ + sta/sync.o \ +@@ -34,6 +41,9 @@ rt2860sta-objs := \ + rt_main_dev.o \ + sta_ioctl.o \ + common/ba_action.o \ +- common/2860_rtmp_init.o \ +- 2860_main_dev.o \ +- common/cmm_data_2860.o ++ pci_main_dev.o \ ++ rt_pci_rbus.o \ ++ common/cmm_mac_pci.o \ ++ common/cmm_data_pci.o \ ++ common/ee_prom.o \ ++ common/rtmp_mcu.o +diff --git a/drivers/staging/rt2860/aironet.h b/drivers/staging/rt2860/aironet.h +deleted file mode 100644 +index 1e07b19..0000000 +--- a/drivers/staging/rt2860/aironet.h ++++ /dev/null +@@ -1,210 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- aironet.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Paul Lin 04-06-15 Initial +-*/ +- +-#ifndef __AIRONET_H__ +-#define __AIRONET_H__ +- +-// Measurement Type definition +-#define MSRN_TYPE_UNUSED 0 +-#define MSRN_TYPE_CHANNEL_LOAD_REQ 1 +-#define MSRN_TYPE_NOISE_HIST_REQ 2 +-#define MSRN_TYPE_BEACON_REQ 3 +-#define MSRN_TYPE_FRAME_REQ 4 +- +-// Scan Mode in Beacon Request +-#define MSRN_SCAN_MODE_PASSIVE 0 +-#define MSRN_SCAN_MODE_ACTIVE 1 +-#define MSRN_SCAN_MODE_BEACON_TABLE 2 +- +-// PHY type definition for Aironet beacon report, CCX 2 table 36-9 +-#define PHY_FH 1 +-#define PHY_DSS 2 +-#define PHY_UNUSED 3 +-#define PHY_OFDM 4 +-#define PHY_HR_DSS 5 +-#define PHY_ERP 6 +- +-// RPI table in dBm +-#define RPI_0 0 // Power <= -87 +-#define RPI_1 1 // -87 < Power <= -82 +-#define RPI_2 2 // -82 < Power <= -77 +-#define RPI_3 3 // -77 < Power <= -72 +-#define RPI_4 4 // -72 < Power <= -67 +-#define RPI_5 5 // -67 < Power <= -62 +-#define RPI_6 6 // -62 < Power <= -57 +-#define RPI_7 7 // -57 < Power +- +-// Cisco Aironet IAPP definetions +-#define AIRONET_IAPP_TYPE 0x32 +-#define AIRONET_IAPP_SUBTYPE_REQUEST 0x01 +-#define AIRONET_IAPP_SUBTYPE_REPORT 0x81 +- +-// Measurement Request detail format +-typedef struct _MEASUREMENT_REQUEST { +- UCHAR Channel; +- UCHAR ScanMode; // Use only in beacon request, other requests did not use this field +- USHORT Duration; +-} MEASUREMENT_REQUEST, *PMEASUREMENT_REQUEST; +- +-// Beacon Measurement Report +-// All these field might change to UCHAR, because we didn't do anything to these report. +-// We copy all these beacons and report to CCX 2 AP. +-typedef struct _BEACON_REPORT { +- UCHAR Channel; +- UCHAR Spare; +- USHORT Duration; +- UCHAR PhyType; // Definiation is listed above table 36-9 +- UCHAR RxPower; +- UCHAR BSSID[6]; +- UCHAR ParentTSF[4]; +- UCHAR TargetTSF[8]; +- USHORT BeaconInterval; +- USHORT CapabilityInfo; +-} BEACON_REPORT, *PBEACON_REPORT; +- +-// Frame Measurement Report (Optional) +-typedef struct _FRAME_REPORT { +- UCHAR Channel; +- UCHAR Spare; +- USHORT Duration; +- UCHAR TA; +- UCHAR BSSID[6]; +- UCHAR RSSI; +- UCHAR Count; +-} FRAME_REPORT, *PFRAME_REPORT; +- +-#pragma pack(1) +-// Channel Load Report +-typedef struct _CHANNEL_LOAD_REPORT { +- UCHAR Channel; +- UCHAR Spare; +- USHORT Duration; +- UCHAR CCABusy; +-} CHANNEL_LOAD_REPORT, *PCHANNEL_LOAD_REPORT; +-#pragma pack() +- +-// Nosie Histogram Report +-typedef struct _NOISE_HIST_REPORT { +- UCHAR Channel; +- UCHAR Spare; +- USHORT Duration; +- UCHAR Density[8]; +-} NOISE_HIST_REPORT, *PNOISE_HIST_REPORT; +- +-// Radio Management Capability element +-typedef struct _RADIO_MANAGEMENT_CAPABILITY { +- UCHAR Eid; // TODO: Why the Eid is 1 byte, not normal 2 bytes??? +- UCHAR Length; +- UCHAR AironetOui[3]; // AIronet OUI (00 40 96) +- UCHAR Type; // Type / Version +- USHORT Status; // swap16 required +-} RADIO_MANAGEMENT_CAPABILITY, *PRADIO_MANAGEMENT_CAPABILITY; +- +-// Measurement Mode Bit definition +-typedef struct _MEASUREMENT_MODE { +- UCHAR Rsvd:4; +- UCHAR Report:1; +- UCHAR NotUsed:1; +- UCHAR Enable:1; +- UCHAR Parallel:1; +-} MEASUREMENT_MODE, *PMEASUREMENT_MODE; +- +-// Measurement Request element, This is little endian mode +-typedef struct _MEASUREMENT_REQUEST_ELEMENT { +- USHORT Eid; +- USHORT Length; // swap16 required +- USHORT Token; // non-zero unique token +- UCHAR Mode; // Measurement Mode +- UCHAR Type; // Measurement type +-} MEASUREMENT_REQUEST_ELEMENT, *PMEASUREMENT_REQUEST_ELEMENT; +- +-// Measurement Report element, This is little endian mode +-typedef struct _MEASUREMENT_REPORT_ELEMENT { +- USHORT Eid; +- USHORT Length; // swap16 required +- USHORT Token; // non-zero unique token +- UCHAR Mode; // Measurement Mode +- UCHAR Type; // Measurement type +-} MEASUREMENT_REPORT_ELEMENT, *PMEASUREMENT_REPORT_ELEMENT; +- +-// Cisco Aironet IAPP Frame Header, Network byte order used +-typedef struct _AIRONET_IAPP_HEADER { +- UCHAR CiscoSnapHeader[8]; // 8 bytes Cisco snap header +- USHORT Length; // IAPP ID & length, remember to swap16 in LE system +- UCHAR Type; // IAPP type +- UCHAR SubType; // IAPP subtype +- UCHAR DA[6]; // Destination MAC address +- UCHAR SA[6]; // Source MAC address +- USHORT Token; // Dialog token, no need to swap16 since it is for yoken usage only +-} AIRONET_IAPP_HEADER, *PAIRONET_IAPP_HEADER; +- +-// Radio Measurement Request frame +-typedef struct _AIRONET_RM_REQUEST_FRAME { +- AIRONET_IAPP_HEADER IAPP; // Common header +- UCHAR Delay; // Activation Delay +- UCHAR Offset; // Measurement offset +-} AIRONET_RM_REQUEST_FRAME, *PAIRONET_RM_REQUEST_FRAME; +- +-// Radio Measurement Report frame +-typedef struct _AIRONET_RM_REPORT_FRAME { +- AIRONET_IAPP_HEADER IAPP; // Common header +-} AIRONET_RM_REPORT_FRAME, *PAIRONET_RM_REPORT_FRAME; +- +-// Saved element request actions which will saved in StaCfg. +-typedef struct _RM_REQUEST_ACTION { +- MEASUREMENT_REQUEST_ELEMENT ReqElem; // Saved request element +- MEASUREMENT_REQUEST Measurement; // Saved measurement within the request element +-} RM_REQUEST_ACTION, *PRM_REQUEST_ACTION; +- +-// CCX administration control +-typedef union _CCX_CONTROL { +- struct { +- UINT32 Enable:1; // Enable CCX2 +- UINT32 LeapEnable:1; // Enable LEAP at CCX2 +- UINT32 RMEnable:1; // Radio Measurement Enable +- UINT32 DCRMEnable:1; // Non serving channel Radio Measurement enable +- UINT32 QOSEnable:1; // Enable QOS for CCX 2.0 support +- UINT32 FastRoamEnable:1; // Enable fast roaming +- UINT32 Rsvd:2; // Not used +- UINT32 dBmToRoam:8; // the condition to roam when receiving Rssi less than this value. It's negative value. +- UINT32 TuLimit:16; // Limit for different channel scan +- } field; +- UINT32 word; +-} CCX_CONTROL, *PCCX_CONTROL; +- +-#endif // __AIRONET_H__ +diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h +index fcdb358..6c58ce8 100644 +--- a/drivers/staging/rt2860/ap.h ++++ b/drivers/staging/rt2860/ap.h +@@ -40,22 +40,24 @@ + #ifndef __AP_H__ + #define __AP_H__ + +-// ap_mlme.c ++// ap_wpa.c ++VOID WpaStateMachineInit( ++ IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE *Sm, ++ OUT STATE_MACHINE_FUNC Trans[]); + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + VOID BeaconUpdateExec( + IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + VOID RTMPSetPiggyBack( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN bPiggyBack); + +-// ap.c +- + VOID MacTableReset( + IN PRTMP_ADAPTER pAd); + +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +new file mode 100644 +index 0000000..9ca9c36 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -0,0 +1,365 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ mac_pci.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __MAC_PCI_H__ ++#define __MAC_PCI_H__ ++ ++#include "../rtmp_type.h" ++#include "rtmp_mac.h" ++#include "rtmp_phy.h" ++#include "../rtmp_iface.h" ++#include "../rtmp_dot11.h" ++ ++ ++// ++// Device ID & Vendor ID related definitions, ++// NOTE: you should not add the new VendorID/DeviceID here unless you not sure it belongs to what chip. ++// ++#define NIC_PCI_VENDOR_ID 0x1814 ++#define PCIBUS_INTEL_VENDOR 0x8086 ++ ++#if !defined(PCI_CAP_ID_EXP) ++#define PCI_CAP_ID_EXP 0x10 ++#endif ++#if !defined(PCI_EXP_LNKCTL) ++#define PCI_EXP_LNKCTL 0x10 ++#endif ++#if !defined(PCI_CLASS_BRIDGE_PCI) ++#define PCI_CLASS_BRIDGE_PCI 0x0604 ++#endif ++ ++ ++ ++ ++ ++#define TXINFO_SIZE 0 ++#define RTMP_PKT_TAIL_PADDING 0 ++#define fRTMP_ADAPTER_NEED_STOP_TX 0 ++ ++#define AUX_CTRL 0x10c ++ ++// ++// TX descriptor format, Tx ring, Mgmt Ring ++// ++typedef struct PACKED _TXD_STRUC { ++ // Word 0 ++ UINT32 SDPtr0; ++ // Word 1 ++ UINT32 SDLen1:14; ++ UINT32 LastSec1:1; ++ UINT32 Burst:1; ++ UINT32 SDLen0:14; ++ UINT32 LastSec0:1; ++ UINT32 DMADONE:1; ++ //Word2 ++ UINT32 SDPtr1; ++ //Word3 ++ UINT32 rsv2:24; ++ UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition ++ UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA ++ UINT32 rsv:2; ++ UINT32 TCO:1; // ++ UINT32 UCO:1; // ++ UINT32 ICO:1; // ++} TXD_STRUC, *PTXD_STRUC; ++ ++ ++// ++// Rx descriptor format, Rx Ring ++// ++typedef struct PACKED _RXD_STRUC{ ++ // Word 0 ++ UINT32 SDP0; ++ // Word 1 ++ UINT32 SDL1:14; ++ UINT32 Rsv:2; ++ UINT32 SDL0:14; ++ UINT32 LS0:1; ++ UINT32 DDONE:1; ++ // Word 2 ++ UINT32 SDP1; ++ // Word 3 ++ UINT32 BA:1; ++ UINT32 DATA:1; ++ UINT32 NULLDATA:1; ++ UINT32 FRAG:1; ++ UINT32 U2M:1; // 1: this RX frame is unicast to me ++ UINT32 Mcast:1; // 1: this is a multicast frame ++ UINT32 Bcast:1; // 1: this is a broadcast frame ++ UINT32 MyBss:1; // 1: this frame belongs to the same BSSID ++ UINT32 Crc:1; // 1: CRC error ++ UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid ++ UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. ++ UINT32 HTC:1; ++ UINT32 RSSI:1; ++ UINT32 L2PAD:1; ++ UINT32 AMPDU:1; ++ UINT32 Decrypted:1; // this frame is being decrypted. ++ UINT32 PlcpSignal:1; // To be moved ++ UINT32 PlcpRssil:1;// To be moved ++ UINT32 Rsv1:13; ++} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; ++ ++ ++/* ----------------- EEPROM Related MACRO ----------------- */ ++ ++// 8051 firmware image for RT2860 - base address = 0x4000 ++#define FIRMWARE_IMAGE_BASE 0x2000 ++#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte ++ ++ ++/* ----------------- Frimware Related MACRO ----------------- */ ++#define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ ++ do{ \ ++ ULONG _i, _firm; \ ++ RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x10000); \ ++ \ ++ for(_i=0; _i<_FwLen; _i+=4) \ ++ { \ ++ _firm = _pFwImage[_i] + \ ++ (_pFwImage[_i+3] << 24) + \ ++ (_pFwImage[_i+2] << 16) + \ ++ (_pFwImage[_i+1] << 8); \ ++ RTMP_IO_WRITE32(_pAd, FIRMWARE_IMAGE_BASE + _i, _firm); \ ++ } \ ++ RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00000); \ ++ RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00001); \ ++ \ ++ /* initialize BBP R/W access agent */ \ ++ RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, 0); \ ++ RTMP_IO_WRITE32(_pAd, H2M_MAILBOX_CSR, 0); \ ++ }while(0) ++ ++ ++/* ----------------- TX Related MACRO ----------------- */ ++#define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) ++#define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) ++ ++ ++#define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ ++ ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ ++#define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ ++ do{}while(0) ++ ++#define NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, freeNum, _TxFrameType) \ ++ (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) ++ //(((freeNum) != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 1 /*0*/)) ++ ++ ++#define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ ++ RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) ++ ++#define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ ++ /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber)*/ ++ ++#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ ++ RtmpPCI_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) ++ ++#define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ ++ RtmpPCI_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) ++ ++#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ ++ RtmpPCI_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) ++ ++#define HAL_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) \ ++ RtmpPCI_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) ++ ++#define HAL_LastTxIdx(_pAd, _QueIdx,_LastTxIdx) \ ++ /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx)*/ ++ ++#define HAL_KickOutTx(_pAd, _pTxBlk, _QueIdx) \ ++ RTMP_IO_WRITE32((_pAd), TX_CTX_IDX0+((_QueIdx)*0x10), (_pAd)->TxRing[(_QueIdx)].TxCpuIdx) ++/* RtmpPCIDataKickOut(_pAd, _pTxBlk, _QueIdx)*/ ++ ++#define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ ++ MiniportMMRequest(_pAd, _QueIdx, _pNullFrame, _frameLen) ++ ++#define GET_TXRING_FREENO(_pAd, _QueIdx) \ ++ (_pAd->TxRing[_QueIdx].TxSwFreeIdx > _pAd->TxRing[_QueIdx].TxCpuIdx) ? \ ++ (_pAd->TxRing[_QueIdx].TxSwFreeIdx - _pAd->TxRing[_QueIdx].TxCpuIdx - 1) \ ++ : \ ++ (_pAd->TxRing[_QueIdx].TxSwFreeIdx + TX_RING_SIZE - _pAd->TxRing[_QueIdx].TxCpuIdx - 1); ++ ++ ++#define GET_MGMTRING_FREENO(_pAd) \ ++ (_pAd->MgmtRing.TxSwFreeIdx > _pAd->MgmtRing.TxCpuIdx) ? \ ++ (_pAd->MgmtRing.TxSwFreeIdx - _pAd->MgmtRing.TxCpuIdx - 1) \ ++ : \ ++ (_pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - _pAd->MgmtRing.TxCpuIdx - 1); ++ ++ ++/* ----------------- RX Related MACRO ----------------- */ ++ ++ ++/* ----------------- ASIC Related MACRO ----------------- */ ++// reset MAC of a station entry to 0x000000000000 ++#define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ ++ AsicDelWcidTab(pAd, Wcid); ++ ++// add this entry into ASIC RX WCID search table ++#define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ ++ AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); ++ ++// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++// Set MAC register value according operation mode ++#define RTMP_UPDATE_PROTECT(pAd) \ ++ AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0); ++// end johnli ++ ++// remove Pair-wise key material from ASIC ++#define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) \ ++ AsicRemovePairwiseKeyEntry(pAd, BssIdx, (UCHAR)Wcid); ++ ++// add Client security information into ASIC WCID table and IVEIV table ++#define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ ++ RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ ++ pAd->SharedKey[apidx][KeyID].CipherAlg, pEntry); ++ ++#define RTMP_SECURITY_KEY_ADD(pAd, apidx, KeyID, pEntry) \ ++ { /* update pairwise key information to ASIC Shared Key Table */ \ ++ AsicAddSharedKeyEntry(pAd, apidx, KeyID, \ ++ pAd->SharedKey[apidx][KeyID].CipherAlg, \ ++ pAd->SharedKey[apidx][KeyID].Key, \ ++ pAd->SharedKey[apidx][KeyID].TxMic, \ ++ pAd->SharedKey[apidx][KeyID].RxMic); \ ++ /* update ASIC WCID attribute table and IVEIV table */ \ ++ RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ ++ pAd->SharedKey[apidx][KeyID].CipherAlg, \ ++ pEntry); } ++ ++ ++// Insert the BA bitmap to ASIC for the Wcid entry ++#define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ ++ do{ \ ++ UINT32 _Value = 0, _Offset; \ ++ _Offset = MAC_WCID_BASE + (_Aid) * HW_WCID_ENTRY_SIZE + 4; \ ++ RTMP_IO_READ32((_pAd), _Offset, &_Value);\ ++ _Value |= (0x10000<<(_TID)); \ ++ RTMP_IO_WRITE32((_pAd), _Offset, _Value);\ ++ }while(0) ++ ++ ++// Remove the BA bitmap from ASIC for the Wcid entry ++// bitmap field starts at 0x10000 in ASIC WCID table ++#define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ ++ do{ \ ++ UINT32 _Value = 0, _Offset; \ ++ _Offset = MAC_WCID_BASE + (_Wcid) * HW_WCID_ENTRY_SIZE + 4; \ ++ RTMP_IO_READ32((_pAd), _Offset, &_Value); \ ++ _Value &= (~(0x10000 << (_TID))); \ ++ RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ ++ }while(0) ++ ++ ++/* ----------------- Interface Related MACRO ----------------- */ ++ ++// ++// Enable & Disable NIC interrupt via writing interrupt mask register ++// Since it use ADAPTER structure, it have to be put after structure definition. ++// ++#define RTMP_ASIC_INTERRUPT_DISABLE(_pAd) \ ++ do{ \ ++ RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, 0x0); /* 0: disable */ \ ++ RTMP_CLEAR_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ ++ }while(0) ++ ++#define RTMP_ASIC_INTERRUPT_ENABLE(_pAd)\ ++ do{ \ ++ RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, (_pAd)->int_enable_reg /*DELAYINTMASK*/); /* 1:enable */ \ ++ RTMP_SET_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ ++ }while(0) ++ ++ ++#define RTMP_IRQ_INIT(pAd) \ ++ { pAd->int_enable_reg = ((DELAYINTMASK) | \ ++ (RxINT|TxDataInt|TxMgmtInt)) & ~(0x03); \ ++ pAd->int_disable_mask = 0; \ ++ pAd->int_pending = 0; } ++ ++#define RTMP_IRQ_ENABLE(pAd) \ ++ { /* clear garbage ints */ \ ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff);\ ++ RTMP_ASIC_INTERRUPT_ENABLE(pAd); } ++ ++ ++/* ----------------- MLME Related MACRO ----------------- */ ++#define RTMP_MLME_HANDLER(pAd) MlmeHandler(pAd) ++ ++#define RTMP_MLME_PRE_SANITY_CHECK(pAd) ++ ++#define RTMP_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ ++ RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); ++ ++#define RTMP_MLME_RESET_STATE_MACHINE(pAd) \ ++ MlmeRestartStateMachine(pAd) ++ ++#define RTMP_HANDLE_COUNTER_MEASURE(_pAd, _pEntry)\ ++ HandleCounterMeasure(_pAd, _pEntry) ++ ++/* ----------------- Power Save Related MACRO ----------------- */ ++#define RTMP_PS_POLL_ENQUEUE(pAd) EnqueuePsPoll(pAd) ++ ++ ++// For RTMPPCIePowerLinkCtrlRestore () function ++#define RESTORE_HALT 1 ++#define RESTORE_WAKEUP 2 ++#define RESTORE_CLOSE 3 ++ ++#define PowerSafeCID 1 ++#define PowerRadioOffCID 2 ++#define PowerWakeCID 3 ++#define CID0MASK 0x000000ff ++#define CID1MASK 0x0000ff00 ++#define CID2MASK 0x00ff0000 ++#define CID3MASK 0xff000000 ++ ++ ++#define RTMP_STA_FORCE_WAKEUP(pAd, bFromTx) \ ++ RT28xxPciStaAsicForceWakeup(pAd, bFromTx); ++ ++#define RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ ++ RT28xxPciStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); ++ ++#define RTMP_SET_PSM_BIT(_pAd, _val) \ ++ MlmeSetPsmBit(_pAd, _val); ++ ++#define RTMP_MLME_RADIO_ON(pAd) \ ++ RT28xxPciMlmeRadioOn(pAd); ++ ++#define RTMP_MLME_RADIO_OFF(pAd) \ ++ RT28xxPciMlmeRadioOFF(pAd); ++ ++#endif //__MAC_PCI_H__ // +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +new file mode 100644 +index 0000000..5a85883 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -0,0 +1,365 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ mac_usb.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __MAC_USB_H__ ++#define __MAC_USB_H__ ++ ++#include "../rtmp_type.h" ++#include "rtmp_mac.h" ++#include "rtmp_phy.h" ++#include "../rtmp_iface.h" ++#include "../rtmp_dot11.h" ++ ++ ++#define USB_CYC_CFG 0x02a4 ++ ++#define BEACON_RING_SIZE 2 ++#define MGMTPIPEIDX 0 // EP6 is highest priority ++ ++#define RTMP_PKT_TAIL_PADDING 11 // 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) ++ ++#define fRTMP_ADAPTER_NEED_STOP_TX \ ++ (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS | \ ++ fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_BULKOUT_RESET | \ ++ fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_REMOVE_IN_PROGRESS) ++ ++// ++// RXINFO appends at the end of each rx packet. ++// ++#define RXINFO_SIZE 4 ++#define RT2870_RXDMALEN_FIELD_SIZE 4 ++ ++typedef struct PACKED _RXINFO_STRUC { ++ UINT32 BA:1; ++ UINT32 DATA:1; ++ UINT32 NULLDATA:1; ++ UINT32 FRAG:1; ++ UINT32 U2M:1; // 1: this RX frame is unicast to me ++ UINT32 Mcast:1; // 1: this is a multicast frame ++ UINT32 Bcast:1; // 1: this is a broadcast frame ++ UINT32 MyBss:1; // 1: this frame belongs to the same BSSID ++ UINT32 Crc:1; // 1: CRC error ++ UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid ++ UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. ++ UINT32 HTC:1; ++ UINT32 RSSI:1; ++ UINT32 L2PAD:1; ++ UINT32 AMPDU:1; // To be moved ++ UINT32 Decrypted:1; ++ UINT32 PlcpRssil:1; ++ UINT32 CipherAlg:1; ++ UINT32 LastAMSDU:1; ++ UINT32 PlcpSignal:12; ++} RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; ++ ++ ++// ++// TXINFO ++// ++#define TXINFO_SIZE 4 ++ ++typedef struct _TXINFO_STRUC { ++ // Word 0 ++ UINT32 USBDMATxPktLen:16; //used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. ++ UINT32 rsv:8; ++ UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition ++ UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA ++ UINT32 SwUseLastRound:1; // Software use. ++ UINT32 rsv2:2; // Software use. ++ UINT32 USBDMANextVLD:1; //used ONLY in USB bulk Aggregation, NextValid ++ UINT32 USBDMATxburst:1;//used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint ++} TXINFO_STRUC, *PTXINFO_STRUC; ++ ++ ++// ++// Management ring buffer format ++// ++typedef struct _MGMT_STRUC { ++ BOOLEAN Valid; ++ PUCHAR pBuffer; ++ ULONG Length; ++} MGMT_STRUC, *PMGMT_STRUC; ++ ++ ++//////////////////////////////////////////////////////////////////////////// ++// The TX_BUFFER structure forms the transmitted USB packet to the device ++//////////////////////////////////////////////////////////////////////////// ++typedef struct __TX_BUFFER{ ++ union{ ++ UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; ++ HEADER_802_11 NullFrame; ++ PSPOLL_FRAME PsPollPacket; ++ RTS_FRAME RTSFrame; ++ }field; ++ UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++} TX_BUFFER, *PTX_BUFFER; ++ ++typedef struct __HTTX_BUFFER{ ++ union{ ++ UCHAR WirelessPacket[MAX_TXBULK_SIZE]; ++ HEADER_802_11 NullFrame; ++ PSPOLL_FRAME PsPollPacket; ++ RTS_FRAME RTSFrame; ++ }field; ++ UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++} HTTX_BUFFER, *PHTTX_BUFFER; ++ ++ ++// used to track driver-generated write irps ++typedef struct _TX_CONTEXT ++{ ++ PVOID pAd; //Initialized in MiniportInitialize ++ PURB pUrb; //Initialized in MiniportInitialize ++ PIRP pIrp; //used to cancel pending bulk out. ++ //Initialized in MiniportInitialize ++ PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize ++ ULONG BulkOutSize; ++ UCHAR BulkOutPipeId; ++ UCHAR SelfIdx; ++ BOOLEAN InUse; ++ BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime. ++ BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout. ++ BOOLEAN IRPPending; ++ BOOLEAN LastOne; ++ BOOLEAN bAggregatible; ++ UCHAR Header_802_3[LENGTH_802_3]; ++ UCHAR Rsv[2]; ++ ULONG DataOffset; ++ UINT TxRate; ++ dma_addr_t data_dma; // urb dma on linux ++ ++} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; ++ ++ ++// used to track driver-generated write irps ++typedef struct _HT_TX_CONTEXT ++{ ++ PVOID pAd; //Initialized in MiniportInitialize ++ PURB pUrb; //Initialized in MiniportInitialize ++ PIRP pIrp; //used to cancel pending bulk out. ++ //Initialized in MiniportInitialize ++ PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize ++ ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission ++ UCHAR BulkOutPipeId; ++ BOOLEAN IRPPending; ++ BOOLEAN LastOne; ++ BOOLEAN bCurWriting; ++ BOOLEAN bRingEmpty; ++ BOOLEAN bCopySavePad; ++ UCHAR SavedPad[8]; ++ UCHAR Header_802_3[LENGTH_802_3]; ++ ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from. ++ ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to. ++ ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission ++ ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission ++ UINT TxRate; ++ dma_addr_t data_dma; // urb dma on linux ++} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; ++ ++ ++// ++// Structure to keep track of receive packets and buffers to indicate ++// receive data to the protocol. ++// ++typedef struct _RX_CONTEXT ++{ ++ PUCHAR TransferBuffer; ++ PVOID pAd; ++ PIRP pIrp;//used to cancel pending bulk in. ++ PURB pUrb; ++ //These 2 Boolean shouldn't both be 1 at the same time. ++ ULONG BulkInOffset; // number of packets waiting for reordering . ++// BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication ++ BOOLEAN bRxHandling; // Notify this packet is being process now. ++ BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet. ++ BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet. ++ BOOLEAN IRPPending; // TODO: To be removed ++ atomic_t IrpLock; ++ NDIS_SPIN_LOCK RxContextLock; ++ dma_addr_t data_dma; // urb dma on linux ++} RX_CONTEXT, *PRX_CONTEXT; ++ ++ ++ ++/****************************************************************************** ++ ++ USB Frimware Related MACRO ++ ++******************************************************************************/ ++// 8051 firmware image for usb - use last-half base address = 0x3000 ++#define FIRMWARE_IMAGE_BASE 0x3000 ++#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte ++ ++#define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ ++ RTUSBFirmwareWrite(_pAd, _pFwImage, _FwLen) ++ ++ ++ ++/****************************************************************************** ++ ++ USB TX Related MACRO ++ ++******************************************************************************/ ++#define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) \ ++ do{ \ ++ RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ ++ if (pAd->DeQueueRunning[QueIdx]) \ ++ { \ ++ RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ ++ DBGPRINT(RT_DEBUG_OFF, ("DeQueueRunning[%d]= TRUE!\n", QueIdx)); \ ++ continue; \ ++ } \ ++ else \ ++ { \ ++ pAd->DeQueueRunning[QueIdx] = TRUE; \ ++ RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ ++ } \ ++ }while(0) ++ ++#define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) \ ++ do{ \ ++ RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ ++ pAd->DeQueueRunning[QueIdx] = FALSE; \ ++ RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ ++ }while(0) ++ ++#define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ ++ (RTUSBFreeDescriptorRequest(pAd, pTxBlk->QueIdx, (pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket))) == NDIS_STATUS_SUCCESS) ++ ++#define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ ++ do{}while(0) ++ ++#define NEED_QUEUE_BACK_FOR_AGG(_pAd, _QueIdx, _freeNum, _TxFrameType) \ ++ ((_TxFrameType == TX_RALINK_FRAME) && (RTUSBNeedQueueBackForAgg(_pAd, _QueIdx))) ++ ++#define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ ++ RtmpUSB_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) ++ ++#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ ++ RtmpUSB_WriteSingleTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) ++ ++#define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ ++ RtmpUSB_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) ++ ++#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ ++ RtmpUSB_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) ++ ++#define HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) \ ++ RtmpUSB_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) ++ ++#define HAL_LastTxIdx(pAd, QueIdx,TxIdx) \ ++ /*RtmpUSBDataLastTxIdx(pAd, QueIdx,TxIdx)*/ ++ ++#define HAL_KickOutTx(pAd, pTxBlk, QueIdx) \ ++ RtmpUSBDataKickOut(pAd, pTxBlk, QueIdx) ++ ++#define HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen) \ ++ RtmpUSBMgmtKickOut(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen) ++ ++#define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ ++ RtmpUSBNullFrameKickOut(_pAd, _QueIdx, _pNullFrame, _frameLen) ++ ++#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx) ++#define GET_MGMTRING_FREENO(_pAd) (_pAd->MgmtRing.TxSwFreeIdx) ++ ++ ++/* ----------------- RX Related MACRO ----------------- */ ++ ++ ++/* ++ * Device Hardware Interface Related MACRO ++ */ ++#define RTMP_IRQ_INIT(pAd) do{}while(0) ++#define RTMP_IRQ_ENABLE(pAd) do{}while(0) ++ ++ ++/* ++ * MLME Related MACRO ++ */ ++#define RTMP_MLME_HANDLER(pAd) RTUSBMlmeUp(pAd) ++ ++#define RTMP_MLME_PRE_SANITY_CHECK(pAd) \ ++ { if ((pAd->CommonCfg.bHardwareRadio == TRUE) && \ ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && \ ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) { \ ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_CHECK_GPIO, NULL, 0); } } ++ ++#define RTMP_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ ++ { RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_QKERIODIC_EXECUT, NULL, 0); \ ++ RTUSBMlmeUp(pAd); } ++ ++#define RTMP_MLME_RESET_STATE_MACHINE(pAd) \ ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_RESET_CONF, 0, NULL); \ ++ RTUSBMlmeUp(pAd); ++ ++#define RTMP_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ ++ { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(MAC_TABLE_ENTRY)); \ ++ RTUSBMlmeUp(_pAd); \ ++ } ++ ++ ++/* ++ * Power Save Related MACRO ++ */ ++#define RTMP_PS_POLL_ENQUEUE(pAd) \ ++ { RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL); \ ++ RTUSBKickBulkOut(pAd); } ++ ++#define RTMP_STA_FORCE_WAKEUP(_pAd, bFromTx) \ ++ RT28xxUsbStaAsicForceWakeup(_pAd, bFromTx); ++ ++#define RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ ++ RT28xxUsbStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); ++ ++#define RTMP_SET_PSM_BIT(_pAd, _val) \ ++ {\ ++ if ((_pAd)->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP) \ ++ MlmeSetPsmBit(_pAd, _val);\ ++ else \ ++ { \ ++ USHORT _psm_val; \ ++ _psm_val = _val; \ ++ RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_SET_PSM_BIT, &(_psm_val), sizeof(USHORT)); \ ++ }\ ++ } ++ ++#define RTMP_MLME_RADIO_ON(pAd) \ ++ RT28xxUsbMlmeRadioOn(pAd); ++ ++#define RTMP_MLME_RADIO_OFF(pAd) \ ++ RT28xxUsbMlmeRadioOFF(pAd); ++ ++#endif //__MAC_USB_H__ // +diff --git a/drivers/staging/rt2860/chip/rt2860.h b/drivers/staging/rt2860/chip/rt2860.h +new file mode 100644 +index 0000000..2989d09 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rt2860.h +@@ -0,0 +1,56 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++ ++#ifndef __RT2860_H__ ++#define __RT2860_H__ ++ ++#include "mac_pci.h" ++ ++#ifndef RTMP_PCI_SUPPORT ++#error "For RT2860, you should define the compile flag -DRTMP_PCI_SUPPORT" ++#endif ++ ++#ifndef RTMP_MAC_PCI ++#error "For RT2880, you should define the compile flag -DRTMP_MAC_PCI" ++#endif ++ ++// ++// Device ID & Vendor ID, these values should match EEPROM value ++// ++#define NIC2860_PCI_DEVICE_ID 0x0601 ++#define NIC2860_PCIe_DEVICE_ID 0x0681 ++#define NIC2760_PCI_DEVICE_ID 0x0701 // 1T/2R Cardbus ??? ++#define NIC2790_PCIe_DEVICE_ID 0x0781 // 1T/2R miniCard ++ ++ ++#define VEN_AWT_PCIe_DEVICE_ID 0x1059 ++#define VEN_AWT_PCI_VENDOR_ID 0x1A3B ++ ++#define EDIMAX_PCI_VENDOR_ID 0x1432 ++ ++ ++#endif //__RT2860_H__ // +diff --git a/drivers/staging/rt2860/chip/rt2870.h b/drivers/staging/rt2860/chip/rt2870.h +new file mode 100644 +index 0000000..a930925 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rt2870.h +@@ -0,0 +1,47 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++#ifndef __RT2870_H__ ++#define __RT2870_H__ ++ ++#ifdef RT2870 ++ ++#ifndef RTMP_USB_SUPPORT ++#error "For RT2870, you should define the compile flag -DRTMP_USB_SUPPORT" ++#endif ++ ++#ifndef RTMP_MAC_USB ++#error "For RT2870, you should define the compile flag -DRTMP_MAC_USB" ++#endif ++ ++#include "../rtmp_type.h" ++#include "mac_usb.h" ++ ++ ++//#define RTMP_CHIP_NAME "RT2870" ++ ++#endif // RT2870 // ++#endif //__RT2870_H__ // +diff --git a/drivers/staging/rt2860/chip/rt3070.h b/drivers/staging/rt2860/chip/rt3070.h +new file mode 100644 +index 0000000..87df99a +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rt3070.h +@@ -0,0 +1,68 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt3070.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __RT3070_H__ ++#define __RT3070_H__ ++ ++#ifdef RT3070 ++ ++ ++#ifndef RTMP_USB_SUPPORT ++#error "For RT3070, you should define the compile flag -DRTMP_USB_SUPPORT" ++#endif ++ ++#ifndef RTMP_MAC_USB ++#error "For RT3070, you should define the compile flag -DRTMP_MAC_USB" ++#endif ++ ++#ifndef RTMP_RF_RW_SUPPORT ++#error "For RT3070, you should define the compile flag -DRTMP_RF_RW_SUPPORT" ++#endif ++ ++#ifndef RT30xx ++#error "For RT3070, you should define the compile flag -DRT30xx" ++#endif ++ ++#include "mac_usb.h" ++#include "rt30xx.h" ++ ++// ++// Device ID & Vendor ID, these values should match EEPROM value ++// ++ ++#endif // RT3070 // ++ ++#endif //__RT3070_H__ // +diff --git a/drivers/staging/rt2860/chip/rt30xx.h b/drivers/staging/rt2860/chip/rt30xx.h +new file mode 100644 +index 0000000..70971a0 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rt30xx.h +@@ -0,0 +1,48 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt30xx.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __RT30XX_H__ ++#define __RT30XX_H__ ++ ++#ifdef RT30xx ++ ++ ++extern REG_PAIR RT30xx_RFRegTable[]; ++extern UCHAR NUM_RF_REG_PARMS; ++ ++#endif // RT30xx // ++ ++#endif //__RT30XX_H__ // +diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h +new file mode 100644 +index 0000000..3ddb0bf +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rtmp_mac.h +@@ -0,0 +1,1334 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_mac.h ++ ++ Abstract: ++ Ralink Wireless Chip MAC related definition & structures ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifndef __RTMP_MAC_H__ ++#define __RTMP_MAC_H__ ++ ++ ++ ++// ================================================================================= ++// TX / RX ring descriptor format ++// ================================================================================= ++ ++// the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO. ++// MAC block use this TXINFO to control the transmission behavior of this frame. ++#define FIFO_MGMT 0 ++#define FIFO_HCCA 1 ++#define FIFO_EDCA 2 ++ ++ ++// ++// TXD Wireless Information format for Tx ring and Mgmt Ring ++// ++//txop : for txop mode ++// 0:txop for the MPDU frame will be handles by ASIC by register ++// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS ++typedef struct PACKED _TXWI_STRUC { ++ // Word 0 ++ // ex: 00 03 00 40 means txop = 3, PHYMODE = 1 ++ UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. ++ UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode ++ UINT32 CFACK:1; ++ UINT32 TS:1; ++ ++ UINT32 AMPDU:1; ++ UINT32 MpduDensity:3; ++ UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. ++ UINT32 rsv:6; ++ ++ UINT32 MCS:7; ++ UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz ++ UINT32 ShortGI:1; ++ UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE ++ UINT32 Ifs:1; // ++// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz ++ UINT32 rsv2:1; ++ UINT32 TxBF:1; // 3*3 ++ UINT32 PHYMODE:2; ++ // Word1 ++ // ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 ++ UINT32 ACK:1; ++ UINT32 NSEQ:1; ++ UINT32 BAWinSize:6; ++ UINT32 WirelessCliID:8; ++ UINT32 MPDUtotalByteCount:12; ++ UINT32 PacketId:4; ++ //Word2 ++ UINT32 IV; ++ //Word3 ++ UINT32 EIV; ++} TXWI_STRUC, *PTXWI_STRUC; ++ ++ ++// ++// RXWI wireless information format, in PBF. invisible in driver. ++// ++typedef struct PACKED _RXWI_STRUC { ++ // Word 0 ++ UINT32 WirelessCliID:8; ++ UINT32 KeyIndex:2; ++ UINT32 BSSID:3; ++ UINT32 UDF:3; ++ UINT32 MPDUtotalByteCount:12; ++ UINT32 TID:4; ++ // Word 1 ++ UINT32 FRAG:4; ++ UINT32 SEQUENCE:12; ++ UINT32 MCS:7; ++ UINT32 BW:1; ++ UINT32 ShortGI:1; ++ UINT32 STBC:2; ++ UINT32 rsv:3; ++ UINT32 PHYMODE:2; // 1: this RX frame is unicast to me ++ //Word2 ++ UINT32 RSSI0:8; ++ UINT32 RSSI1:8; ++ UINT32 RSSI2:8; ++ UINT32 rsv1:8; ++ //Word3 ++ UINT32 SNR0:8; ++ UINT32 SNR1:8; ++ UINT32 FOFFSET:8; // RT35xx ++ UINT32 rsv2:8; ++ /*UINT32 rsv2:16;*/ ++} RXWI_STRUC, *PRXWI_STRUC; ++ ++ ++// ================================================================================= ++// Register format ++// ================================================================================= ++ ++ ++// ++// SCH/DMA registers - base address 0x0200 ++// ++// INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit ++// ++#define DMA_CSR0 0x200 ++#define INT_SOURCE_CSR 0x200 ++typedef union _INT_SOURCE_CSR_STRUC { ++ struct { ++ UINT32 RxDelayINT:1; ++ UINT32 TxDelayINT:1; ++ UINT32 RxDone:1; ++ UINT32 Ac0DmaDone:1;//4 ++ UINT32 Ac1DmaDone:1; ++ UINT32 Ac2DmaDone:1; ++ UINT32 Ac3DmaDone:1; ++ UINT32 HccaDmaDone:1; // bit7 ++ UINT32 MgmtDmaDone:1; ++ UINT32 MCUCommandINT:1;//bit 9 ++ UINT32 RxTxCoherent:1; ++ UINT32 TBTTInt:1; ++ UINT32 PreTBTT:1; ++ UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c ++ UINT32 AutoWakeup:1;//bit14 ++ UINT32 GPTimer:1; ++ UINT32 RxCoherent:1;//bit16 ++ UINT32 TxCoherent:1; ++ UINT32 :14; ++ } field; ++ UINT32 word; ++} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; ++ ++// ++// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF ++// ++#define INT_MASK_CSR 0x204 ++typedef union _INT_MASK_CSR_STRUC { ++ struct { ++ UINT32 RXDelay_INT_MSK:1; ++ UINT32 TxDelay:1; ++ UINT32 RxDone:1; ++ UINT32 Ac0DmaDone:1; ++ UINT32 Ac1DmaDone:1; ++ UINT32 Ac2DmaDone:1; ++ UINT32 Ac3DmaDone:1; ++ UINT32 HccaDmaDone:1; ++ UINT32 MgmtDmaDone:1; ++ UINT32 MCUCommandINT:1; ++ UINT32 :20; ++ UINT32 RxCoherent:1; ++ UINT32 TxCoherent:1; ++ } field; ++ UINT32 word; ++} INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; ++ ++#define WPDMA_GLO_CFG 0x208 ++typedef union _WPDMA_GLO_CFG_STRUC { ++ struct { ++ UINT32 EnableTxDMA:1; ++ UINT32 TxDMABusy:1; ++ UINT32 EnableRxDMA:1; ++ UINT32 RxDMABusy:1; ++ UINT32 WPDMABurstSIZE:2; ++ UINT32 EnTXWriteBackDDONE:1; ++ UINT32 BigEndian:1; ++ UINT32 RXHdrScater:8; ++ UINT32 HDR_SEG_LEN:16; ++ } field; ++ UINT32 word; ++} WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; ++ ++#define WPDMA_RST_IDX 0x20c ++typedef union _WPDMA_RST_IDX_STRUC { ++ struct { ++ UINT32 RST_DTX_IDX0:1; ++ UINT32 RST_DTX_IDX1:1; ++ UINT32 RST_DTX_IDX2:1; ++ UINT32 RST_DTX_IDX3:1; ++ UINT32 RST_DTX_IDX4:1; ++ UINT32 RST_DTX_IDX5:1; ++ UINT32 rsv:10; ++ UINT32 RST_DRX_IDX0:1; ++ UINT32 :15; ++ } field; ++ UINT32 word; ++} WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; ++#define DELAY_INT_CFG 0x0210 ++typedef union _DELAY_INT_CFG_STRUC { ++ struct { ++ UINT32 RXMAX_PTIME:8; ++ UINT32 RXMAX_PINT:7; ++ UINT32 RXDLY_INT_EN:1; ++ UINT32 TXMAX_PTIME:8; ++ UINT32 TXMAX_PINT:7; ++ UINT32 TXDLY_INT_EN:1; ++ } field; ++ UINT32 word; ++} DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; ++#define WMM_AIFSN_CFG 0x0214 ++typedef union _AIFSN_CSR_STRUC { ++ struct { ++ UINT32 Aifsn0:4; // for AC_BE ++ UINT32 Aifsn1:4; // for AC_BK ++ UINT32 Aifsn2:4; // for AC_VI ++ UINT32 Aifsn3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; ++// ++// CWMIN_CSR: CWmin for each EDCA AC ++// ++#define WMM_CWMIN_CFG 0x0218 ++typedef union _CWMIN_CSR_STRUC { ++ struct { ++ UINT32 Cwmin0:4; // for AC_BE ++ UINT32 Cwmin1:4; // for AC_BK ++ UINT32 Cwmin2:4; // for AC_VI ++ UINT32 Cwmin3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; ++ ++// ++// CWMAX_CSR: CWmin for each EDCA AC ++// ++#define WMM_CWMAX_CFG 0x021c ++typedef union _CWMAX_CSR_STRUC { ++ struct { ++ UINT32 Cwmax0:4; // for AC_BE ++ UINT32 Cwmax1:4; // for AC_BK ++ UINT32 Cwmax2:4; // for AC_VI ++ UINT32 Cwmax3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; ++ ++ ++// ++// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register ++// ++#define WMM_TXOP0_CFG 0x0220 ++typedef union _AC_TXOP_CSR0_STRUC { ++ struct { ++ USHORT Ac0Txop; // for AC_BK, in unit of 32us ++ USHORT Ac1Txop; // for AC_BE, in unit of 32us ++ } field; ++ UINT32 word; ++} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; ++ ++// ++// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register ++// ++#define WMM_TXOP1_CFG 0x0224 ++typedef union _AC_TXOP_CSR1_STRUC { ++ struct { ++ USHORT Ac2Txop; // for AC_VI, in unit of 32us ++ USHORT Ac3Txop; // for AC_VO, in unit of 32us ++ } field; ++ UINT32 word; ++} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; ++ ++ ++#define RINGREG_DIFF 0x10 ++#define GPIO_CTRL_CFG 0x0228 //MAC_CSR13 ++#define MCU_CMD_CFG 0x022c ++#define TX_BASE_PTR0 0x0230 //AC_BK base address ++#define TX_MAX_CNT0 0x0234 ++#define TX_CTX_IDX0 0x0238 ++#define TX_DTX_IDX0 0x023c ++#define TX_BASE_PTR1 0x0240 //AC_BE base address ++#define TX_MAX_CNT1 0x0244 ++#define TX_CTX_IDX1 0x0248 ++#define TX_DTX_IDX1 0x024c ++#define TX_BASE_PTR2 0x0250 //AC_VI base address ++#define TX_MAX_CNT2 0x0254 ++#define TX_CTX_IDX2 0x0258 ++#define TX_DTX_IDX2 0x025c ++#define TX_BASE_PTR3 0x0260 //AC_VO base address ++#define TX_MAX_CNT3 0x0264 ++#define TX_CTX_IDX3 0x0268 ++#define TX_DTX_IDX3 0x026c ++#define TX_BASE_PTR4 0x0270 //HCCA base address ++#define TX_MAX_CNT4 0x0274 ++#define TX_CTX_IDX4 0x0278 ++#define TX_DTX_IDX4 0x027c ++#define TX_BASE_PTR5 0x0280 //MGMT base address ++#define TX_MAX_CNT5 0x0284 ++#define TX_CTX_IDX5 0x0288 ++#define TX_DTX_IDX5 0x028c ++#define TX_MGMTMAX_CNT TX_MAX_CNT5 ++#define TX_MGMTCTX_IDX TX_CTX_IDX5 ++#define TX_MGMTDTX_IDX TX_DTX_IDX5 ++#define RX_BASE_PTR 0x0290 //RX base address ++#define RX_MAX_CNT 0x0294 ++#define RX_CRX_IDX 0x0298 ++#define RX_DRX_IDX 0x029c ++ ++ ++#define USB_DMA_CFG 0x02a0 ++typedef union _USB_DMA_CFG_STRUC { ++ struct { ++ UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns ++ UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes ++ UINT32 phyclear:1; //phy watch dog enable. write 1 ++ UINT32 rsv:2; ++ UINT32 TxClear:1; //Clear USB DMA TX path ++ UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. ++ UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation ++ UINT32 RxBulkEn:1; //Enable USB DMA Rx ++ UINT32 TxBulkEn:1; //Enable USB DMA Tx ++ UINT32 EpoutValid:6; //OUT endpoint data valid ++ UINT32 RxBusy:1; //USB DMA RX FSM busy ++ UINT32 TxBusy:1; //USB DMA TX FSM busy ++ } field; ++ UINT32 word; ++} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; ++ ++ ++// ++// 3 PBF registers ++// ++// ++// Most are for debug. Driver doesn't touch PBF register. ++#define PBF_SYS_CTRL 0x0400 ++#define PBF_CFG 0x0408 ++#define PBF_MAX_PCNT 0x040C ++#define PBF_CTRL 0x0410 ++#define PBF_INT_STA 0x0414 ++#define PBF_INT_ENA 0x0418 ++#define TXRXQ_PCNT 0x0438 ++#define PBF_DBG 0x043c ++#define PBF_CAP_CTRL 0x0440 ++ ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT ++// eFuse registers ++#define EFUSE_CTRL 0x0580 ++#define EFUSE_DATA0 0x0590 ++#define EFUSE_DATA1 0x0594 ++#define EFUSE_DATA2 0x0598 ++#define EFUSE_DATA3 0x059c ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // ++ ++#define OSC_CTRL 0x5a4 ++#define PCIE_PHY_TX_ATTENUATION_CTRL 0x05C8 ++#define LDO_CFG0 0x05d4 ++#define GPIO_SWITCH 0x05dc ++ ++ ++// ++// 4 MAC registers ++// ++// ++// 4.1 MAC SYSTEM configuration registers (offset:0x1000) ++// ++#define MAC_CSR0 0x1000 ++typedef union _ASIC_VER_ID_STRUC { ++ struct { ++ USHORT ASICRev; // reversion : 0 ++ USHORT ASICVer; // version : 2860 ++ } field; ++ UINT32 word; ++} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; ++#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 ++#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 ++#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 ++// ++// MAC_CSR2: STA MAC register 0 ++// ++typedef union _MAC_DW0_STRUC { ++ struct { ++ UCHAR Byte0; // MAC address byte 0 ++ UCHAR Byte1; // MAC address byte 1 ++ UCHAR Byte2; // MAC address byte 2 ++ UCHAR Byte3; // MAC address byte 3 ++ } field; ++ UINT32 word; ++} MAC_DW0_STRUC, *PMAC_DW0_STRUC; ++ ++// ++// MAC_CSR3: STA MAC register 1 ++// ++typedef union _MAC_DW1_STRUC { ++ struct { ++ UCHAR Byte4; // MAC address byte 4 ++ UCHAR Byte5; // MAC address byte 5 ++ UCHAR U2MeMask; ++ UCHAR Rsvd1; ++ } field; ++ UINT32 word; ++} MAC_DW1_STRUC, *PMAC_DW1_STRUC; ++ ++#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 ++#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 ++ ++// ++// MAC_CSR5: BSSID register 1 ++// ++typedef union _MAC_CSR5_STRUC { ++ struct { ++ UCHAR Byte4; // BSSID byte 4 ++ UCHAR Byte5; // BSSID byte 5 ++ USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID ++ USHORT MBssBcnNum:3; ++ USHORT Rsvd:11; ++ } field; ++ UINT32 word; ++} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; ++ ++#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 ++#define BBP_CSR_CFG 0x101c // ++// ++// BBP_CSR_CFG: BBP serial control register ++// ++typedef union _BBP_CSR_CFG_STRUC { ++ struct { ++ UINT32 Value:8; // Register value to program into BBP ++ UINT32 RegNum:8; // Selected BBP register ++ UINT32 fRead:1; // 0: Write BBP, 1: Read BBP ++ UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. ++ UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles ++ UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel ++ UINT32 :12; ++ } field; ++ UINT32 word; ++} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; ++#define RF_CSR_CFG0 0x1020 ++// ++// RF_CSR_CFG: RF control register ++// ++typedef union _RF_CSR_CFG0_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 bitwidth:5; // Selected BBP register ++ UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby ++ UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate ++ UINT32 Busy:1; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; ++#define RF_CSR_CFG1 0x1024 ++typedef union _RF_CSR_CFG1_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) ++ UINT32 rsv:7; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; ++#define RF_CSR_CFG2 0x1028 // ++typedef union _RF_CSR_CFG2_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 rsv:8; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; ++#define LED_CFG 0x102c // MAC_CSR14 ++typedef union _LED_CFG_STRUC { ++ struct { ++ UINT32 OnPeriod:8; // blinking on period unit 1ms ++ UINT32 OffPeriod:8; // blinking off period unit 1ms ++ UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms ++ UINT32 rsv:2; ++ UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on ++ UINT32 GLedMode:2; // green Led Mode ++ UINT32 YLedMode:2; // yellow Led Mode ++ UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high ++ UINT32 :1; ++ } field; ++ UINT32 word; ++} LED_CFG_STRUC, *PLED_CFG_STRUC; ++// ++// 4.2 MAC TIMING configuration registers (offset:0x1100) ++// ++#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 ++typedef union _IFS_SLOT_CFG_STRUC { ++ struct { ++ UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX ++ UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX ++ UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND ++ UINT32 EIFS:9; // unit 1us ++ UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer ++ UINT32 rsv:2; ++ } field; ++ UINT32 word; ++} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; ++ ++#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits ++#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) ++#define CH_TIME_CFG 0x110C // Count as channel busy ++#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us ++#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 ++ ++#define BCN_OFFSET0 0x042C ++#define BCN_OFFSET1 0x0430 ++ ++// ++// BCN_TIME_CFG : Synchronization control register ++// ++typedef union _BCN_TIME_CFG_STRUC { ++ struct { ++ UINT32 BeaconInterval:16; // in unit of 1/16 TU ++ UINT32 bTsfTicking:1; // Enable TSF auto counting ++ UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode ++ UINT32 bTBTTEnable:1; ++ UINT32 bBeaconGen:1; // Enable beacon generator ++ UINT32 :3; ++ UINT32 TxTimestampCompensate:8; ++ } field; ++ UINT32 word; ++} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; ++#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 ++#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only ++#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. ++#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 ++#define INT_TIMER_CFG 0x1128 // ++#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable ++#define CH_IDLE_STA 0x1130 // channel idle time ++#define CH_BUSY_STA 0x1134 // channle busy time ++// ++// 4.2 MAC POWER configuration registers (offset:0x1200) ++// ++#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 ++#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 ++#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 ++// ++// AUTO_WAKEUP_CFG: Manual power control / status register ++// ++typedef union _AUTO_WAKEUP_STRUC { ++ struct { ++ UINT32 AutoLeadTime:8; ++ UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set ++ UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake ++ UINT32 :16; ++ } field; ++ UINT32 word; ++} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; ++// ++// 4.3 MAC TX configuration registers (offset:0x1300) ++// ++ ++#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 ++#define EDCA_AC1_CFG 0x1304 ++#define EDCA_AC2_CFG 0x1308 ++#define EDCA_AC3_CFG 0x130c ++typedef union _EDCA_AC_CFG_STRUC { ++ struct { ++ UINT32 AcTxop:8; // in unit of 32us ++ UINT32 Aifsn:4; // # of slot time ++ UINT32 Cwmin:4; // ++ UINT32 Cwmax:4; //unit power of 2 ++ UINT32 :12; // ++ } field; ++ UINT32 word; ++} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; ++ ++#define EDCA_TID_AC_MAP 0x1310 ++#define TX_PWR_CFG_0 0x1314 ++#define TX_PWR_CFG_1 0x1318 ++#define TX_PWR_CFG_2 0x131C ++#define TX_PWR_CFG_3 0x1320 ++#define TX_PWR_CFG_4 0x1324 ++#define TX_PIN_CFG 0x1328 ++#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz ++#define TX_SW_CFG0 0x1330 ++#define TX_SW_CFG1 0x1334 ++#define TX_SW_CFG2 0x1338 ++#define TXOP_THRES_CFG 0x133c ++#define TXOP_CTRL_CFG 0x1340 ++#define TX_RTS_CFG 0x1344 ++ ++typedef union _TX_RTS_CFG_STRUC { ++ struct { ++ UINT32 AutoRtsRetryLimit:8; ++ UINT32 RtsThres:16; // unit:byte ++ UINT32 RtsFbkEn:1; // enable rts rate fallback ++ UINT32 rsv:7; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; ++#define TX_TIMEOUT_CFG 0x1348 ++typedef union _TX_TIMEOUT_CFG_STRUC { ++ struct { ++ UINT32 rsv:4; ++ UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us ++ UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure ++ UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) ++ UINT32 rsv2:8; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; ++#define TX_RTY_CFG 0x134c ++typedef union PACKED _TX_RTY_CFG_STRUC { ++ struct { ++ UINT32 ShortRtyLimit:8; // short retry limit ++ UINT32 LongRtyLimit:8; //long retry limit ++ UINT32 LongRtyThre:12; // Long retry threshoold ++ UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer ++ UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer ++ UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable ++ UINT32 rsv:1; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; ++#define TX_LINK_CFG 0x1350 ++typedef union PACKED _TX_LINK_CFG_STRUC { ++ struct PACKED { ++ UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us ++ UINT32 MFBEnable:1; // TX apply remote MFB 1:enable ++ UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) ++ UINT32 TxMRQEn:1; // MCS request TX enable ++ UINT32 TxRDGEn:1; // RDG TX enable ++ UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable ++ UINT32 rsv:3; // ++ UINT32 RemotMFB:8; // remote MCS feedback ++ UINT32 RemotMFS:8; //remote MCS feedback sequence number ++ } field; ++ UINT32 word; ++} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; ++#define HT_FBK_CFG0 0x1354 ++typedef union PACKED _HT_FBK_CFG0_STRUC { ++ struct { ++ UINT32 HTMCS0FBK:4; ++ UINT32 HTMCS1FBK:4; ++ UINT32 HTMCS2FBK:4; ++ UINT32 HTMCS3FBK:4; ++ UINT32 HTMCS4FBK:4; ++ UINT32 HTMCS5FBK:4; ++ UINT32 HTMCS6FBK:4; ++ UINT32 HTMCS7FBK:4; ++ } field; ++ UINT32 word; ++} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; ++#define HT_FBK_CFG1 0x1358 ++typedef union _HT_FBK_CFG1_STRUC { ++ struct { ++ UINT32 HTMCS8FBK:4; ++ UINT32 HTMCS9FBK:4; ++ UINT32 HTMCS10FBK:4; ++ UINT32 HTMCS11FBK:4; ++ UINT32 HTMCS12FBK:4; ++ UINT32 HTMCS13FBK:4; ++ UINT32 HTMCS14FBK:4; ++ UINT32 HTMCS15FBK:4; ++ } field; ++ UINT32 word; ++} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; ++#define LG_FBK_CFG0 0x135c ++typedef union _LG_FBK_CFG0_STRUC { ++ struct { ++ UINT32 OFDMMCS0FBK:4; //initial value is 0 ++ UINT32 OFDMMCS1FBK:4; //initial value is 0 ++ UINT32 OFDMMCS2FBK:4; //initial value is 1 ++ UINT32 OFDMMCS3FBK:4; //initial value is 2 ++ UINT32 OFDMMCS4FBK:4; //initial value is 3 ++ UINT32 OFDMMCS5FBK:4; //initial value is 4 ++ UINT32 OFDMMCS6FBK:4; //initial value is 5 ++ UINT32 OFDMMCS7FBK:4; //initial value is 6 ++ } field; ++ UINT32 word; ++} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; ++#define LG_FBK_CFG1 0x1360 ++typedef union _LG_FBK_CFG1_STRUC { ++ struct { ++ UINT32 CCKMCS0FBK:4; //initial value is 0 ++ UINT32 CCKMCS1FBK:4; //initial value is 0 ++ UINT32 CCKMCS2FBK:4; //initial value is 1 ++ UINT32 CCKMCS3FBK:4; //initial value is 2 ++ UINT32 rsv:16; ++ } field; ++ UINT32 word; ++} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; ++ ++ ++//======================================================= ++//================ Protection Paramater================================ ++//======================================================= ++#define CCK_PROT_CFG 0x1364 //CCK Protection ++#define ASIC_SHORTNAV 1 ++#define ASIC_LONGNAV 2 ++#define ASIC_RTS 1 ++#define ASIC_CTS 2 ++typedef union _PROT_CFG_STRUC { ++ struct { ++ UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). ++ UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv ++ UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv ++ UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. ++ UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. ++ UINT32 RTSThEn:1; //RTS threshold enable on CCK TX ++ UINT32 rsv:5; ++ } field; ++ UINT32 word; ++} PROT_CFG_STRUC, *PPROT_CFG_STRUC; ++ ++#define OFDM_PROT_CFG 0x1368 //OFDM Protection ++#define MM20_PROT_CFG 0x136C //MM20 Protection ++#define MM40_PROT_CFG 0x1370 //MM40 Protection ++#define GF20_PROT_CFG 0x1374 //GF20 Protection ++#define GF40_PROT_CFG 0x1378 //GR40 Protection ++#define EXP_CTS_TIME 0x137C // ++#define EXP_ACK_TIME 0x1380 // ++ ++// ++// 4.4 MAC RX configuration registers (offset:0x1400) ++// ++#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 ++#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 ++// ++// TXRX_CSR4: Auto-Responder/ ++// ++typedef union _AUTO_RSP_CFG_STRUC { ++ struct { ++ UINT32 AutoResponderEnable:1; ++ UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble ++ UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode ++ UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode ++ UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble ++ UINT32 rsv:1; // Power bit value in conrtrol frame ++ UINT32 DualCTSEn:1; // Power bit value in conrtrol frame ++ UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame ++ UINT32 :24; ++ } field; ++ UINT32 word; ++} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; ++ ++#define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054 ++#define HT_BASIC_RATE 0x140c ++#define HT_CTRL_CFG 0x1410 ++#define SIFS_COST_CFG 0x1414 ++#define RX_PARSER_CFG 0x1418 //Set NAV for all received frames ++ ++// ++// 4.5 MAC Security configuration (offset:0x1500) ++// ++#define TX_SEC_CNT0 0x1500 // ++#define RX_SEC_CNT0 0x1504 // ++#define CCMP_FC_MUTE 0x1508 // ++// ++// 4.6 HCCA/PSMP (offset:0x1600) ++// ++#define TXOP_HLDR_ADDR0 0x1600 ++#define TXOP_HLDR_ADDR1 0x1604 ++#define TXOP_HLDR_ET 0x1608 ++#define QOS_CFPOLL_RA_DW0 0x160c ++#define QOS_CFPOLL_A1_DW1 0x1610 ++#define QOS_CFPOLL_QC 0x1614 ++// ++// 4.7 MAC Statistis registers (offset:0x1700) ++// ++#define RX_STA_CNT0 0x1700 // ++#define RX_STA_CNT1 0x1704 // ++#define RX_STA_CNT2 0x1708 // ++ ++// ++// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count ++// ++typedef union _RX_STA_CNT0_STRUC { ++ struct { ++ USHORT CrcErr; ++ USHORT PhyErr; ++ } field; ++ UINT32 word; ++} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; ++ ++// ++// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count ++// ++typedef union _RX_STA_CNT1_STRUC { ++ struct { ++ USHORT FalseCca; ++ USHORT PlcpErr; ++ } field; ++ UINT32 word; ++} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; ++ ++// ++// RX_STA_CNT2_STRUC: ++// ++typedef union _RX_STA_CNT2_STRUC { ++ struct { ++ USHORT RxDupliCount; ++ USHORT RxFifoOverflowCount; ++ } field; ++ UINT32 word; ++} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; ++#define TX_STA_CNT0 0x170C // ++// ++// STA_CSR3: TX Beacon count ++// ++typedef union _TX_STA_CNT0_STRUC { ++ struct { ++ USHORT TxFailCount; ++ USHORT TxBeaconCount; ++ } field; ++ UINT32 word; ++} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; ++#define TX_STA_CNT1 0x1710 // ++// ++// TX_STA_CNT1: TX tx count ++// ++typedef union _TX_STA_CNT1_STRUC { ++ struct { ++ USHORT TxSuccess; ++ USHORT TxRetransmit; ++ } field; ++ UINT32 word; ++} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; ++#define TX_STA_CNT2 0x1714 // ++// ++// TX_STA_CNT2: TX tx count ++// ++typedef union _TX_STA_CNT2_STRUC { ++ struct { ++ USHORT TxZeroLenCount; ++ USHORT TxUnderFlowCount; ++ } field; ++ UINT32 word; ++} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; ++#define TX_STA_FIFO 0x1718 // ++// ++// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register ++// ++typedef union PACKED _TX_STA_FIFO_STRUC { ++ struct { ++ UINT32 bValid:1; // 1:This register contains a valid TX result ++ UINT32 PidType:4; ++ UINT32 TxSuccess:1; // Tx No retry success ++ UINT32 TxAggre:1; // Tx Retry Success ++ UINT32 TxAckRequired:1; // Tx fail ++ UINT32 wcid:8; //wireless client index ++// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. ++ UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. ++ UINT32 TxBF:1; ++ UINT32 Reserve:2; ++ } field; ++ UINT32 word; ++} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; ++// Debug counter ++#define TX_AGG_CNT 0x171c ++typedef union _TX_AGG_CNT_STRUC { ++ struct { ++ USHORT NonAggTxCount; ++ USHORT AggTxCount; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; ++// Debug counter ++#define TX_AGG_CNT0 0x1720 ++typedef union _TX_AGG_CNT0_STRUC { ++ struct { ++ USHORT AggSize1Count; ++ USHORT AggSize2Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; ++// Debug counter ++#define TX_AGG_CNT1 0x1724 ++typedef union _TX_AGG_CNT1_STRUC { ++ struct { ++ USHORT AggSize3Count; ++ USHORT AggSize4Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; ++#define TX_AGG_CNT2 0x1728 ++typedef union _TX_AGG_CNT2_STRUC { ++ struct { ++ USHORT AggSize5Count; ++ USHORT AggSize6Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; ++// Debug counter ++#define TX_AGG_CNT3 0x172c ++typedef union _TX_AGG_CNT3_STRUC { ++ struct { ++ USHORT AggSize7Count; ++ USHORT AggSize8Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; ++// Debug counter ++#define TX_AGG_CNT4 0x1730 ++typedef union _TX_AGG_CNT4_STRUC { ++ struct { ++ USHORT AggSize9Count; ++ USHORT AggSize10Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; ++#define TX_AGG_CNT5 0x1734 ++typedef union _TX_AGG_CNT5_STRUC { ++ struct { ++ USHORT AggSize11Count; ++ USHORT AggSize12Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; ++#define TX_AGG_CNT6 0x1738 ++typedef union _TX_AGG_CNT6_STRUC { ++ struct { ++ USHORT AggSize13Count; ++ USHORT AggSize14Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; ++#define TX_AGG_CNT7 0x173c ++typedef union _TX_AGG_CNT7_STRUC { ++ struct { ++ USHORT AggSize15Count; ++ USHORT AggSize16Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; ++#define MPDU_DENSITY_CNT 0x1740 ++typedef union _MPDU_DEN_CNT_STRUC { ++ struct { ++ USHORT TXZeroDelCount; //TX zero length delimiter count ++ USHORT RXZeroDelCount; //RX zero length delimiter count ++ } field; ++ UINT32 word; ++} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; ++// ++// TXRX control registers - base address 0x3000 ++// ++// rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first.. ++#define TXRX_CSR1 0x77d0 ++ ++// ++// Security key table memory, base address = 0x1000 ++// ++#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = ++#define HW_WCID_ENTRY_SIZE 8 ++#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte ++#define HW_KEY_ENTRY_SIZE 0x20 ++#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte ++#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte ++#define HW_IVEIV_ENTRY_SIZE 8 ++#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte ++#define HW_WCID_ATTRI_SIZE 4 ++#define WCID_RESERVED 0x6bfc ++#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte ++#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte ++#define HW_SHARED_KEY_MODE_SIZE 4 ++#define SHAREDKEYTABLE 0 ++#define PAIRWISEKEYTABLE 1 ++ ++ ++typedef union _SHAREDKEY_MODE_STRUC { ++ struct { ++ UINT32 Bss0Key0CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss0Key1CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss0Key2CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss0Key3CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss1Key0CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss1Key1CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss1Key2CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss1Key3CipherAlg:3; ++ UINT32 :1; ++ } field; ++ UINT32 word; ++} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; ++// 64-entry for pairwise key table ++typedef struct _HW_WCID_ENTRY { // 8-byte per entry ++ UCHAR Address[6]; ++ UCHAR Rsv[2]; ++} HW_WCID_ENTRY, PHW_WCID_ENTRY; ++ ++ ++// ================================================================================= ++// WCID format ++// ================================================================================= ++//7.1 WCID ENTRY format : 8bytes ++typedef struct _WCID_ENTRY_STRUC { ++ UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 ++ UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 ++ UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table ++} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; ++ ++//8.1.1 SECURITY KEY format : 8DW ++// 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table ++typedef struct _HW_KEY_ENTRY { // 32-byte per entry ++ UCHAR Key[16]; ++ UCHAR TxMic[8]; ++ UCHAR RxMic[8]; ++} HW_KEY_ENTRY, *PHW_KEY_ENTRY; ++ ++//8.1.2 IV/EIV format : 2DW ++ ++//8.1.3 RX attribute entry format : 1DW ++typedef struct _MAC_ATTRIBUTE_STRUC { ++ UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table ++ UINT32 PairKeyMode:3; ++ UINT32 BSSIDIdx:3; //multipleBSS index for the WCID ++ UINT32 RXWIUDF:3; ++ UINT32 rsv:22; ++} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; ++ ++ ++// ================================================================================= ++// HOST-MCU communication data structure ++// ================================================================================= ++ ++// ++// H2M_MAILBOX_CSR: Host-to-MCU Mailbox ++// ++typedef union _H2M_MAILBOX_STRUC { ++ struct { ++ UINT32 LowByte:8; ++ UINT32 HighByte:8; ++ UINT32 CmdToken:8; ++ UINT32 Owner:8; ++ } field; ++ UINT32 word; ++} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; ++ ++// ++// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication ++// ++typedef union _M2H_CMD_DONE_STRUC { ++ struct { ++ UINT32 CmdToken0; ++ UINT32 CmdToken1; ++ UINT32 CmdToken2; ++ UINT32 CmdToken3; ++ } field; ++ UINT32 word; ++} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; ++ ++ ++//NAV_TIME_CFG :NAV ++typedef union _NAV_TIME_CFG_STRUC { ++ struct { ++ UCHAR Sifs; // in unit of 1-us ++ UCHAR SlotTime; // in unit of 1-us ++ USHORT Eifs:9; // in unit of 1-us ++ USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable ++ USHORT rsv:6; ++ } field; ++ UINT32 word; ++} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; ++ ++ ++// ++// RX_FILTR_CFG: /RX configuration register ++// ++typedef union _RX_FILTR_CFG_STRUC { ++ struct { ++ UINT32 DropCRCErr:1; // Drop CRC error ++ UINT32 DropPhyErr:1; // Drop physical error ++ UINT32 DropNotToMe:1; // Drop not to me unicast frame ++ UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true ++ ++ UINT32 DropVerErr:1; // Drop version error frame ++ UINT32 DropMcast:1; // Drop multicast frames ++ UINT32 DropBcast:1; // Drop broadcast frames ++ UINT32 DropDuplicate:1; // Drop duplicate frame ++ ++ UINT32 DropCFEndAck:1; // Drop Ps-Poll ++ UINT32 DropCFEnd:1; // Drop Ps-Poll ++ UINT32 DropAck:1; // Drop Ps-Poll ++ UINT32 DropCts:1; // Drop Ps-Poll ++ ++ UINT32 DropRts:1; // Drop Ps-Poll ++ UINT32 DropPsPoll:1; // Drop Ps-Poll ++ UINT32 DropBA:1; // ++ UINT32 DropBAR:1; // ++ ++ UINT32 DropRsvCntlType:1; ++ UINT32 :15; ++ } field; ++ UINT32 word; ++} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; ++ ++ ++ ++ ++// ++// PHY_CSR4: RF serial control register ++// ++typedef union _PHY_CSR4_STRUC { ++ struct { ++ UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. ++ UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) ++ UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program ++ UINT32 PLL_LD:1; // RF PLL_LD status ++ UINT32 Busy:1; // 1: ASIC is busy execute RF programming. ++ } field; ++ UINT32 word; ++} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; ++ ++ ++// ++// SEC_CSR5: shared key table security mode register ++// ++typedef union _SEC_CSR5_STRUC { ++ struct { ++ UINT32 Bss2Key0CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss2Key1CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss2Key2CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss2Key3CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss3Key0CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss3Key1CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss3Key2CipherAlg:3; ++ UINT32 :1; ++ UINT32 Bss3Key3CipherAlg:3; ++ UINT32 :1; ++ } field; ++ UINT32 word; ++} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; ++ ++ ++// ++// HOST_CMD_CSR: For HOST to interrupt embedded processor ++// ++typedef union _HOST_CMD_CSR_STRUC { ++ struct { ++ UINT32 HostCommand:8; ++ UINT32 Rsv:24; ++ } field; ++ UINT32 word; ++} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; ++ ++ ++// ++// AIFSN_CSR: AIFSN for each EDCA AC ++// ++ ++ ++ ++// ++// E2PROM_CSR: EEPROM control register ++// ++typedef union _E2PROM_CSR_STRUC { ++ struct { ++ UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. ++ UINT32 EepromSK:1; ++ UINT32 EepromCS:1; ++ UINT32 EepromDI:1; ++ UINT32 EepromDO:1; ++ UINT32 Type:1; // 1: 93C46, 0:93C66 ++ UINT32 LoadStatus:1; // 1:loading, 0:done ++ UINT32 Rsvd:25; ++ } field; ++ UINT32 word; ++} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; ++ ++// ++// QOS_CSR0: TXOP holder address0 register ++// ++typedef union _QOS_CSR0_STRUC { ++ struct { ++ UCHAR Byte0; // MAC address byte 0 ++ UCHAR Byte1; // MAC address byte 1 ++ UCHAR Byte2; // MAC address byte 2 ++ UCHAR Byte3; // MAC address byte 3 ++ } field; ++ UINT32 word; ++} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; ++ ++// ++// QOS_CSR1: TXOP holder address1 register ++// ++typedef union _QOS_CSR1_STRUC { ++ struct { ++ UCHAR Byte4; // MAC address byte 4 ++ UCHAR Byte5; // MAC address byte 5 ++ UCHAR Rsvd0; ++ UCHAR Rsvd1; ++ } field; ++ UINT32 word; ++} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; ++ ++#define RF_CSR_CFG 0x500 ++typedef union _RF_CSR_CFG_STRUC { ++ struct { ++ UINT RF_CSR_DATA:8; // DATA ++ UINT TESTCSR_RFACC_REGNUM:5; // RF register ID ++ UINT Rsvd2:3; // Reserved ++ UINT RF_CSR_WR:1; // 0: read 1: write ++ UINT RF_CSR_KICK:1; // kick RF register read/write ++ UINT Rsvd1:14; // Reserved ++ } field; ++ UINT word; ++} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; ++ ++ ++// ++// Other on-chip shared memory space, base = 0x2000 ++// ++ ++// CIS space - base address = 0x2000 ++#define HW_CIS_BASE 0x2000 ++ ++// Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function. ++#define HW_CS_CTS_BASE 0x7700 ++// DFS CTS frame base address. It's where mac stores CTS frame for DFS. ++#define HW_DFS_CTS_BASE 0x7780 ++#define HW_CTS_FRAME_SIZE 0x80 ++ ++// 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes ++// to save debugging settings ++#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes ++#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes ++ ++// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon ++// Three section discontinue memory segments will be used. ++// 1. The original region for BCN 0~3 ++// 2. Extract memory from FCE table for BCN 4~5 ++// 3. Extract memory from Pair-wise key table for BCN 6~7 ++// It occupied those memory of wcid 238~253 for BCN 6 ++// and wcid 222~237 for BCN 7 ++#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ ++#define HW_BEACON_BASE0 0x7800 ++#define HW_BEACON_BASE1 0x7A00 ++#define HW_BEACON_BASE2 0x7C00 ++#define HW_BEACON_BASE3 0x7E00 ++#define HW_BEACON_BASE4 0x7200 ++#define HW_BEACON_BASE5 0x7400 ++#define HW_BEACON_BASE6 0x5DC0 ++#define HW_BEACON_BASE7 0x5BC0 ++ ++#define HW_BEACON_MAX_COUNT 8 ++#define HW_BEACON_OFFSET 0x0200 ++#define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE) ++ ++// HOST-MCU shared memory - base address = 0x2100 ++#define HOST_CMD_CSR 0x404 ++#define H2M_MAILBOX_CSR 0x7010 ++#define H2M_MAILBOX_CID 0x7014 ++#define H2M_MAILBOX_STATUS 0x701c ++#define H2M_INT_SRC 0x7024 ++#define H2M_BBP_AGENT 0x7028 ++#define M2H_CMD_DONE_CSR 0x000c ++#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert ++#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert ++#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware ++#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert ++#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert ++ ++// ++// Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, ++// ++// ++// DMA RING DESCRIPTOR ++// ++#define E2PROM_CSR 0x0004 ++#define IO_CNTL_CSR 0x77d0 ++ ++ ++ ++// ================================================================ ++// Tx / Rx / Mgmt ring descriptor definition ++// ================================================================ ++ ++// the following PID values are used to mark outgoing frame type in TXD->PID so that ++// proper TX statistics can be collected based on these categories ++// b3-2 of PID field - ++#define PID_MGMT 0x05 ++#define PID_BEACON 0x0c ++#define PID_DATA_NORMALUCAST 0x02 ++#define PID_DATA_AMPDU 0x04 ++#define PID_DATA_NO_ACK 0x08 ++#define PID_DATA_NOT_NORM_ACK 0x03 ++// value domain of pTxD->HostQId (4-bit: 0~15) ++#define QID_AC_BK 1 // meet ACI definition in 802.11e ++#define QID_AC_BE 0 // meet ACI definition in 802.11e ++#define QID_AC_VI 2 ++#define QID_AC_VO 3 ++#define QID_HCCA 4 ++#define NUM_OF_TX_RING 4 ++#define QID_MGMT 13 ++#define QID_RX 14 ++#define QID_OTHER 15 ++ ++#endif // __RTMP_MAC_H__ // +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +new file mode 100644 +index 0000000..b3326c6 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -0,0 +1,405 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_phy.h ++ ++ Abstract: ++ Ralink Wireless Chip PHY(BBP/RF) related definition & structures ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifndef __RTMP_PHY_H__ ++#define __RTMP_PHY_H__ ++ ++ ++/* ++ RF sections ++*/ ++#define RF_R00 0 ++#define RF_R01 1 ++#define RF_R02 2 ++#define RF_R03 3 ++#define RF_R04 4 ++#define RF_R05 5 ++#define RF_R06 6 ++#define RF_R07 7 ++#define RF_R08 8 ++#define RF_R09 9 ++#define RF_R10 10 ++#define RF_R11 11 ++#define RF_R12 12 ++#define RF_R13 13 ++#define RF_R14 14 ++#define RF_R15 15 ++#define RF_R16 16 ++#define RF_R17 17 ++#define RF_R18 18 ++#define RF_R19 19 ++#define RF_R20 20 ++#define RF_R21 21 ++#define RF_R22 22 ++#define RF_R23 23 ++#define RF_R24 24 ++#define RF_R25 25 ++#define RF_R26 26 ++#define RF_R27 27 ++#define RF_R28 28 ++#define RF_R29 29 ++#define RF_R30 30 ++#define RF_R31 31 ++ ++ ++// value domain of pAd->RfIcType ++#define RFIC_2820 1 // 2.4G 2T3R ++#define RFIC_2850 2 // 2.4G/5G 2T3R ++#define RFIC_2720 3 // 2.4G 1T2R ++#define RFIC_2750 4 // 2.4G/5G 1T2R ++#define RFIC_3020 5 // 2.4G 1T1R ++#define RFIC_2020 6 // 2.4G B/G ++#define RFIC_3021 7 // 2.4G 1T2R ++#define RFIC_3022 8 // 2.4G 2T2R ++#define RFIC_3052 9 // 2.4G/5G 2T2R ++ ++/* ++ BBP sections ++*/ ++#define BBP_R0 0 // version ++#define BBP_R1 1 // TSSI ++#define BBP_R2 2 // TX configure ++#define BBP_R3 3 ++#define BBP_R4 4 ++#define BBP_R5 5 ++#define BBP_R6 6 ++#define BBP_R14 14 // RX configure ++#define BBP_R16 16 ++#define BBP_R17 17 // RX sensibility ++#define BBP_R18 18 ++#define BBP_R21 21 ++#define BBP_R22 22 ++#define BBP_R24 24 ++#define BBP_R25 25 ++#define BBP_R26 26 ++#define BBP_R27 27 ++#define BBP_R31 31 ++#define BBP_R49 49 //TSSI ++#define BBP_R50 50 ++#define BBP_R51 51 ++#define BBP_R52 52 ++#define BBP_R55 55 ++#define BBP_R62 62 // Rx SQ0 Threshold HIGH ++#define BBP_R63 63 ++#define BBP_R64 64 ++#define BBP_R65 65 ++#define BBP_R66 66 ++#define BBP_R67 67 ++#define BBP_R68 68 ++#define BBP_R69 69 ++#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold ++#define BBP_R73 73 ++#define BBP_R75 75 ++#define BBP_R77 77 ++#define BBP_R78 78 ++#define BBP_R79 79 ++#define BBP_R80 80 ++#define BBP_R81 81 ++#define BBP_R82 82 ++#define BBP_R83 83 ++#define BBP_R84 84 ++#define BBP_R86 86 ++#define BBP_R91 91 ++#define BBP_R92 92 ++#define BBP_R94 94 // Tx Gain Control ++#define BBP_R103 103 ++#define BBP_R105 105 ++#define BBP_R106 106 ++#define BBP_R113 113 ++#define BBP_R114 114 ++#define BBP_R115 115 ++#define BBP_R116 116 ++#define BBP_R117 117 ++#define BBP_R118 118 ++#define BBP_R119 119 ++#define BBP_R120 120 ++#define BBP_R121 121 ++#define BBP_R122 122 ++#define BBP_R123 123 ++#ifdef RT30xx ++#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control ++#endif // RT30xx // ++ ++#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db ++ ++// ++// BBP & RF are using indirect access. Before write any value into it. ++// We have to make sure there is no outstanding command pending via checking busy bit. ++// ++#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register ++ ++//#define PHY_TR_SWITCH_TIME 5 // usec ++ ++//#define BBP_R17_LOW_SENSIBILITY 0x50 ++//#define BBP_R17_MID_SENSIBILITY 0x41 ++//#define BBP_R17_DYNAMIC_UP_BOUND 0x40 ++ ++#define RSSI_FOR_VERY_LOW_SENSIBILITY -35 ++#define RSSI_FOR_LOW_SENSIBILITY -58 ++#define RSSI_FOR_MID_LOW_SENSIBILITY -80 ++#define RSSI_FOR_MID_SENSIBILITY -90 ++ ++/***************************************************************************** ++ RF register Read/Write marco definition ++ *****************************************************************************/ ++#ifdef RTMP_MAC_PCI ++#define RTMP_RF_IO_WRITE32(_A, _V) \ ++{ \ ++ if ((_A)->bPCIclkOff == FALSE) \ ++ { \ ++ PHY_CSR4_STRUC _value; \ ++ ULONG _busyCnt = 0; \ ++ \ ++ do { \ ++ RTMP_IO_READ32((_A), RF_CSR_CFG0, &_value.word); \ ++ if (_value.field.Busy == IDLE) \ ++ break; \ ++ _busyCnt++; \ ++ }while (_busyCnt < MAX_BUSY_COUNT); \ ++ if(_busyCnt < MAX_BUSY_COUNT) \ ++ { \ ++ RTMP_IO_WRITE32((_A), RF_CSR_CFG0, (_V)); \ ++ } \ ++ } \ ++} ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++#define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V) ++#endif // RTMP_MAC_USB // ++ ++#ifdef RT30xx ++#define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV) ++#define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V) ++#endif // RT30xx // ++ ++/***************************************************************************** ++ BBP register Read/Write marco definitions. ++ we read/write the bbp value by register's ID. ++ Generate PER to test BA ++ *****************************************************************************/ ++#ifdef RTMP_MAC_PCI ++/* ++ basic marco for BBP read operation. ++ _pAd: the data structure pointer of RTMP_ADAPTER ++ _bbpID : the bbp register ID ++ _pV: data pointer used to save the value of queried bbp register. ++ _bViaMCU: if we need access the bbp via the MCU. ++*/ ++#define RTMP_BBP_IO_READ8(_pAd, _bbpID, _pV, _bViaMCU) \ ++ do{ \ ++ BBP_CSR_CFG_STRUC BbpCsr; \ ++ int _busyCnt, _secCnt, _regID; \ ++ \ ++ _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ ++ for (_busyCnt=0; _busyCntBbpWriteLatch[_bbpID]; \ ++ if ((_bViaMCU) == TRUE) \ ++ { \ ++ RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \ ++ BbpCsr.field.Busy = 0; \ ++ RTMP_IO_WRITE32(_pAd, _regID, BbpCsr.word); \ ++ } \ ++ } \ ++ }while(0) ++ ++/* ++ This marco used for the BBP read operation which didn't need via MCU. ++*/ ++#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ ++ RTMP_BBP_IO_READ8((_A), (_I), (_pV), FALSE) ++ ++/* ++ This marco used for the BBP read operation which need via MCU. ++ But for some chipset which didn't have mcu (e.g., RBUS based chipset), we ++ will use this function too and didn't access the bbp register via the MCU. ++*/ ++#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ ++ do{ \ ++ if ((_A)->bPCIclkOff == FALSE) \ ++ { \ ++ if ((_A)->infType == RTMP_DEV_INF_RBUS) \ ++ RTMP_BBP_IO_READ8((_A), (_I), (_pV), FALSE); \ ++ else \ ++ RTMP_BBP_IO_READ8((_A), (_I), (_pV), TRUE); \ ++ } \ ++ }while(0) ++ ++ ++/* ++ basic marco for BBP write operation. ++ _pAd: the data structure pointer of RTMP_ADAPTER ++ _bbpID : the bbp register ID ++ _pV: data used to save the value of queried bbp register. ++ _bViaMCU: if we need access the bbp via the MCU. ++*/ ++#define RTMP_BBP_IO_WRITE8(_pAd, _bbpID, _pV, _bViaMCU) \ ++ do{ \ ++ BBP_CSR_CFG_STRUC BbpCsr; \ ++ int _busyCnt, _regID; \ ++ \ ++ _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ ++ for (_busyCnt=0; _busyCntOpMode == OPMODE_AP) \ ++ RTMPusecDelay(1000); \ ++ } \ ++ (_pAd)->BbpWriteLatch[_bbpID] = _pV; \ ++ break; \ ++ } \ ++ if (_busyCnt == MAX_BUSY_COUNT) \ ++ { \ ++ DBGPRINT_ERR(("BBP write R%d fail\n", _bbpID)); \ ++ if((_bViaMCU) == TRUE) \ ++ { \ ++ RTMP_IO_READ32(_pAd, H2M_BBP_AGENT, &BbpCsr.word); \ ++ BbpCsr.field.Busy = 0; \ ++ RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, BbpCsr.word); \ ++ } \ ++ } \ ++ }while(0) ++ ++ ++/* ++ This marco used for the BBP write operation which didn't need via MCU. ++*/ ++#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ ++ RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), FALSE) ++ ++/* ++ This marco used for the BBP write operation which need via MCU. ++ But for some chipset which didn't have mcu (e.g., RBUS based chipset), we ++ will use this function too and didn't access the bbp register via the MCU. ++*/ ++#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ ++ do{ \ ++ if ((_A)->bPCIclkOff == FALSE) \ ++ { \ ++ if ((_A)->infType == RTMP_DEV_INF_RBUS) \ ++ RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), FALSE); \ ++ else \ ++ RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), TRUE); \ ++ } \ ++ }while(0) ++ ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) ++#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) ++ ++#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) ++#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) ++#endif // RTMP_MAC_USB // ++ ++#ifdef RT30xx ++#define RTMP_ASIC_MMPS_DISABLE(_pAd) \ ++ do{ \ ++ UCHAR _bbpData; \ ++ UINT32 _macData; \ ++ /* disable MMPS BBP control register */ \ ++ RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ ++ _bbpData &= ~(0x04); /*bit 2*/ \ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(_pAd, BBP_R3, _bbpData); \ ++ \ ++ /* disable MMPS MAC control register */ \ ++ RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ ++ _macData &= ~(0x09); /*bit 0, 3*/ \ ++ RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ ++ }while(0) ++ ++ ++#define RTMP_ASIC_MMPS_ENABLE(_pAd) \ ++ do{ \ ++ UCHAR _bbpData; \ ++ UINT32 _macData; \ ++ /* enable MMPS BBP control register */ \ ++ RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ ++ _bbpData |= (0x04); /*bit 2*/ \ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(_pAd, BBP_R3, _bbpData); \ ++ \ ++ /* enable MMPS MAC control register */ \ ++ RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ ++ _macData |= (0x09); /*bit 0, 3*/ \ ++ RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ ++ }while(0) ++ ++#endif // RT30xx // ++ ++#endif // __RTMP_PHY_H__ // +diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c +new file mode 100644 +index 0000000..5a3e668 +--- /dev/null ++++ b/drivers/staging/rt2860/chips/rt3070.c +@@ -0,0 +1,185 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt3070.c ++ ++ Abstract: ++ Specific funcitons and variables for RT3070 ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifdef RT3070 ++ ++#include "../rt_config.h" ++ ++ ++#ifndef RTMP_RF_RW_SUPPORT ++#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" ++#endif // RTMP_RF_RW_SUPPORT // ++ ++ ++VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) ++{ ++ INT i; ++ UCHAR RFValue; ++ ++ // Driver must read EEPROM to get RfIcType before initial RF registers ++ // Initialize RF register to default value ++ if (IS_RT3070(pAd) || IS_RT3071(pAd)) ++ { ++ // Init RF calibration ++ // Driver should toggle RF R30 bit7 before init RF registers ++ UINT32 RfReg = 0; ++ UINT32 data; ++ ++ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); ++ RfReg |= 0x80; ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RTMPusecDelay(1000); ++ RfReg &= 0x7F; ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ ++ // Initialize RF register to default value ++ for (i = 0; i < NUM_RF_REG_PARMS; i++) ++ { ++ RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); ++ } ++ ++ // add by johnli ++ if (IS_RT3070(pAd)) ++ { ++ // ++ // The DAC issue(LDO_CFG0) has been fixed in RT3070(F). ++ // The voltage raising patch is no longer needed for RT3070(F) ++ // ++ if ((pAd->MACVersion & 0xffff) < 0x0201) ++ { ++ // Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate ++ RTUSBReadMACRegister(pAd, LDO_CFG0, &data); ++ data = ((data & 0xF0FFFFFF) | 0x0D000000); ++ RTUSBWriteMACRegister(pAd, LDO_CFG0, data); ++ } ++ } ++ else if (IS_RT3071(pAd)) ++ { ++ // Driver should set RF R6 bit6 on before init RF registers ++ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); ++ RfReg |= 0x40; ++ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); ++ ++ // init R31 ++ RT30xxWriteRFRegister(pAd, RF_R31, 0x14); ++ ++ // RT3071 version E has fixed this issue ++ if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) ++ { ++ // patch tx EVM issue temporarily ++ RTUSBReadMACRegister(pAd, LDO_CFG0, &data); ++ data = ((data & 0xE0FFFFFF) | 0x0D000000); ++ RTUSBWriteMACRegister(pAd, LDO_CFG0, data); ++ } ++ else ++ { ++ RTMP_IO_READ32(pAd, LDO_CFG0, &data); ++ data = ((data & 0xE0FFFFFF) | 0x01000000); ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, data); ++ } ++ ++ // patch LNA_PE_G1 failed issue ++ RTUSBReadMACRegister(pAd, GPIO_SWITCH, &data); ++ data &= ~(0x20); ++ RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data); ++ } ++ ++ //For RF filter Calibration ++ RTMPFilterCalibration(pAd); ++ ++ // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() ++ // ++ // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). ++ // Raising RF voltage is no longer needed for RT3070(F) ++ // ++ if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201)) ++ { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x3); ++ } ++ else if ((IS_RT3071(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0211)) ++ { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x3); ++ } ++ ++ // set led open drain enable ++ RTUSBReadMACRegister(pAd, OPT_14, &data); ++ data |= 0x01; ++ RTUSBWriteMACRegister(pAd, OPT_14, data); ++ ++ // move from RT30xxLoadRFNormalModeSetup because it's needed for both RT3070 and RT3071 ++ // TX_LO1_en, RF R17 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R17, &RFValue); ++ RFValue &= (~0x08); ++ // to fix rx long range issue ++ if (pAd->NicConfig2.field.ExternalLNAForG == 0) ++ { ++ if ((IS_RT3071(pAd) && ((pAd->MACVersion & 0xffff) >= 0x0211)) || IS_RT3070(pAd)) ++ { ++ RFValue |= 0x20; ++ } ++ } ++ // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ if (pAd->TxMixerGain24G >= 1) ++ { ++ RFValue &= (~0x7); // clean bit [2:0] ++ RFValue |= pAd->TxMixerGain24G; ++ } ++ RT30xxWriteRFRegister(pAd, RF_R17, RFValue); ++ ++ if (IS_RT3071(pAd)) ++ { ++ // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ RT30xxLoadRFNormalModeSetup(pAd); ++ } ++ else if (IS_RT3070(pAd)) ++ { ++ /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ ++ // LDORF_VC, RF R27 register Bit 2 to 0 ++ RT30xxReadRFRegister(pAd, RF_R27, &RFValue); ++ // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). ++ // Raising RF voltage is no longer needed for RT3070(F) ++ if ((pAd->MACVersion & 0xffff) < 0x0201) ++ RFValue = (RFValue & (~0x77)) | 0x3; ++ else ++ RFValue = (RFValue & (~0x77)); ++ RT30xxWriteRFRegister(pAd, RF_R27, RFValue); ++ /* end johnli */ ++ } ++ } ++ ++} ++#endif // RT3070 // +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +new file mode 100644 +index 0000000..fe7d8ec +--- /dev/null ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -0,0 +1,525 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt30xx.c ++ ++ Abstract: ++ Specific funcitons and variables for RT30xx. ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++ ++#ifdef RT30xx ++ ++ ++#ifndef RTMP_RF_RW_SUPPORT ++#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" ++#endif // RTMP_RF_RW_SUPPORT // ++ ++#include "../rt_config.h" ++ ++ ++// ++// RF register initialization set ++// ++REG_PAIR RT30xx_RFRegTable[] = { ++ {RF_R04, 0x40}, ++ {RF_R05, 0x03}, ++ {RF_R06, 0x02}, ++ {RF_R07, 0x70}, ++ {RF_R09, 0x0F}, ++ {RF_R10, 0x41}, ++ {RF_R11, 0x21}, ++ {RF_R12, 0x7B}, ++ {RF_R14, 0x90}, ++ {RF_R15, 0x58}, ++ {RF_R16, 0xB3}, ++ {RF_R17, 0x92}, ++ {RF_R18, 0x2C}, ++ {RF_R19, 0x02}, ++ {RF_R20, 0xBA}, ++ {RF_R21, 0xDB}, ++ {RF_R24, 0x16}, ++ {RF_R25, 0x01}, ++ {RF_R29, 0x1F}, ++}; ++ ++UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); ++ ++ ++ ++// Antenna divesity use GPIO3 and EESK pin for control ++// Antenna and EEPROM access are both using EESK pin, ++// Therefor we should avoid accessing EESK at the same time ++// Then restore antenna after EEPROM access ++// The original name of this function is AsicSetRxAnt(), now change to ++//VOID AsicSetRxAnt( ++VOID RT30xxSetRxAnt( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Ant) ++{ ++ UINT32 Value; ++ UINT32 x; ++ ++ if ((pAd->EepromAccess) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ { ++ return; ++ } ++ ++ // the antenna selection is through firmware and MAC register(GPIO3) ++ if (Ant == 0) ++ { ++ // Main antenna ++ AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x1, 0x0); ++ ++ RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); ++ Value &= ~(0x0808); ++ RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n")); ++ } ++ else ++ { ++ // Aux antenna ++ AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x0, 0x0); ++ RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); ++ Value &= ~(0x0808); ++ Value |= 0x08; ++ RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n")); ++ } ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ For RF filter calibration purpose ++ ++ Arguments: ++ pAd Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ IRQL = PASSIVE_LEVEL ++ ++ ======================================================================== ++*/ ++VOID RTMPFilterCalibration( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0; ++ UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; ++ UCHAR RF_R24_Value = 0; ++ ++ // Give bbp filter initial value ++ pAd->Mlme.CaliBW20RfR24 = 0x1F; ++ pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 ++ ++ do ++ { ++ if (loop == 1) //BandWidth = 40 MHz ++ { ++ // Write 0x27 to RF_R24 to program filter ++ RF_R24_Value = 0x27; ++ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); ++ if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) ++ FilterTarget = 0x15; ++ else ++ FilterTarget = 0x19; ++ ++ // when calibrate BW40, BBP mask must set to BW40. ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); ++ BBPValue&= (~0x18); ++ BBPValue|= (0x10); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); ++ ++ // set to BW40 ++ RT30xxReadRFRegister(pAd, RF_R31, &value); ++ value |= 0x20; ++ RT30xxWriteRFRegister(pAd, RF_R31, value); ++ } ++ else //BandWidth = 20 MHz ++ { ++ // Write 0x07 to RF_R24 to program filter ++ RF_R24_Value = 0x07; ++ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); ++ if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) ++ FilterTarget = 0x13; ++ else ++ FilterTarget = 0x16; ++ ++ // set to BW20 ++ RT30xxReadRFRegister(pAd, RF_R31, &value); ++ value &= (~0x20); ++ RT30xxWriteRFRegister(pAd, RF_R31, value); ++ } ++ ++ // Write 0x01 to RF_R22 to enable baseband loopback mode ++ RT30xxReadRFRegister(pAd, RF_R22, &value); ++ value |= 0x01; ++ RT30xxWriteRFRegister(pAd, RF_R22, value); ++ ++ // Write 0x00 to BBP_R24 to set power & frequency of passband test tone ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); ++ ++ do ++ { ++ // Write 0x90 to BBP_R25 to transmit test tone ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); ++ ++ RTMPusecDelay(1000); ++ // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); ++ R55x = value & 0xFF; ++ ++ } while ((ReTry++ < 100) && (R55x == 0)); ++ ++ // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); ++ ++ while(TRUE) ++ { ++ // Write 0x90 to BBP_R25 to transmit test tone ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); ++ ++ //We need to wait for calibration ++ RTMPusecDelay(1000); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); ++ value &= 0xFF; ++ if ((R55x - value) < FilterTarget) ++ { ++ RF_R24_Value ++; ++ } ++ else if ((R55x - value) == FilterTarget) ++ { ++ RF_R24_Value ++; ++ count ++; ++ } ++ else ++ { ++ break; ++ } ++ ++ // prevent infinite loop cause driver hang. ++ if (loopcnt++ > 100) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt)); ++ break; ++ } ++ ++ // Write RF_R24 to program filter ++ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); ++ } ++ ++ if (count > 0) ++ { ++ RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); ++ } ++ ++ // Store for future usage ++ if (loopcnt < 100) ++ { ++ if (loop++ == 0) ++ { ++ //BandWidth = 20 MHz ++ pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value; ++ } ++ else ++ { ++ //BandWidth = 40 MHz ++ pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value; ++ break; ++ } ++ } ++ else ++ break; ++ ++ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); ++ ++ // reset count ++ count = 0; ++ } while(TRUE); ++ ++ // ++ // Set back to initial state ++ // ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); ++ ++ RT30xxReadRFRegister(pAd, RF_R22, &value); ++ value &= ~(0x01); ++ RT30xxWriteRFRegister(pAd, RF_R22, value); ++ ++ // set BBP back to BW20 ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); ++ BBPValue&= (~0x18); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); ++} ++ ++ ++// add by johnli, RF power sequence setup ++/* ++ ========================================================================== ++ Description: ++ ++ Load RF normal operation-mode setup ++ ++ ========================================================================== ++ */ ++VOID RT30xxLoadRFNormalModeSetup( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UCHAR RFValue; ++ ++ // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 ++ RT30xxReadRFRegister(pAd, RF_R01, &RFValue); ++ RFValue = (RFValue & (~0x0C)) | 0x31; ++ RT30xxWriteRFRegister(pAd, RF_R01, RFValue); ++ ++ // TX_LO2_en, RF R15 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R15, &RFValue); ++ RFValue &= (~0x08); ++ RT30xxWriteRFRegister(pAd, RF_R15, RFValue); ++ ++ /* move to NICInitRT30xxRFRegisters ++ // TX_LO1_en, RF R17 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R17, &RFValue); ++ RFValue &= (~0x08); ++ // to fix rx long range issue ++ if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) ++ { ++ RFValue |= 0x20; ++ } ++ // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ if (pAd->TxMixerGain24G >= 2) ++ { ++ RFValue &= (~0x7); // clean bit [2:0] ++ RFValue |= pAd->TxMixerGain24G; ++ } ++ RT30xxWriteRFRegister(pAd, RF_R17, RFValue); ++ */ ++ ++ // RX_LO1_en, RF R20 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R20, &RFValue); ++ RFValue &= (~0x08); ++ RT30xxWriteRFRegister(pAd, RF_R20, RFValue); ++ ++ // RX_LO2_en, RF R21 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R21, &RFValue); ++ RFValue &= (~0x08); ++ RT30xxWriteRFRegister(pAd, RF_R21, RFValue); ++ ++ /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ ++ // LDORF_VC, RF R27 register Bit 2 to 0 ++ RT30xxReadRFRegister(pAd, RF_R27, &RFValue); ++ // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). ++ // Raising RF voltage is no longer needed for RT3070(F) ++ if (IS_RT3090(pAd)) // RT309x and RT3071/72 ++ { ++ if ((pAd->MACVersion & 0xffff) < 0x0211) ++ RFValue = (RFValue & (~0x77)) | 0x3; ++ else ++ RFValue = (RFValue & (~0x77)); ++ RT30xxWriteRFRegister(pAd, RF_R27, RFValue); ++ } ++ /* end johnli */ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ Load RF sleep-mode setup ++ ++ ========================================================================== ++ */ ++VOID RT30xxLoadRFSleepModeSetup( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UCHAR RFValue; ++ UINT32 MACValue; ++ ++ ++#ifdef RTMP_MAC_USB ++ if(!IS_RT3572(pAd)) ++#endif // RTMP_MAC_USB // ++ { ++ // RF_BLOCK_en. RF R1 register Bit 0 to 0 ++ RT30xxReadRFRegister(pAd, RF_R01, &RFValue); ++ RFValue &= (~0x01); ++ RT30xxWriteRFRegister(pAd, RF_R01, RFValue); ++ ++ // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 ++ RT30xxReadRFRegister(pAd, RF_R07, &RFValue); ++ RFValue &= (~0x30); ++ RT30xxWriteRFRegister(pAd, RF_R07, RFValue); ++ ++ // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R09, &RFValue); ++ RFValue &= (~0x0E); ++ RT30xxWriteRFRegister(pAd, RF_R09, RFValue); ++ ++ // RX_CTB_en, RF R21 register Bit 7 to 0 ++ RT30xxReadRFRegister(pAd, RF_R21, &RFValue); ++ RFValue &= (~0x80); ++ RT30xxWriteRFRegister(pAd, RF_R21, RFValue); ++ } ++ ++ if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 ++ IS_RT3572(pAd) || ++ (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) ++ { ++#ifdef RTMP_MAC_USB ++ if (!IS_RT3572(pAd)) ++#endif // RTMP_MAC_USB // ++ { ++ RT30xxReadRFRegister(pAd, RF_R27, &RFValue); ++ RFValue |= 0x77; ++ RT30xxWriteRFRegister(pAd, RF_R27, RFValue); ++ } ++ ++ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); ++ MACValue |= 0x1D000000; ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); ++ } ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ Reverse RF sleep-mode setup ++ ++ ========================================================================== ++ */ ++VOID RT30xxReverseRFSleepModeSetup( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UCHAR RFValue; ++ UINT32 MACValue; ++ ++#ifdef RTMP_MAC_USB ++ if(!IS_RT3572(pAd)) ++#endif // RTMP_MAC_USB // ++ { ++ // RF_BLOCK_en, RF R1 register Bit 0 to 1 ++ RT30xxReadRFRegister(pAd, RF_R01, &RFValue); ++ RFValue |= 0x01; ++ RT30xxWriteRFRegister(pAd, RF_R01, RFValue); ++ ++ // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 ++ RT30xxReadRFRegister(pAd, RF_R07, &RFValue); ++ RFValue |= 0x30; ++ RT30xxWriteRFRegister(pAd, RF_R07, RFValue); ++ ++ // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 ++ RT30xxReadRFRegister(pAd, RF_R09, &RFValue); ++ RFValue |= 0x0E; ++ RT30xxWriteRFRegister(pAd, RF_R09, RFValue); ++ ++ // RX_CTB_en, RF R21 register Bit 7 to 1 ++ RT30xxReadRFRegister(pAd, RF_R21, &RFValue); ++ RFValue |= 0x80; ++ RT30xxWriteRFRegister(pAd, RF_R21, RFValue); ++ } ++ ++ if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 ++ IS_RT3572(pAd) || ++ IS_RT3390(pAd) || ++ (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) ++ { ++#ifdef RTMP_MAC_USB ++ if (!IS_RT3572(pAd)) ++#endif // RTMP_MAC_USB // ++ { ++ RT30xxReadRFRegister(pAd, RF_R27, &RFValue); ++ if ((pAd->MACVersion & 0xffff) < 0x0211) ++ RFValue = (RFValue & (~0x77)) | 0x3; ++ else ++ RFValue = (RFValue & (~0x77)); ++ RT30xxWriteRFRegister(pAd, RF_R27, RFValue); ++ } ++ ++ // RT3071 version E has fixed this issue ++ if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) ++ { ++ // patch tx EVM issue temporarily ++ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); ++ MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); ++ } ++ else ++ { ++ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); ++ MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000); ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); ++ } ++ } ++ ++ if(IS_RT3572(pAd)) ++ RT30xxWriteRFRegister(pAd, RF_R08, 0x80); ++} ++// end johnli ++ ++VOID RT30xxHaltAction( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT32 TxPinCfg = 0x00050F0F; ++ ++ // ++ // Turn off LNA_PE or TRSW_POL ++ // ++ if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) ++ { ++ if ((IS_RT3071(pAd) || IS_RT3572(pAd)) ++#ifdef RTMP_EFUSE_SUPPORT ++ && (pAd->bUseEfuse) ++#endif // RTMP_EFUSE_SUPPORT // ++ ) ++ { ++ TxPinCfg &= 0xFFFBF0F0; // bit18 off ++ } ++ else ++ { ++ TxPinCfg &= 0xFFFFF0F0; ++ } ++ ++ RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); ++ } ++} ++ ++#endif // RT30xx // +diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h +index f49a35c..9ce9154 100644 +--- a/drivers/staging/rt2860/chlist.h ++++ b/drivers/staging/rt2860/chlist.h +@@ -64,1182 +64,65 @@ typedef struct _CH_REGION { + CH_DESP ChDesp[10]; + } CH_REGION, *PCH_REGION; + +-static CH_REGION ChRegion[] = +-{ +- { // Antigua and Berbuda +- "AG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Argentina +- "AR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Aruba +- "AW", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Australia +- "AU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Austria +- "AT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bahamas +- "BS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Barbados +- "BB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bermuda +- "BM", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Brazil +- "BR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Belgium +- "BE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Bulgaria +- "BG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Canada +- "CA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Cayman IsLands +- "KY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Chile +- "CL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // China +- "CN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Colombia +- "CO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Costa Rica +- "CR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Cyprus +- "CY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Czech_Republic +- "CZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Denmark +- "DK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Dominican Republic +- "DO", +- CE, +- { +- { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Equador +- "EC", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // El Salvador +- "SV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64 +- { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Finland +- "FI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // France +- "FR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Germany +- "DE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Greece +- "GR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Guam +- "GU", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Guatemala +- "GT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Haiti +- "HT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Honduras +- "HN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hong Kong +- "HK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hungary +- "HU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Iceland +- "IS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // India +- "IN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Indonesia +- "ID", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Ireland +- "IE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Israel +- "IL", +- CE, +- { +- { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3 +- { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9 +- { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13 +- { 0}, // end +- } +- }, +- +- { // Italy +- "IT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Japan +- "JP", +- JAP, +- { +- { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Jordan +- "JO", +- CE, +- { +- { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Latvia +- "LV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Liechtenstein +- "LI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Lithuania +- "LT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Luxemburg +- "LU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Malaysia +- "MY", +- CE, +- { +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Malta +- "MT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Marocco +- "MA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Mexico +- "MX", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Netherlands +- "NL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // New Zealand +- "NZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Norway +- "NO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Peru +- "PE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Portugal +- "PT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Poland +- "PL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Romania +- "RO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Russia +- "RU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Saudi Arabia +- "SA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Serbia_and_Montenegro +- "CS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 0}, // end +- } +- }, +- +- { // Singapore +- "SG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Slovakia +- "SK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Slovenia +- "SI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // South Africa +- "ZA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // South Korea +- "KR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Spain +- "ES", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Sweden +- "SE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Switzerland +- "CH", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Taiwan +- "TW", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Turkey +- "TR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // UK +- "GB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Ukraine +- "UA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_Arab_Emirates +- "AE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_States +- "US", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Venezuela +- "VE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Default +- "", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +-}; +- +-static inline PCH_REGION GetChRegion( +- IN PUCHAR CntryCode) +-{ +- INT loop = 0; +- PCH_REGION pChRegion = NULL; +- +- while (strcmp(ChRegion[loop].CountReg, "") != 0) +- { +- if (strncmp(ChRegion[loop].CountReg, CntryCode, 2) == 0) +- { +- pChRegion = &ChRegion[loop]; +- break; +- } +- loop++; +- } +- +- if (pChRegion == NULL) +- pChRegion = &ChRegion[loop]; +- return pChRegion; +-} +- +-static inline VOID ChBandCheck( +- IN UCHAR PhyMode, +- OUT PUCHAR pChType) +-{ +- switch(PhyMode) +- { +- case PHY_11A: +- case PHY_11AN_MIXED: +- *pChType = BAND_5G; +- break; +- case PHY_11ABG_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11ABGN_MIXED: +- *pChType = BAND_BOTH; +- break; +- +- default: +- *pChType = BAND_24G; +- break; +- } +-} +- +-static inline UCHAR FillChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_DESP pChDesp, +- IN UCHAR Offset, +- IN UCHAR increment) +-{ +- INT i, j, l; +- UCHAR channel; +- +- j = Offset; +- for (i = 0; i < pChDesp->NumOfCh; i++) +- { +- channel = pChDesp->FirstChannel + i * increment; +- for (l=0; lTxPower[l].Channel) +- { +- pAd->ChannelList[j].Power = pAd->TxPower[l].Power; +- pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2; +- break; +- } +- } +- if (l == MAX_NUM_OF_CHANNELS) +- continue; +- +- pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment; +- pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr; +- pAd->ChannelList[j].DfsReq = pChDesp->DfsReq; +- j++; +- } +- pAd->ChannelListNum = j; +- +- return j; +-} +- +-static inline VOID CreateChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_REGION pChRegion, +- IN UCHAR Geography) +-{ +- INT i; +- UCHAR offset = 0; +- PCH_DESP pChDesp; +- UCHAR ChType; +- UCHAR increment; +- +- if (pChRegion == NULL) +- return; +- +- ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); +- +- for (i=0; i<10; i++) +- { +- pChDesp = &pChRegion->ChDesp[i]; +- if (pChDesp->FirstChannel == 0) +- break; +- +- if (ChType == BAND_5G) +- { +- if (pChDesp->FirstChannel <= 14) +- continue; +- } +- else if (ChType == BAND_24G) +- { +- if (pChDesp->FirstChannel > 14) +- continue; +- } +- +- if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == Geography)) +- { +- if (pChDesp->FirstChannel > 14) +- increment = 4; +- else +- increment = 1; +- offset = FillChList(pAd, pChDesp, offset, increment); +- } +- } +-} +- +-static inline VOID BuildChannelListEx( +- IN PRTMP_ADAPTER pAd) +-{ +- PCH_REGION pChReg; +- +- pChReg = GetChRegion(pAd->CommonCfg.CountryCode); +- CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); +-} +- +-static inline VOID BuildBeaconChList( ++extern CH_REGION ChRegion[]; ++ ++typedef struct _CH_FREQ_MAP_{ ++ UINT16 channel; ++ UINT16 freqKHz; ++}CH_FREQ_MAP; ++ ++extern CH_FREQ_MAP CH_HZ_ID_MAP[]; ++extern int CH_HZ_ID_MAP_NUM; ++ ++ ++#define MAP_CHANNEL_ID_TO_KHZ(_ch, _khz) \ ++ do{ \ ++ int _chIdx; \ ++ for (_chIdx = 0; _chIdx < CH_HZ_ID_MAP_NUM; _chIdx++)\ ++ { \ ++ if ((_ch) == CH_HZ_ID_MAP[_chIdx].channel) \ ++ { \ ++ (_khz) = CH_HZ_ID_MAP[_chIdx].freqKHz * 1000; \ ++ break; \ ++ } \ ++ } \ ++ if (_chIdx == CH_HZ_ID_MAP_NUM) \ ++ (_khz) = 2412000; \ ++ }while(0) ++ ++#define MAP_KHZ_TO_CHANNEL_ID(_khz, _ch) \ ++ do{ \ ++ int _chIdx; \ ++ for (_chIdx = 0; _chIdx < CH_HZ_ID_MAP_NUM; _chIdx++)\ ++ { \ ++ if ((_khz) == CH_HZ_ID_MAP[_chIdx].freqKHz) \ ++ { \ ++ (_ch) = CH_HZ_ID_MAP[_chIdx].channel; \ ++ break; \ ++ } \ ++ } \ ++ if (_chIdx == CH_HZ_ID_MAP_NUM) \ ++ (_ch) = 1; \ ++ }while(0) ++ ++ ++VOID BuildChannelListEx( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID BuildBeaconChList( + IN PRTMP_ADAPTER pAd, + OUT PUCHAR pBuf, +- OUT PULONG pBufLen) +-{ +- INT i; +- ULONG TmpLen; +- PCH_REGION pChRegion; +- PCH_DESP pChDesp; +- UCHAR ChType; +- +- pChRegion = GetChRegion(pAd->CommonCfg.CountryCode); +- +- if (pChRegion == NULL) +- return; +- +- ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); +- *pBufLen = 0; +- +- for (i=0; i<10; i++) +- { +- pChDesp = &pChRegion->ChDesp[i]; +- if (pChDesp->FirstChannel == 0) +- break; +- +- if (ChType == BAND_5G) +- { +- if (pChDesp->FirstChannel <= 14) +- continue; +- } +- else if (ChType == BAND_24G) +- { +- if (pChDesp->FirstChannel > 14) +- continue; +- } +- +- if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == pAd->CommonCfg.Geography)) +- { +- MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen, +- 1, &pChDesp->FirstChannel, +- 1, &pChDesp->NumOfCh, +- 1, &pChDesp->MaxTxPwr, +- END_OF_ARGS); +- *pBufLen += TmpLen; +- } +- } +-} +- +-static inline BOOLEAN IsValidChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) +- +-{ +- INT i; +- +- for (i = 0; i < pAd->ChannelListNum; i++) +- { +- if (pAd->ChannelList[i].Channel == channel) +- break; +- } +- +- if (i == pAd->ChannelListNum) +- return FALSE; +- else +- return TRUE; +-} +- +- +-static inline UCHAR GetExtCh( +- IN UCHAR Channel, +- IN UCHAR Direction) +-{ +- CHAR ExtCh; +- +- if (Direction == EXTCHA_ABOVE) +- ExtCh = Channel + 4; +- else +- ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0; +- +- return ExtCh; +-} +- +- +-static inline VOID N_ChannelCheck( +- IN PRTMP_ADAPTER pAd) +-{ +- //UCHAR ChannelNum = pAd->ChannelListNum; +- UCHAR Channel = pAd->CommonCfg.Channel; +- +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (Channel > 14) +- { +- if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) || +- (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) || +- (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- } +- else +- { +- do +- { +- UCHAR ExtCh; +- UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; +- ExtCh = GetExtCh(Channel, Dir); +- if (IsValidChannel(pAd, ExtCh)) +- break; +- +- Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE; +- ExtCh = GetExtCh(Channel, Dir); +- if (IsValidChannel(pAd, ExtCh)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir; +- break; +- } +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } while(FALSE); +- +- if (Channel == 14) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() +- } +- } +- } +- +- +-} ++ OUT PULONG pBufLen); + ++VOID N_ChannelCheck( ++ IN PRTMP_ADAPTER pAd); + +-static inline VOID N_SetCenCh( +- IN PRTMP_ADAPTER pAd) +-{ +- if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; +- } +- else +- { +- if (pAd->CommonCfg.Channel == 14) +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1; +- else +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; +- } +- } +- else +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- } +-} ++VOID N_SetCenCh( ++ IN PRTMP_ADAPTER pAd); + +-static inline UINT8 GetCuntryMaxTxPwr( ++UINT8 GetCuntryMaxTxPwr( + IN PRTMP_ADAPTER pAd, +- IN UINT8 channel) +-{ +- int i; +- for (i = 0; i < pAd->ChannelListNum; i++) +- { +- if (pAd->ChannelList[i].Channel == channel) +- break; +- } ++ IN UINT8 channel); + +- if (i == pAd->ChannelListNum) +- return 0xff; +- else +- return pAd->ChannelList[i].MaxTxPwr; +-} + #endif // __CHLIST_H__ + +diff --git a/drivers/staging/rt2860/common/2860_rtmp_init.c b/drivers/staging/rt2860/common/2860_rtmp_init.c +deleted file mode 100644 +index 98b0f8e..0000000 +--- a/drivers/staging/rt2860/common/2860_rtmp_init.c ++++ /dev/null +@@ -1,897 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- 2860_rtmp_init.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 2002-08-01 created +- John Chang 2004-08-20 RT2561/2661 use scatter-gather scheme +- Jan Lee 2006-09-15 RT2860. Change for 802.11n , EEPROM, Led, BA, HT. +-*/ +-#include "../rt_config.h" +- +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Allocate DMA memory blocks for send, receive +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG RingBasePaHigh; +- ULONG RingBasePaLow; +- PVOID RingBaseVa; +- INT index, num; +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- ULONG ErrorValue = 0; +- PRTMP_TX_RING pTxRing; +- PRTMP_DMABUF pDmaBuf; +- PNDIS_PACKET pPacket; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); +- do +- { +- // +- // Allocate all ring descriptors, include TxD, RxD, MgmtD. +- // Although each size is different, to prevent cacheline and alignment +- // issue, I intentional set them all to 64 bytes. +- // +- for (num=0; numTxDescRing[num].AllocSize = TX_RING_SIZE * TXD_SIZE; +- RTMP_AllocateTxDescMemory( +- pAd, +- num, +- pAd->TxDescRing[num].AllocSize, +- FALSE, +- &pAd->TxDescRing[num].AllocVa, +- &pAd->TxDescRing[num].AllocPa); +- +- if (pAd->TxDescRing[num].AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocSize); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num].AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxDescRing[num].AllocPa); +- RingBaseVa = pAd->TxDescRing[num].AllocVa; +- +- // +- // Allocate all 1st TXBuf's memory for this TxRing +- // +- pAd->TxBufSpace[num].AllocSize = TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; +- RTMP_AllocateFirstTxBuffer( +- pAd, +- num, +- pAd->TxBufSpace[num].AllocSize, +- FALSE, +- &pAd->TxBufSpace[num].AllocVa, +- &pAd->TxBufSpace[num].AllocPa); +- +- if (pAd->TxBufSpace[num].AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocSize); +- +- // Save PA & VA for further operation +- BufBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num].AllocPa); +- BufBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxBufSpace[num].AllocPa); +- BufBaseVa = pAd->TxBufSpace[num].AllocVa; +- +- // +- // Initialize Tx Ring Descriptor and associated buffer memory +- // +- pTxRing = &pAd->TxRing[num]; +- for (index = 0; index < TX_RING_SIZE; index++) +- { +- pTxRing->Cell[index].pNdisPacket = NULL; +- pTxRing->Cell[index].pNextNdisPacket = NULL; +- // Init Tx Ring Size, Va, Pa variables +- pTxRing->Cell[index].AllocSize = TXD_SIZE; +- pTxRing->Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pTxRing->Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pTxRing->Cell[index].AllocPa, RingBasePaLow); +- +- // Setup Tx Buffer size & address. only 802.11 header will store in this space +- pDmaBuf = &pTxRing->Cell[index].DmaBuf; +- pDmaBuf->AllocSize = TX_DMA_1ST_BUFFER_SIZE; +- pDmaBuf->AllocVa = BufBaseVa; +- RTMP_SetPhysicalAddressHigh(pDmaBuf->AllocPa, BufBasePaHigh); +- RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, BufBasePaLow); +- +- // link the pre-allocated TxBuf to TXD +- pTxD = (PTXD_STRUC) pTxRing->Cell[index].AllocVa; +- pTxD->SDPtr0 = BufBasePaLow; +- // advance to next ring descriptor address +- pTxD->DMADONE = 1; +- RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; +- +- // advance to next TxBuf address +- BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; +- BufBaseVa = (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("TxRing[%d]: total %d entry allocated\n", num, index)); +- } +- if (Status == NDIS_STATUS_RESOURCES) +- break; +- +- // +- // Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler +- // +- pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * TXD_SIZE; +- RTMP_AllocateMgmtDescMemory( +- pAd, +- pAd->MgmtDescRing.AllocSize, +- FALSE, +- &pAd->MgmtDescRing.AllocVa, +- &pAd->MgmtDescRing.AllocPa); +- +- if (pAd->MgmtDescRing.AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->MgmtDescRing.AllocPa); +- RingBaseVa = pAd->MgmtDescRing.AllocVa; +- +- // +- // Initialize MGMT Ring and associated buffer memory +- // +- for (index = 0; index < MGMT_RING_SIZE; index++) +- { +- pAd->MgmtRing.Cell[index].pNdisPacket = NULL; +- pAd->MgmtRing.Cell[index].pNextNdisPacket = NULL; +- // Init MGMT Ring Size, Va, Pa variables +- pAd->MgmtRing.Cell[index].AllocSize = TXD_SIZE; +- pAd->MgmtRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->MgmtRing.Cell[index].AllocPa, RingBasePaLow); +- +- // Offset to next ring descriptor address +- RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; +- +- // link the pre-allocated TxBuf to TXD +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; +- pTxD->DMADONE = 1; +- +- // no pre-allocated buffer required in MgmtRing for scatter-gather case +- } +- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", index)); +- +- // +- // Allocate RX ring descriptor's memory except Tx ring which allocated eariler +- // +- pAd->RxDescRing.AllocSize = RX_RING_SIZE * RXD_SIZE; +- RTMP_AllocateRxDescMemory( +- pAd, +- pAd->RxDescRing.AllocSize, +- FALSE, +- &pAd->RxDescRing.AllocVa, +- &pAd->RxDescRing.AllocPa); +- +- if (pAd->RxDescRing.AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize); +- +- +- printk("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, +- pAd->RxDescRing.AllocSize); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->RxDescRing.AllocPa); +- RingBaseVa = pAd->RxDescRing.AllocVa; +- +- // +- // Initialize Rx Ring and associated buffer memory +- // +- for (index = 0; index < RX_RING_SIZE; index++) +- { +- // Init RX Ring Size, Va, Pa variables +- pAd->RxRing.Cell[index].AllocSize = RXD_SIZE; +- pAd->RxRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->RxRing.Cell[index].AllocPa, RingBasePaLow); +- +- // Offset to next ring descriptor address +- RingBasePaLow += RXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + RXD_SIZE; +- +- // Setup Rx associated Buffer size & allocate share memory +- pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; +- pDmaBuf->AllocSize = RX_BUFFER_AGGRESIZE; +- pPacket = RTMP_AllocateRxPacketBuffer( +- pAd, +- pDmaBuf->AllocSize, +- FALSE, +- &pDmaBuf->AllocVa, +- &pDmaBuf->AllocPa); +- +- /* keep allocated rx packet */ +- pAd->RxRing.Cell[index].pNdisPacket = pPacket; +- +- // Error handling +- if (pDmaBuf->AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate RxRing's 1st buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); +- +- // Write RxD buffer address & allocated buffer length +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; +- pRxD->SDP0 = RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); +- pRxD->DDONE = 0; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Rx Ring: total %d entry allocated\n", index)); +- +- } while (FALSE); +- +- +- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); +- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); +- +- if (pAd->FragFrame.pFragPacket == NULL) +- { +- Status = NDIS_STATUS_RESOURCES; +- } +- +- if (Status != NDIS_STATUS_SUCCESS) +- { +- // Log error inforamtion +- NdisWriteErrorLogEntry( +- pAd->AdapterHandle, +- NDIS_ERROR_CODE_OUT_OF_RESOURCES, +- 1, +- ErrorValue); +- } +- +- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); +- return Status; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Initialize transmit data structures +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- Initialize all transmit releated private buffer, include those define +- in RTMP_ADAPTER structure and all private data structures. +- +- ======================================================================== +-*/ +-VOID NICInitTxRxRingAndBacklogQueue( +- IN PRTMP_ADAPTER pAd) +-{ +- //WPDMA_GLO_CFG_STRUC GloCfg; +- int i; +- +- DBGPRINT(RT_DEBUG_TRACE, ("<--> NICInitTxRxRingAndBacklogQueue\n")); +- +- // Initialize all transmit related software queues +- InitializeQueueHeader(&pAd->TxSwQueue[QID_AC_BE]); +- InitializeQueueHeader(&pAd->TxSwQueue[QID_AC_BK]); +- InitializeQueueHeader(&pAd->TxSwQueue[QID_AC_VI]); +- InitializeQueueHeader(&pAd->TxSwQueue[QID_AC_VO]); +- InitializeQueueHeader(&pAd->TxSwQueue[QID_HCCA]); +- +- // Init RX Ring index pointer +- pAd->RxRing.RxSwReadIdx = 0; +- pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; +- +- // Init TX rings index pointer +- for (i=0; iTxRing[i].TxSwFreeIdx = 0; +- pAd->TxRing[i].TxCpuIdx = 0; +- } +- +- // init MGMT ring index pointer +- pAd->MgmtRing.TxSwFreeIdx = 0; +- pAd->MgmtRing.TxCpuIdx = 0; +- +- pAd->PrivateInfo.TxRingFullCnt = 0; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Reset NIC Asics. Call after rest DMA. So reset TX_CTX_IDX to zero. +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- Reset NIC to initial state AS IS system boot up time. +- +- ======================================================================== +-*/ +-VOID RTMPRingCleanUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType) +-{ +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; +- int i; +- PRTMP_TX_RING pTxRing; +- unsigned long IrqFlags; +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, pAd->RalinkCounters.PendingNdisPacketCount)); +- switch (RingType) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: +- case QID_HCCA: +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- pTxRing = &pAd->TxRing[RingType]; +- +- // We have to clean all descriptors in case some error happened with reset +- for (i=0; iCell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNdisPacket = NULL; +- } +- +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNextNdisPacket = NULL; +- } +- } +- +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + RingType * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + RingType * 0x10, pTxRing->TxCpuIdx); +- +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- while (pAd->TxSwQueue[RingType].Head != NULL) +- { +- pEntry = RemoveHeadQueue(&pAd->TxSwQueue[RingType]); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- DBGPRINT(RT_DEBUG_TRACE,("Release 1 NDIS packet from s/w backlog queue\n")); +- } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- break; +- +- case QID_MGMT: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->MgmtRingLock); +- +- for (i=0; iMgmtRing.Cell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; +- // rlease scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNdisPacket = NULL; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL; +- +- } +- +- RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pAd->MgmtRing.TxDmaIdx); +- pAd->MgmtRing.TxSwFreeIdx = pAd->MgmtRing.TxDmaIdx; +- pAd->MgmtRing.TxCpuIdx = pAd->MgmtRing.TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +- +- NdisReleaseSpinLock(&pAd->MgmtRingLock); +- pAd->RalinkCounters.MgmtRingFullCount = 0; +- break; +- +- case QID_RX: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->RxRingLock); +- +- for (i=0; iRxRing.Cell[i].AllocVa; +- pRxD->DDONE = 0 ; +- } +- +- RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); +- pAd->RxRing.RxSwReadIdx = pAd->RxRing.RxDmaIdx; +- pAd->RxRing.RxCpuIdx = ((pAd->RxRing.RxDmaIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxDmaIdx-1)); +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- +- NdisReleaseSpinLock(&pAd->RxRingLock); +- break; +- +- default: +- break; +- } +-} +- +- +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd) +-{ +- PPCI_DEV pci_dev; +- dma_addr_t *phy_addr; +- POS_COOKIE pObj = (POS_COOKIE) handle; +- +- pci_dev = pObj->pci_dev; +- phy_addr = &pObj->pAd_pa; +- +- *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); +- +- if (*ppAd) +- { +- NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +- ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle; +- return (NDIS_STATUS_SUCCESS); +- } else { +- return (NDIS_STATUS_FAILURE); +- } +-} +- +- +-void RTMP_AllocateTxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)PCI_ALLOC_CONSISTENT(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +-void RTMP_AllocateMgmtDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)PCI_ALLOC_CONSISTENT(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +-void RTMP_AllocateRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)PCI_ALLOC_CONSISTENT(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +-void RTMP_FreeRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- PCI_FREE_CONSISTENT(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); +-} +- +- +-void RTMP_AllocateFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)PCI_ALLOC_CONSISTENT(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +-} +- +-/* +- * FUNCTION: Allocate a common buffer for DMA +- * ARGUMENTS: +- * AdapterHandle: AdapterHandle +- * Length: Number of bytes to allocate +- * Cached: Whether or not the memory can be cached +- * VirtualAddress: Pointer to memory is returned here +- * PhysicalAddress: Physical address corresponding to virtual address +- */ +- +-void RTMP_AllocateSharedMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)PCI_ALLOC_CONSISTENT(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +-} +- +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +- int index, num , j; +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- unsigned int IrqFlags; +- +- POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); +- +- // Free TxSwQueue Packet +- for (index=0; index irq_lock, IrqFlags); +- pQueue = &pAd->TxSwQueue[index]; +- while (pQueue->Head) +- { +- pEntry = RemoveHeadQueue(pQueue); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- } +- +- // Free Tx Ring Packet +- for (index=0;index< NUM_OF_TX_RING;index++) +- { +- pTxRing = &pAd->TxRing[index]; +- +- for (j=0; j< TX_RING_SIZE; j++) +- { +- pTxD = (PTXD_STRUC) (pTxRing->Cell[j].AllocVa); +- pPacket = pTxRing->Cell[j].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[j].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[j].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- +- } +- } +- +- for (index = RX_RING_SIZE - 1 ; index >= 0; index--) +- { +- if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) && (pAd->RxRing.Cell[index].pNdisPacket)) +- { +- PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); +- RELEASE_NDIS_PACKET(pAd, pAd->RxRing.Cell[index].pNdisPacket, NDIS_STATUS_SUCCESS); +- } +- } +- NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(RTMP_DMACB)); +- +- if (pAd->RxDescRing.AllocVa) +- { +- PCI_FREE_CONSISTENT(pObj->pci_dev, pAd->RxDescRing.AllocSize, pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocPa); +- } +- NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); +- +- if (pAd->MgmtDescRing.AllocVa) +- { +- PCI_FREE_CONSISTENT(pObj->pci_dev, pAd->MgmtDescRing.AllocSize, pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocPa); +- } +- NdisZeroMemory(&pAd->MgmtDescRing, sizeof(RTMP_DMABUF)); +- +- for (num = 0; num < NUM_OF_TX_RING; num++) +- { +- if (pAd->TxBufSpace[num].AllocVa) +- { +- PCI_FREE_CONSISTENT(pObj->pci_dev, pAd->TxBufSpace[num].AllocSize, pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); +- +- if (pAd->TxDescRing[num].AllocVa) +- { +- PCI_FREE_CONSISTENT(pObj->pci_dev, pAd->TxDescRing[num].AllocSize, pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); +- } +- +- if (pAd->FragFrame.pFragPacket) +- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- RTMPFreeTxRxRingMemory\n")); +-} +- +- +-/* +- * FUNCTION: Allocate a packet buffer for DMA +- * ARGUMENTS: +- * AdapterHandle: AdapterHandle +- * Length: Number of bytes to allocate +- * Cached: Whether or not the memory can be cached +- * VirtualAddress: Pointer to memory is returned here +- * PhysicalAddress: Physical address corresponding to virtual address +- * Notes: +- * Cached is ignored: always cached memory +- */ +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- PNDIS_PACKET pkt; +- +- pkt = RTPKT_TO_OSPKT(DEV_ALLOC_SKB(Length)); +- +- if (pkt == NULL) { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate rx %ld size packet\n",Length)); +- } +- +- if (pkt) { +- RTMP_SET_PACKET_SOURCE(pkt, PKTSRC_NDIS); +- *VirtualAddress = (PVOID) RTPKT_TO_OSPKT(pkt)->data; +- *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE); +- } else { +- *VirtualAddress = (PVOID) NULL; +- *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; +- } +- +- return (PNDIS_PACKET) pkt; +-} +- +- +-VOID Invalid_Remaining_Packet( +- IN PRTMP_ADAPTER pAd, +- IN ULONG VirtualAddress) +-{ +- NDIS_PHYSICAL_ADDRESS PhysicalAddress; +- +- PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE); +-} +- +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending) +-{ +- PRXD_STRUC pRxD; +- PNDIS_PACKET pRxPacket = NULL; +- PNDIS_PACKET pNewPacket; +- PVOID AllocVa; +- NDIS_PHYSICAL_ADDRESS AllocPa; +- BOOLEAN bReschedule = FALSE; +- +- RTMP_SEM_LOCK(&pAd->RxRingLock); +- +- if (*pRxPending == 0) +- { +- // Get how may packets had been received +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &pAd->RxRing.RxDmaIdx); +- +- if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) +- { +- // no more rx packets +- bReschedule = FALSE; +- goto done; +- } +- +- // get rx pending count +- if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx) +- *pRxPending = pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; +- else +- *pRxPending = pAd->RxRing.RxDmaIdx + RX_RING_SIZE - pAd->RxRing.RxSwReadIdx; +- +- } +- +- // Point to Rx indexed rx ring descriptor +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].AllocVa; +- +- if (pRxD->DDONE == 0) +- { +- *pRxPending = 0; +- // DMAIndx had done but DDONE bit not ready +- bReschedule = TRUE; +- goto done; +- } +- +- +- // return rx descriptor +- NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE); +- +- pNewPacket = RTMP_AllocateRxPacketBuffer(pAd, RX_BUFFER_AGGRESIZE, FALSE, &AllocVa, &AllocPa); +- +- if (pNewPacket) +- { +- // unmap the rx buffer +- PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocPa, +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); +- pRxPacket = pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].pNdisPacket; +- +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].pNdisPacket = (PNDIS_PACKET) pNewPacket; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocVa = AllocVa; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocPa = AllocPa; +- /* update SDP0 to new buffer of rx packet */ +- pRxD->SDP0 = AllocPa; +- } +- else +- { +- //printk("No Rx Buffer\n"); +- pRxPacket = NULL; +- bReschedule = TRUE; +- } +- +- pRxD->DDONE = 0; +- +- // had handled one rx packet +- *pRxPending = *pRxPending - 1; +- +- // update rx descriptor and kick rx +- INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE); +- +- pAd->RxRing.RxCpuIdx = (pAd->RxRing.RxSwReadIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxSwReadIdx-1); +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- +-done: +- RTMP_SEM_UNLOCK(&pAd->RxRingLock); +- *pbReschedule = bReschedule; +- return pRxPacket; +-} +-/* End of 2860_rtmp_init.c */ +- +diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c +index 256cb67..5593966 100644 +--- a/drivers/staging/rt2860/common/action.c ++++ b/drivers/staging/rt2860/common/action.c +@@ -150,7 +150,9 @@ VOID MlmeADDBAAction( + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(FRAME_ADDBA_REQ), &Frame, + END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); ++ ++ MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[pInfo->TID]), pOutBuffer, FrameLen); ++ + MlmeFreeMemory(pAd, pOutBuffer); + + DBGPRINT(RT_DEBUG_TRACE, ("BA - Send ADDBA request. StartSeq = %x, FrameLen = %ld. BufSize = %d\n", Frame.BaStartSeq.field.StartSeq, FrameLen, Frame.BaParm.BufSize)); +@@ -527,9 +529,13 @@ VOID SendRefreshBAR( + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(FRAME_BAR), &FrameBar, + END_OF_ARGS); ++ //if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) ++ if (1) // Now we always send BAR. ++ { ++ //MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen); ++ MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[TID]), pOutBuffer, FrameLen); + +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- ++ } + MlmeFreeMemory(pAd, pOutBuffer); + } + } +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index b7bbe99..ff4dce6 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -35,8 +35,8 @@ + #define ORI_BA_SESSION_TIMEOUT (2000) // ms + #define REC_BA_SESSION_IDLE_TIMEOUT (1000) // ms + +-#define REORDERING_PACKET_TIMEOUT ((100 * HZ)/1000) // system ticks -- 100 ms +-#define MAX_REORDERING_PACKET_TIMEOUT ((3000 * HZ)/1000) // system ticks -- 100 ms ++#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms ++#define MAX_REORDERING_PACKET_TIMEOUT ((3000 * OS_HZ)/1000) // system ticks -- 100 ms + + #define RESET_RCV_SEQ (0xFFFF) + +@@ -460,6 +460,8 @@ void ba_flush_reordering_timeout_mpdus( + pBAEntry->LastIndSeq = Sequence; + } + ++ DBGPRINT(RT_DEBUG_OFF, ("%x, flush one!\n", pBAEntry->LastIndSeq)); ++ + } + } + +@@ -493,7 +495,7 @@ VOID BAOriSessionSetUp( + { + // try again after 3 secs + DelayTime = 3000; +-// printk("DeCline BA from Peer\n"); ++// DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n")); + // return; + } + +@@ -531,11 +533,6 @@ VOID BAOriSessionSetUp( + pBAEntry->TimeOutValue = TimeOut; + pBAEntry->pAdapter = pAd; + +- DBGPRINT(RT_DEBUG_TRACE,("Send AddBA to %02x:%02x:%02x:%02x:%02x:%02x Tid:%d isForced:%d Wcid:%d\n" +- ,pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2] +- ,pEntry->Addr[3],pEntry->Addr[4],pEntry->Addr[5] +- ,TID,isForced,pEntry->Aid)); +- + if (!(pEntry->TXBAbitmap & (1<ORIBATimer, GET_TIMER_FUNCTION(BAOriSessionSetupTimeout), pBAEntry, FALSE); +@@ -573,6 +570,8 @@ VOID BAOriSessionAdd( + + pBAEntry->TimeOutValue = pFrame->TimeOutValue; + pBAEntry->ORI_BA_Status = Originator_Done; ++ pAd->BATable.numDoneOriginator ++; ++ + // reset sequence number + pBAEntry->Sequence = BA_ORI_INIT_SEQ; + // Set Bitmap flag. +@@ -668,7 +667,7 @@ BOOLEAN BARecSessionAdd( + // initial sequence number + pBAEntry->LastIndSeq = RESET_RCV_SEQ; //pFrame->BaStartSeq.field.StartSeq; + +- printk("Start Seq = %08x\n", pFrame->BaStartSeq.field.StartSeq); ++ DBGPRINT(RT_DEBUG_OFF, ("Start Seq = %08x\n", pFrame->BaStartSeq.field.StartSeq)); + + if (pEntry->RXBAbitmap & (1<BADeclineBitmap &= ~(1<Aid, TID); ++ RTMP_ADD_BA_SESSION_TO_ASIC(pAd, pEntry->Aid, TID); + + DBGPRINT(RT_DEBUG_TRACE,("MACEntry[%d]RXBAbitmap = 0x%x. BARecWcidArray=%d\n", + pEntry->Aid, pEntry->RXBAbitmap, pEntry->BARecWcidArray[TID])); +@@ -713,8 +712,8 @@ BA_REC_ENTRY *BATableAllocRecEntry( + + if (pAd->BATable.numAsRecipient >= MAX_BARECI_SESSION) + { +- printk("BA Recipeint Session (%ld) > %d\n", pAd->BATable.numAsRecipient, +- MAX_BARECI_SESSION); ++ DBGPRINT(RT_DEBUG_OFF, ("BA Recipeint Session (%ld) > %d\n", ++ pAd->BATable.numAsRecipient, MAX_BARECI_SESSION)); + goto done; + } + +@@ -794,6 +793,7 @@ VOID BATableFreeOriEntry( + NdisAcquireSpinLock(&pAd->BATabLock); + if (pBAEntry->ORI_BA_Status == Originator_Done) + { ++ pAd->BATable.numDoneOriginator -= 1; + pEntry->TXBAbitmap &= (~(1<<(pBAEntry->TID) )); + DBGPRINT(RT_DEBUG_TRACE, ("BATableFreeOriEntry numAsOriginator= %ld\n", pAd->BATable.numAsRecipient)); + // Erase Bitmap flag. +@@ -867,9 +867,8 @@ VOID BAOriSessionTearDown( + // force send specified TID DelBA + MLME_DELBA_REQ_STRUCT DelbaReq; + MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem == NULL) +- return; +- ++ if (Elem != NULL) ++ { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); + NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); + +@@ -877,15 +876,15 @@ VOID BAOriSessionTearDown( + DelbaReq.Wcid = Wcid; + DelbaReq.TID = TID; + DelbaReq.Initiator = ORIGINATOR; +-#if 1 + Elem->MsgLen = sizeof(DelbaReq); + NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); + MlmeDELBAAction(pAd, Elem); + kfree(Elem); +-#else +- MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ORI_DELBA_CATE, sizeof(MLME_DELBA_REQ_STRUCT), (PVOID)&DelbaReq); +- RT28XX_MLME_HANDLER(pAd); +-#endif ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s(bForceSend):alloc memory failed!\n", __func__)); ++ } + } + + return; +@@ -902,9 +901,8 @@ VOID BAOriSessionTearDown( + { + MLME_DELBA_REQ_STRUCT DelbaReq; + MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem == NULL) +- return; +- ++ if (Elem != NULL) ++ { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); + NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); + +@@ -912,15 +910,16 @@ VOID BAOriSessionTearDown( + DelbaReq.Wcid = Wcid; + DelbaReq.TID = pBAEntry->TID; + DelbaReq.Initiator = ORIGINATOR; +-#if 1 + Elem->MsgLen = sizeof(DelbaReq); + NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); + MlmeDELBAAction(pAd, Elem); + kfree(Elem); +-#else +- MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ORI_DELBA_CATE, sizeof(MLME_DELBA_REQ_STRUCT), (PVOID)&DelbaReq); +- RT28XX_MLME_HANDLER(pAd); +-#endif ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __func__)); ++ return; ++ } + } + RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + BATableFreeOriEntry(pAd, Idx); +@@ -964,7 +963,6 @@ VOID BARecSessionTearDown( + { + MLME_DELBA_REQ_STRUCT DelbaReq; + BOOLEAN Cancelled; +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); + //ULONG offset; + //UINT32 VALUE; + +@@ -975,6 +973,9 @@ VOID BARecSessionTearDown( + // + if (bPassive == FALSE) + { ++ MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ if (Elem != NULL) ++ { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); + NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); + +@@ -982,15 +983,16 @@ VOID BARecSessionTearDown( + DelbaReq.Wcid = Wcid; + DelbaReq.TID = TID; + DelbaReq.Initiator = RECIPIENT; +-#if 1 + Elem->MsgLen = sizeof(DelbaReq); + NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); + MlmeDELBAAction(pAd, Elem); + kfree(Elem); +-#else +- MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ORI_DELBA_CATE, sizeof(MLME_DELBA_REQ_STRUCT), (PVOID)&DelbaReq); +- RT28XX_MLME_HANDLER(pAd); +-#endif ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __func__)); ++ return; ++ } + } + + +@@ -1009,7 +1011,7 @@ VOID BARecSessionTearDown( + pAd->MacTab.Content[Wcid].RXBAbitmap &= (~(1<<(pBAEntry->TID))); + pAd->MacTab.Content[Wcid].BARecWcidArray[TID] = 0; + +- RT28XX_DEL_BA_SESSION_FROM_ASIC(pAd, Wcid, TID); ++ RTMP_DEL_BA_SESSION_FROM_ASIC(pAd, Wcid, TID); + + NdisReleaseSpinLock(&pAd->BATabLock); + +@@ -1061,9 +1063,12 @@ VOID BAOriSessionSetupTimeout( + + pAd = pBAEntry->pAdapter; + ++ { + // Do nothing if monitor mode is on + if (MONITOR_ON(pAd)) + return; ++ } ++ + + pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; + +@@ -1079,12 +1084,9 @@ VOID BAOriSessionSetupTimeout( + AddbaReq.TimeOutValue = 0; + AddbaReq.Token = pBAEntry->Token; + MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID)&AddbaReq); +- RT28XX_MLME_HANDLER(pAd); +- DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) to %02x:%02x:%02x:%02x:%02x:%02x Tid:%d Wcid:%d\n" +- ,pBAEntry->Token +- ,pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2] +- ,pEntry->Addr[3],pEntry->Addr[4],pEntry->Addr[5] +- ,pBAEntry->TID,pEntry->Aid)); ++ RTMP_MLME_HANDLER(pAd); ++ DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) : Send ADD BA again\n", pBAEntry->Token)); ++ + pBAEntry->Token++; + RTMPSetTimer(&pBAEntry->ORIBATimer, ORI_BA_SESSION_TIMEOUT); + } +@@ -1131,7 +1133,7 @@ VOID BARecSessionIdleTimeout( + pAd = pBAEntry->pAdapter; + // flush all pending reordering mpdus + ba_refresh_reordering_mpdus(pAd, pBAEntry); +- printk("%ld: REC BA session Timeout\n", Now32); ++ DBGPRINT(RT_DEBUG_OFF, ("%ld: REC BA session Timeout\n", Now32)); + } + } + } +@@ -1174,7 +1176,7 @@ VOID PeerAddBAReqAction( + if ((pAd->CommonCfg.bBADecline == FALSE) && IS_HT_STA(pMacEntry)) + { + pAddreqFrame = (PFRAME_ADDBA_REQ)(&Elem->Msg[0]); +- printk("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid); ++ DBGPRINT(RT_DEBUG_OFF, ("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid)); + if (BARecSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], pAddreqFrame)) + Status = 0; + else +@@ -1367,7 +1369,7 @@ BOOLEAN CntlEnqueueForRecv( + + if (SEQ_SMALLER(pBAEntry->LastIndSeq, pFrame->BAStartingSeq.field.StartSeq, MAXSEQ)) + { +- //printk("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq); ++ //DBGPRINT(RT_DEBUG_TRACE, ("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, pFrame->BAStartingSeq.field.StartSeq); + pBAEntry->LastIndSeq = (pFrame->BAStartingSeq.field.StartSeq == 0) ? MAXSEQ :(pFrame->BAStartingSeq.field.StartSeq -1); + } +@@ -1388,8 +1390,6 @@ VOID SendPSMPAction( + //ULONG Idx; + FRAME_PSMP_ACTION Frame; + ULONG FrameLen; +- UCHAR bbpdata=0; +- UINT32 macdata; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory + if (NStatus != NDIS_STATUS_SUCCESS) +@@ -1405,48 +1405,26 @@ VOID SendPSMPAction( + switch (Psmp) + { + case MMPS_ENABLE: +- if (IS_RT3090(pAd)) ++#ifdef RT30xx ++ if (IS_RT30xx(pAd) ++ &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) + { +- // disable MMPS BBP control register +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata); +- bbpdata &= ~(0x04); //bit 2 +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata); +- +- // disable MMPS MAC control register +- RTMP_IO_READ32(pAd, 0x1210, &macdata); +- macdata &= ~(0x09); //bit 0, 3 +- RTMP_IO_WRITE32(pAd, 0x1210, macdata); ++ RTMP_ASIC_MMPS_DISABLE(pAd); + } ++#endif // RT30xx // + Frame.Psmp = 0; + break; + case MMPS_DYNAMIC: +- if (IS_RT3090(pAd)) +- { +- // enable MMPS BBP control register +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata); +- bbpdata |= 0x04; //bit 2 +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata); +- +- // enable MMPS MAC control register +- RTMP_IO_READ32(pAd, 0x1210, &macdata); +- macdata |= 0x09; //bit 0, 3 +- RTMP_IO_WRITE32(pAd, 0x1210, macdata); +- } + Frame.Psmp = 3; + break; + case MMPS_STATIC: +- if (IS_RT3090(pAd)) ++#ifdef RT30xx ++ if (IS_RT30xx(pAd) ++ &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) + { +- // enable MMPS BBP control register +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata); +- bbpdata |= 0x04; //bit 2 +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata); +- +- // enable MMPS MAC control register +- RTMP_IO_READ32(pAd, 0x1210, &macdata); +- macdata |= 0x09; //bit 0, 3 +- RTMP_IO_WRITE32(pAd, 0x1210, macdata); ++ RTMP_ASIC_MMPS_ENABLE(pAd); + } ++#endif // RT30xx // + Frame.Psmp = 1; + break; + } +@@ -1504,20 +1482,22 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet( + ASSERT(pRxBlk->pRxPacket); + pRxPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); + +- RTPKT_TO_OSPKT(pRxPkt)->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); +- RTPKT_TO_OSPKT(pRxPkt)->data = pRxBlk->pData; +- RTPKT_TO_OSPKT(pRxPkt)->len = pRxBlk->DataSize; +- RTPKT_TO_OSPKT(pRxPkt)->tail = RTPKT_TO_OSPKT(pRxPkt)->data + RTPKT_TO_OSPKT(pRxPkt)->len; ++ SET_OS_PKT_NETDEV(pRxPkt, get_netdev_from_bssid(pAd, FromWhichBSSID)); ++ SET_OS_PKT_DATAPTR(pRxPkt, pRxBlk->pData); ++ SET_OS_PKT_LEN(pRxPkt, pRxBlk->DataSize); ++ SET_OS_PKT_DATATAIL(pRxPkt, pRxBlk->pData, pRxBlk->DataSize); + + // + // copy 802.3 header, if necessary + // + if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) + { ++ { + #ifdef LINUX + NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3); + #endif + } ++ } + } + + +@@ -1550,7 +1530,8 @@ static VOID ba_enqueue_reordering_packet( + UINT16 Sequence = (UINT16) pRxBlk->pHeader->Sequence; + + mpdu_blk = ba_mpdu_blk_alloc(pAd); +- if (mpdu_blk != NULL) ++ if ((mpdu_blk != NULL) && ++ (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) + { + // Write RxD buffer address & allocated buffer length + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +new file mode 100644 +index 0000000..2c311b1 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -0,0 +1,1404 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ cmm_aes.c ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Paul Wu 02-25-02 Initial ++*/ ++ ++#include "../rt_config.h" ++ ++ ++typedef struct ++{ ++ UINT32 erk[64]; /* encryption round keys */ ++ UINT32 drk[64]; /* decryption round keys */ ++ int nr; /* number of rounds */ ++} ++aes_context; ++ ++/*****************************/ ++/******** SBOX Table *********/ ++/*****************************/ ++ ++UCHAR SboxTable[256] = ++{ ++ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, ++ 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, ++ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, ++ 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, ++ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, ++ 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, ++ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, ++ 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, ++ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, ++ 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, ++ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, ++ 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, ++ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, ++ 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, ++ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, ++ 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, ++ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, ++ 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, ++ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, ++ 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, ++ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, ++ 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, ++ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, ++ 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, ++ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, ++ 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, ++ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, ++ 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, ++ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, ++ 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, ++ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, ++ 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ++}; ++ ++VOID xor_32( ++ IN PUCHAR a, ++ IN PUCHAR b, ++ OUT PUCHAR out) ++{ ++ INT i; ++ ++ for (i=0;i<4; i++) ++ { ++ out[i] = a[i] ^ b[i]; ++ } ++} ++ ++VOID xor_128( ++ IN PUCHAR a, ++ IN PUCHAR b, ++ OUT PUCHAR out) ++{ ++ INT i; ++ ++ for (i=0;i<16; i++) ++ { ++ out[i] = a[i] ^ b[i]; ++ } ++} ++ ++UCHAR RTMPCkipSbox( ++ IN UCHAR a) ++{ ++ return SboxTable[(int)a]; ++} ++ ++VOID next_key( ++ IN PUCHAR key, ++ IN INT round) ++{ ++ UCHAR rcon; ++ UCHAR sbox_key[4]; ++ UCHAR rcon_table[12] = ++ { ++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, ++ 0x1b, 0x36, 0x36, 0x36 ++ }; ++ ++ sbox_key[0] = RTMPCkipSbox(key[13]); ++ sbox_key[1] = RTMPCkipSbox(key[14]); ++ sbox_key[2] = RTMPCkipSbox(key[15]); ++ sbox_key[3] = RTMPCkipSbox(key[12]); ++ ++ rcon = rcon_table[round]; ++ ++ xor_32(&key[0], sbox_key, &key[0]); ++ key[0] = key[0] ^ rcon; ++ ++ xor_32(&key[4], &key[0], &key[4]); ++ xor_32(&key[8], &key[4], &key[8]); ++ xor_32(&key[12], &key[8], &key[12]); ++} ++ ++VOID byte_sub( ++ IN PUCHAR in, ++ OUT PUCHAR out) ++{ ++ INT i; ++ ++ for (i=0; i< 16; i++) ++ { ++ out[i] = RTMPCkipSbox(in[i]); ++ } ++} ++ ++/************************************/ ++/* bitwise_xor() */ ++/* A 128 bit, bitwise exclusive or */ ++/************************************/ ++ ++void bitwise_xor(unsigned char *ina, unsigned char *inb, unsigned char *out) ++{ ++ int i; ++ for (i=0; i<16; i++) ++ { ++ out[i] = ina[i] ^ inb[i]; ++ } ++} ++ ++VOID shift_row( ++ IN PUCHAR in, ++ OUT PUCHAR out) ++{ ++ out[0] = in[0]; ++ out[1] = in[5]; ++ out[2] = in[10]; ++ out[3] = in[15]; ++ out[4] = in[4]; ++ out[5] = in[9]; ++ out[6] = in[14]; ++ out[7] = in[3]; ++ out[8] = in[8]; ++ out[9] = in[13]; ++ out[10] = in[2]; ++ out[11] = in[7]; ++ out[12] = in[12]; ++ out[13] = in[1]; ++ out[14] = in[6]; ++ out[15] = in[11]; ++} ++ ++VOID mix_column( ++ IN PUCHAR in, ++ OUT PUCHAR out) ++{ ++ INT i; ++ UCHAR add1b[4]; ++ UCHAR add1bf7[4]; ++ UCHAR rotl[4]; ++ UCHAR swap_halfs[4]; ++ UCHAR andf7[4]; ++ UCHAR rotr[4]; ++ UCHAR temp[4]; ++ UCHAR tempb[4]; ++ ++ for (i=0 ; i<4; i++) ++ { ++ if ((in[i] & 0x80)== 0x80) ++ add1b[i] = 0x1b; ++ else ++ add1b[i] = 0x00; ++ } ++ ++ swap_halfs[0] = in[2]; /* Swap halfs */ ++ swap_halfs[1] = in[3]; ++ swap_halfs[2] = in[0]; ++ swap_halfs[3] = in[1]; ++ ++ rotl[0] = in[3]; /* Rotate left 8 bits */ ++ rotl[1] = in[0]; ++ rotl[2] = in[1]; ++ rotl[3] = in[2]; ++ ++ andf7[0] = in[0] & 0x7f; ++ andf7[1] = in[1] & 0x7f; ++ andf7[2] = in[2] & 0x7f; ++ andf7[3] = in[3] & 0x7f; ++ ++ for (i = 3; i>0; i--) /* logical shift left 1 bit */ ++ { ++ andf7[i] = andf7[i] << 1; ++ if ((andf7[i-1] & 0x80) == 0x80) ++ { ++ andf7[i] = (andf7[i] | 0x01); ++ } ++ } ++ andf7[0] = andf7[0] << 1; ++ andf7[0] = andf7[0] & 0xfe; ++ ++ xor_32(add1b, andf7, add1bf7); ++ ++ xor_32(in, add1bf7, rotr); ++ ++ temp[0] = rotr[0]; /* Rotate right 8 bits */ ++ rotr[0] = rotr[1]; ++ rotr[1] = rotr[2]; ++ rotr[2] = rotr[3]; ++ rotr[3] = temp[0]; ++ ++ xor_32(add1bf7, rotr, temp); ++ xor_32(swap_halfs, rotl,tempb); ++ xor_32(temp, tempb, out); ++} ++ ++ ++/************************************************/ ++/* construct_mic_header1() */ ++/* Builds the first MIC header block from */ ++/* header fields. */ ++/************************************************/ ++ ++void construct_mic_header1( ++ unsigned char *mic_header1, ++ int header_length, ++ unsigned char *mpdu) ++{ ++ mic_header1[0] = (unsigned char)((header_length - 2) / 256); ++ mic_header1[1] = (unsigned char)((header_length - 2) % 256); ++ mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */ ++ mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */ ++ mic_header1[4] = mpdu[4]; /* A1 */ ++ mic_header1[5] = mpdu[5]; ++ mic_header1[6] = mpdu[6]; ++ mic_header1[7] = mpdu[7]; ++ mic_header1[8] = mpdu[8]; ++ mic_header1[9] = mpdu[9]; ++ mic_header1[10] = mpdu[10]; /* A2 */ ++ mic_header1[11] = mpdu[11]; ++ mic_header1[12] = mpdu[12]; ++ mic_header1[13] = mpdu[13]; ++ mic_header1[14] = mpdu[14]; ++ mic_header1[15] = mpdu[15]; ++} ++ ++/************************************************/ ++/* construct_mic_header2() */ ++/* Builds the last MIC header block from */ ++/* header fields. */ ++/************************************************/ ++ ++void construct_mic_header2( ++ unsigned char *mic_header2, ++ unsigned char *mpdu, ++ int a4_exists, ++ int qc_exists) ++{ ++ int i; ++ ++ for (i = 0; i<16; i++) mic_header2[i]=0x00; ++ ++ mic_header2[0] = mpdu[16]; /* A3 */ ++ mic_header2[1] = mpdu[17]; ++ mic_header2[2] = mpdu[18]; ++ mic_header2[3] = mpdu[19]; ++ mic_header2[4] = mpdu[20]; ++ mic_header2[5] = mpdu[21]; ++ ++ // In Sequence Control field, mute sequence numer bits (12-bit) ++ mic_header2[6] = mpdu[22] & 0x0f; /* SC */ ++ mic_header2[7] = 0x00; /* mpdu[23]; */ ++ ++ if ((!qc_exists) & a4_exists) ++ { ++ for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ ++ ++ } ++ ++ if (qc_exists && (!a4_exists)) ++ { ++ mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */ ++ mic_header2[9] = mpdu[25] & 0x00; ++ } ++ ++ if (qc_exists && a4_exists) ++ { ++ for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ ++ ++ mic_header2[14] = mpdu[30] & 0x0f; ++ mic_header2[15] = mpdu[31] & 0x00; ++ } ++} ++ ++ ++/************************************************/ ++/* construct_mic_iv() */ ++/* Builds the MIC IV from header fields and PN */ ++/************************************************/ ++ ++void construct_mic_iv( ++ unsigned char *mic_iv, ++ int qc_exists, ++ int a4_exists, ++ unsigned char *mpdu, ++ unsigned int payload_length, ++ unsigned char *pn_vector) ++{ ++ int i; ++ ++ mic_iv[0] = 0x59; ++ if (qc_exists && a4_exists) ++ mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */ ++ if (qc_exists && !a4_exists) ++ mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */ ++ if (!qc_exists) ++ mic_iv[1] = 0x00; ++ for (i = 2; i < 8; i++) ++ mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */ ++#ifdef CONSISTENT_PN_ORDER ++ for (i = 8; i < 14; i++) ++ mic_iv[i] = pn_vector[i - 8]; /* mic_iv[8:13] = PN[0:5] */ ++#else ++ for (i = 8; i < 14; i++) ++ mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */ ++#endif ++ i = (payload_length / 256); ++ i = (payload_length % 256); ++ mic_iv[14] = (unsigned char) (payload_length / 256); ++ mic_iv[15] = (unsigned char) (payload_length % 256); ++ ++} ++ ++/****************************************/ ++/* aes128k128d() */ ++/* Performs a 128 bit AES encrypt with */ ++/* 128 bit data. */ ++/****************************************/ ++void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphertext) ++{ ++ int round; ++ int i; ++ unsigned char intermediatea[16]; ++ unsigned char intermediateb[16]; ++ unsigned char round_key[16]; ++ ++ for(i=0; i<16; i++) round_key[i] = key[i]; ++ ++ for (round = 0; round < 11; round++) ++ { ++ if (round == 0) ++ { ++ xor_128(round_key, data, ciphertext); ++ next_key(round_key, round); ++ } ++ else if (round == 10) ++ { ++ byte_sub(ciphertext, intermediatea); ++ shift_row(intermediatea, intermediateb); ++ xor_128(intermediateb, round_key, ciphertext); ++ } ++ else /* 1 - 9 */ ++ { ++ byte_sub(ciphertext, intermediatea); ++ shift_row(intermediatea, intermediateb); ++ mix_column(&intermediateb[0], &intermediatea[0]); ++ mix_column(&intermediateb[4], &intermediatea[4]); ++ mix_column(&intermediateb[8], &intermediatea[8]); ++ mix_column(&intermediateb[12], &intermediatea[12]); ++ xor_128(intermediatea, round_key, ciphertext); ++ next_key(round_key, round); ++ } ++ } ++ ++} ++ ++void construct_ctr_preload( ++ unsigned char *ctr_preload, ++ int a4_exists, ++ int qc_exists, ++ unsigned char *mpdu, ++ unsigned char *pn_vector, ++ int c) ++{ ++ ++ int i = 0; ++ for (i=0; i<16; i++) ctr_preload[i] = 0x00; ++ i = 0; ++ ++ ctr_preload[0] = 0x01; /* flag */ ++ if (qc_exists && a4_exists) ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */ ++ if (qc_exists && !a4_exists) ctr_preload[1] = mpdu[24] & 0x0f; ++ ++ for (i = 2; i < 8; i++) ++ ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */ ++#ifdef CONSISTENT_PN_ORDER ++ for (i = 8; i < 14; i++) ++ ctr_preload[i] = pn_vector[i - 8]; /* ctr_preload[8:13] = PN[0:5] */ ++#else ++ for (i = 8; i < 14; i++) ++ ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ ++#endif ++ ctr_preload[14] = (unsigned char) (c / 256); // Ctr ++ ctr_preload[15] = (unsigned char) (c % 256); ++ ++} ++ ++BOOLEAN RTMPSoftDecryptAES( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, ++ IN PCIPHER_KEY pWpaKey) ++{ ++ UCHAR KeyID; ++ UINT HeaderLen; ++ UCHAR PN[6]; ++ UINT payload_len; ++ UINT num_blocks; ++ UINT payload_remainder; ++ USHORT fc; ++ UCHAR fc0; ++ UCHAR fc1; ++ UINT frame_type; ++ UINT frame_subtype; ++ UINT from_ds; ++ UINT to_ds; ++ INT a4_exists; ++ INT qc_exists; ++ UCHAR aes_out[16]; ++ int payload_index; ++ UINT i; ++ UCHAR ctr_preload[16]; ++ UCHAR chain_buffer[16]; ++ UCHAR padded_buffer[16]; ++ UCHAR mic_iv[16]; ++ UCHAR mic_header1[16]; ++ UCHAR mic_header2[16]; ++ UCHAR MIC[8]; ++ UCHAR TrailMIC[8]; ++ ++ ++ fc0 = *pData; ++ fc1 = *(pData + 1); ++ ++ fc = *((PUSHORT)pData); ++ ++ frame_type = ((fc0 >> 2) & 0x03); ++ frame_subtype = ((fc0 >> 4) & 0x0f); ++ ++ from_ds = (fc1 & 0x2) >> 1; ++ to_ds = (fc1 & 0x1); ++ ++ a4_exists = (from_ds & to_ds); ++ qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ ++ (frame_subtype == 0x09) || /* Likely to change. */ ++ (frame_subtype == 0x0a) || ++ (frame_subtype == 0x0b) ++ ); ++ ++ HeaderLen = 24; ++ if (a4_exists) ++ HeaderLen += 6; ++ ++ KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); ++ KeyID = KeyID >> 6; ++ ++ if (pWpaKey[KeyID].KeyLen == 0) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptAES failed!(KeyID[%d] Length can not be 0)\n", KeyID)); ++ return FALSE; ++ } ++ ++ PN[0] = *(pData+ HeaderLen); ++ PN[1] = *(pData+ HeaderLen + 1); ++ PN[2] = *(pData+ HeaderLen + 4); ++ PN[3] = *(pData+ HeaderLen + 5); ++ PN[4] = *(pData+ HeaderLen + 6); ++ PN[5] = *(pData+ HeaderLen + 7); ++ ++ payload_len = DataByteCnt - HeaderLen - 8 - 8; // 8 bytes for CCMP header , 8 bytes for MIC ++ payload_remainder = (payload_len) % 16; ++ num_blocks = (payload_len) / 16; ++ ++ ++ ++ // Find start of payload ++ payload_index = HeaderLen + 8; //IV+EIV ++ ++ for (i=0; i< num_blocks; i++) ++ { ++ construct_ctr_preload(ctr_preload, ++ a4_exists, ++ qc_exists, ++ pData, ++ PN, ++ i+1 ); ++ ++ aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); ++ ++ bitwise_xor(aes_out, pData + payload_index, chain_buffer); ++ NdisMoveMemory(pData + payload_index - 8, chain_buffer, 16); ++ payload_index += 16; ++ } ++ ++ // ++ // If there is a short final block, then pad it ++ // encrypt it and copy the unpadded part back ++ // ++ if (payload_remainder > 0) ++ { ++ construct_ctr_preload(ctr_preload, ++ a4_exists, ++ qc_exists, ++ pData, ++ PN, ++ num_blocks + 1); ++ ++ NdisZeroMemory(padded_buffer, 16); ++ NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); ++ ++ aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); ++ ++ bitwise_xor(aes_out, padded_buffer, chain_buffer); ++ NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder); ++ payload_index += payload_remainder; ++ } ++ ++ // ++ // Descrypt the MIC ++ // ++ construct_ctr_preload(ctr_preload, ++ a4_exists, ++ qc_exists, ++ pData, ++ PN, ++ 0); ++ NdisZeroMemory(padded_buffer, 16); ++ NdisMoveMemory(padded_buffer, pData + payload_index, 8); ++ ++ aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); ++ ++ bitwise_xor(aes_out, padded_buffer, chain_buffer); ++ ++ NdisMoveMemory(TrailMIC, chain_buffer, 8); ++ ++ ++ // ++ // Calculate MIC ++ // ++ ++ //Force the protected frame bit on ++ *(pData + 1) = *(pData + 1) | 0x40; ++ ++ // Find start of payload ++ // Because the CCMP header has been removed ++ payload_index = HeaderLen; ++ ++ construct_mic_iv( ++ mic_iv, ++ qc_exists, ++ a4_exists, ++ pData, ++ payload_len, ++ PN); ++ ++ construct_mic_header1( ++ mic_header1, ++ HeaderLen, ++ pData); ++ ++ construct_mic_header2( ++ mic_header2, ++ pData, ++ a4_exists, ++ qc_exists); ++ ++ aes128k128d(pWpaKey[KeyID].Key, mic_iv, aes_out); ++ bitwise_xor(aes_out, mic_header1, chain_buffer); ++ aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); ++ bitwise_xor(aes_out, mic_header2, chain_buffer); ++ aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); ++ ++ // iterate through each 16 byte payload block ++ for (i = 0; i < num_blocks; i++) ++ { ++ bitwise_xor(aes_out, pData + payload_index, chain_buffer); ++ payload_index += 16; ++ aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); ++ } ++ ++ // Add on the final payload block if it needs padding ++ if (payload_remainder > 0) ++ { ++ NdisZeroMemory(padded_buffer, 16); ++ NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); ++ ++ bitwise_xor(aes_out, padded_buffer, chain_buffer); ++ aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); ++ } ++ ++ // aes_out contains padded mic, discard most significant ++ // 8 bytes to generate 64 bit MIC ++ for (i = 0 ; i < 8; i++) MIC[i] = aes_out[i]; ++ ++ if (!NdisEqualMemory(MIC, TrailMIC, 8)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. ++ return FALSE; ++ } ++ ++ ++ return TRUE; ++} ++ ++/* ========================= AES En/Decryption ========================== */ ++#ifndef uint8 ++#define uint8 unsigned char ++#endif ++ ++#ifndef uint32 ++#define uint32 unsigned int ++#endif ++ ++/* forward S-box */ ++static uint32 FSb[256] = ++{ ++ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, ++ 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, ++ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, ++ 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, ++ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, ++ 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, ++ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, ++ 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, ++ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, ++ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, ++ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, ++ 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, ++ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, ++ 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, ++ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, ++ 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, ++ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, ++ 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, ++ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, ++ 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, ++ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, ++ 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, ++ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, ++ 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, ++ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, ++ 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, ++ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, ++ 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, ++ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, ++ 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, ++ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, ++ 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 ++}; ++ ++/* forward table */ ++#define FT \ ++\ ++ V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \ ++ V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \ ++ V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \ ++ V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \ ++ V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \ ++ V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \ ++ V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \ ++ V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \ ++ V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \ ++ V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \ ++ V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \ ++ V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \ ++ V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \ ++ V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \ ++ V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \ ++ V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \ ++ V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \ ++ V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \ ++ V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \ ++ V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \ ++ V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \ ++ V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \ ++ V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \ ++ V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \ ++ V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \ ++ V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \ ++ V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \ ++ V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \ ++ V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \ ++ V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \ ++ V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \ ++ V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \ ++ V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \ ++ V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \ ++ V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \ ++ V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \ ++ V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \ ++ V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \ ++ V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \ ++ V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \ ++ V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \ ++ V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \ ++ V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \ ++ V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \ ++ V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \ ++ V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \ ++ V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \ ++ V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \ ++ V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \ ++ V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \ ++ V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \ ++ V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \ ++ V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \ ++ V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \ ++ V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \ ++ V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \ ++ V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \ ++ V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \ ++ V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \ ++ V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \ ++ V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \ ++ V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \ ++ V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \ ++ V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A) ++ ++#define V(a,b,c,d) 0x##a##b##c##d ++static uint32 FT0[256] = { FT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##d##a##b##c ++static uint32 FT1[256] = { FT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##c##d##a##b ++static uint32 FT2[256] = { FT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##b##c##d##a ++static uint32 FT3[256] = { FT }; ++#undef V ++ ++#undef FT ++ ++/* reverse S-box */ ++ ++static uint32 RSb[256] = ++{ ++ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, ++ 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, ++ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, ++ 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, ++ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, ++ 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, ++ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, ++ 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, ++ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, ++ 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, ++ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, ++ 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, ++ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, ++ 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, ++ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, ++ 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, ++ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, ++ 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, ++ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, ++ 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, ++ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, ++ 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, ++ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, ++ 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, ++ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, ++ 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, ++ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, ++ 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, ++ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, ++ 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, ++ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, ++ 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D ++}; ++ ++/* reverse table */ ++ ++#define RT \ ++\ ++ V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \ ++ V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \ ++ V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \ ++ V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \ ++ V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \ ++ V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \ ++ V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \ ++ V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \ ++ V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \ ++ V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \ ++ V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \ ++ V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \ ++ V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \ ++ V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \ ++ V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \ ++ V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \ ++ V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \ ++ V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \ ++ V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \ ++ V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \ ++ V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \ ++ V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \ ++ V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \ ++ V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \ ++ V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \ ++ V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \ ++ V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \ ++ V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \ ++ V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \ ++ V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \ ++ V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \ ++ V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \ ++ V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \ ++ V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \ ++ V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \ ++ V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \ ++ V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \ ++ V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \ ++ V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \ ++ V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \ ++ V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \ ++ V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \ ++ V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \ ++ V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \ ++ V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \ ++ V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \ ++ V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \ ++ V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \ ++ V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \ ++ V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \ ++ V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \ ++ V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \ ++ V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \ ++ V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \ ++ V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \ ++ V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \ ++ V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \ ++ V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \ ++ V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \ ++ V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \ ++ V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \ ++ V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \ ++ V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \ ++ V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42) ++ ++#define V(a,b,c,d) 0x##a##b##c##d ++static uint32 RT0[256] = { RT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##d##a##b##c ++static uint32 RT1[256] = { RT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##c##d##a##b ++static uint32 RT2[256] = { RT }; ++#undef V ++ ++#define V(a,b,c,d) 0x##b##c##d##a ++static uint32 RT3[256] = { RT }; ++#undef V ++ ++#undef RT ++ ++/* round constants */ ++ ++static uint32 RCON[10] = ++{ ++ 0x01000000, 0x02000000, 0x04000000, 0x08000000, ++ 0x10000000, 0x20000000, 0x40000000, 0x80000000, ++ 0x1B000000, 0x36000000 ++}; ++ ++/* key schedule tables */ ++ ++static int KT_init = 1; ++ ++static uint32 KT0[256]; ++static uint32 KT1[256]; ++static uint32 KT2[256]; ++static uint32 KT3[256]; ++ ++/* platform-independant 32-bit integer manipulation macros */ ++ ++#define GET_UINT32(n,b,i) \ ++{ \ ++ (n) = ( (uint32) (b)[(i) ] << 24 ) \ ++ | ( (uint32) (b)[(i) + 1] << 16 ) \ ++ | ( (uint32) (b)[(i) + 2] << 8 ) \ ++ | ( (uint32) (b)[(i) + 3] ); \ ++} ++ ++#define PUT_UINT32(n,b,i) \ ++{ \ ++ (b)[(i) ] = (uint8) ( (n) >> 24 ); \ ++ (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \ ++ (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \ ++ (b)[(i) + 3] = (uint8) ( (n) ); \ ++} ++ ++ ++int rt_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) ++{ ++ int i; ++ uint32 *RK, *SK; ++ ++ switch( nbits ) ++ { ++ case 128: ctx->nr = 10; break; ++ case 192: ctx->nr = 12; break; ++ case 256: ctx->nr = 14; break; ++ default : return( 1 ); ++ } ++ ++ RK = (uint32 *) ctx->erk; ++ ++ for( i = 0; i < (nbits >> 5); i++ ) ++ { ++ GET_UINT32( RK[i], key, i * 4 ); ++ } ++ ++ /* setup encryption round keys */ ++ ++ switch( nbits ) ++ { ++ case 128: ++ ++ for( i = 0; i < 10; i++, RK += 4 ) ++ { ++ RK[4] = RK[0] ^ RCON[i] ^ ++ ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( RK[3] >> 24 ) ] ); ++ ++ RK[5] = RK[1] ^ RK[4]; ++ RK[6] = RK[2] ^ RK[5]; ++ RK[7] = RK[3] ^ RK[6]; ++ } ++ break; ++ ++ case 192: ++ ++ for( i = 0; i < 8; i++, RK += 6 ) ++ { ++ RK[6] = RK[0] ^ RCON[i] ^ ++ ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( RK[5] >> 24 ) ] ); ++ ++ RK[7] = RK[1] ^ RK[6]; ++ RK[8] = RK[2] ^ RK[7]; ++ RK[9] = RK[3] ^ RK[8]; ++ RK[10] = RK[4] ^ RK[9]; ++ RK[11] = RK[5] ^ RK[10]; ++ } ++ break; ++ ++ case 256: ++ ++ for( i = 0; i < 7; i++, RK += 8 ) ++ { ++ RK[8] = RK[0] ^ RCON[i] ^ ++ ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( RK[7] >> 24 ) ] ); ++ ++ RK[9] = RK[1] ^ RK[8]; ++ RK[10] = RK[2] ^ RK[9]; ++ RK[11] = RK[3] ^ RK[10]; ++ ++ RK[12] = RK[4] ^ ++ ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( RK[11] ) ] ); ++ ++ RK[13] = RK[5] ^ RK[12]; ++ RK[14] = RK[6] ^ RK[13]; ++ RK[15] = RK[7] ^ RK[14]; ++ } ++ break; ++ } ++ ++ /* setup decryption round keys */ ++ ++ if( KT_init ) ++ { ++ for( i = 0; i < 256; i++ ) ++ { ++ KT0[i] = RT0[ FSb[i] ]; ++ KT1[i] = RT1[ FSb[i] ]; ++ KT2[i] = RT2[ FSb[i] ]; ++ KT3[i] = RT3[ FSb[i] ]; ++ } ++ ++ KT_init = 0; ++ } ++ ++ SK = (uint32 *) ctx->drk; ++ ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ ++ for( i = 1; i < ctx->nr; i++ ) ++ { ++ RK -= 8; ++ ++ *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ ++ KT1[ (uint8) ( *RK >> 16 ) ] ^ ++ KT2[ (uint8) ( *RK >> 8 ) ] ^ ++ KT3[ (uint8) ( *RK ) ]; RK++; ++ ++ *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ ++ KT1[ (uint8) ( *RK >> 16 ) ] ^ ++ KT2[ (uint8) ( *RK >> 8 ) ] ^ ++ KT3[ (uint8) ( *RK ) ]; RK++; ++ ++ *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ ++ KT1[ (uint8) ( *RK >> 16 ) ] ^ ++ KT2[ (uint8) ( *RK >> 8 ) ] ^ ++ KT3[ (uint8) ( *RK ) ]; RK++; ++ ++ *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ ++ KT1[ (uint8) ( *RK >> 16 ) ] ^ ++ KT2[ (uint8) ( *RK >> 8 ) ] ^ ++ KT3[ (uint8) ( *RK ) ]; RK++; ++ } ++ ++ RK -= 8; ++ ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ ++ return( 0 ); ++} ++ ++/* AES 128-bit block encryption routine */ ++ ++void rt_aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] ) ++{ ++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; ++ ++ RK = (uint32 *) ctx->erk; ++ GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; ++ GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; ++ GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; ++ GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; ++ ++#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ ++{ \ ++ RK += 4; \ ++ \ ++ X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \ ++ FT1[ (uint8) ( Y1 >> 16 ) ] ^ \ ++ FT2[ (uint8) ( Y2 >> 8 ) ] ^ \ ++ FT3[ (uint8) ( Y3 ) ]; \ ++ \ ++ X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \ ++ FT1[ (uint8) ( Y2 >> 16 ) ] ^ \ ++ FT2[ (uint8) ( Y3 >> 8 ) ] ^ \ ++ FT3[ (uint8) ( Y0 ) ]; \ ++ \ ++ X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \ ++ FT1[ (uint8) ( Y3 >> 16 ) ] ^ \ ++ FT2[ (uint8) ( Y0 >> 8 ) ] ^ \ ++ FT3[ (uint8) ( Y1 ) ]; \ ++ \ ++ X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \ ++ FT1[ (uint8) ( Y0 >> 16 ) ] ^ \ ++ FT2[ (uint8) ( Y1 >> 8 ) ] ^ \ ++ FT3[ (uint8) ( Y2 ) ]; \ ++} ++ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ ++ ++ if( ctx->nr > 10 ) ++ { ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ ++ } ++ ++ if( ctx->nr > 12 ) ++ { ++ AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ ++ AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ ++ } ++ ++ /* last round */ ++ ++ RK += 4; ++ ++ X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( Y3 ) ] ); ++ ++ X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( Y0 ) ] ); ++ ++ X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( Y1 ) ] ); ++ ++ X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ ++ ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ ++ ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ ++ ( FSb[ (uint8) ( Y2 ) ] ); ++ ++ PUT_UINT32( X0, output, 0 ); ++ PUT_UINT32( X1, output, 4 ); ++ PUT_UINT32( X2, output, 8 ); ++ PUT_UINT32( X3, output, 12 ); ++} ++ ++/* AES 128-bit block decryption routine */ ++ ++void rt_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) ++{ ++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; ++ ++ RK = (uint32 *) ctx->drk; ++ ++ GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; ++ GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; ++ GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; ++ GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; ++ ++#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ ++{ \ ++ RK += 4; \ ++ \ ++ X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \ ++ RT1[ (uint8) ( Y3 >> 16 ) ] ^ \ ++ RT2[ (uint8) ( Y2 >> 8 ) ] ^ \ ++ RT3[ (uint8) ( Y1 ) ]; \ ++ \ ++ X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \ ++ RT1[ (uint8) ( Y0 >> 16 ) ] ^ \ ++ RT2[ (uint8) ( Y3 >> 8 ) ] ^ \ ++ RT3[ (uint8) ( Y2 ) ]; \ ++ \ ++ X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \ ++ RT1[ (uint8) ( Y1 >> 16 ) ] ^ \ ++ RT2[ (uint8) ( Y0 >> 8 ) ] ^ \ ++ RT3[ (uint8) ( Y3 ) ]; \ ++ \ ++ X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \ ++ RT1[ (uint8) ( Y2 >> 16 ) ] ^ \ ++ RT2[ (uint8) ( Y1 >> 8 ) ] ^ \ ++ RT3[ (uint8) ( Y0 ) ]; \ ++} ++ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ ++ ++ if( ctx->nr > 10 ) ++ { ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ ++ } ++ ++ if( ctx->nr > 12 ) ++ { ++ AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ ++ AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ ++ } ++ ++ /* last round */ ++ ++ RK += 4; ++ ++ X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ ++ ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ ++ ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ ++ ( RSb[ (uint8) ( Y1 ) ] ); ++ ++ X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ ++ ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ ++ ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ ++ ( RSb[ (uint8) ( Y2 ) ] ); ++ ++ X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ ++ ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ ++ ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ ++ ( RSb[ (uint8) ( Y3 ) ] ); ++ ++ X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ ++ ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ ++ ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ ++ ( RSb[ (uint8) ( Y0 ) ] ); ++ ++ PUT_UINT32( X0, output, 0 ); ++ PUT_UINT32( X1, output, 4 ); ++ PUT_UINT32( X2, output, 8 ); ++ PUT_UINT32( X3, output, 12 ); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ENCRYPT AES GTK before sending in EAPOL frame. ++ AES GTK length = 128 bit, so fix blocks for aes-key-wrap as 2 in this function. ++ This function references to RFC 3394 for aes key wrap algorithm. ++ Return: ++ ========================================================================== ++*/ ++VOID AES_GTK_KEY_WRAP( ++ IN UCHAR *key, ++ IN UCHAR *plaintext, ++ IN UINT32 p_len, ++ OUT UCHAR *ciphertext) ++{ ++ UCHAR A[8], BIN[16], BOUT[16]; ++ UCHAR R[512]; ++ INT num_blocks = p_len/8; // unit:64bits ++ INT i, j; ++ aes_context aesctx; ++ UCHAR xor; ++ ++ rt_aes_set_key(&aesctx, key, 128); ++ ++ // Init IA ++ for (i = 0; i < 8; i++) ++ A[i] = 0xa6; ++ ++ //Input plaintext ++ for (i = 0; i < num_blocks; i++) ++ { ++ for (j = 0 ; j < 8; j++) ++ R[8 * (i + 1) + j] = plaintext[8 * i + j]; ++ } ++ ++ // Key Mix ++ for (j = 0; j < 6; j++) ++ { ++ for(i = 1; i <= num_blocks; i++) ++ { ++ //phase 1 ++ NdisMoveMemory(BIN, A, 8); ++ NdisMoveMemory(&BIN[8], &R[8 * i], 8); ++ rt_aes_encrypt(&aesctx, BIN, BOUT); ++ ++ NdisMoveMemory(A, &BOUT[0], 8); ++ xor = num_blocks * j + i; ++ A[7] = BOUT[7] ^ xor; ++ NdisMoveMemory(&R[8 * i], &BOUT[8], 8); ++ } ++ } ++ ++ // Output ciphertext ++ NdisMoveMemory(ciphertext, A, 8); ++ ++ for (i = 1; i <= num_blocks; i++) ++ { ++ for (j = 0 ; j < 8; j++) ++ ciphertext[8 * i + j] = R[8 * i + j]; ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Misc function to decrypt AES body ++ ++ Arguments: ++ ++ Return Value: ++ ++ Note: ++ This function references to RFC 3394 for aes key unwrap algorithm. ++ ++ ======================================================================== ++*/ ++VOID AES_GTK_KEY_UNWRAP( ++ IN UCHAR *key, ++ OUT UCHAR *plaintext, ++ IN UINT32 c_len, ++ IN UCHAR *ciphertext) ++ ++{ ++ UCHAR A[8], BIN[16], BOUT[16]; ++ UCHAR xor; ++ INT i, j; ++ aes_context aesctx; ++ UCHAR *R; ++ INT num_blocks = c_len/8; // unit:64bits ++ ++ ++ os_alloc_mem(NULL, (PUCHAR *)&R, 512); ++ ++ if (R == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); ++ return; ++ } /* End of if */ ++ ++ // Initialize ++ NdisMoveMemory(A, ciphertext, 8); ++ //Input plaintext ++ for(i = 0; i < (c_len-8); i++) ++ { ++ R[ i] = ciphertext[i + 8]; ++ } ++ ++ rt_aes_set_key(&aesctx, key, 128); ++ ++ for(j = 5; j >= 0; j--) ++ { ++ for(i = (num_blocks-1); i > 0; i--) ++ { ++ xor = (num_blocks -1 )* j + i; ++ NdisMoveMemory(BIN, A, 8); ++ BIN[7] = A[7] ^ xor; ++ NdisMoveMemory(&BIN[8], &R[(i-1)*8], 8); ++ rt_aes_decrypt(&aesctx, BIN, BOUT); ++ NdisMoveMemory(A, &BOUT[0], 8); ++ NdisMoveMemory(&R[(i-1)*8], &BOUT[8], 8); ++ } ++ } ++ ++ // OUTPUT ++ for(i = 0; i < c_len; i++) ++ { ++ plaintext[i] = R[i]; ++ } ++ ++ ++ os_free_mem(NULL, R); ++} +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +new file mode 100644 +index 0000000..83ed07b +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -0,0 +1,2531 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ cmm_asic.c ++ ++ Abstract: ++ Functions used to communicate with ASIC ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#include "../rt_config.h" ++ ++ ++// Reset the RFIC setting to new series ++RTMP_RF_REGS RF2850RegTable[] = { ++// ch R1 R2 R3(TX0~4=0) R4 ++ {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b}, ++ {2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f}, ++ {3, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800518b}, ++ {4, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800519f}, ++ {5, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800518b}, ++ {6, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800519f}, ++ {7, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800518b}, ++ {8, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800519f}, ++ {9, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800518b}, ++ {10, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800519f}, ++ {11, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800518b}, ++ {12, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800519f}, ++ {13, 0x98402ecc, 0x984c079e, 0x98168a55, 0x9800518b}, ++ {14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193}, ++ ++ // 802.11 UNI / HyperLan 2 ++ {36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3}, ++ {38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193}, ++ {40, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed183}, ++ {44, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed1a3}, ++ {46, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed18b}, ++ {48, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed19b}, ++ {52, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed193}, ++ {54, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed1a3}, ++ {56, 0x98402ec8, 0x984c068e, 0x98158a55, 0x980ed18b}, ++ {60, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed183}, ++ {62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193}, ++ {64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3}, // Plugfest#4, Day4, change RFR3 left4th 9->5. ++ ++ // 802.11 HyperLan 2 ++ {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783}, ++ ++ // 2008.04.30 modified ++ // The system team has AN to improve the EVM value ++ // for channel 102 to 108 for the RT2850/RT2750 dual band solution. ++ {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793}, ++ {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3}, ++ {108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193}, ++ ++ {110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183}, ++ {112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b}, ++ {116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3}, ++ {118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193}, ++ {120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183}, ++ {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193}, ++ {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b}, // 0x980ed1bb->0x980ed15b required by Rory 20070927 ++ {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3}, ++ {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b}, ++ {134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193}, ++ {136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b}, ++ {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183}, ++ ++ // 802.11 UNII ++ {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7}, ++ {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187}, ++ {153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f}, ++ {157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f}, ++ {159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7}, ++ {161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187}, ++ {165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197}, ++ {167, 0x98402ec4, 0x984c03d2, 0x98179855, 0x9815531f}, ++ {169, 0x98402ec4, 0x984c03d2, 0x98179855, 0x98155327}, ++ {171, 0x98402ec4, 0x984c03d6, 0x98179855, 0x98155307}, ++ {173, 0x98402ec4, 0x984c03d6, 0x98179855, 0x9815530f}, ++ ++ // Japan ++ {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b}, ++ {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13}, ++ {192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b}, ++ {196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23}, ++ {208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13}, ++ {212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b}, ++ {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23}, ++ ++ // still lack of MMAC(Japan) ch 34,38,42,46 ++}; ++UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); ++ ++FREQUENCY_ITEM FreqItems3020[] = ++{ ++ /**************************************************/ ++ // ISM : 2.4 to 2.483 GHz // ++ /**************************************************/ ++ // 11g ++ /**************************************************/ ++ //-CH---N-------R---K----------- ++ {1, 241, 2, 2}, ++ {2, 241, 2, 7}, ++ {3, 242, 2, 2}, ++ {4, 242, 2, 7}, ++ {5, 243, 2, 2}, ++ {6, 243, 2, 7}, ++ {7, 244, 2, 2}, ++ {8, 244, 2, 7}, ++ {9, 245, 2, 2}, ++ {10, 245, 2, 7}, ++ {11, 246, 2, 2}, ++ {12, 246, 2, 7}, ++ {13, 247, 2, 2}, ++ {14, 248, 2, 4}, ++}; ++UCHAR NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); ++ ++ ++VOID AsicUpdateAutoFallBackTable( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pRateTable) ++{ ++ UCHAR i; ++ HT_FBK_CFG0_STRUC HtCfg0; ++ HT_FBK_CFG1_STRUC HtCfg1; ++ LG_FBK_CFG0_STRUC LgCfg0; ++ LG_FBK_CFG1_STRUC LgCfg1; ++ PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; ++ ++ // set to initial value ++ HtCfg0.word = 0x65432100; ++ HtCfg1.word = 0xedcba988; ++ LgCfg0.word = 0xedcba988; ++ LgCfg1.word = 0x00002100; ++ ++ pNextTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1; ++ for (i = 1; i < *((PUCHAR) pRateTable); i++) ++ { ++ pCurrTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1+i; ++ switch (pCurrTxRate->Mode) ++ { ++ case 0: //CCK ++ break; ++ case 1: //OFDM ++ { ++ switch(pCurrTxRate->CurrMCS) ++ { ++ case 0: ++ LgCfg0.field.OFDMMCS0FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 1: ++ LgCfg0.field.OFDMMCS1FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 2: ++ LgCfg0.field.OFDMMCS2FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 3: ++ LgCfg0.field.OFDMMCS3FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 4: ++ LgCfg0.field.OFDMMCS4FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 5: ++ LgCfg0.field.OFDMMCS5FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 6: ++ LgCfg0.field.OFDMMCS6FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ case 7: ++ LgCfg0.field.OFDMMCS7FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; ++ break; ++ } ++ } ++ break; ++ case 2: //HT-MIX ++ case 3: //HT-GF ++ { ++ if ((pNextTxRate->Mode >= MODE_HTMIX) && (pCurrTxRate->CurrMCS != pNextTxRate->CurrMCS)) ++ { ++ switch(pCurrTxRate->CurrMCS) ++ { ++ case 0: ++ HtCfg0.field.HTMCS0FBK = pNextTxRate->CurrMCS; ++ break; ++ case 1: ++ HtCfg0.field.HTMCS1FBK = pNextTxRate->CurrMCS; ++ break; ++ case 2: ++ HtCfg0.field.HTMCS2FBK = pNextTxRate->CurrMCS; ++ break; ++ case 3: ++ HtCfg0.field.HTMCS3FBK = pNextTxRate->CurrMCS; ++ break; ++ case 4: ++ HtCfg0.field.HTMCS4FBK = pNextTxRate->CurrMCS; ++ break; ++ case 5: ++ HtCfg0.field.HTMCS5FBK = pNextTxRate->CurrMCS; ++ break; ++ case 6: ++ HtCfg0.field.HTMCS6FBK = pNextTxRate->CurrMCS; ++ break; ++ case 7: ++ HtCfg0.field.HTMCS7FBK = pNextTxRate->CurrMCS; ++ break; ++ case 8: ++ HtCfg1.field.HTMCS8FBK = pNextTxRate->CurrMCS; ++ break; ++ case 9: ++ HtCfg1.field.HTMCS9FBK = pNextTxRate->CurrMCS; ++ break; ++ case 10: ++ HtCfg1.field.HTMCS10FBK = pNextTxRate->CurrMCS; ++ break; ++ case 11: ++ HtCfg1.field.HTMCS11FBK = pNextTxRate->CurrMCS; ++ break; ++ case 12: ++ HtCfg1.field.HTMCS12FBK = pNextTxRate->CurrMCS; ++ break; ++ case 13: ++ HtCfg1.field.HTMCS13FBK = pNextTxRate->CurrMCS; ++ break; ++ case 14: ++ HtCfg1.field.HTMCS14FBK = pNextTxRate->CurrMCS; ++ break; ++ case 15: ++ HtCfg1.field.HTMCS15FBK = pNextTxRate->CurrMCS; ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ("AsicUpdateAutoFallBackTable: not support CurrMCS=%d\n", pCurrTxRate->CurrMCS)); ++ } ++ } ++ } ++ break; ++ } ++ ++ pNextTxRate = pCurrTxRate; ++ } ++ ++ RTMP_IO_WRITE32(pAd, HT_FBK_CFG0, HtCfg0.word); ++ RTMP_IO_WRITE32(pAd, HT_FBK_CFG1, HtCfg1.word); ++ RTMP_IO_WRITE32(pAd, LG_FBK_CFG0, LgCfg0.word); ++ RTMP_IO_WRITE32(pAd, LG_FBK_CFG1, LgCfg1.word); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Set MAC register value according operation mode. ++ OperationMode AND bNonGFExist are for MM and GF Proteciton. ++ If MM or GF mask is not set, those passing argument doesn't not take effect. ++ ++ Operation mode meaning: ++ = 0 : Pure HT, no preotection. ++ = 0x01; there may be non-HT devices in both the control and extension channel, protection is optional in BSS. ++ = 0x10: No Transmission in 40M is protected. ++ = 0x11: Transmission in both 40M and 20M shall be protected ++ if (bNonGFExist) ++ we should choose not to use GF. But still set correct ASIC registers. ++ ======================================================================== ++*/ ++VOID AsicUpdateProtect( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT OperationMode, ++ IN UCHAR SetMask, ++ IN BOOLEAN bDisableBGProtect, ++ IN BOOLEAN bNonGFExist) ++{ ++ PROT_CFG_STRUC ProtCfg, ProtCfg4; ++ UINT32 Protect[6]; ++ USHORT offset; ++ UCHAR i; ++ UINT32 MacReg = 0; ++ ++ ++ if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) ++ { ++ return; ++ } ++ ++ if (pAd->BATable.numDoneOriginator) ++ { ++ // ++ // enable the RTS/CTS to avoid channel collision ++ // ++ SetMask = ALLN_SETPROTECT; ++ OperationMode = 8; ++ } ++ ++ // Config ASIC RTS threshold register ++ RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); ++ MacReg &= 0xFF0000FF; ++ // If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 ++ if (( ++ (pAd->CommonCfg.BACapability.field.AmsduEnable) || ++ (pAd->CommonCfg.bAggregationCapable == TRUE)) ++ && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) ++ { ++ MacReg |= (0x1000 << 8); ++ } ++ else ++ { ++ MacReg |= (pAd->CommonCfg.RtsThreshold << 8); ++ } ++ ++ RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); ++ ++ // Initial common protection settings ++ RTMPZeroMemory(Protect, sizeof(Protect)); ++ ProtCfg4.word = 0; ++ ProtCfg.word = 0; ++ ProtCfg.field.TxopAllowGF40 = 1; ++ ProtCfg.field.TxopAllowGF20 = 1; ++ ProtCfg.field.TxopAllowMM40 = 1; ++ ProtCfg.field.TxopAllowMM20 = 1; ++ ProtCfg.field.TxopAllowOfdm = 1; ++ ProtCfg.field.TxopAllowCck = 1; ++ ProtCfg.field.RTSThEn = 1; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ ++ // update PHY mode and rate ++ if (pAd->CommonCfg.Channel > 14) ++ ProtCfg.field.ProtectRate = 0x4000; ++ ProtCfg.field.ProtectRate |= pAd->CommonCfg.RtsRate; ++ ++ // Handle legacy(B/G) protection ++ if (bDisableBGProtect) ++ { ++ //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; ++ ProtCfg.field.ProtectCtrl = 0; ++ Protect[0] = ProtCfg.word; ++ Protect[1] = ProtCfg.word; ++ pAd->FlgCtsEnabled = 0; /* CTS-self is not used */ ++ } ++ else ++ { ++ //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; ++ ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected ++ Protect[0] = ProtCfg.word; ++ ProtCfg.field.ProtectCtrl = ASIC_CTS; // OFDM needs using CCK to protect ++ Protect[1] = ProtCfg.word; ++ pAd->FlgCtsEnabled = 1; /* CTS-self is used */ ++ } ++ ++ // Decide HT frame protection. ++ if ((SetMask & ALLN_SETPROTECT) != 0) ++ { ++ switch(OperationMode) ++ { ++ case 0x0: ++ // NO PROTECT ++ // 1.All STAs in the BSS are 20/40 MHz HT ++ // 2. in ai 20/40MHz BSS ++ // 3. all STAs are 20MHz in a 20MHz BSS ++ // Pure HT. no protection. ++ ++ // MM20_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 010111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ Protect[2] = 0x01744004; ++ ++ // MM40_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 111111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ Protect[3] = 0x03f44084; ++ ++ // CF20_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 010111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ Protect[4] = 0x01744004; ++ ++ // CF40_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 111111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ Protect[5] = 0x03f44084; ++ ++ if (bNonGFExist) ++ { ++ // PROT_NAV(19:18) -- 01 (Short NAV protectiion) ++ // PROT_CTRL(17:16) -- 01 (RTS/CTS) ++ Protect[4] = 0x01754004; ++ Protect[5] = 0x03f54084; ++ } ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; ++ break; ++ ++ case 1: ++ // This is "HT non-member protection mode." ++ // If there may be non-HT STAs my BSS ++ ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) ++ ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) ++ { ++ ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. ++ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; ++ } ++ //Assign Protection method for 20&40 MHz packets ++ ProtCfg.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; ++ ++ case 2: ++ // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets ++ ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) ++ ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ ++ //Assign Protection method for 40MHz packets ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ if (bNonGFExist) ++ { ++ ProtCfg.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ } ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; ++ ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; ++ break; ++ ++ case 3: ++ // HT mixed mode. PROTECT ALL! ++ // Assign Rate ++ ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. ++ ProtCfg4.word = 0x03f44084; ++ // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) ++ { ++ ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. ++ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 ++ } ++ //Assign Protection method for 20&40 MHz packets ++ ProtCfg.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; ++ ++ case 8: ++ // Special on for Atheros problem n chip. ++ Protect[2] = 0x01754004; ++ Protect[3] = 0x03f54084; ++ Protect[4] = 0x01754004; ++ Protect[5] = 0x03f54084; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; ++ } ++ } ++ ++ offset = CCK_PROT_CFG; ++ for (i = 0;i < 6;i++) ++ { ++ if ((SetMask & (1<< i))) ++ { ++ RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]); ++ } ++} ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicSwitchChannel( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel, ++ IN BOOLEAN bScan) ++{ ++ ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; ++ CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; ++ UCHAR index; ++ UINT32 Value = 0; //BbpReg, Value; ++ RTMP_RF_REGS *RFRegTable; ++ UCHAR RFValue; ++ ++ RFValue = 0; ++ // Search Tx power value ++ // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list ++ // in ChannelList, so use TxPower array instead. ++ // ++ for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) ++ { ++ if (Channel == pAd->TxPower[index].Channel) ++ { ++ TxPwer = pAd->TxPower[index].Power; ++ TxPwer2 = pAd->TxPower[index].Power2; ++ break; ++ } ++ } ++ ++ if (index == MAX_NUM_OF_CHANNELS) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Can't find the Channel#%d \n", Channel)); ++ } ++ ++#ifdef RT30xx ++ // The RF programming sequence is difference between 3xxx and 2xxx ++ if ((IS_RT3070(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) || ++ (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022))) ++ { ++ /* modify by WY for Read RF Reg. error */ ++ ++ for (index = 0; index < NUM_OF_3020_CHNL; index++) ++ { ++ if (Channel == FreqItems3020[index].Channel) ++ { ++ // Programming channel parameters ++ RT30xxWriteRFRegister(pAd, RF_R02, FreqItems3020[index].N); ++ RT30xxWriteRFRegister(pAd, RF_R03, FreqItems3020[index].K); ++ RT30xxReadRFRegister(pAd, RF_R06, &RFValue); ++ RFValue = (RFValue & 0xFC) | FreqItems3020[index].R; ++ RT30xxWriteRFRegister(pAd, RF_R06, RFValue); ++ ++ // Set Tx0 Power ++ RT30xxReadRFRegister(pAd, RF_R12, &RFValue); ++ RFValue = (RFValue & 0xE0) | TxPwer; ++ RT30xxWriteRFRegister(pAd, RF_R12, RFValue); ++ ++ // Set Tx1 Power ++ RT30xxReadRFRegister(pAd, RF_R13, &RFValue); ++ RFValue = (RFValue & 0xE0) | TxPwer2; ++ RT30xxWriteRFRegister(pAd, RF_R13, RFValue); ++ ++ // Tx/Rx Stream setting ++ RT30xxReadRFRegister(pAd, RF_R01, &RFValue); ++ //if (IS_RT3090(pAd)) ++ // RFValue |= 0x01; // Enable RF block. ++ RFValue &= 0x03; //clear bit[7~2] ++ if (pAd->Antenna.field.TxPath == 1) ++ RFValue |= 0xA0; ++ else if (pAd->Antenna.field.TxPath == 2) ++ RFValue |= 0x80; ++ if (pAd->Antenna.field.RxPath == 1) ++ RFValue |= 0x50; ++ else if (pAd->Antenna.field.RxPath == 2) ++ RFValue |= 0x40; ++ RT30xxWriteRFRegister(pAd, RF_R01, RFValue); ++ ++ // Set RF offset ++ RT30xxReadRFRegister(pAd, RF_R23, &RFValue); ++ RFValue = (RFValue & 0x80) | pAd->RfFreqOffset; ++ RT30xxWriteRFRegister(pAd, RF_R23, RFValue); ++ ++ // Set BW ++ if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) ++ { ++ RFValue = pAd->Mlme.CaliBW40RfR24; ++ //DISABLE_11N_CHECK(pAd); ++ } ++ else ++ { ++ RFValue = pAd->Mlme.CaliBW20RfR24; ++ } ++ RT30xxWriteRFRegister(pAd, RF_R24, RFValue); ++ RT30xxWriteRFRegister(pAd, RF_R31, RFValue); ++ ++ // Enable RF tuning ++ RT30xxReadRFRegister(pAd, RF_R07, &RFValue); ++ RFValue = RFValue | 0x1; ++ RT30xxWriteRFRegister(pAd, RF_R07, RFValue); ++ ++ // latch channel for future usage. ++ pAd->LatchRfRegs.Channel = Channel; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", ++ Channel, ++ pAd->RfIcType, ++ TxPwer, ++ TxPwer2, ++ pAd->Antenna.field.TxPath, ++ FreqItems3020[index].N, ++ FreqItems3020[index].K, ++ FreqItems3020[index].R)); ++ ++ break; ++ } ++ } ++ } ++ else ++#endif // RT30xx // ++ { ++ RFRegTable = RF2850RegTable; ++ switch (pAd->RfIcType) ++ { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: ++ ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) ++ { ++ if (Channel == RFRegTable[index].Channel) ++ { ++ R2 = RFRegTable[index].R2; ++ if (pAd->Antenna.field.TxPath == 1) ++ { ++ R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ } ++ ++ if (pAd->Antenna.field.RxPath == 2) ++ { ++ R2 |= 0x40; // write 1 to off Rxpath. ++ } ++ else if (pAd->Antenna.field.RxPath == 1) ++ { ++ R2 |= 0x20040; // write 1 to off RxPath ++ } ++ ++ if (Channel > 14) ++ { ++ // initialize R3, R4 ++ R3 = (RFRegTable[index].R3 & 0xffffc1ff); ++ R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15); ++ ++ // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB ++ // R3 ++ if ((TxPwer >= -7) && (TxPwer < 0)) ++ { ++ TxPwer = (7+TxPwer); ++ TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); ++ R3 |= (TxPwer << 10); ++ DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer=%d \n", TxPwer)); ++ } ++ else ++ { ++ TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); ++ R3 |= (TxPwer << 10) | (1 << 9); ++ } ++ ++ // R4 ++ if ((TxPwer2 >= -7) && (TxPwer2 < 0)) ++ { ++ TxPwer2 = (7+TxPwer2); ++ TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); ++ R4 |= (TxPwer2 << 7); ++ DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer2=%d \n", TxPwer2)); ++ } ++ else ++ { ++ TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); ++ R4 |= (TxPwer2 << 7) | (1 << 6); ++ } ++ } ++ else ++ { ++ R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 ++ R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 <<6);// Set freq Offset & TxPwr1 ++ } ++ ++ // Based on BBP current mode before changing RF channel. ++ if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) ++ { ++ R4 |=0x200000; ++ } ++ ++ // Update variables ++ pAd->LatchRfRegs.Channel = Channel; ++ pAd->LatchRfRegs.R1 = RFRegTable[index].R1; ++ pAd->LatchRfRegs.R2 = R2; ++ pAd->LatchRfRegs.R3 = R3; ++ pAd->LatchRfRegs.R4 = R4; ++ ++ // Set RF value 1's set R3[bit2] = [0] ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); ++ ++ RTMPusecDelay(200); ++ ++ // Set RF value 2's set R3[bit2] = [1] ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04)); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); ++ ++ RTMPusecDelay(200); ++ ++ // Set RF value 3's set R3[bit2] = [0] ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); ++ RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); ++ ++ break; ++ } ++ } ++ break; ++ ++ default: ++ break; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%lu, Pwr1=%lu, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", ++ Channel, ++ pAd->RfIcType, ++ (R3 & 0x00003e00) >> 9, ++ (R4 & 0x000007c0) >> 6, ++ pAd->Antenna.field.TxPath, ++ pAd->LatchRfRegs.R1, ++ pAd->LatchRfRegs.R2, ++ pAd->LatchRfRegs.R3, ++ pAd->LatchRfRegs.R4)); ++ } ++ ++ // Change BBP setting during siwtch from a->g, g->a ++ if (Channel <= 14) ++ { ++ ULONG TxPinCfg = 0x00050F0A;//Gary 2007/08/09 0x050A0A ++ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. ++ //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); ++ ++ // Rx High power VGA offset for LNA select ++ if (pAd->NicConfig2.field.ExternalLNAForG) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); ++ } ++ else ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); ++ } ++ ++ // 5G band selection PIN, bit1 and bit2 are complement ++ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); ++ Value &= (~0x6); ++ Value |= (0x04); ++ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); ++ ++ // Turn off unused PA or LNA when only 1T or 1R ++ if (pAd->Antenna.field.TxPath == 1) ++ { ++ TxPinCfg &= 0xFFFFFFF3; ++ } ++ if (pAd->Antenna.field.RxPath == 1) ++ { ++ TxPinCfg &= 0xFFFFF3FF; ++ } ++ ++ ++ RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); ++ ++ } ++ else ++ { ++ ULONG TxPinCfg = 0x00050F05;//Gary 2007/8/9 0x050505 ++ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); ++ ++ // Rx High power VGA offset for LNA select ++ if (pAd->NicConfig2.field.ExternalLNAForA) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); ++ } ++ else ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); ++ } ++ ++ // 5G band selection PIN, bit1 and bit2 are complement ++ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); ++ Value &= (~0x6); ++ Value |= (0x02); ++ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); ++ ++ // Turn off unused PA or LNA when only 1T or 1R ++ if (pAd->Antenna.field.TxPath == 1) ++ { ++ TxPinCfg &= 0xFFFFFFF3; ++ } ++ if (pAd->Antenna.field.RxPath == 1) ++ { ++ TxPinCfg &= 0xFFFFF3FF; ++ } ++ ++ ++ RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); ++ ++ } ++ ++ // R66 should be set according to Channel and use 20MHz when scanning ++ //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd))); ++ if (bScan) ++ RTMPSetAGCInitValue(pAd, BW_20); ++ else ++ RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); ++ ++ // ++ // On 11A, We should delay and wait RF/BBP to be stable ++ // and the appropriate time should be 1000 micro seconds ++ // 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. ++ // ++ RTMPusecDelay(1000); ++} ++ ++VOID AsicResetBBPAgent( ++IN PRTMP_ADAPTER pAd) ++{ ++ BBP_CSR_CFG_STRUC BbpCsr; ++ DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); ++ // Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. ++ RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word); ++ BbpCsr.field.Busy = 0; ++ RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, BbpCsr.word); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ This function is required for 2421 only, and should not be used during ++ site survey. It's only required after NIC decided to stay at a channel ++ for a longer period. ++ When this function is called, it's always after AsicSwitchChannel(). ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicLockChannel( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel) ++{ ++} ++ ++VOID AsicRfTuningExec( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ Gives CCK TX rate 2 more dB TX power. ++ This routine works only in LINK UP in INFRASTRUCTURE mode. ++ ++ calculate desired Tx power in RF R3.Tx0~5, should consider - ++ 0. if current radio is a noisy environment (pAd->DrsCounters.fNoisyEnvironment) ++ 1. TxPowerPercentage ++ 2. auto calibration based on TSSI feedback ++ 3. extra 2 db for CCK ++ 4. -10 db upon very-short distance (AvgRSSI >= -40db) to AP ++ ++ NOTE: Since this routine requires the value of (pAd->DrsCounters.fNoisyEnvironment), ++ it should be called AFTER MlmeDynamicTxRatSwitching() ++ ========================================================================== ++ */ ++VOID AsicAdjustTxPower( ++ IN PRTMP_ADAPTER pAd) ++{ ++ INT i, j; ++ CHAR DeltaPwr = 0; ++ BOOLEAN bAutoTxAgc = FALSE; ++ UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; ++ UCHAR BbpR1 = 0, BbpR49 = 0, idx; ++ PCHAR pTxAgcCompensate; ++ ULONG TxPwr[5]; ++ CHAR Value; ++ CHAR Rssi = -127; ++ ++ ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || ++#ifdef RTMP_MAC_PCI ++ (pAd->bPCIclkOff == TRUE) || ++#endif // RTMP_MAC_PCI // ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) || ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ return; ++ ++ Rssi = RTMPMaxRssi(pAd, ++ pAd->StaCfg.RssiSample.AvgRssi0, ++ pAd->StaCfg.RssiSample.AvgRssi1, ++ pAd->StaCfg.RssiSample.AvgRssi2); ++ ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) ++ { ++ if (pAd->CommonCfg.CentralChannel > 14) ++ { ++ TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; ++ TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; ++ TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; ++ TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; ++ TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; ++ } ++ else ++ { ++ TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; ++ TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; ++ TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; ++ TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; ++ TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; ++ } ++ } ++ else ++ { ++ if (pAd->CommonCfg.Channel > 14) ++ { ++ TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; ++ TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; ++ TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; ++ TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; ++ TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; ++ } ++ else ++ { ++ TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; ++ TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; ++ TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; ++ TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; ++ TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; ++ } ++ } ++ ++ // TX power compensation for temperature variation based on TSSI. try every 4 second ++ if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) ++ { ++ if (pAd->CommonCfg.Channel <= 14) ++ { ++ /* bg channel */ ++ bAutoTxAgc = pAd->bAutoTxAgcG; ++ TssiRef = pAd->TssiRefG; ++ pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0]; ++ pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; ++ TxAgcStep = pAd->TxAgcStepG; ++ pTxAgcCompensate = &pAd->TxAgcCompensateG; ++ } ++ else ++ { ++ /* a channel */ ++ bAutoTxAgc = pAd->bAutoTxAgcA; ++ TssiRef = pAd->TssiRefA; ++ pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0]; ++ pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; ++ TxAgcStep = pAd->TxAgcStepA; ++ pTxAgcCompensate = &pAd->TxAgcCompensateA; ++ } ++ ++ if (bAutoTxAgc) ++ { ++ /* BbpR1 is unsigned char */ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49); ++ ++ /* (p) TssiPlusBoundaryG[0] = 0 = (m) TssiMinusBoundaryG[0] */ ++ /* compensate: +4 +3 +2 +1 0 -1 -2 -3 -4 * steps */ ++ /* step value is defined in pAd->TxAgcStepG for tx power value */ ++ ++ /* [4]+1+[4] p4 p3 p2 p1 o1 m1 m2 m3 m4 */ ++ /* ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 ++ above value are examined in mass factory production */ ++ /* [4] [3] [2] [1] [0] [1] [2] [3] [4] */ ++ ++ /* plus (+) is 0x00 ~ 0x45, minus (-) is 0xa0 ~ 0xf0 */ ++ /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */ ++ /* if value is 0xa5, tx power will be -= TxAgcStep*(2-1) */ ++ ++ if (BbpR49 > pTssiMinusBoundary[1]) ++ { ++ // Reading is larger than the reference value ++ // check for how large we need to decrease the Tx power ++ for (idx = 1; idx < 5; idx++) ++ { ++ if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range ++ break; ++ } ++ // The index is the step we should decrease, idx = 0 means there is nothing to compensate ++// if (R3 > (ULONG) (TxAgcStep * (idx-1))) ++ *pTxAgcCompensate = -(TxAgcStep * (idx-1)); ++// else ++// *pTxAgcCompensate = -((UCHAR)R3); ++ ++ DeltaPwr += (*pTxAgcCompensate); ++ DBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", ++ BbpR49, TssiRef, TxAgcStep, idx-1)); ++ } ++ else if (BbpR49 < pTssiPlusBoundary[1]) ++ { ++ // Reading is smaller than the reference value ++ // check for how large we need to increase the Tx power ++ for (idx = 1; idx < 5; idx++) ++ { ++ if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range ++ break; ++ } ++ // The index is the step we should increase, idx = 0 means there is nothing to compensate ++ *pTxAgcCompensate = TxAgcStep * (idx-1); ++ DeltaPwr += (*pTxAgcCompensate); ++ DBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", ++ BbpR49, TssiRef, TxAgcStep, idx-1)); ++ } ++ else ++ { ++ *pTxAgcCompensate = 0; ++ DBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", ++ BbpR49, TssiRef, TxAgcStep, 0)); ++ } ++ } ++ } ++ else ++ { ++ if (pAd->CommonCfg.Channel <= 14) ++ { ++ bAutoTxAgc = pAd->bAutoTxAgcG; ++ pTxAgcCompensate = &pAd->TxAgcCompensateG; ++ } ++ else ++ { ++ bAutoTxAgc = pAd->bAutoTxAgcA; ++ pTxAgcCompensate = &pAd->TxAgcCompensateA; ++ } ++ ++ if (bAutoTxAgc) ++ DeltaPwr += (*pTxAgcCompensate); ++ } ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1); ++ BbpR1 &= 0xFC; ++ ++ ++ /* calculate delta power based on the percentage specified from UI */ ++ // E2PROM setting is calibrated for maximum TX power (i.e. 100%) ++ // We lower TX power here according to the percentage specified from UI ++ if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control ++ { ++ { ++ // to patch high power issue with some APs, like Belkin N1. ++ if (Rssi > -35) ++ { ++ BbpR1 |= 0x02; // DeltaPwr -= 12; ++ } ++ else if (Rssi > -40) ++ { ++ BbpR1 |= 0x01; // DeltaPwr -= 6; ++ } ++ else ++ ; ++ } ++ } ++ else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW ++ ; ++ else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; ++ { ++ DeltaPwr -= 1; ++ } ++ else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; ++ { ++ DeltaPwr -= 3; ++ } ++ else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; ++ { ++ BbpR1 |= 0x01; ++ } ++ else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; ++ { ++ BbpR1 |= 0x01; ++ DeltaPwr -= 3; ++ } ++ else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; ++ { ++ BbpR1 |= 0x02; ++ } ++ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpR1); ++ ++ /* reset different new tx power for different TX rate */ ++ for(i=0; i<5; i++) ++ { ++ if (TxPwr[i] != 0xffffffff) ++ { ++ for (j=0; j<8; j++) ++ { ++ Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */ ++ ++ if ((Value + DeltaPwr) < 0) ++ { ++ Value = 0; /* min */ ++ } ++ else if ((Value + DeltaPwr) > 0xF) ++ { ++ Value = 0xF; /* max */ ++ } ++ else ++ { ++ Value += DeltaPwr; /* temperature compensation */ ++ } ++ ++ /* fill new value to CSR offset */ ++ TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); ++ } ++ ++ /* write tx power value to CSR */ ++ /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M ++ TX power for OFDM 6M/9M ++ TX power for CCK5.5M/11M ++ TX power for CCK1M/2M */ ++ /* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */ ++ RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]); ++ } ++ } ++ ++ ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ put PHY to sleep here, and set next wakeup timer. PHY doesn't not wakeup ++ automatically. Instead, MCU will issue a TwakeUpInterrupt to host after ++ the wakeup timer timeout. Driver has to issue a separate command to wake ++ PHY up. ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicSleepThenAutoWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) ++{ ++ RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ AsicForceWakeup() is used whenever manual wakeup is required ++ AsicForceSleep() should only be used when not in INFRA BSS. When ++ in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. ++ ========================================================================== ++ */ ++VOID AsicForceSleep( ++ IN PRTMP_ADAPTER pAd) ++{ ++ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ AsicForceWakeup() is used whenever Twakeup timer (set via AsicSleepThenAutoWakeup) ++ expired. ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ========================================================================== ++ */ ++VOID AsicForceWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bFromTx) ++{ ++ DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); ++ RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Set My BSSID ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicSetBssid( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pBssid) ++{ ++ ULONG Addr4; ++ DBGPRINT(RT_DEBUG_TRACE, ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", ++ pBssid[0],pBssid[1],pBssid[2],pBssid[3], pBssid[4],pBssid[5])); ++ ++ Addr4 = (ULONG)(pBssid[0]) | ++ (ULONG)(pBssid[1] << 8) | ++ (ULONG)(pBssid[2] << 16) | ++ (ULONG)(pBssid[3] << 24); ++ RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); ++ ++ Addr4 = 0; ++ // always one BSSID in STA mode ++ Addr4 = (ULONG)(pBssid[4]) | (ULONG)(pBssid[5] << 8); ++ ++ RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); ++} ++ ++VOID AsicSetMcastWC( ++ IN PRTMP_ADAPTER pAd) ++{ ++ MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; ++ USHORT offset; ++ ++ pEntry->Sst = SST_ASSOC; ++ pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index ++ pEntry->PsMode = PWR_ACTIVE; ++ pEntry->CurrTxRate = pAd->CommonCfg.MlmeRate; ++ offset = MAC_WCID_BASE + BSS0Mcast_WCID * HW_WCID_ENTRY_SIZE; ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicDelWcidTab( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid) ++{ ++ ULONG Addr0 = 0x0, Addr1 = 0x0; ++ ULONG offset; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n",Wcid)); ++ offset = MAC_WCID_BASE + Wcid * HW_WCID_ENTRY_SIZE; ++ RTMP_IO_WRITE32(pAd, offset, Addr0); ++ offset += 4; ++ RTMP_IO_WRITE32(pAd, offset, Addr1); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicEnableRDG( ++ IN PRTMP_ADAPTER pAd) ++{ ++ TX_LINK_CFG_STRUC TxLinkCfg; ++ UINT32 Data = 0; ++ ++ RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); ++ TxLinkCfg.field.TxRDGEn = 1; ++ RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); ++ ++ RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); ++ Data &= 0xFFFFFF00; ++ Data |= 0x80; ++ RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); ++ ++ //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicDisableRDG( ++ IN PRTMP_ADAPTER pAd) ++{ ++ TX_LINK_CFG_STRUC TxLinkCfg; ++ UINT32 Data = 0; ++ ++ ++ RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); ++ TxLinkCfg.field.TxRDGEn = 0; ++ RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); ++ ++ RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); ++ ++ Data &= 0xFFFFFF00; ++ //Data |= 0x20; ++#ifndef WIFI_TEST ++ //if ( pAd->CommonCfg.bEnableTxBurst ) ++ // Data |= 0x60; // for performance issue not set the TXOP to 0 ++#endif ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) ++ && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) ++ ) ++ { ++ // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode ++ if (pAd->CommonCfg.bEnableTxBurst) ++ Data |= 0x20; ++ } ++ RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicDisableSync( ++ IN PRTMP_ADAPTER pAd) ++{ ++ BCN_TIME_CFG_STRUC csr; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--->Disable TSF synchronization\n")); ++ ++ // 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect ++ // that NIC will never wakes up because TSF stops and no more ++ // TBTT interrupts ++ pAd->TbttTickCount = 0; ++ RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); ++ csr.field.bBeaconGen = 0; ++ csr.field.bTBTTEnable = 0; ++ csr.field.TsfSyncMode = 0; ++ csr.field.bTsfTicking = 0; ++ RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); ++ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicEnableBssSync( ++ IN PRTMP_ADAPTER pAd) ++{ ++ BCN_TIME_CFG_STRUC csr; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n")); ++ ++ RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); ++// RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); ++ { ++ csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ csr.field.bTsfTicking = 1; ++ csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode ++ csr.field.bBeaconGen = 0; // do NOT generate BEACON ++ csr.field.bTBTTEnable = 1; ++ } ++ RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ Note: ++ BEACON frame in shared memory should be built ok before this routine ++ can be called. Otherwise, a garbage frame maybe transmitted out every ++ Beacon period. ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicEnableIbssSync( ++ IN PRTMP_ADAPTER pAd) ++{ ++ BCN_TIME_CFG_STRUC csr9; ++ PUCHAR ptr; ++ UINT i; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", pAd->BeaconTxWI.MPDUtotalByteCount)); ++ ++ RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr9.word); ++ csr9.field.bBeaconGen = 0; ++ csr9.field.bTBTTEnable = 0; ++ csr9.field.bTsfTicking = 0; ++ RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); ++ ++#ifdef RTMP_MAC_PCI ++ // move BEACON TXD and frame content to on-chip memory ++ ptr = (PUCHAR)&pAd->BeaconTxWI; ++ for (i=0; iBeaconBuf; ++ for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=4) ++ { ++ UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); ++ RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); ++ ptr +=4; ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ // move BEACON TXD and frame content to on-chip memory ++ ptr = (PUCHAR)&pAd->BeaconTxWI; ++ for (i=0; iBeaconBuf; ++ for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=2) ++ { ++ //UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); ++ //RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); ++ RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2); ++ ptr +=2; ++ } ++#endif // RTMP_MAC_USB // ++ ++ // ++ // For Wi-Fi faily generated beacons between participating stations. ++ // Set TBTT phase adaptive adjustment step to 8us (default 16us) ++ // don't change settings 2006-5- by Jerry ++ //RTMP_IO_WRITE32(pAd, TBTT_SYNC_CFG, 0x00001010); ++ ++ // start sending BEACON ++ csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ csr9.field.bTsfTicking = 1; ++ csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode ++ csr9.field.bTBTTEnable = 1; ++ csr9.field.bBeaconGen = 1; ++ RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicSetEdcaParm( ++ IN PRTMP_ADAPTER pAd, ++ IN PEDCA_PARM pEdcaParm) ++{ ++ EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; ++ AC_TXOP_CSR0_STRUC csr0; ++ AC_TXOP_CSR1_STRUC csr1; ++ AIFSN_CSR_STRUC AifsnCsr; ++ CWMIN_CSR_STRUC CwminCsr; ++ CWMAX_CSR_STRUC CwmaxCsr; ++ int i; ++ ++ Ac0Cfg.word = 0; ++ Ac1Cfg.word = 0; ++ Ac2Cfg.word = 0; ++ Ac3Cfg.word = 0; ++ if ((pEdcaParm == NULL) || (pEdcaParm->bValid == FALSE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("AsicSetEdcaParm\n")); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WMM_INUSED); ++ for (i=0; iMacTab.Content[i].ValidAsCLI || pAd->MacTab.Content[i].ValidAsApCli) ++ CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[i], fCLIENT_STATUS_WMM_CAPABLE); ++ } ++ ++ //======================================================== ++ // MAC Register has a copy . ++ //======================================================== ++//#ifndef WIFI_TEST ++ if( pAd->CommonCfg.bEnableTxBurst ) ++ { ++ // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode ++ Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode ++ } ++ else ++ Ac0Cfg.field.AcTxop = 0; // QID_AC_BE ++//#else ++// Ac0Cfg.field.AcTxop = 0; // QID_AC_BE ++//#endif ++ Ac0Cfg.field.Cwmin = CW_MIN_IN_BITS; ++ Ac0Cfg.field.Cwmax = CW_MAX_IN_BITS; ++ Ac0Cfg.field.Aifsn = 2; ++ RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); ++ ++ Ac1Cfg.field.AcTxop = 0; // QID_AC_BK ++ Ac1Cfg.field.Cwmin = CW_MIN_IN_BITS; ++ Ac1Cfg.field.Cwmax = CW_MAX_IN_BITS; ++ Ac1Cfg.field.Aifsn = 2; ++ RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); ++ ++ if (pAd->CommonCfg.PhyMode == PHY_11B) ++ { ++ Ac2Cfg.field.AcTxop = 192; // AC_VI: 192*32us ~= 6ms ++ Ac3Cfg.field.AcTxop = 96; // AC_VO: 96*32us ~= 3ms ++ } ++ else ++ { ++ Ac2Cfg.field.AcTxop = 96; // AC_VI: 96*32us ~= 3ms ++ Ac3Cfg.field.AcTxop = 48; // AC_VO: 48*32us ~= 1.5ms ++ } ++ Ac2Cfg.field.Cwmin = CW_MIN_IN_BITS; ++ Ac2Cfg.field.Cwmax = CW_MAX_IN_BITS; ++ Ac2Cfg.field.Aifsn = 2; ++ RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); ++ Ac3Cfg.field.Cwmin = CW_MIN_IN_BITS; ++ Ac3Cfg.field.Cwmax = CW_MAX_IN_BITS; ++ Ac3Cfg.field.Aifsn = 2; ++ RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); ++ ++ //======================================================== ++ // DMA Register has a copy too. ++ //======================================================== ++ csr0.field.Ac0Txop = 0; // QID_AC_BE ++ csr0.field.Ac1Txop = 0; // QID_AC_BK ++ RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); ++ if (pAd->CommonCfg.PhyMode == PHY_11B) ++ { ++ csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms ++ csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms ++ } ++ else ++ { ++ csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms ++ csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms ++ } ++ RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); ++ ++ CwminCsr.word = 0; ++ CwminCsr.field.Cwmin0 = CW_MIN_IN_BITS; ++ CwminCsr.field.Cwmin1 = CW_MIN_IN_BITS; ++ CwminCsr.field.Cwmin2 = CW_MIN_IN_BITS; ++ CwminCsr.field.Cwmin3 = CW_MIN_IN_BITS; ++ RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); ++ ++ CwmaxCsr.word = 0; ++ CwmaxCsr.field.Cwmax0 = CW_MAX_IN_BITS; ++ CwmaxCsr.field.Cwmax1 = CW_MAX_IN_BITS; ++ CwmaxCsr.field.Cwmax2 = CW_MAX_IN_BITS; ++ CwmaxCsr.field.Cwmax3 = CW_MAX_IN_BITS; ++ RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); ++ ++ RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, 0x00002222); ++ ++ NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); ++ } ++ else ++ { ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); ++ //======================================================== ++ // MAC Register has a copy. ++ //======================================================== ++ // ++ // Modify Cwmin/Cwmax/Txop on queue[QID_AC_VI], Recommend by Jerry 2005/07/27 ++ // To degrade our VIDO Queue's throughput for WiFi WMM S3T07 Issue. ++ // ++ //pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this ++ ++ Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; ++ Ac0Cfg.field.Cwmin= pEdcaParm->Cwmin[QID_AC_BE]; ++ Ac0Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BE]; ++ Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; ++ ++ Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; ++ Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; ++ Ac1Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BK]; ++ Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; ++ ++ Ac2Cfg.field.AcTxop = (pEdcaParm->Txop[QID_AC_VI] * 6) / 10; ++ if(pAd->Antenna.field.TxPath == 1) ++ { ++ Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI] + 1; ++ Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI] + 1; ++ } ++ else ++ { ++ Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI]; ++ Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI]; ++ } ++ Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 1; ++#ifdef RTMP_MAC_USB ++ Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 3; ++#endif // RTMP_MAC_USB // ++ ++ { ++ // Tuning for Wi-Fi WMM S06 ++ if (pAd->CommonCfg.bWiFiTest && ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ Ac2Cfg.field.Aifsn -= 1; ++ ++ // Tuning for TGn Wi-Fi 5.2.32 ++ // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta ++ if (STA_TGN_WIFI_ON(pAd) && ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ { ++ Ac0Cfg.field.Aifsn = 3; ++ Ac2Cfg.field.AcTxop = 5; ++ } ++#ifdef RT30xx ++ if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) ++ { ++ // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. ++ Ac2Cfg.field.Aifsn = 5; ++ } ++#endif // RT30xx // ++ } ++ ++ Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO]; ++ Ac3Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VO]; ++ Ac3Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VO]; ++ Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO]; ++ ++//#ifdef WIFI_TEST ++ if (pAd->CommonCfg.bWiFiTest) ++ { ++ if (Ac3Cfg.field.AcTxop == 102) ++ { ++ Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm->Txop[QID_AC_BE] : 10; ++ Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]-1; /* AIFSN must >= 1 */ ++ Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; ++ Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; ++ Ac2Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VI]; ++ } /* End of if */ ++ } ++//#endif // WIFI_TEST // ++ ++ RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); ++ RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); ++ RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); ++ RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); ++ ++ ++ //======================================================== ++ // DMA Register has a copy too. ++ //======================================================== ++ csr0.field.Ac0Txop = Ac0Cfg.field.AcTxop; ++ csr0.field.Ac1Txop = Ac1Cfg.field.AcTxop; ++ RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); ++ ++ csr1.field.Ac2Txop = Ac2Cfg.field.AcTxop; ++ csr1.field.Ac3Txop = Ac3Cfg.field.AcTxop; ++ RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); ++ ++ CwminCsr.word = 0; ++ CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE]; ++ CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK]; ++ CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI]; ++ CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test ++ RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); ++ ++ CwmaxCsr.word = 0; ++ CwmaxCsr.field.Cwmax0 = pEdcaParm->Cwmax[QID_AC_BE]; ++ CwmaxCsr.field.Cwmax1 = pEdcaParm->Cwmax[QID_AC_BK]; ++ CwmaxCsr.field.Cwmax2 = pEdcaParm->Cwmax[QID_AC_VI]; ++ CwmaxCsr.field.Cwmax3 = pEdcaParm->Cwmax[QID_AC_VO]; ++ RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); ++ ++ AifsnCsr.word = 0; ++ AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; ++ AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; ++ AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; ++ ++ { ++ // Tuning for Wi-Fi WMM S06 ++ if (pAd->CommonCfg.bWiFiTest && ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4; ++ ++ // Tuning for TGn Wi-Fi 5.2.32 ++ // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta ++ if (STA_TGN_WIFI_ON(pAd) && ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ { ++ AifsnCsr.field.Aifsn0 = 3; ++ AifsnCsr.field.Aifsn2 = 7; ++ } ++ ++ if (INFRA_ON(pAd)) ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE); ++ } ++ ++ { ++ AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test ++#ifdef RT30xx ++ // TODO: Shiang, this modification also suitable for RT3052/RT3050 ??? ++ if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) ++ { ++ AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. ++ } ++#endif // RT30xx // ++ } ++ RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); ++ ++ NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); ++ if (!ADHOC_ON(pAd)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", pEdcaParm->EdcaUpdateCount)); ++ DBGPRINT(RT_DEBUG_TRACE,(" AC_BE %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[0], ++ pEdcaParm->Cwmin[0], ++ pEdcaParm->Cwmax[0], ++ pEdcaParm->Txop[0]<<5, ++ pEdcaParm->bACM[0])); ++ DBGPRINT(RT_DEBUG_TRACE,(" AC_BK %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[1], ++ pEdcaParm->Cwmin[1], ++ pEdcaParm->Cwmax[1], ++ pEdcaParm->Txop[1]<<5, ++ pEdcaParm->bACM[1])); ++ DBGPRINT(RT_DEBUG_TRACE,(" AC_VI %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[2], ++ pEdcaParm->Cwmin[2], ++ pEdcaParm->Cwmax[2], ++ pEdcaParm->Txop[2]<<5, ++ pEdcaParm->bACM[2])); ++ DBGPRINT(RT_DEBUG_TRACE,(" AC_VO %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[3], ++ pEdcaParm->Cwmin[3], ++ pEdcaParm->Cwmax[3], ++ pEdcaParm->Txop[3]<<5, ++ pEdcaParm->bACM[3])); ++ } ++ } ++ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ========================================================================== ++ */ ++VOID AsicSetSlotTime( ++ IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bUseShortSlotTime) ++{ ++ ULONG SlotTime; ++ UINT32 RegValue = 0; ++ ++ if (pAd->CommonCfg.Channel > 14) ++ bUseShortSlotTime = TRUE; ++ ++ if (bUseShortSlotTime && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) ++ return; ++ else if ((!bUseShortSlotTime) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED))) ++ return; ++ ++ if (bUseShortSlotTime) ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); ++ else ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); ++ ++ SlotTime = (bUseShortSlotTime)? 9 : 20; ++ ++ { ++ // force using short SLOT time for FAE to demo performance when TxBurst is ON ++ if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) ++ || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)) ++ ) ++ { ++ // In this case, we will think it is doing Wi-Fi test ++ // And we will not set to short slot when bEnableTxBurst is TRUE. ++ } ++ else if (pAd->CommonCfg.bEnableTxBurst) ++ { ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); ++ SlotTime = 9; ++ } ++ } ++ ++ // ++ // For some reasons, always set it to short slot time. ++ // ++ // ToDo: Should consider capability with 11B ++ // ++ { ++ if (pAd->StaCfg.BssType == BSS_ADHOC) ++ { ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); ++ SlotTime = 20; ++ } ++ } ++ ++ RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &RegValue); ++ RegValue = RegValue & 0xFFFFFF00; ++ ++ RegValue |= SlotTime; ++ ++ RTMP_IO_WRITE32(pAd, BKOFF_SLOT_CFG, RegValue); ++} ++ ++/* ++ ======================================================================== ++ Description: ++ Add Shared key information into ASIC. ++ Update shared key, TxMic and RxMic to Asic Shared key table ++ Update its cipherAlg to Asic Shared key Mode. ++ ++ Return: ++ ======================================================================== ++*/ ++VOID AsicAddSharedKeyEntry( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIndex, ++ IN UCHAR KeyIdx, ++ IN UCHAR CipherAlg, ++ IN PUCHAR pKey, ++ IN PUCHAR pTxMic, ++ IN PUCHAR pRxMic) ++{ ++ ULONG offset; //, csr0; ++ SHAREDKEY_MODE_STRUC csr1; ++#ifdef RTMP_MAC_PCI ++ INT i; ++#endif // RTMP_MAC_PCI // ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx)); ++//============================================================================================ ++ ++ DBGPRINT(RT_DEBUG_TRACE,("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], BssIndex*4 + KeyIdx)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, (" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); ++ if (pRxMic) ++ { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); ++ } ++ if (pTxMic) ++ { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); ++ } ++//============================================================================================ ++ // ++ // fill key material - key + TX MIC + RX MIC ++ // ++#ifdef RTMP_MAC_PCI ++ offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE; ++ for (i=0; iKey; ++// ULONG KeyLen = pCipherKey->KeyLen; ++ PUCHAR pTxMic = pCipherKey->TxMic; ++ PUCHAR pRxMic = pCipherKey->RxMic; ++ PUCHAR pTxtsc = pCipherKey->TxTsc; ++ UCHAR CipherAlg = pCipherKey->CipherAlg; ++ SHAREDKEY_MODE_STRUC csr1; ++#ifdef RTMP_MAC_PCI ++ UCHAR i; ++#endif // RTMP_MAC_PCI // ++ ++// ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n")); ++ // ++ // 1.) decide key table offset ++ // ++ if (bUsePairewiseKeyTable) ++ offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); ++ else ++ offset = SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE; ++ ++ // ++ // 2.) Set Key to Asic ++ // ++ //for (i = 0; i < KeyLen; i++) ++#ifdef RTMP_MAC_PCI ++ for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) ++ { ++ RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); ++ } ++ offset += MAX_LEN_OF_PEER_KEY; ++ ++ // ++ // 3.) Set MIC key if available ++ // ++ if (pTxMic) ++ { ++ for (i = 0; i < 8; i++) ++ { ++ RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); ++ } ++ } ++ offset += LEN_TKIP_TXMICK; ++ ++ if (pRxMic) ++ { ++ for (i = 0; i < 8; i++) ++ { ++ RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); ++ } ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_PEER_KEY); ++ offset += MAX_LEN_OF_PEER_KEY; ++ ++ // ++ // 3.) Set MIC key if available ++ // ++ if (pTxMic) ++ { ++ RTUSBMultiWrite(pAd, offset, pTxMic, 8); ++ } ++ offset += LEN_TKIP_TXMICK; ++ ++ if (pRxMic) ++ { ++ RTUSBMultiWrite(pAd, offset, pRxMic, 8); ++ } ++#endif // RTMP_MAC_USB // ++ ++ // ++ // 4.) Modify IV/EIV if needs ++ // This will force Asic to use this key ID by setting IV. ++ // ++ if (bTxKey) ++ { ++#ifdef RTMP_MAC_PCI ++ offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); ++ // ++ // Write IV ++ // ++ RTMP_IO_WRITE8(pAd, offset, pTxtsc[1]); ++ RTMP_IO_WRITE8(pAd, offset + 1, ((pTxtsc[1] | 0x20) & 0x7f)); ++ RTMP_IO_WRITE8(pAd, offset + 2, pTxtsc[0]); ++ ++ IV4 = (KeyIdx << 6); ++ if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) ++ IV4 |= 0x20; // turn on extension bit means EIV existence ++ ++ RTMP_IO_WRITE8(pAd, offset + 3, IV4); ++ ++ // ++ // Write EIV ++ // ++ offset += 4; ++ for (i = 0; i < 4; i++) ++ { ++ RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]); ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ UINT32 tmpVal; ++ ++ // ++ // Write IV ++ // ++ IV4 = (KeyIdx << 6); ++ if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) ++ IV4 |= 0x20; // turn on extension bit means EIV existence ++ ++ tmpVal = pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + (pTxtsc[0] << 16) + (IV4 << 24); ++ RTMP_IO_WRITE32(pAd, offset, tmpVal); ++ ++ // ++ // Write EIV ++ // ++ offset += 4; ++ RTMP_IO_WRITE32(pAd, offset, *(PUINT32)&pCipherKey->TxTsc[2]); ++#endif // RTMP_MAC_USB // ++ ++ AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, bUsePairewiseKeyTable); ++ } ++ ++ if (!bUsePairewiseKeyTable) ++ { ++ // ++ // Only update the shared key security mode ++ // ++ RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), &csr1.word); ++ if ((BssIndex % 2) == 0) ++ { ++ if (KeyIdx == 0) ++ csr1.field.Bss0Key0CipherAlg = CipherAlg; ++ else if (KeyIdx == 1) ++ csr1.field.Bss0Key1CipherAlg = CipherAlg; ++ else if (KeyIdx == 2) ++ csr1.field.Bss0Key2CipherAlg = CipherAlg; ++ else ++ csr1.field.Bss0Key3CipherAlg = CipherAlg; ++ } ++ else ++ { ++ if (KeyIdx == 0) ++ csr1.field.Bss1Key0CipherAlg = CipherAlg; ++ else if (KeyIdx == 1) ++ csr1.field.Bss1Key1CipherAlg = CipherAlg; ++ else if (KeyIdx == 2) ++ csr1.field.Bss1Key2CipherAlg = CipherAlg; ++ else ++ csr1.field.Bss1Key3CipherAlg = CipherAlg; ++ } ++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), csr1.word); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<== AsicAddKeyEntry\n")); ++} ++ ++ ++/* ++ ======================================================================== ++ Description: ++ Add Pair-wise key material into ASIC. ++ Update pairwise key, TxMic and RxMic to Asic Pair-wise key table ++ ++ Return: ++ ======================================================================== ++*/ ++VOID AsicAddPairwiseKeyEntry( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr, ++ IN UCHAR WCID, ++ IN CIPHER_KEY *pCipherKey) ++{ ++ INT i; ++ ULONG offset; ++ PUCHAR pKey = pCipherKey->Key; ++ PUCHAR pTxMic = pCipherKey->TxMic; ++ PUCHAR pRxMic = pCipherKey->RxMic; ++#ifdef DBG ++ UCHAR CipherAlg = pCipherKey->CipherAlg; ++#endif // DBG // ++ ++ // EKEY ++ offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); ++#ifdef RTMP_MAC_PCI ++ for (i=0; iKey[0], MAX_LEN_OF_PEER_KEY); ++#endif // RTMP_MAC_USB // ++ for (i=0; iTxMic[0], 8); ++#endif // RTMP_MAC_USB // ++ } ++ offset += 8; ++ if (pRxMic) ++ { ++#ifdef RTMP_MAC_PCI ++ for (i=0; i<8; i++) ++ { ++ RTMP_IO_WRITE8(pAd, offset+i, pRxMic[i]); ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ RTUSBMultiWrite(pAd, offset, &pCipherKey->RxMic[0], 8); ++#endif // RTMP_MAC_USB // ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE,("AsicAddPairwiseKeyEntry: WCID #%d Alg=%s\n",WCID, CipherName[CipherAlg])); ++ DBGPRINT(RT_DEBUG_TRACE,(" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); ++ if (pRxMic) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); ++ } ++ if (pTxMic) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); ++ } ++} ++/* ++ ======================================================================== ++ Description: ++ Remove Pair-wise key material from ASIC. ++ ++ Return: ++ ======================================================================== ++*/ ++VOID AsicRemovePairwiseKeyEntry( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIdx, ++ IN UCHAR Wcid) ++{ ++ ULONG WCIDAttri; ++ USHORT offset; ++ ++ // re-set the entry's WCID attribute as OPEN-NONE. ++ offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); ++ WCIDAttri = (BssIdx<<4) | PAIRWISEKEYTABLE; ++ RTMP_IO_WRITE32(pAd, offset, WCIDAttri); ++} ++ ++BOOLEAN AsicSendCommandToMcu( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, ++ IN UCHAR Arg0, ++ IN UCHAR Arg1) ++{ ++ ++ if (pAd->chipOps.sendCommandToMcu) ++ pAd->chipOps.sendCommandToMcu(pAd, Command, Token, Arg0, Arg1); ++ ++ return TRUE; ++} ++ ++ ++VOID AsicSetRxAnt( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Ant) ++{ ++#ifdef RT30xx ++ /* RT3572 ATE need not to do this. */ ++ RT30xxSetRxAnt(pAd, Ant); ++#endif // RT30xx // ++} ++ ++ ++VOID AsicTurnOffRFClk( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel) ++{ ++ if (pAd->chipOps.AsicRfTurnOff) ++ { ++ pAd->chipOps.AsicRfTurnOff(pAd); ++ } ++ else ++ { ++ // RF R2 bit 18 = 0 ++ UINT32 R1 = 0, R2 = 0, R3 = 0; ++ UCHAR index; ++ RTMP_RF_REGS *RFRegTable; ++ ++ RFRegTable = RF2850RegTable; ++ ++ switch (pAd->RfIcType) ++ { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: ++ ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) ++ { ++ if (Channel == RFRegTable[index].Channel) ++ { ++ R1 = RFRegTable[index].R1 & 0xffffdfff; ++ R2 = RFRegTable[index].R2 & 0xfffbffff; ++ R3 = RFRegTable[index].R3 & 0xfff3ffff; ++ ++ RTMP_RF_IO_WRITE32(pAd, R1); ++ RTMP_RF_IO_WRITE32(pAd, R2); ++ ++ // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. ++ // Set RF R2 bit18=0, R3 bit[18:19]=0 ++ //if (pAd->StaCfg.bRadio == FALSE) ++ if (1) ++ { ++ RTMP_RF_IO_WRITE32(pAd, R3); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x, R3 = 0x%08x \n", ++ Channel, pAd->RfIcType, R2, R3)); ++ } ++ else ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x \n", ++ Channel, pAd->RfIcType, R2)); ++ break; ++ } ++ } ++ break; ++ ++ default: ++ break; ++ } ++ } ++} ++ ++ ++VOID AsicTurnOnRFClk( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel) ++{ ++ // RF R2 bit 18 = 0 ++ UINT32 R1 = 0, R2 = 0, R3 = 0; ++ UCHAR index; ++ RTMP_RF_REGS *RFRegTable; ++ ++ ++ RFRegTable = RF2850RegTable; ++ ++ switch (pAd->RfIcType) ++ { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: ++ ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) ++ { ++ if (Channel == RFRegTable[index].Channel) ++ { ++ R3 = pAd->LatchRfRegs.R3; ++ R3 &= 0xfff3ffff; ++ R3 |= 0x00080000; ++ RTMP_RF_IO_WRITE32(pAd, R3); ++ ++ R1 = RFRegTable[index].R1; ++ RTMP_RF_IO_WRITE32(pAd, R1); ++ ++ R2 = RFRegTable[index].R2; ++ if (pAd->Antenna.field.TxPath == 1) ++ { ++ R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ } ++ ++ if (pAd->Antenna.field.RxPath == 2) ++ { ++ R2 |= 0x40; // write 1 to off Rxpath. ++ } ++ else if (pAd->Antenna.field.RxPath == 1) ++ { ++ R2 |= 0x20040; // write 1 to off RxPath ++ } ++ RTMP_RF_IO_WRITE32(pAd, R2); ++ ++ break; ++ } ++ } ++ break; ++ ++ default: ++ break; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOnRFClk#%d(RF=%d, ) , R2=0x%08x\n", ++ Channel, ++ pAd->RfIcType, ++ R2)); ++} +diff --git a/drivers/staging/rt2860/common/cmm_cfg.c b/drivers/staging/rt2860/common/cmm_cfg.c +new file mode 100644 +index 0000000..c1cf2bf +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_cfg.c +@@ -0,0 +1,290 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ cmm_cfg.c ++ ++ Abstract: ++ Ralink WiFi Driver configuration related subroutines ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++*/ ++ ++ ++ ++#include "../rt_config.h" ++ ++ ++char* GetPhyMode( ++ int Mode) ++{ ++ switch(Mode) ++ { ++ case MODE_CCK: ++ return "CCK"; ++ ++ case MODE_OFDM: ++ return "OFDM"; ++ case MODE_HTMIX: ++ return "HTMIX"; ++ ++ case MODE_HTGREENFIELD: ++ return "GREEN"; ++ default: ++ return "N/A"; ++ } ++} ++ ++ ++char* GetBW( ++ int BW) ++{ ++ switch(BW) ++ { ++ case BW_10: ++ return "10M"; ++ ++ case BW_20: ++ return "20M"; ++ case BW_40: ++ return "40M"; ++ default: ++ return "N/A"; ++ } ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Set Country Region to pAd->CommonCfg.CountryRegion. ++ This command will not work, if the field of CountryRegion in eeprom is programmed. ++ ++ Return: ++ TRUE if all parameters are OK, FALSE otherwise ++ ========================================================================== ++*/ ++INT RT_CfgSetCountryRegion( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg, ++ IN INT band) ++{ ++ LONG region, regionMax; ++ UCHAR *pCountryRegion; ++ ++ region = simple_strtol(arg, 0, 10); ++ ++ if (band == BAND_24G) ++ { ++ pCountryRegion = &pAd->CommonCfg.CountryRegion; ++ regionMax = REGION_MAXIMUM_BG_BAND; ++ } ++ else ++ { ++ pCountryRegion = &pAd->CommonCfg.CountryRegionForABand; ++ regionMax = REGION_MAXIMUM_A_BAND; ++ } ++ ++ // TODO: Is it neccesay for following check??? ++ // Country can be set only when EEPROM not programmed ++ if (*pCountryRegion & 0x80) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():CountryRegion in eeprom was programmed\n")); ++ return FALSE; ++ } ++ ++ if((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) ++ { ++ *pCountryRegion= (UCHAR) region; ++ } ++ else if ((region == REGION_31_BG_BAND) && (band == BAND_24G)) ++ { ++ *pCountryRegion = (UCHAR) region; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():region(%ld) out of range!\n", region)); ++ return FALSE; ++ } ++ ++ return TRUE; ++ ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Set Wireless Mode ++ Return: ++ TRUE if all parameters are OK, FALSE otherwise ++ ========================================================================== ++*/ ++INT RT_CfgSetWirelessMode( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ INT MaxPhyMode = PHY_11G; ++ LONG WirelessMode; ++ ++ MaxPhyMode = PHY_11N_5G; ++ ++ WirelessMode = simple_strtol(arg, 0, 10); ++ if (WirelessMode <= MaxPhyMode) ++ { ++ pAd->CommonCfg.PhyMode = WirelessMode; ++ return TRUE; ++ } ++ ++ return FALSE; ++ ++} ++ ++ ++INT RT_CfgSetShortSlot( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ LONG ShortSlot; ++ ++ ShortSlot = simple_strtol(arg, 0, 10); ++ ++ if (ShortSlot == 1) ++ pAd->CommonCfg.bUseShortSlotTime = TRUE; ++ else if (ShortSlot == 0) ++ pAd->CommonCfg.bUseShortSlotTime = FALSE; ++ else ++ return FALSE; //Invalid argument ++ ++ return TRUE; ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Set WEP KEY base on KeyIdx ++ Return: ++ TRUE if all parameters are OK, FALSE otherwise ++ ========================================================================== ++*/ ++INT RT_CfgSetWepKey( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING keyString, ++ IN CIPHER_KEY *pSharedKey, ++ IN INT keyIdx) ++{ ++ INT KeyLen; ++ INT i; ++ UCHAR CipherAlg = CIPHER_NONE; ++ BOOLEAN bKeyIsHex = FALSE; ++ ++ // TODO: Shall we do memset for the original key info?? ++ memset(pSharedKey, 0, sizeof(CIPHER_KEY)); ++ KeyLen = strlen(keyString); ++ switch (KeyLen) ++ { ++ case 5: //wep 40 Ascii type ++ case 13: //wep 104 Ascii type ++ bKeyIsHex = FALSE; ++ pSharedKey->KeyLen = KeyLen; ++ NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); ++ break; ++ ++ case 10: //wep 40 Hex type ++ case 26: //wep 104 Hex type ++ for(i=0; i < KeyLen; i++) ++ { ++ if( !isxdigit(*(keyString+i)) ) ++ return FALSE; //Not Hex value; ++ } ++ bKeyIsHex = TRUE; ++ pSharedKey->KeyLen = KeyLen/2 ; ++ AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); ++ break; ++ ++ default: //Invalid argument ++ DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey(keyIdx=%d):Invalid argument (arg=%s)\n", keyIdx, keyString)); ++ return FALSE; ++ } ++ ++ pSharedKey->CipherAlg = ((KeyLen % 5) ? CIPHER_WEP128 : CIPHER_WEP64); ++ DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey:(KeyIdx=%d,type=%s, Alg=%s)\n", ++ keyIdx, (bKeyIsHex == FALSE ? "Ascii" : "Hex"), CipherName[CipherAlg])); ++ ++ return TRUE; ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Set WPA PSK key ++ ++ Arguments: ++ pAdapter Pointer to our adapter ++ keyString WPA pre-shared key string ++ pHashStr String used for password hash function ++ hashStrLen Lenght of the hash string ++ pPMKBuf Output buffer of WPAPSK key ++ ++ Return: ++ TRUE if all parameters are OK, FALSE otherwise ++ ========================================================================== ++*/ ++INT RT_CfgSetWPAPSKKey( ++ IN RTMP_ADAPTER *pAd, ++ IN PSTRING keyString, ++ IN UCHAR *pHashStr, ++ IN INT hashStrLen, ++ OUT PUCHAR pPMKBuf) ++{ ++ int keyLen; ++ UCHAR keyMaterial[40]; ++ ++ keyLen = strlen(keyString); ++ if ((keyLen < 8) || (keyLen > 64)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("WPAPSK Key length(%d) error, required 8 ~ 64 characters!(keyStr=%s)\n", ++ keyLen, keyString)); ++ return FALSE; ++ } ++ ++ memset(pPMKBuf, 0, 32); ++ if (keyLen == 64) ++ { ++ AtoH(keyString, pPMKBuf, 32); ++ } ++ else ++ { ++ PasswordHash(keyString, pHashStr, hashStrLen, keyMaterial); ++ NdisMoveMemory(pPMKBuf, keyMaterial, 32); ++ } ++ ++ return TRUE; ++} +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 774fabb..3696913 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -25,9 +25,8 @@ + ************************************************************************* + */ + +-#include "../rt_config.h" + +-#define MAX_TX_IN_TBTT (16) ++#include "../rt_config.h" + + + UCHAR SNAP_802_1H[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00}; +@@ -67,6 +66,7 @@ UCHAR RxwiMCSToOfdmRate[12] = { + char* MCSToMbps[] = {"1Mbps","2Mbps","5.5Mbps","11Mbps","06Mbps","09Mbps","12Mbps","18Mbps","24Mbps","36Mbps","48Mbps","54Mbps","MM-0","MM-1","MM-2","MM-3","MM-4","MM-5","MM-6","MM-7","MM-8","MM-9","MM-10","MM-11","MM-12","MM-13","MM-14","MM-15","MM-32","ee1","ee2","ee3"}; + + UCHAR default_cwmin[]={CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1, CW_MIN_IN_BITS-2}; ++//UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; + UCHAR default_sta_aifsn[]={3,7,2,2}; + + UCHAR MapUserPriorityToAccessCategory[8] = {QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, QID_AC_VO, QID_AC_VO}; +@@ -105,28 +105,38 @@ NDIS_STATUS MiniportMMRequest( + PNDIS_PACKET pPacket; + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + ULONG FreeNum; +-#ifdef RT2860 ++ UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; ++#ifdef RTMP_MAC_PCI + unsigned long IrqFlags = 0; +-#endif + UCHAR IrqState; +- UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; ++#endif // RTMP_MAC_PCI // ++ BOOLEAN bUseDataQ = FALSE; ++ int retryCnt = 0; + + ASSERT(Length <= MGMT_DMA_BUFFER_SIZE); + +- QueIdx=3; ++ if ((QueIdx & MGMT_USE_QUEUE_FLAG) == MGMT_USE_QUEUE_FLAG) ++ { ++ bUseDataQ = TRUE; ++ QueIdx &= (~MGMT_USE_QUEUE_FLAG); ++ } + ++#ifdef RTMP_MAC_PCI + // 2860C use Tx Ring +- + IrqState = pAd->irq_disabled; +- +-#ifdef RT2860 +- if ((pAd->MACVersion == 0x28600100) && (!IrqState)) ++ if (pAd->MACVersion == 0x28600100) ++ { ++ QueIdx = (bUseDataQ ==TRUE ? QueIdx : 3); ++ bUseDataQ = TRUE; ++ } ++ if (bUseDataQ && (!IrqState)) + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +-#endif ++#endif // RTMP_MAC_PCI // ++ + do + { + // Reset is in progress, stop immediately +- if ( RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || + RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)|| + !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) + { +@@ -136,13 +146,16 @@ NDIS_STATUS MiniportMMRequest( + + // Check Free priority queue + // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. +- +- // 2860C use Tx Ring +- if (pAd->MACVersion == 0x28600100) ++#ifdef RTMP_MAC_PCI ++ if (bUseDataQ) + { ++ retryCnt = MAX_DATAMM_RETRY; ++ // free Tx(QueIdx) resources ++ RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); + FreeNum = GET_TXRING_FREENO(pAd, QueIdx); + } + else ++#endif // RTMP_MAC_PCI // + { + FreeNum = GET_MGMTRING_FREENO(pAd); + } +@@ -162,96 +175,51 @@ NDIS_STATUS MiniportMMRequest( + //pAd->CommonCfg.MlmeRate = RATE_2; + + ++#ifdef RTMP_MAC_PCI ++ if (bUseDataQ) ++ { ++ Status = MlmeDataHardTransmit(pAd, QueIdx, pPacket); ++ retryCnt--; ++ } ++ else ++#endif // RTMP_MAC_PCI // + Status = MlmeHardTransmit(pAd, QueIdx, pPacket); +- if (Status != NDIS_STATUS_SUCCESS) ++ if (Status == NDIS_STATUS_SUCCESS) ++ retryCnt = 0; ++ else + RTMPFreeNdisPacket(pAd, pPacket); + } + else + { + pAd->RalinkCounters.MgmtRingFullCount++; ++#ifdef RTMP_MAC_PCI ++ if (bUseDataQ) ++ { ++ retryCnt--; ++ DBGPRINT(RT_DEBUG_TRACE, ("retryCnt %d\n", retryCnt)); ++ if (retryCnt == 0) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n", ++ QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); ++ } ++ } ++#endif // RTMP_MAC_PCI // + DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in MgmtRing, MgmtRingFullCount=%ld!\n", + QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); + } ++ } while (retryCnt > 0); + +- } while (FALSE); + +-#ifdef RT2860 +- // 2860C use Tx Ring +- if ((pAd->MACVersion == 0x28600100) && (!IrqState)) ++#ifdef RTMP_MAC_PCI ++ if (bUseDataQ && (!IrqState)) + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +-#endif ++#endif // RTMP_MAC_PCI // ++ + return Status; + } + +-#ifdef RT2860 +-NDIS_STATUS MiniportMMRequestUnlock( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PUCHAR pData, +- IN UINT Length) +-{ +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG FreeNum; +- TXWI_STRUC TXWI; +- ULONG SW_TX_IDX; +- PTXD_STRUC pTxD; +- +- QueIdx = 3; +- ASSERT(Length <= MGMT_DMA_BUFFER_SIZE); +- +- do +- { +- // Reset is in progress, stop immediately +- if ( RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)|| +- !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) +- { +- Status = NDIS_STATUS_FAILURE; +- break; +- } +- +- // Check Free priority queue +- // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. +- // 2860C use Tx Ring +- if (pAd->MACVersion == 0x28600100) +- { +- FreeNum = GET_TXRING_FREENO(pAd, QueIdx); +- SW_TX_IDX = pAd->TxRing[QueIdx].TxCpuIdx; +- pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SW_TX_IDX].AllocVa; +- } +- else +- { +- FreeNum = GET_MGMTRING_FREENO(pAd); +- SW_TX_IDX = pAd->MgmtRing.TxCpuIdx; +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SW_TX_IDX].AllocVa; +- } +- if ((FreeNum > 0)) +- { +- NdisZeroMemory(&TXWI, TXWI_SIZE); +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, (PUCHAR)&TXWI, TXWI_SIZE, pData, Length); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n")); +- break; +- } +- +- Status = MlmeHardTransmit(pAd, QueIdx, pPacket); +- if (Status != NDIS_STATUS_SUCCESS) +- RTMPFreeNdisPacket(pAd, pPacket); +- } +- else +- { +- pAd->RalinkCounters.MgmtRingFullCount++; +- DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in MgmtRing\n", QueIdx)); +- } +- +- } while (FALSE); + + +- return Status; +-} +-#endif + + /* + ======================================================================== +@@ -282,203 +250,33 @@ NDIS_STATUS MlmeHardTransmit( + IN UCHAR QueIdx, + IN PNDIS_PACKET pPacket) + { +- if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- { +- return NDIS_STATUS_FAILURE; +- } +- +-#ifdef RT2860 +- if ( pAd->MACVersion == 0x28600100 ) +- return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); +- else +-#endif +- return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket); +- +-} +- +-#ifdef RT2860 +-NDIS_STATUS MlmeHardTransmitTxRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ + PACKET_INFO PacketInfo; + PUCHAR pSrcBufVA; + UINT SrcBufLen; +- PTXD_STRUC pTxD; + PHEADER_802_11 pHeader_802_11; +- BOOLEAN bAckRequired, bInsertTimestamp; +- ULONG SrcBufPA; +- UCHAR MlmeRate; +- ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- PTXWI_STRUC pFirstTxWI; +- ULONG FreeNum; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- + +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- if (pSrcBufVA == NULL) +- { +- // The buffer shouldn't be NULL +- return NDIS_STATUS_FAILURE; +- } +- +- // Make sure MGMT ring resource won't be used by other threads +- //NdisAcquireSpinLock(&pAd->TxRingLock); +- +- FreeNum = GET_TXRING_FREENO(pAd, QueIdx); +- +- if (FreeNum == 0) ++ if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) ++ ) + { +- //NdisReleaseSpinLock(&pAd->TxRingLock); + return NDIS_STATUS_FAILURE; + } + +- SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- +- pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; +- +- if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) +- { +- printk("MlmeHardTransmit Error\n"); ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); ++ if (pSrcBufVA == NULL) + return NDIS_STATUS_FAILURE; +- } + +- // outgoing frame always wakeup PHY to prevent frame lost +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, FROM_TX); ++ pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); + +- pFirstTxWI =(PTXWI_STRUC)pSrcBufVA; + +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE); +- if (pHeader_802_11->Addr1[0] & 0x01) +- { +- MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- } +- else +- { +- MlmeRate = pAd->CommonCfg.MlmeRate; +- } +- +- if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) +- { +- pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); +- } +- +- // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band +- MlmeRate = RATE_6; +- +- // +- // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) +- // Snice it's been set to 0 while on MgtMacHeaderInit +- // By the way this will cause frame to be send on PWR_SAVE failed. +- // +- // +- // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +- if (pHeader_802_11->FC.Type != BTYPE_DATA) +- { +- if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) || !(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) +- { +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; +- } +- else +- { +- pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; +- } +- } +- +- bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL +- { +- bAckRequired = FALSE; +- } +- else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) +- { +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST +- { +- bAckRequired = FALSE; +- pHeader_802_11->Duration = 0; +- } +- else +- { +- bAckRequired = TRUE; +- pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) +- { +- bInsertTimestamp = TRUE; +- } +- } +- } +- pHeader_802_11->Sequence = pAd->Sequence++; +- if (pAd->Sequence > 0xfff) +- pAd->Sequence = 0; +- // Before radar detection done, mgmt frame can not be sent but probe req +- // Because we need to use probe req to trigger driver to send probe req in passive scan +- if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +- return (NDIS_STATUS_FAILURE); +- } +- +- // +- // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one ohysical buffer, and the whole frame size equals +- // to the first scatter buffer size +- // +- +- // Initialize TX Descriptor +- // For inter-frame gap, the number is for this frame and next frame +- // For MLME rate, we will fix as 2Mb to match other vendor's implement +- +-// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. +- // Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. +- if (pMacEntry == NULL) +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } ++#ifdef RTMP_MAC_PCI ++ if ( pAd->MACVersion == 0x28600100 ) ++ return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); + else +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, +- bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), +- pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, +- IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); +- } +- +- pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket; +- pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL; +- +- SrcBufPA = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); +- +- +- RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_EDCA); +- pTxD->LastSec0 = 1; +- pTxD->LastSec1 = 1; +- pTxD->SDLen0 = SrcBufLen; +- pTxD->SDLen1 = 0; +- pTxD->SDPtr0 = SrcBufPA; +- pTxD->DMADONE = 0; +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // Increase TX_CTX_IDX, but write to register later. +- INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); +- +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx*0x10, pAd->TxRing[QueIdx].TxCpuIdx); ++#endif // RTMP_MAC_PCI // ++ return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket); + +- return NDIS_STATUS_SUCCESS; + } +-#endif /* RT2860 */ ++ + + NDIS_STATUS MlmeHardTransmitMgmtRing( + IN PRTMP_ADAPTER pAd, +@@ -493,25 +291,24 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + UCHAR MlmeRate; + PTXWI_STRUC pFirstTxWI; + MAC_TABLE_ENTRY *pMacEntry = NULL; ++ UCHAR PID; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- RTMP_SEM_LOCK(&pAd->MgmtRingLock); +- + ++ // Make sure MGMT ring resource won't be used by other threads ++ RTMP_SEM_LOCK(&pAd->MgmtRingLock); + if (pSrcBufVA == NULL) + { ++ // The buffer shouldn't be NULL + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_FAILURE; + } + ++ { + // outgoing frame always wakeup PHY to prevent frame lost + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +-#ifdef RT2860 +- AsicForceWakeup(pAd, FROM_TX); +-#endif +-#ifdef RT2870 + AsicForceWakeup(pAd, TRUE); +-#endif ++ } + + pFirstTxWI = (PTXWI_STRUC)(pSrcBufVA + TXINFO_SIZE); + pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE); +@@ -553,19 +350,28 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + // Snice it's been set to 0 while on MgtMacHeaderInit + // By the way this will cause frame to be send on PWR_SAVE failed. + // +- // pHeader_802_11->FC.PwrMgmt = 0; // (pAd->StaCfg.Psm == PWR_SAVE); ++ pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; // (pAd->StaCfg.Psm == PWR_SAVE); ++ + // + // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- + // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +- if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) ++// if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) + { +- if ((pAd->StaCfg.Psm == PWR_SAVE) && +- (pHeader_802_11->FC.SubType == SUBTYPE_ACTION)) ++ if ((pHeader_802_11->FC.SubType == SUBTYPE_ACTION) || ++ ((pHeader_802_11->FC.Type == BTYPE_DATA) && ++ ((pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL) || ++ (pHeader_802_11->FC.SubType == SUBTYPE_NULL_FUNC)))) ++ { ++ if (pAd->StaCfg.Psm == PWR_SAVE) + pHeader_802_11->FC.PwrMgmt = PWR_SAVE; + else +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; ++ pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; + } ++ } ++ ++ ++ ++ + + bInsertTimestamp = FALSE; + if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL +@@ -579,6 +385,9 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + } + else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) + { ++ //pAd->Sequence++; ++ //pHeader_802_11->Sequence = pAd->Sequence; ++ + if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST + { + bAckRequired = FALSE; +@@ -588,9 +397,14 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + { + bAckRequired = TRUE; + pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) ++ if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) + { + bInsertTimestamp = TRUE; ++ bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Response ++ } ++ else if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) ++ { ++ bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Request + } + } + } +@@ -606,28 +420,35 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) + { + DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++// if (!IrqState) + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return (NDIS_STATUS_FAILURE); + } + ++ + // + // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one ohysical buffer, and the whole frame size equals ++ // should always has only one physical buffer, and the whole frame size equals + // to the first scatter buffer size + // + + // Initialize TX Descriptor + // For inter-frame gap, the number is for this frame and next frame + // For MLME rate, we will fix as 2Mb to match other vendor's implement ++// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; + + // management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. ++ PID = PID_MGMT; ++ ++ + if (pMacEntry == NULL) + { + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ 0, RESERVED_WCID, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + } + else + { ++ /* dont use low rate to send QoS Null data frame */ + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, + bInsertTimestamp, FALSE, bAckRequired, FALSE, + 0, pMacEntry->Aid, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), +@@ -640,6 +461,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen); + + // Make sure to release MGMT ring resource ++// if (!IrqState) + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_SUCCESS; + } +@@ -737,10 +559,6 @@ static UCHAR TxPktClassification( + bHTRate = TRUE; + if (RTMP_GET_PACKET_MOREDATA(pPacket) || (pMacEntry->PsMode == PWR_SAVE)) + TxFrameType = TX_LEGACY_FRAME; +-#ifdef UAPSD_AP_SUPPORT +- else if (RTMP_GET_PACKET_EOSP(pPacket)) +- TxFrameType = TX_LEGACY_FRAME; +-#endif // UAPSD_AP_SUPPORT // + else if((pMacEntry->TXBAbitmap & (1<<(RTMP_GET_PACKET_UP(pPacket)))) != 0) + return TX_AMPDU_FRAME; + else if(CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AMSDU_INUSED)) +@@ -799,12 +617,6 @@ BOOLEAN RTMP_FillTxBlkInfo( + { + pTxBlk->pMacEntry = NULL; + { +-#ifdef MCAST_RATE_SPECIFIC +- PUCHAR pDA = GET_OS_PKT_DATAPTR(pPacket); +- if (((*pDA & 0x01) == 0x01) && (*pDA != 0xff)) +- pTxBlk->pTransmit = &pAd->CommonCfg.MCastPhyMode; +- else +-#endif // MCAST_RATE_SPECIFIC // + pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; + } + +@@ -832,16 +644,25 @@ BOOLEAN RTMP_FillTxBlkInfo( + else + TX_BLK_SET_FLAG(pTxBlk, fTX_bAckRequired); + ++ if ((pAd->OpMode == OPMODE_STA) && ++ (ADHOC_ON(pAd)) && ++ (RX_FILTER_TEST_FLAG(pAd, fRX_FILTER_ACCEPT_PROMISCUOUS))) + { ++ if(pAd->CommonCfg.PSPXlink) ++ TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); ++ } ++ ++ { ++ { ++ + // If support WMM, enable it. +-#ifdef RT2860 +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) +-#endif +-#ifdef RT2870 + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && + CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)) +-#endif + TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM); ++ ++// if (pAd->StaCfg.bAutoTxRateSwitch) ++// TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); ++ } + } + + if (pTxBlk->TxFrameType == TX_LEGACY_FRAME) +@@ -871,12 +692,6 @@ BOOLEAN RTMP_FillTxBlkInfo( + { + TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData); + } +-#ifdef UAPSD_AP_SUPPORT +- if (RTMP_GET_PACKET_EOSP(pPacket)) +- { +- TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM_UAPSD_EOSP); +- } +-#endif // UAPSD_AP_SUPPORT // + } + else if (pTxBlk->TxFrameType == TX_FRAG_FRAME) + { +@@ -896,7 +711,7 @@ BOOLEAN CanDoAggregateTransmit( + IN TX_BLK *pTxBlk) + { + +- //printk("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType); ++ //DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); + + if (RTMP_GET_PACKET_WCID(pPacket) == MCAST_WCID) + return FALSE; +@@ -922,6 +737,7 @@ BOOLEAN CanDoAggregateTransmit( + return TRUE; + else + return FALSE; ++ + } + + +@@ -970,7 +786,6 @@ VOID RTMPDeQueuePacket( + if (QIdx == NUM_OF_TX_RING) + { + sQIdx = 0; +-//PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) + eQIdx = 3; // 4 ACs, start from 0. + } + else +@@ -982,7 +797,7 @@ VOID RTMPDeQueuePacket( + { + Count=0; + +- RT28XX_START_DEQUEUE(pAd, QueIdx, IrqFlags); ++ RTMP_START_DEQUEUE(pAd, QueIdx, IrqFlags); + + + while (1) +@@ -993,7 +808,7 @@ VOID RTMPDeQueuePacket( + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) + { +- RT28XX_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); ++ RTMP_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); + return; + } + +@@ -1006,7 +821,8 @@ VOID RTMPDeQueuePacket( + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); + break; + } +-#ifdef RT2860 ++ ++#ifdef RTMP_MAC_PCI + FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); + + +@@ -1016,7 +832,8 @@ VOID RTMPDeQueuePacket( + RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); + FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); + } +-#endif /* RT2860 */ ++#endif // RTMP_MAC_PCI // ++ + // probe the Queue Head + pQueue = &pAd->TxSwQueue[QueIdx]; + if ((pEntry = pQueue->Head) == NULL) +@@ -1027,12 +844,14 @@ VOID RTMPDeQueuePacket( + + pTxBlk = &TxBlk; + NdisZeroMemory((PUCHAR)pTxBlk, sizeof(TX_BLK)); ++ //InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. + pTxBlk->QueIdx = QueIdx; + +- pPacket = QUEUE_ENTRY_TO_PKT(pEntry); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); ++ + + // Early check to make sure we have enoguh Tx Resource. +- hasTxDesc = RT28XX_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); ++ hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); + if (!hasTxDesc) + { + pAd->PrivateInfo.TxRingFullCnt++; +@@ -1065,16 +884,16 @@ VOID RTMPDeQueuePacket( + break; + + // For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. +- pPacket = QUEUE_ENTRY_TO_PKT(pEntry); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); +- hasTxDesc = RT28XX_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); ++ hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); + if ((hasTxDesc == FALSE) || (CanDoAggregateTransmit(pAd, pPacket, pTxBlk) == FALSE)) + break; + + //Remove the packet from the TxSwQueue and insert into pTxBlk + pEntry = RemoveHeadQueue(pQueue); + ASSERT(pEntry); +- pPacket = QUEUE_ENTRY_TO_PKT(pEntry); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + pTxBlk->TotalFrameNum++; + pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary + pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); +@@ -1085,29 +904,29 @@ VOID RTMPDeQueuePacket( + pTxBlk->TxFrameType = TX_LEGACY_FRAME; + } + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +-#endif // RT2870 // +- ++#endif // RTMP_MAC_USB // + Count += pTxBlk->TxPacketList.Number; + + // Do HardTransmit now. + Status = STAHardTransmit(pAd, pTxBlk, QueIdx); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); + // static rate also need NICUpdateFifoStaCounters() function. + //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) + NICUpdateFifoStaCounters(pAd); +-#endif ++#endif // RTMP_MAC_PCI // ++ + } + +- RT28XX_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); ++ RTMP_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + if (!hasTxDesc) + RTUSBKickBulkOut(pAd); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + } + + } +@@ -1243,9 +1062,16 @@ VOID RTMPWriteTxWI( + pTxWI->NSEQ = NSeq; + // John tune the performace with Intel Client in 20 MHz performance + BASize = pAd->CommonCfg.TxBASize; +- ++ if (pAd->MACVersion == 0x28720200) ++ { ++ if( BASize >13 ) ++ BASize =13; ++ } ++ else ++ { + if( BASize >7 ) + BASize =7; ++ } + pTxWI->BAWinSize = BASize; + pTxWI->ShortGI = pTransmit->field.ShortGI; + pTxWI->STBC = pTransmit->field.STBC; +@@ -1387,7 +1213,7 @@ VOID RTMPWriteTxWI_Cache( + IN OUT PTXWI_STRUC pTxWI, + IN TX_BLK *pTxBlk) + { +- PHTTRANSMIT_SETTING pTransmit; ++ PHTTRANSMIT_SETTING /*pTxHTPhyMode,*/ pTransmit; + PMAC_TABLE_ENTRY pMacEntry; + + // +@@ -1396,6 +1222,9 @@ VOID RTMPWriteTxWI_Cache( + pMacEntry = pTxBlk->pMacEntry; + pTransmit = pTxBlk->pTransmit; + ++ //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) ++ //if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pMacEntry)) ++ //if (TX_BLK_TEST_FLAG(pTxBlk, fTX_AutoRateSwitch)) + if (pMacEntry->bAutoTxRateSwitch) + { + pTxWI->txop = IFS_HTTXOP; +@@ -1440,53 +1269,6 @@ VOID RTMPWriteTxWI_Cache( + } + + +-/* +- ======================================================================== +- +- Routine Description: +- Calculates the duration which is required to transmit out frames +- with given size and specified rate. +- +- Arguments: +- pTxD Pointer to transmit descriptor +- Ack Setting for Ack requirement bit +- Fragment Setting for Fragment bit +- RetryMode Setting for retry mode +- Ifs Setting for IFS gap +- Rate Setting for transmit rate +- Service Setting for service +- Length Frame length +- TxPreamble Short or Long preamble when using CCK rates +- QueIdx - 0-3, according to 802.11e/d4.4 June/2003 +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QueueSEL) +-{ +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- +- pTxD->WIV = (bWIV) ? 1: 0; +- pTxD->QSEL= (QueueSEL); +- if (pAd->bGenOneHCCA == TRUE) +- pTxD->QSEL= FIFO_HCCA; +- pTxD->DMADONE = 0; +-} +- +- + // should be called only when - + // 1. MEADIA_CONNECTED + // 2. AGGREGATION_IN_USED +@@ -1582,12 +1364,14 @@ PQUEUE_HEADER RTMPCheckTxSwQueue( + { + + ULONG Number; ++ // 2004-11-15 to be removed. test aggregation only ++// if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) ++// return NULL; + + Number = pAd->TxSwQueue[QID_AC_BK].Number + + pAd->TxSwQueue[QID_AC_BE].Number + + pAd->TxSwQueue[QID_AC_VI].Number +- + pAd->TxSwQueue[QID_AC_VO].Number +- + pAd->TxSwQueue[QID_HCCA].Number; ++ + pAd->TxSwQueue[QID_AC_VO].Number; + + if (pAd->TxSwQueue[QID_AC_VO].Head != NULL) + { +@@ -1609,11 +1393,6 @@ PQUEUE_HEADER RTMPCheckTxSwQueue( + *pQueIdx = QID_AC_BK; + return (&pAd->TxSwQueue[QID_AC_BK]); + } +- else if (pAd->TxSwQueue[QID_HCCA].Head != NULL) +- { +- *pQueIdx = QID_HCCA; +- return (&pAd->TxSwQueue[QID_HCCA]); +- } + + // No packet pending in Tx Sw queue + *pQueIdx = QID_AC_BK; +@@ -1621,277 +1400,6 @@ PQUEUE_HEADER RTMPCheckTxSwQueue( + return (NULL); + } + +-#ifdef RT2860 +-BOOLEAN RTMPFreeTXDUponTxDmaDone( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx) +-{ +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- UCHAR FREE = 0; +- TXD_STRUC TxD, *pOriTxD; +- //ULONG IrqFlags; +- BOOLEAN bReschedule = FALSE; +- +- +- ASSERT(QueIdx < NUM_OF_TX_RING); +- pTxRing = &pAd->TxRing[QueIdx]; +- +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, &pTxRing->TxDmaIdx); +- while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) +- { +- // static rate also need NICUpdateFifoStaCounters() function. +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- NICUpdateFifoStaCounters(pAd); +- +- /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ +- FREE++; +- pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); +- pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); +- pTxD = &TxD; +- +- pTxD->DMADONE = 0; +- +-/*====================================================================*/ +- { +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket; +- if (pPacket) +- { +-#ifdef CONFIG_5VT_ENHANCE +- if (RTMP_GET_PACKET_5VT(pPacket)) +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, 16, PCI_DMA_TODEVICE); +- else +-#endif // CONFIG_5VT_ENHANCE // +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket; +- +- ASSERT(pPacket == NULL); +- if (pPacket) +- { +-#ifdef CONFIG_5VT_ENHANCE +- if (RTMP_GET_PACKET_5VT(pPacket)) +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, 16, PCI_DMA_TODEVICE); +- else +-#endif // CONFIG_5VT_ENHANCE // +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- } +-/*====================================================================*/ +- +- pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); +- pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++; +- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); +- /* get tx_tdx_idx again */ +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx); +- +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); +- } +- +- +- return bReschedule; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Process TX Rings DMA Done interrupt, running in DPC level +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap) +-{ +- unsigned long IrqFlags; +- BOOLEAN bReschedule = FALSE; +- +- // Make sure Tx ring resource won't be used by other threads +- +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- +- if (TxRingBitmap.field.Ac0DmaDone) +- bReschedule = RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BE); +- +- if (TxRingBitmap.field.HccaDmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_HCCA); +- +- if (TxRingBitmap.field.Ac3DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VO); +- +- if (TxRingBitmap.field.Ac2DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VI); +- +- if (TxRingBitmap.field.Ac1DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BK); +- +- // Make sure to release Tx ring resource +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- +- // Dequeue outgoing frames from TxSwQueue[] and process it +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- +- return bReschedule; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Process MGMT ring DMA done interrupt, running in DPC level +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPHandleMgmtRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- UCHAR FREE = 0; +- PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; +- +- NdisAcquireSpinLock(&pAd->MgmtRingLock); +- +- RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pMgmtRing->TxDmaIdx); +- while (pMgmtRing->TxSwFreeIdx!= pMgmtRing->TxDmaIdx) +- { +- FREE++; +- pTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa); +- pTxD->DMADONE = 0; +- pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket; +- +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket = NULL; +- +- pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket; +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- INC_RING_INDEX(pMgmtRing->TxSwFreeIdx, MGMT_RING_SIZE); +- } +- NdisReleaseSpinLock(&pAd->MgmtRingLock); +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Arguments: +- Adapter Pointer to our adapter. Dequeue all power safe delayed braodcast frames after beacon. +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPHandleTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- } +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Arguments: +- Adapter Pointer to our adapter. Rewrite beacon content before next send-out. +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPHandlePreTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPHandlePreTBTTInterrupt...\n")); +- } +- } +- +- +-} +- +-VOID RTMPHandleRxCoherentInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- if (pAd == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("====> pAd is NULL, return.\n")); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPHandleRxCoherentInterrupt \n")); +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG , &GloCfg.word); +- +- GloCfg.field.EnTXWriteBackDDONE = 0; +- GloCfg.field.EnableRxDMA = 0; +- GloCfg.field.EnableTxDMA = 0; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- RTMPEnableRxTx(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); +-} +-#endif /* RT2860 */ + + /* + ======================================================================== +@@ -1922,9 +1430,11 @@ VOID RTMPSuspendMsduTransmission( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue); + + // set BBP_R66 to 0x30/0x40 when scanning (AsicSwitchChannel will set R66 according to channel when scanning) ++ //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x26 + GET_LNA_GAIN(pAd))); + RTMPSetAGCInitValue(pAd, BW_20); + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); ++ //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings + } + + +@@ -1949,8 +1459,11 @@ VOID RTMPSuspendMsduTransmission( + VOID RTMPResumeMsduTransmission( + IN PRTMP_ADAPTER pAd) + { ++// UCHAR IrqState; ++ + DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n")); + ++ + // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value + // R66 should not be 0 + if (pAd->BbpTuning.R66CurrentValue == 0) +@@ -1962,6 +1475,11 @@ VOID RTMPResumeMsduTransmission( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); ++// sample, for IRQ LOCK to SEM LOCK ++// IrqState = pAd->irq_disabled; ++// if (IrqState) ++// RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++// else + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + } + +@@ -1990,7 +1508,9 @@ UINT deaggregate_AMSDU_announce( + + nMSDU++; + ++ //hex_dump("subheader", pData, 64); + pAMSDUsubheader = (PHEADER_802_3)pData; ++ //pData += LENGTH_802_3; + PayloadSize = pAMSDUsubheader->Octet[1] + (pAMSDUsubheader->Octet[0]<<8); + SubFrameSize = PayloadSize + LENGTH_802_3; + +@@ -2000,6 +1520,8 @@ UINT deaggregate_AMSDU_announce( + break; + } + ++ //DBGPRINT(RT_DEBUG_TRACE,("%d subframe: Size = %d\n", nMSDU, PayloadSize)); ++ + pPayload = pData + LENGTH_802_3; + pDA = pData; + pSA = pData + MAC_ADDR_LEN; +@@ -2009,15 +1531,17 @@ UINT deaggregate_AMSDU_announce( + + if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E) ) + { +- // avoid local heap overflow, use dyanamic allocation ++ /* avoid local heap overflow, use dyanamic allocation */ + MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem == NULL) +- return; ++ if (Elem != NULL) ++ { + memmove(Elem->Msg+(LENGTH_802_11 + LENGTH_802_1_H), pPayload, PayloadSize); + Elem->MsgLen = LENGTH_802_11 + LENGTH_802_1_H + PayloadSize; +- WpaEAPOLKeyAction(pAd, Elem); ++ //WpaEAPOLKeyAction(pAd, Elem); ++ REPORT_MGMT_FRAME_TO_MLME(pAd, BSSID_WCID, Elem->Msg, Elem->MsgLen, 0, 0, 0, 0); + kfree(Elem); + } ++ } + + { + if (pRemovedLLCSNAP) +@@ -2121,6 +1645,8 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + UCHAR HashIdx; + int i, FirstWcid; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; ++// USHORT offset; ++// ULONG addr; + + // if FULL, return + if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) +@@ -2183,22 +1709,15 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + pEntry->AuthMode = pAd->StaCfg.AuthMode; + pEntry->WepStatus = pAd->StaCfg.WepStatus; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)i); +-#endif ++#endif // RTMP_MAC_PCI // + } + } + + pEntry->GTKState = REKEY_NEGOTIATING; + pEntry->PairwiseKey.KeyLen = 0; + pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; +- +-#ifdef RT2860 +- if ((pAd->OpMode == OPMODE_STA) && +- (pAd->StaCfg.BssType == BSS_ADHOC)) +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- else +-#endif + pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; + + pEntry->PMKID_CacheIdx = ENTRY_NOT_FOUND; +@@ -2210,13 +1729,14 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + pEntry->PsMode = PWR_ACTIVE; + pEntry->PsQIdleCount = 0; + pEntry->NoDataIdleCount = 0; ++ pEntry->AssocDeadLine = MAC_TABLE_ASSOC_TIMEOUT; + pEntry->ContinueTxFailCnt = 0; + InitializeQueueHeader(&pEntry->PsQueue); + + + pAd->MacTab.Size ++; + // Add this entry into ASIC RX WCID search table +- RT28XX_STA_ENTRY_ADD(pAd, pEntry); ++ RTMP_STA_ENTRY_ADD(pAd, pEntry); + + + +@@ -2260,6 +1780,8 @@ BOOLEAN MacTableDeleteEntry( + USHORT HashIdx; + MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; + BOOLEAN Cancelled; ++ //USHORT offset; // unused variable ++ //UCHAR j; // unused variable + + if (wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; +@@ -2267,6 +1789,7 @@ BOOLEAN MacTableDeleteEntry( + NdisAcquireSpinLock(&pAd->MacTabLock); + + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); ++ //pEntry = pAd->MacTab.Hash[HashIdx]; + pEntry = &pAd->MacTab.Content[wcid]; + + if (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsApCli || pEntry->ValidAsWDS || pEntry->ValidAsMesh +@@ -2276,7 +1799,7 @@ BOOLEAN MacTableDeleteEntry( + { + + // Delete this entry from ASIC on-chip WCID Table +- RT28XX_STA_ENTRY_MAC_RESET(pAd, wcid); ++ RTMP_STA_ENTRY_MAC_RESET(pAd, wcid); + + // free resources of BA + BASessionTearDownALL(pAd, pEntry->Aid); +@@ -2308,7 +1831,7 @@ BOOLEAN MacTableDeleteEntry( + // not found !!! + ASSERT(pProbeEntry != NULL); + +- RT28XX_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); ++ RTMP_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); + + + if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) +@@ -2324,7 +1847,7 @@ BOOLEAN MacTableDeleteEntry( + } + else + { +- printk("\n%s: Impossible Wcid = %d !!!!!\n", __func__, wcid); ++ DBGPRINT(RT_DEBUG_OFF, ("\n%s: Impossible Wcid = %d !!!!!\n", __func__, wcid)); + } + } + +@@ -2334,13 +1857,8 @@ BOOLEAN MacTableDeleteEntry( + if (pAd->MacTab.Size == 0) + { + pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0; +-#ifdef RT2860 +- AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/); +-#else +- // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +- // Set MAC register value according operation mode +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_UPDATE_PROTECT, NULL, 0); +-#endif ++ //AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/); ++ RTMP_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet + } + + return TRUE; +@@ -2362,24 +1880,25 @@ VOID MacTableReset( + DBGPRINT(RT_DEBUG_TRACE, ("MacTableReset\n")); + //NdisAcquireSpinLock(&pAd->MacTabLock); + ++ + for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) + { ++ ++ + // free resources of BA + BASessionTearDownALL(pAd, i); + + pAd->MacTab.Content[i].ValidAsCLI = FALSE; + +- +- +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + NdisZeroMemory(pAd->MacTab.Content[i].Addr, 6); +- RT28XX_STA_ENTRY_MAC_RESET(pAd, i); +-#endif // RT2870 // ++ RTMP_STA_ENTRY_MAC_RESET(pAd, i); ++#endif // RTMP_MAC_USB // + + //AsicDelWcidTab(pAd, i); + } +@@ -2544,7 +2063,7 @@ BOOLEAN RTMPCheckEtherType( + RTMP_SET_PACKET_SPECIFIC(pPacket, 0); + + // get Ethernet protocol field +- TypeLen = (pSrcBuf[12] << 8) + pSrcBuf[13]; ++ TypeLen = (pSrcBuf[12] << 8) | pSrcBuf[13]; + + pSrcBuf += LENGTH_802_3; // Skip the Ethernet Header. + +@@ -2558,7 +2077,7 @@ BOOLEAN RTMPCheckEtherType( + */ + if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA && pSrcBuf[2] == 0x03) + { +- Sniff2BytesFromNdisBuffer(pSrcBuf, 6, &Byte0, &Byte1); ++ Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 6, &Byte0, &Byte1); + RTMP_SET_PACKET_LLCSNAP(pPacket, 1); + TypeLen = (USHORT)((Byte0 << 8) + Byte1); + pSrcBuf += 8; // Skip this LLC/SNAP header +@@ -2584,7 +2103,7 @@ BOOLEAN RTMPCheckEtherType( + Frame Check Sequence (4-bytes) */ + + RTMP_SET_PACKET_VLAN(pPacket, 1); +- Sniff2BytesFromNdisBuffer(pSrcBuf, 2, &Byte0, &Byte1); ++ Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 2, &Byte0, &Byte1); + TypeLen = (USHORT)((Byte0 << 8) + Byte1); + + pSrcBuf += 4; // Skip the VLAN Header. +@@ -2600,8 +2119,8 @@ BOOLEAN RTMPCheckEtherType( + ASSERT((pktLen > 34)); // 14 for ethernet header, 20 for IP header + + pSrcBuf += 20; // Skip the IP header +- srcPort = OS_NTOHS(*((UINT16 *)pSrcBuf)); +- dstPort = OS_NTOHS(*((UINT16 *)(pSrcBuf +2))); ++ srcPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf))); ++ dstPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf+2))); + + if ((srcPort==0x44 && dstPort==0x43) || (srcPort==0x43 && dstPort==0x44)) + { //It's a BOOTP/DHCP packet +@@ -2692,7 +2211,7 @@ VOID Indicate_Legacy_Packet( + + STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + if (pAd->CommonCfg.bDisableReordering == 0) + { + PBA_REC_ENTRY pBAEntry; +@@ -2701,7 +2220,7 @@ VOID Indicate_Legacy_Packet( + UCHAR TID = pRxBlk->pRxWI->TID; + USHORT Idx; + +-#define REORDERING_PACKET_TIMEOUT ((100 * HZ)/1000) // system ticks -- 100 ms ++#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms + + if (Wcid < MAX_LEN_OF_MAC_TABLE) + { +@@ -2715,14 +2234,15 @@ VOID Indicate_Legacy_Packet( + RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT))) + ) + { +- printk("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", pRxBlk->Flags, pRxBlk->pRxWI->TID, pRxBlk->RxD.AMPDU); ++ DBGPRINT(RT_DEBUG_OFF, ("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", ++ pRxBlk->Flags, pRxBlk->pRxWI->TID, pRxBlk->RxD.AMPDU)); + hex_dump("Dump the legacy Packet:", GET_OS_PKT_DATAPTR(pRxBlk->pRxPacket), 64); + ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32); + } + } + } + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); + +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +new file mode 100644 +index 0000000..d808e7d +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -0,0 +1,1153 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++ ++/* ++ All functions in this file must be PCI-depended, or you should out your function ++ in other files. ++ ++*/ ++#include "../rt_config.h" ++ ++ ++USHORT RtmpPCI_WriteTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT *FreeNumber) ++{ ++ ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; ++ ++ // ++ // get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; ++ TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; ++ pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ ++ // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) ++ { ++ //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ hwHeaderLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ } ++ else ++ { ++ //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ } ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); ++ ++ pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; ++ pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; ++ ++ // ++ // build Tx Descriptor ++ // ++ ++ pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ NdisZeroMemory(pTxD, TXD_SIZE); ++ ++ pTxD->SDPtr0 = BufBasePaLow; ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); ++ pTxD->SDLen1 = pTxBlk->SrcBufLen; ++ pTxD->LastSec0 = 0; ++ pTxD->LastSec1 = (bIsLast) ? 1 : 0; ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); ++ ++ RetTxIdx = TxIdx; ++ // ++ // Update Tx index ++ // ++ INC_RING_INDEX(TxIdx, TX_RING_SIZE); ++ pTxRing->TxCpuIdx = TxIdx; ++ ++ *FreeNumber -= 1; ++ ++ return RetTxIdx; ++} ++ ++ ++USHORT RtmpPCI_WriteSingleTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT *FreeNumber) ++{ ++ ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; ++ ++ // ++ // get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; ++ TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; ++ pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ ++ // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); ++ ++ pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; ++ pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; ++ ++ // ++ // build Tx Descriptor ++ // ++ pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ NdisZeroMemory(pTxD, TXD_SIZE); ++ ++ pTxD->SDPtr0 = BufBasePaLow; ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; ++ pTxD->SDLen1 = pTxBlk->SrcBufLen; ++ pTxD->LastSec0 = 0; ++ pTxD->LastSec1 = (bIsLast) ? 1 : 0; ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); ++ ++ RetTxIdx = TxIdx; ++ // ++ // Update Tx index ++ // ++ INC_RING_INDEX(TxIdx, TX_RING_SIZE); ++ pTxRing->TxCpuIdx = TxIdx; ++ ++ *FreeNumber -= 1; ++ ++ return RetTxIdx; ++} ++ ++ ++USHORT RtmpPCI_WriteMultiTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN UCHAR frameNum, ++ OUT USHORT *FreeNumber) ++{ ++ BOOLEAN bIsLast; ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHdrLen; ++ UINT32 firstDMALen; ++ ++ bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); ++ ++ // ++ // get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; ++ TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; ++ pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ ++ if (frameNum == 0) ++ { ++ // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; ++ hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; ++ else ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; ++ } ++ else ++ { ++ firstDMALen = pTxBlk->MpduHeaderLen; ++ } ++ ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); ++ ++ pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; ++ pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; ++ ++ // ++ // build Tx Descriptor ++ // ++ pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ NdisZeroMemory(pTxD, TXD_SIZE); ++ ++ pTxD->SDPtr0 = BufBasePaLow; ++ pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; ++ pTxD->SDLen1 = pTxBlk->SrcBufLen; ++ pTxD->LastSec0 = 0; ++ pTxD->LastSec1 = (bIsLast) ? 1 : 0; ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); ++ ++ ++ RetTxIdx = TxIdx; ++ // ++ // Update Tx index ++ // ++ INC_RING_INDEX(TxIdx, TX_RING_SIZE); ++ pTxRing->TxCpuIdx = TxIdx; ++ ++ *FreeNumber -= 1; ++ ++ return RetTxIdx; ++ ++} ++ ++ ++VOID RtmpPCI_FinalWriteTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN USHORT totalMPDUSize, ++ IN USHORT FirstTxIdx) ++{ ++ ++ PTXWI_STRUC pTxWI; ++ PRTMP_TX_RING pTxRing; ++ ++ // ++ // get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; ++ pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; ++ pTxWI->MPDUtotalByteCount = totalMPDUSize; ++ ++} ++ ++ ++VOID RtmpPCIDataLastTxIdx( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN USHORT LastTxIdx) ++{ ++ PTXD_STRUC pTxD; ++ PRTMP_TX_RING pTxRing; ++ ++ // ++ // get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[QueIdx]; ++ ++ // ++ // build Tx Descriptor ++ // ++ pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; ++ ++ pTxD->LastSec1 = 1; ++ ++ ++} ++ ++ ++USHORT RtmpPCI_WriteFragTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN UCHAR fragNum, ++ OUT USHORT *FreeNumber) ++{ ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; ++ UINT32 firstDMALen; ++ ++ // ++ // Get Tx Ring Resource ++ // ++ pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; ++ TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; ++ pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ ++ // ++ // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ // ++ //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); ++ ++ ++ // ++ // Build Tx Descriptor ++ // ++ pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ NdisZeroMemory(pTxD, TXD_SIZE); ++ ++ if (fragNum == pTxBlk->TotalFragNum) ++ { ++ pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; ++ pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; ++ } ++ ++ pTxD->SDPtr0 = BufBasePaLow; ++ pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); ++ pTxD->SDLen1 = pTxBlk->SrcBufLen; ++ pTxD->LastSec0 = 0; ++ pTxD->LastSec1 = 1; ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); ++ ++ ++ RetTxIdx = TxIdx; ++ pTxBlk->Priv += pTxBlk->SrcBufLen; ++ ++ // ++ // Update Tx index ++ // ++ INC_RING_INDEX(TxIdx, TX_RING_SIZE); ++ pTxRing->TxCpuIdx = TxIdx; ++ ++ *FreeNumber -= 1; ++ ++ return RetTxIdx; ++ ++} ++ ++ ++/* ++ Must be run in Interrupt context ++ This function handle PCI specific TxDesc and cpu index update and kick the packet out. ++ */ ++int RtmpPCIMgmtKickOut( ++ IN RTMP_ADAPTER *pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, ++ IN UINT SrcBufLen) ++{ ++ PTXD_STRUC pTxD; ++ ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ ++ pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ ++ pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket; ++ pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL; ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_MGMT); ++ pTxD->LastSec0 = 1; ++ pTxD->LastSec1 = 1; ++ pTxD->DMADONE = 0; ++ pTxD->SDLen1 = 0; ++ pTxD->SDPtr0 = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); ++ pTxD->SDLen0 = SrcBufLen; ++ ++ ++//================================================================== ++/* DBGPRINT_RAW(RT_DEBUG_TRACE, ("MLMEHardTransmit\n")); ++ for (i = 0; i < (TXWI_SIZE+24); i++) ++ { ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("%x:", *(pSrcBufVA+i))); ++ if ( i%4 == 3) ++ DBGPRINT_RAW(RT_DEBUG_TRACE, (" :: ")); ++ if ( i%16 == 15) ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n ")); ++ } ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n "));*/ ++//======================================================================= ++ ++ pAd->RalinkCounters.KickTxCount++; ++ pAd->RalinkCounters.OneSecTxDoneCount++; ++ ++ // Increase TX_CTX_IDX, but write to register later. ++ INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); ++ ++ RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); ++ ++ return 0; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound ++ ++ Arguments: ++ pRxD Pointer to the Rx descriptor ++ ++ Return Value: ++ NDIS_STATUS_SUCCESS No err ++ NDIS_STATUS_FAILURE Error ++ ++ Note: ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RTMPCheckRxError( ++ IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, ++ IN PRT28XX_RXD_STRUC pRxD) ++{ ++ PCIPHER_KEY pWpaKey; ++ INT dBm; ++ ++ // Phy errors & CRC errors ++ if (/*(pRxD->PhyErr) ||*/ (pRxD->Crc)) ++ { ++ // Check RSSI for Noise Hist statistic collection. ++ dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; ++ if (dBm <= -87) ++ pAd->StaCfg.RPIDensity[0] += 1; ++ else if (dBm <= -82) ++ pAd->StaCfg.RPIDensity[1] += 1; ++ else if (dBm <= -77) ++ pAd->StaCfg.RPIDensity[2] += 1; ++ else if (dBm <= -72) ++ pAd->StaCfg.RPIDensity[3] += 1; ++ else if (dBm <= -67) ++ pAd->StaCfg.RPIDensity[4] += 1; ++ else if (dBm <= -62) ++ pAd->StaCfg.RPIDensity[5] += 1; ++ else if (dBm <= -57) ++ pAd->StaCfg.RPIDensity[6] += 1; ++ else if (dBm > -57) ++ pAd->StaCfg.RPIDensity[7] += 1; ++ ++ return(NDIS_STATUS_FAILURE); ++ } ++ ++ // Add Rx size to channel load counter, we should ignore error counts ++ pAd->StaCfg.CLBusyBytes += (pRxD->SDL0 + 14); ++ ++ // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics ++ if (pHeader != NULL) ++ { ++ if (pHeader->FC.ToDs) ++ { ++ return(NDIS_STATUS_FAILURE); ++ } ++ } ++ ++ // Drop not U2M frames, cant's drop here because we will drop beacon in this case ++ // I am kind of doubting the U2M bit operation ++ // if (pRxD->U2M == 0) ++ // return(NDIS_STATUS_FAILURE); ++ ++ // drop decyption fail frame ++ if (pRxD->CipherErr) ++ { ++ if (pRxD->CipherErr == 2) ++ {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV ok but MICErr "));} ++ else if (pRxD->CipherErr == 1) ++ {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV Err "));} ++ else if (pRxD->CipherErr == 3) ++ DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: Key not valid ")); ++ ++ if (((pRxD->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE,(" %d (len=%d, Mcast=%d, MyBss=%d, Wcid=%d, KeyId=%d)\n", ++ pRxD->CipherErr, ++ pRxD->SDL0, ++ pRxD->Mcast | pRxD->Bcast, ++ pRxD->MyBss, ++ pRxWI->WirelessCliID, ++// CipherName[pRxD->CipherAlg], ++ pRxWI->KeyIndex)); ++ ++ // ++ // MIC Error ++ // ++ if (pRxD->CipherErr == 2) ++ { ++ pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; ++ if (pAd->StaCfg.WpaSupplicantUP) ++ WpaSendMicFailureToWpaSupplicant(pAd, ++ (pWpaKey->Type == PAIRWISEKEY) ? TRUE:FALSE); ++ else ++ RTMPReportMicError(pAd, pWpaKey); ++ ++ if (((pRxD->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ ++ DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); ++ } ++ ++ if (pHeader == NULL) ++ return(NDIS_STATUS_SUCCESS); ++ /*if ((pRxD->CipherAlg == CIPHER_AES) && ++ (pHeader->Sequence == pAd->FragFrame.Sequence)) ++ { ++ // ++ // Acceptable since the First FragFrame no CipherErr problem. ++ // ++ return(NDIS_STATUS_SUCCESS); ++ }*/ ++ ++ return(NDIS_STATUS_FAILURE); ++ } ++ ++ return(NDIS_STATUS_SUCCESS); ++} ++ ++ ++BOOLEAN RTMPFreeTXDUponTxDmaDone( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx) ++{ ++ PRTMP_TX_RING pTxRing; ++ PTXD_STRUC pTxD; ++ PNDIS_PACKET pPacket; ++ UCHAR FREE = 0; ++ TXD_STRUC TxD, *pOriTxD; ++ //ULONG IrqFlags; ++ BOOLEAN bReschedule = FALSE; ++ ++ ++ ASSERT(QueIdx < NUM_OF_TX_RING); ++ pTxRing = &pAd->TxRing[QueIdx]; ++ ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, &pTxRing->TxDmaIdx); ++ while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) ++ { ++// RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ ++ // static rate also need NICUpdateFifoStaCounters() function. ++ //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) ++ NICUpdateFifoStaCounters(pAd); ++ ++ /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ ++ FREE++; ++ pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); ++ pOriTxD = pTxD; ++ NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); ++ pTxD = &TxD; ++ ++ pTxD->DMADONE = 0; ++ ++ ++ { ++ pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket; ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ //Always assign pNdisPacket as NULL after clear ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket = NULL; ++ ++ pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket; ++ ++ ASSERT(pPacket == NULL); ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ //Always assign pNextNdisPacket as NULL after clear ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; ++ } ++ ++ pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); ++ pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++; ++ INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); ++ /* get tx_tdx_idx again */ ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx); ++ NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); ++ ++// RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ } ++ ++ ++ return bReschedule; ++ ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Process TX Rings DMA Done interrupt, running in DPC level ++ ++ Arguments: ++ Adapter Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ======================================================================== ++*/ ++BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( ++ IN PRTMP_ADAPTER pAd, ++ IN INT_SOURCE_CSR_STRUC TxRingBitmap) ++{ ++// UCHAR Count = 0; ++ unsigned long IrqFlags; ++ BOOLEAN bReschedule = FALSE; ++ ++ // Make sure Tx ring resource won't be used by other threads ++ //NdisAcquireSpinLock(&pAd->TxRingLock); ++ ++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ ++ if (TxRingBitmap.field.Ac0DmaDone) ++ bReschedule = RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BE); ++ ++ if (TxRingBitmap.field.HccaDmaDone) ++ bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_HCCA); ++ ++ if (TxRingBitmap.field.Ac3DmaDone) ++ bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VO); ++ ++ if (TxRingBitmap.field.Ac2DmaDone) ++ bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VI); ++ ++ if (TxRingBitmap.field.Ac1DmaDone) ++ bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BK); ++ ++ // Make sure to release Tx ring resource ++ //NdisReleaseSpinLock(&pAd->TxRingLock); ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ ++ // Dequeue outgoing frames from TxSwQueue[] and process it ++ RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++ ++ return bReschedule; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Process MGMT ring DMA done interrupt, running in DPC level ++ ++ Arguments: ++ pAd Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPHandleMgmtRingDmaDoneInterrupt( ++ IN PRTMP_ADAPTER pAd) ++{ ++ PTXD_STRUC pTxD; ++ PNDIS_PACKET pPacket; ++// int i; ++ UCHAR FREE = 0; ++ PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; ++ ++ NdisAcquireSpinLock(&pAd->MgmtRingLock); ++ ++ RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pMgmtRing->TxDmaIdx); ++ while (pMgmtRing->TxSwFreeIdx!= pMgmtRing->TxDmaIdx) ++ { ++ FREE++; ++ pTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa); ++ pTxD->DMADONE = 0; ++ pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket; ++ ++ ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket = NULL; ++ ++ pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket; ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket = NULL; ++ INC_RING_INDEX(pMgmtRing->TxSwFreeIdx, MGMT_RING_SIZE); ++ ++ } ++ NdisReleaseSpinLock(&pAd->MgmtRingLock); ++ ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Arguments: ++ Adapter Pointer to our adapter. Dequeue all power safe delayed braodcast frames after beacon. ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ======================================================================== ++*/ ++VOID RTMPHandleTBTTInterrupt( ++ IN PRTMP_ADAPTER pAd) ++{ ++ { ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ { ++ } ++ } ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Arguments: ++ pAd Pointer to our adapter. Rewrite beacon content before next send-out. ++ ++ IRQL = DISPATCH_LEVEL ++ ++ ======================================================================== ++*/ ++VOID RTMPHandlePreTBTTInterrupt( ++ IN PRTMP_ADAPTER pAd) ++{ ++ { ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPHandlePreTBTTInterrupt...\n")); ++ } ++ } ++ ++ ++} ++ ++VOID RTMPHandleRxCoherentInterrupt( ++ IN PRTMP_ADAPTER pAd) ++{ ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ ++ if (pAd == NULL) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("====> pAd is NULL, return.\n")); ++ return; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPHandleRxCoherentInterrupt \n")); ++ ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG , &GloCfg.word); ++ ++ GloCfg.field.EnTXWriteBackDDONE = 0; ++ GloCfg.field.EnableRxDMA = 0; ++ GloCfg.field.EnableTxDMA = 0; ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); ++ ++ RTMPRingCleanUp(pAd, QID_AC_BE); ++ RTMPRingCleanUp(pAd, QID_AC_BK); ++ RTMPRingCleanUp(pAd, QID_AC_VI); ++ RTMPRingCleanUp(pAd, QID_AC_VO); ++ RTMPRingCleanUp(pAd, QID_HCCA); ++ RTMPRingCleanUp(pAd, QID_MGMT); ++ RTMPRingCleanUp(pAd, QID_RX); ++ ++ RTMPEnableRxTx(pAd); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); ++} ++ ++PNDIS_PACKET GetPacketFromRxRing( ++ IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN *pbReschedule, ++ IN OUT UINT32 *pRxPending) ++{ ++ PRXD_STRUC pRxD; ++ PNDIS_PACKET pRxPacket = NULL; ++ PNDIS_PACKET pNewPacket; ++ PVOID AllocVa; ++ NDIS_PHYSICAL_ADDRESS AllocPa; ++ BOOLEAN bReschedule = FALSE; ++ RTMP_DMACB *pRxCell; ++ ++ RTMP_SEM_LOCK(&pAd->RxRingLock); ++ ++ if (*pRxPending == 0) ++ { ++ // Get how may packets had been received ++ RTMP_IO_READ32(pAd, RX_DRX_IDX , &pAd->RxRing.RxDmaIdx); ++ ++ if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) ++ { ++ // no more rx packets ++ bReschedule = FALSE; ++ goto done; ++ } ++ ++ // get rx pending count ++ if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx) ++ *pRxPending = pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; ++ else ++ *pRxPending = pAd->RxRing.RxDmaIdx + RX_RING_SIZE - pAd->RxRing.RxSwReadIdx; ++ ++ } ++ ++ pRxCell = &pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx]; ++ ++ // Point to Rx indexed rx ring descriptor ++ pRxD = (PRXD_STRUC) pRxCell->AllocVa; ++ ++ if (pRxD->DDONE == 0) ++ { ++ *pRxPending = 0; ++ // DMAIndx had done but DDONE bit not ready ++ bReschedule = TRUE; ++ goto done; ++ } ++ ++ ++ // return rx descriptor ++ NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE); ++ ++ pNewPacket = RTMP_AllocateRxPacketBuffer(pAd, RX_BUFFER_AGGRESIZE, FALSE, &AllocVa, &AllocPa); ++ ++ if (pNewPacket) ++ { ++ // unmap the rx buffer ++ PCI_UNMAP_SINGLE(pAd, pRxCell->DmaBuf.AllocPa, ++ pRxCell->DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); ++ pRxPacket = pRxCell->pNdisPacket; ++ ++ pRxCell->DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; ++ pRxCell->pNdisPacket = (PNDIS_PACKET) pNewPacket; ++ pRxCell->DmaBuf.AllocVa = AllocVa; ++ pRxCell->DmaBuf.AllocPa = AllocPa; ++ /* update SDP0 to new buffer of rx packet */ ++ pRxD->SDP0 = AllocPa; ++ } ++ else ++ { ++ //DBGPRINT(RT_DEBUG_TRACE,("No Rx Buffer\n")); ++ pRxPacket = NULL; ++ bReschedule = TRUE; ++ } ++ ++ pRxD->DDONE = 0; ++ ++ // had handled one rx packet ++ *pRxPending = *pRxPending - 1; ++ ++ // update rx descriptor and kick rx ++ INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE); ++ ++ pAd->RxRing.RxCpuIdx = (pAd->RxRing.RxSwReadIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxSwReadIdx-1); ++ RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); ++ ++done: ++ RTMP_SEM_UNLOCK(&pAd->RxRingLock); ++ *pbReschedule = bReschedule; ++ return pRxPacket; ++} ++ ++ ++NDIS_STATUS MlmeHardTransmitTxRing( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket) ++{ ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PTXD_STRUC pTxD; ++ PHEADER_802_11 pHeader_802_11; ++ BOOLEAN bAckRequired, bInsertTimestamp; ++ ULONG SrcBufPA; ++ //UCHAR TxBufIdx; ++ UCHAR MlmeRate; ++ ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; ++ PTXWI_STRUC pFirstTxWI; ++ //ULONG i; ++ //HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. ++ ULONG FreeNum; ++ MAC_TABLE_ENTRY *pMacEntry = NULL; ++ ++ ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); ++ ++ ++ if (pSrcBufVA == NULL) ++ { ++ // The buffer shouldn't be NULL ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ // Make sure MGMT ring resource won't be used by other threads ++ //NdisAcquireSpinLock(&pAd->TxRingLock); ++ ++ FreeNum = GET_TXRING_FREENO(pAd, QueIdx); ++ ++ if (FreeNum == 0) ++ { ++ //NdisReleaseSpinLock(&pAd->TxRingLock); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; ++ ++ pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; ++ ++ if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) ++ { ++ DBGPRINT(RT_DEBUG_OFF, ("MlmeHardTransmit Error\n")); ++ //NdisReleaseSpinLock(&pAd->TxRingLock); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ { ++ // outgoing frame always wakeup PHY to prevent frame lost ++ // if (pAd->StaCfg.Psm == PWR_SAVE) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ AsicForceWakeup(pAd, TRUE); ++ } ++ pFirstTxWI =(PTXWI_STRUC)pSrcBufVA; ++ ++ pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE); ++ if (pHeader_802_11->Addr1[0] & 0x01) ++ { ++ MlmeRate = pAd->CommonCfg.BasicMlmeRate; ++ } ++ else ++ { ++ MlmeRate = pAd->CommonCfg.MlmeRate; ++ } ++ ++ if ((pHeader_802_11->FC.Type == BTYPE_DATA) && ++ (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) ++ { ++ pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); ++ } ++ ++ // Verify Mlme rate for a / g bands. ++ if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band ++ MlmeRate = RATE_6; ++ ++ // ++ // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) ++ // Snice it's been set to 0 while on MgtMacHeaderInit ++ // By the way this will cause frame to be send on PWR_SAVE failed. ++ // ++ // ++ // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame ++ // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD ++ if (pHeader_802_11->FC.Type != BTYPE_DATA) ++ { ++ if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) || !(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) ++ { ++ pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; ++ } ++ else ++ { ++ pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; ++ } ++ } ++ ++ bInsertTimestamp = FALSE; ++ if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL ++ { ++ bAckRequired = FALSE; ++ } ++ else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) ++ { ++ if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST ++ { ++ bAckRequired = FALSE; ++ pHeader_802_11->Duration = 0; ++ } ++ else ++ { ++ bAckRequired = TRUE; ++ pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); ++ if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) ++ { ++ bInsertTimestamp = TRUE; ++ } ++ } ++ } ++ pHeader_802_11->Sequence = pAd->Sequence++; ++ if (pAd->Sequence > 0xfff) ++ pAd->Sequence = 0; ++ // Before radar detection done, mgmt frame can not be sent but probe req ++ // Because we need to use probe req to trigger driver to send probe req in passive scan ++ if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) ++ && (pAd->CommonCfg.bIEEE80211H == 1) ++ && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++ //NdisReleaseSpinLock(&pAd->TxRingLock); ++ return (NDIS_STATUS_FAILURE); ++ } ++ ++ // ++ // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET ++ // should always has only one ohysical buffer, and the whole frame size equals ++ // to the first scatter buffer size ++ // ++ ++ // Initialize TX Descriptor ++ // For inter-frame gap, the number is for this frame and next frame ++ // For MLME rate, we will fix as 2Mb to match other vendor's implement ++// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; ++ ++// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. ++ // Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. ++ if (pMacEntry == NULL) ++ { ++ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, ++ 0, RESERVED_WCID, (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ } ++ else ++ { ++ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, ++ bInsertTimestamp, FALSE, bAckRequired, FALSE, ++ 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), ++ pMacEntry->MaxHTPhyMode.field.MCS, 0, ++ (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, ++ IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); ++ } ++ ++ pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket; ++ pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL; ++// pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; ++ SrcBufPA = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); ++ ++ ++ RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_EDCA); ++ pTxD->LastSec0 = 1; ++ pTxD->LastSec1 = 1; ++ pTxD->SDLen0 = SrcBufLen; ++ pTxD->SDLen1 = 0; ++ pTxD->SDPtr0 = SrcBufPA; ++ pTxD->DMADONE = 0; ++ ++ ++ pAd->RalinkCounters.KickTxCount++; ++ pAd->RalinkCounters.OneSecTxDoneCount++; ++ ++ // Increase TX_CTX_IDX, but write to register later. ++ INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); ++ ++ RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx*0x10, pAd->TxRing[QueIdx].TxCpuIdx); ++ ++ // Make sure to release MGMT ring resource ++// NdisReleaseSpinLock(&pAd->TxRingLock); ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++NDIS_STATUS MlmeDataHardTransmit( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket) ++{ ++ if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) ++ ) ++ { ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calculates the duration which is required to transmit out frames ++ with given size and specified rate. ++ ++ Arguments: ++ pTxD Pointer to transmit descriptor ++ Ack Setting for Ack requirement bit ++ Fragment Setting for Fragment bit ++ RetryMode Setting for retry mode ++ Ifs Setting for IFS gap ++ Rate Setting for transmit rate ++ Service Setting for service ++ Length Frame length ++ TxPreamble Short or Long preamble when using CCK rates ++ QueIdx - 0-3, according to 802.11e/d4.4 June/2003 ++ ++ Return Value: ++ None ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ======================================================================== ++*/ ++VOID RTMPWriteTxDescriptor( ++ IN PRTMP_ADAPTER pAd, ++ IN PTXD_STRUC pTxD, ++ IN BOOLEAN bWIV, ++ IN UCHAR QueueSEL) ++{ ++ // ++ // Always use Long preamble before verifiation short preamble functionality works well. ++ // Todo: remove the following line if short preamble functionality works ++ // ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); ++ ++ pTxD->WIV = (bWIV) ? 1: 0; ++ pTxD->QSEL= (QueueSEL); ++ //RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan ++ //pTxD->QSEL= FIFO_EDCA; ++ if (pAd->bGenOneHCCA == TRUE) ++ pTxD->QSEL= FIFO_HCCA; ++ pTxD->DMADONE = 0; ++} +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +new file mode 100644 +index 0000000..bd6f9d8 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -0,0 +1,968 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++/* ++ All functions in this file must be USB-depended, or you should out your function ++ in other files. ++ ++*/ ++ ++#ifdef RTMP_MAC_USB ++ ++ ++#include "../rt_config.h" ++ ++ ++/* ++ We can do copy the frame into pTxContext when match following conditions. ++ => ++ => ++ => ++*/ ++static inline NDIS_STATUS RtmpUSBCanDoWrite( ++ IN RTMP_ADAPTER *pAd, ++ IN UCHAR QueIdx, ++ IN HT_TX_CONTEXT *pHTTXContext) ++{ ++ NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES; ++ ++ if (((pHTTXContext->CurWritePosition) < pHTTXContext->NextBulkOutPosition) && (pHTTXContext->CurWritePosition + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c1!\n")); ++ RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); ++ } ++ else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < LOCAL_TXBUF_SIZE)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c2!\n")); ++ RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); ++ } ++ else if (pHTTXContext->bCurWriting == TRUE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c3!\n")); ++ } ++ else ++ { ++ canWrite = NDIS_STATUS_SUCCESS; ++ } ++ ++ ++ return canWrite; ++} ++ ++ ++USHORT RtmpUSB_WriteSubTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT *FreeNumber) ++{ ++ ++ // Dummy function. Should be removed in the future. ++ return 0; ++ ++} ++ ++USHORT RtmpUSB_WriteFragTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN UCHAR fragNum, ++ OUT USHORT *FreeNumber) ++{ ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket = NULL; ++ UCHAR QueIdx; ++ NDIS_STATUS Status; ++ unsigned long IrqFlags; ++ UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ BOOLEAN TxQLastRound = FALSE; ++ ++ // ++ // get Tx Ring Resource & Dma Buffer address ++ // ++ QueIdx = pTxBlk->QueIdx; ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ fillOffset = pHTTXContext->CurWritePosition; ++ ++ if(fragNum == 0) ++ { ++ // Check if we have enough space for this bulk-out batch. ++ Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); ++ if (Status == NDIS_STATUS_SUCCESS) ++ { ++ pHTTXContext->bCurWriting = TRUE; ++ ++ // Reserve space for 8 bytes padding. ++ if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) ++ { ++ pHTTXContext->ENextBulkOutPosition += 8; ++ pHTTXContext->CurWritePosition += 8; ++ fillOffset += 8; ++ } ++ pTxBlk->Priv = 0; ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); ++ return(Status); ++ } ++ } ++ else ++ { ++ // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. ++ Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); ++ if (Status == NDIS_STATUS_SUCCESS) ++ { ++ fillOffset += pTxBlk->Priv; ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); ++ return(Status); ++ } ++ } ++ ++ NdisZeroMemory((PUCHAR)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); ++ pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); ++ pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ ++ pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ ++ // copy TXWI + WLAN Header + LLC into DMA Header Buffer ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ // Build our URB for USBD ++ DMAHdrLen = TXWI_SIZE + hwHdrLen; ++ USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ USBDMApktLen += padding; ++ ++ pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen); ++ ++ // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ ++ if (fragNum == pTxBlk->TotalFragNum) ++ { ++ pTxInfo->USBDMATxburst = 0; ++ if ((pHTTXContext->CurWritePosition + pTxBlk->Priv + 3906)> MAX_TXBULK_LIMIT) ++ { ++ pTxInfo->SwUseLastRound = 1; ++ TxQLastRound = TRUE; ++ } ++ } ++ else ++ { ++ pTxInfo->USBDMATxburst = 1; ++ } ++ ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); ++ ++ // Zero the last padding. ++ pWirelessPacket += pTxBlk->SrcBufLen; ++ NdisZeroMemory(pWirelessPacket, padding + 8); ++ ++ if (fragNum == pTxBlk->TotalFragNum) ++ { ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ // Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame. ++ pHTTXContext->CurWritePosition += pTxBlk->Priv; ++ if (TxQLastRound == TRUE) ++ pHTTXContext->CurWritePosition = 8; ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ ++ ++ // Finally, set bCurWriting as FALSE ++ pHTTXContext->bCurWriting = FALSE; ++ ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ // succeed and release the skb buffer ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); ++ } ++ ++ ++ return(Status); ++ ++} ++ ++ ++USHORT RtmpUSB_WriteSingleTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT *FreeNumber) ++{ ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket; ++ UCHAR QueIdx; ++ unsigned long IrqFlags; ++ NDIS_STATUS Status; ++ UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ BOOLEAN bTxQLastRound = FALSE; ++ ++ // For USB, didn't need PCI_MAP_SINGLE() ++ //SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE); ++ ++ ++ // ++ // get Tx Ring Resource & Dma Buffer address ++ // ++ QueIdx = pTxBlk->QueIdx; ++ ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ fillOffset = pHTTXContext->CurWritePosition; ++ ++ ++ ++ // Check ring full. ++ Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); ++ if(Status == NDIS_STATUS_SUCCESS) ++ { ++ pHTTXContext->bCurWriting = TRUE; ++ ++ pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); ++ pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ ++ // Reserve space for 8 bytes padding. ++ if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) ++ { ++ pHTTXContext->ENextBulkOutPosition += 8; ++ pHTTXContext->CurWritePosition += 8; ++ fillOffset += 8; ++ } ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ ++ pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ ++ // copy TXWI + WLAN Header + LLC into DMA Header Buffer ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ // Build our URB for USBD ++ DMAHdrLen = TXWI_SIZE + hwHdrLen; ++ USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ USBDMApktLen += padding; ++ ++ pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen); ++ ++ // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ ++ if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > MAX_TXBULK_LIMIT) ++ { ++ pTxInfo->SwUseLastRound = 1; ++ bTxQLastRound = TRUE; ++ } ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ ++ // We unlock it here to prevent the first 8 bytes maybe over-writed issue. ++ // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. ++ // 2. An interrupt break our routine and handle bulk-out complete. ++ // 3. In the bulk-out compllete, it need to do another bulk-out, ++ // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, ++ // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. ++ // 4. Interrupt complete. ++ // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. ++ // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. ++ // and the packet will wrong. ++ pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); ++ pWirelessPacket += pTxBlk->SrcBufLen; ++ NdisZeroMemory(pWirelessPacket, padding + 8); ++ ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ pHTTXContext->CurWritePosition += pTxBlk->Priv; ++ if (bTxQLastRound) ++ pHTTXContext->CurWritePosition = 8; ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ ++ pHTTXContext->bCurWriting = FALSE; ++ } ++ ++ ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ ++ // succeed and release the skb buffer ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); ++ ++ return(Status); ++ ++} ++ ++ ++USHORT RtmpUSB_WriteMultiTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN UCHAR frameNum, ++ OUT USHORT *FreeNumber) ++{ ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket = NULL; ++ UCHAR QueIdx; ++ NDIS_STATUS Status; ++ unsigned long IrqFlags; ++ //UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ ++ // ++ // get Tx Ring Resource & Dma Buffer address ++ // ++ QueIdx = pTxBlk->QueIdx; ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ if(frameNum == 0) ++ { ++ // Check if we have enough space for this bulk-out batch. ++ Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); ++ if (Status == NDIS_STATUS_SUCCESS) ++ { ++ pHTTXContext->bCurWriting = TRUE; ++ ++ pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); ++ pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ ++ ++ // Reserve space for 8 bytes padding. ++ if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) ++ { ++ ++ pHTTXContext->CurWritePosition += 8; ++ pHTTXContext->ENextBulkOutPosition += 8; ++ } ++ fillOffset = pHTTXContext->CurWritePosition; ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ ++ pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ ++ // ++ // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ // ++ if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; ++ hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; ++ else ++ //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ ++ // Update the pTxBlk->Priv. ++ pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; ++ ++ // pTxInfo->USBDMApktLen now just a temp value and will to correct latter. ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(pTxBlk->Priv), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ ++ // Copy it. ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->Priv); ++ pHTTXContext->CurWriteRealPos += pTxBlk->Priv; ++ pWirelessPacket += pTxBlk->Priv; ++ } ++ } ++ else ++ { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. ++ ++ Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); ++ if (Status == NDIS_STATUS_SUCCESS) ++ { ++ fillOffset = (pHTTXContext->CurWritePosition + pTxBlk->Priv); ++ pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ ++ //hwHdrLen = pTxBlk->MpduHeaderLen; ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->MpduHeaderLen); ++ pWirelessPacket += (pTxBlk->MpduHeaderLen); ++ pTxBlk->Priv += pTxBlk->MpduHeaderLen; ++ } ++ else ++ { // It should not happened now unless we are going to shutdown. ++ DBGPRINT(RT_DEBUG_ERROR, ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n")); ++ Status = NDIS_STATUS_FAILURE; ++ } ++ } ++ ++ ++ // We unlock it here to prevent the first 8 bytes maybe over-write issue. ++ // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. ++ // 2. An interrupt break our routine and handle bulk-out complete. ++ // 3. In the bulk-out compllete, it need to do another bulk-out, ++ // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, ++ // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. ++ // 4. Interrupt complete. ++ // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. ++ // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. ++ // and the packet will wrong. ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("WriteMultiTxResource: CWPos = %ld, NBOutPos = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition)); ++ goto done; ++ } ++ ++ // Copy the frame content into DMA buffer and update the pTxBlk->Priv ++ NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); ++ pWirelessPacket += pTxBlk->SrcBufLen; ++ pTxBlk->Priv += pTxBlk->SrcBufLen; ++ ++done: ++ // Release the skb buffer here ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); ++ ++ return(Status); ++ ++} ++ ++ ++VOID RtmpUSB_FinalWriteTxResource( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN USHORT totalMPDUSize, ++ IN USHORT TxIdx) ++{ ++ UCHAR QueIdx; ++ HT_TX_CONTEXT *pHTTXContext; ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ UINT32 USBDMApktLen, padding; ++ unsigned long IrqFlags; ++ PUCHAR pWirelessPacket; ++ ++ QueIdx = pTxBlk->QueIdx; ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++ if (pHTTXContext->bCurWriting == TRUE) ++ { ++ fillOffset = pHTTXContext->CurWritePosition; ++ if (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition)) ++ && (pHTTXContext->bCopySavePad == TRUE)) ++ pWirelessPacket = (PUCHAR)(&pHTTXContext->SavedPad[0]); ++ else ++ pWirelessPacket = (PUCHAR)(&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]); ++ ++ // ++ // Update TxInfo->USBDMApktLen , ++ // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding ++ // ++ pTxInfo = (PTXINFO_STRUC)(pWirelessPacket); ++ ++ // Calculate the bulk-out padding ++ USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE; ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ USBDMApktLen += padding; ++ ++ pTxInfo->USBDMATxPktLen = USBDMApktLen; ++ ++ // ++ // Update TXWI->MPDUtotalByteCount , ++ // the length = 802.11 header + payload_of_all_batch_frames ++ pTxWI= (PTXWI_STRUC)(pWirelessPacket + TXINFO_SIZE); ++ pTxWI->MPDUtotalByteCount = totalMPDUSize; ++ ++ // ++ // Update the pHTTXContext->CurWritePosition ++ // ++ pHTTXContext->CurWritePosition += (TXINFO_SIZE + USBDMApktLen); ++ if ((pHTTXContext->CurWritePosition + 3906)> MAX_TXBULK_LIMIT) ++ { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. ++ pHTTXContext->CurWritePosition = 8; ++ pTxInfo->SwUseLastRound = 1; ++ } ++ pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ ++ ++ // ++ // Zero the last padding. ++ // ++ pWirelessPacket = (&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset + pTxBlk->Priv]); ++ NdisZeroMemory(pWirelessPacket, padding + 8); ++ ++ // Finally, set bCurWriting as FALSE ++ pHTTXContext->bCurWriting = FALSE; ++ ++ } ++ else ++ { // It should not happened now unless we are going to shutdown. ++ DBGPRINT(RT_DEBUG_ERROR, ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n")); ++ } ++ ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ ++} ++ ++ ++VOID RtmpUSBDataLastTxIdx( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN USHORT TxIdx) ++{ ++ // DO nothing for USB. ++} ++ ++ ++/* ++ When can do bulk-out: ++ 1. TxSwFreeIdx < TX_RING_SIZE; ++ It means has at least one Ring entity is ready for bulk-out, kick it out. ++ 2. If TxSwFreeIdx == TX_RING_SIZE ++ Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out. ++ ++*/ ++VOID RtmpUSBDataKickOut( ++ IN PRTMP_ADAPTER pAd, ++ IN TX_BLK *pTxBlk, ++ IN UCHAR QueIdx) ++{ ++ RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); ++ RTUSBKickBulkOut(pAd); ++ ++} ++ ++ ++/* ++ Must be run in Interrupt context ++ This function handle RT2870 specific TxDesc and cpu index update and kick the packet out. ++ */ ++int RtmpUSBMgmtKickOut( ++ IN RTMP_ADAPTER *pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, ++ IN UINT SrcBufLen) ++{ ++ PTXINFO_STRUC pTxInfo; ++ ULONG BulkOutSize; ++ UCHAR padLen; ++ PUCHAR pDest; ++ ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ unsigned long IrqFlags; ++ ++ ++ pTxInfo = (PTXINFO_STRUC)(pSrcBufVA); ++ ++ // Build our URB for USBD ++ BulkOutSize = SrcBufLen; ++ BulkOutSize = (BulkOutSize + 3) & (~3); ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(BulkOutSize - TXINFO_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ ++ BulkOutSize += 4; // Always add 4 extra bytes at every packet. ++ ++ // If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again. ++ if ((BulkOutSize % pAd->BulkOutMaxPacketSize) == 0) ++ BulkOutSize += 4; ++ ++ padLen = BulkOutSize - SrcBufLen; ++ ASSERT((padLen <= RTMP_PKT_TAIL_PADDING)); ++ ++ // Now memzero all extra padding bytes. ++ pDest = (PUCHAR)(pSrcBufVA + SrcBufLen); ++ skb_put(GET_OS_PKT_TYPE(pPacket), padLen); ++ NdisZeroMemory(pDest, padLen); ++ ++ RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); ++ ++ pAd->MgmtRing.Cell[pAd->MgmtRing.TxCpuIdx].pNdisPacket = pPacket; ++ pMLMEContext->TransferBuffer = (PTX_BUFFER)(GET_OS_PKT_DATAPTR(pPacket)); ++ ++ // Length in TxInfo should be 8 less than bulkout size. ++ pMLMEContext->BulkOutSize = BulkOutSize; ++ pMLMEContext->InUse = TRUE; ++ pMLMEContext->bWaitingBulkOut = TRUE; ++ ++ ++ //for debug ++ //hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize)); ++ ++ //pAd->RalinkCounters.KickTxCount++; ++ //pAd->RalinkCounters.OneSecTxDoneCount++; ++ ++ //if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE) ++ // needKickOut = TRUE; ++ ++ // Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX ++ pAd->MgmtRing.TxSwFreeIdx--; ++ INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); ++ ++ RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); ++ ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); ++ //if (needKickOut) ++ RTUSBKickBulkOut(pAd); ++ ++ return 0; ++} ++ ++ ++VOID RtmpUSBNullFrameKickOut( ++ IN RTMP_ADAPTER *pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR *pNullFrame, ++ IN UINT32 frameLen) ++{ ++ if (pAd->NullContext.InUse == FALSE) ++ { ++ PTX_CONTEXT pNullContext; ++ PTXINFO_STRUC pTxInfo; ++ PTXWI_STRUC pTxWI; ++ PUCHAR pWirelessPkt; ++ ++ pNullContext = &(pAd->NullContext); ++ ++ // Set the in use bit ++ pNullContext->InUse = TRUE; ++ pWirelessPkt = (PUCHAR)&pNullContext->TransferBuffer->field.WirelessPacket[0]; ++ ++ RTMPZeroMemory(&pWirelessPkt[0], 100); ++ pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[0]; ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ pTxInfo->QSEL = FIFO_EDCA; ++ pTxWI = (PTXWI_STRUC)&pWirelessPkt[TXINFO_SIZE]; ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), ++ 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ ++ RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); ++ pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; ++ ++ // Fill out frame length information for global Bulk out arbitor ++ //pNullContext->BulkOutSize = TransferBufferLength; ++ DBGPRINT(RT_DEBUG_TRACE, ("SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[pAd->CommonCfg.TxRate])); ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); ++ ++ // Kick bulk out ++ RTUSBKickBulkOut(pAd); ++ } ++ ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Get a received packet. ++ ++Arguments: ++ pAd device control block ++ pSaveRxD receive descriptor information ++ *pbReschedule need reschedule flag ++ *pRxPending pending received packet flag ++ ++Return Value: ++ the recieved packet ++ ++Note: ++======================================================================== ++*/ ++PNDIS_PACKET GetPacketFromRxRing( ++ IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN *pbReschedule, ++ IN OUT UINT32 *pRxPending) ++{ ++ PRX_CONTEXT pRxContext; ++ PNDIS_PACKET pSkb; ++ PUCHAR pData; ++ ULONG ThisFrameLen; ++ ULONG RxBufferLength; ++ PRXWI_STRUC pRxWI; ++ ++ pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex]; ++ if ((pRxContext->Readable == FALSE) || (pRxContext->InUse == TRUE)) ++ return NULL; ++ ++ RxBufferLength = pRxContext->BulkInOffset - pAd->ReadPosition; ++ if (RxBufferLength < (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + sizeof(RXINFO_STRUC))) ++ { ++ goto label_null; ++ } ++ ++ pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */ ++ // The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding) ++ ThisFrameLen = *pData + (*(pData+1)<<8); ++ if (ThisFrameLen == 0) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("BIRIdx(%d): RXDMALen is zero.[%ld], BulkInBufLen = %ld)\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); ++ goto label_null; ++ } ++ if ((ThisFrameLen&0x3) != 0) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("BIRIdx(%d): RXDMALen not multiple of 4.[%ld], BulkInBufLen = %ld)\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); ++ goto label_null; ++ } ++ ++ if ((ThisFrameLen + 8)> RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset, RxBufferLength, pAd->ReadPosition)); ++ ++ // error frame. finish this loop ++ goto label_null; ++ } ++ ++ // skip USB frame length field ++ pData += RT2870_RXDMALEN_FIELD_SIZE; ++ pRxWI = (PRXWI_STRUC)pData; ++ if (pRxWI->MPDUtotalByteCount > ThisFrameLen) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n", ++ __FUNCTION__, pRxWI->MPDUtotalByteCount, ThisFrameLen)); ++ goto label_null; ++ } ++ ++ // allocate a rx packet ++ pSkb = dev_alloc_skb(ThisFrameLen); ++ if (pSkb == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("%s():Cannot Allocate sk buffer for this Bulk-In buffer!\n", __FUNCTION__)); ++ goto label_null; ++ } ++ ++ // copy the rx packet ++ memcpy(skb_put(pSkb, ThisFrameLen), pData, ThisFrameLen); ++ RTPKT_TO_OSPKT(pSkb)->dev = get_netdev_from_bssid(pAd, BSS0); ++ RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS); ++ ++ // copy RxD ++ *pSaveRxD = *(PRXINFO_STRUC)(pData + ThisFrameLen); ++ ++ // update next packet read position. ++ pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) ++ ++ return pSkb; ++ ++label_null: ++ ++ return NULL; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound ++ ++ Arguments: ++ pRxD Pointer to the Rx descriptor ++ ++ Return Value: ++ NDIS_STATUS_SUCCESS No err ++ NDIS_STATUS_FAILURE Error ++ ++ Note: ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RTMPCheckRxError( ++ IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, ++ IN PRT28XX_RXD_STRUC pRxINFO) ++{ ++ PCIPHER_KEY pWpaKey; ++ INT dBm; ++ ++ if (pAd->bPromiscuous == TRUE) ++ return(NDIS_STATUS_SUCCESS); ++ if(pRxINFO == NULL) ++ return(NDIS_STATUS_FAILURE); ++ ++ // Phy errors & CRC errors ++ if (pRxINFO->Crc) ++ { ++ // Check RSSI for Noise Hist statistic collection. ++ dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; ++ if (dBm <= -87) ++ pAd->StaCfg.RPIDensity[0] += 1; ++ else if (dBm <= -82) ++ pAd->StaCfg.RPIDensity[1] += 1; ++ else if (dBm <= -77) ++ pAd->StaCfg.RPIDensity[2] += 1; ++ else if (dBm <= -72) ++ pAd->StaCfg.RPIDensity[3] += 1; ++ else if (dBm <= -67) ++ pAd->StaCfg.RPIDensity[4] += 1; ++ else if (dBm <= -62) ++ pAd->StaCfg.RPIDensity[5] += 1; ++ else if (dBm <= -57) ++ pAd->StaCfg.RPIDensity[6] += 1; ++ else if (dBm > -57) ++ pAd->StaCfg.RPIDensity[7] += 1; ++ ++ return(NDIS_STATUS_FAILURE); ++ } ++ ++ // Add Rx size to channel load counter, we should ignore error counts ++ pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount+ 14); ++ ++ // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics ++ if (pHeader->FC.ToDs) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n")); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ // Paul 04-03 for OFDM Rx length issue ++ if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n")); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ // Drop not U2M frames, cant's drop here because we will drop beacon in this case ++ // I am kind of doubting the U2M bit operation ++ // if (pRxD->U2M == 0) ++ // return(NDIS_STATUS_FAILURE); ++ ++ // drop decyption fail frame ++ if (pRxINFO->Decrypted && pRxINFO->CipherErr) ++ { ++ ++ if (((pRxINFO->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ ++ if (((pRxINFO->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ // ++ // MIC Error ++ // ++ if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss) ++ { ++ pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; ++ RTMPReportMicError(pAd, pWpaKey); ++ DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); ++ } ++ ++ if (pRxINFO->Decrypted && ++ (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == CIPHER_AES) && ++ (pHeader->Sequence == pAd->FragFrame.Sequence)) ++ { ++ // ++ // Acceptable since the First FragFrame no CipherErr problem. ++ // ++ return(NDIS_STATUS_SUCCESS); ++ } ++ ++ return(NDIS_STATUS_FAILURE); ++ } ++ ++ return(NDIS_STATUS_SUCCESS); ++} ++ ++VOID RtmpUsbStaAsicForceWakeupTimeout( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ ++ ++ if (pAd && pAd->Mlme.AutoWakeupTimerRunning) ++ { ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ pAd->Mlme.AutoWakeupTimerRunning = FALSE; ++ } ++} ++ ++VOID RT28xxUsbStaAsicForceWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bFromTx) ++{ ++ BOOLEAN Canceled; ++ ++ if (pAd->Mlme.AutoWakeupTimerRunning) ++ RTMPCancelTimer(&pAd->Mlme.AutoWakeupTimer, &Canceled); ++ ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++} ++ ++VOID RT28xxUsbStaAsicSleepThenAutoWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) ++{ ++ ++ ++ // we have decided to SLEEP, so at least do it for a BEACON period. ++ if (TbttNumToNextWakeUp == 0) ++ TbttNumToNextWakeUp = 1; ++ ++ RTMPSetTimer(&pAd->Mlme.AutoWakeupTimer, AUTO_WAKEUP_TIMEOUT); ++ pAd->Mlme.AutoWakeupTimerRunning = TRUE; ++ ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us. ++ ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); ++ ++} ++ ++#endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 019cc44..49e9bdf 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -23,154 +23,154 @@ + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + ************************************************************************* +-*/ ++ */ + + #include + #include "../rt_config.h" + + INT Show_SSID_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_WirelessMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_TxBurst_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_TxPreamble_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_TxPower_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_Channel_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_BGProtection_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_RTSThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_FragThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtBw_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtMcs_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtGi_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtOpMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtExtcha_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtMpduDensity_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtBaWinSize_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtRdg_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtAmsdu_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_HtAutoBa_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_CountryRegion_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_CountryRegionABand_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_CountryCode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + #ifdef AGGREGATION_SUPPORT + INT Show_PktAggregate_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + #endif // AGGREGATION_SUPPORT // + + #ifdef WMM_SUPPORT + INT Show_WmmCapable_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + #endif // WMM_SUPPORT // + + INT Show_IEEE80211H_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_NetworkType_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_AuthMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_EncrypType_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_DefaultKeyID_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_Key1_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_Key2_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_Key3_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_Key4_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + INT Show_WPAPSK_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf); ++ OUT PSTRING pBuf); + + static struct { +- CHAR *name; +- INT (*show_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg); ++ PSTRING name; ++ INT (*show_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); + } *PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC, RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC[] = { + {"SSID", Show_SSID_Proc}, + {"WirelessMode", Show_WirelessMode_Proc}, +@@ -224,8 +224,9 @@ static struct { + */ + INT Set_DriverVersion_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { ++ + DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION)); + + return TRUE; +@@ -242,32 +243,14 @@ INT Set_DriverVersion_Proc( + */ + INT Set_CountryRegion_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG region; ++ int retval; + +- region = simple_strtol(arg, 0, 10); + +- // Country can be set only when EEPROM not programmed +- if (pAd->CommonCfg.CountryRegion & 0x80) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegion_Proc::parameter of CountryRegion in eeprom is programmed \n")); ++ retval = RT_CfgSetCountryRegion(pAd, arg, BAND_24G); ++ if (retval == FALSE) + return FALSE; +- } +- +- if((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) +- { +- pAd->CommonCfg.CountryRegion = (UCHAR) region; +- } +- else if (region == REGION_31_BG_BAND) +- { +- pAd->CommonCfg.CountryRegion = (UCHAR) region; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegion_Proc::parameters out of range\n")); +- return FALSE; +- } + + // if set country region, driver needs to be reset + BuildChannelList(pAd); +@@ -288,28 +271,14 @@ INT Set_CountryRegion_Proc( + */ + INT Set_CountryRegionABand_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG region; +- +- region = simple_strtol(arg, 0, 10); ++ int retval; + +- // Country can be set only when EEPROM not programmed +- if (pAd->CommonCfg.CountryRegionForABand & 0x80) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegionABand_Proc::parameter of CountryRegion in eeprom is programmed \n")); +- return FALSE; +- } + +- if((region >= 0) && (region <= REGION_MAXIMUM_A_BAND)) +- { +- pAd->CommonCfg.CountryRegionForABand = (UCHAR) region; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_CountryRegionABand_Proc::parameters out of range\n")); ++ retval = RT_CfgSetCountryRegion(pAd, arg, BAND_5G); ++ if (retval == FALSE) + return FALSE; +- } + + // if set country region, driver needs to be reset + BuildChannelList(pAd); +@@ -329,22 +298,17 @@ INT Set_CountryRegionABand_Proc( + */ + INT Set_WirelessMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG WirelessMode; + INT success = TRUE; + +- WirelessMode = simple_strtol(arg, 0, 10); +- ++ success = RT_CfgSetWirelessMode(pAd, arg); ++ if (success) + { +- INT MaxPhyMode = PHY_11G; +- +- MaxPhyMode = PHY_11N_5G; +- +- if (WirelessMode <= MaxPhyMode) + { +- RTMPSetPhyMode(pAd, WirelessMode); ++ LONG WirelessMode = pAd->CommonCfg.PhyMode; + ++ RTMPSetPhyMode(pAd, WirelessMode); + if (WirelessMode >= PHY_11ABGN_MIXED) + { + pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +@@ -364,17 +328,10 @@ INT Set_WirelessMode_Proc( + AsicEnableIbssSync(pAd); // copy to on-chip memory + } + } +- else +- { +- success = FALSE; +- } +- } + + // it is needed to set SSID to take effect +- if (success == TRUE) +- { + SetCommonHT(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%ld)\n", WirelessMode)); ++ DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%d)\n", pAd->CommonCfg.PhyMode)); + } + else + { +@@ -394,7 +351,7 @@ INT Set_WirelessMode_Proc( + */ + INT Set_Channel_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + INT success = TRUE; + UCHAR Channel; +@@ -451,24 +408,18 @@ INT Set_Channel_Proc( + */ + INT Set_ShortSlot_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG ShortSlot; +- +- ShortSlot = simple_strtol(arg, 0, 10); +- +- if (ShortSlot == 1) +- pAd->CommonCfg.bUseShortSlotTime = TRUE; +- else if (ShortSlot == 0) +- pAd->CommonCfg.bUseShortSlotTime = FALSE; +- else +- return FALSE; //Invalid argument ++ int retval; + ++ retval = RT_CfgSetShortSlot(pAd, arg); ++ if (retval == TRUE) + DBGPRINT(RT_DEBUG_TRACE, ("Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAd->CommonCfg.bUseShortSlotTime)); + +- return TRUE; ++ return retval; + } + ++ + /* + ========================================================================== + Description: +@@ -479,12 +430,12 @@ INT Set_ShortSlot_Proc( + */ + INT Set_TxPower_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG TxPower; ++ LONG TxPower; + INT success = FALSE; + +- TxPower = (ULONG) simple_strtol(arg, 0, 10); ++ TxPower = simple_strtol(arg, 0, 10); + if (TxPower <= 100) + { + { +@@ -511,7 +462,7 @@ INT Set_TxPower_Proc( + */ + INT Set_BGProtection_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + switch (simple_strtol(arg, 0, 10)) + { +@@ -544,7 +495,7 @@ INT Set_BGProtection_Proc( + */ + INT Set_TxPreamble_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + RT_802_11_PREAMBLE Preamble; + +@@ -585,7 +536,7 @@ INT Set_TxPreamble_Proc( + */ + INT Set_RTSThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + NDIS_802_11_RTS_THRESHOLD RtsThresh; + +@@ -613,7 +564,7 @@ INT Set_RTSThreshold_Proc( + */ + INT Set_FragThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; + +@@ -657,9 +608,9 @@ INT Set_FragThreshold_Proc( + */ + INT Set_TxBurst_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG TxBurst; ++ LONG TxBurst; + + TxBurst = simple_strtol(arg, 0, 10); + if (TxBurst == 1) +@@ -685,9 +636,9 @@ INT Set_TxBurst_Proc( + */ + INT Set_PktAggregate_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG aggre; ++ LONG aggre; + + aggre = simple_strtol(arg, 0, 10); + +@@ -716,9 +667,9 @@ INT Set_PktAggregate_Proc( + */ + INT Set_IEEE80211H_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +- ULONG ieee80211h; ++ LONG ieee80211h; + + ieee80211h = simple_strtol(arg, 0, 10); + +@@ -746,7 +697,7 @@ INT Set_IEEE80211H_Proc( + */ + INT Set_Debug_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Debug_Proc *******************\n")); + +@@ -761,10 +712,11 @@ INT Set_Debug_Proc( + + INT Show_DescInfo_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + INT i, QueIdx=0; ++// ULONG RegValue; + PRT28XX_RXD_STRUC pRxD; + PTXD_STRUC pTxD; + PRTMP_TX_RING pTxRing = &pAd->TxRing[QueIdx]; +@@ -774,27 +726,28 @@ INT Show_DescInfo_Proc( + for(i=0;iCell[i].AllocVa; +- printk("Desc #%d\n",i); +- hex_dump("Tx Descriptor", (char *)pTxD, 16); +- printk("pTxD->DMADONE = %x\n", pTxD->DMADONE); ++ DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); ++ hex_dump("Tx Descriptor", (PUCHAR)pTxD, 16); ++ DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); + } +- printk("---------------------------------------------------\n"); ++ DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); + for(i=0;iCell[i].AllocVa; +- printk("Desc #%d\n",i); +- hex_dump("Mgmt Descriptor", (char *)pTxD, 16); +- printk("pMgmt->DMADONE = %x\n", pTxD->DMADONE); ++ DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); ++ hex_dump("Mgmt Descriptor", (PUCHAR)pTxD, 16); ++ DBGPRINT(RT_DEBUG_OFF, ("pMgmt->DMADONE = %x\n", pTxD->DMADONE)); + } +- printk("---------------------------------------------------\n"); ++ DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); + for(i=0;iCell[i].AllocVa; +- printk("Desc #%d\n",i); +- hex_dump("Rx Descriptor", (char *)pRxD, 16); +- printk("pRxD->DDONE = %x\n", pRxD->DDONE); ++ DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); ++ hex_dump("Rx Descriptor", (PUCHAR)pRxD, 16); ++ DBGPRINT(RT_DEBUG_OFF, ("pRxD->DDONE = %x\n", pRxD->DDONE)); + } +-#endif /* RT2860 */ ++#endif // RTMP_MAC_PCI // ++ + return TRUE; + } + +@@ -813,8 +766,11 @@ INT Show_DescInfo_Proc( + */ + INT Set_ResetStatCounter_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { ++ //UCHAR i; ++ //MAC_TABLE_ENTRY *pEntry; ++ + DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n")); + + // add the most up-to-date h/w raw counters into software counters +@@ -824,9 +780,33 @@ INT Set_ResetStatCounter_Proc( + NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3)); + NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK)); + ++ // Reset HotSpot counter ++ ++ + return TRUE; + } + ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Add WPA key process. ++ In Adhoc WPANONE, bPairwise = 0; KeyIdx = 0; ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pBuf Pointer to the where the key stored ++ ++ Return Value: ++ NDIS_SUCCESS Add key successfully ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++ + BOOLEAN RTMPCheckStrPrintAble( + IN CHAR *pInPutStr, + IN UCHAR strLen) +@@ -1100,7 +1080,7 @@ VOID RTMPWPARemoveAllKeys( + UCHAR i; + + DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus)); +- ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after + // Link up. And it will be replaced if user changed it. + if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +@@ -1122,9 +1102,33 @@ VOID RTMPWPARemoveAllKeys( + + AsicRemoveSharedKeyEntry(pAd, BSS0, i); + } +- ++ RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + } + ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ As STA's BSSID is a WC too, it uses shared key table. ++ This function write correct unicast TX key to ASIC WCID. ++ And we still make a copy in our MacTab.Content[BSSID_WCID].PairwiseKey. ++ Caller guarantee TKIP/AES always has keyidx = 0. (pairwise key) ++ Caller guarantee WEP calls this function when set Txkey, default key index=0~3. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pKey Pointer to the where the key stored ++ ++ Return Value: ++ NDIS_SUCCESS Add key successfully ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ + /* + ======================================================================== + Routine Description: +@@ -1147,6 +1151,11 @@ VOID RTMPSetPhyMode( + INT i; + // the selected phymode must be supported by the RF IC encoded in E2PROM + ++ // if no change, do nothing ++ /* bug fix ++ if (pAd->CommonCfg.PhyMode == phymode) ++ return; ++ */ + pAd->CommonCfg.PhyMode = (UCHAR)phymode; + + DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel)); +@@ -1466,7 +1475,10 @@ VOID RTMPSetHT( + } + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + ++ { + RTMPSetIndividualHT(pAd, 0); ++ } ++ + } + + /* +@@ -1657,12 +1669,8 @@ VOID RTMPAddWcidAttributeEntry( + // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. + // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. + // the AID:2~ assign to mesh link entry. +- if (pEntry && ADHOC_ON(pAd)) ++ if (pEntry) + Wcid = pEntry->Aid; +- else if (pEntry && INFRA_ON(pAd)) +- { +- Wcid = BSSID_WCID; +- } + else + Wcid = MCAST_WCID; + } +@@ -1697,12 +1705,12 @@ VOID RTMPAddWcidAttributeEntry( + } + + // For key index and ext IV bit, so only need to update the position(offset+3). +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + RTMP_IO_WRITE8(pAd, offset+3, IVEIV); +-#endif +-#ifdef RT2870 ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg])); + DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri)); +@@ -1723,7 +1731,7 @@ Arguments: + Note: + ========================================================================== + */ +-CHAR *GetEncryptType(CHAR enc) ++PSTRING GetEncryptType(CHAR enc) + { + if(enc == Ndis802_11WEPDisabled) + return "NONE"; +@@ -1739,7 +1747,7 @@ CHAR *GetEncryptType(CHAR enc) + return "UNKNOW"; + } + +-CHAR *GetAuthMode(CHAR auth) ++PSTRING GetAuthMode(CHAR auth) + { + if(auth == Ndis802_11AuthModeOpen) + return "OPEN"; +@@ -1783,71 +1791,133 @@ CHAR *GetAuthMode(CHAR auth) + 3.) UI needs to prepare at least 4096bytes to get the results + ========================================================================== + */ +-#define LINE_LEN (4+33+20+8+10+9+7+3) // Channel+SSID+Bssid+WepStatus+AuthMode+Signal+WiressMode+NetworkType +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) ++#define LINE_LEN (4+33+20+23+9+7+7+3) // Channel+SSID+Bssid+Security+Signal+WiressMode+ExtCh+NetworkType ++VOID RTMPCommSiteSurveyData( ++ IN PSTRING msg, ++ IN PBSS_ENTRY pBss) + { +- CHAR *msg; +- INT i=0; +- INT WaitCnt; +- INT Status=0; +- CHAR Ssid[MAX_LEN_OF_SSID +1]; +- INT Rssi = 0, max_len = LINE_LEN; ++ INT Rssi = 0; + UINT Rssi_Quality = 0; + NDIS_802_11_NETWORK_TYPE wireless_mode; ++ CHAR Ssid[MAX_LEN_OF_SSID +1]; ++ STRING SecurityStr[32] = {0}; ++ NDIS_802_11_ENCRYPTION_STATUS ap_cipher = Ndis802_11EncryptionDisabled; ++ NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen; + +- os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len)); +- +- if (msg == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); +- return; +- } +- +- memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len ); + memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1)); +- sprintf(msg,"%s","\n"); +- sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-8s%-10s%-9s%-7s%-3s\n", +- "Ch", "SSID", "BSSID", "Enc", "Auth", "Siganl(%)", "W-Mode", " NT"); +- +- WaitCnt = 0; +- pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; +- +- while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200)) +- OS_WAIT(500); +- +- for(i=0; iScanTab.BssNr ;i++) +- { +- if( pAdapter->ScanTab.BssEntry[i].Channel==0) +- break; +- +- if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA) +- break; + + //Channel +- sprintf(msg+strlen(msg),"%-4d", pAdapter->ScanTab.BssEntry[i].Channel); ++ sprintf(msg+strlen(msg),"%-4d", pBss->Channel); + //SSID +- memcpy(Ssid, pAdapter->ScanTab.BssEntry[i].Ssid, pAdapter->ScanTab.BssEntry[i].SsidLen); +- Ssid[pAdapter->ScanTab.BssEntry[i].SsidLen] = '\0'; ++ memcpy(Ssid, pBss->Ssid, pBss->SsidLen); ++ Ssid[pBss->SsidLen] = '\0'; + sprintf(msg+strlen(msg),"%-33s", Ssid); + //BSSID + sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ", +- pAdapter->ScanTab.BssEntry[i].Bssid[0], +- pAdapter->ScanTab.BssEntry[i].Bssid[1], +- pAdapter->ScanTab.BssEntry[i].Bssid[2], +- pAdapter->ScanTab.BssEntry[i].Bssid[3], +- pAdapter->ScanTab.BssEntry[i].Bssid[4], +- pAdapter->ScanTab.BssEntry[i].Bssid[5]); +- //Encryption Type +- sprintf(msg+strlen(msg),"%-8s",GetEncryptType(pAdapter->ScanTab.BssEntry[i].WepStatus)); +- //Authentication Mode +- if (pAdapter->ScanTab.BssEntry[i].WepStatus == Ndis802_11WEPEnabled) +- sprintf(msg+strlen(msg),"%-10s", "UNKNOW"); ++ pBss->Bssid[0], ++ pBss->Bssid[1], ++ pBss->Bssid[2], ++ pBss->Bssid[3], ++ pBss->Bssid[4], ++ pBss->Bssid[5]); ++ ++ //Security ++ if ((Ndis802_11AuthModeWPA <= pBss->AuthMode) && ++ (pBss->AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) ++ { ++ if (pBss->AuthModeAux == Ndis802_11AuthModeWPANone) ++ { ++ ap_auth_mode = pBss->AuthMode; ++ if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) ++ ap_cipher = pBss->WPA.PairCipher; ++ else ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ } ++ else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen) ++ { ++ ap_auth_mode = pBss->AuthMode; ++ if ((ap_auth_mode == Ndis802_11AuthModeWPA) || ++ (ap_auth_mode == Ndis802_11AuthModeWPAPSK)) ++ { ++ if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) ++ ap_cipher = pBss->WPA.PairCipher; ++ else ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ } ++ else if ((ap_auth_mode == Ndis802_11AuthModeWPA2) || ++ (ap_auth_mode == Ndis802_11AuthModeWPA2PSK)) ++ { ++ if (pBss->WPA2.PairCipherAux == Ndis802_11WEPDisabled) ++ ap_cipher = pBss->WPA2.PairCipher; ++ else ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ } ++ } ++ else if ((pBss->AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pBss->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ { ++ if ((pBss->AuthModeAux == Ndis802_11AuthModeWPAPSK) || ++ (pBss->AuthModeAux == Ndis802_11AuthModeWPA2PSK)) ++ ap_auth_mode = Ndis802_11AuthModeWPA1PSKWPA2PSK; ++ else ++ ap_auth_mode = pBss->AuthMode; ++ ++ if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && ++ (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && ++ (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) ++ ap_cipher = pBss->WPA.PairCipher; ++ } ++ else if ((pBss->AuthMode == Ndis802_11AuthModeWPA) || ++ (pBss->AuthMode == Ndis802_11AuthModeWPA2)) ++ { ++ if ((pBss->AuthModeAux == Ndis802_11AuthModeWPA) || ++ (pBss->AuthMode == Ndis802_11AuthModeWPA2)) ++ ap_auth_mode = Ndis802_11AuthModeWPA1WPA2; ++ else ++ ap_auth_mode = pBss->AuthMode; ++ ++ if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && ++ (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) ++ ap_cipher = Ndis802_11Encryption4Enabled; ++ else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && ++ (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && ++ (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) ++ ap_cipher = pBss->WPA.PairCipher; ++ } ++ ++ sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); ++ } ++ else ++ { ++ ap_auth_mode = pBss->AuthMode; ++ ap_cipher = pBss->WepStatus; ++ if (ap_cipher == Ndis802_11WEPDisabled) ++ sprintf(SecurityStr, "NONE"); ++ else if (ap_cipher == Ndis802_11WEPEnabled) ++ sprintf(SecurityStr, "WEP"); + else +- sprintf(msg+strlen(msg),"%-10s",GetAuthMode(pAdapter->ScanTab.BssEntry[i].AuthMode)); ++ sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); ++ } ++ ++ sprintf(msg+strlen(msg), "%-23s", SecurityStr); ++ + // Rssi +- Rssi = (INT)pAdapter->ScanTab.BssEntry[i].Rssi; ++ Rssi = (INT)pBss->Rssi; + if (Rssi >= -50) + Rssi_Quality = 100; + else if (Rssi >= -80) // between -50 ~ -80dbm +@@ -1858,7 +1928,7 @@ VOID RTMPIoctlGetSiteSurvey( + Rssi_Quality = 0; + sprintf(msg+strlen(msg),"%-9d", Rssi_Quality); + // Wireless Mode +- wireless_mode = NetworkTypeInUseSanity(&pAdapter->ScanTab.BssEntry[i]); ++ wireless_mode = NetworkTypeInUseSanity(pBss); + if (wireless_mode == Ndis802_11FH || + wireless_mode == Ndis802_11DS) + sprintf(msg+strlen(msg),"%-7s", "11b"); +@@ -1872,13 +1942,79 @@ VOID RTMPIoctlGetSiteSurvey( + sprintf(msg+strlen(msg),"%-7s", "11b/g/n"); + else + sprintf(msg+strlen(msg),"%-7s", "unknow"); ++ ++ // Ext Channel ++ if (pBss->AddHtInfoLen > 0) ++ { ++ if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) ++ sprintf(msg+strlen(msg),"%-7s", " ABOVE"); ++ else if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) ++ sprintf(msg+strlen(msg),"%-7s", " BELOW"); ++ else ++ sprintf(msg+strlen(msg),"%-7s", " NONE"); ++ } ++ else ++ { ++ sprintf(msg+strlen(msg),"%-7s", " NONE"); ++ } ++ + //Network Type +- if (pAdapter->ScanTab.BssEntry[i].BssType == BSS_ADHOC) ++ if (pBss->BssType == BSS_ADHOC) + sprintf(msg+strlen(msg),"%-3s", " Ad"); + else + sprintf(msg+strlen(msg),"%-3s", " In"); + + sprintf(msg+strlen(msg),"\n"); ++ ++ return; ++} ++ ++VOID RTMPIoctlGetSiteSurvey( ++ IN PRTMP_ADAPTER pAdapter, ++ IN struct iwreq *wrq) ++{ ++ PSTRING msg; ++ INT i=0; ++ INT WaitCnt; ++ INT Status=0; ++ INT max_len = LINE_LEN; ++ PBSS_ENTRY pBss; ++ ++ ++ os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len)); ++ ++ if (msg == NULL) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); ++ return; ++ } ++ ++ memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len ); ++ sprintf(msg,"%s","\n"); ++ sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-23s%-9s%-7s%-7s%-3s\n", ++ "Ch", "SSID", "BSSID", "Security", "Siganl(%)", "W-Mode", " ExtCH"," NT"); ++ ++ ++ ++ WaitCnt = 0; ++ pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; ++ while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200)) ++ OS_WAIT(500); ++ ++ for(i=0; iScanTab.BssNr ;i++) ++ { ++ pBss = &pAdapter->ScanTab.BssEntry[i]; ++ ++ if( pBss->Channel==0) ++ break; ++ ++ if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA) ++ break; ++ ++ ++ RTMPCommSiteSurveyData(msg, pBss); ++ ++ + } + + pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +@@ -1933,7 +2069,12 @@ VOID RTMPIoctlGetMacTable( + DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __func__)); + } + +- msg = (CHAR *) kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG); ++ msg = kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG); ++ if (msg == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __func__)); ++ return; ++ } + memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); + sprintf(msg,"%s","\n"); + sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n", +@@ -1968,12 +2109,14 @@ VOID RTMPIoctlGetMacTable( + kfree(msg); + } + ++ + INT Set_BASetup_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR mac[6], tid; +- char *token, sepValue[] = ":", DASH = '-'; ++ PSTRING token; ++ STRING sepValue[] = ":", DASH = '-'; + INT i; + MAC_TABLE_ENTRY *pEntry; + +@@ -1982,6 +2125,7 @@ INT Set_BASetup_Proc( + =>The six 2 digit hex-decimal number previous are the Mac address, + =>The seventh decimal number is the tid value. + */ ++ //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); + + if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. + return FALSE; +@@ -1989,7 +2133,7 @@ INT Set_BASetup_Proc( + token = strchr(arg, DASH); + if ((token != NULL) && (strlen(token)>1)) + { +- tid = simple_strtol((token+1), 0, 10); ++ tid = (UCHAR) simple_strtol((token+1), 0, 10); + if (tid > 15) + return FALSE; + +@@ -1998,18 +2142,18 @@ INT Set_BASetup_Proc( + { + if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) + return FALSE; +- AtoH(token, (PUCHAR)(&mac[i]), 1); ++ AtoH(token, (&mac[i]), 1); + } + if(i != 6) + return FALSE; + +- printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n", mac[0], mac[1], +- mac[2], mac[3], mac[4], mac[5], tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n", ++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); + +- pEntry = MacTableLookup(pAd, mac); ++ pEntry = MacTableLookup(pAd, (PUCHAR) mac); + + if (pEntry) { +- printk("\nSetup BA Session: Tid = %d\n", tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\nSetup BA Session: Tid = %d\n", tid)); + BAOriSessionSetUp(pAd, pEntry, tid, 0, 100, TRUE); + } + +@@ -2022,7 +2166,7 @@ INT Set_BASetup_Proc( + + INT Set_BADecline_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG bBADecline; + +@@ -2048,13 +2192,15 @@ INT Set_BADecline_Proc( + + INT Set_BAOriTearDown_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR mac[6], tid; +- char *token, sepValue[] = ":", DASH = '-'; ++ PSTRING token; ++ STRING sepValue[] = ":", DASH = '-'; + INT i; + MAC_TABLE_ENTRY *pEntry; + ++ //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); + /* + The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, + =>The six 2 digit hex-decimal number previous are the Mac address, +@@ -2075,18 +2221,18 @@ INT Set_BAOriTearDown_Proc( + { + if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) + return FALSE; +- AtoH(token, (PUCHAR)(&mac[i]), 1); ++ AtoH(token, (&mac[i]), 1); + } + if(i != 6) + return FALSE; + +- printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1], +- mac[2], mac[3], mac[4], mac[5], tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", ++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); + +- pEntry = MacTableLookup(pAd, mac); ++ pEntry = MacTableLookup(pAd, (PUCHAR) mac); + + if (pEntry) { +- printk("\nTear down Ori BA Session: Tid = %d\n", tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\nTear down Ori BA Session: Tid = %d\n", tid)); + BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, TRUE); + } + +@@ -2099,14 +2245,15 @@ INT Set_BAOriTearDown_Proc( + + INT Set_BARecTearDown_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR mac[6], tid; +- char *token, sepValue[] = ":", DASH = '-'; ++ PSTRING token; ++ STRING sepValue[] = ":", DASH = '-'; + INT i; + MAC_TABLE_ENTRY *pEntry; + +- //printk("\n%s\n", arg); ++ //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); + /* + The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, + =>The six 2 digit hex-decimal number previous are the Mac address, +@@ -2127,18 +2274,18 @@ INT Set_BARecTearDown_Proc( + { + if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) + return FALSE; +- AtoH(token, (PUCHAR)(&mac[i]), 1); ++ AtoH(token, (&mac[i]), 1); + } + if(i != 6) + return FALSE; + +- printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1], +- mac[2], mac[3], mac[4], mac[5], tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", ++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); + +- pEntry = MacTableLookup(pAd, mac); ++ pEntry = MacTableLookup(pAd, (PUCHAR) mac); + + if (pEntry) { +- printk("\nTear down Rec BA Session: Tid = %d\n", tid); ++ DBGPRINT(RT_DEBUG_OFF, ("\nTear down Rec BA Session: Tid = %d\n", tid)); + BARecSessionTearDown(pAd, pEntry->Aid, tid, FALSE); + } + +@@ -2151,7 +2298,7 @@ INT Set_BARecTearDown_Proc( + + INT Set_HtBw_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG HtBw; + +@@ -2172,7 +2319,7 @@ INT Set_HtBw_Proc( + + INT Set_HtMcs_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG HtMcs, Mcs_tmp; + BOOLEAN bAutoRate = FALSE; +@@ -2226,7 +2373,7 @@ INT Set_HtMcs_Proc( + + INT Set_HtGi_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG HtGi; + +@@ -2249,7 +2396,7 @@ INT Set_HtGi_Proc( + + INT Set_HtTxBASize_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR Size; + +@@ -2265,10 +2412,32 @@ INT Set_HtTxBASize_Proc( + return TRUE; + } + ++INT Set_HtDisallowTKIP_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ ULONG Value; ++ ++ Value = simple_strtol(arg, 0, 10); ++ ++ if (Value == 1) ++ { ++ pAd->CommonCfg.HT_DisallowTKIP = TRUE; ++ } ++ else ++ { ++ pAd->CommonCfg.HT_DisallowTKIP = FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Set_HtDisallowTKIP_Proc ::%s\n", ++ (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "enabled" : "disabled")); ++ ++ return TRUE; ++} + + INT Set_HtOpMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + + ULONG Value; +@@ -2292,7 +2461,7 @@ INT Set_HtOpMode_Proc( + + INT Set_HtStbc_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + + ULONG Value; +@@ -2315,7 +2484,7 @@ INT Set_HtStbc_Proc( + + INT Set_HtHtc_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + + ULONG Value; +@@ -2335,7 +2504,7 @@ INT Set_HtHtc_Proc( + + INT Set_HtExtcha_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + + ULONG Value; +@@ -2358,7 +2527,7 @@ INT Set_HtExtcha_Proc( + + INT Set_HtMpduDensity_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2378,7 +2547,7 @@ INT Set_HtMpduDensity_Proc( + + INT Set_HtBaWinSize_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2405,7 +2574,7 @@ INT Set_HtBaWinSize_Proc( + + INT Set_HtRdg_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2430,7 +2599,7 @@ INT Set_HtRdg_Proc( + + INT Set_HtLinkAdapt_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2452,7 +2621,7 @@ INT Set_HtLinkAdapt_Proc( + + INT Set_HtAmsdu_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2473,7 +2642,7 @@ INT Set_HtAmsdu_Proc( + + INT Set_HtAutoBa_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2504,7 +2673,7 @@ INT Set_HtAutoBa_Proc( + + INT Set_HtProtect_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2523,14 +2692,15 @@ INT Set_HtProtect_Proc( + + INT Set_SendPSMPAction_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR mac[6], mode; +- char *token, sepValue[] = ":", DASH = '-'; ++ PSTRING token; ++ STRING sepValue[] = ":", DASH = '-'; + INT i; + MAC_TABLE_ENTRY *pEntry; + +- //printk("\n%s\n", arg); ++ //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); + /* + The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, + =>The six 2 digit hex-decimal number previous are the Mac address, +@@ -2551,18 +2721,18 @@ INT Set_SendPSMPAction_Proc( + { + if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) + return FALSE; +- AtoH(token, (PUCHAR)(&mac[i]), 1); ++ AtoH(token, (&mac[i]), 1); + } + if(i != 6) + return FALSE; + +- printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", mac[0], mac[1], +- mac[2], mac[3], mac[4], mac[5], mode); ++ DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", ++ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], mode)); + + pEntry = MacTableLookup(pAd, mac); + + if (pEntry) { +- printk("\nSendPSMPAction MIPS mode = %d\n", mode); ++ DBGPRINT(RT_DEBUG_OFF, ("\nSendPSMPAction MIPS mode = %d\n", mode)); + SendPSMPAction(pAd, pEntry->Aid, mode); + } + +@@ -2576,7 +2746,7 @@ INT Set_SendPSMPAction_Proc( + + INT Set_HtMIMOPSmode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2597,7 +2767,7 @@ INT Set_HtMIMOPSmode_Proc( + + INT Set_ForceShortGI_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2620,7 +2790,7 @@ INT Set_ForceShortGI_Proc( + + INT Set_ForceGF_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2641,7 +2811,7 @@ INT Set_ForceGF_Proc( + + INT Set_HtMimoPs_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG Value; + +@@ -2682,7 +2852,7 @@ INT SetCommonHT( + + INT Set_FixedTxMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UCHAR fix_tx_mode = FIXED_TXMODE_HT; + +@@ -2702,8 +2872,57 @@ INT Set_FixedTxMode_Proc( + return TRUE; + } + ++#if defined(RT305x)||defined(RT3070) ++INT Set_HiPower_Proc( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PSTRING arg) ++{ ++ pAdapter->CommonCfg.HighPowerPatchDisabled = !(simple_strtol(arg, 0, 10)); ++ ++ if (pAdapter->CommonCfg.HighPowerPatchDisabled != 0) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R82, 0x62); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R67, 0x20); ++#ifdef RT3070 ++ if ((IS_RT3070(pAdapter) && ((pAdapter->MACVersion & 0xffff) < 0x0201))) ++#endif // RT3070 // ++ RT30xxWriteRFRegister(pAdapter, RF_R27, 0x23); ++ } ++ return TRUE; ++} ++#endif ++ ++INT Set_LongRetryLimit_Proc( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PSTRING arg) ++{ ++ TX_RTY_CFG_STRUC tx_rty_cfg; ++ UCHAR LongRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); ++ ++ RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); ++ tx_rty_cfg.field.LongRtyLimit = LongRetryLimit; ++ RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); ++ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_LongRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); ++ return TRUE; ++} ++ ++INT Set_ShortRetryLimit_Proc( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PSTRING arg) ++{ ++ TX_RTY_CFG_STRUC tx_rty_cfg; ++ UCHAR ShortRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); ++ ++ RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); ++ tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit; ++ RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); ++ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ShortRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); ++ return TRUE; ++} ++ ++ + ///////////////////////////////////////////////////////////////////////// +-PCHAR RTMPGetRalinkAuthModeStr( ++PSTRING RTMPGetRalinkAuthModeStr( + IN NDIS_802_11_AUTHENTICATION_MODE authMode) + { + switch(authMode) +@@ -2731,14 +2950,11 @@ PCHAR RTMPGetRalinkAuthModeStr( + } + } + +-PCHAR RTMPGetRalinkEncryModeStr( ++PSTRING RTMPGetRalinkEncryModeStr( + IN USHORT encryMode) + { + switch(encryMode) + { +-#if defined(RT2860) || defined(RT30xx) +- default: +-#endif + case Ndis802_11WEPDisabled: + return "NONE"; + case Ndis802_11WEPEnabled: +@@ -2749,17 +2965,15 @@ PCHAR RTMPGetRalinkEncryModeStr( + return "AES"; + case Ndis802_11Encryption4Enabled: + return "TKIPAES"; +-#if !defined(RT2860) && !defined(RT30xx) + default: + return "UNKNOW"; +-#endif + } + } + + INT RTMPShowCfgValue( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pName, +- IN PUCHAR pBuf) ++ IN PSTRING pName, ++ IN PSTRING pBuf) + { + INT Status = 0; + +@@ -2785,7 +2999,7 @@ INT RTMPShowCfgValue( + + INT Show_SSID_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid); + return 0; +@@ -2793,7 +3007,7 @@ INT Show_SSID_Proc( + + INT Show_WirelessMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.PhyMode) + { +@@ -2843,7 +3057,7 @@ INT Show_WirelessMode_Proc( + + INT Show_TxBurst_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.bEnableTxBurst ? "TRUE":"FALSE"); + return 0; +@@ -2851,7 +3065,7 @@ INT Show_TxBurst_Proc( + + INT Show_TxPreamble_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.TxPreamble) + { +@@ -2874,7 +3088,7 @@ INT Show_TxPreamble_Proc( + + INT Show_TxPower_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%lu", pAd->CommonCfg.TxPowerPercentage); + return 0; +@@ -2882,7 +3096,7 @@ INT Show_TxPower_Proc( + + INT Show_Channel_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%d", pAd->CommonCfg.Channel); + return 0; +@@ -2890,7 +3104,7 @@ INT Show_Channel_Proc( + + INT Show_BGProtection_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.UseBGProtection) + { +@@ -2912,7 +3126,7 @@ INT Show_BGProtection_Proc( + + INT Show_RTSThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%u", pAd->CommonCfg.RtsThreshold); + return 0; +@@ -2920,7 +3134,7 @@ INT Show_RTSThreshold_Proc( + + INT Show_FragThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%u", pAd->CommonCfg.FragmentThreshold); + return 0; +@@ -2928,7 +3142,7 @@ INT Show_FragThreshold_Proc( + + INT Show_HtBw_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) + { +@@ -2943,7 +3157,7 @@ INT Show_HtBw_Proc( + + INT Show_HtMcs_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS); + return 0; +@@ -2951,7 +3165,7 @@ INT Show_HtMcs_Proc( + + INT Show_HtGi_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.RegTransmitSetting.field.ShortGI) + { +@@ -2970,7 +3184,7 @@ INT Show_HtGi_Proc( + + INT Show_HtOpMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.RegTransmitSetting.field.HTMODE) + { +@@ -2989,7 +3203,7 @@ INT Show_HtOpMode_Proc( + + INT Show_HtExtcha_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA) + { +@@ -3009,7 +3223,7 @@ INT Show_HtExtcha_Proc( + + INT Show_HtMpduDensity_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.MpduDensity); + return 0; +@@ -3017,7 +3231,7 @@ INT Show_HtMpduDensity_Proc( + + INT Show_HtBaWinSize_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.RxBAWinLimit); + return 0; +@@ -3025,7 +3239,7 @@ INT Show_HtBaWinSize_Proc( + + INT Show_HtRdg_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.bRdg ? "TRUE":"FALSE"); + return 0; +@@ -3033,7 +3247,7 @@ INT Show_HtRdg_Proc( + + INT Show_HtAmsdu_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AmsduEnable ? "TRUE":"FALSE"); + return 0; +@@ -3041,7 +3255,7 @@ INT Show_HtAmsdu_Proc( + + INT Show_HtAutoBa_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE"); + return 0; +@@ -3049,7 +3263,7 @@ INT Show_HtAutoBa_Proc( + + INT Show_CountryRegion_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegion); + return 0; +@@ -3057,7 +3271,7 @@ INT Show_CountryRegion_Proc( + + INT Show_CountryRegionABand_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegionForABand); + return 0; +@@ -3065,7 +3279,7 @@ INT Show_CountryRegionABand_Proc( + + INT Show_CountryCode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.CountryCode); + return 0; +@@ -3074,7 +3288,7 @@ INT Show_CountryCode_Proc( + #ifdef AGGREGATION_SUPPORT + INT Show_PktAggregate_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.bAggregationCapable ? "TRUE":"FALSE"); + return 0; +@@ -3084,7 +3298,7 @@ INT Show_PktAggregate_Proc( + #ifdef WMM_SUPPORT + INT Show_WmmCapable_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE"); + +@@ -3094,7 +3308,7 @@ INT Show_WmmCapable_Proc( + + INT Show_IEEE80211H_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + sprintf(pBuf, "\t%s", pAd->CommonCfg.bIEEE80211H ? "TRUE":"FALSE"); + return 0; +@@ -3102,7 +3316,7 @@ INT Show_IEEE80211H_Proc( + + INT Show_NetworkType_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + switch(pAd->StaCfg.BssType) + { +@@ -3125,9 +3339,11 @@ INT Show_NetworkType_Proc( + return 0; + } + ++ ++ + INT Show_AuthMode_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen; + +@@ -3144,7 +3360,7 @@ INT Show_AuthMode_Proc( + + INT Show_EncrypType_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled; + +@@ -3161,7 +3377,7 @@ INT Show_EncrypType_Proc( + + INT Show_DefaultKeyID_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + UCHAR DefaultKeyId = 0; + +@@ -3175,7 +3391,7 @@ INT Show_DefaultKeyID_Proc( + INT Show_WepKey_Proc( + IN PRTMP_ADAPTER pAd, + IN INT KeyIdx, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + UCHAR Key[16] = {0}, KeyLength = 0; + INT index = BSS0; +@@ -3184,7 +3400,7 @@ INT Show_WepKey_Proc( + NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength); + + //check key string is ASCII or not +- if (RTMPCheckStrPrintAble(Key, KeyLength)) ++ if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength)) + sprintf(pBuf, "\t%s", Key); + else + { +@@ -3198,7 +3414,7 @@ INT Show_WepKey_Proc( + + INT Show_Key1_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + Show_WepKey_Proc(pAd, 0, pBuf); + return 0; +@@ -3206,7 +3422,7 @@ INT Show_Key1_Proc( + + INT Show_Key2_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + Show_WepKey_Proc(pAd, 1, pBuf); + return 0; +@@ -3214,7 +3430,7 @@ INT Show_Key2_Proc( + + INT Show_Key3_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + Show_WepKey_Proc(pAd, 2, pBuf); + return 0; +@@ -3222,7 +3438,7 @@ INT Show_Key3_Proc( + + INT Show_Key4_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + Show_WepKey_Proc(pAd, 3, pBuf); + return 0; +@@ -3230,7 +3446,7 @@ INT Show_Key4_Proc( + + INT Show_WPAPSK_Proc( + IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf) ++ OUT PSTRING pBuf) + { + INT idx; + UCHAR PMK[32] = {0}; +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +new file mode 100644 +index 0000000..5aa6944 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -0,0 +1,1504 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++ ++#ifdef RTMP_MAC_PCI ++#include "../rt_config.h" ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Allocate DMA memory blocks for send, receive ++ ++ Arguments: ++ Adapter Pointer to our adapter ++ ++ Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_FAILURE ++ NDIS_STATUS_RESOURCES ++ ++ IRQL = PASSIVE_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RTMPAllocTxRxRingMemory( ++ IN PRTMP_ADAPTER pAd) ++{ ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ ULONG RingBasePaHigh; ++ ULONG RingBasePaLow; ++ PVOID RingBaseVa; ++ INT index, num; ++ PTXD_STRUC pTxD; ++ PRXD_STRUC pRxD; ++ ULONG ErrorValue = 0; ++ PRTMP_TX_RING pTxRing; ++ PRTMP_DMABUF pDmaBuf; ++ PNDIS_PACKET pPacket; ++// PRTMP_REORDERBUF pReorderBuf; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); ++ do ++ { ++ // ++ // Allocate all ring descriptors, include TxD, RxD, MgmtD. ++ // Although each size is different, to prevent cacheline and alignment ++ // issue, I intentional set them all to 64 bytes. ++ // ++ for (num=0; numTxDescRing[num].AllocSize = TX_RING_SIZE * TXD_SIZE; ++ RTMP_AllocateTxDescMemory( ++ pAd, ++ num, ++ pAd->TxDescRing[num].AllocSize, ++ FALSE, ++ &pAd->TxDescRing[num].AllocVa, ++ &pAd->TxDescRing[num].AllocPa); ++ ++ if (pAd->TxDescRing[num].AllocVa == NULL) ++ { ++ ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; ++ DBGPRINT_ERR(("Failed to allocate a big buffer\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ break; ++ } ++ ++ // Zero init this memory block ++ NdisZeroMemory(pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocSize); ++ ++ // Save PA & VA for further operation ++ RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num].AllocPa); ++ RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxDescRing[num].AllocPa); ++ RingBaseVa = pAd->TxDescRing[num].AllocVa; ++ ++ // ++ // Allocate all 1st TXBuf's memory for this TxRing ++ // ++ pAd->TxBufSpace[num].AllocSize = TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; ++ RTMP_AllocateFirstTxBuffer( ++ pAd, ++ num, ++ pAd->TxBufSpace[num].AllocSize, ++ FALSE, ++ &pAd->TxBufSpace[num].AllocVa, ++ &pAd->TxBufSpace[num].AllocPa); ++ ++ if (pAd->TxBufSpace[num].AllocVa == NULL) ++ { ++ ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; ++ DBGPRINT_ERR(("Failed to allocate a big buffer\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ break; ++ } ++ ++ // Zero init this memory block ++ NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocSize); ++ ++ // Save PA & VA for further operation ++ BufBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num].AllocPa); ++ BufBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxBufSpace[num].AllocPa); ++ BufBaseVa = pAd->TxBufSpace[num].AllocVa; ++ ++ // ++ // Initialize Tx Ring Descriptor and associated buffer memory ++ // ++ pTxRing = &pAd->TxRing[num]; ++ for (index = 0; index < TX_RING_SIZE; index++) ++ { ++ pTxRing->Cell[index].pNdisPacket = NULL; ++ pTxRing->Cell[index].pNextNdisPacket = NULL; ++ // Init Tx Ring Size, Va, Pa variables ++ pTxRing->Cell[index].AllocSize = TXD_SIZE; ++ pTxRing->Cell[index].AllocVa = RingBaseVa; ++ RTMP_SetPhysicalAddressHigh(pTxRing->Cell[index].AllocPa, RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow (pTxRing->Cell[index].AllocPa, RingBasePaLow); ++ ++ // Setup Tx Buffer size & address. only 802.11 header will store in this space ++ pDmaBuf = &pTxRing->Cell[index].DmaBuf; ++ pDmaBuf->AllocSize = TX_DMA_1ST_BUFFER_SIZE; ++ pDmaBuf->AllocVa = BufBaseVa; ++ RTMP_SetPhysicalAddressHigh(pDmaBuf->AllocPa, BufBasePaHigh); ++ RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, BufBasePaLow); ++ ++ // link the pre-allocated TxBuf to TXD ++ pTxD = (PTXD_STRUC) pTxRing->Cell[index].AllocVa; ++ pTxD->SDPtr0 = BufBasePaLow; ++ // advance to next ring descriptor address ++ pTxD->DMADONE = 1; ++ RingBasePaLow += TXD_SIZE; ++ RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; ++ ++ // advance to next TxBuf address ++ BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; ++ BufBaseVa = (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("TxRing[%d]: total %d entry allocated\n", num, index)); ++ } ++ if (Status == NDIS_STATUS_RESOURCES) ++ break; ++ ++ // ++ // Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler ++ // ++ pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * TXD_SIZE; ++ RTMP_AllocateMgmtDescMemory( ++ pAd, ++ pAd->MgmtDescRing.AllocSize, ++ FALSE, ++ &pAd->MgmtDescRing.AllocVa, ++ &pAd->MgmtDescRing.AllocPa); ++ ++ if (pAd->MgmtDescRing.AllocVa == NULL) ++ { ++ ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; ++ DBGPRINT_ERR(("Failed to allocate a big buffer\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ break; ++ } ++ ++ // Zero init this memory block ++ NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); ++ ++ // Save PA & VA for further operation ++ RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); ++ RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->MgmtDescRing.AllocPa); ++ RingBaseVa = pAd->MgmtDescRing.AllocVa; ++ ++ // ++ // Initialize MGMT Ring and associated buffer memory ++ // ++ for (index = 0; index < MGMT_RING_SIZE; index++) ++ { ++ pAd->MgmtRing.Cell[index].pNdisPacket = NULL; ++ pAd->MgmtRing.Cell[index].pNextNdisPacket = NULL; ++ // Init MGMT Ring Size, Va, Pa variables ++ pAd->MgmtRing.Cell[index].AllocSize = TXD_SIZE; ++ pAd->MgmtRing.Cell[index].AllocVa = RingBaseVa; ++ RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index].AllocPa, RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow (pAd->MgmtRing.Cell[index].AllocPa, RingBasePaLow); ++ ++ // Offset to next ring descriptor address ++ RingBasePaLow += TXD_SIZE; ++ RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; ++ ++ // link the pre-allocated TxBuf to TXD ++ pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; ++ pTxD->DMADONE = 1; ++ ++ // no pre-allocated buffer required in MgmtRing for scatter-gather case ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", index)); ++ ++ // ++ // Allocate RX ring descriptor's memory except Tx ring which allocated eariler ++ // ++ pAd->RxDescRing.AllocSize = RX_RING_SIZE * RXD_SIZE; ++ RTMP_AllocateRxDescMemory( ++ pAd, ++ pAd->RxDescRing.AllocSize, ++ FALSE, ++ &pAd->RxDescRing.AllocVa, ++ &pAd->RxDescRing.AllocPa); ++ ++ if (pAd->RxDescRing.AllocVa == NULL) ++ { ++ ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; ++ DBGPRINT_ERR(("Failed to allocate a big buffer\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ break; ++ } ++ ++ // Zero init this memory block ++ NdisZeroMemory(pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize); ++ ++ ++ DBGPRINT(RT_DEBUG_OFF, ++ ("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize)); ++ ++ // Save PA & VA for further operation ++ RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); ++ RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->RxDescRing.AllocPa); ++ RingBaseVa = pAd->RxDescRing.AllocVa; ++ ++ // ++ // Initialize Rx Ring and associated buffer memory ++ // ++ for (index = 0; index < RX_RING_SIZE; index++) ++ { ++ // Init RX Ring Size, Va, Pa variables ++ pAd->RxRing.Cell[index].AllocSize = RXD_SIZE; ++ pAd->RxRing.Cell[index].AllocVa = RingBaseVa; ++ RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index].AllocPa, RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow (pAd->RxRing.Cell[index].AllocPa, RingBasePaLow); ++ ++ //NdisZeroMemory(RingBaseVa, RXD_SIZE); ++ ++ // Offset to next ring descriptor address ++ RingBasePaLow += RXD_SIZE; ++ RingBaseVa = (PUCHAR) RingBaseVa + RXD_SIZE; ++ ++ // Setup Rx associated Buffer size & allocate share memory ++ pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; ++ pDmaBuf->AllocSize = RX_BUFFER_AGGRESIZE; ++ pPacket = RTMP_AllocateRxPacketBuffer( ++ pAd, ++ pDmaBuf->AllocSize, ++ FALSE, ++ &pDmaBuf->AllocVa, ++ &pDmaBuf->AllocPa); ++ ++ /* keep allocated rx packet */ ++ pAd->RxRing.Cell[index].pNdisPacket = pPacket; ++ ++ // Error handling ++ if (pDmaBuf->AllocVa == NULL) ++ { ++ ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; ++ DBGPRINT_ERR(("Failed to allocate RxRing's 1st buffer\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ break; ++ } ++ ++ // Zero init this memory block ++ NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); ++ ++ // Write RxD buffer address & allocated buffer length ++ pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; ++ pRxD->SDP0 = RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); ++ pRxD->DDONE = 0; ++ ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Rx Ring: total %d entry allocated\n", index)); ++ ++ } while (FALSE); ++ ++ ++ NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); ++ pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); ++ ++ if (pAd->FragFrame.pFragPacket == NULL) ++ { ++ Status = NDIS_STATUS_RESOURCES; ++ } ++ ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ // Log error inforamtion ++ NdisWriteErrorLogEntry( ++ pAd->AdapterHandle, ++ NDIS_ERROR_CODE_OUT_OF_RESOURCES, ++ 1, ++ ErrorValue); ++ } ++ ++ // Following code segment get from original func:NICInitTxRxRingAndBacklogQueue(), now should integrate it to here. ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTxRxRingAndBacklogQueue\n")); ++ ++/* ++ // Disable DMA. ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); ++ GloCfg.word &= 0xff0; ++ GloCfg.field.EnTXWriteBackDDONE =1; ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); ++*/ ++ ++ // Initialize all transmit related software queues ++ for(index = 0; index < NUM_OF_TX_RING; index++) ++ { ++ InitializeQueueHeader(&pAd->TxSwQueue[index]); ++ // Init TX rings index pointer ++ pAd->TxRing[index].TxSwFreeIdx = 0; ++ pAd->TxRing[index].TxCpuIdx = 0; ++ //RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TX_CTX_IDX); ++ } ++ ++ // Init RX Ring index pointer ++ pAd->RxRing.RxSwReadIdx = 0; ++ pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; ++ //RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RX_CRX_IDX0); ++ ++ ++ // init MGMT ring index pointer ++ pAd->MgmtRing.TxSwFreeIdx = 0; ++ pAd->MgmtRing.TxCpuIdx = 0; ++ ++ pAd->PrivateInfo.TxRingFullCnt = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTxRxRingAndBacklogQueue\n")); ++ } ++ ++ DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); ++ return Status; ++} ++ ++ ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Reset NIC Asics. Call after rest DMA. So reset TX_CTX_IDX to zero. ++ ++ Arguments: ++ Adapter Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ Reset NIC to initial state AS IS system boot up time. ++ ++ ======================================================================== ++*/ ++VOID RTMPRingCleanUp( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR RingType) ++{ ++ PTXD_STRUC pTxD; ++ PRXD_STRUC pRxD; ++ PQUEUE_ENTRY pEntry; ++ PNDIS_PACKET pPacket; ++ int i; ++ PRTMP_TX_RING pTxRing; ++ unsigned long IrqFlags; ++ //UINT32 RxSwReadIdx; ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE,("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, pAd->RalinkCounters.PendingNdisPacketCount)); ++ switch (RingType) ++ { ++ case QID_AC_BK: ++ case QID_AC_BE: ++ case QID_AC_VI: ++ case QID_AC_VO: ++ case QID_HCCA: ++ ++ pTxRing = &pAd->TxRing[RingType]; ++ ++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ // We have to clean all descriptors in case some error happened with reset ++ for (i=0; iCell[i].AllocVa; ++ ++ pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) ++ { ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ pTxRing->Cell[i].pNdisPacket = NULL; ++ } ++ ++ pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) ++ { ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ pTxRing->Cell[i].pNextNdisPacket = NULL; ++ } ++ } ++ ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + RingType * 0x10, &pTxRing->TxDmaIdx); ++ pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; ++ pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; ++ RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + RingType * 0x10, pTxRing->TxCpuIdx); ++ ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ ++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ while (pAd->TxSwQueue[RingType].Head != NULL) ++ { ++ pEntry = RemoveHeadQueue(&pAd->TxSwQueue[RingType]); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ DBGPRINT(RT_DEBUG_TRACE,("Release 1 NDIS packet from s/w backlog queue\n")); ++ } ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ break; ++ ++ case QID_MGMT: ++ // We have to clean all descriptors in case some error happened with reset ++ NdisAcquireSpinLock(&pAd->MgmtRingLock); ++ ++ for (i=0; iMgmtRing.Cell[i].AllocVa; ++ ++ pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; ++ // rlease scatter-and-gather NDIS_PACKET ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ } ++ pAd->MgmtRing.Cell[i].pNdisPacket = NULL; ++ ++ pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNextNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ } ++ pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL; ++ ++ } ++ ++ RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pAd->MgmtRing.TxDmaIdx); ++ pAd->MgmtRing.TxSwFreeIdx = pAd->MgmtRing.TxDmaIdx; ++ pAd->MgmtRing.TxCpuIdx = pAd->MgmtRing.TxDmaIdx; ++ RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); ++ ++ NdisReleaseSpinLock(&pAd->MgmtRingLock); ++ pAd->RalinkCounters.MgmtRingFullCount = 0; ++ break; ++ ++ case QID_RX: ++ // We have to clean all descriptors in case some error happened with reset ++ NdisAcquireSpinLock(&pAd->RxRingLock); ++ ++ for (i=0; iRxRing.Cell[i].AllocVa; ++ pRxD->DDONE = 0 ; ++ } ++ ++ RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); ++ pAd->RxRing.RxSwReadIdx = pAd->RxRing.RxDmaIdx; ++ pAd->RxRing.RxCpuIdx = ((pAd->RxRing.RxDmaIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxDmaIdx-1)); ++ RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); ++ ++ NdisReleaseSpinLock(&pAd->RxRingLock); ++ break; ++ ++ default: ++ break; ++ } ++} ++ ++ ++VOID RTMPFreeTxRxRingMemory( ++ IN PRTMP_ADAPTER pAd) ++{ ++ int index, num , j; ++ PRTMP_TX_RING pTxRing; ++ PTXD_STRUC pTxD; ++ PNDIS_PACKET pPacket; ++ unsigned int IrqFlags; ++ ++ //POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); ++ ++ // Free TxSwQueue Packet ++ for (index=0; index irq_lock, IrqFlags); ++ pQueue = &pAd->TxSwQueue[index]; ++ while (pQueue->Head) ++ { ++ pEntry = RemoveHeadQueue(pQueue); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ } ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ } ++ ++ // Free Tx Ring Packet ++ for (index=0;index< NUM_OF_TX_RING;index++) ++ { ++ pTxRing = &pAd->TxRing[index]; ++ ++ for (j=0; j< TX_RING_SIZE; j++) ++ { ++ pTxD = (PTXD_STRUC) (pTxRing->Cell[j].AllocVa); ++ pPacket = pTxRing->Cell[j].pNdisPacket; ++ ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ //Always assign pNdisPacket as NULL after clear ++ pTxRing->Cell[j].pNdisPacket = NULL; ++ ++ pPacket = pTxRing->Cell[j].pNextNdisPacket; ++ ++ if (pPacket) ++ { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ } ++ //Always assign pNextNdisPacket as NULL after clear ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; ++ ++ } ++ } ++ ++ for (index = RX_RING_SIZE - 1 ; index >= 0; index--) ++ { ++ if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) && (pAd->RxRing.Cell[index].pNdisPacket)) ++ { ++ PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); ++ RELEASE_NDIS_PACKET(pAd, pAd->RxRing.Cell[index].pNdisPacket, NDIS_STATUS_SUCCESS); ++ } ++ } ++ NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(RTMP_DMACB)); ++ ++ if (pAd->RxDescRing.AllocVa) ++ { ++ RTMP_FreeDescMemory(pAd, pAd->RxDescRing.AllocSize, pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocPa); ++ } ++ NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); ++ ++ if (pAd->MgmtDescRing.AllocVa) ++ { ++ RTMP_FreeDescMemory(pAd, pAd->MgmtDescRing.AllocSize, pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocPa); ++ } ++ NdisZeroMemory(&pAd->MgmtDescRing, sizeof(RTMP_DMABUF)); ++ ++ for (num = 0; num < NUM_OF_TX_RING; num++) ++ { ++ if (pAd->TxBufSpace[num].AllocVa) ++ { ++ RTMP_FreeFirstTxBuffer(pAd, pAd->TxBufSpace[num].AllocSize, FALSE, pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocPa); ++ } ++ NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); ++ ++ if (pAd->TxDescRing[num].AllocVa) ++ { ++ RTMP_FreeDescMemory(pAd, pAd->TxDescRing[num].AllocSize, pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocPa); ++ } ++ NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); ++ } ++ ++ if (pAd->FragFrame.pFragPacket) ++ RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<-- RTMPFreeTxRxRingMemory\n")); ++} ++ ++ ++/*************************************************************************** ++ * ++ * register related procedures. ++ * ++ **************************************************************************/ ++/* ++======================================================================== ++Routine Description: ++ Disable DMA. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28XXDMADisable( ++ IN RTMP_ADAPTER *pAd) ++{ ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ ++ ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); ++ GloCfg.word &= 0xff0; ++ GloCfg.field.EnTXWriteBackDDONE =1; ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Enable DMA. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28XXDMAEnable( ++ IN RTMP_ADAPTER *pAd) ++{ ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ int i = 0; ++ ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); ++ do ++ { ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); ++ if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ break; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); ++ RTMPusecDelay(1000); ++ i++; ++ }while ( i <200); ++ ++ RTMPusecDelay(50); ++ ++ GloCfg.field.EnTXWriteBackDDONE = 1; ++ GloCfg.field.WPDMABurstSIZE = 2; ++ GloCfg.field.EnableRxDMA = 1; ++ GloCfg.field.EnableTxDMA = 1; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); ++ ++} ++ ++ ++BOOLEAN AsicCheckCommanOk( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command) ++{ ++ UINT32 CmdStatus = 0, CID = 0, i; ++ UINT32 ThisCIDMask = 0; ++ ++ i = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, H2M_MAILBOX_CID, &CID); ++ // Find where the command is. Because this is randomly specified by firmware. ++ if ((CID & CID0MASK) == Command) ++ { ++ ThisCIDMask = CID0MASK; ++ break; ++ } ++ else if ((((CID & CID1MASK)>>8) & 0xff) == Command) ++ { ++ ThisCIDMask = CID1MASK; ++ break; ++ } ++ else if ((((CID & CID2MASK)>>16) & 0xff) == Command) ++ { ++ ThisCIDMask = CID2MASK; ++ break; ++ } ++ else if ((((CID & CID3MASK)>>24) & 0xff) == Command) ++ { ++ ThisCIDMask = CID3MASK; ++ break; ++ } ++ ++ RTMPusecDelay(100); ++ i++; ++ }while (i < 200); ++ ++ // Get CommandStatus Value ++ RTMP_IO_READ32(pAd, H2M_MAILBOX_STATUS, &CmdStatus); ++ ++ // This command's status is at the same position as command. So AND command position's bitmask to read status. ++ if (i < 200) ++ { ++ // If Status is 1, the comamnd is success. ++ if (((CmdStatus & ThisCIDMask) == 0x1) || ((CmdStatus & ThisCIDMask) == 0x100) ++ || ((CmdStatus & ThisCIDMask) == 0x10000) || ((CmdStatus & ThisCIDMask) == 0x1000000)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanOk CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); ++ return TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail1 CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", Command, CmdStatus)); ++ } ++ // Clear Command and Status. ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); ++ ++ return FALSE; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Write Beacon buffer to Asic. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28xx_UpdateBeaconToAsic( ++ IN RTMP_ADAPTER *pAd, ++ IN INT apidx, ++ IN ULONG FrameLen, ++ IN ULONG UpdatePos) ++{ ++ ULONG CapInfoPos = 0; ++ UCHAR *ptr, *ptr_update, *ptr_capinfo; ++ UINT i; ++ BOOLEAN bBcnReq = FALSE; ++ UCHAR bcn_idx = 0; ++ ++ ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s() : No valid Interface be found.\n", __func__)); ++ return; ++ } ++ ++ //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) ++ // || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) ++ // || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) ++ // ) ++ if (bBcnReq == FALSE) ++ { ++ /* when the ra interface is down, do not send its beacon frame */ ++ /* clear all zero */ ++ for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); ++ } ++ else ++ { ++ ptr = (PUCHAR)&pAd->BeaconTxWI; ++ for (i=0; iBeaconOffset[bcn_idx] + i, longptr); ++ ptr += 4; ++ } ++ ++ // Update CapabilityInfo in Beacon ++ for (i = CapInfoPos; i < (CapInfoPos+2); i++) ++ { ++ RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_capinfo); ++ ptr_capinfo ++; ++ } ++ ++ if (FrameLen > UpdatePos) ++ { ++ for (i= UpdatePos; i< (FrameLen); i++) ++ { ++ RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_update); ++ ptr_update ++; ++ } ++ } ++ ++ } ++ ++} ++ ++ ++VOID RT28xxPciStaAsicForceWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bFromTx) ++{ ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ return; ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); ++ return; ++ } ++ ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); ++ ++#ifdef RTMP_PCI_SUPPORT ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ // Support PCIe Advance Power Save ++ if (bFromTx == TRUE) ++ { ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ RTMPusecDelay(3000); ++ DBGPRINT(RT_DEBUG_TRACE, ("=======AsicForceWakeup===bFromTx\n")); ++ } ++ ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ ++ if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) ++ { ++ { ++ // end johnli ++ // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ } ++ else ++ { ++ // Must using 20MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ } ++ } ++ } ++ } ++ else ++#endif // RTMP_PCI_SUPPORT // ++ { ++ // PCI, 2860-PCIe ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ } ++ ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); ++ DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); ++} ++ ++ ++VOID RT28xxPciStaAsicSleepThenAutoWakeup( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) ++{ ++ BOOLEAN brc; ++ ++ if (pAd->StaCfg.bRadio == FALSE) ++ { ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ return; ++ } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ ULONG Now = 0; ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ return; ++ } ++ ++ NdisGetSystemUpTime(&Now); ++ // If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. ++ // Because Some AP can't queuing outgoing frames immediately. ++ if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) && (pAd->Mlme.LastSendNULLpsmTime <= Now)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu : RxCountSinceLastNULL = %lu. \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); ++ return; ++ } ++ else if ((pAd->RalinkCounters.RxCountSinceLastNULL > 0) && ((pAd->Mlme.LastSendNULLpsmTime + pAd->CommonCfg.BeaconPeriod) >= Now)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu: RxCountSinceLastNULL = %lu > 0 \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); ++ return; ++ } ++ ++ brc = RT28xxPciAsicRadioOff(pAd, DOT11POWERSAVE, TbttNumToNextWakeUp); ++ if (brc==TRUE) ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); ++ } ++ else ++ { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ // we have decided to SLEEP, so at least do it for a BEACON period. ++ if (TbttNumToNextWakeUp == 0) ++ TbttNumToNextWakeUp = 1; ++ ++ //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); ++ ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; ++ AutoWakeupCfg.field.EnableAutoWakeup = 1; ++ AutoWakeupCfg.field.AutoLeadTime = 5; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); ++ DBGPRINT(RT_DEBUG_TRACE, ("<-- %s, TbttNumToNextWakeUp=%d \n", __func__, TbttNumToNextWakeUp)); ++ } ++ ++} ++ ++#ifdef RTMP_PCI_SUPPORT ++VOID PsPollWakeExec( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ unsigned long flags; ++ ++ DBGPRINT(RT_DEBUG_TRACE,("-->PsPollWakeExec \n")); ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ if (pAd->Mlme.bPsPollTimerRunning) ++ { ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ } ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++VOID RadioOnExec( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ WPDMA_GLO_CFG_STRUC DmaCfg; ++ BOOLEAN Cancelled; ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ return; ++ } ++ ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ return; ++ } ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ if (pAd->StaCfg.bRadio == TRUE) ++ { ++ pAd->bPCIclkOff = FALSE; ++ RTMPRingCleanUp(pAd, QID_AC_BK); ++ RTMPRingCleanUp(pAd, QID_AC_BE); ++ RTMPRingCleanUp(pAd, QID_AC_VI); ++ RTMPRingCleanUp(pAd, QID_AC_VO); ++ RTMPRingCleanUp(pAd, QID_HCCA); ++ RTMPRingCleanUp(pAd, QID_MGMT); ++ RTMPRingCleanUp(pAd, QID_RX); ++ ++ // 2. Send wake up command. ++ AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); ++ // 2-1. wait command ok. ++ AsicCheckCommanOk(pAd, PowerWakeCID); ++ ++ // When PCI clock is off, don't want to service interrupt. So when back to clock on, enable interrupt. ++ //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, (DELAYINTMASK|RxINT)); ++ RTMP_ASIC_INTERRUPT_ENABLE(pAd); ++ ++ // 3. Enable Tx DMA. ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); ++ DmaCfg.field.EnableTxDMA = 1; ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); ++ ++ // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ } ++ else ++ { ++ // Must using 20MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ } ++ ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ ++ // Clear Radio off flag ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_ON); ++ ++ if (pAd->StaCfg.Psm == PWR_ACTIVE) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); ++ } ++ } ++ else ++ { ++ RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); ++ } ++} ++#endif // RTMP_PCI_SUPPORT // ++ ++ ++/* ++ ========================================================================== ++ Description: ++ This routine sends command to firmware and turn our chip to wake up mode from power save mode. ++ Both RadioOn and .11 power save function needs to call this routine. ++ Input: ++ Level = GUIRADIO_OFF : call this function is from Radio Off to Radio On. Need to restore PCI host value. ++ Level = other value : normal wake up function. ++ ++ ========================================================================== ++ */ ++BOOLEAN RT28xxPciAsicRadioOn( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level) ++{ ++ //WPDMA_GLO_CFG_STRUC DmaCfg; ++ BOOLEAN Cancelled; ++ //UINT32 MACValue; ++ ++ if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) ++ return FALSE; ++ ++#ifdef RTMP_PCI_SUPPORT ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ if ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n")); ++ // 1. Set PCI Link Control in Configuration Space. ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ RTMPusecDelay(6000); ++ } ++ } ++#endif // RTMP_PCI_SUPPORT // ++ ++ pAd->bPCIclkOff = FALSE; ++ // 2. Send wake up command. ++ AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); ++ pAd->bPCIclkOff = FALSE; ++ // 2-1. wait command ok. ++ AsicCheckCommanOk(pAd, PowerWakeCID); ++ RTMP_ASIC_INTERRUPT_ENABLE(pAd); ++ ++ ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ if (Level == GUI_IDLE_POWER_SAVE) ++ { ++ { ++ // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ { ++ if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ } ++ else ++ { ++ // Must using 20MHz. ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ } ++ } ++ ++ } ++ } ++ return TRUE; ++ ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ This routine sends command to firmware and turn our chip to power save mode. ++ Both RadioOff and .11 power save function needs to call this routine. ++ Input: ++ Level = GUIRADIO_OFF : GUI Radio Off mode ++ Level = DOT11POWERSAVE : 802.11 power save mode ++ Level = RTMP_HALT : When Disable device. ++ ++ ========================================================================== ++ */ ++BOOLEAN RT28xxPciAsicRadioOff( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level, ++ IN USHORT TbttNumToNextWakeUp) ++{ ++ WPDMA_GLO_CFG_STRUC DmaCfg; ++ UCHAR i, tempBBP_R3 = 0; ++ BOOLEAN brc = FALSE, Cancelled; ++ UINT32 TbTTTime = 0; ++ UINT32 PsPollTime = 0/*, MACValue*/; ++ ULONG BeaconPeriodTime; ++ UINT32 RxDmaIdx, RxCpuIdx; ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> Lv= %d, TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", Level,pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, pAd->RxRing.RxCpuIdx, pAd->RxRing.RxDmaIdx)); ++ ++ if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) ++ return FALSE; ++ ++ // Check Rx DMA busy status, if more than half is occupied, give up this radio off. ++ RTMP_IO_READ32(pAd, RX_DRX_IDX , &RxDmaIdx); ++ RTMP_IO_READ32(pAd, RX_CRX_IDX , &RxCpuIdx); ++ if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE/3)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return1. RxDmaIdx = %d , RxCpuIdx = %d. \n", RxDmaIdx, RxCpuIdx)); ++ return FALSE; ++ } ++ else if ((RxCpuIdx >= RxDmaIdx) && ((RxCpuIdx - RxDmaIdx) < RX_RING_SIZE/3)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return2. RxCpuIdx = %d. RxDmaIdx = %d , \n", RxCpuIdx, RxDmaIdx)); ++ return FALSE; ++ } ++ ++ // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. ++ pAd->bPCIclkOffDisableTx = TRUE; ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE) && pAd->OpMode == OPMODE_STA) ++ { ++ printk("==>fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE\n"); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ ++ if (Level == DOT11POWERSAVE) ++ { ++ RTMP_IO_READ32(pAd, TBTT_TIMER, &TbTTTime); ++ TbTTTime &= 0x1ffff; ++ // 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. ++ // TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms ++ if (((64*TbTTTime) <((LEAD_TIME*1024) + 40000)) && (TbttNumToNextWakeUp == 0)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("TbTTTime = 0x%x , give up this sleep. \n", TbTTTime)); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ pAd->bPCIclkOffDisableTx = FALSE; ++ return FALSE; ++ } ++ else ++ { ++ PsPollTime = (64*TbTTTime- LEAD_TIME*1024)/1000; ++ PsPollTime -= 3; ++ ++ BeaconPeriodTime = pAd->CommonCfg.BeaconPeriod*102/100; ++ if (TbttNumToNextWakeUp > 0) ++ PsPollTime += ((TbttNumToNextWakeUp -1) * BeaconPeriodTime); ++ ++ pAd->Mlme.bPsPollTimerRunning = TRUE; ++ RTMPSetTimer(&pAd->Mlme.PsPollTimer, PsPollTime); ++ } ++ } ++ } ++ ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ ++ // Set to 1R. ++ if (pAd->Antenna.field.RxPath > 1 && pAd->OpMode == OPMODE_STA) ++ { ++ tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, tempBBP_R3); ++ } ++ ++ // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ if ((INFRA_ON(pAd) || pAd->OpMode == OPMODE_AP) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); ++ } ++ else ++ { ++ // Must using 20MHz. ++ AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); ++ } ++ ++ if (Level != RTMP_HALT) ++ { ++ // Change Interrupt bitmask. ++ // When PCI clock is off, don't want to service interrupt. ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); ++ } ++ else ++ { ++ RTMP_ASIC_INTERRUPT_DISABLE(pAd); ++ } ++ ++ ++ RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); ++ // 2. Send Sleep command ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); ++ // send POWER-SAVE command to MCU. high-byte = 1 save power as much as possible. high byte = 0 save less power ++ AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x1); ++ // 2-1. Wait command success ++ // Status = 1 : success, Status = 2, already sleep, Status = 3, Maybe MAC is busy so can't finish this task. ++ brc = AsicCheckCommanOk(pAd, PowerSafeCID); ++ ++ // 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. ++ // If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. ++ if ((Level == DOT11POWERSAVE) && (brc == TRUE)) ++ { ++ AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. ++ // 3-1. Wait command success ++ AsicCheckCommanOk(pAd, PowerRadioOffCID); ++ } ++ else if (brc == TRUE) ++ { ++ AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. ++ // 3-1. Wait command success ++ AsicCheckCommanOk(pAd, PowerRadioOffCID); ++ } ++ ++ // 1. Wait DMA not busy ++ i = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); ++ if ((DmaCfg.field.RxDMABusy == 0) && (DmaCfg.field.TxDMABusy == 0)) ++ break; ++ RTMPusecDelay(20); ++ i++; ++ }while(i < 50); ++ ++ /* ++ if (i >= 50) ++ { ++ pAd->CheckDmaBusyCount++; ++ DBGPRINT(RT_DEBUG_TRACE, ("DMA Rx keeps busy. return on AsicRadioOff () CheckDmaBusyCount = %d \n", pAd->CheckDmaBusyCount)); ++ } ++ else ++ { ++ pAd->CheckDmaBusyCount = 0; ++ } ++ */ ++ ++ if (Level == DOT11POWERSAVE) ++ { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ //RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); ++ ++ // we have decided to SLEEP, so at least do it for a BEACON period. ++ if (TbttNumToNextWakeUp == 0) ++ TbttNumToNextWakeUp = 1; ++ ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ ++ // 1. Set auto wake up timer. ++ AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; ++ AutoWakeupCfg.field.EnableAutoWakeup = 1; ++ AutoWakeupCfg.field.AutoLeadTime = LEAD_TIME; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ } ++ ++#ifdef RTMP_PCI_SUPPORT ++ // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. ++ if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) ++ { ++ if ((brc == TRUE) && (i < 50)) ++ RTMPPCIeLinkCtrlSetting(pAd, 1); ++ } ++ // 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function ++ else if (pAd->OpMode == OPMODE_STA) ++ { ++ if ((brc == TRUE) && (i < 50)) ++ RTMPPCIeLinkCtrlSetting(pAd, 3); ++ } ++#endif // RTMP_PCI_SUPPORT // ++ ++ pAd->bPCIclkOffDisableTx = FALSE; ++ return TRUE; ++} ++ ++ ++ ++ ++VOID RT28xxPciMlmeRadioOn( ++ IN PRTMP_ADAPTER pAd) ++{ ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ ++ if ((pAd->OpMode == OPMODE_AP) || ++ ((pAd->OpMode == OPMODE_STA) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)))) ++ { ++ if (pAd->OpMode == OPMODE_AP) ++ RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); ++ ++ //NICResetFromError(pAd); ++ ++ RTMPRingCleanUp(pAd, QID_AC_BK); ++ RTMPRingCleanUp(pAd, QID_AC_BE); ++ RTMPRingCleanUp(pAd, QID_AC_VI); ++ RTMPRingCleanUp(pAd, QID_AC_VO); ++ RTMPRingCleanUp(pAd, QID_HCCA); ++ RTMPRingCleanUp(pAd, QID_MGMT); ++ RTMPRingCleanUp(pAd, QID_RX); ++ ++ if (pAd->OpMode == OPMODE_STA) ++ { ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ RTMPusecDelay(10000); ++ } ++ ++ // Enable Tx/Rx ++ RTMPEnableRxTx(pAd); ++ ++ // Clear Radio off flag ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_ON); ++ } ++ ++#ifdef RTMP_PCI_SUPPORT ++ if ((pAd->OpMode == OPMODE_STA) && ++ (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))) ++ { ++ BOOLEAN Cancelled; ++ ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ } ++#endif // RTMP_PCI_SUPPORT // ++} ++ ++ ++VOID RT28xxPciMlmeRadioOFF( ++ IN PRTMP_ADAPTER pAd) ++{ ++ BOOLEAN brc=TRUE; ++ ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ return; ++ ++ // Link down first if any association exists ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ { ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) ++ { ++ MLME_DISASSOC_REQ_STRUCT DisReq; ++ MLME_QUEUE_ELEM *pMsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ ++ if (pMsgElem) ++ { ++ COPY_MAC_ADDR(&DisReq.Addr, pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DISASSOC_STA_LEAVING; ++ ++ pMsgElem->Machine = ASSOC_STATE_MACHINE; ++ pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; ++ pMsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(pMsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ ++ MlmeDisassocReqAction(pAd, pMsgElem); ++ kfree(pMsgElem); ++ ++ RTMPusecDelay(1000); ++ } ++ } ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ ++ // Set Radio off flag ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ { ++ BOOLEAN Cancelled; ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ { ++ RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); ++ } ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ BOOLEAN Cancelled; ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ } ++ ++ // Link down first if any association exists ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) ++ LinkDown(pAd, FALSE); ++ RTMPusecDelay(10000); ++ //========================================== ++ // Clean up old bss table ++ BssTableInit(&pAd->ScanTab); ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ return; ++ } ++ } ++ ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_OFF); ++ ++ if (pAd->OpMode == OPMODE_AP) ++ brc=RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); ++ ++ if (brc==FALSE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); ++ } ++ ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE) && ++ (pAd->OpMode == OPMODE_STA)) ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); ++} ++ ++#endif // RTMP_MAC_PCI // +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +new file mode 100644 +index 0000000..ad8c601 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -0,0 +1,1216 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++#ifdef RTMP_MAC_USB ++ ++ ++#include "../rt_config.h" ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Initialize receive data structures. ++ ++Arguments: ++ pAd Pointer to our adapter ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_RESOURCES ++ ++Note: ++ Initialize all receive releated private buffer, include those define ++ in RTMP_ADAPTER structure and all private data structures. The mahor ++ work is to allocate buffer for each packet and chain buffer to ++ NDIS packet descriptor. ++======================================================================== ++*/ ++NDIS_STATUS NICInitRecv( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UCHAR i; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); ++ pObj = pObj; ++ ++ //InterlockedExchange(&pAd->PendingRx, 0); ++ pAd->PendingRx = 0; ++ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index ++ pAd->NextRxBulkInIndex = 0 ; //RX_RING_SIZE -1; // Rx Bulk pointer ++ pAd->NextRxBulkInPosition = 0; ++ ++ for (i = 0; i < (RX_RING_SIZE); i++) ++ { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ ++ //Allocate URB ++ pRxContext->pUrb = RTUSB_ALLOC_URB(0); ++ if (pRxContext->pUrb == NULL) ++ { ++ Status = NDIS_STATUS_RESOURCES; ++ goto out1; ++ } ++ ++ // Allocate transfer buffer ++ pRxContext->TransferBuffer = RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, &pRxContext->data_dma); ++ if (pRxContext->TransferBuffer == NULL) ++ { ++ Status = NDIS_STATUS_RESOURCES; ++ goto out1; ++ } ++ ++ NdisZeroMemory(pRxContext->TransferBuffer, MAX_RXBULK_SIZE); ++ ++ pRxContext->pAd = pAd; ++ pRxContext->pIrp = NULL; ++ pRxContext->InUse = FALSE; ++ pRxContext->IRPPending = FALSE; ++ pRxContext->Readable = FALSE; ++ //pRxContext->ReorderInUse = FALSE; ++ pRxContext->bRxHandling = FALSE; ++ pRxContext->BulkInOffset = 0; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitRecv(Status=%d)\n", Status)); ++ return Status; ++ ++out1: ++ for (i = 0; i < (RX_RING_SIZE); i++) ++ { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ ++ if (NULL != pRxContext->TransferBuffer) ++ { ++ RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, ++ pRxContext->TransferBuffer, pRxContext->data_dma); ++ pRxContext->TransferBuffer = NULL; ++ } ++ ++ if (NULL != pRxContext->pUrb) ++ { ++ RTUSB_UNLINK_URB(pRxContext->pUrb); ++ RTUSB_FREE_URB(pRxContext->pUrb); ++ pRxContext->pUrb = NULL; ++ } ++ } ++ ++ return Status; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Initialize transmit data structures. ++ ++Arguments: ++ pAd Pointer to our adapter ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_RESOURCES ++ ++Note: ++======================================================================== ++*/ ++NDIS_STATUS NICInitTransmit( ++ IN PRTMP_ADAPTER pAd) ++{ ++#define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \ ++ Context->pUrb = RTUSB_ALLOC_URB(0); \ ++ if (Context->pUrb == NULL) { \ ++ DBGPRINT(RT_DEBUG_ERROR, msg1); \ ++ Status = NDIS_STATUS_RESOURCES; \ ++ goto err1; } \ ++ \ ++ Context->TransferBuffer = \ ++ (TB_Type)RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, BufferSize, &Context->data_dma); \ ++ if (Context->TransferBuffer == NULL) { \ ++ DBGPRINT(RT_DEBUG_ERROR, msg2); \ ++ Status = NDIS_STATUS_RESOURCES; \ ++ goto err2; } ++ ++#define LM_URB_FREE(pObj, Context, BufferSize) \ ++ if (NULL != Context->pUrb) { \ ++ RTUSB_UNLINK_URB(Context->pUrb); \ ++ RTUSB_FREE_URB(Context->pUrb); \ ++ Context->pUrb = NULL; } \ ++ if (NULL != Context->TransferBuffer) { \ ++ RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \ ++ Context->TransferBuffer, \ ++ Context->data_dma); \ ++ Context->TransferBuffer = NULL; } ++ ++ UCHAR i, acidx; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ PTX_CONTEXT pNullContext = &(pAd->NullContext); ++ PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); ++ PTX_CONTEXT pRTSContext = &(pAd->RTSContext); ++ PTX_CONTEXT pMLMEContext = NULL; ++// PHT_TX_CONTEXT pHTTXContext = NULL; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ PVOID RingBaseVa; ++// RTMP_TX_RING *pTxRing; ++ RTMP_MGMT_RING *pMgmtRing; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n")); ++ pObj = pObj; ++ ++ // Init 4 set of Tx parameters ++ for(acidx = 0; acidx < NUM_OF_TX_RING; acidx++) ++ { ++ // Initialize all Transmit releated queues ++ InitializeQueueHeader(&pAd->TxSwQueue[acidx]); ++ ++ // Next Local tx ring pointer waiting for buck out ++ pAd->NextBulkOutIndex[acidx] = acidx; ++ pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag ++ //pAd->DataBulkDoneIdx[acidx] = 0; ++ } ++ ++ //pAd->NextMLMEIndex = 0; ++ //pAd->PushMgmtIndex = 0; ++ //pAd->PopMgmtIndex = 0; ++ //InterlockedExchange(&pAd->MgmtQueueSize, 0); ++ //InterlockedExchange(&pAd->TxCount, 0); ++ ++ //pAd->PrioRingFirstIndex = 0; ++ //pAd->PrioRingTxCnt = 0; ++ ++ do ++ { ++ // ++ // TX_RING_SIZE, 4 ACs ++ // ++ for(acidx=0; acidx<4; acidx++) ++ { ++ PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); ++ ++ NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT)); ++ //Allocate URB ++ LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, sizeof(HTTX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", acidx), ++ done, ++ ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", acidx), ++ out1); ++ ++ NdisZeroMemory(pHTTXContext->TransferBuffer->Aggregation, 4); ++ pHTTXContext->pAd = pAd; ++ pHTTXContext->pIrp = NULL; ++ pHTTXContext->IRPPending = FALSE; ++ pHTTXContext->NextBulkOutPosition = 0; ++ pHTTXContext->ENextBulkOutPosition = 0; ++ pHTTXContext->CurWritePosition = 0; ++ pHTTXContext->CurWriteRealPos = 0; ++ pHTTXContext->BulkOutSize = 0; ++ pHTTXContext->BulkOutPipeId = acidx; ++ pHTTXContext->bRingEmpty = TRUE; ++ pHTTXContext->bCopySavePad = FALSE; ++ pAd->BulkOutPending[acidx] = FALSE; ++ } ++ ++ ++ // ++ // MGMT_RING_SIZE ++ // ++ ++ // Allocate MGMT ring descriptor's memory ++ pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * sizeof(TX_CONTEXT); ++ os_alloc_mem(pAd, (PUCHAR *)(&pAd->MgmtDescRing.AllocVa), pAd->MgmtDescRing.AllocSize); ++ if (pAd->MgmtDescRing.AllocVa == NULL) ++ { ++ DBGPRINT_ERR(("Failed to allocate a big buffer for MgmtDescRing!\n")); ++ Status = NDIS_STATUS_RESOURCES; ++ goto out1; ++ } ++ NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); ++ RingBaseVa = pAd->MgmtDescRing.AllocVa; ++ ++ // Initialize MGMT Ring and associated buffer memory ++ pMgmtRing = &pAd->MgmtRing; ++ for (i = 0; i < MGMT_RING_SIZE; i++) ++ { ++ // link the pre-allocated Mgmt buffer to MgmtRing.Cell ++ pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT); ++ pMgmtRing->Cell[i].AllocVa = RingBaseVa; ++ pMgmtRing->Cell[i].pNdisPacket = NULL; ++ pMgmtRing->Cell[i].pNextNdisPacket = NULL; ++ ++ //Allocate URB for MLMEContext ++ pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); ++ if (pMLMEContext->pUrb == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", i)); ++ Status = NDIS_STATUS_RESOURCES; ++ goto out2; ++ } ++ pMLMEContext->pAd = pAd; ++ pMLMEContext->pIrp = NULL; ++ pMLMEContext->TransferBuffer = NULL; ++ pMLMEContext->InUse = FALSE; ++ pMLMEContext->IRPPending = FALSE; ++ pMLMEContext->bWaitingBulkOut = FALSE; ++ pMLMEContext->BulkOutSize = 0; ++ pMLMEContext->SelfIdx = i; ++ ++ // Offset to next ring descriptor address ++ RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT); ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", i)); ++ ++ //pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1); ++ pAd->MgmtRing.TxSwFreeIdx = MGMT_RING_SIZE; ++ pAd->MgmtRing.TxCpuIdx = 0; ++ pAd->MgmtRing.TxDmaIdx = 0; ++ ++ // ++ // BEACON_RING_SIZE ++ // ++ for(i=0; iBeaconContext[i]); ++ ++ ++ NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT)); ++ ++ //Allocate URB ++ LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", i), ++ out2, ++ ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", i), ++ out3); ++ ++ pBeaconContext->pAd = pAd; ++ pBeaconContext->pIrp = NULL; ++ pBeaconContext->InUse = FALSE; ++ pBeaconContext->IRPPending = FALSE; ++ } ++ ++ // ++ // NullContext ++ // ++ NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT)); ++ ++ //Allocate URB ++ LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX NullContext urb!! \n"), ++ out3, ++ ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"), ++ out4); ++ ++ pNullContext->pAd = pAd; ++ pNullContext->pIrp = NULL; ++ pNullContext->InUse = FALSE; ++ pNullContext->IRPPending = FALSE; ++ ++ // ++ // RTSContext ++ // ++ NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT)); ++ ++ //Allocate URB ++ LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX RTSContext urb!! \n"), ++ out4, ++ ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"), ++ out5); ++ ++ pRTSContext->pAd = pAd; ++ pRTSContext->pIrp = NULL; ++ pRTSContext->InUse = FALSE; ++ pRTSContext->IRPPending = FALSE; ++ ++ // ++ // PsPollContext ++ // ++ //NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); ++ //Allocate URB ++ LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), ++ out5, ++ ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"), ++ out6); ++ ++ pPsPollContext->pAd = pAd; ++ pPsPollContext->pIrp = NULL; ++ pPsPollContext->InUse = FALSE; ++ pPsPollContext->IRPPending = FALSE; ++ pPsPollContext->bAggregatible = FALSE; ++ pPsPollContext->LastOne = TRUE; ++ ++ } while (FALSE); ++ ++ ++done: ++ DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTransmit(Status=%d)\n", Status)); ++ ++ return Status; ++ ++ /* --------------------------- ERROR HANDLE --------------------------- */ ++out6: ++ LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); ++ ++out5: ++ LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); ++ ++out4: ++ LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); ++ ++out3: ++ for(i=0; iBeaconContext[i]); ++ if (pBeaconContext) ++ LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); ++ } ++ ++out2: ++ if (pAd->MgmtDescRing.AllocVa) ++ { ++ pMgmtRing = &pAd->MgmtRing; ++ for(i=0; iMgmtRing.Cell[i].AllocVa; ++ if (pMLMEContext) ++ LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); ++ } ++ os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); ++ pAd->MgmtDescRing.AllocVa = NULL; ++ } ++ ++out1: ++ for (acidx = 0; acidx < 4; acidx++) ++ { ++ PHT_TX_CONTEXT pTxContext = &(pAd->TxContext[acidx]); ++ if (pTxContext) ++ LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER)); ++ } ++ ++ // Here we didn't have any pre-allocated memory need to free. ++ ++ return Status; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Allocate DMA memory blocks for send, receive. ++ ++Arguments: ++ pAd Pointer to our adapter ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_FAILURE ++ NDIS_STATUS_RESOURCES ++ ++Note: ++======================================================================== ++*/ ++NDIS_STATUS RTMPAllocTxRxRingMemory( ++ IN PRTMP_ADAPTER pAd) ++{ ++// COUNTER_802_11 pCounter = &pAd->WlanCounters; ++ NDIS_STATUS Status; ++ INT num; ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); ++ ++ ++ do ++ { ++ // Init the CmdQ and CmdQLock ++ NdisAllocateSpinLock(&pAd->CmdQLock); ++ NdisAcquireSpinLock(&pAd->CmdQLock); ++ RTUSBInitializeCmdQ(&pAd->CmdQ); ++ NdisReleaseSpinLock(&pAd->CmdQLock); ++ ++ ++ NdisAllocateSpinLock(&pAd->MLMEBulkOutLock); ++ //NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[0]); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[1]); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[2]); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[3]); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[4]); ++ NdisAllocateSpinLock(&pAd->BulkOutLock[5]); ++ NdisAllocateSpinLock(&pAd->BulkInLock); ++ ++ for (num = 0; num < NUM_OF_TX_RING; num++) ++ { ++ NdisAllocateSpinLock(&pAd->TxContextQueueLock[num]); ++ } ++ ++ ++// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX ++ ++// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() ++// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() ++ ++// for(num=0; numBATable.BARecEntry[num].RxReRingLock); ++// } ++ ++ // ++ // Init Mac Table ++ // ++// MacTableInitialize(pAd); ++ ++ // ++ // Init send data structures and related parameters ++ // ++ Status = NICInitTransmit(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ break; ++ ++ // ++ // Init receive data structures and related parameters ++ // ++ Status = NICInitRecv(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ break; ++ ++ pAd->PendingIoCount = 1; ++ ++ } while (FALSE); ++ ++ NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); ++ pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); ++ ++ if (pAd->FragFrame.pFragPacket == NULL) ++ { ++ Status = NDIS_STATUS_RESOURCES; ++ } ++ ++ DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); ++ return Status; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Calls USB_InterfaceStop and frees memory allocated for the URBs ++ calls NdisMDeregisterDevice and frees the memory ++ allocated in VNetInitialize for the Adapter Object ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RTMPFreeTxRxRingMemory( ++ IN PRTMP_ADAPTER pAd) ++{ ++#define LM_URB_FREE(pObj, Context, BufferSize) \ ++ if (NULL != Context->pUrb) { \ ++ RTUSB_UNLINK_URB(Context->pUrb); \ ++ RTUSB_FREE_URB(Context->pUrb); \ ++ Context->pUrb = NULL; } \ ++ if (NULL != Context->TransferBuffer) { \ ++ RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \ ++ Context->TransferBuffer, \ ++ Context->data_dma); \ ++ Context->TransferBuffer = NULL; } ++ ++ ++ UINT i, acidx; ++ PTX_CONTEXT pNullContext = &pAd->NullContext; ++ PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; ++ PTX_CONTEXT pRTSContext = &pAd->RTSContext; ++// PHT_TX_CONTEXT pHTTXContext; ++ //PRTMP_REORDERBUF pReorderBuf; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++// RTMP_TX_RING *pTxRing; ++ ++ DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); ++ pObj = pObj; ++ ++ // Free all resources for the RECEIVE buffer queue. ++ for(i=0; i<(RX_RING_SIZE); i++) ++ { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ if (pRxContext) ++ LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE); ++ } ++ ++ // Free PsPoll frame resource ++ LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); ++ ++ // Free NULL frame resource ++ LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); ++ ++ // Free RTS frame resource ++ LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); ++ ++ ++ // Free beacon frame resource ++ for(i=0; iBeaconContext[i]); ++ if (pBeaconContext) ++ LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); ++ } ++ ++ ++ // Free mgmt frame resource ++ for(i = 0; i < MGMT_RING_SIZE; i++) ++ { ++ PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa; ++ //LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); ++ if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) ++ { ++ RTMPFreeNdisPacket(pAd, pAd->MgmtRing.Cell[i].pNdisPacket); ++ pAd->MgmtRing.Cell[i].pNdisPacket = NULL; ++ pMLMEContext->TransferBuffer = NULL; ++ } ++ ++ if (pMLMEContext) ++ { ++ if (NULL != pMLMEContext->pUrb) ++ { ++ RTUSB_UNLINK_URB(pMLMEContext->pUrb); ++ RTUSB_FREE_URB(pMLMEContext->pUrb); ++ pMLMEContext->pUrb = NULL; ++ } ++ } ++ } ++ if (pAd->MgmtDescRing.AllocVa) ++ os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); ++ ++ ++ // Free Tx frame resource ++ for (acidx = 0; acidx < 4; acidx++) ++ { ++ PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); ++ if (pHTTXContext) ++ LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER)); ++ } ++ ++ if (pAd->FragFrame.pFragPacket) ++ RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); ++ ++ for(i=0; i<6; i++) ++ { ++ NdisFreeSpinLock(&pAd->BulkOutLock[i]); ++ } ++ ++ NdisFreeSpinLock(&pAd->BulkInLock); ++ NdisFreeSpinLock(&pAd->MLMEBulkOutLock); ++ ++ NdisFreeSpinLock(&pAd->CmdQLock); ++ // Clear all pending bulk-out request flags. ++ RTUSB_CLEAR_BULK_FLAG(pAd, 0xffffffff); ++ ++// NdisFreeSpinLock(&pAd->MacTabLock); ++ ++// for(i=0; iBATable.BARecEntry[i].RxReRingLock); ++// } ++ ++ DBGPRINT(RT_DEBUG_ERROR, ("<--- RTMPFreeTxRxRingMemory\n")); ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Write WLAN MAC address to USB 2870. ++ ++Arguments: ++ pAd Pointer to our adapter ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ ++Note: ++======================================================================== ++*/ ++NDIS_STATUS RTUSBWriteHWMACAddress( ++ IN PRTMP_ADAPTER pAd) ++{ ++ MAC_DW0_STRUC StaMacReg0; ++ MAC_DW1_STRUC StaMacReg1; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ LARGE_INTEGER NOW; ++ ++ ++ // initialize the random number generator ++ RTMP_GetCurrentSystemTime(&NOW); ++ ++ if (pAd->bLocalAdminMAC != TRUE) ++ { ++ pAd->CurrentAddress[0] = pAd->PermanentAddress[0]; ++ pAd->CurrentAddress[1] = pAd->PermanentAddress[1]; ++ pAd->CurrentAddress[2] = pAd->PermanentAddress[2]; ++ pAd->CurrentAddress[3] = pAd->PermanentAddress[3]; ++ pAd->CurrentAddress[4] = pAd->PermanentAddress[4]; ++ pAd->CurrentAddress[5] = pAd->PermanentAddress[5]; ++ } ++ // Write New MAC address to MAC_CSR2 & MAC_CSR3 & let ASIC know our new MAC ++ StaMacReg0.field.Byte0 = pAd->CurrentAddress[0]; ++ StaMacReg0.field.Byte1 = pAd->CurrentAddress[1]; ++ StaMacReg0.field.Byte2 = pAd->CurrentAddress[2]; ++ StaMacReg0.field.Byte3 = pAd->CurrentAddress[3]; ++ StaMacReg1.field.Byte4 = pAd->CurrentAddress[4]; ++ StaMacReg1.field.Byte5 = pAd->CurrentAddress[5]; ++ StaMacReg1.field.U2MeMask = 0xff; ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("Local MAC = %02x:%02x:%02x:%02x:%02x:%02x\n", ++ pAd->CurrentAddress[0], pAd->CurrentAddress[1], pAd->CurrentAddress[2], ++ pAd->CurrentAddress[3], pAd->CurrentAddress[4], pAd->CurrentAddress[5])); ++ ++ RTUSBWriteMACRegister(pAd, MAC_ADDR_DW0, StaMacReg0.word); ++ RTUSBWriteMACRegister(pAd, MAC_ADDR_DW1, StaMacReg1.word); ++ return Status; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Disable DMA. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28XXDMADisable( ++ IN RTMP_ADAPTER *pAd) ++{ ++ // no use ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Enable DMA. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28XXDMAEnable( ++ IN RTMP_ADAPTER *pAd) ++{ ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ USB_DMA_CFG_STRUC UsbCfg; ++ int i = 0; ++ ++ ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); ++ do ++ { ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); ++ if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ break; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); ++ RTMPusecDelay(1000); ++ i++; ++ }while ( i <200); ++ ++ ++ RTMPusecDelay(50); ++ GloCfg.field.EnTXWriteBackDDONE = 1; ++ GloCfg.field.EnableRxDMA = 1; ++ GloCfg.field.EnableTxDMA = 1; ++ DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); ++ RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); ++ ++ UsbCfg.word = 0; ++ UsbCfg.field.phyclear = 0; ++ /* usb version is 1.1,do not use bulk in aggregation */ ++ if (pAd->BulkInMaxPacketSize == 512) ++ UsbCfg.field.RxBulkAggEn = 1; ++ /* for last packet, PBF might use more than limited, so minus 2 to prevent from error */ ++ UsbCfg.field.RxBulkAggLmt = (MAX_RXBULK_SIZE /1024)-3; ++ UsbCfg.field.RxBulkAggTOut = 0x80; /* 2006-10-18 */ ++ UsbCfg.field.RxBulkEn = 1; ++ UsbCfg.field.TxBulkEn = 1; ++ ++ RTUSBWriteMACRegister(pAd, USB_DMA_CFG, UsbCfg.word); ++ ++} ++ ++/******************************************************************** ++ * ++ * 2870 Beacon Update Related functions. ++ * ++ ********************************************************************/ ++ ++/* ++======================================================================== ++Routine Description: ++ Write Beacon buffer to Asic. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++VOID RT28xx_UpdateBeaconToAsic( ++ IN RTMP_ADAPTER *pAd, ++ IN INT apidx, ++ IN ULONG FrameLen, ++ IN ULONG UpdatePos) ++{ ++ PUCHAR pBeaconFrame = NULL; ++ UCHAR *ptr; ++ UINT i, padding; ++ BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ UINT32 longValue; ++// USHORT shortValue; ++ BOOLEAN bBcnReq = FALSE; ++ UCHAR bcn_idx = 0; ++ ++ ++ if (pBeaconFrame == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("pBeaconFrame is NULL!\n")); ++ return; ++ } ++ ++ if (pBeaconSync == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR,("pBeaconSync is NULL!\n")); ++ return; ++ } ++ ++ //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) || ++ // ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) ++ // ) ++ if (bBcnReq == FALSE) ++ { ++ /* when the ra interface is down, do not send its beacon frame */ ++ /* clear all zero */ ++ for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); ++ } ++ pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[bcn_idx], TXWI_SIZE); ++ } ++ else ++ { ++ ptr = (PUCHAR)&pAd->BeaconTxWI; ++ if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) ++ { // If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. ++ pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); ++ NdisMoveMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE); ++ } ++ ++ if ((pBeaconSync->BeaconBitMap & (1 << bcn_idx)) != (1 << bcn_idx)) ++ { ++ for (i=0; iBeaconOffset[bcn_idx] + i, longValue); ++ ptr += 4; ++ } ++ } ++ ++ ptr = pBeaconSync->BeaconBuf[bcn_idx]; ++ padding = (FrameLen & 0x01); ++ NdisZeroMemory((PUCHAR)(pBeaconFrame + FrameLen), padding); ++ FrameLen += padding; ++ for (i = 0 ; i < FrameLen /*HW_BEACON_OFFSET*/; i += 2) ++ { ++ if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) ++ { ++ NdisMoveMemory(ptr, pBeaconFrame, 2); ++ //shortValue = *ptr + (*(ptr+1)<<8); ++ //RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, shortValue); ++ RTUSBMultiWrite(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, ptr, 2); ++ } ++ ptr +=2; ++ pBeaconFrame += 2; ++ } ++ ++ pBeaconSync->BeaconBitMap |= (1 << bcn_idx); ++ ++ // For AP interface, set the DtimBitOn so that we can send Bcast/Mcast frame out after this beacon frame. ++} ++ ++} ++ ++ ++VOID RTUSBBssBeaconStop( ++ IN RTMP_ADAPTER *pAd) ++{ ++ BEACON_SYNC_STRUCT *pBeaconSync; ++ int i, offset; ++ BOOLEAN Cancelled = TRUE; ++ ++ pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ if (pBeaconSync && pBeaconSync->EnableBeacon) ++ { ++ INT NumOfBcn; ++ ++ { ++ NumOfBcn = MAX_MESH_NUM; ++ } ++ ++ RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); ++ ++ for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); ++ ++ for (offset=0; offsetBeaconOffset[i] + offset, 0x00); ++ ++ pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; ++ pBeaconSync->TimIELocationInBeacon[i] = 0; ++ } ++ pBeaconSync->BeaconBitMap = 0; ++ pBeaconSync->DtimBitOn = 0; ++ } ++} ++ ++ ++VOID RTUSBBssBeaconStart( ++ IN RTMP_ADAPTER *pAd) ++{ ++ int apidx; ++ BEACON_SYNC_STRUCT *pBeaconSync; ++// LARGE_INTEGER tsfTime, deltaTime; ++ ++ pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ if (pBeaconSync && pBeaconSync->EnableBeacon) ++ { ++ INT NumOfBcn; ++ ++ { ++ NumOfBcn = MAX_MESH_NUM; ++ } ++ ++ for(apidx=0; apidxBeaconBuf[apidx], HW_BEACON_OFFSET); ++ pBeaconSync->CapabilityInfoLocationInBeacon[apidx] = CapabilityInfoLocationInBeacon; ++ pBeaconSync->TimIELocationInBeacon[apidx] = TimIELocationInBeacon; ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[apidx], TXWI_SIZE); ++ } ++ pBeaconSync->BeaconBitMap = 0; ++ pBeaconSync->DtimBitOn = 0; ++ pAd->CommonCfg.BeaconUpdateTimer.Repeat = TRUE; ++ ++ pAd->CommonCfg.BeaconAdjust = 0; ++ pAd->CommonCfg.BeaconFactor = 0xffffffff / (pAd->CommonCfg.BeaconPeriod << 10); ++ pAd->CommonCfg.BeaconRemain = (0xffffffff % (pAd->CommonCfg.BeaconPeriod << 10)) + 1; ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBssBeaconStart:BeaconFactor=%d, BeaconRemain=%d!\n", ++ pAd->CommonCfg.BeaconFactor, pAd->CommonCfg.BeaconRemain)); ++ RTMPSetTimer(&pAd->CommonCfg.BeaconUpdateTimer, 10 /*pAd->CommonCfg.BeaconPeriod*/); ++ ++ } ++} ++ ++ ++VOID RTUSBBssBeaconInit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ BEACON_SYNC_STRUCT *pBeaconSync; ++ int i; ++ ++ os_alloc_mem(pAd, (PUCHAR *)(&pAd->CommonCfg.pBeaconSync), sizeof(BEACON_SYNC_STRUCT)); ++ //NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); ++ if (pAd->CommonCfg.pBeaconSync) ++ { ++ pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ NdisZeroMemory(pBeaconSync, sizeof(BEACON_SYNC_STRUCT)); ++ for(i=0; i < HW_BEACON_MAX_COUNT; i++) ++ { ++ NdisZeroMemory(pBeaconSync->BeaconBuf[i], HW_BEACON_OFFSET); ++ pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; ++ pBeaconSync->TimIELocationInBeacon[i] = 0; ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); ++ } ++ pBeaconSync->BeaconBitMap = 0; ++ ++ //RTMPInitTimer(pAd, &pAd->CommonCfg.BeaconUpdateTimer, GET_TIMER_FUNCTION(BeaconUpdateExec), pAd, TRUE); ++ pBeaconSync->EnableBeacon = TRUE; ++ } ++} ++ ++ ++VOID RTUSBBssBeaconExit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ BEACON_SYNC_STRUCT *pBeaconSync; ++ BOOLEAN Cancelled = TRUE; ++ int i; ++ ++ if (pAd->CommonCfg.pBeaconSync) ++ { ++ pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ pBeaconSync->EnableBeacon = FALSE; ++ RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); ++ pBeaconSync->BeaconBitMap = 0; ++ ++ for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); ++ pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; ++ pBeaconSync->TimIELocationInBeacon[i] = 0; ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); ++ } ++ ++ os_free_mem(pAd, pAd->CommonCfg.pBeaconSync); ++ pAd->CommonCfg.pBeaconSync = NULL; ++ } ++} ++ ++ ++/* ++ ======================================================================== ++ Routine Description: ++ For device work as AP mode but didn't have TBTT interrupt event, we need a mechanism ++ to update the beacon context in each Beacon interval. Here we use a periodical timer ++ to simulate the TBTT interrupt to handle the beacon context update. ++ ++ Arguments: ++ SystemSpecific1 - Not used. ++ FunctionContext - Pointer to our Adapter context. ++ SystemSpecific2 - Not used. ++ SystemSpecific3 - Not used. ++ ++ Return Value: ++ None ++ ++ ======================================================================== ++*/ ++VOID BeaconUpdateExec( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)FunctionContext; ++ LARGE_INTEGER tsfTime_a;//, tsfTime_b, deltaTime_exp, deltaTime_ab; ++ UINT32 delta, delta2MS, period2US, remain, remain_low, remain_high; ++// BOOLEAN positive; ++ ++ if (pAd->CommonCfg.IsUpdateBeacon==TRUE) ++ { ++ ReSyncBeaconTime(pAd); ++ ++ ++ } ++ ++ RTMP_IO_READ32(pAd, TSF_TIMER_DW0, &tsfTime_a.u.LowPart); ++ RTMP_IO_READ32(pAd, TSF_TIMER_DW1, &tsfTime_a.u.HighPart); ++ ++ ++ //positive=getDeltaTime(tsfTime_a, expectedTime, &deltaTime_exp); ++ period2US = (pAd->CommonCfg.BeaconPeriod << 10); ++ remain_high = pAd->CommonCfg.BeaconRemain * tsfTime_a.u.HighPart; ++ remain_low = tsfTime_a.u.LowPart % (pAd->CommonCfg.BeaconPeriod << 10); ++ remain = (remain_high + remain_low)%(pAd->CommonCfg.BeaconPeriod << 10); ++ delta = (pAd->CommonCfg.BeaconPeriod << 10) - remain; ++ ++ delta2MS = (delta>>10); ++ if (delta2MS > 150) ++ { ++ pAd->CommonCfg.BeaconUpdateTimer.TimerValue = 100; ++ pAd->CommonCfg.IsUpdateBeacon=FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.BeaconUpdateTimer.TimerValue = delta2MS + 10; ++ pAd->CommonCfg.IsUpdateBeacon=TRUE; ++ } ++ ++} ++ ++ ++/******************************************************************** ++ * ++ * 2870 Radio on/off Related functions. ++ * ++ ********************************************************************/ ++VOID RT28xxUsbMlmeRadioOn( ++ IN PRTMP_ADAPTER pAd) ++{ ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ ++ DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOn()\n")); ++ ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ return; ++ ++ { ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ RTMPusecDelay(10000); ++ } ++ //NICResetFromError(pAd); ++ ++ // Enable Tx/Rx ++ RTMPEnableRxTx(pAd); ++ ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ ++ // Clear Radio off flag ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ RTUSBBulkReceive(pAd); ++ ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_ON); ++} ++ ++ ++VOID RT28xxUsbMlmeRadioOFF( ++ IN PRTMP_ADAPTER pAd) ++{ ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ UINT32 Value, i; ++ ++ DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOFF()\n")); ++ ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ return; ++ ++ // Clear PMKID cache. ++ pAd->StaCfg.SavedPMKNum = 0; ++ RTMPZeroMemory(pAd->StaCfg.SavedPMK, (PMKID_NO * sizeof(BSSID_INFO))); ++ ++ // Link down first if any association exists ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ { ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) ++ { ++ MLME_DISASSOC_REQ_STRUCT DisReq; ++ MLME_QUEUE_ELEM *pMsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ ++ if (pMsgElem) ++ { ++ COPY_MAC_ADDR(&DisReq.Addr, pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DISASSOC_STA_LEAVING; ++ ++ pMsgElem->Machine = ASSOC_STATE_MACHINE; ++ pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; ++ pMsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(pMsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ ++ MlmeDisassocReqAction(pAd, pMsgElem); ++ kfree(pMsgElem); ++ ++ RTMPusecDelay(1000); ++ } ++ } ++ } ++ ++ // Set Radio off flag ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ { ++ // Link down first if any association exists ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) ++ LinkDown(pAd, FALSE); ++ RTMPusecDelay(10000); ++ ++ //========================================== ++ // Clean up old bss table ++ BssTableInit(&pAd->ScanTab); ++ } ++ ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_OFF); ++ ++ ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) ++ { ++ // Must using 40MHz. ++ AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); ++ } ++ else ++ { ++ // Must using 20MHz. ++ AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); ++ } ++ ++ // Disable Tx/Rx DMA ++ RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA ++ GloCfg.field.EnableTxDMA = 0; ++ GloCfg.field.EnableRxDMA = 0; ++ RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings ++ ++ // Waiting for DMA idle ++ i = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); ++ if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ break; ++ ++ RTMPusecDelay(1000); ++ }while (i++ < 100); ++ ++ // Disable MAC Tx/Rx ++ RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); ++ Value &= (0xfffffff3); ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); ++ ++ { ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); ++ } ++} ++ ++#endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2860/common/cmm_profile.c b/drivers/staging/rt2860/common/cmm_profile.c +new file mode 100644 +index 0000000..2d28524 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_profile.c +@@ -0,0 +1,1736 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++#include "../rt_config.h" ++ ++ ++#define ETH_MAC_ADDR_STR_LEN 17 // in format of xx:xx:xx:xx:xx:xx ++ ++// We assume the s1 is a sting, s2 is a memory space with 6 bytes. and content of s1 will be changed. ++BOOLEAN rtstrmactohex(PSTRING s1, PSTRING s2) ++{ ++ int i = 0; ++ PSTRING ptokS = s1, ptokE = s1; ++ ++ if (strlen(s1) != ETH_MAC_ADDR_STR_LEN) ++ return FALSE; ++ ++ while((*ptokS) != '\0') ++ { ++ if((ptokE = strchr(ptokS, ':')) != NULL) ++ *ptokE++ = '\0'; ++ if ((strlen(ptokS) != 2) || (!isxdigit(*ptokS)) || (!isxdigit(*(ptokS+1)))) ++ break; // fail ++ AtoH(ptokS, (PUCHAR)&s2[i++], 1); ++ ptokS = ptokE; ++ if (i == 6) ++ break; // parsing finished ++ } ++ ++ return ( i == 6 ? TRUE : FALSE); ++ ++} ++ ++ ++// we assume the s1 and s2 both are strings. ++BOOLEAN rtstrcasecmp(PSTRING s1, PSTRING s2) ++{ ++ PSTRING p1 = s1, p2 = s2; ++ ++ if (strlen(s1) != strlen(s2)) ++ return FALSE; ++ ++ while(*p1 != '\0') ++ { ++ if((*p1 != *p2) && ((*p1 ^ *p2) != 0x20)) ++ return FALSE; ++ p1++; ++ p2++; ++ } ++ ++ return TRUE; ++} ++ ++// we assume the s1 (buffer) and s2 (key) both are strings. ++PSTRING rtstrstruncasecmp(PSTRING s1, PSTRING s2) ++{ ++ INT l1, l2, i; ++ char temp1, temp2; ++ ++ l2 = strlen(s2); ++ if (!l2) ++ return (char *) s1; ++ ++ l1 = strlen(s1); ++ ++ while (l1 >= l2) ++ { ++ l1--; ++ ++ for(i=0; i= l2) ++ { ++ l1--; ++ if (!memcmp(s1,s2,l2)) ++ return s1; ++ s1++; ++ } ++ ++ return NULL; ++} ++ ++/** ++ * rstrtok - Split a string into tokens ++ * @s: The string to be searched ++ * @ct: The characters to search for ++ * * WARNING: strtok is deprecated, use strsep instead. However strsep is not compatible with old architecture. ++ */ ++PSTRING __rstrtok; ++PSTRING rstrtok(PSTRING s,const PSTRING ct) ++{ ++ PSTRING sbegin, send; ++ ++ sbegin = s ? s : __rstrtok; ++ if (!sbegin) ++ { ++ return NULL; ++ } ++ ++ sbegin += strspn(sbegin,ct); ++ if (*sbegin == '\0') ++ { ++ __rstrtok = NULL; ++ return( NULL ); ++ } ++ ++ send = strpbrk( sbegin, ct); ++ if (send && *send != '\0') ++ *send++ = '\0'; ++ ++ __rstrtok = send; ++ ++ return (sbegin); ++} ++ ++/** ++ * delimitcnt - return the count of a given delimiter in a given string. ++ * @s: The string to be searched. ++ * @ct: The delimiter to search for. ++ * Notice : We suppose the delimiter is a single-char string(for example : ";"). ++ */ ++INT delimitcnt(PSTRING s,PSTRING ct) ++{ ++ INT count = 0; ++ /* point to the beginning of the line */ ++ PSTRING token = s; ++ ++ for ( ;; ) ++ { ++ token = strpbrk(token, ct); /* search for delimiters */ ++ ++ if ( token == NULL ) ++ { ++ /* advanced to the terminating null character */ ++ break; ++ } ++ /* skip the delimiter */ ++ ++token; ++ ++ /* ++ * Print the found text: use len with %.*s to specify field width. ++ */ ++ ++ /* accumulate delimiter count */ ++ ++count; ++ } ++ return count; ++} ++ ++/* ++ * converts the Internet host address from the standard numbers-and-dots notation ++ * into binary data. ++ * returns nonzero if the address is valid, zero if not. ++ */ ++int rtinet_aton(PSTRING cp, unsigned int *addr) ++{ ++ unsigned int val; ++ int base, n; ++ STRING c; ++ unsigned int parts[4]; ++ unsigned int *pp = parts; ++ ++ for (;;) ++ { ++ /* ++ * Collect number up to ``.''. ++ * Values are specified as for C: ++ * 0x=hex, 0=octal, other=decimal. ++ */ ++ val = 0; ++ base = 10; ++ if (*cp == '0') ++ { ++ if (*++cp == 'x' || *cp == 'X') ++ base = 16, cp++; ++ else ++ base = 8; ++ } ++ while ((c = *cp) != '\0') ++ { ++ if (isdigit((unsigned char) c)) ++ { ++ val = (val * base) + (c - '0'); ++ cp++; ++ continue; ++ } ++ if (base == 16 && isxdigit((unsigned char) c)) ++ { ++ val = (val << 4) + ++ (c + 10 - (islower((unsigned char) c) ? 'a' : 'A')); ++ cp++; ++ continue; ++ } ++ break; ++ } ++ if (*cp == '.') ++ { ++ /* ++ * Internet format: a.b.c.d a.b.c (with c treated as 16-bits) ++ * a.b (with b treated as 24 bits) ++ */ ++ if (pp >= parts + 3 || val > 0xff) ++ return 0; ++ *pp++ = val, cp++; ++ } ++ else ++ break; ++ } ++ ++ /* ++ * Check for trailing junk. ++ */ ++ while (*cp) ++ if (!isspace((unsigned char) *cp++)) ++ return 0; ++ ++ /* ++ * Concoct the address according to the number of parts specified. ++ */ ++ n = pp - parts + 1; ++ switch (n) ++ { ++ ++ case 1: /* a -- 32 bits */ ++ break; ++ ++ case 2: /* a.b -- 8.24 bits */ ++ if (val > 0xffffff) ++ return 0; ++ val |= parts[0] << 24; ++ break; ++ ++ case 3: /* a.b.c -- 8.8.16 bits */ ++ if (val > 0xffff) ++ return 0; ++ val |= (parts[0] << 24) | (parts[1] << 16); ++ break; ++ ++ case 4: /* a.b.c.d -- 8.8.8.8 bits */ ++ if (val > 0xff) ++ return 0; ++ val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); ++ break; ++ } ++ ++ *addr = htonl(val); ++ return 1; ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Find key section for Get key parameter. ++ ++ Arguments: ++ buffer Pointer to the buffer to start find the key section ++ section the key of the secion to be find ++ ++ Return Value: ++ NULL Fail ++ Others Success ++ ======================================================================== ++*/ ++PSTRING RTMPFindSection( ++ IN PSTRING buffer) ++{ ++ STRING temp_buf[32]; ++ PSTRING ptr; ++ ++ strcpy(temp_buf, "Default"); ++ ++ if((ptr = rtstrstr(buffer, temp_buf)) != NULL) ++ return (ptr+strlen("\n")); ++ else ++ return NULL; ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Get key parameter. ++ ++ Arguments: ++ key Pointer to key string ++ dest Pointer to destination ++ destsize The datasize of the destination ++ buffer Pointer to the buffer to start find the key ++ bTrimSpace Set true if you want to strip the space character of the result pattern ++ ++ Return Value: ++ TRUE Success ++ FALSE Fail ++ ++ Note: ++ This routine get the value with the matched key (case case-sensitive) ++ For SSID and security key related parameters, we SHALL NOT trim the space(' ') character. ++ ======================================================================== ++*/ ++INT RTMPGetKeyParameter( ++ IN PSTRING key, ++ OUT PSTRING dest, ++ IN INT destsize, ++ IN PSTRING buffer, ++ IN BOOLEAN bTrimSpace) ++{ ++ PSTRING pMemBuf, temp_buf1 = NULL, temp_buf2 = NULL; ++ PSTRING start_ptr, end_ptr; ++ PSTRING ptr; ++ PSTRING offset = NULL; ++ INT len, keyLen; ++ ++ ++ keyLen = strlen(key); ++ os_alloc_mem(NULL, (PUCHAR *)&pMemBuf, MAX_PARAM_BUFFER_SIZE * 2); ++ if (pMemBuf == NULL) ++ return (FALSE); ++ ++ memset(pMemBuf, 0, MAX_PARAM_BUFFER_SIZE * 2); ++ temp_buf1 = pMemBuf; ++ temp_buf2 = (PSTRING)(pMemBuf + MAX_PARAM_BUFFER_SIZE); ++ ++ ++ //find section ++ if((offset = RTMPFindSection(buffer)) == NULL) ++ { ++ os_free_mem(NULL, (PUCHAR)pMemBuf); ++ return (FALSE); ++ } ++ ++ strcpy(temp_buf1, "\n"); ++ strcat(temp_buf1, key); ++ strcat(temp_buf1, "="); ++ ++ //search key ++ if((start_ptr=rtstrstr(offset, temp_buf1)) == NULL) ++ { ++ os_free_mem(NULL, (PUCHAR)pMemBuf); ++ return (FALSE); ++ } ++ ++ start_ptr += strlen("\n"); ++ if((end_ptr = rtstrstr(start_ptr, "\n"))==NULL) ++ end_ptr = start_ptr+strlen(start_ptr); ++ ++ if (end_ptr= 1 ) && (KeyIdx <= 4)) ++ pAd->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1); ++ else ++ pAd->StaCfg.DefaultKeyId = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyID(0~3)=%d\n", pAd->StaCfg.DefaultKeyId)); ++ } ++ } ++ ++ ++ for (idx = 0; idx < 4; idx++) ++ { ++ sprintf(tok_str, "Key%dType", idx + 1); ++ //Key1Type ++ if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, TRUE)) ++ { ++ for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) ++ { ++ /* ++ do sanity check for KeyType length; ++ or in station mode, the KeyType length > 1, ++ the code will overwrite the stack of caller ++ (RTMPSetProfileParameters) and cause srcbuf = NULL ++ */ ++ if (i < MAX_MBSSID_NUM) ++ KeyType[i] = simple_strtol(macptr, 0, 10); ++ } ++ ++ { ++ sprintf(tok_str, "Key%dStr", idx + 1); ++ if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, FALSE)) ++ { ++ rtmp_parse_key_buffer_from_file(pAd, tmpbuf, KeyType[BSS0], BSS0, idx); ++ } ++ } ++ } ++ } ++} ++ ++ ++ ++static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer) ++{ ++ PSTRING macptr; ++ INT i=0; ++ BOOLEAN bWmmEnable = FALSE; ++ ++ //WmmCapable ++ if(RTMPGetKeyParameter("WmmCapable", tmpbuf, 32, buffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable ++ { ++ pAd->CommonCfg.bWmmCapable = TRUE; ++ bWmmEnable = TRUE; ++ } ++ else //Disable ++ { ++ pAd->CommonCfg.bWmmCapable = FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("WmmCapable=%d\n", pAd->CommonCfg.bWmmCapable)); ++ } ++ ++ ++ //AckPolicy for AC_BK, AC_BE, AC_VI, AC_VO ++ if(RTMPGetKeyParameter("AckPolicy", tmpbuf, 32, buffer, TRUE)) ++ { ++ for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) ++ { ++ pAd->CommonCfg.AckPolicy[i] = (UCHAR)simple_strtol(macptr, 0, 10); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AckPolicy[%d]=%d\n", i, pAd->CommonCfg.AckPolicy[i])); ++ } ++ } ++ ++ if (bWmmEnable) ++ { ++ //APSDCapable ++ if(RTMPGetKeyParameter("APSDCapable", tmpbuf, 10, buffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable ++ pAd->CommonCfg.bAPSDCapable = TRUE; ++ else ++ pAd->CommonCfg.bAPSDCapable = FALSE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("APSDCapable=%d\n", pAd->CommonCfg.bAPSDCapable)); ++ } ++ ++ //MaxSPLength ++ if(RTMPGetKeyParameter("MaxSPLength", tmpbuf, 10, buffer, TRUE)) ++ { ++ pAd->CommonCfg.MaxSPLength = simple_strtol(tmpbuf, 0, 10); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("MaxSPLength=%d\n", pAd->CommonCfg.MaxSPLength)); ++ } ++ ++ //APSDAC for AC_BE, AC_BK, AC_VI, AC_VO ++ if(RTMPGetKeyParameter("APSDAC", tmpbuf, 32, buffer, TRUE)) ++ { ++ BOOLEAN apsd_ac[4]; ++ ++ for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) ++ { ++ apsd_ac[i] = (BOOLEAN)simple_strtol(macptr, 0, 10); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("APSDAC%d %d\n", i, apsd_ac[i])); ++ } ++ ++ pAd->CommonCfg.bAPSDAC_BE = apsd_ac[0]; ++ pAd->CommonCfg.bAPSDAC_BK = apsd_ac[1]; ++ pAd->CommonCfg.bAPSDAC_VI = apsd_ac[2]; ++ pAd->CommonCfg.bAPSDAC_VO = apsd_ac[3]; ++ ++ pAd->CommonCfg.bACMAPSDTr[0] = apsd_ac[0]; ++ pAd->CommonCfg.bACMAPSDTr[1] = apsd_ac[1]; ++ pAd->CommonCfg.bACMAPSDTr[2] = apsd_ac[2]; ++ pAd->CommonCfg.bACMAPSDTr[3] = apsd_ac[3]; ++ } ++ } ++ ++} ++ ++ ++static void HTParametersHook( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING pValueStr, ++ IN PSTRING pInput) ++{ ++ ++ long Value; ++ ++ if (RTMPGetKeyParameter("HT_PROTECT", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bHTProtect = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bHTProtect = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Protection = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ if (RTMPGetKeyParameter("HT_MIMOPSEnable", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bMIMOPSEnable = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bMIMOPSEnable = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPSEnable = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ ++ if (RTMPGetKeyParameter("HT_MIMOPSMode", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value > MMPS_ENABLE) ++ { ++ pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; ++ } ++ else ++ { ++ //TODO: add mimo power saving mechanism ++ pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; ++ //pAd->CommonCfg.BACapability.field.MMPSmode = Value; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPS Mode = %d\n", (INT) Value)); ++ } ++ ++ if (RTMPGetKeyParameter("HT_BADecline", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bBADecline = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bBADecline = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Decline = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ ++ if (RTMPGetKeyParameter("HT_DisableReordering", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bDisableReordering = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bDisableReordering = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: DisableReordering = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ if (RTMPGetKeyParameter("HT_AutoBA", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.BACapability.field.AutoBA = FALSE; ++ pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; ++ } ++ else ++ { ++ pAd->CommonCfg.BACapability.field.AutoBA = TRUE; ++ pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; ++ } ++ pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ // Tx_+HTC frame ++ if (RTMPGetKeyParameter("HT_HTC", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->HTCEnable = FALSE; ++ } ++ else ++ { ++ pAd->HTCEnable = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ // Enable HT Link Adaptation Control ++ if (RTMPGetKeyParameter("HT_LinkAdapt", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->bLinkAdapt = FALSE; ++ } ++ else ++ { ++ pAd->HTCEnable = TRUE; ++ pAd->bLinkAdapt = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Link Adaptation Control = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); ++ } ++ ++ // Reverse Direction Mechanism ++ if (RTMPGetKeyParameter("HT_RDG", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bRdg = FALSE; ++ } ++ else ++ { ++ pAd->HTCEnable = TRUE; ++ pAd->CommonCfg.bRdg = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: RDG = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); ++ } ++ ++ ++ ++ ++ // Tx A-MSUD ? ++ if (RTMPGetKeyParameter("HT_AMSDU", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx A-MSDU = %s\n", (Value==0) ? "Disable" : "Enable")); ++ } ++ ++ // MPDU Density ++ if (RTMPGetKeyParameter("HT_MpduDensity", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value <=7 && Value >= 0) ++ { ++ pAd->CommonCfg.BACapability.field.MpduDensity = Value; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d\n", (INT) Value)); ++ } ++ else ++ { ++ pAd->CommonCfg.BACapability.field.MpduDensity = 4; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d (Default)\n", 4)); ++ } ++ } ++ ++ // Max Rx BA Window Size ++ if (RTMPGetKeyParameter("HT_BAWinSize", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value >=1 && Value <= 64) ++ { ++ pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = %d\n", (INT) Value)); ++ } ++ else ++ { ++ pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = 64 (Defualt)\n")); ++ } ++ ++ } ++ ++ // Guard Interval ++ if (RTMPGetKeyParameter("HT_GI", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value == GI_400) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Guard Interval = %s\n", (Value==GI_400) ? "400" : "800" )); ++ } ++ ++ // HT Operation Mode : Mixed Mode , Green Field ++ if (RTMPGetKeyParameter("HT_OpMode", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value == HTMODE_GF) ++ { ++ ++ pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Operate Mode = %s\n", (Value==HTMODE_GF) ? "Green Field" : "Mixed Mode" )); ++ } ++ ++ // Fixed Tx mode : CCK, OFDM ++ if (RTMPGetKeyParameter("FixedTxMode", pValueStr, 25, pInput, TRUE)) ++ { ++ UCHAR fix_tx_mode; ++ ++ { ++ fix_tx_mode = FIXED_TXMODE_HT; ++ ++ if (strcmp(pValueStr, "OFDM") == 0 || strcmp(pValueStr, "ofdm") == 0) ++ { ++ fix_tx_mode = FIXED_TXMODE_OFDM; ++ } ++ else if (strcmp(pValueStr, "CCK") == 0 || strcmp(pValueStr, "cck") == 0) ++ { ++ fix_tx_mode = FIXED_TXMODE_CCK; ++ } ++ else if (strcmp(pValueStr, "HT") == 0 || strcmp(pValueStr, "ht") == 0) ++ { ++ fix_tx_mode = FIXED_TXMODE_HT; ++ } ++ else ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ // 1 : CCK ++ // 2 : OFDM ++ // otherwise : HT ++ if (Value == FIXED_TXMODE_CCK || Value == FIXED_TXMODE_OFDM) ++ fix_tx_mode = Value; ++ else ++ fix_tx_mode = FIXED_TXMODE_HT; ++ } ++ ++ pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; ++ DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", fix_tx_mode)); ++ ++ } ++ } ++ ++ ++ // Channel Width ++ if (RTMPGetKeyParameter("HT_BW", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value == BW_40) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" )); ++ } ++ ++ if (RTMPGetKeyParameter("HT_EXTCHA", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value == 0) ++ { ++ ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Ext Channel = %s\n", (Value==0) ? "BELOW" : "ABOVE" )); ++ } ++ ++ // MSC ++ if (RTMPGetKeyParameter("HT_MCS", pValueStr, 50, pInput, TRUE)) ++ { ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++// if ((Value >= 0 && Value <= 15) || (Value == 32)) ++ if ((Value >= 0 && Value <= 23) || (Value == 32)) // 3*3 ++ { ++ pAd->StaCfg.DesiredTransmitSetting.field.MCS = Value; ++ pAd->StaCfg.bAutoTxRateSwitch = FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = %d\n", pAd->StaCfg.DesiredTransmitSetting.field.MCS)); ++ } ++ else ++ { ++ pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; ++ pAd->StaCfg.bAutoTxRateSwitch = TRUE; ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n")); ++ } ++ } ++ } ++ ++ // STBC ++ if (RTMPGetKeyParameter("HT_STBC", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == STBC_USE) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: STBC = %d\n", pAd->CommonCfg.RegTransmitSetting.field.STBC)); ++ } ++ ++ // 40_Mhz_Intolerant ++ if (RTMPGetKeyParameter("HT_40MHZ_INTOLERANT", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bForty_Mhz_Intolerant = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bForty_Mhz_Intolerant = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: 40MHZ INTOLERANT = %d\n", pAd->CommonCfg.bForty_Mhz_Intolerant)); ++ } ++ //HT_TxStream ++ if(RTMPGetKeyParameter("HT_TxStream", pValueStr, 10, pInput, TRUE)) ++ { ++ switch (simple_strtol(pValueStr, 0, 10)) ++ { ++ case 1: ++ pAd->CommonCfg.TxStream = 1; ++ break; ++ case 2: ++ pAd->CommonCfg.TxStream = 2; ++ break; ++ case 3: // 3*3 ++ default: ++ pAd->CommonCfg.TxStream = 3; ++ ++ if (pAd->MACVersion < RALINK_2883_VERSION) ++ pAd->CommonCfg.TxStream = 2; // only 2 tx streams for RT2860 series ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx Stream = %d\n", pAd->CommonCfg.TxStream)); ++ } ++ //HT_RxStream ++ if(RTMPGetKeyParameter("HT_RxStream", pValueStr, 10, pInput, TRUE)) ++ { ++ switch (simple_strtol(pValueStr, 0, 10)) ++ { ++ case 1: ++ pAd->CommonCfg.RxStream = 1; ++ break; ++ case 2: ++ pAd->CommonCfg.RxStream = 2; ++ break; ++ case 3: ++ default: ++ pAd->CommonCfg.RxStream = 3; ++ ++ if (pAd->MACVersion < RALINK_2883_VERSION) ++ pAd->CommonCfg.RxStream = 2; // only 2 rx streams for RT2860 series ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Rx Stream = %d\n", pAd->CommonCfg.RxStream)); ++ } ++ //2008/11/05: KH add to support Antenna power-saving of AP<-- ++ //Green AP ++ if(RTMPGetKeyParameter("GreenAP", pValueStr, 10, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ if (Value == 0) ++ { ++ pAd->CommonCfg.bGreenAPEnable = FALSE; ++ } ++ else ++ { ++ pAd->CommonCfg.bGreenAPEnable = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Green AP= %d\n", pAd->CommonCfg.bGreenAPEnable)); ++ } ++ ++ // HT_DisallowTKIP ++ if (RTMPGetKeyParameter("HT_DisallowTKIP", pValueStr, 25, pInput, TRUE)) ++ { ++ Value = simple_strtol(pValueStr, 0, 10); ++ ++ if (Value == 1) ++ { ++ pAd->CommonCfg.HT_DisallowTKIP = TRUE; ++ } ++ else ++ { ++ pAd->CommonCfg.HT_DisallowTKIP = FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("HT: Disallow TKIP mode = %s\n", (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "ON" : "OFF" )); ++ } ++ ++ ++ //2008/11/05:KH add to support Antenna power-saving of AP--> ++} ++ ++ ++NDIS_STATUS RTMPSetProfileParameters( ++ IN RTMP_ADAPTER *pAd, ++ IN PSTRING pBuffer) ++{ ++ PSTRING tmpbuf; ++ ULONG RtsThresh; ++ ULONG FragThresh; ++ PSTRING macptr; ++ INT i = 0, retval; ++ tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); ++ if(tmpbuf == NULL) ++ return NDIS_STATUS_FAILURE; ++ ++ do ++ { ++ // set file parameter to portcfg ++ //CountryRegion ++ if(RTMPGetKeyParameter("CountryRegion", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_24G); ++ DBGPRINT(RT_DEBUG_TRACE, ("CountryRegion=%d\n", pAd->CommonCfg.CountryRegion)); ++ } ++ //CountryRegionABand ++ if(RTMPGetKeyParameter("CountryRegionABand", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_5G); ++ DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); ++ } ++#ifdef RTMP_EFUSE_SUPPORT ++#ifdef RT30xx ++ //EfuseBufferMode ++ if(RTMPGetKeyParameter("EfuseBufferMode", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ pAd->bEEPROMFile = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ DBGPRINT(RT_DEBUG_TRACE, ("EfuseBufferMode=%d\n", pAd->bUseEfuse)); ++ } ++#endif // RT30xx // ++#endif // RTMP_EFUSE_SUPPORT // ++ //CountryCode ++ if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2); ++ if (strlen((PSTRING) pAd->CommonCfg.CountryCode) != 0) ++ { ++ pAd->CommonCfg.bCountryFlag = TRUE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("CountryCode=%s\n", pAd->CommonCfg.CountryCode)); ++ } ++ //ChannelGeography ++ if(RTMPGetKeyParameter("ChannelGeography", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ UCHAR Geography = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ if (Geography <= BOTH) ++ { ++ pAd->CommonCfg.Geography = Geography; ++ pAd->CommonCfg.CountryCode[2] = ++ (pAd->CommonCfg.Geography == BOTH) ? ' ' : ((pAd->CommonCfg.Geography == IDOR) ? 'I' : 'O'); ++ DBGPRINT(RT_DEBUG_TRACE, ("ChannelGeography=%d\n", pAd->CommonCfg.Geography)); ++ } ++ } ++ else ++ { ++ pAd->CommonCfg.Geography = BOTH; ++ pAd->CommonCfg.CountryCode[2] = ' '; ++ } ++ ++ { ++ //SSID ++ if (RTMPGetKeyParameter("SSID", tmpbuf, 256, pBuffer, FALSE)) ++ { ++ if (strlen(tmpbuf) <= 32) ++ { ++ pAd->CommonCfg.SsidLen = (UCHAR) strlen(tmpbuf); ++ NdisZeroMemory(pAd->CommonCfg.Ssid, NDIS_802_11_LENGTH_SSID); ++ NdisMoveMemory(pAd->CommonCfg.Ssid, tmpbuf, pAd->CommonCfg.SsidLen); ++ pAd->MlmeAux.AutoReconnectSsidLen = pAd->CommonCfg.SsidLen; ++ NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, NDIS_802_11_LENGTH_SSID); ++ NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, tmpbuf, pAd->MlmeAux.AutoReconnectSsidLen); ++ pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; ++ NdisZeroMemory(pAd->MlmeAux.Ssid, NDIS_802_11_LENGTH_SSID); ++ NdisMoveMemory(pAd->MlmeAux.Ssid, tmpbuf, pAd->MlmeAux.SsidLen); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::(SSID=%s)\n", __func__, tmpbuf)); ++ } ++ } ++ } ++ ++ { ++ //NetworkType ++ if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, pBuffer, TRUE)) ++ { ++ pAd->bConfigChanged = TRUE; ++ if (strcmp(tmpbuf, "Adhoc") == 0) ++ pAd->StaCfg.BssType = BSS_ADHOC; ++ else //Default Infrastructure mode ++ pAd->StaCfg.BssType = BSS_INFRA; ++ // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key ++ pAd->StaCfg.WpaState = SS_NOTUSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __func__, pAd->StaCfg.BssType)); ++ } ++ } ++ //Channel ++ if(RTMPGetKeyParameter("Channel", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ pAd->CommonCfg.Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ DBGPRINT(RT_DEBUG_TRACE, ("Channel=%d\n", pAd->CommonCfg.Channel)); ++ } ++ //WirelessMode ++ if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ RT_CfgSetWirelessMode(pAd, tmpbuf); ++ DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode)); ++ } ++ //BasicRate ++ if(RTMPGetKeyParameter("BasicRate", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ pAd->CommonCfg.BasicRateBitmap = (ULONG) simple_strtol(tmpbuf, 0, 10); ++ DBGPRINT(RT_DEBUG_TRACE, ("BasicRate=%ld\n", pAd->CommonCfg.BasicRateBitmap)); ++ } ++ //BeaconPeriod ++ if(RTMPGetKeyParameter("BeaconPeriod", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ pAd->CommonCfg.BeaconPeriod = (USHORT) simple_strtol(tmpbuf, 0, 10); ++ DBGPRINT(RT_DEBUG_TRACE, ("BeaconPeriod=%d\n", pAd->CommonCfg.BeaconPeriod)); ++ } ++ //TxPower ++ if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10); ++ pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage; ++ DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage)); ++ } ++ //BGProtection ++ if(RTMPGetKeyParameter("BGProtection", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ //#if 0 //#ifndef WIFI_TEST ++ // pAd->CommonCfg.UseBGProtection = 2;// disable b/g protection for throughput test ++ //#else ++ switch (simple_strtol(tmpbuf, 0, 10)) ++ { ++ case 1: //Always On ++ pAd->CommonCfg.UseBGProtection = 1; ++ break; ++ case 2: //Always OFF ++ pAd->CommonCfg.UseBGProtection = 2; ++ break; ++ case 0: //AUTO ++ default: ++ pAd->CommonCfg.UseBGProtection = 0; ++ break; ++ } ++ //#endif ++ DBGPRINT(RT_DEBUG_TRACE, ("BGProtection=%ld\n", pAd->CommonCfg.UseBGProtection)); ++ } ++ //OLBCDetection ++ if(RTMPGetKeyParameter("DisableOLBC", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ switch (simple_strtol(tmpbuf, 0, 10)) ++ { ++ case 1: //disable OLBC Detection ++ pAd->CommonCfg.DisableOLBCDetect = 1; ++ break; ++ case 0: //enable OLBC Detection ++ pAd->CommonCfg.DisableOLBCDetect = 0; ++ break; ++ default: ++ pAd->CommonCfg.DisableOLBCDetect= 0; ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("OLBCDetection=%ld\n", pAd->CommonCfg.DisableOLBCDetect)); ++ } ++ //TxPreamble ++ if(RTMPGetKeyParameter("TxPreamble", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ switch (simple_strtol(tmpbuf, 0, 10)) ++ { ++ case Rt802_11PreambleShort: ++ pAd->CommonCfg.TxPreamble = Rt802_11PreambleShort; ++ break; ++ case Rt802_11PreambleLong: ++ default: ++ pAd->CommonCfg.TxPreamble = Rt802_11PreambleLong; ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("TxPreamble=%ld\n", pAd->CommonCfg.TxPreamble)); ++ } ++ //RTSThreshold ++ if(RTMPGetKeyParameter("RTSThreshold", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ RtsThresh = simple_strtol(tmpbuf, 0, 10); ++ if( (RtsThresh >= 1) && (RtsThresh <= MAX_RTS_THRESHOLD) ) ++ pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; ++ else ++ pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RTSThreshold=%d\n", pAd->CommonCfg.RtsThreshold)); ++ } ++ //FragThreshold ++ if(RTMPGetKeyParameter("FragThreshold", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ FragThresh = simple_strtol(tmpbuf, 0, 10); ++ pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; ++ ++ if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) ++ { //illegal FragThresh so we set it to default ++ pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; ++ pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; ++ } ++ else if (FragThresh % 2 == 1) ++ { ++ // The length of each fragment shall always be an even number of octets, except for the last fragment ++ // of an MSDU or MMPDU, which may be either an even or an odd number of octets. ++ pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); ++ } ++ else ++ { ++ pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; ++ } ++ //pAd->CommonCfg.AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; ++ DBGPRINT(RT_DEBUG_TRACE, ("FragThreshold=%d\n", pAd->CommonCfg.FragmentThreshold)); ++ } ++ //TxBurst ++ if(RTMPGetKeyParameter("TxBurst", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ //#ifdef WIFI_TEST ++ // pAd->CommonCfg.bEnableTxBurst = FALSE; ++ //#else ++ if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable ++ pAd->CommonCfg.bEnableTxBurst = TRUE; ++ else //Disable ++ pAd->CommonCfg.bEnableTxBurst = FALSE; ++ //#endif ++ DBGPRINT(RT_DEBUG_TRACE, ("TxBurst=%d\n", pAd->CommonCfg.bEnableTxBurst)); ++ } ++ ++#ifdef AGGREGATION_SUPPORT ++ //PktAggregate ++ if(RTMPGetKeyParameter("PktAggregate", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable ++ pAd->CommonCfg.bAggregationCapable = TRUE; ++ else //Disable ++ pAd->CommonCfg.bAggregationCapable = FALSE; ++#ifdef PIGGYBACK_SUPPORT ++ pAd->CommonCfg.bPiggyBackCapable = pAd->CommonCfg.bAggregationCapable; ++#endif // PIGGYBACK_SUPPORT // ++ DBGPRINT(RT_DEBUG_TRACE, ("PktAggregate=%d\n", pAd->CommonCfg.bAggregationCapable)); ++ } ++#else ++ pAd->CommonCfg.bAggregationCapable = FALSE; ++ pAd->CommonCfg.bPiggyBackCapable = FALSE; ++#endif // AGGREGATION_SUPPORT // ++ ++ // WmmCapable ++ ++ rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, pBuffer); ++ ++ //ShortSlot ++ if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ RT_CfgSetShortSlot(pAd, tmpbuf); ++ DBGPRINT(RT_DEBUG_TRACE, ("ShortSlot=%d\n", pAd->CommonCfg.bUseShortSlotTime)); ++ } ++ //IEEE80211H ++ if(RTMPGetKeyParameter("IEEE80211H", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) ++ { ++ if(simple_strtol(macptr, 0, 10) != 0) //Enable ++ pAd->CommonCfg.bIEEE80211H = TRUE; ++ else //Disable ++ pAd->CommonCfg.bIEEE80211H = FALSE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("IEEE80211H=%d\n", pAd->CommonCfg.bIEEE80211H)); ++ } ++ } ++ //CSPeriod ++ if(RTMPGetKeyParameter("CSPeriod", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) ++ pAd->CommonCfg.RadarDetect.CSPeriod = simple_strtol(tmpbuf, 0, 10); ++ else ++ pAd->CommonCfg.RadarDetect.CSPeriod = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("CSPeriod=%d\n", pAd->CommonCfg.RadarDetect.CSPeriod)); ++ } ++ ++ //RDRegion ++ if(RTMPGetKeyParameter("RDRegion", tmpbuf, 128, pBuffer, TRUE)) ++ { ++ RADAR_DETECT_STRUCT *pRadarDetect = &pAd->CommonCfg.RadarDetect; ++ if ((strncmp(tmpbuf, "JAP_W53", 7) == 0) || (strncmp(tmpbuf, "jap_w53", 7) == 0)) ++ { ++ pRadarDetect->RDDurRegion = JAP_W53; ++ pRadarDetect->DfsSessionTime = 15; ++ } ++ else if ((strncmp(tmpbuf, "JAP_W56", 7) == 0) || (strncmp(tmpbuf, "jap_w56", 7) == 0)) ++ { ++ pRadarDetect->RDDurRegion = JAP_W56; ++ pRadarDetect->DfsSessionTime = 13; ++ } ++ else if ((strncmp(tmpbuf, "JAP", 3) == 0) || (strncmp(tmpbuf, "jap", 3) == 0)) ++ { ++ pRadarDetect->RDDurRegion = JAP; ++ pRadarDetect->DfsSessionTime = 5; ++ } ++ else if ((strncmp(tmpbuf, "FCC", 3) == 0) || (strncmp(tmpbuf, "fcc", 3) == 0)) ++ { ++ pRadarDetect->RDDurRegion = FCC; ++ pRadarDetect->DfsSessionTime = 5; ++ } ++ else if ((strncmp(tmpbuf, "CE", 2) == 0) || (strncmp(tmpbuf, "ce", 2) == 0)) ++ { ++ pRadarDetect->RDDurRegion = CE; ++ pRadarDetect->DfsSessionTime = 13; ++ } ++ else ++ { ++ pRadarDetect->RDDurRegion = CE; ++ pRadarDetect->DfsSessionTime = 13; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RDRegion=%d\n", pRadarDetect->RDDurRegion)); ++ } ++ else ++ { ++ pAd->CommonCfg.RadarDetect.RDDurRegion = CE; ++ pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; ++ } ++ ++ //WirelessEvent ++ if(RTMPGetKeyParameter("WirelessEvent", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) ++ pAd->CommonCfg.bWirelessEvent = simple_strtol(tmpbuf, 0, 10); ++ else ++ pAd->CommonCfg.bWirelessEvent = 0; // disable ++ DBGPRINT(RT_DEBUG_TRACE, ("WirelessEvent=%d\n", pAd->CommonCfg.bWirelessEvent)); ++ } ++ if(RTMPGetKeyParameter("WiFiTest", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) != 0) ++ pAd->CommonCfg.bWiFiTest= simple_strtol(tmpbuf, 0, 10); ++ else ++ pAd->CommonCfg.bWiFiTest = 0; // disable ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("WiFiTest=%d\n", pAd->CommonCfg.bWiFiTest)); ++ } ++ //AuthMode ++ if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, pBuffer, TRUE)) ++ { ++ { ++ if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; ++ else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared; ++ else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; ++ else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; ++ else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; ++ else if ((strcmp(tmpbuf, "WPA") == 0) || (strcmp(tmpbuf, "wpa") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA; ++ else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0)) ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; ++ else ++ pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen; ++ ++ pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::(AuthMode=%d)\n", __func__, pAd->StaCfg.AuthMode)); ++ } ++ } ++ //EncrypType ++ if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, pBuffer, TRUE)) ++ { ++ { ++ if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0)) ++ pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled; ++ else if ((strcmp(tmpbuf, "TKIP") == 0) || (strcmp(tmpbuf, "tkip") == 0)) ++ pAd->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; ++ else if ((strcmp(tmpbuf, "AES") == 0) || (strcmp(tmpbuf, "aes") == 0)) ++ pAd->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; ++ else ++ pAd->StaCfg.WepStatus = Ndis802_11WEPDisabled; ++ ++ // Update all wepstatus related ++ pAd->StaCfg.PairCipher = pAd->StaCfg.WepStatus; ++ pAd->StaCfg.GroupCipher = pAd->StaCfg.WepStatus; ++ pAd->StaCfg.OrigWepStatus = pAd->StaCfg.WepStatus; ++ pAd->StaCfg.bMixCipher = FALSE; ++ ++ //RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus)); ++ } ++ } ++ ++ { ++ if(RTMPGetKeyParameter("WPAPSK", tmpbuf, 512, pBuffer, FALSE)) ++ { ++ int ret = TRUE; ++ ++ tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input ++ ++ if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && ++ (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && ++ (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) ++ ) ++ { ++ ret = FALSE; ++ } ++ else ++ { ++ ret = RT_CfgSetWPAPSKKey(pAd, tmpbuf, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->StaCfg.PMK); ++ } ++ ++ if (ret == TRUE) ++ { ++ RTMPZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); ++ RTMPMoveMemory(pAd->StaCfg.WpaPassPhrase, tmpbuf, strlen(tmpbuf)); ++ pAd->StaCfg.WpaPassPhraseLen= strlen(tmpbuf); ++ ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ { ++ // Start STA supplicant state machine ++ pAd->StaCfg.WpaState = SS_START; ++ } ++ else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) ++ { ++ pAd->StaCfg.WpaState = SS_NOTUSE; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __func__, tmpbuf)); ++ } ++ } ++ } ++ ++ //DefaultKeyID, KeyType, KeyStr ++ rtmp_read_key_parms_from_file(pAd, tmpbuf, pBuffer); ++ ++ ++ //HSCounter ++ /*if(RTMPGetKeyParameter("HSCounter", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ switch (simple_strtol(tmpbuf, 0, 10)) ++ { ++ case 1: //Enable ++ pAd->CommonCfg.bEnableHSCounter = TRUE; ++ break; ++ case 0: //Disable ++ default: ++ pAd->CommonCfg.bEnableHSCounter = FALSE; ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, "HSCounter=%d\n", pAd->CommonCfg.bEnableHSCounter); ++ }*/ ++ ++ HTParametersHook(pAd, tmpbuf, pBuffer); ++ ++ { ++ //PSMode ++ if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if (pAd->StaCfg.BssType == BSS_INFRA) ++ { ++ if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) ++ { ++ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // to exclude certain situations. ++ // MlmeSetPsm(pAd, PWR_SAVE); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); ++ if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) ++ pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; ++ pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; ++ pAd->StaCfg.DefaultListenCount = 5; ++ } ++ else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) ++ || (strcmp(tmpbuf, "FAST_PSP") == 0)) ++ { ++ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // to exclude certain situations. ++ // RTMP_SET_PSM_BIT(pAd, PWR_SAVE); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); ++ if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) ++ pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; ++ pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; ++ pAd->StaCfg.DefaultListenCount = 3; ++ } ++ else if ((strcmp(tmpbuf, "Legacy_PSP") == 0) || (strcmp(tmpbuf, "legacy_psp") == 0) ++ || (strcmp(tmpbuf, "LEGACY_PSP") == 0)) ++ { ++ // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // to exclude certain situations. ++ // RTMP_SET_PSM_BIT(pAd, PWR_SAVE); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); ++ if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) ++ pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; ++ pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; ++ pAd->StaCfg.DefaultListenCount = 3; ++ } ++ else ++ { //Default Ndis802_11PowerModeCAM ++ // clear PSM bit immediately ++ RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); ++ if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) ++ pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; ++ pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode)); ++ } ++ } ++ // AutoRoaming by RSSI ++ if (RTMPGetKeyParameter("AutoRoaming", tmpbuf, 32, pBuffer, TRUE)) ++ { ++ if (simple_strtol(tmpbuf, 0, 10) == 0) ++ pAd->StaCfg.bAutoRoaming = FALSE; ++ else ++ pAd->StaCfg.bAutoRoaming = TRUE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("AutoRoaming=%d\n", pAd->StaCfg.bAutoRoaming)); ++ } ++ // RoamThreshold ++ if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, pBuffer, TRUE)) ++ { ++ long lInfo = simple_strtol(tmpbuf, 0, 10); ++ ++ if (lInfo > 90 || lInfo < 60) ++ pAd->StaCfg.dBmToRoam = -70; ++ else ++ pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); ++ } ++ ++ if(RTMPGetKeyParameter("TGnWifiTest", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ if(simple_strtol(tmpbuf, 0, 10) == 0) ++ pAd->StaCfg.bTGnWifiTest = FALSE; ++ else ++ pAd->StaCfg.bTGnWifiTest = TRUE; ++ DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest)); ++ } ++ ++ // Beacon Lost Time ++ if (RTMPGetKeyParameter("BeaconLostTime", tmpbuf, 32, pBuffer, TRUE)) ++ { ++ ULONG lInfo = (ULONG)simple_strtol(tmpbuf, 0, 10); ++ ++ if ((lInfo != 0) && (lInfo <= 60)) ++ pAd->StaCfg.BeaconLostTime = (lInfo * OS_HZ); ++ DBGPRINT(RT_DEBUG_TRACE, ("BeaconLostTime=%ld \n", pAd->StaCfg.BeaconLostTime)); ++ } ++ ++ ++ } ++ ++ ++ ++ ++ }while(0); ++ ++ ++ kfree(tmpbuf); ++ ++ return NDIS_STATUS_SUCCESS; ++ ++} +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index 85855f7..457b6d8 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -283,8 +283,8 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + OUT USHORT *LengthVIE, + OUT PNDIS_802_11_VARIABLE_IEs pVIE) + { +- CHAR *Ptr; +- CHAR TimLen; ++ UCHAR *Ptr; ++ UCHAR TimLen; + PFRAME_802_11 pFrame; + PEID_STRUCT pEid; + UCHAR SubType; +@@ -529,10 +529,9 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + case IE_TIM: + if(INFRA_ON(pAd) && SubType == SUBTYPE_BEACON) + { +- GetTimBit((PUCHAR)pEid, pAd->StaActive.Aid, &TimLen, pBcastFlag, pDtimCount, pDtimPeriod, pMessageToMe); ++ GetTimBit((PCHAR)pEid, pAd->StaActive.Aid, &TimLen, pBcastFlag, pDtimCount, pDtimPeriod, pMessageToMe); + } + break; +- + case IE_CHANNEL_SWITCH_ANNOUNCEMENT: + if(pEid->Len == 3) + { +@@ -545,6 +544,26 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + // Wifi WMM use the same IE vale, need to parse that too + // case IE_WPA: + case IE_VENDOR_SPECIFIC: ++ // Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. ++ // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. ++ /*if (NdisEqualMemory(pEid->Octet, BROADCOM_OUI, 3) && (pEid->Len >= 4)) ++ { ++ if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) ++ { ++ { ++ NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); ++ *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. ++ } ++ } ++ if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 26)) ++ { ++ { ++ NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); ++ *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; // Nnow we only support 26 bytes. ++ } ++ } ++ } ++ */ + // Check the OUI version, filter out non-standard usage + if (NdisEqualMemory(pEid->Octet, RALINK_OUI, 3) && (pEid->Len == 7)) + { +@@ -638,6 +657,8 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + pEdcaParm->Cwmax[QID_AC_VO] = CW_MAX_IN_BITS-1; + pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms + } ++ ++ + break; + + case IE_EXT_SUPP_RATES: +@@ -718,7 +739,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + + if (Sanity != 0x7) + { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity)); ++ DBGPRINT(RT_DEBUG_LOUD, ("PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity)); + return FALSE; + } + else +@@ -755,8 +776,6 @@ BOOLEAN MlmeScanReqSanity( + + if ((*pBssType == BSS_INFRA || *pBssType == BSS_ADHOC || *pBssType == BSS_ANY) + && (*pScanType == SCAN_ACTIVE || *pScanType == SCAN_PASSIVE +- || *pScanType == SCAN_CISCO_PASSIVE || *pScanType == SCAN_CISCO_ACTIVE +- || *pScanType == SCAN_CISCO_CHANNEL_LOAD || *pScanType == SCAN_CISCO_NOISE + )) + { + return TRUE; +@@ -837,8 +856,7 @@ BOOLEAN PeerAuthSanity( + NdisMoveMemory(pSeq, &pFrame->Octet[2], 2); + NdisMoveMemory(pStatus, &pFrame->Octet[4], 2); + +- if ((*pAlg == Ndis802_11AuthModeOpen) +- ) ++ if (*pAlg == AUTH_MODE_OPEN) + { + if (*pSeq == 1 || *pSeq == 2) + { +@@ -850,7 +868,7 @@ BOOLEAN PeerAuthSanity( + return FALSE; + } + } +- else if (*pAlg == Ndis802_11AuthModeShared) ++ else if (*pAlg == AUTH_MODE_KEY) + { + if (*pSeq == 1 || *pSeq == 4) + { +@@ -897,7 +915,7 @@ BOOLEAN MlmeAuthReqSanity( + *pTimeout = pInfo->Timeout; + *pAlg = pInfo->Alg; + +- if (((*pAlg == Ndis802_11AuthModeShared) ||(*pAlg == Ndis802_11AuthModeOpen) ++ if (((*pAlg == AUTH_MODE_KEY) ||(*pAlg == AUTH_MODE_OPEN) + ) && + ((*pAddr & 0x01) == 0)) + { +@@ -1052,3 +1070,196 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( + + return NetWorkType; + } ++ ++/* ++ ========================================================================== ++ Description: ++ Check the validity of the received EAPoL frame ++ Return: ++ TRUE if all parameters are OK, ++ FALSE otherwise ++ ========================================================================== ++ */ ++BOOLEAN PeerWpaMessageSanity( ++ IN PRTMP_ADAPTER pAd, ++ IN PEAPOL_PACKET pMsg, ++ IN ULONG MsgLen, ++ IN UCHAR MsgType, ++ IN MAC_TABLE_ENTRY *pEntry) ++{ ++ UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; ++ BOOLEAN bReplayDiff = FALSE; ++ BOOLEAN bWPA2 = FALSE; ++ KEY_INFO EapolKeyInfo; ++ UCHAR GroupKeyIndex = 0; ++ ++ ++ NdisZeroMemory(mic, sizeof(mic)); ++ NdisZeroMemory(digest, sizeof(digest)); ++ NdisZeroMemory(KEYDATA, sizeof(KEYDATA)); ++ NdisZeroMemory((PUCHAR)&EapolKeyInfo, sizeof(EapolKeyInfo)); ++ ++ NdisMoveMemory((PUCHAR)&EapolKeyInfo, (PUCHAR)&pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ ++ *((USHORT *)&EapolKeyInfo) = cpu2le16(*((USHORT *)&EapolKeyInfo)); ++ ++ // Choose WPA2 or not ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ bWPA2 = TRUE; ++ ++ // 0. Check MsgType ++ if ((MsgType > EAPOL_GROUP_MSG_2) || (MsgType < EAPOL_PAIR_MSG_1)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("The message type is invalid(%d)! \n", MsgType)); ++ return FALSE; ++ } ++ ++ // 1. Replay counter check ++ if (MsgType == EAPOL_PAIR_MSG_1 || MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1) // For supplicant ++ { ++ // First validate replay counter, only accept message with larger replay counter. ++ // Let equal pass, some AP start with all zero replay counter ++ UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; ++ ++ NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); ++ if ((RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY) != 1) && ++ (RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) ++ { ++ bReplayDiff = TRUE; ++ } ++ } ++ else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) // For authenticator ++ { ++ // check Replay Counter coresponds to MSG from authenticator, otherwise discard ++ if (!NdisEqualMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY)) ++ { ++ bReplayDiff = TRUE; ++ } ++ } ++ ++ // Replay Counter different condition ++ if (bReplayDiff) ++ { ++ // send wireless event - for replay counter different ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_REPLAY_COUNTER_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ if (MsgType < EAPOL_GROUP_MSG_1) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in pairwise msg %d of 4-way handshake!\n", MsgType)); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); ++ } ++ ++ hex_dump("Receive replay counter ", pMsg->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ hex_dump("Current replay counter ", pEntry->R_Counter, LEN_KEY_DESC_REPLAY); ++ return FALSE; ++ } ++ ++ // 2. Verify MIC except Pairwise Msg1 ++ if (MsgType != EAPOL_PAIR_MSG_1) ++ { ++ UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; ++ ++ // Record the received MIC for check later ++ NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); ++ NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); ++ ++ if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) // TKIP ++ { ++ HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, mic, MD5_DIGEST_SIZE); ++ } ++ else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) // AES ++ { ++ HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, digest, SHA1_DIGEST_SIZE); ++ NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); ++ } ++ ++ if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC)) ++ { ++ // send wireless event - for MIC different ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_MIC_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ if (MsgType < EAPOL_GROUP_MSG_1) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in pairwise msg %d of 4-way handshake!\n", MsgType)); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); ++ } ++ ++ hex_dump("Received MIC", rcvd_mic, LEN_KEY_DESC_MIC); ++ hex_dump("Desired MIC", mic, LEN_KEY_DESC_MIC); ++ ++ return FALSE; ++ } ++ } ++ ++ // 1. Decrypt the Key Data field if GTK is included. ++ // 2. Extract the context of the Key Data field if it exist. ++ // The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. ++ // The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. ++ if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) ++ { ++ // Decrypt this field ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) ++ { ++ if( ++ (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) ++ { ++ // AES ++ AES_GTK_KEY_UNWRAP(&pEntry->PTK[16], KEYDATA, ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), ++ pMsg->KeyDesc.KeyData); ++ } ++ else ++ { ++ INT i; ++ UCHAR Key[32]; ++ // Decrypt TKIP GTK ++ // Construct 32 bytes RC4 Key ++ NdisMoveMemory(Key, pMsg->KeyDesc.KeyIv, 16); ++ NdisMoveMemory(&Key[16], &pEntry->PTK[16], 16); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, 32); ++ //discard first 256 bytes ++ for(i = 0; i < 256; i++) ++ ARCFOUR_BYTE(&pAd->PrivateInfo.WEPCONTEXT); ++ // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not ++ ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, KEYDATA, ++ pMsg->KeyDesc.KeyData, ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); ++ } ++ ++ if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) ++ GroupKeyIndex = EapolKeyInfo.KeyIndex; ++ ++ } ++ else if ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3 && !bWPA2)) ++ { ++ NdisMoveMemory(KEYDATA, pMsg->KeyDesc.KeyData, CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); ++ } ++ else ++ { ++ ++ return TRUE; ++ } ++ ++ // Parse Key Data field to ++ // 1. verify RSN IE for pairwise_msg_2_WPA1(WPA2) ,pairwise_msg_3_WPA1(WPA2) ++ // 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 ++ // 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) ++ if (!RTMPParseEapolKeyData(pAd, KEYDATA, ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), ++ GroupKeyIndex, MsgType, bWPA2, pEntry)) ++ { ++ return FALSE; ++ } ++ } ++ ++ return TRUE; ++ ++} +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index a6e1b6d..4cb507d 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -25,7 +25,7 @@ + ************************************************************************* + + Module Name: +- sync.c ++ cmm_sync.c + + Abstract: + +@@ -64,11 +64,16 @@ UCHAR A_BAND_REGION_3_CHANNEL_LIST[]={52, 56, 60, 64, 149, 153, 157, 161}; + UCHAR A_BAND_REGION_4_CHANNEL_LIST[]={149, 153, 157, 161, 165}; + UCHAR A_BAND_REGION_5_CHANNEL_LIST[]={149, 153, 157, 161}; + UCHAR A_BAND_REGION_6_CHANNEL_LIST[]={36, 40, 44, 48}; +-UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}; ++UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173}; + UCHAR A_BAND_REGION_8_CHANNEL_LIST[]={52, 56, 60, 64}; + UCHAR A_BAND_REGION_9_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165}; + UCHAR A_BAND_REGION_10_CHANNEL_LIST[]={36, 40, 44, 48, 149, 153, 157, 161, 165}; + UCHAR A_BAND_REGION_11_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161}; ++UCHAR A_BAND_REGION_12_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; ++UCHAR A_BAND_REGION_13_CHANNEL_LIST[]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161}; ++UCHAR A_BAND_REGION_14_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}; ++UCHAR A_BAND_REGION_15_CHANNEL_LIST[]={149, 153, 157, 161, 165, 169, 173}; ++ + + //BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. + UCHAR BaSizeArray[4] = {8,16,32,64}; +@@ -200,7 +205,22 @@ VOID BuildChannelList( + num = sizeof(A_BAND_REGION_11_CHANNEL_LIST)/sizeof(UCHAR); + pChannelList = A_BAND_REGION_11_CHANNEL_LIST; + break; +- ++ case REGION_12_A_BAND: ++ num = sizeof(A_BAND_REGION_12_CHANNEL_LIST)/sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_12_CHANNEL_LIST; ++ break; ++ case REGION_13_A_BAND: ++ num = sizeof(A_BAND_REGION_13_CHANNEL_LIST)/sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_13_CHANNEL_LIST; ++ break; ++ case REGION_14_A_BAND: ++ num = sizeof(A_BAND_REGION_14_CHANNEL_LIST)/sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_14_CHANNEL_LIST; ++ break; ++ case REGION_15_A_BAND: ++ num = sizeof(A_BAND_REGION_15_CHANNEL_LIST)/sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_15_CHANNEL_LIST; ++ break; + default: // Error. should never happen + DBGPRINT(RT_DEBUG_WARN,("countryregion=%d not support", pAd->CommonCfg.CountryRegionForABand)); + break; +@@ -383,8 +403,11 @@ VOID ScanNextChannel( + PHEADER_802_11 pHdr80211; + UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; + ++ { + if (MONITOR_ON(pAd)) + return; ++ } ++ + + if (pAd->MlmeAux.Channel == 0) + { +@@ -409,6 +432,19 @@ VOID ScanNextChannel( + } + + { ++#ifdef RT2860 ++ /* ++ If all peer Ad-hoc clients leave, driver would do LinkDown and LinkUp. ++ In LinkUp, CommonCfg.Ssid would copy SSID from MlmeAux. ++ To prevent SSID is zero or wrong in Beacon, need to recover MlmeAux.SSID here. ++ */ ++ if (ADHOC_ON(pAd)) ++ { ++ NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); ++ pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; ++ NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen); ++ } ++#endif // RT2860 // + // + // To prevent data lost. + // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +@@ -438,29 +474,26 @@ VOID ScanNextChannel( + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); + } + ++ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + } +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA)) + { + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE); + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + else + { + { + // BBP and RF are not accessible in PS mode, we has to wake them up first + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +-#ifdef RT2860 +- AsicForceWakeup(pAd, FROM_TX); +-#endif +-#ifdef RT2870 + AsicForceWakeup(pAd, TRUE); +-#endif ++ + // leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON + if (pAd->StaCfg.Psm == PWR_SAVE) +- MlmeSetPsmBit(pAd, PWR_ACTIVE); ++ RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); + } + + AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, TRUE); +@@ -487,16 +520,6 @@ VOID ScanNextChannel( + // Chnage the channel scan time for CISCO stuff based on its IAPP announcement + if (ScanType == FAST_SCAN_ACTIVE) + RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME); +- else if (((ScanType == SCAN_CISCO_ACTIVE) || +- (ScanType == SCAN_CISCO_PASSIVE) || +- (ScanType == SCAN_CISCO_CHANNEL_LOAD) || +- (ScanType == SCAN_CISCO_NOISE)) && (pAd->OpMode == OPMODE_STA)) +- { +- if (pAd->StaCfg.CCXScanTime < 25) +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime * 2); +- else +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime); +- } + else // must be SCAN_PASSIVE or SCAN_ACTIVE + { + if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) +@@ -512,8 +535,9 @@ VOID ScanNextChannel( + RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MAX_CHANNEL_TIME); + } + +- if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) || +- (ScanType == SCAN_CISCO_ACTIVE)) ++ if ((ScanType == SCAN_ACTIVE) ++ || (ScanType == FAST_SCAN_ACTIVE) ++ ) + { + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory + if (NStatus != NDIS_STATUS_SUCCESS) +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +new file mode 100644 +index 0000000..20423e1 +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -0,0 +1,882 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ cmm_tkip.c ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Paul Wu 02-25-02 Initial ++*/ ++ ++#include "../rt_config.h" ++ ++// Rotation functions on 32 bit values ++#define ROL32( A, n ) \ ++ ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) ++#define ROR32( A, n ) ROL32( (A), 32-(n) ) ++ ++UINT Tkip_Sbox_Lower[256] = ++{ ++ 0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54, ++ 0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A, ++ 0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B, ++ 0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B, ++ 0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F, ++ 0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F, ++ 0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5, ++ 0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F, ++ 0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB, ++ 0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97, ++ 0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED, ++ 0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A, ++ 0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94, ++ 0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3, ++ 0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04, ++ 0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D, ++ 0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39, ++ 0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95, ++ 0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83, ++ 0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76, ++ 0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4, ++ 0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B, ++ 0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0, ++ 0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18, ++ 0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51, ++ 0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85, ++ 0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12, ++ 0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9, ++ 0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7, ++ 0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A, ++ 0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8, ++ 0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A ++}; ++ ++UINT Tkip_Sbox_Upper[256] = ++{ ++ 0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91, ++ 0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC, ++ 0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB, ++ 0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B, ++ 0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83, ++ 0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A, ++ 0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F, ++ 0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA, ++ 0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B, ++ 0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13, ++ 0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6, ++ 0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85, ++ 0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11, ++ 0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B, ++ 0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1, ++ 0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF, ++ 0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E, ++ 0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6, ++ 0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B, ++ 0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD, ++ 0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8, ++ 0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2, ++ 0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49, ++ 0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10, ++ 0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97, ++ 0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F, ++ 0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C, ++ 0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27, ++ 0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33, ++ 0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5, ++ 0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0, ++ 0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C ++}; ++ ++// ++// Expanded IV for TKIP function. ++// ++typedef struct PACKED _IV_CONTROL_ ++{ ++ union PACKED ++ { ++ struct PACKED ++ { ++ UCHAR rc0; ++ UCHAR rc1; ++ UCHAR rc2; ++ ++ union PACKED ++ { ++ struct PACKED ++ { ++ UCHAR Rsvd:5; ++ UCHAR ExtIV:1; ++ UCHAR KeyID:2; ++ } field; ++ UCHAR Byte; ++ } CONTROL; ++ } field; ++ ++ ULONG word; ++ } IV16; ++ ++ ULONG IV32; ++} TKIP_IV, *PTKIP_IV; ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Convert from UCHAR[] to ULONG in a portable way ++ ++ Arguments: ++ pMICKey pointer to MIC Key ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++ULONG RTMPTkipGetUInt32( ++ IN PUCHAR pMICKey) ++{ ++ ULONG res = 0; ++ INT i; ++ ++ for (i = 0; i < 4; i++) ++ { ++ res |= (*pMICKey++) << (8 * i); ++ } ++ ++ return res; ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Convert from ULONG to UCHAR[] in a portable way ++ ++ Arguments: ++ pDst pointer to destination for convert ULONG to UCHAR[] ++ val the value for convert ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPTkipPutUInt32( ++ IN OUT PUCHAR pDst, ++ IN ULONG val) ++{ ++ INT i; ++ ++ for(i = 0; i < 4; i++) ++ { ++ *pDst++ = (UCHAR) (val & 0xff); ++ val >>= 8; ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Set the MIC Key. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pMICKey pointer to MIC Key ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPTkipSetMICKey( ++ IN PTKIP_KEY_INFO pTkip, ++ IN PUCHAR pMICKey) ++{ ++ // Set the key ++ pTkip->K0 = RTMPTkipGetUInt32(pMICKey); ++ pTkip->K1 = RTMPTkipGetUInt32(pMICKey + 4); ++ // and reset the message ++ pTkip->L = pTkip->K0; ++ pTkip->R = pTkip->K1; ++ pTkip->nBytesInM = 0; ++ pTkip->M = 0; ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calculate the MIC Value. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ uChar Append this uChar ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPTkipAppendByte( ++ IN PTKIP_KEY_INFO pTkip, ++ IN UCHAR uChar) ++{ ++ // Append the byte to our word-sized buffer ++ pTkip->M |= (uChar << (8* pTkip->nBytesInM)); ++ pTkip->nBytesInM++; ++ // Process the word if it is full. ++ if( pTkip->nBytesInM >= 4 ) ++ { ++ pTkip->L ^= pTkip->M; ++ pTkip->R ^= ROL32( pTkip->L, 17 ); ++ pTkip->L += pTkip->R; ++ pTkip->R ^= ((pTkip->L & 0xff00ff00) >> 8) | ((pTkip->L & 0x00ff00ff) << 8); ++ pTkip->L += pTkip->R; ++ pTkip->R ^= ROL32( pTkip->L, 3 ); ++ pTkip->L += pTkip->R; ++ pTkip->R ^= ROR32( pTkip->L, 2 ); ++ pTkip->L += pTkip->R; ++ // Clear the buffer ++ pTkip->M = 0; ++ pTkip->nBytesInM = 0; ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calculate the MIC Value. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pSrc Pointer to source data for Calculate MIC Value ++ Len Indicate the length of the source data ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPTkipAppend( ++ IN PTKIP_KEY_INFO pTkip, ++ IN PUCHAR pSrc, ++ IN UINT nBytes) ++{ ++ // This is simple ++ while(nBytes > 0) ++ { ++ RTMPTkipAppendByte(pTkip, *pSrc++); ++ nBytes--; ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Get the MIC Value. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ the MIC Value is store in pAd->PrivateInfo.MIC ++ ======================================================================== ++*/ ++VOID RTMPTkipGetMIC( ++ IN PTKIP_KEY_INFO pTkip) ++{ ++ // Append the minimum padding ++ RTMPTkipAppendByte(pTkip, 0x5a ); ++ RTMPTkipAppendByte(pTkip, 0 ); ++ RTMPTkipAppendByte(pTkip, 0 ); ++ RTMPTkipAppendByte(pTkip, 0 ); ++ RTMPTkipAppendByte(pTkip, 0 ); ++ // and then zeroes until the length is a multiple of 4 ++ while( pTkip->nBytesInM != 0 ) ++ { ++ RTMPTkipAppendByte(pTkip, 0 ); ++ } ++ // The appendByte function has already computed the result. ++ RTMPTkipPutUInt32(pTkip->MIC, pTkip->L); ++ RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Init Tkip function. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. ++ KeyId TK Key ID ++ pTA Pointer to transmitter address ++ pMICKey pointer to MIC Key ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPInitTkipEngine( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN UCHAR KeyId, ++ IN PUCHAR pTA, ++ IN PUCHAR pMICKey, ++ IN PUCHAR pTSC, ++ OUT PULONG pIV16, ++ OUT PULONG pIV32) ++{ ++ TKIP_IV tkipIv; ++ ++ // Prepare 8 bytes TKIP encapsulation for MPDU ++ NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); ++ tkipIv.IV16.field.rc0 = *(pTSC + 1); ++ tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; ++ tkipIv.IV16.field.rc2 = *pTSC; ++ tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV ++ tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; ++// tkipIv.IV32 = *(PULONG)(pTSC + 2); ++ NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV ++ ++ *pIV16 = tkipIv.IV16.word; ++ *pIV32 = tkipIv.IV32; ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Init MIC Value calculation function which include set MIC key & ++ calculate first 16 bytes (DA + SA + priority + 0) ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. ++ pDA Pointer to DA address ++ pSA Pointer to SA address ++ pMICKey pointer to MIC Key ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPInitMICEngine( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, ++ IN UCHAR UserPriority, ++ IN PUCHAR pMICKey) ++{ ++ ULONG Priority = UserPriority; ++ ++ // Init MIC value calculation ++ RTMPTkipSetMICKey(&pAd->PrivateInfo.Tx, pMICKey); ++ // DA ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pDA, MAC_ADDR_LEN); ++ // SA ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); ++ // Priority + 3 bytes of 0 ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR)&Priority, 4); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Compare MIC value of received MSDU ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pSrc Pointer to the received Plain text data ++ pDA Pointer to DA address ++ pSA Pointer to SA address ++ pMICKey pointer to MIC Key ++ Len the length of the received plain text data exclude MIC value ++ ++ Return Value: ++ TRUE MIC value matched ++ FALSE MIC value mismatched ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++BOOLEAN RTMPTkipCompareMICValue( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, ++ IN PUCHAR pMICKey, ++ IN UCHAR UserPriority, ++ IN UINT Len) ++{ ++ UCHAR OldMic[8]; ++ ULONG Priority = UserPriority; ++ ++ // Init MIC value calculation ++ RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); ++ // DA ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); ++ // SA ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); ++ // Priority + 3 bytes of 0 ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); ++ ++ // Calculate MIC value from plain text data ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); ++ ++ // Get MIC valude from received frame ++ NdisMoveMemory(OldMic, pSrc + Len, 8); ++ ++ // Get MIC value from decrypted plain data ++ RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); ++ ++ // Move MIC value from MSDU, this steps should move to data path. ++ // Since the MIC value might cross MPDUs. ++ if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. ++ ++ ++ return (FALSE); ++ } ++ return (TRUE); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Copy frame from waiting queue into relative ring buffer and set ++ appropriate ASIC register to kick hardware transmit function ++ ++ Arguments: ++ pAd Pointer to our adapter ++ PNDIS_PACKET Pointer to Ndis Packet for MIC calculation ++ pEncap Pointer to LLC encap data ++ LenEncap Total encap length, might be 0 which indicates no encap ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPCalculateMICValue( ++ IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pEncap, ++ IN PCIPHER_KEY pKey, ++ IN UCHAR apidx) ++{ ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PUCHAR pSrc; ++ UCHAR UserPriority; ++ UCHAR vlan_offset = 0; ++ ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); ++ ++ UserPriority = RTMP_GET_PACKET_UP(pPacket); ++ pSrc = pSrcBufVA; ++ ++ // determine if this is a vlan packet ++ if (((*(pSrc + 12) << 8) + *(pSrc + 13)) == 0x8100) ++ vlan_offset = 4; ++ ++ { ++ RTMPInitMICEngine( ++ pAd, ++ pKey->Key, ++ pSrc, ++ pSrc + 6, ++ UserPriority, ++ pKey->TxMic); ++ } ++ ++ ++ if (pEncap != NULL) ++ { ++ // LLC encapsulation ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pEncap, 6); ++ // Protocol Type ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, 2); ++ } ++ SrcBufLen -= (14 + vlan_offset); ++ pSrc += (14 + vlan_offset); ++ do ++ { ++ if (SrcBufLen > 0) ++ { ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen); ++ } ++ ++ break; // No need handle next packet ++ ++ } while (TRUE); // End of copying payload ++ ++ // Compute the final MIC Value ++ RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); ++} ++ ++ ++/************************************************************/ ++/* tkip_sbox() */ ++/* Returns a 16 bit value from a 64K entry table. The Table */ ++/* is synthesized from two 256 entry byte wide tables. */ ++/************************************************************/ ++ ++UINT tkip_sbox(UINT index) ++{ ++ UINT index_low; ++ UINT index_high; ++ UINT left, right; ++ ++ index_low = (index % 256); ++ index_high = ((index >> 8) % 256); ++ ++ left = Tkip_Sbox_Lower[index_low] + (Tkip_Sbox_Upper[index_low] * 256); ++ right = Tkip_Sbox_Upper[index_high] + (Tkip_Sbox_Lower[index_high] * 256); ++ ++ return (left ^ right); ++} ++ ++UINT rotr1(UINT a) ++{ ++ unsigned int b; ++ ++ if ((a & 0x01) == 0x01) ++ { ++ b = (a >> 1) | 0x8000; ++ } ++ else ++ { ++ b = (a >> 1) & 0x7fff; ++ } ++ b = b % 65536; ++ return b; ++} ++ ++VOID RTMPTkipMixKey( ++ UCHAR *key, ++ UCHAR *ta, ++ ULONG pnl, /* Least significant 16 bits of PN */ ++ ULONG pnh, /* Most significant 32 bits of PN */ ++ UCHAR *rc4key, ++ UINT *p1k) ++{ ++ ++ UINT tsc0; ++ UINT tsc1; ++ UINT tsc2; ++ ++ UINT ppk0; ++ UINT ppk1; ++ UINT ppk2; ++ UINT ppk3; ++ UINT ppk4; ++ UINT ppk5; ++ ++ INT i; ++ INT j; ++ ++ tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ ++ tsc1 = (unsigned int)(pnh % 65536); ++ tsc2 = (unsigned int)(pnl % 65536); /* lsb */ ++ ++ /* Phase 1, step 1 */ ++ p1k[0] = tsc1; ++ p1k[1] = tsc0; ++ p1k[2] = (UINT)(ta[0] + (ta[1]*256)); ++ p1k[3] = (UINT)(ta[2] + (ta[3]*256)); ++ p1k[4] = (UINT)(ta[4] + (ta[5]*256)); ++ ++ /* Phase 1, step 2 */ ++ for (i=0; i<8; i++) ++ { ++ j = 2*(i & 1); ++ p1k[0] = (p1k[0] + tkip_sbox( (p1k[4] ^ ((256*key[1+j]) + key[j])) % 65536 )) % 65536; ++ p1k[1] = (p1k[1] + tkip_sbox( (p1k[0] ^ ((256*key[5+j]) + key[4+j])) % 65536 )) % 65536; ++ p1k[2] = (p1k[2] + tkip_sbox( (p1k[1] ^ ((256*key[9+j]) + key[8+j])) % 65536 )) % 65536; ++ p1k[3] = (p1k[3] + tkip_sbox( (p1k[2] ^ ((256*key[13+j]) + key[12+j])) % 65536 )) % 65536; ++ p1k[4] = (p1k[4] + tkip_sbox( (p1k[3] ^ (((256*key[1+j]) + key[j]))) % 65536 )) % 65536; ++ p1k[4] = (p1k[4] + i) % 65536; ++ } ++ ++ /* Phase 2, Step 1 */ ++ ppk0 = p1k[0]; ++ ppk1 = p1k[1]; ++ ppk2 = p1k[2]; ++ ppk3 = p1k[3]; ++ ppk4 = p1k[4]; ++ ppk5 = (p1k[4] + tsc2) % 65536; ++ ++ /* Phase2, Step 2 */ ++ ppk0 = ppk0 + tkip_sbox( (ppk5 ^ ((256*key[1]) + key[0])) % 65536); ++ ppk1 = ppk1 + tkip_sbox( (ppk0 ^ ((256*key[3]) + key[2])) % 65536); ++ ppk2 = ppk2 + tkip_sbox( (ppk1 ^ ((256*key[5]) + key[4])) % 65536); ++ ppk3 = ppk3 + tkip_sbox( (ppk2 ^ ((256*key[7]) + key[6])) % 65536); ++ ppk4 = ppk4 + tkip_sbox( (ppk3 ^ ((256*key[9]) + key[8])) % 65536); ++ ppk5 = ppk5 + tkip_sbox( (ppk4 ^ ((256*key[11]) + key[10])) % 65536); ++ ++ ppk0 = ppk0 + rotr1(ppk5 ^ ((256*key[13]) + key[12])); ++ ppk1 = ppk1 + rotr1(ppk0 ^ ((256*key[15]) + key[14])); ++ ppk2 = ppk2 + rotr1(ppk1); ++ ppk3 = ppk3 + rotr1(ppk2); ++ ppk4 = ppk4 + rotr1(ppk3); ++ ppk5 = ppk5 + rotr1(ppk4); ++ ++ /* Phase 2, Step 3 */ ++ /* Phase 2, Step 3 */ ++ ++ tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ ++ tsc1 = (unsigned int)(pnh % 65536); ++ tsc2 = (unsigned int)(pnl % 65536); /* lsb */ ++ ++ rc4key[0] = (tsc2 >> 8) % 256; ++ rc4key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; ++ rc4key[2] = tsc2 % 256; ++ rc4key[3] = ((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256; ++ ++ rc4key[4] = ppk0 % 256; ++ rc4key[5] = (ppk0 >> 8) % 256; ++ ++ rc4key[6] = ppk1 % 256; ++ rc4key[7] = (ppk1 >> 8) % 256; ++ ++ rc4key[8] = ppk2 % 256; ++ rc4key[9] = (ppk2 >> 8) % 256; ++ ++ rc4key[10] = ppk3 % 256; ++ rc4key[11] = (ppk3 >> 8) % 256; ++ ++ rc4key[12] = ppk4 % 256; ++ rc4key[13] = (ppk4 >> 8) % 256; ++ ++ rc4key[14] = ppk5 % 256; ++ rc4key[15] = (ppk5 >> 8) % 256; ++} ++ ++ ++// ++// TRUE: Success! ++// FALSE: Decrypt Error! ++// ++BOOLEAN RTMPSoftDecryptTKIP( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, ++ IN UCHAR UserPriority, ++ IN PCIPHER_KEY pWpaKey) ++{ ++ UCHAR KeyID; ++ UINT HeaderLen; ++ UCHAR fc0; ++ UCHAR fc1; ++ USHORT fc; ++ UINT frame_type; ++ UINT frame_subtype; ++ UINT from_ds; ++ UINT to_ds; ++ INT a4_exists; ++ INT qc_exists; ++ USHORT duration; ++ USHORT seq_control; ++ USHORT qos_control; ++ UCHAR TA[MAC_ADDR_LEN]; ++ UCHAR DA[MAC_ADDR_LEN]; ++ UCHAR SA[MAC_ADDR_LEN]; ++ UCHAR RC4Key[16]; ++ UINT p1k[5]; //for mix_key; ++ ULONG pnl;/* Least significant 16 bits of PN */ ++ ULONG pnh;/* Most significant 32 bits of PN */ ++ UINT num_blocks; ++ UINT payload_remainder; ++ ARCFOURCONTEXT ArcFourContext; ++ UINT crc32 = 0; ++ UINT trailfcs = 0; ++ UCHAR MIC[8]; ++ UCHAR TrailMIC[8]; ++ ++ ++ fc0 = *pData; ++ fc1 = *(pData + 1); ++ ++ fc = *((PUSHORT)pData); ++ ++ frame_type = ((fc0 >> 2) & 0x03); ++ frame_subtype = ((fc0 >> 4) & 0x0f); ++ ++ from_ds = (fc1 & 0x2) >> 1; ++ to_ds = (fc1 & 0x1); ++ ++ a4_exists = (from_ds & to_ds); ++ qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ ++ (frame_subtype == 0x09) || /* Likely to change. */ ++ (frame_subtype == 0x0a) || ++ (frame_subtype == 0x0b) ++ ); ++ ++ HeaderLen = 24; ++ if (a4_exists) ++ HeaderLen += 6; ++ ++ KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); ++ KeyID = KeyID >> 6; ++ ++ if (pWpaKey[KeyID].KeyLen == 0) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP failed!(KeyID[%d] Length can not be 0)\n", KeyID)); ++ return FALSE; ++ } ++ ++ duration = *((PUSHORT)(pData+2)); ++ ++ seq_control = *((PUSHORT)(pData+22)); ++ ++ if (qc_exists) ++ { ++ if (a4_exists) ++ { ++ qos_control = *((PUSHORT)(pData+30)); ++ } ++ else ++ { ++ qos_control = *((PUSHORT)(pData+24)); ++ } ++ } ++ ++ if (to_ds == 0 && from_ds == 1) ++ { ++ NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData+16, MAC_ADDR_LEN); ++ NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); //BSSID ++ } ++ else if (to_ds == 0 && from_ds == 0 ) ++ { ++ NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); ++ } ++ else if (to_ds == 1 && from_ds == 0) ++ { ++ NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); ++ NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); ++ } ++ else if (to_ds == 1 && from_ds == 1) ++ { ++ NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData+22, MAC_ADDR_LEN); ++ } ++ ++ num_blocks = (DataByteCnt - 16) / 16; ++ payload_remainder = (DataByteCnt - 16) % 16; ++ ++ pnl = (*(pData + HeaderLen)) * 256 + *(pData + HeaderLen + 2); ++ pnh = *((PULONG)(pData + HeaderLen + 4)); ++ pnh = cpu2le32(pnh); ++ RTMPTkipMixKey(pWpaKey[KeyID].Key, TA, pnl, pnh, RC4Key, p1k); ++ ++ ARCFOUR_INIT(&ArcFourContext, RC4Key, 16); ++ ++ ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); ++ NdisMoveMemory(&trailfcs, pData + DataByteCnt - 8 - 4, 4); ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). ++ crc32 ^= 0xffffffff; /* complement */ ++ ++ if(crc32 != cpu2le32(trailfcs)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. ++ ++ return (FALSE); ++ } ++ ++ NdisMoveMemory(TrailMIC, pData + DataByteCnt - 8 - 8 - 4, 8); ++ RTMPInitMICEngine(pAd, pWpaKey[KeyID].Key, DA, SA, UserPriority, pWpaKey[KeyID].RxMic); ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 12); ++ RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); ++ NdisMoveMemory(MIC, pAd->PrivateInfo.Tx.MIC, 8); ++ ++ if (!NdisEqualMemory(MIC, TrailMIC, 8)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. ++ //RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 ++ return (FALSE); ++ } ++ ++ //DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); ++ return TRUE; ++} +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +new file mode 100644 +index 0000000..b13858d +--- /dev/null ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -0,0 +1,499 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_wep.c ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Paul Wu 10-28-02 Initial ++*/ ++ ++#include "../rt_config.h" ++ ++UINT FCSTAB_32[256] = ++{ ++ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, ++ 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, ++ 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, ++ 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, ++ 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, ++ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, ++ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, ++ 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, ++ 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, ++ 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, ++ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, ++ 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, ++ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, ++ 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, ++ 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, ++ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, ++ 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, ++ 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, ++ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, ++ 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, ++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, ++ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, ++ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, ++ 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, ++ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, ++ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, ++ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, ++ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, ++ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, ++ 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, ++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, ++ 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, ++ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, ++ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, ++ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, ++ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, ++ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, ++ 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, ++ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, ++ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, ++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, ++ 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, ++ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, ++ 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, ++ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, ++ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, ++ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, ++ 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, ++ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, ++ 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, ++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, ++ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, ++ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, ++ 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, ++ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, ++ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, ++ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, ++ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, ++ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, ++ 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, ++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, ++ 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, ++ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, ++ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d ++}; ++ ++/* ++UCHAR WEPKEY[] = { ++ //IV ++ 0x00, 0x11, 0x22, ++ //WEP KEY ++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC ++ }; ++ */ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Init WEP function. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pKey Pointer to the WEP KEY ++ KeyId WEP Key ID ++ KeyLen the length of WEP KEY ++ pDest Pointer to the destination which Encryption data will store in. ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPInitWepEngine( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN UCHAR KeyId, ++ IN UCHAR KeyLen, ++ IN OUT PUCHAR pDest) ++{ ++ UINT i; ++ UCHAR WEPKEY[] = { ++ //IV ++ 0x00, 0x11, 0x22, ++ //WEP KEY ++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC ++ }; ++ ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ ++ { ++ NdisMoveMemory(WEPKEY + 3, pKey, KeyLen); ++ ++ for(i = 0; i < 3; i++) ++ WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) ++ ++ NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector ++ } ++ *(pDest+3) = (KeyId << 6); //Append KEYID ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Encrypt transimitted data ++ ++ Arguments: ++ pAd Pointer to our adapter ++ pSrc Pointer to the transimitted source data that will be encrypt ++ pDest Pointer to the destination where entryption data will be store in. ++ Len Indicate the length of the source data ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPEncryptData( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, ++ IN PUCHAR pDest, ++ IN UINT Len) ++{ ++ pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); ++ ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, pSrc, Len); ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Decrypt received WEP data ++ ++ Arguments: ++ pAdapter Pointer to our adapter ++ pSrc Pointer to the received data ++ Len the length of the received data ++ ++ Return Value: ++ TRUE Decrypt WEP data success ++ FALSE Decrypt WEP data failed ++ ++ Note: ++ ++ ======================================================================== ++*/ ++BOOLEAN RTMPSoftDecryptWEP( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, ++ IN PCIPHER_KEY pGroupKey) ++{ ++ UINT trailfcs; ++ UINT crc32; ++ UCHAR KeyIdx; ++ UCHAR WEPKEY[] = { ++ //IV ++ 0x00, 0x11, 0x22, ++ //WEP KEY ++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC ++ }; ++ UCHAR *pPayload = (UCHAR *)pData + LENGTH_802_11; ++ ULONG payload_len = DataByteCnt - LENGTH_802_11; ++ ++ NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV ++ ++ KeyIdx = (*(pPayload + 3) & 0xc0) >> 6; ++ if (pGroupKey[KeyIdx].KeyLen == 0) ++ return (FALSE); ++ ++ NdisMoveMemory(WEPKEY + 3, pGroupKey[KeyIdx].Key, pGroupKey[KeyIdx].KeyLen); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, pGroupKey[KeyIdx].KeyLen + 3); ++ ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, payload_len - 4); ++ NdisMoveMemory(&trailfcs, pPayload + payload_len - 8, 4); ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). ++ crc32 ^= 0xffffffff; /* complement */ ++ ++ if(crc32 != cpu2le32(trailfcs)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. ++ return (FALSE); ++ } ++ return (TRUE); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ The Stream Cipher Encryption Algorithm "ARCFOUR" initialize ++ ++ Arguments: ++ Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ pKey Pointer to the WEP KEY ++ KeyLen Indicate the length fo the WEP KEY ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID ARCFOUR_INIT( ++ IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pKey, ++ IN UINT KeyLen) ++{ ++ UCHAR t, u; ++ UINT keyindex; ++ UINT stateindex; ++ PUCHAR state; ++ UINT counter; ++ ++ state = Ctx->STATE; ++ Ctx->X = 0; ++ Ctx->Y = 0; ++ for (counter = 0; counter < 256; counter++) ++ state[counter] = (UCHAR)counter; ++ keyindex = 0; ++ stateindex = 0; ++ for (counter = 0; counter < 256; counter++) ++ { ++ t = state[counter]; ++ stateindex = (stateindex + pKey[keyindex] + t) & 0xff; ++ u = state[stateindex]; ++ state[stateindex] = t; ++ state[counter] = u; ++ if (++keyindex >= KeyLen) ++ keyindex = 0; ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Get bytes from ARCFOUR CONTEXT (S-BOX) ++ ++ Arguments: ++ Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ ++ Return Value: ++ UCHAR - the value of the ARCFOUR CONTEXT (S-BOX) ++ ++ Note: ++ ++ ======================================================================== ++*/ ++UCHAR ARCFOUR_BYTE( ++ IN PARCFOURCONTEXT Ctx) ++{ ++ UINT x; ++ UINT y; ++ UCHAR sx, sy; ++ PUCHAR state; ++ ++ state = Ctx->STATE; ++ x = (Ctx->X + 1) & 0xff; ++ sx = state[x]; ++ y = (sx + Ctx->Y) & 0xff; ++ sy = state[y]; ++ Ctx->X = x; ++ Ctx->Y = y; ++ state[y] = sx; ++ state[x] = sy; ++ ++ return(state[(sx + sy) & 0xff]); ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ The Stream Cipher Decryption Algorithm ++ ++ Arguments: ++ Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ pDest Pointer to the Destination ++ pSrc Pointer to the Source data ++ Len Indicate the length of the Source data ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID ARCFOUR_DECRYPT( ++ IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, ++ IN PUCHAR pSrc, ++ IN UINT Len) ++{ ++ UINT i; ++ ++ for (i = 0; i < Len; i++) ++ pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ The Stream Cipher Encryption Algorithm ++ ++ Arguments: ++ Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ pDest Pointer to the Destination ++ pSrc Pointer to the Source data ++ Len Indicate the length of the Source dta ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID ARCFOUR_ENCRYPT( ++ IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, ++ IN PUCHAR pSrc, ++ IN UINT Len) ++{ ++ UINT i; ++ ++ for (i = 0; i < Len; i++) ++ pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ The Stream Cipher Encryption Algorithm which conform to the special requirement to encrypt GTK. ++ ++ Arguments: ++ Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ pDest Pointer to the Destination ++ pSrc Pointer to the Source data ++ Len Indicate the length of the Source dta ++ ++ ++ ======================================================================== ++*/ ++ ++VOID WPAARCFOUR_ENCRYPT( ++ IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, ++ IN PUCHAR pSrc, ++ IN UINT Len) ++{ ++ UINT i; ++ //discard first 256 bytes ++ for (i = 0; i < 256; i++) ++ ARCFOUR_BYTE(Ctx); ++ ++ for (i = 0; i < Len; i++) ++ pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calculate a new FCS given the current FCS and the new data. ++ ++ Arguments: ++ Fcs the original FCS value ++ Cp pointer to the data which will be calculate the FCS ++ Len the length of the data ++ ++ Return Value: ++ UINT - FCS 32 bits ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ ++ ======================================================================== ++*/ ++UINT RTMP_CALC_FCS32( ++ IN UINT Fcs, ++ IN PUCHAR Cp, ++ IN INT Len) ++{ ++ while (Len--) ++ Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); ++ ++ return (Fcs); ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Get last FCS and encrypt it to the destination ++ ++ Arguments: ++ pDest Pointer to the Destination ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPSetICV( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDest) ++{ ++ pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ ++ pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); ++ ++ ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAd->PrivateInfo.FCSCRC32, 4); ++} +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 2de29fd..5af78b8 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -52,9 +52,1209 @@ UCHAR OUI_WPA2_CCMP[4] = {0x00, 0x0F, 0xAC, 0x04}; + UCHAR OUI_WPA2_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x01}; + UCHAR OUI_WPA2_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x02}; + UCHAR OUI_WPA2_WEP104[4] = {0x00, 0x0F, 0xAC, 0x05}; +-// MSA OUI +-UCHAR OUI_MSA_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x05}; // Not yet final - IEEE 802.11s-D1.06 +-UCHAR OUI_MSA_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x06}; // Not yet final - IEEE 802.11s-D1.06 ++ ++ ++ ++static VOID ConstructEapolKeyData( ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR keyDescVer, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR *GTK, ++ IN UCHAR *RSNIE, ++ IN UCHAR RSNIE_LEN, ++ OUT PEAPOL_PACKET pMsg); ++ ++static VOID CalculateMIC( ++ IN UCHAR KeyDescVer, ++ IN UCHAR *PTK, ++ OUT PEAPOL_PACKET pMsg); ++ ++static VOID WpaEAPPacketAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem); ++ ++static VOID WpaEAPOLASFAlertAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem); ++ ++static VOID WpaEAPOLLogoffAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem); ++ ++static VOID WpaEAPOLStartAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem); ++ ++static VOID WpaEAPOLKeyAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem); ++ ++/* ++ ========================================================================== ++ Description: ++ association state machine init, including state transition and timer init ++ Parameters: ++ S - pointer to the association state machine ++ ========================================================================== ++ */ ++VOID WpaStateMachineInit( ++ IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE *S, ++ OUT STATE_MACHINE_FUNC Trans[]) ++{ ++ StateMachineInit(S, (STATE_MACHINE_FUNC *)Trans, MAX_WPA_PTK_STATE, MAX_WPA_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PTK, WPA_MACHINE_BASE); ++ ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPPacket, (STATE_MACHINE_FUNC)WpaEAPPacketAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLStart, (STATE_MACHINE_FUNC)WpaEAPOLStartAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLLogoff, (STATE_MACHINE_FUNC)WpaEAPOLLogoffAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLASFAlert, (STATE_MACHINE_FUNC)WpaEAPOLASFAlertAction); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ this is state machine function. ++ When receiving EAP packets which is for 802.1x authentication use. ++ Not use in PSK case ++ Return: ++ ========================================================================== ++*/ ++VOID WpaEAPPacketAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++} ++ ++VOID WpaEAPOLASFAlertAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++} ++ ++VOID WpaEAPOLLogoffAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ Start 4-way HS when rcv EAPOL_START which may create by our driver in assoc.c ++ Return: ++ ========================================================================== ++*/ ++VOID WpaEAPOLStartAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ MAC_TABLE_ENTRY *pEntry; ++ PHEADER_802_11 pHeader; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLStartAction ===> \n")); ++ ++ pHeader = (PHEADER_802_11)Elem->Msg; ++ ++ //For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. ++ if (Elem->MsgLen == 6) ++ pEntry = MacTableLookup(pAd, Elem->Msg); ++ else ++ { ++ pEntry = MacTableLookup(pAd, pHeader->Addr2); ++ } ++ ++ if (pEntry) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, (" PortSecured(%d), WpaState(%d), AuthMode(%d), PMKID_CacheIdx(%d) \n", pEntry->PortSecured, pEntry->WpaState, pEntry->AuthMode, pEntry->PMKID_CacheIdx)); ++ ++ if ((pEntry->PortSecured == WPA_802_1X_PORT_NOT_SECURED) ++ && (pEntry->WpaState < AS_PTKSTART) ++ && ((pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) || ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) && (pEntry->PMKID_CacheIdx != ENTRY_NOT_FOUND)))) ++ { ++ pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; ++ pEntry->WpaState = AS_INITPSK; ++ pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; ++ NdisZeroMemory(pEntry->R_Counter, sizeof(pEntry->R_Counter)); ++ pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; ++ ++ WPAStart4WayHS(pAd, pEntry, PEER_MSG1_RETRY_EXEC_INTV); ++ } ++ } ++} ++ ++/* ++ ========================================================================== ++ Description: ++ This is state machine function. ++ When receiving EAPOL packets which is for 802.1x key management. ++ Use both in WPA, and WPAPSK case. ++ In this function, further dispatch to different functions according to the received packet. 3 categories are : ++ 1. normal 4-way pairwisekey and 2-way groupkey handshake ++ 2. MIC error (Countermeasures attack) report packet from STA. ++ 3. Request for pairwise/group key update from STA ++ Return: ++ ========================================================================== ++*/ ++VOID WpaEAPOLKeyAction( ++ IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ MAC_TABLE_ENTRY *pEntry; ++ PHEADER_802_11 pHeader; ++ PEAPOL_PACKET pEapol_packet; ++ KEY_INFO peerKeyInfo; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLKeyAction ===>\n")); ++ ++ pHeader = (PHEADER_802_11)Elem->Msg; ++ pEapol_packet = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ ++ NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); ++ NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pEapol_packet->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ ++ hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); ++ ++ *((USHORT *)&peerKeyInfo) = cpu2le16(*((USHORT *)&peerKeyInfo)); ++ ++ do ++ { ++ pEntry = MacTableLookup(pAd, pHeader->Addr2); ++ ++ if (!pEntry || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ break; ++ ++ if (pEntry->AuthMode < Ndis802_11AuthModeWPA) ++ break; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPoL-Key frame from STA %02X-%02X-%02X-%02X-%02X-%02X\n", PRINT_MAC(pEntry->Addr))); ++ ++ if (((pEapol_packet->ProVer != EAPOL_VER) && (pEapol_packet->ProVer != EAPOL_VER2)) || ++ ((pEapol_packet->KeyDesc.Type != WPA1_KEY_DESC) && (pEapol_packet->KeyDesc.Type != WPA2_KEY_DESC))) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Key descripter does not match with WPA rule\n")); ++ break; ++ } ++ ++ // The value 1 shall be used for all EAPOL-Key frames to and from a STA when ++ // neither the group nor pairwise ciphers are CCMP for Key Descriptor 1. ++ if ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_TKIP)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(TKIP) \n")); ++ break; ++ } ++ // The value 2 shall be used for all EAPOL-Key frames to and from a STA when ++ // either the pairwise or the group cipher is AES-CCMP for Key Descriptor 2. ++ else if ((pEntry->WepStatus == Ndis802_11Encryption3Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_AES)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(AES) \n")); ++ break; ++ } ++ ++ // Check if this STA is in class 3 state and the WPA state is started ++ if ((pEntry->Sst == SST_ASSOC) && (pEntry->WpaState >= AS_INITPSK)) ++ { ++ // Check the Key Ack (bit 7) of the Key Information to determine the Authenticator ++ // or not. ++ // An EAPOL-Key frame that is sent by the Supplicant in response to an EAPOL- ++ // Key frame from the Authenticator must not have the Ack bit set. ++ if (peerKeyInfo.KeyAck == 1) ++ { ++ // The frame is snet by Authenticator. ++ // So the Supplicant side shall handle this. ++ ++ if ((peerKeyInfo.Secure == 0) && (peerKeyInfo.Request == 0) && ++ (peerKeyInfo.Error == 0) && (peerKeyInfo.KeyType == PAIRWISEKEY)) ++ { ++ // Process 1. the message 1 of 4-way HS in WPA or WPA2 ++ // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) ++ // 2. the message 3 of 4-way HS in WPA ++ // EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) ++ if (peerKeyInfo.KeyMic == 0) ++ PeerPairMsg1Action(pAd, pEntry, Elem); ++ else ++ PeerPairMsg3Action(pAd, pEntry, Elem); ++ } ++ else if ((peerKeyInfo.Secure == 1) && ++ (peerKeyInfo.KeyMic == 1) && ++ (peerKeyInfo.Request == 0) && ++ (peerKeyInfo.Error == 0)) ++ { ++ // Process 1. the message 3 of 4-way HS in WPA2 ++ // EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) ++ // 2. the message 1 of group KS in WPA or WPA2 ++ // EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) ++ if (peerKeyInfo.KeyType == PAIRWISEKEY) ++ PeerPairMsg3Action(pAd, pEntry, Elem); ++ else ++ PeerGroupMsg1Action(pAd, pEntry, Elem); ++ } ++ } ++ else ++ { ++ // The frame is snet by Supplicant. ++ // So the Authenticator side shall handle this. ++ if ((peerKeyInfo.Request == 0) && ++ (peerKeyInfo.Error == 0) && ++ (peerKeyInfo.KeyMic == 1)) ++ { ++ if (peerKeyInfo.Secure == 0 && peerKeyInfo.KeyType == PAIRWISEKEY) ++ { ++ // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) ++ // Process 1. message 2 of 4-way HS in WPA or WPA2 ++ // 2. message 4 of 4-way HS in WPA ++ if (CONV_ARRARY_TO_UINT16(pEapol_packet->KeyDesc.KeyDataLen) == 0) ++ { ++ PeerPairMsg4Action(pAd, pEntry, Elem); ++ } ++ else ++ { ++ PeerPairMsg2Action(pAd, pEntry, Elem); ++ } ++ } ++ else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == PAIRWISEKEY) ++ { ++ // EAPOL-Key(1,1,0,0,P,0,0,0,MIC,0) ++ // Process message 4 of 4-way HS in WPA2 ++ PeerPairMsg4Action(pAd, pEntry, Elem); ++ } ++ else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == GROUPKEY) ++ { ++ // EAPOL-Key(1,1,0,0,G,0,0,0,MIC,0) ++ // Process message 2 of Group key HS in WPA or WPA2 ++ PeerGroupMsg2Action(pAd, pEntry, &Elem->Msg[LENGTH_802_11], (Elem->MsgLen - LENGTH_802_11)); ++ } ++ } ++ } ++ } ++ }while(FALSE); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Copy frame from waiting queue into relative ring buffer and set ++ appropriate ASIC register to kick hardware encryption before really ++ sent out to air. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ PNDIS_PACKET Pointer to outgoing Ndis frame ++ NumberOfFrag Number of fragment required ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID RTMPToWirelessSta( ++ IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN UINT DataLen, ++ IN BOOLEAN bClearFrame) ++{ ++ PNDIS_PACKET pPacket; ++ NDIS_STATUS Status; ++ ++ if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ return; ++ ++ do { ++ // build a NDIS packet ++ Status = RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, pData, DataLen); ++ if (Status != NDIS_STATUS_SUCCESS) ++ break; ++ ++ ++ if (bClearFrame) ++ RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 1); ++ else ++ RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 0); ++ { ++ RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); ++ ++ RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, MAIN_MBSSID); // set a default value ++ if(pEntry->apidx != 0) ++ RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, pEntry->apidx); ++ ++ RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid); ++ RTMP_SET_PACKET_MOREDATA(pPacket, FALSE); ++ } ++ ++ { ++ // send out the packet ++ Status = STASendPacket(pAd, pPacket); ++ if (Status == NDIS_STATUS_SUCCESS) ++ { ++ UCHAR Index; ++ ++ // Dequeue one frame from TxSwQueue0..3 queue and process it ++ // There are three place calling dequeue for TX ring. ++ // 1. Here, right after queueing the frame. ++ // 2. At the end of TxRingTxDone service routine. ++ // 3. Upon NDIS call RTMPSendPackets ++ if((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) ++ { ++ for(Index = 0; Index < 5; Index ++) ++ if(pAd->TxSwQueue[Index].Number > 0) ++ RTMPDeQueuePacket(pAd, FALSE, Index, MAX_TX_PROCESS); ++ } ++ } ++ } ++ ++ } while (FALSE); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ This is a function to initilize 4-way handshake ++ ++ Return: ++ ++ ========================================================================== ++*/ ++VOID WPAStart4WayHS( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN ULONG TimeInterval) ++{ ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PUINT8 pBssid = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart4WayHS\n")); ++ ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : The interface is closed...\n")); ++ return; ++ } ++ ++ ++ if (pBssid == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : No corresponding Authenticator.\n")); ++ return; ++ } ++ ++ // Check the status ++ if ((pEntry->WpaState > AS_PTKSTART) || (pEntry->WpaState < AS_INITPMK)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : Not expect calling\n")); ++ return; ++ } ++ ++ ++ // Increment replay counter by 1 ++ ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); ++ ++ // Randomly generate ANonce ++ GenRandom(pAd, (UCHAR *)pBssid, pEntry->ANonce); ++ ++ // Construct EAPoL message - Pairwise Msg 1 ++ // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_PAIR_MSG_1, ++ 0, // Default key index ++ pEntry->ANonce, ++ NULL, // TxRSC ++ NULL, // GTK ++ NULL, // RSNIE ++ 0, // RSNIE length ++ &EAPOLPKT); ++ ++ ++ // Make outgoing frame ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, Header802_3, ++ LENGTH_802_3, (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); ++ ++ // Trigger Retry Timer ++ RTMPModTimer(&pEntry->RetryTimer, TimeInterval); ++ ++ // Update State ++ pEntry->WpaState = AS_PTKSTART; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart4WayHS: send Msg1 of 4-way \n")); ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Process Pairwise key Msg-1 of 4-way handshaking and send Msg-2 ++ ++ Arguments: ++ pAd Pointer to our adapter ++ Elem Message body ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID PeerPairMsg1Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ UCHAR PTK[80]; ++ UCHAR Header802_3[14]; ++ PEAPOL_PACKET pMsg1; ++ UINT MsgLen; ++ EAPOL_PACKET EAPOLPKT; ++ PUINT8 pCurrentAddr = NULL; ++ PUINT8 pmk_ptr = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 rsnie_ptr = NULL; ++ UCHAR rsnie_len = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg1Action \n")); ++ ++ if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ return; ++ ++ if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ return; ++ ++ { ++ pCurrentAddr = pAd->CurrentAddress; ++ pmk_ptr = pAd->StaCfg.PMK; ++ group_cipher = pAd->StaCfg.GroupCipher; ++ rsnie_ptr = pAd->StaCfg.RSN_IE; ++ rsnie_len = pAd->StaCfg.RSNIE_Len; ++ } ++ ++ // Store the received frame ++ pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; ++ ++ // Sanity Check peer Pairwise message 1 - Replay Counter ++ if (PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pEntry) == FALSE) ++ return; ++ ++ // Store Replay counter, it will use to verify message 3 and construct message 2 ++ NdisMoveMemory(pEntry->R_Counter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ ++ // Store ANonce ++ NdisMoveMemory(pEntry->ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); ++ ++ // Generate random SNonce ++ GenRandom(pAd, (UCHAR *)pCurrentAddr, pEntry->SNonce); ++ ++ { ++ // Calculate PTK(ANonce, SNonce) ++ WpaDerivePTK(pAd, ++ pmk_ptr, ++ pEntry->ANonce, ++ pEntry->Addr, ++ pEntry->SNonce, ++ pCurrentAddr, ++ PTK, ++ LEN_PTK); ++ ++ // Save key to PTK entry ++ NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); ++ } ++ ++ // Update WpaState ++ pEntry->WpaState = AS_PTKINIT_NEGOTIATING; ++ ++ // Construct EAPoL message - Pairwise Msg 2 ++ // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_PAIR_MSG_2, ++ 0, // DefaultKeyIdx ++ pEntry->SNonce, ++ NULL, // TxRsc ++ NULL, // GTK ++ (UCHAR *)rsnie_ptr, ++ rsnie_len, ++ &EAPOLPKT); ++ ++ // Make outgoing frame ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); ++ ++ RTMPToWirelessSta(pAd, pEntry, ++ Header802_3, sizeof(Header802_3), (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ When receiving the second packet of 4-way pairwisekey handshake. ++ Return: ++ ========================================================================== ++*/ ++VOID PeerPairMsg2Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ UCHAR PTK[80]; ++ BOOLEAN Cancelled; ++ PHEADER_802_11 pHeader; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pMsg2; ++ UINT MsgLen; ++ UCHAR Header802_3[LENGTH_802_3]; ++ UCHAR TxTsc[6]; ++ PUINT8 pBssid = NULL; ++ PUINT8 pmk_ptr = NULL; ++ PUINT8 gtk_ptr = NULL; ++ UCHAR default_key = 0; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 rsnie_ptr = NULL; ++ UCHAR rsnie_len = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg2Action \n")); ++ ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ return; ++ ++ if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ return; ++ ++ // check Entry in valid State ++ if (pEntry->WpaState < AS_PTKSTART) ++ return; ++ ++ ++ ++ // pointer to 802.11 header ++ pHeader = (PHEADER_802_11)Elem->Msg; ++ ++ // skip 802.11_header(24-byte) and LLC_header(8) ++ pMsg2 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; ++ ++ // Store SNonce ++ NdisMoveMemory(pEntry->SNonce, pMsg2->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); ++ ++ { ++ // Derive PTK ++ WpaDerivePTK(pAd, ++ (UCHAR *)pmk_ptr, ++ pEntry->ANonce, // ANONCE ++ (UCHAR *)pBssid, ++ pEntry->SNonce, // SNONCE ++ pEntry->Addr, ++ PTK, ++ LEN_PTK); ++ ++ NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); ++ } ++ ++ // Sanity Check peer Pairwise message 2 - Replay Counter, MIC, RSNIE ++ if (PeerWpaMessageSanity(pAd, pMsg2, MsgLen, EAPOL_PAIR_MSG_2, pEntry) == FALSE) ++ return; ++ ++ do ++ { ++ // delete retry timer ++ RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); ++ ++ // Change state ++ pEntry->WpaState = AS_PTKINIT_NEGOTIATING; ++ ++ // Increment replay counter by 1 ++ ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); ++ ++ // Construct EAPoL message - Pairwise Msg 3 ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_PAIR_MSG_3, ++ default_key, ++ pEntry->ANonce, ++ TxTsc, ++ (UCHAR *)gtk_ptr, ++ (UCHAR *)rsnie_ptr, ++ rsnie_len, ++ &EAPOLPKT); ++ ++ // Make outgoing frame ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, ++ (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); ++ ++ pEntry->ReTryCounter = PEER_MSG3_RETRY_TIMER_CTR; ++ RTMPSetTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); ++ ++ // Update State ++ pEntry->WpaState = AS_PTKINIT_NEGOTIATING; ++ }while(FALSE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg2Action: send Msg3 of 4-way \n")); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Process Pairwise key Msg 3 of 4-way handshaking and send Msg 4 ++ ++ Arguments: ++ pAd Pointer to our adapter ++ Elem Message body ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID PeerPairMsg3Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ PHEADER_802_11 pHeader; ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pMsg3; ++ UINT MsgLen; ++ PUINT8 pCurrentAddr = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg3Action \n")); ++ ++ if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ return; ++ ++ if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ return; ++ ++ { ++ pCurrentAddr = pAd->CurrentAddress; ++ group_cipher = pAd->StaCfg.GroupCipher; ++ ++ } ++ ++ // Record 802.11 header & the received EAPOL packet Msg3 ++ pHeader = (PHEADER_802_11) Elem->Msg; ++ pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; ++ ++ // Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE ++ if (PeerWpaMessageSanity(pAd, pMsg3, MsgLen, EAPOL_PAIR_MSG_3, pEntry) == FALSE) ++ return; ++ ++ // Save Replay counter, it will use construct message 4 ++ NdisMoveMemory(pEntry->R_Counter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ ++ // Double check ANonce ++ if (!NdisEqualMemory(pEntry->ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) ++ { ++ return; ++ } ++ ++ // Construct EAPoL message - Pairwise Msg 4 ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_PAIR_MSG_4, ++ 0, // group key index not used in message 4 ++ NULL, // Nonce not used in message 4 ++ NULL, // TxRSC not used in message 4 ++ NULL, // GTK not used in message 4 ++ NULL, // RSN IE not used in message 4 ++ 0, ++ &EAPOLPKT); ++ ++ // Update WpaState ++ pEntry->WpaState = AS_PTKINITDONE; ++ ++ // Update pairwise key ++ { ++ PCIPHER_KEY pSharedKey; ++ ++ pSharedKey = &pAd->SharedKey[BSS0][0]; ++ ++ NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); ++ ++ // Prepare pair-wise key information into shared key table ++ NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ pSharedKey->KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ ++ // Decide its ChiperAlg ++ if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) ++ pSharedKey->CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) ++ pSharedKey->CipherAlg = CIPHER_AES; ++ else ++ pSharedKey->CipherAlg = CIPHER_NONE; ++ ++ // Update these related information to MAC_TABLE_ENTRY ++ pEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; ++ ++ // Update pairwise key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, ++ pSharedKey->RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pEntry); ++ ++ } ++ ++ // open 802.1x port control and privacy filter ++ if (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK || ++ pEntry->AuthMode == Ndis802_11AuthModeWPA2) ++ { ++ pEntry->PortSecured = WPA_802_1X_PORT_SECURED; ++ pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ ++ STA_PORT_SECURED(pAd); ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = NdisMediaStateConnected; ++ DBGPRINT(RT_DEBUG_TRACE, ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", ++ GetAuthMode(pEntry->AuthMode), ++ GetEncryptType(pEntry->WepStatus), ++ GetEncryptType(group_cipher))); ++ } ++ else ++ { ++ } ++ ++ // Init 802.3 header and send out ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, ++ Header802_3, sizeof(Header802_3), ++ (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg3Action: send Msg4 of 4-way \n")); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ When receiving the last packet of 4-way pairwisekey handshake. ++ Initilize 2-way groupkey handshake following. ++ Return: ++ ========================================================================== ++*/ ++VOID PeerPairMsg4Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ PEAPOL_PACKET pMsg4; ++ PHEADER_802_11 pHeader; ++ UINT MsgLen; ++ BOOLEAN Cancelled; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg4Action\n")); ++ ++ do ++ { ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ break; ++ ++ if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2 ) ) ++ break; ++ ++ if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) ++ break; ++ ++ ++ // pointer to 802.11 header ++ pHeader = (PHEADER_802_11)Elem->Msg; ++ ++ // skip 802.11_header(24-byte) and LLC_header(8) ++ pMsg4 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; ++ ++ // Sanity Check peer Pairwise message 4 - Replay Counter, MIC ++ if (PeerWpaMessageSanity(pAd, pMsg4, MsgLen, EAPOL_PAIR_MSG_4, pEntry) == FALSE) ++ break; ++ ++ // 3. uses the MLME.SETKEYS.request to configure PTK into MAC ++ NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); ++ ++ // reset IVEIV in Asic ++ AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, 1, 0); ++ ++ pEntry->PairwiseKey.KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pEntry->PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pEntry->PTK[TKIP_AP_RXMICK_OFFSET], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pEntry->PTK[TKIP_AP_TXMICK_OFFSET], LEN_TKIP_TXMICK); ++ ++ // Set pairwise key to Asic ++ { ++ pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; ++ if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) ++ pEntry->PairwiseKey.CipherAlg = CIPHER_TKIP; ++ else if (pEntry->WepStatus == Ndis802_11Encryption3Enabled) ++ pEntry->PairwiseKey.CipherAlg = CIPHER_AES; ++ ++ // Add Pair-wise key to Asic ++ AsicAddPairwiseKeyEntry( ++ pAd, ++ pEntry->Addr, ++ (UCHAR)pEntry->Aid, ++ &pEntry->PairwiseKey); ++ ++ // update WCID attribute table and IVEIV table for this entry ++ RTMPAddWcidAttributeEntry( ++ pAd, ++ pEntry->apidx, ++ 0, ++ pEntry->PairwiseKey.CipherAlg, ++ pEntry); ++ } ++ ++ // 4. upgrade state ++ pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ pEntry->WpaState = AS_PTKINITDONE; ++ pEntry->PortSecured = WPA_802_1X_PORT_SECURED; ++ ++ ++ if (pEntry->AuthMode == Ndis802_11AuthModeWPA2 || ++ pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) ++ { ++ pEntry->GTKState = REKEY_ESTABLISHED; ++ RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); ++ ++ ++ // send wireless event - for set key done WPA2 ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), ++ group_cipher, ++ GetEncryptType(group_cipher))); ++ } ++ else ++ { ++ // 5. init Group 2-way handshake if necessary. ++ WPAStart2WayGroupHS(pAd, pEntry); ++ ++ pEntry->ReTryCounter = GROUP_MSG1_RETRY_TIMER_CTR; ++ RTMPModTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); ++ } ++ }while(FALSE); ++ ++} ++ ++/* ++ ========================================================================== ++ Description: ++ This is a function to send the first packet of 2-way groupkey handshake ++ Return: ++ ++ ========================================================================== ++*/ ++VOID WPAStart2WayGroupHS( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry) ++{ ++ UCHAR Header802_3[14]; ++ UCHAR TxTsc[6]; ++ EAPOL_PACKET EAPOLPKT; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ UCHAR default_key = 0; ++ PUINT8 gnonce_ptr = NULL; ++ PUINT8 gtk_ptr = NULL; ++ PUINT8 pBssid = NULL; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart2WayGroupHS\n")); ++ ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ return; ++ ++ ++ do ++ { ++ // Increment replay counter by 1 ++ ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); ++ ++ // Construct EAPoL message - Group Msg 1 ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_GROUP_MSG_1, ++ default_key, ++ (UCHAR *)gnonce_ptr, ++ TxTsc, ++ (UCHAR *)gtk_ptr, ++ NULL, ++ 0, ++ &EAPOLPKT); ++ ++ // Make outgoing frame ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, ++ Header802_3, LENGTH_802_3, ++ (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); ++ ++ ++ ++ }while (FALSE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart2WayGroupHS : send out Group Message 1 \n")); ++ ++ return; ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Process Group key 2-way handshaking ++ ++ Arguments: ++ pAd Pointer to our adapter ++ Elem Message body ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID PeerGroupMsg1Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem) ++{ ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pGroup; ++ UINT MsgLen; ++ BOOLEAN Cancelled; ++ UCHAR default_key = 0; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 pCurrentAddr = NULL; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg1Action \n")); ++ ++ if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ return; ++ ++ { ++ pCurrentAddr = pAd->CurrentAddress; ++ group_cipher = pAd->StaCfg.GroupCipher; ++ default_key = pAd->StaCfg.DefaultKeyId; ++ } ++ ++ // Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) ++ pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; ++ ++ // Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE ++ if (PeerWpaMessageSanity(pAd, pGroup, MsgLen, EAPOL_GROUP_MSG_1, pEntry) == FALSE) ++ return; ++ ++ // delete retry timer ++ RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); ++ ++ // Save Replay counter, it will use to construct message 2 ++ NdisMoveMemory(pEntry->R_Counter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ ++ // Construct EAPoL message - Group Msg 2 ++ NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ ConstructEapolMsg(pEntry, ++ group_cipher, ++ EAPOL_GROUP_MSG_2, ++ default_key, ++ NULL, // Nonce not used ++ NULL, // TxRSC not used ++ NULL, // GTK not used ++ NULL, // RSN IE not used ++ 0, ++ &EAPOLPKT); ++ ++ // open 802.1x port control and privacy filter ++ pEntry->PortSecured = WPA_802_1X_PORT_SECURED; ++ pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ ++ STA_PORT_SECURED(pAd); ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = NdisMediaStateConnected; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", ++ GetAuthMode(pEntry->AuthMode), ++ GetEncryptType(pEntry->WepStatus), ++ GetEncryptType(group_cipher))); ++ ++ // init header and Fill Packet and send Msg 2 to authenticator ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, ++ Header802_3, sizeof(Header802_3), ++ (PUCHAR)&EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerGroupMsg1Action: sned group message 2\n")); ++} ++ ++/* ++ ========================================================================== ++ Description: ++ When receiving the last packet of 2-way groupkey handshake. ++ Return: ++ ========================================================================== ++*/ ++VOID PeerGroupMsg2Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN VOID *Msg, ++ IN UINT MsgLen) ++{ ++ UINT Len; ++ PUCHAR pData; ++ BOOLEAN Cancelled; ++ PEAPOL_PACKET pMsg2; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg2Action \n")); ++ ++ do ++ { ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ break; ++ ++ if (MsgLen < (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ break; ++ ++ if (pEntry->WpaState != AS_PTKINITDONE) ++ break; ++ ++ ++ pData = (PUCHAR)Msg; ++ pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); ++ Len = MsgLen - LENGTH_802_1_H; ++ ++ // Sanity Check peer group message 2 - Replay Counter, MIC ++ if (PeerWpaMessageSanity(pAd, pMsg2, Len, EAPOL_GROUP_MSG_2, pEntry) == FALSE) ++ break; ++ ++ // 3. upgrade state ++ ++ RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); ++ pEntry->GTKState = REKEY_ESTABLISHED; ++ ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ { ++ // send wireless event - for set key done WPA2 ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), ++ group_cipher, GetEncryptType(group_cipher))); ++ } ++ else ++ { ++ // send wireless event - for set key done WPA ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA1_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA1, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), ++ group_cipher, GetEncryptType(group_cipher))); ++ } ++ }while(FALSE); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Classify WPA EAP message type ++ ++ Arguments: ++ EAPType Value of EAP message type ++ MsgType Internal Message definition for MLME state machine ++ ++ Return Value: ++ TRUE Found appropriate message type ++ FALSE No appropriate message type ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ All these constants are defined in wpa.h ++ For supplicant, there is only EAPOL Key message avaliable ++ ++ ======================================================================== ++*/ ++BOOLEAN WpaMsgTypeSubst( ++ IN UCHAR EAPType, ++ OUT INT *MsgType) ++{ ++ switch (EAPType) ++ { ++ case EAPPacket: ++ *MsgType = MT2_EAPPacket; ++ break; ++ case EAPOLStart: ++ *MsgType = MT2_EAPOLStart; ++ break; ++ case EAPOLLogoff: ++ *MsgType = MT2_EAPOLLogoff; ++ break; ++ case EAPOLKey: ++ *MsgType = MT2_EAPOLKey; ++ break; ++ case EAPOLASFAlert: ++ *MsgType = MT2_EAPOLASFAlert; ++ break; ++ default: ++ return FALSE; ++ } ++ return TRUE; ++} + + /* + ======================================================================== +@@ -126,7 +1326,7 @@ VOID PRF( + // Then concatenate to last result + for (i = 0; i < (len + 19) / 20; i++) + { +- HMAC_SHA1(input, total_len, key, key_len, &output[currentindex]); ++ HMAC_SHA1(key, key_len, input, total_len, &output[currentindex], SHA1_DIGEST_SIZE); + currentindex += 20; + + // update the last octet +@@ -136,6 +1336,61 @@ VOID PRF( + } + + /* ++* F(P, S, c, i) = U1 xor U2 xor ... Uc ++* U1 = PRF(P, S || Int(i)) ++* U2 = PRF(P, U1) ++* Uc = PRF(P, Uc-1) ++*/ ++ ++static void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output) ++{ ++ unsigned char digest[36], digest1[SHA1_DIGEST_SIZE]; ++ int i, j; ++ ++ /* U1 = PRF(P, S || int(i)) */ ++ memcpy(digest, ssid, ssidlength); ++ digest[ssidlength] = (unsigned char)((count>>24) & 0xff); ++ digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff); ++ digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff); ++ digest[ssidlength+3] = (unsigned char)(count & 0xff); ++ HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest, ssidlength+4, digest1, SHA1_DIGEST_SIZE); // for WPA update ++ ++ /* output = U1 */ ++ memcpy(output, digest1, SHA1_DIGEST_SIZE); ++ ++ for (i = 1; i < iterations; i++) ++ { ++ /* Un = PRF(P, Un-1) */ ++ HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); // for WPA update ++ memcpy(digest1, digest, SHA1_DIGEST_SIZE); ++ ++ /* output = output xor Un */ ++ for (j = 0; j < SHA1_DIGEST_SIZE; j++) ++ { ++ output[j] ^= digest[j]; ++ } ++ } ++} ++ ++/* ++* password - ascii string up to 63 characters in length ++* ssid - octet string up to 32 octets ++* ssidlength - length of ssid in octets ++* output must be 40 octets in length and outputs 256 bits of key ++*/ ++int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) ++{ ++ if ((strlen(password) > 63) || (ssidlength > 32)) ++ return 0; ++ ++ F(password, ssid, ssidlength, 4096, 1, output); ++ F(password, ssid, ssidlength, 4096, 2, &output[SHA1_DIGEST_SIZE]); ++ return 1; ++} ++ ++ ++ ++/* + ======================================================================== + + Routine Description: +@@ -143,7 +1398,7 @@ VOID PRF( + It shall be called by 4-way handshake processing. + + Arguments: +- pAd - pointer to our pAdapter context ++ pAd - pointer to our pAdapter context + PMK - pointer to PMK + ANonce - pointer to ANonce + AA - pointer to Authenticator Address +@@ -159,7 +1414,7 @@ VOID PRF( + + ======================================================================== + */ +-VOID WpaCountPTK( ++VOID WpaDerivePTK( + IN PRTMP_ADAPTER pAd, + IN UCHAR *PMK, + IN UCHAR *ANonce, +@@ -290,8 +1545,8 @@ VOID GenRandom( + + Arguments: + pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 +- WepStatus - indicate the encryption type ++ ElementID - indicate the WPA1 or WPA2 ++ WepStatus - indicate the encryption type + bMixCipher - a boolean to indicate the pairwise cipher and group + cipher are the same or not + +@@ -301,7 +1556,7 @@ VOID GenRandom( + + ======================================================================== + */ +-static VOID RTMPInsertRsnIeCipher( ++static VOID RTMPMakeRsnIeCipher( + IN PRTMP_ADAPTER pAd, + IN UCHAR ElementID, + IN UINT WepStatus, +@@ -324,7 +1579,7 @@ static VOID RTMPInsertRsnIeCipher( + + switch (WepStatus) + { +- // TKIP mode ++ // TKIP mode + case Ndis802_11Encryption2Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); + pRsnie_cipher->ucount = 1; +@@ -351,11 +1606,11 @@ static VOID RTMPInsertRsnIeCipher( + // Insert WPA2 TKIP as the first pairwise cipher + if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher)) + { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); + // Insert WPA2 AES as the secondary pairwise cipher + if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher)) + { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4); ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4); + PairwiseCnt = 2; + } + } +@@ -374,7 +1629,7 @@ static VOID RTMPInsertRsnIeCipher( + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) + { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ UINT GroupCipher = pAd->StaCfg.GroupCipher; + switch(GroupCipher) + { + case Ndis802_11GroupWEP40Enabled: +@@ -427,11 +1682,11 @@ static VOID RTMPInsertRsnIeCipher( + // Insert WPA TKIP as the first pairwise cipher + if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher)) + { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); + // Insert WPA AES as the secondary pairwise cipher + if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher)) + { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4); ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4); + PairwiseCnt = 2; + } + } +@@ -450,7 +1705,7 @@ static VOID RTMPInsertRsnIeCipher( + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) + { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ UINT GroupCipher = pAd->StaCfg.GroupCipher; + switch(GroupCipher) + { + case Ndis802_11GroupWEP40Enabled: +@@ -477,8 +1732,8 @@ static VOID RTMPInsertRsnIeCipher( + + Arguments: + pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 +- AuthMode - indicate the authentication mode ++ ElementID - indicate the WPA1 or WPA2 ++ AuthMode - indicate the authentication mode + apidx - indicate the interface index + + Return Value: +@@ -487,7 +1742,7 @@ static VOID RTMPInsertRsnIeCipher( + + ======================================================================== + */ +-static VOID RTMPInsertRsnIeAKM( ++static VOID RTMPMakeRsnIeAKM( + IN PRTMP_ADAPTER pAd, + IN UCHAR ElementID, + IN UINT AuthMode, +@@ -496,25 +1751,29 @@ static VOID RTMPInsertRsnIeAKM( + OUT UCHAR *rsn_len) + { + RSNIE_AUTH *pRsnie_auth; ++ UCHAR AkmCnt = 1; // default as 1 + + pRsnie_auth = (RSNIE_AUTH*)(pRsnIe + (*rsn_len)); + + // decide WPA2 or WPA1 + if (ElementID == Wpa2Ie) + { ++ + switch (AuthMode) + { + case Ndis802_11AuthModeWPA2: + case Ndis802_11AuthModeWPA1WPA2: +- pRsnie_auth->acount = 1; +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4); ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4); + break; + + case Ndis802_11AuthModeWPA2PSK: + case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- pRsnie_auth->acount = 1; +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4); ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4); + break; ++ default: ++ AkmCnt = 0; ++ break; ++ + } + } + else +@@ -523,26 +1782,28 @@ static VOID RTMPInsertRsnIeAKM( + { + case Ndis802_11AuthModeWPA: + case Ndis802_11AuthModeWPA1WPA2: +- pRsnie_auth->acount = 1; + NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_8021X_AKM, 4); + break; + + case Ndis802_11AuthModeWPAPSK: + case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- pRsnie_auth->acount = 1; + NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_PSK_AKM, 4); + break; + + case Ndis802_11AuthModeWPANone: +- pRsnie_auth->acount = 1; + NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_NONE_AKM, 4); + break; ++ default: ++ AkmCnt = 0; ++ break; + } + } + ++ pRsnie_auth->acount = AkmCnt; + pRsnie_auth->acount = cpu2le16(pRsnie_auth->acount); + +- (*rsn_len) += sizeof(RSNIE_AUTH); // update current RSNIE length ++ // update current RSNIE length ++ (*rsn_len) += (sizeof(RSNIE_AUTH) + (4 * (AkmCnt - 1))); + + } + +@@ -555,7 +1816,7 @@ static VOID RTMPInsertRsnIeAKM( + + Arguments: + pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 ++ ElementID - indicate the WPA1 or WPA2 + apidx - indicate the interface index + + Return Value: +@@ -564,7 +1825,7 @@ static VOID RTMPInsertRsnIeAKM( + + ======================================================================== + */ +-static VOID RTMPInsertRsnIeCap( ++static VOID RTMPMakeRsnIeCap( + IN PRTMP_ADAPTER pAd, + IN UCHAR ElementID, + IN UCHAR apidx, +@@ -595,8 +1856,8 @@ static VOID RTMPInsertRsnIeCap( + + Arguments: + pAd - pointer to our pAdapter context +- AuthMode - indicate the authentication mode +- WepStatus - indicate the encryption type ++ AuthMode - indicate the authentication mode ++ WepStatus - indicate the encryption type + apidx - indicate the interface index + + Return Value: +@@ -612,7 +1873,7 @@ VOID RTMPMakeRSNIE( + IN UCHAR apidx) + { + PUCHAR pRsnIe = NULL; // primary RSNIE +- UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE ++ UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE + UCHAR *rsnielen_ex_cur_p = 0; // the length of the secondary RSNIE + UCHAR PrimaryRsnie; + BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different +@@ -667,13 +1928,13 @@ VOID RTMPMakeRSNIE( + { + // Build the primary RSNIE + // 1. insert cipher suite +- RTMPInsertRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, FlexibleCipher, pRsnIe, &p_offset); ++ RTMPMakeRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, FlexibleCipher, pRsnIe, &p_offset); + + // 2. insert AKM +- RTMPInsertRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset); ++ RTMPMakeRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset); + + // 3. insert capability +- RTMPInsertRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset); ++ RTMPMakeRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset); + } + + // 4. update the RSNIE length +@@ -693,12 +1954,12 @@ VOID RTMPMakeRSNIE( + pAd - pointer to our pAdapter context + pEntry - pointer to active entry + pData - the received frame +- DataByteCount - the received frame's length ++ DataByteCount - the received frame's length + FromWhichBSSID - indicate the interface index + + Return: +- TRUE - This frame is EAP frame +- FALSE - otherwise ++ TRUE - This frame is EAP frame ++ FALSE - otherwise + ========================================================================== + */ + BOOLEAN RTMPCheckWPAframe( +@@ -741,7 +2002,7 @@ BOOLEAN RTMPCheckWPAframe( + DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL-Start frame, TYPE = 1 \n")); + if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) + { +- DBGPRINT(RT_DEBUG_TRACE, ("Cancel the EnqueueEapolStartTimerRunning \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("Cancel the EnqueueEapolStartTimerRunning \n")); + RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled); + pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; + } +@@ -764,73 +2025,1088 @@ BOOLEAN RTMPCheckWPAframe( + } + + /* ++ ========================================================================== ++ Description: ++ Report the EAP message type ++ ++ Arguments: ++ msg - EAPOL_PAIR_MSG_1 ++ EAPOL_PAIR_MSG_2 ++ EAPOL_PAIR_MSG_3 ++ EAPOL_PAIR_MSG_4 ++ EAPOL_GROUP_MSG_1 ++ EAPOL_GROUP_MSG_2 ++ ++ Return: ++ message type string ++ ++ ========================================================================== ++*/ ++PSTRING GetEapolMsgType(CHAR msg) ++{ ++ if(msg == EAPOL_PAIR_MSG_1) ++ return "Pairwise Message 1"; ++ else if(msg == EAPOL_PAIR_MSG_2) ++ return "Pairwise Message 2"; ++ else if(msg == EAPOL_PAIR_MSG_3) ++ return "Pairwise Message 3"; ++ else if(msg == EAPOL_PAIR_MSG_4) ++ return "Pairwise Message 4"; ++ else if(msg == EAPOL_GROUP_MSG_1) ++ return "Group Message 1"; ++ else if(msg == EAPOL_GROUP_MSG_2) ++ return "Group Message 2"; ++ else ++ return "Invalid Message"; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Check Sanity RSN IE of EAPoL message ++ ++ Arguments: ++ ++ Return Value: ++ ++ ++ ======================================================================== ++*/ ++BOOLEAN RTMPCheckRSNIE( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN UCHAR DataLen, ++ IN MAC_TABLE_ENTRY *pEntry, ++ OUT UCHAR *Offset) ++{ ++ PUCHAR pVIE; ++ UCHAR len; ++ PEID_STRUCT pEid; ++ BOOLEAN result = FALSE; ++ ++ pVIE = pData; ++ len = DataLen; ++ *Offset = 0; ++ ++ while (len > sizeof(RSNIE2)) ++ { ++ pEid = (PEID_STRUCT) pVIE; ++ // WPA RSN IE ++ if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) ++ { ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA || pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) && ++ (NdisEqualMemory(pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) && ++ (pEntry->RSNIE_Len == (pEid->Len + 2))) ++ { ++ result = TRUE; ++ } ++ ++ *Offset += (pEid->Len + 2); ++ } ++ // WPA2 RSN IE ++ else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) ++ { ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 || pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) && ++ (pEid->Eid == pEntry->RSN_IE[0]) && ++ ((pEid->Len + 2) >= pEntry->RSNIE_Len) && ++ (NdisEqualMemory(pEid->Octet, &pEntry->RSN_IE[2], pEntry->RSNIE_Len - 2))) ++ { ++ ++ result = TRUE; ++ } ++ ++ *Offset += (pEid->Len + 2); ++ } ++ else ++ { ++ break; ++ } ++ ++ pVIE += (pEid->Len + 2); ++ len -= (pEid->Len + 2); ++ } ++ ++ ++ return result; ++ ++} ++ ++/* + ======================================================================== + + Routine Description: +- Misc function to decrypt AES body ++ Parse KEYDATA field. KEYDATA[] May contain 2 RSN IE and optionally GTK. ++ GTK is encaptulated in KDE format at p.83 802.11i D10 + + Arguments: + + Return Value: + + Note: +- This function references to RFC 3394 for aes key unwrap algorithm. ++ 802.11i D10 + + ======================================================================== + */ +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UCHAR c_len, +- IN UCHAR *ciphertext) ++BOOLEAN RTMPParseEapolKeyData( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKeyData, ++ IN UCHAR KeyDataLen, ++ IN UCHAR GroupKeyIndex, ++ IN UCHAR MsgType, ++ IN BOOLEAN bWPA2, ++ IN MAC_TABLE_ENTRY *pEntry) ++{ ++ PKDE_ENCAP pKDE = NULL; ++ PUCHAR pMyKeyData = pKeyData; ++ UCHAR KeyDataLength = KeyDataLen; ++ UCHAR GTKLEN = 0; ++ UCHAR DefaultIdx = 0; ++ UCHAR skip_offset; ++ ++ // Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it ++ if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) ++ { ++ // Check RSN IE whether it is WPA2/WPA2PSK ++ if (!RTMPCheckRSNIE(pAd, pKeyData, KeyDataLen, pEntry, &skip_offset)) ++ { ++ // send wireless event - for RSN IE different ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_RSNIE_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_ERROR, ("RSN_IE Different in msg %d of 4-way handshake!\n", MsgType)); ++ hex_dump("Receive RSN_IE ", pKeyData, KeyDataLen); ++ hex_dump("Desired RSN_IE ", pEntry->RSN_IE, pEntry->RSNIE_Len); + ++ return FALSE; ++ } ++ else ++ { ++ if (bWPA2 && MsgType == EAPOL_PAIR_MSG_3) ++ { ++ WpaShowAllsuite(pMyKeyData, skip_offset); ++ ++ // skip RSN IE ++ pMyKeyData += skip_offset; ++ KeyDataLength -= skip_offset; ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPParseEapolKeyData ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", skip_offset)); ++ } ++ else ++ return TRUE; ++ } ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE,("RTMPParseEapolKeyData ==> KeyDataLength %d without RSN_IE \n", KeyDataLength)); ++ //hex_dump("remain data", pMyKeyData, KeyDataLength); ++ ++ ++ // Parse EKD format in pairwise_msg_3_WPA2 && group_msg_1_WPA2 ++ if (bWPA2 && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) ++ { ++ if (KeyDataLength >= 8) // KDE format exclude GTK length ++ { ++ pKDE = (PKDE_ENCAP) pMyKeyData; ++ ++ ++ DefaultIdx = pKDE->GTKEncap.Kid; ++ ++ // Sanity check - KED length ++ if (KeyDataLength < (pKDE->Len + 2)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR: The len from KDE is too short \n")); ++ return FALSE; ++ } ++ ++ // Get GTK length - refer to IEEE 802.11i-2004 p.82 ++ GTKLEN = pKDE->Len -6; ++ if (GTKLEN < LEN_AES_KEY) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN)); ++ return FALSE; ++ } ++ ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR: KDE format length is too short \n")); ++ return FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("GTK in KDE format ,DefaultKeyID=%d, KeyLen=%d \n", DefaultIdx, GTKLEN)); ++ // skip it ++ pMyKeyData += 8; ++ KeyDataLength -= 8; ++ ++ } ++ else if (!bWPA2 && MsgType == EAPOL_GROUP_MSG_1) ++ { ++ DefaultIdx = GroupKeyIndex; ++ DBGPRINT(RT_DEBUG_TRACE, ("GTK DefaultKeyID=%d \n", DefaultIdx)); ++ } ++ ++ // Sanity check - shared key index must be 1 ~ 3 ++ if (DefaultIdx < 1 || DefaultIdx > 3) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key index(%d) is invalid in %s %s \n", DefaultIdx, ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); ++ return FALSE; ++ } ++ ++ { ++ PCIPHER_KEY pSharedKey; ++ ++ // set key material, TxMic and RxMic ++ NdisMoveMemory(pAd->StaCfg.GTK, pMyKeyData, 32); ++ pAd->StaCfg.DefaultKeyId = DefaultIdx; ++ ++ pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; ++ ++ // Prepare pair-wise key information into shared key table ++ NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ pSharedKey->KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); ++ ++ // Update Shared Key CipherAlg ++ pSharedKey->CipherAlg = CIPHER_NONE; ++ if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) ++ pSharedKey->CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) ++ pSharedKey->CipherAlg = CIPHER_AES; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) ++ pSharedKey->CipherAlg = CIPHER_WEP64; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) ++ pSharedKey->CipherAlg = CIPHER_WEP128; ++ ++ ++ // Update group key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, ++ pSharedKey->RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ NULL); ++ } ++ ++ return TRUE; ++ ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Construct EAPoL message for WPA handshaking ++ Its format is below, ++ ++ +--------------------+ ++ | Protocol Version | 1 octet ++ +--------------------+ ++ | Protocol Type | 1 octet ++ +--------------------+ ++ | Body Length | 2 octets ++ +--------------------+ ++ | Descriptor Type | 1 octet ++ +--------------------+ ++ | Key Information | 2 octets ++ +--------------------+ ++ | Key Length | 1 octet ++ +--------------------+ ++ | Key Repaly Counter | 8 octets ++ +--------------------+ ++ | Key Nonce | 32 octets ++ +--------------------+ ++ | Key IV | 16 octets ++ +--------------------+ ++ | Key RSC | 8 octets ++ +--------------------+ ++ | Key ID or Reserved | 8 octets ++ +--------------------+ ++ | Key MIC | 16 octets ++ +--------------------+ ++ | Key Data Length | 2 octets ++ +--------------------+ ++ | Key Data | n octets ++ +--------------------+ ++ ++ ++ Arguments: ++ pAd Pointer to our adapter ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID ConstructEapolMsg( ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR *KeyNonce, ++ IN UCHAR *TxRSC, ++ IN UCHAR *GTK, ++ IN UCHAR *RSNIE, ++ IN UCHAR RSNIE_Len, ++ OUT PEAPOL_PACKET pMsg) + { +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR xor; +- INT i, j; +- aes_context aesctx; +- UCHAR *R; +- INT num_blocks = c_len/8; // unit:64bits ++ BOOLEAN bWPA2 = FALSE; ++ UCHAR KeyDescVer; ++ ++ // Choose WPA2 or not ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || ++ (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ bWPA2 = TRUE; ++ ++ // Init Packet and Fill header ++ pMsg->ProVer = EAPOL_VER; ++ pMsg->ProType = EAPOLKey; ++ ++ // Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field ++ SET_UINT16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); ++ ++ // Fill in EAPoL descriptor ++ if (bWPA2) ++ pMsg->KeyDesc.Type = WPA2_KEY_DESC; ++ else ++ pMsg->KeyDesc.Type = WPA1_KEY_DESC; ++ ++ // Key Descriptor Version (bits 0-2) specifies the key descriptor version type ++ { ++ // Fill in Key information, refer to IEEE Std 802.11i-2004 page 78 ++ // When either the pairwise or the group cipher is AES, the DESC_TYPE_AES(2) shall be used. ++ KeyDescVer = (((pEntry->WepStatus == Ndis802_11Encryption3Enabled) || ++ (GroupKeyWepStatus == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP)); ++ } ++ ++ pMsg->KeyDesc.KeyInfo.KeyDescVer = KeyDescVer; ++ ++ // Specify Key Type as Group(0) or Pairwise(1) ++ if (MsgType >= EAPOL_GROUP_MSG_1) ++ pMsg->KeyDesc.KeyInfo.KeyType = GROUPKEY; ++ else ++ pMsg->KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; ++ ++ // Specify Key Index, only group_msg1_WPA1 ++ if (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1)) ++ pMsg->KeyDesc.KeyInfo.KeyIndex = DefaultKeyIdx; ++ ++ if (MsgType == EAPOL_PAIR_MSG_3) ++ pMsg->KeyDesc.KeyInfo.Install = 1; ++ ++ if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1)) ++ pMsg->KeyDesc.KeyInfo.KeyAck = 1; ++ ++ if (MsgType != EAPOL_PAIR_MSG_1) ++ pMsg->KeyDesc.KeyInfo.KeyMic = 1; ++ ++ if ((bWPA2 && (MsgType >= EAPOL_PAIR_MSG_3)) || ++ (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1))) ++ { ++ pMsg->KeyDesc.KeyInfo.Secure = 1; ++ } ++ ++ if (bWPA2 && ((MsgType == EAPOL_PAIR_MSG_3) || ++ (MsgType == EAPOL_GROUP_MSG_1))) ++ { ++ pMsg->KeyDesc.KeyInfo.EKD_DL = 1; ++ } ++ ++ // key Information element has done. ++ *(USHORT *)(&pMsg->KeyDesc.KeyInfo) = cpu2le16(*(USHORT *)(&pMsg->KeyDesc.KeyInfo)); ++ ++ // Fill in Key Length ++ { ++ if (MsgType >= EAPOL_GROUP_MSG_1) ++ { ++ // the length of group key cipher ++ pMsg->KeyDesc.KeyLength[1] = ((GroupKeyWepStatus == Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : LEN_AES_KEY); ++ } ++ else ++ { ++ // the length of pairwise key cipher ++ pMsg->KeyDesc.KeyLength[1] = ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : LEN_AES_KEY); ++ } ++ } ++ ++ // Fill in replay counter ++ NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY); ++ ++ // Fill Key Nonce field ++ // ANonce : pairwise_msg1 & pairwise_msg3 ++ // SNonce : pairwise_msg2 ++ // GNonce : group_msg1_wpa1 ++ if ((MsgType <= EAPOL_PAIR_MSG_3) || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)))) ++ NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, LEN_KEY_DESC_NONCE); ++ ++ // Fill key IV - WPA2 as 0, WPA1 as random ++ if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) ++ { ++ // Suggest IV be random number plus some number, ++ NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], LEN_KEY_DESC_IV); ++ pMsg->KeyDesc.KeyIv[15] += 2; ++ } ++ ++ // Fill Key RSC field ++ // It contains the RSC for the GTK being installed. ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) ++ { ++ NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6); ++ } ++ ++ // Clear Key MIC field for MIC calculation later ++ NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); ++ ++ ConstructEapolKeyData(pEntry, ++ GroupKeyWepStatus, ++ KeyDescVer, ++ MsgType, ++ DefaultKeyIdx, ++ GTK, ++ RSNIE, ++ RSNIE_Len, ++ pMsg); ++ ++ // Calculate MIC and fill in KeyMic Field except Pairwise Msg 1. ++ if (MsgType != EAPOL_PAIR_MSG_1) ++ { ++ CalculateMIC(KeyDescVer, pEntry->PTK, pMsg); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> ConstructEapolMsg for %s %s\n", ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); ++ DBGPRINT(RT_DEBUG_TRACE, (" Body length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->Body_Len))); ++ DBGPRINT(RT_DEBUG_TRACE, (" Key length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyLength))); ++ ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Construct the Key Data field of EAPoL message ++ ++ Arguments: ++ pAd Pointer to our adapter ++ Elem Message body ++ ++ Return Value: ++ None ++ ++ Note: ++ ++ ======================================================================== ++*/ ++VOID ConstructEapolKeyData( ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR keyDescVer, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR *GTK, ++ IN UCHAR *RSNIE, ++ IN UCHAR RSNIE_LEN, ++ OUT PEAPOL_PACKET pMsg) ++{ ++ UCHAR *mpool, *Key_Data, *Rc4GTK; ++ UCHAR ekey[(LEN_KEY_DESC_IV+LEN_EAP_EK)]; ++ ULONG data_offset; ++ BOOLEAN bWPA2Capable = FALSE; ++ PRTMP_ADAPTER pAd = pEntry->pAd; ++ BOOLEAN GTK_Included = FALSE; ++ ++ // Choose WPA2 or not ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || ++ (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ bWPA2Capable = TRUE; ++ ++ if (MsgType == EAPOL_PAIR_MSG_1 || ++ MsgType == EAPOL_PAIR_MSG_4 || ++ MsgType == EAPOL_GROUP_MSG_2) ++ return; ++ ++ // allocate memory pool ++ os_alloc_mem(NULL, (PUCHAR *)&mpool, 1500); ++ ++ if (mpool == NULL) ++ return; ++ ++ /* Rc4GTK Len = 512 */ ++ Rc4GTK = (UCHAR *) ROUND_UP(mpool, 4); ++ /* Key_Data Len = 512 */ ++ Key_Data = (UCHAR *) ROUND_UP(Rc4GTK + 512, 4); ++ ++ NdisZeroMemory(Key_Data, 512); ++ SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, 0); ++ data_offset = 0; ++ ++ // Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 ++ if (RSNIE_LEN && ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3))) ++ { ++ PUINT8 pmkid_ptr = NULL; ++ UINT8 pmkid_len = 0; ++ ++ ++ RTMPInsertRSNIE(&Key_Data[data_offset], ++ &data_offset, ++ RSNIE, ++ RSNIE_LEN, ++ pmkid_ptr, ++ pmkid_len); ++ } ++ ++ ++ // Encapsulate KDE format in pairwise_msg3_WPA2 & group_msg1_WPA2 ++ if (bWPA2Capable && ((MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1))) ++ { ++ // Key Data Encapsulation (KDE) format - 802.11i-2004 Figure-43w and Table-20h ++ Key_Data[data_offset + 0] = 0xDD; + ++ if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) ++ { ++ Key_Data[data_offset + 1] = 0x16;// 4+2+16(OUI+DataType+DataField) ++ } ++ else ++ { ++ Key_Data[data_offset + 1] = 0x26;// 4+2+32(OUI+DataType+DataField) ++ } ++ ++ Key_Data[data_offset + 2] = 0x00; ++ Key_Data[data_offset + 3] = 0x0F; ++ Key_Data[data_offset + 4] = 0xAC; ++ Key_Data[data_offset + 5] = 0x01; ++ ++ // GTK KDE format - 802.11i-2004 Figure-43x ++ Key_Data[data_offset + 6] = (DefaultKeyIdx & 0x03); ++ Key_Data[data_offset + 7] = 0x00; // Reserved Byte ++ ++ data_offset += 8; ++ } ++ ++ ++ // Encapsulate GTK ++ // Only for pairwise_msg3_WPA2 and group_msg1 ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2Capable) || (MsgType == EAPOL_GROUP_MSG_1)) ++ { ++ // Fill in GTK ++ if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) ++ { ++ NdisMoveMemory(&Key_Data[data_offset], GTK, LEN_AES_KEY); ++ data_offset += LEN_AES_KEY; ++ } ++ else ++ { ++ NdisMoveMemory(&Key_Data[data_offset], GTK, TKIP_GTK_LENGTH); ++ data_offset += TKIP_GTK_LENGTH; ++ } ++ ++ GTK_Included = TRUE; ++ } ++ ++ ++ // This whole key-data field shall be encrypted if a GTK is included. ++ // Encrypt the data material in key data field with KEK ++ if (GTK_Included) ++ { ++ //hex_dump("GTK_Included", Key_Data, data_offset); ++ ++ if ( ++ (keyDescVer == DESC_TYPE_AES)) ++ { ++ UCHAR remainder = 0; ++ UCHAR pad_len = 0; ++ ++ // Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, ++ // shall be used to encrypt the Key Data field using the KEK field from ++ // the derived PTK. ++ ++ // If the Key Data field uses the NIST AES key wrap, then the Key Data field ++ // shall be padded before encrypting if the key data length is less than 16 ++ // octets or if it is not a multiple of 8. The padding consists of appending ++ // a single octet 0xdd followed by zero or more 0x00 octets. ++ if ((remainder = data_offset & 0x07) != 0) ++ { ++ INT i; ++ ++ pad_len = (8 - remainder); ++ Key_Data[data_offset] = 0xDD; ++ for (i = 1; i < pad_len; i++) ++ Key_Data[data_offset + i] = 0; ++ ++ data_offset += pad_len; ++ } ++ ++ AES_GTK_KEY_WRAP(&pEntry->PTK[16], Key_Data, data_offset, Rc4GTK); ++ // AES wrap function will grow 8 bytes in length ++ data_offset += 8; ++ } ++ else ++ { ++ /* Key Descriptor Version 1: ARC4 is used to encrypt the Key Data field ++ using the KEK field from the derived PTK. */ ++ ++ // PREPARE Encrypted "Key DATA" field. (Encrypt GTK with RC4, usinf PTK[16]->[31] as Key, IV-field as IV) ++ // put TxTsc in Key RSC field ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ ++ // ekey is the contanetion of IV-field, and PTK[16]->PTK[31] ++ NdisMoveMemory(ekey, pMsg->KeyDesc.KeyIv, LEN_KEY_DESC_IV); ++ NdisMoveMemory(&ekey[LEN_KEY_DESC_IV], &pEntry->PTK[16], LEN_EAP_EK); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); //INIT SBOX, KEYLEN+3(IV) ++ pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, Key_Data, data_offset); ++ WPAARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, Rc4GTK, Key_Data, data_offset); ++ } ++ ++ NdisMoveMemory(pMsg->KeyDesc.KeyData, Rc4GTK, data_offset); ++ } ++ else ++ { ++ NdisMoveMemory(pMsg->KeyDesc.KeyData, Key_Data, data_offset); ++ } ++ ++ // Update key data length field and total body length ++ SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, data_offset); ++ INC_UINT16_TO_ARRARY(pMsg->Body_Len, data_offset); ++ ++ os_free_mem(NULL, mpool); ++ ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calcaulate MIC. It is used during 4-ways handsharking. ++ ++ Arguments: ++ pAd - pointer to our pAdapter context ++ PeerWepStatus - indicate the encryption type ++ ++ Return Value: ++ ++ Note: ++ ++ ======================================================================== ++*/ ++static VOID CalculateMIC( ++ IN UCHAR KeyDescVer, ++ IN UCHAR *PTK, ++ OUT PEAPOL_PACKET pMsg) ++{ ++ UCHAR *OutBuffer; ++ ULONG FrameLen = 0; ++ UCHAR mic[LEN_KEY_DESC_MIC]; ++ UCHAR digest[80]; + +- os_alloc_mem(NULL, (PUCHAR *)&R, 512); ++ // allocate memory for MIC calculation ++ os_alloc_mem(NULL, (PUCHAR *)&OutBuffer, 512); + +- if (R == NULL) ++ if (OutBuffer == NULL) + { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); +- return; +- } /* End of if */ ++ DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); ++ return; ++ } ++ ++ // make a frame for calculating MIC. ++ MakeOutgoingFrame(OutBuffer, &FrameLen, ++ CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, ++ END_OF_ARGS); + +- // Initialize +- NdisMoveMemory(A, ciphertext, 8); +- //Input plaintext +- for(i = 0; i < (c_len-8); i++) ++ NdisZeroMemory(mic, sizeof(mic)); ++ ++ // Calculate MIC ++ if (KeyDescVer == DESC_TYPE_AES) ++ { ++ HMAC_SHA1(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); ++ NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); ++ } ++ else + { +- R[ i] = ciphertext[i + 8]; ++ HMAC_MD5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, mic, MD5_DIGEST_SIZE); + } + +- rtmp_aes_set_key(&aesctx, key, 128); ++ // store the calculated MIC ++ NdisMoveMemory(pMsg->KeyDesc.KeyMic, mic, LEN_KEY_DESC_MIC); + +- for(j = 5; j >= 0; j--) ++ os_free_mem(NULL, OutBuffer); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Some received frames can't decrypt by Asic, so decrypt them by software. ++ ++ Arguments: ++ pAd - pointer to our pAdapter context ++ PeerWepStatus - indicate the encryption type ++ ++ Return Value: ++ NDIS_STATUS_SUCCESS - decryption successful ++ NDIS_STATUS_FAILURE - decryption failure ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RTMPSoftDecryptBroadCastData( ++ IN PRTMP_ADAPTER pAd, ++ IN RX_BLK *pRxBlk, ++ IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, ++ IN PCIPHER_KEY pShard_key) ++{ ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ ++ ++ ++ // handle WEP decryption ++ if (GroupCipher == Ndis802_11Encryption1Enabled) + { +- for(i = (num_blocks-1); i > 0; i--) ++ if (RTMPSoftDecryptWEP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, pShard_key)) + { +- xor = (num_blocks -1 )* j + i; +- NdisMoveMemory(BIN, A, 8); +- BIN[7] = A[7] ^ xor; +- NdisMoveMemory(&BIN[8], &R[(i-1)*8], 8); +- rtmp_aes_decrypt(&aesctx, BIN, BOUT); +- NdisMoveMemory(A, &BOUT[0], 8); +- NdisMoveMemory(&R[(i-1)*8], &BOUT[8], 8); ++ ++ //Minus IV[4] & ICV[4] ++ pRxWI->MPDUtotalByteCount -= 8; + } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR : Software decrypt WEP data fails.\n")); ++ // give up this frame ++ return NDIS_STATUS_FAILURE; ++ } ++ } ++ // handle TKIP decryption ++ else if (GroupCipher == Ndis802_11Encryption2Enabled) ++ { ++ if (RTMPSoftDecryptTKIP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, pShard_key)) ++ { ++ ++ //Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV ++ pRxWI->MPDUtotalByteCount -= 20; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptTKIP Failed\n")); ++ // give up this frame ++ return NDIS_STATUS_FAILURE; ++ } + } ++ // handle AES decryption ++ else if (GroupCipher == Ndis802_11Encryption3Enabled) ++ { ++ if (RTMPSoftDecryptAES(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount , pShard_key)) ++ { + +- // OUTPUT +- for(i = 0; i < c_len; i++) ++ //8 bytes MIC, 8 bytes IV/EIV (CCMP Header) ++ pRxWI->MPDUtotalByteCount -= 16; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptAES Failed\n")); ++ // give up this frame ++ return NDIS_STATUS_FAILURE; ++ } ++ } ++ else + { +- plaintext[i] = R[i]; ++ // give up this frame ++ return NDIS_STATUS_FAILURE; + } + ++ return NDIS_STATUS_SUCCESS; ++ ++} ++ ++ ++PUINT8 GetSuiteFromRSNIE( ++ IN PUINT8 rsnie, ++ IN UINT rsnie_len, ++ IN UINT8 type, ++ OUT UINT8 *count) ++{ ++ PEID_STRUCT pEid; ++ INT len; ++ PUINT8 pBuf; ++ INT offset = 0; ++ PRSNIE_AUTH pAkm; ++ UINT16 acount; ++ BOOLEAN isWPA2 = FALSE; ++ ++ pEid = (PEID_STRUCT)rsnie; ++ len = rsnie_len - 2; // exclude IE and length ++ pBuf = (PUINT8)&pEid->Octet[0]; ++ ++ ++ ++ // set default value ++ *count = 0; ++ ++ // Check length ++ if ((len <= 0) || (pEid->Len != len)) ++ { ++ DBGPRINT_ERR(("%s : The length is invalid\n", __func__)); ++ return NULL; ++ } ++ ++ // Check WPA or WPA2 ++ if (pEid->Eid == IE_WPA) ++ { ++ PRSNIE pRsnie = (PRSNIE)pBuf; ++ UINT16 ucount; ++ ++ if (len < sizeof(RSNIE)) ++ { ++ DBGPRINT_ERR(("%s : The length is too short for WPA\n", __func__)); ++ return NULL; ++ } ++ ++ // Get the count of pairwise cipher ++ ucount = cpu2le16(pRsnie->ucount); ++ if (ucount > 2) ++ { ++ DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", ++ __func__, ucount)); ++ return NULL; ++ } ++ ++ // Get the group cipher ++ if (type == GROUP_SUITE) ++ { ++ *count = 1; ++ return pRsnie->mcast; ++ } ++ // Get the pairwise cipher suite ++ else if (type == PAIRWISE_SUITE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", ++ __func__, ucount)); ++ *count = ucount; ++ return pRsnie->ucast[0].oui; ++ } ++ ++ offset = sizeof(RSNIE) + (4 * (ucount - 1)); ++ ++ } ++ else if (pEid->Eid == IE_RSN) ++ { ++ PRSNIE2 pRsnie = (PRSNIE2)pBuf; ++ UINT16 ucount; ++ ++ isWPA2 = TRUE; ++ ++ if (len < sizeof(RSNIE2)) ++ { ++ DBGPRINT_ERR(("%s : The length is too short for WPA2\n", __func__)); ++ return NULL; ++ } ++ ++ // Get the count of pairwise cipher ++ ucount = cpu2le16(pRsnie->ucount); ++ if (ucount > 2) ++ { ++ DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", ++ __func__, ucount)); ++ return NULL; ++ } ++ ++ // Get the group cipher ++ if (type == GROUP_SUITE) ++ { ++ *count = 1; ++ return pRsnie->mcast; ++ } ++ // Get the pairwise cipher suite ++ else if (type == PAIRWISE_SUITE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", ++ __func__, ucount)); ++ *count = ucount; ++ return pRsnie->ucast[0].oui; ++ } ++ ++ offset = sizeof(RSNIE2) + (4 * (ucount - 1)); ++ ++ } ++ else ++ { ++ DBGPRINT_ERR(("%s : Unknown IE (%d)\n", __func__, pEid->Eid)); ++ return NULL; ++ } ++ ++ // skip group cipher and pairwise cipher suite ++ pBuf += offset; ++ len -= offset; ++ ++ if (len < sizeof(RSNIE_AUTH)) ++ { ++ DBGPRINT_ERR(("%s : The length of RSNIE is too short\n", __func__)); ++ return NULL; ++ } ++ ++ // pointer to AKM count ++ pAkm = (PRSNIE_AUTH)pBuf; ++ ++ // Get the count of pairwise cipher ++ acount = cpu2le16(pAkm->acount); ++ if (acount > 2) ++ { ++ DBGPRINT_ERR(("%s : The count(%d) of AKM is invlaid\n", ++ __func__, acount)); ++ return NULL; ++ } ++ ++ // Get the AKM suite ++ if (type == AKM_SUITE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of AKM is %d\n", ++ __func__, acount)); ++ *count = acount; ++ return pAkm->auth[0].oui; ++ } ++ offset = sizeof(RSNIE_AUTH) + (4 * (acount - 1)); ++ ++ pBuf += offset; ++ len -= offset; ++ ++ // The remaining length must larger than (RSN-Capability(2) + PMKID-Count(2) + PMKID(16~)) ++ if (len >= (sizeof(RSN_CAPABILITIES) + 2 + LEN_PMKID)) ++ { ++ // Skip RSN capability and PMKID-Count ++ pBuf += (sizeof(RSN_CAPABILITIES) + 2); ++ len -= (sizeof(RSN_CAPABILITIES) + 2); ++ ++ // Get PMKID ++ if (type == PMKID_LIST) ++ { ++ *count = 1; ++ return pBuf; ++ } ++ } ++ else ++ { ++ DBGPRINT_ERR(("%s : it can't get any more information beyond AKM \n", __func__)); ++ return NULL; ++ } ++ ++ *count = 0; ++ //DBGPRINT_ERR(("%s : The type(%d) doesn't support \n", __func__, type)); ++ return NULL; ++ ++} ++ ++VOID WpaShowAllsuite( ++ IN PUINT8 rsnie, ++ IN UINT rsnie_len) ++{ ++ PUINT8 pSuite = NULL; ++ UINT8 count; ++ ++ hex_dump("RSNIE", rsnie, rsnie_len); ++ ++ // group cipher ++ if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, &count)) != NULL) ++ { ++ hex_dump("group cipher", pSuite, 4*count); ++ } ++ ++ // pairwise cipher ++ if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, &count)) != NULL) ++ { ++ hex_dump("pairwise cipher", pSuite, 4*count); ++ } ++ ++ // AKM ++ if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) ++ { ++ hex_dump("AKM suite", pSuite, 4*count); ++ } ++ ++ // PMKID ++ if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) ++ { ++ hex_dump("PMKID", pSuite, LEN_PMKID); ++ } ++ ++} ++ ++VOID RTMPInsertRSNIE( ++ IN PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PUINT8 rsnie_ptr, ++ IN UINT8 rsnie_len, ++ IN PUINT8 pmkid_ptr, ++ IN UINT8 pmkid_len) ++{ ++ PUCHAR pTmpBuf; ++ ULONG TempLen = 0; ++ UINT8 extra_len = 0; ++ UINT16 pmk_count = 0; ++ UCHAR ie_num; ++ UINT8 total_len = 0; ++ UCHAR WPA2_OUI[3]={0x00,0x0F,0xAC}; ++ ++ pTmpBuf = pFrameBuf; ++ ++ /* PMKID-List Must larger than 0 and the multiple of 16. */ ++ if (pmkid_len > 0 && ((pmkid_len & 0x0f) == 0)) ++ { ++ extra_len = sizeof(UINT16) + pmkid_len; ++ ++ pmk_count = (pmkid_len >> 4); ++ pmk_count = cpu2le16(pmk_count); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_WARN, ("%s : The length is PMKID-List is invalid (%d), so don't insert it.\n", ++ __func__, pmkid_len)); ++ } ++ ++ if (rsnie_len != 0) ++ { ++ ie_num = IE_WPA; ++ total_len = rsnie_len; ++ ++ if (NdisEqualMemory(rsnie_ptr + 2, WPA2_OUI, sizeof(WPA2_OUI))) ++ { ++ ie_num = IE_RSN; ++ total_len += extra_len; ++ } ++ ++ /* construct RSNIE body */ ++ MakeOutgoingFrame(pTmpBuf, &TempLen, ++ 1, &ie_num, ++ 1, &total_len, ++ rsnie_len, rsnie_ptr, ++ END_OF_ARGS); ++ ++ pTmpBuf += TempLen; ++ *pFrameLen = *pFrameLen + TempLen; ++ ++ if (ie_num == IE_RSN) ++ { ++ /* Insert PMKID-List field */ ++ if (extra_len > 0) ++ { ++ MakeOutgoingFrame(pTmpBuf, &TempLen, ++ 2, &pmk_count, ++ pmkid_len, pmkid_ptr, ++ END_OF_ARGS); ++ ++ pTmpBuf += TempLen; ++ *pFrameLen = *pFrameLen + TempLen; ++ } ++ } ++ } + +- os_free_mem(NULL, R); ++ return; + } +diff --git a/drivers/staging/rt2860/common/crypt_hmac.c b/drivers/staging/rt2860/common/crypt_hmac.c +new file mode 100644 +index 0000000..02701a5 +--- /dev/null ++++ b/drivers/staging/rt2860/common/crypt_hmac.c +@@ -0,0 +1,194 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ *************************************************************************/ ++ ++#include "../crypt_hmac.h" ++ ++ ++#ifdef HMAC_SHA1_SUPPORT ++/* ++======================================================================== ++Routine Description: ++ HMAC using SHA1 hash function ++ ++Arguments: ++ key Secret key ++ key_len The length of the key in bytes ++ message Message context ++ message_len The length of message in bytes ++ macLen Request the length of message authentication code ++ ++Return Value: ++ mac Message authentication code ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID HMAC_SHA1 ( ++ IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 MAC[], ++ IN UINT MACLen) ++{ ++ SHA1_CTX_STRUC sha_ctx1; ++ SHA1_CTX_STRUC sha_ctx2; ++ UINT8 K0[SHA1_BLOCK_SIZE]; ++ UINT8 Digest[SHA1_DIGEST_SIZE]; ++ UINT index; ++ ++ NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); ++ NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); ++ /* ++ * If the length of K = B(Block size): K0 = K. ++ * If the length of K > B: hash K to obtain an L byte string, ++ * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). ++ * If the length of K < B: append zeros to the end of K to create a B-byte string K0 ++ */ ++ NdisZeroMemory(K0, SHA1_BLOCK_SIZE); ++ if (KeyLen <= SHA1_BLOCK_SIZE) ++ NdisMoveMemory(K0, Key, KeyLen); ++ else ++ RT_SHA1(Key, KeyLen, K0); ++ /* End of if */ ++ ++ /* Exclusive-Or K0 with ipad */ ++ /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ ++ for (index = 0; index < SHA1_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36; ++ /* End of for */ ++ ++ RT_SHA1_Init(&sha_ctx1); ++ /* H(K0^ipad) */ ++ SHA1_Append(&sha_ctx1, K0, sizeof(K0)); ++ /* H((K0^ipad)||text) */ ++ SHA1_Append(&sha_ctx1, Message, MessageLen); ++ SHA1_End(&sha_ctx1, Digest); ++ ++ /* Exclusive-Or K0 with opad and remove ipad */ ++ /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ ++ for (index = 0; index < SHA1_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36^0x5c; ++ /* End of for */ ++ ++ RT_SHA1_Init(&sha_ctx2); ++ /* H(K0^opad) */ ++ SHA1_Append(&sha_ctx2, K0, sizeof(K0)); ++ /* H( (K0^opad) || H((K0^ipad)||text) ) */ ++ SHA1_Append(&sha_ctx2, Digest, SHA1_DIGEST_SIZE); ++ SHA1_End(&sha_ctx2, Digest); ++ ++ if (MACLen > SHA1_DIGEST_SIZE) ++ NdisMoveMemory(MAC, Digest, SHA1_DIGEST_SIZE); ++ else ++ NdisMoveMemory(MAC, Digest, MACLen); ++} /* End of HMAC_SHA1 */ ++#endif /* HMAC_SHA1_SUPPORT */ ++ ++#ifdef HMAC_MD5_SUPPORT ++/* ++======================================================================== ++Routine Description: ++ HMAC using MD5 hash function ++ ++Arguments: ++ key Secret key ++ key_len The length of the key in bytes ++ message Message context ++ message_len The length of message in bytes ++ macLen Request the length of message authentication code ++ ++Return Value: ++ mac Message authentication code ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID HMAC_MD5( ++ IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 MAC[], ++ IN UINT MACLen) ++{ ++ MD5_CTX_STRUC md5_ctx1; ++ MD5_CTX_STRUC md5_ctx2; ++ UINT8 K0[MD5_BLOCK_SIZE]; ++ UINT8 Digest[MD5_DIGEST_SIZE]; ++ UINT index; ++ ++ NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); ++ NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); ++ /* ++ * If the length of K = B(Block size): K0 = K. ++ * If the length of K > B: hash K to obtain an L byte string, ++ * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). ++ * If the length of K < B: append zeros to the end of K to create a B-byte string K0 ++ */ ++ NdisZeroMemory(K0, MD5_BLOCK_SIZE); ++ if (KeyLen <= MD5_BLOCK_SIZE) { ++ NdisMoveMemory(K0, Key, KeyLen); ++ } else { ++ RT_MD5(Key, KeyLen, K0); ++ } ++ ++ /* Exclusive-Or K0 with ipad */ ++ /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ ++ for (index = 0; index < MD5_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36; ++ /* End of for */ ++ ++ MD5_Init(&md5_ctx1); ++ /* H(K0^ipad) */ ++ MD5_Append(&md5_ctx1, K0, sizeof(K0)); ++ /* H((K0^ipad)||text) */ ++ MD5_Append(&md5_ctx1, Message, MessageLen); ++ MD5_End(&md5_ctx1, Digest); ++ ++ /* Exclusive-Or K0 with opad and remove ipad */ ++ /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ ++ for (index = 0; index < MD5_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36^0x5c; ++ /* End of for */ ++ ++ MD5_Init(&md5_ctx2); ++ /* H(K0^opad) */ ++ MD5_Append(&md5_ctx2, K0, sizeof(K0)); ++ /* H( (K0^opad) || H((K0^ipad)||text) ) */ ++ MD5_Append(&md5_ctx2, Digest, MD5_DIGEST_SIZE); ++ MD5_End(&md5_ctx2, Digest); ++ ++ if (MACLen > MD5_DIGEST_SIZE) ++ NdisMoveMemory(MAC, Digest, MD5_DIGEST_SIZE); ++ else ++ NdisMoveMemory(MAC, Digest, MACLen); ++} /* End of HMAC_SHA256 */ ++#endif /* HMAC_MD5_SUPPORT */ ++ ++/* End of crypt_hmac.c */ +diff --git a/drivers/staging/rt2860/common/crypt_md5.c b/drivers/staging/rt2860/common/crypt_md5.c +new file mode 100644 +index 0000000..7c9ecfa +--- /dev/null ++++ b/drivers/staging/rt2860/common/crypt_md5.c +@@ -0,0 +1,352 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ *************************************************************************/ ++ ++#include "../crypt_md5.h" ++ ++#ifdef MD5_SUPPORT ++/* ++ * F, G, H and I are basic MD5 functions. ++ */ ++#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) ++#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) ++#define H(x, y, z) ((x) ^ (y) ^ (z)) ++#define I(x, y, z) ((y) ^ ((x) | (~z))) ++ ++#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) ++#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ ++ ++#define ROUND1(a, b, c, d, x, s, ac) { \ ++ (a) += F((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) = ROTL32((a),(s)); \ ++ (a) += (b); \ ++} ++#define ROUND2(a, b, c, d, x, s, ac) { \ ++ (a) += G((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) = ROTL32((a),(s)); \ ++ (a) += (b); \ ++} ++#define ROUND3(a, b, c, d, x, s, ac) { \ ++ (a) += H((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) = ROTL32((a),(s)); \ ++ (a) += (b); \ ++} ++#define ROUND4(a, b, c, d, x, s, ac) { \ ++ (a) += I((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) = ROTL32((a),(s)); \ ++ (a) += (b); \ ++} ++static const UINT32 MD5_DefaultHashValue[4] = { ++ 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL ++}; ++#endif /* MD5_SUPPORT */ ++ ++ ++#ifdef MD5_SUPPORT ++/* ++======================================================================== ++Routine Description: ++ Initial Md5_CTX_STRUC ++ ++Arguments: ++ pMD5_CTX Pointer to Md5_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID MD5_Init ( ++ IN MD5_CTX_STRUC *pMD5_CTX) ++{ ++ NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, ++ sizeof(MD5_DefaultHashValue)); ++ NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ pMD5_CTX->BlockLen = 0; ++ pMD5_CTX->MessageLen = 0; ++} /* End of MD5_Init */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ MD5 computation for one block (512 bits) ++ ++Arguments: ++ pMD5_CTX Pointer to Md5_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ T[i] := floor(abs(sin(i + 1)) * (2 pow 32)), i is number of round ++======================================================================== ++*/ ++VOID MD5_Hash ( ++ IN MD5_CTX_STRUC *pMD5_CTX) ++{ ++ UINT32 X_i; ++ UINT32 X[16]; ++ UINT32 a,b,c,d; ++ ++ /* Prepare the message schedule, {X_i} */ ++ NdisMoveMemory(X, pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ for (X_i = 0; X_i < 16; X_i++) ++ X[X_i] = cpu2le32(X[X_i]); /* Endian Swap */ ++ /* End of for */ ++ ++ /* MD5 hash computation */ ++ /* Initialize the working variables */ ++ a = pMD5_CTX->HashValue[0]; ++ b = pMD5_CTX->HashValue[1]; ++ c = pMD5_CTX->HashValue[2]; ++ d = pMD5_CTX->HashValue[3]; ++ ++ /* ++ * Round 1 ++ * Let [abcd k s i] denote the operation ++ * a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND1(a, b, c, d, X[ 0], 7, 0xd76aa478); /* 1 */ ++ ROUND1(d, a, b, c, X[ 1], 12, 0xe8c7b756); /* 2 */ ++ ROUND1(c, d, a, b, X[ 2], 17, 0x242070db); /* 3 */ ++ ROUND1(b, c, d, a, X[ 3], 22, 0xc1bdceee); /* 4 */ ++ ROUND1(a, b, c, d, X[ 4], 7, 0xf57c0faf); /* 5 */ ++ ROUND1(d, a, b, c, X[ 5], 12, 0x4787c62a); /* 6 */ ++ ROUND1(c, d, a, b, X[ 6], 17, 0xa8304613); /* 7 */ ++ ROUND1(b, c, d, a, X[ 7], 22, 0xfd469501); /* 8 */ ++ ROUND1(a, b, c, d, X[ 8], 7, 0x698098d8); /* 9 */ ++ ROUND1(d, a, b, c, X[ 9], 12, 0x8b44f7af); /* 10 */ ++ ROUND1(c, d, a, b, X[10], 17, 0xffff5bb1); /* 11 */ ++ ROUND1(b, c, d, a, X[11], 22, 0x895cd7be); /* 12 */ ++ ROUND1(a, b, c, d, X[12], 7, 0x6b901122); /* 13 */ ++ ROUND1(d, a, b, c, X[13], 12, 0xfd987193); /* 14 */ ++ ROUND1(c, d, a, b, X[14], 17, 0xa679438e); /* 15 */ ++ ROUND1(b, c, d, a, X[15], 22, 0x49b40821); /* 16 */ ++ ++ /* ++ * Round 2 ++ * Let [abcd k s i] denote the operation ++ * a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND2(a, b, c, d, X[ 1], 5, 0xf61e2562); /* 17 */ ++ ROUND2(d, a, b, c, X[ 6], 9, 0xc040b340); /* 18 */ ++ ROUND2(c, d, a, b, X[11], 14, 0x265e5a51); /* 19 */ ++ ROUND2(b, c, d, a, X[ 0], 20, 0xe9b6c7aa); /* 20 */ ++ ROUND2(a, b, c, d, X[ 5], 5, 0xd62f105d); /* 21 */ ++ ROUND2(d, a, b, c, X[10], 9, 0x2441453); /* 22 */ ++ ROUND2(c, d, a, b, X[15], 14, 0xd8a1e681); /* 23 */ ++ ROUND2(b, c, d, a, X[ 4], 20, 0xe7d3fbc8); /* 24 */ ++ ROUND2(a, b, c, d, X[ 9], 5, 0x21e1cde6); /* 25 */ ++ ROUND2(d, a, b, c, X[14], 9, 0xc33707d6); /* 26 */ ++ ROUND2(c, d, a, b, X[ 3], 14, 0xf4d50d87); /* 27 */ ++ ROUND2(b, c, d, a, X[ 8], 20, 0x455a14ed); /* 28 */ ++ ROUND2(a, b, c, d, X[13], 5, 0xa9e3e905); /* 29 */ ++ ROUND2(d, a, b, c, X[ 2], 9, 0xfcefa3f8); /* 30 */ ++ ROUND2(c, d, a, b, X[ 7], 14, 0x676f02d9); /* 31 */ ++ ROUND2(b, c, d, a, X[12], 20, 0x8d2a4c8a); /* 32 */ ++ ++ /* ++ * Round 3 ++ * Let [abcd k s t] denote the operation ++ * a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND3(a, b, c, d, X[ 5], 4, 0xfffa3942); /* 33 */ ++ ROUND3(d, a, b, c, X[ 8], 11, 0x8771f681); /* 34 */ ++ ROUND3(c, d, a, b, X[11], 16, 0x6d9d6122); /* 35 */ ++ ROUND3(b, c, d, a, X[14], 23, 0xfde5380c); /* 36 */ ++ ROUND3(a, b, c, d, X[ 1], 4, 0xa4beea44); /* 37 */ ++ ROUND3(d, a, b, c, X[ 4], 11, 0x4bdecfa9); /* 38 */ ++ ROUND3(c, d, a, b, X[ 7], 16, 0xf6bb4b60); /* 39 */ ++ ROUND3(b, c, d, a, X[10], 23, 0xbebfbc70); /* 40 */ ++ ROUND3(a, b, c, d, X[13], 4, 0x289b7ec6); /* 41 */ ++ ROUND3(d, a, b, c, X[ 0], 11, 0xeaa127fa); /* 42 */ ++ ROUND3(c, d, a, b, X[ 3], 16, 0xd4ef3085); /* 43 */ ++ ROUND3(b, c, d, a, X[ 6], 23, 0x4881d05); /* 44 */ ++ ROUND3(a, b, c, d, X[ 9], 4, 0xd9d4d039); /* 45 */ ++ ROUND3(d, a, b, c, X[12], 11, 0xe6db99e5); /* 46 */ ++ ROUND3(c, d, a, b, X[15], 16, 0x1fa27cf8); /* 47 */ ++ ROUND3(b, c, d, a, X[ 2], 23, 0xc4ac5665); /* 48 */ ++ ++ /* ++ * Round 4 ++ * Let [abcd k s t] denote the operation ++ * a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND4(a, b, c, d, X[ 0], 6, 0xf4292244); /* 49 */ ++ ROUND4(d, a, b, c, X[ 7], 10, 0x432aff97); /* 50 */ ++ ROUND4(c, d, a, b, X[14], 15, 0xab9423a7); /* 51 */ ++ ROUND4(b, c, d, a, X[ 5], 21, 0xfc93a039); /* 52 */ ++ ROUND4(a, b, c, d, X[12], 6, 0x655b59c3); /* 53 */ ++ ROUND4(d, a, b, c, X[ 3], 10, 0x8f0ccc92); /* 54 */ ++ ROUND4(c, d, a, b, X[10], 15, 0xffeff47d); /* 55 */ ++ ROUND4(b, c, d, a, X[ 1], 21, 0x85845dd1); /* 56 */ ++ ROUND4(a, b, c, d, X[ 8], 6, 0x6fa87e4f); /* 57 */ ++ ROUND4(d, a, b, c, X[15], 10, 0xfe2ce6e0); /* 58 */ ++ ROUND4(c, d, a, b, X[ 6], 15, 0xa3014314); /* 59 */ ++ ROUND4(b, c, d, a, X[13], 21, 0x4e0811a1); /* 60 */ ++ ROUND4(a, b, c, d, X[ 4], 6, 0xf7537e82); /* 61 */ ++ ROUND4(d, a, b, c, X[11], 10, 0xbd3af235); /* 62 */ ++ ROUND4(c, d, a, b, X[ 2], 15, 0x2ad7d2bb); /* 63 */ ++ ROUND4(b, c, d, a, X[ 9], 21, 0xeb86d391); /* 64 */ ++ ++ /* Compute the i^th intermediate hash value H^(i) */ ++ pMD5_CTX->HashValue[0] += a; ++ pMD5_CTX->HashValue[1] += b; ++ pMD5_CTX->HashValue[2] += c; ++ pMD5_CTX->HashValue[3] += d; ++ ++ NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ pMD5_CTX->BlockLen = 0; ++} /* End of MD5_Hash */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ The message is appended to block. If block size > 64 bytes, the MD5_Hash ++will be called. ++ ++Arguments: ++ pMD5_CTX Pointer to MD5_CTX_STRUC ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID MD5_Append ( ++ IN MD5_CTX_STRUC *pMD5_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen) ++{ ++ UINT appendLen = 0; ++ UINT diffLen = 0; ++ ++ while (appendLen != MessageLen) { ++ diffLen = MessageLen - appendLen; ++ if ((pMD5_CTX->BlockLen + diffLen) < MD5_BLOCK_SIZE) { ++ NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, ++ Message + appendLen, diffLen); ++ pMD5_CTX->BlockLen += diffLen; ++ appendLen += diffLen; ++ } ++ else ++ { ++ NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, ++ Message + appendLen, MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); ++ appendLen += (MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); ++ pMD5_CTX->BlockLen = MD5_BLOCK_SIZE; ++ MD5_Hash(pMD5_CTX); ++ } /* End of if */ ++ } /* End of while */ ++ pMD5_CTX->MessageLen += MessageLen; ++} /* End of MD5_Append */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ 1. Append bit 1 to end of the message ++ 2. Append the length of message in rightmost 64 bits ++ 3. Transform the Hash Value to digest message ++ ++Arguments: ++ pMD5_CTX Pointer to MD5_CTX_STRUC ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID MD5_End ( ++ IN MD5_CTX_STRUC *pMD5_CTX, ++ OUT UINT8 DigestMessage[]) ++{ ++ UINT index; ++ UINT64 message_length_bits; ++ ++ /* append 1 bits to end of the message */ ++ NdisFillMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, 1, 0x80); ++ ++ /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ ++ if (pMD5_CTX->BlockLen > 55) ++ MD5_Hash(pMD5_CTX); ++ /* End of if */ ++ ++ /* Append the length of message in rightmost 64 bits */ ++ message_length_bits = pMD5_CTX->MessageLen*8; ++ message_length_bits = cpu2le64(message_length_bits); ++ NdisMoveMemory(&pMD5_CTX->Block[56], &message_length_bits, 8); ++ MD5_Hash(pMD5_CTX); ++ ++ /* Return message digest, transform the UINT32 hash value to bytes */ ++ for (index = 0; index < 4;index++) ++ pMD5_CTX->HashValue[index] = cpu2le32(pMD5_CTX->HashValue[index]); ++ /* End of for */ ++ NdisMoveMemory(DigestMessage, pMD5_CTX->HashValue, MD5_DIGEST_SIZE); ++} /* End of MD5_End */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ MD5 algorithm ++ ++Arguments: ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID RT_MD5 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]) ++{ ++ MD5_CTX_STRUC md5_ctx; ++ ++ NdisZeroMemory(&md5_ctx, sizeof(MD5_CTX_STRUC)); ++ MD5_Init(&md5_ctx); ++ MD5_Append(&md5_ctx, Message, MessageLen); ++ MD5_End(&md5_ctx, DigestMessage); ++} /* End of RT_MD5 */ ++ ++#endif /* MD5_SUPPORT */ ++ ++/* End of crypt_md5.c */ +diff --git a/drivers/staging/rt2860/common/crypt_sha2.c b/drivers/staging/rt2860/common/crypt_sha2.c +new file mode 100644 +index 0000000..cb3f7c2 +--- /dev/null ++++ b/drivers/staging/rt2860/common/crypt_sha2.c +@@ -0,0 +1,535 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ *************************************************************************/ ++ ++#include "../crypt_sha2.h" ++ ++/* Basic operations */ ++#define SHR(x,n) (x >> n) /* SHR(x)^n, right shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTR(x,n,w) ((x >> n) | (x << (w - n))) /* ROTR(x)^n, circular right shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) /* ROTL(x)^n, circular left shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTR32(x,n) ROTR(x,n,32) /* 32 bits word */ ++#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ ++ ++/* Basic functions */ ++#define Ch(x,y,z) ((x & y) ^ ((~x) & z)) ++#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) ++#define Parity(x,y,z) (x ^ y ^ z) ++ ++#ifdef SHA1_SUPPORT ++/* SHA1 constants */ ++#define SHA1_MASK 0x0000000f ++static const UINT32 SHA1_K[4] = { ++ 0x5a827999UL, 0x6ed9eba1UL, 0x8f1bbcdcUL, 0xca62c1d6UL ++}; ++static const UINT32 SHA1_DefaultHashValue[5] = { ++ 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL ++}; ++#endif /* SHA1_SUPPORT */ ++ ++ ++#ifdef SHA256_SUPPORT ++/* SHA256 functions */ ++#define Zsigma_256_0(x) (ROTR32(x,2) ^ ROTR32(x,13) ^ ROTR32(x,22)) ++#define Zsigma_256_1(x) (ROTR32(x,6) ^ ROTR32(x,11) ^ ROTR32(x,25)) ++#define Sigma_256_0(x) (ROTR32(x,7) ^ ROTR32(x,18) ^ SHR(x,3)) ++#define Sigma_256_1(x) (ROTR32(x,17) ^ ROTR32(x,19) ^ SHR(x,10)) ++/* SHA256 constants */ ++static const UINT32 SHA256_K[64] = { ++ 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, ++ 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, ++ 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, ++ 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, ++ 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, ++ 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, ++ 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, ++ 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, ++ 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, ++ 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, ++ 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, ++ 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, ++ 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, ++ 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, ++ 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, ++ 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL ++}; ++static const UINT32 SHA256_DefaultHashValue[8] = { ++ 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL, ++ 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL ++}; ++#endif /* SHA256_SUPPORT */ ++ ++ ++#ifdef SHA1_SUPPORT ++/* ++======================================================================== ++Routine Description: ++ Initial SHA1_CTX_STRUC ++ ++Arguments: ++ pSHA_CTX Pointer to SHA1_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID RT_SHA1_Init ( ++ IN SHA1_CTX_STRUC *pSHA_CTX) ++{ ++ NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, ++ sizeof(SHA1_DefaultHashValue)); ++ NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ pSHA_CTX->MessageLen = 0; ++ pSHA_CTX->BlockLen = 0; ++} /* End of RT_SHA1_Init */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ SHA1 computation for one block (512 bits) ++ ++Arguments: ++ pSHA_CTX Pointer to SHA1_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA1_Hash ( ++ IN SHA1_CTX_STRUC *pSHA_CTX) ++{ ++ UINT32 W_i,t,s; ++ UINT32 W[16]; ++ UINT32 a,b,c,d,e,T,f_t = 0; ++ ++ /* Prepare the message schedule, {W_i}, 0 < t < 15 */ ++ NdisMoveMemory(W, pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ for (W_i = 0; W_i < 16; W_i++) ++ W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ ++ /* End of for */ ++ ++ /* SHA256 hash computation */ ++ /* Initialize the working variables */ ++ a = pSHA_CTX->HashValue[0]; ++ b = pSHA_CTX->HashValue[1]; ++ c = pSHA_CTX->HashValue[2]; ++ d = pSHA_CTX->HashValue[3]; ++ e = pSHA_CTX->HashValue[4]; ++ ++ /* 80 rounds */ ++ for (t = 0;t < 80;t++) { ++ s = t & SHA1_MASK; ++ if (t > 15) { /* Prepare the message schedule, {W_i}, 16 < t < 79 */ ++ W[s] = (W[(s+13) & SHA1_MASK]) ^ (W[(s+8) & SHA1_MASK]) ^ (W[(s+2) & SHA1_MASK]) ^ W[s]; ++ W[s] = ROTL32(W[s],1); ++ } /* End of if */ ++ switch (t / 20) { ++ case 0: ++ f_t = Ch(b,c,d); ++ break; ++ case 1: ++ f_t = Parity(b,c,d); ++ break; ++ case 2: ++ f_t = Maj(b,c,d); ++ break; ++ case 3: ++ f_t = Parity(b,c,d); ++ break; ++ } /* End of switch */ ++ T = ROTL32(a,5) + f_t + e + SHA1_K[t / 20] + W[s]; ++ e = d; ++ d = c; ++ c = ROTL32(b,30); ++ b = a; ++ a = T; ++ } /* End of for */ ++ ++ /* Compute the i^th intermediate hash value H^(i) */ ++ pSHA_CTX->HashValue[0] += a; ++ pSHA_CTX->HashValue[1] += b; ++ pSHA_CTX->HashValue[2] += c; ++ pSHA_CTX->HashValue[3] += d; ++ pSHA_CTX->HashValue[4] += e; ++ ++ NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ pSHA_CTX->BlockLen = 0; ++} /* End of SHA1_Hash */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ The message is appended to block. If block size > 64 bytes, the SHA1_Hash ++will be called. ++ ++Arguments: ++ pSHA_CTX Pointer to SHA1_CTX_STRUC ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA1_Append ( ++ IN SHA1_CTX_STRUC *pSHA_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen) ++{ ++ UINT appendLen = 0; ++ UINT diffLen = 0; ++ ++ while (appendLen != MessageLen) { ++ diffLen = MessageLen - appendLen; ++ if ((pSHA_CTX->BlockLen + diffLen) < SHA1_BLOCK_SIZE) { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, diffLen); ++ pSHA_CTX->BlockLen += diffLen; ++ appendLen += diffLen; ++ } ++ else ++ { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ appendLen += (SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ pSHA_CTX->BlockLen = SHA1_BLOCK_SIZE; ++ SHA1_Hash(pSHA_CTX); ++ } /* End of if */ ++ } /* End of while */ ++ pSHA_CTX->MessageLen += MessageLen; ++} /* End of SHA1_Append */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ 1. Append bit 1 to end of the message ++ 2. Append the length of message in rightmost 64 bits ++ 3. Transform the Hash Value to digest message ++ ++Arguments: ++ pSHA_CTX Pointer to SHA1_CTX_STRUC ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA1_End ( ++ IN SHA1_CTX_STRUC *pSHA_CTX, ++ OUT UINT8 DigestMessage[]) ++{ ++ UINT index; ++ UINT64 message_length_bits; ++ ++ /* Append bit 1 to end of the message */ ++ NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); ++ ++ /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ ++ if (pSHA_CTX->BlockLen > 55) ++ SHA1_Hash(pSHA_CTX); ++ /* End of if */ ++ ++ /* Append the length of message in rightmost 64 bits */ ++ message_length_bits = pSHA_CTX->MessageLen*8; ++ message_length_bits = cpu2be64(message_length_bits); ++ NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); ++ SHA1_Hash(pSHA_CTX); ++ ++ /* Return message digest, transform the UINT32 hash value to bytes */ ++ for (index = 0; index < 5;index++) ++ pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); ++ /* End of for */ ++ NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA1_DIGEST_SIZE); ++} /* End of SHA1_End */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ SHA1 algorithm ++ ++Arguments: ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID RT_SHA1 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]) ++{ ++ ++ SHA1_CTX_STRUC sha_ctx; ++ ++ NdisZeroMemory(&sha_ctx, sizeof(SHA1_CTX_STRUC)); ++ RT_SHA1_Init(&sha_ctx); ++ SHA1_Append(&sha_ctx, Message, MessageLen); ++ SHA1_End(&sha_ctx, DigestMessage); ++} /* End of RT_SHA1 */ ++#endif /* SHA1_SUPPORT */ ++ ++ ++#ifdef SHA256_SUPPORT ++/* ++======================================================================== ++Routine Description: ++ Initial SHA256_CTX_STRUC ++ ++Arguments: ++ pSHA_CTX Pointer to SHA256_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA256_Init ( ++ IN SHA256_CTX_STRUC *pSHA_CTX) ++{ ++ NdisMoveMemory(pSHA_CTX->HashValue, SHA256_DefaultHashValue, ++ sizeof(SHA256_DefaultHashValue)); ++ NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); ++ pSHA_CTX->MessageLen = 0; ++ pSHA_CTX->BlockLen = 0; ++} /* End of SHA256_Init */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ SHA256 computation for one block (512 bits) ++ ++Arguments: ++ pSHA_CTX Pointer to SHA256_CTX_STRUC ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA256_Hash ( ++ IN SHA256_CTX_STRUC *pSHA_CTX) ++{ ++ UINT32 W_i,t; ++ UINT32 W[64]; ++ UINT32 a,b,c,d,e,f,g,h,T1,T2; ++ ++ /* Prepare the message schedule, {W_i}, 0 < t < 15 */ ++ NdisMoveMemory(W, pSHA_CTX->Block, SHA256_BLOCK_SIZE); ++ for (W_i = 0; W_i < 16; W_i++) ++ W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ ++ /* End of for */ ++ ++ /* SHA256 hash computation */ ++ /* Initialize the working variables */ ++ a = pSHA_CTX->HashValue[0]; ++ b = pSHA_CTX->HashValue[1]; ++ c = pSHA_CTX->HashValue[2]; ++ d = pSHA_CTX->HashValue[3]; ++ e = pSHA_CTX->HashValue[4]; ++ f = pSHA_CTX->HashValue[5]; ++ g = pSHA_CTX->HashValue[6]; ++ h = pSHA_CTX->HashValue[7]; ++ ++ /* 64 rounds */ ++ for (t = 0;t < 64;t++) { ++ if (t > 15) /* Prepare the message schedule, {W_i}, 16 < t < 63 */ ++ W[t] = Sigma_256_1(W[t-2]) + W[t-7] + Sigma_256_0(W[t-15]) + W[t-16]; ++ /* End of if */ ++ T1 = h + Zsigma_256_1(e) + Ch(e,f,g) + SHA256_K[t] + W[t]; ++ T2 = Zsigma_256_0(a) + Maj(a,b,c); ++ h = g; ++ g = f; ++ f = e; ++ e = d + T1; ++ d = c; ++ c = b; ++ b = a; ++ a = T1 + T2; ++ } /* End of for */ ++ ++ /* Compute the i^th intermediate hash value H^(i) */ ++ pSHA_CTX->HashValue[0] += a; ++ pSHA_CTX->HashValue[1] += b; ++ pSHA_CTX->HashValue[2] += c; ++ pSHA_CTX->HashValue[3] += d; ++ pSHA_CTX->HashValue[4] += e; ++ pSHA_CTX->HashValue[5] += f; ++ pSHA_CTX->HashValue[6] += g; ++ pSHA_CTX->HashValue[7] += h; ++ ++ NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); ++ pSHA_CTX->BlockLen = 0; ++} /* End of SHA256_Hash */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ The message is appended to block. If block size > 64 bytes, the SHA256_Hash ++will be called. ++ ++Arguments: ++ pSHA_CTX Pointer to SHA256_CTX_STRUC ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ None ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA256_Append ( ++ IN SHA256_CTX_STRUC *pSHA_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen) ++{ ++ UINT appendLen = 0; ++ UINT diffLen = 0; ++ ++ while (appendLen != MessageLen) { ++ diffLen = MessageLen - appendLen; ++ if ((pSHA_CTX->BlockLen + diffLen) < SHA256_BLOCK_SIZE) { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, diffLen); ++ pSHA_CTX->BlockLen += diffLen; ++ appendLen += diffLen; ++ } ++ else ++ { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ appendLen += (SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ pSHA_CTX->BlockLen = SHA256_BLOCK_SIZE; ++ SHA256_Hash(pSHA_CTX); ++ } /* End of if */ ++ } /* End of while */ ++ pSHA_CTX->MessageLen += MessageLen; ++} /* End of SHA256_Append */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ 1. Append bit 1 to end of the message ++ 2. Append the length of message in rightmost 64 bits ++ 3. Transform the Hash Value to digest message ++ ++Arguments: ++ pSHA_CTX Pointer to SHA256_CTX_STRUC ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID SHA256_End ( ++ IN SHA256_CTX_STRUC *pSHA_CTX, ++ OUT UINT8 DigestMessage[]) ++{ ++ UINT index; ++ UINT64 message_length_bits; ++ ++ /* Append bit 1 to end of the message */ ++ NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); ++ ++ /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ ++ if (pSHA_CTX->BlockLen > 55) ++ SHA256_Hash(pSHA_CTX); ++ /* End of if */ ++ ++ /* Append the length of message in rightmost 64 bits */ ++ message_length_bits = pSHA_CTX->MessageLen*8; ++ message_length_bits = cpu2be64(message_length_bits); ++ NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); ++ SHA256_Hash(pSHA_CTX); ++ ++ /* Return message digest, transform the UINT32 hash value to bytes */ ++ for (index = 0; index < 8;index++) ++ pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); ++ /* End of for */ ++ NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA256_DIGEST_SIZE); ++} /* End of SHA256_End */ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ SHA256 algorithm ++ ++Arguments: ++ message Message context ++ messageLen The length of message in bytes ++ ++Return Value: ++ digestMessage Digest message ++ ++Note: ++ None ++======================================================================== ++*/ ++VOID RT_SHA256 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]) ++{ ++ SHA256_CTX_STRUC sha_ctx; ++ ++ NdisZeroMemory(&sha_ctx, sizeof(SHA256_CTX_STRUC)); ++ SHA256_Init(&sha_ctx); ++ SHA256_Append(&sha_ctx, Message, MessageLen); ++ SHA256_End(&sha_ctx, DigestMessage); ++} /* End of RT_SHA256 */ ++#endif /* SHA256_SUPPORT */ ++ ++/* End of crypt_sha2.c */ +diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c +index 23330f2..7b3890f 100644 +--- a/drivers/staging/rt2860/common/dfs.c ++++ b/drivers/staging/rt2860/common/dfs.c +@@ -33,7 +33,6 @@ + Revision History: + Who When What + -------- ---------- ---------------------------------------------- +- Fonchi 03-12-2007 created + */ + + #include "../rt_config.h" +@@ -46,10 +45,15 @@ typedef struct _RADAR_DURATION_TABLE + } RADAR_DURATION_TABLE, *PRADAR_DURATION_TABLE; + + +-static UCHAR RdIdleTimeTable[MAX_RD_REGION][4] = ++ ++UCHAR RdIdleTimeTable[MAX_RD_REGION][4] = + { + {9, 250, 250, 250}, // CE ++#ifdef DFS_FCC_BW40_FIX ++ {1, 250, 250, 250}, // FCC ++#else + {4, 250, 250, 250}, // FCC ++#endif + {4, 250, 250, 250}, // JAP + {15, 250, 250, 250}, // JAP_W53 + {4, 250, 250, 250} // JAP_W56 +@@ -80,11 +84,32 @@ VOID BbpRadarDetectionStart( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 124, 0x28); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 125, 0xff); + ++#ifdef MERGE_ARCH_TEAM ++ if ((pAd->CommonCfg.RadarDetect.RDDurRegion == JAP) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56)) ++ { ++ pAd->CommonCfg.RadarDetect.RDDurRegion = JAP; ++ pAd->CommonCfg.RadarDetect.RDDurRegion = JapRadarType(pAd); ++ if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56) ++ { ++ pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; ++ } ++ else if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) ++ { ++ pAd->CommonCfg.RadarDetect.DfsSessionTime = 15; ++ } ++ } ++#endif // MERGE_ARCH_TEAM // ++ + RadarPeriod = ((UINT)RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + (UINT)pAd->CommonCfg.RadarDetect.DfsSessionTime) < 250 ? + (RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + pAd->CommonCfg.RadarDetect.DfsSessionTime) : 250; + ++#ifdef MERGE_ARCH_TEAM ++ ++ ++#else // Original RT28xx source code. + RTMP_IO_WRITE8(pAd, 0x7020, 0x1d); + RTMP_IO_WRITE8(pAd, 0x7021, 0x40); ++#endif // MERGE_ARCH_TEAM // + + RadarDetectionStart(pAd, 0, RadarPeriod); + return; +@@ -143,6 +168,17 @@ VOID RadarDetectionStart( + CtsProtect = 0x03; + break; + ++ case JAP: ++ { ++ UCHAR RDDurRegion; ++ RDDurRegion = JapRadarType(pAd); ++ if (RDDurRegion == JAP_W56) ++ CtsProtect = 0x03; ++ else ++ CtsProtect = 0x02; ++ break; ++ } ++ + case CE: + case JAP_W53: + default: +@@ -210,7 +246,6 @@ BOOLEAN RadarChannelCheck( + IN PRTMP_ADAPTER pAd, + IN UCHAR Ch) + { +-#if 1 + INT i; + BOOLEAN result = FALSE; + +@@ -224,23 +259,6 @@ BOOLEAN RadarChannelCheck( + } + + return result; +-#else +- INT i; +- UCHAR Channel[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +- +- for (i=0; i<15; i++) +- { +- if (Ch == Channel[i]) +- { +- break; +- } +- } +- +- if (i != 15) +- return TRUE; +- else +- return FALSE; +-#endif + } + + ULONG JapRadarType( +@@ -399,11 +417,11 @@ VOID RadarDetectPeriodic( + */ + INT Set_ChMovingTime_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UINT8 Value; + +- Value = simple_strtol(arg, 0, 10); ++ Value = (UINT8) simple_strtol(arg, 0, 10); + + pAd->CommonCfg.RadarDetect.ChMovingTime = Value; + +@@ -415,11 +433,11 @@ INT Set_ChMovingTime_Proc( + + INT Set_LongPulseRadarTh_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UINT8 Value; + +- Value = simple_strtol(arg, 0, 10) > 10 ? 10 : simple_strtol(arg, 0, 10); ++ Value = (UINT8) simple_strtol(arg, 0, 10) > 10 ? 10 : simple_strtol(arg, 0, 10); + + pAd->CommonCfg.RadarDetect.LongPulseRadarTh = Value; + +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +new file mode 100644 +index 0000000..f522244 +--- /dev/null ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -0,0 +1,1525 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ ee_efuse.c ++ ++ Abstract: ++ Miniport generic portion header file ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++ ++#include "../rt_config.h" ++ ++ ++ ++#define EFUSE_USAGE_MAP_START 0x2d0 ++#define EFUSE_USAGE_MAP_END 0x2fc ++#define EFUSE_USAGE_MAP_SIZE 45 ++ ++ ++ ++#define EFUSE_EEPROM_DEFULT_FILE "RT30xxEEPROM.bin" ++#define MAX_EEPROM_BIN_FILE_SIZE 1024 ++ ++ ++ ++#define EFUSE_TAG 0x2fe ++ ++typedef union _EFUSE_CTRL_STRUC { ++ struct { ++ UINT32 EFSROM_AOUT:6; ++ UINT32 EFSROM_MODE:2; ++ UINT32 EFSROM_LDO_OFF_TIME:6; ++ UINT32 EFSROM_LDO_ON_TIME:2; ++ UINT32 EFSROM_AIN:10; ++ UINT32 RESERVED:4; ++ UINT32 EFSROM_KICK:1; ++ UINT32 SEL_EFUSE:1; ++ } field; ++ UINT32 word; ++} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; ++ ++static UCHAR eFuseReadRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ OUT USHORT* pData); ++ ++static VOID eFuseReadPhysical( ++ IN PRTMP_ADAPTER pAd, ++ IN PUSHORT lpInBuffer, ++ IN ULONG nInBufferSize, ++ OUT PUSHORT lpOutBuffer, ++ IN ULONG nOutBufferSize); ++ ++static VOID eFusePhysicalWriteRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ OUT USHORT* pData); ++ ++static NTSTATUS eFuseWriteRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ IN USHORT* pData); ++ ++static VOID eFuseWritePhysical( ++ IN PRTMP_ADAPTER pAd, ++ PUSHORT lpInBuffer, ++ ULONG nInBufferSize, ++ PUCHAR lpOutBuffer, ++ ULONG nOutBufferSize); ++ ++ ++static NTSTATUS eFuseWriteRegistersFromBin( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ IN USHORT* pData); ++ ++ ++/* ++======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ ++ Return Value: ++ ++ Note: ++ ++======================================================================== ++*/ ++UCHAR eFuseReadRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ OUT USHORT* pData) ++{ ++ EFUSE_CTRL_STRUC eFuseCtrlStruc; ++ int i; ++ USHORT efuseDataOffset; ++ UINT32 data; ++ ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ ++ //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ //Use the eeprom logical address and covert to address to block number ++ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; ++ ++ //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0. ++ eFuseCtrlStruc.field.EFSROM_MODE = 0; ++ ++ //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. ++ eFuseCtrlStruc.field.EFSROM_KICK = 1; ++ ++ NdisMoveMemory(&data, &eFuseCtrlStruc, 4); ++ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); ++ ++ //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. ++ i = 0; ++ while(i < 500) ++ { ++ //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ { ++ break; ++ } ++ RTMPusecDelay(2); ++ i++; ++ } ++ ++ //if EFSROM_AOUT is not found in physical address, write 0xffff ++ if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f) ++ { ++ for(i=0; i> (8*(Offset & 0x3)); ++ ++ NdisMoveMemory(pData, &data, Length); ++ } ++ ++ return (UCHAR) eFuseCtrlStruc.field.EFSROM_AOUT; ++ ++} ++ ++/* ++======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ ++ Return Value: ++ ++ Note: ++ ++======================================================================== ++*/ ++VOID eFusePhysicalReadRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ OUT USHORT* pData) ++{ ++ EFUSE_CTRL_STRUC eFuseCtrlStruc; ++ int i; ++ USHORT efuseDataOffset; ++ UINT32 data; ++ ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ ++ //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; ++ ++ //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. ++ //Read in physical view ++ eFuseCtrlStruc.field.EFSROM_MODE = 1; ++ ++ //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. ++ eFuseCtrlStruc.field.EFSROM_KICK = 1; ++ ++ NdisMoveMemory(&data, &eFuseCtrlStruc, 4); ++ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); ++ ++ //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. ++ i = 0; ++ while(i < 500) ++ { ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ break; ++ RTMPusecDelay(2); ++ i++; ++ } ++ ++ //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) ++ //Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits. ++ //The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes ++ //Decide which EFUSE_DATA to read ++ //590:F E D C ++ //594:B A 9 8 ++ //598:7 6 5 4 ++ //59C:3 2 1 0 ++ efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ; ++ ++ RTMP_IO_READ32(pAd, efuseDataOffset, &data); ++ ++ data = data >> (8*(Offset & 0x3)); ++ ++ NdisMoveMemory(pData, &data, Length); ++ ++} ++ ++/* ++======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ ++ Return Value: ++ ++ Note: ++ ++======================================================================== ++*/ ++static VOID eFuseReadPhysical( ++ IN PRTMP_ADAPTER pAd, ++ IN PUSHORT lpInBuffer, ++ IN ULONG nInBufferSize, ++ OUT PUSHORT lpOutBuffer, ++ IN ULONG nOutBufferSize ++) ++{ ++ USHORT* pInBuf = (USHORT*)lpInBuffer; ++ USHORT* pOutBuf = (USHORT*)lpOutBuffer; ++ ++ USHORT Offset = pInBuf[0]; //addr ++ USHORT Length = pInBuf[1]; //length ++ int i; ++ ++ for(i=0; i> 2; ++ data = pData[0] & 0xffff; ++ //The offset should be 0x***10 or 0x***00 ++ if((Offset % 4) != 0) ++ { ++ eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff) | (data << 16); ++ } ++ else ++ { ++ eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff0000) | data; ++ } ++ ++ efuseDataOffset = EFUSE_DATA3; ++ for(i=0; i< 4; i++) ++ { ++ RTMP_IO_WRITE32(pAd, efuseDataOffset, eFuseDataBuffer[i]); ++ efuseDataOffset -= 4; ++ } ++ ///////////////////////////////////////////////////////////////// ++ ++ //Step1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ ++ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; ++ ++ //Step2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. ++ eFuseCtrlStruc.field.EFSROM_MODE = 3; ++ ++ //Step3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. ++ eFuseCtrlStruc.field.EFSROM_KICK = 1; ++ ++ NdisMoveMemory(&data, &eFuseCtrlStruc, 4); ++ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); ++ ++ //Step4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It¡¦s done. ++ i = 0; ++ ++ while(i < 500) ++ { ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ ++ if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ break; ++ ++ RTMPusecDelay(2); ++ i++; ++ } ++} ++ ++/* ++======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ ++ Return Value: ++ ++ Note: ++ ++======================================================================== ++*/ ++static NTSTATUS eFuseWriteRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ IN USHORT* pData) ++{ ++ USHORT i,Loop=0; ++ USHORT eFuseData; ++ USHORT LogicalAddress, BlkNum = 0xffff; ++ UCHAR EFSROM_AOUT; ++ ++ USHORT addr,tmpaddr, InBuf[3], tmpOffset; ++ USHORT buffer[8]; ++ BOOLEAN bWriteSuccess = TRUE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters Offset=%x, pData=%x\n", Offset, *pData)); ++ ++ //Step 0. find the entry in the mapping table ++ //The address of EEPROM is 2-bytes alignment. ++ //The last bit is used for alignment, so it must be 0. ++ tmpOffset = Offset & 0xfffe; ++ EFSROM_AOUT = eFuseReadRegisters(pAd, tmpOffset, 2, &eFuseData); ++ ++ if( EFSROM_AOUT == 0x3f) ++ { //find available logical address pointer ++ //the logical address does not exist, find an empty one ++ //from the first address of block 45=16*45=0x2d0 to the last address of block 47 ++ //==>48*16-3(reserved)=2FC ++ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) ++ { ++ //Retrive the logical block nubmer form each logical address pointer ++ //It will access two logical address pointer each time. ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ {//Not used logical address pointer ++ BlkNum = i-EFUSE_USAGE_MAP_START; ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ {//Not used logical address pointer ++ if (i != EFUSE_USAGE_MAP_END) ++ { ++ BlkNum = i-EFUSE_USAGE_MAP_START+1; ++ } ++ break; ++ } ++ } ++ } ++ else ++ { ++ BlkNum = EFSROM_AOUT; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); ++ ++ if(BlkNum == 0xffff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); ++ return FALSE; ++ } ++ ++ //Step 1. Save data of this block which is pointed by the avaible logical address pointer ++ // read and save the original block data ++ for(i =0; i<8; i++) ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+2*i; ++ InBuf[1] = 2; ++ InBuf[2] = 0x0; ++ ++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); ++ ++ buffer[i] = InBuf[2]; ++ } ++ ++ //Step 2. Update the data in buffer, and write the data to Efuse ++ buffer[ (Offset >> 1) % 8] = pData[0]; ++ ++ do ++ { Loop++; ++ //Step 3. Write the data to Efuse ++ if(!bWriteSuccess) ++ { ++ for(i =0; i<8; i++) ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+2*i; ++ InBuf[1] = 2; ++ InBuf[2] = buffer[i]; ++ ++ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); ++ } ++ } ++ else ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+(Offset % 16); ++ InBuf[1] = 2; ++ InBuf[2] = pData[0]; ++ ++ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); ++ } ++ ++ //Step 4. Write mapping table ++ addr = EFUSE_USAGE_MAP_START+BlkNum; ++ ++ tmpaddr = addr; ++ ++ if(addr % 2 != 0) ++ addr = addr -1; ++ InBuf[0] = addr; ++ InBuf[1] = 2; ++ ++ //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry ++ tmpOffset = Offset; ++ tmpOffset >>= 4; ++ tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; ++ tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; ++ ++ // write the logical address ++ if(tmpaddr%2 != 0) ++ InBuf[2] = tmpOffset<<8; ++ else ++ InBuf[2] = tmpOffset; ++ ++ eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); ++ ++ //Step 5. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted ++ bWriteSuccess = TRUE; ++ for(i =0; i<8; i++) ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+2*i; ++ InBuf[1] = 2; ++ InBuf[2] = 0x0; ++ ++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); ++ ++ if(buffer[i] != InBuf[2]) ++ { ++ bWriteSuccess = FALSE; ++ break; ++ } ++ } ++ ++ //Step 6. invlidate mapping entry and find a free mapping entry if not succeed ++ if (!bWriteSuccess) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess BlkNum = %d\n", BlkNum)); ++ ++ // the offset of current mapping entry ++ addr = EFUSE_USAGE_MAP_START+BlkNum; ++ ++ //find a new mapping entry ++ BlkNum = 0xffff; ++ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) ++ { ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ { ++ BlkNum = i-EFUSE_USAGE_MAP_START; ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ { ++ if (i != EFUSE_USAGE_MAP_END) ++ { ++ BlkNum = i+1-EFUSE_USAGE_MAP_START; ++ } ++ break; ++ } ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess new BlkNum = %d\n", BlkNum)); ++ if(BlkNum == 0xffff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); ++ return FALSE; ++ } ++ ++ //invalidate the original mapping entry if new entry is not found ++ tmpaddr = addr; ++ ++ if(addr % 2 != 0) ++ addr = addr -1; ++ InBuf[0] = addr; ++ InBuf[1] = 2; ++ ++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); ++ ++ // write the logical address ++ if(tmpaddr%2 != 0) ++ { ++ // Invalidate the high byte ++ for (i=8; i<15; i++) ++ { ++ if( ( (InBuf[2] >> i) & 0x01) == 0) ++ { ++ InBuf[2] |= (0x1 <> i) & 0x01) == 0) ++ { ++ InBuf[2] |= (0x1 <bUseEfuse) ++ return FALSE; ++ for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) ++ { ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ { ++ efusefreenum= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ { ++ efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END-i); ++ break; ++ } ++ ++ if(i == EFUSE_USAGE_MAP_END) ++ efusefreenum = 0; ++ } ++ printk("efuseFreeNumber is %d\n",efusefreenum); ++ return TRUE; ++} ++ ++ ++INT set_eFusedump_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++USHORT InBuf[3]; ++ INT i=0; ++ if(!pAd->bUseEfuse) ++ return FALSE; ++ for(i =0; i0) ++ NdisMoveMemory(src, arg, strlen(arg)); ++ else ++ NdisMoveMemory(src, EFUSE_EEPROM_DEFULT_FILE, strlen(EFUSE_EEPROM_DEFULT_FILE)); ++ DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); ++ ++ RtmpOSFSInfoChange(&osfsInfo, TRUE); ++ ++ srcf = RtmpOSFileOpen(src, O_RDONLY, 0); ++ if (IS_FILE_OPEN_ERR(srcf)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error opening file %s\n", src)); ++ retval = FALSE; ++ goto recoverFS; ++ } ++ else ++ { ++ // The object must have a read method ++ while(RtmpOSFileRead(srcf, &buffer[i], 1)==1) ++ { ++ i++; ++ if(i>MAX_EEPROM_BIN_FILE_SIZE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error reading file %s, file size too large[>%d]\n", src, MAX_EEPROM_BIN_FILE_SIZE)); ++ retval = FALSE; ++ goto closeFile; ++ } ++ } ++ ++ retval = RtmpOSFileClose(srcf); ++ if (retval) ++ DBGPRINT(RT_DEBUG_TRACE, ("--> Error closing file %s\n", src)); ++ } ++ ++ ++ RtmpOSFSInfoChange(&osfsInfo, FALSE); ++ ++ for(j=0;j48*16-3(reserved)=2FC ++ bAllocateNewBlk=TRUE; ++ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) ++ { ++ //Retrive the logical block nubmer form each logical address pointer ++ //It will access two logical address pointer each time. ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ {//Not used logical address pointer ++ BlkNum = i-EFUSE_USAGE_MAP_START; ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ {//Not used logical address pointer ++ if (i != EFUSE_USAGE_MAP_END) ++ { ++ BlkNum = i-EFUSE_USAGE_MAP_START+1; ++ } ++ break; ++ } ++ } ++ } ++ else ++ { ++ bAllocateNewBlk=FALSE; ++ BlkNum = EFSROM_AOUT; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); ++ ++ if(BlkNum == 0xffff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); ++ return FALSE; ++ } ++ //Step 1.1.0 ++ //If the block is not existing in mapping table, create one ++ //and write down the 16-bytes data to the new block ++ if(bAllocateNewBlk) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk\n")); ++ efuseDataOffset = EFUSE_DATA3; ++ for(i=0; i< 4; i++) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk, Data%d=%04x%04x\n",3-i,pData[2*i+1],pData[2*i])); ++ tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; ++ ++ ++ RTMP_IO_WRITE32(pAd, efuseDataOffset,tempbuffer); ++ efuseDataOffset -= 4; ++ ++ } ++ ///////////////////////////////////////////////////////////////// ++ ++ //Step1.1.1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ eFuseCtrlStruc.field.EFSROM_AIN = BlkNum* 0x10 ; ++ ++ //Step1.1.2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. ++ eFuseCtrlStruc.field.EFSROM_MODE = 3; ++ ++ //Step1.1.3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. ++ eFuseCtrlStruc.field.EFSROM_KICK = 1; ++ ++ NdisMoveMemory(&data, &eFuseCtrlStruc, 4); ++ ++ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); ++ ++ //Step1.1.4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It¡¦s done. ++ i = 0; ++ while(i < 100) ++ { ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); ++ ++ if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ break; ++ ++ RTMPusecDelay(2); ++ i++; ++ } ++ ++ } ++ else ++ { //Step1.2. ++ //If the same logical number is existing, check if the writting data and the data ++ //saving in this block are the same. ++ ///////////////////////////////////////////////////////////////// ++ //read current values of 16-byte block ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); ++ ++ //Step1.2.0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; ++ ++ //Step1.2.1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. ++ eFuseCtrlStruc.field.EFSROM_MODE = 0; ++ ++ //Step1.2.2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. ++ eFuseCtrlStruc.field.EFSROM_KICK = 1; ++ ++ NdisMoveMemory(&data, &eFuseCtrlStruc, 4); ++ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); ++ ++ //Step1.2.3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. ++ i = 0; ++ while(i < 500) ++ { ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); ++ ++ if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ break; ++ RTMPusecDelay(2); ++ i++; ++ } ++ ++ //Step1.2.4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) ++ efuseDataOffset = EFUSE_DATA3; ++ for(i=0; i< 4; i++) ++ { ++ RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &buffer[i]); ++ efuseDataOffset -= 4; ++ } ++ //Step1.2.5. Check if the data of efuse and the writing data are the same. ++ for(i =0; i<4; i++) ++ { ++ tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; ++ DBGPRINT(RT_DEBUG_TRACE, ("buffer[%d]=%x,pData[%d]=%x,pData[%d]=%x,tempbuffer=%x\n",i,buffer[i],2*i,pData[2*i],2*i+1,pData[2*i+1],tempbuffer)); ++ ++ if(((buffer[i]&0xffff0000)==(pData[2*i+1]<<16))&&((buffer[i]&0xffff)==pData[2*i])) ++ bNotWrite&=TRUE; ++ else ++ { ++ bNotWrite&=FALSE; ++ break; ++ } ++ } ++ if(!bNotWrite) ++ { ++ printk("The data is not the same\n"); ++ ++ for(i =0; i<8; i++) ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+2*i; ++ InBuf[1] = 2; ++ InBuf[2] = pData[i]; ++ ++ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); ++ } ++ ++ } ++ else ++ return TRUE; ++ } ++ ++ ++ ++ //Step 2. Write mapping table ++ addr = EFUSE_USAGE_MAP_START+BlkNum; ++ ++ tmpaddr = addr; ++ ++ if(addr % 2 != 0) ++ addr = addr -1; ++ InBuf[0] = addr; ++ InBuf[1] = 2; ++ ++ //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry ++ tmpOffset = Offset; ++ tmpOffset >>= 4; ++ tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; ++ tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; ++ ++ // write the logical address ++ if(tmpaddr%2 != 0) ++ InBuf[2] = tmpOffset<<8; ++ else ++ InBuf[2] = tmpOffset; ++ ++ eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); ++ ++ //Step 3. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted ++ bWriteSuccess = TRUE; ++ for(i =0; i<8; i++) ++ { ++ addr = BlkNum * 0x10 ; ++ ++ InBuf[0] = addr+2*i; ++ InBuf[1] = 2; ++ InBuf[2] = 0x0; ++ ++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); ++ DBGPRINT(RT_DEBUG_TRACE, ("addr=%x, buffer[i]=%x,InBuf[2]=%x\n",InBuf[0],pData[i],InBuf[2])); ++ if(pData[i] != InBuf[2]) ++ { ++ bWriteSuccess = FALSE; ++ break; ++ } ++ } ++ ++ //Step 4. invlidate mapping entry and find a free mapping entry if not succeed ++ ++ if (!bWriteSuccess&&Loop<2) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess BlkNum = %d\n", BlkNum)); ++ ++ // the offset of current mapping entry ++ addr = EFUSE_USAGE_MAP_START+BlkNum; ++ ++ //find a new mapping entry ++ BlkNum = 0xffff; ++ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) ++ { ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ { ++ BlkNum = i-EFUSE_USAGE_MAP_START; ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ { ++ if (i != EFUSE_USAGE_MAP_END) ++ { ++ BlkNum = i+1-EFUSE_USAGE_MAP_START; ++ } ++ break; ++ } ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess new BlkNum = %d\n", BlkNum)); ++ if(BlkNum == 0xffff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin: out of free E-fuse space!!!\n")); ++ return FALSE; ++ } ++ ++ //invalidate the original mapping entry if new entry is not found ++ tmpaddr = addr; ++ ++ if(addr % 2 != 0) ++ addr = addr -1; ++ InBuf[0] = addr; ++ InBuf[1] = 2; ++ ++ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); ++ ++ // write the logical address ++ if(tmpaddr%2 != 0) ++ { ++ // Invalidate the high byte ++ for (i=8; i<15; i++) ++ { ++ if( ( (InBuf[2] >> i) & 0x01) == 0) ++ { ++ InBuf[2] |= (0x1 <> i) & 0x01) == 0) ++ { ++ InBuf[2] |= (0x1 <bFroceEEPROMBuffer || pAd->bEEPROMFile) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Read from EEPROM Buffer\n")); ++ NdisMoveMemory(pValue, &(pAd->EEPROMImage[Offset]), 2); ++ } ++ else ++ eFuseReadRegisters(pAd, Offset, 2, pValue); ++ return (*pValue); ++} ++ ++ ++int rtmp_ee_efuse_write16( ++ IN RTMP_ADAPTER *pAd, ++ IN USHORT Offset, ++ IN USHORT data) ++{ ++ if(pAd->bFroceEEPROMBuffer||pAd->bEEPROMFile) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Write to EEPROM Buffer\n")); ++ NdisMoveMemory(&(pAd->EEPROMImage[Offset]), &data, 2); ++ } ++ else ++ eFuseWriteRegisters(pAd, Offset, 2, &data); ++ return 0; ++} ++ ++ ++int RtmpEfuseSupportCheck( ++ IN RTMP_ADAPTER *pAd) ++{ ++ USHORT value; ++ ++ if (IS_RT30xx(pAd)) ++ { ++ eFusePhysicalReadRegisters(pAd, EFUSE_TAG, 2, &value); ++ pAd->EFuseTag = (value & 0xff); ++ } ++ return 0; ++} ++ ++INT set_eFuseBufferModeWriteBack_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ UINT Enable; ++ ++ ++ if(strlen(arg)>0) ++ { ++ Enable= simple_strtol(arg, 0, 16); ++ } ++ else ++ return FALSE; ++ if(Enable==1) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("set_eFuseBufferMode_Proc:: Call WRITEEEPROMBUF")); ++ eFuseWriteEeeppromBuf(pAd); ++ } ++ else ++ return FALSE; ++ return TRUE; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Load EEPROM from bin file for eFuse mode ++ ++ Arguments: ++ Adapter Pointer to our adapter ++ ++ Return Value: ++ NDIS_STATUS_SUCCESS firmware image load ok ++ NDIS_STATUS_FAILURE image not found ++ ++ IRQL = PASSIVE_LEVEL ++ ++ ======================================================================== ++*/ ++INT eFuseLoadEEPROM( ++ IN PRTMP_ADAPTER pAd) ++{ ++ PSTRING src = NULL; ++ INT retval; ++ RTMP_OS_FD srcf; ++ RTMP_OS_FS_INFO osFSInfo; ++ ++ ++ src=EFUSE_BUFFER_PATH; ++ DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); ++ ++ ++ RtmpOSFSInfoChange(&osFSInfo, TRUE); ++ ++ if (src && *src) ++ { ++ srcf = RtmpOSFileOpen(src, O_RDONLY, 0); ++ if (IS_FILE_OPEN_ERR(srcf)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); ++ return FALSE; ++ } ++ else ++ { ++ ++ memset(pAd->EEPROMImage, 0x00, MAX_EEPROM_BIN_FILE_SIZE); ++ ++ ++ retval =RtmpOSFileRead(srcf, (PSTRING)pAd->EEPROMImage, MAX_EEPROM_BIN_FILE_SIZE); ++ if (retval > 0) ++ { ++ RTMPSetProfileParameters(pAd, (PSTRING)pAd->EEPROMImage); ++ retval = NDIS_STATUS_SUCCESS; ++ } ++ else ++ DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); ++ ++ } ++ ++ ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); ++ return FALSE; ++ ++ } ++ ++ retval=RtmpOSFileClose(srcf); ++ ++ if (retval) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); ++ } ++ ++ ++ RtmpOSFSInfoChange(&osFSInfo, FALSE); ++ ++ return TRUE; ++} ++ ++INT eFuseWriteEeeppromBuf( ++ IN PRTMP_ADAPTER pAd) ++{ ++ ++ PSTRING src = NULL; ++ INT retval; ++ RTMP_OS_FD srcf; ++ RTMP_OS_FS_INFO osFSInfo; ++ ++ ++ src=EFUSE_BUFFER_PATH; ++ DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); ++ ++ RtmpOSFSInfoChange(&osFSInfo, TRUE); ++ ++ ++ ++ if (src && *src) ++ { ++ srcf = RtmpOSFileOpen(src, O_WRONLY|O_CREAT, 0); ++ ++ if (IS_FILE_OPEN_ERR(srcf)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); ++ return FALSE; ++ } ++ else ++ { ++/* ++ // The object must have a read method ++ if (srcf->f_op && srcf->f_op->write) ++ { ++ // The object must have a read method ++ srcf->f_op->write(srcf, pAd->EEPROMImage, 1024, &srcf->f_pos); ++ ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error!! System doest not support read function\n")); ++ return FALSE; ++ } ++*/ ++ ++ RtmpOSFileWrite(srcf, (PSTRING)pAd->EEPROMImage,MAX_EEPROM_BIN_FILE_SIZE); ++ ++ } ++ ++ ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); ++ return FALSE; ++ ++ } ++ ++ retval=RtmpOSFileClose(srcf); ++ ++ if (retval) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); ++ } ++ ++ RtmpOSFSInfoChange(&osFSInfo, FALSE); ++ return TRUE; ++} ++ ++ ++VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, ++ PUINT EfuseFreeBlock) ++{ ++ USHORT i; ++ USHORT LogicalAddress; ++ if(!pAd->bUseEfuse) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount Only supports efuse Mode\n")); ++ return ; ++ } ++ for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) ++ { ++ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); ++ if( (LogicalAddress & 0xff) == 0) ++ { ++ *EfuseFreeBlock= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); ++ break; ++ } ++ else if(( (LogicalAddress >> 8) & 0xff) == 0) ++ { ++ *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END-i); ++ break; ++ } ++ ++ if(i == EFUSE_USAGE_MAP_END) ++ *EfuseFreeBlock = 0; ++ } ++ DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount is 0x%x\n",*EfuseFreeBlock)); ++} ++ ++INT eFuse_init( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT EfuseFreeBlock=0; ++ DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and its size =%x[%x-%x] \n",EFUSE_USAGE_MAP_SIZE,EFUSE_USAGE_MAP_START,EFUSE_USAGE_MAP_END)); ++ eFuseGetFreeBlockCount(pAd, &EfuseFreeBlock); ++ //If the used block of efuse is less than 5. We assume the default value ++ // of this efuse is empty and change to the buffer mode in odrder to ++ //bring up interfaces successfully. ++ if(EfuseFreeBlock > (EFUSE_USAGE_MAP_END-5)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and the information is too less to bring up interface. Force to use EEPROM Buffer Mode\n")); ++ pAd->bFroceEEPROMBuffer = TRUE; ++ eFuseLoadEEPROM(pAd); ++ } ++ else ++ pAd->bFroceEEPROMBuffer = FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("NVM is Efuse and force to use EEPROM Buffer Mode=%x\n",pAd->bFroceEEPROMBuffer)); ++ ++ return 0; ++} +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +new file mode 100644 +index 0000000..9ebff8b +--- /dev/null ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -0,0 +1,270 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ ee_prom.c ++ ++ Abstract: ++ Miniport generic portion header file ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++ ++#include "../rt_config.h" ++ ++ ++ ++// IRQL = PASSIVE_LEVEL ++static inline VOID RaiseClock( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT32 *x) ++{ ++ *x = *x | EESK; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); ++ RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition ++} ++ ++// IRQL = PASSIVE_LEVEL ++static inline VOID LowerClock( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT32 *x) ++{ ++ *x = *x & ~EESK; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); ++ RTMPusecDelay(1); ++} ++ ++// IRQL = PASSIVE_LEVEL ++static inline USHORT ShiftInBits( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT32 x,i; ++ USHORT data=0; ++ ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ ++ x &= ~( EEDO | EEDI); ++ ++ for(i=0; i<16; i++) ++ { ++ data = data << 1; ++ RaiseClock(pAd, &x); ++ ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ LowerClock(pAd, &x); //prevent read failed ++ ++ x &= ~(EEDI); ++ if(x & EEDO) ++ data |= 1; ++ } ++ ++ return data; ++} ++ ++ ++// IRQL = PASSIVE_LEVEL ++static inline VOID ShiftOutBits( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT data, ++ IN USHORT count) ++{ ++ UINT32 x,mask; ++ ++ mask = 0x01 << (count - 1); ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ ++ x &= ~(EEDO | EEDI); ++ ++ do ++ { ++ x &= ~EEDI; ++ if(data & mask) x |= EEDI; ++ ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++ ++ mask = mask >> 1; ++ } while(mask); ++ ++ x &= ~EEDI; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++} ++ ++ ++// IRQL = PASSIVE_LEVEL ++static inline VOID EEpromCleanup( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT32 x; ++ ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ ++ x &= ~(EECS | EEDI); ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++} ++ ++ ++static inline VOID EWEN( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT32 x; ++ ++ // reset bits and set EECS ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x &= ~(EEDI | EEDO | EESK); ++ x |= EECS; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ // kick a pulse ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++ ++ // output the read_opcode and six pulse in that order ++ ShiftOutBits(pAd, EEPROM_EWEN_OPCODE, 5); ++ ShiftOutBits(pAd, 0, 6); ++ ++ EEpromCleanup(pAd); ++} ++ ++ ++static inline VOID EWDS( ++ IN PRTMP_ADAPTER pAd) ++{ ++ UINT32 x; ++ ++ // reset bits and set EECS ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x &= ~(EEDI | EEDO | EESK); ++ x |= EECS; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ // kick a pulse ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++ ++ // output the read_opcode and six pulse in that order ++ ShiftOutBits(pAd, EEPROM_EWDS_OPCODE, 5); ++ ShiftOutBits(pAd, 0, 6); ++ ++ EEpromCleanup(pAd); ++} ++ ++ ++// IRQL = PASSIVE_LEVEL ++int rtmp_ee_prom_read16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ OUT USHORT *pValue) ++{ ++ UINT32 x; ++ USHORT data; ++ ++ ++ Offset /= 2; ++ // reset bits and set EECS ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x &= ~(EEDI | EEDO | EESK); ++ x |= EECS; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ // patch can not access e-Fuse issue ++ if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) ++ { ++ // kick a pulse ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++ } ++ ++ // output the read_opcode and register number in that order ++ ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3); ++ ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); ++ ++ // Now read the data (16 bits) in from the selected EEPROM word ++ data = ShiftInBits(pAd); ++ ++ EEpromCleanup(pAd); ++ ++ ++ *pValue = data; ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++int rtmp_ee_prom_write16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Data) ++{ ++ UINT32 x; ++ ++ ++ Offset /= 2; ++ ++ EWEN(pAd); ++ ++ // reset bits and set EECS ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x &= ~(EEDI | EEDO | EESK); ++ x |= EECS; ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ ++ // patch can not access e-Fuse issue ++ if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) ++ { ++ // kick a pulse ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); ++ } ++ ++ // output the read_opcode ,register number and data in that order ++ ShiftOutBits(pAd, EEPROM_WRITE_OPCODE, 3); ++ ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); ++ ShiftOutBits(pAd, Data, 16); // 16-bit access ++ ++ // read DO status ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ ++ EEpromCleanup(pAd); ++ ++ RTMPusecDelay(10000); //delay for twp(MAX)=10ms ++ ++ EWDS(pAd); ++ ++ EEpromCleanup(pAd); ++ ++ ++ return NDIS_STATUS_SUCCESS; ++ ++} +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index ffcb4ce..03b8454 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -36,1444 +36,68 @@ + */ + #include "../rt_config.h" + +-// IRQL = PASSIVE_LEVEL +-VOID RaiseClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) +-{ +- *x = *x | EESK; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition +-} +- +-// IRQL = PASSIVE_LEVEL +-VOID LowerClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) +-{ +- *x = *x & ~EESK; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); +-} +- +-// IRQL = PASSIVE_LEVEL +-USHORT ShiftInBits( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x,i; +- USHORT data=0; +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~( EEDO | EEDI); +- +- for(i=0; i<16; i++) +- { +- data = data << 1; +- RaiseClock(pAd, &x); +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- LowerClock(pAd, &x); /* prevent read failed */ +- +- x &= ~(EEDI); +- if(x & EEDO) +- data |= 1; +- } +- +- return data; +-} +- +-// IRQL = PASSIVE_LEVEL +-VOID ShiftOutBits( +- IN PRTMP_ADAPTER pAd, +- IN USHORT data, +- IN USHORT count) +-{ +- UINT32 x,mask; +- +- mask = 0x01 << (count - 1); +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~(EEDO | EEDI); +- +- do +- { +- x &= ~EEDI; +- if(data & mask) x |= EEDI; +- +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- mask = mask >> 1; +- } while(mask); +- +- x &= ~EEDI; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +-} +- +-// IRQL = PASSIVE_LEVEL +-VOID EEpromCleanup( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~(EECS | EEDI); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +-} +- +-VOID EWEN( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- // output the read_opcode and six pulse in that order +- ShiftOutBits(pAd, EEPROM_EWEN_OPCODE, 5); +- ShiftOutBits(pAd, 0, 6); +- +- EEpromCleanup(pAd); +-} +- +-VOID EWDS( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- // output the read_opcode and six pulse in that order +- ShiftOutBits(pAd, EEPROM_EWDS_OPCODE, 5); +- ShiftOutBits(pAd, 0, 6); +- +- EEpromCleanup(pAd); +-} +- +-// IRQL = PASSIVE_LEVEL +-USHORT RTMP_EEPROM_READ16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset) +-{ +- UINT32 x; +- USHORT data; +- +-#ifdef RT2870 +- if (pAd->NicConfig2.field.AntDiversity) +- { +- pAd->EepromAccess = TRUE; +- } +-#endif +- Offset /= 2; +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // patch can not access e-Fuse issue +- if (!IS_RT3090(pAd)) +- { +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- } +- +- // output the read_opcode and register number in that order +- ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3); +- ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +- +- // Now read the data (16 bits) in from the selected EEPROM word +- data = ShiftInBits(pAd); +- +- EEpromCleanup(pAd); +- +-#ifdef RT2870 +- // Antenna and EEPROM access are both using EESK pin, +- // Therefor we should avoid accessing EESK at the same time +- // Then restore antenna after EEPROM access +- if ((pAd->NicConfig2.field.AntDiversity) || (pAd->RfIcType == RFIC_3020)) +- { +- pAd->EepromAccess = FALSE; +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- } +-#endif +- return data; +-} //ReadEEprom +- +-VOID RTMP_EEPROM_WRITE16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Data) +-{ +- UINT32 x; +- +-#ifdef RT2870 +- if (pAd->NicConfig2.field.AntDiversity) +- { +- pAd->EepromAccess = TRUE; +- } +-#endif +- Offset /= 2; +- +- EWEN(pAd); +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // patch can not access e-Fuse issue +- if (!IS_RT3090(pAd)) +- { +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- } +- +- // output the read_opcode ,register number and data in that order +- ShiftOutBits(pAd, EEPROM_WRITE_OPCODE, 3); +- ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +- ShiftOutBits(pAd, Data, 16); // 16-bit access +- +- // read DO status +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- EEpromCleanup(pAd); +- +- RTMPusecDelay(10000); //delay for twp(MAX)=10ms +- +- EWDS(pAd); +- +- EEpromCleanup(pAd); +- +-#ifdef RT2870 +- // Antenna and EEPROM access are both using EESK pin, +- // Therefor we should avoid accessing EESK at the same time +- // Then restore antenna after EEPROM access +- if ((pAd->NicConfig2.field.AntDiversity) || (pAd->RfIcType == RFIC_3020)) +- { +- pAd->EepromAccess = FALSE; +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- } +-#endif +-} +- +-#ifdef RT2870 +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) +-{ +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- //Use the eeprom logical address and covert to address to block number +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0. +- eFuseCtrlStruc.field.EFSROM_MODE = 0; +- +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; + +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 100) +- { +- //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- { +- break; +- } +- RTMPusecDelay(2); +- i++; +- } +- +- //if EFSROM_AOUT is not found in physical address, write 0xffff +- if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f) +- { +- for(i=0; i> (8*(Offset & 0x3)); +- +- NdisMoveMemory(pData, &data, Length); +- } +- +- return (UCHAR) eFuseCtrlStruc.field.EFSROM_AOUT; +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-VOID eFusePhysicalReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) ++INT RtmpChipOpsEepromHook( ++ IN RTMP_ADAPTER *pAd, ++ IN INT infType) + { +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- //Read in physical view +- eFuseCtrlStruc.field.EFSROM_MODE = 1; +- +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- //Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits. +- //The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes +- //Decide which EFUSE_DATA to read +- //590:F E D C +- //594:B A 9 8 +- //598:7 6 5 4 +- //59C:3 2 1 0 +- efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ; +- +- RTMP_IO_READ32(pAd, efuseDataOffset, &data); +- +- data = data >> (8*(Offset & 0x3)); +- +- NdisMoveMemory(pData, &data, Length); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize +-) +-{ +- USHORT* pInBuf = (USHORT*)lpInBuffer; +- USHORT* pOutBuf = (USHORT*)lpOutBuffer; +- +- USHORT Offset = pInBuf[0]; //addr +- USHORT Length = pInBuf[1]; //length +- int i; +- +- for(i=0; i> 2; +- data = pData[0] & 0xffff; +- //The offset should be 0x***10 or 0x***00 +- if((Offset % 4) != 0) +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff) | (data << 16); +- } +- else +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff0000) | data; +- } +- +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_WRITE32(pAd, efuseDataOffset, eFuseDataBuffer[i]); +- efuseDataOffset -= 4; +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- +- RTMPusecDelay(2); +- i++; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NTSTATUS eFuseWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData) +-{ +- USHORT i; +- USHORT eFuseData; +- USHORT LogicalAddress, BlkNum = 0xffff; +- UCHAR EFSROM_AOUT; +- +- USHORT addr,tmpaddr, InBuf[3], tmpOffset; +- USHORT buffer[8]; +- BOOLEAN bWriteSuccess = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters Offset=%x, pData=%x\n", Offset, *pData)); +- +- //Step 0. find the entry in the mapping table +- //The address of EEPROM is 2-bytes alignment. +- //The last bit is used for alignment, so it must be 0. +- tmpOffset = Offset & 0xfffe; +- EFSROM_AOUT = eFuseReadRegisters(pAd, tmpOffset, 2, &eFuseData); +- +- if( EFSROM_AOUT == 0x3f) +- { //find available logical address pointer +- //the logical address does not exist, find an empty one +- //from the first address of block 45=16*45=0x2d0 to the last address of block 47 +- //==>48*16-3(reserved)=2FC +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //Step 1. Save data of this block which is pointed by the avaible logical address pointer +- // read and save the original block data +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- buffer[i] = InBuf[2]; +- } +- +- //Step 2. Update the data in buffer, and write the data to Efuse +- buffer[ (Offset >> 1) % 8] = pData[0]; ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT ++ UINT32 eFuseCtrl, MacCsr0; ++ int index; + ++ index = 0; + do + { +- //Step 3. Write the data to Efuse +- if(!bWriteSuccess) +- { +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = buffer[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- } +- else +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+(Offset % 16); +- InBuf[1] = 2; +- InBuf[2] = pData[0]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- //Step 4. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; ++ RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); ++ pAd->MACVersion = MacCsr0; + +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; +- else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 5. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- if(buffer[i] != InBuf[2]) +- { +- bWriteSuccess = FALSE; +- break; +- } +- } +- +- //Step 6. invlidate mapping entry and find a free mapping entry if not succeed +- if (!bWriteSuccess) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } +- break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <bUseEfuse) +- return FALSE; +- for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- efusefreenum= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END-i); +- break; +- } +- +- if(i == EFUSE_USAGE_MAP_END) +- efusefreenum = 0; +- } +- printk("efuseFreeNumber is %d\n",efusefreenum); +- return TRUE; +-} +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) +-{ +-USHORT InBuf[3]; +- INT i=0; +- if(!pAd->bUseEfuse) +- return FALSE; +- for(i =0; i0) +- { +- +- NdisMoveMemory(src, arg, strlen(arg)); +- } +- +- else +- { +- +- NdisMoveMemory(src, "RT30xxEEPROM.bin", BinFileSize); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- buffer = kmalloc(MAX_EEPROM_BIN_FILE_SIZE, MEM_ALLOC_FLAG); +- +- if(buffer == NULL) +- { +- kfree(src); +- return FALSE; +-} +- PDATA=kmalloc(sizeof(USHORT)*8,MEM_ALLOC_FLAG); +- +- if(PDATA==NULL) +- { +- kfree(src); +- +- kfree(buffer); +- return FALSE; +- } +- +- orgfs = get_fs(); +- set_fs(KERNEL_DS); +- +- if (src && *src) +- { +- srcf = filp_open(src, O_RDONLY, 0); +- if (IS_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- return FALSE; +- } +- else +- { +- // The object must have a read method +- if (srcf->f_op && srcf->f_op->read) +- { +- memset(buffer, 0x00, MAX_EEPROM_BIN_FILE_SIZE); +- while(srcf->f_op->read(srcf, &buffer[i], 1, &srcf->f_pos)==1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[i])); +- if((i+1)%8==0) +- DBGPRINT(RT_DEBUG_TRACE, ("\n")); +- i++; +- if(i>=MAX_EEPROM_BIN_FILE_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld reading %s, The file is too large[1024]\n", -PTR_ERR(srcf),src)); +- kfree(PDATA); +- kfree(buffer); +- kfree(src); +- return FALSE; +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error!! System doest not support read function\n")); +- kfree(PDATA); +- kfree(buffer); +- kfree(src); +- return FALSE; +- } +- } +- +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); +- kfree(PDATA); +- kfree(buffer); +- return FALSE; +- +- } +- +- +- retval=filp_close(srcf,NULL); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- set_fs(orgfs); +- +- for(j=0;j48*16-3(reserved)=2FC +- bAllocateNewBlk=TRUE; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- bAllocateNewBlk=FALSE; +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- //Step 1.1.0 +- //If the block is not existing in mapping table, create one +- //and write down the 16-bytes data to the new block +- if(bAllocateNewBlk) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk\n")); +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk, Data%d=%04x%04x\n",3-i,pData[2*i+1],pData[2*i])); +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- +- +- RTMP_IO_WRITE32(pAd, efuseDataOffset,tempbuffer); +- efuseDataOffset -= 4; +- +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1.1.1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = BlkNum* 0x10 ; +- +- //Step1.1.2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step1.1.3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.1.4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) + break; + +- RTMPusecDelay(2); +- i++; +- } ++ RTMPusecDelay(10); ++ } while (index++ < 100); + +- } +- else +- { //Step1.2. +- //If the same logical number is existing, check if the writting data and the data +- //saving in this block are the same. +- ///////////////////////////////////////////////////////////////// +- //read current values of 16-byte block +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- //Step1.2.0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1.2.1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- eFuseCtrlStruc.field.EFSROM_MODE = 0; +- +- //Step1.2.2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.2.3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step1.2.4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &buffer[i]); +- efuseDataOffset -= 4; +- } +- //Step1.2.5. Check if the data of efuse and the writing data are the same. +- for(i =0; i<4; i++) +- { +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- DBGPRINT(RT_DEBUG_TRACE, ("buffer[%d]=%x,pData[%d]=%x,pData[%d]=%x,tempbuffer=%x\n",i,buffer[i],2*i,pData[2*i],2*i+1,pData[2*i+1],tempbuffer)); +- +- if(((buffer[i]&0xffff0000)==(pData[2*i+1]<<16))&&((buffer[i]&0xffff)==pData[2*i])) +- bNotWrite&=TRUE; +- else ++ pAd->bUseEfuse=FALSE; ++ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrl); ++ pAd->bUseEfuse = ( (eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0; ++ if(pAd->bUseEfuse) + { +- bNotWrite&=FALSE; +- break; +- } +- } +- if(!bNotWrite) +- { +- printk("The data is not the same\n"); +- +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = pData[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- } +- else +- return TRUE; ++ pChipOps->eeinit = eFuse_init; ++ pChipOps->eeread = rtmp_ee_efuse_read16; ++ pChipOps->eewrite = rtmp_ee_efuse_write16; ++ return 0 ; + } +- +- +- +- //Step 2. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; + else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 3. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- DBGPRINT(RT_DEBUG_TRACE, ("addr=%x, buffer[i]=%x,InBuf[2]=%x\n",InBuf[0],pData[i],InBuf[2])); +- if(pData[i] != InBuf[2]) + { +- bWriteSuccess = FALSE; +- break; ++ pAd->bFroceEEPROMBuffer = FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); + } +- } +- +- //Step 4. invlidate mapping entry and find a free mapping entry if not succeed ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // + +- if (!bWriteSuccess&&Loop<2) ++ switch(infType) + { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; ++#ifdef RTMP_PCI_SUPPORT ++ case RTMP_DEV_INF_PCI: ++ pChipOps->eeinit = NULL; ++ pChipOps->eeread = rtmp_ee_prom_read16; ++ pChipOps->eewrite = rtmp_ee_prom_write16; + break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } ++#endif // RTMP_PCI_SUPPORT // ++#ifdef RTMP_USB_SUPPORT ++ case RTMP_DEV_INF_USB: ++ pChipOps->eeinit = NULL; ++ pChipOps->eeread = RTUSBReadEEPROM16; ++ pChipOps->eewrite = RTUSBWriteEEPROM16; + break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; ++#endif // RTMP_USB_SUPPORT // + +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 < 64) { +- MD5_CTX ttcontext; +- +- MD5Init(&ttcontext); +- MD5Update(&ttcontext, key, key_len); +- MD5Final(tk, &ttcontext); +- //key=(PUCHAR)ttcontext.buf; +- key = tk; +- key_len = 16; +- } +- +- /* the HMAC_MD5 transform looks like: +- * +- * MD5(K XOR opad, MD5(K XOR ipad, text)) +- * +- * where K is an n byte key +- * ipad is the byte 0x36 repeated 64 times +- * opad is the byte 0x5c repeated 64 times +- * and text is the data being protected */ +- +- /* start out by storing key in pads */ +- NdisZeroMemory(k_ipad, sizeof(k_ipad)); +- NdisZeroMemory(k_opad, sizeof(k_opad)); +- //assert(key_len < sizeof(k_ipad)); +- NdisMoveMemory(k_ipad, key, key_len); +- NdisMoveMemory(k_opad, key, key_len); +- +- /* XOR key with ipad and opad values */ +- for (i = 0; i < 64; i++) { +- k_ipad[i] ^= 0x36; +- k_opad[i] ^= 0x5c; +- } +- +- /* perform inner MD5 */ +- MD5Init(&context); /* init context for 1st pass */ +- MD5Update(&context, k_ipad, 64); /* start with inner pad */ +- MD5Update(&context, data, data_len); /* then text of datagram */ +- MD5Final(mac, &context); /* finish up 1st pass */ +- +- /* perform outer MD5 */ +- MD5Init(&context); /* init context for 2nd pass */ +- MD5Update(&context, k_opad, 64); /* start with outer pad */ +- MD5Update(&context, mac, 16); /* then results of 1st hash */ +- MD5Final(mac, &context); /* finish up 2nd pass */ +-} +- +-#define byteReverse(buf, len) /* Nothing */ +- +-/* ========================== MD5 implementation =========================== */ +-// four base functions for MD5 +-#define MD5_F1(x, y, z) (((x) & (y)) | ((~x) & (z))) +-#define MD5_F2(x, y, z) (((x) & (z)) | ((y) & (~z))) +-#define MD5_F3(x, y, z) ((x) ^ (y) ^ (z)) +-#define MD5_F4(x, y, z) ((y) ^ ((x) | (~z))) +-#define CYCLIC_LEFT_SHIFT(w, s) (((w) << (s)) | ((w) >> (32-(s)))) +- +-#define MD5Step(f, w, x, y, z, data, t, s) \ +- ( w += f(x, y, z) + data + t, w = (CYCLIC_LEFT_SHIFT(w, s)) & 0xffffffff, w += x ) +- +- +-/* +- * Function Description: +- * Initiate MD5 Context satisfied in RFC 1321 +- * +- * Arguments: +- * pCtx Pointer to MD5 context +- * +- * Return Value: +- * None +- */ +-VOID MD5Init(MD5_CTX *pCtx) +-{ +- pCtx->Buf[0]=0x67452301; +- pCtx->Buf[1]=0xefcdab89; +- pCtx->Buf[2]=0x98badcfe; +- pCtx->Buf[3]=0x10325476; +- +- pCtx->LenInBitCount[0]=0; +- pCtx->LenInBitCount[1]=0; +-} +- +- +-/* +- * Function Description: +- * Update MD5 Context, allow of an arrary of octets as the next portion +- * of the message +- * +- * Arguments: +- * pCtx Pointer to MD5 context +- * pData Pointer to input data +- * LenInBytes The length of input data (unit: byte) +- * +- * Return Value: +- * None +- * +- * Note: +- * Called after MD5Init or MD5Update(itself) +- */ +-VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes) +-{ +- +- UINT32 TfTimes; +- UINT32 temp; +- unsigned int i; +- +- temp = pCtx->LenInBitCount[0]; +- +- pCtx->LenInBitCount[0] = (UINT32) (pCtx->LenInBitCount[0] + (LenInBytes << 3)); +- +- if (pCtx->LenInBitCount[0] < temp) +- pCtx->LenInBitCount[1]++; //carry in +- +- pCtx->LenInBitCount[1] += LenInBytes >> 29; +- +- // mod 64 bytes +- temp = (temp >> 3) & 0x3f; +- +- // process lacks of 64-byte data +- if (temp) +- { +- UCHAR *pAds = (UCHAR *) pCtx->Input + temp; +- +- if ((temp+LenInBytes) < 64) +- { +- NdisMoveMemory(pAds, (UCHAR *)pData, LenInBytes); +- return; +- } +- +- NdisMoveMemory(pAds, (UCHAR *)pData, 64-temp); +- byteReverse(pCtx->Input, 16); +- MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input); +- +- pData += 64-temp; +- LenInBytes -= 64-temp; +- } // end of if (temp) +- +- +- TfTimes = (LenInBytes >> 6); +- +- for (i=TfTimes; i>0; i--) +- { +- NdisMoveMemory(pCtx->Input, (UCHAR *)pData, 64); +- byteReverse(pCtx->Input, 16); +- MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input); +- pData += 64; +- LenInBytes -= 64; +- } // end of for +- +- // buffering lacks of 64-byte data +- if(LenInBytes) +- NdisMoveMemory(pCtx->Input, (UCHAR *)pData, LenInBytes); +- +-} +- +- +-/* +- * Function Description: +- * Append padding bits and length of original message in the tail +- * The message digest has to be completed in the end +- * +- * Arguments: +- * Digest Output of Digest-Message for MD5 +- * pCtx Pointer to MD5 context +- * +- * Return Value: +- * None +- * +- * Note: +- * Called after MD5Update +- */ +-VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx) +-{ +- UCHAR Remainder; +- UCHAR PadLenInBytes; +- UCHAR *pAppend=0; +- unsigned int i; +- +- Remainder = (UCHAR)((pCtx->LenInBitCount[0] >> 3) & 0x3f); +- +- PadLenInBytes = (Remainder < 56) ? (56-Remainder) : (120-Remainder); +- +- pAppend = (UCHAR *)pCtx->Input + Remainder; +- +- // padding bits without crossing block(64-byte based) boundary +- if (Remainder < 56) +- { +- *pAppend = 0x80; +- PadLenInBytes --; +- +- NdisZeroMemory((UCHAR *)pCtx->Input + Remainder+1, PadLenInBytes); +- +- // add data-length field, from low to high +- for (i=0; i<4; i++) +- { +- pCtx->Input[56+i] = (UCHAR)((pCtx->LenInBitCount[0] >> (i << 3)) & 0xff); +- pCtx->Input[60+i] = (UCHAR)((pCtx->LenInBitCount[1] >> (i << 3)) & 0xff); +- } +- +- byteReverse(pCtx->Input, 16); +- MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input); +- } // end of if +- +- // padding bits with crossing block(64-byte based) boundary +- else +- { +- // the first block === +- *pAppend = 0x80; +- PadLenInBytes --; +- +- NdisZeroMemory((UCHAR *)pCtx->Input + Remainder+1, (64-Remainder-1)); +- PadLenInBytes -= (64 - Remainder - 1); +- +- byteReverse(pCtx->Input, 16); +- MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input); +- +- +- // the second block === +- NdisZeroMemory((UCHAR *)pCtx->Input, PadLenInBytes); +- +- // add data-length field +- for (i=0; i<4; i++) +- { +- pCtx->Input[56+i] = (UCHAR)((pCtx->LenInBitCount[0] >> (i << 3)) & 0xff); +- pCtx->Input[60+i] = (UCHAR)((pCtx->LenInBitCount[1] >> (i << 3)) & 0xff); +- } +- +- byteReverse(pCtx->Input, 16); +- MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input); +- } // end of else +- +- +- NdisMoveMemory((UCHAR *)Digest, (UINT32 *)pCtx->Buf, 16); // output +- byteReverse((UCHAR *)Digest, 4); +- NdisZeroMemory(pCtx, sizeof(pCtx)); // memory free +-} +- +- +-/* +- * Function Description: +- * The central algorithm of MD5, consists of four rounds and sixteen +- * steps per round +- * +- * Arguments: +- * Buf Buffers of four states (output: 16 bytes) +- * Mes Input data (input: 64 bytes) +- * +- * Return Value: +- * None +- * +- * Note: +- * Called by MD5Update or MD5Final +- */ +-VOID MD5Transform(UINT32 Buf[4], UINT32 Mes[16]) +-{ +- UINT32 Reg[4], Temp; +- unsigned int i; +- +- static UCHAR LShiftVal[16] = +- { +- 7, 12, 17, 22, +- 5, 9 , 14, 20, +- 4, 11, 16, 23, +- 6, 10, 15, 21, +- }; +- +- +- // [equal to 4294967296*abs(sin(index))] +- static UINT32 MD5Table[64] = +- { +- 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, +- 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, +- 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, +- 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, +- +- 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, +- 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, +- 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, +- 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, +- +- 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, +- 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, +- 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, +- 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, +- +- 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, +- 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, +- 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, +- 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 +- }; +- +- +- for (i=0; i<4; i++) +- Reg[i]=Buf[i]; +- +- +- // 64 steps in MD5 algorithm +- for (i=0; i<16; i++) +- { +- MD5Step(MD5_F1, Reg[0], Reg[1], Reg[2], Reg[3], Mes[i], +- MD5Table[i], LShiftVal[i & 0x3]); +- +- // one-word right shift +- Temp = Reg[3]; +- Reg[3] = Reg[2]; +- Reg[2] = Reg[1]; +- Reg[1] = Reg[0]; +- Reg[0] = Temp; +- } +- for (i=16; i<32; i++) +- { +- MD5Step(MD5_F2, Reg[0], Reg[1], Reg[2], Reg[3], Mes[(5*(i & 0xf)+1) & 0xf], +- MD5Table[i], LShiftVal[(0x1 << 2)+(i & 0x3)]); +- +- // one-word right shift +- Temp = Reg[3]; +- Reg[3] = Reg[2]; +- Reg[2] = Reg[1]; +- Reg[1] = Reg[0]; +- Reg[0] = Temp; +- } +- for (i=32; i<48; i++) +- { +- MD5Step(MD5_F3, Reg[0], Reg[1], Reg[2], Reg[3], Mes[(3*(i & 0xf)+5) & 0xf], +- MD5Table[i], LShiftVal[(0x1 << 3)+(i & 0x3)]); +- +- // one-word right shift +- Temp = Reg[3]; +- Reg[3] = Reg[2]; +- Reg[2] = Reg[1]; +- Reg[1] = Reg[0]; +- Reg[0] = Temp; +- } +- for (i=48; i<64; i++) +- { +- MD5Step(MD5_F4, Reg[0], Reg[1], Reg[2], Reg[3], Mes[(7*(i & 0xf)) & 0xf], +- MD5Table[i], LShiftVal[(0x3 << 2)+(i & 0x3)]); +- +- // one-word right shift +- Temp = Reg[3]; +- Reg[3] = Reg[2]; +- Reg[2] = Reg[1]; +- Reg[1] = Reg[0]; +- Reg[0] = Temp; +- } +- +- +- // (temporary)output +- for (i=0; i<4; i++) +- Buf[i] += Reg[i]; +- +-} +- +- +- +-/* ========================= SHA-1 implementation ========================== */ +-// four base functions for SHA-1 +-#define SHA1_F1(b, c, d) (((b) & (c)) | ((~b) & (d))) +-#define SHA1_F2(b, c, d) ((b) ^ (c) ^ (d)) +-#define SHA1_F3(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) +- +- +-#define SHA1Step(f, a, b, c, d, e, w, k) \ +- ( e += ( f(b, c, d) + w + k + CYCLIC_LEFT_SHIFT(a, 5)) & 0xffffffff, \ +- b = CYCLIC_LEFT_SHIFT(b, 30) ) +- +-//Initiate SHA-1 Context satisfied in RFC 3174 +-VOID SHAInit(SHA_CTX *pCtx) +-{ +- pCtx->Buf[0]=0x67452301; +- pCtx->Buf[1]=0xefcdab89; +- pCtx->Buf[2]=0x98badcfe; +- pCtx->Buf[3]=0x10325476; +- pCtx->Buf[4]=0xc3d2e1f0; +- +- pCtx->LenInBitCount[0]=0; +- pCtx->LenInBitCount[1]=0; +-} +- +-/* +- * Function Description: +- * Update SHA-1 Context, allow of an arrary of octets as the next +- * portion of the message +- * +- * Arguments: +- * pCtx Pointer to SHA-1 context +- * pData Pointer to input data +- * LenInBytes The length of input data (unit: byte) +- * +- * Return Value: +- * error indicate more than pow(2,64) bits of data +- * +- * Note: +- * Called after SHAInit or SHAUpdate(itself) +- */ +-UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes) +-{ +- UINT32 TfTimes; +- UINT32 temp1,temp2; +- unsigned int i; +- UCHAR err=1; +- +- temp1 = pCtx->LenInBitCount[0]; +- temp2 = pCtx->LenInBitCount[1]; +- +- pCtx->LenInBitCount[0] = (UINT32) (pCtx->LenInBitCount[0] + (LenInBytes << 3)); +- if (pCtx->LenInBitCount[0] < temp1) +- pCtx->LenInBitCount[1]++; //carry in +- +- +- pCtx->LenInBitCount[1] = (UINT32) (pCtx->LenInBitCount[1] +(LenInBytes >> 29)); +- if (pCtx->LenInBitCount[1] < temp2) +- return (err); //check total length of original data +- +- +- // mod 64 bytes +- temp1 = (temp1 >> 3) & 0x3f; +- +- // process lacks of 64-byte data +- if (temp1) +- { +- UCHAR *pAds = (UCHAR *) pCtx->Input + temp1; +- +- if ((temp1+LenInBytes) < 64) +- { +- NdisMoveMemory(pAds, (UCHAR *)pData, LenInBytes); +- return (0); +- } +- +- NdisMoveMemory(pAds, (UCHAR *)pData, 64-temp1); +- byteReverse((UCHAR *)pCtx->Input, 16); +- +- NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16); +- SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input); +- +- pData += 64-temp1; +- LenInBytes -= 64-temp1; +- } // end of if (temp1) +- +- +- TfTimes = (LenInBytes >> 6); +- +- for (i=TfTimes; i>0; i--) +- { +- NdisMoveMemory(pCtx->Input, (UCHAR *)pData, 64); +- byteReverse((UCHAR *)pCtx->Input, 16); +- +- NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16); +- SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input); +- pData += 64; +- LenInBytes -= 64; +- } // end of for +- +- // buffering lacks of 64-byte data +- if(LenInBytes) +- NdisMoveMemory(pCtx->Input, (UCHAR *)pData, LenInBytes); +- +- return (0); +- +-} +- +-// Append padding bits and length of original message in the tail +-// The message digest has to be completed in the end +-VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20]) +-{ +- UCHAR Remainder; +- UCHAR PadLenInBytes; +- UCHAR *pAppend=0; +- unsigned int i; +- +- Remainder = (UCHAR)((pCtx->LenInBitCount[0] >> 3) & 0x3f); +- +- pAppend = (UCHAR *)pCtx->Input + Remainder; +- +- PadLenInBytes = (Remainder < 56) ? (56-Remainder) : (120-Remainder); +- +- // padding bits without crossing block(64-byte based) boundary +- if (Remainder < 56) +- { +- *pAppend = 0x80; +- PadLenInBytes --; +- +- NdisZeroMemory((UCHAR *)pCtx->Input + Remainder+1, PadLenInBytes); +- +- // add data-length field, from high to low +- for (i=0; i<4; i++) +- { +- pCtx->Input[56+i] = (UCHAR)((pCtx->LenInBitCount[1] >> ((3-i) << 3)) & 0xff); +- pCtx->Input[60+i] = (UCHAR)((pCtx->LenInBitCount[0] >> ((3-i) << 3)) & 0xff); +- } +- +- byteReverse((UCHAR *)pCtx->Input, 16); +- NdisZeroMemory((UCHAR *)pCtx->Input + 64, 14); +- SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input); +- } // end of if +- +- // padding bits with crossing block(64-byte based) boundary +- else +- { +- // the first block === +- *pAppend = 0x80; +- PadLenInBytes --; +- +- NdisZeroMemory((UCHAR *)pCtx->Input + Remainder+1, (64-Remainder-1)); +- PadLenInBytes -= (64 - Remainder - 1); +- +- byteReverse((UCHAR *)pCtx->Input, 16); +- NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16); +- SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input); +- +- +- // the second block === +- NdisZeroMemory((UCHAR *)pCtx->Input, PadLenInBytes); +- +- // add data-length field +- for (i=0; i<4; i++) +- { +- pCtx->Input[56+i] = (UCHAR)((pCtx->LenInBitCount[1] >> ((3-i) << 3)) & 0xff); +- pCtx->Input[60+i] = (UCHAR)((pCtx->LenInBitCount[0] >> ((3-i) << 3)) & 0xff); +- } +- +- byteReverse((UCHAR *)pCtx->Input, 16); +- NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16); +- SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input); +- } // end of else +- +- +- //Output, bytereverse +- for (i=0; i<20; i++) +- { +- Digest [i] = (UCHAR)(pCtx->Buf[i>>2] >> 8*(3-(i & 0x3))); +- } +- +- NdisZeroMemory(pCtx, sizeof(pCtx)); // memory free +-} +- +- +-// The central algorithm of SHA-1, consists of four rounds and +-// twenty steps per round +-VOID SHATransform(UINT32 Buf[5], UINT32 Mes[20]) +-{ +- UINT32 Reg[5],Temp; +- unsigned int i; +- UINT32 W[80]; +- +- static UINT32 SHA1Table[4] = { 0x5a827999, 0x6ed9eba1, +- 0x8f1bbcdc, 0xca62c1d6 }; +- +- Reg[0]=Buf[0]; +- Reg[1]=Buf[1]; +- Reg[2]=Buf[2]; +- Reg[3]=Buf[3]; +- Reg[4]=Buf[4]; +- +- //the first octet of a word is stored in the 0th element, bytereverse +- for(i = 0; i < 16; i++) +- { +- W[i] = (Mes[i] >> 24) & 0xff; +- W[i] |= (Mes[i] >> 8 ) & 0xff00; +- W[i] |= (Mes[i] << 8 ) & 0xff0000; +- W[i] |= (Mes[i] << 24) & 0xff000000; +- } +- +- +- for (i = 0; i < 64; i++) +- W[16+i] = CYCLIC_LEFT_SHIFT(W[i] ^ W[2+i] ^ W[8+i] ^ W[13+i], 1); +- +- +- // 80 steps in SHA-1 algorithm +- for (i=0; i<80; i++) +- { +- if (i<20) +- SHA1Step(SHA1_F1, Reg[0], Reg[1], Reg[2], Reg[3], Reg[4], +- W[i], SHA1Table[0]); +- +- else if (i>=20 && i<40) +- SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3], Reg[4], +- W[i], SHA1Table[1]); +- +- else if (i>=40 && i<60) +- SHA1Step(SHA1_F3, Reg[0], Reg[1], Reg[2], Reg[3], Reg[4], +- W[i], SHA1Table[2]); +- +- else +- SHA1Step(SHA1_F2, Reg[0], Reg[1], Reg[2], Reg[3], Reg[4], +- W[i], SHA1Table[3]); +- +- +- // one-word right shift +- Temp = Reg[4]; +- Reg[4] = Reg[3]; +- Reg[3] = Reg[2]; +- Reg[2] = Reg[1]; +- Reg[1] = Reg[0]; +- Reg[0] = Temp; +- +- } // end of for-loop +- +- +- // (temporary)output +- for (i=0; i<5; i++) +- Buf[i] += Reg[i]; +- +-} +- +- +-/* ========================= AES En/Decryption ========================== */ +- +-/* forward S-box */ +-static uint32 FSb[256] = +-{ +- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, +- 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, +- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, +- 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, +- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, +- 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, +- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, +- 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, +- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, +- 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, +- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, +- 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, +- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, +- 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, +- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, +- 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, +- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, +- 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, +- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, +- 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, +- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, +- 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, +- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, +- 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, +- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, +- 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, +- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, +- 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, +- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, +- 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, +- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, +- 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 +-}; +- +-/* forward table */ +-#define FT \ +-\ +- V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \ +- V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \ +- V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \ +- V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \ +- V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \ +- V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \ +- V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \ +- V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \ +- V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \ +- V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \ +- V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \ +- V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \ +- V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \ +- V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \ +- V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \ +- V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \ +- V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \ +- V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \ +- V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \ +- V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \ +- V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \ +- V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \ +- V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \ +- V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \ +- V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \ +- V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \ +- V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \ +- V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \ +- V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \ +- V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \ +- V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \ +- V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \ +- V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \ +- V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \ +- V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \ +- V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \ +- V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \ +- V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \ +- V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \ +- V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \ +- V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \ +- V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \ +- V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \ +- V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \ +- V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \ +- V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \ +- V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \ +- V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \ +- V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \ +- V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \ +- V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \ +- V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \ +- V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \ +- V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \ +- V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \ +- V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \ +- V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \ +- V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \ +- V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \ +- V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \ +- V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \ +- V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \ +- V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \ +- V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A) +- +-#define V(a,b,c,d) 0x##a##b##c##d +-static uint32 FT0[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##d##a##b##c +-static uint32 FT1[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##c##d##a##b +-static uint32 FT2[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##b##c##d##a +-static uint32 FT3[256] = { FT }; +-#undef V +- +-#undef FT +- +-/* reverse S-box */ +- +-static uint32 RSb[256] = +-{ +- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, +- 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, +- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, +- 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, +- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, +- 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, +- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, +- 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, +- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, +- 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, +- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, +- 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, +- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, +- 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, +- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, +- 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, +- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, +- 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, +- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, +- 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, +- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, +- 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, +- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, +- 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, +- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, +- 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, +- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, +- 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, +- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, +- 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, +- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, +- 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D +-}; +- +-/* reverse table */ +- +-#define RT \ +-\ +- V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \ +- V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \ +- V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \ +- V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \ +- V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \ +- V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \ +- V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \ +- V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \ +- V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \ +- V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \ +- V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \ +- V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \ +- V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \ +- V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \ +- V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \ +- V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \ +- V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \ +- V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \ +- V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \ +- V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \ +- V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \ +- V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \ +- V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \ +- V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \ +- V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \ +- V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \ +- V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \ +- V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \ +- V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \ +- V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \ +- V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \ +- V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \ +- V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \ +- V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \ +- V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \ +- V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \ +- V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \ +- V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \ +- V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \ +- V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \ +- V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \ +- V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \ +- V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \ +- V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \ +- V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \ +- V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \ +- V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \ +- V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \ +- V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \ +- V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \ +- V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \ +- V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \ +- V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \ +- V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \ +- V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \ +- V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \ +- V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \ +- V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \ +- V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \ +- V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \ +- V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \ +- V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \ +- V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \ +- V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42) +- +-#define V(a,b,c,d) 0x##a##b##c##d +-static uint32 RT0[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##d##a##b##c +-static uint32 RT1[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##c##d##a##b +-static uint32 RT2[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##b##c##d##a +-static uint32 RT3[256] = { RT }; +-#undef V +- +-#undef RT +- +-/* round constants */ +- +-static uint32 RCON[10] = +-{ +- 0x01000000, 0x02000000, 0x04000000, 0x08000000, +- 0x10000000, 0x20000000, 0x40000000, 0x80000000, +- 0x1B000000, 0x36000000 +-}; +- +-/* key schedule tables */ +- +-static int KT_init = 1; +- +-static uint32 KT0[256]; +-static uint32 KT1[256]; +-static uint32 KT2[256]; +-static uint32 KT3[256]; +- +-/* platform-independant 32-bit integer manipulation macros */ +- +-#define GET_UINT32(n,b,i) \ +-{ \ +- (n) = ( (uint32) (b)[(i) ] << 24 ) \ +- | ( (uint32) (b)[(i) + 1] << 16 ) \ +- | ( (uint32) (b)[(i) + 2] << 8 ) \ +- | ( (uint32) (b)[(i) + 3] ); \ +-} +- +-#define PUT_UINT32(n,b,i) \ +-{ \ +- (b)[(i) ] = (uint8) ( (n) >> 24 ); \ +- (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \ +- (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \ +- (b)[(i) + 3] = (uint8) ( (n) ); \ +-} +- +-/* AES key scheduling routine */ +- +-int rtmp_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) +-{ +- int i; +- uint32 *RK, *SK; +- +- switch( nbits ) +- { +- case 128: ctx->nr = 10; break; +- case 192: ctx->nr = 12; break; +- case 256: ctx->nr = 14; break; +- default : return( 1 ); +- } +- +- RK = ctx->erk; +- +- for( i = 0; i < (nbits >> 5); i++ ) +- { +- GET_UINT32( RK[i], key, i * 4 ); +- } +- +- /* setup encryption round keys */ +- +- switch( nbits ) +- { +- case 128: +- +- for( i = 0; i < 10; i++, RK += 4 ) +- { +- RK[4] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 24 ) ] ); +- +- RK[5] = RK[1] ^ RK[4]; +- RK[6] = RK[2] ^ RK[5]; +- RK[7] = RK[3] ^ RK[6]; +- } +- break; +- +- case 192: +- +- for( i = 0; i < 8; i++, RK += 6 ) +- { +- RK[6] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 24 ) ] ); +- +- RK[7] = RK[1] ^ RK[6]; +- RK[8] = RK[2] ^ RK[7]; +- RK[9] = RK[3] ^ RK[8]; +- RK[10] = RK[4] ^ RK[9]; +- RK[11] = RK[5] ^ RK[10]; +- } +- break; +- +- case 256: +- +- for( i = 0; i < 7; i++, RK += 8 ) +- { +- RK[8] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 24 ) ] ); +- +- RK[9] = RK[1] ^ RK[8]; +- RK[10] = RK[2] ^ RK[9]; +- RK[11] = RK[3] ^ RK[10]; +- +- RK[12] = RK[4] ^ +- ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[11] ) ] ); +- +- RK[13] = RK[5] ^ RK[12]; +- RK[14] = RK[6] ^ RK[13]; +- RK[15] = RK[7] ^ RK[14]; +- } +- break; +- } +- +- /* setup decryption round keys */ +- +- if( KT_init ) +- { +- for( i = 0; i < 256; i++ ) +- { +- KT0[i] = RT0[ FSb[i] ]; +- KT1[i] = RT1[ FSb[i] ]; +- KT2[i] = RT2[ FSb[i] ]; +- KT3[i] = RT3[ FSb[i] ]; +- } +- +- KT_init = 0; +- } +- +- SK = ctx->drk; +- +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- +- for( i = 1; i < ctx->nr; i++ ) +- { +- RK -= 8; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- } +- +- RK -= 8; +- +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- +- return( 0 ); +-} +- +-/* AES 128-bit block encryption routine */ +- +-void rtmp_aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] ) +-{ +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; +- +- RK = ctx->erk; +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; +- +-#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ +-{ \ +- RK += 4; \ +- \ +- X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y1 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y2 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y3 ) ]; \ +- \ +- X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y2 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y3 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y0 ) ]; \ +- \ +- X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y3 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y0 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y1 ) ]; \ +- \ +- X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y0 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y1 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y2 ) ]; \ +-} +- +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ +- } +- +- if( ctx->nr > 12 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ +- } +- +- /* last round */ +- +- RK += 4; +- +- X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y3 ) ] ); +- +- X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y0 ) ] ); +- +- X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y1 ) ] ); +- +- X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y2 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); +-} +- +-/* AES 128-bit block decryption routine */ +- +-void rtmp_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) +-{ +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; +- +- RK = ctx->drk; +- +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; +- +-#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ +-{ \ +- RK += 4; \ +- \ +- X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y3 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y2 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y1 ) ]; \ +- \ +- X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y0 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y3 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y2 ) ]; \ +- \ +- X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y1 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y0 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y3 ) ]; \ +- \ +- X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y2 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y1 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y0 ) ]; \ +-} +- +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ +- } +- +- if( ctx->nr > 12 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ +- } +- +- /* last round */ +- +- RK += 4; +- +- X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y1 ) ] ); +- +- X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y2 ) ] ); +- +- X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y3 ) ] ); +- +- X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y0 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- SHA1 function +- +- Arguments: +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-VOID HMAC_SHA1( +- IN UCHAR *text, +- IN UINT text_len, +- IN UCHAR *key, +- IN UINT key_len, +- IN UCHAR *digest) +-{ +- SHA_CTX context; +- UCHAR k_ipad[65]; /* inner padding - key XORd with ipad */ +- UCHAR k_opad[65]; /* outer padding - key XORd with opad */ +- INT i; +- +- // if key is longer than 64 bytes reset it to key=SHA1(key) +- if (key_len > 64) +- { +- SHA_CTX tctx; +- SHAInit(&tctx); +- SHAUpdate(&tctx, key, key_len); +- SHAFinal(&tctx, key); +- key_len = 20; +- } +- NdisZeroMemory(k_ipad, sizeof(k_ipad)); +- NdisZeroMemory(k_opad, sizeof(k_opad)); +- NdisMoveMemory(k_ipad, key, key_len); +- NdisMoveMemory(k_opad, key, key_len); +- +- // XOR key with ipad and opad values +- for (i = 0; i < 64; i++) +- { +- k_ipad[i] ^= 0x36; +- k_opad[i] ^= 0x5c; +- } +- +- // perform inner SHA1 +- SHAInit(&context); /* init context for 1st pass */ +- SHAUpdate(&context, k_ipad, 64); /* start with inner pad */ +- SHAUpdate(&context, text, text_len); /* then text of datagram */ +- SHAFinal(&context, digest); /* finish up 1st pass */ +- +- //perform outer SHA1 +- SHAInit(&context); /* init context for 2nd pass */ +- SHAUpdate(&context, k_opad, 64); /* start with outer pad */ +- SHAUpdate(&context, digest, 20); /* then results of 1st hash */ +- SHAFinal(&context, digest); /* finish up 2nd pass */ +- +-} +- +-/* +-* F(P, S, c, i) = U1 xor U2 xor ... Uc +-* U1 = PRF(P, S || Int(i)) +-* U2 = PRF(P, U1) +-* Uc = PRF(P, Uc-1) +-*/ +- +-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output) +-{ +- unsigned char digest[36], digest1[SHA_DIGEST_LEN]; +- int i, j; +- +- /* U1 = PRF(P, S || int(i)) */ +- memcpy(digest, ssid, ssidlength); +- digest[ssidlength] = (unsigned char)((count>>24) & 0xff); +- digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff); +- digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff); +- digest[ssidlength+3] = (unsigned char)(count & 0xff); +- HMAC_SHA1(digest, ssidlength+4, (unsigned char*) password, (int) strlen(password), digest1); // for WPA update +- +- /* output = U1 */ +- memcpy(output, digest1, SHA_DIGEST_LEN); +- +- for (i = 1; i < iterations; i++) +- { +- /* Un = PRF(P, Un-1) */ +- HMAC_SHA1(digest1, SHA_DIGEST_LEN, (unsigned char*) password, (int) strlen(password), digest); // for WPA update +- memcpy(digest1, digest, SHA_DIGEST_LEN); +- +- /* output = output xor Un */ +- for (j = 0; j < SHA_DIGEST_LEN; j++) +- { +- output[j] ^= digest[j]; +- } +- } +-} +-/* +-* password - ascii string up to 63 characters in length +-* ssid - octet string up to 32 octets +-* ssidlength - length of ssid in octets +-* output must be 40 octets in length and outputs 256 bits of key +-*/ +-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output) +-{ +- if ((strlen(password) > 63) || (ssidlength > 32)) +- return 0; +- +- F(password, ssid, ssidlength, 4096, 1, output); +- F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]); +- return 1; +-} +- +- +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 61a2a4e..02627c7 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -127,46 +127,54 @@ UCHAR RateSwitchTable11G[] = { + + UCHAR RateSwitchTable11N1S[] = { + // Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x09, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 10, 25, +- 0x06, 0x21, 6, 8, 14, +- 0x07, 0x21, 7, 8, 14, +- 0x08, 0x23, 7, 8, 14, ++ 0x0c, 0x0a, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x21, 5, 10, 25, ++ 0x09, 0x21, 6, 8, 14, ++ 0x0a, 0x21, 7, 8, 14, ++ 0x0b, 0x23, 7, 8, 14, + }; + + UCHAR RateSwitchTable11N2S[] = { + // Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 12, 15, 30, +- 0x06, 0x20, 13, 8, 20, +- 0x07, 0x20, 14, 8, 20, +- 0x08, 0x20, 15, 8, 25, +- 0x09, 0x22, 15, 8, 25, ++ 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x20, 11, 15, 30, ++ 0x09, 0x20, 12, 15, 30, ++ 0x0a, 0x20, 13, 8, 20, ++ 0x0b, 0x20, 14, 8, 20, ++ 0x0c, 0x20, 15, 8, 25, ++ 0x0d, 0x22, 15, 8, 15, + }; + + UCHAR RateSwitchTable11N3S[] = { + // Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++ 0x0b, 0x00, 0, 0, 0, // 0x0a, 0x00, 0, 0, 0, // Initial used item after association + 0x00, 0x21, 0, 30, 101, + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, + 0x03, 0x21, 3, 15, 50, + 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 12, 15, 30, +- 0x06, 0x20, 13, 8, 20, +- 0x07, 0x20, 14, 8, 20, +- 0x08, 0x20, 15, 8, 25, +- 0x09, 0x22, 15, 8, 25, ++ 0x05, 0x20, 11, 15, 30, // Required by System-Alan @ 20080812 ++ 0x06, 0x20, 12, 15, 30, // 0x05, 0x20, 12, 15, 30, ++ 0x07, 0x20, 13, 8, 20, // 0x06, 0x20, 13, 8, 20, ++ 0x08, 0x20, 14, 8, 20, // 0x07, 0x20, 14, 8, 20, ++ 0x09, 0x20, 15, 8, 25, // 0x08, 0x20, 15, 8, 25, ++ 0x0a, 0x22, 15, 8, 25, // 0x09, 0x22, 15, 8, 25, + }; + + UCHAR RateSwitchTable11N2SForABand[] = { +@@ -203,35 +211,38 @@ UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 + + UCHAR RateSwitchTable11BGN1S[] = { + // Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0d, 0x00, 0, 0, 0, // Initial used item after association ++ 0x0c, 0x0a, 0, 0, 0, // Initial used item after association + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +- 0x04, 0x21, 0, 30,101, //50 +- 0x05, 0x21, 1, 20, 50, +- 0x06, 0x21, 2, 20, 50, +- 0x07, 0x21, 3, 15, 50, +- 0x08, 0x21, 4, 15, 30, +- 0x09, 0x21, 5, 10, 25, +- 0x0a, 0x21, 6, 8, 14, +- 0x0b, 0x21, 7, 8, 14, +- 0x0c, 0x23, 7, 8, 14, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x21, 5, 10, 25, ++ 0x09, 0x21, 6, 8, 14, ++ 0x0a, 0x21, 7, 8, 14, ++ 0x0b, 0x23, 7, 8, 14, + }; + + UCHAR RateSwitchTable11BGN2S[] = { + // Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 12, 15, 30, +- 0x06, 0x20, 13, 8, 20, +- 0x07, 0x20, 14, 8, 20, +- 0x08, 0x20, 15, 8, 25, +- 0x09, 0x22, 15, 8, 25, ++ 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x20, 11, 15, 30, ++ 0x09, 0x20, 12, 15, 30, ++ 0x0a, 0x20, 13, 8, 20, ++ 0x0b, 0x20, 14, 8, 20, ++ 0x0c, 0x20, 15, 8, 25, ++ 0x0d, 0x22, 15, 8, 15, + }; + + UCHAR RateSwitchTable11BGN3S[] = { // 3*3 +@@ -282,27 +293,6 @@ UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 + 0x0b, 0x22, 23, 8, 25, + }; + +-PUCHAR ReasonString[] = { +- /* 0 */ "Reserved", +- /* 1 */ "Unspecified Reason", +- /* 2 */ "Previous Auth no longer valid", +- /* 3 */ "STA is leaving / has left", +- /* 4 */ "DIS-ASSOC due to inactivity", +- /* 5 */ "AP unable to hanle all associations", +- /* 6 */ "class 2 error", +- /* 7 */ "class 3 error", +- /* 8 */ "STA is leaving / has left", +- /* 9 */ "require auth before assoc/re-assoc", +- /* 10 */ "Reserved", +- /* 11 */ "Reserved", +- /* 12 */ "Reserved", +- /* 13 */ "invalid IE", +- /* 14 */ "MIC error", +- /* 15 */ "4-way handshake timeout", +- /* 16 */ "2-way (group key) handshake timeout", +- /* 17 */ "4-way handshake IE diff among AssosReq/Rsp/Beacon", +- /* 18 */ +-}; + + extern UCHAR OfdmRateToRxwiMCS[]; + // since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. +@@ -311,7 +301,6 @@ ULONG BasicRateMask[12] = {0xfffff001 /* 1-Mbps */, 0xfffff003 /* 2 Mbps */, + 0xfffff01f /* 6 */ , 0xfffff03f /* 9 */ , 0xfffff07f /* 12 */ , 0xfffff0ff /* 18 */, + 0xfffff1ff /* 24 */ , 0xfffff3ff /* 36 */ , 0xfffff7ff /* 48 */ , 0xffffffff /* 54 */}; + +-UCHAR MULTICAST_ADDR[MAC_ADDR_LEN] = {0x1, 0x00, 0x00, 0x00, 0x00, 0x00}; + UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +@@ -336,7 +325,6 @@ UCHAR TimIe = IE_TIM; + UCHAR WpaIe = IE_WPA; + UCHAR Wpa2Ie = IE_WPA2; + UCHAR IbssIe = IE_IBSS_PARM; +-UCHAR Ccx2Ie = IE_CCX_V2; + + extern UCHAR WPA_OUI[]; + +@@ -345,107 +333,6 @@ UCHAR SES_OUI[] = {0x00, 0x90, 0x4c}; + UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + +-// Reset the RFIC setting to new series +-RTMP_RF_REGS RF2850RegTable[] = { +-// ch R1 R2 R3(TX0~4=0) R4 +- {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b}, +- {2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f}, +- {3, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800518b}, +- {4, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800519f}, +- {5, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800518b}, +- {6, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800519f}, +- {7, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800518b}, +- {8, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800519f}, +- {9, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800518b}, +- {10, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800519f}, +- {11, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800518b}, +- {12, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800519f}, +- {13, 0x98402ecc, 0x984c079e, 0x98168a55, 0x9800518b}, +- {14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193}, +- +- // 802.11 UNI / HyperLan 2 +- {36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3}, +- {38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193}, +- {40, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed183}, +- {44, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed1a3}, +- {46, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed18b}, +- {48, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed19b}, +- {52, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed193}, +- {54, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed1a3}, +- {56, 0x98402ec8, 0x984c068e, 0x98158a55, 0x980ed18b}, +- {60, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed183}, +- {62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193}, +- {64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3}, // Plugfest#4, Day4, change RFR3 left4th 9->5. +- +- // 802.11 HyperLan 2 +- {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783}, +- +- // 2008.04.30 modified +- // The system team has AN to improve the EVM value +- // for channel 102 to 108 for the RT2850/RT2750 dual band solution. +- {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793}, +- {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3}, +- {108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193}, +- +- {110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183}, +- {112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b}, +- {116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3}, +- {118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193}, +- {120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183}, +- {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193}, +- {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b}, // 0x980ed1bb->0x980ed15b required by Rory 20070927 +- {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3}, +- {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b}, +- {134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193}, +- {136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b}, +- {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183}, +- +- // 802.11 UNII +- {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7}, +- {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187}, +- {153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f}, +- {157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f}, +- {159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7}, +- {161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187}, +- {165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197}, +- +- // Japan +- {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b}, +- {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13}, +- {192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b}, +- {196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23}, +- {208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13}, +- {212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b}, +- {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23}, +- +- // still lack of MMAC(Japan) ch 34,38,42,46 +-}; +-UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); +- +-FREQUENCY_ITEM FreqItems3020[] = +-{ +- /**************************************************/ +- // ISM : 2.4 to 2.483 GHz // +- /**************************************************/ +- // 11g +- /**************************************************/ +- //-CH---N-------R---K----------- +- {1, 241, 2, 2}, +- {2, 241, 2, 7}, +- {3, 242, 2, 2}, +- {4, 242, 2, 7}, +- {5, 243, 2, 2}, +- {6, 243, 2, 7}, +- {7, 244, 2, 2}, +- {8, 244, 2, 7}, +- {9, 245, 2, 2}, +- {10, 245, 2, 7}, +- {11, 246, 2, 2}, +- {12, 246, 2, 7}, +- {13, 247, 2, 2}, +- {14, 248, 2, 4}, +-}; +-UCHAR NUM_OF_3020_CHNL=(sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); + + /* + ========================================================================== +@@ -484,14 +371,19 @@ NDIS_STATUS MlmeInit( + AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, pAd->Mlme.AuthFunc); + AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, pAd->Mlme.AuthRspFunc); + SyncStateMachineInit(pAd, &pAd->Mlme.SyncMachine, pAd->Mlme.SyncFunc); +- WpaPskStateMachineInit(pAd, &pAd->Mlme.WpaPskMachine, pAd->Mlme.WpaPskFunc); +- AironetStateMachineInit(pAd, &pAd->Mlme.AironetMachine, pAd->Mlme.AironetFunc); ++ ++ ++ + + // Since we are using switch/case to implement it, the init is different from the above + // state machine init + MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL); + } + ++ ++ WpaStateMachineInit(pAd, &pAd->Mlme.WpaMachine, pAd->Mlme.WpaFunc); ++ ++ + ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, pAd->Mlme.ActFunc); + + // Init mlme periodic timer +@@ -503,16 +395,24 @@ NDIS_STATUS MlmeInit( + // software-based RX Antenna diversity + RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, FALSE); + +-#ifdef RT2860 + { ++#ifdef RTMP_PCI_SUPPORT + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { + // only PCIe cards need these two timers + RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, GET_TIMER_FUNCTION(PsPollWakeExec), pAd, FALSE); + RTMPInitTimer(pAd, &pAd->Mlme.RadioOnOffTimer, GET_TIMER_FUNCTION(RadioOnExec), pAd, FALSE); + } ++#endif // RTMP_PCI_SUPPORT // ++ ++ RTMPInitTimer(pAd, &pAd->Mlme.LinkDownTimer, GET_TIMER_FUNCTION(LinkDownExec), pAd, FALSE); ++ ++#ifdef RTMP_MAC_USB ++ RTMPInitTimer(pAd, &pAd->Mlme.AutoWakeupTimer, GET_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout), pAd, FALSE); ++ pAd->Mlme.AutoWakeupTimerRunning = FALSE; ++#endif // RTMP_MAC_USB // + } +-#endif ++ + } while (FALSE); + + DBGPRINT(RT_DEBUG_TRACE, ("<-- MLME Initialize\n")); +@@ -567,7 +467,7 @@ VOID MlmeHandler( + //From message type, determine which state machine I should drive + if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) + { +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + if (Elem->MsgType == MT2_RESET_CONF) + { + DBGPRINT_RAW(RT_DEBUG_TRACE, ("!!! reset MLME state machine !!!\n")); +@@ -576,7 +476,7 @@ VOID MlmeHandler( + Elem->MsgLen = 0; + continue; + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + // if dequeue success + switch (Elem->Machine) +@@ -600,14 +500,16 @@ VOID MlmeHandler( + case WPA_PSK_STATE_MACHINE: + StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem); + break; +- case AIRONET_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AironetMachine, Elem); +- break; ++ ++ ++ + case ACTION_STATE_MACHINE: + StateMachinePerformAction(pAd, &pAd->Mlme.ActMachine, Elem); + break; + +- ++ case WPA_STATE_MACHINE: ++ StateMachinePerformAction(pAd, &pAd->Mlme.WpaMachine, Elem); ++ break; + + + default: +@@ -647,9 +549,6 @@ VOID MlmeHalt( + IN PRTMP_ADAPTER pAd) + { + BOOLEAN Cancelled; +-#ifdef RT3070 +- UINT32 TxPinCfg = 0x00050F0F; +-#endif // RT3070 // + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeHalt\n")); + +@@ -667,13 +566,21 @@ VOID MlmeHalt( + RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +-#ifdef RT2860 ++ ++ ++#ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); + } +-#endif ++#endif // RTMP_MAC_PCI // ++ ++ RTMPCancelTimer(&pAd->Mlme.LinkDownTimer, &Cancelled); ++ ++#ifdef RTMP_MAC_USB ++ RTMPCancelTimer(&pAd->Mlme.AutoWakeupTimer, &Cancelled); ++#endif // RTMP_MAC_USB // + } + + RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); +@@ -683,10 +590,12 @@ VOID MlmeHalt( + + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) + { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ + // Set LED + RTMPSetLED(pAd, LED_HALT); + RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + { + LED_CFG_STRUC LedCfg; + RTMP_IO_READ32(pAd, LED_CFG, &LedCfg.word); +@@ -696,17 +605,10 @@ VOID MlmeHalt( + LedCfg.field.YLedMode = 0; + RTMP_IO_WRITE32(pAd, LED_CFG, LedCfg.word); + } +-#endif // RT2870 // +-#ifdef RT3070 +- // +- // Turn off LNA_PE +- // +- if (IS_RT3070(pAd) || IS_RT3071(pAd)) +- { +- TxPinCfg &= 0xFFFFF0F0; +- RTUSBWriteMACRegister(pAd, TX_PIN_CFG, TxPinCfg); +- } +-#endif // RT3070 // ++#endif // RTMP_MAC_USB // ++ ++ if (pChipOps->AsicHaltAction) ++ pChipOps->AsicHaltAction(pAd); + } + + RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled +@@ -730,6 +632,8 @@ VOID MlmeResetRalinkCounters( + pAd->RalinkCounters.OneSecTxNoRetryOkCount = 0; + pAd->RalinkCounters.OneSecTxRetryOkCount = 0; + pAd->RalinkCounters.OneSecRxOkDataCnt = 0; ++ pAd->RalinkCounters.OneSecReceivedByteCount = 0; ++ pAd->RalinkCounters.OneSecTransmittedByteCount = 0; + + // TODO: for debug only. to be removed + pAd->RalinkCounters.OneSecOsTxCount[QID_AC_BE] = 0; +@@ -748,8 +652,6 @@ VOID MlmeResetRalinkCounters( + return; + } + +-unsigned long rx_AMSDU; +-unsigned long rx_Total; + + /* + ========================================================================== +@@ -777,33 +679,19 @@ VOID MlmePeriodicExec( + ULONG TxTotalCnt; + PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext; + +-#ifdef RT2860 +- //Baron 2008/07/10 +- //printk("Baron_Test:\t%s", RTMPGetRalinkEncryModeStr(pAd->StaCfg.WepStatus)); +- //If the STA security setting is OPEN or WEP, pAd->StaCfg.WpaSupplicantUP = 0. +- //If the STA security setting is WPAPSK or WPA2PSK, pAd->StaCfg.WpaSupplicantUP = 1. +- if(pAd->StaCfg.WepStatus<2) +- { +- pAd->StaCfg.WpaSupplicantUP = 0; +- } +- else +- { +- pAd->StaCfg.WpaSupplicantUP = 1; +- } +- ++#ifdef RTMP_MAC_PCI + { + // If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. + // Move code to here, because following code will return when radio is off +- if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == 0) && +- (pAd->StaCfg.bHardwareRadio == TRUE) && +- (RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP)) && ++ if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == 0) && (pAd->StaCfg.bHardwareRadio == TRUE) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) ++ /*&&(pAd->bPCIclkOff == FALSE)*/) + { + UINT32 data = 0; + + // Read GPIO pin2 as Hardware controlled radio state +- RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); ++ RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); + if (data & 0x04) + { + pAd->StaCfg.bHwRadio = TRUE; +@@ -830,7 +718,7 @@ VOID MlmePeriodicExec( + } + } + } +-#endif /* RT2860 */ ++#endif // RTMP_MAC_PCI // + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +@@ -840,46 +728,7 @@ VOID MlmePeriodicExec( + fRTMP_ADAPTER_RESET_IN_PROGRESS)))) + return; + +-#ifdef RT2860 +- { +- if ((pAd->RalinkCounters.LastReceivedByteCount == pAd->RalinkCounters.ReceivedByteCount) && (pAd->StaCfg.bRadio == TRUE)) +- { +- // If ReceiveByteCount doesn't change, increase SameRxByteCount by 1. +- pAd->SameRxByteCount++; +- } +- else +- pAd->SameRxByteCount = 0; +- +- // If after BBP, still not work...need to check to reset PBF&MAC. +- if (pAd->SameRxByteCount == 702) +- { +- pAd->SameRxByteCount = 0; +- AsicResetPBF(pAd); +- AsicResetMAC(pAd); +- } +- +- // If SameRxByteCount keeps happens for 2 second in infra mode, or for 60 seconds in idle mode. +- if (((INFRA_ON(pAd)) && (pAd->SameRxByteCount > 20)) || ((IDLE_ON(pAd)) && (pAd->SameRxByteCount > 600))) +- { +- if ((pAd->StaCfg.bRadio == TRUE) && (pAd->SameRxByteCount < 700)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("---> SameRxByteCount = %lu !!!!!!!!!!!!!!! \n", pAd->SameRxByteCount)); +- pAd->SameRxByteCount = 700; +- AsicResetBBP(pAd); +- } +- } +- +- // Update lastReceiveByteCount. +- pAd->RalinkCounters.LastReceivedByteCount = pAd->RalinkCounters.ReceivedByteCount; +- +- if ((pAd->CheckDmaBusyCount > 3) && (IDLE_ON(pAd))) +- { +- pAd->CheckDmaBusyCount = 0; +- AsicResetFromDMABusy(pAd); +- } +- } +-#endif /* RT2860 */ +- RT28XX_MLME_PRE_SANITY_CHECK(pAd); ++ RTMP_MLME_PRE_SANITY_CHECK(pAd); + + { + // Do nothing if monitor mode is on +@@ -911,10 +760,11 @@ VOID MlmePeriodicExec( + // RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); + pAd->Mlme.PeriodicRound ++; + +-#ifdef RT3070 ++#ifdef RTMP_MAC_USB + // execute every 100ms, update the Tx FIFO Cnt for update Tx Rate. + NICUpdateFifoStaCounters(pAd); +-#endif // RT3070 // ++#endif // RTMP_MAC_USB // ++ + // execute every 500ms + if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd)/*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))*/) + { +@@ -932,13 +782,10 @@ VOID MlmePeriodicExec( + { + pAd->Mlme.OneSecPeriodicRound ++; + +- if (rx_Total) +- { + +- // reset counters +- rx_AMSDU = 0; +- rx_Total = 0; +- } ++ ++ ++ //ORIBATimerTimeout(pAd); + + // Media status changed, report to NDIS + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) +@@ -963,14 +810,23 @@ VOID MlmePeriodicExec( + // the dynamic tuning mechanism below are based on most up-to-date information + NICUpdateRawCounters(pAd); + +-#ifdef RT2870 +- RT2870_WatchDog(pAd); +-#endif // RT2870 // ++#ifdef RTMP_MAC_USB ++ RTUSBWatchDog(pAd); ++#endif // RTMP_MAC_USB // + + // Need statistics after read counter. So put after NICUpdateRawCounters + ORIBATimerTimeout(pAd); + ++ // if MGMT RING is full more than twice within 1 second, we consider there's ++ // a hardware problem stucking the TX path. In this case, try a hardware reset ++ // to recover the system ++ // if (pAd->RalinkCounters.MgmtRingFullCount >= 2) ++ // RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); ++ // else ++ // pAd->RalinkCounters.MgmtRingFullCount = 0; ++ + // The time period for checking antenna is according to traffic ++ { + if (pAd->Mlme.bEnableAutoAntennaCheck) + { + TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +@@ -993,15 +849,16 @@ VOID MlmePeriodicExec( + } + } + } ++ } + + STAMlmePeriodicExec(pAd); + + MlmeResetRalinkCounters(pAd); + + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->bPCIclkOff == FALSE)) +-#endif ++#endif // RTMP_MAC_PCI // + { + // When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock + // and sending CTS-to-self over and over. +@@ -1024,356 +881,13 @@ VOID MlmePeriodicExec( + } + } + +- RT28XX_MLME_HANDLER(pAd); +- } +- +- pAd->bUpdateBcnCntDone = FALSE; +-} +- +-VOID STAMlmePeriodicExec( +- PRTMP_ADAPTER pAd) +-{ +-#ifdef RT2860 +- ULONG TxTotalCnt; +-#endif +-#ifdef RT2870 +- ULONG TxTotalCnt; +- int i; +-#endif +- +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) +- { +- // WPA MIC error should block association attempt for 60 seconds +- if (pAd->StaCfg.bBlockAssoc && (pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ) < pAd->Mlme.Now32)) +- pAd->StaCfg.bBlockAssoc = FALSE; +- } +- +-#ifdef RT2860 +- //Baron 2008/07/10 +- //printk("Baron_Test:\t%s", RTMPGetRalinkEncryModeStr(pAd->StaCfg.WepStatus)); +- //If the STA security setting is OPEN or WEP, pAd->StaCfg.WpaSupplicantUP = 0. +- //If the STA security setting is WPAPSK or WPA2PSK, pAd->StaCfg.WpaSupplicantUP = 1. +- if(pAd->StaCfg.WepStatus<2) +- { +- pAd->StaCfg.WpaSupplicantUP = 0; +- } +- else +- { +- pAd->StaCfg.WpaSupplicantUP = 1; +- } +-#endif +- +- if ((pAd->PreMediaState != pAd->IndicateMediaState) && (pAd->CommonCfg.bWirelessEvent)) +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- pAd->PreMediaState = pAd->IndicateMediaState; +- } +- +-#ifdef RT2860 +- if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) && +- (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && +- (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) && +- (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && +- (RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); ++ RTMP_MLME_HANDLER(pAd); + } +-#endif +- +- + +- AsicStaBbpTuning(pAd); + +- TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- // update channel quality for Roaming and UI LinkQuality display +- MlmeCalculateChannelQuality(pAd, pAd->Mlme.Now32); +- } +- +- // must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if +- // Radio is currently in noisy environment +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- AsicAdjustTxPower(pAd); +- +- if (INFRA_ON(pAd)) +- { +- // Is PSM bit consistent with user power management policy? +- // This is the only place that will set PSM bit ON. +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); +- +- pAd->RalinkCounters.LastOneSecTotalTxCount = TxTotalCnt; +- +- if ((pAd->StaCfg.LastBeaconRxTime + 1*OS_HZ < pAd->Mlme.Now32) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- ((TxTotalCnt + pAd->RalinkCounters.OneSecRxOkCnt < 600))) +- { +- RTMPSetAGCInitValue(pAd, BW_20); +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", (0x2E + GET_LNA_GAIN(pAd)))); +- } +- +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) +- { +- // When APSD is enabled, the period changes as 20 sec +- if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } +- else +- { +- // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) +- if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) +- { +- if (pAd->CommonCfg.bWmmCapable) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- else +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +- } +- } +- } +- +- if (CQI_IS_DEAD(pAd->Mlme.ChannelQuality)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); +- pAd->StaCfg.CCXAdjacentAPReportFlag = TRUE; +- pAd->StaCfg.CCXAdjacentAPLinkDownTime = pAd->StaCfg.LastBeaconRxTime; +- +- // Lost AP, send disconnect & link down event +- LinkDown(pAd, FALSE); +- +- { +- union iwreq_data wrqu; +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- } +- +- MlmeAutoReconnectLastSSID(pAd); +- } +- else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) +- { +- pAd->RalinkCounters.BadCQIAutoRecoveryCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Bad CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); +- MlmeAutoReconnectLastSSID(pAd); +- } +- +- // Add auto seamless roaming +- if (pAd->StaCfg.bFastRoaming) +- { +- SHORT dBmToRoam = (SHORT)pAd->StaCfg.dBmToRoam; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Rssi=%d, dBmToRoam=%d\n", RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2), (CHAR)dBmToRoam)); +- +- if (RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2) <= (CHAR)dBmToRoam) +- { +- MlmeCheckForFastRoaming(pAd, pAd->Mlme.Now32); +- } +- } +- } +- else if (ADHOC_ON(pAd)) +- { +-#ifdef RT2860 +- // 2003-04-17 john. this is a patch that driver forces a BEACON out if ASIC fails +- // the "TX BEACON competition" for the entire past 1 sec. +- // So that even when ASIC's BEACONgen engine been blocked +- // by peer's BEACON due to slower system clock, this STA still can send out +- // minimum BEACON to tell the peer I'm alive. +- // drawback is that this BEACON won't be well aligned at TBTT boundary. +- // EnqueueBeaconFrame(pAd); // software send BEACON +- +- // if all 11b peers leave this BSS more than 5 seconds, update Tx rate, +- // restore outgoing BEACON to support B/G-mixed mode +- if ((pAd->CommonCfg.Channel <= 14) && +- (pAd->CommonCfg.MaxTxRate <= RATE_11) && +- (pAd->CommonCfg.MaxDesiredRate > RATE_11) && +- ((pAd->StaCfg.Last11bBeaconRxTime + 5*OS_HZ) < pAd->Mlme.Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - last 11B peer left, update Tx rates\n")); +- NdisMoveMemory(pAd->StaActive.SupRate, pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- pAd->StaActive.SupRateLen = pAd->CommonCfg.SupRateLen; +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- pAd->StaCfg.AdhocBOnlyJoined = FALSE; +- } +- +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- if ((pAd->StaCfg.AdhocBGJoined) && +- ((pAd->StaCfg.Last11gBeaconRxTime + 5 * OS_HZ) < pAd->Mlme.Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - last 11G peer left\n")); +- pAd->StaCfg.AdhocBGJoined = FALSE; +- } +- +- if ((pAd->StaCfg.Adhoc20NJoined) && +- ((pAd->StaCfg.Last20NBeaconRxTime + 5 * OS_HZ) < pAd->Mlme.Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - last 20MHz N peer left\n")); +- pAd->StaCfg.Adhoc20NJoined = FALSE; +- } +- } +-#endif /* RT2860 */ +- +- //radar detect +- if ((pAd->CommonCfg.Channel > 14) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- RadarDetectPeriodic(pAd); +- } +- +- // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState +- // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can +- // join later. +- if ((pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < pAd->Mlme.Now32) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- MLME_START_REQ_STRUCT StartReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); +- LinkDown(pAd, FALSE); +- +- StartParmFill(pAd, &StartReq, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } +- +-#ifdef RT2870 +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i]; +- +- if (pEntry->ValidAsCLI == FALSE) +- continue; +- +- if (pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < pAd->Mlme.Now32) +- MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); +- } +-#endif +- } +- else // no INFRA nor ADHOC connection +- { +- +- if (pAd->StaCfg.bScanReqIsFromWebUI && +- ((pAd->StaCfg.LastScanTime + 30 * OS_HZ) > pAd->Mlme.Now32)) +- goto SKIP_AUTO_SCAN_CONN; +- else +- pAd->StaCfg.bScanReqIsFromWebUI = FALSE; +- +- if ((pAd->StaCfg.bAutoReconnect == TRUE) +- && RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP) +- && (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { +- if ((pAd->ScanTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- if ((pAd->StaCfg.LastScanTime + 10 * OS_HZ) < pAd->Mlme.Now32) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("STAMlmePeriodicExec():CNTL - ScanTab.BssNr==0, start a new ACTIVE scan SSID[%s]\n", pAd->MlmeAux.AutoReconnectSsid)); +- ScanParmFill(pAd, &ScanReq, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room +- MlmeAutoReconnectLastSSID(pAd); +- } +- else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) +- { +- MlmeAutoScan(pAd); +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else +- { +- MlmeAutoReconnectLastSSID(pAd); +- } +- } +- } +- } +- +-SKIP_AUTO_SCAN_CONN: +- +- if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE)) +- { +- pAd->MacTab.fAnyBASession = TRUE; +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, FALSE, FALSE); +- } +- else if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap ==0) && (pAd->MacTab.fAnyBASession == TRUE)) +- { +- pAd->MacTab.fAnyBASession = FALSE; +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); +- } +- +- return; +-} +- +-// Link down report +-VOID LinkDownExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeAutoScan( +- IN PRTMP_ADAPTER pAd) +-{ +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Driver auto scan\n")); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- 0, +- NULL); +- RT28XX_MLME_HANDLER(pAd); +- } ++ pAd->bUpdateBcnCntDone = FALSE; + } + +-// IRQL = DISPATCH_LEVEL +-VOID MlmeAutoReconnectLastSSID( +- IN PRTMP_ADAPTER pAd) +-{ +- +- +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && +- (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { +- NDIS_802_11_SSID OidSsid; +- OidSsid.SsidLength = pAd->MlmeAux.AutoReconnectSsidLen; +- NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_SSID setting - %s, len - %d\n", pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen)); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), +- &OidSsid); +- RT28XX_MLME_HANDLER(pAd); +- } +-} + + /* + ========================================================================== +@@ -1394,10 +908,10 @@ BOOLEAN MlmeValidateSSID( + + // Check each character value + for (index = 0; index < SsidLen; index++) +- { ++ { + if (pSsid[index] < 0x20) + return (FALSE); +- } ++ } + + // All checked + return (TRUE); +@@ -1414,27 +928,19 @@ VOID MlmeSelectTxRateTable( + { + // decide the rate table for tuning + if (pAd->CommonCfg.TxRateTableSize > 0) +- { ++ { + *ppTable = RateSwitchTable; + *pTableSize = RateSwitchTable[0]; + *pInitTxRateIdx = RateSwitchTable[1]; + + break; +- } ++ } + + if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd)) +- { ++ { + if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +-#ifdef RT2860 +- !pAd->StaCfg.AdhocBOnlyJoined && +- !pAd->StaCfg.AdhocBGJoined && +- (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +-#endif +-#ifdef RT2870 + (pEntry->HTCapability.MCSSet[0] == 0xff) && + ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +-#endif + {// 11N 1S Adhoc + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; +@@ -1442,50 +948,29 @@ VOID MlmeSelectTxRateTable( + + } + else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +-#ifdef RT2860 +- !pAd->StaCfg.AdhocBOnlyJoined && +- !pAd->StaCfg.AdhocBGJoined && +- (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && +-#endif +-#ifdef RT2870 + (pEntry->HTCapability.MCSSet[0] == 0xff) && + (pEntry->HTCapability.MCSSet[1] == 0xff) && +-#endif + (pAd->Antenna.field.TxPath == 2)) + {// 11N 2S Adhoc + if (pAd->LatchRfRegs.Channel <= 14) +- { ++ { + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; + *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } ++ } + else + { + *ppTable = RateSwitchTable11N2SForABand; + *pTableSize = RateSwitchTable11N2SForABand[0]; + *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- } ++ } + +- } ++ } + else +-#ifdef RT2860 +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- *ppTable = RateSwitchTable11B; +- *pTableSize = RateSwitchTable11B[0]; +- *pInitTxRateIdx = RateSwitchTable11B[1]; +- +- } +- else if((pAd->LatchRfRegs.Channel <= 14) && (pAd->StaCfg.AdhocBOnlyJoined == TRUE)) +-#endif +-#ifdef RT2870 + if ((pEntry->RateLen == 4) + && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) + ) +-#endif + { +- // USe B Table when Only b-only Station in my IBSS . + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; + *pInitTxRateIdx = RateSwitchTable11B[1]; +@@ -1508,7 +993,9 @@ VOID MlmeSelectTxRateTable( + break; + } + +- if ((pEntry->RateLen == 12) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ++ //if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ++ // ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && + ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) + {// 11BGN 1S AP + *ppTable = RateSwitchTable11BGN1S; +@@ -1516,13 +1003,15 @@ VOID MlmeSelectTxRateTable( + *pInitTxRateIdx = RateSwitchTable11BGN1S[1]; + + break; +- } ++ } + +- if ((pEntry->RateLen == 12) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ++ //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ++ // (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && + (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) + {// 11BGN 2S AP + if (pAd->LatchRfRegs.Channel <= 14) +- { ++ { + *ppTable = RateSwitchTable11BGN2S; + *pTableSize = RateSwitchTable11BGN2S[0]; + *pInitTxRateIdx = RateSwitchTable11BGN2S[1]; +@@ -1538,6 +1027,7 @@ VOID MlmeSelectTxRateTable( + break; + } + ++ //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) + if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) + {// 11N 1S AP + *ppTable = RateSwitchTable11N1S; +@@ -1547,6 +1037,7 @@ VOID MlmeSelectTxRateTable( + break; + } + ++ //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) + if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) + {// 11N 2S AP + if (pAd->LatchRfRegs.Channel <= 14) +@@ -1554,7 +1045,7 @@ VOID MlmeSelectTxRateTable( + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; + *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } ++ } + else + { + *ppTable = RateSwitchTable11N2SForABand; +@@ -1564,9 +1055,11 @@ VOID MlmeSelectTxRateTable( + + break; + } +- + //else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if (pEntry->RateLen == 4) ++ if ((pEntry->RateLen == 4 || pAd->CommonCfg.PhyMode==PHY_11B) ++ //Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode ++ /* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)*/ ++ ) + {// B only AP + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; +@@ -1624,7 +1117,6 @@ VOID MlmeSelectTxRateTable( + } + break; + } +- + if (pAd->LatchRfRegs.Channel <= 14) + { + if (pAd->CommonCfg.TxStream == 1) +@@ -1659,13 +1151,363 @@ VOID MlmeSelectTxRateTable( + DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n")); + } + } +- + DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode (SupRateLen=%d, ExtRateLen=%d, MCSSet[0]=0x%x, MCSSet[1]=0x%x)\n", + pAd->StaActive.SupRateLen, pAd->StaActive.ExtRateLen, pAd->StaActive.SupportedPhyInfo.MCSSet[0], pAd->StaActive.SupportedPhyInfo.MCSSet[1])); + } + } while(FALSE); + } + ++ ++VOID STAMlmePeriodicExec( ++ PRTMP_ADAPTER pAd) ++{ ++ ULONG TxTotalCnt; ++ int i; ++ ++ /* ++ We return here in ATE mode, because the statistics ++ that ATE need are not collected via this routine. ++ */ ++#if defined(RT305x)||defined(RT3070) ++ // request by Gary, if Rssi0 > -42, BBP 82 need to be changed from 0x62 to 0x42, , bbp 67 need to be changed from 0x20 to 0x18 ++ if (!pAd->CommonCfg.HighPowerPatchDisabled) ++ { ++#ifdef RT3070 ++ if ( (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) ++#endif // RT3070 // ++ { ++ if ((pAd->StaCfg.RssiSample.AvgRssi0 != 0) && (pAd->StaCfg.RssiSample.AvgRssi0 > (pAd->BbpRssiToDbmDelta - 35))) ++ { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x20); ++ } ++ else ++ { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x23); ++ } ++ } ++ } ++#endif ++ ++ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) ++ { ++ // WPA MIC error should block association attempt for 60 seconds ++ if (pAd->StaCfg.bBlockAssoc && ++ RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastMicErrorTime + (60*OS_HZ))) ++ pAd->StaCfg.bBlockAssoc = FALSE; ++ } ++ ++ if ((pAd->PreMediaState != pAd->IndicateMediaState) && (pAd->CommonCfg.bWirelessEvent)) ++ { ++ if (pAd->IndicateMediaState == NdisMediaStateConnected) ++ { ++ RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ } ++ pAd->PreMediaState = pAd->IndicateMediaState; ++ } ++ ++ ++ ++ ++ if (pAd->CommonCfg.PSPXlink && ADHOC_ON(pAd)) ++ { ++ } ++ else ++ { ++ AsicStaBbpTuning(pAd); ++ } ++ ++ TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + ++ pAd->RalinkCounters.OneSecTxRetryOkCount + ++ pAd->RalinkCounters.OneSecTxFailCount; ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ { ++ // update channel quality for Roaming and UI LinkQuality display ++ MlmeCalculateChannelQuality(pAd, NULL, pAd->Mlme.Now32); ++ } ++ ++ // must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if ++ // Radio is currently in noisy environment ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ AsicAdjustTxPower(pAd); ++ ++ if (INFRA_ON(pAd)) ++ { ++ ++ // Is PSM bit consistent with user power management policy? ++ // This is the only place that will set PSM bit ON. ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); ++ ++ pAd->RalinkCounters.LastOneSecTotalTxCount = TxTotalCnt; ++ ++ if ((RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + (1*OS_HZ))) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && ++ (((TxTotalCnt + pAd->RalinkCounters.OneSecRxOkCnt) < 600))) ++ { ++ RTMPSetAGCInitValue(pAd, BW_20); ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", (0x2E + GET_LNA_GAIN(pAd)))); ++ } ++ ++ //if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && ++ // (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) ++ { ++ if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) ++ { ++ // When APSD is enabled, the period changes as 20 sec ++ if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); ++ } ++ else ++ { ++ // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) ++ if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) ++ { ++ if (pAd->CommonCfg.bWmmCapable) ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); ++ else ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); ++ } ++ } ++ } ++ ++ if (CQI_IS_DEAD(pAd->Mlme.ChannelQuality)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); ++ ++ if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) && ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) ++ pAd->StaCfg.bLostAp = TRUE; ++ ++ // Lost AP, send disconnect & link down event ++ LinkDown(pAd, FALSE); ++ ++ ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); ++ ++ // RTMPPatchMacBbpBug(pAd); ++ MlmeAutoReconnectLastSSID(pAd); ++ } ++ else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) ++ { ++ pAd->RalinkCounters.BadCQIAutoRecoveryCount ++; ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Bad CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); ++ MlmeAutoReconnectLastSSID(pAd); ++ } ++ ++ if (pAd->StaCfg.bAutoRoaming) ++ { ++ BOOLEAN rv = FALSE; ++ CHAR dBmToRoam = pAd->StaCfg.dBmToRoam; ++ CHAR MaxRssi = RTMPMaxRssi(pAd, ++ pAd->StaCfg.RssiSample.LastRssi0, ++ pAd->StaCfg.RssiSample.LastRssi1, ++ pAd->StaCfg.RssiSample.LastRssi2); ++ ++ // Scanning, ignore Roaming ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) && ++ (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) && ++ (MaxRssi <= dBmToRoam)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, (CHAR)dBmToRoam)); ++ ++ ++ // Add auto seamless roaming ++ if (rv == FALSE) ++ rv = MlmeCheckForFastRoaming(pAd); ++ ++ if (rv == FALSE) ++ { ++ if ((pAd->StaCfg.LastScanTime + 10 * OS_HZ) < pAd->Mlme.Now32) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming, No eligable entry, try new scan!\n")); ++ pAd->StaCfg.ScanCnt = 2; ++ pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; ++ MlmeAutoScan(pAd); ++ } ++ } ++ } ++ } ++ } ++ else if (ADHOC_ON(pAd)) ++ { ++ // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState ++ // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can ++ // join later. ++ if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) && ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ { ++ MLME_START_REQ_STRUCT StartReq; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); ++ LinkDown(pAd, FALSE); ++ ++ StartParmFill(pAd, &StartReq, (CHAR *)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; ++ } ++ ++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) ++ { ++ MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i]; ++ ++ if (pEntry->ValidAsCLI == FALSE) ++ continue; ++ ++ if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME)) ++ MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); ++ } ++ } ++ else // no INFRA nor ADHOC connection ++ { ++ ++ if (pAd->StaCfg.bScanReqIsFromWebUI && ++ RTMP_TIME_BEFORE(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (30 * OS_HZ))) ++ goto SKIP_AUTO_SCAN_CONN; ++ else ++ pAd->StaCfg.bScanReqIsFromWebUI = FALSE; ++ ++ if ((pAd->StaCfg.bAutoReconnect == TRUE) ++ && RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP) ++ && (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) ++ { ++ if ((pAd->ScanTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) ++ { ++ MLME_SCAN_REQ_STRUCT ScanReq; ++ ++ if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (10 * OS_HZ))) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("STAMlmePeriodicExec():CNTL - ScanTab.BssNr==0, start a new ACTIVE scan SSID[%s]\n", pAd->MlmeAux.AutoReconnectSsid)); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen, BSS_ANY, SCAN_ACTIVE); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; ++ // Reset Missed scan number ++ pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; ++ } ++ else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room ++ MlmeAutoReconnectLastSSID(pAd); ++ } ++ else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) ++ { ++ if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) ++ { ++ MlmeAutoScan(pAd); ++ pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; ++ } ++ else ++ { ++ MlmeAutoReconnectLastSSID(pAd); ++ } ++ } ++ } ++ } ++ ++SKIP_AUTO_SCAN_CONN: ++ ++ if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE)) ++ { ++ pAd->MacTab.fAnyBASession = TRUE; ++ AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, FALSE, FALSE); ++ } ++ else if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap ==0) && (pAd->MacTab.fAnyBASession == TRUE)) ++ { ++ pAd->MacTab.fAnyBASession = FALSE; ++ AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); ++ } ++ ++ return; ++} ++ ++// Link down report ++VOID LinkDownExec( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) ++{ ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ ++ if (pAd != NULL) ++ { ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ ++ if ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) && ++ (INFRA_ON(pAd))) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("LinkDownExec(): disassociate with current AP...\n")); ++ DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; ++ ++ pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ RTMP_IndicateMediaState(pAd); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ } ++ } ++} ++ ++// IRQL = DISPATCH_LEVEL ++VOID MlmeAutoScan( ++ IN PRTMP_ADAPTER pAd) ++{ ++ // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Driver auto scan\n")); ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID_LIST_SCAN, ++ pAd->MlmeAux.AutoReconnectSsidLen, ++ pAd->MlmeAux.AutoReconnectSsid); ++ RTMP_MLME_HANDLER(pAd); ++ } ++} ++ ++// IRQL = DISPATCH_LEVEL ++VOID MlmeAutoReconnectLastSSID( ++ IN PRTMP_ADAPTER pAd) ++{ ++ if (pAd->StaCfg.bAutoConnectByBssid) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_BSSID setting - %02X:%02X:%02X:%02X:%02X:%02X\n", ++ pAd->MlmeAux.Bssid[0], ++ pAd->MlmeAux.Bssid[1], ++ pAd->MlmeAux.Bssid[2], ++ pAd->MlmeAux.Bssid[3], ++ pAd->MlmeAux.Bssid[4], ++ pAd->MlmeAux.Bssid[5])); ++ ++ pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID, ++ MAC_ADDR_LEN, ++ pAd->MlmeAux.Bssid); ++ ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ ++ RTMP_MLME_HANDLER(pAd); ++ } ++ // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ else if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && ++ (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) ++ { ++ NDIS_802_11_SSID OidSsid; ++ OidSsid.SsidLength = pAd->MlmeAux.AutoReconnectSsidLen; ++ NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_SSID setting - %s, len - %d\n", pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen)); ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_SSID, ++ sizeof(NDIS_802_11_SSID), ++ &OidSsid); ++ RTMP_MLME_HANDLER(pAd); ++ } ++} ++ ++ + /* + ========================================================================== + Description: +@@ -1693,7 +1535,7 @@ VOID MlmeCheckForRoaming( + { + pBss = &pAd->ScanTab.BssEntry[i]; + +- if ((pBss->LastBeaconRxTime + BEACON_LOST_TIME) < Now32) ++ if ((pBss->LastBeaconRxTime + pAd->StaCfg.BeaconLostTime) < Now32) + continue; // AP disappear + if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING) + continue; // RSSI too weak. forget it. +@@ -1715,7 +1557,7 @@ VOID MlmeCheckForRoaming( + pAd->RalinkCounters.PoorCQIRoamingCount ++; + DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + } + DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForRoaming(# of candidate= %d)\n",pRoamTab->BssNr)); +@@ -1733,9 +1575,8 @@ VOID MlmeCheckForRoaming( + Output: + ========================================================================== + */ +-VOID MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now) ++BOOLEAN MlmeCheckForFastRoaming( ++ IN PRTMP_ADAPTER pAd) + { + USHORT i; + BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +@@ -1745,7 +1586,7 @@ VOID MlmeCheckForFastRoaming( + // put all roaming candidates into RoamTab, and sort in RSSI order + BssTableInit(pRoamTab); + for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { ++ { + pBss = &pAd->ScanTab.BssEntry[i]; + + if ((pBss->Rssi <= -50) && (pBss->Channel == pAd->CommonCfg.Channel)) +@@ -1761,119 +1602,23 @@ VOID MlmeCheckForFastRoaming( + // AP passing all above rules is put into roaming candidate table + NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY)); + pRoamTab->BssNr += 1; +- } ++ } + ++ DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); + if (pRoamTab->BssNr > 0) +- { ++ { + // check CntlMachine.CurrState to avoid collision with NDIS SetOID request + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { ++ { + pAd->RalinkCounters.PoorCQIRoamingCount ++; + DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); +- } +- } +- // Maybe site survey required +- else +- { +- if ((pAd->StaCfg.LastScanTime + 10 * 1000) < Now) +- { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming, No eligable entry, try new scan!\n")); +- pAd->StaCfg.ScanCnt = 2; +- pAd->StaCfg.LastScanTime = Now; +- MlmeAutoScan(pAd); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); +-} +- +-/* +- ========================================================================== +- Description: +- This routine calculates TxPER, RxPER of the past N-sec period. And +- according to the calculation result, ChannelQuality is calculated here +- to decide if current AP is still doing the job. +- +- If ChannelQuality is not good, a ROAMing attempt may be tried later. +- Output: +- StaCfg.ChannelQuality - 0..100 +- +- IRQL = DISPATCH_LEVEL +- +- NOTE: This routine decide channle quality based on RX CRC error ratio. +- Caller should make sure a function call to NICUpdateRawCounters(pAd) +- is performed right before this routine, so that this routine can decide +- channel quality based on the most up-to-date information +- ========================================================================== +- */ +-VOID MlmeCalculateChannelQuality( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32) +-{ +- ULONG TxOkCnt, TxCnt, TxPER, TxPRR; +- ULONG RxCnt, RxPER; +- UCHAR NorRssi; +- CHAR MaxRssi; +- ULONG BeaconLostTime = BEACON_LOST_TIME; +- +- MaxRssi = RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2); +- +- // +- // calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics +- // +- TxOkCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + pAd->RalinkCounters.OneSecTxRetryOkCount; +- TxCnt = TxOkCnt + pAd->RalinkCounters.OneSecTxFailCount; +- if (TxCnt < 5) +- { +- TxPER = 0; +- TxPRR = 0; +- } +- else +- { +- TxPER = (pAd->RalinkCounters.OneSecTxFailCount * 100) / TxCnt; +- TxPRR = ((TxCnt - pAd->RalinkCounters.OneSecTxNoRetryOkCount) * 100) / TxCnt; +- } +- +- // +- // calculate RX PER - don't take RxPER into consideration if too few sample +- // +- RxCnt = pAd->RalinkCounters.OneSecRxOkCnt + pAd->RalinkCounters.OneSecRxFcsErrCnt; +- if (RxCnt < 5) +- RxPER = 0; +- else +- RxPER = (pAd->RalinkCounters.OneSecRxFcsErrCnt * 100) / RxCnt; +- +- // +- // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER +- // +- if (INFRA_ON(pAd) && +- (pAd->RalinkCounters.OneSecTxNoRetryOkCount < 2) && // no heavy traffic +- (pAd->StaCfg.LastBeaconRxTime + BeaconLostTime < Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", BeaconLostTime, TxOkCnt)); +- pAd->Mlme.ChannelQuality = 0; +- } +- else +- { +- // Normalize Rssi +- if (MaxRssi > -40) +- NorRssi = 100; +- else if (MaxRssi < -90) +- NorRssi = 0; +- else +- NorRssi = (MaxRssi + 90) * 2; +- +- // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) +- pAd->Mlme.ChannelQuality = (RSSI_WEIGHTING * NorRssi + +- TX_WEIGHTING * (100 - TxPRR) + +- RX_WEIGHTING* (100 - RxPER)) / 100; +- if (pAd->Mlme.ChannelQuality >= 100) +- pAd->Mlme.ChannelQuality = 100; +- } ++ RTMP_MLME_HANDLER(pAd); ++ return TRUE; ++ } ++ } + ++ return FALSE; + } + + VOID MlmeSetTxRate( +@@ -1887,7 +1632,7 @@ VOID MlmeSetTxRate( + + if (pTxRate->STBC && (pAd->StaCfg.MaxHTPhyMode.field.STBC) && (pAd->Antenna.field.TxPath == 2)) + pAd->StaCfg.HTPhyMode.field.STBC = STBC_USE; +- else ++ else + pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; + + if (pTxRate->CurrMCS < MCS_AUTO) +@@ -1896,8 +1641,8 @@ VOID MlmeSetTxRate( + if (pAd->StaCfg.HTPhyMode.field.MCS > 7) + pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; + +- if (ADHOC_ON(pAd)) +- { ++ if (ADHOC_ON(pAd)) ++ { + // If peer adhoc is b-only mode, we can't send 11g rate. + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + pEntry->HTPhyMode.field.STBC = STBC_NONE; +@@ -1911,13 +1656,13 @@ VOID MlmeSetTxRate( + + // Patch speed error in status page + pAd->StaCfg.HTPhyMode.field.MODE = pEntry->HTPhyMode.field.MODE; +- } +- else +- { ++ } ++ else ++ { + if (pTxRate->Mode <= MaxMode) +- pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode; ++ pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode; + +- if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI)) ++ if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI)) + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_400; + else + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +@@ -1931,52 +1676,51 @@ VOID MlmeSetTxRate( + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + } + +- // Turn RTS/CTS rate to 6Mbps. ++ // Turn RTS/CTS rate to 6Mbps. + if ((pEntry->HTPhyMode.field.MCS == 0) && (pAd->StaCfg.HTPhyMode.field.MCS != 0)) +- { ++ { + pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + if (pAd->MacTab.fAnyBASession) + { + AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } ++ } + else + { + AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); ++ } + } +- } + else if ((pEntry->HTPhyMode.field.MCS == 8) && (pAd->StaCfg.HTPhyMode.field.MCS != 8)) +- { ++ { + pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + if (pAd->MacTab.fAnyBASession) +- { ++ { + AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- else +- { ++ } ++ else ++ { + AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); ++ } + } +- } + else if ((pEntry->HTPhyMode.field.MCS != 0) && (pAd->StaCfg.HTPhyMode.field.MCS == 0)) +- { ++ { + AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); + +- } ++ } + else if ((pEntry->HTPhyMode.field.MCS != 8) && (pAd->StaCfg.HTPhyMode.field.MCS == 8)) +- { ++ { + AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } ++ } + + pEntry->HTPhyMode.field.STBC = pAd->StaCfg.HTPhyMode.field.STBC; + pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI; + pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; ++ if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) && ++ pAd->WIFItestbed.bGreenField) ++ pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; ++ } + +- if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) && +- pAd->WIFItestbed.bGreenField) +- pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- +- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); ++ pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); + } + + /* +@@ -2002,7 +1746,7 @@ VOID MlmeDynamicTxRateSwitching( + UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; + ULONG i, AccuTxTotalCnt = 0, TxTotalCnt; + ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged, bUpgradeQuality = FALSE; ++ BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; + PUCHAR pTable; + UCHAR TableSize = 0; +@@ -2012,29 +1756,26 @@ VOID MlmeDynamicTxRateSwitching( + TX_STA_CNT0_STRUC TxStaCnt0; + ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; + MAC_TABLE_ENTRY *pEntry; ++ RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; ++ + + // + // walk through MAC table, see if need to change AP's TX rate toward each entry + // +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) ++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) + { + pEntry = &pAd->MacTab.Content[i]; + +- // check if this entry need to switch rate automatically ++ // check if this entry need to switch rate automatically + if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) + continue; + + if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls)) + { +-#ifdef RT2860 +- Rssi = RTMPMaxRssi(pAd, (CHAR)pAd->StaCfg.RssiSample.AvgRssi0, (CHAR)pAd->StaCfg.RssiSample.AvgRssi1, (CHAR)pAd->StaCfg.RssiSample.AvgRssi2); +-#endif +-#ifdef RT2870 + Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); +-#endif ++ pRssi->AvgRssi0, ++ pRssi->AvgRssi1, ++ pRssi->AvgRssi2); + + // Update statistic counter + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +@@ -2063,22 +1804,17 @@ VOID MlmeDynamicTxRateSwitching( + TxErrorRatio = ((TxRetransmit + TxFailCount) * 100) / TxTotalCnt; + } + else +- { +-#ifdef RT2860 +- Rssi = RTMPMaxRssi(pAd, (CHAR)pEntry->RssiSample.AvgRssi0, (CHAR)pEntry->RssiSample.AvgRssi1, (CHAR)pEntry->RssiSample.AvgRssi2); +-#endif +-#ifdef RT2870 ++ { + if (INFRA_ON(pAd) && (i == 1)) + Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); ++ pRssi->AvgRssi0, ++ pRssi->AvgRssi1, ++ pRssi->AvgRssi2); + else + Rssi = RTMPMaxRssi(pAd, + pEntry->RssiSample.AvgRssi0, + pEntry->RssiSample.AvgRssi1, + pEntry->RssiSample.AvgRssi2); +-#endif + + TxTotalCnt = pEntry->OneSecTxNoRetryOkCount + + pEntry->OneSecTxRetryOkCount + +@@ -2086,7 +1822,45 @@ VOID MlmeDynamicTxRateSwitching( + + if (TxTotalCnt) + TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt; ++ } ++ ++ if (TxTotalCnt) ++ { ++ /* ++ Three AdHoc connections can not work normally if one AdHoc connection is disappeared from a heavy traffic environment generated by ping tool ++ We force to set LongRtyLimit and ShortRtyLimit to 0 to stop retransmitting packet, after a while, resoring original settings ++ */ ++ if (TxErrorRatio == 100) ++ { ++ TX_RTY_CFG_STRUC TxRtyCfg,TxRtyCfgtmp; ++ ULONG Index; ++ ULONG MACValue; ++ ++ RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); ++ TxRtyCfgtmp.word = TxRtyCfg.word; ++ TxRtyCfg.field.LongRtyLimit = 0x0; ++ TxRtyCfg.field.ShortRtyLimit = 0x0; ++ RTMP_IO_WRITE32(pAd, TX_RTY_CFG, TxRtyCfg.word); ++ ++ RTMPusecDelay(1); ++ ++ Index = 0; ++ MACValue = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); ++ if ((MACValue & 0xffffff) == 0) ++ break; ++ Index++; ++ RTMPusecDelay(1000); ++ }while((Index < 330)&&(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))); ++ ++ RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); ++ TxRtyCfg.field.LongRtyLimit = TxRtyCfgtmp.field.LongRtyLimit; ++ TxRtyCfg.field.ShortRtyLimit = TxRtyCfgtmp.field.ShortRtyLimit; ++ RTMP_IO_WRITE32(pAd, TX_RTY_CFG, TxRtyCfg.word); + } ++ } + + CurrRateIdx = pEntry->CurrTxRateIndex; + +@@ -2118,33 +1892,33 @@ VOID MlmeDynamicTxRateSwitching( + + // decide the next upgrade rate and downgrade rate, if any + if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) +- { ++ { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx -1; +- } ++ } + else if (CurrRateIdx == 0) + { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx; + } + else if (CurrRateIdx == (TableSize - 1)) +- { ++ { + UpRateIdx = CurrRateIdx; + DownRateIdx = CurrRateIdx - 1; +- } ++ } + + pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; + + if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) +- { ++ { + TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1)); + TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1)); +- } +- else +- { ++ } ++ else ++ { + TrainUp = pCurrTxRate->TrainUp; + TrainDown = pCurrTxRate->TrainDown; +- } ++ } + + //pAd->DrsCounters.LastTimeTxRateChangeAction = pAd->DrsCounters.LastSecTxRateChangeAction; + +@@ -2160,10 +1934,9 @@ VOID MlmeDynamicTxRateSwitching( + // (criteria copied from RT2500 for Netopia case) + // + if (TxTotalCnt <= 15) +- { ++ { + CHAR idx = 0; + UCHAR TxRateIdx; +- //UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = 0, MCS7 = 0, MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; + UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = 0, MCS5 =0, MCS6 = 0, MCS7 = 0; + UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; + UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; // 3*3 +@@ -2174,54 +1947,55 @@ VOID MlmeDynamicTxRateSwitching( + pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(idx+1)*5]; + + if (pCurrTxRate->CurrMCS == MCS_0) +- { ++ { + MCS0 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_1) +- { ++ { + MCS1 = idx; + } + else if (pCurrTxRate->CurrMCS == MCS_2) +- { ++ { + MCS2 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_3) +- { ++ { + MCS3 = idx; + } + else if (pCurrTxRate->CurrMCS == MCS_4) + { + MCS4 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_5) + { + MCS5 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_6) +- { ++ { + MCS6 = idx; + } + //else if (pCurrTxRate->CurrMCS == MCS_7) + else if ((pCurrTxRate->CurrMCS == MCS_7) && (pCurrTxRate->ShortGI == GI_800)) // prevent the highest MCS using short GI when 1T and low throughput +- { ++ { + MCS7 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_12) +- { ++ { + MCS12 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_13) + { + MCS13 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_14) +- { ++ { + MCS14 = idx; +- } ++ } ++ //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate + else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) //we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI +- { ++ { + MCS15 = idx; +- } ++ } + else if (pCurrTxRate->CurrMCS == MCS_20) // 3*3 + { + MCS20 = idx; +@@ -2270,13 +2044,13 @@ VOID MlmeDynamicTxRateSwitching( + (pTable == RateSwitchTable)) + {// N mode with 3 stream // 3*3 + if (MCS23 && (Rssi >= -70)) +- TxRateIdx = MCS15; ++ TxRateIdx = MCS23; + else if (MCS22 && (Rssi >= -72)) +- TxRateIdx = MCS14; ++ TxRateIdx = MCS22; + else if (MCS21 && (Rssi >= -76)) +- TxRateIdx = MCS13; ++ TxRateIdx = MCS21; + else if (MCS20 && (Rssi >= -78)) +- TxRateIdx = MCS12; ++ TxRateIdx = MCS20; + else if (MCS4 && (Rssi >= -82)) + TxRateIdx = MCS4; + else if (MCS3 && (Rssi >= -84)) +@@ -2288,6 +2062,7 @@ VOID MlmeDynamicTxRateSwitching( + else + TxRateIdx = MCS0; + } ++// else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) + else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand)) // 3*3 + {// N mode with 2 stream + if (MCS15 && (Rssi >= (-70+RssiOffset))) +@@ -2350,6 +2125,7 @@ VOID MlmeDynamicTxRateSwitching( + TxRateIdx = MCS0; + } + ++ // if (TxRateIdx != pAd->CommonCfg.TxRateIndex) + { + pEntry->CurrTxRateIndex = TxRateIdx; + pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; +@@ -2464,15 +2240,34 @@ VOID MlmeDynamicTxRateSwitching( + } + + pEntry->LastTxOkCount = TxSuccess; ++#ifdef RT2860 ++ pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; ++#endif // RT2860 // ++#if defined(RT2870) || defined(RT3070) ++ { ++ UCHAR tmpTxRate; + +- // reset all OneSecTx counters +- RESET_ONE_SEC_TX_CNT(pEntry); ++ // to fix tcp ack issue ++ if (!bTxRateChanged && (pAd->RalinkCounters.OneSecReceivedByteCount > (pAd->RalinkCounters.OneSecTransmittedByteCount * 5))) ++ { ++ tmpTxRate = DownRateIdx; ++ DBGPRINT_RAW(RT_DEBUG_TRACE,("DRS: Rx(%d) is 5 times larger than Tx(%d), use low rate (curr=%d, tmp=%d)\n", ++ pAd->RalinkCounters.OneSecReceivedByteCount, pAd->RalinkCounters.OneSecTransmittedByteCount, pEntry->CurrTxRateIndex, tmpTxRate)); ++ } ++ else ++ { ++ tmpTxRate = pEntry->CurrTxRateIndex; ++ } + +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; ++ pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(tmpTxRate+1)*5]; ++ } ++#endif // RT2870 // + if (bTxRateChanged && pNextTxRate) + { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } ++ // reset all OneSecTx counters ++ RESET_ONE_SEC_TX_CNT(pEntry); + } + } + +@@ -2502,12 +2297,7 @@ VOID StaQuickResponeForRateUpExec( + UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; + ULONG TxTotalCnt; + ULONG TxErrorRatio = 0; +-#ifdef RT2860 +- BOOLEAN bTxRateChanged = TRUE; //, bUpgradeQuality = FALSE; +-#endif +-#ifdef RT2870 + BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE; +-#endif + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; + PUCHAR pTable; + UCHAR TableSize = 0; +@@ -2532,14 +2322,6 @@ VOID StaQuickResponeForRateUpExec( + if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) + continue; + +-#ifdef RT2860 +- //Rssi = RTMPMaxRssi(pAd, (CHAR)pAd->StaCfg.AvgRssi0, (CHAR)pAd->StaCfg.AvgRssi1, (CHAR)pAd->StaCfg.AvgRssi2); +- if (pAd->Antenna.field.TxPath > 1) +- Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1; +- else +- Rssi = pAd->StaCfg.RssiSample.AvgRssi0; +-#endif +-#ifdef RT2870 + if (INFRA_ON(pAd) && (i == 1)) + Rssi = RTMPMaxRssi(pAd, + pAd->StaCfg.RssiSample.AvgRssi0, +@@ -2550,7 +2332,6 @@ VOID StaQuickResponeForRateUpExec( + pEntry->RssiSample.AvgRssi0, + pEntry->RssiSample.AvgRssi1, + pEntry->RssiSample.AvgRssi2); +-#endif + + CurrRateIdx = pAd->CommonCfg.TxRateIndex; + +@@ -2690,9 +2471,7 @@ VOID StaQuickResponeForRateUpExec( + pAd->DrsCounters.TxRateUpPenalty = 0; + NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); + NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +-#ifdef RT2870 + bTxRateChanged = TRUE; +-#endif + } + // if rate-down happen, only clear DownRate's bad history + else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx) +@@ -2702,9 +2481,7 @@ VOID StaQuickResponeForRateUpExec( + pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty + pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = 0; + pAd->DrsCounters.PER[pAd->CommonCfg.TxRateIndex] = 0; +-#ifdef RT2870 + bTxRateChanged = TRUE; +-#endif + } + else + { +@@ -2750,34 +2527,21 @@ VOID MlmeCheckPsmChange( + // 3. but current psm is not in PWR_SAVE + // 4. CNTL state machine is not doing SCANning + // 5. no TX SUCCESS event for the past 1-sec period +-#ifdef NDIS51_MINIPORT +- if (pAd->StaCfg.WindowsPowerProfile == NdisPowerProfileBattery) +- PowerMode = pAd->StaCfg.WindowsBatteryPowerMode; +- else +-#endif + PowerMode = pAd->StaCfg.WindowsPowerMode; + + if (INFRA_ON(pAd) && + (PowerMode != Ndis802_11PowerModeCAM) && + (pAd->StaCfg.Psm == PWR_ACTIVE) && +-#ifdef RT2860 +- RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) +-#else +- (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) +-#endif ++// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)&& ++ RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP) ++ /*&& ++ (pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && ++ (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)*/) + { +- // add by johnli, use Rx OK data count per second to calculate throughput +- // If Ttraffic is too high ( > 400 Rx per second), don't go to sleep mode. If tx rate is low, use low criteria +- // Mode=CCK/MCS=3 => 11 Mbps, Mode=OFDM/MCS=3 => 18 Mbps +- if (((pAd->StaCfg.HTPhyMode.field.MCS <= 3) && +- (pAd->RalinkCounters.OneSecRxOkDataCnt < (ULONG)100)) || +- ((pAd->StaCfg.HTPhyMode.field.MCS > 3) && +- (pAd->RalinkCounters.OneSecRxOkDataCnt < (ULONG)400))) +- { +- // Get this time + NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime); + pAd->RalinkCounters.RxCountSinceLastNULL = 0; +- MlmeSetPsmBit(pAd, PWR_SAVE); ++ RTMP_SET_PSM_BIT(pAd, PWR_SAVE); + if (!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) + { + RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +@@ -2787,7 +2551,6 @@ VOID MlmeCheckPsmChange( + RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); + } + } +- } + } + + // IRQL = PASSIVE_LEVEL +@@ -2806,6 +2569,118 @@ VOID MlmeSetPsmBit( + DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetPsmBit = %d\n", psm)); + } + ++/* ++ ========================================================================== ++ Description: ++ This routine calculates TxPER, RxPER of the past N-sec period. And ++ according to the calculation result, ChannelQuality is calculated here ++ to decide if current AP is still doing the job. ++ ++ If ChannelQuality is not good, a ROAMing attempt may be tried later. ++ Output: ++ StaCfg.ChannelQuality - 0..100 ++ ++ IRQL = DISPATCH_LEVEL ++ ++ NOTE: This routine decide channle quality based on RX CRC error ratio. ++ Caller should make sure a function call to NICUpdateRawCounters(pAd) ++ is performed right before this routine, so that this routine can decide ++ channel quality based on the most up-to-date information ++ ========================================================================== ++ */ ++VOID MlmeCalculateChannelQuality( ++ IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, ++ IN ULONG Now32) ++{ ++ ULONG TxOkCnt, TxCnt, TxPER, TxPRR; ++ ULONG RxCnt, RxPER; ++ UCHAR NorRssi; ++ CHAR MaxRssi; ++ RSSI_SAMPLE *pRssiSample = NULL; ++ UINT32 OneSecTxNoRetryOkCount = 0; ++ UINT32 OneSecTxRetryOkCount = 0; ++ UINT32 OneSecTxFailCount = 0; ++ UINT32 OneSecRxOkCnt = 0; ++ UINT32 OneSecRxFcsErrCnt = 0; ++ ULONG ChannelQuality = 0; // 0..100, Channel Quality Indication for Roaming ++ ULONG BeaconLostTime = pAd->StaCfg.BeaconLostTime; ++ ++ ++ if (pAd->OpMode == OPMODE_STA) ++ { ++ pRssiSample = &pAd->StaCfg.RssiSample; ++ OneSecTxNoRetryOkCount = pAd->RalinkCounters.OneSecTxNoRetryOkCount; ++ OneSecTxRetryOkCount = pAd->RalinkCounters.OneSecTxRetryOkCount; ++ OneSecTxFailCount = pAd->RalinkCounters.OneSecTxFailCount; ++ OneSecRxOkCnt = pAd->RalinkCounters.OneSecRxOkCnt; ++ OneSecRxFcsErrCnt = pAd->RalinkCounters.OneSecRxFcsErrCnt; ++ } ++ ++ MaxRssi = RTMPMaxRssi(pAd, pRssiSample->LastRssi0, ++ pRssiSample->LastRssi1, ++ pRssiSample->LastRssi2); ++ ++ // ++ // calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics ++ // ++ TxOkCnt = OneSecTxNoRetryOkCount + OneSecTxRetryOkCount; ++ TxCnt = TxOkCnt + OneSecTxFailCount; ++ if (TxCnt < 5) ++ { ++ TxPER = 0; ++ TxPRR = 0; ++ } ++ else ++ { ++ TxPER = (OneSecTxFailCount * 100) / TxCnt; ++ TxPRR = ((TxCnt - OneSecTxNoRetryOkCount) * 100) / TxCnt; ++ } ++ ++ // ++ // calculate RX PER - don't take RxPER into consideration if too few sample ++ // ++ RxCnt = OneSecRxOkCnt + OneSecRxFcsErrCnt; ++ if (RxCnt < 5) ++ RxPER = 0; ++ else ++ RxPER = (OneSecRxFcsErrCnt * 100) / RxCnt; ++ ++ // ++ // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER ++ // ++ if ((pAd->OpMode == OPMODE_STA) && ++ INFRA_ON(pAd) && ++ (OneSecTxNoRetryOkCount < 2) && // no heavy traffic ++ ((pAd->StaCfg.LastBeaconRxTime + BeaconLostTime) < Now32)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", BeaconLostTime, TxOkCnt)); ++ ChannelQuality = 0; ++ } ++ else ++ { ++ // Normalize Rssi ++ if (MaxRssi > -40) ++ NorRssi = 100; ++ else if (MaxRssi < -90) ++ NorRssi = 0; ++ else ++ NorRssi = (MaxRssi + 90) * 2; ++ ++ // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) ++ ChannelQuality = (RSSI_WEIGHTING * NorRssi + ++ TX_WEIGHTING * (100 - TxPRR) + ++ RX_WEIGHTING* (100 - RxPER)) / 100; ++ } ++ ++ ++ if (pAd->OpMode == OPMODE_STA) ++ pAd->Mlme.ChannelQuality = (ChannelQuality > 100) ? 100 : ChannelQuality; ++ ++ ++} ++ ++ + // IRQL = DISPATCH_LEVEL + VOID MlmeSetTxPreamble( + IN PRTMP_ADAPTER pAd, +@@ -2968,23 +2843,29 @@ VOID MlmeUpdateTxRates( + // specified; otherwise disabled + if (num <= 1) + { ++ //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); ++ //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; + *auto_rate_cur_p = FALSE; + } + else + { ++ //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); ++ //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; + *auto_rate_cur_p = TRUE; + } + +-#if 1 + if (HtMcs != MCS_AUTO) + { ++ //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); ++ //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; + *auto_rate_cur_p = FALSE; + } + else + { ++ //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); ++ //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; + *auto_rate_cur_p = TRUE; + } +-#endif + + if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) + { +@@ -3050,6 +2931,9 @@ VOID MlmeUpdateTxRates( + + RTMP_IO_WRITE32(pAd, LEGACY_BASIC_RATE, BasicRateBitmap); + ++ // bug fix ++ // pAd->CommonCfg.BasicRateBitmap = BasicRateBitmap; ++ + // calculate the exptected ACK rate for each TX rate. This info is used to caculate + // the DURATION field of outgoing uniicast DATA/MGMT frame + for (i=0; iCommonCfg.MaxTxRate = MaxDesire; + + pAd->CommonCfg.MinTxRate = MinSupport; ++ // 2003-07-31 john - 2500 doesn't have good sensitivity at high OFDM rates. to increase the success ++ // ratio of initial DHCP packet exchange, TX rate starts from a lower rate depending ++ // on average RSSI ++ // 1. RSSI >= -70db, start at 54 Mbps (short distance) ++ // 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) ++ // 3. -75 > RSSI, start at 11 Mbps (long distance) ++ //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)/* && ++ // OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)*/) + if (*auto_rate_cur_p) + { + short dbm = 0; +@@ -3134,7 +3026,12 @@ VOID MlmeUpdateTxRates( + pAd->CommonCfg.MlmeRate = RATE_1; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; + pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; ++ ++//#ifdef WIFI_TEST + pAd->CommonCfg.RtsRate = RATE_11; ++//#else ++// pAd->CommonCfg.RtsRate = RATE_1; ++//#endif + break; + case PHY_11G: + case PHY_11A: +@@ -3151,23 +3048,23 @@ VOID MlmeUpdateTxRates( + case PHY_11ABG_MIXED: + case PHY_11ABGN_MIXED: + if (pAd->CommonCfg.Channel <= 14) +- { ++ { + pAd->CommonCfg.MlmeRate = RATE_1; + pAd->CommonCfg.RtsRate = RATE_1; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; + pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; +- } ++ } + else +- { ++ { + pAd->CommonCfg.MlmeRate = RATE_6; + pAd->CommonCfg.RtsRate = RATE_6; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } ++ } + break; + default: // error + pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; + pAd->CommonCfg.RtsRate = RATE_1; + break; +@@ -3198,19 +3095,19 @@ VOID MlmeUpdateTxRates( + This function update HT Rate setting. + Input Wcid value is valid for 2 case : + 1. it's used for Station in infra mode that copy AP rate to Mactable. +- 2. OR Station in adhoc mode to copy peer's HT rate to Mactable. ++ 2. OR Station in adhoc mode to copy peer's HT rate to Mactable. + +- IRQL = DISPATCH_LEVEL ++ IRQL = DISPATCH_LEVEL + + ========================================================================== + */ + VOID MlmeUpdateHtTxRates( +- IN PRTMP_ADAPTER pAd, ++ IN PRTMP_ADAPTER pAd, + IN UCHAR apidx) + { + UCHAR StbcMcs; //j, StbcMcs, bitmask; +- CHAR i; // 3*3 +- RT_HT_CAPABILITY *pRtHtCap = NULL; ++ CHAR i; // 3*3 ++ RT_HT_CAPABILITY *pRtHtCap = NULL; + RT_HT_PHY_INFO *pActiveHtPhy = NULL; + ULONG BasicMCS; + UCHAR j, bitmask; +@@ -3218,7 +3115,7 @@ VOID MlmeUpdateHtTxRates( + PHTTRANSMIT_SETTING pHtPhy = NULL; + PHTTRANSMIT_SETTING pMaxHtPhy = NULL; + PHTTRANSMIT_SETTING pMinHtPhy = NULL; +- BOOLEAN *auto_rate_cur_p; ++ BOOLEAN *auto_rate_cur_p; + + DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates===> \n")); + +@@ -3227,7 +3124,7 @@ VOID MlmeUpdateHtTxRates( + { + pDesireHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; + pActiveHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; +- pHtPhy = &pAd->StaCfg.HTPhyMode; ++ pHtPhy = &pAd->StaCfg.HTPhyMode; + pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; + pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; + +@@ -3278,16 +3175,21 @@ VOID MlmeUpdateHtTxRates( + else + pMaxHtPhy->field.ShortGI = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 & pRtHtCap->ShortGIfor40); + ++ if (pDesireHtPhy->MCSSet[4] != 0) ++ { ++ pMaxHtPhy->field.MCS = 32; ++ } ++ + for (i=23; i>=0; i--) // 3*3 + { + j = i/8; + bitmask = (1<<(i-(j*8))); + + if ((pActiveHtPhy->MCSSet[j] & bitmask) && (pDesireHtPhy->MCSSet[j] & bitmask)) +- { ++ { + pMaxHtPhy->field.MCS = i; + break; +- } ++ } + + if (i==0) + break; +@@ -3302,26 +3204,27 @@ VOID MlmeUpdateHtTxRates( + if ( (pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff)) + { + if (pDesireHtPhy->MCSSet[4] != 0) +- { ++ { + pMaxHtPhy->field.MCS = 32; + pMinHtPhy->field.MCS = 32; + DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n",pMinHtPhy->field.MCS)); +- } ++ } + + for (i=23; (CHAR)i >= 0; i--) // 3*3 +- { ++ { + j = i/8; + bitmask = (1<<(i-(j*8))); + if ( (pDesireHtPhy->MCSSet[j] & bitmask) && (pActiveHtPhy->MCSSet[j] & bitmask)) +- { ++ { + pMaxHtPhy->field.MCS = i; + pMinHtPhy->field.MCS = i; + break; +- } ++ } + if (i==0) + break; +- } + } ++ } ++ + + // Decide ht rate + pHtPhy->field.STBC = pMaxHtPhy->field.STBC; +@@ -3342,18 +3245,40 @@ VOID MlmeUpdateHtTxRates( + DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== \n")); + } + ++ ++VOID BATableInit( ++ IN PRTMP_ADAPTER pAd, ++ IN BA_TABLE *Tab) ++{ ++ int i; ++ ++ Tab->numAsOriginator = 0; ++ Tab->numAsRecipient = 0; ++ Tab->numDoneOriginator = 0; ++ NdisAllocateSpinLock(&pAd->BATabLock); ++ for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) ++ { ++ Tab->BARecEntry[i].REC_BA_Status = Recipient_NONE; ++ NdisAllocateSpinLock(&(Tab->BARecEntry[i].RxReRingLock)); ++ } ++ for (i = 0; i < MAX_LEN_OF_BA_ORI_TABLE; i++) ++ { ++ Tab->BAOriEntry[i].ORI_BA_Status = Originator_NONE; ++ } ++} ++ + // IRQL = DISPATCH_LEVEL + VOID MlmeRadioOff( + IN PRTMP_ADAPTER pAd) + { +- RT28XX_MLME_RADIO_OFF(pAd); ++ RTMP_MLME_RADIO_OFF(pAd); + } + + // IRQL = DISPATCH_LEVEL + VOID MlmeRadioOn( + IN PRTMP_ADAPTER pAd) + { +- RT28XX_MLME_RADIO_ON(pAd); ++ RTMP_MLME_RADIO_ON(pAd); + } + + // =========================================================================================== +@@ -3379,31 +3304,12 @@ VOID BssTableInit( + Tab->BssNr = 0; + Tab->BssOverlapNr = 0; + for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) +- { ++ { + NdisZeroMemory(&Tab->BssEntry[i], sizeof(BSS_ENTRY)); + Tab->BssEntry[i].Rssi = -127; // initial the rssi as a minimum value + } + } + +-VOID BATableInit( +- IN PRTMP_ADAPTER pAd, +- IN BA_TABLE *Tab) +-{ +- int i; +- +- Tab->numAsOriginator = 0; +- Tab->numAsRecipient = 0; +- NdisAllocateSpinLock(&pAd->BATabLock); +- for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { +- Tab->BARecEntry[i].REC_BA_Status = Recipient_NONE; +- NdisAllocateSpinLock(&(Tab->BARecEntry[i].RxReRingLock)); +- } +- for (i = 0; i < MAX_LEN_OF_BA_ORI_TABLE; i++) +- { +- Tab->BAOriEntry[i].ORI_BA_Status = Originator_NONE; +- } +-} + + /*! \brief search the BSS table by SSID + * \param p_tab pointer to the bss table +@@ -3489,6 +3395,25 @@ ULONG BssTableSearchWithSSID( + return (ULONG)BSS_NOT_FOUND; + } + ++ ++ULONG BssSsidTableSearchBySSID( ++ IN BSS_TABLE *Tab, ++ IN PUCHAR pSsid, ++ IN UCHAR SsidLen) ++{ ++ UCHAR i; ++ ++ for (i = 0; i < Tab->BssNr; i++) ++ { ++ if (SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen)) ++ { ++ return i; ++ } ++ } ++ return (ULONG)BSS_NOT_FOUND; ++} ++ ++ + // IRQL = DISPATCH_LEVEL + VOID BssTableDeleteEntry( + IN OUT BSS_TABLE *Tab, +@@ -3555,7 +3480,7 @@ VOID BATableDeleteORIEntry( + + */ + VOID BssEntrySet( +- IN PRTMP_ADAPTER pAd, ++ IN PRTMP_ADAPTER pAd, + OUT BSS_ENTRY *pBss, + IN PUCHAR pBssid, + IN CHAR Ssid[], +@@ -3632,8 +3557,6 @@ VOID BssEntrySet( + pBss->SupRateLen = SupRateLen; + ASSERT(ExtRateLen <= MAX_LEN_OF_SUPPORTED_RATES); + NdisMoveMemory(pBss->ExtRate, ExtRate, ExtRateLen); +- NdisMoveMemory(&pBss->HtCapability, pHtCapability, HtCapabilityLen); +- NdisMoveMemory(&pBss->AddHtInfo, pAddHtInfo, AddHtInfoLen); + pBss->NewExtChanOffset = NewExtChanOffset; + pBss->ExtRateLen = ExtRateLen; + pBss->Channel = Channel; +@@ -3660,7 +3583,6 @@ VOID BssEntrySet( + + pBss->AddHtInfoLen = 0; + pBss->HtCapabilityLen = 0; +- + if (HtCapabilityLen> 0) + { + pBss->HtCapabilityLen = HtCapabilityLen; +@@ -3670,13 +3592,13 @@ VOID BssEntrySet( + pBss->AddHtInfoLen = AddHtInfoLen; + NdisMoveMemory(&pBss->AddHtInfo, pAddHtInfo, AddHtInfoLen); + +- if ((pAddHtInfo->ControlChan > 2)&& (pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) +- { +- pBss->CentralChannel = pAddHtInfo->ControlChan - 2; +- } +- else if ((pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) ++ if ((pAddHtInfo->ControlChan > 2)&& (pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) + { +- pBss->CentralChannel = pAddHtInfo->ControlChan + 2; ++ pBss->CentralChannel = pAddHtInfo->ControlChan - 2; ++ } ++ else if ((pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) ++ { ++ pBss->CentralChannel = pAddHtInfo->ControlChan + 2; + } + } + } +@@ -3704,38 +3626,36 @@ VOID BssEntrySet( + + NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN); + NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN); +- + pEid = (PEID_STRUCT) pVIE; +- + while ((Length + 2 + (USHORT)pEid->Len) <= LengthVIE) +- { ++ { + switch(pEid->Eid) +- { ++ { + case IE_WPA: + if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- { ++ { + if ((pEid->Len + 2) > MAX_CUSTOM_LEN) +- { ++ { + pBss->WpaIE.IELen = 0; + break; +- } ++ } + pBss->WpaIE.IELen = pEid->Len + 2; + NdisMoveMemory(pBss->WpaIE.IE, pEid, pBss->WpaIE.IELen); +- } +- break; ++ } ++ break; + case IE_RSN: + if (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) + { + if ((pEid->Len + 2) > MAX_CUSTOM_LEN) + { + pBss->RsnIE.IELen = 0; +- break; +- } ++ break; ++ } + pBss->RsnIE.IELen = pEid->Len + 2; + NdisMoveMemory(pBss->RsnIE.IE, pEid, pBss->RsnIE.IELen); +- } ++ } + break; +- } ++ } + Length = Length + 2 + (USHORT)pEid->Len; // Eid[1] + Len[1]+ content[Len] + pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); + } +@@ -3766,7 +3686,7 @@ VOID BssEntrySet( + + */ + ULONG BssTableSetEntry( +- IN PRTMP_ADAPTER pAd, ++ IN PRTMP_ADAPTER pAd, + OUT BSS_TABLE *Tab, + IN PUCHAR pBssid, + IN CHAR Ssid[], +@@ -3797,7 +3717,7 @@ ULONG BssTableSetEntry( + { + ULONG Idx; + +- Idx = BssTableSearchWithSSID(Tab, pBssid, Ssid, SsidLen, ChannelNo); ++ Idx = BssTableSearchWithSSID(Tab, pBssid, (UCHAR *)Ssid, SsidLen, ChannelNo); + if (Idx == BSS_NOT_FOUND) + { + if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) +@@ -3808,10 +3728,10 @@ ULONG BssTableSetEntry( + // In this case, if we found the desired AP then overwrite BSS Table. + // + if(!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { ++ { + if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, pBssid) || + SSID_EQUAL(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Ssid, SsidLen)) +- { ++ { + Idx = Tab->BssOverlapNr; + BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, + CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +@@ -3819,11 +3739,11 @@ ULONG BssTableSetEntry( + Tab->BssOverlapNr = (Tab->BssOverlapNr++) % MAX_LEN_OF_BSS_TABLE; + } + return Idx; +- } ++ } + else +- { ++ { + return BSS_NOT_FOUND; +- } ++ } + } + Idx = Tab->BssNr; + BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, +@@ -3837,15 +3757,16 @@ ULONG BssTableSetEntry( + if ((SSID_EQUAL(Ssid, SsidLen, Tab->BssEntry[Idx].Ssid, Tab->BssEntry[Idx].SsidLen)) || + (NdisEqualMemory(Tab->BssEntry[Idx].Ssid, ZeroSsid, Tab->BssEntry[Idx].SsidLen))) + { +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod,CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); ++ BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod,CfParm, AtimWin, ++ CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, ++ NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); + } + } + + return Idx; + } + ++ + // IRQL = DISPATCH_LEVEL + VOID BssTableSsidSort( + IN PRTMP_ADAPTER pAd, +@@ -3865,24 +3786,33 @@ VOID BssTableSsidSort( + (pAd->MlmeAux.Channel > 14) && + RadarChannelCheck(pAd, pInBss->Channel)) + ) +- { ++{ + if (pInBss->Hidden) + bIsHiddenApIncluded = TRUE; +- } ++} + + if ((pInBss->BssType == pAd->StaCfg.BssType) && + (SSID_EQUAL(Ssid, SsidLen, pInBss->Ssid, pInBss->SsidLen) || bIsHiddenApIncluded)) + { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + ++ ++ + // 2.4G/5G N only mode + if ((pInBss->HtCapabilityLen == 0) && + ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) + { + DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; +- } +- ++ } ++#ifdef RT2860 ++ if ((pAd->CommonCfg.PhyMode == PHY_11GN_MIXED) && ++ ((pInBss->SupRateLen + pInBss->ExtRateLen) < 12)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("STA is in GN-only Mode, this AP is in B mode.\n")); ++ continue; ++ } ++#endif // RT2860 // + // New for WPA2 + // Check the Authmode first + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +@@ -3901,9 +3831,9 @@ VOID BssTableSsidSort( + continue; + + // check group cipher +- if (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP40Enabled && +- pInBss->WPA.GroupCipher != Ndis802_11GroupWEP104Enabled && +- pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) ++ if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && ++ (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP40Enabled) && ++ (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP104Enabled)) + continue; + + // check pairwise cipher, skip if none matched +@@ -3922,9 +3852,9 @@ VOID BssTableSsidSort( + continue; + + // check group cipher +- if (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP40Enabled && +- pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP104Enabled && +- pAd->StaCfg.WepStatus < pInBss->WPA2.GroupCipher) ++ if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && ++ (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP40Enabled) && ++ (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP104Enabled)) + continue; + + // check pairwise cipher, skip if none matched +@@ -3943,7 +3873,7 @@ VOID BssTableSsidSort( + DBGPRINT(RT_DEBUG_TRACE,("StaCfg.WepStatus=%d, while pInBss->WepStatus=%d\n", pAd->StaCfg.WepStatus, pInBss->WepStatus)); + // + // For the SESv2 case, we will not qualify WepStatus. +- // ++ // + if (!pInBss->bSES) + continue; + } +@@ -3958,9 +3888,9 @@ VOID BssTableSsidSort( + // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, + if ((pInBss->CentralChannel != pInBss->Channel) && + (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { ++ { + if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) +- { ++ { + pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; + SetCommonHT(pAd); + pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +@@ -3971,8 +3901,8 @@ VOID BssTableSsidSort( + { + SetCommonHT(pAd); + } +- } +- } ++ } ++ } + + // copy matching BSS from InTab to OutTab + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); +@@ -3980,17 +3910,25 @@ VOID BssTableSsidSort( + OutTab->BssNr++; + } + else if ((pInBss->BssType == pAd->StaCfg.BssType) && (SsidLen == 0)) +- { ++ { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + ++ + // 2.4G/5G N only mode + if ((pInBss->HtCapabilityLen == 0) && + ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) +- { ++ { + DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +- ++#ifdef RT2860 ++ if ((pAd->CommonCfg.PhyMode == PHY_11GN_MIXED) && ++ ((pInBss->SupRateLen + pInBss->ExtRateLen) < 12)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("STA is in GN-only Mode, this AP is in B mode.\n")); ++ continue; ++ } ++#endif // RT2860 // + // New for WPA2 + // Check the Authmode first + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +@@ -4049,14 +3987,14 @@ VOID BssTableSsidSort( + // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, + if ((pInBss->CentralChannel != pInBss->Channel) && + (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { ++ { + if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) + { + pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; + SetCommonHT(pAd); + pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; + } +- } ++ } + + // copy matching BSS from InTab to OutTab + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); +@@ -4065,8 +4003,8 @@ VOID BssTableSsidSort( + } + + if (OutTab->BssNr >= MAX_LEN_OF_BSS_TABLE) +- break; +- } ++ break; ++ } + + BssTableSortByRssi(OutTab); + } +@@ -4076,27 +4014,28 @@ VOID BssTableSsidSort( + VOID BssTableSortByRssi( + IN OUT BSS_TABLE *OutTab) + { +- INT i, j; ++ INT i, j; + BSS_ENTRY TmpBss; + + for (i = 0; i < OutTab->BssNr - 1; i++) +- { ++ { + for (j = i+1; j < OutTab->BssNr; j++) +- { ++ { + if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi) +- { ++ { + NdisMoveMemory(&TmpBss, &OutTab->BssEntry[j], sizeof(BSS_ENTRY)); + NdisMoveMemory(&OutTab->BssEntry[j], &OutTab->BssEntry[i], sizeof(BSS_ENTRY)); + NdisMoveMemory(&OutTab->BssEntry[i], &TmpBss, sizeof(BSS_ENTRY)); +- } +- } +- } ++ } ++ } ++ } + } + ++ + VOID BssCipherParse( + IN OUT PBSS_ENTRY pBss) + { +- PEID_STRUCT pEid; ++ PEID_STRUCT pEid; + PUCHAR pTmp; + PRSN_IE_HEADER_STRUCT pRsnHeader; + PCIPHER_SUITE_STRUCT pCipher; +@@ -4109,13 +4048,13 @@ VOID BssCipherParse( + // WepStatus will be reset later, if AP announce TKIP or AES on the beacon frame. + // + if (pBss->Privacy) +- { +- pBss->WepStatus = Ndis802_11WEPEnabled; +- } +- else +- { +- pBss->WepStatus = Ndis802_11WEPDisabled; +- } ++ { ++ pBss->WepStatus = Ndis802_11WEPEnabled; ++ } ++ else ++ { ++ pBss->WepStatus = Ndis802_11WEPDisabled; ++ } + // Set default to disable & open authentication before parsing variable IE + pBss->AuthMode = Ndis802_11AuthModeOpen; + pBss->AuthModeAux = Ndis802_11AuthModeOpen; +@@ -4132,58 +4071,29 @@ VOID BssCipherParse( + pBss->WPA2.PairCipherAux = Ndis802_11WEPDisabled; + pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled; + pBss->WPA2.RsnCapability = 0; +- pBss->WPA2.bMixMode = FALSE; ++ pBss->WPA2.bMixMode = FALSE; + + + Length = (INT) pBss->VarIELen; + + while (Length > 0) +- { ++ { + // Parse cipher suite base on WPA1 & WPA2, they should be parsed differently + pTmp = ((PUCHAR) pBss->VarIEs) + pBss->VarIELen - Length; + pEid = (PEID_STRUCT) pTmp; + switch (pEid->Eid) +- { ++ { + case IE_WPA: +- //Parse Cisco IE_WPA (LEAP, CCKM, etc.) +- if ( NdisEqualMemory((pTmp+8), CISCO_OUI, 3)) +- { +- pTmp += 11; +- switch (*pTmp) +- { +- case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway +- pBss->WepStatus = Ndis802_11Encryption1Enabled; +- pBss->WPA.PairCipher = Ndis802_11Encryption1Enabled; +- pBss->WPA.GroupCipher = Ndis802_11Encryption1Enabled; +- break; +- case 2: +- pBss->WepStatus = Ndis802_11Encryption2Enabled; +- pBss->WPA.PairCipher = Ndis802_11Encryption1Enabled; +- pBss->WPA.GroupCipher = Ndis802_11Encryption1Enabled; +- break; +- case 4: +- pBss->WepStatus = Ndis802_11Encryption3Enabled; +- pBss->WPA.PairCipher = Ndis802_11Encryption1Enabled; +- pBss->WPA.GroupCipher = Ndis802_11Encryption1Enabled; +- break; +- default: +- break; +- } +- +- // if Cisco IE_WPA, break +- break; +- } +- else if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) && (pEid->Len == 7)) +- { ++ if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) && (pEid->Len == 7)) ++ { + pBss->bSES = TRUE; + break; +- } ++ } + else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4) != 1) +- { ++ { + // if unsupported vendor specific IE + break; +- } ++ } + // Skip OUI, version, and multicast suite + // This part should be improved in the future when AP supported multiple cipher suite. + // For now, it's OK since almost all APs have fixed cipher suite supported. +@@ -4200,7 +4110,7 @@ VOID BssCipherParse( + // 5 WEP-104 + // Parse group cipher + switch (*pTmp) +- { ++ { + case 1: + pBss->WPA.GroupCipher = Ndis802_11GroupWEP40Enabled; + break; +@@ -4226,12 +4136,12 @@ VOID BssCipherParse( + + // Parsing all unicast cipher suite + while (Count > 0) +- { ++ { + // Skip OUI + pTmp += 3; + TmpCipher = Ndis802_11WEPDisabled; + switch (*pTmp) +- { ++ { + case 1: + case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway + TmpCipher = Ndis802_11Encryption1Enabled; +@@ -4244,20 +4154,20 @@ VOID BssCipherParse( + break; + default: + break; +- } ++ } + if (TmpCipher > pBss->WPA.PairCipher) +- { ++ { + // Move the lower cipher suite to PairCipherAux + pBss->WPA.PairCipherAux = pBss->WPA.PairCipher; + pBss->WPA.PairCipher = TmpCipher; +- } ++ } + else +- { ++ { + pBss->WPA.PairCipherAux = TmpCipher; +- } ++ } + pTmp++; + Count--; +- } ++ } + + // 4. get AKM suite counts + //Count = *(PUSHORT) pTmp; +@@ -4266,36 +4176,37 @@ VOID BssCipherParse( + pTmp += 3; + + switch (*pTmp) +- { ++ { + case 1: +- // Set AP support WPA mode ++ // Set AP support WPA-enterprise mode + if (pBss->AuthMode == Ndis802_11AuthModeOpen) + pBss->AuthMode = Ndis802_11AuthModeWPA; +- else ++ else + pBss->AuthModeAux = Ndis802_11AuthModeWPA; + break; + case 2: +- // Set AP support WPA mode ++ // Set AP support WPA-PSK mode + if (pBss->AuthMode == Ndis802_11AuthModeOpen) + pBss->AuthMode = Ndis802_11AuthModeWPAPSK; +- else ++ else + pBss->AuthModeAux = Ndis802_11AuthModeWPAPSK; + break; + default: + break; +- } ++ } + pTmp += 1; + + // Fixed for WPA-None + if (pBss->BssType == BSS_ADHOC) +- { ++ { + pBss->AuthMode = Ndis802_11AuthModeWPANone; + pBss->AuthModeAux = Ndis802_11AuthModeWPANone; + pBss->WepStatus = pBss->WPA.GroupCipher; ++ // Patched bugs for old driver + if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) + pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } +- else ++ } ++ else + pBss->WepStatus = pBss->WPA.PairCipher; + + // Check the Pair & Group, if different, turn on mixed mode flag +@@ -4315,7 +4226,7 @@ VOID BssCipherParse( + // 1. Check group cipher + pCipher = (PCIPHER_SUITE_STRUCT) pTmp; + if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; ++ break; + + // Parse group cipher + switch (pCipher->Type) +@@ -4346,12 +4257,12 @@ VOID BssCipherParse( + // 3. Get pairwise cipher + // Parsing all unicast cipher suite + while (Count > 0) +- { ++ { + // Skip OUI + pCipher = (PCIPHER_SUITE_STRUCT) pTmp; + TmpCipher = Ndis802_11WEPDisabled; + switch (pCipher->Type) +- { ++ { + case 1: + case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway + TmpCipher = Ndis802_11Encryption1Enabled; +@@ -4364,20 +4275,20 @@ VOID BssCipherParse( + break; + default: + break; +- } ++ } + if (TmpCipher > pBss->WPA2.PairCipher) +- { ++ { + // Move the lower cipher suite to PairCipherAux + pBss->WPA2.PairCipherAux = pBss->WPA2.PairCipher; + pBss->WPA2.PairCipher = TmpCipher; +- } ++ } + else +- { ++ { + pBss->WPA2.PairCipherAux = TmpCipher; +- } ++ } + pTmp += sizeof(CIPHER_SUITE_STRUCT); + Count--; +- } ++ } + + // 4. get AKM suite counts + //Count = *(PUSHORT) pTmp; +@@ -4385,30 +4296,39 @@ VOID BssCipherParse( + pTmp += sizeof(USHORT); + + // 5. Get AKM ciphers +- pAKM = (PAKM_SUITE_STRUCT) pTmp; +- if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; ++ // Parsing all AKM ciphers ++ while (Count > 0) ++ { ++ pAKM = (PAKM_SUITE_STRUCT) pTmp; ++ if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) ++ break; + +- switch (pAKM->Type) ++ switch (pAKM->Type) + { +- case 1: +- // Set AP support WPA mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2; +- break; +- case 2: +- // Set AP support WPA mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2PSK; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2PSK; +- break; +- default: +- break; ++ case 1: ++ // Set AP support WPA-enterprise mode ++ if (pBss->AuthMode == Ndis802_11AuthModeOpen) ++ pBss->AuthMode = Ndis802_11AuthModeWPA2; ++ else ++ pBss->AuthModeAux = Ndis802_11AuthModeWPA2; ++ break; ++ case 2: ++ // Set AP support WPA-PSK mode ++ if (pBss->AuthMode == Ndis802_11AuthModeOpen) ++ pBss->AuthMode = Ndis802_11AuthModeWPA2PSK; ++ else ++ pBss->AuthModeAux = Ndis802_11AuthModeWPA2PSK; ++ break; ++ default: ++ if (pBss->AuthMode == Ndis802_11AuthModeOpen) ++ pBss->AuthMode = Ndis802_11AuthModeMax; ++ else ++ pBss->AuthModeAux = Ndis802_11AuthModeMax; ++ break; + } +- pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); ++ pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); ++ Count--; ++ } + + // Fixed for WPA-None + if (pBss->BssType == BSS_ADHOC) +@@ -4417,10 +4337,11 @@ VOID BssCipherParse( + pBss->AuthModeAux = Ndis802_11AuthModeWPANone; + pBss->WPA.PairCipherAux = pBss->WPA2.PairCipherAux; + pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher; +- pBss->WepStatus = pBss->WPA.GroupCipher; ++ pBss->WepStatus = pBss->WPA.GroupCipher; ++ // Patched bugs for old driver + if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) + pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } ++ } + pBss->WepStatus = pBss->WPA2.PairCipher; + + // 6. Get RSN capability +@@ -4475,8 +4396,8 @@ VOID MacAddrRandomBssid( + * \post + * \note this function initializes the following field + +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL + + */ + VOID MgtMacHeaderInit( +@@ -4491,11 +4412,11 @@ VOID MgtMacHeaderInit( + + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SubType; ++// if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type ++// pHdr80211->FC.Type = BTYPE_CNTL; + pHdr80211->FC.ToDs = ToDs; + COPY_MAC_ADDR(pHdr80211->Addr1, pDA); +- +- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); +- ++ COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); + } + +@@ -4518,15 +4439,15 @@ VOID MgtMacHeaderInit( + * MakeOutgoingFrame(Buffer, output_length, 2, &fc, 2, &dur, 6, p_addr1, 6,p_addr2, END_OF_ARGS); + + IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL ++ IRQL = DISPATCH_LEVEL + + ****************************************************************************/ + ULONG MakeOutgoingFrame( +- OUT CHAR *Buffer, ++ OUT UCHAR *Buffer, + OUT ULONG *FrameLen, ...) + { +- CHAR *p; +- int leng; ++ UCHAR *p; ++ int leng; + ULONG TotLeng; + va_list Args; + +@@ -4539,7 +4460,7 @@ ULONG MakeOutgoingFrame( + if (leng == END_OF_ARGS) + { + break; +- } ++ } + p = va_arg(Args, PVOID); + NdisMoveMemory(&Buffer[TotLeng], p, leng); + TotLeng = TotLeng + leng; +@@ -4596,12 +4517,12 @@ NDIS_STATUS MlmeQueueInit( + * \post + * \note The message has to be initialized + +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL + + */ + BOOLEAN MlmeEnqueue( +- IN PRTMP_ADAPTER pAd, ++ IN PRTMP_ADAPTER pAd, + IN ULONG Machine, + IN ULONG MsgType, + IN ULONG MsgLen, +@@ -4617,24 +4538,24 @@ BOOLEAN MlmeEnqueue( + + // First check the size, it MUST not exceed the mlme queue size + if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { ++ { + DBGPRINT_ERR(("MlmeEnqueue: msg too large, size = %ld \n", MsgLen)); + return FALSE; + } + + if (MlmeQueueFull(Queue)) +- { ++ { + return FALSE; +- } ++ } + + NdisAcquireSpinLock(&(Queue->Lock)); + Tail = Queue->Tail; + Queue->Tail++; + Queue->Num++; + if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { ++ { + Queue->Tail = 0; +- } ++ } + + Queue->Entry[Tail].Wcid = RESERVED_WCID; + Queue->Entry[Tail].Occupied = TRUE; +@@ -4643,9 +4564,9 @@ BOOLEAN MlmeEnqueue( + Queue->Entry[Tail].MsgLen = MsgLen; + + if (Msg != NULL) +- { ++ { + NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); +- } ++ } + + NdisReleaseSpinLock(&(Queue->Lock)); + return TRUE; +@@ -4656,7 +4577,7 @@ BOOLEAN MlmeEnqueue( + * \param TimeStampHigh The upper 32 bit of timestamp + * \param TimeStampLow The lower 32 bit of timestamp + * \param Rssi The receiving RSSI strength +- * \param MsgLen The length of the message ++ * \param MsgLen The length of the message + * \param *Msg The message pointer + * \return TRUE if everything ok, FALSE otherwise (like Queue Full) + * \pre +@@ -4677,11 +4598,12 @@ BOOLEAN MlmeEnqueueForRecv( + IN VOID *Msg, + IN UCHAR Signal) + { +- INT Tail, Machine; ++ INT Tail, Machine; + PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; + INT MsgType; + MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; + ++ + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +@@ -4698,17 +4620,17 @@ BOOLEAN MlmeEnqueueForRecv( + } + + if (MlmeQueueFull(Queue)) +- { ++ { + return FALSE; + } + +- { ++ { + if (!MsgTypeSubst(pAd, pFrame, &Machine, &MsgType)) + { + DBGPRINT_ERR(("MlmeEnqueueForRecv: un-recongnized mgmt->subtype=%d\n",pFrame->Hdr.FC.SubType)); + return FALSE; ++ } + } +- } + + // OK, we got all the informations, it is time to put things into queue + NdisAcquireSpinLock(&(Queue->Lock)); +@@ -4716,9 +4638,9 @@ BOOLEAN MlmeEnqueueForRecv( + Queue->Tail++; + Queue->Num++; + if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { ++ { + Queue->Tail = 0; +- } ++ } + Queue->Entry[Tail].Occupied = TRUE; + Queue->Entry[Tail].Machine = Machine; + Queue->Entry[Tail].MsgType = MsgType; +@@ -4740,7 +4662,7 @@ BOOLEAN MlmeEnqueueForRecv( + + NdisReleaseSpinLock(&(Queue->Lock)); + +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + + return TRUE; + } +@@ -4776,14 +4698,14 @@ BOOLEAN MlmeDequeue( + VOID MlmeRestartStateMachine( + IN PRTMP_ADAPTER pAd) + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + MLME_QUEUE_ELEM *Elem = NULL; +-#endif ++#endif // RTMP_MAC_PCI // + BOOLEAN Cancelled; + + DBGPRINT(RT_DEBUG_TRACE, ("MlmeRestartStateMachine \n")); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); + if(pAd->Mlme.bRunning) + { +@@ -4809,9 +4731,9 @@ VOID MlmeRestartStateMachine( + } + else { + DBGPRINT_ERR(("MlmeRestartStateMachine: MlmeQueue empty\n")); +- } + } +-#endif /* RT2860 */ ++ } ++#endif // RTMP_MAC_PCI // + + { + // Cancel all timer events +@@ -4822,6 +4744,7 @@ VOID MlmeRestartStateMachine( + RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); ++ + } + + // Change back to original channel in case of doing scan +@@ -4841,12 +4764,12 @@ VOID MlmeRestartStateMachine( + pAd->Mlme.ActMachine.CurrState = ACT_IDLE; + } + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + // Remove running state + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); + pAd->Mlme.bRunning = FALSE; + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +-#endif ++#endif // RTMP_MAC_PCI // + } + + /*! \brief test if the MLME Queue is empty +@@ -4871,7 +4794,7 @@ BOOLEAN MlmeQueueEmpty( + } + + /*! \brief test if the MLME Queue is full +- * \param *Queue The MLME Queue ++ * \param *Queue The MLME Queue + * \return TRUE if the Queue is empty, FALSE otherwise + * \pre + * \post +@@ -4913,6 +4836,7 @@ VOID MlmeQueueDestroy( + NdisFreeSpinLock(&(pQueue->Lock)); + } + ++ + /*! \brief To substitute the message type if the message is coming from external + * \param pFrame The frame received + * \param *Machine The state machine +@@ -4930,7 +4854,7 @@ BOOLEAN MsgTypeSubst( + OUT INT *Machine, + OUT INT *MsgType) + { +- USHORT Seq; ++ USHORT Seq, Alg; + UCHAR EAPType; + PUCHAR pData; + +@@ -4940,17 +4864,10 @@ BOOLEAN MsgTypeSubst( + // The only data type will pass to this function is EAPOL frame + if (pFrame->Hdr.FC.Type == BTYPE_DATA) + { +- if (NdisEqualMemory(SNAP_AIRONET, pData, LENGTH_802_1_H)) + { +- // Cisco Aironet SNAP header +- *Machine = AIRONET_STATE_MACHINE; +- *MsgType = MT2_AIRONET_MSG; +- return (TRUE); +- } +- { +- *Machine = WPA_PSK_STATE_MACHINE; ++ *Machine = WPA_STATE_MACHINE; + EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1); +- return(WpaMsgTypeSubst(EAPType, MsgType)); ++ return (WpaMsgTypeSubst(EAPType, (INT *) MsgType)); + } + } + +@@ -4995,18 +4912,22 @@ BOOLEAN MsgTypeSubst( + case SUBTYPE_AUTH: + // get the sequence number from payload 24 Mac Header + 2 bytes algorithm + NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); ++ NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); + if (Seq == 1 || Seq == 3) +- { ++ { + *Machine = AUTH_RSP_STATE_MACHINE; + *MsgType = MT2_PEER_AUTH_ODD; +- } ++ } + else if (Seq == 2 || Seq == 4) +- { +- *Machine = AUTH_STATE_MACHINE; +- *MsgType = MT2_PEER_AUTH_EVEN; +- } ++ { ++ if (Alg == AUTH_MODE_OPEN || Alg == AUTH_MODE_KEY) ++ { ++ *Machine = AUTH_STATE_MACHINE; ++ *MsgType = MT2_PEER_AUTH_EVEN; ++ } ++ } + else +- { ++ { + return FALSE; + } + break; +@@ -5018,13 +4939,13 @@ BOOLEAN MsgTypeSubst( + *Machine = ACTION_STATE_MACHINE; + // Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support + if ((pFrame->Octet[0]&0x7F) > MAX_PEER_CATE_MSG) +- { ++ { + *MsgType = MT2_ACT_INVALID; +- } +- else +- { ++ } ++ else ++ { + *MsgType = (pFrame->Octet[0]&0x7F); +- } ++ } + break; + default: + return FALSE; +@@ -5043,7 +4964,7 @@ BOOLEAN MsgTypeSubst( + * \param Trans State machine transition function + * \param StNr number of states + * \param MsgNr number of messages +- * \param DefFunc default function, when there is invalid state/message combination ++ * \param DefFunc default function, when there is invalid state/message combination + * \param InitState initial state of the state machine + * \param Base StateMachine base, internal use only + * \pre p_sm should be a legal pointer +@@ -5113,7 +5034,7 @@ VOID StateMachineSetAction( + + /*! \brief This function does the state transition + * \param *Adapter the NIC adapter pointer +- * \param *S the state machine ++ * \param *S the state machine + * \param *Elem the message to be executed + * \return None + +@@ -5186,9 +5107,9 @@ UCHAR RandomByte( + { + pAd->Mlme.ShiftReg = ((pAd->Mlme.ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000; + Result = 1; +- } +- else +- { ++ } ++ else ++ { + pAd->Mlme.ShiftReg = pAd->Mlme.ShiftReg >> 1; + Result = 0; + } +@@ -5198,2453 +5119,6 @@ UCHAR RandomByte( + return R; + } + +-VOID AsicUpdateAutoFallBackTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRateTable) +-{ +- UCHAR i; +- HT_FBK_CFG0_STRUC HtCfg0; +- HT_FBK_CFG1_STRUC HtCfg1; +- LG_FBK_CFG0_STRUC LgCfg0; +- LG_FBK_CFG1_STRUC LgCfg1; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; +- +- // set to initial value +- HtCfg0.word = 0x65432100; +- HtCfg1.word = 0xedcba988; +- LgCfg0.word = 0xedcba988; +- LgCfg1.word = 0x00002100; +- +- pNextTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1; +- for (i = 1; i < *((PUCHAR) pRateTable); i++) +- { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1+i; +- switch (pCurrTxRate->Mode) +- { +- case 0: //CCK +- break; +- case 1: //OFDM +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- LgCfg0.field.OFDMMCS0FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 1: +- LgCfg0.field.OFDMMCS1FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 2: +- LgCfg0.field.OFDMMCS2FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 3: +- LgCfg0.field.OFDMMCS3FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 4: +- LgCfg0.field.OFDMMCS4FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 5: +- LgCfg0.field.OFDMMCS5FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 6: +- LgCfg0.field.OFDMMCS6FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 7: +- LgCfg0.field.OFDMMCS7FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- } +- } +- break; +- case 2: //HT-MIX +- case 3: //HT-GF +- { +- if ((pNextTxRate->Mode >= MODE_HTMIX) && (pCurrTxRate->CurrMCS != pNextTxRate->CurrMCS)) +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- HtCfg0.field.HTMCS0FBK = pNextTxRate->CurrMCS; +- break; +- case 1: +- HtCfg0.field.HTMCS1FBK = pNextTxRate->CurrMCS; +- break; +- case 2: +- HtCfg0.field.HTMCS2FBK = pNextTxRate->CurrMCS; +- break; +- case 3: +- HtCfg0.field.HTMCS3FBK = pNextTxRate->CurrMCS; +- break; +- case 4: +- HtCfg0.field.HTMCS4FBK = pNextTxRate->CurrMCS; +- break; +- case 5: +- HtCfg0.field.HTMCS5FBK = pNextTxRate->CurrMCS; +- break; +- case 6: +- HtCfg0.field.HTMCS6FBK = pNextTxRate->CurrMCS; +- break; +- case 7: +- HtCfg0.field.HTMCS7FBK = pNextTxRate->CurrMCS; +- break; +- case 8: +- HtCfg1.field.HTMCS8FBK = pNextTxRate->CurrMCS; +- break; +- case 9: +- HtCfg1.field.HTMCS9FBK = pNextTxRate->CurrMCS; +- break; +- case 10: +- HtCfg1.field.HTMCS10FBK = pNextTxRate->CurrMCS; +- break; +- case 11: +- HtCfg1.field.HTMCS11FBK = pNextTxRate->CurrMCS; +- break; +- case 12: +- HtCfg1.field.HTMCS12FBK = pNextTxRate->CurrMCS; +- break; +- case 13: +- HtCfg1.field.HTMCS13FBK = pNextTxRate->CurrMCS; +- break; +- case 14: +- HtCfg1.field.HTMCS14FBK = pNextTxRate->CurrMCS; +- break; +- case 15: +- HtCfg1.field.HTMCS15FBK = pNextTxRate->CurrMCS; +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("AsicUpdateAutoFallBackTable: not support CurrMCS=%d\n", pCurrTxRate->CurrMCS)); +- } +- } +- } +- break; +- } +- +- pNextTxRate = pCurrTxRate; +- } +- +- RTMP_IO_WRITE32(pAd, HT_FBK_CFG0, HtCfg0.word); +- RTMP_IO_WRITE32(pAd, HT_FBK_CFG1, HtCfg1.word); +- RTMP_IO_WRITE32(pAd, LG_FBK_CFG0, LgCfg0.word); +- RTMP_IO_WRITE32(pAd, LG_FBK_CFG1, LgCfg1.word); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Set MAC register value according operation mode. +- OperationMode AND bNonGFExist are for MM and GF Proteciton. +- If MM or GF mask is not set, those passing argument doesn't not take effect. +- +- Operation mode meaning: +- = 0 : Pure HT, no preotection. +- = 0x01; there may be non-HT devices in both the control and extension channel, protection is optional in BSS. +- = 0x10: No Transmission in 40M is protected. +- = 0x11: Transmission in both 40M and 20M shall be protected +- if (bNonGFExist) +- we should choose not to use GF. But still set correct ASIC registers. +- ======================================================================== +-*/ +-VOID AsicUpdateProtect( +- IN PRTMP_ADAPTER pAd, +- IN USHORT OperationMode, +- IN UCHAR SetMask, +- IN BOOLEAN bDisableBGProtect, +- IN BOOLEAN bNonGFExist) +-{ +- PROT_CFG_STRUC ProtCfg, ProtCfg4; +- UINT32 Protect[6]; +- USHORT offset; +- UCHAR i; +- UINT32 MacReg = 0; +- +- if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) +- { +- return; +- } +- +- if (pAd->BATable.numAsOriginator) +- { +- // +- // enable the RTS/CTS to avoid channel collision +- // +- SetMask = ALLN_SETPROTECT; +- OperationMode = 8; +- } +- +- // Config ASIC RTS threshold register +- RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); +- MacReg &= 0xFF0000FF; +- +- // If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 +- if (( +- (pAd->CommonCfg.BACapability.field.AmsduEnable) || +- (pAd->CommonCfg.bAggregationCapable == TRUE)) +- && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) +- { +- MacReg |= (0x1000 << 8); +- } +- else +- { +- MacReg |= (pAd->CommonCfg.RtsThreshold << 8); +- } +- +- RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); +- +- // Initial common protection settings +- RTMPZeroMemory(Protect, sizeof(Protect)); +- ProtCfg4.word = 0; +- ProtCfg.word = 0; +- ProtCfg.field.TxopAllowGF40 = 1; +- ProtCfg.field.TxopAllowGF20 = 1; +- ProtCfg.field.TxopAllowMM40 = 1; +- ProtCfg.field.TxopAllowMM20 = 1; +- ProtCfg.field.TxopAllowOfdm = 1; +- ProtCfg.field.TxopAllowCck = 1; +- ProtCfg.field.RTSThEn = 1; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- +- // update PHY mode and rate +- if (pAd->CommonCfg.Channel > 14) +- ProtCfg.field.ProtectRate = 0x4000; +- ProtCfg.field.ProtectRate |= pAd->CommonCfg.RtsRate; +- +- // Handle legacy(B/G) protection +- if (bDisableBGProtect) +- { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; +- Protect[0] = ProtCfg.word; +- Protect[1] = ProtCfg.word; +- } +- else +- { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected +- Protect[0] = ProtCfg.word; +- ProtCfg.field.ProtectCtrl = ASIC_CTS; // OFDM needs using CCK to protect +- Protect[1] = ProtCfg.word; +- } +- +- // Decide HT frame protection. +- if ((SetMask & ALLN_SETPROTECT) != 0) +- { +- switch(OperationMode) +- { +- case 0x0: +- // NO PROTECT +- // 1.All STAs in the BSS are 20/40 MHz HT +- // 2. in ai 20/40MHz BSS +- // 3. all STAs are 20MHz in a 20MHz BSS +- // Pure HT. no protection. +- +- // MM20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[2] = 0x01744004; +- +- // MM40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[3] = 0x03f44084; +- +- // CF20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[4] = 0x01744004; +- +- // CF40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[5] = 0x03f44084; +- +- if (bNonGFExist) +- { +- // PROT_NAV(19:18) -- 01 (Short NAV protectiion) +- // PROT_CTRL(17:16) -- 01 (RTS/CTS) +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- } +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; +- +- case 1: +- // This is "HT non-member protection mode." +- // If there may be non-HT STAs my BSS +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; +- } +- //Assign Protection method for 20&40 MHz packets +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- +- case 2: +- // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- +- //Assign Protection method for 40MHz packets +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- if (bNonGFExist) +- { +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- } +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; +- +- case 3: +- // HT mixed mode. PROTECT ALL! +- // Assign Rate +- ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. +- ProtCfg4.word = 0x03f44084; +- // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 +- } +- //Assign Protection method for 20&40 MHz packets +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- +- case 8: +- // Special on for Atheros problem n chip. +- Protect[2] = 0x01754004; +- Protect[3] = 0x03f54084; +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- } +- } +- +- offset = CCK_PROT_CFG; +- for (i = 0;i < 6;i++) +- { +- if ((SetMask & (1<< i))) +- { +- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]); +- } +- } +-} +- +-#ifdef RT2870 +-/* +- ========================================================================== +- Description: +- +- Load RF normal operation-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- +- // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue = (RFValue & (~0x0C)) | 0x31; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // TX_LO2_en, RF R15 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R15, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R15, RFValue); +- +- // TX_LO1_en, RF R17 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R17, &RFValue); +- RFValue &= (~0x08); +- // to fix rx long range issue +- if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) +- { +- RFValue |= 0x20; +- } +- RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +- +- // RX_LO1_en, RF R20 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R20, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R20, RFValue); +- +- // RX_LO2_en, RF R21 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- +- // LDORF_VC, RF R27 register Bit 2 to 0 +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- /* end johnli */ +-} +- +-/* +- ========================================================================== +- Description: +- +- Load RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- // RF_BLOCK_en. RF R1 register Bit 0 to 0 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue &= (~0x01); +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue &= (~0x30); +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue &= (~0x0E); +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x80); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- +- // LDORF_VC, RF R27 register Bit 0, Bit 1 & Bit 2 to 1 +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- RFValue |= 0x77; +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue |= 0x1D000000; +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +-} +- +-/* +- ========================================================================== +- Description: +- +- Reverse RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- // RF_BLOCK_en, RF R1 register Bit 0 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue |= 0x30; +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue |= 0x0E; +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 1 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- +- // LDORF_VC, RF R27 register Bit 2 to 0 +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- +- // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { +- // patch tx EVM issue temporarily +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- else +- { +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +-} +-#endif +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN BOOLEAN bScan) +-{ +- ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; +- CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; +- UCHAR index; +- UINT32 Value = 0; //BbpReg, Value; +- RTMP_RF_REGS *RFRegTable; +- +- // Search Tx power value +- // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list +- // in ChannelList, so use TxPower array instead. +- // +- for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) +- { +- if (Channel == pAd->TxPower[index].Channel) +- { +- TxPwer = pAd->TxPower[index].Power; +- TxPwer2 = pAd->TxPower[index].Power2; +- break; +- } +- } +- +- if (index == MAX_NUM_OF_CHANNELS) +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Can't find the Channel#%d \n", Channel)); +- +-#ifdef RT2870 +- // The RF programming sequence is difference between 3xxx and 2xxx +- if ((IS_RT3070(pAd) || IS_RT3090(pAd)) && ( +- (pAd->RfIcType == RFIC_3022) || (pAd->RfIcType == RFIC_3021) || +- (pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020))) +- { +- /* modify by WY for Read RF Reg. error */ +- UCHAR RFValue; +- +- for (index = 0; index < NUM_OF_3020_CHNL; index++) +- { +- if (Channel == FreqItems3020[index].Channel) +- { +- // Programming channel parameters +- RT30xxWriteRFRegister(pAd, RF_R02, FreqItems3020[index].N); +- RT30xxWriteRFRegister(pAd, RF_R03, FreqItems3020[index].K); +- +- RT30xxReadRFRegister(pAd, RF_R06, &RFValue); +- RFValue = (RFValue & 0xFC) | FreqItems3020[index].R; +- RT30xxWriteRFRegister(pAd, RF_R06, RFValue); +- +- // Set Tx0 Power +- RT30xxReadRFRegister(pAd, RF_R12, &RFValue); +- RFValue = (RFValue & 0xE0) | TxPwer; +- RT30xxWriteRFRegister(pAd, RF_R12, RFValue); +- +- // Set Tx1 Power +- RT30xxReadRFRegister(pAd, RF_R13, &RFValue); +- RFValue = (RFValue & 0xE0) | TxPwer2; +- RT30xxWriteRFRegister(pAd, RF_R13, RFValue); +- +- // Tx/Rx Stream setting +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- //if (IS_RT3090(pAd)) +- // RFValue |= 0x01; // Enable RF block. +- RFValue &= 0x03; //clear bit[7~2] +- if (pAd->Antenna.field.TxPath == 1) +- RFValue |= 0xA0; +- else if (pAd->Antenna.field.TxPath == 2) +- RFValue |= 0x80; +- if (pAd->Antenna.field.RxPath == 1) +- RFValue |= 0x50; +- else if (pAd->Antenna.field.RxPath == 2) +- RFValue |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // Set RF offset +- RT30xxReadRFRegister(pAd, RF_R23, &RFValue); +- RFValue = (RFValue & 0x80) | pAd->RfFreqOffset; +- RT30xxWriteRFRegister(pAd, RF_R23, RFValue); +- +- // Set BW +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { +- RFValue = pAd->Mlme.CaliBW40RfR24; +- //DISABLE_11N_CHECK(pAd); +- } +- else +- { +- RFValue = pAd->Mlme.CaliBW20RfR24; +- } +- RT30xxWriteRFRegister(pAd, RF_R24, RFValue); +- RT30xxWriteRFRegister(pAd, RF_R31, RFValue); +- +- // Enable RF tuning +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue = RFValue | 0x1; +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // latch channel for future usage. +- pAd->LatchRfRegs.Channel = Channel; +- +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", +- Channel, +- pAd->RfIcType, +- TxPwer, +- TxPwer2, +- pAd->Antenna.field.TxPath, +- FreqItems3020[index].N, +- FreqItems3020[index].K, +- FreqItems3020[index].R)); +- break; +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", +- Channel, +- pAd->RfIcType, +- TxPwer, +- TxPwer2, +- pAd->Antenna.field.TxPath, +- FreqItems3020[index].N, +- FreqItems3020[index].K, +- FreqItems3020[index].R)); +- } +- else +-#endif // RT2870 // +- { +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } +- +- if (Channel > 14) +- { +- // initialize R3, R4 +- R3 = (RFRegTable[index].R3 & 0xffffc1ff); +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15); +- +- // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB +- // R3 +- if ((TxPwer >= -7) && (TxPwer < 0)) +- { +- TxPwer = (7+TxPwer); +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer=%d \n", TxPwer)); +- } +- else +- { +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10) | (1 << 9); +- } +- +- // R4 +- if ((TxPwer2 >= -7) && (TxPwer2 < 0)) +- { +- TxPwer2 = (7+TxPwer2); +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer2=%d \n", TxPwer2)); +- } +- else +- { +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7) | (1 << 6); +- } +- } +- else +- { +- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 <<6);// Set freq Offset & TxPwr1 +- } +- +- // Based on BBP current mode before changing RF channel. +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { +- R4 |=0x200000; +- } +- +- // Update variables +- pAd->LatchRfRegs.Channel = Channel; +- pAd->LatchRfRegs.R1 = RFRegTable[index].R1; +- pAd->LatchRfRegs.R2 = R2; +- pAd->LatchRfRegs.R3 = R3; +- pAd->LatchRfRegs.R4 = R4; +- +- // Set RF value 1's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 2's set R3[bit2] = [1] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04)); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 3's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- break; +- } +- } +- break; +- +- default: +- break; +- } +- } +- +- // Change BBP setting during siwtch from a->g, g->a +- if (Channel <= 14) +- { +- ULONG TxPinCfg = 0x00050F0A;//Gary 2007/08/09 0x050A0A +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); +- +- // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); +- } +- +- // 5G band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x04); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +- else +- { +- ULONG TxPinCfg = 0x00050F05;//Gary 2007/8/9 0x050505 +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); +- +- // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForA) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); +- } +- +- // 5G band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x02); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +- +- // R66 should be set according to Channel and use 20MHz when scanning +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd))); +- if (bScan) +- RTMPSetAGCInitValue(pAd, BW_20); +- else +- RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +- +- // +- // On 11A, We should delay and wait RF/BBP to be stable +- // and the appropriate time should be 1000 micro seconds +- // 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. +- // +- RTMPusecDelay(1000); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%lu, Pwr1=%lu, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", +- Channel, +- pAd->RfIcType, +- (R3 & 0x00003e00) >> 9, +- (R4 & 0x000007c0) >> 6, +- pAd->Antenna.field.TxPath, +- pAd->LatchRfRegs.R1, +- pAd->LatchRfRegs.R2, +- pAd->LatchRfRegs.R3, +- pAd->LatchRfRegs.R4)); +-} +- +-/* +- ========================================================================== +- Description: +- This function is required for 2421 only, and should not be used during +- site survey. It's only required after NIC decided to stay at a channel +- for a longer period. +- When this function is called, it's always after AsicSwitchChannel(). +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicLockChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +-} +- +-VOID AsicRfTuningExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +-} +- +-/* +- ========================================================================== +- Description: +- Gives CCK TX rate 2 more dB TX power. +- This routine works only in LINK UP in INFRASTRUCTURE mode. +- +- calculate desired Tx power in RF R3.Tx0~5, should consider - +- 0. if current radio is a noisy environment (pAd->DrsCounters.fNoisyEnvironment) +- 1. TxPowerPercentage +- 2. auto calibration based on TSSI feedback +- 3. extra 2 db for CCK +- 4. -10 db upon very-short distance (AvgRSSI >= -40db) to AP +- +- NOTE: Since this routine requires the value of (pAd->DrsCounters.fNoisyEnvironment), +- it should be called AFTER MlmeDynamicTxRatSwitching() +- ========================================================================== +- */ +-VOID AsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd) +-{ +- INT i, j; +- CHAR DeltaPwr = 0; +- BOOLEAN bAutoTxAgc = FALSE; +- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; +- UCHAR BbpR1 = 0, BbpR49 = 0, idx; +- PCHAR pTxAgcCompensate; +- ULONG TxPwr[5]; +- CHAR Value; +- +-#ifdef RT2860 +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +- || (pAd->bPCIclkOff == TRUE) +- || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) +- || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- return; +-#endif +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- if (pAd->CommonCfg.CentralChannel > 14) +- { +- TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; +- } +- } +- else +- { +- if (pAd->CommonCfg.Channel > 14) +- { +- TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; +- } +- } +- +- // TX power compensation for temperature variation based on TSSI. try every 4 second +- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) +- { +- if (pAd->CommonCfg.Channel <= 14) +- { +- /* bg channel */ +- bAutoTxAgc = pAd->bAutoTxAgcG; +- TssiRef = pAd->TssiRefG; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; +- TxAgcStep = pAd->TxAgcStepG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- /* a channel */ +- bAutoTxAgc = pAd->bAutoTxAgcA; +- TssiRef = pAd->TssiRefA; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; +- TxAgcStep = pAd->TxAgcStepA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- { +- /* BbpR1 is unsigned char */ +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49); +- +- /* (p) TssiPlusBoundaryG[0] = 0 = (m) TssiMinusBoundaryG[0] */ +- /* compensate: +4 +3 +2 +1 0 -1 -2 -3 -4 * steps */ +- /* step value is defined in pAd->TxAgcStepG for tx power value */ +- +- /* [4]+1+[4] p4 p3 p2 p1 o1 m1 m2 m3 m4 */ +- /* ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 +- above value are examined in mass factory production */ +- /* [4] [3] [2] [1] [0] [1] [2] [3] [4] */ +- +- /* plus (+) is 0x00 ~ 0x45, minus (-) is 0xa0 ~ 0xf0 */ +- /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */ +- /* if value is 0xa5, tx power will be -= TxAgcStep*(2-1) */ +- +- if (BbpR49 > pTssiMinusBoundary[1]) +- { +- // Reading is larger than the reference value +- // check for how large we need to decrease the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range +- break; +- } +- // The index is the step we should decrease, idx = 0 means there is nothing to compensate +- *pTxAgcCompensate = -(TxAgcStep * (idx-1)); +- +- DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else if (BbpR49 < pTssiPlusBoundary[1]) +- { +- // Reading is smaller than the reference value +- // check for how large we need to increase the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range +- break; +- } +- // The index is the step we should increase, idx = 0 means there is nothing to compensate +- *pTxAgcCompensate = TxAgcStep * (idx-1); +- DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else +- { +- *pTxAgcCompensate = 0; +- DBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, 0)); +- } +- } +- } +- else +- { +- if (pAd->CommonCfg.Channel <= 14) +- { +- bAutoTxAgc = pAd->bAutoTxAgcG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- bAutoTxAgc = pAd->bAutoTxAgcA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- DeltaPwr += (*pTxAgcCompensate); +- } +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1); +- BbpR1 &= 0xFC; +- +- /* calculate delta power based on the percentage specified from UI */ +- // E2PROM setting is calibrated for maximum TX power (i.e. 100%) +- // We lower TX power here according to the percentage specified from UI +- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; +- { +- DeltaPwr -= 1; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; +- { +- DeltaPwr -= 3; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; +- { +- BbpR1 |= 0x01; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; +- { +- BbpR1 |= 0x01; +- DeltaPwr -= 3; +- } +- else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; +- { +- BbpR1 |= 0x02; +- } +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpR1); +- +- /* reset different new tx power for different TX rate */ +- for(i=0; i<5; i++) +- { +- if (TxPwr[i] != 0xffffffff) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */ +- +- if ((Value + DeltaPwr) < 0) +- { +- Value = 0; /* min */ +- } +- else if ((Value + DeltaPwr) > 0xF) +- { +- Value = 0xF; /* max */ +- } +- else +- { +- Value += DeltaPwr; /* temperature compensation */ +- } +- +- /* fill new value to CSR offset */ +- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); +- } +- +- /* write tx power value to CSR */ +- /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M +- TX power for OFDM 6M/9M +- TX power for CCK5.5M/11M +- TX power for CCK1M/2M */ +- /* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */ +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]); +- } +- } +- +-} +- +-/* +- ========================================================================== +- Description: +- put PHY to sleep here, and set next wakeup timer. PHY doesn't not wakeup +- automatically. Instead, MCU will issue a TwakeUpInterrupt to host after +- the wakeup timer timeout. Driver has to issue a separate command to wake +- PHY up. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) +-{ +- RT28XX_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); +-} +- +-/* +- ========================================================================== +- Description: +- AsicForceWakeup() is used whenever manual wakeup is required +- AsicForceSleep() should only be used when not in INFRA BSS. When +- in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. +- ========================================================================== +- */ +-VOID AsicForceSleep( +- IN PRTMP_ADAPTER pAd) +-{ +- +-} +- +-/* +- ========================================================================== +- Description: +- AsicForceWakeup() is used whenever Twakeup timer (set via AsicSleepThenAutoWakeup) +- expired. +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- ========================================================================== +- */ +-VOID AsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +-#ifdef RT2860 +- IN UCHAR Level) +-#endif +-#ifdef RT2870 +- IN BOOLEAN bFromTx) +-#endif +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicForceWakeup \n")); +-#ifdef RT2860 +- RT28XX_STA_FORCE_WAKEUP(pAd, Level); +-#endif +-#ifdef RT2870 +- RT28XX_STA_FORCE_WAKEUP(pAd, bFromTx); +-#endif +-} +- +-/* +- ========================================================================== +- Description: +- Set My BSSID +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetBssid( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid) +-{ +- ULONG Addr4; +- DBGPRINT(RT_DEBUG_TRACE, ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", +- pBssid[0],pBssid[1],pBssid[2],pBssid[3], pBssid[4],pBssid[5])); +- +- Addr4 = (ULONG)(pBssid[0]) | +- (ULONG)(pBssid[1] << 8) | +- (ULONG)(pBssid[2] << 16) | +- (ULONG)(pBssid[3] << 24); +- RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); +- +- Addr4 = 0; +- // always one BSSID in STA mode +- Addr4 = (ULONG)(pBssid[4]) | (ULONG)(pBssid[5] << 8); +- +- RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); +-} +- +-VOID AsicSetMcastWC( +- IN PRTMP_ADAPTER pAd) +-{ +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- USHORT offset; +- +- pEntry->Sst = SST_ASSOC; +- pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index +- pEntry->PsMode = PWR_ACTIVE; +- pEntry->CurrTxRate = pAd->CommonCfg.MlmeRate; +- offset = MAC_WCID_BASE + BSS0Mcast_WCID * HW_WCID_ENTRY_SIZE; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDelWcidTab( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid) +-{ +- ULONG Addr0 = 0x0, Addr1 = 0x0; +- ULONG offset; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n",Wcid)); +- offset = MAC_WCID_BASE + Wcid * HW_WCID_ENTRY_SIZE; +- RTMP_IO_WRITE32(pAd, offset, Addr0); +- offset += 4; +- RTMP_IO_WRITE32(pAd, offset, Addr1); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableRDG( +- IN PRTMP_ADAPTER pAd) +-{ +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; +- +- RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); +- TxLinkCfg.field.TxRDGEn = 1; +- RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); +- +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- Data |= 0x80; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +- +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDisableRDG( +- IN PRTMP_ADAPTER pAd) +-{ +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; +- +- +- RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); +- TxLinkCfg.field.TxRDGEn = 0; +- RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); +- +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- +- Data &= 0xFFFFFF00; +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) +- && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) +- ) +- { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- if (pAd->CommonCfg.bEnableTxBurst) +- Data |= 0x20; +- } +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDisableSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->Disable TSF synchronization\n")); +- +- // 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect +- // that NIC will never wakes up because TSF stops and no more +- // TBTT interrupts +- pAd->TbttTickCount = 0; +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.bBeaconGen = 0; +- csr.field.bTBTTEnable = 0; +- csr.field.TsfSyncMode = 0; +- csr.field.bTsfTicking = 0; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +- +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableBssSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n")); +- +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- +- { +- csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU +- csr.field.bTsfTicking = 1; +- csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode +- csr.field.bBeaconGen = 0; // do NOT generate BEACON +- csr.field.bTBTTEnable = 1; +- } +- +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +-} +- +-/* +- ========================================================================== +- Description: +- Note: +- BEACON frame in shared memory should be built ok before this routine +- can be called. Otherwise, a garbage frame maybe transmitted out every +- Beacon period. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableIbssSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr9; +- PUCHAR ptr; +- UINT i; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", pAd->BeaconTxWI.MPDUtotalByteCount)); +- +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr9.word); +- csr9.field.bBeaconGen = 0; +- csr9.field.bTBTTEnable = 0; +- csr9.field.bTsfTicking = 0; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +- +-#ifdef RT2860 +- // move BEACON TXD and frame content to on-chip memory +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconBuf; +- for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=4) +- { +- UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); +- ptr +=4; +- } +-#endif +-#ifdef RT2870 +- // move BEACON TXD and frame content to on-chip memory +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconBuf; +- for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=2) +- { +- RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2); +- ptr +=2; +- } +-#endif // RT2870 // +- +- // start sending BEACON +- csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU +- csr9.field.bTsfTicking = 1; +- csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode +- csr9.field.bTBTTEnable = 1; +- csr9.field.bBeaconGen = 1; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetEdcaParm( +- IN PRTMP_ADAPTER pAd, +- IN PEDCA_PARM pEdcaParm) +-{ +- EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; +- AC_TXOP_CSR0_STRUC csr0; +- AC_TXOP_CSR1_STRUC csr1; +- AIFSN_CSR_STRUC AifsnCsr; +- CWMIN_CSR_STRUC CwminCsr; +- CWMAX_CSR_STRUC CwmaxCsr; +- int i; +- +- Ac0Cfg.word = 0; +- Ac1Cfg.word = 0; +- Ac2Cfg.word = 0; +- Ac3Cfg.word = 0; +- if ((pEdcaParm == NULL) || (pEdcaParm->bValid == FALSE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AsicSetEdcaParm\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- for (i=0; iMacTab.Content[i].ValidAsCLI || pAd->MacTab.Content[i].ValidAsApCli) +- CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[i], fCLIENT_STATUS_WMM_CAPABLE); +- } +- +- //======================================================== +- // MAC Register has a copy . +- //======================================================== +- if( pAd->CommonCfg.bEnableTxBurst ) +- { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode +- } +- else +- Ac0Cfg.field.AcTxop = 0; // QID_AC_BE +- Ac0Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac0Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac0Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); +- +- Ac1Cfg.field.AcTxop = 0; // QID_AC_BK +- Ac1Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac1Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac1Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); +- +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- Ac2Cfg.field.AcTxop = 192; // AC_VI: 192*32us ~= 6ms +- Ac3Cfg.field.AcTxop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- Ac2Cfg.field.AcTxop = 96; // AC_VI: 96*32us ~= 3ms +- Ac3Cfg.field.AcTxop = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- Ac2Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac2Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac2Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); +- Ac3Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac3Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac3Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); +- +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== +- csr0.field.Ac0Txop = 0; // QID_AC_BE +- csr0.field.Ac1Txop = 0; // QID_AC_BK +- RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); +- +- CwminCsr.word = 0; +- CwminCsr.field.Cwmin0 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin1 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin2 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin3 = CW_MIN_IN_BITS; +- RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); +- +- CwmaxCsr.word = 0; +- CwmaxCsr.field.Cwmax0 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax1 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax2 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax3 = CW_MAX_IN_BITS; +- RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); +- +- RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, 0x00002222); +- +- NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); +- } +- else +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- //======================================================== +- // MAC Register has a copy. +- //======================================================== +- // +- // Modify Cwmin/Cwmax/Txop on queue[QID_AC_VI], Recommend by Jerry 2005/07/27 +- // To degrade our VIDO Queue's throughput for WiFi WMM S3T07 Issue. +- // +- //pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this +- +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; +- Ac0Cfg.field.Cwmin= pEdcaParm->Cwmin[QID_AC_BE]; +- Ac0Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BE]; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; +- +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; +- Ac1Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; +- +- Ac2Cfg.field.AcTxop = (pEdcaParm->Txop[QID_AC_VI] * 6) / 10; +- Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI]; +- Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI]; +- Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI]; +- +- { +- // Tuning for Wi-Fi WMM S06 +- if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- Ac2Cfg.field.Aifsn -= 1; +- +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta +- if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { +- Ac0Cfg.field.Aifsn = 3; +- Ac2Cfg.field.AcTxop = 5; +- } +- +-#ifdef RT2870 +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- { +- // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. +- Ac2Cfg.field.Aifsn = 5; +- } +-#endif +- } +- +- Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO]; +- Ac3Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VO]; +- Ac3Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VO]; +- Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO]; +- +-//#ifdef WIFI_TEST +- if (pAd->CommonCfg.bWiFiTest) +- { +- if (Ac3Cfg.field.AcTxop == 102) +- { +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm->Txop[QID_AC_BE] : 10; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]-1; /* AIFSN must >= 1 */ +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; +- Ac2Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VI]; +- } /* End of if */ +- } +-//#endif // WIFI_TEST // +- +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); +- +- +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== +- csr0.field.Ac0Txop = Ac0Cfg.field.AcTxop; +- csr0.field.Ac1Txop = Ac1Cfg.field.AcTxop; +- RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- +- csr1.field.Ac2Txop = Ac2Cfg.field.AcTxop; +- csr1.field.Ac3Txop = Ac3Cfg.field.AcTxop; +- RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); +- +- CwminCsr.word = 0; +- CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE]; +- CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK]; +- CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI]; +- +- CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test +- +- RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); +- +- CwmaxCsr.word = 0; +- CwmaxCsr.field.Cwmax0 = pEdcaParm->Cwmax[QID_AC_BE]; +- CwmaxCsr.field.Cwmax1 = pEdcaParm->Cwmax[QID_AC_BK]; +- CwmaxCsr.field.Cwmax2 = pEdcaParm->Cwmax[QID_AC_VI]; +- CwmaxCsr.field.Cwmax3 = pEdcaParm->Cwmax[QID_AC_VO]; +- RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); +- +- AifsnCsr.word = 0; +- AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; +- AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; +- +- { +- // Tuning for Wi-Fi WMM S06 +- if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4; +- +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta +- if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { +- AifsnCsr.field.Aifsn0 = 3; +- AifsnCsr.field.Aifsn2 = 7; +- } +-#ifdef RT2870 +- if (INFRA_ON(pAd)) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE); +-#endif +- } +- +- AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test +-#ifdef RT2870 +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. +-#endif +- RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); +- +- NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); +- if (!ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", pEdcaParm->EdcaUpdateCount)); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BE %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[0], +- pEdcaParm->Cwmin[0], +- pEdcaParm->Cwmax[0], +- pEdcaParm->Txop[0]<<5, +- pEdcaParm->bACM[0])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BK %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[1], +- pEdcaParm->Cwmin[1], +- pEdcaParm->Cwmax[1], +- pEdcaParm->Txop[1]<<5, +- pEdcaParm->bACM[1])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VI %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[2], +- pEdcaParm->Cwmin[2], +- pEdcaParm->Cwmax[2], +- pEdcaParm->Txop[2]<<5, +- pEdcaParm->bACM[2])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VO %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[3], +- pEdcaParm->Cwmin[3], +- pEdcaParm->Cwmax[3], +- pEdcaParm->Txop[3]<<5, +- pEdcaParm->bACM[3])); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetSlotTime( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUseShortSlotTime) +-{ +- ULONG SlotTime; +- UINT32 RegValue = 0; +- +- if (pAd->CommonCfg.Channel > 14) +- bUseShortSlotTime = TRUE; +- +- if (bUseShortSlotTime) +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- else +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- +- SlotTime = (bUseShortSlotTime)? 9 : 20; +- +- { +- // force using short SLOT time for FAE to demo performance when TxBurst is ON +- if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) +- || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)) +- ) +- { +- // In this case, we will think it is doing Wi-Fi test +- // And we will not set to short slot when bEnableTxBurst is TRUE. +- } +- else if (pAd->CommonCfg.bEnableTxBurst) +- SlotTime = 9; +- } +- +- // +- // For some reasons, always set it to short slot time. +- // +- // ToDo: Should consider capability with 11B +- // +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- SlotTime = 20; +- +- RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &RegValue); +- RegValue = RegValue & 0xFFFFFF00; +- +- RegValue |= SlotTime; +- +- RTMP_IO_WRITE32(pAd, BKOFF_SLOT_CFG, RegValue); +-} +- +-/* +- ======================================================================== +- Description: +- Add Shared key information into ASIC. +- Update shared key, TxMic and RxMic to Asic Shared key table +- Update its cipherAlg to Asic Shared key Mode. +- +- Return: +- ======================================================================== +-*/ +-VOID AsicAddSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic) +-{ +- ULONG offset; //, csr0; +- SHAREDKEY_MODE_STRUC csr1; +-#ifdef RT2860 +- INT i; +-#endif +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx)); +-//============================================================================================ +- +- DBGPRINT(RT_DEBUG_TRACE,("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], BssIndex*4 + KeyIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); +- if (pRxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); +- } +- if (pTxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); +- } +-//============================================================================================ +- // +- // fill key material - key + TX MIC + RX MIC +- // +- +- offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE; +-#ifdef RT2860 +- for (i=0; iKey; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +- PUCHAR pTxtsc = pCipherKey->TxTsc; +- UCHAR CipherAlg = pCipherKey->CipherAlg; +- SHAREDKEY_MODE_STRUC csr1; +-#ifdef RT2860 +- UCHAR i; +-#endif +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n")); +- // +- // 1.) decide key table offset +- // +- if (bUsePairewiseKeyTable) +- offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); +- else +- offset = SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE; +- +- // +- // 2.) Set Key to Asic +- // +- //for (i = 0; i < KeyLen; i++) +-#ifdef RT2860 +- for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); +- } +-#endif +-#ifdef RT2870 +- RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_PEER_KEY); +-#endif +- offset += MAX_LEN_OF_PEER_KEY; +- +- // +- // 3.) Set MIC key if available +- // +- if (pTxMic) +- { +-#ifdef RT2860 +- for (i = 0; i < 8; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); +- } +-#endif +-#ifdef RT2870 +- RTUSBMultiWrite(pAd, offset, pTxMic, 8); +-#endif +- } +- offset += LEN_TKIP_TXMICK; +- +- if (pRxMic) +- { +-#ifdef RT2860 +- for (i = 0; i < 8; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); +- } +-#endif +-#ifdef RT2870 +- RTUSBMultiWrite(pAd, offset, pRxMic, 8); +-#endif +- } +- +- +- // +- // 4.) Modify IV/EIV if needs +- // This will force Asic to use this key ID by setting IV. +- // +- if (bTxKey) +- { +-#ifdef RT2860 +- offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); +- // +- // Write IV +- // +- RTMP_IO_WRITE8(pAd, offset, pTxtsc[1]); +- RTMP_IO_WRITE8(pAd, offset + 1, ((pTxtsc[1] | 0x20) & 0x7f)); +- RTMP_IO_WRITE8(pAd, offset + 2, pTxtsc[0]); +- +- IV4 = (KeyIdx << 6); +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence +- +- RTMP_IO_WRITE8(pAd, offset + 3, IV4); +- +- // +- // Write EIV +- // +- offset += 4; +- for (i = 0; i < 4; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]); +- } +- +-#endif +-#ifdef RT2870 +- UINT32 tmpVal; +- +- // +- // Write IV +- // +- IV4 = (KeyIdx << 6); +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence +- +- tmpVal = pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + (pTxtsc[0] << 16) + (IV4 << 24); +- RTMP_IO_WRITE32(pAd, offset, tmpVal); +- +- // +- // Write EIV +- // +- offset += 4; +- RTMP_IO_WRITE32(pAd, offset, *(PUINT32)&pCipherKey->TxTsc[2]); +-#endif // RT2870 // +- AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, bUsePairewiseKeyTable); +- } +- +- if (!bUsePairewiseKeyTable) +- { +- // +- // Only update the shared key security mode +- // +- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), &csr1.word); +- if ((BssIndex % 2) == 0) +- { +- if (KeyIdx == 0) +- csr1.field.Bss0Key0CipherAlg = CipherAlg; +- else if (KeyIdx == 1) +- csr1.field.Bss0Key1CipherAlg = CipherAlg; +- else if (KeyIdx == 2) +- csr1.field.Bss0Key2CipherAlg = CipherAlg; +- else +- csr1.field.Bss0Key3CipherAlg = CipherAlg; +- } +- else +- { +- if (KeyIdx == 0) +- csr1.field.Bss1Key0CipherAlg = CipherAlg; +- else if (KeyIdx == 1) +- csr1.field.Bss1Key1CipherAlg = CipherAlg; +- else if (KeyIdx == 2) +- csr1.field.Bss1Key2CipherAlg = CipherAlg; +- else +- csr1.field.Bss1Key3CipherAlg = CipherAlg; +- } +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), csr1.word); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== AsicAddKeyEntry\n")); +-} +- +- +-/* +- ======================================================================== +- Description: +- Add Pair-wise key material into ASIC. +- Update pairwise key, TxMic and RxMic to Asic Pair-wise key table +- +- Return: +- ======================================================================== +-*/ +-VOID AsicAddPairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, +- IN CIPHER_KEY *pCipherKey) +-{ +- INT i; +- ULONG offset; +- PUCHAR pKey = pCipherKey->Key; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +-#ifdef DBG +- UCHAR CipherAlg = pCipherKey->CipherAlg; +-#endif // DBG // +- +- // EKEY +- offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); +-#ifdef RT2860 +- for (i=0; iKey[0], MAX_LEN_OF_PEER_KEY); +-#endif // RT2870 // +- for (i=0; iTxMic[0], 8); +-#endif // RT2870 // +- } +- offset += 8; +- if (pRxMic) +- { +-#ifdef RT2860 +- for (i=0; i<8; i++) +- { +- RTMP_IO_WRITE8(pAd, offset+i, pRxMic[i]); +- } +-#endif +-#ifdef RT2870 +- RTUSBMultiWrite(pAd, offset, &pCipherKey->RxMic[0], 8); +-#endif // RT2870 // +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("AsicAddPairwiseKeyEntry: WCID #%d Alg=%s\n",WCID, CipherName[CipherAlg])); +- DBGPRINT(RT_DEBUG_TRACE,(" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); +- if (pRxMic) +- { +- DBGPRINT(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); +- } +- if (pTxMic) +- { +- DBGPRINT(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); +- } +-} +-/* +- ======================================================================== +- Description: +- Remove Pair-wise key material from ASIC. +- +- Return: +- ======================================================================== +-*/ +-VOID AsicRemovePairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR Wcid) +-{ +- ULONG WCIDAttri; +- USHORT offset; +- +- // re-set the entry's WCID attribute as OPEN-NONE. +- offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); +- WCIDAttri = (BssIdx<<4) | PAIRWISEKEYTABLE; +- RTMP_IO_WRITE32(pAd, offset, WCIDAttri); +-} +- +-BOOLEAN AsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1) +-{ +- HOST_CMD_CSR_STRUC H2MCmd; +- H2M_MAILBOX_STRUC H2MMailbox; +- ULONG i = 0; +- +- do +- { +- RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +- if (H2MMailbox.field.Owner == 0) +- break; +- +- RTMPusecDelay(2); +- } while(i++ < 100); +- +- if (i > 100) +- { +- { +-#ifdef RT2860 +- UINT32 Data; +- +- // Reset DMA +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data |= 0x2; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- +- // After Reset DMA, DMA index will become Zero. So Driver need to reset all ring indexs too. +- // Reset DMA/CPU ring index +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- // Clear Reset +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data &= 0xfffffffd; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +-#endif /* RT2860 */ +- DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); +- } +- //return FALSE; +-#ifdef RT2870 +- return FALSE; +-#endif +- } +- +- H2MMailbox.field.Owner = 1; // pass ownership to MCU +- H2MMailbox.field.CmdToken = Token; +- H2MMailbox.field.HighByte = Arg1; +- H2MMailbox.field.LowByte = Arg0; +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); +- +- H2MCmd.word = 0; +- H2MCmd.field.HostCommand = Command; +- RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); +- +- if (Command != 0x80) +- { +- } +- +- return TRUE; +-} +- +-#ifdef RT2860 +-BOOLEAN AsicCheckCommanOk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command) +-{ +- UINT32 CmdStatus = 0, CID = 0, i; +- UINT32 ThisCIDMask = 0; +- +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, H2M_MAILBOX_CID, &CID); +- // Find where the command is. Because this is randomly specified by firmware. +- if ((CID & CID0MASK) == Command) +- { +- ThisCIDMask = CID0MASK; +- break; +- } +- else if ((((CID & CID1MASK)>>8) & 0xff) == Command) +- { +- ThisCIDMask = CID1MASK; +- break; +- } +- else if ((((CID & CID2MASK)>>16) & 0xff) == Command) +- { +- ThisCIDMask = CID2MASK; +- break; +- } +- else if ((((CID & CID3MASK)>>24) & 0xff) == Command) +- { +- ThisCIDMask = CID3MASK; +- break; +- } +- +- RTMPusecDelay(100); +- i++; +- }while (i < 200); +- +- // Get CommandStatus Value +- RTMP_IO_READ32(pAd, H2M_MAILBOX_STATUS, &CmdStatus); +- +- // This command's status is at the same position as command. So AND command position's bitmask to read status. +- if (i < 200) +- { +- // If Status is 1, the comamnd is success. +- if (((CmdStatus & ThisCIDMask) == 0x1) || ((CmdStatus & ThisCIDMask) == 0x100) +- || ((CmdStatus & ThisCIDMask) == 0x10000) || ((CmdStatus & ThisCIDMask) == 0x1000000)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanOk CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- return TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail1 CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", Command, CmdStatus)); +- } +- // Clear Command and Status. +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- +- return FALSE; +-} +-#endif /* RT8260 */ + + /* + ======================================================================== +@@ -7993,55 +5467,6 @@ CHAR RTMPMaxRssi( + return larger; + } + +-#ifdef RT2870 +-// Antenna divesity use GPIO3 and EESK pin for control +-// Antenna and EEPROM access are both using EESK pin, +-// Therefor we should avoid accessing EESK at the same time +-// Then restore antenna after EEPROM access +-VOID AsicSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) +-{ +- UINT32 Value; +- UINT32 x; +- +- if ((pAd->EepromAccess) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- return; +- } +- +- // the antenna selection is through firmware and MAC register(GPIO3) +- if (Ant == 0) +- { +- // Main antenna +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x |= (EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n")); +- } +- else +- { +- // Aux antenna +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- Value |= 0x08; +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n")); +- } +-} +-#endif + + /* + ======================================================================== +@@ -8065,39 +5490,21 @@ VOID AsicEvaluateRxAnt( + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_RADIO_OFF | + fRTMP_ADAPTER_NIC_NOT_EXIST | +- fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) +- || OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-#ifdef RT2870 ++ fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) || ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++#ifdef RT30xx + || (pAd->EepromAccess) +-#endif ++#endif // RT30xx // + ) + return; + +-#ifdef RT30xx +- // two antenna selection mechanism- one is antenna diversity, the other is failed antenna remove +- // one is antenna diversity:there is only one antenna can rx and tx +- // the other is failed antenna remove:two physical antenna can rx and tx +- if (pAd->NicConfig2.field.AntDiversity) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AntDiv - before evaluate Pair1-Ant (%d,%d)\n", +- pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt)); + +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1SecondaryRxAnt); +- +- pAd->RxAnt.EvaluatePeriod = 1; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt +- pAd->RxAnt.FirstPktArrivedWhenEvaluate = FALSE; +- pAd->RxAnt.RcvPktNumWhenEvaluate = 0; ++ { ++ //if (pAd->StaCfg.Psm == PWR_SAVE) ++ // return; + +- // a one-shot timer to end the evalution +- // dynamic adjust antenna evaluation period according to the traffic +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 100); +- else +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300); +- } +- else +-#endif + { ++ + if (pAd->StaCfg.Psm == PWR_SAVE) + return; + +@@ -8116,12 +5523,9 @@ VOID AsicEvaluateRxAnt( + BBPR3 |= (0x0); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +- +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = BBPR3; +-#endif +- } +- ++#endif // RTMP_MAC_PCI // + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + ) + { +@@ -8141,6 +5545,11 @@ VOID AsicEvaluateRxAnt( + pAd->Mlme.bLowThroughput = TRUE; + } + } ++ } ++ ++ } ++ ++ + } + + /* +@@ -8169,48 +5578,17 @@ VOID AsicRxAntEvalTimeout( + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_NIC_NOT_EXIST) +- || OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-#ifdef RT2870 ++ fRTMP_ADAPTER_NIC_NOT_EXIST) || ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++#ifdef RT30xx + || (pAd->EepromAccess) +-#endif ++#endif // RT30xx // + ) + return; + + { +-#ifdef RT30xx +- if (pAd->NicConfig2.field.AntDiversity) +- { +- if ((pAd->RxAnt.RcvPktNumWhenEvaluate != 0) && (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >= pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt])) +- { +- UCHAR temp; +- +- // +- // select PrimaryRxAntPair +- // Role change, Used Pair1SecondaryRxAnt as PrimaryRxAntPair. +- // Since Pair1SecondaryRxAnt Quality good than Pair1PrimaryRxAnt +- // +- temp = pAd->RxAnt.Pair1PrimaryRxAnt; +- pAd->RxAnt.Pair1PrimaryRxAnt = pAd->RxAnt.Pair1SecondaryRxAnt; +- pAd->RxAnt.Pair1SecondaryRxAnt = temp; +- +- pAd->RxAnt.Pair1LastAvgRssi = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >> 3); +- pAd->RxAnt.EvaluateStableCnt = 0; +- } +- else +- { +- // if the evaluated antenna is not better than original, switch back to original antenna +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- pAd->RxAnt.EvaluateStableCnt ++; +- } +- +- pAd->RxAnt.EvaluatePeriod = 0; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt +- +- DBGPRINT(RT_DEBUG_TRACE,("AsicRxAntEvalAction::After Eval(fix in #%d), <%d, %d>, RcvPktNumWhenEvaluate=%ld\n", +- pAd->RxAnt.Pair1PrimaryRxAnt, (pAd->RxAnt.Pair1AvgRssi[0] >> 3), (pAd->RxAnt.Pair1AvgRssi[1] >> 3), pAd->RxAnt.RcvPktNumWhenEvaluate)); +- } +- else +-#endif ++ //if (pAd->StaCfg.Psm == PWR_SAVE) ++ // return; + { + if (pAd->StaCfg.Psm == PWR_SAVE) + return; +@@ -8261,13 +5639,16 @@ VOID AsicRxAntEvalTimeout( + BBPR3 |= (0x0); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = BBPR3; +-#endif ++#endif // RTMP_MAC_PCI // + } + } ++ ++ + } + ++ + VOID APSDPeriodicExec( + IN PVOID SystemSpecific1, + IN PVOID FunctionContext, +@@ -8281,6 +5662,18 @@ VOID APSDPeriodicExec( + + pAd->CommonCfg.TriggerTimerCount++; + ++// Driver should not send trigger frame, it should be send by application layer ++/* ++ if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable ++ && (pAd->CommonCfg.bNeedSendTriggerFrame || ++ (((pAd->CommonCfg.TriggerTimerCount%20) == 19) && (!pAd->CommonCfg.bAPSDAC_BE || !pAd->CommonCfg.bAPSDAC_BK || !pAd->CommonCfg.bAPSDAC_VI || !pAd->CommonCfg.bAPSDAC_VO)))) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("Sending trigger frame and enter service period when support APSD\n")); ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); ++ pAd->CommonCfg.bNeedSendTriggerFrame = FALSE; ++ pAd->CommonCfg.TriggerTimerCount = 0; ++ pAd->CommonCfg.bInServicePeriod = TRUE; ++ }*/ + } + + /* +@@ -8347,9 +5740,10 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( + BOOLEAN RTMPAutoRateSwitchCheck( + IN PRTMP_ADAPTER pAd) + { ++ { + if (pAd->StaCfg.bAutoTxRateSwitch) + return TRUE; +- ++ } + return FALSE; + } + +@@ -8375,7 +5769,9 @@ UCHAR RTMPStaFixedTxMode( + { + UCHAR tx_mode = FIXED_TXMODE_HT; + ++ { + tx_mode = (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode; ++ } + + return tx_mode; + } +@@ -8462,12 +5858,10 @@ VOID AsicStaBbpTuning( + && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + ) + && !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +-#ifdef RT2860 +- && (pAd->bPCIclkOff == FALSE)) +-#endif +-#ifdef RT2870 ++#ifdef RTMP_MAC_PCI ++ && (pAd->bPCIclkOff == FALSE) ++#endif // RTMP_MAC_PCI // + ) +-#endif + { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &OrigR66Value); + R66 = OrigR66Value; +@@ -8479,26 +5873,31 @@ VOID AsicStaBbpTuning( + + if (pAd->LatchRfRegs.Channel <= 14) + { //BG band +-#ifdef RT2870 ++#ifdef RT30xx + // RT3070 is a no LNA solution, it should have different control regarding to AGC gain control + // Otherwise, it will have some throughput side effect when low RSSI +- if (IS_RT30xx(pAd)) ++ ++ if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + { + if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) + { + R66 = 0x1C + 2*GET_LNA_GAIN(pAd) + 0x20; + if (OrigR66Value != R66) ++ { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } ++ } + else + { + R66 = 0x1C + 2*GET_LNA_GAIN(pAd); + if (OrigR66Value != R66) ++ { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } + } ++ } + else +-#endif // RT2870 // ++#endif // RT30xx // + { + if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) + { +@@ -8564,108 +5963,6 @@ VOID AsicStaBbpTuning( + } + } + +-#ifdef RT2860 +-VOID AsicResetFromDMABusy( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 Data; +- BOOLEAN bCtrl = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("---> AsicResetFromDMABusy !!!!!!!!!!!!!!!!!!!!!!! \n")); +- +- // Be sure restore link control value so we can write register. +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AsicResetFromDMABusy==>\n")); +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_HALT); +- RTMPusecDelay(6000); +- pAd->bPCIclkOff = FALSE; +- bCtrl = TRUE; +- } +- // Reset DMA +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data |= 0x2; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- +- // After Reset DMA, DMA index will become Zero. So Driver need to reset all ring indexs too. +- // Reset DMA/CPU ring index +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- // Clear Reset +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data &= 0xfffffffd; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- +- // If in Radio off, should call RTMPPCIePowerLinkCtrl again. +- if ((bCtrl == TRUE) && (pAd->StaCfg.bRadio == FALSE)) +- RTMPPCIeLinkCtrlSetting(pAd, 3); +- +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS); +- DBGPRINT(RT_DEBUG_TRACE, ("<--- AsicResetFromDMABusy !!!!!!!!!!!!!!!!!!!!!!! \n")); +-} +- +-VOID AsicResetBBP( +- IN PRTMP_ADAPTER pAd) +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("---> Asic HardReset BBP !!!!!!!!!!!!!!!!!!!!!!! \n")); +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xc); +- +- // After hard-reset BBP, initialize all BBP values. +- NICRestoreBBPValue(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("<--- Asic HardReset BBP !!!!!!!!!!!!!!!!!!!!!!! \n")); +-} +- +-VOID AsicResetMAC( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG Data; +- +- DBGPRINT(RT_DEBUG_TRACE, ("---> AsicResetMAC !!!! \n")); +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data |= 0x4; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- Data &= 0xfffffffb; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<--- AsicResetMAC !!!! \n")); +-} +- +-VOID AsicResetPBF( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG Value1, Value2; +- ULONG Data; +- +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &Value1); +- RTMP_IO_READ32(pAd, PBF_DBG, &Value2); +- +- Value2 &= 0xff; +- // sum should be equals to 0xff, which is the total buffer size. +- if ((Value1 + Value2) < 0xff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("---> Asic HardReset PBF !!!! \n")); +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data); +- Data |= 0x8; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- Data &= 0xfffffff7; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<--- Asic HardReset PBF !!!! \n")); +- } +-} +-#endif /* RT2860 */ +- + VOID RTMPSetAGCInitValue( + IN PRTMP_ADAPTER pAd, + IN UCHAR BandWidth) +@@ -8674,11 +5971,24 @@ VOID RTMPSetAGCInitValue( + + if (pAd->LatchRfRegs.Channel <= 14) + { // BG band ++#ifdef RT30xx ++ /* Gary was verified Amazon AP and find that RT307x has BBP_R66 invalid default value */ ++ ++ if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ { ++ R66 = 0x1C + 2*GET_LNA_GAIN(pAd); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } ++ else ++#endif // RT30xx // ++ { + R66 = 0x2E + GET_LNA_GAIN(pAd); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } ++ } + else + { //A band ++ { + if (BandWidth == BW_20) + { + R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3); +@@ -8690,133 +6000,7 @@ VOID RTMPSetAGCInitValue( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } + } +- +-} +- +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +- +- // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; +- +- // The RF programming sequence is difference between 3xxx and 2xxx +- if (IS_RT3090(pAd)) +- { +- RT30xxLoadRFSleepModeSetup(pAd); // add by johnli, RF power sequence setup, load RF sleep-mode setup +- return; +- } +- +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R1 = RFRegTable[index].R1 & 0xffffdfff; +- R2 = RFRegTable[index].R2 & 0xfffbffff; +- R3 = RFRegTable[index].R3 & 0xfff3ffff; +- +- RTMP_RF_IO_WRITE32(pAd, R1); +- RTMP_RF_IO_WRITE32(pAd, R2); +- +- // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. +- // Set RF R2 bit18=0, R3 bit[18:19]=0 +- //if (pAd->StaCfg.bRadio == FALSE) +- if (1) +- { +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x, R3 = 0x%08x \n", +- Channel, pAd->RfIcType, R2, R3)); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x \n", +- Channel, pAd->RfIcType, R2)); +- break; +- } +- } +- break; +- +- default: +- break; +- } +-} +- +- +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +- +- // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; +- +- // The RF programming sequence is difference between 3xxx and 2xxx +- if (IS_RT3090(pAd)) +- return; +- +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R3 = pAd->LatchRfRegs.R3; +- R3 &= 0xfff3ffff; +- R3 |= 0x00080000; +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- R1 = RFRegTable[index].R1; +- RTMP_RF_IO_WRITE32(pAd, R1); +- +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } +- RTMP_RF_IO_WRITE32(pAd, R2); +- +- break; +- } +- } +- break; +- +- default: +- break; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOnRFClk#%d(RF=%d, ) , R2=0x%08x\n", +- Channel, +- pAd->RfIcType, +- R2)); + } + +diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c +new file mode 100644 +index 0000000..06b51a0 +--- /dev/null ++++ b/drivers/staging/rt2860/common/rt_channel.c +@@ -0,0 +1,1280 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++#include "../rt_config.h" ++ ++ ++CH_FREQ_MAP CH_HZ_ID_MAP[]= ++ { ++ {1, 2412}, ++ {2, 2417}, ++ {3, 2422}, ++ {4, 2427}, ++ {5, 2432}, ++ {6, 2437}, ++ {7, 2442}, ++ {8, 2447}, ++ {9, 2452}, ++ {10, 2457}, ++ {11, 2462}, ++ {12, 2467}, ++ {13, 2472}, ++ {14, 2484}, ++ ++ /* UNII */ ++ {36, 5180}, ++ {40, 5200}, ++ {44, 5220}, ++ {48, 5240}, ++ {52, 5260}, ++ {56, 5280}, ++ {60, 5300}, ++ {64, 5320}, ++ {149, 5745}, ++ {153, 5765}, ++ {157, 5785}, ++ {161, 5805}, ++ {165, 5825}, ++ {167, 5835}, ++ {169, 5845}, ++ {171, 5855}, ++ {173, 5865}, ++ ++ /* HiperLAN2 */ ++ {100, 5500}, ++ {104, 5520}, ++ {108, 5540}, ++ {112, 5560}, ++ {116, 5580}, ++ {120, 5600}, ++ {124, 5620}, ++ {128, 5640}, ++ {132, 5660}, ++ {136, 5680}, ++ {140, 5700}, ++ ++ /* Japan MMAC */ ++ {34, 5170}, ++ {38, 5190}, ++ {42, 5210}, ++ {46, 5230}, ++ ++ /* Japan */ ++ {184, 4920}, ++ {188, 4940}, ++ {192, 4960}, ++ {196, 4980}, ++ ++ {208, 5040}, /* Japan, means J08 */ ++ {212, 5060}, /* Japan, means J12 */ ++ {216, 5080}, /* Japan, means J16 */ ++}; ++ ++INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP)/sizeof(CH_FREQ_MAP)); ++ ++CH_REGION ChRegion[] = ++{ ++ { // Antigua and Berbuda ++ "AG", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Argentina ++ "AR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Aruba ++ "AW", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Australia ++ "AU", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Austria ++ "AT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Bahamas ++ "BS", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Barbados ++ "BB", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Bermuda ++ "BM", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Brazil ++ "BR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Belgium ++ "BE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Bulgaria ++ "BG", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Canada ++ "CA", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Cayman IsLands ++ "KY", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Chile ++ "CL", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // China ++ "CN", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Colombia ++ "CO", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Costa Rica ++ "CR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Cyprus ++ "CY", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Czech_Republic ++ "CZ", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Denmark ++ "DK", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Dominican Republic ++ "DO", ++ CE, ++ { ++ { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0 ++ { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Equador ++ "EC", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // El Salvador ++ "SV", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64 ++ { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Finland ++ "FI", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // France ++ "FR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Germany ++ "DE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Greece ++ "GR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Guam ++ "GU", ++ CE, ++ { ++ { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Guatemala ++ "GT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Haiti ++ "HT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Honduras ++ "HN", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Hong Kong ++ "HK", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Hungary ++ "HU", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Iceland ++ "IS", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // India ++ "IN", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Indonesia ++ "ID", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Ireland ++ "IE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Israel ++ "IL", ++ CE, ++ { ++ { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3 ++ { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9 ++ { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13 ++ { 0}, // end ++ } ++ }, ++ ++ { // Italy ++ "IT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Japan ++ "JP", ++ JAP, ++ { ++ { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 0}, // end ++ } ++ }, ++ ++ { // Jordan ++ "JO", ++ CE, ++ { ++ { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Latvia ++ "LV", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Liechtenstein ++ "LI", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Lithuania ++ "LT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Luxemburg ++ "LU", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Malaysia ++ "MY", ++ CE, ++ { ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Malta ++ "MT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Marocco ++ "MA", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 ++ { 0}, // end ++ } ++ }, ++ ++ { // Mexico ++ "MX", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Netherlands ++ "NL", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // New Zealand ++ "NZ", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Norway ++ "NO", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Peru ++ "PE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Portugal ++ "PT", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Poland ++ "PL", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Romania ++ "RO", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Russia ++ "RU", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Saudi Arabia ++ "SA", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Serbia_and_Montenegro ++ "CS", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 0}, // end ++ } ++ }, ++ ++ { // Singapore ++ "SG", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Slovakia ++ "SK", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Slovenia ++ "SI", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // South Africa ++ "ZA", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // South Korea ++ "KR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128 ++ { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Spain ++ "ES", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Sweden ++ "SE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Switzerland ++ "CH", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 ++ { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Taiwan ++ "TW", ++ CE, ++ { ++ { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // Turkey ++ "TR", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 ++ { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 ++ { 0}, // end ++ } ++ }, ++ ++ { // UK ++ "GB", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 ++ { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 0}, // end ++ } ++ }, ++ ++ { // Ukraine ++ "UA", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 0}, // end ++ } ++ }, ++ ++ { // United_Arab_Emirates ++ "AE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 0}, // end ++ } ++ }, ++ ++ { // United_States ++ "US", ++ CE, ++ { ++ { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64 ++ { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64 ++ { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 ++ { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++ ++ { // Venezuela ++ "VE", ++ CE, ++ { ++ { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 ++ { 0}, // end ++ } ++ }, ++ ++ { // Default ++ "", ++ CE, ++ { ++ { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 ++ { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 ++ { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 ++ { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140 ++ { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 ++ { 0}, // end ++ } ++ }, ++}; ++ ++ ++static PCH_REGION GetChRegion( ++ IN PUCHAR CntryCode) ++{ ++ INT loop = 0; ++ PCH_REGION pChRegion = NULL; ++ ++ while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0) ++ { ++ if (strncmp((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, 2) == 0) ++ { ++ pChRegion = &ChRegion[loop]; ++ break; ++ } ++ loop++; ++ } ++ ++ if (pChRegion == NULL) ++ pChRegion = &ChRegion[loop]; ++ return pChRegion; ++} ++ ++static VOID ChBandCheck( ++ IN UCHAR PhyMode, ++ OUT PUCHAR pChType) ++{ ++ switch(PhyMode) ++ { ++ case PHY_11A: ++ case PHY_11AN_MIXED: ++ *pChType = BAND_5G; ++ break; ++ case PHY_11ABG_MIXED: ++ case PHY_11AGN_MIXED: ++ case PHY_11ABGN_MIXED: ++ *pChType = BAND_BOTH; ++ break; ++ ++ default: ++ *pChType = BAND_24G; ++ break; ++ } ++} ++ ++static UCHAR FillChList( ++ IN PRTMP_ADAPTER pAd, ++ IN PCH_DESP pChDesp, ++ IN UCHAR Offset, ++ IN UCHAR increment) ++{ ++ INT i, j, l; ++ UCHAR channel; ++ ++ j = Offset; ++ for (i = 0; i < pChDesp->NumOfCh; i++) ++ { ++ channel = pChDesp->FirstChannel + i * increment; ++ for (l=0; lTxPower[l].Channel) ++ { ++ pAd->ChannelList[j].Power = pAd->TxPower[l].Power; ++ pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2; ++ break; ++ } ++ } ++ if (l == MAX_NUM_OF_CHANNELS) ++ continue; ++ ++ pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment; ++ pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr; ++ pAd->ChannelList[j].DfsReq = pChDesp->DfsReq; ++ j++; ++ } ++ pAd->ChannelListNum = j; ++ ++ return j; ++} ++ ++ ++static inline VOID CreateChList( ++ IN PRTMP_ADAPTER pAd, ++ IN PCH_REGION pChRegion, ++ IN UCHAR Geography) ++{ ++ INT i; ++ UCHAR offset = 0; ++ PCH_DESP pChDesp; ++ UCHAR ChType; ++ UCHAR increment; ++ ++ if (pChRegion == NULL) ++ return; ++ ++ ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); ++ ++ for (i=0; i<10; i++) ++ { ++ pChDesp = &pChRegion->ChDesp[i]; ++ if (pChDesp->FirstChannel == 0) ++ break; ++ ++ if (ChType == BAND_5G) ++ { ++ if (pChDesp->FirstChannel <= 14) ++ continue; ++ } ++ else if (ChType == BAND_24G) ++ { ++ if (pChDesp->FirstChannel > 14) ++ continue; ++ } ++ ++ if ((pChDesp->Geography == BOTH) ++ || (pChDesp->Geography == Geography)) ++ { ++ if (pChDesp->FirstChannel > 14) ++ increment = 4; ++ else ++ increment = 1; ++ offset = FillChList(pAd, pChDesp, offset, increment); ++ } ++ } ++} ++ ++ ++VOID BuildChannelListEx( ++ IN PRTMP_ADAPTER pAd) ++{ ++ PCH_REGION pChReg; ++ ++ pChReg = GetChRegion(pAd->CommonCfg.CountryCode); ++ CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); ++} ++ ++ ++VOID BuildBeaconChList( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pBuf, ++ OUT PULONG pBufLen) ++{ ++ INT i; ++ ULONG TmpLen; ++ PCH_REGION pChRegion; ++ PCH_DESP pChDesp; ++ UCHAR ChType; ++ ++ pChRegion = GetChRegion(pAd->CommonCfg.CountryCode); ++ ++ if (pChRegion == NULL) ++ return; ++ ++ ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); ++ *pBufLen = 0; ++ ++ for (i=0; i<10; i++) ++ { ++ pChDesp = &pChRegion->ChDesp[i]; ++ if (pChDesp->FirstChannel == 0) ++ break; ++ ++ if (ChType == BAND_5G) ++ { ++ if (pChDesp->FirstChannel <= 14) ++ continue; ++ } ++ else if (ChType == BAND_24G) ++ { ++ if (pChDesp->FirstChannel > 14) ++ continue; ++ } ++ ++ if ((pChDesp->Geography == BOTH) ++ || (pChDesp->Geography == pAd->CommonCfg.Geography)) ++ { ++ MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen, ++ 1, &pChDesp->FirstChannel, ++ 1, &pChDesp->NumOfCh, ++ 1, &pChDesp->MaxTxPwr, ++ END_OF_ARGS); ++ *pBufLen += TmpLen; ++ } ++ } ++} ++ ++ ++static BOOLEAN IsValidChannel( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR channel) ++ ++{ ++ INT i; ++ ++ for (i = 0; i < pAd->ChannelListNum; i++) ++ { ++ if (pAd->ChannelList[i].Channel == channel) ++ break; ++ } ++ ++ if (i == pAd->ChannelListNum) ++ return FALSE; ++ else ++ return TRUE; ++} ++ ++ ++static UCHAR GetExtCh( ++ IN UCHAR Channel, ++ IN UCHAR Direction) ++{ ++ CHAR ExtCh; ++ ++ if (Direction == EXTCHA_ABOVE) ++ ExtCh = Channel + 4; ++ else ++ ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0; ++ ++ return ExtCh; ++} ++ ++ ++VOID N_ChannelCheck( ++ IN PRTMP_ADAPTER pAd) ++{ ++ //UCHAR ChannelNum = pAd->ChannelListNum; ++ UCHAR Channel = pAd->CommonCfg.Channel; ++ ++ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) ++ { ++ if (Channel > 14) ++ { ++ if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) || ++ (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157)) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; ++ } ++ else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) || ++ (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161)) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; ++ } ++ else ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ } ++ } ++ else ++ { ++ do ++ { ++ UCHAR ExtCh; ++ UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; ++ ExtCh = GetExtCh(Channel, Dir); ++ if (IsValidChannel(pAd, ExtCh)) ++ break; ++ ++ Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE; ++ ExtCh = GetExtCh(Channel, Dir); ++ if (IsValidChannel(pAd, ExtCh)) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir; ++ break; ++ } ++ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ } while(FALSE); ++ ++ if (Channel == 14) ++ { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() ++ } ++ } ++ } ++ ++ ++} ++ ++ ++VOID N_SetCenCh( ++ IN PRTMP_ADAPTER pAd) ++{ ++ if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) ++ { ++ if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) ++ { ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; ++ } ++ else ++ { ++ if (pAd->CommonCfg.Channel == 14) ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1; ++ else ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; ++ } ++ } ++ else ++ { ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; ++ } ++} ++ ++ ++UINT8 GetCuntryMaxTxPwr( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT8 channel) ++{ ++ int i; ++ for (i = 0; i < pAd->ChannelListNum; i++) ++ { ++ if (pAd->ChannelList[i].Channel == channel) ++ break; ++ } ++ ++ if (i == pAd->ChannelListNum) ++ return 0xff; ++ else ++ return pAd->ChannelList[i].MaxTxPwr; ++} +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +new file mode 100644 +index 0000000..34a6fca +--- /dev/null ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -0,0 +1,194 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt_rf.c ++ ++ Abstract: ++ Ralink Wireless driver RF related functions ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++ ++#include "../rt_config.h" ++ ++ ++#ifdef RTMP_RF_RW_SUPPORT ++/* ++ ======================================================================== ++ ++ Routine Description: Write RT30xx RF register through MAC ++ ++ Arguments: ++ ++ Return Value: ++ ++ IRQL = ++ ++ Note: ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RT30xxWriteRFRegister( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, ++ IN UCHAR value) ++{ ++ RF_CSR_CFG_STRUC rfcsr; ++ UINT i = 0; ++ ++ do ++ { ++ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); ++ ++ if (!rfcsr.field.RF_CSR_KICK) ++ break; ++ i++; ++ } ++ while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ ++ if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ return STATUS_UNSUCCESSFUL; ++ } ++ ++ rfcsr.field.RF_CSR_WR = 1; ++ rfcsr.field.RF_CSR_KICK = 1; ++ rfcsr.field.TESTCSR_RFACC_REGNUM = regID; ++ rfcsr.field.RF_CSR_DATA = value; ++ ++ RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word); ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: Read RT30xx RF register through MAC ++ ++ Arguments: ++ ++ Return Value: ++ ++ IRQL = ++ ++ Note: ++ ++ ======================================================================== ++*/ ++NDIS_STATUS RT30xxReadRFRegister( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, ++ IN PUCHAR pValue) ++{ ++ RF_CSR_CFG_STRUC rfcsr; ++ UINT i=0, k=0; ++ ++ for (i=0; ichipOps.AsicRfInit) ++ pAd->chipOps.AsicRfInit(pAd); ++} ++ ++ ++VOID RtmpChipOpsRFHook( ++ IN RTMP_ADAPTER *pAd) ++{ ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ ++ pChipOps->pRFRegTable = NULL; ++ pChipOps->AsicRfInit = NULL; ++ pChipOps->AsicRfTurnOn = NULL; ++ pChipOps->AsicRfTurnOff = NULL; ++ pChipOps->AsicReverseRfFromSleepMode = NULL; ++ pChipOps->AsicHaltAction = NULL; ++ /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ ++ ++#ifdef RT30xx ++ if (IS_RT30xx(pAd)) ++ { ++ pChipOps->pRFRegTable = RT30xx_RFRegTable; ++ pChipOps->AsicHaltAction = RT30xxHaltAction; ++#ifdef RT3070 ++ if((IS_RT3070(pAd) || IS_RT3071(pAd)) && (pAd->infType == RTMP_DEV_INF_USB)) ++ { ++ pChipOps->AsicRfInit = NICInitRT3070RFRegisters; ++ if (IS_RT3071(pAd)) ++ { ++ pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; ++ pChipOps->AsicReverseRfFromSleepMode = RT30xxReverseRFSleepModeSetup; ++ } ++ } ++#endif // RT3070 // ++ } ++#endif // RT30xx // ++} ++ ++#endif // RTMP_RF_RW_SUPPORT // +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 20c2ce2..1dd4c82 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -33,30 +33,10 @@ + Revision History: + Who When What + -------- ---------- ---------------------------------------------- +- Paul Lin 2002-08-01 created +- John Chang 2004-08-20 RT2561/2661 use scatter-gather scheme +- Jan Lee 2006-09-15 RT2860. Change for 802.11n , EEPROM, Led, BA, HT. + */ + #include "../rt_config.h" +-#ifdef RT2860 +-#include "firmware.h" +-#include +-#endif +-#ifdef RT2870 +-/* New firmware handles both RT2870 and RT3070. */ +-#include "../../rt3070/firmware.h" +-#endif + + UCHAR BIT8[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; +-ULONG BIT32[] = {0x00000001, 0x00000002, 0x00000004, 0x00000008, +- 0x00000010, 0x00000020, 0x00000040, 0x00000080, +- 0x00000100, 0x00000200, 0x00000400, 0x00000800, +- 0x00001000, 0x00002000, 0x00004000, 0x00008000, +- 0x00010000, 0x00020000, 0x00040000, 0x00080000, +- 0x00100000, 0x00200000, 0x00400000, 0x00800000, +- 0x01000000, 0x02000000, 0x04000000, 0x08000000, +- 0x10000000, 0x20000000, 0x40000000, 0x80000000}; +- + char* CipherName[] = {"none","wep64","wep128","TKIP","AES","CKIP64","CKIP128"}; + + // +@@ -77,36 +57,10 @@ REG_PAIR BBPRegTable[] = { + {BBP_R92, 0x00}, // middle range issue, Rory @2008-01-28 + {BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528 + {BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. ++ {BBP_R106, 0x35}, // for ShortGI throughput + }; + #define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) + +-// +-// RF register initialization set +-// +-#ifdef RT2870 +-REG_PAIR RT30xx_RFRegTable[] = { +- {RF_R04, 0x40}, +- {RF_R05, 0x03}, +- {RF_R06, 0x02}, +- {RF_R07, 0x70}, +- {RF_R09, 0x0F}, +- {RF_R10, 0x41}, +- {RF_R11, 0x21}, +- {RF_R12, 0x7B}, +- {RF_R14, 0x90}, +- {RF_R15, 0x58}, +- {RF_R16, 0xB3}, +- {RF_R17, 0x92}, +- {RF_R18, 0x2C}, +- {RF_R19, 0x02}, +- {RF_R20, 0xBA}, +- {RF_R21, 0xDB}, +- {RF_R24, 0x16}, +- {RF_R25, 0x01}, +- {RF_R29, 0x1F}, +-}; +-#define NUM_RF_REG_PARMS (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)) +-#endif // RT2870 // + + // + // ASIC register initialization sets +@@ -128,32 +82,37 @@ RTMP_REG_PAIR MACRegTable[] = { + {MAC_SYS_CTRL, 0x00}, // 0x1004, , default Disable RX + {RX_FILTR_CFG, 0x17f97}, //0x1400 , RX filter control, + {BKOFF_SLOT_CFG, 0x209}, // default set short slot time, CC_DELAY_TIME should be 2 ++ //{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 + {TX_SW_CFG0, 0x0}, // Gary,2008-05-21 for CWC test + {TX_SW_CFG1, 0x80606}, // Gary,2006-08-23 + {TX_LINK_CFG, 0x1020}, // Gary,2006-08-23 ++ //{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT + {TX_TIMEOUT_CFG, 0x000a2090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 + {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, // 0x3018, MAX frame length. Max PSDU = 16kbytes. + {LED_CFG, 0x7f031e46}, // Gary, 2006-08-23 ++ + {PBF_MAX_PCNT, 0x1F3FBF9F}, //0x1F3f7f9f}, //Jan, 2006/04/20 ++ + {TX_RTY_CFG, 0x47d01f0f}, // Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 ++ + {AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder + {CCK_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. + {OFDM_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. +-//PS packets use Tx1Q (for HCCA) when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + {PBF_CFG, 0xf40006}, // Only enable Queue 2 + {MM40_PROT_CFG, 0x3F44084}, // Initial Auto_Responder, because QA will turn off Auto-Responder + {WPDMA_GLO_CFG, 0x00000030}, +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + {GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS + {GF40_PROT_CFG, 0x03F44084}, + {MM20_PROT_CFG, 0x01744004}, +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + {MM40_PROT_CFG, 0x03F54084}, +-#endif ++#endif // RTMP_MAC_PCI // + {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f*/ /*0x000024bf*/}, //Extension channel backoff. + {TX_RTS_CFG, 0x00092b20}, + {EXP_ACK_TIME, 0x002400ca}, // default value ++ + {TXOP_HLDR_ET, 0x00000002}, + + /* Jerry comments 2008/01/16: we use SIFS = 10us in CCK defaultly, but it seems that 10us +@@ -173,26 +132,6 @@ RTMP_REG_PAIR STAMACRegTable[] = { + #define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(RTMP_REG_PAIR)) + #define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(RTMP_REG_PAIR)) + +-#ifdef RT2870 +-// +-// RT2870 Firmware Spec only used 1 oct for version expression +-// +-#define FIRMWARE_MINOR_VERSION 7 +- +-#endif // RT2870 // +- +-// New 8k byte firmware size for RT3071/RT3072 +-#define FIRMWAREIMAGE_MAX_LENGTH 0x2000 +-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR)) +-#define FIRMWARE_MAJOR_VERSION 0 +- +-#define FIRMWAREIMAGEV1_LENGTH 0x1000 +-#define FIRMWAREIMAGEV2_LENGTH 0x1000 +- +-#ifdef RT2860 +-#define FIRMWARE_MINOR_VERSION 2 +-#endif +- + + /* + ======================================================================== +@@ -236,6 +175,7 @@ NDIS_STATUS RTMPAllocAdapterBlock( + DBGPRINT_ERR(("Failed to allocate memory - BeaconBuf!\n")); + break; + } ++ NdisZeroMemory(pBeaconBuf, MAX_BEACON_SIZE); + + Status = AdapterBlockAllocateMemory(handle, (PVOID *)&pAd); + if (Status != NDIS_STATUS_SUCCESS) +@@ -244,14 +184,14 @@ NDIS_STATUS RTMPAllocAdapterBlock( + break; + } + pAd->BeaconBuf = pBeaconBuf; +- printk("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER)); ++ DBGPRINT(RT_DEBUG_OFF, ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER))); + + + // Init spin locks + NdisAllocateSpinLock(&pAd->MgmtRingLock); +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + NdisAllocateSpinLock(&pAd->RxRingLock); +-#endif ++#endif // RTMP_MAC_PCI // + + for (index =0 ; index < NUM_OF_TX_RING; index++) + { +@@ -298,7 +238,7 @@ VOID RTMPReadTxPwrPerRate( + USHORT i, value, value2; + INT Apwrdelta, Gpwrdelta; + UCHAR t1,t2,t3,t4; +- BOOLEAN bValid, bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; ++ BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; + + // + // Get power delta for 20MHz and 40MHz. +@@ -481,325 +421,16 @@ VOID RTMPReadTxPwrPerRate( + Gdata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); + data |= (value<<16); + +- pAd->Tx20MPwrCfgABand[i] = pAd->Tx40MPwrCfgABand[i] = Adata; +- pAd->Tx20MPwrCfgGBand[i] = pAd->Tx40MPwrCfgGBand[i] = Gdata; ++ /* For 20M/40M Power Delta issue */ ++ pAd->Tx20MPwrCfgABand[i] = data; ++ pAd->Tx20MPwrCfgGBand[i] = data; ++ pAd->Tx40MPwrCfgABand[i] = Adata; ++ pAd->Tx40MPwrCfgGBand[i] = Gdata; + + if (data != 0xffffffff) + RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, data); + DBGPRINT_RAW(RT_DEBUG_TRACE, ("20MHz BW, 2.4G band-%lx, Adata = %lx, Gdata = %lx \n", data, Adata, Gdata)); + } +- +- // +- // Check this block is valid for 40MHz in 2.4G. If invalid, use parameter for 20MHz in 2.4G +- // +- bValid = TRUE; +- for (i=0; i<6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + 2 + i*2, value); +- if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00)) +- { +- bValid = FALSE; +- break; +- } +- } +- +- // +- // Get Txpower per MCS for 40MHz in 2.4G. +- // +- if (bValid) +- { +- for (i=0; i<4; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4, value); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); +- else +- t4 = 0; +- } +- Gdata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4 + 2, value); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); +- else +- t4 = 0; +- } +- Gdata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- +- if (i == 0) +- pAd->Tx40MPwrCfgGBand[i+1] = (pAd->Tx40MPwrCfgGBand[i+1] & 0x0000FFFF) | (Gdata & 0xFFFF0000); +- else +- pAd->Tx40MPwrCfgGBand[i+1] = Gdata; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("40MHz BW, 2.4G band, Gdata = %lx \n", Gdata)); +- } +- } +- +- // +- // Check this block is valid for 20MHz in 5G. If invalid, use parameter for 20MHz in 2.4G +- // +- bValid = TRUE; +- for (i=0; i<8; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + 2 + i*2, value); +- if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00)) +- { +- bValid = FALSE; +- break; +- } +- } +- +- // +- // Get Txpower per MCS for 20MHz in 5G. +- // +- if (bValid) +- { +- for (i=0; i<5; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4 + 2, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- +- if (i == 0) +- pAd->Tx20MPwrCfgABand[i] = (pAd->Tx20MPwrCfgABand[i] & 0x0000FFFF) | (Adata & 0xFFFF0000); +- else +- pAd->Tx20MPwrCfgABand[i] = Adata; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("20MHz BW, 5GHz band, Adata = %lx \n", Adata)); +- } +- } +- +- // +- // Check this block is valid for 40MHz in 5G. If invalid, use parameter for 20MHz in 2.4G +- // +- bValid = TRUE; +- for (i=0; i<6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + 2 + i*2, value); +- if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00)) +- { +- bValid = FALSE; +- break; +- } +- } +- +- // +- // Get Txpower per MCS for 40MHz in 5G. +- // +- if (bValid) +- { +- for (i=0; i<4; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4 + 2, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- +- if (i == 0) +- pAd->Tx40MPwrCfgABand[i+1] = (pAd->Tx40MPwrCfgABand[i+1] & 0x0000FFFF) | (Adata & 0xFFFF0000); +- else +- pAd->Tx40MPwrCfgABand[i+1] = Adata; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("40MHz BW, 5GHz band, Adata = %lx \n", Adata)); +- } +- } + } + + +@@ -939,10 +570,11 @@ VOID RTMPReadChannelPwr( + pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; + } + +- // 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165 (including central frequency in BW 40MHz) ++ // 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165, 167, 169; 171, 173 (including central frequency in BW 40MHz) + // 3.1 Fill up channel + choffset = 14 + 12 + 16; +- for (i = 0; i < 2; i++) ++ /*for (i = 0; i < 2; i++)*/ ++ for (i = 0; i < 3; i++) + { + pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; + pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +@@ -956,12 +588,17 @@ VOID RTMPReadChannelPwr( + pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; + pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; + } +- pAd->TxPower[3 * 2 + choffset + 0].Channel = 165; +- pAd->TxPower[3 * 2 + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 2 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 0].Channel = 171; ++ pAd->TxPower[3 * 3 + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ ++ pAd->TxPower[3 * 3 + choffset + 1].Channel = 173; ++ pAd->TxPower[3 * 3 + choffset + 1].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + + // 3.2 Fill up power +- for (i = 0; i < 4; i++) ++ /*for (i = 0; i < 4; i++)*/ ++ for (i = 0; i < 6; i++) + { + RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); + RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); +@@ -980,7 +617,10 @@ VOID RTMPReadChannelPwr( + } + + // 4. Print and Debug +- choffset = 14 + 12 + 16 + 7; ++ /*choffset = 14 + 12 + 16 + 7;*/ ++ choffset = 14 + 12 + 16 + 11; ++ ++ + } + + /* +@@ -1017,267 +657,6 @@ NDIS_STATUS NICReadRegParameters( + } + + +-#ifdef RT2870 +-/* +- ======================================================================== +- +- Routine Description: +- For RF filter calibration purpose +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0; +- UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; +- UCHAR RF_R24_Value = 0; +- +- // Give bbp filter initial value +-#ifndef RT2870 +- pAd->Mlme.CaliBW20RfR24 = 0x16; +- pAd->Mlme.CaliBW40RfR24 = 0x36; //Bit[5] must be 1 for BW 40 +-#else +- pAd->Mlme.CaliBW20RfR24 = 0x1F; +- pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 +-#endif +- do +- { +- if (loop == 1) //BandWidth = 40 MHz +- { +- // Write 0x27 to RF_R24 to program filter +- RF_R24_Value = 0x27; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd)) +- FilterTarget = 0x15; +- else +- FilterTarget = 0x19; +- +- // when calibrate BW40, BBP mask must set to BW40. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +-#ifdef RT2870 +- // set to BW40 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value |= 0x20; +- RT30xxWriteRFRegister(pAd, RF_R31, value); +-#endif +- } +- else //BandWidth = 20 MHz +- { +- // Write 0x07 to RF_R24 to program filter +- RF_R24_Value = 0x07; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd)) +- FilterTarget = 0x13; +- else +- FilterTarget = 0x16; +-#ifdef RT2870 +- // set to BW20 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value &= (~0x20); +- RT30xxWriteRFRegister(pAd, RF_R31, value); +-#endif +- } +- +- // Write 0x01 to RF_R22 to enable baseband loopback mode +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // Write 0x00 to BBP_R24 to set power & frequency of passband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- do +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- RTMPusecDelay(1000); +- // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- R55x = value & 0xFF; +- +- } while ((ReTry++ < 100) && (R55x == 0)); +- +- // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); +- +- while(TRUE) +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- //We need to wait for calibration +- RTMPusecDelay(1000); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- value &= 0xFF; +- if ((R55x - value) < FilterTarget) +- { +- RF_R24_Value ++; +- } +- else if ((R55x - value) == FilterTarget) +- { +- RF_R24_Value ++; +- count ++; +- } +- else +- { +- break; +- } +- +- // prevent infinite loop cause driver hang. +- if (loopcnt++ > 100) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt)); +- break; +- } +- +- // Write RF_R24 to program filter +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- } +- +- if (count > 0) +- { +- RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); +- } +- +- // Store for future usage +- if (loopcnt < 100) +- { +- if (loop++ == 0) +- { +- //BandWidth = 20 MHz +- pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value; +- } +- else +- { +- //BandWidth = 40 MHz +- pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value; +- break; +- } +- } +- else +- break; +- +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- +- // reset count +- count = 0; +- } while(TRUE); +- +- // +- // Set back to initial state +- // +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value &= ~(0x01); +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // set BBP back to BW20 +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); +-} +- +-VOID NICInitRT30xxRFRegisters(IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value +- if (IS_RT3070(pAd) || IS_RT3071(pAd)) +- { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers +- UINT32 RfReg = 0; +- UINT32 data; +- +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); +- RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- RTMPusecDelay(1000); +- RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- +- // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS; i++) +- { +- RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); +- } +- +- if (IS_RT3070(pAd)) +- { +- // Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate +- RTUSBReadMACRegister(pAd, LDO_CFG0, &data); +- data = ((data & 0xF0FFFFFF) | 0x0D000000); +- RTUSBWriteMACRegister(pAd, LDO_CFG0, data); +- } +- else if (IS_RT3071(pAd)) +- { +- // Driver should set RF R6 bit6 on before init RF registers +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); +- RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); +- +- // init R31 +- RT30xxWriteRFRegister(pAd, RF_R31, 0x14); +- +- // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { +- // patch tx EVM issue temporarily +- RTUSBReadMACRegister(pAd, LDO_CFG0, &data); +- data = ((data & 0xE0FFFFFF) | 0x0D000000); +- RTUSBWriteMACRegister(pAd, LDO_CFG0, data); +- } +- else +- { +- RTMP_IO_READ32(pAd, LDO_CFG0, &data); +- data = ((data & 0xE0FFFFFF) | 0x01000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +- } +- +- // patch LNA_PE_G1 failed issue +- RTUSBReadMACRegister(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data); +- } +- +- //For RF filter Calibration +- RTMPFilterCalibration(pAd); +- +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RT30xxWriteRFRegister(pAd, RF_R27, 0x3); +- +- // set led open drain enable +- RTUSBReadMACRegister(pAd, OPT_14, &data); +- data |= 0x01; +- RTUSBWriteMACRegister(pAd, OPT_14, data); +- +- if (IS_RT3071(pAd)) +- { +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- RT30xxLoadRFNormalModeSetup(pAd); +- } +- } +-} +-#endif // RT2870 // +- +- + /* + ======================================================================== + +@@ -1310,6 +689,18 @@ VOID NICReadEEPROMParameters( + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters\n")); + ++ if (pAd->chipOps.eeinit) ++ pAd->chipOps.eeinit(pAd); ++#ifdef RTMP_EFUSE_SUPPORT ++#ifdef RT30xx ++ if(!pAd->bFroceEEPROMBuffer && pAd->bEEPROMFile) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters::(Efuse)Load to EEPROM Buffer Mode\n")); ++ eFuseLoadEEPROM(pAd); ++ } ++#endif // RT30xx // ++#endif // RTMP_EFUSE_SUPPORT // ++ + // Init EEPROM Address Number, before access EEPROM; if 93c46, EEPROMAddressNum=6, else if 93c66, EEPROMAddressNum=8 + RTMP_IO_READ32(pAd, E2PROM_CSR, &data); + DBGPRINT(RT_DEBUG_TRACE, ("--> E2PROM_CSR = 0x%x\n", data)); +@@ -1325,7 +716,7 @@ VOID NICReadEEPROMParameters( + // RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize + // MAC address registers according to E2PROM setting + if (mac_addr == NULL || +- strlen(mac_addr) != 17 || ++ strlen((PSTRING) mac_addr) != 17 || + mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || + mac_addr[11] != ':' || mac_addr[14] != ':') + { +@@ -1347,9 +738,9 @@ VOID NICReadEEPROMParameters( + else + { + INT j; +- PUCHAR macptr; ++ PSTRING macptr; + +- macptr = mac_addr; ++ macptr = (PSTRING) mac_addr; + + for (j=0; jPermanentAddress[0], pAd->PermanentAddress[1], +- pAd->PermanentAddress[2], pAd->PermanentAddress[3], +- pAd->PermanentAddress[4], pAd->PermanentAddress[5])); ++ PRINT_MAC(pAd->PermanentAddress))); + } + } + +@@ -1450,7 +839,8 @@ VOID NICReadEEPROMParameters( + Antenna.word = pAd->EEPROMDefaultValue[0]; + if (Antenna.word == 0xFFFF) + { +- if(IS_RT3090(pAd)) ++#ifdef RT30xx ++ if(IS_RT3090(pAd)|| IS_RT3390(pAd)) + { + Antenna.word = 0; + Antenna.field.RfIcType = RFIC_3020; +@@ -1458,7 +848,9 @@ VOID NICReadEEPROMParameters( + Antenna.field.RxPath = 1; + } + else ++#endif // RT30xx // + { ++ + Antenna.word = 0; + Antenna.field.RfIcType = RFIC_2820; + Antenna.field.TxPath = 1; +@@ -1514,11 +906,26 @@ VOID NICReadEEPROMParameters( + // Save the antenna for future use + pAd->Antenna.word = Antenna.word; + ++ // Set the RfICType here, then we can initialize RFIC related operation callbacks ++ pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; ++ pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; ++ ++#ifdef RTMP_RF_RW_SUPPORT ++ RtmpChipOpsRFHook(pAd); ++#endif // RTMP_RF_RW_SUPPORT // ++ ++#ifdef RTMP_MAC_PCI ++ sprintf((PSTRING) pAd->nickname, "RT2860STA"); ++#endif // RTMP_MAC_PCI // ++ ++ + // + // Reset PhyMode if we don't support 802.11a + // Only RFIC_2850 & RFIC_2750 support 802.11a + // +- if ((Antenna.field.RfIcType != RFIC_2850) && (Antenna.field.RfIcType != RFIC_2750)) ++ if ((Antenna.field.RfIcType != RFIC_2850) ++ && (Antenna.field.RfIcType != RFIC_2750) ++ && (Antenna.field.RfIcType != RFIC_3052)) + { + if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || + (pAd->CommonCfg.PhyMode == PHY_11A)) +@@ -1671,11 +1078,31 @@ VOID NICReadEEPROMParameters( + if ((pAd->ARssiOffset2 < -10) || (pAd->ARssiOffset2 > 10)) + pAd->ARssiOffset2 = 0; + ++#ifdef RT30xx ++ // ++ // Get TX mixer gain setting ++ // 0xff are invalid value ++ // Note: RT30xX default value is 0x00 and will program to RF_R17 only when this value is not zero. ++ // RT359X default value is 0x02 ++ // ++ if (IS_RT30xx(pAd) || IS_RT3572(pAd)) ++ { ++ RT28xx_EEPROM_READ16(pAd, EEPROM_TXMIXER_GAIN_2_4G, value); ++ pAd->TxMixerGain24G = 0; ++ value &= 0x00ff; ++ if (value != 0xff) ++ { ++ value &= 0x07; ++ pAd->TxMixerGain24G = (UCHAR)value; ++ } ++ } ++#endif // RT30xx // ++ + // + // Get LED Setting. + // + RT28xx_EEPROM_READ16(pAd, 0x3a, value); +- pAd->LedCntl.word = (value&0xff00) >> 8; ++ pAd->LedCntl.word = (value>>8); + RT28xx_EEPROM_READ16(pAd, EEPROM_LED1_OFFSET, value); + pAd->Led1 = value; + RT28xx_EEPROM_READ16(pAd, EEPROM_LED2_OFFSET, value); +@@ -1685,6 +1112,12 @@ VOID NICReadEEPROMParameters( + + RTMPReadTxPwrPerRate(pAd); + ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT ++ RtmpEfuseSupportCheck(pAd); ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // ++ + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n")); + } + +@@ -1712,7 +1145,7 @@ VOID NICInitAsicFromEEPROM( + UINT32 data = 0; + UCHAR BBPR1 = 0; + USHORT i; +- EEPROM_ANTENNA_STRUC Antenna; ++// EEPROM_ANTENNA_STRUC Antenna; + EEPROM_NIC_CONFIG2_STRUC NicConfig2; + UCHAR BBPR3 = 0; + +@@ -1729,28 +1162,9 @@ VOID NICInitAsicFromEEPROM( + } + } + +-#ifndef RT2870 +- Antenna.word = pAd->Antenna.word; +-#else +- Antenna.word = pAd->EEPROMDefaultValue[0]; +- if (Antenna.word == 0xFFFF) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("E2PROM error, hard code as 0x%04x\n", Antenna.word)); +- BUG_ON(Antenna.word == 0xFFFF); +- } +-#endif +- pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; +- pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; +- +-#ifdef RT2870 +- DBGPRINT(RT_DEBUG_WARN, ("pAd->RfIcType = %d, RealRxPath=%d, TxPath = %d\n", pAd->RfIcType, pAd->Mlme.RealRxPath,Antenna.field.TxPath)); + +- // Save the antenna for future use +- pAd->Antenna.word = Antenna.word; +-#endif + NicConfig2.word = pAd->EEPROMDefaultValue[1]; + +-#ifdef RT2870 + { + if ((NicConfig2.word & 0x00ff) == 0xff) + { +@@ -1762,15 +1176,16 @@ VOID NICInitAsicFromEEPROM( + NicConfig2.word &= 0x00ff; + } + } +-#endif ++ + // Save the antenna for future use + pAd->NicConfig2.word = NicConfig2.word; + +-#ifdef RT2870 ++#ifdef RT30xx + // set default antenna as main + if (pAd->RfIcType == RFIC_3020) + AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +-#endif ++#endif // RT30xx // ++ + // + // Send LED Setting to MCU. + // +@@ -1779,19 +1194,21 @@ VOID NICInitAsicFromEEPROM( + pAd->LedCntl.word = 0x01; + pAd->Led1 = 0x5555; + pAd->Led2 = 0x2221; +-#ifdef RT2860 +- pAd->Led3 = 0xA9F8; +-#endif + +-#ifdef RT2870 ++#ifdef RTMP_MAC_PCI ++ pAd->Led3 = 0xA9F8; ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + pAd->Led3 = 0x5627; +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + } + + AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8)); + AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR)pAd->Led2, (UCHAR)(pAd->Led2 >> 8)); + AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR)pAd->Led3, (UCHAR)(pAd->Led3 >> 8)); +- pAd->LedIndicatorStregth = 0xFF; ++ AsicSendCommandToMcu(pAd, 0x51, 0xff, 0, pAd->LedCntl.field.Polarity); ++ ++ pAd->LedIndicatorStrength = 0xFF; + RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up + + { +@@ -1806,6 +1223,7 @@ VOID NICInitAsicFromEEPROM( + { + pAd->StaCfg.bHwRadio = FALSE; + pAd->StaCfg.bRadio = FALSE; ++// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + } + } +@@ -1819,26 +1237,29 @@ VOID NICInitAsicFromEEPROM( + else + { + RTMPSetLED(pAd, LED_RADIO_ON); +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00); + // 2-1. wait command ok. + AsicCheckCommanOk(pAd, PowerWakeCID); +-#endif ++#endif // RTMP_MAC_PCI // + } + } + + // Turn off patching for cardbus controller + if (NicConfig2.field.CardbusAcceleration == 1) + { ++// pAd->bTest1 = TRUE; + } + + if (NicConfig2.field.DynamicTxAgcControl == 1) + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE; + else + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; +- +- /* BBP has been programmed so reset to UNKNOWN_BAND */ ++ // ++ // Since BBP has been progamed, to make sure BBP setting will be ++ // upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! ++ // + pAd->CommonCfg.BandState = UNKNOWN_BAND; + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +@@ -1866,10 +1287,53 @@ VOID NICInitAsicFromEEPROM( + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BBPR1); + +- DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", pAd->CommonCfg.bHardwareRadio, pAd->CommonCfg.bHardwareRadio)); ++ DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", ++ pAd->CommonCfg.bHardwareRadio, pAd->CommonCfg.bHardwareRadio)); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, pAd->RfIcType, pAd->LedCntl.word)); ++#ifdef RTMP_MAC_USB ++#ifdef RT30xx ++ // update registers from EEPROM for RT3071 or later(3572/3592). ++ ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ { ++ UCHAR RegIdx, RegValue; ++ USHORT value; ++ ++ // after RT3071, write BBP from EEPROM 0xF0 to 0x102 ++ for (i = 0xF0; i <= 0x102; i = i+2) ++ { ++ value = 0xFFFF; ++ RT28xx_EEPROM_READ16(pAd, i, value); ++ if ((value != 0xFFFF) && (value != 0)) ++ { ++ RegIdx = (UCHAR)(value >> 8); ++ RegValue = (UCHAR)(value & 0xff); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, RegIdx, RegValue); ++ DBGPRINT(RT_DEBUG_TRACE, ("Update BBP Registers from EEPROM(0x%0x), BBP(0x%x) = 0x%x\n", i, RegIdx, RegValue)); ++ } ++ } ++ ++ // after RT3071, write RF from EEPROM 0x104 to 0x116 ++ for (i = 0x104; i <= 0x116; i = i+2) ++ { ++ value = 0xFFFF; ++ RT28xx_EEPROM_READ16(pAd, i, value); ++ if ((value != 0xFFFF) && (value != 0)) ++ { ++ RegIdx = (UCHAR)(value >> 8); ++ RegValue = (UCHAR)(value & 0xff); ++ RT30xxWriteRFRegister(pAd, RegIdx, RegValue); ++ DBGPRINT(RT_DEBUG_TRACE, ("Update RF Registers from EEPROM0x%x), BBP(0x%x) = 0x%x\n", i, RegIdx, RegValue)); ++ } ++ } ++ } ++#endif // RT30xx // ++#endif // RTMP_MAC_USB // ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", ++ pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, ++ pAd->RfIcType, pAd->LedCntl.word)); + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n")); + } + +@@ -1897,10 +1361,11 @@ NDIS_STATUS NICInitializeAdapter( + { + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + WPDMA_GLO_CFG_STRUC GloCfg; +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + UINT32 Value; + DELAY_INT_CFG_STRUC IntCfg; +-#endif ++#endif // RTMP_MAC_PCI // ++// INT_MASK_CSR_STRUC IntMask; + ULONG i =0, j=0; + AC_TXOP_CSR0_STRUC csr0; + +@@ -1939,11 +1404,11 @@ retry: + + // asic simulation sequence put this ahead before loading firmware. + // pbf hardware reset +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); // 0x10000 for reset rx, 0x3f resets all 6 tx rings. + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f); + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00); +-#endif ++#endif // RTMP_MAC_PCI // + + // Initialze ASIC for TX & Rx operation + if (NICInitializeAsic(pAd , bHardReset) != NDIS_STATUS_SUCCESS) +@@ -1957,7 +1422,7 @@ retry: + } + + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + // Write AC_BK base address register + Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value); +@@ -2030,7 +1495,7 @@ retry: + // Write RX_RING_CSR register + Value = RX_RING_SIZE; + RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value); +-#endif /* RT2860 */ ++#endif // RTMP_MAC_PCI // + + + // WMM parameter +@@ -2049,7 +1514,7 @@ retry: + RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word); + + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: + i = 0; + do +@@ -2068,7 +1533,7 @@ retry: + + IntCfg.word = 0; + RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word); +-#endif ++#endif // RTMP_MAC_PCI // + + + // reset action +@@ -2104,26 +1569,44 @@ NDIS_STATUS NICInitializeAsic( + ULONG Index = 0; + UCHAR R0 = 0xff; + UINT32 MacCsr12 = 0, Counter = 0; +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + UINT32 MacCsr0 = 0; + NTSTATUS Status; + UCHAR Value = 0xff; +- UINT32 eFuseCtrl; +-#endif ++#endif // RTMP_MAC_USB // ++#ifdef RT30xx ++ UCHAR bbpreg=0; ++ UCHAR RFValue=0; ++#endif // RT30xx // + USHORT KeyIdx; + INT i,apidx; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n")); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI ++ RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x3); // To fix driver disable/enable hang issue when radio off + if (bHardReset == TRUE) + { + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3); + } + else + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); +-#endif +-#ifdef RT2870 ++ ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); ++ // Initialize MAC register to default value ++ for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) ++ { ++ RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value); ++ } ++ ++ { ++ for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) ++ { ++ RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, STAMACRegTable[Index].Value); ++ } ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + // + // Make sure MAC gets ready after NICLoadFirmware(). + // +@@ -2151,44 +1634,32 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3); + RTMP_IO_WRITE32(pAd, USB_DMA_CFG, 0x0); + Status = RTUSBVenderReset(pAd); +-#endif + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); + + // Initialize MAC register to default value +-#ifdef RT2860 +- for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) +- { +- RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value); +- } +-#endif +-#ifdef RT2870 + for(Index=0; IndexNicConfig2.field.DACTestBit == 1) + { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x1F); // To fix throughput drop drastically ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically + } + else + { +@@ -2209,11 +1680,17 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0); + } + } +-#ifdef RT2870 + else if (IS_RT3070(pAd)) + { ++ if (((pAd->MACVersion & 0xffff) < 0x0201)) ++ { + RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x1F); // To fix throughput drop drastically ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically ++ } ++ else ++ { ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0); ++ } + } + #endif // RT30xx // + +@@ -2256,28 +1733,42 @@ NDIS_STATUS NICInitializeAsic( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value); + } + +-#ifndef RT2870 +- // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. +- if ((pAd->MACVersion&0xffff) != 0x0101) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); +-#else ++#ifdef RTMP_MAC_PCI ++ // TODO: shiang, check MACVersion, currently, rbus-based chip use this. ++ if (pAd->MACVersion == 0x28720200) ++ { ++ //UCHAR value; ++ ULONG value2; ++ ++ //disable MLD by Bruce 20080704 ++ //BBP_IO_READ8_BY_REG_ID(pAd, BBP_R105, &value); ++ //BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R105, value | 4); ++ ++ //Maximum PSDU length from 16K to 32K bytes ++ RTMP_IO_READ32(pAd, MAX_LEN_CFG, &value2); ++ value2 &= ~(0x3<<12); ++ value2 |= (0x2<<12); ++ RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, value2); ++ } ++#endif // RTMP_MAC_PCI // ++ + // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. + // RT3090 should not program BBP R84 to 0x19, otherwise TX will block. +- if (((pAd->MACVersion&0xffff) != 0x0101) && (!IS_RT30xx(pAd))) ++ //3070/71/72,3090,3090A( are included in RT30xx),3572,3390 ++ if (((pAd->MACVersion & 0xffff) != 0x0101) && !(IS_RT30xx(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd))) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); + ++#ifdef RT30xx + // add by johnli, RF power sequence setup +- if (IS_RT30xx(pAd)) +- { //update for RT3070/71/72/90/91/92. ++ if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ { //update for RT3070/71/72/90/91/92,3572,3390. + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R79, 0x13); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R80, 0x05); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R81, 0x33); + } + +- if (IS_RT3090(pAd)) ++ if (IS_RT3090(pAd)||IS_RT3390(pAd)) // RT309x, RT3071/72 + { +- UCHAR bbpreg=0; +- + // enable DC filter + if ((pAd->MACVersion & 0xffff) >= 0x0211) + { +@@ -2307,7 +1798,38 @@ NDIS_STATUS NICInitializeAsic( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); + } + } +-#endif ++ else if (IS_RT3070(pAd)) ++ { ++ if ((pAd->MACVersion & 0xffff) >= 0x0201) ++ { ++ // enable DC filter ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); ++ ++ // improve power consumption in RT3070 Ver.F ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); ++ bbpreg &= (~0x3); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); ++ } ++ ++ // TX_LO1_en, RF R17 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R17, &RFValue); ++ RFValue &= (~0x08); ++ // to fix rx long range issue ++ if (pAd->NicConfig2.field.ExternalLNAForG == 0) ++ { ++ RFValue |= 0x20; ++ } ++ // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ if (pAd->TxMixerGain24G >= 1) ++ { ++ RFValue &= (~0x7); // clean bit [2:0] ++ RFValue |= pAd->TxMixerGain24G; ++ } ++ RT30xxWriteRFRegister(pAd, RF_R17, RFValue); ++ } ++// end johnli ++#endif // RT30xx // ++ + if (pAd->MACVersion == 0x28600100) + { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +@@ -2324,7 +1846,7 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, csr); + } + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + { + UCHAR MAC_Value[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0,0}; + +@@ -2335,7 +1857,7 @@ NDIS_STATUS NICInitializeAsic( + RTUSBMultiWrite(pAd, (USHORT)(MAC_WCID_BASE + Index * 8), MAC_Value, 8); + } + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + // Add radio off control + { +@@ -2356,7 +1878,7 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter); + + // ASIC will keep garbage value after boot +- // Clear all seared key table when initial ++ // Clear all shared key table when initial + // This routine can be ignored in radio-ON/OFF operation. + if (bHardReset) + { +@@ -2372,6 +1894,9 @@ NDIS_STATUS NICInitializeAsic( + } + } + ++ // assert HOST ready bit ++// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark ++// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4); + + // It isn't necessary to clear this space when not hard reset. + if (bHardReset == TRUE) +@@ -2383,7 +1908,8 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[apidx] + i, 0x00); + } + } +-#ifdef RT2870 ++ ++#ifdef RTMP_MAC_USB + AsicDisableSync(pAd); + // Clear raw counters + RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter); +@@ -2397,19 +1923,7 @@ NDIS_STATUS NICInitializeAsic( + Counter&=0xffffff00; + Counter|=0x000001e; + RTMP_IO_WRITE32(pAd, USB_CYC_CFG, Counter); +- +- pAd->bUseEfuse=FALSE; +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrl); +- pAd->bUseEfuse = ( (eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0; +- if(pAd->bUseEfuse) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("NVM is Efuse\n")); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); +- } +-#endif ++#endif // RTMP_MAC_USB // + + { + // for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT. +@@ -2421,133 +1935,6 @@ NDIS_STATUS NICInitializeAsic( + return NDIS_STATUS_SUCCESS; + } + +- +-#ifdef RT2860 +-VOID NICRestoreBBPValue( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR index; +- UCHAR Value = 0; +- ULONG Data; +- +- DBGPRINT(RT_DEBUG_TRACE, ("---> NICRestoreBBPValue !!!!!!!!!!!!!!!!!!!!!!! \n")); +- // Initialize BBP register to default value (rtmp_init.c) +- for (index = 0; index < NUM_BBP_REG_PARMS; index++) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[index].Register, BBPRegTable[index].Value); +- } +- // copy from (rtmp_init.c) +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); +- } +- +- // copy from (connect.c LinkUp function) +- if (INFRA_ON(pAd)) +- { +- // Change to AP channel +- if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- // RX : control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- // Record BBPR3 setting, But don't keep R Antenna # information. +- pAd->StaCfg.BBPR3 = Value; +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data |= 0x1; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value |= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- // Record BBPR3 setting, But don't keep R Antenna # information. +- pAd->StaCfg.BBPR3 = Value; +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else +- { +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- // Record BBPR3 setting, But don't keep R Antenna # information. +- pAd->StaCfg.BBPR3 = Value; +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!20MHz LINK UP !!! \n" )); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<--- NICRestoreBBPValue !!!!!!!!!!!!!!!!!!!!!!! \n")); +-} +-#endif /* RT2860 */ +- + /* + ======================================================================== + +@@ -2573,6 +1960,9 @@ VOID NICIssueReset( + UINT32 Value = 0; + DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); + ++ // Abort Tx, prevent ASIC from writing to Host memory ++ //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x001f0000); ++ + // Disable Rx, register value supposed will remain after reset + RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); + Value &= (0xfffffff3); +@@ -2644,10 +2034,6 @@ VOID NICUpdateFifoStaCounters( + if (StaFifo.field.TxBF) // 3*3 + pEntry->TxBFCount++; + +-#ifdef UAPSD_AP_SUPPORT +- UAPSD_SP_AUE_Handle(pAd, pEntry, StaFifo.field.TxSuccess); +-#endif // UAPSD_AP_SUPPORT // +- + if (!StaFifo.field.TxSuccess) + { + pEntry->FIFOCount++; +@@ -2676,7 +2062,9 @@ VOID NICUpdateFifoStaCounters( + pEntry->FIFOCount = 0; + pEntry->ContinueTxFailCnt = 0; + } ++ //pEntry->FIFOCount = 0; + } ++ //pEntry->bSendBAR = TRUE; + } + else + { +@@ -2752,7 +2140,9 @@ VOID NICUpdateFifoStaCounters( + VOID NICUpdateRawCounters( + IN PRTMP_ADAPTER pAd) + { +- UINT32 OldValue; ++ UINT32 OldValue;//, Value2; ++ //ULONG PageSum, OneSecTransmitCount; ++ //ULONG TxErrorRatio, Retry, Fail; + RX_STA_CNT0_STRUC RxStaCnt0; + RX_STA_CNT1_STRUC RxStaCnt1; + RX_STA_CNT2_STRUC RxStaCnt2; +@@ -2768,6 +2158,10 @@ VOID NICUpdateRawCounters( + TX_AGG_CNT5_STRUC TxAggCnt5; + TX_AGG_CNT6_STRUC TxAggCnt6; + TX_AGG_CNT7_STRUC TxAggCnt7; ++ COUNTER_RALINK *pRalinkCounters; ++ ++ ++ pRalinkCounters = &pAd->RalinkCounters; + + RTMP_IO_READ32(pAd, RX_STA_CNT0, &RxStaCnt0.word); + RTMP_IO_READ32(pAd, RX_STA_CNT2, &RxStaCnt2.word); +@@ -2787,22 +2181,23 @@ VOID NICUpdateRawCounters( + pAd->WlanCounters.FCSErrorCount.u.HighPart++; + + // Add FCS error count to private counters +- pAd->RalinkCounters.OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr; +- OldValue = pAd->RalinkCounters.RealFcsErrCount.u.LowPart; +- pAd->RalinkCounters.RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr; +- if (pAd->RalinkCounters.RealFcsErrCount.u.LowPart < OldValue) +- pAd->RalinkCounters.RealFcsErrCount.u.HighPart++; ++ pRalinkCounters->OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr; ++ OldValue = pRalinkCounters->RealFcsErrCount.u.LowPart; ++ pRalinkCounters->RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr; ++ if (pRalinkCounters->RealFcsErrCount.u.LowPart < OldValue) ++ pRalinkCounters->RealFcsErrCount.u.HighPart++; + + // Update Duplicate Rcv check +- pAd->RalinkCounters.DuplicateRcv += RxStaCnt2.field.RxDupliCount; ++ pRalinkCounters->DuplicateRcv += RxStaCnt2.field.RxDupliCount; + pAd->WlanCounters.FrameDuplicateCount.u.LowPart += RxStaCnt2.field.RxDupliCount; + // Update RX Overflow counter + pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount); + +-#ifdef RT2870 +- if (pAd->RalinkCounters.RxCount != pAd->watchDogRxCnt) ++ //pAd->RalinkCounters.RxCount = 0; ++#ifdef RTMP_MAC_USB ++ if (pRalinkCounters->RxCount != pAd->watchDogRxCnt) + { +- pAd->watchDogRxCnt = pAd->RalinkCounters.RxCount; ++ pAd->watchDogRxCnt = pRalinkCounters->RxCount; + pAd->watchDogRxOverFlowCnt = 0; + } + else +@@ -2812,24 +2207,28 @@ VOID NICUpdateRawCounters( + else + pAd->watchDogRxOverFlowCnt = 0; + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + ++ //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || ++ // (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) + if (!pAd->bUpdateBcnCntDone) + { + // Update BEACON sent count + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); + RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word); +- pAd->RalinkCounters.OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount; +- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount; ++ pRalinkCounters->OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount; ++ pRalinkCounters->OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; ++ pRalinkCounters->OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; ++ pRalinkCounters->OneSecTxFailCount += TxStaCnt0.field.TxFailCount; + pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; + pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; + pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; + } + ++ ++ //if (pAd->bStaFifoTest == TRUE) + { + RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word); + RTMP_IO_READ32(pAd, TX_AGG_CNT0, &TxAggCnt0.word); +@@ -2840,53 +2239,53 @@ VOID NICUpdateRawCounters( + RTMP_IO_READ32(pAd, TX_AGG_CNT5, &TxAggCnt5.word); + RTMP_IO_READ32(pAd, TX_AGG_CNT6, &TxAggCnt6.word); + RTMP_IO_READ32(pAd, TX_AGG_CNT7, &TxAggCnt7.word); +- pAd->RalinkCounters.TxAggCount += TxAggCnt.field.AggTxCount; +- pAd->RalinkCounters.TxNonAggCount += TxAggCnt.field.NonAggTxCount; +- pAd->RalinkCounters.TxAgg1MPDUCount += TxAggCnt0.field.AggSize1Count; +- pAd->RalinkCounters.TxAgg2MPDUCount += TxAggCnt0.field.AggSize2Count; ++ pRalinkCounters->TxAggCount += TxAggCnt.field.AggTxCount; ++ pRalinkCounters->TxNonAggCount += TxAggCnt.field.NonAggTxCount; ++ pRalinkCounters->TxAgg1MPDUCount += TxAggCnt0.field.AggSize1Count; ++ pRalinkCounters->TxAgg2MPDUCount += TxAggCnt0.field.AggSize2Count; + +- pAd->RalinkCounters.TxAgg3MPDUCount += TxAggCnt1.field.AggSize3Count; +- pAd->RalinkCounters.TxAgg4MPDUCount += TxAggCnt1.field.AggSize4Count; +- pAd->RalinkCounters.TxAgg5MPDUCount += TxAggCnt2.field.AggSize5Count; +- pAd->RalinkCounters.TxAgg6MPDUCount += TxAggCnt2.field.AggSize6Count; ++ pRalinkCounters->TxAgg3MPDUCount += TxAggCnt1.field.AggSize3Count; ++ pRalinkCounters->TxAgg4MPDUCount += TxAggCnt1.field.AggSize4Count; ++ pRalinkCounters->TxAgg5MPDUCount += TxAggCnt2.field.AggSize5Count; ++ pRalinkCounters->TxAgg6MPDUCount += TxAggCnt2.field.AggSize6Count; + +- pAd->RalinkCounters.TxAgg7MPDUCount += TxAggCnt3.field.AggSize7Count; +- pAd->RalinkCounters.TxAgg8MPDUCount += TxAggCnt3.field.AggSize8Count; +- pAd->RalinkCounters.TxAgg9MPDUCount += TxAggCnt4.field.AggSize9Count; +- pAd->RalinkCounters.TxAgg10MPDUCount += TxAggCnt4.field.AggSize10Count; ++ pRalinkCounters->TxAgg7MPDUCount += TxAggCnt3.field.AggSize7Count; ++ pRalinkCounters->TxAgg8MPDUCount += TxAggCnt3.field.AggSize8Count; ++ pRalinkCounters->TxAgg9MPDUCount += TxAggCnt4.field.AggSize9Count; ++ pRalinkCounters->TxAgg10MPDUCount += TxAggCnt4.field.AggSize10Count; + +- pAd->RalinkCounters.TxAgg11MPDUCount += TxAggCnt5.field.AggSize11Count; +- pAd->RalinkCounters.TxAgg12MPDUCount += TxAggCnt5.field.AggSize12Count; +- pAd->RalinkCounters.TxAgg13MPDUCount += TxAggCnt6.field.AggSize13Count; +- pAd->RalinkCounters.TxAgg14MPDUCount += TxAggCnt6.field.AggSize14Count; ++ pRalinkCounters->TxAgg11MPDUCount += TxAggCnt5.field.AggSize11Count; ++ pRalinkCounters->TxAgg12MPDUCount += TxAggCnt5.field.AggSize12Count; ++ pRalinkCounters->TxAgg13MPDUCount += TxAggCnt6.field.AggSize13Count; ++ pRalinkCounters->TxAgg14MPDUCount += TxAggCnt6.field.AggSize14Count; + +- pAd->RalinkCounters.TxAgg15MPDUCount += TxAggCnt7.field.AggSize15Count; +- pAd->RalinkCounters.TxAgg16MPDUCount += TxAggCnt7.field.AggSize16Count; ++ pRalinkCounters->TxAgg15MPDUCount += TxAggCnt7.field.AggSize15Count; ++ pRalinkCounters->TxAgg16MPDUCount += TxAggCnt7.field.AggSize16Count; + + // Calculate the transmitted A-MPDU count +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += TxAggCnt0.field.AggSize1Count; +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt0.field.AggSize2Count / 2); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += TxAggCnt0.field.AggSize1Count; ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt0.field.AggSize2Count / 2); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize3Count / 3); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize4Count / 4); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize3Count / 3); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize4Count / 4); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize5Count / 5); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize6Count / 6); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize5Count / 5); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize6Count / 6); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize7Count / 7); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize8Count / 8); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize7Count / 7); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize8Count / 8); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize9Count / 9); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize10Count / 10); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize9Count / 9); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize10Count / 10); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize11Count / 11); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize12Count / 12); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize11Count / 11); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize12Count / 12); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize13Count / 13); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize14Count / 14); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize13Count / 13); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize14Count / 14); + +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize15Count / 15); +- pAd->RalinkCounters.TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize16Count / 16); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize15Count / 15); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize16Count / 16); + } + + +@@ -2932,112 +2331,38 @@ VOID NICResetFromError( + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } + +-/* +- ======================================================================== +- +- Routine Description: +- erase 8051 firmware image in MAC ASIC +- +- Arguments: +- Adapter Pointer to our adapter +- +- IRQL = PASSIVE_LEVEL + +- ======================================================================== +-*/ +-VOID NICEraseFirmware( ++NDIS_STATUS NICLoadFirmware( + IN PRTMP_ADAPTER pAd) + { +- ULONG i; ++ NDIS_STATUS status = NDIS_STATUS_SUCCESS; ++ if (pAd->chipOps.loadFirmware) ++ status = pAd->chipOps.loadFirmware(pAd); + +- for(i=0; iMACVersion >> 16); +-#endif // RT2870 // +- +- pFirmwareImage = FirmwareImage; +- FileLength = sizeof(FirmwareImage); +-#ifdef RT2870 +- // New 8k byte firmware size for RT3071/RT3072 +- //printk("Usb Chip\n"); +- if (FIRMWAREIMAGE_LENGTH == FIRMWAREIMAGE_MAX_LENGTH) +- //The firmware image consists of two parts. One is the origianl and the other is the new. +- //Use Second Part +- { +- if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) +- { // Use Firmware V2. +- //printk("KH:Use New Version,part2\n"); +- pFirmwareImage = (PUCHAR)&FirmwareImage[FIRMWAREIMAGEV1_LENGTH]; +- FileLength = FIRMWAREIMAGEV2_LENGTH; +- } +- else +- { +- //printk("KH:Use New Version,part1\n"); +- pFirmwareImage = FirmwareImage; +- FileLength = FIRMWAREIMAGEV1_LENGTH; +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("KH: bin file should be 8KB.\n")); +- Status = NDIS_STATUS_FAILURE; +- } ++ if (pAd->chipOps.eraseFirmware) ++ pAd->chipOps.eraseFirmware(pAd); + +-#endif // RT2870 // +- +- RT28XX_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); +- +- /* check if MCU is ready */ +- Index = 0; +- do +- { +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacReg); +- +- if (MacReg & 0x80) +- break; +- +- RTMPusecDelay(1000); +- } while (Index++ < 1000); +- +- if (Index > 1000) +- { +- Status = NDIS_STATUS_FAILURE; +- DBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware: MCU is not ready\n\n\n")); +- } /* End of if */ +- +- DBGPRINT(RT_DEBUG_TRACE, +- ("<=== %s (status=%d)\n", __func__, Status)); +- return Status; +-} /* End of NICLoadFirmware */ ++}/* End of NICEraseFirmware */ + + + /* +@@ -3067,52 +2392,6 @@ NDIS_STATUS NICLoadRateSwitchingParams( + return NDIS_STATUS_SUCCESS; + } + +-/* +- ======================================================================== +- +- Routine Description: +- if pSrc1 all zero with length Length, return 0. +- If not all zero, return 1 +- +- Arguments: +- pSrc1 +- +- Return Value: +- 1: not all zero +- 0: all zero +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-ULONG RTMPNotAllZero( +- IN PVOID pSrc1, +- IN ULONG Length) +-{ +- PUCHAR pMem1; +- ULONG Index = 0; +- +- pMem1 = (PUCHAR) pSrc1; +- +- for (Index = 0; Index < Length; Index++) +- { +- if (pMem1[Index] != 0x0) +- { +- break; +- } +- } +- +- if (Index == Length) +- { +- return (0); +- } +- else +- { +- return (1); +- } +-} + + /* + ======================================================================== +@@ -3194,21 +2473,6 @@ VOID RTMPZeroMemory( + } + } + +-VOID RTMPFillMemory( +- IN PVOID pSrc, +- IN ULONG Length, +- IN UCHAR Fill) +-{ +- PUCHAR pMem; +- ULONG Index = 0; +- +- pMem = (PUCHAR) pSrc; +- +- for (Index = 0; Index < Length; Index++) +- { +- pMem[Index] = Fill; +- } +-} + + /* + ======================================================================== +@@ -3279,7 +2543,7 @@ VOID UserCfgInit( + // + // part I. intialize common configuration + // +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + pAd->BulkOutReq = 0; + + pAd->BulkOutComplete = 0; +@@ -3294,7 +2558,7 @@ VOID UserCfgInit( + pAd->bUsbTxBulkAggre = 0; + + // init as unsed value to ensure driver will set to MCU once. +- pAd->LedIndicatorStregth = 0xFF; ++ pAd->LedIndicatorStrength = 0xFF; + + pAd->CommonCfg.MaxPktOneTxBulk = 2; + pAd->CommonCfg.TxBulkFactor = 1; +@@ -3303,7 +2567,7 @@ VOID UserCfgInit( + pAd->CommonCfg.TxPower = 100; //mW + + NdisZeroMemory(&pAd->CommonCfg.IOTestParm, sizeof(pAd->CommonCfg.IOTestParm)); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + for(key_index=0; key_indexEepromAccess = FALSE; +-#endif ++ + pAd->Antenna.word = 0; + pAd->CommonCfg.BBPCurrentBW = BW_20; + + pAd->LedCntl.word = 0; +-#ifdef RT2860 +- pAd->LedIndicatorStregth = 0; ++#ifdef RTMP_MAC_PCI ++ pAd->LedIndicatorStrength = 0; + pAd->RLnkCtrlOffset = 0; + pAd->HostLnkCtrlOffset = 0; +- pAd->CheckDmaBusyCount = 0; +-#endif ++#endif // RTMP_MAC_PCI // + + pAd->bAutoTxAgcA = FALSE; // Default is OFF + pAd->bAutoTxAgcG = FALSE; // Default is OFF +@@ -3355,6 +2617,10 @@ VOID UserCfgInit( + pAd->CommonCfg.RadarDetect.CSPeriod = 10; + pAd->CommonCfg.RadarDetect.CSCount = 0; + pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; ++ ++ ++ ++ + pAd->CommonCfg.RadarDetect.ChMovingTime = 65; + pAd->CommonCfg.RadarDetect.LongPulseRadarTh = 3; + pAd->CommonCfg.bAPSDCapable = FALSE; +@@ -3386,10 +2652,18 @@ VOID UserCfgInit( + pAd->CommonCfg.bExtChannelSwitchAnnouncement = 1; + pAd->CommonCfg.bHTProtect = 1; + pAd->CommonCfg.bMIMOPSEnable = TRUE; ++ //2008/11/05:KH add to support Antenna power-saving of AP<-- ++ pAd->CommonCfg.bGreenAPEnable=FALSE; ++ //2008/11/05:KH add to support Antenna power-saving of AP--> + pAd->CommonCfg.bBADecline = FALSE; + pAd->CommonCfg.bDisableReordering = FALSE; + ++ if (pAd->MACVersion == 0x28720200) ++ { ++ pAd->CommonCfg.TxBASize = 13; //by Jerry recommend ++ }else{ + pAd->CommonCfg.TxBASize = 7; ++ } + + pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word; + +@@ -3467,12 +2741,6 @@ VOID UserCfgInit( + // Patch for Ndtest + pAd->StaCfg.ScanCnt = 0; + +- // CCX 2.0 control flag init +- pAd->StaCfg.CCXEnable = FALSE; +- pAd->StaCfg.CCXReqType = MSRN_TYPE_UNUSED; +- pAd->StaCfg.CCXQosECWMin = 4; +- pAd->StaCfg.CCXQosECWMax = 10; +- + pAd->StaCfg.bHwRadio = TRUE; // Default Hardware Radio status is On + pAd->StaCfg.bSwRadio = TRUE; // Default Software Radio status is On + pAd->StaCfg.bRadio = TRUE; // bHwRadio && bSwRadio +@@ -3484,14 +2752,31 @@ VOID UserCfgInit( + + // Save the init time as last scan time, the system should do scan after 2 seconds. + // This patch is for driver wake up from standby mode, system will do scan right away. +- pAd->StaCfg.LastScanTime = 0; ++ NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); ++ if (pAd->StaCfg.LastScanTime > 10 * OS_HZ) ++ pAd->StaCfg.LastScanTime -= (10 * OS_HZ); ++ + NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE+1); +- sprintf(pAd->nickname, "%s", STA_NIC_DEVICE_NAME); ++#ifdef RTMP_MAC_USB ++ sprintf((PSTRING) pAd->nickname, "RT2870STA"); ++#endif // RTMP_MAC_USB // + RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), pAd, FALSE); + pAd->StaCfg.IEEE8021X = FALSE; + pAd->StaCfg.IEEE8021x_required_keys = FALSE; + pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; ++ pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; + pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE; ++ pAd->StaCfg.bLostAp = FALSE; ++ ++ NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); ++ ++ ++ pAd->StaCfg.bAutoConnectByBssid = FALSE; ++ pAd->StaCfg.BeaconLostTime = BEACON_LOST_TIME; ++ NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); ++ pAd->StaCfg.WpaPassPhraseLen = 0; ++ pAd->StaCfg.bAutoRoaming = FALSE; ++ pAd->StaCfg.bForceTxBurst = FALSE; + } + + // Default for extra information is not valid +@@ -3524,22 +2809,30 @@ VOID UserCfgInit( + pAd->Bbp94 = BBPR94_DEFAULT; + pAd->BbpForCCK = FALSE; + ++ // Default is FALSE for test bit 1 ++ //pAd->bTest1 = FALSE; ++ + // initialize MAC table and allocate spin lock + NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); + InitializeQueueHeader(&pAd->MacTab.McastPsQueue); + NdisAllocateSpinLock(&pAd->MacTabLock); + ++ //RTMPInitTimer(pAd, &pAd->RECBATimer, RECBATimerTimeout, pAd, TRUE); ++ //RTMPSetTimer(&pAd->RECBATimer, REORDER_EXEC_INTV); ++ ++ ++ + pAd->CommonCfg.bWiFiTest = FALSE; +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; ++#endif // RTMP_MAC_PCI // + +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#endif ++RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n")); + } + + // IRQL = PASSIVE_LEVEL +-UCHAR BtoH(char ch) ++UCHAR BtoH(STRING ch) + { + if (ch >= '0' && ch <= '9') return (ch - '0'); // Handle numerals + if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA); // Handle capitol hex digits +@@ -3564,9 +2857,9 @@ UCHAR BtoH(char ch) + // + // IRQL = PASSIVE_LEVEL + +-void AtoH(char * src, UCHAR * dest, int destlen) ++void AtoH(PSTRING src, PUCHAR dest, int destlen) + { +- char * srcptr; ++ PSTRING srcptr; + PUCHAR destTemp; + + srcptr = src; +@@ -3580,24 +2873,10 @@ void AtoH(char * src, UCHAR * dest, int destlen) + } + } + +-VOID RTMPPatchMacBbpBug( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG Index; + +- // Initialize BBP register to default value +- for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, (UCHAR)BBPRegTable[Index].Value); +- } ++//+++Mark by shiang, not use now, need to remove after confirm ++//---Mark by shiang, not use now, need to remove after confirm + +- // Initialize RF register to default value +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- // Re-init BBP register from EEPROM value +- NICInitAsicFromEEPROM(pAd); +-} + + /* + ======================================================================== +@@ -3636,9 +2915,9 @@ VOID RTMPInitTimer( + pTimer->State = FALSE; + pTimer->cookie = (ULONG) pData; + +-#ifdef RT2870 ++#ifdef RTMP_TIMER_TASK_SUPPORT + pTimer->pAd = pAd; +-#endif // RT2870 // ++#endif // RTMP_TIMER_TASK_SUPPORT // + + RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); + } +@@ -3760,24 +3039,20 @@ VOID RTMPCancelTimer( + { + if (pTimer->State == FALSE) + pTimer->Repeat = FALSE; ++ + RTMP_OS_Del_Timer(&pTimer->TimerObj, pCancelled); + + if (*pCancelled == TRUE) + pTimer->State = TRUE; + +-#ifdef RT2870 ++#ifdef RTMP_TIMER_TASK_SUPPORT + // We need to go-through the TimerQ to findout this timer handler and remove it if + // it's still waiting for execution. +- +- RT2870_TimerQ_Remove(pTimer->pAd, pTimer); +-#endif // RT2870 // ++ RtmpTimerQRemove(pTimer->pAd, pTimer); ++#endif // RTMP_TIMER_TASK_SUPPORT // + } + else + { +- // +- // NdisMCancelTimer just canced the timer and not mean release the timer. +- // And don't set the "Valid" to False. So that we can use this timer again. +- // + DBGPRINT_ERR(("RTMPCancelTimer failed, Timer hasn't been initialize!\n")); + } + } +@@ -3816,7 +3091,7 @@ VOID RTMPSetLED( + case LED_LINK_DOWN: + HighByte = 0x20; + AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- pAd->LedIndicatorStregth = 0; ++ pAd->LedIndicatorStrength = 0; + break; + case LED_LINK_UP: + if (pAd->CommonCfg.Channel > 14) +@@ -3895,14 +3170,8 @@ VOID RTMPSetSignalLED( + { + UCHAR nLed = 0; + +- // +- // if not Signal Stregth, then do nothing. +- // +- if (pAd->LedCntl.field.LedMode != LED_MODE_SIGNAL_STREGTH) ++ if (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH) + { +- return; +- } +- + if (Dbm <= -90) + nLed = 0; + else if (Dbm <= -81) +@@ -3919,10 +3188,11 @@ VOID RTMPSetSignalLED( + // + // Update Signal Stregth to firmware if changed. + // +- if (pAd->LedIndicatorStregth != nLed) ++ if (pAd->LedIndicatorStrength != nLed) + { + AsicSendCommandToMcu(pAd, 0x51, 0xff, nLed, pAd->LedCntl.field.Polarity); +- pAd->LedIndicatorStregth = nLed; ++ pAd->LedIndicatorStrength = nLed; ++ } + } + } + +@@ -3947,6 +3217,10 @@ VOID RTMPSetSignalLED( + VOID RTMPEnableRxTx( + IN PRTMP_ADAPTER pAd) + { ++// WPDMA_GLO_CFG_STRUC GloCfg; ++// ULONG i = 0; ++ UINT32 rx_filter_flag; ++ + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n")); + + // Enable Rx DMA. +@@ -3955,14 +3229,18 @@ VOID RTMPEnableRxTx( + // enable RX of MAC block + if (pAd->OpMode == OPMODE_AP) + { +- UINT32 rx_filter_flag = APNORMAL; ++ rx_filter_flag = APNORMAL; + + + RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); // enable RX of DMA block + } + else + { +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL); // Staion not drop control frame will fail WiFi Certification. ++ if (pAd->CommonCfg.PSPXlink) ++ rx_filter_flag = PSPXLINK; ++ else ++ rx_filter_flag = STANORMAL; // Staion not drop control frame will fail WiFi Certification. ++ RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); + } + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xc); +@@ -3970,3 +3248,380 @@ VOID RTMPEnableRxTx( + } + + ++//+++Add by shiang, move from os/linux/rt_main_dev.c ++void CfgInitHook(PRTMP_ADAPTER pAd) ++{ ++ pAd->bBroadComHT = TRUE; ++} ++ ++ ++int rt28xx_init( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING pDefaultMac, ++ IN PSTRING pHostName) ++{ ++ UINT index; ++ UCHAR TmpPhy; ++ NDIS_STATUS Status; ++ UINT32 MacCsr0 = 0; ++ ++ ++#ifdef RTMP_MAC_PCI ++ { ++ // If dirver doesn't wake up firmware here, ++ // NICLoadFirmware will hang forever when interface is up again. ++ // RT2860 PCI ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ AsicForceWakeup(pAd, TRUE); ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ } ++ } ++#endif // RTMP_MAC_PCI // ++ ++ ++ // reset Adapter flags ++ RTMP_CLEAR_FLAGS(pAd); ++ ++ // Init BssTab & ChannelInfo tabbles for auto channel select. ++ ++ // Allocate BA Reordering memory ++ ba_reordering_resource_init(pAd, MAX_REORDERING_MPDU_NUM); ++ ++ // Make sure MAC gets ready. ++ index = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); ++ pAd->MACVersion = MacCsr0; ++ ++ if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) ++ break; ++ ++ RTMPusecDelay(10); ++ } while (index++ < 100); ++ DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); ++ ++#ifdef RTMP_MAC_PCI ++ ++ // To fix driver disable/enable hang issue when radio off ++ RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x2); ++#endif // RTMP_MAC_PCI // ++ ++ // Disable DMA ++ RT28XXDMADisable(pAd); ++ ++ ++ // Load 8051 firmware ++ Status = NICLoadFirmware(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", Status)); ++ goto err1; ++ } ++ ++ NICLoadRateSwitchingParams(pAd); ++ ++ // Disable interrupts here which is as soon as possible ++ // This statement should never be true. We might consider to remove it later ++#ifdef RTMP_MAC_PCI ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) ++ { ++ RTMP_ASIC_INTERRUPT_DISABLE(pAd); ++ } ++#endif // RTMP_MAC_PCI // ++ ++ Status = RTMPAllocTxRxRingMemory(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT_ERR(("RTMPAllocDMAMemory failed, Status[=0x%08x]\n", Status)); ++ goto err1; ++ } ++ ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); ++ ++ // initialize MLME ++ // ++ ++ Status = RtmpMgmtTaskInit(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ goto err2; ++ ++ Status = MlmeInit(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT_ERR(("MlmeInit failed, Status[=0x%08x]\n", Status)); ++ goto err2; ++ } ++ ++ // Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default ++ // ++ UserCfgInit(pAd); ++ Status = RtmpNetTaskInit(pAd); ++ if (Status != NDIS_STATUS_SUCCESS) ++ goto err3; ++ ++// COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); ++// pAd->bForcePrintTX = TRUE; ++ ++ CfgInitHook(pAd); ++ ++ NdisAllocateSpinLock(&pAd->MacTabLock); ++ ++ MeasureReqTabInit(pAd); ++ TpcReqTabInit(pAd); ++ ++ // ++ // Init the hardware, we need to init asic before read registry, otherwise mac register will be reset ++ // ++ Status = NICInitializeAdapter(pAd, TRUE); ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", Status)); ++ if (Status != NDIS_STATUS_SUCCESS) ++ goto err3; ++ } ++ ++ // Read parameters from Config File ++ Status = RTMPReadParametersHook(pAd); ++ ++ DBGPRINT(RT_DEBUG_OFF, ("1. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); ++ if (Status != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT_ERR(("NICReadRegParameters failed, Status[=0x%08x]\n",Status)); ++// goto err4; ++ Status = 0; ++ } ++ ++#ifdef RTMP_MAC_USB ++ pAd->CommonCfg.bMultipleIRP = FALSE; ++ ++ if (pAd->CommonCfg.bMultipleIRP) ++ pAd->CommonCfg.NumOfBulkInIRP = RX_RING_SIZE; ++ else ++ pAd->CommonCfg.NumOfBulkInIRP = 1; ++#endif // RTMP_MAC_USB // ++ ++ //Init Ba Capability parameters. ++// RT28XX_BA_INIT(pAd); ++ pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; ++ pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.DesiredHtPhy.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; ++ // UPdata to HT IE ++ pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; ++ pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; ++ ++ // after reading Registry, we now know if in AP mode or STA mode ++ ++ // Load 8051 firmware; crash when FW image not existent ++ // Status = NICLoadFirmware(pAd); ++ // if (Status != NDIS_STATUS_SUCCESS) ++ // break; ++ ++ DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); ++ ++ // We should read EEPROM for all cases. rt2860b ++ NICReadEEPROMParameters(pAd, (PUCHAR)pDefaultMac); ++ ++ DBGPRINT(RT_DEBUG_OFF, ("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); ++ ++ NICInitAsicFromEEPROM(pAd); //rt2860b ++ ++ // Set PHY to appropriate mode ++ TmpPhy = pAd->CommonCfg.PhyMode; ++ pAd->CommonCfg.PhyMode = 0xff; ++ RTMPSetPhyMode(pAd, TmpPhy); ++ SetCommonHT(pAd); ++ ++ // No valid channels. ++ if (pAd->ChannelListNum == 0) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n")); ++ goto err4; ++ } ++ ++ DBGPRINT(RT_DEBUG_OFF, ("MCS Set = %02x %02x %02x %02x %02x\n", pAd->CommonCfg.HtCapability.MCSSet[0], ++ pAd->CommonCfg.HtCapability.MCSSet[1], pAd->CommonCfg.HtCapability.MCSSet[2], ++ pAd->CommonCfg.HtCapability.MCSSet[3], pAd->CommonCfg.HtCapability.MCSSet[4])); ++ ++#ifdef RTMP_RF_RW_SUPPORT ++ //Init RT30xx RFRegisters after read RFIC type from EEPROM ++ NICInitRFRegisters(pAd); ++#endif // RTMP_RF_RW_SUPPORT // ++ ++// APInitialize(pAd); ++ ++ ++ // ++ // Initialize RF register to default value ++ // ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ ++ // 8051 firmware require the signal during booting time. ++ //2008/11/28:KH marked the following codes to patch Frequency offset bug ++ //AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); ++ ++ if (pAd && (Status != NDIS_STATUS_SUCCESS)) ++ { ++ // ++ // Undo everything if it failed ++ // ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) ++ { ++// NdisMDeregisterInterrupt(&pAd->Interrupt); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); ++ } ++// RTMPFreeAdapter(pAd); // we will free it in disconnect() ++ } ++ else if (pAd) ++ { ++ // Microsoft HCT require driver send a disconnect event after driver initialization. ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); ++// pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n")); ++ ++#ifdef RTMP_MAC_USB ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); ++ ++ // ++ // Support multiple BulkIn IRP, ++ // the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1. ++ // ++ for(index=0; indexCommonCfg.NumOfBulkInIRP; index++) ++ { ++ RTUSBBulkReceive(pAd); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n" )); ++ } ++#endif // RTMP_MAC_USB // ++ }// end of else ++ ++ ++ // Set up the Mac address ++ RtmpOSNetDevAddrSet(pAd->net_dev, &pAd->CurrentAddress[0]); ++ ++ DBGPRINT_S(Status, ("<==== rt28xx_init, Status=%x\n", Status)); ++ ++ return TRUE; ++ ++ ++err4: ++err3: ++ MlmeHalt(pAd); ++err2: ++ RTMPFreeTxRxRingMemory(pAd); ++err1: ++ ++ os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool ++ ++ // shall not set priv to NULL here because the priv didn't been free yet. ++ //net_dev->ml_priv = 0; ++#ifdef ST ++err0: ++#endif // ST // ++ ++ DBGPRINT(RT_DEBUG_ERROR, ("!!! rt28xx Initialized fail !!!\n")); ++ return FALSE; ++} ++//---Add by shiang, move from os/linux/rt_main_dev.c ++ ++ ++static INT RtmpChipOpsRegister( ++ IN RTMP_ADAPTER *pAd, ++ IN INT infType) ++{ ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ int status; ++ ++ memset(pChipOps, 0, sizeof(RTMP_CHIP_OP)); ++ ++ /* set eeprom related hook functions */ ++ status = RtmpChipOpsEepromHook(pAd, infType); ++ ++ /* set mcu related hook functions */ ++ switch(infType) ++ { ++#ifdef RTMP_PCI_SUPPORT ++ case RTMP_DEV_INF_PCI: ++ pChipOps->loadFirmware = RtmpAsicLoadFirmware; ++ pChipOps->eraseFirmware = RtmpAsicEraseFirmware; ++ pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; ++ break; ++#endif // RTMP_PCI_SUPPORT // ++#ifdef RTMP_USB_SUPPORT ++ case RTMP_DEV_INF_USB: ++ pChipOps->loadFirmware = RtmpAsicLoadFirmware; ++ pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; ++ break; ++#endif // RTMP_USB_SUPPORT // ++ default: ++ break; ++ } ++ ++ return status; ++} ++ ++ ++INT RtmpRaDevCtrlInit( ++ IN RTMP_ADAPTER *pAd, ++ IN RTMP_INF_TYPE infType) ++{ ++ //VOID *handle; ++ ++ // Assign the interface type. We need use it when do register/EEPROM access. ++ pAd->infType = infType; ++ ++ ++ pAd->OpMode = OPMODE_STA; ++ DBGPRINT(RT_DEBUG_TRACE, ("STA Driver version-%s\n", STA_DRIVER_VERSION)); ++ ++#ifdef RTMP_MAC_USB ++ init_MUTEX(&(pAd->UsbVendorReq_semaphore)); ++ os_alloc_mem(pAd, (PUCHAR)&pAd->UsbVendorReqBuf, MAX_PARAM_BUFFER_SIZE - 1); ++ if (pAd->UsbVendorReqBuf == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Allocate vendor request temp buffer failed!\n")); ++ return FALSE; ++ } ++#endif // RTMP_MAC_USB // ++ ++ RtmpChipOpsRegister(pAd, infType); ++ ++ ++ return 0; ++} ++ ++ ++BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER *pAd) ++{ ++ ++ ++ RTMPFreeAdapter(pAd); ++ ++ return TRUE; ++} ++ ++ ++// not yet support MBSS ++PNET_DEV get_netdev_from_bssid( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR FromWhichBSSID) ++{ ++ PNET_DEV dev_p = NULL; ++ ++ { ++ dev_p = pAd->net_dev; ++ } ++ ++ ASSERT(dev_p); ++ return dev_p; /* return one of MBSS */ ++} +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +new file mode 100644 +index 0000000..24531c5 +--- /dev/null ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -0,0 +1,233 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_mcu.c ++ ++ Abstract: ++ Miniport generic portion header file ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++ ++#include "../rt_config.h" ++ ++#ifdef RT2860 ++#include "firmware.h" ++#endif ++#ifdef RT2870 ++#include "../../rt3070/firmware.h" ++#include "firmware_3070.h" ++#endif ++ ++#include ++ ++//#define BIN_IN_FILE /* use *.bin firmware */ ++ ++#ifdef RTMP_MAC_USB ++// ++// RT2870 Firmware Spec only used 1 oct for version expression ++// ++#define FIRMWARE_MINOR_VERSION 7 ++#endif // RTMP_MAC_USB // ++ ++// New 8k byte firmware size for RT3071/RT3072 ++#define FIRMWAREIMAGE_MAX_LENGTH 0x2000 ++#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR)) ++#define FIRMWARE_MAJOR_VERSION 0 ++ ++#define FIRMWAREIMAGEV1_LENGTH 0x1000 ++#define FIRMWAREIMAGEV2_LENGTH 0x1000 ++ ++#ifdef RTMP_MAC_PCI ++#define FIRMWARE_MINOR_VERSION 2 ++#endif // RTMP_MAC_PCI // ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ erase 8051 firmware image in MAC ASIC ++ ++ Arguments: ++ Adapter Pointer to our adapter ++ ++ IRQL = PASSIVE_LEVEL ++ ++ ======================================================================== ++*/ ++INT RtmpAsicEraseFirmware( ++ IN PRTMP_ADAPTER pAd) ++{ ++ ULONG i; ++ ++ for(i=0; iMACVersion >> 16); ++ ++// pFirmwareImage = FirmwareImage; ++// FileLength = sizeof(FirmwareImage); ++ ++ // New 8k byte firmware size for RT3071/RT3072 ++ { ++#ifdef RTMP_MAC_PCI ++ if ((Version == 0x2860) || (Version == 0x3572) || IS_RT3090(pAd)) ++ { ++ pFirmwareImage = FirmwareImage_2860; ++ FileLength = FIRMWAREIMAGE_MAX_LENGTH; ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ /* the firmware image consists of two parts */ ++ if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) ++ { /* use the second part */ ++ //printk("KH:Use New Version,part2\n"); ++ pFirmwareImage = (PUCHAR)&FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; ++ FileLength = FIRMWAREIMAGEV2_LENGTH; ++ } ++ else ++ { ++ //printk("KH:Use New Version,part1\n"); ++ if (Version == 0x3070) ++ pFirmwareImage = FirmwareImage_3070; ++ else ++ pFirmwareImage = FirmwareImage_2870; ++ FileLength = FIRMWAREIMAGEV1_LENGTH; ++ } ++#endif // RTMP_MAC_USB // ++ } ++ ++ RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); ++ ++ ++ /* check if MCU is ready */ ++ Index = 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacReg); ++ ++ if (MacReg & 0x80) ++ break; ++ ++ RTMPusecDelay(1000); ++ } while (Index++ < 1000); ++ ++ if (Index > 1000) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware: MCU is not ready\n\n\n")); ++ Status = NDIS_STATUS_FAILURE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== %s (status=%d)\n", __func__, Status)); ++ ++ return Status; ++} ++ ++ ++INT RtmpAsicSendCommandToMcu( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, ++ IN UCHAR Arg0, ++ IN UCHAR Arg1) ++{ ++ HOST_CMD_CSR_STRUC H2MCmd; ++ H2M_MAILBOX_STRUC H2MMailbox; ++ ULONG i = 0; ++#ifdef RTMP_MAC_PCI ++#endif // RTMP_MAC_PCI // ++ ++ do ++ { ++ RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); ++ if (H2MMailbox.field.Owner == 0) ++ break; ++ ++ RTMPusecDelay(2); ++ } while(i++ < 100); ++ ++ if (i > 100) ++ { ++#ifdef RTMP_MAC_PCI ++#endif // RTMP_MAC_PCI // ++ { ++ DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); ++ } ++ return FALSE; ++ } ++ ++#ifdef RTMP_MAC_PCI ++#endif // RTMP_MAC_PCI // ++ ++ H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.CmdToken = Token; ++ H2MMailbox.field.HighByte = Arg1; ++ H2MMailbox.field.LowByte = Arg0; ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); ++ ++ H2MCmd.word = 0; ++ H2MCmd.field.HostCommand = Command; ++ RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); ++ ++ if (Command != 0x80) ++ { ++ } ++ ++ return TRUE; ++} +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +new file mode 100644 +index 0000000..258ab1b +--- /dev/null ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -0,0 +1,323 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_timer.c ++ ++ Abstract: ++ task for timer handling ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Name Date Modification logs ++ Shiang Tu 08-28-2008 init version ++ ++*/ ++ ++#include "../rt_config.h" ++ ++ ++BUILD_TIMER_FUNCTION(MlmePeriodicExec); ++//BUILD_TIMER_FUNCTION(MlmeRssiReportExec); ++BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout); ++BUILD_TIMER_FUNCTION(APSDPeriodicExec); ++BUILD_TIMER_FUNCTION(AsicRfTuningExec); ++#ifdef RTMP_MAC_USB ++BUILD_TIMER_FUNCTION(BeaconUpdateExec); ++#endif // RTMP_MAC_USB // ++ ++BUILD_TIMER_FUNCTION(BeaconTimeout); ++BUILD_TIMER_FUNCTION(ScanTimeout); ++BUILD_TIMER_FUNCTION(AuthTimeout); ++BUILD_TIMER_FUNCTION(AssocTimeout); ++BUILD_TIMER_FUNCTION(ReassocTimeout); ++BUILD_TIMER_FUNCTION(DisassocTimeout); ++BUILD_TIMER_FUNCTION(LinkDownExec); ++BUILD_TIMER_FUNCTION(StaQuickResponeForRateUpExec); ++BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); ++#ifdef RTMP_PCI_SUPPORT ++BUILD_TIMER_FUNCTION(PsPollWakeExec); ++BUILD_TIMER_FUNCTION(RadioOnExec); ++#endif // RTMP_PCI_SUPPORT // ++#ifdef RTMP_MAC_USB ++BUILD_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); ++#endif // RTMP_MAC_USB // ++ ++#if defined(AP_LED) || defined(STA_LED) ++extern void LedCtrlMain( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); ++BUILD_TIMER_FUNCTION(LedCtrlMain); ++#endif ++ ++ ++#ifdef RTMP_TIMER_TASK_SUPPORT ++static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) ++{ ++#ifndef KTHREAD_SUPPORT ++ int status; ++#endif ++ RALINK_TIMER_STRUCT *pTimer; ++ RTMP_TIMER_TASK_ENTRY *pEntry; ++ unsigned long irqFlag; ++ RTMP_OS_TASK *pTask; ++ ++ ++ pTask = &pAd->timerTask; ++ while(!pTask->task_killed) ++ { ++ pTimer = NULL; ++ ++#ifdef KTHREAD_SUPPORT ++ RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); ++#else ++ RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); ++#endif ++ ++ if (pAd->TimerQ.status == RTMP_TASK_STAT_STOPED) ++ break; ++ ++ // event happened. ++ while(pAd->TimerQ.pQHead) ++ { ++ RTMP_INT_LOCK(&pAd->TimerQLock, irqFlag); ++ pEntry = pAd->TimerQ.pQHead; ++ if (pEntry) ++ { ++ pTimer = pEntry->pRaTimer; ++ ++ // update pQHead ++ pAd->TimerQ.pQHead = pEntry->pNext; ++ if (pEntry == pAd->TimerQ.pQTail) ++ pAd->TimerQ.pQTail = NULL; ++ ++ // return this queue entry to timerQFreeList. ++ pEntry->pNext = pAd->TimerQ.pQPollFreeList; ++ pAd->TimerQ.pQPollFreeList = pEntry; ++ } ++ RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlag); ++ ++ if (pTimer) ++ { ++ if ((pTimer->handle != NULL) && (!pAd->PM_FlgSuspend)) ++ pTimer->handle(NULL, (PVOID) pTimer->cookie, NULL, pTimer); ++ if ((pTimer->Repeat) && (pTimer->State == FALSE)) ++ RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); ++ } ++ } ++ ++#ifndef KTHREAD_SUPPORT ++ if (status != 0) ++ { ++ pAd->TimerQ.status = RTMP_TASK_STAT_STOPED; ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ break; ++ } ++#endif ++ } ++} ++ ++ ++INT RtmpTimerQThread( ++ IN OUT PVOID Context) ++{ ++ RTMP_OS_TASK *pTask; ++ PRTMP_ADAPTER pAd; ++ ++ ++ pTask = (RTMP_OS_TASK *)Context; ++ pAd = (PRTMP_ADAPTER)pTask->priv; ++ ++ RtmpOSTaskCustomize(pTask); ++ ++ RtmpTimerQHandle(pAd); ++ ++ DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__func__)); ++#ifndef KTHREAD_SUPPORT ++ pTask->taskPID = THREAD_PID_INIT_VALUE; ++#endif ++ /* notify the exit routine that we're actually exiting now ++ * ++ * complete()/wait_for_completion() is similar to up()/down(), ++ * except that complete() is safe in the case where the structure ++ * is getting deleted in a parallel mode of execution (i.e. just ++ * after the down() -- that's necessary for the thread-shutdown ++ * case. ++ * ++ * complete_and_exit() goes even further than this -- it is safe in ++ * the case that the thread of the caller is going away (not just ++ * the structure) -- this is necessary for the module-remove case. ++ * This is important in preemption kernels, which transfer the flow ++ * of execution immediately upon a complete(). ++ */ ++ RtmpOSTaskNotifyToExit(pTask); ++ ++ return 0; ++ ++} ++ ++ ++RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( ++ IN RTMP_ADAPTER *pAd, ++ IN RALINK_TIMER_STRUCT *pTimer) ++{ ++ RTMP_TIMER_TASK_ENTRY *pQNode = NULL, *pQTail; ++ unsigned long irqFlags; ++ RTMP_OS_TASK *pTask = &pAd->timerTask; ++ ++ RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); ++ if (pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT) ++ { ++ if(pAd->TimerQ.pQPollFreeList) ++ { ++ pQNode = pAd->TimerQ.pQPollFreeList; ++ pAd->TimerQ.pQPollFreeList = pQNode->pNext; ++ ++ pQNode->pRaTimer = pTimer; ++ pQNode->pNext = NULL; ++ ++ pQTail = pAd->TimerQ.pQTail; ++ if (pAd->TimerQ.pQTail != NULL) ++ pQTail->pNext = pQNode; ++ pAd->TimerQ.pQTail = pQNode; ++ if (pAd->TimerQ.pQHead == NULL) ++ pAd->TimerQ.pQHead = pQNode; ++ } ++ } ++ RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); ++ ++ if (pQNode) ++ { ++#ifdef KTHREAD_SUPPORT ++ WAKE_UP(pTask); ++#else ++ RTMP_SEM_EVENT_UP(&pTask->taskSema); ++#endif ++ } ++ ++ return pQNode; ++} ++ ++ ++BOOLEAN RtmpTimerQRemove( ++ IN RTMP_ADAPTER *pAd, ++ IN RALINK_TIMER_STRUCT *pTimer) ++{ ++ RTMP_TIMER_TASK_ENTRY *pNode, *pPrev = NULL; ++ unsigned long irqFlags; ++ ++ RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); ++ if (pAd->TimerQ.status >= RTMP_TASK_STAT_INITED) ++ { ++ pNode = pAd->TimerQ.pQHead; ++ while (pNode) ++ { ++ if (pNode->pRaTimer == pTimer) ++ break; ++ pPrev = pNode; ++ pNode = pNode->pNext; ++ } ++ ++ // Now move it to freeList queue. ++ if (pNode) ++ { ++ if (pNode == pAd->TimerQ.pQHead) ++ pAd->TimerQ.pQHead = pNode->pNext; ++ if (pNode == pAd->TimerQ.pQTail) ++ pAd->TimerQ.pQTail = pPrev; ++ if (pPrev != NULL) ++ pPrev->pNext = pNode->pNext; ++ ++ // return this queue entry to timerQFreeList. ++ pNode->pNext = pAd->TimerQ.pQPollFreeList; ++ pAd->TimerQ.pQPollFreeList = pNode; ++ } ++ } ++ RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); ++ ++ return TRUE; ++} ++ ++ ++void RtmpTimerQExit(RTMP_ADAPTER *pAd) ++{ ++ RTMP_TIMER_TASK_ENTRY *pTimerQ; ++ unsigned long irqFlags; ++ ++ RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); ++ while (pAd->TimerQ.pQHead) ++ { ++ pTimerQ = pAd->TimerQ.pQHead; ++ pAd->TimerQ.pQHead = pTimerQ->pNext; ++ // remove the timeQ ++ } ++ pAd->TimerQ.pQPollFreeList = NULL; ++ os_free_mem(pAd, pAd->TimerQ.pTimerQPoll); ++ pAd->TimerQ.pQTail = NULL; ++ pAd->TimerQ.pQHead = NULL; ++#ifndef KTHREAD_SUPPORT ++ pAd->TimerQ.status = RTMP_TASK_STAT_STOPED; ++#endif ++ RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); ++ ++} ++ ++ ++void RtmpTimerQInit(RTMP_ADAPTER *pAd) ++{ ++ int i; ++ RTMP_TIMER_TASK_ENTRY *pQNode, *pEntry; ++ unsigned long irqFlags; ++ ++ NdisAllocateSpinLock(&pAd->TimerQLock); ++ ++ NdisZeroMemory(&pAd->TimerQ, sizeof(pAd->TimerQ)); ++ ++ os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); ++ if (pAd->TimerQ.pTimerQPoll) ++ { ++ pEntry = NULL; ++ pQNode = (RTMP_TIMER_TASK_ENTRY *)pAd->TimerQ.pTimerQPoll; ++ NdisZeroMemory(pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); ++ ++ RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); ++ for (i = 0 ;i pNext = pEntry; ++ pEntry = pQNode; ++ pQNode++; ++ } ++ pAd->TimerQ.pQPollFreeList = pEntry; ++ pAd->TimerQ.pQHead = NULL; ++ pAd->TimerQ.pQTail = NULL; ++ pAd->TimerQ.status = RTMP_TASK_STAT_INITED; ++ RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); ++ } ++} ++#endif // RTMP_TIMER_TASK_SUPPORT // +diff --git a/drivers/staging/rt2860/common/rtmp_tkip.c b/drivers/staging/rt2860/common/rtmp_tkip.c +deleted file mode 100644 +index 4a7fda6..0000000 +--- a/drivers/staging/rt2860/common/rtmp_tkip.c ++++ /dev/null +@@ -1,1586 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_tkip.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Wu 02-25-02 Initial +-*/ +- +-#include "../rt_config.h" +- +-// Rotation functions on 32 bit values +-#define ROL32( A, n ) \ +- ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) +-#define ROR32( A, n ) ROL32( (A), 32-(n) ) +- +-UINT Tkip_Sbox_Lower[256] = +-{ +- 0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54, +- 0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A, +- 0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B, +- 0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B, +- 0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F, +- 0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F, +- 0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5, +- 0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F, +- 0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB, +- 0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97, +- 0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED, +- 0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A, +- 0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94, +- 0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3, +- 0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04, +- 0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D, +- 0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39, +- 0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95, +- 0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83, +- 0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76, +- 0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4, +- 0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B, +- 0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0, +- 0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18, +- 0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51, +- 0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85, +- 0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12, +- 0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9, +- 0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7, +- 0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A, +- 0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8, +- 0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A +-}; +- +-UINT Tkip_Sbox_Upper[256] = +-{ +- 0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91, +- 0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC, +- 0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB, +- 0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B, +- 0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83, +- 0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A, +- 0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F, +- 0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA, +- 0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B, +- 0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13, +- 0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6, +- 0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85, +- 0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11, +- 0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B, +- 0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1, +- 0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF, +- 0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E, +- 0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6, +- 0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B, +- 0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD, +- 0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8, +- 0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2, +- 0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49, +- 0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10, +- 0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97, +- 0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F, +- 0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C, +- 0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27, +- 0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33, +- 0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5, +- 0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0, +- 0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C +-}; +- +-/*****************************/ +-/******** SBOX Table *********/ +-/*****************************/ +- +-UCHAR SboxTable[256] = +-{ +- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, +- 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, +- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +- 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, +- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, +- 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, +- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, +- 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, +- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, +- 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, +- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, +- 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, +- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, +- 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, +- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, +- 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, +- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, +- 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, +- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, +- 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, +- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, +- 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, +- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, +- 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, +- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, +- 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, +- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, +- 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, +- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, +- 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, +- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, +- 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +-}; +- +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out); +- +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out); +- +-VOID next_key( +- IN PUCHAR key, +- IN INT round); +- +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out); +- +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out); +- +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out); +- +-UCHAR RTMPCkipSbox( +- IN UCHAR a); +-// +-// Expanded IV for TKIP function. +-// +-typedef struct PACKED _IV_CONTROL_ +-{ +- union PACKED +- { +- struct PACKED +- { +- UCHAR rc0; +- UCHAR rc1; +- UCHAR rc2; +- +- union PACKED +- { +- struct PACKED +- { +- UCHAR Rsvd:5; +- UCHAR ExtIV:1; +- UCHAR KeyID:2; +- } field; +- UCHAR Byte; +- } CONTROL; +- } field; +- +- ULONG word; +- } IV16; +- +- ULONG IV32; +-} TKIP_IV, *PTKIP_IV; +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Convert from UCHAR[] to ULONG in a portable way +- +- Arguments: +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-ULONG RTMPTkipGetUInt32( +- IN PUCHAR pMICKey) +-{ +- ULONG res = 0; +- INT i; +- +- for (i = 0; i < 4; i++) +- { +- res |= (*pMICKey++) << (8 * i); +- } +- +- return res; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Convert from ULONG to UCHAR[] in a portable way +- +- Arguments: +- pDst pointer to destination for convert ULONG to UCHAR[] +- val the value for convert +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipPutUInt32( +- IN OUT PUCHAR pDst, +- IN ULONG val) +-{ +- INT i; +- +- for(i = 0; i < 4; i++) +- { +- *pDst++ = (UCHAR) (val & 0xff); +- val >>= 8; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Set the MIC Key. +- +- Arguments: +- pAd Pointer to our adapter +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipSetMICKey( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pMICKey) +-{ +- // Set the key +- pTkip->K0 = RTMPTkipGetUInt32(pMICKey); +- pTkip->K1 = RTMPTkipGetUInt32(pMICKey + 4); +- // and reset the message +- pTkip->L = pTkip->K0; +- pTkip->R = pTkip->K1; +- pTkip->nBytesInM = 0; +- pTkip->M = 0; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- uChar Append this uChar +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipAppendByte( +- IN PTKIP_KEY_INFO pTkip, +- IN UCHAR uChar) +-{ +- // Append the byte to our word-sized buffer +- pTkip->M |= (uChar << (8* pTkip->nBytesInM)); +- pTkip->nBytesInM++; +- // Process the word if it is full. +- if( pTkip->nBytesInM >= 4 ) +- { +- pTkip->L ^= pTkip->M; +- pTkip->R ^= ROL32( pTkip->L, 17 ); +- pTkip->L += pTkip->R; +- pTkip->R ^= ((pTkip->L & 0xff00ff00) >> 8) | ((pTkip->L & 0x00ff00ff) << 8); +- pTkip->L += pTkip->R; +- pTkip->R ^= ROL32( pTkip->L, 3 ); +- pTkip->L += pTkip->R; +- pTkip->R ^= ROR32( pTkip->L, 2 ); +- pTkip->L += pTkip->R; +- // Clear the buffer +- pTkip->M = 0; +- pTkip->nBytesInM = 0; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to source data for Calculate MIC Value +- Len Indicate the length of the source data +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipAppend( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pSrc, +- IN UINT nBytes) +-{ +- // This is simple +- while(nBytes > 0) +- { +- RTMPTkipAppendByte(pTkip, *pSrc++); +- nBytes--; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- the MIC Value is store in pAd->PrivateInfo.MIC +- ======================================================================== +-*/ +-VOID RTMPTkipGetMIC( +- IN PTKIP_KEY_INFO pTkip) +-{ +- // Append the minimum padding +- RTMPTkipAppendByte(pTkip, 0x5a ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- // and then zeroes until the length is a multiple of 4 +- while( pTkip->nBytesInM != 0 ) +- { +- RTMPTkipAppendByte(pTkip, 0 ); +- } +- // The appendByte function has already computed the result. +- RTMPTkipPutUInt32(pTkip->MIC, pTkip->L); +- RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Init Tkip function. +- +- Arguments: +- pAd Pointer to our adapter +- pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. +- KeyId TK Key ID +- pTA Pointer to transmitter address +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitTkipEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, +- OUT PULONG pIV16, +- OUT PULONG pIV32) +-{ +- TKIP_IV tkipIv; +- +- // Prepare 8 bytes TKIP encapsulation for MPDU +- NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); +- tkipIv.IV16.field.rc0 = *(pTSC + 1); +- tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; +- tkipIv.IV16.field.rc2 = *pTSC; +- tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV +- tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; +- NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV +- +- *pIV16 = tkipIv.IV16.word; +- *pIV32 = tkipIv.IV32; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Init MIC Value calculation function which include set MIC key & +- calculate first 16 bytes (DA + SA + priority + 0) +- +- Arguments: +- pAd Pointer to our adapter +- pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitMICEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN UCHAR UserPriority, +- IN PUCHAR pMICKey) +-{ +- ULONG Priority = UserPriority; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Tx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR)&Priority, 4); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Compare MIC value of received MSDU +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to the received Plain text data +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- Len the length of the received plain text data exclude MIC value +- +- Return Value: +- TRUE MIC value matched +- FALSE MIC value mismatched +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPTkipCompareMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, +- IN UINT Len) +-{ +- UCHAR OldMic[8]; +- ULONG Priority = UserPriority; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); +- +- // Calculate MIC value from plain text data +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +- +- // Get MIC valude from received frame +- NdisMoveMemory(OldMic, pSrc + Len, 8); +- +- // Get MIC value from decrypted plain data +- RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); +- +- // Move MIC value from MSDU, this steps should move to data path. +- // Since the MIC value might cross MPDUs. +- if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. +- +- +- return (FALSE); +- } +- return (TRUE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Compare MIC value of received MSDU +- +- Arguments: +- pAd Pointer to our adapter +- pLLC LLC header +- pSrc Pointer to the received Plain text data +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- Len the length of the received plain text data exclude MIC value +- +- Return Value: +- TRUE MIC value matched +- FALSE MIC value mismatched +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPTkipCompareMICValueWithLLC( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pLLC, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UINT Len) +-{ +- UCHAR OldMic[8]; +- ULONG Priority = 0; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); +- +- // Start with LLC header +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pLLC, 8); +- +- // Calculate MIC value from plain text data +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +- +- // Get MIC valude from received frame +- NdisMoveMemory(OldMic, pSrc + Len, 8); +- +- // Get MIC value from decrypted plain data +- RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); +- +- // Move MIC value from MSDU, this steps should move to data path. +- // Since the MIC value might cross MPDUs. +- if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValueWithLLC(): TKIP MIC Error !\n")); //MIC error. +- +- +- return (FALSE); +- } +- return (TRUE); +-} +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware transmit function +- +- Arguments: +- pAd Pointer to our adapter +- PNDIS_PACKET Pointer to Ndis Packet for MIC calculation +- pEncap Pointer to LLC encap data +- LenEncap Total encap length, might be 0 which indicates no encap +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPCalculateMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, +- IN UCHAR apidx) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PUCHAR pSrc; +- UCHAR UserPriority; +- UCHAR vlan_offset = 0; +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- UserPriority = RTMP_GET_PACKET_UP(pPacket); +- pSrc = pSrcBufVA; +- +- // determine if this is a vlan packet +- if (((*(pSrc + 12) << 8) + *(pSrc + 13)) == 0x8100) +- vlan_offset = 4; +- +- { +- RTMPInitMICEngine( +- pAd, +- pKey->Key, +- pSrc, +- pSrc + 6, +- UserPriority, +- pKey->TxMic); +- } +- +- +- if (pEncap != NULL) +- { +- // LLC encapsulation +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pEncap, 6); +- // Protocol Type +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, 2); +- } +- SrcBufLen -= (14 + vlan_offset); +- pSrc += (14 + vlan_offset); +- do +- { +- if (SrcBufLen > 0) +- { +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen); +- } +- +- break; // No need handle next packet +- +- } while (TRUE); // End of copying payload +- +- // Compute the final MIC Value +- RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); +-} +- +- +-/************************************************************/ +-/* tkip_sbox() */ +-/* Returns a 16 bit value from a 64K entry table. The Table */ +-/* is synthesized from two 256 entry byte wide tables. */ +-/************************************************************/ +- +-UINT tkip_sbox(UINT index) +-{ +- UINT index_low; +- UINT index_high; +- UINT left, right; +- +- index_low = (index % 256); +- index_high = ((index >> 8) % 256); +- +- left = Tkip_Sbox_Lower[index_low] + (Tkip_Sbox_Upper[index_low] * 256); +- right = Tkip_Sbox_Upper[index_high] + (Tkip_Sbox_Lower[index_high] * 256); +- +- return (left ^ right); +-} +- +-UINT rotr1(UINT a) +-{ +- unsigned int b; +- +- if ((a & 0x01) == 0x01) +- { +- b = (a >> 1) | 0x8000; +- } +- else +- { +- b = (a >> 1) & 0x7fff; +- } +- b = b % 65536; +- return b; +-} +- +-VOID RTMPTkipMixKey( +- UCHAR *key, +- UCHAR *ta, +- ULONG pnl, /* Least significant 16 bits of PN */ +- ULONG pnh, /* Most significant 32 bits of PN */ +- UCHAR *rc4key, +- UINT *p1k) +-{ +- +- UINT tsc0; +- UINT tsc1; +- UINT tsc2; +- +- UINT ppk0; +- UINT ppk1; +- UINT ppk2; +- UINT ppk3; +- UINT ppk4; +- UINT ppk5; +- +- INT i; +- INT j; +- +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ +- tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ +- +- /* Phase 1, step 1 */ +- p1k[0] = tsc1; +- p1k[1] = tsc0; +- p1k[2] = (UINT)(ta[0] + (ta[1]*256)); +- p1k[3] = (UINT)(ta[2] + (ta[3]*256)); +- p1k[4] = (UINT)(ta[4] + (ta[5]*256)); +- +- /* Phase 1, step 2 */ +- for (i=0; i<8; i++) +- { +- j = 2*(i & 1); +- p1k[0] = (p1k[0] + tkip_sbox( (p1k[4] ^ ((256*key[1+j]) + key[j])) % 65536 )) % 65536; +- p1k[1] = (p1k[1] + tkip_sbox( (p1k[0] ^ ((256*key[5+j]) + key[4+j])) % 65536 )) % 65536; +- p1k[2] = (p1k[2] + tkip_sbox( (p1k[1] ^ ((256*key[9+j]) + key[8+j])) % 65536 )) % 65536; +- p1k[3] = (p1k[3] + tkip_sbox( (p1k[2] ^ ((256*key[13+j]) + key[12+j])) % 65536 )) % 65536; +- p1k[4] = (p1k[4] + tkip_sbox( (p1k[3] ^ (((256*key[1+j]) + key[j]))) % 65536 )) % 65536; +- p1k[4] = (p1k[4] + i) % 65536; +- } +- +- /* Phase 2, Step 1 */ +- ppk0 = p1k[0]; +- ppk1 = p1k[1]; +- ppk2 = p1k[2]; +- ppk3 = p1k[3]; +- ppk4 = p1k[4]; +- ppk5 = (p1k[4] + tsc2) % 65536; +- +- /* Phase2, Step 2 */ +- ppk0 = ppk0 + tkip_sbox( (ppk5 ^ ((256*key[1]) + key[0])) % 65536); +- ppk1 = ppk1 + tkip_sbox( (ppk0 ^ ((256*key[3]) + key[2])) % 65536); +- ppk2 = ppk2 + tkip_sbox( (ppk1 ^ ((256*key[5]) + key[4])) % 65536); +- ppk3 = ppk3 + tkip_sbox( (ppk2 ^ ((256*key[7]) + key[6])) % 65536); +- ppk4 = ppk4 + tkip_sbox( (ppk3 ^ ((256*key[9]) + key[8])) % 65536); +- ppk5 = ppk5 + tkip_sbox( (ppk4 ^ ((256*key[11]) + key[10])) % 65536); +- +- ppk0 = ppk0 + rotr1(ppk5 ^ ((256*key[13]) + key[12])); +- ppk1 = ppk1 + rotr1(ppk0 ^ ((256*key[15]) + key[14])); +- ppk2 = ppk2 + rotr1(ppk1); +- ppk3 = ppk3 + rotr1(ppk2); +- ppk4 = ppk4 + rotr1(ppk3); +- ppk5 = ppk5 + rotr1(ppk4); +- +- /* Phase 2, Step 3 */ +- /* Phase 2, Step 3 */ +- +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ +- tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ +- +- rc4key[0] = (tsc2 >> 8) % 256; +- rc4key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; +- rc4key[2] = tsc2 % 256; +- rc4key[3] = ((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256; +- +- rc4key[4] = ppk0 % 256; +- rc4key[5] = (ppk0 >> 8) % 256; +- +- rc4key[6] = ppk1 % 256; +- rc4key[7] = (ppk1 >> 8) % 256; +- +- rc4key[8] = ppk2 % 256; +- rc4key[9] = (ppk2 >> 8) % 256; +- +- rc4key[10] = ppk3 % 256; +- rc4key[11] = (ppk3 >> 8) % 256; +- +- rc4key[12] = ppk4 % 256; +- rc4key[13] = (ppk4 >> 8) % 256; +- +- rc4key[14] = ppk5 % 256; +- rc4key[15] = (ppk5 >> 8) % 256; +-} +- +- +-/************************************************/ +-/* construct_mic_header1() */ +-/* Builds the first MIC header block from */ +-/* header fields. */ +-/************************************************/ +- +-void construct_mic_header1( +- unsigned char *mic_header1, +- int header_length, +- unsigned char *mpdu) +-{ +- mic_header1[0] = (unsigned char)((header_length - 2) / 256); +- mic_header1[1] = (unsigned char)((header_length - 2) % 256); +- mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */ +- mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */ +- mic_header1[4] = mpdu[4]; /* A1 */ +- mic_header1[5] = mpdu[5]; +- mic_header1[6] = mpdu[6]; +- mic_header1[7] = mpdu[7]; +- mic_header1[8] = mpdu[8]; +- mic_header1[9] = mpdu[9]; +- mic_header1[10] = mpdu[10]; /* A2 */ +- mic_header1[11] = mpdu[11]; +- mic_header1[12] = mpdu[12]; +- mic_header1[13] = mpdu[13]; +- mic_header1[14] = mpdu[14]; +- mic_header1[15] = mpdu[15]; +-} +- +-/************************************************/ +-/* construct_mic_header2() */ +-/* Builds the last MIC header block from */ +-/* header fields. */ +-/************************************************/ +- +-void construct_mic_header2( +- unsigned char *mic_header2, +- unsigned char *mpdu, +- int a4_exists, +- int qc_exists) +-{ +- int i; +- +- for (i = 0; i<16; i++) mic_header2[i]=0x00; +- +- mic_header2[0] = mpdu[16]; /* A3 */ +- mic_header2[1] = mpdu[17]; +- mic_header2[2] = mpdu[18]; +- mic_header2[3] = mpdu[19]; +- mic_header2[4] = mpdu[20]; +- mic_header2[5] = mpdu[21]; +- +- // In Sequence Control field, mute sequence numer bits (12-bit) +- mic_header2[6] = mpdu[22] & 0x0f; /* SC */ +- mic_header2[7] = 0x00; /* mpdu[23]; */ +- +- if ((!qc_exists) & a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ +- +- } +- +- if (qc_exists && (!a4_exists)) +- { +- mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */ +- mic_header2[9] = mpdu[25] & 0x00; +- } +- +- if (qc_exists && a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ +- +- mic_header2[14] = mpdu[30] & 0x0f; +- mic_header2[15] = mpdu[31] & 0x00; +- } +-} +- +- +-/************************************************/ +-/* construct_mic_iv() */ +-/* Builds the MIC IV from header fields and PN */ +-/************************************************/ +- +-void construct_mic_iv( +- unsigned char *mic_iv, +- int qc_exists, +- int a4_exists, +- unsigned char *mpdu, +- unsigned int payload_length, +- unsigned char *pn_vector) +-{ +- int i; +- +- mic_iv[0] = 0x59; +- if (qc_exists && a4_exists) +- mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */ +- if (qc_exists && !a4_exists) +- mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */ +- if (!qc_exists) +- mic_iv[1] = 0x00; +- for (i = 2; i < 8; i++) +- mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */ +-#ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[i - 8]; /* mic_iv[8:13] = PN[0:5] */ +-#else +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */ +-#endif +- i = (payload_length / 256); +- i = (payload_length % 256); +- mic_iv[14] = (unsigned char) (payload_length / 256); +- mic_iv[15] = (unsigned char) (payload_length % 256); +- +-} +- +- +- +-/************************************/ +-/* bitwise_xor() */ +-/* A 128 bit, bitwise exclusive or */ +-/************************************/ +- +-void bitwise_xor(unsigned char *ina, unsigned char *inb, unsigned char *out) +-{ +- int i; +- for (i=0; i<16; i++) +- { +- out[i] = ina[i] ^ inb[i]; +- } +-} +- +- +-void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphertext) +-{ +- int round; +- int i; +- unsigned char intermediatea[16]; +- unsigned char intermediateb[16]; +- unsigned char round_key[16]; +- +- for(i=0; i<16; i++) round_key[i] = key[i]; +- +- for (round = 0; round < 11; round++) +- { +- if (round == 0) +- { +- xor_128(round_key, data, ciphertext); +- next_key(round_key, round); +- } +- else if (round == 10) +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- xor_128(intermediateb, round_key, ciphertext); +- } +- else /* 1 - 9 */ +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- mix_column(&intermediateb[0], &intermediatea[0]); +- mix_column(&intermediateb[4], &intermediatea[4]); +- mix_column(&intermediateb[8], &intermediatea[8]); +- mix_column(&intermediateb[12], &intermediatea[12]); +- xor_128(intermediatea, round_key, ciphertext); +- next_key(round_key, round); +- } +- } +- +-} +- +-void construct_ctr_preload( +- unsigned char *ctr_preload, +- int a4_exists, +- int qc_exists, +- unsigned char *mpdu, +- unsigned char *pn_vector, +- int c) +-{ +- +- int i = 0; +- for (i=0; i<16; i++) ctr_preload[i] = 0x00; +- i = 0; +- +- ctr_preload[0] = 0x01; /* flag */ +- if (qc_exists && a4_exists) ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */ +- if (qc_exists && !a4_exists) ctr_preload[1] = mpdu[24] & 0x0f; +- +- for (i = 2; i < 8; i++) +- ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */ +-#ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[i - 8]; /* ctr_preload[8:13] = PN[0:5] */ +-#else +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ +-#endif +- ctr_preload[14] = (unsigned char) (c / 256); // Ctr +- ctr_preload[15] = (unsigned char) (c % 256); +- +-} +- +- +-// +-// TRUE: Success! +-// FALSE: Decrypt Error! +-// +-BOOLEAN RTMPSoftDecryptTKIP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, +- IN PCIPHER_KEY pWpaKey) +-{ +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR fc0; +- UCHAR fc1; +- USHORT fc; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- USHORT duration; +- USHORT seq_control; +- USHORT qos_control; +- UCHAR TA[MAC_ADDR_LEN]; +- UCHAR DA[MAC_ADDR_LEN]; +- UCHAR SA[MAC_ADDR_LEN]; +- UCHAR RC4Key[16]; +- UINT p1k[5]; //for mix_key; +- ULONG pnl;/* Least significant 16 bits of PN */ +- ULONG pnh;/* Most significant 32 bits of PN */ +- UINT num_blocks; +- UINT payload_remainder; +- ARCFOURCONTEXT ArcFourContext; +- UINT crc32 = 0; +- UINT trailfcs = 0; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- +- fc0 = *pData; +- fc1 = *(pData + 1); +- +- fc = *((PUSHORT)pData); +- +- frame_type = ((fc0 >> 2) & 0x03); +- frame_subtype = ((fc0 >> 4) & 0x0f); +- +- from_ds = (fc1 & 0x2) >> 1; +- to_ds = (fc1 & 0x1); +- +- a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); +- +- HeaderLen = 24; +- if (a4_exists) +- HeaderLen += 6; +- +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); +- KeyID = KeyID >> 6; +- +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP failed!(KeyID[%d] Length can not be 0)\n", KeyID)); +- return FALSE; +- } +- +- duration = *((PUSHORT)(pData+2)); +- +- seq_control = *((PUSHORT)(pData+22)); +- +- if (qc_exists) +- { +- if (a4_exists) +- { +- qos_control = *((PUSHORT)(pData+30)); +- } +- else +- { +- qos_control = *((PUSHORT)(pData+24)); +- } +- } +- +- if (to_ds == 0 && from_ds == 1) +- { +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); //BSSID +- } +- else if (to_ds == 0 && from_ds == 0 ) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 0) +- { +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 1) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+22, MAC_ADDR_LEN); +- } +- +- num_blocks = (DataByteCnt - 16) / 16; +- payload_remainder = (DataByteCnt - 16) % 16; +- +- pnl = (*(pData + HeaderLen)) * 256 + *(pData + HeaderLen + 2); +- pnh = *((PULONG)(pData + HeaderLen + 4)); +- pnh = cpu2le32(pnh); +- RTMPTkipMixKey(pWpaKey[KeyID].Key, TA, pnl, pnh, RC4Key, p1k); +- +- ARCFOUR_INIT(&ArcFourContext, RC4Key, 16); +- +- ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); +- NdisMoveMemory(&trailfcs, pData + DataByteCnt - 8 - 4, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ +- +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. +- +- return (FALSE); +- } +- +- NdisMoveMemory(TrailMIC, pData + DataByteCnt - 8 - 8 - 4, 8); +- RTMPInitMICEngine(pAd, pWpaKey[KeyID].Key, DA, SA, UserPriority, pWpaKey[KeyID].RxMic); +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 12); +- RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); +- NdisMoveMemory(MIC, pAd->PrivateInfo.Tx.MIC, 8); +- +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. +- return (FALSE); +- } +- +- return TRUE; +-} +- +- +- +- +-BOOLEAN RTMPSoftDecryptAES( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pWpaKey) +-{ +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR PN[6]; +- UINT payload_len; +- UINT num_blocks; +- UINT payload_remainder; +- USHORT fc; +- UCHAR fc0; +- UCHAR fc1; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- UCHAR aes_out[16]; +- int payload_index; +- UINT i; +- UCHAR ctr_preload[16]; +- UCHAR chain_buffer[16]; +- UCHAR padded_buffer[16]; +- UCHAR mic_iv[16]; +- UCHAR mic_header1[16]; +- UCHAR mic_header2[16]; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- +- fc0 = *pData; +- fc1 = *(pData + 1); +- +- fc = *((PUSHORT)pData); +- +- frame_type = ((fc0 >> 2) & 0x03); +- frame_subtype = ((fc0 >> 4) & 0x0f); +- +- from_ds = (fc1 & 0x2) >> 1; +- to_ds = (fc1 & 0x1); +- +- a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); +- +- HeaderLen = 24; +- if (a4_exists) +- HeaderLen += 6; +- +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); +- KeyID = KeyID >> 6; +- +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptAES failed!(KeyID[%d] Length can not be 0)\n", KeyID)); +- return FALSE; +- } +- +- PN[0] = *(pData+ HeaderLen); +- PN[1] = *(pData+ HeaderLen + 1); +- PN[2] = *(pData+ HeaderLen + 4); +- PN[3] = *(pData+ HeaderLen + 5); +- PN[4] = *(pData+ HeaderLen + 6); +- PN[5] = *(pData+ HeaderLen + 7); +- +- payload_len = DataByteCnt - HeaderLen - 8 - 8; // 8 bytes for CCMP header , 8 bytes for MIC +- payload_remainder = (payload_len) % 16; +- num_blocks = (payload_len) / 16; +- +- +- +- // Find start of payload +- payload_index = HeaderLen + 8; //IV+EIV +- +- for (i=0; i< num_blocks; i++) +- { +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- i+1 ); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, pData + payload_index, chain_buffer); +- NdisMoveMemory(pData + payload_index - 8, chain_buffer, 16); +- payload_index += 16; +- } +- +- // +- // If there is a short final block, then pad it +- // encrypt it and copy the unpadded part back +- // +- if (payload_remainder > 0) +- { +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- num_blocks + 1); +- +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder); +- payload_index += payload_remainder; +- } +- +- // +- // Descrypt the MIC +- // +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- 0); +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, 8); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- +- NdisMoveMemory(TrailMIC, chain_buffer, 8); +- +- // +- // Calculate MIC +- // +- +- //Force the protected frame bit on +- *(pData + 1) = *(pData + 1) | 0x40; +- +- // Find start of payload +- // Because the CCMP header has been removed +- payload_index = HeaderLen; +- +- construct_mic_iv( +- mic_iv, +- qc_exists, +- a4_exists, +- pData, +- payload_len, +- PN); +- +- construct_mic_header1( +- mic_header1, +- HeaderLen, +- pData); +- +- construct_mic_header2( +- mic_header2, +- pData, +- a4_exists, +- qc_exists); +- +- aes128k128d(pWpaKey[KeyID].Key, mic_iv, aes_out); +- bitwise_xor(aes_out, mic_header1, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- bitwise_xor(aes_out, mic_header2, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- +- // iterate through each 16 byte payload block +- for (i = 0; i < num_blocks; i++) +- { +- bitwise_xor(aes_out, pData + payload_index, chain_buffer); +- payload_index += 16; +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- } +- +- // Add on the final payload block if it needs padding +- if (payload_remainder > 0) +- { +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- } +- // aes_out contains padded mic, discard most significant +- // 8 bytes to generate 64 bit MIC +- for (i = 0 ; i < 8; i++) MIC[i] = aes_out[i]; +- +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. +- return FALSE; +- } +- +- return TRUE; +-} +- +-/****************************************/ +-/* aes128k128d() */ +-/* Performs a 128 bit AES encrypt with */ +-/* 128 bit data. */ +-/****************************************/ +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<16; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-VOID next_key( +- IN PUCHAR key, +- IN INT round) +-{ +- UCHAR rcon; +- UCHAR sbox_key[4]; +- UCHAR rcon_table[12] = +- { +- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +- 0x1b, 0x36, 0x36, 0x36 +- }; +- +- sbox_key[0] = RTMPCkipSbox(key[13]); +- sbox_key[1] = RTMPCkipSbox(key[14]); +- sbox_key[2] = RTMPCkipSbox(key[15]); +- sbox_key[3] = RTMPCkipSbox(key[12]); +- +- rcon = rcon_table[round]; +- +- xor_32(&key[0], sbox_key, &key[0]); +- key[0] = key[0] ^ rcon; +- +- xor_32(&key[4], &key[0], &key[4]); +- xor_32(&key[8], &key[4], &key[8]); +- xor_32(&key[12], &key[8], &key[12]); +-} +- +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<4; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0; i< 16; i++) +- { +- out[i] = RTMPCkipSbox(in[i]); +- } +-} +- +-UCHAR RTMPCkipSbox( +- IN UCHAR a) +-{ +- return SboxTable[(int)a]; +-} +- +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- out[0] = in[0]; +- out[1] = in[5]; +- out[2] = in[10]; +- out[3] = in[15]; +- out[4] = in[4]; +- out[5] = in[9]; +- out[6] = in[14]; +- out[7] = in[3]; +- out[8] = in[8]; +- out[9] = in[13]; +- out[10] = in[2]; +- out[11] = in[7]; +- out[12] = in[12]; +- out[13] = in[1]; +- out[14] = in[6]; +- out[15] = in[11]; +-} +- +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- UCHAR add1b[4]; +- UCHAR add1bf7[4]; +- UCHAR rotl[4]; +- UCHAR swap_halfs[4]; +- UCHAR andf7[4]; +- UCHAR rotr[4]; +- UCHAR temp[4]; +- UCHAR tempb[4]; +- +- for (i=0 ; i<4; i++) +- { +- if ((in[i] & 0x80)== 0x80) +- add1b[i] = 0x1b; +- else +- add1b[i] = 0x00; +- } +- +- swap_halfs[0] = in[2]; /* Swap halfs */ +- swap_halfs[1] = in[3]; +- swap_halfs[2] = in[0]; +- swap_halfs[3] = in[1]; +- +- rotl[0] = in[3]; /* Rotate left 8 bits */ +- rotl[1] = in[0]; +- rotl[2] = in[1]; +- rotl[3] = in[2]; +- +- andf7[0] = in[0] & 0x7f; +- andf7[1] = in[1] & 0x7f; +- andf7[2] = in[2] & 0x7f; +- andf7[3] = in[3] & 0x7f; +- +- for (i = 3; i>0; i--) /* logical shift left 1 bit */ +- { +- andf7[i] = andf7[i] << 1; +- if ((andf7[i-1] & 0x80) == 0x80) +- { +- andf7[i] = (andf7[i] | 0x01); +- } +- } +- andf7[0] = andf7[0] << 1; +- andf7[0] = andf7[0] & 0xfe; +- +- xor_32(add1b, andf7, add1bf7); +- +- xor_32(in, add1bf7, rotr); +- +- temp[0] = rotr[0]; /* Rotate right 8 bits */ +- rotr[0] = rotr[1]; +- rotr[1] = rotr[2]; +- rotr[2] = rotr[3]; +- rotr[3] = temp[0]; +- +- xor_32(add1bf7, rotr, temp); +- xor_32(swap_halfs, rotl,tempb); +- xor_32(temp, tempb, out); +-} +- +diff --git a/drivers/staging/rt2860/common/rtmp_wep.c b/drivers/staging/rt2860/common/rtmp_wep.c +deleted file mode 100644 +index 8e833e7..0000000 +--- a/drivers/staging/rt2860/common/rtmp_wep.c ++++ /dev/null +@@ -1,497 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_wep.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Wu 10-28-02 Initial +-*/ +- +-#include "../rt_config.h" +- +-UINT FCSTAB_32[256] = +-{ +- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, +- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, +- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, +- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, +- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, +- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, +- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, +- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, +- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, +- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, +- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, +- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, +- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, +- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, +- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, +- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, +- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, +- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, +- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, +- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, +- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, +- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, +- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, +- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, +- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, +- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, +- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, +- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, +- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, +- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, +- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, +- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, +- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, +- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, +- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, +- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, +- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, +- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, +- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, +- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, +- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, +- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, +- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, +- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, +- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, +- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, +- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, +- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, +- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, +- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, +- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, +- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, +- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, +- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, +- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, +- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, +- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, +- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, +- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, +- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, +- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, +- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, +- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, +- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +-}; +- +-/* +- ======================================================================== +- +- Routine Description: +- Init WEP function. +- +- Arguments: +- pAd Pointer to our adapter +- pKey Pointer to the WEP KEY +- KeyId WEP Key ID +- KeyLen the length of WEP KEY +- pDest Pointer to the destination which Encryption data will store in. +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitWepEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN UCHAR KeyLen, +- IN OUT PUCHAR pDest) +-{ +- UINT i; +- UCHAR WEPKEY[] = { +- //IV +- 0x00, 0x11, 0x22, +- //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC +- }; +- +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. +- +- if (pAd->StaCfg.bCkipOn && (pAd->StaCfg.CkipFlag & 0x10) && (pAd->OpMode == OPMODE_STA)) +- { +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, pKey, KeyLen); //INIT SBOX, KEYLEN+3(IV) +- NdisMoveMemory(pDest, pKey, 3); //Append Init Vector +- } +- else +- { +- NdisMoveMemory(WEPKEY + 3, pKey, KeyLen); +- +- for(i = 0; i < 3; i++) +- WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) +- +- NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector +- } +- *(pDest+3) = (KeyId << 6); //Append KEYID +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Encrypt transimitted data +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to the transimitted source data that will be encrypt +- pDest Pointer to the destination where entryption data will be store in. +- Len Indicate the length of the source data +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPEncryptData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDest, +- IN UINT Len) +-{ +- pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); +- ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, pSrc, Len); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Decrypt received WEP data +- +- Arguments: +- pAdapter Pointer to our adapter +- pSrc Pointer to the received data +- Len the length of the received data +- +- Return Value: +- TRUE Decrypt WEP data success +- FALSE Decrypt WEP data failed +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPSoftDecryptWEP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pGroupKey) +-{ +- UINT trailfcs; +- UINT crc32; +- UCHAR KeyIdx; +- UCHAR WEPKEY[] = { +- //IV +- 0x00, 0x11, 0x22, +- //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC +- }; +- UCHAR *pPayload = (UCHAR *)pData + LENGTH_802_11; +- ULONG payload_len = DataByteCnt - LENGTH_802_11; +- +- NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV +- +- KeyIdx = (*(pPayload + 3) & 0xc0) >> 6; +- if (pGroupKey[KeyIdx].KeyLen == 0) +- return (FALSE); +- +- NdisMoveMemory(WEPKEY + 3, pGroupKey[KeyIdx].Key, pGroupKey[KeyIdx].KeyLen); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, pGroupKey[KeyIdx].KeyLen + 3); +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, payload_len - 4); +- NdisMoveMemory(&trailfcs, pPayload + payload_len - 8, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ +- +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. +- return (FALSE); +- } +- return (TRUE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm "ARCFOUR" initialize +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pKey Pointer to the WEP KEY +- KeyLen Indicate the length fo the WEP KEY +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_INIT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pKey, +- IN UINT KeyLen) +-{ +- UCHAR t, u; +- UINT keyindex; +- UINT stateindex; +- PUCHAR state; +- UINT counter; +- +- state = Ctx->STATE; +- Ctx->X = 0; +- Ctx->Y = 0; +- for (counter = 0; counter < 256; counter++) +- state[counter] = (UCHAR)counter; +- keyindex = 0; +- stateindex = 0; +- for (counter = 0; counter < 256; counter++) +- { +- t = state[counter]; +- stateindex = (stateindex + pKey[keyindex] + t) & 0xff; +- u = state[stateindex]; +- state[stateindex] = t; +- state[counter] = u; +- if (++keyindex >= KeyLen) +- keyindex = 0; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get bytes from ARCFOUR CONTEXT (S-BOX) +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- +- Return Value: +- UCHAR - the value of the ARCFOUR CONTEXT (S-BOX) +- +- Note: +- +- ======================================================================== +-*/ +-UCHAR ARCFOUR_BYTE( +- IN PARCFOURCONTEXT Ctx) +-{ +- UINT x; +- UINT y; +- UCHAR sx, sy; +- PUCHAR state; +- +- state = Ctx->STATE; +- x = (Ctx->X + 1) & 0xff; +- sx = state[x]; +- y = (sx + Ctx->Y) & 0xff; +- sy = state[y]; +- Ctx->X = x; +- Ctx->Y = y; +- state[y] = sx; +- state[x] = sy; +- +- return(state[(sx + sy) & 0xff]); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Decryption Algorithm +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source data +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_DECRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source dta +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm which conform to the special requirement to encrypt GTK. +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source dta +- +- +- ======================================================================== +-*/ +- +-VOID WPAARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- //discard first 256 bytes +- for (i = 0; i < 256; i++) +- ARCFOUR_BYTE(Ctx); +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate a new FCS given the current FCS and the new data. +- +- Arguments: +- Fcs the original FCS value +- Cp pointer to the data which will be calculate the FCS +- Len the length of the data +- +- Return Value: +- UINT - FCS 32 bits +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-UINT RTMP_CALC_FCS32( +- IN UINT Fcs, +- IN PUCHAR Cp, +- IN INT Len) +-{ +- while (Len--) +- Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); +- +- return (Fcs); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Get last FCS and encrypt it to the destination +- +- Arguments: +- pDest Pointer to the Destination +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPSetICV( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest) +-{ +- pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ +- pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); +- +- ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAd->PrivateInfo.FCSCRC32, 4); +-} +- +diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c +index c658bf3..7fd715a 100644 +--- a/drivers/staging/rt2860/common/spectrum.c ++++ b/drivers/staging/rt2860/common/spectrum.c +@@ -40,6 +40,239 @@ + #include "../rt_config.h" + #include "action.h" + ++ ++/* The regulatory information in the USA (US) */ ++DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = ++{ ++/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ ++ {0, {0, 0, {0}}}, // Invlid entry ++ {1, {4, 16, {36, 40, 44, 48}}}, ++ {2, {4, 23, {52, 56, 60, 64}}}, ++ {3, {4, 29, {149, 153, 157, 161}}}, ++ {4, {11, 23, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, ++ {5, {5, 30, {149, 153, 157, 161, 165}}}, ++ {6, {10, 14, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, ++ {7, {10, 27, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, ++ {8, {5, 17, {11, 13, 15, 17, 19}}}, ++ {9, {5, 30, {11, 13, 15, 17, 19}}}, ++ {10, {2, 20, {21, 25}}}, ++ {11, {2, 33, {21, 25}}}, ++ {12, {11, 30, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}}} ++}; ++#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++ ++ ++/* The regulatory information in Europe */ ++DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = ++{ ++/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ ++ {0, {0, 0, {0}}}, // Invalid entry ++ {1, {4, 20, {36, 40, 44, 48}}}, ++ {2, {4, 20, {52, 56, 60, 64}}}, ++ {3, {11, 30, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, ++ {4, {13, 20, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}} ++}; ++#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++ ++ ++/* The regulatory information in Japan */ ++DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = ++{ ++/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ ++ {0, {0, 0, {0}}}, // Invalid entry ++ {1, {4, 22, {34, 38, 42, 46}}}, ++ {2, {3, 24, {8, 12, 16}}}, ++ {3, {3, 24, {8, 12, 16}}}, ++ {4, {3, 24, {8, 12, 16}}}, ++ {5, {3, 24, {8, 12, 16}}}, ++ {6, {3, 22, {8, 12, 16}}}, ++ {7, {4, 24, {184, 188, 192, 196}}}, ++ {8, {4, 24, {184, 188, 192, 196}}}, ++ {9, {4, 24, {184, 188, 192, 196}}}, ++ {10, {4, 24, {184, 188, 192, 196}}}, ++ {11, {4, 22, {184, 188, 192, 196}}}, ++ {12, {4, 24, {7, 8, 9, 11}}}, ++ {13, {4, 24, {7, 8, 9, 11}}}, ++ {14, {4, 24, {7, 8, 9, 11}}}, ++ {15, {4, 24, {7, 8, 9, 11}}}, ++ {16, {6, 24, {183, 184, 185, 187, 188, 189}}}, ++ {17, {6, 24, {183, 184, 185, 187, 188, 189}}}, ++ {18, {6, 24, {183, 184, 185, 187, 188, 189}}}, ++ {19, {6, 24, {183, 184, 185, 187, 188, 189}}}, ++ {20, {6, 17, {183, 184, 185, 187, 188, 189}}}, ++ {21, {6, 24, {6, 7, 8, 9, 10, 11}}}, ++ {22, {6, 24, {6, 7, 8, 9, 10, 11}}}, ++ {23, {6, 24, {6, 7, 8, 9, 10, 11}}}, ++ {24, {6, 24, {6, 7, 8, 9, 10, 11}}}, ++ {25, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, ++ {26, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, ++ {27, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, ++ {28, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, ++ {29, {8, 17, {182, 183, 184, 185, 186, 187, 188, 189}}}, ++ {30, {13, 23, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}}, ++ {31, {1, 23, {14}}}, ++ {32, {4, 22, {52, 56, 60, 64}}} ++}; ++#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++ ++ ++CHAR RTMP_GetTxPwr( ++ IN PRTMP_ADAPTER pAd, ++ IN HTTRANSMIT_SETTING HTTxMode) ++{ ++typedef struct __TX_PWR_CFG ++{ ++ UINT8 Mode; ++ UINT8 MCS; ++ UINT16 req; ++ UINT8 shift; ++ UINT32 BitMask; ++} TX_PWR_CFG; ++ ++ UINT32 Value; ++ INT Idx; ++ UINT8 PhyMode; ++ CHAR CurTxPwr; ++ UINT8 TxPwrRef = 0; ++ CHAR DaltaPwr; ++ ULONG TxPwr[5]; ++ ++ ++ TX_PWR_CFG TxPwrCfg[] = { ++ {MODE_CCK, 0, 0, 4, 0x000000f0}, ++ {MODE_CCK, 1, 0, 0, 0x0000000f}, ++ {MODE_CCK, 2, 0, 12, 0x0000f000}, ++ {MODE_CCK, 3, 0, 8, 0x00000f00}, ++ ++ {MODE_OFDM, 0, 0, 20, 0x00f00000}, ++ {MODE_OFDM, 1, 0, 16, 0x000f0000}, ++ {MODE_OFDM, 2, 0, 28, 0xf0000000}, ++ {MODE_OFDM, 3, 0, 24, 0x0f000000}, ++ {MODE_OFDM, 4, 1, 4, 0x000000f0}, ++ {MODE_OFDM, 5, 1, 0, 0x0000000f}, ++ {MODE_OFDM, 6, 1, 12, 0x0000f000}, ++ {MODE_OFDM, 7, 1, 8, 0x00000f00} ++ ,{MODE_HTMIX, 0, 1, 20, 0x00f00000}, ++ {MODE_HTMIX, 1, 1, 16, 0x000f0000}, ++ {MODE_HTMIX, 2, 1, 28, 0xf0000000}, ++ {MODE_HTMIX, 3, 1, 24, 0x0f000000}, ++ {MODE_HTMIX, 4, 2, 4, 0x000000f0}, ++ {MODE_HTMIX, 5, 2, 0, 0x0000000f}, ++ {MODE_HTMIX, 6, 2, 12, 0x0000f000}, ++ {MODE_HTMIX, 7, 2, 8, 0x00000f00}, ++ {MODE_HTMIX, 8, 2, 20, 0x00f00000}, ++ {MODE_HTMIX, 9, 2, 16, 0x000f0000}, ++ {MODE_HTMIX, 10, 2, 28, 0xf0000000}, ++ {MODE_HTMIX, 11, 2, 24, 0x0f000000}, ++ {MODE_HTMIX, 12, 3, 4, 0x000000f0}, ++ {MODE_HTMIX, 13, 3, 0, 0x0000000f}, ++ {MODE_HTMIX, 14, 3, 12, 0x0000f000}, ++ {MODE_HTMIX, 15, 3, 8, 0x00000f00} ++ }; ++#define MAX_TXPWR_TAB_SIZE (sizeof(TxPwrCfg) / sizeof(TX_PWR_CFG)) ++ ++ CurTxPwr = 19; ++ ++ /* check Tx Power setting from UI. */ ++ if (pAd->CommonCfg.TxPowerPercentage > 90) ++ ; ++ else if (pAd->CommonCfg.TxPowerPercentage > 60) /* reduce Pwr for 1 dB. */ ++ CurTxPwr -= 1; ++ else if (pAd->CommonCfg.TxPowerPercentage > 30) /* reduce Pwr for 3 dB. */ ++ CurTxPwr -= 3; ++ else if (pAd->CommonCfg.TxPowerPercentage > 15) /* reduce Pwr for 6 dB. */ ++ CurTxPwr -= 6; ++ else if (pAd->CommonCfg.TxPowerPercentage > 9) /* reduce Pwr for 9 dB. */ ++ CurTxPwr -= 9; ++ else /* reduce Pwr for 12 dB. */ ++ CurTxPwr -= 12; ++ ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) ++ { ++ if (pAd->CommonCfg.CentralChannel > 14) ++ { ++ TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; ++ TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; ++ TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; ++ TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; ++ TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; ++ } ++ else ++ { ++ TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; ++ TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; ++ TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; ++ TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; ++ TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; ++ } ++ } ++ else ++ { ++ if (pAd->CommonCfg.Channel > 14) ++ { ++ TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; ++ TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; ++ TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; ++ TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; ++ TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; ++ } ++ else ++ { ++ TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; ++ TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; ++ TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; ++ TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; ++ TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; ++ } ++ } ++ ++ ++ switch(HTTxMode.field.MODE) ++ { ++ case MODE_CCK: ++ case MODE_OFDM: ++ Value = TxPwr[1]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; ++ ++ break; ++ ++ case MODE_HTMIX: ++ case MODE_HTGREENFIELD: ++ if (pAd->CommonCfg.TxStream == 1) ++ { ++ Value = TxPwr[2]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; ++ } ++ else if (pAd->CommonCfg.TxStream == 2) ++ { ++ Value = TxPwr[3]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; ++ } ++ break; ++ } ++ ++ PhyMode = ++ (HTTxMode.field.MODE == MODE_HTGREENFIELD) ++ ? MODE_HTMIX : ++ HTTxMode.field.MODE; ++ ++ for (Idx = 0; Idx < MAX_TXPWR_TAB_SIZE; Idx++) ++ { ++ if ((TxPwrCfg[Idx].Mode == PhyMode) ++ && (TxPwrCfg[Idx].MCS == HTTxMode.field.MCS)) ++ { ++ Value = TxPwr[TxPwrCfg[Idx].req]; ++ DaltaPwr = TxPwrRef - (CHAR)((Value & TxPwrCfg[Idx].BitMask) ++ >> TxPwrCfg[Idx].shift); ++ CurTxPwr -= DaltaPwr; ++ break; ++ } ++ } ++ ++ return CurTxPwr; ++} ++ ++ + VOID MeasureReqTabInit( + IN PRTMP_ADAPTER pAd) + { +@@ -57,7 +290,7 @@ VOID MeasureReqTabInit( + VOID MeasureReqTabExit( + IN PRTMP_ADAPTER pAd) + { +- NdisFreeSpinLock(pAd->CommonCfg.MeasureReqTabLock); ++ NdisFreeSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + + if (pAd->CommonCfg.pMeasureReqTab) + kfree(pAd->CommonCfg.pMeasureReqTab); +@@ -66,7 +299,7 @@ VOID MeasureReqTabExit( + return; + } + +-static PMEASURE_REQ_ENTRY MeasureReqLookUp( ++PMEASURE_REQ_ENTRY MeasureReqLookUp( + IN PRTMP_ADAPTER pAd, + IN UINT8 DialogToken) + { +@@ -102,7 +335,7 @@ static PMEASURE_REQ_ENTRY MeasureReqLookUp( + return pEntry; + } + +-static PMEASURE_REQ_ENTRY MeasureReqInsert( ++PMEASURE_REQ_ENTRY MeasureReqInsert( + IN PRTMP_ADAPTER pAd, + IN UINT8 DialogToken) + { +@@ -201,7 +434,7 @@ static PMEASURE_REQ_ENTRY MeasureReqInsert( + return pEntry; + } + +-static VOID MeasureReqDelete( ++VOID MeasureReqDelete( + IN PRTMP_ADAPTER pAd, + IN UINT8 DialogToken) + { +@@ -275,7 +508,7 @@ VOID TpcReqTabInit( + VOID TpcReqTabExit( + IN PRTMP_ADAPTER pAd) + { +- NdisFreeSpinLock(pAd->CommonCfg.TpcReqTabLock); ++ NdisFreeSpinLock(&pAd->CommonCfg.TpcReqTabLock); + + if (pAd->CommonCfg.pTpcReqTab) + kfree(pAd->CommonCfg.pTpcReqTab); +@@ -514,6 +747,72 @@ static UINT8 GetCurTxPwr( + /* + ========================================================================== + Description: ++ Get Current Transmit Power. ++ ++ Parametrs: ++ ++ Return : Current Time Stamp. ++ ========================================================================== ++ */ ++VOID InsertChannelRepIE( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PSTRING pCountry, ++ IN UINT8 RegulatoryClass) ++{ ++ ULONG TempLen; ++ UINT8 Len; ++ UINT8 IEId = IE_AP_CHANNEL_REPORT; ++ PUCHAR pChListPtr = NULL; ++ ++ Len = 1; ++ if (strncmp(pCountry, "US", 2) == 0) ++ { ++ if (RegulatoryClass >= USA_REGULATORY_INFO_SIZE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: USA Unknow Requlatory class (%d)\n", ++ __func__, RegulatoryClass)); ++ return; ++ } ++ ++ Len += USARegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; ++ pChListPtr = USARegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; ++ } ++ else if (strncmp(pCountry, "JP", 2) == 0) ++ { ++ if (RegulatoryClass >= JP_REGULATORY_INFO_SIZE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: JP Unknow Requlatory class (%d)\n", ++ __func__, RegulatoryClass)); ++ return; ++ } ++ ++ Len += JapanRegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; ++ pChListPtr = JapanRegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: Unknow Country (%s)\n", ++ __func__, pCountry)); ++ return; ++ } ++ ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &IEId, ++ 1, &Len, ++ 1, &RegulatoryClass, ++ Len -1, pChListPtr, ++ END_OF_ARGS); ++ ++ *pFrameLen = *pFrameLen + TempLen; ++ ++ return; ++} ++ ++/* ++ ========================================================================== ++ Description: + Insert Dialog Token into frame. + + Parametrs: +@@ -524,7 +823,7 @@ static UINT8 GetCurTxPwr( + Return : None. + ========================================================================== + */ +-static VOID InsertDialogToken( ++VOID InsertDialogToken( + IN PRTMP_ADAPTER pAd, + OUT PUCHAR pFrameBuf, + OUT PULONG pFrameLen, +@@ -585,7 +884,7 @@ static VOID InsertDialogToken( + Return : None. + ========================================================================== + */ +- static VOID InsertTpcReportIE( ++VOID InsertTpcReportIE( + IN PRTMP_ADAPTER pAd, + OUT PUCHAR pFrameBuf, + OUT PULONG pFrameLen, +@@ -679,16 +978,16 @@ static VOID InsertMeasureReqIE( + IN PRTMP_ADAPTER pAd, + OUT PUCHAR pFrameBuf, + OUT PULONG pFrameLen, ++ IN UINT8 Len, + IN PMEASURE_REQ_INFO pMeasureReqIE) + { + ULONG TempLen; +- UINT8 Len = sizeof(MEASURE_REQ_INFO); + UINT8 ElementID = IE_MEASUREMENT_REQUEST; + + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &ElementID, + 1, &Len, +- Len, pMeasureReqIE, ++ sizeof(MEASURE_REQ_INFO), pMeasureReqIE, + END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; +@@ -758,53 +1057,43 @@ static VOID InsertMeasureReportIE( + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementReq( ++VOID MakeMeasurementReqFrame( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, ++ OUT PUCHAR pOutBuffer, ++ OUT PULONG pFrameLen, ++ IN UINT8 TotalLen, ++ IN UINT8 Category, ++ IN UINT8 Action, + IN UINT8 MeasureToken, + IN UINT8 MeasureReqMode, + IN UINT8 MeasureReqType, +- IN UINT8 MeasureCh, +- IN UINT16 MeasureDuration) ++ IN UINT8 NumOfRepetitions) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- HEADER_802_11 ActHdr; ++ ULONG TempLen; + MEASURE_REQ_INFO MeasureReqIE; +- UINT8 RmReqDailogToken = RandomByte(pAd); +- UINT64 MeasureStartTime = GetCurrentTimeStamp(pAd); + +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); ++ InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, Action); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); +- return; +- } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ // fill Dialog Token ++ InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, MeasureToken); + +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_MRQ); ++ /* fill Number of repetitions. */ ++ if (Category == CATEGORY_RM) ++ { ++ MakeOutgoingFrame((pOutBuffer+*pFrameLen), &TempLen, ++ 2, &NumOfRepetitions, ++ END_OF_ARGS); + +- // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, MeasureToken); ++ *pFrameLen += TempLen; ++ } + + // prepare Measurement IE. + NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO)); +- MeasureReqIE.Token = RmReqDailogToken; ++ MeasureReqIE.Token = MeasureToken; + MeasureReqIE.ReqMode.word = MeasureReqMode; + MeasureReqIE.ReqType = MeasureReqType; +- MeasureReqIE.MeasureReq.ChNum = MeasureCh; +- MeasureReqIE.MeasureReq.MeasureStartTime = cpu2le64(MeasureStartTime); +- MeasureReqIE.MeasureReq.MeasureDuration = cpu2le16(MeasureDuration); +- InsertMeasureReqIE(pAd, (pOutBuffer + FrameLen), &FrameLen, &MeasureReqIE); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); ++ InsertMeasureReqIE(pAd, (pOutBuffer+*pFrameLen), pFrameLen, ++ TotalLen, &MeasureReqIE); + + return; + } +@@ -858,7 +1147,7 @@ VOID EnqueueMeasurementRep( + // prepare Measurement IE. + NdisZeroMemory(&MeasureRepIE, sizeof(MEASURE_REPORT_INFO)); + MeasureRepIE.Token = MeasureToken; +- MeasureRepIE.ReportMode.word = MeasureReqMode; ++ MeasureRepIE.ReportMode = MeasureReqMode; + MeasureRepIE.ReportType = MeasureReqType; + InsertMeasureReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, &MeasureRepIE, ReportInfoLen, pReportInfo); + +@@ -1159,7 +1448,8 @@ static BOOLEAN PeerMeasureReqSanity( + IN VOID *pMsg, + IN ULONG MsgLen, + OUT PUINT8 pDialogToken, +- OUT PMEASURE_REQ_INFO pMeasureReqInfo) ++ OUT PMEASURE_REQ_INFO pMeasureReqInfo, ++ OUT PMEASURE_REQ pMeasureReq) + { + PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; + PUCHAR pFramePtr = Fr->Octet; +@@ -1192,12 +1482,12 @@ static BOOLEAN PeerMeasureReqSanity( + NdisMoveMemory(&pMeasureReqInfo->Token, eid_ptr->Octet, 1); + NdisMoveMemory(&pMeasureReqInfo->ReqMode.word, eid_ptr->Octet + 1, 1); + NdisMoveMemory(&pMeasureReqInfo->ReqType, eid_ptr->Octet + 2, 1); +- ptr = eid_ptr->Octet + 3; +- NdisMoveMemory(&pMeasureReqInfo->MeasureReq.ChNum, ptr, 1); ++ ptr = (PUCHAR)(eid_ptr->Octet + 3); ++ NdisMoveMemory(&pMeasureReq->ChNum, ptr, 1); + NdisMoveMemory(&MeasureStartTime, ptr + 1, 8); +- pMeasureReqInfo->MeasureReq.MeasureStartTime = SWAP64(MeasureStartTime); ++ pMeasureReq->MeasureStartTime = SWAP64(MeasureStartTime); + NdisMoveMemory(&MeasureDuration, ptr + 9, 2); +- pMeasureReqInfo->MeasureReq.MeasureDuration = SWAP16(MeasureDuration); ++ pMeasureReq->MeasureDuration = SWAP16(MeasureDuration); + + result = TRUE; + break; +@@ -1285,7 +1575,7 @@ static BOOLEAN PeerMeasureReportSanity( + if (pMeasureReportInfo->ReportType == RM_BASIC) + { + PMEASURE_BASIC_REPORT pReport = (PMEASURE_BASIC_REPORT)pReportBuf; +- ptr = eid_ptr->Octet + 3; ++ ptr = (PUCHAR)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); + NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +@@ -1295,7 +1585,7 @@ static BOOLEAN PeerMeasureReportSanity( + else if (pMeasureReportInfo->ReportType == RM_CCA) + { + PMEASURE_CCA_REPORT pReport = (PMEASURE_CCA_REPORT)pReportBuf; +- ptr = eid_ptr->Octet + 3; ++ ptr = (PUCHAR)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); + NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +@@ -1305,7 +1595,7 @@ static BOOLEAN PeerMeasureReportSanity( + else if (pMeasureReportInfo->ReportType == RM_RPI_HISTOGRAM) + { + PMEASURE_RPI_REPORT pReport = (PMEASURE_RPI_REPORT)pReportBuf; +- ptr = eid_ptr->Octet + 3; ++ ptr = (PUCHAR)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); + NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +@@ -1533,9 +1823,10 @@ static VOID PeerMeasureReqAction( + PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; + UINT8 DialogToken; + MEASURE_REQ_INFO MeasureReqInfo; ++ MEASURE_REQ MeasureReq; + MEASURE_REPORT_MODE ReportMode; + +- if(PeerMeasureReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReqInfo)) ++ if(PeerMeasureReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReqInfo, &MeasureReq)) + { + ReportMode.word = 0; + ReportMode.field.Incapable = 1; +@@ -1729,8 +2020,8 @@ VOID PeerSpectrumAction( + break; + + case SPEC_CHANNEL_SWITCH: +-{ +-} ++ ++ + PeerChSwAnnAction(pAd, Elem); + break; + } +@@ -1749,16 +2040,31 @@ VOID PeerSpectrumAction( + */ + INT Set_MeasureReq_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UINT Aid = 1; + UINT ArgIdx; +- PUCHAR thisChar; ++ PSTRING thisChar; + + MEASURE_REQ_MODE MeasureReqMode; + UINT8 MeasureReqToken = RandomByte(pAd); + UINT8 MeasureReqType = RM_BASIC; + UINT8 MeasureCh = 1; ++ UINT64 MeasureStartTime = GetCurrentTimeStamp(pAd); ++ MEASURE_REQ MeasureReq; ++ UINT8 TotalLen; ++ ++ HEADER_802_11 ActHdr; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen; ++ ++ NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory ++ if(NStatus != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ goto END_OF_MEASURE_REQ; ++ } + + ArgIdx = 1; + while ((thisChar = strsep((char **)&arg, "-")) != NULL) +@@ -1766,7 +2072,7 @@ INT Set_MeasureReq_Proc( + switch(ArgIdx) + { + case 1: // Aid. +- Aid = simple_strtol(thisChar, 0, 16); ++ Aid = (UINT8) simple_strtol(thisChar, 0, 16); + break; + + case 2: // Measurement Request Type. +@@ -1774,12 +2080,12 @@ INT Set_MeasureReq_Proc( + if (MeasureReqType > 3) + { + DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow MeasureReqType(%d)\n", __func__, MeasureReqType)); +- return TRUE; ++ goto END_OF_MEASURE_REQ; + } + break; + + case 3: // Measurement channel. +- MeasureCh = simple_strtol(thisChar, 0, 16); ++ MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); + break; + } + ArgIdx++; +@@ -1789,7 +2095,7 @@ INT Set_MeasureReq_Proc( + if (!VALID_WCID(Aid)) + { + DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow sta of Aid(%d)\n", __func__, Aid)); +- return TRUE; ++ goto END_OF_MEASURE_REQ; + } + + MeasureReqMode.word = 0; +@@ -1797,21 +2103,49 @@ INT Set_MeasureReq_Proc( + + MeasureReqInsert(pAd, MeasureReqToken); + +- EnqueueMeasurementReq(pAd, pAd->MacTab.Content[Aid].Addr, +- MeasureReqToken, MeasureReqMode.word, MeasureReqType, MeasureCh, 2000); ++ // build action frame header. ++ MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pAd->MacTab.Content[Aid].Addr, ++ pAd->CurrentAddress); ++ ++ NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ FrameLen = sizeof(HEADER_802_11); ++ ++ TotalLen = sizeof(MEASURE_REQ_INFO) + sizeof(MEASURE_REQ); ++ ++ MakeMeasurementReqFrame(pAd, pOutBuffer, &FrameLen, ++ sizeof(MEASURE_REQ_INFO), CATEGORY_RM, RM_BASIC, ++ MeasureReqToken, MeasureReqMode.word, ++ MeasureReqType, 0); ++ ++ MeasureReq.ChNum = MeasureCh; ++ MeasureReq.MeasureStartTime = cpu2le64(MeasureStartTime); ++ MeasureReq.MeasureDuration = cpu2le16(2000); ++ ++ { ++ ULONG TempLen; ++ MakeOutgoingFrame( pOutBuffer+FrameLen, &TempLen, ++ sizeof(MEASURE_REQ), &MeasureReq, ++ END_OF_ARGS); ++ FrameLen += TempLen; ++ } ++ ++ MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (UINT)FrameLen); ++ ++END_OF_MEASURE_REQ: ++ MlmeFreeMemory(pAd, pOutBuffer); + + return TRUE; + } + + INT Set_TpcReq_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UINT Aid; + + UINT8 TpcReqToken = RandomByte(pAd); + +- Aid = simple_strtol(arg, 0, 16); ++ Aid = (UINT) simple_strtol(arg, 0, 16); + + DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d\n", __func__, Aid)); + if (!VALID_WCID(Aid)) +diff --git a/drivers/staging/rt2860/config.mk b/drivers/staging/rt2860/config.mk +deleted file mode 100644 +index 25bd55a..0000000 +--- a/drivers/staging/rt2860/config.mk ++++ /dev/null +@@ -1,241 +0,0 @@ +-# Support ATE function +-HAS_ATE=n +- +-# Support 28xx QA ATE function +-HAS_28xx_QA=n +- +-# Support Wpa_Supplicant +-HAS_WPA_SUPPLICANT=n +- +-# Support Native WpaSupplicant for Network Maganger +-HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n +- +-#Support Net interface block while Tx-Sw queue full +-HAS_BLOCK_NET_IF=n +- +-#Support DFS function +-HAS_DFS_SUPPORT=n +- +-#Support Carrier-Sense function +-HAS_CS_SUPPORT=n +- +-#ifdef MULTI_CARD +-# Support for Multiple Cards +-HAS_MC_SUPPORT=n +-#endif // MULTI_CARD // +- +-#Support for IEEE802.11e DLS +-HAS_QOS_DLS_SUPPORT=n +- +-#Support for EXT_CHANNEL +-HAS_EXT_BUILD_CHANNEL_LIST=n +- +-#Support for Net-SNMP +-HAS_SNMP_SUPPORT=n +- +-#Support features of Single SKU. +-HAS_SINGLE_SKU_SUPPORT=n +- +-#Support features of 802.11n +-HAS_DOT11_N_SUPPORT=y +- +- +-################################################# +- +-CC := $(CROSS_COMPILE)gcc +-LD := $(CROSS_COMPILE)ld +- +-WFLAGS := -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT -DLINUX -Wall -Wstrict-prototypes -Wno-trigraphs +- +- +-################################################# +- +-#ifdef CONFIG_STA_SUPPORT +-# config for STA mode +- +-ifeq ($(RT28xx_MODE),STA) +-WFLAGS += -DCONFIG_STA_SUPPORT -DDBG +- +-ifeq ($(HAS_WPA_SUPPLICANT),y) +-WFLAGS += -DWPA_SUPPLICANT_SUPPORT +-endif +- +-ifeq ($(HAS_NATIVE_WPA_SUPPLICANT_SUPPORT),y) +-WFLAGS += -DNATIVE_WPA_SUPPLICANT_SUPPORT +-endif +- +-ifeq ($(HAS_ATE),y) +-WFLAGS += -DRALINK_ATE +-ifeq ($(HAS_28xx_QA),y) +-WFLAGS += -DRALINK_28xx_QA +-endif +-endif +- +-ifeq ($(HAS_SNMP_SUPPORT),y) +-WFLAGS += -DSNMP_SUPPORT +-endif +- +-ifeq ($(HAS_QOS_DLS_SUPPORT),y) +-WFLAGS += -DQOS_DLS_SUPPORT +-endif +- +-ifeq ($(HAS_DOT11_N_SUPPORT),y) +-WFLAGS += -DDOT11_N_SUPPORT +-endif +- +-ifeq ($(HAS_CS_SUPPORT),y) +-WFLAGS += -DCARRIER_DETECTION_SUPPORT +-endif +- +-ifeq ($(HAS_SINGLE_SKU_SUPPORT),y) +-WFLAGS += -DSINGLE_SKU +-endif +- +-endif +-# endif of ifeq ($(RT28xx_MODE),STA) +-#endif // CONFIG_STA_SUPPORT // +- +-################################################# +- +-################################################# +- +-# +-# Common compiler flag +-# +- +- +-ifeq ($(HAS_EXT_BUILD_CHANNEL_LIST),y) +-WFLAGS += -DEXT_BUILD_CHANNEL_LIST +-endif +- +-ifeq ($(CHIPSET),2870) +-WFLAGS +=-DRT2870 +-endif +- +-ifeq ($(PLATFORM),5VT) +-#WFLAGS += -DCONFIG_5VT_ENHANCE +-endif +- +-ifeq ($(HAS_BLOCK_NET_IF),y) +-WFLAGS += -DBLOCK_NET_IF +-endif +- +-ifeq ($(HAS_DFS_SUPPORT),y) +-WFLAGS += -DDFS_SUPPORT +-endif +- +-#ifdef MULTI_CARD +-ifeq ($(HAS_MC_SUPPORT),y) +-WFLAGS += -DMULTIPLE_CARD_SUPPORT +-endif +-#endif // MULTI_CARD // +- +-ifeq ($(HAS_LLTD),y) +-WFLAGS += -DLLTD_SUPPORT +-endif +- +-ifeq ($(PLATFORM),IXP) +-WFLAGS += -DRT_BIG_ENDIAN +-endif +- +-ifeq ($(PLATFORM),IKANOS_V160) +-WFLAGS += -DRT_BIG_ENDIAN -DIKANOS_VX_1X0 +-endif +- +-ifeq ($(PLATFORM),IKANOS_V180) +-WFLAGS += -DRT_BIG_ENDIAN -DIKANOS_VX_1X0 +-endif +- +-ifeq ($(PLATFORM),INF_TWINPASS) +-WFLAGS += -DRT_BIG_ENDIAN -DINF_TWINPASS +-endif +- +-ifeq ($(PLATFORM),INF_DANUBE) +-WFLAGS += -DINF_DANUBE -DRT_BIG_ENDIAN +-endif +- +-ifeq ($(PLATFORM),CAVM_OCTEON) +-WFLAGS += -DRT_BIG_ENDIAN +-endif +- +-ifeq ($(PLATFORM),BRCM_6358) +-WFLAGS += -DRT_BIG_ENDIAN +-endif +- +-ifeq ($(PLATFORM),INF_AMAZON_SE) +-#WFLAGS += -DRT_BIG_ENDIAN -DINF_AMAZON_SE -DBG_FT_SUPPORT +-WFLAGS += -DRT_BIG_ENDIAN -DINF_AMAZON_SE +-endif +- +-#kernel build options for 2.4 +-# move to Makefile outside LINUX_SRC := /opt/star/kernel/linux-2.4.27-star +- +-ifeq ($(PLATFORM),STAR) +-CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=4 -march=armv4 -mshort-load-bytes -msoft-float -Uarm -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h $(WFLAGS) +- +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),SIGMA) +-CFLAGS := -D__KERNEL__ -I$(RT28xx_DIR)/include -I$(LINUX_SRC)/include -I$(LINUX_SRC)/include/asm/gcc -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -DEM86XX_CHIP=EM86XX_CHIPID_TANGO2 -DEM86XX_REVISION=6 -I$(LINUX_SRC)/include/asm-mips/mach-generic -I$(RT2860_DIR)/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding -O2 -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -pipe -mabi=32 -march=mips32r2 -Wa,-32 -Wa,-march=mips32r2 -Wa,-mips32r2 -Wa,--trap -DMODULE $(WFLAGS) +- +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),SIGMA_8622) +-CFLAGS := -D__KERNEL__ -I$(CROSS_COMPILE_INCLUDE)/include -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fno-common -pipe -fno-builtin -D__linux__ -DNO_MM -mapcs-32 -march=armv4 -mtune=arm7tdmi -msoft-float -DMODULE -mshort-load-bytes -nostdinc -iwithprefix -DMODULE $(WFLAGS) +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),5VT) +-CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-omit-frame-pointer -mapcs -mno-sched-prolog -mabi=apcs-gnu -mno-thumb-interwork -D__LINUX_ARM_ARCH__=5 -march=armv5te -mtune=arm926ej-s --param max-inline-insns-single=40000 -Uarm -Wdeclaration-after-statement -Wno-pointer-sign -DMODULE $(WFLAGS) +- +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),IKANOS_V160) +-CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(LINUX_SRC)/include/asm/gcc -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -I$(LINUX_SRC)/include/asm-mips/mach-generic -I$(RT28xx_DIR)/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding -O2 -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -pipe -march=lx4189 -Wa, -DMODULE $(WFLAGS) +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),IKANOS_V180) +-CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(LINUX_SRC)/include/asm/gcc -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -I$(LINUX_SRC)/include/asm-mips/mach-tango2 -I$(LINUX_SRC)/include/asm-mips/mach-generic -I$(RT28xx_DIR)/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -ffreestanding -O2 -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -pipe -mips32r2 -Wa, -DMODULE $(WFLAGS) +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),INF_TWINPASS) +-CFLAGS := -D__KERNEL__ -DMODULE -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -G 0 -mno-abicalls -fno-pic -march=4kc -mips32 -Wa,--trap -pipe -mlong-calls $(WFLAGS) +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),INF_DANUBE) +-CFLAGS := -I$(RT28xx_DIR)/include $(WFLAGS) -Wundef -fno-strict-aliasing -fno-common -ffreestanding -Os -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -pipe -msoft-float -mabi=32 -march=mips32 -Wa,-32 -Wa,-march=mips32 -Wa,-mips32 -Wa,--trap -I$(LINUX_SRC)/include/asm-mips/mach-generic +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),BRCM_6358) +-CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -nostdinc -iwithprefix include -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -I $(LINUX_SRC)/include/asm/gcc -G 0 -mno-abicalls -fno-pic -pipe -finline-limit=100000 -mabi=32 -march=mips32 -Wa,-32 -Wa,-march=mips32 -Wa,-mips32 -Wa,--trap -I$(LINUX_SRC)/include/asm-mips/mach-bcm963xx -I$(LINUX_SRC)/include/asm-mips/mach-generic -Os -fomit-frame-pointer -Wdeclaration-after-statement -DMODULE -mlong-calls +-export CFLAGS +-endif +- +-ifeq ($(PLATFORM),PC) +- ifneq (,$(findstring 2.4,$(LINUX_SRC))) +- # Linux 2.4 +- CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h $(WFLAGS) +- export CFLAGS +- else +- # Linux 2.6 +- EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include +- endif +-endif +- +-ifeq ($(PLATFORM),IXP) +- EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include -mbig-endian +-endif +- +-ifeq ($(PLATFORM),CAVM_OCTEON) +- EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include \ +- -mabi=64 $(WFLAGS) +-export CFLAGS +-endif +- +diff --git a/drivers/staging/rt2860/crypt_hmac.h b/drivers/staging/rt2860/crypt_hmac.h +new file mode 100644 +index 0000000..9314ff7 +--- /dev/null ++++ b/drivers/staging/rt2860/crypt_hmac.h +@@ -0,0 +1,82 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++ ++/**************************************************************************** ++ Module Name: ++ HMAC ++ ++ Abstract: ++ FIPS 198: The Keyed-Hash Message Authentication Code (HMAC) ++ ++ Revision History: ++ Who When What ++ -------- ---------- ------------------------------------------ ++ Eddy 2008/11/24 Create HMAC-SHA1, HMAC-SHA256 ++***************************************************************************/ ++#ifndef __CRYPT_HMAC_H__ ++#define __CRYPT_HMAC_H__ ++ ++#ifdef CRYPT_TESTPLAN ++#include "crypt_testplan.h" ++#else ++#include "rt_config.h" ++#endif /* CRYPT_TESTPLAN */ ++ ++#ifdef SHA1_SUPPORT ++#define HMAC_SHA1_SUPPORT ++VOID HMAC_SHA1 ( ++ IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 MAC[], ++ IN UINT MACLen); ++#endif /* SHA1_SUPPORT */ ++ ++#ifdef SHA256_SUPPORT ++#define HMAC_SHA256_SUPPORT ++VOID HMAC_SHA256 ( ++ IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 MAC[], ++ IN UINT MACLen); ++#endif /* SHA256_SUPPORT */ ++ ++#ifdef MD5_SUPPORT ++#define HMAC_MD5_SUPPORT ++VOID HMAC_MD5 ( ++ IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 MAC[], ++ IN UINT MACLen); ++#endif /* MD5_SUPPORT */ ++ ++#endif /* __CRYPT_HMAC_H__ */ +diff --git a/drivers/staging/rt2860/crypt_md5.h b/drivers/staging/rt2860/crypt_md5.h +new file mode 100644 +index 0000000..66ae424 +--- /dev/null ++++ b/drivers/staging/rt2860/crypt_md5.h +@@ -0,0 +1,80 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++ ++/**************************************************************************** ++ Module Name: ++ MD5 ++ ++ Abstract: ++ RFC1321: The MD5 Message-Digest Algorithm ++ ++ Revision History: ++ Who When What ++ -------- ---------- ------------------------------------------ ++ Eddy 2008/11/24 Create md5 ++***************************************************************************/ ++ ++#ifndef __CRYPT_MD5_H__ ++#define __CRYPT_MD5_H__ ++ ++#ifdef CRYPT_TESTPLAN ++#include "crypt_testplan.h" ++#else ++#include "rt_config.h" ++#endif /* CRYPT_TESTPLAN */ ++ ++/* Algorithm options */ ++#define MD5_SUPPORT ++ ++#ifdef MD5_SUPPORT ++#define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ ++#define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ ++typedef struct { ++ UINT32 HashValue[4]; ++ UINT64 MessageLen; ++ UINT8 Block[MD5_BLOCK_SIZE]; ++ UINT BlockLen; ++} MD5_CTX_STRUC, *PMD5_CTX_STRUC; ++ ++VOID MD5_Init ( ++ IN MD5_CTX_STRUC *pMD5_CTX); ++VOID MD5_Hash ( ++ IN MD5_CTX_STRUC *pMD5_CTX); ++VOID MD5_Append ( ++ IN MD5_CTX_STRUC *pMD5_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen); ++VOID MD5_End ( ++ IN MD5_CTX_STRUC *pMD5_CTX, ++ OUT UINT8 DigestMessage[]); ++VOID RT_MD5 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]); ++#endif /* MD5_SUPPORT */ ++ ++#endif /* __CRYPT_MD5_H__ */ +diff --git a/drivers/staging/rt2860/crypt_sha2.h b/drivers/staging/rt2860/crypt_sha2.h +new file mode 100644 +index 0000000..055efb1 +--- /dev/null ++++ b/drivers/staging/rt2860/crypt_sha2.h +@@ -0,0 +1,109 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ */ ++ ++/**************************************************************************** ++ Module Name: ++ SHA2 ++ ++ Abstract: ++ FIPS 180-2: Secure Hash Standard (SHS) ++ ++ Revision History: ++ Who When What ++ -------- ---------- ------------------------------------------ ++ Eddy 2008/11/24 Create SHA1 ++ Eddy 2008/07/23 Create SHA256 ++***************************************************************************/ ++ ++#ifndef __CRYPT_SHA2_H__ ++#define __CRYPT_SHA2_H__ ++ ++#ifdef CRYPT_TESTPLAN ++#include "crypt_testplan.h" ++#else ++#include "rt_config.h" ++#endif /* CRYPT_TESTPLAN */ ++ ++/* Algorithm options */ ++#define SHA1_SUPPORT ++#define SHA256_SUPPORT ++ ++#ifdef SHA1_SUPPORT ++#define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ ++#define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ ++typedef struct _SHA1_CTX_STRUC { ++ UINT32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ ++ UINT64 MessageLen; /* total size */ ++ UINT8 Block[SHA1_BLOCK_SIZE]; ++ UINT BlockLen; ++} SHA1_CTX_STRUC, *PSHA1_CTX_STRUC; ++ ++VOID RT_SHA1_Init ( ++ IN SHA1_CTX_STRUC *pSHA_CTX); ++VOID SHA1_Hash ( ++ IN SHA1_CTX_STRUC *pSHA_CTX); ++VOID SHA1_Append ( ++ IN SHA1_CTX_STRUC *pSHA_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen); ++VOID SHA1_End ( ++ IN SHA1_CTX_STRUC *pSHA_CTX, ++ OUT UINT8 DigestMessage[]); ++VOID RT_SHA1 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]); ++#endif /* SHA1_SUPPORT */ ++ ++#ifdef SHA256_SUPPORT ++#define SHA256_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ ++#define SHA256_DIGEST_SIZE 32 /* 256 bits = 32 bytes */ ++typedef struct _SHA256_CTX_STRUC { ++ UINT32 HashValue[8]; /* 8 = (SHA256_DIGEST_SIZE / 32) */ ++ UINT64 MessageLen; /* total size */ ++ UINT8 Block[SHA256_BLOCK_SIZE]; ++ UINT BlockLen; ++} SHA256_CTX_STRUC, *PSHA256_CTX_STRUC; ++ ++VOID SHA256_Init ( ++ IN SHA256_CTX_STRUC *pSHA_CTX); ++VOID SHA256_Hash ( ++ IN SHA256_CTX_STRUC *pSHA_CTX); ++VOID SHA256_Append ( ++ IN SHA256_CTX_STRUC *pSHA_CTX, ++ IN const UINT8 Message[], ++ IN UINT MessageLen); ++VOID SHA256_End ( ++ IN SHA256_CTX_STRUC *pSHA_CTX, ++ OUT UINT8 DigestMessage[]); ++VOID RT_SHA256 ( ++ IN const UINT8 Message[], ++ IN UINT MessageLen, ++ OUT UINT8 DigestMessage[]); ++#endif /* SHA256_SUPPORT */ ++ ++#endif /* __CRYPT_SHA2_H__ */ +diff --git a/drivers/staging/rt2860/dfs.h b/drivers/staging/rt2860/dfs.h +index f34f618..6fa6d65 100644 +--- a/drivers/staging/rt2860/dfs.h ++++ b/drivers/staging/rt2860/dfs.h +@@ -43,6 +43,33 @@ + #define WIDTH_RD_CHECK 1 + + ++ ++/************************************************************************* ++ * ++ * DFS Radar related definitions. ++ * ++ ************************************************************************/ ++//#define CARRIER_DETECT_TASK_NUM 6 ++//#define RADAR_DETECT_TASK_NUM 7 ++ ++// McuRadarState && McuCarrierState for 2880-SW-MCU ++#define FREE_FOR_TX 0 ++#define WAIT_CTS_BEING_SENT 1 ++#define DO_DETECTION 2 ++ ++// McuRadarEvent ++#define RADAR_EVENT_CTS_SENT 0x01 // Host signal MCU that CTS has been sent ++#define RADAR_EVENT_CTS_CARRIER_SENT 0x02 // Host signal MCU that CTS has been sent (Carrier) ++#define RADAR_EVENT_RADAR_DETECTING 0x04 // Radar detection is on going, carrier detection hold back ++#define RADAR_EVENT_CARRIER_DETECTING 0x08 // Carrier detection is on going, radar detection hold back ++#define RADAR_EVENT_WIDTH_RADAR 0x10 // BBP == 2 radar detected ++#define RADAR_EVENT_CTS_KICKED 0x20 // Radar detection need to sent double CTS, first CTS sent ++ ++// McuRadarCmd ++#define DETECTION_STOP 0 ++#define RADAR_DETECTION 1 ++#define CARRIER_DETECTION 2 ++ + VOID BbpRadarDetectionStart( + IN PRTMP_ADAPTER pAd); + +@@ -77,12 +104,13 @@ ULONG RTMPReadRadarDuration( + VOID RTMPCleanRadarDuration( + IN PRTMP_ADAPTER pAd); + ++ + INT Set_ChMovingTime_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_LongPulseRadarTh_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +new file mode 100644 +index 0000000..f1aef0c +--- /dev/null ++++ b/drivers/staging/rt2860/eeprom.h +@@ -0,0 +1,93 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ ++ Module Name: ++ eeprom.h ++ ++ Abstract: ++ Miniport header file for eeprom related information ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++#ifndef __EEPROM_H__ ++#define __EEPROM_H__ ++ ++ ++ ++#ifdef RTMP_PCI_SUPPORT ++/************************************************************************* ++ * Public function declarations for prom-based chipset ++ ************************************************************************/ ++int rtmp_ee_prom_read16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ OUT USHORT *pValue); ++ ++int rtmp_ee_prom_write16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT value); ++#endif // RTMP_PCI_SUPPORT // ++#ifdef RTMP_USB_SUPPORT ++/************************************************************************* ++ * Public function declarations for usb-based prom chipset ++ ************************************************************************/ ++NTSTATUS RTUSBReadEEPROM16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT offset, ++ OUT PUSHORT pData); ++ ++NTSTATUS RTUSBWriteEEPROM16( ++ IN RTMP_ADAPTER *pAd, ++ IN USHORT offset, ++ IN USHORT value); ++#endif // RTMP_USB_SUPPORT // ++ ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT ++int rtmp_ee_efuse_read16( ++ IN RTMP_ADAPTER *pAd, ++ IN USHORT Offset, ++ OUT USHORT *pValue); ++ ++int rtmp_ee_efuse_write16( ++ IN RTMP_ADAPTER *pAd, ++ IN USHORT Offset, ++ IN USHORT data); ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // ++ ++/************************************************************************* ++ * Public function declarations for prom operation callback functions setting ++ ************************************************************************/ ++INT RtmpChipOpsEepromHook( ++ IN RTMP_ADAPTER *pAd, ++ IN INT infType); ++ ++#endif // __EEPROM_H__ // +diff --git a/drivers/staging/rt2860/iface/rtmp_pci.h b/drivers/staging/rt2860/iface/rtmp_pci.h +new file mode 100644 +index 0000000..aa66ff7 +--- /dev/null ++++ b/drivers/staging/rt2860/iface/rtmp_pci.h +@@ -0,0 +1,83 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++#ifndef __RTMP_PCI_H__ ++#define __RTMP_PCI_H__ ++ ++#define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ ++ ((POS_COOKIE)handle)->pci_dev = dev_p; ++ ++ ++#ifdef LINUX ++// set driver data ++#define RT28XX_DRVDATA_SET(_a) pci_set_drvdata(_a, net_dev); ++ ++#define RT28XX_PUT_DEVICE(dev_p) ++ ++#ifndef SA_SHIRQ ++#define SA_SHIRQ IRQF_SHARED ++#endif ++ ++#ifdef PCI_MSI_SUPPORT ++#define RTMP_MSI_ENABLE(_pAd) \ ++ { POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ ++ (_pAd)->HaveMsi = pci_enable_msi(_pObj->pci_dev) == 0 ? TRUE : FALSE; \ ++ } ++ ++#define RTMP_MSI_DISABLE(_pAd) \ ++ { POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ ++ if (_pAd->HaveMsi == TRUE) \ ++ pci_disable_msi(_pObj->pci_dev); \ ++ _pAd->HaveMsi = FALSE; \ ++ } ++#else ++#define RTMP_MSI_ENABLE(_pAd) do{}while(0) ++#define RTMP_MSI_DISABLE(_pAd) do{}while(0) ++#endif // PCI_MSI_SUPPORT // ++ ++#define RTMP_PCI_DEV_UNMAP() \ ++{ if (net_dev->base_addr) { \ ++ iounmap((void *)(net_dev->base_addr)); \ ++ release_mem_region(pci_resource_start(dev_p, 0), \ ++ pci_resource_len(dev_p, 0)); } \ ++ if (net_dev->irq) pci_release_regions(dev_p); } ++ ++ ++#define PCI_REG_READ_WORD(pci_dev, offset, Configuration) \ ++ if (pci_read_config_word(pci_dev, offset, ®16) == 0) \ ++ Configuration = le2cpu16(reg16); \ ++ else \ ++ Configuration = 0; ++ ++#define PCI_REG_WIRTE_WORD(pci_dev, offset, Configuration) \ ++ reg16 = cpu2le16(Configuration); \ ++ pci_write_config_word(pci_dev, offset, reg16); ++ ++#endif // LINUX // ++ ++ ++#endif // __RTMP_PCI_H__ // +diff --git a/drivers/staging/rt2860/iface/rtmp_usb.h b/drivers/staging/rt2860/iface/rtmp_usb.h +new file mode 100644 +index 0000000..2e9165e +--- /dev/null ++++ b/drivers/staging/rt2860/iface/rtmp_usb.h +@@ -0,0 +1,200 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++#ifndef __RTMP_USB_H__ ++#define __RTMP_USB_H__ ++ ++ ++#include "../rtusb_io.h" ++ ++ ++#ifdef LINUX ++#include ++ ++typedef struct usb_device * PUSB_DEV; ++typedef struct urb *purbb_t; ++typedef struct usb_ctrlrequest devctrlrequest; ++#endif // LINUX // ++ ++extern UCHAR EpToQueue[6]; ++ ++ ++#define RXBULKAGGRE_ZISE 12 ++#define MAX_TXBULK_LIMIT (LOCAL_TXBUF_SIZE*(BULKAGGRE_ZISE-1)) ++#define MAX_TXBULK_SIZE (LOCAL_TXBUF_SIZE*BULKAGGRE_ZISE) ++#define MAX_RXBULK_SIZE (LOCAL_TXBUF_SIZE*RXBULKAGGRE_ZISE) ++#define MAX_MLME_HANDLER_MEMORY 20 ++ ++ ++// Flags for Bulkflags control for bulk out data ++// ++#define fRTUSB_BULK_OUT_DATA_NULL 0x00000001 ++#define fRTUSB_BULK_OUT_RTS 0x00000002 ++#define fRTUSB_BULK_OUT_MLME 0x00000004 ++ ++#define fRTUSB_BULK_OUT_PSPOLL 0x00000010 ++#define fRTUSB_BULK_OUT_DATA_FRAG 0x00000020 ++#define fRTUSB_BULK_OUT_DATA_FRAG_2 0x00000040 ++#define fRTUSB_BULK_OUT_DATA_FRAG_3 0x00000080 ++#define fRTUSB_BULK_OUT_DATA_FRAG_4 0x00000100 ++ ++#define fRTUSB_BULK_OUT_DATA_NORMAL 0x00010000 ++#define fRTUSB_BULK_OUT_DATA_NORMAL_2 0x00020000 ++#define fRTUSB_BULK_OUT_DATA_NORMAL_3 0x00040000 ++#define fRTUSB_BULK_OUT_DATA_NORMAL_4 0x00080000 ++ ++// TODO:move to ./ate/include/iface/ate_usb.h ++ ++ ++#define FREE_HTTX_RING(_pCookie, _pipeId, _txContext) \ ++{ \ ++ if ((_txContext)->ENextBulkOutPosition == (_txContext)->CurWritePosition) \ ++ { \ ++ (_txContext)->bRingEmpty = TRUE; \ ++ } \ ++ /*NdisInterlockedDecrement(&(_p)->TxCount); */\ ++} ++ ++ ++ ++/****************************************************************************** ++ ++ USB Bulk operation related definitions ++ ++******************************************************************************/ ++ ++#ifdef LINUX ++#define BULKAGGRE_ZISE 100 ++#define RT28XX_PUT_DEVICE usb_put_dev ++#define RTUSB_ALLOC_URB(iso) usb_alloc_urb(iso, GFP_ATOMIC) ++#define RTUSB_SUBMIT_URB(pUrb) usb_submit_urb(pUrb, GFP_ATOMIC) ++#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr) usb_buffer_alloc(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr) ++#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) ++ ++#define RTUSB_FREE_URB(pUrb) usb_free_urb(pUrb) ++ ++// unlink urb ++#define RTUSB_UNLINK_URB(pUrb) usb_kill_urb(pUrb) ++ ++extern void dump_urb(struct urb* purb); ++ ++#define InterlockedIncrement atomic_inc ++#define NdisInterlockedIncrement atomic_inc ++#define InterlockedDecrement atomic_dec ++#define NdisInterlockedDecrement atomic_dec ++#define InterlockedExchange atomic_set ++ ++#endif // LINUX // ++ ++ ++ ++#define NT_SUCCESS(status) (((status) >=0) ? (TRUE):(FALSE)) ++ ++ ++ ++#define USBD_TRANSFER_DIRECTION_OUT 0 ++#define USBD_TRANSFER_DIRECTION_IN 0 ++#define USBD_SHORT_TRANSFER_OK 0 ++#define PURB purbb_t ++ ++#define PIRP PVOID ++#define NDIS_OID UINT ++#ifndef USB_ST_NOERROR ++#define USB_ST_NOERROR 0 ++#endif ++ ++// vendor-specific control operations ++#define CONTROL_TIMEOUT_JIFFIES ( (100 * OS_HZ) / 1000) ++#define UNLINK_TIMEOUT_MS 3 ++ ++ ++VOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); ++VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++ ++ ++#ifdef KTHREAD_SUPPORT ++#define RTUSBMlmeUp(pAd) \ ++ do{ \ ++ RTMP_OS_TASK *_pTask = &((pAd)->mlmeTask);\ ++ if (_pTask->kthread_task) \ ++ { \ ++ _pTask->kthread_running = TRUE; \ ++ wake_up(&_pTask->kthread_q); \ ++ } \ ++ }while(0) ++#else ++#define RTUSBMlmeUp(pAd) \ ++ do{ \ ++ RTMP_OS_TASK *_pTask = &((pAd)->mlmeTask);\ ++ CHECK_PID_LEGALITY(_pTask->taskPID) \ ++ { \ ++ RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \ ++ }\ ++ }while(0) ++#endif ++ ++#ifdef KTHREAD_SUPPORT ++#define RTUSBCMDUp(pAd) \ ++ do{ \ ++ RTMP_OS_TASK *_pTask = &((pAd)->cmdQTask); \ ++ { \ ++ _pTask->kthread_running = TRUE; \ ++ wake_up(&_pTask->kthread_q); \ ++ } \ ++ }while(0) ++ ++#else ++#define RTUSBCMDUp(pAd) \ ++ do{ \ ++ RTMP_OS_TASK *_pTask = &((pAd)->cmdQTask); \ ++ CHECK_PID_LEGALITY(_pTask->taskPID) \ ++ {\ ++ RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \ ++ }\ ++ }while(0) ++#endif ++ ++#define DEVICE_VENDOR_REQUEST_OUT 0x40 ++#define DEVICE_VENDOR_REQUEST_IN 0xc0 ++//#define INTERFACE_VENDOR_REQUEST_OUT 0x41 ++//#define INTERFACE_VENDOR_REQUEST_IN 0xc1 ++ ++#define BULKOUT_MGMT_RESET_FLAG 0x80 ++ ++#define RTUSB_SET_BULK_FLAG(_M, _F) ((_M)->BulkFlags |= (_F)) ++#define RTUSB_CLEAR_BULK_FLAG(_M, _F) ((_M)->BulkFlags &= ~(_F)) ++#define RTUSB_TEST_BULK_FLAG(_M, _F) (((_M)->BulkFlags & (_F)) != 0) ++ ++#define RTMP_IRQ_REQUEST(net_dev) do{}while(0) ++#define RTMP_IRQ_RELEASE(net_dev) do{}while(0) ++ ++ ++#endif // __RTMP_USB_H__ // +diff --git a/drivers/staging/rt2860/md5.h b/drivers/staging/rt2860/md5.h +deleted file mode 100644 +index d85db12..0000000 +--- a/drivers/staging/rt2860/md5.h ++++ /dev/null +@@ -1,107 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- md5.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- jan 10-28-03 Initial +- Rita 11-23-04 Modify MD5 and SHA-1 +-*/ +- +-#ifndef uint8 +-#define uint8 unsigned char +-#endif +- +-#ifndef uint32 +-#define uint32 unsigned long int +-#endif +- +- +-#ifndef __MD5_H__ +-#define __MD5_H__ +- +-#define MD5_MAC_LEN 16 +- +-typedef struct _MD5_CTX { +- UINT32 Buf[4]; // buffers of four states +- UCHAR Input[64]; // input message +- UINT32 LenInBitCount[2]; // length counter for input message, 0 up to 64 bits +-} MD5_CTX; +- +-VOID MD5Init(MD5_CTX *pCtx); +-VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes); +-VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx); +-VOID MD5Transform(UINT32 Buf[4], UINT32 Mes[16]); +- +-void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac); +-void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac); +- +-// +-// SHA context +-// +-typedef struct _SHA_CTX +-{ +- UINT32 Buf[5]; // buffers of five states +- UCHAR Input[80]; // input message +- UINT32 LenInBitCount[2]; // length counter for input message, 0 up to 64 bits +- +-} SHA_CTX; +- +-VOID SHAInit(SHA_CTX *pCtx); +-UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes); +-VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20]); +-VOID SHATransform(UINT32 Buf[5], UINT32 Mes[20]); +- +-#define SHA_DIGEST_LEN 20 +-#endif // __MD5_H__ +- +-/******************************************************************************/ +-#ifndef _AES_H +-#define _AES_H +- +-typedef struct +-{ +- uint32 erk[64]; /* encryption round keys */ +- uint32 drk[64]; /* decryption round keys */ +- int nr; /* number of rounds */ +-} +-aes_context; +- +-int rtmp_aes_set_key( aes_context *ctx, uint8 *key, int nbits ); +-void rtmp_aes_encrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ); +-void rtmp_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ); +- +-void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output); +-int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output); +- +-#endif /* aes.h */ +- +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index 3d1a828..f609ea5 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -39,6 +39,10 @@ + #ifndef __MLME_H__ + #define __MLME_H__ + ++#include "rtmp_dot11.h" ++ ++ ++ + // maximum supported capability information - + // ESS, IBSS, Privacy, Short Preamble, Spectrum mgmt, Short Slot + #define SUPPORTED_CAPABILITY_INFO 0x0533 +@@ -58,23 +62,24 @@ + #define JAP_W56 4 + #define MAX_RD_REGION 5 + +-#ifdef NDIS51_MINIPORT +-#define BEACON_LOST_TIME 4000 // 2048 msec = 2 sec +-#else + #define BEACON_LOST_TIME 4 * OS_HZ // 2048 msec = 2 sec +-#endif + + #define DLS_TIMEOUT 1200 // unit: msec + #define AUTH_TIMEOUT 300 // unit: msec + #define ASSOC_TIMEOUT 300 // unit: msec +-#define JOIN_TIMEOUT 2 * OS_HZ // unit: msec ++#define JOIN_TIMEOUT 2000 // unit: msec + #define SHORT_CHANNEL_TIME 90 // unit: msec + #define MIN_CHANNEL_TIME 110 // unit: msec, for dual band scan + #define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan + #define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time + #define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1 ++#define LINK_DOWN_TIMEOUT 20000 // unit: msec ++#define AUTO_WAKEUP_TIMEOUT 70 //unit: msec ++ ++ + #define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1 + ++ + // Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720). + // SHould not refer to this constant anymore + //#define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm +@@ -290,7 +295,7 @@ typedef struct PACKED _HT_CAPABILITY_IE{ + #define dot11BSSWidthTriggerScanInterval 300 // in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. + #define dot11OBSSScanPassiveTotalPerChannel 200 // in TU. min total amount of time that the STA scans each channel when performing a passive OBSS scan. + #define dot11OBSSScanActiveTotalPerChannel 20 //in TU. min total amount of time that the STA scans each channel when performing a active OBSS scan +-#define dot11BSSWidthChannelTransactionDelayFactor 5 // min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maxima ++#define dot11BSSWidthChannelTransactionDelayFactor 5 // min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maximum + // interval between overlapping BSS scan operations. + #define dot11BSSScanActivityThreshold 25 // in %%, max total time that a STA may be active on the medium during a period of + // (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without +@@ -382,7 +387,7 @@ typedef struct { + BOOLEAN bHtEnable; // If we should use ht rate. + BOOLEAN bPreNHt; // If we should use ht rate. + //Substract from HT Capability IE +- UCHAR MCSSet[16]; //only supoort MCS=0-15,32 , ++ UCHAR MCSSet[16]; + } RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; + + //This structure substracts ralink supports from all 802.11n-related features. +@@ -460,60 +465,6 @@ typedef struct PACKED{ + UCHAR NewExtChanOffset; + } NEW_EXT_CHAN_IE, *PNEW_EXT_CHAN_IE; + +- +-// 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. +-typedef struct PACKED { +- UINT32 MA:1; //management action payload exist in (QoS Null+HTC) +- UINT32 TRQ:1; //sounding request +- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback +- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. +- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. +- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available +- UINT32 CalPos:2; // calibration position +- UINT32 CalSeq:2; //calibration sequence +- UINT32 FBKReq:2; //feedback request +- UINT32 CSISTEERING:2; //CSI/ STEERING +- UINT32 ZLFAnnouce:1; // ZLF announcement +- UINT32 rsv:5; //calibration sequence +- UINT32 ACConstraint:1; //feedback request +- UINT32 RDG:1; //RDG / More PPDU +-} HT_CONTROL, *PHT_CONTROL; +- +-// 2-byte QOS CONTROL field +-typedef struct PACKED { +- USHORT TID:4; +- USHORT EOSP:1; +- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA +- USHORT AMsduPresent:1; +- USHORT Txop_QueueSize:8; +-} QOS_CONTROL, *PQOS_CONTROL; +- +-// 2-byte Frame control field +-typedef struct PACKED { +- USHORT Ver:2; // Protocol version +- USHORT Type:2; // MSDU type +- USHORT SubType:4; // MSDU subtype +- USHORT ToDs:1; // To DS indication +- USHORT FrDs:1; // From DS indication +- USHORT MoreFrag:1; // More fragment bit +- USHORT Retry:1; // Retry status bit +- USHORT PwrMgmt:1; // Power management bit +- USHORT MoreData:1; // More data bit +- USHORT Wep:1; // Wep data +- USHORT Order:1; // Strict order expected +-} FRAME_CONTROL, *PFRAME_CONTROL; +- +-typedef struct PACKED _HEADER_802_11 { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR Addr3[MAC_ADDR_LEN]; +- USHORT Frag:4; +- USHORT Sequence:12; +- UCHAR Octet[0]; +-} HEADER_802_11, *PHEADER_802_11; +- + typedef struct PACKED _FRAME_802_11 { + HEADER_802_11 Hdr; + UCHAR Octet[1]; +@@ -595,20 +546,6 @@ typedef struct { + } EACH_TID, *PEACH_TID; + + +-typedef struct PACKED _PSPOLL_FRAME { +- FRAME_CONTROL FC; +- USHORT Aid; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Ta[MAC_ADDR_LEN]; +-} PSPOLL_FRAME, *PPSPOLL_FRAME; +- +-typedef struct PACKED _RTS_FRAME { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +-}RTS_FRAME, *PRTS_FRAME; +- + // BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. + typedef struct PACKED _FRAME_BA_REQ { + FRAME_CONTROL FC; +@@ -1059,7 +996,7 @@ typedef struct _MLME_START_REQ_STRUCT { + typedef struct PACKED { + UCHAR Eid; + UCHAR Len; +- CHAR Octet[1]; ++ UCHAR Octet[1]; + } EID_STRUCT,*PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; + + typedef struct PACKED _RTMP_TX_RATE_SWITCH +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index 0227c4a..a03293c 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -37,9 +37,14 @@ + #ifndef _OID_H_ + #define _OID_H_ + ++//#include + ++#ifndef TRUE + #define TRUE 1 ++#endif ++#ifndef FALSE + #define FALSE 0 ++#endif + // + // IEEE 802.11 Structures and definitions + // +@@ -73,24 +78,25 @@ + #define NDIS_802_11_LENGTH_RATES 8 + #define NDIS_802_11_LENGTH_RATES_EX 16 + #define MAC_ADDR_LENGTH 6 +-#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc ++//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc ++#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination + #define MAX_NUMBER_OF_EVENT 10 // entry # in EVENT table + #define MAX_NUMBER_OF_MAC 32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 + #define MAX_NUMBER_OF_ACL 64 + #define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 + #define MAX_NUMBER_OF_DLS_ENTRY 4 + +-#define OID_GEN_MACHINE_NAME 0x0001021A + + #define RT_QUERY_SIGNAL_CONTEXT 0x0402 + #define RT_SET_IAPP_PID 0x0404 + #define RT_SET_APD_PID 0x0405 + #define RT_SET_DEL_MAC_ENTRY 0x0406 +- ++#define RT_QUERY_EVENT_TABLE 0x0407 + // + // IEEE 802.11 OIDs + // + #define OID_GET_SET_TOGGLE 0x8000 ++#define OID_GET_SET_FROM_UI 0x4000 + + #define OID_802_11_ADD_WEP 0x0112 + #define OID_802_11_DISASSOCIATE 0x0114 +@@ -101,22 +107,28 @@ + + #define RT_OID_DEVICE_NAME 0x0607 + #define RT_OID_VERSION_INFO 0x0608 ++#define OID_802_11_BSSID_LIST 0x0609 ++#define OID_802_3_CURRENT_ADDRESS 0x060A + #define OID_GEN_MEDIA_CONNECT_STATUS 0x060B ++#define RT_OID_802_11_QUERY_LINK_STATUS 0x060C ++#define OID_802_11_RSSI 0x060D ++#define OID_802_11_STATISTICS 0x060E + #define OID_GEN_RCV_OK 0x060F + #define OID_GEN_RCV_NO_BUFFER 0x0610 +- ++#define RT_OID_802_11_QUERY_EEPROM_VERSION 0x0611 ++#define RT_OID_802_11_QUERY_FIRMWARE_VERSION 0x0612 ++#define RT_OID_802_11_QUERY_LAST_RX_RATE 0x0613 ++#define RT_OID_802_11_TX_POWER_LEVEL_1 0x0614 ++#define RT_OID_802_11_QUERY_PIDVID 0x0615 ++//for WPA_SUPPLICANT_SUPPORT + #define OID_SET_COUNTERMEASURES 0x0616 + #define RT_OID_WPA_SUPPLICANT_SUPPORT 0x0621 + #define RT_OID_WE_VERSION_COMPILED 0x0622 + #define RT_OID_NEW_DRIVER 0x0623 + +-//rt2860 , kathy + #define RT_OID_DRIVER_DEVICE_NAME 0x0645 + #define RT_OID_QUERY_MULTIPLE_CARD_SUPPORT 0x0647 + +-// Ralink defined OIDs +-// Dennis Lee move to platform specific +- + typedef enum _NDIS_802_11_STATUS_TYPE + { + Ndis802_11StatusType_Authentication, +@@ -169,10 +181,10 @@ typedef enum _NDIS_802_11_NETWORK_TYPE + Ndis802_11FH, + Ndis802_11DS, + Ndis802_11OFDM5, +- Ndis802_11OFDM5_N, + Ndis802_11OFDM24, +- Ndis802_11OFDM24_N, + Ndis802_11Automode, ++ Ndis802_11OFDM5_N, ++ Ndis802_11OFDM24_N, + Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound + } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; + +@@ -271,13 +283,15 @@ typedef struct PACKED _RADIUS_CONF + UINT32 own_ip_addr; + UINT32 retry_interval; + UINT32 session_timeout_interval; +- UCHAR EAPifname[IFNAMSIZ]; +- UCHAR EAPifname_len; +- UCHAR PreAuthifname[IFNAMSIZ]; +- UCHAR PreAuthifname_len; +- RADIUS_KEY_INFO RadiusInfo[8/*MAX_MBSSID_NUM*/]; ++ UCHAR EAPifname[8][IFNAMSIZ]; ++ UCHAR EAPifname_len[8]; ++ UCHAR PreAuthifname[8][IFNAMSIZ]; ++ UCHAR PreAuthifname_len[8]; ++ RADIUS_KEY_INFO RadiusInfo[8]; + } RADIUS_CONF, *PRADIUS_CONF; + ++ ++ + // Key mapping keys require a BSSID + typedef struct _NDIS_802_11_KEY + { +@@ -289,6 +303,13 @@ typedef struct _NDIS_802_11_KEY + UCHAR KeyMaterial[1]; // variable length depending on above field + } NDIS_802_11_KEY, *PNDIS_802_11_KEY; + ++typedef struct _NDIS_802_11_PASSPHRASE ++{ ++ UINT KeyLength; // length of key in bytes ++ NDIS_802_11_MAC_ADDRESS BSSID; ++ UCHAR KeyMaterial[1]; // variable length depending on above field ++} NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; ++ + typedef struct _NDIS_802_11_REMOVE_KEY + { + UINT Length; // Length of this structure +@@ -481,6 +502,19 @@ typedef struct _NDIS_802_11_AUTHENTICATION_EVENT + NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; + } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; + ++/* ++typedef struct _NDIS_802_11_TEST ++{ ++ ULONG Length; ++ ULONG Type; ++ union ++ { ++ NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent; ++ NDIS_802_11_RSSI RssiTrigger; ++ }; ++} NDIS_802_11_TEST, *PNDIS_802_11_TEST; ++ */ ++ + // 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE + typedef enum _NDIS_802_11_MEDIA_STREAM_MODE + { +@@ -519,14 +553,18 @@ typedef struct _NDIS_802_11_CAPABILITY + NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1]; + } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; + +-#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon ++#ifdef LINUX ++#endif // LINUX // ++ ++ ++#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon + #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) + + #define RTPRIV_IOCTL_STATISTICS (SIOCIWFIRSTPRIV + 0x09) + #define RTPRIV_IOCTL_ADD_PMKID_CACHE (SIOCIWFIRSTPRIV + 0x0A) + #define RTPRIV_IOCTL_RADIUS_DATA (SIOCIWFIRSTPRIV + 0x0C) + #define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D) +-#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) ++#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) + #define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) + + #define RTPRIV_IOCTL_SHOW (SIOCIWFIRSTPRIV + 0x11) +@@ -535,27 +573,54 @@ enum { + SHOW_DRVIER_VERION = 5, + SHOW_BA_INFO = 6, + SHOW_DESC_INFO = 7, +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + SHOW_RXBULK_INFO = 8, + SHOW_TXBULK_INFO = 9, +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + RAIO_OFF = 10, + RAIO_ON = 11, + SHOW_CFG_VALUE = 20, +-#if !defined(RT2860) + SHOW_ADHOC_ENTRY_INFO = 21, +-#endif + }; + +-#ifdef LLTD_SUPPORT ++ ++ ++ ++ ++ ++#define OID_802_11_BUILD_CHANNEL_EX 0x0714 ++#define OID_802_11_GET_CH_LIST 0x0715 ++#define OID_802_11_GET_COUNTRY_CODE 0x0716 ++#define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717 ++ ++//#define RT_OID_802_11_STATISTICS (OID_GET_SET_TOGGLE | OID_802_11_STATISTICS) ++ ++#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk ++#define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741 ++#define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742 ++#define RT_OID_WSC_SET_CONN_BY_PROFILE_INDEX 0x0743 ++#define RT_OID_WSC_SET_ACTION 0x0744 ++#define RT_OID_WSC_SET_SSID 0x0745 ++#define RT_OID_WSC_SET_PIN_CODE 0x0746 ++#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC ++#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar ++#define RT_OID_WSC_SET_PROFILE 0x0749 ++#define RT_OID_WSC_CONFIG_STATUS 0x074F ++#define RT_OID_802_11_WSC_QUERY_PROFILE 0x0750 + // for consistency with RT61 +-#define RT_OID_GET_PHY_MODE 0x761 +-#endif // LLTD_SUPPORT // ++#define RT_OID_WSC_QUERY_STATUS 0x0751 ++#define RT_OID_WSC_PIN_CODE 0x0752 ++#define RT_OID_WSC_UUID 0x0753 ++#define RT_OID_WSC_SET_SELECTED_REGISTRAR 0x0754 ++#define RT_OID_WSC_EAPMSG 0x0755 ++#define RT_OID_WSC_MANUFACTURER 0x0756 ++#define RT_OID_WSC_MODEL_NAME 0x0757 ++#define RT_OID_WSC_MODEL_NO 0x0758 ++#define RT_OID_WSC_SERIAL_NO 0x0759 ++#define RT_OID_WSC_MAC_ADDRESS 0x0760 + +-#if defined(RT2860) || defined(RT30xx) + // New for MeetingHouse Api support + #define OID_MH_802_1X_SUPPORTED 0xFFEDC100 +-#endif + + // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! + typedef union _HTTRANSMIT_SETTING { +@@ -564,6 +629,7 @@ typedef union _HTTRANSMIT_SETTING { + USHORT BW:1; //channel bandwidth 20MHz or 40 MHz + USHORT ShortGI:1; + USHORT STBC:2; //SPACE ++// USHORT rsv:3; + USHORT rsv:2; + USHORT TxBF:1; + USHORT MODE:2; // Use definition MODE_xxx. +@@ -577,7 +643,6 @@ typedef enum _RT_802_11_PREAMBLE { + Rt802_11PreambleAuto + } RT_802_11_PREAMBLE, *PRT_802_11_PREAMBLE; + +-// Only for STA, need to sync with AP + typedef enum _RT_802_11_PHY_MODE { + PHY_11BG_MIXED = 0, + PHY_11B, +@@ -744,19 +809,6 @@ typedef struct { + UCHAR rsv; + } OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE; + +-#ifdef LLTD_SUPPORT +-typedef struct _RT_LLTD_ASSOICATION_ENTRY { +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; +- unsigned short MOR; // maximum operational rate +- UCHAR phyMode; +-} RT_LLTD_ASSOICATION_ENTRY, *PRT_LLTD_ASSOICATION_ENTRY; +- +-typedef struct _RT_LLTD_ASSOICATION_TABLE { +- unsigned int Num; +- RT_LLTD_ASSOICATION_ENTRY Entry[MAX_NUMBER_OF_MAC]; +-} RT_LLTD_ASSOICATION_TABLE, *PRT_LLTD_ASSOICATION_TABLE; +-#endif // LLTD_SUPPORT // +- + #define MAX_CUSTOM_LEN 128 + + typedef enum _RT_802_11_D_CLIENT_MODE +@@ -772,7 +824,6 @@ typedef struct _RT_CHANNEL_LIST_INFO + UCHAR ChannelListNum; // number of channel in ChannelList[] + } RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; + +-#ifdef RT2870 + // WSC configured credential + typedef struct _WSC_CREDENTIAL + { +@@ -790,9 +841,9 @@ typedef struct _WSC_CREDENTIAL + typedef struct _WSC_PROFILE + { + UINT ProfileCnt; ++ UINT ApplyProfileIdx; // add by johnli, fix WPS test plan 5.1.1 + WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles + } WSC_PROFILE, *PWSC_PROFILE; +-#endif + + #endif // _OID_H_ + +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +new file mode 100644 +index 0000000..5f39c44 +--- /dev/null ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -0,0 +1,873 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ pci_main_dev.c ++ ++ Abstract: ++ Create and register network interface for PCI based chipsets in Linux platform. ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#include "rt_config.h" ++#include ++ ++// ++// Function declarations ++// ++extern int rt28xx_close(IN struct net_device *net_dev); ++extern int rt28xx_open(struct net_device *net_dev); ++ ++static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev); ++static INT __devinit rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent); ++static void __exit rt2860_cleanup_module(void); ++static int __init rt2860_init_module(void); ++ ++ static VOID RTMPInitPCIeDevice( ++ IN struct pci_dev *pci_dev, ++ IN PRTMP_ADAPTER pAd); ++ ++#ifdef CONFIG_PM ++static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); ++static int rt2860_resume(struct pci_dev *pci_dev); ++#endif // CONFIG_PM // ++ ++// ++// Ralink PCI device table, include all supported chipsets ++// ++static struct pci_device_id rt2860_pci_tbl[] __devinitdata = ++{ ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2760_PCI_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2790_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(VEN_AWT_PCI_VENDOR_ID, VEN_AWT_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7708)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7728)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7758)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7727)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7738)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7748)}, ++ {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7768)}, ++ {0,} // terminate list ++}; ++ ++MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); ++MODULE_LICENSE("GPL"); ++#ifdef MODULE_VERSION ++MODULE_VERSION(STA_DRIVER_VERSION); ++#endif ++ ++ ++// ++// Our PCI driver structure ++// ++static struct pci_driver rt2860_driver = ++{ ++ name: "rt2860", ++ id_table: rt2860_pci_tbl, ++ probe: rt2860_probe, ++ remove: __devexit_p(rt2860_remove_one), ++#ifdef CONFIG_PM ++ suspend: rt2860_suspend, ++ resume: rt2860_resume, ++#endif ++}; ++ ++ ++/*************************************************************************** ++ * ++ * PCI device initialization related procedures. ++ * ++ ***************************************************************************/ ++#ifdef CONFIG_PM ++ ++VOID RT2860RejectPendingPackets( ++ IN PRTMP_ADAPTER pAd) ++{ ++ // clear PS packets ++ // clear TxSw packets ++} ++ ++static int rt2860_suspend( ++ struct pci_dev *pci_dev, ++ pm_message_t state) ++{ ++ struct net_device *net_dev = pci_get_drvdata(pci_dev); ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; ++ INT32 retval = 0; ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); ++ ++ if (net_dev == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); ++ } ++ else ++ { ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ /* we can not use IFF_UP because ra0 down but ra1 up */ ++ /* and 1 suspend/resume function for 1 module, not for each interface */ ++ /* so Linux will call suspend/resume function once */ ++ if (VIRTUAL_IF_NUM(pAd) > 0) ++ { ++ // avoid users do suspend after interface is down ++ ++ // stop interface ++ netif_carrier_off(net_dev); ++ netif_stop_queue(net_dev); ++ ++ // mark device as removed from system and therefore no longer available ++ netif_device_detach(net_dev); ++ ++ // mark halt flag ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ // take down the device ++ rt28xx_close((PNET_DEV)net_dev); ++ ++ RT_MOD_DEC_USE_COUNT(); ++ } ++ } ++ ++ // reference to http://vovo2000.com/type-lab/linux/kernel-api/linux-kernel-api.html ++ // enable device to generate PME# when suspended ++ // pci_choose_state(): Choose the power state of a PCI device to be suspended ++ retval = pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), 1); ++ // save the PCI configuration space of a device before suspending ++ pci_save_state(pci_dev); ++ // disable PCI device after use ++ pci_disable_device(pci_dev); ++ ++ retval = pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_suspend()\n")); ++ return retval; ++} ++ ++static int rt2860_resume( ++ struct pci_dev *pci_dev) ++{ ++ struct net_device *net_dev = pci_get_drvdata(pci_dev); ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; ++ INT32 retval; ++ ++ ++ // set the power state of a PCI device ++ // PCI has 4 power states, DO (normal) ~ D3(less power) ++ // in include/linux/pci.h, you can find that ++ // #define PCI_D0 ((pci_power_t __force) 0) ++ // #define PCI_D1 ((pci_power_t __force) 1) ++ // #define PCI_D2 ((pci_power_t __force) 2) ++ // #define PCI_D3hot ((pci_power_t __force) 3) ++ // #define PCI_D3cold ((pci_power_t __force) 4) ++ // #define PCI_UNKNOWN ((pci_power_t __force) 5) ++ // #define PCI_POWER_ERROR ((pci_power_t __force) -1) ++ retval = pci_set_power_state(pci_dev, PCI_D0); ++ ++ // restore the saved state of a PCI device ++ pci_restore_state(pci_dev); ++ ++ // initialize device before it's used by a driver ++ if (pci_enable_device(pci_dev)) ++ { ++ printk("pci enable fail!\n"); ++ return 0; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_resume()\n")); ++ ++ if (net_dev == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); ++ } ++ else ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ if (pAd != NULL) ++ { ++ /* we can not use IFF_UP because ra0 down but ra1 up */ ++ /* and 1 suspend/resume function for 1 module, not for each interface */ ++ /* so Linux will call suspend/resume function once */ ++ if (VIRTUAL_IF_NUM(pAd) > 0) ++ { ++ // mark device as attached from system and restart if needed ++ netif_device_attach(net_dev); ++ ++ if (rt28xx_open((PNET_DEV)net_dev) != 0) ++ { ++ // open fail ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); ++ return 0; ++ } ++ ++ // increase MODULE use count ++ RT_MOD_INC_USE_COUNT(); ++ ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ ++ netif_start_queue(net_dev); ++ netif_carrier_on(net_dev); ++ netif_wake_queue(net_dev); ++ } ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); ++ return 0; ++} ++#endif // CONFIG_PM // ++ ++ ++static INT __init rt2860_init_module(VOID) ++{ ++ return pci_register_driver(&rt2860_driver); ++} ++ ++ ++// ++// Driver module unload function ++// ++static VOID __exit rt2860_cleanup_module(VOID) ++{ ++ pci_unregister_driver(&rt2860_driver); ++} ++ ++module_init(rt2860_init_module); ++module_exit(rt2860_cleanup_module); ++ ++ ++// ++// PCI device probe & initialization function ++// ++static INT __devinit rt2860_probe( ++ IN struct pci_dev *pci_dev, ++ IN const struct pci_device_id *pci_id) ++{ ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; ++ struct net_device *net_dev; ++ PVOID handle; ++ PSTRING print_name; ++ ULONG csr_addr; ++ INT rv = 0; ++ RTMP_OS_NETDEV_OP_HOOK netDevHook; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); ++ ++//PCIDevInit============================================== ++ // wake up and enable device ++ if ((rv = pci_enable_device(pci_dev))!= 0) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Enable PCI device failed, errno=%d!\n", rv)); ++ return rv; ++ } ++ ++ print_name = pci_name(pci_dev); ++ ++ if ((rv = pci_request_regions(pci_dev, print_name)) != 0) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Request PCI resource failed, errno=%d!\n", rv)); ++ goto err_out; ++ } ++ ++ // map physical address to virtual address for accessing register ++ csr_addr = (unsigned long) ioremap(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ if (!csr_addr) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", ++ print_name, (ULONG)pci_resource_len(pci_dev, 0), (ULONG)pci_resource_start(pci_dev, 0))); ++ goto err_out_free_res; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name, ++ (ULONG)pci_resource_start(pci_dev, 0), (ULONG)csr_addr, pci_dev->irq)); ++ } ++ ++ // Set DMA master ++ pci_set_master(pci_dev); ++ ++ ++//RtmpDevInit============================================== ++ // Allocate RTMP_ADAPTER adapter structure ++ handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); ++ if (handle == NULL) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s(): Allocate memory for os handle failed!\n", __func__)); ++ goto err_out_iounmap; ++ } ++ ++ ((POS_COOKIE)handle)->pci_dev = pci_dev; ++ ++ rv = RTMPAllocAdapterBlock(handle, &pAd); //shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" ++ if (rv != NDIS_STATUS_SUCCESS) ++ goto err_out_iounmap; ++ // Here are the RTMP_ADAPTER structure with pci-bus specific parameters. ++ pAd->CSRBaseAddress = (PUCHAR)csr_addr; ++ DBGPRINT(RT_DEBUG_ERROR, ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", (ULONG)pAd->CSRBaseAddress, csr_addr)); ++ RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_PCI); ++ ++ ++//NetDevInit============================================== ++ net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); ++ if (net_dev == NULL) ++ goto err_out_free_radev; ++ ++ // Here are the net_device structure with pci-bus specific parameters. ++ net_dev->irq = pci_dev->irq; // Interrupt IRQ number ++ net_dev->base_addr = csr_addr; // Save CSR virtual address and irq to device structure ++ pci_set_drvdata(pci_dev, net_dev); // Set driver data ++ ++/* for supporting Network Manager */ ++ /* Set the sysfs physical device reference for the network logical device ++ * if set prior to registration will cause a symlink during initialization. ++ */ ++ SET_NETDEV_DEV(net_dev, &(pci_dev->dev)); ++ ++ ++//All done, it's time to register the net device to linux kernel. ++ // Register this device ++ rv = RtmpOSNetDevAttach(net_dev, &netDevHook); ++ if (rv) ++ goto err_out_free_netdev; ++ ++ pAd->StaCfg.OriDevType = net_dev->type; ++ RTMPInitPCIeDevice(pci_dev, pAd); ++ ++#ifdef KTHREAD_SUPPORT ++#endif // KTHREAD_SUPPORT // ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_probe\n")); ++ ++ return 0; // probe ok ++ ++ ++ /* --------------------------- ERROR HANDLE --------------------------- */ ++err_out_free_netdev: ++ RtmpOSNetDevFree(net_dev); ++ ++err_out_free_radev: ++ /* free RTMP_ADAPTER strcuture and os_cookie*/ ++ RTMPFreeAdapter(pAd); ++ ++err_out_iounmap: ++ iounmap((void *)(csr_addr)); ++ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ ++err_out_free_res: ++ pci_release_regions(pci_dev); ++ ++err_out: ++ pci_disable_device(pci_dev); ++ ++ DBGPRINT(RT_DEBUG_ERROR, ("<=== rt2860_probe failed with rv = %d!\n", rv)); ++ ++ return -ENODEV; /* probe fail */ ++} ++ ++ ++static VOID __devexit rt2860_remove_one( ++ IN struct pci_dev *pci_dev) ++{ ++ PNET_DEV net_dev = pci_get_drvdata(pci_dev); ++ RTMP_ADAPTER *pAd = NULL; ++ ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); ++ ++ if (pAd != NULL) ++ { ++ // Unregister/Free all allocated net_device. ++ RtmpPhyNetDevExit(pAd, net_dev); ++ ++ // Unmap CSR base address ++ iounmap((char *)(csr_addr)); ++ ++ // release memory region ++ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ ++ // Free RTMP_ADAPTER related structures. ++ RtmpRaDevCtrlExit(pAd); ++ ++ } ++ else ++ { ++ // Unregister network device ++ RtmpOSNetDevDetach(net_dev); ++ ++ // Unmap CSR base address ++ iounmap((char *)(net_dev->base_addr)); ++ ++ // release memory region ++ release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ } ++ ++ // Free the root net_device ++ RtmpOSNetDevFree(net_dev); ++ ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Check the chipset vendor/product ID. ++ ++Arguments: ++ _dev_p Point to the PCI or USB device ++ ++Return Value: ++ TRUE Check ok ++ FALSE Check fail ++ ++Note: ++======================================================================== ++*/ ++BOOLEAN RT28XXChipsetCheck( ++ IN void *_dev_p) ++{ ++ /* always TRUE */ ++ return TRUE; ++} ++ ++ ++/*************************************************************************** ++ * ++ * PCIe device initialization related procedures. ++ * ++ ***************************************************************************/ ++ static VOID RTMPInitPCIeDevice( ++ IN struct pci_dev *pci_dev, ++ IN PRTMP_ADAPTER pAd) ++{ ++ USHORT device_id; ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pci_read_config_word(pci_dev, PCI_DEVICE_ID, &device_id); ++ device_id = le2cpu16(device_id); ++ pObj->DeviceID = device_id; ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); ++ if ( ++ (device_id == NIC2860_PCIe_DEVICE_ID) || ++ (device_id == NIC2790_PCIe_DEVICE_ID) || ++ (device_id == VEN_AWT_PCIe_DEVICE_ID) || ++ 0) ++ { ++ UINT32 MacCsr0 = 0, Index= 0; ++ do ++ { ++ RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); ++ ++ if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF)) ++ break; ++ ++ RTMPusecDelay(10); ++ } while (Index++ < 100); ++ ++ // Support advanced power save after 2892/2790. ++ // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). ++ if ((MacCsr0&0xffff0000) != 0x28600000) ++ { ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); ++ } ++ } ++} ++ ++ ++VOID RTMPInitPCIeLinkCtrlValue( ++ IN PRTMP_ADAPTER pAd) ++{ ++ INT pos; ++ USHORT reg16, data2, PCIePowerSaveLevel, Configuration; ++ BOOLEAN bFindIntel = FALSE; ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); ++ // Init EEPROM, and save settings ++ if (!IS_RT3090(pAd)) ++ { ++ RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); ++ pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff; ++ ++ if ((PCIePowerSaveLevel&0xff) == 0xff) ++ { ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); ++ DBGPRINT(RT_DEBUG_TRACE, ("====> PCIePowerSaveLevel = 0x%x.\n", PCIePowerSaveLevel)); ++ return; ++ } ++ else ++ { ++ PCIePowerSaveLevel &= 0x3; ++ RT28xx_EEPROM_READ16(pAd, 0x24, data2); ++ ++ if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) ++ { ++ if (PCIePowerSaveLevel > 1 ) ++ PCIePowerSaveLevel = 1; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("====> Write 0x83 = 0x%x.\n", PCIePowerSaveLevel)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); ++ RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); ++ PCIePowerSaveLevel &= 0xff; ++ PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; ++ switch(PCIePowerSaveLevel) ++ { ++ case 0: // Only support L0 ++ pAd->LnkCtrlBitMask = 0; ++ break; ++ case 1: // Only enable L0s ++ pAd->LnkCtrlBitMask = 1; ++ break; ++ case 2: // enable L1, L0s ++ pAd->LnkCtrlBitMask = 3; ++ break; ++ case 3: // sync with host clk and enable L1, L0s ++ pAd->LnkCtrlBitMask = 0x103; ++ break; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("====> LnkCtrlBitMask = 0x%x.\n", pAd->LnkCtrlBitMask)); ++ } ++ } ++ else if (IS_RT3090(pAd)) ++ { ++ // 1. read setting from inf file. ++ // ..... ++ USHORT PCIePowerSetting = 0; ++ /* code from windows, default value of rt30xxPowerMode = 0 ++ PCIePowerSetting = pAd->StaCfg.PSControl.field.rt30xxPowerMode; ++ */ ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Read PowerLevelMode = 0x%x.\n", PCIePowerSetting)); ++ // 2. Check EnableNewPS ++ /* ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) ++ PCIePowerSetting = 1; ++ */ ++ ++ if ((pAd->MACVersion&0xffff) <= 0x0211) ++ { ++ // Chip Version E only allow 1 ++ PCIePowerSetting = 1; ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Write 0x83 Command = 0x%x.\n", PCIePowerSetting)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSetting, 0x00); ++ } ++ else ++ { ++ // Chip Version F only allow 1 or 2 ++ if ((PCIePowerSetting > 2) || (PCIePowerSetting == 0)) ++ PCIePowerSetting = 1; ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Write 0x83 Command = 0x%x.\n", PCIePowerSetting)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSetting, 0x00); ++ } ++ ++ } ++ ++ // Find Ralink PCIe Device's Express Capability Offset ++ pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); ++ ++ if (pos != 0) ++ { ++ // Ralink PCIe Device's Link Control Register Offset ++ pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); ++ pAd->RLnkCtrlConfiguration = (Configuration & 0x103); ++ Configuration &= 0xfefc; ++ Configuration |= (0x0); ++ if ((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID)) ++ { ++ reg16 = cpu2le16(Configuration); ++ pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pos + PCI_EXP_LNKCTL, Configuration)); ++ } ++ ++ RTMPFindHostPCIDev(pAd); ++ if (pObj->parent_pci_dev) ++ { ++ USHORT vendor_id; ++ ++ pci_read_config_word(pObj->parent_pci_dev, PCI_VENDOR_ID, &vendor_id); ++ vendor_id = le2cpu16(vendor_id); ++ if (vendor_id == PCIBUS_INTEL_VENDOR) ++ bFindIntel = TRUE; ++ ++ // Find PCI-to-PCI Bridge Express Capability Offset ++ pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); ++ ++ if (pos != 0) ++ { ++ BOOLEAN bChange = FALSE; ++ // PCI-to-PCI Bridge Link Control Register Offset ++ pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Read (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, Configuration)); ++ pAd->HostLnkCtrlConfiguration = (Configuration & 0x103); ++ Configuration &= 0xfefc; ++ Configuration |= (0x0); ++ ++ switch (pObj->DeviceID) ++ { ++ case NIC2860_PCIe_DEVICE_ID: ++ case NIC2790_PCIe_DEVICE_ID: ++ bChange = TRUE; ++ break; ++ default: ++ break; ++ } ++ ++ if (bChange) ++ { ++ reg16 = cpu2le16(Configuration); ++ pci_write_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Write (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, Configuration)); ++ } ++ } ++ else ++ { ++ pAd->HostLnkCtrlOffset = 0; ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find PCI-to-PCI Bridge PCI Express Capability!\n", __func__)); ++ } ++ } ++ } ++ else ++ { ++ pAd->RLnkCtrlOffset = 0; ++ pAd->HostLnkCtrlOffset = 0; ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find Ralink PCIe Device's PCI Express Capability!\n", __func__)); ++ } ++ ++ if (bFindIntel == FALSE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Doesn't find Intel PCI host controller. \n")); ++ // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff ++ pAd->PCIePowerSaveLevel = 0xff; ++ if ((pAd->RLnkCtrlOffset != 0) ++ ) ++ { ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink 30xx PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); ++ pAd->RLnkCtrlConfiguration = (Configuration & 0x103); ++ Configuration &= 0xfefc; ++ Configuration |= (0x0); ++ reg16 = cpu2le16(Configuration); ++ pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pos + PCI_EXP_LNKCTL, Configuration)); ++ } ++ } ++} ++ ++VOID RTMPFindHostPCIDev( ++ IN PRTMP_ADAPTER pAd) ++{ ++ USHORT reg16; ++ UCHAR reg8; ++ UINT DevFn; ++ PPCI_DEV pPci_dev; ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); ++ ++ pObj->parent_pci_dev = NULL; ++ if (pObj->pci_dev->bus->parent) ++ { ++ for (DevFn = 0; DevFn < 255; DevFn++) ++ { ++ pPci_dev = pci_get_slot(pObj->pci_dev->bus->parent, DevFn); ++ if (pPci_dev) ++ { ++ pci_read_config_word(pPci_dev, PCI_CLASS_DEVICE, ®16); ++ reg16 = le2cpu16(reg16); ++ pci_read_config_byte(pPci_dev, PCI_CB_CARD_BUS, ®8); ++ if ((reg16 == PCI_CLASS_BRIDGE_PCI) && ++ (reg8 == pObj->pci_dev->bus->number)) ++ { ++ pObj->parent_pci_dev = pPci_dev; ++ } ++ } ++ } ++ } ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ Level = RESTORE_HALT : Restore PCI host and Ralink PCIe Link Control field to its default value. ++ Level = Other Value : Restore from dot11 power save or radio off status. And force PCI host Link Control fields to 0x1 ++ ++ ======================================================================== ++*/ ++VOID RTMPPCIeLinkCtrlValueRestore( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level) ++{ ++ USHORT PCIePowerSaveLevel, reg16; ++ USHORT Configuration; ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ return; ++ ++ if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); ++ PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; ++ if ((PCIePowerSaveLevel&0xff) == 0xff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("return \n")); ++ return; ++ } ++ ++ if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) ++ { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); ++ if ((Configuration != 0) && ++ (Configuration != 0xFFFF)) ++ { ++ Configuration &= 0xfefc; ++ // If call from interface down, restore to orginial setting. ++ if (Level == RESTORE_CLOSE) ++ { ++ Configuration |= pAd->HostLnkCtrlConfiguration; ++ } ++ else ++ Configuration |= 0x0; ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ("Restore PCI host : offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); ++ } ++ else ++ DBGPRINT(RT_DEBUG_ERROR, ("Restore PCI host : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); ++ } ++ ++ if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) ++ { ++ PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); ++ if ((Configuration != 0) && ++ (Configuration != 0xFFFF)) ++ { ++ Configuration &= 0xfefc; ++ // If call from interface down, restore to orginial setting. ++ if (Level == RESTORE_CLOSE) ++ Configuration |= pAd->RLnkCtrlConfiguration; ++ else ++ Configuration |= 0x0; ++ PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ("Restore Ralink : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); ++ } ++ else ++ DBGPRINT(RT_DEBUG_ERROR, ("Restore Ralink : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE,("%s <===\n", __func__)); ++} ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ ++ Arguments: ++ Max : limit Host PCI and Ralink PCIe device's LINK CONTROL field's value. ++ Because now frequently set our device to mode 1 or mode 3 will cause problem. ++ ++ ======================================================================== ++*/ ++VOID RTMPPCIeLinkCtrlSetting( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Max) ++{ ++ USHORT PCIePowerSaveLevel, reg16; ++ USHORT Configuration; ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ return; ++ ++ if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; ++ if ((PCIePowerSaveLevel&0xff) == 0xff) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("return \n")); ++ return; ++ } ++ PCIePowerSaveLevel = PCIePowerSaveLevel>>6; ++ ++ ++ if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) ++ { ++ // first 2892 chip not allow to frequently set mode 3. will cause hang problem. ++ if (PCIePowerSaveLevel > Max) ++ PCIePowerSaveLevel = Max; ++ ++ PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); ++ Configuration |= 0x100; ++ PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ("Write Ralink device : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE,("RTMPPCIePowerLinkCtrl <==============\n")); ++} +diff --git a/drivers/staging/rt2860/rt2860.h b/drivers/staging/rt2860/rt2860.h +deleted file mode 100644 +index ed28fe5..0000000 +--- a/drivers/staging/rt2860/rt2860.h ++++ /dev/null +@@ -1,333 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __RT2860_H__ +-#define __RT2860_H__ +- +-#define RT28xx_CHIP_NAME "RT2860" +- +-#define TXINFO_SIZE 0 +-#define TXPADDING_SIZE 0 +- +-/* ----------------- EEPROM Related MACRO ----------------- */ +-#define RT28xx_EEPROM_READ16(pAd, offset, var) \ +- var = RTMP_EEPROM_READ16(pAd, offset) +- +-#define RT28xx_EEPROM_WRITE16(pAd, offset, var) \ +- RTMP_EEPROM_WRITE16(pAd, offset, var) +- +-/* ----------------- TASK/THREAD Related MACRO ----------------- */ +-#define RT28XX_TASK_THREAD_INIT(pAd, Status) \ +- init_thread_task(pAd); NICInitTxRxRingAndBacklogQueue(pAd); \ +- Status = NDIS_STATUS_SUCCESS; +- +-/* function declarations */ +-#define IRQ_HANDLE_TYPE irqreturn_t +- +-IRQ_HANDLE_TYPE +-rt2860_interrupt(int irq, void *dev_instance); +- +-/* ----------------- Frimware Related MACRO ----------------- */ +-#define RT28XX_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ +- do{ \ +- ULONG _i, _firm; \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x10000); \ +- \ +- for(_i=0; _i<_FwLen; _i+=4) \ +- { \ +- _firm = _pFwImage[_i] + \ +- (_pFwImage[_i+3] << 24) + \ +- (_pFwImage[_i+2] << 16) + \ +- (_pFwImage[_i+1] << 8); \ +- RTMP_IO_WRITE32(_pAd, FIRMWARE_IMAGE_BASE + _i, _firm); \ +- } \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00000); \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00001); \ +- \ +- /* initialize BBP R/W access agent */ \ +- RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, 0); \ +- RTMP_IO_WRITE32(_pAd, H2M_MAILBOX_CSR, 0); \ +- }while(0) +- +-/* ----------------- TX Related MACRO ----------------- */ +-#define RT28XX_START_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) +-#define RT28XX_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) +- +- +-#define RT28XX_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ +- ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ +-#define RT28XX_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ +- do{}while(0) +- +-#define NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, freeNum, _TxFrameType) \ +- (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) +- //(((freeNum) != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 1 /*0*/)) +- +- +-#define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ +- RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) +- +-#define RTMP_PKT_TAIL_PADDING 0 +- +-#define fRTMP_ADAPTER_NEED_STOP_TX 0 +- +-#define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ +- /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber)*/ +- +-#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ +- RtmpPCI_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) +- +-#define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ +- RtmpPCI_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) +- +-#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ +- RtmpPCI_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) +- +-#define HAL_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) \ +- RtmpPCI_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) +- +-#define HAL_LastTxIdx(_pAd, _QueIdx,_LastTxIdx) \ +- /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx)*/ +- +-#define HAL_KickOutTx(_pAd, _pTxBlk, _QueIdx) \ +- RTMP_IO_WRITE32((_pAd), TX_CTX_IDX0+((_QueIdx)*0x10), (_pAd)->TxRing[(_QueIdx)].TxCpuIdx) +-/* RtmpPCIDataKickOut(_pAd, _pTxBlk, _QueIdx)*/ +- +-#define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ +- MiniportMMRequest(_pAd, _QueIdx, _pNullFrame, _frameLen) +- +-#define GET_TXRING_FREENO(_pAd, _QueIdx) \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx > _pAd->TxRing[_QueIdx].TxCpuIdx) ? \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx - _pAd->TxRing[_QueIdx].TxCpuIdx - 1) \ +- : \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx + TX_RING_SIZE - _pAd->TxRing[_QueIdx].TxCpuIdx - 1); +- +- +-#define GET_MGMTRING_FREENO(_pAd) \ +- (_pAd->MgmtRing.TxSwFreeIdx > _pAd->MgmtRing.TxCpuIdx) ? \ +- (_pAd->MgmtRing.TxSwFreeIdx - _pAd->MgmtRing.TxCpuIdx - 1) \ +- : \ +- (_pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - _pAd->MgmtRing.TxCpuIdx - 1); +- +- +-/* ----------------- RX Related MACRO ----------------- */ +- +-// no use +-#define RT28XX_RCV_PKT_GET_INIT(pAd) +-#define RT28XX_RV_A_BUF_END +-//#define RT28XX_RV_ALL_BUF_END +- +- +-/* ----------------- ASIC Related MACRO ----------------- */ +-// no use +-#define RT28XX_DMA_POST_WRITE(pAd) +- +-// reset MAC of a station entry to 0x000000000000 +-#define RT28XX_STA_ENTRY_MAC_RESET(pAd, Wcid) \ +- AsicDelWcidTab(pAd, Wcid); +- +-// add this entry into ASIC RX WCID search table +-#define RT28XX_STA_ENTRY_ADD(pAd, pEntry) \ +- AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); +- +-// remove Pair-wise key material from ASIC +-#define RT28XX_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) \ +- AsicRemovePairwiseKeyEntry(pAd, BssIdx, (UCHAR)Wcid); +- +-// add Client security information into ASIC WCID table and IVEIV table +-#define RT28XX_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ +- RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, pEntry); +- +-#define RT28XX_SECURITY_KEY_ADD(pAd, apidx, KeyID, pEntry) \ +- { /* update pairwise key information to ASIC Shared Key Table */ \ +- AsicAddSharedKeyEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, \ +- pAd->SharedKey[apidx][KeyID].Key, \ +- pAd->SharedKey[apidx][KeyID].TxMic, \ +- pAd->SharedKey[apidx][KeyID].RxMic); \ +- /* update ASIC WCID attribute table and IVEIV table */ \ +- RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, \ +- pEntry); } +- +- +-// Insert the BA bitmap to ASIC for the Wcid entry +-#define RT28XX_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ +- do{ \ +- UINT32 _Value = 0, _Offset; \ +- _Offset = MAC_WCID_BASE + (_Aid) * HW_WCID_ENTRY_SIZE + 4; \ +- RTMP_IO_READ32((_pAd), _Offset, &_Value); \ +- _Value |= (0x10000<<(_TID)); \ +- RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ +- }while(0) +- +- +-// Remove the BA bitmap from ASIC for the Wcid entry +-// bitmap field starts at 0x10000 in ASIC WCID table +-#define RT28XX_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ +- do{ \ +- UINT32 _Value = 0, _Offset; \ +- _Offset = MAC_WCID_BASE + (_Wcid) * HW_WCID_ENTRY_SIZE + 4; \ +- RTMP_IO_READ32((_pAd), _Offset, &_Value); \ +- _Value &= (~(0x10000 << (_TID))); \ +- RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ +- }while(0) +- +- +-/* ----------------- PCI/USB Related MACRO ----------------- */ +- +-#define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ +- ((POS_COOKIE)handle)->pci_dev = dev_p; +- +-// set driver data +-#define RT28XX_DRVDATA_SET(_a) pci_set_drvdata(_a, net_dev); +- +-#define RT28XX_UNMAP() \ +-{ if (net_dev->base_addr) { \ +- iounmap((void *)(net_dev->base_addr)); \ +- release_mem_region(pci_resource_start(dev_p, 0), \ +- pci_resource_len(dev_p, 0)); } \ +- if (net_dev->irq) pci_release_regions(dev_p); } +- +-#ifdef PCI_MSI_SUPPORT +-#define RTMP_MSI_ENABLE(_pAd) \ +-{ POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- (_pAd)->HaveMsi = pci_enable_msi(_pObj->pci_dev) == 0 ? TRUE : FALSE; } +- +-#define RTMP_MSI_DISABLE(_pAd) \ +-{ POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- if (_pAd->HaveMsi == TRUE) \ +- pci_disable_msi(_pObj->pci_dev); \ +- _pAd->HaveMsi = FALSE; } +-#else +-#define RTMP_MSI_ENABLE(_pAd) +-#define RTMP_MSI_DISABLE(_pAd) +-#endif // PCI_MSI_SUPPORT // +- +-#define SA_SHIRQ IRQF_SHARED +- +-#define RT28XX_IRQ_REQUEST(net_dev) \ +-{ PRTMP_ADAPTER _pAd = (PRTMP_ADAPTER)((net_dev)->ml_priv); \ +- POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- RTMP_MSI_ENABLE(_pAd); \ +- if ((retval = request_irq(_pObj->pci_dev->irq, \ +- rt2860_interrupt, SA_SHIRQ, \ +- (net_dev)->name, (net_dev)))) { \ +- printk("RT2860: request_irq ERROR(%d)\n", retval); \ +- return retval; } } +- +-#define RT28XX_IRQ_RELEASE(net_dev) \ +-{ PRTMP_ADAPTER _pAd = (PRTMP_ADAPTER)((net_dev)->ml_priv); \ +- POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- synchronize_irq(_pObj->pci_dev->irq); \ +- free_irq(_pObj->pci_dev->irq, (net_dev)); \ +- RTMP_MSI_DISABLE(_pAd); } +- +-#define RT28XX_IRQ_INIT(pAd) \ +- { pAd->int_enable_reg = ((DELAYINTMASK) | \ +- (RxINT|TxDataInt|TxMgmtInt)) & ~(0x03); \ +- pAd->int_disable_mask = 0; \ +- pAd->int_pending = 0; } +- +-#define RT28XX_IRQ_ENABLE(pAd) \ +- { /* clear garbage ints */ \ +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff); \ +- NICEnableInterrupt(pAd); } +- +-#define RT28XX_PUT_DEVICE(dev_p) +- +- +-/* ----------------- MLME Related MACRO ----------------- */ +-#define RT28XX_MLME_HANDLER(pAd) MlmeHandler(pAd) +- +-#define RT28XX_MLME_PRE_SANITY_CHECK(pAd) +- +-#define RT28XX_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); +- +-#define RT28XX_MLME_RESET_STATE_MACHINE(pAd) \ +- MlmeRestartStateMachine(pAd) +- +-#define RT28XX_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ +- HandleCounterMeasure(_pAd, _pEntry) +- +-/* ----------------- Power Save Related MACRO ----------------- */ +-#define RT28XX_PS_POLL_ENQUEUE(pAd) EnqueuePsPoll(pAd) +- +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// +-#define NIC2860_PCI_DEVICE_ID 0x0601 +-#define NIC2860_PCIe_DEVICE_ID 0x0681 +-#define NIC2760_PCI_DEVICE_ID 0x0701 // 1T/2R Cardbus ??? +-#define NIC2790_PCIe_DEVICE_ID 0x0781 // 1T/2R miniCard +- +-#define NIC_PCI_VENDOR_ID 0x1814 +- +-#define VEN_AWT_PCIe_DEVICE_ID 0x1059 +-#define VEN_AWT_PCI_VENDOR_ID 0x1A3B +- +-#define EDIMAX_PCI_VENDOR_ID 0x1432 +- +-// For RTMPPCIePowerLinkCtrlRestore () function +-#define RESTORE_HALT 1 +-#define RESTORE_WAKEUP 2 +-#define RESTORE_CLOSE 3 +- +-#define PowerSafeCID 1 +-#define PowerRadioOffCID 2 +-#define PowerWakeCID 3 +-#define CID0MASK 0x000000ff +-#define CID1MASK 0x0000ff00 +-#define CID2MASK 0x00ff0000 +-#define CID3MASK 0xff000000 +- +-#define PCI_REG_READ_WORD(pci_dev, offset, Configuration) \ +- if (pci_read_config_word(pci_dev, offset, ®16) == 0) \ +- Configuration = le2cpu16(reg16); \ +- else \ +- Configuration = 0; +- +-#define PCI_REG_WIRTE_WORD(pci_dev, offset, Configuration) \ +- reg16 = cpu2le16(Configuration); \ +- pci_write_config_word(pci_dev, offset, reg16); \ +- +-#define RT28XX_STA_FORCE_WAKEUP(pAd, Level) \ +- RT28xxPciStaAsicForceWakeup(pAd, Level); +- +-#define RT28XX_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ +- RT28xxPciStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); +- +-#define RT28XX_MLME_RADIO_ON(pAd) \ +- RT28xxPciMlmeRadioOn(pAd); +- +-#define RT28XX_MLME_RADIO_OFF(pAd) \ +- RT28xxPciMlmeRadioOFF(pAd); +- +-#endif //__RT2860_H__ +- +diff --git a/drivers/staging/rt2860/rt28xx.h b/drivers/staging/rt2860/rt28xx.h +deleted file mode 100644 +index c085250..0000000 +--- a/drivers/staging/rt2860/rt28xx.h ++++ /dev/null +@@ -1,1688 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt28xx.h +- +- Abstract: +- RT28xx ASIC related definition & structures +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Jan Lee Jan-3-2006 created for RT2860c +-*/ +- +-#ifndef __RT28XX_H__ +-#define __RT28XX_H__ +- +- +-// +-// PCI registers - base address 0x0000 +-// +-#define PCI_CFG 0x0000 +-#define PCI_EECTRL 0x0004 +-#define PCI_MCUCTRL 0x0008 +- +-typedef int NTSTATUS; +- +-#define OPT_14 0x114 +- +-// +-// SCH/DMA registers - base address 0x0200 +-// +-// INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit +-// +-#define DMA_CSR0 0x200 +-#define INT_SOURCE_CSR 0x200 +-typedef union _INT_SOURCE_CSR_STRUC { +- struct { +- UINT32 RxDelayINT:1; +- UINT32 TxDelayINT:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1;//4 +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; // bit7 +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1;//bit 9 +- UINT32 RxTxCoherent:1; +- UINT32 TBTTInt:1; +- UINT32 PreTBTT:1; +- UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c +- UINT32 AutoWakeup:1;//bit14 +- UINT32 GPTimer:1; +- UINT32 RxCoherent:1;//bit16 +- UINT32 TxCoherent:1; +- UINT32 :14; +- } field; +- UINT32 word; +-} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; +- +-// +-// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF +-// +-#define INT_MASK_CSR 0x204 +-typedef union _INT_MASK_CSR_STRUC { +- struct { +- UINT32 RXDelay_INT_MSK:1; +- UINT32 TxDelay:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; +- UINT32 :20; +- UINT32 RxCoherent:1; +- UINT32 TxCoherent:1; +- } field; +- UINT32 word; +-} INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; +- +-#define WPDMA_GLO_CFG 0x208 +-typedef union _WPDMA_GLO_CFG_STRUC { +- struct { +- UINT32 EnableTxDMA:1; +- UINT32 TxDMABusy:1; +- UINT32 EnableRxDMA:1; +- UINT32 RxDMABusy:1; +- UINT32 WPDMABurstSIZE:2; +- UINT32 EnTXWriteBackDDONE:1; +- UINT32 BigEndian:1; +- UINT32 RXHdrScater:8; +- UINT32 HDR_SEG_LEN:16; +- } field; +- UINT32 word; +-} WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; +- +-#define WPDMA_RST_IDX 0x20c +-typedef union _WPDMA_RST_IDX_STRUC { +- struct { +- UINT32 RST_DTX_IDX0:1; +- UINT32 RST_DTX_IDX1:1; +- UINT32 RST_DTX_IDX2:1; +- UINT32 RST_DTX_IDX3:1; +- UINT32 RST_DTX_IDX4:1; +- UINT32 RST_DTX_IDX5:1; +- UINT32 rsv:10; +- UINT32 RST_DRX_IDX0:1; +- UINT32 :15; +- } field; +- UINT32 word; +-} WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; +- +-#define DELAY_INT_CFG 0x0210 +-typedef union _DELAY_INT_CFG_STRUC { +- struct { +- UINT32 RXMAX_PTIME:8; +- UINT32 RXMAX_PINT:7; +- UINT32 RXDLY_INT_EN:1; +- UINT32 TXMAX_PTIME:8; +- UINT32 TXMAX_PINT:7; +- UINT32 TXDLY_INT_EN:1; +- } field; +- UINT32 word; +-} DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; +- +-#define WMM_AIFSN_CFG 0x0214 +-typedef union _AIFSN_CSR_STRUC { +- struct { +- UINT32 Aifsn0:4; // for AC_BE +- UINT32 Aifsn1:4; // for AC_BK +- UINT32 Aifsn2:4; // for AC_VI +- UINT32 Aifsn3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; +- +-// +-// CWMIN_CSR: CWmin for each EDCA AC +-// +-#define WMM_CWMIN_CFG 0x0218 +-typedef union _CWMIN_CSR_STRUC { +- struct { +- UINT32 Cwmin0:4; // for AC_BE +- UINT32 Cwmin1:4; // for AC_BK +- UINT32 Cwmin2:4; // for AC_VI +- UINT32 Cwmin3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; +- +-// +-// CWMAX_CSR: CWmin for each EDCA AC +-// +-#define WMM_CWMAX_CFG 0x021c +-typedef union _CWMAX_CSR_STRUC { +- struct { +- UINT32 Cwmax0:4; // for AC_BE +- UINT32 Cwmax1:4; // for AC_BK +- UINT32 Cwmax2:4; // for AC_VI +- UINT32 Cwmax3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; +- +-// +-// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register +-// +-#define WMM_TXOP0_CFG 0x0220 +-typedef union _AC_TXOP_CSR0_STRUC { +- struct { +- USHORT Ac0Txop; // for AC_BK, in unit of 32us +- USHORT Ac1Txop; // for AC_BE, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; +- +-// +-// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register +-// +-#define WMM_TXOP1_CFG 0x0224 +-typedef union _AC_TXOP_CSR1_STRUC { +- struct { +- USHORT Ac2Txop; // for AC_VI, in unit of 32us +- USHORT Ac3Txop; // for AC_VO, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; +- +-#define RINGREG_DIFF 0x10 +-#define GPIO_CTRL_CFG 0x0228 //MAC_CSR13 +-#define MCU_CMD_CFG 0x022c +-#define TX_BASE_PTR0 0x0230 //AC_BK base address +-#define TX_MAX_CNT0 0x0234 +-#define TX_CTX_IDX0 0x0238 +-#define TX_DTX_IDX0 0x023c +-#define TX_BASE_PTR1 0x0240 //AC_BE base address +-#define TX_MAX_CNT1 0x0244 +-#define TX_CTX_IDX1 0x0248 +-#define TX_DTX_IDX1 0x024c +-#define TX_BASE_PTR2 0x0250 //AC_VI base address +-#define TX_MAX_CNT2 0x0254 +-#define TX_CTX_IDX2 0x0258 +-#define TX_DTX_IDX2 0x025c +-#define TX_BASE_PTR3 0x0260 //AC_VO base address +-#define TX_MAX_CNT3 0x0264 +-#define TX_CTX_IDX3 0x0268 +-#define TX_DTX_IDX3 0x026c +-#define TX_BASE_PTR4 0x0270 //HCCA base address +-#define TX_MAX_CNT4 0x0274 +-#define TX_CTX_IDX4 0x0278 +-#define TX_DTX_IDX4 0x027c +-#define TX_BASE_PTR5 0x0280 //MGMT base address +-#define TX_MAX_CNT5 0x0284 +-#define TX_CTX_IDX5 0x0288 +-#define TX_DTX_IDX5 0x028c +-#define TX_MGMTMAX_CNT TX_MAX_CNT5 +-#define TX_MGMTCTX_IDX TX_CTX_IDX5 +-#define TX_MGMTDTX_IDX TX_DTX_IDX5 +-#define RX_BASE_PTR 0x0290 //RX base address +-#define RX_MAX_CNT 0x0294 +-#define RX_CRX_IDX 0x0298 +-#define RX_DRX_IDX 0x029c +-#define USB_DMA_CFG 0x02a0 +- +-typedef union _USB_DMA_CFG_STRUC { +- struct { +- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns +- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes +- UINT32 phyclear:1; //phy watch dog enable. write 1 +- UINT32 rsv:2; +- UINT32 TxClear:1; //Clear USB DMA TX path +- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. +- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation +- UINT32 RxBulkEn:1; //Enable USB DMA Rx +- UINT32 TxBulkEn:1; //Enable USB DMA Tx +- UINT32 EpoutValid:6; //OUT endpoint data valid +- UINT32 RxBusy:1; //USB DMA RX FSM busy +- UINT32 TxBusy:1; //USB DMA TX FSM busy +- } field; +- UINT32 word; +-} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; +- +-// +-// 3 PBF registers +-// +-// +-// Most are for debug. Driver doesn't touch PBF register. +-#define PBF_SYS_CTRL 0x0400 +-#define PBF_CFG 0x0408 +-#define PBF_MAX_PCNT 0x040C +-#define PBF_CTRL 0x0410 +-#define PBF_INT_STA 0x0414 +-#define PBF_INT_ENA 0x0418 +-#define TXRXQ_PCNT 0x0438 +-#define PBF_DBG 0x043c +-#define PBF_CAP_CTRL 0x0440 +- +-// eFuse registers +-#define EFUSE_CTRL 0x0580 +-#define EFUSE_DATA0 0x0590 +-#define EFUSE_DATA1 0x0594 +-#define EFUSE_DATA2 0x0598 +-#define EFUSE_DATA3 0x059c +-#define EFUSE_USAGE_MAP_START 0x2d0 +-#define EFUSE_USAGE_MAP_END 0x2fc +-#define EFUSE_TAG 0x2fe +-#define EFUSE_USAGE_MAP_SIZE 45 +- +-typedef union _EFUSE_CTRL_STRUC { +- struct { +- UINT32 EFSROM_AOUT:6; +- UINT32 EFSROM_MODE:2; +- UINT32 EFSROM_LDO_OFF_TIME:6; +- UINT32 EFSROM_LDO_ON_TIME:2; +- UINT32 EFSROM_AIN:10; +- UINT32 RESERVED:4; +- UINT32 EFSROM_KICK:1; +- UINT32 SEL_EFUSE:1; +- } field; +- UINT32 word; +-} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; +- +-#define LDO_CFG0 0x05d4 +-#define GPIO_SWITCH 0x05dc +- +-// +-// 4 MAC registers +-// +-// +-// 4.1 MAC SYSTEM configuration registers (offset:0x1000) +-// +-#define MAC_CSR0 0x1000 +-typedef union _ASIC_VER_ID_STRUC { +- struct { +- USHORT ASICRev; // reversion : 0 +- USHORT ASICVer; // version : 2860 +- } field; +- UINT32 word; +-} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; +- +-#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 +-#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 +-#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 +-// +-// MAC_CSR2: STA MAC register 0 +-// +-typedef union _MAC_DW0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} MAC_DW0_STRUC, *PMAC_DW0_STRUC; +- +-// +-// MAC_CSR3: STA MAC register 1 +-// +-typedef union _MAC_DW1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR U2MeMask; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} MAC_DW1_STRUC, *PMAC_DW1_STRUC; +- +-#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 +-#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 +- +-// +-// MAC_CSR5: BSSID register 1 +-// +-typedef union _MAC_CSR5_STRUC { +- struct { +- UCHAR Byte4; // BSSID byte 4 +- UCHAR Byte5; // BSSID byte 5 +- USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID +- USHORT MBssBcnNum:3; +- USHORT Rsvd:11; +- } field; +- UINT32 word; +-} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; +- +-#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 +-#define BBP_CSR_CFG 0x101c // +-// +-// BBP_CSR_CFG: BBP serial control register +-// +-typedef union _BBP_CSR_CFG_STRUC { +- struct { +- UINT32 Value:8; // Register value to program into BBP +- UINT32 RegNum:8; // Selected BBP register +- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP +- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. +- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles +- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel +- UINT32 :12; +- } field; +- UINT32 word; +-} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; +- +-#define RF_CSR_CFG0 0x1020 +-// +-// RF_CSR_CFG: RF control register +-// +-typedef union _RF_CSR_CFG0_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 bitwidth:5; // Selected BBP register +- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby +- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate +- UINT32 Busy:1; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; +- +-#define RF_CSR_CFG1 0x1024 +-typedef union _RF_CSR_CFG1_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) +- UINT32 rsv:7; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; +- +-#define RF_CSR_CFG2 0x1028 // +-typedef union _RF_CSR_CFG2_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 rsv:8; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; +- +-#define LED_CFG 0x102c // MAC_CSR14 +-typedef union _LED_CFG_STRUC { +- struct { +- UINT32 OnPeriod:8; // blinking on period unit 1ms +- UINT32 OffPeriod:8; // blinking off period unit 1ms +- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms +- UINT32 rsv:2; +- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on +- UINT32 GLedMode:2; // green Led Mode +- UINT32 YLedMode:2; // yellow Led Mode +- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high +- UINT32 :1; +- } field; +- UINT32 word; +-} LED_CFG_STRUC, *PLED_CFG_STRUC; +- +-// +-// 4.2 MAC TIMING configuration registers (offset:0x1100) +-// +-#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 +-typedef union _IFS_SLOT_CFG_STRUC { +- struct { +- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX +- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX +- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND +- UINT32 EIFS:9; // unit 1us +- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer +- UINT32 rsv:2; +- } field; +- UINT32 word; +-} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; +- +-#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits +-#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) +-#define CH_TIME_CFG 0x110C // Count as channel busy +-#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us +-#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 +- +-#define BCN_OFFSET0 0x042C +-#define BCN_OFFSET1 0x0430 +- +-// +-// BCN_TIME_CFG : Synchronization control register +-// +-typedef union _BCN_TIME_CFG_STRUC { +- struct { +- UINT32 BeaconInterval:16; // in unit of 1/16 TU +- UINT32 bTsfTicking:1; // Enable TSF auto counting +- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode +- UINT32 bTBTTEnable:1; +- UINT32 bBeaconGen:1; // Enable beacon generator +- UINT32 :3; +- UINT32 TxTimestampCompensate:8; +- } field; +- UINT32 word; +-} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; +- +-#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 +-#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only +-#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. +-#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 +-#define INT_TIMER_CFG 0x1128 // +-#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable +-#define CH_IDLE_STA 0x1130 // channel idle time +-#define CH_BUSY_STA 0x1134 // channle busy time +-// +-// 4.2 MAC POWER configuration registers (offset:0x1200) +-// +-#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 +-#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 +-#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 +-// +-// AUTO_WAKEUP_CFG: Manual power control / status register +-// +-typedef union _AUTO_WAKEUP_STRUC { +- struct { +- UINT32 AutoLeadTime:8; +- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set +- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake +- UINT32 :16; +- } field; +- UINT32 word; +-} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; +- +-// +-// 4.3 MAC TX configuration registers (offset:0x1300) +-// +- +-#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 +-#define EDCA_AC1_CFG 0x1304 +-#define EDCA_AC2_CFG 0x1308 +-#define EDCA_AC3_CFG 0x130c +-typedef union _EDCA_AC_CFG_STRUC { +- struct { +- UINT32 AcTxop:8; // in unit of 32us +- UINT32 Aifsn:4; // # of slot time +- UINT32 Cwmin:4; // +- UINT32 Cwmax:4; //unit power of 2 +- UINT32 :12; // +- } field; +- UINT32 word; +-} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; +- +-#define EDCA_TID_AC_MAP 0x1310 +-#define TX_PWR_CFG_0 0x1314 +-#define TX_PWR_CFG_1 0x1318 +-#define TX_PWR_CFG_2 0x131C +-#define TX_PWR_CFG_3 0x1320 +-#define TX_PWR_CFG_4 0x1324 +-#define TX_PIN_CFG 0x1328 +-#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz +-#define TX_SW_CFG0 0x1330 +-#define TX_SW_CFG1 0x1334 +-#define TX_SW_CFG2 0x1338 +-#define TXOP_THRES_CFG 0x133c +-#define TXOP_CTRL_CFG 0x1340 +-#define TX_RTS_CFG 0x1344 +- +-typedef union _TX_RTS_CFG_STRUC { +- struct { +- UINT32 AutoRtsRetryLimit:8; +- UINT32 RtsThres:16; // unit:byte +- UINT32 RtsFbkEn:1; // enable rts rate fallback +- UINT32 rsv:7; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; +- +-#define TX_TIMEOUT_CFG 0x1348 +-typedef union _TX_TIMEOUT_CFG_STRUC { +- struct { +- UINT32 rsv:4; +- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us +- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure +- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) +- UINT32 rsv2:8; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; +- +-#define TX_RTY_CFG 0x134c +-typedef union PACKED _TX_RTY_CFG_STRUC { +- struct { +- UINT32 ShortRtyLimit:8; // short retry limit +- UINT32 LongRtyLimit:8; //long retry limit +- UINT32 LongRtyThre:12; // Long retry threshoold +- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable +- UINT32 rsv:1; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; +- +-#define TX_LINK_CFG 0x1350 +-typedef union PACKED _TX_LINK_CFG_STRUC { +- struct PACKED { +- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us +- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable +- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) +- UINT32 TxMRQEn:1; // MCS request TX enable +- UINT32 TxRDGEn:1; // RDG TX enable +- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable +- UINT32 rsv:3; // +- UINT32 RemotMFB:8; // remote MCS feedback +- UINT32 RemotMFS:8; //remote MCS feedback sequence number +- } field; +- UINT32 word; +-} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; +- +-#define HT_FBK_CFG0 0x1354 +-typedef union PACKED _HT_FBK_CFG0_STRUC { +- struct { +- UINT32 HTMCS0FBK:4; +- UINT32 HTMCS1FBK:4; +- UINT32 HTMCS2FBK:4; +- UINT32 HTMCS3FBK:4; +- UINT32 HTMCS4FBK:4; +- UINT32 HTMCS5FBK:4; +- UINT32 HTMCS6FBK:4; +- UINT32 HTMCS7FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; +- +-#define HT_FBK_CFG1 0x1358 +-typedef union _HT_FBK_CFG1_STRUC { +- struct { +- UINT32 HTMCS8FBK:4; +- UINT32 HTMCS9FBK:4; +- UINT32 HTMCS10FBK:4; +- UINT32 HTMCS11FBK:4; +- UINT32 HTMCS12FBK:4; +- UINT32 HTMCS13FBK:4; +- UINT32 HTMCS14FBK:4; +- UINT32 HTMCS15FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; +- +-#define LG_FBK_CFG0 0x135c +-typedef union _LG_FBK_CFG0_STRUC { +- struct { +- UINT32 OFDMMCS0FBK:4; //initial value is 0 +- UINT32 OFDMMCS1FBK:4; //initial value is 0 +- UINT32 OFDMMCS2FBK:4; //initial value is 1 +- UINT32 OFDMMCS3FBK:4; //initial value is 2 +- UINT32 OFDMMCS4FBK:4; //initial value is 3 +- UINT32 OFDMMCS5FBK:4; //initial value is 4 +- UINT32 OFDMMCS6FBK:4; //initial value is 5 +- UINT32 OFDMMCS7FBK:4; //initial value is 6 +- } field; +- UINT32 word; +-} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; +- +-#define LG_FBK_CFG1 0x1360 +-typedef union _LG_FBK_CFG1_STRUC { +- struct { +- UINT32 CCKMCS0FBK:4; //initial value is 0 +- UINT32 CCKMCS1FBK:4; //initial value is 0 +- UINT32 CCKMCS2FBK:4; //initial value is 1 +- UINT32 CCKMCS3FBK:4; //initial value is 2 +- UINT32 rsv:16; +- } field; +- UINT32 word; +-} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; +- +-//======================================================= +-//================ Protection Paramater================================ +-//======================================================= +-#define CCK_PROT_CFG 0x1364 //CCK Protection +-#define ASIC_SHORTNAV 1 +-#define ASIC_LONGNAV 2 +-#define ASIC_RTS 1 +-#define ASIC_CTS 2 +-typedef union _PROT_CFG_STRUC { +- struct { +- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). +- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv +- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv +- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. +- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. +- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX +- UINT32 rsv:5; +- } field; +- UINT32 word; +-} PROT_CFG_STRUC, *PPROT_CFG_STRUC; +- +-#define OFDM_PROT_CFG 0x1368 //OFDM Protection +-#define MM20_PROT_CFG 0x136C //MM20 Protection +-#define MM40_PROT_CFG 0x1370 //MM40 Protection +-#define GF20_PROT_CFG 0x1374 //GF20 Protection +-#define GF40_PROT_CFG 0x1378 //GR40 Protection +-#define EXP_CTS_TIME 0x137C // +-#define EXP_ACK_TIME 0x1380 // +- +-// +-// 4.4 MAC RX configuration registers (offset:0x1400) +-// +-#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 +-#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 +-// +-// TXRX_CSR4: Auto-Responder/ +-// +-typedef union _AUTO_RSP_CFG_STRUC { +- struct { +- UINT32 AutoResponderEnable:1; +- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble +- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode +- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode +- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble +- UINT32 rsv:1; // Power bit value in conrtrol frame +- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame +- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame +- UINT32 :24; +- } field; +- UINT32 word; +-} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; +- +-#define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054 +-#define HT_BASIC_RATE 0x140c +-#define HT_CTRL_CFG 0x1410 +-#define SIFS_COST_CFG 0x1414 +-#define RX_PARSER_CFG 0x1418 //Set NAV for all received frames +- +-// +-// 4.5 MAC Security configuration (offset:0x1500) +-// +-#define TX_SEC_CNT0 0x1500 // +-#define RX_SEC_CNT0 0x1504 // +-#define CCMP_FC_MUTE 0x1508 // +-// +-// 4.6 HCCA/PSMP (offset:0x1600) +-// +-#define TXOP_HLDR_ADDR0 0x1600 +-#define TXOP_HLDR_ADDR1 0x1604 +-#define TXOP_HLDR_ET 0x1608 +-#define QOS_CFPOLL_RA_DW0 0x160c +-#define QOS_CFPOLL_A1_DW1 0x1610 +-#define QOS_CFPOLL_QC 0x1614 +-// +-// 4.7 MAC Statistis registers (offset:0x1700) +-// +-#define RX_STA_CNT0 0x1700 // +-#define RX_STA_CNT1 0x1704 // +-#define RX_STA_CNT2 0x1708 // +- +-// +-// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count +-// +-typedef union _RX_STA_CNT0_STRUC { +- struct { +- USHORT CrcErr; +- USHORT PhyErr; +- } field; +- UINT32 word; +-} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; +- +-// +-// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count +-// +-typedef union _RX_STA_CNT1_STRUC { +- struct { +- USHORT FalseCca; +- USHORT PlcpErr; +- } field; +- UINT32 word; +-} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; +- +-// +-// RX_STA_CNT2_STRUC: +-// +-typedef union _RX_STA_CNT2_STRUC { +- struct { +- USHORT RxDupliCount; +- USHORT RxFifoOverflowCount; +- } field; +- UINT32 word; +-} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; +- +-#define TX_STA_CNT0 0x170C // +-// +-// STA_CSR3: TX Beacon count +-// +-typedef union _TX_STA_CNT0_STRUC { +- struct { +- USHORT TxFailCount; +- USHORT TxBeaconCount; +- } field; +- UINT32 word; +-} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; +- +-#define TX_STA_CNT1 0x1710 // +-// +-// TX_STA_CNT1: TX tx count +-// +-typedef union _TX_STA_CNT1_STRUC { +- struct { +- USHORT TxSuccess; +- USHORT TxRetransmit; +- } field; +- UINT32 word; +-} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; +- +-#define TX_STA_CNT2 0x1714 // +-// +-// TX_STA_CNT2: TX tx count +-// +-typedef union _TX_STA_CNT2_STRUC { +- struct { +- USHORT TxZeroLenCount; +- USHORT TxUnderFlowCount; +- } field; +- UINT32 word; +-} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; +- +-#define TX_STA_FIFO 0x1718 // +-// +-// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register +-// +-typedef union PACKED _TX_STA_FIFO_STRUC { +- struct { +- UINT32 bValid:1; // 1:This register contains a valid TX result +- UINT32 PidType:4; +- UINT32 TxSuccess:1; // Tx No retry success +- UINT32 TxAggre:1; // Tx Retry Success +- UINT32 TxAckRequired:1; // Tx fail +- UINT32 wcid:8; //wireless client index +-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 TxBF:1; +- UINT32 Reserve:2; +- } field; +- UINT32 word; +-} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; +- +-// Debug counter +-#define TX_AGG_CNT 0x171c +-typedef union _TX_AGG_CNT_STRUC { +- struct { +- USHORT NonAggTxCount; +- USHORT AggTxCount; +- } field; +- UINT32 word; +-} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; +- +-// Debug counter +-#define TX_AGG_CNT0 0x1720 +-typedef union _TX_AGG_CNT0_STRUC { +- struct { +- USHORT AggSize1Count; +- USHORT AggSize2Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; +- +-// Debug counter +-#define TX_AGG_CNT1 0x1724 +-typedef union _TX_AGG_CNT1_STRUC { +- struct { +- USHORT AggSize3Count; +- USHORT AggSize4Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; +- +-#define TX_AGG_CNT2 0x1728 +-typedef union _TX_AGG_CNT2_STRUC { +- struct { +- USHORT AggSize5Count; +- USHORT AggSize6Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; +- +-// Debug counter +-#define TX_AGG_CNT3 0x172c +-typedef union _TX_AGG_CNT3_STRUC { +- struct { +- USHORT AggSize7Count; +- USHORT AggSize8Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; +- +-// Debug counter +-#define TX_AGG_CNT4 0x1730 +-typedef union _TX_AGG_CNT4_STRUC { +- struct { +- USHORT AggSize9Count; +- USHORT AggSize10Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; +- +-#define TX_AGG_CNT5 0x1734 +-typedef union _TX_AGG_CNT5_STRUC { +- struct { +- USHORT AggSize11Count; +- USHORT AggSize12Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; +- +-#define TX_AGG_CNT6 0x1738 +-typedef union _TX_AGG_CNT6_STRUC { +- struct { +- USHORT AggSize13Count; +- USHORT AggSize14Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; +- +-#define TX_AGG_CNT7 0x173c +-typedef union _TX_AGG_CNT7_STRUC { +- struct { +- USHORT AggSize15Count; +- USHORT AggSize16Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; +- +-#define MPDU_DENSITY_CNT 0x1740 +-typedef union _MPDU_DEN_CNT_STRUC { +- struct { +- USHORT TXZeroDelCount; //TX zero length delimiter count +- USHORT RXZeroDelCount; //RX zero length delimiter count +- } field; +- UINT32 word; +-} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; +- +-// +-// TXRX control registers - base address 0x3000 +-// +-// rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first.. +-#define TXRX_CSR1 0x77d0 +- +-// +-// Security key table memory, base address = 0x1000 +-// +-#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = +-#define HW_WCID_ENTRY_SIZE 8 +-#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte +-#define HW_KEY_ENTRY_SIZE 0x20 +-#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define HW_IVEIV_ENTRY_SIZE 8 +-#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte +-#define HW_WCID_ATTRI_SIZE 4 +-#define WCID_RESERVED 0x6bfc +-#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte +-#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte +-#define HW_SHARED_KEY_MODE_SIZE 4 +-#define SHAREDKEYTABLE 0 +-#define PAIRWISEKEYTABLE 1 +- +-typedef union _SHAREDKEY_MODE_STRUC { +- struct { +- UINT32 Bss0Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; +- +-// 64-entry for pairwise key table +-typedef struct _HW_WCID_ENTRY { // 8-byte per entry +- UCHAR Address[6]; +- UCHAR Rsv[2]; +-} HW_WCID_ENTRY, PHW_WCID_ENTRY; +- +- +- +-// +-// Other on-chip shared memory space, base = 0x2000 +-// +- +-// CIS space - base address = 0x2000 +-#define HW_CIS_BASE 0x2000 +- +-// Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function. +-#define HW_CS_CTS_BASE 0x7700 +-// DFS CTS frame base address. It's where mac stores CTS frame for DFS. +-#define HW_DFS_CTS_BASE 0x7780 +-#define HW_CTS_FRAME_SIZE 0x80 +- +-// 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes +-// to save debugging settings +-#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes +-#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes +- +-// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon +-// Three section discontinue memory segments will be used. +-// 1. The original region for BCN 0~3 +-// 2. Extract memory from FCE table for BCN 4~5 +-// 3. Extract memory from Pair-wise key table for BCN 6~7 +-// It occupied those memory of wcid 238~253 for BCN 6 +-// and wcid 222~237 for BCN 7 +-#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ +-#define HW_BEACON_BASE0 0x7800 +-#define HW_BEACON_BASE1 0x7A00 +-#define HW_BEACON_BASE2 0x7C00 +-#define HW_BEACON_BASE3 0x7E00 +-#define HW_BEACON_BASE4 0x7200 +-#define HW_BEACON_BASE5 0x7400 +-#define HW_BEACON_BASE6 0x5DC0 +-#define HW_BEACON_BASE7 0x5BC0 +- +-#define HW_BEACON_MAX_COUNT 8 +-#define HW_BEACON_OFFSET 0x0200 +-#define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE) +- +-// HOST-MCU shared memory - base address = 0x2100 +-#define HOST_CMD_CSR 0x404 +-#define H2M_MAILBOX_CSR 0x7010 +-#define H2M_MAILBOX_CID 0x7014 +-#define H2M_MAILBOX_STATUS 0x701c +-#define H2M_INT_SRC 0x7024 +-#define H2M_BBP_AGENT 0x7028 +-#define M2H_CMD_DONE_CSR 0x000c +-#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert +-#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert +-#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware +-#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert +-#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert +- +-// +-// Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, +-// +-// +-// DMA RING DESCRIPTOR +-// +-#define E2PROM_CSR 0x0004 +-#define IO_CNTL_CSR 0x77d0 +- +-#ifdef RT2860 +-// 8051 firmware image for RT2860 - base address = 0x4000 +-#define FIRMWARE_IMAGE_BASE 0x2000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte +-#endif +-#ifdef RT2870 +-// 8051 firmware image for usb - use last-half base address = 0x3000 +-#define FIRMWARE_IMAGE_BASE 0x3000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte +-#endif // RT2870 // +- +-// ================================================================ +-// Tx / Rx / Mgmt ring descriptor definition +-// ================================================================ +- +-// the following PID values are used to mark outgoing frame type in TXD->PID so that +-// proper TX statistics can be collected based on these categories +-// b3-2 of PID field - +-#define PID_MGMT 0x05 +-#define PID_BEACON 0x0c +-#define PID_DATA_NORMALUCAST 0x02 +-#define PID_DATA_AMPDU 0x04 +-#define PID_DATA_NO_ACK 0x08 +-#define PID_DATA_NOT_NORM_ACK 0x03 +-// value domain of pTxD->HostQId (4-bit: 0~15) +-#define QID_AC_BK 1 // meet ACI definition in 802.11e +-#define QID_AC_BE 0 // meet ACI definition in 802.11e +-#define QID_AC_VI 2 +-#define QID_AC_VO 3 +-#define QID_HCCA 4 +-#define NUM_OF_TX_RING 5 +-#define QID_MGMT 13 +-#define QID_RX 14 +-#define QID_OTHER 15 +- +- +-// ------------------------------------------------------ +-// BBP & RF definition +-// ------------------------------------------------------ +-#define BUSY 1 +-#define IDLE 0 +- +-#define RF_R00 0 +-#define RF_R01 1 +-#define RF_R02 2 +-#define RF_R03 3 +-#define RF_R04 4 +-#define RF_R05 5 +-#define RF_R06 6 +-#define RF_R07 7 +-#define RF_R08 8 +-#define RF_R09 9 +-#define RF_R10 10 +-#define RF_R11 11 +-#define RF_R12 12 +-#define RF_R13 13 +-#define RF_R14 14 +-#define RF_R15 15 +-#define RF_R16 16 +-#define RF_R17 17 +-#define RF_R18 18 +-#define RF_R19 19 +-#define RF_R20 20 +-#define RF_R21 21 +-#define RF_R22 22 +-#define RF_R23 23 +-#define RF_R24 24 +-#define RF_R25 25 +-#define RF_R26 26 +-#define RF_R27 27 +-#define RF_R28 28 +-#define RF_R29 29 +-#define RF_R30 30 +-#define RF_R31 31 +- +-#define BBP_R0 0 // version +-#define BBP_R1 1 // TSSI +-#define BBP_R2 2 // TX configure +-#define BBP_R3 3 +-#define BBP_R4 4 +-#define BBP_R5 5 +-#define BBP_R6 6 +-#define BBP_R14 14 // RX configure +-#define BBP_R16 16 +-#define BBP_R17 17 // RX sensibility +-#define BBP_R18 18 +-#define BBP_R21 21 +-#define BBP_R22 22 +-#define BBP_R24 24 +-#define BBP_R25 25 +-#define BBP_R31 31 +-#define BBP_R49 49 //TSSI +-#define BBP_R50 50 +-#define BBP_R51 51 +-#define BBP_R52 52 +-#define BBP_R55 55 +-#define BBP_R62 62 // Rx SQ0 Threshold HIGH +-#define BBP_R63 63 +-#define BBP_R64 64 +-#define BBP_R65 65 +-#define BBP_R66 66 +-#define BBP_R67 67 +-#define BBP_R68 68 +-#define BBP_R69 69 +-#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold +-#define BBP_R73 73 +-#define BBP_R75 75 +-#define BBP_R77 77 +-#define BBP_R79 79 +-#define BBP_R80 80 +-#define BBP_R81 81 +-#define BBP_R82 82 +-#define BBP_R83 83 +-#define BBP_R84 84 +-#define BBP_R86 86 +-#define BBP_R91 91 +-#define BBP_R92 92 +-#define BBP_R94 94 // Tx Gain Control +-#define BBP_R103 103 +-#define BBP_R105 105 +-#define BBP_R113 113 +-#define BBP_R114 114 +-#define BBP_R115 115 +-#define BBP_R116 116 +-#define BBP_R117 117 +-#define BBP_R118 118 +-#define BBP_R119 119 +-#define BBP_R120 120 +-#define BBP_R121 121 +-#define BBP_R122 122 +-#define BBP_R123 123 +-#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control +- +- +-#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db +- +-#define RSSI_FOR_VERY_LOW_SENSIBILITY -35 +-#define RSSI_FOR_LOW_SENSIBILITY -58 +-#define RSSI_FOR_MID_LOW_SENSIBILITY -80 +-#define RSSI_FOR_MID_SENSIBILITY -90 +- +-//------------------------------------------------------------------------- +-// EEPROM definition +-//------------------------------------------------------------------------- +-#define EEDO 0x08 +-#define EEDI 0x04 +-#define EECS 0x02 +-#define EESK 0x01 +-#define EERL 0x80 +- +-#define EEPROM_WRITE_OPCODE 0x05 +-#define EEPROM_READ_OPCODE 0x06 +-#define EEPROM_EWDS_OPCODE 0x10 +-#define EEPROM_EWEN_OPCODE 0x13 +- +-#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs +-#define NUM_EEPROM_TX_G_PARMS 7 +-#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_G_TX_PWR_OFFSET 0x52 +-#define EEPROM_G_TX2_PWR_OFFSET 0x60 +-#define EEPROM_LED1_OFFSET 0x3c +-#define EEPROM_LED2_OFFSET 0x3e +-#define EEPROM_LED3_OFFSET 0x40 +-#define EEPROM_LNA_OFFSET 0x44 +-#define EEPROM_RSSI_BG_OFFSET 0x46 +-#define EEPROM_RSSI_A_OFFSET 0x4a +-#define EEPROM_DEFINE_MAX_TXPWR 0x4e +-#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power. +-#define EEPROM_A_TX_PWR_OFFSET 0x78 +-#define EEPROM_A_TX2_PWR_OFFSET 0xa6 +-#define EEPROM_VERSION_OFFSET 0x02 +-#define EEPROM_FREQ_OFFSET 0x3a +-#define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power. +-#define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. +-#define VALID_EEPROM_VERSION 1 +- +-// PairKeyMode definition +-#define PKMODE_NONE 0 +-#define PKMODE_WEP64 1 +-#define PKMODE_WEP128 2 +-#define PKMODE_TKIP 3 +-#define PKMODE_AES 4 +-#define PKMODE_CKIP64 5 +-#define PKMODE_CKIP128 6 +-#define PKMODE_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table +- +-// ================================================================================= +-// WCID format +-// ================================================================================= +-//7.1 WCID ENTRY format : 8bytes +-typedef struct _WCID_ENTRY_STRUC { +- UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 +- UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 +- UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table +-} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; +- +-//8.1.1 SECURITY KEY format : 8DW +-// 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table +-typedef struct _HW_KEY_ENTRY { // 32-byte per entry +- UCHAR Key[16]; +- UCHAR TxMic[8]; +- UCHAR RxMic[8]; +-} HW_KEY_ENTRY, *PHW_KEY_ENTRY; +- +-//8.1.2 IV/EIV format : 2DW +- +-//8.1.3 RX attribute entry format : 1DW +-typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table +- UINT32 PairKeyMode:3; +- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID +- UINT32 RXWIUDF:3; +- UINT32 rsv:22; +-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; +- +-// ================================================================================= +-// TX / RX ring descriptor format +-// ================================================================================= +- +-// the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO. +-// MAC block use this TXINFO to control the transmission behavior of this frame. +-#define FIFO_MGMT 0 +-#define FIFO_HCCA 1 +-#define FIFO_EDCA 2 +- +-// +-// TX descriptor format, Tx ring, Mgmt Ring +-// +-typedef struct PACKED _TXD_STRUC { +- // Word 0 +- UINT32 SDPtr0; +- // Word 1 +- UINT32 SDLen1:14; +- UINT32 LastSec1:1; +- UINT32 Burst:1; +- UINT32 SDLen0:14; +- UINT32 LastSec0:1; +- UINT32 DMADONE:1; +- //Word2 +- UINT32 SDPtr1; +- //Word3 +- UINT32 rsv2:24; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 rsv:2; +- UINT32 TCO:1; // +- UINT32 UCO:1; // +- UINT32 ICO:1; // +-} TXD_STRUC, *PTXD_STRUC; +- +-// +-// TXD Wireless Information format for Tx ring and Mgmt Ring +-// +-//txop : for txop mode +-// 0:txop for the MPDU frame will be handles by ASIC by register +-// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS +-typedef struct PACKED _TXWI_STRUC { +- // Word 0 +- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. +- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode +- UINT32 CFACK:1; +- UINT32 TS:1; +- +- UINT32 AMPDU:1; +- UINT32 MpduDensity:3; +- UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. +- UINT32 rsv:6; +- +- UINT32 MCS:7; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE +- UINT32 Ifs:1; // +- UINT32 rsv2:1; +- UINT32 TxBF:1; // 3*3 +- UINT32 PHYMODE:2; +- // Word 1 +- UINT32 ACK:1; +- UINT32 NSEQ:1; +- UINT32 BAWinSize:6; +- UINT32 WirelessCliID:8; +- UINT32 MPDUtotalByteCount:12; +- UINT32 PacketId:4; +- //Word2 +- UINT32 IV; +- //Word3 +- UINT32 EIV; +-} TXWI_STRUC, *PTXWI_STRUC; +- +-// +-// Rx descriptor format, Rx Ring +-// +-#ifdef RT2860 +-typedef struct PACKED _RXD_STRUC { +- // Word 0 +- UINT32 SDP0; +- // Word 1 +- UINT32 SDL1:14; +- UINT32 Rsv:2; +- UINT32 SDL0:14; +- UINT32 LS0:1; +- UINT32 DDONE:1; +- // Word 2 +- UINT32 SDP1; +- // Word 3 +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; +- UINT32 Decrypted:1; // this frame is being decrypted. +- UINT32 PlcpSignal:1; // To be moved +- UINT32 PlcpRssil:1;// To be moved +- UINT32 Rsv1:13; +-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; +-#endif /* RT2860 */ +- +-// +-// RXWI wireless information format, in PBF. invisible in driver. +-// +-typedef struct PACKED _RXWI_STRUC { +- // Word 0 +- UINT32 WirelessCliID:8; +- UINT32 KeyIndex:2; +- UINT32 BSSID:3; +- UINT32 UDF:3; +- UINT32 MPDUtotalByteCount:12; +- UINT32 TID:4; +- // Word 1 +- UINT32 FRAG:4; +- UINT32 SEQUENCE:12; +- UINT32 MCS:7; +- UINT32 BW:1; +- UINT32 ShortGI:1; +- UINT32 STBC:2; +- UINT32 rsv:3; +- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me +- //Word2 +- UINT32 RSSI0:8; +- UINT32 RSSI1:8; +- UINT32 RSSI2:8; +- UINT32 rsv1:8; +- //Word3 +- UINT32 SNR0:8; +- UINT32 SNR1:8; +- UINT32 rsv2:16; +-} RXWI_STRUC, *PRXWI_STRUC; +- +-// ================================================================================= +-// HOST-MCU communication data structure +-// ================================================================================= +- +-// +-// H2M_MAILBOX_CSR: Host-to-MCU Mailbox +-// +-typedef union _H2M_MAILBOX_STRUC { +- struct { +- UINT32 LowByte:8; +- UINT32 HighByte:8; +- UINT32 CmdToken:8; +- UINT32 Owner:8; +- } field; +- UINT32 word; +-} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; +- +-// +-// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication +-// +-typedef union _M2H_CMD_DONE_STRUC { +- struct { +- UINT32 CmdToken0; +- UINT32 CmdToken1; +- UINT32 CmdToken2; +- UINT32 CmdToken3; +- } field; +- UINT32 word; +-} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; +- +-// +-// MCU_LEDCS: MCU LED Control Setting. +-// +-typedef union _MCU_LEDCS_STRUC { +- struct { +- UCHAR LedMode:7; +- UCHAR Polarity:1; +- } field; +- UCHAR word; +-} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; +- +-// ================================================================================= +-// Register format +-// ================================================================================= +- +- +- +-//NAV_TIME_CFG :NAV +-typedef union _NAV_TIME_CFG_STRUC { +- struct { +- UCHAR Sifs; // in unit of 1-us +- UCHAR SlotTime; // in unit of 1-us +- USHORT Eifs:9; // in unit of 1-us +- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable +- USHORT rsv:6; +- } field; +- UINT32 word; +-} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; +- +-// +-// RX_FILTR_CFG: /RX configuration register +-// +-typedef union _RX_FILTR_CFG_STRUC { +- struct { +- UINT32 DropCRCErr:1; // Drop CRC error +- UINT32 DropPhyErr:1; // Drop physical error +- UINT32 DropNotToMe:1; // Drop not to me unicast frame +- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true +- +- UINT32 DropVerErr:1; // Drop version error frame +- UINT32 DropMcast:1; // Drop multicast frames +- UINT32 DropBcast:1; // Drop broadcast frames +- UINT32 DropDuplicate:1; // Drop duplicate frame +- +- UINT32 DropCFEndAck:1; // Drop Ps-Poll +- UINT32 DropCFEnd:1; // Drop Ps-Poll +- UINT32 DropAck:1; // Drop Ps-Poll +- UINT32 DropCts:1; // Drop Ps-Poll +- +- UINT32 DropRts:1; // Drop Ps-Poll +- UINT32 DropPsPoll:1; // Drop Ps-Poll +- UINT32 DropBA:1; // +- UINT32 DropBAR:1; // +- +- UINT32 DropRsvCntlType:1; +- UINT32 :15; +- } field; +- UINT32 word; +-} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; +- +-// +-// PHY_CSR4: RF serial control register +-// +-typedef union _PHY_CSR4_STRUC { +- struct { +- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. +- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) +- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program +- UINT32 PLL_LD:1; // RF PLL_LD status +- UINT32 Busy:1; // 1: ASIC is busy execute RF programming. +- } field; +- UINT32 word; +-} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; +- +-// +-// SEC_CSR5: shared key table security mode register +-// +-typedef union _SEC_CSR5_STRUC { +- struct { +- UINT32 Bss2Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; +- +-// +-// HOST_CMD_CSR: For HOST to interrupt embedded processor +-// +-typedef union _HOST_CMD_CSR_STRUC { +- struct { +- UINT32 HostCommand:8; +- UINT32 Rsv:24; +- } field; +- UINT32 word; +-} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; +- +-// +-// AIFSN_CSR: AIFSN for each EDCA AC +-// +- +- +- +-// +-// E2PROM_CSR: EEPROM control register +-// +-typedef union _E2PROM_CSR_STRUC { +- struct { +- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. +- UINT32 EepromSK:1; +- UINT32 EepromCS:1; +- UINT32 EepromDI:1; +- UINT32 EepromDO:1; +- UINT32 Type:1; // 1: 93C46, 0:93C66 +- UINT32 LoadStatus:1; // 1:loading, 0:done +- UINT32 Rsvd:25; +- } field; +- UINT32 word; +-} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; +- +-// ------------------------------------------------------------------- +-// E2PROM data layout +-// ------------------------------------------------------------------- +- +-// +-// EEPROM antenna select format +-// +-typedef union _EEPROM_ANTENNA_STRUC { +- struct { +- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R +- USHORT TxPath:4; // 1: 1T, 2: 2T +- USHORT RfIcType:4; // see E2PROM document +- USHORT Rsv:4; +- } field; +- USHORT word; +-} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; +- +-typedef union _EEPROM_NIC_CINFIG2_STRUC { +- struct { +- USHORT HardwareRadioControl:1; // 1:enable, 0:disable +- USHORT DynamicTxAgcControl:1; // +- USHORT ExternalLNAForG:1; // +- USHORT ExternalLNAForA:1; // external LNA enable for 2.4G +- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable +- USHORT BW40MSidebandForG:1; +- USHORT BW40MSidebandForA:1; +- USHORT EnableWPSPBC:1; // WPS PBC Control bit +- USHORT BW40MAvailForG:1; // 0:enable, 1:disable +- USHORT BW40MAvailForA:1; // 0:enable, 1:disable +- USHORT Rsv1:1; // must be 0 +- USHORT AntDiversity:1; // Antenna diversity +- USHORT Rsv2:3; // must be 0 +- USHORT DACTestBit:1; // control if driver should patch the DAC issue +- } field; +- USHORT word; +-} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; +- +-// +-// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) +-// +-typedef union _EEPROM_TX_PWR_STRUC { +- struct { +- CHAR Byte0; // Low Byte +- CHAR Byte1; // High Byte +- } field; +- USHORT word; +-} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; +- +-typedef union _EEPROM_VERSION_STRUC { +- struct { +- UCHAR FaeReleaseNumber; // Low Byte +- UCHAR Version; // High Byte +- } field; +- USHORT word; +-} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; +- +-typedef union _EEPROM_LED_STRUC { +- struct { +- USHORT PolarityRDY_G:1; // Polarity RDY_G setting. +- USHORT PolarityRDY_A:1; // Polarity RDY_A setting. +- USHORT PolarityACT:1; // Polarity ACT setting. +- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. +- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. +- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. +- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. +- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. +- USHORT LedMode:5; // Led mode. +- USHORT Rsvd:3; // Reserved +- } field; +- USHORT word; +-} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; +- +-typedef union _EEPROM_TXPOWER_DELTA_STRUC { +- struct { +- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) +- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value +- UCHAR TxPowerEnable:1;// Enable +- } field; +- UCHAR value; +-} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; +- +-// +-// QOS_CSR0: TXOP holder address0 register +-// +-typedef union _QOS_CSR0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; +- +-// +-// QOS_CSR1: TXOP holder address1 register +-// +-typedef union _QOS_CSR1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR Rsvd0; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; +- +-#define RF_CSR_CFG 0x500 +-typedef union _RF_CSR_CFG_STRUC { +- struct { +- UINT RF_CSR_DATA:8; // DATA +- UINT TESTCSR_RFACC_REGNUM:5; // RF register ID +- UINT Rsvd2:3; // Reserved +- UINT RF_CSR_WR:1; // 0: read 1: write +- UINT RF_CSR_KICK:1; // kick RF register read/write +- UINT Rsvd1:14; // Reserved +- } field; +- UINT word; +-} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; +- +-#endif // __RT28XX_H__ +diff --git a/drivers/staging/rt2860/rt_config.h b/drivers/staging/rt2860/rt_config.h +index 2093a80..67b957b 100644 +--- a/drivers/staging/rt2860/rt_config.h ++++ b/drivers/staging/rt2860/rt_config.h +@@ -41,29 +41,37 @@ + #define __RT_CONFIG_H__ + + #include "rtmp_type.h" +-#ifdef LINUX +-#include "rt_linux.h" +-#endif +-#include "rtmp_def.h" +-#include "rt28xx.h" ++#include "rtmp_os.h" + +-#ifdef RT2860 +-#include "rt2860.h" +-#endif +-#ifdef RT2870 +-#include "../rt2870/rt2870.h" +-#endif // RT2870 // ++#include "rtmp_def.h" ++#include "rtmp_chip.h" ++#include "rtmp_timer.h" + + #include "oid.h" + #include "mlme.h" + #include "wpa.h" +-#include "md5.h" ++#include "crypt_md5.h" ++#include "crypt_sha2.h" ++#include "crypt_hmac.h" + #include "rtmp.h" + #include "ap.h" + #include "dfs.h" + #include "chlist.h" + #include "spectrum.h" + ++#include "eeprom.h" ++#if defined(RTMP_PCI_SUPPORT) || defined(RTMP_USB_SUPPORT) ++#include "rtmp_mcu.h" ++#endif ++ ++#undef AP_WSC_INCLUDED ++#undef STA_WSC_INCLUDED ++#undef WSC_INCLUDED ++ ++ ++ ++ ++ + #ifdef IGMP_SNOOP_SUPPORT + #include "igmp_snoop.h" + #endif // IGMP_SNOOP_SUPPORT // +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index ed27b85..940b385 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -30,27 +30,6 @@ + + ULONG RTDebugLevel = RT_DEBUG_ERROR; + +-BUILD_TIMER_FUNCTION(MlmePeriodicExec); +-BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout); +-BUILD_TIMER_FUNCTION(APSDPeriodicExec); +-BUILD_TIMER_FUNCTION(AsicRfTuningExec); +-#ifdef RT2870 +-BUILD_TIMER_FUNCTION(BeaconUpdateExec); +-#endif // RT2870 // +- +-BUILD_TIMER_FUNCTION(BeaconTimeout); +-BUILD_TIMER_FUNCTION(ScanTimeout); +-BUILD_TIMER_FUNCTION(AuthTimeout); +-BUILD_TIMER_FUNCTION(AssocTimeout); +-BUILD_TIMER_FUNCTION(ReassocTimeout); +-BUILD_TIMER_FUNCTION(DisassocTimeout); +-BUILD_TIMER_FUNCTION(LinkDownExec); +-BUILD_TIMER_FUNCTION(StaQuickResponeForRateUpExec); +-BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); +-#ifdef RT2860 +-BUILD_TIMER_FUNCTION(PsPollWakeExec); +-BUILD_TIMER_FUNCTION(RadioOnExec); +-#endif + + // for wireless system event message + char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { +@@ -106,7 +85,7 @@ VOID RTMP_SetPeriodicTimer( + IN NDIS_MINIPORT_TIMER *pTimer, + IN unsigned long timeout) + { +- timeout = ((timeout*HZ) / 1000); ++ timeout = ((timeout*OS_HZ) / 1000); + pTimer->expires = jiffies + timeout; + add_timer(pTimer); + } +@@ -131,7 +110,7 @@ VOID RTMP_OS_Add_Timer( + if (timer_pending(pTimer)) + return; + +- timeout = ((timeout*HZ) / 1000); ++ timeout = ((timeout*OS_HZ) / 1000); + pTimer->expires = jiffies + timeout; + add_timer(pTimer); + } +@@ -140,7 +119,7 @@ VOID RTMP_OS_Mod_Timer( + IN NDIS_MINIPORT_TIMER *pTimer, + IN unsigned long timeout) + { +- timeout = ((timeout*HZ) / 1000); ++ timeout = ((timeout*OS_HZ) / 1000); + mod_timer(pTimer, jiffies + timeout); + } + +@@ -186,8 +165,8 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time) + + // pAd MUST allow to be NULL + NDIS_STATUS os_alloc_mem( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR *mem, ++ IN RTMP_ADAPTER *pAd, ++ OUT UCHAR **mem, + IN ULONG size) + { + *mem = (PUCHAR) kmalloc(size, GFP_ATOMIC); +@@ -200,7 +179,7 @@ NDIS_STATUS os_alloc_mem( + // pAd MUST allow to be NULL + NDIS_STATUS os_free_mem( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR mem) ++ IN PVOID mem) + { + + ASSERT(mem); +@@ -209,6 +188,20 @@ NDIS_STATUS os_free_mem( + } + + ++ ++ ++PNDIS_PACKET RtmpOSNetPktAlloc( ++ IN RTMP_ADAPTER *pAd, ++ IN int size) ++{ ++ struct sk_buff *skb; ++ /* Add 2 more bytes for ip header alignment*/ ++ skb = dev_alloc_skb(size+2); ++ ++ return ((PNDIS_PACKET)skb); ++} ++ ++ + PNDIS_PACKET RTMP_AllocateFragPacketBuffer( + IN PRTMP_ADAPTER pAd, + IN ULONG Length) +@@ -283,13 +276,16 @@ VOID RTMPFreeAdapter( + + os_cookie=(POS_COOKIE)pAd->OS_Cookie; + ++ if (pAd->BeaconBuf) + kfree(pAd->BeaconBuf); + + + NdisFreeSpinLock(&pAd->MgmtRingLock); +-#ifdef RT2860 ++ ++#ifdef RTMP_MAC_PCI + NdisFreeSpinLock(&pAd->RxRingLock); +-#endif ++#endif // RTMP_MAC_PCI // ++ + for (index =0 ; index < NUM_OF_TX_RING; index++) + { + NdisFreeSpinLock(&pAd->TxSwQueueLock[index]); +@@ -299,7 +295,9 @@ VOID RTMPFreeAdapter( + + NdisFreeSpinLock(&pAd->irq_lock); + ++ + vfree(pAd); // pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); ++ if (os_cookie) + kfree(os_cookie); + } + +@@ -379,7 +377,7 @@ NDIS_STATUS RTMPAllocateNdisPacket( + ASSERT(DataLen); + + // 1. Allocate a packet +- pPacket = (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + TXPADDING_SIZE); ++ pPacket = (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + RTMP_PKT_TAIL_PADDING); + if (pPacket == NULL) + { + *ppPacket = NULL; +@@ -442,7 +440,7 @@ void RTMP_QueryPacketInfo( + OUT UINT *pSrcBufLen) + { + pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = GET_OS_PKT_DATAPTR(pPacket); ++ pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + +@@ -464,7 +462,7 @@ void RTMP_QueryNextPacketInfo( + if (pPacket) + { + pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = GET_OS_PKT_DATAPTR(pPacket); ++ pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + +@@ -485,18 +483,6 @@ void RTMP_QueryNextPacketInfo( + } + } + +-// not yet support MBSS +-PNET_DEV get_netdev_from_bssid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR FromWhichBSSID) +-{ +- PNET_DEV dev_p = NULL; +- +- dev_p = pAd->net_dev; +- +- ASSERT(dev_p); +- return dev_p; /* return one of MBSS */ +-} + + PNDIS_PACKET DuplicatePacket( + IN PRTMP_ADAPTER pAd, +@@ -538,9 +524,9 @@ PNDIS_PACKET duplicate_pkt( + if ((skb = __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) + { + skb_reserve(skb, 2); +- NdisMoveMemory(skb_tail_pointer(skb), pHeader802_3, HdrLen); ++ NdisMoveMemory(skb->tail, pHeader802_3, HdrLen); + skb_put(skb, HdrLen); +- NdisMoveMemory(skb_tail_pointer(skb), pData, DataSize); ++ NdisMoveMemory(skb->tail, pData, DataSize); + skb_put(skb, DataSize); + skb->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); + pPacket = OSPKT_TO_RTPKT(skb); +@@ -649,7 +635,9 @@ void wlan_802_11_to_802_3_packet( + // + + NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, LENGTH_802_3); +-} ++ } ++ ++ + + void announce_802_3_packet( + IN PRTMP_ADAPTER pAd, +@@ -726,8 +714,8 @@ VOID RTMPSendWirelessEvent( + IN CHAR Rssi) + { + +- union iwreq_data wrqu; +- PUCHAR pBuf = NULL, pBufPtr = NULL; ++ //union iwreq_data wrqu; ++ PSTRING pBuf = NULL, pBufPtr = NULL; + USHORT event, type, BufLen; + UCHAR event_table_len = 0; + +@@ -788,13 +776,7 @@ VOID RTMPSendWirelessEvent( + pBufPtr[pBufPtr - pBuf] = '\0'; + BufLen = pBufPtr - pBuf; + +- memset(&wrqu, 0, sizeof(wrqu)); +- wrqu.data.flags = Event_flag; +- wrqu.data.length = BufLen; +- +- //send wireless event +- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, pBuf); +- ++ RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, (PUCHAR)pBuf, BufLen); + //DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __func__, pBuf)); + + kfree(pBuf); +@@ -896,7 +878,7 @@ void send_monitor_packets( + + ph->msgcode = DIDmsg_lnxind_wlansniffrm; + ph->msglen = sizeof(wlan_ng_prism2_header); +- strcpy(ph->devname, pAd->net_dev->name); ++ strcpy((PSTRING) ph->devname, (PSTRING) pAd->net_dev->name); + + ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; + ph->hosttime.status = 0; +@@ -972,18 +954,275 @@ err_free_sk_buff: + + } + +-void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify) ++ ++/******************************************************************************* ++ ++ Device IRQ related functions. ++ ++ *******************************************************************************/ ++int RtmpOSIRQRequest(IN PNET_DEV pNetDev) ++{ ++ struct net_device *net_dev = pNetDev; ++ PRTMP_ADAPTER pAd = NULL; ++ int retval = 0; ++ ++ GET_PAD_FROM_NET_DEV(pAd, pNetDev); ++ ++ ASSERT(pAd); ++ ++#ifdef RTMP_PCI_SUPPORT ++ if (pAd->infType == RTMP_DEV_INF_PCI) ++ { ++ POS_COOKIE _pObj = (POS_COOKIE)(pAd->OS_Cookie); ++ RTMP_MSI_ENABLE(pAd); ++ retval = request_irq(_pObj->pci_dev->irq, rt2860_interrupt, SA_SHIRQ, (net_dev)->name, (net_dev)); ++ if (retval != 0) ++ printk("RT2860: request_irq ERROR(%d)\n", retval); ++ } ++#endif // RTMP_PCI_SUPPORT // ++ ++ ++ return retval; ++ ++} ++ ++ ++int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + { +- daemonize(pThreadName /*"%s",pAd->net_dev->name*/); ++ struct net_device *net_dev = pNetDev; ++ PRTMP_ADAPTER pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ ASSERT(pAd); ++ ++#ifdef RTMP_PCI_SUPPORT ++ if (pAd->infType == RTMP_DEV_INF_PCI) ++ { ++ POS_COOKIE pObj = (POS_COOKIE)(pAd->OS_Cookie); ++ synchronize_irq(pObj->pci_dev->irq); ++ free_irq(pObj->pci_dev->irq, (net_dev)); ++ RTMP_MSI_DISABLE(pAd); ++ } ++#endif // RTMP_PCI_SUPPORT // ++ ++ ++ return 0; ++} ++ ++ ++/******************************************************************************* ++ ++ File open/close related functions. ++ ++ *******************************************************************************/ ++RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) ++{ ++ struct file *filePtr; ++ ++ filePtr = filp_open(pPath, flag, 0); ++ if (IS_ERR(filePtr)) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s(): Error %ld opening %s\n", __func__, -PTR_ERR(filePtr), pPath)); ++ } ++ ++ return (RTMP_OS_FD)filePtr; ++} ++ ++int RtmpOSFileClose(RTMP_OS_FD osfd) ++{ ++ filp_close(osfd, NULL); ++ return 0; ++} ++ ++ ++void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) ++{ ++ osfd->f_pos = offset; ++} ++ ++ ++int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) ++{ ++ // The object must have a read method ++ if (osfd->f_op && osfd->f_op->read) ++ { ++ return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("no file read method\n")); ++ return -1; ++ } ++} ++ ++ ++int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) ++{ ++ return osfd->f_op->write(osfd, pDataPtr, (size_t)writeLen, &osfd->f_pos); ++} ++ ++ ++void RtmpOSFSInfoChange(RTMP_OS_FS_INFO *pOSFSInfo, BOOLEAN bSet) ++{ ++ if (bSet) ++ { ++ // Save uid and gid used for filesystem access. ++ // Set user and group to 0 (root) ++ pOSFSInfo->fsuid = current_fsuid(); ++ pOSFSInfo->fsgid = current_fsgid(); ++ pOSFSInfo->fs = get_fs(); ++ set_fs(KERNEL_DS); ++ } ++ else ++ { ++ set_fs(pOSFSInfo->fs); ++ } ++} ++ ++ ++ ++/******************************************************************************* ++ ++ Task create/management/kill related functions. ++ ++ *******************************************************************************/ ++NDIS_STATUS RtmpOSTaskKill( ++ IN RTMP_OS_TASK *pTask) ++{ ++ RTMP_ADAPTER *pAd; ++ int ret = NDIS_STATUS_FAILURE; ++ ++ pAd = (RTMP_ADAPTER *)pTask->priv; ++ ++#ifdef KTHREAD_SUPPORT ++ if (pTask->kthread_task) ++ { ++ kthread_stop(pTask->kthread_task); ++ ret = NDIS_STATUS_SUCCESS; ++ } ++#else ++ CHECK_PID_LEGALITY(pTask->taskPID) ++ { ++ printk("Terminate the task(%s) with pid(%d)!\n", pTask->taskName, GET_PID_NUMBER(pTask->taskPID)); ++ mb(); ++ pTask->task_killed = 1; ++ mb(); ++ ret = KILL_THREAD_PID(pTask->taskPID, SIGTERM, 1); ++ if (ret) ++ { ++ printk(KERN_WARNING "kill task(%s) with pid(%d) failed(retVal=%d)!\n", ++ pTask->taskName, GET_PID_NUMBER(pTask->taskPID), ret); ++ } ++ else ++ { ++ wait_for_completion(&pTask->taskComplete); ++ pTask->taskPID = THREAD_PID_INIT_VALUE; ++ pTask->task_killed = 0; ++ ret = NDIS_STATUS_SUCCESS; ++ } ++ } ++#endif ++ ++ return ret; ++ ++} ++ ++ ++INT RtmpOSTaskNotifyToExit( ++ IN RTMP_OS_TASK *pTask) ++{ ++ ++#ifndef KTHREAD_SUPPORT ++ complete_and_exit(&pTask->taskComplete, 0); ++#endif ++ ++ return 0; ++} ++ ++ ++void RtmpOSTaskCustomize( ++ IN RTMP_OS_TASK *pTask) ++{ ++ ++#ifndef KTHREAD_SUPPORT ++ ++ daemonize((PSTRING)&pTask->taskName[0]/*"%s",pAd->net_dev->name*/); + + allow_signal(SIGTERM); + allow_signal(SIGKILL); + current->flags |= PF_NOFREEZE; + + /* signal that we've started the thread */ +- complete(pNotify); ++ complete(&pTask->taskComplete); ++ ++#endif + } + ++ ++NDIS_STATUS RtmpOSTaskAttach( ++ IN RTMP_OS_TASK *pTask, ++ IN int (*fn)(void *), ++ IN void *arg) ++{ ++ NDIS_STATUS status = NDIS_STATUS_SUCCESS; ++ pid_t pid_number = -1; ++ ++#ifdef KTHREAD_SUPPORT ++ pTask->task_killed = 0; ++ pTask->kthread_task = NULL; ++ pTask->kthread_task = kthread_run(fn, arg, pTask->taskName); ++ if (IS_ERR(pTask->kthread_task)) ++ status = NDIS_STATUS_FAILURE; ++#else ++ pid_number = kernel_thread(fn, arg, RTMP_OS_MGMT_TASK_FLAGS); ++ if (pid_number < 0) ++ { ++ DBGPRINT (RT_DEBUG_ERROR, ("Attach task(%s) failed!\n", pTask->taskName)); ++ status = NDIS_STATUS_FAILURE; ++ } ++ else ++ { ++ pTask->taskPID = GET_PID(pid_number); ++ ++ // Wait for the thread to start ++ wait_for_completion(&pTask->taskComplete); ++ status = NDIS_STATUS_SUCCESS; ++ } ++#endif ++ return status; ++} ++ ++ ++NDIS_STATUS RtmpOSTaskInit( ++ IN RTMP_OS_TASK *pTask, ++ IN PSTRING pTaskName, ++ IN VOID *pPriv) ++{ ++ int len; ++ ++ ASSERT(pTask); ++ ++#ifndef KTHREAD_SUPPORT ++ NdisZeroMemory((PUCHAR)(pTask), sizeof(RTMP_OS_TASK)); ++#endif ++ ++ len = strlen(pTaskName); ++ len = len > (RTMP_OS_TASK_NAME_LEN -1) ? (RTMP_OS_TASK_NAME_LEN-1) : len; ++ NdisMoveMemory(&pTask->taskName[0], pTaskName, len); ++ pTask->priv = pPriv; ++ ++#ifndef KTHREAD_SUPPORT ++ RTMP_SEM_EVENT_INIT_LOCKED(&(pTask->taskSema)); ++ pTask->taskPID = THREAD_PID_INIT_VALUE; ++ ++ init_completion (&pTask->taskComplete); ++#endif ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ + void RTMP_IndicateMediaState( + IN PRTMP_ADAPTER pAd) + { +@@ -1000,3 +1239,259 @@ void RTMP_IndicateMediaState( + } + } + ++int RtmpOSWrielessEventSend( ++ IN RTMP_ADAPTER *pAd, ++ IN UINT32 eventType, ++ IN INT flags, ++ IN PUCHAR pSrcMac, ++ IN PUCHAR pData, ++ IN UINT32 dataLen) ++{ ++ union iwreq_data wrqu; ++ ++ memset(&wrqu, 0, sizeof(wrqu)); ++ ++ if (flags>-1) ++ wrqu.data.flags = flags; ++ ++ if (pSrcMac) ++ memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); ++ ++ if ((pData!= NULL) && (dataLen > 0)) ++ wrqu.data.length = dataLen; ++ ++ wireless_send_event(pAd->net_dev, eventType, &wrqu, (char *)pData); ++ return 0; ++} ++ ++ ++int RtmpOSNetDevAddrSet( ++ IN PNET_DEV pNetDev, ++ IN PUCHAR pMacAddr) ++{ ++ struct net_device *net_dev; ++ RTMP_ADAPTER *pAd; ++ ++ net_dev = pNetDev; ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ // work-around for the SuSE due to it has it's own interface name management system. ++ { ++ NdisZeroMemory(pAd->StaCfg.dev_name, 16); ++ NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name)); ++ } ++ ++ NdisMoveMemory(net_dev->dev_addr, pMacAddr, 6); ++ ++ return 0; ++} ++ ++ ++ ++/* ++ * Assign the network dev name for created Ralink WiFi interface. ++ */ ++static int RtmpOSNetDevRequestName( ++ IN RTMP_ADAPTER *pAd, ++ IN PNET_DEV dev, ++ IN PSTRING pPrefixStr, ++ IN INT devIdx) ++{ ++ PNET_DEV existNetDev; ++ STRING suffixName[IFNAMSIZ]; ++ STRING desiredName[IFNAMSIZ]; ++ int ifNameIdx, prefixLen, slotNameLen; ++ int Status; ++ ++ ++ prefixLen = strlen(pPrefixStr); ++ ASSERT((prefixLen < IFNAMSIZ)); ++ ++ for (ifNameIdx = devIdx; ifNameIdx < 32; ifNameIdx++) ++ { ++ memset(suffixName, 0, IFNAMSIZ); ++ memset(desiredName, 0, IFNAMSIZ); ++ strncpy(&desiredName[0], pPrefixStr, prefixLen); ++ ++ sprintf(suffixName, "%d", ifNameIdx); ++ ++ slotNameLen = strlen(suffixName); ++ ASSERT(((slotNameLen + prefixLen) < IFNAMSIZ)); ++ strcat(desiredName, suffixName); ++ ++ existNetDev = RtmpOSNetDevGetByName(dev, &desiredName[0]); ++ if (existNetDev == NULL) ++ break; ++ else ++ RtmpOSNetDeviceRefPut(existNetDev); ++ } ++ ++ if(ifNameIdx < 32) ++ { ++ strcpy(&dev->name[0], &desiredName[0]); ++ Status = NDIS_STATUS_SUCCESS; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Cannot request DevName with preifx(%s) and in range(0~32) as suffix from OS!\n", pPrefixStr)); ++ Status = NDIS_STATUS_FAILURE; ++ } ++ ++ return Status; ++} ++ ++ ++void RtmpOSNetDevClose( ++ IN PNET_DEV pNetDev) ++{ ++ dev_close(pNetDev); ++} ++ ++ ++void RtmpOSNetDevFree(PNET_DEV pNetDev) ++{ ++ ASSERT(pNetDev); ++ ++ free_netdev(pNetDev); ++} ++ ++ ++INT RtmpOSNetDevAlloc( ++ IN PNET_DEV *new_dev_p, ++ IN UINT32 privDataSize) ++{ ++ // assign it as null first. ++ *new_dev_p = NULL; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Allocate a net device with private data size=%d!\n", privDataSize)); ++ *new_dev_p = alloc_etherdev(privDataSize); ++ if (*new_dev_p) ++ return NDIS_STATUS_SUCCESS; ++ else ++ return NDIS_STATUS_FAILURE; ++} ++ ++ ++PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, PSTRING pDevName) ++{ ++ PNET_DEV pTargetNetDev = NULL; ++ ++ pTargetNetDev = dev_get_by_name(dev_net(pNetDev), pDevName); ++ ++ return pTargetNetDev; ++} ++ ++ ++void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) ++{ ++ /* ++ every time dev_get_by_name is called, and it has returned a valid struct ++ net_device*, dev_put should be called afterwards, because otherwise the ++ machine hangs when the device is unregistered (since dev->refcnt > 1). ++ */ ++ if(pNetDev) ++ dev_put(pNetDev); ++} ++ ++ ++INT RtmpOSNetDevDestory( ++ IN RTMP_ADAPTER *pAd, ++ IN PNET_DEV pNetDev) ++{ ++ ++ // TODO: Need to fix this ++ printk("WARNING: This function(%s) not implement yet!!!\n", __func__); ++ return 0; ++} ++ ++ ++void RtmpOSNetDevDetach(PNET_DEV pNetDev) ++{ ++ unregister_netdev(pNetDev); ++} ++ ++ ++int RtmpOSNetDevAttach( ++ IN PNET_DEV pNetDev, ++ IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook) ++{ ++ int ret, rtnl_locked = FALSE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RtmpOSNetDevAttach()--->\n")); ++ // If we need hook some callback function to the net device structrue, now do it. ++ if (pDevOpHook) ++ { ++ PRTMP_ADAPTER pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, pNetDev); ++ ++ pNetDev->netdev_ops = pDevOpHook->netdev_ops; ++ ++ /* OS specific flags, here we used to indicate if we are virtual interface */ ++ pNetDev->priv_flags = pDevOpHook->priv_flags; ++ ++ ++ if (pAd->OpMode == OPMODE_STA) ++ { ++ pNetDev->wireless_handlers = &rt28xx_iw_handler_def; ++ } ++ ++ ++ // copy the net device mac address to the net_device structure. ++ NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN); ++ ++ rtnl_locked = pDevOpHook->needProtcted; ++ } ++ ++ if (rtnl_locked) ++ ret = register_netdevice(pNetDev); ++ else ++ ret = register_netdev(pNetDev); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<---RtmpOSNetDevAttach(), ret=%d\n", ret)); ++ if (ret == 0) ++ return NDIS_STATUS_SUCCESS; ++ else ++ return NDIS_STATUS_FAILURE; ++} ++ ++ ++PNET_DEV RtmpOSNetDevCreate( ++ IN RTMP_ADAPTER *pAd, ++ IN INT devType, ++ IN INT devNum, ++ IN INT privMemSize, ++ IN PSTRING pNamePrefix) ++{ ++ struct net_device *pNetDev = NULL; ++ int status; ++ ++ ++ /* allocate a new network device */ ++ status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize*/); ++ if (status != NDIS_STATUS_SUCCESS) ++ { ++ /* allocation fail, exit */ ++ DBGPRINT(RT_DEBUG_ERROR, ("Allocate network device fail (%s)...\n", pNamePrefix)); ++ return NULL; ++ } ++ ++ ++ /* find a available interface name, max 32 interfaces */ ++ status = RtmpOSNetDevRequestName(pAd, pNetDev, pNamePrefix, devNum); ++ if (status != NDIS_STATUS_SUCCESS) ++ { ++ /* error! no any available ra name can be used! */ ++ DBGPRINT(RT_DEBUG_ERROR, ("Assign interface name (%s with suffix 0~32) failed...\n", pNamePrefix)); ++ RtmpOSNetDevFree(pNetDev); ++ ++ return NULL; ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("The name of the new %s interface is %s...\n", pNamePrefix, pNetDev->name)); ++ } ++ ++ return pNetDev; ++} +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index e8d64c3..4ebe943 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -23,27 +23,22 @@ + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + ************************************************************************* +- */ + +-/***********************************************************************/ +-/* */ +-/* Program: rt_linux.c */ +-/* Created: 4/21/2006 1:17:38 PM */ +-/* Author: Wu Xi-Kun */ +-/* Comments: `description` */ +-/* */ +-/*---------------------------------------------------------------------*/ +-/* */ +-/* History: */ +-/* Revision 1.1 4/21/2006 1:17:38 PM xsikun */ +-/* Initial revision */ +-/* */ +-/***********************************************************************/ +- +-#include "rtmp_type.h" ++ Module Name: ++ rt_linux.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++*/ ++ ++#ifndef __RT_LINUX_H__ ++#define __RT_LINUX_H__ ++ + #include + #include +- + #include + #include + #include +@@ -69,60 +64,80 @@ + #define __KERNEL_SYSCALLS__ + #include + #include ++#include ++#include // for get_unaligned() + ++#define KTHREAD_SUPPORT 1 ++// RT2870 2.1.0.0 has it disabled + +-#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) ++#ifdef KTHREAD_SUPPORT ++#include ++#include ++#endif // KTHREAD_SUPPORT // ++ ++#undef AP_WSC_INCLUDED ++#undef STA_WSC_INCLUDED ++#undef WSC_INCLUDED ++ ++ ++ ++ ++#ifdef KTHREAD_SUPPORT ++#endif // KTHREAD_SUPPORT // ++ ++/*********************************************************************************** ++ * Profile related sections ++ ***********************************************************************************/ + +-#ifndef IFNAMSIZ +-#define IFNAMSIZ 16 +-#endif + +-//#define CONFIG_CKIP_SUPPORT ++#ifdef RTMP_MAC_PCI ++#define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" ++#define STA_DRIVER_VERSION "2.1.0.0" ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" ++#define STA_DRIVER_VERSION "2.1.0.0" ++// RT3070 version: 2.1.1.0 ++#endif // RTMP_MAC_USB // + ++extern const struct iw_handler_def rt28xx_iw_handler_def; ++ ++ ++/*********************************************************************************** ++ * Compiler related definitions ++ ***********************************************************************************/ + #undef __inline + #define __inline static inline ++#define IN ++#define OUT ++#define INOUT ++#define NDIS_STATUS INT + +-typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_dev); + +-// add by kathy +- +-/* order of "if defined()" is important, because for 3070 driver +- both RT2870 and RT3070 are defined */ +-#if defined(RT2860) +- #define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" +- #define STA_RTMP_FIRMWARE_FILE_NAME "/etc/Wireless/RT2860STA/RT2860STA.bin" +- #define STA_NIC_DEVICE_NAME "RT2860STA" +- #define STA_DRIVER_VERSION "1.8.1.1" +-#elif defined(RT3070) +- #define STA_PROFILE_PATH "/etc/Wireless/RT3070STA/RT3070STA.dat" +- #define STA_RT2870_IMAGE_FILE_NAME "/etc/Wireless/RT3070STA/rt2870.bin" +- #define STA_NIC_DEVICE_NAME "RT3070STA" +- #define STA_DRIVER_VERSION "2.0.1.0" +-#elif defined(RT2870) +- #define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" +- #define STA_RT2870_IMAGE_FILE_NAME "/etc/Wireless/RT2870STA/rt2870.bin" +- #define STA_NIC_DEVICE_NAME "RT2870STA" +- #define STA_DRIVER_VERSION "1.4.0.0" +-#endif ++/*********************************************************************************** ++ * OS Specific definitions and data structures ++ ***********************************************************************************/ ++typedef struct pci_dev * PPCI_DEV; ++typedef struct net_device * PNET_DEV; ++typedef void * PNDIS_PACKET; ++typedef char NDIS_PACKET; ++typedef PNDIS_PACKET * PPNDIS_PACKET; ++typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; ++typedef dma_addr_t * PNDIS_PHYSICAL_ADDRESS; ++typedef void * NDIS_HANDLE; ++typedef char * PNDIS_BUFFER; ++typedef struct pid * RTMP_OS_PID; ++typedef struct semaphore RTMP_OS_SEM; ++ ++typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_dev); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + #ifndef PCI_DEVICE + #define PCI_DEVICE(vend,dev) \ + .vendor = (vend), .device = (dev), \ + .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID + #endif // PCI_DEVICE // +-#endif +- +-#define RTMP_TIME_AFTER(a,b) \ +- (typecheck(unsigned long, (unsigned long)a) && \ +- typecheck(unsigned long, (unsigned long)b) && \ +- ((long)(b) - (long)(a) < 0)) +- +-#define RTMP_TIME_AFTER_EQ(a,b) \ +- (typecheck(unsigned long, (unsigned long)a) && \ +- typecheck(unsigned long, (unsigned long)b) && \ +- ((long)(a) - (long)(b) >= 0)) +-#define RTMP_TIME_BEFORE(a,b) RTMP_TIME_AFTER_EQ(b,a) ++#endif // RTMP_MAC_PCI // + + #define RT_MOD_INC_USE_COUNT() \ + if (!try_module_get(THIS_MODULE)) \ +@@ -133,220 +148,336 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_ + + #define RT_MOD_DEC_USE_COUNT() module_put(THIS_MODULE); + +-#define OS_HZ HZ ++#define RTMP_INC_REF(_A) 0 ++#define RTMP_DEC_REF(_A) 0 ++#define RTMP_GET_REF(_A) 0 + +-#define ETH_LENGTH_OF_ADDRESS 6 + +-#define IN +-#define OUT ++// This function will be called when query /proc ++struct iw_statistics *rt28xx_get_wireless_stats( ++ IN struct net_device *net_dev); ++ ++ ++/*********************************************************************************** ++ * Network related constant definitions ++ ***********************************************************************************/ ++#ifndef IFNAMSIZ ++#define IFNAMSIZ 16 ++#endif ++ ++#define ETH_LENGTH_OF_ADDRESS 6 + +-#define NDIS_STATUS INT + #define NDIS_STATUS_SUCCESS 0x00 + #define NDIS_STATUS_FAILURE 0x01 + #define NDIS_STATUS_INVALID_DATA 0x02 + #define NDIS_STATUS_RESOURCES 0x03 + ++#define NDIS_SET_PACKET_STATUS(_p, _status) do{} while(0) ++#define NdisWriteErrorLogEntry(_a, _b, _c, _d) do{} while(0) ++ ++/* statistics counter */ ++#define STATS_INC_RX_PACKETS(_pAd, _dev) ++#define STATS_INC_TX_PACKETS(_pAd, _dev) ++ ++#define STATS_INC_RX_BYTESS(_pAd, _dev, len) ++#define STATS_INC_TX_BYTESS(_pAd, _dev, len) ++ ++#define STATS_INC_RX_ERRORS(_pAd, _dev) ++#define STATS_INC_TX_ERRORS(_pAd, _dev) ++ ++#define STATS_INC_RX_DROPPED(_pAd, _dev) ++#define STATS_INC_TX_DROPPED(_pAd, _dev) ++ ++ ++/*********************************************************************************** ++ * Ralink Specific network related constant definitions ++ ***********************************************************************************/ + #define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f + #define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30 + #define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70 + #define MIN_NET_DEVICE_FOR_APCLI 0x20 + #define MIN_NET_DEVICE_FOR_MESH 0x30 + #define MIN_NET_DEVICE_FOR_DLS 0x40 ++#define NET_DEVICE_REAL_IDX_MASK 0x0f // for each operation mode, we maximum support 15 entities. ++ + + #define NDIS_PACKET_TYPE_DIRECTED 0 + #define NDIS_PACKET_TYPE_MULTICAST 1 + #define NDIS_PACKET_TYPE_BROADCAST 2 + #define NDIS_PACKET_TYPE_ALL_MULTICAST 3 ++#define NDIS_PACKET_TYPE_PROMISCUOUS 4 ++ ++ ++/*********************************************************************************** ++ * OS signaling related constant definitions ++ ***********************************************************************************/ ++ ++ ++/*********************************************************************************** ++ * OS file operation related data structure definitions ++ ***********************************************************************************/ ++typedef struct file* RTMP_OS_FD; ++ ++typedef struct _RTMP_OS_FS_INFO_ ++{ ++ int fsuid; ++ int fsgid; ++ mm_segment_t fs; ++}RTMP_OS_FS_INFO; + ++#define IS_FILE_OPEN_ERR(_fd) IS_ERR((_fd)) ++ ++ ++/*********************************************************************************** ++ * OS semaphore related data structure and definitions ++ ***********************************************************************************/ + struct os_lock { + spinlock_t lock; +- unsigned long flags; ++ unsigned long flags; + }; + ++typedef spinlock_t NDIS_SPIN_LOCK; + +-struct os_cookie { +-#ifdef RT2860 +- struct pci_dev *pci_dev; +- struct pci_dev *parent_pci_dev; +- dma_addr_t pAd_pa; +-#endif +-#ifdef RT2870 +- struct usb_device *pUsb_Dev; ++// ++// spin_lock enhanced for Nested spin lock ++// ++#define NdisAllocateSpinLock(__lock) \ ++{ \ ++ spin_lock_init((spinlock_t *)(__lock)); \ ++} + +- struct pid *MLMEThr_pid; +- struct pid *RTUSBCmdThr_pid; +- struct pid *TimerQThr_pid; +-#endif // RT2870 // +- +- struct tasklet_struct rx_done_task; +- struct tasklet_struct mgmt_dma_done_task; +- struct tasklet_struct ac0_dma_done_task; +- struct tasklet_struct ac1_dma_done_task; +- struct tasklet_struct ac2_dma_done_task; +- struct tasklet_struct ac3_dma_done_task; +- struct tasklet_struct hcca_dma_done_task; +- struct tasklet_struct tbtt_task; +-#ifdef RT2860 +- struct tasklet_struct fifo_statistic_full_task; +-#endif +-#ifdef RT2870 +- struct tasklet_struct null_frame_complete_task; +- struct tasklet_struct rts_frame_complete_task; +- struct tasklet_struct pspoll_frame_complete_task; +-#endif // RT2870 // ++#define NdisFreeSpinLock(lock) \ ++ do{}while(0) + +- unsigned long apd_pid; //802.1x daemon pid +- INT ioctl_if_type; +- INT ioctl_if; +-}; + +-#undef ASSERT +-#define ASSERT(x) ++#define RTMP_SEM_LOCK(__lock) \ ++{ \ ++ spin_lock_bh((spinlock_t *)(__lock)); \ ++} + +-typedef struct os_cookie * POS_COOKIE; +-typedef struct pci_dev * PPCI_DEV; +-typedef struct net_device * PNET_DEV; +-typedef void * PNDIS_PACKET; +-typedef char NDIS_PACKET; +-typedef PNDIS_PACKET * PPNDIS_PACKET; +-typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; +-typedef dma_addr_t * PNDIS_PHYSICAL_ADDRESS; +-typedef spinlock_t NDIS_SPIN_LOCK; +-typedef struct timer_list NDIS_MINIPORT_TIMER; +-typedef void * NDIS_HANDLE; +-typedef char * PNDIS_BUFFER; ++#define RTMP_SEM_UNLOCK(__lock) \ ++{ \ ++ spin_unlock_bh((spinlock_t *)(__lock)); \ ++} + + ++// sample, use semaphore lock to replace IRQ lock, 2007/11/15 ++#define RTMP_IRQ_LOCK(__lock, __irqflags) \ ++{ \ ++ __irqflags = 0; \ ++ spin_lock_bh((spinlock_t *)(__lock)); \ ++ pAd->irq_disabled |= 1; \ ++} + +-void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); ++#define RTMP_IRQ_UNLOCK(__lock, __irqflag) \ ++{ \ ++ pAd->irq_disabled &= 0; \ ++ spin_unlock_bh((spinlock_t *)(__lock)); \ ++} + +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction); +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction); ++#define RTMP_INT_LOCK(__lock, __irqflags) \ ++{ \ ++ spin_lock_irqsave((spinlock_t *)__lock, __irqflags); \ ++} + ++#define RTMP_INT_UNLOCK(__lock, __irqflag) \ ++{ \ ++ spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \ ++} + +-//////////////////////////////////////// +-// MOVE TO rtmp.h ? +-///////////////////////////////////////// +-#define PKTSRC_NDIS 0x7f +-#define PKTSRC_DRIVER 0x0f +-#define PRINT_MAC(addr) \ +- addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] ++#define NdisAcquireSpinLock RTMP_SEM_LOCK ++#define NdisReleaseSpinLock RTMP_SEM_UNLOCK + ++#ifndef wait_event_interruptible_timeout ++#define __wait_event_interruptible_timeout(wq, condition, ret) \ ++do { \ ++ wait_queue_t __wait; \ ++ init_waitqueue_entry(&__wait, current); \ ++ add_wait_queue(&wq, &__wait); \ ++ for (;;) { \ ++ set_current_state(TASK_INTERRUPTIBLE); \ ++ if (condition) \ ++ break; \ ++ if (!signal_pending(current)) { \ ++ ret = schedule_timeout(ret); \ ++ if (!ret) \ ++ break; \ ++ continue; \ ++ } \ ++ ret = -ERESTARTSYS; \ ++ break; \ ++ } \ ++ current->state = TASK_RUNNING; \ ++ remove_wait_queue(&wq, &__wait); \ ++} while (0) + +-#define RT2860_PCI_DEVICE_ID 0x0601 ++#define wait_event_interruptible_timeout(wq, condition, timeout) \ ++({ \ ++ long __ret = timeout; \ ++ if (!(condition)) \ ++ __wait_event_interruptible_timeout(wq, condition, __ret); \ ++ __ret; \ ++}) ++#endif + +-#ifdef RT2860 +-#define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ +- linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) ++#define RTMP_SEM_EVENT_INIT_LOCKED(_pSema) sema_init((_pSema), 0) ++#define RTMP_SEM_EVENT_INIT(_pSema) sema_init((_pSema), 1) ++#define RTMP_SEM_EVENT_WAIT(_pSema, _status) ((_status) = down_interruptible((_pSema))) ++#define RTMP_SEM_EVENT_UP(_pSema) up(_pSema) ++ ++#ifdef KTHREAD_SUPPORT ++#define RTMP_WAIT_EVENT_INTERRUPTIBLE(_pAd, _pTask) \ ++{ \ ++ wait_event_interruptible(_pTask->kthread_q, \ ++ _pTask->kthread_running || kthread_should_stop()); \ ++ _pTask->kthread_running = FALSE; \ ++ if (kthread_should_stop()) \ ++ { \ ++ RTMP_SET_FLAG(_pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); \ ++ break; \ ++ } \ ++} ++#endif + +-#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) \ +- linux_pci_unmap_single(_handle, _ptr, _size, _dir) ++#ifdef KTHREAD_SUPPORT ++#define WAKE_UP(_pTask) \ ++ do{ \ ++ if ((_pTask)->kthread_task) \ ++ { \ ++ (_pTask)->kthread_running = TRUE; \ ++ wake_up(&(_pTask)->kthread_q); \ ++ } \ ++ }while(0) ++#endif + +-#define PCI_ALLOC_CONSISTENT(_pci_dev, _size, _ptr) \ +- pci_alloc_consistent(_pci_dev, _size, _ptr) ++/*********************************************************************************** ++ * OS Memory Access related data structure and definitions ++ ***********************************************************************************/ ++#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) + +-#define PCI_FREE_CONSISTENT(_pci_dev, _size, _virtual_addr, _physical_addr) \ +- pci_free_consistent(_pci_dev, _size, _virtual_addr, _physical_addr) ++#define NdisMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) ++#define NdisCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length) ++#define NdisZeroMemory(Destination, Length) memset(Destination, 0, Length) ++#define NdisFillMemory(Destination, Length, Fill) memset(Destination, Fill, Length) ++#define NdisCmpMemory(Destination, Source, Length) memcmp(Destination, Source, Length) ++#define NdisEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) ++#define RTMPEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) + +-#define DEV_ALLOC_SKB(_length) \ +- dev_alloc_skb(_length) +-#endif +-#ifdef RT2870 +-#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0 ++#define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE) ++#define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA) + +-#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) +-#endif // RT2870 // ++#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) + + +-#define BEACON_FRAME_DMA_CACHE_WBACK(_ptr, _size) \ +- dma_cache_wback(_ptr, _size) ++/*********************************************************************************** ++ * OS task related data structure and definitions ++ ***********************************************************************************/ ++#define RTMP_OS_MGMT_TASK_FLAGS CLONE_VM + ++typedef struct pid * THREAD_PID; ++#define THREAD_PID_INIT_VALUE NULL ++#define GET_PID(_v) find_get_pid((_v)) ++#define GET_PID_NUMBER(_v) pid_nr((_v)) ++#define CHECK_PID_LEGALITY(_pid) if (pid_nr((_pid)) > 0) ++#define KILL_THREAD_PID(_A, _B, _C) kill_pid((_A), (_B), (_C)) + +-////////////////////////////////////////// +-// +-////////////////////////////////////////// ++typedef struct tasklet_struct RTMP_NET_TASK_STRUCT; ++typedef struct tasklet_struct *PRTMP_NET_TASK_STRUCT; + + +-#define NdisMIndicateStatus(_w, _x, _y, _z) ++/*********************************************************************************** ++ * Timer related definitions and data structures. ++ **********************************************************************************/ ++#define OS_HZ HZ + ++typedef struct timer_list NDIS_MINIPORT_TIMER; + typedef struct timer_list RTMP_OS_TIMER; ++typedef void (*TIMER_FUNCTION)(unsigned long); + +-#ifdef RT2870 +-/* ----------------- Timer Related MARCO ---------------*/ +-// In RT2870, we have a lot of timer functions and will read/write register, it's +-// not allowed in Linux USB sub-system to do it ( because of sleep issue when submit +-// to ctrl pipe). So we need a wrapper function to take care it. +- +-typedef VOID (*RT2870_TIMER_HANDLE)( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +-#endif // RT2870 // +- +- +-typedef struct _RALINK_TIMER_STRUCT { +- RTMP_OS_TIMER TimerObj; // Ndis Timer object +- BOOLEAN Valid; // Set to True when call RTMPInitTimer +- BOOLEAN State; // True if timer cancelled +- BOOLEAN PeriodicType; // True if timer is periodic timer +- BOOLEAN Repeat; // True if periodic timer +- ULONG TimerValue; // Timer value in milliseconds +- ULONG cookie; // os specific object +-#ifdef RT2870 +- RT2870_TIMER_HANDLE handle; +- void *pAd; +-#endif // RT2870 // +-} RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; +- +- +-#ifdef RT2870 +- +-typedef enum _RT2870_KERNEL_THREAD_STATUS_ +-{ +- RT2870_THREAD_UNKNOWN = 0, +- RT2870_THREAD_INITED = 1, +- RT2870_THREAD_RUNNING = 2, +- RT2870_THREAD_STOPED = 4, +-}RT2870_KERNEL_THREAD_STATUS; + +-#define RT2870_THREAD_CAN_DO_INSERT (RT2870_THREAD_INITED |RT2870_THREAD_RUNNING) ++#define OS_WAIT(_time) \ ++{ int _i; \ ++ long _loop = ((_time)/(1000/OS_HZ)) > 0 ? ((_time)/(1000/OS_HZ)) : 1;\ ++ wait_queue_head_t _wait; \ ++ init_waitqueue_head(&_wait); \ ++ for (_i=0; _i<(_loop); _i++) \ ++ wait_event_interruptible_timeout(_wait, 0, ONE_TICK); } + +-typedef struct _RT2870_TIMER_ENTRY_ +-{ +- RALINK_TIMER_STRUCT *pRaTimer; +- struct _RT2870_TIMER_ENTRY_ *pNext; +-}RT2870_TIMER_ENTRY; ++#define RTMP_TIME_AFTER(a,b) \ ++ (typecheck(unsigned long, (unsigned long)a) && \ ++ typecheck(unsigned long, (unsigned long)b) && \ ++ ((long)(b) - (long)(a) < 0)) + ++#define RTMP_TIME_AFTER_EQ(a,b) \ ++ (typecheck(unsigned long, (unsigned long)a) && \ ++ typecheck(unsigned long, (unsigned long)b) && \ ++ ((long)(a) - (long)(b) >= 0)) ++#define RTMP_TIME_BEFORE(a,b) RTMP_TIME_AFTER_EQ(b,a) ++ ++#define ONE_TICK 1 + +-#define TIMER_QUEUE_SIZE_MAX 128 +-typedef struct _RT2870_TIMER_QUEUE_ ++static inline void NdisGetSystemUpTime(ULONG *time) + { +- unsigned int status; +- UCHAR *pTimerQPoll; +- RT2870_TIMER_ENTRY *pQPollFreeList; +- RT2870_TIMER_ENTRY *pQHead; +- RT2870_TIMER_ENTRY *pQTail; +-}RT2870_TIMER_QUEUE; +-#endif // RT2870 // ++ *time = jiffies; ++} + + +-//#define DBG 1 ++/*********************************************************************************** ++ * OS specific cookie data structure binding to RTMP_ADAPTER ++ ***********************************************************************************/ ++ ++struct os_cookie { ++#ifdef RTMP_MAC_PCI ++ struct pci_dev *pci_dev; ++ struct pci_dev *parent_pci_dev; ++ USHORT DeviceID; ++ dma_addr_t pAd_pa; ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ struct usb_device *pUsb_Dev; ++#endif // RTMP_MAC_USB // ++ ++ RTMP_NET_TASK_STRUCT rx_done_task; ++ RTMP_NET_TASK_STRUCT mgmt_dma_done_task; ++ RTMP_NET_TASK_STRUCT ac0_dma_done_task; ++ RTMP_NET_TASK_STRUCT ac1_dma_done_task; ++ RTMP_NET_TASK_STRUCT ac2_dma_done_task; ++ RTMP_NET_TASK_STRUCT ac3_dma_done_task; ++ RTMP_NET_TASK_STRUCT tbtt_task; ++#ifdef RTMP_MAC_PCI ++ RTMP_NET_TASK_STRUCT fifo_statistic_full_task; ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ RTMP_NET_TASK_STRUCT null_frame_complete_task; ++ RTMP_NET_TASK_STRUCT rts_frame_complete_task; ++ RTMP_NET_TASK_STRUCT pspoll_frame_complete_task; ++#endif // RTMP_MAC_USB // ++ ++ unsigned long apd_pid; //802.1x daemon pid ++ INT ioctl_if_type; ++ INT ioctl_if; ++}; ++ ++typedef struct os_cookie * POS_COOKIE; + +-// +-// MACRO for debugging information +-// ++ ++ ++/*********************************************************************************** ++ * OS debugging and printing related definitions and data structure ++ ***********************************************************************************/ ++#define PRINT_MAC(addr) \ ++ addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] + + #ifdef DBG + extern ULONG RTDebugLevel; + + #define DBGPRINT_RAW(Level, Fmt) \ +-{ \ ++do{ \ + if (Level <= RTDebugLevel) \ + { \ + printk Fmt; \ + } \ +-} ++}while(0) + + #define DBGPRINT(Level, Fmt) DBGPRINT_RAW(Level, Fmt) + +@@ -370,55 +501,83 @@ extern ULONG RTDebugLevel; + #define DBGPRINT_ERR(Fmt) + #endif + ++#define ASSERT(x) + +-// +-// spin_lock enhanced for Nested spin lock +-// +-#define NdisAllocateSpinLock(__lock) \ +-{ \ +- spin_lock_init((spinlock_t *)(__lock)); \ +-} ++void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); + +-#define NdisFreeSpinLock(lock) \ +-{ \ +-} + ++/********************************************************************************************************* ++ The following code are not revised, temporary put it here. ++ *********************************************************************************************************/ + +-#define RTMP_SEM_LOCK(__lock) \ +-{ \ +- spin_lock_bh((spinlock_t *)(__lock)); \ +-} + +-#define RTMP_SEM_UNLOCK(__lock) \ +-{ \ +- spin_unlock_bh((spinlock_t *)(__lock)); \ +-} ++/*********************************************************************************** ++ * Device DMA Access related definitions and data structures. ++ **********************************************************************************/ ++#ifdef RTMP_MAC_PCI ++dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction); ++void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction); + +-// sample, use semaphore lock to replace IRQ lock, 2007/11/15 +-#define RTMP_IRQ_LOCK(__lock, __irqflags) \ +-{ \ +- __irqflags = 0; \ +- spin_lock_bh((spinlock_t *)(__lock)); \ +- pAd->irq_disabled |= 1; \ +-} ++#define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ ++ linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) + +-#define RTMP_IRQ_UNLOCK(__lock, __irqflag) \ +-{ \ +- pAd->irq_disabled &= 0; \ +- spin_unlock_bh((spinlock_t *)(__lock)); \ +-} ++#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) \ ++ linux_pci_unmap_single(_handle, _ptr, _size, _dir) + +-#define RTMP_INT_LOCK(__lock, __irqflags) \ +-{ \ +- spin_lock_irqsave((spinlock_t *)__lock, __irqflags); \ +-} ++#define PCI_ALLOC_CONSISTENT(_pci_dev, _size, _ptr) \ ++ pci_alloc_consistent(_pci_dev, _size, _ptr) + +-#define RTMP_INT_UNLOCK(__lock, __irqflag) \ +-{ \ +- spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \ +-} ++#define PCI_FREE_CONSISTENT(_pci_dev, _size, _virtual_addr, _physical_addr) \ ++ pci_free_consistent(_pci_dev, _size, _virtual_addr, _physical_addr) ++ ++#define DEV_ALLOC_SKB(_length) \ ++ dev_alloc_skb(_length) ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0 + +-#ifdef RT2860 ++#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) ++#endif // RTMP_MAC_USB // ++ ++/* ++ * ULONG ++ * RTMP_GetPhysicalAddressLow( ++ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ */ ++#define RTMP_GetPhysicalAddressLow(PhysicalAddress) (PhysicalAddress) ++ ++/* ++ * ULONG ++ * RTMP_GetPhysicalAddressHigh( ++ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ */ ++#define RTMP_GetPhysicalAddressHigh(PhysicalAddress) (0) ++ ++/* ++ * VOID ++ * RTMP_SetPhysicalAddressLow( ++ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, ++ * IN ULONG Value); ++ */ ++#define RTMP_SetPhysicalAddressLow(PhysicalAddress, Value) \ ++ PhysicalAddress = Value; ++ ++/* ++ * VOID ++ * RTMP_SetPhysicalAddressHigh( ++ * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, ++ * IN ULONG Value); ++ */ ++#define RTMP_SetPhysicalAddressHigh(PhysicalAddress, Value) ++ ++#define NdisMIndicateStatus(_w, _x, _y, _z) ++ ++ ++ ++/*********************************************************************************** ++ * Device Register I/O Access related definitions and data structures. ++ **********************************************************************************/ ++#ifdef RTMP_MAC_PCI + //Patch for ASIC turst read/write bug, needs to remove after metel fix + #define RTMP_IO_READ32(_A, _R, _pV) \ + { \ +@@ -430,11 +589,7 @@ extern ULONG RTDebugLevel; + else \ + *_pV = 0; \ + } +-#define RTMP_IO_FORCE_READ32(_A, _R, _pV) \ +-{ \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + (_R)))); \ +-} ++ + #define RTMP_IO_READ8(_A, _R, _pV) \ + { \ + (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +@@ -446,153 +601,92 @@ extern ULONG RTDebugLevel; + { \ + UINT Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writel(_V, (void *)((_A)->CSRBaseAddress + (_R))); \ ++ writel((_V), (void *)((_A)->CSRBaseAddress + (_R))); \ + } \ + } ++ ++ ++ ++#if defined(RALINK_2880) || defined(RALINK_3052) ++#define RTMP_IO_WRITE8(_A, _R, _V) \ ++{ \ ++ ULONG Val; \ ++ UCHAR _i; \ ++ _i = ((_R) & 0x3); \ ++ Val = readl((void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ ++ Val = Val & (~(0x000000ff << ((_i)*8))); \ ++ Val = Val | ((ULONG)(_V) << ((_i)*8)); \ ++ writel((Val), (void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ ++} ++#else + #define RTMP_IO_WRITE8(_A, _R, _V) \ + { \ + UINT Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writeb((_V), (PUCHAR)((_A)->CSRBaseAddress + (_R))); \ + } ++#endif // #if defined(BRCM_6358) || defined(RALINK_2880) // ++ + #define RTMP_IO_WRITE16(_A, _R, _V) \ + { \ + UINT Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ + } +-#endif /* RT2860 */ +-#ifdef RT2870 ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + //Patch for ASIC turst read/write bug, needs to remove after metel fix + #define RTMP_IO_READ32(_A, _R, _pV) \ +- RTUSBReadMACRegister(_A, _R, _pV) ++ RTUSBReadMACRegister((_A), (_R), (PUINT32) (_pV)) + + #define RTMP_IO_READ8(_A, _R, _pV) \ + { \ + } + + #define RTMP_IO_WRITE32(_A, _R, _V) \ +- RTUSBWriteMACRegister(_A, _R, _V) +- ++ RTUSBWriteMACRegister((_A), (_R), (UINT32) (_V)) + + #define RTMP_IO_WRITE8(_A, _R, _V) \ + { \ + USHORT _Val = _V; \ +- RTUSBSingleWrite(_A, _R, _Val); \ ++ RTUSBSingleWrite((_A), (_R), (USHORT) (_Val)); \ + } + +- + #define RTMP_IO_WRITE16(_A, _R, _V) \ + { \ +- RTUSBSingleWrite(_A, _R, _V); \ ++ RTUSBSingleWrite((_A), (_R), (USHORT) (_V)); \ + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + +-#ifndef wait_event_interruptible_timeout +-#define __wait_event_interruptible_timeout(wq, condition, ret) \ +-do { \ +- wait_queue_t __wait; \ +- init_waitqueue_entry(&__wait, current); \ +- add_wait_queue(&wq, &__wait); \ +- for (;;) { \ +- set_current_state(TASK_INTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- if (!signal_pending(current)) { \ +- ret = schedule_timeout(ret); \ +- if (!ret) \ +- break; \ +- continue; \ +- } \ +- ret = -ERESTARTSYS; \ +- break; \ +- } \ +- current->state = TASK_RUNNING; \ +- remove_wait_queue(&wq, &__wait); \ +-} while (0) ++/*********************************************************************************** ++ * Network Related data structure and marco definitions ++ ***********************************************************************************/ ++#define PKTSRC_NDIS 0x7f ++#define PKTSRC_DRIVER 0x0f + +-#define wait_event_interruptible_timeout(wq, condition, timeout) \ +-({ \ +- long __ret = timeout; \ +- if (!(condition)) \ +- __wait_event_interruptible_timeout(wq, condition, __ret); \ +- __ret; \ +-}) +-#endif +-#define ONE_TICK 1 +-#define OS_WAIT(_time) \ +-{ int _i; \ +- long _loop = ((_time)/(1000/OS_HZ)) > 0 ? ((_time)/(1000/OS_HZ)) : 1;\ +- wait_queue_head_t _wait; \ +- init_waitqueue_head(&_wait); \ +- for (_i=0; _i<(_loop); _i++) \ +- wait_event_interruptible_timeout(_wait, 0, ONE_TICK); } ++#define RTMP_OS_NETDEV_SET_PRIV(_pNetDev, _pPriv) ((_pNetDev)->ml_priv = (_pPriv)) ++#define RTMP_OS_NETDEV_GET_PRIV(_pNetDev) ((_pNetDev)->ml_priv) ++#define RTMP_OS_NETDEV_GET_DEVNAME(_pNetDev) ((_pNetDev)->name) ++#define RTMP_OS_NETDEV_GET_PHYADDR(_PNETDEV) ((_PNETDEV)->dev_addr) + ++#define RTMP_OS_NETDEV_START_QUEUE(_pNetDev) netif_start_queue((_pNetDev)) ++#define RTMP_OS_NETDEV_STOP_QUEUE(_pNetDev) netif_stop_queue((_pNetDev)) ++#define RTMP_OS_NETDEV_WAKE_QUEUE(_pNetDev) netif_wake_queue((_pNetDev)) ++#define RTMP_OS_NETDEV_CARRIER_OFF(_pNetDev) netif_carrier_off((_pNetDev)) + +-typedef void (*TIMER_FUNCTION)(unsigned long); ++#define QUEUE_ENTRY_TO_PACKET(pEntry) \ ++ (PNDIS_PACKET)(pEntry) + +-#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) ++#define PACKET_TO_QUEUE_ENTRY(pPacket) \ ++ (PQUEUE_ENTRY)(pPacket) + +-#define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE) +-#define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA) ++#define GET_SG_LIST_FROM_PACKET(_p, _sc) \ ++ rt_get_sg_list_from_packet(_p, _sc) + +-#ifdef RT2860 +-#define BUILD_TIMER_FUNCTION(_func) \ +-void linux_##_func(unsigned long data) \ +-{ \ +- PRALINK_TIMER_STRUCT pTimer = (PRALINK_TIMER_STRUCT) data; \ +- \ +- _func(NULL, (PVOID) pTimer->cookie, NULL, pTimer); \ +- if (pTimer->Repeat) \ +- RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ +-} +-#endif +-#ifdef RT2870 +-#define BUILD_TIMER_FUNCTION(_func) \ +-void linux_##_func(unsigned long data) \ +-{ \ +- PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \ +- RT2870_TIMER_ENTRY *_pQNode; \ +- RTMP_ADAPTER *_pAd; \ +- \ +- _pTimer->handle = _func; \ +- _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \ +- _pQNode = RT2870_TimerQ_Insert(_pAd, _pTimer); \ +- if ((_pQNode == NULL) && (_pAd->TimerQ.status & RT2870_THREAD_CAN_DO_INSERT)) \ +- RTMP_OS_Add_Timer(&_pTimer->TimerObj, HZ); \ ++#define RELEASE_NDIS_PACKET(_pAd, _pPacket, _Status) \ ++{ \ ++ RTMPFreeNdisPacket(_pAd, _pPacket); \ + } +-#endif // RT2870 // +- +- +-#define DECLARE_TIMER_FUNCTION(_func) \ +-void linux_##_func(unsigned long data) +- +-#define GET_TIMER_FUNCTION(_func) \ +- linux_##_func +- +-DECLARE_TIMER_FUNCTION(MlmePeriodicExec); +-DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); +-DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); +-DECLARE_TIMER_FUNCTION(APSDPeriodicExec); +-DECLARE_TIMER_FUNCTION(AsicRfTuningExec); +-#ifdef RT2870 +-DECLARE_TIMER_FUNCTION(BeaconUpdateExec); +-#endif // RT2870 // +- +-DECLARE_TIMER_FUNCTION(BeaconTimeout); +-DECLARE_TIMER_FUNCTION(ScanTimeout); +-DECLARE_TIMER_FUNCTION(AuthTimeout); +-DECLARE_TIMER_FUNCTION(AssocTimeout); +-DECLARE_TIMER_FUNCTION(ReassocTimeout); +-DECLARE_TIMER_FUNCTION(DisassocTimeout); +-DECLARE_TIMER_FUNCTION(LinkDownExec); +-DECLARE_TIMER_FUNCTION(StaQuickResponeForRateUpExec); +-DECLARE_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); +-DECLARE_TIMER_FUNCTION(PsPollWakeExec); +-DECLARE_TIMER_FUNCTION(RadioOnExec); +- +-void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); +- + + /* + * packet helper +@@ -604,12 +698,18 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + + #define GET_OS_PKT_DATAPTR(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->data) ++#define SET_OS_PKT_DATAPTR(_pkt, _dataPtr) \ ++ (RTPKT_TO_OSPKT(_pkt)->data) = (_dataPtr) + + #define GET_OS_PKT_LEN(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->len) ++#define SET_OS_PKT_LEN(_pkt, _len) \ ++ (RTPKT_TO_OSPKT(_pkt)->len) = (_len) + + #define GET_OS_PKT_DATATAIL(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->tail) ++#define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ ++ ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len)) + + #define GET_OS_PKT_HEAD(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->head) +@@ -619,6 +719,8 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + + #define GET_OS_PKT_NETDEV(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->dev) ++#define SET_OS_PKT_NETDEV(_pkt, _pNetDev) \ ++ (RTPKT_TO_OSPKT(_pkt)->dev) = (_pNetDev) + + #define GET_OS_PKT_TYPE(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)) +@@ -627,6 +729,8 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + (RTPKT_TO_OSPKT(_pkt)->next) + + ++#define OS_PKT_CLONED(_pkt) skb_cloned(RTPKT_TO_OSPKT(_pkt)) ++ + #define OS_NTOHS(_Val) \ + (ntohs(_Val)) + #define OS_HTONS(_Val) \ +@@ -636,27 +740,8 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + #define OS_HTONL(_Val) \ + (htonl(_Val)) + +-/* statistics counter */ +-#define STATS_INC_RX_PACKETS(_pAd, _dev) +-#define STATS_INC_TX_PACKETS(_pAd, _dev) +- +-#define STATS_INC_RX_BYTESS(_pAd, _dev, len) +-#define STATS_INC_TX_BYTESS(_pAd, _dev, len) +- +-#define STATS_INC_RX_ERRORS(_pAd, _dev) +-#define STATS_INC_TX_ERRORS(_pAd, _dev) +- +-#define STATS_INC_RX_DROPPED(_pAd, _dev) +-#define STATS_INC_TX_DROPPED(_pAd, _dev) +- +- + #define CB_OFF 10 + +- +-// check DDK NDIS_PACKET data structure and find out only MiniportReservedEx[0..7] can be used by our driver without +-// ambiguity. Fields after pPacket->MiniportReservedEx[8] may be used by other wrapper layer thus crashes the driver +-// +- + // User Priority + #define RTMP_SET_PACKET_UP(_p, _prio) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0] = _prio) + #define RTMP_GET_PACKET_UP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0]) +@@ -782,137 +867,38 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + #define RTMP_SET_PACKET_CLEAR_EAP_FRAME(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12] = _flg) + #define RTMP_GET_PACKET_CLEAR_EAP_FRAME(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12]) + +-#define RTMP_SET_PACKET_5VT(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22] = _flg) +-#define RTMP_GET_PACKET_5VT(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22]) +- +-#ifdef CONFIG_5VT_ENHANCE +-#define BRIDGE_TAG 0x35564252 // depends on 5VT define in br_input.c +-#endif +- + +-#define NDIS_SET_PACKET_STATUS(_p, _status) + ++/* use bit3 of cb[CB_OFF+16] */ + +-#define GET_SG_LIST_FROM_PACKET(_p, _sc) \ +- rt_get_sg_list_from_packet(_p, _sc) +- +-#define NdisMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) +-#define NdisZeroMemory(Destination, Length) memset(Destination, 0, Length) +-#define NdisFillMemory(Destination, Length, Fill) memset(Destination, Fill, Length) +-#define NdisEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) +-#define RTMPEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) +- +- +-#define RTMP_INC_REF(_A) 0 +-#define RTMP_DEC_REF(_A) 0 +-#define RTMP_GET_REF(_A) 0 +- +- +- +-/* +- * ULONG +- * RTMP_GetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- */ +-#define RTMP_GetPhysicalAddressLow(PhysicalAddress) (PhysicalAddress) +- +-/* +- * ULONG +- * RTMP_GetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- */ +-#define RTMP_GetPhysicalAddressHigh(PhysicalAddress) (0) +- +-/* +- * VOID +- * RTMP_SetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); +- */ +-#define RTMP_SetPhysicalAddressLow(PhysicalAddress, Value) \ +- PhysicalAddress = Value; +- +-/* +- * VOID +- * RTMP_SetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); +- */ +-#define RTMP_SetPhysicalAddressHigh(PhysicalAddress, Value) +- +- +-//CONTAINING_RECORD(pEntry, NDIS_PACKET, MiniportReservedEx); +-#define QUEUE_ENTRY_TO_PACKET(pEntry) \ +- (PNDIS_PACKET)(pEntry) +- +-#define PACKET_TO_QUEUE_ENTRY(pPacket) \ +- (PQUEUE_ENTRY)(pPacket) +- +- +-#ifndef CONTAINING_RECORD +-#define CONTAINING_RECORD(address, type, field) \ +-((type *)((PCHAR)(address) - offsetof(type, field))) +-#endif +- +- +-#define RELEASE_NDIS_PACKET(_pAd, _pPacket, _Status) \ +-{ \ +- RTMPFreeNdisPacket(_pAd, _pPacket); \ +-} +- +- +-#define SWITCH_PhyAB(_pAA, _pBB) \ +-{ \ +- ULONG AABasePaHigh; \ +- ULONG AABasePaLow; \ +- ULONG BBBasePaHigh; \ +- ULONG BBBasePaLow; \ +- BBBasePaHigh = RTMP_GetPhysicalAddressHigh(_pBB); \ +- BBBasePaLow = RTMP_GetPhysicalAddressLow(_pBB); \ +- AABasePaHigh = RTMP_GetPhysicalAddressHigh(_pAA); \ +- AABasePaLow = RTMP_GetPhysicalAddressLow(_pAA); \ +- RTMP_SetPhysicalAddressHigh(_pAA, BBBasePaHigh); \ +- RTMP_SetPhysicalAddressLow(_pAA, BBBasePaLow); \ +- RTMP_SetPhysicalAddressHigh(_pBB, AABasePaHigh); \ +- RTMP_SetPhysicalAddressLow(_pBB, AABasePaLow); \ +-} +- +- +-#define NdisWriteErrorLogEntry(_a, _b, _c, _d) +-#define NdisMAllocateMapRegisters(_a, _b, _c, _d, _e) NDIS_STATUS_SUCCESS +- ++#define RTMP_SET_PACKET_5VT(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22] = _flg) ++#define RTMP_GET_PACKET_5VT(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22]) + +-#define NdisAcquireSpinLock RTMP_SEM_LOCK +-#define NdisReleaseSpinLock RTMP_SEM_UNLOCK ++/* Max skb->cb = 48B = [CB_OFF+38] */ + +-static inline void NdisGetSystemUpTime(ULONG *time) +-{ +- *time = jiffies; +-} + +-//pPacket = CONTAINING_RECORD(pEntry, NDIS_PACKET, MiniportReservedEx); +-#define QUEUE_ENTRY_TO_PKT(pEntry) \ +- ((PNDIS_PACKET) (pEntry)) + ++/*********************************************************************************** ++ * Other function prototypes definitions ++ ***********************************************************************************/ ++void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); + int rt28xx_packet_xmit(struct sk_buff *skb); + ++#ifdef RTMP_MAC_PCI ++/* function declarations */ ++#define IRQ_HANDLE_TYPE irqreturn_t + ++IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); ++#endif // RTMP_MAC_PCI // + +-void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify); +- +-#ifdef RT2860 +-#if !defined(PCI_CAP_ID_EXP) +-#define PCI_CAP_ID_EXP 0x10 +-#endif ++INT rt28xx_sta_ioctl( ++ IN PNET_DEV net_dev, ++ IN OUT struct ifreq *rq, ++ IN INT cmd); + +-#if !defined(PCI_EXP_LNKCTL) +-#define PCI_EXP_LNKCTL 0x10 +-#endif ++extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char *buf); ++extern int ra_mtd_read(int num, loff_t from, size_t len, u_char *buf); + +-#if !defined(PCI_CLASS_BRIDGE_PCI) +-#define PCI_CLASS_BRIDGE_PCI 0x0604 +-#endif +- +-#define PCIBUS_INTEL_VENDOR 0x8086 +-#endif ++#define GET_PAD_FROM_NET_DEV(_pAd, _net_dev) (_pAd) = (PRTMP_ADAPTER)(_net_dev)->ml_priv; + ++#endif // __RT_LINUX_H__ // +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 22f37cf..89c67fc 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -33,20 +33,18 @@ + Revision History: + Who When What + -------- ---------- ---------------------------------------------- +- Sample Mar/21/07 Merge RT2870 and RT2860 drivers. + */ + + #include "rt_config.h" + +-#define FORTY_MHZ_INTOLERANT_INTERVAL (60*1000) // 1 min ++ + + /*---------------------------------------------------------------------*/ + /* Private Variables Used */ + /*---------------------------------------------------------------------*/ +-//static RALINK_TIMER_STRUCT PeriodicTimer; + +-char *mac = ""; // default 00:00:00:00:00:00 +-char *hostname = ""; // default CMPC ++PSTRING mac = ""; // default 00:00:00:00:00:00 ++PSTRING hostname = ""; // default CMPC + module_param (mac, charp, 0); + MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr"); + +@@ -54,31 +52,16 @@ MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr"); + /*---------------------------------------------------------------------*/ + /* Prototypes of Functions Used */ + /*---------------------------------------------------------------------*/ +-extern BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); +-extern void ba_reordering_resource_release(PRTMP_ADAPTER pAd); +-extern NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd); +- +-#ifdef RT2860 +-extern void init_thread_task(PRTMP_ADAPTER pAd); +-#endif + + // public function prototype +-INT __devinit rt28xx_probe(IN void *_dev_p, IN void *_dev_id_p, +- IN UINT argc, OUT PRTMP_ADAPTER *ppAd); ++int rt28xx_close(IN struct net_device *net_dev); ++int rt28xx_open(struct net_device *net_dev); + + // private function prototype +-static int rt28xx_init(IN struct net_device *net_dev); +-INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev); +- +-static void CfgInitHook(PRTMP_ADAPTER pAd); ++static INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev); + +-extern const struct iw_handler_def rt28xx_iw_handler_def; + +-// This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev); +- +-struct net_device_stats *RT28xx_get_ether_stats( ++static struct net_device_stats *RT28xx_get_ether_stats( + IN struct net_device *net_dev); + + /* +@@ -103,7 +86,9 @@ Note: + */ + int MainVirtualIF_close(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = net_dev->ml_priv; ++ RTMP_ADAPTER *pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd + if (pAd == NULL) +@@ -112,6 +97,40 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + netif_carrier_off(pAd->net_dev); + netif_stop_queue(pAd->net_dev); + ++ { ++ BOOLEAN Cancelled; ++ ++ if (INFRA_ON(pAd) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ { ++ MLME_DISASSOC_REQ_STRUCT DisReq; ++ MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ ++ if (MsgElem) ++ { ++ COPY_MAC_ADDR(DisReq.Addr, pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DEAUTH_STA_LEAVING; ++ ++ MsgElem->Machine = ASSOC_STATE_MACHINE; ++ MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; ++ MsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(MsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ ++ // Prevent to connect AP again in STAMlmePeriodicExec ++ pAd->MlmeAux.AutoReconnectSsidLen= 32; ++ NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); ++ ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; ++ MlmeDisassocReqAction(pAd, MsgElem); ++ kfree(MsgElem); ++ } ++ ++ RTMPusecDelay(1000); ++ } ++ ++ RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled); ++ } + + VIRTUAL_IF_DOWN(pAd); + +@@ -142,7 +161,9 @@ Note: + */ + int MainVirtualIF_open(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = net_dev->ml_priv; ++ RTMP_ADAPTER *pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd + if (pAd == NULL) +@@ -184,83 +205,46 @@ Note: + int rt28xx_close(IN PNET_DEV dev) + { + struct net_device * net_dev = (struct net_device *)dev; +- RTMP_ADAPTER *pAd = net_dev->ml_priv; +- BOOLEAN Cancelled = FALSE; ++ RTMP_ADAPTER *pAd = NULL; ++ BOOLEAN Cancelled; + UINT32 i = 0; +-#ifdef RT2870 +- DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup); ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++#ifdef RTMP_MAC_USB ++ DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); + DECLARE_WAITQUEUE(wait, current); + + //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); +-#endif // RT2870 // +- ++#endif // RTMP_MAC_USB // + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); + ++ Cancelled = FALSE; + // Sanity check for pAd + if (pAd == NULL) + return 0; // close ok + + { ++#ifdef RTMP_PCI_SUPPORT ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_CLOSE); ++#endif // RTMP_PCI_SUPPORT // ++ + // If dirver doesn't wake up firmware here, + // NICLoadFirmware will hang forever when interface is up again. +-#ifdef RT2860 +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) +-#endif +-#ifdef RT2870 + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +-#endif + { +-#ifdef RT2860 +- AsicForceWakeup(pAd, RTMP_HALT); +-#endif +-#ifdef RT2870 + AsicForceWakeup(pAd, TRUE); +-#endif + } + +- if (INFRA_ON(pAd) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- +- COPY_MAC_ADDR(DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DEAUTH_STA_LEAVING; +- +- MsgElem->Machine = ASSOC_STATE_MACHINE; +- MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(MsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- // Prevent to connect AP again in STAMlmePeriodicExec +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- MlmeDisassocReqAction(pAd, MsgElem); +- kfree(MsgElem); +- +- RTMPusecDelay(1000); +- } +- +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); +-#endif // RT2870 // +- +-#ifdef CCX_SUPPORT +- RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &Cancelled); +-#endif +- +- RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled); +- RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled); ++#endif // RTMP_MAC_USB // + + MlmeRadioOff(pAd); +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; +-#endif ++#endif // RTMP_MAC_PCI // + } + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +@@ -269,12 +253,12 @@ int rt28xx_close(IN PNET_DEV dev) + { + while (pAd->DeQueueRunning[i] == TRUE) + { +- printk("Waiting for TxQueue[%d] done..........\n", i); ++ DBGPRINT(RT_DEBUG_TRACE, ("Waiting for TxQueue[%d] done..........\n", i)); + RTMPusecDelay(1000); + } + } + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + // ensure there are no more active urbs. + add_wait_queue (&unlink_wakeup, &wait); + pAd->wait = &unlink_wakeup; +@@ -299,290 +283,89 @@ int rt28xx_close(IN PNET_DEV dev) + } + pAd->wait = NULL; + remove_wait_queue (&unlink_wakeup, &wait); +-#endif // RT2870 // +- +-#ifdef RT2870 +- // We need clear timerQ related structure before exits of the timer thread. +- RT2870_TimerQ_Exit(pAd); +- // Close kernel threads or tasklets +- RT28xxThreadTerminate(pAd); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + // Stop Mlme state machine + MlmeHalt(pAd); + +- // Close kernel threads or tasklets +- kill_thread_task(pAd); +- +- MacTableReset(pAd); ++ // Close net tasklets ++ RtmpNetTaskExit(pAd); + +- MeasureReqTabExit(pAd); +- TpcReqTabExit(pAd); +- +-#ifdef RT2860 +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) + { +- NICDisableInterrupt(pAd); ++ MacTableReset(pAd); + } + +- // Disable Rx, register value supposed will remain after reset +- NICIssueReset(pAd); + +- // Free IRQ +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- // Deregister interrupt function +- RT28XX_IRQ_RELEASE(net_dev) +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); +- } +-#endif +- +- // Free Ring or USB buffers +- RTMPFreeTxRxRingMemory(pAd); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- +- // Free BA reorder resource +- ba_reordering_resource_release(pAd); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP); +- +- return 0; // close ok +-} /* End of rt28xx_close */ +- +-static int rt28xx_init(IN struct net_device *net_dev) +-{ +-#ifdef RT2860 +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)net_dev->ml_priv; +-#endif +-#ifdef RT2870 +- PRTMP_ADAPTER pAd = net_dev->ml_priv; +-#endif +- UINT index; +- UCHAR TmpPhy; +- NDIS_STATUS Status; +- UINT32 MacCsr0 = 0; +- +- // Allocate BA Reordering memory +- ba_reordering_resource_init(pAd, MAX_REORDERING_MPDU_NUM); +- +- // Make sure MAC gets ready. +- index = 0; +- do +- { +- RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); +- pAd->MACVersion = MacCsr0; +- +- if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) +- break; +- +- RTMPusecDelay(10); +- } while (index++ < 100); ++ MeasureReqTabExit(pAd); ++ TpcReqTabExit(pAd); + +- DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); +-/*Iverson patch PCIE L1 issue */ + +- // Disable DMA +- RT28XXDMADisable(pAd); ++ // Close kernel threads ++ RtmpMgmtTaskExit(pAd); + +- // Load 8051 firmware +- Status = NICLoadFirmware(pAd); +- if (Status != NDIS_STATUS_SUCCESS) ++#ifdef RTMP_MAC_PCI + { +- DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", Status)); +- goto err1; +- } +- +- NICLoadRateSwitchingParams(pAd); ++ BOOLEAN brc; ++ // ULONG Value; + +- // Disable interrupts here which is as soon as possible +- // This statement should never be true. We might consider to remove it later +-#ifdef RT2860 + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) + { +- NICDisableInterrupt(pAd); ++ RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } +-#endif + +- Status = RTMPAllocTxRxRingMemory(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("RTMPAllocDMAMemory failed, Status[=0x%08x]\n", Status)); +- goto err1; +- } ++ // Receive packets to clear DMA index after disable interrupt. ++ //RTMPHandleRxDoneInterrupt(pAd); ++ // put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all ++ // register access before Radio off. + +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + +- // initialize MLME +- // +- +- Status = MlmeInit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) ++ brc=RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); ++ if (brc==FALSE) + { +- DBGPRINT_ERR(("MlmeInit failed, Status[=0x%08x]\n", Status)); +- goto err2; ++ DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); + } +- +- // Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default +- // +- UserCfgInit(pAd); +- +-#ifdef RT2870 +- // We need init timerQ related structure before create the timer thread. +- RT2870_TimerQ_Init(pAd); +-#endif // RT2870 // +- +- RT28XX_TASK_THREAD_INIT(pAd, Status); +- if (Status != NDIS_STATUS_SUCCESS) +- goto err1; +- +- CfgInitHook(pAd); +- +- NdisAllocateSpinLock(&pAd->MacTabLock); +- +- MeasureReqTabInit(pAd); +- TpcReqTabInit(pAd); +- +- // +- // Init the hardware, we need to init asic before read registry, otherwise mac register will be reset +- // +- Status = NICInitializeAdapter(pAd, TRUE); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", Status)); +- if (Status != NDIS_STATUS_SUCCESS) +- goto err3; +- } +- +- // Read parameters from Config File +- Status = RTMPReadParametersHook(pAd); +- +- printk("1. Phy Mode = %d\n", pAd->CommonCfg.PhyMode); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICReadRegParameters failed, Status[=0x%08x]\n",Status)); +- goto err4; + } + +-#ifdef RT2870 +- pAd->CommonCfg.bMultipleIRP = FALSE; +- +- if (pAd->CommonCfg.bMultipleIRP) +- pAd->CommonCfg.NumOfBulkInIRP = RX_RING_SIZE; +- else +- pAd->CommonCfg.NumOfBulkInIRP = 1; +-#endif // RT2870 // +- +- +- //Init Ba Capability parameters. +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- // UPdata to HT IE +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- +- printk("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode); +- +- // We should read EEPROM for all cases. rt2860b +- NICReadEEPROMParameters(pAd, mac); +- +- printk("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode); +- +- NICInitAsicFromEEPROM(pAd); //rt2860b + +- // Set PHY to appropriate mode +- TmpPhy = pAd->CommonCfg.PhyMode; +- pAd->CommonCfg.PhyMode = 0xff; +- RTMPSetPhyMode(pAd, TmpPhy); +- SetCommonHT(pAd); +- +- // No valid channels. +- if (pAd->ChannelListNum == 0) ++/* ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) + { +- printk("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n"); +- goto err4; ++ RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } + +- printk("MCS Set = %02x %02x %02x %02x %02x\n", pAd->CommonCfg.HtCapability.MCSSet[0], +- pAd->CommonCfg.HtCapability.MCSSet[1], pAd->CommonCfg.HtCapability.MCSSet[2], +- pAd->CommonCfg.HtCapability.MCSSet[3], pAd->CommonCfg.HtCapability.MCSSet[4]); +- +-#ifdef RT2870 +- //Init RT30xx RFRegisters after read RFIC type from EEPROM +- NICInitRT30xxRFRegisters(pAd); +-#endif // RT2870 // +- +- +- // +- // Initialize RF register to default value +- // +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +-#ifndef RT2870 +- // 8051 firmware require the signal during booting time. +- AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); +-#endif ++ // Disable Rx, register value supposed will remain after reset ++ NICIssueReset(pAd); ++*/ ++#endif // RTMP_MAC_PCI // + +- if (pAd && (Status != NDIS_STATUS_SUCCESS)) +- { +- // +- // Undo everything if it failed +- // ++ // Free IRQ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { ++#ifdef RTMP_MAC_PCI ++ // Deregister interrupt function ++ RtmpOSIRQRelease(net_dev); ++#endif // RTMP_MAC_PCI // + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + } +- } +- else if (pAd) +- { +- // Microsoft HCT require driver send a disconnect event after driver initialization. +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n")); +- +- +-#ifdef RT2870 +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); +- +- // +- // Support multiple BulkIn IRP, +- // the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1. +- // +- for(index=0; indexCommonCfg.NumOfBulkInIRP; index++) +- { +- RTUSBBulkReceive(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n" )); +- } +-#endif // RT2870 // +- }// end of else + ++ // Free Ring or USB buffers ++ RTMPFreeTxRxRingMemory(pAd); + +- DBGPRINT_S(Status, ("<==== RTMPInitialize, Status=%x\n", Status)); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + +- return TRUE; ++ // Free BA reorder resource ++ ba_reordering_resource_release(pAd); + + +-err4: +-err3: +- MlmeHalt(pAd); +-err2: +- RTMPFreeTxRxRingMemory(pAd); +-err1: +- os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool +- RT28XX_IRQ_RELEASE(net_dev); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP); + +- // shall not set ml_priv to NULL here because the ml_priv didn't been free yet. +- //net_dev->ml_priv = 0; ++/*+++Modify by woody to solve the bulk fail+++*/ ++ { ++ } + +- printk("!!! %s Initialized fail !!!\n", RT28xx_CHIP_NAME); +- return FALSE; +-} /* End of rt28xx_init */ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt28xx_close\n")); ++ return 0; // close ok ++} /* End of rt28xx_close */ + + + /* +@@ -603,10 +386,11 @@ Note: + int rt28xx_open(IN PNET_DEV dev) + { + struct net_device * net_dev = (struct net_device *)dev; +- PRTMP_ADAPTER pAd = net_dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + int retval = 0; +- POS_COOKIE pObj; ++ //POS_COOKIE pObj; + ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd + if (pAd == NULL) +@@ -616,37 +400,32 @@ int rt28xx_open(IN PNET_DEV dev) + return -1; + } + +- // Init +- pObj = (POS_COOKIE)pAd->OS_Cookie; ++#ifdef RTMP_PCI_SUPPORT ++ RTMPInitPCIeLinkCtrlValue(pAd); ++#endif // RTMP_PCI_SUPPORT // + +- // reset Adapter flags +- RTMP_CLEAR_FLAGS(pAd); ++ ++ if (net_dev->priv_flags == INT_MAIN) ++ { ++ if (pAd->OpMode == OPMODE_STA) ++ net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def; ++ } + + // Request interrupt service routine for PCI device + // register the interrupt routine with the os +- RT28XX_IRQ_REQUEST(net_dev); +- ++ RtmpOSIRQRequest(net_dev); + +- // Init BssTab & ChannelInfo tabbles for auto channel select. + ++ // Init IRQ parameters stored in pAd ++ RTMP_IRQ_INIT(pAd); + + // Chip & other init +- if (rt28xx_init(net_dev) == FALSE) ++ if (rt28xx_init(pAd, mac, hostname) == FALSE) + goto err; + +- NdisZeroMemory(pAd->StaCfg.dev_name, 16); +- NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name)); +- +- // Set up the Mac address +- NdisMoveMemory(net_dev->dev_addr, (void *) pAd->CurrentAddress, 6); +- +- // Init IRQ parameters +- RT28XX_IRQ_INIT(pAd); +- +- // Various AP function init + + // Enable Interrupt +- RT28XX_IRQ_ENABLE(pAd); ++ RTMP_IRQ_ENABLE(pAd); + + // Now Enable RxTx + RTMPEnableRxTx(pAd); +@@ -658,12 +437,26 @@ int rt28xx_open(IN PNET_DEV dev) + printk("0x1300 = %08x\n", reg); + } + +-#ifdef RT2860 +- RTMPInitPCIeLinkCtrlValue(pAd); +-#endif ++ { ++// u32 reg; ++// UINT8 byte; ++// u16 tmp; ++ ++// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); ++ ++// tmp = 0x0805; ++// reg = (reg & 0xffff0000) | tmp; ++// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); ++ ++ } ++ ++ + return (retval); + + err: ++//+++Add by shiang, move from rt28xx_init() to here. ++ RtmpOSIRQRelease(net_dev); ++//---Add by shiang, move from rt28xx_init() to here. + return (-1); + } /* End of rt28xx_open */ + +@@ -678,155 +471,33 @@ static const struct net_device_ops rt2860_netdev_ops = { + .ndo_start_xmit = rt28xx_send_packets, + }; + +-/* Must not be called for mdev and apdev */ +-static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd) ++PNET_DEV RtmpPhyNetDevInit( ++ IN RTMP_ADAPTER *pAd, ++ IN RTMP_OS_NETDEV_OP_HOOK *pNetDevHook) + { +- NDIS_STATUS Status; +- INT i=0; +- CHAR slot_name[IFNAMSIZ]; +- struct net_device *device; +- +- if (pAd->OpMode == OPMODE_STA) +- { +- dev->wireless_handlers = &rt28xx_iw_handler_def; +- } +- +- dev->priv_flags = INT_MAIN; +- dev->netdev_ops = &rt2860_netdev_ops; +- // find available device name +- for (i = 0; i < 8; i++) +- { +- sprintf(slot_name, "wlan%d", i); +- +- device = dev_get_by_name(dev_net(dev), slot_name); +- if (device != NULL) +- dev_put(device); ++ struct net_device *net_dev = NULL; ++// NDIS_STATUS Status; + +- if (device == NULL) +- break; +- } +- +- if(i == 8) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("No available slot name\n")); +- Status = NDIS_STATUS_FAILURE; +- } +- else +- { +- sprintf(dev->name, "wlan%d", i); +- Status = NDIS_STATUS_SUCCESS; +- } +- +- return Status; +- +-} +- +-/* +-======================================================================== +-Routine Description: +- Probe RT28XX chipset. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- _dev_id_p Point to the PCI or USB device ID +- +-Return Value: +- 0 Probe OK +- -ENODEV Probe Fail +- +-Note: +-======================================================================== +-*/ +-INT __devinit rt28xx_probe( +- IN void *_dev_p, +- IN void *_dev_id_p, +- IN UINT argc, +- OUT PRTMP_ADAPTER *ppAd) +-{ +- struct net_device *net_dev; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; +- INT status; +- PVOID handle; +-#ifdef RT2860 +- struct pci_dev *dev_p = (struct pci_dev *)_dev_p; +-#endif +-#ifdef RT2870 +- struct usb_interface *intf = (struct usb_interface *)_dev_p; +- struct usb_device *dev_p = interface_to_usbdev(intf); +- +- dev_p = usb_get_dev(dev_p); +-#endif // RT2870 // +- +- DBGPRINT(RT_DEBUG_TRACE, ("STA Driver version-%s\n", STA_DRIVER_VERSION)); +- +- net_dev = alloc_etherdev(sizeof(PRTMP_ADAPTER)); ++ net_dev = RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), INF_MAIN_DEV_NAME); + if (net_dev == NULL) + { +- printk("alloc_netdev failed\n"); +- +- goto err_out; ++ printk("RtmpPhyNetDevInit(): creation failed for main physical net device!\n"); ++ return NULL; + } + +- netif_stop_queue(net_dev); +- +-/* for supporting Network Manager */ +-/* Set the sysfs physical device reference for the network logical device +- * if set prior to registration will cause a symlink during initialization. +- */ +- SET_NETDEV_DEV(net_dev, &(dev_p->dev)); +- +- // Allocate RTMP_ADAPTER miniport adapter structure +- handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); +- if (handle == NULL) +- goto err_out_free_netdev;; +- RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p); +- +- status = RTMPAllocAdapterBlock(handle, &pAd); +- if (status != NDIS_STATUS_SUCCESS) +- goto err_out_free_netdev; ++ NdisZeroMemory((unsigned char *)pNetDevHook, sizeof(RTMP_OS_NETDEV_OP_HOOK)); ++ pNetDevHook->netdev_ops = &rt2860_netdev_ops; ++ pNetDevHook->priv_flags = INT_MAIN; ++ pNetDevHook->needProtcted = FALSE; + + net_dev->ml_priv = (PVOID)pAd; +- pAd->net_dev = net_dev; // must be before RT28XXNetDevInit() +- +- RT28XXNetDevInit(_dev_p, net_dev, pAd); +- +- pAd->StaCfg.OriDevType = net_dev->type; +- +- // Post config +- if (RT28XXProbePostConfig(_dev_p, pAd, 0) == FALSE) +- goto err_out_unmap; +- +- pAd->OpMode = OPMODE_STA; +- +- // sample move +- if (rt_ieee80211_if_setup(net_dev, pAd) != NDIS_STATUS_SUCCESS) +- goto err_out_unmap; +- +- // Register this device +- status = register_netdev(net_dev); +- if (status) +- goto err_out_unmap; +- +- // Set driver data +- RT28XX_DRVDATA_SET(_dev_p); +- +- *ppAd = pAd; +- return 0; // probe ok +- +- +- /* --------------------------- ERROR HANDLE --------------------------- */ +-err_out_unmap: +- RTMPFreeAdapter(pAd); +- RT28XX_UNMAP(); ++ pAd->net_dev = net_dev; + +-err_out_free_netdev: +- free_netdev(net_dev); ++ netif_stop_queue(net_dev); + +-err_out: +- RT28XX_PUT_DEVICE(dev_p); ++ return net_dev; + +- return -ENODEV; /* probe fail */ +-} /* End of rt28xx_probe */ ++} + + + /* +@@ -849,10 +520,14 @@ Note: + int rt28xx_packet_xmit(struct sk_buff *skb) + { + struct net_device *net_dev = skb->dev; +- PRTMP_ADAPTER pAd = net_dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + int status = NETDEV_TX_OK; + PNDIS_PACKET pPacket = (PNDIS_PACKET) skb; + ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ /* RT2870STA does this in RTMPSendPackets() */ ++ + { + // Drop send request since we are in monitor mode + if (MONITOR_ON(pAd)) +@@ -872,12 +547,6 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + } + + RTMP_SET_PACKET_5VT(pPacket, 0); +-#ifdef CONFIG_5VT_ENHANCE +- if (*(int*)(skb->cb) == BRIDGE_TAG) { +- RTMP_SET_PACKET_5VT(pPacket, 1); +- } +-#endif +- + STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1); + + status = NETDEV_TX_OK; +@@ -903,11 +572,14 @@ Return Value: + Note: + ======================================================================== + */ +-INT rt28xx_send_packets( ++static int rt28xx_send_packets( + IN struct sk_buff *skb_p, + IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = net_dev->ml_priv; ++ RTMP_ADAPTER *pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ + if (!(net_dev->flags & IFF_UP)) + { + RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE); +@@ -918,36 +590,35 @@ INT rt28xx_send_packets( + RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); + + return rt28xx_packet_xmit(skb_p); +- +-} /* End of MBSS_VirtualIF_PacketSend */ +- +- +- +- +-void CfgInitHook(PRTMP_ADAPTER pAd) +-{ +- pAd->bBroadComHT = TRUE; +-} /* End of CfgInitHook */ ++} + + + // This function will be called when query /proc + struct iw_statistics *rt28xx_get_wireless_stats( + IN struct net_device *net_dev) + { +- PRTMP_ADAPTER pAd = net_dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); + + DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n")); + + pAd->iw_stats.status = 0; // Status - device dependent for now + + // link quality ++ if (pAd->OpMode == OPMODE_STA) + pAd->iw_stats.qual.qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10); ++ + if(pAd->iw_stats.qual.qual > 100) + pAd->iw_stats.qual.qual = 100; + + if (pAd->OpMode == OPMODE_STA) +- pAd->iw_stats.qual.level = RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2); ++ { ++ pAd->iw_stats.qual.level = ++ RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, ++ pAd->StaCfg.RssiSample.LastRssi1, ++ pAd->StaCfg.RssiSample.LastRssi2); ++ } + + pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm) + +@@ -962,13 +633,12 @@ struct iw_statistics *rt28xx_get_wireless_stats( + + DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n")); + return &pAd->iw_stats; +-} /* End of rt28xx_get_wireless_stats */ +- ++} + + + void tbtt_tasklet(unsigned long data) + { +-#define MAX_TX_IN_TBTT (16) ++//#define MAX_TX_IN_TBTT (16) + + } + +@@ -988,13 +658,13 @@ void tbtt_tasklet(unsigned long data) + + ======================================================================== + */ +-struct net_device_stats *RT28xx_get_ether_stats( ++static struct net_device_stats *RT28xx_get_ether_stats( + IN struct net_device *net_dev) + { + RTMP_ADAPTER *pAd = NULL; + + if (net_dev) +- pAd = net_dev->ml_priv; ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); + + if (pAd) + { +@@ -1038,3 +708,55 @@ struct net_device_stats *RT28xx_get_ether_stats( + return NULL; + } + ++ ++BOOLEAN RtmpPhyNetDevExit( ++ IN RTMP_ADAPTER *pAd, ++ IN PNET_DEV net_dev) ++{ ++ ++ ++ ++ // Unregister network device ++ if (net_dev != NULL) ++ { ++ printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); ++ RtmpOSNetDevDetach(net_dev); ++ } ++ ++ return TRUE; ++ ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Allocate memory for adapter control block. ++ ++Arguments: ++ pAd Pointer to our adapter ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_FAILURE ++ NDIS_STATUS_RESOURCES ++ ++Note: ++======================================================================== ++*/ ++NDIS_STATUS AdapterBlockAllocateMemory( ++ IN PVOID handle, ++ OUT PVOID *ppAd) ++{ ++ ++ *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); ++ ++ if (*ppAd) ++ { ++ NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); ++ ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle; ++ return (NDIS_STATUS_SUCCESS); ++ } else { ++ return (NDIS_STATUS_FAILURE); ++ } ++} +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +new file mode 100644 +index 0000000..b24df06 +--- /dev/null ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -0,0 +1,877 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt_pci_rbus.c ++ ++ Abstract: ++ Create and register network interface. ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#include "rt_config.h" ++#include ++ ++IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); ++ ++static void rx_done_tasklet(unsigned long data); ++static void mgmt_dma_done_tasklet(unsigned long data); ++static void ac0_dma_done_tasklet(unsigned long data); ++static void ac1_dma_done_tasklet(unsigned long data); ++static void ac2_dma_done_tasklet(unsigned long data); ++static void ac3_dma_done_tasklet(unsigned long data); ++static void fifo_statistic_full_tasklet(unsigned long data); ++ ++ ++ ++/*---------------------------------------------------------------------*/ ++/* Symbol & Macro Definitions */ ++/*---------------------------------------------------------------------*/ ++#define RT2860_INT_RX_DLY (1<<0) // bit 0 ++#define RT2860_INT_TX_DLY (1<<1) // bit 1 ++#define RT2860_INT_RX_DONE (1<<2) // bit 2 ++#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 ++#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 ++#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 ++#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 ++#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 ++#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 ++ ++#define INT_RX RT2860_INT_RX_DONE ++ ++#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_MGMT_DLY RT2860_INT_MGMT_DONE ++ ++ ++/*************************************************************************** ++ * ++ * Interface-depended memory allocation/Free related procedures. ++ * Mainly for Hardware TxDesc/RxDesc/MgmtDesc, DMA Memory for TxData/RxData, etc., ++ * ++ **************************************************************************/ ++// Function for TxDesc Memory allocation. ++void RTMP_AllocateTxDescMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ ++} ++ ++ ++// Function for MgmtDesc Memory allocation. ++void RTMP_AllocateMgmtDescMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ ++} ++ ++ ++// Function for RxDesc Memory allocation. ++void RTMP_AllocateRxDescMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ ++} ++ ++ ++// Function for free allocated Desc Memory. ++void RTMP_FreeDescMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); ++} ++ ++ ++// Function for TxData DMA Memory allocation. ++void RTMP_AllocateFirstTxBuffer( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++} ++ ++ ++void RTMP_FreeFirstTxBuffer( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); ++} ++ ++ ++/* ++ * FUNCTION: Allocate a common buffer for DMA ++ * ARGUMENTS: ++ * AdapterHandle: AdapterHandle ++ * Length: Number of bytes to allocate ++ * Cached: Whether or not the memory can be cached ++ * VirtualAddress: Pointer to memory is returned here ++ * PhysicalAddress: Physical address corresponding to virtual address ++ */ ++void RTMP_AllocateSharedMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++} ++ ++ ++/* ++ * FUNCTION: Allocate a packet buffer for DMA ++ * ARGUMENTS: ++ * AdapterHandle: AdapterHandle ++ * Length: Number of bytes to allocate ++ * Cached: Whether or not the memory can be cached ++ * VirtualAddress: Pointer to memory is returned here ++ * PhysicalAddress: Physical address corresponding to virtual address ++ * Notes: ++ * Cached is ignored: always cached memory ++ */ ++PNDIS_PACKET RTMP_AllocateRxPacketBuffer( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID *VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++{ ++ struct sk_buff *pkt; ++ ++ pkt = dev_alloc_skb(Length); ++ ++ if (pkt == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ("can't allocate rx %ld size packet\n",Length)); ++ } ++ ++ if (pkt) { ++ RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); ++ *VirtualAddress = (PVOID) pkt->data; ++ *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE); ++ } else { ++ *VirtualAddress = (PVOID) NULL; ++ *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; ++ } ++ ++ return (PNDIS_PACKET) pkt; ++} ++ ++ ++VOID Invalid_Remaining_Packet( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG VirtualAddress) ++{ ++ NDIS_PHYSICAL_ADDRESS PhysicalAddress; ++ ++ PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE); ++} ++ ++ ++NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER *pAd) ++{ ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd); ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) ++{ ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ tasklet_kill(&pObj->rx_done_task); ++ tasklet_kill(&pObj->mgmt_dma_done_task); ++ tasklet_kill(&pObj->ac0_dma_done_task); ++ tasklet_kill(&pObj->ac1_dma_done_task); ++ tasklet_kill(&pObj->ac2_dma_done_task); ++ tasklet_kill(&pObj->ac3_dma_done_task); ++ tasklet_kill(&pObj->tbtt_task); ++ tasklet_kill(&pObj->fifo_statistic_full_task); ++} ++ ++ ++NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER *pAd) ++{ ++ ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Close kernel threads. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ NONE ++ ++Note: ++======================================================================== ++*/ ++VOID RtmpMgmtTaskExit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ ++ ++ return; ++} ++ ++ ++static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) ++{ ++ u32 regValue; ++ ++ pAd->int_disable_mask &= ~(mode); ++ regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); ++ //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ { ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable ++ } ++ //else ++ // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); ++ ++ if (regValue != 0) ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); ++} ++ ++ ++static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) ++{ ++ u32 regValue; ++ ++ pAd->int_disable_mask |= mode; ++ regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable ++ ++ if (regValue == 0) ++ { ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); ++ } ++} ++ ++ ++/*************************************************************************** ++ * ++ * tasklet related procedures. ++ * ++ **************************************************************************/ ++static void mgmt_dma_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++// printk("mgmt_dma_done_process\n"); ++ IntSource.word = 0; ++ IntSource.field.MgmtDmaDone = 1; ++ pAd->int_pending &= ~INT_MGMT_DLY; ++ ++ RTMPHandleMgmtRingDmaDoneInterrupt(pAd); ++ ++ // if you use RTMP_SEM_LOCK, sometimes kernel will hang up, no any ++ // bug report output ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid lose of interrupts ++ */ ++ if (pAd->int_pending & INT_MGMT_DLY) ++ { ++ tasklet_hi_schedule(&pObj->mgmt_dma_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable TxDataInt again */ ++ rt2860_int_enable(pAd, INT_MGMT_DLY); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++ ++static void rx_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ BOOLEAN bReschedule = 0; ++ POS_COOKIE pObj; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ pAd->int_pending &= ~(INT_RX); ++ bReschedule = STARxDoneInterruptHandle(pAd, 0); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid rotting packet ++ */ ++ if (pAd->int_pending & INT_RX || bReschedule) ++ { ++ tasklet_hi_schedule(&pObj->rx_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable RxINT again */ ++ rt2860_int_enable(pAd, INT_RX); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ ++} ++ ++ ++void fifo_statistic_full_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ POS_COOKIE pObj; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ pAd->int_pending &= ~(FifoStaFullInt); ++ NICUpdateFifoStaCounters(pAd); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid rotting packet ++ */ ++ if (pAd->int_pending & FifoStaFullInt) ++ { ++ tasklet_hi_schedule(&pObj->fifo_statistic_full_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable RxINT again */ ++ ++ rt2860_int_enable(pAd, FifoStaFullInt); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ ++} ++ ++static void ac3_dma_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ BOOLEAN bReschedule = 0; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++// printk("ac0_dma_done_process\n"); ++ IntSource.word = 0; ++ IntSource.field.Ac3DmaDone = 1; ++ pAd->int_pending &= ~INT_AC3_DLY; ++ ++ bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid lose of interrupts ++ */ ++ if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) ++ { ++ tasklet_hi_schedule(&pObj->ac3_dma_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable TxDataInt again */ ++ rt2860_int_enable(pAd, INT_AC3_DLY); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++ ++static void ac2_dma_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ BOOLEAN bReschedule = 0; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ IntSource.word = 0; ++ IntSource.field.Ac2DmaDone = 1; ++ pAd->int_pending &= ~INT_AC2_DLY; ++ ++ bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ ++ /* ++ * double check to avoid lose of interrupts ++ */ ++ if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) ++ { ++ tasklet_hi_schedule(&pObj->ac2_dma_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable TxDataInt again */ ++ rt2860_int_enable(pAd, INT_AC2_DLY); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++ ++static void ac1_dma_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ BOOLEAN bReschedule = 0; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++// printk("ac0_dma_done_process\n"); ++ IntSource.word = 0; ++ IntSource.field.Ac1DmaDone = 1; ++ pAd->int_pending &= ~INT_AC1_DLY; ++ ++ bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid lose of interrupts ++ */ ++ if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) ++ { ++ tasklet_hi_schedule(&pObj->ac1_dma_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable TxDataInt again */ ++ rt2860_int_enable(pAd, INT_AC1_DLY); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++ ++static void ac0_dma_done_tasklet(unsigned long data) ++{ ++ unsigned long flags; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ BOOLEAN bReschedule = 0; ++ ++ // Do nothing if the driver is starting halt state. ++ // This might happen when timer already been fired before cancel timer with mlmehalt ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ return; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++// printk("ac0_dma_done_process\n"); ++ IntSource.word = 0; ++ IntSource.field.Ac0DmaDone = 1; ++ pAd->int_pending &= ~INT_AC0_DLY; ++ ++// RTMPHandleMgmtRingDmaDoneInterrupt(pAd); ++ bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); ++ ++ RTMP_INT_LOCK(&pAd->irq_lock, flags); ++ /* ++ * double check to avoid lose of interrupts ++ */ ++ if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) ++ { ++ tasklet_hi_schedule(&pObj->ac0_dma_done_task); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++ return; ++ } ++ ++ /* enable TxDataInt again */ ++ rt2860_int_enable(pAd, INT_AC0_DLY); ++ RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++} ++ ++ ++ ++ ++/*************************************************************************** ++ * ++ * interrupt handler related procedures. ++ * ++ **************************************************************************/ ++int print_int_count; ++ ++IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) ++{ ++ struct net_device *net_dev = (struct net_device *) dev_instance; ++ PRTMP_ADAPTER pAd = NULL; ++ INT_SOURCE_CSR_STRUC IntSource; ++ POS_COOKIE pObj; ++ ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ ++ /* Note 03312008: we can not return here before ++ RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); ++ Or kernel will panic after ifconfig ra0 down sometimes */ ++ ++ ++ // ++ // Inital the Interrupt source. ++ // ++ IntSource.word = 0x00000000L; ++// McuIntSource.word = 0x00000000L; ++ ++ // ++ // Get the interrupt sources & saved to local variable ++ // ++ //RTMP_IO_READ32(pAd, where, &McuIntSource.word); ++ //RTMP_IO_WRITE32(pAd, , McuIntSource.word); ++ ++ // ++ // Flag fOP_STATUS_DOZE On, means ASIC put to sleep, elase means ASICK WakeUp ++ // And at the same time, clock maybe turned off that say there is no DMA service. ++ // when ASIC get to sleep. ++ // To prevent system hang on power saving. ++ // We need to check it before handle the INT_SOURCE_CSR, ASIC must be wake up. ++ // ++ // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. ++ // RT2860 => when ASIC is sleeping, MAC register can be read and written. ++// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ { ++ RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear ++ } ++// else ++// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); ++ ++// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); ++// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); ++// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", ++// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); ++ ++ // Do nothing if Reset in progress ++ if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |fRTMP_ADAPTER_HALT_IN_PROGRESS))) ++ { ++ return IRQ_HANDLED; ++ } ++ ++ // ++ // Handle interrupt, walk through all bits ++ // Should start from highest priority interrupt ++ // The priority can be adjust by altering processing if statement ++ // ++ ++#ifdef DBG ++ ++#endif ++ ++ ++ pAd->bPCIclkOff = FALSE; ++ ++ // If required spinlock, each interrupt service routine has to acquire ++ // and release itself. ++ // ++ ++ // Do nothing if NIC doesn't exist ++ if (IntSource.word == 0xffffffff) ++ { ++ RTMP_SET_FLAG(pAd, (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS)); ++ return IRQ_HANDLED; ++ } ++ ++ if (IntSource.word & TxCoherent) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, (">>>TxCoherent<<<\n")); ++ RTMPHandleRxCoherentInterrupt(pAd); ++ } ++ ++ if (IntSource.word & RxCoherent) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, (">>>RxCoherent<<<\n")); ++ RTMPHandleRxCoherentInterrupt(pAd); ++ } ++ ++ if (IntSource.word & FifoStaFullInt) ++ { ++ if ((pAd->int_disable_mask & FifoStaFullInt) == 0) ++ { ++ /* mask FifoStaFullInt */ ++ rt2860_int_disable(pAd, FifoStaFullInt); ++ tasklet_hi_schedule(&pObj->fifo_statistic_full_task); ++ } ++ pAd->int_pending |= FifoStaFullInt; ++ } ++ ++ if (IntSource.word & INT_MGMT_DLY) ++ { ++ if ((pAd->int_disable_mask & INT_MGMT_DLY) ==0 ) ++ { ++ rt2860_int_disable(pAd, INT_MGMT_DLY); ++ tasklet_hi_schedule(&pObj->mgmt_dma_done_task); ++ } ++ pAd->int_pending |= INT_MGMT_DLY ; ++ } ++ ++ if (IntSource.word & INT_RX) ++ { ++ if ((pAd->int_disable_mask & INT_RX) == 0) ++ { ++ ++ /* mask RxINT */ ++ rt2860_int_disable(pAd, INT_RX); ++ tasklet_hi_schedule(&pObj->rx_done_task); ++ } ++ pAd->int_pending |= INT_RX; ++ } ++ ++ if (IntSource.word & INT_AC3_DLY) ++ { ++ ++ if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) ++ { ++ /* mask TxDataInt */ ++ rt2860_int_disable(pAd, INT_AC3_DLY); ++ tasklet_hi_schedule(&pObj->ac3_dma_done_task); ++ } ++ pAd->int_pending |= INT_AC3_DLY; ++ } ++ ++ if (IntSource.word & INT_AC2_DLY) ++ { ++ ++ if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) ++ { ++ /* mask TxDataInt */ ++ rt2860_int_disable(pAd, INT_AC2_DLY); ++ tasklet_hi_schedule(&pObj->ac2_dma_done_task); ++ } ++ pAd->int_pending |= INT_AC2_DLY; ++ } ++ ++ if (IntSource.word & INT_AC1_DLY) ++ { ++ ++ pAd->int_pending |= INT_AC1_DLY; ++ ++ if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) ++ { ++ /* mask TxDataInt */ ++ rt2860_int_disable(pAd, INT_AC1_DLY); ++ tasklet_hi_schedule(&pObj->ac1_dma_done_task); ++ } ++ ++ } ++ ++ if (IntSource.word & INT_AC0_DLY) ++ { ++ ++/* ++ if (IntSource.word & 0x2) { ++ u32 reg; ++ RTMP_IO_READ32(pAd, DELAY_INT_CFG, ®); ++ printk("IntSource.word = %08x, DELAY_REG = %08x\n", IntSource.word, reg); ++ } ++*/ ++ pAd->int_pending |= INT_AC0_DLY; ++ ++ if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) ++ { ++ /* mask TxDataInt */ ++ rt2860_int_disable(pAd, INT_AC0_DLY); ++ tasklet_hi_schedule(&pObj->ac0_dma_done_task); ++ } ++ ++ } ++ ++ ++ if (IntSource.word & PreTBTTInt) ++ { ++ RTMPHandlePreTBTTInterrupt(pAd); ++ } ++ ++ if (IntSource.word & TBTTInt) ++ { ++ RTMPHandleTBTTInterrupt(pAd); ++ } ++ ++ { ++ if (IntSource.word & AutoWakeupInt) ++ RTMPHandleTwakeupInterrupt(pAd); ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * invaild or writeback cache ++ * and convert virtual address to physical address ++ */ ++dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction) ++{ ++ PRTMP_ADAPTER pAd; ++ POS_COOKIE pObj; ++ ++ /* ++ ------ Porting Information ------ ++ > For Tx Alloc: ++ mgmt packets => sd_idx = 0 ++ SwIdx: pAd->MgmtRing.TxCpuIdx ++ pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ ++ data packets => sd_idx = 1 ++ TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx ++ QueIdx: pTxBlk->QueIdx ++ pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa; ++ ++ > For Rx Alloc: ++ sd_idx = -1 ++ */ ++ ++ pAd = (PRTMP_ADAPTER)handle; ++ pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ if (sd_idx == 1) ++ { ++ PTX_BLK pTxBlk; ++ pTxBlk = (PTX_BLK)ptr; ++ return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, direction); ++ } ++ else ++ { ++ return pci_map_single(pObj->pci_dev, ptr, size, direction); ++ } ++ ++} ++ ++void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction) ++{ ++ PRTMP_ADAPTER pAd; ++ POS_COOKIE pObj; ++ ++ pAd=(PRTMP_ADAPTER)handle; ++ pObj = (POS_COOKIE)pAd->OS_Cookie; ++ ++ if (size > 0) ++ pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); ++ ++} +diff --git a/drivers/staging/rt2860/rt_profile.c b/drivers/staging/rt2860/rt_profile.c +index 3bc41f8..4355331 100644 +--- a/drivers/staging/rt2860/rt_profile.c ++++ b/drivers/staging/rt2860/rt_profile.c +@@ -23,1840 +23,73 @@ + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + ************************************************************************* +- */ + +-#include "rt_config.h" +- +-static void HTParametersHook( +- IN PRTMP_ADAPTER pAd, +- IN CHAR *pValueStr, +- IN CHAR *pInput); +- +-#define ETH_MAC_ADDR_STR_LEN 17 // in format of xx:xx:xx:xx:xx:xx +- +-// We assume the s1 is a sting, s2 is a memory space with 6 bytes. and content of s1 will be changed. +-BOOLEAN rtstrmactohex(char *s1, char *s2) +-{ +- int i = 0; +- char *ptokS = s1, *ptokE = s1; +- +- if (strlen(s1) != ETH_MAC_ADDR_STR_LEN) +- return FALSE; +- +- while((*ptokS) != '\0') +- { +- if((ptokE = strchr(ptokS, ':')) != NULL) +- *ptokE++ = '\0'; +- if ((strlen(ptokS) != 2) || (!isxdigit(*ptokS)) || (!isxdigit(*(ptokS+1)))) +- break; // fail +- AtoH(ptokS, &s2[i++], 1); +- ptokS = ptokE; +- if (i == 6) +- break; // parsing finished +- } +- +- return ( i == 6 ? TRUE : FALSE); +- +-} +- +- +-// we assume the s1 and s2 both are strings. +-BOOLEAN rtstrcasecmp(char *s1, char *s2) +-{ +- char *p1 = s1, *p2 = s2; +- +- if (strlen(s1) != strlen(s2)) +- return FALSE; +- +- while(*p1 != '\0') +- { +- if((*p1 != *p2) && ((*p1 ^ *p2) != 0x20)) +- return FALSE; +- p1++; +- p2++; +- } +- +- return TRUE; +-} +- +-// we assume the s1 (buffer) and s2 (key) both are strings. +-char * rtstrstruncasecmp(char * s1, char * s2) +-{ +- INT l1, l2, i; +- char temp1, temp2; +- +- l2 = strlen(s2); +- if (!l2) +- return (char *) s1; +- +- l1 = strlen(s1); +- +- while (l1 >= l2) +- { +- l1--; +- +- for(i=0; i= l2) +- { +- l1--; +- if (!memcmp(s1,s2,l2)) +- return (char *) s1; +- s1++; +- } +- +- return NULL; +-} +- +-/** +- * rstrtok - Split a string into tokens +- * @s: The string to be searched +- * @ct: The characters to search for +- * * WARNING: strtok is deprecated, use strsep instead. However strsep is not compatible with old architecture. +- */ +-char * __rstrtok; +-char * rstrtok(char * s,const char * ct) +-{ +- char *sbegin, *send; +- +- sbegin = s ? s : __rstrtok; +- if (!sbegin) +- { +- return NULL; +- } +- +- sbegin += strspn(sbegin,ct); +- if (*sbegin == '\0') +- { +- __rstrtok = NULL; +- return( NULL ); +- } +- +- send = strpbrk( sbegin, ct); +- if (send && *send != '\0') +- *send++ = '\0'; +- +- __rstrtok = send; +- +- return (sbegin); +-} +- +-/** +- * delimitcnt - return the count of a given delimiter in a given string. +- * @s: The string to be searched. +- * @ct: The delimiter to search for. +- * Notice : We suppose the delimiter is a single-char string(for example : ";"). +- */ +-INT delimitcnt(char * s,const char * ct) +-{ +- INT count = 0; +- /* point to the beginning of the line */ +- const char *token = s; +- +- for ( ;; ) +- { +- token = strpbrk(token, ct); /* search for delimiters */ +- +- if ( token == NULL ) +- { +- /* advanced to the terminating null character */ +- break; +- } +- /* skip the delimiter */ +- ++token; +- +- /* +- * Print the found text: use len with %.*s to specify field width. +- */ +- +- /* accumulate delimiter count */ +- ++count; +- } +- return count; +-} ++ Module Name: ++ rt_profile.c + +-/* +- * converts the Internet host address from the standard numbers-and-dots notation +- * into binary data. +- * returns nonzero if the address is valid, zero if not. +- */ +-int rtinet_aton(const char *cp, unsigned int *addr) +-{ +- unsigned int val; +- int base, n; +- char c; +- unsigned int parts[4]; +- unsigned int *pp = parts; ++ Abstract: + +- for (;;) +- { +- /* +- * Collect number up to ``.''. +- * Values are specified as for C: +- * 0x=hex, 0=octal, other=decimal. +- */ +- val = 0; +- base = 10; +- if (*cp == '0') +- { +- if (*++cp == 'x' || *cp == 'X') +- base = 16, cp++; +- else +- base = 8; +- } +- while ((c = *cp) != '\0') +- { +- if (isdigit((unsigned char) c)) +- { +- val = (val * base) + (c - '0'); +- cp++; +- continue; +- } +- if (base == 16 && isxdigit((unsigned char) c)) +- { +- val = (val << 4) + +- (c + 10 - (islower((unsigned char) c) ? 'a' : 'A')); +- cp++; +- continue; +- } +- break; +- } +- if (*cp == '.') +- { +- /* +- * Internet format: a.b.c.d a.b.c (with c treated as 16-bits) +- * a.b (with b treated as 24 bits) +- */ +- if (pp >= parts + 3 || val > 0xff) +- return 0; +- *pp++ = val, cp++; +- } +- else +- break; +- } +- +- /* +- * Check for trailing junk. ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- + */ +- while (*cp) +- if (!isspace((unsigned char) *cp++)) +- return 0; +- +- /* +- * Concoct the address according to the number of parts specified. +- */ +- n = pp - parts + 1; +- switch (n) +- { +- +- case 1: /* a -- 32 bits */ +- break; +- +- case 2: /* a.b -- 8.24 bits */ +- if (val > 0xffffff) +- return 0; +- val |= parts[0] << 24; +- break; +- +- case 3: /* a.b.c -- 8.8.16 bits */ +- if (val > 0xffff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16); +- break; +- +- case 4: /* a.b.c.d -- 8.8.8.8 bits */ +- if (val > 0xff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); +- break; +- } +- +- *addr = htonl(val); +- return 1; +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Find key section for Get key parameter. +- +- Arguments: +- buffer Pointer to the buffer to start find the key section +- section the key of the secion to be find +- +- Return Value: +- NULL Fail +- Others Success +- ======================================================================== +-*/ +-PUCHAR RTMPFindSection( +- IN PCHAR buffer) +-{ +- CHAR temp_buf[32]; +- PUCHAR ptr; +- +- strcpy(temp_buf, "Default"); +- +- if((ptr = rtstrstr(buffer, temp_buf)) != NULL) +- return (ptr+strlen("\n")); +- else +- return NULL; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get key parameter. + +- Arguments: +- key Pointer to key string +- dest Pointer to destination +- destsize The datasize of the destination +- buffer Pointer to the buffer to start find the key +- +- Return Value: +- TRUE Success +- FALSE Fail +- +- Note: +- This routine get the value with the matched key (case case-sensitive) +- ======================================================================== +-*/ +-INT RTMPGetKeyParameter( +- IN PCHAR key, +- OUT PCHAR dest, +- IN INT destsize, +- IN PCHAR buffer) +-{ +- UCHAR *temp_buf1 = NULL; +- UCHAR *temp_buf2 = NULL; +- CHAR *start_ptr; +- CHAR *end_ptr; +- CHAR *ptr; +- CHAR *offset = 0; +- INT len; +- +- //temp_buf1 = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); +- os_alloc_mem(NULL, &temp_buf1, MAX_PARAM_BUFFER_SIZE); +- +- if(temp_buf1 == NULL) +- return (FALSE); +- +- //temp_buf2 = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); +- os_alloc_mem(NULL, &temp_buf2, MAX_PARAM_BUFFER_SIZE); +- if(temp_buf2 == NULL) +- { +- os_free_mem(NULL, temp_buf1); +- return (FALSE); +- } +- +- //find section +- if((offset = RTMPFindSection(buffer)) == NULL) +- { +- os_free_mem(NULL, temp_buf1); +- os_free_mem(NULL, temp_buf2); +- return (FALSE); +- } +- +- strcpy(temp_buf1, "\n"); +- strcat(temp_buf1, key); +- strcat(temp_buf1, "="); +- +- //search key +- if((start_ptr=rtstrstr(offset, temp_buf1))==NULL) +- { +- os_free_mem(NULL, temp_buf1); +- os_free_mem(NULL, temp_buf2); +- return (FALSE); +- } +- +- start_ptr+=strlen("\n"); +- if((end_ptr=rtstrstr(start_ptr, "\n"))==NULL) +- end_ptr=start_ptr+strlen(start_ptr); +- +- if (end_ptr 0) + { +- os_free_mem(NULL, temp_buf1); +- os_free_mem(NULL, temp_buf2); +- return (FALSE); ++ RTMPSetProfileParameters(pAd, buffer); ++ retval = NDIS_STATUS_SUCCESS; + } +- +- *end_offset = end_ptr - buffer; +- +- NdisMoveMemory(temp_buf2, start_ptr, end_ptr-start_ptr); +- temp_buf2[end_ptr-start_ptr]='\0'; +- len = strlen(temp_buf2); +- strcpy(temp_buf1, temp_buf2); +- if((start_ptr=rtstrstr(temp_buf1, "=")) == NULL) +- { +- os_free_mem(NULL, temp_buf1); +- os_free_mem(NULL, temp_buf2); +- return (FALSE); +- } +- +- strcpy(temp_buf2, start_ptr+1); +- ptr = temp_buf2; +- //trim space or tab +- while(*ptr != 0x00) +- { +- if((bTrimSpace && (*ptr == ' ')) || (*ptr == '\t') ) +- ptr++; +- else +- break; +- } +- +- len = strlen(ptr); +- memset(dest, 0x00, destsize); +- strncpy(dest, ptr, len >= destsize ? destsize: len); +- +- os_free_mem(NULL, temp_buf1); +- os_free_mem(NULL, temp_buf2); +- return TRUE; +-} +- +- +-static int rtmp_parse_key_buffer_from_file(IN PRTMP_ADAPTER pAd,IN char *buffer,IN ULONG KeyType,IN INT BSSIdx,IN INT KeyIdx) +-{ +- PUCHAR keybuff; +- INT i = BSSIdx, idx = KeyIdx; +- ULONG KeyLen; +- UCHAR CipherAlg = CIPHER_WEP64; +- +- keybuff = buffer; +- KeyLen = strlen(keybuff); +- +- if (KeyType == 1) +- {//Ascii +- if( (KeyLen == 5) || (KeyLen == 13)) +- { +- pAd->SharedKey[i][idx].KeyLen = KeyLen; +- NdisMoveMemory(pAd->SharedKey[i][idx].Key, keybuff, KeyLen); +- if (KeyLen == 5) +- CipherAlg = CIPHER_WEP64; +- else +- CipherAlg = CIPHER_WEP128; +- pAd->SharedKey[i][idx].CipherAlg = CipherAlg; +- +- DBGPRINT(RT_DEBUG_TRACE, ("I/F(wlan%d) Key%dStr=%s and type=%s\n", i, idx+1, keybuff, (KeyType == 0) ? "Hex":"Ascii")); +- return 1; +- } +- else +- {//Invalid key length +- DBGPRINT(RT_DEBUG_ERROR, ("Key%dStr is Invalid key length! KeyLen = %ld!\n", idx+1, KeyLen)); +- return 0; +- } +- } +- else +- {//Hex type +- if( (KeyLen == 10) || (KeyLen == 26)) +- { +- pAd->SharedKey[i][idx].KeyLen = KeyLen / 2; +- AtoH(keybuff, pAd->SharedKey[i][idx].Key, KeyLen / 2); +- if (KeyLen == 10) +- CipherAlg = CIPHER_WEP64; +- else +- CipherAlg = CIPHER_WEP128; +- pAd->SharedKey[i][idx].CipherAlg = CipherAlg; +- +- DBGPRINT(RT_DEBUG_TRACE, ("I/F(wlan%d) Key%dStr=%s and type=%s\n", i, idx+1, keybuff, (KeyType == 0) ? "Hex":"Ascii")); +- return 1; +- } +- else +- {//Invalid key length +- DBGPRINT(RT_DEBUG_ERROR, ("I/F(wlan%d) Key%dStr is Invalid key length! KeyLen = %ld!\n", i, idx+1, KeyLen)); +- return 0; +- } +- } +-} +-static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer) +-{ +- char tok_str[16]; +- PUCHAR macptr; +- INT i = 0, idx; +- ULONG KeyType[MAX_MBSSID_NUM]; +- ULONG KeyIdx; +- +- NdisZeroMemory(KeyType, MAX_MBSSID_NUM); +- +- //DefaultKeyID +- if(RTMPGetKeyParameter("DefaultKeyID", tmpbuf, 25, buffer)) +- { +- { +- KeyIdx = simple_strtol(tmpbuf, 0, 10); +- if((KeyIdx >= 1 ) && (KeyIdx <= 4)) +- pAd->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1); +- else +- pAd->StaCfg.DefaultKeyId = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyID(0~3)=%d\n", pAd->StaCfg.DefaultKeyId)); +- } +- } +- +- +- for (idx = 0; idx < 4; idx++) +- { +- sprintf(tok_str, "Key%dType", idx + 1); +- //Key1Type +- if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- KeyType[i] = simple_strtol(macptr, 0, 10); +- } +- +- { +- sprintf(tok_str, "Key%dStr", idx + 1); +- if (RTMPGetCriticalParameter(tok_str, tmpbuf, 128, buffer)) +- { +- rtmp_parse_key_buffer_from_file(pAd, tmpbuf, KeyType[BSS0], BSS0, idx); +- } +- } +- } +- } +-} +- +-static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer) +-{ +- PUCHAR macptr; +- INT i=0; +- BOOLEAN bWmmEnable = FALSE; +- +- //WmmCapable +- if(RTMPGetKeyParameter("WmmCapable", tmpbuf, 32, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- { +- pAd->CommonCfg.bWmmCapable = TRUE; +- bWmmEnable = TRUE; +- } +- else //Disable +- { +- pAd->CommonCfg.bWmmCapable = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("WmmCapable=%d\n", pAd->CommonCfg.bWmmCapable)); +- } +- +- //AckPolicy for AC_BK, AC_BE, AC_VI, AC_VO +- if(RTMPGetKeyParameter("AckPolicy", tmpbuf, 32, buffer)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- pAd->CommonCfg.AckPolicy[i] = (UCHAR)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AckPolicy[%d]=%d\n", i, pAd->CommonCfg.AckPolicy[i])); +- } +- } +- +- if (bWmmEnable) +- { +- //APSDCapable +- if(RTMPGetKeyParameter("APSDCapable", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAPSDCapable = TRUE; + else +- pAd->CommonCfg.bAPSDCapable = FALSE; ++ DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); + +- DBGPRINT(RT_DEBUG_TRACE, ("APSDCapable=%d\n", pAd->CommonCfg.bAPSDCapable)); +- } +- +- //APSDAC for AC_BE, AC_BK, AC_VI, AC_VO +- if(RTMPGetKeyParameter("APSDAC", tmpbuf, 32, buffer)) ++ retval = RtmpOSFileClose(srcf); ++ if ( retval != 0) + { +- BOOLEAN apsd_ac[4]; +- +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- apsd_ac[i] = (BOOLEAN)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("APSDAC%d %d\n", i, apsd_ac[i])); +- } +- +- pAd->CommonCfg.bAPSDAC_BE = apsd_ac[0]; +- pAd->CommonCfg.bAPSDAC_BK = apsd_ac[1]; +- pAd->CommonCfg.bAPSDAC_VI = apsd_ac[2]; +- pAd->CommonCfg.bAPSDAC_VO = apsd_ac[3]; ++ retval = NDIS_STATUS_FAILURE; ++ DBGPRINT(RT_DEBUG_ERROR, ("Close file \"%s\" failed(errCode=%d)!\n", src, retval)); + } + } + +-} +- +-NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd) +-{ +- PUCHAR src = NULL; +- struct file *srcf; +- INT retval; +- mm_segment_t orgfs; +- CHAR *buffer; +- CHAR *tmpbuf; +- ULONG RtsThresh; +- ULONG FragThresh; +- UCHAR keyMaterial[40]; +- +- PUCHAR macptr; +- INT i = 0; +- +- buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(buffer == NULL) +- return NDIS_STATUS_FAILURE; +- +- tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(tmpbuf == NULL) +- { +- kfree(buffer); +- return NDIS_STATUS_FAILURE; +- } +- +- src = STA_PROFILE_PATH; +- +- orgfs = get_fs(); +- set_fs(KERNEL_DS); +- +- if (src && *src) +- { +- srcf = filp_open(src, O_RDONLY, 0); +- if (IS_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- } +- else +- { +- // The object must have a read method +- if (srcf->f_op && srcf->f_op->read) +- { +- memset(buffer, 0x00, MAX_INI_BUFFER_SIZE); +- retval=srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos); +- if (retval < 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Read %s error %d\n", src, -retval)); +- } +- else +- { +- // set file parameter to portcfg +- //CountryRegion +- if(RTMPGetKeyParameter("CountryRegion", tmpbuf, 25, buffer)) +- { +- pAd->CommonCfg.CountryRegion = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegion=%d\n", pAd->CommonCfg.CountryRegion)); +- } +- //CountryRegionABand +- if(RTMPGetKeyParameter("CountryRegionABand", tmpbuf, 25, buffer)) +- { +- pAd->CommonCfg.CountryRegionForABand= (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); +- } +- //CountryCode +- if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, buffer)) +- { +- NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2); +- +- if (strlen(pAd->CommonCfg.CountryCode) != 0) +- { +- pAd->CommonCfg.bCountryFlag = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("CountryCode=%s\n", pAd->CommonCfg.CountryCode)); +- } +- //ChannelGeography +- if(RTMPGetKeyParameter("ChannelGeography", tmpbuf, 25, buffer)) +- { +- UCHAR Geography = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- if (Geography <= BOTH) +- { +- pAd->CommonCfg.Geography = Geography; +- pAd->CommonCfg.CountryCode[2] = +- (pAd->CommonCfg.Geography == BOTH) ? ' ' : ((pAd->CommonCfg.Geography == IDOR) ? 'I' : 'O'); +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelGeography=%d\n", pAd->CommonCfg.Geography)); +- } +- } +- else +- { +- pAd->CommonCfg.Geography = BOTH; +- pAd->CommonCfg.CountryCode[2] = ' '; +- } +- +- { +- //SSID +- if (RTMPGetCriticalParameter("SSID", tmpbuf, 256, buffer)) +- { +- if (strlen(tmpbuf) <= 32) +- { +- pAd->CommonCfg.SsidLen = (UCHAR) strlen(tmpbuf); +- NdisZeroMemory(pAd->CommonCfg.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->CommonCfg.Ssid, tmpbuf, pAd->CommonCfg.SsidLen); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, tmpbuf, pAd->MlmeAux.AutoReconnectSsidLen); +- pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, tmpbuf, pAd->MlmeAux.SsidLen); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(SSID=%s)\n", __func__, tmpbuf)); +- } +- } +- } +- +- { +- //NetworkType +- if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, buffer)) +- { +- pAd->bConfigChanged = TRUE; +- if (strcmp(tmpbuf, "Adhoc") == 0) +- pAd->StaCfg.BssType = BSS_ADHOC; +- else //Default Infrastructure mode +- pAd->StaCfg.BssType = BSS_INFRA; +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAd->StaCfg.WpaState = SS_NOTUSE; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __func__, pAd->StaCfg.BssType)); +- } +- } +- +- //Channel +- if(RTMPGetKeyParameter("Channel", tmpbuf, 10, buffer)) +- { +- pAd->CommonCfg.Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("Channel=%d\n", pAd->CommonCfg.Channel)); +- } +- //WirelessMode +- if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, buffer)) +- { +- int value = 0, maxPhyMode = PHY_11G; +- +- maxPhyMode = PHY_11N_5G; +- +- value = simple_strtol(tmpbuf, 0, 10); +- +- if (value <= maxPhyMode) +- { +- pAd->CommonCfg.PhyMode = value; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode)); +- } +- //BasicRate +- if(RTMPGetKeyParameter("BasicRate", tmpbuf, 10, buffer)) +- { +- pAd->CommonCfg.BasicRateBitmap = (ULONG) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BasicRate=%ld\n", pAd->CommonCfg.BasicRateBitmap)); +- } +- //BeaconPeriod +- if(RTMPGetKeyParameter("BeaconPeriod", tmpbuf, 10, buffer)) +- { +- pAd->CommonCfg.BeaconPeriod = (USHORT) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconPeriod=%d\n", pAd->CommonCfg.BeaconPeriod)); +- } +- //TxPower +- if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, buffer)) +- { +- pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10); +- +- pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage; +- +- DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage)); +- } +- //BGProtection +- if(RTMPGetKeyParameter("BGProtection", tmpbuf, 10, buffer)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //Always On +- pAd->CommonCfg.UseBGProtection = 1; +- break; +- case 2: //Always OFF +- pAd->CommonCfg.UseBGProtection = 2; +- break; +- case 0: //AUTO +- default: +- pAd->CommonCfg.UseBGProtection = 0; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("BGProtection=%ld\n", pAd->CommonCfg.UseBGProtection)); +- } +- //OLBCDetection +- if(RTMPGetKeyParameter("DisableOLBC", tmpbuf, 10, buffer)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //disable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 1; +- break; +- case 0: //enable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 0; +- break; +- default: +- pAd->CommonCfg.DisableOLBCDetect= 0; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("OLBCDetection=%ld\n", pAd->CommonCfg.DisableOLBCDetect)); +- } +- //TxPreamble +- if(RTMPGetKeyParameter("TxPreamble", tmpbuf, 10, buffer)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case Rt802_11PreambleShort: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleShort; +- break; +- case Rt802_11PreambleLong: +- default: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleLong; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("TxPreamble=%ld\n", pAd->CommonCfg.TxPreamble)); +- } +- //RTSThreshold +- if(RTMPGetKeyParameter("RTSThreshold", tmpbuf, 10, buffer)) +- { +- RtsThresh = simple_strtol(tmpbuf, 0, 10); +- if( (RtsThresh >= 1) && (RtsThresh <= MAX_RTS_THRESHOLD) ) +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +- else +- pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTSThreshold=%d\n", pAd->CommonCfg.RtsThreshold)); +- } +- //FragThreshold +- if(RTMPGetKeyParameter("FragThreshold", tmpbuf, 10, buffer)) +- { +- FragThresh = simple_strtol(tmpbuf, 0, 10); +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { //illegal FragThresh so we set it to default +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- } +- else if (FragThresh % 2 == 1) +- { +- // The length of each fragment shall always be an even number of octets, except for the last fragment +- // of an MSDU or MMPDU, which may be either an even or an odd number of octets. +- pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); +- } +- else +- { +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- //pAd->CommonCfg.AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; +- DBGPRINT(RT_DEBUG_TRACE, ("FragThreshold=%d\n", pAd->CommonCfg.FragmentThreshold)); +- } +- //TxBurst +- if(RTMPGetKeyParameter("TxBurst", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bEnableTxBurst = TRUE; +- else //Disable +- pAd->CommonCfg.bEnableTxBurst = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("TxBurst=%d\n", pAd->CommonCfg.bEnableTxBurst)); +- } +- +-#ifdef AGGREGATION_SUPPORT +- //PktAggregate +- if(RTMPGetKeyParameter("PktAggregate", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAggregationCapable = TRUE; +- else //Disable +- pAd->CommonCfg.bAggregationCapable = FALSE; +-#ifdef PIGGYBACK_SUPPORT +- pAd->CommonCfg.bPiggyBackCapable = pAd->CommonCfg.bAggregationCapable; +-#endif // PIGGYBACK_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("PktAggregate=%d\n", pAd->CommonCfg.bAggregationCapable)); +- } +-#else +- pAd->CommonCfg.bAggregationCapable = FALSE; +- pAd->CommonCfg.bPiggyBackCapable = FALSE; +-#endif // AGGREGATION_SUPPORT // +- +- // WmmCapable +- rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, buffer); +- +- //ShortSlot +- if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bUseShortSlotTime = TRUE; +- else //Disable +- pAd->CommonCfg.bUseShortSlotTime = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ShortSlot=%d\n", pAd->CommonCfg.bUseShortSlotTime)); +- } +- //IEEE80211H +- if(RTMPGetKeyParameter("IEEE80211H", tmpbuf, 10, buffer)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- if(simple_strtol(macptr, 0, 10) != 0) //Enable +- pAd->CommonCfg.bIEEE80211H = TRUE; +- else //Disable +- pAd->CommonCfg.bIEEE80211H = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IEEE80211H=%d\n", pAd->CommonCfg.bIEEE80211H)); +- } +- } +- //CSPeriod +- if(RTMPGetKeyParameter("CSPeriod", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.CSPeriod = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.RadarDetect.CSPeriod = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CSPeriod=%d\n", pAd->CommonCfg.RadarDetect.CSPeriod)); +- } +- +- //RDRegion +- if(RTMPGetKeyParameter("RDRegion", tmpbuf, 128, buffer)) +- { +- if ((strncmp(tmpbuf, "JAP_W53", 7) == 0) || (strncmp(tmpbuf, "jap_w53", 7) == 0)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = JAP_W53; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 15; +- } +- else if ((strncmp(tmpbuf, "JAP_W56", 7) == 0) || (strncmp(tmpbuf, "jap_w56", 7) == 0)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = JAP_W56; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- else if ((strncmp(tmpbuf, "JAP", 3) == 0) || (strncmp(tmpbuf, "jap", 3) == 0)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = JAP; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 5; +- } +- else if ((strncmp(tmpbuf, "FCC", 3) == 0) || (strncmp(tmpbuf, "fcc", 3) == 0)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = FCC; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 5; +- } +- else if ((strncmp(tmpbuf, "CE", 2) == 0) || (strncmp(tmpbuf, "ce", 2) == 0)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = CE; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- else +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = CE; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("RDRegion=%d\n", pAd->CommonCfg.RadarDetect.RDDurRegion)); +- } +- else +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = CE; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- +- //WirelessEvent +- if(RTMPGetKeyParameter("WirelessEvent", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWirelessEvent = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWirelessEvent = 0; // disable +- DBGPRINT(RT_DEBUG_TRACE, ("WirelessEvent=%d\n", pAd->CommonCfg.bWirelessEvent)); +- } +- if(RTMPGetKeyParameter("WiFiTest", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWiFiTest= simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWiFiTest = 0; // disable +- +- DBGPRINT(RT_DEBUG_TRACE, ("WiFiTest=%d\n", pAd->CommonCfg.bWiFiTest)); +- } +- //AuthMode +- if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, buffer)) +- { +- { +- if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +- else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +- else if ((strcmp(tmpbuf, "WPA") == 0) || (strcmp(tmpbuf, "wpa") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +- else +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus)); +- } +- } +- //EncrypType +- if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, buffer)) +- { +- { +- if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- else if ((strcmp(tmpbuf, "TKIP") == 0) || (strcmp(tmpbuf, "tkip") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- else if ((strcmp(tmpbuf, "AES") == 0) || (strcmp(tmpbuf, "aes") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- else +- pAd->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- +- // Update all wepstatus related +- pAd->StaCfg.PairCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.GroupCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.OrigWepStatus = pAd->StaCfg.WepStatus; +- pAd->StaCfg.bMixCipher = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus)); +- } +- } +- +- { +- if(RTMPGetCriticalParameter("WPAPSK", tmpbuf, 512, buffer)) +- { +- int err=0; +- +- tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input +- +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- ) +- { +- err = 1; +- } +- else if ((strlen(tmpbuf) >= 8) && (strlen(tmpbuf) < 64)) +- { +- PasswordHash((char *)tmpbuf, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, keyMaterial); +- NdisMoveMemory(pAd->StaCfg.PMK, keyMaterial, 32); +- +- } +- else if (strlen(tmpbuf) == 64) +- { +- AtoH(tmpbuf, keyMaterial, 32); +- NdisMoveMemory(pAd->StaCfg.PMK, keyMaterial, 32); +- } +- else +- { +- err = 1; +- DBGPRINT(RT_DEBUG_ERROR, ("%s::(WPAPSK key-string required 8 ~ 64 characters!)\n", __func__)); +- } +- +- if (err == 0) +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // Start STA supplicant state machine +- pAd->StaCfg.WpaState = SS_START; +- } +- else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __func__, tmpbuf)); +- } +- } +- } +- +- //DefaultKeyID, KeyType, KeyStr +- rtmp_read_key_parms_from_file(pAd, tmpbuf, buffer); +- +- HTParametersHook(pAd, tmpbuf, buffer); +- +- { +- //PSMode +-#ifdef RT2860 +- if (RTMPGetKeyParameter("PSMode", tmpbuf, 32, buffer)) +-#endif +-#ifdef RT2870 +- if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, buffer)) +-#endif +- { +- if (pAd->StaCfg.BssType == BSS_INFRA) +- { +- if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsm(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.DefaultListenCount = 5; +- } +- else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) +- || (strcmp(tmpbuf, "FAST_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsmBit(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else if ((strcmp(tmpbuf, "Legacy_PSP") == 0) || (strcmp(tmpbuf, "legacy_psp") == 0) +- || (strcmp(tmpbuf, "LEGACY_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsmBit(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else +- { //Default Ndis802_11PowerModeCAM +- // clear PSM bit immediately +- MlmeSetPsmBit(pAd, PWR_ACTIVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode)); +- } +- } +- // FastRoaming +- if (RTMPGetKeyParameter("FastRoaming", tmpbuf, 32, buffer)) +- { +- if (simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bFastRoaming = FALSE; +- else +- pAd->StaCfg.bFastRoaming = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("FastRoaming=%d\n", pAd->StaCfg.bFastRoaming)); +- } +- // RoamThreshold +- if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, buffer)) +- { +- long lInfo = simple_strtol(tmpbuf, 0, 10); +- +- if (lInfo > 90 || lInfo < 60) +- pAd->StaCfg.dBmToRoam = -70; +- else +- pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); +- } +- +- if(RTMPGetKeyParameter("TGnWifiTest", tmpbuf, 10, buffer)) +- { +- if(simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bTGnWifiTest = FALSE; +- else +- pAd->StaCfg.bTGnWifiTest = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest)); +- } +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> %s does not have a write method\n", src)); +- } +- +- retval=filp_close(srcf,NULL); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- } ++ RtmpOSFSInfoChange(&osFSInfo, FALSE); + } + +- set_fs(orgfs); +- + kfree(buffer); +- kfree(tmpbuf); +- +- return (NDIS_STATUS_SUCCESS); +-} +- +-static void HTParametersHook( +- IN PRTMP_ADAPTER pAd, +- IN CHAR *pValueStr, +- IN CHAR *pInput) +-{ +- +- INT Value; +- +- if (RTMPGetKeyParameter("HT_PROTECT", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bHTProtect = FALSE; +- } +- else +- { +- pAd->CommonCfg.bHTProtect = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Protection = %s\n", (Value==0) ? "Disable" : "Enable")); +- } + +- if (RTMPGetKeyParameter("HT_MIMOPSEnable", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bMIMOPSEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPSEnable = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_MIMOPSMode", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value > MMPS_ENABLE) +- { +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- } +- else +- { +- //TODO: add mimo power saving mechanism +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- //pAd->CommonCfg.BACapability.field.MMPSmode = Value; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPS Mode = %d\n", Value)); +- } +- +- if (RTMPGetKeyParameter("HT_BADecline", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bBADecline = FALSE; +- } +- else +- { +- pAd->CommonCfg.bBADecline = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Decline = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_DisableReordering", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bDisableReordering = FALSE; +- } +- else +- { +- pAd->CommonCfg.bDisableReordering = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: DisableReordering = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- if (RTMPGetKeyParameter("HT_AutoBA", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- } +- pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; +- pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Tx_+HTC frame +- if (RTMPGetKeyParameter("HT_HTC", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->HTCEnable = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Enable HT Link Adaptation Control +- if (RTMPGetKeyParameter("HT_LinkAdapt", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->bLinkAdapt = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->bLinkAdapt = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Link Adaptation Control = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- // Reverse Direction Mechanism +- if (RTMPGetKeyParameter("HT_RDG", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bRdg = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->CommonCfg.bRdg = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: RDG = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- +- +- +- // Tx A-MSUD ? +- if (RTMPGetKeyParameter("HT_AMSDU", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx A-MSDU = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // MPDU Density +- if (RTMPGetKeyParameter("HT_MpduDensity", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value <=7 && Value >= 0) +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d\n", Value)); +- } +- else +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = 4; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d (Default)\n", 4)); +- } +- } +- +- // Max Rx BA Window Size +- if (RTMPGetKeyParameter("HT_BAWinSize", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value >=1 && Value <= 64) +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = %d\n", Value)); +- } +- else +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = 64 (Defualt)\n")); +- } +- +- } +- +- // Guard Interval +- if (RTMPGetKeyParameter("HT_GI", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == GI_400) +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Guard Interval = %s\n", (Value==GI_400) ? "400" : "800" )); +- } +- +- // HT Operation Mode : Mixed Mode , Green Field +- if (RTMPGetKeyParameter("HT_OpMode", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == HTMODE_GF) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Operate Mode = %s\n", (Value==HTMODE_GF) ? "Green Field" : "Mixed Mode" )); +- } +- +- // Fixed Tx mode : CCK, OFDM +- if (RTMPGetKeyParameter("FixedTxMode", pValueStr, 25, pInput)) +- { +- UCHAR fix_tx_mode; +- +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- +- if (strcmp(pValueStr, "OFDM") == 0 || strcmp(pValueStr, "ofdm") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_OFDM; +- } +- else if (strcmp(pValueStr, "CCK") == 0 || strcmp(pValueStr, "cck") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_CCK; +- } +- else if (strcmp(pValueStr, "HT") == 0 || strcmp(pValueStr, "ht") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- else +- { +- Value = simple_strtol(pValueStr, 0, 10); +- // 1 : CCK +- // 2 : OFDM +- // otherwise : HT +- if (Value == FIXED_TXMODE_CCK || Value == FIXED_TXMODE_OFDM) +- fix_tx_mode = Value; +- else +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- +- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; +- DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", fix_tx_mode)); +- +- } +- } +- +- +- // Channel Width +- if (RTMPGetKeyParameter("HT_BW", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == BW_40) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- +-#ifdef MCAST_RATE_SPECIFIC +- pAd->CommonCfg.MCastPhyMode.field.BW = pAd->CommonCfg.RegTransmitSetting.field.BW; +-#endif // MCAST_RATE_SPECIFIC // +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" )); +- } +- +- if (RTMPGetKeyParameter("HT_EXTCHA", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == 0) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Ext Channel = %s\n", (Value==0) ? "BELOW" : "ABOVE" )); +- } +- +- // MSC +- if (RTMPGetKeyParameter("HT_MCS", pValueStr, 50, pInput)) +- { +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if ((Value >= 0 && Value <= 23) || (Value == 32)) // 3*3 +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = Value; +- pAd->StaCfg.bAutoTxRateSwitch = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = %d\n", pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- } +- else +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- pAd->StaCfg.bAutoTxRateSwitch = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n")); +- } +- } +- } +- +- // STBC +- if (RTMPGetKeyParameter("HT_STBC", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == STBC_USE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: STBC = %d\n", pAd->CommonCfg.RegTransmitSetting.field.STBC)); +- } +- +- // 40_Mhz_Intolerant +- if (RTMPGetKeyParameter("HT_40MHZ_INTOLERANT", pValueStr, 25, pInput)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = FALSE; +- } +- else +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: 40MHZ INTOLERANT = %d\n", pAd->CommonCfg.bForty_Mhz_Intolerant)); +- } +- //HT_TxStream +- if(RTMPGetKeyParameter("HT_TxStream", pValueStr, 10, pInput)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.TxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.TxStream = 2; +- break; +- case 3: // 3*3 +- default: +- pAd->CommonCfg.TxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.TxStream = 2; // only 2 tx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx Stream = %d\n", pAd->CommonCfg.TxStream)); +- } +- //HT_RxStream +- if(RTMPGetKeyParameter("HT_RxStream", pValueStr, 10, pInput)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.RxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.RxStream = 2; +- break; +- case 3: +- default: +- pAd->CommonCfg.RxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.RxStream = 2; // only 2 rx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Rx Stream = %d\n", pAd->CommonCfg.RxStream)); +- } ++ return (retval); + + } ++ +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +new file mode 100644 +index 0000000..1e6d347 +--- /dev/null ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -0,0 +1,828 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtusb_bulk.c ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Name Date Modification logs ++ ++*/ ++ ++#include "rt_config.h" ++ ++ void dump_urb(struct urb* purb) ++{ ++ printk("urb :0x%08lx\n", (unsigned long)purb); ++ printk("\tdev :0x%08lx\n", (unsigned long)purb->dev); ++ printk("\t\tdev->state :0x%d\n", purb->dev->state); ++ printk("\tpipe :0x%08x\n", purb->pipe); ++ printk("\tstatus :%d\n", purb->status); ++ printk("\ttransfer_flags :0x%08x\n", purb->transfer_flags); ++ printk("\ttransfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer); ++ printk("\ttransfer_buffer_length:%d\n", purb->transfer_buffer_length); ++ printk("\tactual_length :%d\n", purb->actual_length); ++ printk("\tsetup_packet :0x%08lx\n", (unsigned long)purb->setup_packet); ++ printk("\tstart_frame :%d\n", purb->start_frame); ++ printk("\tnumber_of_packets :%d\n", purb->number_of_packets); ++ printk("\tinterval :%d\n", purb->interval); ++ printk("\terror_count :%d\n", purb->error_count); ++ printk("\tcontext :0x%08lx\n", (unsigned long)purb->context); ++ printk("\tcomplete :0x%08lx\n\n", (unsigned long)purb->complete); ++} ++ ++/* ++======================================================================== ++Routine Description: ++ Create kernel threads & tasklets. ++ ++Arguments: ++ *net_dev Pointer to wireless net device interface ++ ++Return Value: ++ NDIS_STATUS_SUCCESS ++ NDIS_STATUS_FAILURE ++ ++Note: ++======================================================================== ++*/ ++NDIS_STATUS RtmpMgmtTaskInit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ RTMP_OS_TASK *pTask; ++ NDIS_STATUS status; ++ ++ /* ++ Creat TimerQ Thread, We need init timerQ related structure before create the timer thread. ++ */ ++ RtmpTimerQInit(pAd); ++ ++ pTask = &pAd->timerTask; ++ RtmpOSTaskInit(pTask, "RtmpTimerTask", pAd); ++ status = RtmpOSTaskAttach(pTask, RtmpTimerQThread, pTask); ++ if (status == NDIS_STATUS_FAILURE) ++ { ++ printk (KERN_WARNING "%s: unable to start RtmpTimerQThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ /* Creat MLME Thread */ ++ pTask = &pAd->mlmeTask; ++ RtmpOSTaskInit(pTask, "RtmpMlmeTask", pAd); ++ status = RtmpOSTaskAttach(pTask, MlmeThread, pTask); ++ if (status == NDIS_STATUS_FAILURE) ++ { ++ printk (KERN_WARNING "%s: unable to start MlmeThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ /* Creat Command Thread */ ++ pTask = &pAd->cmdQTask; ++ RtmpOSTaskInit(pTask, "RtmpCmdQTask", pAd); ++ status = RtmpOSTaskAttach(pTask, RTUSBCmdThread, pTask); ++ if (status == NDIS_STATUS_FAILURE) ++ { ++ printk (KERN_WARNING "%s: unable to start RTUSBCmdThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ return NDIS_STATUS_FAILURE; ++ } ++ ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Close kernel threads. ++ ++Arguments: ++ *pAd the raxx interface data pointer ++ ++Return Value: ++ NONE ++ ++Note: ++======================================================================== ++*/ ++VOID RtmpMgmtTaskExit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ INT ret; ++ RTMP_OS_TASK *pTask; ++ ++ // Sleep 50 milliseconds so pending io might finish normally ++ RTMPusecDelay(50000); ++ ++ // We want to wait until all pending receives and sends to the ++ // device object. We cancel any ++ // irps. Wait until sends and receives have stopped. ++ RTUSBCancelPendingIRPs(pAd); ++ ++ // We need clear timerQ related structure before exits of the timer thread. ++ RtmpTimerQExit(pAd); ++ ++ /* Terminate Mlme Thread */ ++ pTask = &pAd->mlmeTask; ++ ret = RtmpOSTaskKill(pTask); ++ if (ret == NDIS_STATUS_FAILURE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ } ++ ++ /* Terminate cmdQ thread */ ++ pTask = &pAd->cmdQTask; ++#ifdef KTHREAD_SUPPORT ++ if (pTask->kthread_task) ++#else ++ CHECK_PID_LEGALITY(pTask->taskPID) ++#endif ++ { ++ mb(); ++ NdisAcquireSpinLock(&pAd->CmdQLock); ++ pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; ++ NdisReleaseSpinLock(&pAd->CmdQLock); ++ mb(); ++ //RTUSBCMDUp(pAd); ++ ret = RtmpOSTaskKill(pTask); ++ if (ret == NDIS_STATUS_FAILURE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ } ++ pAd->CmdQ.CmdQState = RTMP_TASK_STAT_UNKNOWN; ++ } ++ ++ /* Terminate timer thread */ ++ pTask = &pAd->timerTask; ++ ret = RtmpOSTaskKill(pTask); ++ if (ret == NDIS_STATUS_FAILURE) ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ } ++ ++ ++} ++ ++ ++static void rtusb_dataout_complete(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ purbb_t pUrb; ++ POS_COOKIE pObj; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId; ++ NTSTATUS Status; ++ unsigned long IrqFlags; ++ ++ ++ pUrb = (purbb_t)data; ++ pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; ++ pAd = pHTTXContext->pAd; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ Status = pUrb->status; ++ ++ // Store BulkOut PipeId ++ BulkOutPipeId = pHTTXContext->BulkOutPipeId; ++ pAd->BulkOutDataOneSecCount++; ++ ++ //DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition, ++ // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ ++ RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); ++ pAd->BulkOutPending[BulkOutPipeId] = FALSE; ++ pHTTXContext->IRPPending = FALSE; ++ pAd->watchDogTxPendingCnt[BulkOutPipeId] = 0; ++ ++ if (Status == USB_ST_NOERROR) ++ { ++ pAd->BulkOutComplete++; ++ ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); ++ ++ pAd->Counters8023.GoodTransmits++; ++ //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext); ++ //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ ++ ++ } ++ else // STATUS_OTHER ++ { ++ PUCHAR pBuf; ++ ++ pAd->BulkOutCompleteOther++; ++ ++ pBuf = &pHTTXContext->TransferBuffer->field.WirelessPacket[pHTTXContext->NextBulkOutPosition]; ++ ++ if (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST | ++ fRTMP_ADAPTER_BULKOUT_RESET))) ++ { ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); ++ pAd->bulkResetPipeid = BulkOutPipeId; ++ pAd->bulkResetReq[BulkOutPipeId] = pAd->BulkOutReq; ++ } ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); ++ ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkOutDataPacket failed: ReasonCode=%d!\n", Status)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7])); ++ //DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther)); ++ ++ } ++ ++ // ++ // bInUse = TRUE, means some process are filling TX data, after that must turn on bWaitingBulkOut ++ // bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out. ++ // ++ //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ if ((pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition) && ++ (pHTTXContext->ENextBulkOutPosition != (pHTTXContext->CurWritePosition+8)) && ++ !RTUSB_TEST_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId))) ++ { ++ // Indicate There is data avaliable ++ RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); ++ } ++ //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ ++ // Always call Bulk routine, even reset bulk. ++ // The protection of rest bulk should be in BulkOut routine ++ RTUSBKickBulkOut(pAd); ++} ++ ++ ++static void rtusb_null_frame_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pNullContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long irqFlag; ++ ++ ++ pUrb = (purbb_t)data; ++ pNullContext = (PTX_CONTEXT)pUrb->context; ++ pAd = pNullContext->pAd; ++ Status = pUrb->status; ++ ++ // Reset Null frame context flags ++ RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); ++ pNullContext->IRPPending = FALSE; ++ pNullContext->InUse = FALSE; ++ pAd->BulkOutPending[0] = FALSE; ++ pAd->watchDogTxPendingCnt[0] = 0; ++ ++ if (Status == USB_ST_NOERROR) ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ ++ RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++ } ++ else // STATUS_OTHER ++ { ++ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", Status)); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); ++ pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ } ++ } ++ ++ // Always call Bulk routine, even reset bulk. ++ // The protectioon of rest bulk should be in BulkOut routine ++ RTUSBKickBulkOut(pAd); ++} ++ ++ ++static void rtusb_rts_frame_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pRTSContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long irqFlag; ++ ++ ++ pUrb = (purbb_t)data; ++ pRTSContext = (PTX_CONTEXT)pUrb->context; ++ pAd = pRTSContext->pAd; ++ Status = pUrb->status; ++ ++ // Reset RTS frame context flags ++ RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); ++ pRTSContext->IRPPending = FALSE; ++ pRTSContext->InUse = FALSE; ++ ++ if (Status == USB_ST_NOERROR) ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++ } ++ else // STATUS_OTHER ++ { ++ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n")); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); ++ pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); ++ } ++ } ++ ++ RTMP_SEM_LOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]); ++ pAd->BulkOutPending[pRTSContext->BulkOutPipeId] = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]); ++ ++ // Always call Bulk routine, even reset bulk. ++ // The protectioon of rest bulk should be in BulkOut routine ++ RTUSBKickBulkOut(pAd); ++ ++ ++} ++ ++ ++static void rtusb_pspoll_frame_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pPsPollContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ ++ ++ ++ pUrb = (purbb_t)data; ++ pPsPollContext = (PTX_CONTEXT)pUrb->context; ++ pAd = pPsPollContext->pAd; ++ Status = pUrb->status; ++ ++ // Reset PsPoll context flags ++ pPsPollContext->IRPPending = FALSE; ++ pPsPollContext->InUse = FALSE; ++ pAd->watchDogTxPendingCnt[0] = 0; ++ ++ if (Status == USB_ST_NOERROR) ++ { ++ RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++ } ++ else // STATUS_OTHER ++ { ++ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n")); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); ++ pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ } ++ ++ RTMP_SEM_LOCK(&pAd->BulkOutLock[0]); ++ pAd->BulkOutPending[0] = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->BulkOutLock[0]); ++ ++ // Always call Bulk routine, even reset bulk. ++ // The protectioon of rest bulk should be in BulkOut routine ++ RTUSBKickBulkOut(pAd); ++ ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Handle received packets. ++ ++Arguments: ++ data - URB information pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++static void rx_done_tasklet(unsigned long data) ++{ ++ purbb_t pUrb; ++ PRX_CONTEXT pRxContext; ++ PRTMP_ADAPTER pAd; ++ NTSTATUS Status; ++ unsigned int IrqFlags; ++ ++ pUrb = (purbb_t)data; ++ pRxContext = (PRX_CONTEXT)pUrb->context; ++ pAd = pRxContext->pAd; ++ Status = pUrb->status; ++ ++ ++ RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); ++ pRxContext->InUse = FALSE; ++ pRxContext->IRPPending = FALSE; ++ pRxContext->BulkInOffset += pUrb->actual_length; ++ //NdisInterlockedDecrement(&pAd->PendingRx); ++ pAd->PendingRx--; ++ ++ if (Status == USB_ST_NOERROR) ++ { ++ pAd->BulkInComplete++; ++ pAd->NextRxBulkInPosition = 0; ++ if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero. ++ { ++ pRxContext->Readable = TRUE; ++ INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE); ++ } ++ RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); ++ } ++ else // STATUS_OTHER ++ { ++ pAd->BulkInCompleteFail++; ++ // Still read this packet although it may comtain wrong bytes. ++ pRxContext->Readable = FALSE; ++ RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); ++ ++ // Parsing all packets. because after reset, the index will reset to all zero. ++ if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_BULKIN_RESET | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n", ++ Status, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pRxContext->pUrb->actual_length)); ++ ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); ++ } ++ } ++ ++ ASSERT((pRxContext->InUse == pRxContext->IRPPending)); ++ ++ RTUSBBulkReceive(pAd); ++ ++ ++ return; ++ ++} ++ ++ ++static void rtusb_mgmt_dma_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pMLMEContext; ++ int index; ++ PNDIS_PACKET pPacket; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long IrqFlags; ++ ++ ++ pUrb = (purbb_t)data; ++ pMLMEContext = (PTX_CONTEXT)pUrb->context; ++ pAd = pMLMEContext->pAd; ++ Status = pUrb->status; ++ index = pMLMEContext->SelfIdx; ++ ++ ASSERT((pAd->MgmtRing.TxDmaIdx == index)); ++ ++ RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); ++ ++ ++ if (Status != USB_ST_NOERROR) ++ { ++ //Bulk-Out fail status handle ++ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out MLME Failed, Status=%d!\n", Status)); ++ // TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt? ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); ++ pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ } ++ } ++ ++ pAd->BulkOutPending[MGMTPIPEIDX] = FALSE; ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); ++ ++ RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); ++ // Reset MLME context flags ++ pMLMEContext->IRPPending = FALSE; ++ pMLMEContext->InUse = FALSE; ++ pMLMEContext->bWaitingBulkOut = FALSE; ++ pMLMEContext->BulkOutSize = 0; ++ ++ pPacket = pAd->MgmtRing.Cell[index].pNdisPacket; ++ pAd->MgmtRing.Cell[index].pNdisPacket = NULL; ++ ++ // Increase MgmtRing Index ++ INC_RING_INDEX(pAd->MgmtRing.TxDmaIdx, MGMT_RING_SIZE); ++ pAd->MgmtRing.TxSwFreeIdx++; ++ RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); ++ ++ // No-matter success or fail, we free the mgmt packet. ++ if (pPacket) ++ RTMPFreeNdisPacket(pAd, pPacket); ++ ++ if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ // do nothing and return directly. ++ } ++ else ++ { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && ++ ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) ++ { // For Mgmt Bulk-Out failed, ignore it now. ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { ++ ++ // Always call Bulk routine, even reset bulk. ++ // The protectioon of rest bulk should be in BulkOut routine ++ if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */) ++ { ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); ++ } ++ RTUSBKickBulkOut(pAd); ++ } ++ } ++ ++ ++} ++ ++static void rtusb_ac3_dma_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 3; ++ purbb_t pUrb; ++ ++ ++ pUrb = (purbb_t)data; ++ pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; ++ pAd = pHTTXContext->pAd; ++ ++ rtusb_dataout_complete((unsigned long)pUrb); ++ ++ if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ // do nothing and return directly. ++ } ++ else ++ { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) ++ { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) ++ { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ } ++ ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<3); ++ RTUSBKickBulkOut(pAd); ++ } ++ } ++ ++ ++ return; ++} ++ ++ ++static void rtusb_ac2_dma_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 2; ++ purbb_t pUrb; ++ ++ ++ pUrb = (purbb_t)data; ++ pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; ++ pAd = pHTTXContext->pAd; ++ ++ rtusb_dataout_complete((unsigned long)pUrb); ++ ++ if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ // do nothing and return directly. ++ } ++ else ++ { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) ++ { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) ++ { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ } ++ ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<2); ++ RTUSBKickBulkOut(pAd); ++ } ++ } ++ ++ ++ return; ++} ++ ++ ++static void rtusb_ac1_dma_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 1; ++ purbb_t pUrb; ++ ++ ++ pUrb = (purbb_t)data; ++ pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; ++ pAd = pHTTXContext->pAd; ++ ++ rtusb_dataout_complete((unsigned long)pUrb); ++ ++ if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ // do nothing and return directly. ++ } ++ else ++ { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) ++ { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) ++ { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ } ++ ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<1); ++ RTUSBKickBulkOut(pAd); ++ } ++ } ++ return; ++ ++} ++ ++ ++static void rtusb_ac0_dma_done_tasklet(unsigned long data) ++{ ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 0; ++ purbb_t pUrb; ++ ++ ++ pUrb = (purbb_t)data; ++ pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; ++ pAd = pHTTXContext->pAd; ++ ++ rtusb_dataout_complete((unsigned long)pUrb); ++ ++ if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ // do nothing and return directly. ++ } ++ else ++ { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) ++ { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ } ++ else ++ { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && ++ /* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) ++ { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ } ++ ++ RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL); ++ RTUSBKickBulkOut(pAd); ++ } ++ } ++ ++ ++ return; ++ ++} ++ ++ ++NDIS_STATUS RtmpNetTaskInit( ++ IN RTMP_ADAPTER *pAd) ++{ ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ // Create receive tasklet ++ tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG)pAd); ++ tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac1_dma_done_task, rtusb_ac1_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac2_dma_done_task, rtusb_ac2_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->ac3_dma_done_task, rtusb_ac3_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->null_frame_complete_task, rtusb_null_frame_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->rts_frame_complete_task, rtusb_rts_frame_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->pspoll_frame_complete_task, rtusb_pspoll_frame_done_tasklet, (unsigned long)pAd); ++ ++ return NDIS_STATUS_SUCCESS; ++} ++ ++ ++void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) ++{ ++ POS_COOKIE pObj; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ tasklet_kill(&pObj->rx_done_task); ++ tasklet_kill(&pObj->mgmt_dma_done_task); ++ tasklet_kill(&pObj->ac0_dma_done_task); ++ tasklet_kill(&pObj->ac1_dma_done_task); ++ tasklet_kill(&pObj->ac2_dma_done_task); ++ tasklet_kill(&pObj->ac3_dma_done_task); ++ tasklet_kill(&pObj->tbtt_task); ++ tasklet_kill(&pObj->null_frame_complete_task); ++ tasklet_kill(&pObj->rts_frame_complete_task); ++ tasklet_kill(&pObj->pspoll_frame_complete_task); ++} +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 90fd40f..ee047f8 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -42,140 +42,45 @@ + + #include "spectrum_def.h" + +-#include "aironet.h" ++#include "rtmp_dot11.h" + +-#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) +-#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) +-#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) ++#undef AP_WSC_INCLUDED ++#undef STA_WSC_INCLUDED ++#undef WSC_INCLUDED + +-#ifdef RT2870 +-//////////////////////////////////////////////////////////////////////////// +-// The TX_BUFFER structure forms the transmitted USB packet to the device +-//////////////////////////////////////////////////////////////////////////// +-typedef struct __TX_BUFFER{ +- union { +- UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; +- }field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. +-} TX_BUFFER, *PTX_BUFFER; +- +-typedef struct __HTTX_BUFFER{ +- union { +- UCHAR WirelessPacket[MAX_TXBULK_SIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; +- }field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. +-} HTTX_BUFFER, *PHTTX_BUFFER; +- +- +-// used to track driver-generated write irps +-typedef struct _TX_CONTEXT +-{ +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize +- ULONG BulkOutSize; +- UCHAR BulkOutPipeId; +- UCHAR SelfIdx; +- BOOLEAN InUse; +- BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime. +- BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout. +- BOOLEAN IRPPending; +- BOOLEAN LastOne; +- BOOLEAN bAggregatible; +- UCHAR Header_802_3[LENGTH_802_3]; +- UCHAR Rsv[2]; +- ULONG DataOffset; +- UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux +- +-} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; +- +- +-// used to track driver-generated write irps +-typedef struct _HT_TX_CONTEXT +-{ +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize +- ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission +- UCHAR BulkOutPipeId; +- BOOLEAN IRPPending; +- BOOLEAN LastOne; +- BOOLEAN bCurWriting; +- BOOLEAN bRingEmpty; +- BOOLEAN bCopySavePad; +- UCHAR SavedPad[8]; +- UCHAR Header_802_3[LENGTH_802_3]; +- ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from. +- ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to. +- ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission +- ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission +- UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux +-} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; + + +-// +-// Structure to keep track of receive packets and buffers to indicate +-// receive data to the protocol. +-// +-typedef struct _RX_CONTEXT +-{ +- PUCHAR TransferBuffer; +- PVOID pAd; +- PIRP pIrp;//used to cancel pending bulk in. +- PURB pUrb; +- //These 2 Boolean shouldn't both be 1 at the same time. +- ULONG BulkInOffset; // number of packets waiting for reordering . +- BOOLEAN bRxHandling; // Notify this packet is being process now. +- BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet. +- BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet. +- BOOLEAN IRPPending; // TODO: To be removed +- atomic_t IrpLock; +- NDIS_SPIN_LOCK RxContextLock; +- dma_addr_t data_dma; // urb dma on linux +-} RX_CONTEXT, *PRX_CONTEXT; +-#endif // RT2870 // ++#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) ++#define WSC_INCLUDED ++#endif + ++#include "rtmp_chip.h" + +-// +-// NDIS Version definitions +-// +-#ifdef NDIS50_MINIPORT +-#define RTMP_NDIS_MAJOR_VERSION 5 +-#define RTMP_NDIS_MINOR_VERSION 0 +-#endif + +-#ifdef NDIS51_MINIPORT +-#define RTMP_NDIS_MAJOR_VERSION 5 +-#define RTMP_NDIS_MINOR_VERSION 1 +-#endif + +-extern char NIC_VENDOR_DESC[]; +-extern int NIC_VENDOR_DESC_LEN; ++typedef struct _RTMP_ADAPTER RTMP_ADAPTER; ++typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; ++ ++typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; ++ ++ ++//#define DBG 1 ++ ++//#define DBG_DIAGNOSE 1 ++ ++ ++//+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function ++#define MAX_DATAMM_RETRY 3 ++#define MGMT_USE_QUEUE_FLAG 0x80 ++//---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function ++ ++#define MAXSEQ (0xFFF) + + extern unsigned char SNAP_AIRONET[]; +-extern unsigned char CipherSuiteCiscoCCKM[]; +-extern unsigned char CipherSuiteCiscoCCKMLen; +-extern unsigned char CipherSuiteCiscoCCKM24[]; +-extern unsigned char CipherSuiteCiscoCCKM24Len; +-extern unsigned char CipherSuiteCCXTkip[]; +-extern unsigned char CipherSuiteCCXTkipLen; + extern unsigned char CISCO_OUI[]; + extern UCHAR BaSizeArray[4]; + + extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; +-extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN]; + extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; + extern ULONG BIT32[32]; + extern UCHAR BIT8[8]; +@@ -231,9 +136,11 @@ extern UCHAR WpaIe; + extern UCHAR Wpa2Ie; + extern UCHAR IbssIe; + extern UCHAR Ccx2Ie; ++extern UCHAR WapiIe; + + extern UCHAR WPA_OUI[]; + extern UCHAR RSN_OUI[]; ++extern UCHAR WAPI_OUI[]; + extern UCHAR WME_INFO_ELEM[]; + extern UCHAR WME_PARM_ELEM[]; + extern UCHAR Ccx2QosInfo[]; +@@ -256,28 +163,8 @@ extern UCHAR RateSwitchTable11N2SForABand[]; + + extern UCHAR PRE_N_HT_OUI[]; + +-#define MAXSEQ (0xFFF) +- +-struct reordering_mpdu +-{ +- struct reordering_mpdu *next; +- PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ +- int Sequence; /* sequence number of MPDU */ +- BOOLEAN bAMSDU; +-}; + +-struct reordering_list +-{ +- struct reordering_mpdu *next; +- int qlen; +-}; + +-struct reordering_mpdu_pool +-{ +- PVOID mem; +- NDIS_SPIN_LOCK lock; +- struct reordering_list freelist; +-}; + + typedef struct _RSSI_SAMPLE { + CHAR LastRssi0; // last received RSSI +@@ -318,6 +205,7 @@ typedef struct _QUEUE_HEADER { + if ((QueueHeader)->Head != NULL) \ + { \ + pNext = (QueueHeader)->Head->Next; \ ++ (QueueHeader)->Head->Next = NULL; \ + (QueueHeader)->Head = pNext; \ + if (pNext == NULL) \ + (QueueHeader)->Tail = NULL; \ +@@ -345,6 +233,19 @@ typedef struct _QUEUE_HEADER { + (QueueHeader)->Number++; \ + } + ++#define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \ ++{ \ ++ ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ ++ if ((QueueHeader)->Tail) \ ++ (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ ++ else \ ++ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Number++; \ ++} ++ ++ ++ + // + // Macros for flag and ref count operations + // +@@ -353,15 +254,12 @@ typedef struct _QUEUE_HEADER { + #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0) + #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0) + #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) +- +-#ifdef RT2860 + // Macro for power save flag. + #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F)) + #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F)) + #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0) + #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0) + #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F)) +-#endif + + #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F)) + #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F)) +@@ -391,51 +289,6 @@ typedef struct _QUEUE_HEADER { + (_idx) = (_idx+1) % (_RingSize); \ + } + +-#ifdef RT2870 +-// We will have a cost down version which mac version is 0x3090xxxx +-#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000)) +-#else +-#define IS_RT3090(_pAd) 0 +-#endif +-#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000) +-#ifdef RT2870 +-#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000) +-#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000) +-#endif +- +-#define RING_PACKET_INIT(_TxRing, _idx) \ +-{ \ +- _TxRing->Cell[_idx].pNdisPacket = NULL; \ +- _TxRing->Cell[_idx].pNextNdisPacket = NULL; \ +-} +- +-#define TXDT_INIT(_TxD) \ +-{ \ +- NdisZeroMemory(_TxD, TXD_SIZE); \ +- _TxD->DMADONE = 1; \ +-} +- +-//Set last data segment +-#define RING_SET_LASTDS(_TxD, _IsSD0) \ +-{ \ +- if (_IsSD0) {_TxD->LastSec0 = 1;} \ +- else {_TxD->LastSec1 = 1;} \ +-} +- +-// Increase TxTsc value for next transmission +-// TODO: +-// When i==6, means TSC has done one full cycle, do re-keying stuff follow specs +-// Should send a special event microsoft defined to request re-key +-#define INC_TX_TSC(_tsc) \ +-{ \ +- int i=0; \ +- while (++_tsc[i] == 0x0) \ +- { \ +- i++; \ +- if (i == 6) \ +- break; \ +- } \ +-} + + // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. + #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ +@@ -475,301 +328,12 @@ typedef struct _QUEUE_HEADER { + // ULONG Value) + // + +-// +-// BBP & RF are using indirect access. Before write any value into it. +-// We have to make sure there is no outstanding command pending via checking busy bit. +-// +-#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register +-// +-#ifdef RT2860 +-#define RTMP_RF_IO_WRITE32(_A, _V) \ +-{ \ +- PHY_CSR4_STRUC Value; \ +- ULONG BusyCnt = 0; \ +- if ((_A)->bPCIclkOff) \ +- { \ +- return; \ +- } \ +- do { \ +- RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \ +- if (Value.field.Busy == IDLE) \ +- break; \ +- BusyCnt++; \ +- } while (BusyCnt < MAX_BUSY_COUNT); \ +- if (BusyCnt < MAX_BUSY_COUNT) \ +- { \ +- RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \ +- } \ +-} +- +-#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int i, k; \ +- for (i=0; iBbpWriteLatch[_I]; \ +- } \ +-} +- +-//#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {} +-// Read BBP register by register's ID. Generate PER to test BA +-#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int i, k; \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- for (i=0; iBbpWriteLatch[_I]; \ +- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ +- BbpCsr.field.Busy = 0; \ +- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ +- } \ +- } \ +-} +- +-#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int BusyCnt; \ +- for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ +- break; \ +- } \ +- if (BusyCnt == MAX_BUSY_COUNT) \ +- { \ +- DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \ +- } \ +-} +- +-// Write BBP register by register's ID & value +-#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int BusyCnt; \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- for (BusyCnt=0; BusyCntOpMode == OPMODE_AP) \ +- RTMPusecDelay(1000); \ +- (_A)->BbpWriteLatch[_I] = _V; \ +- break; \ +- } \ +- if (BusyCnt == MAX_BUSY_COUNT) \ +- { \ +- DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \ +- RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ +- BbpCsr.field.Busy = 0; \ +- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ +- } \ +- } \ +-} +-#endif /* RT2860 */ +-#ifdef RT2870 +-#define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V) +-#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) +-#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) +- +-#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) +-#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) +-#endif // RT2870 // +- +-#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ +- switch (ch) \ +- { \ +- case 1: khz = 2412000; break; \ +- case 2: khz = 2417000; break; \ +- case 3: khz = 2422000; break; \ +- case 4: khz = 2427000; break; \ +- case 5: khz = 2432000; break; \ +- case 6: khz = 2437000; break; \ +- case 7: khz = 2442000; break; \ +- case 8: khz = 2447000; break; \ +- case 9: khz = 2452000; break; \ +- case 10: khz = 2457000; break; \ +- case 11: khz = 2462000; break; \ +- case 12: khz = 2467000; break; \ +- case 13: khz = 2472000; break; \ +- case 14: khz = 2484000; break; \ +- case 36: /* UNII */ khz = 5180000; break; \ +- case 40: /* UNII */ khz = 5200000; break; \ +- case 44: /* UNII */ khz = 5220000; break; \ +- case 48: /* UNII */ khz = 5240000; break; \ +- case 52: /* UNII */ khz = 5260000; break; \ +- case 56: /* UNII */ khz = 5280000; break; \ +- case 60: /* UNII */ khz = 5300000; break; \ +- case 64: /* UNII */ khz = 5320000; break; \ +- case 149: /* UNII */ khz = 5745000; break; \ +- case 153: /* UNII */ khz = 5765000; break; \ +- case 157: /* UNII */ khz = 5785000; break; \ +- case 161: /* UNII */ khz = 5805000; break; \ +- case 165: /* UNII */ khz = 5825000; break; \ +- case 100: /* HiperLAN2 */ khz = 5500000; break; \ +- case 104: /* HiperLAN2 */ khz = 5520000; break; \ +- case 108: /* HiperLAN2 */ khz = 5540000; break; \ +- case 112: /* HiperLAN2 */ khz = 5560000; break; \ +- case 116: /* HiperLAN2 */ khz = 5580000; break; \ +- case 120: /* HiperLAN2 */ khz = 5600000; break; \ +- case 124: /* HiperLAN2 */ khz = 5620000; break; \ +- case 128: /* HiperLAN2 */ khz = 5640000; break; \ +- case 132: /* HiperLAN2 */ khz = 5660000; break; \ +- case 136: /* HiperLAN2 */ khz = 5680000; break; \ +- case 140: /* HiperLAN2 */ khz = 5700000; break; \ +- case 34: /* Japan MMAC */ khz = 5170000; break; \ +- case 38: /* Japan MMAC */ khz = 5190000; break; \ +- case 42: /* Japan MMAC */ khz = 5210000; break; \ +- case 46: /* Japan MMAC */ khz = 5230000; break; \ +- case 184: /* Japan */ khz = 4920000; break; \ +- case 188: /* Japan */ khz = 4940000; break; \ +- case 192: /* Japan */ khz = 4960000; break; \ +- case 196: /* Japan */ khz = 4980000; break; \ +- case 208: /* Japan, means J08 */ khz = 5040000; break; \ +- case 212: /* Japan, means J12 */ khz = 5060000; break; \ +- case 216: /* Japan, means J16 */ khz = 5080000; break; \ +- default: khz = 2412000; break; \ +- } \ +- } +- +-#define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \ +- switch (khz) \ +- { \ +- case 2412000: ch = 1; break; \ +- case 2417000: ch = 2; break; \ +- case 2422000: ch = 3; break; \ +- case 2427000: ch = 4; break; \ +- case 2432000: ch = 5; break; \ +- case 2437000: ch = 6; break; \ +- case 2442000: ch = 7; break; \ +- case 2447000: ch = 8; break; \ +- case 2452000: ch = 9; break; \ +- case 2457000: ch = 10; break; \ +- case 2462000: ch = 11; break; \ +- case 2467000: ch = 12; break; \ +- case 2472000: ch = 13; break; \ +- case 2484000: ch = 14; break; \ +- case 5180000: ch = 36; /* UNII */ break; \ +- case 5200000: ch = 40; /* UNII */ break; \ +- case 5220000: ch = 44; /* UNII */ break; \ +- case 5240000: ch = 48; /* UNII */ break; \ +- case 5260000: ch = 52; /* UNII */ break; \ +- case 5280000: ch = 56; /* UNII */ break; \ +- case 5300000: ch = 60; /* UNII */ break; \ +- case 5320000: ch = 64; /* UNII */ break; \ +- case 5745000: ch = 149; /* UNII */ break; \ +- case 5765000: ch = 153; /* UNII */ break; \ +- case 5785000: ch = 157; /* UNII */ break; \ +- case 5805000: ch = 161; /* UNII */ break; \ +- case 5825000: ch = 165; /* UNII */ break; \ +- case 5500000: ch = 100; /* HiperLAN2 */ break; \ +- case 5520000: ch = 104; /* HiperLAN2 */ break; \ +- case 5540000: ch = 108; /* HiperLAN2 */ break; \ +- case 5560000: ch = 112; /* HiperLAN2 */ break; \ +- case 5580000: ch = 116; /* HiperLAN2 */ break; \ +- case 5600000: ch = 120; /* HiperLAN2 */ break; \ +- case 5620000: ch = 124; /* HiperLAN2 */ break; \ +- case 5640000: ch = 128; /* HiperLAN2 */ break; \ +- case 5660000: ch = 132; /* HiperLAN2 */ break; \ +- case 5680000: ch = 136; /* HiperLAN2 */ break; \ +- case 5700000: ch = 140; /* HiperLAN2 */ break; \ +- case 5170000: ch = 34; /* Japan MMAC */ break; \ +- case 5190000: ch = 38; /* Japan MMAC */ break; \ +- case 5210000: ch = 42; /* Japan MMAC */ break; \ +- case 5230000: ch = 46; /* Japan MMAC */ break; \ +- case 4920000: ch = 184; /* Japan */ break; \ +- case 4940000: ch = 188; /* Japan */ break; \ +- case 4960000: ch = 192; /* Japan */ break; \ +- case 4980000: ch = 196; /* Japan */ break; \ +- case 5040000: ch = 208; /* Japan, means J08 */ break; \ +- case 5060000: ch = 212; /* Japan, means J12 */ break; \ +- case 5080000: ch = 216; /* Japan, means J16 */ break; \ +- default: ch = 1; break; \ +- } \ +- } + + // + // Common fragment list structure - Identical to the scatter gather frag list structure + // ++//#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT ++//#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT + #define NIC_MAX_PHYS_BUF_COUNT 8 + + typedef struct _RTMP_SCATTER_GATHER_ELEMENT { +@@ -893,18 +457,11 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + } + +-#define SWITCH_AB( _pAA, _pBB) \ +-{ \ +- PVOID pCC; \ +- pCC = _pBB; \ +- _pBB = _pAA; \ +- _pAA = pCC; \ +-} + + // Enqueue this frame to MLME engine + // We need to enqueue the whole frame because MLME need to pass data type + // information from 802.11 header +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ + UINT32 High32TSF, Low32TSF; \ +@@ -912,49 +469,14 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ + } +-#endif +-#ifdef RT2870 ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ + UINT32 High32TSF=0, Low32TSF=0; \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ + } +-#endif // RT2870 // +- +-//Need to collect each ant's rssi concurrently +-//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant +-#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \ +-{ \ +- SHORT AvgRssi; \ +- UCHAR UsedAnt; \ +- if (_pAd->RxAnt.EvaluatePeriod == 0) \ +- { \ +- UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \ +- AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \ +- if (AvgRssi < 0) \ +- AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \ +- else \ +- AvgRssi = _rssi1 << 3; \ +- _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \ +- } \ +- else \ +- { \ +- UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \ +- AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \ +- if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \ +- AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \ +- else \ +- { \ +- _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \ +- AvgRssi = _rssi1 << 3; \ +- } \ +- _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \ +- _pAd->RxAnt.RcvPktNumWhenEvaluate++; \ +- } \ +-} +- +-#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \ +- NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen) ++#endif // RTMP_MAC_USB // + + #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) + #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) +@@ -964,59 +486,21 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + // + #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64)) + +-#ifdef RT2860 ++#define STA_EXTRA_SETTING(_pAd) ++ + #define STA_PORT_SECURED(_pAd) \ + { \ +- _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \ +- RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \ +- NdisAcquireSpinLock(&(_pAd)->MacTabLock); \ +- _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \ ++ BOOLEAN Cancelled; \ ++ (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \ ++ NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \ ++ (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \ ++ (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\ + NdisReleaseSpinLock(&(_pAd)->MacTabLock); \ ++ RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\ ++ STA_EXTRA_SETTING(_pAd); \ + } +-#endif +-#ifdef RT2870 +-#define STA_PORT_SECURED(_pAd) \ +-{ \ +- _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \ +- NdisAcquireSpinLock(&_pAd->MacTabLock); \ +- _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \ +- NdisReleaseSpinLock(&_pAd->MacTabLock); \ +-} +-#endif +- +-// +-// Register set pair for initialzation register set definition +-// +-typedef struct _RTMP_REG_PAIR +-{ +- ULONG Register; +- ULONG Value; +-} RTMP_REG_PAIR, *PRTMP_REG_PAIR; + +-typedef struct _REG_PAIR +-{ +- UCHAR Register; +- UCHAR Value; +-} REG_PAIR, *PREG_PAIR; + +-// +-// Register set pair for initialzation register set definition +-// +-typedef struct _RTMP_RF_REGS +-{ +- UCHAR Channel; +- ULONG R1; +- ULONG R2; +- ULONG R3; +- ULONG R4; +-} RTMP_RF_REGS, *PRTMP_RF_REGS; +- +-typedef struct _FREQUENCY_ITEM { +- UCHAR Channel; +- UCHAR N; +- UCHAR R; +- UCHAR K; +-} FREQUENCY_ITEM, *PFREQUENCY_ITEM; + + // + // Data buffer for DMA operation, the buffer must be contiguous physical memory +@@ -1030,35 +514,6 @@ typedef struct _RTMP_DMABUF + } RTMP_DMABUF, *PRTMP_DMABUF; + + +-typedef union _HEADER_802_11_SEQ{ +- struct { +- USHORT Frag:4; +- USHORT Sequence:12; +- } field; +- USHORT value; +-} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ; +- +-// +-// Data buffer for DMA operation, the buffer must be contiguous physical memory +-// Both DMA to / from CPU use the same structure. +-// +-typedef struct _RTMP_REORDERBUF +-{ +- BOOLEAN IsFull; +- PVOID AllocVa; // TxBuf virtual address +- UCHAR Header802_3[14]; +- HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA +- UCHAR DataOffset; +- USHORT Datasize; +- ULONG AllocSize; +-#ifdef RT2860 +- NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address +-#endif +-#ifdef RT2870 +- PUCHAR AllocPa; +-#endif // RT2870 // +-} RTMP_REORDERBUF, *PRTMP_REORDERBUF; +- + // + // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be + // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor +@@ -1078,21 +533,7 @@ typedef struct _RTMP_DMACB + RTMP_DMABUF DmaBuf; // Associated DMA buffer structure + } RTMP_DMACB, *PRTMP_DMACB; + +-typedef struct _RTMP_TX_BUF +-{ +- PQUEUE_ENTRY Next; +- UCHAR Index; +- ULONG AllocSize; // Control block size +- PVOID AllocVa; // Control block virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address +-} RTMP_TXBUF, *PRTMP_TXBUF; + +-typedef struct _RTMP_RX_BUF +-{ +- BOOLEAN InUse; +- ULONG ByBaRecIndex; +- RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF]; +-} RTMP_RXBUF, *PRTMP_RXBUF; + typedef struct _RTMP_TX_RING + { + RTMP_DMACB Cell[TX_RING_SIZE]; +@@ -1155,9 +596,6 @@ typedef struct _COUNTER_802_11 { + + typedef struct _COUNTER_RALINK { + ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput +-#ifdef RT2860 +- ULONG LastReceivedByteCount; +-#endif + ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput + ULONG BeenDisassociatedCount; + ULONG BadCQIAutoRecoveryCount; +@@ -1177,13 +615,10 @@ typedef struct _COUNTER_RALINK { + ULONG OneSecRxCount; + UINT32 OneSecTxAggregationCount; + UINT32 OneSecRxAggregationCount; +- ++ UINT32 OneSecReceivedByteCount; + UINT32 OneSecFrameDuplicateCount; + +-#ifdef RT2870 +- ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput +-#endif // RT2870 // +- ++ UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput + UINT32 OneSecTxNoRetryOkCount; + UINT32 OneSecTxRetryOkCount; + UINT32 OneSecTxFailCount; +@@ -1224,12 +659,6 @@ typedef struct _COUNTER_RALINK { + LARGE_INTEGER MPDUInReceivedAMPDUCount; + } COUNTER_RALINK, *PCOUNTER_RALINK; + +-typedef struct _PID_COUNTER { +- ULONG TxAckRequiredCount; // CRC error +- ULONG TxAggreCount; +- ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount +- ULONG LastSuccessRate; +-} PID_COUNTER, *PPID_COUNTER; + + typedef struct _COUNTER_DRS { + // to record the each TX rate's quality. 0 is best, the bigger the worse. +@@ -1244,33 +673,12 @@ typedef struct _COUNTER_DRS { + ULONG LastTxOkCount; + } COUNTER_DRS, *PCOUNTER_DRS; + +-// +-// Arcfour Structure Added by PaulWu +-// +-typedef struct _ARCFOUR +-{ +- UINT X; +- UINT Y; +- UCHAR STATE[256]; +-} ARCFOURCONTEXT, *PARCFOURCONTEXT; + +-// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI. +-typedef struct _RECEIVE_SETTING { +- USHORT NumOfRX:2; // MIMO. WE HAVE 3R +- USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz +- USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +- USHORT rsv:3; +- USHORT OFDM:1; +- USHORT MIMO:1; +- } RECEIVE_SETTING, *PRECEIVE_SETTING; +- +-// Shared key data structure +-typedef struct _WEP_KEY { +- UCHAR KeyLen; // Key length for each key, 0: entry is invalid +- UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max +-} WEP_KEY, *PWEP_KEY; + ++ ++/*************************************************************************** ++ * security key related data structure ++ **************************************************************************/ + typedef struct _CIPHER_KEY { + UCHAR Key[16]; // right now we implement 4 keys, 128 bits max + UCHAR RxMic[8]; // make alignment +@@ -1284,42 +692,47 @@ typedef struct _CIPHER_KEY { + UCHAR Type; // Indicate Pairwise/Group when reporting MIC error + } CIPHER_KEY, *PCIPHER_KEY; + +-typedef struct _BBP_TUNING_STRUCT { +- BOOLEAN Enable; +- UCHAR FalseCcaCountUpperBound; // 100 per sec +- UCHAR FalseCcaCountLowerBound; // 10 per sec +- UCHAR R17LowerBound; // specified in E2PROM +- UCHAR R17UpperBound; // 0x68 according to David Tung +- UCHAR CurrentR17Value; +-} BBP_TUNING, *PBBP_TUNING; + +-typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { +- UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status +-#ifdef RT2870 +- UCHAR EvaluateStableCnt; +-#endif +- UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 +- SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 +- SHORT Pair1LastAvgRssi; // +- SHORT Pair2LastAvgRssi; // +- ULONG RcvPktNumWhenEvaluate; +- BOOLEAN FirstPktArrivedWhenEvaluate; +- RALINK_TIMER_STRUCT RxAntDiversityTimer; +-} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; ++// structure to define WPA Group Key Rekey Interval ++typedef struct PACKED _RT_802_11_WPA_REKEY { ++ ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets ++} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; + +-typedef struct _LEAP_AUTH_INFO { +- BOOLEAN Enabled; //Ture: Enable LEAP Authentication +- BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM +- UCHAR Reserve[2]; +- UCHAR UserName[256]; //LEAP, User name +- ULONG UserNameLen; +- UCHAR Password[256]; //LEAP, User Password +- ULONG PasswordLen; +-} LEAP_AUTH_INFO, *PLEAP_AUTH_INFO; ++#ifdef RTMP_MAC_USB ++/*************************************************************************** ++ * RTUSB I/O related data structure ++ **************************************************************************/ ++typedef struct _RT_SET_ASIC_WCID { ++ ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG SetTid; // time-based: seconds, packet-based: kilo-packets ++ ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets ++ UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key ++} RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID; ++ ++typedef struct _RT_SET_ASIC_WCID_ATTRI { ++ ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG Cipher; // ASIC Cipher definition ++ UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; ++} RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI; ++ ++// for USB interface, avoid in interrupt when write key ++typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { ++ UCHAR MacAddr[6]; ++ USHORT MacTabMatchWCID; // ASIC ++ CIPHER_KEY CipherKey; ++} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY; ++ ++// Cipher suite type for mixed mode group cipher, P802.11i-2004 ++typedef enum _RT_802_11_CIPHER_SUITE_TYPE { ++ Cipher_Type_NONE, ++ Cipher_Type_WEP40, ++ Cipher_Type_TKIP, ++ Cipher_Type_RSVD, ++ Cipher_Type_CCMP, ++ Cipher_Type_WEP104 ++} RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE; ++#endif // RTMP_MAC_USB // + + typedef struct { + UCHAR Addr[MAC_ADDR_LEN]; +@@ -1335,25 +748,30 @@ typedef struct { + ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; + } ROGUEAP_TABLE, *PROGUEAP_TABLE; + +-typedef struct { +- BOOLEAN Enable; +- UCHAR Delta; +- BOOLEAN PlusSign; +-} CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE; +- + // +-// Receive Tuple Cache Format ++// Cisco IAPP format + // +-typedef struct _TUPLE_CACHE { +- BOOLEAN Valid; +- UCHAR MacAddress[MAC_ADDR_LEN]; +- USHORT Sequence; +- USHORT Frag; +-} TUPLE_CACHE, *PTUPLE_CACHE; ++typedef struct _CISCO_IAPP_CONTENT_ ++{ ++ USHORT Length; //IAPP Length ++ UCHAR MessageType; //IAPP type ++ UCHAR FunctionCode; //IAPP function type ++ UCHAR DestinaionMAC[MAC_ADDR_LEN]; ++ UCHAR SourceMAC[MAC_ADDR_LEN]; ++ USHORT Tag; //Tag(element IE) - Adjacent AP report ++ USHORT TagLength; //Length of element not including 4 byte header ++ UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 ++ UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point ++ USHORT Channel; ++ USHORT SsidLen; ++ UCHAR Ssid[MAX_LEN_OF_SSID]; ++ USHORT Seconds; //Seconds that the client has been disassociated. ++} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; + +-// +-// Fragment Frame structure +-// ++ ++/* ++ * Fragment Frame structure ++ */ + typedef struct _FRAGMENT_FRAME { + PNDIS_PACKET pFragPacket; + ULONG RxSize; +@@ -1373,6 +791,18 @@ typedef struct _PACKET_INFO { + PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor + } PACKET_INFO, *PPACKET_INFO; + ++ ++// ++// Arcfour Structure Added by PaulWu ++// ++typedef struct _ARCFOUR ++{ ++ UINT X; ++ UINT Y; ++ UCHAR STATE[256]; ++} ARCFOURCONTEXT, *PARCFOURCONTEXT; ++ ++ + // + // Tkip Key structure which RC4 key & MIC calculation + // +@@ -1404,6 +834,10 @@ typedef struct __PRIVATE_STRUC { + TKIP_KEY_INFO Rx; + } PRIVATE_STRUC, *PPRIVATE_STRUC; + ++ ++/*************************************************************************** ++ * Channel and BBP related data structures ++ **************************************************************************/ + // structure to tune BBP R66 (BBP TUNING) + typedef struct _BBP_R66_TUNING { + BOOLEAN bEnable; +@@ -1433,12 +867,56 @@ typedef struct _CHANNEL_11J_TX_POWER { + USHORT RemainingTimeForUse; //unit: sec + } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; + ++typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { ++ UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status ++ UCHAR EvaluateStableCnt; ++ UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 ++ UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 ++ UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 ++ UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 ++ SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 ++ SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 ++ SHORT Pair1LastAvgRssi; // ++ SHORT Pair2LastAvgRssi; // ++ ULONG RcvPktNumWhenEvaluate; ++ BOOLEAN FirstPktArrivedWhenEvaluate; ++ RALINK_TIMER_STRUCT RxAntDiversityTimer; ++} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; ++ ++ ++/*************************************************************************** ++ * structure for radar detection and channel switch ++ **************************************************************************/ ++typedef struct _RADAR_DETECT_STRUCT { ++ //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h ++ UCHAR CSCount; //Channel switch counter ++ UCHAR CSPeriod; //Channel switch period (beacon count) ++ UCHAR RDCount; //Radar detection counter ++ UCHAR RDMode; //Radar Detection mode ++ UCHAR RDDurRegion; //Radar detection duration region ++ UCHAR BBPR16; ++ UCHAR BBPR17; ++ UCHAR BBPR18; ++ UCHAR BBPR21; ++ UCHAR BBPR22; ++ UCHAR BBPR64; ++ ULONG InServiceMonitorCount; // unit: sec ++ UINT8 DfsSessionTime; ++ BOOLEAN bFastDfs; ++ UINT8 ChMovingTime; ++ UINT8 LongPulseRadarTh; ++} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; ++ + typedef enum _ABGBAND_STATE_ { + UNKNOWN_BAND, + BG_BAND, + A_BAND, + } ABGBAND_STATE; + ++ ++/*************************************************************************** ++ * structure for MLME state machine ++ **************************************************************************/ + typedef struct _MLME_STRUCT { + // STA state machines + STATE_MACHINE CntlMachine; +@@ -1448,17 +926,23 @@ typedef struct _MLME_STRUCT { + STATE_MACHINE SyncMachine; + STATE_MACHINE WpaPskMachine; + STATE_MACHINE LeapMachine; +- STATE_MACHINE AironetMachine; + STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; + STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; + STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; + STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; +- STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE]; +- STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE]; + STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; + // Action + STATE_MACHINE ActMachine; + ++ ++ ++ ++ // common WPA state machine ++ STATE_MACHINE WpaMachine; ++ STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; ++ ++ ++ + ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming + ULONG Now32; // latch the value of NdisGetSystemUpTime() + ULONG LastSendNULLpsmTime; +@@ -1473,11 +957,11 @@ typedef struct _MLME_STRUCT { + RALINK_TIMER_STRUCT APSDPeriodicTimer; + RALINK_TIMER_STRUCT LinkDownTimer; + RALINK_TIMER_STRUCT LinkUpTimer; +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + UCHAR bPsPollTimerRunning; + RALINK_TIMER_STRUCT PsPollTimer; + RALINK_TIMER_STRUCT RadioOnOffTimer; +-#endif ++#endif // RTMP_MAC_PCI // + ULONG PeriodicRound; + ULONG OneSecPeriodicRound; + +@@ -1486,31 +970,41 @@ typedef struct _MLME_STRUCT { + BOOLEAN bEnableAutoAntennaCheck; + RALINK_TIMER_STRUCT RxAntEvalTimer; + +-#ifdef RT2870 ++#ifdef RT30xx + UCHAR CaliBW40RfR24; + UCHAR CaliBW20RfR24; +-#endif // RT2870 // ++#endif // RT30xx // ++ ++#ifdef RTMP_MAC_USB ++ RALINK_TIMER_STRUCT AutoWakeupTimer; ++ BOOLEAN AutoWakeupTimerRunning; ++#endif // RTMP_MAC_USB // + } MLME_STRUCT, *PMLME_STRUCT; + +-// structure for radar detection and channel switch +-typedef struct _RADAR_DETECT_STRUCT { +- UCHAR CSCount; //Channel switch counter +- UCHAR CSPeriod; //Channel switch period (beacon count) +- UCHAR RDCount; //Radar detection counter +- UCHAR RDMode; //Radar Detection mode +- UCHAR RDDurRegion; //Radar detection duration region +- UCHAR BBPR16; +- UCHAR BBPR17; +- UCHAR BBPR18; +- UCHAR BBPR21; +- UCHAR BBPR22; +- UCHAR BBPR64; +- ULONG InServiceMonitorCount; // unit: sec +- UINT8 DfsSessionTime; +- BOOLEAN bFastDfs; +- UINT8 ChMovingTime; +- UINT8 LongPulseRadarTh; +-} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; ++ ++/*************************************************************************** ++ * 802.11 N related data structures ++ **************************************************************************/ ++struct reordering_mpdu ++{ ++ struct reordering_mpdu *next; ++ PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ ++ int Sequence; /* sequence number of MPDU */ ++ BOOLEAN bAMSDU; ++}; ++ ++struct reordering_list ++{ ++ struct reordering_mpdu *next; ++ int qlen; ++}; ++ ++struct reordering_mpdu_pool ++{ ++ PVOID mem; ++ NDIS_SPIN_LOCK lock; ++ struct reordering_list freelist; ++}; + + typedef enum _REC_BLOCKACK_STATUS + { +@@ -1545,14 +1039,21 @@ typedef struct _BA_REC_ENTRY { + UCHAR Wcid; + UCHAR TID; + UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. ++ //UCHAR NumOfRxPkt; ++ //UCHAR Curindidx; // the head in the RX reordering buffer + USHORT LastIndSeq; ++// USHORT LastIndSeqAtTimer; + USHORT TimeOutValue; + RALINK_TIMER_STRUCT RECBATimer; + ULONG LastIndSeqAtTimer; + ULONG nDropPacket; + ULONG rcvSeq; + REC_BLOCKACK_STATUS REC_BA_Status; ++// UCHAR RxBufIdxUsed; ++ // corresponding virtual address for RX reordering packet storage. ++ //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; + NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock ++// struct _BA_REC_ENTRY *pNext; + PVOID pAdapter; + struct reordering_list list; + } BA_REC_ENTRY, *PBA_REC_ENTRY; +@@ -1561,6 +1062,7 @@ typedef struct _BA_REC_ENTRY { + typedef struct { + ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] + ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] ++ ULONG numDoneOriginator; // count Done Originator sessions + BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; + BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; + } BA_TABLE, *PBA_TABLE; +@@ -1607,6 +1109,29 @@ typedef union _BACAP_STRUC { + UINT32 word; + } BACAP_STRUC, *PBACAP_STRUC; + ++ ++typedef struct { ++ BOOLEAN IsRecipient; ++ UCHAR MACAddr[MAC_ADDR_LEN]; ++ UCHAR TID; ++ UCHAR nMSDU; ++ USHORT TimeOut; ++ BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr. ++} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY; ++ ++ ++ ++#define IS_HT_STA(_pMacEntry) \ ++ (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX) ++ ++#define IS_HT_RATE(_pMacEntry) \ ++ (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) ++ ++#define PEER_IS_HT_RATE(_pMacEntry) \ ++ (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) ++ ++ ++ + //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) + typedef struct _IOT_STRUC { + UCHAR Threshold[2]; +@@ -1630,6 +1155,8 @@ typedef struct _IOT_STRUC { + // This is the registry setting for 802.11n transmit setting. Used in advanced page. + typedef union _REG_TRANSMIT_SETTING { + struct { ++ //UINT32 PhyMode:4; ++ //UINT32 MCS:7; // MCS + UINT32 rsv0:10; + UINT32 TxBF:1; + UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +@@ -1653,18 +1180,26 @@ typedef union _DESIRED_TRANSMIT_SETTING { + USHORT word; + } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; + +-typedef struct { +- BOOLEAN IsRecipient; +- UCHAR MACAddr[MAC_ADDR_LEN]; +- UCHAR TID; +- UCHAR nMSDU; +- USHORT TimeOut; +- BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr. +-} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY; ++#ifdef RTMP_MAC_USB ++/*************************************************************************** ++ * USB-based chip Beacon related data structures ++ **************************************************************************/ ++#define BEACON_BITMAP_MASK 0xff ++typedef struct _BEACON_SYNC_STRUCT_ ++{ ++ UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET]; ++ UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; ++ ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; ++ ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT]; ++ BOOLEAN EnableBeacon; // trigger to enable beacon transmission. ++ UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. ++ UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. ++}BEACON_SYNC_STRUCT; ++#endif // RTMP_MAC_USB // + +-// +-// Multiple SSID structure +-// ++/*************************************************************************** ++ * Multiple SSID related data structures ++ **************************************************************************/ + #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ + #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ + +@@ -1688,124 +1223,6 @@ typedef struct { + UCHAR bit_offset = wcid & 0x7; \ + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } + +-#ifdef RT2870 +-#define BEACON_BITMAP_MASK 0xff +-typedef struct _BEACON_SYNC_STRUCT_ +-{ +- UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET]; +- UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; +- ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; +- ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT]; +- BOOLEAN EnableBeacon; // trigger to enable beacon transmission. +- UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. +- UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. +-}BEACON_SYNC_STRUCT; +-#endif // RT2870 // +- +-typedef struct _MULTISSID_STRUCT { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT CapabilityInfo; +- +- PNET_DEV MSSIDDev; +- +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS GroupKeyWepStatus; +- WPA_MIX_PAIR_CIPHER WpaMixPairCipher; +- +- ULONG TxCount; +- ULONG RxCount; +- ULONG ReceivedByteCount; +- ULONG TransmittedByteCount; +- ULONG RxErrorCount; +- ULONG RxDropCount; +- +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- RT_HT_PHY_INFO DesiredHtPhyInfo; +- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful. +- BOOLEAN bAutoTxRateSwitch; +- +- UCHAR DefaultKeyId; +- +- UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ... +- UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES +- UCHAR DesiredRatesIndex; +- UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- +- UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM]; +- +- // WPA +- UCHAR GMK[32]; +- UCHAR PMK[32]; +- UCHAR GTK[32]; +- BOOLEAN IEEE8021X; +- BOOLEAN PreAuth; +- UCHAR GNonce[32]; +- UCHAR PortSecured; +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; +- UCHAR BANClass3Data; +- ULONG IsolateInterStaTraffic; +- +- UCHAR RSNIE_Len[2]; +- UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE]; +- +- +- UCHAR TimIELocationInBeacon; +- UCHAR CapabilityInfoLocationInBeacon; +- // outgoing BEACON frame buffer and corresponding TXWI +- // PTXWI_STRUC BeaconTxWI; // +- CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned +- +- BOOLEAN bHideSsid; +- UINT16 StationKeepAliveTime; // unit: second +- +- USHORT VLAN_VID; +- USHORT VLAN_Priority; +- +- RT_802_11_ACL AccessControlList; +- +- // EDCA Qos +- BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM +- BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS +- +- UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake +- +- // For 802.1x daemon setting per BSS +- UCHAR radius_srv_num; +- RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; +- +-#ifdef RTL865X_SOC +- unsigned int mylinkid; +-#endif +- +- +- UINT32 RcvdConflictSsidCount; +- UINT32 RcvdSpoofedAssocRespCount; +- UINT32 RcvdSpoofedReassocRespCount; +- UINT32 RcvdSpoofedProbeRespCount; +- UINT32 RcvdSpoofedBeaconCount; +- UINT32 RcvdSpoofedDisassocCount; +- UINT32 RcvdSpoofedAuthCount; +- UINT32 RcvdSpoofedDeauthCount; +- UINT32 RcvdSpoofedUnknownMgmtCount; +- UINT32 RcvdReplayAttackCount; +- +- CHAR RssiOfRcvdConflictSsid; +- CHAR RssiOfRcvdSpoofedAssocResp; +- CHAR RssiOfRcvdSpoofedReassocResp; +- CHAR RssiOfRcvdSpoofedProbeResp; +- CHAR RssiOfRcvdSpoofedBeacon; +- CHAR RssiOfRcvdSpoofedDisassoc; +- CHAR RssiOfRcvdSpoofedAuth; +- CHAR RssiOfRcvdSpoofedDeauth; +- CHAR RssiOfRcvdSpoofedUnknownMgmt; +- CHAR RssiOfRcvdReplayAttack; +- +- BOOLEAN bBcnSntReq; +- UCHAR BcnBufIdx; +-} MULTISSID_STRUCT, *PMULTISSID_STRUCT; + + // configuration common to OPMODE_AP as well as OPMODE_STA + typedef struct _COMMON_CONFIG { +@@ -1818,6 +1235,7 @@ typedef struct _COMMON_CONFIG { + UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED + USHORT Dsifs; // in units of usec + ULONG PacketFilter; // Packet filter for receiving ++ UINT8 RegulatoryClass; + + CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated + UCHAR SsidLen; // the actual ssid length in used +@@ -1846,16 +1264,27 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bAPSDAC_BK; + BOOLEAN bAPSDAC_VI; + BOOLEAN bAPSDAC_VO; ++ ++ /* because TSPEC can modify the APSD flag, we need to keep the APSD flag ++ requested in association stage from the station; ++ we need to recover the APSD flag after the TSPEC is deleted. */ ++ BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */ ++ BOOLEAN bACMAPSDTr[4]; /* no use */ ++ + BOOLEAN bNeedSendTriggerFrame; + BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT + ULONG TriggerTimerCount; + UCHAR MaxSPLength; + UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 ++ // move to MULTISSID_STRUCT for MBSS ++ //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. + REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. ++ //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode + UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit + UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 + UCHAR TxRateIndex; // Tx rate index in RateSwitchTable + UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable ++ //BOOLEAN bAutoTxRateSwitch; + UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 + UCHAR RtsRate; // RATE_xxx + HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. +@@ -1868,6 +1297,7 @@ typedef struct _COMMON_CONFIG { + UCHAR TxPower; // in unit of mW + ULONG TxPowerPercentage; // 0~100 % + ULONG TxPowerDefault; // keep for TxPowerPercentage ++ UINT8 PwrConstraint; + + BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 + BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +@@ -1877,7 +1307,7 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable + ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use + BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) +- BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST ++ BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST + BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it + BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version + BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. +@@ -1916,6 +1346,9 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bHTProtect; + BOOLEAN bMIMOPSEnable; + BOOLEAN bBADecline; ++//2008/11/05: KH add to support Antenna power-saving of AP<-- ++ BOOLEAN bGreenAPEnable; ++//2008/11/05: KH add to support Antenna power-saving of AP--> + BOOLEAN bDisableReordering; + BOOLEAN bForty_Mhz_Intolerant; + BOOLEAN bExtChannelSwitchAnnouncement; +@@ -1932,15 +1365,9 @@ typedef struct _COMMON_CONFIG { + UCHAR TxStream; + UCHAR RxStream; + +- // transmit phy mode, trasmit rate for Multicast. +-#ifdef MCAST_RATE_SPECIFIC +- UCHAR McastTransmitMcs; +- UCHAR McastTransmitPhyMode; +-#endif // MCAST_RATE_SPECIFIC // +- + BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + BOOLEAN bMultipleIRP; // Multiple Bulk IN flag + UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 + RT_HT_CAPABILITY SupportedHtPhy; +@@ -1948,13 +1375,13 @@ typedef struct _COMMON_CONFIG { + UCHAR TxBulkFactor; + UCHAR RxBulkFactor; + ++ BOOLEAN IsUpdateBeacon; + BEACON_SYNC_STRUCT *pBeaconSync; + RALINK_TIMER_STRUCT BeaconUpdateTimer; + UINT32 BeaconAdjust; + UINT32 BeaconFactor; + UINT32 BeaconRemain; +-#endif // RT2870 // +- ++#endif // RTMP_MAC_USB // + + NDIS_SPIN_LOCK MeasureReqTabLock; + PMEASURE_REQ_TAB pMeasureReqTab; +@@ -1962,12 +1389,17 @@ typedef struct _COMMON_CONFIG { + NDIS_SPIN_LOCK TpcReqTabLock; + PTPC_REQ_TAB pTpcReqTab; + +- // transmit phy mode, trasmit rate for Multicast. +-#ifdef MCAST_RATE_SPECIFIC +- HTTRANSMIT_SETTING MCastPhyMode; +-#endif // MCAST_RATE_SPECIFIC // ++ BOOLEAN PSPXlink; // 0: Disable. 1: Enable ++ ++#if defined(RT305x)||defined(RT30xx) ++ // request by Gary, for High Power issue ++ UCHAR HighPowerPatchDisabled; ++#endif ++ ++ BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ + } COMMON_CONFIG, *PCOMMON_CONFIG; + ++ + /* Modified by Wu Xi-Kun 4/21/2006 */ + // STA configuration and status + typedef struct _STA_ADMIN_CONFIG { +@@ -2016,6 +1448,8 @@ typedef struct _STA_ADMIN_CONFIG { + + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + ++ UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase ++ UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase + UCHAR PMK[32]; // WPA PSK mode PMK + UCHAR PTK[64]; // WPA PSK mode PTK + UCHAR GTK[32]; // GTK from authenticator +@@ -2055,11 +1489,7 @@ typedef struct _STA_ADMIN_CONFIG { + BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state + BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled + BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation +-#ifdef RT2860 +- BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join. +- BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join. +- BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join. +-#endif ++ + // New for WPA, windows want us to keep association information and + // Fixed IEs from last association response + NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; +@@ -2071,43 +1501,9 @@ typedef struct _STA_ADMIN_CONFIG { + UCHAR RSNIE_Len; + UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. + +- // New variables used for CCX 1.0 +- BOOLEAN bCkipOn; +- BOOLEAN bCkipCmicOn; +- UCHAR CkipFlag; +- UCHAR GIV[3]; //for CCX iv +- UCHAR RxSEQ[4]; +- UCHAR TxSEQ[4]; +- UCHAR CKIPMIC[4]; +- UCHAR LeapAuthMode; +- LEAP_AUTH_INFO LeapAuthInfo; +- UCHAR HashPwd[16]; +- UCHAR NetworkChallenge[8]; +- UCHAR NetworkChallengeResponse[24]; +- UCHAR PeerChallenge[8]; +- +- UCHAR PeerChallengeResponse[24]; +- UCHAR SessionKey[16]; //Network session keys (NSK) +- RALINK_TIMER_STRUCT LeapAuthTimer; +- ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection +- +- // New control flags for CCX +- CCX_CONTROL CCXControl; // Master administration state +- BOOLEAN CCXEnable; // Actual CCX state +- UCHAR CCXScanChannel; // Selected channel for CCX beacon request +- USHORT CCXScanTime; // Time out to wait for beacon and probe response +- UCHAR CCXReqType; // Current processing CCX request type +- BSS_TABLE CCXBssTab; // BSS Table +- UCHAR FrameReportBuf[2048]; // Buffer for creating frame report +- USHORT FrameReportLen; // Current Frame report length + ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time + USHORT RPIDensity[8]; // Array for RPI density collection +- // Start address of each BSS table within FrameReportBuf +- // It's important to update the RxPower of the corresponding Bss +- USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE]; +- USHORT BeaconToken; // Token for beacon report +- ULONG LastBssIndex; // Most current reported Bss index +- RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request ++ + UCHAR RMReqCnt; // Number of measurement request saved. + UCHAR CurrentRMReqIdx; // Number of measurement request saved. + BOOLEAN ParallelReq; // Parallel measurement, only one request performed, +@@ -2115,26 +1511,10 @@ typedef struct _STA_ADMIN_CONFIG { + USHORT ParallelDuration; // Maximum duration for parallel measurement + UCHAR ParallelChannel; // Only one channel with parallel measurement + USHORT IAPPToken; // IAPP dialog token +- UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0 +- UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0 + // Hack for channel load and noise histogram parameters + UCHAR NHFactor; // Parameter for Noise histogram + UCHAR CLFactor; // Parameter for channel load + +- UCHAR KRK[16]; //Key Refresh Key. +- UCHAR BTK[32]; //Base Transient Key +- BOOLEAN CCKMLinkUpFlag; +- ULONG CCKMRN; //(Re)Association request number. +- LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP +- UCHAR AironetCellPowerLimit; //in dBm +- UCHAR AironetIPAddress[4]; //eg. 192.168.1.1 +- BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time +- CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report +- UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used +- UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report +- USHORT CCXAdjacentAPChannel; +- ULONG CCXAdjacentAPLinkDownTime; //for Spec S32. +- + RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; + BOOLEAN StaQuickResponeForRateUpTimerRunning; + +@@ -2148,7 +1528,7 @@ typedef struct _STA_ADMIN_CONFIG { + + RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; + // Fast Roaming +- BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming ++ BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI + CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. + + BOOLEAN IEEE8021X; +@@ -2161,6 +1541,8 @@ typedef struct _STA_ADMIN_CONFIG { + // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters + UCHAR WpaSupplicantUP; + UCHAR WpaSupplicantScanCount; ++ BOOLEAN bRSN_IE_FromWpaSupplicant; ++ BOOLEAN bLostAp; + + CHAR dev_name[16]; + USHORT OriDevType; +@@ -2173,9 +1555,16 @@ typedef struct _STA_ADMIN_CONFIG { + RT_HT_PHY_INFO DesiredHtPhyInfo; + BOOLEAN bAutoTxRateSwitch; + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + UCHAR BBPR3; +-#endif ++#endif // RTMP_MAC_PCI // ++ ++ ++ ++ ++ BOOLEAN bAutoConnectByBssid; ++ ULONG BeaconLostTime; // seconds ++ BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable + } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; + + // This data structure keep the current active BSS/IBSS's configuration that this STA +@@ -2202,28 +1591,10 @@ typedef struct _STA_ACTIVE_CONFIG { + RT_HT_CAPABILITY SupportedHtPhy; + } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; + +-#ifdef RT2870 +-// for USB interface, avoid in interrupt when write key +-typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { +- NDIS_802_11_MAC_ADDRESS MacAddr; +- USHORT MacTabMatchWCID; // ASIC +- CIPHER_KEY CipherKey; +-} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY; +-#endif // RT2870 // + +-// ----------- start of AP -------------------------- +-// AUTH-RSP State Machine Aux data structure +-typedef struct _AP_MLME_AUX { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Alg; +- CHAR Challenge[CIPHER_TEXT_LEN]; +-} AP_MLME_AUX, *PAP_MLME_AUX; + +-// structure to define WPA Group Key Rekey Interval +-typedef struct PACKED _RT_802_11_WPA_REKEY { +- ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets +-} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; ++ ++ + + typedef struct _MAC_TABLE_ENTRY { + //Choose 1 from ValidAsWDS and ValidAsCLI to validize. +@@ -2243,6 +1614,7 @@ typedef struct _MAC_TABLE_ENTRY { + UCHAR RSNIE_Len; + UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; + UCHAR ANonce[LEN_KEY_DESC_NONCE]; ++ UCHAR SNonce[LEN_KEY_DESC_NONCE]; + UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; + UCHAR PTK[64]; + UCHAR ReTryCounter; +@@ -2250,6 +1622,7 @@ typedef struct _MAC_TABLE_ENTRY { + RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM + NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined + NDIS_802_11_WEP_STATUS WepStatus; ++ NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + AP_WPA_STATE WpaState; + GTK_STATE GTKState; + USHORT PortSecured; +@@ -2288,13 +1661,14 @@ typedef struct _MAC_TABLE_ENTRY { + + //==================================================== + //WDS entry needs these +-// rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab ++// if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab + UINT MatchWDSTabIdx; + UCHAR MaxSupportedRate; + UCHAR CurrTxRate; + UCHAR CurrTxRateIndex; + // to record the each TX rate's quality. 0 is best, the bigger the worse. + USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; ++// USHORT OneSecTxOkCount; + UINT32 OneSecTxNoRetryOkCount; + UINT32 OneSecTxRetryOkCount; + UINT32 OneSecTxFailCount; +@@ -2348,9 +1722,10 @@ typedef struct _MAC_TABLE_ENTRY { + UINT32 TXMCSSuccessful[16]; + UINT32 TXMCSFailed[16]; + UINT32 TXMCSAutoFallBack[16][16]; +-#ifdef RT2870 ++ + ULONG LastBeaconRxTime; +-#endif ++ ++ ULONG AssocDeadLine; + } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; + + typedef struct _MAC_TABLE { +@@ -2362,134 +1737,20 @@ typedef struct _MAC_TABLE { + BOOLEAN fAnyStationInPsm; + BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. + BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP +-#ifdef RT2870 + BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset +-#endif + BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ + BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. + BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. + BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic + BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS ++//2008/10/28: KH add to support Antenna power-saving of AP<-- ++//2008/10/28: KH add to support Antenna power-saving of AP--> + } MAC_TABLE, *PMAC_TABLE; + +-#define IS_HT_STA(_pMacEntry) \ +- (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX) +- +-#define IS_HT_RATE(_pMacEntry) \ +- (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- +-#define PEER_IS_HT_RATE(_pMacEntry) \ +- (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- +-typedef struct _WDS_ENTRY { +- BOOLEAN Valid; +- UCHAR Addr[MAC_ADDR_LEN]; +- ULONG NoDataIdleCount; +- struct _WDS_ENTRY *pNext; +-} WDS_ENTRY, *PWDS_ENTRY; +- +-typedef struct _WDS_TABLE_ENTRY { +- USHORT Size; +- UCHAR WdsAddr[MAC_ADDR_LEN]; +- WDS_ENTRY *Hash[HASH_TABLE_SIZE]; +- WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; +- UCHAR MaxSupportedRate; +- UCHAR CurrTxRate; +- USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES]; +- USHORT OneSecTxOkCount; +- USHORT OneSecTxRetryOkCount; +- USHORT OneSecTxFailCount; +- ULONG CurrTxRateStableTime; // # of second in current TX rate +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +-} WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY; +- +-typedef struct _RT_802_11_WDS_ENTRY { +- PNET_DEV dev; +- UCHAR Valid; +- UCHAR PhyMode; +- UCHAR PeerWdsAddr[MAC_ADDR_LEN]; +- UCHAR MacTabMatchWCID; // ASIC +- NDIS_802_11_WEP_STATUS WepStatus; +- UCHAR KeyIdx; +- CIPHER_KEY WdsKey; +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; +- RT_HT_PHY_INFO DesiredHtPhyInfo; +- BOOLEAN bAutoTxRateSwitch; +- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. +-} RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY; +- +-typedef struct _WDS_TABLE { +- UCHAR Mode; +- ULONG Size; +- RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY]; +-} WDS_TABLE, *PWDS_TABLE; +- +-typedef struct _APCLI_STRUCT { +- PNET_DEV dev; +-#ifdef RTL865X_SOC +- unsigned int mylinkid; +-#endif +- BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable" +- BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP. +- UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table. +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- +- UCHAR CfgSsidLen; +- CHAR CfgSsid[MAX_LEN_OF_SSID]; +- UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS]; +- UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS]; + +- ULONG ApCliRcvBeaconTime; + +- ULONG CtrlCurrState; +- ULONG SyncCurrState; +- ULONG AuthCurrState; +- ULONG AssocCurrState; +- ULONG WpaPskCurrState; + +- USHORT AuthReqCnt; +- USHORT AssocReqCnt; +- +- ULONG ClientStatusFlags; +- UCHAR MpduDensity; +- +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined +- NDIS_802_11_WEP_STATUS WepStatus; +- +- // Add to support different cipher suite for WPA2/WPA mode +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite +- BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites +- USHORT RsnCapability; +- +- UCHAR PSK[100]; // reserve PSK key material +- UCHAR PSKLen; +- UCHAR PMK[32]; // WPA PSK mode PMK +- UCHAR GTK[32]; // GTK from authenticator + +- CIPHER_KEY SharedKey[SHARE_KEY_NUM]; +- UCHAR DefaultKeyId; +- +- // store RSN_IE built by driver +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format. +- UCHAR RSNIE_Len; +- +- // For WPA countermeasures +- ULONG LastMicErrorTime; // record last MIC error time +- BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred. +- +- // For WPA-PSK supplicant state +- UCHAR SNonce[32]; // SNonce for WPA-PSK +- UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator +- +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; +- RT_HT_PHY_INFO DesiredHtPhyInfo; +- BOOLEAN bAutoTxRateSwitch; +- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. +-} APCLI_STRUCT, *PAPCLI_STRUCT; +- +-// ----------- end of AP ---------------------------- + + struct wificonf + { +@@ -2498,32 +1759,56 @@ struct wificonf + }; + + +- +- +-typedef struct _INF_PCI_CONFIG ++typedef struct _RTMP_DEV_INFO_ + { +- PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use +-}INF_PCI_CONFIG; ++ UCHAR chipName[16]; ++ RTMP_INF_TYPE infType; ++}RTMP_DEV_INFO; + +-typedef struct _INF_USB_CONFIG +-{ +- UINT BulkInEpAddr; // bulk-in endpoint address +- UINT BulkOutEpAddr[6]; // bulk-out endpoint address + +-}INF_USB_CONFIG; + + ++struct _RTMP_CHIP_OP_ ++{ ++ /* Calibration access related callback functions */ ++ int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ ++ int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ ++ int (*eewrite)(RTMP_ADAPTER *pAd, USHORT offset, USHORT value);; /* int (*eewrite)(RTMP_ADAPTER *pAd, int offset, USHORT value); */ ++ ++ /* MCU related callback functions */ ++ int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ ++ int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ ++ int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */ ++ ++ /* RF access related callback functions */ ++ REG_PAIR *pRFRegTable; ++ void (*AsicRfInit)(RTMP_ADAPTER *pAd); ++ void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd); ++ void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd); ++ void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd); ++ void (*AsicHaltAction)(RTMP_ADAPTER *pAd); ++}; ++ + + // + // The miniport adapter structure + // +-typedef struct _RTMP_ADAPTER ++struct _RTMP_ADAPTER + { + PVOID OS_Cookie; // save specific structure relative to OS + PNET_DEV net_dev; + ULONG VirtualIfCnt; + +-#ifdef RT2860 ++ RTMP_CHIP_OP chipOps; ++ USHORT ThisTbttNumToNextWakeUp; ++ ++#ifdef RTMP_MAC_PCI ++/*****************************************************************************************/ ++/* PCI related parameters */ ++/*****************************************************************************************/ ++ PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ unsigned int irq_num; ++ + USHORT LnkCtrlBitMask; + USHORT RLnkCtrlConfiguration; + USHORT RLnkCtrlOffset; +@@ -2531,15 +1816,7 @@ typedef struct _RTMP_ADAPTER + USHORT HostLnkCtrlOffset; + USHORT PCIePowerSaveLevel; + BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. +- ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. +- USHORT ThisTbttNumToNextWakeUp; +- ULONG SameRxByteCount; +- +- +-/*****************************************************************************************/ +-/* PCI related parameters */ +-/*****************************************************************************************/ +- PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ BOOLEAN bPCIclkOffDisableTx; // + + UINT int_enable_reg; + UINT int_disable_mask; +@@ -2550,12 +1827,13 @@ typedef struct _RTMP_ADAPTER + RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors + RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors + RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA +-#endif ++#endif // RTMP_MAC_PCI // ++ + + NDIS_SPIN_LOCK irq_lock; + UCHAR irq_disabled; + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + /*****************************************************************************************/ + /* USB related parameters */ + /*****************************************************************************************/ +@@ -2572,34 +1850,38 @@ typedef struct _RTMP_ADAPTER + ULONG BulkFlags; + BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority + +- +- //======Timer Thread +- RT2870_TIMER_QUEUE TimerQ; +- NDIS_SPIN_LOCK TimerQLock; +- +- + //======Cmd Thread + CmdQ CmdQ; + NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock +- +- BOOLEAN TimerFunc_kill; +- BOOLEAN mlme_kill; +- ++ RTMP_OS_TASK cmdQTask; + + //======Semaphores (event) +- struct semaphore mlme_semaphore; /* to sleep thread on */ +- struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */ +- struct semaphore RTUSBTimer_semaphore; +- struct completion TimerQComplete; +- struct completion mlmeComplete; +- struct completion CmdQComplete; ++ RTMP_OS_SEM UsbVendorReq_semaphore; ++ PVOID UsbVendorReqBuf; + wait_queue_head_t *wait; +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // ++ ++/*****************************************************************************************/ ++/* RBUS related parameters */ ++/*****************************************************************************************/ + + + /*****************************************************************************************/ +- /* Both PCI/USB related parameters */ ++/* Both PCI/USB related parameters */ ++/*****************************************************************************************/ ++ //RTMP_DEV_INFO chipInfo; ++ RTMP_INF_TYPE infType; ++ ++/*****************************************************************************************/ ++/* Driver Mgmt related parameters */ + /*****************************************************************************************/ ++ RTMP_OS_TASK mlmeTask; ++#ifdef RTMP_TIMER_TASK_SUPPORT ++ // If you want use timer task to handle the timer related jobs, enable this. ++ RTMP_TIMER_TASK_QUEUE TimerQ; ++ NDIS_SPIN_LOCK TimerQLock; ++ RTMP_OS_TASK timerTask; ++#endif // RTMP_TIMER_TASK_SUPPORT // + + + /*****************************************************************************************/ +@@ -2608,7 +1890,7 @@ typedef struct _RTMP_ADAPTER + BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once + NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + // Data related context and AC specified, 4 AC supported + NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs + NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock +@@ -2623,7 +1905,7 @@ typedef struct _RTMP_ADAPTER + UCHAR bulkResetPipeid; + BOOLEAN MgmtBulkPending; + ULONG bulkResetReq[6]; +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + // resource for software backlog queues + QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA +@@ -2637,21 +1919,21 @@ typedef struct _RTMP_ADAPTER + /*****************************************************************************************/ + /* Rx related parameters */ + /*****************************************************************************************/ +-#ifdef RT2860 ++ ++#ifdef RTMP_MAC_PCI + RTMP_RX_RING RxRing; + NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock +-#endif +-#ifdef RT2870 ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. + NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs +- UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE. ++ UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE. + UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller. + UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it. + ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. + ULONG TransferBufferLength; // current length of the packet buffer + ULONG ReadPosition; // current read position in a packet buffer +-#endif // RT2870 // +- ++#endif // RTMP_MAC_USB // + + /*****************************************************************************************/ + /* ASIC related parameters */ +@@ -2662,18 +1944,18 @@ typedef struct _RTMP_ADAPTER + // E2PROM + // --------------------------- + ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused +- UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 ++ ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. + USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; +-#ifdef RT2870 ++ UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 + BOOLEAN EepromAccess; +-#endif +- ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. ++ UCHAR EFuseTag; ++ + + // --------------------------- + // BBP Control + // --------------------------- + UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID +- UCHAR BbpRssiToDbmDelta; ++ CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power + BBP_R66_TUNING BbpTuning; + + // ---------------------------- +@@ -2718,23 +2000,26 @@ typedef struct _RTMP_ADAPTER + UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value + CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) + +- //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3 + CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h + CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value + CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value +- //--- + +- //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3 + CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah + CHAR ARssiOffset1; // Store A RSSI#1 Offset value + CHAR ARssiOffset2; // Store A RSSI#2 Offset value +- //--- + + CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h + CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 + CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 + CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 +- ++#ifdef RT30xx ++ // for 3572 ++ UCHAR Bbp25; ++ UCHAR Bbp26; ++ ++ UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G ++ UCHAR TxMixerGain5G; ++#endif // RT30xx // + // ---------------------------- + // LED control + // ---------------------------- +@@ -2742,7 +2027,7 @@ typedef struct _RTMP_ADAPTER + USHORT Led1; // read from EEPROM 0x3c + USHORT Led2; // EEPROM 0x3e + USHORT Led3; // EEPROM 0x40 +- UCHAR LedIndicatorStregth; ++ UCHAR LedIndicatorStrength; + UCHAR RssiSingalstrengthOffet; + BOOLEAN bLedOnScanning; + UCHAR LedStatus; +@@ -2759,20 +2044,17 @@ typedef struct _RTMP_ADAPTER + PSPOLL_FRAME PsPollFrame; + HEADER_802_11 NullFrame; + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + TX_CONTEXT BeaconContext[BEACON_RING_SIZE]; + TX_CONTEXT NullContext; + TX_CONTEXT PsPollContext; + TX_CONTEXT RTSContext; +-#endif // RT2870 // +- +- ++#endif // RTMP_MAC_USB // + + //=========AP=========== + + + //=======STA=========== +-/* Modified by Wu Xi-Kun 4/21/2006 */ + // ----------------------------------------------- + // STA specific configuration & operation status + // used only when pAd->OpMode == OPMODE_STA +@@ -2789,6 +2071,8 @@ typedef struct _RTMP_ADAPTER + NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected + + ++ /* MAT related parameters */ ++ + // configuration: read from Registry & E2PROM + BOOLEAN bLocalAdminMAC; // Use user changed MAC + UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address +@@ -2828,9 +2112,7 @@ typedef struct _RTMP_ADAPTER + + // flags, see fRTMP_ADAPTER_xxx flags + ULONG Flags; // Represent current device status +-#ifdef RT2860 + ULONG PSFlags; // Power Save operation flag. +-#endif + + // current TX sequence # + USHORT Sequence; +@@ -2863,36 +2145,38 @@ typedef struct _RTMP_ADAPTER + /*****************************************************************************************/ + /* Statistic related parameters */ + /*****************************************************************************************/ +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + ULONG BulkOutDataOneSecCount; + ULONG BulkInDataOneSecCount; + ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount + ULONG watchDogRxCnt; + ULONG watchDogRxOverFlowCnt; + ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; +-#endif // RT2870 // ++ INT TransferedLength[NUM_OF_TX_RING]; ++#endif // RTMP_MAC_USB // + + BOOLEAN bUpdateBcnCntDone; + ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition + // ---------------------------- + // DEBUG paramerts + // ---------------------------- ++ //ULONG DebugSetting[4]; + BOOLEAN bBanAllBaSetup; + BOOLEAN bPromiscuous; + + // ---------------------------- + // rt2860c emulation-use Parameters + // ---------------------------- +- ULONG rtsaccu[30]; +- ULONG ctsaccu[30]; +- ULONG cfendaccu[30]; +- ULONG bacontent[16]; +- ULONG rxint[RX_RING_SIZE+1]; +- UCHAR rcvba[60]; ++ //ULONG rtsaccu[30]; ++ //ULONG ctsaccu[30]; ++ //ULONG cfendaccu[30]; ++ //ULONG bacontent[16]; ++ //ULONG rxint[RX_RING_SIZE+1]; ++ //UCHAR rcvba[60]; + BOOLEAN bLinkAdapt; + BOOLEAN bForcePrintTX; + BOOLEAN bForcePrintRX; +- BOOLEAN bDisablescanning; //defined in RT2870 USB ++ //BOOLEAN bDisablescanning; //defined in RT2870 USB + BOOLEAN bStaFifoTest; + BOOLEAN bProtectionTest; + BOOLEAN bHCCATest; +@@ -2914,9 +2198,15 @@ typedef struct _RTMP_ADAPTER + + ULONG OneSecondnonBEpackets; // record non BE packets per second + ++#ifdef LINUX + struct iw_statistics iw_stats; + + struct net_device_stats stats; ++#endif // LINUX // ++ ++ ++ ++ + + ULONG TbttTickCount; + #ifdef PCI_MSI_SUPPORT +@@ -2933,32 +2223,24 @@ typedef struct _RTMP_ADAPTER + + + ++ ++ ++ ++ ++ UINT8 FlgCtsEnabled; + UINT8 PM_FlgSuspend; + +-#ifdef RT2870 ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT + BOOLEAN bUseEfuse; +-#endif +-} RTMP_ADAPTER, *PRTMP_ADAPTER; ++ BOOLEAN bEEPROMFile; ++ BOOLEAN bFroceEEPROMBuffer; ++ UCHAR EEPROMImage[1024]; ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // ++}; ++ + +-// +-// Cisco IAPP format +-// +-typedef struct _CISCO_IAPP_CONTENT_ +-{ +- USHORT Length; //IAPP Length +- UCHAR MessageType; //IAPP type +- UCHAR FunctionCode; //IAPP function type +- UCHAR DestinaionMAC[MAC_ADDR_LEN]; +- UCHAR SourceMAC[MAC_ADDR_LEN]; +- USHORT Tag; //Tag(element IE) - Adjacent AP report +- USHORT TagLength; //Length of element not including 4 byte header +- UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 +- UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point +- USHORT Channel; +- USHORT SsidLen; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT Seconds; //Seconds that the client has been disassociated. +-} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; + + #define DELAYINTMASK 0x0003fffb + #define INTMASK 0x0003fffb +@@ -2976,8 +2258,12 @@ typedef struct _CISCO_IAPP_CONTENT_ + #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt + + ++/*************************************************************************** ++ * Rx Path software control block related data structures ++ **************************************************************************/ + typedef struct _RX_BLK_ + { ++// RXD_STRUC RxD; // sample + RT28XX_RXD_STRUC RxD; + PRXWI_STRUC pRxWI; + PHEADER_802_11 pHeader; +@@ -3012,6 +2298,10 @@ typedef struct _RX_BLK_ + #define LENGTH_ARALINK_SUBFRAMEHEAD 14 + #define LENGTH_ARALINK_HEADER_FIELD 2 + ++ ++/*************************************************************************** ++ * Tx Path software control block related data structures ++ **************************************************************************/ + #define TX_UNKOWN_FRAME 0x00 + #define TX_MCAST_FRAME 0x01 + #define TX_LEGACY_FRAME 0x02 +@@ -3040,7 +2330,9 @@ typedef struct _TX_BLK_ + PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss + UINT SrcBufLen; // Length of packet payload which not including Layer 2 header + PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required +- UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP ++ UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP ++ //RT2870 2.1.0.0 uses only 80 bytes ++ //RT3070 2.1.1.0 uses only 96 bytes + UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding + UCHAR HdrPadLen; // recording Header Padding Length; + UCHAR apidx; // The interface associated to this packet +@@ -3069,17 +2361,8 @@ typedef struct _TX_BLK_ + #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment + #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue + #define fTX_bWMM 0x0080 // QOS Data +- + #define fTX_bClearEAPFrame 0x0100 + +-#define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \ +- do { \ +- if (value) \ +- (_pTxBlk->Flags |= _flag) \ +- else \ +- (_pTxBlk->Flags &= ~(_flag)) \ +- }while(0) +- + #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag) + #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0) + #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag)) +@@ -3088,42 +2371,10 @@ typedef struct _TX_BLK_ + + + +-//------------------------------------------------------------------------------------------ +- +-#ifdef RT2860 +-// +-// Enable & Disable NIC interrupt via writing interrupt mask register +-// Since it use ADAPTER structure, it have to be put after structure definition. +-// +-__inline VOID NICDisableInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable +- //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here. +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +-} +- +-__inline VOID NICEnableInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- // +- // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp +- // To prevent System hang, we should enalbe the interrupt when +- // ASIC is already Wake Up. +- // +- // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. +- // RT2860 => when ASIC is sleeping, MAC register can be read and written. +- //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable +- } +- //else +- // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); +- +- //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +-} + ++/*************************************************************************** ++ * Other static inline function definitions ++ **************************************************************************/ + static inline VOID ConvertMulticastIP2MAC( + IN PUCHAR pIpAddr, + IN PUCHAR *ppMacAddr, +@@ -3161,37 +2412,59 @@ static inline VOID ConvertMulticastIP2MAC( + + return; + } +-#endif /* RT2860 */ ++ ++ ++char *GetPhyMode(int Mode); ++char* GetBW(int BW); + + // + // Private routines in rtmp_init.c + // + NDIS_STATUS RTMPAllocAdapterBlock( + IN PVOID handle, +- OUT PRTMP_ADAPTER *ppAdapter +- ); ++ OUT PRTMP_ADAPTER *ppAdapter); + + NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd +- ); ++ IN PRTMP_ADAPTER pAd); + + NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd +- ); ++ IN PRTMP_ADAPTER pAd); ++ ++NDIS_STATUS RTMPSetProfileParameters( ++ IN RTMP_ADAPTER *pAd, ++ IN PSTRING pBuffer); ++ ++INT RTMPGetKeyParameter( ++ IN PSTRING key, ++ OUT PSTRING dest, ++ IN INT destsize, ++ IN PSTRING buffer, ++ IN BOOLEAN bTrimSpace); + + VOID RTMPFreeAdapter( +- IN PRTMP_ADAPTER pAd +- ); ++ IN PRTMP_ADAPTER pAd); + + NDIS_STATUS NICReadRegParameters( + IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext +- ); ++ IN NDIS_HANDLE WrapperConfigurationContext); + +-#ifdef RT2870 +-VOID NICInitRT30xxRFRegisters( ++#ifdef RTMP_RF_RW_SUPPORT ++VOID NICInitRFRegisters( + IN PRTMP_ADAPTER pAd); +-#endif // RT2870 // ++ ++VOID RtmpChipOpsRFHook( ++ IN RTMP_ADAPTER *pAd); ++ ++NDIS_STATUS RT30xxWriteRFRegister( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, ++ IN UCHAR value); ++ ++NDIS_STATUS RT30xxReadRFRegister( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, ++ IN PUCHAR pValue); ++#endif // RTMP_RF_RW_SUPPORT // + + VOID NICReadEEPROMParameters( + IN PRTMP_ADAPTER pAd, +@@ -3200,8 +2473,6 @@ VOID NICReadEEPROMParameters( + VOID NICInitAsicFromEEPROM( + IN PRTMP_ADAPTER pAd); + +-VOID NICInitTxRxRingAndBacklogQueue( +- IN PRTMP_ADAPTER pAd); + + NDIS_STATUS NICInitializeAdapter( + IN PRTMP_ADAPTER pAd, +@@ -3210,10 +2481,7 @@ NDIS_STATUS NICInitializeAdapter( + NDIS_STATUS NICInitializeAsic( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN bHardReset); +-#ifdef RT2860 +-VOID NICRestoreBBPValue( +- IN PRTMP_ADAPTER pAd); +-#endif ++ + VOID NICIssueReset( + IN PRTMP_ADAPTER pAd); + +@@ -3227,10 +2495,10 @@ VOID UserCfgInit( + VOID NICResetFromError( + IN PRTMP_ADAPTER pAd); + +-VOID NICEraseFirmware( ++NDIS_STATUS NICLoadFirmware( + IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICLoadFirmware( ++VOID NICEraseFirmware( + IN PRTMP_ADAPTER pAd); + + NDIS_STATUS NICLoadRateSwitchingParams( +@@ -3245,10 +2513,6 @@ VOID NICUpdateFifoStaCounters( + VOID NICUpdateRawCounters( + IN PRTMP_ADAPTER pAd); + +-ULONG RTMPNotAllZero( +- IN PVOID pSrc1, +- IN ULONG Length); +- + VOID RTMPZeroMemory( + IN PVOID pSrc, + IN ULONG Length); +@@ -3264,8 +2528,8 @@ VOID RTMPMoveMemory( + IN ULONG Length); + + VOID AtoH( +- char *src, +- UCHAR *dest, ++ PSTRING src, ++ PUCHAR dest, + int destlen); + + UCHAR BtoH( +@@ -3383,6 +2647,7 @@ VOID SendRefreshBAR( + IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY *pEntry); + ++ + VOID ActHeaderInit( + IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +@@ -3444,6 +2709,7 @@ BOOLEAN PeerIsAggreOn( + IN ULONG TxRate, + IN PMAC_TABLE_ENTRY pMacEntry); + ++ + NDIS_STATUS Sniff2BytesFromNdisBuffer( + IN PNDIS_BUFFER pFirstBuffer, + IN UCHAR DesiredOffset, +@@ -3498,11 +2764,24 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + IN UCHAR QueIdx, + IN PNDIS_PACKET pPacket); + ++#ifdef RTMP_MAC_PCI + NDIS_STATUS MlmeHardTransmitTxRing( + IN PRTMP_ADAPTER pAd, + IN UCHAR QueIdx, + IN PNDIS_PACKET pPacket); + ++NDIS_STATUS MlmeDataHardTransmit( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket); ++ ++VOID RTMPWriteTxDescriptor( ++ IN PRTMP_ADAPTER pAd, ++ IN PTXD_STRUC pTxD, ++ IN BOOLEAN bWIV, ++ IN UCHAR QSEL); ++#endif // RTMP_MAC_PCI // ++ + USHORT RTMPCalcDuration( + IN PRTMP_ADAPTER pAd, + IN UCHAR Rate, +@@ -3539,12 +2818,6 @@ VOID RTMPWriteTxWI_Cache( + IN OUT PTXWI_STRUC pTxWI, + IN TX_BLK *pTxBlk); + +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QSEL); +- + VOID RTMPSuspendMsduTransmission( + IN PRTMP_ADAPTER pAd); + +@@ -3557,6 +2830,9 @@ NDIS_STATUS MiniportMMRequest( + IN PUCHAR pData, + IN UINT Length); + ++//+++mark by shiang, now this function merge to MiniportMMRequest() ++//---mark by shiang, now this function merge to MiniportMMRequest() ++ + VOID RTMPSendNullFrame( + IN PRTMP_ADAPTER pAd, + IN UCHAR TxRate, +@@ -3593,6 +2869,16 @@ VOID WpaDisassocApAndBlockAssoc( + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); + ++VOID WpaStaPairwiseKeySetting( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID WpaStaGroupKeySetting( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID WpaSendEapolStart( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PUCHAR pBssid); ++ + NDIS_STATUS RTMPCloneNdisPacket( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, +@@ -3713,6 +2999,9 @@ VOID AsicRfTuningExec( + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); + ++VOID AsicResetBBPAgent( ++ IN PRTMP_ADAPTER pAd); ++ + VOID AsicSleepThenAutoWakeup( + IN PRTMP_ADAPTER pAd, + IN USHORT TbttNumToNextWakeUp); +@@ -3722,12 +3011,7 @@ VOID AsicForceSleep( + + VOID AsicForceWakeup( + IN PRTMP_ADAPTER pAd, +-#ifdef RT2860 +- IN UCHAR Level); +-#endif +-#ifdef RT2870 + IN BOOLEAN bFromTx); +-#endif + + VOID AsicSetBssid( + IN PRTMP_ADAPTER pAd, +@@ -3821,11 +3105,14 @@ BOOLEAN AsicSendCommandToMcu( + IN UCHAR Token, + IN UCHAR Arg0, + IN UCHAR Arg1); +-#ifdef RT2860 ++ ++ ++#ifdef RTMP_MAC_PCI + BOOLEAN AsicCheckCommanOk( + IN PRTMP_ADAPTER pAd, + IN UCHAR Command); +-#endif ++#endif // RTMP_MAC_PCI // ++ + VOID MacAddrRandomBssid( + IN PRTMP_ADAPTER pAd, + OUT PUCHAR pAddr); +@@ -3871,6 +3158,11 @@ ULONG BssTableSearchWithSSID( + IN UCHAR SsidLen, + IN UCHAR Channel); + ++ULONG BssSsidTableSearchBySSID( ++ IN BSS_TABLE *Tab, ++ IN PUCHAR pSsid, ++ IN UCHAR SsidLen); ++ + VOID BssTableDeleteEntry( + IN OUT PBSS_TABLE pTab, + IN PUCHAR pBssid, +@@ -4095,9 +3387,6 @@ VOID Cls3errAction( + IN PRTMP_ADAPTER pAd, + IN PUCHAR pAddr); + +-VOID SwitchBetweenWepAndCkip( +- IN PRTMP_ADAPTER pAd); +- + VOID InvalidStateWhenAssoc( + IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM *Elem); +@@ -4110,12 +3399,12 @@ VOID InvalidStateWhenDisassociate( + IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM *Elem); + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + VOID MlmeCntlConfirm( + IN PRTMP_ADAPTER pAd, + IN ULONG MsgType, + IN USHORT Msg); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + VOID ComposePsPoll( + IN PRTMP_ADAPTER pAd); +@@ -4325,7 +3614,7 @@ VOID AssocParmFill( + VOID ScanParmFill( + IN PRTMP_ADAPTER pAd, + IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN CHAR Ssid[], ++ IN STRING Ssid[], + IN UCHAR SsidLen, + IN UCHAR BssType, + IN UCHAR ScanType); +@@ -4396,7 +3685,7 @@ VOID ScanNextChannel( + ULONG MakeIbssBeacon( + IN PRTMP_ADAPTER pAd); + +-VOID CCXAdjacentAPReport( ++VOID InitChannelRelatedValue( + IN PRTMP_ADAPTER pAd); + + BOOLEAN MlmeScanReqSanity( +@@ -4527,6 +3816,13 @@ BOOLEAN PeerDisassocSanity( + OUT PUCHAR pAddr2, + OUT USHORT *Reason); + ++BOOLEAN PeerWpaMessageSanity( ++ IN PRTMP_ADAPTER pAd, ++ IN PEAPOL_PACKET pMsg, ++ IN ULONG MsgLen, ++ IN UCHAR MsgType, ++ IN MAC_TABLE_ENTRY *pEntry); ++ + BOOLEAN PeerDeauthSanity( + IN PRTMP_ADAPTER pAd, + IN VOID *Msg, +@@ -4570,7 +3866,7 @@ BOOLEAN MlmeAddBAReqSanity( + OUT PUCHAR pAddr2); + + ULONG MakeOutgoingFrame( +- OUT CHAR *Buffer, ++ OUT UCHAR *Buffer, + OUT ULONG *Length, ...); + + VOID LfsrInit( +@@ -4613,9 +3909,8 @@ VOID MlmeCheckForRoaming( + IN PRTMP_ADAPTER pAd, + IN ULONG Now32); + +-VOID MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now); ++BOOLEAN MlmeCheckForFastRoaming( ++ IN PRTMP_ADAPTER pAd); + + VOID MlmeDynamicTxRateSwitching( + IN PRTMP_ADAPTER pAd); +@@ -4634,6 +3929,7 @@ VOID MlmeSelectTxRateTable( + + VOID MlmeCalculateChannelQuality( + IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, + IN ULONG Now); + + VOID MlmeCheckPsmChange( +@@ -4691,10 +3987,91 @@ CHAR RTMPMaxRssi( + IN CHAR Rssi1, + IN CHAR Rssi2); + ++#ifdef RT30xx + VOID AsicSetRxAnt( + IN PRTMP_ADAPTER pAd, + IN UCHAR Ant); + ++VOID RTMPFilterCalibration( ++ IN PRTMP_ADAPTER pAd); ++ ++#ifdef RTMP_EFUSE_SUPPORT ++//2008/09/11:KH add to support efuse<-- ++INT set_eFuseGetFreeBlockCount_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT set_eFusedump_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT set_eFuseLoadFromBin_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++VOID eFusePhysicalReadRegisters( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, ++ OUT USHORT* pData); ++ ++int RtmpEfuseSupportCheck( ++ IN RTMP_ADAPTER *pAd); ++ ++INT set_eFuseBufferModeWriteBack_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT eFuseLoadEEPROM( ++ IN PRTMP_ADAPTER pAd); ++ ++INT eFuseWriteEeeppromBuf( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, ++ PUINT EfuseFreeBlock); ++ ++INT eFuse_init( ++ IN PRTMP_ADAPTER pAd); ++ ++NTSTATUS eFuseRead( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ OUT PUCHAR pData, ++ IN USHORT Length); ++ ++NTSTATUS eFuseWrite( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN PUCHAR pData, ++ IN USHORT length); ++//2008/09/11:KH add to support efuse--> ++#endif // RTMP_EFUSE_SUPPORT // ++ ++// add by johnli, RF power sequence setup ++VOID RT30xxLoadRFNormalModeSetup( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID RT30xxLoadRFSleepModeSetup( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID RT30xxReverseRFSleepModeSetup( ++ IN PRTMP_ADAPTER pAd); ++// end johnli ++ ++#ifdef RT3070 ++VOID NICInitRT3070RFRegisters( ++ IN RTMP_ADAPTER *pAd); ++#endif // RT3070 // ++ ++VOID RT30xxHaltAction( ++ IN PRTMP_ADAPTER pAd); ++ ++VOID RT30xxSetRxAnt( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Ant); ++#endif // RT30xx // ++ + VOID AsicEvaluateRxAnt( + IN PRTMP_ADAPTER pAd); + +@@ -4751,15 +4128,6 @@ VOID ChangeToCellPowerLimit( + IN PRTMP_ADAPTER pAd, + IN UCHAR AironetCellPowerLimit); + +-USHORT RTMP_EEPROM_READ16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset); +- +-VOID RTMP_EEPROM_WRITE16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Data); +- + // + // Prototypes of function definition in rtmp_tkip.c + // +@@ -4797,15 +4165,6 @@ VOID RTMPCalculateMICValue( + IN PCIPHER_KEY pKey, + IN UCHAR apidx); + +-BOOLEAN RTMPTkipCompareMICValueWithLLC( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pLLC, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UINT Len); +- + VOID RTMPTkipAppendByte( + IN PTKIP_KEY_INFO pTkip, + IN UCHAR uChar); +@@ -4831,6 +4190,39 @@ BOOLEAN RTMPSoftDecryptAES( + IN ULONG DataByteCnt, + IN PCIPHER_KEY pWpaKey); + ++ ++ ++// ++// Prototypes of function definition in cmm_info.c ++// ++INT RT_CfgSetCountryRegion( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg, ++ IN INT band); ++ ++INT RT_CfgSetWirelessMode( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT RT_CfgSetShortSlot( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT RT_CfgSetWepKey( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING keyString, ++ IN CIPHER_KEY *pSharedKey, ++ IN INT keyIdx); ++ ++INT RT_CfgSetWPAPSKKey( ++ IN RTMP_ADAPTER *pAd, ++ IN PSTRING keyString, ++ IN UCHAR *pHashStr, ++ IN INT hashStrLen, ++ OUT PUCHAR pPMKBuf); ++ ++ ++ + // + // Prototypes of function definition in cmm_info.c + // +@@ -4862,26 +4254,12 @@ VOID RTMPAddWcidAttributeEntry( + IN UCHAR CipherAlg, + IN MAC_TABLE_ENTRY *pEntry); + +-CHAR *GetEncryptType( ++PSTRING GetEncryptType( + CHAR enc); + +-CHAR *GetAuthMode( ++PSTRING GetAuthMode( + CHAR auth); + +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlGetMacTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPAddBSSIDCipher( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Aid, +- IN PNDIS_802_11_KEY pKey, +- IN UCHAR CipherAlg); +- + VOID RTMPSetHT( + IN PRTMP_ADAPTER pAd, + IN OID_SET_HT_PHYMODE *pHTPhyMode); +@@ -4897,88 +4275,24 @@ VOID RTMPSendWirelessEvent( + IN UCHAR BssIdx, + IN CHAR Rssi); + +-// +-// prototype in wpa.c +-// +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType); +- +-VOID WpaPskStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID WpaPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID WpaPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID WpaGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID WpaMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR wep, +- IN PUCHAR pAddr1); +- +-VOID Wpa2PairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Wpa2PairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-BOOLEAN ParseKeyData( ++CHAR ConvertToRssi( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR bPairewise); ++ IN CHAR Rssi, ++ IN UCHAR RssiNumber); + ++/*=================================== ++ Function prototype in cmm_wpa.c ++ =================================== */ + VOID RTMPToWirelessSta( + IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, + IN PUCHAR pHeader802_3, + IN UINT HdrLen, + IN PUCHAR pData, + IN UINT DataLen, +- IN BOOLEAN is4wayFrame); +- +-VOID HMAC_SHA1( +- IN UCHAR *text, +- IN UINT text_len, +- IN UCHAR *key, +- IN UINT key_len, +- IN UCHAR *digest); ++ IN BOOLEAN bClearFrame); + +-VOID PRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *prefix, +- IN INT prefix_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len); +- +-VOID CCKMPRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len); +- +-VOID WpaCountPTK( ++VOID WpaDerivePTK( + IN PRTMP_ADAPTER pAd, + IN UCHAR *PMK, + IN UCHAR *ANonce, +@@ -4993,95 +4307,129 @@ VOID GenRandom( + IN UCHAR *macAddr, + OUT UCHAR *random); + +-// +-// prototype in aironet.c +-// +-VOID AironetStateMachineInit( ++BOOLEAN RTMPCheckWPAframe( + IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pData, ++ IN ULONG DataByteCount, ++ IN UCHAR FromWhichBSSID); + +-VOID AironetMsgAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID AES_GTK_KEY_UNWRAP( ++ IN UCHAR *key, ++ OUT UCHAR *plaintext, ++ IN UINT32 c_len, ++ IN UCHAR *ciphertext); + +-VOID AironetRequestAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++BOOLEAN RTMPParseEapolKeyData( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKeyData, ++ IN UCHAR KeyDataLen, ++ IN UCHAR GroupKeyIndex, ++ IN UCHAR MsgType, ++ IN BOOLEAN bWPA2, ++ IN MAC_TABLE_ENTRY *pEntry); ++ ++VOID ConstructEapolMsg( ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR *KeyNonce, ++ IN UCHAR *TxRSC, ++ IN UCHAR *GTK, ++ IN UCHAR *RSNIE, ++ IN UCHAR RSNIE_Len, ++ OUT PEAPOL_PACKET pMsg); ++ ++NDIS_STATUS RTMPSoftDecryptBroadCastData( ++ IN PRTMP_ADAPTER pAd, ++ IN RX_BLK *pRxBlk, ++ IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, ++ IN PCIPHER_KEY pShard_key); + +-VOID ChannelLoadRequestAction( ++VOID RTMPMakeRSNIE( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN UINT AuthMode, ++ IN UINT WepStatus, ++ IN UCHAR apidx); + +-VOID NoiseHistRequestAction( ++// ++// function prototype in ap_wpa.c ++// ++VOID RTMPGetTxTscFromAsic( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN UCHAR apidx, ++ OUT PUCHAR pTxTsc); + +-VOID BeaconRequestAction( ++VOID APInstallPairwiseKey( ++ PRTMP_ADAPTER pAd, ++ PMAC_TABLE_ENTRY pEntry); ++ ++UINT APValidateRSNIE( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pRsnIe, ++ IN UCHAR rsnie_len); + +-VOID AironetReportAction( ++VOID HandleCounterMeasure( + IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++ IN MAC_TABLE_ENTRY *pEntry); + +-VOID ChannelLoadReportAction( ++VOID WPAStart4WayHS( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN ULONG TimeInterval); + +-VOID NoiseHistReportAction( ++VOID WPAStart2WayGroupHS( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN MAC_TABLE_ENTRY *pEntry); + +-VOID AironetFinalReportAction( +- IN PRTMP_ADAPTER pAd); ++VOID PeerPairMsg1Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem); + +-VOID BeaconReportAction( ++VOID PeerPairMsg2Action( + IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem); + +-VOID AironetAddBeaconReport( ++VOID PeerPairMsg3Action( + IN PRTMP_ADAPTER pAd, +- IN ULONG Index, +- IN PMLME_QUEUE_ELEM pElem); ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem); + +-VOID AironetCreateBeaconReportFromBssTable( +- IN PRTMP_ADAPTER pAd); ++VOID PeerPairMsg4Action( ++ IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY *pEntry, ++ IN MLME_QUEUE_ELEM *Elem); + +-CHAR ConvertToRssi( ++VOID PeerGroupMsg1Action( + IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber); ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN MLME_QUEUE_ELEM *Elem); + +-// +-// function prototype in cmm_wpa.c +-// +-BOOLEAN RTMPCheckWPAframe( ++VOID PeerGroupMsg2Action( + IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, +- IN UCHAR FromWhichBSSID); ++ IN VOID *Msg, ++ IN UINT MsgLen); + +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UCHAR c_len, +- IN UCHAR *ciphertext); ++VOID WpaDeriveGTK( ++ IN UCHAR *PMK, ++ IN UCHAR *GNonce, ++ IN UCHAR *AA, ++ OUT UCHAR *output, ++ IN UINT len); + +-VOID RTMPMakeRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, +- IN UINT WepStatus, +- IN UCHAR apidx); ++VOID AES_GTK_KEY_WRAP( ++ IN UCHAR *key, ++ IN UCHAR *plaintext, ++ IN UINT32 p_len, ++ OUT UCHAR *ciphertext); + +-// +-// function prototype in ap_wpa.c +-// ++//typedef void (*TIMER_FUNCTION)(unsigned long); + +-VOID HandleCounterMeasure( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); + + /* timeout -- ms */ + VOID RTMP_SetPeriodicTimer( +@@ -5116,13 +4464,13 @@ VOID RTMPusecDelay( + IN ULONG usec); + + NDIS_STATUS os_alloc_mem( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR *mem, ++ IN RTMP_ADAPTER *pAd, ++ OUT UCHAR **mem, + IN ULONG size); + + NDIS_STATUS os_free_mem( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR mem); ++ IN PVOID mem); + + + void RTMP_AllocateSharedMemory( +@@ -5155,6 +4503,13 @@ void RTMP_AllocateFirstTxBuffer( + OUT PVOID *VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + ++void RTMP_FreeFirstTxBuffer( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ + void RTMP_AllocateMgmtDescMemory( + IN PRTMP_ADAPTER pAd, + IN ULONG Length, +@@ -5169,6 +4524,16 @@ void RTMP_AllocateRxDescMemory( + OUT PVOID *VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + ++void RTMP_FreeDescMemory( ++ IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ ++PNDIS_PACKET RtmpOSNetPktAlloc( ++ IN RTMP_ADAPTER *pAd, ++ IN int size); ++ + PNDIS_PACKET RTMP_AllocateRxPacketBuffer( + IN PRTMP_ADAPTER pAd, + IN ULONG Length, +@@ -5279,203 +4644,210 @@ VOID BARecSessionTearDown( + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); + void ba_reordering_resource_release(PRTMP_ADAPTER pAd); + ++ ++ ++ + BOOLEAN rtstrmactohex( +- IN char *s1, +- IN char *s2); ++ IN PSTRING s1, ++ IN PSTRING s2); + + BOOLEAN rtstrcasecmp( +- IN char *s1, +- IN char *s2); ++ IN PSTRING s1, ++ IN PSTRING s2); + +-char *rtstrstruncasecmp( +- IN char *s1, +- IN char *s2); ++PSTRING rtstrstruncasecmp( ++ IN PSTRING s1, ++ IN PSTRING s2); + +-char *rtstrstr( +- IN const char * s1, +- IN const char * s2); ++PSTRING rtstrstr( ++ IN const PSTRING s1, ++ IN const PSTRING s2); + +-char *rstrtok( +- IN char * s, +- IN const char * ct); ++PSTRING rstrtok( ++ IN PSTRING s, ++ IN const PSTRING ct); + + int rtinet_aton( +- const char *cp, ++ const PSTRING cp, + unsigned int *addr); + + ////////// common ioctl functions ////////// + INT Set_DriverVersion_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_CountryRegion_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_CountryRegionABand_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_WirelessMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Channel_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_ShortSlot_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_TxPower_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_BGProtection_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_TxPreamble_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_RTSThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_FragThreshold_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_TxBurst_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + #ifdef AGGREGATION_SUPPORT + INT Set_PktAggregate_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +-#endif ++ IN PSTRING arg); ++#endif // AGGREGATION_SUPPORT // + + INT Set_IEEE80211H_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + #ifdef DBG + INT Set_Debug_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + #endif + + INT Show_DescInfo_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_ResetStatCounter_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_BASetup_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_BADecline_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_BAOriTearDown_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_BARecTearDown_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtBw_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtMcs_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtGi_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtOpMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtStbc_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtHtc_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtExtcha_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtMpduDensity_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtBaWinSize_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtRdg_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtLinkAdapt_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtAmsdu_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtAutoBa_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtProtect_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtMimoPs_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + + INT Set_ForceShortGI_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_ForceGF_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT SetCommonHT( + IN PRTMP_ADAPTER pAd); + + INT Set_SendPSMPAction_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_HtMIMOPSmode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + + INT Set_HtTxBASize_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); ++ ++INT Set_HtDisallowTKIP_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); + + INT WpaCheckEapCode( + IN PRTMP_ADAPTER pAd, +@@ -5528,12 +4900,6 @@ void wlan_802_11_to_802_3_packet( + IN PUCHAR pHeader802_3, + IN UCHAR FromWhichBSSID); + +-UINT deaggregate_AMSDU_announce( +- IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize); +- + // remove LLC and get 802_3 Header + #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ + { \ +@@ -5604,11 +4970,28 @@ VOID Update_Rssi_Sample( + IN RSSI_SAMPLE *pRssi, + IN PRXWI_STRUC pRxWI); + ++PNDIS_PACKET GetPacketFromRxRing( ++ IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN *pbReschedule, ++ IN OUT UINT32 *pRxPending); ++ + PNDIS_PACKET RTMPDeFragmentDataFrame( + IN PRTMP_ADAPTER pAd, + IN RX_BLK *pRxBlk); + + //////////////////////////////////////// ++ ++VOID RTMPIoctlGetSiteSurvey( ++ IN PRTMP_ADAPTER pAdapter, ++ IN struct iwreq *wrq); ++ ++ ++ ++ ++ ++ ++ + enum { + DIDmsg_lnxind_wlansniffrm = 0x00000044, + DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, +@@ -5712,9 +5095,6 @@ void send_monitor_packets( + IN PRTMP_ADAPTER pAd, + IN RX_BLK *pRxBlk); + +-// This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev); + + VOID RTMPSetDesiredRates( + IN PRTMP_ADAPTER pAdapter, +@@ -5722,62 +5102,20 @@ VOID RTMPSetDesiredRates( + + INT Set_FixedTxMode_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-static inline char* GetPhyMode( +- int Mode) +-{ +- switch(Mode) +- { +- case MODE_CCK: +- return "CCK"; ++ IN PSTRING arg); + +- case MODE_OFDM: +- return "OFDM"; +- case MODE_HTMIX: +- return "HTMIX"; +- +- case MODE_HTGREENFIELD: +- return "GREEN"; +- default: +- return "N/A"; +- } +-} +- +- +-static inline char* GetBW( +- int BW) +-{ +- switch(BW) +- { +- case BW_10: +- return "10M"; +- +- case BW_20: +- return "20M"; +- case BW_40: +- return "40M"; +- default: +- return "N/A"; +- } +-} + ++INT Set_LongRetryLimit_Proc( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PSTRING arg); + +-VOID RT28xxThreadTerminate( +- IN RTMP_ADAPTER *pAd); ++INT Set_ShortRetryLimit_Proc( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PSTRING arg); + + BOOLEAN RT28XXChipsetCheck( + IN void *_dev_p); + +-BOOLEAN RT28XXNetDevInit( +- IN void *_dev_p, +- IN struct net_device *net_dev, +- IN RTMP_ADAPTER *pAd); +- +-BOOLEAN RT28XXProbePostConfig( +- IN void *_dev_p, +- IN RTMP_ADAPTER *pAd, +- IN INT32 argc); + + VOID RT28XXDMADisable( + IN RTMP_ADAPTER *pAd); +@@ -5791,26 +5129,45 @@ VOID RT28xx_UpdateBeaconToAsic( + IN ULONG BeaconLen, + IN ULONG UpdatePos); + +-INT rt28xx_sta_ioctl( +- IN struct net_device *net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd); +- +-//////////////////////////////////////// +-PNDIS_PACKET GetPacketFromRxRing( ++int rt28xx_init( + IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending); ++ IN PSTRING pDefaultMac, ++ IN PSTRING pHostName); ++ ++NDIS_STATUS RtmpNetTaskInit( ++ IN RTMP_ADAPTER *pAd); + ++VOID RtmpNetTaskExit( ++ IN PRTMP_ADAPTER pAd); ++ ++NDIS_STATUS RtmpMgmtTaskInit( ++ IN RTMP_ADAPTER *pAd); + +-void kill_thread_task(PRTMP_ADAPTER pAd); ++VOID RtmpMgmtTaskExit( ++ IN RTMP_ADAPTER *pAd); + + void tbtt_tasklet(unsigned long data); + +-#ifdef RT2860 ++ ++PNET_DEV RtmpPhyNetDevInit( ++ IN RTMP_ADAPTER *pAd, ++ IN RTMP_OS_NETDEV_OP_HOOK *pNetHook); ++ ++BOOLEAN RtmpPhyNetDevExit( ++ IN RTMP_ADAPTER *pAd, ++ IN PNET_DEV net_dev); ++ ++INT RtmpRaDevCtrlInit( ++ IN RTMP_ADAPTER *pAd, ++ IN RTMP_INF_TYPE infType); ++ ++BOOLEAN RtmpRaDevCtrlExit( ++ IN RTMP_ADAPTER *pAd); ++ ++ ++#ifdef RTMP_MAC_PCI + // +-// Function Prototype in cmm_data_2860.c ++// Function Prototype in cmm_data_pci.c + // + USHORT RtmpPCI_WriteTxResource( + IN PRTMP_ADAPTER pAd, +@@ -5873,6 +5230,16 @@ NDIS_STATUS RTMPCheckRxError( + IN PRXWI_STRUC pRxWI, + IN PRT28XX_RXD_STRUC pRxD); + ++BOOLEAN RT28xxPciAsicRadioOff( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level, ++ IN USHORT TbttNumToNextWakeUp); ++ ++BOOLEAN RT28xxPciAsicRadioOn( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level); ++ ++#ifdef RTMP_PCI_SUPPORT + VOID RTMPInitPCIeLinkCtrlValue( + IN PRTMP_ADAPTER pAd); + +@@ -5887,23 +5254,6 @@ VOID RTMPPCIeLinkCtrlSetting( + IN PRTMP_ADAPTER pAd, + IN USHORT Max); + +-VOID RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp); +- +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- + VOID PsPollWakeExec( + IN PVOID SystemSpecific1, + IN PVOID FunctionContext, +@@ -5915,112 +5265,25 @@ VOID RadioOnExec( + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); ++#endif // RTMP_PCI_SUPPORT // + +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd); +-#endif /* RT2860 */ +- +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); +- +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); +- +-NTSTATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RegID, +- IN UCHAR Value); +- +-NTSTATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RegID, +- IN PUCHAR pValue); +- +-UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize +-); +- +-NTSTATUS eFuseRead( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT Length); +- +-VOID eFusePhysicalWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-NTSTATUS eFuseWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); +- +-VOID eFuseWritePhysical( +- IN PRTMP_ADAPTER pAd, +- PUSHORT lpInBuffer, +- ULONG nInBufferSize, +- PUCHAR lpOutBuffer, +- ULONG nOutBufferSize +-); +- +-NTSTATUS eFuseWrite( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length); +- +-INT set_eFuseGetFreeBlockCount_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-INT set_eFuseLoadFromBin_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-NTSTATUS eFuseWriteRegistersFromBin( ++VOID RT28xxPciStaAsicForceWakeup( + IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); ++ IN BOOLEAN bFromTx); + +-VOID eFusePhysicalReadRegisters( ++VOID RT28xxPciStaAsicSleepThenAutoWakeup( + IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); ++ IN USHORT TbttNumToNextWakeUp); + +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd); + +-VOID RT30xxLoadRFSleepModeSetup( ++VOID RT28xxPciMlmeRadioOn( + IN PRTMP_ADAPTER pAd); + +-VOID RT30xxReverseRFSleepModeSetup( ++VOID RT28xxPciMlmeRadioOFF( + IN PRTMP_ADAPTER pAd); ++#endif // RTMP_MAC_PCI // + +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + // + // Function Prototype in rtusb_bulk.c + // +@@ -6037,6 +5300,10 @@ VOID RTUSBInitHTTxDesc( + IN ULONG BulkOutSize, + IN usb_complete_t Func); + ++VOID RTUSBInitRxDesc( ++ IN PRTMP_ADAPTER pAd, ++ IN PRX_CONTEXT pRxContext); ++ + VOID RTUSBCleanUpDataBulkOutQueue( + IN PRTMP_ADAPTER pAd); + +@@ -6083,6 +5350,9 @@ VOID RTUSBInitRxDesc( + IN PRTMP_ADAPTER pAd, + IN PRX_CONTEXT pRxContext); + ++VOID RTUSBBulkRxHandle( ++ IN unsigned long data); ++ + // + // Function Prototype in rtusb_io.c + // +@@ -6168,36 +5438,19 @@ VOID RTUSBDequeueCmd( + INT RTUSBCmdThread( + IN OUT PVOID Context); + +-INT TimerQThread( +- IN OUT PVOID Context); +- +-RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); +- +-BOOLEAN RT2870_TimerQ_Remove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); +- +-void RT2870_TimerQ_Exit( ++VOID RTUSBBssBeaconExit( + IN RTMP_ADAPTER *pAd); + +-void RT2870_TimerQ_Init( ++VOID RTUSBBssBeaconStop( + IN RTMP_ADAPTER *pAd); + +-VOID RT2870_BssBeaconExit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RT2870_BssBeaconStop( +- IN RTMP_ADAPTER *pAd); +- +-VOID RT2870_BssBeaconStart( ++VOID RTUSBBssBeaconStart( + IN RTMP_ADAPTER * pAd); + +-VOID RT2870_BssBeaconInit( ++VOID RTUSBBssBeaconInit( + IN RTMP_ADAPTER *pAd); + +-VOID RT2870_WatchDog( ++VOID RTUSBWatchDog( + IN RTMP_ADAPTER *pAd); + + NTSTATUS RTUSBWriteMACRegister( +@@ -6215,28 +5468,27 @@ NTSTATUS RTUSBSingleWrite( + IN USHORT Offset, + IN USHORT Value); + +-NTSTATUS RTUSBFirmwareRun( +- IN PRTMP_ADAPTER pAd); +- + NTSTATUS RTUSBFirmwareWrite( + IN PRTMP_ADAPTER pAd, + IN PUCHAR pFwImage, + IN ULONG FwLen); + +-NTSTATUS RTUSBFirmwareOpmode( +- IN PRTMP_ADAPTER pAd, +- OUT PUINT32 pValue); +- + NTSTATUS RTUSBVenderReset( + IN PRTMP_ADAPTER pAd); + +-VOID CMDHandler( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS RTUSBSetHardWareRegister( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PVOID pBuf); + ++NDIS_STATUS RTUSBQueryHardWareRegister( ++ IN PRTMP_ADAPTER pAdapter, ++ IN PVOID pBuf); + +-NDIS_STATUS CreateThreads( +- IN struct net_device *net_dev ); ++VOID CMDHandler( ++ IN PRTMP_ADAPTER pAd); + ++NDIS_STATUS RTUSBWriteHWMACAddress( ++ IN PRTMP_ADAPTER pAdapter); + + VOID MacTableInitialize( + IN PRTMP_ADAPTER pAd); +@@ -6252,12 +5504,30 @@ NDIS_STATUS RTMPWPAAddKeyProc( + VOID AsicRxAntEvalAction( + IN PRTMP_ADAPTER pAd); + ++void append_pkt( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN ULONG DataSize, ++ OUT PNDIS_PACKET *ppPacket); ++ ++UINT deaggregate_AMSDU_announce( ++ IN PRTMP_ADAPTER pAd, ++ PNDIS_PACKET pPacket, ++ IN PUCHAR pData, ++ IN ULONG DataSize); ++ + NDIS_STATUS RTMPCheckRxError( + IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHeader, + IN PRXWI_STRUC pRxWI, + IN PRT28XX_RXD_STRUC pRxINFO); + ++VOID RTUSBMlmeHardTransmit( ++ IN PRTMP_ADAPTER pAd, ++ IN PMGMT_STRUC pMgmt); ++ + INT MlmeThread( + IN PVOID Context); + +@@ -6285,7 +5555,7 @@ VOID RTMPWriteTxInfo( + IN UCHAR TxBurst); + + // +-// Function Prototype in cmm_data_2870.c ++// Function Prototype in cmm_data_usb.c + // + USHORT RtmpUSB_WriteSubTxResource( + IN PRTMP_ADAPTER pAd, +@@ -6315,9 +5585,6 @@ VOID RtmpUSB_FinalWriteTxResource( + IN PRTMP_ADAPTER pAd, + IN TX_BLK *pTxBlk, + IN USHORT totalMPDUSize, +-#ifdef RT2860 +- IN USHORT FirstTxIdx); +-#endif + IN USHORT TxIdx); + + VOID RtmpUSBDataLastTxIdx( +@@ -6344,6 +5611,12 @@ VOID RtmpUSBNullFrameKickOut( + IN UCHAR *pNullFrame, + IN UINT32 frameLen); + ++VOID RtmpUsbStaAsicForceWakeupTimeout( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); ++ + VOID RT28xxUsbStaAsicForceWakeup( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN bFromTx); +@@ -6357,44 +5630,72 @@ VOID RT28xxUsbMlmeRadioOn( + + VOID RT28xxUsbMlmeRadioOFF( + IN PRTMP_ADAPTER pAd); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // ++ ++VOID AsicTurnOffRFClk( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel); + ++VOID AsicTurnOnRFClk( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel); ++ ++ ++ ++#ifdef RTMP_TIMER_TASK_SUPPORT ++INT RtmpTimerQThread( ++ IN OUT PVOID Context); ++ ++RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( ++ IN RTMP_ADAPTER *pAd, ++ IN RALINK_TIMER_STRUCT *pTimer); ++ ++BOOLEAN RtmpTimerQRemove( ++ IN RTMP_ADAPTER *pAd, ++ IN RALINK_TIMER_STRUCT *pTimer); ++ ++void RtmpTimerQExit( ++ IN RTMP_ADAPTER *pAd); ++ ++void RtmpTimerQInit( ++ IN RTMP_ADAPTER *pAd); ++#endif // RTMP_TIMER_TASK_SUPPORT // ++ ++/////////////////////////////////////// + INT RTMPShowCfgValue( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pName, +- IN PUCHAR pBuf); ++ IN PSTRING pName, ++ IN PSTRING pBuf); + +-PCHAR RTMPGetRalinkAuthModeStr( ++PSTRING RTMPGetRalinkAuthModeStr( + IN NDIS_802_11_AUTHENTICATION_MODE authMode); + +-PCHAR RTMPGetRalinkEncryModeStr( ++PSTRING RTMPGetRalinkEncryModeStr( + IN USHORT encryMode); ++////////////////////////////////////// + + VOID AsicStaBbpTuning( + IN PRTMP_ADAPTER pAd); + +-#ifdef RT2860 +-VOID AsicResetFromDMABusy( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicResetBBP( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicResetMAC( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicResetPBF( +- IN PRTMP_ADAPTER pAd); +-#endif +-#ifdef RT2870 + BOOLEAN StaAddMacTableEntry( + IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, + IN UCHAR MaxSupportedRateIn500Kbps, + IN HT_CAPABILITY_IE *pHtCapability, + IN UCHAR HtCapabilityLen, ++ IN ADD_HT_INFO_IE *pAddHtInfo, ++ IN UCHAR AddHtInfoLen, + IN USHORT CapabilityInfo); +-#endif ++ ++ ++BOOLEAN AUTH_ReqSend( ++ IN PRTMP_ADAPTER pAd, ++ IN PMLME_QUEUE_ELEM pElem, ++ IN PRALINK_TIMER_STRUCT pAuthTimer, ++ IN PSTRING pSMName, ++ IN USHORT SeqNo, ++ IN PUCHAR pNewElement, ++ IN ULONG ElementLen); + + void RTMP_IndicateMediaState( + IN PRTMP_ADAPTER pAd); +@@ -6409,13 +5710,23 @@ VOID RTMPSetAGCInitValue( + int rt28xx_close(IN PNET_DEV dev); + int rt28xx_open(IN PNET_DEV dev); + ++ ++#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) ++#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) ++#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) ++ ++ ++#ifdef LINUX + __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) + { + if (VIRTUAL_IF_NUM(pAd) == 0) + { + if (rt28xx_open(pAd->net_dev) != 0) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n")); + return -1; + } ++ } + else + { + } +@@ -6430,6 +5741,107 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + rt28xx_close(pAd->net_dev); + return; + } ++#endif // LINUX // ++ ++ ++/* ++ OS Related funciton prototype definitions. ++ TODO: Maybe we need to move these function prototypes to other proper place. ++*/ ++int RtmpOSWrielessEventSend( ++ IN RTMP_ADAPTER *pAd, ++ IN UINT32 eventType, ++ IN INT flags, ++ IN PUCHAR pSrcMac, ++ IN PUCHAR pData, ++ IN UINT32 dataLen); ++ ++int RtmpOSNetDevAddrSet( ++ IN PNET_DEV pNetDev, ++ IN PUCHAR pMacAddr); ++ ++int RtmpOSNetDevAttach( ++ IN PNET_DEV pNetDev, ++ IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook); ++ ++void RtmpOSNetDevClose( ++ IN PNET_DEV pNetDev); ++ ++void RtmpOSNetDevDetach( ++ IN PNET_DEV pNetDev); ++ ++INT RtmpOSNetDevAlloc( ++ IN PNET_DEV *pNewNetDev, ++ IN UINT32 privDataSize); ++ ++void RtmpOSNetDevFree( ++ IN PNET_DEV pNetDev); ++ ++PNET_DEV RtmpOSNetDevGetByName( ++ IN PNET_DEV pNetDev, ++ IN PSTRING pDevName); ++ ++void RtmpOSNetDeviceRefPut( ++ IN PNET_DEV pNetDev); ++ ++PNET_DEV RtmpOSNetDevCreate( ++ IN RTMP_ADAPTER *pAd, ++ IN INT devType, ++ IN INT devNum, ++ IN INT privMemSize, ++ IN PSTRING pNamePrefix); ++ ++/* ++ Task operation related function prototypes ++*/ ++void RtmpOSTaskCustomize( ++ IN RTMP_OS_TASK *pTask); ++ ++INT RtmpOSTaskNotifyToExit( ++ IN RTMP_OS_TASK *pTask); ++ ++NDIS_STATUS RtmpOSTaskKill( ++ IN RTMP_OS_TASK *pTask); ++ ++NDIS_STATUS RtmpOSTaskInit( ++ IN RTMP_OS_TASK *pTask, ++ PSTRING pTaskName, ++ VOID *pPriv); ++ ++NDIS_STATUS RtmpOSTaskAttach( ++ IN RTMP_OS_TASK *pTask, ++ IN int (*fn)(void *), ++ IN void *arg); ++ ++ ++/* ++ File operation related function prototypes ++*/ ++RTMP_OS_FD RtmpOSFileOpen( ++ IN char *pPath, ++ IN int flag, ++ IN int mode); ++ ++int RtmpOSFileClose( ++ IN RTMP_OS_FD osfd); ++ ++void RtmpOSFileSeek( ++ IN RTMP_OS_FD osfd, ++ IN int offset); ++ ++int RtmpOSFileRead( ++ IN RTMP_OS_FD osfd, ++ IN char *pDataPtr, ++ IN int readLen); ++ ++int RtmpOSFileWrite( ++ IN RTMP_OS_FD osfd, ++ IN char *pDataPtr, ++ IN int writeLen); ++ ++void RtmpOSFSInfoChange( ++ IN RTMP_OS_FS_INFO *pOSFSInfo, ++ IN BOOLEAN bSet); + + + #endif // __RTMP_H__ +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +new file mode 100644 +index 0000000..998960e +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -0,0 +1,265 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_chip.h ++ ++ Abstract: ++ Ralink Wireless Chip related definition & structures ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifndef __RTMP_CHIP_H__ ++#define __RTMP_CHIP_H__ ++ ++#include "rtmp_type.h" ++ ++#ifdef RT2860 ++#include "chip/rt2860.h" ++#endif // RT2860 // ++#ifdef RT2870 ++#include "chip/rt2870.h" ++#endif // RT2870 // ++#ifdef RT3070 ++#include "chip/rt3070.h" ++#endif // RT3070 // ++ ++// We will have a cost down version which mac version is 0x3090xxxx ++// ++// RT3090A facts ++// ++// a) 2.4 GHz ++// b) Replacement for RT3090 ++// c) Internal LNA ++// d) Interference over channel #14 ++// e) New BBP features (e.g., SIG re-modulation) ++// ++#define IS_RT3090A(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30900000)) ++ ++// We will have a cost down version which mac version is 0x3090xxxx ++#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (IS_RT3090A(_pAd))) ++ ++#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000) ++#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000) ++#define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27)) ++ ++#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000||IS_RT3090A(_pAd)) ++//#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) ++ ++/* RT3572, 3592, 3562, 3062 share the same MAC version */ ++#define IS_RT3572(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x35720000) ++#define IS_VERSION_BEFORE_F(_pAd) (((_pAd)->MACVersion&0xffff) <= 0x0211) ++// F version is 0x0212, E version is 0x0211. 309x can save more power after F version. ++#define IS_VERSION_AFTER_F(_pAd) ((((_pAd)->MACVersion&0xffff) >= 0x0212) || (((_pAd)->b3090ESpecialChip == TRUE))) ++// ++// RT3390 facts ++// ++// a) Base on RT3090 (RF IC: RT3020) ++// b) 2.4 GHz ++// c) 1x1 ++// d) Single chip ++// e) Internal components: PA and LNA ++// ++//RT3390,RT3370 ++#define IS_RT3390(_pAd) (((_pAd)->MACVersion & 0xFFFF0000) == 0x33900000) ++ ++// ------------------------------------------------------ ++// PCI registers - base address 0x0000 ++// ------------------------------------------------------ ++#define CHIP_PCI_CFG 0x0000 ++#define CHIP_PCI_EECTRL 0x0004 ++#define CHIP_PCI_MCUCTRL 0x0008 ++ ++#define OPT_14 0x114 ++ ++#define RETRY_LIMIT 10 ++ ++ ++ ++// ------------------------------------------------------ ++// BBP & RF definition ++// ------------------------------------------------------ ++#define BUSY 1 ++#define IDLE 0 ++ ++ ++//------------------------------------------------------------------------- ++// EEPROM definition ++//------------------------------------------------------------------------- ++#define EEDO 0x08 ++#define EEDI 0x04 ++#define EECS 0x02 ++#define EESK 0x01 ++#define EERL 0x80 ++ ++#define EEPROM_WRITE_OPCODE 0x05 ++#define EEPROM_READ_OPCODE 0x06 ++#define EEPROM_EWDS_OPCODE 0x10 ++#define EEPROM_EWEN_OPCODE 0x13 ++ ++#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs ++#define NUM_EEPROM_TX_G_PARMS 7 ++#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_G_TX_PWR_OFFSET 0x52 ++#define EEPROM_G_TX2_PWR_OFFSET 0x60 ++#define EEPROM_LED1_OFFSET 0x3c ++#define EEPROM_LED2_OFFSET 0x3e ++#define EEPROM_LED3_OFFSET 0x40 ++#define EEPROM_LNA_OFFSET 0x44 ++#define EEPROM_RSSI_BG_OFFSET 0x46 ++#define EEPROM_TXMIXER_GAIN_2_4G 0x48 ++#define EEPROM_RSSI_A_OFFSET 0x4a ++#define EEPROM_TXMIXER_GAIN_5G 0x4c ++#define EEPROM_DEFINE_MAX_TXPWR 0x4e ++#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power. ++#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power. ++#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power. ++#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power. ++#define EEPROM_A_TX_PWR_OFFSET 0x78 ++#define EEPROM_A_TX2_PWR_OFFSET 0xa6 ++//#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j ++//#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe ++//#define EEPROM_TSSI_REF_OFFSET 0x54 ++//#define EEPROM_TSSI_DELTA_OFFSET 0x24 ++//#define EEPROM_CCK_TX_PWR_OFFSET 0x62 ++//#define EEPROM_CALIBRATE_OFFSET 0x7c ++#define EEPROM_VERSION_OFFSET 0x02 ++#define EEPROM_FREQ_OFFSET 0x3a ++#define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power. ++#define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. ++#define VALID_EEPROM_VERSION 1 ++ ++ ++/* ++ * EEPROM operation related marcos ++ */ ++#define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ ++ (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) ++ ++#define RT28xx_EEPROM_WRITE16(_pAd, _offset, _value) \ ++ (_pAd)->chipOps.eewrite((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (USHORT)(_value)) ++ ++ ++ ++// ------------------------------------------------------------------- ++// E2PROM data layout ++// ------------------------------------------------------------------- ++ ++// ++// MCU_LEDCS: MCU LED Control Setting. ++// ++typedef union _MCU_LEDCS_STRUC { ++ struct { ++ UCHAR LedMode:7; ++ UCHAR Polarity:1; ++ } field; ++ UCHAR word; ++} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; ++ ++ ++// ++// EEPROM antenna select format ++// ++typedef union _EEPROM_ANTENNA_STRUC { ++ struct { ++ USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R ++ USHORT TxPath:4; // 1: 1T, 2: 2T ++ USHORT RfIcType:4; // see E2PROM document ++ USHORT Rsv:4; ++ } field; ++ USHORT word; ++} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; ++ ++typedef union _EEPROM_NIC_CINFIG2_STRUC { ++ struct { ++ USHORT HardwareRadioControl:1; // 1:enable, 0:disable ++ USHORT DynamicTxAgcControl:1; // ++ USHORT ExternalLNAForG:1; // ++ USHORT ExternalLNAForA:1; // external LNA enable for 2.4G ++ USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable ++ USHORT BW40MSidebandForG:1; ++ USHORT BW40MSidebandForA:1; ++ USHORT EnableWPSPBC:1; // WPS PBC Control bit ++ USHORT BW40MAvailForG:1; // 0:enable, 1:disable ++ USHORT BW40MAvailForA:1; // 0:enable, 1:disable ++ USHORT Rsv1:1; // must be 0 ++ USHORT AntDiversity:1; // Antenna diversity ++ USHORT Rsv2:3; // must be 0 ++ USHORT DACTestBit:1; // control if driver should patch the DAC issue ++ } field; ++ USHORT word; ++} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; ++ ++// ++// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) ++// ++typedef union _EEPROM_TX_PWR_STRUC { ++ struct { ++ CHAR Byte0; // Low Byte ++ CHAR Byte1; // High Byte ++ } field; ++ USHORT word; ++} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; ++ ++typedef union _EEPROM_VERSION_STRUC { ++ struct { ++ UCHAR FaeReleaseNumber; // Low Byte ++ UCHAR Version; // High Byte ++ } field; ++ USHORT word; ++} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; ++ ++typedef union _EEPROM_LED_STRUC { ++ struct { ++ USHORT PolarityRDY_G:1; // Polarity RDY_G setting. ++ USHORT PolarityRDY_A:1; // Polarity RDY_A setting. ++ USHORT PolarityACT:1; // Polarity ACT setting. ++ USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. ++ USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. ++ USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. ++ USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. ++ USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. ++ USHORT LedMode:5; // Led mode. ++ USHORT Rsvd:3; // Reserved ++ } field; ++ USHORT word; ++} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; ++ ++typedef union _EEPROM_TXPOWER_DELTA_STRUC { ++ struct { ++ UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) ++ UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value ++ UCHAR TxPowerEnable:1;// Enable ++ } field; ++ UCHAR value; ++} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; ++ ++#endif // __RTMP_CHIP_H__ // +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index f5fee57..e999710 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -41,6 +41,15 @@ + + #include "oid.h" + ++#undef AP_WSC_INCLUDED ++#undef STA_WSC_INCLUDED ++#undef WSC_INCLUDED ++ ++ ++ ++#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) ++#define WSC_INCLUDED ++#endif + // + // Debug information verbosity: lower values indicate higher urgency + // +@@ -54,55 +63,28 @@ + #define NIC_TAG ((ULONG)'0682') + #define NIC_DBG_STRING ("**RT28xx**") + ++#ifdef RTMP_MAC_USB ++#define TX_RING_SIZE 8 // 1 ++#define PRIO_RING_SIZE 8 ++#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE ++#define RX_RING_SIZE 8 ++#define MAX_TX_PROCESS 4 ++#define LOCAL_TXBUF_SIZE 2048 ++#endif // RTMP_MAC_USB // ++ ++//#define PACKED ++ + #define RALINK_2883_VERSION ((UINT32)0x28830300) + #define RALINK_2880E_VERSION ((UINT32)0x28720200) + #define RALINK_3070_VERSION ((UINT32)0x30700200) + +-// +-// NDIS version in use by the NIC driver. +-// The high byte is the major version. The low byte is the minor version. +-// +-#ifdef NDIS51_MINIPORT +-#define NIC_DRIVER_VERSION 0x0501 +-#else +-#define NIC_DRIVER_VERSION 0x0500 +-#endif +- +-// +-// NDIS media type, current is ethernet, change if native wireless supported +-// +-#define NIC_MEDIA_TYPE NdisMedium802_3 +-#define NIC_PCI_HDR_LENGTH 0xe2 +-#define NIC_MAX_PACKET_SIZE 2304 +-#define NIC_HEADER_SIZE 14 +-#define MAX_MAP_REGISTERS_NEEDED 32 +-#define MIN_MAP_REGISTERS_NEEDED 2 //Todo: should consider fragment issue. +- +-// +-// interface type, we use PCI +-// +-#define NIC_INTERFACE_TYPE NdisInterfacePci +-#define NIC_INTERRUPT_MODE NdisInterruptLevelSensitive +- +-// +-// buffer size passed in NdisMQueryAdapterResources +-// We should only need three adapter resources (IO, interrupt and memory), +-// Some devices get extra resources, so have room for 10 resources +-// UF_SIZE (sizeof(NDIS_RESOURCE_LIST) + (10*sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR))) +- +- +-#define NIC_RESOURCE_B// +-// IO space length +-// +-#define NIC_MAP_IOSPACE_LENGTH sizeof(CSR_STRUC) +- + #define MAX_RX_PKT_LEN 1520 + + // + // Entry number for each DMA descriptor ring + // + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + #define TX_RING_SIZE 64 //64 + #define MGMT_RING_SIZE 128 + #define RX_RING_SIZE 128 //64 +@@ -110,15 +92,7 @@ + #define MAX_DMA_DONE_PROCESS TX_RING_SIZE + #define MAX_TX_DONE_PROCESS TX_RING_SIZE //8 + #define LOCAL_TXBUF_SIZE 2 +-#endif +-#ifdef RT2870 +-#define TX_RING_SIZE 8 // 1 +-#define PRIO_RING_SIZE 8 +-#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE +-#define RX_RING_SIZE 8 +-#define MAX_TX_PROCESS 4 +-#define LOCAL_TXBUF_SIZE 2048 +-#endif // RT2870 // ++#endif // RTMP_MAC_PCI // + + #define MAX_RX_PROCESS 128 //64 //32 + #define NUM_OF_LOCAL_TXBUF 2 +@@ -143,16 +117,43 @@ + #define MAX_RX_PROCESS_CNT (RX_RING_SIZE) + + ++/* ++ WMM Note: If memory of your system is not much, please reduce the definition; ++ or when you do WMM test, the queue for low priority AC will be full, i.e. ++ TX_RING_SIZE + MAX_PACKETS_IN_QUEUE packets for the AC will be buffered in ++ WLAN, maybe no any packet buffer can be got in Ethernet driver. ++ ++ Sometimes no packet buffer can be got in Ethernet driver, the system will ++ send flow control packet to the sender to slow down its sending rate. ++ So no WMM can be saw in the air. ++*/ ++ ++/* ++ Need to use 64 in vxworks for test case WMM A5-T07 ++ Two dnlink (10Mbps) from a WMM station to a non-WMM station. ++ If use 256, queue is not enough. ++ And in rt_main_end.c, clConfig.clNum = RX_RING_SIZE * 3; is changed to ++ clConfig.clNum = RX_RING_SIZE * 4; ++*/ ++// TODO: For VxWorks the size is 256. Shall we cahnge the value as 256 for all OS????? + #define MAX_PACKETS_IN_QUEUE (512) //(512) // to pass WMM A5-WPAPSK ++ + #define MAX_PACKETS_IN_MCAST_PS_QUEUE 32 + #define MAX_PACKETS_IN_PS_QUEUE 128 //32 + #define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */ + ++ ++#ifdef RTMP_EFUSE_SUPPORT ++//2008/09/11:KH add to support efuse<-- + #define MAX_EEPROM_BIN_FILE_SIZE 1024 ++#define EFUSE_BUFFER_PATH "/tmp/RT30xxEEPROM.bin" ++//2008/09/11:KH add to support efuse--> ++#endif // RTMP_EFUSE_SUPPORT // + + // RxFilter + #define STANORMAL 0x17f97 + #define APNORMAL 0x15f97 ++#define PSPXLINK 0x17f93 + // + // RTMP_ADAPTER flags + // +@@ -203,9 +204,9 @@ + #define fOP_STATUS_TX_AMSDU_INUSED 0x00002000 + #define fOP_STATUS_MAX_RETRY_ENABLED 0x00004000 + #define fOP_STATUS_WAKEUP_NOW 0x00008000 +-#define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE 0x00020000 ++#define fOP_STATUS_PCIE_DEVICE 0x00020000 ++#define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE fOP_STATUS_PCIE_DEVICE + +-#ifdef RT2860 + // + // RTMP_ADAPTER PSFlags : related to advanced power save. + // +@@ -218,7 +219,8 @@ + // Indicate driver should IMMEDIATELY fo to sleep after receiving AP's beacon in which doesn't indicate unicate nor multicast packets for me + //. This flag is used ONLY in RTMPHandleRxDoneInterrupt routine. + #define fRTMP_PS_GO_TO_SLEEP_NOW 0x00000008 +-#endif ++#define fRTMP_PS_TOGGLE_L1 0x00000010 // Use Toggle L1 mechanism for rt28xx PCIe ++ + + #define CCKSETPROTECT 0x1 + #define OFDMSETPROTECT 0x2 +@@ -266,6 +268,7 @@ + #define fRX_FILTER_ACCEPT_MULTICAST NDIS_PACKET_TYPE_MULTICAST + #define fRX_FILTER_ACCEPT_BROADCAST NDIS_PACKET_TYPE_BROADCAST + #define fRX_FILTER_ACCEPT_ALL_MULTICAST NDIS_PACKET_TYPE_ALL_MULTICAST ++#define fRX_FILTER_ACCEPT_PROMISCUOUS NDIS_PACKET_TYPE_PROMISCUOUS + + // + // Error code section +@@ -321,17 +324,15 @@ + #define MAX_APCLI_NUM 0 + + #define MAX_MBSSID_NUM 1 +-#if defined(RT2860) || defined(RT30xx) + #ifdef MBSS_SUPPORT + #undef MAX_MBSSID_NUM + #define MAX_MBSSID_NUM (8 - MAX_MESH_NUM - MAX_APCLI_NUM) + #endif // MBSS_SUPPORT // +-#endif + + /* sanity check for apidx */ + #define MBSS_MR_APIDX_SANITY_CHECK(apidx) \ + { if (apidx > MAX_MBSSID_NUM) { \ +- printk("%s> Error! apidx = %d > MAX_MBSSID_NUM!\n", __func__, apidx); \ ++ DBGPRINT(RT_DEBUG_ERROR, ("%s> Error! apidx = %d > MAX_MBSSID_NUM!\n", __func__, apidx)); \ + apidx = MAIN_MBSSID; } } + + #define VALID_WCID(_wcid) ((_wcid) > 0 && (_wcid) < MAX_LEN_OF_MAC_TABLE ) +@@ -397,6 +398,7 @@ + #define HASH_TABLE_SIZE 256 + #define MAX_VIE_LEN 1024 // New for WPA cipher suite variable IE sizes. + #define MAX_SUPPORT_MCS 32 ++#define MAX_NUM_OF_BBP_LATCH 140 + + //============================================================ + // ASIC WCID Table definition. +@@ -515,6 +517,9 @@ + #define MLME_QOS_UNSPECIFY 32 + #define MLME_REQUEST_DECLINED 37 + #define MLME_REQUEST_WITH_INVALID_PARAM 38 ++#define MLME_INVALID_GROUP_CIPHER 41 ++#define MLME_INVALID_PAIRWISE_CIPHER 42 ++#define MLME_INVALID_AKMP 43 + #define MLME_DLS_NOT_ALLOW_IN_QBSS 48 + #define MLME_DEST_STA_NOT_IN_QBSS 49 + #define MLME_DEST_STA_IS_NOT_A_QSTA 50 +@@ -569,6 +574,7 @@ + // For 802.11n D3.03 + //#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet + #define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element ++#define IE_WAPI 68 // WAPI information element + #define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3 + #define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03 + #define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03 +@@ -605,17 +611,22 @@ + #define SYNC_STATE_MACHINE 4 + #define MLME_CNTL_STATE_MACHINE 5 + #define WPA_PSK_STATE_MACHINE 6 +-#define LEAP_STATE_MACHINE 7 ++//#define LEAP_STATE_MACHINE 7 + #define AIRONET_STATE_MACHINE 8 + #define ACTION_STATE_MACHINE 9 + + // AP MLME state machines + #define AP_ASSOC_STATE_MACHINE 11 + #define AP_AUTH_STATE_MACHINE 12 +-#define AP_AUTH_RSP_STATE_MACHINE 13 + #define AP_SYNC_STATE_MACHINE 14 + #define AP_CNTL_STATE_MACHINE 15 +-#define AP_WPA_STATE_MACHINE 16 ++#define WSC_STATE_MACHINE 17 ++#define WSC_UPNP_STATE_MACHINE 18 ++ ++ ++#define WPA_STATE_MACHINE 23 ++ ++ + + // + // STA's CONTROL/CONNECT state machine: states, events, total function # +@@ -630,9 +641,9 @@ + #define CNTL_WAIT_AUTH2 7 + #define CNTL_WAIT_OID_LIST_SCAN 8 + #define CNTL_WAIT_OID_DISASSOC 9 +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + #define CNTL_WAIT_SCAN_FOR_CONNECT 10 +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + #define MT2_ASSOC_CONF 34 + #define MT2_AUTH_CONF 35 +@@ -646,6 +657,7 @@ + #define MT2_GET_CONF 43 + #define MT2_SET_CONF 44 + #define MT2_RESET_CONF 45 ++#define MT2_FT_OTD_CONF 46 + #define MT2_MLME_ROAMING_REQ 52 + + #define CNTL_FUNC_SIZE 1 +@@ -691,8 +703,11 @@ + #define MT2_PEER_BA_CATE 3 + #define MT2_PEER_PUBLIC_CATE 4 + #define MT2_PEER_RM_CATE 5 ++/* "FT_CATEGORY_BSS_TRANSITION equal to 6" is defined file of "dot11r_ft.h" */ + #define MT2_PEER_HT_CATE 7 // 7.4.7 + #define MAX_PEER_CATE_MSG 7 ++ ++ + #define MT2_MLME_ADD_BA_CATE 8 + #define MT2_MLME_ORI_DELBA_CATE 9 + #define MT2_MLME_REC_DELBA_CATE 10 +@@ -822,35 +837,8 @@ + #define DLS_FUNC_SIZE (MAX_DLS_STATE * MAX_DLS_MSG) + + // +-// STA's WPA-PSK State machine: states, events, total function # ++// WSC State machine: states, events, total function # + // +-#define WPA_PSK_IDLE 0 +-#define MAX_WPA_PSK_STATE 1 +- +-#define WPA_MACHINE_BASE 0 +-#define MT2_EAPPacket 0 +-#define MT2_EAPOLStart 1 +-#define MT2_EAPOLLogoff 2 +-#define MT2_EAPOLKey 3 +-#define MT2_EAPOLASFAlert 4 +-#define MAX_WPA_PSK_MSG 5 +- +-#define WPA_PSK_FUNC_SIZE (MAX_WPA_PSK_STATE * MAX_WPA_PSK_MSG) +- +-// +-// STA's CISCO-AIRONET State machine: states, events, total function # +-// +-#define AIRONET_IDLE 0 +-#define AIRONET_SCANNING 1 +-#define MAX_AIRONET_STATE 2 +- +-#define AIRONET_MACHINE_BASE 0 +-#define MT2_AIRONET_MSG 0 +-#define MT2_AIRONET_SCAN_REQ 1 +-#define MT2_AIRONET_SCAN_DONE 2 +-#define MAX_AIRONET_MSG 3 +- +-#define AIRONET_FUNC_SIZE (MAX_AIRONET_STATE * MAX_AIRONET_MSG) + + // + // AP's CONTROL/CONNECT state machine: states, events, total function # +@@ -882,23 +870,12 @@ + #define AP_AUTH_MACHINE_BASE 0 + #define APMT2_MLME_DEAUTH_REQ 0 + #define APMT2_CLS2ERR 1 +-#define AP_MAX_AUTH_MSG 2 +- +-#define AP_AUTH_FUNC_SIZE (AP_MAX_AUTH_STATE * AP_MAX_AUTH_MSG) +- +-// +-// AP's AUTH-RSP state machine: states, events, total function # +-// +-#define AP_AUTH_RSP_IDLE 0 +-#define AP_MAX_AUTH_RSP_STATE 1 +- +-#define AP_AUTH_RSP_MACHINE_BASE 0 +-#define APMT2_AUTH_CHALLENGE_TIMEOUT 0 +-#define APMT2_PEER_AUTH_ODD 1 + #define APMT2_PEER_DEAUTH 2 +-#define AP_MAX_AUTH_RSP_MSG 3 ++#define APMT2_PEER_AUTH_REQ 3 ++#define APMT2_PEER_AUTH_CONFIRM 4 ++#define AP_MAX_AUTH_MSG 5 + +-#define AP_AUTH_RSP_FUNC_SIZE (AP_MAX_AUTH_RSP_STATE * AP_MAX_AUTH_RSP_MSG) ++#define AP_AUTH_FUNC_SIZE (AP_MAX_AUTH_STATE * AP_MAX_AUTH_MSG) + + // + // AP's SYNC state machine: states, events, total function # +@@ -919,20 +896,22 @@ + #define AP_SYNC_FUNC_SIZE (AP_MAX_SYNC_STATE * AP_MAX_SYNC_MSG) + + // +-// AP's WPA state machine: states, events, total function # ++// Common WPA state machine: states, events, total function # + // +-#define AP_WPA_PTK 0 +-#define AP_MAX_WPA_PTK_STATE 1 ++#define WPA_PTK 0 ++#define MAX_WPA_PTK_STATE 1 ++ ++#define WPA_MACHINE_BASE 0 ++#define MT2_EAPPacket 0 ++#define MT2_EAPOLStart 1 ++#define MT2_EAPOLLogoff 2 ++#define MT2_EAPOLKey 3 ++#define MT2_EAPOLASFAlert 4 ++#define MAX_WPA_MSG 5 ++ ++#define WPA_FUNC_SIZE (MAX_WPA_PTK_STATE * MAX_WPA_MSG) + +-#define AP_WPA_MACHINE_BASE 0 +-#define APMT2_EAPPacket 0 +-#define APMT2_EAPOLStart 1 +-#define APMT2_EAPOLLogoff 2 +-#define APMT2_EAPOLKey 3 +-#define APMT2_EAPOLASFAlert 4 +-#define AP_MAX_WPA_MSG 5 + +-#define AP_WPA_FUNC_SIZE (AP_MAX_WPA_PTK_STATE * AP_MAX_WPA_MSG) + + // ============================================================================= + +@@ -1178,12 +1157,16 @@ + #define REGION_4_A_BAND 4 // 149, 153, 157, 161, 165 + #define REGION_5_A_BAND 5 // 149, 153, 157, 161 + #define REGION_6_A_BAND 6 // 36, 40, 44, 48 +-#define REGION_7_A_BAND 7 // 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 REGION_7_A_BAND 7 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 + #define REGION_8_A_BAND 8 // 52, 56, 60, 64 + #define REGION_9_A_BAND 9 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 + #define REGION_10_A_BAND 10 // 36, 40, 44, 48, 149, 153, 157, 161, 165 + #define REGION_11_A_BAND 11 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 +-#define REGION_MAXIMUM_A_BAND 11 ++#define REGION_12_A_BAND 12 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 ++#define REGION_13_A_BAND 13 // 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 ++#define REGION_14_A_BAND 14 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 ++#define REGION_15_A_BAND 15 // 149, 153, 157, 161, 165, 169, 173 ++#define REGION_MAXIMUM_A_BAND 15 + + // pTxD->CipherAlg + #define CIPHER_NONE 0 +@@ -1196,15 +1179,6 @@ + #define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table + #define CIPHER_SMS4 8 + +-// value domain of pAd->RfIcType +-#define RFIC_2820 1 // 2.4G 2T3R +-#define RFIC_2850 2 // 2.4G/5G 2T3R +-#define RFIC_2720 3 // 2.4G 1T2R +-#define RFIC_2750 4 // 2.4G/5G 1T2R +-#define RFIC_3020 5 // 2.4G 1T1R +-#define RFIC_2020 6 // 2.4G B/G +-#define RFIC_3021 7 // 2.4G 1T2R +-#define RFIC_3022 8 // 2.4G 2T2R + + // LED Status. + #define LED_LINK_DOWN 0 +@@ -1219,7 +1193,8 @@ + // value domain of pAd->LedCntl.LedMode and E2PROM + #define LED_MODE_DEFAULT 0 + #define LED_MODE_TWO_LED 1 +-#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 ++//#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 ++#define LED_MODE_SIGNAL_STREGTH 0x40 // EEPROM define = 64 + + // RC4 init value, used fro WEP & TKIP + #define PPPINITFCS32 0xffffffff /* Initial FCS value */ +@@ -1305,7 +1280,12 @@ + #define INT_APCLI 0x0400 + #define INT_MESH 0x0500 + +-// Use bitmap to allow coexist of ATE_TXFRAME and ATE_RXFRAME(i.e.,to support LoopBack mode) ++#define INF_MAIN_DEV_NAME "wlan" ++#define INF_MBSSID_DEV_NAME "ra" ++#define INF_WDS_DEV_NAME "wds" ++#define INF_APCLI_DEV_NAME "apcli" ++#define INF_MESH_DEV_NAME "mesh" ++ + + // WEP Key TYPE + #define WEP_HEXADECIMAL_TYPE 0 +@@ -1380,7 +1360,7 @@ + #define MAX_NUM_OF_INIT_DLS_ENTRY 1 + #define MAX_NUM_OF_DLS_ENTRY MAX_NUMBER_OF_DLS_ENTRY + +-//Block ACK , rt2860, kathy ++//Block ACK, kathy + #define MAX_TX_REORDERBUF 64 + #define MAX_RX_REORDERBUF 64 + #define DEFAULT_TX_TIMEOUT 30 +@@ -1392,29 +1372,13 @@ + #define IW_ESSID_MAX_SIZE 32 + #endif + +-#ifdef MCAST_RATE_SPECIFIC +-#define MCAST_DISABLE 0 +-#define MCAST_CCK 1 +-#define MCAST_OFDM 2 +-#define MCAST_HTMIX 3 +-#endif // MCAST_RATE_SPECIFIC // +- +-#ifdef RT2860 +-// For AsicRadioOff/AsicRadioOn/AsicForceWakeup function +-// This is to indicate from where to call this function. +-#define DOT11POWERSAVE 0 // TO do .11 power save sleep +-#define GUIRADIO_OFF 1 // To perform Radio OFf command from GUI +-#define RTMP_HALT 2 // Called from Halt handler. +-#define GUI_IDLE_POWER_SAVE 3 // Call to sleep before link up with AP +-#define FROM_TX 4 // Force wake up from Tx packet. +-#endif +-#ifdef RT2870 + // For AsicRadioOff/AsicRadioOn function + #define DOT11POWERSAVE 0 + #define GUIRADIO_OFF 1 + #define RTMP_HALT 2 + #define GUI_IDLE_POWER_SAVE 3 +-#endif ++// -- ++ + + // definition for WpaSupport flag + #define WPA_SUPPLICANT_DISABLE 0 +@@ -1458,6 +1422,41 @@ + #define cpu2be16(x) SWAP16((x)) + #define be2cpu16(x) SWAP16((x)) + ++ ++#define ABS(_x, _y) ((_x) > (_y)) ? ((_x) -(_y)) : ((_y) -(_x)) ++ ++ ++#define A2Dec(_X, _p) \ ++{ \ ++ UCHAR *p; \ ++ _X = 0; \ ++ p = _p; \ ++ while (((*p >= '0') && (*p <= '9'))) \ ++ { \ ++ if ((*p >= '0') && (*p <= '9')) \ ++ _X = _X * 10 + *p - 48; \ ++ p++; \ ++ } \ ++} ++ ++ ++#define A2Hex(_X, _p) \ ++do{ \ ++ char *__p; \ ++ (_X) = 0; \ ++ __p = (char *)(_p); \ ++ while (((*__p >= 'a') && (*__p <= 'f')) || ((*__p >= 'A') && (*__p <= 'F')) || ((*__p >= '0') && (*__p <= '9'))) \ ++ { \ ++ if ((*__p >= 'a') && (*__p <= 'f')) \ ++ (_X) = (_X) * 16 + *__p - 87; \ ++ else if ((*__p >= 'A') && (*__p <= 'F')) \ ++ (_X) = (_X) * 16 + *__p - 55; \ ++ else if ((*__p >= '0') && (*__p <= '9')) \ ++ (_X) = (_X) * 16 + *__p - 48; \ ++ __p++; \ ++ } \ ++}while(0) ++ + #endif // __RTMP_DEF_H__ + + +diff --git a/drivers/staging/rt2860/rtmp_dot11.h b/drivers/staging/rt2860/rtmp_dot11.h +new file mode 100644 +index 0000000..f6887a8 +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_dot11.h +@@ -0,0 +1,102 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++#ifndef __DOT11_BASE_H__ ++#define __DOT11_BASE_H__ ++ ++#include "rtmp_type.h" ++ ++ ++// 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. ++typedef struct PACKED { ++ UINT32 MA:1; //management action payload exist in (QoS Null+HTC) ++ UINT32 TRQ:1; //sounding request ++ UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback ++ UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. ++ UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. ++ UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available ++ UINT32 CalPos:2; // calibration position ++ UINT32 CalSeq:2; //calibration sequence ++ UINT32 FBKReq:2; //feedback request ++ UINT32 CSISTEERING:2; //CSI/ STEERING ++ UINT32 ZLFAnnouce:1; // ZLF announcement ++ UINT32 rsv:5; //calibration sequence ++ UINT32 ACConstraint:1; //feedback request ++ UINT32 RDG:1; //RDG / More PPDU ++} HT_CONTROL, *PHT_CONTROL; ++ ++// 2-byte QOS CONTROL field ++typedef struct PACKED { ++ USHORT TID:4; ++ USHORT EOSP:1; ++ USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA ++ USHORT AMsduPresent:1; ++ USHORT Txop_QueueSize:8; ++} QOS_CONTROL, *PQOS_CONTROL; ++ ++ ++// 2-byte Frame control field ++typedef struct PACKED { ++ USHORT Ver:2; // Protocol version ++ USHORT Type:2; // MSDU type ++ USHORT SubType:4; // MSDU subtype ++ USHORT ToDs:1; // To DS indication ++ USHORT FrDs:1; // From DS indication ++ USHORT MoreFrag:1; // More fragment bit ++ USHORT Retry:1; // Retry status bit ++ USHORT PwrMgmt:1; // Power management bit ++ USHORT MoreData:1; // More data bit ++ USHORT Wep:1; // Wep data ++ USHORT Order:1; // Strict order expected ++} FRAME_CONTROL, *PFRAME_CONTROL; ++ ++typedef struct PACKED _HEADER_802_11 { ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ UCHAR Addr3[MAC_ADDR_LEN]; ++ USHORT Frag:4; ++ USHORT Sequence:12; ++ UCHAR Octet[0]; ++} HEADER_802_11, *PHEADER_802_11; ++ ++typedef struct PACKED _PSPOLL_FRAME { ++ FRAME_CONTROL FC; ++ USHORT Aid; ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ UCHAR Ta[MAC_ADDR_LEN]; ++} PSPOLL_FRAME, *PPSPOLL_FRAME; ++ ++typedef struct PACKED _RTS_FRAME { ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++}RTS_FRAME, *PRTS_FRAME; ++ ++#endif // __DOT11_BASE_H__ // +diff --git a/drivers/staging/rt2860/rtmp_iface.h b/drivers/staging/rt2860/rtmp_iface.h +new file mode 100644 +index 0000000..c24ece5 +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_iface.h +@@ -0,0 +1,84 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt_iface.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __RTMP_IFACE_H__ ++#define __RTMP_IFACE_H__ ++ ++ ++#ifdef RTMP_PCI_SUPPORT ++#include "iface/rtmp_pci.h" ++#endif // RTMP_PCI_SUPPORT // ++#ifdef RTMP_USB_SUPPORT ++#include "iface/rtmp_usb.h" ++#endif // RTMP_USB_SUPPORT // ++ ++typedef struct _INF_PCI_CONFIG_ ++{ ++ unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ unsigned int irq_num; ++}INF_PCI_CONFIG; ++ ++ ++typedef struct _INF_USB_CONFIG_ ++{ ++ UINT8 BulkInEpAddr; // bulk-in endpoint address ++ UINT8 BulkOutEpAddr[6]; // bulk-out endpoint address ++}INF_USB_CONFIG; ++ ++ ++typedef struct _INF_RBUS_CONFIG_ ++{ ++ unsigned long csr_addr; ++ unsigned int irq; ++}INF_RBUS_CONFIG; ++ ++ ++typedef enum _RTMP_INF_TYPE_ ++{ ++ RTMP_DEV_INF_UNKNOWN = 0, ++ RTMP_DEV_INF_PCI = 1, ++ RTMP_DEV_INF_USB = 2, ++ RTMP_DEV_INF_RBUS = 4, ++}RTMP_INF_TYPE; ++ ++ ++typedef union _RTMP_INF_CONFIG_{ ++ struct _INF_PCI_CONFIG_ pciConfig; ++ struct _INF_USB_CONFIG_ usbConfig; ++ struct _INF_RBUS_CONFIG_ rbusConfig; ++}RTMP_INF_CONFIG; ++ ++#endif // __RTMP_IFACE_H__ // +diff --git a/drivers/staging/rt2860/rtmp_mcu.h b/drivers/staging/rt2860/rtmp_mcu.h +new file mode 100644 +index 0000000..e1b2fee +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_mcu.h +@@ -0,0 +1,55 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_mcu.h ++ ++ Abstract: ++ Miniport header file for mcu related information ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifndef __RTMP_MCU_H__ ++#define __RTMP_MCU_H__ ++ ++ ++INT RtmpAsicEraseFirmware( ++ IN PRTMP_ADAPTER pAd); ++ ++NDIS_STATUS RtmpAsicLoadFirmware( ++ IN PRTMP_ADAPTER pAd); ++ ++INT RtmpAsicSendCommandToMcu( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, ++ IN UCHAR Arg0, ++ IN UCHAR Arg1); ++ ++#endif // __RTMP_MCU_H__ // +diff --git a/drivers/staging/rt2860/rtmp_os.h b/drivers/staging/rt2860/rtmp_os.h +new file mode 100644 +index 0000000..350621d +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_os.h +@@ -0,0 +1,98 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_os.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++ ++#ifndef __RTMP_OS_H__ ++#define __RTMP_OS_H__ ++ ++#ifdef LINUX ++#include "rt_linux.h" ++#endif // LINUX // ++ ++ ++ ++/* ++ This data structure mainly strip some callback function defined in ++ "struct net_device" in kernel source "include/linux/netdevice.h". ++ ++ The definition of this data structure may various depends on different ++ OS. Use it carefully. ++*/ ++typedef struct _RTMP_OS_NETDEV_OP_HOOK_ ++{ ++ const struct net_device_ops *netdev_ops; ++ void *priv; ++ int priv_flags; ++ unsigned char devAddr[6]; ++ unsigned char devName[16]; ++ unsigned char needProtcted; ++}RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK; ++ ++ ++typedef enum _RTMP_TASK_STATUS_ ++{ ++ RTMP_TASK_STAT_UNKNOWN = 0, ++ RTMP_TASK_STAT_INITED = 1, ++ RTMP_TASK_STAT_RUNNING = 2, ++ RTMP_TASK_STAT_STOPED = 4, ++}RTMP_TASK_STATUS; ++#define RTMP_TASK_CAN_DO_INSERT (RTMP_TASK_STAT_INITED |RTMP_TASK_STAT_RUNNING) ++ ++#define RTMP_OS_TASK_NAME_LEN 16 ++typedef struct _RTMP_OS_TASK_ ++{ ++ char taskName[RTMP_OS_TASK_NAME_LEN]; ++ void *priv; ++ //unsigned long taskFlags; ++ RTMP_TASK_STATUS taskStatus; ++#ifndef KTHREAD_SUPPORT ++ RTMP_OS_SEM taskSema; ++ RTMP_OS_PID taskPID; ++ struct completion taskComplete; ++#endif ++ unsigned char task_killed; ++#ifdef KTHREAD_SUPPORT ++ struct task_struct *kthread_task; ++ wait_queue_head_t kthread_q; ++ BOOLEAN kthread_running; ++#endif ++}RTMP_OS_TASK; ++ ++ ++int RtmpOSIRQRequest(IN PNET_DEV pNetDev); ++int RtmpOSIRQRelease(IN PNET_DEV pNetDev); ++ ++#endif // __RMTP_OS_H__ // +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +new file mode 100644 +index 0000000..5f6e3ce +--- /dev/null ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -0,0 +1,156 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rtmp_timer.h ++ ++ Abstract: ++ Ralink Wireless Driver timer related data structures and delcarations ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++ Name Date Modification logs ++ Shiang Tu Aug-28-2008 init version ++ ++*/ ++ ++#ifndef __RTMP_TIMER_H__ ++#define __RTMP_TIMER_H__ ++ ++#include "rtmp_os.h" ++ ++ ++#define DECLARE_TIMER_FUNCTION(_func) \ ++ void rtmp_timer_##_func(unsigned long data) ++ ++#define GET_TIMER_FUNCTION(_func) \ ++ rtmp_timer_##_func ++ ++ ++/* ----------------- Timer Related MARCO ---------------*/ ++// In some os or chipset, we have a lot of timer functions and will read/write register, ++// it's not allowed in Linux USB sub-system to do it ( because of sleep issue when ++// submit to ctrl pipe). So we need a wrapper function to take care it. ++ ++#ifdef RTMP_TIMER_TASK_SUPPORT ++typedef VOID (*RTMP_TIMER_TASK_HANDLE)( ++ IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); ++#endif // RTMP_TIMER_TASK_SUPPORT // ++ ++typedef struct _RALINK_TIMER_STRUCT { ++ RTMP_OS_TIMER TimerObj; // Ndis Timer object ++ BOOLEAN Valid; // Set to True when call RTMPInitTimer ++ BOOLEAN State; // True if timer cancelled ++ BOOLEAN PeriodicType; // True if timer is periodic timer ++ BOOLEAN Repeat; // True if periodic timer ++ ULONG TimerValue; // Timer value in milliseconds ++ ULONG cookie; // os specific object ++#ifdef RTMP_TIMER_TASK_SUPPORT ++ RTMP_TIMER_TASK_HANDLE handle; ++ void *pAd; ++#endif // RTMP_TIMER_TASK_SUPPORT // ++}RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; ++ ++ ++#ifdef RTMP_TIMER_TASK_SUPPORT ++typedef struct _RTMP_TIMER_TASK_ENTRY_ ++{ ++ RALINK_TIMER_STRUCT *pRaTimer; ++ struct _RTMP_TIMER_TASK_ENTRY_ *pNext; ++}RTMP_TIMER_TASK_ENTRY; ++ ++ ++#define TIMER_QUEUE_SIZE_MAX 128 ++typedef struct _RTMP_TIMER_TASK_QUEUE_ ++{ ++ unsigned int status; ++ unsigned char *pTimerQPoll; ++ RTMP_TIMER_TASK_ENTRY *pQPollFreeList; ++ RTMP_TIMER_TASK_ENTRY *pQHead; ++ RTMP_TIMER_TASK_ENTRY *pQTail; ++}RTMP_TIMER_TASK_QUEUE; ++ ++#define BUILD_TIMER_FUNCTION(_func) \ ++void rtmp_timer_##_func(unsigned long data) \ ++{ \ ++ PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \ ++ RTMP_TIMER_TASK_ENTRY *_pQNode; \ ++ RTMP_ADAPTER *_pAd; \ ++ \ ++ _pTimer->handle = _func; \ ++ _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \ ++ _pQNode = RtmpTimerQInsert(_pAd, _pTimer); \ ++ if ((_pQNode == NULL) && (_pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT)) \ ++ RTMP_OS_Add_Timer(&_pTimer->TimerObj, OS_HZ); \ ++} ++#else ++#define BUILD_TIMER_FUNCTION(_func) \ ++void rtmp_timer_##_func(unsigned long data) \ ++{ \ ++ PRALINK_TIMER_STRUCT pTimer = (PRALINK_TIMER_STRUCT) data; \ ++ \ ++ _func(NULL, (PVOID) pTimer->cookie, NULL, pTimer); \ ++ if (pTimer->Repeat) \ ++ RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ ++} ++#endif // RTMP_TIMER_TASK_SUPPORT // ++ ++ ++DECLARE_TIMER_FUNCTION(MlmePeriodicExec); ++DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); ++DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); ++DECLARE_TIMER_FUNCTION(APSDPeriodicExec); ++DECLARE_TIMER_FUNCTION(AsicRfTuningExec); ++#ifdef RTMP_MAC_USB ++DECLARE_TIMER_FUNCTION(BeaconUpdateExec); ++#endif // RTMP_MAC_USB // ++ ++DECLARE_TIMER_FUNCTION(BeaconTimeout); ++DECLARE_TIMER_FUNCTION(ScanTimeout); ++DECLARE_TIMER_FUNCTION(AuthTimeout); ++DECLARE_TIMER_FUNCTION(AssocTimeout); ++DECLARE_TIMER_FUNCTION(ReassocTimeout); ++DECLARE_TIMER_FUNCTION(DisassocTimeout); ++DECLARE_TIMER_FUNCTION(LinkDownExec); ++DECLARE_TIMER_FUNCTION(StaQuickResponeForRateUpExec); ++DECLARE_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); ++DECLARE_TIMER_FUNCTION(PsPollWakeExec); ++DECLARE_TIMER_FUNCTION(RadioOnExec); ++ ++#ifdef RTMP_MAC_USB ++DECLARE_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); ++#endif // RTMP_MAC_USB // ++ ++#if defined(AP_LED) || defined(STA_LED) ++DECLARE_TIMER_FUNCTION(LedCtrlMain); ++#endif ++ ++ ++#endif // __RTMP_TIMER_H__ // +diff --git a/drivers/staging/rt2860/rtmp_type.h b/drivers/staging/rt2860/rtmp_type.h +index 1fd7df1..f99cd2b 100644 +--- a/drivers/staging/rt2860/rtmp_type.h ++++ b/drivers/staging/rt2860/rtmp_type.h +@@ -38,8 +38,10 @@ + #ifndef __RTMP_TYPE_H__ + #define __RTMP_TYPE_H__ + ++ + #define PACKED __attribute__ ((packed)) + ++#ifdef LINUX + // Put platform dependent declaration here + // For example, linux type definition + typedef unsigned char UINT8; +@@ -48,6 +50,7 @@ typedef unsigned int UINT32; + typedef unsigned long long UINT64; + typedef int INT32; + typedef long long INT64; ++#endif // LINUX // + + typedef unsigned char * PUINT8; + typedef unsigned short * PUINT16; +@@ -56,22 +59,30 @@ typedef unsigned long long * PUINT64; + typedef int * PINT32; + typedef long long * PINT64; + ++// modified for fixing compile warning on Sigma 8634 platform ++typedef char STRING; + typedef signed char CHAR; ++ + typedef signed short SHORT; + typedef signed int INT; + typedef signed long LONG; + typedef signed long long LONGLONG; + + ++#ifdef LINUX + typedef unsigned char UCHAR; + typedef unsigned short USHORT; + typedef unsigned int UINT; + typedef unsigned long ULONG; ++#endif // LINUX // + typedef unsigned long long ULONGLONG; + + typedef unsigned char BOOLEAN; ++#ifdef LINUX + typedef void VOID; ++#endif // LINUX // + ++typedef char * PSTRING; + typedef VOID * PVOID; + typedef CHAR * PCHAR; + typedef UCHAR * PUCHAR; +@@ -90,5 +101,47 @@ typedef union _LARGE_INTEGER { + INT64 QuadPart; + } LARGE_INTEGER; + +-#endif // __RTMP_TYPE_H__ ++ ++// ++// Register set pair for initialzation register set definition ++// ++typedef struct _RTMP_REG_PAIR ++{ ++ ULONG Register; ++ ULONG Value; ++} RTMP_REG_PAIR, *PRTMP_REG_PAIR; ++ ++typedef struct _REG_PAIR ++{ ++ UCHAR Register; ++ UCHAR Value; ++} REG_PAIR, *PREG_PAIR; ++ ++// ++// Register set pair for initialzation register set definition ++// ++typedef struct _RTMP_RF_REGS ++{ ++ UCHAR Channel; ++ ULONG R1; ++ ULONG R2; ++ ULONG R3; ++ ULONG R4; ++} RTMP_RF_REGS, *PRTMP_RF_REGS; ++ ++typedef struct _FREQUENCY_ITEM { ++ UCHAR Channel; ++ UCHAR N; ++ UCHAR R; ++ UCHAR K; ++} FREQUENCY_ITEM, *PFREQUENCY_ITEM; ++ ++ ++typedef int NTSTATUS; ++ ++ ++#define STATUS_SUCCESS 0x00 ++#define STATUS_UNSUCCESSFUL 0x01 ++ ++#endif // __RTMP_TYPE_H__ // + +diff --git a/drivers/staging/rt2860/rtusb_io.h b/drivers/staging/rt2860/rtusb_io.h +new file mode 100644 +index 0000000..055e4ef +--- /dev/null ++++ b/drivers/staging/rt2860/rtusb_io.h +@@ -0,0 +1,189 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++*/ ++ ++ ++#ifndef __RTUSB_IO_H__ ++#define __RTUSB_IO_H__ ++ ++#include "rtmp_type.h" ++ ++// New for MeetingHouse Api support ++#define CMDTHREAD_VENDOR_RESET 0x0D730101 // cmd ++#define CMDTHREAD_VENDOR_UNPLUG 0x0D730102 // cmd ++#define CMDTHREAD_VENDOR_SWITCH_FUNCTION 0x0D730103 // cmd ++#define CMDTHREAD_MULTI_WRITE_MAC 0x0D730107 // cmd ++#define CMDTHREAD_MULTI_READ_MAC 0x0D730108 // cmd ++#define CMDTHREAD_VENDOR_EEPROM_WRITE 0x0D73010A // cmd ++#define CMDTHREAD_VENDOR_EEPROM_READ 0x0D73010B // cmd ++#define CMDTHREAD_VENDOR_ENTER_TESTMODE 0x0D73010C // cmd ++#define CMDTHREAD_VENDOR_EXIT_TESTMODE 0x0D73010D // cmd ++#define CMDTHREAD_VENDOR_WRITE_BBP 0x0D730119 // cmd ++#define CMDTHREAD_VENDOR_READ_BBP 0x0D730118 // cmd ++#define CMDTHREAD_VENDOR_WRITE_RF 0x0D73011A // cmd ++#define CMDTHREAD_VENDOR_FLIP_IQ 0x0D73011D // cmd ++#define CMDTHREAD_RESET_BULK_OUT 0x0D730210 // cmd ++#define CMDTHREAD_RESET_BULK_IN 0x0D730211 // cmd ++#define CMDTHREAD_SET_PSM_BIT 0x0D730212 // cmd ++#define CMDTHREAD_SET_RADIO 0x0D730214 // cmd ++#define CMDTHREAD_UPDATE_TX_RATE 0x0D730216 // cmd ++#define CMDTHREAD_802_11_ADD_KEY_WEP 0x0D730218 // cmd ++#define CMDTHREAD_RESET_FROM_ERROR 0x0D73021A // cmd ++#define CMDTHREAD_LINK_DOWN 0x0D73021B // cmd ++#define CMDTHREAD_RESET_FROM_NDIS 0x0D73021C // cmd ++#define CMDTHREAD_CHECK_GPIO 0x0D730215 // cmd ++#define CMDTHREAD_FORCE_WAKE_UP 0x0D730222 // cmd ++#define CMDTHREAD_SET_BW 0x0D730225 // cmd ++#define CMDTHREAD_SET_ASIC_WCID 0x0D730226 // cmd ++#define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 // cmd ++#define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D // cmd ++#define RT_CMD_SET_KEY_TABLE 0x0D730228 // cmd ++#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 // cmd ++#define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E // cmd ++#define CMDTHREAD_SET_GROUP_KEY 0x0D73023F // cmd ++#define CMDTHREAD_SET_PAIRWISE_KEY 0x0D730240 // cmd ++ ++#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER 0x0D710105 // cmd ++#define CMDTHREAD_802_11_SET_PHY_MODE 0x0D79010C // cmd ++#define CMDTHREAD_802_11_SET_STA_CONFIG 0x0D790111 // cmd ++#define CMDTHREAD_802_11_SET_PREAMBLE 0x0D790101 // cmd ++#define CMDTHREAD_802_11_COUNTER_MEASURE 0x0D790102 // cmd ++// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++#define CMDTHREAD_UPDATE_PROTECT 0x0D790103 // cmd ++// end johnli ++ ++ ++//CMDTHREAD_MULTI_READ_MAC ++//CMDTHREAD_MULTI_WRITE_MAC ++//CMDTHREAD_VENDOR_EEPROM_READ ++//CMDTHREAD_VENDOR_EEPROM_WRITE ++typedef struct _CMDHandler_TLV { ++ USHORT Offset; ++ USHORT Length; ++ UCHAR DataFirst; ++} CMDHandler_TLV, *PCMDHandler_TLV; ++ ++ ++typedef struct _CmdQElmt { ++ UINT command; ++ PVOID buffer; ++ ULONG bufferlength; ++ BOOLEAN CmdFromNdis; ++ BOOLEAN SetOperation; ++ struct _CmdQElmt *next; ++} CmdQElmt, *PCmdQElmt; ++ ++typedef struct _CmdQ { ++ UINT size; ++ CmdQElmt *head; ++ CmdQElmt *tail; ++ UINT32 CmdQState; ++}CmdQ, *PCmdQ; ++ ++ ++#define EnqueueCmd(cmdq, cmdqelmt) \ ++{ \ ++ if (cmdq->size == 0) \ ++ cmdq->head = cmdqelmt; \ ++ else \ ++ cmdq->tail->next = cmdqelmt; \ ++ cmdq->tail = cmdqelmt; \ ++ cmdqelmt->next = NULL; \ ++ cmdq->size++; \ ++} ++ ++ ++/****************************************************************************** ++ ++ USB Cmd to ASIC Related MACRO ++ ++******************************************************************************/ ++// reset MAC of a station entry to 0xFFFFFFFFFFFF ++#define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ ++ { RT_SET_ASIC_WCID SetAsicWcid; \ ++ SetAsicWcid.WCID = Wcid; \ ++ SetAsicWcid.SetTid = 0xffffffff; \ ++ SetAsicWcid.DeleteTid = 0xffffffff; \ ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID, \ ++ &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); } ++ ++// add this entry into ASIC RX WCID search table ++#define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY, \ ++ pEntry, sizeof(MAC_TABLE_ENTRY)); ++ ++// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++// Set MAC register value according operation mode ++#define RTMP_UPDATE_PROTECT(pAd) \ ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_UPDATE_PROTECT, NULL, 0); ++// end johnli ++ ++// remove Pair-wise key material from ASIC ++// yet implement ++#define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) ++ ++// add Client security information into ASIC WCID table and IVEIV table ++#define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ ++ { RTMP_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid); \ ++ if (pEntry->Aid >= 1) { \ ++ RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; \ ++ SetAsicWcidAttri.WCID = pEntry->Aid; \ ++ if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && \ ++ (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) \ ++ { \ ++ SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ ++ } \ ++ else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone) \ ++ { \ ++ SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ ++ } \ ++ else SetAsicWcidAttri.Cipher = 0; \ ++ DBGPRINT(RT_DEBUG_TRACE, ("aid cipher = %ld\n",SetAsicWcidAttri.Cipher)); \ ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER, \ ++ &SetAsicWcidAttri, sizeof(RT_SET_ASIC_WCID_ATTRI)); } } ++ ++// Insert the BA bitmap to ASIC for the Wcid entry ++#define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ ++ do{ \ ++ RT_SET_ASIC_WCID SetAsicWcid; \ ++ SetAsicWcid.WCID = (_Aid); \ ++ SetAsicWcid.SetTid = (0x10000<<(_TID)); \ ++ SetAsicWcid.DeleteTid = 0xffffffff; \ ++ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ ++ }while(0) ++ ++// Remove the BA bitmap from ASIC for the Wcid entry ++#define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ ++ do{ \ ++ RT_SET_ASIC_WCID SetAsicWcid; \ ++ SetAsicWcid.WCID = (_Wcid); \ ++ SetAsicWcid.SetTid = (0xffffffff); \ ++ SetAsicWcid.DeleteTid = (0x10000<<(_TID) ); \ ++ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ ++ }while(0) ++ ++ ++#endif // __RTUSB_IO_H__ // +diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h +index 0a878ba..b9fc676 100644 +--- a/drivers/staging/rt2860/spectrum.h ++++ b/drivers/staging/rt2860/spectrum.h +@@ -23,7 +23,7 @@ + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * * + ************************************************************************* +-*/ ++ */ + + #ifndef __SPECTRUM_H__ + #define __SPECTRUM_H__ +@@ -31,112 +31,10 @@ + #include "rtmp_type.h" + #include "spectrum_def.h" + +-typedef struct PACKED _TPC_REPORT_INFO +-{ +- UINT8 TxPwr; +- UINT8 LinkMargin; +-} TPC_REPORT_INFO, *PTPC_REPORT_INFO; +- +-typedef struct PACKED _CH_SW_ANN_INFO +-{ +- UINT8 ChSwMode; +- UINT8 Channel; +- UINT8 ChSwCnt; +-} CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; +- +-typedef union PACKED _MEASURE_REQ_MODE +-{ +- struct PACKED +- { +- UINT8 Rev0:1; +- UINT8 Enable:1; +- UINT8 Request:1; +- UINT8 Report:1; +- UINT8 Rev1:4; +- } field; +- UINT8 word; +-} MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; +- +-typedef struct PACKED _MEASURE_REQ +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +-} MEASURE_REQ, *PMEASURE_REQ; +- +-typedef struct PACKED _MEASURE_REQ_INFO +-{ +- UINT8 Token; +- MEASURE_REQ_MODE ReqMode; +- UINT8 ReqType; +- MEASURE_REQ MeasureReq; +-} MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; +- +-typedef union PACKED _MEASURE_BASIC_REPORT_MAP +-{ +- struct PACKED +- { +- UINT8 BSS:1; +- UINT8 OfdmPreamble:1; +- UINT8 UnidentifiedSignal:1; +- UINT8 Radar:1; +- UINT8 Unmeasure:1; +- UINT8 Rev:3; +- } field; +- UINT8 word; +-} MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; +- +-typedef struct PACKED _MEASURE_BASIC_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- MEASURE_BASIC_REPORT_MAP Map; +-} MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; +- +-typedef struct PACKED _MEASURE_CCA_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 CCA_Busy_Fraction; +-} MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; +- +-typedef struct PACKED _MEASURE_RPI_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 RPI_Density[8]; +-} MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; +- +-typedef union PACKED _MEASURE_REPORT_MODE +-{ +- struct PACKED +- { +- UINT8 Late:1; +- UINT8 Incapable:1; +- UINT8 Refused:1; +- UINT8 Rev:5; +- } field; +- UINT8 word; +-} MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; +- +-typedef struct PACKED _MEASURE_REPORT_INFO +-{ +- UINT8 Token; +- MEASURE_REPORT_MODE ReportMode; +- UINT8 ReportType; +- UINT8 Octect[0]; +-} MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; +- +-typedef struct PACKED _QUIET_INFO +-{ +- UINT8 QuietCnt; +- UINT8 QuietPeriod; +- UINT8 QuietDuration; +- UINT8 QuietOffset; +-} QUIET_INFO, *PQUIET_INFO; ++ ++CHAR RTMP_GetTxPwr( ++ IN PRTMP_ADAPTER pAd, ++ IN HTTRANSMIT_SETTING HTTxMode); + + /* + ========================================================================== +@@ -150,14 +48,17 @@ typedef struct PACKED _QUIET_INFO + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementReq( ++VOID MakeMeasurementReqFrame( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, ++ OUT PUCHAR pOutBuffer, ++ OUT PULONG pFrameLen, ++ IN UINT8 TotalLen, ++ IN UINT8 Category, ++ IN UINT8 Action, + IN UINT8 MeasureToken, + IN UINT8 MeasureReqMode, + IN UINT8 MeasureReqType, +- IN UINT8 MeasureCh, +- IN UINT16 MeasureDuration); ++ IN UINT8 NumOfRepetitions); + + /* + ========================================================================== +@@ -264,11 +165,16 @@ VOID PeerSpectrumAction( + */ + INT Set_MeasureReq_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_TpcReq_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); ++ ++INT Set_PwrConstraint( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ + + VOID MeasureReqTabInit( + IN PRTMP_ADAPTER pAd); +@@ -276,6 +182,38 @@ VOID MeasureReqTabInit( + VOID MeasureReqTabExit( + IN PRTMP_ADAPTER pAd); + ++PMEASURE_REQ_ENTRY MeasureReqLookUp( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT8 DialogToken); ++ ++PMEASURE_REQ_ENTRY MeasureReqInsert( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT8 DialogToken); ++ ++VOID MeasureReqDelete( ++ IN PRTMP_ADAPTER pAd, ++ IN UINT8 DialogToken); ++ ++VOID InsertChannelRepIE( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PSTRING pCountry, ++ IN UINT8 RegulatoryClass); ++ ++VOID InsertTpcReportIE( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 TxPwr, ++ IN UINT8 LinkMargin); ++ ++VOID InsertDialogToken( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 DialogToken); ++ + VOID TpcReqTabInit( + IN PRTMP_ADAPTER pAd); + +@@ -288,5 +226,10 @@ VOID NotifyChSwAnnToPeerAPs( + IN PUCHAR pTA, + IN UINT8 ChSwMode, + IN UINT8 Channel); ++ ++VOID RguClass_BuildBcnChList( ++ IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pBuf, ++ OUT PULONG pBufLen); + #endif // __SPECTRUM_H__ // + +diff --git a/drivers/staging/rt2860/spectrum_def.h b/drivers/staging/rt2860/spectrum_def.h +index 4ca4817..ae67014 100644 +--- a/drivers/staging/rt2860/spectrum_def.h ++++ b/drivers/staging/rt2860/spectrum_def.h +@@ -39,21 +39,15 @@ + #ifndef __SPECTRUM_DEF_H__ + #define __SPECTRUM_DEF_H__ + +-#define MAX_MEASURE_REQ_TAB_SIZE 3 ++ ++#define MAX_MEASURE_REQ_TAB_SIZE 32 + #define MAX_HASH_MEASURE_REQ_TAB_SIZE MAX_MEASURE_REQ_TAB_SIZE + +-#define MAX_TPC_REQ_TAB_SIZE 3 ++#define MAX_TPC_REQ_TAB_SIZE 32 + #define MAX_HASH_TPC_REQ_TAB_SIZE MAX_TPC_REQ_TAB_SIZE + + #define MIN_RCV_PWR 100 /* Negative value ((dBm) */ + +-#define RM_TPC_REQ 0 +-#define RM_MEASURE_REQ 1 +- +-#define RM_BASIC 0 +-#define RM_CCA 1 +-#define RM_RPI_HISTOGRAM 2 +- + #define TPC_REQ_AGE_OUT 500 /* ms */ + #define MQ_REQ_AGE_OUT 500 /* ms */ + +@@ -91,5 +85,141 @@ typedef struct _TPC_REQ_TAB + TPC_REQ_ENTRY Content[MAX_TPC_REQ_TAB_SIZE]; + } TPC_REQ_TAB, *PTPC_REQ_TAB; + ++ ++/* The regulatory information */ ++typedef struct _DOT11_CHANNEL_SET ++{ ++ UCHAR NumberOfChannels; ++ UINT8 MaxTxPwr; ++ UCHAR ChannelList[16]; ++} DOT11_CHANNEL_SET, *PDOT11_CHANNEL_SET; ++ ++typedef struct _DOT11_REGULATORY_INFORMATION ++{ ++ UCHAR RegulatoryClass; ++ DOT11_CHANNEL_SET ChannelSet; ++} DOT11_REGULATORY_INFORMATION, *PDOT11_REGULATORY_INFORMATION; ++ ++ ++ ++#define RM_TPC_REQ 0 ++#define RM_MEASURE_REQ 1 ++ ++#define RM_BASIC 0 ++#define RM_CCA 1 ++#define RM_RPI_HISTOGRAM 2 ++#define RM_CH_LOAD 3 ++#define RM_NOISE_HISTOGRAM 4 ++ ++ ++typedef struct PACKED _TPC_REPORT_INFO ++{ ++ UINT8 TxPwr; ++ UINT8 LinkMargin; ++} TPC_REPORT_INFO, *PTPC_REPORT_INFO; ++ ++typedef struct PACKED _CH_SW_ANN_INFO ++{ ++ UINT8 ChSwMode; ++ UINT8 Channel; ++ UINT8 ChSwCnt; ++} CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; ++ ++typedef union PACKED _MEASURE_REQ_MODE ++{ ++ struct PACKED ++ { ++ UINT8 Parallel:1; ++ UINT8 Enable:1; ++ UINT8 Request:1; ++ UINT8 Report:1; ++ UINT8 DurationMandatory:1; ++ UINT8 :3; ++ } field; ++ UINT8 word; ++} MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; ++ ++typedef struct PACKED _MEASURE_REQ ++{ ++ UINT8 ChNum; ++ UINT64 MeasureStartTime; ++ UINT16 MeasureDuration; ++} MEASURE_REQ, *PMEASURE_REQ; ++ ++typedef struct PACKED _MEASURE_REQ_INFO ++{ ++ UINT8 Token; ++ MEASURE_REQ_MODE ReqMode; ++ UINT8 ReqType; ++ UINT8 Oct[0]; ++} MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; ++ ++typedef union PACKED _MEASURE_BASIC_REPORT_MAP ++{ ++ struct PACKED ++ { ++ UINT8 BSS:1; ++ ++ UINT8 OfdmPreamble:1; ++ UINT8 UnidentifiedSignal:1; ++ UINT8 Radar:1; ++ UINT8 Unmeasure:1; ++ UINT8 Rev:3; ++ } field; ++ UINT8 word; ++} MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; ++ ++typedef struct PACKED _MEASURE_BASIC_REPORT ++{ ++ UINT8 ChNum; ++ UINT64 MeasureStartTime; ++ UINT16 MeasureDuration; ++ MEASURE_BASIC_REPORT_MAP Map; ++} MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; ++ ++typedef struct PACKED _MEASURE_CCA_REPORT ++{ ++ UINT8 ChNum; ++ UINT64 MeasureStartTime; ++ UINT16 MeasureDuration; ++ UINT8 CCA_Busy_Fraction; ++} MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; ++ ++typedef struct PACKED _MEASURE_RPI_REPORT ++{ ++ UINT8 ChNum; ++ UINT64 MeasureStartTime; ++ UINT16 MeasureDuration; ++ UINT8 RPI_Density[8]; ++} MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; ++ ++typedef union PACKED _MEASURE_REPORT_MODE ++{ ++ struct PACKED ++ { ++ UINT8 Late:1; ++ UINT8 Incapable:1; ++ UINT8 Refused:1; ++ UINT8 Rev:5; ++ } field; ++ UINT8 word; ++} MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; ++ ++typedef struct PACKED _MEASURE_REPORT_INFO ++{ ++ UINT8 Token; ++ UINT8 ReportMode; ++ UINT8 ReportType; ++ UINT8 Octect[0]; ++} MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; ++ ++typedef struct PACKED _QUIET_INFO ++{ ++ UINT8 QuietCnt; ++ UINT8 QuietPeriod; ++ UINT16 QuietDuration; ++ UINT16 QuietOffset; ++} QUIET_INFO, *PQUIET_INFO; ++ + #endif // __SPECTRUM_DEF_H__ // + +diff --git a/drivers/staging/rt2860/sta/aironet.c b/drivers/staging/rt2860/sta/aironet.c +deleted file mode 100644 +index 4af4a19..0000000 +--- a/drivers/staging/rt2860/sta/aironet.c ++++ /dev/null +@@ -1,1312 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- aironet.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 04-06-15 Initial +-*/ +-#include "../rt_config.h" +- +-/* +- ========================================================================== +- Description: +- association state machine init, including state transition and timer init +- Parameters: +- S - pointer to the association state machine +- ========================================================================== +- */ +-VOID AironetStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(S, Trans, MAX_AIRONET_STATE, MAX_AIRONET_MSG, (STATE_MACHINE_FUNC)Drop, AIRONET_IDLE, AIRONET_MACHINE_BASE); +- StateMachineSetAction(S, AIRONET_IDLE, MT2_AIRONET_MSG, (STATE_MACHINE_FUNC)AironetMsgAction); +- StateMachineSetAction(S, AIRONET_IDLE, MT2_AIRONET_SCAN_REQ, (STATE_MACHINE_FUNC)AironetRequestAction); +- StateMachineSetAction(S, AIRONET_SCANNING, MT2_AIRONET_SCAN_DONE, (STATE_MACHINE_FUNC)AironetReportAction); +-} +- +-/* +- ========================================================================== +- Description: +- This is state machine function. +- When receiving EAPOL packets which is for 802.1x key management. +- Use both in WPA, and WPAPSK case. +- In this function, further dispatch to different functions according to the received packet. 3 categories are : +- 1. normal 4-way pairwisekey and 2-way groupkey handshake +- 2. MIC error (Countermeasures attack) report packet from STA. +- 3. Request for pairwise/group key update from STA +- Return: +- ========================================================================== +-*/ +-VOID AironetMsgAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Length; +- UCHAR Index, i; +- PUCHAR pData; +- PAIRONET_RM_REQUEST_FRAME pRMReq; +- PRM_REQUEST_ACTION pReqElem; +- +- DBGPRINT(RT_DEBUG_TRACE, ("-----> AironetMsgAction\n")); +- +- // 0. Get Aironet IAPP header first +- pRMReq = (PAIRONET_RM_REQUEST_FRAME) &Elem->Msg[LENGTH_802_11]; +- pData = (PUCHAR) &Elem->Msg[LENGTH_802_11]; +- +- // 1. Change endian format form network to little endian +- Length = be2cpu16(pRMReq->IAPP.Length); +- +- // 2.0 Sanity check, this should only happen when CCX 2.0 support is enabled +- if (pAd->StaCfg.CCXEnable != TRUE) +- return; +- +- // 2.1 Radio measurement must be on +- if (pAd->StaCfg.CCXControl.field.RMEnable != 1) +- return; +- +- // 2.2. Debug print all bit information +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP ID & Length %d\n", Length)); +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP Type %x\n", pRMReq->IAPP.Type)); +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP SubType %x\n", pRMReq->IAPP.SubType)); +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP Dialog Token %x\n", pRMReq->IAPP.Token)); +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP Activation Delay %x\n", pRMReq->Delay)); +- DBGPRINT(RT_DEBUG_TRACE, ("IAPP Measurement Offset %x\n", pRMReq->Offset)); +- +- // 3. Check IAPP frame type, it must be 0x32 for Cisco Aironet extension +- if (pRMReq->IAPP.Type != AIRONET_IAPP_TYPE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong IAPP type for Cisco Aironet extension\n")); +- return; +- } +- +- // 4. Check IAPP frame subtype, it must be 0x01 for Cisco Aironet extension request. +- // Since we are acting as client only, we will disregards reply subtype. +- if (pRMReq->IAPP.SubType != AIRONET_IAPP_SUBTYPE_REQUEST) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong IAPP subtype for Cisco Aironet extension\n")); +- return; +- } +- +- // 5. Verify Destination MAC and Source MAC, both should be all zeros. +- if (! MAC_ADDR_EQUAL(pRMReq->IAPP.DA, ZERO_MAC_ADDR)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong IAPP DA for Cisco Aironet extension, it's not Zero\n")); +- return; +- } +- +- if (! MAC_ADDR_EQUAL(pRMReq->IAPP.SA, ZERO_MAC_ADDR)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong IAPP SA for Cisco Aironet extension, it's not Zero\n")); +- return; +- } +- +- // 6. Reinit all report related fields +- NdisZeroMemory(pAd->StaCfg.FrameReportBuf, 2048); +- NdisZeroMemory(pAd->StaCfg.BssReportOffset, sizeof(USHORT) * MAX_LEN_OF_BSS_TABLE); +- NdisZeroMemory(pAd->StaCfg.MeasurementRequest, sizeof(RM_REQUEST_ACTION) * 4); +- +- // 7. Point to the start of first element report element +- pAd->StaCfg.FrameReportLen = LENGTH_802_11 + sizeof(AIRONET_IAPP_HEADER); +- DBGPRINT(RT_DEBUG_TRACE, ("FR len = %d\n", pAd->StaCfg.FrameReportLen)); +- pAd->StaCfg.LastBssIndex = 0xff; +- pAd->StaCfg.RMReqCnt = 0; +- pAd->StaCfg.ParallelReq = FALSE; +- pAd->StaCfg.ParallelDuration = 0; +- pAd->StaCfg.ParallelChannel = 0; +- pAd->StaCfg.IAPPToken = pRMReq->IAPP.Token; +- pAd->StaCfg.CurrentRMReqIdx = 0; +- pAd->StaCfg.CLBusyBytes = 0; +- // Reset the statistics +- for (i = 0; i < 8; i++) +- pAd->StaCfg.RPIDensity[i] = 0; +- +- Index = 0; +- +- // 8. Save dialog token for report +- pAd->StaCfg.IAPPToken = pRMReq->IAPP.Token; +- +- // Save Activation delay & measurement offset, Not really needed +- +- // 9. Point to the first request element +- pData += sizeof(AIRONET_RM_REQUEST_FRAME); +- // Length should exclude the CISCO Aironet SNAP header +- Length -= (sizeof(AIRONET_RM_REQUEST_FRAME) - LENGTH_802_1_H); +- +- // 10. Start Parsing the Measurement elements. +- // Be careful about multiple MR elements within one frames. +- while (Length > 0) +- { +- pReqElem = (PRM_REQUEST_ACTION) pData; +- switch (pReqElem->ReqElem.Eid) +- { +- case IE_MEASUREMENT_REQUEST: +- // From the example, it seems we only need to support one request in one frame +- // There is no multiple request in one frame. +- // Besides, looks like we need to take care the measurement request only. +- // The measurement request is always 4 bytes. +- +- // Start parsing this type of request. +- // 0. Eid is IE_MEASUREMENT_REQUEST +- // 1. Length didn't include Eid and Length field, it always be 8. +- // 2. Measurement Token, we nned to save it for the corresponding report. +- // 3. Measurement Mode, Although there are definitions, but we din't see value other than +- // 0 from test specs examples. +- // 4. Measurement Type, this is what we need to do. +- switch (pReqElem->ReqElem.Type) +- { +- case MSRN_TYPE_CHANNEL_LOAD_REQ: +- case MSRN_TYPE_NOISE_HIST_REQ: +- case MSRN_TYPE_BEACON_REQ: +- // Check the Enable non-serving channel measurement control +- if (pAd->StaCfg.CCXControl.field.DCRMEnable == 0) +- { +- // Check channel before enqueue the action +- if (pReqElem->Measurement.Channel != pAd->CommonCfg.Channel) +- break; +- } +- else +- { +- // If off channel measurement, check the TU duration limit +- if (pReqElem->Measurement.Channel != pAd->CommonCfg.Channel) +- if (pReqElem->Measurement.Duration > pAd->StaCfg.CCXControl.field.TuLimit) +- break; +- } +- +- // Save requests and execute actions later +- NdisMoveMemory(&pAd->StaCfg.MeasurementRequest[Index], pReqElem, sizeof(RM_REQUEST_ACTION)); +- Index += 1; +- break; +- +- case MSRN_TYPE_FRAME_REQ: +- // Since it's option, we will support later +- // FrameRequestAction(pAd, pData); +- break; +- +- default: +- break; +- } +- +- // Point to next Measurement request +- pData += sizeof(RM_REQUEST_ACTION); +- Length -= sizeof(RM_REQUEST_ACTION); +- break; +- +- // We accept request only, all others are dropped +- case IE_MEASUREMENT_REPORT: +- case IE_AP_TX_POWER: +- case IE_MEASUREMENT_CAPABILITY: +- default: +- return; +- } +- } +- +- // 11. Update some flags and index +- pAd->StaCfg.RMReqCnt = Index; +- +- if (Index) +- { +- MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_REQ, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<----- AironetMsgAction\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID AironetRequestAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PRM_REQUEST_ACTION pReq; +- +- // 1. Point to next request element +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[pAd->StaCfg.CurrentRMReqIdx]; +- +- // 2. Parse measurement type and call appropriate functions +- if (pReq->ReqElem.Type == MSRN_TYPE_CHANNEL_LOAD_REQ) +- // Channel Load measurement request +- ChannelLoadRequestAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else if (pReq->ReqElem.Type == MSRN_TYPE_NOISE_HIST_REQ) +- // Noise Histogram measurement request +- NoiseHistRequestAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else if (pReq->ReqElem.Type == MSRN_TYPE_BEACON_REQ) +- // Beacon measurement request +- BeaconRequestAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else +- // Unknown. Do nothing and return, this should never happen +- return; +- +- // 3. Peek into the next request, if it's parallel, we will update the scan time to the largest one +- if ((pAd->StaCfg.CurrentRMReqIdx + 1) < pAd->StaCfg.RMReqCnt) +- { +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[pAd->StaCfg.CurrentRMReqIdx + 1]; +- // Check for parallel bit +- if ((pReq->ReqElem.Mode & 0x01) && (pReq->Measurement.Channel == pAd->StaCfg.CCXScanChannel)) +- { +- // Update parallel mode request information +- pAd->StaCfg.ParallelReq = TRUE; +- pAd->StaCfg.CCXScanTime = ((pReq->Measurement.Duration > pAd->StaCfg.CCXScanTime) ? +- (pReq->Measurement.Duration) : (pAd->StaCfg.CCXScanTime)); +- } +- } +- +- // 4. Call RT28XX_MLME_HANDLER to execute the request mlme commands, Scan request is the only one used +- RT28XX_MLME_HANDLER(pAd); +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Prepare channel load report action, special scan operation added +- to support +- +- Arguments: +- pAd Pointer to our adapter +- pData Start from element ID +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ChannelLoadRequestAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- PRM_REQUEST_ACTION pReq; +- MLME_SCAN_REQ_STRUCT ScanReq; +- UCHAR ZeroSsid[32]; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- PHEADER_802_11 pNullFrame; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelLoadRequestAction ----->\n")); +- +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[Index]; +- NdisZeroMemory(ZeroSsid, 32); +- +- // Prepare for special scan request +- // The scan definition is different with our Active, Passive scan definition. +- // For CCX2, Active means send out probe request with broadcast BSSID. +- // Passive means no probe request sent, only listen to the beacons. +- // The channel scanned is fixed as specified, no need to scan all channels. +- // The scan wait time is specified in the request too. +- // Passive scan Mode +- +- // Control state machine is not idle, reject the request +- if ((pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) && (Index == 0)) +- return; +- +- // Fill out stuff for scan request +- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_CISCO_CHANNEL_LOAD); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- +- // Reset some internal control flags to make sure this scan works. +- BssTableInit(&pAd->StaCfg.CCXBssTab); +- pAd->StaCfg.ScanCnt = 0; +- pAd->StaCfg.CCXScanChannel = pReq->Measurement.Channel; +- pAd->StaCfg.CCXScanTime = pReq->Measurement.Duration; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Duration %d, Channel %d!\n", pReq->Measurement.Duration, pReq->Measurement.Channel)); +- +- // If it's non serving channel scan, send out a null frame with PSM bit on. +- if (pAd->StaCfg.CCXScanChannel != pAd->CommonCfg.Channel) +- { +- // Use MLME enqueue method +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- pNullFrame = (PHEADER_802_11) pOutBuffer;; +- // Make the power save Null frame with PSM bit on +- MgtMacHeaderInit(pAd, pNullFrame, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pNullFrame->Duration = 0; +- pNullFrame->FC.Type = BTYPE_DATA; +- pNullFrame->FC.PwrMgmt = PWR_SAVE; +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("Send PSM Data frame for off channel RM\n")); +- RTMPusecDelay(5000); +- } +- +- pAd->StaCfg.CCXReqType = MSRN_TYPE_CHANNEL_LOAD_REQ; +- pAd->StaCfg.CLBusyBytes = 0; +- // Enable Rx with promiscuous reception +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, 0x1010); +- +- // Set channel load measurement flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_MEASUREMENT); +- +- pAd->Mlme.AironetMachine.CurrState = AIRONET_SCANNING; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelLoadRequestAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Prepare noise histogram report action, special scan operation added +- to support +- +- Arguments: +- pAd Pointer to our adapter +- pData Start from element ID +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID NoiseHistRequestAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- PRM_REQUEST_ACTION pReq; +- MLME_SCAN_REQ_STRUCT ScanReq; +- UCHAR ZeroSsid[32], i; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- PHEADER_802_11 pNullFrame; +- +- DBGPRINT(RT_DEBUG_TRACE, ("NoiseHistRequestAction ----->\n")); +- +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[Index]; +- NdisZeroMemory(ZeroSsid, 32); +- +- // Prepare for special scan request +- // The scan definition is different with our Active, Passive scan definition. +- // For CCX2, Active means send out probe request with broadcast BSSID. +- // Passive means no probe request sent, only listen to the beacons. +- // The channel scanned is fixed as specified, no need to scan all channels. +- // The scan wait time is specified in the request too. +- // Passive scan Mode +- +- // Control state machine is not idle, reject the request +- if ((pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) && (Index == 0)) +- return; +- +- // Fill out stuff for scan request +- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_CISCO_NOISE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- +- // Reset some internal control flags to make sure this scan works. +- BssTableInit(&pAd->StaCfg.CCXBssTab); +- pAd->StaCfg.ScanCnt = 0; +- pAd->StaCfg.CCXScanChannel = pReq->Measurement.Channel; +- pAd->StaCfg.CCXScanTime = pReq->Measurement.Duration; +- pAd->StaCfg.CCXReqType = MSRN_TYPE_NOISE_HIST_REQ; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Duration %d, Channel %d!\n", pReq->Measurement.Duration, pReq->Measurement.Channel)); +- +- // If it's non serving channel scan, send out a null frame with PSM bit on. +- if (pAd->StaCfg.CCXScanChannel != pAd->CommonCfg.Channel) +- { +- // Use MLME enqueue method +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- pNullFrame = (PHEADER_802_11) pOutBuffer; +- // Make the power save Null frame with PSM bit on +- MgtMacHeaderInit(pAd, pNullFrame, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pNullFrame->Duration = 0; +- pNullFrame->FC.Type = BTYPE_DATA; +- pNullFrame->FC.PwrMgmt = PWR_SAVE; +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("Send PSM Data frame for off channel RM\n")); +- RTMPusecDelay(5000); +- } +- +- // Reset the statistics +- for (i = 0; i < 8; i++) +- pAd->StaCfg.RPIDensity[i] = 0; +- +- // Enable Rx with promiscuous reception +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, 0x1010); +- +- // Set channel load measurement flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_MEASUREMENT); +- +- pAd->Mlme.AironetMachine.CurrState = AIRONET_SCANNING; +- +- DBGPRINT(RT_DEBUG_TRACE, ("NoiseHistRequestAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Prepare Beacon report action, special scan operation added +- to support +- +- Arguments: +- pAd Pointer to our adapter +- pData Start from element ID +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID BeaconRequestAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- PRM_REQUEST_ACTION pReq; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- PHEADER_802_11 pNullFrame; +- MLME_SCAN_REQ_STRUCT ScanReq; +- UCHAR ZeroSsid[32]; +- +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconRequestAction ----->\n")); +- +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[Index]; +- NdisZeroMemory(ZeroSsid, 32); +- +- // Prepare for special scan request +- // The scan definition is different with our Active, Passive scan definition. +- // For CCX2, Active means send out probe request with broadcast BSSID. +- // Passive means no probe request sent, only listen to the beacons. +- // The channel scanned is fixed as specified, no need to scan all channels. +- // The scan wait time is specified in the request too. +- if (pReq->Measurement.ScanMode == MSRN_SCAN_MODE_PASSIVE) +- { +- // Passive scan Mode +- DBGPRINT(RT_DEBUG_TRACE, ("Passive Scan Mode!\n")); +- +- // Control state machine is not idle, reject the request +- if ((pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) && (Index == 0)) +- return; +- +- // Fill out stuff for scan request +- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_CISCO_PASSIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- +- // Reset some internal control flags to make sure this scan works. +- BssTableInit(&pAd->StaCfg.CCXBssTab); +- pAd->StaCfg.ScanCnt = 0; +- pAd->StaCfg.CCXScanChannel = pReq->Measurement.Channel; +- pAd->StaCfg.CCXScanTime = pReq->Measurement.Duration; +- pAd->StaCfg.CCXReqType = MSRN_TYPE_BEACON_REQ; +- DBGPRINT(RT_DEBUG_TRACE, ("Duration %d!\n", pReq->Measurement.Duration)); +- +- // If it's non serving channel scan, send out a null frame with PSM bit on. +- if (pAd->StaCfg.CCXScanChannel != pAd->CommonCfg.Channel) +- { +- // Use MLME enqueue method +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- pNullFrame = (PHEADER_802_11) pOutBuffer; +- // Make the power save Null frame with PSM bit on +- MgtMacHeaderInit(pAd, pNullFrame, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pNullFrame->Duration = 0; +- pNullFrame->FC.Type = BTYPE_DATA; +- pNullFrame->FC.PwrMgmt = PWR_SAVE; +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("Send PSM Data frame for off channel RM\n")); +- RTMPusecDelay(5000); +- } +- +- pAd->Mlme.AironetMachine.CurrState = AIRONET_SCANNING; +- } +- else if (pReq->Measurement.ScanMode == MSRN_SCAN_MODE_ACTIVE) +- { +- // Active scan Mode +- DBGPRINT(RT_DEBUG_TRACE, ("Active Scan Mode!\n")); +- +- // Control state machine is not idle, reject the request +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- return; +- +- // Fill out stuff for scan request +- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_CISCO_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- +- // Reset some internal control flags to make sure this scan works. +- BssTableInit(&pAd->StaCfg.CCXBssTab); +- pAd->StaCfg.ScanCnt = 0; +- pAd->StaCfg.CCXScanChannel = pReq->Measurement.Channel; +- pAd->StaCfg.CCXScanTime = pReq->Measurement.Duration; +- pAd->StaCfg.CCXReqType = MSRN_TYPE_BEACON_REQ; +- DBGPRINT(RT_DEBUG_TRACE, ("Duration %d!\n", pReq->Measurement.Duration)); +- +- // If it's non serving channel scan, send out a null frame with PSM bit on. +- if (pAd->StaCfg.CCXScanChannel != pAd->CommonCfg.Channel) +- { +- // Use MLME enqueue method +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- pNullFrame = (PHEADER_802_11) pOutBuffer; +- // Make the power save Null frame with PSM bit on +- MgtMacHeaderInit(pAd, pNullFrame, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pNullFrame->Duration = 0; +- pNullFrame->FC.Type = BTYPE_DATA; +- pNullFrame->FC.PwrMgmt = PWR_SAVE; +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("Send PSM Data frame for off channel RM\n")); +- RTMPusecDelay(5000); +- } +- +- pAd->Mlme.AironetMachine.CurrState = AIRONET_SCANNING; +- } +- else if (pReq->Measurement.ScanMode == MSRN_SCAN_MODE_BEACON_TABLE) +- { +- // Beacon report Mode, report all the APS in current bss table +- DBGPRINT(RT_DEBUG_TRACE, ("Beacon Report Mode!\n")); +- +- // Copy current BSS table to CCX table, we can omit this step later on. +- NdisMoveMemory(&pAd->StaCfg.CCXBssTab, &pAd->ScanTab, sizeof(BSS_TABLE)); +- +- // Create beacon report from Bss table +- AironetCreateBeaconReportFromBssTable(pAd); +- +- // Set state to scanning +- pAd->Mlme.AironetMachine.CurrState = AIRONET_SCANNING; +- +- // Enqueue report request +- // Cisco scan request is finished, prepare beacon report +- MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_DONE, 0, NULL); +- } +- else +- { +- // Wrong scan Mode +- DBGPRINT(RT_DEBUG_TRACE, ("Wrong Scan Mode!\n")); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconRequestAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID AironetReportAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PRM_REQUEST_ACTION pReq; +- ULONG Now32; +- +- NdisGetSystemUpTime(&Now32); +- pAd->StaCfg.LastBeaconRxTime = Now32; +- +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[pAd->StaCfg.CurrentRMReqIdx]; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AironetReportAction ----->\n")); +- +- // 1. Parse measurement type and call appropriate functions +- if (pReq->ReqElem.Type == MSRN_TYPE_CHANNEL_LOAD_REQ) +- // Channel Load measurement request +- ChannelLoadReportAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else if (pReq->ReqElem.Type == MSRN_TYPE_NOISE_HIST_REQ) +- // Noise Histogram measurement request +- NoiseHistReportAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else if (pReq->ReqElem.Type == MSRN_TYPE_BEACON_REQ) +- // Beacon measurement request +- BeaconReportAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else +- // Unknown. Do nothing and return +- ; +- +- // 2. Point to the correct index of action element, start from 0 +- pAd->StaCfg.CurrentRMReqIdx++; +- +- // 3. Check for parallel actions +- if (pAd->StaCfg.ParallelReq == TRUE) +- { +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[pAd->StaCfg.CurrentRMReqIdx]; +- +- // Process next action right away +- if (pReq->ReqElem.Type == MSRN_TYPE_CHANNEL_LOAD_REQ) +- // Channel Load measurement request +- ChannelLoadReportAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- else if (pReq->ReqElem.Type == MSRN_TYPE_NOISE_HIST_REQ) +- // Noise Histogram measurement request +- NoiseHistReportAction(pAd, pAd->StaCfg.CurrentRMReqIdx); +- +- pAd->StaCfg.ParallelReq = FALSE; +- pAd->StaCfg.CurrentRMReqIdx++; +- } +- +- if (pAd->StaCfg.CurrentRMReqIdx >= pAd->StaCfg.RMReqCnt) +- { +- // 4. There is no more unprocessed measurement request, go for transmit this report +- AironetFinalReportAction(pAd); +- pAd->Mlme.AironetMachine.CurrState = AIRONET_IDLE; +- } +- else +- { +- pReq = (PRM_REQUEST_ACTION) &pAd->StaCfg.MeasurementRequest[pAd->StaCfg.CurrentRMReqIdx]; +- +- if (pReq->Measurement.Channel != pAd->CommonCfg.Channel) +- { +- RTMPusecDelay(100000); +- } +- +- // 5. There are more requests to be measure +- MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_REQ, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AironetReportAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID AironetFinalReportAction( +- IN PRTMP_ADAPTER pAd) +-{ +- PUCHAR pDest; +- PAIRONET_IAPP_HEADER pIAPP; +- PHEADER_802_11 pHeader; +- UCHAR AckRate = RATE_2; +- USHORT AckDuration = 0; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AironetFinalReportAction ----->\n")); +- +- // 0. Set up the frame pointer, Frame was inited at the end of message action +- pDest = &pAd->StaCfg.FrameReportBuf[LENGTH_802_11]; +- +- // 1. Update report IAPP fields +- pIAPP = (PAIRONET_IAPP_HEADER) pDest; +- +- // 2. Copy Cisco SNAP header +- NdisMoveMemory(pIAPP->CiscoSnapHeader, SNAP_AIRONET, LENGTH_802_1_H); +- +- // 3. network order for this 16bit length +- pIAPP->Length = cpu2be16(pAd->StaCfg.FrameReportLen - LENGTH_802_11 - LENGTH_802_1_H); +- +- // 3.1 sanity check the report length, ignore it if there is nothing to report +- if (be2cpu16(pIAPP->Length) <= 18) +- return; +- +- // 4. Type must be 0x32 +- pIAPP->Type = AIRONET_IAPP_TYPE; +- +- // 5. SubType for report must be 0x81 +- pIAPP->SubType = AIRONET_IAPP_SUBTYPE_REPORT; +- +- // 6. DA is not used and must be zero, although the whole frame was cleared at the start of function +- // We will do it again here. We can use BSSID instead +- COPY_MAC_ADDR(pIAPP->DA, pAd->CommonCfg.Bssid); +- +- // 7. SA is the client reporting which must be our MAC +- COPY_MAC_ADDR(pIAPP->SA, pAd->CurrentAddress); +- +- // 8. Copy the saved dialog token +- pIAPP->Token = pAd->StaCfg.IAPPToken; +- +- // 9. Make the Report frame 802.11 header +- // Reuse function in wpa.c +- pHeader = (PHEADER_802_11) pAd->StaCfg.FrameReportBuf; +- pAd->Sequence ++; +- WpaMacHeaderInit(pAd, pHeader, 0, pAd->CommonCfg.Bssid); +- +- // ACK size is 14 include CRC, and its rate is based on real time information +- AckRate = pAd->CommonCfg.ExpectedACKRate[pAd->CommonCfg.MlmeRate]; +- AckDuration = RTMPCalcDuration(pAd, AckRate, 14); +- pHeader->Duration = pAd->CommonCfg.Dsifs + AckDuration; +- +- // Use MLME enqueue method +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- // 10. Prepare report frame with dynamic outbuffer. Just simply copy everything. +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- pAd->StaCfg.FrameReportLen, pAd->StaCfg.FrameReportBuf, +- END_OF_ARGS); +- +- // 11. Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- pAd->StaCfg.CCXReqType = MSRN_TYPE_UNUSED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AironetFinalReportAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ChannelLoadReportAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- PMEASUREMENT_REPORT_ELEMENT pReport; +- PCHANNEL_LOAD_REPORT pLoad; +- PUCHAR pDest; +- UCHAR CCABusyFraction; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelLoadReportAction ----->\n")); +- +- // Disable Rx with promiscuous reception, make it back to normal +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL); // Staion not drop control frame will fail WiFi Certification. +- +- // 0. Setup pointer for processing beacon & probe response +- pDest = (PUCHAR) &pAd->StaCfg.FrameReportBuf[pAd->StaCfg.FrameReportLen]; +- pReport = (PMEASUREMENT_REPORT_ELEMENT) pDest; +- +- // 1. Fill Measurement report element field. +- pReport->Eid = IE_MEASUREMENT_REPORT; +- // Fixed Length at 9, not include Eid and length fields +- pReport->Length = 9; +- pReport->Token = pAd->StaCfg.MeasurementRequest[Index].ReqElem.Token; +- pReport->Mode = pAd->StaCfg.MeasurementRequest[Index].ReqElem.Mode; +- pReport->Type = MSRN_TYPE_CHANNEL_LOAD_REQ; +- +- // 2. Fill channel report measurement data +- pDest += sizeof(MEASUREMENT_REPORT_ELEMENT); +- pLoad = (PCHANNEL_LOAD_REPORT) pDest; +- pLoad->Channel = pAd->StaCfg.MeasurementRequest[Index].Measurement.Channel; +- pLoad->Spare = 0; +- pLoad->Duration = pAd->StaCfg.MeasurementRequest[Index].Measurement.Duration; +- +- // 3. Calculate the CCA Busy Fraction +- // (Bytes + ACK size) * 8 / Tx speed * 255 / 1000 / measurement duration, use 24 us Tx speed +- // = (Bytes + ACK) / 12 / duration +- // 9 is the good value for pAd->StaCfg.CLFactor +- // CCABusyFraction = (UCHAR) (pAd->StaCfg.CLBusyBytes / 9 / pLoad->Duration); +- CCABusyFraction = (UCHAR) (pAd->StaCfg.CLBusyBytes / pAd->StaCfg.CLFactor / pLoad->Duration); +- if (CCABusyFraction < 10) +- CCABusyFraction = (UCHAR) (pAd->StaCfg.CLBusyBytes / 3 / pLoad->Duration) + 1; +- +- pLoad->CCABusy = CCABusyFraction; +- DBGPRINT(RT_DEBUG_TRACE, ("CLBusyByte %ld, Duration %d, Result, %d\n", pAd->StaCfg.CLBusyBytes, pLoad->Duration, CCABusyFraction)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("FrameReportLen %d\n", pAd->StaCfg.FrameReportLen)); +- pAd->StaCfg.FrameReportLen += (sizeof(MEASUREMENT_REPORT_ELEMENT) + sizeof(CHANNEL_LOAD_REPORT)); +- DBGPRINT(RT_DEBUG_TRACE, ("FrameReportLen %d\n", pAd->StaCfg.FrameReportLen)); +- +- // 4. Clear channel load measurement flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_MEASUREMENT); +- +- // 5. reset to idle state +- pAd->Mlme.AironetMachine.CurrState = AIRONET_IDLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelLoadReportAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID NoiseHistReportAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- PMEASUREMENT_REPORT_ELEMENT pReport; +- PNOISE_HIST_REPORT pNoise; +- PUCHAR pDest; +- UCHAR i,NoiseCnt; +- USHORT TotalRPICnt, TotalRPISum; +- +- DBGPRINT(RT_DEBUG_TRACE, ("NoiseHistReportAction ----->\n")); +- +- // 0. Disable Rx with promiscuous reception, make it back to normal +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL); // Staion not drop control frame will fail WiFi Certification. +- // 1. Setup pointer for processing beacon & probe response +- pDest = (PUCHAR) &pAd->StaCfg.FrameReportBuf[pAd->StaCfg.FrameReportLen]; +- pReport = (PMEASUREMENT_REPORT_ELEMENT) pDest; +- +- // 2. Fill Measurement report element field. +- pReport->Eid = IE_MEASUREMENT_REPORT; +- // Fixed Length at 16, not include Eid and length fields +- pReport->Length = 16; +- pReport->Token = pAd->StaCfg.MeasurementRequest[Index].ReqElem.Token; +- pReport->Mode = pAd->StaCfg.MeasurementRequest[Index].ReqElem.Mode; +- pReport->Type = MSRN_TYPE_NOISE_HIST_REQ; +- +- // 3. Fill noise histogram report measurement data +- pDest += sizeof(MEASUREMENT_REPORT_ELEMENT); +- pNoise = (PNOISE_HIST_REPORT) pDest; +- pNoise->Channel = pAd->StaCfg.MeasurementRequest[Index].Measurement.Channel; +- pNoise->Spare = 0; +- pNoise->Duration = pAd->StaCfg.MeasurementRequest[Index].Measurement.Duration; +- // 4. Fill Noise histogram, the total RPI counts should be 0.4 * TU +- // We estimate 4000 normal packets received durning 10 seconds test. +- // Adjust it if required. +- // 3 is a good value for pAd->StaCfg.NHFactor +- // TotalRPICnt = pNoise->Duration * 3 / 10; +- TotalRPICnt = pNoise->Duration * pAd->StaCfg.NHFactor / 10; +- TotalRPISum = 0; +- +- for (i = 0; i < 8; i++) +- { +- TotalRPISum += pAd->StaCfg.RPIDensity[i]; +- DBGPRINT(RT_DEBUG_TRACE, ("RPI %d Conuts %d\n", i, pAd->StaCfg.RPIDensity[i])); +- } +- +- // Double check if the counter is larger than our expectation. +- // We will replace it with the total number plus a fraction. +- if (TotalRPISum > TotalRPICnt) +- TotalRPICnt = TotalRPISum + pNoise->Duration / 20; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Total RPI Conuts %d\n", TotalRPICnt)); +- +- // 5. Initialize noise count for the total summation of 0xff +- NoiseCnt = 0; +- for (i = 1; i < 8; i++) +- { +- pNoise->Density[i] = (UCHAR) (pAd->StaCfg.RPIDensity[i] * 255 / TotalRPICnt); +- if ((pNoise->Density[i] == 0) && (pAd->StaCfg.RPIDensity[i] != 0)) +- pNoise->Density[i]++; +- NoiseCnt += pNoise->Density[i]; +- DBGPRINT(RT_DEBUG_TRACE, ("Reported RPI[%d] = 0x%02x\n", i, pNoise->Density[i])); +- } +- +- // 6. RPI[0] represents the rest of counts +- pNoise->Density[0] = 0xff - NoiseCnt; +- DBGPRINT(RT_DEBUG_TRACE, ("Reported RPI[0] = 0x%02x\n", pNoise->Density[0])); +- +- pAd->StaCfg.FrameReportLen += (sizeof(MEASUREMENT_REPORT_ELEMENT) + sizeof(NOISE_HIST_REPORT)); +- +- // 7. Clear channel load measurement flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_MEASUREMENT); +- +- // 8. reset to idle state +- pAd->Mlme.AironetMachine.CurrState = AIRONET_IDLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("NoiseHistReportAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Prepare Beacon report action, +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID BeaconReportAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconReportAction ----->\n")); +- +- // Looks like we don't have anything thing need to do here. +- // All measurement report already finished in AddBeaconReport +- // The length is in the FrameReportLen +- +- // reset Beacon index for next beacon request +- pAd->StaCfg.LastBssIndex = 0xff; +- +- // reset to idle state +- pAd->Mlme.AironetMachine.CurrState = AIRONET_IDLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconReportAction <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Index Current BSSID in CCXBsstab entry index +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-VOID AironetAddBeaconReport( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Index, +- IN PMLME_QUEUE_ELEM pElem) +-{ +- PVOID pMsg; +- PUCHAR pSrc, pDest; +- UCHAR ReqIdx; +- ULONG MsgLen; +- USHORT Length; +- PFRAME_802_11 pFrame; +- PMEASUREMENT_REPORT_ELEMENT pReport; +- PEID_STRUCT pEid; +- PBEACON_REPORT pBeaconReport; +- PBSS_ENTRY pBss; +- +- // 0. Setup pointer for processing beacon & probe response +- pMsg = pElem->Msg; +- MsgLen = pElem->MsgLen; +- pFrame = (PFRAME_802_11) pMsg; +- pSrc = pFrame->Octet; // Start from AP TSF +- pBss = (PBSS_ENTRY) &pAd->StaCfg.CCXBssTab.BssEntry[Index]; +- ReqIdx = pAd->StaCfg.CurrentRMReqIdx; +- +- // 1 Check the Index, if we already create this entry, only update the average RSSI +- if ((Index <= pAd->StaCfg.LastBssIndex) && (pAd->StaCfg.LastBssIndex != 0xff)) +- { +- pDest = (PUCHAR) &pAd->StaCfg.FrameReportBuf[pAd->StaCfg.BssReportOffset[Index]]; +- // Point to bss report information +- pDest += sizeof(MEASUREMENT_REPORT_ELEMENT); +- pBeaconReport = (PBEACON_REPORT) pDest; +- +- // Update Rx power, in dBm +- // Get the original RSSI readback from BBP +- pBeaconReport->RxPower += pAd->BbpRssiToDbmDelta; +- // Average the Rssi reading +- pBeaconReport->RxPower = (pBeaconReport->RxPower + pBss->Rssi) / 2; +- // Get to dBm format +- pBeaconReport->RxPower -= pAd->BbpRssiToDbmDelta; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Bssid %02x:%02x:%02x:%02x:%02x:%02x ", +- pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], +- pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5])); +- DBGPRINT(RT_DEBUG_TRACE, ("RxPower[%ld] Rssi %d, Avg Rssi %d\n", Index, (pBss->Rssi - pAd->BbpRssiToDbmDelta), pBeaconReport->RxPower - 256)); +- DBGPRINT(RT_DEBUG_TRACE, ("FrameReportLen = %d\n", pAd->StaCfg.BssReportOffset[Index])); +- +- // Update other information here +- +- // Done +- return; +- } +- +- // 2. Update reported Index +- pAd->StaCfg.LastBssIndex = Index; +- +- // 3. Setup the buffer address for copying this BSSID into reporting frame +- // The offset should start after 802.11 header and report frame header. +- pDest = (PUCHAR) &pAd->StaCfg.FrameReportBuf[pAd->StaCfg.FrameReportLen]; +- +- // 4. Save the start offset of each Bss in report frame +- pAd->StaCfg.BssReportOffset[Index] = pAd->StaCfg.FrameReportLen; +- +- // 5. Fill Measurement report fields +- pReport = (PMEASUREMENT_REPORT_ELEMENT) pDest; +- pReport->Eid = IE_MEASUREMENT_REPORT; +- pReport->Length = 0; +- pReport->Token = pAd->StaCfg.MeasurementRequest[ReqIdx].ReqElem.Token; +- pReport->Mode = pAd->StaCfg.MeasurementRequest[ReqIdx].ReqElem.Mode; +- pReport->Type = MSRN_TYPE_BEACON_REQ; +- Length = sizeof(MEASUREMENT_REPORT_ELEMENT); +- pDest += sizeof(MEASUREMENT_REPORT_ELEMENT); +- +- // 6. Start thebeacon report format +- pBeaconReport = (PBEACON_REPORT) pDest; +- pDest += sizeof(BEACON_REPORT); +- Length += sizeof(BEACON_REPORT); +- +- // 7. Copy Channel number +- pBeaconReport->Channel = pBss->Channel; +- pBeaconReport->Spare = 0; +- pBeaconReport->Duration = pAd->StaCfg.MeasurementRequest[ReqIdx].Measurement.Duration; +- pBeaconReport->PhyType = ((pBss->SupRateLen+pBss->ExtRateLen > 4) ? PHY_ERP : PHY_DSS); +- // 8. Rx power, in dBm +- pBeaconReport->RxPower = pBss->Rssi - pAd->BbpRssiToDbmDelta; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Bssid %02x:%02x:%02x:%02x:%02x:%02x ", +- pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], +- pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5])); +- DBGPRINT(RT_DEBUG_TRACE, ("RxPower[%ld], Rssi %d\n", Index, pBeaconReport->RxPower - 256)); +- DBGPRINT(RT_DEBUG_TRACE, ("FrameReportLen = %d\n", pAd->StaCfg.FrameReportLen)); +- +- pBeaconReport->BeaconInterval = pBss->BeaconPeriod; +- COPY_MAC_ADDR(pBeaconReport->BSSID, pFrame->Hdr.Addr3); +- NdisMoveMemory(pBeaconReport->ParentTSF, pSrc, 4); +- NdisMoveMemory(pBeaconReport->TargetTSF, &pElem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pBeaconReport->TargetTSF[4], &pElem->TimeStamp.u.HighPart, 4); +- +- // 9. Skip the beacon frame and offset to start of capabilityinfo since we already processed capabilityinfo +- pSrc += (TIMESTAMP_LEN + 2); +- pBeaconReport->CapabilityInfo = *(USHORT *)pSrc; +- +- // 10. Point to start of element ID +- pSrc += 2; +- pEid = (PEID_STRUCT) pSrc; +- +- // 11. Start process all variable Eid oayload and add the appropriate to the frame report +- while (((PUCHAR) pEid + pEid->Len + 1) < ((PUCHAR) pFrame + MsgLen)) +- { +- // Only limited EID are required to report for CCX 2. It includes SSID, Supported rate, +- // FH paramenter set, DS parameter set, CF parameter set, IBSS parameter set, +- // TIM (report first 4 bytes only, radio measurement capability +- switch (pEid->Eid) +- { +- case IE_SSID: +- case IE_SUPP_RATES: +- case IE_FH_PARM: +- case IE_DS_PARM: +- case IE_CF_PARM: +- case IE_IBSS_PARM: +- NdisMoveMemory(pDest, pEid, pEid->Len + 2); +- pDest += (pEid->Len + 2); +- Length += (pEid->Len + 2); +- break; +- +- case IE_MEASUREMENT_CAPABILITY: +- // Since this IE is duplicated with WPA security IE, we has to do sanity check before +- // recognize it. +- // 1. It also has fixed 6 bytes IE length. +- if (pEid->Len != 6) +- break; +- // 2. Check the Cisco Aironet OUI +- if (NdisEqualMemory(CISCO_OUI, (pSrc + 2), 3)) +- { +- // Matched, this is what we want +- NdisMoveMemory(pDest, pEid, pEid->Len + 2); +- pDest += (pEid->Len + 2); +- Length += (pEid->Len + 2); +- } +- break; +- +- case IE_TIM: +- if (pEid->Len > 4) +- { +- // May truncate and report the first 4 bytes only, with the eid & len, total should be 6 +- NdisMoveMemory(pDest, pEid, 6); +- pDest += 6; +- Length += 6; +- } +- else +- { +- NdisMoveMemory(pDest, pEid, pEid->Len + 2); +- pDest += (pEid->Len + 2); +- Length += (pEid->Len + 2); +- } +- break; +- +- default: +- break; +- } +- // 12. Move to next element ID +- pSrc += (2 + pEid->Len); +- pEid = (PEID_STRUCT) pSrc; +- } +- +- // 13. Update the length in the header, not include EID and length +- pReport->Length = Length - 4; +- +- // 14. Update the frame report buffer data length +- pAd->StaCfg.FrameReportLen += Length; +- DBGPRINT(RT_DEBUG_TRACE, ("FR len = %d\n", pAd->StaCfg.FrameReportLen)); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Index Current BSSID in CCXBsstab entry index +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-VOID AironetCreateBeaconReportFromBssTable( +- IN PRTMP_ADAPTER pAd) +-{ +- PMEASUREMENT_REPORT_ELEMENT pReport; +- PBEACON_REPORT pBeaconReport; +- UCHAR Index, ReqIdx; +- USHORT Length; +- PUCHAR pDest; +- PBSS_ENTRY pBss; +- +- // 0. setup base pointer +- ReqIdx = pAd->StaCfg.CurrentRMReqIdx; +- +- for (Index = 0; Index < pAd->StaCfg.CCXBssTab.BssNr; Index++) +- { +- // 1. Setup the buffer address for copying this BSSID into reporting frame +- // The offset should start after 802.11 header and report frame header. +- pDest = (PUCHAR) &pAd->StaCfg.FrameReportBuf[pAd->StaCfg.FrameReportLen]; +- pBss = (PBSS_ENTRY) &pAd->StaCfg.CCXBssTab.BssEntry[Index]; +- Length = 0; +- +- // 2. Fill Measurement report fields +- pReport = (PMEASUREMENT_REPORT_ELEMENT) pDest; +- pReport->Eid = IE_MEASUREMENT_REPORT; +- pReport->Length = 0; +- pReport->Token = pAd->StaCfg.MeasurementRequest[ReqIdx].ReqElem.Token; +- pReport->Mode = pAd->StaCfg.MeasurementRequest[ReqIdx].ReqElem.Mode; +- pReport->Type = MSRN_TYPE_BEACON_REQ; +- Length = sizeof(MEASUREMENT_REPORT_ELEMENT); +- pDest += sizeof(MEASUREMENT_REPORT_ELEMENT); +- +- // 3. Start the beacon report format +- pBeaconReport = (PBEACON_REPORT) pDest; +- pDest += sizeof(BEACON_REPORT); +- Length += sizeof(BEACON_REPORT); +- +- // 4. Copy Channel number +- pBeaconReport->Channel = pBss->Channel; +- pBeaconReport->Spare = 0; +- pBeaconReport->Duration = pAd->StaCfg.MeasurementRequest[ReqIdx].Measurement.Duration; +- pBeaconReport->PhyType = ((pBss->SupRateLen+pBss->ExtRateLen > 4) ? PHY_ERP : PHY_DSS); +- pBeaconReport->RxPower = pBss->Rssi - pAd->BbpRssiToDbmDelta; +- pBeaconReport->BeaconInterval = pBss->BeaconPeriod; +- pBeaconReport->CapabilityInfo = pBss->CapabilityInfo; +- COPY_MAC_ADDR(pBeaconReport->BSSID, pBss->Bssid); +- NdisMoveMemory(pBeaconReport->ParentTSF, pBss->PTSF, 4); +- NdisMoveMemory(pBeaconReport->TargetTSF, pBss->TTSF, 8); +- +- // 5. Create SSID +- *pDest++ = 0x00; +- *pDest++ = pBss->SsidLen; +- NdisMoveMemory(pDest, pBss->Ssid, pBss->SsidLen); +- pDest += pBss->SsidLen; +- Length += (2 + pBss->SsidLen); +- +- // 6. Create SupportRates +- *pDest++ = 0x01; +- *pDest++ = pBss->SupRateLen; +- NdisMoveMemory(pDest, pBss->SupRate, pBss->SupRateLen); +- pDest += pBss->SupRateLen; +- Length += (2 + pBss->SupRateLen); +- +- // 7. DS Parameter +- *pDest++ = 0x03; +- *pDest++ = 1; +- *pDest++ = pBss->Channel; +- Length += 3; +- +- // 8. IBSS parameter if presents +- if (pBss->BssType == BSS_ADHOC) +- { +- *pDest++ = 0x06; +- *pDest++ = 2; +- *(PUSHORT) pDest = pBss->AtimWin; +- pDest += 2; +- Length += 4; +- } +- +- // 9. Update length field, not include EID and length +- pReport->Length = Length - 4; +- +- // 10. Update total frame size +- pAd->StaCfg.FrameReportLen += Length; +- } +-} +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index 1a58715..b13d3a2 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -149,7 +149,7 @@ VOID AssocTimeout(IN PVOID SystemSpecific1, + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_ASSOC_TIMEOUT, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + + /* +@@ -177,7 +177,7 @@ VOID ReassocTimeout(IN PVOID SystemSpecific1, + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_REASSOC_TIMEOUT, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + + /* +@@ -205,7 +205,7 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1, + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_DISASSOC_TIMEOUT, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + + /* +@@ -236,7 +236,6 @@ VOID MlmeAssocReqAction( + { + UCHAR ApAddr[6]; + HEADER_802_11 AssocHdr; +- UCHAR Ccx2Len = 5; + UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; + USHORT ListenIntv; + ULONG Timeout; +@@ -247,13 +246,6 @@ VOID MlmeAssocReqAction( + ULONG FrameLen = 0; + ULONG tmp; + USHORT VarIesOffset; +- UCHAR CkipFlag; +- UCHAR CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH]; +- UCHAR AironetCkipIe = IE_AIRONET_CKIP; +- UCHAR AironetCkipLen = CKIP_NEGOTIATION_LENGTH; +- UCHAR AironetIPAddressIE = IE_AIRONET_IPADDRESS; +- UCHAR AironetIPAddressLen = AIRONET_IPADDRESS_LENGTH; +- UCHAR AironetIPAddressBuffer[AIRONET_IPADDRESS_LENGTH] = {0x00, 0x40, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00}; + USHORT Status; + + // Block all authentication request durning WPA block period +@@ -454,7 +446,8 @@ VOID MlmeAssocReqAction( + RSNIe = IE_WPA2; + } + +- if (pAd->StaCfg.WpaSupplicantUP != 1) ++ if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) && ++ (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); + + // Check for WPA PMK cache list +@@ -471,7 +464,18 @@ VOID MlmeAssocReqAction( + break; + } + } +- ++#ifdef RT2860 ++ /* ++ When AuthMode is WPA2-Enterprise and AP reboot or STA lost AP, ++ AP would not do PMK cache with STA after STA re-connect to AP again. ++ In this case, driver doesn't need to send PMKID to AP and WpaSupplicant. ++ */ ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) && ++ (NdisEqualMemory(pAd->MlmeAux.Bssid, pAd->CommonCfg.LastBssid, MAC_ADDR_LEN))) ++ { ++ FoundPMK = FALSE; ++ } ++#endif // RT2860 // + if (FoundPMK) + { + // Set PMK number +@@ -481,7 +485,8 @@ VOID MlmeAssocReqAction( + } + } + +- if (pAd->StaCfg.WpaSupplicantUP == 1) ++ if ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) && ++ (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == TRUE)) + { + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, + pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +@@ -498,7 +503,8 @@ VOID MlmeAssocReqAction( + + FrameLen += tmp; + +- if (pAd->StaCfg.WpaSupplicantUP != 1) ++ if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) || ++ (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) + { + // Append Variable IE + NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1); +@@ -513,53 +519,6 @@ VOID MlmeAssocReqAction( + pAd->StaCfg.ReqVarIELen = VarIesOffset; + } + +- // We have update that at PeerBeaconAtJoinRequest() +- CkipFlag = pAd->StaCfg.CkipFlag; +- if (CkipFlag != 0) +- { +- NdisZeroMemory(CkipNegotiationBuffer, CKIP_NEGOTIATION_LENGTH); +- CkipNegotiationBuffer[2] = 0x66; +- // Make it try KP & MIC, since we have to follow the result from AssocRsp +- CkipNegotiationBuffer[8] = 0x18; +- CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH - 1] = 0x22; +- CkipFlag = 0x18; +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &AironetCkipIe, +- 1, &AironetCkipLen, +- AironetCkipLen, CkipNegotiationBuffer, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- // Add CCX v2 request if CCX2 admin state is on +- if (pAd->StaCfg.CCXControl.field.Enable == 1) +- { +- +- // +- // Add AironetIPAddressIE for Cisco CCX 2.X +- // Add CCX Version +- // +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &AironetIPAddressIE, +- 1, &AironetIPAddressLen, +- AironetIPAddressLen, AironetIPAddressBuffer, +- 1, &Ccx2Ie, +- 1, &Ccx2Len, +- Ccx2Len, Ccx2IeInfo, +- END_OF_ARGS); +- FrameLen += tmp; +- +- // Add by James 03/06/27 +- // Set Variable IEs Length +- pAd->StaCfg.ReqVarIELen = VarIesOffset; +- pAd->StaCfg.AssocInfo.RequestIELength = VarIesOffset; +- +- // OffsetResponseIEs follow ReqVarIE +- pAd->StaCfg.AssocInfo.OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAd->StaCfg.ReqVarIELen; +- // End Add by James +- } +- + + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -600,7 +559,6 @@ VOID MlmeReassocReqAction( + { + UCHAR ApAddr[6]; + HEADER_802_11 ReassocHdr; +- UCHAR Ccx2Len = 5; + UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; + USHORT CapabilityInfo, ListenIntv; + ULONG Timeout; +@@ -749,20 +707,6 @@ VOID MlmeReassocReqAction( + FrameLen += TmpLen; + } + +- // Add CCX v2 request if CCX2 admin state is on +- if (pAd->StaCfg.CCXControl.field.Enable == 1) +- { +- // +- // Add CCX Version +- // +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &Ccx2Ie, +- 1, &Ccx2Len, +- Ccx2Len, Ccx2IeInfo, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +@@ -800,9 +744,10 @@ VOID MlmeDisassocReqAction( + ULONG FrameLen = 0; + NDIS_STATUS NStatus; + BOOLEAN TimerCancelled; +- ULONG Timeout = 0; ++ ULONG Timeout = 500; + USHORT Status; + ++ + // skip sanity check + pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT)(Elem->Msg); + +@@ -845,11 +790,9 @@ VOID MlmeDisassocReqAction( + RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */ + pAd->Mlme.AssocMachine.CurrState = DISASSOC_WAIT_RSP; + +- { +- union iwreq_data wrqu; +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- } ++ ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); ++ + } + + /* +@@ -876,7 +819,7 @@ VOID PeerAssocRspAction( + EDCA_PARM EdcaParm; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen; ++ UCHAR HtCapabilityLen = 0; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; + +@@ -889,24 +832,10 @@ VOID PeerAssocRspAction( + DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status)); + DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n",Elem->Wcid, pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); +- if(Status == MLME_SUCCESS) +- { +-#ifdef RT2860 +- // go to procedure listed on page 376 +- AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, +- &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); +- +- { +- union iwreq_data wrqu; +- wext_notify_event_assoc(pAd); + +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); + +- } +-#endif +-#ifdef RT2870 ++ if(Status == MLME_SUCCESS) ++ { + UCHAR MaxSupportedRateIn500Kbps = 0; + UCHAR idx; + +@@ -926,23 +855,14 @@ VOID PeerAssocRspAction( + AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, + &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); + +- StaAddMacTableEntry(pAd, &pAd->MacTab.Content[BSSID_WCID], MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo); +-#endif +- pAd->StaCfg.CkipFlag = CkipFlag; +- if (CkipFlag & 0x18) +- { +- NdisZeroMemory(pAd->StaCfg.TxSEQ, 4); +- NdisZeroMemory(pAd->StaCfg.RxSEQ, 4); +- NdisZeroMemory(pAd->StaCfg.CKIPMIC, 4); +- pAd->StaCfg.GIV[0] = RandomByte(pAd); +- pAd->StaCfg.GIV[1] = RandomByte(pAd); +- pAd->StaCfg.GIV[2] = RandomByte(pAd); +- pAd->StaCfg.bCkipOn = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, (" pAd->StaCfg.CkipFlag = 0x%02x\n", pAd->StaCfg.CkipFlag)); +- } +- } +- else +- { ++ StaAddMacTableEntry(pAd, ++ &pAd->MacTab.Content[BSSID_WCID], ++ MaxSupportedRateIn500Kbps, ++ &HtCapability, ++ HtCapabilityLen, ++ &AddHtInfo, ++ AddHtInfoLen, ++ CapabilityInfo); + } + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +@@ -998,25 +918,19 @@ VOID PeerReassocRspAction( + AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, + &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); + ++ + { +- union iwreq_data wrqu; + wext_notify_event_assoc(pAd); +- +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); + } + + } + +- { + // CkipFlag is no use for reassociate + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); + } + } +- } + else + { + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerReassocRspAction() sanity check fail\n")); +@@ -1123,6 +1037,10 @@ VOID AssocPostProc( + + pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; + len = pAd->ScanTab.BssEntry[Idx].VarIELen; ++ //KH need to check again ++ // Don't allow to go to sleep mode if authmode is WPA-related. ++ //This can make Authentication process more smoothly. ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + + while (len > 0) + { +@@ -1147,6 +1065,8 @@ VOID AssocPostProc( + pVIE += (pEid->Len + 2); + len -= (pEid->Len + 2); + } ++ ++ + } + + if (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == 0) +@@ -1190,19 +1110,12 @@ VOID PeerDisassocAction( + RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); + } + +- // +- // Get Current System time and Turn on AdjacentAPReport +- // +- NdisGetSystemUpTime(&pAd->StaCfg.CCXAdjacentAPLinkDownTime); +- pAd->StaCfg.CCXAdjacentAPReportFlag = TRUE; ++ + LinkDown(pAd, TRUE); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + +- { +- union iwreq_data wrqu; +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- } ++ ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); + } + } + else +@@ -1359,143 +1272,16 @@ VOID Cls3errAction( + COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pAddr); + } + +- /* +- ========================================================================== +- Description: +- Switch between WEP and CKIP upon new association up. +- Parameters: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID SwitchBetweenWepAndCkip( +- IN PRTMP_ADAPTER pAd) +-{ +- int i; +- SHAREDKEY_MODE_STRUC csr1; +- +- // if KP is required. change the CipherAlg in hardware shard key table from WEP +- // to CKIP. else remain as WEP +- if (pAd->StaCfg.bCkipOn && (pAd->StaCfg.CkipFlag & 0x10)) +- { +- // modify hardware key table so that MAC use correct algorithm to decrypt RX +- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE, &csr1.word); +- if (csr1.field.Bss0Key0CipherAlg == CIPHER_WEP64) +- csr1.field.Bss0Key0CipherAlg = CIPHER_CKIP64; +- else if (csr1.field.Bss0Key0CipherAlg == CIPHER_WEP128) +- csr1.field.Bss0Key0CipherAlg = CIPHER_CKIP128; +- +- if (csr1.field.Bss0Key1CipherAlg == CIPHER_WEP64) +- csr1.field.Bss0Key1CipherAlg = CIPHER_CKIP64; +- else if (csr1.field.Bss0Key1CipherAlg == CIPHER_WEP128) +- csr1.field.Bss0Key1CipherAlg = CIPHER_CKIP128; +- +- if (csr1.field.Bss0Key2CipherAlg == CIPHER_WEP64) +- csr1.field.Bss0Key2CipherAlg = CIPHER_CKIP64; +- else if (csr1.field.Bss0Key2CipherAlg == CIPHER_WEP128) +- csr1.field.Bss0Key2CipherAlg = CIPHER_CKIP128; +- +- if (csr1.field.Bss0Key3CipherAlg == CIPHER_WEP64) +- csr1.field.Bss0Key3CipherAlg = CIPHER_CKIP64; +- else if (csr1.field.Bss0Key3CipherAlg == CIPHER_WEP128) +- csr1.field.Bss0Key3CipherAlg = CIPHER_CKIP128; +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE, csr1.word); +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchBetweenWepAndCkip: modify BSS0 cipher to %s\n", CipherName[csr1.field.Bss0Key0CipherAlg])); +- +- // modify software key table so that driver can specify correct algorithm in TXD upon TX +- for (i=0; iSharedKey[BSS0][i].CipherAlg == CIPHER_WEP64) +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_CKIP64; +- else if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_WEP128) +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_CKIP128; +- } +- } +- +- // else if KP NOT inused. change the CipherAlg in hardware shard key table from CKIP +- // to WEP. +- else +- { +- // modify hardware key table so that MAC use correct algorithm to decrypt RX +- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE, &csr1.word); +- if (csr1.field.Bss0Key0CipherAlg == CIPHER_CKIP64) +- csr1.field.Bss0Key0CipherAlg = CIPHER_WEP64; +- else if (csr1.field.Bss0Key0CipherAlg == CIPHER_CKIP128) +- csr1.field.Bss0Key0CipherAlg = CIPHER_WEP128; +- +- if (csr1.field.Bss0Key1CipherAlg == CIPHER_CKIP64) +- csr1.field.Bss0Key1CipherAlg = CIPHER_WEP64; +- else if (csr1.field.Bss0Key1CipherAlg == CIPHER_CKIP128) +- csr1.field.Bss0Key1CipherAlg = CIPHER_WEP128; +- +- if (csr1.field.Bss0Key2CipherAlg == CIPHER_CKIP64) +- csr1.field.Bss0Key2CipherAlg = CIPHER_WEP64; +- else if (csr1.field.Bss0Key2CipherAlg == CIPHER_CKIP128) +- csr1.field.Bss0Key2CipherAlg = CIPHER_WEP128; +- +- if (csr1.field.Bss0Key3CipherAlg == CIPHER_CKIP64) +- csr1.field.Bss0Key3CipherAlg = CIPHER_WEP64; +- else if (csr1.field.Bss0Key3CipherAlg == CIPHER_CKIP128) +- csr1.field.Bss0Key3CipherAlg = CIPHER_WEP128; +- +- // modify software key table so that driver can specify correct algorithm in TXD upon TX +- for (i=0; iSharedKey[BSS0][i].CipherAlg == CIPHER_CKIP64) +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_WEP64; +- else if (pAd->SharedKey[BSS0][i].CipherAlg == CIPHER_CKIP128) +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_WEP128; +- } +- +- // +- // On WPA-NONE, must update CipherAlg. +- // Because the OID_802_11_WEP_STATUS was been set after OID_802_11_ADD_KEY +- // and CipherAlg will be CIPHER_NONE by Windows ZeroConfig. +- // So we need to update CipherAlg after connect. +- // +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- for (i = 0; i < SHARE_KEY_NUM; i++) +- { +- if (pAd->SharedKey[BSS0][i].KeyLen != 0) +- { +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) +- { +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_TKIP; +- } +- else if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_AES; +- } +- } +- else +- { +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE; +- } +- } +- +- csr1.field.Bss0Key0CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- csr1.field.Bss0Key1CipherAlg = pAd->SharedKey[BSS0][1].CipherAlg; +- csr1.field.Bss0Key2CipherAlg = pAd->SharedKey[BSS0][2].CipherAlg; +- csr1.field.Bss0Key3CipherAlg = pAd->SharedKey[BSS0][3].CipherAlg; +- } +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE, csr1.word); +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchBetweenWepAndCkip: modify BSS0 cipher to %s\n", CipherName[csr1.field.Bss0Key0CipherAlg])); +- } +-} + + int wext_notify_event_assoc( + IN RTMP_ADAPTER *pAd) + { +- union iwreq_data wrqu; + char custom[IW_CUSTOM_MAX] = {0}; + + if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX) + { +- wrqu.data.length = pAd->StaCfg.ReqVarIELen; +- memcpy(custom, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen); +- wireless_send_event(pAd->net_dev, IWEVASSOCREQIE, &wrqu, custom); ++ NdisMoveMemory(custom, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen); ++ RtmpOSWrielessEventSend(pAd, IWEVASSOCREQIE, -1, NULL, custom, pAd->StaCfg.ReqVarIELen); + } + else + DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n")); +@@ -1504,13 +1290,15 @@ int wext_notify_event_assoc( + + } + +-#ifdef RT2870 ++ + BOOLEAN StaAddMacTableEntry( + IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, + IN UCHAR MaxSupportedRateIn500Kbps, + IN HT_CAPABILITY_IE *pHtCapability, + IN UCHAR HtCapabilityLen, ++ IN ADD_HT_INFO_IE *pAddHtInfo, ++ IN UCHAR AddHtInfoLen, + IN USHORT CapabilityInfo) + { + UCHAR MaxSupportedRate = RATE_11; +@@ -1586,6 +1374,7 @@ BOOLEAN StaAddMacTableEntry( + CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); + } + ++ NdisZeroMemory(&pEntry->HTCapability, sizeof(pEntry->HTCapability)); + // If this Entry supports 802.11n, upgrade to HT rate. + if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) + { +@@ -1605,7 +1394,9 @@ BOOLEAN StaAddMacTableEntry( + pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; + } + +- if ((pHtCapability->HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth)) ++ if ((pHtCapability->HtCapInfo.ChannelWidth) && ++ (pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && ++ ((pAd->StaCfg.BssType == BSS_INFRA) || ((pAd->StaCfg.BssType == BSS_ADHOC) && (pAddHtInfo->AddHtInfo.ExtChanOffset == pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset)))) + { + pEntry->MaxHTPhyMode.field.BW= BW_40; + pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40)); +@@ -1677,14 +1468,13 @@ BOOLEAN StaAddMacTableEntry( + CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); + if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03) + CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); ++ NdisMoveMemory(&pEntry->HTCapability, pHtCapability, HtCapabilityLen); + } + else + { + pAd->MacTab.fAnyStationIsLegacy = TRUE; + } + +- NdisMoveMemory(&pEntry->HTCapability, pHtCapability, sizeof(HT_CAPABILITY_IE)); +- + pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; + pEntry->CurrTxRate = pEntry->MaxSupportedRate; + +@@ -1726,4 +1516,3 @@ BOOLEAN StaAddMacTableEntry( + } + return TRUE; + } +-#endif /* RT2870 */ +diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c +index d8414ea..7fb0760 100644 +--- a/drivers/staging/rt2860/sta/auth.c ++++ b/drivers/staging/rt2860/sta/auth.c +@@ -108,7 +108,7 @@ VOID AuthTimeout( + + + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + + +@@ -124,59 +124,12 @@ VOID MlmeAuthReqAction( + IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM *Elem) + { +- UCHAR Addr[6]; +- USHORT Alg, Seq, Status; +- ULONG Timeout; +- HEADER_802_11 AuthHdr; +- BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- +- // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Block Auth request durning WPA block period!\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- else if(MlmeAuthReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr, &Timeout, &Alg)) +- { +- // reset timer +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &TimerCancelled); +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, Addr); +- pAd->MlmeAux.Alg = Alg; +- Seq = 1; +- Status = MLME_SUCCESS; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", Alg)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Send AUTH request seq#1 (Alg=%d)...\n", Alg)); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&AuthHdr, +- 2, &Alg, +- 2, &Seq, +- 2, &Status, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(&pAd->MlmeAux.AuthTimer, Timeout); ++ if (AUTH_ReqSend(pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) + pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2; +- } + else + { +- DBGPRINT_ERR(("AUTH - MlmeAuthReqAction() sanity check failed\n")); ++ USHORT Status; ++ + pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; + Status = MLME_INVALID_FORMAT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +@@ -207,7 +160,7 @@ VOID PeerAuthRspAtSeq2Action( + ULONG FrameLen = 0; + USHORT Status2; + +- if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ChlgText)) ++ if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, (PCHAR)ChlgText)) + { + if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 2) + { +@@ -217,8 +170,7 @@ VOID PeerAuthRspAtSeq2Action( + if (Status == MLME_SUCCESS) + { + // Authentication Mode "LEAP" has allow for CCX 1.X +- if ((pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) +- ) ++ if (pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) + { + pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +@@ -457,4 +409,82 @@ VOID Cls2errAction( + COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pAddr); + } + ++BOOLEAN AUTH_ReqSend( ++ IN PRTMP_ADAPTER pAd, ++ IN PMLME_QUEUE_ELEM pElem, ++ IN PRALINK_TIMER_STRUCT pAuthTimer, ++ IN PSTRING pSMName, ++ IN USHORT SeqNo, ++ IN PUCHAR pNewElement, ++ IN ULONG ElementLen) ++{ ++ USHORT Alg, Seq, Status; ++ UCHAR Addr[6]; ++ ULONG Timeout; ++ HEADER_802_11 AuthHdr; ++ BOOLEAN TimerCancelled; ++ NDIS_STATUS NStatus; ++ PUCHAR pOutBuffer = NULL; ++ ULONG FrameLen = 0, tmp = 0; ++ ++ // Block all authentication request durning WPA block period ++ if (pAd->StaCfg.bBlockAssoc == TRUE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s - Block Auth request durning WPA block period!\n", pSMName)); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_STATE_MACHINE_REJECT; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); ++ } ++ else if(MlmeAuthReqSanity(pAd, pElem->Msg, pElem->MsgLen, Addr, &Timeout, &Alg)) ++ { ++ /* reset timer */ ++ RTMPCancelTimer(pAuthTimer, &TimerCancelled); ++ ++ COPY_MAC_ADDR(pAd->MlmeAux.Bssid, Addr); ++ pAd->MlmeAux.Alg = Alg; ++ Seq = SeqNo; ++ Status = MLME_SUCCESS; ++ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if(NStatus != NDIS_STATUS_SUCCESS) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", pSMName, Alg)); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_FAIL_NO_RESOURCE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); ++ return FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s - Send AUTH request seq#1 (Alg=%d)...\n", pSMName, Alg)); ++ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, pAd->MlmeAux.Bssid); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11),&AuthHdr, ++ 2, &Alg, ++ 2, &Seq, ++ 2, &Status, ++ END_OF_ARGS); ++ ++ if (pNewElement && ElementLen) ++ { ++ MakeOutgoingFrame(pOutBuffer+FrameLen, &tmp, ++ ElementLen, pNewElement, ++ END_OF_ARGS); ++ FrameLen += tmp; ++ } ++ ++ MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); ++ MlmeFreeMemory(pAd, pOutBuffer); ++ ++ RTMPSetTimer(pAuthTimer, Timeout); ++ return TRUE; ++ } ++ else ++ { ++ DBGPRINT_ERR(("%s - MlmeAuthReqAction() sanity check failed\n", pSMName)); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ + +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index cc639b1..0a5d28c 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -123,20 +123,24 @@ VOID PeerDeauthAction( + + if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) + { +- if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid)) ++ if (INFRA_ON(pAd) ++ && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid) ++ ) + { + DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason)); + +- { +- union iwreq_data wrqu; +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- } ++ ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); ++ + + // send wireless event - for deauthentication + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); + ++ if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) && ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) ++ pAd->StaCfg.bLostAp = TRUE; ++ + LinkDown(pAd, TRUE); + } + } +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 7bc75ab..3852d04 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -64,6 +64,7 @@ UCHAR CipherSuiteWpaNoneAesLen = (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)) + // and are copied to pAd->StaActive + #define COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ + { \ ++ NdisZeroMemory((_pAd)->CommonCfg.Ssid, MAX_LEN_OF_SSID); \ + (_pAd)->CommonCfg.SsidLen = (_pAd)->MlmeAux.SsidLen; \ + NdisMoveMemory((_pAd)->CommonCfg.Ssid, (_pAd)->MlmeAux.Ssid, (_pAd)->MlmeAux.SsidLen); \ + COPY_MAC_ADDR((_pAd)->CommonCfg.Bssid, (_pAd)->MlmeAux.Bssid); \ +@@ -123,9 +124,7 @@ VOID MlmeCntlMachinePerformAction( + switch(pAd->Mlme.CntlMachine.CurrState) + { + case CNTL_IDLE: +- { + CntlIdleProc(pAd, Elem); +- } + break; + case CNTL_WAIT_DISASSOC: + CntlWaitDisassocProc(pAd, Elem); +@@ -163,11 +162,7 @@ VOID MlmeCntlMachinePerformAction( + // Resume TxRing after SCANING complete. We hope the out-of-service time + // won't be too long to let upper layer time-out the waiting frames + RTMPResumeMsduTransmission(pAd); +- if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) +- { +- // Cisco scan request is finished, prepare beacon report +- MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_DONE, 0, NULL); +- } ++ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + + // +@@ -188,7 +183,7 @@ VOID MlmeCntlMachinePerformAction( + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + break; +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + // + // This state is for that we want to connect to an AP but + // it didn't find on BSS List table. So we need to scan the air first, +@@ -212,14 +207,14 @@ VOID MlmeCntlMachinePerformAction( + // + // Check if we can connect to. + // +- BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); ++ BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, (CHAR *) pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); + if (pAd->MlmeAux.SsidBssTab.BssNr > 0) + { + MlmeAutoReconnectLastSSID(pAd); + } + } + break; +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + default: + DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", Elem->MsgType)); + break; +@@ -294,11 +289,13 @@ VOID CntlOidScanProc( + ULONG BssIdx = BSS_NOT_FOUND; + BSS_ENTRY CurrBss; + ++ ++ + // record current BSS if network is connected. + // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) + { +- BssIdx = BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->CommonCfg.Channel); ++ BssIdx = BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->CommonCfg.Channel); + if (BssIdx != BSS_NOT_FOUND) + { + NdisMoveMemory(&CurrBss, &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); +@@ -318,7 +315,7 @@ VOID CntlOidScanProc( + pAd->ScanTab.BssNr = 1; + } + +- ScanParmFill(pAd, &ScanReq, "", 0, BSS_ANY, SCAN_ACTIVE); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) Elem->Msg, Elem->MsgLen, BSS_ANY, SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, + sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +@@ -341,11 +338,6 @@ VOID CntlOidSsidProc( + MLME_DISASSOC_REQ_STRUCT DisassocReq; + ULONG Now; + +-#ifdef RT2860 +- // BBP and RF are not accessible in PS mode, we has to wake them up first +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, RTMP_HALT); +-#endif + + // Step 1. record the desired user settings to MlmeAux + NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); +@@ -354,6 +346,7 @@ VOID CntlOidSsidProc( + NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN); + pAd->MlmeAux.BssType = pAd->StaCfg.BssType; + ++ pAd->StaCfg.bAutoConnectByBssid = FALSE; + + // + // Update Reconnect Ssid, that user desired to connect. +@@ -364,7 +357,7 @@ VOID CntlOidSsidProc( + + // step 2. find all matching BSS in the lastest SCAN result (inBssTab) + // & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order +- BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + + DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - %d BSS of %d BSS match the desire (%d)SSID - %s\n", + pAd->MlmeAux.SsidBssTab.BssNr, pAd->ScanTab.BssNr, pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid)); +@@ -423,15 +416,7 @@ VOID CntlOidSsidProc( + } + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- { +- union iwreq_data wrqu; +- +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- +- } ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); + } + } + else if (INFRA_ON(pAd)) +@@ -483,7 +468,7 @@ VOID CntlOidSsidProc( + MLME_SCAN_REQ_STRUCT ScanReq; + + DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; + // Reset Missed scan number +@@ -519,52 +504,41 @@ VOID CntlOidRTBssidProc( + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid); + pAd->MlmeAux.BssType = pAd->StaCfg.BssType; + +- // +- // Update Reconnect Ssid, that user desired to connect. +- // +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->MlmeAux.SsidLen; +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- + // find the desired BSS in the latest SCAN result table + BssIdx = BssTableSearch(&pAd->ScanTab, pOidBssid, pAd->MlmeAux.Channel); + if (BssIdx == BSS_NOT_FOUND) + { ++ MLME_SCAN_REQ_STRUCT ScanReq; ++ + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ //pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. start a new scan\n")); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; ++ // Reset Missed scan number ++ NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); + return; + } + ++ // ++ // Update Reconnect Ssid, that user desired to connect. ++ // ++ NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); ++ pAd->MlmeAux.AutoReconnectSsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; ++ NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->ScanTab.BssEntry[BssIdx].SsidLen); ++ + // copy the matched BSS entry from ScanTab to MlmeAux.SsidBssTab. Why? + // Because we need this entry to become the JOIN target in later on SYNC state machine + pAd->MlmeAux.BssIdx = 0; + pAd->MlmeAux.SsidBssTab.BssNr = 1; + NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); + +- // 2002-11-26 skip the following checking. i.e. if user wants to re-connect to same AP +- // we just follow normal procedure. The reason of user doing this may because he/she changed +- // AP to another channel, but we still received BEACON from it thus don't claim Link Down. +- // Since user knows he's changed AP channel, he'll re-connect again. By skipping the following +- // checking, we'll disassociate then re-do normal association with this AP at the new channel. +- // 2003-1-6 Re-enable this feature based on microsoft requirement which prefer not to re-do +- // connection when setting the same BSSID. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && +- MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, pOidBssid)) +- { +- // already connected to the same BSSID, go back to idle state directly +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - already in this BSSID. ignore this SET_BSSID request\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- { +- union iwreq_data wrqu; ++ // Add SSID into MlmeAux for site surey joining hidden SSID ++ pAd->MlmeAux.SsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; ++ NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->MlmeAux.SsidLen); + +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- +- } +- } +- else + { + if (INFRA_ON(pAd)) + { +@@ -625,11 +599,11 @@ VOID CntlOidRTBssidProc( + + // Set Mix cipher flag + pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +- if (pAd->StaCfg.bMixCipher == TRUE) ++ /*if (pAd->StaCfg.bMixCipher == TRUE) + { + // If mix cipher, re-build RSNIE + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- } ++ }*/ + // No active association, join the BSS immediately + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n", + pOidBssid[0],pOidBssid[1],pOidBssid[2],pOidBssid[3],pOidBssid[4],pOidBssid[5])); +@@ -654,19 +628,26 @@ VOID CntlMlmeRoamingProc( + IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM *Elem) + { +- // TODO: +- // AP in different channel may show lower RSSI than actual value?? +- // should we add a weighting factor to compensate it? ++ UCHAR BBPValue = 0; ++ + DBGPRINT(RT_DEBUG_TRACE,("CNTL - Roaming in MlmeAux.RoamTab...\n")); + ++ { ++ //Let BBP register at 20MHz to do (fast) roaming. ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); ++ BBPValue &= (~0x18); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); ++ + NdisMoveMemory(&pAd->MlmeAux.SsidBssTab, &pAd->MlmeAux.RoamTab, sizeof(pAd->MlmeAux.RoamTab)); + pAd->MlmeAux.SsidBssTab.BssNr = pAd->MlmeAux.RoamTab.BssNr; + + BssTableSortByRssi(&pAd->MlmeAux.SsidBssTab); + pAd->MlmeAux.BssIdx = 0; + IterateOnBssTab(pAd); ++ } + } + ++ + /* + ========================================================================== + Description: +@@ -696,7 +677,7 @@ VOID CntlWaitDisassocProc( + if ((pAd->MlmeAux.SsidBssTab.BssNr==0) && (pAd->StaCfg.BssType == BSS_ADHOC)) + { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } +@@ -763,15 +744,15 @@ VOID CntlWaitJoinProc( + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) + { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeShared); ++ AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); + } + else + { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeOpen); +- } ++ AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); + } + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, + sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); ++ } + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH; + } +@@ -817,7 +798,7 @@ VOID CntlWaitStartProc( + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Start adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel)); + return; + } +- ++ NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + { + N_ChannelCheck(pAd); +@@ -825,7 +806,6 @@ VOID CntlWaitStartProc( + NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &pAd->CommonCfg.AddHTInfo, sizeof(ADD_HT_INFO_IE)); + RTMPCheckHt(pAd, BSSID_WCID, &pAd->CommonCfg.HtCapability, &pAd->CommonCfg.AddHTInfo); + pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; +- NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); + NdisMoveMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], &pAd->CommonCfg.HtCapability.MCSSet[0], 16); + COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); + +@@ -911,16 +891,16 @@ VOID CntlWaitAuthProc( + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) + { + // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeShared); ++ AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); + } + else + { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeOpen); +- } ++ AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); + } + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, + sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); + ++ } + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2; + } + } +@@ -950,11 +930,13 @@ VOID CntlWaitAuthProc2( + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); + AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, + ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); ++ { + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, + sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC; + } ++ } + else + { + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) && +@@ -998,14 +980,14 @@ VOID CntlWaitAssocProc( + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); + if (Reason == MLME_SUCCESS) + { +- LinkUp(pAd, BSS_INFRA); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx)); +- + if (pAd->CommonCfg.bWirelessEvent) + { + RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); + } ++ ++ LinkUp(pAd, BSS_INFRA); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx)); + } + else + { +@@ -1036,15 +1018,16 @@ VOID CntlWaitReassocProc( + NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); + if (Result == MLME_SUCCESS) + { ++ // send wireless event - for association ++ if (pAd->CommonCfg.bWirelessEvent) ++ RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ ++ + // + // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC + // + LinkUp(pAd, BSS_INFRA); + +- // send wireless event - for association +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition successful on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); + } +@@ -1052,14 +1035,15 @@ VOID CntlWaitReassocProc( + { + // reassoc failed, try to pick next BSS in the BSS Table + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition fails on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); ++ { + pAd->MlmeAux.RoamIdx++; + IterateOnBssTab2(pAd); + } + } ++ } + } + + +-#ifdef RT2870 + VOID AdhocTurnOnQos( + IN PRTMP_ADAPTER pAd) + { +@@ -1094,7 +1078,6 @@ VOID AdhocTurnOnQos( + } + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + } +-#endif /* RT2870 */ + + /* + ========================================================================== +@@ -1111,17 +1094,19 @@ VOID LinkUp( + ULONG Now; + UINT32 Data; + BOOLEAN Cancelled; +- UCHAR Value = 0, idx; +- MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; ++ UCHAR Value = 0, idx = 0, HashIdx = 0; ++ MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; + +-#ifdef RT2860 +- if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) ++ // Init ChannelQuality to prevent DEAD_CQI at initial LinkUp ++ pAd->Mlme.ChannelQuality = 50; ++ ++ pEntry = MacTableLookup(pAd, pAd->CommonCfg.Bssid); ++ if (pEntry) + { +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_HALT); +- RTMPusecDelay(6000); +- pAd->bPCIclkOff = FALSE; ++ MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); ++ pEntry = NULL; + } +-#endif ++ + + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + +@@ -1140,52 +1125,16 @@ VOID LinkUp( + + COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); + +- // It's quite difficult to tell if a newly added KEY is WEP or CKIP until a new BSS +- // is formed (either ASSOC/RE-ASSOC done or IBSS started. LinkUP should be a safe place +- // to examine if cipher algorithm switching is required. +- //rt2860b. Don't know why need this +- SwitchBetweenWepAndCkip(pAd); +- +-#ifdef RT2860 +- // Before power save before link up function, We will force use 1R. +- // So after link up, check Rx antenna # again. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- if(pAd->Antenna.field.RxPath == 3) +- { +- Value |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- Value |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- Value |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- pAd->StaCfg.BBPR3 = Value; +-#endif /* RT2860 */ +- + if (BssType == BSS_ADHOC) + { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + +- if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE)) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; +- } +- else if ((pAd->CommonCfg.Channel > 2) && +- (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW)) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; +- } +-#ifdef RT2870 ++ + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + AdhocTurnOnQos(pAd); +-#endif ++ ++ InitChannelRelatedValue(pAd); + + DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" )); + } +@@ -1197,6 +1146,7 @@ VOID LinkUp( + DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" )); + } + ++#if defined(RT2870) || defined(RT3070) + // 3*3 + // reset Tx beamforming bit + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +@@ -1221,9 +1171,6 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RT2860 +- pAd->StaCfg.BBPR3 = Value; +-#endif + + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); + Data &= 0xfffffffe; +@@ -1258,9 +1205,6 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value |= (0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RT2860 +- pAd->StaCfg.BBPR3 = Value; +-#endif + + if (pAd->MACVersion == 0x28600100) + { +@@ -1290,9 +1234,6 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RT2860 +- pAd->StaCfg.BBPR3 = Value; +-#endif + + if (pAd->MACVersion == 0x28600100) + { +@@ -1306,6 +1247,8 @@ VOID LinkUp( + } + + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); ++#endif // RT2870 // ++ + // + // Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission + // +@@ -1467,25 +1410,23 @@ VOID LinkUp( + // On WPA mode, Remove All Keys if not connect to the last BSSID + // Key will be set after 4-way handshake. + // +- if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) + { + ULONG IV; + + // Remove all WPA keys ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + RTMPWPARemoveAllKeys(pAd); + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; + + // Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP + // If IV related values are too large in GroupMsg2, AP would ignore this message. +- IV = 0; ++ IV = 1; + IV |= (pAd->StaCfg.DefaultKeyId << 30); + AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0); +- +-#ifdef RT2860 +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#endif + } ++ + // NOTE: + // the decision of using "short slot time" or not may change dynamically due to + // new STA association to the AP. so we have to decide that upon parsing BEACON, not here +@@ -1502,28 +1443,6 @@ VOID LinkUp( + // Add BSSID to WCID search table + AsicUpdateRxWCIDTable(pAd, BSSID_WCID, pAd->CommonCfg.Bssid); + +- NdisAcquireSpinLock(&pAd->MacTabLock); +- // add this BSSID entry into HASH table +- { +- UCHAR HashIdx; +- +- //pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- HashIdx = MAC_ADDR_HASH_INDEX(pAd->CommonCfg.Bssid); +- if (pAd->MacTab.Hash[HashIdx] == NULL) +- { +- pAd->MacTab.Hash[HashIdx] = pEntry; +- } +- else +- { +- pCurrEntry = pAd->MacTab.Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- pCurrEntry = pCurrEntry->pNext; +- pCurrEntry->pNext = pEntry; +- } +- } +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- + // If WEP is enabled, add paiewise and shared key + if (((pAd->StaCfg.WpaSupplicantUP)&& + (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)&& +@@ -1549,6 +1468,7 @@ VOID LinkUp( + // Assign group key info + RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); + ++ pEntry->Aid = BSSID_WCID; + // Assign pairwise key info + RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, pEntry); + } +@@ -1565,26 +1485,55 @@ VOID LinkUp( + { + pAd->IndicateMediaState = NdisMediaStateConnected; + pAd->ExtraInfo = GENERAL_LINK_UP; +-#ifdef RT2870 + RTMP_IndicateMediaState(pAd); +-#endif ++ } ++ else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ { ++ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) ++ RTMPSetTimer(&pAd->Mlme.LinkDownTimer, LINK_DOWN_TIMEOUT); + } + // -- +-#ifdef RT2860 +- RTMP_IndicateMediaState(pAd); +-#endif + + // Add BSSID in my MAC Table. + NdisAcquireSpinLock(&pAd->MacTabLock); +- RTMPMoveMemory(pAd->MacTab.Content[BSSID_WCID].Addr, pAd->CommonCfg.Bssid, MAC_ADDR_LEN); +- pAd->MacTab.Content[BSSID_WCID].Aid = BSSID_WCID; +- pAd->MacTab.Content[BSSID_WCID].pAd = pAd; +- pAd->MacTab.Content[BSSID_WCID].ValidAsCLI = TRUE; //Although this is bssid..still set ValidAsCl ++ // add this MAC entry into HASH table ++ if (pEntry) ++ { ++ HashIdx = MAC_ADDR_HASH_INDEX(pAd->CommonCfg.Bssid); ++ if (pAd->MacTab.Hash[HashIdx] == NULL) ++ { ++ pAd->MacTab.Hash[HashIdx] = pEntry; ++ } ++ else ++ { ++ pCurrEntry = pAd->MacTab.Hash[HashIdx]; ++ while (pCurrEntry->pNext != NULL) ++ { ++ pCurrEntry = pCurrEntry->pNext; ++ } ++ pCurrEntry->pNext = pEntry; ++ } ++ } ++ RTMPMoveMemory(pEntry->Addr, pAd->CommonCfg.Bssid, MAC_ADDR_LEN); ++ pEntry->Aid = BSSID_WCID; ++ pEntry->pAd = pAd; ++ pEntry->ValidAsCLI = TRUE; //Although this is bssid..still set ValidAsCl + pAd->MacTab.Size = 1; // infra mode always set MACtab size =1. +- pAd->MacTab.Content[BSSID_WCID].Sst = SST_ASSOC; +- pAd->MacTab.Content[BSSID_WCID].AuthState = SST_ASSOC; +- pAd->MacTab.Content[BSSID_WCID].AuthMode = pAd->StaCfg.AuthMode; +- pAd->MacTab.Content[BSSID_WCID].WepStatus = pAd->StaCfg.WepStatus; ++ pEntry->Sst = SST_ASSOC; ++ pEntry->AuthState = SST_ASSOC; ++ pEntry->AuthMode = pAd->StaCfg.AuthMode; ++ pEntry->WepStatus = pAd->StaCfg.WepStatus; ++ if (pEntry->AuthMode < Ndis802_11AuthModeWPA) ++ { ++ pEntry->WpaState = AS_NOTUSE; ++ pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ } ++ else ++ { ++ pEntry->WpaState = AS_PTKSTART; ++ pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; ++ } + NdisReleaseSpinLock(&pAd->MacTabLock); + + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! ClientStatusFlags=%lx)\n", +@@ -1598,32 +1547,34 @@ VOID LinkUp( + { + if ((pAd->CommonCfg.bPiggyBackCapable) && (pAd->MlmeAux.APRalinkIe & 0x00000003) == 3) + { +- + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED); + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); ++ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); + RTMPSetPiggyBack(pAd, TRUE); + DBGPRINT(RT_DEBUG_TRACE, ("Turn on Piggy-Back\n")); + } + else if (pAd->MlmeAux.APRalinkIe & 0x00000001) + { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); ++ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ DBGPRINT(RT_DEBUG_TRACE, ("Ralink Aggregation\n")); + } + } + + if (pAd->MlmeAux.APRalinkIe != 0x0) + { +- if (CLIENT_STATUS_TEST_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RDG_CAPABLE)) ++ if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE)) + { + AsicEnableRDG(pAd); + } +- + OPSTATUS_SET_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RALINK_CHIPSET); ++ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET); + } + else + { + OPSTATUS_CLEAR_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RALINK_CHIPSET); ++ CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET); + } + } + +@@ -1707,8 +1658,8 @@ VOID LinkUp( + // Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable + // + // if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is. +- if ( +- !(pAd->CommonCfg.RxStream == 1 && pAd->CommonCfg.TxStream == 1) && ++ if (!((pAd->CommonCfg.RxStream == 1)&&(pAd->CommonCfg.TxStream == 1)) && ++ (pAd->StaCfg.bForceTxBurst == FALSE) && + (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) + || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))) + { +@@ -1770,9 +1721,16 @@ VOID LinkUp( + + if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled) + { ++ if (pAd->StaCfg.WpaSupplicantUP && ++ (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && ++ (pAd->StaCfg.IEEE8021X == TRUE)) ++ ; ++ else ++ { + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + } ++ } + + NdisAcquireSpinLock(&pAd->MacTabLock); + pEntry->PortSecured = pAd->StaCfg.PortSecured; +@@ -1792,9 +1750,23 @@ VOID LinkUp( + } + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +-#ifdef RT2860 ++ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +-#endif ++ ++#ifdef RT2860 ++ /* ++ When AuthMode is WPA2-Enterprise and AP reboot or STA lost AP, ++ WpaSupplicant would not send EapolStart to AP after STA re-connect to AP again. ++ In this case, driver would send EapolStart to AP. ++ */ ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) && ++ (NdisEqualMemory(pAd->CommonCfg.Bssid, pAd->CommonCfg.LastBssid, MAC_ADDR_LEN)) && ++ (pAd->StaCfg.bLostAp == TRUE)) ++ { ++ WpaSendEapolStart(pAd, pAd->CommonCfg.Bssid); ++ } ++#endif // RT2860 // ++ pAd->StaCfg.bLostAp = FALSE; + } + + /* +@@ -1827,21 +1799,17 @@ VOID LinkDown( + IN BOOLEAN IsReqFromAP) + { + UCHAR i, ByteValue = 0; +-#ifdef RT2860 + BOOLEAN Cancelled; +-#endif + + // Do nothing if monitor mode is on + if (MONITOR_ON(pAd)) + return; + +-#ifdef RT2860 + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- ++ //Comment the codes, beasue the line 2291 call the same function. ++ //RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + // Not allow go to sleep within linkdown function. + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#endif + + if (pAd->CommonCfg.bWirelessEvent) + { +@@ -1851,7 +1819,7 @@ VOID LinkDown( + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { + BOOLEAN Cancelled; +@@ -1859,16 +1827,20 @@ VOID LinkDown( + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + } + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || +- RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) ++ pAd->bPCIclkOff = FALSE; ++#endif // RTMP_MAC_PCI // ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++|| RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) + { +- AsicForceWakeup(pAd, RTMP_HALT); ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ AsicForceWakeup(pAd, TRUE); ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + +- pAd->bPCIclkOff = FALSE; +-#endif + if (ADHOC_ON(pAd)) // Adhoc mode link down + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); +@@ -1917,34 +1889,22 @@ VOID LinkDown( + // 3. short preamble + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); + +- if (pAd->StaCfg.CCXAdjacentAPReportFlag == TRUE) +- { +- // +- // Record current AP's information. +- // for later used reporting Adjacent AP report. +- // +- pAd->StaCfg.CCXAdjacentAPChannel = pAd->CommonCfg.Channel; +- pAd->StaCfg.CCXAdjacentAPSsidLen = pAd->CommonCfg.SsidLen; +- NdisMoveMemory(pAd->StaCfg.CCXAdjacentAPSsid, pAd->CommonCfg.Ssid, pAd->StaCfg.CCXAdjacentAPSsidLen); +- COPY_MAC_ADDR(pAd->StaCfg.CCXAdjacentAPBssid, pAd->CommonCfg.Bssid); +- } ++ + } + ++ + for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) + MacTableDeleteEntry(pAd, pAd->MacTab.Content[i].Aid, pAd->MacTab.Content[i].Addr); + } + +- pAd->StaCfg.CCXQosECWMin = 4; +- pAd->StaCfg.CCXQosECWMax = 10; +- + AsicSetSlotTime(pAd, TRUE); //FALSE); + AsicSetEdcaParm(pAd, NULL); + + // Set LED + RTMPSetLED(pAd, LED_LINK_DOWN); +- pAd->LedIndicatorStregth = 0xF0; ++ pAd->LedIndicatorStrength = 0xF0; + RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. + + AsicDisableSync(pAd); +@@ -1971,8 +1931,8 @@ VOID LinkDown( + pAd->StaCfg.WpaState = SS_START; + // Clear Replay counter + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); +- } + ++ } + + // + // if link down come from AP, we need to remove all WPA keys on WPA mode. +@@ -2001,31 +1961,21 @@ VOID LinkDown( + } + + NdisAcquireSpinLock(&pAd->MacTabLock); ++ NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); + pAd->MacTab.Content[BSSID_WCID].PortSecured = pAd->StaCfg.PortSecured; + NdisReleaseSpinLock(&pAd->MacTabLock); + + pAd->StaCfg.MicErrCnt = 0; + +- // Turn off Ckip control flag +- pAd->StaCfg.bCkipOn = FALSE; +- pAd->StaCfg.CCXEnable = FALSE; +- + pAd->IndicateMediaState = NdisMediaStateDisconnected; + // Update extra information to link is up + pAd->ExtraInfo = GENERAL_LINK_DOWN; + +-#ifdef RT2860 +- pAd->StaCfg.AdhocBOnlyJoined = FALSE; +- pAd->StaCfg.AdhocBGJoined = FALSE; +- pAd->StaCfg.Adhoc20NJoined = FALSE; +-#endif + pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; + +- // Reset the Current AP's IP address +- NdisZeroMemory(pAd->StaCfg.AironetIPAddress, 4); +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + pAd->bUsbTxBulkAggre = FALSE; +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + + // Clean association information + NdisZeroMemory(&pAd->StaCfg.AssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); +@@ -2081,30 +2031,18 @@ VOID LinkDown( + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x1fff); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + +-#ifdef RT2860 +- // Allow go to sleep after linkdown steps. ++// Allow go to sleep after linkdown steps. + RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#endif + +- { +- union iwreq_data wrqu; +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- } ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); + +- if (IS_RT3090(pAd)) ++#ifdef RT30xx ++ if ((IS_RT30xx(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) ++ &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) + { +- UINT32 macdata; +- // disable MMPS BBP control register +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &ByteValue); +- ByteValue &= ~(0x04); //bit 2 +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, ByteValue); +- +- // disable MMPS MAC control register +- RTMP_IO_READ32(pAd, 0x1210, &macdata); +- macdata &= ~(0x09); //bit 0, 3 +- RTMP_IO_WRITE32(pAd, 0x1210, macdata); ++ RTMP_ASIC_MMPS_DISABLE(pAd); + } ++#endif // RT30xx // + } + + /* +@@ -2161,11 +2099,11 @@ VOID IterateOnBssTab( + + // Set Mix cipher flag + pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +- if (pAd->StaCfg.bMixCipher == TRUE) ++ /*if (pAd->StaCfg.bMixCipher == TRUE) + { + // If mix cipher, re-build RSNIE + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- } ++ }*/ + + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - iterate BSS %ld of %d\n", BssIdx, pAd->MlmeAux.SsidBssTab.BssNr)); + JoinParmFill(pAd, &JoinReq, BssIdx); +@@ -2176,15 +2114,19 @@ VOID IterateOnBssTab( + else if (pAd->StaCfg.BssType == BSS_ADHOC) + { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All BSS fail; start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } + else // no more BSS + { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, stay @ ch #%d\n", pAd->CommonCfg.Channel)); ++ ++ { + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); ++ } ++ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + } +@@ -2218,9 +2160,13 @@ VOID IterateOnBssTab2( + } + else // no more BSS + { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All fast roaming failed, back to ch #%d\n",pAd->CommonCfg.Channel)); ++ ++ { + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); ++ } ++ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + } +@@ -2252,7 +2198,7 @@ VOID JoinParmFill( + VOID ScanParmFill( + IN PRTMP_ADAPTER pAd, + IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN CHAR Ssid[], ++ IN STRING Ssid[], + IN UCHAR SsidLen, + IN UCHAR BssType, + IN UCHAR ScanType) +@@ -2310,10 +2256,32 @@ VOID AuthParmFill( + + ========================================================================== + */ ++#ifdef RTMP_MAC_PCI ++VOID ComposePsPoll( ++ IN PRTMP_ADAPTER pAd) ++{ ++ NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ pAd->PsPollFrame.FC.Type = BTYPE_CNTL; ++ pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL; ++ pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000; ++ COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid); ++ COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); ++} + +- +-#ifdef RT2870 +- ++// IRQL = DISPATCH_LEVEL ++VOID ComposeNullFrame( ++ IN PRTMP_ADAPTER pAd) ++{ ++ NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); ++ pAd->NullFrame.FC.Type = BTYPE_DATA; ++ pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC; ++ pAd->NullFrame.FC.ToDs = 1; ++ COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid); ++ COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); ++ COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); ++} ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + VOID MlmeCntlConfirm( + IN PRTMP_ADAPTER pAd, + IN ULONG MsgType, +@@ -2321,29 +2289,23 @@ VOID MlmeCntlConfirm( + { + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg); + } +-#endif + + VOID ComposePsPoll( + IN PRTMP_ADAPTER pAd) + { +-#ifdef RT2870 + PTXINFO_STRUC pTxInfo; + PTXWI_STRUC pTxWI; + + DBGPRINT(RT_DEBUG_TRACE, ("ComposePsPoll\n")); +-#endif + NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); + +-#ifdef RT2870 + pAd->PsPollFrame.FC.PwrMgmt = 0; +-#endif + pAd->PsPollFrame.FC.Type = BTYPE_CNTL; + pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL; + pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000; + COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid); + COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); + +-#ifdef RT2870 + RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0], 100); + pTxInfo = (PTXINFO_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(PSPOLL_FRAME)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +@@ -2353,17 +2315,14 @@ VOID ComposePsPoll( + RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); + // Append 4 extra zero bytes. + pAd->PsPollContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; +-#endif + } + + // IRQL = DISPATCH_LEVEL + VOID ComposeNullFrame( + IN PRTMP_ADAPTER pAd) + { +-#ifdef RT2870 + PTXINFO_STRUC pTxInfo; + PTXWI_STRUC pTxWI; +-#endif + + NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; +@@ -2372,7 +2331,6 @@ VOID ComposeNullFrame( + COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid); + COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); +-#ifdef RT2870 + RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[0], 100); + pTxInfo = (PTXINFO_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +@@ -2381,11 +2339,8 @@ VOID ComposeNullFrame( + 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); + pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; +-#endif + } +- +- +- ++#endif // RTMP_MAC_USB // + + /* + ========================================================================== +@@ -2407,7 +2362,7 @@ ULONG MakeIbssBeacon( + LARGE_INTEGER FakeTimestamp; + ULONG FrameLen = 0; + PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; +- CHAR *pBeaconFrame = pAd->BeaconBuf; ++ UCHAR *pBeaconFrame = pAd->BeaconBuf; + BOOLEAN Privacy; + UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR SupRateLen = 0; +@@ -2566,4 +2521,138 @@ ULONG MakeIbssBeacon( + return FrameLen; + } + ++VOID InitChannelRelatedValue( ++ IN PRTMP_ADAPTER pAd) ++{ ++#ifdef RT2860 ++ UCHAR Value = 0; ++ UINT32 Data = 0; ++ ++#ifdef RTMP_MAC_PCI ++ // In power save , We will force use 1R. ++ // So after link up, check Rx antenna # again. ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); ++ if(pAd->Antenna.field.RxPath == 3) ++ { ++ Value |= (0x10); ++ } ++ else if(pAd->Antenna.field.RxPath == 2) ++ { ++ Value |= (0x8); ++ } ++ else if(pAd->Antenna.field.RxPath == 1) ++ { ++ Value |= (0x0); ++ } ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // ++ ++ pAd->CommonCfg.CentralChannel = pAd->MlmeAux.CentralChannel; ++ pAd->CommonCfg.Channel = pAd->MlmeAux.Channel; ++ // Change to AP channel ++ if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ pAd->CommonCfg.BBPCurrentBW = BW_40; ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); ++ Value &= (~0x18); ++ Value |= 0x10; ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); ++ ++ // RX : control channel at lower ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); ++ Value &= (~0x20); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // ++ ++ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); ++ Data &= 0xfffffffe; ++ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); ++ ++ if (pAd->MACVersion == 0x28600100) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); ++ } ++ else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) ++ { ++ // Must using 40MHz. ++ pAd->CommonCfg.BBPCurrentBW = BW_40; ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); ++ Value &= (~0x18); ++ Value |= 0x10; ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); ++ ++ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); ++ Data |= 0x1; ++ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); ++ Value |= (0x20); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // ++ ++ if (pAd->MACVersion == 0x28600100) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); ++ } ++ else ++ { ++ pAd->CommonCfg.BBPCurrentBW = BW_20; ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); ++ Value &= (~0x18); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); ++ ++ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); ++ Data &= 0xfffffffe; ++ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); ++ ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); ++ Value &= (~0x20); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // ++ ++ if (pAd->MACVersion == 0x28600100) ++ { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz !!! \n" )); ++ } ++ ++ RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); ++#endif // RT2860 // ++} ++ + +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index f751ab6..6a8ffde 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -33,8 +33,6 @@ + Revision History: + Who When What + -------- ---------- ---------------------------------------------- +- John Aug/17/04 major modification for RT2561/2661 +- Jan Lee Mar/17/06 major modification for RT2860 New Ring Design + */ + #include "../rt_config.h" + +@@ -64,6 +62,7 @@ VOID STARxEAPOLFrameIndicate( + int idx = 0; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("Receive EAP-SUCCESS Packet\n")); ++ //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + + if (pAd->StaCfg.IEEE8021x_required_keys == FALSE) +@@ -74,7 +73,7 @@ VOID STARxEAPOLFrameIndicate( + + if (pAd->StaCfg.DesireSharedKey[idx].KeyLen > 0) + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[BSSID_WCID]; + + // Set key material and cipherAlg to Asic +@@ -88,8 +87,8 @@ VOID STARxEAPOLFrameIndicate( + + pAd->IndicateMediaState = NdisMediaStateConnected; + pAd->ExtraInfo = GENERAL_LINK_UP; +-#endif +-#ifdef RT2870 ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB + union + { + char buf[sizeof(NDIS_802_11_WEP)+MAX_LEN_OF_KEY- 1]; +@@ -113,7 +112,7 @@ VOID STARxEAPOLFrameIndicate( + pAd->ExtraInfo = GENERAL_LINK_UP; + // need to enqueue cmd to thread + RTUSBEnqueueCmdFromNdis(pAd, OID_802_11_ADD_WEP, TRUE, &WepKey, sizeof(WepKey.keyinfo) + len - 1); +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + // For Preventing ShardKey Table is cleared by remove key procedure. + pAd->SharedKey[BSS0][idx].CipherAlg = CipherAlg; + pAd->SharedKey[BSS0][idx].KeyLen = pAd->StaCfg.DesireSharedKey[idx].KeyLen; +@@ -156,6 +155,7 @@ VOID STARxDataFrameAnnounce( + // non-EAP frame + if (!RTMPCheckWPAframe(pAd, pEntry, pRxBlk->pData, pRxBlk->DataSize, FromWhichBSSID)) + { ++ + { + // drop all non-EAP DATA frame before + // this client's Port-Access-Control is secured +@@ -309,13 +309,13 @@ VOID STAHandleRxDataFrame( + if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && (pHeader->FC.SubType & 0x08)) + { + UCHAR *pData; +- DBGPRINT(RT_DEBUG_TRACE,("bAPSDCapable\n")); ++ DBGPRINT(RT_DEBUG_INFO,("bAPSDCapable\n")); + + // Qos bit 4 + pData = (PUCHAR)pHeader + LENGTH_802_11; + if ((*pData >> 4) & 0x01) + { +- DBGPRINT(RT_DEBUG_TRACE,("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); ++ DBGPRINT(RT_DEBUG_INFO,("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); + pAd->CommonCfg.bInServicePeriod = FALSE; + + // Force driver to fall into sleep mode when rcv EOSP frame +@@ -332,7 +332,7 @@ VOID STAHandleRxDataFrame( + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim)) + TbttNumToNextWakeUp = NextDtim; + +- MlmeSetPsmBit(pAd, PWR_SAVE); ++ RTMP_SET_PSM_BIT(pAd, PWR_SAVE); + // if WMM-APSD is failed, try to disable following line + AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); + } +@@ -442,6 +442,23 @@ VOID STAHandleRxDataFrame( + } + pRxBlk->UserPriority = UserPriority; + ++ /* check if need to resend PS Poll when received packet with MoreData = 1 */ ++ if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) ++ { ++ if ((((UserPriority == 0) || (UserPriority == 3)) && ++ pAd->CommonCfg.bAPSDAC_BE == 0) || ++ (((UserPriority == 1) || (UserPriority == 2)) && ++ pAd->CommonCfg.bAPSDAC_BK == 0) || ++ (((UserPriority == 4) || (UserPriority == 5)) && ++ pAd->CommonCfg.bAPSDAC_VI == 0) || ++ (((UserPriority == 6) || (UserPriority == 7)) && ++ pAd->CommonCfg.bAPSDAC_VO == 0)) ++ { ++ /* non-UAPSD delivery-enabled AC */ ++ RTMP_PS_POLL_ENQUEUE(pAd); ++ } ++ } ++ + // 3. Order bit: A-Ralink or HTC+ + if (pHeader->FC.Order) + { +@@ -451,7 +468,7 @@ VOID STAHandleRxDataFrame( + RX_BLK_SET_FLAG(pRxBlk, fRX_ARALINK); + } + else +-#endif ++#endif // AGGREGATION_SUPPORT // + { + RX_BLK_SET_FLAG(pRxBlk, fRX_HTC); + // skip HTC contorl field +@@ -574,27 +591,31 @@ VOID STAHandleRxMgmtFrame( + do + { + ++ ++ /* check if need to resend PS Poll when received packet with MoreData = 1 */ ++ if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) ++ { ++ /* for UAPSD, all management frames will be VO priority */ ++ if (pAd->CommonCfg.bAPSDAC_VO == 0) ++ { ++ /* non-UAPSD delivery-enabled AC */ ++ RTMP_PS_POLL_ENQUEUE(pAd); ++ } ++ } ++ ++ /* TODO: if MoreData == 0, station can go to sleep */ ++ ++ + // We should collect RSSI not only U2M data but also my beacon +- if (pAd->RxAnt.EvaluatePeriod == 0 && +- pHeader->FC.SubType == SUBTYPE_BEACON && +- MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) { ++ if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) ++ && (pAd->RxAnt.EvaluatePeriod == 0)) ++ { + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); + + pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0); + pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); + } + +-#ifdef RT2870 +- // collect rssi information for antenna diversity +- if (pAd->NicConfig2.field.AntDiversity) +- { +- if ((pRxD->U2M) || ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)))) +- { +- COLLECT_RX_ANTENNA_AVERAGE_RSSI(pAd, ConvertToRssi(pAd, (UCHAR)pRxWI->RSSI0, RSSI_0), 0); //Note: RSSI2 not used on RT73 +- pAd->StaCfg.NumOfAvgRssiSample ++; +- } +- } +-#endif + + // First check the size, it MUST not exceed the mlme queue size + if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) +@@ -683,14 +704,14 @@ BOOLEAN STARxDoneInterruptHandle( + break; + } + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (RxProcessed++ > MAX_RX_PROCESS_CNT) + { + // need to reschedule rx handle + bReschedule = TRUE; + break; + } +-#endif ++#endif // RTMP_MAC_PCI // + + RxProcessed ++; // test + +@@ -725,6 +746,7 @@ BOOLEAN STARxDoneInterruptHandle( + + // Increase Total receive byte counter after real data received no mater any error or not + pAd->RalinkCounters.ReceivedByteCount += pRxWI->MPDUtotalByteCount; ++ pAd->RalinkCounters.OneSecReceivedByteCount += pRxWI->MPDUtotalByteCount; + pAd->RalinkCounters.RxCount ++; + + INC_COUNTER64(pAd->WlanCounters.ReceivedFragmentCount); +@@ -737,7 +759,8 @@ BOOLEAN STARxDoneInterruptHandle( + send_monitor_packets(pAd, &RxCell); + break; + } +- /* RT2870 invokes STARxDoneInterruptHandle() in rtusb_bulk.c */ ++ ++ /* STARxDoneInterruptHandle() is called in rtusb_bulk.c */ + + // Check for all RxD errors + Status = RTMPCheckRxError(pAd, pHeader, pRxWI, pRxD); +@@ -780,15 +803,6 @@ BOOLEAN STARxDoneInterruptHandle( + } + } + +-#ifdef RT2860 +- // fRTMP_PS_GO_TO_SLEEP_NOW is set if receiving beacon. +- if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW) && (INFRA_ON(pAd))) +- { +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp); +- bReschedule = FALSE; +- } +-#endif + return bReschedule; + } + +@@ -806,12 +820,7 @@ BOOLEAN STARxDoneInterruptHandle( + VOID RTMPHandleTwakeupInterrupt( + IN PRTMP_ADAPTER pAd) + { +-#ifdef RT2860 +- AsicForceWakeup(pAd, DOT11POWERSAVE); +-#endif +-#ifdef RT2870 + AsicForceWakeup(pAd, FALSE); +-#endif + } + + /* +@@ -914,6 +923,7 @@ NDIS_STATUS STASendPacket( + UINT SrcBufLen; + UINT AllowFragSize; + UCHAR NumberOfFrag; ++ UCHAR RTSRequired; + UCHAR QueIdx, UserPriority; + MAC_TABLE_ENTRY *pEntry = NULL; + unsigned int IrqFlags; +@@ -1052,7 +1062,14 @@ NDIS_STATUS STASendPacket( + // If multiple fragment required, RTS is required only for the first fragment + // if the fragment size large than RTS threshold + // For RT28xx, Let ASIC send RTS/CTS +- RTMP_SET_PACKET_RTS(pPacket, 0); ++// RTMP_SET_PACKET_RTS(pPacket, 0); ++ if (NumberOfFrag > 1) ++ RTSRequired = (pAd->CommonCfg.FragmentThreshold > pAd->CommonCfg.RtsThreshold) ? 1 : 0; ++ else ++ RTSRequired = (PacketInfo.TotalPacketLength > pAd->CommonCfg.RtsThreshold) ? 1 : 0; ++ ++ // Save RTS requirement to Ndis packet reserved field ++ RTMP_SET_PACKET_RTS(pPacket, RTSRequired); + RTMP_SET_PACKET_TXRATE(pPacket, pAd->CommonCfg.TxRate); + + // +@@ -1060,13 +1077,8 @@ NDIS_STATUS STASendPacket( + // + UserPriority = 0; + QueIdx = QID_AC_BE; +-#ifdef RT2860 +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) +-#endif +-#ifdef RT2870 + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && + CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) +-#endif + { + USHORT Protocol; + UCHAR LlcSnapLen = 0, Byte0, Byte1; +@@ -1102,6 +1114,11 @@ NDIS_STATUS STASendPacket( + + // TODO: have to check ACM bit. apply TSPEC if ACM is ON + // TODO: downgrade UP & QueIdx before passing ACM ++ /* ++ Under WMM ACM control, we dont need to check the bit; ++ Or when a TSPEC is built for VO but we will change to issue ++ BA session for BE here, so we will not use BA to send VO packets. ++ */ + if (pAd->CommonCfg.APEdcaParm.bACM[QueIdx]) + { + UserPriority = 0; +@@ -1125,18 +1142,14 @@ NDIS_STATUS STASendPacket( + } + else + { +- InsertTailQueue(&pAd->TxSwQueue[QueIdx], PACKET_TO_QUEUE_ENTRY(pPacket)); ++ InsertTailQueueAc(pAd, pEntry, &pAd->TxSwQueue[QueIdx], PACKET_TO_QUEUE_ENTRY(pPacket)); + } + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + + if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&& +-#ifdef RT2860 +- (pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) +-#endif +-#ifdef RT2870 + IS_HT_STA(pEntry)) +-#endif + { ++ //PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; + if (((pEntry->TXBAbitmap & (1<BADeclineBitmap & (1<PortSecured == WPA_802_1X_PORT_SECURED) +@@ -1145,10 +1158,10 @@ NDIS_STATUS STASendPacket( + // 2. It is OPEN or AES mode, + // then BA session can be bulit. + && ((pEntry->ValidAsCLI && pAd->MlmeAux.APRalinkIe != 0x0) || +- (pEntry->WepStatus == Ndis802_11WEPDisabled || pEntry->WepStatus == Ndis802_11Encryption3Enabled)) ++ (pEntry->WepStatus != Ndis802_11WEPEnabled && pEntry->WepStatus != Ndis802_11Encryption2Enabled)) + ) + { +- BAOriSessionSetUp(pAd, pEntry, 0, 0, 10, FALSE); ++ BAOriSessionSetUp(pAd, pEntry, UserPriority, 0, 10, FALSE); + } + } + +@@ -1179,27 +1192,15 @@ NDIS_STATUS STASendPacket( + + ======================================================================== + */ +- +-#ifdef RT2870 +-/* +- Actually, this function used to check if the TxHardware Queue still has frame need to send. +- If no frame need to send, go to sleep, else, still wake up. +-*/ +-#endif ++#ifdef RTMP_MAC_PCI + NDIS_STATUS RTMPFreeTXDRequest( + IN PRTMP_ADAPTER pAd, + IN UCHAR QueIdx, + IN UCHAR NumberRequired, + IN PUCHAR FreeNumberIs) + { +-#ifdef RT2860 + ULONG FreeNumber = 0; +-#endif + NDIS_STATUS Status = NDIS_STATUS_FAILURE; +-#ifdef RT2870 +- unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; +-#endif + + switch (QueIdx) + { +@@ -1208,7 +1209,6 @@ NDIS_STATUS RTMPFreeTXDRequest( + case QID_AC_VI: + case QID_AC_VO: + case QID_HCCA: +-#ifdef RT2860 + if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx) + FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1; + else +@@ -1216,8 +1216,49 @@ NDIS_STATUS RTMPFreeTXDRequest( + + if (FreeNumber >= NumberRequired) + Status = NDIS_STATUS_SUCCESS; +-#endif +-#ifdef RT2870 ++ break; ++ ++ case QID_MGMT: ++ if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) ++ FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1; ++ else ++ FreeNumber = pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - pAd->MgmtRing.TxCpuIdx - 1; ++ ++ if (FreeNumber >= NumberRequired) ++ Status = NDIS_STATUS_SUCCESS; ++ break; ++ ++ default: ++ DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); ++ break; ++ } ++ *FreeNumberIs = (UCHAR)FreeNumber; ++ ++ return (Status); ++} ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++/* ++ Actually, this function used to check if the TxHardware Queue still has frame need to send. ++ If no frame need to send, go to sleep, else, still wake up. ++*/ ++NDIS_STATUS RTMPFreeTXDRequest( ++ IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR NumberRequired, ++ IN PUCHAR FreeNumberIs) ++{ ++ //ULONG FreeNumber = 0; ++ NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ unsigned long IrqFlags; ++ HT_TX_CONTEXT *pHTTXContext; ++ ++ switch (QueIdx) ++ { ++ case QID_AC_BK: ++ case QID_AC_BE: ++ case QID_AC_VI: ++ case QID_AC_VO: + { + pHTTXContext = &pAd->TxContext[QueIdx]; + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +@@ -1232,39 +1273,21 @@ NDIS_STATUS RTMPFreeTXDRequest( + } + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + } +-#endif + break; +- + case QID_MGMT: +-#ifdef RT2860 +- if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1; +- else +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - pAd->MgmtRing.TxCpuIdx - 1; +- +- if (FreeNumber >= NumberRequired) +- Status = NDIS_STATUS_SUCCESS; +-#endif +-#ifdef RT2870 + if (pAd->MgmtRing.TxSwFreeIdx != MGMT_RING_SIZE) + Status = NDIS_STATUS_FAILURE; + else + Status = NDIS_STATUS_SUCCESS; +-#endif + break; +- + default: + DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); + break; + } +-#ifdef RT2860 +- *FreeNumberIs = (UCHAR)FreeNumber; +-#endif + + return (Status); + } +- +- ++#endif // RTMP_MAC_USB // + + VOID RTMPSendDisassociationFrame( + IN PRTMP_ADAPTER pAd) +@@ -1527,6 +1550,9 @@ VOID STABuildCache802_11Header( + pMacEntry->TxSeq[pTxBlk->UserPriority] = (pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ; + + { ++ // Check if the frame can be sent through DLS direct link interface ++ // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability) ++ + // The addr3 of normal packet send from DS is Dest Mac address. + if (ADHOC_ON(pAd)) + COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid); +@@ -1580,13 +1606,13 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header( + + // padding at front of LLC header. LLC header should at 4-bytes aligment. + pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PCHAR)ROUND_UP(pHeaderBufPtr, 4); ++ pHeaderBufPtr = (PUCHAR)ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + // For RA Aggregation, + // put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format + pQEntry = pTxBlk->TxPacketList.Head; +- pNextPacket = QUEUE_ENTRY_TO_PKT(pQEntry); ++ pNextPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); + nextBufLen = GET_OS_PKT_LEN(pNextPacket); + if (RTMP_GET_PACKET_VLAN(pNextPacket)) + nextBufLen -= LENGTH_802_1Q; +@@ -1641,7 +1667,7 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header( + // @@@ MpduHeaderLen excluding padding @@@ + // + pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4); ++ pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + return pHeaderBufPtr; +@@ -1743,7 +1769,7 @@ VOID STA_AMPDU_Frame_Tx( + // @@@ MpduHeaderLen excluding padding @@@ + // + pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4); ++ pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + { +@@ -1790,9 +1816,7 @@ VOID STA_AMPDU_Frame_Tx( + // + // Kick out Tx + // +-#ifdef RT2860 + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +-#endif + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + + pAd->RalinkCounters.KickTxCount++; +@@ -1923,9 +1947,7 @@ VOID STA_AMSDU_Frame_Tx( + // + // Kick out Tx + // +-#ifdef RT2860 + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +-#endif + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +@@ -1991,7 +2013,7 @@ VOID STA_Legacy_Frame_Tx( + // + // build QOS Control bytes + // +- *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); ++ *(pHeaderBufPtr) = ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx]<<5)); + *(pHeaderBufPtr+1) = 0; + pHeaderBufPtr +=2; + pTxBlk->MpduHeaderLen += 2; +@@ -1999,7 +2021,7 @@ VOID STA_Legacy_Frame_Tx( + + // The remaining content of MPDU header should locate at 4-octets aligment + pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4); ++ pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + { +@@ -2045,9 +2067,7 @@ VOID STA_Legacy_Frame_Tx( + // + // Kick out Tx + // +-#ifdef RT2860 + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +-#endif + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +@@ -2158,9 +2178,7 @@ VOID STA_ARalink_Frame_Tx( + // + // Kick out Tx + // +-#ifdef RT2860 + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +-#endif + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + + } +@@ -2181,6 +2199,7 @@ VOID STA_Fragment_Frame_Tx( + UINT NextMpduSize; + BOOLEAN bVLANPkt; + PQUEUE_ENTRY pQEntry; ++ HTTRANSMIT_SETTING *pTransmit; + + + ASSERT(pTxBlk); +@@ -2243,7 +2262,7 @@ VOID STA_Fragment_Frame_Tx( + // LLC header should locate at 4-octets aligment + // + pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4); ++ pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + +@@ -2276,6 +2295,7 @@ VOID STA_Fragment_Frame_Tx( + // MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC + if (pTxBlk->CipherAlg == CIPHER_TKIP) + { ++ RTMPCalculateMICValue(pAd, pTxBlk->pPacket, pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey, 0); + + // NOTE: DON'T refer the skb->len directly after following copy. Becasue the length is not adjust + // to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. +@@ -2301,8 +2321,20 @@ VOID STA_Fragment_Frame_Tx( + else + EncryptionOverhead = 0; + ++ pTransmit = pTxBlk->pTransmit; ++ // Decide the TX rate ++ if (pTransmit->field.MODE == MODE_CCK) ++ pTxBlk->TxRate = pTransmit->field.MCS; ++ else if (pTransmit->field.MODE == MODE_OFDM) ++ pTxBlk->TxRate = pTransmit->field.MCS + RATE_FIRST_OFDM_RATE; ++ else ++ pTxBlk->TxRate = RATE_6_5; ++ + // decide how much time an ACK/CTS frame will consume in the air ++ if (pTxBlk->TxRate <= RATE_LAST_OFDM_RATE) + AckDuration = RTMPCalcDuration(pAd, pAd->CommonCfg.ExpectedACKRate[pTxBlk->TxRate], 14); ++ else ++ AckDuration = RTMPCalcDuration(pAd, RATE_6_5, 14); + + // Init the total payload length of this frame. + SrcRemainingBytes = pTxBlk->SrcBufLen; +@@ -2365,6 +2397,7 @@ VOID STA_Fragment_Frame_Tx( + // + // Kick out Tx + // ++ if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +@@ -2428,13 +2461,13 @@ NDIS_STATUS STAHardTransmit( + // not to change PSM bit, just send this frame out? + if ((pAd->StaCfg.Psm == PWR_SAVE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + { +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicForceWakeup At HardTx\n")); +-#ifdef RT2860 +- AsicForceWakeup(pAd, FROM_TX); +-#endif +-#ifdef RT2870 ++ DBGPRINT_RAW(RT_DEBUG_INFO, ("AsicForceWakeup At HardTx\n")); ++#ifdef RTMP_MAC_PCI + AsicForceWakeup(pAd, TRUE); +-#endif ++#endif // RTMP_MAC_PCI // ++#ifdef RTMP_MAC_USB ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_FORCE_WAKE_UP, NULL, 0); ++#endif // RTMP_MAC_USB // + } + + // It should not change PSM bit, when APSD turn on. +@@ -2444,7 +2477,7 @@ NDIS_STATUS STAHardTransmit( + { + if ((pAd->StaCfg.Psm == PWR_SAVE) && + (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP)) +- MlmeSetPsmBit(pAd, PWR_ACTIVE); ++ RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); + } + + switch (pTxBlk->TxFrameType) +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index 7d530f6..292baa8 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -117,7 +117,7 @@ BOOLEAN PeerAssocRspSanity( + *pHtCapabilityLen = 0; + *pAddHtInfoLen = 0; + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- Ptr = pFrame->Octet; ++ Ptr = (PCHAR)pFrame->Octet; + Length += LENGTH_802_11; + + NdisMoveMemory(pCapabilityInfo, &pFrame->Octet[0], 2); +@@ -213,28 +213,7 @@ BOOLEAN PeerAssocRspSanity( + DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); + } + break; +- case IE_AIRONET_CKIP: +- // 0. Check Aironet IE length, it must be larger or equal to 28 +- // Cisco's AP VxWork version(will not be supported) used this IE length as 28 +- // Cisco's AP IOS version used this IE length as 30 +- if (pEid->Len < (CKIP_NEGOTIATION_LENGTH - 2)) +- break; +- +- // 1. Copy CKIP flag byte to buffer for process +- *pCkipFlag = *(pEid->Octet + 8); +- break; + +- case IE_AIRONET_IPADDRESS: +- if (pEid->Len != 0x0A) +- break; +- +- // Get Cisco Aironet IP information +- if (NdisEqualMemory(pEid->Octet, CISCO_OUI, 3) == 1) +- NdisMoveMemory(pAd->StaCfg.AironetIPAddress, pEid->Octet + 4, 4); +- break; +- +- // CCX2, WMM use the same IE value +- // case IE_CCX_V2: + case IE_VENDOR_SPECIFIC: + // handle WME PARAMTER ELEMENT + if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) && (pEid->Len == 24)) +@@ -250,7 +229,7 @@ BOOLEAN PeerAssocRspSanity( + //pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; + pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; + pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = &pEid->Octet[8]; ++ ptr = (PUCHAR)&pEid->Octet[8]; + for (i=0; i<4; i++) + { + UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +@@ -262,23 +241,7 @@ BOOLEAN PeerAssocRspSanity( + ptr += 4; // point to next AC + } + } +- +- // handle CCX IE +- else +- { +- // 0. Check the size and CCX admin control +- if (pAd->StaCfg.CCXControl.field.Enable == 0) +- break; +- if (pEid->Len != 5) +- break; +- +- // Turn CCX2 if matched +- if (NdisEqualMemory(pEid->Octet, Ccx2IeInfo, 5) == 1) +- pAd->StaCfg.CCXEnable = TRUE; +- break; +- } + break; +- + default: + DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspSanity - ignore unrecognized EID = %d\n", pEid->Eid)); + break; +@@ -288,9 +251,6 @@ BOOLEAN PeerAssocRspSanity( + pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); + } + +- // Force CCX2 enable to TRUE for those AP didn't replay CCX v2 IE, we still force it to be on +- if (pAd->StaCfg.CCXControl.field.Enable == 1) +- pAd->StaCfg.CCXEnable = TRUE; + + return TRUE; + } +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index a6e4362..f72f11a 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -37,45 +37,8 @@ + */ + #include "../rt_config.h" + +-#ifdef RT2860 +-#define AC0_DEF_TXOP 0 +-#define AC1_DEF_TXOP 0 +-#define AC2_DEF_TXOP 94 +-#define AC3_DEF_TXOP 47 + +-VOID AdhocTurnOnQos( +- IN PRTMP_ADAPTER pAd) +-{ +- // Turn on QOs if use HT rate. +- if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) +- { +- pAd->CommonCfg.APEdcaParm.bValid = TRUE; +- pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; +- pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; +- pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1; +- pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1; +- +- pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3; +- pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2; +- +- pAd->CommonCfg.APEdcaParm.Cwmax[0] = 10; +- pAd->CommonCfg.APEdcaParm.Cwmax[1] = 6; +- pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; +- +- pAd->CommonCfg.APEdcaParm.Txop[0] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[1] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[2] = AC2_DEF_TXOP; +- pAd->CommonCfg.APEdcaParm.Txop[3] = AC3_DEF_TXOP; +- } +- AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); +-} +-#endif /* RT2860 */ +-#ifdef RT2870 + #define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) // 2 sec +-#endif + + /* + ========================================================================== +@@ -160,7 +123,7 @@ VOID BeaconTimeout( + } + + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_BEACON_TIMEOUT, 0, NULL); +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + } + + /* +@@ -188,8 +151,8 @@ VOID ScanTimeout( + + if (MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL)) + { +- RT28XX_MLME_HANDLER(pAd); +- } ++ RTMP_MLME_HANDLER(pAd); ++} + else + { + // To prevent SyncMachine.CurrState is SCAN_LISTEN forever. +@@ -231,7 +194,7 @@ VOID MlmeScanReqAction( + // Increase the scan retry counters. + pAd->StaCfg.ScanCnt++; + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && + (IDLE_ON(pAd)) && + (pAd->StaCfg.bRadio == TRUE) && +@@ -239,30 +202,22 @@ VOID MlmeScanReqAction( + { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } +-#endif ++#endif // RTMP_MAC_PCI // + + // first check the parameter sanity + if (MlmeScanReqSanity(pAd, + Elem->Msg, + Elem->MsgLen, + &BssType, +- Ssid, ++ (PCHAR)Ssid, + &SsidLen, + &ScanType)) + { + + // Check for channel load and noise hist request + // Suspend MSDU only at scan request, not the last two mentioned +- if ((ScanType == SCAN_CISCO_NOISE) || (ScanType == SCAN_CISCO_CHANNEL_LOAD)) +- { +- if (pAd->StaCfg.CCXScanChannel != pAd->CommonCfg.Channel) +- RTMPSuspendMsduTransmission(pAd); // Suspend MSDU transmission here +- } +- else +- { + // Suspend MSDU transmission here + RTMPSuspendMsduTransmission(pAd); +- } + + // + // To prevent data lost. +@@ -304,11 +259,6 @@ VOID MlmeScanReqAction( + // start from the first channel + pAd->MlmeAux.Channel = FirstChannel(pAd); + +- // Change the scan channel when dealing with CCX beacon report +- if ((ScanType == SCAN_CISCO_PASSIVE) || (ScanType == SCAN_CISCO_ACTIVE) || +- (ScanType == SCAN_CISCO_CHANNEL_LOAD) || (ScanType == SCAN_CISCO_NOISE)) +- pAd->MlmeAux.Channel = pAd->StaCfg.CCXScanChannel; +- + // Let BBP register at 20MHz to do scan + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); +@@ -352,7 +302,7 @@ VOID MlmeJoinReqAction( + + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); + +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && + (IDLE_ON(pAd)) && + (pAd->StaCfg.bRadio == TRUE) && +@@ -360,7 +310,7 @@ VOID MlmeJoinReqAction( + { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } +-#endif ++#endif // RTMP_MAC_PCI // + + // reset all the timers + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); +@@ -374,6 +324,7 @@ VOID MlmeJoinReqAction( + // If AP's SSID is not hidden, it is OK for updating ssid to MlmeAux again. + if (pBss->Hidden == 0) + { ++ RTMPZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pBss->Ssid, pBss->SsidLen); + pAd->MlmeAux.SsidLen = pBss->SsidLen; + } +@@ -382,10 +333,14 @@ VOID MlmeJoinReqAction( + pAd->MlmeAux.Channel = pBss->Channel; + pAd->MlmeAux.CentralChannel = pBss->CentralChannel; + ++ + // Let BBP register at 20MHz to do scan + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); ++#ifdef RT2860 ++ pAd->CommonCfg.BBPCurrentBW = BW_20; ++#endif // RT2860 // + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); + + // switch channel and waiting for beacon timer +@@ -494,7 +449,7 @@ VOID MlmeStartReqAction( + TimeStamp.u.LowPart = 0; + TimeStamp.u.HighPart = 0; + +- if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, Ssid, &SsidLen)) ++ if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, (PCHAR)Ssid, &SsidLen)) + { + // reset all the timers + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); +@@ -541,6 +496,7 @@ VOID MlmeStartReqAction( + { + pAd->MlmeAux.HtCapabilityLen = 0; + pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; ++ NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); + } + // temporarily not support QOS in IBSS + NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); +@@ -601,6 +557,8 @@ VOID PeerBeaconAtScanAction( + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; + ++ ++ // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); + pFrame = (PFRAME_802_11) Elem->Msg; + // Init Variable IE structure + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +@@ -615,7 +573,7 @@ VOID PeerBeaconAtScanAction( + Elem->Channel, + Addr2, + Bssid, +- Ssid, ++ (PCHAR)Ssid, + &SsidLen, + &BssType, + &BeaconPeriod, +@@ -661,24 +619,7 @@ VOID PeerBeaconAtScanAction( + if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) + HtCapabilityLen = SIZE_HT_CAP_IE; + +- if ((pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) && (Channel == pAd->StaCfg.CCXScanChannel)) +- { +- Idx = BssTableSetEntry(pAd, &pAd->StaCfg.CCXBssTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen,ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- if (Idx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(pAd->StaCfg.CCXBssTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->StaCfg.CCXBssTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->StaCfg.CCXBssTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- if (pAd->StaCfg.CCXReqType == MSRN_TYPE_BEACON_REQ) +- AironetAddBeaconReport(pAd, Idx, Elem); +- } +- } +- else +- { +- Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, ++ Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (PCHAR)Ssid, SsidLen, BssType, BeaconPeriod, + &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, + &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, + &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +@@ -689,7 +630,7 @@ VOID PeerBeaconAtScanAction( + NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); + NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); + } +- } ++ + } + // sanity check fail, ignored + } +@@ -731,6 +672,7 @@ VOID PeerBeaconAtJoinAction( + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; + UCHAR CentralChannel; ++ BOOLEAN bAllowNrate = FALSE; + + // Init Variable IE structure + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +@@ -745,7 +687,7 @@ VOID PeerBeaconAtJoinAction( + Elem->Channel, + Addr2, + Bssid, +- Ssid, ++ (PCHAR)Ssid, + &SsidLen, + &BssType, + &BeaconPeriod, +@@ -818,8 +760,24 @@ VOID PeerBeaconAtJoinAction( + { + Idx = BssSsidTableSearch(&pAd->ScanTab, Bssid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Channel); + ++ if (Idx == BSS_NOT_FOUND) ++ { ++ CHAR Rssi = 0; ++ Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); ++ Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (CHAR *) Ssid, SsidLen, BssType, BeaconPeriod, ++ &Cf, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, ++ &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, ++ &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); + if (Idx != BSS_NOT_FOUND) + { ++ NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); ++ CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo; ++ } ++ } ++ else ++ { + // + // Multiple SSID case, used correct CapabilityInfo + // +@@ -847,13 +805,21 @@ VOID PeerBeaconAtJoinAction( + + NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16); + ++ ++ if (((pAd->StaCfg.WepStatus != Ndis802_11WEPEnabled) && (pAd->StaCfg.WepStatus != Ndis802_11Encryption2Enabled)) ++ || (pAd->CommonCfg.HT_DisallowTKIP == FALSE)) ++ { ++ bAllowNrate = TRUE; ++ } ++ + pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset; + pAd->MlmeAux.HtCapabilityLen = HtCapabilityLen; + ++ RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); + // filter out un-supported ht rates +- if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) ++ if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && ++ ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (bAllowNrate))) + { +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); + RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, SIZE_ADD_HT_INFO_IE); + + // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability +@@ -897,7 +863,9 @@ VOID PeerBeaconAtJoinAction( + pAd->MlmeAux.CentralChannel = pAd->MlmeAux.Channel; + + pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; ++ pAd->MlmeAux.NewExtChannelOffset = 0xff; + RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); ++ pAd->MlmeAux.HtCapabilityLen = 0; + RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE); + } + +@@ -930,6 +898,8 @@ VOID PeerBeaconAtJoinAction( + else //Used the default TX Power Percentage. + pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; + ++ InitChannelRelatedValue(pAd); ++ + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_SUCCESS; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +@@ -1116,8 +1086,6 @@ VOID PeerBeacon( + // Add the safeguard against the mismatch of adhoc wep status + if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus) + { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Not matched wep status %d %d\n", pAd->StaCfg.WepStatus, pAd->ScanTab.BssEntry[Bssidx].WepStatus)); +- DBGPRINT(RT_DEBUG_TRACE, ("bssid=%s\n", pAd->ScanTab.BssEntry[Bssidx].Bssid)); + return; + } + +@@ -1181,200 +1149,8 @@ VOID PeerBeacon( + pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; + } + +-#ifdef RT2860 +- // at least one 11b peer joined. downgrade the MaxTxRate to 11Mbps +- // after last 11b peer left for several seconds, we'll auto switch back to 11G rate +- // in MlmePeriodicExec() +-#endif + if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) + { +-#ifdef RT2860 +- BOOLEAN bRestart; +- BOOLEAN bnRestart; +- +- bRestart = FALSE; +- bnRestart = FALSE; +- +- do +- { +- if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.MaxTxRate > RATE_11)) +- { +- if (pAd->StaCfg.AdhocBOnlyJoined == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - 11b peer joined. down-grade to 11b TX rates \n")); +- bRestart = TRUE; +- NdisMoveMemory(pAd->StaActive.SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- pAd->StaActive.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, MAX_LEN_OF_SUPPORTED_RATES); +- pAd->StaActive.ExtRateLen = ExtRateLen; +- pAd->StaCfg.AdhocBOnlyJoined = TRUE; +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- AsicSetEdcaParm(pAd, NULL); +- } +- +- // this timestamp is for MlmePeriodicExec() to check if all 11B peers have left +- pAd->StaCfg.Last11bBeaconRxTime = Now; +- break; +- } +- +- // Update Ht Phy. +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && +- !pAd->StaCfg.AdhocBGJoined && +- !pAd->StaCfg.AdhocBOnlyJoined) +- AdhocTurnOnQos(pAd); +- +- // Handle rate switch issue when Adhoc mode +- if ((SupRateLen+ExtRateLen >= 8) && (HtCapability.MCSSet[0] == 0) && (HtCapability.MCSSet[1] == 0)) +- { +- if (pAd->StaCfg.AdhocBGJoined == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - 11g peer joined. down-grade to 11g TX rates \n")); +- bRestart = TRUE; +- NdisMoveMemory(pAd->StaActive.SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- pAd->StaActive.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, MAX_LEN_OF_SUPPORTED_RATES); +- pAd->StaActive.ExtRateLen = ExtRateLen; +- pAd->StaCfg.AdhocBGJoined = TRUE; +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- AsicSetEdcaParm(pAd, NULL); +- } +- +- // this timestamp is for MlmePeriodicExec() to check if all 11g peers have left +- pAd->StaCfg.Last11gBeaconRxTime = Now; +- break; +- } +- else if (!pAd->StaCfg.AdhocBGJoined && +- !pAd->StaCfg.AdhocBOnlyJoined && +- (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) && +- (HtCapability.HtCapInfo.ChannelWidth == BW_20)) +- { +- if (pAd->StaCfg.Adhoc20NJoined == FALSE) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- +- pAd->StaCfg.Adhoc20NJoined = TRUE; +- NdisMoveMemory(&pAd->MlmeAux.HtCapability, &HtCapability, SIZE_HT_CAP_IE); +- if (AddHtInfoLen != 0) +- NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, AddHtInfoLen); +- NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16); +- +- RTMPCheckHt(pAd, Elem->Wcid, &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo); +- COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +- pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; +- bRestart = TRUE; +- bnRestart = TRUE; +- } +- // this timestamp is for MlmePeriodicExec() to check if all 20MHz N peers have left +- pAd->StaCfg.Last20NBeaconRxTime = Now; +- } +- +- } +- else +- { +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); +- RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE); +- } +- }while (FALSE); +- +- // If peer Adhoc is legacy mode, I don't need to call MlmeUpdateHtTxRates no matter I support HT or not +- if ((bRestart == TRUE) && (bnRestart == FALSE)) +- { +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- } +- else if ((bRestart == TRUE) && (bnRestart == TRUE)) +- { +- MlmeUpdateTxRates(pAd, FALSE, BSS0); +- MlmeUpdateHtTxRates(pAd, BSS0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- } +- +- // At least another peer in this IBSS, declare MediaState as CONNECTED +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; +- AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- +- // 2003/03/12 - john +- // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that +- // "site survey" result should always include the current connected network. +- // +- Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); +- } +- +- // Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon. +- // To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station. +- if (ADHOC_ON(pAd) && (Elem->Wcid == RESERVED_WCID)) +- { +- UCHAR idx; +- MAC_TABLE_ENTRY *pEntry; +- +- // look up the existing table +- pEntry = MacTableLookup(pAd, Addr2); +- if (pEntry == NULL) +- { +- // Another adhoc joining, add to our MAC table. +- pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE); +- if (pEntry) +- { +- pEntry->Sst = SST_ASSOC; +- idx = pAd->StaCfg.DefaultKeyId; +- // After InsertEntry, Write to ASIC on-chip table. +- RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC %x:%x:%x:%x:%x:%x join in.Entry=%d\n", Addr2[0],Addr2[1],Addr2[2],Addr2[3],Addr2[4],Addr2[5], pEntry->Aid)); +- +- pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word; +- if (HtCapabilityLen <= 0) +- { +- pEntry->HTPhyMode.field.STBC = 0; +- pEntry->HTPhyMode.field.BW = 0; +- pEntry->HTPhyMode.field.ShortGI = 0; +- if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.Channel <= 14)) +- { +- pEntry->HTPhyMode.field.MODE = MODE_CCK; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- } +- MlmeUpdateTxRates(pAd, FALSE, 0); +- } +- else +- { +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MlmeUpdateHtTxRates(pAd, BSS0); +- } +- +- { +- union iwreq_data wrqu; +- wext_notify_event_assoc(pAd); +- +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- +- } +- } +- } +- } +-#endif /* RT2860 */ +-#ifdef RT2870 + UCHAR MaxSupportedRateIn500Kbps = 0; + UCHAR idx; + MAC_TABLE_ENTRY *pEntry; +@@ -1404,7 +1180,14 @@ VOID PeerBeacon( + // Another adhoc joining, add to our MAC table. + pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE); + +- if (StaAddMacTableEntry(pAd, pEntry, MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo) == FALSE) ++ if (StaAddMacTableEntry(pAd, ++ pEntry, ++ MaxSupportedRateIn500Kbps, ++ &HtCapability, ++ HtCapabilityLen, ++ &AddHtInfo, ++ AddHtInfoLen, ++ CapabilityInfo) == FALSE) + { + DBGPRINT(RT_DEBUG_TRACE, ("ADHOC - Add Entry failed.\n")); + return; +@@ -1414,7 +1197,7 @@ VOID PeerBeacon( + (Elem->Wcid == RESERVED_WCID)) + { + idx = pAd->StaCfg.DefaultKeyId; +- RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); ++ RTMP_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); + } + } + +@@ -1445,7 +1228,6 @@ VOID PeerBeacon( + } + DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); + } +-#endif /* RT2870 */ + } + + if (INFRA_ON(pAd)) +@@ -1534,28 +1316,32 @@ VOID PeerBeacon( + // 5. otherwise, put PHY back to sleep to save battery. + if (MessageToMe) + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { ++ // Restore to correct BBP R3 value ++ if (pAd->Antenna.field.RxPath > 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); ++ // Turn clk to 80Mhz. + } +-#endif ++#endif // RTMP_MAC_PCI // + if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && + pAd->CommonCfg.bAPSDAC_BE && pAd->CommonCfg.bAPSDAC_BK && pAd->CommonCfg.bAPSDAC_VI && pAd->CommonCfg.bAPSDAC_VO) + { + pAd->CommonCfg.bNeedSendTriggerFrame = TRUE; + } + else +- RT28XX_PS_POLL_ENQUEUE(pAd); ++ RTMP_PS_POLL_ENQUEUE(pAd); + } + else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM)) + { +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { ++ if (pAd->Antenna.field.RxPath > 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); + } +-#endif ++#endif // RTMP_MAC_PCI // + } + else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) || + (pAd->TxSwQueue[QID_AC_BE].Number != 0) || +@@ -1569,12 +1355,42 @@ VOID PeerBeacon( + { + // TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme + // can we cheat here (i.e. just check MGMT & AC_BE) for better performance? +-#ifdef RT2860 ++#ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) + { ++ if (pAd->Antenna.field.RxPath > 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); + } +-#endif ++#endif // RTMP_MAC_PCI // ++ } ++ else ++ { ++ if ((pAd->CommonCfg.bACMAPSDTr[QID_AC_VO]) || ++ (pAd->CommonCfg.bACMAPSDTr[QID_AC_VI]) || ++ (pAd->CommonCfg.bACMAPSDTr[QID_AC_BK]) || ++ (pAd->CommonCfg.bACMAPSDTr[QID_AC_BE])) ++ { ++ /* ++ WMM Spec v1.0 3.6.2.4, ++ The WMM STA shall remain awake until it receives a ++ QoS Data or Null frame addressed to it, with the ++ EOSP subfield in QoS Control field set to 1. ++ ++ So we can not sleep here or we will suffer a case: ++ ++ PS Management Frame --> ++ Trigger frame --> ++ Beacon (TIM=0) (Beacon is closer to Trig frame) --> ++ Station goes to sleep --> ++ AP delivery queued UAPSD packets --> ++ Station can NOT receive the reply ++ ++ Maybe we need a timeout timer to avoid that we do ++ NOT receive the EOSP frame. ++ ++ We can not use More Data to check if SP is ended ++ due to MaxSPLength. ++ */ + } + else + { +@@ -1589,14 +1405,10 @@ VOID PeerBeacon( + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + { +-#ifdef RT2860 + // Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); + pAd->ThisTbttNumToNextWakeUp = TbttNumToNextWakeUp; +-#endif +-#ifdef RT2870 +- AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); +-#endif ++ AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp); ++ } + } + } + } +@@ -1825,6 +1637,8 @@ VOID InvalidStateWhenStart( + VOID EnqueuePsPoll( + IN PRTMP_ADAPTER pAd) + { ++ ++ + if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP) + pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; + MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index 8c34e39..d45b9ba 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -37,1818 +37,12 @@ + */ + #include "../rt_config.h" + +-#define WPARSNIE 0xdd +-#define WPA2RSNIE 0x30 +- +-//extern UCHAR BIT8[]; +-UCHAR CipherWpaPskTkip[] = { +- 0xDD, 0x16, // RSN IE +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x02 // authentication +- }; +-UCHAR CipherWpaPskTkipLen = (sizeof(CipherWpaPskTkip) / sizeof(UCHAR)); +- +-UCHAR CipherWpaPskAes[] = { +- 0xDD, 0x16, // RSN IE +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x04, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x04, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x02 // authentication +- }; +-UCHAR CipherWpaPskAesLen = (sizeof(CipherWpaPskAes) / sizeof(UCHAR)); +- +-UCHAR CipherSuiteCiscoCCKM[] = { +- 0xDD, 0x16, // RSN IE +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x40, 0x96, 0x01, // Multicast +- 0x01, 0x00, // Number of uicast +- 0x00, 0x40, 0x96, 0x01, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x40, 0x96, 0x00 // Authentication +- }; +-UCHAR CipherSuiteCiscoCCKMLen = (sizeof(CipherSuiteCiscoCCKM) / sizeof(UCHAR)); +- +-UCHAR CipherSuiteCiscoCCKM24[] = { +- 0xDD, 0x18, // RSN IE +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x40, 0x96, 0x01, // Multicast +- 0x01, 0x00, // Number of uicast +- 0x00, 0x40, 0x96, 0x01, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x40, 0x96, 0x00, +- 0x28, 0x00// Authentication +- }; +- +-UCHAR CipherSuiteCiscoCCKM24Len = (sizeof(CipherSuiteCiscoCCKM24) / sizeof(UCHAR)); +- +-UCHAR CipherSuiteCCXTkip[] = { +- 0xDD, 0x16, // RSN IE +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x01 // authentication +- }; +-UCHAR CipherSuiteCCXTkipLen = (sizeof(CipherSuiteCCXTkip) / sizeof(UCHAR)); +- +-UCHAR CCX_LLC_HDR[] = {0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02}; +-UCHAR LLC_NORMAL[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; +- +-UCHAR EAPOL_FRAME[] = {0x88, 0x8E}; +- +-BOOLEAN CheckRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- OUT UCHAR *Offset); +- + void inc_byte_array(UCHAR *counter, int len); + + /* + ======================================================================== + + Routine Description: +- Classify WPA EAP message type +- +- Arguments: +- EAPType Value of EAP message type +- MsgType Internal Message definition for MLME state machine +- +- Return Value: +- TRUE Found appropriate message type +- FALSE No appropriate message type +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- All these constants are defined in wpa.h +- For supplicant, there is only EAPOL Key message avaliable +- +- ======================================================================== +-*/ +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType) +-{ +- switch (EAPType) +- { +- case EAPPacket: +- *MsgType = MT2_EAPPacket; +- break; +- case EAPOLStart: +- *MsgType = MT2_EAPOLStart; +- break; +- case EAPOLLogoff: +- *MsgType = MT2_EAPOLLogoff; +- break; +- case EAPOLKey: +- *MsgType = MT2_EAPOLKey; +- break; +- case EAPOLASFAlert: +- *MsgType = MT2_EAPOLASFAlert; +- break; +- default: +- return FALSE; +- } +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- association state machine init, including state transition and timer init +- Parameters: +- S - pointer to the association state machine +- ========================================================================== +- */ +-VOID WpaPskStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(S, Trans, MAX_WPA_PSK_STATE, MAX_WPA_PSK_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PSK_IDLE, WPA_MACHINE_BASE); +- StateMachineSetAction(S, WPA_PSK_IDLE, MT2_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction); +-} +- +-/* +- ========================================================================== +- Description: +- This is state machine function. +- When receiving EAPOL packets which is for 802.1x key management. +- Use both in WPA, and WPAPSK case. +- In this function, further dispatch to different functions according to the received packet. 3 categories are : +- 1. normal 4-way pairwisekey and 2-way groupkey handshake +- 2. MIC error (Countermeasures attack) report packet from STA. +- 3. Request for pairwise/group key update from STA +- Return: +- ========================================================================== +-*/ +-VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- INT MsgType = EAPOL_MSG_INVALID; +- PKEY_DESCRIPTER pKeyDesc; +- PHEADER_802_11 pHeader; //red +- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; +- UCHAR EapolVr; +- KEY_INFO peerKeyInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("-----> WpaEAPOLKeyAction\n")); +- +- // Get 802.11 header first +- pHeader = (PHEADER_802_11) Elem->Msg; +- +- // Get EAPoL-Key Descriptor +- pKeyDesc = (PKEY_DESCRIPTER) &Elem->Msg[(LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H)]; +- +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pKeyDesc->KeyInfo, sizeof(KEY_INFO)); +- +- *((USHORT *)&peerKeyInfo) = cpu2le16(*((USHORT *)&peerKeyInfo)); +- +- +- // 1. Check EAPOL frame version and type +- EapolVr = (UCHAR) Elem->Msg[LENGTH_802_11+LENGTH_802_1_H]; +- +- if (((EapolVr != EAPOL_VER) && (EapolVr != EAPOL_VER2)) || ((pKeyDesc->Type != WPA1_KEY_DESC) && (pKeyDesc->Type != WPA2_KEY_DESC))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter does not match with WPA rule\n")); +- return; +- } +- +- // First validate replay counter, only accept message with larger replay counter +- // Let equal pass, some AP start with all zero replay counter +- NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); +- +- if((RTMPCompareMemory(pKeyDesc->ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) && +- (RTMPCompareMemory(pKeyDesc->ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) +- { +- DBGPRINT(RT_DEBUG_ERROR, (" ReplayCounter not match \n")); +- return; +- } +- +- // Process WPA2PSK frame +- if(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- { +- if((peerKeyInfo.KeyType == PAIRWISEKEY) && +- (peerKeyInfo.EKD_DL == 0) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 0) && +- (peerKeyInfo.Secure == 0) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_PAIR_MSG_1; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Pairwise Message 1\n")); +- } else if((peerKeyInfo.KeyType == PAIRWISEKEY) && +- (peerKeyInfo.EKD_DL == 1) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Secure == 1) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_PAIR_MSG_3; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Pairwise Message 3\n")); +- } else if((peerKeyInfo.KeyType == GROUPKEY) && +- (peerKeyInfo.EKD_DL == 1) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Secure == 1) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_GROUP_MSG_1; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Group Message 1\n")); +- } +- +- // We will assume link is up (assoc suceess and port not secured). +- // All state has to be able to process message from previous state +- switch(pAd->StaCfg.WpaState) +- { +- case SS_START: +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- Wpa2PairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- } +- break; +- +- case SS_WAIT_MSG_3: +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- Wpa2PairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- } +- else if(MsgType == EAPOL_PAIR_MSG_3) +- { +- Wpa2PairMsg3Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_GROUP; +- } +- break; +- +- case SS_WAIT_GROUP: // When doing group key exchange +- case SS_FINISH: // This happened when update group key +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- // Reset port secured variable +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- Wpa2PairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- } +- else if(MsgType == EAPOL_PAIR_MSG_3) +- { +- // Reset port secured variable +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- Wpa2PairMsg3Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_GROUP; +- } +- else if(MsgType == EAPOL_GROUP_MSG_1) +- { +- WpaGroupMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_FINISH; +- } +- break; +- +- default: +- break; +- } +- } +- // Process WPAPSK Frame +- // Classify message Type, either pairwise message 1, 3, or group message 1 for supplicant +- else if(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) +- { +- if((peerKeyInfo.KeyType == PAIRWISEKEY) && +- (peerKeyInfo.KeyIndex == 0) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 0) && +- (peerKeyInfo.Secure == 0) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_PAIR_MSG_1; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Pairwise Message 1\n")); +- } +- else if((peerKeyInfo.KeyType == PAIRWISEKEY) && +- (peerKeyInfo.KeyIndex == 0) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Secure == 0) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_PAIR_MSG_3; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Pairwise Message 3\n")); +- } +- else if((peerKeyInfo.KeyType == GROUPKEY) && +- (peerKeyInfo.KeyIndex != 0) && +- (peerKeyInfo.KeyAck == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Secure == 1) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.Request == 0)) +- { +- MsgType = EAPOL_GROUP_MSG_1; +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL Key Group Message 1\n")); +- } +- +- // We will assume link is up (assoc suceess and port not secured). +- // All state has to be able to process message from previous state +- switch(pAd->StaCfg.WpaState) +- { +- case SS_START: +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- WpaPairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- } +- break; +- +- case SS_WAIT_MSG_3: +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- WpaPairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- } +- else if(MsgType == EAPOL_PAIR_MSG_3) +- { +- WpaPairMsg3Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_GROUP; +- } +- break; +- +- case SS_WAIT_GROUP: // When doing group key exchange +- case SS_FINISH: // This happened when update group key +- if(MsgType == EAPOL_PAIR_MSG_1) +- { +- WpaPairMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_MSG_3; +- // Reset port secured variable +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- } +- else if(MsgType == EAPOL_PAIR_MSG_3) +- { +- WpaPairMsg3Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_WAIT_GROUP; +- // Reset port secured variable +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- } +- else if(MsgType == EAPOL_GROUP_MSG_1) +- { +- WpaGroupMsg1Action(pAd, Elem); +- pAd->StaCfg.WpaState = SS_FINISH; +- } +- break; +- +- default: +- break; +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<----- WpaEAPOLKeyAction\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Pairwise key 4-way handshaking +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID WpaPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PHEADER_802_11 pHeader; +- UCHAR *mpool, *PTK, *digest; +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- PEAPOL_PACKET pMsg1; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaPairMsg1Action ----->\n")); +- +- // allocate memory pool +- os_alloc_mem(pAd, (PUCHAR *)&mpool, 256); +- +- if (mpool == NULL) +- return; +- +- // PTK Len = 80. +- PTK = (UCHAR *) ROUND_UP(mpool, 4); +- // digest Len = 80. +- digest = (UCHAR *) ROUND_UP(PTK + 80, 4); +- +- pHeader = (PHEADER_802_11) Elem->Msg; +- +- // Process message 1 from authenticator +- pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- // 1. Save Replay counter, it will use to verify message 3 and construct message 2 +- NdisMoveMemory(pAd->StaCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // 2. Save ANonce +- NdisMoveMemory(pAd->StaCfg.ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); +- +- // Generate random SNonce +- GenRandom(pAd, pAd->CurrentAddress, pAd->StaCfg.SNonce); +- +- // Calc PTK(ANonce, SNonce) +- WpaCountPTK(pAd, +- pAd->StaCfg.PMK, +- pAd->StaCfg.ANonce, +- pAd->CommonCfg.Bssid, +- pAd->StaCfg.SNonce, +- pAd->CurrentAddress, +- PTK, +- LEN_PTK); +- +- // Save key to PTK entry +- NdisMoveMemory(pAd->StaCfg.PTK, PTK, LEN_PTK); +- +- // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero Message 2 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- // +- // Message 2 as EAPOL-Key(0,1,0,0,0,P,0,SNonce,MIC,RSN IE) +- // +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- // 1. Key descriptor version and appropriate RSN IE +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 2; +- } +- else // TKIP +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 1; +- } +- +- // fill in Data Material and its length +- Packet.KeyDesc.KeyData[0] = IE_WPA; +- Packet.KeyDesc.KeyData[1] = pAd->StaCfg.RSNIE_Len; +- Packet.KeyDesc.KeyDataLen[1] = pAd->StaCfg.RSNIE_Len + 2; +- NdisMoveMemory(&Packet.KeyDesc.KeyData[2], pAd->StaCfg.RSN_IE, pAd->StaCfg.RSNIE_Len); +- +- // Update packet length after decide Key data payload +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + Packet.KeyDesc.KeyDataLen[1]; +- +- // Update Key length +- Packet.KeyDesc.KeyLength[0] = pMsg1->KeyDesc.KeyLength[0]; +- Packet.KeyDesc.KeyLength[1] = pMsg1->KeyDesc.KeyLength[1]; +- // 2. Key Type PeerKey +- Packet.KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; +- +- // 3. KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- +- //Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- +- // 4. Fill SNonce +- NdisMoveMemory(Packet.KeyDesc.KeyNonce, pAd->StaCfg.SNonce, LEN_KEY_DESC_NONCE); +- +- // 5. Key Replay Count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Send EAPOL(0, 1, 0, 0, 0, P, 0, SNonce, MIC, RSN_IE) +- // Out buffer for transmitting message 2 +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { +- os_free_mem(pAd, mpool); +- return; +- } +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // 6. Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { // AES +- +- HMAC_SHA1(pOutBuffer, FrameLen, PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { // TKIP +- hmac_md5(PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- //hex_dump("MIC", Mic, LEN_KEY_DESC_MIC); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- +- // 5. Copy frame to Tx ring and send Msg 2 to authenticator +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, TRUE); +- +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); +- os_free_mem(pAd, (PUCHAR)mpool); +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaPairMsg1Action <-----\n")); +-} +- +-VOID Wpa2PairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PHEADER_802_11 pHeader; +- UCHAR *mpool, *PTK, *digest; +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- PEAPOL_PACKET pMsg1; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Wpa2PairMsg1Action ----->\n")); +- +- // allocate memory pool +- os_alloc_mem(pAd, (PUCHAR *)&mpool, 256); +- +- if (mpool == NULL) +- return; +- +- // PTK Len = 80. +- PTK = (UCHAR *) ROUND_UP(mpool, 4); +- // digest Len = 80. +- digest = (UCHAR *) ROUND_UP(PTK + 80, 4); +- +- pHeader = (PHEADER_802_11) Elem->Msg; +- +- // Process message 1 from authenticator +- pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- // 1. Save Replay counter, it will use to verify message 3 and construct message 2 +- NdisMoveMemory(pAd->StaCfg.ReplayCounter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // 2. Save ANonce +- NdisMoveMemory(pAd->StaCfg.ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); +- +- // Generate random SNonce +- GenRandom(pAd, pAd->CurrentAddress, pAd->StaCfg.SNonce); +- +- if(pMsg1->KeyDesc.KeyDataLen[1] > 0 ) +- { +- // cached PMKID +- } +- +- // Calc PTK(ANonce, SNonce) +- WpaCountPTK(pAd, +- pAd->StaCfg.PMK, +- pAd->StaCfg.ANonce, +- pAd->CommonCfg.Bssid, +- pAd->StaCfg.SNonce, +- pAd->CurrentAddress, +- PTK, +- LEN_PTK); +- +- // Save key to PTK entry +- NdisMoveMemory(pAd->StaCfg.PTK, PTK, LEN_PTK); +- +- // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero message 2 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- // +- // Message 2 as EAPOL-Key(0,1,0,0,0,P,0,SNonce,MIC,RSN IE) +- // +- Packet.KeyDesc.Type = WPA2_KEY_DESC; +- +- // 1. Key descriptor version and appropriate RSN IE +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 2; +- } +- else // TKIP +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 1; +- } +- +- // fill in Data Material and its length +- Packet.KeyDesc.KeyData[0] = IE_WPA2; +- Packet.KeyDesc.KeyData[1] = pAd->StaCfg.RSNIE_Len; +- Packet.KeyDesc.KeyDataLen[1] = pAd->StaCfg.RSNIE_Len + 2; +- NdisMoveMemory(&Packet.KeyDesc.KeyData[2], pAd->StaCfg.RSN_IE, pAd->StaCfg.RSNIE_Len); +- +- // Update packet length after decide Key data payload +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + Packet.KeyDesc.KeyDataLen[1]; +- +- // 2. Key Type PeerKey +- Packet.KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; +- +- // 3. KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- +- // Update Key Length +- Packet.KeyDesc.KeyLength[0] = 0; +- Packet.KeyDesc.KeyLength[1] = pMsg1->KeyDesc.KeyLength[1]; +- +- // 4. Fill SNonce +- NdisMoveMemory(Packet.KeyDesc.KeyNonce, pAd->StaCfg.SNonce, LEN_KEY_DESC_NONCE); +- +- // 5. Key Replay Count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- // Send EAPOL-Key(0,1,0,0,0,P,0,SNonce,MIC,RSN IE) +- // Out buffer for transmitting message 2 +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { +- os_free_mem(pAd, mpool); +- return; +- } +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // 6. Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- HMAC_SHA1(pOutBuffer, FrameLen, PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- hmac_md5(PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- +- // Make Transmitting frame +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- +- // 5. Copy frame to Tx ring +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, TRUE); +- +- MlmeFreeMemory(pAd, pOutBuffer); +- os_free_mem(pAd, mpool); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Wpa2PairMsg1Action <-----\n")); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Pairwise key 4-way handshaking +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID WpaPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- PHEADER_802_11 pHeader; +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- PEAPOL_PACKET pMsg3; +- UCHAR Mic[16], OldMic[16]; +- MAC_TABLE_ENTRY *pEntry = NULL; +- UCHAR skip_offset; +- KEY_INFO peerKeyInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaPairMsg3Action ----->\n")); +- +- // Record 802.11 header & the received EAPOL packet Msg3 +- pHeader = (PHEADER_802_11) Elem->Msg; +- pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pMsg3->KeyDesc.KeyInfo, sizeof(KEY_INFO)); +- +- *((USHORT*)&peerKeyInfo) = cpu2le16(*((USHORT*)&peerKeyInfo)); +- +- +- // 1. Verify cipher type match +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled && (peerKeyInfo.KeyDescVer != 2)) +- { +- return; +- } +- else if(pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled && (peerKeyInfo.KeyDescVer != 1)) +- { +- return; +- } +- +- // Verify RSN IE +- //if (!RTMPEqualMemory(pMsg3->KeyDesc.KeyData, pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len)) +- if (!CheckRSNIE(pAd, pMsg3->KeyDesc.KeyData, pMsg3->KeyDesc.KeyDataLen[1], &skip_offset)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RSN_IE Different in Msg 3 of WPA1 4-way handshake!! \n")); +- hex_dump("The original RSN_IE", pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len); +- hex_dump("The received RSN_IE", pMsg3->KeyDesc.KeyData, pMsg3->KeyDesc.KeyDataLen[1]); +- return; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("RSN_IE VALID in Msg 3 of WPA1 4-way handshake!! \n")); +- +- +- // 2. Check MIC value +- // Save the MIC and replace with zero +- NdisMoveMemory(OldMic, pMsg3->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- NdisZeroMemory(pMsg3->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- UCHAR digest[80]; +- +- HMAC_SHA1((PUCHAR) pMsg3, pMsg3->Body_Len[1] + 4, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else // TKIP +- { +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, (PUCHAR) pMsg3, pMsg3->Body_Len[1] + 4, Mic); +- } +- +- if(!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC)) +- { +- DBGPRINT(RT_DEBUG_ERROR, (" MIC Different in msg 3 of 4-way handshake!!!!!!!!!! \n")); +- return; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, (" MIC VALID in msg 3 of 4-way handshake!!!!!!!!!! \n")); +- +- // 3. Check Replay Counter, it has to be larger than last one. No need to be exact one larger +- if(RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) +- return; +- +- // Update new replay counter +- NdisMoveMemory(pAd->StaCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // 4. Double check ANonce +- if(!NdisEqualMemory(pAd->StaCfg.ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) +- return; +- +- // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero Message 4 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field +- +- // +- // Message 4 as EAPOL-Key(0,1,0,0,0,P,0,0,MIC,0) +- // +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- +- // Key descriptor version and appropriate RSN IE +- Packet.KeyDesc.KeyInfo.KeyDescVer = peerKeyInfo.KeyDescVer; +- +- // Update Key Length +- Packet.KeyDesc.KeyLength[0] = pMsg3->KeyDesc.KeyLength[0]; +- Packet.KeyDesc.KeyLength[1] = pMsg3->KeyDesc.KeyLength[1]; +- +- // Key Type PeerKey +- Packet.KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; +- +- // KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- +- // In Msg3, KeyInfo.secure =0 if Group Key HS to come. 1 if no group key HS +- // Station sends Msg4 KeyInfo.secure should be the same as that in Msg.3 +- Packet.KeyDesc.KeyInfo.Secure= peerKeyInfo.Secure; +- +- // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- // Key Replay count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Out buffer for transmitting message 4 +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- return; +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- UCHAR digest[80]; +- +- HMAC_SHA1(pOutBuffer, FrameLen, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- // Update PTK +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pEntry); +- +- // Make transmitting frame +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- +- // Copy frame to Tx ring and Send Message 4 to authenticator +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, TRUE); +- +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaPairMsg3Action <-----\n")); +-} +- +-VOID Wpa2PairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- PHEADER_802_11 pHeader; +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- PEAPOL_PACKET pMsg3; +- UCHAR Mic[16], OldMic[16]; +- UCHAR *mpool, *KEYDATA, *digest; +- UCHAR Key[32]; +- MAC_TABLE_ENTRY *pEntry = NULL; +- KEY_INFO peerKeyInfo; +- +- // allocate memory +- os_alloc_mem(pAd, (PUCHAR *)&mpool, 1024); +- +- if(mpool == NULL) +- return; +- +- // KEYDATA Len = 512. +- KEYDATA = (UCHAR *) ROUND_UP(mpool, 4); +- // digest Len = 80. +- digest = (UCHAR *) ROUND_UP(KEYDATA + 512, 4); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Wpa2PairMsg3Action ----->\n")); +- +- pHeader = (PHEADER_802_11) Elem->Msg; +- +- // Process message 3 frame. +- pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pMsg3->KeyDesc.KeyInfo, sizeof(KEY_INFO)); +- +- *((USHORT*)&peerKeyInfo) = cpu2le16(*((USHORT*)&peerKeyInfo)); +- +- // 1. Verify cipher type match +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled && (peerKeyInfo.KeyDescVer!= 2)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- else if(pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled && (peerKeyInfo.KeyDescVer != 1)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // 2. Check MIC value +- // Save the MIC and replace with zero +- NdisMoveMemory(OldMic, pMsg3->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- NdisZeroMemory(pMsg3->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- HMAC_SHA1((PUCHAR) pMsg3, pMsg3->Body_Len[1] + 4, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, (PUCHAR) pMsg3, pMsg3->Body_Len[1] + 4, Mic); +- } +- +- if(!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC)) +- { +- DBGPRINT(RT_DEBUG_ERROR, (" MIC Different in msg 3 of 4-way handshake!!!!!!!!!! \n")); +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, (" MIC VALID in msg 3 of 4-way handshake!!!!!!!!!! \n")); +- +- // 3. Check Replay Counter, it has to be larger than last one. No need to be exact one larger +- if(RTMPCompareMemory(pMsg3->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Update new replay counter +- NdisMoveMemory(pAd->StaCfg.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // 4. Double check ANonce +- if(!NdisEqualMemory(pAd->StaCfg.ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Obtain GTK +- // 5. Decrypt GTK from Key Data +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("EKD = %d\n", peerKeyInfo.EKD_DL)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // Decrypt AES GTK +- AES_GTK_KEY_UNWRAP(&pAd->StaCfg.PTK[16], KEYDATA, pMsg3->KeyDesc.KeyDataLen[1],pMsg3->KeyDesc.KeyData); +- } +- else // TKIP +- { +- INT i; +- // Decrypt TKIP GTK +- // Construct 32 bytes RC4 Key +- NdisMoveMemory(Key, pMsg3->KeyDesc.KeyIv, 16); +- NdisMoveMemory(&Key[16], &pAd->StaCfg.PTK[16], 16); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, 32); +- //discard first 256 bytes +- for(i = 0; i < 256; i++) +- ARCFOUR_BYTE(&pAd->PrivateInfo.WEPCONTEXT); +- // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, KEYDATA, pMsg3->KeyDesc.KeyData, pMsg3->KeyDesc.KeyDataLen[1]); +- } +- +- if (!ParseKeyData(pAd, KEYDATA, pMsg3->KeyDesc.KeyDataLen[1], 1)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Update GTK to ASIC +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- NULL); +- +- // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero message 4 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field +- +- // +- // Message 4 as EAPOL-Key(0,1,0,0,0,P,0,0,MIC,0) +- // +- Packet.KeyDesc.Type = WPA2_KEY_DESC; +- +- // Key descriptor version and appropriate RSN IE +- Packet.KeyDesc.KeyInfo.KeyDescVer = peerKeyInfo.KeyDescVer; +- +- // Update Key Length +- Packet.KeyDesc.KeyLength[0] = pMsg3->KeyDesc.KeyLength[0]; +- Packet.KeyDesc.KeyLength[1] = pMsg3->KeyDesc.KeyLength[1]; +- +- // Key Type PeerKey +- Packet.KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; +- +- // KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- Packet.KeyDesc.KeyInfo.Secure = 1; +- +- // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- // Key Replay count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Out buffer for transmitting message 4 +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- HMAC_SHA1(pOutBuffer, FrameLen, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- // Update PTK +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(&pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(&pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(&pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pEntry); +- +- // Make Transmitting frame +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- +- // Copy frame to Tx ring and Send Message 4 to authenticator +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, TRUE); +- +- // set 802.1x port control +- STA_PORT_SECURED(pAd); +- +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); +- os_free_mem(pAd, (PUCHAR)mpool); +- +- +- // send wireless event - for set key done WPA2 +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, BSS0, 0); +- +- DBGPRINT(RT_DEBUG_ERROR, ("Wpa2PairMsg3Action <-----\n")); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Group key 2-way handshaking +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID WpaGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- PEAPOL_PACKET pGroup; +- UCHAR *mpool, *digest, *KEYDATA; +- UCHAR Mic[16], OldMic[16]; +- UCHAR GTK[32], Key[32]; +- KEY_INFO peerKeyInfo; +- +- // allocate memory +- os_alloc_mem(pAd, (PUCHAR *)&mpool, 1024); +- +- if(mpool == NULL) +- return; +- +- // digest Len = 80. +- digest = (UCHAR *) ROUND_UP(mpool, 4); +- // KEYDATA Len = 512. +- KEYDATA = (UCHAR *) ROUND_UP(digest + 80, 4); +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaGroupMsg1Action ----->\n")); +- +- // Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) +- pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pGroup->KeyDesc.KeyInfo, sizeof(KEY_INFO)); +- +- *((USHORT*)&peerKeyInfo) = cpu2le16(*((USHORT*)&peerKeyInfo)); +- +- // 0. Check cipher type match +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled && (peerKeyInfo.KeyDescVer != 2)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- else if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled && (peerKeyInfo.KeyDescVer != 1)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // 1. Verify Replay counter +- // Check Replay Counter, it has to be larger than last one. No need to be exact one larger +- if(RTMPCompareMemory(pGroup->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Update new replay counter +- NdisMoveMemory(pAd->StaCfg.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // 2. Verify MIC is valid +- // Save the MIC and replace with zero +- NdisMoveMemory(OldMic, pGroup->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- NdisZeroMemory(pGroup->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { // AES +- HMAC_SHA1((PUCHAR) pGroup, pGroup->Body_Len[1] + 4, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { // TKIP +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, (PUCHAR) pGroup, pGroup->Body_Len[1] + 4, Mic); +- } +- +- if(!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC)) +- { +- DBGPRINT(RT_DEBUG_ERROR, (" MIC Different in group msg 1 of 2-way handshake!!!!!!!!!! \n")); +- MlmeFreeMemory(pAd, (PUCHAR)mpool); +- return; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, (" MIC VALID in group msg 1 of 2-way handshake!!!!!!!!!! \n")); +- +- +- // 3. Decrypt GTK from Key Data +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // Decrypt AES GTK +- AES_GTK_KEY_UNWRAP(&pAd->StaCfg.PTK[16], KEYDATA, pGroup->KeyDesc.KeyDataLen[1], pGroup->KeyDesc.KeyData); +- } +- else // TKIP +- { +- INT i; +- +- // Decrypt TKIP GTK +- // Construct 32 bytes RC4 Key +- NdisMoveMemory(Key, pGroup->KeyDesc.KeyIv, 16); +- NdisMoveMemory(&Key[16], &pAd->StaCfg.PTK[16], 16); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, 32); +- //discard first 256 bytes +- for(i = 0; i < 256; i++) +- ARCFOUR_BYTE(&pAd->PrivateInfo.WEPCONTEXT); +- // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, KEYDATA, pGroup->KeyDesc.KeyData, pGroup->KeyDesc.KeyDataLen[1]); +- } +- +- // Process decrypted key data material +- // Parse keyData to handle KDE format for WPA2PSK +- if (peerKeyInfo.EKD_DL) +- { +- if (!ParseKeyData(pAd, KEYDATA, pGroup->KeyDesc.KeyDataLen[1], 0)) +- { +- os_free_mem(pAd, (PUCHAR)mpool); +- return; +- } +- } +- else // WPAPSK +- { +- // set key material, TxMic and RxMic for WPAPSK +- NdisMoveMemory(GTK, KEYDATA, 32); +- NdisMoveMemory(pAd->StaCfg.GTK, GTK, 32); +- pAd->StaCfg.DefaultKeyId = peerKeyInfo.KeyIndex; +- +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, GTK, LEN_TKIP_EK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, >K[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, >K[24], LEN_TKIP_TXMICK); +- +- // Update Shared Key CipherAlg +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128; +- +- //hex_dump("Group Key :", pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, LEN_TKIP_EK); +- } +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- NULL); +- +- // set 802.1x port control +- STA_PORT_SECURED(pAd); +- +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- +- // init header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero Group message 1 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; // No data field +- +- // +- // Group Message 2 as EAPOL-Key(1,0,0,0,G,0,0,MIC,0) +- // +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- { +- Packet.KeyDesc.Type = WPA2_KEY_DESC; +- } +- else +- { +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- } +- +- // Key descriptor version and appropriate RSN IE +- Packet.KeyDesc.KeyInfo.KeyDescVer = peerKeyInfo.KeyDescVer; +- +- // Update Key Length +- Packet.KeyDesc.KeyLength[0] = pGroup->KeyDesc.KeyLength[0]; +- Packet.KeyDesc.KeyLength[1] = pGroup->KeyDesc.KeyLength[1]; +- +- // Key Index as G-Msg 1 +- if(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) +- Packet.KeyDesc.KeyInfo.KeyIndex = peerKeyInfo.KeyIndex; +- +- // Key Type Group key +- Packet.KeyDesc.KeyInfo.KeyType = GROUPKEY; +- +- // KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- +- // Secure bit +- Packet.KeyDesc.KeyInfo.Secure = 1; +- +- // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- // Key Replay count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Out buffer for transmitting group message 2 +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { +- MlmeFreeMemory(pAd, (PUCHAR)mpool); +- return; +- } +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- HMAC_SHA1(pOutBuffer, FrameLen, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- +- // 5. Copy frame to Tx ring and prepare for encryption +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, FALSE); +- +- // 6 Free allocated memory +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); +- os_free_mem(pAd, (PUCHAR)mpool); +- +- // send wireless event - for set key done WPA2 +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaGroupMsg1Action <-----\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Init WPA MAC header +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID WpaMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR wep, +- IN PUCHAR pAddr1) +-{ +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); +- pHdr80211->FC.Type = BTYPE_DATA; +- pHdr80211->FC.ToDs = 1; +- if (wep == 1) +- pHdr80211->FC.Wep = 1; +- +- // Addr1: BSSID, Addr2: SA, Addr3: DA +- COPY_MAC_ADDR(pHdr80211->Addr1, pAddr1); +- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHdr80211->Addr3, pAd->CommonCfg.Bssid); +- pHdr80211->Sequence = pAd->Sequence; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware encryption before really +- sent out to air. +- +- Arguments: +- pAd Pointer to our adapter +- PNDIS_PACKET Pointer to outgoing Ndis frame +- NumberOfFrag Number of fragment required +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN BOOLEAN is4wayFrame) +- +-{ +- NDIS_STATUS Status; +- PNDIS_PACKET pPacket; +- UCHAR Index; +- +- do +- { +- // 1. build a NDIS packet and call RTMPSendPacket(); +- // be careful about how/when to release this internal allocated NDIS PACKET buffer +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, pData, DataLen); +- if (Status != NDIS_STATUS_SUCCESS) +- break; +- +- if (is4wayFrame) +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 1); +- else +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 0); +- +- // 2. send out the packet +- Status = STASendPacket(pAd, pPacket); +- if(Status == NDIS_STATUS_SUCCESS) +- { +- // Dequeue one frame from TxSwQueue0..3 queue and process it +- // There are three place calling dequeue for TX ring. +- // 1. Here, right after queueing the frame. +- // 2. At the end of TxRingTxDone service routine. +- // 3. Upon NDIS call RTMPSendPackets +- if((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) +- { +- for(Index = 0; Index < 5; Index ++) +- if(pAd->TxSwQueue[Index].Number > 0) +- RTMPDeQueuePacket(pAd, FALSE, Index, MAX_TX_PROCESS); +- } +- } +- } while(FALSE); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Check Sanity RSN IE form AP +- +- Arguments: +- +- Return Value: +- +- +- ======================================================================== +-*/ +-BOOLEAN CheckRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- OUT UCHAR *Offset) +-{ +- PUCHAR pVIE; +- UCHAR len; +- PEID_STRUCT pEid; +- BOOLEAN result = FALSE; +- +- pVIE = pData; +- len = DataLen; +- *Offset = 0; +- +- while (len > sizeof(RSNIE2)) +- { +- pEid = (PEID_STRUCT) pVIE; +- // WPA RSN IE +- if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) && +- (NdisEqualMemory(pVIE, pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len)) && +- (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == (pEid->Len + 2))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CheckRSNIE ==> WPA/WPAPSK RSN IE matched in Msg 3, Length(%d) \n", (pEid->Len + 2))); +- result = TRUE; +- } +- +- *Offset += (pEid->Len + 2); +- } +- // WPA2 RSN IE +- else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2 || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) && +- (NdisEqualMemory(pVIE, pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len)) && +- (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == (pEid->Len + 2))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CheckRSNIE ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", (pEid->Len + 2))); +- result = TRUE; +- } +- +- *Offset += (pEid->Len + 2); +- } +- else +- { +- break; +- } +- +- pVIE += (pEid->Len + 2); +- len -= (pEid->Len + 2); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("CheckRSNIE ==> skip_offset(%d) \n", *Offset)); +- +- return result; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Parse KEYDATA field. KEYDATA[] May contain 2 RSN IE and optionally GTK. +- GTK is encaptulated in KDE format at p.83 802.11i D10 +- +- Arguments: +- +- Return Value: +- +- Note: +- 802.11i D10 +- +- ======================================================================== +-*/ +-BOOLEAN ParseKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR bPairewise) +-{ +- PKDE_ENCAP pKDE = NULL; +- PUCHAR pMyKeyData = pKeyData; +- UCHAR KeyDataLength = KeyDataLen; +- UCHAR GTKLEN; +- UCHAR skip_offset; +- +- // Verify The RSN IE contained in Pairewise-Msg 3 and skip it +- if (bPairewise) +- { +- // Check RSN IE whether it is WPA2/WPA2PSK +- if (!CheckRSNIE(pAd, pKeyData, KeyDataLen, &skip_offset)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ParseKeyData ==> WPA2/WPA2PSK RSN IE mismatched \n")); +- hex_dump("Get KEYDATA :", pKeyData, KeyDataLen); +- return FALSE; +- } +- else +- { +- // skip RSN IE +- pMyKeyData += skip_offset; +- KeyDataLength -= skip_offset; +- +- //DBGPRINT(RT_DEBUG_TRACE, ("ParseKeyData ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", skip_offset)); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("ParseKeyData ==> KeyDataLength %d without RSN_IE \n", KeyDataLength)); +- +- // Parse EKD format +- if (KeyDataLength >= 8) +- { +- pKDE = (PKDE_ENCAP) pMyKeyData; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: KeyDataLength is too short \n")); +- return FALSE; +- } +- +- +- // Sanity check - shared key index should not be 0 +- if (pKDE->GTKEncap.Kid == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key index zero \n")); +- return FALSE; +- } +- +- // Sanity check - KED length +- if (KeyDataLength < (pKDE->Len + 2)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: The len from KDE is too short \n")); +- return FALSE; +- } +- +- // Get GTK length - refer to IEEE 802.11i-2004 p.82 +- GTKLEN = pKDE->Len -6; +- +- if (GTKLEN < LEN_AES_KEY) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN)); +- return FALSE; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("GTK Key with KDE formet got index=%d, len=%d \n", pKDE->GTKEncap.Kid, GTKLEN)); +- +- // Update GTK +- // set key material, TxMic and RxMic for WPAPSK +- NdisMoveMemory(pAd->StaCfg.GTK, pKDE->GTKEncap.GTK, 32); +- pAd->StaCfg.DefaultKeyId = pKDE->GTKEncap.Kid; +- +- // Update shared key table +- NdisZeroMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, pKDE->GTKEncap.GTK, LEN_TKIP_EK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, &pKDE->GTKEncap.GTK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, &pKDE->GTKEncap.GTK[24], LEN_TKIP_TXMICK); +- +- // Update Shared Key CipherAlg +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128; +- +- return TRUE; +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Cisco CCKM PRF function +- +- Arguments: +- key Cisco Base Transient Key (BTK) +- key_len The key length of the BTK +- data Ruquest Number(RN) + BSSID +- data_len The length of the data +- output Store for PTK(Pairwise transient keys) +- len The length of the output +- Return Value: +- None +- +- Note: +- 802.1i Annex F.9 +- +- ======================================================================== +-*/ +-VOID CCKMPRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len) +-{ +- INT i; +- UCHAR input[1024]; +- INT currentindex = 0; +- INT total_len; +- +- NdisMoveMemory(input, data, data_len); +- total_len = data_len; +- input[total_len] = 0; +- total_len++; +- for (i = 0; i < (len + 19) / 20; i++) +- { +- HMAC_SHA1(input, total_len, key, key_len, &output[currentindex]); +- currentindex += 20; +- input[total_len - 1]++; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: + Process MIC error indication and record MIC error timer. + + Arguments: +@@ -1872,7 +66,7 @@ VOID RTMPReportMicError( + UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1:0); + + // Record Last MIC error time and count +- Now = jiffies; ++ NdisGetSystemUpTime(&Now); + if (pAd->StaCfg.MicErrCnt == 0) + { + pAd->StaCfg.MicErrCnt++; +@@ -1895,6 +89,17 @@ VOID RTMPReportMicError( + pAd->StaCfg.LastMicErrorTime = Now; + // Violate MIC error counts, MIC countermeasures kicks in + pAd->StaCfg.MicErrCnt++; ++ // We shall block all reception ++ // We shall clean all Tx ring and disassoicate from AP after next EAPOL frame ++ // ++ // No necessary to clean all Tx ring, on RTMPHardTransmit will stop sending non-802.1X EAPOL packets ++ // if pAd->StaCfg.MicErrCnt greater than 2. ++ // ++ // RTMPRingCleanUp(pAd, QID_AC_BK); ++ // RTMPRingCleanUp(pAd, QID_AC_BE); ++ // RTMPRingCleanUp(pAd, QID_AC_VI); ++ // RTMPRingCleanUp(pAd, QID_AC_VO); ++ // RTMPRingCleanUp(pAd, QID_HCCA); + } + } + else +@@ -1944,14 +149,13 @@ VOID WpaSendMicFailureToWpaSupplicant( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN bUnicast) + { +- union iwreq_data wrqu; + char custom[IW_CUSTOM_MAX] = {0}; + + sprintf(custom, "MLME-MICHAELMICFAILURE.indication"); +- if (bUnicast) ++ if(bUnicast) + sprintf(custom, "%s unicast", custom); +- wrqu.data.length = strlen(custom); +- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, custom); ++ ++ RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (PUCHAR)custom, strlen(custom)); + + return; + } +@@ -2002,7 +206,7 @@ VOID WpaMicFailureReportFrame( + Packet.KeyDesc.KeyInfo.Error = 1; + + // Update packet length after decide Key data payload +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE; ++ SET_UINT16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) + + // Key Replay Count + NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); +@@ -2021,7 +225,7 @@ VOID WpaMicFailureReportFrame( + // Prepare EAPOL frame for MIC calculation + // Be careful, only EAPOL frame is counted for MIC calculation + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, ++ CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, + END_OF_ARGS); + + // Prepare and Fill MIC value +@@ -2029,22 +233,20 @@ VOID WpaMicFailureReportFrame( + if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) + { // AES + UCHAR digest[20] = {0}; +- HMAC_SHA1(pOutBuffer, FrameLen, pAd->StaCfg.PTK, LEN_EAP_MICK, digest); ++ HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); + NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); + } + else + { // TKIP +- hmac_md5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic); ++ HMAC_MD5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE); + } + NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- LENGTH_802_3, &Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // opy frame to Tx ring and send MIC failure report frame to authenticator +- RTMPToWirelessSta(pAd, Header802_3, LENGTH_802_3, (PUCHAR)&Packet, Packet.Body_Len[1] + 4, FALSE); ++ // copy frame to Tx ring and send MIC failure report frame to authenticator ++ RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID], ++ Header802_3, LENGTH_802_3, ++ (PUCHAR)&Packet, ++ CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, FALSE); + + MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); + +@@ -2089,3 +291,149 @@ VOID WpaDisassocApAndBlockAssoc( + pAd->StaCfg.bBlockAssoc = TRUE; + } + ++VOID WpaStaPairwiseKeySetting( ++ IN PRTMP_ADAPTER pAd) ++{ ++ PCIPHER_KEY pSharedKey; ++ PMAC_TABLE_ENTRY pEntry; ++ ++ pEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ ++ // Pairwise key shall use key#0 ++ pSharedKey = &pAd->SharedKey[BSS0][0]; ++ ++ NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); ++ ++ // Prepare pair-wise key information into shared key table ++ NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ pSharedKey->KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ ++ // Decide its ChiperAlg ++ if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) ++ pSharedKey->CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) ++ pSharedKey->CipherAlg = CIPHER_AES; ++ else ++ pSharedKey->CipherAlg = CIPHER_NONE; ++ ++ // Update these related information to MAC_TABLE_ENTRY ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; ++ ++ // Update pairwise key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, ++ pSharedKey->RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pEntry); ++ STA_PORT_SECURED(pAd); ++ pAd->IndicateMediaState = NdisMediaStateConnected; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("%s : AID(%d) port secured\n", __func__, pEntry->Aid)); ++ ++} ++ ++VOID WpaStaGroupKeySetting( ++ IN PRTMP_ADAPTER pAd) ++{ ++ PCIPHER_KEY pSharedKey; ++ ++ pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; ++ ++ // Prepare pair-wise key information into shared key table ++ NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ pSharedKey->KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); ++ ++ // Update Shared Key CipherAlg ++ pSharedKey->CipherAlg = CIPHER_NONE; ++ if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) ++ pSharedKey->CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) ++ pSharedKey->CipherAlg = CIPHER_AES; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) ++ pSharedKey->CipherAlg = CIPHER_WEP64; ++ else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) ++ pSharedKey->CipherAlg = CIPHER_WEP128; ++ ++ // Update group key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, ++ pSharedKey->RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ NULL); ++ ++} ++ ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Send EAPoL-Start packet to AP. ++ ++ Arguments: ++ pAd - NIC Adapter pointer ++ ++ Return Value: ++ None ++ ++ IRQL = DISPATCH_LEVEL ++ ++ Note: ++ Actions after link up ++ 1. Change the correct parameters ++ 2. Send EAPOL - START ++ ++ ======================================================================== ++*/ ++VOID WpaSendEapolStart( ++ IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pBssid) ++{ ++ IEEE8021X_FRAME Packet; ++ UCHAR Header802_3[14]; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("-----> WpaSendEapolStart\n")); ++ ++ NdisZeroMemory(Header802_3,sizeof(UCHAR)*14); ++ ++ MAKE_802_3_HEADER(Header802_3, pBssid, &pAd->CurrentAddress[0], EAPOL); ++ ++ // Zero message 2 body ++ NdisZeroMemory(&Packet, sizeof(Packet)); ++ Packet.Version = EAPOL_VER; ++ Packet.Type = EAPOLStart; ++ Packet.Length = cpu2be16(0); ++ ++ // Copy frame to Tx ring ++ RTMPToWirelessSta((PRTMP_ADAPTER)pAd, &pAd->MacTab.Content[BSSID_WCID], ++ Header802_3, LENGTH_802_3, (PUCHAR)&Packet, 4, TRUE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<----- WpaSendEapolStart\n")); ++} +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index c0e0425..b6a3c90 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -50,8 +50,6 @@ extern ULONG RTDebugLevel; + #define GROUP_KEY_NO 4 + + extern UCHAR CipherWpa2Template[]; +-extern UCHAR CipherWpaPskTkip[]; +-extern UCHAR CipherWpaPskTkipLen; + + typedef struct PACKED _RT_VERSION_INFO{ + UCHAR DriverVersionW; +@@ -68,25 +66,25 @@ struct iw_priv_args privtab[] = { + IW_PRIV_TYPE_CHAR | 1024, 0, + "set"}, + +-{ RTPRIV_IOCTL_SHOW, 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- ""}, + { RTPRIV_IOCTL_SHOW, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, + ""}, + /* --- sub-ioctls definitions --- */ + { SHOW_CONN_STATUS, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "connStatus" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "connStatus" }, + { SHOW_DRVIER_VERION, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "driverVer" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "driverVer" }, + { SHOW_BA_INFO, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bainfo" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bainfo" }, + { SHOW_DESC_INFO, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "descinfo" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "descinfo" }, + { RAIO_OFF, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" }, + { RAIO_ON, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" }, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" }, + { SHOW_CFG_VALUE, + IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "show" }, ++ { SHOW_ADHOC_ENTRY_INFO, ++ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "adhocEntry" }, + /* --- sub-ioctls relations --- */ + + { RTPRIV_IOCTL_STATISTICS, +@@ -95,62 +93,76 @@ struct iw_priv_args privtab[] = { + { RTPRIV_IOCTL_GSITESURVEY, + 0, IW_PRIV_TYPE_CHAR | 1024, + "get_site_survey"}, ++ ++ + }; + ++static __s32 ralinkrate[] = ++ {2, 4, 11, 22, // CCK ++ 12, 18, 24, 36, 48, 72, 96, 108, // OFDM ++ 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 ++ 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 ++ 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 ++ 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 ++ 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 ++ 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 ++ 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 ++ 90, 180, 270, 360, 540, 720, 810, 900}; ++ + INT Set_SSID_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + #ifdef WMM_SUPPORT + INT Set_WmmCapable_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + #endif + + INT Set_NetworkType_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_AuthMode_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_EncrypType_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_DefaultKeyID_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Key1_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Key2_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Key3_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Key4_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_WPAPSK_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + + INT Set_PSMode_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_Wpa_Support( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + NDIS_STATUS RTMPWPANoneAddKeyProc( + IN PRTMP_ADAPTER pAd, +@@ -158,23 +170,45 @@ NDIS_STATUS RTMPWPANoneAddKeyProc( + + INT Set_FragTest_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_TGnWifiTest_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_LongRetryLimit_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); + + INT Set_ShortRetryLimit_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg); ++ IN PSTRING arg); ++ ++ ++ ++INT Show_Adhoc_MacTable_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING extra); ++ ++INT Set_BeaconLostTime_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT Set_AutoRoaming_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT Set_SiteSurvey_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); ++ ++INT Set_ForceTxBurst_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg); + + static struct { +- CHAR *name; +- INT (*set_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg); ++ PSTRING name; ++ INT (*set_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); + } *PRTMP_PRIVATE_SET_PROC, RTMP_PRIVATE_SUPPORT_PROC[] = { + {"DriverVersion", Set_DriverVersion_Proc}, + {"CountryRegion", Set_CountryRegion_Proc}, +@@ -201,9 +235,10 @@ static struct { + {"HtBaDecline", Set_BADecline_Proc}, + {"HtProtect", Set_HtProtect_Proc}, + {"HtMimoPs", Set_HtMimoPs_Proc}, ++ {"HtDisallowTKIP", Set_HtDisallowTKIP_Proc}, + #ifdef AGGREGATION_SUPPORT + {"PktAggregate", Set_PktAggregate_Proc}, +-#endif ++#endif // AGGREGATION_SUPPORT // + + #ifdef WMM_SUPPORT + {"WmmCapable", Set_WmmCapable_Proc}, +@@ -222,18 +257,36 @@ static struct { + {"PSMode", Set_PSMode_Proc}, + #ifdef DBG + {"Debug", Set_Debug_Proc}, +-#endif ++#endif // DBG // ++ ++ + {"WpaSupport", Set_Wpa_Support}, ++ ++ ++ ++ ++ + {"FixedTxMode", Set_FixedTxMode_Proc}, + {"TGnWifiTest", Set_TGnWifiTest_Proc}, + {"ForceGF", Set_ForceGF_Proc}, + {"LongRetry", Set_LongRetryLimit_Proc}, + {"ShortRetry", Set_ShortRetryLimit_Proc}, +-#ifdef RT2870 ++ ++//2008/09/11:KH add to support efuse<-- ++#ifdef RT30xx ++#ifdef RTMP_EFUSE_SUPPORT + {"efuseFreeNumber", set_eFuseGetFreeBlockCount_Proc}, + {"efuseDump", set_eFusedump_Proc}, + {"efuseLoadFromBin", set_eFuseLoadFromBin_Proc}, +-#endif ++ {"efuseBufferModeWriteBack", set_eFuseBufferModeWriteBack_Proc}, ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // ++//2008/09/11:KH add to support efuse--> ++ {"BeaconLostTime", Set_BeaconLostTime_Proc}, ++ {"AutoRoaming", Set_AutoRoaming_Proc}, ++ {"SiteSurvey", Set_SiteSurvey_Proc}, ++ {"ForceTxBurst", Set_ForceTxBurst_Proc}, ++ + {NULL,} + }; + +@@ -247,22 +300,6 @@ VOID RTMPAddKey( + + DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); + +-#ifdef RT2860 +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) +- { +- if (pAd->StaCfg.bRadio == FALSE) +- { +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- return; +- } +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPAAddKeyProc1==>\n")); +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_HALT); +- RTMPusecDelay(6000); +- pAd->bPCIclkOff = FALSE; +- } +-#endif +- + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) + { + if (pKey->KeyIndex & 0x80000000) +@@ -323,6 +360,7 @@ VOID RTMPAddKey( + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) + { + // set 802.1x port control ++ //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + + // Indicate Connected for GUI +@@ -372,6 +410,7 @@ VOID RTMPAddKey( + NULL); + + // set 802.1x port control ++ //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + + // Indicate Connected for GUI +@@ -454,10 +493,6 @@ VOID RTMPAddKey( + } + } + end: +-#ifdef RT2860 +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- DBGPRINT(RT_DEBUG_INFO, ("<------ RTMPAddKey\n")); +-#endif + return; + } + +@@ -478,8 +513,8 @@ rt_ioctl_giwname(struct net_device *dev, + struct iw_request_info *info, + char *name, char *extra) + { +-// PRTMP_ADAPTER pAdapter = dev->ml_priv; +- strncpy(name, RT28xx_CHIP_NAME " Wireless", IFNAMSIZ); ++ strncpy(name, "Ralink STA", IFNAMSIZ); ++ // RT2870 2.1.0.0 uses "RT2870 Wireless" + return 0; + } + +@@ -487,9 +522,11 @@ int rt_ioctl_siwfreq(struct net_device *dev, + struct iw_request_info *info, + struct iw_freq *freq, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + int chan = -1; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -520,9 +557,13 @@ int rt_ioctl_giwfreq(struct net_device *dev, + struct iw_request_info *info, + struct iw_freq *freq, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; +- UCHAR ch = pAdapter->CommonCfg.Channel; +- ULONG m; ++ PRTMP_ADAPTER pAdapter = NULL; ++ UCHAR ch; ++ ULONG m = 2412000; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ ++ ch = pAdapter->CommonCfg.Channel; + + DBGPRINT(RT_DEBUG_TRACE,("==>rt_ioctl_giwfreq %d\n", ch)); + +@@ -536,7 +577,9 @@ int rt_ioctl_siwmode(struct net_device *dev, + struct iw_request_info *info, + __u32 *mode, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -571,7 +614,9 @@ int rt_ioctl_giwmode(struct net_device *dev, + struct iw_request_info *info, + __u32 *mode, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + if (ADHOC_ON(pAdapter)) + *mode = IW_MODE_ADHOC; +@@ -592,7 +637,9 @@ int rt_ioctl_siwsens(struct net_device *dev, + struct iw_request_info *info, + char *name, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -615,11 +662,13 @@ int rt_ioctl_giwrange(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_range *range = (struct iw_range *) extra; + u16 val; + int i; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n")); + data->length = sizeof(struct iw_range); + memset(range, 0, sizeof(struct iw_range)); +@@ -651,10 +700,10 @@ int rt_ioctl_giwrange(struct net_device *dev, + val = 0; + for (i = 1; i <= range->num_channels; i++) + { +- u32 m; ++ u32 m = 2412000; + range->freq[val].i = pAdapter->ChannelList[i-1].Channel; + MAP_CHANNEL_ID_TO_KHZ(pAdapter->ChannelList[i-1].Channel, m); +- range->freq[val].m = m * 100; /* HZ */ ++ range->freq[val].m = m * 100; /* OS_HZ */ + + range->freq[val].e = 1; + val++; +@@ -696,9 +745,11 @@ int rt_ioctl_siwap(struct net_device *dev, + struct iw_request_info *info, + struct sockaddr *ap_addr, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + NDIS_802_11_MAC_ADDRESS Bssid; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -708,7 +759,7 @@ int rt_ioctl_siwap(struct net_device *dev, + + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) + { +- RT28XX_MLME_RESET_STATE_MACHINE(pAdapter); ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); + } + +@@ -736,7 +787,9 @@ int rt_ioctl_giwap(struct net_device *dev, + struct iw_request_info *info, + struct sockaddr *ap_addr, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) + { +@@ -802,12 +855,14 @@ int rt_ioctl_iwaplist(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + + struct sockaddr addr[IW_MAX_AP]; + struct iw_quality qual[IW_MAX_AP]; + int i; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -837,11 +892,13 @@ int rt_ioctl_siwscan(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + + ULONG Now; + int Status = NDIS_STATUS_SUCCESS; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -854,17 +911,8 @@ int rt_ioctl_siwscan(struct net_device *dev, + DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); + return -EINVAL; + } +-#ifdef RT2860 +- if ((pAdapter->OpMode == OPMODE_STA) && (IDLE_ON(pAdapter)) +- && (pAdapter->StaCfg.bRadio == TRUE) +- && (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- RT28xxPciAsicRadioOn(pAdapter, GUI_IDLE_POWER_SAVE); +- } +- // Check if still radio off. +- else if (pAdapter->bPCIclkOff == TRUE) +- return 0; +-#endif ++ ++ + if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) + { + pAdapter->StaCfg.WpaSupplicantScanCount++; +@@ -872,7 +920,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + + pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; + if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- return 0; ++ return NDIS_STATUS_SUCCESS; + do{ + Now = jiffies; + +@@ -896,7 +944,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) + { +- RT28XX_MLME_RESET_STATE_MACHINE(pAdapter); ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); + } + +@@ -914,23 +962,25 @@ int rt_ioctl_siwscan(struct net_device *dev, + NULL); + + Status = NDIS_STATUS_SUCCESS; +- RT28XX_MLME_HANDLER(pAdapter); ++ RTMP_MLME_HANDLER(pAdapter); + }while(0); +- return 0; ++ return NDIS_STATUS_SUCCESS; + } + + int rt_ioctl_giwscan(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + int i=0; +- char *current_ev = extra, *previous_ev = extra; +- char *end_buf; +- char *current_val, custom[MAX_CUSTOM_LEN] = {0}; ++ PSTRING current_ev = extra, previous_ev = extra; ++ PSTRING end_buf; ++ PSTRING current_val; ++ STRING custom[MAX_CUSTOM_LEN] = {0}; + struct iw_event iwe; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + { + /* +@@ -958,7 +1008,9 @@ int rt_ioctl_giwscan(struct net_device *dev, + for (i = 0; i < pAdapter->ScanTab.BssNr; i++) + { + if (current_ev >= end_buf) ++ { + return -E2BIG; ++ } + + //MAC address + //================================ +@@ -1043,7 +1095,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + } + + previous_ev = current_ev; +- current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_ADDR_LEN); ++ current_ev = iwe_stream_add_event(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN); + if (current_ev == previous_ev) + return -E2BIG; + +@@ -1055,7 +1107,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + iwe.u.data.flags = 1; + + previous_ev = current_ev; +- current_ev = iwe_stream_add_point(info, current_ev,end_buf, &iwe, pAdapter->ScanTab.BssEntry[i].Ssid); ++ current_ev = iwe_stream_add_point(info, current_ev,end_buf, &iwe, (PSTRING) pAdapter->ScanTab.BssEntry[i].Ssid); + if (current_ev == previous_ev) + return -E2BIG; + +@@ -1142,6 +1194,20 @@ int rt_ioctl_giwscan(struct net_device *dev, + else + iwe.u.bitrate.value = (tmpRate/2) * 1000000; + ++ if (tmpRate == 0x6c && pAdapter->ScanTab.BssEntry[i].HtCapabilityLen > 0) ++ { ++ int rate_count = sizeof(ralinkrate)/sizeof(__s32); ++ HT_CAP_INFO capInfo = pAdapter->ScanTab.BssEntry[i].HtCapability.HtCapInfo; ++ int shortGI = capInfo.ChannelWidth ? capInfo.ShortGIfor40 : capInfo.ShortGIfor20; ++ int maxMCS = pAdapter->ScanTab.BssEntry[i].HtCapability.MCSSet[1] ? 15 : 7; ++ int rate_index = 12 + ((UCHAR)capInfo.ChannelWidth * 24) + ((UCHAR)shortGI *48) + ((UCHAR)maxMCS); ++ if (rate_index < 0) ++ rate_index = 0; ++ if (rate_index > rate_count) ++ rate_index = rate_count; ++ iwe.u.bitrate.value = ralinkrate[rate_index] * 500000; ++ } ++ + iwe.u.bitrate.disabled = 0; + current_val = iwe_stream_add_value(info, current_ev, + current_val, end_buf, &iwe, +@@ -1192,7 +1258,9 @@ int rt_ioctl_siwessid(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *essid) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1203,13 +1271,13 @@ int rt_ioctl_siwessid(struct net_device *dev, + + if (data->flags) + { +- PCHAR pSsidString = NULL; ++ PSTRING pSsidString = NULL; + + // Includes null character. + if (data->length > (IW_ESSID_MAX_SIZE + 1)) + return -E2BIG; + +- pSsidString = (CHAR *) kmalloc(MAX_LEN_OF_SSID+1, MEM_ALLOC_FLAG); ++ pSsidString = kmalloc(MAX_LEN_OF_SSID+1, MEM_ALLOC_FLAG); + if (pSsidString) + { + NdisZeroMemory(pSsidString, MAX_LEN_OF_SSID+1); +@@ -1233,7 +1301,9 @@ int rt_ioctl_giwessid(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *essid) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + data->flags = 1; + if (MONITOR_ON(pAdapter)) +@@ -1248,14 +1318,14 @@ int rt_ioctl_giwessid(struct net_device *dev, + data->length = pAdapter->CommonCfg.SsidLen; + memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen); + } +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + // Add for RT2870 + else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) + { + data->length = pAdapter->CommonCfg.SsidLen; + memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen); + } +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + else + {//the ANY ssid was specified + data->length = 0; +@@ -1270,7 +1340,9 @@ int rt_ioctl_siwnickn(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *nickname) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1293,10 +1365,12 @@ int rt_ioctl_giwnickn(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *nickname) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + +- if (data->length > strlen(pAdapter->nickname) + 1) +- data->length = strlen(pAdapter->nickname) + 1; ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ ++ if (data->length > strlen((PSTRING) pAdapter->nickname) + 1) ++ data->length = strlen((PSTRING) pAdapter->nickname) + 1; + if (data->length > 0) { + memcpy(nickname, pAdapter->nickname, data->length-1); + nickname[data->length-1] = '\0'; +@@ -1308,9 +1382,11 @@ int rt_ioctl_siwrts(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *rts, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + u16 val; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -1337,7 +1413,9 @@ int rt_ioctl_giwrts(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *rts, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1357,9 +1435,11 @@ int rt_ioctl_siwfrag(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *frag, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + u16 val; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -1384,7 +1464,9 @@ int rt_ioctl_giwfrag(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *frag, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1406,7 +1488,9 @@ int rt_ioctl_siwencode(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *erq, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1424,8 +1508,10 @@ int rt_ioctl_siwencode(struct net_device *dev, + pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; + pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; + goto done; +- } else if ( +- (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN)) { ++ } ++ else if (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN) ++ { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); + pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; + pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +@@ -1441,7 +1527,8 @@ int rt_ioctl_siwencode(struct net_device *dev, + { + int keyIdx = (erq->flags & IW_ENCODE_INDEX) - 1; + /* Check the size of the key */ +- if (erq->length > MAX_WEP_KEY_SIZE) { ++ if (erq->length > MAX_WEP_KEY_SIZE) ++ { + return -EINVAL; + } + /* Check key index */ +@@ -1454,7 +1541,7 @@ int rt_ioctl_siwencode(struct net_device *dev, + keyIdx = pAdapter->StaCfg.DefaultKeyId; + } + else +- pAdapter->StaCfg.DefaultKeyId=keyIdx; ++ pAdapter->StaCfg.DefaultKeyId = keyIdx; + + NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); + +@@ -1473,7 +1560,8 @@ int rt_ioctl_siwencode(struct net_device *dev, + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; + + /* Check if the key is not marked as invalid */ +- if(!(erq->flags & IW_ENCODE_NOKEY)) { ++ if(!(erq->flags & IW_ENCODE_NOKEY)) ++ { + /* Copy the key in the driver */ + NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, extra, erq->length); + } +@@ -1488,10 +1576,9 @@ int rt_ioctl_siwencode(struct net_device *dev, + } + else + /* Don't complain if only change the mode */ +- if (!(erq->flags & IW_ENCODE_MODE)) { ++ if (!(erq->flags & IW_ENCODE_MODE)) + return -EINVAL; + } +- } + + done: + DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::erq->flags=%x\n",erq->flags)); +@@ -1506,8 +1593,10 @@ rt_ioctl_giwencode(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *erq, char *key) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; + int kid; ++ PRTMP_ADAPTER pAdapter = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +@@ -1564,12 +1653,15 @@ static int + rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, + void *w, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; +- POS_COOKIE pObj = (POS_COOKIE)pAdapter->OS_Cookie; +- char *this_char = extra; +- char *value; ++ PRTMP_ADAPTER pAdapter; ++ POS_COOKIE pObj; ++ PSTRING this_char = extra; ++ PSTRING value; + int Status=0; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ ++ pObj = (POS_COOKIE) pAdapter->OS_Cookie; + { + pObj->ioctl_if_type = INT_MAIN; + pObj->ioctl_if = MAIN_MBSSID; +@@ -1588,13 +1680,16 @@ rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, + if ((value = rtstrchr(this_char, '=')) != NULL) + *value++ = 0; + +- if (!value) ++ if (!value && (strcmp(this_char, "SiteSurvey") != 0)) + return -EINVAL; ++ else ++ goto SET_PROC; + + // reject setting nothing besides ANY ssid(ssidLen=0) + if (!*value && (strcmp(this_char, "SSID") != 0)) + return -EINVAL; + ++SET_PROC: + for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++) + { + if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0) +@@ -1622,7 +1717,9 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, + struct iw_point *wrq, char *extra) + { + INT Status = 0; +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, dev); + + if (extra == NULL) + { +@@ -1655,6 +1752,8 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, + } + sprintf(extra+strlen(extra), "WpaSupplicantUP = %d\n\n", pAd->StaCfg.WpaSupplicantUP); + ++ ++ + wrq->length = strlen(extra) + 1; // 1: size of '\0' + DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length)); + +@@ -1663,7 +1762,7 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, + + void getBaInfo( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR pOutBuf) ++ IN PSTRING pOutBuf) + { + INT i, j; + BA_ORI_ENTRY *pOriBAEntry; +@@ -1710,13 +1809,16 @@ void getBaInfo( + + static int + rt_private_show(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, char *extra) ++ struct iw_point *wrq, PSTRING extra) + { + INT Status = 0; +- PRTMP_ADAPTER pAd = dev->ml_priv; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ PRTMP_ADAPTER pAd; ++ POS_COOKIE pObj; + u32 subcmd = wrq->flags; + ++ GET_PAD_FROM_NET_DEV(pAd, dev); ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + if (extra == NULL) + { + wrq->length = 0; +@@ -1785,9 +1887,11 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info, + case RAIO_OFF: + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + { +- sprintf(extra, "Scanning\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; ++ if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) ++ { ++ RTMP_MLME_RESET_STATE_MACHINE(pAd); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); ++ } + } + pAd->StaCfg.bSwRadio = FALSE; + if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +@@ -1804,14 +1908,6 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info, + wrq->length = strlen(extra) + 1; // 1: size of '\0' + break; + case RAIO_ON: +-#ifdef RT2870 +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- sprintf(extra, "Scanning\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- } +-#endif + pAd->StaCfg.bSwRadio = TRUE; + //if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) + { +@@ -1827,13 +1923,19 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info, + wrq->length = strlen(extra) + 1; // 1: size of '\0' + break; + ++ ++ + case SHOW_CFG_VALUE: + { +- Status = RTMPShowCfgValue(pAd, wrq->pointer, extra); ++ Status = RTMPShowCfgValue(pAd, (PSTRING) wrq->pointer, extra); + if (Status == 0) + wrq->length = strlen(extra) + 1; // 1: size of '\0' + } + break; ++ case SHOW_ADHOC_ENTRY_INFO: ++ Show_Adhoc_MacTable_Proc(pAd, extra); ++ wrq->length = strlen(extra) + 1; // 1: size of '\0' ++ break; + default: + DBGPRINT(RT_DEBUG_TRACE, ("%s - unknow subcmd = %d\n", __func__, subcmd)); + break; +@@ -1847,12 +1949,14 @@ int rt_ioctl_siwmlme(struct net_device *dev, + union iwreq_data *wrqu, + char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + struct iw_mlme *pMlme = (struct iw_mlme *)wrqu->data.pointer; + MLME_QUEUE_ELEM MsgElem; + MLME_DISASSOC_REQ_STRUCT DisAssocReq; + MLME_DEAUTH_REQ_STRUCT DeAuthReq; + ++ GET_PAD_FROM_NET_DEV(pAd, dev); ++ + DBGPRINT(RT_DEBUG_TRACE, ("====> %s\n", __func__)); + + if (pMlme == NULL) +@@ -1902,9 +2006,11 @@ int rt_ioctl_siwauth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_param *param = &wrqu->param; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -1992,6 +2098,7 @@ int rt_ioctl_siwauth(struct net_device *dev, + } + else if (param->value == 0) + { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); + } + DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_KEY_MGMT - param->value = %d!\n", __func__, param->value)); +@@ -1999,6 +2106,14 @@ int rt_ioctl_siwauth(struct net_device *dev, + case IW_AUTH_RX_UNENCRYPTED_EAPOL: + break; + case IW_AUTH_PRIVACY_INVOKED: ++ /*if (param->value == 0) ++ { ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; ++ pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; ++ pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; ++ pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; ++ }*/ + DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_PRIVACY_INVOKED - param->value = %d!\n", __func__, param->value)); + break; + case IW_AUTH_DROP_UNENCRYPTED: +@@ -2006,6 +2121,7 @@ int rt_ioctl_siwauth(struct net_device *dev, + pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + else + { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); + } + DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __func__, param->value)); +@@ -2037,9 +2153,11 @@ int rt_ioctl_giwauth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_param *param = &wrqu->param; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -2074,21 +2192,6 @@ void fnSetCipherKey( + IN BOOLEAN bGTK, + IN struct iw_encode_ext *ext) + { +-#ifdef RT2860 +- RTMP_CLEAR_PSFLAG(pAdapter, fRTMP_PS_CAN_GO_SLEEP); +- if (RTMP_TEST_PSFLAG(pAdapter, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) +- { +- if (pAdapter->StaCfg.bRadio == FALSE) +- { +- RTMP_SET_PSFLAG(pAdapter, fRTMP_PS_CAN_GO_SLEEP); +- return; +- } +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPAAddKeyProc1==>\n")); +- RTMPPCIeLinkCtrlValueRestore(pAdapter, RESTORE_HALT); +- RTMPusecDelay(6000); +- pAdapter->bPCIclkOff = FALSE; +- } +-#endif + NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, LEN_TKIP_EK); +@@ -2119,9 +2222,6 @@ void fnSetCipherKey( + keyIdx, + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, + &pAdapter->MacTab.Content[BSSID_WCID]); +-#ifdef RT2860 +- RTMP_SET_PSFLAG(pAdapter, fRTMP_PS_CAN_GO_SLEEP); +-#endif + } + + int rt_ioctl_siwencodeext(struct net_device *dev, +@@ -2129,11 +2229,13 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + union iwreq_data *wrqu, + char *extra) + { +- PRTMP_ADAPTER pAdapter = dev->ml_priv; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + int keyIdx, alg = ext->alg; + ++ GET_PAD_FROM_NET_DEV(pAdapter, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -2210,7 +2312,9 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, FALSE, ext); + if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) + { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = NdisMediaStateConnected; + } + } + else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) +@@ -2218,7 +2322,9 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, TRUE, ext); + + // set 802.1x port control ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = NdisMediaStateConnected; + } + } + else +@@ -2229,14 +2335,18 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + { + fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, FALSE, ext); + if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = NdisMediaStateConnected; + } + else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) + { + fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, TRUE, ext); + + // set 802.1x port control ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = NdisMediaStateConnected; + } + break; + default: +@@ -2252,12 +2362,14 @@ rt_ioctl_giwencodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + PCHAR pKey = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + int idx, max_key_len; + ++ GET_PAD_FROM_NET_DEV(pAd, dev); ++ + DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_giwencodeext\n")); + + max_key_len = encoding->length - sizeof(*ext); +@@ -2300,7 +2412,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + else + { + ext->key_len = pAd->SharedKey[BSS0][idx].KeyLen; +- pKey = &(pAd->SharedKey[BSS0][idx].Key[0]); ++ pKey = (PCHAR)&(pAd->SharedKey[BSS0][idx].Key[0]); + } + break; + case Ndis802_11Encryption2Enabled: +@@ -2315,7 +2427,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + else + { + ext->key_len = 32; +- pKey = &pAd->StaCfg.PMK[0]; ++ pKey = (PCHAR)&pAd->StaCfg.PMK[0]; + } + break; + default: +@@ -2335,8 +2447,12 @@ int rt_ioctl_siwgenie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, dev); + ++ DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_siwgenie\n")); ++ pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; + if (wrqu->data.length > MAX_LEN_OF_RSNIE || + (wrqu->data.length && extra == NULL)) + return -EINVAL; +@@ -2345,6 +2461,7 @@ int rt_ioctl_siwgenie(struct net_device *dev, + { + pAd->StaCfg.RSNIE_Len = wrqu->data.length; + NdisMoveMemory(&pAd->StaCfg.RSN_IE[0], extra, pAd->StaCfg.RSNIE_Len); ++ pAd->StaCfg.bRSN_IE_FromWpaSupplicant = TRUE; + } + else + { +@@ -2359,7 +2476,9 @@ int rt_ioctl_giwgenie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; ++ ++ GET_PAD_FROM_NET_DEV(pAd, dev); + + if ((pAd->StaCfg.RSNIE_Len == 0) || + (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)) +@@ -2401,10 +2520,12 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + union iwreq_data *wrqu, + char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer; + INT CachedIdx = 0, idx = 0; + ++ GET_PAD_FROM_NET_DEV(pAd, dev); ++ + if (pPmksa == NULL) + return -EINVAL; + +@@ -2475,9 +2596,11 @@ int rt_ioctl_siwrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + UINT32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; + ++ GET_PAD_FROM_NET_DEV(pAd, dev); ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -2529,9 +2652,10 @@ int rt_ioctl_giwrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = dev->ml_priv; ++ PRTMP_ADAPTER pAd = NULL; + int rate_index = 0, rate_count = 0; + HTTRANSMIT_SETTING ht_setting; ++/* Remove to global variable + __s32 ralinkrate[] = + {2, 4, 11, 22, // CCK + 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +@@ -2543,6 +2667,8 @@ int rt_ioctl_giwrate(struct net_device *dev, + 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 + 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 + 90, 180, 270, 360, 540, 720, 810, 900}; // 40MHz, 400ns GI, MCS: 16 ~ 23 ++*/ ++ GET_PAD_FROM_NET_DEV(pAd, dev); + + rate_count = sizeof(ralinkrate)/sizeof(__s32); + //check if the interface is down +@@ -2561,6 +2687,7 @@ int rt_ioctl_giwrate(struct net_device *dev, + + if (ht_setting.field.MODE >= MODE_HTMIX) + { ++// rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); + rate_index = 12 + ((UCHAR)ht_setting.field.BW *24) + ((UCHAR)ht_setting.field.ShortGI *48) + ((UCHAR)ht_setting.field.MCS); + } + else +@@ -2661,7 +2788,9 @@ static const iw_handler rt_priv_handlers[] = { + (iw_handler) rt_private_show, /* + 0x11 */ + (iw_handler) NULL, /* + 0x12 */ + (iw_handler) NULL, /* + 0x13 */ ++ (iw_handler) NULL, /* + 0x14 */ + (iw_handler) NULL, /* + 0x15 */ ++ (iw_handler) NULL, /* + 0x16 */ + (iw_handler) NULL, /* + 0x17 */ + (iw_handler) NULL, /* + 0x18 */ + }; +@@ -2685,12 +2814,16 @@ INT rt28xx_sta_ioctl( + IN OUT struct ifreq *rq, + IN INT cmd) + { +- RTMP_ADAPTER *pAd = net_dev->ml_priv; +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj; ++ RTMP_ADAPTER *pAd = NULL; + struct iwreq *wrq = (struct iwreq *) rq; + BOOLEAN StateMachineTouched = FALSE; + INT Status = NDIS_STATUS_SUCCESS; + ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ + //check if the interface is down + if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) + { +@@ -2747,14 +2880,16 @@ INT rt28xx_sta_ioctl( + } + case SIOCSIWNICKN: //set node name/nickname + { +- struct iw_point *data=&wrq->u.data; +- rt_ioctl_siwnickn(net_dev, NULL, data, NULL); ++ //struct iw_point *data=&wrq->u.data; ++ //rt_ioctl_siwnickn(net_dev, NULL, data, NULL); + break; + } + case SIOCGIWNICKN: //get node name/nickname + { +- struct iw_point *data=&wrq->u.data; +- rt_ioctl_giwnickn(net_dev, NULL, data, NULL); ++ struct iw_point *erq = NULL; ++ erq = &wrq->u.data; ++ erq->length = strlen((PSTRING) pAd->nickname); ++ Status = copy_to_user(erq->pointer, pAd->nickname, erq->length); + break; + } + case SIOCGIWRATE: //get default bit rate (bps) +@@ -2790,14 +2925,14 @@ INT rt28xx_sta_ioctl( + case SIOCGIWENCODE: //get encoding token & mode + { + struct iw_point *erq=&wrq->u.encoding; +- if(erq->pointer) ++ if(erq) + rt_ioctl_giwencode(net_dev, NULL, erq, erq->pointer); + break; + } + case SIOCSIWENCODE: //set encoding token & mode + { + struct iw_point *erq=&wrq->u.encoding; +- if(erq->pointer) ++ if(erq) + rt_ioctl_siwencode(net_dev, NULL, erq, erq->pointer); + break; + } +@@ -2865,7 +3000,7 @@ INT rt28xx_sta_ioctl( + } + + if(StateMachineTouched) // Upper layer sent a MLME-related operations +- RT28XX_MLME_HANDLER(pAd); ++ RTMP_MLME_HANDLER(pAd); + + return Status; + } +@@ -2880,7 +3015,7 @@ INT rt28xx_sta_ioctl( + */ + INT Set_SSID_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + NDIS_802_11_SSID Ssid, *pSsid=NULL; + BOOLEAN StateMachineTouched = FALSE; +@@ -2906,10 +3041,29 @@ INT Set_SSID_Proc( + + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) + { +- RT28XX_MLME_RESET_STATE_MACHINE(pAdapter); ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); + } + ++ if ((pAdapter->StaCfg.WpaPassPhraseLen >= 8) && ++ (pAdapter->StaCfg.WpaPassPhraseLen <= 64)) ++ { ++ STRING passphrase_str[65] = {0}; ++ UCHAR keyMaterial[40]; ++ ++ RTMPMoveMemory(passphrase_str, pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.WpaPassPhraseLen); ++ RTMPZeroMemory(pAdapter->StaCfg.PMK, 32); ++ if (pAdapter->StaCfg.WpaPassPhraseLen == 64) ++ { ++ AtoH((PSTRING) pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.PMK, 32); ++ } ++ else ++ { ++ PasswordHash((PSTRING) pAdapter->StaCfg.WpaPassPhrase, Ssid.Ssid, Ssid.SsidLength, keyMaterial); ++ NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32); ++ } ++ } ++ + pAdapter->MlmeAux.CurrReqIsFromNdis = TRUE; + pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; + pAdapter->bConfigChanged = TRUE; +@@ -2927,7 +3081,7 @@ INT Set_SSID_Proc( + success = FALSE; + + if (StateMachineTouched) // Upper layer sent a MLME-related operations +- RT28XX_MLME_HANDLER(pAdapter); ++ RTMP_MLME_HANDLER(pAdapter); + + return success; + } +@@ -2943,16 +3097,16 @@ INT Set_SSID_Proc( + */ + INT Set_WmmCapable_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + BOOLEAN bWmmCapable; + + bWmmCapable = simple_strtol(arg, 0, 10); + + if ((bWmmCapable == 1) +-#ifdef RT2870 ++#ifdef RTMP_MAC_USB + && (pAd->NumberOfPipes >= 5) +-#endif // RT2870 // ++#endif // RTMP_MAC_USB // + ) + pAd->CommonCfg.bWmmCapable = TRUE; + else if (bWmmCapable == 0) +@@ -2977,7 +3131,7 @@ INT Set_WmmCapable_Proc( + */ + INT Set_NetworkType_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + UINT32 Value = 0; + +@@ -3043,8 +3197,6 @@ INT Set_NetworkType_Proc( + pAdapter->StaCfg.BssType = BSS_INFRA; + pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; + DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(INFRA)\n")); +- +- pAdapter->StaCfg.BssType = BSS_INFRA; + } + else if (strcmp(arg, "Monitor") == 0) + { +@@ -3056,7 +3208,7 @@ INT Set_NetworkType_Proc( + // disable all periodic state machine + pAdapter->StaCfg.bAutoReconnect = FALSE; + // reset all mlme state machine +- RT28XX_MLME_RESET_STATE_MACHINE(pAdapter); ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_MEDIA_STATE_CONNECTED \n")); + if (pAdapter->CommonCfg.CentralChannel == 0) + { +@@ -3164,7 +3316,7 @@ INT Set_NetworkType_Proc( + */ + INT Set_AuthMode_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + if ((strcmp(arg, "WEPAUTO") == 0) || (strcmp(arg, "wepauto") == 0)) + pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +@@ -3202,7 +3354,7 @@ INT Set_AuthMode_Proc( + */ + INT Set_EncrypType_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + if ((strcmp(arg, "NONE") == 0) || (strcmp(arg, "none") == 0)) + { +@@ -3260,7 +3412,7 @@ INT Set_EncrypType_Proc( + */ + INT Set_DefaultKeyID_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + ULONG KeyIdx; + +@@ -3285,7 +3437,7 @@ INT Set_DefaultKeyID_Proc( + */ + INT Set_Key1_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + int KeyLen; + int i; +@@ -3366,7 +3518,7 @@ INT Set_Key1_Proc( + */ + INT Set_Key2_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + int KeyLen; + int i; +@@ -3445,7 +3597,7 @@ INT Set_Key2_Proc( + */ + INT Set_Key3_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + int KeyLen; + int i; +@@ -3524,7 +3676,7 @@ INT Set_Key3_Proc( + */ + INT Set_Key4_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + int KeyLen; + int i; +@@ -3603,50 +3755,40 @@ INT Set_Key4_Proc( + ========================================================================== + */ + INT Set_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) + { +- UCHAR keyMaterial[40]; ++ int status; + +- if ((pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) ++ if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && ++ (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && ++ (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) + ) + return TRUE; // do nothing + + DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc::(WPAPSK=%s)\n", arg)); + +- NdisZeroMemory(keyMaterial, 40); +- +- if ((strlen(arg) < 8) || (strlen(arg) > 64)) ++ status = RT_CfgSetWPAPSKKey(pAd, arg, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, pAd->StaCfg.PMK); ++ if (status == FALSE) + { +- DBGPRINT(RT_DEBUG_TRACE, ("Set failed!!(WPAPSK=%s), WPAPSK key-string required 8 ~ 64 characters \n", arg)); ++ DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc(): Set key failed!\n")); + return FALSE; + } +- +- if (strlen(arg) == 64) +- { +- AtoH(arg, keyMaterial, 32); +- NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32); +- +- } +- else +- { +- PasswordHash((char *)arg, pAdapter->MlmeAux.Ssid, pAdapter->MlmeAux.SsidLen, keyMaterial); +- NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32); +- } ++ NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); ++ NdisMoveMemory(pAd->StaCfg.WpaPassPhrase, arg, strlen(arg)); ++ pAd->StaCfg.WpaPassPhraseLen = (UINT)strlen(arg); + + + +- if(pAdapter->StaCfg.BssType == BSS_ADHOC && +- pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) ++ if(pAd->StaCfg.BssType == BSS_ADHOC && ++ pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) + { +- pAdapter->StaCfg.WpaState = SS_NOTUSE; ++ pAd->StaCfg.WpaState = SS_NOTUSE; + } + else + { + // Start STA supplicant state machine +- pAdapter->StaCfg.WpaState = SS_START; ++ pAd->StaCfg.WpaState = SS_START; + } + + return TRUE; +@@ -3662,7 +3804,7 @@ INT Set_WPAPSK_Proc( + */ + INT Set_PSMode_Proc( + IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + if (pAdapter->StaCfg.BssType == BSS_INFRA) + { +@@ -3670,7 +3812,7 @@ INT Set_PSMode_Proc( + (strcmp(arg, "max_psp") == 0) || + (strcmp(arg, "MAX_PSP") == 0)) + { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() + // to exclude certain situations. + if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) + pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +@@ -3683,7 +3825,7 @@ INT Set_PSMode_Proc( + (strcmp(arg, "fast_psp") == 0) || + (strcmp(arg, "FAST_PSP") == 0)) + { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() + // to exclude certain situations. + OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); + if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +@@ -3695,7 +3837,7 @@ INT Set_PSMode_Proc( + (strcmp(arg, "legacy_psp") == 0) || + (strcmp(arg, "LEGACY_PSP") == 0)) + { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() ++ // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() + // to exclude certain situations. + OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); + if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +@@ -3707,7 +3849,7 @@ INT Set_PSMode_Proc( + { + //Default Ndis802_11PowerModeCAM + // clear PSM bit immediately +- MlmeSetPsmBit(pAdapter, PWR_ACTIVE); ++ RTMP_SET_PSM_BIT(pAdapter, PWR_ACTIVE); + OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); + if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) + pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +@@ -3737,7 +3879,7 @@ INT Set_PSMode_Proc( + */ + INT Set_Wpa_Support( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + + if ( simple_strtol(arg, 0, 10) == 0) +@@ -3756,7 +3898,7 @@ INT Set_Wpa_Support( + + INT Set_TGnWifiTest_Proc( + IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) ++ IN PSTRING arg) + { + if (simple_strtol(arg, 0, 10) == 0) + pAd->StaCfg.bTGnWifiTest = FALSE; +@@ -3767,30 +3909,161 @@ INT Set_TGnWifiTest_Proc( + return TRUE; + } + +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ ++ ++ ++INT Show_Adhoc_MacTable_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING extra) + { +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR LongRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); ++ INT i; ++ ++ sprintf(extra, "\n"); ++ ++ sprintf(extra + strlen(extra), "HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); ++ ++ sprintf(extra + strlen(extra), "\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n", ++ "MAC", "AID", "BSS", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC"); ++ ++ for (i=1; iMacTab.Content[i]; ++ ++ if (strlen(extra) > (IW_PRIV_SIZE_MASK - 30)) ++ break; ++ if ((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC)) ++ { ++ sprintf(extra + strlen(extra), "%02X:%02X:%02X:%02X:%02X:%02X ", ++ pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], ++ pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); ++ sprintf(extra + strlen(extra), "%-4d", (int)pEntry->Aid); ++ sprintf(extra + strlen(extra), "%-4d", (int)pEntry->apidx); ++ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi0); ++ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi1); ++ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi2); ++ sprintf(extra + strlen(extra), "%-10s", GetPhyMode(pEntry->HTPhyMode.field.MODE)); ++ sprintf(extra + strlen(extra), "%-6s", GetBW(pEntry->HTPhyMode.field.BW)); ++ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.MCS); ++ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.ShortGI); ++ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.STBC); ++ sprintf(extra + strlen(extra), "%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, ++ (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); ++ sprintf(extra, "%s\n", extra); ++ } ++ } + +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.LongRtyLimit = LongRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_LongRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); + return TRUE; + } + +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR arg) ++ ++INT Set_BeaconLostTime_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ ULONG ltmp = (ULONG)simple_strtol(arg, 0, 10); ++ ++ if ((ltmp != 0) && (ltmp <= 60)) ++ pAd->StaCfg.BeaconLostTime = (ltmp * OS_HZ); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_BeaconLostTime_Proc::(BeaconLostTime=%ld)\n", pAd->StaCfg.BeaconLostTime)); ++ return TRUE; ++} ++ ++INT Set_AutoRoaming_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ if (simple_strtol(arg, 0, 10) == 0) ++ pAd->StaCfg.bAutoRoaming = FALSE; ++ else ++ pAd->StaCfg.bAutoRoaming = TRUE; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_AutoRoaming_Proc::(bAutoRoaming=%d)\n", pAd->StaCfg.bAutoRoaming)); ++ return TRUE; ++} ++ ++ ++/* ++ ========================================================================== ++ Description: ++ Issue a site survey command to driver ++ Arguments: ++ pAdapter Pointer to our adapter ++ wrq Pointer to the ioctl argument ++ ++ Return Value: ++ None ++ ++ Note: ++ Usage: ++ 1.) iwpriv ra0 set site_survey ++ ========================================================================== ++*/ ++INT Set_SiteSurvey_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) + { +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR ShortRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); ++ NDIS_802_11_SSID Ssid; ++ ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } ++ ++ if (MONITOR_ON(pAd)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); ++ return -EINVAL; ++ } ++ ++ RTMPZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); ++ Ssid.SsidLength = 0; ++ if ((arg != NULL) && ++ (strlen(arg) <= MAX_LEN_OF_SSID)) ++ { ++ RTMPMoveMemory(Ssid.Ssid, arg, strlen(arg)); ++ Ssid.SsidLength = strlen(arg); ++ } ++ ++ pAd->StaCfg.bScanReqIsFromWebUI = TRUE; ++ ++ if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) ++ { ++ RTMP_MLME_RESET_STATE_MACHINE(pAd); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); ++ } ++ ++ // tell CNTL state machine to call NdisMSetInformationComplete() after completing ++ // this request, because this request is initiated by NDIS. ++ pAd->MlmeAux.CurrReqIsFromNdis = FALSE; ++ // Reset allowed scan retries ++ pAd->StaCfg.ScanCnt = 0; ++ NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); ++ ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID_LIST_SCAN, ++ Ssid.SsidLength, ++ Ssid.Ssid); ++ ++ RTMP_MLME_HANDLER(pAd); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Set_SiteSurvey_Proc\n")); ++ ++ return TRUE; ++} ++ ++INT Set_ForceTxBurst_Proc( ++ IN PRTMP_ADAPTER pAd, ++ IN PSTRING arg) ++{ ++ if (simple_strtol(arg, 0, 10) == 0) ++ pAd->StaCfg.bForceTxBurst = FALSE; ++ else ++ pAd->StaCfg.bForceTxBurst = TRUE; + +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ShortRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); ++ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ForceTxBurst_Proc::(bForceTxBurst=%d)\n", pAd->StaCfg.bForceTxBurst)); + return TRUE; + } +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +new file mode 100644 +index 0000000..16e1bbf +--- /dev/null ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -0,0 +1,897 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ *************************************************************************/ ++ ++#include "rt_config.h" ++ ++ ++// Following information will be show when you run 'modinfo' ++// *** If you have a solution for the bug in current version of driver, please mail to me. ++// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** ++MODULE_AUTHOR("Paul Lin "); ++MODULE_DESCRIPTION("RT2870/RT3070 Wireless Lan Linux Driver"); ++MODULE_LICENSE("GPL"); ++#ifdef MODULE_VERSION ++MODULE_VERSION(STA_DRIVER_VERSION); ++#endif ++ ++ ++/* module table */ ++struct usb_device_id rtusb_usb_id[] = { ++#ifdef RT2870 ++ {USB_DEVICE(0x148F,0x2770)}, /* Ralink */ ++ {USB_DEVICE(0x148F,0x2870)}, /* Ralink */ ++ {USB_DEVICE(0x07B8,0x2870)}, /* AboCom */ ++ {USB_DEVICE(0x07B8,0x2770)}, /* AboCom */ ++ {USB_DEVICE(0x0DF6,0x0039)}, /* Sitecom 2770 */ ++ {USB_DEVICE(0x083A,0x7512)}, /* Arcadyan 2770 */ ++ {USB_DEVICE(0x0789,0x0162)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x0789,0x0163)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x0789,0x0164)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x177f,0x0302)}, /* lsusb */ ++ {USB_DEVICE(0x0B05,0x1731)}, /* Asus */ ++ {USB_DEVICE(0x0B05,0x1732)}, /* Asus */ ++ {USB_DEVICE(0x0B05,0x1742)}, /* Asus */ ++ {USB_DEVICE(0x0DF6,0x0017)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ ++ {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ ++ {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ ++ {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ ++ {USB_DEVICE(0x07D1,0x3C09)}, /* D-Link */ ++ {USB_DEVICE(0x07D1,0x3C11)}, /* D-Link */ ++ {USB_DEVICE(0x14B2,0x3C07)}, /* AL */ ++ {USB_DEVICE(0x050D,0x8053)}, /* Belkin */ ++ {USB_DEVICE(0x14B2,0x3C23)}, /* Airlink */ ++ {USB_DEVICE(0x14B2,0x3C27)}, /* Airlink */ ++ {USB_DEVICE(0x07AA,0x002F)}, /* Corega */ ++ {USB_DEVICE(0x07AA,0x003C)}, /* Corega */ ++ {USB_DEVICE(0x07AA,0x003F)}, /* Corega */ ++ {USB_DEVICE(0x1044,0x800B)}, /* Gigabyte */ ++ {USB_DEVICE(0x15A9,0x0006)}, /* Sparklan */ ++ {USB_DEVICE(0x083A,0xB522)}, /* SMC */ ++ {USB_DEVICE(0x083A,0xA618)}, /* SMC */ ++ {USB_DEVICE(0x083A,0x8522)}, /* Arcadyan */ ++ {USB_DEVICE(0x083A,0x7522)}, /* Arcadyan */ ++ {USB_DEVICE(0x0CDE,0x0022)}, /* ZCOM */ ++ {USB_DEVICE(0x0586,0x3416)}, /* Zyxel */ ++ {USB_DEVICE(0x0CDE,0x0025)}, /* Zyxel */ ++ {USB_DEVICE(0x1740,0x9701)}, /* EnGenius */ ++ {USB_DEVICE(0x1740,0x9702)}, /* EnGenius */ ++ {USB_DEVICE(0x0471,0x200f)}, /* Philips */ ++ {USB_DEVICE(0x14B2,0x3C25)}, /* Draytek */ ++ {USB_DEVICE(0x13D3,0x3247)}, /* AzureWave */ ++ {USB_DEVICE(0x083A,0x6618)}, /* Accton */ ++ {USB_DEVICE(0x15c5,0x0008)}, /* Amit */ ++ {USB_DEVICE(0x0E66,0x0001)}, /* Hawking */ ++ {USB_DEVICE(0x0E66,0x0003)}, /* Hawking */ ++ {USB_DEVICE(0x129B,0x1828)}, /* Siemens */ ++ {USB_DEVICE(0x157E,0x300E)}, /* U-Media */ ++ {USB_DEVICE(0x050d,0x805c)}, ++ {USB_DEVICE(0x050d,0x815c)}, ++ {USB_DEVICE(0x1482,0x3C09)}, /* Abocom*/ ++ {USB_DEVICE(0x14B2,0x3C09)}, /* Alpha */ ++ {USB_DEVICE(0x04E8,0x2018)}, /* samsung */ ++ {USB_DEVICE(0x5A57,0x0280)}, /* Zinwell */ ++ {USB_DEVICE(0x5A57,0x0282)}, /* Zinwell */ ++ {USB_DEVICE(0x7392,0x7718)}, ++ {USB_DEVICE(0x7392,0x7717)}, ++ {USB_DEVICE(0x1737,0x0070)}, /* Linksys WUSB100 */ ++ {USB_DEVICE(0x1737,0x0071)}, /* Linksys WUSB600N */ ++ {USB_DEVICE(0x0411,0x00e8)}, /* Buffalo WLI-UC-G300N*/ ++ {USB_DEVICE(0x050d,0x815c)}, /* Belkin F5D8053 */ ++#endif // RT2870 // ++#ifdef RT3070 ++ {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */ ++ {USB_DEVICE(0x148F,0x3071)}, /* Ralink 3071 */ ++ {USB_DEVICE(0x148F,0x3072)}, /* Ralink 3072 */ ++ {USB_DEVICE(0x0DB0,0x3820)}, /* Ralink 3070 */ ++ {USB_DEVICE(0x0DF6,0x003E)}, /* Sitecom 3070 */ ++ {USB_DEVICE(0x0DF6,0x0042)}, /* Sitecom 3072 */ ++ {USB_DEVICE(0x14B2,0x3C12)}, /* AL 3070 */ ++ {USB_DEVICE(0x18C5,0x0012)}, /* Corega 3070 */ ++ {USB_DEVICE(0x083A,0x7511)}, /* Arcadyan 3070 */ ++ {USB_DEVICE(0x1740,0x9703)}, /* EnGenius 3070 */ ++ {USB_DEVICE(0x1740,0x9705)}, /* EnGenius 3071 */ ++ {USB_DEVICE(0x1740,0x9706)}, /* EnGenius 3072 */ ++ {USB_DEVICE(0x13D3,0x3273)}, /* AzureWave 3070*/ ++ {USB_DEVICE(0x1044,0x800D)}, /* Gigabyte GN-WB32L 3070 */ ++ {USB_DEVICE(0x2019,0xAB25)}, /* Planex Communications, Inc. RT3070 */ ++ {USB_DEVICE(0x07B8,0x3070)}, /* AboCom 3070 */ ++ {USB_DEVICE(0x07B8,0x3071)}, /* AboCom 3071 */ ++ {USB_DEVICE(0x07B8,0x3072)}, /* Abocom 3072 */ ++ {USB_DEVICE(0x7392,0x7711)}, /* Edimax 3070 */ ++ {USB_DEVICE(0x1A32,0x0304)}, /* Quanta 3070 */ ++ {USB_DEVICE(0x1EDA,0x2310)}, /* AirTies 3070 */ ++ {USB_DEVICE(0x07D1,0x3C0A)}, /* D-Link 3072 */ ++ {USB_DEVICE(0x07D1,0x3C0D)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x07D1,0x3C0E)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x07D1,0x3C0F)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x1D4D,0x000C)}, /* Pegatron Corporation 3070 */ ++ {USB_DEVICE(0x1D4D,0x000E)}, /* Pegatron Corporation 3070 */ ++ {USB_DEVICE(0x5A57,0x5257)}, /* Zinwell 3070 */ ++ {USB_DEVICE(0x5A57,0x0283)}, /* Zinwell 3072 */ ++ {USB_DEVICE(0x04BB,0x0945)}, /* I-O DATA 3072 */ ++ {USB_DEVICE(0x203D,0x1480)}, /* Encore 3070 */ ++#endif // RT3070 // ++ { USB_DEVICE(0x0DF6, 0x003F) }, /* Sitecom WL-608 */ ++ { USB_DEVICE(0x1737, 0x0077) }, /* Linksys WUSB54GC-EU v3 */ ++ { USB_DEVICE(0x2001, 0x3C09) }, /* D-Link */ ++ { USB_DEVICE(0x2001, 0x3C0A) }, /* D-Link 3072*/ ++ { USB_DEVICE(0x2019, 0xED14) }, /* Planex Communications, Inc. */ ++ { }/* Terminating entry */ ++}; ++ ++INT const rtusb_usb_id_len = sizeof(rtusb_usb_id) / sizeof(struct usb_device_id); ++ ++MODULE_DEVICE_TABLE(usb, rtusb_usb_id); ++ ++static void rt2870_disconnect( ++ IN struct usb_device *dev, ++ IN PRTMP_ADAPTER pAd); ++ ++static int __devinit rt2870_probe( ++ IN struct usb_interface *intf, ++ IN struct usb_device *usb_dev, ++ IN const struct usb_device_id *dev_id, ++ IN RTMP_ADAPTER **ppAd); ++ ++#ifndef PF_NOFREEZE ++#define PF_NOFREEZE 0 ++#endif ++ ++ ++extern int rt28xx_close(IN struct net_device *net_dev); ++extern int rt28xx_open(struct net_device *net_dev); ++ ++static BOOLEAN USBDevConfigInit( ++ IN struct usb_device *dev, ++ IN struct usb_interface *intf, ++ IN RTMP_ADAPTER *pAd); ++ ++ ++/* ++======================================================================== ++Routine Description: ++ Check the chipset vendor/product ID. ++ ++Arguments: ++ _dev_p Point to the PCI or USB device ++ ++Return Value: ++ TRUE Check ok ++ FALSE Check fail ++ ++Note: ++======================================================================== ++*/ ++BOOLEAN RT28XXChipsetCheck( ++ IN void *_dev_p) ++{ ++ struct usb_interface *intf = (struct usb_interface *)_dev_p; ++ struct usb_device *dev_p = interface_to_usbdev(intf); ++ UINT32 i; ++ ++ ++ for(i=0; idescriptor.idVendor == rtusb_usb_id[i].idVendor && ++ dev_p->descriptor.idProduct == rtusb_usb_id[i].idProduct) ++ { ++ printk("rt2870: idVendor = 0x%x, idProduct = 0x%x\n", ++ dev_p->descriptor.idVendor, dev_p->descriptor.idProduct); ++ break; ++ } ++ } ++ ++ if (i == rtusb_usb_id_len) ++ { ++ printk("rt2870: Error! Device Descriptor not matching!\n"); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/**************************************************************************/ ++/**************************************************************************/ ++//tested for kernel 2.6series ++/**************************************************************************/ ++/**************************************************************************/ ++ ++#ifdef CONFIG_PM ++static int rt2870_suspend(struct usb_interface *intf, pm_message_t state); ++static int rt2870_resume(struct usb_interface *intf); ++#endif // CONFIG_PM // ++ ++static int rtusb_probe (struct usb_interface *intf, ++ const struct usb_device_id *id); ++static void rtusb_disconnect(struct usb_interface *intf); ++ ++static BOOLEAN USBDevConfigInit( ++ IN struct usb_device *dev, ++ IN struct usb_interface *intf, ++ IN RTMP_ADAPTER *pAd) ++{ ++ struct usb_host_interface *iface_desc; ++ ULONG BulkOutIdx; ++ UINT32 i; ++ ++ ++ /* get the active interface descriptor */ ++ iface_desc = intf->cur_altsetting; ++ ++ /* get # of enpoints */ ++ pAd->NumberOfPipes = iface_desc->desc.bNumEndpoints; ++ DBGPRINT(RT_DEBUG_TRACE, ("NumEndpoints=%d\n", iface_desc->desc.bNumEndpoints)); ++ ++ /* Configure Pipes */ ++ BulkOutIdx = 0; ++ ++ for(i=0; iNumberOfPipes; i++) ++ { ++ if ((iface_desc->endpoint[i].desc.bmAttributes == ++ USB_ENDPOINT_XFER_BULK) && ++ ((iface_desc->endpoint[i].desc.bEndpointAddress & ++ USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)) ++ { ++ pAd->BulkInEpAddr = iface_desc->endpoint[i].desc.bEndpointAddress; ++ pAd->BulkInMaxPacketSize = le2cpu16(iface_desc->endpoint[i].desc.wMaxPacketSize); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("BULK IN MaxPacketSize = %d\n", pAd->BulkInMaxPacketSize)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("EP address = 0x%2x\n", iface_desc->endpoint[i].desc.bEndpointAddress)); ++ } ++ else if ((iface_desc->endpoint[i].desc.bmAttributes == ++ USB_ENDPOINT_XFER_BULK) && ++ ((iface_desc->endpoint[i].desc.bEndpointAddress & ++ USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) ++ { ++ // there are 6 bulk out EP. EP6 highest priority. ++ // EP1-4 is EDCA. EP5 is HCCA. ++ pAd->BulkOutEpAddr[BulkOutIdx++] = iface_desc->endpoint[i].desc.bEndpointAddress; ++ pAd->BulkOutMaxPacketSize = le2cpu16(iface_desc->endpoint[i].desc.wMaxPacketSize); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("BULK OUT MaxPacketSize = %d\n", pAd->BulkOutMaxPacketSize)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("EP address = 0x%2x \n", iface_desc->endpoint[i].desc.bEndpointAddress)); ++ } ++ } ++ ++ if (!(pAd->BulkInEpAddr && pAd->BulkOutEpAddr[0])) ++ { ++ printk("%s: Could not find both bulk-in and bulk-out endpoints\n", __FUNCTION__); ++ return FALSE; ++ } ++ ++ pAd->config = &dev->config->desc; ++ usb_set_intfdata(intf, pAd); ++ ++ return TRUE; ++ ++} ++ ++ ++ ++static int rtusb_probe (struct usb_interface *intf, ++ const struct usb_device_id *id) ++{ ++ RTMP_ADAPTER *pAd; ++ struct usb_device *dev; ++ int rv; ++ ++ dev = interface_to_usbdev(intf); ++ dev = usb_get_dev(dev); ++ ++ rv = rt2870_probe(intf, dev, id, &pAd); ++ if (rv != 0) ++ usb_put_dev(dev); ++ ++ return rv; ++} ++ ++ ++static void rtusb_disconnect(struct usb_interface *intf) ++{ ++ struct usb_device *dev = interface_to_usbdev(intf); ++ PRTMP_ADAPTER pAd; ++ ++ ++ pAd = usb_get_intfdata(intf); ++ usb_set_intfdata(intf, NULL); ++ ++ rt2870_disconnect(dev, pAd); ++} ++ ++ ++struct usb_driver rtusb_driver = { ++ .name="rt2870", ++ .probe=rtusb_probe, ++ .disconnect=rtusb_disconnect, ++ .id_table=rtusb_usb_id, ++ ++#ifdef CONFIG_PM ++ suspend: rt2870_suspend, ++ resume: rt2870_resume, ++#endif ++ }; ++ ++#ifdef CONFIG_PM ++ ++VOID RT2870RejectPendingPackets( ++ IN PRTMP_ADAPTER pAd) ++{ ++ // clear PS packets ++ // clear TxSw packets ++} ++ ++static int rt2870_suspend( ++ struct usb_interface *intf, ++ pm_message_t state) ++{ ++ struct net_device *net_dev; ++ PRTMP_ADAPTER pAd = usb_get_intfdata(intf); ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_suspend()\n")); ++ net_dev = pAd->net_dev; ++ netif_device_detach(net_dev); ++ ++ pAd->PM_FlgSuspend = 1; ++ if (netif_running(net_dev)) { ++ RTUSBCancelPendingBulkInIRP(pAd); ++ RTUSBCancelPendingBulkOutIRP(pAd); ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2870_suspend()\n")); ++ return 0; ++} ++ ++static int rt2870_resume( ++ struct usb_interface *intf) ++{ ++ struct net_device *net_dev; ++ PRTMP_ADAPTER pAd = usb_get_intfdata(intf); ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_resume()\n")); ++ ++ pAd->PM_FlgSuspend = 0; ++ net_dev = pAd->net_dev; ++ netif_device_attach(net_dev); ++ netif_start_queue(net_dev); ++ netif_carrier_on(net_dev); ++ netif_wake_queue(net_dev); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2870_resume()\n")); ++ return 0; ++} ++#endif // CONFIG_PM // ++ ++// Init driver module ++INT __init rtusb_init(void) ++{ ++ printk("rtusb init --->\n"); ++ return usb_register(&rtusb_driver); ++} ++ ++// Deinit driver module ++VOID __exit rtusb_exit(void) ++{ ++ usb_deregister(&rtusb_driver); ++ printk("<--- rtusb exit\n"); ++} ++ ++module_init(rtusb_init); ++module_exit(rtusb_exit); ++ ++ ++ ++ ++/*--------------------------------------------------------------------- */ ++/* function declarations */ ++/*--------------------------------------------------------------------- */ ++ ++/* ++======================================================================== ++Routine Description: ++ MLME kernel thread. ++ ++Arguments: ++ *Context the pAd, driver control block pointer ++ ++Return Value: ++ 0 close the thread ++ ++Note: ++======================================================================== ++*/ ++INT MlmeThread( ++ IN void *Context) ++{ ++ RTMP_ADAPTER *pAd; ++ RTMP_OS_TASK *pTask; ++ int status; ++ status = 0; ++ ++ pTask = (RTMP_OS_TASK *)Context; ++ pAd = (PRTMP_ADAPTER)pTask->priv; ++ ++ RtmpOSTaskCustomize(pTask); ++ ++ while(!pTask->task_killed) ++ { ++#ifdef KTHREAD_SUPPORT ++ RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); ++#else ++ RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); ++ ++ /* unlock the device pointers */ ++ if (status != 0) ++ { ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ break; ++ } ++#endif ++ ++ /* lock the device pointers , need to check if required*/ ++ //down(&(pAd->usbdev_semaphore)); ++ ++ if (!pAd->PM_FlgSuspend) ++ MlmeHandler(pAd); ++ } ++ ++ /* notify the exit routine that we're actually exiting now ++ * ++ * complete()/wait_for_completion() is similar to up()/down(), ++ * except that complete() is safe in the case where the structure ++ * is getting deleted in a parallel mode of execution (i.e. just ++ * after the down() -- that's necessary for the thread-shutdown ++ * case. ++ * ++ * complete_and_exit() goes even further than this -- it is safe in ++ * the case that the thread of the caller is going away (not just ++ * the structure) -- this is necessary for the module-remove case. ++ * This is important in preemption kernels, which transfer the flow ++ * of execution immediately upon a complete(). ++ */ ++ DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__FUNCTION__)); ++#ifndef KTHREAD_SUPPORT ++ pTask->taskPID = THREAD_PID_INIT_VALUE; ++ complete_and_exit (&pTask->taskComplete, 0); ++#endif ++ return 0; ++ ++} ++ ++ ++/* ++======================================================================== ++Routine Description: ++ USB command kernel thread. ++ ++Arguments: ++ *Context the pAd, driver control block pointer ++ ++Return Value: ++ 0 close the thread ++ ++Note: ++======================================================================== ++*/ ++INT RTUSBCmdThread( ++ IN void * Context) ++{ ++ RTMP_ADAPTER *pAd; ++ RTMP_OS_TASK *pTask; ++ int status; ++ status = 0; ++ ++ pTask = (RTMP_OS_TASK *)Context; ++ pAd = (PRTMP_ADAPTER)pTask->priv; ++ ++ RtmpOSTaskCustomize(pTask); ++ ++ NdisAcquireSpinLock(&pAd->CmdQLock); ++ pAd->CmdQ.CmdQState = RTMP_TASK_STAT_RUNNING; ++ NdisReleaseSpinLock(&pAd->CmdQLock); ++ ++ while (pAd && pAd->CmdQ.CmdQState == RTMP_TASK_STAT_RUNNING) ++ { ++#ifdef KTHREAD_SUPPORT ++ RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); ++#else ++ /* lock the device pointers */ ++ RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); ++ ++ if (status != 0) ++ { ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ break; ++ } ++#endif ++ ++ if (pAd->CmdQ.CmdQState == RTMP_TASK_STAT_STOPED) ++ break; ++ ++ if (!pAd->PM_FlgSuspend) ++ CMDHandler(pAd); ++ } ++ ++ if (pAd && !pAd->PM_FlgSuspend) ++ { // Clear the CmdQElements. ++ CmdQElmt *pCmdQElmt = NULL; ++ ++ NdisAcquireSpinLock(&pAd->CmdQLock); ++ pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; ++ while(pAd->CmdQ.size) ++ { ++ RTUSBDequeueCmd(&pAd->CmdQ, &pCmdQElmt); ++ if (pCmdQElmt) ++ { ++ if (pCmdQElmt->CmdFromNdis == TRUE) ++ { ++ if (pCmdQElmt->buffer != NULL) ++ os_free_mem(pAd, pCmdQElmt->buffer); ++ os_free_mem(pAd, (PUCHAR)pCmdQElmt); ++ } ++ else ++ { ++ if ((pCmdQElmt->buffer != NULL) && (pCmdQElmt->bufferlength != 0)) ++ os_free_mem(pAd, pCmdQElmt->buffer); ++ os_free_mem(pAd, (PUCHAR)pCmdQElmt); ++ } ++ } ++ } ++ ++ NdisReleaseSpinLock(&pAd->CmdQLock); ++ } ++ /* notify the exit routine that we're actually exiting now ++ * ++ * complete()/wait_for_completion() is similar to up()/down(), ++ * except that complete() is safe in the case where the structure ++ * is getting deleted in a parallel mode of execution (i.e. just ++ * after the down() -- that's necessary for the thread-shutdown ++ * case. ++ * ++ * complete_and_exit() goes even further than this -- it is safe in ++ * the case that the thread of the caller is going away (not just ++ * the structure) -- this is necessary for the module-remove case. ++ * This is important in preemption kernels, which transfer the flow ++ * of execution immediately upon a complete(). ++ */ ++ DBGPRINT(RT_DEBUG_TRACE,( "<---RTUSBCmdThread\n")); ++ ++#ifndef KTHREAD_SUPPORT ++ pTask->taskPID = THREAD_PID_INIT_VALUE; ++ complete_and_exit (&pTask->taskComplete, 0); ++#endif ++ return 0; ++ ++} ++ ++ ++VOID RTUSBWatchDog(IN RTMP_ADAPTER *pAd) ++{ ++ PHT_TX_CONTEXT pHTTXContext; ++ int idx; ++ ULONG irqFlags; ++ PURB pUrb; ++ BOOLEAN needDumpSeq = FALSE; ++ UINT32 MACValue; ++ UINT32 TxRxQ_Pcnt; ++ ++ idx = 0; ++ RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); ++ if ((MACValue & 0xff) !=0 ) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("TX QUEUE 0 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", MACValue)); ++ RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40012); ++ while((MACValue &0xff) != 0 && (idx++ < 10)) ++ { ++ RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); ++ RTMPusecDelay(1); ++ } ++ RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40006); ++ } ++ ++ if (pAd->watchDogRxOverFlowCnt >= 2) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Rx Bulk-In hanged! Cancel the pending Rx bulks request!\n")); ++ if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_BULKIN_RESET | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Call CMDTHREAD_RESET_BULK_IN to cancel the pending Rx Bulk!\n")); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); ++ needDumpSeq = TRUE; ++ } ++ pAd->watchDogRxOverFlowCnt = 0; ++ } ++ ++ RTUSBReadMACRegister(pAd, 0x438, &TxRxQ_Pcnt); ++ ++ for (idx = 0; idx < NUM_OF_TX_RING; idx++) ++ { ++ pUrb = NULL; ++ ++ RTMP_IRQ_LOCK(&pAd->BulkOutLock[idx], irqFlags); ++ if ((pAd->BulkOutPending[idx] == TRUE) && pAd->watchDogTxPendingCnt) ++ { ++ INT actual_length=0,transfer_buffer_length=0; ++ BOOLEAN isDataPacket=FALSE; ++ pAd->watchDogTxPendingCnt[idx]++; ++ ++ if ((pAd->watchDogTxPendingCnt[idx] > 2) && ++ (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_BULKOUT_RESET))) ++ ) ++ { ++ // FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! ++ pHTTXContext = (PHT_TX_CONTEXT)(&pAd->TxContext[idx]); ++ if (pHTTXContext->IRPPending) ++ { // Check TxContext. ++ pUrb = pHTTXContext->pUrb; ++ ++ actual_length=pUrb->actual_length; ++ transfer_buffer_length=pUrb->transfer_buffer_length; ++ isDataPacket=TRUE; ++ } ++ else if (idx == MGMTPIPEIDX) ++ { ++ PTX_CONTEXT pMLMEContext, pNULLContext, pPsPollContext; ++ ++ //Check MgmtContext. ++ pMLMEContext = (PTX_CONTEXT)(pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa); ++ pPsPollContext = (PTX_CONTEXT)(&pAd->PsPollContext); ++ pNULLContext = (PTX_CONTEXT)(&pAd->NullContext); ++ ++ if (pMLMEContext->IRPPending) ++ { ++ ASSERT(pMLMEContext->IRPPending); ++ pUrb = pMLMEContext->pUrb; ++ } ++ else if (pNULLContext->IRPPending) ++ { ++ ASSERT(pNULLContext->IRPPending); ++ pUrb = pNULLContext->pUrb; ++ } ++ else if (pPsPollContext->IRPPending) ++ { ++ ASSERT(pPsPollContext->IRPPending); ++ pUrb = pPsPollContext->pUrb; ++ } ++ } ++ ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); ++ ++ ++ printk("%d:%d LTL=%d , TL=%d L:%d\n",idx,pAd->watchDogTxPendingCnt[idx],pAd->TransferedLength[idx] ++ ,actual_length,transfer_buffer_length); ++ ++ if (pUrb) ++ { ++ if ((isDataPacket ++ && pAd->TransferedLength[idx]==actual_length ++ && pAd->TransferedLength[idx]watchDogTxPendingCnt[idx]>3) ++ || isDataPacket==FALSE || pAd->watchDogTxPendingCnt[idx]>6) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Tx Bulk-Out hanged! Cancel the pending Tx bulks request of idx(%d)!\n", idx)); ++ DBGPRINT(RT_DEBUG_TRACE, ("Unlink the pending URB!\n")); ++ // unlink it now ++ RTUSB_UNLINK_URB(pUrb); ++ // Sleep 200 microseconds to give cancellation time to work ++ //RTMPusecDelay(200); ++ needDumpSeq = TRUE; ++ } ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_ERROR, ("Unkonw bulkOut URB maybe hanged!!!!!!!!!!!!\n")); ++ } ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); ++ } ++ ++ if (isDataPacket==TRUE) ++ pAd->TransferedLength[idx]=actual_length; ++ } ++ else ++ { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); ++ } ++ } ++ ++ // For Sigma debug, dump the ba_reordering sequence. ++ if((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) ++ { ++ USHORT Idx; ++ PBA_REC_ENTRY pBAEntry = NULL; ++ UCHAR count = 0; ++ struct reordering_mpdu *mpdu_blk; ++ ++ Idx = pAd->MacTab.Content[BSSID_WCID].BARecWcidArray[0]; ++ ++ pBAEntry = &pAd->BATable.BARecEntry[Idx]; ++ if((pBAEntry->list.qlen > 0) && (pBAEntry->list.next != NULL)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("NICUpdateRawCounters():The Queueing pkt in reordering buffer:\n")); ++ NdisAcquireSpinLock(&pBAEntry->RxReRingLock); ++ mpdu_blk = pBAEntry->list.next; ++ while (mpdu_blk) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("\t%d:Seq-%d, bAMSDU-%d!\n", count, mpdu_blk->Sequence, mpdu_blk->bAMSDU)); ++ mpdu_blk = mpdu_blk->next; ++ count++; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("\npBAEntry->LastIndSeq=%d!\n", pBAEntry->LastIndSeq)); ++ NdisReleaseSpinLock(&pBAEntry->RxReRingLock); ++ } ++ } ++} ++ ++/* ++======================================================================== ++Routine Description: ++ Release allocated resources. ++ ++Arguments: ++ *dev Point to the PCI or USB device ++ pAd driver control block pointer ++ ++Return Value: ++ None ++ ++Note: ++======================================================================== ++*/ ++static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) ++{ ++ DBGPRINT(RT_DEBUG_ERROR, ("rtusb_disconnect: unregister usbnet usb-%s-%s\n", ++ dev->bus->bus_name, dev->devpath)); ++ if (!pAd) ++ { ++ usb_put_dev(dev); ++ printk("rtusb_disconnect: pAd == NULL!\n"); ++ return; ++ } ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); ++ ++ // for debug, wait to show some messages to /proc system ++ udelay(1); ++ ++ ++ RtmpPhyNetDevExit(pAd, pAd->net_dev); ++ ++ // FIXME: Shall we need following delay and flush the schedule?? ++ udelay(1); ++ flush_scheduled_work(); ++ udelay(1); ++ ++ // free the root net_device ++ RtmpOSNetDevFree(pAd->net_dev); ++ ++ RtmpRaDevCtrlExit(pAd); ++ ++ // release a use of the usb device structure ++ usb_put_dev(dev); ++ udelay(1); ++ ++ DBGPRINT(RT_DEBUG_ERROR, (" RTUSB disconnect successfully\n")); ++} ++ ++ ++static int __devinit rt2870_probe( ++ IN struct usb_interface *intf, ++ IN struct usb_device *usb_dev, ++ IN const struct usb_device_id *dev_id, ++ IN RTMP_ADAPTER **ppAd) ++{ ++ struct net_device *net_dev = NULL; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) NULL; ++ INT status, rv; ++ PVOID handle; ++ RTMP_OS_NETDEV_OP_HOOK netDevHook; ++ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n")); ++ ++ // Check chipset vendor/product ID ++ //if (RT28XXChipsetCheck(_dev_p) == FALSE) ++ // goto err_out; ++ ++//RtmpDevInit============================================= ++ // Allocate RTMP_ADAPTER adapter structure ++ handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); ++ if (handle == NULL) ++ { ++ printk("rt2870_probe(): Allocate memory for os handle failed!\n"); ++ return -ENOMEM; ++ } ++ ((POS_COOKIE)handle)->pUsb_Dev = usb_dev; ++ ++ rv = RTMPAllocAdapterBlock(handle, &pAd); ++ if (rv != NDIS_STATUS_SUCCESS) ++ { ++ kfree(handle); ++ goto err_out; ++ } ++ ++//USBDevInit============================================== ++ if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE) ++ goto err_out_free_radev; ++ ++ RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_USB); ++ ++//NetDevInit============================================== ++ net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); ++ if (net_dev == NULL) ++ goto err_out_free_radev; ++ ++ // Here are the net_device structure with usb specific parameters. ++ /* for supporting Network Manager. ++ * Set the sysfs physical device reference for the network logical device if set prior to registration will ++ * cause a symlink during initialization. ++ */ ++ SET_NETDEV_DEV(net_dev, &(usb_dev->dev)); ++ ++ pAd->StaCfg.OriDevType = net_dev->type; ++ ++//All done, it's time to register the net device to linux kernel. ++ // Register this device ++ status = RtmpOSNetDevAttach(net_dev, &netDevHook); ++ if (status != 0) ++ goto err_out_free_netdev; ++ ++#ifdef KTHREAD_SUPPORT ++ init_waitqueue_head(&pAd->mlmeTask.kthread_q); ++ init_waitqueue_head(&pAd->timerTask.kthread_q); ++ init_waitqueue_head(&pAd->cmdQTask.kthread_q); ++#endif ++ ++ *ppAd = pAd; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("<===rt2870_probe()!\n")); ++ ++ return 0; ++ ++ /* --------------------------- ERROR HANDLE --------------------------- */ ++err_out_free_netdev: ++ RtmpOSNetDevFree(net_dev); ++ ++err_out_free_radev: ++ RTMPFreeAdapter(pAd); ++ ++err_out: ++ *ppAd = NULL; ++ ++ return -1; ++ ++} +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index 7006e38..63f4774 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -67,7 +67,6 @@ + // Key Descriptor Version of Key Information + #define DESC_TYPE_TKIP 1 + #define DESC_TYPE_AES 2 +-#define DESC_TYPE_MESH 3 + + #define LEN_MSG1_2WAY 0x7f + #define MAX_LEN_OF_EAP_HS 256 +@@ -90,11 +89,17 @@ + #define TKIP_AP_RXMICK_OFFSET (TKIP_AP_TXMICK_OFFSET+LEN_TKIP_TXMICK) + #define TKIP_GTK_LENGTH ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK)) + #define LEN_PTK ((LEN_EAP_KEY)+(LEN_TKIP_KEY)) ++#define MIN_LEN_OF_GTK 5 ++#define LEN_PMK 32 ++#define LEN_PMK_NAME 16 ++#define LEN_NONCE 32 + + // RSN IE Length definition +-#define MAX_LEN_OF_RSNIE 90 ++#define MAX_LEN_OF_RSNIE 255 + #define MIN_LEN_OF_RSNIE 8 + ++#define KEY_LIFETIME 3600 ++ + //EAP Packet Type + #define EAPPacket 0 + #define EAPOLStart 1 +@@ -119,6 +124,29 @@ + #define PEER_MSG3_RETRY_TIMER_CTR 10 + #define GROUP_MSG1_RETRY_TIMER_CTR 20 + ++//#ifdef CONFIG_AP_SUPPORT ++// WPA mechanism retry timer interval ++#define PEER_MSG1_RETRY_EXEC_INTV 1000 // 1 sec ++#define PEER_MSG3_RETRY_EXEC_INTV 3000 // 3 sec ++#define GROUP_KEY_UPDATE_EXEC_INTV 1000 // 1 sec ++#define PEER_GROUP_KEY_UPDATE_INIV 2000 // 2 sec ++ ++#define ENQUEUE_EAPOL_START_TIMER 200 // 200 ms ++ ++// group rekey interval ++#define TIME_REKEY 0 ++#define PKT_REKEY 1 ++#define DISABLE_REKEY 2 ++#define MAX_REKEY 2 ++ ++#define MAX_REKEY_INTER 0x3ffffff ++//#endif // CONFIG_AP_SUPPORT // ++ ++#define GROUP_SUITE 0 ++#define PAIRWISE_SUITE 1 ++#define AKM_SUITE 2 ++#define PMKID_LIST 3 ++ + + #define EAPOL_START_DISABLE 0 + #define EAPOL_START_PSK 1 +@@ -129,8 +157,30 @@ + #define MIX_CIPHER_WPA2_TKIP_ON(x) (((x) & 0x02) != 0) + #define MIX_CIPHER_WPA2_AES_ON(x) (((x) & 0x01) != 0) + ++#ifndef ROUND_UP + #define ROUND_UP(__x, __y) \ + (((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1))) ++#endif ++ ++#define SET_UINT16_TO_ARRARY(_V, _LEN) \ ++{ \ ++ _V[0] = (_LEN & 0xFF00) >> 8; \ ++ _V[1] = (_LEN & 0xFF); \ ++} ++ ++#define INC_UINT16_TO_ARRARY(_V, _LEN) \ ++{ \ ++ UINT16 var_len; \ ++ \ ++ var_len = (_V[0]<<8) | (_V[1]); \ ++ var_len += _LEN; \ ++ \ ++ _V[0] = (var_len & 0xFF00) >> 8; \ ++ _V[1] = (var_len & 0xFF); \ ++} ++ ++#define CONV_ARRARY_TO_UINT16(_V) ((_V[0]<<8) | (_V[1])) ++ + + #define ADD_ONE_To_64BIT_VAR(_V) \ + { \ +@@ -297,6 +347,13 @@ typedef enum _WpaMixPairCipher + WPA_TKIPAES_WPA2_TKIPAES = 0x0F, + } WPA_MIX_PAIR_CIPHER; + ++// 802.1x authentication format ++typedef struct _IEEE8021X_FRAME { ++ UCHAR Version; // 1.0 ++ UCHAR Type; // 0 = EAP Packet ++ USHORT Length; ++} IEEE8021X_FRAME, *PIEEE8021X_FRAME; ++ + typedef struct PACKED _RSN_IE_HEADER_STRUCT { + UCHAR Eid; + UCHAR Length; +@@ -324,4 +381,47 @@ typedef struct PACKED _RSN_CAPABILITY { + USHORT PreAuth:1; + } RSN_CAPABILITY, *PRSN_CAPABILITY; + ++ ++/*======================================== ++ The prototype is defined in cmm_wpa.c ++ ========================================*/ ++BOOLEAN WpaMsgTypeSubst( ++ IN UCHAR EAPType, ++ OUT INT *MsgType); ++ ++VOID PRF( ++ IN UCHAR *key, ++ IN INT key_len, ++ IN UCHAR *prefix, ++ IN INT prefix_len, ++ IN UCHAR *data, ++ IN INT data_len, ++ OUT UCHAR *output, ++ IN INT len); ++ ++int PasswordHash( ++ char *password, ++ unsigned char *ssid, ++ int ssidlength, ++ unsigned char *output); ++ ++PUINT8 GetSuiteFromRSNIE( ++ IN PUINT8 rsnie, ++ IN UINT rsnie_len, ++ IN UINT8 type, ++ OUT UINT8 *count); ++ ++VOID WpaShowAllsuite( ++ IN PUINT8 rsnie, ++ IN UINT rsnie_len); ++ ++VOID RTMPInsertRSNIE( ++ IN PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PUINT8 rsnie_ptr, ++ IN UINT8 rsnie_len, ++ IN PUINT8 pmkid_ptr, ++ IN UINT8 pmkid_len); ++ ++ + #endif +diff --git a/drivers/staging/rt2870/2870_main_dev.c b/drivers/staging/rt2870/2870_main_dev.c +deleted file mode 100644 +index d0ed48b..0000000 +--- a/drivers/staging/rt2870/2870_main_dev.c ++++ /dev/null +@@ -1,1530 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_main.c +- +- Abstract: +- main initialization routines +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Jan Lee 01-10-2005 modified +- Sample Jun/01/07 Merge RT2870 and RT2860 drivers. +-*/ +- +-#include "rt_config.h" +- +- +-// Following information will be show when you run 'modinfo' +-// *** If you have a solution for the bug in current version of driver, please mail to me. +-// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** +-MODULE_AUTHOR("Paul Lin "); +-MODULE_DESCRIPTION(RT28xx_CHIP_NAME " Wireless LAN Linux Driver"); +-MODULE_LICENSE("GPL"); +-#ifdef MODULE_VERSION +-MODULE_VERSION(STA_DRIVER_VERSION); +-#endif +-MODULE_ALIAS("rt3070sta"); +- +-/* Kernel thread and vars, which handles packets that are completed. Only +- * packets that have a "complete" function are sent here. This way, the +- * completion is run out of kernel context, and doesn't block the rest of +- * the stack. */ +- +-extern INT __devinit rt28xx_probe(IN void *_dev_p, IN void *_dev_id_p, +- IN UINT argc, OUT PRTMP_ADAPTER *ppAd); +- +-struct usb_device_id rtusb_usb_id[] = { +- { USB_DEVICE(0x148F, 0x2770) }, /* Ralink */ +- { USB_DEVICE(0x1737, 0x0071) }, /* Linksys WUSB600N */ +- { USB_DEVICE(0x1737, 0x0070) }, /* Linksys */ +- { USB_DEVICE(0x148F, 0x2870) }, /* Ralink */ +- { USB_DEVICE(0x148F, 0x3070) }, /* Ralink 3070 */ +- { USB_DEVICE(0x148F, 0x3071) }, /* Ralink 3071 */ +- { USB_DEVICE(0x148F, 0x3072) }, /* Ralink 3072 */ +- { USB_DEVICE(0x0B05, 0x1731) }, /* Asus */ +- { USB_DEVICE(0x0B05, 0x1732) }, /* Asus */ +- { USB_DEVICE(0x0B05, 0x1742) }, /* Asus */ +- { USB_DEVICE(0x0DF6, 0x0017) }, /* Sitecom */ +- { USB_DEVICE(0x0DF6, 0x002B) }, /* Sitecom */ +- { USB_DEVICE(0x0DF6, 0x002C) }, /* Sitecom */ +- { USB_DEVICE(0x0DF6, 0x003E) }, /* Sitecom 3070 */ +- { USB_DEVICE(0x0DF6, 0x002D) }, /* Sitecom */ +- { USB_DEVICE(0x0DF6, 0x0039) }, /* Sitecom 2770 */ +- { USB_DEVICE(0x0DF6, 0x003F) }, /* Sitecom WL-608 */ +- { USB_DEVICE(0x14B2, 0x3C06) }, /* Conceptronic */ +- { USB_DEVICE(0x14B2, 0x3C28) }, /* Conceptronic */ +- { USB_DEVICE(0x2019, 0xED06) }, /* Planex Communications, Inc. */ +- { USB_DEVICE(0x2019, 0xED14) }, /* Planex Communications, Inc. */ +- { USB_DEVICE(0x2019, 0xAB25) }, /* Planex Communications, Inc. RT3070 */ +- { USB_DEVICE(0x07D1, 0x3C09) }, /* D-Link */ +- { USB_DEVICE(0x07D1, 0x3C11) }, /* D-Link */ +- { USB_DEVICE(0x2001, 0x3C09) }, /* D-Link */ +- { USB_DEVICE(0x2001, 0x3C0A) }, /* D-Link 3072*/ +- { USB_DEVICE(0x14B2, 0x3C07) }, /* AL */ +- { USB_DEVICE(0x14B2, 0x3C12) }, /* AL 3070 */ +- { USB_DEVICE(0x050D, 0x8053) }, /* Belkin */ +- { USB_DEVICE(0x050D, 0x815C) }, /* Belkin */ +- { USB_DEVICE(0x050D, 0x825a) }, /* Belkin */ +- { USB_DEVICE(0x14B2, 0x3C23) }, /* Airlink */ +- { USB_DEVICE(0x14B2, 0x3C27) }, /* Airlink */ +- { USB_DEVICE(0x07AA, 0x002F) }, /* Corega */ +- { USB_DEVICE(0x07AA, 0x003C) }, /* Corega */ +- { USB_DEVICE(0x07AA, 0x003F) }, /* Corega */ +- { USB_DEVICE(0x18C5, 0x0012) }, /* Corega 3070 */ +- { USB_DEVICE(0x1044, 0x800B) }, /* Gigabyte */ +- { USB_DEVICE(0x1044, 0x800D) }, /* Gigabyte GN-WB32L 3070 */ +- { USB_DEVICE(0x15A9, 0x0006) }, /* Sparklan */ +- { USB_DEVICE(0x083A, 0xB522) }, /* SMC */ +- { USB_DEVICE(0x083A, 0xA618) }, /* SMC */ +- { USB_DEVICE(0x083A, 0x8522) }, /* Arcadyan */ +- { USB_DEVICE(0x083A, 0x7512) }, /* Arcadyan 2770 */ +- { USB_DEVICE(0x083A, 0x7522) }, /* Arcadyan */ +- { USB_DEVICE(0x083A, 0x7511) }, /* Arcadyan 3070 */ +- { USB_DEVICE(0x0CDE, 0x0022) }, /* ZCOM */ +- { USB_DEVICE(0x0586, 0x3416) }, /* Zyxel */ +- { USB_DEVICE(0x0CDE, 0x0025) }, /* Zyxel */ +- { USB_DEVICE(0x1740, 0x9701) }, /* EnGenius */ +- { USB_DEVICE(0x1740, 0x9702) }, /* EnGenius */ +- { USB_DEVICE(0x1740, 0x9703) }, /* EnGenius 3070 */ +- { USB_DEVICE(0x0471, 0x200f) }, /* Philips */ +- { USB_DEVICE(0x14B2, 0x3C25) }, /* Draytek */ +- { USB_DEVICE(0x13D3, 0x3247) }, /* AzureWave */ +- { USB_DEVICE(0x13D3, 0x3273) }, /* AzureWave 3070*/ +- { USB_DEVICE(0x083A, 0x6618) }, /* Accton */ +- { USB_DEVICE(0x15c5, 0x0008) }, /* Amit */ +- { USB_DEVICE(0x0E66, 0x0001) }, /* Hawking */ +- { USB_DEVICE(0x0E66, 0x0003) }, /* Hawking */ +- { USB_DEVICE(0x129B, 0x1828) }, /* Siemens */ +- { USB_DEVICE(0x157E, 0x300E) }, /* U-Media */ +- { USB_DEVICE(0x050d, 0x805c) }, +- { USB_DEVICE(0x1482, 0x3C09) }, /* Abocom*/ +- { USB_DEVICE(0x14B2, 0x3C09) }, /* Alpha */ +- { USB_DEVICE(0x04E8, 0x2018) }, /* samsung */ +- { USB_DEVICE(0x07B8, 0x3070) }, /* AboCom 3070 */ +- { USB_DEVICE(0x07B8, 0x3071) }, /* AboCom 3071 */ +- { USB_DEVICE(0x07B8, 0x2870) }, /* AboCom */ +- { USB_DEVICE(0x07B8, 0x2770) }, /* AboCom */ +- { USB_DEVICE(0x07B8, 0x3072) }, /* Abocom 3072 */ +- { USB_DEVICE(0x7392, 0x7711) }, /* Edimax 3070 */ +- { USB_DEVICE(0x5A57, 0x0280) }, /* Zinwell */ +- { USB_DEVICE(0x5A57, 0x0282) }, /* Zinwell */ +- { USB_DEVICE(0x1A32, 0x0304) }, /* Quanta 3070 */ +- { USB_DEVICE(0x0789, 0x0162) }, /* Logitec 2870 */ +- { USB_DEVICE(0x0789, 0x0163) }, /* Logitec 2870 */ +- { USB_DEVICE(0x0789, 0x0164) }, /* Logitec 2870 */ +- { USB_DEVICE(0x7392, 0x7717) }, /* Edimax */ +- { USB_DEVICE(0x1EDA, 0x2310) }, /* AirTies 3070 */ +- { USB_DEVICE(0x1737, 0x0077) }, /* Linksys WUSB54GC-EU v3 */ +- { } /* Terminating entry */ +-}; +- +-INT const rtusb_usb_id_len = sizeof(rtusb_usb_id) / sizeof(struct usb_device_id); +-MODULE_DEVICE_TABLE(usb, rtusb_usb_id); +- +-#ifndef PF_NOFREEZE +-#define PF_NOFREEZE 0 +-#endif +- +- +-#ifdef CONFIG_PM +-static int rt2870_suspend(struct usb_interface *intf, pm_message_t state); +-static int rt2870_resume(struct usb_interface *intf); +-#endif // CONFIG_PM // +- +-/**************************************************************************/ +-/**************************************************************************/ +-//tested for kernel 2.6series +-/**************************************************************************/ +-/**************************************************************************/ +-static int rtusb_probe (struct usb_interface *intf, +- const struct usb_device_id *id); +-static void rtusb_disconnect(struct usb_interface *intf); +- +-struct usb_driver rtusb_driver = { +- .name="rt2870", +- .probe=rtusb_probe, +- .disconnect=rtusb_disconnect, +- .id_table=rtusb_usb_id, +- +-#ifdef CONFIG_PM +- suspend: rt2870_suspend, +- resume: rt2870_resume, +-#endif +- }; +- +-#ifdef CONFIG_PM +- +-VOID RT2860RejectPendingPackets( +- IN PRTMP_ADAPTER pAd) +-{ +- // clear PS packets +- // clear TxSw packets +-} +- +-static int rt2870_suspend( +- struct usb_interface *intf, +- pm_message_t state) +-{ +- struct net_device *net_dev; +- PRTMP_ADAPTER pAd = usb_get_intfdata(intf); +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_suspend()\n")); +- net_dev = pAd->net_dev; +- netif_device_detach (net_dev); +- +- pAd->PM_FlgSuspend = 1; +- if (netif_running(net_dev)) { +- RTUSBCancelPendingBulkInIRP(pAd); +- RTUSBCancelPendingBulkOutIRP(pAd); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2870_suspend()\n")); +- return 0; +-} +- +-static int rt2870_resume( +- struct usb_interface *intf) +-{ +- struct net_device *net_dev; +- PRTMP_ADAPTER pAd = usb_get_intfdata(intf); +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_resume()\n")); +- +- pAd->PM_FlgSuspend = 0; +- net_dev = pAd->net_dev; +- netif_device_attach (net_dev); +- netif_start_queue(net_dev); +- netif_carrier_on(net_dev); +- netif_wake_queue(net_dev); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2870_resume()\n")); +- return 0; +-} +-#endif // CONFIG_PM // +- +- +-// Init driver module +-INT __init rtusb_init(void) +-{ +- printk("rtusb init --->\n"); +- return usb_register(&rtusb_driver); +-} +- +-// Deinit driver module +-VOID __exit rtusb_exit(void) +-{ +- usb_deregister(&rtusb_driver); +- printk("<--- rtusb exit\n"); +-} +- +-module_init(rtusb_init); +-module_exit(rtusb_exit); +- +- +- +- +-/*--------------------------------------------------------------------- */ +-/* function declarations */ +-/*--------------------------------------------------------------------- */ +- +-/* +-======================================================================== +-Routine Description: +- MLME kernel thread. +- +-Arguments: +- *Context the pAd, driver control block pointer +- +-Return Value: +- 0 close the thread +- +-Note: +-======================================================================== +-*/ +-INT MlmeThread( +- IN void *Context) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)Context; +- POS_COOKIE pObj; +- int status; +- +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- rtmp_os_thread_init("rt2870MlmeThread", (PVOID)&(pAd->mlmeComplete)); +- +- while (pAd->mlme_kill == 0) +- { +- /* lock the device pointers */ +- //down(&(pAd->mlme_semaphore)); +- status = down_interruptible(&(pAd->mlme_semaphore)); +- +- /* lock the device pointers , need to check if required*/ +- //down(&(pAd->usbdev_semaphore)); +- +- if (!pAd->PM_FlgSuspend) +- MlmeHandler(pAd); +- +- /* unlock the device pointers */ +- //up(&(pAd->usbdev_semaphore)); +- if (status != 0) +- { +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- break; +- } +- } +- +- /* notify the exit routine that we're actually exiting now +- * +- * complete()/wait_for_completion() is similar to up()/down(), +- * except that complete() is safe in the case where the structure +- * is getting deleted in a parallel mode of execution (i.e. just +- * after the down() -- that's necessary for the thread-shutdown +- * case. +- * +- * complete_and_exit() goes even further than this -- it is safe in +- * the case that the thread of the caller is going away (not just +- * the structure) -- this is necessary for the module-remove case. +- * This is important in preemption kernels, which transfer the flow +- * of execution immediately upon a complete(). +- */ +- DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__func__)); +- +- pObj->MLMEThr_pid = NULL; +- +- complete_and_exit (&pAd->mlmeComplete, 0); +- return 0; +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- USB command kernel thread. +- +-Arguments: +- *Context the pAd, driver control block pointer +- +-Return Value: +- 0 close the thread +- +-Note: +-======================================================================== +-*/ +-INT RTUSBCmdThread( +- IN void * Context) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)Context; +- POS_COOKIE pObj; +- int status; +- +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- rtmp_os_thread_init("rt2870CmdThread", (PVOID)&(pAd->CmdQComplete)); +- +- NdisAcquireSpinLock(&pAd->CmdQLock); +- pAd->CmdQ.CmdQState = RT2870_THREAD_RUNNING; +- NdisReleaseSpinLock(&pAd->CmdQLock); +- +- while (pAd->CmdQ.CmdQState == RT2870_THREAD_RUNNING) +- { +- /* lock the device pointers */ +- //down(&(pAd->RTUSBCmd_semaphore)); +- status = down_interruptible(&(pAd->RTUSBCmd_semaphore)); +- +- if (pAd->CmdQ.CmdQState == RT2870_THREAD_STOPED) +- break; +- +- if (status != 0) +- { +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- break; +- } +- /* lock the device pointers , need to check if required*/ +- //down(&(pAd->usbdev_semaphore)); +- +- if (!pAd->PM_FlgSuspend) +- CMDHandler(pAd); +- +- /* unlock the device pointers */ +- //up(&(pAd->usbdev_semaphore)); +- } +- +- if (!pAd->PM_FlgSuspend) +- { // Clear the CmdQElements. +- CmdQElmt *pCmdQElmt = NULL; +- +- NdisAcquireSpinLock(&pAd->CmdQLock); +- pAd->CmdQ.CmdQState = RT2870_THREAD_STOPED; +- while(pAd->CmdQ.size) +- { +- RTUSBDequeueCmd(&pAd->CmdQ, &pCmdQElmt); +- if (pCmdQElmt) +- { +- if (pCmdQElmt->CmdFromNdis == TRUE) +- { +- if (pCmdQElmt->buffer != NULL) +- NdisFreeMemory(pCmdQElmt->buffer, pCmdQElmt->bufferlength, 0); +- +- NdisFreeMemory(pCmdQElmt, sizeof(CmdQElmt), 0); +- } +- else +- { +- if ((pCmdQElmt->buffer != NULL) && (pCmdQElmt->bufferlength != 0)) +- NdisFreeMemory(pCmdQElmt->buffer, pCmdQElmt->bufferlength, 0); +- { +- NdisFreeMemory(pCmdQElmt, sizeof(CmdQElmt), 0); +- } +- } +- } +- } +- +- NdisReleaseSpinLock(&pAd->CmdQLock); +- } +- /* notify the exit routine that we're actually exiting now +- * +- * complete()/wait_for_completion() is similar to up()/down(), +- * except that complete() is safe in the case where the structure +- * is getting deleted in a parallel mode of execution (i.e. just +- * after the down() -- that's necessary for the thread-shutdown +- * case. +- * +- * complete_and_exit() goes even further than this -- it is safe in +- * the case that the thread of the caller is going away (not just +- * the structure) -- this is necessary for the module-remove case. +- * This is important in preemption kernels, which transfer the flow +- * of execution immediately upon a complete(). +- */ +- DBGPRINT(RT_DEBUG_TRACE,( "<---RTUSBCmdThread\n")); +- +- pObj->RTUSBCmdThr_pid = NULL; +- +- complete_and_exit (&pAd->CmdQComplete, 0); +- return 0; +- +-} +- +- +-static void RT2870_TimerQ_Handle(RTMP_ADAPTER *pAd) +-{ +- int status; +- RALINK_TIMER_STRUCT *pTimer; +- RT2870_TIMER_ENTRY *pEntry; +- unsigned long irqFlag; +- +- while(!pAd->TimerFunc_kill) +- { +-// printk("waiting for event!\n"); +- pTimer = NULL; +- +- status = down_interruptible(&(pAd->RTUSBTimer_semaphore)); +- +- if (pAd->TimerQ.status == RT2870_THREAD_STOPED) +- break; +- +- // event happened. +- while(pAd->TimerQ.pQHead) +- { +- RTMP_IRQ_LOCK(&pAd->TimerQLock, irqFlag); +- pEntry = pAd->TimerQ.pQHead; +- if (pEntry) +- { +- pTimer = pEntry->pRaTimer; +- +- // update pQHead +- pAd->TimerQ.pQHead = pEntry->pNext; +- if (pEntry == pAd->TimerQ.pQTail) +- pAd->TimerQ.pQTail = NULL; +- +- // return this queue entry to timerQFreeList. +- pEntry->pNext = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pEntry; +- } +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlag); +- +- if (pTimer) +- { +- if (pTimer->handle != NULL) +- if (!pAd->PM_FlgSuspend) +- pTimer->handle(NULL, (PVOID) pTimer->cookie, NULL, pTimer); +- if ((pTimer->Repeat) && (pTimer->State == FALSE)) +- RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); +- } +- } +- +- if (status != 0) +- { +- pAd->TimerQ.status = RT2870_THREAD_STOPED; +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- break; +- } +- } +-} +- +- +-INT TimerQThread( +- IN OUT PVOID Context) +-{ +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- +- pAd = (PRTMP_ADAPTER)Context; +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- rtmp_os_thread_init("rt2870TimerQHandle", (PVOID)&(pAd->TimerQComplete)); +- +- RT2870_TimerQ_Handle(pAd); +- +- /* notify the exit routine that we're actually exiting now +- * +- * complete()/wait_for_completion() is similar to up()/down(), +- * except that complete() is safe in the case where the structure +- * is getting deleted in a parallel mode of execution (i.e. just +- * after the down() -- that's necessary for the thread-shutdown +- * case. +- * +- * complete_and_exit() goes even further than this -- it is safe in +- * the case that the thread of the caller is going away (not just +- * the structure) -- this is necessary for the module-remove case. +- * This is important in preemption kernels, which transfer the flow +- * of execution immediately upon a complete(). +- */ +- DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__func__)); +- +- pObj->TimerQThr_pid = NULL; +- +- complete_and_exit(&pAd->TimerQComplete, 0); +- return 0; +- +-} +- +- +-RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) +-{ +- RT2870_TIMER_ENTRY *pQNode = NULL, *pQTail; +- unsigned long irqFlags; +- +- +- RTMP_IRQ_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status & RT2870_THREAD_CAN_DO_INSERT) +- { +- if(pAd->TimerQ.pQPollFreeList) +- { +- pQNode = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pQNode->pNext; +- +- pQNode->pRaTimer = pTimer; +- pQNode->pNext = NULL; +- +- pQTail = pAd->TimerQ.pQTail; +- if (pAd->TimerQ.pQTail != NULL) +- pQTail->pNext = pQNode; +- pAd->TimerQ.pQTail = pQNode; +- if (pAd->TimerQ.pQHead == NULL) +- pAd->TimerQ.pQHead = pQNode; +- } +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlags); +- +- if (pQNode) +- up(&pAd->RTUSBTimer_semaphore); +- //wake_up(&timerWaitQ); +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlags); +- } +- return pQNode; +-} +- +- +-BOOLEAN RT2870_TimerQ_Remove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) +-{ +- RT2870_TIMER_ENTRY *pNode, *pPrev = NULL; +- unsigned long irqFlags; +- +- RTMP_IRQ_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status >= RT2870_THREAD_INITED) +- { +- pNode = pAd->TimerQ.pQHead; +- while (pNode) +- { +- if (pNode->pRaTimer == pTimer) +- break; +- pPrev = pNode; +- pNode = pNode->pNext; +- } +- +- // Now move it to freeList queue. +- if (pNode) +- { +- if (pNode == pAd->TimerQ.pQHead) +- pAd->TimerQ.pQHead = pNode->pNext; +- if (pNode == pAd->TimerQ.pQTail) +- pAd->TimerQ.pQTail = pPrev; +- if (pPrev != NULL) +- pPrev->pNext = pNode->pNext; +- +- // return this queue entry to timerQFreeList. +- pNode->pNext = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pNode; +- } +- } +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlags); +- +- return TRUE; +-} +- +- +-void RT2870_TimerQ_Exit(RTMP_ADAPTER *pAd) +-{ +- RT2870_TIMER_ENTRY *pTimerQ; +- unsigned long irqFlags; +- +- RTMP_IRQ_LOCK(&pAd->TimerQLock, irqFlags); +- while (pAd->TimerQ.pQHead) +- { +- pTimerQ = pAd->TimerQ.pQHead; +- pAd->TimerQ.pQHead = pTimerQ->pNext; +- // remove the timeQ +- } +- pAd->TimerQ.pQPollFreeList = NULL; +- os_free_mem(pAd, pAd->TimerQ.pTimerQPoll); +- pAd->TimerQ.pQTail = NULL; +- pAd->TimerQ.pQHead = NULL; +- pAd->TimerQ.status = RT2870_THREAD_STOPED; +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlags); +- +-} +- +- +-void RT2870_TimerQ_Init(RTMP_ADAPTER *pAd) +-{ +- int i; +- RT2870_TIMER_ENTRY *pQNode, *pEntry; +- unsigned long irqFlags; +- +- NdisAllocateSpinLock(&pAd->TimerQLock); +- +- RTMP_IRQ_LOCK(&pAd->TimerQLock, irqFlags); +- NdisZeroMemory(&pAd->TimerQ, sizeof(pAd->TimerQ)); +- //InterlockedExchange(&pAd->TimerQ.count, 0); +- +- /* Initialise the wait q head */ +- //init_waitqueue_head(&timerWaitQ); +- +- os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, sizeof(RT2870_TIMER_ENTRY) * TIMER_QUEUE_SIZE_MAX); +- if (pAd->TimerQ.pTimerQPoll) +- { +- pEntry = NULL; +- pQNode = (RT2870_TIMER_ENTRY *)pAd->TimerQ.pTimerQPoll; +- for (i = 0 ;i pNext = pEntry; +- pEntry = pQNode; +- pQNode++; +- } +- pAd->TimerQ.pQPollFreeList = pEntry; +- pAd->TimerQ.pQHead = NULL; +- pAd->TimerQ.pQTail = NULL; +- pAd->TimerQ.status = RT2870_THREAD_INITED; +- } +- RTMP_IRQ_UNLOCK(&pAd->TimerQLock, irqFlags); +-} +- +- +-VOID RT2870_WatchDog(IN RTMP_ADAPTER *pAd) +-{ +- PHT_TX_CONTEXT pHTTXContext; +- int idx; +- ULONG irqFlags; +- PURB pUrb; +- BOOLEAN needDumpSeq = FALSE; +- UINT32 MACValue; +- +- +- idx = 0; +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- if ((MACValue & 0xff) !=0 ) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TX QUEUE 0 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", MACValue)); +- RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40012); +- while((MACValue &0xff) != 0 && (idx++ < 10)) +- { +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- NdisMSleep(1); +- } +- RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40006); +- } +- +-//PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) +- idx = 0; +- if ((MACValue & 0xff00) !=0 ) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TX QUEUE 1 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", MACValue)); +- RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf4000a); +- while((MACValue &0xff00) != 0 && (idx++ < 10)) +- { +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- NdisMSleep(1); +- } +- RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40006); +- } +- +- if (pAd->watchDogRxOverFlowCnt >= 2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Rx Bulk-In hanged! Cancel the pending Rx bulks request!\n")); +- if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_BULKIN_RESET | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Call CMDTHREAD_RESET_BULK_IN to cancel the pending Rx Bulk!\n")); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); +- needDumpSeq = TRUE; +- } +- pAd->watchDogRxOverFlowCnt = 0; +- } +- +- +- for (idx = 0; idx < NUM_OF_TX_RING; idx++) +- { +- pUrb = NULL; +- +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[idx], irqFlags); +- if ((pAd->BulkOutPending[idx] == TRUE) && pAd->watchDogTxPendingCnt) +- { +- pAd->watchDogTxPendingCnt[idx]++; +- +- if ((pAd->watchDogTxPendingCnt[idx] > 2) && +- (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_BULKOUT_RESET))) +- ) +- { +- // FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! +- pHTTXContext = (PHT_TX_CONTEXT)(&pAd->TxContext[idx]); +- if (pHTTXContext->IRPPending) +- { // Check TxContext. +- pUrb = pHTTXContext->pUrb; +- } +- else if (idx == MGMTPIPEIDX) +- { +- PTX_CONTEXT pMLMEContext, pNULLContext, pPsPollContext; +- +- //Check MgmtContext. +- pMLMEContext = (PTX_CONTEXT)(pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa); +- pPsPollContext = (PTX_CONTEXT)(&pAd->PsPollContext); +- pNULLContext = (PTX_CONTEXT)(&pAd->NullContext); +- +- if (pMLMEContext->IRPPending) +- { +- ASSERT(pMLMEContext->IRPPending); +- pUrb = pMLMEContext->pUrb; +- } +- else if (pNULLContext->IRPPending) +- { +- ASSERT(pNULLContext->IRPPending); +- pUrb = pNULLContext->pUrb; +- } +- else if (pPsPollContext->IRPPending) +- { +- ASSERT(pPsPollContext->IRPPending); +- pUrb = pPsPollContext->pUrb; +- } +- } +- +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Tx Bulk-Out hanged! Cancel the pending Tx bulks request of idx(%d)!\n", idx)); +- if (pUrb) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Unlink the pending URB!\n")); +- // unlink it now +- RTUSB_UNLINK_URB(pUrb); +- // Sleep 200 microseconds to give cancellation time to work +- RTMPusecDelay(200); +- needDumpSeq = TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Unkonw bulkOut URB maybe hanged!!!!!!!!!!!!\n")); +- } +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); +- } +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); +- } +- } +- +- // For Sigma debug, dump the ba_reordering sequence. +- if((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) +- { +- USHORT Idx; +- PBA_REC_ENTRY pBAEntry = NULL; +- UCHAR count = 0; +- struct reordering_mpdu *mpdu_blk; +- +- Idx = pAd->MacTab.Content[BSSID_WCID].BARecWcidArray[0]; +- +- pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- if((pBAEntry->list.qlen > 0) && (pBAEntry->list.next != NULL)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("NICUpdateRawCounters():The Queueing pkt in reordering buffer:\n")); +- NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- mpdu_blk = pBAEntry->list.next; +- while (mpdu_blk) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("\t%d:Seq-%d, bAMSDU-%d!\n", count, mpdu_blk->Sequence, mpdu_blk->bAMSDU)); +- mpdu_blk = mpdu_blk->next; +- count++; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("\npBAEntry->LastIndSeq=%d!\n", pBAEntry->LastIndSeq)); +- NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +- } +- } +-} +- +-/* +-======================================================================== +-Routine Description: +- Release allocated resources. +- +-Arguments: +- *dev Point to the PCI or USB device +- pAd driver control block pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-static void _rtusb_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) +-{ +- struct net_device *net_dev = NULL; +- +- +- DBGPRINT(RT_DEBUG_ERROR, ("rtusb_disconnect: unregister usbnet usb-%s-%s\n", +- dev->bus->bus_name, dev->devpath)); +- if (!pAd) +- { +- usb_put_dev(dev); +- +- printk("rtusb_disconnect: pAd == NULL!\n"); +- return; +- } +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); +- +- +- +- // for debug, wait to show some messages to /proc system +- udelay(1); +- +- +- +- +- net_dev = pAd->net_dev; +- if (pAd->net_dev != NULL) +- { +- printk("rtusb_disconnect: unregister_netdev(), dev->name=%s!\n", net_dev->name); +- unregister_netdev (pAd->net_dev); +- } +- udelay(1); +- flush_scheduled_work(); +- udelay(1); +- +- // free net_device memory +- free_netdev(net_dev); +- +- // free adapter memory +- RTMPFreeAdapter(pAd); +- +- // release a use of the usb device structure +- usb_put_dev(dev); +- udelay(1); +- +- DBGPRINT(RT_DEBUG_ERROR, (" RTUSB disconnect successfully\n")); +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Probe RT28XX chipset. +- +-Arguments: +- *dev Point to the PCI or USB device +- interface +- *id_table Point to the PCI or USB device ID +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-static int rtusb_probe (struct usb_interface *intf, +- const struct usb_device_id *id) +-{ +- PRTMP_ADAPTER pAd; +- return (int)rt28xx_probe((void *)intf, (void *)id, 0, &pAd); +-} +- +- +-static void rtusb_disconnect(struct usb_interface *intf) +-{ +- struct usb_device *dev = interface_to_usbdev(intf); +- PRTMP_ADAPTER pAd; +- +- +- pAd = usb_get_intfdata(intf); +- usb_set_intfdata(intf, NULL); +- +- _rtusb_disconnect(dev, pAd); +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Close kernel threads. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- NONE +- +-Note: +-======================================================================== +-*/ +-VOID RT28xxThreadTerminate( +- IN RTMP_ADAPTER *pAd) +-{ +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- INT ret; +- +- +- // Sleep 50 milliseconds so pending io might finish normally +- RTMPusecDelay(50000); +- +- // We want to wait until all pending receives and sends to the +- // device object. We cancel any +- // irps. Wait until sends and receives have stopped. +- RTUSBCancelPendingIRPs(pAd); +- +- // Terminate Threads +- +- if (pid_nr(pObj->TimerQThr_pid) > 0) +- { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- printk("Terminate the TimerQThr_pid=%d!\n", pid_nr(pObj->TimerQThr_pid)); +- mb(); +- pAd->TimerFunc_kill = 1; +- mb(); +- ret = kill_pid(pObj->TimerQThr_pid, SIGTERM, 1); +- if (ret) +- { +- printk(KERN_WARNING "%s: unable to stop TimerQThread, pid=%d, ret=%d!\n", +- pAd->net_dev->name, pid_nr(pObj->TimerQThr_pid), ret); +- } +- else +- { +- wait_for_completion(&pAd->TimerQComplete); +- pObj->TimerQThr_pid = NULL; +- } +- } +- +- if (pid_nr(pObj->MLMEThr_pid) > 0) +- { +- printk("Terminate the MLMEThr_pid=%d!\n", pid_nr(pObj->MLMEThr_pid)); +- mb(); +- pAd->mlme_kill = 1; +- //RT28XX_MLME_HANDLER(pAd); +- mb(); +- ret = kill_pid(pObj->MLMEThr_pid, SIGTERM, 1); +- if (ret) +- { +- printk (KERN_WARNING "%s: unable to Mlme thread, pid=%d, ret=%d!\n", +- pAd->net_dev->name, pid_nr(pObj->MLMEThr_pid), ret); +- } +- else +- { +- //wait_for_completion (&pAd->notify); +- wait_for_completion (&pAd->mlmeComplete); +- pObj->MLMEThr_pid = NULL; +- } +- } +- +- if (pid_nr(pObj->RTUSBCmdThr_pid) > 0) +- { +- printk("Terminate the RTUSBCmdThr_pid=%d!\n", pid_nr(pObj->RTUSBCmdThr_pid)); +- mb(); +- NdisAcquireSpinLock(&pAd->CmdQLock); +- pAd->CmdQ.CmdQState = RT2870_THREAD_STOPED; +- NdisReleaseSpinLock(&pAd->CmdQLock); +- mb(); +- //RTUSBCMDUp(pAd); +- ret = kill_pid(pObj->RTUSBCmdThr_pid, SIGTERM, 1); +- if (ret) +- { +- printk(KERN_WARNING "%s: unable to RTUSBCmd thread, pid=%d, ret=%d!\n", +- pAd->net_dev->name, pid_nr(pObj->RTUSBCmdThr_pid), ret); +- } +- else +- { +- //wait_for_completion (&pAd->notify); +- wait_for_completion (&pAd->CmdQComplete); +- pObj->RTUSBCmdThr_pid = NULL; +- } +- } +- +- // Kill tasklets +- pAd->mlme_kill = 0; +- pAd->CmdQ.CmdQState = RT2870_THREAD_UNKNOWN; +- pAd->TimerFunc_kill = 0; +-} +- +- +-void kill_thread_task(IN PRTMP_ADAPTER pAd) +-{ +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- tasklet_kill(&pObj->rx_done_task); +- tasklet_kill(&pObj->mgmt_dma_done_task); +- tasklet_kill(&pObj->ac0_dma_done_task); +- tasklet_kill(&pObj->ac1_dma_done_task); +- tasklet_kill(&pObj->ac2_dma_done_task); +- tasklet_kill(&pObj->ac3_dma_done_task); +- tasklet_kill(&pObj->hcca_dma_done_task); +- tasklet_kill(&pObj->tbtt_task); +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Check the chipset vendor/product ID. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- +-Return Value: +- TRUE Check ok +- FALSE Check fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p) +-{ +- struct usb_interface *intf = (struct usb_interface *)_dev_p; +- struct usb_device *dev_p = interface_to_usbdev(intf); +- UINT32 i; +- +- +- for(i=0; idescriptor.idVendor == rtusb_usb_id[i].idVendor && +- dev_p->descriptor.idProduct == rtusb_usb_id[i].idProduct) +- { +- printk("rt2870: idVendor = 0x%x, idProduct = 0x%x\n", +- dev_p->descriptor.idVendor, dev_p->descriptor.idProduct); +- break; +- } +- } +- +- if (i == rtusb_usb_id_len) +- { +- printk("rt2870: Error! Device Descriptor not matching!\n"); +- return FALSE; +- } +- +- return TRUE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Init net device structure. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- *net_dev Point to the net device +- *pAd the raxx interface data pointer +- +-Return Value: +- TRUE Init ok +- FALSE Init fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXNetDevInit( +- IN void *_dev_p, +- IN struct net_device *net_dev, +- IN RTMP_ADAPTER *pAd) +-{ +- struct usb_interface *intf = (struct usb_interface *)_dev_p; +- struct usb_device *dev_p = interface_to_usbdev(intf); +- +- +- pAd->config = &dev_p->config->desc; +- return TRUE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Init net device structure. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- *pAd the raxx interface data pointer +- +-Return Value: +- TRUE Config ok +- FALSE Config fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXProbePostConfig( +- IN void *_dev_p, +- IN RTMP_ADAPTER *pAd, +- IN INT32 interface) +-{ +- struct usb_interface *intf = (struct usb_interface *)_dev_p; +- struct usb_host_interface *iface_desc; +- ULONG BulkOutIdx; +- UINT32 i; +- +- +- /* get the active interface descriptor */ +- iface_desc = intf->cur_altsetting; +- +- /* get # of enpoints */ +- pAd->NumberOfPipes = iface_desc->desc.bNumEndpoints; +- DBGPRINT(RT_DEBUG_TRACE, +- ("NumEndpoints=%d\n", iface_desc->desc.bNumEndpoints)); +- +- /* Configure Pipes */ +- BulkOutIdx = 0; +- +- for(i=0; iNumberOfPipes; i++) +- { +- if ((iface_desc->endpoint[i].desc.bmAttributes == +- USB_ENDPOINT_XFER_BULK) && +- ((iface_desc->endpoint[i].desc.bEndpointAddress & +- USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)) +- { +- pAd->BulkInEpAddr = iface_desc->endpoint[i].desc.bEndpointAddress; +- pAd->BulkInMaxPacketSize = iface_desc->endpoint[i].desc.wMaxPacketSize; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("BULK IN MaximumPacketSize = %d\n", pAd->BulkInMaxPacketSize)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("EP address = 0x%2x\n", iface_desc->endpoint[i].desc.bEndpointAddress)); +- } +- else if ((iface_desc->endpoint[i].desc.bmAttributes == +- USB_ENDPOINT_XFER_BULK) && +- ((iface_desc->endpoint[i].desc.bEndpointAddress & +- USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) +- { +- // there are 6 bulk out EP. EP6 highest priority. +- // EP1-4 is EDCA. EP5 is HCCA. +- pAd->BulkOutEpAddr[BulkOutIdx++] = iface_desc->endpoint[i].desc.bEndpointAddress; +- pAd->BulkOutMaxPacketSize = iface_desc->endpoint[i].desc.wMaxPacketSize; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("BULK OUT MaximumPacketSize = %d\n", pAd->BulkOutMaxPacketSize)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("EP address = 0x%2x \n", iface_desc->endpoint[i].desc.bEndpointAddress)); +- } +- } +- +- if (!(pAd->BulkInEpAddr && pAd->BulkOutEpAddr[0])) +- { +- printk("%s: Could not find both bulk-in and bulk-out endpoints\n", __func__); +- return FALSE; +- } +- +- return TRUE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Disable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd) +-{ +- // no use +-} +- +- +- +-/* +-======================================================================== +-Routine Description: +- Enable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- USB_DMA_CFG_STRUC UsbCfg; +- int i = 0; +- +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); +- RTMPusecDelay(1000); +- i++; +- }while ( i <200); +- +- +- RTMPusecDelay(50); +- GloCfg.field.EnTXWriteBackDDONE = 1; +- GloCfg.field.EnableRxDMA = 1; +- GloCfg.field.EnableTxDMA = 1; +- DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +- UsbCfg.word = 0; +- UsbCfg.field.phyclear = 0; +- /* usb version is 1.1,do not use bulk in aggregation */ +- if (pAd->BulkInMaxPacketSize == 512) +- UsbCfg.field.RxBulkAggEn = 1; +- /* for last packet, PBF might use more than limited, so minus 2 to prevent from error */ +- UsbCfg.field.RxBulkAggLmt = (MAX_RXBULK_SIZE /1024)-3; +- UsbCfg.field.RxBulkAggTOut = 0x80; /* 2006-10-18 */ +- UsbCfg.field.RxBulkEn = 1; +- UsbCfg.field.TxBulkEn = 1; +- +- RTUSBWriteMACRegister(pAd, USB_DMA_CFG, UsbCfg.word); +- +-} +- +-/* +-======================================================================== +-Routine Description: +- Write Beacon buffer to Asic. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER *pAd, +- IN INT apidx, +- IN ULONG FrameLen, +- IN ULONG UpdatePos) +-{ +- PUCHAR pBeaconFrame = NULL; +- UCHAR *ptr; +- UINT i, padding; +- BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; +- UINT32 longValue; +- BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; +- +- +- if (pBeaconFrame == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("pBeaconFrame is NULL!\n")); +- return; +- } +- +- if (pBeaconSync == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("pBeaconSync is NULL!\n")); +- return; +- } +- +- //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) || +- // ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) +- if (bBcnReq == FALSE) +- { +- /* when the ra interface is down, do not send its beacon frame */ +- /* clear all zero */ +- for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); +- } +- pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); +- NdisZeroMemory(pBeaconSync->BeaconTxWI[bcn_idx], TXWI_SIZE); +- } +- else +- { +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- +- if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) +- { // If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. +- pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); +- NdisMoveMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE); +- } +- +- if ((pBeaconSync->BeaconBitMap & (1 << bcn_idx)) != (1 << bcn_idx)) +- { +- for (i=0; iBeaconOffset[bcn_idx] + i, longValue); +- ptr += 4; +- } +- } +- +- ptr = pBeaconSync->BeaconBuf[bcn_idx]; +- padding = (FrameLen & 0x01); +- NdisZeroMemory((PUCHAR)(pBeaconFrame + FrameLen), padding); +- FrameLen += padding; +- for (i = 0 ; i < FrameLen /*HW_BEACON_OFFSET*/; i += 2) +- { +- if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) +- { +- NdisMoveMemory(ptr, pBeaconFrame, 2); +- //shortValue = *ptr + (*(ptr+1)<<8); +- //RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, shortValue); +- RTUSBMultiWrite(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, ptr, 2); +- } +- ptr +=2; +- pBeaconFrame += 2; +- } +- +- pBeaconSync->BeaconBitMap |= (1 << bcn_idx); +- +- // For AP interface, set the DtimBitOn so that we can send Bcast/Mcast frame out after this beacon frame. +- } +- +-} +- +- +-VOID RT2870_BssBeaconStop( +- IN RTMP_ADAPTER *pAd) +-{ +- BEACON_SYNC_STRUCT *pBeaconSync; +- int i, offset; +- BOOLEAN Cancelled = TRUE; +- +- pBeaconSync = pAd->CommonCfg.pBeaconSync; +- if (pBeaconSync && pBeaconSync->EnableBeacon) +- { +- INT NumOfBcn; +- +- NumOfBcn = MAX_MESH_NUM; +- +- RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); +- +- for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); +- NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); +- +- for (offset=0; offsetBeaconOffset[i] + offset, 0x00); +- +- pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; +- pBeaconSync->TimIELocationInBeacon[i] = 0; +- } +- pBeaconSync->BeaconBitMap = 0; +- pBeaconSync->DtimBitOn = 0; +- } +-} +- +- +-VOID RT2870_BssBeaconStart( +- IN RTMP_ADAPTER *pAd) +-{ +- int apidx; +- BEACON_SYNC_STRUCT *pBeaconSync; +-// LARGE_INTEGER tsfTime, deltaTime; +- +- pBeaconSync = pAd->CommonCfg.pBeaconSync; +- if (pBeaconSync && pBeaconSync->EnableBeacon) +- { +- INT NumOfBcn; +- +- NumOfBcn = MAX_MESH_NUM; +- +- for(apidx=0; apidxBeaconBuf[apidx], HW_BEACON_OFFSET); +- pBeaconSync->CapabilityInfoLocationInBeacon[apidx] = CapabilityInfoLocationInBeacon; +- pBeaconSync->TimIELocationInBeacon[apidx] = TimIELocationInBeacon; +- NdisZeroMemory(pBeaconSync->BeaconTxWI[apidx], TXWI_SIZE); +- } +- pBeaconSync->BeaconBitMap = 0; +- pBeaconSync->DtimBitOn = 0; +- pAd->CommonCfg.BeaconUpdateTimer.Repeat = TRUE; +- +- pAd->CommonCfg.BeaconAdjust = 0; +- pAd->CommonCfg.BeaconFactor = 0xffffffff / (pAd->CommonCfg.BeaconPeriod << 10); +- pAd->CommonCfg.BeaconRemain = (0xffffffff % (pAd->CommonCfg.BeaconPeriod << 10)) + 1; +- printk(RT28xx_CHIP_NAME "_BssBeaconStart:BeaconFactor=%d, BeaconRemain=%d!\n", pAd->CommonCfg.BeaconFactor, pAd->CommonCfg.BeaconRemain); +- RTMPSetTimer(&pAd->CommonCfg.BeaconUpdateTimer, pAd->CommonCfg.BeaconPeriod); +- +- } +-} +- +- +-VOID RT2870_BssBeaconInit( +- IN RTMP_ADAPTER *pAd) +-{ +- BEACON_SYNC_STRUCT *pBeaconSync; +- int i; +- +- NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); +- if (pAd->CommonCfg.pBeaconSync) +- { +- pBeaconSync = pAd->CommonCfg.pBeaconSync; +- NdisZeroMemory(pBeaconSync, sizeof(BEACON_SYNC_STRUCT)); +- for(i=0; i < HW_BEACON_MAX_COUNT; i++) +- { +- NdisZeroMemory(pBeaconSync->BeaconBuf[i], HW_BEACON_OFFSET); +- pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; +- pBeaconSync->TimIELocationInBeacon[i] = 0; +- NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); +- } +- pBeaconSync->BeaconBitMap = 0; +- +- //RTMPInitTimer(pAd, &pAd->CommonCfg.BeaconUpdateTimer, GET_TIMER_FUNCTION(BeaconUpdateExec), pAd, TRUE); +- pBeaconSync->EnableBeacon = TRUE; +- } +-} +- +- +-VOID RT2870_BssBeaconExit( +- IN RTMP_ADAPTER *pAd) +-{ +- BEACON_SYNC_STRUCT *pBeaconSync; +- BOOLEAN Cancelled = TRUE; +- int i; +- +- if (pAd->CommonCfg.pBeaconSync) +- { +- pBeaconSync = pAd->CommonCfg.pBeaconSync; +- pBeaconSync->EnableBeacon = FALSE; +- RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); +- pBeaconSync->BeaconBitMap = 0; +- +- for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); +- pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; +- pBeaconSync->TimIELocationInBeacon[i] = 0; +- NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); +- } +- +- NdisFreeMemory(pAd->CommonCfg.pBeaconSync, HW_BEACON_OFFSET * HW_BEACON_MAX_COUNT, 0); +- pAd->CommonCfg.pBeaconSync = NULL; +- } +-} +- +-VOID BeaconUpdateExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)FunctionContext; +- LARGE_INTEGER tsfTime_a;//, tsfTime_b, deltaTime_exp, deltaTime_ab; +- UINT32 delta, remain, remain_low, remain_high; +-// BOOLEAN positive; +- +- ReSyncBeaconTime(pAd); +- +- +- +- RTMP_IO_READ32(pAd, TSF_TIMER_DW0, &tsfTime_a.u.LowPart); +- RTMP_IO_READ32(pAd, TSF_TIMER_DW1, &tsfTime_a.u.HighPart); +- +- +- //positive=getDeltaTime(tsfTime_a, expectedTime, &deltaTime_exp); +- remain_high = pAd->CommonCfg.BeaconRemain * tsfTime_a.u.HighPart; +- remain_low = tsfTime_a.u.LowPart % (pAd->CommonCfg.BeaconPeriod << 10); +- remain = (remain_high + remain_low)%(pAd->CommonCfg.BeaconPeriod << 10); +- delta = (pAd->CommonCfg.BeaconPeriod << 10) - remain; +- +- pAd->CommonCfg.BeaconUpdateTimer.TimerValue = (delta >> 10) + 10; +- +-} +- +diff --git a/drivers/staging/rt2870/Makefile b/drivers/staging/rt2870/Makefile +index 306c331..661cdf9 100644 +--- a/drivers/staging/rt2870/Makefile ++++ b/drivers/staging/rt2870/Makefile +@@ -1,27 +1,36 @@ ++# + obj-$(CONFIG_RT2870) += rt2870sta.o + + # TODO: all of these should be removed + EXTRA_CFLAGS += -DLINUX -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT +-EXTRA_CFLAGS += -DRT2870 -DRT3070 ++EXTRA_CFLAGS += -DRTMP_MAC_USB -DRTMP_USB_SUPPORT -DRT2870 -DRTMP_TIMER_TASK_SUPPORT ++EXTRA_CFLAGS += -DRTMP_RF_RW_SUPPORT -DRTMP_EFUSE_SUPPORT -DRT30xx -DRT3070 + EXTRA_CFLAGS += -DDBG + + rt2870sta-objs := \ +- common/md5.o \ ++ common/crypt_md5.o \ ++ common/crypt_sha2.o \ ++ common/crypt_hmac.o \ + common/mlme.o \ +- common/rtmp_wep.o \ ++ common/cmm_wep.o \ + common/action.o \ + common/cmm_data.o \ + common/rtmp_init.o \ +- common/rtmp_tkip.o \ ++ common/cmm_tkip.o \ ++ common/cmm_aes.o \ + common/cmm_sync.o \ + common/eeprom.o \ + common/cmm_sanity.o \ + common/cmm_info.o \ ++ common/cmm_cfg.o \ + common/cmm_wpa.o \ + common/dfs.o \ + common/spectrum.o \ ++ common/rtmp_timer.o \ ++ common/rt_channel.o \ ++ common/cmm_profile.o \ ++ common/cmm_asic.o \ + sta/assoc.o \ +- sta/aironet.o \ + sta/auth.o \ + sta/auth_rsp.o \ + sta/sync.o \ +@@ -34,10 +43,15 @@ rt2870sta-objs := \ + rt_main_dev.o \ + sta_ioctl.o \ + common/ba_action.o \ +- 2870_main_dev.o \ +- common/2870_rtmp_init.o \ ++ usb_main_dev.o \ ++ rt_usb.o \ ++ common/cmm_mac_usb.o \ + common/rtusb_io.o \ + common/rtusb_bulk.o \ + common/rtusb_data.o \ +- common/cmm_data_2870.o +- ++ common/cmm_data_usb.o \ ++ common/rtmp_mcu.o \ ++ common/ee_efuse.o \ ++ chips/rt30xx.o \ ++ common/rt_rf.o \ ++ chips/rt3070.o +diff --git a/drivers/staging/rt2870/chips/rt3070.c b/drivers/staging/rt2870/chips/rt3070.c +new file mode 100644 +index 0000000..3a6db5e +--- /dev/null ++++ b/drivers/staging/rt2870/chips/rt3070.c +@@ -0,0 +1 @@ ++#include "../../rt2860/chips/rt3070.c" +diff --git a/drivers/staging/rt2870/chips/rt30xx.c b/drivers/staging/rt2870/chips/rt30xx.c +new file mode 100644 +index 0000000..6c56b84 +--- /dev/null ++++ b/drivers/staging/rt2870/chips/rt30xx.c +@@ -0,0 +1 @@ ++#include "../../rt2860/chips/rt30xx.c" +diff --git a/drivers/staging/rt2870/common/2870_rtmp_init.c b/drivers/staging/rt2870/common/2870_rtmp_init.c +deleted file mode 100644 +index f517d9e..0000000 +--- a/drivers/staging/rt2870/common/2870_rtmp_init.c ++++ /dev/null +@@ -1,1730 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- 2870_rtmp_init.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 2002-08-01 created +- John Chang 2004-08-20 RT2561/2661 use scatter-gather scheme +- Jan Lee 2006-09-15 RT2860. Change for 802.11n , EEPROM, Led, BA, HT. +- Sample Lin 2007-05-31 Merge RT2860 and RT2870 drivers. +-*/ +- +-#include "../rt_config.h" +- +- +-static void rx_done_tasklet(unsigned long data); +-static void rt2870_hcca_dma_done_tasklet(unsigned long data); +-static void rt2870_ac3_dma_done_tasklet(unsigned long data); +-static void rt2870_ac2_dma_done_tasklet(unsigned long data); +-static void rt2870_ac1_dma_done_tasklet(unsigned long data); +-static void rt2870_ac0_dma_done_tasklet(unsigned long data); +-static void rt2870_mgmt_dma_done_tasklet(unsigned long data); +-static void rt2870_null_frame_complete_tasklet(unsigned long data); +-static void rt2870_rts_frame_complete_tasklet(unsigned long data); +-static void rt2870_pspoll_frame_complete_tasklet(unsigned long data); +-static void rt2870_dataout_complete_tasklet(unsigned long data); +- +- +-/* +-======================================================================== +-Routine Description: +- Initialize receive data structures. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_RESOURCES +- +-Note: +- Initialize all receive releated private buffer, include those define +- in RTMP_ADAPTER structure and all private data structures. The mahor +- work is to allocate buffer for each packet and chain buffer to +- NDIS packet descriptor. +-======================================================================== +-*/ +-NDIS_STATUS NICInitRecv( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR i; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); +- pObj = pObj; +- +- //InterlockedExchange(&pAd->PendingRx, 0); +- pAd->PendingRx = 0; +- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index +- pAd->NextRxBulkInIndex = 0 ; //RX_RING_SIZE -1; // Rx Bulk pointer +- pAd->NextRxBulkInPosition = 0; +- +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); +- +- //Allocate URB +- pRxContext->pUrb = RTUSB_ALLOC_URB(0); +- if (pRxContext->pUrb == NULL) +- { +- Status = NDIS_STATUS_RESOURCES; +- goto out1; +- } +- +- // Allocate transfer buffer +- pRxContext->TransferBuffer = RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, &pRxContext->data_dma); +- if (pRxContext->TransferBuffer == NULL) +- { +- Status = NDIS_STATUS_RESOURCES; +- goto out1; +- } +- +- NdisZeroMemory(pRxContext->TransferBuffer, MAX_RXBULK_SIZE); +- +- pRxContext->pAd = pAd; +- pRxContext->pIrp = NULL; +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pRxContext->Readable = FALSE; +- //pRxContext->ReorderInUse = FALSE; +- pRxContext->bRxHandling = FALSE; +- pRxContext->BulkInOffset = 0; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitRecv\n")); +- return Status; +- +-out1: +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); +- +- if (NULL != pRxContext->TransferBuffer) +- { +- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, +- pRxContext->TransferBuffer, pRxContext->data_dma); +- pRxContext->TransferBuffer = NULL; +- } +- +- if (NULL != pRxContext->pUrb) +- { +- RTUSB_UNLINK_URB(pRxContext->pUrb); +- RTUSB_FREE_URB(pRxContext->pUrb); +- pRxContext->pUrb = NULL; +- } +- } +- +- return Status; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Initialize transmit data structures. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_RESOURCES +- +-Note: +-======================================================================== +-*/ +-NDIS_STATUS NICInitTransmit( +- IN PRTMP_ADAPTER pAd) +-{ +-#define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \ +- Context->pUrb = RTUSB_ALLOC_URB(0); \ +- if (Context->pUrb == NULL) { \ +- DBGPRINT(RT_DEBUG_ERROR, msg1); \ +- Status = NDIS_STATUS_RESOURCES; \ +- goto err1; } \ +- \ +- Context->TransferBuffer = \ +- (TB_Type)RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, BufferSize, &Context->data_dma); \ +- if (Context->TransferBuffer == NULL) { \ +- DBGPRINT(RT_DEBUG_ERROR, msg2); \ +- Status = NDIS_STATUS_RESOURCES; \ +- goto err2; } +- +-#define LM_URB_FREE(pObj, Context, BufferSize) \ +- if (NULL != Context->pUrb) { \ +- RTUSB_UNLINK_URB(Context->pUrb); \ +- RTUSB_FREE_URB(Context->pUrb); \ +- Context->pUrb = NULL; } \ +- if (NULL != Context->TransferBuffer) { \ +- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \ +- Context->TransferBuffer, \ +- Context->data_dma); \ +- Context->TransferBuffer = NULL; } +- +- UCHAR i, acidx; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- PTX_CONTEXT pNullContext = &(pAd->NullContext); +- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); +- PTX_CONTEXT pRTSContext = &(pAd->RTSContext); +- PTX_CONTEXT pMLMEContext = NULL; +-// PHT_TX_CONTEXT pHTTXContext = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- PVOID RingBaseVa; +-// RTMP_TX_RING *pTxRing; +- RTMP_MGMT_RING *pMgmtRing; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n")); +- pObj = pObj; +- +- // Init 4 set of Tx parameters +- for(acidx = 0; acidx < NUM_OF_TX_RING; acidx++) +- { +- // Initialize all Transmit releated queues +- InitializeQueueHeader(&pAd->TxSwQueue[acidx]); +- +- // Next Local tx ring pointer waiting for buck out +- pAd->NextBulkOutIndex[acidx] = acidx; +- pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag +- //pAd->DataBulkDoneIdx[acidx] = 0; +- } +- +- //pAd->NextMLMEIndex = 0; +- //pAd->PushMgmtIndex = 0; +- //pAd->PopMgmtIndex = 0; +- //InterlockedExchange(&pAd->MgmtQueueSize, 0); +- //InterlockedExchange(&pAd->TxCount, 0); +- +- //pAd->PrioRingFirstIndex = 0; +- //pAd->PrioRingTxCnt = 0; +- +- do +- { +- // +- // TX_RING_SIZE, 4 ACs +- // +- for(acidx=0; acidx<4; acidx++) +- { +- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); +- +- NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT)); +- //Allocate URB +- LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, sizeof(HTTX_BUFFER), Status, +- ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", acidx), +- done, +- ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", acidx), +- out1); +- +- NdisZeroMemory(pHTTXContext->TransferBuffer->Aggregation, 4); +- pHTTXContext->pAd = pAd; +- pHTTXContext->pIrp = NULL; +- pHTTXContext->IRPPending = FALSE; +- pHTTXContext->NextBulkOutPosition = 0; +- pHTTXContext->ENextBulkOutPosition = 0; +- pHTTXContext->CurWritePosition = 0; +- pHTTXContext->CurWriteRealPos = 0; +- pHTTXContext->BulkOutSize = 0; +- pHTTXContext->BulkOutPipeId = acidx; +- pHTTXContext->bRingEmpty = TRUE; +- pHTTXContext->bCopySavePad = FALSE; +- +- pAd->BulkOutPending[acidx] = FALSE; +- } +- +- +- // +- // MGMT_RING_SIZE +- // +- // Allocate MGMT ring descriptor's memory +- pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * sizeof(TX_CONTEXT); +- RTMPAllocateMemory(&pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); +- if (pAd->MgmtDescRing.AllocVa == NULL) +- { +- DBGPRINT_ERR(("Failed to allocate a big buffer for MgmtDescRing!\n")); +- Status = NDIS_STATUS_RESOURCES; +- goto out1; +- } +- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); +- RingBaseVa = pAd->MgmtDescRing.AllocVa; +- +- // Initialize MGMT Ring and associated buffer memory +- pMgmtRing = &pAd->MgmtRing; +- for (i = 0; i < MGMT_RING_SIZE; i++) +- { +- // link the pre-allocated Mgmt buffer to MgmtRing.Cell +- pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT); +- pMgmtRing->Cell[i].AllocVa = RingBaseVa; +- pMgmtRing->Cell[i].pNdisPacket = NULL; +- pMgmtRing->Cell[i].pNextNdisPacket = NULL; +- +- //Allocate URB for MLMEContext +- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; +- pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); +- if (pMLMEContext->pUrb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", i)); +- Status = NDIS_STATUS_RESOURCES; +- goto out2; +- } +- pMLMEContext->pAd = pAd; +- pMLMEContext->pIrp = NULL; +- pMLMEContext->TransferBuffer = NULL; +- pMLMEContext->InUse = FALSE; +- pMLMEContext->IRPPending = FALSE; +- pMLMEContext->bWaitingBulkOut = FALSE; +- pMLMEContext->BulkOutSize = 0; +- pMLMEContext->SelfIdx = i; +- +- // Offset to next ring descriptor address +- RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", i)); +- +- //pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1); +- pAd->MgmtRing.TxSwFreeIdx = MGMT_RING_SIZE; +- pAd->MgmtRing.TxCpuIdx = 0; +- pAd->MgmtRing.TxDmaIdx = 0; +- +- // +- // BEACON_RING_SIZE +- // +- for(i=0; iBeaconContext[i]); +- +- +- NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT)); +- +- //Allocate URB +- LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", i), +- out2, +- ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", i), +- out3); +- +- pBeaconContext->pAd = pAd; +- pBeaconContext->pIrp = NULL; +- pBeaconContext->InUse = FALSE; +- pBeaconContext->IRPPending = FALSE; +- } +- +- // +- // NullContext +- // +- NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT)); +- +- //Allocate URB +- LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX NullContext urb!! \n"), +- out3, +- ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"), +- out4); +- +- pNullContext->pAd = pAd; +- pNullContext->pIrp = NULL; +- pNullContext->InUse = FALSE; +- pNullContext->IRPPending = FALSE; +- +- // +- // RTSContext +- // +- NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT)); +- +- //Allocate URB +- LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX RTSContext urb!! \n"), +- out4, +- ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"), +- out5); +- +- pRTSContext->pAd = pAd; +- pRTSContext->pIrp = NULL; +- pRTSContext->InUse = FALSE; +- pRTSContext->IRPPending = FALSE; +- +- // +- // PsPollContext +- // +- //NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); +- //Allocate URB +- LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), +- out5, +- ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"), +- out6); +- +- pPsPollContext->pAd = pAd; +- pPsPollContext->pIrp = NULL; +- pPsPollContext->InUse = FALSE; +- pPsPollContext->IRPPending = FALSE; +- pPsPollContext->bAggregatible = FALSE; +- pPsPollContext->LastOne = TRUE; +- +- } while (FALSE); +- +- +-done: +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTransmit\n")); +- +- return Status; +- +- /* --------------------------- ERROR HANDLE --------------------------- */ +-out6: +- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); +- +-out5: +- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); +- +-out4: +- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); +- +-out3: +- for(i=0; iBeaconContext[i]); +- if (pBeaconContext) +- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); +- } +- +-out2: +- if (pAd->MgmtDescRing.AllocVa) +- { +- pMgmtRing = &pAd->MgmtRing; +- for(i=0; iMgmtRing.Cell[i].AllocVa; +- if (pMLMEContext) +- LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); +- } +- NdisFreeMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize, 0); +- pAd->MgmtDescRing.AllocVa = NULL; +- } +- +-out1: +- for (acidx = 0; acidx < 4; acidx++) +- { +- PHT_TX_CONTEXT pTxContext = &(pAd->TxContext[acidx]); +- if (pTxContext) +- LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER)); +- } +- +- // Here we didn't have any pre-allocated memory need to free. +- +- return Status; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Allocate DMA memory blocks for send, receive. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +-Note: +-======================================================================== +-*/ +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +-// COUNTER_802_11 pCounter = &pAd->WlanCounters; +- NDIS_STATUS Status; +- INT num; +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); +- +- +- do +- { +- // Init the CmdQ and CmdQLock +- NdisAllocateSpinLock(&pAd->CmdQLock); +- NdisAcquireSpinLock(&pAd->CmdQLock); +- RTUSBInitializeCmdQ(&pAd->CmdQ); +- NdisReleaseSpinLock(&pAd->CmdQLock); +- +- +- NdisAllocateSpinLock(&pAd->MLMEBulkOutLock); +- //NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock); +- NdisAllocateSpinLock(&pAd->BulkOutLock[0]); +- NdisAllocateSpinLock(&pAd->BulkOutLock[1]); +- NdisAllocateSpinLock(&pAd->BulkOutLock[2]); +- NdisAllocateSpinLock(&pAd->BulkOutLock[3]); +- NdisAllocateSpinLock(&pAd->BulkOutLock[4]); +- NdisAllocateSpinLock(&pAd->BulkOutLock[5]); +- NdisAllocateSpinLock(&pAd->BulkInLock); +- +- for (num = 0; num < NUM_OF_TX_RING; num++) +- { +- NdisAllocateSpinLock(&pAd->TxContextQueueLock[num]); +- } +- +-// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX +- +-// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() +-// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() +- +-// for(num=0; numBATable.BARecEntry[num].RxReRingLock); +-// } +- +- // +- // Init Mac Table +- // +-// MacTableInitialize(pAd); +- +- // +- // Init send data structures and related parameters +- // +- Status = NICInitTransmit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- break; +- +- // +- // Init receive data structures and related parameters +- // +- Status = NICInitRecv(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- break; +- +- pAd->PendingIoCount = 1; +- +- } while (FALSE); +- +- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); +- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); +- +- if (pAd->FragFrame.pFragPacket == NULL) +- { +- Status = NDIS_STATUS_RESOURCES; +- } +- +- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); +- return Status; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Calls USB_InterfaceStop and frees memory allocated for the URBs +- calls NdisMDeregisterDevice and frees the memory +- allocated in VNetInitialize for the Adapter Object +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +-#define LM_URB_FREE(pObj, Context, BufferSize) \ +- if (NULL != Context->pUrb) { \ +- RTUSB_UNLINK_URB(Context->pUrb); \ +- RTUSB_FREE_URB(Context->pUrb); \ +- Context->pUrb = NULL; } \ +- if (NULL != Context->TransferBuffer) { \ +- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \ +- Context->TransferBuffer, \ +- Context->data_dma); \ +- Context->TransferBuffer = NULL; } +- +- +- UINT i, acidx; +- PTX_CONTEXT pNullContext = &pAd->NullContext; +- PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; +- PTX_CONTEXT pRTSContext = &pAd->RTSContext; +-// PHT_TX_CONTEXT pHTTXContext; +- //PRTMP_REORDERBUF pReorderBuf; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +-// RTMP_TX_RING *pTxRing; +- +- DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); +- pObj = pObj; +- +- // Free all resources for the RECEIVE buffer queue. +- for(i=0; i<(RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); +- if (pRxContext) +- LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE); +- } +- +- // Free PsPoll frame resource +- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); +- +- // Free NULL frame resource +- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); +- +- // Free RTS frame resource +- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); +- +- +- // Free beacon frame resource +- for(i=0; iBeaconContext[i]); +- if (pBeaconContext) +- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); +- } +- +- +- // Free mgmt frame resource +- for(i = 0; i < MGMT_RING_SIZE; i++) +- { +- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa; +- //LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); +- if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) +- { +- RTMPFreeNdisPacket(pAd, pAd->MgmtRing.Cell[i].pNdisPacket); +- pAd->MgmtRing.Cell[i].pNdisPacket = NULL; +- pMLMEContext->TransferBuffer = NULL; +- } +- +- if (pMLMEContext) +- { +- if (NULL != pMLMEContext->pUrb) +- { +- RTUSB_UNLINK_URB(pMLMEContext->pUrb); +- RTUSB_FREE_URB(pMLMEContext->pUrb); +- pMLMEContext->pUrb = NULL; +- } +- } +- } +- if (pAd->MgmtDescRing.AllocVa) +- NdisFreeMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize, 0); +- +- +- // Free Tx frame resource +- for(acidx=0; acidx<4; acidx++) +- { +- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); +- if (pHTTXContext) +- LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER)); +- } +- +- if (pAd->FragFrame.pFragPacket) +- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); +- +- for(i=0; i<6; i++) +- { +- NdisFreeSpinLock(&pAd->BulkOutLock[i]); +- } +- +- NdisFreeSpinLock(&pAd->BulkInLock); +- NdisFreeSpinLock(&pAd->MLMEBulkOutLock); +- +- NdisFreeSpinLock(&pAd->CmdQLock); +- +- // Clear all pending bulk-out request flags. +- RTUSB_CLEAR_BULK_FLAG(pAd, 0xffffffff); +- +-// NdisFreeSpinLock(&pAd->MacTabLock); +- +-// for(i=0; iBATable.BARecEntry[i].RxReRingLock); +-// } +- +- DBGPRINT(RT_DEBUG_ERROR, ("<--- ReleaseAdapter\n")); +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Allocate memory for adapter control block. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +-Note: +-======================================================================== +-*/ +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd) +-{ +- PUSB_DEV usb_dev; +- POS_COOKIE pObj = (POS_COOKIE) handle; +- +- +- usb_dev = pObj->pUsb_Dev; +- +- pObj->MLMEThr_pid = NULL; +- pObj->RTUSBCmdThr_pid = NULL; +- +- *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); +- +- if (*ppAd) +- { +- NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +- ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle; +- return (NDIS_STATUS_SUCCESS); +- } +- else +- { +- return (NDIS_STATUS_FAILURE); +- } +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Create kernel threads & tasklets. +- +-Arguments: +- *net_dev Pointer to wireless net device interface +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- +-Note: +-======================================================================== +-*/ +-NDIS_STATUS CreateThreads( +- IN struct net_device *net_dev) +-{ +- PRTMP_ADAPTER pAd = net_dev->ml_priv; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- pid_t pid_number; +- +- //init_MUTEX(&(pAd->usbdev_semaphore)); +- +- init_MUTEX_LOCKED(&(pAd->mlme_semaphore)); +- init_completion (&pAd->mlmeComplete); +- +- init_MUTEX_LOCKED(&(pAd->RTUSBCmd_semaphore)); +- init_completion (&pAd->CmdQComplete); +- +- init_MUTEX_LOCKED(&(pAd->RTUSBTimer_semaphore)); +- init_completion (&pAd->TimerQComplete); +- +- // Creat MLME Thread +- pObj->MLMEThr_pid = NULL; +- pid_number = kernel_thread(MlmeThread, pAd, CLONE_VM); +- if (pid_number < 0) +- { +- printk (KERN_WARNING "%s: unable to start Mlme thread\n",pAd->net_dev->name); +- return NDIS_STATUS_FAILURE; +- } +- +- pObj->MLMEThr_pid = find_get_pid(pid_number); +- +- // Wait for the thread to start +- wait_for_completion(&(pAd->mlmeComplete)); +- +- // Creat Command Thread +- pObj->RTUSBCmdThr_pid = NULL; +- pid_number = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM); +- if (pid_number < 0) +- { +- printk (KERN_WARNING "%s: unable to start RTUSBCmd thread\n",pAd->net_dev->name); +- return NDIS_STATUS_FAILURE; +- } +- +- pObj->RTUSBCmdThr_pid = find_get_pid(pid_number); +- +- wait_for_completion(&(pAd->CmdQComplete)); +- +- pObj->TimerQThr_pid = NULL; +- pid_number = kernel_thread(TimerQThread, pAd, CLONE_VM); +- if (pid_number < 0) +- { +- printk (KERN_WARNING "%s: unable to start TimerQThread\n",pAd->net_dev->name); +- return NDIS_STATUS_FAILURE; +- } +- +- pObj->TimerQThr_pid = find_get_pid(pid_number); +- +- // Wait for the thread to start +- wait_for_completion(&(pAd->TimerQComplete)); +- +- // Create receive tasklet +- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG)pAd); +- tasklet_init(&pObj->mgmt_dma_done_task, rt2870_mgmt_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac0_dma_done_task, rt2870_ac0_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac1_dma_done_task, rt2870_ac1_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac2_dma_done_task, rt2870_ac2_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac3_dma_done_task, rt2870_ac3_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->hcca_dma_done_task, rt2870_hcca_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->null_frame_complete_task, rt2870_null_frame_complete_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->rts_frame_complete_task, rt2870_rts_frame_complete_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->pspoll_frame_complete_task, rt2870_pspoll_frame_complete_tasklet, (unsigned long)pAd); +- +- return NDIS_STATUS_SUCCESS; +-} +- +-/* +-======================================================================== +-Routine Description: +- As STA's BSSID is a WC too, it uses shared key table. +- This function write correct unicast TX key to ASIC WCID. +- And we still make a copy in our MacTab.Content[BSSID_WCID].PairwiseKey. +- Caller guarantee TKIP/AES always has keyidx = 0. (pairwise key) +- Caller guarantee WEP calls this function when set Txkey, default key index=0~3. +- +-Arguments: +- pAd Pointer to our adapter +- pKey Pointer to the where the key stored +- +-Return Value: +- NDIS_SUCCESS Add key successfully +- +-Note: +-======================================================================== +-*/ +-VOID RTMPAddBSSIDCipher( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Aid, +- IN PNDIS_802_11_KEY pKey, +- IN UCHAR CipherAlg) +-{ +- PUCHAR pTxMic, pRxMic; +- BOOLEAN bKeyRSC, bAuthenticator; // indicate the receive SC set by KeyRSC value +-// UCHAR CipherAlg; +- UCHAR i; +- ULONG WCIDAttri; +- USHORT offset; +- UCHAR KeyIdx, IVEIV[8]; +- UINT32 Value; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddBSSIDCipher==> Aid = %d\n",Aid)); +- +- // Bit 29 of Add-key KeyRSC +- bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE; +- +- // Bit 28 of Add-key Authenticator +- bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE; +- KeyIdx = (UCHAR)pKey->KeyIndex&0xff; +- +- if (KeyIdx > 4) +- return; +- +- +- if (pAd->MacTab.Content[Aid].PairwiseKey.CipherAlg == CIPHER_TKIP) +- { if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- // for WPA-None Tx, Rx MIC is the same +- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 16; +- pRxMic = pTxMic; +- } +- else if (bAuthenticator == TRUE) +- { +- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 16; +- pRxMic = (PUCHAR) (&pKey->KeyMaterial) + 24; +- } +- else +- { +- pRxMic = (PUCHAR) (&pKey->KeyMaterial) + 16; +- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 24; +- } +- +- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE) + 0x10; +- for (i=0; i<8; ) +- { +- Value = *(pTxMic+i); +- Value += (*(pTxMic+i+1)<<8); +- Value += (*(pTxMic+i+2)<<16); +- Value += (*(pTxMic+i+3)<<24); +- RTUSBWriteMACRegister(pAd, offset+i, Value); +- i+=4; +- } +- +- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE) + 0x18; +- for (i=0; i<8; ) +- { +- Value = *(pRxMic+i); +- Value += (*(pRxMic+i+1)<<8); +- Value += (*(pRxMic+i+2)<<16); +- Value += (*(pRxMic+i+3)<<24); +- RTUSBWriteMACRegister(pAd, offset+i, Value); +- i+=4; +- } +- +- // Only Key lenth equal to TKIP key have these +- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxMic, pRxMic, 8); +- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.TxMic, pTxMic, 8); +- +- DBGPRINT(RT_DEBUG_TRACE, +- (" TxMIC = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n", +- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3], +- pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); +- DBGPRINT(RT_DEBUG_TRACE, +- (" RxMIC = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n", +- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3], +- pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); +- } +- +- // 2. Record Security Key. +- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.KeyLen= (UCHAR)pKey->KeyLength; +- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.Key, &pKey->KeyMaterial, pKey->KeyLength); +- +- // 3. Check RxTsc. And used to init to ASIC IV. +- if (bKeyRSC == TRUE) +- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxTsc, &pKey->KeyRSC, 6); +- else +- NdisZeroMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxTsc, 6); +- +- // 4. Init TxTsc to one based on WiFi WPA specs +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[0] = 1; +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[1] = 0; +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[2] = 0; +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[3] = 0; +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[4] = 0; +- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[5] = 0; +- +- CipherAlg = pAd->MacTab.Content[Aid].PairwiseKey.CipherAlg; +- +- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE); +- RTUSBMultiWrite(pAd, (USHORT) offset, pKey->KeyMaterial, +- ((pKey->KeyLength == LEN_TKIP_KEY) ? 16 : (USHORT)pKey->KeyLength)); +- +- offset = SHARED_KEY_TABLE_BASE + (KeyIdx * HW_KEY_ENTRY_SIZE); +- RTUSBMultiWrite(pAd, (USHORT) offset, pKey->KeyMaterial, (USHORT)pKey->KeyLength); +- +- offset = PAIRWISE_IVEIV_TABLE_BASE + (Aid * HW_IVEIV_ENTRY_SIZE); +- NdisZeroMemory(IVEIV, 8); +- +- // IV/EIV +- if ((CipherAlg == CIPHER_TKIP) || +- (CipherAlg == CIPHER_TKIP_NO_MIC) || +- (CipherAlg == CIPHER_AES)) +- { +- IVEIV[3] = 0x20; // Eiv bit on. keyid always 0 for pairwise key +- } +- // default key idx needs to set. +- // in TKIP/AES KeyIdx = 0 , WEP KeyIdx is default tx key. +- else +- { +- IVEIV[3] |= (KeyIdx<< 6); +- } +- RTUSBMultiWrite(pAd, (USHORT) offset, IVEIV, 8); +- +- // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 +- if ((CipherAlg == CIPHER_TKIP) || +- (CipherAlg == CIPHER_TKIP_NO_MIC) || +- (CipherAlg == CIPHER_AES)) +- { +- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE; +- } +- else +- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE; +- +- offset = MAC_WCID_ATTRIBUTE_BASE + (Aid* HW_WCID_ATTRI_SIZE); +- RTUSBWriteMACRegister(pAd, offset, WCIDAttri); +- RTUSBReadMACRegister(pAd, offset, &Value); +- +- DBGPRINT(RT_DEBUG_TRACE, ("BSSID_WCID : offset = %x, WCIDAttri = %lx\n", +- offset, WCIDAttri)); +- +- // pAddr +- // Add Bssid mac address at linkup. not here. check! +- /*offset = MAC_WCID_BASE + (BSSID_WCID * HW_WCID_ENTRY_SIZE); +- *for (i=0; iBSSID[i]); +- } +- */ +- +- DBGPRINT(RT_DEBUG_ERROR, ("AddBSSIDasWCIDEntry: Alg=%s, KeyLength = %d\n", +- CipherName[CipherAlg], pKey->KeyLength)); +- DBGPRINT(RT_DEBUG_TRACE, ("Key [idx=%x] [KeyLen = %d]\n", +- pKey->KeyIndex, pKey->KeyLength)); +- for(i=0; iKeyLength; i++) +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" %x:", pKey->KeyMaterial[i])); +- DBGPRINT(RT_DEBUG_TRACE,(" \n")); +-} +- +-/* +-======================================================================== +-Routine Description: +- Get a received packet. +- +-Arguments: +- pAd device control block +- pSaveRxD receive descriptor information +- *pbReschedule need reschedule flag +- *pRxPending pending received packet flag +- +-Return Value: +- the recieved packet +- +-Note: +-======================================================================== +-*/ +-#define RT2870_RXDMALEN_FIELD_SIZE 4 +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending) +-{ +- PRX_CONTEXT pRxContext; +- PNDIS_PACKET pSkb; +- PUCHAR pData; +- ULONG ThisFrameLen; +- ULONG RxBufferLength; +- PRXWI_STRUC pRxWI; +- +- pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex]; +- if ((pRxContext->Readable == FALSE) || (pRxContext->InUse == TRUE)) +- return NULL; +- +- RxBufferLength = pRxContext->BulkInOffset - pAd->ReadPosition; +- if (RxBufferLength < (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + sizeof(RXINFO_STRUC))) +- { +- goto label_null; +- } +- +- pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */ +- // The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding) +- ThisFrameLen = *pData + (*(pData+1)<<8); +- if (ThisFrameLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("BIRIdx(%d): RXDMALen is zero.[%ld], BulkInBufLen = %ld)\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); +- goto label_null; +- } +- if ((ThisFrameLen&0x3) != 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("BIRIdx(%d): RXDMALen not multiple of 4.[%ld], BulkInBufLen = %ld)\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); +- goto label_null; +- } +- +- if ((ThisFrameLen + 8)> RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset, RxBufferLength, pAd->ReadPosition)); +- +- // error frame. finish this loop +- goto label_null; +- } +- +- // skip USB frame length field +- pData += RT2870_RXDMALEN_FIELD_SIZE; +- pRxWI = (PRXWI_STRUC)pData; +- +- if (pRxWI->MPDUtotalByteCount > ThisFrameLen) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n", +- __func__, pRxWI->MPDUtotalByteCount, ThisFrameLen)); +- goto label_null; +- } +- +- // allocate a rx packet +- pSkb = dev_alloc_skb(ThisFrameLen); +- if (pSkb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s():Cannot Allocate sk buffer for this Bulk-In buffer!\n", __func__)); +- goto label_null; +- } +- +- // copy the rx packet +- memcpy(skb_put(pSkb, ThisFrameLen), pData, ThisFrameLen); +- RTPKT_TO_OSPKT(pSkb)->dev = get_netdev_from_bssid(pAd, BSS0); +- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS); +- +- // copy RxD +- *pSaveRxD = *(PRXINFO_STRUC)(pData + ThisFrameLen); +- +- // update next packet read position. +- pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) +- +- return pSkb; +- +-label_null: +- +- return NULL; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Handle received packets. +- +-Arguments: +- data - URB information pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-static void rx_done_tasklet(unsigned long data) +-{ +- purbb_t pUrb; +- PRX_CONTEXT pRxContext; +- PRTMP_ADAPTER pAd; +- NTSTATUS Status; +- unsigned int IrqFlags; +- +- pUrb = (purbb_t)data; +- pRxContext = (PRX_CONTEXT)pUrb->context; +- pAd = pRxContext->pAd; +- Status = pUrb->status; +- +- +- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pRxContext->BulkInOffset += pUrb->actual_length; +- //NdisInterlockedDecrement(&pAd->PendingRx); +- pAd->PendingRx--; +- +- if (Status == USB_ST_NOERROR) +- { +- pAd->BulkInComplete++; +- pAd->NextRxBulkInPosition = 0; +- if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero. +- { +- pRxContext->Readable = TRUE; +- INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE); +- } +- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- } +- else // STATUS_OTHER +- { +- pAd->BulkInCompleteFail++; +- // Still read this packet although it may comtain wrong bytes. +- pRxContext->Readable = FALSE; +- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- +- // Parsing all packets. because after reset, the index will reset to all zero. +- if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_BULKIN_RESET | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n", +- Status, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pRxContext->pUrb->actual_length)); +- +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); +- } +- } +- +- ASSERT((pRxContext->InUse == pRxContext->IRPPending)); +- +- RTUSBBulkReceive(pAd); +- +- return; +- +-} +- +- +-static void rt2870_mgmt_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pMLMEContext; +- int index; +- PNDIS_PACKET pPacket; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long IrqFlags; +- +- +- pUrb = (purbb_t)data; +- pMLMEContext = (PTX_CONTEXT)pUrb->context; +- pAd = pMLMEContext->pAd; +- Status = pUrb->status; +- index = pMLMEContext->SelfIdx; +- +- ASSERT((pAd->MgmtRing.TxDmaIdx == index)); +- +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); +- +- +- if (Status != USB_ST_NOERROR) +- { +- //Bulk-Out fail status handle +- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out MLME Failed, Status=%d!\n", Status)); +- // TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt? +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +- } +- } +- +- pAd->BulkOutPending[MGMTPIPEIDX] = FALSE; +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); +- +- RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); +- // Reset MLME context flags +- pMLMEContext->IRPPending = FALSE; +- pMLMEContext->InUse = FALSE; +- pMLMEContext->bWaitingBulkOut = FALSE; +- pMLMEContext->BulkOutSize = 0; +- +- pPacket = pAd->MgmtRing.Cell[index].pNdisPacket; +- pAd->MgmtRing.Cell[index].pNdisPacket = NULL; +- +- // Increase MgmtRing Index +- INC_RING_INDEX(pAd->MgmtRing.TxDmaIdx, MGMT_RING_SIZE); +- pAd->MgmtRing.TxSwFreeIdx++; +- RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); +- +- // No-matter success or fail, we free the mgmt packet. +- if (pPacket) +- RTMPFreeNdisPacket(pAd, pPacket); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && +- ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) +- { // For Mgmt Bulk-Out failed, ignore it now. +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { +- +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine +- if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */) +- { +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); +- } +- RTUSBKickBulkOut(pAd); +- } +- } +- +-} +- +- +-static void rt2870_hcca_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 4; +- purbb_t pUrb; +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("--->hcca_dma_done_tasklet\n")); +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- +- rt2870_dataout_complete_tasklet((unsigned long)pUrb); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); +- } +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<4); +- RTUSBKickBulkOut(pAd); +- } +- } +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("<---hcca_dma_done_tasklet\n")); +-} +- +- +-static void rt2870_ac3_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 3; +- purbb_t pUrb; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- +- rt2870_dataout_complete_tasklet((unsigned long)pUrb); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); +- } +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<3); +- RTUSBKickBulkOut(pAd); +- } +- } +- +- +- return; +-} +- +- +-static void rt2870_ac2_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 2; +- purbb_t pUrb; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- +- rt2870_dataout_complete_tasklet((unsigned long)pUrb); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); +- } +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<2); +- RTUSBKickBulkOut(pAd); +- } +- } +- +- return; +-} +- +- +-static void rt2870_ac1_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 1; +- purbb_t pUrb; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- +- rt2870_dataout_complete_tasklet((unsigned long)pUrb); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); +- } +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<1); +- RTUSBKickBulkOut(pAd); +- } +- } +- +- +- return; +-} +- +- +-static void rt2870_ac0_dma_done_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 0; +- purbb_t pUrb; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- +- rt2870_dataout_complete_tasklet((unsigned long)pUrb); +- +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); +- } +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL); +- RTUSBKickBulkOut(pAd); +- } +- } +- +- +- return; +- +-} +- +- +-static void rt2870_null_frame_complete_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pNullContext; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long irqFlag; +- +- +- pUrb = (purbb_t)data; +- pNullContext = (PTX_CONTEXT)pUrb->context; +- pAd = pNullContext->pAd; +- Status = pUrb->status; +- +- // Reset Null frame context flags +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); +- pNullContext->IRPPending = FALSE; +- pNullContext->InUse = FALSE; +- pAd->BulkOutPending[0] = FALSE; +- pAd->watchDogTxPendingCnt[0] = 0; +- +- if (Status == USB_ST_NOERROR) +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER +- { +- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", Status)); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- } +- } +- +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine +- RTUSBKickBulkOut(pAd); +- +-} +- +- +-static void rt2870_rts_frame_complete_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pRTSContext; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long irqFlag; +- +- +- pUrb = (purbb_t)data; +- pRTSContext = (PTX_CONTEXT)pUrb->context; +- pAd = pRTSContext->pAd; +- Status = pUrb->status; +- +- // Reset RTS frame context flags +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); +- pRTSContext->IRPPending = FALSE; +- pRTSContext->InUse = FALSE; +- +- if (Status == USB_ST_NOERROR) +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER +- { +- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n")); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- } +- } +- +- RTMP_SEM_LOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]); +- pAd->BulkOutPending[pRTSContext->BulkOutPipeId] = FALSE; +- RTMP_SEM_UNLOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]); +- +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine +- RTUSBKickBulkOut(pAd); +- +-} +- +- +-static void rt2870_pspoll_frame_complete_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pPsPollContext; +- purbb_t pUrb; +- NTSTATUS Status; +- +- +- pUrb = (purbb_t)data; +- pPsPollContext = (PTX_CONTEXT)pUrb->context; +- pAd = pPsPollContext->pAd; +- Status = pUrb->status; +- +- // Reset PsPoll context flags +- pPsPollContext->IRPPending = FALSE; +- pPsPollContext->InUse = FALSE; +- pAd->watchDogTxPendingCnt[0] = 0; +- +- if (Status == USB_ST_NOERROR) +- { +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER +- { +- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n")); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- } +- +- RTMP_SEM_LOCK(&pAd->BulkOutLock[0]); +- pAd->BulkOutPending[0] = FALSE; +- RTMP_SEM_UNLOCK(&pAd->BulkOutLock[0]); +- +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine +- RTUSBKickBulkOut(pAd); +- +-} +- +- +-static void rt2870_dataout_complete_tasklet(unsigned long data) +-{ +- PRTMP_ADAPTER pAd; +- purbb_t pUrb; +- POS_COOKIE pObj; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId; +- NTSTATUS Status; +- unsigned long IrqFlags; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- Status = pUrb->status; +- +- // Store BulkOut PipeId +- BulkOutPipeId = pHTTXContext->BulkOutPipeId; +- pAd->BulkOutDataOneSecCount++; +- +- //DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition, +- // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); +- +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); +- pAd->BulkOutPending[BulkOutPipeId] = FALSE; +- pHTTXContext->IRPPending = FALSE; +- pAd->watchDogTxPendingCnt[BulkOutPipeId] = 0; +- +- if (Status == USB_ST_NOERROR) +- { +- pAd->BulkOutComplete++; +- +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); +- +- pAd->Counters8023.GoodTransmits++; +- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext); +- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- +- +- } +- else // STATUS_OTHER +- { +- PUCHAR pBuf; +- +- pAd->BulkOutCompleteOther++; +- +- pBuf = &pHTTXContext->TransferBuffer->field.WirelessPacket[pHTTXContext->NextBulkOutPosition]; +- +- if (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST | +- fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = BulkOutPipeId; +- pAd->bulkResetReq[BulkOutPipeId] = pAd->BulkOutReq; +- } +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkOutDataPacket failed: ReasonCode=%d!\n", Status)); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther)); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7])); +- //DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther)); +- +- } +- +- // +- // bInUse = TRUE, means some process are filling TX data, after that must turn on bWaitingBulkOut +- // bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out. +- // +- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- if ((pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition) && +- (pHTTXContext->ENextBulkOutPosition != (pHTTXContext->CurWritePosition+8)) && +- !RTUSB_TEST_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId))) +- { +- // Indicate There is data avaliable +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); +- } +- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- +- // Always call Bulk routine, even reset bulk. +- // The protection of rest bulk should be in BulkOut routine +- RTUSBKickBulkOut(pAd); +-} +- +-/* End of 2870_rtmp_init.c */ +diff --git a/drivers/staging/rt2870/common/acction.c b/drivers/staging/rt2870/common/acction.c +new file mode 100644 +index 0000000..fd806c3 +--- /dev/null ++++ b/drivers/staging/rt2870/common/acction.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/action.c" +diff --git a/drivers/staging/rt2870/common/cmm_aes.c b/drivers/staging/rt2870/common/cmm_aes.c +new file mode 100644 +index 0000000..15d6a14 +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_aes.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_aes.c" +diff --git a/drivers/staging/rt2870/common/cmm_asic.c b/drivers/staging/rt2870/common/cmm_asic.c +new file mode 100644 +index 0000000..38de817 +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_asic.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_asic.c" +diff --git a/drivers/staging/rt2870/common/cmm_cfg.c b/drivers/staging/rt2870/common/cmm_cfg.c +new file mode 100644 +index 0000000..6b2bdd7 +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_cfg.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_cfg.c" +diff --git a/drivers/staging/rt2870/common/cmm_data_2870.c b/drivers/staging/rt2870/common/cmm_data_2870.c +deleted file mode 100644 +index 3b63a48..0000000 +--- a/drivers/staging/rt2870/common/cmm_data_2870.c ++++ /dev/null +@@ -1,936 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +-/* +- All functions in this file must be USB-depended, or you should out your function +- in other files. +- +-*/ +-#include "../rt_config.h" +- +- +-/* +- We can do copy the frame into pTxContext when match following conditions. +- => +- => +- => +-*/ +-static inline NDIS_STATUS RtmpUSBCanDoWrite( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN HT_TX_CONTEXT *pHTTXContext) +-{ +- NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES; +- +- if (((pHTTXContext->CurWritePosition) < pHTTXContext->NextBulkOutPosition) && (pHTTXContext->CurWritePosition + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c1!\n")); +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); +- } +- else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < LOCAL_TXBUF_SIZE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c2!\n")); +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); +- } +- else if (pHTTXContext->bCurWriting == TRUE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c3!\n")); +- } +- else +- { +- canWrite = NDIS_STATUS_SUCCESS; +- } +- +- +- return canWrite; +-} +- +- +-USHORT RtmpUSB_WriteSubTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- +- // Dummy function. Should be removed in the future. +- return 0; +- +-} +- +-USHORT RtmpUSB_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber) +-{ +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; +- unsigned long IrqFlags; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; +- BOOLEAN TxQLastRound = FALSE; +- +- // +- // get Tx Ring Resource & Dma Buffer address +- // +- QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; +- +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- pHTTXContext = &pAd->TxContext[QueIdx]; +- fillOffset = pHTTXContext->CurWritePosition; +- +- if(fragNum == 0) +- { +- // Check if we have enough space for this bulk-out batch. +- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- pHTTXContext->bCurWriting = TRUE; +- +- // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { +- pHTTXContext->ENextBulkOutPosition += 8; +- pHTTXContext->CurWritePosition += 8; +- fillOffset += 8; +- } +- pTxBlk->Priv = 0; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return(Status); +- } +- } +- else +- { +- // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. +- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- fillOffset += pTxBlk->Priv; +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return(Status); +- } +- } +- +- NdisZeroMemory((PUCHAR)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); +- +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; +- +- // copy TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- // Build our URB for USBD +- DMAHdrLen = TXWI_SIZE + hwHdrLen; +- USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment +- USBDMApktLen += padding; +- +- pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen); +- +- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); +- +- if (fragNum == pTxBlk->TotalFragNum) +- { +- pTxInfo->USBDMATxburst = 0; +- if ((pHTTXContext->CurWritePosition + pTxBlk->Priv + 3906)> MAX_TXBULK_LIMIT) +- { +- pTxInfo->SwUseLastRound = 1; +- TxQLastRound = TRUE; +- } +- } +- else +- { +- pTxInfo->USBDMATxburst = 1; +- } +- +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); +- +- // Zero the last padding. +- pWirelessPacket += pTxBlk->SrcBufLen; +- NdisZeroMemory(pWirelessPacket, padding + 8); +- +- if (fragNum == pTxBlk->TotalFragNum) +- { +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- // Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame. +- pHTTXContext->CurWritePosition += pTxBlk->Priv; +- if (TxQLastRound == TRUE) +- pHTTXContext->CurWritePosition = 8; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- +- +- // Finally, set bCurWriting as FALSE +- pHTTXContext->bCurWriting = FALSE; +- +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- // succeed and release the skb buffer +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); +- } +- +- +- return(Status); +- +-} +- +- +-USHORT RtmpUSB_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket; +- UCHAR QueIdx; +- unsigned long IrqFlags; +- NDIS_STATUS Status; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; +- BOOLEAN bTxQLastRound = FALSE; +- +- // For USB, didn't need PCI_MAP_SINGLE() +- //SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE); +- +- +- // +- // get Tx Ring Resource & Dma Buffer address +- // +- QueIdx = pTxBlk->QueIdx; +- +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- pHTTXContext = &pAd->TxContext[QueIdx]; +- fillOffset = pHTTXContext->CurWritePosition; +- +- +- +- // Check ring full. +- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if(Status == NDIS_STATUS_SUCCESS) +- { +- pHTTXContext->bCurWriting = TRUE; +- +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); +- +- // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { +- pHTTXContext->ENextBulkOutPosition += 8; +- pHTTXContext->CurWritePosition += 8; +- fillOffset += 8; +- } +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; +- +- // copy TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- // Build our URB for USBD +- DMAHdrLen = TXWI_SIZE + hwHdrLen; +- USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment +- USBDMApktLen += padding; +- +- pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen); +- +- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload +- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); +- +- if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > MAX_TXBULK_LIMIT) +- { +- pTxInfo->SwUseLastRound = 1; +- bTxQLastRound = TRUE; +- } +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- +- // We unlock it here to prevent the first 8 bytes maybe over-writed issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. +- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. +- pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); +- pWirelessPacket += pTxBlk->SrcBufLen; +- NdisZeroMemory(pWirelessPacket, padding + 8); +- +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- pHTTXContext->CurWritePosition += pTxBlk->Priv; +- if (bTxQLastRound) +- pHTTXContext->CurWritePosition = 8; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- +- pHTTXContext->bCurWriting = FALSE; +- } +- +- +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- +- // succeed and release the skb buffer +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); +- +- return(Status); +- +-} +- +- +-USHORT RtmpUSB_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber) +-{ +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; +- unsigned long IrqFlags; +- //UINT32 USBDMApktLen = 0, DMAHdrLen, padding; +- +- // +- // get Tx Ring Resource & Dma Buffer address +- // +- QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; +- +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- if(frameNum == 0) +- { +- // Check if we have enough space for this bulk-out batch. +- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- pHTTXContext->bCurWriting = TRUE; +- +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); +- +- +- // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { +- +- pHTTXContext->CurWritePosition += 8; +- pHTTXContext->ENextBulkOutPosition += 8; +- } +- fillOffset = pHTTXContext->CurWritePosition; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; +- +- // +- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- // +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; +- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; +- else +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- // Update the pTxBlk->Priv. +- pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; +- +- // pTxInfo->USBDMApktLen now just a temp value and will to correct latter. +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(pTxBlk->Priv), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); +- +- // Copy it. +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->Priv); +- pHTTXContext->CurWriteRealPos += pTxBlk->Priv; +- pWirelessPacket += pTxBlk->Priv; +- } +- } +- else +- { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. +- +- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- fillOffset = (pHTTXContext->CurWritePosition + pTxBlk->Priv); +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; +- +- //hwHdrLen = pTxBlk->MpduHeaderLen; +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->MpduHeaderLen); +- pWirelessPacket += (pTxBlk->MpduHeaderLen); +- pTxBlk->Priv += pTxBlk->MpduHeaderLen; +- } +- else +- { // It should not happened now unless we are going to shutdown. +- DBGPRINT(RT_DEBUG_ERROR, ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n")); +- Status = NDIS_STATUS_FAILURE; +- } +- } +- +- +- // We unlock it here to prevent the first 8 bytes maybe over-write issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. +- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("WriteMultiTxResource: CWPos = %ld, NBOutPos = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition)); +- goto done; +- } +- +- // Copy the frame content into DMA buffer and update the pTxBlk->Priv +- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); +- pWirelessPacket += pTxBlk->SrcBufLen; +- pTxBlk->Priv += pTxBlk->SrcBufLen; +- +-done: +- // Release the skb buffer here +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); +- +- return(Status); +- +-} +- +- +-VOID RtmpUSB_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT TxIdx) +-{ +- UCHAR QueIdx; +- HT_TX_CONTEXT *pHTTXContext; +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- UINT32 USBDMApktLen, padding; +- unsigned long IrqFlags; +- PUCHAR pWirelessPacket; +- +- QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; +- +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- if (pHTTXContext->bCurWriting == TRUE) +- { +- fillOffset = pHTTXContext->CurWritePosition; +- if (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition)) +- && (pHTTXContext->bCopySavePad == TRUE)) +- pWirelessPacket = (PUCHAR)(&pHTTXContext->SavedPad[0]); +- else +- pWirelessPacket = (PUCHAR)(&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]); +- +- // +- // Update TxInfo->USBDMApktLen , +- // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding +- // +- pTxInfo = (PTXINFO_STRUC)(pWirelessPacket); +- +- // Calculate the bulk-out padding +- USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment +- USBDMApktLen += padding; +- +- pTxInfo->USBDMATxPktLen = USBDMApktLen; +- +- // +- // Update TXWI->MPDUtotalByteCount , +- // the length = 802.11 header + payload_of_all_batch_frames +- pTxWI= (PTXWI_STRUC)(pWirelessPacket + TXINFO_SIZE); +- pTxWI->MPDUtotalByteCount = totalMPDUSize; +- +- // +- // Update the pHTTXContext->CurWritePosition +- // +- pHTTXContext->CurWritePosition += (TXINFO_SIZE + USBDMApktLen); +- if ((pHTTXContext->CurWritePosition + 3906)> MAX_TXBULK_LIMIT) +- { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. +- pHTTXContext->CurWritePosition = 8; +- pTxInfo->SwUseLastRound = 1; +- } +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- +- +- // +- // Zero the last padding. +- // +- pWirelessPacket = (&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset + pTxBlk->Priv]); +- NdisZeroMemory(pWirelessPacket, padding + 8); +- +- // Finally, set bCurWriting as FALSE +- pHTTXContext->bCurWriting = FALSE; +- +- } +- else +- { // It should not happened now unless we are going to shutdown. +- DBGPRINT(RT_DEBUG_ERROR, ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n")); +- } +- +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +-} +- +- +-VOID RtmpUSBDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT TxIdx) +-{ +- // DO nothing for USB. +-} +- +- +-/* +- When can do bulk-out: +- 1. TxSwFreeIdx < TX_RING_SIZE; +- It means has at least one Ring entity is ready for bulk-out, kick it out. +- 2. If TxSwFreeIdx == TX_RING_SIZE +- Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out. +- +-*/ +-VOID RtmpUSBDataKickOut( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx) +-{ +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); +- RTUSBKickBulkOut(pAd); +- +-} +- +- +-/* +- Must be run in Interrupt context +- This function handle RT2870 specific TxDesc and cpu index update and kick the packet out. +- */ +-int RtmpUSBMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen) +-{ +- PTXINFO_STRUC pTxInfo; +- ULONG BulkOutSize; +- UCHAR padLen; +- PUCHAR pDest; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; +- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[SwIdx].AllocVa; +- unsigned long IrqFlags; +- +- +- pTxInfo = (PTXINFO_STRUC)(pSrcBufVA); +- +- // Build our URB for USBD +- BulkOutSize = SrcBufLen; +- BulkOutSize = (BulkOutSize + 3) & (~3); +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(BulkOutSize - TXINFO_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +- +- BulkOutSize += 4; // Always add 4 extra bytes at every packet. +- +- // If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again. +- if ((BulkOutSize % pAd->BulkOutMaxPacketSize) == 0) +- BulkOutSize += 4; +- +- padLen = BulkOutSize - SrcBufLen; +- ASSERT((padLen <= RTMP_PKT_TAIL_PADDING)); +- +- // Now memzero all extra padding bytes. +- pDest = (PUCHAR)(pSrcBufVA + SrcBufLen); +- skb_put(GET_OS_PKT_TYPE(pPacket), padLen); +- NdisZeroMemory(pDest, padLen); +- +- RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); +- +- pAd->MgmtRing.Cell[pAd->MgmtRing.TxCpuIdx].pNdisPacket = pPacket; +- pMLMEContext->TransferBuffer = (PTX_BUFFER)(GET_OS_PKT_DATAPTR(pPacket)); +- +- // Length in TxInfo should be 8 less than bulkout size. +- pMLMEContext->BulkOutSize = BulkOutSize; +- pMLMEContext->InUse = TRUE; +- pMLMEContext->bWaitingBulkOut = TRUE; +- +- +- //for debug +- //hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize)); +- +- //pAd->RalinkCounters.KickTxCount++; +- //pAd->RalinkCounters.OneSecTxDoneCount++; +- +- //if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE) +- // needKickOut = TRUE; +- +- // Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX +- pAd->MgmtRing.TxSwFreeIdx--; +- INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); +- +- RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); +- +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); +- //if (needKickOut) +- RTUSBKickBulkOut(pAd); +- +- return 0; +-} +- +- +-VOID RtmpUSBNullFrameKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN UCHAR *pNullFrame, +- IN UINT32 frameLen) +-{ +- if (pAd->NullContext.InUse == FALSE) +- { +- PTX_CONTEXT pNullContext; +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; +- PUCHAR pWirelessPkt; +- +- pNullContext = &(pAd->NullContext); +- +- // Set the in use bit +- pNullContext->InUse = TRUE; +- pWirelessPkt = (PUCHAR)&pNullContext->TransferBuffer->field.WirelessPacket[0]; +- +- RTMPZeroMemory(&pWirelessPkt[0], 100); +- pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[0]; +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +- pTxInfo->QSEL = FIFO_EDCA; +- pTxWI = (PTXWI_STRUC)&pWirelessPkt[TXINFO_SIZE]; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), +- 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); +- RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); +- pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; +- +- // Fill out frame length information for global Bulk out arbitor +- //pNullContext->BulkOutSize = TransferBufferLength; +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[pAd->CommonCfg.TxRate])); +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); +- +- // Kick bulk out +- RTUSBKickBulkOut(pAd); +- } +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound +- +- Arguments: +- pRxD Pointer to the Rx descriptor +- +- Return Value: +- NDIS_STATUS_SUCCESS No err +- NDIS_STATUS_FAILURE Error +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxINFO) +-{ +- PCIPHER_KEY pWpaKey; +- INT dBm; +- +- if (pAd->bPromiscuous == TRUE) +- return(NDIS_STATUS_SUCCESS); +- if(pRxINFO == NULL) +- return(NDIS_STATUS_FAILURE); +- +- // Phy errors & CRC errors +- if (pRxINFO->Crc) +- { +- // Check RSSI for Noise Hist statistic collection. +- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; +- if (dBm <= -87) +- pAd->StaCfg.RPIDensity[0] += 1; +- else if (dBm <= -82) +- pAd->StaCfg.RPIDensity[1] += 1; +- else if (dBm <= -77) +- pAd->StaCfg.RPIDensity[2] += 1; +- else if (dBm <= -72) +- pAd->StaCfg.RPIDensity[3] += 1; +- else if (dBm <= -67) +- pAd->StaCfg.RPIDensity[4] += 1; +- else if (dBm <= -62) +- pAd->StaCfg.RPIDensity[5] += 1; +- else if (dBm <= -57) +- pAd->StaCfg.RPIDensity[6] += 1; +- else if (dBm > -57) +- pAd->StaCfg.RPIDensity[7] += 1; +- +- return(NDIS_STATUS_FAILURE); +- } +- +- // Add Rx size to channel load counter, we should ignore error counts +- pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount+ 14); +- +- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics +- if (pHeader->FC.ToDs) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n")); +- return NDIS_STATUS_FAILURE; +- } +- +- // Paul 04-03 for OFDM Rx length issue +- if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n")); +- return NDIS_STATUS_FAILURE; +- } +- +- // Drop not U2M frames, cant's drop here because we will drop beacon in this case +- // I am kind of doubting the U2M bit operation +- // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); +- +- // drop decyption fail frame +- if (pRxINFO->Decrypted && pRxINFO->CipherErr) +- { +- +- // +- // MIC Error +- // +- if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss) +- { +- pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; +- RTMPReportMicError(pAd, pWpaKey); +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); +- } +- +- if (pRxINFO->Decrypted && +- (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == CIPHER_AES) && +- (pHeader->Sequence == pAd->FragFrame.Sequence)) +- { +- // +- // Acceptable since the First FragFrame no CipherErr problem. +- // +- return(NDIS_STATUS_SUCCESS); +- } +- +- return(NDIS_STATUS_FAILURE); +- } +- +- return(NDIS_STATUS_SUCCESS); +-} +- +-VOID RT28xxUsbStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) +-{ +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +-} +- +-VOID RT28xxUsbStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) +-{ +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- +- // we have decided to SLEEP, so at least do it for a BEACON period. +- if (TbttNumToNextWakeUp == 0) +- TbttNumToNextWakeUp = 1; +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; +- AutoWakeupCfg.field.EnableAutoWakeup = 1; +- AutoWakeupCfg.field.AutoLeadTime = 5; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us. +- +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +- +-} +- +-VOID RT28xxUsbMlmeRadioOn( +- IN PRTMP_ADAPTER pAd) +-{ +- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOn()\n")); +- +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +- RTMPusecDelay(10000); +- +- NICResetFromError(pAd); +- +- // Enable Tx/Rx +- RTMPEnableRxTx(pAd); +- +-#ifdef RT3070 +- if (IS_RT3071(pAd)) +- { +- RT30xxReverseRFSleepModeSetup(pAd); +- } +-#endif // RT3070 // +- +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- RTUSBBulkReceive(pAd); +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +-} +- +-VOID RT28xxUsbMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- UINT32 Value, i; +- +- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOFF()\n")); +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_OFF); +- // Set Radio off flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- { +- // Link down first if any association exists +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- LinkDown(pAd, FALSE); +- RTMPusecDelay(10000); +- +- //========================================== +- // Clean up old bss table +- BssTableInit(&pAd->ScanTab); +- } +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- // Must using 40MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); +- } +- +- // Disable Tx/Rx DMA +- RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- GloCfg.field.EnableTxDMA = 0; +- GloCfg.field.EnableRxDMA = 0; +- RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings +- +- // Waiting for DMA idle +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- RTMPusecDelay(1000); +- }while (i++ < 100); +- +- // Disable MAC Tx/Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= (0xfffffff3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); +-} +- +diff --git a/drivers/staging/rt2870/common/cmm_data_usb.c b/drivers/staging/rt2870/common/cmm_data_usb.c +new file mode 100644 +index 0000000..704675f +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_data_usb.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_data_usb.c" +diff --git a/drivers/staging/rt2870/common/cmm_mac_usb.c b/drivers/staging/rt2870/common/cmm_mac_usb.c +new file mode 100644 +index 0000000..b26af4a +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_mac_usb.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_mac_usb.c" +diff --git a/drivers/staging/rt2870/common/cmm_profile.c b/drivers/staging/rt2870/common/cmm_profile.c +new file mode 100644 +index 0000000..9926e45 +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_profile.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_profile.c" +diff --git a/drivers/staging/rt2870/common/cmm_tkip.c b/drivers/staging/rt2870/common/cmm_tkip.c +new file mode 100644 +index 0000000..f73c71b +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_tkip.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_tkip.c" +diff --git a/drivers/staging/rt2870/common/cmm_wep.c b/drivers/staging/rt2870/common/cmm_wep.c +new file mode 100644 +index 0000000..5f68107 +--- /dev/null ++++ b/drivers/staging/rt2870/common/cmm_wep.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/cmm_wep.c" +diff --git a/drivers/staging/rt2870/common/crypt_hmac.c b/drivers/staging/rt2870/common/crypt_hmac.c +new file mode 100644 +index 0000000..24d84e7 +--- /dev/null ++++ b/drivers/staging/rt2870/common/crypt_hmac.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/crypt_hmac.c" +diff --git a/drivers/staging/rt2870/common/crypt_md5.c b/drivers/staging/rt2870/common/crypt_md5.c +new file mode 100644 +index 0000000..457a2ca +--- /dev/null ++++ b/drivers/staging/rt2870/common/crypt_md5.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/crypt_md5.c" +diff --git a/drivers/staging/rt2870/common/crypt_sha2.c b/drivers/staging/rt2870/common/crypt_sha2.c +new file mode 100644 +index 0000000..07ffb30 +--- /dev/null ++++ b/drivers/staging/rt2870/common/crypt_sha2.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/crypt_sha2.c" +diff --git a/drivers/staging/rt2870/common/ee_efuse.c b/drivers/staging/rt2870/common/ee_efuse.c +new file mode 100644 +index 0000000..0e34e65 +--- /dev/null ++++ b/drivers/staging/rt2870/common/ee_efuse.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/ee_efuse.c" +diff --git a/drivers/staging/rt2870/common/rt_channel.c b/drivers/staging/rt2870/common/rt_channel.c +new file mode 100644 +index 0000000..c8ceb4c +--- /dev/null ++++ b/drivers/staging/rt2870/common/rt_channel.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/rt_channel.c" +diff --git a/drivers/staging/rt2870/common/rt_rf.c b/drivers/staging/rt2870/common/rt_rf.c +new file mode 100644 +index 0000000..b81cff3 +--- /dev/null ++++ b/drivers/staging/rt2870/common/rt_rf.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/rt_rf.c" +diff --git a/drivers/staging/rt2870/common/rtmp_mcu.c b/drivers/staging/rt2870/common/rtmp_mcu.c +new file mode 100644 +index 0000000..20b7f13 +--- /dev/null ++++ b/drivers/staging/rt2870/common/rtmp_mcu.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/rtmp_mcu.c" +diff --git a/drivers/staging/rt2870/common/rtmp_timer.c b/drivers/staging/rt2870/common/rtmp_timer.c +new file mode 100644 +index 0000000..fd4aedc +--- /dev/null ++++ b/drivers/staging/rt2870/common/rtmp_timer.c +@@ -0,0 +1 @@ ++#include "../../rt2860/common/rtmp_timer.c" +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index a4244b5..82b23ae 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -1,4 +1,4 @@ +- /* ++/* + ************************************************************************* + * Ralink Tech Inc. + * 5F., No.36, Taiyuan St., Jhubei City, +@@ -37,6 +37,9 @@ + + */ + ++#ifdef RTMP_MAC_USB ++ ++ + #include "../rt_config.h" + // Match total 6 bulkout endpoint to corresponding queue. + UCHAR EpToQueue[6]={FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT}; +@@ -317,11 +320,13 @@ VOID RTUSBBulkOutDataPacket( + break; + } + +- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) + if (pTxInfo->QSEL != FIFO_EDCA) + { +- printk("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", __func__, pTxInfo->QSEL); +- printk("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad); ++ DBGPRINT(RT_DEBUG_ERROR, ("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", ++ __FUNCTION__, pTxInfo->QSEL)); ++ DBGPRINT(RT_DEBUG_ERROR, ("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", ++ pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, ++ pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); + hex_dump("Wrong QSel Pkt:", (PUCHAR)&pWirelessPkt[TmpBulkEndPos], (pHTTXContext->CurWritePosition - pHTTXContext->NextBulkOutPosition)); + } + +@@ -350,7 +355,7 @@ VOID RTUSBBulkOutDataPacket( + pLastTxInfo = pTxInfo; + + // Make sure we use EDCA QUEUE. +- pTxInfo->QSEL = FIFO_EDCA; //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) ++ pTxInfo->QSEL = FIFO_EDCA; + ThisBulkSize += (pTxInfo->USBDMATxPktLen+4); + TmpBulkEndPos += (pTxInfo->USBDMATxPktLen+4); + +@@ -366,8 +371,11 @@ VOID RTUSBBulkOutDataPacket( + bTxQLastRound = TRUE; + pHTTXContext->ENextBulkOutPosition = 8; + ++ + break; + } ++ ++ + }while (TRUE); + + // adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. +@@ -481,11 +489,9 @@ VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs) + pObj->ac3_dma_done_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->ac3_dma_done_task); + break; +- case 4: +- pObj->hcca_dma_done_task.data = (unsigned long)pUrb; +- tasklet_hi_schedule(&pObj->hcca_dma_done_task); +- break; + } ++ ++ + } + + +@@ -933,7 +939,7 @@ VOID RTUSBKickBulkOut( + } + + // 5. Mlme frame is next +- else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) && ++ else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) || + (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) + { + RTUSBBulkOutMLMEPacket(pAd, pAd->MgmtRing.TxDmaIdx); +@@ -977,16 +983,6 @@ VOID RTUSBKickBulkOut( + } + } + +- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA) +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_5)) +- { +- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || +- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- )) +- { +- } +- } +- + // 7. Null frame is the last + else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL)) + { +@@ -1231,3 +1227,4 @@ VOID RTUSBCancelPendingBulkOutIRP( + } + } + ++#endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index 6b003f6..807b32a 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -36,6 +36,10 @@ + Jan 03-25-2006 created + + */ ++ ++#ifdef RTMP_MAC_USB ++ ++ + #include "../rt_config.h" + + extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c +@@ -68,6 +72,26 @@ VOID REPORT_AMSDU_FRAMES_TO_LLC( + } + } + ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ This subroutine will scan through releative ring descriptor to find ++ out avaliable free ring descriptor and compare with request size. ++ ++ Arguments: ++ pAd Pointer to our adapter ++ RingType Selected Ring ++ ++ Return Value: ++ NDIS_STATUS_FAILURE Not enough free descriptor ++ NDIS_STATUS_SUCCESS Enough free descriptor ++ ++ Note: ++ ++ ======================================================================== ++*/ + NDIS_STATUS RTUSBFreeDescriptorRequest( + IN PRTMP_ADAPTER pAd, + IN UCHAR BulkOutPipeId, +@@ -193,6 +217,36 @@ VOID RTUSBRejectPendingPackets( + + } + ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ Calculates the duration which is required to transmit out frames ++ with given size and specified rate. ++ ++ Arguments: ++ pTxD Pointer to transmit descriptor ++ Ack Setting for Ack requirement bit ++ Fragment Setting for Fragment bit ++ RetryMode Setting for retry mode ++ Ifs Setting for IFS gap ++ Rate Setting for transmit rate ++ Service Setting for service ++ Length Frame length ++ TxPreamble Short or Long preamble when using CCK rates ++ QueIdx - 0-3, according to 802.11e/d4.4 June/2003 ++ ++ Return Value: ++ None ++ ++ IRQL = PASSIVE_LEVEL ++ IRQL = DISPATCH_LEVEL ++ ++ ======================================================================== ++*/ ++ ++ + VOID RTMPWriteTxInfo( + IN PRTMP_ADAPTER pAd, + IN PTXINFO_STRUC pTxInfo, +@@ -214,3 +268,4 @@ VOID RTMPWriteTxInfo( + pTxInfo->rsv2 = 0; + } + ++#endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index 1d69590..a93fde5 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -36,6 +36,9 @@ + Paul Lin 06-25-2004 created + */ + ++#ifdef RTMP_MAC_USB ++ ++ + #include "../rt_config.h" + + +@@ -55,7 +58,7 @@ + ======================================================================== + */ + +-NTSTATUS RTUSBFirmwareRun( ++static NTSTATUS RTUSBFirmwareRun( + IN PRTMP_ADAPTER pAd) + { + NTSTATUS Status; +@@ -110,48 +113,16 @@ NTSTATUS RTUSBFirmwareWrite( + Status = RTUSBWriteMACRegister(pAd, 0x701c, 0xffffffff); + Status = RTUSBFirmwareRun(pAd); + ++ //2008/11/28:KH add to fix the dead rf frequency offset bug<-- + RTMPusecDelay(10000); + RTUSBWriteMACRegister(pAd,H2M_MAILBOX_CSR,0); +- AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00);//reset rf by MCU supported by new firmware ++ AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); //reset rf by MCU supported by new firmware ++ //2008/11/28:KH add to fix the dead rf frequency offset bug--> + + return Status; + } + + +-/* +- ======================================================================== +- +- Routine Description: Get current firmware operation mode (Return Value) +- +- Arguments: +- +- Return Value: +- 0 or 1 = Downloaded by host driver +- others = Driver doesn't download firmware +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NTSTATUS RTUSBFirmwareOpmode( +- IN PRTMP_ADAPTER pAd, +- OUT PUINT32 pValue) +-{ +- NTSTATUS Status; +- +- Status = RTUSB_VendorRequest( +- pAd, +- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), +- DEVICE_VENDOR_REQUEST_IN, +- 0x1, +- 0x11, +- 0, +- pValue, +- 4); +- return Status; +-} + NTSTATUS RTUSBVenderReset( + IN PRTMP_ADAPTER pAd) + { +@@ -312,7 +283,7 @@ NTSTATUS RTUSBReadMACRegister( + IN USHORT Offset, + OUT PUINT32 pValue) + { +- NTSTATUS Status; ++ NTSTATUS Status = 0; + UINT32 localVal; + + Status = RTUSB_VendorRequest( +@@ -368,7 +339,6 @@ NTSTATUS RTUSBWriteMACRegister( + + + +-#if 1 + /* + ======================================================================== + +@@ -402,10 +372,9 @@ NTSTATUS RTUSBReadBBPRegister( + if (!(BbpCsr.field.Busy == BUSY)) + break; + } +- printk("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n", i); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n", i)); + i++; +- } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ }while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + + if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) + { +@@ -438,10 +407,9 @@ NTSTATUS RTUSBReadBBPRegister( + break; + } + } +- printk("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n", i); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n", i)); + i++; +- } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ }while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + + if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) + { +@@ -456,67 +424,8 @@ NTSTATUS RTUSBReadBBPRegister( + + return STATUS_SUCCESS; + } +-#else +-/* +- ======================================================================== +- +- Routine Description: Read 8-bit BBP register via firmware +- +- Arguments: +- +- Return Value: +- +- IRQL = + +- Note: + +- ======================================================================== +-*/ +-NTSTATUS RTUSBReadBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN PUCHAR pValue) +-{ +- BBP_CSR_CFG_STRUC BbpCsr; +- int i, k; +- for (i=0; iBbpWriteLatch[Id]; +- return STATUS_UNSUCCESSFUL; +- } +- return STATUS_SUCCESS; +-} +-#endif +- +-#if 1 + /* + ======================================================================== + +@@ -549,7 +458,7 @@ NTSTATUS RTUSBWriteBBPRegister( + if (!(BbpCsr.field.Busy == BUSY)) + break; + } +- printk("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i)); + i++; + } + while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); +@@ -572,55 +481,6 @@ NTSTATUS RTUSBWriteBBPRegister( + + return STATUS_SUCCESS; + } +-#else +-/* +- ======================================================================== +- +- Routine Description: Write 8-bit BBP register via firmware +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +- +-NTSTATUS RTUSBWriteBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN UCHAR Value) +- +-{ +- BBP_CSR_CFG_STRUC BbpCsr; +- int BusyCnt; +- for (BusyCnt=0; BusyCntBbpWriteLatch[Id] = Value; +- break; +- } +- if (BusyCnt == MAX_BUSY_COUNT) +- { +- DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", Id, BbpCsr.word)); +- return STATUS_UNSUCCESSFUL; +- } +- return STATUS_SUCCESS; +-} +-#endif + /* + ======================================================================== + +@@ -653,7 +513,7 @@ NTSTATUS RTUSBWriteRFRegister( + if (!(PhyCsr4.field.Busy)) + break; + } +- printk("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i)); + i++; + } + while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); +@@ -669,114 +529,6 @@ NTSTATUS RTUSBWriteRFRegister( + return STATUS_SUCCESS; + } + +-/* +- ======================================================================== +- +- Routine Description: Write RT30xx RF register through MAC +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NTSTATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RegID, +- IN UCHAR Value) +-{ +- RF_CSR_CFG_STRUC rfcsr; +- UINT i = 0; +- +- do +- { +- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); +- +- if (!rfcsr.field.RF_CSR_KICK) +- break; +- i++; +- } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); +- +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); +- return STATUS_UNSUCCESSFUL; +- } +- +- rfcsr.field.RF_CSR_WR = 1; +- rfcsr.field.RF_CSR_KICK = 1; +- rfcsr.field.TESTCSR_RFACC_REGNUM = RegID; +- rfcsr.field.RF_CSR_DATA = Value; +- +- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word); +- +- return STATUS_SUCCESS; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: Read RT30xx RF register through MAC +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NTSTATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RegID, +- IN PUCHAR pValue) +-{ +- RF_CSR_CFG_STRUC rfcsr; +- UINT i=0, k=0; +- +- for (i=0; ibUseEfuse) +- Status =eFuseRead(pAd, Offset, pData, length); +- else +- { + Status = RTUSB_VendorRequest( + pAd, + (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), +@@ -814,7 +562,6 @@ NTSTATUS RTUSBReadEEPROM( + Offset, + pData, + length); +- } + + return Status; + } +@@ -842,10 +589,6 @@ NTSTATUS RTUSBWriteEEPROM( + { + NTSTATUS Status = STATUS_SUCCESS; + +- if(pAd->bUseEfuse) +- Status = eFuseWrite(pAd, Offset, pData, length); +- else +- { + Status = RTUSB_VendorRequest( + pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -855,11 +598,38 @@ NTSTATUS RTUSBWriteEEPROM( + Offset, + pData, + length); +- } + + return Status; + } + ++ ++NTSTATUS RTUSBReadEEPROM16( ++ IN PRTMP_ADAPTER pAd, ++ IN USHORT offset, ++ OUT PUSHORT pData) ++{ ++ NTSTATUS status; ++ USHORT localData; ++ ++ status = RTUSBReadEEPROM(pAd, offset, (PUCHAR)(&localData), 2); ++ if (status == STATUS_SUCCESS) ++ *pData = le2cpu16(localData); ++ ++ return status; ++ ++} ++ ++NTSTATUS RTUSBWriteEEPROM16( ++ IN RTMP_ADAPTER *pAd, ++ IN USHORT offset, ++ IN USHORT value) ++{ ++ USHORT tmpVal; ++ ++ tmpVal = cpu2le16(value); ++ return RTUSBWriteEEPROM(pAd, offset, (PUCHAR)&(tmpVal), 2); ++} ++ + /* + ======================================================================== + +@@ -943,7 +713,7 @@ VOID RTUSBInitializeCmdQ( + cmdq->head = NULL; + cmdq->tail = NULL; + cmdq->size = 0; +- cmdq->CmdQState = RT2870_THREAD_INITED; ++ cmdq->CmdQState = RTMP_TASK_STAT_INITED; + } + + /* +@@ -970,19 +740,26 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( + { + NDIS_STATUS status; + PCmdQElmt cmdqelmt = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ RTMP_OS_TASK *pTask = &pAd->cmdQTask; + +- if (pid_nr(pObj->RTUSBCmdThr_pid) > 0) ++#ifdef KTHREAD_SUPPORT ++ if (pTask->kthread_task == NULL) ++#else ++ CHECK_PID_LEGALITY(pTask->taskPID) ++ { ++ } ++ else ++#endif + return (NDIS_STATUS_RESOURCES); + +- status = RTMPAllocateMemory((PVOID *)&cmdqelmt, sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (PUCHAR *)(&cmdqelmt), sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + + cmdqelmt->buffer = NULL; + if (pInformationBuffer != NULL) + { +- status = RTMPAllocateMemory((PVOID *)&cmdqelmt->buffer, InformationBufferLength); ++ status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) + { + kfree(cmdqelmt); +@@ -1005,7 +782,7 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( + cmdqelmt->SetOperation = FALSE; + + NdisAcquireSpinLock(&pAd->CmdQLock); +- if (pAd->CmdQ.CmdQState & RT2870_THREAD_CAN_DO_INSERT) ++ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) + { + EnqueueCmd((&pAd->CmdQ), cmdqelmt); + status = NDIS_STATUS_SUCCESS; +@@ -1019,8 +796,8 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( + if (status == NDIS_STATUS_FAILURE) + { + if (cmdqelmt->buffer) +- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0); +- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0); ++ os_free_mem(pAd, cmdqelmt->buffer); ++ os_free_mem(pAd, cmdqelmt); + } + else + RTUSBCMDUp(pAd); +@@ -1054,17 +831,17 @@ NDIS_STATUS RTUSBEnqueueInternalCmd( + PCmdQElmt cmdqelmt = NULL; + + +- status = RTMPAllocateMemory((PVOID *)&cmdqelmt, sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt, sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt)); + + if(InformationBufferLength > 0) + { +- status = RTMPAllocateMemory((PVOID *)&cmdqelmt->buffer, InformationBufferLength); ++ status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) + { +- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0); ++ os_free_mem(pAd, cmdqelmt); + return (NDIS_STATUS_RESOURCES); + } + else +@@ -1085,7 +862,7 @@ NDIS_STATUS RTUSBEnqueueInternalCmd( + if (cmdqelmt != NULL) + { + NdisAcquireSpinLock(&pAd->CmdQLock); +- if (pAd->CmdQ.CmdQState & RT2870_THREAD_CAN_DO_INSERT) ++ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) + { + EnqueueCmd((&pAd->CmdQ), cmdqelmt); + status = NDIS_STATUS_SUCCESS; +@@ -1099,8 +876,8 @@ NDIS_STATUS RTUSBEnqueueInternalCmd( + if (status == NDIS_STATUS_FAILURE) + { + if (cmdqelmt->buffer) +- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0); +- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0); ++ os_free_mem(pAd, cmdqelmt->buffer); ++ os_free_mem(pAd, cmdqelmt); + } + else + RTUSBCMDUp(pAd); +@@ -1185,7 +962,7 @@ NTSTATUS RTUSB_VendorRequest( + IN PVOID TransferBuffer, + IN UINT32 TransferBufferLength) + { +- int ret; ++ int ret = 0; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +@@ -1206,7 +983,18 @@ NTSTATUS RTUSB_VendorRequest( + int retryCount = 0; + void *tmpBuf = TransferBuffer; + +- // Acquire Control token ++ ret = down_interruptible(&(pAd->UsbVendorReq_semaphore)); ++ if (pAd->UsbVendorReqBuf) ++ { ++ ASSERT(TransferBufferLength UsbVendorReqBuf; ++ NdisZeroMemory(pAd->UsbVendorReqBuf, TransferBufferLength); ++ ++ if (RequestType == DEVICE_VENDOR_REQUEST_OUT) ++ NdisMoveMemory(tmpBuf, TransferBuffer, TransferBufferLength); ++ } ++ + do { + if( RequestType == DEVICE_VENDOR_REQUEST_OUT) + ret=usb_control_msg(pObj->pUsb_Dev, usb_sndctrlpipe( pObj->pUsb_Dev, 0 ), Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES); +@@ -1220,13 +1008,16 @@ NTSTATUS RTUSB_VendorRequest( + + retryCount++; + if (ret < 0) { +- printk("#\n"); ++ DBGPRINT(RT_DEBUG_OFF, ("#\n")); + RTMPusecDelay(5000); + } + } while((ret < 0) && (retryCount < MAX_RETRY_COUNT)); + ++ if ((pAd->UsbVendorReqBuf) && (RequestType == DEVICE_VENDOR_REQUEST_IN)) ++ NdisMoveMemory(TransferBuffer, tmpBuf, TransferBufferLength); ++ up(&(pAd->UsbVendorReq_semaphore)); ++ + if (ret < 0) { +-// DBGPRINT(RT_DEBUG_ERROR, ("USBVendorRequest failed ret=%d \n",ret)); + DBGPRINT(RT_DEBUG_ERROR, ("RTUSB_VendorRequest failed(%d),TxFlags=0x%x, ReqType=%s, Req=0x%x, Index=0x%x\n", + ret, TransferFlags, (RequestType == DEVICE_VENDOR_REQUEST_OUT ? "OUT" : "IN"), Request, Index)); + if (Request == 0x2) +@@ -1235,8 +1026,14 @@ NTSTATUS RTUSB_VendorRequest( + if ((TransferBuffer!= NULL) && (TransferBufferLength > 0)) + hex_dump("Failed TransferBuffer value", TransferBuffer, TransferBufferLength); + } ++ ++ + } +- return ret; ++ ++ if (ret != -1) ++ return STATUS_SUCCESS; ++ else ++ return STATUS_UNSUCCESSFUL; + } + + /* +@@ -1275,7 +1072,7 @@ VOID CMDHandler( + NTSTATUS ntStatus; + // unsigned long IrqFlags; + +- while (pAd->CmdQ.size > 0) ++ while (pAd && pAd->CmdQ.size > 0) + { + NdisStatus = NDIS_STATUS_SUCCESS; + +@@ -1410,8 +1207,6 @@ VOID CMDHandler( + + //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); + RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +-/*-----------------------------------------------------------------------------------------------*/ +-/*-----------------------------------------------------------------------------------------------*/ + { + RTUSBInitHTTxDesc(pAd, pHTTXContext, pAd->bulkResetPipeid, pHTTXContext->BulkOutSize, (usb_complete_t)RTUSBBulkOutDataPacketComplete); + +@@ -1522,8 +1317,7 @@ VOID CMDHandler( + // All transfers must be aborted or cancelled before attempting to reset the pipe. + { + UINT32 MACValue; +-/*-----------------------------------------------------------------------------------------------*/ +-/*-----------------------------------------------------------------------------------------------*/ ++ + { + //while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) + if((pAd->PendingRx > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +@@ -1612,6 +1406,8 @@ VOID CMDHandler( + } + else + { // success ++ //DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", ++ // pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); + DBGPRINT_RAW(RT_DEBUG_TRACE, ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n", pUrb->status)); + ASSERT((pRxContext->InUse == pRxContext->IRPPending)); + } +@@ -1722,6 +1518,40 @@ VOID CMDHandler( + } + } + break; ++ ++//Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> ++ case RT_CMD_SET_KEY_TABLE: //General call for AsicAddPairwiseKeyEntry() ++ { ++ RT_ADD_PAIRWISE_KEY_ENTRY KeyInfo; ++ KeyInfo = *((PRT_ADD_PAIRWISE_KEY_ENTRY)(pData)); ++ AsicAddPairwiseKeyEntry(pAd, ++ KeyInfo.MacAddr, ++ (UCHAR)KeyInfo.MacTabMatchWCID, ++ &KeyInfo.CipherKey); ++ } ++ break; ++ ++ case RT_CMD_SET_RX_WCID_TABLE: //General call for RTMPAddWcidAttributeEntry() ++ { ++ PMAC_TABLE_ENTRY pEntry ; ++ UCHAR KeyIdx = 0; ++ UCHAR CipherAlg = CIPHER_NONE; ++ UCHAR ApIdx = BSS0; ++ ++ pEntry = (PMAC_TABLE_ENTRY)(pData); ++ ++ ++ ++ RTMPAddWcidAttributeEntry( ++ pAd, ++ ApIdx, ++ KeyIdx, ++ CipherAlg, ++ pEntry); ++ } ++ break; ++//Benson modified for USB interface, avoid in interrupt when write key, 20080724 <-- ++ + case CMDTHREAD_SET_CLIENT_MAC_ENTRY: + { + MAC_TABLE_ENTRY *pEntry; +@@ -1731,7 +1561,7 @@ VOID CMDHandler( + AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)pEntry->Aid); + if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) + { +- UINT32 uIV = 0; ++ UINT32 uIV = 1; + PUCHAR ptr; + + ptr = (PUCHAR) &uIV; +@@ -1741,7 +1571,7 @@ VOID CMDHandler( + } + else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone) + { +- UINT32 uIV = 0; ++ UINT32 uIV = 1; + PUCHAR ptr; + + ptr = (PUCHAR) &uIV; +@@ -1763,15 +1593,19 @@ VOID CMDHandler( + } + + AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); +- printk("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", pEntry->Aid, +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); ++ DBGPRINT(RT_DEBUG_TRACE, ("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", pEntry->Aid, ++ pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); + } + break; ++ ++// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet + case CMDTHREAD_UPDATE_PROTECT: + { + AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0); + } + break; ++// end johnli ++ + case OID_802_11_ADD_WEP: + { + UINT i; +@@ -1852,6 +1686,25 @@ VOID CMDHandler( + + case CMDTHREAD_802_11_COUNTER_MEASURE: + break; ++ ++ case CMDTHREAD_SET_GROUP_KEY: ++ WpaStaGroupKeySetting(pAd); ++ break; ++ ++ case CMDTHREAD_SET_PAIRWISE_KEY: ++ WpaStaPairwiseKeySetting(pAd); ++ break; ++ ++ case CMDTHREAD_SET_PSM_BIT: ++ { ++ USHORT *pPsm = (USHORT *)pData; ++ MlmeSetPsmBit(pAd, *pPsm); ++ } ++ break; ++ case CMDTHREAD_FORCE_WAKE_UP: ++ AsicForceWakeup(pAd, TRUE); ++ break; ++ + default: + DBGPRINT(RT_DEBUG_ERROR, ("--> Control Thread !! ERROR !! Unknown(cmdqelmt->command=0x%x) !! \n", cmdqelmt->command)); + break; +@@ -1861,18 +1714,16 @@ VOID CMDHandler( + if (cmdqelmt->CmdFromNdis == TRUE) + { + if (cmdqelmt->buffer != NULL) +- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0); +- +- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0); ++ os_free_mem(pAd, cmdqelmt->buffer); ++ os_free_mem(pAd, cmdqelmt); + } + else + { + if ((cmdqelmt->buffer != NULL) && (cmdqelmt->bufferlength != 0)) +- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0); +- { +- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0); +- } ++ os_free_mem(pAd, cmdqelmt->buffer); ++ os_free_mem(pAd, cmdqelmt); + } + } /* end of while */ + } + ++#endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2870/rt2870.h b/drivers/staging/rt2870/rt2870.h +deleted file mode 100644 +index 4c67baf..0000000 +--- a/drivers/staging/rt2870/rt2870.h ++++ /dev/null +@@ -1,583 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __RT2870_H__ +-#define __RT2870_H__ +- +-//usb header files +-#include +- +-/* rtmp_def.h */ +-// +-#define BULKAGGRE_ZISE 100 +-#define RT28XX_DRVDATA_SET(_a) usb_set_intfdata(_a, pAd); +-#define RT28XX_PUT_DEVICE usb_put_dev +-#define RTUSB_ALLOC_URB(iso) usb_alloc_urb(iso, GFP_ATOMIC) +-#define RTUSB_SUBMIT_URB(pUrb) usb_submit_urb(pUrb, GFP_ATOMIC) +-#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr) usb_buffer_alloc(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr) +-#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) +- +-#define RXBULKAGGRE_ZISE 12 +-#define MAX_TXBULK_LIMIT (LOCAL_TXBUF_SIZE*(BULKAGGRE_ZISE-1)) +-#define MAX_TXBULK_SIZE (LOCAL_TXBUF_SIZE*BULKAGGRE_ZISE) +-#define MAX_RXBULK_SIZE (LOCAL_TXBUF_SIZE*RXBULKAGGRE_ZISE) +-#define MAX_MLME_HANDLER_MEMORY 20 +-#define RETRY_LIMIT 10 +-#define BUFFER_SIZE 2400 //2048 +-#define TX_RING 0xa +-#define PRIO_RING 0xc +- +- +-// Flags for Bulkflags control for bulk out data +-// +-#define fRTUSB_BULK_OUT_DATA_NULL 0x00000001 +-#define fRTUSB_BULK_OUT_RTS 0x00000002 +-#define fRTUSB_BULK_OUT_MLME 0x00000004 +- +-#define fRTUSB_BULK_OUT_DATA_NORMAL 0x00010000 +-#define fRTUSB_BULK_OUT_DATA_NORMAL_2 0x00020000 +-#define fRTUSB_BULK_OUT_DATA_NORMAL_3 0x00040000 +-#define fRTUSB_BULK_OUT_DATA_NORMAL_4 0x00080000 +-#define fRTUSB_BULK_OUT_DATA_NORMAL_5 0x00100000 +- +-#define fRTUSB_BULK_OUT_PSPOLL 0x00000020 +-#define fRTUSB_BULK_OUT_DATA_FRAG 0x00000040 +-#define fRTUSB_BULK_OUT_DATA_FRAG_2 0x00000080 +-#define fRTUSB_BULK_OUT_DATA_FRAG_3 0x00000100 +-#define fRTUSB_BULK_OUT_DATA_FRAG_4 0x00000200 +- +-#define FREE_HTTX_RING(_p, _b, _t) \ +-{ \ +- if ((_t)->ENextBulkOutPosition == (_t)->CurWritePosition) \ +- { \ +- (_t)->bRingEmpty = TRUE; \ +- } \ +- /*NdisInterlockedDecrement(&(_p)->TxCount); */\ +-} +- +-// +-// RXINFO appends at the end of each rx packet. +-// +-typedef struct PACKED _RXINFO_STRUC { +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; // To be moved +- UINT32 Decrypted:1; +- UINT32 PlcpRssil:1; +- UINT32 CipherAlg:1; +- UINT32 LastAMSDU:1; +- UINT32 PlcpSignal:12; +-} RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; +- +-// +-// TXINFO +-// +-typedef struct _TXINFO_STRUC { +- // Word 0 +- UINT32 USBDMATxPktLen:16; //used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. +- UINT32 rsv:8; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 SwUseLastRound:1; // Software use. +- UINT32 rsv2:2; // Software use. +- UINT32 USBDMANextVLD:1; //used ONLY in USB bulk Aggregation, NextValid +- UINT32 USBDMATxburst:1;//used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint +-} TXINFO_STRUC, *PTXINFO_STRUC; +- +-#define TXINFO_SIZE 4 +-#define RXINFO_SIZE 4 +-#define TXPADDING_SIZE 11 +- +-// +-// Management ring buffer format +-// +-typedef struct _MGMT_STRUC { +- BOOLEAN Valid; +- PUCHAR pBuffer; +- ULONG Length; +-} MGMT_STRUC, *PMGMT_STRUC; +- +- +-/* ----------------- EEPROM Related MACRO ----------------- */ +-#define RT28xx_EEPROM_READ16(pAd, offset, var) \ +- do { \ +- RTUSBReadEEPROM(pAd, offset, (PUCHAR)&(var), 2); \ +- if(!pAd->bUseEfuse) \ +- var = le2cpu16(var); \ +- }while(0) +- +-#define RT28xx_EEPROM_WRITE16(pAd, offset, var) \ +- do{ \ +- USHORT _tmpVar=var; \ +- if(!pAd->bUseEfuse) \ +- _tmpVar = cpu2le16(var); \ +- RTUSBWriteEEPROM(pAd, offset, (PUCHAR)&(_tmpVar), 2); \ +- }while(0) +- +-/* ----------------- TASK/THREAD Related MACRO ----------------- */ +-#define RT28XX_TASK_THREAD_INIT(pAd, Status) \ +- Status = CreateThreads(net_dev); +- +- +-/* ----------------- Frimware Related MACRO ----------------- */ +-#define RT28XX_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ +- RTUSBFirmwareWrite(_pAd, _pFwImage, _FwLen) +- +-/* ----------------- TX Related MACRO ----------------- */ +-#define RT28XX_START_DEQUEUE(pAd, QueIdx, irqFlags) \ +- { \ +- RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ +- if (pAd->DeQueueRunning[QueIdx]) \ +- { \ +- RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ +- printk("DeQueueRunning[%d]= TRUE!\n", QueIdx); \ +- continue; \ +- } \ +- else \ +- { \ +- pAd->DeQueueRunning[QueIdx] = TRUE; \ +- RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ +- } \ +- } +-#define RT28XX_STOP_DEQUEUE(pAd, QueIdx, irqFlags) \ +- do{ \ +- RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ +- pAd->DeQueueRunning[QueIdx] = FALSE; \ +- RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ +- }while(0) +- +- +-#define RT28XX_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ +- (RTUSBFreeDescriptorRequest(pAd, pTxBlk->QueIdx, (pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket))) == NDIS_STATUS_SUCCESS) +- +-#define RT28XX_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ +- do{}while(0) +- +-#define NEED_QUEUE_BACK_FOR_AGG(_pAd, _QueIdx, _freeNum, _TxFrameType) \ +- ((_TxFrameType == TX_RALINK_FRAME) && (RTUSBNeedQueueBackForAgg(_pAd, _QueIdx))) +- +- +- +-#define fRTMP_ADAPTER_NEED_STOP_TX \ +- (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS | \ +- fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_BULKOUT_RESET | \ +- fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_REMOVE_IN_PROGRESS) +- +- +-#define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ +- RtmpUSB_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) +- +-#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ +- RtmpUSB_WriteSingleTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) +- +-#define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ +- RtmpUSB_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) +- +-#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ +- RtmpUSB_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) +- +-#define HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) \ +- RtmpUSB_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) +- +-#define HAL_LastTxIdx(pAd, QueIdx,TxIdx) \ +- /*RtmpUSBDataLastTxIdx(pAd, QueIdx,TxIdx)*/ +- +-#define HAL_KickOutTx(pAd, pTxBlk, QueIdx) \ +- RtmpUSBDataKickOut(pAd, pTxBlk, QueIdx) +- +- +-#define HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen) \ +- RtmpUSBMgmtKickOut(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen) +- +-#define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ +- RtmpUSBNullFrameKickOut(_pAd, _QueIdx, _pNullFrame, _frameLen) +- +-#define RTMP_PKT_TAIL_PADDING 11 // 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) +- +-extern UCHAR EpToQueue[6]; +- +- +-#ifdef RT2870 +-#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx) +-#define GET_MGMTRING_FREENO(_pAd) (_pAd->MgmtRing.TxSwFreeIdx) +-#endif // RT2870 // +- +- +-/* ----------------- RX Related MACRO ----------------- */ +-//#define RT28XX_RX_ERROR_CHECK RTMPCheckRxWI +- +-#define RT28XX_RV_ALL_BUF_END(bBulkReceive) \ +- /* We return STATUS_MORE_PROCESSING_REQUIRED so that the completion */ \ +- /* routine (IofCompleteRequest) will stop working on the irp. */ \ +- if (bBulkReceive == TRUE) RTUSBBulkReceive(pAd); +- +- +-/* ----------------- ASIC Related MACRO ----------------- */ +- +-// reset MAC of a station entry to 0xFFFFFFFFFFFF +-#define RT28XX_STA_ENTRY_MAC_RESET(pAd, Wcid) \ +- { RT_SET_ASIC_WCID SetAsicWcid; \ +- SetAsicWcid.WCID = Wcid; \ +- SetAsicWcid.SetTid = 0xffffffff; \ +- SetAsicWcid.DeleteTid = 0xffffffff; \ +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID, \ +- &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); } +- +-// add this entry into ASIC RX WCID search table +-#define RT28XX_STA_ENTRY_ADD(pAd, pEntry) \ +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY, \ +- pEntry, sizeof(MAC_TABLE_ENTRY)); +- +-// remove Pair-wise key material from ASIC +-// yet implement +-#define RT28XX_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) +- +-// add Client security information into ASIC WCID table and IVEIV table +-#define RT28XX_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ +- { RT28XX_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid); \ +- if (pEntry->Aid >= 1) { \ +- RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; \ +- SetAsicWcidAttri.WCID = pEntry->Aid; \ +- if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && \ +- (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) \ +- { \ +- SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ +- } \ +- else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone) \ +- { \ +- SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ +- } \ +- else SetAsicWcidAttri.Cipher = 0; \ +- DBGPRINT(RT_DEBUG_TRACE, ("aid cipher = %ld\n",SetAsicWcidAttri.Cipher)); \ +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER, \ +- &SetAsicWcidAttri, sizeof(RT_SET_ASIC_WCID_ATTRI)); } } +- +-// Insert the BA bitmap to ASIC for the Wcid entry +-#define RT28XX_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ +- do{ \ +- RT_SET_ASIC_WCID SetAsicWcid; \ +- SetAsicWcid.WCID = (_Aid); \ +- SetAsicWcid.SetTid = (0x10000<<(_TID)); \ +- SetAsicWcid.DeleteTid = 0xffffffff; \ +- RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ +- }while(0) +- +-// Remove the BA bitmap from ASIC for the Wcid entry +-#define RT28XX_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ +- do{ \ +- RT_SET_ASIC_WCID SetAsicWcid; \ +- SetAsicWcid.WCID = (_Wcid); \ +- SetAsicWcid.SetTid = (0xffffffff); \ +- SetAsicWcid.DeleteTid = (0x10000<<(_TID) ); \ +- RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ +- }while(0) +- +- +-/* ----------------- PCI/USB Related MACRO ----------------- */ +-#define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ +- ((POS_COOKIE)handle)->pUsb_Dev = dev_p; +- +-// no use +-#define RT28XX_UNMAP() +-#define RT28XX_IRQ_REQUEST(net_dev) +-#define RT28XX_IRQ_RELEASE(net_dev) +-#define RT28XX_IRQ_INIT(pAd) +-#define RT28XX_IRQ_ENABLE(pAd) +- +- +-/* ----------------- MLME Related MACRO ----------------- */ +-#define RT28XX_MLME_HANDLER(pAd) RTUSBMlmeUp(pAd) +- +-#define RT28XX_MLME_PRE_SANITY_CHECK(pAd) \ +- { if ((pAd->CommonCfg.bHardwareRadio == TRUE) && \ +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && \ +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) { \ +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_CHECK_GPIO, NULL, 0); } } +- +-#define RT28XX_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ +- { RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_QKERIODIC_EXECUT, NULL, 0); \ +- RTUSBMlmeUp(pAd); } +- +-#define RT28XX_MLME_RESET_STATE_MACHINE(pAd) \ +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_RESET_CONF, 0, NULL); \ +- RTUSBMlmeUp(pAd); +- +-#define RT28XX_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ +- { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(MAC_TABLE_ENTRY)); \ +- RTUSBMlmeUp(_pAd); \ +- } +- +- +-/* ----------------- Power Save Related MACRO ----------------- */ +-#define RT28XX_PS_POLL_ENQUEUE(pAd) \ +- { RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL); \ +- RTUSBKickBulkOut(pAd); } +- +-#define RT28xx_CHIP_NAME "RTxx70" +- +-#define USB_CYC_CFG 0x02a4 +-#define STATUS_SUCCESS 0x00 +-#define STATUS_UNSUCCESSFUL 0x01 +-#define NT_SUCCESS(status) (((status) > 0) ? (1):(0)) +-#define InterlockedIncrement atomic_inc +-#define NdisInterlockedIncrement atomic_inc +-#define InterlockedDecrement atomic_dec +-#define NdisInterlockedDecrement atomic_dec +-#define InterlockedExchange atomic_set +-//#define NdisMSendComplete RTMP_SendComplete +-#define NdisMCancelTimer RTMPCancelTimer +-#define NdisAllocMemory(_ptr, _size, _flag) \ +- do{_ptr = kmalloc((_size),(_flag));}while(0) +-#define NdisFreeMemory(a, b, c) kfree((a)) +-#define NdisMSleep RTMPusecDelay /* unit: microsecond */ +- +- +-#define USBD_TRANSFER_DIRECTION_OUT 0 +-#define USBD_TRANSFER_DIRECTION_IN 0 +-#define USBD_SHORT_TRANSFER_OK 0 +-#define PURB purbb_t +- +-#define RTUSB_FREE_URB(pUrb) usb_free_urb(pUrb) +- +-//#undef MlmeAllocateMemory +-//#undef MlmeFreeMemory +- +-typedef struct usb_device * PUSB_DEV; +- +-/* MACRO for linux usb */ +-typedef struct urb *purbb_t; +-typedef struct usb_ctrlrequest devctrlrequest; +-#define PIRP PVOID +-#define PMDL PVOID +-#define NDIS_OID UINT +-#ifndef USB_ST_NOERROR +-#define USB_ST_NOERROR 0 +-#endif +- +-// vendor-specific control operations +-#define CONTROL_TIMEOUT_JIFFIES ( (100 * HZ) / 1000) +-#define UNLINK_TIMEOUT_MS 3 +- +-/* unlink urb */ +-#define RTUSB_UNLINK_URB(pUrb) usb_kill_urb(pUrb) +- +-// Prototypes of completion funuc. +-VOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); +- +-#define RTUSBMlmeUp(pAd) \ +-{ \ +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; \ +- if (pid_nr(pObj->MLMEThr_pid) > 0) \ +- up(&(pAd->mlme_semaphore)); \ +-} +- +-#define RTUSBCMDUp(pAd) \ +-{ \ +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; \ +- if (pid_nr(pObj->RTUSBCmdThr_pid) > 0) \ +- up(&(pAd->RTUSBCmd_semaphore)); \ +-} +- +-static inline NDIS_STATUS RTMPAllocateMemory( +- OUT PVOID *ptr, +- IN size_t size) +-{ +- *ptr = kmalloc(size, GFP_ATOMIC); +- if(*ptr) +- return NDIS_STATUS_SUCCESS; +- else +- return NDIS_STATUS_RESOURCES; +-} +- +-/* rtmp.h */ +-#define BEACON_RING_SIZE 2 +-#define DEVICE_VENDOR_REQUEST_OUT 0x40 +-#define DEVICE_VENDOR_REQUEST_IN 0xc0 +-#define INTERFACE_VENDOR_REQUEST_OUT 0x41 +-#define INTERFACE_VENDOR_REQUEST_IN 0xc1 +-#define MGMTPIPEIDX 0 // EP6 is highest priority +- +-#define BULKOUT_MGMT_RESET_FLAG 0x80 +- +-#define RTUSB_SET_BULK_FLAG(_M, _F) ((_M)->BulkFlags |= (_F)) +-#define RTUSB_CLEAR_BULK_FLAG(_M, _F) ((_M)->BulkFlags &= ~(_F)) +-#define RTUSB_TEST_BULK_FLAG(_M, _F) (((_M)->BulkFlags & (_F)) != 0) +- +-#define EnqueueCmd(cmdq, cmdqelmt) \ +-{ \ +- if (cmdq->size == 0) \ +- cmdq->head = cmdqelmt; \ +- else \ +- cmdq->tail->next = cmdqelmt; \ +- cmdq->tail = cmdqelmt; \ +- cmdqelmt->next = NULL; \ +- cmdq->size++; \ +-} +- +-typedef struct _RT_SET_ASIC_WCID { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG SetTid; // time-based: seconds, packet-based: kilo-packets +- ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets +- UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key +-} RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID; +- +-typedef struct _RT_SET_ASIC_WCID_ATTRI { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG Cipher; // ASIC Cipher definition +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; +-} RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI; +- +-typedef struct _MLME_MEMORY_STRUCT { +- PVOID AllocVa; //Pointer to the base virtual address of the allocated memory +- struct _MLME_MEMORY_STRUCT *Next; //Pointer to the next virtual address of the allocated memory +-} MLME_MEMORY_STRUCT, *PMLME_MEMORY_STRUCT; +- +-typedef struct _MLME_MEMORY_HANDLER { +- BOOLEAN MemRunning; //The flag of the Mlme memory handler's status +- UINT MemoryCount; //Total nonpaged system-space memory not size +- UINT InUseCount; //Nonpaged system-space memory in used counts +- UINT UnUseCount; //Nonpaged system-space memory available counts +- INT PendingCount; //Nonpaged system-space memory for free counts +- PMLME_MEMORY_STRUCT pInUseHead; //Pointer to the first nonpaed memory not used +- PMLME_MEMORY_STRUCT pInUseTail; //Pointer to the last nonpaged memory not used +- PMLME_MEMORY_STRUCT pUnUseHead; //Pointer to the first nonpaged memory in used +- PMLME_MEMORY_STRUCT pUnUseTail; //Pointer to the last nonpaged memory in used +- PULONG MemFreePending[MAX_MLME_HANDLER_MEMORY]; //an array to keep pending free-memory's pointer (32bits) +-} MLME_MEMORY_HANDLER, *PMLME_MEMORY_HANDLER; +- +-typedef struct _CmdQElmt { +- UINT command; +- PVOID buffer; +- ULONG bufferlength; +- BOOLEAN CmdFromNdis; +- BOOLEAN SetOperation; +- struct _CmdQElmt *next; +-} CmdQElmt, *PCmdQElmt; +- +-typedef struct _CmdQ { +- UINT size; +- CmdQElmt *head; +- CmdQElmt *tail; +- UINT32 CmdQState; +-}CmdQ, *PCmdQ; +- +-/* oid.h */ +-// Cipher suite type for mixed mode group cipher, P802.11i-2004 +-typedef enum _RT_802_11_CIPHER_SUITE_TYPE { +- Cipher_Type_NONE, +- Cipher_Type_WEP40, +- Cipher_Type_TKIP, +- Cipher_Type_RSVD, +- Cipher_Type_CCMP, +- Cipher_Type_WEP104 +-} RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE; +- +-//CMDTHREAD_MULTI_READ_MAC +-//CMDTHREAD_MULTI_WRITE_MAC +-//CMDTHREAD_VENDOR_EEPROM_READ +-//CMDTHREAD_VENDOR_EEPROM_WRITE +-typedef struct _CMDHandler_TLV { +- USHORT Offset; +- USHORT Length; +- UCHAR DataFirst; +-} CMDHandler_TLV, *PCMDHandler_TLV; +- +-// New for MeetingHouse Api support +-#define CMDTHREAD_VENDOR_RESET 0x0D730101 // cmd +-#define CMDTHREAD_VENDOR_UNPLUG 0x0D730102 // cmd +-#define CMDTHREAD_VENDOR_SWITCH_FUNCTION 0x0D730103 // cmd +-#define CMDTHREAD_MULTI_WRITE_MAC 0x0D730107 // cmd +-#define CMDTHREAD_MULTI_READ_MAC 0x0D730108 // cmd +-#define CMDTHREAD_VENDOR_EEPROM_WRITE 0x0D73010A // cmd +-#define CMDTHREAD_VENDOR_EEPROM_READ 0x0D73010B // cmd +-#define CMDTHREAD_VENDOR_ENTER_TESTMODE 0x0D73010C // cmd +-#define CMDTHREAD_VENDOR_EXIT_TESTMODE 0x0D73010D // cmd +-#define CMDTHREAD_VENDOR_WRITE_BBP 0x0D730119 // cmd +-#define CMDTHREAD_VENDOR_READ_BBP 0x0D730118 // cmd +-#define CMDTHREAD_VENDOR_WRITE_RF 0x0D73011A // cmd +-#define CMDTHREAD_VENDOR_FLIP_IQ 0x0D73011D // cmd +-#define CMDTHREAD_RESET_BULK_OUT 0x0D730210 // cmd +-#define CMDTHREAD_RESET_BULK_IN 0x0D730211 // cmd +-#define CMDTHREAD_SET_PSM_BIT_SAVE 0x0D730212 // cmd +-#define CMDTHREAD_SET_RADIO 0x0D730214 // cmd +-#define CMDTHREAD_UPDATE_TX_RATE 0x0D730216 // cmd +-#define CMDTHREAD_802_11_ADD_KEY_WEP 0x0D730218 // cmd +-#define CMDTHREAD_RESET_FROM_ERROR 0x0D73021A // cmd +-#define CMDTHREAD_LINK_DOWN 0x0D73021B // cmd +-#define CMDTHREAD_RESET_FROM_NDIS 0x0D73021C // cmd +-#define CMDTHREAD_CHECK_GPIO 0x0D730215 // cmd +-#define CMDTHREAD_FORCE_WAKE_UP 0x0D730222 // cmd +-#define CMDTHREAD_SET_BW 0x0D730225 // cmd +-#define CMDTHREAD_SET_ASIC_WCID 0x0D730226 // cmd +-#define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 // cmd +-#define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D // cmd +-#define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E // cmd +-#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER 0x0D710105 // cmd +-#define CMDTHREAD_802_11_SET_PHY_MODE 0x0D79010C // cmd +-#define CMDTHREAD_802_11_SET_STA_CONFIG 0x0D790111 // cmd +-#define CMDTHREAD_802_11_SET_PREAMBLE 0x0D790101 // cmd +-#define CMDTHREAD_802_11_COUNTER_MEASURE 0x0D790102 // cmd +-#define CMDTHREAD_UPDATE_PROTECT 0x0D790103 // cmd +- +-#define WPA1AKMBIT 0x01 +-#define WPA2AKMBIT 0x02 +-#define WPA1PSKAKMBIT 0x04 +-#define WPA2PSKAKMBIT 0x08 +-#define TKIPBIT 0x01 +-#define CCMPBIT 0x02 +- +- +-#define RT28XX_STA_FORCE_WAKEUP(pAd, bFromTx) \ +- RT28xxUsbStaAsicForceWakeup(pAd, bFromTx); +- +-#define RT28XX_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ +- RT28xxUsbStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); +- +-#define RT28XX_MLME_RADIO_ON(pAd) \ +- RT28xxUsbMlmeRadioOn(pAd); +- +-#define RT28XX_MLME_RADIO_OFF(pAd) \ +- RT28xxUsbMlmeRadioOFF(pAd); +- +-#endif //__RT2870_H__ +diff --git a/drivers/staging/rt2870/rt_usb.c b/drivers/staging/rt2870/rt_usb.c +new file mode 100644 +index 0000000..5e02d4c +--- /dev/null ++++ b/drivers/staging/rt2870/rt_usb.c +@@ -0,0 +1 @@ ++#include "../rt2860/rt_usb.c" +diff --git a/drivers/staging/rt2870/usb_main_dev.c b/drivers/staging/rt2870/usb_main_dev.c +new file mode 100644 +index 0000000..6e63bc5 +--- /dev/null ++++ b/drivers/staging/rt2870/usb_main_dev.c +@@ -0,0 +1 @@ ++#include "../rt2860/usb_main_dev.c" +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch b/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch new file mode 100644 index 000000000..fe0241c78 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch @@ -0,0 +1,496 @@ +From d040160beeb549525fb1098db3ff84b06d87620d Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Tue, 22 Sep 2009 20:44:15 +0200 +Subject: [PATCH 02/42] Staging: rt28x0: remove unused code from common/dfs.c + +commit c3126b93b512c046340dfc4ab38beabd8084169f upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/dfs.c | 378 ----------------------------------- + drivers/staging/rt2860/dfs.h | 75 ------- + 2 files changed, 0 insertions(+), 453 deletions(-) + +diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c +index 7b3890f..11b7c19 100644 +--- a/drivers/staging/rt2860/common/dfs.c ++++ b/drivers/staging/rt2860/common/dfs.c +@@ -37,196 +37,6 @@ + + #include "../rt_config.h" + +-typedef struct _RADAR_DURATION_TABLE +-{ +- ULONG RDDurRegion; +- ULONG RadarSignalDuration; +- ULONG Tolerance; +-} RADAR_DURATION_TABLE, *PRADAR_DURATION_TABLE; +- +- +- +-UCHAR RdIdleTimeTable[MAX_RD_REGION][4] = +-{ +- {9, 250, 250, 250}, // CE +-#ifdef DFS_FCC_BW40_FIX +- {1, 250, 250, 250}, // FCC +-#else +- {4, 250, 250, 250}, // FCC +-#endif +- {4, 250, 250, 250}, // JAP +- {15, 250, 250, 250}, // JAP_W53 +- {4, 250, 250, 250} // JAP_W56 +-}; +- +-/* +- ======================================================================== +- +- Routine Description: +- Bbp Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID BbpRadarDetectionStart( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT8 RadarPeriod; +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 114, 0x02); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 121, 0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 122, 0x00); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 123, 0x08/*0x80*/); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 124, 0x28); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 125, 0xff); +- +-#ifdef MERGE_ARCH_TEAM +- if ((pAd->CommonCfg.RadarDetect.RDDurRegion == JAP) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = JAP; +- pAd->CommonCfg.RadarDetect.RDDurRegion = JapRadarType(pAd); +- if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56) +- { +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- else if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) +- { +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 15; +- } +- } +-#endif // MERGE_ARCH_TEAM // +- +- RadarPeriod = ((UINT)RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + (UINT)pAd->CommonCfg.RadarDetect.DfsSessionTime) < 250 ? +- (RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + pAd->CommonCfg.RadarDetect.DfsSessionTime) : 250; +- +-#ifdef MERGE_ARCH_TEAM +- +- +-#else // Original RT28xx source code. +- RTMP_IO_WRITE8(pAd, 0x7020, 0x1d); +- RTMP_IO_WRITE8(pAd, 0x7021, 0x40); +-#endif // MERGE_ARCH_TEAM // +- +- RadarDetectionStart(pAd, 0, RadarPeriod); +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Bbp Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID BbpRadarDetectionStop( +- IN PRTMP_ADAPTER pAd) +-{ +- RTMP_IO_WRITE8(pAd, 0x7020, 0x1d); +- RTMP_IO_WRITE8(pAd, 0x7021, 0x60); +- +- RadarDetectionStop(pAd); +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID RadarDetectionStart( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN CTSProtect, +- IN UINT8 CTSPeriod) +-{ +- UINT8 DfsActiveTime = (pAd->CommonCfg.RadarDetect.DfsSessionTime & 0x1f); +- UINT8 CtsProtect = (CTSProtect == 1) ? 0x02 : 0x01; // CTS protect. +- +- if (CTSProtect != 0) +- { +- switch(pAd->CommonCfg.RadarDetect.RDDurRegion) +- { +- case FCC: +- case JAP_W56: +- CtsProtect = 0x03; +- break; +- +- case JAP: +- { +- UCHAR RDDurRegion; +- RDDurRegion = JapRadarType(pAd); +- if (RDDurRegion == JAP_W56) +- CtsProtect = 0x03; +- else +- CtsProtect = 0x02; +- break; +- } +- +- case CE: +- case JAP_W53: +- default: +- CtsProtect = 0x02; +- break; +- } +- } +- else +- CtsProtect = 0x01; +- +- +- // send start-RD with CTS protection command to MCU +- // highbyte [7] reserve +- // highbyte [6:5] 0x: stop Carrier/Radar detection +- // highbyte [10]: Start Carrier/Radar detection without CTS protection, 11: Start Carrier/Radar detection with CTS protection +- // highbyte [4:0] Radar/carrier detection duration. In 1ms. +- +- // lowbyte [7:0] Radar/carrier detection period, in 1ms. +- AsicSendCommandToMcu(pAd, 0x60, 0xff, CTSPeriod, DfsActiveTime | (CtsProtect << 5)); +- //AsicSendCommandToMcu(pAd, 0x63, 0xff, 10, 0); +- +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- TRUE Found radar signal +- FALSE Not found radar signal +- +- ======================================================================== +-*/ +-VOID RadarDetectionStop( +- IN PRTMP_ADAPTER pAd) +-{ +- DBGPRINT(RT_DEBUG_TRACE,("RadarDetectionStop.\n")); +- AsicSendCommandToMcu(pAd, 0x60, 0xff, 0x00, 0x00); // send start-RD with CTS protection command to MCU +- +- return; +-} +- + /* + ======================================================================== + +@@ -260,191 +70,3 @@ BOOLEAN RadarChannelCheck( + + return result; + } +- +-ULONG JapRadarType( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG i; +- const UCHAR Channel[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +- +- if (pAd->CommonCfg.RadarDetect.RDDurRegion != JAP) +- { +- return pAd->CommonCfg.RadarDetect.RDDurRegion; +- } +- +- for (i=0; i<15; i++) +- { +- if (pAd->CommonCfg.Channel == Channel[i]) +- { +- break; +- } +- } +- +- if (i < 4) +- return JAP_W53; +- else if (i < 15) +- return JAP_W56; +- else +- return JAP; // W52 +- +-} +- +-ULONG RTMPBbpReadRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT8 byteValue = 0; +- ULONG result; +- +- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R115, &byteValue); +- +- result = 0; +- switch (byteValue) +- { +- case 1: // radar signal detected by pulse mode. +- case 2: // radar signal detected by width mode. +- result = RTMPReadRadarDuration(pAd); +- break; +- +- case 0: // No radar signal. +- default: +- +- result = 0; +- break; +- } +- +- return result; +-} +- +-ULONG RTMPReadRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG result = 0; +- +- return result; +- +-} +- +-VOID RTMPCleanRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- return; +-} +- +-/* +- ======================================================================== +- Routine Description: +- Radar wave detection. The API should be invoke each second. +- +- Arguments: +- pAd - Adapter pointer +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID ApRadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- +- pAd->CommonCfg.RadarDetect.InServiceMonitorCount++; +- +- for (i=0; iChannelListNum; i++) +- { +- if (pAd->ChannelList[i].RemainingTimeForUse > 0) +- { +- pAd->ChannelList[i].RemainingTimeForUse --; +- if ((pAd->Mlme.PeriodicRound%5) == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RadarDetectPeriodic - ch=%d, RemainingTimeForUse=%d\n", pAd->ChannelList[i].Channel, pAd->ChannelList[i].RemainingTimeForUse)); +- } +- } +- } +- +- //radar detect +- if ((pAd->CommonCfg.Channel > 14) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- RadarDetectPeriodic(pAd); +- } +- +- return; +-} +- +-// Periodic Radar detection, switch channel will occur in RTMPHandleTBTTInterrupt() +-// Before switch channel, driver needs doing channel switch announcement. +-VOID RadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd) +-{ +- // need to check channel availability, after switch channel +- if (pAd->CommonCfg.RadarDetect.RDMode != RD_SILENCE_MODE) +- return; +- +- // channel availability check time is 60sec, use 65 for assurance +- if (pAd->CommonCfg.RadarDetect.RDCount++ > pAd->CommonCfg.RadarDetect.ChMovingTime) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Not found radar signal, start send beacon and radar detection in service monitor\n\n")); +- BbpRadarDetectionStop(pAd); +- AsicEnableBssSync(pAd); +- pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; +- +- +- return; +- } +- +- return; +-} +- +- +-/* +- ========================================================================== +- Description: +- change channel moving time for DFS testing. +- +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 set ChMovTime=[value] +- ========================================================================== +-*/ +-INT Set_ChMovingTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT8 Value; +- +- Value = (UINT8) simple_strtol(arg, 0, 10); +- +- pAd->CommonCfg.RadarDetect.ChMovingTime = Value; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s:: %d\n", __func__, +- pAd->CommonCfg.RadarDetect.ChMovingTime)); +- +- return TRUE; +-} +- +-INT Set_LongPulseRadarTh_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT8 Value; +- +- Value = (UINT8) simple_strtol(arg, 0, 10) > 10 ? 10 : simple_strtol(arg, 0, 10); +- +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh = Value; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s:: %d\n", __func__, +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh)); +- +- return TRUE; +-} +- +- +diff --git a/drivers/staging/rt2860/dfs.h b/drivers/staging/rt2860/dfs.h +index 6fa6d65..9ab445c 100644 +--- a/drivers/staging/rt2860/dfs.h ++++ b/drivers/staging/rt2860/dfs.h +@@ -36,81 +36,6 @@ + Fonchi 03-12-2007 created + */ + +-#define RADAR_PULSE 1 +-#define RADAR_WIDTH 2 +- +-#define WIDTH_RD_IDLE 0 +-#define WIDTH_RD_CHECK 1 +- +- +- +-/************************************************************************* +- * +- * DFS Radar related definitions. +- * +- ************************************************************************/ +-//#define CARRIER_DETECT_TASK_NUM 6 +-//#define RADAR_DETECT_TASK_NUM 7 +- +-// McuRadarState && McuCarrierState for 2880-SW-MCU +-#define FREE_FOR_TX 0 +-#define WAIT_CTS_BEING_SENT 1 +-#define DO_DETECTION 2 +- +-// McuRadarEvent +-#define RADAR_EVENT_CTS_SENT 0x01 // Host signal MCU that CTS has been sent +-#define RADAR_EVENT_CTS_CARRIER_SENT 0x02 // Host signal MCU that CTS has been sent (Carrier) +-#define RADAR_EVENT_RADAR_DETECTING 0x04 // Radar detection is on going, carrier detection hold back +-#define RADAR_EVENT_CARRIER_DETECTING 0x08 // Carrier detection is on going, radar detection hold back +-#define RADAR_EVENT_WIDTH_RADAR 0x10 // BBP == 2 radar detected +-#define RADAR_EVENT_CTS_KICKED 0x20 // Radar detection need to sent double CTS, first CTS sent +- +-// McuRadarCmd +-#define DETECTION_STOP 0 +-#define RADAR_DETECTION 1 +-#define CARRIER_DETECTION 2 +- +-VOID BbpRadarDetectionStart( +- IN PRTMP_ADAPTER pAd); +- +-VOID BbpRadarDetectionStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID RadarDetectionStart( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN CTS_Protect, +- IN UINT8 CTSPeriod); +- +-VOID RadarDetectionStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID RadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd); +- +- + BOOLEAN RadarChannelCheck( + IN PRTMP_ADAPTER pAd, + IN UCHAR Ch); +- +-ULONG JapRadarType( +- IN PRTMP_ADAPTER pAd); +- +-ULONG RTMPBbpReadRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +-ULONG RTMPReadRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPCleanRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +- +-INT Set_ChMovingTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_LongPulseRadarTh_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch b/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch new file mode 100644 index 000000000..0df9faa68 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch @@ -0,0 +1,3191 @@ +From 28cb0d836a8f034fd97351538ccf15d1d40ba0f6 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Tue, 22 Sep 2009 20:44:24 +0200 +Subject: [PATCH 03/42] Staging: rt2860: add RT3090 chipset support + +commit e44fd1cfded0e42c681ad5419b1ceea600ead29d upstream. + +Add support for RT3090 chipset +(based on 2009_0612_RT3090_Linux_STA_V2.1.0.0_DPO). + +Tested with RT2860. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +[bwh: Strip firmware; adjust for Debian's 2.6.32] +--- + drivers/staging/rt2860/Kconfig | 5 +- + drivers/staging/rt2860/Makefile | 7 +- + drivers/staging/rt2860/chip/mac_pci.h | 12 + + drivers/staging/rt2860/chip/rt3090.h | 72 +++++ + drivers/staging/rt2860/chip/rtmp_phy.h | 183 ++++++++++++- + drivers/staging/rt2860/chips/rt3090.c | 123 ++++++++ + drivers/staging/rt2860/chips/rt30xx.c | 12 + + drivers/staging/rt2860/common/cmm_asic.c | 29 ++ + drivers/staging/rt2860/common/cmm_data_pci.c | 6 - + drivers/staging/rt2860/common/cmm_mac_pci.c | 255 ++++++++++++++---- + drivers/staging/rt2860/common/cmm_profile.c | 43 +++ + drivers/staging/rt2860/common/cmm_sync.c | 13 - + drivers/staging/rt2860/common/mlme.c | 112 ++++++-- + drivers/staging/rt2860/common/rt_rf.c | 8 + + drivers/staging/rt2860/common/rtmp_init.c | 73 +++++- + drivers/staging/rt2860/common/rtmp_mcu.c | 98 ++++++- + drivers/staging/rt2860/common/rtmp_timer.c | 4 +- + drivers/staging/rt2860/iface/rtmp_pci.h | 2 - + drivers/staging/rt2860/pci_main_dev.c | 384 +++++++++++++++++++++++--- + drivers/staging/rt2860/rt_linux.c | 3 + + drivers/staging/rt2860/rt_linux.h | 13 +- + drivers/staging/rt2860/rt_main_dev.c | 17 +- + drivers/staging/rt2860/rt_pci_rbus.c | 4 +- + drivers/staging/rt2860/rtmp.h | 49 +++- + drivers/staging/rt2860/rtmp_chip.h | 3 + + drivers/staging/rt2860/rtmp_def.h | 5 + + drivers/staging/rt2860/sta/assoc.c | 12 - + drivers/staging/rt2860/sta/auth_rsp.c | 4 - + drivers/staging/rt2860/sta/connect.c | 190 +++----------- + drivers/staging/rt2860/sta/rtmp_data.c | 1 - + drivers/staging/rt2860/sta/sync.c | 26 +- + drivers/staging/rt2860/sta/wpa.c | 48 ---- + drivers/staging/rt2860/sta_ioctl.c | 7 + + drivers/staging/rt2860/wpa.h | 7 - + drivers/staging/rt3090/common/rtmp_mcu.c | 8 +- + 35 files changed, 1415 insertions(+), 423 deletions(-) + create mode 100644 drivers/staging/rt2860/chip/rt3090.h + create mode 100644 drivers/staging/rt2860/chips/rt3090.c + +diff --git a/drivers/staging/rt2860/Kconfig b/drivers/staging/rt2860/Kconfig +index 6dff527..40200d2 100644 +--- a/drivers/staging/rt2860/Kconfig ++++ b/drivers/staging/rt2860/Kconfig +@@ -1,6 +1,7 @@ + config RT2860 +- tristate "Ralink 2860 wireless support" ++ tristate "Ralink 2860/3090 wireless support" + depends on BROKEN + depends on PCI && X86 && WLAN + ---help--- +- This is an experimental driver for the Ralink 2860 wireless chip. ++ This is an experimental driver for the Ralink 2860 and 3090 ++ wireless chips. +diff --git a/drivers/staging/rt2860/Makefile b/drivers/staging/rt2860/Makefile +index 4404ddb..ba17142 100644 +--- a/drivers/staging/rt2860/Makefile ++++ b/drivers/staging/rt2860/Makefile +@@ -3,6 +3,7 @@ obj-$(CONFIG_RT2860) += rt2860sta.o + # TODO: all of these should be removed + EXTRA_CFLAGS += -DLINUX -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT + EXTRA_CFLAGS += -DRTMP_MAC_PCI -DRTMP_PCI_SUPPORT -DRT2860 ++EXTRA_CFLAGS += -DRTMP_RF_RW_SUPPORT -DRTMP_EFUSE_SUPPORT -DRT30xx -DRT3090 + EXTRA_CFLAGS += -DDBG + + rt2860sta-objs := \ +@@ -46,4 +47,8 @@ rt2860sta-objs := \ + common/cmm_mac_pci.o \ + common/cmm_data_pci.o \ + common/ee_prom.o \ +- common/rtmp_mcu.o ++ common/rtmp_mcu.o \ ++ common/ee_efuse.o \ ++ chips/rt30xx.o \ ++ common/rt_rf.o \ ++ chips/rt3090.o +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index 9ca9c36..61b3f82 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -133,6 +133,18 @@ typedef struct PACKED _RXD_STRUC{ + UINT32 Rsv1:13; + } RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + ++typedef union _TX_ATTENUATION_CTRL_STRUC { ++ struct ++ { ++ ULONG RF_ISOLATION_ENABLE:1; ++ ULONG Reserve2:7; ++ ULONG PCIE_PHY_TX_ATTEN_VALUE:3; ++ ULONG PCIE_PHY_TX_ATTEN_EN:1; ++ ULONG Reserve1:20; ++ } field; ++ ++ ULONG word; ++} TX_ATTENUATION_CTRL_STRUC, *PTX_ATTENUATION_CTRL_STRUC; + + /* ----------------- EEPROM Related MACRO ----------------- */ + +diff --git a/drivers/staging/rt2860/chip/rt3090.h b/drivers/staging/rt2860/chip/rt3090.h +new file mode 100644 +index 0000000..c2249a4 +--- /dev/null ++++ b/drivers/staging/rt2860/chip/rt3090.h +@@ -0,0 +1,72 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt3090.h ++ ++ Abstract: ++ ++ Revision History: ++ Who When What ++ --------- ---------- ---------------------------------------------- ++ */ ++ ++#ifndef __RT3090_H__ ++#define __RT3090_H__ ++ ++#ifdef RT3090 ++ ++#ifndef RTMP_PCI_SUPPORT ++#error "For RT3090, you should define the compile flag -DRTMP_PCI_SUPPORT" ++#endif ++ ++#ifndef RTMP_MAC_PCI ++#error "For RT3090, you should define the compile flag -DRTMP_MAC_PCI" ++#endif ++ ++#ifndef RTMP_RF_RW_SUPPORT ++#error "For RT3090, you should define the compile flag -DRTMP_RF_RW_SUPPORT" ++#endif ++ ++#ifndef RT30xx ++#error "For RT3090, you should define the compile flag -DRT30xx" ++#endif ++ ++#define PCIE_PS_SUPPORT ++ ++#include "mac_pci.h" ++#include "rt30xx.h" ++ ++// ++// Device ID & Vendor ID, these values should match EEPROM value ++// ++#define NIC3090_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard ++#define NIC3091_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard ++#define NIC3092_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard ++ ++#endif // RT3090 // ++ ++#endif //__RT3090_H__ // +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index b3326c6..87516f3 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -278,6 +278,7 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ ++#if 0 + #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ + do{ \ + if ((_A)->bPCIclkOff == FALSE) \ +@@ -288,7 +289,99 @@ + RTMP_BBP_IO_READ8((_A), (_I), (_pV), TRUE); \ + } \ + }while(0) +- ++#else ++// Read BBP register by register's ID. Generate PER to test BA ++#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ ++{ \ ++ BBP_CSR_CFG_STRUC BbpCsr; \ ++ int i, k; \ ++ BOOLEAN brc; \ ++ BbpCsr.field.Busy = IDLE; \ ++ if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ ++ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ ++ && ((_A)->bPCIclkOff == FALSE) \ ++ && ((_A)->brt30xxBanMcuCmd == FALSE)) \ ++ { \ ++ for (i=0; iStaCfg.PSControl.field.rt30xxPowerMode == 3) \ ++ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ ++ && ((_A)->bPCIclkOff == FALSE)) \ ++ { \ ++ for (i=0; ibrt30xxBanMcuCmd, (_I))); \ ++ *(_pV) = (_A)->BbpWriteLatch[_I]; \ ++ } \ ++ if ((BbpCsr.field.Busy == BUSY) || ((_A)->bPCIclkOff == TRUE)) \ ++ { \ ++ DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \ ++ *(_pV) = (_A)->BbpWriteLatch[_I]; \ ++ } \ ++} ++#endif // 0 // + + /* + basic marco for BBP write operation. +@@ -348,6 +441,7 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ ++#if 0 + #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ + do{ \ + if ((_A)->bPCIclkOff == FALSE) \ +@@ -358,6 +452,93 @@ + RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), TRUE); \ + } \ + }while(0) ++#else ++// Write BBP register by register's ID & value ++#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ ++{ \ ++ BBP_CSR_CFG_STRUC BbpCsr; \ ++ INT BusyCnt = 0; \ ++ BOOLEAN brc; \ ++ if (_I < MAX_NUM_OF_BBP_LATCH) \ ++ { \ ++ if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ ++ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ ++ && ((_A)->bPCIclkOff == FALSE) \ ++ && ((_A)->brt30xxBanMcuCmd == FALSE)) \ ++ { \ ++ if (_A->AccessBBPFailCount > 20) \ ++ { \ ++ AsicResetBBPAgent(_A); \ ++ _A->AccessBBPFailCount = 0; \ ++ } \ ++ for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ ++ } \ ++ else \ ++ { \ ++ BbpCsr.field.Busy = 0; \ ++ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ ++ } \ ++ break; \ ++ } \ ++ } \ ++ else if (!((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ ++ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ ++ && ((_A)->bPCIclkOff == FALSE)) \ ++ { \ ++ if (_A->AccessBBPFailCount > 20) \ ++ { \ ++ AsicResetBBPAgent(_A); \ ++ _A->AccessBBPFailCount = 0; \ ++ } \ ++ for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ ++ break; \ ++ } \ ++ } \ ++ else \ ++ { \ ++ DBGPRINT_ERR((" brt30xxBanMcuCmd = %d. Write BBP %d \n", (_A)->brt30xxBanMcuCmd, (_I))); \ ++ } \ ++ if ((BusyCnt == MAX_BUSY_COUNT) || ((_A)->bPCIclkOff == TRUE)) \ ++ { \ ++ if (BusyCnt == MAX_BUSY_COUNT) \ ++ (_A)->AccessBBPFailCount++; \ ++ DBGPRINT_ERR(("BBP write R%d=0x%x fail. BusyCnt= %d.bPCIclkOff = %d. \n", _I, BbpCsr.word, BusyCnt, (_A)->bPCIclkOff )); \ ++ } \ ++ } \ ++ else \ ++ { \ ++ DBGPRINT_ERR(("****** BBP_Write_Latch Buffer exceeds max boundry ****** \n")); \ ++ } \ ++} ++#endif // 0 // + + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c +new file mode 100644 +index 0000000..35c549d +--- /dev/null ++++ b/drivers/staging/rt2860/chips/rt3090.c +@@ -0,0 +1,123 @@ ++/* ++ ************************************************************************* ++ * Ralink Tech Inc. ++ * 5F., No.36, Taiyuan St., Jhubei City, ++ * Hsinchu County 302, ++ * Taiwan, R.O.C. ++ * ++ * (c) Copyright 2002-2007, Ralink Technology, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * 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., * ++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ++ * * ++ ************************************************************************* ++ ++ Module Name: ++ rt3090.c ++ ++ Abstract: ++ Specific funcitons and variables for RT3070 ++ ++ Revision History: ++ Who When What ++ -------- ---------- ---------------------------------------------- ++*/ ++ ++#ifdef RT3090 ++ ++#include "../rt_config.h" ++ ++ ++#ifndef RTMP_RF_RW_SUPPORT ++#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" ++#endif // RTMP_RF_RW_SUPPORT // ++ ++ ++VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) ++{ ++ INT i; ++ // Driver must read EEPROM to get RfIcType before initial RF registers ++ // Initialize RF register to default value ++ if (IS_RT3090(pAd)) ++ { ++ // Init RF calibration ++ // Driver should toggle RF R30 bit7 before init RF registers ++ UINT32 RfReg = 0, data; ++ ++ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); ++ RfReg |= 0x80; ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RTMPusecDelay(1000); ++ RfReg &= 0x7F; ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ ++ // init R24, R31 ++ RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); ++ RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); ++ ++ // RT309x version E has fixed this issue ++ if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) ++ { ++ // patch tx EVM issue temporarily ++ RTMP_IO_READ32(pAd, LDO_CFG0, &data); ++ data = ((data & 0xE0FFFFFF) | 0x0D000000); ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, data); ++ } ++ else ++ { ++ RTMP_IO_READ32(pAd, LDO_CFG0, &data); ++ data = ((data & 0xE0FFFFFF) | 0x01000000); ++ RTMP_IO_WRITE32(pAd, LDO_CFG0, data); ++ } ++ ++ // patch LNA_PE_G1 failed issue ++ RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); ++ data &= ~(0x20); ++ RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); ++ ++ // Initialize RF register to default value ++ for (i = 0; i < NUM_RF_REG_PARMS; i++) ++ { ++ RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); ++ } ++ ++ // Driver should set RF R6 bit6 on before calibration ++ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); ++ RfReg |= 0x40; ++ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); ++ ++ //For RF filter Calibration ++ RTMPFilterCalibration(pAd); ++ ++ // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() ++ if ((pAd->MACVersion & 0xffff) < 0x0211) ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x3); ++ ++ // set led open drain enable ++ RTMP_IO_READ32(pAd, OPT_14, &data); ++ data |= 0x01; ++ RTMP_IO_WRITE32(pAd, OPT_14, data); ++ ++ // set default antenna as main ++ if (pAd->RfIcType == RFIC_3020) ++ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); ++ ++ // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ RT30xxLoadRFNormalModeSetup(pAd); ++ } ++ ++} ++ ++#endif // RT3090 // +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index fe7d8ec..f29d11d 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -101,7 +101,13 @@ VOID RT30xxSetRxAnt( + if (Ant == 0) + { + // Main antenna ++#ifdef RTMP_MAC_PCI ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x |= (EESK); ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++#else + AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x1, 0x0); ++#endif // RTMP_MAC_PCI // + + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); + Value &= ~(0x0808); +@@ -111,7 +117,13 @@ VOID RT30xxSetRxAnt( + else + { + // Aux antenna ++#ifdef RTMP_MAC_PCI ++ RTMP_IO_READ32(pAd, E2PROM_CSR, &x); ++ x &= ~(EESK); ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++#else + AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x0, 0x0); ++#endif // RTMP_MAC_PCI // + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); + Value &= ~(0x0808); + Value |= 0x08; +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index 83ed07b..5d3a387 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -808,6 +808,28 @@ VOID AsicSwitchChannel( + + RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); + ++#if defined(RT3090) || defined(RT3390) ++ // PCIe PHY Transmit attenuation adjustment ++ if (IS_RT3090A(pAd) || IS_RT3390(pAd)) ++ { ++ TX_ATTENUATION_CTRL_STRUC TxAttenuationCtrl = {0}; ++ ++ RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, &TxAttenuationCtrl.word); ++ ++ if (Channel == 14) // Channel #14 ++ { ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; // Enable PCIe PHY Tx attenuation ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; // 9/16 full drive level ++ } ++ else // Channel #1~#13 ++ { ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; // Disable PCIe PHY Tx attenuation ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; // n/a ++ } ++ ++ RTMP_IO_WRITE32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, TxAttenuationCtrl.word); ++ } ++#endif + } + else + { +@@ -2477,6 +2499,13 @@ VOID AsicTurnOnRFClk( + UCHAR index; + RTMP_RF_REGS *RFRegTable; + ++#ifdef PCIE_PS_SUPPORT ++ // The RF programming sequence is difference between 3xxx and 2xxx ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) ++ { ++ return; ++ } ++#endif // PCIE_PS_SUPPORT // + + RFRegTable = RF2850RegTable; + +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index d808e7d..e9739b4 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -638,9 +638,6 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( + if (TxRingBitmap.field.Ac0DmaDone) + bReschedule = RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BE); + +- if (TxRingBitmap.field.HccaDmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_HCCA); +- + if (TxRingBitmap.field.Ac3DmaDone) + bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VO); + +@@ -791,7 +788,6 @@ VOID RTMPHandleRxCoherentInterrupt( + RTMPRingCleanUp(pAd, QID_AC_BK); + RTMPRingCleanUp(pAd, QID_AC_VI); + RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); + RTMPRingCleanUp(pAd, QID_MGMT); + RTMPRingCleanUp(pAd, QID_RX); + +@@ -1147,7 +1143,5 @@ VOID RTMPWriteTxDescriptor( + pTxD->QSEL= (QueueSEL); + //RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan + //pTxD->QSEL= FIFO_EDCA; +- if (pAd->bGenOneHCCA == TRUE) +- pTxD->QSEL= FIFO_HCCA; + pTxD->DMADONE = 0; + } +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index 5aa6944..73992cb 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -414,7 +414,6 @@ VOID RTMPRingCleanUp( + case QID_AC_BE: + case QID_AC_VI: + case QID_AC_VO: +- case QID_HCCA: + + pTxRing = &pAd->TxRing[RingType]; + +@@ -860,11 +859,14 @@ VOID RT28xxPciStaAsicForceWakeup( + + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); + +-#ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); ++ ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + { + // Support PCIe Advance Power Save +- if (bFromTx == TRUE) ++ if (bFromTx == TRUE ++ &&(pAd->Mlme.bPsPollTimerRunning == TRUE)) + { + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +@@ -877,6 +879,17 @@ VOID RT28xxPciStaAsicForceWakeup( + + if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) + { ++#ifdef PCIE_PS_SUPPORT ++ // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) ++ { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ } ++ else ++#endif // PCIE_PS_SUPPORT // + { + // end johnli + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +@@ -895,11 +908,24 @@ VOID RT28xxPciStaAsicForceWakeup( + } + } + } ++#ifdef PCIE_PS_SUPPORT ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Release the MCU Lock(3090)\n")); ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } ++#endif // PCIE_PS_SUPPORT // + } + else +-#endif // RTMP_PCI_SUPPORT // + { + // PCI, 2860-PCIe ++ DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Original PCI Power Saving\n")); + AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); + AutoWakeupCfg.word = 0; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +@@ -922,7 +948,8 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + return; + } +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + { + ULONG Now = 0; + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +@@ -972,7 +999,6 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup( + + } + +-#ifdef RTMP_PCI_SUPPORT + VOID PsPollWakeExec( + IN PVOID SystemSpecific1, + IN PVOID FunctionContext, +@@ -990,6 +1016,17 @@ VOID PsPollWakeExec( + } + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); ++#ifdef PCIE_PS_SUPPORT ++ // For rt30xx power solution 3, Use software timer to wake up in psm. So call ++ // AsicForceWakeup here instead of handling twakeup interrupt. ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("<--PsPollWakeExec::3090 calls AsicForceWakeup(pAd, DOT11POWERSAVE) in advance \n")); ++ AsicForceWakeup(pAd, DOT11POWERSAVE); ++ } ++#endif // PCIE_PS_SUPPORT // + } + + VOID RadioOnExec( +@@ -1006,18 +1043,34 @@ VOID RadioOnExec( + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + { + DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); ++//KH Debug: Add the compile flag "RT2860 and condition ++#ifdef RTMP_PCI_SUPPORT ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++#endif // RTMP_PCI_SUPPORT // + return; + } + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + { + DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); ++#ifdef RTMP_PCI_SUPPORT ++if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++#endif // RTMP_PCI_SUPPORT // + return; + } ++//KH Debug: need to check. I add the compile flag "CONFIG_STA_SUPPORT" to enclose the following codes. ++#ifdef RTMP_PCI_SUPPORT ++if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ { + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ } ++#endif // RTMP_PCI_SUPPORT // + if (pAd->StaCfg.bRadio == TRUE) + { + pAd->bPCIclkOff = FALSE; +@@ -1025,7 +1078,6 @@ VOID RadioOnExec( + RTMPRingCleanUp(pAd, QID_AC_BE); + RTMPRingCleanUp(pAd, QID_AC_VI); + RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); + RTMPRingCleanUp(pAd, QID_MGMT); + RTMPRingCleanUp(pAd, QID_RX); + +@@ -1058,9 +1110,23 @@ VOID RadioOnExec( + AsicLockChannel(pAd, pAd->CommonCfg.Channel); + } + ++//KH Debug:The following codes should be enclosed by RT3090 compile flag + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); + ++#ifdef PCIE_PS_SUPPORT ++// 3090 MCU Wakeup command needs more time to be stable. ++// Before stable, don't issue other MCU command to prevent from firmware error. ++if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } ++#endif // PCIE_PS_SUPPORT // ++ + // Clear Radio off flag + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +@@ -1077,8 +1143,6 @@ VOID RadioOnExec( + RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); + } + } +-#endif // RTMP_PCI_SUPPORT // +- + + /* + ========================================================================== +@@ -1102,12 +1166,24 @@ BOOLEAN RT28xxPciAsicRadioOn( + if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) + return FALSE; + +-#ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + { + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- if ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE)) ++ } ++ if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)&& ++ ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE)) ++ ||(RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))) ++ { ++ // Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore ++ // return condition here. ++ /* ++ if (((pAd->MACVersion&0xffff0000) != 0x28600000) ++ && ((pAd->DeviceID == NIC2860_PCIe_DEVICE_ID) ++ ||(pAd->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ */ + { + DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n")); + // 1. Set PCI Link Control in Configuration Space. +@@ -1115,9 +1191,17 @@ BOOLEAN RT28xxPciAsicRadioOn( + RTMPusecDelay(6000); + } + } +-#endif // RTMP_PCI_SUPPORT // ++ } + ++#ifdef PCIE_PS_SUPPORT ++if (!(((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)))) ++#endif // PCIE_PS_SUPPORT // ++ { + pAd->bPCIclkOff = FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM :309xbPCIclkOff == %d\n", pAd->bPCIclkOff)); ++ } + // 2. Send wake up command. + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); + pAd->bPCIclkOff = FALSE; +@@ -1125,10 +1209,32 @@ BOOLEAN RT28xxPciAsicRadioOn( + AsicCheckCommanOk(pAd, PowerWakeCID); + RTMP_ASIC_INTERRUPT_ENABLE(pAd); + +- + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + if (Level == GUI_IDLE_POWER_SAVE) + { ++#ifdef PCIE_PS_SUPPORT ++ ++ // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) ++ { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } ++ } ++ else ++ // end johnli ++#endif // PCIE_PS_SUPPORT // + { + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. + { +@@ -1198,11 +1304,13 @@ BOOLEAN RT28xxPciAsicRadioOff( + } + + // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. +- pAd->bPCIclkOffDisableTx = TRUE; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE) && pAd->OpMode == OPMODE_STA) ++ //pAd->bPCIclkOffDisableTx = TRUE; ++ RTMP_SET_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ && pAd->OpMode == OPMODE_STA ++ &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE ++ ) + { +- printk("==>fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE\n"); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + +@@ -1216,12 +1324,22 @@ BOOLEAN RT28xxPciAsicRadioOff( + { + DBGPRINT(RT_DEBUG_TRACE, ("TbTTTime = 0x%x , give up this sleep. \n", TbTTTime)); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- pAd->bPCIclkOffDisableTx = FALSE; ++ //pAd->bPCIclkOffDisableTx = FALSE; ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return FALSE; + } + else + { + PsPollTime = (64*TbTTTime- LEAD_TIME*1024)/1000; ++#ifdef PCIE_PS_SUPPORT ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ PsPollTime -= 5; ++ } ++ else ++#endif // PCIE_PS_SUPPORT // + PsPollTime -= 3; + + BeaconPeriodTime = pAd->CommonCfg.BeaconPeriod*102/100; +@@ -1233,6 +1351,12 @@ BOOLEAN RT28xxPciAsicRadioOff( + } + } + } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::Level!=DOT11POWERSAVE \n")); ++ } ++ ++ pAd->bPCIclkOffDisableTx = FALSE; + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + +@@ -1315,6 +1439,23 @@ BOOLEAN RT28xxPciAsicRadioOff( + pAd->CheckDmaBusyCount = 0; + } + */ ++//KH Debug:My original codes have the follwoing codes, but currecnt codes do not have it. ++// Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment. ++RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280); ++//OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ); ++ ++#ifdef PCIE_PS_SUPPORT ++if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::3090 return to skip the following TbttNumToNextWakeUp setting for 279x\n")); ++ pAd->bPCIclkOff = TRUE; ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); ++ // For this case, doesn't need to below actions, so return here. ++ return brc; ++ } ++#endif // PCIE_PS_SUPPORT // + + if (Level == DOT11POWERSAVE) + { +@@ -1335,7 +1476,6 @@ BOOLEAN RT28xxPciAsicRadioOff( + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + } + +-#ifdef RTMP_PCI_SUPPORT + // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. + if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) + { +@@ -1348,9 +1488,9 @@ BOOLEAN RT28xxPciAsicRadioOff( + if ((brc == TRUE) && (i < 50)) + RTMPPCIeLinkCtrlSetting(pAd, 3); + } +-#endif // RTMP_PCI_SUPPORT // + +- pAd->bPCIclkOffDisableTx = FALSE; ++ //pAd->bPCIclkOffDisableTx = FALSE; ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return TRUE; + } + +@@ -1365,41 +1505,37 @@ VOID RT28xxPciMlmeRadioOn( + + DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); + +- if ((pAd->OpMode == OPMODE_AP) || +- ((pAd->OpMode == OPMODE_STA) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)))) ++ if ((pAd->OpMode == OPMODE_AP) || ++ ((pAd->OpMode == OPMODE_STA) ++ && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ ||pAd->StaCfg.PSControl.field.EnableNewPS == FALSE ++ ))) + { +- if (pAd->OpMode == OPMODE_AP) + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- + //NICResetFromError(pAd); + + RTMPRingCleanUp(pAd, QID_AC_BK); + RTMPRingCleanUp(pAd, QID_AC_BE); + RTMPRingCleanUp(pAd, QID_AC_VI); + RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); + RTMPRingCleanUp(pAd, QID_MGMT); + RTMPRingCleanUp(pAd, QID_RX); + +- if (pAd->OpMode == OPMODE_STA) +- { +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +- RTMPusecDelay(10000); +- } +- + // Enable Tx/Rx + RTMPEnableRxTx(pAd); + + // Clear Radio off flag + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ + // Set LED + RTMPSetLED(pAd, LED_RADIO_ON); + } + +-#ifdef RTMP_PCI_SUPPORT + if ((pAd->OpMode == OPMODE_STA) && +- (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))) ++ (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) + { + BOOLEAN Cancelled; + +@@ -1408,9 +1544,8 @@ VOID RT28xxPciMlmeRadioOn( + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 40); + } +-#endif // RTMP_PCI_SUPPORT // + } + + +@@ -1455,19 +1590,33 @@ VOID RT28xxPciMlmeRadioOFF( + + { + BOOLEAN Cancelled; ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + { + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + } +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ // If during power safe mode. ++ if (pAd->StaCfg.bRadio == TRUE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("-->MlmeRadioOff() return on bRadio == TRUE; \n")); ++ return; ++ } ++ // Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). ++ if (IDLE_ON(pAd) && ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) ++ { ++ RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); ++ } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + BOOLEAN Cancelled; + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); + } ++ } + + // Link down first if any association exists + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +@@ -1477,28 +1626,38 @@ VOID RT28xxPciMlmeRadioOFF( + // Clean up old bss table + BssTableInit(&pAd->ScanTab); + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ /* ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); + return; + } ++ */ + } + +- // Set LED ++ // Set LED.Move to here for fixing LED bug. This flag must be called after LinkDown + RTMPSetLED(pAd, LED_RADIO_OFF); + +- if (pAd->OpMode == OPMODE_AP) ++//KH Debug:All PCIe devices need to use timer to execute radio off function, or the PCIe&&EnableNewPS needs. ++//KH Ans:It is right, because only when the PCIe and EnableNewPs is true, we need to delay the RadioOffTimer ++//to avoid the deadlock with PCIe Power saving function. ++if (pAd->OpMode == OPMODE_STA&& ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)&& ++ pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ { ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ } ++else ++{ + brc=RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); + + if (brc==FALSE) + { + DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); + } +- +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE) && +- (pAd->OpMode == OPMODE_STA)) +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); ++} ++/* ++*/ + } + + #endif // RTMP_MAC_PCI // +diff --git a/drivers/staging/rt2860/common/cmm_profile.c b/drivers/staging/rt2860/common/cmm_profile.c +index 2d28524..056cffd 100644 +--- a/drivers/staging/rt2860/common/cmm_profile.c ++++ b/drivers/staging/rt2860/common/cmm_profile.c +@@ -1266,6 +1266,49 @@ NDIS_STATUS RTMPSetProfileParameters( + DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __func__, pAd->StaCfg.BssType)); + } + } ++#ifdef RTMP_MAC_PCI ++ //NewPCIePS ++ if(RTMPGetKeyParameter("NewPCIePS", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ if(temp_buffer>0) ++ pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; ++ else ++ pAd->StaCfg.PSControl.field.EnableNewPS=FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("NewPCIePS=%d\n", pAd->StaCfg.PSControl.field.EnableNewPS)); ++ } ++#endif // RTMP_MAC_PCI // ++#ifdef RT3090 ++ //PCIePowerLevel ++ ++ if(RTMPGetKeyParameter("PCIePowerLevel", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ pAd->StaCfg.PSControl.field.rt30xxPowerMode = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ DBGPRINT(RT_DEBUG_TRACE, ("PCIePowerLevel=%d\n", pAd->StaCfg.PSControl.field.rt30xxPowerMode)); ++ } ++ //FollowHostASPM ++ if(RTMPGetKeyParameter("FollowHostASPM", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ ++ if(temp_buffer>0) ++ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=TRUE; ++ else ++ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("rt30xxFollowHostASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM)); ++ } ++ //ForceTestASPM ++ if(RTMPGetKeyParameter("ForceTestASPM", tmpbuf, 10, pBuffer, TRUE)) ++ { ++ UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); ++ ++ if(temp_buffer>0) ++ pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=TRUE; ++ else ++ pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ("rt30xxForceASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxForceASPMTest)); ++ } ++#endif // RT3090 // + //Channel + if(RTMPGetKeyParameter("Channel", tmpbuf, 10, pBuffer, TRUE)) + { +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index 4cb507d..9be4d50 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -432,19 +432,6 @@ VOID ScanNextChannel( + } + + { +-#ifdef RT2860 +- /* +- If all peer Ad-hoc clients leave, driver would do LinkDown and LinkUp. +- In LinkUp, CommonCfg.Ssid would copy SSID from MlmeAux. +- To prevent SSID is zero or wrong in Beacon, need to recover MlmeAux.SSID here. +- */ +- if (ADHOC_ON(pAd)) +- { +- NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); +- pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; +- NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen); +- } +-#endif // RT2860 // + // + // To prevent data lost. + // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 02627c7..7647c09 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -397,7 +397,7 @@ NDIS_STATUS MlmeInit( + + { + #ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + // only PCIe cards need these two timers + RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, GET_TIMER_FUNCTION(PsPollWakeExec), pAd, FALSE); +@@ -569,7 +569,8 @@ VOID MlmeHalt( + + + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) + { + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +@@ -678,6 +679,7 @@ VOID MlmePeriodicExec( + { + ULONG TxTotalCnt; + PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext; ++ SHORT realavgrssi; + + #ifdef RTMP_MAC_PCI + { +@@ -691,7 +693,27 @@ VOID MlmePeriodicExec( + UINT32 data = 0; + + // Read GPIO pin2 as Hardware controlled radio state ++#ifndef RT3090 + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); ++#endif // RT3090 // ++//KH(PCIE PS):Added based on Jane<-- ++#ifdef RT3090 ++// Read GPIO pin2 as Hardware controlled radio state ++// We need to Read GPIO if HW said so no mater what advance power saving ++if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) ++ && (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) ++ && (pAd->StaCfg.PSControl.field.EnablePSinIdle == TRUE)) ++ { ++ // Want to make sure device goes to L0 state before reading register. ++ RTMPPCIeLinkCtrlValueRestore(pAd, 0); ++ RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); ++ RTMPPCIeLinkCtrlSetting(pAd, 3); ++ } ++else ++ RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); ++#endif // RT3090 // ++//KH(PCIE PS):Added based on Jane--> ++ + if (data & 0x04) + { + pAd->StaCfg.bHwRadio = TRUE; +@@ -1187,6 +1209,60 @@ VOID STAMlmePeriodicExec( + } + } + #endif ++#ifdef PCIE_PS_SUPPORT ++// don't perform idle-power-save mechanism within 3 min after driver initialization. ++// This can make rebooter test more robust ++if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ { ++ if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) ++ && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) ++ && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) ++ { ++ if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) ++ { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); ++ ++ RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); ++ AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x2); ++ // Wait command success ++ AsicCheckCommanOk(pAd, PowerSafeCID); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt30xx Issue Sleep command)\n")); ++ } ++ } ++ else if (pAd->Mlme.OneSecPeriodicRound > 180) ++ { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); ++ RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); ++ AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x02); ++ // Wait command success ++ AsicCheckCommanOk(pAd, PowerSafeCID); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt28xx Issue Sleep command)\n")); ++ } ++ } ++ } ++ else ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("STAMlmePeriodicExec MMCHK - CommonCfg.Ssid[%d]=%c%c%c%c... MlmeAux.Ssid[%d]=%c%c%c%c...\n", ++ pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid[0], pAd->CommonCfg.Ssid[1], pAd->CommonCfg.Ssid[2], pAd->CommonCfg.Ssid[3], ++ pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid[0], pAd->MlmeAux.Ssid[1], pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3])); ++ } ++ } ++#endif // PCIE_PS_SUPPORT // + + if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) + { +@@ -1275,10 +1351,6 @@ VOID STAMlmePeriodicExec( + { + DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); + +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) && +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) +- pAd->StaCfg.bLostAp = TRUE; +- + // Lost AP, send disconnect & link down event + LinkDown(pAd, FALSE); + +@@ -2240,10 +2312,6 @@ VOID MlmeDynamicTxRateSwitching( + } + + pEntry->LastTxOkCount = TxSuccess; +-#ifdef RT2860 +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; +-#endif // RT2860 // +-#if defined(RT2870) || defined(RT3070) + { + UCHAR tmpTxRate; + +@@ -2261,7 +2329,6 @@ VOID MlmeDynamicTxRateSwitching( + + pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(tmpTxRate+1)*5]; + } +-#endif // RT2870 // + if (bTxRateChanged && pNextTxRate) + { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); +@@ -3805,14 +3872,6 @@ VOID BssTableSsidSort( + DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +-#ifdef RT2860 +- if ((pAd->CommonCfg.PhyMode == PHY_11GN_MIXED) && +- ((pInBss->SupRateLen + pInBss->ExtRateLen) < 12)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in GN-only Mode, this AP is in B mode.\n")); +- continue; +- } +-#endif // RT2860 // + // New for WPA2 + // Check the Authmode first + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +@@ -3921,14 +3980,7 @@ VOID BssTableSsidSort( + DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +-#ifdef RT2860 +- if ((pAd->CommonCfg.PhyMode == PHY_11GN_MIXED) && +- ((pInBss->SupRateLen + pInBss->ExtRateLen) < 12)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in GN-only Mode, this AP is in B mode.\n")); +- continue; +- } +-#endif // RT2860 // ++ + // New for WPA2 + // Check the Authmode first + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +@@ -5495,6 +5547,9 @@ VOID AsicEvaluateRxAnt( + #ifdef RT30xx + || (pAd->EepromAccess) + #endif // RT30xx // ++#ifdef RT3090 ++ || (pAd->bPCIclkOff == TRUE) ++#endif // RT3090 // + ) + return; + +@@ -5583,6 +5638,9 @@ VOID AsicRxAntEvalTimeout( + #ifdef RT30xx + || (pAd->EepromAccess) + #endif // RT30xx // ++#ifdef RT3090 ++ || (pAd->bPCIclkOff == TRUE) ++#endif // RT3090 // + ) + return; + +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index 34a6fca..e9f9384 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -187,6 +187,14 @@ VOID RtmpChipOpsRFHook( + } + } + #endif // RT3070 // ++#ifdef RT3090 ++ if (IS_RT3090(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) ++ { ++ pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; ++ pChipOps->AsicRfInit = NICInitRT3090RFRegisters; ++ pChipOps->AsicReverseRfFromSleepMode = RT30xxReverseRFSleepModeSetup; ++ } ++#endif // RT3090 // + } + #endif // RT30xx // + } +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 1dd4c82..3b43101 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -191,6 +191,9 @@ NDIS_STATUS RTMPAllocAdapterBlock( + NdisAllocateSpinLock(&pAd->MgmtRingLock); + #ifdef RTMP_MAC_PCI + NdisAllocateSpinLock(&pAd->RxRingLock); ++#ifdef RT3090 ++ NdisAllocateSpinLock(&pAd->McuCmdLock); ++#endif // RT3090 // + #endif // RTMP_MAC_PCI // + + for (index =0 ; index < NUM_OF_TX_RING; index++) +@@ -1238,7 +1241,13 @@ VOID NICInitAsicFromEEPROM( + { + RTMPSetLED(pAd, LED_RADIO_ON); + #ifdef RTMP_MAC_PCI ++#ifdef RT3090 ++ AsicSendCommandToMcu(pAd, 0x30, PowerRadioOffCID, 0xff, 0x02); ++ AsicCheckCommanOk(pAd, PowerRadioOffCID); ++#endif // RT3090 // ++#ifndef RT3090 + AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); ++#endif // RT3090 // + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00); + // 2-1. wait command ok. + AsicCheckCommanOk(pAd, PowerWakeCID); +@@ -1246,6 +1255,29 @@ VOID NICInitAsicFromEEPROM( + } + } + ++#ifdef RTMP_MAC_PCI ++#ifdef RT30xx ++ if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) ++ { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ } ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ ++ if ((IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ DBGPRINT(RT_DEBUG_TRACE,("%s::%d,release Mcu Lock\n",__FUNCTION__,__LINE__)); ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } ++#endif // RT30xx // ++#endif // RTMP_MAC_PCI // ++ + // Turn off patching for cardbus controller + if (NicConfig2.field.CardbusAcceleration == 1) + { +@@ -1443,11 +1475,6 @@ retry: + RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%x\n", Value)); + +- // Write HCCA base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR4 : 0x%x\n", Value)); +- + // Write MGMT_BASE_CSR register + Value = RTMP_GetPhysicalAddressLow(pAd->MgmtRing.Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR5, Value); +@@ -1641,7 +1668,7 @@ NDIS_STATUS NICInitializeAsic( + for(Index=0; Index ++#endif // RT3090 // + RTMPusecDelay(1000); + + // Read BBP register, make sure BBP is up and running before write new data +@@ -2588,6 +2620,8 @@ VOID UserCfgInit( + pAd->LedIndicatorStrength = 0; + pAd->RLnkCtrlOffset = 0; + pAd->HostLnkCtrlOffset = 0; ++ pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; ++ pAd->CheckDmaBusyCount = 0; + #endif // RTMP_MAC_PCI // + + pAd->bAutoTxAgcA = FALSE; // Default is OFF +@@ -2600,8 +2634,6 @@ VOID UserCfgInit( + pAd->bForcePrintRX = FALSE; + pAd->bStaFifoTest = FALSE; + pAd->bProtectionTest = FALSE; +- pAd->bHCCATest = FALSE; +- pAd->bGenOneHCCA = FALSE; + pAd->CommonCfg.Dsifs = 10; // in units of usec + pAd->CommonCfg.TxPower = 100; //mW + pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO +@@ -2720,6 +2752,15 @@ VOID UserCfgInit( + pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; + } + ++#ifdef PCIE_PS_SUPPORT ++pAd->brt30xxBanMcuCmd = FALSE; ++pAd->b3090ESpecialChip = FALSE; ++//KH Debug:the following must be removed ++pAd->StaCfg.PSControl.field.rt30xxPowerMode=3; ++pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=0; ++pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; ++#endif // PCIE_PS_SUPPORT // ++ + // global variables mXXXX used in MAC protocol state machines + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); +@@ -2757,6 +2798,9 @@ VOID UserCfgInit( + pAd->StaCfg.LastScanTime -= (10 * OS_HZ); + + NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE+1); ++#ifdef RTMP_MAC_PCI ++ sprintf((PSTRING) pAd->nickname, "RT2860STA"); ++#endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + sprintf((PSTRING) pAd->nickname, "RT2870STA"); + #endif // RTMP_MAC_USB // +@@ -2766,7 +2810,6 @@ VOID UserCfgInit( + pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; + pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; + pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE; +- pAd->StaCfg.bLostAp = FALSE; + + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); + +@@ -3272,7 +3315,7 @@ int rt28xx_init( + // NICLoadFirmware will hang forever when interface is up again. + // RT2860 PCI + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + AUTO_WAKEUP_STRUC AutoWakeupCfg; + AsicForceWakeup(pAd, TRUE); +@@ -3307,6 +3350,16 @@ int rt28xx_init( + DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); + + #ifdef RTMP_MAC_PCI ++#ifdef PCIE_PS_SUPPORT ++ /*Iverson patch PCIE L1 issue to make sure that driver can be read,write ,BBP and RF register at pcie L.1 level */ ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))&&OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ { ++ RTMP_IO_READ32(pAd, AUX_CTRL, &MacCsr0); ++ MacCsr0 |= 0x402; ++ RTMP_IO_WRITE32(pAd, AUX_CTRL, MacCsr0); ++ DBGPRINT(RT_DEBUG_TRACE, ("AUX_CTRL = 0x%x\n", MacCsr0)); ++ } ++#endif // PCIE_PS_SUPPORT // + + // To fix driver disable/enable hang issue when radio off + RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x2); +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 24531c5..229ea05 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -38,8 +38,9 @@ + + #include "../rt_config.h" + +-#ifdef RT2860 ++#if defined(RT2860) || defined(RT3090) + #include "firmware.h" ++#include "../../rt3090/firmware.h" + #endif + #ifdef RT2870 + #include "../../rt3070/firmware.h" +@@ -115,20 +116,18 @@ NDIS_STATUS RtmpAsicLoadFirmware( + { + + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- PUCHAR pFirmwareImage; ++ PUCHAR pFirmwareImage = NULL; + ULONG FileLength, Index; +- //ULONG firm; + UINT32 MacReg = 0; + UINT32 Version = (pAd->MACVersion >> 16); + +-// pFirmwareImage = FirmwareImage; +-// FileLength = sizeof(FirmwareImage); +- + // New 8k byte firmware size for RT3071/RT3072 + { + #ifdef RTMP_MAC_PCI +- if ((Version == 0x2860) || (Version == 0x3572) || IS_RT3090(pAd)) +- { ++ if (IS_RT3090(pAd) || IS_RT3390(pAd)) { ++ pFirmwareImage = FirmwareImage_3090; ++ FileLength = FIRMWAREIMAGE_MAX_LENGTH; ++ } else { + pFirmwareImage = FirmwareImage_2860; + FileLength = FIRMWAREIMAGE_MAX_LENGTH; + } +@@ -190,9 +189,72 @@ INT RtmpAsicSendCommandToMcu( + HOST_CMD_CSR_STRUC H2MCmd; + H2M_MAILBOX_STRUC H2MMailbox; + ULONG i = 0; +-#ifdef RTMP_MAC_PCI +-#endif // RTMP_MAC_PCI // + ++#ifdef PCIE_PS_SUPPORT ++ // 3090F power solution 3 has hw limitation that needs to ban all mcu command ++ // when firmware is in radio state. For other chip doesn't have this limitation. ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) ++ { ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ if ((pAd->brt30xxBanMcuCmd == TRUE) ++ && (Command != WAKE_MCU_CMD) && (Command != RFOFF_MCU_CMD)) ++ { ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ DBGPRINT(RT_DEBUG_TRACE, (" Ban Mcu Cmd %x in sleep mode\n", Command)); ++ return FALSE; ++ } ++ else if ((Command == SLEEP_MCU_CMD) ++ ||(Command == RFOFF_MCU_CMD)) ++ { ++ pAd->brt30xxBanMcuCmd = TRUE; ++ } ++ else if (Command != WAKE_MCU_CMD) ++ { ++ pAd->brt30xxBanMcuCmd = FALSE; ++ } ++ ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ ++ } ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ && (Command == WAKE_MCU_CMD)) ++ { ++ ++ do ++ { ++ RTMP_IO_FORCE_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); ++ if (H2MMailbox.field.Owner == 0) ++ break; ++ ++ RTMPusecDelay(2); ++ DBGPRINT(RT_DEBUG_INFO, ("AsicSendCommanToMcu::Mail box is busy\n")); ++ } while(i++ < 100); ++ ++ if (i >= 100) ++ { ++ DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); ++ return FALSE; ++ } ++ ++ H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.CmdToken = Token; ++ H2MMailbox.field.HighByte = Arg1; ++ H2MMailbox.field.LowByte = Arg0; ++ RTMP_IO_FORCE_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); ++ ++ H2MCmd.word = 0; ++ H2MCmd.field.HostCommand = Command; ++ RTMP_IO_FORCE_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); ++ ++ ++ } ++ else ++#endif // PCIE_PS_SUPPORT // ++ { + do + { + RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +@@ -228,6 +290,22 @@ INT RtmpAsicSendCommandToMcu( + if (Command != 0x80) + { + } ++} ++#ifdef PCIE_PS_SUPPORT ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ && (Command == WAKE_MCU_CMD)) ++ { ++ RTMPusecDelay(2000); ++ //Put this is after RF programming. ++ //NdisAcquireSpinLock(&pAd->McuCmdLock); ++ //pAd->brt30xxBanMcuCmd = FALSE; ++ //NdisReleaseSpinLock(&pAd->McuCmdLock); ++ } ++#endif // PCIE_PS_SUPPORT // + + return TRUE; + } +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +index 258ab1b..fa77f5d 100644 +--- a/drivers/staging/rt2860/common/rtmp_timer.c ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -59,10 +59,10 @@ BUILD_TIMER_FUNCTION(DisassocTimeout); + BUILD_TIMER_FUNCTION(LinkDownExec); + BUILD_TIMER_FUNCTION(StaQuickResponeForRateUpExec); + BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); +-#ifdef RTMP_PCI_SUPPORT ++#ifdef RTMP_MAC_PCI + BUILD_TIMER_FUNCTION(PsPollWakeExec); + BUILD_TIMER_FUNCTION(RadioOnExec); +-#endif // RTMP_PCI_SUPPORT // ++#endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + BUILD_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); + #endif // RTMP_MAC_USB // +diff --git a/drivers/staging/rt2860/iface/rtmp_pci.h b/drivers/staging/rt2860/iface/rtmp_pci.h +index aa66ff7..7d7efbd 100644 +--- a/drivers/staging/rt2860/iface/rtmp_pci.h ++++ b/drivers/staging/rt2860/iface/rtmp_pci.h +@@ -38,9 +38,7 @@ + + #define RT28XX_PUT_DEVICE(dev_p) + +-#ifndef SA_SHIRQ + #define SA_SHIRQ IRQF_SHARED +-#endif + + #ifdef PCI_MSI_SUPPORT + #define RTMP_MSI_ENABLE(_pAd) \ +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 5f39c44..0df1ac8 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -38,6 +38,13 @@ + #include "rt_config.h" + #include + ++// Following information will be show when you run 'modinfo' ++// *** If you have a solution for the bug in current version of driver, please mail to me. ++// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** ++MODULE_AUTHOR("Jett Chen "); ++MODULE_DESCRIPTION("RT2860/RT3090 Wireless Lan Linux Driver"); ++MODULE_LICENSE("GPL"); ++ + // + // Function declarations + // +@@ -63,6 +70,7 @@ static int rt2860_resume(struct pci_dev *pci_dev); + // + static struct pci_device_id rt2860_pci_tbl[] __devinitdata = + { ++#ifdef RT2860 + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2760_PCI_DEVICE_ID)}, +@@ -75,11 +83,21 @@ static struct pci_device_id rt2860_pci_tbl[] __devinitdata = + {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7738)}, + {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7748)}, + {PCI_DEVICE(EDIMAX_PCI_VENDOR_ID, 0x7768)}, ++#endif ++#ifdef RT3090 ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3090_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3091_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3092_PCIe_DEVICE_ID)}, ++#endif // RT3090 // ++#ifdef RT3390 ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3390_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3391_PCIe_DEVICE_ID)}, ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3392_PCIe_DEVICE_ID)}, ++#endif // RT3390 // + {0,} // terminate list + }; + + MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); +-MODULE_LICENSE("GPL"); + #ifdef MODULE_VERSION + MODULE_VERSION(STA_DRIVER_VERSION); + #endif +@@ -363,9 +381,6 @@ static INT __devinit rt2860_probe( + pAd->StaCfg.OriDevType = net_dev->type; + RTMPInitPCIeDevice(pci_dev, pAd); + +-#ifdef KTHREAD_SUPPORT +-#endif // KTHREAD_SUPPORT // +- + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_probe\n")); + + return 0; // probe ok +@@ -478,11 +493,17 @@ BOOLEAN RT28XXChipsetCheck( + pci_read_config_word(pci_dev, PCI_DEVICE_ID, &device_id); + device_id = le2cpu16(device_id); + pObj->DeviceID = device_id; +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); + if ( ++#ifdef RT2860 + (device_id == NIC2860_PCIe_DEVICE_ID) || + (device_id == NIC2790_PCIe_DEVICE_ID) || + (device_id == VEN_AWT_PCIe_DEVICE_ID) || ++#endif ++#ifdef RT3090 ++ (device_id == NIC3090_PCIe_DEVICE_ID) || ++ (device_id == NIC3091_PCIe_DEVICE_ID) || ++ (device_id == NIC3092_PCIe_DEVICE_ID) || ++#endif // RT3090 // + 0) + { + UINT32 MacCsr0 = 0, Index= 0; +@@ -500,7 +521,7 @@ BOOLEAN RT28XXChipsetCheck( + // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). + if ((MacCsr0&0xffff0000) != 0x28600000) + { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); + } + } + } +@@ -511,24 +532,26 @@ VOID RTMPInitPCIeLinkCtrlValue( + { + INT pos; + USHORT reg16, data2, PCIePowerSaveLevel, Configuration; ++ UINT32 MacValue; + BOOLEAN bFindIntel = FALSE; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); + // Init EEPROM, and save settings +- if (!IS_RT3090(pAd)) ++ if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) + { + RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); + pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff; + ++ pAd->LnkCtrlBitMask = 0; + if ((PCIePowerSaveLevel&0xff) == 0xff) + { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); + DBGPRINT(RT_DEBUG_TRACE, ("====> PCIePowerSaveLevel = 0x%x.\n", PCIePowerSaveLevel)); + return; + } +@@ -563,40 +586,108 @@ VOID RTMPInitPCIeLinkCtrlValue( + pAd->LnkCtrlBitMask = 0x103; + break; + } ++ RT28xx_EEPROM_READ16(pAd, 0x24, data2); ++ if ((PCIePowerSaveLevel&0xff) != 0xff) ++ { ++ PCIePowerSaveLevel &= 0x3; ++ ++ if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) ++ { ++ if (PCIePowerSaveLevel > 1 ) ++ PCIePowerSaveLevel = 1; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt28xx Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); ++ printk("\n\n\n%s:%d\n",__FUNCTION__,__LINE__); ++ ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); ++ } + DBGPRINT(RT_DEBUG_TRACE, ("====> LnkCtrlBitMask = 0x%x.\n", pAd->LnkCtrlBitMask)); + } + } +- else if (IS_RT3090(pAd)) ++ else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + { ++ UCHAR LinkCtrlSetting = 0; ++ ++ // Check 3090E special setting chip. ++ RT28xx_EEPROM_READ16(pAd, 0x24, data2); ++ if ((data2 == 0x9280) && ((pAd->MACVersion&0xffff) == 0x0211)) ++ { ++ pAd->b3090ESpecialChip = TRUE; ++ DBGPRINT_RAW(RT_DEBUG_ERROR,("Special 3090E chip \n")); ++ } ++ ++ RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); ++ //enable WAKE_PCIE function, which forces to enable PCIE clock when mpu interrupt asserting. ++ //Force PCIE 125MHz CLK to toggle ++ MacValue |= 0x402; ++ RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); ++ DBGPRINT_RAW(RT_DEBUG_ERROR,(" AUX_CTRL = 0x%32x\n", MacValue)); ++ ++ ++ ++ // for RT30xx F and after, PCIe infterface, and for power solution 3 ++ if ((IS_VERSION_AFTER_F(pAd)) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode >= 2) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode <= 3)) ++ { ++ RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); ++ DBGPRINT_RAW(RT_DEBUG_ERROR,(" Read AUX_CTRL = 0x%x\n", MacValue)); ++ // turn on bit 12. ++ //enable 32KHz clock mode for power saving ++ MacValue |= 0x1000; ++ if (MacValue != 0xffffffff) ++ { ++ RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); ++ DBGPRINT_RAW(RT_DEBUG_ERROR,(" Write AUX_CTRL = 0x%x\n", MacValue)); ++ // 1. if use PCIePowerSetting is 2 or 3, need to program OSC_CTRL to 0x3ff11. ++ MacValue = 0x3ff11; ++ RTMP_IO_WRITE32(pAd, OSC_CTRL, MacValue); ++ DBGPRINT_RAW(RT_DEBUG_ERROR,(" OSC_CTRL = 0x%x\n", MacValue)); ++ // 2. Write PCI register Clk ref bit ++ RTMPrt3xSetPCIePowerLinkCtrl(pAd); ++ } ++ else ++ { ++ // Error read Aux_Ctrl value. Force to use solution 1 ++ DBGPRINT(RT_DEBUG_ERROR,(" Error Value in AUX_CTRL = 0x%x\n", MacValue)); ++ pAd->StaCfg.PSControl.field.rt30xxPowerMode = 1; ++ DBGPRINT(RT_DEBUG_ERROR,(" Force to use power solution1 \n")); ++ } ++ } + // 1. read setting from inf file. +- // ..... +- USHORT PCIePowerSetting = 0; +- /* code from windows, default value of rt30xxPowerMode = 0 +- PCIePowerSetting = pAd->StaCfg.PSControl.field.rt30xxPowerMode; +- */ +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Read PowerLevelMode = 0x%x.\n", PCIePowerSetting)); +- // 2. Check EnableNewPS +- /* ++ ++ PCIePowerSaveLevel = (USHORT)pAd->StaCfg.PSControl.field.rt30xxPowerMode; ++ DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx Read PowerLevelMode = 0x%x.\n", PCIePowerSaveLevel)); ++ // 2. Check EnableNewPS. + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- PCIePowerSetting = 1; +- */ ++ PCIePowerSaveLevel = 1; + +- if ((pAd->MACVersion&0xffff) <= 0x0211) ++ if (IS_VERSION_BEFORE_F(pAd) && (pAd->b3090ESpecialChip == FALSE)) + { +- // Chip Version E only allow 1 +- PCIePowerSetting = 1; +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Write 0x83 Command = 0x%x.\n", PCIePowerSetting)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSetting, 0x00); ++ // Chip Version E only allow 1, So force set 1. ++ PCIePowerSaveLevel &= 0x1; ++ pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx E Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); ++ ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); + } + else + { +- // Chip Version F only allow 1 or 2 +- if ((PCIePowerSetting > 2) || (PCIePowerSetting == 0)) +- PCIePowerSetting = 1; +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx Write 0x83 Command = 0x%x.\n", PCIePowerSetting)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSetting, 0x00); ++ // Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. ++ if (!((PCIePowerSaveLevel == 1) || (PCIePowerSaveLevel == 3))) ++ PCIePowerSaveLevel = 1; ++ DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx F Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); ++ pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; ++ // for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in ++ // PCI Configuration Space. Because firmware can't read PCI Configuration Space ++ if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) && (pAd->Rt3xxHostLinkCtrl & 0x2)) ++ { ++ LinkCtrlSetting = 1; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xxF LinkCtrlSetting = 0x%x.\n", LinkCtrlSetting)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, LinkCtrlSetting); + } +- + } + + // Find Ralink PCIe Device's Express Capability Offset +@@ -613,6 +704,7 @@ VOID RTMPInitPCIeLinkCtrlValue( + pAd->RLnkCtrlConfiguration = (Configuration & 0x103); + Configuration &= 0xfefc; + Configuration |= (0x0); ++#ifdef RT2860 + if ((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) + ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID)) + { +@@ -621,6 +713,7 @@ VOID RTMPInitPCIeLinkCtrlValue( + DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", + pos + PCI_EXP_LNKCTL, Configuration)); + } ++#endif // RT2860 // + + RTMPFindHostPCIDev(pAd); + if (pObj->parent_pci_dev) +@@ -630,7 +723,10 @@ VOID RTMPInitPCIeLinkCtrlValue( + pci_read_config_word(pObj->parent_pci_dev, PCI_VENDOR_ID, &vendor_id); + vendor_id = le2cpu16(vendor_id); + if (vendor_id == PCIBUS_INTEL_VENDOR) ++ { + bFindIntel = TRUE; ++ RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); ++ } + + // Find PCI-to-PCI Bridge Express Capability Offset + pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); +@@ -650,10 +746,20 @@ VOID RTMPInitPCIeLinkCtrlValue( + + switch (pObj->DeviceID) + { ++#ifdef RT2860 + case NIC2860_PCIe_DEVICE_ID: + case NIC2790_PCIe_DEVICE_ID: + bChange = TRUE; + break; ++#endif // RT2860 // ++#ifdef RT3090 ++ case NIC3090_PCIe_DEVICE_ID: ++ case NIC3091_PCIe_DEVICE_ID: ++ case NIC3092_PCIe_DEVICE_ID: ++ if (bFindIntel == FALSE) ++ bChange = TRUE; ++ break; ++#endif // RT3090 // + default: + break; + } +@@ -686,6 +792,11 @@ VOID RTMPInitPCIeLinkCtrlValue( + // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff + pAd->PCIePowerSaveLevel = 0xff; + if ((pAd->RLnkCtrlOffset != 0) ++#ifdef RT3090 ++ && ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++#endif // RT3090 // + ) + { + pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +@@ -714,7 +825,7 @@ VOID RTMPFindHostPCIDev( + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); +@@ -761,12 +872,27 @@ VOID RTMPPCIeLinkCtrlValueRestore( + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + ++#ifdef RT2860 + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) + ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; ++#endif // RT2860 // ++ // Check PSControl Configuration ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) ++ return TRUE; ++ ++ //3090 will not execute the following codes. ++ // Check interface : If not PCIe interface, return. ++ ++#ifdef RT3090 ++ if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++ return; ++#endif // RT3090 // + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); + PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +@@ -840,12 +966,32 @@ VOID RTMPPCIeLinkCtrlSetting( + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + ++#ifdef RT2860 + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) + ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; ++#endif // RT2860 // ++ // Check PSControl Configuration ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) ++ return TRUE; ++ ++ // Check interface : If not PCIe interface, return. ++ //Block 3090 to enter the following function ++ ++#ifdef RT3090 ++ if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++ return; ++#endif // RT3090 // ++ if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) ++ { ++ DBGPRINT(RT_DEBUG_INFO, ("RTMPPCIePowerLinkCtrl return on fRTMP_PS_CAN_GO_SLEEP flag\n")); ++ return; ++ } + + DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); + PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +@@ -856,6 +1002,35 @@ VOID RTMPPCIeLinkCtrlSetting( + } + PCIePowerSaveLevel = PCIePowerSaveLevel>>6; + ++ // Skip non-exist deice right away ++ if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) ++ { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); ++ switch (PCIePowerSaveLevel) ++ { ++ case 0: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 ++ Configuration &= 0xfefc; ++ break; ++ case 1: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 ++ Configuration &= 0xfefc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ Configuration &= 0xfefc; ++ Configuration |= 0x3; ++ break; ++ case 3: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ Configuration &= 0xfefc; ++ Configuration |= 0x103; ++ break; ++ } ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ("Write PCI host offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); ++ } + + if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) + { +@@ -864,10 +1039,149 @@ VOID RTMPPCIeLinkCtrlSetting( + PCIePowerSaveLevel = Max; + + PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- Configuration |= 0x100; ++ switch (PCIePowerSaveLevel) ++ { ++ case 0: ++ // No PCI power safe ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . ++ Configuration &= 0xfefc; ++ break; ++ case 1: ++ // L0 ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . ++ Configuration &= 0xfefc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ // L0 and L1 ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ Configuration &= 0xfefc; ++ Configuration |= 0x3; ++ break; ++ case 3: ++ // L0 , L1 and clock management. ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ Configuration &= 0xfefc; ++ Configuration |= 0x103; ++ pAd->bPCIclkOff = TRUE; ++ break; ++ } + PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); + DBGPRINT(RT_DEBUG_TRACE, ("Write Ralink device : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); + } + + DBGPRINT(RT_DEBUG_TRACE,("RTMPPCIePowerLinkCtrl <==============\n")); + } ++ ++/* ++ ======================================================================== ++ ++ Routine Description: ++ 1. Write a PCI register for rt30xx power solution 3 ++ ++ ======================================================================== ++*/ ++VOID RTMPrt3xSetPCIePowerLinkCtrl( ++ IN PRTMP_ADAPTER pAd) ++{ ++ ++ ULONG HostConfiguration; ++ ULONG Configuration; ++ ULONG Vendor; ++ ULONG offset; ++ POS_COOKIE pObj; ++ INT pos; ++ USHORT reg16; ++ ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ++ DBGPRINT(RT_DEBUG_INFO, ("RTMPrt3xSetPCIePowerLinkCtrl.===> %x\n", pAd->StaCfg.PSControl.word)); ++ ++ // Check PSControl Configuration ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) ++ return; ++ RTMPFindHostPCIDev(pAd); ++ if (pObj->parent_pci_dev) ++ { ++ USHORT vendor_id; ++ // Find PCI-to-PCI Bridge Express Capability Offset ++ pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); ++ ++ if (pos != 0) ++ { ++ pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ } ++ // If configurared to turn on L1. ++ HostConfiguration = 0; ++ if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); ++ ++ // Skip non-exist deice right away ++ if ((pAd->HostLnkCtrlOffset != 0)) ++ { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ // Prepare Configuration to write to Host ++ HostConfiguration |= 0x3; ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ pAd->Rt3xxHostLinkCtrl = HostConfiguration; ++ // Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. ++ // Fix HostConfiguration bit0:1 = 0x3 for later use. ++ HostConfiguration = 0x3; ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM : Force ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); ++ } ++ } ++ else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) ++ { ++ ++ // Skip non-exist deice right away ++ if ((pAd->HostLnkCtrlOffset != 0)) ++ { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ pAd->Rt3xxHostLinkCtrl = HostConfiguration; ++ HostConfiguration &= 0x3; ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM : Follow Host ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); ++ } ++ } ++ } ++ // Prepare to write Ralink setting. ++ // Find Ralink PCIe Device's Express Capability Offset ++ pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); ++ ++ if (pos != 0) ++ { ++ // Ralink PCIe Device's Link Control Register Offset ++ pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); ++ Configuration |= 0x100; ++ if ((pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) ++ || (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1)) ++ { ++ switch(HostConfiguration) ++ { ++ case 0: ++ Configuration &= 0xffffffc; ++ break; ++ case 1: ++ Configuration &= 0xffffffc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ Configuration &= 0xffffffc; ++ Configuration |= 0x2; ++ break; ++ case 3: ++ Configuration |= 0x3; ++ break; ++ } ++ } ++ reg16 = cpu2le16(Configuration); ++ pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); ++ pAd->Rt3xxRalinkLinkCtrl = Configuration; ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM :Write Ralink device L1/L0s Value = 0x%x\n", Configuration)); ++ } ++ DBGPRINT(RT_DEBUG_INFO,("PSM :RTMPrt3xSetPCIePowerLinkCtrl <==============\n")); ++} +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 940b385..b578360 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -284,6 +284,9 @@ VOID RTMPFreeAdapter( + + #ifdef RTMP_MAC_PCI + NdisFreeSpinLock(&pAd->RxRingLock); ++#ifdef RT3090 ++NdisFreeSpinLock(&pAd->McuCmdLock); ++#endif // RT3090 // + #endif // RTMP_MAC_PCI // + + for (index =0 ; index < NUM_OF_TX_RING; index++) +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index 4ebe943..e8c7d88 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -590,6 +590,12 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + *_pV = 0; \ + } + ++#define RTMP_IO_FORCE_READ32(_A, _R, _pV) \ ++{ \ ++ (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ ++ (*_pV = readl((void *)((_A)->CSRBaseAddress + (_R)))); \ ++} ++ + #define RTMP_IO_READ8(_A, _R, _pV) \ + { \ + (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +@@ -605,7 +611,12 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + } \ + } + +- ++#define RTMP_IO_FORCE_WRITE32(_A, _R, _V) \ ++{ \ ++ UINT Val; \ ++ Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ ++ writel(_V, (void *)((_A)->CSRBaseAddress + (_R))); \ ++} + + #if defined(RALINK_2880) || defined(RALINK_3052) + #define RTMP_IO_WRITE8(_A, _R, _V) \ +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 89c67fc..7ea85e6 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -226,9 +226,9 @@ int rt28xx_close(IN PNET_DEV dev) + return 0; // close ok + + { +-#ifdef RTMP_PCI_SUPPORT ++#ifdef RTMP_MAC_PCI + RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_CLOSE); +-#endif // RTMP_PCI_SUPPORT // ++#endif // RTMP_MAC_PCI // + + // If dirver doesn't wake up firmware here, + // NICLoadFirmware will hang forever when interface is up again. +@@ -320,6 +320,10 @@ int rt28xx_close(IN PNET_DEV dev) + + + brc=RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); ++ ++//In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff ++ pAd->bPCIclkOff = FALSE; ++ + if (brc==FALSE) + { + DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); +@@ -400,11 +404,6 @@ int rt28xx_open(IN PNET_DEV dev) + return -1; + } + +-#ifdef RTMP_PCI_SUPPORT +- RTMPInitPCIeLinkCtrlValue(pAd); +-#endif // RTMP_PCI_SUPPORT // +- +- + if (net_dev->priv_flags == INT_MAIN) + { + if (pAd->OpMode == OPMODE_STA) +@@ -449,7 +448,9 @@ int rt28xx_open(IN PNET_DEV dev) + // RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); + + } +- ++#ifdef RTMP_MAC_PCI ++ RTMPInitPCIeLinkCtrlValue(pAd); ++#endif // RTMP_MAC_PCI // + + return (retval); + +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index b24df06..5990001 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -236,7 +236,6 @@ VOID Invalid_Remaining_Packet( + PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE); + } + +- + NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER *pAd) + { + POS_COOKIE pObj; +@@ -871,7 +870,6 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + pAd=(PRTMP_ADAPTER)handle; + pObj = (POS_COOKIE)pAd->OS_Cookie; + +- if (size > 0) +- pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); ++ pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); + + } +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index ee047f8..12b1465 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -913,6 +913,20 @@ typedef enum _ABGBAND_STATE_ { + A_BAND, + } ABGBAND_STATE; + ++#ifdef RTMP_MAC_PCI ++// Power save method control ++typedef union _PS_CONTROL { ++ struct { ++ ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey, ++ ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. ++ ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip ++ ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip. ++ ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. ++ ULONG rsv:26; // Radio Measurement Enable ++ } field; ++ ULONG word; ++} PS_CONTROL, *PPS_CONTROL; ++#endif // RTMP_MAC_PCI // + + /*************************************************************************** + * structure for MLME state machine +@@ -1542,7 +1556,6 @@ typedef struct _STA_ADMIN_CONFIG { + UCHAR WpaSupplicantUP; + UCHAR WpaSupplicantScanCount; + BOOLEAN bRSN_IE_FromWpaSupplicant; +- BOOLEAN bLostAp; + + CHAR dev_name[16]; + USHORT OriDevType; +@@ -1557,6 +1570,10 @@ typedef struct _STA_ADMIN_CONFIG { + + #ifdef RTMP_MAC_PCI + UCHAR BBPR3; ++ // PS Control has 2 meanings for advanced power save function. ++ // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. ++ // 2. EnableNewPS : will save more current in sleep or radio off mode. ++ PS_CONTROL PSControl; + #endif // RTMP_MAC_PCI // + + +@@ -1815,9 +1832,17 @@ struct _RTMP_ADAPTER + USHORT HostLnkCtrlConfiguration; + USHORT HostLnkCtrlOffset; + USHORT PCIePowerSaveLevel; ++ ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip ++ ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip ++ USHORT DeviceID; // Read from PCI config ++ ULONG AccessBBPFailCount; + BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. + BOOLEAN bPCIclkOffDisableTx; // + ++ BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set . ++ BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280. ++ ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. ++ + UINT int_enable_reg; + UINT int_disable_mask; + UINT int_pending; +@@ -1923,6 +1948,9 @@ struct _RTMP_ADAPTER + #ifdef RTMP_MAC_PCI + RTMP_RX_RING RxRing; + NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock ++#ifdef RT3090 ++ NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock ++#endif // RT3090 // + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. +@@ -2179,8 +2207,6 @@ struct _RTMP_ADAPTER + //BOOLEAN bDisablescanning; //defined in RT2870 USB + BOOLEAN bStaFifoTest; + BOOLEAN bProtectionTest; +- BOOLEAN bHCCATest; +- BOOLEAN bGenOneHCCA; + BOOLEAN bBroadComHT; + //+++Following add from RT2870 USB. + ULONG BulkOutReq; +@@ -2333,6 +2359,7 @@ typedef struct _TX_BLK_ + UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP + //RT2870 2.1.0.0 uses only 80 bytes + //RT3070 2.1.1.0 uses only 96 bytes ++ //RT3090 2.1.0.0 uses only 96 bytes + UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding + UCHAR HdrPadLen; // recording Header Padding Length; + UCHAR apidx; // The interface associated to this packet +@@ -2875,10 +2902,6 @@ VOID WpaStaPairwiseKeySetting( + VOID WpaStaGroupKeySetting( + IN PRTMP_ADAPTER pAd); + +-VOID WpaSendEapolStart( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR pBssid); +- + NDIS_STATUS RTMPCloneNdisPacket( + IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, +@@ -3685,9 +3708,6 @@ VOID ScanNextChannel( + ULONG MakeIbssBeacon( + IN PRTMP_ADAPTER pAd); + +-VOID InitChannelRelatedValue( +- IN PRTMP_ADAPTER pAd); +- + BOOLEAN MlmeScanReqSanity( + IN PRTMP_ADAPTER pAd, + IN VOID *Msg, +@@ -4063,6 +4083,10 @@ VOID RT30xxReverseRFSleepModeSetup( + VOID NICInitRT3070RFRegisters( + IN RTMP_ADAPTER *pAd); + #endif // RT3070 // ++#ifdef RT3090 ++VOID NICInitRT3090RFRegisters( ++ IN RTMP_ADAPTER *pAd); ++#endif // RT3090 // + + VOID RT30xxHaltAction( + IN PRTMP_ADAPTER pAd); +@@ -5239,7 +5263,6 @@ BOOLEAN RT28xxPciAsicRadioOn( + IN PRTMP_ADAPTER pAd, + IN UCHAR Level); + +-#ifdef RTMP_PCI_SUPPORT + VOID RTMPInitPCIeLinkCtrlValue( + IN PRTMP_ADAPTER pAd); + +@@ -5254,6 +5277,9 @@ VOID RTMPPCIeLinkCtrlSetting( + IN PRTMP_ADAPTER pAd, + IN USHORT Max); + ++VOID RTMPrt3xSetPCIePowerLinkCtrl( ++ IN PRTMP_ADAPTER pAd); ++ + VOID PsPollWakeExec( + IN PVOID SystemSpecific1, + IN PVOID FunctionContext, +@@ -5265,7 +5291,6 @@ VOID RadioOnExec( + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); +-#endif // RTMP_PCI_SUPPORT // + + VOID RT28xxPciStaAsicForceWakeup( + IN PRTMP_ADAPTER pAd, +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index 998960e..1284a44 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -49,6 +49,9 @@ + #ifdef RT3070 + #include "chip/rt3070.h" + #endif // RT3070 // ++#ifdef RT3090 ++#include "chip/rt3090.h" ++#endif // RT3090 // + + // We will have a cost down version which mac version is 0x3090xxxx + // +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index e999710..ca700d0 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -221,6 +221,11 @@ + #define fRTMP_PS_GO_TO_SLEEP_NOW 0x00000008 + #define fRTMP_PS_TOGGLE_L1 0x00000010 // Use Toggle L1 mechanism for rt28xx PCIe + ++#ifdef RT3090 ++#define WAKE_MCU_CMD 0x31 ++#define SLEEP_MCU_CMD 0x30 ++#define RFOFF_MCU_CMD 0x35 ++#endif // RT3090 // + + #define CCKSETPROTECT 0x1 + #define OFDMSETPROTECT 0x2 +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index b13d3a2..a67e213 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -464,18 +464,6 @@ VOID MlmeAssocReqAction( + break; + } + } +-#ifdef RT2860 +- /* +- When AuthMode is WPA2-Enterprise and AP reboot or STA lost AP, +- AP would not do PMK cache with STA after STA re-connect to AP again. +- In this case, driver doesn't need to send PMKID to AP and WpaSupplicant. +- */ +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) && +- (NdisEqualMemory(pAd->MlmeAux.Bssid, pAd->CommonCfg.LastBssid, MAC_ADDR_LEN))) +- { +- FoundPMK = FALSE; +- } +-#endif // RT2860 // + if (FoundPMK) + { + // Set PMK number +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index 0a5d28c..9c2fde4 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -137,10 +137,6 @@ VOID PeerDeauthAction( + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); + +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) && +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) +- pAd->StaCfg.bLostAp = TRUE; +- + LinkDown(pAd, TRUE); + } + } +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 3852d04..7f263a6 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -1125,6 +1125,26 @@ VOID LinkUp( + + COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); + ++#ifdef RTMP_MAC_PCI ++ // Before power save before link up function, We will force use 1R. ++ // So after link up, check Rx antenna # again. ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); ++ if(pAd->Antenna.field.RxPath == 3) ++ { ++ Value |= (0x10); ++ } ++ else if(pAd->Antenna.field.RxPath == 2) ++ { ++ Value |= (0x8); ++ } ++ else if(pAd->Antenna.field.RxPath == 1) ++ { ++ Value |= (0x0); ++ } ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // ++ + if (BssType == BSS_ADHOC) + { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); +@@ -1134,8 +1154,6 @@ VOID LinkUp( + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + AdhocTurnOnQos(pAd); + +- InitChannelRelatedValue(pAd); +- + DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" )); + } + else +@@ -1146,7 +1164,6 @@ VOID LinkUp( + DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" )); + } + +-#if defined(RT2870) || defined(RT3070) + // 3*3 + // reset Tx beamforming bit + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +@@ -1171,6 +1188,9 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // + + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); + Data &= 0xfffffffe; +@@ -1205,6 +1225,9 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value |= (0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // + + if (pAd->MACVersion == 0x28600100) + { +@@ -1234,6 +1257,9 @@ VOID LinkUp( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); ++#ifdef RTMP_MAC_PCI ++ pAd->StaCfg.BBPR3 = Value; ++#endif // RTMP_MAC_PCI // + + if (pAd->MACVersion == 0x28600100) + { +@@ -1247,7 +1273,6 @@ VOID LinkUp( + } + + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +-#endif // RT2870 // + + // + // Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission +@@ -1752,21 +1777,6 @@ VOID LinkUp( + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- +-#ifdef RT2860 +- /* +- When AuthMode is WPA2-Enterprise and AP reboot or STA lost AP, +- WpaSupplicant would not send EapolStart to AP after STA re-connect to AP again. +- In this case, driver would send EapolStart to AP. +- */ +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) && +- (NdisEqualMemory(pAd->CommonCfg.Bssid, pAd->CommonCfg.LastBssid, MAC_ADDR_LEN)) && +- (pAd->StaCfg.bLostAp == TRUE)) +- { +- WpaSendEapolStart(pAd, pAd->CommonCfg.Bssid); +- } +-#endif // RT2860 // +- pAd->StaCfg.bLostAp = FALSE; + } + + /* +@@ -1820,7 +1830,7 @@ VOID LinkDown( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); + + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + BOOLEAN Cancelled; + pAd->Mlme.bPsPollTimerRunning = FALSE; +@@ -1841,6 +1851,10 @@ VOID LinkDown( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + ++#ifdef RTMP_MAC_PCI ++ pAd->bPCIclkOff = FALSE; ++#endif // RTMP_MAC_PCI // ++ + if (ADHOC_ON(pAd)) // Adhoc mode link down + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); +@@ -2520,139 +2534,3 @@ ULONG MakeIbssBeacon( + FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, pAd->CommonCfg.PhyMode)); + return FrameLen; + } +- +-VOID InitChannelRelatedValue( +- IN PRTMP_ADAPTER pAd) +-{ +-#ifdef RT2860 +- UCHAR Value = 0; +- UINT32 Data = 0; +- +-#ifdef RTMP_MAC_PCI +- // In power save , We will force use 1R. +- // So after link up, check Rx antenna # again. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- if(pAd->Antenna.field.RxPath == 3) +- { +- Value |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- Value |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- Value |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- pAd->CommonCfg.CentralChannel = pAd->MlmeAux.CentralChannel; +- pAd->CommonCfg.Channel = pAd->MlmeAux.Channel; +- // Change to AP channel +- if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- // RX : control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data |= 0x1; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value |= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else +- { +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz !!! \n" )); +- } +- +- RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +-#endif // RT2860 // +-} +- +- +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index 6a8ffde..0ab3dce 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -1208,7 +1208,6 @@ NDIS_STATUS RTMPFreeTXDRequest( + case QID_AC_BE: + case QID_AC_VI: + case QID_AC_VO: +- case QID_HCCA: + if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx) + FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1; + else +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index f72f11a..dc71c1d 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -195,13 +195,23 @@ VOID MlmeScanReqAction( + pAd->StaCfg.ScanCnt++; + + #ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && ++ if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && + (IDLE_ON(pAd)) && + (pAd->StaCfg.bRadio == TRUE) && + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) + { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) ++ { ++ AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); ++ AsicCheckCommanOk(pAd, PowerWakeCID); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ DBGPRINT(RT_DEBUG_TRACE, ("PSM - Issue Wake up command \n")); ++ } ++ else ++ { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } ++ } + #endif // RTMP_MAC_PCI // + + // first check the parameter sanity +@@ -303,7 +313,7 @@ VOID MlmeJoinReqAction( + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); + + #ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && ++ if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && + (IDLE_ON(pAd)) && + (pAd->StaCfg.bRadio == TRUE) && + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +@@ -338,9 +348,7 @@ VOID MlmeJoinReqAction( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +-#ifdef RT2860 +- pAd->CommonCfg.BBPCurrentBW = BW_20; +-#endif // RT2860 // ++ + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); + + // switch channel and waiting for beacon timer +@@ -898,8 +906,6 @@ VOID PeerBeaconAtJoinAction( + else //Used the default TX Power Percentage. + pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; + +- InitChannelRelatedValue(pAd); +- + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_SUCCESS; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +@@ -1317,7 +1323,7 @@ VOID PeerBeacon( + if (MessageToMe) + { + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + // Restore to correct BBP R3 value + if (pAd->Antenna.field.RxPath > 1) +@@ -1336,7 +1342,7 @@ VOID PeerBeacon( + else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM)) + { + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + if (pAd->Antenna.field.RxPath > 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +@@ -1356,7 +1362,7 @@ VOID PeerBeacon( + // TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme + // can we cheat here (i.e. just check MGMT & AC_BE) for better performance? + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + if (pAd->Antenna.field.RxPath > 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index d45b9ba..c6c3f3b 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -389,51 +389,3 @@ VOID WpaStaGroupKeySetting( + NULL); + + } +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Send EAPoL-Start packet to AP. +- +- Arguments: +- pAd - NIC Adapter pointer +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- Actions after link up +- 1. Change the correct parameters +- 2. Send EAPOL - START +- +- ======================================================================== +-*/ +-VOID WpaSendEapolStart( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid) +-{ +- IEEE8021X_FRAME Packet; +- UCHAR Header802_3[14]; +- +- DBGPRINT(RT_DEBUG_TRACE, ("-----> WpaSendEapolStart\n")); +- +- NdisZeroMemory(Header802_3,sizeof(UCHAR)*14); +- +- MAKE_802_3_HEADER(Header802_3, pBssid, &pAd->CurrentAddress[0], EAPOL); +- +- // Zero message 2 body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.Version = EAPOL_VER; +- Packet.Type = EAPOLStart; +- Packet.Length = cpu2be16(0); +- +- // Copy frame to Tx ring +- RTMPToWirelessSta((PRTMP_ADAPTER)pAd, &pAd->MacTab.Content[BSSID_WCID], +- Header802_3, LENGTH_802_3, (PUCHAR)&Packet, 4, TRUE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<----- WpaSendEapolStart\n")); +-} +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index b6a3c90..e5e2942 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -160,6 +160,12 @@ INT Set_PSMode_Proc( + IN PRTMP_ADAPTER pAdapter, + IN PSTRING arg); + ++#ifdef RT3090 ++INT Set_PCIePSLevel_Proc( ++IN PRTMP_ADAPTER pAdapter, ++IN PUCHAR arg); ++#endif // RT3090 // ++ + INT Set_Wpa_Support( + IN PRTMP_ADAPTER pAd, + IN PSTRING arg); +@@ -515,6 +521,7 @@ rt_ioctl_giwname(struct net_device *dev, + { + strncpy(name, "Ralink STA", IFNAMSIZ); + // RT2870 2.1.0.0 uses "RT2870 Wireless" ++ // RT3090 2.1.0.0 uses "RT2860 Wireless" + return 0; + } + +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index 63f4774..27e5aab 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -347,13 +347,6 @@ typedef enum _WpaMixPairCipher + WPA_TKIPAES_WPA2_TKIPAES = 0x0F, + } WPA_MIX_PAIR_CIPHER; + +-// 802.1x authentication format +-typedef struct _IEEE8021X_FRAME { +- UCHAR Version; // 1.0 +- UCHAR Type; // 0 = EAP Packet +- USHORT Length; +-} IEEE8021X_FRAME, *PIEEE8021X_FRAME; +- + typedef struct PACKED _RSN_IE_HEADER_STRUCT { + UCHAR Eid; + UCHAR Length; +diff --git a/drivers/staging/rt3090/common/rtmp_mcu.c b/drivers/staging/rt3090/common/rtmp_mcu.c +index 23f785a..20319e6 100644 +--- a/drivers/staging/rt3090/common/rtmp_mcu.c ++++ b/drivers/staging/rt3090/common/rtmp_mcu.c +@@ -43,7 +43,7 @@ + + // New 8k byte firmware size for RT3071/RT3072 + #define FIRMWAREIMAGE_MAX_LENGTH 0x2000 +-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR)) ++#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage_3090) / sizeof(UCHAR)) + #define FIRMWARE_MAJOR_VERSION 0 + + #define FIRMWAREIMAGEV1_LENGTH 0x1000 +@@ -335,8 +335,8 @@ NDIS_STATUS RtmpAsicLoadFirmware( + UINT32 MacReg = 0; + UINT32 Version = (pAd->MACVersion >> 16); + +- pFirmwareImage = FirmwareImage; +- FileLength = sizeof(FirmwareImage); ++ pFirmwareImage = FirmwareImage_3090; ++ FileLength = sizeof(*pFirmwareImage); + + // New 8k byte firmware size for RT3071/RT3072 + //DBGPRINT(RT_DEBUG_TRACE, ("Usb Chip\n")); +@@ -347,7 +347,7 @@ NDIS_STATUS RtmpAsicLoadFirmware( + #ifdef RTMP_MAC_PCI + if ((Version == 0x2860) || IS_RT3090(pAd)||IS_RT3390(pAd)) + { +- pFirmwareImage = FirmwareImage; ++ pFirmwareImage = FirmwareImage_3090; + FileLength = FIRMWAREIMAGE_LENGTH; + } + #endif // RTMP_MAC_PCI // +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch b/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch new file mode 100644 index 000000000..5dfab2a06 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch @@ -0,0 +1,105373 @@ +From cc0d945aede2b97374a5652bb61677e05932ed6e Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Tue, 22 Sep 2009 20:44:33 +0200 +Subject: [PATCH 04/42] Staging: remove no longer needed rt3090 driver + +commit e20aea64e160d5873c2aaf62cc255ea81ce000eb upstream. + +rt2860 handles now all rt2860/rt3090 chipsets. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/Kconfig | 2 - + drivers/staging/Makefile | 1 - + drivers/staging/rt2860/pci_main_dev.c | 1 + + drivers/staging/rt3090/Kconfig | 6 - + drivers/staging/rt3090/Makefile | 80 - + drivers/staging/rt3090/action.h | 66 - + drivers/staging/rt3090/ap.h | 512 -- + drivers/staging/rt3090/ap_apcli.h | 276 - + drivers/staging/rt3090/ap_autoChSel.h | 79 - + drivers/staging/rt3090/ap_autoChSel_cmm.h | 66 - + drivers/staging/rt3090/ap_cfg.h | 118 - + drivers/staging/rt3090/ap_ids.h | 82 - + drivers/staging/rt3090/ap_mbss.h | 72 - + drivers/staging/rt3090/ap_uapsd.h | 636 -- + drivers/staging/rt3090/ap_wds.h | 212 - + drivers/staging/rt3090/chips/rt3090.c | 123 - + drivers/staging/rt3090/chips/rt30xx.c | 525 -- + drivers/staging/rt3090/chips/rt3370.c | 121 - + drivers/staging/rt3090/chips/rt3390.c | 122 - + drivers/staging/rt3090/chips/rt33xx.c | 536 -- + drivers/staging/rt3090/chlist.h | 130 - + drivers/staging/rt3090/common/action.c | 1057 --- + drivers/staging/rt3090/common/ba_action.c | 1779 ----- + drivers/staging/rt3090/common/cmm_aes.c | 1560 ----- + drivers/staging/rt3090/common/cmm_asic.c | 2753 -------- + drivers/staging/rt3090/common/cmm_cfg.c | 295 - + drivers/staging/rt3090/common/cmm_data.c | 2763 -------- + drivers/staging/rt3090/common/cmm_data_pci.c | 1576 ----- + drivers/staging/rt3090/common/cmm_info.c | 3718 ----------- + drivers/staging/rt3090/common/cmm_mac_pci.c | 1757 ----- + drivers/staging/rt3090/common/cmm_profile.c | 2321 ------- + drivers/staging/rt3090/common/cmm_sanity.c | 1718 ----- + drivers/staging/rt3090/common/cmm_sync.c | 734 --- + drivers/staging/rt3090/common/cmm_tkip.c | 966 --- + drivers/staging/rt3090/common/cmm_wep.c | 500 -- + drivers/staging/rt3090/common/cmm_wpa.c | 3149 --------- + drivers/staging/rt3090/common/crypt_aes.c | 1007 --- + drivers/staging/rt3090/common/crypt_biginteger.c | 1119 ---- + drivers/staging/rt3090/common/crypt_dh.c | 234 - + drivers/staging/rt3090/common/crypt_hmac.c | 279 - + drivers/staging/rt3090/common/crypt_md5.c | 353 - + drivers/staging/rt3090/common/crypt_sha2.c | 536 -- + drivers/staging/rt3090/common/dfs.c | 481 -- + drivers/staging/rt3090/common/ee_efuse.c | 1548 ----- + drivers/staging/rt3090/common/ee_prom.c | 308 - + drivers/staging/rt3090/common/eeprom.c | 98 - + drivers/staging/rt3090/common/igmp_snoop.c | 1365 ---- + drivers/staging/rt3090/common/mlme.c | 6550 ------------------- + drivers/staging/rt3090/common/mlme_ex.c | 215 - + drivers/staging/rt3090/common/netif_block.c | 147 - + drivers/staging/rt3090/common/rt_channel.c | 1287 ---- + drivers/staging/rt3090/common/rt_rf.c | 201 - + drivers/staging/rt3090/common/rtmp_init.c | 3882 ----------- + drivers/staging/rt3090/common/rtmp_mcu.c | 560 -- + drivers/staging/rt3090/common/rtmp_timer.c | 327 - + drivers/staging/rt3090/common/spectrum.c | 2221 ------- + drivers/staging/rt3090/config.mk | 187 - + drivers/staging/rt3090/crypt_hmac.h | 81 - + drivers/staging/rt3090/crypt_md5.h | 78 - + drivers/staging/rt3090/crypt_sha2.h | 107 - + drivers/staging/rt3090/dfs.h | 137 - + drivers/staging/rt3090/eeprom.h | 82 - + drivers/staging/rt3090/igmp_snoop.h | 152 - + drivers/staging/rt3090/ipv6.h | 215 - + drivers/staging/rt3090/link_list.h | 133 - + drivers/staging/rt3090/mac_pci.h | 454 -- + drivers/staging/rt3090/mlme.h | 1360 ---- + drivers/staging/rt3090/mlme_ex.h | 83 - + drivers/staging/rt3090/mlme_ex_def.h | 53 - + drivers/staging/rt3090/netif_block.h | 56 - + drivers/staging/rt3090/oid.h | 1144 ---- + drivers/staging/rt3090/pci_main_dev.c | 1195 ---- + drivers/staging/rt3090/rt3090.h | 77 - + drivers/staging/rt3090/rt30xx.h | 48 - + drivers/staging/rt3090/rt3370.h | 64 - + drivers/staging/rt3090/rt3390.h | 77 - + drivers/staging/rt3090/rt33xx.h | 48 - + drivers/staging/rt3090/rt_ate.c | 6089 ----------------- + drivers/staging/rt3090/rt_ate.h | 314 - + drivers/staging/rt3090/rt_config.h | 126 - + drivers/staging/rt3090/rt_linux.c | 1624 ----- + drivers/staging/rt3090/rt_linux.h | 1034 --- + drivers/staging/rt3090/rt_main_dev.c | 897 --- + drivers/staging/rt3090/rt_pci_rbus.c | 989 --- + drivers/staging/rt3090/rt_profile.c | 101 - + drivers/staging/rt3090/rtmp.h | 6873 -------------------- + drivers/staging/rt3090/rtmp_chip.h | 355 - + drivers/staging/rt3090/rtmp_def.h | 1650 ----- + drivers/staging/rt3090/rtmp_dot11.h | 146 - + drivers/staging/rt3090/rtmp_iface.h | 81 - + drivers/staging/rt3090/rtmp_mac.h | 2304 ------- + drivers/staging/rt3090/rtmp_mcu.h | 55 - + drivers/staging/rt3090/rtmp_os.h | 93 - + drivers/staging/rt3090/rtmp_pci.h | 110 - + drivers/staging/rt3090/rtmp_phy.h | 631 -- + drivers/staging/rt3090/rtmp_timer.h | 162 - + drivers/staging/rt3090/rtmp_type.h | 147 - + drivers/staging/rt3090/spectrum.h | 234 - + drivers/staging/rt3090/spectrum_def.h | 257 - + drivers/staging/rt3090/sta/assoc.c | 1673 ----- + drivers/staging/rt3090/sta/auth.c | 491 -- + drivers/staging/rt3090/sta/auth_rsp.c | 151 - + drivers/staging/rt3090/sta/connect.c | 2759 -------- + drivers/staging/rt3090/sta/dls.c | 2207 ------- + drivers/staging/rt3090/sta/rtmp_ckipmic.c | 579 -- + drivers/staging/rt3090/sta/rtmp_data.c | 2661 -------- + drivers/staging/rt3090/sta/sanity.c | 382 -- + drivers/staging/rt3090/sta/sync.c | 1840 ------ + drivers/staging/rt3090/sta/wpa.c | 396 -- + drivers/staging/rt3090/sta_ioctl.c | 7557 ---------------------- + drivers/staging/rt3090/vr_ikans.h | 71 - + drivers/staging/rt3090/wpa.h | 447 -- + 112 files changed, 1 insertions(+), 104446 deletions(-) + delete mode 100644 drivers/staging/rt3090/Kconfig + delete mode 100644 drivers/staging/rt3090/Makefile + delete mode 100644 drivers/staging/rt3090/action.h + delete mode 100644 drivers/staging/rt3090/ap.h + delete mode 100644 drivers/staging/rt3090/ap_apcli.h + delete mode 100644 drivers/staging/rt3090/ap_autoChSel.h + delete mode 100644 drivers/staging/rt3090/ap_autoChSel_cmm.h + delete mode 100644 drivers/staging/rt3090/ap_cfg.h + delete mode 100644 drivers/staging/rt3090/ap_ids.h + delete mode 100644 drivers/staging/rt3090/ap_mbss.h + delete mode 100644 drivers/staging/rt3090/ap_uapsd.h + delete mode 100644 drivers/staging/rt3090/ap_wds.h + delete mode 100644 drivers/staging/rt3090/chips/rt3090.c + delete mode 100644 drivers/staging/rt3090/chips/rt30xx.c + delete mode 100644 drivers/staging/rt3090/chips/rt3370.c + delete mode 100644 drivers/staging/rt3090/chips/rt3390.c + delete mode 100644 drivers/staging/rt3090/chips/rt33xx.c + delete mode 100644 drivers/staging/rt3090/chlist.h + delete mode 100644 drivers/staging/rt3090/common/action.c + delete mode 100644 drivers/staging/rt3090/common/ba_action.c + delete mode 100644 drivers/staging/rt3090/common/cmm_aes.c + delete mode 100644 drivers/staging/rt3090/common/cmm_asic.c + delete mode 100644 drivers/staging/rt3090/common/cmm_cfg.c + delete mode 100644 drivers/staging/rt3090/common/cmm_data.c + delete mode 100644 drivers/staging/rt3090/common/cmm_data_pci.c + delete mode 100644 drivers/staging/rt3090/common/cmm_info.c + delete mode 100644 drivers/staging/rt3090/common/cmm_mac_pci.c + delete mode 100644 drivers/staging/rt3090/common/cmm_profile.c + delete mode 100644 drivers/staging/rt3090/common/cmm_sanity.c + delete mode 100644 drivers/staging/rt3090/common/cmm_sync.c + delete mode 100644 drivers/staging/rt3090/common/cmm_tkip.c + delete mode 100644 drivers/staging/rt3090/common/cmm_wep.c + delete mode 100644 drivers/staging/rt3090/common/cmm_wpa.c + delete mode 100644 drivers/staging/rt3090/common/crypt_aes.c + delete mode 100644 drivers/staging/rt3090/common/crypt_biginteger.c + delete mode 100644 drivers/staging/rt3090/common/crypt_dh.c + delete mode 100644 drivers/staging/rt3090/common/crypt_hmac.c + delete mode 100644 drivers/staging/rt3090/common/crypt_md5.c + delete mode 100644 drivers/staging/rt3090/common/crypt_sha2.c + delete mode 100644 drivers/staging/rt3090/common/dfs.c + delete mode 100644 drivers/staging/rt3090/common/ee_efuse.c + delete mode 100644 drivers/staging/rt3090/common/ee_prom.c + delete mode 100644 drivers/staging/rt3090/common/eeprom.c + delete mode 100644 drivers/staging/rt3090/common/igmp_snoop.c + delete mode 100644 drivers/staging/rt3090/common/mlme.c + delete mode 100644 drivers/staging/rt3090/common/mlme_ex.c + delete mode 100644 drivers/staging/rt3090/common/netif_block.c + delete mode 100644 drivers/staging/rt3090/common/rt_channel.c + delete mode 100644 drivers/staging/rt3090/common/rt_rf.c + delete mode 100644 drivers/staging/rt3090/common/rtmp_init.c + delete mode 100644 drivers/staging/rt3090/common/rtmp_mcu.c + delete mode 100644 drivers/staging/rt3090/common/rtmp_timer.c + delete mode 100644 drivers/staging/rt3090/common/spectrum.c + delete mode 100644 drivers/staging/rt3090/config.mk + delete mode 100644 drivers/staging/rt3090/crypt_hmac.h + delete mode 100644 drivers/staging/rt3090/crypt_md5.h + delete mode 100644 drivers/staging/rt3090/crypt_sha2.h + delete mode 100644 drivers/staging/rt3090/dfs.h + delete mode 100644 drivers/staging/rt3090/eeprom.h + delete mode 100644 drivers/staging/rt3090/igmp_snoop.h + delete mode 100644 drivers/staging/rt3090/ipv6.h + delete mode 100644 drivers/staging/rt3090/link_list.h + delete mode 100644 drivers/staging/rt3090/mac_pci.h + delete mode 100644 drivers/staging/rt3090/mlme.h + delete mode 100644 drivers/staging/rt3090/mlme_ex.h + delete mode 100644 drivers/staging/rt3090/mlme_ex_def.h + delete mode 100644 drivers/staging/rt3090/netif_block.h + delete mode 100644 drivers/staging/rt3090/oid.h + delete mode 100644 drivers/staging/rt3090/pci_main_dev.c + delete mode 100644 drivers/staging/rt3090/rt3090.h + delete mode 100644 drivers/staging/rt3090/rt30xx.h + delete mode 100644 drivers/staging/rt3090/rt3370.h + delete mode 100644 drivers/staging/rt3090/rt3390.h + delete mode 100644 drivers/staging/rt3090/rt33xx.h + delete mode 100644 drivers/staging/rt3090/rt_ate.c + delete mode 100644 drivers/staging/rt3090/rt_ate.h + delete mode 100644 drivers/staging/rt3090/rt_config.h + delete mode 100644 drivers/staging/rt3090/rt_linux.c + delete mode 100644 drivers/staging/rt3090/rt_linux.h + delete mode 100644 drivers/staging/rt3090/rt_main_dev.c + delete mode 100644 drivers/staging/rt3090/rt_pci_rbus.c + delete mode 100644 drivers/staging/rt3090/rt_profile.c + delete mode 100644 drivers/staging/rt3090/rtmp.h + delete mode 100644 drivers/staging/rt3090/rtmp_chip.h + delete mode 100644 drivers/staging/rt3090/rtmp_def.h + delete mode 100644 drivers/staging/rt3090/rtmp_dot11.h + delete mode 100644 drivers/staging/rt3090/rtmp_iface.h + delete mode 100644 drivers/staging/rt3090/rtmp_mac.h + delete mode 100644 drivers/staging/rt3090/rtmp_mcu.h + delete mode 100644 drivers/staging/rt3090/rtmp_os.h + delete mode 100644 drivers/staging/rt3090/rtmp_pci.h + delete mode 100644 drivers/staging/rt3090/rtmp_phy.h + delete mode 100644 drivers/staging/rt3090/rtmp_timer.h + delete mode 100644 drivers/staging/rt3090/rtmp_type.h + delete mode 100644 drivers/staging/rt3090/spectrum.h + delete mode 100644 drivers/staging/rt3090/spectrum_def.h + delete mode 100644 drivers/staging/rt3090/sta/assoc.c + delete mode 100644 drivers/staging/rt3090/sta/auth.c + delete mode 100644 drivers/staging/rt3090/sta/auth_rsp.c + delete mode 100644 drivers/staging/rt3090/sta/connect.c + delete mode 100644 drivers/staging/rt3090/sta/dls.c + delete mode 100644 drivers/staging/rt3090/sta/rtmp_ckipmic.c + delete mode 100644 drivers/staging/rt3090/sta/rtmp_data.c + delete mode 100644 drivers/staging/rt3090/sta/sanity.c + delete mode 100644 drivers/staging/rt3090/sta/sync.c + delete mode 100644 drivers/staging/rt3090/sta/wpa.c + delete mode 100644 drivers/staging/rt3090/sta_ioctl.c + delete mode 100644 drivers/staging/rt3090/vr_ikans.h + delete mode 100644 drivers/staging/rt3090/wpa.h + +diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig +index 805858e..d034aaa 100644 +--- a/drivers/staging/Kconfig ++++ b/drivers/staging/Kconfig +@@ -65,8 +65,6 @@ source "drivers/staging/rt2860/Kconfig" + + source "drivers/staging/rt2870/Kconfig" + +-source "drivers/staging/rt3090/Kconfig" +- + source "drivers/staging/comedi/Kconfig" + + source "drivers/staging/asus_oled/Kconfig" +diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile +index 49bc2ff..4cb1a25 100644 +--- a/drivers/staging/Makefile ++++ b/drivers/staging/Makefile +@@ -15,7 +15,6 @@ obj-$(CONFIG_POCH) += poch/ + obj-$(CONFIG_OTUS) += otus/ + obj-$(CONFIG_RT2860) += rt2860/ + obj-$(CONFIG_RT2870) += rt2870/ +-obj-$(CONFIG_RT3090) += rt3090/ + obj-$(CONFIG_COMEDI) += comedi/ + obj-$(CONFIG_ASUS_OLED) += asus_oled/ + obj-$(CONFIG_PANEL) += panel/ +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 0df1ac8..1436a60 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -44,6 +44,7 @@ + MODULE_AUTHOR("Jett Chen "); + MODULE_DESCRIPTION("RT2860/RT3090 Wireless Lan Linux Driver"); + MODULE_LICENSE("GPL"); ++MODULE_ALIAS("rt3090sta"); + + // + // Function declarations +diff --git a/drivers/staging/rt3090/Kconfig b/drivers/staging/rt3090/Kconfig +deleted file mode 100644 +index 8ba68b0..0000000 +--- a/drivers/staging/rt3090/Kconfig ++++ /dev/null +@@ -1,6 +0,0 @@ +-config RT3090 +- tristate "Ralink 3090 wireless support" +- depends on BROKEN +- depends on PCI && X86 && WLAN +- ---help--- +- This is an experimental driver for the Ralink 3090 wireless chip. +diff --git a/drivers/staging/rt3090/Makefile b/drivers/staging/rt3090/Makefile +deleted file mode 100644 +index 995491c..0000000 +--- a/drivers/staging/rt3090/Makefile ++++ /dev/null +@@ -1,80 +0,0 @@ +-obj-$(CONFIG_RT3090) += rt3090sta.o +- +-include drivers/staging/rt3090/config.mk +- +-rt3090sta-objs := \ +- common/crypt_md5.o \ +- common/crypt_sha2.o \ +- common/crypt_hmac.o \ +- common/mlme.o \ +- common/cmm_wep.o \ +- common/action.o \ +- common/cmm_data.o \ +- common/rtmp_init.o \ +- common/cmm_tkip.o \ +- common/cmm_aes.o \ +- common/cmm_sync.o \ +- common/eeprom.o \ +- common/cmm_sanity.o \ +- common/cmm_info.o \ +- common/cmm_cfg.o \ +- common/cmm_wpa.o \ +- common/dfs.o \ +- common/spectrum.o \ +- common/rtmp_timer.o \ +- common/rt_channel.o \ +- common/cmm_profile.o \ +- common/cmm_asic.o \ +- sta/assoc.o \ +- sta/auth.o \ +- sta/auth_rsp.o \ +- sta/sync.o \ +- sta/sanity.o \ +- sta/rtmp_data.o \ +- sta/connect.o \ +- sta/wpa.o \ +- rt_linux.o \ +- rt_profile.o \ +- rt_main_dev.o \ +- sta_ioctl.o +- +-#ifdef DOT11_N_SUPPORT +-ifeq ($(HAS_DOT11_N_SUPPORT),y) +-rt3090sta-objs += \ +- common/ba_action.o +-endif +-#endif // DOT11_N_SUPPORT // +- +-#ifdef ETH_CONVERT +-ifeq ($(HAS_ETH_CONVERT_SUPPORT), y) +-rt3090sta-objs += \ +- common/cmm_mat.o \ +- common/cmm_mat_iparp.o \ +- common/cmm_mat_pppoe.o \ +- common/cmm_mat_ipv6.o +-endif +-#endif // ETH_CONVERT // +- +-ifeq ($(HAS_BLOCK_NET_IF),y) +-rt3090sta-objs += common/netif_block.o +-endif +- +-ifeq ($(HAS_QOS_DLS_SUPPORT),y) +-rt3090sta-objs += sta/dls.o +-endif +- +-rt3090sta-objs += \ +- pci_main_dev.o \ +- rt_pci_rbus.o \ +- common/cmm_mac_pci.o \ +- common/cmm_data_pci.o \ +- common/ee_prom.o \ +- common/ee_efuse.o \ +- common/rtmp_mcu.o \ +- chips/rt30xx.o \ +- common/rt_rf.o \ +- chips/rt3090.o +- +-ifeq ($(HAS_ATE),y) +-rt3090sta-objs += rt_ate.o +-endif +diff --git a/drivers/staging/rt3090/action.h b/drivers/staging/rt3090/action.h +deleted file mode 100644 +index ac0a0a3..0000000 +--- a/drivers/staging/rt3090/action.h ++++ /dev/null +@@ -1,66 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- aironet.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Paul Lin 04-06-15 Initial +-*/ +- +-#ifndef __ACTION_H__ +-#define __ACTION_H__ +- +-typedef struct PACKED __HT_INFO_OCTET +-{ +-#ifdef RT_BIG_ENDIAN +- UCHAR Reserved:5; +- UCHAR STA_Channel_Width:1; +- UCHAR Forty_MHz_Intolerant:1; +- UCHAR Request:1; +-#else +- UCHAR Request:1; +- UCHAR Forty_MHz_Intolerant:1; +- UCHAR STA_Channel_Width:1; +- UCHAR Reserved:5; +-#endif +-} HT_INFORMATION_OCTET; +- +- +-typedef struct PACKED __FRAME_HT_INFO +-{ +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- HT_INFORMATION_OCTET HT_Info; +-} FRAME_HT_INFO, *PFRAME_HT_INFO; +- +-#endif /* __ACTION_H__ */ +diff --git a/drivers/staging/rt3090/ap.h b/drivers/staging/rt3090/ap.h +deleted file mode 100644 +index e894303..0000000 +--- a/drivers/staging/rt3090/ap.h ++++ /dev/null +@@ -1,512 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 08-01-2002 created +- James Tan 09-06-2002 modified (Revise NTCRegTable) +- John Chang 12-22-2004 modified for RT2561/2661. merge with STA driver +-*/ +-#ifndef __AP_H__ +-#define __AP_H__ +- +- +-// ============================================================= +-// Function Prototypes +-// ============================================================= +- +-// ap_data.c +- +-BOOLEAN APBridgeToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN ULONG fromwdsidx); +- +- +-VOID APSendPackets( +- IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, +- IN UINT NumberOfPackets); +- +-NDIS_STATUS APSendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +- +-NDIS_STATUS APHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +-VOID APRxEAPOLFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-NDIS_STATUS APCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PRT28XX_RXD_STRUC pRxD, +- IN UCHAR Wcid); +- +-BOOLEAN APCheckClass2Class3Error( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN PHEADER_802_11 pHeader); +- +-VOID APHandleRxPsPoll( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN USHORT Aid, +- IN BOOLEAN isActive); +- +-VOID RTMPDescriptorEndianChange( +- IN PUCHAR pData, +- IN ULONG DescriptorType); +- +-VOID RTMPFrameEndianChange( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG Dir, +- IN BOOLEAN FromRxDoneInt); +- +-// ap_assoc.c +- +-VOID APAssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID APPeerAssocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APPeerReassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APPeerDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MbssKickOutStas( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx, +- IN USHORT Reason); +- +-VOID APMlmeKickOutSta( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pStaAddr, +- IN UCHAR Wcid, +- IN USHORT Reason); +- +-VOID APMlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APCls3errAction( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN PHEADER_802_11 pHeader); +- +- +-USHORT APBuildAssociation( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN USHORT CapabilityInfo, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN UCHAR *RSN, +- IN UCHAR *pRSNLen, +- IN BOOLEAN bWmmCapable, +- IN ULONG RalinkIe, +-#ifdef DOT11N_DRAFT3 +- IN EXT_CAP_INFO_ELEMENT ExtCapInfo, +-#endif // DOT11N_DRAFT3 // +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- OUT USHORT *pAid); +- +-/* +-VOID RTMPAddClientSec( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic, +- IN MAC_TABLE_ENTRY *pEntry); +-*/ +- +-// ap_auth.c +- +-void APAuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID APCls2errAction( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN PHEADER_802_11 pHeader); +- +-// ap_connect.c +- +- +-VOID APMakeBssBeacon( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx); +- +-VOID APUpdateBeaconFrame( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx); +- +-VOID APMakeAllBssBeacon( +- IN PRTMP_ADAPTER pAd); +- +-VOID APUpdateAllBeaconFrame( +- IN PRTMP_ADAPTER pAd); +- +- +-// ap_sync.c +- +-VOID APSyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID APScanTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID APInvalidStateWhenScan( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APScanTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APPeerProbeReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APPeerBeaconAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APMlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APPeerBeaconAtScanAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID APScanCnclAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ApSiteSurvey( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_802_11_SSID pSsid, +- IN UCHAR ScanType); +- +-VOID SupportRate( +- IN PUCHAR SupRate, +- IN UCHAR SupRateLen, +- IN PUCHAR ExtRate, +- IN UCHAR ExtRateLen, +- OUT PUCHAR *Rates, +- OUT PUCHAR RatesLen, +- OUT PUCHAR pMaxSupportRate); +- +- +-BOOLEAN ApScanRunning( +- IN PRTMP_ADAPTER pAd); +- +-#ifdef DOT11N_DRAFT3 +-VOID APOverlappingBSSScan( +- IN RTMP_ADAPTER *pAd); +-#endif // DOT11N_DRAFT3 // +- +-// ap_wpa.c +-VOID WpaStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-// ap_mlme.c +-VOID APMlmePeriodicExec( +- IN PRTMP_ADAPTER pAd); +- +-VOID APMlmeSelectTxRateTable( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR *ppTable, +- IN PUCHAR pTableSize, +- IN PUCHAR pInitTxRateIdx); +- +-VOID APMlmeSetTxRate( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PRTMP_TX_RATE_SWITCH pTxRate); +- +-VOID APMlmeDynamicTxRateSwitching( +- IN PRTMP_ADAPTER pAd); +- +-VOID APQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-BOOLEAN APMsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType); +- +-VOID APQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +- +-VOID RTMPSetPiggyBack( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bPiggyBack); +- +-VOID APAsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd); +- +-VOID APAsicRxAntEvalTimeout( +- IN PRTMP_ADAPTER pAd); +- +-// ap.c +- +-VOID APSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN INT Channel); +- +-NDIS_STATUS APInitialize( +- IN PRTMP_ADAPTER pAd); +- +-VOID APShutdown( +- IN PRTMP_ADAPTER pAd); +- +-VOID APStartUp( +- IN PRTMP_ADAPTER pAd); +- +-VOID APStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID APCleanupPsQueue( +- IN PRTMP_ADAPTER pAd, +- IN PQUEUE_HEADER pQueue); +- +-VOID MacTableReset( +- IN PRTMP_ADAPTER pAd); +- +-MAC_TABLE_ENTRY *MacTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, +- IN BOOLEAN CleanAll); +- +-BOOLEAN MacTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr); +- +-MAC_TABLE_ENTRY *MacTableLookup( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-VOID MacTableMaintenance( +- IN PRTMP_ADAPTER pAd); +- +-UINT32 MacTableAssocStaNumGet( +- IN PRTMP_ADAPTER pAd); +- +-MAC_TABLE_ENTRY *APSsPsInquiry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- OUT SST *Sst, +- OUT USHORT *Aid, +- OUT UCHAR *PsMode, +- OUT UCHAR *Rate); +- +-BOOLEAN APPsIndicate( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN ULONG Wcid, +- IN UCHAR Psm); +- +-VOID ApLogEvent( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN USHORT Event); +- +-#ifdef DOT11_N_SUPPORT +-VOID APUpdateOperationMode( +- IN PRTMP_ADAPTER pAd); +-#endif // DOT11_N_SUPPORT // +- +-VOID APUpdateCapabilityAndErpIe( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN ApCheckAccessControlList( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR Apidx); +- +-VOID ApUpdateAccessControlList( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Apidx); +- +-VOID ApEnqueueNullFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR TxRate, +- IN UCHAR PID, +- IN UCHAR apidx, +- IN BOOLEAN bQosNull, +- IN BOOLEAN bEOSP, +- IN UCHAR OldUP); +- +-VOID ApSendFrame( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuffer, +- IN ULONG Length, +- IN UCHAR TxRate, +- IN UCHAR PID); +- +-VOID ApEnqueueAckFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR TxRate, +- IN UCHAR apidx); +- +-// ap_sanity.c +- +- +-BOOLEAN PeerAssocReqCmmSanity( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN isRessoc, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pListenInterval, +- OUT PUCHAR pApAddr, +- OUT UCHAR *pSsidLen, +- OUT char *Ssid, +- OUT UCHAR *pRatesLen, +- OUT UCHAR Rates[], +- OUT UCHAR *RSN, +- OUT UCHAR *pRSNLen, +- OUT BOOLEAN *pbWmmCapable, +- OUT ULONG *pRalinkIe, +-#ifdef DOT11N_DRAFT3 +- OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo, +-#endif // DOT11N_DRAFT3 // +- OUT UCHAR *pHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability); +- +- +-BOOLEAN PeerDisassocReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN PeerDeauthReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN APPeerAuthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr1, +- OUT PUCHAR pAddr2, +- OUT USHORT *Alg, +- OUT USHORT *Seq, +- OUT USHORT *Status, +- OUT CHAR *ChlgText +- ); +- +-BOOLEAN APPeerProbeReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], +- OUT UCHAR *SsidLen); +- +-BOOLEAN APPeerBeaconAndProbeRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR *SsidLen, +- OUT UCHAR *BssType, +- OUT USHORT *BeaconPeriod, +- OUT UCHAR *Channel, +- OUT LARGE_INTEGER *Timestamp, +- OUT USHORT *CapabilityInfo, +- OUT UCHAR Rate[], +- OUT UCHAR *RateLen, +- OUT BOOLEAN *ExtendedRateIeExist, +- OUT UCHAR *Erp); +-#if defined(RT30xx) || defined(RT305x) +-VOID EnableAPMIMOPS( +- IN PRTMP_ADAPTER pAd); +- +-VOID DisableAPMIMOPS( +- IN PRTMP_ADAPTER pAd); +-#endif +-#endif // __AP_H__ +diff --git a/drivers/staging/rt3090/ap_apcli.h b/drivers/staging/rt3090/ap_apcli.h +deleted file mode 100644 +index d363c36..0000000 +--- a/drivers/staging/rt3090/ap_apcli.h ++++ /dev/null +@@ -1,276 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_apcli.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Shiang, Fonchi 02-13-2007 created +-*/ +- +-#ifndef _AP_APCLI_H_ +-#define _AP_APCLI_H_ +- +-#ifdef APCLI_SUPPORT +- +-#include "rtmp.h" +- +-#define AUTH_TIMEOUT 300 // unit: msec +-#define ASSOC_TIMEOUT 300 // unit: msec +-//#define JOIN_TIMEOUT 2000 // unit: msec // not used in Ap-client mode, remove it +-#define PROBE_TIMEOUT 1000 // unit: msec +- +-#define APCLI_ROOT_BSSID_GET(pAd, wcid) ((pAd)->MacTab.Content[(wcid)].Addr) +-#define APCLI_IF_UP_CHECK(pAd, ifidx) ((pAd)->ApCfg.ApCliTab[(ifidx)].dev->flags & IFF_UP) +- +-/* sanity check for apidx */ +-#define APCLI_MR_APIDX_SANITY_CHECK(idx) \ +-{ \ +- if ((idx) >= MAX_APCLI_NUM) \ +- { \ +- (idx) = 0; \ +- DBGPRINT(RT_DEBUG_ERROR, ("%s> Error! apcli-idx > MAX_APCLI_NUM!\n", __FUNCTION__)); \ +- } \ +-} +- +-typedef struct _APCLI_MLME_JOIN_REQ_STRUCT { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR SsidLen; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +-} APCLI_MLME_JOIN_REQ_STRUCT; +- +-typedef struct _STA_CTRL_JOIN_REQ_STRUCT { +- USHORT Status; +-} APCLI_CTRL_MSG_STRUCT, *PSTA_CTRL_MSG_STRUCT; +- +-BOOLEAN isValidApCliIf( +- SHORT ifIndex); +- +-// +-// Private routines in apcli_ctrl.c +-// +-VOID ApCliCtrlStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *Sm, +- OUT STATE_MACHINE_FUNC_EX Trans[]); +- +-// +-// Private routines in apcli_sync.c +-// +-VOID ApCliSyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *Sm, +- OUT STATE_MACHINE_FUNC_EX Trans[]); +- +-// +-// Private routines in apcli_auth.c +-// +-VOID ApCliAuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *Sm, +- OUT STATE_MACHINE_FUNC_EX Trans[]); +- +-// +-// Private routines in apcli_assoc.c +-// +-VOID ApCliAssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *Sm, +- OUT STATE_MACHINE_FUNC_EX Trans[]); +- +-MAC_TABLE_ENTRY *ApCliTableLookUpByWcid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR wcid, +- IN PUCHAR pAddrs); +- +- +-BOOLEAN ApCliAllowToSendPacket( +- IN RTMP_ADAPTER *pAd, +- IN PNDIS_PACKET pPacket, +- OUT UCHAR *pWcid); +- +-BOOLEAN ApCliValidateRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PEID_STRUCT pEid_ptr, +- IN USHORT eid_len, +- IN USHORT idx); +- +-VOID RT28xx_ApCli_Init( +- IN PRTMP_ADAPTER pAd, +- IN PNET_DEV pPhyNetDev); +- +-VOID RT28xx_ApCli_Close( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xx_ApCli_Remove( +- IN PRTMP_ADAPTER pAd); +- +- +-VOID RT28xx_ApCli_Remove( +- IN PRTMP_ADAPTER ad_p); +- +-INT ApCliIfLookUp( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-INT ApCli_VirtualIF_Open( +- IN PNET_DEV dev_p); +- +-INT ApCli_VirtualIF_Close( +- IN PNET_DEV dev_p); +- +-INT ApCli_VirtualIF_PacketSend( +- IN PNDIS_PACKET skb_p, +- IN PNET_DEV dev_p); +- +-INT ApCli_VirtualIF_Ioctl( +- IN PNET_DEV dev_p, +- IN OUT struct ifreq *rq_p, +- IN INT cmd); +- +- +-VOID ApCliMgtMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid, +- IN USHORT ifIndex); +- +-#ifdef DOT11_N_SUPPORT +-BOOLEAN ApCliCheckHt( +- IN PRTMP_ADAPTER pAd, +- IN USHORT IfIndex, +- IN OUT HT_CAPABILITY_IE *pHtCapability, +- IN OUT ADD_HT_INFO_IE *pAddHtInfo); +-#endif // DOT11_N_SUPPORT // +- +-BOOLEAN ApCliLinkUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ifIndex); +- +-VOID ApCliLinkDown( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ifIndex); +- +-VOID ApCliIfUp( +- IN PRTMP_ADAPTER pAd); +- +-VOID ApCliIfDown( +- IN PRTMP_ADAPTER pAd); +- +-VOID ApCliIfMonitor( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN ApCliMsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType); +- +-BOOLEAN preCheckMsgTypeSubset( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType); +- +-BOOLEAN ApCliPeerAssocRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT USHORT *pAid, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pAddHtInfoLen, +- OUT UCHAR *pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, +- OUT UCHAR *pCkipFlag); +- +-VOID ApCliPeerPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ApCliPeerPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ApCliPeerGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-BOOLEAN ApCliCheckRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- IN MAC_TABLE_ENTRY *pEntry, +- OUT UCHAR *Offset); +- +-BOOLEAN ApCliParseKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR IfIdx, +- IN UCHAR bPairewise); +- +-BOOLEAN ApCliHandleRxBroadcastFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR FromWhichBSSID); +- +-VOID APCliUpdatePairwiseKeyTable( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *KeyRsc, +- IN MAC_TABLE_ENTRY *pEntry); +- +-BOOLEAN APCliUpdateSharedKeyTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyLen, +- IN UCHAR DefaultKeyIdx, +- IN MAC_TABLE_ENTRY *pEntry); +- +-#endif // APCLI_SUPPORT // +- +-#endif /* _AP_APCLI_H_ */ +diff --git a/drivers/staging/rt3090/ap_autoChSel.h b/drivers/staging/rt3090/ap_autoChSel.h +deleted file mode 100644 +index 46881ff..0000000 +--- a/drivers/staging/rt3090/ap_autoChSel.h ++++ /dev/null +@@ -1,79 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_autoChSel.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "ap_autoChSel_cmm.h" +- +-#ifndef __AUTOCHSELECT_H__ +-#define __AUTOCHSELECT_H__ +- +-#ifdef AUTO_CH_SELECT_ENHANCE +-#define AP_AUTO_CH_SEL(__P, __O) New_APAutoSelectChannel((__P), (__O)) +-#else +-#define AP_AUTO_CH_SEL(__P, __O) APAutoSelectChannel((__P), (__O)) +-#endif +- +- +-ULONG AutoChBssInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR ChannelNo, +- IN UCHAR ExtChOffset, +- IN CHAR Rssi); +- +-void AutoChBssTableInit( +- IN PRTMP_ADAPTER pAd); +- +-void ChannelInfoInit( +- IN PRTMP_ADAPTER pAd); +- +-void AutoChBssTableDestroy( +- IN PRTMP_ADAPTER pAd); +- +-void ChannelInfoDestroy( +- IN PRTMP_ADAPTER pAd); +- +-UCHAR New_APAutoSelectChannel( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN Optimal); +- +-UCHAR APAutoSelectChannel( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN Optimal); +- +-#endif // __AUTOCHSELECT_H__ // +diff --git a/drivers/staging/rt3090/ap_autoChSel_cmm.h b/drivers/staging/rt3090/ap_autoChSel_cmm.h +deleted file mode 100644 +index ad77ec1..0000000 +--- a/drivers/staging/rt3090/ap_autoChSel_cmm.h ++++ /dev/null +@@ -1,66 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_autoChSel_cmm.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +- +-#ifndef __AUTOCHSELECT_CMM_H__ +-#define __AUTOCHSELECT_CMM_H__ +- +-#define RSSI_TO_DBM_OFFSET 120 // RSSI-115 = dBm +- +- +-typedef struct { +- ULONG dirtyness[MAX_NUM_OF_CHANNELS+1]; +- ULONG max_rssi[MAX_NUM_OF_CHANNELS+1]; +- ULONG total_rssi[MAX_NUM_OF_CHANNELS+1]; +- UINT32 FalseCCA[MAX_NUM_OF_CHANNELS+1]; +-} CHANNELINFO, *PCHANNELINFO; +- +-typedef struct { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR Channel; +- UCHAR ExtChOffset; +- UCHAR Rssi; +-} BSSENTRY, *PBSSENTRY; +- +-typedef struct { +- UCHAR BssNr; +- BSSENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; +-} BSSINFO, *PBSSINFO; +- +-#endif // __AUTOCHSELECT_CMM_H__ // +diff --git a/drivers/staging/rt3090/ap_cfg.h b/drivers/staging/rt3090/ap_cfg.h +deleted file mode 100644 +index 7c99423..0000000 +--- a/drivers/staging/rt3090/ap_cfg.h ++++ /dev/null +@@ -1,118 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_cfg.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +-#ifndef __AP_CFG_H__ +-#define __AP_CFG_H__ +- +- +-#include "rt_config.h" +- +-INT RTMPAPPrivIoctlSet( +- IN RTMP_ADAPTER *pAd, +- IN struct iwreq *pIoctlCmdStr); +- +-INT RTMPAPPrivIoctlShow( +- IN RTMP_ADAPTER *pAd, +- IN struct iwreq *pIoctlCmdStr); +- +-INT RTMPAPSetInformation( +- IN PRTMP_ADAPTER pAd, +- IN OUT struct iwreq *rq, +- IN INT cmd); +- +-INT RTMPAPQueryInformation( +- IN PRTMP_ADAPTER pAd, +- IN OUT struct iwreq *rq, +- IN INT cmd); +- +-VOID RTMPIoctlStatistics( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlGetMacTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-#ifdef DBG +-VOID RTMPAPIoctlBBP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-VOID RTMPAPIoctlMAC( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-VOID RTMPAPIoctlE2PROM( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-#ifdef RTMP_RF_RW_SUPPORT +-VOID RTMPAPIoctlRF( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +-#endif // RTMP_RF_RW_SUPPORT // +- +-#endif // DBG // +- +-VOID RT28XX_IOCTL_MaxRateGet( +- IN RTMP_ADAPTER *pAd, +- IN PHTTRANSMIT_SETTING pHtPhyMode, +- OUT UINT32 *pRate); +- +- +-#ifdef DOT11_N_SUPPORT +-VOID RTMPIoctlQueryBaTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +-#endif // DOT11_N_SUPPORT // +- +-VOID RTMPIoctlStaticWepCopy( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlRadiusData( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlAddWPAKey( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlAddPMKIDCache( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-#endif // __AP_CFG_H__ // +diff --git a/drivers/staging/rt3090/ap_ids.h b/drivers/staging/rt3090/ap_ids.h +deleted file mode 100644 +index cf8797f..0000000 +--- a/drivers/staging/rt3090/ap_ids.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_ids.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-VOID RTMPIdsPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-BOOLEAN RTMPSpoofedMgmtDetection( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2); +- +-VOID RTMPConflictSsidDetection( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2); +- +-BOOLEAN RTMPReplayAttackDetection( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2); +- +-VOID RTMPUpdateStaMgmtCounter( +- IN PRTMP_ADAPTER pAd, +- IN USHORT type); +- +-VOID RTMPClearAllIdsCounter( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPIdsStart( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPIdsStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID rtmp_read_ids_from_file( +- IN PRTMP_ADAPTER pAd, +- char *tmpbuf, +- char *buffer); +diff --git a/drivers/staging/rt3090/ap_mbss.h b/drivers/staging/rt3090/ap_mbss.h +deleted file mode 100644 +index f78556c..0000000 +--- a/drivers/staging/rt3090/ap_mbss.h ++++ /dev/null +@@ -1,72 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_mbss.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef MODULE_MBSS +- +-#define MBSS_EXTERN extern +- +-#else +- +-#define MBSS_EXTERN +- +-#endif // MODULE_MBSS // +- +- +-/* Public function list */ +-MBSS_EXTERN VOID RT28xx_MBSS_Init( +- IN PRTMP_ADAPTER ad_p, +- IN PNET_DEV main_dev_p); +- +-MBSS_EXTERN VOID RT28xx_MBSS_Close( +- IN PRTMP_ADAPTER ad_p); +- +-MBSS_EXTERN VOID RT28xx_MBSS_Remove( +- IN PRTMP_ADAPTER ad_p); +- +-INT MBSS_VirtualIF_Open( +- IN PNET_DEV dev_p); +-INT MBSS_VirtualIF_Close( +- IN PNET_DEV dev_p); +-INT MBSS_VirtualIF_PacketSend( +- IN PNDIS_PACKET skb_p, +- IN PNET_DEV dev_p); +-INT MBSS_VirtualIF_Ioctl( +- IN PNET_DEV dev_p, +- IN OUT struct ifreq *rq_p, +- IN INT cmd); +- +-/* End of ap_mbss.h */ +diff --git a/drivers/staging/rt3090/ap_uapsd.h b/drivers/staging/rt3090/ap_uapsd.h +deleted file mode 100644 +index d49a9e7..0000000 +--- a/drivers/staging/rt3090/ap_uapsd.h ++++ /dev/null +@@ -1,636 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_uapsd.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-/* only for UAPSD_TIMING_RECORD */ +- +-//#define UAPSD_TIMING_RECORD_FUNC +- +-#define UAPSD_TIMING_RECORD_MAX 1000 +-#define UAPSD_TIMING_RECORD_DISPLAY_TIMES 10 +- +-#define UAPSD_TIMING_RECORD_ISR 1 +-#define UAPSD_TIMING_RECORD_TASKLET 2 +-#define UAPSD_TIMING_RECORD_TRG_RCV 3 +-#define UAPSD_TIMING_RECORD_MOVE2TX 4 +-#define UAPSD_TIMING_RECORD_TX2AIR 5 +- +-#define UAPSD_TIMING_CTRL_STOP 0 +-#define UAPSD_TIMING_CTRL_START 1 +-#define UAPSD_TIMING_CTRL_SUSPEND 2 +- +-#define UAPSD_TIMESTAMP_GET(__pAd, __TimeStamp) \ +- { \ +- UINT32 __CSR=0; UINT64 __Value64; \ +- RTMP_IO_READ32((__pAd), TSF_TIMER_DW0, &__CSR); \ +- __TimeStamp = (UINT64)__CSR; \ +- RTMP_IO_READ32((__pAd), TSF_TIMER_DW1, &__CSR); \ +- __Value64 = (UINT64)__CSR; \ +- __TimeStamp |= (__Value64 << 32); \ +- } +- +-#ifdef LINUX +-#define UAPSD_TIME_GET(__pAd, __Time) \ +- __Time = jiffies +-#endif // LINUX // +- +- +-#ifdef UAPSD_TIMING_RECORD_FUNC +-#define UAPSD_TIMING_RECORD_START() \ +- UAPSD_TimingRecordCtrl(UAPSD_TIMING_CTRL_START); +-#define UAPSD_TIMING_RECORD_STOP() \ +- UAPSD_TimingRecordCtrl(UAPSD_TIMING_CTRL_STOP); +-#define UAPSD_TIMING_RECORD(__pAd, __Type) \ +- UAPSD_TimingRecord(__pAd, __Type); +-#define UAPSD_TIMING_RECORD_INDEX(__LoopIndex) \ +- UAPSD_TimeingRecordLoopIndex(__LoopIndex); +-#else +- +-#define UAPSD_TIMING_RECORD_START() +-#define UAPSD_TIMING_RECORD_STOP() +-#define UAPSD_TIMING_RECORD(__pAd, __type) +-#define UAPSD_TIMING_RECORD_INDEX(__LoopIndex) +-#endif // UAPSD_TIMING_RECORD_FUNC // +- +- +-#ifndef MODULE_WMM_UAPSD +- +-#define UAPSD_EXTERN extern +- +-/* Public Marco list */ +- +-/* +- Init some parameters in packet structure for QoS Null frame; +- purpose: is for management frame tx done use +-*/ +-#define UAPSD_MR_QOS_NULL_HANDLE(__pAd, __pData, __pPacket) \ +- { \ +- PHEADER_802_11 __pHeader = (PHEADER_802_11)(__pData); \ +- MAC_TABLE_ENTRY *__pEntry; \ +- if (__pHeader->FC.SubType == SUBTYPE_QOS_NULL) \ +- { \ +- RTMP_SET_PACKET_QOS_NULL((__pPacket)); \ +- __pEntry = MacTableLookup((__pAd), __pHeader->Addr1); \ +- if (__pEntry != NULL) \ +- { \ +- RTMP_SET_PACKET_WCID((__pPacket), __pEntry->Aid); \ +- } \ +- } \ +- else \ +- { \ +- RTMP_SET_PACKET_NON_QOS_NULL((__pPacket)); \ +- } \ +- } +- +-/* +- Init MAC entry UAPSD parameters; +- purpose: initialize UAPSD PS queue and control parameters +-*/ +-#define UAPSD_MR_ENTRY_INIT(__pEntry) \ +- { \ +- UINT16 __IdAc; \ +- for(__IdAc=0; __IdAcUAPSDQueue[__IdAc]); \ +- (__pEntry)->UAPSDTxNum = 0; \ +- (__pEntry)->pUAPSDEOSPFrame = NULL; \ +- (__pEntry)->bAPSDFlagSPStart = 0; \ +- (__pEntry)->bAPSDFlagEOSPOK = 0; \ +- (__pEntry)->MaxSPLength = 0; \ +- } +- +-/* +- Reset MAC entry UAPSD parameters; +- purpose: clean all UAPSD PS queue; release the EOSP frame if exists; +- reset control parameters +-*/ +-#define UAPSD_MR_ENTRY_RESET(__pAd, __pEntry) \ +- { \ +- MAC_TABLE_ENTRY *__pSta; \ +- UINT32 __IdAc; \ +- __pSta = (__pEntry); \ +- /* clear all U-APSD queues */ \ +- for(__IdAc=0; __IdAcUAPSDQueue[__IdAc]); \ +- /* clear EOSP frame */ \ +- __pSta->UAPSDTxNum = 0; \ +- if (__pSta->pUAPSDEOSPFrame != NULL) { \ +- RELEASE_NDIS_PACKET((__pAd), \ +- QUEUE_ENTRY_TO_PACKET(__pSta->pUAPSDEOSPFrame), \ +- NDIS_STATUS_FAILURE); \ +- __pSta->pUAPSDEOSPFrame = NULL; } \ +- __pSta->bAPSDFlagSPStart = 0; \ +- __pSta->bAPSDFlagEOSPOK = 0; } +- +-/* +- Enable or disable UAPSD flag in WMM element in beacon frame; +- purpose: set UAPSD enable/disable bit +-*/ +-#define UAPSD_MR_IE_FILL(__QosCtrlField, __pAd) \ +- (__QosCtrlField) |= ((__pAd)->CommonCfg.bAPSDCapable) ? 0x80 : 0x00; +- +-/* +- Check if we do NOT need to control TIM bit for the station; +- note: we control TIM bit only when all AC are UAPSD AC +-*/ +-#define UAPSD_MR_IS_NOT_TIM_BIT_NEEDED_HANDLED(__pMacEntry, __QueIdx) \ +- (CLIENT_STATUS_TEST_FLAG((__pMacEntry), fCLIENT_STATUS_APSD_CAPABLE) && \ +- (!(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_VO] || \ +- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_VI] || \ +- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_BE] || \ +- !(__pMacEntry)->bAPSDDeliverEnabledPerAC[QID_AC_BK]) && \ +- (__pMacEntry)->bAPSDDeliverEnabledPerAC[__QueIdx]) +- +-/* check if the AC is UAPSD delivery-enabled AC */ +-#define UAPSD_MR_IS_UAPSD_AC(__pMacEntry, __AcId) \ +- (CLIENT_STATUS_TEST_FLAG((__pMacEntry), fCLIENT_STATUS_APSD_CAPABLE) && \ +- ((0 <= (__AcId)) && ((__AcId) < WMM_NUM_OF_AC)) && /* 0 ~ 3 */ \ +- (__pMacEntry)->bAPSDDeliverEnabledPerAC[(__AcId)]) +- +-/* check if all AC are UAPSD delivery-enabled AC */ +-#define UAPSD_MR_IS_ALL_AC_UAPSD(__FlgIsActive, __pMacEntry) \ +- (((__FlgIsActive) == FALSE) && ((__pMacEntry)->bAPSDAllAC == 1)) +- +-/* suspend SP */ +-#define UAPSD_MR_SP_SUSPEND(__pAd) \ +- (__pAd)->bAPSDFlagSPSuspend = 1; +- +-/* resume SP */ +-#define UAPSD_MR_SP_RESUME(__pAd) \ +- (__pAd)->bAPSDFlagSPSuspend = 0; +- +-/* mark PS poll frame sent in mix mode */ +-#ifdef RTMP_MAC_PCI +-/* +- Note: +- (1) When SP is not started, try to mark a flag to record if the legacy ps +- packet is handled in statistics handler; +- (2) When SP is started, increase the UAPSD count number for the legacy PS. +-*/ +-#define UAPSD_MR_MIX_PS_POLL_RCV(__pAd, __pMacEntry) \ +- if ((__pMacEntry)->bAPSDFlagSpRoughUse == 0) \ +- { \ +- if ((__pMacEntry)->bAPSDFlagSPStart == 0) \ +- { \ +- if ((__pMacEntry)->bAPSDFlagLegacySent == 1) \ +- NICUpdateFifoStaCounters((__pAd)); \ +- (__pMacEntry)->bAPSDFlagLegacySent = 1; \ +- } \ +- else \ +- { \ +- (__pMacEntry)->UAPSDTxNum ++; \ +- } \ +- } +-#endif // RTMP_MAC_PCI // +- +- +-#else +- +-#define UAPSD_EXTERN +-#define UAPSD_QOS_NULL_QUE_ID 0x7f +- +-#ifdef RTMP_MAC_PCI +-/* +- In RT2870, FIFO counter is for all stations, not for per-entry, +- so we can not use accurate method in RT2870 +-*/ +- +-/* +- Note for SP ACCURATE Mechanism: +- 1. When traffic is busy for the PS station +- Statistics FIFO counter maybe overflow before we read it, so UAPSD +- counting mechanism will not accurately. +- +- Solution: +- We need to avoid the worse case so we suggest a maximum interval for +- a SP that the interval between last frame from QAP and data frame from +- QSTA is larger than UAPSD_EPT_SP_INT. +- +- 2. When traffic use CCK/1Mbps from QAP +- Statistics FIFO will not count the packet. There are 2 cases: +- (1) We force to downgrage ARP response & DHCP packet to 1Mbps; +- (2) After rate switch mechanism, tx rate is fixed to 1Mbps. +- +- Solution: +- Use old DMA UAPSD mechanism. +- +- 3. When part of AC uses legacy PS mode +- Statistics count will inclue packet statistics for legacy PS packets +- so we can not know which one is UAPSD, which one is legacy. +- +- Solution: +- Cound the legacy PS packet. +- +- 4. Check FIFO statistics count in Rx Done function +- We can not to check TX FIFO statistics count in Rx Done function or +- the real packet tx/rx sequence will be disarranged. +- +- Solution: +- Suspend SP handle before rx done and resume SP handle after rx done. +-*/ +-#define UAPSD_SP_ACCURATE /* use more accurate method to send EOSP */ +-#endif // RTMP_MAC_PCI // +- +-#define UAPSD_EPT_SP_INT (100000/(1000000/OS_HZ)) /* 100ms */ +- +-#endif // MODULE_WMM_UAPSD // +- +- +-/* max UAPSD buffer queue size */ +-#define MAX_PACKETS_IN_UAPSD_QUEUE 16 /* for each AC = 16*4 = 64 */ +- +- +-/* Public function list */ +-/* +-======================================================================== +-Routine Description: +- UAPSD Module Init. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_Init( +- IN PRTMP_ADAPTER pAd); +- +- +-/* +-======================================================================== +-Routine Description: +- UAPSD Module Release. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_Release( +- IN PRTMP_ADAPTER pAd); +- +- +-/* +-======================================================================== +-Routine Description: +- Free all EOSP frames and close all SP. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_FreeAll( +- IN PRTMP_ADAPTER pAd); +- +- +-/* +-======================================================================== +-Routine Description: +- Close current Service Period. +- +-Arguments: +- pAd Pointer to our adapter +- pEntry Close the SP of the entry +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_SP_Close( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +- +-/* +-======================================================================== +-Routine Description: +- Deliver all queued packets. +- +-Arguments: +- pAd Pointer to our adapter +- *pEntry STATION +- +-Return Value: +- None +- +-Note: +- SMP protection by caller for packet enqueue. +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_AllPacketDeliver( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +- +-/* +-======================================================================== +-Routine Description: +- Parse the UAPSD field in WMM element in (re)association request frame. +- +-Arguments: +- pAd Pointer to our adapter +- *pEntry STATION +- *pElm QoS information field +- +-Return Value: +- None +- +-Note: +- No protection is needed. +- +- 1. Association -> TSPEC: +- use static UAPSD settings in Association +- update UAPSD settings in TSPEC +- +- 2. Association -> TSPEC(11r) -> Reassociation: +- update UAPSD settings in TSPEC +- backup static UAPSD settings in Reassociation +- +- 3. Association -> Reassociation: +- update UAPSD settings in TSPEC +- backup static UAPSD settings in Reassociation +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_AssocParse( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR *pElm); +- +- +-/* +-======================================================================== +-Routine Description: +- Enqueue a UAPSD packet. +- +-Arguments: +- pAd Pointer to our adapter +- *pEntry STATION +- pPacket UAPSD dnlink packet +- IdAc UAPSD AC ID (0 ~ 3) +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_PacketEnqueue( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN PNDIS_PACKET pPacket, +- IN UINT32 IdAc); +- +- +-/* +-======================================================================== +-Routine Description: +- Handle QoS Null Frame Tx Done or Management Tx Done interrupt. +- +-Arguments: +- pAd Pointer to our adapter +- pPacket Completed TX packet +- pDstMac Destinated MAC address +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_QoSNullTxMgmtTxDoneHandle( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR *pDstMac); +- +- +-/* +-======================================================================== +-Routine Description: +- Maintenance our UAPSD PS queue. Release all queued packet if timeout. +- +-Arguments: +- pAd Pointer to our adapter +- *pEntry STATION +- +-Return Value: +- None +- +-Note: +- If in RT2870, pEntry can not be removed during UAPSD_QueueMaintenance() +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_QueueMaintenance( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +- +-/* +-======================================================================== +-Routine Description: +- Close SP in Tx Done, not Tx DMA Done. +- +-Arguments: +- pAd Pointer to our adapter +- pEntry destination entry +- FlgSuccess 0:tx success, 1:tx fail +- +-Return Value: +- None +- +-Note: +- For RT28xx series, for packetID=0 or multicast frame, no statistics +- count can be got, ex: ARP response or DHCP packets, we will use +- low rate to set (CCK, MCS=0=packetID). +- So SP will not be close until UAPSD_EPT_SP_INT timeout. +- +- So if the tx rate is 1Mbps for a entry, we will use DMA done, not +- use UAPSD_SP_AUE_Handle(). +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_SP_AUE_Handle( +- IN RTMP_ADAPTER *pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR FlgSuccess); +- +- +-/* +-======================================================================== +-Routine Description: +- Close current Service Period. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- None +- +-Note: +- When we receive EOSP frame tx done interrupt and a uplink packet +- from the station simultaneously, we will regard it as a new trigger +- frame because the packet is received when EOSP frame tx done interrupt. +- +- We can not sure the uplink packet is sent after old SP or in the old SP. +- So we must close the old SP in receive done ISR to avoid the problem. +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_SP_CloseInRVDone( +- IN PRTMP_ADAPTER pAd); +- +- +-/* +-======================================================================== +-Routine Description: +- Check if we need to close current SP. +- +-Arguments: +- pAd Pointer to our adapter +- pPacket Completed TX packet +- pDstMac Destinated MAC address +- +-Return Value: +- None +- +-Note: +- 1. We need to call the function in TxDone ISR. +- 2. SMP protection by caller for packet enqueue. +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_SP_PacketCheck( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR *pDstMac); +- +- +-#ifdef UAPSD_TIMING_RECORD_FUNC +-/* +-======================================================================== +-Routine Description: +- Enable/Disable Timing Record Function. +- +-Arguments: +- pAd Pointer to our adapter +- Flag 1 (Enable) or 0 (Disable) +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_TimingRecordCtrl( +- IN UINT32 Flag); +- +-/* +-======================================================================== +-Routine Description: +- Record some timings. +- +-Arguments: +- pAd Pointer to our adapter +- Type The timing is for what type +- +-Return Value: +- None +- +-Note: +- UAPSD_TIMING_RECORD_ISR +- UAPSD_TIMING_RECORD_TASKLET +- UAPSD_TIMING_RECORD_TRG_RCV +- UAPSD_TIMING_RECORD_MOVE2TX +- UAPSD_TIMING_RECORD_TX2AIR +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_TimingRecord( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 Type); +- +-/* +-======================================================================== +-Routine Description: +- Record the loop index for received packet handle. +- +-Arguments: +- pAd Pointer to our adapter +- LoopIndex The RxProcessed in APRxDoneInterruptHandle() +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_TimeingRecordLoopIndex( +- IN UINT32 LoopIndex); +-#endif // UAPSD_TIMING_RECORD_FUNC // +- +- +-/* +-======================================================================== +-Routine Description: +- Handle UAPSD Trigger Frame. +- +-Arguments: +- pAd Pointer to our adapter +- *pEntry the source STATION +- UpOfFrame the UP of the trigger frame +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-UAPSD_EXTERN VOID UAPSD_TriggerFrameHandle( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR UpOfFrame); +- +- +- +-/* End of ap_uapsd.h */ +diff --git a/drivers/staging/rt3090/ap_wds.h b/drivers/staging/rt3090/ap_wds.h +deleted file mode 100644 +index efcb107..0000000 +--- a/drivers/staging/rt3090/ap_wds.h ++++ /dev/null +@@ -1,212 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_cfg.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi 02-13-2007 created +-*/ +- +-#ifndef _AP_WDS_H_ +-#define _AP_WDS_H_ +- +-#define WDS_ENTRY_RETRY_INTERVAL (100 * OS_HZ / 1000) +- +- +-static inline BOOLEAN WDS_IF_UP_CHECK( +- IN PRTMP_ADAPTER pAd, +- IN ULONG ifidx) +-{ +- if ((pAd->flg_wds_init != TRUE) || +- (ifidx >= MAX_WDS_ENTRY)) +- return FALSE; +- +-// if (pAd->WdsTab.WdsEntry[ifidx].dev->flags & IFF_UP) +-// Patch for wds ,when dirver call apmlmeperiod => APMlmeDynamicTxRateSwitching check if wds device ready +-if ((pAd->WdsTab.WdsEntry[ifidx].dev != NULL) && (pAd->WdsTab.WdsEntry[ifidx].dev->flags & IFF_UP)) +- return TRUE; +- +- return FALSE; +-} +- +-LONG WdsEntryAlloc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-VOID WdsEntryDel( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-MAC_TABLE_ENTRY *MacTableInsertWDSEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- UINT WdsTabIdx); +- +-BOOLEAN MacTableDeleteWDSEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr); +- +- +-BOOLEAN ApWdsAllowToSendPacket( +- IN RTMP_ADAPTER *pAd, +- IN PNDIS_PACKET pPacket, +- OUT UCHAR *pWcid); +- +-MAC_TABLE_ENTRY *WdsTableLookupByWcid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR wcid, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount); +- +-MAC_TABLE_ENTRY *WdsTableLookup( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount); +- +-MAC_TABLE_ENTRY *FindWdsEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN PUCHAR pAddr, +- IN UINT32 PhyMode); +- +-VOID WdsTableMaintenance( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xx_WDS_Init( +- IN PRTMP_ADAPTER pAd, +- IN PNET_DEV net_dev); +- +-VOID RT28xx_WDS_Close( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xx_WDS_Remove( +- IN PRTMP_ADAPTER pAd); +- +-VOID WdsDown( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateWdsRxWCIDTable( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateWdsEncryption( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR wcid); +- +-VOID WdsPeerBeaconProc( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN USHORT CapabilityInfo, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN UCHAR MaxSupportedRateLen, +- IN BOOLEAN bWmmCapable, +- IN ULONG ClientRalinkIe, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen); +- +-VOID APWdsInitialize( +- IN PRTMP_ADAPTER pAd); +- +-INT Show_WdsTable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-VOID rtmp_read_wds_from_file( +- IN PRTMP_ADAPTER pAd, +- PSTRING tmpbuf, +- PSTRING buffer); +- +-VOID WdsPrepareWepKeyFromMainBss( +- IN PRTMP_ADAPTER pAd); +- +-INT WdsVirtualIFSendPackets( +- IN PNDIS_PACKET pSkb, +- IN PNET_DEV dev); +- +-INT WdsVirtualIF_open( +- IN PNET_DEV dev); +- +-INT WdsVirtualIF_close( +- IN PNET_DEV dev); +- +-INT WdsVirtualIF_ioctl( +- IN PNET_DEV net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd); +- +-/* +- ========================================================================== +- Description: +- Check the WDS Entry is valid or not. +- ========================================================================== +- */ +-static inline BOOLEAN ValidWdsEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR WdsIndex) +-{ +- BOOLEAN result; +- PMAC_TABLE_ENTRY pMacEntry; +- +- do +- { +- if (WdsIndex >= MAX_WDS_ENTRY) +- { +- result = FALSE; +- break; +- } +- +- if (pAd->WdsTab.WdsEntry[WdsIndex].Valid != TRUE) +- { +- result = FALSE; +- break; +- } +- +- if ((pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID==0) +- || (pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID >= MAX_LEN_OF_MAC_TABLE)) +- { +- result = FALSE; +- break; +- } +- +- pMacEntry = &pAd->MacTab.Content[pAd->WdsTab.WdsEntry[WdsIndex].MacTabMatchWCID]; +- if (pMacEntry->ValidAsWDS != TRUE) +- { +- result = FALSE; +- break; +- } +- +- result = TRUE; +- } while(FALSE); +- +- return result; +-} +-#endif // _AP_WDS_H_ // +diff --git a/drivers/staging/rt3090/chips/rt3090.c b/drivers/staging/rt3090/chips/rt3090.c +deleted file mode 100644 +index 35c549d..0000000 +--- a/drivers/staging/rt3090/chips/rt3090.c ++++ /dev/null +@@ -1,123 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3090.c +- +- Abstract: +- Specific funcitons and variables for RT3070 +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifdef RT3090 +- +-#include "../rt_config.h" +- +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // +- +- +-VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value +- if (IS_RT3090(pAd)) +- { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers +- UINT32 RfReg = 0, data; +- +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); +- RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- RTMPusecDelay(1000); +- RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- +- // init R24, R31 +- RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); +- RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); +- +- // RT309x version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { +- // patch tx EVM issue temporarily +- RTMP_IO_READ32(pAd, LDO_CFG0, &data); +- data = ((data & 0xE0FFFFFF) | 0x0D000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +- } +- else +- { +- RTMP_IO_READ32(pAd, LDO_CFG0, &data); +- data = ((data & 0xE0FFFFFF) | 0x01000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +- } +- +- // patch LNA_PE_G1 failed issue +- RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); +- +- // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS; i++) +- { +- RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); +- } +- +- // Driver should set RF R6 bit6 on before calibration +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); +- RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); +- +- //For RF filter Calibration +- RTMPFilterCalibration(pAd); +- +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RT30xxWriteRFRegister(pAd, RF_R27, 0x3); +- +- // set led open drain enable +- RTMP_IO_READ32(pAd, OPT_14, &data); +- data |= 0x01; +- RTMP_IO_WRITE32(pAd, OPT_14, data); +- +- // set default antenna as main +- if (pAd->RfIcType == RFIC_3020) +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- RT30xxLoadRFNormalModeSetup(pAd); +- } +- +-} +- +-#endif // RT3090 // +diff --git a/drivers/staging/rt3090/chips/rt30xx.c b/drivers/staging/rt3090/chips/rt30xx.c +deleted file mode 100644 +index 9c8ae00..0000000 +--- a/drivers/staging/rt3090/chips/rt30xx.c ++++ /dev/null +@@ -1,525 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt30xx.c +- +- Abstract: +- Specific funcitons and variables for RT30xx. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +- +-#ifdef RT30xx +- +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // +- +-#include "../rt_config.h" +- +- +-// +-// RF register initialization set +-// +-REG_PAIR RT30xx_RFRegTable[] = { +- {RF_R04, 0x40}, +- {RF_R05, 0x03}, +- {RF_R06, 0x02}, +- {RF_R07, 0x70}, +- {RF_R09, 0x0F}, +- {RF_R10, 0x41}, +- {RF_R11, 0x21}, +- {RF_R12, 0x7B}, +- {RF_R14, 0x90}, +- {RF_R15, 0x58}, +- {RF_R16, 0xB3}, +- {RF_R17, 0x92}, +- {RF_R18, 0x2C}, +- {RF_R19, 0x02}, +- {RF_R20, 0xBA}, +- {RF_R21, 0xDB}, +- {RF_R24, 0x16}, +- {RF_R25, 0x01}, +- {RF_R29, 0x1F}, +-}; +- +-UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); +- +- +- +-// Antenna divesity use GPIO3 and EESK pin for control +-// Antenna and EEPROM access are both using EESK pin, +-// Therefor we should avoid accessing EESK at the same time +-// Then restore antenna after EEPROM access +-// The original name of this function is AsicSetRxAnt(), now change to +-//VOID AsicSetRxAnt( +-VOID RT30xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) +-{ +- UINT32 Value; +- UINT32 x; +- +- if ((pAd->EepromAccess) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- return; +- } +- +- // the antenna selection is through firmware and MAC register(GPIO3) +- if (Ant == 0) +- { +- // Main antenna +-#ifdef RTMP_MAC_PCI +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x |= (EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +-#else +- AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x1, 0x0); +-#endif // RTMP_MAC_PCI // +- +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n")); +- } +- else +- { +- // Aux antenna +-#ifdef RTMP_MAC_PCI +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +-#else +- AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x0, 0x0); +-#endif // RTMP_MAC_PCI // +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- Value |= 0x08; +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n")); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- For RF filter calibration purpose +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0; +- UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; +- UCHAR RF_R24_Value = 0; +- +- // Give bbp filter initial value +- pAd->Mlme.CaliBW20RfR24 = 0x1F; +- pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 +- +- do +- { +- if (loop == 1) //BandWidth = 40 MHz +- { +- // Write 0x27 to RF_R24 to program filter +- RF_R24_Value = 0x27; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) +- FilterTarget = 0x15; +- else +- FilterTarget = 0x19; +- +- // when calibrate BW40, BBP mask must set to BW40. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- // set to BW40 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value |= 0x20; +- RT30xxWriteRFRegister(pAd, RF_R31, value); +- } +- else //BandWidth = 20 MHz +- { +- // Write 0x07 to RF_R24 to program filter +- RF_R24_Value = 0x07; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) +- FilterTarget = 0x13; +- else +- FilterTarget = 0x16; +- +- // set to BW20 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value &= (~0x20); +- RT30xxWriteRFRegister(pAd, RF_R31, value); +- } +- +- // Write 0x01 to RF_R22 to enable baseband loopback mode +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // Write 0x00 to BBP_R24 to set power & frequency of passband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- do +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- RTMPusecDelay(1000); +- // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- R55x = value & 0xFF; +- +- } while ((ReTry++ < 100) && (R55x == 0)); +- +- // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); +- +- while(TRUE) +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- //We need to wait for calibration +- RTMPusecDelay(1000); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- value &= 0xFF; +- if ((R55x - value) < FilterTarget) +- { +- RF_R24_Value ++; +- } +- else if ((R55x - value) == FilterTarget) +- { +- RF_R24_Value ++; +- count ++; +- } +- else +- { +- break; +- } +- +- // prevent infinite loop cause driver hang. +- if (loopcnt++ > 100) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt)); +- break; +- } +- +- // Write RF_R24 to program filter +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- } +- +- if (count > 0) +- { +- RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); +- } +- +- // Store for future usage +- if (loopcnt < 100) +- { +- if (loop++ == 0) +- { +- //BandWidth = 20 MHz +- pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value; +- } +- else +- { +- //BandWidth = 40 MHz +- pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value; +- break; +- } +- } +- else +- break; +- +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- +- // reset count +- count = 0; +- } while(TRUE); +- +- // +- // Set back to initial state +- // +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value &= ~(0x01); +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // set BBP back to BW20 +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); +-} +- +- +-// add by johnli, RF power sequence setup +-/* +- ========================================================================== +- Description: +- +- Load RF normal operation-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- +- // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue = (RFValue & (~0x0C)) | 0x31; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // TX_LO2_en, RF R15 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R15, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R15, RFValue); +- +- /* move to NICInitRT30xxRFRegisters +- // TX_LO1_en, RF R17 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R17, &RFValue); +- RFValue &= (~0x08); +- // to fix rx long range issue +- if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) +- { +- RFValue |= 0x20; +- } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 2) +- { +- RFValue &= (~0x7); // clean bit [2:0] +- RFValue |= pAd->TxMixerGain24G; +- } +- RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +- */ +- +- // RX_LO1_en, RF R20 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R20, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R20, RFValue); +- +- // RX_LO2_en, RF R21 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- +- /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ +- // LDORF_VC, RF R27 register Bit 2 to 0 +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +- // Raising RF voltage is no longer needed for RT3070(F) +- if (IS_RT3090(pAd)) // RT309x and RT3071/72 +- { +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- /* end johnli */ +-} +- +-/* +- ========================================================================== +- Description: +- +- Load RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- +- { +- // RF_BLOCK_en. RF R1 register Bit 0 to 0 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue &= (~0x01); +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue &= (~0x30); +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue &= (~0x0E); +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x80); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- } +- +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { +- { +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- RFValue |= 0x77; +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue |= 0x1D000000; +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- Reverse RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT30xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- { +- // RF_BLOCK_en, RF R1 register Bit 0 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue |= 0x30; +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue |= 0x0E; +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 1 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- } +- +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- IS_RT3390(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { +- { +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- +- // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { +- // patch tx EVM issue temporarily +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- else +- { +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- } +- +- if(IS_RT3572(pAd)) +- RT30xxWriteRFRegister(pAd, RF_R08, 0x80); +-} +-// end johnli +- +-VOID RT30xxHaltAction( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 TxPinCfg = 0x00050F0F; +- +- // +- // Turn off LNA_PE or TRSW_POL +- // +- if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) +- { +- if ((IS_RT3071(pAd) || IS_RT3572(pAd)) +-#ifdef RTMP_EFUSE_SUPPORT +- && (pAd->bUseEfuse) +-#endif // RTMP_EFUSE_SUPPORT // +- ) +- { +- TxPinCfg &= 0xFFFBF0F0; // bit18 off +- } +- else +- { +- TxPinCfg &= 0xFFFFF0F0; +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +-} +- +-#endif // RT30xx // +diff --git a/drivers/staging/rt3090/chips/rt3370.c b/drivers/staging/rt3090/chips/rt3370.c +deleted file mode 100644 +index 38ecb06..0000000 +--- a/drivers/staging/rt3090/chips/rt3370.c ++++ /dev/null +@@ -1,121 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3370.c +- +- Abstract: +- Specific funcitons and variables for RT30xx. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifdef RT3370 +- +-#include "../rt_config.h" +- +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // +- +- +-VOID NICInitRT3370RFRegisters(IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value +- if (IS_RT3090(pAd)||IS_RT3390(pAd)||IS_RT3572(pAd)) +- { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers +- UINT32 RfReg = 0, data; +- +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); +- RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- RTMPusecDelay(1000); +- RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- +- // init R24, R31 +- RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); +- RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); +- +- if (IS_RT3390(pAd)) +- { +- // patch LNA_PE_G1 failed issue +- RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); +- +- // RF registers initialization +- for (i = 0; i < NUM_RF_REG_PARMS_OVER_RT3390; i++) +- { +- RT30xxWriteRFRegister(pAd, RFRegTableOverRT3390[i].Register, RFRegTableOverRT3390[i].Value); +- } +- } +- +- // patch LNA_PE_G1 failed issue +- RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); +- +- // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS_OVER_RT3390; i++) +- { +- RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); +- } +- +- // Driver should set RF R6 bit6 on before calibration +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); +- RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); +- +- //For RF filter Calibration +- RTMPFilterCalibration(pAd); +- +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RT30xxWriteRFRegister(pAd, RF_R27, 0x3); +- +- // set led open drain enable +- RTMP_IO_READ32(pAd, OPT_14, &data); +- data |= 0x01; +- RTMP_IO_WRITE32(pAd, OPT_14, data); +- +- // set default antenna as main +- if (pAd->RfIcType == RFIC_3020) +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- RT30xxLoadRFNormalModeSetup(pAd); +- } +- +-} +-#endif // RT3070 // +diff --git a/drivers/staging/rt3090/chips/rt3390.c b/drivers/staging/rt3090/chips/rt3390.c +deleted file mode 100644 +index afed9e7..0000000 +--- a/drivers/staging/rt3090/chips/rt3390.c ++++ /dev/null +@@ -1,122 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3390.c +- +- Abstract: +- Specific funcitons and variables for RT30xx. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifdef RT3390 +- +-#include "../rt_config.h" +- +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // +- +- +-VOID NICInitRT3390RFRegisters(IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value +- if (IS_RT3090(pAd)||IS_RT3390(pAd)||IS_RT3572(pAd)) +- { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers +- UINT32 RfReg = 0, data; +- +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); +- RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- RTMPusecDelay(1000); +- RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); +- +- // init R24, R31 +- RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); +- RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); +- +- if (IS_RT3390(pAd)) +- { +- // patch LNA_PE_G1 failed issue +- RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); +- +- // RF registers initialization +- for (i = 0; i < NUM_RF_REG_PARMS_OVER_RT3390; i++) +- { +- RT30xxWriteRFRegister(pAd, RFRegTableOverRT3390[i].Register, RFRegTableOverRT3390[i].Value); +- } +- } +- +- // patch LNA_PE_G1 failed issue +- RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); +- data &= ~(0x20); +- RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); +- +- // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS_OVER_RT3390; i++) +- { +- RT30xxWriteRFRegister(pAd, RFRegTableOverRT3390[i].Register, RFRegTableOverRT3390[i].Value); +- } +- +- // Driver should set RF R6 bit6 on before calibration +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); +- RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); +- +- //For RF filter Calibration +- RTMPFilterCalibration(pAd); +- +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RT30xxWriteRFRegister(pAd, RF_R27, 0x3); +- +- // set led open drain enable +- RTMP_IO_READ32(pAd, OPT_14, &data); +- data |= 0x01; +- RTMP_IO_WRITE32(pAd, OPT_14, data); +- +- // set default antenna as main +- if (pAd->RfIcType == RFIC_3020) +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- RT33xxLoadRFNormalModeSetup(pAd); +- } +- +-} +- +-#endif // RT3390 // +diff --git a/drivers/staging/rt3090/chips/rt33xx.c b/drivers/staging/rt3090/chips/rt33xx.c +deleted file mode 100644 +index 56f376c..0000000 +--- a/drivers/staging/rt3090/chips/rt33xx.c ++++ /dev/null +@@ -1,536 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt33xx.c +- +- Abstract: +- Specific funcitons and variables for RT30xx. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +- +-#ifdef RT33xx +- +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // +- +-#include "../rt_config.h" +- +- +-// +-// RF register initialization set +-// +-REG_PAIR RFRegTableOverRT3390[] = { +- {RF_R00, 0xA0}, +- {RF_R01, 0xE1}, +- {RF_R02, 0xF1}, +- {RF_R03, 0x62}, +- {RF_R04, 0x40}, +- {RF_R05, 0x8B}, +- {RF_R06, 0x42}, +- {RF_R07, 0x34}, +- {RF_R08, 0x00}, // Read only +- {RF_R09, 0xC0}, +- +- {RF_R10, 0x61}, +- {RF_R11, 0x21}, +- {RF_R12, 0x3B}, +- {RF_R13, 0xE0}, +- {RF_R14, 0x90}, +- {RF_R15, 0x53}, +- {RF_R16, 0x0E}, +- {RF_R17, 0x94}, +- {RF_R18, 0x5C}, +- {RF_R19, 0x4A}, +- +- {RF_R20, 0xB2}, +- {RF_R21, 0xF6}, +- {RF_R22, 0x00}, +- {RF_R23, 0x14}, +- {RF_R24, 0x08}, +- {RF_R25, 0x3D}, +- {RF_R26, 0x85}, +- {RF_R27, 0x00}, +- {RF_R28, 0x41}, +- {RF_R29, 0x8F}, +- {RF_R30, 0x20}, +- {RF_R31, 0x0F}, +-}; +- +-UCHAR NUM_RF_REG_PARMS_OVER_RT3390=(sizeof(RFRegTableOverRT3390) / sizeof(REG_PAIR)); +- +- +- +-// Antenna divesity use GPIO3 and EESK pin for control +-// Antenna and EEPROM access are both using EESK pin, +-// Therefor we should avoid accessing EESK at the same time +-// Then restore antenna after EEPROM access +-// The original name of this function is AsicSetRxAnt(), now change to +-//VOID AsicSetRxAnt( +- +-VOID RT33xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) +-{ +- UINT32 Value; +- UINT32 x; +- +- if ((pAd->EepromAccess) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- return; +- } +- +- // the antenna selection is through firmware and MAC register(GPIO3) +- if (Ant == 0) +- { +- // Main antenna +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x |= (EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n")); +- } +- else +- { +- // Aux antenna +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EESK); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); +- Value &= ~(0x0808); +- Value |= 0x08; +- RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n")); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- For RF filter calibration purpose +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0; +- UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; +- UCHAR RF_R24_Value = 0; +- +- // Give bbp filter initial value +- pAd->Mlme.CaliBW20RfR24 = 0x1F; +- pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 +- +- do +- { +- if (loop == 1) //BandWidth = 40 MHz +- { +- // Write 0x27 to RF_R24 to program filter +- RF_R24_Value = 0x27; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) +- FilterTarget = 0x15; +- else +- FilterTarget = 0x19; +- +- // when calibrate BW40, BBP mask must set to BW40. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- // set to BW40 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value |= 0x20; +- RT30xxWriteRFRegister(pAd, RF_R31, value); +- } +- else //BandWidth = 20 MHz +- { +- // Write 0x07 to RF_R24 to program filter +- RF_R24_Value = 0x07; +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) +- FilterTarget = 0x13; +- else +- FilterTarget = 0x16; +- +- // set to BW20 +- RT30xxReadRFRegister(pAd, RF_R31, &value); +- value &= (~0x20); +- RT30xxWriteRFRegister(pAd, RF_R31, value); +- } +- +- // Write 0x01 to RF_R22 to enable baseband loopback mode +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // Write 0x00 to BBP_R24 to set power & frequency of passband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- do +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- RTMPusecDelay(1000); +- // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- R55x = value & 0xFF; +- +- } while ((ReTry++ < 100) && (R55x == 0)); +- +- // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); +- +- while(TRUE) +- { +- // Write 0x90 to BBP_R25 to transmit test tone +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); +- +- //We need to wait for calibration +- RTMPusecDelay(1000); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); +- value &= 0xFF; +- if ((R55x - value) < FilterTarget) +- { +- RF_R24_Value ++; +- } +- else if ((R55x - value) == FilterTarget) +- { +- RF_R24_Value ++; +- count ++; +- } +- else +- { +- break; +- } +- +- // prevent infinite loop cause driver hang. +- if (loopcnt++ > 100) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt)); +- break; +- } +- +- // Write RF_R24 to program filter +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- } +- +- if (count > 0) +- { +- RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); +- } +- +- // Store for future usage +- if (loopcnt < 100) +- { +- if (loop++ == 0) +- { +- //BandWidth = 20 MHz +- pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value; +- } +- else +- { +- //BandWidth = 40 MHz +- pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value; +- break; +- } +- } +- else +- break; +- +- RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- +- // reset count +- count = 0; +- } while(TRUE); +- +- // +- // Set back to initial state +- // +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); +- +- RT30xxReadRFRegister(pAd, RF_R22, &value); +- value &= ~(0x01); +- RT30xxWriteRFRegister(pAd, RF_R22, value); +- +- // set BBP back to BW20 +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); +-} +- +- +-// add by johnli, RF power sequence setup +-/* +- ========================================================================== +- Description: +- +- Load RF normal operation-mode setup +- +- ========================================================================== +- */ +-VOID RT33xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- +- // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue = (RFValue & (~0x0C)) | 0x31; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // TX_LO2_en, RF R15 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R15, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R15, RFValue); +- +- /* move to NICInitRT30xxRFRegisters +- // TX_LO1_en, RF R17 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R17, &RFValue); +- RFValue &= (~0x08); +- // to fix rx long range issue +- if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) +- { +- RFValue |= 0x20; +- } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 2) +- { +- RFValue &= (~0x7); // clean bit [2:0] +- RFValue |= pAd->TxMixerGain24G; +- } +- RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +- */ +- +- // RX_LO1_en, RF R20 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R20, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R20, RFValue); +- +- // RX_LO2_en, RF R21 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x08); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- +- /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ +- // LDORF_VC, RF R27 register Bit 2 to 0 +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +- // Raising RF voltage is no longer needed for RT3070(F) +- if (IS_RT3090(pAd)) // RT309x and RT3071/72 +- { +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- /* end johnli */ +-} +- +-/* +- ========================================================================== +- Description: +- +- Load RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT33xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- +- { +- // RF_BLOCK_en. RF R1 register Bit 0 to 0 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue &= (~0x01); +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue &= (~0x30); +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue &= (~0x0E); +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 0 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue &= (~0x80); +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- } +- +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- IS_RT3390(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { +- { +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- RFValue |= 0x77; +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue |= 0x1D000000; +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- Reverse RF sleep-mode setup +- +- ========================================================================== +- */ +-VOID RT33xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR RFValue; +- UINT32 MACValue; +- +- { +- // RF_BLOCK_en, RF R1 register Bit 0 to 1 +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- RFValue |= 0x01; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue |= 0x30; +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 +- RT30xxReadRFRegister(pAd, RF_R09, &RFValue); +- RFValue |= 0x0E; +- RT30xxWriteRFRegister(pAd, RF_R09, RFValue); +- +- // RX_CTB_en, RF R21 register Bit 7 to 1 +- RT30xxReadRFRegister(pAd, RF_R21, &RFValue); +- RFValue |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R21, RFValue); +- } +- +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- IS_RT3390(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { +- { +- RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- RFValue = (RFValue & (~0x77)) | 0x3; +- else +- RFValue = (RFValue & (~0x77)); +- RT30xxWriteRFRegister(pAd, RF_R27, RFValue); +- } +- +- // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { +- // patch tx EVM issue temporarily +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- else +- { +- RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); +- MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000); +- RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- } +- +- if(IS_RT3572(pAd)) +- RT30xxWriteRFRegister(pAd, RF_R08, 0x80); +-} +-// end johnli +- +-VOID RT33xxHaltAction( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 TxPinCfg = 0x00050F0F; +- +- // +- // Turn off LNA_PE or TRSW_POL +- // +- if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3390(pAd)||IS_RT3572(pAd)) +- { +- //KH? Both support 3390 usb and PCI +- if ((IS_RT3071(pAd) || IS_RT3572(pAd)||IS_RT3390(pAd)) +-#ifdef RTMP_EFUSE_SUPPORT +- && (pAd->bUseEfuse) +-#endif // RTMP_EFUSE_SUPPORT // +- ) +- { +- TxPinCfg &= 0xFFFBF0F0; // bit18 off +- } +- else +- { +- TxPinCfg &= 0xFFFFF0F0; +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +-} +- +-#endif // RT30xx // +diff --git a/drivers/staging/rt3090/chlist.h b/drivers/staging/rt3090/chlist.h +deleted file mode 100644 +index d03cb47..0000000 +--- a/drivers/staging/rt3090/chlist.h ++++ /dev/null +@@ -1,130 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- chlist.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi Wu 2007-12-19 created +-*/ +- +-#ifndef __CHLIST_H__ +-#define __CHLIST_H__ +- +-#include "rtmp_type.h" +-#include "rtmp_def.h" +- +- +-#define ODOR 0 +-#define IDOR 1 +-#define BOTH 2 +- +-#define BAND_5G 0 +-#define BAND_24G 1 +-#define BAND_BOTH 2 +- +-typedef struct _CH_DESP { +- UCHAR FirstChannel; +- UCHAR NumOfCh; +- CHAR MaxTxPwr; // dBm +- UCHAR Geography; // 0:out door, 1:in door, 2:both +- BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes. +-} CH_DESP, *PCH_DESP; +- +-typedef struct _CH_REGION { +- UCHAR CountReg[3]; +- UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 +- CH_DESP ChDesp[10]; +-} CH_REGION, *PCH_REGION; +- +-extern CH_REGION ChRegion[]; +- +-typedef struct _CH_FREQ_MAP_{ +- UINT16 channel; +- UINT16 freqKHz; +-}CH_FREQ_MAP; +- +-extern CH_FREQ_MAP CH_HZ_ID_MAP[]; +-extern int CH_HZ_ID_MAP_NUM; +- +- +-#define MAP_CHANNEL_ID_TO_KHZ(_ch, _khz) \ +- do{ \ +- int _chIdx; \ +- for (_chIdx = 0; _chIdx < CH_HZ_ID_MAP_NUM; _chIdx++)\ +- { \ +- if ((_ch) == CH_HZ_ID_MAP[_chIdx].channel) \ +- { \ +- (_khz) = CH_HZ_ID_MAP[_chIdx].freqKHz * 1000; \ +- break; \ +- } \ +- } \ +- if (_chIdx == CH_HZ_ID_MAP_NUM) \ +- (_khz) = 2412000; \ +- }while(0) +- +-#define MAP_KHZ_TO_CHANNEL_ID(_khz, _ch) \ +- do{ \ +- int _chIdx; \ +- for (_chIdx = 0; _chIdx < CH_HZ_ID_MAP_NUM; _chIdx++)\ +- { \ +- if ((_khz) == CH_HZ_ID_MAP[_chIdx].freqKHz) \ +- { \ +- (_ch) = CH_HZ_ID_MAP[_chIdx].channel; \ +- break; \ +- } \ +- } \ +- if (_chIdx == CH_HZ_ID_MAP_NUM) \ +- (_ch) = 1; \ +- }while(0) +- +- +-VOID BuildChannelListEx( +- IN PRTMP_ADAPTER pAd); +- +-VOID BuildBeaconChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen); +- +-#ifdef DOT11_N_SUPPORT +-VOID N_ChannelCheck( +- IN PRTMP_ADAPTER pAd); +- +-VOID N_SetCenCh( +- IN PRTMP_ADAPTER pAd); +-#endif // DOT11_N_SUPPORT // +- +-UINT8 GetCuntryMaxTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 channel); +- +-#endif // __CHLIST_H__ +diff --git a/drivers/staging/rt3090/common/action.c b/drivers/staging/rt3090/common/action.c +deleted file mode 100644 +index 8e3b0a0..0000000 +--- a/drivers/staging/rt3090/common/action.c ++++ /dev/null +@@ -1,1057 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- action.c +- +- Abstract: +- Handle association related requests either from WSTA or from local MLME +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Jan Lee 2006 created for rt2860 +- */ +- +-#include "../rt_config.h" +-#include "../action.h" +- +- +-static VOID ReservedAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +- +-/* +- ========================================================================== +- Description: +- association state machine init, including state transition and timer init +- Parameters: +- S - pointer to the association state machine +- Note: +- The state machine looks like the following +- +- ASSOC_IDLE +- MT2_MLME_DISASSOC_REQ mlme_disassoc_req_action +- MT2_PEER_DISASSOC_REQ peer_disassoc_action +- MT2_PEER_ASSOC_REQ drop +- MT2_PEER_REASSOC_REQ drop +- MT2_CLS3ERR cls3err_action +- ========================================================================== +- */ +-VOID ActionStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(S, (STATE_MACHINE_FUNC *)Trans, MAX_ACT_STATE, MAX_ACT_MSG, (STATE_MACHINE_FUNC)Drop, ACT_IDLE, ACT_MACHINE_BASE); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_SPECTRUM_CATE, (STATE_MACHINE_FUNC)PeerSpectrumAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_QOS_CATE, (STATE_MACHINE_FUNC)PeerQOSAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, (STATE_MACHINE_FUNC)ReservedAction); +-#ifdef QOS_DLS_SUPPORT +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, (STATE_MACHINE_FUNC)PeerDLSAction); +-#endif // QOS_DLS_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_BA_CATE, (STATE_MACHINE_FUNC)PeerBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_HT_CATE, (STATE_MACHINE_FUNC)PeerHTAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ADD_BA_CATE, (STATE_MACHINE_FUNC)MlmeADDBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ORI_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_REC_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction); +-#endif // DOT11_N_SUPPORT // +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_PUBLIC_CATE, (STATE_MACHINE_FUNC)PeerPublicAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_RM_CATE, (STATE_MACHINE_FUNC)PeerRMAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_QOS_CATE, (STATE_MACHINE_FUNC)MlmeQOSAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_DLS_CATE, (STATE_MACHINE_FUNC)MlmeDLSAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_ACT_INVALID, (STATE_MACHINE_FUNC)MlmeInvalidAction); +- +- +-} +- +-#ifdef DOT11_N_SUPPORT +-VOID MlmeADDBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- MLME_ADDBA_REQ_STRUCT *pInfo; +- UCHAR Addr[6]; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; +- FRAME_ADDBA_REQ Frame; +- ULONG FrameLen; +- BA_ORI_ENTRY *pBAEntry = NULL; +- +- pInfo = (MLME_ADDBA_REQ_STRUCT *)Elem->Msg; +- NdisZeroMemory(&Frame, sizeof(FRAME_ADDBA_REQ)); +- +- if(MlmeAddBAReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr)) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - MlmeADDBAAction() allocate memory failed \n")); +- return; +- } +- // 1. find entry +- Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; +- if (Idx == 0) +- { +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() can't find BAOriEntry \n")); +- return; +- } +- else +- { +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#ifdef QOS_DLS_SUPPORT +- if (pAd->MacTab.Content[pInfo->Wcid].ValidAsDls) +- ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#endif // QOS_DLS_SUPPORT // +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pInfo->pAddr); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- Frame.Category = CATEGORY_BA; +- Frame.Action = ADDBA_REQ; +- Frame.BaParm.AMSDUSupported = 0; +- Frame.BaParm.BAPolicy = IMMED_BA; +- Frame.BaParm.TID = pInfo->TID; +- Frame.BaParm.BufSize = pInfo->BaBufSize; +- Frame.Token = pInfo->Token; +- Frame.TimeOutValue = pInfo->TimeOutValue; +- Frame.BaStartSeq.field.FragNum = 0; +- Frame.BaStartSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; +- +- *(USHORT *)(&Frame.BaParm) = cpu2le16(*(USHORT *)(&Frame.BaParm)); +- Frame.TimeOutValue = cpu2le16(Frame.TimeOutValue); +- Frame.BaStartSeq.word = cpu2le16(Frame.BaStartSeq.word); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_REQ), &Frame, +- END_OF_ARGS); +- +- MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[pInfo->TID]), pOutBuffer, FrameLen); +- +- MlmeFreeMemory(pAd, pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("BA - Send ADDBA request. StartSeq = %x, FrameLen = %ld. BufSize = %d\n", Frame.BaStartSeq.field.StartSeq, FrameLen, Frame.BaParm.BufSize)); +- } +-} +- +-/* +- ========================================================================== +- Description: +- send DELBA and delete BaEntry if any +- Parametrs: +- Elem - MLME message MLME_DELBA_REQ_STRUCT +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeDELBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MLME_DELBA_REQ_STRUCT *pInfo; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; +- FRAME_DELBA_REQ Frame; +- ULONG FrameLen; +- FRAME_BAR FrameBar; +- +- pInfo = (MLME_DELBA_REQ_STRUCT *)Elem->Msg; +- // must send back DELBA +- NdisZeroMemory(&Frame, sizeof(FRAME_DELBA_REQ)); +- DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeDELBAAction(), Initiator(%d) \n", pInfo->Initiator)); +- +- if(MlmeDelBAReqSanity(pAd, Elem->Msg, Elem->MsgLen)) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeDELBAAction() allocate memory failed 1. \n")); +- return; +- } +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR, ("BA - MlmeDELBAAction() allocate memory failed 2. \n")); +- return; +- } +- +- // SEND BAR (Send BAR to refresh peer reordering buffer.) +- Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress); +-#endif // CONFIG_STA_SUPPORT // +- +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL funciton. +- FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pInfo->TID; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.ACKPolicy = IMMED_BA; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.Compressed = 1; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.MTID = 0; // make sure sequence not clear in DEL funciton. +- +- MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer2); +- DBGPRINT(RT_DEBUG_TRACE,("BA - MlmeDELBAAction() . Send BAR to refresh peer reordering buffer \n")); +- +- // SEND DELBA FRAME +- FrameLen = 0; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#ifdef QOS_DLS_SUPPORT +- if (pAd->MacTab.Content[pInfo->Wcid].ValidAsDls) +- ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#endif // QOS_DLS_SUPPORT // +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[pInfo->Wcid].Addr); +- } +-#endif // CONFIG_STA_SUPPORT // +- Frame.Category = CATEGORY_BA; +- Frame.Action = DELBA; +- Frame.DelbaParm.Initiator = pInfo->Initiator; +- Frame.DelbaParm.TID = pInfo->TID; +- Frame.ReasonCode = 39; // Time Out +- *(USHORT *)(&Frame.DelbaParm) = cpu2le16(*(USHORT *)(&Frame.DelbaParm)); +- Frame.ReasonCode = cpu2le16(Frame.ReasonCode); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_DELBA_REQ), &Frame, +- END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("BA - MlmeDELBAAction() . 3 DELBA sent. Initiator(%d)\n", pInfo->Initiator)); +- } +-} +-#endif // DOT11_N_SUPPORT // +- +-VOID MlmeQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-VOID MlmeDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-VOID MlmeInvalidAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- //PUCHAR pOutBuffer = NULL; +- //Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 +-} +- +-VOID PeerQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-#ifdef QOS_DLS_SUPPORT +-VOID PeerDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +- +- switch(Action) +- { +- case ACTION_DLS_REQUEST: +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- PeerDlsReqAction(pAd, Elem); +-#endif // CONFIG_STA_SUPPORT // +- break; +- +- case ACTION_DLS_RESPONSE: +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- PeerDlsRspAction(pAd, Elem); +-#endif // CONFIG_STA_SUPPORT // +- break; +- +- case ACTION_DLS_TEARDOWN: +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- PeerDlsTearDownAction(pAd, Elem); +-#endif // CONFIG_STA_SUPPORT // +- break; +- } +-} +-#endif // QOS_DLS_SUPPORT // +- +- +- +-#ifdef DOT11_N_SUPPORT +-VOID PeerBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +- +- switch(Action) +- { +- case ADDBA_REQ: +- PeerAddBAReqAction(pAd,Elem); +- break; +- case ADDBA_RESP: +- PeerAddBARspAction(pAd,Elem); +- break; +- case DELBA: +- PeerDelBAAction(pAd,Elem); +- break; +- } +-} +- +- +-#ifdef DOT11N_DRAFT3 +- +-#ifdef CONFIG_STA_SUPPORT +-VOID StaPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Bss2040Coexist) +-{ +- BSS_2040_COEXIST_IE BssCoexist; +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- BssCoexist.word = Bss2040Coexist; +- // AP asks Station to return a 20/40 BSS Coexistence mgmt frame. So we first starts a scan, then send back 20/40 BSS Coexistence mgmt frame +- if ((BssCoexist.field.InfoReq == 1) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SCAN_2040))) +- { +- // Clear record first. After scan , will update those bit and send back to transmiter. +- pAd->CommonCfg.BSSCoexist2040.field.InfoReq = 1; +- pAd->CommonCfg.BSSCoexist2040.field.Intolerant40 = 0; +- pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq = 0; +- // Fill out stuff for scan request +- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_2040_BSS_COEXIST); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- } +-} +- +- +-/* +-Description : Build Intolerant Channel Rerpot from Trigger event table. +-return : how many bytes copied. +-*/ +-ULONG BuildIntolerantChannelRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest) +-{ +- ULONG FrameLen = 0; +- ULONG ReadOffset = 0; +- UCHAR i; +- UCHAR LastRegClass = 0xff; +- PUCHAR pLen; +- +- for ( i = 0;i < MAX_TRIGGER_EVENT;i++) +- { +- if (pAd->CommonCfg.TriggerEventTab.EventA[i].bValid == TRUE) +- { +- if (pAd->CommonCfg.TriggerEventTab.EventA[i].RegClass == LastRegClass) +- { +- *(pDest + ReadOffset) = (UCHAR)pAd->CommonCfg.TriggerEventTab.EventA[i].Channel; +- *pLen++; +- ReadOffset++; +- FrameLen++; +- } +- else +- { +- *(pDest + ReadOffset) = IE_2040_BSS_INTOLERANT_REPORT; // IE +- *(pDest + ReadOffset + 1) = 2; // Len = RegClass byte + channel byte. +- pLen = pDest + ReadOffset + 1; +- LastRegClass = pAd->CommonCfg.TriggerEventTab.EventA[i].RegClass; +- *(pDest + ReadOffset + 2) = LastRegClass; // Len = RegClass byte + channel byte. +- *(pDest + ReadOffset + 3) = (UCHAR)pAd->CommonCfg.TriggerEventTab.EventA[i].Channel; +- FrameLen += 4; +- ReadOffset += 4; +- } +- +- } +- } +- return FrameLen; +-} +- +- +-/* +-Description : Send 20/40 BSS Coexistence Action frame If one trigger event is triggered. +-*/ +-VOID Send2040CoexistAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN BOOLEAN bAddIntolerantCha) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- FRAME_ACTION_HDR Frame; +- ULONG FrameLen; +- ULONG IntolerantChaRepLen; +- +- IntolerantChaRepLen = 0; +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("ACT - Send2040CoexistAction() allocate memory failed \n")); +- return; +- } +- ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[Wcid].Addr, pAd->CommonCfg.Bssid); +- Frame.Category = CATEGORY_PUBLIC; +- Frame.Action = ACTION_BSS_2040_COEXIST; +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ACTION_HDR), &Frame, +- END_OF_ARGS); +- +- *(pOutBuffer + FrameLen) = pAd->CommonCfg.BSSCoexist2040.word; +- FrameLen++; +- +- if (bAddIntolerantCha == TRUE) +- IntolerantChaRepLen = BuildIntolerantChannelRep(pAd, pOutBuffer + FrameLen); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen + IntolerantChaRepLen); +- DBGPRINT(RT_DEBUG_ERROR,("ACT - Send2040CoexistAction( BSSCoexist2040 = 0x%x ) \n", pAd->CommonCfg.BSSCoexist2040.word)); +- +-} +- +- +-/* +- ========================================================================== +- Description: +- After scan, Update 20/40 BSS Coexistence IE and send out. +- According to 802.11n D3.03 11.14.10 +- +- Parameters: +- ========================================================================== +- */ +-VOID Update2040CoexistFrameAndNotify( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN BOOLEAN bAddIntolerantCha) +-{ +- BSS_2040_COEXIST_IE OldValue; +- +- OldValue.word = pAd->CommonCfg.BSSCoexist2040.word; +- if ((pAd->CommonCfg.TriggerEventTab.EventANo > 0) || (pAd->CommonCfg.TriggerEventTab.EventBCountDown > 0)) +- pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq = 1; +- +- // Need to check !!!! +- // How STA will set Intolerant40 if implementation dependent. Now we don't set this bit first.!!!!! +- // So Only check BSS20WidthReq change. +- if (OldValue.field.BSS20WidthReq != pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq) +- { +- Send2040CoexistAction(pAd, Wcid, bAddIntolerantCha); +- } +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-BOOLEAN ChannelSwitchSanityCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR NewChannel, +- IN UCHAR Secondary) +-{ +- UCHAR i; +- +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- return FALSE; +- +- if ((NewChannel > 7) && (Secondary == 1)) +- return FALSE; +- +- if ((NewChannel < 5) && (Secondary == 3)) +- return FALSE; +- +- // 0. Check if new channel is in the channellist. +- for (i = 0;i < pAd->ChannelListNum;i++) +- { +- if (pAd->ChannelList[i].Channel == NewChannel) +- { +- break; +- } +- } +- +- if (i == pAd->ChannelListNum) +- return FALSE; +- +- return TRUE; +-} +- +- +-VOID ChannelSwitchAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR NewChannel, +- IN UCHAR Secondary) +-{ +- UCHAR BBPValue = 0; +- ULONG MACValue; +- +- DBGPRINT(RT_DEBUG_TRACE,("SPECTRUM - ChannelSwitchAction(NewChannel = %d , Secondary = %d) \n", NewChannel, Secondary)); +- +- if (ChannelSwitchSanityCheck(pAd, Wcid, NewChannel, Secondary) == FALSE) +- return; +- +- // 1. Switches to BW = 20. +- if (Secondary == 0) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- pAd->CommonCfg.Channel = NewChannel; +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel,FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- pAd->MacTab.Content[Wcid].HTPhyMode.field.BW = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("!!!20MHz !!! \n" )); +- } +- // 1. Switches to BW = 40 And Station supports BW = 40. +- else if (((Secondary == 1) || (Secondary == 3)) && (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == 1)) +- { +- pAd->CommonCfg.Channel = NewChannel; +- +- if (Secondary == 1) +- { +- // Secondary above. +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &MACValue); +- MACValue &= 0xfe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, MACValue); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPValue); +- BBPValue&= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else +- { +- // Secondary below. +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &MACValue); +- MACValue &= 0xfe; +- MACValue |= 0x1; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, MACValue); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPValue); +- BBPValue&= (~0x20); +- BBPValue|= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- pAd->MacTab.Content[Wcid].HTPhyMode.field.BW = 1; +- } +-} +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-VOID PeerPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +- return; +- +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- switch(Action) +- { +- case ACTION_BSS_2040_COEXIST: // Format defined in IEEE 7.4.7a.1 in 11n Draf3.03 +- { +- //UCHAR BssCoexist; +- BSS_2040_COEXIST_ELEMENT *pCoexistInfo; +- BSS_2040_COEXIST_IE *pBssCoexistIe; +- BSS_2040_INTOLERANT_CH_REPORT *pIntolerantReport = NULL; +- +- if (Elem->MsgLen <= (LENGTH_802_11 + sizeof(BSS_2040_COEXIST_ELEMENT)) ) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ACTION - 20/40 BSS Coexistence Management Frame length too short! len = %ld!\n", Elem->MsgLen)); +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("ACTION - 20/40 BSS Coexistence Management action----> \n")); +- hex_dump("CoexistenceMgmtFrame", Elem->Msg, Elem->MsgLen); +- +- +- pCoexistInfo = (BSS_2040_COEXIST_ELEMENT *) &Elem->Msg[LENGTH_802_11+2]; +- //hex_dump("CoexistInfo", (PUCHAR)pCoexistInfo, sizeof(BSS_2040_COEXIST_ELEMENT)); +- if (Elem->MsgLen >= (LENGTH_802_11 + sizeof(BSS_2040_COEXIST_ELEMENT) + sizeof(BSS_2040_INTOLERANT_CH_REPORT))) +- { +- pIntolerantReport = (BSS_2040_INTOLERANT_CH_REPORT *)((PUCHAR)pCoexistInfo + sizeof(BSS_2040_COEXIST_ELEMENT)); +- } +- //hex_dump("IntolerantReport ", (PUCHAR)pIntolerantReport, sizeof(BSS_2040_INTOLERANT_CH_REPORT)); +- +- pBssCoexistIe = (BSS_2040_COEXIST_IE *)(&pCoexistInfo->BssCoexistIe); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (INFRA_ON(pAd)) +- { +- StaPublicAction(pAd, pCoexistInfo); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- } +- break; +- } +- +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-} +- +- +-static VOID ReservedAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Category; +- +- if (Elem->MsgLen <= LENGTH_802_11) +- { +- return; +- } +- +- Category = Elem->Msg[LENGTH_802_11]; +- DBGPRINT(RT_DEBUG_TRACE,("Rcv reserved category(%d) Action Frame\n", Category)); +- hex_dump("Reserved Action Frame", &Elem->Msg[0], Elem->MsgLen); +-} +- +-VOID PeerRMAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- return; +-} +- +-#ifdef DOT11_N_SUPPORT +-static VOID respond_ht_information_exchange_action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- FRAME_HT_INFO HTINFOframe, *pFrame; +- UCHAR *pAddr; +- +- +- // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - respond_ht_information_exchange_action() allocate memory failed \n")); +- return; +- } +- +- // get RA +- pFrame = (FRAME_HT_INFO *) &Elem->Msg[0]; +- pAddr = pFrame->Hdr.Addr2; +- +- NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO)); +- // 2-1. Prepare ADDBA Response frame. +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +- ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- HTINFOframe.Category = CATEGORY_HT; +- HTINFOframe.Action = HT_INFO_EXCHANGE; +- HTINFOframe.HT_Info.Request = 0; +- HTINFOframe.HT_Info.Forty_MHz_Intolerant = pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant; +- HTINFOframe.HT_Info.STA_Channel_Width = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_HT_INFO), &HTINFOframe, +- END_OF_ARGS); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +-} +- +- +-#ifdef DOT11N_DRAFT3 +-VOID SendNotifyBWActionFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR apidx) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- FRAME_ACTION_HDR Frame; +- ULONG FrameLen; +- PUCHAR pAddr1; +- +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("ACT - SendNotifyBWAction() allocate memory failed \n")); +- return; +- } +- +- if (Wcid == MCAST_WCID) +- pAddr1 = &BROADCAST_ADDR[0]; +- else +- pAddr1 = pAd->MacTab.Content[Wcid].Addr; +- ActHeaderInit(pAd, &Frame.Hdr, pAddr1, pAd->ApCfg.MBSSID[apidx].Bssid, pAd->ApCfg.MBSSID[apidx].Bssid); +- +- Frame.Category = CATEGORY_HT; +- Frame.Action = NOTIFY_BW_ACTION; +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ACTION_HDR), &Frame, +- END_OF_ARGS); +- +- *(pOutBuffer + FrameLen) = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; +- FrameLen++; +- +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- DBGPRINT(RT_DEBUG_TRACE,("ACT - SendNotifyBWAction(NotifyBW= %d)!\n", pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth)); +- +-} +-#endif // DOT11N_DRAFT3 // +- +- +-VOID PeerHTAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +- +- if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +- return; +- +- switch(Action) +- { +- case NOTIFY_BW_ACTION: +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Notify Channel bandwidth action----> \n")); +-#ifdef CONFIG_STA_SUPPORT +- if(pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) +- { +- // Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps +- // sending BW_Notify Action frame, and cause us to linkup and linkdown. +- // In legacy mode, don't need to parse HT action frame. +- DBGPRINT(RT_DEBUG_TRACE,("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n", +- Elem->Msg[LENGTH_802_11+2] )); +- break; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- if (Elem->Msg[LENGTH_802_11+2] == 0) // 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. +- pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0; +- +- break; +- +- case SMPS_ACTION: +- // 7.3.1.25 +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - SMPS action----> \n")); +- if (((Elem->Msg[LENGTH_802_11+2]&0x1) == 0)) +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_ENABLE; +- } +- else if (((Elem->Msg[LENGTH_802_11+2]&0x2) == 0)) +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_STATIC; +- } +- else +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_DYNAMIC; +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("Aid(%d) MIMO PS = %d\n", Elem->Wcid, pAd->MacTab.Content[Elem->Wcid].MmpsMode)); +- // rt2860c : add something for smps change. +- break; +- +- case SETPCO_ACTION: +- break; +- +- case MIMO_CHA_MEASURE_ACTION: +- break; +- +- case HT_INFO_EXCHANGE: +- { +- HT_INFORMATION_OCTET *pHT_info; +- +- pHT_info = (HT_INFORMATION_OCTET *) &Elem->Msg[LENGTH_802_11+2]; +- // 7.4.8.10 +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Information Exchange action----> \n")); +- if (pHT_info->Request) +- { +- respond_ht_information_exchange_action(pAd, Elem); +- } +- } +- break; +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- Retry sending ADDBA Reqest. +- +- IRQL = DISPATCH_LEVEL +- +- Parametrs: +- p8023Header: if this is already 802.3 format, p8023Header is NULL +- +- Return : TRUE if put into rx reordering buffer, shouldn't indicaterxhere. +- FALSE , then continue indicaterx at this moment. +- ========================================================================== +- */ +-VOID ORIBATimerTimeout( +- IN PRTMP_ADAPTER pAd) +-{ +- MAC_TABLE_ENTRY *pEntry; +- INT i, total; +-// FRAME_BAR FrameBar; +-// ULONG FrameLen; +-// NDIS_STATUS NStatus; +-// PUCHAR pOutBuffer = NULL; +-// USHORT Sequence; +- UCHAR TID; +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- total = pAd->MacTab.Size * NUM_OF_TID; +- +- for (i = 1; ((i 0)) ; i++) +- { +- if (pAd->BATable.BAOriEntry[i].ORI_BA_Status == Originator_Done) +- { +- pEntry = &pAd->MacTab.Content[pAd->BATable.BAOriEntry[i].Wcid]; +- TID = pAd->BATable.BAOriEntry[i].TID; +- +- ASSERT(pAd->BATable.BAOriEntry[i].Wcid < MAX_LEN_OF_MAC_TABLE); +- } +- total --; +- } +-} +- +- +-VOID SendRefreshBAR( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry) +-{ +- FRAME_BAR FrameBar; +- ULONG FrameLen; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- USHORT Sequence; +- UCHAR i, TID; +- USHORT idx; +- BA_ORI_ENTRY *pBAEntry; +- +- for (i = 0; i BAOriWcidArray[i]; +- if (idx == 0) +- { +- continue; +- } +- pBAEntry = &pAd->BATable.BAOriEntry[idx]; +- +- if (pBAEntry->ORI_BA_Status == Originator_Done) +- { +- TID = pBAEntry->TID; +- +- ASSERT(pBAEntry->Wcid < MAX_LEN_OF_MAC_TABLE); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n")); +- return; +- } +- +- Sequence = pEntry->TxSeq[TID]; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress); +-#endif // CONFIG_STA_SUPPORT // +- +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = TID; // make sure sequence not clear in DEL funciton. +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); +- //if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) +- if (1) // Now we always send BAR. +- { +- //MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen); +- MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[TID]), pOutBuffer, FrameLen); +- +- } +- MlmeFreeMemory(pAd, pOutBuffer); +- } +- } +-} +-#endif // DOT11_N_SUPPORT // +- +-VOID ActHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, +- IN PUCHAR Addr2, +- IN PUCHAR Addr3) +-{ +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); +- pHdr80211->FC.Type = BTYPE_MGMT; +- pHdr80211->FC.SubType = SUBTYPE_ACTION; +- +- COPY_MAC_ADDR(pHdr80211->Addr1, Addr1); +- COPY_MAC_ADDR(pHdr80211->Addr2, Addr2); +- COPY_MAC_ADDR(pHdr80211->Addr3, Addr3); +-} +- +-VOID BarHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, +- IN PUCHAR pDA, +- IN PUCHAR pSA) +-{ +-// USHORT Duration; +- +- NdisZeroMemory(pCntlBar, sizeof(FRAME_BAR)); +- pCntlBar->FC.Type = BTYPE_CNTL; +- pCntlBar->FC.SubType = SUBTYPE_BLOCK_ACK_REQ; +- pCntlBar->BarControl.MTID = 0; +- pCntlBar->BarControl.Compressed = 1; +- pCntlBar->BarControl.ACKPolicy = 0; +- +- +- pCntlBar->Duration = 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(FRAME_BA)); +- +- COPY_MAC_ADDR(pCntlBar->Addr1, pDA); +- COPY_MAC_ADDR(pCntlBar->Addr2, pSA); +-} +- +- +-/* +- ========================================================================== +- Description: +- Insert Category and action code into the action frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. category code of the frame. +- 4. action code of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID InsertActField( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Category, +- IN UINT8 ActCode) +-{ +- ULONG TempLen; +- +- MakeOutgoingFrame( pFrameBuf, &TempLen, +- 1, &Category, +- 1, &ActCode, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- return; +-} +diff --git a/drivers/staging/rt3090/common/ba_action.c b/drivers/staging/rt3090/common/ba_action.c +deleted file mode 100644 +index c732489..0000000 +--- a/drivers/staging/rt3090/common/ba_action.c ++++ /dev/null +@@ -1,1779 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +- +-#ifdef DOT11_N_SUPPORT +- +-#include "../rt_config.h" +- +- +-#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) //1 // inital sequence number of BA session +- +-#define ORI_SESSION_MAX_RETRY 8 +-#define ORI_BA_SESSION_TIMEOUT (2000) // ms +-#define REC_BA_SESSION_IDLE_TIMEOUT (1000) // ms +- +-#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms +-#define MAX_REORDERING_PACKET_TIMEOUT ((3000 * OS_HZ)/1000) // system ticks -- 100 ms +- +-#define RESET_RCV_SEQ (0xFFFF) +- +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, struct reordering_mpdu *mpdu_blk); +- +- +-BA_ORI_ENTRY *BATableAllocOriEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx); +- +-BA_REC_ENTRY *BATableAllocRecEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx); +- +-VOID BAOriSessionSetupTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID BARecSessionIdleTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +- +-BUILD_TIMER_FUNCTION(BAOriSessionSetupTimeout); +-BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); +- +-#define ANNOUNCE_REORDERING_PACKET(_pAd, _mpdu_blk) \ +- Announce_Reordering_Packet(_pAd, _mpdu_blk); +- +-VOID BA_MaxWinSizeReasign( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntryPeer, +- OUT UCHAR *pWinSize) +-{ +- UCHAR MaxSize; +- +- +- if (pAd->MACVersion >= RALINK_2883_VERSION) // 3*3 +- { +- if (pAd->MACVersion >= RALINK_3070_VERSION) +- { +- if (pEntryPeer->WepStatus != Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode +- else +- MaxSize = 13; +- } +- else +- MaxSize = 31; +- } +- else if (pAd->MACVersion >= RALINK_2880E_VERSION) // 2880 e +- { +- if (pEntryPeer->WepStatus != Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode +- else +- MaxSize = 13; +- } +- else +- MaxSize = 7; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ba> Win Size = %d, Max Size = %d\n", +- *pWinSize, MaxSize)); +- +- if ((*pWinSize) > MaxSize) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ba> reassign max win size from %d to %d\n", +- *pWinSize, MaxSize)); +- +- *pWinSize = MaxSize; +- } +-} +- +-void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, +- IN struct reordering_mpdu *mpdu) +-{ +- PNDIS_PACKET pPacket; +- +- pPacket = mpdu->pPacket; +- +- if (mpdu->bAMSDU) +- { +- ASSERT(0); +- BA_Reorder_AMSDU_Annnounce(pAd, pPacket); +- } +- else +- { +- // +- // pass this 802.3 packet to upper layer or forward this packet to WM directly +- // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, RTMP_GET_PACKET_IF(pPacket)); +-#endif // CONFIG_STA_SUPPORT // +- } +-} +- +-/* +- * Insert a reordering mpdu into sorted linked list by sequence no. +- */ +-BOOLEAN ba_reordering_mpdu_insertsorted(struct reordering_list *list, struct reordering_mpdu *mpdu) +-{ +- +- struct reordering_mpdu **ppScan = &list->next; +- +- while (*ppScan != NULL) +- { +- if (SEQ_SMALLER((*ppScan)->Sequence, mpdu->Sequence, MAXSEQ)) +- { +- ppScan = &(*ppScan)->next; +- } +- else if ((*ppScan)->Sequence == mpdu->Sequence) +- { +- /* give up this duplicated frame */ +- return(FALSE); +- } +- else +- { +- /* find position */ +- break; +- } +- } +- +- mpdu->next = *ppScan; +- *ppScan = mpdu; +- list->qlen++; +- return TRUE; +-} +- +- +-/* +- * caller lock critical section if necessary +- */ +-static inline void ba_enqueue(struct reordering_list *list, struct reordering_mpdu *mpdu_blk) +-{ +- list->qlen++; +- mpdu_blk->next = list->next; +- list->next = mpdu_blk; +-} +- +-/* +- * caller lock critical section if necessary +- */ +-static inline struct reordering_mpdu * ba_dequeue(struct reordering_list *list) +-{ +- struct reordering_mpdu *mpdu_blk = NULL; +- +- ASSERT(list); +- +- if (list->qlen) +- { +- list->qlen--; +- mpdu_blk = list->next; +- if (mpdu_blk) +- { +- list->next = mpdu_blk->next; +- mpdu_blk->next = NULL; +- } +- } +- return mpdu_blk; +-} +- +- +-static inline struct reordering_mpdu *ba_reordering_mpdu_dequeue(struct reordering_list *list) +-{ +- return(ba_dequeue(list)); +-} +- +- +-static inline struct reordering_mpdu *ba_reordering_mpdu_probe(struct reordering_list *list) +- { +- ASSERT(list); +- +- return(list->next); +- } +- +- +-/* +- * free all resource for reordering mechanism +- */ +-void ba_reordering_resource_release(PRTMP_ADAPTER pAd) +-{ +- BA_TABLE *Tab; +- PBA_REC_ENTRY pBAEntry; +- struct reordering_mpdu *mpdu_blk; +- int i; +- +- Tab = &pAd->BATable; +- +- /* I. release all pending reordering packet */ +- NdisAcquireSpinLock(&pAd->BATabLock); +- for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { +- pBAEntry = &Tab->BARecEntry[i]; +- if (pBAEntry->REC_BA_Status != Recipient_NONE) +- { +- while ((mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list))) +- { +- ASSERT(mpdu_blk->pPacket); +- RELEASE_NDIS_PACKET(pAd, mpdu_blk->pPacket, NDIS_STATUS_FAILURE); +- ba_mpdu_blk_free(pAd, mpdu_blk); +- } +- } +- } +- NdisReleaseSpinLock(&pAd->BATabLock); +- +- ASSERT(pBAEntry->list.qlen == 0); +- /* II. free memory of reordering mpdu table */ +- NdisAcquireSpinLock(&pAd->mpdu_blk_pool.lock); +- os_free_mem(pAd, pAd->mpdu_blk_pool.mem); +- NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); +-} +- +- +- +-/* +- * Allocate all resource for reordering mechanism +- */ +-BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) +-{ +- int i; +- PUCHAR mem; +- struct reordering_mpdu *mpdu_blk; +- struct reordering_list *freelist; +- +- /* allocate spinlock */ +- NdisAllocateSpinLock(&pAd->mpdu_blk_pool.lock); +- +- /* initialize freelist */ +- freelist = &pAd->mpdu_blk_pool.freelist; +- freelist->next = NULL; +- freelist->qlen = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate %d memory for BA reordering\n", (UINT32)(num*sizeof(struct reordering_mpdu)))); +- +- /* allocate number of mpdu_blk memory */ +- os_alloc_mem(pAd, (PUCHAR *)&mem, (num*sizeof(struct reordering_mpdu))); +- +- pAd->mpdu_blk_pool.mem = mem; +- +- if (mem == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Can't Allocate Memory for BA Reordering\n")); +- return(FALSE); +- } +- +- /* build mpdu_blk free list */ +- for (i=0; impdu_blk_pool.lock); +- mpdu_blk = ba_dequeue(&pAd->mpdu_blk_pool.freelist); +- if (mpdu_blk) +- { +-// blk_count++; +- /* reset mpdu_blk */ +- NdisZeroMemory(mpdu_blk, sizeof(struct reordering_mpdu)); +- } +- NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); +- return mpdu_blk; +-} +- +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, struct reordering_mpdu *mpdu_blk) +-{ +- ASSERT(mpdu_blk); +- +- NdisAcquireSpinLock(&pAd->mpdu_blk_pool.lock); +-// blk_count--; +- ba_enqueue(&pAd->mpdu_blk_pool.freelist, mpdu_blk); +- NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); +-} +- +- +-static USHORT ba_indicate_reordering_mpdus_in_order( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN USHORT StartSeq) +-{ +- struct reordering_mpdu *mpdu_blk; +- USHORT LastIndSeq = RESET_RCV_SEQ; +- +- NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- +- while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) +- { +- /* find in-order frame */ +- if (!SEQ_STEPONE(mpdu_blk->Sequence, StartSeq, MAXSEQ)) +- { +- break; +- } +- /* dequeue in-order frame from reodering list */ +- mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list); +- /* pass this frame up */ +- ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); +- /* move to next sequence */ +- StartSeq = mpdu_blk->Sequence; +- LastIndSeq = StartSeq; +- /* free mpdu_blk */ +- ba_mpdu_blk_free(pAd, mpdu_blk); +- } +- +- NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +- +- /* update last indicated sequence */ +- return LastIndSeq; +-} +- +-static void ba_indicate_reordering_mpdus_le_seq( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN USHORT Sequence) +-{ +- struct reordering_mpdu *mpdu_blk; +- +- NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) +- { +- /* find in-order frame */ +- if ((mpdu_blk->Sequence == Sequence) || SEQ_SMALLER(mpdu_blk->Sequence, Sequence, MAXSEQ)) +- { +- /* dequeue in-order frame from reodering list */ +- mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list); +- /* pass this frame up */ +- ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); +- /* free mpdu_blk */ +- ba_mpdu_blk_free(pAd, mpdu_blk); +- } +- else +- { +- break; +- } +- } +- NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +-} +- +- +-static void ba_refresh_reordering_mpdus( +- IN PRTMP_ADAPTER pAd, +- PBA_REC_ENTRY pBAEntry) +-{ +- struct reordering_mpdu *mpdu_blk; +- +- NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- +- /* dequeue in-order frame from reodering list */ +- while ((mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list))) +- { +- /* pass this frame up */ +- ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); +- +- pBAEntry->LastIndSeq = mpdu_blk->Sequence; +- ba_mpdu_blk_free(pAd, mpdu_blk); +- +- /* update last indicated sequence */ +- } +- ASSERT(pBAEntry->list.qlen == 0); +- pBAEntry->LastIndSeq = RESET_RCV_SEQ; +- NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +-} +- +- +-//static +-void ba_flush_reordering_timeout_mpdus( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32) +- +-{ +- USHORT Sequence; +- +-// if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && +-// (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| +-// (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(10*REORDERING_PACKET_TIMEOUT))) && +-// (pBAEntry->list.qlen > (pBAEntry->BAWinSize/8))) +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(MAX_REORDERING_PACKET_TIMEOUT/6))) +- &&(pBAEntry->list.qlen > 1) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("timeout[%d] (%08lx-%08lx = %d > %d): %x, flush all!\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer), +- (int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), MAX_REORDERING_PACKET_TIMEOUT, +- pBAEntry->LastIndSeq)); +- ba_refresh_reordering_mpdus(pAd, pBAEntry); +- pBAEntry->LastIndSeqAtTimer = Now32; +- } +- else +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT))) +- && (pBAEntry->list.qlen > 0) +- ) +- { +-// DBGPRINT(RT_DEBUG_OFF, ("timeout[%d] (%lx-%lx = %d > %d): %x, ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer), +-// (int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), REORDERING_PACKET_TIMEOUT, +-// pBAEntry->LastIndSeq)); +- // +- // force LastIndSeq to shift to LastIndSeq+1 +- // +- Sequence = (pBAEntry->LastIndSeq+1) & MAXSEQ; +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); +- pBAEntry->LastIndSeqAtTimer = Now32; +- pBAEntry->LastIndSeq = Sequence; +- // +- // indicate in-order mpdus +- // +- Sequence = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, Sequence); +- if (Sequence != RESET_RCV_SEQ) +- { +- pBAEntry->LastIndSeq = Sequence; +- } +- +- DBGPRINT(RT_DEBUG_OFF, ("%x, flush one!\n", pBAEntry->LastIndSeq)); +- +- } +-} +- +- +-/* +- * generate ADDBA request to +- * set up BA agreement +- */ +-VOID BAOriSessionSetUp( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, +- IN BOOLEAN isForced) +- +-{ +- //MLME_ADDBA_REQ_STRUCT AddbaReq; +- BA_ORI_ENTRY *pBAEntry = NULL; +- USHORT Idx; +- BOOLEAN Cancelled; +- +- if ((pAd->CommonCfg.BACapability.field.AutoBA != TRUE) && (isForced == FALSE)) +- return; +- +- // if this entry is limited to use legacy tx mode, it doesn't generate BA. +- if (RTMPStaFixedTxMode(pAd, pEntry) != FIXED_TXMODE_HT) +- return; +- +- if ((pEntry->BADeclineBitmap & (1<BAOriWcidArray[TID]; +- if (Idx == 0) +- { +- // allocate a BA session +- pBAEntry = BATableAllocOriEntry(pAd, &Idx); +- if (pBAEntry == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ADDBA - MlmeADDBAAction() allocate BA session failed \n")); +- return; +- } +- } +- else +- { +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; +- } +- +- if (pBAEntry->ORI_BA_Status >= Originator_WaitRes) +- { +- return; +- } +- +- pEntry->BAOriWcidArray[TID] = Idx; +- +- // Initialize BA session +- pBAEntry->ORI_BA_Status = Originator_WaitRes; +- pBAEntry->Wcid = pEntry->Aid; +- pBAEntry->BAWinSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; +- pBAEntry->Sequence = BA_ORI_INIT_SEQ; +- pBAEntry->Token = 1; // (2008-01-21) Jan Lee recommends it - this token can't be 0 +- pBAEntry->TID = TID; +- pBAEntry->TimeOutValue = TimeOut; +- pBAEntry->pAdapter = pAd; +- +- if (!(pEntry->TXBAbitmap & (1<ORIBATimer, GET_TIMER_FUNCTION(BAOriSessionSetupTimeout), pBAEntry, FALSE); +- } +- else +- RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); +- +- // set timer to send ADDBA request +- RTMPSetTimer(&pBAEntry->ORIBATimer, DelayTime); +-} +- +-VOID BAOriSessionAdd( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN PFRAME_ADDBA_RSP pFrame) +-{ +- BA_ORI_ENTRY *pBAEntry = NULL; +- BOOLEAN Cancelled; +- UCHAR TID; +- USHORT Idx; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- FRAME_BAR FrameBar; +- +- TID = pFrame->BaParm.TID; +- Idx = pEntry->BAOriWcidArray[TID]; +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; +- +- // Start fill in parameters. +- if ((Idx !=0) && (pBAEntry->TID == TID) && (pBAEntry->ORI_BA_Status == Originator_WaitRes)) +- { +- pBAEntry->BAWinSize = min(pBAEntry->BAWinSize, ((UCHAR)pFrame->BaParm.BufSize)); +- BA_MaxWinSizeReasign(pAd, pEntry, &pBAEntry->BAWinSize); +- +- pBAEntry->TimeOutValue = pFrame->TimeOutValue; +- pBAEntry->ORI_BA_Status = Originator_Done; +- pAd->BATable.numDoneOriginator ++; +- +- // reset sequence number +- pBAEntry->Sequence = BA_ORI_INIT_SEQ; +- // Set Bitmap flag. +- pEntry->TXBAbitmap |= (1<ORIBATimer, &Cancelled); +- +- pBAEntry->ORIBATimer.TimerValue = 0; //pFrame->TimeOutValue; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s : TXBAbitmap = %x, BAWinSize = %d, TimeOut = %ld\n", __FUNCTION__, pEntry->TXBAbitmap, +- pBAEntry->BAWinSize, pBAEntry->ORIBATimer.TimerValue)); +- +- // SEND BAR ; +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - BAOriSessionAdd() allocate memory failed \n")); +- return; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pBAEntry->Wcid].Addr, pAd->CurrentAddress); +-#endif // CONFIG_STA_SUPPORT // +- +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pBAEntry->TID; // make sure sequence not clear in DEL funciton. +- MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer2); +- +- +- if (pBAEntry->ORIBATimer.TimerValue) +- RTMPSetTimer(&pBAEntry->ORIBATimer, pBAEntry->ORIBATimer.TimerValue); // in mSec +- } +-} +- +-BOOLEAN BARecSessionAdd( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN PFRAME_ADDBA_REQ pFrame) +-{ +- BA_REC_ENTRY *pBAEntry = NULL; +- BOOLEAN Status = TRUE; +- BOOLEAN Cancelled; +- USHORT Idx; +- UCHAR TID; +- UCHAR BAWinSize; +- //UINT32 Value; +- //UINT offset; +- +- +- ASSERT(pEntry); +- +- // find TID +- TID = pFrame->BaParm.TID; +- +- BAWinSize = min(((UCHAR)pFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); +- +- // Intel patch +- if (BAWinSize == 0) +- { +- BAWinSize = 64; +- } +- +- Idx = pEntry->BARecWcidArray[TID]; +- +- +- if (Idx == 0) +- { +- pBAEntry = BATableAllocRecEntry(pAd, &Idx); +- } +- else +- { +- pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- // flush all pending reordering mpdus +- ba_refresh_reordering_mpdus(pAd, pBAEntry); +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("%s(%ld): Idx = %d, BAWinSize(req %d) = %d\n", __FUNCTION__, pAd->BATable.numAsRecipient, Idx, +- pFrame->BaParm.BufSize, BAWinSize)); +- +- // Start fill in parameters. +- if (pBAEntry != NULL) +- { +- ASSERT(pBAEntry->list.qlen == 0); +- +- pBAEntry->REC_BA_Status = Recipient_HandleRes; +- pBAEntry->BAWinSize = BAWinSize; +- pBAEntry->Wcid = pEntry->Aid; +- pBAEntry->TID = TID; +- pBAEntry->TimeOutValue = pFrame->TimeOutValue; +- pBAEntry->REC_BA_Status = Recipient_Accept; +- // initial sequence number +- pBAEntry->LastIndSeq = RESET_RCV_SEQ; //pFrame->BaStartSeq.field.StartSeq; +- +- DBGPRINT(RT_DEBUG_OFF, ("Start Seq = %08x\n", pFrame->BaStartSeq.field.StartSeq)); +- +- if (pEntry->RXBAbitmap & (1<RECBATimer, &Cancelled); +- } +- else +- { +- RTMPInitTimer(pAd, &pBAEntry->RECBATimer, GET_TIMER_FUNCTION(BARecSessionIdleTimeout), pBAEntry, TRUE); +- } +- +- +- // Set Bitmap flag. +- pEntry->RXBAbitmap |= (1<BARecWcidArray[TID] = Idx; +- +- pEntry->BADeclineBitmap &= ~(1<Aid, TID); +- +- DBGPRINT(RT_DEBUG_TRACE,("MACEntry[%d]RXBAbitmap = 0x%x. BARecWcidArray=%d\n", +- pEntry->Aid, pEntry->RXBAbitmap, pEntry->BARecWcidArray[TID])); +- } +- else +- { +- Status = FALSE; +- DBGPRINT(RT_DEBUG_TRACE,("Can't Accept ADDBA for %02x:%02x:%02x:%02x:%02x:%02x TID = %d\n", +- PRINT_MAC(pEntry->Addr), TID)); +- } +- return(Status); +-} +- +- +-BA_REC_ENTRY *BATableAllocRecEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx) +-{ +- int i; +- BA_REC_ENTRY *pBAEntry = NULL; +- +- +- NdisAcquireSpinLock(&pAd->BATabLock); +- +- if (pAd->BATable.numAsRecipient >= MAX_BARECI_SESSION) +- { +- DBGPRINT(RT_DEBUG_OFF, ("BA Recipeint Session (%ld) > %d\n", +- pAd->BATable.numAsRecipient, MAX_BARECI_SESSION)); +- goto done; +- } +- +- // reserve idx 0 to identify BAWcidArray[TID] as empty +- for (i=1; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { +- pBAEntry =&pAd->BATable.BARecEntry[i]; +- if ((pBAEntry->REC_BA_Status == Recipient_NONE)) +- { +- // get one +- pAd->BATable.numAsRecipient++; +- pBAEntry->REC_BA_Status = Recipient_USED; +- *Idx = i; +- break; +- } +- } +- +-done: +- NdisReleaseSpinLock(&pAd->BATabLock); +- return pBAEntry; +-} +- +-BA_ORI_ENTRY *BATableAllocOriEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx) +-{ +- int i; +- BA_ORI_ENTRY *pBAEntry = NULL; +- +- NdisAcquireSpinLock(&pAd->BATabLock); +- +- if (pAd->BATable.numAsOriginator >= (MAX_LEN_OF_BA_ORI_TABLE)) +- { +- goto done; +- } +- +- // reserve idx 0 to identify BAWcidArray[TID] as empty +- for (i=1; iBATable.BAOriEntry[i]; +- if ((pBAEntry->ORI_BA_Status == Originator_NONE)) +- { +- // get one +- pAd->BATable.numAsOriginator++; +- pBAEntry->ORI_BA_Status = Originator_USED; +- pBAEntry->pAdapter = pAd; +- *Idx = i; +- break; +- } +- } +- +-done: +- NdisReleaseSpinLock(&pAd->BATabLock); +- return pBAEntry; +-} +- +- +-VOID BATableFreeOriEntry( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Idx) +-{ +- BA_ORI_ENTRY *pBAEntry = NULL; +- MAC_TABLE_ENTRY *pEntry; +- +- +- if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) +- return; +- +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; +- +- if (pBAEntry->ORI_BA_Status != Originator_NONE) +- { +- pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; +- pEntry->BAOriWcidArray[pBAEntry->TID] = 0; +- +- +- NdisAcquireSpinLock(&pAd->BATabLock); +- if (pBAEntry->ORI_BA_Status == Originator_Done) +- { +- pAd->BATable.numDoneOriginator -= 1; +- pEntry->TXBAbitmap &= (~(1<<(pBAEntry->TID) )); +- DBGPRINT(RT_DEBUG_TRACE, ("BATableFreeOriEntry numAsOriginator= %ld\n", pAd->BATable.numAsRecipient)); +- // Erase Bitmap flag. +- } +- +- ASSERT(pAd->BATable.numAsOriginator != 0); +- +- pAd->BATable.numAsOriginator -= 1; +- +- pBAEntry->ORI_BA_Status = Originator_NONE; +- pBAEntry->Token = 0; +- NdisReleaseSpinLock(&pAd->BATabLock); +- } +-} +- +- +-VOID BATableFreeRecEntry( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Idx) +-{ +- BA_REC_ENTRY *pBAEntry = NULL; +- MAC_TABLE_ENTRY *pEntry; +- +- +- if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_REC_TABLE)) +- return; +- +- pBAEntry =&pAd->BATable.BARecEntry[Idx]; +- +- if (pBAEntry->REC_BA_Status != Recipient_NONE) +- { +- pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; +- pEntry->BARecWcidArray[pBAEntry->TID] = 0; +- +- NdisAcquireSpinLock(&pAd->BATabLock); +- +- ASSERT(pAd->BATable.numAsRecipient != 0); +- +- pAd->BATable.numAsRecipient -= 1; +- +- pBAEntry->REC_BA_Status = Recipient_NONE; +- NdisReleaseSpinLock(&pAd->BATabLock); +- } +-} +- +- +-VOID BAOriSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive, +- IN BOOLEAN bForceSend) +-{ +- ULONG Idx = 0; +- BA_ORI_ENTRY *pBAEntry; +- BOOLEAN Cancelled; +- +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- { +- return; +- } +- +- // +- // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). +- // +- Idx = pAd->MacTab.Content[Wcid].BAOriWcidArray[TID]; +- if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) +- { +- if (bForceSend == TRUE) +- { +- // force send specified TID DelBA +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = TID; +- DelbaReq.Initiator = ORIGINATOR; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(bForceSend):alloc memory failed!\n", __FUNCTION__)); +- } +- } +- +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>Wcid=%d.TID=%d \n", __FUNCTION__, Wcid, TID)); +- +- pBAEntry = &pAd->BATable.BAOriEntry[Idx]; +- DBGPRINT(RT_DEBUG_TRACE,("\t===>Idx = %ld, Wcid=%d.TID=%d, ORI_BA_Status = %d \n", Idx, Wcid, TID, pBAEntry->ORI_BA_Status)); +- // +- // Prepare DelBA action frame and send to the peer. +- // +- if ((bPassive == FALSE) && (TID == pBAEntry->TID) && (pBAEntry->ORI_BA_Status == Originator_Done)) +- { +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = pBAEntry->TID; +- DelbaReq.Initiator = ORIGINATOR; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __FUNCTION__)); +- return; +- } +- } +- RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); +- BATableFreeOriEntry(pAd, Idx); +- +- if (bPassive) +- { +- //BAOriSessionSetUp(pAd, &pAd->MacTab.Content[Wcid], TID, 0, 10000, TRUE); +- } +-} +- +-VOID BARecSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive) +-{ +- ULONG Idx = 0; +- BA_REC_ENTRY *pBAEntry; +- +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- { +- return; +- } +- +- // +- // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). +- // +- Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; +- if (Idx == 0) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>Wcid=%d.TID=%d \n", __FUNCTION__, Wcid, TID)); +- +- +- pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- DBGPRINT(RT_DEBUG_TRACE,("\t===>Idx = %ld, Wcid=%d.TID=%d, REC_BA_Status = %d \n", Idx, Wcid, TID, pBAEntry->REC_BA_Status)); +- // +- // Prepare DelBA action frame and send to the peer. +- // +- if ((TID == pBAEntry->TID) && (pBAEntry->REC_BA_Status == Recipient_Accept)) +- { +- MLME_DELBA_REQ_STRUCT DelbaReq; +- BOOLEAN Cancelled; +- //ULONG offset; +- //UINT32 VALUE; +- +- RTMPCancelTimer(&pBAEntry->RECBATimer, &Cancelled); +- +- // +- // 1. Send DELBA Action Frame +- // +- if (bPassive == FALSE) +- { +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = TID; +- DelbaReq.Initiator = RECIPIENT; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __FUNCTION__)); +- return; +- } +- } +- +- +- // +- // 2. Free resource of BA session +- // +- // flush all pending reordering mpdus +- ba_refresh_reordering_mpdus(pAd, pBAEntry); +- +- NdisAcquireSpinLock(&pAd->BATabLock); +- +- // Erase Bitmap flag. +- pBAEntry->LastIndSeq = RESET_RCV_SEQ; +- pBAEntry->BAWinSize = 0; +- // Erase Bitmap flag at software mactable +- pAd->MacTab.Content[Wcid].RXBAbitmap &= (~(1<<(pBAEntry->TID))); +- pAd->MacTab.Content[Wcid].BARecWcidArray[TID] = 0; +- +- RTMP_DEL_BA_SESSION_FROM_ASIC(pAd, Wcid, TID); +- +- NdisReleaseSpinLock(&pAd->BATabLock); +- +- } +- +- BATableFreeRecEntry(pAd, Idx); +-} +- +-VOID BASessionTearDownALL( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid) +-{ +- int i; +- +- for (i=0; ipAdapter; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Do nothing if monitor mode is on +- if (MONITOR_ON(pAd)) +- return; +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RALINK_ATE +- // Nothing to do in ATE mode. +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; +- +- if ((pBAEntry->ORI_BA_Status == Originator_WaitRes) && (pBAEntry->Token < ORI_SESSION_MAX_RETRY)) +- { +- MLME_ADDBA_REQ_STRUCT AddbaReq; +- +- NdisZeroMemory(&AddbaReq, sizeof(AddbaReq)); +- COPY_MAC_ADDR(AddbaReq.pAddr, pEntry->Addr); +- AddbaReq.Wcid = (UCHAR)(pEntry->Aid); +- AddbaReq.TID = pBAEntry->TID; +- AddbaReq.BaBufSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; +- AddbaReq.TimeOutValue = 0; +- AddbaReq.Token = pBAEntry->Token; +- MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID)&AddbaReq); +- RTMP_MLME_HANDLER(pAd); +- DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) : Send ADD BA again\n", pBAEntry->Token)); +- +- pBAEntry->Token++; +- RTMPSetTimer(&pBAEntry->ORIBATimer, ORI_BA_SESSION_TIMEOUT); +- } +- else +- { +- BATableFreeOriEntry(pAd, pEntry->BAOriWcidArray[pBAEntry->TID]); +- } +-} +- +-/* +- ========================================================================== +- Description: +- Retry sending ADDBA Reqest. +- +- IRQL = DISPATCH_LEVEL +- +- Parametrs: +- p8023Header: if this is already 802.3 format, p8023Header is NULL +- +- Return : TRUE if put into rx reordering buffer, shouldn't indicaterxhere. +- FALSE , then continue indicaterx at this moment. +- ========================================================================== +- */ +-VOID BARecSessionIdleTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- +- BA_REC_ENTRY *pBAEntry = (BA_REC_ENTRY *)FunctionContext; +- PRTMP_ADAPTER pAd; +- ULONG Now32; +- +- if (pBAEntry == NULL) +- return; +- +- if ((pBAEntry->REC_BA_Status == Recipient_Accept)) +- { +- NdisGetSystemUpTime(&Now32); +- +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer + REC_BA_SESSION_IDLE_TIMEOUT))) +- { +- pAd = pBAEntry->pAdapter; +- // flush all pending reordering mpdus +- ba_refresh_reordering_mpdus(pAd, pBAEntry); +- DBGPRINT(RT_DEBUG_OFF, ("%ld: REC BA session Timeout\n", Now32)); +- } +- } +-} +- +- +-VOID PeerAddBAReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- // 7.4.4.1 +- //ULONG Idx; +- UCHAR Status = 1; +- UCHAR pAddr[6]; +- FRAME_ADDBA_RSP ADDframe; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- PFRAME_ADDBA_REQ pAddreqFrame = NULL; +- //UCHAR BufSize; +- ULONG FrameLen; +- PULONG ptemp; +- PMAC_TABLE_ENTRY pMacEntry; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s ==> (Wcid = %d)\n", __FUNCTION__, Elem->Wcid)); +- +- //hex_dump("AddBAReq", Elem->Msg, Elem->MsgLen); +- +- //ADDBA Request from unknown peer, ignore this. +- if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +- return; +- +- pMacEntry = &pAd->MacTab.Content[Elem->Wcid]; +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerAddBAReqAction----> \n")); +- ptemp = (PULONG)Elem->Msg; +- //DBGPRINT_RAW(RT_DEBUG_EMU, ("%08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x\n", *(ptemp), *(ptemp+1), *(ptemp+2), *(ptemp+3), *(ptemp+4), *(ptemp+5), *(ptemp+6), *(ptemp+7), *(ptemp+8))); +- +- if (PeerAddBAReqActionSanity(pAd, Elem->Msg, Elem->MsgLen, pAddr)) +- { +- +- if ((pAd->CommonCfg.bBADecline == FALSE) && IS_HT_STA(pMacEntry)) +- { +- pAddreqFrame = (PFRAME_ADDBA_REQ)(&Elem->Msg[0]); +- DBGPRINT(RT_DEBUG_OFF, ("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid)); +- if (BARecSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], pAddreqFrame)) +- Status = 0; +- else +- Status = 38; // more parameters have invalid values +- } +- else +- { +- Status = 37; // the request has been declined. +- } +- } +- +- if (pAd->MacTab.Content[Elem->Wcid].ValidAsCLI) +- ASSERT(pAd->MacTab.Content[Elem->Wcid].Sst == SST_ASSOC); +- +- pAddreqFrame = (PFRAME_ADDBA_REQ)(&Elem->Msg[0]); +- // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - PeerBAAction() allocate memory failed \n")); +- return; +- } +- +- NdisZeroMemory(&ADDframe, sizeof(FRAME_ADDBA_RSP)); +- // 2-1. Prepare ADDBA Response frame. +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#ifdef QOS_DLS_SUPPORT +- if (pAd->MacTab.Content[Elem->Wcid].ValidAsDls) +- ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- else +-#endif // QOS_DLS_SUPPORT // +- ActHeaderInit(pAd, &ADDframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr); +- } +-#endif // CONFIG_STA_SUPPORT // +- ADDframe.Category = CATEGORY_BA; +- ADDframe.Action = ADDBA_RESP; +- ADDframe.Token = pAddreqFrame->Token; +- // What is the Status code?? need to check. +- ADDframe.StatusCode = Status; +- ADDframe.BaParm.BAPolicy = IMMED_BA; +- ADDframe.BaParm.AMSDUSupported = 0; +- ADDframe.BaParm.TID = pAddreqFrame->BaParm.TID; +- ADDframe.BaParm.BufSize = min(((UCHAR)pAddreqFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); +- if (ADDframe.BaParm.BufSize == 0) +- { +- ADDframe.BaParm.BufSize = 64; +- } +- ADDframe.TimeOutValue = 0; //pAddreqFrame->TimeOutValue; +- +- *(USHORT *)(&ADDframe.BaParm) = cpu2le16(*(USHORT *)(&ADDframe.BaParm)); +- ADDframe.StatusCode = cpu2le16(ADDframe.StatusCode); +- ADDframe.TimeOutValue = cpu2le16(ADDframe.TimeOutValue); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_RSP), &ADDframe, +- END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s(%d): TID(%d), BufSize(%d) <== \n", __FUNCTION__, Elem->Wcid, ADDframe.BaParm.TID, +- ADDframe.BaParm.BufSize)); +-} +- +- +-VOID PeerAddBARspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- //UCHAR Idx, i; +- //PUCHAR pOutBuffer = NULL; +- PFRAME_ADDBA_RSP pFrame = NULL; +- //PBA_ORI_ENTRY pBAEntry; +- +- //ADDBA Response from unknown peer, ignore this. +- if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s ==> Wcid(%d)\n", __FUNCTION__, Elem->Wcid)); +- +- //hex_dump("PeerAddBARspAction()", Elem->Msg, Elem->MsgLen); +- +- if (PeerAddBARspActionSanity(pAd, Elem->Msg, Elem->MsgLen)) +- { +- pFrame = (PFRAME_ADDBA_RSP)(&Elem->Msg[0]); +- +- DBGPRINT(RT_DEBUG_TRACE, ("\t\t StatusCode = %d\n", pFrame->StatusCode)); +- switch (pFrame->StatusCode) +- { +- case 0: +- // I want a BAsession with this peer as an originator. +- BAOriSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], pFrame); +- break; +- default: +- // check status == USED ??? +- BAOriSessionTearDown(pAd, Elem->Wcid, pFrame->BaParm.TID, TRUE, FALSE); +- break; +- } +- // Rcv Decline StatusCode +- if ((pFrame->StatusCode == 37) +-#ifdef CONFIG_STA_SUPPORT +- || ((pAd->OpMode == OPMODE_STA) && STA_TGN_WIFI_ON(pAd) && (pFrame->StatusCode != 0)) +-#endif // CONFIG_STA_SUPPORT // +- ) +- { +- pAd->MacTab.Content[Elem->Wcid].BADeclineBitmap |= 1<BaParm.TID; +- } +- } +-} +- +-VOID PeerDelBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- +-{ +- //UCHAR Idx; +- //PUCHAR pOutBuffer = NULL; +- PFRAME_DELBA_REQ pDelFrame = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s ==>\n", __FUNCTION__)); +- //DELBA Request from unknown peer, ignore this. +- if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) +- { +- pDelFrame = (PFRAME_DELBA_REQ)(&Elem->Msg[0]); +- if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> ORIGINATOR\n")); +- BARecSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n", pDelFrame->ReasonCode)); +- //hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen); +- BAOriSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE, FALSE); +- } +- } +-} +- +- +-BOOLEAN CntlEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, +- IN PFRAME_BA_REQ pMsg) +-{ +- PFRAME_BA_REQ pFrame = pMsg; +- //PRTMP_REORDERBUF pBuffer; +- //PRTMP_REORDERBUF pDmaBuf; +- PBA_REC_ENTRY pBAEntry; +- //BOOLEAN Result; +- ULONG Idx; +- //UCHAR NumRxPkt; +- UCHAR TID;//, i; +- +- TID = (UCHAR)pFrame->BARControl.TID; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s(): BAR-Wcid(%ld), Tid (%d)\n", __FUNCTION__, Wcid, TID)); +- //hex_dump("BAR", (PCHAR) pFrame, MsgLen); +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return FALSE; +- +- // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { +- DBGPRINT_ERR(("CntlEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); +- return FALSE; +- } +- else if (MsgLen != sizeof(FRAME_BA_REQ)) +- { +- DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); +- return FALSE; +- } +- else if (MsgLen != sizeof(FRAME_BA_REQ)) +- { +- DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); +- return FALSE; +- } +- +- if ((Wcid < MAX_LEN_OF_MAC_TABLE) && (TID < 8)) +- { +- // if this receiving packet is from SA that is in our OriEntry. Since WCID <9 has direct mapping. no need search. +- Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; +- pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- } +- else +- { +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("BAR(%ld) : Tid (%d) - %04x:%04x\n", Wcid, TID, pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq )); +- +- if (SEQ_SMALLER(pBAEntry->LastIndSeq, pFrame->BAStartingSeq.field.StartSeq, MAXSEQ)) +- { +- //DBGPRINT(RT_DEBUG_TRACE, ("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, pFrame->BAStartingSeq.field.StartSeq); +- pBAEntry->LastIndSeq = (pFrame->BAStartingSeq.field.StartSeq == 0) ? MAXSEQ :(pFrame->BAStartingSeq.field.StartSeq -1); +- } +- //ba_refresh_reordering_mpdus(pAd, pBAEntry); +- return TRUE; +-} +- +-/* +-Description : Send PSMP Action frame If PSMP mode switches. +-*/ +-VOID SendPSMPAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR Psmp) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- //ULONG Idx; +- FRAME_PSMP_ACTION Frame; +- ULONG FrameLen; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n")); +- return; +- } +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[Wcid].Addr); +-#endif // CONFIG_STA_SUPPORT // +- +- Frame.Category = CATEGORY_HT; +- Frame.Action = SMPS_ACTION; +- switch (Psmp) +- { +- case MMPS_ENABLE: +-#ifdef RT30xx +- if (IS_RT30xx(pAd) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { +- RTMP_ASIC_MMPS_DISABLE(pAd); +- } +-#endif // RT30xx // +- Frame.Psmp = 0; +- break; +- case MMPS_DYNAMIC: +- Frame.Psmp = 3; +- break; +- case MMPS_STATIC: +-#ifdef RT30xx +- if (IS_RT30xx(pAd) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { +- RTMP_ASIC_MMPS_ENABLE(pAd); +- } +-#endif // RT30xx // +- Frame.Psmp = 1; +- break; +- } +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_PSMP_ACTION), &Frame, +- END_OF_ARGS); +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR,("HT - SendPSMPAction( %d ) \n", Frame.Psmp)); +-} +- +- +-#define RADIO_MEASUREMENT_REQUEST_ACTION 0 +- +-typedef struct PACKED +-{ +- UCHAR RegulatoryClass; +- UCHAR ChannelNumber; +- USHORT RandomInterval; +- USHORT MeasurementDuration; +- UCHAR MeasurementMode; +- UCHAR BSSID[MAC_ADDR_LEN]; +- UCHAR ReportingCondition; +- UCHAR Threshold; +- UCHAR SSIDIE[2]; // 2 byte +-} BEACON_REQUEST; +- +-typedef struct PACKED +-{ +- UCHAR ID; +- UCHAR Length; +- UCHAR Token; +- UCHAR RequestMode; +- UCHAR Type; +-} MEASUREMENT_REQ; +- +- +- +- +-void convert_reordering_packet_to_preAMSDU_or_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- PNDIS_PACKET pRxPkt; +- UCHAR Header802_3[LENGTH_802_3]; +- +- // 1. get 802.3 Header +- // 2. remove LLC +- // a. pointer pRxBlk->pData to payload +- // b. modify pRxBlk->DataSize +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); +-#endif // CONFIG_STA_SUPPORT // +- +- ASSERT(pRxBlk->pRxPacket); +- pRxPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); +- +- SET_OS_PKT_NETDEV(pRxPkt, get_netdev_from_bssid(pAd, FromWhichBSSID)); +- SET_OS_PKT_DATAPTR(pRxPkt, pRxBlk->pData); +- SET_OS_PKT_LEN(pRxPkt, pRxBlk->DataSize); +- SET_OS_PKT_DATATAIL(pRxPkt, pRxBlk->pData, pRxBlk->DataSize); +- +- // +- // copy 802.3 header, if necessary +- // +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef LINUX +- NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3); +-#endif +- } +-#endif // CONFIG_STA_SUPPORT // +- } +-} +- +- +-#define INDICATE_LEGACY_OR_AMSDU(_pAd, _pRxBlk, _fromWhichBSSID) \ +- do \ +- { \ +- if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_AMSDU)) \ +- { \ +- Indicate_AMSDU_Packet(_pAd, _pRxBlk, _fromWhichBSSID); \ +- } \ +- else if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_EAP)) \ +- { \ +- Indicate_EAPOL_Packet(_pAd, _pRxBlk, _fromWhichBSSID); \ +- } \ +- else \ +- { \ +- Indicate_Legacy_Packet(_pAd, _pRxBlk, _fromWhichBSSID); \ +- } \ +- } while (0); +- +- +- +-static VOID ba_enqueue_reordering_packet( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- struct reordering_mpdu *mpdu_blk; +- UINT16 Sequence = (UINT16) pRxBlk->pHeader->Sequence; +- +- mpdu_blk = ba_mpdu_blk_alloc(pAd); +- if ((mpdu_blk != NULL) && +- (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) +- { +- // Write RxD buffer address & allocated buffer length +- NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- +- mpdu_blk->Sequence = Sequence; +- +- mpdu_blk->bAMSDU = RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU); +- +- convert_reordering_packet_to_preAMSDU_or_802_3_packet(pAd, pRxBlk, FromWhichBSSID); +- +- STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); +- +- // +- // it is necessary for reordering packet to record +- // which BSS it come from +- // +- RTMP_SET_PACKET_IF(pRxBlk->pRxPacket, FromWhichBSSID); +- +- mpdu_blk->pPacket = pRxBlk->pRxPacket; +- +- if (ba_reordering_mpdu_insertsorted(&pBAEntry->list, mpdu_blk) == FALSE) +- { +- // had been already within reordering list +- // don't indicate +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_SUCCESS); +- ba_mpdu_blk_free(pAd, mpdu_blk); +- } +- +- ASSERT((0<= pBAEntry->list.qlen) && (pBAEntry->list.qlen <= pBAEntry->BAWinSize)); +- NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!! (%d) Can't allocate reordering mpdu blk\n", +- pBAEntry->list.qlen)); +- /* +- * flush all pending reordering mpdus +- * and receving mpdu to upper layer +- * make tcp/ip to take care reordering mechanism +- */ +- //ba_refresh_reordering_mpdus(pAd, pBAEntry); +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); +- +- pBAEntry->LastIndSeq = Sequence; +- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- Indicate this packet to upper layer or put it into reordering buffer +- +- Parametrs: +- pRxBlk : carry necessary packet info 802.11 format +- FromWhichBSSID : the packet received from which BSS +- +- Return : +- none +- +- Note : +- the packet queued into reordering buffer need to cover to 802.3 format +- or pre_AMSDU format +- ========================================================================== +- */ +- +-VOID Indicate_AMPDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- USHORT Idx; +- PBA_REC_ENTRY pBAEntry = NULL; +- UINT16 Sequence = pRxBlk->pHeader->Sequence; +- ULONG Now32; +- UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; +- UCHAR TID = pRxBlk->pRxWI->TID; +- +- +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) && (pRxBlk->DataSize > MAX_RX_PKT_LEN)) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- +- +- if (Wcid < MAX_LEN_OF_MAC_TABLE) +- { +- Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; +- if (Idx == 0) +- { +- /* Rec BA Session had been torn down */ +- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +- return; +- } +- pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- } +- else +- { +- // impossible !!! +- ASSERT(0); +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- ASSERT(pBAEntry); +- +- // update last rx time +- NdisGetSystemUpTime(&Now32); +- +- pBAEntry->rcvSeq = Sequence; +- +- +- ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32); +- pBAEntry->LastIndSeqAtTimer = Now32; +- +- // +- // Reset Last Indicate Sequence +- // +- if (pBAEntry->LastIndSeq == RESET_RCV_SEQ) +- { +- ASSERT((pBAEntry->list.qlen == 0) && (pBAEntry->list.next == NULL)); +- +- // reset rcv sequence of BA session +- pBAEntry->LastIndSeq = Sequence; +- pBAEntry->LastIndSeqAtTimer = Now32; +- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +- return; +- } +- +- // +- // I. Check if in order. +- // +- if (SEQ_STEPONE(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) +- { +- USHORT LastIndSeq; +- +- pBAEntry->LastIndSeq = Sequence; +- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +- LastIndSeq = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, pBAEntry->LastIndSeq); +- if (LastIndSeq != RESET_RCV_SEQ) +- { +- pBAEntry->LastIndSeq = LastIndSeq; +- } +- pBAEntry->LastIndSeqAtTimer = Now32; +- } +- // +- // II. Drop Duplicated Packet +- // +- else if (Sequence == pBAEntry->LastIndSeq) +- { +- +- // drop and release packet +- pBAEntry->nDropPacket++; +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- } +- // +- // III. Drop Old Received Packet +- // +- else if (SEQ_SMALLER(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) +- { +- +- // drop and release packet +- pBAEntry->nDropPacket++; +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- } +- // +- // IV. Receive Sequence within Window Size +- // +- else if (SEQ_SMALLER(Sequence, (((pBAEntry->LastIndSeq+pBAEntry->BAWinSize+1)) & MAXSEQ), MAXSEQ)) +- { +- ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, FromWhichBSSID); +- } +- // +- // V. Receive seq surpasses Win(lastseq + nMSDU). So refresh all reorder buffer +- // +- else +- { +- LONG WinStartSeq, TmpSeq; +- +- +- TmpSeq = Sequence - (pBAEntry->BAWinSize) -1; +- if (TmpSeq < 0) +- { +- TmpSeq = (MAXSEQ+1) + TmpSeq; +- } +- WinStartSeq = (TmpSeq+1) & MAXSEQ; +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, WinStartSeq); +- pBAEntry->LastIndSeq = WinStartSeq; //TmpSeq; +- +- pBAEntry->LastIndSeqAtTimer = Now32; +- +- ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, FromWhichBSSID); +- +- TmpSeq = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, pBAEntry->LastIndSeq); +- if (TmpSeq != RESET_RCV_SEQ) +- { +- pBAEntry->LastIndSeq = TmpSeq; +- } +- } +-} +- +-#endif // DOT11_N_SUPPORT // +diff --git a/drivers/staging/rt3090/common/cmm_aes.c b/drivers/staging/rt3090/common/cmm_aes.c +deleted file mode 100644 +index 4ccbbbf..0000000 +--- a/drivers/staging/rt3090/common/cmm_aes.c ++++ /dev/null +@@ -1,1560 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_aes.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Wu 02-25-02 Initial +-*/ +- +-#include "../rt_config.h" +- +- +-typedef struct +-{ +- UINT32 erk[64]; /* encryption round keys */ +- UINT32 drk[64]; /* decryption round keys */ +- int nr; /* number of rounds */ +-} +-aes_context; +- +-/*****************************/ +-/******** SBOX Table *********/ +-/*****************************/ +- +-UCHAR SboxTable[256] = +-{ +- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, +- 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, +- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +- 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, +- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, +- 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, +- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, +- 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, +- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, +- 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, +- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, +- 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, +- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, +- 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, +- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, +- 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, +- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, +- 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, +- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, +- 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, +- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, +- 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, +- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, +- 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, +- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, +- 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, +- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, +- 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, +- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, +- 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, +- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, +- 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +-}; +- +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<4; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<16; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-UCHAR RTMPCkipSbox( +- IN UCHAR a) +-{ +- return SboxTable[(int)a]; +-} +- +-VOID next_key( +- IN PUCHAR key, +- IN INT round) +-{ +- UCHAR rcon; +- UCHAR sbox_key[4]; +- UCHAR rcon_table[12] = +- { +- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +- 0x1b, 0x36, 0x36, 0x36 +- }; +- +- sbox_key[0] = RTMPCkipSbox(key[13]); +- sbox_key[1] = RTMPCkipSbox(key[14]); +- sbox_key[2] = RTMPCkipSbox(key[15]); +- sbox_key[3] = RTMPCkipSbox(key[12]); +- +- rcon = rcon_table[round]; +- +- xor_32(&key[0], sbox_key, &key[0]); +- key[0] = key[0] ^ rcon; +- +- xor_32(&key[4], &key[0], &key[4]); +- xor_32(&key[8], &key[4], &key[8]); +- xor_32(&key[12], &key[8], &key[12]); +-} +- +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0; i< 16; i++) +- { +- out[i] = RTMPCkipSbox(in[i]); +- } +-} +- +-/************************************/ +-/* bitwise_xor() */ +-/* A 128 bit, bitwise exclusive or */ +-/************************************/ +- +-void bitwise_xor(unsigned char *ina, unsigned char *inb, unsigned char *out) +-{ +- int i; +- for (i=0; i<16; i++) +- { +- out[i] = ina[i] ^ inb[i]; +- } +-} +- +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- out[0] = in[0]; +- out[1] = in[5]; +- out[2] = in[10]; +- out[3] = in[15]; +- out[4] = in[4]; +- out[5] = in[9]; +- out[6] = in[14]; +- out[7] = in[3]; +- out[8] = in[8]; +- out[9] = in[13]; +- out[10] = in[2]; +- out[11] = in[7]; +- out[12] = in[12]; +- out[13] = in[1]; +- out[14] = in[6]; +- out[15] = in[11]; +-} +- +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- UCHAR add1b[4]; +- UCHAR add1bf7[4]; +- UCHAR rotl[4]; +- UCHAR swap_halfs[4]; +- UCHAR andf7[4]; +- UCHAR rotr[4]; +- UCHAR temp[4]; +- UCHAR tempb[4]; +- +- for (i=0 ; i<4; i++) +- { +- if ((in[i] & 0x80)== 0x80) +- add1b[i] = 0x1b; +- else +- add1b[i] = 0x00; +- } +- +- swap_halfs[0] = in[2]; /* Swap halfs */ +- swap_halfs[1] = in[3]; +- swap_halfs[2] = in[0]; +- swap_halfs[3] = in[1]; +- +- rotl[0] = in[3]; /* Rotate left 8 bits */ +- rotl[1] = in[0]; +- rotl[2] = in[1]; +- rotl[3] = in[2]; +- +- andf7[0] = in[0] & 0x7f; +- andf7[1] = in[1] & 0x7f; +- andf7[2] = in[2] & 0x7f; +- andf7[3] = in[3] & 0x7f; +- +- for (i = 3; i>0; i--) /* logical shift left 1 bit */ +- { +- andf7[i] = andf7[i] << 1; +- if ((andf7[i-1] & 0x80) == 0x80) +- { +- andf7[i] = (andf7[i] | 0x01); +- } +- } +- andf7[0] = andf7[0] << 1; +- andf7[0] = andf7[0] & 0xfe; +- +- xor_32(add1b, andf7, add1bf7); +- +- xor_32(in, add1bf7, rotr); +- +- temp[0] = rotr[0]; /* Rotate right 8 bits */ +- rotr[0] = rotr[1]; +- rotr[1] = rotr[2]; +- rotr[2] = rotr[3]; +- rotr[3] = temp[0]; +- +- xor_32(add1bf7, rotr, temp); +- xor_32(swap_halfs, rotl,tempb); +- xor_32(temp, tempb, out); +-} +- +- +-/************************************************/ +-/* construct_mic_header1() */ +-/* Builds the first MIC header block from */ +-/* header fields. */ +-/************************************************/ +- +-void construct_mic_header1( +- unsigned char *mic_header1, +- int header_length, +- unsigned char *mpdu) +-{ +- mic_header1[0] = (unsigned char)((header_length - 2) / 256); +- mic_header1[1] = (unsigned char)((header_length - 2) % 256); +- mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */ +- mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */ +- mic_header1[4] = mpdu[4]; /* A1 */ +- mic_header1[5] = mpdu[5]; +- mic_header1[6] = mpdu[6]; +- mic_header1[7] = mpdu[7]; +- mic_header1[8] = mpdu[8]; +- mic_header1[9] = mpdu[9]; +- mic_header1[10] = mpdu[10]; /* A2 */ +- mic_header1[11] = mpdu[11]; +- mic_header1[12] = mpdu[12]; +- mic_header1[13] = mpdu[13]; +- mic_header1[14] = mpdu[14]; +- mic_header1[15] = mpdu[15]; +-} +- +-/************************************************/ +-/* construct_mic_header2() */ +-/* Builds the last MIC header block from */ +-/* header fields. */ +-/************************************************/ +- +-void construct_mic_header2( +- unsigned char *mic_header2, +- unsigned char *mpdu, +- int a4_exists, +- int qc_exists) +-{ +- int i; +- +- for (i = 0; i<16; i++) mic_header2[i]=0x00; +- +- mic_header2[0] = mpdu[16]; /* A3 */ +- mic_header2[1] = mpdu[17]; +- mic_header2[2] = mpdu[18]; +- mic_header2[3] = mpdu[19]; +- mic_header2[4] = mpdu[20]; +- mic_header2[5] = mpdu[21]; +- +- // In Sequence Control field, mute sequence numer bits (12-bit) +- mic_header2[6] = mpdu[22] & 0x0f; /* SC */ +- mic_header2[7] = 0x00; /* mpdu[23]; */ +- +- if ((!qc_exists) & a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ +- +- } +- +- if (qc_exists && (!a4_exists)) +- { +- mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */ +- mic_header2[9] = mpdu[25] & 0x00; +- } +- +- if (qc_exists && a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ +- +- mic_header2[14] = mpdu[30] & 0x0f; +- mic_header2[15] = mpdu[31] & 0x00; +- } +-} +- +- +-/************************************************/ +-/* construct_mic_iv() */ +-/* Builds the MIC IV from header fields and PN */ +-/************************************************/ +- +-void construct_mic_iv( +- unsigned char *mic_iv, +- int qc_exists, +- int a4_exists, +- unsigned char *mpdu, +- unsigned int payload_length, +- unsigned char *pn_vector) +-{ +- int i; +- +- mic_iv[0] = 0x59; +- if (qc_exists && a4_exists) +- mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */ +- if (qc_exists && !a4_exists) +- mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */ +- if (!qc_exists) +- mic_iv[1] = 0x00; +- for (i = 2; i < 8; i++) +- mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */ +-#ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[i - 8]; /* mic_iv[8:13] = PN[0:5] */ +-#else +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */ +-#endif +- i = (payload_length / 256); +- i = (payload_length % 256); +- mic_iv[14] = (unsigned char) (payload_length / 256); +- mic_iv[15] = (unsigned char) (payload_length % 256); +- +-} +- +-/****************************************/ +-/* aes128k128d() */ +-/* Performs a 128 bit AES encrypt with */ +-/* 128 bit data. */ +-/****************************************/ +-void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphertext) +-{ +- int round; +- int i; +- unsigned char intermediatea[16]; +- unsigned char intermediateb[16]; +- unsigned char round_key[16]; +- +- for(i=0; i<16; i++) round_key[i] = key[i]; +- +- for (round = 0; round < 11; round++) +- { +- if (round == 0) +- { +- xor_128(round_key, data, ciphertext); +- next_key(round_key, round); +- } +- else if (round == 10) +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- xor_128(intermediateb, round_key, ciphertext); +- } +- else /* 1 - 9 */ +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- mix_column(&intermediateb[0], &intermediatea[0]); +- mix_column(&intermediateb[4], &intermediatea[4]); +- mix_column(&intermediateb[8], &intermediatea[8]); +- mix_column(&intermediateb[12], &intermediatea[12]); +- xor_128(intermediatea, round_key, ciphertext); +- next_key(round_key, round); +- } +- } +- +-} +- +-void construct_ctr_preload( +- unsigned char *ctr_preload, +- int a4_exists, +- int qc_exists, +- unsigned char *mpdu, +- unsigned char *pn_vector, +- int c) +-{ +- +- int i = 0; +- for (i=0; i<16; i++) ctr_preload[i] = 0x00; +- i = 0; +- +- ctr_preload[0] = 0x01; /* flag */ +- if (qc_exists && a4_exists) ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */ +- if (qc_exists && !a4_exists) ctr_preload[1] = mpdu[24] & 0x0f; +- +- for (i = 2; i < 8; i++) +- ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */ +-#ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[i - 8]; /* ctr_preload[8:13] = PN[0:5] */ +-#else +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ +-#endif +- ctr_preload[14] = (unsigned char) (c / 256); // Ctr +- ctr_preload[15] = (unsigned char) (c % 256); +- +-} +- +-BOOLEAN RTMPSoftDecryptAES( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pWpaKey) +-{ +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR PN[6]; +- UINT payload_len; +- UINT num_blocks; +- UINT payload_remainder; +- USHORT fc; +- UCHAR fc0; +- UCHAR fc1; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- UCHAR aes_out[16]; +- int payload_index; +- UINT i; +- UCHAR ctr_preload[16]; +- UCHAR chain_buffer[16]; +- UCHAR padded_buffer[16]; +- UCHAR mic_iv[16]; +- UCHAR mic_header1[16]; +- UCHAR mic_header2[16]; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE); +-#endif +- +- fc0 = *pData; +- fc1 = *(pData + 1); +- +- fc = *((PUSHORT)pData); +- +- frame_type = ((fc0 >> 2) & 0x03); +- frame_subtype = ((fc0 >> 4) & 0x0f); +- +- from_ds = (fc1 & 0x2) >> 1; +- to_ds = (fc1 & 0x1); +- +- a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); +- +- HeaderLen = 24; +- if (a4_exists) +- HeaderLen += 6; +- +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); +- KeyID = KeyID >> 6; +- +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptAES failed!(KeyID[%d] Length can not be 0)\n", KeyID)); +- return FALSE; +- } +- +- PN[0] = *(pData+ HeaderLen); +- PN[1] = *(pData+ HeaderLen + 1); +- PN[2] = *(pData+ HeaderLen + 4); +- PN[3] = *(pData+ HeaderLen + 5); +- PN[4] = *(pData+ HeaderLen + 6); +- PN[5] = *(pData+ HeaderLen + 7); +- +- payload_len = DataByteCnt - HeaderLen - 8 - 8; // 8 bytes for CCMP header , 8 bytes for MIC +- payload_remainder = (payload_len) % 16; +- num_blocks = (payload_len) / 16; +- +- +- +- // Find start of payload +- payload_index = HeaderLen + 8; //IV+EIV +- +- for (i=0; i< num_blocks; i++) +- { +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- i+1 ); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, pData + payload_index, chain_buffer); +- NdisMoveMemory(pData + payload_index - 8, chain_buffer, 16); +- payload_index += 16; +- } +- +- // +- // If there is a short final block, then pad it +- // encrypt it and copy the unpadded part back +- // +- if (payload_remainder > 0) +- { +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- num_blocks + 1); +- +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder); +- payload_index += payload_remainder; +- } +- +- // +- // Descrypt the MIC +- // +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- 0); +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, 8); +- +- aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- +- NdisMoveMemory(TrailMIC, chain_buffer, 8); +- +- +- // +- // Calculate MIC +- // +- +- //Force the protected frame bit on +- *(pData + 1) = *(pData + 1) | 0x40; +- +- // Find start of payload +- // Because the CCMP header has been removed +- payload_index = HeaderLen; +- +- construct_mic_iv( +- mic_iv, +- qc_exists, +- a4_exists, +- pData, +- payload_len, +- PN); +- +- construct_mic_header1( +- mic_header1, +- HeaderLen, +- pData); +- +- construct_mic_header2( +- mic_header2, +- pData, +- a4_exists, +- qc_exists); +- +- aes128k128d(pWpaKey[KeyID].Key, mic_iv, aes_out); +- bitwise_xor(aes_out, mic_header1, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- bitwise_xor(aes_out, mic_header2, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- +- // iterate through each 16 byte payload block +- for (i = 0; i < num_blocks; i++) +- { +- bitwise_xor(aes_out, pData + payload_index, chain_buffer); +- payload_index += 16; +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- } +- +- // Add on the final payload block if it needs padding +- if (payload_remainder > 0) +- { +- NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); +- +- bitwise_xor(aes_out, padded_buffer, chain_buffer); +- aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); +- } +- +- // aes_out contains padded mic, discard most significant +- // 8 bytes to generate 64 bit MIC +- for (i = 0 ; i < 8; i++) MIC[i] = aes_out[i]; +- +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. +- return FALSE; +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE); +-#endif +- +- return TRUE; +-} +- +-/* ========================= AES En/Decryption ========================== */ +-#ifndef uint8 +-#define uint8 unsigned char +-#endif +- +-#ifndef uint32 +-#define uint32 unsigned int +-#endif +- +-/* forward S-box */ +-static uint32 FSb[256] = +-{ +- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, +- 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, +- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, +- 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, +- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, +- 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, +- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, +- 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, +- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, +- 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, +- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, +- 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, +- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, +- 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, +- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, +- 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, +- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, +- 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, +- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, +- 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, +- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, +- 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, +- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, +- 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, +- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, +- 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, +- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, +- 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, +- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, +- 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, +- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, +- 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 +-}; +- +-/* forward table */ +-#define FT \ +-\ +- V(C6,63,63,A5), V(F8,7C,7C,84), V(EE,77,77,99), V(F6,7B,7B,8D), \ +- V(FF,F2,F2,0D), V(D6,6B,6B,BD), V(DE,6F,6F,B1), V(91,C5,C5,54), \ +- V(60,30,30,50), V(02,01,01,03), V(CE,67,67,A9), V(56,2B,2B,7D), \ +- V(E7,FE,FE,19), V(B5,D7,D7,62), V(4D,AB,AB,E6), V(EC,76,76,9A), \ +- V(8F,CA,CA,45), V(1F,82,82,9D), V(89,C9,C9,40), V(FA,7D,7D,87), \ +- V(EF,FA,FA,15), V(B2,59,59,EB), V(8E,47,47,C9), V(FB,F0,F0,0B), \ +- V(41,AD,AD,EC), V(B3,D4,D4,67), V(5F,A2,A2,FD), V(45,AF,AF,EA), \ +- V(23,9C,9C,BF), V(53,A4,A4,F7), V(E4,72,72,96), V(9B,C0,C0,5B), \ +- V(75,B7,B7,C2), V(E1,FD,FD,1C), V(3D,93,93,AE), V(4C,26,26,6A), \ +- V(6C,36,36,5A), V(7E,3F,3F,41), V(F5,F7,F7,02), V(83,CC,CC,4F), \ +- V(68,34,34,5C), V(51,A5,A5,F4), V(D1,E5,E5,34), V(F9,F1,F1,08), \ +- V(E2,71,71,93), V(AB,D8,D8,73), V(62,31,31,53), V(2A,15,15,3F), \ +- V(08,04,04,0C), V(95,C7,C7,52), V(46,23,23,65), V(9D,C3,C3,5E), \ +- V(30,18,18,28), V(37,96,96,A1), V(0A,05,05,0F), V(2F,9A,9A,B5), \ +- V(0E,07,07,09), V(24,12,12,36), V(1B,80,80,9B), V(DF,E2,E2,3D), \ +- V(CD,EB,EB,26), V(4E,27,27,69), V(7F,B2,B2,CD), V(EA,75,75,9F), \ +- V(12,09,09,1B), V(1D,83,83,9E), V(58,2C,2C,74), V(34,1A,1A,2E), \ +- V(36,1B,1B,2D), V(DC,6E,6E,B2), V(B4,5A,5A,EE), V(5B,A0,A0,FB), \ +- V(A4,52,52,F6), V(76,3B,3B,4D), V(B7,D6,D6,61), V(7D,B3,B3,CE), \ +- V(52,29,29,7B), V(DD,E3,E3,3E), V(5E,2F,2F,71), V(13,84,84,97), \ +- V(A6,53,53,F5), V(B9,D1,D1,68), V(00,00,00,00), V(C1,ED,ED,2C), \ +- V(40,20,20,60), V(E3,FC,FC,1F), V(79,B1,B1,C8), V(B6,5B,5B,ED), \ +- V(D4,6A,6A,BE), V(8D,CB,CB,46), V(67,BE,BE,D9), V(72,39,39,4B), \ +- V(94,4A,4A,DE), V(98,4C,4C,D4), V(B0,58,58,E8), V(85,CF,CF,4A), \ +- V(BB,D0,D0,6B), V(C5,EF,EF,2A), V(4F,AA,AA,E5), V(ED,FB,FB,16), \ +- V(86,43,43,C5), V(9A,4D,4D,D7), V(66,33,33,55), V(11,85,85,94), \ +- V(8A,45,45,CF), V(E9,F9,F9,10), V(04,02,02,06), V(FE,7F,7F,81), \ +- V(A0,50,50,F0), V(78,3C,3C,44), V(25,9F,9F,BA), V(4B,A8,A8,E3), \ +- V(A2,51,51,F3), V(5D,A3,A3,FE), V(80,40,40,C0), V(05,8F,8F,8A), \ +- V(3F,92,92,AD), V(21,9D,9D,BC), V(70,38,38,48), V(F1,F5,F5,04), \ +- V(63,BC,BC,DF), V(77,B6,B6,C1), V(AF,DA,DA,75), V(42,21,21,63), \ +- V(20,10,10,30), V(E5,FF,FF,1A), V(FD,F3,F3,0E), V(BF,D2,D2,6D), \ +- V(81,CD,CD,4C), V(18,0C,0C,14), V(26,13,13,35), V(C3,EC,EC,2F), \ +- V(BE,5F,5F,E1), V(35,97,97,A2), V(88,44,44,CC), V(2E,17,17,39), \ +- V(93,C4,C4,57), V(55,A7,A7,F2), V(FC,7E,7E,82), V(7A,3D,3D,47), \ +- V(C8,64,64,AC), V(BA,5D,5D,E7), V(32,19,19,2B), V(E6,73,73,95), \ +- V(C0,60,60,A0), V(19,81,81,98), V(9E,4F,4F,D1), V(A3,DC,DC,7F), \ +- V(44,22,22,66), V(54,2A,2A,7E), V(3B,90,90,AB), V(0B,88,88,83), \ +- V(8C,46,46,CA), V(C7,EE,EE,29), V(6B,B8,B8,D3), V(28,14,14,3C), \ +- V(A7,DE,DE,79), V(BC,5E,5E,E2), V(16,0B,0B,1D), V(AD,DB,DB,76), \ +- V(DB,E0,E0,3B), V(64,32,32,56), V(74,3A,3A,4E), V(14,0A,0A,1E), \ +- V(92,49,49,DB), V(0C,06,06,0A), V(48,24,24,6C), V(B8,5C,5C,E4), \ +- V(9F,C2,C2,5D), V(BD,D3,D3,6E), V(43,AC,AC,EF), V(C4,62,62,A6), \ +- V(39,91,91,A8), V(31,95,95,A4), V(D3,E4,E4,37), V(F2,79,79,8B), \ +- V(D5,E7,E7,32), V(8B,C8,C8,43), V(6E,37,37,59), V(DA,6D,6D,B7), \ +- V(01,8D,8D,8C), V(B1,D5,D5,64), V(9C,4E,4E,D2), V(49,A9,A9,E0), \ +- V(D8,6C,6C,B4), V(AC,56,56,FA), V(F3,F4,F4,07), V(CF,EA,EA,25), \ +- V(CA,65,65,AF), V(F4,7A,7A,8E), V(47,AE,AE,E9), V(10,08,08,18), \ +- V(6F,BA,BA,D5), V(F0,78,78,88), V(4A,25,25,6F), V(5C,2E,2E,72), \ +- V(38,1C,1C,24), V(57,A6,A6,F1), V(73,B4,B4,C7), V(97,C6,C6,51), \ +- V(CB,E8,E8,23), V(A1,DD,DD,7C), V(E8,74,74,9C), V(3E,1F,1F,21), \ +- V(96,4B,4B,DD), V(61,BD,BD,DC), V(0D,8B,8B,86), V(0F,8A,8A,85), \ +- V(E0,70,70,90), V(7C,3E,3E,42), V(71,B5,B5,C4), V(CC,66,66,AA), \ +- V(90,48,48,D8), V(06,03,03,05), V(F7,F6,F6,01), V(1C,0E,0E,12), \ +- V(C2,61,61,A3), V(6A,35,35,5F), V(AE,57,57,F9), V(69,B9,B9,D0), \ +- V(17,86,86,91), V(99,C1,C1,58), V(3A,1D,1D,27), V(27,9E,9E,B9), \ +- V(D9,E1,E1,38), V(EB,F8,F8,13), V(2B,98,98,B3), V(22,11,11,33), \ +- V(D2,69,69,BB), V(A9,D9,D9,70), V(07,8E,8E,89), V(33,94,94,A7), \ +- V(2D,9B,9B,B6), V(3C,1E,1E,22), V(15,87,87,92), V(C9,E9,E9,20), \ +- V(87,CE,CE,49), V(AA,55,55,FF), V(50,28,28,78), V(A5,DF,DF,7A), \ +- V(03,8C,8C,8F), V(59,A1,A1,F8), V(09,89,89,80), V(1A,0D,0D,17), \ +- V(65,BF,BF,DA), V(D7,E6,E6,31), V(84,42,42,C6), V(D0,68,68,B8), \ +- V(82,41,41,C3), V(29,99,99,B0), V(5A,2D,2D,77), V(1E,0F,0F,11), \ +- V(7B,B0,B0,CB), V(A8,54,54,FC), V(6D,BB,BB,D6), V(2C,16,16,3A) +- +-#define V(a,b,c,d) 0x##a##b##c##d +-static uint32 FT0[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##d##a##b##c +-static uint32 FT1[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##c##d##a##b +-static uint32 FT2[256] = { FT }; +-#undef V +- +-#define V(a,b,c,d) 0x##b##c##d##a +-static uint32 FT3[256] = { FT }; +-#undef V +- +-#undef FT +- +-/* reverse S-box */ +- +-static uint32 RSb[256] = +-{ +- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, +- 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, +- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, +- 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, +- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, +- 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, +- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, +- 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, +- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, +- 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, +- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, +- 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, +- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, +- 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, +- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, +- 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, +- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, +- 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, +- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, +- 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, +- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, +- 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, +- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, +- 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, +- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, +- 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, +- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, +- 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, +- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, +- 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, +- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, +- 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D +-}; +- +-/* reverse table */ +- +-#define RT \ +-\ +- V(51,F4,A7,50), V(7E,41,65,53), V(1A,17,A4,C3), V(3A,27,5E,96), \ +- V(3B,AB,6B,CB), V(1F,9D,45,F1), V(AC,FA,58,AB), V(4B,E3,03,93), \ +- V(20,30,FA,55), V(AD,76,6D,F6), V(88,CC,76,91), V(F5,02,4C,25), \ +- V(4F,E5,D7,FC), V(C5,2A,CB,D7), V(26,35,44,80), V(B5,62,A3,8F), \ +- V(DE,B1,5A,49), V(25,BA,1B,67), V(45,EA,0E,98), V(5D,FE,C0,E1), \ +- V(C3,2F,75,02), V(81,4C,F0,12), V(8D,46,97,A3), V(6B,D3,F9,C6), \ +- V(03,8F,5F,E7), V(15,92,9C,95), V(BF,6D,7A,EB), V(95,52,59,DA), \ +- V(D4,BE,83,2D), V(58,74,21,D3), V(49,E0,69,29), V(8E,C9,C8,44), \ +- V(75,C2,89,6A), V(F4,8E,79,78), V(99,58,3E,6B), V(27,B9,71,DD), \ +- V(BE,E1,4F,B6), V(F0,88,AD,17), V(C9,20,AC,66), V(7D,CE,3A,B4), \ +- V(63,DF,4A,18), V(E5,1A,31,82), V(97,51,33,60), V(62,53,7F,45), \ +- V(B1,64,77,E0), V(BB,6B,AE,84), V(FE,81,A0,1C), V(F9,08,2B,94), \ +- V(70,48,68,58), V(8F,45,FD,19), V(94,DE,6C,87), V(52,7B,F8,B7), \ +- V(AB,73,D3,23), V(72,4B,02,E2), V(E3,1F,8F,57), V(66,55,AB,2A), \ +- V(B2,EB,28,07), V(2F,B5,C2,03), V(86,C5,7B,9A), V(D3,37,08,A5), \ +- V(30,28,87,F2), V(23,BF,A5,B2), V(02,03,6A,BA), V(ED,16,82,5C), \ +- V(8A,CF,1C,2B), V(A7,79,B4,92), V(F3,07,F2,F0), V(4E,69,E2,A1), \ +- V(65,DA,F4,CD), V(06,05,BE,D5), V(D1,34,62,1F), V(C4,A6,FE,8A), \ +- V(34,2E,53,9D), V(A2,F3,55,A0), V(05,8A,E1,32), V(A4,F6,EB,75), \ +- V(0B,83,EC,39), V(40,60,EF,AA), V(5E,71,9F,06), V(BD,6E,10,51), \ +- V(3E,21,8A,F9), V(96,DD,06,3D), V(DD,3E,05,AE), V(4D,E6,BD,46), \ +- V(91,54,8D,B5), V(71,C4,5D,05), V(04,06,D4,6F), V(60,50,15,FF), \ +- V(19,98,FB,24), V(D6,BD,E9,97), V(89,40,43,CC), V(67,D9,9E,77), \ +- V(B0,E8,42,BD), V(07,89,8B,88), V(E7,19,5B,38), V(79,C8,EE,DB), \ +- V(A1,7C,0A,47), V(7C,42,0F,E9), V(F8,84,1E,C9), V(00,00,00,00), \ +- V(09,80,86,83), V(32,2B,ED,48), V(1E,11,70,AC), V(6C,5A,72,4E), \ +- V(FD,0E,FF,FB), V(0F,85,38,56), V(3D,AE,D5,1E), V(36,2D,39,27), \ +- V(0A,0F,D9,64), V(68,5C,A6,21), V(9B,5B,54,D1), V(24,36,2E,3A), \ +- V(0C,0A,67,B1), V(93,57,E7,0F), V(B4,EE,96,D2), V(1B,9B,91,9E), \ +- V(80,C0,C5,4F), V(61,DC,20,A2), V(5A,77,4B,69), V(1C,12,1A,16), \ +- V(E2,93,BA,0A), V(C0,A0,2A,E5), V(3C,22,E0,43), V(12,1B,17,1D), \ +- V(0E,09,0D,0B), V(F2,8B,C7,AD), V(2D,B6,A8,B9), V(14,1E,A9,C8), \ +- V(57,F1,19,85), V(AF,75,07,4C), V(EE,99,DD,BB), V(A3,7F,60,FD), \ +- V(F7,01,26,9F), V(5C,72,F5,BC), V(44,66,3B,C5), V(5B,FB,7E,34), \ +- V(8B,43,29,76), V(CB,23,C6,DC), V(B6,ED,FC,68), V(B8,E4,F1,63), \ +- V(D7,31,DC,CA), V(42,63,85,10), V(13,97,22,40), V(84,C6,11,20), \ +- V(85,4A,24,7D), V(D2,BB,3D,F8), V(AE,F9,32,11), V(C7,29,A1,6D), \ +- V(1D,9E,2F,4B), V(DC,B2,30,F3), V(0D,86,52,EC), V(77,C1,E3,D0), \ +- V(2B,B3,16,6C), V(A9,70,B9,99), V(11,94,48,FA), V(47,E9,64,22), \ +- V(A8,FC,8C,C4), V(A0,F0,3F,1A), V(56,7D,2C,D8), V(22,33,90,EF), \ +- V(87,49,4E,C7), V(D9,38,D1,C1), V(8C,CA,A2,FE), V(98,D4,0B,36), \ +- V(A6,F5,81,CF), V(A5,7A,DE,28), V(DA,B7,8E,26), V(3F,AD,BF,A4), \ +- V(2C,3A,9D,E4), V(50,78,92,0D), V(6A,5F,CC,9B), V(54,7E,46,62), \ +- V(F6,8D,13,C2), V(90,D8,B8,E8), V(2E,39,F7,5E), V(82,C3,AF,F5), \ +- V(9F,5D,80,BE), V(69,D0,93,7C), V(6F,D5,2D,A9), V(CF,25,12,B3), \ +- V(C8,AC,99,3B), V(10,18,7D,A7), V(E8,9C,63,6E), V(DB,3B,BB,7B), \ +- V(CD,26,78,09), V(6E,59,18,F4), V(EC,9A,B7,01), V(83,4F,9A,A8), \ +- V(E6,95,6E,65), V(AA,FF,E6,7E), V(21,BC,CF,08), V(EF,15,E8,E6), \ +- V(BA,E7,9B,D9), V(4A,6F,36,CE), V(EA,9F,09,D4), V(29,B0,7C,D6), \ +- V(31,A4,B2,AF), V(2A,3F,23,31), V(C6,A5,94,30), V(35,A2,66,C0), \ +- V(74,4E,BC,37), V(FC,82,CA,A6), V(E0,90,D0,B0), V(33,A7,D8,15), \ +- V(F1,04,98,4A), V(41,EC,DA,F7), V(7F,CD,50,0E), V(17,91,F6,2F), \ +- V(76,4D,D6,8D), V(43,EF,B0,4D), V(CC,AA,4D,54), V(E4,96,04,DF), \ +- V(9E,D1,B5,E3), V(4C,6A,88,1B), V(C1,2C,1F,B8), V(46,65,51,7F), \ +- V(9D,5E,EA,04), V(01,8C,35,5D), V(FA,87,74,73), V(FB,0B,41,2E), \ +- V(B3,67,1D,5A), V(92,DB,D2,52), V(E9,10,56,33), V(6D,D6,47,13), \ +- V(9A,D7,61,8C), V(37,A1,0C,7A), V(59,F8,14,8E), V(EB,13,3C,89), \ +- V(CE,A9,27,EE), V(B7,61,C9,35), V(E1,1C,E5,ED), V(7A,47,B1,3C), \ +- V(9C,D2,DF,59), V(55,F2,73,3F), V(18,14,CE,79), V(73,C7,37,BF), \ +- V(53,F7,CD,EA), V(5F,FD,AA,5B), V(DF,3D,6F,14), V(78,44,DB,86), \ +- V(CA,AF,F3,81), V(B9,68,C4,3E), V(38,24,34,2C), V(C2,A3,40,5F), \ +- V(16,1D,C3,72), V(BC,E2,25,0C), V(28,3C,49,8B), V(FF,0D,95,41), \ +- V(39,A8,01,71), V(08,0C,B3,DE), V(D8,B4,E4,9C), V(64,56,C1,90), \ +- V(7B,CB,84,61), V(D5,32,B6,70), V(48,6C,5C,74), V(D0,B8,57,42) +- +-#define V(a,b,c,d) 0x##a##b##c##d +-static uint32 RT0[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##d##a##b##c +-static uint32 RT1[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##c##d##a##b +-static uint32 RT2[256] = { RT }; +-#undef V +- +-#define V(a,b,c,d) 0x##b##c##d##a +-static uint32 RT3[256] = { RT }; +-#undef V +- +-#undef RT +- +-/* round constants */ +- +-static uint32 RCON[10] = +-{ +- 0x01000000, 0x02000000, 0x04000000, 0x08000000, +- 0x10000000, 0x20000000, 0x40000000, 0x80000000, +- 0x1B000000, 0x36000000 +-}; +- +-/* key schedule tables */ +- +-static int KT_init = 1; +- +-static uint32 KT0[256]; +-static uint32 KT1[256]; +-static uint32 KT2[256]; +-static uint32 KT3[256]; +- +-/* platform-independant 32-bit integer manipulation macros */ +- +-#define GET_UINT32(n,b,i) \ +-{ \ +- (n) = ( (uint32) (b)[(i) ] << 24 ) \ +- | ( (uint32) (b)[(i) + 1] << 16 ) \ +- | ( (uint32) (b)[(i) + 2] << 8 ) \ +- | ( (uint32) (b)[(i) + 3] ); \ +-} +- +-#define PUT_UINT32(n,b,i) \ +-{ \ +- (b)[(i) ] = (uint8) ( (n) >> 24 ); \ +- (b)[(i) + 1] = (uint8) ( (n) >> 16 ); \ +- (b)[(i) + 2] = (uint8) ( (n) >> 8 ); \ +- (b)[(i) + 3] = (uint8) ( (n) ); \ +-} +- +- +-int rt_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) +-{ +- int i; +- uint32 *RK, *SK; +- +- switch( nbits ) +- { +- case 128: ctx->nr = 10; break; +- case 192: ctx->nr = 12; break; +- case 256: ctx->nr = 14; break; +- default : return( 1 ); +- } +- +- RK = (uint32 *) ctx->erk; +- +- for( i = 0; i < (nbits >> 5); i++ ) +- { +- GET_UINT32( RK[i], key, i * 4 ); +- } +- +- /* setup encryption round keys */ +- +- switch( nbits ) +- { +- case 128: +- +- for( i = 0; i < 10; i++, RK += 4 ) +- { +- RK[4] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 24 ) ] ); +- +- RK[5] = RK[1] ^ RK[4]; +- RK[6] = RK[2] ^ RK[5]; +- RK[7] = RK[3] ^ RK[6]; +- } +- break; +- +- case 192: +- +- for( i = 0; i < 8; i++, RK += 6 ) +- { +- RK[6] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 24 ) ] ); +- +- RK[7] = RK[1] ^ RK[6]; +- RK[8] = RK[2] ^ RK[7]; +- RK[9] = RK[3] ^ RK[8]; +- RK[10] = RK[4] ^ RK[9]; +- RK[11] = RK[5] ^ RK[10]; +- } +- break; +- +- case 256: +- +- for( i = 0; i < 7; i++, RK += 8 ) +- { +- RK[8] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 24 ) ] ); +- +- RK[9] = RK[1] ^ RK[8]; +- RK[10] = RK[2] ^ RK[9]; +- RK[11] = RK[3] ^ RK[10]; +- +- RK[12] = RK[4] ^ +- ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[11] ) ] ); +- +- RK[13] = RK[5] ^ RK[12]; +- RK[14] = RK[6] ^ RK[13]; +- RK[15] = RK[7] ^ RK[14]; +- } +- break; +- } +- +- /* setup decryption round keys */ +- +- if( KT_init ) +- { +- for( i = 0; i < 256; i++ ) +- { +- KT0[i] = RT0[ FSb[i] ]; +- KT1[i] = RT1[ FSb[i] ]; +- KT2[i] = RT2[ FSb[i] ]; +- KT3[i] = RT3[ FSb[i] ]; +- } +- +- KT_init = 0; +- } +- +- SK = (uint32 *) ctx->drk; +- +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- +- for( i = 1; i < ctx->nr; i++ ) +- { +- RK -= 8; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- } +- +- RK -= 8; +- +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- +- return( 0 ); +-} +- +-/* AES 128-bit block encryption routine */ +- +-void rt_aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] ) +-{ +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; +- +- RK = (uint32 *) ctx->erk; +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; +- +-#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ +-{ \ +- RK += 4; \ +- \ +- X0 = RK[0] ^ FT0[ (uint8) ( Y0 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y1 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y2 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y3 ) ]; \ +- \ +- X1 = RK[1] ^ FT0[ (uint8) ( Y1 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y2 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y3 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y0 ) ]; \ +- \ +- X2 = RK[2] ^ FT0[ (uint8) ( Y2 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y3 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y0 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y1 ) ]; \ +- \ +- X3 = RK[3] ^ FT0[ (uint8) ( Y3 >> 24 ) ] ^ \ +- FT1[ (uint8) ( Y0 >> 16 ) ] ^ \ +- FT2[ (uint8) ( Y1 >> 8 ) ] ^ \ +- FT3[ (uint8) ( Y2 ) ]; \ +-} +- +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ +- } +- +- if( ctx->nr > 12 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ +- } +- +- /* last round */ +- +- RK += 4; +- +- X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y3 ) ] ); +- +- X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y0 ) ] ); +- +- X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y1 ) ] ); +- +- X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y2 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); +-} +- +-/* AES 128-bit block decryption routine */ +- +-void rt_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) +-{ +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; +- +- RK = (uint32 *) ctx->drk; +- +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; +- +-#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ +-{ \ +- RK += 4; \ +- \ +- X0 = RK[0] ^ RT0[ (uint8) ( Y0 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y3 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y2 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y1 ) ]; \ +- \ +- X1 = RK[1] ^ RT0[ (uint8) ( Y1 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y0 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y3 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y2 ) ]; \ +- \ +- X2 = RK[2] ^ RT0[ (uint8) ( Y2 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y1 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y0 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y3 ) ]; \ +- \ +- X3 = RK[3] ^ RT0[ (uint8) ( Y3 >> 24 ) ] ^ \ +- RT1[ (uint8) ( Y2 >> 16 ) ] ^ \ +- RT2[ (uint8) ( Y1 >> 8 ) ] ^ \ +- RT3[ (uint8) ( Y0 ) ]; \ +-} +- +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ +- } +- +- if( ctx->nr > 12 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ +- } +- +- /* last round */ +- +- RK += 4; +- +- X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y1 ) ] ); +- +- X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y2 ) ] ); +- +- X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y3 ) ] ); +- +- X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y0 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); +-} +- +-/* +- ========================================================================== +- Description: +- ENCRYPT AES GTK before sending in EAPOL frame. +- AES GTK length = 128 bit, so fix blocks for aes-key-wrap as 2 in this function. +- This function references to RFC 3394 for aes key wrap algorithm. +- Return: +- ========================================================================== +-*/ +-VOID AES_GTK_KEY_WRAP( +- IN UCHAR *key, +- IN UCHAR *plaintext, +- IN UINT32 p_len, +- OUT UCHAR *ciphertext) +-{ +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR R[512]; +- INT num_blocks = p_len/8; // unit:64bits +- INT i, j; +- aes_context aesctx; +- UCHAR xor; +- +- rt_aes_set_key(&aesctx, key, 128); +- +- // Init IA +- for (i = 0; i < 8; i++) +- A[i] = 0xa6; +- +- //Input plaintext +- for (i = 0; i < num_blocks; i++) +- { +- for (j = 0 ; j < 8; j++) +- R[8 * (i + 1) + j] = plaintext[8 * i + j]; +- } +- +- // Key Mix +- for (j = 0; j < 6; j++) +- { +- for(i = 1; i <= num_blocks; i++) +- { +- //phase 1 +- NdisMoveMemory(BIN, A, 8); +- NdisMoveMemory(&BIN[8], &R[8 * i], 8); +- rt_aes_encrypt(&aesctx, BIN, BOUT); +- +- NdisMoveMemory(A, &BOUT[0], 8); +- xor = num_blocks * j + i; +- A[7] = BOUT[7] ^ xor; +- NdisMoveMemory(&R[8 * i], &BOUT[8], 8); +- } +- } +- +- // Output ciphertext +- NdisMoveMemory(ciphertext, A, 8); +- +- for (i = 1; i <= num_blocks; i++) +- { +- for (j = 0 ; j < 8; j++) +- ciphertext[8 * i + j] = R[8 * i + j]; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Misc function to decrypt AES body +- +- Arguments: +- +- Return Value: +- +- Note: +- This function references to RFC 3394 for aes key unwrap algorithm. +- +- ======================================================================== +-*/ +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UINT32 c_len, +- IN UCHAR *ciphertext) +- +-{ +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR xor; +- INT i, j; +- aes_context aesctx; +- UCHAR *R; +- INT num_blocks = c_len/8; // unit:64bits +- +- +- os_alloc_mem(NULL, (PUCHAR *)&R, 512); +- +- if (R == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); +- return; +- } /* End of if */ +- +- // Initialize +- NdisMoveMemory(A, ciphertext, 8); +- //Input plaintext +- for(i = 0; i < (c_len-8); i++) +- { +- R[ i] = ciphertext[i + 8]; +- } +- +- rt_aes_set_key(&aesctx, key, 128); +- +- for(j = 5; j >= 0; j--) +- { +- for(i = (num_blocks-1); i > 0; i--) +- { +- xor = (num_blocks -1 )* j + i; +- NdisMoveMemory(BIN, A, 8); +- BIN[7] = A[7] ^ xor; +- NdisMoveMemory(&BIN[8], &R[(i-1)*8], 8); +- rt_aes_decrypt(&aesctx, BIN, BOUT); +- NdisMoveMemory(A, &BOUT[0], 8); +- NdisMoveMemory(&R[(i-1)*8], &BOUT[8], 8); +- } +- } +- +- // OUTPUT +- for(i = 0; i < c_len; i++) +- { +- plaintext[i] = R[i]; +- } +- +- +- os_free_mem(NULL, R); +-} +- +- +-/* ======= The related function of AES-128-CMAC ======= */ +-VOID leftshift_onebit( +- IN PUCHAR input, +- OUT PUCHAR output) +-{ +- INT i; +- UCHAR overflow = 0; +- +- for (i=15; i>=0; i--) +- { +- output[i] = input[i] << 1; +- output[i] |= overflow; +- overflow = (input[i] & 0x80) ? 1 : 0; +- } +-} +- +-VOID do_padding( +- IN PUCHAR lastb, +- OUT PUCHAR pad, +- IN INT len) +-{ +- INT j; +- +- for (j=0; j<16; j++) +- { +- if (j < len) +- pad[j] = lastb[j]; +- else if (j == len) +- pad[j] = 0x80; +- else +- pad[j] = 0x00; +- } +- +- +-} +- +-/* +- * The Subkey Generation Algorithm +- */ +-VOID generate_subkey( +- IN PUCHAR key, +- OUT PUCHAR K1, +- OUT PUCHAR K2) +-{ +- aes_context aesctx; +- UCHAR aes_128_key[16]; +- UCHAR const_Zero[16]; +- UCHAR tmp[16]; +- UCHAR const_Rb[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87}; +- +- // initial the key material +- memset(const_Zero, 0, 16); +- memset(aes_128_key, 0, 16); +- +- // AES-128 with key is applied to an all-zero input block +- rt_aes_set_key(&aesctx, key, 128); +- rt_aes_encrypt(&aesctx, const_Zero, aes_128_key); +- +- // derive K1(128-bit first subkey) and K2(128-bit second subkey), refer to rfc-4493 ch 2.3 +- if ((aes_128_key[0] & 0x80) == 0) +- { +- leftshift_onebit(aes_128_key, K1); +- } +- else +- { +- leftshift_onebit(aes_128_key, tmp); +- xor_128(tmp, const_Rb, K1); +- } +- +- if ((K1[0] & 0x80) == 0) +- { +- leftshift_onebit(K1, K2); +- } +- else +- { +- leftshift_onebit(K1, tmp); +- xor_128(tmp, const_Rb, K2); +- } +- +-} +- +-/* +- * AES-CMAC Algorithm. (refer to rfc-4493 and SP800-38B) +- * +- * Input : key (128-bit key) +- * input (message to be authenticated) +- * len (length of the message in octets) +- * +- * output: mac (message authentication code) +- */ +-VOID AES_128_CMAC( +- IN PUCHAR key, +- IN PUCHAR input, +- IN INT len, +- OUT PUCHAR mac) +-{ +- UCHAR X[16], Y[16], M_last[16], padded[16]; +- UCHAR K1[16], K2[16]; +- aes_context aesctx; +- INT n, i, flag; +- +- generate_subkey(key, K1, K2); +- +- n = (len+15) / 16; // n is number of rounds +- +- if (n == 0) +- { +- n = 1; +- flag = 0; +- } +- else +- { +- if ((len%16) == 0) +- flag = 1; // indicate that last block is a complete block +- else +- flag = 0; // indicate that last block is not a complete block +- } +- +- if (flag) +- { +- xor_128(&input[16*(n-1)], K1, M_last); +- } +- else +- { +- do_padding(&input[16*(n-1)], padded, len%16); +- xor_128(padded, K2, M_last); +- } +- +- memset(X, 0, 16); +- for (i=0; i5. +- +- // 802.11 HyperLan 2 +- {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783}, +- +- // 2008.04.30 modified +- // The system team has AN to improve the EVM value +- // for channel 102 to 108 for the RT2850/RT2750 dual band solution. +- {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793}, +- {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3}, +- {108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193}, +- +- {110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183}, +- {112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b}, +- {116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3}, +- {118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193}, +- {120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183}, +- {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193}, +- {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b}, // 0x980ed1bb->0x980ed15b required by Rory 20070927 +- {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3}, +- {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b}, +- {134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193}, +- {136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b}, +- {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183}, +- +- // 802.11 UNII +- {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7}, +- {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187}, +- {153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f}, +- {157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f}, +- {159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7}, +- {161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187}, +- {165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197}, +- {167, 0x98402ec4, 0x984c03d2, 0x98179855, 0x9815531f}, +- {169, 0x98402ec4, 0x984c03d2, 0x98179855, 0x98155327}, +- {171, 0x98402ec4, 0x984c03d6, 0x98179855, 0x98155307}, +- {173, 0x98402ec4, 0x984c03d6, 0x98179855, 0x9815530f}, +- +- // Japan +- {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b}, +- {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13}, +- {192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b}, +- {196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23}, +- {208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13}, +- {212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b}, +- {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23}, +- +- // still lack of MMAC(Japan) ch 34,38,42,46 +-}; +-UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); +- +-FREQUENCY_ITEM FreqItems3020[] = +-{ +- /**************************************************/ +- // ISM : 2.4 to 2.483 GHz // +- /**************************************************/ +- // 11g +- /**************************************************/ +- //-CH---N-------R---K----------- +- {1, 241, 2, 2}, +- {2, 241, 2, 7}, +- {3, 242, 2, 2}, +- {4, 242, 2, 7}, +- {5, 243, 2, 2}, +- {6, 243, 2, 7}, +- {7, 244, 2, 2}, +- {8, 244, 2, 7}, +- {9, 245, 2, 2}, +- {10, 245, 2, 7}, +- {11, 246, 2, 2}, +- {12, 246, 2, 7}, +- {13, 247, 2, 2}, +- {14, 248, 2, 4}, +-}; +-UCHAR NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); +- +- +-VOID AsicUpdateAutoFallBackTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRateTable) +-{ +- UCHAR i; +- HT_FBK_CFG0_STRUC HtCfg0; +- HT_FBK_CFG1_STRUC HtCfg1; +- LG_FBK_CFG0_STRUC LgCfg0; +- LG_FBK_CFG1_STRUC LgCfg1; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; +- +- // set to initial value +- HtCfg0.word = 0x65432100; +- HtCfg1.word = 0xedcba988; +- LgCfg0.word = 0xedcba988; +- LgCfg1.word = 0x00002100; +- +- pNextTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1; +- for (i = 1; i < *((PUCHAR) pRateTable); i++) +- { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1+i; +- switch (pCurrTxRate->Mode) +- { +- case 0: //CCK +- break; +- case 1: //OFDM +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- LgCfg0.field.OFDMMCS0FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 1: +- LgCfg0.field.OFDMMCS1FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 2: +- LgCfg0.field.OFDMMCS2FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 3: +- LgCfg0.field.OFDMMCS3FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 4: +- LgCfg0.field.OFDMMCS4FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 5: +- LgCfg0.field.OFDMMCS5FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 6: +- LgCfg0.field.OFDMMCS6FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 7: +- LgCfg0.field.OFDMMCS7FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- } +- } +- break; +-#ifdef DOT11_N_SUPPORT +- case 2: //HT-MIX +- case 3: //HT-GF +- { +- if ((pNextTxRate->Mode >= MODE_HTMIX) && (pCurrTxRate->CurrMCS != pNextTxRate->CurrMCS)) +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- HtCfg0.field.HTMCS0FBK = pNextTxRate->CurrMCS; +- break; +- case 1: +- HtCfg0.field.HTMCS1FBK = pNextTxRate->CurrMCS; +- break; +- case 2: +- HtCfg0.field.HTMCS2FBK = pNextTxRate->CurrMCS; +- break; +- case 3: +- HtCfg0.field.HTMCS3FBK = pNextTxRate->CurrMCS; +- break; +- case 4: +- HtCfg0.field.HTMCS4FBK = pNextTxRate->CurrMCS; +- break; +- case 5: +- HtCfg0.field.HTMCS5FBK = pNextTxRate->CurrMCS; +- break; +- case 6: +- HtCfg0.field.HTMCS6FBK = pNextTxRate->CurrMCS; +- break; +- case 7: +- HtCfg0.field.HTMCS7FBK = pNextTxRate->CurrMCS; +- break; +- case 8: +- HtCfg1.field.HTMCS8FBK = pNextTxRate->CurrMCS; +- break; +- case 9: +- HtCfg1.field.HTMCS9FBK = pNextTxRate->CurrMCS; +- break; +- case 10: +- HtCfg1.field.HTMCS10FBK = pNextTxRate->CurrMCS; +- break; +- case 11: +- HtCfg1.field.HTMCS11FBK = pNextTxRate->CurrMCS; +- break; +- case 12: +- HtCfg1.field.HTMCS12FBK = pNextTxRate->CurrMCS; +- break; +- case 13: +- HtCfg1.field.HTMCS13FBK = pNextTxRate->CurrMCS; +- break; +- case 14: +- HtCfg1.field.HTMCS14FBK = pNextTxRate->CurrMCS; +- break; +- case 15: +- HtCfg1.field.HTMCS15FBK = pNextTxRate->CurrMCS; +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("AsicUpdateAutoFallBackTable: not support CurrMCS=%d\n", pCurrTxRate->CurrMCS)); +- } +- } +- } +- break; +-#endif // DOT11_N_SUPPORT // +- } +- +- pNextTxRate = pCurrTxRate; +- } +- +- RTMP_IO_WRITE32(pAd, HT_FBK_CFG0, HtCfg0.word); +- RTMP_IO_WRITE32(pAd, HT_FBK_CFG1, HtCfg1.word); +- RTMP_IO_WRITE32(pAd, LG_FBK_CFG0, LgCfg0.word); +- RTMP_IO_WRITE32(pAd, LG_FBK_CFG1, LgCfg1.word); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Set MAC register value according operation mode. +- OperationMode AND bNonGFExist are for MM and GF Proteciton. +- If MM or GF mask is not set, those passing argument doesn't not take effect. +- +- Operation mode meaning: +- = 0 : Pure HT, no preotection. +- = 0x01; there may be non-HT devices in both the control and extension channel, protection is optional in BSS. +- = 0x10: No Transmission in 40M is protected. +- = 0x11: Transmission in both 40M and 20M shall be protected +- if (bNonGFExist) +- we should choose not to use GF. But still set correct ASIC registers. +- ======================================================================== +-*/ +-VOID AsicUpdateProtect( +- IN PRTMP_ADAPTER pAd, +- IN USHORT OperationMode, +- IN UCHAR SetMask, +- IN BOOLEAN bDisableBGProtect, +- IN BOOLEAN bNonGFExist) +-{ +- PROT_CFG_STRUC ProtCfg, ProtCfg4; +- UINT32 Protect[6]; +- USHORT offset; +- UCHAR i; +- UINT32 MacReg = 0; +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +-#ifdef DOT11_N_SUPPORT +- if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) +- { +- return; +- } +- +- if (pAd->BATable.numDoneOriginator) +- { +- // +- // enable the RTS/CTS to avoid channel collision +- // +- SetMask = ALLN_SETPROTECT; +- OperationMode = 8; +- } +-#endif // DOT11_N_SUPPORT // +- +- // Config ASIC RTS threshold register +- RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); +- MacReg &= 0xFF0000FF; +- // If the user want disable RtsThreshold and enbale Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 +- if (( +-#ifdef DOT11_N_SUPPORT +- (pAd->CommonCfg.BACapability.field.AmsduEnable) || +-#endif // DOT11_N_SUPPORT // +- (pAd->CommonCfg.bAggregationCapable == TRUE)) +- && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) +- { +- MacReg |= (0x1000 << 8); +- } +- else +- { +- MacReg |= (pAd->CommonCfg.RtsThreshold << 8); +- } +- +- RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); +- +- // Initial common protection settings +- RTMPZeroMemory(Protect, sizeof(Protect)); +- ProtCfg4.word = 0; +- ProtCfg.word = 0; +- ProtCfg.field.TxopAllowGF40 = 1; +- ProtCfg.field.TxopAllowGF20 = 1; +- ProtCfg.field.TxopAllowMM40 = 1; +- ProtCfg.field.TxopAllowMM20 = 1; +- ProtCfg.field.TxopAllowOfdm = 1; +- ProtCfg.field.TxopAllowCck = 1; +- ProtCfg.field.RTSThEn = 1; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- +- // update PHY mode and rate +- if (pAd->CommonCfg.Channel > 14) +- ProtCfg.field.ProtectRate = 0x4000; +- ProtCfg.field.ProtectRate |= pAd->CommonCfg.RtsRate; +- +- // Handle legacy(B/G) protection +- if (bDisableBGProtect) +- { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; +- Protect[0] = ProtCfg.word; +- Protect[1] = ProtCfg.word; +- pAd->FlgCtsEnabled = 0; /* CTS-self is not used */ +- } +- else +- { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected +- Protect[0] = ProtCfg.word; +- ProtCfg.field.ProtectCtrl = ASIC_CTS; // OFDM needs using CCK to protect +- Protect[1] = ProtCfg.word; +- pAd->FlgCtsEnabled = 1; /* CTS-self is used */ +- } +- +-#ifdef DOT11_N_SUPPORT +- // Decide HT frame protection. +- if ((SetMask & ALLN_SETPROTECT) != 0) +- { +- switch(OperationMode) +- { +- case 0x0: +- // NO PROTECT +- // 1.All STAs in the BSS are 20/40 MHz HT +- // 2. in ai 20/40MHz BSS +- // 3. all STAs are 20MHz in a 20MHz BSS +- // Pure HT. no protection. +- +- // MM20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[2] = 0x01744004; +- +- // MM40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[3] = 0x03f44084; +- +- // CF20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[4] = 0x01744004; +- +- // CF40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[5] = 0x03f44084; +- +- if (bNonGFExist) +- { +- // PROT_NAV(19:18) -- 01 (Short NAV protectiion) +- // PROT_CTRL(17:16) -- 01 (RTS/CTS) +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- } +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; +- +- case 1: +- // This is "HT non-member protection mode." +- // If there may be non-HT STAs my BSS +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; +- } +- //Assign Protection method for 20&40 MHz packets +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- +- case 2: +- // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- +- //Assign Protection method for 40MHz packets +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- if (bNonGFExist) +- { +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- } +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; +- +- case 3: +- // HT mixed mode. PROTECT ALL! +- // Assign Rate +- ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. +- ProtCfg4.word = 0x03f44084; +- // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 +- } +- //Assign Protection method for 20&40 MHz packets +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- +- case 8: +- // Special on for Atheros problem n chip. +- Protect[2] = 0x01754004; +- Protect[3] = 0x03f54084; +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- offset = CCK_PROT_CFG; +- for (i = 0;i < 6;i++) +- { +- if ((SetMask & (1<< i))) +- { +- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]); +- } +-} +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN BOOLEAN bScan) +-{ +- ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; +- CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; +- UCHAR index; +- UINT32 Value = 0; //BbpReg, Value; +- RTMP_RF_REGS *RFRegTable; +- UCHAR RFValue; +- +- RFValue = 0; +- // Search Tx power value +- // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list +- // in ChannelList, so use TxPower array instead. +- // +- for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) +- { +- if (Channel == pAd->TxPower[index].Channel) +- { +- TxPwer = pAd->TxPower[index].Power; +- TxPwer2 = pAd->TxPower[index].Power2; +- break; +- } +- } +- +- if (index == MAX_NUM_OF_CHANNELS) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Can't find the Channel#%d \n", Channel)); +- } +- +-#ifdef RT30xx +- // The RF programming sequence is difference between 3xxx and 2xxx +- if ((IS_RT3070(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) || +- (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022))) +- { +- /* modify by WY for Read RF Reg. error */ +- +- for (index = 0; index < NUM_OF_3020_CHNL; index++) +- { +- if (Channel == FreqItems3020[index].Channel) +- { +- // Programming channel parameters +- RT30xxWriteRFRegister(pAd, RF_R02, FreqItems3020[index].N); +- RT30xxWriteRFRegister(pAd, RF_R03, FreqItems3020[index].K); +- RT30xxReadRFRegister(pAd, RF_R06, &RFValue); +- RFValue = (RFValue & 0xFC) | FreqItems3020[index].R; +- RT30xxWriteRFRegister(pAd, RF_R06, RFValue); +- +- // Set Tx0 Power +- RT30xxReadRFRegister(pAd, RF_R12, &RFValue); +- RFValue = (RFValue & 0xE0) | TxPwer; +- RT30xxWriteRFRegister(pAd, RF_R12, RFValue); +- +- // Set Tx1 Power +- RT30xxReadRFRegister(pAd, RF_R13, &RFValue); +- RFValue = (RFValue & 0xE0) | TxPwer2; +- RT30xxWriteRFRegister(pAd, RF_R13, RFValue); +- +- // Tx/Rx Stream setting +- RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- //if (IS_RT3090(pAd)) +- // RFValue |= 0x01; // Enable RF block. +- RFValue &= 0x03; //clear bit[7~2] +- if (pAd->Antenna.field.TxPath == 1) +- RFValue |= 0xA0; +- else if (pAd->Antenna.field.TxPath == 2) +- RFValue |= 0x80; +- if (pAd->Antenna.field.RxPath == 1) +- RFValue |= 0x50; +- else if (pAd->Antenna.field.RxPath == 2) +- RFValue |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R01, RFValue); +- +- // Set RF offset +- RT30xxReadRFRegister(pAd, RF_R23, &RFValue); +- RFValue = (RFValue & 0x80) | pAd->RfFreqOffset; +- RT30xxWriteRFRegister(pAd, RF_R23, RFValue); +- +- // Set BW +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { +- RFValue = pAd->Mlme.CaliBW40RfR24; +- //DISABLE_11N_CHECK(pAd); +- } +- else +- { +- RFValue = pAd->Mlme.CaliBW20RfR24; +- } +- RT30xxWriteRFRegister(pAd, RF_R24, RFValue); +- RT30xxWriteRFRegister(pAd, RF_R31, RFValue); +- +- // Enable RF tuning +- RT30xxReadRFRegister(pAd, RF_R07, &RFValue); +- RFValue = RFValue | 0x1; +- RT30xxWriteRFRegister(pAd, RF_R07, RFValue); +- +- // latch channel for future usage. +- pAd->LatchRfRegs.Channel = Channel; +- +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", +- Channel, +- pAd->RfIcType, +- TxPwer, +- TxPwer2, +- pAd->Antenna.field.TxPath, +- FreqItems3020[index].N, +- FreqItems3020[index].K, +- FreqItems3020[index].R)); +- +- break; +- } +- } +- } +- else +-#endif // RT30xx // +- { +- RFRegTable = RF2850RegTable; +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } +- +- if (Channel > 14) +- { +- // initialize R3, R4 +- R3 = (RFRegTable[index].R3 & 0xffffc1ff); +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15); +- +- // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB +- // R3 +- if ((TxPwer >= -7) && (TxPwer < 0)) +- { +- TxPwer = (7+TxPwer); +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer=%d \n", TxPwer)); +- } +- else +- { +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10) | (1 << 9); +- } +- +- // R4 +- if ((TxPwer2 >= -7) && (TxPwer2 < 0)) +- { +- TxPwer2 = (7+TxPwer2); +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer2=%d \n", TxPwer2)); +- } +- else +- { +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7) | (1 << 6); +- } +- } +- else +- { +- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 <<6);// Set freq Offset & TxPwr1 +- } +- +- // Based on BBP current mode before changing RF channel. +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { +- R4 |=0x200000; +- } +- +- // Update variables +- pAd->LatchRfRegs.Channel = Channel; +- pAd->LatchRfRegs.R1 = RFRegTable[index].R1; +- pAd->LatchRfRegs.R2 = R2; +- pAd->LatchRfRegs.R3 = R3; +- pAd->LatchRfRegs.R4 = R4; +- +-#ifdef DFS_DEBUG +-#ifdef DFS_FCC_BW40_FIX +- if (pAd->infType == RTMP_DEV_INF_PCI) // RT2880 PCI +- { +- /* only for RT2880 */ +- // FCC DFS test +- pAd->LatchRfRegs.R1 |= 0x100; +- pAd->LatchRfRegs.R4 |= 0x00400000; +- } +-#endif // DFS_FCC_BW40_FIX // +-#endif // DFS_DEBUG // +- +- // Set RF value 1's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 2's set R3[bit2] = [1] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04)); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 3's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- break; +- } +- } +- break; +- +- default: +- break; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%lu, Pwr1=%lu, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", +- Channel, +- pAd->RfIcType, +- (R3 & 0x00003e00) >> 9, +- (R4 & 0x000007c0) >> 6, +- pAd->Antenna.field.TxPath, +- pAd->LatchRfRegs.R1, +- pAd->LatchRfRegs.R2, +- pAd->LatchRfRegs.R3, +- pAd->LatchRfRegs.R4)); +- } +- +- // Change BBP setting during siwtch from a->g, g->a +- if (Channel <= 14) +- { +- ULONG TxPinCfg = 0x00050F0A;//Gary 2007/08/09 0x050A0A +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); +- +- // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); +- } +- +- // 5G band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x04); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- +-#if defined(RT3090) || defined(RT3390) +- // PCIe PHY Transmit attenuation adjustment +- if (IS_RT3090A(pAd) || IS_RT3390(pAd)) +- { +- TX_ATTENUATION_CTRL_STRUC TxAttenuationCtrl = {0}; +- +- RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, &TxAttenuationCtrl.word); +- +- if (Channel == 14) // Channel #14 +- { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; // Enable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; // 9/16 full drive level +- } +- else // Channel #1~#13 +- { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; // Disable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; // n/a +- } +- +- RTMP_IO_WRITE32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, TxAttenuationCtrl.word); +- } +-#endif +- } +- else +- { +- ULONG TxPinCfg = 0x00050F05;//Gary 2007/8/9 0x050505 +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); +- +- // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForA) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); +- } +- +- // 5G band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x02); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- +- } +- +- // R66 should be set according to Channel and use 20MHz when scanning +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd))); +- if (bScan) +- RTMPSetAGCInitValue(pAd, BW_20); +- else +- RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +- +- // +- // On 11A, We should delay and wait RF/BBP to be stable +- // and the appropriate time should be 1000 micro seconds +- // 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. +- // +- RTMPusecDelay(1000); +-} +- +-/* +- ========================================================================== +- Description: +- This function is required for 2421 only, and should not be used during +- site survey. It's only required after NIC decided to stay at a channel +- for a longer period. +- When this function is called, it's always after AsicSwitchChannel(). +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicLockChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-#ifdef ANT_DIVERSITY_SUPPORT +-VOID AsicAntennaSelect( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- if (pAd->Mlme.OneSecPeriodicRound % 2 == 1) +-#endif // CONFIG_STA_SUPPORT // +- { +- // patch for AsicSetRxAnt failed +- pAd->RxAnt.EvaluatePeriod = 0; +- +- // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a +- // valid indication of the distance between this AP and its clients. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- SHORT realavgrssi1; +- +- // if no traffic then reset average rssi to trigger evaluation +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->StaCfg.NumOfAvgRssiSample < 5) +- { +- pAd->RxAnt.Pair1LastAvgRssi = (-99); +- pAd->RxAnt.Pair2LastAvgRssi = (-99); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmePeriodicExec: no traffic/beacon, reset RSSI\n")); +- } +- +- pAd->StaCfg.NumOfAvgRssiSample = 0; +- realavgrssi1 = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt] >> 3); +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE,("Ant-realrssi0(%d), Lastrssi0(%d), EvaluateStableCnt=%d\n", realavgrssi1, pAd->RxAnt.Pair1LastAvgRssi, pAd->RxAnt.EvaluateStableCnt)); +- +- // if the difference between two rssi is larger or less than 5, then evaluate the other antenna +- if ((pAd->RxAnt.EvaluateStableCnt < 2) || (realavgrssi1 > (pAd->RxAnt.Pair1LastAvgRssi + 5)) || (realavgrssi1 < (pAd->RxAnt.Pair1LastAvgRssi - 5))) +- AsicEvaluateRxAnt(pAd); +- +- pAd->RxAnt.Pair1LastAvgRssi = realavgrssi1; +- } +- else +- { +- // if not connected, always switch antenna to try to connect +- UCHAR temp; +- +- temp = pAd->RxAnt.Pair1PrimaryRxAnt; +- pAd->RxAnt.Pair1PrimaryRxAnt = pAd->RxAnt.Pair1SecondaryRxAnt; +- pAd->RxAnt.Pair1SecondaryRxAnt = temp; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MlmePeriodicExec: no connect, switch to another one to try connection\n")); +- +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- } +- } +-} +-#endif // ANT_DIVERSITY_SUPPORT // +- +-/* +- ======================================================================== +- +- Routine Description: +- Antenna miscellaneous setting. +- +- Arguments: +- pAd Pointer to our adapter +- BandState Indicate current Band State. +- +- Return Value: +- None +- +- IRQL <= DISPATCH_LEVEL +- +- Note: +- 1.) Frame End type control +- only valid for G only (RF_2527 & RF_2529) +- 0: means DPDT, set BBP R4 bit 5 to 1 +- 1: means SPDT, set BBP R4 bit 5 to 0 +- +- +- ======================================================================== +-*/ +-VOID AsicAntennaSetting( +- IN PRTMP_ADAPTER pAd, +- IN ABGBAND_STATE BandState) +-{ +-} +- +-VOID AsicRfTuningExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +-} +- +-/* +- ========================================================================== +- Description: +- Gives CCK TX rate 2 more dB TX power. +- This routine works only in LINK UP in INFRASTRUCTURE mode. +- +- calculate desired Tx power in RF R3.Tx0~5, should consider - +- 0. if current radio is a noisy environment (pAd->DrsCounters.fNoisyEnvironment) +- 1. TxPowerPercentage +- 2. auto calibration based on TSSI feedback +- 3. extra 2 db for CCK +- 4. -10 db upon very-short distance (AvgRSSI >= -40db) to AP +- +- NOTE: Since this routine requires the value of (pAd->DrsCounters.fNoisyEnvironment), +- it should be called AFTER MlmeDynamicTxRatSwitching() +- ========================================================================== +- */ +-VOID AsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd) +-{ +- INT i, j; +- CHAR DeltaPwr = 0; +- BOOLEAN bAutoTxAgc = FALSE; +- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; +- UCHAR BbpR1 = 0, BbpR49 = 0, idx; +- PCHAR pTxAgcCompensate; +- ULONG TxPwr[5]; +- CHAR Value; +-#ifdef CONFIG_STA_SUPPORT +- CHAR Rssi = -127; +-#endif // CONFIG_STA_SUPPORT // +-#ifdef CARRIER_SENSE_NEW_ALGO +- unsigned long flags; //KH Add to Fix PCIe Power-Saving bug +-#endif // CARRIER_SENSE_NEW_ALGO // +- +- +-#ifdef CARRIER_SENSE_NEW_ALGO +- //KH Add to Fix PCIe Power-Saving bug<-- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- //KH Add to Fix PCIe Power-Saving bug--> +-#endif // CARRIER_SENSE_NEW_ALGO // +- +-#ifdef CONFIG_STA_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || +-#ifdef RTMP_MAC_PCI +- (pAd->bPCIclkOff == TRUE) || +-#endif // RTMP_MAC_PCI // +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +-{ +- +-#ifdef CARRIER_SENSE_NEW_ALGO +- //KH Add to Fix PCIe Power-Saving bug<-- +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- //KH add to fix PCIe-Power Saving --> +-#endif // CARRIER_SENSE_NEW_ALGO // +- return; +-} +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); +-#endif // CONFIG_STA_SUPPORT // +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- if (pAd->CommonCfg.CentralChannel > 14) +- { +- TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; +- } +- } +- else +- { +- if (pAd->CommonCfg.Channel > 14) +- { +- TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; +- } +- } +- +- // TX power compensation for temperature variation based on TSSI. try every 4 second +- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) +- { +- if (pAd->CommonCfg.Channel <= 14) +- { +- /* bg channel */ +- bAutoTxAgc = pAd->bAutoTxAgcG; +- TssiRef = pAd->TssiRefG; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; +- TxAgcStep = pAd->TxAgcStepG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- /* a channel */ +- bAutoTxAgc = pAd->bAutoTxAgcA; +- TssiRef = pAd->TssiRefA; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; +- TxAgcStep = pAd->TxAgcStepA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- { +- /* BbpR1 is unsigned char */ +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49); +- +- /* (p) TssiPlusBoundaryG[0] = 0 = (m) TssiMinusBoundaryG[0] */ +- /* compensate: +4 +3 +2 +1 0 -1 -2 -3 -4 * steps */ +- /* step value is defined in pAd->TxAgcStepG for tx power value */ +- +- /* [4]+1+[4] p4 p3 p2 p1 o1 m1 m2 m3 m4 */ +- /* ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 +- above value are examined in mass factory production */ +- /* [4] [3] [2] [1] [0] [1] [2] [3] [4] */ +- +- /* plus (+) is 0x00 ~ 0x45, minus (-) is 0xa0 ~ 0xf0 */ +- /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */ +- /* if value is 0xa5, tx power will be -= TxAgcStep*(2-1) */ +- +- if (BbpR49 > pTssiMinusBoundary[1]) +- { +- // Reading is larger than the reference value +- // check for how large we need to decrease the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range +- break; +- } +- // The index is the step we should decrease, idx = 0 means there is nothing to compensate +-// if (R3 > (ULONG) (TxAgcStep * (idx-1))) +- *pTxAgcCompensate = -(TxAgcStep * (idx-1)); +-// else +-// *pTxAgcCompensate = -((UCHAR)R3); +- +- DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else if (BbpR49 < pTssiPlusBoundary[1]) +- { +- // Reading is smaller than the reference value +- // check for how large we need to increase the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range +- break; +- } +- // The index is the step we should increase, idx = 0 means there is nothing to compensate +- *pTxAgcCompensate = TxAgcStep * (idx-1); +- DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else +- { +- *pTxAgcCompensate = 0; +- DBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, 0)); +- } +- } +- } +- else +- { +- if (pAd->CommonCfg.Channel <= 14) +- { +- bAutoTxAgc = pAd->bAutoTxAgcG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- bAutoTxAgc = pAd->bAutoTxAgcA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- DeltaPwr += (*pTxAgcCompensate); +- } +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1); +- BbpR1 &= 0xFC; +- +-#ifdef SINGLE_SKU +- // Handle regulatory max tx power constrain +- do +- { +- UCHAR TxPwrInEEPROM = 0xFF, CountryTxPwr = 0xFF, criterion; +- UCHAR AdjustMaxTxPwr[40]; +- +- if (pAd->CommonCfg.Channel > 14) // 5G band +- TxPwrInEEPROM = ((pAd->CommonCfg.DefineMaxTxPwr & 0xFF00) >> 8); +- else // 2.4G band +- TxPwrInEEPROM = (pAd->CommonCfg.DefineMaxTxPwr & 0x00FF); +- CountryTxPwr = GetCuntryMaxTxPwr(pAd, pAd->CommonCfg.Channel); +- +- // error handling, range check +- if ((TxPwrInEEPROM > 0x50) || (CountryTxPwr > 0x50)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("AsicAdjustTxPower - Invalid max tx power (=0x%02x), CountryTxPwr=%d\n", TxPwrInEEPROM, CountryTxPwr)); +- break; +- } +- +- criterion = *((PUCHAR)TxPwr + 2) & 0xF; // FAE use OFDM 6M as criterion +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (criterion=%d, TxPwrInEEPROM=%d, CountryTxPwr=%d)\n", criterion, TxPwrInEEPROM, CountryTxPwr)); +- +- // Adjust max tx power according to the relationship of tx power in E2PROM +- for (i=0; i<5; i++) +- { +- // CCK will have 4dBm larger than OFDM +- // Therefore, we should separate to parse the tx power field +- if (i == 0) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); +- +- if (j < 4) +- { +- // CCK will have 4dBm larger than OFDM +- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion) + 4; +- } +- else +- { +- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j])); +- } +- } +- else +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); +- +- AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion); +- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j])); +- } +- } +- } +- +- // Adjust tx power according to the relationship +- for (i=0; i<5; i++) +- { +- if (TxPwr[i] != 0xffffffff) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); +- +- // The system tx power is larger than the regulatory, the power should be restrain +- if (AdjustMaxTxPwr[i*8+j] > CountryTxPwr) +- { +- // decrease to zero and don't need to take care BBPR1 +- if ((Value - (AdjustMaxTxPwr[i*8+j] - CountryTxPwr)) > 0) +- Value -= (AdjustMaxTxPwr[i*8+j] - CountryTxPwr); +- else +- Value = 0; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j])); +- } +- else +- DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d, no change)\n", i, j, Value, AdjustMaxTxPwr[i*8+j])); +- +- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); +- } +- } +- } +- } while (FALSE); +-#endif // SINGLE_SKU // +- +- /* calculate delta power based on the percentage specified from UI */ +- // E2PROM setting is calibrated for maximum TX power (i.e. 100%) +- // We lower TX power here according to the percentage specified from UI +- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // to patch high power issue with some APs, like Belkin N1. +- if (Rssi > -35) +- { +- BbpR1 |= 0x02; // DeltaPwr -= 12; +- } +- else if (Rssi > -40) +- { +- BbpR1 |= 0x01; // DeltaPwr -= 6; +- } +- else +- ; +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; +- { +- DeltaPwr -= 1; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; +- { +- DeltaPwr -= 3; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; +- { +- BbpR1 |= 0x01; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; +- { +- BbpR1 |= 0x01; +- DeltaPwr -= 3; +- } +- else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; +- { +- BbpR1 |= 0x02; +- } +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpR1); +- +- /* reset different new tx power for different TX rate */ +- for(i=0; i<5; i++) +- { +- if (TxPwr[i] != 0xffffffff) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */ +- +- if ((Value + DeltaPwr) < 0) +- { +- Value = 0; /* min */ +- } +- else if ((Value + DeltaPwr) > 0xF) +- { +- Value = 0xF; /* max */ +- } +- else +- { +- Value += DeltaPwr; /* temperature compensation */ +- } +- +- /* fill new value to CSR offset */ +- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); +- } +- +- /* write tx power value to CSR */ +- /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M +- TX power for OFDM 6M/9M +- TX power for CCK5.5M/11M +- TX power for CCK1M/2M */ +- /* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */ +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]); +- } +- } +- +-#ifdef CARRIER_SENSE_NEW_ALGO +- //KH Add to Fix PCIe Power-Saving bug<-- +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- //KH add to fix PCIe-Power Saving --> +-#endif // CARRIER_SENSE_NEW_ALGO // +- +-} +- +- +-#ifdef CONFIG_STA_SUPPORT +-VOID AsicResetBBPAgent( +-IN PRTMP_ADAPTER pAd) +-{ +- BBP_CSR_CFG_STRUC BbpCsr; +- DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); +- // Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. +- RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word); +- BbpCsr.field.Busy = 0; +- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, BbpCsr.word); +-} +-/* +- ========================================================================== +- Description: +- put PHY to sleep here, and set next wakeup timer. PHY doesn't not wakeup +- automatically. Instead, MCU will issue a TwakeUpInterrupt to host after +- the wakeup timer timeout. Driver has to issue a separate command to wake +- PHY up. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) +-{ +- RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); +-} +- +-/* +- ========================================================================== +- Description: +- AsicForceWakeup() is used whenever manual wakeup is required +- AsicForceSleep() should only be used when not in INFRA BSS. When +- in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. +- ========================================================================== +- */ +-VOID AsicForceSleep( +- IN PRTMP_ADAPTER pAd) +-{ +- +-} +- +-/* +- ========================================================================== +- Description: +- AsicForceWakeup() is used whenever Twakeup timer (set via AsicSleepThenAutoWakeup) +- expired. +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- ========================================================================== +- */ +-VOID AsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) +-{ +- DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); +- RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-/* +- ========================================================================== +- Description: +- Set My BSSID +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetBssid( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid) +-{ +- ULONG Addr4; +- DBGPRINT(RT_DEBUG_TRACE, ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", +- pBssid[0],pBssid[1],pBssid[2],pBssid[3], pBssid[4],pBssid[5])); +- +- Addr4 = (ULONG)(pBssid[0]) | +- (ULONG)(pBssid[1] << 8) | +- (ULONG)(pBssid[2] << 16) | +- (ULONG)(pBssid[3] << 24); +- RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); +- +- Addr4 = 0; +- // always one BSSID in STA mode +- Addr4 = (ULONG)(pBssid[4]) | (ULONG)(pBssid[5] << 8); +- +- RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); +-} +- +-VOID AsicSetMcastWC( +- IN PRTMP_ADAPTER pAd) +-{ +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- USHORT offset; +- +- pEntry->Sst = SST_ASSOC; +- pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index +- pEntry->PsMode = PWR_ACTIVE; +- pEntry->CurrTxRate = pAd->CommonCfg.MlmeRate; +- offset = MAC_WCID_BASE + BSS0Mcast_WCID * HW_WCID_ENTRY_SIZE; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDelWcidTab( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid) +-{ +- ULONG Addr0 = 0x0, Addr1 = 0x0; +- ULONG offset; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n",Wcid)); +- offset = MAC_WCID_BASE + Wcid * HW_WCID_ENTRY_SIZE; +- RTMP_IO_WRITE32(pAd, offset, Addr0); +- offset += 4; +- RTMP_IO_WRITE32(pAd, offset, Addr1); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableRDG( +- IN PRTMP_ADAPTER pAd) +-{ +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; +- +- RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); +- TxLinkCfg.field.TxRDGEn = 1; +- RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); +- +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- Data |= 0x80; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +- +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDisableRDG( +- IN PRTMP_ADAPTER pAd) +-{ +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; +- +- +- RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); +- TxLinkCfg.field.TxRDGEn = 0; +- RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); +- +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- +- Data &= 0xFFFFFF00; +- //Data |= 0x20; +-#ifndef WIFI_TEST +- //if ( pAd->CommonCfg.bEnableTxBurst ) +- // Data |= 0x60; // for performance issue not set the TXOP to 0 +-#endif +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) +-#ifdef DOT11_N_SUPPORT +- && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- if (pAd->CommonCfg.bEnableTxBurst) +- Data |= 0x20; +- } +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicDisableSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->Disable TSF synchronization\n")); +- +- // 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect +- // that NIC will never wakes up because TSF stops and no more +- // TBTT interrupts +- pAd->TbttTickCount = 0; +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.bBeaconGen = 0; +- csr.field.bTBTTEnable = 0; +- csr.field.TsfSyncMode = 0; +- csr.field.bTsfTicking = 0; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +- +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableBssSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n")); +- +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +-// RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU +- csr.field.bTsfTicking = 1; +- csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode +- csr.field.bBeaconGen = 0; // do NOT generate BEACON +- csr.field.bTBTTEnable = 1; +- } +-#endif // CONFIG_STA_SUPPORT // +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +-} +- +-/* +- ========================================================================== +- Description: +- Note: +- BEACON frame in shared memory should be built ok before this routine +- can be called. Otherwise, a garbage frame maybe transmitted out every +- Beacon period. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicEnableIbssSync( +- IN PRTMP_ADAPTER pAd) +-{ +- BCN_TIME_CFG_STRUC csr9; +- PUCHAR ptr; +- UINT i; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", pAd->BeaconTxWI.MPDUtotalByteCount)); +- +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr9.word); +- csr9.field.bBeaconGen = 0; +- csr9.field.bTBTTEnable = 0; +- csr9.field.bTsfTicking = 0; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +- +-#ifdef RTMP_MAC_PCI +- // move BEACON TXD and frame content to on-chip memory +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconBuf; +- for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=4) +- { +- UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); +- ptr +=4; +- } +-#endif // RTMP_MAC_PCI // +- +- +- // +- // For Wi-Fi faily generated beacons between participating stations. +- // Set TBTT phase adaptive adjustment step to 8us (default 16us) +- // don't change settings 2006-5- by Jerry +- //RTMP_IO_WRITE32(pAd, TBTT_SYNC_CFG, 0x00001010); +- +- // start sending BEACON +- csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU +- csr9.field.bTsfTicking = 1; +- csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode +- csr9.field.bTBTTEnable = 1; +- csr9.field.bBeaconGen = 1; +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetEdcaParm( +- IN PRTMP_ADAPTER pAd, +- IN PEDCA_PARM pEdcaParm) +-{ +- EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; +- AC_TXOP_CSR0_STRUC csr0; +- AC_TXOP_CSR1_STRUC csr1; +- AIFSN_CSR_STRUC AifsnCsr; +- CWMIN_CSR_STRUC CwminCsr; +- CWMAX_CSR_STRUC CwmaxCsr; +- int i; +- +- Ac0Cfg.word = 0; +- Ac1Cfg.word = 0; +- Ac2Cfg.word = 0; +- Ac3Cfg.word = 0; +- if ((pEdcaParm == NULL) || (pEdcaParm->bValid == FALSE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AsicSetEdcaParm\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- for (i=0; iMacTab.Content[i].ValidAsCLI || pAd->MacTab.Content[i].ValidAsApCli) +- CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[i], fCLIENT_STATUS_WMM_CAPABLE); +- } +- +- //======================================================== +- // MAC Register has a copy . +- //======================================================== +-//#ifndef WIFI_TEST +- if( pAd->CommonCfg.bEnableTxBurst ) +- { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode +- } +- else +- Ac0Cfg.field.AcTxop = 0; // QID_AC_BE +-//#else +-// Ac0Cfg.field.AcTxop = 0; // QID_AC_BE +-//#endif +- Ac0Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac0Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac0Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); +- +- Ac1Cfg.field.AcTxop = 0; // QID_AC_BK +- Ac1Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac1Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac1Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); +- +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- Ac2Cfg.field.AcTxop = 192; // AC_VI: 192*32us ~= 6ms +- Ac3Cfg.field.AcTxop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- Ac2Cfg.field.AcTxop = 96; // AC_VI: 96*32us ~= 3ms +- Ac3Cfg.field.AcTxop = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- Ac2Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac2Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac2Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); +- Ac3Cfg.field.Cwmin = CW_MIN_IN_BITS; +- Ac3Cfg.field.Cwmax = CW_MAX_IN_BITS; +- Ac3Cfg.field.Aifsn = 2; +- RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); +- +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== +- csr0.field.Ac0Txop = 0; // QID_AC_BE +- csr0.field.Ac1Txop = 0; // QID_AC_BK +- RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); +- +- CwminCsr.word = 0; +- CwminCsr.field.Cwmin0 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin1 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin2 = CW_MIN_IN_BITS; +- CwminCsr.field.Cwmin3 = CW_MIN_IN_BITS; +- RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); +- +- CwmaxCsr.word = 0; +- CwmaxCsr.field.Cwmax0 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax1 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax2 = CW_MAX_IN_BITS; +- CwmaxCsr.field.Cwmax3 = CW_MAX_IN_BITS; +- RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); +- +- RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, 0x00002222); +- +- NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); +- } +- else +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- //======================================================== +- // MAC Register has a copy. +- //======================================================== +- // +- // Modify Cwmin/Cwmax/Txop on queue[QID_AC_VI], Recommend by Jerry 2005/07/27 +- // To degrade our VIDO Queue's throughput for WiFi WMM S3T07 Issue. +- // +- //pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this +- +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; +- Ac0Cfg.field.Cwmin= pEdcaParm->Cwmin[QID_AC_BE]; +- Ac0Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BE]; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; +- +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; +- Ac1Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; +- +- Ac2Cfg.field.AcTxop = (pEdcaParm->Txop[QID_AC_VI] * 6) / 10; +- if(pAd->Antenna.field.TxPath == 1) +- { +- Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI] + 1; +- Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI] + 1; +- } +- else +- { +- Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI]; +- Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI]; +- } +- Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 1; +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef INF_AMAZON_SE +-#endif // INF_AMAZON_SE // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Tuning for Wi-Fi WMM S06 +- if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- Ac2Cfg.field.Aifsn -= 1; +- +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta +- if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { +- Ac0Cfg.field.Aifsn = 3; +- Ac2Cfg.field.AcTxop = 5; +- } +- +-#ifdef RT30xx +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- { +- // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. +- Ac2Cfg.field.Aifsn = 5; +- } +-#endif // RT30xx // +- } +-#endif // CONFIG_STA_SUPPORT // +- +- Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO]; +- Ac3Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VO]; +- Ac3Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VO]; +- Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO]; +- +-//#ifdef WIFI_TEST +- if (pAd->CommonCfg.bWiFiTest) +- { +- if (Ac3Cfg.field.AcTxop == 102) +- { +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm->Txop[QID_AC_BE] : 10; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]-1; /* AIFSN must >= 1 */ +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; +- Ac2Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VI]; +- } /* End of if */ +- } +-//#endif // WIFI_TEST // +- +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); +- RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); +- +- +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== +- csr0.field.Ac0Txop = Ac0Cfg.field.AcTxop; +- csr0.field.Ac1Txop = Ac1Cfg.field.AcTxop; +- RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- +- csr1.field.Ac2Txop = Ac2Cfg.field.AcTxop; +- csr1.field.Ac3Txop = Ac3Cfg.field.AcTxop; +- RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); +- +- CwminCsr.word = 0; +- CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE]; +- CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK]; +- CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI]; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test +-#endif // CONFIG_STA_SUPPORT // +- RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); +- +- CwmaxCsr.word = 0; +- CwmaxCsr.field.Cwmax0 = pEdcaParm->Cwmax[QID_AC_BE]; +- CwmaxCsr.field.Cwmax1 = pEdcaParm->Cwmax[QID_AC_BK]; +- CwmaxCsr.field.Cwmax2 = pEdcaParm->Cwmax[QID_AC_VI]; +- CwmaxCsr.field.Cwmax3 = pEdcaParm->Cwmax[QID_AC_VO]; +- RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); +- +- AifsnCsr.word = 0; +- AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; +- AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; +-#ifdef INF_AMAZON_SE +-#endif // INF_AMAZON_SE // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Tuning for Wi-Fi WMM S06 +- if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4; +- +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta +- if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { +- AifsnCsr.field.Aifsn0 = 3; +- AifsnCsr.field.Aifsn2 = 7; +- } +- +- if (INFRA_ON(pAd)) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE); +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test +-#ifdef RT30xx +- // TODO: Shiang, this modification also suitable for RT3052/RT3050 ??? +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- { +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. +- } +-#endif // RT30xx // +- } +-#endif // CONFIG_STA_SUPPORT // +- RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); +- +- NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); +- if (!ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", pEdcaParm->EdcaUpdateCount)); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BE %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[0], +- pEdcaParm->Cwmin[0], +- pEdcaParm->Cwmax[0], +- pEdcaParm->Txop[0]<<5, +- pEdcaParm->bACM[0])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BK %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[1], +- pEdcaParm->Cwmin[1], +- pEdcaParm->Cwmax[1], +- pEdcaParm->Txop[1]<<5, +- pEdcaParm->bACM[1])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VI %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[2], +- pEdcaParm->Cwmin[2], +- pEdcaParm->Cwmax[2], +- pEdcaParm->Txop[2]<<5, +- pEdcaParm->bACM[2])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VO %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[3], +- pEdcaParm->Cwmin[3], +- pEdcaParm->Cwmax[3], +- pEdcaParm->Txop[3]<<5, +- pEdcaParm->bACM[3])); +- } +- } +- +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicSetSlotTime( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUseShortSlotTime) +-{ +- ULONG SlotTime; +- UINT32 RegValue = 0; +- +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->CommonCfg.Channel > 14) +- bUseShortSlotTime = TRUE; +-#endif // CONFIG_STA_SUPPORT // +- +- if (bUseShortSlotTime && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) +- return; +- else if ((!bUseShortSlotTime) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED))) +- return; +- +- if (bUseShortSlotTime) +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- else +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- +- SlotTime = (bUseShortSlotTime)? 9 : 20; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // force using short SLOT time for FAE to demo performance when TxBurst is ON +- if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) +-#ifdef DOT11_N_SUPPORT +- || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- // In this case, we will think it is doing Wi-Fi test +- // And we will not set to short slot when bEnableTxBurst is TRUE. +- } +- else if (pAd->CommonCfg.bEnableTxBurst) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- SlotTime = 9; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // +- // For some reasons, always set it to short slot time. +- // +- // ToDo: Should consider capability with 11B +- // +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +- SlotTime = 20; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &RegValue); +- RegValue = RegValue & 0xFFFFFF00; +- +- RegValue |= SlotTime; +- +- RTMP_IO_WRITE32(pAd, BKOFF_SLOT_CFG, RegValue); +-} +- +-/* +- ======================================================================== +- Description: +- Add Shared key information into ASIC. +- Update shared key, TxMic and RxMic to Asic Shared key table +- Update its cipherAlg to Asic Shared key Mode. +- +- Return: +- ======================================================================== +-*/ +-VOID AsicAddSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic) +-{ +- ULONG offset; //, csr0; +- SHAREDKEY_MODE_STRUC csr1; +-#ifdef RTMP_MAC_PCI +- INT i; +-#endif // RTMP_MAC_PCI // +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx)); +-//============================================================================================ +- +- DBGPRINT(RT_DEBUG_TRACE,("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], BssIndex*4 + KeyIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); +- if (pRxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); +- } +- if (pTxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); +- } +-//============================================================================================ +- // +- // fill key material - key + TX MIC + RX MIC +- // +-#ifdef RTMP_MAC_PCI +- offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE; +- for (i=0; iKey; +-// ULONG KeyLen = pCipherKey->KeyLen; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +- PUCHAR pTxtsc = pCipherKey->TxTsc; +- UCHAR CipherAlg = pCipherKey->CipherAlg; +- SHAREDKEY_MODE_STRUC csr1; +-#ifdef RTMP_MAC_PCI +- UCHAR i; +-#endif // RTMP_MAC_PCI // +- +-// ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n")); +- // +- // 1.) decide key table offset +- // +- if (bUsePairewiseKeyTable) +- offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); +- else +- offset = SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE; +- +- // +- // 2.) Set Key to Asic +- // +- //for (i = 0; i < KeyLen; i++) +-#ifdef RTMP_MAC_PCI +- for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); +- } +- offset += MAX_LEN_OF_PEER_KEY; +- +- // +- // 3.) Set MIC key if available +- // +- if (pTxMic) +- { +- for (i = 0; i < 8; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); +- } +- } +- offset += LEN_TKIP_TXMICK; +- +- if (pRxMic) +- { +- for (i = 0; i < 8; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); +- } +- } +-#endif // RTMP_MAC_PCI // +- +- +- // +- // 4.) Modify IV/EIV if needs +- // This will force Asic to use this key ID by setting IV. +- // +- if (bTxKey) +- { +-#ifdef RTMP_MAC_PCI +- offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); +- // +- // Write IV +- // +- RTMP_IO_WRITE8(pAd, offset, pTxtsc[1]); +- RTMP_IO_WRITE8(pAd, offset + 1, ((pTxtsc[1] | 0x20) & 0x7f)); +- RTMP_IO_WRITE8(pAd, offset + 2, pTxtsc[0]); +- +- IV4 = (KeyIdx << 6); +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence +- +- RTMP_IO_WRITE8(pAd, offset + 3, IV4); +- +- // +- // Write EIV +- // +- offset += 4; +- for (i = 0; i < 4; i++) +- { +- RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]); +- } +-#endif // RTMP_MAC_PCI // +- +- AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, bUsePairewiseKeyTable); +- } +- +- if (!bUsePairewiseKeyTable) +- { +- // +- // Only update the shared key security mode +- // +- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), &csr1.word); +- if ((BssIndex % 2) == 0) +- { +- if (KeyIdx == 0) +- csr1.field.Bss0Key0CipherAlg = CipherAlg; +- else if (KeyIdx == 1) +- csr1.field.Bss0Key1CipherAlg = CipherAlg; +- else if (KeyIdx == 2) +- csr1.field.Bss0Key2CipherAlg = CipherAlg; +- else +- csr1.field.Bss0Key3CipherAlg = CipherAlg; +- } +- else +- { +- if (KeyIdx == 0) +- csr1.field.Bss1Key0CipherAlg = CipherAlg; +- else if (KeyIdx == 1) +- csr1.field.Bss1Key1CipherAlg = CipherAlg; +- else if (KeyIdx == 2) +- csr1.field.Bss1Key2CipherAlg = CipherAlg; +- else +- csr1.field.Bss1Key3CipherAlg = CipherAlg; +- } +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), csr1.word); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== AsicAddKeyEntry\n")); +-} +- +- +-/* +- ======================================================================== +- Description: +- Add Pair-wise key material into ASIC. +- Update pairwise key, TxMic and RxMic to Asic Pair-wise key table +- +- Return: +- ======================================================================== +-*/ +-VOID AsicAddPairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, +- IN CIPHER_KEY *pCipherKey) +-{ +- INT i; +- ULONG offset; +- PUCHAR pKey = pCipherKey->Key; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +-#ifdef DBG +- UCHAR CipherAlg = pCipherKey->CipherAlg; +-#endif // DBG // +- +- // EKEY +- offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); +-#ifdef RTMP_MAC_PCI +- for (i=0; ichipOps.sendCommandToMcu) +- pAd->chipOps.sendCommandToMcu(pAd, Command, Token, Arg0, Arg1); +- +- return TRUE; +-} +- +- +-VOID AsicSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) +-{ +-#ifdef RT33xx +- RT33xxSetRxAnt(pAd, Ant); +-#else +-#ifdef RT30xx +- /* RT3572 ATE need not to do this. */ +- RT30xxSetRxAnt(pAd, Ant); +-#endif // RT30xx // +-#endif // RT33xx // +-} +- +- +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +- if (pAd->chipOps.AsicRfTurnOff) +- { +- pAd->chipOps.AsicRfTurnOff(pAd); +- } +- else +- { +- // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; +- +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R1 = RFRegTable[index].R1 & 0xffffdfff; +- R2 = RFRegTable[index].R2 & 0xfffbffff; +- R3 = RFRegTable[index].R3 & 0xfff3ffff; +- +- RTMP_RF_IO_WRITE32(pAd, R1); +- RTMP_RF_IO_WRITE32(pAd, R2); +- +- // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. +- // Set RF R2 bit18=0, R3 bit[18:19]=0 +- //if (pAd->StaCfg.bRadio == FALSE) +- if (1) +- { +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x, R3 = 0x%08x \n", +- Channel, pAd->RfIcType, R2, R3)); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x \n", +- Channel, pAd->RfIcType, R2)); +- break; +- } +- } +- break; +- +- default: +- break; +- } +- } +-} +- +- +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) +-{ +- // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; +- +-#ifdef PCIE_PS_SUPPORT +- // The RF programming sequence is difference between 3xxx and 2xxx +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- return; +- } +-#endif // PCIE_PS_SUPPORT // +- +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R3 = pAd->LatchRfRegs.R3; +- R3 &= 0xfff3ffff; +- R3 |= 0x00080000; +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- R1 = RFRegTable[index].R1; +- RTMP_RF_IO_WRITE32(pAd, R1); +- +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } +- RTMP_RF_IO_WRITE32(pAd, R2); +- +- break; +- } +- } +- break; +- +- default: +- break; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOnRFClk#%d(RF=%d, ) , R2=0x%08x\n", +- Channel, +- pAd->RfIcType, +- R2)); +-} +diff --git a/drivers/staging/rt3090/common/cmm_cfg.c b/drivers/staging/rt3090/common/cmm_cfg.c +deleted file mode 100644 +index d8be979..0000000 +--- a/drivers/staging/rt3090/common/cmm_cfg.c ++++ /dev/null +@@ -1,295 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_cfg.c +- +- Abstract: +- Ralink WiFi Driver configuration related subroutines +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-char* GetPhyMode( +- int Mode) +-{ +- switch(Mode) +- { +- case MODE_CCK: +- return "CCK"; +- +- case MODE_OFDM: +- return "OFDM"; +-#ifdef DOT11_N_SUPPORT +- case MODE_HTMIX: +- return "HTMIX"; +- +- case MODE_HTGREENFIELD: +- return "GREEN"; +-#endif // DOT11_N_SUPPORT // +- default: +- return "N/A"; +- } +-} +- +- +-char* GetBW( +- int BW) +-{ +- switch(BW) +- { +- case BW_10: +- return "10M"; +- +- case BW_20: +- return "20M"; +-#ifdef DOT11_N_SUPPORT +- case BW_40: +- return "40M"; +-#endif // DOT11_N_SUPPORT // +- default: +- return "N/A"; +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Country Region to pAd->CommonCfg.CountryRegion. +- This command will not work, if the field of CountryRegion in eeprom is programmed. +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT RT_CfgSetCountryRegion( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg, +- IN INT band) +-{ +- LONG region, regionMax; +- UCHAR *pCountryRegion; +- +- region = simple_strtol(arg, 0, 10); +- +- if (band == BAND_24G) +- { +- pCountryRegion = &pAd->CommonCfg.CountryRegion; +- regionMax = REGION_MAXIMUM_BG_BAND; +- } +- else +- { +- pCountryRegion = &pAd->CommonCfg.CountryRegionForABand; +- regionMax = REGION_MAXIMUM_A_BAND; +- } +- +- // TODO: Is it neccesay for following check??? +- // Country can be set only when EEPROM not programmed +- if (*pCountryRegion & 0x80) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():CountryRegion in eeprom was programmed\n")); +- return FALSE; +- } +- +- if((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) +- { +- *pCountryRegion= (UCHAR) region; +- } +- else if ((region == REGION_31_BG_BAND) && (band == BAND_24G)) +- { +- *pCountryRegion = (UCHAR) region; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():region(%ld) out of range!\n", region)); +- return FALSE; +- } +- +- return TRUE; +- +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Wireless Mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT RT_CfgSetWirelessMode( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT MaxPhyMode = PHY_11G; +- LONG WirelessMode; +- +-#ifdef DOT11_N_SUPPORT +- MaxPhyMode = PHY_11N_5G; +-#endif // DOT11_N_SUPPORT // +- +- WirelessMode = simple_strtol(arg, 0, 10); +- if (WirelessMode <= MaxPhyMode) +- { +- pAd->CommonCfg.PhyMode = WirelessMode; +- pAd->CommonCfg.DesiredPhyMode = WirelessMode; +- return TRUE; +- } +- +- return FALSE; +- +-} +- +- +-INT RT_CfgSetShortSlot( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG ShortSlot; +- +- ShortSlot = simple_strtol(arg, 0, 10); +- +- if (ShortSlot == 1) +- pAd->CommonCfg.bUseShortSlotTime = TRUE; +- else if (ShortSlot == 0) +- pAd->CommonCfg.bUseShortSlotTime = FALSE; +- else +- return FALSE; //Invalid argument +- +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set WEP KEY base on KeyIdx +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT RT_CfgSetWepKey( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY *pSharedKey, +- IN INT keyIdx) +-{ +- INT KeyLen; +- INT i; +- UCHAR CipherAlg = CIPHER_NONE; +- BOOLEAN bKeyIsHex = FALSE; +- +- // TODO: Shall we do memset for the original key info?? +- memset(pSharedKey, 0, sizeof(CIPHER_KEY)); +- KeyLen = strlen(keyString); +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- case 13: //wep 104 Ascii type +- bKeyIsHex = FALSE; +- pSharedKey->KeyLen = KeyLen; +- NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); +- break; +- +- case 10: //wep 40 Hex type +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(keyString+i)) ) +- return FALSE; //Not Hex value; +- } +- bKeyIsHex = TRUE; +- pSharedKey->KeyLen = KeyLen/2 ; +- AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); +- break; +- +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey(keyIdx=%d):Invalid argument (arg=%s)\n", keyIdx, keyString)); +- return FALSE; +- } +- +- pSharedKey->CipherAlg = ((KeyLen % 5) ? CIPHER_WEP128 : CIPHER_WEP64); +- DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey:(KeyIdx=%d,type=%s, Alg=%s)\n", +- keyIdx, (bKeyIsHex == FALSE ? "Ascii" : "Hex"), CipherName[CipherAlg])); +- +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set WPA PSK key +- +- Arguments: +- pAdapter Pointer to our adapter +- keyString WPA pre-shared key string +- pHashStr String used for password hash function +- hashStrLen Lenght of the hash string +- pPMKBuf Output buffer of WPAPSK key +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT RT_CfgSetWPAPSKKey( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING keyString, +- IN UCHAR *pHashStr, +- IN INT hashStrLen, +- OUT PUCHAR pPMKBuf) +-{ +- int keyLen; +- UCHAR keyMaterial[40]; +- +- keyLen = strlen(keyString); +- if ((keyLen < 8) || (keyLen > 64)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("WPAPSK Key length(%d) error, required 8 ~ 64 characters!(keyStr=%s)\n", +- keyLen, keyString)); +- return FALSE; +- } +- +- memset(pPMKBuf, 0, 32); +- if (keyLen == 64) +- { +- AtoH(keyString, pPMKBuf, 32); +- } +- else +- { +- PasswordHash(keyString, pHashStr, hashStrLen, keyMaterial); +- NdisMoveMemory(pPMKBuf, keyMaterial, 32); +- } +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/common/cmm_data.c b/drivers/staging/rt3090/common/cmm_data.c +deleted file mode 100644 +index 6340071..0000000 +--- a/drivers/staging/rt3090/common/cmm_data.c ++++ /dev/null +@@ -1,2763 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_data.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include "../rt_config.h" +- +- +-UCHAR SNAP_802_1H[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00}; +-UCHAR SNAP_BRIDGE_TUNNEL[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8}; +-// Add Cisco Aironet SNAP heade for CCX2 support +-UCHAR SNAP_AIRONET[] = {0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; +-UCHAR CKIP_LLC_SNAP[] = {0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02}; +-UCHAR EAPOL_LLC_SNAP[]= {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e}; +-UCHAR EAPOL[] = {0x88, 0x8e}; +-UCHAR TPID[] = {0x81, 0x00}; /* VLAN related */ +- +-UCHAR IPX[] = {0x81, 0x37}; +-UCHAR APPLE_TALK[] = {0x80, 0xf3}; +-UCHAR RateIdToPlcpSignal[12] = { +- 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */ // see BBP spec +- 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */ // see IEEE802.11a-1999 p.14 +- 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ }; // see IEEE802.11a-1999 p.14 +- +-UCHAR OfdmSignalToRateId[16] = { +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 0, 1, 2, 3 respectively +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 4, 5, 6, 7 respectively +- RATE_48, RATE_24, RATE_12, RATE_6, // OFDM PLCP Signal = 8, 9, 10, 11 respectively +- RATE_54, RATE_36, RATE_18, RATE_9, // OFDM PLCP Signal = 12, 13, 14, 15 respectively +-}; +- +-UCHAR OfdmRateToRxwiMCS[12] = { +- 0, 0, 0, 0, +- 0, 1, 2, 3, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 +-}; +-UCHAR RxwiMCSToOfdmRate[12] = { +- RATE_6, RATE_9, RATE_12, RATE_18, +- RATE_24, RATE_36, RATE_48, RATE_54, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 +-}; +- +-char* MCSToMbps[] = {"1Mbps","2Mbps","5.5Mbps","11Mbps","06Mbps","09Mbps","12Mbps","18Mbps","24Mbps","36Mbps","48Mbps","54Mbps","MM-0","MM-1","MM-2","MM-3","MM-4","MM-5","MM-6","MM-7","MM-8","MM-9","MM-10","MM-11","MM-12","MM-13","MM-14","MM-15","MM-32","ee1","ee2","ee3"}; +- +-UCHAR default_cwmin[]={CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1, CW_MIN_IN_BITS-2}; +-//UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; +-UCHAR default_sta_aifsn[]={3,7,2,2}; +- +-UCHAR MapUserPriorityToAccessCategory[8] = {QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, QID_AC_VO, QID_AC_VO}; +- +- +-/* +- ======================================================================== +- +- Routine Description: +- API for MLME to transmit management frame to AP (BSS Mode) +- or station (IBSS Mode) +- +- Arguments: +- pAd Pointer to our adapter +- pData Pointer to the outgoing 802.11 frame +- Length Size of outgoing management frame +- +- Return Value: +- NDIS_STATUS_FAILURE +- NDIS_STATUS_PENDING +- NDIS_STATUS_SUCCESS +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS MiniportMMRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PUCHAR pData, +- IN UINT Length) +-{ +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG FreeNum; +- UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; +-#ifdef RTMP_MAC_PCI +- unsigned long IrqFlags = 0; +- UCHAR IrqState; +-#endif // RTMP_MAC_PCI // +- BOOLEAN bUseDataQ = FALSE; +- int retryCnt = 0; +- +- ASSERT(Length <= MGMT_DMA_BUFFER_SIZE); +- +- if ((QueIdx & MGMT_USE_QUEUE_FLAG) == MGMT_USE_QUEUE_FLAG) +- { +- bUseDataQ = TRUE; +- QueIdx &= (~MGMT_USE_QUEUE_FLAG); +- } +- +-#ifdef RTMP_MAC_PCI +- // 2860C use Tx Ring +- IrqState = pAd->irq_disabled; +- if (pAd->MACVersion == 0x28600100) +- { +- QueIdx = (bUseDataQ ==TRUE ? QueIdx : 3); +- bUseDataQ = TRUE; +- } +- if (bUseDataQ && (!IrqState)) +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +-#endif // RTMP_MAC_PCI // +- +- do +- { +- // Reset is in progress, stop immediately +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)|| +- !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) +- { +- Status = NDIS_STATUS_FAILURE; +- break; +- } +- +- // Check Free priority queue +- // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. +-#ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { +- retryCnt = MAX_DATAMM_RETRY; +- // free Tx(QueIdx) resources +- RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); +- FreeNum = GET_TXRING_FREENO(pAd, QueIdx); +- } +- else +-#endif // RTMP_MAC_PCI // +- { +- FreeNum = GET_MGMTRING_FREENO(pAd); +- } +- +- if ((FreeNum > 0)) +- { +- // We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870 +- NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE)); +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, (PUCHAR)&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE), pData, Length); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n")); +- break; +- } +- +- //pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- //pAd->CommonCfg.MlmeRate = RATE_2; +- +- +-#ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { +- Status = MlmeDataHardTransmit(pAd, QueIdx, pPacket); +- retryCnt--; +- } +- else +-#endif // RTMP_MAC_PCI // +- Status = MlmeHardTransmit(pAd, QueIdx, pPacket); +- if (Status == NDIS_STATUS_SUCCESS) +- retryCnt = 0; +- else +- RTMPFreeNdisPacket(pAd, pPacket); +- } +- else +- { +- pAd->RalinkCounters.MgmtRingFullCount++; +-#ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { +- retryCnt--; +- DBGPRINT(RT_DEBUG_TRACE, ("retryCnt %d\n", retryCnt)); +- if (retryCnt == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n", +- QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); +- } +- } +-#endif // RTMP_MAC_PCI // +- DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in MgmtRing, MgmtRingFullCount=%ld!\n", +- QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); +- +- +- +- } +- } while (retryCnt > 0); +- +- +-#ifdef RTMP_MAC_PCI +- if (bUseDataQ && (!IrqState)) +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +-#endif // RTMP_MAC_PCI // +- +- return Status; +-} +- +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware transmit function +- +- Arguments: +- pAd Pointer to our adapter +- pBuffer Pointer to memory of outgoing frame +- Length Size of outgoing management frame +- +- Return Value: +- NDIS_STATUS_FAILURE +- NDIS_STATUS_PENDING +- NDIS_STATUS_SUCCESS +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS MlmeHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PHEADER_802_11 pHeader_802_11; +- +- if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +-#ifdef CARRIER_DETECTION_SUPPORT +-#endif // CARRIER_DETECTION_SUPPORT // +- ) +- { +- return NDIS_STATUS_FAILURE; +- } +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- if (pSrcBufVA == NULL) +- return NDIS_STATUS_FAILURE; +- +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); +- +- +-#ifdef RTMP_MAC_PCI +- if ( pAd->MACVersion == 0x28600100 ) +- return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); +- else +-#endif // RTMP_MAC_PCI // +- return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket); +- +-} +- +- +-NDIS_STATUS MlmeHardTransmitMgmtRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PHEADER_802_11 pHeader_802_11; +- BOOLEAN bAckRequired, bInsertTimestamp; +- UCHAR MlmeRate; +- PTXWI_STRUC pFirstTxWI; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- UCHAR PID; +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- // Make sure MGMT ring resource won't be used by other threads +- RTMP_SEM_LOCK(&pAd->MgmtRingLock); +- if (pSrcBufVA == NULL) +- { +- // The buffer shouldn't be NULL +- RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); +- return NDIS_STATUS_FAILURE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // outgoing frame always wakeup PHY to prevent frame lost +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, TRUE); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- pFirstTxWI = (PTXWI_STRUC)(pSrcBufVA + TXINFO_SIZE); +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE); +- +- if (pHeader_802_11->Addr1[0] & 0x01) +- { +- MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- } +- else +- { +- MlmeRate = pAd->CommonCfg.MlmeRate; +- } +- +- // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band +- MlmeRate = RATE_6; +- +- if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) +- { +- pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Fixed W52 with Activity scan issue in ABG_MIXED and ABGN_MIXED mode. +- if (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED +-#ifdef DOT11_N_SUPPORT +- || pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED +-#endif // DOT11_N_SUPPORT // +- ) +- { +- if (pAd->LatchRfRegs.Channel > 14) +- pAd->CommonCfg.MlmeTransmit.field.MODE = 1; +- else +- pAd->CommonCfg.MlmeTransmit.field.MODE = 0; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // +- // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) +- // Snice it's been set to 0 while on MgtMacHeaderInit +- // By the way this will cause frame to be send on PWR_SAVE failed. +- // +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; // (pAd->StaCfg.Psm == PWR_SAVE); +- +-#ifdef CONFIG_STA_SUPPORT +- // +- // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +-// if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) +- { +- if ((pHeader_802_11->FC.SubType == SUBTYPE_ACTION) || +- ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- ((pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL) || +- (pHeader_802_11->FC.SubType == SUBTYPE_NULL_FUNC)))) +- { +- if (pAd->StaCfg.Psm == PWR_SAVE) +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; +- else +- pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- +- +- bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL +- { +-#ifdef CONFIG_STA_SUPPORT +- //Set PM bit in ps-poll, to fix WLK 1.2 PowerSaveMode_ext failure issue. +- if ((pAd->OpMode == OPMODE_STA) && (pHeader_802_11->FC.SubType == SUBTYPE_PS_POLL)) +- { +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; +- } +-#endif // CONFIG_STA_SUPPORT // +- bAckRequired = FALSE; +- } +- else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) +- { +- //pAd->Sequence++; +- //pHeader_802_11->Sequence = pAd->Sequence; +- +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST +- { +- bAckRequired = FALSE; +- pHeader_802_11->Duration = 0; +- } +- else +- { +- bAckRequired = TRUE; +- pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) +- { +- bInsertTimestamp = TRUE; +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Response +- } +- else if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) +- { +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Request +- } +- } +- } +- +- pHeader_802_11->Sequence = pAd->Sequence++; +- if (pAd->Sequence >0xfff) +- pAd->Sequence = 0; +- +- // Before radar detection done, mgmt frame can not be sent but probe req +- // Because we need to use probe req to trigger driver to send probe req in passive scan +- if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +-// if (!IrqState) +- RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); +- return (NDIS_STATUS_FAILURE); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader_802_11, DIR_WRITE, FALSE); +-#endif +- +- // +- // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one physical buffer, and the whole frame size equals +- // to the first scatter buffer size +- // +- +- // Initialize TX Descriptor +- // For inter-frame gap, the number is for this frame and next frame +- // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; +- +-// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. +- PID = PID_MGMT; +- +- +- if (pMacEntry == NULL) +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { +- /* dont use low rate to send QoS Null data frame */ +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, +- bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, pMacEntry->Aid, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), +- pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, +- IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)pFirstTxWI, TYPE_TXWI); +-#endif +- +- // Now do hardware-depened kick out. +- HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen); +- +- // Make sure to release MGMT ring resource +-// if (!IrqState) +- RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); +- return NDIS_STATUS_SUCCESS; +-} +- +- +-/******************************************************************************** +- +- New DeQueue Procedures. +- +- ********************************************************************************/ +- +-#define DEQUEUE_LOCK(lock, bIntContext, IrqFlags) \ +- do{ \ +- if (bIntContext == FALSE) \ +- RTMP_IRQ_LOCK((lock), IrqFlags); \ +- }while(0) +- +-#define DEQUEUE_UNLOCK(lock, bIntContext, IrqFlags) \ +- do{ \ +- if (bIntContext == FALSE) \ +- RTMP_IRQ_UNLOCK((lock), IrqFlags); \ +- }while(0) +- +- +- +- +-/* +- ======================================================================== +- Tx Path design algorithm: +- Basically, we divide the packets into four types, Broadcast/Multicast, 11N Rate(AMPDU, AMSDU, Normal), B/G Rate(ARALINK, Normal), +- Specific Packet Type. Following show the classification rule and policy for each kinds of packets. +- Classification Rule=> +- Multicast: (*addr1 & 0x01) == 0x01 +- Specific : bDHCPFrame, bARPFrame, bEAPOLFrame, etc. +- 11N Rate : If peer support HT +- (1).AMPDU -- If TXBA is negotiated. +- (2).AMSDU -- If AMSDU is capable for both peer and ourself. +- *). AMSDU can embedded in a AMPDU, but now we didn't support it. +- (3).Normal -- Other packets which send as 11n rate. +- +- B/G Rate : If peer is b/g only. +- (1).ARALINK-- If both of peer/us supprot Ralink proprietary Aggregation and the TxRate is large than RATE_6 +- (2).Normal -- Other packets which send as b/g rate. +- Fragment: +- The packet must be unicast, NOT A-RALINK, NOT A-MSDU, NOT 11n, then can consider about fragment. +- +- Classified Packet Handle Rule=> +- Multicast: +- No ACK, //pTxBlk->bAckRequired = FALSE; +- No WMM, //pTxBlk->bWMM = FALSE; +- No piggyback, //pTxBlk->bPiggyBack = FALSE; +- Force LowRate, //pTxBlk->bForceLowRate = TRUE; +- Specific : Basically, for specific packet, we should handle it specifically, but now all specific packets are use +- the same policy to handle it. +- Force LowRate, //pTxBlk->bForceLowRate = TRUE; +- +- 11N Rate : +- No piggyback, //pTxBlk->bPiggyBack = FALSE; +- +- (1).AMSDU +- pTxBlk->bWMM = TRUE; +- (2).AMPDU +- pTxBlk->bWMM = TRUE; +- (3).Normal +- +- B/G Rate : +- (1).ARALINK +- +- (2).Normal +- ======================================================================== +-*/ +-static UCHAR TxPktClassification( +- IN RTMP_ADAPTER *pAd, +- IN PNDIS_PACKET pPacket) +-{ +- UCHAR TxFrameType = TX_UNKOWN_FRAME; +- UCHAR Wcid; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +-#ifdef DOT11_N_SUPPORT +- BOOLEAN bHTRate = FALSE; +-#endif // DOT11_N_SUPPORT // +- +- Wcid = RTMP_GET_PACKET_WCID(pPacket); +- if (Wcid == MCAST_WCID) +- { // Handle for RA is Broadcast/Multicast Address. +- return TX_MCAST_FRAME; +- } +- +- // Handle for unicast packets +- pMacEntry = &pAd->MacTab.Content[Wcid]; +- if (RTMP_GET_PACKET_LOWRATE(pPacket)) +- { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame +- TxFrameType = TX_LEGACY_FRAME; +- } +-#ifdef DOT11_N_SUPPORT +- else if (IS_HT_RATE(pMacEntry)) +- { // it's a 11n capable packet +- +- // Depends on HTPhyMode to check if the peer support the HTRate transmission. +- // Currently didn't support A-MSDU embedded in A-MPDU +- bHTRate = TRUE; +- if (RTMP_GET_PACKET_MOREDATA(pPacket) || (pMacEntry->PsMode == PWR_SAVE)) +- TxFrameType = TX_LEGACY_FRAME; +-#ifdef UAPSD_AP_SUPPORT +- else if (RTMP_GET_PACKET_EOSP(pPacket)) +- TxFrameType = TX_LEGACY_FRAME; +-#endif // UAPSD_AP_SUPPORT // +- else if((pMacEntry->TXBAbitmap & (1<<(RTMP_GET_PACKET_UP(pPacket)))) != 0) +- return TX_AMPDU_FRAME; +- else if(CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AMSDU_INUSED)) +- return TX_AMSDU_FRAME; +- else +- TxFrameType = TX_LEGACY_FRAME; +- } +-#endif // DOT11_N_SUPPORT // +- else +- { // it's a legacy b/g packet. +- if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) && +- (RTMP_GET_PACKET_TXRATE(pPacket) >= RATE_6) && +- (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) +- { // if peer support Ralink Aggregation, we use it. +- TxFrameType = TX_RALINK_FRAME; +- } +- else +- { +- TxFrameType = TX_LEGACY_FRAME; +- } +- } +- +- // Currently, our fragment only support when a unicast packet send as NOT-ARALINK, NOT-AMSDU and NOT-AMPDU. +- if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) && (TxFrameType == TX_LEGACY_FRAME)) +- TxFrameType = TX_FRAG_FRAME; +- +- return TxFrameType; +-} +- +- +-BOOLEAN RTMP_FillTxBlkInfo( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) +-{ +- PACKET_INFO PacketInfo; +- PNDIS_PACKET pPacket; +- PMAC_TABLE_ENTRY pMacEntry = NULL; +- +- pPacket = pTxBlk->pPacket; +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, &pTxBlk->SrcBufLen); +- +- pTxBlk->Wcid = RTMP_GET_PACKET_WCID(pPacket); +- pTxBlk->apidx = RTMP_GET_PACKET_IF(pPacket); +- pTxBlk->UserPriority = RTMP_GET_PACKET_UP(pPacket); +- pTxBlk->FrameGap = IFS_HTTXOP; // ASIC determine Frame Gap +- +- if (RTMP_GET_PACKET_CLEAR_EAP_FRAME(pTxBlk->pPacket)) +- TX_BLK_SET_FLAG(pTxBlk, fTX_bClearEAPFrame); +- else +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bClearEAPFrame); +- +- // Default to clear this flag +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bForceNonQoS); +- +- +- if (pTxBlk->Wcid == MCAST_WCID) +- { +- pTxBlk->pMacEntry = NULL; +- { +-#ifdef MCAST_RATE_SPECIFIC +- PUCHAR pDA = GET_OS_PKT_DATAPTR(pPacket); +- if (((*pDA & 0x01) == 0x01) && (*pDA != 0xff)) +- pTxBlk->pTransmit = &pAd->CommonCfg.MCastPhyMode; +- else +-#endif // MCAST_RATE_SPECIFIC // +- pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; +- } +- +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); // AckRequired = FALSE, when broadcast packet in Adhoc mode. +- //TX_BLK_SET_FLAG(pTxBlk, fTX_bForceLowRate); +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAllowFrag); +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM); +- if (RTMP_GET_PACKET_MOREDATA(pPacket)) +- { +- TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData); +- } +- +- } +- else +- { +- pTxBlk->pMacEntry = &pAd->MacTab.Content[pTxBlk->Wcid]; +- pTxBlk->pTransmit = &pTxBlk->pMacEntry->HTPhyMode; +- +- pMacEntry = pTxBlk->pMacEntry; +- +- +- // For all unicast packets, need Ack unless the Ack Policy is not set as NORMAL_ACK. +- if (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx] != NORMAL_ACK) +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); +- else +- TX_BLK_SET_FLAG(pTxBlk, fTX_bAckRequired); +- +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && +- (ADHOC_ON(pAd)) && +- (RX_FILTER_TEST_FLAG(pAd, fRX_FILTER_ACCEPT_PROMISCUOUS))) +- { +- if(pAd->CommonCfg.PSPXlink) +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- +- // If support WMM, enable it. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)) +- TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM); +- +-// if (pAd->StaCfg.bAutoTxRateSwitch) +-// TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- if (pTxBlk->TxFrameType == TX_LEGACY_FRAME) +- { +- if ( (RTMP_GET_PACKET_LOWRATE(pPacket)) || +- ((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1))) +- { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate. +- pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; +-#ifdef DOT11_N_SUPPORT +- // Modify the WMM bit for ICV issue. If we have a packet with EOSP field need to set as 1, how to handle it??? +- if (IS_HT_STA(pTxBlk->pMacEntry) && +- (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_RALINK_CHIPSET)) && +- ((pAd->CommonCfg.bRdg == TRUE) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_RDG_CAPABLE))) +- { +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM); +- TX_BLK_SET_FLAG(pTxBlk, fTX_bForceNonQoS); +- } +-#endif // DOT11_N_SUPPORT // +- } +- +-#ifdef DOT11_N_SUPPORT +- if ( (IS_HT_RATE(pMacEntry) == FALSE) && +- (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE))) +- { // Currently piggy-back only support when peer is operate in b/g mode. +- TX_BLK_SET_FLAG(pTxBlk, fTX_bPiggyBack); +- } +-#endif // DOT11_N_SUPPORT // +- +- if (RTMP_GET_PACKET_MOREDATA(pPacket)) +- { +- TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData); +- } +-#ifdef UAPSD_AP_SUPPORT +- if (RTMP_GET_PACKET_EOSP(pPacket)) +- { +- TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM_UAPSD_EOSP); +- } +-#endif // UAPSD_AP_SUPPORT // +- } +- else if (pTxBlk->TxFrameType == TX_FRAG_FRAME) +- { +- TX_BLK_SET_FLAG(pTxBlk, fTX_bAllowFrag); +- } +- +- pMacEntry->DebugTxCount++; +- } +- +- return TRUE; +-} +- +- +-BOOLEAN CanDoAggregateTransmit( +- IN RTMP_ADAPTER *pAd, +- IN NDIS_PACKET *pPacket, +- IN TX_BLK *pTxBlk) +-{ +- +- //DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); +- +- if (RTMP_GET_PACKET_WCID(pPacket) == MCAST_WCID) +- return FALSE; +- +- if (RTMP_GET_PACKET_DHCP(pPacket) || +- RTMP_GET_PACKET_EAPOL(pPacket) || +- RTMP_GET_PACKET_WAI(pPacket)) +- return FALSE; +- +- if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) && +- ((pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket))> (RX_BUFFER_AGGRESIZE - 100))) +- { // For AMSDU, allow the packets with total length < max-amsdu size +- return FALSE; +- } +- +- if ((pTxBlk->TxFrameType == TX_RALINK_FRAME) && +- (pTxBlk->TxPacketList.Number == 2)) +- { // For RALINK-Aggregation, allow two frames in one batch. +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) // must be unicast to AP +- return TRUE; +- else +-#endif // CONFIG_STA_SUPPORT // +- return FALSE; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- To do the enqueue operation and extract the first item of waiting +- list. If a number of available shared memory segments could meet +- the request of extracted item, the extracted item will be fragmented +- into shared memory segments. +- +- Arguments: +- pAd Pointer to our adapter +- pQueue Pointer to Waiting Queue +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPDeQueuePacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bIntContext, +- IN UCHAR QIdx, /* BulkOutPipeId */ +- IN UCHAR Max_Tx_Packets) +-{ +- PQUEUE_ENTRY pEntry = NULL; +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- UCHAR Count=0; +- PQUEUE_HEADER pQueue; +- ULONG FreeNumber[NUM_OF_TX_RING]; +- UCHAR QueIdx, sQIdx, eQIdx; +- unsigned long IrqFlags = 0; +- BOOLEAN hasTxDesc = FALSE; +- TX_BLK TxBlk; +- TX_BLK *pTxBlk; +- +-#ifdef DBG_DIAGNOSE +- BOOLEAN firstRound; +- RtmpDiagStruct *pDiagStruct = &pAd->DiagStruct; +-#endif +- +- +- if (QIdx == NUM_OF_TX_RING) +- { +- sQIdx = 0; +- eQIdx = 3; // 4 ACs, start from 0. +- } +- else +- { +- sQIdx = eQIdx = QIdx; +- } +- +- for (QueIdx=sQIdx; QueIdx <= eQIdx; QueIdx++) +- { +- Count=0; +- +- RTMP_START_DEQUEUE(pAd, QueIdx, IrqFlags); +- +-#ifdef DBG_DIAGNOSE +- firstRound = ((QueIdx == 0) ? TRUE : FALSE); +-#endif // DBG_DIAGNOSE // +- +- while (1) +- { +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- RTMP_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); +- return; +- } +- +- if (Count >= Max_Tx_Packets) +- break; +- +- DEQUEUE_LOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- if (&pAd->TxSwQueue[QueIdx] == NULL) +- { +-#ifdef DBG_DIAGNOSE +- if (firstRound == TRUE) +- pDiagStruct->TxSWQueCnt[pDiagStruct->ArrayCurIdx][0]++; +-#endif // DBG_DIAGNOSE // +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- break; +- } +- +-#ifdef RTMP_MAC_PCI +- FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); +- +-#ifdef DBG_DIAGNOSE +- if (firstRound == TRUE) +- { +- UCHAR txDescNumLevel, txSwQNumLevel; +- +- txDescNumLevel = (TX_RING_SIZE - FreeNumber[QueIdx]); // Number of occupied hw desc. +- txDescNumLevel = ((txDescNumLevel <=15) ? txDescNumLevel : 15); +- pDiagStruct->TxDescCnt[pDiagStruct->ArrayCurIdx][txDescNumLevel]++; +- +- txSwQNumLevel = ((pAd->TxSwQueue[QueIdx].Number <=7) ? pAd->TxSwQueue[QueIdx].Number : 8); +- pDiagStruct->TxSWQueCnt[pDiagStruct->ArrayCurIdx][txSwQNumLevel]++; +- +- firstRound = FALSE; +- } +-#endif // DBG_DIAGNOSE // +- +- if (FreeNumber[QueIdx] <= 5) +- { +- // free Tx(QueIdx) resources +- RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); +- FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); +- } +-#endif // RTMP_MAC_PCI // +- +- // probe the Queue Head +- pQueue = &pAd->TxSwQueue[QueIdx]; +- if ((pEntry = pQueue->Head) == NULL) +- { +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- break; +- } +- +- pTxBlk = &TxBlk; +- NdisZeroMemory((PUCHAR)pTxBlk, sizeof(TX_BLK)); +- //InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. +- pTxBlk->QueIdx = QueIdx; +- +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- +- +- // Early check to make sure we have enoguh Tx Resource. +- hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); +- if (!hasTxDesc) +- { +- pAd->PrivateInfo.TxRingFullCnt++; +- +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- +- break; +- } +- +- pTxBlk->TxFrameType = TxPktClassification(pAd, pPacket); +- pEntry = RemoveHeadQueue(pQueue); +- pTxBlk->TotalFrameNum++; +- pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary +- pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); +- pTxBlk->pPacket = pPacket; +- InsertTailQueue(&pTxBlk->TxPacketList, PACKET_TO_QUEUE_ENTRY(pPacket)); +- +- if (pTxBlk->TxFrameType == TX_RALINK_FRAME || pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- { +- // Enhance SW Aggregation Mechanism +- if (NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, FreeNumber[QueIdx], pTxBlk->TxFrameType)) +- { +- InsertHeadQueue(pQueue, PACKET_TO_QUEUE_ENTRY(pPacket)); +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- break; +- } +- +- do{ +- if((pEntry = pQueue->Head) == NULL) +- break; +- +- // For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); +- hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); +- if ((hasTxDesc == FALSE) || (CanDoAggregateTransmit(pAd, pPacket, pTxBlk) == FALSE)) +- break; +- +- //Remove the packet from the TxSwQueue and insert into pTxBlk +- pEntry = RemoveHeadQueue(pQueue); +- ASSERT(pEntry); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- pTxBlk->TotalFrameNum++; +- pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary +- pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); +- InsertTailQueue(&pTxBlk->TxPacketList, PACKET_TO_QUEUE_ENTRY(pPacket)); +- }while(1); +- +- if (pTxBlk->TxPacketList.Number == 1) +- pTxBlk->TxFrameType = TX_LEGACY_FRAME; +- } +- +- +- Count += pTxBlk->TxPacketList.Number; +- +- +- // Do HardTransmit now. +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- Status = STAHardTransmit(pAd, pTxBlk, QueIdx); +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RTMP_MAC_PCI +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- // static rate also need NICUpdateFifoStaCounters() function. +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- NICUpdateFifoStaCounters(pAd); +-#endif // RTMP_MAC_PCI // +- +- } +- +- RTMP_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); +- +- +-#ifdef BLOCK_NET_IF +- if ((pAd->blockQueueTab[QueIdx].SwTxQueueBlockFlag == TRUE) +- && (pAd->TxSwQueue[QueIdx].Number < 1)) +- { +- releaseNetIf(&pAd->blockQueueTab[QueIdx]); +- } +-#endif // BLOCK_NET_IF // +- +- } +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculates the duration which is required to transmit out frames +- with given size and specified rate. +- +- Arguments: +- pAd Pointer to our adapter +- Rate Transmit rate +- Size Frame size in units of byte +- +- Return Value: +- Duration number in units of usec +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-USHORT RTMPCalcDuration( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Rate, +- IN ULONG Size) +-{ +- ULONG Duration = 0; +- +- if (Rate < RATE_FIRST_OFDM_RATE) // CCK +- { +- if ((Rate > RATE_1) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED)) +- Duration = 96; // 72+24 preamble+plcp +- else +- Duration = 192; // 144+48 preamble+plcp +- +- Duration += (USHORT)((Size << 4) / RateIdTo500Kbps[Rate]); +- if ((Size << 4) % RateIdTo500Kbps[Rate]) +- Duration ++; +- } +- else if (Rate <= RATE_LAST_OFDM_RATE)// OFDM rates +- { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension +- Duration += 4 * (USHORT)((11 + Size * 4) / RateIdTo500Kbps[Rate]); +- if ((11 + Size * 4) % RateIdTo500Kbps[Rate]) +- Duration += 4; +- } +- else //mimo rate +- { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension +- } +- +- return (USHORT)Duration; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculates the duration which is required to transmit out frames +- with given size and specified rate. +- +- Arguments: +- pTxWI Pointer to head of each MPDU to HW. +- Ack Setting for Ack requirement bit +- Fragment Setting for Fragment bit +- RetryMode Setting for retry mode +- Ifs Setting for IFS gap +- Rate Setting for transmit rate +- Service Setting for service +- Length Frame length +- TxPreamble Short or Long preamble when using CCK rates +- QueIdx - 0-3, according to 802.11e/d4.4 June/2003 +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- See also : BASmartHardTransmit() !!! +- +- ======================================================================== +-*/ +-VOID RTMPWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pOutTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit) +-{ +- PMAC_TABLE_ENTRY pMac = NULL; +- TXWI_STRUC TxWI; +- PTXWI_STRUC pTxWI; +- +- if (WCID < MAX_LEN_OF_MAC_TABLE) +- pMac = &pAd->MacTab.Content[WCID]; +- +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- NdisZeroMemory(&TxWI, TXWI_SIZE); +- pTxWI = &TxWI; +- +- pTxWI->FRAG= FRAG; +- +- pTxWI->CFACK = CFACK; +- pTxWI->TS= InsTimestamp; +- pTxWI->AMPDU = AMPDU; +- pTxWI->ACK = Ack; +- pTxWI->txop= Txopmode; +- +- pTxWI->NSEQ = NSeq; +- // John tune the performace with Intel Client in 20 MHz performance +-#ifdef DOT11_N_SUPPORT +- BASize = pAd->CommonCfg.TxBASize; +- if (pAd->MACVersion == 0x28720200) +- { +- if( BASize >13 ) +- BASize =13; +- } +- else +- { +- if( BASize >7 ) +- BASize =7; +- } +- pTxWI->BAWinSize = BASize; +- pTxWI->ShortGI = pTransmit->field.ShortGI; +- pTxWI->STBC = pTransmit->field.STBC; +-#endif // DOT11_N_SUPPORT // +- +- pTxWI->WirelessCliID = WCID; +- pTxWI->MPDUtotalByteCount = Length; +- pTxWI->PacketId = PID; +- +- // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- if (pTxWI->BW) +- pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW); +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +- pTxWI->MCS = pTransmit->field.MCS; +- pTxWI->PHYMODE = pTransmit->field.MODE; +- pTxWI->CFACK = CfAck; +- +-#ifdef DOT11_N_SUPPORT +- if (pMac) +- { +- if (pAd->CommonCfg.bMIMOPSEnable) +- { +- if ((pMac->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { +- // Dynamic MIMO Power Save Mode +- pTxWI->MIMOps = 1; +- } +- else if (pMac->MmpsMode == MMPS_STATIC) +- { +- // Static MIMO Power Save Mode +- if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7) +- { +- pTxWI->MCS = 7; +- pTxWI->MIMOps = 0; +- } +- } +- } +- //pTxWI->MIMOps = (pMac->PsMode == PWR_MMPS)? 1:0; +- if (pMac->bIAmBadAtheros && (pMac->WepStatus != Ndis802_11WEPDisabled)) +- { +- pTxWI->MpduDensity = 7; +- } +- else +- { +- pTxWI->MpduDensity = pMac->MpduDensity; +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- pTxWI->PacketId = pTxWI->MCS; +- NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC)); +-} +- +- +-VOID RTMPWriteTxWI_Data( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk) +-{ +- HTTRANSMIT_SETTING *pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; +-#ifdef DOT11_N_SUPPORT +- UCHAR BASize; +-#endif // DOT11_N_SUPPORT // +- +- +- ASSERT(pTxWI); +- +- pTransmit = pTxBlk->pTransmit; +- pMacEntry = pTxBlk->pMacEntry; +- +- +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- NdisZeroMemory(pTxWI, TXWI_SIZE); +- +- pTxWI->FRAG = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag); +- pTxWI->ACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAckRequired); +- pTxWI->txop = pTxBlk->FrameGap; +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- if (pMacEntry && +- (pAd->StaCfg.BssType == BSS_INFRA) && +- (pMacEntry->ValidAsDls == TRUE)) +- pTxWI->WirelessCliID = BSSID_WCID; +- else +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- pTxWI->WirelessCliID = pTxBlk->Wcid; +- +- pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; +- pTxWI->CFACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bPiggyBack); +- +- // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- if (pTxWI->BW) +- pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW); +-#endif // DOT11N_DRAFT3 // +- pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE); +- +- // John tune the performace with Intel Client in 20 MHz performance +- BASize = pAd->CommonCfg.TxBASize; +- if((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry)) +- { +- UCHAR RABAOriIdx = 0; //The RA's BA Originator table index. +- +- RABAOriIdx = pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority]; +- BASize = pAd->BATable.BAOriEntry[RABAOriIdx].BAWinSize; +- } +- +- +- pTxWI->TxBF = pTransmit->field.TxBF; +- pTxWI->BAWinSize = BASize; +- pTxWI->ShortGI = pTransmit->field.ShortGI; +- pTxWI->STBC = pTransmit->field.STBC; +-#endif // DOT11_N_SUPPORT // +- +- pTxWI->MCS = pTransmit->field.MCS; +- pTxWI->PHYMODE = pTransmit->field.MODE; +- +- +-#ifdef DOT11_N_SUPPORT +- if (pMacEntry) +- { +- if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { +- // Dynamic MIMO Power Save Mode +- pTxWI->MIMOps = 1; +- } +- else if (pMacEntry->MmpsMode == MMPS_STATIC) +- { +- // Static MIMO Power Save Mode +- if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7) +- { +- pTxWI->MCS = 7; +- pTxWI->MIMOps = 0; +- } +- } +- +- if (pMacEntry->bIAmBadAtheros && (pMacEntry->WepStatus != Ndis802_11WEPDisabled)) +- { +- pTxWI->MpduDensity = 7; +- } +- else +- { +- pTxWI->MpduDensity = pMacEntry->MpduDensity; +- } +- } +-#endif // DOT11_N_SUPPORT // +- +-#ifdef DBG_DIAGNOSE +- if (pTxBlk->QueIdx== 0) +- { +- pAd->DiagStruct.TxDataCnt[pAd->DiagStruct.ArrayCurIdx]++; +- pAd->DiagStruct.TxMcsCnt[pAd->DiagStruct.ArrayCurIdx][pTxWI->MCS]++; +- } +-#endif // DBG_DIAGNOSE // +- +- // for rate adapation +- pTxWI->PacketId = pTxWI->MCS; +-#ifdef INF_AMAZON_SE +-/*Iverson patch for WMM A5-T07 ,WirelessStaToWirelessSta do not bulk out aggregate */ +- if( RTMP_GET_PACKET_NOBULKOUT(pTxBlk->pPacket)) +- { +- if(pTxWI->PHYMODE == MODE_CCK) +- { +- pTxWI->PacketId = 6; +- } +- } +-#endif // INF_AMAZON_SE // +-} +- +- +-VOID RTMPWriteTxWI_Cache( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk) +-{ +- PHTTRANSMIT_SETTING /*pTxHTPhyMode,*/ pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; +- +- // +- // update TXWI +- // +- pMacEntry = pTxBlk->pMacEntry; +- pTransmit = pTxBlk->pTransmit; +- +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- //if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pMacEntry)) +- //if (TX_BLK_TEST_FLAG(pTxBlk, fTX_AutoRateSwitch)) +- if (pMacEntry->bAutoTxRateSwitch) +- { +- pTxWI->txop = IFS_HTTXOP; +- +- // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +- pTxWI->ShortGI = pTransmit->field.ShortGI; +- pTxWI->STBC = pTransmit->field.STBC; +- +- pTxWI->MCS = pTransmit->field.MCS; +- pTxWI->PHYMODE = pTransmit->field.MODE; +- +- // set PID for TxRateSwitching +- pTxWI->PacketId = pTransmit->field.MCS; +- } +- +-#ifdef DOT11_N_SUPPORT +- pTxWI->AMPDU = ((pMacEntry->NoBADataCountDown == 0) ? TRUE: FALSE); +- pTxWI->MIMOps = 0; +- +-#ifdef DOT11N_DRAFT3 +- if (pTxWI->BW) +- pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW); +-#endif // DOT11N_DRAFT3 // +- +- if (pAd->CommonCfg.bMIMOPSEnable) +- { +- // MIMO Power Save Mode +- if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { +- // Dynamic MIMO Power Save Mode +- pTxWI->MIMOps = 1; +- } +- else if (pMacEntry->MmpsMode == MMPS_STATIC) +- { +- // Static MIMO Power Save Mode +- if ((pTransmit->field.MODE >= MODE_HTMIX) && (pTransmit->field.MCS > 7)) +- { +- pTxWI->MCS = 7; +- pTxWI->MIMOps = 0; +- } +- } +- } +-#endif // DOT11_N_SUPPORT // +- +-#ifdef DBG_DIAGNOSE +- if (pTxBlk->QueIdx== 0) +- { +- pAd->DiagStruct.TxDataCnt[pAd->DiagStruct.ArrayCurIdx]++; +- pAd->DiagStruct.TxMcsCnt[pAd->DiagStruct.ArrayCurIdx][pTxWI->MCS]++; +- } +-#endif // DBG_DIAGNOSE // +- +- pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; +- +-} +- +- +-// should be called only when - +-// 1. MEADIA_CONNECTED +-// 2. AGGREGATION_IN_USED +-// 3. Fragmentation not in used +-// 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible +-BOOLEAN TxFrameIsAggregatible( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, +- IN PUCHAR p8023hdr) +-{ +- +- // can't aggregate EAPOL (802.1x) frame +- if ((p8023hdr[12] == 0x88) && (p8023hdr[13] == 0x8e)) +- return FALSE; +- +- // can't aggregate multicast/broadcast frame +- if (p8023hdr[0] & 0x01) +- return FALSE; +- +- if (INFRA_ON(pAd)) // must be unicast to AP +- return TRUE; +- else if ((pPrevAddr1 == NULL) || MAC_ADDR_EQUAL(pPrevAddr1, p8023hdr)) // unicast to same STA +- return TRUE; +- else +- return FALSE; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Check the MSDU Aggregation policy +- 1.HT aggregation is A-MSDU +- 2.legaacy rate aggregation is software aggregation by Ralink. +- +- Arguments: +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN PeerIsAggreOn( +- IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, +- IN PMAC_TABLE_ENTRY pMacEntry) +-{ +- ULONG AFlags = (fCLIENT_STATUS_AMSDU_INUSED | fCLIENT_STATUS_AGGREGATION_CAPABLE); +- +- if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags)) +- { +-#ifdef DOT11_N_SUPPORT +- if (pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- { +- return TRUE; +- } +-#endif // DOT11_N_SUPPORT // +- +-#ifdef AGGREGATION_SUPPORT +- if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) +- { // legacy Ralink Aggregation support +- return TRUE; +- } +-#endif // AGGREGATION_SUPPORT // +- } +- +- return FALSE; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Check and fine the packet waiting in SW queue with highest priority +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- pQueue Pointer to Waiting Queue +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-PQUEUE_HEADER RTMPCheckTxSwQueue( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pQueIdx) +-{ +- +- ULONG Number; +- // 2004-11-15 to be removed. test aggregation only +-// if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) +-// return NULL; +- +- Number = pAd->TxSwQueue[QID_AC_BK].Number +- + pAd->TxSwQueue[QID_AC_BE].Number +- + pAd->TxSwQueue[QID_AC_VI].Number +- + pAd->TxSwQueue[QID_AC_VO].Number; +- /*+ pAd->TxSwQueue[QID_HCCA].Number;*/ +- +- if (pAd->TxSwQueue[QID_AC_VO].Head != NULL) +- { +- *pQueIdx = QID_AC_VO; +- return (&pAd->TxSwQueue[QID_AC_VO]); +- } +- else if (pAd->TxSwQueue[QID_AC_VI].Head != NULL) +- { +- *pQueIdx = QID_AC_VI; +- return (&pAd->TxSwQueue[QID_AC_VI]); +- } +- else if (pAd->TxSwQueue[QID_AC_BE].Head != NULL) +- { +- *pQueIdx = QID_AC_BE; +- return (&pAd->TxSwQueue[QID_AC_BE]); +- } +- else if (pAd->TxSwQueue[QID_AC_BK].Head != NULL) +- { +- *pQueIdx = QID_AC_BK; +- return (&pAd->TxSwQueue[QID_AC_BK]); +- } +- /* +- else if (pAd->TxSwQueue[QID_HCCA].Head != NULL) +- { +- *pQueIdx = QID_HCCA; +- return (&pAd->TxSwQueue[QID_HCCA]); +- } +- */ +- +- // No packet pending in Tx Sw queue +- *pQueIdx = QID_AC_BK; +- +- return (NULL); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Suspend MSDU transmission +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPSuspendMsduTransmission( +- IN PRTMP_ADAPTER pAd) +-{ +- DBGPRINT(RT_DEBUG_TRACE,("SCANNING, suspend MSDU transmission ...\n")); +- +- +- // +- // Before BSS_SCAN_IN_PROGRESS, we need to keep Current R66 value and +- // use Lowbound as R66 value on ScanNextChannel(...) +- // +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue); +- +- // set BBP_R66 to 0x30/0x40 when scanning (AsicSwitchChannel will set R66 according to channel when scanning) +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x26 + GET_LNA_GAIN(pAd))); +- RTMPSetAGCInitValue(pAd, BW_20); +- +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Resume MSDU transmission +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPResumeMsduTransmission( +- IN PRTMP_ADAPTER pAd) +-{ +-// UCHAR IrqState; +- +- DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n")); +- +- +- // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value +- // R66 should not be 0 +- if (pAd->BbpTuning.R66CurrentValue == 0) +- { +- pAd->BbpTuning.R66CurrentValue = 0x38; +- DBGPRINT_ERR(("RTMPResumeMsduTransmission, R66CurrentValue=0...\n")); +- } +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +-// sample, for IRQ LOCK to SEM LOCK +-// IrqState = pAd->irq_disabled; +-// if (IrqState) +-// RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); +-// else +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +-} +- +- +-UINT deaggregate_AMSDU_announce( +- IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize) +-{ +- USHORT PayloadSize; +- USHORT SubFrameSize; +- PHEADER_802_3 pAMSDUsubheader; +- UINT nMSDU; +- UCHAR Header802_3[14]; +- +- PUCHAR pPayload, pDA, pSA, pRemovedLLCSNAP; +- PNDIS_PACKET pClonePacket; +- +- +- +- nMSDU = 0; +- +- while (DataSize > LENGTH_802_3) +- { +- +- nMSDU++; +- +- //hex_dump("subheader", pData, 64); +- pAMSDUsubheader = (PHEADER_802_3)pData; +- //pData += LENGTH_802_3; +- PayloadSize = pAMSDUsubheader->Octet[1] + (pAMSDUsubheader->Octet[0]<<8); +- SubFrameSize = PayloadSize + LENGTH_802_3; +- +- +- if ((DataSize < SubFrameSize) || (PayloadSize > 1518 )) +- { +- break; +- } +- +- //DBGPRINT(RT_DEBUG_TRACE,("%d subframe: Size = %d\n", nMSDU, PayloadSize)); +- +- pPayload = pData + LENGTH_802_3; +- pDA = pData; +- pSA = pData + MAC_ADDR_LEN; +- +- // convert to 802.3 header +- CONVERT_TO_802_3(Header802_3, pDA, pSA, pPayload, PayloadSize, pRemovedLLCSNAP); +- +-#ifdef CONFIG_STA_SUPPORT +- if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E) ) +- { +- /* avoid local heap overflow, use dyanamic allocation */ +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- memmove(Elem->Msg+(LENGTH_802_11 + LENGTH_802_1_H), pPayload, PayloadSize); +- Elem->MsgLen = LENGTH_802_11 + LENGTH_802_1_H + PayloadSize; +- //WpaEAPOLKeyAction(pAd, Elem); +- REPORT_MGMT_FRAME_TO_MLME(pAd, BSSID_WCID, Elem->Msg, Elem->MsgLen, 0, 0, 0, 0); +- kfree(Elem); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pRemovedLLCSNAP) +- { +- pPayload -= LENGTH_802_3; +- PayloadSize += LENGTH_802_3; +- NdisMoveMemory(pPayload, &Header802_3[0], LENGTH_802_3); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- pClonePacket = ClonePacket(pAd, pPacket, pPayload, PayloadSize); +- if (pClonePacket) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pClonePacket, RTMP_GET_PACKET_IF(pPacket)); +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +- // A-MSDU has padding to multiple of 4 including subframe header. +- // align SubFrameSize up to multiple of 4 +- SubFrameSize = (SubFrameSize+3)&(~0x3); +- +- +- if (SubFrameSize > 1528 || SubFrameSize < 32) +- { +- break; +- } +- +- if (DataSize > SubFrameSize) +- { +- pData += SubFrameSize; +- DataSize -= SubFrameSize; +- } +- else +- { +- // end of A-MSDU +- DataSize = 0; +- } +- } +- +- // finally release original rx packet +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- +- return nMSDU; +-} +- +- +-UINT BA_Reorder_AMSDU_Annnounce( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- PUCHAR pData; +- USHORT DataSize; +- UINT nMSDU = 0; +- +- pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); +- DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); +- +- nMSDU = deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize); +- +- return nMSDU; +-} +- +- +-/* +- ========================================================================== +- Description: +- Look up the MAC address in the MAC table. Return NULL if not found. +- Return: +- pEntry - pointer to the MAC entry; NULL is not found +- ========================================================================== +-*/ +-MAC_TABLE_ENTRY *MacTableLookup( +- IN PRTMP_ADAPTER pAd, +- PUCHAR pAddr) +-{ +- ULONG HashIdx; +- MAC_TABLE_ENTRY *pEntry = NULL; +- +- HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- pEntry = pAd->MacTab.Hash[HashIdx]; +- +- while (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsWDS || pEntry->ValidAsApCli || pEntry->ValidAsMesh)) +- { +- if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { +- break; +- } +- else +- pEntry = pEntry->pNext; +- } +- +- return pEntry; +-} +- +-MAC_TABLE_ENTRY *MacTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, +- IN BOOLEAN CleanAll) +-{ +- UCHAR HashIdx; +- int i, FirstWcid; +- MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; +-// USHORT offset; +-// ULONG addr; +- +- // if FULL, return +- if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) +- return NULL; +- +- FirstWcid = 1; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- if (pAd->StaCfg.BssType == BSS_INFRA) +- FirstWcid = 2; +-#endif // CONFIG_STA_SUPPORT // +- +- // allocate one MAC entry +- NdisAcquireSpinLock(&pAd->MacTabLock); +- for (i = FirstWcid; i< MAX_LEN_OF_MAC_TABLE; i++) // skip entry#0 so that "entry index == AID" for fast lookup +- { +- // pick up the first available vacancy +- if ((pAd->MacTab.Content[i].ValidAsCLI == FALSE) && +- (pAd->MacTab.Content[i].ValidAsWDS == FALSE) && +- (pAd->MacTab.Content[i].ValidAsApCli== FALSE) && +- (pAd->MacTab.Content[i].ValidAsMesh == FALSE) +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- && (pAd->MacTab.Content[i].ValidAsDls == FALSE) +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- ) +- { +- pEntry = &pAd->MacTab.Content[i]; +- if (CleanAll == TRUE) +- { +- pEntry->MaxSupportedRate = RATE_11; +- pEntry->CurrTxRate = RATE_11; +- NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); +- pEntry->PairwiseKey.KeyLen = 0; +- pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; +- } +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- if (apidx >= MIN_NET_DEVICE_FOR_DLS) +- { +- pEntry->ValidAsCLI = FALSE; +- pEntry->ValidAsWDS = FALSE; +- pEntry->ValidAsApCli = FALSE; +- pEntry->ValidAsMesh = FALSE; +- pEntry->ValidAsDls = TRUE; +- pEntry->isCached = FALSE; +- } +- else +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pEntry->ValidAsCLI = TRUE; +- pEntry->ValidAsWDS = FALSE; +- pEntry->ValidAsApCli = FALSE; +- pEntry->ValidAsMesh = FALSE; +- pEntry->ValidAsDls = FALSE; +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- pEntry->bIAmBadAtheros = FALSE; +- pEntry->pAd = pAd; +- pEntry->CMTimerRunning = FALSE; +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; +- pEntry->RSNIE_Len = 0; +- NdisZeroMemory(pEntry->R_Counter, sizeof(pEntry->R_Counter)); +- pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; +- +- if (pEntry->ValidAsMesh) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_MESH); +- else if (pEntry->ValidAsApCli) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_APCLI); +- else if (pEntry->ValidAsWDS) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_WDS); +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- else if (pEntry->ValidAsDls) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_DLS); +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- else +- pEntry->apidx = apidx; +- +- +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pEntry->AuthMode = pAd->StaCfg.AuthMode; +- pEntry->WepStatus = pAd->StaCfg.WepStatus; +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +-#ifdef RTMP_MAC_PCI +- AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)i); +-#endif // RTMP_MAC_PCI // +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- pEntry->GTKState = REKEY_NEGOTIATING; +- pEntry->PairwiseKey.KeyLen = 0; +- pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- if (pEntry->ValidAsDls == TRUE) +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- else +-#endif //QOS_DLS_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- pEntry->PMKID_CacheIdx = ENTRY_NOT_FOUND; +- COPY_MAC_ADDR(pEntry->Addr, pAddr); +- pEntry->Sst = SST_NOT_AUTH; +- pEntry->AuthState = AS_NOT_AUTH; +- pEntry->Aid = (USHORT)i; //0; +- pEntry->CapabilityInfo = 0; +- pEntry->PsMode = PWR_ACTIVE; +- pEntry->PsQIdleCount = 0; +- pEntry->NoDataIdleCount = 0; +- pEntry->AssocDeadLine = MAC_TABLE_ASSOC_TIMEOUT; +- pEntry->ContinueTxFailCnt = 0; +-#ifdef WDS_SUPPORT +- pEntry->LockEntryTx = FALSE; +- pEntry->TimeStamp_toTxRing = 0; +-#endif // WDS_SUPPORT // +- InitializeQueueHeader(&pEntry->PsQueue); +- +- +- pAd->MacTab.Size ++; +- // Add this entry into ASIC RX WCID search table +- RTMP_STA_ENTRY_ADD(pAd, pEntry); +- +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableInsertEntry - allocate entry #%d, Total= %d\n",i, pAd->MacTab.Size)); +- break; +- } +- } +- +- // add this MAC entry into HASH table +- if (pEntry) +- { +- HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- if (pAd->MacTab.Hash[HashIdx] == NULL) +- { +- pAd->MacTab.Hash[HashIdx] = pEntry; +- } +- else +- { +- pCurrEntry = pAd->MacTab.Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- pCurrEntry = pCurrEntry->pNext; +- pCurrEntry->pNext = pEntry; +- } +- } +- +- NdisReleaseSpinLock(&pAd->MacTabLock); +- return pEntry; +-} +- +-/* +- ========================================================================== +- Description: +- Delete a specified client from MAC table +- ========================================================================== +- */ +-BOOLEAN MacTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr) +-{ +- USHORT HashIdx; +- MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; +- BOOLEAN Cancelled; +- //USHORT offset; // unused variable +- //UCHAR j; // unused variable +- +- if (wcid >= MAX_LEN_OF_MAC_TABLE) +- return FALSE; +- +- NdisAcquireSpinLock(&pAd->MacTabLock); +- +- HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- //pEntry = pAd->MacTab.Hash[HashIdx]; +- pEntry = &pAd->MacTab.Content[wcid]; +- +- if (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsApCli || pEntry->ValidAsWDS || pEntry->ValidAsMesh +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- || pEntry->ValidAsDls +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- )) +- { +- if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { +- +- // Delete this entry from ASIC on-chip WCID Table +- RTMP_STA_ENTRY_MAC_RESET(pAd, wcid); +- +-#ifdef DOT11_N_SUPPORT +- // free resources of BA +- BASessionTearDownALL(pAd, pEntry->Aid); +-#endif // DOT11_N_SUPPORT // +- +- +- pPrevEntry = NULL; +- pProbeEntry = pAd->MacTab.Hash[HashIdx]; +- ASSERT(pProbeEntry); +- +- // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pAd->MacTab.Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- } +- break; +- } +- +- pPrevEntry = pProbeEntry; +- pProbeEntry = pProbeEntry->pNext; +- } while (pProbeEntry); +- +- // not found !!! +- ASSERT(pProbeEntry != NULL); +- +- RTMP_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); +- +- +- if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) +- { +- RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled); +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; +- } +- +- +- NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); +- pAd->MacTab.Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableDeleteEntry1 - Total= %d\n", pAd->MacTab.Size)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_OFF, ("\n%s: Impossible Wcid = %d !!!!!\n", __FUNCTION__, wcid)); +- } +- } +- +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- //Reset operating mode when no Sta. +- if (pAd->MacTab.Size == 0) +- { +-#ifdef DOT11_N_SUPPORT +- pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0; +-#endif // DOT11_N_SUPPORT // +- //AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/); +- RTMP_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +- } +- +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- This routine reset the entire MAC table. All packets pending in +- the power-saving queues are freed here. +- ========================================================================== +- */ +-VOID MacTableReset( +- IN PRTMP_ADAPTER pAd) +-{ +- int i; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableReset\n")); +- //NdisAcquireSpinLock(&pAd->MacTabLock); +- +- +- for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) +- { +- +- +-#ifdef DOT11_N_SUPPORT +- // free resources of BA +- BASessionTearDownALL(pAd, i); +-#endif // DOT11_N_SUPPORT // +- +- pAd->MacTab.Content[i].ValidAsCLI = FALSE; +- +- +- +- +- //AsicDelWcidTab(pAd, i); +- } +- } +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID AssocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, +- IN USHORT ListenIntv) +-{ +- COPY_MAC_ADDR(AssocReq->Addr, pAddr); +- // Add mask to support 802.11b mode only +- AssocReq->CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; // not cf-pollable, not cf-poll-request +- AssocReq->Timeout = Timeout; +- AssocReq->ListenIntv = ListenIntv; +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID DisassocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, +- IN PUCHAR pAddr, +- IN USHORT Reason) +-{ +- COPY_MAC_ADDR(DisassocReq->Addr, pAddr); +- DisassocReq->Reason = Reason; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Check the out going frame, if this is an DHCP or ARP datagram +- will be duplicate another frame at low data rate transmit. +- +- Arguments: +- pAd Pointer to our adapter +- pPacket Pointer to outgoing Ndis frame +- +- Return Value: +- TRUE To be duplicate at Low data rate transmit. (1mb) +- FALSE Do nothing. +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- MAC header + IP Header + UDP Header +- 14 Bytes 20 Bytes +- +- UDP Header +- 00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15| +- Source Port +- 16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31| +- Destination Port +- +- port 0x43 means Bootstrap Protocol, server. +- Port 0x44 means Bootstrap Protocol, client. +- +- ======================================================================== +-*/ +- +-BOOLEAN RTMPCheckDHCPFrame( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- PACKET_INFO PacketInfo; +- ULONG NumberOfBytesRead = 0; +- ULONG CurrentOffset = 0; +- PVOID pVirtualAddress = NULL; +- UINT NdisBufferLength; +- PUCHAR pSrc; +- USHORT Protocol; +- UCHAR ByteOffset36 = 0; +- UCHAR ByteOffset38 = 0; +- BOOLEAN ReadFirstParm = TRUE; +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, (PUCHAR *)&pVirtualAddress, &NdisBufferLength); +- +- NumberOfBytesRead += NdisBufferLength; +- pSrc = (PUCHAR) pVirtualAddress; +- Protocol = *(pSrc + 12) * 256 + *(pSrc + 13); +- +- // +- // Check DHCP & BOOTP protocol +- // +- while (NumberOfBytesRead <= PacketInfo.TotalPacketLength) +- { +- if ((NumberOfBytesRead >= 35) && (ReadFirstParm == TRUE)) +- { +- CurrentOffset = 35 - (NumberOfBytesRead - NdisBufferLength); +- ByteOffset36 = *(pSrc + CurrentOffset); +- ReadFirstParm = FALSE; +- } +- +- if (NumberOfBytesRead >= 37) +- { +- CurrentOffset = 37 - (NumberOfBytesRead - NdisBufferLength); +- ByteOffset38 = *(pSrc + CurrentOffset); +- //End of Read +- break; +- } +- return FALSE; +- } +- +- // Check for DHCP & BOOTP protocol +- if ((ByteOffset36 != 0x44) || (ByteOffset38 != 0x43)) +- { +- // +- // 2054 (hex 0806) for ARP datagrams +- // if this packet is not ARP datagrams, then do nothing +- // ARP datagrams will also be duplicate at 1mb broadcast frames +- // +- if (Protocol != 0x0806 ) +- return FALSE; +- } +- +- return TRUE; +-} +- +- +-BOOLEAN RTMPCheckEtherType( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- USHORT TypeLen; +- UCHAR Byte0, Byte1; +- PUCHAR pSrcBuf; +- UINT32 pktLen; +- UINT16 srcPort, dstPort; +- BOOLEAN status = TRUE; +- +- +- pSrcBuf = GET_OS_PKT_DATAPTR(pPacket); +- pktLen = GET_OS_PKT_LEN(pPacket); +- +- ASSERT(pSrcBuf); +- +- RTMP_SET_PACKET_SPECIFIC(pPacket, 0); +- +- // get Ethernet protocol field +- TypeLen = (pSrcBuf[12] << 8) + pSrcBuf[13]; +- +- pSrcBuf += LENGTH_802_3; // Skip the Ethernet Header. +- +- if (TypeLen <= 1500) +- { // 802.3, 802.3 LLC +- /* +- DestMAC(6) + SrcMAC(6) + Lenght(2) + +- DSAP(1) + SSAP(1) + Control(1) + +- if the DSAP = 0xAA, SSAP=0xAA, Contorl = 0x03, it has a 5-bytes SNAP header. +- => + SNAP (5, OriginationID(3) + etherType(2)) +- */ +- if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA && pSrcBuf[2] == 0x03) +- { +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 6, &Byte0, &Byte1); +- RTMP_SET_PACKET_LLCSNAP(pPacket, 1); +- TypeLen = (USHORT)((Byte0 << 8) + Byte1); +- pSrcBuf += 8; // Skip this LLC/SNAP header +- } +- else +- { +- //It just has 3-byte LLC header, maybe a legacy ether type frame. we didn't handle it. +- } +- } +- +- // If it's a VLAN packet, get the real Type/Length field. +- if (TypeLen == 0x8100) +- { +- /* 0x8100 means VLAN packets */ +- +- /* Dest. MAC Address (6-bytes) + +- Source MAC Address (6-bytes) + +- Length/Type = 802.1Q Tag Type (2-byte) + +- Tag Control Information (2-bytes) + +- Length / Type (2-bytes) + +- data payload (0-n bytes) + +- Pad (0-p bytes) + +- Frame Check Sequence (4-bytes) */ +- +- RTMP_SET_PACKET_VLAN(pPacket, 1); +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 2, &Byte0, &Byte1); +- TypeLen = (USHORT)((Byte0 << 8) + Byte1); +- +- pSrcBuf += 4; // Skip the VLAN Header. +- } +- +- switch (TypeLen) +- { +- case 0x0800: +- { +- ASSERT((pktLen > 34)); +- if (*(pSrcBuf + 9) == 0x11) +- { // udp packet +- ASSERT((pktLen > 34)); // 14 for ethernet header, 20 for IP header +- +- pSrcBuf += 20; // Skip the IP header +- srcPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf))); +- dstPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf+2))); +- +- if ((srcPort==0x44 && dstPort==0x43) || (srcPort==0x43 && dstPort==0x44)) +- { //It's a BOOTP/DHCP packet +- RTMP_SET_PACKET_DHCP(pPacket, 1); +- } +- } +- } +- break; +- case 0x0806: +- { +- //ARP Packet. +- RTMP_SET_PACKET_DHCP(pPacket, 1); +- } +- break; +- case 0x888e: +- { +- // EAPOL Packet. +- RTMP_SET_PACKET_EAPOL(pPacket, 1); +- } +- break; +- default: +- status = FALSE; +- break; +- } +- +- return status; +- +-} +- +- +- +-VOID Update_Rssi_Sample( +- IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE *pRssi, +- IN PRXWI_STRUC pRxWI) +- { +- CHAR rssi0 = pRxWI->RSSI0; +- CHAR rssi1 = pRxWI->RSSI1; +- CHAR rssi2 = pRxWI->RSSI2; +- +- if (rssi0 != 0) +- { +- pRssi->LastRssi0 = ConvertToRssi(pAd, (CHAR)rssi0, RSSI_0); +- pRssi->AvgRssi0X8 = (pRssi->AvgRssi0X8 - pRssi->AvgRssi0) + pRssi->LastRssi0; +- pRssi->AvgRssi0 = pRssi->AvgRssi0X8 >> 3; +- } +- +- if (rssi1 != 0) +- { +- pRssi->LastRssi1 = ConvertToRssi(pAd, (CHAR)rssi1, RSSI_1); +- pRssi->AvgRssi1X8 = (pRssi->AvgRssi1X8 - pRssi->AvgRssi1) + pRssi->LastRssi1; +- pRssi->AvgRssi1 = pRssi->AvgRssi1X8 >> 3; +- } +- +- if (rssi2 != 0) +- { +- pRssi->LastRssi2 = ConvertToRssi(pAd, (CHAR)rssi2, RSSI_2); +- pRssi->AvgRssi2X8 = (pRssi->AvgRssi2X8 - pRssi->AvgRssi2) + pRssi->LastRssi2; +- pRssi->AvgRssi2 = pRssi->AvgRssi2X8 >> 3; +- } +-} +- +- +- +-// Normal legacy Rx packet indication +-VOID Indicate_Legacy_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR Header802_3[LENGTH_802_3]; +- +- // 1. get 802.3 Header +- // 2. remove LLC +- // a. pointer pRxBlk->pData to payload +- // b. modify pRxBlk->DataSize +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); +-#endif // CONFIG_STA_SUPPORT // +- +- if (pRxBlk->DataSize > MAX_RX_PKT_LEN) +- { +- +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- +- STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); +- +- +- wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); +- +- // +- // pass this 802.3 packet to upper layer or forward this packet to WM directly +- // +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxPacket, FromWhichBSSID); +-#endif // CONFIG_STA_SUPPORT // +- +-} +- +- +-// Normal, AMPDU or AMSDU +-VOID CmmRxnonRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +-#ifdef DOT11_N_SUPPORT +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0)) +- { +- Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +-#ifdef DOT11_N_SUPPORT +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) +- { +- // handle A-MSDU +- Indicate_AMSDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- } +-} +- +- +-VOID CmmRxRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- UCHAR Header802_3[LENGTH_802_3]; +- UINT16 Msdu2Size; +- UINT16 Payload1Size, Payload2Size; +- PUCHAR pData2; +- PNDIS_PACKET pPacket2 = NULL; +- +- +- +- Msdu2Size = *(pRxBlk->pData) + (*(pRxBlk->pData+1) << 8); +- +- if ((Msdu2Size <= 1536) && (Msdu2Size < pRxBlk->DataSize)) +- { +- /* skip two byte MSDU2 len */ +- pRxBlk->pData += 2; +- pRxBlk->DataSize -= 2; +- } +- else +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- // get 802.3 Header and remove LLC +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); +-#endif // CONFIG_STA_SUPPORT // +- +- +- ASSERT(pRxBlk->pRxPacket); +- +- // Ralink Aggregation frame +- pAd->RalinkCounters.OneSecRxAggregationCount ++; +- Payload1Size = pRxBlk->DataSize - Msdu2Size; +- Payload2Size = Msdu2Size - LENGTH_802_3; +- +- pData2 = pRxBlk->pData + Payload1Size + LENGTH_802_3; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pPacket2 = duplicate_pkt(pAd, (pData2-LENGTH_802_3), LENGTH_802_3, pData2, Payload2Size, FromWhichBSSID); +-#endif // CONFIG_STA_SUPPORT // +- +- if (!pPacket2) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- // update payload size of 1st packet +- pRxBlk->DataSize = Payload1Size; +- wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxBlk->pRxPacket, FromWhichBSSID); +-#endif // CONFIG_STA_SUPPORT // +- +- if (pPacket2) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket2, FromWhichBSSID); +-#endif // CONFIG_STA_SUPPORT // +- } +-} +- +- +-#define RESET_FRAGFRAME(_fragFrame) \ +- { \ +- _fragFrame.RxSize = 0; \ +- _fragFrame.Sequence = 0; \ +- _fragFrame.LastFrag = 0; \ +- _fragFrame.Flags = 0; \ +- } +- +- +-PNDIS_PACKET RTMPDeFragmentDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) +-{ +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; +- PNDIS_PACKET pRetPacket = NULL; +- UCHAR *pFragBuffer = NULL; +- BOOLEAN bReassDone = FALSE; +- UCHAR HeaderRoom = 0; +- +- +- ASSERT(pHeader); +- +- HeaderRoom = pData - (UCHAR *)pHeader; +- +- // Re-assemble the fragmented packets +- if (pHeader->Frag == 0) // Frag. Number is 0 : First frag or only one pkt +- { +- // the first pkt of fragment, record it. +- if (pHeader->FC.MoreFrag) +- { +- ASSERT(pAd->FragFrame.pFragPacket); +- pFragBuffer = GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); +- pAd->FragFrame.RxSize = DataSize + HeaderRoom; +- NdisMoveMemory(pFragBuffer, pHeader, pAd->FragFrame.RxSize); +- pAd->FragFrame.Sequence = pHeader->Sequence; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Should be 0 +- ASSERT(pAd->FragFrame.LastFrag == 0); +- goto done; // end of processing this frame +- } +- } +- else //Middle & End of fragment +- { +- if ((pHeader->Sequence != pAd->FragFrame.Sequence) || +- (pHeader->Frag != (pAd->FragFrame.LastFrag + 1))) +- { +- // Fragment is not the same sequence or out of fragment number order +- // Reset Fragment control blk +- RESET_FRAGFRAME(pAd->FragFrame); +- DBGPRINT(RT_DEBUG_ERROR, ("Fragment is not the same sequence or out of fragment number order.\n")); +- goto done; // give up this frame +- } +- else if ((pAd->FragFrame.RxSize + DataSize) > MAX_FRAME_SIZE) +- { +- // Fragment frame is too large, it exeeds the maximum frame size. +- // Reset Fragment control blk +- RESET_FRAGFRAME(pAd->FragFrame); +- DBGPRINT(RT_DEBUG_ERROR, ("Fragment frame is too large, it exeeds the maximum frame size.\n")); +- goto done; // give up this frame +- } +- +- // +- // Broadcom AP(BCM94704AGR) will send out LLC in fragment's packet, LLC only can accpet at first fragment. +- // In this case, we will dropt it. +- // +- if (NdisEqualMemory(pData, SNAP_802_1H, sizeof(SNAP_802_1H))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Find another LLC at Middle or End fragment(SN=%d, Frag=%d)\n", pHeader->Sequence, pHeader->Frag)); +- goto done; // give up this frame +- } +- +- pFragBuffer = GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); +- +- // concatenate this fragment into the re-assembly buffer +- NdisMoveMemory((pFragBuffer + pAd->FragFrame.RxSize), pData, DataSize); +- pAd->FragFrame.RxSize += DataSize; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Update fragment number +- +- // Last fragment +- if (pHeader->FC.MoreFrag == FALSE) +- { +- bReassDone = TRUE; +- } +- } +- +-done: +- // always release rx fragmented packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- +- // return defragmented packet if packet is reassembled completely +- // otherwise return NULL +- if (bReassDone) +- { +- PNDIS_PACKET pNewFragPacket; +- +- // allocate a new packet buffer for fragment +- pNewFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); +- if (pNewFragPacket) +- { +- // update RxBlk +- pRetPacket = pAd->FragFrame.pFragPacket; +- pAd->FragFrame.pFragPacket = pNewFragPacket; +- pRxBlk->pHeader = (PHEADER_802_11) GET_OS_PKT_DATAPTR(pRetPacket); +- pRxBlk->pData = (UCHAR *)pRxBlk->pHeader + HeaderRoom; +- pRxBlk->DataSize = pAd->FragFrame.RxSize - HeaderRoom; +- pRxBlk->pRxPacket = pRetPacket; +- } +- else +- { +- RESET_FRAGFRAME(pAd->FragFrame); +- } +- } +- +- return pRetPacket; +-} +- +- +-VOID Indicate_AMSDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- UINT nMSDU; +- +- update_os_packet_info(pAd, pRxBlk, FromWhichBSSID); +- RTMP_SET_PACKET_IF(pRxBlk->pRxPacket, FromWhichBSSID); +- nMSDU = deaggregate_AMSDU_announce(pAd, pRxBlk->pRxPacket, pRxBlk->pData, pRxBlk->DataSize); +-} +- +-VOID Indicate_EAPOL_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- MAC_TABLE_ENTRY *pEntry = NULL; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID); +- return; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- if (pEntry == NULL) +- { +- DBGPRINT(RT_DEBUG_WARN, ("Indicate_EAPOL_Packet: drop and release the invalid packet.\n")); +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +-} +- +-#define BCN_TBTT_OFFSET 64 //defer 64 us +-VOID ReSyncBeaconTime( +- IN PRTMP_ADAPTER pAd) +-{ +- +- UINT32 Offset; +- +- +- Offset = (pAd->TbttTickCount) % (BCN_TBTT_OFFSET); +- +- pAd->TbttTickCount++; +- +- // +- // The updated BeaconInterval Value will affect Beacon Interval after two TBTT +- // beacasue the original BeaconInterval had been loaded into next TBTT_TIMER +- // +- if (Offset == (BCN_TBTT_OFFSET-2)) +- { +- BCN_TIME_CFG_STRUC csr; +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod << 4) - 1 ; // ASIC register in units of 1/16 TU = 64us +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +- } +- else +- { +- if (Offset == (BCN_TBTT_OFFSET-1)) +- { +- BCN_TIME_CFG_STRUC csr; +- +- RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod) << 4; // ASIC register in units of 1/16 TU +- RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +- } +- } +-} +diff --git a/drivers/staging/rt3090/common/cmm_data_pci.c b/drivers/staging/rt3090/common/cmm_data_pci.c +deleted file mode 100644 +index 084f819..0000000 +--- a/drivers/staging/rt3090/common/cmm_data_pci.c ++++ /dev/null +@@ -1,1576 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-/* +- All functions in this file must be PCI-depended, or you should out your function +- in other files. +- +-*/ +-#include "../rt_config.h" +- +- +-USHORT RtmpPCI_WriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- { +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHeaderLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- } +- else +- { +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- } +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +- +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +-} +- +- +-USHORT RtmpPCI_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +-#endif +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI); +- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE); +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif // RT_BIG_ENDIAN // +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +-} +- +- +-USHORT RtmpPCI_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber) +-{ +- BOOLEAN bIsLast; +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHdrLen; +- UINT32 firstDMALen; +- +- bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- if (frameNum == 0) +- { +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; +- else +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; +- } +- else +- { +- firstDMALen = pTxBlk->MpduHeaderLen; +- } +- +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +-#endif +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +-#ifdef RT_BIG_ENDIAN +- if (frameNum == 0) +- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA+ TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE); +- +- if (frameNum != 0) +- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI); +- +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif // RT_BIG_ENDIAN // +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +- +-} +- +- +-VOID RtmpPCI_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx) +-{ +- +- PTXWI_STRUC pTxWI; +- PRTMP_TX_RING pTxRing; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; +- pTxWI->MPDUtotalByteCount = totalMPDUSize; +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI); +-#endif // RT_BIG_ENDIAN // +- +-} +- +- +-VOID RtmpPCIDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT LastTxIdx) +-{ +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- PRTMP_TX_RING pTxRing; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[QueIdx]; +- +- // +- // build Tx Descriptor +- // +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +-#endif +- +- pTxD->LastSec1 = 1; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif // RT_BIG_ENDIAN // +- +-} +- +- +-USHORT RtmpPCI_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber) +-{ +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- UINT32 firstDMALen; +- +- // +- // Get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // +- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- // +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); +- +- +- // +- // Build Tx Descriptor +- // +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +-#endif +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- if (fragNum == pTxBlk->TotalFragNum) +- { +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- } +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = 1; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI); +- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE); +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif // RT_BIG_ENDIAN // +- +- RetTxIdx = TxIdx; +- pTxBlk->Priv += pTxBlk->SrcBufLen; +- +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +- +-} +- +- +-/* +- Must be run in Interrupt context +- This function handle PCI specific TxDesc and cpu index update and kick the packet out. +- */ +-int RtmpPCIMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen) +-{ +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; +- +-#ifdef RT_BIG_ENDIAN +- pDestTxD = (PTXD_STRUC)pAd->MgmtRing.Cell[SwIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#else +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; +-#endif +- +- pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket; +- pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL; +- +- RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_MGMT); +- pTxD->LastSec0 = 1; +- pTxD->LastSec1 = 1; +- pTxD->DMADONE = 0; +- pTxD->SDLen1 = 0; +- pTxD->SDPtr0 = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); +- pTxD->SDLen0 = SrcBufLen; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- +-//================================================================== +-/* DBGPRINT_RAW(RT_DEBUG_TRACE, ("MLMEHardTransmit\n")); +- for (i = 0; i < (TXWI_SIZE+24); i++) +- { +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("%x:", *(pSrcBufVA+i))); +- if ( i%4 == 3) +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" :: ")); +- if ( i%16 == 15) +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n ")); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n "));*/ +-//======================================================================= +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // Increase TX_CTX_IDX, but write to register later. +- INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); +- +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +- +- return 0; +-} +- +- +-#ifdef CONFIG_STA_SUPPORT +-/* +- ======================================================================== +- +- Routine Description: +- Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound +- +- Arguments: +- pRxD Pointer to the Rx descriptor +- +- Return Value: +- NDIS_STATUS_SUCCESS No err +- NDIS_STATUS_FAILURE Error +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD) +-{ +- PCIPHER_KEY pWpaKey; +- INT dBm; +- +- // Phy errors & CRC errors +- if (/*(pRxD->PhyErr) ||*/ (pRxD->Crc)) +- { +- // Check RSSI for Noise Hist statistic collection. +- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; +- if (dBm <= -87) +- pAd->StaCfg.RPIDensity[0] += 1; +- else if (dBm <= -82) +- pAd->StaCfg.RPIDensity[1] += 1; +- else if (dBm <= -77) +- pAd->StaCfg.RPIDensity[2] += 1; +- else if (dBm <= -72) +- pAd->StaCfg.RPIDensity[3] += 1; +- else if (dBm <= -67) +- pAd->StaCfg.RPIDensity[4] += 1; +- else if (dBm <= -62) +- pAd->StaCfg.RPIDensity[5] += 1; +- else if (dBm <= -57) +- pAd->StaCfg.RPIDensity[6] += 1; +- else if (dBm > -57) +- pAd->StaCfg.RPIDensity[7] += 1; +- +- return(NDIS_STATUS_FAILURE); +- } +- +- // Add Rx size to channel load counter, we should ignore error counts +- pAd->StaCfg.CLBusyBytes += (pRxD->SDL0 + 14); +- +- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics +- if (pHeader != NULL) +- { +- if (pHeader->FC.ToDs) +- { +- return(NDIS_STATUS_FAILURE); +- } +- } +- +- // Drop not U2M frames, cant's drop here because we will drop beacon in this case +- // I am kind of doubting the U2M bit operation +- // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); +- +- // drop decyption fail frame +- if (pRxD->CipherErr) +- { +- if (pRxD->CipherErr == 2) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV ok but MICErr "));} +- else if (pRxD->CipherErr == 1) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV Err "));} +- else if (pRxD->CipherErr == 3) +- DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: Key not valid ")); +- +- if (((pRxD->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" %d (len=%d, Mcast=%d, MyBss=%d, Wcid=%d, KeyId=%d)\n", +- pRxD->CipherErr, +- pRxD->SDL0, +- pRxD->Mcast | pRxD->Bcast, +- pRxD->MyBss, +- pRxWI->WirelessCliID, +-// CipherName[pRxD->CipherAlg], +- pRxWI->KeyIndex)); +- +- // +- // MIC Error +- // +- if (pRxD->CipherErr == 2) +- { +- pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP) +- WpaSendMicFailureToWpaSupplicant(pAd, +- (pWpaKey->Type == PAIRWISEKEY) ? TRUE:FALSE); +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- RTMPReportMicError(pAd, pWpaKey); +- +- if (((pRxD->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); +- } +- +- if (pHeader == NULL) +- return(NDIS_STATUS_SUCCESS); +- /*if ((pRxD->CipherAlg == CIPHER_AES) && +- (pHeader->Sequence == pAd->FragFrame.Sequence)) +- { +- // +- // Acceptable since the First FragFrame no CipherErr problem. +- // +- return(NDIS_STATUS_SUCCESS); +- }*/ +- +- return(NDIS_STATUS_FAILURE); +- } +- +- return(NDIS_STATUS_SUCCESS); +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-BOOLEAN RTMPFreeTXDUponTxDmaDone( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx) +-{ +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +-#endif +- PNDIS_PACKET pPacket; +- UCHAR FREE = 0; +- TXD_STRUC TxD, *pOriTxD; +- //ULONG IrqFlags; +- BOOLEAN bReschedule = FALSE; +- +- +- ASSERT(QueIdx < NUM_OF_TX_RING); +- pTxRing = &pAd->TxRing[QueIdx]; +- +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, &pTxRing->TxDmaIdx); +- while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) +- { +-// RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +-#ifdef RALINK_ATE +-#ifdef RALINK_28xx_QA +- PHEADER_802_11 pHeader80211; +- +- if ((ATE_ON(pAd)) && (pAd->ate.bQATxStart == TRUE)) +- { +- if (pAd->ate.QID == QueIdx) +- { +- pAd->ate.TxDoneCount++; +- pAd->RalinkCounters.KickTxCount++; +- +- /* always use QID_AC_BE and FIFO_EDCA */ +- ASSERT(pAd->ate.QID == 0); +- pAd->ate.TxAc0++; +- +- FREE++; +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); +- pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); +- pTxD = &TxD; +-#else +- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); +- pOriTxD = pDestTxD ; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- pTxD->DMADONE = 0; +- +- pHeader80211 = pTxRing->Cell[pTxRing->TxSwFreeIdx].DmaBuf.AllocVa + sizeof(TXWI_STRUC); +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader80211, DIR_READ, FALSE); +-#endif +- pHeader80211->Sequence = ++pAd->ate.seq; +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader80211, DIR_WRITE, FALSE); +-#endif +- +- if ((pAd->ate.bQATxStart == TRUE) && (pAd->ate.Mode & ATE_TXFRAME) && (pAd->ate.TxDoneCount < pAd->ate.TxCount)) +- { +- pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); +- pAd->RalinkCounters.OneSecTransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); +- pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++; +- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); +- +- /* get TX_DTX_IDX again */ +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx); +- goto kick_out; +- } +- else if ((pAd->ate.TxStatus == 1)/* or (pAd->ate.bQATxStart == TRUE) ??? */ && (pAd->ate.TxDoneCount == pAd->ate.TxCount)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("all Tx is done\n")); +- +- // Tx status enters idle mode. +- pAd->ate.TxStatus = 0; +- } +- else if (!(pAd->ate.Mode & ATE_TXFRAME)) +- { +- /* not complete sending yet, but someone press the Stop TX botton */ +- DBGPRINT(RT_DEBUG_ERROR,("not complete sending yet, but someone pressed the Stop TX bottom\n")); +- DBGPRINT(RT_DEBUG_ERROR,("pAd->ate.Mode = 0x%02x\n", pAd->ate.Mode)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_OFF,("pTxRing->TxSwFreeIdx = %d\n", pTxRing->TxSwFreeIdx)); +- } +- +-#ifndef RT_BIG_ENDIAN +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); +-#else +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- *pDestTxD = TxD; +-#endif // RT_BIG_ENDIAN // +- +- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); +- continue; +- } +- } +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +- // static rate also need NICUpdateFifoStaCounters() function. +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- NICUpdateFifoStaCounters(pAd); +- +- /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ +- FREE++; +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); +- pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); +- pTxD = &TxD; +-#else +- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); +- pOriTxD = pDestTxD ; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- +- pTxD->DMADONE = 0; +- +- +-#ifdef RALINK_ATE +- /* Execution of this block is not allowed when ATE is running. */ +- if (!(ATE_ON(pAd))) +-#endif // RALINK_ATE // +- { +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket; +- if (pPacket) +- { +-#ifdef CONFIG_5VT_ENHANCE +- if (RTMP_GET_PACKET_5VT(pPacket)) +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, 16, PCI_DMA_TODEVICE); +- else +-#endif // CONFIG_5VT_ENHANCE // +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket; +- +- ASSERT(pPacket == NULL); +- if (pPacket) +- { +-#ifdef CONFIG_5VT_ENHANCE +- if (RTMP_GET_PACKET_5VT(pPacket)) +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, 16, PCI_DMA_TODEVICE); +- else +-#endif // CONFIG_5VT_ENHANCE // +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- } +- +- pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); +- pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++; +- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); +- /* get tx_tdx_idx again */ +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx); +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- *pDestTxD = TxD; +-#else +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); +-#endif +- +-#ifdef RALINK_ATE +-#ifdef RALINK_28xx_QA +-kick_out: +-#endif // RALINK_28xx_QA // +- +- /* +- ATE_TXCONT mode also need to send some normal frames, so let it in. +- ATE_STOP must be changed not to be 0xff +- to prevent it from running into this block. +- */ +- if ((pAd->ate.Mode & ATE_TXFRAME) && (pAd->ate.QID == QueIdx)) +- { +- // TxDoneCount++ has been done if QA is used. +- if (pAd->ate.bQATxStart == FALSE) +- { +- pAd->ate.TxDoneCount++; +- } +- if (((pAd->ate.TxCount - pAd->ate.TxDoneCount + 1) >= TX_RING_SIZE)) +- { +- /* Note : We increase TxCpuIdx here, not TxSwFreeIdx ! */ +- INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) (pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa); +- pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); +- pTxD = &TxD; +-#else +- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa); +- pOriTxD = pDestTxD ; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- pTxD->DMADONE = 0; +-#ifndef RT_BIG_ENDIAN +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); +-#else +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- *pDestTxD = TxD; +-#endif +- // kick Tx-Ring +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx * RINGREG_DIFF, pAd->TxRing[QueIdx].TxCpuIdx); +- pAd->RalinkCounters.KickTxCount++; +- } +- } +-#endif // RALINK_ATE // +-// RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- } +- +- +- return bReschedule; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Process TX Rings DMA Done interrupt, running in DPC level +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap) +-{ +-// UCHAR Count = 0; +- unsigned long IrqFlags; +- BOOLEAN bReschedule = FALSE; +- +- // Make sure Tx ring resource won't be used by other threads +- //NdisAcquireSpinLock(&pAd->TxRingLock); +- +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- +- if (TxRingBitmap.field.Ac0DmaDone) +- bReschedule = RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BE); +-/* +- if (TxRingBitmap.field.HccaDmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_HCCA); +-*/ +- +- if (TxRingBitmap.field.Ac3DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VO); +- +- if (TxRingBitmap.field.Ac2DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_VI); +- +- if (TxRingBitmap.field.Ac1DmaDone) +- bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BK); +- +- // Make sure to release Tx ring resource +- //NdisReleaseSpinLock(&pAd->TxRingLock); +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- +- // Dequeue outgoing frames from TxSwQueue[] and process it +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- +- return bReschedule; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Process MGMT ring DMA done interrupt, running in DPC level +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPHandleMgmtRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- PNDIS_PACKET pPacket; +-// int i; +- UCHAR FREE = 0; +- PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; +- +- NdisAcquireSpinLock(&pAd->MgmtRingLock); +- +- RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pMgmtRing->TxDmaIdx); +- while (pMgmtRing->TxSwFreeIdx!= pMgmtRing->TxDmaIdx) +- { +- FREE++; +-#ifdef RT_BIG_ENDIAN +- pDestTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa); +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#else +- pTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa); +-#endif +- pTxD->DMADONE = 0; +- pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket; +- +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket = NULL; +- +- pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket; +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- INC_RING_INDEX(pMgmtRing->TxSwFreeIdx, MGMT_RING_SIZE); +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, TRUE, TYPE_TXD); +-#endif +- } +- NdisReleaseSpinLock(&pAd->MgmtRingLock); +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Arguments: +- Adapter Pointer to our adapter. Dequeue all power safe delayed braodcast frames after beacon. +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPHandleTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- } +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Arguments: +- pAd Pointer to our adapter. Rewrite beacon content before next send-out. +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPHandlePreTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPHandlePreTBTTInterrupt...\n")); +- } +- } +- +- +-} +- +-VOID RTMPHandleRxCoherentInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- if (pAd == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("====> pAd is NULL, return.\n")); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPHandleRxCoherentInterrupt \n")); +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG , &GloCfg.word); +- +- GloCfg.field.EnTXWriteBackDDONE = 0; +- GloCfg.field.EnableRxDMA = 0; +- GloCfg.field.EnableTxDMA = 0; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- /*RTMPRingCleanUp(pAd, QID_HCCA);*/ +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- RTMPEnableRxTx(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); +-} +- +- +- +- +-VOID DBGPRINT_TX_RING( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx) +-{ +- UINT32 Ac0Base; +- UINT32 Ac0HwIdx = 0, Ac0SwIdx = 0, AC0freeIdx; +- int i; +-// PULONG pTxD; +- PULONG ptemp; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("=====================================================\n " )); +- switch (QueIdx) +- { +- case QID_AC_BE: +- RTMP_IO_READ32(pAd, TX_BASE_PTR0, &Ac0Base); +- RTMP_IO_READ32(pAd, TX_CTX_IDX0, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, TX_DTX_IDX0, &Ac0HwIdx); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("All QID_AC_BE DESCRIPTOR \n " )); +- for (i=0;iTxRing[QID_AC_BE].Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08lx: %08lx: %08lx: %08lx\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" \n " )); +- break; +- case QID_AC_BK: +- RTMP_IO_READ32(pAd, TX_BASE_PTR1, &Ac0Base); +- RTMP_IO_READ32(pAd, TX_CTX_IDX1, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, TX_DTX_IDX1, &Ac0HwIdx); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("All QID_AC_BK DESCRIPTOR \n " )); +- for (i=0;iTxRing[QID_AC_BK].Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08lx: %08lx: %08lx: %08lx\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" \n " )); +- break; +- case QID_AC_VI: +- RTMP_IO_READ32(pAd, TX_BASE_PTR2, &Ac0Base); +- RTMP_IO_READ32(pAd, TX_CTX_IDX2, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, TX_DTX_IDX2, &Ac0HwIdx); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("All QID_AC_VI DESCRIPTOR \n " )); +- for (i=0;iTxRing[QID_AC_VI].Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08lx: %08lx: %08lx: %08lx\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" \n " )); +- break; +- case QID_AC_VO: +- RTMP_IO_READ32(pAd, TX_BASE_PTR3, &Ac0Base); +- RTMP_IO_READ32(pAd, TX_CTX_IDX3, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, TX_DTX_IDX3, &Ac0HwIdx); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("All QID_AC_VO DESCRIPTOR \n " )); +- for (i=0;iTxRing[QID_AC_VO].Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08lx: %08lx: %08lx: %08lx\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" \n " )); +- break; +- case QID_MGMT: +- RTMP_IO_READ32(pAd, TX_BASE_PTR5, &Ac0Base); +- RTMP_IO_READ32(pAd, TX_CTX_IDX5, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, TX_DTX_IDX5, &Ac0HwIdx); +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" All QID_MGMT DESCRIPTOR \n " )); +- for (i=0;iMgmtRing.Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08lx: %08lx: %08lx: %08lx\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" \n " )); +- break; +- +- default: +- DBGPRINT_ERR(("DBGPRINT_TX_RING(Ring %d) not supported\n", QueIdx)); +- break; +- } +- AC0freeIdx = pAd->TxRing[QueIdx].TxSwFreeIdx; +- +- DBGPRINT(RT_DEBUG_TRACE,("TxRing%d, TX_DTX_IDX=%d, TX_CTX_IDX=%d\n", QueIdx, Ac0HwIdx, Ac0SwIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" TxSwFreeIdx[%d]", AC0freeIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" pending-NDIS=%ld\n", pAd->RalinkCounters.PendingNdisPacketCount)); +- +- +-} +- +- +-VOID DBGPRINT_RX_RING( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 Ac0Base; +- UINT32 Ac0HwIdx = 0, Ac0SwIdx = 0, AC0freeIdx; +-// PULONG pTxD; +- int i; +- UINT32 *ptemp; +-// PRXD_STRUC pRxD; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("=====================================================\n " )); +- RTMP_IO_READ32(pAd, RX_BASE_PTR, &Ac0Base); +- RTMP_IO_READ32(pAd, RX_CRX_IDX, &Ac0SwIdx); +- RTMP_IO_READ32(pAd, RX_DRX_IDX, &Ac0HwIdx); +- AC0freeIdx = pAd->RxRing.RxSwReadIdx; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("All RX DSP \n " )); +- for (i=0;iRxRing.Cell[i].AllocVa; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("[%02d] %08x: %08x: %08x: %08x\n " , i, *ptemp,*(ptemp+1),*(ptemp+2),*(ptemp+3))); +- } +- DBGPRINT(RT_DEBUG_TRACE,("RxRing, RX_DRX_IDX=%d, RX_CRX_IDX=%d \n", Ac0HwIdx, Ac0SwIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" RxSwReadIdx [%d]=", AC0freeIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" pending-NDIS=%ld\n", pAd->RalinkCounters.PendingNdisPacketCount)); +-} +- +- +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending) +-{ +- PRXD_STRUC pRxD; +-#ifdef RT_BIG_ENDIAN +- PRXD_STRUC pDestRxD; +- RXD_STRUC RxD; +-#endif +- PNDIS_PACKET pRxPacket = NULL; +- PNDIS_PACKET pNewPacket; +- PVOID AllocVa; +- NDIS_PHYSICAL_ADDRESS AllocPa; +- BOOLEAN bReschedule = FALSE; +- +- RTMP_SEM_LOCK(&pAd->RxRingLock); +- +- if (*pRxPending == 0) +- { +- // Get how may packets had been received +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &pAd->RxRing.RxDmaIdx); +- +- if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) +- { +- // no more rx packets +- bReschedule = FALSE; +- goto done; +- } +- +- // get rx pending count +- if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx) +- *pRxPending = pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; +- else +- *pRxPending = pAd->RxRing.RxDmaIdx + RX_RING_SIZE - pAd->RxRing.RxSwReadIdx; +- +- } +- +-#ifdef RT_BIG_ENDIAN +- pDestRxD = (PRXD_STRUC) pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].AllocVa; +- RxD = *pDestRxD; +- pRxD = &RxD; +- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD); +-#else +- // Point to Rx indexed rx ring descriptor +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].AllocVa; +-#endif +- +- if (pRxD->DDONE == 0) +- { +- *pRxPending = 0; +- // DMAIndx had done but DDONE bit not ready +- bReschedule = TRUE; +- goto done; +- } +- +- +- // return rx descriptor +- NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE); +- +- pNewPacket = RTMP_AllocateRxPacketBuffer(pAd, RX_BUFFER_AGGRESIZE, FALSE, &AllocVa, &AllocPa); +- +- if (pNewPacket) +- { +- // unmap the rx buffer +- PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocPa, +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); +- pRxPacket = pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].pNdisPacket; +- +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].pNdisPacket = (PNDIS_PACKET) pNewPacket; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocVa = AllocVa; +- pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].DmaBuf.AllocPa = AllocPa; +- /* update SDP0 to new buffer of rx packet */ +- pRxD->SDP0 = AllocPa; +- } +- else +- { +- //DBGPRINT(RT_DEBUG_TRACE,("No Rx Buffer\n")); +- pRxPacket = NULL; +- bReschedule = TRUE; +- } +- +- pRxD->DDONE = 0; +- +- // had handled one rx packet +- *pRxPending = *pRxPending - 1; +- +- // update rx descriptor and kick rx +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD); +- WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, FALSE, TYPE_RXD); +-#endif +- INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE); +- +- pAd->RxRing.RxCpuIdx = (pAd->RxRing.RxSwReadIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxSwReadIdx-1); +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- +-done: +- RTMP_SEM_UNLOCK(&pAd->RxRingLock); +- *pbReschedule = bReschedule; +- return pRxPacket; +-} +- +- +-NDIS_STATUS MlmeHardTransmitTxRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- PHEADER_802_11 pHeader_802_11; +- BOOLEAN bAckRequired, bInsertTimestamp; +- ULONG SrcBufPA; +- //UCHAR TxBufIdx; +- UCHAR MlmeRate; +- ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- PTXWI_STRUC pFirstTxWI; +- //ULONG i; +- //HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. +- ULONG FreeNum; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- +- if (pSrcBufVA == NULL) +- { +- // The buffer shouldn't be NULL +- return NDIS_STATUS_FAILURE; +- } +- +- // Make sure MGMT ring resource won't be used by other threads +- //NdisAcquireSpinLock(&pAd->TxRingLock); +- +- FreeNum = GET_TXRING_FREENO(pAd, QueIdx); +- +- if (FreeNum == 0) +- { +- //NdisReleaseSpinLock(&pAd->TxRingLock); +- return NDIS_STATUS_FAILURE; +- } +- +- SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- +- if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) +- { +- DBGPRINT(RT_DEBUG_OFF, ("MlmeHardTransmit Error\n")); +- //NdisReleaseSpinLock(&pAd->TxRingLock); +- return NDIS_STATUS_FAILURE; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // outgoing frame always wakeup PHY to prevent frame lost +- // if (pAd->StaCfg.Psm == PWR_SAVE) +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, TRUE); +- } +-#endif // CONFIG_STA_SUPPORT // +- pFirstTxWI =(PTXWI_STRUC)pSrcBufVA; +- +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE); +- if (pHeader_802_11->Addr1[0] & 0x01) +- { +- MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- } +- else +- { +- MlmeRate = pAd->CommonCfg.MlmeRate; +- } +- +- if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) +- { +- pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); +- } +- +- // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band +- MlmeRate = RATE_6; +- +- // +- // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) +- // Snice it's been set to 0 while on MgtMacHeaderInit +- // By the way this will cause frame to be send on PWR_SAVE failed. +- // +- // +- // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +-#ifdef CONFIG_STA_SUPPORT +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +- if (pHeader_802_11->FC.Type != BTYPE_DATA) +- { +- if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) || !(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) +- { +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; +- } +- else +- { +- pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL +- { +- bAckRequired = FALSE; +- } +- else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) +- { +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST +- { +- bAckRequired = FALSE; +- pHeader_802_11->Duration = 0; +- } +- else +- { +- bAckRequired = TRUE; +- pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) +- { +- bInsertTimestamp = TRUE; +- } +- } +- } +- pHeader_802_11->Sequence = pAd->Sequence++; +- if (pAd->Sequence > 0xfff) +- pAd->Sequence = 0; +- // Before radar detection done, mgmt frame can not be sent but probe req +- // Because we need to use probe req to trigger driver to send probe req in passive scan +- if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +- //NdisReleaseSpinLock(&pAd->TxRingLock); +- return (NDIS_STATUS_FAILURE); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader_802_11, DIR_WRITE, FALSE); +-#endif +- // +- // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one ohysical buffer, and the whole frame size equals +- // to the first scatter buffer size +- // +- +- // Initialize TX Descriptor +- // For inter-frame gap, the number is for this frame and next frame +- // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; +- +-// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. +- // Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. +- if (pMacEntry == NULL) +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, +- bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), +- pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, +- IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); +- } +- +- pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket; +- pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL; +-// pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)pFirstTxWI, TYPE_TXWI); +-#endif +- SrcBufPA = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); +- +- +- RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_EDCA); +- pTxD->LastSec0 = 1; +- pTxD->LastSec1 = 1; +- pTxD->SDLen0 = SrcBufLen; +- pTxD->SDLen1 = 0; +- pTxD->SDPtr0 = SrcBufPA; +- pTxD->DMADONE = 0; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // Increase TX_CTX_IDX, but write to register later. +- INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); +- +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx*0x10, pAd->TxRing[QueIdx].TxCpuIdx); +- +- // Make sure to release MGMT ring resource +-// NdisReleaseSpinLock(&pAd->TxRingLock); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-NDIS_STATUS MlmeDataHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ +- if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- ) +- { +- return NDIS_STATUS_FAILURE; +- } +- +- return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculates the duration which is required to transmit out frames +- with given size and specified rate. +- +- Arguments: +- pTxD Pointer to transmit descriptor +- Ack Setting for Ack requirement bit +- Fragment Setting for Fragment bit +- RetryMode Setting for retry mode +- Ifs Setting for IFS gap +- Rate Setting for transmit rate +- Service Setting for service +- Length Frame length +- TxPreamble Short or Long preamble when using CCK rates +- QueIdx - 0-3, according to 802.11e/d4.4 June/2003 +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QueueSEL) +-{ +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- +- pTxD->WIV = (bWIV) ? 1: 0; +- pTxD->QSEL= (QueueSEL); +- //RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan +- //pTxD->QSEL= FIFO_EDCA; +- /* +- if (pAd->bGenOneHCCA == TRUE) +- pTxD->QSEL= FIFO_HCCA; +- */ +- pTxD->DMADONE = 0; +-} +diff --git a/drivers/staging/rt3090/common/cmm_info.c b/drivers/staging/rt3090/common/cmm_info.c +deleted file mode 100644 +index 3e51e98..0000000 +--- a/drivers/staging/rt3090/common/cmm_info.c ++++ /dev/null +@@ -1,3718 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_info.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include +-#include "../rt_config.h" +- +- +-INT Show_SSID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-#ifdef DOT11_N_SUPPORT +-INT Show_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +-#endif // DOT11_N_SUPPORT // +- +-INT Show_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_CountryCode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-#ifdef AGGREGATION_SUPPORT +-INT Show_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +-INT Show_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +-#endif // WMM_SUPPORT // +- +-INT Show_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-#ifdef CONFIG_STA_SUPPORT +-INT Show_NetworkType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-#endif // CONFIG_STA_SUPPORT // +- +-INT Show_AuthMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_EncrypType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key1_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key2_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key3_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key4_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-static struct { +- PSTRING name; +- INT (*show_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); +-} *PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC, RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC[] = { +- {"SSID", Show_SSID_Proc}, +- {"WirelessMode", Show_WirelessMode_Proc}, +- {"TxBurst", Show_TxBurst_Proc}, +- {"TxPreamble", Show_TxPreamble_Proc}, +- {"TxPower", Show_TxPower_Proc}, +- {"Channel", Show_Channel_Proc}, +- {"BGProtection", Show_BGProtection_Proc}, +- {"RTSThreshold", Show_RTSThreshold_Proc}, +- {"FragThreshold", Show_FragThreshold_Proc}, +-#ifdef DOT11_N_SUPPORT +- {"HtBw", Show_HtBw_Proc}, +- {"HtMcs", Show_HtMcs_Proc}, +- {"HtGi", Show_HtGi_Proc}, +- {"HtOpMode", Show_HtOpMode_Proc}, +- {"HtExtcha", Show_HtExtcha_Proc}, +- {"HtMpduDensity", Show_HtMpduDensity_Proc}, +- {"HtBaWinSize", Show_HtBaWinSize_Proc}, +- {"HtRdg", Show_HtRdg_Proc}, +- {"HtAmsdu", Show_HtAmsdu_Proc}, +- {"HtAutoBa", Show_HtAutoBa_Proc}, +-#endif // DOT11_N_SUPPORT // +- {"CountryRegion", Show_CountryRegion_Proc}, +- {"CountryRegionABand", Show_CountryRegionABand_Proc}, +- {"CountryCode", Show_CountryCode_Proc}, +-#ifdef AGGREGATION_SUPPORT +- {"PktAggregate", Show_PktAggregate_Proc}, +-#endif +- +-#ifdef WMM_SUPPORT +- {"WmmCapable", Show_WmmCapable_Proc}, +-#endif +- {"IEEE80211H", Show_IEEE80211H_Proc}, +-#ifdef CONFIG_STA_SUPPORT +- {"NetworkType", Show_NetworkType_Proc}, +-#endif // CONFIG_STA_SUPPORT // +- {"AuthMode", Show_AuthMode_Proc}, +- {"EncrypType", Show_EncrypType_Proc}, +- {"DefaultKeyID", Show_DefaultKeyID_Proc}, +- {"Key1", Show_Key1_Proc}, +- {"Key2", Show_Key2_Proc}, +- {"Key3", Show_Key3_Proc}, +- {"Key4", Show_Key4_Proc}, +- {"WPAPSK", Show_WPAPSK_Proc}, +- {NULL, NULL} +-}; +- +-/* +- ========================================================================== +- Description: +- Get Driver version. +- +- Return: +- ========================================================================== +-*/ +-INT Set_DriverVersion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION)); +-#endif // CONFIG_STA_SUPPORT // +- +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Country Region. +- This command will not work, if the field of CountryRegion in eeprom is programmed. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- return -EOPNOTSUPP; +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- retval = RT_CfgSetCountryRegion(pAd, arg, BAND_24G); +- if (retval == FALSE) +- return FALSE; +- +- // if set country region, driver needs to be reset +- BuildChannelList(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegion_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegion)); +- +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Country Region for A band. +- This command will not work, if the field of CountryRegion in eeprom is programmed. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- return -EOPNOTSUPP; +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- retval = RT_CfgSetCountryRegion(pAd, arg, BAND_5G); +- if (retval == FALSE) +- return FALSE; +- +- // if set country region, driver needs to be reset +- BuildChannelList(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegionABand_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegionForABand)); +- +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Wireless Mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT success = TRUE; +- +- success = RT_CfgSetWirelessMode(pAd, arg); +- if (success) +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- LONG WirelessMode = pAd->CommonCfg.PhyMode; +- +- RTMPSetPhyMode(pAd, WirelessMode); +-#ifdef DOT11_N_SUPPORT +- if (WirelessMode >= PHY_11ABGN_MIXED) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.REGBACapability.field.AutoBA = TRUE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.REGBACapability.field.AutoBA = FALSE; +- } +-#endif // DOT11_N_SUPPORT // +- // Set AdhocMode rates +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // it is needed to set SSID to take effect +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%d)\n", pAd->CommonCfg.PhyMode)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_WirelessMode_Proc::parameters out of range\n")); +- } +- +- return success; +-} +- +-/* +- ========================================================================== +- Description: +- Set Channel +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT success = TRUE; +- UCHAR Channel; +- +- Channel = (UCHAR) simple_strtol(arg, 0, 10); +- +- // check if this channel is valid +- if (ChannelSanity(pAd, Channel) == TRUE) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pAd->CommonCfg.Channel = Channel; +- +- if (MONITOR_ON(pAd)) +- { +-#ifdef DOT11_N_SUPPORT +- N_ChannelCheck(pAd); +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- N_SetCenCh(pAd); +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40, control_channel(%d), CentralChannel(%d) \n", +- pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAd->CommonCfg.Channel)); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- success = TRUE; +- } +- else +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- success = FALSE; +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +- if (success == TRUE) +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Channel_Proc::(Channel=%d)\n", pAd->CommonCfg.Channel)); +- +- return success; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Short Slot Time Enable or Disable +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_ShortSlot_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +- retval = RT_CfgSetShortSlot(pAd, arg); +- if (retval == TRUE) +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAd->CommonCfg.bUseShortSlotTime)); +- +- return retval; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Tx power +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG TxPower; +- INT success = FALSE; +- +- TxPower = simple_strtol(arg, 0, 10); +- if (TxPower <= 100) +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pAd->CommonCfg.TxPowerDefault = TxPower; +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- } +-#endif // CONFIG_STA_SUPPORT // +- success = TRUE; +- } +- else +- success = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPower_Proc::(TxPowerPercentage=%ld)\n", pAd->CommonCfg.TxPowerPercentage)); +- +- return success; +-} +- +-/* +- ========================================================================== +- Description: +- Set 11B/11G Protection +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- switch (simple_strtol(arg, 0, 10)) +- { +- case 0: //AUTO +- pAd->CommonCfg.UseBGProtection = 0; +- break; +- case 1: //Always On +- pAd->CommonCfg.UseBGProtection = 1; +- break; +- case 2: //Always OFF +- pAd->CommonCfg.UseBGProtection = 2; +- break; +- default: //Invalid argument +- return FALSE; +- } +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_BGProtection_Proc::(BGProtection=%ld)\n", pAd->CommonCfg.UseBGProtection)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set TxPreamble +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- RT_802_11_PREAMBLE Preamble; +- +- Preamble = simple_strtol(arg, 0, 10); +- +- +- switch (Preamble) +- { +- case Rt802_11PreambleShort: +- pAd->CommonCfg.TxPreamble = Preamble; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); +-#endif // CONFIG_STA_SUPPORT // +- break; +- case Rt802_11PreambleLong: +-#ifdef CONFIG_STA_SUPPORT +- case Rt802_11PreambleAuto: +- // if user wants AUTO, initialize to LONG here, then change according to AP's +- // capability upon association. +-#endif // CONFIG_STA_SUPPORT // +- pAd->CommonCfg.TxPreamble = Preamble; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); +-#endif // CONFIG_STA_SUPPORT // +- break; +- default: //Invalid argument +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPreamble_Proc::(TxPreamble=%ld)\n", pAd->CommonCfg.TxPreamble)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set RTS Threshold +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_RTS_THRESHOLD RtsThresh; +- +- RtsThresh = simple_strtol(arg, 0, 10); +- +- if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD)) +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +-#ifdef CONFIG_STA_SUPPORT +- else if (RtsThresh == 0) +- pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; +-#endif // CONFIG_STA_SUPPORT // +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAd->CommonCfg.RtsThreshold)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Fragment Threshold +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; +- +- FragThresh = simple_strtol(arg, 0, 10); +- +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { +- //Illegal FragThresh so we set it to default +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- } +- else if (FragThresh % 2 == 1) +- { +- // The length of each fragment shall always be an even number of octets, except for the last fragment +- // of an MSDU or MMPDU, which may be either an even or an odd number of octets. +- pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); +- } +- else +- { +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD) +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- else +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_FragThreshold_Proc::(FragThreshold=%d)\n", pAd->CommonCfg.FragmentThreshold)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set TxBurst +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG TxBurst; +- +- TxBurst = simple_strtol(arg, 0, 10); +- if (TxBurst == 1) +- pAd->CommonCfg.bEnableTxBurst = TRUE; +- else if (TxBurst == 0) +- pAd->CommonCfg.bEnableTxBurst = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxBurst_Proc::(TxBurst=%d)\n", pAd->CommonCfg.bEnableTxBurst)); +- +- return TRUE; +-} +- +-#ifdef AGGREGATION_SUPPORT +-/* +- ========================================================================== +- Description: +- Set TxBurst +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG aggre; +- +- aggre = simple_strtol(arg, 0, 10); +- +- if (aggre == 1) +- pAd->CommonCfg.bAggregationCapable = TRUE; +- else if (aggre == 0) +- pAd->CommonCfg.bAggregationCapable = FALSE; +- else +- return FALSE; //Invalid argument +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_PktAggregate_Proc::(AGGRE=%d)\n", pAd->CommonCfg.bAggregationCapable)); +- +- return TRUE; +-} +-#endif +- +- +-#ifdef INF_AMAZON_PPA +-INT Set_INF_AMAZON_SE_PPA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) +-{ +- ULONG aggre; +- UINT status; +- +- aggre = simple_strtol(arg, 0, 10); +- +- if (aggre == 1) +- { +- if(pAd->PPAEnable==TRUE) +- { +- printk("INF_AMAZON_SE_PPA already enabled \n"); +- } +- else +- { +- if (ppa_hook_directpath_register_dev_fn) +- { +- UINT32 g_if_id; +- +- if (pAd->pDirectpathCb == NULL) +- { +- pAd->pDirectpathCb = (PPA_DIRECTPATH_CB *) kmalloc (sizeof(PPA_DIRECTPATH_CB), GFP_ATOMIC); +- printk("Realloc memory for pDirectpathCb ??\n"); +- } +- +- /* register callback */ +- pAd->pDirectpathCb->rx_fn = NULL; +- pAd->pDirectpathCb->stop_tx_fn = NULL; +- pAd->pDirectpathCb->start_tx_fn = NULL; +- +- status = ppa_hook_directpath_register_dev_fn(&g_if_id, pAd->net_dev, pAd->pDirectpathCb, PPA_F_DIRECTPATH_ETH_IF); +- +- if(status==1) +- { +- pAd->g_if_id=g_if_id; +- printk("register INF_AMAZON_SE_PPA success :ret:%d id:%d:%d\n",status,pAd->g_if_id,g_if_id); +- pAd->PPAEnable=TRUE; +- } +- else +- { +- printk("register INF_AMAZON_SE_PPA fail :ret:%d\n",status); +- } +- +- } +- else +- { +- printk("INF_AMAZON_SE_PPA enable fail : there is no INF_AMAZON_SE_PPA module . \n"); +- } +- } +- +- +- } +- else if (aggre == 0) +- { +- if(pAd->PPAEnable==FALSE) +- { +- +-printk("INF_AMAZON_SE_PPA already disable \n"); +- } +- else +- { +- if (ppa_hook_directpath_register_dev_fn) +- { +- UINT32 g_if_id; +- g_if_id=pAd->g_if_id; +- printk("g_if_id=%d \n",pAd->g_if_id); +- status=ppa_hook_directpath_register_dev_fn(&g_if_id, pAd->net_dev, NULL, PPA_F_DIRECTPATH_DEREGISTER); +- +- if(status==1) +- { +- pAd->g_if_id=0; +- printk("unregister INF_AMAZON_SE_PPA success :ret:%d\n",status); +- pAd->PPAEnable=FALSE; +- } +- else +- { +- printk("unregister INF_AMAZON_SE_PPA fail :ret:%d\n",status); +- } +- +- } +- else +- { +- printk("INF_AMAZON_SE_PPA enable fail : there is no INF_AMAZON_SE_PPA module . \n"); +- } +- } +- +- } +- else +- { +- printk("Invalid argument %d \n",aggre); +- return FALSE; //Invalid argument +- } +- +- return TRUE; +- +-} +-#endif // INF_AMAZON_PPA // +- +- +-/* +- ========================================================================== +- Description: +- Set IEEE80211H. +- This parameter is 1 when needs radar detection, otherwise 0 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG ieee80211h; +- +- ieee80211h = simple_strtol(arg, 0, 10); +- +- if (ieee80211h == 1) +- pAd->CommonCfg.bIEEE80211H = TRUE; +- else if (ieee80211h == 0) +- pAd->CommonCfg.bIEEE80211H = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_IEEE80211H_Proc::(IEEE80211H=%d)\n", pAd->CommonCfg.bIEEE80211H)); +- +- return TRUE; +-} +- +- +-#ifdef DBG +-/* +- ========================================================================== +- Description: +- For Debug information +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Debug_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Debug_Proc *******************\n")); +- +- if(simple_strtol(arg, 0, 10) <= RT_DEBUG_LOUD) +- RTDebugLevel = simple_strtol(arg, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Debug_Proc(RTDebugLevel = %ld)\n", RTDebugLevel)); +- +- return TRUE; +-} +-#endif +- +-INT Show_DescInfo_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +-#ifdef RTMP_MAC_PCI +- INT i, QueIdx=0; +-// ULONG RegValue; +- PRT28XX_RXD_STRUC pRxD; +- PTXD_STRUC pTxD; +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QueIdx]; +- PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; +- PRTMP_RX_RING pRxRing = &pAd->RxRing; +- +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Tx Descriptor", (PUCHAR)pTxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); +- } +- DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Mgmt Descriptor", (PUCHAR)pTxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pMgmt->DMADONE = %x\n", pTxD->DMADONE)); +- } +- DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Rx Descriptor", (PUCHAR)pRxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pRxD->DDONE = %x\n", pRxD->DDONE)); +- } +-#endif // RTMP_MAC_PCI // +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Reset statistics counter +- +- Arguments: +- pAdapter Pointer to our adapter +- arg +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_ResetStatCounter_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- //UCHAR i; +- //MAC_TABLE_ENTRY *pEntry; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n")); +- +- // add the most up-to-date h/w raw counters into software counters +- NICUpdateRawCounters(pAd); +- +- NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11)); +- NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3)); +- NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK)); +- +- // Reset HotSpot counter +- +- +- return TRUE; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Add WPA key process. +- In Adhoc WPANONE, bPairwise = 0; KeyIdx = 0; +- +- Arguments: +- pAd Pointer to our adapter +- pBuf Pointer to the where the key stored +- +- Return Value: +- NDIS_SUCCESS Add key successfully +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +- +-BOOLEAN RTMPCheckStrPrintAble( +- IN CHAR *pInPutStr, +- IN UCHAR strLen) +-{ +- UCHAR i=0; +- +- for (i=0; i 0x7E)) +- return FALSE; +- } +- +- return TRUE; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Remove WPA Key process +- +- Arguments: +- pAd Pointer to our adapter +- pBuf Pointer to the where the key stored +- +- Return Value: +- NDIS_SUCCESS Add key successfully +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPSetDesiredRates( +- IN PRTMP_ADAPTER pAdapter, +- IN LONG Rates) +-{ +- NDIS_802_11_RATES aryRates; +- +- memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES)); +- switch (pAdapter->CommonCfg.PhyMode) +- { +- case PHY_11A: // A only +- switch (Rates) +- { +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4; +- break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5; +- break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6; +- break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7; +- break; +- case -1: //Auto +- default: +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x24; // 18M +- aryRates[5] = 0x18; // 12M +- aryRates[6] = 0x12; // 9M +- aryRates[7] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- break; +- } +- break; +- case PHY_11BG_MIXED: // B/G Mixed +- case PHY_11B: // B only +- case PHY_11ABG_MIXED: // A/B/G Mixed +- default: +- switch (Rates) +- { +- case 1000000: //1M +- aryRates[0] = 0x02; +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 2000000: //2M +- aryRates[0] = 0x04; +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 5000000: //5.5M +- aryRates[0] = 0x0b; // 5.5M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 11000000: //11M +- aryRates[0] = 0x16; // 11M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4; +- break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5; +- break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6; +- break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7; +- break; +- case -1: //Auto +- default: +- if (pAdapter->CommonCfg.PhyMode == PHY_11B) +- { //B Only +- aryRates[0] = 0x16; // 11Mbps +- aryRates[1] = 0x0b; // 5.5Mbps +- aryRates[2] = 0x04; // 2Mbps +- aryRates[3] = 0x02; // 1Mbps +- } +- else +- { //(B/G) Mixed or (A/B/G) Mixed +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x16; // 11Mbps +- aryRates[5] = 0x0b; // 5.5Mbps +- aryRates[6] = 0x04; // 2Mbps +- aryRates[7] = 0x02; // 1Mbps +- } +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- break; +- } +- break; +- } +- +- NdisZeroMemory(pAdapter->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); +- NdisMoveMemory(pAdapter->CommonCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES)); +- DBGPRINT(RT_DEBUG_TRACE, (" RTMPSetDesiredRates (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n", +- pAdapter->CommonCfg.DesireRate[0],pAdapter->CommonCfg.DesireRate[1], +- pAdapter->CommonCfg.DesireRate[2],pAdapter->CommonCfg.DesireRate[3], +- pAdapter->CommonCfg.DesireRate[4],pAdapter->CommonCfg.DesireRate[5], +- pAdapter->CommonCfg.DesireRate[6],pAdapter->CommonCfg.DesireRate[7] )); +- // Changing DesiredRate may affect the MAX TX rate we used to TX frames out +- MlmeUpdateTxRates(pAdapter, FALSE, 0); +-} +- +-NDIS_STATUS RTMPWPARemoveKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf) +-{ +- PNDIS_802_11_REMOVE_KEY pKey; +- ULONG KeyIdx; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- BOOLEAN bTxKey; // Set the key as transmit key +- BOOLEAN bPairwise; // Indicate the key is pairwise key +- BOOLEAN bKeyRSC; // indicate the receive SC set by KeyRSC value. +- // Otherwise, it will set by the NIC. +- BOOLEAN bAuthenticator; // indicate key is set by authenticator. +- INT i; +- +- DBGPRINT(RT_DEBUG_TRACE,("---> RTMPWPARemoveKeyProc\n")); +- +- pKey = (PNDIS_802_11_REMOVE_KEY) pBuf; +- KeyIdx = pKey->KeyIndex & 0xff; +- // Bit 31 of Add-key, Tx Key +- bTxKey = (pKey->KeyIndex & 0x80000000) ? TRUE : FALSE; +- // Bit 30 of Add-key PairwiseKey +- bPairwise = (pKey->KeyIndex & 0x40000000) ? TRUE : FALSE; +- // Bit 29 of Add-key KeyRSC +- bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE; +- // Bit 28 of Add-key Authenticator +- bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE; +- +- // 1. If bTx is TRUE, return failure information +- if (bTxKey == TRUE) +- return(NDIS_STATUS_INVALID_DATA); +- +- // 2. Check Pairwise Key +- if (bPairwise) +- { +- // a. If BSSID is broadcast, remove all pairwise keys. +- // b. If not broadcast, remove the pairwise specified by BSSID +- for (i = 0; i < SHARE_KEY_NUM; i++) +- { +- if (MAC_ADDR_EQUAL(pAd->SharedKey[BSS0][i].BssId, pKey->BSSID)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i)); +- pAd->SharedKey[BSS0][i].KeyLen = 0; +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)i); +- Status = NDIS_STATUS_SUCCESS; +- break; +- } +- } +- } +- // 3. Group Key +- else +- { +- // a. If BSSID is broadcast, remove all group keys indexed +- // b. If BSSID matched, delete the group key indexed. +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%ld)\n", KeyIdx)); +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0; +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx); +- Status = NDIS_STATUS_SUCCESS; +- } +- +- return (Status); +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-#ifdef CONFIG_STA_SUPPORT +-/* +- ======================================================================== +- +- Routine Description: +- Remove All WPA Keys +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPWPARemoveAllKeys( +- IN PRTMP_ADAPTER pAd) +-{ +- +- UCHAR i; +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus)); +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after +- // Link up. And it will be replaced if user changed it. +- if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- return; +- +- // For WPA-None, there is no need to remove it, since WinXP won't set it again after +- // Link up. And it will be replaced if user changed it. +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- return; +- +- // set BSSID wcid entry of the Pair-wise Key table as no-security mode +- AsicRemovePairwiseKeyEntry(pAd, BSS0, BSSID_WCID); +- +- // set all shared key mode as no-security. +- for (i = 0; i < SHARE_KEY_NUM; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE,("remove %s key #%d\n", CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i)); +- NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(CIPHER_KEY)); +- +- AsicRemoveSharedKeyEntry(pAd, BSS0, i); +- } +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-/* +- ======================================================================== +- +- Routine Description: +- As STA's BSSID is a WC too, it uses shared key table. +- This function write correct unicast TX key to ASIC WCID. +- And we still make a copy in our MacTab.Content[BSSID_WCID].PairwiseKey. +- Caller guarantee TKIP/AES always has keyidx = 0. (pairwise key) +- Caller guarantee WEP calls this function when set Txkey, default key index=0~3. +- +- Arguments: +- pAd Pointer to our adapter +- pKey Pointer to the where the key stored +- +- Return Value: +- NDIS_SUCCESS Add key successfully +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-/* +- ======================================================================== +- Routine Description: +- Change NIC PHY mode. Re-association may be necessary. possible settings +- include - PHY_11B, PHY_11BG_MIXED, PHY_11A, and PHY_11ABG_MIXED +- +- Arguments: +- pAd - Pointer to our adapter +- phymode - +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPSetPhyMode( +- IN PRTMP_ADAPTER pAd, +- IN ULONG phymode) +-{ +- INT i; +- // the selected phymode must be supported by the RF IC encoded in E2PROM +- +- // if no change, do nothing +- /* bug fix +- if (pAd->CommonCfg.PhyMode == phymode) +- return; +- */ +- pAd->CommonCfg.PhyMode = (UCHAR)phymode; +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel)); +-#ifdef EXT_BUILD_CHANNEL_LIST +- BuildChannelListEx(pAd); +-#else +- BuildChannelList(pAd); +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- // sanity check user setting +- for (i = 0; i < pAd->ChannelListNum; i++) +- { +- if (pAd->CommonCfg.Channel == pAd->ChannelList[i].Channel) +- break; +- } +- +- if (i == pAd->ChannelListNum) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->CommonCfg.Channel = FirstChannel(pAd); +-#endif // CONFIG_STA_SUPPORT // +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", pAd->CommonCfg.Channel)); +- } +- +- NdisZeroMemory(pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- NdisZeroMemory(pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES); +- NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); +- switch (phymode) { +- case PHY_11B: +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRateLen = 4; +- pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use +- break; +- +- case PHY_11G: +- case PHY_11BG_MIXED: +- case PHY_11ABG_MIXED: +-#ifdef DOT11_N_SUPPORT +- case PHY_11N_2_4G: +- case PHY_11ABGN_MIXED: +- case PHY_11BGN_MIXED: +- case PHY_11GN_MIXED: +-#endif // DOT11_N_SUPPORT // +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRateLen = 8; +- pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRateLen = 4; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps +- break; +- +- case PHY_11A: +-#ifdef DOT11_N_SUPPORT +- case PHY_11AN_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11N_5G: +-#endif // DOT11_N_SUPPORT // +- pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRateLen = 8; +- pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use +- break; +- +- default: +- break; +- } +- +- +- pAd->CommonCfg.BandState = UNKNOWN_BAND; +-} +- +- +-#ifdef DOT11_N_SUPPORT +-/* +- ======================================================================== +- Routine Description: +- Caller ensures we has 802.11n support. +- Calls at setting HT from AP/STASetinformation +- +- Arguments: +- pAd - Pointer to our adapter +- phymode - +- +- ======================================================================== +-*/ +-VOID RTMPSetHT( +- IN PRTMP_ADAPTER pAd, +- IN OID_SET_HT_PHYMODE *pHTPhyMode) +-{ +- //ULONG *pmcs; +- UINT32 Value = 0; +- UCHAR BBPValue = 0; +- UCHAR BBP3Value = 0; +- UCHAR RxStream = pAd->CommonCfg.RxStream; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n", +- pHTPhyMode->HtMode, pHTPhyMode->ExtOffset, +- pHTPhyMode->MCS, pHTPhyMode->BW, +- pHTPhyMode->STBC, pHTPhyMode->SHORTGI)); +- +- // Don't zero supportedHyPhy structure. +- RTMPZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability)); +- RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo)); +- RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, sizeof(pAd->CommonCfg.NewExtChanOffset)); +- RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, sizeof(pAd->CommonCfg.DesiredHtPhy)); +- +- if (pAd->CommonCfg.bRdg) +- { +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 1; +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 1; +- } +- else +- { +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 0; +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 0; +- } +- +- pAd->CommonCfg.HtCapability.HtCapParm.MaxRAmpduFactor = 3; +- pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor = 3; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : RxBAWinLimit = %d\n", pAd->CommonCfg.BACapability.field.RxBAWinLimit)); +- +- // Mimo power save, A-MSDU size, +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize = (UCHAR)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = (UCHAR)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n", +- pAd->CommonCfg.DesiredHtPhy.AmsduSize, +- pAd->CommonCfg.DesiredHtPhy.MimoPs, +- pAd->CommonCfg.DesiredHtPhy.MpduDensity, +- pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor)); +- +- if(pHTPhyMode->HtMode == HTMODE_GF) +- { +- pAd->CommonCfg.HtCapability.HtCapInfo.GF = 1; +- pAd->CommonCfg.DesiredHtPhy.GF = 1; +- } +- else +- pAd->CommonCfg.DesiredHtPhy.GF = 0; +- +- // Decide Rx MCSSet +- switch (RxStream) +- { +- case 1: +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00; +- break; +- +- case 2: +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; +- break; +- +- case 3: // 3*3 +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff; +- break; +- } +- +- if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) ) +- { +- pHTPhyMode->BW = BW_20; +- pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1; +- } +- +- if(pHTPhyMode->BW == BW_40) +- { +- pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32 +- pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1; +- if (pAd->CommonCfg.Channel <= 14) +- pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1; +- +- pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1; +- pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1; +- pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE; +- // Set Regsiter for extension channel position. +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value); +- if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW)) +- { +- Value |= 0x1; +- BBP3Value |= (0x20); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- } +- else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE)) +- { +- Value &= 0xfe; +- BBP3Value &= (~0x20); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- } +- +- // Turn on BBP 40MHz mode now only as AP . +- // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection. +- if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd) +- ) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- BBPValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value); +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- } +- } +- else +- { +- pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0; +- pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0; +- pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0; +- pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE; +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- // Turn on BBP 20MHz mode by request here. +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- } +- } +- +- if(pHTPhyMode->STBC == STBC_USE) +- { +- pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1; +- pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1; +- pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1; +- pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1; +- } +- else +- { +- pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0; +- pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0; +- } +- +- if(pHTPhyMode->SHORTGI == GI_400) +- { +- pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1; +- pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1; +- pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1; +- pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1; +- } +- else +- { +- pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0; +- pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0; +- pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0; +- pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0; +- } +- +- // We support link adaptation for unsolicit MCS feedback, set to 2. +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT; +- pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel; +- // 1, the extension channel above the control channel. +- +- // EDCA parameters used for AP's own transmission +- if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) +- { +- pAd->CommonCfg.APEdcaParm.bValid = TRUE; +- pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; +- pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; +- pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1; +- pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1; +- +- pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3; +- pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2; +- +- pAd->CommonCfg.APEdcaParm.Cwmax[0] = 6; +- pAd->CommonCfg.APEdcaParm.Cwmax[1] = 10; +- pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; +- +- pAd->CommonCfg.APEdcaParm.Txop[0] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[1] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[2] = 94; +- pAd->CommonCfg.APEdcaParm.Txop[3] = 47; +- } +- AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- RTMPSetIndividualHT(pAd, 0); +- } +-#endif // CONFIG_STA_SUPPORT // +- +-} +- +-/* +- ======================================================================== +- Routine Description: +- Caller ensures we has 802.11n support. +- Calls at setting HT from AP/STASetinformation +- +- Arguments: +- pAd - Pointer to our adapter +- phymode - +- +- ======================================================================== +-*/ +-VOID RTMPSetIndividualHT( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx) +-{ +- PRT_HT_PHY_INFO pDesired_ht_phy = NULL; +- UCHAR TxStream = pAd->CommonCfg.TxStream; +- UCHAR DesiredMcs = MCS_AUTO; +- +- do +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo; +- DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS; +- //pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; +- break; +- } +-#endif // CONFIG_STA_SUPPORT // +- } while (FALSE); +- +- if (pDesired_ht_phy == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx)); +- return; +- } +- RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs)); +- // Check the validity of MCS +- if ((TxStream == 1) && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15))) +- { +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", DesiredMcs)); +- DesiredMcs = MCS_7; +- } +- +- if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) && (DesiredMcs == MCS_32)) +- { +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n")); +- DesiredMcs = MCS_0; +- } +- +- pDesired_ht_phy->bHtEnable = TRUE; +- +- // Decide desired Tx MCS +- switch (TxStream) +- { +- case 1: +- if (DesiredMcs == MCS_AUTO) +- { +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0x00; +- } +- else if (DesiredMcs <= MCS_7) +- { +- pDesired_ht_phy->MCSSet[0]= 1<MCSSet[1]= 0x00; +- } +- break; +- +- case 2: +- if (DesiredMcs == MCS_AUTO) +- { +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0xff; +- } +- else if (DesiredMcs <= MCS_15) +- { +- ULONG mode; +- +- mode = DesiredMcs / 8; +- if (mode < 2) +- pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); +- } +- break; +- +- case 3: // 3*3 +- if (DesiredMcs == MCS_AUTO) +- { +- /* MCS0 ~ MCS23, 3 bytes */ +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0xff; +- pDesired_ht_phy->MCSSet[2]= 0xff; +- } +- else if (DesiredMcs <= MCS_23) +- { +- ULONG mode; +- +- mode = DesiredMcs / 8; +- if (mode < 3) +- pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); +- } +- break; +- } +- +- if(pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40) +- { +- if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32) +- pDesired_ht_phy->MCSSet[4] = 0x1; +- } +- +- // update HT Rate setting +- if (pAd->OpMode == OPMODE_STA) +- MlmeUpdateHtTxRates(pAd, BSS0); +- else +- MlmeUpdateHtTxRates(pAd, apidx); +-} +- +- +-/* +- ======================================================================== +- Routine Description: +- Update HT IE from our capability. +- +- Arguments: +- Send all HT IE in beacon/probe rsp/assoc rsp/action frame. +- +- +- ======================================================================== +-*/ +-VOID RTMPUpdateHTIE( +- IN RT_HT_CAPABILITY *pRtHt, +- IN UCHAR *pMcsSet, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo) +-{ +- RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE)); +- RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE)); +- +- pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth; +- pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs; +- pHtCapability->HtCapInfo.GF = pRtHt->GF; +- pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20; +- pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40; +- pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC; +- pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC; +- pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize; +- pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor; +- pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity; +- +- pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ; +- pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth; +- pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode; +- pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent; +- RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet*/pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar. +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n")); +-} +-#endif // DOT11_N_SUPPORT // +- +-/* +- ======================================================================== +- Description: +- Add Client security information into ASIC WCID table and IVEIV table. +- Return: +- ======================================================================== +-*/ +-VOID RTMPAddWcidAttributeEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN MAC_TABLE_ENTRY *pEntry) +-{ +- UINT32 WCIDAttri = 0; +- USHORT offset; +- UCHAR IVEIV = 0; +- USHORT Wcid = 0; +- +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (BssIdx > BSS0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", BssIdx)); +- return; +- } +- +- // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. +- // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. +- // the AID:2~ assign to mesh link entry. +- if (pEntry) +- Wcid = pEntry->Aid; +- else +- Wcid = MCAST_WCID; +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- // Update WCID attribute table +- offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pEntry && pEntry->ValidAsMesh) +- WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE; +-#ifdef QOS_DLS_SUPPORT +- else if ((pEntry) && (pEntry->ValidAsDls) && +- ((CipherAlg == CIPHER_TKIP) || +- (CipherAlg == CIPHER_TKIP_NO_MIC) || +- (CipherAlg == CIPHER_AES) || +- (CipherAlg == CIPHER_NONE))) +- WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE; +-#endif // QOS_DLS_SUPPORT // +- else +- WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- RTMP_IO_WRITE32(pAd, offset, WCIDAttri); +- +- +- // Update IV/EIV table +- offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE); +- +- // WPA mode +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES)) +- { +- // Eiv bit on. keyid always is 0 for pairwise key +- IVEIV = (KeyIdx <<6) | 0x20; +- } +- else +- { +- // WEP KeyIdx is default tx key. +- IVEIV = (KeyIdx << 6); +- } +- +- // For key index and ext IV bit, so only need to update the position(offset+3). +-#ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE8(pAd, offset+3, IVEIV); +-#endif // RTMP_MAC_PCI // +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg])); +- DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri)); +- +-} +- +-/* +- ========================================================================== +- Description: +- Parse encryption type +-Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- ========================================================================== +-*/ +-PSTRING GetEncryptType(CHAR enc) +-{ +- if(enc == Ndis802_11WEPDisabled) +- return "NONE"; +- if(enc == Ndis802_11WEPEnabled) +- return "WEP"; +- if(enc == Ndis802_11Encryption2Enabled) +- return "TKIP"; +- if(enc == Ndis802_11Encryption3Enabled) +- return "AES"; +- if(enc == Ndis802_11Encryption4Enabled) +- return "TKIPAES"; +- else +- return "UNKNOW"; +-} +- +-PSTRING GetAuthMode(CHAR auth) +-{ +- if(auth == Ndis802_11AuthModeOpen) +- return "OPEN"; +- if(auth == Ndis802_11AuthModeShared) +- return "SHARED"; +- if(auth == Ndis802_11AuthModeAutoSwitch) +- return "AUTOWEP"; +- if(auth == Ndis802_11AuthModeWPA) +- return "WPA"; +- if(auth == Ndis802_11AuthModeWPAPSK) +- return "WPAPSK"; +- if(auth == Ndis802_11AuthModeWPANone) +- return "WPANONE"; +- if(auth == Ndis802_11AuthModeWPA2) +- return "WPA2"; +- if(auth == Ndis802_11AuthModeWPA2PSK) +- return "WPA2PSK"; +- if(auth == Ndis802_11AuthModeWPA1WPA2) +- return "WPA1WPA2"; +- if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) +- return "WPA1PSKWPA2PSK"; +- +- return "UNKNOW"; +-} +- +- +-/* +- ========================================================================== +- Description: +- Get site survey results +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) UI needs to wait 4 seconds after issue a site survey command +- 2.) iwpriv ra0 get_site_survey +- 3.) UI needs to prepare at least 4096bytes to get the results +- ========================================================================== +-*/ +-#define LINE_LEN (4+33+20+23+9+7+3) // Channel+SSID+Bssid+Security+Signal+WiressMode+NetworkType +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +-VOID RTMPCommSiteSurveyData( +- IN PSTRING msg, +- IN PBSS_ENTRY pBss) +-{ +- INT Rssi = 0; +- UINT Rssi_Quality = 0; +- NDIS_802_11_NETWORK_TYPE wireless_mode; +- CHAR Ssid[MAX_LEN_OF_SSID +1]; +- STRING SecurityStr[32] = {0}; +- NDIS_802_11_ENCRYPTION_STATUS ap_cipher = Ndis802_11EncryptionDisabled; +- NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen; +- +- memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1)); +- +- //Channel +- sprintf(msg+strlen(msg),"%-4d", pBss->Channel); +- //SSID +- memcpy(Ssid, pBss->Ssid, pBss->SsidLen); +- Ssid[pBss->SsidLen] = '\0'; +- sprintf(msg+strlen(msg),"%-33s", Ssid); +- //BSSID +- sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ", +- pBss->Bssid[0], +- pBss->Bssid[1], +- pBss->Bssid[2], +- pBss->Bssid[3], +- pBss->Bssid[4], +- pBss->Bssid[5]); +- +- //Security +- if ((Ndis802_11AuthModeWPA <= pBss->AuthMode) && +- (pBss->AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- { +- if (pBss->AuthModeAux == Ndis802_11AuthModeWPANone) +- { +- ap_auth_mode = pBss->AuthMode; +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen) +- { +- ap_auth_mode = pBss->AuthMode; +- if ((ap_auth_mode == Ndis802_11AuthModeWPA) || +- (ap_auth_mode == Ndis802_11AuthModeWPAPSK)) +- { +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- else if ((ap_auth_mode == Ndis802_11AuthModeWPA2) || +- (ap_auth_mode == Ndis802_11AuthModeWPA2PSK)) +- { +- if (pBss->WPA2.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA2.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- } +- else if ((pBss->AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- if ((pBss->AuthModeAux == Ndis802_11AuthModeWPAPSK) || +- (pBss->AuthModeAux == Ndis802_11AuthModeWPA2PSK)) +- ap_auth_mode = Ndis802_11AuthModeWPA1PSKWPA2PSK; +- else +- ap_auth_mode = pBss->AuthMode; +- +- if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) +- ap_cipher = pBss->WPA.PairCipher; +- } +- else if ((pBss->AuthMode == Ndis802_11AuthModeWPA) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2)) +- { +- if ((pBss->AuthModeAux == Ndis802_11AuthModeWPA) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2)) +- ap_auth_mode = Ndis802_11AuthModeWPA1WPA2; +- else +- ap_auth_mode = pBss->AuthMode; +- +- if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) +- ap_cipher = pBss->WPA.PairCipher; +- } +- +- sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); +- } +- else +- { +- ap_auth_mode = pBss->AuthMode; +- ap_cipher = pBss->WepStatus; +- if (ap_cipher == Ndis802_11WEPDisabled) +- sprintf(SecurityStr, "NONE"); +- else if (ap_cipher == Ndis802_11WEPEnabled) +- sprintf(SecurityStr, "WEP"); +- else +- sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); +- } +- +- sprintf(msg+strlen(msg), "%-23s", SecurityStr); +- +- // Rssi +- Rssi = (INT)pBss->Rssi; +- if (Rssi >= -50) +- Rssi_Quality = 100; +- else if (Rssi >= -80) // between -50 ~ -80dbm +- Rssi_Quality = (UINT)(24 + ((Rssi + 80) * 26)/10); +- else if (Rssi >= -90) // between -80 ~ -90dbm +- Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10); +- else // < -84 dbm +- Rssi_Quality = 0; +- sprintf(msg+strlen(msg),"%-9d", Rssi_Quality); +- // Wireless Mode +- wireless_mode = NetworkTypeInUseSanity(pBss); +- if (wireless_mode == Ndis802_11FH || +- wireless_mode == Ndis802_11DS) +- sprintf(msg+strlen(msg),"%-7s", "11b"); +- else if (wireless_mode == Ndis802_11OFDM5) +- sprintf(msg+strlen(msg),"%-7s", "11a"); +- else if (wireless_mode == Ndis802_11OFDM5_N) +- sprintf(msg+strlen(msg),"%-7s", "11a/n"); +- else if (wireless_mode == Ndis802_11OFDM24) +- sprintf(msg+strlen(msg),"%-7s", "11b/g"); +- else if (wireless_mode == Ndis802_11OFDM24_N) +- sprintf(msg+strlen(msg),"%-7s", "11b/g/n"); +- else +- sprintf(msg+strlen(msg),"%-7s", "unknow"); +- //Network Type +- if (pBss->BssType == BSS_ADHOC) +- sprintf(msg+strlen(msg),"%-3s", " Ad"); +- else +- sprintf(msg+strlen(msg),"%-3s", " In"); +- +- sprintf(msg+strlen(msg),"\n"); +- +- return; +-} +- +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- PSTRING msg; +- INT i=0; +- INT WaitCnt; +- INT Status=0; +- INT max_len = LINE_LEN; +- PBSS_ENTRY pBss; +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len)); +- +- if (msg == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); +- return; +- } +- +- memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len ); +- sprintf(msg,"%s","\n"); +- sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-23s%-9s%-7s%-3s\n", +- "Ch", "SSID", "BSSID", "Security", "Siganl(%)", "W-Mode", " NT"); +- +-#ifdef CONFIG_STA_SUPPORT +- +-#endif // CONFIG_STA_SUPPORT // +- +- WaitCnt = 0; +-#ifdef CONFIG_STA_SUPPORT +- pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; +- while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200)) +- OS_WAIT(500); +-#endif // CONFIG_STA_SUPPORT // +- +- for(i=0; iScanTab.BssNr ;i++) +- { +- pBss = &pAdapter->ScanTab.BssEntry[i]; +- +- if( pBss->Channel==0) +- break; +- +- if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA) +- break; +- +- +- RTMPCommSiteSurveyData(msg, pBss); +- +-#ifdef CONFIG_STA_SUPPORT +- +-#endif // CONFIG_STA_SUPPORT // +- } +- +-#ifdef CONFIG_STA_SUPPORT +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +-#endif // CONFIG_STA_SUPPORT // +- wrq->u.data.length = strlen(msg); +- Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length)); +- os_free_mem(NULL, (PUCHAR)msg); +-} +- +-#define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rate +-VOID RTMPIoctlGetMacTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq) +-{ +- INT i; +- RT_802_11_MAC_TABLE MacTab; +- char *msg; +- +- MacTab.Num = 0; +- for (i=0; iMacTab.Content[i].ValidAsCLI && (pAd->MacTab.Content[i].Sst == SST_ASSOC)) +- { +- COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr); +- MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid; +- MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode; +-#ifdef DOT11_N_SUPPORT +- MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode; +-#endif // DOT11_N_SUPPORT // +- +- // Fill in RSSI per entry +- MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0; +- MacTab.Entry[MacTab.Num].AvgRssi1 = pAd->MacTab.Content[i].RssiSample.AvgRssi1; +- MacTab.Entry[MacTab.Num].AvgRssi2 = pAd->MacTab.Content[i].RssiSample.AvgRssi2; +- +- // the connected time per entry +- MacTab.Entry[MacTab.Num].ConnectedTime = pAd->MacTab.Content[i].StaConnectTime; +- MacTab.Entry[MacTab.Num].TxRate.field.MCS = pAd->MacTab.Content[i].HTPhyMode.field.MCS; +- MacTab.Entry[MacTab.Num].TxRate.field.BW = pAd->MacTab.Content[i].HTPhyMode.field.BW; +- MacTab.Entry[MacTab.Num].TxRate.field.ShortGI = pAd->MacTab.Content[i].HTPhyMode.field.ShortGI; +- MacTab.Entry[MacTab.Num].TxRate.field.STBC = pAd->MacTab.Content[i].HTPhyMode.field.STBC; +- MacTab.Entry[MacTab.Num].TxRate.field.rsv = pAd->MacTab.Content[i].HTPhyMode.field.rsv; +- MacTab.Entry[MacTab.Num].TxRate.field.MODE = pAd->MacTab.Content[i].HTPhyMode.field.MODE; +- MacTab.Entry[MacTab.Num].TxRate.word = pAd->MacTab.Content[i].HTPhyMode.word; +- +- MacTab.Num += 1; +- } +- } +- wrq->u.data.length = sizeof(RT_802_11_MAC_TABLE); +- if (copy_to_user(wrq->u.data.pointer, &MacTab, wrq->u.data.length)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); +- } +- +- msg = kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG); +- if (msg == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); +- return; +- } +- memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); +- sprintf(msg,"%s","\n"); +- sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n", +- "MAC", "AID", "PSM", "LDT", "RxB", "TxB","CTxR", "LTxR"); +- +- for (i=0; iMacTab.Content[i]; +- if (pEntry->ValidAsCLI && (pEntry->Sst == SST_ASSOC)) +- { +- if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) ) +- break; +- sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ", +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); +- sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid); +- sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode); +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); // ToDo +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); // ToDo +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); // ToDo +- sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); +- sprintf(msg+strlen(msg),"%-6d\n",0/*RateIdToMbps[pAd->MacTab.Content[i].LastTxRate]*/); // ToDo +- } +- } +- // for compatible with old API just do the printk to console +- //wrq->u.data.length = strlen(msg); +- //if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s", msg)); +- } +- +- kfree(msg); +-} +- +- +-#ifdef DOT11_N_SUPPORT +-INT Set_BASetup_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +-/* +- The BASetup inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +- +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = (UCHAR) simple_strtol((token+1), 0, 10); +- if (tid > 15) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nSetup BA Session: Tid = %d\n", tid)); +- BAOriSessionSetUp(pAd, pEntry, tid, 0, 100, TRUE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_BADecline_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG bBADecline; +- +- bBADecline = simple_strtol(arg, 0, 10); +- +- if (bBADecline == 0) +- { +- pAd->CommonCfg.bBADecline = FALSE; +- } +- else if (bBADecline == 1) +- { +- pAd->CommonCfg.bBADecline = TRUE; +- } +- else +- { +- return FALSE; //Invalid argument +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_BADecline_Proc::(BADecline=%d)\n", pAd->CommonCfg.bBADecline)); +- +- return TRUE; +-} +- +-INT Set_BAOriTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = simple_strtol((token+1), 0, 10); +- if (tid > NUM_OF_TID) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nTear down Ori BA Session: Tid = %d\n", tid)); +- BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, TRUE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_BARecTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = simple_strtol((token+1), 0, 10); +- if (tid > NUM_OF_TID) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nTear down Rec BA Session: Tid = %d\n", tid)); +- BARecSessionTearDown(pAd, pEntry->Aid, tid, FALSE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtBw; +- +- HtBw = simple_strtol(arg, 0, 10); +- if (HtBw == BW_40) +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- else if (HtBw == BW_20) +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBw_Proc::(HtBw=%d)\n", pAd->CommonCfg.RegTransmitSetting.field.BW)); +- +- return TRUE; +-} +- +-INT Set_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtMcs, Mcs_tmp; +-#ifdef CONFIG_STA_SUPPORT +- BOOLEAN bAutoRate = FALSE; +-#endif // CONFIG_STA_SUPPORT // +- +- Mcs_tmp = simple_strtol(arg, 0, 10); +- +- if (Mcs_tmp <= 15 || Mcs_tmp == 32) +- HtMcs = Mcs_tmp; +- else +- HtMcs = MCS_AUTO; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = HtMcs; +- pAd->StaCfg.bAutoTxRateSwitch = (HtMcs == MCS_AUTO) ? TRUE:FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(HtMcs=%d, bAutoTxRateSwitch = %d)\n", +- pAd->StaCfg.DesiredTransmitSetting.field.MCS, pAd->StaCfg.bAutoTxRateSwitch)); +- +- if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX)) +- { +- if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) && +- (HtMcs >= 0 && HtMcs <= 3) && +- (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_CCK)) +- { +- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs] * 1000000)); +- } +- else if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) && +- (HtMcs >= 0 && HtMcs <= 7) && +- (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_OFDM)) +- { +- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs+4] * 1000000)); +- } +- else +- bAutoRate = TRUE; +- +- if (bAutoRate) +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- RTMPSetDesiredRates(pAd, -1); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(FixedTxMode=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode)); +- } +- if (ADHOC_ON(pAd)) +- return TRUE; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- SetCommonHT(pAd); +- +- return TRUE; +-} +- +-INT Set_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtGi; +- +- HtGi = simple_strtol(arg, 0, 10); +- +- if ( HtGi == GI_400) +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; +- else if ( HtGi == GI_800 ) +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtGi_Proc::(ShortGI=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.ShortGI)); +- +- return TRUE; +-} +- +- +-INT Set_HtTxBASize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR Size; +- +- Size = simple_strtol(arg, 0, 10); +- +- if (Size <=0 || Size >=64) +- { +- Size = 8; +- } +- pAd->CommonCfg.TxBASize = Size-1; +- DBGPRINT(RT_DEBUG_ERROR, ("Set_HtTxBASize ::(TxBASize= %d)\n", Size)); +- +- return TRUE; +-} +- +-INT Set_HtDisallowTKIP_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 1) +- { +- pAd->CommonCfg.HT_DisallowTKIP = TRUE; +- } +- else +- { +- pAd->CommonCfg.HT_DisallowTKIP = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtDisallowTKIP_Proc ::%s\n", +- (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "enabled" : "disabled")); +- +- return TRUE; +-} +- +-INT Set_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == HTMODE_GF) +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; +- else if ( Value == HTMODE_MM ) +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtOpMode_Proc::(HtOpMode=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.HTMODE)); +- +- return TRUE; +- +-} +- +-INT Set_HtStbc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == STBC_USE) +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; +- else if ( Value == STBC_NONE ) +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Stbc_Proc::(HtStbc=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.STBC)); +- +- return TRUE; +-} +- +-INT Set_HtHtc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->HTCEnable = FALSE; +- else if ( Value ==1 ) +- pAd->HTCEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtHtc_Proc::(HtHtc=%d)\n",pAd->HTCEnable)); +- +- return TRUE; +-} +- +-INT Set_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 0) +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- else if ( Value ==1 ) +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtExtcha_Proc::(HtExtcha=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.EXTCHA)); +- +- return TRUE; +-} +- +-INT Set_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value <=7 && Value >= 0) +- pAd->CommonCfg.BACapability.field.MpduDensity = Value; +- else +- pAd->CommonCfg.BACapability.field.MpduDensity = 4; +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMpduDensity_Proc::(HtMpduDensity=%d)\n",pAd->CommonCfg.BACapability.field.MpduDensity)); +- +- return TRUE; +-} +- +-INT Set_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- +- if (Value >=1 && Value <= 64) +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; +- } +- else +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; +- } +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBaWinSize_Proc::(HtBaWinSize=%d)\n",pAd->CommonCfg.BACapability.field.RxBAWinLimit)); +- +- return TRUE; +-} +- +-INT Set_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 0) +- pAd->CommonCfg.bRdg = FALSE; +- else if ( Value ==1 ) +- { +- pAd->HTCEnable = TRUE; +- pAd->CommonCfg.bRdg = TRUE; +- } +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtRdg_Proc::(HtRdg=%d)\n",pAd->CommonCfg.bRdg)); +- +- return TRUE; +-} +- +-INT Set_HtLinkAdapt_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->bLinkAdapt = FALSE; +- else if ( Value ==1 ) +- { +- pAd->HTCEnable = TRUE; +- pAd->bLinkAdapt = TRUE; +- } +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtLinkAdapt_Proc::(HtLinkAdapt=%d)\n",pAd->bLinkAdapt)); +- +- return TRUE; +-} +- +-INT Set_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; +- else if ( Value == 1 ) +- pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAmsdu_Proc::(HtAmsdu=%d)\n",pAd->CommonCfg.BACapability.field.AmsduEnable)); +- +- return TRUE; +-} +- +-INT Set_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- } +- else if (Value == 1) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- } +- else +- return FALSE; //Invalid argument +- +- pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; +- pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy; +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA)); +- +- return TRUE; +- +-} +- +-INT Set_HtProtect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.bHTProtect = FALSE; +- else if (Value == 1) +- pAd->CommonCfg.bHTProtect = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtProtect_Proc::(HtProtect=%d)\n",pAd->CommonCfg.bHTProtect)); +- +- return TRUE; +-} +- +-INT Set_SendPSMPAction_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], mode; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the mode value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and mode value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- mode = simple_strtol((token+1), 0, 10); +- if (mode > MMPS_ENABLE) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], mode)); +- +- pEntry = MacTableLookup(pAd, mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nSendPSMPAction MIPS mode = %d\n", mode)); +- SendPSMPAction(pAd, pEntry->Aid, mode); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +- +-} +- +-INT Set_HtMIMOPSmode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value <=3 && Value >= 0) +- pAd->CommonCfg.BACapability.field.MMPSmode = Value; +- else +- pAd->CommonCfg.BACapability.field.MMPSmode = 3; +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMIMOPSmode_Proc::(MIMOPS mode=%d)\n",pAd->CommonCfg.BACapability.field.MMPSmode)); +- +- return TRUE; +-} +- +- +-INT Set_ForceShortGI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->WIFItestbed.bShortGI = FALSE; +- else if (Value == 1) +- pAd->WIFItestbed.bShortGI = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceShortGI_Proc::(ForceShortGI=%d)\n", pAd->WIFItestbed.bShortGI)); +- +- return TRUE; +-} +- +- +- +-INT Set_ForceGF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->WIFItestbed.bGreenField = FALSE; +- else if (Value == 1) +- pAd->WIFItestbed.bGreenField = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceGF_Proc::(ForceGF=%d)\n", pAd->WIFItestbed.bGreenField)); +- +- return TRUE; +-} +- +-INT Set_HtMimoPs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.bMIMOPSEnable = FALSE; +- else if (Value == 1) +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMimoPs_Proc::(HtMimoPs=%d)\n",pAd->CommonCfg.bMIMOPSEnable)); +- +- return TRUE; +-} +-#endif // DOT11_N_SUPPORT // +- +- +-#ifdef DOT11_N_SUPPORT +-INT SetCommonHT( +- IN PRTMP_ADAPTER pAd) +-{ +- OID_SET_HT_PHYMODE SetHT; +- +- if (pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) +- return FALSE; +- +- SetHT.PhyMode = pAd->CommonCfg.PhyMode; +- SetHT.TransmitNo = ((UCHAR)pAd->Antenna.field.TxPath); +- SetHT.HtMode = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.HTMODE; +- SetHT.ExtOffset = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; +- SetHT.MCS = MCS_AUTO; +- SetHT.BW = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW; +- SetHT.STBC = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.STBC; +- SetHT.SHORTGI = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI; +- +- RTMPSetHT(pAd, &SetHT); +- +- return TRUE; +-} +-#endif // DOT11_N_SUPPORT // +- +-INT Set_FixedTxMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR fix_tx_mode = FIXED_TXMODE_HT; +- +- if (strcmp(arg, "OFDM") == 0 || strcmp(arg, "ofdm") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_OFDM; +- } +- else if (strcmp(arg, "CCK") == 0 || strcmp(arg, "cck") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_CCK; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_FixedTxMode_Proc::(FixedTxMode=%d)\n", fix_tx_mode)); +- +- return TRUE; +-} +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-INT Set_OpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +-#ifdef RTMP_MAC_PCI +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +-#endif // RTMP_MAC_PCI // +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Can not switch operate mode on interface up !! \n")); +- return FALSE; +- } +- +- if (Value == 0) +- pAd->OpMode = OPMODE_STA; +- else if (Value == 1) +- pAd->OpMode = OPMODE_AP; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_OpMode_Proc::(OpMode=%s)\n", pAd->OpMode == 1 ? "AP Mode" : "STA Mode")); +- +- return TRUE; +-} +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +- +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR LongRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); +- +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.LongRtyLimit = LongRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_LongRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); +- return TRUE; +-} +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR ShortRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); +- +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ShortRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); +- return TRUE; +-} +- +- +-///////////////////////////////////////////////////////////////////////// +-PSTRING RTMPGetRalinkAuthModeStr( +- IN NDIS_802_11_AUTHENTICATION_MODE authMode) +-{ +- switch(authMode) +- { +- case Ndis802_11AuthModeOpen: +- return "OPEN"; +- case Ndis802_11AuthModeWPAPSK: +- return "WPAPSK"; +- case Ndis802_11AuthModeShared: +- return "SHARED"; +- case Ndis802_11AuthModeWPA: +- return "WPA"; +- case Ndis802_11AuthModeWPA2: +- return "WPA2"; +- case Ndis802_11AuthModeWPA2PSK: +- return "WPA2PSK"; +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- return "WPAPSKWPA2PSK"; +- case Ndis802_11AuthModeWPA1WPA2: +- return "WPA1WPA2"; +- case Ndis802_11AuthModeWPANone: +- return "WPANONE"; +- default: +- return "UNKNOW"; +- } +-} +- +-PSTRING RTMPGetRalinkEncryModeStr( +- IN USHORT encryMode) +-{ +- switch(encryMode) +- { +- case Ndis802_11WEPDisabled: +- return "NONE"; +- case Ndis802_11WEPEnabled: +- return "WEP"; +- case Ndis802_11Encryption2Enabled: +- return "TKIP"; +- case Ndis802_11Encryption3Enabled: +- return "AES"; +- case Ndis802_11Encryption4Enabled: +- return "TKIPAES"; +- default: +- return "UNKNOW"; +- } +-} +- +-INT RTMPShowCfgValue( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pName, +- IN PSTRING pBuf) +-{ +- INT Status = 0; +- +- for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++) +- { +- if (!strcmp(pName, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name)) +- { +- if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->show_proc(pAd, pBuf)) +- Status = -EINVAL; +- break; //Exit for loop. +- } +- } +- +- if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name == NULL) +- { +- sprintf(pBuf, "\n"); +- for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++) +- sprintf(pBuf, "%s%s\n", pBuf, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name); +- } +- +- return Status; +-} +- +-INT Show_SSID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid); +-#endif // CONFIG_STA_SUPPORT // +- return 0; +-} +- +-INT Show_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.PhyMode) +- { +- case PHY_11BG_MIXED: +- sprintf(pBuf, "\t11B/G"); +- break; +- case PHY_11B: +- sprintf(pBuf, "\t11B"); +- break; +- case PHY_11A: +- sprintf(pBuf, "\t11A"); +- break; +- case PHY_11ABG_MIXED: +- sprintf(pBuf, "\t11A/B/G"); +- break; +- case PHY_11G: +- sprintf(pBuf, "\t11G"); +- break; +-#ifdef DOT11_N_SUPPORT +- case PHY_11ABGN_MIXED: +- sprintf(pBuf, "\t11A/B/G/N"); +- break; +- case PHY_11N_2_4G: +- sprintf(pBuf, "\t11N only with 2.4G"); +- break; +- case PHY_11GN_MIXED: +- sprintf(pBuf, "\t11G/N"); +- break; +- case PHY_11AN_MIXED: +- sprintf(pBuf, "\t11A/N"); +- break; +- case PHY_11BGN_MIXED: +- sprintf(pBuf, "\t11B/G/N"); +- break; +- case PHY_11AGN_MIXED: +- sprintf(pBuf, "\t11A/G/N"); +- break; +- case PHY_11N_5G: +- sprintf(pBuf, "\t11N only with 5G"); +- break; +-#endif // DOT11_N_SUPPORT // +- default: +- sprintf(pBuf, "\tUnknow Value(%d)", pAd->CommonCfg.PhyMode); +- break; +- } +- return 0; +-} +- +- +-INT Show_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bEnableTxBurst ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.TxPreamble) +- { +- case Rt802_11PreambleShort: +- sprintf(pBuf, "\tShort"); +- break; +- case Rt802_11PreambleLong: +- sprintf(pBuf, "\tLong"); +- break; +- case Rt802_11PreambleAuto: +- sprintf(pBuf, "\tAuto"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.TxPreamble); +- break; +- } +- +- return 0; +-} +- +-INT Show_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%lu", pAd->CommonCfg.TxPowerPercentage); +- return 0; +-} +- +-INT Show_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.Channel); +- return 0; +-} +- +-INT Show_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.UseBGProtection) +- { +- case 1: //Always On +- sprintf(pBuf, "\tON"); +- break; +- case 2: //Always OFF +- sprintf(pBuf, "\tOFF"); +- break; +- case 0: //AUTO +- sprintf(pBuf, "\tAuto"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.UseBGProtection); +- break; +- } +- return 0; +-} +- +-INT Show_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.RtsThreshold); +- return 0; +-} +- +-INT Show_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.FragmentThreshold); +- return 0; +-} +- +-#ifdef DOT11_N_SUPPORT +-INT Show_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- sprintf(pBuf, "\t40 MHz"); +- } +- else +- { +- sprintf(pBuf, "\t20 MHz"); +- } +- return 0; +-} +- +-INT Show_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS); +-#endif // CONFIG_STA_SUPPORT // +- return 0; +-} +- +-INT Show_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.ShortGI) +- { +- case GI_400: +- sprintf(pBuf, "\tGI_400"); +- break; +- case GI_800: +- sprintf(pBuf, "\tGI_800"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.ShortGI); +- break; +- } +- return 0; +-} +- +-INT Show_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.HTMODE) +- { +- case HTMODE_GF: +- sprintf(pBuf, "\tGF"); +- break; +- case HTMODE_MM: +- sprintf(pBuf, "\tMM"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.HTMODE); +- break; +- } +- return 0; +-} +- +-INT Show_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA) +- { +- case EXTCHA_BELOW: +- sprintf(pBuf, "\tBelow"); +- break; +- case EXTCHA_ABOVE: +- sprintf(pBuf, "\tAbove"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.EXTCHA); +- break; +- } +- return 0; +-} +- +- +-INT Show_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.MpduDensity); +- return 0; +-} +- +-INT Show_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.RxBAWinLimit); +- return 0; +-} +- +-INT Show_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bRdg ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AmsduEnable ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE"); +- return 0; +-} +-#endif // DOT11_N_SUPPORT // +- +-INT Show_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegion); +- return 0; +-} +- +-INT Show_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegionForABand); +- return 0; +-} +- +-INT Show_CountryCode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.CountryCode); +- return 0; +-} +- +-#ifdef AGGREGATION_SUPPORT +-INT Show_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bAggregationCapable ? "TRUE":"FALSE"); +- return 0; +-} +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +-INT Show_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE"); +-#endif // CONFIG_STA_SUPPORT // +- +- return 0; +-} +-#endif // WMM_SUPPORT // +- +-INT Show_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bIEEE80211H ? "TRUE":"FALSE"); +- return 0; +-} +- +-#ifdef CONFIG_STA_SUPPORT +-INT Show_NetworkType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->StaCfg.BssType) +- { +- case BSS_ADHOC: +- sprintf(pBuf, "\tAdhoc"); +- break; +- case BSS_INFRA: +- sprintf(pBuf, "\tInfra"); +- break; +- case BSS_ANY: +- sprintf(pBuf, "\tAny"); +- break; +- case BSS_MONITOR: +- sprintf(pBuf, "\tMonitor"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%d)", pAd->StaCfg.BssType); +- break; +- } +- return 0; +-} +- +- +-#endif // CONFIG_STA_SUPPORT // +- +-INT Show_AuthMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- AuthMode = pAd->StaCfg.AuthMode; +-#endif // CONFIG_STA_SUPPORT // +- +- if ((AuthMode >= Ndis802_11AuthModeOpen) && +- (AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- sprintf(pBuf, "\t%s", RTMPGetRalinkAuthModeStr(AuthMode)); +- else +- sprintf(pBuf, "\tUnknow Value(%d)", AuthMode); +- +- return 0; +-} +- +-INT Show_EncrypType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- WepStatus = pAd->StaCfg.WepStatus; +-#endif // CONFIG_STA_SUPPORT // +- +- if ((WepStatus >= Ndis802_11WEPEnabled) && +- (WepStatus <= Ndis802_11Encryption4KeyAbsent)) +- sprintf(pBuf, "\t%s", RTMPGetRalinkEncryModeStr(WepStatus)); +- else +- sprintf(pBuf, "\tUnknow Value(%d)", WepStatus); +- +- return 0; +-} +- +-INT Show_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- UCHAR DefaultKeyId = 0; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- DefaultKeyId = pAd->StaCfg.DefaultKeyId; +-#endif // CONFIG_STA_SUPPORT // +- +- sprintf(pBuf, "\t%d", DefaultKeyId); +- +- return 0; +-} +- +-INT Show_WepKey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN INT KeyIdx, +- OUT PSTRING pBuf) +-{ +- UCHAR Key[16] = {0}, KeyLength = 0; +- INT index = BSS0; +- +- KeyLength = pAd->SharedKey[index][KeyIdx].KeyLen; +- NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength); +- +- //check key string is ASCII or not +- if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength)) +- sprintf(pBuf, "\t%s", Key); +- else +- { +- int idx; +- sprintf(pBuf, "\t"); +- for (idx = 0; idx < KeyLength; idx++) +- sprintf(pBuf+strlen(pBuf), "%02X", Key[idx]); +- } +- return 0; +-} +- +-INT Show_Key1_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 0, pBuf); +- return 0; +-} +- +-INT Show_Key2_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 1, pBuf); +- return 0; +-} +- +-INT Show_Key3_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 2, pBuf); +- return 0; +-} +- +-INT Show_Key4_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 3, pBuf); +- return 0; +-} +- +-INT Show_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- INT idx; +- UCHAR PMK[32] = {0}; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32); +-#endif // CONFIG_STA_SUPPORT // +- +- sprintf(pBuf, "\tPMK = "); +- for (idx = 0; idx < 32; idx++) +- sprintf(pBuf+strlen(pBuf), "%02X", PMK[idx]); +- +- return 0; +-} +diff --git a/drivers/staging/rt3090/common/cmm_mac_pci.c b/drivers/staging/rt3090/common/cmm_mac_pci.c +deleted file mode 100644 +index 8e16363..0000000 +--- a/drivers/staging/rt3090/common/cmm_mac_pci.c ++++ /dev/null +@@ -1,1757 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-#ifdef RTMP_MAC_PCI +- +-#include "../rt_config.h" +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Allocate DMA memory blocks for send, receive +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG RingBasePaHigh; +- ULONG RingBasePaLow; +- PVOID RingBaseVa; +- INT index, num; +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- ULONG ErrorValue = 0; +- PRTMP_TX_RING pTxRing; +- PRTMP_DMABUF pDmaBuf; +- PNDIS_PACKET pPacket; +-// PRTMP_REORDERBUF pReorderBuf; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); +- do +- { +- // +- // Allocate all ring descriptors, include TxD, RxD, MgmtD. +- // Although each size is different, to prevent cacheline and alignment +- // issue, I intentional set them all to 64 bytes. +- // +- for (num=0; numTxDescRing[num].AllocSize = TX_RING_SIZE * TXD_SIZE; +- RTMP_AllocateTxDescMemory( +- pAd, +- num, +- pAd->TxDescRing[num].AllocSize, +- FALSE, +- &pAd->TxDescRing[num].AllocVa, +- &pAd->TxDescRing[num].AllocPa); +- +- if (pAd->TxDescRing[num].AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocSize); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num].AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxDescRing[num].AllocPa); +- RingBaseVa = pAd->TxDescRing[num].AllocVa; +- +- // +- // Allocate all 1st TXBuf's memory for this TxRing +- // +- pAd->TxBufSpace[num].AllocSize = TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; +- RTMP_AllocateFirstTxBuffer( +- pAd, +- num, +- pAd->TxBufSpace[num].AllocSize, +- FALSE, +- &pAd->TxBufSpace[num].AllocVa, +- &pAd->TxBufSpace[num].AllocPa); +- +- if (pAd->TxBufSpace[num].AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocSize); +- +- // Save PA & VA for further operation +- BufBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num].AllocPa); +- BufBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxBufSpace[num].AllocPa); +- BufBaseVa = pAd->TxBufSpace[num].AllocVa; +- +- // +- // Initialize Tx Ring Descriptor and associated buffer memory +- // +- pTxRing = &pAd->TxRing[num]; +- for (index = 0; index < TX_RING_SIZE; index++) +- { +- pTxRing->Cell[index].pNdisPacket = NULL; +- pTxRing->Cell[index].pNextNdisPacket = NULL; +- // Init Tx Ring Size, Va, Pa variables +- pTxRing->Cell[index].AllocSize = TXD_SIZE; +- pTxRing->Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pTxRing->Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pTxRing->Cell[index].AllocPa, RingBasePaLow); +- +- // Setup Tx Buffer size & address. only 802.11 header will store in this space +- pDmaBuf = &pTxRing->Cell[index].DmaBuf; +- pDmaBuf->AllocSize = TX_DMA_1ST_BUFFER_SIZE; +- pDmaBuf->AllocVa = BufBaseVa; +- RTMP_SetPhysicalAddressHigh(pDmaBuf->AllocPa, BufBasePaHigh); +- RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, BufBasePaLow); +- +- // link the pre-allocated TxBuf to TXD +- pTxD = (PTXD_STRUC) pTxRing->Cell[index].AllocVa; +- pTxD->SDPtr0 = BufBasePaLow; +- // advance to next ring descriptor address +- pTxD->DMADONE = 1; +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; +- +- // advance to next TxBuf address +- BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; +- BufBaseVa = (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("TxRing[%d]: total %d entry allocated\n", num, index)); +- } +- if (Status == NDIS_STATUS_RESOURCES) +- break; +- +- // +- // Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler +- // +- pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * TXD_SIZE; +- RTMP_AllocateMgmtDescMemory( +- pAd, +- pAd->MgmtDescRing.AllocSize, +- FALSE, +- &pAd->MgmtDescRing.AllocVa, +- &pAd->MgmtDescRing.AllocPa); +- +- if (pAd->MgmtDescRing.AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->MgmtDescRing.AllocPa); +- RingBaseVa = pAd->MgmtDescRing.AllocVa; +- +- // +- // Initialize MGMT Ring and associated buffer memory +- // +- for (index = 0; index < MGMT_RING_SIZE; index++) +- { +- pAd->MgmtRing.Cell[index].pNdisPacket = NULL; +- pAd->MgmtRing.Cell[index].pNextNdisPacket = NULL; +- // Init MGMT Ring Size, Va, Pa variables +- pAd->MgmtRing.Cell[index].AllocSize = TXD_SIZE; +- pAd->MgmtRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->MgmtRing.Cell[index].AllocPa, RingBasePaLow); +- +- // Offset to next ring descriptor address +- RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; +- +- // link the pre-allocated TxBuf to TXD +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; +- pTxD->DMADONE = 1; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- // no pre-allocated buffer required in MgmtRing for scatter-gather case +- } +- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", index)); +- +- // +- // Allocate RX ring descriptor's memory except Tx ring which allocated eariler +- // +- pAd->RxDescRing.AllocSize = RX_RING_SIZE * RXD_SIZE; +- RTMP_AllocateRxDescMemory( +- pAd, +- pAd->RxDescRing.AllocSize, +- FALSE, +- &pAd->RxDescRing.AllocVa, +- &pAd->RxDescRing.AllocPa); +- +- if (pAd->RxDescRing.AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate a big buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize); +- +- +- DBGPRINT(RT_DEBUG_OFF, +- ("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize)); +- +- // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->RxDescRing.AllocPa); +- RingBaseVa = pAd->RxDescRing.AllocVa; +- +- // +- // Initialize Rx Ring and associated buffer memory +- // +- for (index = 0; index < RX_RING_SIZE; index++) +- { +- // Init RX Ring Size, Va, Pa variables +- pAd->RxRing.Cell[index].AllocSize = RXD_SIZE; +- pAd->RxRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->RxRing.Cell[index].AllocPa, RingBasePaLow); +- +- //NdisZeroMemory(RingBaseVa, RXD_SIZE); +- +- // Offset to next ring descriptor address +- RingBasePaLow += RXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + RXD_SIZE; +- +- // Setup Rx associated Buffer size & allocate share memory +- pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; +- pDmaBuf->AllocSize = RX_BUFFER_AGGRESIZE; +- pPacket = RTMP_AllocateRxPacketBuffer( +- pAd, +- pDmaBuf->AllocSize, +- FALSE, +- &pDmaBuf->AllocVa, +- &pDmaBuf->AllocPa); +- +- /* keep allocated rx packet */ +- pAd->RxRing.Cell[index].pNdisPacket = pPacket; +- +- // Error handling +- if (pDmaBuf->AllocVa == NULL) +- { +- ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; +- DBGPRINT_ERR(("Failed to allocate RxRing's 1st buffer\n")); +- Status = NDIS_STATUS_RESOURCES; +- break; +- } +- +- // Zero init this memory block +- NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); +- +- // Write RxD buffer address & allocated buffer length +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; +- pRxD->SDP0 = RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); +- pRxD->DDONE = 0; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD); +-#endif +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Rx Ring: total %d entry allocated\n", index)); +- +- } while (FALSE); +- +- +- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); +- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); +- +- if (pAd->FragFrame.pFragPacket == NULL) +- { +- Status = NDIS_STATUS_RESOURCES; +- } +- +- if (Status != NDIS_STATUS_SUCCESS) +- { +- // Log error inforamtion +- NdisWriteErrorLogEntry( +- pAd->AdapterHandle, +- NDIS_ERROR_CODE_OUT_OF_RESOURCES, +- 1, +- ErrorValue); +- } +- +- // Following code segment get from original func:NICInitTxRxRingAndBacklogQueue(), now should integrate it to here. +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTxRxRingAndBacklogQueue\n")); +- +-/* +- // Disable DMA. +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +-*/ +- +- // Initialize all transmit related software queues +- for(index = 0; index < NUM_OF_TX_RING; index++) +- { +- InitializeQueueHeader(&pAd->TxSwQueue[index]); +- // Init TX rings index pointer +- pAd->TxRing[index].TxSwFreeIdx = 0; +- pAd->TxRing[index].TxCpuIdx = 0; +- //RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TX_CTX_IDX); +- } +- +- // Init RX Ring index pointer +- pAd->RxRing.RxSwReadIdx = 0; +- pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; +- //RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RX_CRX_IDX0); +- +- +- // init MGMT ring index pointer +- pAd->MgmtRing.TxSwFreeIdx = 0; +- pAd->MgmtRing.TxCpuIdx = 0; +- +- pAd->PrivateInfo.TxRingFullCnt = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTxRxRingAndBacklogQueue\n")); +- } +- +- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); +- return Status; +-} +- +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Reset NIC Asics. Call after rest DMA. So reset TX_CTX_IDX to zero. +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- Reset NIC to initial state AS IS system boot up time. +- +- ======================================================================== +-*/ +-VOID RTMPRingCleanUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType) +-{ +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; +- int i; +- PRTMP_TX_RING pTxRing; +- unsigned long IrqFlags; +- //UINT32 RxSwReadIdx; +- +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, pAd->RalinkCounters.PendingNdisPacketCount)); +- switch (RingType) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: +- /*case QID_HCCA:*/ +- +- pTxRing = &pAd->TxRing[RingType]; +- +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- // We have to clean all descriptors in case some error happened with reset +- for (i=0; iCell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNdisPacket = NULL; +- } +- +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNextNdisPacket = NULL; +- } +- } +- +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + RingType * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + RingType * 0x10, pTxRing->TxCpuIdx); +- +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- while (pAd->TxSwQueue[RingType].Head != NULL) +- { +- pEntry = RemoveHeadQueue(&pAd->TxSwQueue[RingType]); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- DBGPRINT(RT_DEBUG_TRACE,("Release 1 NDIS packet from s/w backlog queue\n")); +- } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- break; +- +- case QID_MGMT: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->MgmtRingLock); +- +- for (i=0; iMgmtRing.Cell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; +- // rlease scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNdisPacket = NULL; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL; +- +- } +- +- RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pAd->MgmtRing.TxDmaIdx); +- pAd->MgmtRing.TxSwFreeIdx = pAd->MgmtRing.TxDmaIdx; +- pAd->MgmtRing.TxCpuIdx = pAd->MgmtRing.TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +- +- NdisReleaseSpinLock(&pAd->MgmtRingLock); +- pAd->RalinkCounters.MgmtRingFullCount = 0; +- break; +- +- case QID_RX: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->RxRingLock); +- +- for (i=0; iRxRing.Cell[i].AllocVa; +- pRxD->DDONE = 0 ; +- } +- +- RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); +- pAd->RxRing.RxSwReadIdx = pAd->RxRing.RxDmaIdx; +- pAd->RxRing.RxCpuIdx = ((pAd->RxRing.RxDmaIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxDmaIdx-1)); +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- +- NdisReleaseSpinLock(&pAd->RxRingLock); +- break; +- +- default: +- break; +- } +-} +- +- +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) +-{ +- int index, num , j; +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- unsigned int IrqFlags; +- +- //POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); +- +- // Free TxSwQueue Packet +- for (index=0; index irq_lock, IrqFlags); +- pQueue = &pAd->TxSwQueue[index]; +- while (pQueue->Head) +- { +- pEntry = RemoveHeadQueue(pQueue); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- } +- +- // Free Tx Ring Packet +- for (index=0;index< NUM_OF_TX_RING;index++) +- { +- pTxRing = &pAd->TxRing[index]; +- +- for (j=0; j< TX_RING_SIZE; j++) +- { +- pTxD = (PTXD_STRUC) (pTxRing->Cell[j].AllocVa); +- pPacket = pTxRing->Cell[j].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[j].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[j].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; +- +- } +- } +- +- for (index = RX_RING_SIZE - 1 ; index >= 0; index--) +- { +- if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) && (pAd->RxRing.Cell[index].pNdisPacket)) +- { +- PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); +- RELEASE_NDIS_PACKET(pAd, pAd->RxRing.Cell[index].pNdisPacket, NDIS_STATUS_SUCCESS); +- } +- } +- NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(RTMP_DMACB)); +- +- if (pAd->RxDescRing.AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->RxDescRing.AllocSize, pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocPa); +- } +- NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); +- +- if (pAd->MgmtDescRing.AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->MgmtDescRing.AllocSize, pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocPa); +- } +- NdisZeroMemory(&pAd->MgmtDescRing, sizeof(RTMP_DMABUF)); +- +- for (num = 0; num < NUM_OF_TX_RING; num++) +- { +- if (pAd->TxBufSpace[num].AllocVa) +- { +- RTMP_FreeFirstTxBuffer(pAd, pAd->TxBufSpace[num].AllocSize, FALSE, pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); +- +- if (pAd->TxDescRing[num].AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->TxDescRing[num].AllocSize, pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); +- } +- +- if (pAd->FragFrame.pFragPacket) +- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- RTMPFreeTxRxRingMemory\n")); +-} +- +- +-/*************************************************************************** +- * +- * register related procedures. +- * +- **************************************************************************/ +-/* +-======================================================================== +-Routine Description: +- Disable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Enable DMA. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- int i = 0; +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); +- RTMPusecDelay(1000); +- i++; +- }while ( i <200); +- +- RTMPusecDelay(50); +- +- GloCfg.field.EnTXWriteBackDDONE = 1; +- GloCfg.field.WPDMABurstSIZE = 2; +- GloCfg.field.EnableRxDMA = 1; +- GloCfg.field.EnableTxDMA = 1; +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +-} +- +- +-BOOLEAN AsicCheckCommanOk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command) +-{ +- UINT32 CmdStatus = 0, CID = 0, i; +- UINT32 ThisCIDMask = 0; +- +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, H2M_MAILBOX_CID, &CID); +- // Find where the command is. Because this is randomly specified by firmware. +- if ((CID & CID0MASK) == Command) +- { +- ThisCIDMask = CID0MASK; +- break; +- } +- else if ((((CID & CID1MASK)>>8) & 0xff) == Command) +- { +- ThisCIDMask = CID1MASK; +- break; +- } +- else if ((((CID & CID2MASK)>>16) & 0xff) == Command) +- { +- ThisCIDMask = CID2MASK; +- break; +- } +- else if ((((CID & CID3MASK)>>24) & 0xff) == Command) +- { +- ThisCIDMask = CID3MASK; +- break; +- } +- +- RTMPusecDelay(100); +- i++; +- }while (i < 200); +- +- // Get CommandStatus Value +- RTMP_IO_READ32(pAd, H2M_MAILBOX_STATUS, &CmdStatus); +- +- // This command's status is at the same position as command. So AND command position's bitmask to read status. +- if (i < 200) +- { +- // If Status is 1, the comamnd is success. +- if (((CmdStatus & ThisCIDMask) == 0x1) || ((CmdStatus & ThisCIDMask) == 0x100) +- || ((CmdStatus & ThisCIDMask) == 0x10000) || ((CmdStatus & ThisCIDMask) == 0x1000000)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanOk CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- return TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail1 CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", Command, CmdStatus)); +- } +- // Clear Command and Status. +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- +- return FALSE; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Write Beacon buffer to Asic. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- None +- +-Note: +-======================================================================== +-*/ +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER *pAd, +- IN INT apidx, +- IN ULONG FrameLen, +- IN ULONG UpdatePos) +-{ +- ULONG CapInfoPos = 0; +- UCHAR *ptr, *ptr_update, *ptr_capinfo; +- UINT i; +- BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; +- +- +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s() : No valid Interface be found.\n", __FUNCTION__)); +- return; +- } +- +- //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) +- // || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) +- // || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) +- if (bBcnReq == FALSE) +- { +- /* when the ra interface is down, do not send its beacon frame */ +- /* clear all zero */ +- for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); +- } +- else +- { +- ptr = (PUCHAR)&pAd->BeaconTxWI; +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange(ptr, TYPE_TXWI); +-#endif +- for (i=0; iBeaconOffset[bcn_idx] + i, longptr); +- ptr += 4; +- } +- +- // Update CapabilityInfo in Beacon +- for (i = CapInfoPos; i < (CapInfoPos+2); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_capinfo); +- ptr_capinfo ++; +- } +- +- if (FrameLen > UpdatePos) +- { +- for (i= UpdatePos; i< (FrameLen); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_update); +- ptr_update ++; +- } +- } +- +- } +- +-} +- +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) +-{ +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- return; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); +- return; +- } +- +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- // Support PCIe Advance Power Save +- if (bFromTx == TRUE +- &&(pAd->Mlme.bPsPollTimerRunning == TRUE)) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(3000); +- DBGPRINT(RT_DEBUG_TRACE, ("=======AsicForceWakeup===bFromTx\n")); +- } +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) +- { +-#ifdef PCIE_PS_SUPPORT +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +- } +- else +-#endif // PCIE_PS_SUPPORT // +- { +- // end johnli +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +- } +- } +-#ifdef PCIE_PS_SUPPORT +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Release the MCU Lock(3090)\n")); +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } +-#endif // PCIE_PS_SUPPORT // +- } +- else +- { +- // PCI, 2860-PCIe +- DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Original PCI Power Saving\n")); +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- } +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); +-} +- +- +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) +-{ +- BOOLEAN brc; +- +- if (pAd->StaCfg.bRadio == FALSE) +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- return; +- } +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- ULONG Now = 0; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- return; +- } +- +- NdisGetSystemUpTime(&Now); +- // If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. +- // Because Some AP can't queuing outgoing frames immediately. +- if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) && (pAd->Mlme.LastSendNULLpsmTime <= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu : RxCountSinceLastNULL = %lu. \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); +- return; +- } +- else if ((pAd->RalinkCounters.RxCountSinceLastNULL > 0) && ((pAd->Mlme.LastSendNULLpsmTime + pAd->CommonCfg.BeaconPeriod) >= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu: RxCountSinceLastNULL = %lu > 0 \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); +- return; +- } +- +- brc = RT28xxPciAsicRadioOff(pAd, DOT11POWERSAVE, TbttNumToNextWakeUp); +- if (brc==TRUE) +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +- } +- else +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- // we have decided to SLEEP, so at least do it for a BEACON period. +- if (TbttNumToNextWakeUp == 0) +- TbttNumToNextWakeUp = 1; +- +- //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; +- AutoWakeupCfg.field.EnableAutoWakeup = 1; +- AutoWakeupCfg.field.AutoLeadTime = 5; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +- DBGPRINT(RT_DEBUG_TRACE, ("<-- %s, TbttNumToNextWakeUp=%d \n", __FUNCTION__, TbttNumToNextWakeUp)); +- } +- +-} +- +- +-VOID PsPollWakeExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- unsigned long flags; +- +- DBGPRINT(RT_DEBUG_TRACE,("-->PsPollWakeExec \n")); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- if (pAd->Mlme.bPsPollTimerRunning) +- { +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- } +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-#ifdef PCIE_PS_SUPPORT +- // For rt30xx power solution 3, Use software timer to wake up in psm. So call +- // AsicForceWakeup here instead of handling twakeup interrupt. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("<--PsPollWakeExec::3090 calls AsicForceWakeup(pAd, DOT11POWERSAVE) in advance \n")); +- AsicForceWakeup(pAd, DOT11POWERSAVE); +- } +- +-#endif // PCIE_PS_SUPPORT // +-} +- +-VOID RadioOnExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- WPDMA_GLO_CFG_STRUC DmaCfg; +- BOOLEAN Cancelled; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); +-//KH Debug: Add the compile flag "RT2860 and condition +-#ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +-#endif // RTMP_PCI_SUPPORT // +- return; +- } +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); +- +- +-#ifdef RTMP_PCI_SUPPORT +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +-#endif // RTMP_PCI_SUPPORT // +- return; +- } +-//KH Debug: need to check. I add the compile flag "CONFIG_STA_SUPPORT" to enclose the following codes. +-#ifdef RTMP_PCI_SUPPORT +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- } +-#endif // RTMP_PCI_SUPPORT // +- if (pAd->StaCfg.bRadio == TRUE) +- { +- pAd->bPCIclkOff = FALSE; +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- /*RTMPRingCleanUp(pAd, QID_HCCA);*/ +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- // 2. Send wake up command. +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- // 2-1. wait command ok. +- AsicCheckCommanOk(pAd, PowerWakeCID); +- +- // When PCI clock is off, don't want to service interrupt. So when back to clock on, enable interrupt. +- //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, (DELAYINTMASK|RxINT)); +- RTMP_ASIC_INTERRUPT_ENABLE(pAd); +- +- // 3. Enable Tx DMA. +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- DmaCfg.field.EnableTxDMA = 1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); +- +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +-//KH Debug:The following codes should be enclosed by RT3090 compile flag +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +-#ifdef PCIE_PS_SUPPORT +-#ifdef CONFIG_STA_SUPPORT +-// 3090 MCU Wakeup command needs more time to be stable. +-// Before stable, don't issue other MCU command to prevent from firmware error. +-if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } +-#endif // CONFIG_STA_SUPPORT // +-#endif // PCIE_PS_SUPPORT // +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +- +- if (pAd->StaCfg.Psm == PWR_ACTIVE) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- } +- } +- else +- { +- RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); +- } +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-/* +- ========================================================================== +- Description: +- This routine sends command to firmware and turn our chip to wake up mode from power save mode. +- Both RadioOn and .11 power save function needs to call this routine. +- Input: +- Level = GUIRADIO_OFF : call this function is from Radio Off to Radio On. Need to restore PCI host value. +- Level = other value : normal wake up function. +- +- ========================================================================== +- */ +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) +-{ +- //WPDMA_GLO_CFG_STRUC DmaCfg; +-#ifdef CONFIG_STA_SUPPORT +- BOOLEAN Cancelled; +-#endif // CONFIG_STA_SUPPORT // +- //UINT32 MACValue; +- +- if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) +- return FALSE; +- +-#ifdef CONFIG_STA_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- } +- if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)&& +- ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE)) +- ||(RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))) +- { +- // Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore +- // return condition here. +- /* +- if (((pAd->MACVersion&0xffff0000) != 0x28600000) +- && ((pAd->DeviceID == NIC2860_PCIe_DEVICE_ID) +- ||(pAd->DeviceID == NIC2790_PCIe_DEVICE_ID))) +- */ +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n")); +- // 1. Set PCI Link Control in Configuration Space. +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(6000); +- } +- } +- } +- +-#ifdef PCIE_PS_SUPPORT +-if (!(((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)))) +-#endif // PCIE_PS_SUPPORT // +- { +- pAd->bPCIclkOff = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM :309xbPCIclkOff == %d\n", pAd->bPCIclkOff)); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- // 2. Send wake up command. +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- pAd->bPCIclkOff = FALSE; +- // 2-1. wait command ok. +- AsicCheckCommanOk(pAd, PowerWakeCID); +- RTMP_ASIC_INTERRUPT_ENABLE(pAd); +- +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- if (Level == GUI_IDLE_POWER_SAVE) +- { +-#ifdef PCIE_PS_SUPPORT +- +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +-#ifdef CONFIG_STA_SUPPORT +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- else +- // end johnli +-#endif // PCIE_PS_SUPPORT // +- { +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- } +- return TRUE; +- +-} +- +- +-/* +- ========================================================================== +- Description: +- This routine sends command to firmware and turn our chip to power save mode. +- Both RadioOff and .11 power save function needs to call this routine. +- Input: +- Level = GUIRADIO_OFF : GUI Radio Off mode +- Level = DOT11POWERSAVE : 802.11 power save mode +- Level = RTMP_HALT : When Disable device. +- +- ========================================================================== +- */ +-BOOLEAN RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp) +-{ +-#ifdef CONFIG_STA_SUPPORT +- WPDMA_GLO_CFG_STRUC DmaCfg; +- UCHAR i, tempBBP_R3 = 0; +-#endif // CONFIG_STA_SUPPORT // +- BOOLEAN brc = FALSE, Cancelled; +- UINT32 TbTTTime = 0; +- UINT32 PsPollTime = 0/*, MACValue*/; +- ULONG BeaconPeriodTime; +- UINT32 RxDmaIdx, RxCpuIdx; +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> Lv= %d, TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", Level,pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, pAd->RxRing.RxCpuIdx, pAd->RxRing.RxDmaIdx)); +- +- if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) +- return FALSE; +- +- // Check Rx DMA busy status, if more than half is occupied, give up this radio off. +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &RxDmaIdx); +- RTMP_IO_READ32(pAd, RX_CRX_IDX , &RxCpuIdx); +- if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return1. RxDmaIdx = %d , RxCpuIdx = %d. \n", RxDmaIdx, RxCpuIdx)); +- return FALSE; +- } +- else if ((RxCpuIdx >= RxDmaIdx) && ((RxCpuIdx - RxDmaIdx) < RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return2. RxCpuIdx = %d. RxDmaIdx = %d , \n", RxCpuIdx, RxDmaIdx)); +- return FALSE; +- } +- +- // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. +- //pAd->bPCIclkOffDisableTx = TRUE; +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- && pAd->OpMode == OPMODE_STA +-#ifdef CONFIG_STA_SUPPORT +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE +-#endif // CONFIG_STA_SUPPORT // +- ) +- { +- +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- +- if (Level == DOT11POWERSAVE) +- { +- RTMP_IO_READ32(pAd, TBTT_TIMER, &TbTTTime); +- TbTTTime &= 0x1ffff; +- // 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. +- // TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms +- if (((64*TbTTTime) <((LEAD_TIME*1024) + 40000)) && (TbttNumToNextWakeUp == 0)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TbTTTime = 0x%x , give up this sleep. \n", TbTTTime)); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- //pAd->bPCIclkOffDisableTx = FALSE; +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- return FALSE; +- } +- else +- { +- PsPollTime = (64*TbTTTime- LEAD_TIME*1024)/1000; +-#ifdef PCIE_PS_SUPPORT +-#ifdef CONFIG_STA_SUPPORT +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- PsPollTime -= 5; +- } +- else +-#endif // CONFIG_STA_SUPPORT // +-#endif // PCIE_PS_SUPPORT // +- PsPollTime -= 3; +- +- BeaconPeriodTime = pAd->CommonCfg.BeaconPeriod*102/100; +- if (TbttNumToNextWakeUp > 0) +- PsPollTime += ((TbttNumToNextWakeUp -1) * BeaconPeriodTime); +- +- pAd->Mlme.bPsPollTimerRunning = TRUE; +- RTMPSetTimer(&pAd->Mlme.PsPollTimer, PsPollTime); +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::Level!=DOT11POWERSAVE \n")); +- } +- +- pAd->bPCIclkOffDisableTx = FALSE; +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- +-#ifdef CONFIG_STA_SUPPORT +- // Set to 1R. +- if (pAd->Antenna.field.RxPath > 1 && pAd->OpMode == OPMODE_STA) +- { +- tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, tempBBP_R3); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if ((INFRA_ON(pAd) || pAd->OpMode == OPMODE_AP) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); +- } +- +- if (Level != RTMP_HALT) +- { +- // Change Interrupt bitmask. +- // When PCI clock is off, don't want to service interrupt. +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); +- } +- else +- { +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- } +- +- +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- // 2. Send Sleep command +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- // send POWER-SAVE command to MCU. high-byte = 1 save power as much as possible. high byte = 0 save less power +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x1); +- // 2-1. Wait command success +- // Status = 1 : success, Status = 2, already sleep, Status = 3, Maybe MAC is busy so can't finish this task. +- brc = AsicCheckCommanOk(pAd, PowerSafeCID); +- +- // 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. +- // If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. +- if ((Level == DOT11POWERSAVE) && (brc == TRUE)) +- { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success +- AsicCheckCommanOk(pAd, PowerRadioOffCID); +- } +- else if (brc == TRUE) +- { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success +- AsicCheckCommanOk(pAd, PowerRadioOffCID); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- // 1. Wait DMA not busy +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- if ((DmaCfg.field.RxDMABusy == 0) && (DmaCfg.field.TxDMABusy == 0)) +- break; +- RTMPusecDelay(20); +- i++; +- }while(i < 50); +- +- /* +- if (i >= 50) +- { +- pAd->CheckDmaBusyCount++; +- DBGPRINT(RT_DEBUG_TRACE, ("DMA Rx keeps busy. return on AsicRadioOff () CheckDmaBusyCount = %d \n", pAd->CheckDmaBusyCount)); +- } +- else +- { +- pAd->CheckDmaBusyCount = 0; +- } +- */ +-#endif // CONFIG_STA_SUPPORT // +-//KH Debug:My original codes have the follwoing codes, but currecnt codes do not have it. +-// Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment. +-RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280); +-//OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ); +- +-#ifdef PCIE_PS_SUPPORT +-#ifdef CONFIG_STA_SUPPORT +-if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::3090 return to skip the following TbttNumToNextWakeUp setting for 279x\n")); +- pAd->bPCIclkOff = TRUE; +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- // For this case, doesn't need to below actions, so return here. +- return brc; +- } +-#endif // CONFIG_STA_SUPPORT // +-#endif // PCIE_PS_SUPPORT // +- if (Level == DOT11POWERSAVE) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- //RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); +- +- // we have decided to SLEEP, so at least do it for a BEACON period. +- if (TbttNumToNextWakeUp == 0) +- TbttNumToNextWakeUp = 1; +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- // 1. Set auto wake up timer. +- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; +- AutoWakeupCfg.field.EnableAutoWakeup = 1; +- AutoWakeupCfg.field.AutoLeadTime = LEAD_TIME; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. +- if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) +- { +- if ((brc == TRUE) && (i < 50)) +- RTMPPCIeLinkCtrlSetting(pAd, 1); +- } +- // 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function +- else if (pAd->OpMode == OPMODE_STA) +- { +- if ((brc == TRUE) && (i < 50)) +- RTMPPCIeLinkCtrlSetting(pAd, 3); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- //pAd->bPCIclkOffDisableTx = FALSE; +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- return TRUE; +-} +- +- +- +- +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd) +-{ +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __FUNCTION__)); +- +- if ((pAd->OpMode == OPMODE_AP) || +- ((pAd->OpMode == OPMODE_STA) +- && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +-#ifdef CONFIG_STA_SUPPORT +- ||pAd->StaCfg.PSControl.field.EnableNewPS == FALSE +-#endif // CONFIG_STA_SUPPORT // +- ))) +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- //NICResetFromError(pAd); +- +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- /*RTMPRingCleanUp(pAd, QID_HCCA);*/ +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- // Enable Tx/Rx +- RTMPEnableRxTx(pAd); +- +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && +- (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- BOOLEAN Cancelled; +- +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 40); +- } +-#endif // CONFIG_STA_SUPPORT // +-} +- +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd) +-{ +- BOOLEAN brc=TRUE; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +-#ifdef CONFIG_STA_SUPPORT +- // Link down first if any association exists +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *pMsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- +- if (pMsgElem) +- { +- COPY_MAC_ADDR(&DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DISASSOC_STA_LEAVING; +- +- pMsgElem->Machine = ASSOC_STATE_MACHINE; +- pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- pMsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(pMsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- MlmeDisassocReqAction(pAd, pMsgElem); +- kfree(pMsgElem); +- +- RTMPusecDelay(1000); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __FUNCTION__)); +- +- // Set LED +- //RTMPSetLED(pAd, LED_RADIO_OFF); +- // Set Radio off flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- BOOLEAN Cancelled; +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- } +- // If during power safe mode. +- if (pAd->StaCfg.bRadio == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->MlmeRadioOff() return on bRadio == TRUE; \n")); +- return; +- } +- // Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). +- if (IDLE_ON(pAd) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- } +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- BOOLEAN Cancelled; +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- } +- } +- +- // Link down first if any association exists +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- LinkDown(pAd, FALSE); +- RTMPusecDelay(10000); +- //========================================== +- // Clean up old bss table +- BssTableInit(&pAd->ScanTab); +- +- /* +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- return; +- } +- */ +- } +-#endif // CONFIG_STA_SUPPORT // +- // Set LED.Move to here for fixing LED bug. This flag must be called after LinkDown +- RTMPSetLED(pAd, LED_RADIO_OFF); +- +-#ifdef CONFIG_STA_SUPPORT +-//KH Debug:All PCIe devices need to use timer to execute radio off function, or the PCIe&&EnableNewPS needs. +-//KH Ans:It is right, because only when the PCIe and EnableNewPs is true, we need to delay the RadioOffTimer +-//to avoid the deadlock with PCIe Power saving function. +-if (pAd->OpMode == OPMODE_STA&& +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)&& +- pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- } +-else +-#endif // CONFIG_STA_SUPPORT // +-{ +- +- +- brc=RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); +- +- if (brc==FALSE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __FUNCTION__)); +- } +-} +-/* +- // Disable Tx/Rx DMA +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- GloCfg.field.EnableTxDMA = 0; +- GloCfg.field.EnableRxDMA = 0; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings +- +- +- // MAC_SYS_CTRL => value = 0x0 => 40mA +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0); +- +- // PWR_PIN_CFG => value = 0x0 => 40mA +- RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0); +- +- // TX_PIN_CFG => value = 0x0 => 20mA +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, 0); +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- // Must using 40MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); +- } +- +- // Waiting for DMA idle +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- RTMPusecDelay(1000); +- }while (i++ < 100); +-*/ +-} +- +-#endif // RTMP_MAC_PCI // +diff --git a/drivers/staging/rt3090/common/cmm_profile.c b/drivers/staging/rt3090/common/cmm_profile.c +deleted file mode 100644 +index 5803f42..0000000 +--- a/drivers/staging/rt3090/common/cmm_profile.c ++++ /dev/null +@@ -1,2321 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_profile.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include "../rt_config.h" +- +- +-#define ETH_MAC_ADDR_STR_LEN 17 // in format of xx:xx:xx:xx:xx:xx +- +-// We assume the s1 is a sting, s2 is a memory space with 6 bytes. and content of s1 will be changed. +-BOOLEAN rtstrmactohex(PSTRING s1, PSTRING s2) +-{ +- int i = 0; +- PSTRING ptokS = s1, ptokE = s1; +- +- if (strlen(s1) != ETH_MAC_ADDR_STR_LEN) +- return FALSE; +- +- while((*ptokS) != '\0') +- { +- if((ptokE = strchr(ptokS, ':')) != NULL) +- *ptokE++ = '\0'; +- if ((strlen(ptokS) != 2) || (!isxdigit(*ptokS)) || (!isxdigit(*(ptokS+1)))) +- break; // fail +- AtoH(ptokS, (PUCHAR)&s2[i++], 1); +- ptokS = ptokE; +- if (i == 6) +- break; // parsing finished +- } +- +- return ( i == 6 ? TRUE : FALSE); +- +-} +- +- +-// we assume the s1 and s2 both are strings. +-BOOLEAN rtstrcasecmp(PSTRING s1, PSTRING s2) +-{ +- PSTRING p1 = s1, p2 = s2; +- +- if (strlen(s1) != strlen(s2)) +- return FALSE; +- +- while(*p1 != '\0') +- { +- if((*p1 != *p2) && ((*p1 ^ *p2) != 0x20)) +- return FALSE; +- p1++; +- p2++; +- } +- +- return TRUE; +-} +- +-// we assume the s1 (buffer) and s2 (key) both are strings. +-PSTRING rtstrstruncasecmp(PSTRING s1, PSTRING s2) +-{ +- INT l1, l2, i; +- char temp1, temp2; +- +- l2 = strlen(s2); +- if (!l2) +- return (char *) s1; +- +- l1 = strlen(s1); +- +- while (l1 >= l2) +- { +- l1--; +- +- for(i=0; i= l2) +- { +- l1--; +- if (!memcmp(s1,s2,l2)) +- return s1; +- s1++; +- } +- +- return NULL; +-} +- +-/** +- * rstrtok - Split a string into tokens +- * @s: The string to be searched +- * @ct: The characters to search for +- * * WARNING: strtok is deprecated, use strsep instead. However strsep is not compatible with old architecture. +- */ +-PSTRING __rstrtok; +-PSTRING rstrtok(PSTRING s,const PSTRING ct) +-{ +- PSTRING sbegin, send; +- +- sbegin = s ? s : __rstrtok; +- if (!sbegin) +- { +- return NULL; +- } +- +- sbegin += strspn(sbegin,ct); +- if (*sbegin == '\0') +- { +- __rstrtok = NULL; +- return( NULL ); +- } +- +- send = strpbrk( sbegin, ct); +- if (send && *send != '\0') +- *send++ = '\0'; +- +- __rstrtok = send; +- +- return (sbegin); +-} +- +-/** +- * delimitcnt - return the count of a given delimiter in a given string. +- * @s: The string to be searched. +- * @ct: The delimiter to search for. +- * Notice : We suppose the delimiter is a single-char string(for example : ";"). +- */ +-INT delimitcnt(PSTRING s,PSTRING ct) +-{ +- INT count = 0; +- /* point to the beginning of the line */ +- PSTRING token = s; +- +- for ( ;; ) +- { +- token = strpbrk(token, ct); /* search for delimiters */ +- +- if ( token == NULL ) +- { +- /* advanced to the terminating null character */ +- break; +- } +- /* skip the delimiter */ +- ++token; +- +- /* +- * Print the found text: use len with %.*s to specify field width. +- */ +- +- /* accumulate delimiter count */ +- ++count; +- } +- return count; +-} +- +-/* +- * converts the Internet host address from the standard numbers-and-dots notation +- * into binary data. +- * returns nonzero if the address is valid, zero if not. +- */ +-int rtinet_aton(PSTRING cp, unsigned int *addr) +-{ +- unsigned int val; +- int base, n; +- STRING c; +- unsigned int parts[4]; +- unsigned int *pp = parts; +- +- for (;;) +- { +- /* +- * Collect number up to ``.''. +- * Values are specified as for C: +- * 0x=hex, 0=octal, other=decimal. +- */ +- val = 0; +- base = 10; +- if (*cp == '0') +- { +- if (*++cp == 'x' || *cp == 'X') +- base = 16, cp++; +- else +- base = 8; +- } +- while ((c = *cp) != '\0') +- { +- if (isdigit((unsigned char) c)) +- { +- val = (val * base) + (c - '0'); +- cp++; +- continue; +- } +- if (base == 16 && isxdigit((unsigned char) c)) +- { +- val = (val << 4) + +- (c + 10 - (islower((unsigned char) c) ? 'a' : 'A')); +- cp++; +- continue; +- } +- break; +- } +- if (*cp == '.') +- { +- /* +- * Internet format: a.b.c.d a.b.c (with c treated as 16-bits) +- * a.b (with b treated as 24 bits) +- */ +- if (pp >= parts + 3 || val > 0xff) +- return 0; +- *pp++ = val, cp++; +- } +- else +- break; +- } +- +- /* +- * Check for trailing junk. +- */ +- while (*cp) +- if (!isspace((unsigned char) *cp++)) +- return 0; +- +- /* +- * Concoct the address according to the number of parts specified. +- */ +- n = pp - parts + 1; +- switch (n) +- { +- +- case 1: /* a -- 32 bits */ +- break; +- +- case 2: /* a.b -- 8.24 bits */ +- if (val > 0xffffff) +- return 0; +- val |= parts[0] << 24; +- break; +- +- case 3: /* a.b.c -- 8.8.16 bits */ +- if (val > 0xffff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16); +- break; +- +- case 4: /* a.b.c.d -- 8.8.8.8 bits */ +- if (val > 0xff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); +- break; +- } +- +- *addr = htonl(val); +- return 1; +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Find key section for Get key parameter. +- +- Arguments: +- buffer Pointer to the buffer to start find the key section +- section the key of the secion to be find +- +- Return Value: +- NULL Fail +- Others Success +- ======================================================================== +-*/ +-PSTRING RTMPFindSection( +- IN PSTRING buffer) +-{ +- STRING temp_buf[32]; +- PSTRING ptr; +- +- strcpy(temp_buf, "Default"); +- +- if((ptr = rtstrstr(buffer, temp_buf)) != NULL) +- return (ptr+strlen("\n")); +- else +- return NULL; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get key parameter. +- +- Arguments: +- key Pointer to key string +- dest Pointer to destination +- destsize The datasize of the destination +- buffer Pointer to the buffer to start find the key +- bTrimSpace Set true if you want to strip the space character of the result pattern +- +- Return Value: +- TRUE Success +- FALSE Fail +- +- Note: +- This routine get the value with the matched key (case case-sensitive) +- For SSID and security key related parameters, we SHALL NOT trim the space(' ') character. +- ======================================================================== +-*/ +-INT RTMPGetKeyParameter( +- IN PSTRING key, +- OUT PSTRING dest, +- IN INT destsize, +- IN PSTRING buffer, +- IN BOOLEAN bTrimSpace) +-{ +- PSTRING pMemBuf, temp_buf1 = NULL, temp_buf2 = NULL; +- PSTRING start_ptr, end_ptr; +- PSTRING ptr; +- PSTRING offset = NULL; +- INT len, keyLen; +- +- +- keyLen = strlen(key); +- os_alloc_mem(NULL, (PUCHAR *)&pMemBuf, MAX_PARAM_BUFFER_SIZE * 2); +- if (pMemBuf == NULL) +- return (FALSE); +- +- memset(pMemBuf, 0, MAX_PARAM_BUFFER_SIZE * 2); +- temp_buf1 = pMemBuf; +- temp_buf2 = (PSTRING)(pMemBuf + MAX_PARAM_BUFFER_SIZE); +- +- +- //find section +- if((offset = RTMPFindSection(buffer)) == NULL) +- { +- os_free_mem(NULL, (PUCHAR)pMemBuf); +- return (FALSE); +- } +- +- strcpy(temp_buf1, "\n"); +- strcat(temp_buf1, key); +- strcat(temp_buf1, "="); +- +- //search key +- if((start_ptr=rtstrstr(offset, temp_buf1)) == NULL) +- { +- os_free_mem(NULL, (PUCHAR)pMemBuf); +- return (FALSE); +- } +- +- start_ptr += strlen("\n"); +- if((end_ptr = rtstrstr(start_ptr, "\n"))==NULL) +- end_ptr = start_ptr+strlen(start_ptr); +- +- if (end_ptr= 1 ) && (KeyIdx <= 4)) +- pAd->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1); +- else +- pAd->StaCfg.DefaultKeyId = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyID(0~3)=%d\n", pAd->StaCfg.DefaultKeyId)); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +- for (idx = 0; idx < 4; idx++) +- { +- sprintf(tok_str, "Key%dType", idx + 1); +- //Key1Type +- if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- /* +- do sanity check for KeyType length; +- or in station mode, the KeyType length > 1, +- the code will overwrite the stack of caller +- (RTMPSetProfileParameters) and cause srcbuf = NULL +- */ +- if (i < MAX_MBSSID_NUM) +- KeyType[i] = simple_strtol(macptr, 0, 10); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- sprintf(tok_str, "Key%dStr", idx + 1); +- if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, FALSE)) +- { +- rtmp_parse_key_buffer_from_file(pAd, tmpbuf, KeyType[BSS0], BSS0, idx); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- } +-} +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer) +-{ +- PSTRING macptr; +- INT i=0; +- BOOLEAN bWmmEnable = FALSE; +- +- //WmmCapable +- if(RTMPGetKeyParameter("WmmCapable", tmpbuf, 32, buffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- { +- pAd->CommonCfg.bWmmCapable = TRUE; +- bWmmEnable = TRUE; +- } +- else //Disable +- { +- pAd->CommonCfg.bWmmCapable = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("WmmCapable=%d\n", pAd->CommonCfg.bWmmCapable)); +- } +- +-#ifdef QOS_DLS_SUPPORT +- //DLSCapable +- if(RTMPGetKeyParameter("DLSCapable", tmpbuf, 32, buffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- { +- pAd->CommonCfg.bDLSCapable = TRUE; +- } +- else //Disable +- { +- pAd->CommonCfg.bDLSCapable = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("bDLSCapable=%d\n", pAd->CommonCfg.bDLSCapable)); +- } +-#endif // QOS_DLS_SUPPORT // +- +- //AckPolicy for AC_BK, AC_BE, AC_VI, AC_VO +- if(RTMPGetKeyParameter("AckPolicy", tmpbuf, 32, buffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- pAd->CommonCfg.AckPolicy[i] = (UCHAR)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AckPolicy[%d]=%d\n", i, pAd->CommonCfg.AckPolicy[i])); +- } +- } +- +- if (bWmmEnable) +- { +- //APSDCapable +- if(RTMPGetKeyParameter("APSDCapable", tmpbuf, 10, buffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAPSDCapable = TRUE; +- else +- pAd->CommonCfg.bAPSDCapable = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("APSDCapable=%d\n", pAd->CommonCfg.bAPSDCapable)); +- } +- +- //MaxSPLength +- if(RTMPGetKeyParameter("MaxSPLength", tmpbuf, 10, buffer, TRUE)) +- { +- pAd->CommonCfg.MaxSPLength = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("MaxSPLength=%d\n", pAd->CommonCfg.MaxSPLength)); +- } +- +- //APSDAC for AC_BE, AC_BK, AC_VI, AC_VO +- if(RTMPGetKeyParameter("APSDAC", tmpbuf, 32, buffer, TRUE)) +- { +- BOOLEAN apsd_ac[4]; +- +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- apsd_ac[i] = (BOOLEAN)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("APSDAC%d %d\n", i, apsd_ac[i])); +- } +- +- pAd->CommonCfg.bAPSDAC_BE = apsd_ac[0]; +- pAd->CommonCfg.bAPSDAC_BK = apsd_ac[1]; +- pAd->CommonCfg.bAPSDAC_VI = apsd_ac[2]; +- pAd->CommonCfg.bAPSDAC_VO = apsd_ac[3]; +- +- pAd->CommonCfg.bACMAPSDTr[0] = apsd_ac[0]; +- pAd->CommonCfg.bACMAPSDTr[1] = apsd_ac[1]; +- pAd->CommonCfg.bACMAPSDTr[2] = apsd_ac[2]; +- pAd->CommonCfg.bACMAPSDTr[3] = apsd_ac[3]; +- } +- } +- +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-#ifdef DOT11_N_SUPPORT +-static void HTParametersHook( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pValueStr, +- IN PSTRING pInput) +-{ +- +- long Value; +- +- if (RTMPGetKeyParameter("HT_PROTECT", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bHTProtect = FALSE; +- } +- else +- { +- pAd->CommonCfg.bHTProtect = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Protection = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- if (RTMPGetKeyParameter("HT_MIMOPSEnable", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bMIMOPSEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPSEnable = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_MIMOPSMode", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value > MMPS_ENABLE) +- { +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- } +- else +- { +- //TODO: add mimo power saving mechanism +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- //pAd->CommonCfg.BACapability.field.MMPSmode = Value; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPS Mode = %d\n", (INT) Value)); +- } +- +- if (RTMPGetKeyParameter("HT_BADecline", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bBADecline = FALSE; +- } +- else +- { +- pAd->CommonCfg.bBADecline = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Decline = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_DisableReordering", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bDisableReordering = FALSE; +- } +- else +- { +- pAd->CommonCfg.bDisableReordering = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: DisableReordering = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- if (RTMPGetKeyParameter("HT_AutoBA", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- } +- pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Tx_+HTC frame +- if (RTMPGetKeyParameter("HT_HTC", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->HTCEnable = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Enable HT Link Adaptation Control +- if (RTMPGetKeyParameter("HT_LinkAdapt", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->bLinkAdapt = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->bLinkAdapt = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Link Adaptation Control = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- // Reverse Direction Mechanism +- if (RTMPGetKeyParameter("HT_RDG", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bRdg = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->CommonCfg.bRdg = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: RDG = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- +- +- +- // Tx A-MSUD ? +- if (RTMPGetKeyParameter("HT_AMSDU", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx A-MSDU = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // MPDU Density +- if (RTMPGetKeyParameter("HT_MpduDensity", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value <=7 && Value >= 0) +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d\n", (INT) Value)); +- } +- else +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = 4; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d (Default)\n", 4)); +- } +- } +- +- // Max Rx BA Window Size +- if (RTMPGetKeyParameter("HT_BAWinSize", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value >=1 && Value <= 64) +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = %d\n", (INT) Value)); +- } +- else +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = 64 (Defualt)\n")); +- } +- +- } +- +- // Guard Interval +- if (RTMPGetKeyParameter("HT_GI", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == GI_400) +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Guard Interval = %s\n", (Value==GI_400) ? "400" : "800" )); +- } +- +- // HT Operation Mode : Mixed Mode , Green Field +- if (RTMPGetKeyParameter("HT_OpMode", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == HTMODE_GF) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Operate Mode = %s\n", (Value==HTMODE_GF) ? "Green Field" : "Mixed Mode" )); +- } +- +- // Fixed Tx mode : CCK, OFDM +- if (RTMPGetKeyParameter("FixedTxMode", pValueStr, 25, pInput, TRUE)) +- { +- UCHAR fix_tx_mode; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- +- if (strcmp(pValueStr, "OFDM") == 0 || strcmp(pValueStr, "ofdm") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_OFDM; +- } +- else if (strcmp(pValueStr, "CCK") == 0 || strcmp(pValueStr, "cck") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_CCK; +- } +- else if (strcmp(pValueStr, "HT") == 0 || strcmp(pValueStr, "ht") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- else +- { +- Value = simple_strtol(pValueStr, 0, 10); +- // 1 : CCK +- // 2 : OFDM +- // otherwise : HT +- if (Value == FIXED_TXMODE_CCK || Value == FIXED_TXMODE_OFDM) +- fix_tx_mode = Value; +- else +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- +- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; +- DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", fix_tx_mode)); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +- // Channel Width +- if (RTMPGetKeyParameter("HT_BW", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == BW_40) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- +-#ifdef MCAST_RATE_SPECIFIC +- pAd->CommonCfg.MCastPhyMode.field.BW = pAd->CommonCfg.RegTransmitSetting.field.BW; +-#endif // MCAST_RATE_SPECIFIC // +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" )); +- } +- +- if (RTMPGetKeyParameter("HT_EXTCHA", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == 0) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Ext Channel = %s\n", (Value==0) ? "BELOW" : "ABOVE" )); +- } +- +- // MSC +- if (RTMPGetKeyParameter("HT_MCS", pValueStr, 50, pInput, TRUE)) +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +-// if ((Value >= 0 && Value <= 15) || (Value == 32)) +- if ((Value >= 0 && Value <= 23) || (Value == 32)) // 3*3 +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = Value; +- pAd->StaCfg.bAutoTxRateSwitch = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = %d\n", pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- } +- else +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- pAd->StaCfg.bAutoTxRateSwitch = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n")); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- // STBC +- if (RTMPGetKeyParameter("HT_STBC", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == STBC_USE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: STBC = %d\n", pAd->CommonCfg.RegTransmitSetting.field.STBC)); +- } +- +- // 40_Mhz_Intolerant +- if (RTMPGetKeyParameter("HT_40MHZ_INTOLERANT", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = FALSE; +- } +- else +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: 40MHZ INTOLERANT = %d\n", pAd->CommonCfg.bForty_Mhz_Intolerant)); +- } +- //HT_TxStream +- if(RTMPGetKeyParameter("HT_TxStream", pValueStr, 10, pInput, TRUE)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.TxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.TxStream = 2; +- break; +- case 3: // 3*3 +- default: +- pAd->CommonCfg.TxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.TxStream = 2; // only 2 tx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx Stream = %d\n", pAd->CommonCfg.TxStream)); +- } +- //HT_RxStream +- if(RTMPGetKeyParameter("HT_RxStream", pValueStr, 10, pInput, TRUE)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.RxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.RxStream = 2; +- break; +- case 3: +- default: +- pAd->CommonCfg.RxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.RxStream = 2; // only 2 rx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Rx Stream = %d\n", pAd->CommonCfg.RxStream)); +- } +- //2008/11/05: KH add to support Antenna power-saving of AP<-- +- //Green AP +- if(RTMPGetKeyParameter("GreenAP", pValueStr, 10, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bGreenAPEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.bGreenAPEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Green AP= %d\n", pAd->CommonCfg.bGreenAPEnable)); +- } +- +- // HT_DisallowTKIP +- if (RTMPGetKeyParameter("HT_DisallowTKIP", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == 1) +- { +- pAd->CommonCfg.HT_DisallowTKIP = TRUE; +- } +- else +- { +- pAd->CommonCfg.HT_DisallowTKIP = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Disallow TKIP mode = %s\n", (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "ON" : "OFF" )); +- } +- +- +- //2008/11/05:KH add to support Antenna power-saving of AP--> +-} +-#endif // DOT11_N_SUPPORT // +- +- +-NDIS_STATUS RTMPSetProfileParameters( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING pBuffer) +-{ +- PSTRING tmpbuf; +- ULONG RtsThresh; +- ULONG FragThresh; +- PSTRING macptr; +- INT i = 0, retval; +- tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(tmpbuf == NULL) +- return NDIS_STATUS_FAILURE; +- +- do +- { +- // set file parameter to portcfg +- //CountryRegion +- if(RTMPGetKeyParameter("CountryRegion", tmpbuf, 25, pBuffer, TRUE)) +- { +- retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_24G); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegion=%d\n", pAd->CommonCfg.CountryRegion)); +- } +- //CountryRegionABand +- if(RTMPGetKeyParameter("CountryRegionABand", tmpbuf, 25, pBuffer, TRUE)) +- { +- retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_5G); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); +- } +-#ifdef RTMP_EFUSE_SUPPORT +-#ifdef RT30xx +- //EfuseBufferMode +- if(RTMPGetKeyParameter("EfuseBufferMode", tmpbuf, 25, pBuffer, TRUE)) +- { +- pAd->bEEPROMFile = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("EfuseBufferMode=%d\n", pAd->bUseEfuse)); +- } +-#endif // RT30xx // +-#endif // RTMP_EFUSE_SUPPORT // +- //CountryCode +- if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, pBuffer, TRUE)) +- { +- NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2); +-#ifdef CONFIG_STA_SUPPORT +-#ifdef EXT_BUILD_CHANNEL_LIST +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- NdisMoveMemory(pAd->StaCfg.StaOriCountryCode, tmpbuf , 2); +-#endif // EXT_BUILD_CHANNEL_LIST // +-#endif // CONFIG_STA_SUPPORT // +- if (strlen((PSTRING) pAd->CommonCfg.CountryCode) != 0) +- { +- pAd->CommonCfg.bCountryFlag = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("CountryCode=%s\n", pAd->CommonCfg.CountryCode)); +- } +- //ChannelGeography +- if(RTMPGetKeyParameter("ChannelGeography", tmpbuf, 25, pBuffer, TRUE)) +- { +- UCHAR Geography = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- if (Geography <= BOTH) +- { +- pAd->CommonCfg.Geography = Geography; +- pAd->CommonCfg.CountryCode[2] = +- (pAd->CommonCfg.Geography == BOTH) ? ' ' : ((pAd->CommonCfg.Geography == IDOR) ? 'I' : 'O'); +-#ifdef CONFIG_STA_SUPPORT +-#ifdef EXT_BUILD_CHANNEL_LIST +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->StaCfg.StaOriGeography = pAd->CommonCfg.Geography; +-#endif // EXT_BUILD_CHANNEL_LIST // +-#endif // CONFIG_STA_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelGeography=%d\n", pAd->CommonCfg.Geography)); +- } +- } +- else +- { +- pAd->CommonCfg.Geography = BOTH; +- pAd->CommonCfg.CountryCode[2] = ' '; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- //SSID +- if (RTMPGetKeyParameter("SSID", tmpbuf, 256, pBuffer, FALSE)) +- { +- if (strlen(tmpbuf) <= 32) +- { +- pAd->CommonCfg.SsidLen = (UCHAR) strlen(tmpbuf); +- NdisZeroMemory(pAd->CommonCfg.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->CommonCfg.Ssid, tmpbuf, pAd->CommonCfg.SsidLen); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, tmpbuf, pAd->MlmeAux.AutoReconnectSsidLen); +- pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, tmpbuf, pAd->MlmeAux.SsidLen); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(SSID=%s)\n", __FUNCTION__, tmpbuf)); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- //NetworkType +- if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, pBuffer, TRUE)) +- { +- pAd->bConfigChanged = TRUE; +- if (strcmp(tmpbuf, "Adhoc") == 0) +- pAd->StaCfg.BssType = BSS_ADHOC; +- else //Default Infrastructure mode +- pAd->StaCfg.BssType = BSS_INFRA; +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAd->StaCfg.WpaState = SS_NOTUSE; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __FUNCTION__, pAd->StaCfg.BssType)); +- } +- } +-#ifdef RTMP_MAC_PCI +- //NewPCIePS +- if(RTMPGetKeyParameter("NewPCIePS", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; +- else +- pAd->StaCfg.PSControl.field.EnableNewPS=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("NewPCIePS=%d\n", pAd->StaCfg.PSControl.field.EnableNewPS)); +- } +-#endif // RTMP_MAC_PCI // +-#ifdef RT3090 +- //PCIePowerLevel +- +- if(RTMPGetKeyParameter("PCIePowerLevel", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->StaCfg.PSControl.field.rt30xxPowerMode = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("PCIePowerLevel=%d\n", pAd->StaCfg.PSControl.field.rt30xxPowerMode)); +- } +- //FollowHostASPM +- if(RTMPGetKeyParameter("FollowHostASPM", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=TRUE; +- else +- pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("rt30xxFollowHostASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM)); +- } +- //ForceTestASPM +- if(RTMPGetKeyParameter("ForceTestASPM", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=TRUE; +- else +- pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("rt30xxForceASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxForceASPMTest)); +- } +-#endif // RT3090 // +-#endif // CONFIG_STA_SUPPORT // +- //Channel +- if(RTMPGetKeyParameter("Channel", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("Channel=%d\n", pAd->CommonCfg.Channel)); +- } +- //WirelessMode +- if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, pBuffer, TRUE)) +- { +- RT_CfgSetWirelessMode(pAd, tmpbuf); +- DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode)); +- } +- //BasicRate +- if(RTMPGetKeyParameter("BasicRate", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.BasicRateBitmap = (ULONG) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BasicRate=%ld\n", pAd->CommonCfg.BasicRateBitmap)); +- } +- //BeaconPeriod +- if(RTMPGetKeyParameter("BeaconPeriod", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.BeaconPeriod = (USHORT) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconPeriod=%d\n", pAd->CommonCfg.BeaconPeriod)); +- } +- //TxPower +- if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10); +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage; +-#endif // CONFIG_STA_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage)); +- } +- //BGProtection +- if(RTMPGetKeyParameter("BGProtection", tmpbuf, 10, pBuffer, TRUE)) +- { +- //#if 0 //#ifndef WIFI_TEST +- // pAd->CommonCfg.UseBGProtection = 2;// disable b/g protection for throughput test +- //#else +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //Always On +- pAd->CommonCfg.UseBGProtection = 1; +- break; +- case 2: //Always OFF +- pAd->CommonCfg.UseBGProtection = 2; +- break; +- case 0: //AUTO +- default: +- pAd->CommonCfg.UseBGProtection = 0; +- break; +- } +- //#endif +- DBGPRINT(RT_DEBUG_TRACE, ("BGProtection=%ld\n", pAd->CommonCfg.UseBGProtection)); +- } +- //OLBCDetection +- if(RTMPGetKeyParameter("DisableOLBC", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //disable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 1; +- break; +- case 0: //enable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 0; +- break; +- default: +- pAd->CommonCfg.DisableOLBCDetect= 0; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("OLBCDetection=%ld\n", pAd->CommonCfg.DisableOLBCDetect)); +- } +- //TxPreamble +- if(RTMPGetKeyParameter("TxPreamble", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case Rt802_11PreambleShort: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleShort; +- break; +- case Rt802_11PreambleLong: +- default: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleLong; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("TxPreamble=%ld\n", pAd->CommonCfg.TxPreamble)); +- } +- //RTSThreshold +- if(RTMPGetKeyParameter("RTSThreshold", tmpbuf, 10, pBuffer, TRUE)) +- { +- RtsThresh = simple_strtol(tmpbuf, 0, 10); +- if( (RtsThresh >= 1) && (RtsThresh <= MAX_RTS_THRESHOLD) ) +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +- else +- pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTSThreshold=%d\n", pAd->CommonCfg.RtsThreshold)); +- } +- //FragThreshold +- if(RTMPGetKeyParameter("FragThreshold", tmpbuf, 10, pBuffer, TRUE)) +- { +- FragThresh = simple_strtol(tmpbuf, 0, 10); +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { //illegal FragThresh so we set it to default +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- } +- else if (FragThresh % 2 == 1) +- { +- // The length of each fragment shall always be an even number of octets, except for the last fragment +- // of an MSDU or MMPDU, which may be either an even or an odd number of octets. +- pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); +- } +- else +- { +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- //pAd->CommonCfg.AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; +- DBGPRINT(RT_DEBUG_TRACE, ("FragThreshold=%d\n", pAd->CommonCfg.FragmentThreshold)); +- } +- //TxBurst +- if(RTMPGetKeyParameter("TxBurst", tmpbuf, 10, pBuffer, TRUE)) +- { +- //#ifdef WIFI_TEST +- // pAd->CommonCfg.bEnableTxBurst = FALSE; +- //#else +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bEnableTxBurst = TRUE; +- else //Disable +- pAd->CommonCfg.bEnableTxBurst = FALSE; +- //#endif +- DBGPRINT(RT_DEBUG_TRACE, ("TxBurst=%d\n", pAd->CommonCfg.bEnableTxBurst)); +- } +- +-#ifdef AGGREGATION_SUPPORT +- //PktAggregate +- if(RTMPGetKeyParameter("PktAggregate", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAggregationCapable = TRUE; +- else //Disable +- pAd->CommonCfg.bAggregationCapable = FALSE; +-#ifdef PIGGYBACK_SUPPORT +- pAd->CommonCfg.bPiggyBackCapable = pAd->CommonCfg.bAggregationCapable; +-#endif // PIGGYBACK_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("PktAggregate=%d\n", pAd->CommonCfg.bAggregationCapable)); +- } +-#else +- pAd->CommonCfg.bAggregationCapable = FALSE; +- pAd->CommonCfg.bPiggyBackCapable = FALSE; +-#endif // AGGREGATION_SUPPORT // +- +- // WmmCapable +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, pBuffer); +-#endif // CONFIG_STA_SUPPORT // +- +- //ShortSlot +- if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, pBuffer, TRUE)) +- { +- RT_CfgSetShortSlot(pAd, tmpbuf); +- DBGPRINT(RT_DEBUG_TRACE, ("ShortSlot=%d\n", pAd->CommonCfg.bUseShortSlotTime)); +- } +- //IEEE80211H +- if(RTMPGetKeyParameter("IEEE80211H", tmpbuf, 10, pBuffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- if(simple_strtol(macptr, 0, 10) != 0) //Enable +- pAd->CommonCfg.bIEEE80211H = TRUE; +- else //Disable +- pAd->CommonCfg.bIEEE80211H = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IEEE80211H=%d\n", pAd->CommonCfg.bIEEE80211H)); +- } +- } +- //CSPeriod +- if(RTMPGetKeyParameter("CSPeriod", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.CSPeriod = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.RadarDetect.CSPeriod = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CSPeriod=%d\n", pAd->CommonCfg.RadarDetect.CSPeriod)); +- } +- +-#ifdef MERGE_ARCH_TEAM +- // DfsLowerLimit +- if(RTMPGetKeyParameter("DfsLowerLimit", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.DfsLowerLimit = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("DfsLowerLimit=%ld\n", pAd->CommonCfg.RadarDetect.DfsLowerLimit)); +- } +- +- // DfsUpperLimit +- if(RTMPGetKeyParameter("DfsUpperLimit", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.DfsUpperLimit = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("DfsUpperLimit=%ld\n", pAd->CommonCfg.RadarDetect.DfsUpperLimit)); +- } +- +- // FixDfsLimit +- if(RTMPGetKeyParameter("FixDfsLimit", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.FixDfsLimit = TRUE; +- else +- pAd->CommonCfg.RadarDetect.FixDfsLimit = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("FixDfsLimit=%d\n", pAd->CommonCfg.RadarDetect.FixDfsLimit)); +- } +- +- // LongPulseRadarTh +- if(RTMPGetKeyParameter("LongPulseRadarTh", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("LongPulseRadarTh=%d\n", pAd->CommonCfg.RadarDetect.LongPulseRadarTh)); +- } +- +- // AvgRssiReq +- if(RTMPGetKeyParameter("AvgRssiReq", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.AvgRssiReq = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AvgRssiReq=%d\n", pAd->CommonCfg.RadarDetect.AvgRssiReq)); +- } +- +-#endif // MERGE_ARCH_TEAM // +- +- //RDRegion +- if(RTMPGetKeyParameter("RDRegion", tmpbuf, 128, pBuffer, TRUE)) +- { +- RADAR_DETECT_STRUCT *pRadarDetect = &pAd->CommonCfg.RadarDetect; +- if ((strncmp(tmpbuf, "JAP_W53", 7) == 0) || (strncmp(tmpbuf, "jap_w53", 7) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP_W53; +- pRadarDetect->DfsSessionTime = 15; +- } +- else if ((strncmp(tmpbuf, "JAP_W56", 7) == 0) || (strncmp(tmpbuf, "jap_w56", 7) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP_W56; +- pRadarDetect->DfsSessionTime = 13; +- } +- else if ((strncmp(tmpbuf, "JAP", 3) == 0) || (strncmp(tmpbuf, "jap", 3) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP; +- pRadarDetect->DfsSessionTime = 5; +- } +- else if ((strncmp(tmpbuf, "FCC", 3) == 0) || (strncmp(tmpbuf, "fcc", 3) == 0)) +- { +- pRadarDetect->RDDurRegion = FCC; +- pRadarDetect->DfsSessionTime = 5; +-#ifdef DFS_FCC_BW40_FIX +- pRadarDetect->DfsSessionFccOff = 0; +-#endif // DFS_FCC_BW40_FIX // +- } +- else if ((strncmp(tmpbuf, "CE", 2) == 0) || (strncmp(tmpbuf, "ce", 2) == 0)) +- { +- pRadarDetect->RDDurRegion = CE; +- pRadarDetect->DfsSessionTime = 13; +- } +- else +- { +- pRadarDetect->RDDurRegion = CE; +- pRadarDetect->DfsSessionTime = 13; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("RDRegion=%d\n", pRadarDetect->RDDurRegion)); +- } +- else +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = CE; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- +- //WirelessEvent +- if(RTMPGetKeyParameter("WirelessEvent", tmpbuf, 10, pBuffer, TRUE)) +- { +-#if WIRELESS_EXT >= 15 +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWirelessEvent = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWirelessEvent = 0; // disable +-#else +- pAd->CommonCfg.bWirelessEvent = 0; // disable +-#endif +- DBGPRINT(RT_DEBUG_TRACE, ("WirelessEvent=%d\n", pAd->CommonCfg.bWirelessEvent)); +- } +- if(RTMPGetKeyParameter("WiFiTest", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWiFiTest= simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWiFiTest = 0; // disable +- +- DBGPRINT(RT_DEBUG_TRACE, ("WiFiTest=%d\n", pAd->CommonCfg.bWiFiTest)); +- } +- //AuthMode +- if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, pBuffer, TRUE)) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +- else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +-#ifdef WPA_SUPPLICANT_SUPPORT +- else if ((strcmp(tmpbuf, "WPA") == 0) || (strcmp(tmpbuf, "wpa") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +-#endif // WPA_SUPPLICANT_SUPPORT // +- else +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __FUNCTION__, pAd->StaCfg.WepStatus)); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- //EncrypType +- if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, pBuffer, TRUE)) +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- else if ((strcmp(tmpbuf, "TKIP") == 0) || (strcmp(tmpbuf, "tkip") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- else if ((strcmp(tmpbuf, "AES") == 0) || (strcmp(tmpbuf, "aes") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- else +- pAd->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- +- // Update all wepstatus related +- pAd->StaCfg.PairCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.GroupCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.OrigWepStatus = pAd->StaCfg.WepStatus; +- pAd->StaCfg.bMixCipher = FALSE; +- +- //RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __FUNCTION__, pAd->StaCfg.WepStatus)); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if(RTMPGetKeyParameter("WPAPSK", tmpbuf, 512, pBuffer, FALSE)) +- { +- int ret = TRUE; +- +- tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input +- +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- ) +- { +- ret = FALSE; +- } +- else +- { +- ret = RT_CfgSetWPAPSKKey(pAd, tmpbuf, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->StaCfg.PMK); +- } +- +- if (ret == TRUE) +- { +- RTMPZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- RTMPMoveMemory(pAd->StaCfg.WpaPassPhrase, tmpbuf, strlen(tmpbuf)); +- pAd->StaCfg.WpaPassPhraseLen= strlen(tmpbuf); +- +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // Start STA supplicant state machine +- pAd->StaCfg.WpaState = SS_START; +- } +- else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __FUNCTION__, tmpbuf)); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- //DefaultKeyID, KeyType, KeyStr +- rtmp_read_key_parms_from_file(pAd, tmpbuf, pBuffer); +- +- +- //HSCounter +- /*if(RTMPGetKeyParameter("HSCounter", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //Enable +- pAd->CommonCfg.bEnableHSCounter = TRUE; +- break; +- case 0: //Disable +- default: +- pAd->CommonCfg.bEnableHSCounter = FALSE; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, "HSCounter=%d\n", pAd->CommonCfg.bEnableHSCounter); +- }*/ +- +-#ifdef DOT11_N_SUPPORT +- HTParametersHook(pAd, tmpbuf, pBuffer); +-#endif // DOT11_N_SUPPORT // +- +- +-#ifdef CARRIER_DETECTION_SUPPORT +- //CarrierDetect +- if(RTMPGetKeyParameter("CarrierDetect", tmpbuf, 128, pBuffer, TRUE)) +- { +- if ((strncmp(tmpbuf, "0", 1) == 0)) +- pAd->CommonCfg.CarrierDetect.Enable = FALSE; +- else if ((strncmp(tmpbuf, "1", 1) == 0)) +- pAd->CommonCfg.CarrierDetect.Enable = TRUE; +- else +- pAd->CommonCfg.CarrierDetect.Enable = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CarrierDetect.Enable=%d\n", pAd->CommonCfg.CarrierDetect.Enable)); +- } +- else +- pAd->CommonCfg.CarrierDetect.Enable = FALSE; +-#endif // CARRIER_DETECTION_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- //PSMode +- if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, pBuffer, TRUE)) +- { +- if (pAd->StaCfg.BssType == BSS_INFRA) +- { +- if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsm(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.DefaultListenCount = 5; +- } +- else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) +- || (strcmp(tmpbuf, "FAST_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsmBit(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else if ((strcmp(tmpbuf, "Legacy_PSP") == 0) || (strcmp(tmpbuf, "legacy_psp") == 0) +- || (strcmp(tmpbuf, "LEGACY_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsmBit(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else +- { //Default Ndis802_11PowerModeCAM +- // clear PSM bit immediately +- RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode)); +- } +- } +- // AutoRoaming by RSSI +- if (RTMPGetKeyParameter("AutoRoaming", tmpbuf, 32, pBuffer, TRUE)) +- { +- if (simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bAutoRoaming = FALSE; +- else +- pAd->StaCfg.bAutoRoaming = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AutoRoaming=%d\n", pAd->StaCfg.bAutoRoaming)); +- } +- // RoamThreshold +- if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, pBuffer, TRUE)) +- { +- long lInfo = simple_strtol(tmpbuf, 0, 10); +- +- if (lInfo > 90 || lInfo < 60) +- pAd->StaCfg.dBmToRoam = -70; +- else +- pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); +- } +- +- if(RTMPGetKeyParameter("TGnWifiTest", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bTGnWifiTest = FALSE; +- else +- pAd->StaCfg.bTGnWifiTest = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest)); +- } +- +- // Beacon Lost Time +- if (RTMPGetKeyParameter("BeaconLostTime", tmpbuf, 32, pBuffer, TRUE)) +- { +- ULONG lInfo = (ULONG)simple_strtol(tmpbuf, 0, 10); +- +- if ((lInfo != 0) && (lInfo <= 60)) +- pAd->StaCfg.BeaconLostTime = (lInfo * OS_HZ); +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconLostTime=%ld \n", pAd->StaCfg.BeaconLostTime)); +- } +- +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if(RTMPGetKeyParameter("AntDiversity", tmpbuf, 10, pBuffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- UCHAR Ant = simple_strtol(tmpbuf, 0, 10); +- if(Ant < 3) +- pAd->CommonCfg.bRxAntDiversity = Ant; +- else +- pAd->CommonCfg.bRxAntDiversity = ANT_DIVERSITY_DISABLE; +- +- DBGPRINT(RT_DEBUG_ERROR, ("AntDiversity=%d\n", pAd->CommonCfg.bRxAntDiversity)); +- } +- } +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- }while(0); +- +- +- kfree(tmpbuf); +- +- return NDIS_STATUS_SUCCESS; +- +-} +- +- +-#ifdef MULTIPLE_CARD_SUPPORT +-// record whether the card in the card list is used in the card file +-UINT8 MC_CardUsed[MAX_NUM_OF_MULTIPLE_CARD]; +-// record used card mac address in the card list +-static UINT8 MC_CardMac[MAX_NUM_OF_MULTIPLE_CARD][6]; +- +-/* +-======================================================================== +-Routine Description: +- Get card profile path. +- +-Arguments: +- pAd +- +-Return Value: +- TRUE - Find a card profile +- FALSE - use default profile +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RTMP_CardInfoRead( +- IN PRTMP_ADAPTER pAd) +-{ +-#define MC_SELECT_CARDID 0 /* use CARD ID (0 ~ 31) to identify different cards */ +-#define MC_SELECT_MAC 1 /* use CARD MAC to identify different cards */ +-#define MC_SELECT_CARDTYPE 2 /* use CARD type (abgn or bgn) to identify different cards */ +- +-#define LETTER_CASE_TRANSLATE(txt_p, card_id) \ +- { UINT32 _len; char _char; \ +- for(_len=0; _lenEEPROMAddressNum = 6; // 93C46 +- else if ((data & 0x30) == 0x10) +- pAd->EEPROMAddressNum = 8; // 93C66 +- else +- pAd->EEPROMAddressNum = 8; // 93C86 +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, antenna.word); +- +- if ((antenna.field.RfIcType == RFIC_2850) || +- (antenna.field.RfIcType == RFIC_2750)) +- { +- /* ABGN card */ +- strcpy(RFIC_word, "abgn"); +- } +- else +- { +- /* BGN card */ +- strcpy(RFIC_word, "bgn"); +- } +- +- // get MAC address +- RT28xx_EEPROM_READ16(pAd, 0x04, addr01); +- RT28xx_EEPROM_READ16(pAd, 0x06, addr23); +- RT28xx_EEPROM_READ16(pAd, 0x08, addr45); +- +- mac[0] = (UCHAR)(addr01 & 0xff); +- mac[1] = (UCHAR)(addr01 >> 8); +- mac[2] = (UCHAR)(addr23 & 0xff); +- mac[3] = (UCHAR)(addr23 >> 8); +- mac[4] = (UCHAR)(addr45 & 0xff); +- mac[5] = (UCHAR)(addr45 >> 8); +- +- DBGPRINT(RT_DEBUG_TRACE, ("mac addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", PRINT_MAC(mac))); +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- // open card information file +- srcf = RtmpOSFileOpen(CARD_INFO_PATH, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- /* card information file does not exist */ +- DBGPRINT(RT_DEBUG_TRACE, +- ("--> Error opening %s\n", CARD_INFO_PATH)); +- goto free_resource; +- } +- +- /* card information file exists so reading the card information */ +- memset(buffer, 0x00, MAX_INI_BUFFER_SIZE); +- retval = RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE); +- if (retval < 0) +- { +- /* read fail */ +- DBGPRINT(RT_DEBUG_TRACE, +- ("--> Read %s error %d\n", CARD_INFO_PATH, -retval)); +- } +- else +- { +- /* get card selection method */ +- memset(tmpbuf, 0x00, MAX_PARAM_BUFFER_SIZE); +- card_select_method = MC_SELECT_CARDTYPE; // default +- +- if (RTMPGetKeyParameter("SELECT", tmpbuf, 256, buffer, TRUE)) +- { +- if (strcmp(tmpbuf, "CARDID") == 0) +- card_select_method = MC_SELECT_CARDID; +- else if (strcmp(tmpbuf, "MAC") == 0) +- card_select_method = MC_SELECT_MAC; +- else if (strcmp(tmpbuf, "CARDTYPE") == 0) +- card_select_method = MC_SELECT_CARDTYPE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, +- ("MC> Card Selection = %d\n", card_select_method)); +- +- // init +- card_free_id = -1; +- card_nouse_id = -1; +- card_same_mac_id = -1; +- card_match_id = -1; +- +- // search current card information records +- for(card_index=0; +- card_index Free = %d, Same = %d, NOUSE = %d\n", +- card_free_id, card_same_mac_id, card_nouse_id)); +- +- if ((card_same_mac_id >= 0) && +- ((card_select_method == MC_SELECT_CARDID) || +- (card_select_method == MC_SELECT_CARDTYPE))) +- { +- // same MAC entry is found +- card_match_id = card_same_mac_id; +- +- if (card_select_method == MC_SELECT_CARDTYPE) +- { +- // for CARDTYPE +- sprintf(card_id_buf, "%02dCARDTYPE%s", +- card_match_id, RFIC_word); +- +- if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer, card_id_buf)) != NULL) +- { +- // we found the card ID +- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf); +- } +- } +- } +- else +- { +- // the card is 1st plug-in, try to find the match card profile +- switch(card_select_method) +- { +- case MC_SELECT_CARDID: // CARDID +- default: +- if (card_free_id >= 0) +- card_match_id = card_free_id; +- else +- card_match_id = card_nouse_id; +- break; +- +- case MC_SELECT_MAC: // MAC +- sprintf(card_id_buf, "MAC%02x:%02x:%02x:%02x:%02x:%02x", +- mac[0], mac[1], mac[2], +- mac[3], mac[4], mac[5]); +- +- /* try to find the key word in the card file */ +- if ((start_ptr = (PUCHAR)rtstrstruncasecmp(buffer, card_id_buf)) != NULL) +- { +- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf); +- +- /* get the row ID (2 ASCII characters) */ +- start_ptr -= 2; +- card_id_buf[0] = *(start_ptr); +- card_id_buf[1] = *(start_ptr+1); +- card_id_buf[2] = 0x00; +- +- card_match_id = simple_strtol(card_id_buf, 0, 10); +- } +- break; +- +- case MC_SELECT_CARDTYPE: // CARDTYPE +- card_nouse_id = -1; +- +- for(card_index=0; +- card_index= 0) +- { +- // make up search keyword +- switch(card_select_method) +- { +- case MC_SELECT_CARDID: // CARDID +- sprintf(card_id_buf, "%02dCARDID", card_match_id); +- break; +- +- case MC_SELECT_MAC: // MAC +- sprintf(card_id_buf, +- "%02dmac%02x:%02x:%02x:%02x:%02x:%02x", +- card_match_id, +- mac[0], mac[1], mac[2], +- mac[3], mac[4], mac[5]); +- break; +- +- case MC_SELECT_CARDTYPE: // CARDTYPE +- default: +- sprintf(card_id_buf, "%02dcardtype%s", +- card_match_id, RFIC_word); +- break; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Search Keyword = %s\n", card_id_buf)); +- +- // read card file path +- if (RTMPGetKeyParameter(card_id_buf, tmpbuf, 256, buffer, TRUE)) +- { +- if (strlen(tmpbuf) < sizeof(pAd->MC_FileName)) +- { +- // backup card information +- pAd->MC_RowID = card_match_id; /* base 0 */ +- MC_CardUsed[card_match_id] = 1; +- memcpy(MC_CardMac[card_match_id], mac, sizeof(mac)); +- +- // backup card file path +- NdisMoveMemory(pAd->MC_FileName, tmpbuf , strlen(tmpbuf)); +- pAd->MC_FileName[strlen(tmpbuf)] = '\0'; +- flg_match_ok = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, +- ("Card Profile Name = %s\n", pAd->MC_FileName)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, +- ("Card Profile Name length too large!\n")); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, +- ("Can not find search key word in card.dat!\n")); +- } +- +- if ((flg_match_ok != TRUE) && +- (card_match_id < MAX_NUM_OF_MULTIPLE_CARD)) +- { +- MC_CardUsed[card_match_id] = 0; +- memset(MC_CardMac[card_match_id], 0, sizeof(mac)); +- } +- } // if (card_match_id >= 0) +- } +- +- +- // close file +- retval = RtmpOSFileClose(srcf); +- +-free_resource: +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- kfree(buffer); +- kfree(tmpbuf); +- +- return flg_match_ok; +-} +-#endif // MULTIPLE_CARD_SUPPORT // +diff --git a/drivers/staging/rt3090/common/cmm_sanity.c b/drivers/staging/rt3090/common/cmm_sanity.c +deleted file mode 100644 +index de631c3..0000000 +--- a/drivers/staging/rt3090/common/cmm_sanity.c ++++ /dev/null +@@ -1,1718 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- sanity.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2004-09-01 add WMM support +-*/ +- +-#include "../rt_config.h" +- +- +-extern UCHAR CISCO_OUI[]; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; +-extern UCHAR WPS_OUI[]; +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN MlmeAddBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2) +-{ +- PMLME_ADDBA_REQ_STRUCT pInfo; +- +- pInfo = (MLME_ADDBA_REQ_STRUCT *)Msg; +- +- if ((MsgLen != sizeof(MLME_ADDBA_REQ_STRUCT))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - message lenght not correct.\n")); +- return FALSE; +- } +- +- if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - The peer Mac is not associated yet.\n")); +- return FALSE; +- } +- +- /* +- if ((pInfo->BaBufSize > MAX_RX_REORDERBUF) || (pInfo->BaBufSize < 2)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - Rx Reordering buffer too big or too small\n")); +- return FALSE; +- } +- */ +- +- if ((pInfo->pAddr[0]&0x01) == 0x01) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - broadcast address not support BA\n")); +- return FALSE; +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN MlmeDelBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen) +-{ +- MLME_DELBA_REQ_STRUCT *pInfo; +- pInfo = (MLME_DELBA_REQ_STRUCT *)Msg; +- +- if ((MsgLen != sizeof(MLME_DELBA_REQ_STRUCT))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - message lenght not correct.\n")); +- return FALSE; +- } +- +- if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - The peer Mac is not associated yet.\n")); +- return FALSE; +- } +- +- if ((pInfo->TID & 0xf0)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - The peer TID is incorrect.\n")); +- return FALSE; +- } +- +- if (NdisEqualMemory(pAd->MacTab.Content[pInfo->Wcid].Addr, pInfo->Addr, MAC_ADDR_LEN) == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - the peer addr dosen't exist.\n")); +- return FALSE; +- } +- +- return TRUE; +-} +- +-BOOLEAN PeerAddBAReqActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2) +-{ +- PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PFRAME_ADDBA_REQ pAddFrame; +- pAddFrame = (PFRAME_ADDBA_REQ)(pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_REQ))) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request frame length size = %ld incorrect\n", MsgLen)); +- return FALSE; +- } +- // we support immediate BA. +-#ifdef UNALIGNMENT_SUPPORT +- { +- BA_PARM tmpBaParm; +- +- NdisMoveMemory((PUCHAR)(&tmpBaParm), (PUCHAR)(&pAddFrame->BaParm), sizeof(BA_PARM)); +- *(USHORT *)(&tmpBaParm) = cpu2le16(*(USHORT *)(&tmpBaParm)); +- NdisMoveMemory((PUCHAR)(&pAddFrame->BaParm), (PUCHAR)(&tmpBaParm), sizeof(BA_PARM)); +- } +-#else +- *(USHORT *)(&pAddFrame->BaParm) = cpu2le16(*(USHORT *)(&pAddFrame->BaParm)); +-#endif +- pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); +- pAddFrame->BaStartSeq.word = cpu2le16(pAddFrame->BaStartSeq.word); +- +- if (pAddFrame->BaParm.BAPolicy != IMMED_BA) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request Ba Policy[%d] not support\n", pAddFrame->BaParm.BAPolicy)); +- DBGPRINT(RT_DEBUG_ERROR,("ADDBA Request. tid=%x, Bufsize=%x, AMSDUSupported=%x \n", pAddFrame->BaParm.TID, pAddFrame->BaParm.BufSize, pAddFrame->BaParm.AMSDUSupported)); +- return FALSE; +- } +- +- // we support immediate BA. +- if (pAddFrame->BaParm.TID &0xfff0) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request incorrect TID = %d\n", pAddFrame->BaParm.TID)); +- return FALSE; +- } +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- return TRUE; +-} +- +-BOOLEAN PeerAddBARspActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen) +-{ +- //PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PFRAME_ADDBA_RSP pAddFrame; +- +- pAddFrame = (PFRAME_ADDBA_RSP)(pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_RSP))) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBARspActionSanity: ADDBA Response frame length size = %ld incorrect\n", MsgLen)); +- return FALSE; +- } +- // we support immediate BA. +-#ifdef UNALIGNMENT_SUPPORT +- { +- BA_PARM tmpBaParm; +- +- NdisMoveMemory((PUCHAR)(&tmpBaParm), (PUCHAR)(&pAddFrame->BaParm), sizeof(BA_PARM)); +- *(USHORT *)(&tmpBaParm) = cpu2le16(*(USHORT *)(&tmpBaParm)); +- NdisMoveMemory((PUCHAR)(&pAddFrame->BaParm), (PUCHAR)(&tmpBaParm), sizeof(BA_PARM)); +- } +-#else +- *(USHORT *)(&pAddFrame->BaParm) = cpu2le16(*(USHORT *)(&pAddFrame->BaParm)); +-#endif +- pAddFrame->StatusCode = cpu2le16(pAddFrame->StatusCode); +- pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); +- +- if (pAddFrame->BaParm.BAPolicy != IMMED_BA) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Response Ba Policy[%d] not support\n", pAddFrame->BaParm.BAPolicy)); +- return FALSE; +- } +- +- // we support immediate BA. +- if (pAddFrame->BaParm.TID &0xfff0) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBARspActionSanity: ADDBA Response incorrect TID = %d\n", pAddFrame->BaParm.TID)); +- return FALSE; +- } +- return TRUE; +- +-} +- +-BOOLEAN PeerDelBAActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN VOID *pMsg, +- IN ULONG MsgLen ) +-{ +- //PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PFRAME_DELBA_REQ pDelFrame; +- if (MsgLen != (sizeof(FRAME_DELBA_REQ))) +- return FALSE; +- +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- return FALSE; +- +- pDelFrame = (PFRAME_DELBA_REQ)(pMsg); +- +- *(USHORT *)(&pDelFrame->DelbaParm) = cpu2le16(*(USHORT *)(&pDelFrame->DelbaParm)); +- pDelFrame->ReasonCode = cpu2le16(pDelFrame->ReasonCode); +- +- if (pDelFrame->DelbaParm.TID &0xfff0) +- return FALSE; +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerBeaconAndProbeRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- IN UCHAR MsgChannel, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pBssType, +- OUT USHORT *pBeaconPeriod, +- OUT UCHAR *pChannel, +- OUT UCHAR *pNewChannel, +- OUT LARGE_INTEGER *pTimestamp, +- OUT CF_PARM *pCfParm, +- OUT USHORT *pAtimWin, +- OUT USHORT *pCapabilityInfo, +- OUT UCHAR *pErp, +- OUT UCHAR *pDtimCount, +- OUT UCHAR *pDtimPeriod, +- OUT UCHAR *pBcastFlag, +- OUT UCHAR *pMessageToMe, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT UCHAR *pCkipFlag, +- OUT UCHAR *pAironetCellPowerLimit, +- OUT PEDCA_PARM pEdcaParm, +- OUT PQBSS_LOAD_PARM pQbssLoad, +- OUT PQOS_CAPABILITY_PARM pQosCapability, +- OUT ULONG *pRalinkIe, +- OUT UCHAR *pHtCapabilityLen, +-#ifdef CONFIG_STA_SUPPORT +- OUT UCHAR *pPreNHtCapabilityLen, +-#endif // CONFIG_STA_SUPPORT // +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT UCHAR *AddHtInfoLen, +- OUT ADD_HT_INFO_IE *AddHtInfo, +- OUT UCHAR *NewExtChannelOffset, // Ht extension channel offset(above or below) +- OUT USHORT *LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE) +-{ +- UCHAR *Ptr; +-#ifdef CONFIG_STA_SUPPORT +- UCHAR TimLen; +-#endif // CONFIG_STA_SUPPORT // +- PFRAME_802_11 pFrame; +- PEID_STRUCT pEid; +- UCHAR SubType; +- UCHAR Sanity; +- //UCHAR ECWMin, ECWMax; +- //MAC_CSR9_STRUC Csr9; +- ULONG Length = 0; +- +- // For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel +- // 1. If the AP is 11n enabled, then check the control channel. +- // 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) +- UCHAR CtrlChannel = 0; +- +- // Add for 3 necessary EID field check +- Sanity = 0; +- +- *pAtimWin = 0; +- *pErp = 0; +- *pDtimCount = 0; +- *pDtimPeriod = 0; +- *pBcastFlag = 0; +- *pMessageToMe = 0; +- *pExtRateLen = 0; +- *pCkipFlag = 0; // Default of CkipFlag is 0 +- *pAironetCellPowerLimit = 0xFF; // Default of AironetCellPowerLimit is 0xFF +- *LengthVIE = 0; // Set the length of VIE to init value 0 +- *pHtCapabilityLen = 0; // Set the length of VIE to init value 0 +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- *pPreNHtCapabilityLen = 0; // Set the length of VIE to init value 0 +-#endif // CONFIG_STA_SUPPORT // +- *AddHtInfoLen = 0; // Set the length of VIE to init value 0 +- *pRalinkIe = 0; +- *pNewChannel = 0; +- *NewExtChannelOffset = 0xff; //Default 0xff means no such IE +- pCfParm->bValid = FALSE; // default: no IE_CF found +- pQbssLoad->bValid = FALSE; // default: no IE_QBSS_LOAD found +- pEdcaParm->bValid = FALSE; // default: no IE_EDCA_PARAMETER found +- pQosCapability->bValid = FALSE; // default: no IE_QOS_CAPABILITY found +- +- pFrame = (PFRAME_802_11)Msg; +- +- // get subtype from header +- SubType = (UCHAR)pFrame->Hdr.FC.SubType; +- +- // get Addr2 and BSSID from header +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- COPY_MAC_ADDR(pBssid, pFrame->Hdr.Addr3); +- +-// hex_dump("Beacon", Msg, MsgLen); +- +- Ptr = pFrame->Octet; +- Length += LENGTH_802_11; +- +- // get timestamp from payload and advance the pointer +- NdisMoveMemory(pTimestamp, Ptr, TIMESTAMP_LEN); +- +- pTimestamp->u.LowPart = cpu2le32(pTimestamp->u.LowPart); +- pTimestamp->u.HighPart = cpu2le32(pTimestamp->u.HighPart); +- +- Ptr += TIMESTAMP_LEN; +- Length += TIMESTAMP_LEN; +- +- // get beacon interval from payload and advance the pointer +- NdisMoveMemory(pBeaconPeriod, Ptr, 2); +- Ptr += 2; +- Length += 2; +- +- // get capability info from payload and advance the pointer +- NdisMoveMemory(pCapabilityInfo, Ptr, 2); +- Ptr += 2; +- Length += 2; +- +- if (CAP_IS_ESS_ON(*pCapabilityInfo)) +- *pBssType = BSS_INFRA; +- else +- *pBssType = BSS_ADHOC; +- +- pEid = (PEID_STRUCT) Ptr; +- +- // get variable fields from payload and advance the pointer +- while ((Length + 2 + pEid->Len) <= MsgLen) +- { +- // +- // Secure copy VIE to VarIE[MAX_VIE_LEN] didn't overflow. +- // +- if ((*LengthVIE + pEid->Len + 2) >= MAX_VIE_LEN) +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - Variable IEs out of resource [len(=%d) > MAX_VIE_LEN(=%d)]\n", +- (*LengthVIE + pEid->Len + 2), MAX_VIE_LEN)); +- break; +- } +- +- switch(pEid->Eid) +- { +- case IE_SSID: +- // Already has one SSID EID in this beacon, ignore the second one +- if (Sanity & 0x1) +- break; +- if(pEid->Len <= MAX_LEN_OF_SSID) +- { +- NdisMoveMemory(Ssid, pEid->Octet, pEid->Len); +- *pSsidLen = pEid->Len; +- Sanity |= 0x1; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_SUPP_RATES: +- if(pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- Sanity |= 0x2; +- NdisMoveMemory(SupRate, pEid->Octet, pEid->Len); +- *pSupRateLen = pEid->Len; +- +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, SupRate, pSupRateLen); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_HT_CAP: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! +- { +- NdisMoveMemory(pHtCapability, pEid->Octet, sizeof(HT_CAPABILITY_IE)); +- *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. +- +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +-#ifdef UNALIGNMENT_SUPPORT +- { +- EXT_HT_CAP_INFO extHtCapInfo; +- NdisMoveMemory((PUCHAR)(&extHtCapInfo), (PUCHAR)(&pHtCapability->ExtHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- *(USHORT *)(&extHtCapInfo) = cpu2le16(*(USHORT *)(&extHtCapInfo)); +- NdisMoveMemory((PUCHAR)(&pHtCapability->ExtHtCapInfo), (PUCHAR)(&extHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- } +-#else +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); +-#endif // UNALIGNMENT_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- *pPreNHtCapabilityLen = 0; // Now we only support 26 bytes. +- +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_HT_CAP. pEid->Len = %d\n", pEid->Len)); +- } +- +- break; +- case IE_ADD_HT: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) +- { +- // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only +- // copy first sizeof(ADD_HT_INFO_IE) +- NdisMoveMemory(AddHtInfo, pEid->Octet, sizeof(ADD_HT_INFO_IE)); +- *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; +- +- CtrlChannel = AddHtInfo->ControlChan; +- +- *(USHORT *)(&AddHtInfo->AddHtInfo2) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo2)); +- *(USHORT *)(&AddHtInfo->AddHtInfo3) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo3)); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_ADD_HT. \n")); +- } +- +- break; +- case IE_SECONDARY_CH_OFFSET: +- if (pEid->Len == 1) +- { +- *NewExtChannelOffset = pEid->Octet[0]; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); +- } +- +- break; +- case IE_FH_PARM: +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n")); +- break; +- +- case IE_DS_PARM: +- if(pEid->Len == 1) +- { +- *pChannel = *pEid->Octet; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (ChannelSanity(pAd, *pChannel) == 0) +- { +- +- return FALSE; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- Sanity |= 0x4; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_CF_PARM: +- if(pEid->Len == 6) +- { +- pCfParm->bValid = TRUE; +- pCfParm->CfpCount = pEid->Octet[0]; +- pCfParm->CfpPeriod = pEid->Octet[1]; +- pCfParm->CfpMaxDuration = pEid->Octet[2] + 256 * pEid->Octet[3]; +- pCfParm->CfpDurRemaining = pEid->Octet[4] + 256 * pEid->Octet[5]; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n")); +- return FALSE; +- } +- break; +- +- case IE_IBSS_PARM: +- if(pEid->Len == 2) +- { +- NdisMoveMemory(pAtimWin, pEid->Octet, pEid->Len); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n")); +- return FALSE; +- } +- break; +- +-#ifdef CONFIG_STA_SUPPORT +- case IE_TIM: +- if(INFRA_ON(pAd) && SubType == SUBTYPE_BEACON) +- { +- GetTimBit((PCHAR)pEid, pAd->StaActive.Aid, &TimLen, pBcastFlag, pDtimCount, pDtimPeriod, pMessageToMe); +- } +- break; +-#endif // CONFIG_STA_SUPPORT // +- case IE_CHANNEL_SWITCH_ANNOUNCEMENT: +- if(pEid->Len == 3) +- { +- *pNewChannel = pEid->Octet[1]; //extract new channel number +- } +- break; +- +- // New for WPA +- // CCX v2 has the same IE, we need to parse that too +- // Wifi WMM use the same IE vale, need to parse that too +- // case IE_WPA: +- case IE_VENDOR_SPECIFIC: +- // Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. +- /*if (NdisEqualMemory(pEid->Octet, BROADCOM_OUI, 3) && (pEid->Len >= 4)) +- { +- if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) +- { +- { +- NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); +- *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. +- } +- } +- if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 26)) +- { +- { +- NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); +- *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; // Nnow we only support 26 bytes. +- } +- } +- } +- */ +- // Check the OUI version, filter out non-standard usage +- if (NdisEqualMemory(pEid->Octet, RALINK_OUI, 3) && (pEid->Len == 7)) +- { +- //*pRalinkIe = pEid->Octet[3]; +- if (pEid->Octet[3] != 0) +- *pRalinkIe = pEid->Octet[3]; +- else +- *pRalinkIe = 0xf0000000; // Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag. +- } +-#ifdef CONFIG_STA_SUPPORT +-#ifdef DOT11_N_SUPPORT +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. +- +- // Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP, +- // Check broadcom-defiend pre-802.11nD1.0 OUI for HT related IE, including HT Capatilities IE and HT Information IE +- else if ((*pHtCapabilityLen == 0) && NdisEqualMemory(pEid->Octet, PRE_N_HT_OUI, 3) && (pEid->Len >= 4) && (pAd->OpMode == OPMODE_STA)) +- { +- if ((pEid->Octet[3] == OUI_PREN_HT_CAP) && (pEid->Len >= 30) && (*pHtCapabilityLen == 0)) +- { +- NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); +- *pPreNHtCapabilityLen = SIZE_HT_CAP_IE; +- } +- +- if ((pEid->Octet[3] == OUI_PREN_ADD_HT) && (pEid->Len >= 26)) +- { +- NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); +- *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; +- } +- } +-#endif // DOT11_N_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- { +- // Copy to pVIE which will report to microsoft bssid list. +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +- else if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) && (pEid->Len == 24)) +- { +- PUCHAR ptr; +- int i; +- +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = &pEid->Octet[8]; +- for (i=0; i<4; i++) +- { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr+1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr+1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr+2) + 256 * (*(ptr+3)); // in unit of 32-us +- ptr += 4; // point to next AC +- } +- } +- else if (NdisEqualMemory(pEid->Octet, WME_INFO_ELEM, 6) && (pEid->Len == 7)) +- { +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- +- // use default EDCA parameter +- pEdcaParm->bACM[QID_AC_BE] = 0; +- pEdcaParm->Aifsn[QID_AC_BE] = 3; +- pEdcaParm->Cwmin[QID_AC_BE] = CW_MIN_IN_BITS; +- pEdcaParm->Cwmax[QID_AC_BE] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_BE] = 0; +- +- pEdcaParm->bACM[QID_AC_BK] = 0; +- pEdcaParm->Aifsn[QID_AC_BK] = 7; +- pEdcaParm->Cwmin[QID_AC_BK] = CW_MIN_IN_BITS; +- pEdcaParm->Cwmax[QID_AC_BK] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_BK] = 0; +- +- pEdcaParm->bACM[QID_AC_VI] = 0; +- pEdcaParm->Aifsn[QID_AC_VI] = 2; +- pEdcaParm->Cwmin[QID_AC_VI] = CW_MIN_IN_BITS-1; +- pEdcaParm->Cwmax[QID_AC_VI] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_VI] = 96; // AC_VI: 96*32us ~= 3ms +- +- pEdcaParm->bACM[QID_AC_VO] = 0; +- pEdcaParm->Aifsn[QID_AC_VO] = 2; +- pEdcaParm->Cwmin[QID_AC_VO] = CW_MIN_IN_BITS-2; +- pEdcaParm->Cwmax[QID_AC_VO] = CW_MAX_IN_BITS-1; +- pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms +- } +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- +- break; +- +- case IE_EXT_SUPP_RATES: +- if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); +- *pExtRateLen = pEid->Len; +- +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, ExtRate, pExtRateLen); +- } +- break; +- +- case IE_ERP: +- if (pEid->Len == 1) +- { +- *pErp = (UCHAR)pEid->Octet[0]; +- } +- break; +- +- case IE_AIRONET_CKIP: +- // 0. Check Aironet IE length, it must be larger or equal to 28 +- // Cisco AP350 used length as 28 +- // Cisco AP12XX used length as 30 +- if (pEid->Len < (CKIP_NEGOTIATION_LENGTH - 2)) +- break; +- +- // 1. Copy CKIP flag byte to buffer for process +- *pCkipFlag = *(pEid->Octet + 8); +- break; +- +- case IE_AP_TX_POWER: +- // AP Control of Client Transmit Power +- //0. Check Aironet IE length, it must be 6 +- if (pEid->Len != 0x06) +- break; +- +- // Get cell power limit in dBm +- if (NdisEqualMemory(pEid->Octet, CISCO_OUI, 3) == 1) +- *pAironetCellPowerLimit = *(pEid->Octet + 4); +- break; +- +- // WPA2 & 802.11i RSN +- case IE_RSN: +- // There is no OUI for version anymore, check the group cipher OUI before copying +- if (RTMPEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- { +- // Copy to pVIE which will report to microsoft bssid list. +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +- break; +-#ifdef CONFIG_STA_SUPPORT +-#ifdef EXT_BUILD_CHANNEL_LIST +- case IE_COUNTRY: +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- break; +-#endif // EXT_BUILD_CHANNEL_LIST // +-#endif // CONFIG_STA_SUPPORT // +- +- +- default: +- break; +- } +- +- Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len] +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- +- // For some 11a AP. it did not have the channel EID, patch here +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- UCHAR LatchRfChannel = MsgChannel; +- if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0)) +- { +- if (CtrlChannel != 0) +- *pChannel = CtrlChannel; +- else +- *pChannel = LatchRfChannel; +- Sanity |= 0x4; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- if (Sanity != 0x7) +- { +- DBGPRINT(RT_DEBUG_LOUD, ("PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity)); +- return FALSE; +- } +- else +- { +- return TRUE; +- } +- +-} +- +-#ifdef DOT11N_DRAFT3 +-/* +- ========================================================================== +- Description: +- MLME message sanity check for some IE addressed in 802.11n d3.03. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerBeaconAndProbeRspSanity2( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT UCHAR *RegClass) +-{ +- CHAR *Ptr; +- PFRAME_802_11 pFrame; +- PEID_STRUCT pEid; +- ULONG Length = 0; +- +- pFrame = (PFRAME_802_11)Msg; +- +- *RegClass = 0; +- Ptr = (PCHAR) pFrame->Octet; +- Length += LENGTH_802_11; +- +- // get timestamp from payload and advance the pointer +- Ptr += TIMESTAMP_LEN; +- Length += TIMESTAMP_LEN; +- +- // get beacon interval from payload and advance the pointer +- Ptr += 2; +- Length += 2; +- +- // get capability info from payload and advance the pointer +- Ptr += 2; +- Length += 2; +- +- pEid = (PEID_STRUCT) Ptr; +- +- // get variable fields from payload and advance the pointer +- while ((Length + 2 + pEid->Len) <= MsgLen) +- { +- switch(pEid->Eid) +- { +- case IE_SUPP_REG_CLASS: +- if(pEid->Len > 0) +- { +- *RegClass = *pEid->Octet; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- } +- +- Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len] +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- +- return TRUE; +- +-} +-#endif // DOT11N_DRAFT3 // +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +- */ +-BOOLEAN MlmeScanReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT UCHAR *pBssType, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pScanType) +-{ +- MLME_SCAN_REQ_STRUCT *Info; +- +- Info = (MLME_SCAN_REQ_STRUCT *)(Msg); +- *pBssType = Info->BssType; +- *pSsidLen = Info->SsidLen; +- NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); +- *pScanType = Info->ScanType; +- +- if ((*pBssType == BSS_INFRA || *pBssType == BSS_ADHOC || *pBssType == BSS_ANY) +- && (*pScanType == SCAN_ACTIVE || *pScanType == SCAN_PASSIVE +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- )) +- { +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqSanity fail - wrong BssType or ScanType\n")); +- return FALSE; +- } +-} +- +-// IRQL = DISPATCH_LEVEL +-UCHAR ChannelSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) +-{ +- int i; +- +- for (i = 0; i < pAd->ChannelListNum; i ++) +- { +- if (channel == pAd->ChannelList[i].Channel) +- return 1; +- } +- return 0; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerDeauthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pReason) +-{ +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- NdisMoveMemory(pReason, &pFrame->Octet[0], 2); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerAuthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT *pAlg, +- OUT USHORT *pSeq, +- OUT USHORT *pStatus, +- CHAR *pChlgText) +-{ +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr, pFrame->Hdr.Addr2); +- NdisMoveMemory(pAlg, &pFrame->Octet[0], 2); +- NdisMoveMemory(pSeq, &pFrame->Octet[2], 2); +- NdisMoveMemory(pStatus, &pFrame->Octet[4], 2); +- +- if (*pAlg == AUTH_MODE_OPEN) +- { +- if (*pSeq == 1 || *pSeq == 2) +- { +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong Seg#\n")); +- return FALSE; +- } +- } +- else if (*pAlg == AUTH_MODE_KEY) +- { +- if (*pSeq == 1 || *pSeq == 4) +- { +- return TRUE; +- } +- else if (*pSeq == 2 || *pSeq == 3) +- { +- NdisMoveMemory(pChlgText, &pFrame->Octet[8], CIPHER_TEXT_LEN); +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong Seg#\n")); +- return FALSE; +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong algorithm\n")); +- return FALSE; +- } +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +- */ +-BOOLEAN MlmeAuthReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG *pTimeout, +- OUT USHORT *pAlg) +-{ +- MLME_AUTH_REQ_STRUCT *pInfo; +- +- pInfo = (MLME_AUTH_REQ_STRUCT *)Msg; +- COPY_MAC_ADDR(pAddr, pInfo->Addr); +- *pTimeout = pInfo->Timeout; +- *pAlg = pInfo->Alg; +- +- if (((*pAlg == AUTH_MODE_KEY) ||(*pAlg == AUTH_MODE_OPEN) +- ) && +- ((*pAddr & 0x01) == 0)) +- { +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAuthReqSanity fail - wrong algorithm\n")); +- return FALSE; +- } +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN MlmeAssocReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT *pCapabilityInfo, +- OUT ULONG *pTimeout, +- OUT USHORT *pListenIntv) +-{ +- MLME_ASSOC_REQ_STRUCT *pInfo; +- +- pInfo = (MLME_ASSOC_REQ_STRUCT *)Msg; +- *pTimeout = pInfo->Timeout; // timeout +- COPY_MAC_ADDR(pApAddr, pInfo->Addr); // AP address +- *pCapabilityInfo = pInfo->CapabilityInfo; // capability info +- *pListenIntv = pInfo->ListenIntv; +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerDisassocSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pReason) +-{ +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- NdisMoveMemory(pReason, &pFrame->Octet[0], 2); +- +- return TRUE; +-} +- +-/* +- ======================================================================== +- Routine Description: +- Sanity check NetworkType (11b, 11g or 11a) +- +- Arguments: +- pBss - Pointer to BSS table. +- +- Return Value: +- Ndis802_11DS .......(11b) +- Ndis802_11OFDM24....(11g) +- Ndis802_11OFDM5.....(11a) +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( +- IN PBSS_ENTRY pBss) +-{ +- NDIS_802_11_NETWORK_TYPE NetWorkType; +- UCHAR rate, i; +- +- NetWorkType = Ndis802_11DS; +- +- if (pBss->Channel <= 14) +- { +- // +- // First check support Rate. +- // +- for (i = 0; i < pBss->SupRateLen; i++) +- { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit +- if ((rate == 2) || (rate == 4) || (rate == 11) || (rate == 22)) +- { +- continue; +- } +- else +- { +- // +- // Otherwise (even rate > 108) means Ndis802_11OFDM24 +- // +- NetWorkType = Ndis802_11OFDM24; +- break; +- } +- } +- +- // +- // Second check Extend Rate. +- // +- if (NetWorkType != Ndis802_11OFDM24) +- { +- for (i = 0; i < pBss->ExtRateLen; i++) +- { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit +- if ((rate == 2) || (rate == 4) || (rate == 11) || (rate == 22)) +- { +- continue; +- } +- else +- { +- // +- // Otherwise (even rate > 108) means Ndis802_11OFDM24 +- // +- NetWorkType = Ndis802_11OFDM24; +- break; +- } +- } +- } +- } +- else +- { +- NetWorkType = Ndis802_11OFDM5; +- } +- +- if (pBss->HtCapabilityLen != 0) +- { +- if (NetWorkType == Ndis802_11OFDM5) +- NetWorkType = Ndis802_11OFDM5_N; +- else +- NetWorkType = Ndis802_11OFDM24_N; +- } +- +- return NetWorkType; +-} +- +-/* +- ========================================================================== +- Description: +- Check the validity of the received EAPoL frame +- Return: +- TRUE if all parameters are OK, +- FALSE otherwise +- ========================================================================== +- */ +-BOOLEAN PeerWpaMessageSanity( +- IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, +- IN MAC_TABLE_ENTRY *pEntry) +-{ +- UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; +- BOOLEAN bReplayDiff = FALSE; +- BOOLEAN bWPA2 = FALSE; +- KEY_INFO EapolKeyInfo; +- UCHAR GroupKeyIndex = 0; +- +- +- NdisZeroMemory(mic, sizeof(mic)); +- NdisZeroMemory(digest, sizeof(digest)); +- NdisZeroMemory(KEYDATA, sizeof(KEYDATA)); +- NdisZeroMemory((PUCHAR)&EapolKeyInfo, sizeof(EapolKeyInfo)); +- +- NdisMoveMemory((PUCHAR)&EapolKeyInfo, (PUCHAR)&pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); +- +- *((USHORT *)&EapolKeyInfo) = cpu2le16(*((USHORT *)&EapolKeyInfo)); +- +- // Choose WPA2 or not +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- bWPA2 = TRUE; +- +- // 0. Check MsgType +- if ((MsgType > EAPOL_GROUP_MSG_2) || (MsgType < EAPOL_PAIR_MSG_1)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("The message type is invalid(%d)! \n", MsgType)); +- return FALSE; +- } +- +- // 1. Replay counter check +- if (MsgType == EAPOL_PAIR_MSG_1 || MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1) // For supplicant +- { +- // First validate replay counter, only accept message with larger replay counter. +- // Let equal pass, some AP start with all zero replay counter +- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; +- +- NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); +- if ((RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY) != 1) && +- (RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) +- { +- bReplayDiff = TRUE; +- } +- } +- else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) // For authenticator +- { +- // check Replay Counter coresponds to MSG from authenticator, otherwise discard +- if (!NdisEqualMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY)) +- { +- bReplayDiff = TRUE; +- } +- } +- +- // Replay Counter different condition +- if (bReplayDiff) +- { +- // send wireless event - for replay counter different +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_REPLAY_COUNTER_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- if (MsgType < EAPOL_GROUP_MSG_1) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in pairwise msg %d of 4-way handshake!\n", MsgType)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); +- } +- +- hex_dump("Receive replay counter ", pMsg->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- hex_dump("Current replay counter ", pEntry->R_Counter, LEN_KEY_DESC_REPLAY); +- return FALSE; +- } +- +- // 2. Verify MIC except Pairwise Msg1 +- if (MsgType != EAPOL_PAIR_MSG_1) +- { +- UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; +- +- // Record the received MIC for check later +- NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- +- if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) // TKIP +- { +- HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, mic, MD5_DIGEST_SIZE); +- } +- else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) // AES +- { +- HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); +- } +- +- if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC)) +- { +- // send wireless event - for MIC different +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_MIC_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- if (MsgType < EAPOL_GROUP_MSG_1) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in pairwise msg %d of 4-way handshake!\n", MsgType)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); +- } +- +- hex_dump("Received MIC", rcvd_mic, LEN_KEY_DESC_MIC); +- hex_dump("Desired MIC", mic, LEN_KEY_DESC_MIC); +- +- return FALSE; +- } +- } +- +- // 1. Decrypt the Key Data field if GTK is included. +- // 2. Extract the context of the Key Data field if it exist. +- // The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. +- // The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. +- if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) +- { +- // Decrypt this field +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) +- { +- if( +- (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) +- { +- // AES +- AES_GTK_KEY_UNWRAP(&pEntry->PTK[16], KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), +- pMsg->KeyDesc.KeyData); +- } +- else +- { +- INT i; +- UCHAR Key[32]; +- // Decrypt TKIP GTK +- // Construct 32 bytes RC4 Key +- NdisMoveMemory(Key, pMsg->KeyDesc.KeyIv, 16); +- NdisMoveMemory(&Key[16], &pEntry->PTK[16], 16); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, 32); +- //discard first 256 bytes +- for(i = 0; i < 256; i++) +- ARCFOUR_BYTE(&pAd->PrivateInfo.WEPCONTEXT); +- // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, KEYDATA, +- pMsg->KeyDesc.KeyData, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); +- } +- +- if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) +- GroupKeyIndex = EapolKeyInfo.KeyIndex; +- +- } +- else if ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3 && !bWPA2)) +- { +- NdisMoveMemory(KEYDATA, pMsg->KeyDesc.KeyData, CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); +- } +- else +- { +- +- return TRUE; +- } +- +- // Parse Key Data field to +- // 1. verify RSN IE for pairwise_msg_2_WPA1(WPA2) ,pairwise_msg_3_WPA1(WPA2) +- // 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 +- // 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) +- if (!RTMPParseEapolKeyData(pAd, KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), +- GroupKeyIndex, MsgType, bWPA2, pEntry)) +- { +- return FALSE; +- } +- } +- +- return TRUE; +- +-} +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +-BOOLEAN MlmeDlsReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PRT_802_11_DLS *pDLS, +- OUT PUSHORT pReason) +-{ +- MLME_DLS_REQ_STRUCT *pInfo; +- +- pInfo = (MLME_DLS_REQ_STRUCT *)Msg; +- +- *pDLS = pInfo->pDLS; +- *pReason = pInfo->Reason; +- +- return TRUE; +-} +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef QOS_DLS_SUPPORT +-BOOLEAN PeerDlsReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pDlsTimeout, +- OUT UCHAR *pRatesLen, +- OUT UCHAR Rates[], +- OUT UCHAR *pHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability) +-{ +- CHAR *Ptr; +- PFRAME_802_11 Fr = (PFRAME_802_11)Msg; +- PEID_STRUCT eid_ptr; +- +- // to prevent caller from using garbage output value +- *pCapabilityInfo = 0; +- *pDlsTimeout = 0; +- *pHtCapabilityLen = 0; +- +- Ptr = (PCHAR)Fr->Octet; +- +- // offset to destination MAC address (Category and Action field) +- Ptr += 2; +- +- // get DA from payload and advance the pointer +- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- // get SA from payload and advance the pointer +- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- // get capability info from payload and advance the pointer +- NdisMoveMemory(pCapabilityInfo, Ptr, 2); +- Ptr += 2; +- +- // get capability info from payload and advance the pointer +- NdisMoveMemory(pDlsTimeout, Ptr, 2); +- Ptr += 2; +- +- // Category and Action field + DA + SA + capability + Timeout +- eid_ptr = (PEID_STRUCT) &Fr->Octet[18]; +- +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_SUPP_RATES: +- if ((eid_ptr->Len <= MAX_LEN_OF_SUPPORTED_RATES) && (eid_ptr->Len > 0)) +- { +- NdisMoveMemory(Rates, eid_ptr->Octet, eid_ptr->Len); +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - IE_SUPP_RATES., Len=%d. Rates[0]=%x\n",eid_ptr->Len, Rates[0])); +- DBGPRINT(RT_DEBUG_TRACE, ("Rates[1]=%x %x %x %x %x %x %x\n", Rates[1], Rates[2], Rates[3], Rates[4], Rates[5], Rates[6], Rates[7])); +- *pRatesLen = eid_ptr->Len; +- } +- else +- { +- *pRatesLen = 8; +- Rates[0] = 0x82; +- Rates[1] = 0x84; +- Rates[2] = 0x8b; +- Rates[3] = 0x96; +- Rates[4] = 0x12; +- Rates[5] = 0x24; +- Rates[6] = 0x48; +- Rates[7] = 0x6c; +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - wrong IE_SUPP_RATES., Len=%d\n",eid_ptr->Len)); +- } +- break; +- +- case IE_EXT_SUPP_RATES: +- if (eid_ptr->Len + *pRatesLen <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, eid_ptr->Len); +- *pRatesLen = (*pRatesLen) + eid_ptr->Len; +- } +- else +- { +- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, MAX_LEN_OF_SUPPORTED_RATES - (*pRatesLen)); +- *pRatesLen = MAX_LEN_OF_SUPPORTED_RATES; +- } +- break; +- +- case IE_HT_CAP: +- if (eid_ptr->Len >= sizeof(HT_CAPABILITY_IE)) +- { +- NdisMoveMemory(pHtCapability, eid_ptr->Octet, sizeof(HT_CAPABILITY_IE)); +- +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +-#ifdef UNALIGNMENT_SUPPORT +- { +- EXT_HT_CAP_INFO extHtCapInfo; +- +- NdisMoveMemory((PUCHAR)(&extHtCapInfo), (PUCHAR)(&pHtCapability->ExtHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- *(USHORT *)(&extHtCapInfo) = cpu2le16(*(USHORT *)(&extHtCapInfo)); +- NdisMoveMemory((PUCHAR)(&pHtCapability->ExtHtCapInfo), (PUCHAR)(&extHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- } +-#else +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); +-#endif // UNALIGNMENT_SUPPORT // +- *pHtCapabilityLen = sizeof(HT_CAPABILITY_IE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - IE_HT_CAP\n")); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - wrong IE_HT_CAP.eid_ptr->Len = %d\n", eid_ptr->Len)); +- } +- break; +- +- default: +- break; +- } +- +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return TRUE; +-} +- +-BOOLEAN PeerDlsRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT UCHAR *pRatesLen, +- OUT UCHAR Rates[], +- OUT UCHAR *pHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability) +-{ +- CHAR *Ptr; +- PFRAME_802_11 Fr = (PFRAME_802_11)Msg; +- PEID_STRUCT eid_ptr; +- +- // to prevent caller from using garbage output value +- *pStatus = 0; +- *pCapabilityInfo = 0; +- *pHtCapabilityLen = 0; +- +- Ptr = (PCHAR)Fr->Octet; +- +- // offset to destination MAC address (Category and Action field) +- Ptr += 2; +- +- // get status code from payload and advance the pointer +- NdisMoveMemory(pStatus, Ptr, 2); +- Ptr += 2; +- +- // get DA from payload and advance the pointer +- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- // get SA from payload and advance the pointer +- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- if (pStatus == 0) +- { +- // get capability info from payload and advance the pointer +- NdisMoveMemory(pCapabilityInfo, Ptr, 2); +- Ptr += 2; +- } +- +- // Category and Action field + status code + DA + SA + capability +- eid_ptr = (PEID_STRUCT) &Fr->Octet[18]; +- +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_SUPP_RATES: +- if ((eid_ptr->Len <= MAX_LEN_OF_SUPPORTED_RATES) && (eid_ptr->Len > 0)) +- { +- NdisMoveMemory(Rates, eid_ptr->Octet, eid_ptr->Len); +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - IE_SUPP_RATES., Len=%d. Rates[0]=%x\n",eid_ptr->Len, Rates[0])); +- DBGPRINT(RT_DEBUG_TRACE, ("Rates[1]=%x %x %x %x %x %x %x\n", Rates[1], Rates[2], Rates[3], Rates[4], Rates[5], Rates[6], Rates[7])); +- *pRatesLen = eid_ptr->Len; +- } +- else +- { +- *pRatesLen = 8; +- Rates[0] = 0x82; +- Rates[1] = 0x84; +- Rates[2] = 0x8b; +- Rates[3] = 0x96; +- Rates[4] = 0x12; +- Rates[5] = 0x24; +- Rates[6] = 0x48; +- Rates[7] = 0x6c; +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - wrong IE_SUPP_RATES., Len=%d\n",eid_ptr->Len)); +- } +- break; +- +- case IE_EXT_SUPP_RATES: +- if (eid_ptr->Len + *pRatesLen <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, eid_ptr->Len); +- *pRatesLen = (*pRatesLen) + eid_ptr->Len; +- } +- else +- { +- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, MAX_LEN_OF_SUPPORTED_RATES - (*pRatesLen)); +- *pRatesLen = MAX_LEN_OF_SUPPORTED_RATES; +- } +- break; +- +- case IE_HT_CAP: +- if (eid_ptr->Len >= sizeof(HT_CAPABILITY_IE)) +- { +- NdisMoveMemory(pHtCapability, eid_ptr->Octet, sizeof(HT_CAPABILITY_IE)); +- +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +-#ifdef UNALIGNMENT_SUPPORT +- { +- EXT_HT_CAP_INFO extHtCapInfo; +- +- NdisMoveMemory((PUCHAR)(&extHtCapInfo), (PUCHAR)(&pHtCapability->ExtHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- *(USHORT *)(&extHtCapInfo) = cpu2le16(*(USHORT *)(&extHtCapInfo)); +- NdisMoveMemory((PUCHAR)(&pHtCapability->ExtHtCapInfo), (PUCHAR)(&extHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- } +-#else +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); +-#endif // UNALIGNMENT_SUPPORT // +- *pHtCapabilityLen = sizeof(HT_CAPABILITY_IE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - IE_HT_CAP\n")); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - wrong IE_HT_CAP.eid_ptr->Len = %d\n", eid_ptr->Len)); +- } +- break; +- +- default: +- break; +- } +- +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return TRUE; +-} +- +-BOOLEAN PeerDlsTearDownSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pReason) +-{ +- CHAR *Ptr; +- PFRAME_802_11 Fr = (PFRAME_802_11)Msg; +- +- // to prevent caller from using garbage output value +- *pReason = 0; +- +- Ptr = (PCHAR)Fr->Octet; +- +- // offset to destination MAC address (Category and Action field) +- Ptr += 2; +- +- // get DA from payload and advance the pointer +- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- // get SA from payload and advance the pointer +- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN); +- Ptr += MAC_ADDR_LEN; +- +- // get reason code from payload and advance the pointer +- NdisMoveMemory(pReason, Ptr, 2); +- Ptr += 2; +- +- return TRUE; +-} +-#endif // QOS_DLS_SUPPORT // +diff --git a/drivers/staging/rt3090/common/cmm_sync.c b/drivers/staging/rt3090/common/cmm_sync.c +deleted file mode 100644 +index 6d7b974..0000000 +--- a/drivers/staging/rt3090/common/cmm_sync.c ++++ /dev/null +@@ -1,734 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_sync.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2004-09-01 modified for rt2561/2661 +-*/ +- +-#include "../rt_config.h" +- +- +-// 2.4 Ghz channel plan index in the TxPower arrays. +-#define BG_BAND_REGION_0_START 0 // 1,2,3,4,5,6,7,8,9,10,11 +-#define BG_BAND_REGION_0_SIZE 11 +-#define BG_BAND_REGION_1_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13 +-#define BG_BAND_REGION_1_SIZE 13 +-#define BG_BAND_REGION_2_START 9 // 10,11 +-#define BG_BAND_REGION_2_SIZE 2 +-#define BG_BAND_REGION_3_START 9 // 10,11,12,13 +-#define BG_BAND_REGION_3_SIZE 4 +-#define BG_BAND_REGION_4_START 13 // 14 +-#define BG_BAND_REGION_4_SIZE 1 +-#define BG_BAND_REGION_5_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +-#define BG_BAND_REGION_5_SIZE 14 +-#define BG_BAND_REGION_6_START 2 // 3,4,5,6,7,8,9 +-#define BG_BAND_REGION_6_SIZE 7 +-#define BG_BAND_REGION_7_START 4 // 5,6,7,8,9,10,11,12,13 +-#define BG_BAND_REGION_7_SIZE 9 +-#define BG_BAND_REGION_31_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 +-#define BG_BAND_REGION_31_SIZE 14 +- +-// 5 Ghz channel plan index in the TxPower arrays. +-UCHAR A_BAND_REGION_0_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_1_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +-UCHAR A_BAND_REGION_2_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64}; +-UCHAR A_BAND_REGION_3_CHANNEL_LIST[]={52, 56, 60, 64, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_4_CHANNEL_LIST[]={149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_5_CHANNEL_LIST[]={149, 153, 157, 161}; +-UCHAR A_BAND_REGION_6_CHANNEL_LIST[]={36, 40, 44, 48}; +-UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173}; +-UCHAR A_BAND_REGION_8_CHANNEL_LIST[]={52, 56, 60, 64}; +-UCHAR A_BAND_REGION_9_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_10_CHANNEL_LIST[]={36, 40, 44, 48, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_11_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_12_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +-UCHAR A_BAND_REGION_13_CHANNEL_LIST[]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_14_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_15_CHANNEL_LIST[]={149, 153, 157, 161, 165, 169, 173}; +- +- +-//BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. +-UCHAR BaSizeArray[4] = {8,16,32,64}; +- +-/* +- ========================================================================== +- Description: +- Update StaCfg->ChannelList[] according to 1) Country Region 2) RF IC type, +- and 3) PHY-mode user selected. +- The outcome is used by driver when doing site survey. +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID BuildChannelList( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR i, j, index=0, num=0; +- PUCHAR pChannelList = NULL; +- +- NdisZeroMemory(pAd->ChannelList, MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); +- +- // if not 11a-only mode, channel list starts from 2.4Ghz band +- if ((pAd->CommonCfg.PhyMode != PHY_11A) +-#ifdef DOT11_N_SUPPORT +- && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- switch (pAd->CommonCfg.CountryRegion & 0x7f) +- { +- case REGION_0_BG_BAND: // 1 -11 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_0_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_0_SIZE); +- index += BG_BAND_REGION_0_SIZE; +- break; +- case REGION_1_BG_BAND: // 1 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_1_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_1_SIZE); +- index += BG_BAND_REGION_1_SIZE; +- break; +- case REGION_2_BG_BAND: // 10 - 11 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_2_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_2_SIZE); +- index += BG_BAND_REGION_2_SIZE; +- break; +- case REGION_3_BG_BAND: // 10 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_3_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_3_SIZE); +- index += BG_BAND_REGION_3_SIZE; +- break; +- case REGION_4_BG_BAND: // 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_4_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_4_SIZE); +- index += BG_BAND_REGION_4_SIZE; +- break; +- case REGION_5_BG_BAND: // 1 - 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_5_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_5_SIZE); +- index += BG_BAND_REGION_5_SIZE; +- break; +- case REGION_6_BG_BAND: // 3 - 9 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_6_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_6_SIZE); +- index += BG_BAND_REGION_6_SIZE; +- break; +- case REGION_7_BG_BAND: // 5 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_7_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_7_SIZE); +- index += BG_BAND_REGION_7_SIZE; +- break; +- case REGION_31_BG_BAND: // 1 - 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_31_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_31_SIZE); +- index += BG_BAND_REGION_31_SIZE; +- break; +- default: // Error. should never happen +- break; +- } +- for (i=0; iChannelList[i].MaxTxPwr = 20; +- } +- +- if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) +-#ifdef DOT11_N_SUPPORT +- || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) +- || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- switch (pAd->CommonCfg.CountryRegionForABand & 0x7f) +- { +- case REGION_0_A_BAND: +- num = sizeof(A_BAND_REGION_0_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_0_CHANNEL_LIST; +- break; +- case REGION_1_A_BAND: +- num = sizeof(A_BAND_REGION_1_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_1_CHANNEL_LIST; +- break; +- case REGION_2_A_BAND: +- num = sizeof(A_BAND_REGION_2_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_2_CHANNEL_LIST; +- break; +- case REGION_3_A_BAND: +- num = sizeof(A_BAND_REGION_3_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_3_CHANNEL_LIST; +- break; +- case REGION_4_A_BAND: +- num = sizeof(A_BAND_REGION_4_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_4_CHANNEL_LIST; +- break; +- case REGION_5_A_BAND: +- num = sizeof(A_BAND_REGION_5_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_5_CHANNEL_LIST; +- break; +- case REGION_6_A_BAND: +- num = sizeof(A_BAND_REGION_6_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_6_CHANNEL_LIST; +- break; +- case REGION_7_A_BAND: +- num = sizeof(A_BAND_REGION_7_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_7_CHANNEL_LIST; +- break; +- case REGION_8_A_BAND: +- num = sizeof(A_BAND_REGION_8_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_8_CHANNEL_LIST; +- break; +- case REGION_9_A_BAND: +- num = sizeof(A_BAND_REGION_9_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_9_CHANNEL_LIST; +- break; +- case REGION_10_A_BAND: +- num = sizeof(A_BAND_REGION_10_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_10_CHANNEL_LIST; +- break; +- case REGION_11_A_BAND: +- num = sizeof(A_BAND_REGION_11_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_11_CHANNEL_LIST; +- break; +- case REGION_12_A_BAND: +- num = sizeof(A_BAND_REGION_12_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_12_CHANNEL_LIST; +- break; +- case REGION_13_A_BAND: +- num = sizeof(A_BAND_REGION_13_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_13_CHANNEL_LIST; +- break; +- case REGION_14_A_BAND: +- num = sizeof(A_BAND_REGION_14_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_14_CHANNEL_LIST; +- break; +- case REGION_15_A_BAND: +- num = sizeof(A_BAND_REGION_15_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_15_CHANNEL_LIST; +- break; +- default: // Error. should never happen +- DBGPRINT(RT_DEBUG_WARN,("countryregion=%d not support", pAd->CommonCfg.CountryRegionForABand)); +- break; +- } +- +- if (num != 0) +- { +- UCHAR RadarCh[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +- for (i=0; iTxPower[j].Channel) +- NdisMoveMemory(&pAd->ChannelList[index+i], &pAd->TxPower[j], sizeof(CHANNEL_TX_POWER)); +- } +- for (j=0; j<15; j++) +- { +- if (pChannelList[i] == RadarCh[j]) +- pAd->ChannelList[index+i].DfsReq = TRUE; +- } +- pAd->ChannelList[index+i].MaxTxPwr = 20; +- } +- index += num; +- } +- } +- +- pAd->ChannelListNum = index; +- DBGPRINT(RT_DEBUG_TRACE,("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n", +- pAd->CommonCfg.CountryRegion, pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, pAd->CommonCfg.PhyMode, pAd->ChannelListNum)); +-#ifdef DBG +- for (i=0;iChannelListNum;i++) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE,("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, \n ", pAd->ChannelList[i].Channel, pAd->ChannelList[i].Power, pAd->ChannelList[i].Power2)); +- } +-#endif +-} +- +-/* +- ========================================================================== +- Description: +- This routine return the first channel number according to the country +- code selection and RF IC selection (signal band or dual band). It is called +- whenever driver need to start a site survey of all supported channels. +- Return: +- ch - the first channel number of current country code setting +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-UCHAR FirstChannel( +- IN PRTMP_ADAPTER pAd) +-{ +- return pAd->ChannelList[0].Channel; +-} +- +-/* +- ========================================================================== +- Description: +- This routine returns the next channel number. This routine is called +- during driver need to start a site survey of all supported channels. +- Return: +- next_channel - the next channel number valid in current country code setting. +- Note: +- return 0 if no more next channel +- ========================================================================== +- */ +-UCHAR NextChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) +-{ +- int i; +- UCHAR next_channel = 0; +- +- for (i = 0; i < (pAd->ChannelListNum - 1); i++) +- if (channel == pAd->ChannelList[i].Channel) +- { +- next_channel = pAd->ChannelList[i+1].Channel; +- break; +- } +- return next_channel; +-} +- +-/* +- ========================================================================== +- Description: +- This routine is for Cisco Compatible Extensions 2.X +- Spec31. AP Control of Client Transmit Power +- Return: +- None +- Note: +- Required by Aironet dBm(mW) +- 0dBm(1mW), 1dBm(5mW), 13dBm(20mW), 15dBm(30mW), +- 17dBm(50mw), 20dBm(100mW) +- +- We supported +- 3dBm(Lowest), 6dBm(10%), 9dBm(25%), 12dBm(50%), +- 14dBm(75%), 15dBm(100%) +- +- The client station's actual transmit power shall be within +/- 5dB of +- the minimum value or next lower value. +- ========================================================================== +- */ +-VOID ChangeToCellPowerLimit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit) +-{ +- //valud 0xFF means that hasn't found power limit information +- //from the AP's Beacon/Probe response. +- if (AironetCellPowerLimit == 0xFF) +- return; +- +- if (AironetCellPowerLimit < 6) //Used Lowest Power Percentage. +- pAd->CommonCfg.TxPowerPercentage = 6; +- else if (AironetCellPowerLimit < 9) +- pAd->CommonCfg.TxPowerPercentage = 10; +- else if (AironetCellPowerLimit < 12) +- pAd->CommonCfg.TxPowerPercentage = 25; +- else if (AironetCellPowerLimit < 14) +- pAd->CommonCfg.TxPowerPercentage = 50; +- else if (AironetCellPowerLimit < 15) +- pAd->CommonCfg.TxPowerPercentage = 75; +- else +- pAd->CommonCfg.TxPowerPercentage = 100; //else used maximum +- +- if (pAd->CommonCfg.TxPowerPercentage > pAd->CommonCfg.TxPowerDefault) +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- +-} +- +-CHAR ConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber) +-{ +- UCHAR RssiOffset, LNAGain; +- +- // Rssi equals to zero should be an invalid value +- if (Rssi == 0) +- return -99; +- +- LNAGain = GET_LNA_GAIN(pAd); +- if (pAd->LatchRfRegs.Channel > 14) +- { +- if (RssiNumber == 0) +- RssiOffset = pAd->ARssiOffset0; +- else if (RssiNumber == 1) +- RssiOffset = pAd->ARssiOffset1; +- else +- RssiOffset = pAd->ARssiOffset2; +- } +- else +- { +- if (RssiNumber == 0) +- RssiOffset = pAd->BGRssiOffset0; +- else if (RssiNumber == 1) +- RssiOffset = pAd->BGRssiOffset1; +- else +- RssiOffset = pAd->BGRssiOffset2; +- } +- +- return (-12 - RssiOffset - LNAGain - Rssi); +-} +- +-/* +- ========================================================================== +- Description: +- Scan next channel +- ========================================================================== +- */ +-VOID ScanNextChannel( +- IN PRTMP_ADAPTER pAd) +-{ +- HEADER_802_11 Hdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; +-#ifdef CONFIG_STA_SUPPORT +- USHORT Status; +- PHEADER_802_11 pHdr80211; +-#endif // CONFIG_STA_SUPPORT // +- UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (MONITOR_ON(pAd)) +- return; +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RALINK_ATE +- // Nothing to do in ATE mode. +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- if (pAd->MlmeAux.Channel == 0) +- { +- if ((pAd->CommonCfg.BBPCurrentBW == BW_40) +-#ifdef CONFIG_STA_SUPPORT +- && (INFRA_ON(pAd) +- || (pAd->OpMode == OPMODE_AP)) +-#endif // CONFIG_STA_SUPPORT // +- ) +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- BBPValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr)); +- } +- else +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // +- // To prevent data lost. +- // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +- // Now, we need to send an NULL data with turned PSM bit off to AP, when scan progress done +- // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd))) +- { +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- pHdr80211 = (PHEADER_802_11) pOutBuffer; +- MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pHdr80211->Duration = 0; +- pHdr80211->FC.Type = BTYPE_DATA; +- pHdr80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame\n")); +- MlmeFreeMemory(pAd, pOutBuffer); +- RTMPusecDelay(5000); +- } +- } +- +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- } +- else +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // BBP and RF are not accessible in PS mode, we has to wake them up first +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, TRUE); +- +- // leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON +- if (pAd->StaCfg.Psm == PWR_SAVE) +- RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, TRUE); +- AsicLockChannel(pAd, pAd->MlmeAux.Channel); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->MlmeAux.Channel > 14) +- { +- if ((pAd->CommonCfg.bIEEE80211H == 1) && RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) +- { +- ScanType = SCAN_PASSIVE; +- ScanTimeIn5gChannel = MIN_CHANNEL_TIME; +- } +- } +- +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- // carrier detection +- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE) +- { +- ScanType = SCAN_PASSIVE; +- ScanTimeIn5gChannel = MIN_CHANNEL_TIME; +- } +-#endif // CARRIER_DETECTION_SUPPORT // +- } +- +-#endif // CONFIG_STA_SUPPORT // +- +- //Global country domain(ch1-11:active scan, ch12-14 passive scan) +- if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) && ((pAd->CommonCfg.CountryRegion & 0x7f) == REGION_31_BG_BAND)) +- { +- ScanType = SCAN_PASSIVE; +- } +- +- // We need to shorten active scan time in order for WZC connect issue +- // Chnage the channel scan time for CISCO stuff based on its IAPP announcement +- if (ScanType == FAST_SCAN_ACTIVE) +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME); +- else // must be SCAN_PASSIVE or SCAN_ACTIVE +- { +- if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) +-#ifdef DOT11_N_SUPPORT +- || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- if (pAd->MlmeAux.Channel > 14) +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ScanTimeIn5gChannel); +- else +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MIN_CHANNEL_TIME); +- } +- else +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MAX_CHANNEL_TIME); +- } +- +- if ((ScanType == SCAN_ACTIVE) +- || (ScanType == FAST_SCAN_ACTIVE) +- ) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - ScanNextChannel() allocate memory fail\n")); +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- return; +- } +- +- // There is no need to send broadcast probe request if active scan is in effect. +- if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) +- ) +- SsidLen = pAd->MlmeAux.SsidLen; +- else +- SsidLen = 0; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); +-#endif // CONFIG_STA_SUPPORT // +- +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &SsidLen, +- SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->CommonCfg.SupRateLen, +- pAd->CommonCfg.SupRateLen, pAd->CommonCfg.SupRate, +- END_OF_ARGS); +- +- if (pAd->CommonCfg.ExtRateLen) +- { +- ULONG Tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &ExtRateIe, +- 1, &pAd->CommonCfg.ExtRateLen, +- pAd->CommonCfg.ExtRateLen, pAd->CommonCfg.ExtRate, +- END_OF_ARGS); +- FrameLen += Tmp; +- } +- +-#ifdef DOT11_N_SUPPORT +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- ULONG Tmp; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +-#ifdef RT_BIG_ENDIAN +- HT_CAPABILITY_IE HtCapabilityTmp; +-#endif +- if (pAd->bBroadComHT == TRUE) +- { +- HtLen = pAd->MlmeAux.HtCapabilityLen + 4; +-#ifdef RT_BIG_ENDIAN +- NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +-#ifdef UNALIGNMENT_SUPPORT +- { +- EXT_HT_CAP_INFO extHtCapInfo; +- +- NdisMoveMemory((PUCHAR)(&extHtCapInfo), (PUCHAR)(&HtCapabilityTmp.ExtHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- *(USHORT *)(&extHtCapInfo) = cpu2le16(*(USHORT *)(&extHtCapInfo)); +- NdisMoveMemory((PUCHAR)(&HtCapabilityTmp.ExtHtCapInfo), (PUCHAR)(&extHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- } +-#else +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = cpu2le16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +-#endif // UNALIGNMENT_SUPPORT // +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &HtCapabilityTmp, +- END_OF_ARGS); +-#else +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +-#endif // RT_BIG_ENDIAN // +- } +- else +- { +- HtLen = pAd->MlmeAux.HtCapabilityLen; +-#ifdef RT_BIG_ENDIAN +- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, SIZE_HT_CAP_IE); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +-#ifdef UNALIGNMENT_SUPPORT +- { +- EXT_HT_CAP_INFO extHtCapInfo; +- +- NdisMoveMemory((PUCHAR)(&extHtCapInfo), (PUCHAR)(&HtCapabilityTmp.ExtHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- *(USHORT *)(&extHtCapInfo) = cpu2le16(*(USHORT *)(&extHtCapInfo)); +- NdisMoveMemory((PUCHAR)(&HtCapabilityTmp.ExtHtCapInfo), (PUCHAR)(&extHtCapInfo), sizeof(EXT_HT_CAP_INFO)); +- } +-#else +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = cpu2le16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +-#endif // UNALIGNMENT_SUPPORT // +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &HtCapabilityTmp, +- END_OF_ARGS); +-#else +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- END_OF_ARGS); +-#endif // RT_BIG_ENDIAN // +- } +- FrameLen += Tmp; +- +-#ifdef DOT11N_DRAFT3 +- if (pAd->CommonCfg.BACapability.field.b2040CoexistScanSup == 1) +- { +- ULONG Tmp; +- HtLen = 1; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &ExtHtCapIe, +- 1, &HtLen, +- 1, &pAd->CommonCfg.BSSCoexist2040.word, +- END_OF_ARGS); +- +- FrameLen += Tmp; +- } +-#endif // DOT11N_DRAFT3 // +- } +-#endif // DOT11_N_SUPPORT // +- +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- } +- +- // For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN; +-#endif // CONFIG_STA_SUPPORT // +- +- } +-} +- +-VOID MgtProbReqMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid) +-{ +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); +- +- pHdr80211->FC.Type = BTYPE_MGMT; +- pHdr80211->FC.SubType = SubType; +- if (SubType == SUBTYPE_ACK) +- pHdr80211->FC.Type = BTYPE_CNTL; +- pHdr80211->FC.ToDs = ToDs; +- COPY_MAC_ADDR(pHdr80211->Addr1, pDA); +- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); +-} +diff --git a/drivers/staging/rt3090/common/cmm_tkip.c b/drivers/staging/rt3090/common/cmm_tkip.c +deleted file mode 100644 +index 0b474f2..0000000 +--- a/drivers/staging/rt3090/common/cmm_tkip.c ++++ /dev/null +@@ -1,966 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_tkip.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Wu 02-25-02 Initial +-*/ +- +-#include "../rt_config.h" +- +- +-// Rotation functions on 32 bit values +-#define ROL32( A, n ) \ +- ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) +-#define ROR32( A, n ) ROL32( (A), 32-(n) ) +- +-UINT Tkip_Sbox_Lower[256] = +-{ +- 0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54, +- 0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A, +- 0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B, +- 0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B, +- 0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F, +- 0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F, +- 0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5, +- 0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F, +- 0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB, +- 0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97, +- 0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED, +- 0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A, +- 0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94, +- 0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3, +- 0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04, +- 0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D, +- 0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39, +- 0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95, +- 0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83, +- 0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76, +- 0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4, +- 0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B, +- 0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0, +- 0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18, +- 0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51, +- 0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85, +- 0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12, +- 0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9, +- 0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7, +- 0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A, +- 0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8, +- 0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A +-}; +- +-UINT Tkip_Sbox_Upper[256] = +-{ +- 0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91, +- 0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC, +- 0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB, +- 0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B, +- 0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83, +- 0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A, +- 0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F, +- 0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA, +- 0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B, +- 0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13, +- 0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6, +- 0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85, +- 0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11, +- 0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B, +- 0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1, +- 0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF, +- 0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E, +- 0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6, +- 0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B, +- 0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD, +- 0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8, +- 0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2, +- 0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49, +- 0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10, +- 0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97, +- 0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F, +- 0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C, +- 0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27, +- 0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33, +- 0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5, +- 0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0, +- 0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C +-}; +- +-// +-// Expanded IV for TKIP function. +-// +-typedef struct PACKED _IV_CONTROL_ +-{ +- union PACKED +- { +- struct PACKED +- { +- UCHAR rc0; +- UCHAR rc1; +- UCHAR rc2; +- +- union PACKED +- { +- struct PACKED +- { +-#ifdef RT_BIG_ENDIAN +- UCHAR KeyID:2; +- UCHAR ExtIV:1; +- UCHAR Rsvd:5; +-#else +- UCHAR Rsvd:5; +- UCHAR ExtIV:1; +- UCHAR KeyID:2; +-#endif +- } field; +- UCHAR Byte; +- } CONTROL; +- } field; +- +- ULONG word; +- } IV16; +- +- ULONG IV32; +-} TKIP_IV, *PTKIP_IV; +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Convert from UCHAR[] to ULONG in a portable way +- +- Arguments: +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-ULONG RTMPTkipGetUInt32( +- IN PUCHAR pMICKey) +-{ +- ULONG res = 0; +- INT i; +- +- for (i = 0; i < 4; i++) +- { +- res |= (*pMICKey++) << (8 * i); +- } +- +- return res; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Convert from ULONG to UCHAR[] in a portable way +- +- Arguments: +- pDst pointer to destination for convert ULONG to UCHAR[] +- val the value for convert +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipPutUInt32( +- IN OUT PUCHAR pDst, +- IN ULONG val) +-{ +- INT i; +- +- for(i = 0; i < 4; i++) +- { +- *pDst++ = (UCHAR) (val & 0xff); +- val >>= 8; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Set the MIC Key. +- +- Arguments: +- pAd Pointer to our adapter +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipSetMICKey( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pMICKey) +-{ +- // Set the key +- pTkip->K0 = RTMPTkipGetUInt32(pMICKey); +- pTkip->K1 = RTMPTkipGetUInt32(pMICKey + 4); +- // and reset the message +- pTkip->L = pTkip->K0; +- pTkip->R = pTkip->K1; +- pTkip->nBytesInM = 0; +- pTkip->M = 0; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- uChar Append this uChar +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipAppendByte( +- IN PTKIP_KEY_INFO pTkip, +- IN UCHAR uChar) +-{ +- // Append the byte to our word-sized buffer +- pTkip->M |= (uChar << (8* pTkip->nBytesInM)); +- pTkip->nBytesInM++; +- // Process the word if it is full. +- if( pTkip->nBytesInM >= 4 ) +- { +- pTkip->L ^= pTkip->M; +- pTkip->R ^= ROL32( pTkip->L, 17 ); +- pTkip->L += pTkip->R; +- pTkip->R ^= ((pTkip->L & 0xff00ff00) >> 8) | ((pTkip->L & 0x00ff00ff) << 8); +- pTkip->L += pTkip->R; +- pTkip->R ^= ROL32( pTkip->L, 3 ); +- pTkip->L += pTkip->R; +- pTkip->R ^= ROR32( pTkip->L, 2 ); +- pTkip->L += pTkip->R; +- // Clear the buffer +- pTkip->M = 0; +- pTkip->nBytesInM = 0; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to source data for Calculate MIC Value +- Len Indicate the length of the source data +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPTkipAppend( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pSrc, +- IN UINT nBytes) +-{ +- // This is simple +- while(nBytes > 0) +- { +- RTMPTkipAppendByte(pTkip, *pSrc++); +- nBytes--; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get the MIC Value. +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- the MIC Value is store in pAd->PrivateInfo.MIC +- ======================================================================== +-*/ +-VOID RTMPTkipGetMIC( +- IN PTKIP_KEY_INFO pTkip) +-{ +- // Append the minimum padding +- RTMPTkipAppendByte(pTkip, 0x5a ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- // and then zeroes until the length is a multiple of 4 +- while( pTkip->nBytesInM != 0 ) +- { +- RTMPTkipAppendByte(pTkip, 0 ); +- } +- // The appendByte function has already computed the result. +- RTMPTkipPutUInt32(pTkip->MIC, pTkip->L); +- RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Init Tkip function. +- +- Arguments: +- pAd Pointer to our adapter +- pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. +- KeyId TK Key ID +- pTA Pointer to transmitter address +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitTkipEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, +- OUT PULONG pIV16, +- OUT PULONG pIV32) +-{ +- TKIP_IV tkipIv; +- +- // Prepare 8 bytes TKIP encapsulation for MPDU +- NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); +- tkipIv.IV16.field.rc0 = *(pTSC + 1); +- tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; +- tkipIv.IV16.field.rc2 = *pTSC; +- tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV +- tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; +-// tkipIv.IV32 = *(PULONG)(pTSC + 2); +- NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV +- +- *pIV16 = tkipIv.IV16.word; +- *pIV32 = tkipIv.IV32; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Init MIC Value calculation function which include set MIC key & +- calculate first 16 bytes (DA + SA + priority + 0) +- +- Arguments: +- pAd Pointer to our adapter +- pTKey Pointer to the Temporal Key (TK), TK shall be 128bits. +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitMICEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN UCHAR UserPriority, +- IN PUCHAR pMICKey) +-{ +- ULONG Priority = UserPriority; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Tx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR)&Priority, 4); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Compare MIC value of received MSDU +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to the received Plain text data +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- Len the length of the received plain text data exclude MIC value +- +- Return Value: +- TRUE MIC value matched +- FALSE MIC value mismatched +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPTkipCompareMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, +- IN UINT Len) +-{ +- UCHAR OldMic[8]; +- ULONG Priority = UserPriority; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); +- +- // Calculate MIC value from plain text data +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +- +- // Get MIC valude from received frame +- NdisMoveMemory(OldMic, pSrc + Len, 8); +- +- // Get MIC value from decrypted plain data +- RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); +- +- // Move MIC value from MSDU, this steps should move to data path. +- // Since the MIC value might cross MPDUs. +- if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. +- +- +- return (FALSE); +- } +- return (TRUE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Compare MIC value of received MSDU +- +- Arguments: +- pAd Pointer to our adapter +- pLLC LLC header +- pSrc Pointer to the received Plain text data +- pDA Pointer to DA address +- pSA Pointer to SA address +- pMICKey pointer to MIC Key +- Len the length of the received plain text data exclude MIC value +- +- Return Value: +- TRUE MIC value matched +- FALSE MIC value mismatched +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPTkipCompareMICValueWithLLC( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pLLC, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UINT Len) +-{ +- UCHAR OldMic[8]; +- ULONG Priority = 0; +- +- // Init MIC value calculation +- RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +- // DA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); +- // SA +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); +- +- // Start with LLC header +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pLLC, 8); +- +- // Calculate MIC value from plain text data +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +- +- // Get MIC valude from received frame +- NdisMoveMemory(OldMic, pSrc + Len, 8); +- +- // Get MIC value from decrypted plain data +- RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); +- +- // Move MIC value from MSDU, this steps should move to data path. +- // Since the MIC value might cross MPDUs. +- if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValueWithLLC(): TKIP MIC Error !\n")); //MIC error. +- +- +- return (FALSE); +- } +- return (TRUE); +-} +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware transmit function +- +- Arguments: +- pAd Pointer to our adapter +- PNDIS_PACKET Pointer to Ndis Packet for MIC calculation +- pEncap Pointer to LLC encap data +- LenEncap Total encap length, might be 0 which indicates no encap +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPCalculateMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, +- IN UCHAR apidx) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PUCHAR pSrc; +- UCHAR UserPriority; +- UCHAR vlan_offset = 0; +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- UserPriority = RTMP_GET_PACKET_UP(pPacket); +- pSrc = pSrcBufVA; +- +- // determine if this is a vlan packet +- if (((*(pSrc + 12) << 8) + *(pSrc + 13)) == 0x8100) +- vlan_offset = 4; +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- { +- RTMPInitMICEngine( +- pAd, +- pKey->Key, +- pSrc, +- pSrc + 6, +- UserPriority, +- pKey->TxMic); +- } +- +- +- if (pEncap != NULL) +- { +- // LLC encapsulation +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pEncap, 6); +- // Protocol Type +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, 2); +- } +- SrcBufLen -= (14 + vlan_offset); +- pSrc += (14 + vlan_offset); +- do +- { +- if (SrcBufLen > 0) +- { +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen); +- } +- +- break; // No need handle next packet +- +- } while (TRUE); // End of copying payload +- +- // Compute the final MIC Value +- RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); +-} +- +- +-/************************************************************/ +-/* tkip_sbox() */ +-/* Returns a 16 bit value from a 64K entry table. The Table */ +-/* is synthesized from two 256 entry byte wide tables. */ +-/************************************************************/ +- +-UINT tkip_sbox(UINT index) +-{ +- UINT index_low; +- UINT index_high; +- UINT left, right; +- +- index_low = (index % 256); +- index_high = ((index >> 8) % 256); +- +- left = Tkip_Sbox_Lower[index_low] + (Tkip_Sbox_Upper[index_low] * 256); +- right = Tkip_Sbox_Upper[index_high] + (Tkip_Sbox_Lower[index_high] * 256); +- +- return (left ^ right); +-} +- +-UINT rotr1(UINT a) +-{ +- unsigned int b; +- +- if ((a & 0x01) == 0x01) +- { +- b = (a >> 1) | 0x8000; +- } +- else +- { +- b = (a >> 1) & 0x7fff; +- } +- b = b % 65536; +- return b; +-} +- +-VOID RTMPTkipMixKey( +- UCHAR *key, +- UCHAR *ta, +- ULONG pnl, /* Least significant 16 bits of PN */ +- ULONG pnh, /* Most significant 32 bits of PN */ +- UCHAR *rc4key, +- UINT *p1k) +-{ +- +- UINT tsc0; +- UINT tsc1; +- UINT tsc2; +- +- UINT ppk0; +- UINT ppk1; +- UINT ppk2; +- UINT ppk3; +- UINT ppk4; +- UINT ppk5; +- +- INT i; +- INT j; +- +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ +- tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ +- +- /* Phase 1, step 1 */ +- p1k[0] = tsc1; +- p1k[1] = tsc0; +- p1k[2] = (UINT)(ta[0] + (ta[1]*256)); +- p1k[3] = (UINT)(ta[2] + (ta[3]*256)); +- p1k[4] = (UINT)(ta[4] + (ta[5]*256)); +- +- /* Phase 1, step 2 */ +- for (i=0; i<8; i++) +- { +- j = 2*(i & 1); +- p1k[0] = (p1k[0] + tkip_sbox( (p1k[4] ^ ((256*key[1+j]) + key[j])) % 65536 )) % 65536; +- p1k[1] = (p1k[1] + tkip_sbox( (p1k[0] ^ ((256*key[5+j]) + key[4+j])) % 65536 )) % 65536; +- p1k[2] = (p1k[2] + tkip_sbox( (p1k[1] ^ ((256*key[9+j]) + key[8+j])) % 65536 )) % 65536; +- p1k[3] = (p1k[3] + tkip_sbox( (p1k[2] ^ ((256*key[13+j]) + key[12+j])) % 65536 )) % 65536; +- p1k[4] = (p1k[4] + tkip_sbox( (p1k[3] ^ (((256*key[1+j]) + key[j]))) % 65536 )) % 65536; +- p1k[4] = (p1k[4] + i) % 65536; +- } +- +- /* Phase 2, Step 1 */ +- ppk0 = p1k[0]; +- ppk1 = p1k[1]; +- ppk2 = p1k[2]; +- ppk3 = p1k[3]; +- ppk4 = p1k[4]; +- ppk5 = (p1k[4] + tsc2) % 65536; +- +- /* Phase2, Step 2 */ +- ppk0 = ppk0 + tkip_sbox( (ppk5 ^ ((256*key[1]) + key[0])) % 65536); +- ppk1 = ppk1 + tkip_sbox( (ppk0 ^ ((256*key[3]) + key[2])) % 65536); +- ppk2 = ppk2 + tkip_sbox( (ppk1 ^ ((256*key[5]) + key[4])) % 65536); +- ppk3 = ppk3 + tkip_sbox( (ppk2 ^ ((256*key[7]) + key[6])) % 65536); +- ppk4 = ppk4 + tkip_sbox( (ppk3 ^ ((256*key[9]) + key[8])) % 65536); +- ppk5 = ppk5 + tkip_sbox( (ppk4 ^ ((256*key[11]) + key[10])) % 65536); +- +- ppk0 = ppk0 + rotr1(ppk5 ^ ((256*key[13]) + key[12])); +- ppk1 = ppk1 + rotr1(ppk0 ^ ((256*key[15]) + key[14])); +- ppk2 = ppk2 + rotr1(ppk1); +- ppk3 = ppk3 + rotr1(ppk2); +- ppk4 = ppk4 + rotr1(ppk3); +- ppk5 = ppk5 + rotr1(ppk4); +- +- /* Phase 2, Step 3 */ +- /* Phase 2, Step 3 */ +- +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ +- tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ +- +- rc4key[0] = (tsc2 >> 8) % 256; +- rc4key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; +- rc4key[2] = tsc2 % 256; +- rc4key[3] = ((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256; +- +- rc4key[4] = ppk0 % 256; +- rc4key[5] = (ppk0 >> 8) % 256; +- +- rc4key[6] = ppk1 % 256; +- rc4key[7] = (ppk1 >> 8) % 256; +- +- rc4key[8] = ppk2 % 256; +- rc4key[9] = (ppk2 >> 8) % 256; +- +- rc4key[10] = ppk3 % 256; +- rc4key[11] = (ppk3 >> 8) % 256; +- +- rc4key[12] = ppk4 % 256; +- rc4key[13] = (ppk4 >> 8) % 256; +- +- rc4key[14] = ppk5 % 256; +- rc4key[15] = (ppk5 >> 8) % 256; +-} +- +- +-// +-// TRUE: Success! +-// FALSE: Decrypt Error! +-// +-BOOLEAN RTMPSoftDecryptTKIP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, +- IN PCIPHER_KEY pWpaKey) +-{ +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR fc0; +- UCHAR fc1; +- USHORT fc; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- USHORT duration; +- USHORT seq_control; +- USHORT qos_control; +- UCHAR TA[MAC_ADDR_LEN]; +- UCHAR DA[MAC_ADDR_LEN]; +- UCHAR SA[MAC_ADDR_LEN]; +- UCHAR RC4Key[16]; +- UINT p1k[5]; //for mix_key; +- ULONG pnl;/* Least significant 16 bits of PN */ +- ULONG pnh;/* Most significant 32 bits of PN */ +- UINT num_blocks; +- UINT payload_remainder; +- ARCFOURCONTEXT ArcFourContext; +- UINT crc32 = 0; +- UINT trailfcs = 0; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE); +-#endif +- +- fc0 = *pData; +- fc1 = *(pData + 1); +- +- fc = *((PUSHORT)pData); +- +- frame_type = ((fc0 >> 2) & 0x03); +- frame_subtype = ((fc0 >> 4) & 0x0f); +- +- from_ds = (fc1 & 0x2) >> 1; +- to_ds = (fc1 & 0x1); +- +- a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); +- +- HeaderLen = 24; +- if (a4_exists) +- HeaderLen += 6; +- +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); +- KeyID = KeyID >> 6; +- +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP failed!(KeyID[%d] Length can not be 0)\n", KeyID)); +- return FALSE; +- } +- +- duration = *((PUSHORT)(pData+2)); +- +- seq_control = *((PUSHORT)(pData+22)); +- +- if (qc_exists) +- { +- if (a4_exists) +- { +- qos_control = *((PUSHORT)(pData+30)); +- } +- else +- { +- qos_control = *((PUSHORT)(pData+24)); +- } +- } +- +- if (to_ds == 0 && from_ds == 1) +- { +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); //BSSID +- } +- else if (to_ds == 0 && from_ds == 0 ) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 0) +- { +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 1) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+22, MAC_ADDR_LEN); +- } +- +- num_blocks = (DataByteCnt - 16) / 16; +- payload_remainder = (DataByteCnt - 16) % 16; +- +- pnl = (*(pData + HeaderLen)) * 256 + *(pData + HeaderLen + 2); +- pnh = *((PULONG)(pData + HeaderLen + 4)); +- pnh = cpu2le32(pnh); +- RTMPTkipMixKey(pWpaKey[KeyID].Key, TA, pnl, pnh, RC4Key, p1k); +- +- ARCFOUR_INIT(&ArcFourContext, RC4Key, 16); +- +- ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); +- NdisMoveMemory(&trailfcs, pData + DataByteCnt - 8 - 4, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ +- +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. +- +- return (FALSE); +- } +- +- NdisMoveMemory(TrailMIC, pData + DataByteCnt - 8 - 8 - 4, 8); +- RTMPInitMICEngine(pAd, pWpaKey[KeyID].Key, DA, SA, UserPriority, pWpaKey[KeyID].RxMic); +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 12); +- RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); +- NdisMoveMemory(MIC, pAd->PrivateInfo.Tx.MIC, 8); +- +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. +- //RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 +- return (FALSE); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE); +-#endif +- //DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/common/cmm_wep.c b/drivers/staging/rt3090/common/cmm_wep.c +deleted file mode 100644 +index d8ddfb2..0000000 +--- a/drivers/staging/rt3090/common/cmm_wep.c ++++ /dev/null +@@ -1,500 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_wep.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Wu 10-28-02 Initial +-*/ +- +-#include "../rt_config.h" +- +- +-UINT FCSTAB_32[256] = +-{ +- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, +- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, +- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, +- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, +- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, +- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, +- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, +- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, +- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, +- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, +- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, +- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, +- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, +- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, +- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, +- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, +- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, +- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, +- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, +- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, +- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, +- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, +- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, +- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, +- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, +- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, +- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, +- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, +- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, +- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, +- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, +- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, +- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, +- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, +- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, +- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, +- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, +- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, +- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, +- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, +- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, +- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, +- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, +- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, +- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, +- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, +- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, +- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, +- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, +- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, +- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, +- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, +- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, +- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, +- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, +- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, +- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, +- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, +- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, +- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, +- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, +- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, +- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, +- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +-}; +- +-/* +-UCHAR WEPKEY[] = { +- //IV +- 0x00, 0x11, 0x22, +- //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC +- }; +- */ +- +-/* +- ======================================================================== +- +- Routine Description: +- Init WEP function. +- +- Arguments: +- pAd Pointer to our adapter +- pKey Pointer to the WEP KEY +- KeyId WEP Key ID +- KeyLen the length of WEP KEY +- pDest Pointer to the destination which Encryption data will store in. +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitWepEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN UCHAR KeyLen, +- IN OUT PUCHAR pDest) +-{ +- UINT i; +- UCHAR WEPKEY[] = { +- //IV +- 0x00, 0x11, 0x22, +- //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC +- }; +- +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. +- +- { +- NdisMoveMemory(WEPKEY + 3, pKey, KeyLen); +- +- for(i = 0; i < 3; i++) +- WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) +- +- NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector +- } +- *(pDest+3) = (KeyId << 6); //Append KEYID +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Encrypt transimitted data +- +- Arguments: +- pAd Pointer to our adapter +- pSrc Pointer to the transimitted source data that will be encrypt +- pDest Pointer to the destination where entryption data will be store in. +- Len Indicate the length of the source data +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPEncryptData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDest, +- IN UINT Len) +-{ +- pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); +- ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, pSrc, Len); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Decrypt received WEP data +- +- Arguments: +- pAdapter Pointer to our adapter +- pSrc Pointer to the received data +- Len the length of the received data +- +- Return Value: +- TRUE Decrypt WEP data success +- FALSE Decrypt WEP data failed +- +- Note: +- +- ======================================================================== +-*/ +-BOOLEAN RTMPSoftDecryptWEP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pGroupKey) +-{ +- UINT trailfcs; +- UINT crc32; +- UCHAR KeyIdx; +- UCHAR WEPKEY[] = { +- //IV +- 0x00, 0x11, 0x22, +- //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC +- }; +- UCHAR *pPayload = (UCHAR *)pData + LENGTH_802_11; +- ULONG payload_len = DataByteCnt - LENGTH_802_11; +- +- NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV +- +- KeyIdx = (*(pPayload + 3) & 0xc0) >> 6; +- if (pGroupKey[KeyIdx].KeyLen == 0) +- return (FALSE); +- +- NdisMoveMemory(WEPKEY + 3, pGroupKey[KeyIdx].Key, pGroupKey[KeyIdx].KeyLen); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, pGroupKey[KeyIdx].KeyLen + 3); +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, payload_len - 4); +- NdisMoveMemory(&trailfcs, pPayload + payload_len - 8, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ +- +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. +- return (FALSE); +- } +- return (TRUE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm "ARCFOUR" initialize +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pKey Pointer to the WEP KEY +- KeyLen Indicate the length fo the WEP KEY +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_INIT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pKey, +- IN UINT KeyLen) +-{ +- UCHAR t, u; +- UINT keyindex; +- UINT stateindex; +- PUCHAR state; +- UINT counter; +- +- state = Ctx->STATE; +- Ctx->X = 0; +- Ctx->Y = 0; +- for (counter = 0; counter < 256; counter++) +- state[counter] = (UCHAR)counter; +- keyindex = 0; +- stateindex = 0; +- for (counter = 0; counter < 256; counter++) +- { +- t = state[counter]; +- stateindex = (stateindex + pKey[keyindex] + t) & 0xff; +- u = state[stateindex]; +- state[stateindex] = t; +- state[counter] = u; +- if (++keyindex >= KeyLen) +- keyindex = 0; +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get bytes from ARCFOUR CONTEXT (S-BOX) +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- +- Return Value: +- UCHAR - the value of the ARCFOUR CONTEXT (S-BOX) +- +- Note: +- +- ======================================================================== +-*/ +-UCHAR ARCFOUR_BYTE( +- IN PARCFOURCONTEXT Ctx) +-{ +- UINT x; +- UINT y; +- UCHAR sx, sy; +- PUCHAR state; +- +- state = Ctx->STATE; +- x = (Ctx->X + 1) & 0xff; +- sx = state[x]; +- y = (sx + Ctx->Y) & 0xff; +- sy = state[y]; +- Ctx->X = x; +- Ctx->Y = y; +- state[y] = sx; +- state[x] = sy; +- +- return(state[(sx + sy) & 0xff]); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Decryption Algorithm +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source data +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_DECRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source dta +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID ARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The Stream Cipher Encryption Algorithm which conform to the special requirement to encrypt GTK. +- +- Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) +- pDest Pointer to the Destination +- pSrc Pointer to the Source data +- Len Indicate the length of the Source dta +- +- +- ======================================================================== +-*/ +- +-VOID WPAARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) +-{ +- UINT i; +- //discard first 256 bytes +- for (i = 0; i < 256; i++) +- ARCFOUR_BYTE(Ctx); +- +- for (i = 0; i < Len; i++) +- pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Calculate a new FCS given the current FCS and the new data. +- +- Arguments: +- Fcs the original FCS value +- Cp pointer to the data which will be calculate the FCS +- Len the length of the data +- +- Return Value: +- UINT - FCS 32 bits +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-UINT RTMP_CALC_FCS32( +- IN UINT Fcs, +- IN PUCHAR Cp, +- IN INT Len) +-{ +- while (Len--) +- Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); +- +- return (Fcs); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Get last FCS and encrypt it to the destination +- +- Arguments: +- pDest Pointer to the Destination +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPSetICV( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest) +-{ +- pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ +- pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); +- +- ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAd->PrivateInfo.FCSCRC32, 4); +-} +diff --git a/drivers/staging/rt3090/common/cmm_wpa.c b/drivers/staging/rt3090/common/cmm_wpa.c +deleted file mode 100644 +index bf68ad8..0000000 +--- a/drivers/staging/rt3090/common/cmm_wpa.c ++++ /dev/null +@@ -1,3149 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- wpa.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Jan Lee 03-07-22 Initial +- Paul Lin 03-11-28 Modify for supplicant +-*/ +- +-#include "../rt_config.h" +- +- +-// WPA OUI +-UCHAR OUI_WPA_NONE_AKM[4] = {0x00, 0x50, 0xF2, 0x00}; +-UCHAR OUI_WPA_VERSION[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_WEP40[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_TKIP[4] = {0x00, 0x50, 0xF2, 0x02}; +-UCHAR OUI_WPA_CCMP[4] = {0x00, 0x50, 0xF2, 0x04}; +-UCHAR OUI_WPA_WEP104[4] = {0x00, 0x50, 0xF2, 0x05}; +-UCHAR OUI_WPA_8021X_AKM[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_PSK_AKM[4] = {0x00, 0x50, 0xF2, 0x02}; +-// WPA2 OUI +-UCHAR OUI_WPA2_WEP40[4] = {0x00, 0x0F, 0xAC, 0x01}; +-UCHAR OUI_WPA2_TKIP[4] = {0x00, 0x0F, 0xAC, 0x02}; +-UCHAR OUI_WPA2_CCMP[4] = {0x00, 0x0F, 0xAC, 0x04}; +-UCHAR OUI_WPA2_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x01}; +-UCHAR OUI_WPA2_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x02}; +-UCHAR OUI_WPA2_WEP104[4] = {0x00, 0x0F, 0xAC, 0x05}; +- +- +- +-static VOID ConstructEapolKeyData( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_LEN, +- OUT PEAPOL_PACKET pMsg); +- +-static VOID CalculateMIC( +- IN UCHAR KeyDescVer, +- IN UCHAR *PTK, +- OUT PEAPOL_PACKET pMsg); +- +-static VOID WpaEAPPacketAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLASFAlertAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLLogoffAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLStartAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-/* +- ========================================================================== +- Description: +- association state machine init, including state transition and timer init +- Parameters: +- S - pointer to the association state machine +- ========================================================================== +- */ +-VOID WpaStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(S, (STATE_MACHINE_FUNC *)Trans, MAX_WPA_PTK_STATE, MAX_WPA_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PTK, WPA_MACHINE_BASE); +- +- StateMachineSetAction(S, WPA_PTK, MT2_EAPPacket, (STATE_MACHINE_FUNC)WpaEAPPacketAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLStart, (STATE_MACHINE_FUNC)WpaEAPOLStartAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLLogoff, (STATE_MACHINE_FUNC)WpaEAPOLLogoffAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLASFAlert, (STATE_MACHINE_FUNC)WpaEAPOLASFAlertAction); +-} +- +-/* +- ========================================================================== +- Description: +- this is state machine function. +- When receiving EAP packets which is for 802.1x authentication use. +- Not use in PSK case +- Return: +- ========================================================================== +-*/ +-VOID WpaEAPPacketAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-VOID WpaEAPOLASFAlertAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-VOID WpaEAPOLLogoffAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-/* +- ========================================================================== +- Description: +- Start 4-way HS when rcv EAPOL_START which may create by our driver in assoc.c +- Return: +- ========================================================================== +-*/ +-VOID WpaEAPOLStartAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLStartAction ===> \n")); +- +- pHeader = (PHEADER_802_11)Elem->Msg; +- +- //For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. +- if (Elem->MsgLen == 6) +- pEntry = MacTableLookup(pAd, Elem->Msg); +- else +- { +- pEntry = MacTableLookup(pAd, pHeader->Addr2); +- } +- +- if (pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, (" PortSecured(%d), WpaState(%d), AuthMode(%d), PMKID_CacheIdx(%d) \n", pEntry->PortSecured, pEntry->WpaState, pEntry->AuthMode, pEntry->PMKID_CacheIdx)); +- +- if ((pEntry->PortSecured == WPA_802_1X_PORT_NOT_SECURED) +- && (pEntry->WpaState < AS_PTKSTART) +- && ((pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) || ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) && (pEntry->PMKID_CacheIdx != ENTRY_NOT_FOUND)))) +- { +- pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- pEntry->WpaState = AS_INITPSK; +- pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- NdisZeroMemory(pEntry->R_Counter, sizeof(pEntry->R_Counter)); +- pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; +- +- WPAStart4WayHS(pAd, pEntry, PEER_MSG1_RETRY_EXEC_INTV); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- This is state machine function. +- When receiving EAPOL packets which is for 802.1x key management. +- Use both in WPA, and WPAPSK case. +- In this function, further dispatch to different functions according to the received packet. 3 categories are : +- 1. normal 4-way pairwisekey and 2-way groupkey handshake +- 2. MIC error (Countermeasures attack) report packet from STA. +- 3. Request for pairwise/group key update from STA +- Return: +- ========================================================================== +-*/ +-VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; +- PEAPOL_PACKET pEapol_packet; +- KEY_INFO peerKeyInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLKeyAction ===>\n")); +- +- pHeader = (PHEADER_802_11)Elem->Msg; +- pEapol_packet = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pEapol_packet->KeyDesc.KeyInfo, sizeof(KEY_INFO)); +- +- hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); +- +- *((USHORT *)&peerKeyInfo) = cpu2le16(*((USHORT *)&peerKeyInfo)); +- +- do +- { +- pEntry = MacTableLookup(pAd, pHeader->Addr2); +- +- if (!pEntry || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- break; +- +- if (pEntry->AuthMode < Ndis802_11AuthModeWPA) +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPoL-Key frame from STA %02X-%02X-%02X-%02X-%02X-%02X\n", PRINT_MAC(pEntry->Addr))); +- +- if (((pEapol_packet->ProVer != EAPOL_VER) && (pEapol_packet->ProVer != EAPOL_VER2)) || +- ((pEapol_packet->KeyDesc.Type != WPA1_KEY_DESC) && (pEapol_packet->KeyDesc.Type != WPA2_KEY_DESC))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter does not match with WPA rule\n")); +- break; +- } +- +- // The value 1 shall be used for all EAPOL-Key frames to and from a STA when +- // neither the group nor pairwise ciphers are CCMP for Key Descriptor 1. +- if ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_TKIP)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(TKIP) \n")); +- break; +- } +- // The value 2 shall be used for all EAPOL-Key frames to and from a STA when +- // either the pairwise or the group cipher is AES-CCMP for Key Descriptor 2. +- else if ((pEntry->WepStatus == Ndis802_11Encryption3Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_AES)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(AES) \n")); +- break; +- } +- +- // Check if this STA is in class 3 state and the WPA state is started +- if ((pEntry->Sst == SST_ASSOC) && (pEntry->WpaState >= AS_INITPSK)) +- { +- // Check the Key Ack (bit 7) of the Key Information to determine the Authenticator +- // or not. +- // An EAPOL-Key frame that is sent by the Supplicant in response to an EAPOL- +- // Key frame from the Authenticator must not have the Ack bit set. +- if (peerKeyInfo.KeyAck == 1) +- { +- // The frame is snet by Authenticator. +- // So the Supplicant side shall handle this. +- +- if ((peerKeyInfo.Secure == 0) && (peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0) && (peerKeyInfo.KeyType == PAIRWISEKEY)) +- { +- // Process 1. the message 1 of 4-way HS in WPA or WPA2 +- // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) +- // 2. the message 3 of 4-way HS in WPA +- // EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) +- if (peerKeyInfo.KeyMic == 0) +- PeerPairMsg1Action(pAd, pEntry, Elem); +- else +- PeerPairMsg3Action(pAd, pEntry, Elem); +- } +- else if ((peerKeyInfo.Secure == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0)) +- { +- // Process 1. the message 3 of 4-way HS in WPA2 +- // EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) +- // 2. the message 1 of group KS in WPA or WPA2 +- // EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) +- if (peerKeyInfo.KeyType == PAIRWISEKEY) +- PeerPairMsg3Action(pAd, pEntry, Elem); +- else +- PeerGroupMsg1Action(pAd, pEntry, Elem); +- } +- } +- else +- { +- // The frame is snet by Supplicant. +- // So the Authenticator side shall handle this. +- if ((peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.KeyMic == 1)) +- { +- if (peerKeyInfo.Secure == 0 && peerKeyInfo.KeyType == PAIRWISEKEY) +- { +- // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) +- // Process 1. message 2 of 4-way HS in WPA or WPA2 +- // 2. message 4 of 4-way HS in WPA +- if (CONV_ARRARY_TO_UINT16(pEapol_packet->KeyDesc.KeyDataLen) == 0) +- { +- PeerPairMsg4Action(pAd, pEntry, Elem); +- } +- else +- { +- PeerPairMsg2Action(pAd, pEntry, Elem); +- } +- } +- else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == PAIRWISEKEY) +- { +- // EAPOL-Key(1,1,0,0,P,0,0,0,MIC,0) +- // Process message 4 of 4-way HS in WPA2 +- PeerPairMsg4Action(pAd, pEntry, Elem); +- } +- else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == GROUPKEY) +- { +- // EAPOL-Key(1,1,0,0,G,0,0,0,MIC,0) +- // Process message 2 of Group key HS in WPA or WPA2 +- PeerGroupMsg2Action(pAd, pEntry, &Elem->Msg[LENGTH_802_11], (Elem->MsgLen - LENGTH_802_11)); +- } +- } +- } +- } +- }while(FALSE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware encryption before really +- sent out to air. +- +- Arguments: +- pAd Pointer to our adapter +- PNDIS_PACKET Pointer to outgoing Ndis frame +- NumberOfFrag Number of fragment required +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN BOOLEAN bClearFrame) +-{ +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status; +- +- if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- return; +- +- do { +- // build a NDIS packet +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, pData, DataLen); +- if (Status != NDIS_STATUS_SUCCESS) +- break; +- +- +- if (bClearFrame) +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 1); +- else +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 0); +- { +- RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +- +- RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, MAIN_MBSSID); // set a default value +- if(pEntry->apidx != 0) +- RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, pEntry->apidx); +- +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid); +- RTMP_SET_PACKET_MOREDATA(pPacket, FALSE); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // send out the packet +- Status = STASendPacket(pAd, pPacket); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- UCHAR Index; +- +- // Dequeue one frame from TxSwQueue0..3 queue and process it +- // There are three place calling dequeue for TX ring. +- // 1. Here, right after queueing the frame. +- // 2. At the end of TxRingTxDone service routine. +- // 3. Upon NDIS call RTMPSendPackets +- if((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) +- { +- for(Index = 0; Index < 5; Index ++) +- if(pAd->TxSwQueue[Index].Number > 0) +- RTMPDeQueuePacket(pAd, FALSE, Index, MAX_TX_PROCESS); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- } while (FALSE); +-} +- +-/* +- ========================================================================== +- Description: +- This is a function to initilize 4-way handshake +- +- Return: +- +- ========================================================================== +-*/ +-VOID WPAStart4WayHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN ULONG TimeInterval) +-{ +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PUINT8 pBssid = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart4WayHS\n")); +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : The interface is closed...\n")); +- return; +- } +- +- +- if (pBssid == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : No corresponding Authenticator.\n")); +- return; +- } +- +- // Check the status +- if ((pEntry->WpaState > AS_PTKSTART) || (pEntry->WpaState < AS_INITPMK)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : Not expect calling\n")); +- return; +- } +- +- +- // Increment replay counter by 1 +- ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); +- +- // Randomly generate ANonce +- GenRandom(pAd, (UCHAR *)pBssid, pEntry->ANonce); +- +- // Construct EAPoL message - Pairwise Msg 1 +- // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_1, +- 0, // Default key index +- pEntry->ANonce, +- NULL, // TxRSC +- NULL, // GTK +- NULL, // RSNIE +- 0, // RSNIE length +- &EAPOLPKT); +- +- +- // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, Header802_3, +- LENGTH_802_3, (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, +- (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); +- +- // Trigger Retry Timer +- RTMPModTimer(&pEntry->RetryTimer, TimeInterval); +- +- // Update State +- pEntry->WpaState = AS_PTKSTART; +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart4WayHS: send Msg1 of 4-way \n")); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Pairwise key Msg-1 of 4-way handshaking and send Msg-2 +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID PeerPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR PTK[80]; +- UCHAR Header802_3[14]; +- PEAPOL_PACKET pMsg1; +- UINT MsgLen; +- EAPOL_PACKET EAPOLPKT; +- PUINT8 pCurrentAddr = NULL; +- PUINT8 pmk_ptr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg1Action \n")); +- +- if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- return; +- +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- return; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pCurrentAddr = pAd->CurrentAddress; +- pmk_ptr = pAd->StaCfg.PMK; +- group_cipher = pAd->StaCfg.GroupCipher; +- rsnie_ptr = pAd->StaCfg.RSN_IE; +- rsnie_len = pAd->StaCfg.RSNIE_Len; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Store the received frame +- pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; +- +- // Sanity Check peer Pairwise message 1 - Replay Counter +- if (PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pEntry) == FALSE) +- return; +- +- // Store Replay counter, it will use to verify message 3 and construct message 2 +- NdisMoveMemory(pEntry->R_Counter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Store ANonce +- NdisMoveMemory(pEntry->ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); +- +- // Generate random SNonce +- GenRandom(pAd, (UCHAR *)pCurrentAddr, pEntry->SNonce); +- +- { +- // Calculate PTK(ANonce, SNonce) +- WpaDerivePTK(pAd, +- pmk_ptr, +- pEntry->ANonce, +- pEntry->Addr, +- pEntry->SNonce, +- pCurrentAddr, +- PTK, +- LEN_PTK); +- +- // Save key to PTK entry +- NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); +- } +- +- // Update WpaState +- pEntry->WpaState = AS_PTKINIT_NEGOTIATING; +- +- // Construct EAPoL message - Pairwise Msg 2 +- // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_2, +- 0, // DefaultKeyIdx +- pEntry->SNonce, +- NULL, // TxRsc +- NULL, // GTK +- (UCHAR *)rsnie_ptr, +- rsnie_len, +- &EAPOLPKT); +- +- // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); +- +- RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); +-} +- +- +-/* +- ========================================================================== +- Description: +- When receiving the second packet of 4-way pairwisekey handshake. +- Return: +- ========================================================================== +-*/ +-VOID PeerPairMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR PTK[80]; +- BOOLEAN Cancelled; +- PHEADER_802_11 pHeader; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg2; +- UINT MsgLen; +- UCHAR Header802_3[LENGTH_802_3]; +- UCHAR TxTsc[6]; +- PUINT8 pBssid = NULL; +- PUINT8 pmk_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg2Action \n")); +- +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- return; +- +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- return; +- +- // check Entry in valid State +- if (pEntry->WpaState < AS_PTKSTART) +- return; +- +- +- +- // pointer to 802.11 header +- pHeader = (PHEADER_802_11)Elem->Msg; +- +- // skip 802.11_header(24-byte) and LLC_header(8) +- pMsg2 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; +- +- // Store SNonce +- NdisMoveMemory(pEntry->SNonce, pMsg2->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); +- +- { +- // Derive PTK +- WpaDerivePTK(pAd, +- (UCHAR *)pmk_ptr, +- pEntry->ANonce, // ANONCE +- (UCHAR *)pBssid, +- pEntry->SNonce, // SNONCE +- pEntry->Addr, +- PTK, +- LEN_PTK); +- +- NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); +- } +- +- // Sanity Check peer Pairwise message 2 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pMsg2, MsgLen, EAPOL_PAIR_MSG_2, pEntry) == FALSE) +- return; +- +- do +- { +- // delete retry timer +- RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); +- +- // Change state +- pEntry->WpaState = AS_PTKINIT_NEGOTIATING; +- +- // Increment replay counter by 1 +- ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); +- +- // Construct EAPoL message - Pairwise Msg 3 +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_3, +- default_key, +- pEntry->ANonce, +- TxTsc, +- (UCHAR *)gtk_ptr, +- (UCHAR *)rsnie_ptr, +- rsnie_len, +- &EAPOLPKT); +- +- // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, +- (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); +- +- pEntry->ReTryCounter = PEER_MSG3_RETRY_TIMER_CTR; +- RTMPSetTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); +- +- // Update State +- pEntry->WpaState = AS_PTKINIT_NEGOTIATING; +- }while(FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg2Action: send Msg3 of 4-way \n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Pairwise key Msg 3 of 4-way handshaking and send Msg 4 +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID PeerPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PHEADER_802_11 pHeader; +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg3; +- UINT MsgLen; +- PUINT8 pCurrentAddr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg3Action \n")); +- +- if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- return; +- +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- return; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pCurrentAddr = pAd->CurrentAddress; +- group_cipher = pAd->StaCfg.GroupCipher; +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Record 802.11 header & the received EAPOL packet Msg3 +- pHeader = (PHEADER_802_11) Elem->Msg; +- pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; +- +- // Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pMsg3, MsgLen, EAPOL_PAIR_MSG_3, pEntry) == FALSE) +- return; +- +- // Save Replay counter, it will use construct message 4 +- NdisMoveMemory(pEntry->R_Counter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Double check ANonce +- if (!NdisEqualMemory(pEntry->ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) +- { +- return; +- } +- +- // Construct EAPoL message - Pairwise Msg 4 +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_4, +- 0, // group key index not used in message 4 +- NULL, // Nonce not used in message 4 +- NULL, // TxRSC not used in message 4 +- NULL, // GTK not used in message 4 +- NULL, // RSN IE not used in message 4 +- 0, +- &EAPOLPKT); +- +- // Update WpaState +- pEntry->WpaState = AS_PTKINITDONE; +- +- // Update pairwise key +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- PCIPHER_KEY pSharedKey; +- +- pSharedKey = &pAd->SharedKey[BSS0][0]; +- +- NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); +- +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); +- pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pSharedKey->CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pSharedKey->CipherAlg = CIPHER_AES; +- else +- pSharedKey->CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pEntry); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // open 802.1x port control and privacy filter +- if (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK || +- pEntry->AuthMode == Ndis802_11AuthModeWPA2) +- { +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- +-#ifdef CONFIG_STA_SUPPORT +- STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +-#endif // CONFIG_STA_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", +- GetAuthMode(pEntry->AuthMode), +- GetEncryptType(pEntry->WepStatus), +- GetEncryptType(group_cipher))); +- } +- else +- { +- } +- +- // Init 802.3 header and send out +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg3Action: send Msg4 of 4-way \n")); +-} +- +-/* +- ========================================================================== +- Description: +- When receiving the last packet of 4-way pairwisekey handshake. +- Initilize 2-way groupkey handshake following. +- Return: +- ========================================================================== +-*/ +-VOID PeerPairMsg4Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PEAPOL_PACKET pMsg4; +- PHEADER_802_11 pHeader; +- UINT MsgLen; +- BOOLEAN Cancelled; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg4Action\n")); +- +- do +- { +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- break; +- +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2 ) ) +- break; +- +- if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) +- break; +- +- +- // pointer to 802.11 header +- pHeader = (PHEADER_802_11)Elem->Msg; +- +- // skip 802.11_header(24-byte) and LLC_header(8) +- pMsg4 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; +- +- // Sanity Check peer Pairwise message 4 - Replay Counter, MIC +- if (PeerWpaMessageSanity(pAd, pMsg4, MsgLen, EAPOL_PAIR_MSG_4, pEntry) == FALSE) +- break; +- +- // 3. uses the MLME.SETKEYS.request to configure PTK into MAC +- NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); +- +- // reset IVEIV in Asic +- AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, 1, 0); +- +- pEntry->PairwiseKey.KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pEntry->PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pEntry->PTK[TKIP_AP_RXMICK_OFFSET], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pEntry->PTK[TKIP_AP_TXMICK_OFFSET], LEN_TKIP_TXMICK); +- +- // Set pairwise key to Asic +- { +- pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; +- if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) +- pEntry->PairwiseKey.CipherAlg = CIPHER_TKIP; +- else if (pEntry->WepStatus == Ndis802_11Encryption3Enabled) +- pEntry->PairwiseKey.CipherAlg = CIPHER_AES; +- +- // Add Pair-wise key to Asic +- AsicAddPairwiseKeyEntry( +- pAd, +- pEntry->Addr, +- (UCHAR)pEntry->Aid, +- &pEntry->PairwiseKey); +- +- // update WCID attribute table and IVEIV table for this entry +- RTMPAddWcidAttributeEntry( +- pAd, +- pEntry->apidx, +- 0, +- pEntry->PairwiseKey.CipherAlg, +- pEntry); +- } +- +- // 4. upgrade state +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- pEntry->WpaState = AS_PTKINITDONE; +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- +- +- if (pEntry->AuthMode == Ndis802_11AuthModeWPA2 || +- pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) +- { +- pEntry->GTKState = REKEY_ESTABLISHED; +- RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); +- +- +- // send wireless event - for set key done WPA2 +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, +- GetEncryptType(group_cipher))); +- } +- else +- { +- // 5. init Group 2-way handshake if necessary. +- WPAStart2WayGroupHS(pAd, pEntry); +- +- pEntry->ReTryCounter = GROUP_MSG1_RETRY_TIMER_CTR; +- RTMPModTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); +- } +- }while(FALSE); +- +-} +- +-/* +- ========================================================================== +- Description: +- This is a function to send the first packet of 2-way groupkey handshake +- Return: +- +- ========================================================================== +-*/ +-VOID WPAStart2WayGroupHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry) +-{ +- UCHAR Header802_3[14]; +- UCHAR TxTsc[6]; +- EAPOL_PACKET EAPOLPKT; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- UCHAR default_key = 0; +- PUINT8 gnonce_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- PUINT8 pBssid = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart2WayGroupHS\n")); +- +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- return; +- +- +- do +- { +- // Increment replay counter by 1 +- ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); +- +- // Construct EAPoL message - Group Msg 1 +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_GROUP_MSG_1, +- default_key, +- (UCHAR *)gnonce_ptr, +- TxTsc, +- (UCHAR *)gtk_ptr, +- NULL, +- 0, +- &EAPOLPKT); +- +- // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, +- Header802_3, LENGTH_802_3, +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); +- +- +- +- }while (FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart2WayGroupHS : send out Group Message 1 \n")); +- +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Process Group key 2-way handshaking +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID PeerGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pGroup; +- UINT MsgLen; +- BOOLEAN Cancelled; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 pCurrentAddr = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg1Action \n")); +- +- if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- return; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pCurrentAddr = pAd->CurrentAddress; +- group_cipher = pAd->StaCfg.GroupCipher; +- default_key = pAd->StaCfg.DefaultKeyId; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) +- pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; +- MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; +- +- // Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pGroup, MsgLen, EAPOL_GROUP_MSG_1, pEntry) == FALSE) +- return; +- +- // delete retry timer +- RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); +- +- // Save Replay counter, it will use to construct message 2 +- NdisMoveMemory(pEntry->R_Counter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Construct EAPoL message - Group Msg 2 +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_GROUP_MSG_2, +- default_key, +- NULL, // Nonce not used +- NULL, // TxRSC not used +- NULL, // GTK not used +- NULL, // RSN IE not used +- 0, +- &EAPOLPKT); +- +- // open 802.1x port control and privacy filter +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- +-#ifdef CONFIG_STA_SUPPORT +- STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", +- GetAuthMode(pEntry->AuthMode), +- GetEncryptType(pEntry->WepStatus), +- GetEncryptType(group_cipher))); +- +- // init header and Fill Packet and send Msg 2 to authenticator +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerGroupMsg1Action: sned group message 2\n")); +-} +- +-/* +- ========================================================================== +- Description: +- When receiving the last packet of 2-way groupkey handshake. +- Return: +- ========================================================================== +-*/ +-VOID PeerGroupMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN VOID *Msg, +- IN UINT MsgLen) +-{ +- UINT Len; +- PUCHAR pData; +- BOOLEAN Cancelled; +- PEAPOL_PACKET pMsg2; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg2Action \n")); +- +- do +- { +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- break; +- +- if (MsgLen < (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- break; +- +- if (pEntry->WpaState != AS_PTKINITDONE) +- break; +- +- +- pData = (PUCHAR)Msg; +- pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); +- Len = MsgLen - LENGTH_802_1_H; +- +- // Sanity Check peer group message 2 - Replay Counter, MIC +- if (PeerWpaMessageSanity(pAd, pMsg2, Len, EAPOL_GROUP_MSG_2, pEntry) == FALSE) +- break; +- +- // 3. upgrade state +- +- RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); +- pEntry->GTKState = REKEY_ESTABLISHED; +- +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // send wireless event - for set key done WPA2 +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, GetEncryptType(group_cipher))); +- } +- else +- { +- // send wireless event - for set key done WPA +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA1_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA1, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, GetEncryptType(group_cipher))); +- } +- }while(FALSE); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Classify WPA EAP message type +- +- Arguments: +- EAPType Value of EAP message type +- MsgType Internal Message definition for MLME state machine +- +- Return Value: +- TRUE Found appropriate message type +- FALSE No appropriate message type +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- All these constants are defined in wpa.h +- For supplicant, there is only EAPOL Key message avaliable +- +- ======================================================================== +-*/ +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType) +-{ +- switch (EAPType) +- { +- case EAPPacket: +- *MsgType = MT2_EAPPacket; +- break; +- case EAPOLStart: +- *MsgType = MT2_EAPOLStart; +- break; +- case EAPOLLogoff: +- *MsgType = MT2_EAPOLLogoff; +- break; +- case EAPOLKey: +- *MsgType = MT2_EAPOLKey; +- break; +- case EAPOLASFAlert: +- *MsgType = MT2_EAPOLASFAlert; +- break; +- default: +- return FALSE; +- } +- return TRUE; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- The pseudo-random function(PRF) that hashes various inputs to +- derive a pseudo-random value. To add liveness to the pseudo-random +- value, a nonce should be one of the inputs. +- +- It is used to generate PTK, GTK or some specific random value. +- +- Arguments: +- UCHAR *key, - the key material for HMAC_SHA1 use +- INT key_len - the length of key +- UCHAR *prefix - a prefix label +- INT prefix_len - the length of the label +- UCHAR *data - a specific data with variable length +- INT data_len - the length of a specific data +- INT len - the output lenght +- +- Return Value: +- UCHAR *output - the calculated result +- +- Note: +- 802.11i-2004 Annex H.3 +- +- ======================================================================== +-*/ +-VOID PRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *prefix, +- IN INT prefix_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len) +-{ +- INT i; +- UCHAR *input; +- INT currentindex = 0; +- INT total_len; +- +- // Allocate memory for input +- os_alloc_mem(NULL, (PUCHAR *)&input, 1024); +- +- if (input == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); +- return; +- } +- +- // Generate concatenation input +- NdisMoveMemory(input, prefix, prefix_len); +- +- // Concatenate a single octet containing 0 +- input[prefix_len] = 0; +- +- // Concatenate specific data +- NdisMoveMemory(&input[prefix_len + 1], data, data_len); +- total_len = prefix_len + 1 + data_len; +- +- // Concatenate a single octet containing 0 +- // This octet shall be update later +- input[total_len] = 0; +- total_len++; +- +- // Iterate to calculate the result by hmac-sha-1 +- // Then concatenate to last result +- for (i = 0; i < (len + 19) / 20; i++) +- { +- HMAC_SHA1(key, key_len, input, total_len, &output[currentindex], SHA1_DIGEST_SIZE); +- currentindex += 20; +- +- // update the last octet +- input[total_len - 1]++; +- } +- os_free_mem(NULL, input); +-} +- +-/* +-* F(P, S, c, i) = U1 xor U2 xor ... Uc +-* U1 = PRF(P, S || Int(i)) +-* U2 = PRF(P, U1) +-* Uc = PRF(P, Uc-1) +-*/ +- +-static void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output) +-{ +- unsigned char digest[36], digest1[SHA1_DIGEST_SIZE]; +- int i, j; +- +- /* U1 = PRF(P, S || int(i)) */ +- memcpy(digest, ssid, ssidlength); +- digest[ssidlength] = (unsigned char)((count>>24) & 0xff); +- digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff); +- digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff); +- digest[ssidlength+3] = (unsigned char)(count & 0xff); +- HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest, ssidlength+4, digest1, SHA1_DIGEST_SIZE); // for WPA update +- +- /* output = U1 */ +- memcpy(output, digest1, SHA1_DIGEST_SIZE); +- +- for (i = 1; i < iterations; i++) +- { +- /* Un = PRF(P, Un-1) */ +- HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); // for WPA update +- memcpy(digest1, digest, SHA1_DIGEST_SIZE); +- +- /* output = output xor Un */ +- for (j = 0; j < SHA1_DIGEST_SIZE; j++) +- { +- output[j] ^= digest[j]; +- } +- } +-} +- +-/* +-* password - ascii string up to 63 characters in length +-* ssid - octet string up to 32 octets +-* ssidlength - length of ssid in octets +-* output must be 40 octets in length and outputs 256 bits of key +-*/ +-int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) +-{ +- if ((strlen(password) > 63) || (ssidlength > 32)) +- return 0; +- +- F(password, ssid, ssidlength, 4096, 1, output); +- F(password, ssid, ssidlength, 4096, 2, &output[SHA1_DIGEST_SIZE]); +- return 1; +-} +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- It utilizes PRF-384 or PRF-512 to derive session-specific keys from a PMK. +- It shall be called by 4-way handshake processing. +- +- Arguments: +- pAd - pointer to our pAdapter context +- PMK - pointer to PMK +- ANonce - pointer to ANonce +- AA - pointer to Authenticator Address +- SNonce - pointer to SNonce +- SA - pointer to Supplicant Address +- len - indicate the length of PTK (octet) +- +- Return Value: +- Output pointer to the PTK +- +- Note: +- Refer to IEEE 802.11i-2004 8.5.1.2 +- +- ======================================================================== +-*/ +-VOID WpaDerivePTK( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *PMK, +- IN UCHAR *ANonce, +- IN UCHAR *AA, +- IN UCHAR *SNonce, +- IN UCHAR *SA, +- OUT UCHAR *output, +- IN UINT len) +-{ +- UCHAR concatenation[76]; +- UINT CurrPos = 0; +- UCHAR temp[32]; +- UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ', +- 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n'}; +- +- // initiate the concatenation input +- NdisZeroMemory(temp, sizeof(temp)); +- NdisZeroMemory(concatenation, 76); +- +- // Get smaller address +- if (RTMPCompareMemory(SA, AA, 6) == 1) +- NdisMoveMemory(concatenation, AA, 6); +- else +- NdisMoveMemory(concatenation, SA, 6); +- CurrPos += 6; +- +- // Get larger address +- if (RTMPCompareMemory(SA, AA, 6) == 1) +- NdisMoveMemory(&concatenation[CurrPos], SA, 6); +- else +- NdisMoveMemory(&concatenation[CurrPos], AA, 6); +- +- // store the larger mac address for backward compatible of +- // ralink proprietary STA-key issue +- NdisMoveMemory(temp, &concatenation[CurrPos], MAC_ADDR_LEN); +- CurrPos += 6; +- +- // Get smaller Nonce +- if (RTMPCompareMemory(ANonce, SNonce, 32) == 0) +- NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue +- else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1) +- NdisMoveMemory(&concatenation[CurrPos], SNonce, 32); +- else +- NdisMoveMemory(&concatenation[CurrPos], ANonce, 32); +- CurrPos += 32; +- +- // Get larger Nonce +- if (RTMPCompareMemory(ANonce, SNonce, 32) == 0) +- NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue +- else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1) +- NdisMoveMemory(&concatenation[CurrPos], ANonce, 32); +- else +- NdisMoveMemory(&concatenation[CurrPos], SNonce, 32); +- CurrPos += 32; +- +- hex_dump("concatenation=", concatenation, 76); +- +- // Use PRF to generate PTK +- PRF(PMK, LEN_MASTER_KEY, Prefix, 22, concatenation, 76, output, len); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Generate random number by software. +- +- Arguments: +- pAd - pointer to our pAdapter context +- macAddr - pointer to local MAC address +- +- Return Value: +- +- Note: +- 802.1ii-2004 Annex H.5 +- +- ======================================================================== +-*/ +-VOID GenRandom( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *macAddr, +- OUT UCHAR *random) +-{ +- INT i, curr; +- UCHAR local[80], KeyCounter[32]; +- UCHAR result[80]; +- ULONG CurrentTime; +- UCHAR prefix[] = {'I', 'n', 'i', 't', ' ', 'C', 'o', 'u', 'n', 't', 'e', 'r'}; +- +- // Zero the related information +- NdisZeroMemory(result, 80); +- NdisZeroMemory(local, 80); +- NdisZeroMemory(KeyCounter, 32); +- +- for (i = 0; i < 32; i++) +- { +- // copy the local MAC address +- COPY_MAC_ADDR(local, macAddr); +- curr = MAC_ADDR_LEN; +- +- // concatenate the current time +- NdisGetSystemUpTime(&CurrentTime); +- NdisMoveMemory(&local[curr], &CurrentTime, sizeof(CurrentTime)); +- curr += sizeof(CurrentTime); +- +- // concatenate the last result +- NdisMoveMemory(&local[curr], result, 32); +- curr += 32; +- +- // concatenate a variable +- NdisMoveMemory(&local[curr], &i, 2); +- curr += 2; +- +- // calculate the result +- PRF(KeyCounter, 32, prefix,12, local, curr, result, 32); +- } +- +- NdisMoveMemory(random, result, 32); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Build cipher suite in RSN-IE. +- It only shall be called by RTMPMakeRSNIE. +- +- Arguments: +- pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 +- WepStatus - indicate the encryption type +- bMixCipher - a boolean to indicate the pairwise cipher and group +- cipher are the same or not +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-static VOID RTMPMakeRsnIeCipher( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT WepStatus, +- IN BOOLEAN bMixCipher, +- IN UCHAR FlexibleCipher, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) +-{ +- UCHAR PairwiseCnt; +- +- *rsn_len = 0; +- +- // decide WPA2 or WPA1 +- if (ElementID == Wpa2Ie) +- { +- RSNIE2 *pRsnie_cipher = (RSNIE2*)pRsnIe; +- +- // Assign the verson as 1 +- pRsnie_cipher->version = 1; +- +- switch (WepStatus) +- { +- // TKIP mode +- case Ndis802_11Encryption2Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); +- *rsn_len = sizeof(RSNIE2); +- break; +- +- // AES mode +- case Ndis802_11Encryption3Enabled: +- if (bMixCipher) +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- else +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_CCMP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_CCMP, 4); +- *rsn_len = sizeof(RSNIE2); +- break; +- +- // TKIP-AES mix mode +- case Ndis802_11Encryption4Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- +- PairwiseCnt = 1; +- // Insert WPA2 TKIP as the first pairwise cipher +- if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); +- // Insert WPA2 AES as the secondary pairwise cipher +- if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4); +- PairwiseCnt = 2; +- } +- } +- else +- { +- // Insert WPA2 AES as the first pairwise cipher +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_CCMP, 4); +- } +- +- pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE2) + (4 * (PairwiseCnt - 1)); +- break; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) +- { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; +- switch(GroupCipher) +- { +- case Ndis802_11GroupWEP40Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_WEP40, 4); +- break; +- case Ndis802_11GroupWEP104Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_WEP104, 4); +- break; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // swap for big-endian platform +- pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); +- pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); +- } +- else +- { +- RSNIE *pRsnie_cipher = (RSNIE*)pRsnIe; +- +- // Assign OUI and version +- NdisMoveMemory(pRsnie_cipher->oui, OUI_WPA_VERSION, 4); +- pRsnie_cipher->version = 1; +- +- switch (WepStatus) +- { +- // TKIP mode +- case Ndis802_11Encryption2Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); +- *rsn_len = sizeof(RSNIE); +- break; +- +- // AES mode +- case Ndis802_11Encryption3Enabled: +- if (bMixCipher) +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- else +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_CCMP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_CCMP, 4); +- *rsn_len = sizeof(RSNIE); +- break; +- +- // TKIP-AES mix mode +- case Ndis802_11Encryption4Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- +- PairwiseCnt = 1; +- // Insert WPA TKIP as the first pairwise cipher +- if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); +- // Insert WPA AES as the secondary pairwise cipher +- if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4); +- PairwiseCnt = 2; +- } +- } +- else +- { +- // Insert WPA AES as the first pairwise cipher +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_CCMP, 4); +- } +- +- pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE) + (4 * (PairwiseCnt - 1)); +- break; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) +- { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; +- switch(GroupCipher) +- { +- case Ndis802_11GroupWEP40Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_WEP40, 4); +- break; +- case Ndis802_11GroupWEP104Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_WEP104, 4); +- break; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // swap for big-endian platform +- pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); +- pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Build AKM suite in RSN-IE. +- It only shall be called by RTMPMakeRSNIE. +- +- Arguments: +- pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 +- AuthMode - indicate the authentication mode +- apidx - indicate the interface index +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-static VOID RTMPMakeRsnIeAKM( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT AuthMode, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) +-{ +- RSNIE_AUTH *pRsnie_auth; +- UCHAR AkmCnt = 1; // default as 1 +- +- pRsnie_auth = (RSNIE_AUTH*)(pRsnIe + (*rsn_len)); +- +- // decide WPA2 or WPA1 +- if (ElementID == Wpa2Ie) +- { +- +- switch (AuthMode) +- { +- case Ndis802_11AuthModeWPA2: +- case Ndis802_11AuthModeWPA1WPA2: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPA2PSK: +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4); +- break; +- default: +- AkmCnt = 0; +- break; +- +- } +- } +- else +- { +- switch (AuthMode) +- { +- case Ndis802_11AuthModeWPA: +- case Ndis802_11AuthModeWPA1WPA2: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_8021X_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPAPSK: +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_PSK_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPANone: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_NONE_AKM, 4); +- break; +- default: +- AkmCnt = 0; +- break; +- } +- } +- +- pRsnie_auth->acount = AkmCnt; +- pRsnie_auth->acount = cpu2le16(pRsnie_auth->acount); +- +- // update current RSNIE length +- (*rsn_len) += (sizeof(RSNIE_AUTH) + (4 * (AkmCnt - 1))); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Build capability in RSN-IE. +- It only shall be called by RTMPMakeRSNIE. +- +- Arguments: +- pAd - pointer to our pAdapter context +- ElementID - indicate the WPA1 or WPA2 +- apidx - indicate the interface index +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-static VOID RTMPMakeRsnIeCap( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) +-{ +- RSN_CAPABILITIES *pRSN_Cap; +- +- // it could be ignored in WPA1 mode +- if (ElementID == WpaIe) +- return; +- +- pRSN_Cap = (RSN_CAPABILITIES*)(pRsnIe + (*rsn_len)); +- +- +- pRSN_Cap->word = cpu2le16(pRSN_Cap->word); +- +- (*rsn_len) += sizeof(RSN_CAPABILITIES); // update current RSNIE length +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Build RSN IE context. It is not included element-ID and length. +- +- Arguments: +- pAd - pointer to our pAdapter context +- AuthMode - indicate the authentication mode +- WepStatus - indicate the encryption type +- apidx - indicate the interface index +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPMakeRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, +- IN UINT WepStatus, +- IN UCHAR apidx) +-{ +- PUCHAR pRsnIe = NULL; // primary RSNIE +- UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE +- UCHAR *rsnielen_ex_cur_p = 0; // the length of the secondary RSNIE +- UCHAR PrimaryRsnie; +- BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different +- UCHAR p_offset; +- WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode +- +- rsnielen_cur_p = NULL; +- rsnielen_ex_cur_p = NULL; +- +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- if (AuthMode < Ndis802_11AuthModeWPA) +- return; +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- // Support WPAPSK or WPA2PSK in STA-Infra mode +- // Support WPANone in STA-Adhoc mode +- if ((AuthMode != Ndis802_11AuthModeWPAPSK) && +- (AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (AuthMode != Ndis802_11AuthModeWPANone) +- ) +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("==> RTMPMakeRSNIE(STA)\n")); +- +- // Zero RSNIE context +- pAd->StaCfg.RSNIE_Len = 0; +- NdisZeroMemory(pAd->StaCfg.RSN_IE, MAX_LEN_OF_RSNIE); +- +- // Pointer to RSNIE +- rsnielen_cur_p = &pAd->StaCfg.RSNIE_Len; +- pRsnIe = pAd->StaCfg.RSN_IE; +- +- bMixCipher = pAd->StaCfg.bMixCipher; +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- // indicate primary RSNIE as WPA or WPA2 +- if ((AuthMode == Ndis802_11AuthModeWPA) || +- (AuthMode == Ndis802_11AuthModeWPAPSK) || +- (AuthMode == Ndis802_11AuthModeWPANone) || +- (AuthMode == Ndis802_11AuthModeWPA1WPA2) || +- (AuthMode == Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- PrimaryRsnie = WpaIe; +- else +- PrimaryRsnie = Wpa2Ie; +- +- { +- // Build the primary RSNIE +- // 1. insert cipher suite +- RTMPMakeRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, FlexibleCipher, pRsnIe, &p_offset); +- +- // 2. insert AKM +- RTMPMakeRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset); +- +- // 3. insert capability +- RTMPMakeRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset); +- } +- +- // 4. update the RSNIE length +- *rsnielen_cur_p = p_offset; +- +- hex_dump("The primary RSNIE", pRsnIe, (*rsnielen_cur_p)); +- +- +-} +- +-/* +- ========================================================================== +- Description: +- Check whether the received frame is EAP frame. +- +- Arguments: +- pAd - pointer to our pAdapter context +- pEntry - pointer to active entry +- pData - the received frame +- DataByteCount - the received frame's length +- FromWhichBSSID - indicate the interface index +- +- Return: +- TRUE - This frame is EAP frame +- FALSE - otherwise +- ========================================================================== +-*/ +-BOOLEAN RTMPCheckWPAframe( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, +- IN UCHAR FromWhichBSSID) +-{ +- ULONG Body_len; +- BOOLEAN Cancelled; +- +- +- if(DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H)) +- return FALSE; +- +- +- // Skip LLC header +- if (NdisEqualMemory(SNAP_802_1H, pData, 6) || +- // Cisco 1200 AP may send packet with SNAP_BRIDGE_TUNNEL +- NdisEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)) +- { +- pData += 6; +- } +- // Skip 2-bytes EAPoL type +- if (NdisEqualMemory(EAPOL, pData, 2)) +-// if (*(UINT16 *)EAPOL == *(UINT16 *)pData) +- { +- pData += 2; +- } +- else +- return FALSE; +- +- switch (*(pData+1)) +- { +- case EAPPacket: +- Body_len = (*(pData+2)<<8) | (*(pData+3)); +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAP-Packet frame, TYPE = 0, Length = %ld\n", Body_len)); +- break; +- case EAPOLStart: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL-Start frame, TYPE = 1 \n")); +- if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Cancel the EnqueueEapolStartTimerRunning \n")); +- RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled); +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; +- } +- break; +- case EAPOLLogoff: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOLLogoff frame, TYPE = 2 \n")); +- break; +- case EAPOLKey: +- Body_len = (*(pData+2)<<8) | (*(pData+3)); +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL-Key frame, TYPE = 3, Length = %ld\n", Body_len)); +- break; +- case EAPOLASFAlert: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOLASFAlert frame, TYPE = 4 \n")); +- break; +- default: +- return FALSE; +- +- } +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Report the EAP message type +- +- Arguments: +- msg - EAPOL_PAIR_MSG_1 +- EAPOL_PAIR_MSG_2 +- EAPOL_PAIR_MSG_3 +- EAPOL_PAIR_MSG_4 +- EAPOL_GROUP_MSG_1 +- EAPOL_GROUP_MSG_2 +- +- Return: +- message type string +- +- ========================================================================== +-*/ +-PSTRING GetEapolMsgType(CHAR msg) +-{ +- if(msg == EAPOL_PAIR_MSG_1) +- return "Pairwise Message 1"; +- else if(msg == EAPOL_PAIR_MSG_2) +- return "Pairwise Message 2"; +- else if(msg == EAPOL_PAIR_MSG_3) +- return "Pairwise Message 3"; +- else if(msg == EAPOL_PAIR_MSG_4) +- return "Pairwise Message 4"; +- else if(msg == EAPOL_GROUP_MSG_1) +- return "Group Message 1"; +- else if(msg == EAPOL_GROUP_MSG_2) +- return "Group Message 2"; +- else +- return "Invalid Message"; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Check Sanity RSN IE of EAPoL message +- +- Arguments: +- +- Return Value: +- +- +- ======================================================================== +-*/ +-BOOLEAN RTMPCheckRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- IN MAC_TABLE_ENTRY *pEntry, +- OUT UCHAR *Offset) +-{ +- PUCHAR pVIE; +- UCHAR len; +- PEID_STRUCT pEid; +- BOOLEAN result = FALSE; +- +- pVIE = pData; +- len = DataLen; +- *Offset = 0; +- +- while (len > sizeof(RSNIE2)) +- { +- pEid = (PEID_STRUCT) pVIE; +- // WPA RSN IE +- if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) +- { +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA || pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) && +- (NdisEqualMemory(pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) && +- (pEntry->RSNIE_Len == (pEid->Len + 2))) +- { +- result = TRUE; +- } +- +- *Offset += (pEid->Len + 2); +- } +- // WPA2 RSN IE +- else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) +- { +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 || pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) && +- (pEid->Eid == pEntry->RSN_IE[0]) && +- ((pEid->Len + 2) >= pEntry->RSNIE_Len) && +- (NdisEqualMemory(pEid->Octet, &pEntry->RSN_IE[2], pEntry->RSNIE_Len - 2))) +- { +- +- result = TRUE; +- } +- +- *Offset += (pEid->Len + 2); +- } +- else +- { +- break; +- } +- +- pVIE += (pEid->Len + 2); +- len -= (pEid->Len + 2); +- } +- +- +- return result; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Parse KEYDATA field. KEYDATA[] May contain 2 RSN IE and optionally GTK. +- GTK is encaptulated in KDE format at p.83 802.11i D10 +- +- Arguments: +- +- Return Value: +- +- Note: +- 802.11i D10 +- +- ======================================================================== +-*/ +-BOOLEAN RTMPParseEapolKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, +- IN BOOLEAN bWPA2, +- IN MAC_TABLE_ENTRY *pEntry) +-{ +- PKDE_ENCAP pKDE = NULL; +- PUCHAR pMyKeyData = pKeyData; +- UCHAR KeyDataLength = KeyDataLen; +- UCHAR GTKLEN = 0; +- UCHAR DefaultIdx = 0; +- UCHAR skip_offset; +- +- // Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it +- if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) +- { +- // Check RSN IE whether it is WPA2/WPA2PSK +- if (!RTMPCheckRSNIE(pAd, pKeyData, KeyDataLen, pEntry, &skip_offset)) +- { +- // send wireless event - for RSN IE different +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_RSNIE_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_ERROR, ("RSN_IE Different in msg %d of 4-way handshake!\n", MsgType)); +- hex_dump("Receive RSN_IE ", pKeyData, KeyDataLen); +- hex_dump("Desired RSN_IE ", pEntry->RSN_IE, pEntry->RSNIE_Len); +- +- return FALSE; +- } +- else +- { +- if (bWPA2 && MsgType == EAPOL_PAIR_MSG_3) +- { +- WpaShowAllsuite(pMyKeyData, skip_offset); +- +- // skip RSN IE +- pMyKeyData += skip_offset; +- KeyDataLength -= skip_offset; +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPParseEapolKeyData ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", skip_offset)); +- } +- else +- return TRUE; +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPParseEapolKeyData ==> KeyDataLength %d without RSN_IE \n", KeyDataLength)); +- //hex_dump("remain data", pMyKeyData, KeyDataLength); +- +- +- // Parse EKD format in pairwise_msg_3_WPA2 && group_msg_1_WPA2 +- if (bWPA2 && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) +- { +- if (KeyDataLength >= 8) // KDE format exclude GTK length +- { +- pKDE = (PKDE_ENCAP) pMyKeyData; +- +- +- DefaultIdx = pKDE->GTKEncap.Kid; +- +- // Sanity check - KED length +- if (KeyDataLength < (pKDE->Len + 2)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: The len from KDE is too short \n")); +- return FALSE; +- } +- +- // Get GTK length - refer to IEEE 802.11i-2004 p.82 +- GTKLEN = pKDE->Len -6; +- if (GTKLEN < LEN_AES_KEY) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN)); +- return FALSE; +- } +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: KDE format length is too short \n")); +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("GTK in KDE format ,DefaultKeyID=%d, KeyLen=%d \n", DefaultIdx, GTKLEN)); +- // skip it +- pMyKeyData += 8; +- KeyDataLength -= 8; +- +- } +- else if (!bWPA2 && MsgType == EAPOL_GROUP_MSG_1) +- { +- DefaultIdx = GroupKeyIndex; +- DBGPRINT(RT_DEBUG_TRACE, ("GTK DefaultKeyID=%d \n", DefaultIdx)); +- } +- +- // Sanity check - shared key index must be 1 ~ 3 +- if (DefaultIdx < 1 || DefaultIdx > 3) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key index(%d) is invalid in %s %s \n", DefaultIdx, ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); +- return FALSE; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- PCIPHER_KEY pSharedKey; +- +- // set key material, TxMic and RxMic +- NdisMoveMemory(pAd->StaCfg.GTK, pMyKeyData, 32); +- pAd->StaCfg.DefaultKeyId = DefaultIdx; +- +- pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; +- +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); +- pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); +- +- // Update Shared Key CipherAlg +- pSharedKey->CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pSharedKey->CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pSharedKey->CipherAlg = CIPHER_AES; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) +- pSharedKey->CipherAlg = CIPHER_WEP64; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- pSharedKey->CipherAlg = CIPHER_WEP128; +- +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- NULL); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- return TRUE; +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Construct EAPoL message for WPA handshaking +- Its format is below, +- +- +--------------------+ +- | Protocol Version | 1 octet +- +--------------------+ +- | Protocol Type | 1 octet +- +--------------------+ +- | Body Length | 2 octets +- +--------------------+ +- | Descriptor Type | 1 octet +- +--------------------+ +- | Key Information | 2 octets +- +--------------------+ +- | Key Length | 1 octet +- +--------------------+ +- | Key Repaly Counter | 8 octets +- +--------------------+ +- | Key Nonce | 32 octets +- +--------------------+ +- | Key IV | 16 octets +- +--------------------+ +- | Key RSC | 8 octets +- +--------------------+ +- | Key ID or Reserved | 8 octets +- +--------------------+ +- | Key MIC | 16 octets +- +--------------------+ +- | Key Data Length | 2 octets +- +--------------------+ +- | Key Data | n octets +- +--------------------+ +- +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ConstructEapolMsg( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *KeyNonce, +- IN UCHAR *TxRSC, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_Len, +- OUT PEAPOL_PACKET pMsg) +-{ +- BOOLEAN bWPA2 = FALSE; +- UCHAR KeyDescVer; +- +- // Choose WPA2 or not +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || +- (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- bWPA2 = TRUE; +- +- // Init Packet and Fill header +- pMsg->ProVer = EAPOL_VER; +- pMsg->ProType = EAPOLKey; +- +- // Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field +- SET_UINT16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); +- +- // Fill in EAPoL descriptor +- if (bWPA2) +- pMsg->KeyDesc.Type = WPA2_KEY_DESC; +- else +- pMsg->KeyDesc.Type = WPA1_KEY_DESC; +- +- // Key Descriptor Version (bits 0-2) specifies the key descriptor version type +- { +- // Fill in Key information, refer to IEEE Std 802.11i-2004 page 78 +- // When either the pairwise or the group cipher is AES, the DESC_TYPE_AES(2) shall be used. +- KeyDescVer = (((pEntry->WepStatus == Ndis802_11Encryption3Enabled) || +- (GroupKeyWepStatus == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP)); +- } +- +- pMsg->KeyDesc.KeyInfo.KeyDescVer = KeyDescVer; +- +- // Specify Key Type as Group(0) or Pairwise(1) +- if (MsgType >= EAPOL_GROUP_MSG_1) +- pMsg->KeyDesc.KeyInfo.KeyType = GROUPKEY; +- else +- pMsg->KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; +- +- // Specify Key Index, only group_msg1_WPA1 +- if (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1)) +- pMsg->KeyDesc.KeyInfo.KeyIndex = DefaultKeyIdx; +- +- if (MsgType == EAPOL_PAIR_MSG_3) +- pMsg->KeyDesc.KeyInfo.Install = 1; +- +- if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1)) +- pMsg->KeyDesc.KeyInfo.KeyAck = 1; +- +- if (MsgType != EAPOL_PAIR_MSG_1) +- pMsg->KeyDesc.KeyInfo.KeyMic = 1; +- +- if ((bWPA2 && (MsgType >= EAPOL_PAIR_MSG_3)) || +- (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1))) +- { +- pMsg->KeyDesc.KeyInfo.Secure = 1; +- } +- +- if (bWPA2 && ((MsgType == EAPOL_PAIR_MSG_3) || +- (MsgType == EAPOL_GROUP_MSG_1))) +- { +- pMsg->KeyDesc.KeyInfo.EKD_DL = 1; +- } +- +- // key Information element has done. +- *(USHORT *)(&pMsg->KeyDesc.KeyInfo) = cpu2le16(*(USHORT *)(&pMsg->KeyDesc.KeyInfo)); +- +- // Fill in Key Length +- { +- if (MsgType >= EAPOL_GROUP_MSG_1) +- { +- // the length of group key cipher +- pMsg->KeyDesc.KeyLength[1] = ((GroupKeyWepStatus == Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : LEN_AES_KEY); +- } +- else +- { +- // the length of pairwise key cipher +- pMsg->KeyDesc.KeyLength[1] = ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : LEN_AES_KEY); +- } +- } +- +- // Fill in replay counter +- NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY); +- +- // Fill Key Nonce field +- // ANonce : pairwise_msg1 & pairwise_msg3 +- // SNonce : pairwise_msg2 +- // GNonce : group_msg1_wpa1 +- if ((MsgType <= EAPOL_PAIR_MSG_3) || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)))) +- NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, LEN_KEY_DESC_NONCE); +- +- // Fill key IV - WPA2 as 0, WPA1 as random +- if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) +- { +- // Suggest IV be random number plus some number, +- NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], LEN_KEY_DESC_IV); +- pMsg->KeyDesc.KeyIv[15] += 2; +- } +- +- // Fill Key RSC field +- // It contains the RSC for the GTK being installed. +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) +- { +- NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6); +- } +- +- // Clear Key MIC field for MIC calculation later +- NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- +- ConstructEapolKeyData(pEntry, +- GroupKeyWepStatus, +- KeyDescVer, +- MsgType, +- DefaultKeyIdx, +- GTK, +- RSNIE, +- RSNIE_Len, +- pMsg); +- +- // Calculate MIC and fill in KeyMic Field except Pairwise Msg 1. +- if (MsgType != EAPOL_PAIR_MSG_1) +- { +- CalculateMIC(KeyDescVer, pEntry->PTK, pMsg); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> ConstructEapolMsg for %s %s\n", ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); +- DBGPRINT(RT_DEBUG_TRACE, (" Body length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->Body_Len))); +- DBGPRINT(RT_DEBUG_TRACE, (" Key length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyLength))); +- +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Construct the Key Data field of EAPoL message +- +- Arguments: +- pAd Pointer to our adapter +- Elem Message body +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID ConstructEapolKeyData( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_LEN, +- OUT PEAPOL_PACKET pMsg) +-{ +- UCHAR *mpool, *Key_Data, *Rc4GTK; +- UCHAR ekey[(LEN_KEY_DESC_IV+LEN_EAP_EK)]; +- ULONG data_offset; +- BOOLEAN bWPA2Capable = FALSE; +- PRTMP_ADAPTER pAd = pEntry->pAd; +- BOOLEAN GTK_Included = FALSE; +- +- // Choose WPA2 or not +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || +- (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- bWPA2Capable = TRUE; +- +- if (MsgType == EAPOL_PAIR_MSG_1 || +- MsgType == EAPOL_PAIR_MSG_4 || +- MsgType == EAPOL_GROUP_MSG_2) +- return; +- +- // allocate memory pool +- os_alloc_mem(NULL, (PUCHAR *)&mpool, 1500); +- +- if (mpool == NULL) +- return; +- +- /* Rc4GTK Len = 512 */ +- Rc4GTK = (UCHAR *) ROUND_UP(mpool, 4); +- /* Key_Data Len = 512 */ +- Key_Data = (UCHAR *) ROUND_UP(Rc4GTK + 512, 4); +- +- NdisZeroMemory(Key_Data, 512); +- SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, 0); +- data_offset = 0; +- +- // Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 +- if (RSNIE_LEN && ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3))) +- { +- PUINT8 pmkid_ptr = NULL; +- UINT8 pmkid_len = 0; +- +- +- RTMPInsertRSNIE(&Key_Data[data_offset], +- (PULONG)&data_offset, +- RSNIE, +- RSNIE_LEN, +- pmkid_ptr, +- pmkid_len); +- } +- +- +- // Encapsulate KDE format in pairwise_msg3_WPA2 & group_msg1_WPA2 +- if (bWPA2Capable && ((MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1))) +- { +- // Key Data Encapsulation (KDE) format - 802.11i-2004 Figure-43w and Table-20h +- Key_Data[data_offset + 0] = 0xDD; +- +- if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) +- { +- Key_Data[data_offset + 1] = 0x16;// 4+2+16(OUI+DataType+DataField) +- } +- else +- { +- Key_Data[data_offset + 1] = 0x26;// 4+2+32(OUI+DataType+DataField) +- } +- +- Key_Data[data_offset + 2] = 0x00; +- Key_Data[data_offset + 3] = 0x0F; +- Key_Data[data_offset + 4] = 0xAC; +- Key_Data[data_offset + 5] = 0x01; +- +- // GTK KDE format - 802.11i-2004 Figure-43x +- Key_Data[data_offset + 6] = (DefaultKeyIdx & 0x03); +- Key_Data[data_offset + 7] = 0x00; // Reserved Byte +- +- data_offset += 8; +- } +- +- +- // Encapsulate GTK +- // Only for pairwise_msg3_WPA2 and group_msg1 +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2Capable) || (MsgType == EAPOL_GROUP_MSG_1)) +- { +- // Fill in GTK +- if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) +- { +- NdisMoveMemory(&Key_Data[data_offset], GTK, LEN_AES_KEY); +- data_offset += LEN_AES_KEY; +- } +- else +- { +- NdisMoveMemory(&Key_Data[data_offset], GTK, TKIP_GTK_LENGTH); +- data_offset += TKIP_GTK_LENGTH; +- } +- +- GTK_Included = TRUE; +- } +- +- +- // This whole key-data field shall be encrypted if a GTK is included. +- // Encrypt the data material in key data field with KEK +- if (GTK_Included) +- { +- //hex_dump("GTK_Included", Key_Data, data_offset); +- +- if ( +- (keyDescVer == DESC_TYPE_AES)) +- { +- UCHAR remainder = 0; +- UCHAR pad_len = 0; +- +- // Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, +- // shall be used to encrypt the Key Data field using the KEK field from +- // the derived PTK. +- +- // If the Key Data field uses the NIST AES key wrap, then the Key Data field +- // shall be padded before encrypting if the key data length is less than 16 +- // octets or if it is not a multiple of 8. The padding consists of appending +- // a single octet 0xdd followed by zero or more 0x00 octets. +- if ((remainder = data_offset & 0x07) != 0) +- { +- INT i; +- +- pad_len = (8 - remainder); +- Key_Data[data_offset] = 0xDD; +- for (i = 1; i < pad_len; i++) +- Key_Data[data_offset + i] = 0; +- +- data_offset += pad_len; +- } +- +- AES_GTK_KEY_WRAP(&pEntry->PTK[16], Key_Data, data_offset, Rc4GTK); +- // AES wrap function will grow 8 bytes in length +- data_offset += 8; +- } +- else +- { +- /* Key Descriptor Version 1: ARC4 is used to encrypt the Key Data field +- using the KEK field from the derived PTK. */ +- +- // PREPARE Encrypted "Key DATA" field. (Encrypt GTK with RC4, usinf PTK[16]->[31] as Key, IV-field as IV) +- // put TxTsc in Key RSC field +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. +- +- // ekey is the contanetion of IV-field, and PTK[16]->PTK[31] +- NdisMoveMemory(ekey, pMsg->KeyDesc.KeyIv, LEN_KEY_DESC_IV); +- NdisMoveMemory(&ekey[LEN_KEY_DESC_IV], &pEntry->PTK[16], LEN_EAP_EK); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); //INIT SBOX, KEYLEN+3(IV) +- pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, Key_Data, data_offset); +- WPAARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, Rc4GTK, Key_Data, data_offset); +- } +- +- NdisMoveMemory(pMsg->KeyDesc.KeyData, Rc4GTK, data_offset); +- } +- else +- { +- NdisMoveMemory(pMsg->KeyDesc.KeyData, Key_Data, data_offset); +- } +- +- // Update key data length field and total body length +- SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, data_offset); +- INC_UINT16_TO_ARRARY(pMsg->Body_Len, data_offset); +- +- os_free_mem(NULL, mpool); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Calcaulate MIC. It is used during 4-ways handsharking. +- +- Arguments: +- pAd - pointer to our pAdapter context +- PeerWepStatus - indicate the encryption type +- +- Return Value: +- +- Note: +- +- ======================================================================== +-*/ +-static VOID CalculateMIC( +- IN UCHAR KeyDescVer, +- IN UCHAR *PTK, +- OUT PEAPOL_PACKET pMsg) +-{ +- UCHAR *OutBuffer; +- ULONG FrameLen = 0; +- UCHAR mic[LEN_KEY_DESC_MIC]; +- UCHAR digest[80]; +- +- // allocate memory for MIC calculation +- os_alloc_mem(NULL, (PUCHAR *)&OutBuffer, 512); +- +- if (OutBuffer == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); +- return; +- } +- +- // make a frame for calculating MIC. +- MakeOutgoingFrame(OutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, +- END_OF_ARGS); +- +- NdisZeroMemory(mic, sizeof(mic)); +- +- // Calculate MIC +- if (KeyDescVer == DESC_TYPE_AES) +- { +- HMAC_SHA1(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- HMAC_MD5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, mic, MD5_DIGEST_SIZE); +- } +- +- // store the calculated MIC +- NdisMoveMemory(pMsg->KeyDesc.KeyMic, mic, LEN_KEY_DESC_MIC); +- +- os_free_mem(NULL, OutBuffer); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Some received frames can't decrypt by Asic, so decrypt them by software. +- +- Arguments: +- pAd - pointer to our pAdapter context +- PeerWepStatus - indicate the encryption type +- +- Return Value: +- NDIS_STATUS_SUCCESS - decryption successful +- NDIS_STATUS_FAILURE - decryption failure +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPSoftDecryptBroadCastData( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, +- IN PCIPHER_KEY pShard_key) +-{ +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- +- +- +- // handle WEP decryption +- if (GroupCipher == Ndis802_11Encryption1Enabled) +- { +- if (RTMPSoftDecryptWEP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, pShard_key)) +- { +- +- //Minus IV[4] & ICV[4] +- pRxWI->MPDUtotalByteCount -= 8; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : Software decrypt WEP data fails.\n")); +- // give up this frame +- return NDIS_STATUS_FAILURE; +- } +- } +- // handle TKIP decryption +- else if (GroupCipher == Ndis802_11Encryption2Enabled) +- { +- if (RTMPSoftDecryptTKIP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, pShard_key)) +- { +- +- //Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV +- pRxWI->MPDUtotalByteCount -= 20; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptTKIP Failed\n")); +- // give up this frame +- return NDIS_STATUS_FAILURE; +- } +- } +- // handle AES decryption +- else if (GroupCipher == Ndis802_11Encryption3Enabled) +- { +- if (RTMPSoftDecryptAES(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount , pShard_key)) +- { +- +- //8 bytes MIC, 8 bytes IV/EIV (CCMP Header) +- pRxWI->MPDUtotalByteCount -= 16; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptAES Failed\n")); +- // give up this frame +- return NDIS_STATUS_FAILURE; +- } +- } +- else +- { +- // give up this frame +- return NDIS_STATUS_FAILURE; +- } +- +- return NDIS_STATUS_SUCCESS; +- +-} +- +- +-PUINT8 GetSuiteFromRSNIE( +- IN PUINT8 rsnie, +- IN UINT rsnie_len, +- IN UINT8 type, +- OUT UINT8 *count) +-{ +- PEID_STRUCT pEid; +- INT len; +- PUINT8 pBuf; +- INT offset = 0; +- PRSNIE_AUTH pAkm; +- UINT16 acount; +- BOOLEAN isWPA2 = FALSE; +- +- pEid = (PEID_STRUCT)rsnie; +- len = rsnie_len - 2; // exclude IE and length +- pBuf = (PUINT8)&pEid->Octet[0]; +- +- +- +- // set default value +- *count = 0; +- +- // Check length +- if ((len <= 0) || (pEid->Len != len)) +- { +- DBGPRINT_ERR(("%s : The length is invalid\n", __FUNCTION__)); +- return NULL; +- } +- +- // Check WPA or WPA2 +- if (pEid->Eid == IE_WPA) +- { +- PRSNIE pRsnie = (PRSNIE)pBuf; +- UINT16 ucount; +- +- if (len < sizeof(RSNIE)) +- { +- DBGPRINT_ERR(("%s : The length is too short for WPA\n", __FUNCTION__)); +- return NULL; +- } +- +- // Get the count of pairwise cipher +- ucount = cpu2le16(pRsnie->ucount); +- if (ucount > 2) +- { +- DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", +- __FUNCTION__, ucount)); +- return NULL; +- } +- +- // Get the group cipher +- if (type == GROUP_SUITE) +- { +- *count = 1; +- return pRsnie->mcast; +- } +- // Get the pairwise cipher suite +- else if (type == PAIRWISE_SUITE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", +- __FUNCTION__, ucount)); +- *count = ucount; +- return pRsnie->ucast[0].oui; +- } +- +- offset = sizeof(RSNIE) + (4 * (ucount - 1)); +- +- } +- else if (pEid->Eid == IE_RSN) +- { +- PRSNIE2 pRsnie = (PRSNIE2)pBuf; +- UINT16 ucount; +- +- isWPA2 = TRUE; +- +- if (len < sizeof(RSNIE2)) +- { +- DBGPRINT_ERR(("%s : The length is too short for WPA2\n", __FUNCTION__)); +- return NULL; +- } +- +- // Get the count of pairwise cipher +- ucount = cpu2le16(pRsnie->ucount); +- if (ucount > 2) +- { +- DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", +- __FUNCTION__, ucount)); +- return NULL; +- } +- +- // Get the group cipher +- if (type == GROUP_SUITE) +- { +- *count = 1; +- return pRsnie->mcast; +- } +- // Get the pairwise cipher suite +- else if (type == PAIRWISE_SUITE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", +- __FUNCTION__, ucount)); +- *count = ucount; +- return pRsnie->ucast[0].oui; +- } +- +- offset = sizeof(RSNIE2) + (4 * (ucount - 1)); +- +- } +- else +- { +- DBGPRINT_ERR(("%s : Unknown IE (%d)\n", __FUNCTION__, pEid->Eid)); +- return NULL; +- } +- +- // skip group cipher and pairwise cipher suite +- pBuf += offset; +- len -= offset; +- +- if (len < sizeof(RSNIE_AUTH)) +- { +- DBGPRINT_ERR(("%s : The length of RSNIE is too short\n", __FUNCTION__)); +- return NULL; +- } +- +- // pointer to AKM count +- pAkm = (PRSNIE_AUTH)pBuf; +- +- // Get the count of pairwise cipher +- acount = cpu2le16(pAkm->acount); +- if (acount > 2) +- { +- DBGPRINT_ERR(("%s : The count(%d) of AKM is invlaid\n", +- __FUNCTION__, acount)); +- return NULL; +- } +- +- // Get the AKM suite +- if (type == AKM_SUITE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of AKM is %d\n", +- __FUNCTION__, acount)); +- *count = acount; +- return pAkm->auth[0].oui; +- } +- offset = sizeof(RSNIE_AUTH) + (4 * (acount - 1)); +- +- pBuf += offset; +- len -= offset; +- +- // The remaining length must larger than (RSN-Capability(2) + PMKID-Count(2) + PMKID(16~)) +- if (len >= (sizeof(RSN_CAPABILITIES) + 2 + LEN_PMKID)) +- { +- // Skip RSN capability and PMKID-Count +- pBuf += (sizeof(RSN_CAPABILITIES) + 2); +- len -= (sizeof(RSN_CAPABILITIES) + 2); +- +- // Get PMKID +- if (type == PMKID_LIST) +- { +- *count = 1; +- return pBuf; +- } +- } +- else +- { +- DBGPRINT_ERR(("%s : it can't get any more information beyond AKM \n", __FUNCTION__)); +- return NULL; +- } +- +- *count = 0; +- //DBGPRINT_ERR(("%s : The type(%d) doesn't support \n", __FUNCTION__, type)); +- return NULL; +- +-} +- +-VOID WpaShowAllsuite( +- IN PUINT8 rsnie, +- IN UINT rsnie_len) +-{ +- PUINT8 pSuite = NULL; +- UINT8 count; +- +- hex_dump("RSNIE", rsnie, rsnie_len); +- +- // group cipher +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, &count)) != NULL) +- { +- hex_dump("group cipher", pSuite, 4*count); +- } +- +- // pairwise cipher +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, &count)) != NULL) +- { +- hex_dump("pairwise cipher", pSuite, 4*count); +- } +- +- // AKM +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) +- { +- hex_dump("AKM suite", pSuite, 4*count); +- } +- +- // PMKID +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) +- { +- hex_dump("PMKID", pSuite, LEN_PMKID); +- } +- +-} +- +-VOID RTMPInsertRSNIE( +- IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, +- IN UINT8 pmkid_len) +-{ +- PUCHAR pTmpBuf; +- ULONG TempLen = 0; +- UINT8 extra_len = 0; +- UINT16 pmk_count = 0; +- UCHAR ie_num; +- UINT8 total_len = 0; +- UCHAR WPA2_OUI[3]={0x00,0x0F,0xAC}; +- +- pTmpBuf = pFrameBuf; +- +- /* PMKID-List Must larger than 0 and the multiple of 16. */ +- if (pmkid_len > 0 && ((pmkid_len & 0x0f) == 0)) +- { +- extra_len = sizeof(UINT16) + pmkid_len; +- +- pmk_count = (pmkid_len >> 4); +- pmk_count = cpu2le16(pmk_count); +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("%s : The length is PMKID-List is invalid (%d), so don't insert it.\n", +- __FUNCTION__, pmkid_len)); +- } +- +- if (rsnie_len != 0) +- { +- ie_num = IE_WPA; +- total_len = rsnie_len; +- +- if (NdisEqualMemory(rsnie_ptr + 2, WPA2_OUI, sizeof(WPA2_OUI))) +- { +- ie_num = IE_RSN; +- total_len += extra_len; +- } +- +- /* construct RSNIE body */ +- MakeOutgoingFrame(pTmpBuf, &TempLen, +- 1, &ie_num, +- 1, &total_len, +- rsnie_len, rsnie_ptr, +- END_OF_ARGS); +- +- pTmpBuf += TempLen; +- *pFrameLen = *pFrameLen + TempLen; +- +- if (ie_num == IE_RSN) +- { +- /* Insert PMKID-List field */ +- if (extra_len > 0) +- { +- MakeOutgoingFrame(pTmpBuf, &TempLen, +- 2, &pmk_count, +- pmkid_len, pmkid_ptr, +- END_OF_ARGS); +- +- pTmpBuf += TempLen; +- *pFrameLen = *pFrameLen + TempLen; +- } +- } +- } +- +- return; +-} +diff --git a/drivers/staging/rt3090/common/crypt_aes.c b/drivers/staging/rt3090/common/crypt_aes.c +deleted file mode 100644 +index f400f1e..0000000 +--- a/drivers/staging/rt3090/common/crypt_aes.c ++++ /dev/null +@@ -1,1007 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- crypt_aes.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Eddy 2009/01/19 Create AES-128, AES-192, AES-256, AES-CBC +-*/ +- +-#include "crypt_aes.h" +- +-/* The value given by [x^(i-1),{00},{00},{00}], with x^(i-1) being powers of x in the field GF(2^8). */ +-static const UINT32 aes_rcon[] = { +- 0x00000000, 0x01000000, 0x02000000, 0x04000000, +- 0x08000000, 0x10000000, 0x20000000, 0x40000000, +- 0x80000000, 0x1B000000, 0x36000000}; +- +-static const UINT8 aes_sbox_enc[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7 ,0xab, 0x76, /* 0 */ +- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4 ,0x72, 0xc0, /* 1 */ +- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8 ,0x31, 0x15, /* 2 */ +- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27 ,0xb2, 0x75, /* 3 */ +- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3 ,0x2f, 0x84, /* 4 */ +- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c ,0x58, 0xcf, /* 5 */ +- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c ,0x9f, 0xa8, /* 6 */ +- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff ,0xf3, 0xd2, /* 7 */ +- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d ,0x19, 0x73, /* 8 */ +- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e ,0x0b, 0xdb, /* 9 */ +- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95 ,0xe4, 0x79, /* a */ +- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a ,0xae, 0x08, /* b */ +- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd ,0x8b, 0x8a, /* c */ +- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1 ,0x1d, 0x9e, /* d */ +- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55 ,0x28, 0xdf, /* e */ +- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54 ,0xbb, 0x16, /* f */ +-}; +- +-static const UINT8 aes_sbox_dec[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, /* 0 */ +- 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, /* 1 */ +- 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, /* 2 */ +- 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, /* 3 */ +- 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, /* 4 */ +- 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, /* 5 */ +- 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, /* 6 */ +- 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, /* 7 */ +- 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, /* 8 */ +- 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, /* 9 */ +- 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, /* a */ +- 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, /* b */ +- 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, /* c */ +- 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, /* d */ +- 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, /* e */ +- 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d, /* f */ +-}; +- +-/* ArrayIndex*{02} */ +-static const UINT8 aes_mul_2[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, /* 0 */ +- 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, /* 1 */ +- 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, /* 2 */ +- 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, /* 3 */ +- 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, /* 4 */ +- 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, /* 5 */ +- 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, /* 6 */ +- 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, /* 7 */ +- 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, /* 8 */ +- 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, /* 9 */ +- 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, /* a */ +- 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, /* b */ +- 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, /* c */ +- 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, /* d */ +- 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, /* e */ +- 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5, /* f */ +-}; +- +-/* ArrayIndex*{03} */ +-static const UINT8 aes_mul_3[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, /* 0 */ +- 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, /* 1 */ +- 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, /* 2 */ +- 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, /* 3 */ +- 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, /* 4 */ +- 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, /* 5 */ +- 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, /* 6 */ +- 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, /* 7 */ +- 0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a, /* 8 */ +- 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba, /* 9 */ +- 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, /* a */ +- 0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda, /* b */ +- 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, /* c */ +- 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, /* d */ +- 0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, /* e */ +- 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a, /* f */ +-}; +- +-/* ArrayIndex*{09} */ +-static const UINT8 aes_mul_9[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, /* 0 */ +- 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, /* 1 */ +- 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, /* 2 */ +- 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, /* 3 */ +- 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, /* 4 */ +- 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, /* 5 */ +- 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, /* 6 */ +- 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, /* 7 */ +- 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, /* 8 */ +- 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, /* 9 */ +- 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, /* a */ +- 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, /* b */ +- 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, /* c */ +- 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, /* d */ +- 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, /* e */ +- 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46, /* f */ +-}; +- +-/* ArrayIndex*{0b} */ +-static const UINT8 aes_mul_b[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, /* 0 */ +- 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, /* 1 */ +- 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, /* 2 */ +- 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, /* 3 */ +- 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, /* 4 */ +- 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, /* 5 */ +- 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, /* 6 */ +- 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, /* 7 */ +- 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, /* 8 */ +- 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, /* 9 */ +- 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, /* a */ +- 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, /* b */ +- 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, /* c */ +- 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, /* d */ +- 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, /* e */ +- 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3, /* f */ +-}; +- +-/* ArrayIndex*{0d} */ +-static const UINT8 aes_mul_d[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, /* 0 */ +- 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, /* 1 */ +- 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, /* 2 */ +- 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, /* 3 */ +- 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, /* 4 */ +- 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, /* 5 */ +- 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, /* 6 */ +- 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, /* 7 */ +- 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, /* 8 */ +- 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, /* 9 */ +- 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, /* a */ +- 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, /* b */ +- 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, /* c */ +- 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, /* d */ +- 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, /* e */ +- 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97, /* f */ +-}; +- +-/* ArrayIndex*{0e} */ +-static const UINT8 aes_mul_e[] = { +- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +- 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, /* 0 */ +- 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, /* 1 */ +- 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, /* 2 */ +- 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, /* 3 */ +- 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, /* 4 */ +- 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, /* 5 */ +- 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, /* 6 */ +- 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, /* 7 */ +- 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, /* 8 */ +- 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, /* 9 */ +- 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, /* a */ +- 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, /* b */ +- 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, /* c */ +- 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, /* d */ +- 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, /* e */ +- 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, /* f */ +-}; +- +- +-/* For AES_CMAC */ +-#define AES_MAC_LENGTH 16 /* 128-bit string */ +-static UINT8 Const_Zero[16] = { +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +-static UINT8 Const_Rb[16] = { +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87}; +- +- +-/* +-======================================================================== +-Routine Description: +- AES key expansion (key schedule) +- +-Arguments: +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- paes_ctx Pointer to AES_CTX_STRUC +- +-Return Value: +- paes_ctx Retrun the KeyWordExpansion of AES_CTX_STRUC +- +-Note: +- Pseudo code for key expansion +- ------------------------------------------ +- Nk = (key length/4); +- +- while (i < Nk) +- KeyWordExpansion[i] = word(key[4*i], key[4*i + 1], key[4*i + 2], key[4*i + 3]); +- i++; +- end while +- +- while (i < ((key length/4 + 6 + 1)*4) ) +- temp = KeyWordExpansion[i - 1]; +- if (i % Nk ==0) +- temp = SubWord(RotWord(temp)) ^ Rcon[i/Nk]; +- else if ((Nk > 6) && (i % 4 == 4)) +- temp = SubWord(temp); +- end if +- +- KeyWordExpansion[i] = KeyWordExpansion[i - Nk]^ temp; +- i++; +- end while +-======================================================================== +-*/ +-VOID AES_KeyExpansion ( +- IN UINT8 Key[], +- IN UINT KeyLength, +- INOUT AES_CTX_STRUC *paes_ctx) +-{ +- UINT KeyIndex = 0; +- UINT NumberOfWordOfKey, NumberOfWordOfKeyExpansion; +- UINT8 TempWord[AES_KEY_ROWS], Temp; +- UINT32 Temprcon; +- +- NumberOfWordOfKey = KeyLength >> 2; +- while (KeyIndex < NumberOfWordOfKey) +- { +- paes_ctx->KeyWordExpansion[0][KeyIndex] = Key[4*KeyIndex]; +- paes_ctx->KeyWordExpansion[1][KeyIndex] = Key[4*KeyIndex + 1]; +- paes_ctx->KeyWordExpansion[2][KeyIndex] = Key[4*KeyIndex + 2]; +- paes_ctx->KeyWordExpansion[3][KeyIndex] = Key[4*KeyIndex + 3]; +- KeyIndex++; +- } /* End of while */ +- +- NumberOfWordOfKeyExpansion = ((UINT) AES_KEY_ROWS) * ((KeyLength >> 2) + 6 + 1); +- while (KeyIndex < NumberOfWordOfKeyExpansion) +- { +- TempWord[0] = paes_ctx->KeyWordExpansion[0][KeyIndex - 1]; +- TempWord[1] = paes_ctx->KeyWordExpansion[1][KeyIndex - 1]; +- TempWord[2] = paes_ctx->KeyWordExpansion[2][KeyIndex - 1]; +- TempWord[3] = paes_ctx->KeyWordExpansion[3][KeyIndex - 1]; +- if ((KeyIndex % NumberOfWordOfKey) == 0) { +- Temprcon = aes_rcon[KeyIndex/NumberOfWordOfKey]; +- Temp = aes_sbox_enc[TempWord[1]]^((Temprcon >> 24) & 0xff); +- TempWord[1] = aes_sbox_enc[TempWord[2]]^((Temprcon >> 16) & 0xff); +- TempWord[2] = aes_sbox_enc[TempWord[3]]^((Temprcon >> 8) & 0xff); +- TempWord[3] = aes_sbox_enc[TempWord[0]]^((Temprcon ) & 0xff); +- TempWord[0] = Temp; +- } else if ((NumberOfWordOfKey > 6) && ((KeyIndex % NumberOfWordOfKey) == 4)) { +- Temp = aes_sbox_enc[TempWord[0]]; +- TempWord[1] = aes_sbox_enc[TempWord[1]]; +- TempWord[2] = aes_sbox_enc[TempWord[2]]; +- TempWord[3] = aes_sbox_enc[TempWord[3]]; +- TempWord[0] = Temp; +- } +- paes_ctx->KeyWordExpansion[0][KeyIndex] = paes_ctx->KeyWordExpansion[0][KeyIndex - NumberOfWordOfKey]^TempWord[0]; +- paes_ctx->KeyWordExpansion[1][KeyIndex] = paes_ctx->KeyWordExpansion[1][KeyIndex - NumberOfWordOfKey]^TempWord[1]; +- paes_ctx->KeyWordExpansion[2][KeyIndex] = paes_ctx->KeyWordExpansion[2][KeyIndex - NumberOfWordOfKey]^TempWord[2]; +- paes_ctx->KeyWordExpansion[3][KeyIndex] = paes_ctx->KeyWordExpansion[3][KeyIndex - NumberOfWordOfKey]^TempWord[3]; +- KeyIndex++; +- } /* End of while */ +-} /* End of AES_KeyExpansion */ +- +- +-/* +-======================================================================== +-Routine Description: +- AES encryption +- +-Arguments: +- PlainBlock The block of plain text, 16 bytes(128 bits) each block +- PlainBlockSize The length of block of plain text in bytes +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- CipherBlockSize The length of allocated cipher block in bytes +- +-Return Value: +- CipherBlock Return cipher text +- CipherBlockSize Return the length of real used cipher block in bytes +- +-Note: +- Reference to FIPS-PUB 197 +- 1. Check if block size is 16 bytes(128 bits) and if key length is 16, 24, or 32 bytes(128, 192, or 256 bits) +- 2. Transfer the plain block to state block +- 3. Main encryption rounds +- 4. Transfer the state block to cipher block +- ------------------------------------------ +- NumberOfRound = (key length / 4) + 6; +- state block = plain block; +- +- AddRoundKey(state block, key); +- for round = 1 to NumberOfRound +- SubBytes(state block) +- ShiftRows(state block) +- MixColumns(state block) +- AddRoundKey(state block, key); +- end for +- +- SubBytes(state block) +- ShiftRows(state block) +- AddRoundKey(state block, key); +- +- cipher block = state block; +-======================================================================== +-*/ +-VOID AES_Encrypt ( +- IN UINT8 PlainBlock[], +- IN UINT PlainBlockSize, +- IN UINT8 Key[], +- IN UINT KeyLength, +- OUT UINT8 CipherBlock[], +- INOUT UINT *CipherBlockSize) +-{ +- AES_CTX_STRUC aes_ctx; +- UINT RowIndex, ColumnIndex; +- UINT RoundIndex, NumberOfRound = 0; +- UINT8 Temp, Row0, Row1, Row2, Row3; +- +- /* +- * 1. Check if block size is 16 bytes(128 bits) and if key length is 16, 24, or 32 bytes(128, 192, or 256 bits) +- */ +- if (PlainBlockSize != AES_BLOCK_SIZES) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Encrypt: plain block size is %d bytes, it must be %d bytes(128 bits).\n", +- PlainBlockSize, AES_BLOCK_SIZES)); +- return; +- } /* End of if */ +- if ((KeyLength != AES_KEY128_LENGTH) && (KeyLength != AES_KEY192_LENGTH) && (KeyLength != AES_KEY256_LENGTH)) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Encrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n", +- KeyLength, AES_KEY128_LENGTH, AES_KEY192_LENGTH, AES_KEY256_LENGTH)); +- return; +- } /* End of if */ +- if (*CipherBlockSize < AES_BLOCK_SIZES) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Encrypt: cipher block size is %d bytes, it must be %d bytes(128 bits).\n", +- *CipherBlockSize, AES_BLOCK_SIZES)); +- return; +- } /* End of if */ +- +- /* +- * 2. Transfer the plain block to state block +- */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = PlainBlock[RowIndex + 4*ColumnIndex]; +- +- /* +- * 3. Main encryption rounds +- */ +- AES_KeyExpansion(Key, KeyLength, &aes_ctx); +- NumberOfRound = (KeyLength >> 2) + 6; +- +- /* AES_AddRoundKey */ +- RoundIndex = 0; +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- +- for (RoundIndex = 1; RoundIndex < NumberOfRound;RoundIndex++) +- { +- /* AES_SubBytes */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = aes_sbox_enc[aes_ctx.State[RowIndex][ColumnIndex]]; +- +- /* AES_ShiftRows */ +- Temp = aes_ctx.State[1][0]; +- aes_ctx.State[1][0] = aes_ctx.State[1][1]; +- aes_ctx.State[1][1] = aes_ctx.State[1][2]; +- aes_ctx.State[1][2] = aes_ctx.State[1][3]; +- aes_ctx.State[1][3] = Temp; +- Temp = aes_ctx.State[2][0]; +- aes_ctx.State[2][0] = aes_ctx.State[2][2]; +- aes_ctx.State[2][2] = Temp; +- Temp = aes_ctx.State[2][1]; +- aes_ctx.State[2][1] = aes_ctx.State[2][3]; +- aes_ctx.State[2][3] = Temp; +- Temp = aes_ctx.State[3][3]; +- aes_ctx.State[3][3] = aes_ctx.State[3][2]; +- aes_ctx.State[3][2] = aes_ctx.State[3][1]; +- aes_ctx.State[3][1] = aes_ctx.State[3][0]; +- aes_ctx.State[3][0] = Temp; +- +- /* AES_MixColumns */ +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- { +- Row0 = aes_ctx.State[0][ColumnIndex]; +- Row1 = aes_ctx.State[1][ColumnIndex]; +- Row2 = aes_ctx.State[2][ColumnIndex]; +- Row3 = aes_ctx.State[3][ColumnIndex]; +- aes_ctx.State[0][ColumnIndex] = aes_mul_2[Row0]^aes_mul_3[Row1]^Row2^Row3; +- aes_ctx.State[1][ColumnIndex] = Row0^aes_mul_2[Row1]^aes_mul_3[Row2]^Row3; +- aes_ctx.State[2][ColumnIndex] = Row0^Row1^aes_mul_2[Row2]^aes_mul_3[Row3]; +- aes_ctx.State[3][ColumnIndex] = aes_mul_3[Row0]^Row1^Row2^aes_mul_2[Row3]; +- } +- +- /* AES_AddRoundKey */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- } /* End of for */ +- +- /* AES_SubBytes */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = aes_sbox_enc[aes_ctx.State[RowIndex][ColumnIndex]]; +- /* AES_ShiftRows */ +- Temp = aes_ctx.State[1][0]; +- aes_ctx.State[1][0] = aes_ctx.State[1][1]; +- aes_ctx.State[1][1] = aes_ctx.State[1][2]; +- aes_ctx.State[1][2] = aes_ctx.State[1][3]; +- aes_ctx.State[1][3] = Temp; +- Temp = aes_ctx.State[2][0]; +- aes_ctx.State[2][0] = aes_ctx.State[2][2]; +- aes_ctx.State[2][2] = Temp; +- Temp = aes_ctx.State[2][1]; +- aes_ctx.State[2][1] = aes_ctx.State[2][3]; +- aes_ctx.State[2][3] = Temp; +- Temp = aes_ctx.State[3][3]; +- aes_ctx.State[3][3] = aes_ctx.State[3][2]; +- aes_ctx.State[3][2] = aes_ctx.State[3][1]; +- aes_ctx.State[3][1] = aes_ctx.State[3][0]; +- aes_ctx.State[3][0] = Temp; +- /* AES_AddRoundKey */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- +- /* +- * 4. Transfer the state block to cipher block +- */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- CipherBlock[RowIndex + 4*ColumnIndex] = aes_ctx.State[RowIndex][ColumnIndex]; +- +- *CipherBlockSize = ((UINT) AES_STATE_ROWS)*((UINT) AES_STATE_COLUMNS); +-} /* End of AES_Encrypt */ +- +- +-/* +-======================================================================== +-Routine Description: +- AES decryption +- +-Arguments: +- CipherBlock The block of cipher text, 16 bytes(128 bits) each block +- CipherBlockSize The length of block of cipher text in bytes +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- PlainBlockSize The length of allocated plain block in bytes +- +-Return Value: +- PlainBlock Return plain text +- PlainBlockSize Return the length of real used plain block in bytes +- +-Note: +- Reference to FIPS-PUB 197 +- 1. Check if block size is 16 bytes(128 bits) and if key length is 16, 24, or 32 bytes(128, 192, or 256 bits) +- 2. Transfer the cipher block to state block +- 3. Main decryption rounds +- 4. Transfer the state block to plain block +- ------------------------------------------ +- NumberOfRound = (key length / 4) + 6; +- state block = cipher block; +- +- AddRoundKey(state block, key); +- for round = NumberOfRound to 1 +- InvSubBytes(state block) +- InvShiftRows(state block) +- InvMixColumns(state block) +- AddRoundKey(state block, key); +- end for +- +- InvSubBytes(state block) +- InvShiftRows(state block) +- AddRoundKey(state block, key); +- +- plain block = state block; +-======================================================================== +-*/ +-VOID AES_Decrypt ( +- IN UINT8 CipherBlock[], +- IN UINT CipherBlockSize, +- IN UINT8 Key[], +- IN UINT KeyLength, +- OUT UINT8 PlainBlock[], +- INOUT UINT *PlainBlockSize) +-{ +- AES_CTX_STRUC aes_ctx; +- UINT RowIndex, ColumnIndex; +- UINT RoundIndex, NumberOfRound = 0; +- UINT8 Temp, Row0, Row1, Row2, Row3; +- +- /* +- * 1. Check if block size is 16 bytes(128 bits) and if key length is 16, 24, or 32 bytes(128, 192, or 256 bits) +- */ +- if (*PlainBlockSize < AES_BLOCK_SIZES) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Decrypt: plain block size is %d bytes, it must be %d bytes(128 bits).\n", +- *PlainBlockSize, AES_BLOCK_SIZES)); +- return; +- } /* End of if */ +- if ((KeyLength != AES_KEY128_LENGTH) && (KeyLength != AES_KEY192_LENGTH) && (KeyLength != AES_KEY256_LENGTH)) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Decrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n", +- KeyLength, AES_KEY128_LENGTH, AES_KEY192_LENGTH, AES_KEY256_LENGTH)); +- return; +- } /* End of if */ +- if (CipherBlockSize != AES_BLOCK_SIZES) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_Decrypt: cipher block size is %d bytes, it must be %d bytes(128 bits).\n", +- CipherBlockSize, AES_BLOCK_SIZES)); +- return; +- } /* End of if */ +- +- /* +- * 2. Transfer the cipher block to state block +- */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = CipherBlock[RowIndex + 4*ColumnIndex]; +- +- /* +- * 3. Main decryption rounds +- */ +- AES_KeyExpansion(Key, KeyLength, &aes_ctx); +- NumberOfRound = (KeyLength >> 2) + 6; +- +- /* AES_AddRoundKey */ +- RoundIndex = NumberOfRound; +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- +- for (RoundIndex = (NumberOfRound - 1); RoundIndex > 0 ;RoundIndex--) +- { +- /* AES_InvShiftRows */ +- Temp = aes_ctx.State[1][3]; +- aes_ctx.State[1][3] = aes_ctx.State[1][2]; +- aes_ctx.State[1][2] = aes_ctx.State[1][1]; +- aes_ctx.State[1][1] = aes_ctx.State[1][0]; +- aes_ctx.State[1][0] = Temp; +- Temp = aes_ctx.State[2][0]; +- aes_ctx.State[2][0] = aes_ctx.State[2][2]; +- aes_ctx.State[2][2] = Temp; +- Temp = aes_ctx.State[2][1]; +- aes_ctx.State[2][1] = aes_ctx.State[2][3]; +- aes_ctx.State[2][3] = Temp; +- Temp = aes_ctx.State[3][0]; +- aes_ctx.State[3][0] = aes_ctx.State[3][1]; +- aes_ctx.State[3][1] = aes_ctx.State[3][2]; +- aes_ctx.State[3][2] = aes_ctx.State[3][3]; +- aes_ctx.State[3][3] = Temp; +- +- /* AES_InvSubBytes */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = aes_sbox_dec[aes_ctx.State[RowIndex][ColumnIndex]]; +- +- /* AES_AddRoundKey */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- +- /* AES_InvMixColumns */ +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- { +- Row0 = aes_ctx.State[0][ColumnIndex]; +- Row1 = aes_ctx.State[1][ColumnIndex]; +- Row2 = aes_ctx.State[2][ColumnIndex]; +- Row3 = aes_ctx.State[3][ColumnIndex]; +- aes_ctx.State[0][ColumnIndex] = aes_mul_e[Row0]^aes_mul_b[Row1]^aes_mul_d[Row2]^aes_mul_9[Row3]; +- aes_ctx.State[1][ColumnIndex] = aes_mul_9[Row0]^aes_mul_e[Row1]^aes_mul_b[Row2]^aes_mul_d[Row3]; +- aes_ctx.State[2][ColumnIndex] = aes_mul_d[Row0]^aes_mul_9[Row1]^aes_mul_e[Row2]^aes_mul_b[Row3]; +- aes_ctx.State[3][ColumnIndex] = aes_mul_b[Row0]^aes_mul_d[Row1]^aes_mul_9[Row2]^aes_mul_e[Row3]; +- } +- } /* End of for */ +- +- /* AES_InvShiftRows */ +- Temp = aes_ctx.State[1][3]; +- aes_ctx.State[1][3] = aes_ctx.State[1][2]; +- aes_ctx.State[1][2] = aes_ctx.State[1][1]; +- aes_ctx.State[1][1] = aes_ctx.State[1][0]; +- aes_ctx.State[1][0] = Temp; +- Temp = aes_ctx.State[2][0]; +- aes_ctx.State[2][0] = aes_ctx.State[2][2]; +- aes_ctx.State[2][2] = Temp; +- Temp = aes_ctx.State[2][1]; +- aes_ctx.State[2][1] = aes_ctx.State[2][3]; +- aes_ctx.State[2][3] = Temp; +- Temp = aes_ctx.State[3][0]; +- aes_ctx.State[3][0] = aes_ctx.State[3][1]; +- aes_ctx.State[3][1] = aes_ctx.State[3][2]; +- aes_ctx.State[3][2] = aes_ctx.State[3][3]; +- aes_ctx.State[3][3] = Temp; +- /* AES_InvSubBytes */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] = aes_sbox_dec[aes_ctx.State[RowIndex][ColumnIndex]]; +- /* AES_AddRoundKey */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- aes_ctx.State[RowIndex][ColumnIndex] ^= aes_ctx.KeyWordExpansion[RowIndex][(RoundIndex*((UINT) AES_STATE_COLUMNS)) + ColumnIndex]; +- +- /* +- * 4. Transfer the state block to plain block +- */ +- for (RowIndex = 0; RowIndex < AES_STATE_ROWS;RowIndex++) +- for (ColumnIndex = 0; ColumnIndex < AES_STATE_COLUMNS;ColumnIndex++) +- PlainBlock[RowIndex + 4*ColumnIndex] = aes_ctx.State[RowIndex][ColumnIndex]; +- +- *PlainBlockSize = ((UINT) AES_STATE_ROWS)*((UINT) AES_STATE_COLUMNS); +-} /* End of AES_Decrypt */ +- +- +-/* +-======================================================================== +-Routine Description: +- AES-CBC encryption +- +-Arguments: +- PlainText Plain text +- PlainTextLength The length of plain text in bytes +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- IV Initialization vector, it may be 16 bytes (128 bits) +- IVLength The length of initialization vector in bytes +- CipherTextLength The length of allocated cipher text in bytes +- +-Return Value: +- CipherText Return cipher text +- CipherTextLength Return the length of real used cipher text in bytes +- +-Note: +- Reference to RFC 3602 and NIST 800-38A +-======================================================================== +-*/ +-VOID AES_CBC_Encrypt ( +- IN UINT8 PlainText[], +- IN UINT PlainTextLength, +- IN UINT8 Key[], +- IN UINT KeyLength, +- IN UINT8 IV[], +- IN UINT IVLength, +- OUT UINT8 CipherText[], +- INOUT UINT *CipherTextLength) +-{ +- UINT PaddingSize, PlainBlockStart, CipherBlockStart, CipherBlockSize; +- UINT Index; +- UINT8 Block[AES_BLOCK_SIZES]; +- +- /* +- * 1. Check the input parameters +- * - CipherTextLength > (PlainTextLength + Padding size), Padding size = block size - (PlainTextLength % block size) +- * - Key length must be 16, 24, or 32 bytes(128, 192, or 256 bits) +- * - IV length must be 16 bytes(128 bits) +- */ +- PaddingSize = ((UINT) AES_BLOCK_SIZES) - (PlainTextLength % ((UINT)AES_BLOCK_SIZES)); +- if (*CipherTextLength < (PlainTextLength + PaddingSize)) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Encrypt: cipher text length is %d bytes < (plain text length %d bytes + padding size %d bytes).\n", +- *CipherTextLength, PlainTextLength, PaddingSize)); +- return; +- } /* End of if */ +- if ((KeyLength != AES_KEY128_LENGTH) && (KeyLength != AES_KEY192_LENGTH) && (KeyLength != AES_KEY256_LENGTH)) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Encrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n", +- KeyLength, AES_KEY128_LENGTH, AES_KEY192_LENGTH, AES_KEY256_LENGTH)); +- return; +- } /* End of if */ +- if (IVLength != AES_CBC_IV_LENGTH) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Encrypt: IV length is %d bytes, it must be %d bytes(128bits).\n", +- IVLength, AES_CBC_IV_LENGTH)); +- return; +- } /* End of if */ +- +- +- /* +- * 2. Main algorithm +- * - Plain text divide into serveral blocks (16 bytes/block) +- * - If plain text is divided with no remainder by block, add a new block and padding size = block(16 bytes) +- * - If plain text is not divided with no remainder by block, padding size = (block - remainder plain text) +- * - Execute AES_Encrypt procedure. +- * +- * - Padding method: The remainder bytes will be filled with padding size (1 byte) +- */ +- PlainBlockStart = 0; +- CipherBlockStart = 0; +- while ((PlainTextLength - PlainBlockStart) >= AES_BLOCK_SIZES) +- { +- if (CipherBlockStart == 0) { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Block[Index] = PlainText[PlainBlockStart + Index]^IV[Index]; +- } else { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Block[Index] = PlainText[PlainBlockStart + Index]^CipherText[CipherBlockStart - ((UINT) AES_BLOCK_SIZES) + Index]; +- } /* End of if */ +- +- CipherBlockSize = *CipherTextLength - CipherBlockStart; +- AES_Encrypt(Block, AES_BLOCK_SIZES , Key, KeyLength, CipherText + CipherBlockStart, &CipherBlockSize); +- +- PlainBlockStart += ((UINT) AES_BLOCK_SIZES); +- CipherBlockStart += CipherBlockSize; +- } /* End of while */ +- +- NdisMoveMemory(Block, (&PlainText[0] + PlainBlockStart), (PlainTextLength - PlainBlockStart)); +- NdisFillMemory((Block + (((UINT) AES_BLOCK_SIZES) -PaddingSize)), PaddingSize, (UINT8) PaddingSize); +- if (CipherBlockStart == 0) { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Block[Index] ^= IV[Index]; +- } else { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Block[Index] ^= CipherText[CipherBlockStart - ((UINT) AES_BLOCK_SIZES) + Index]; +- } /* End of if */ +- CipherBlockSize = *CipherTextLength - CipherBlockStart; +- AES_Encrypt(Block, AES_BLOCK_SIZES , Key, KeyLength, CipherText + CipherBlockStart, &CipherBlockSize); +- CipherBlockStart += CipherBlockSize; +- *CipherTextLength = CipherBlockStart; +-} /* End of AES_CBC_Encrypt */ +- +- +-/* +-======================================================================== +-Routine Description: +- AES-CBC decryption +- +-Arguments: +- CipherText Cipher text +- CipherTextLength The length of cipher text in bytes +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- IV Initialization vector, it may be 16 bytes (128 bits) +- IVLength The length of initialization vector in bytes +- PlainTextLength The length of allocated plain text in bytes +- +-Return Value: +- PlainText Return plain text +- PlainTextLength Return the length of real used plain text in bytes +- +-Note: +- Reference to RFC 3602 and NIST 800-38A +-======================================================================== +-*/ +-VOID AES_CBC_Decrypt ( +- IN UINT8 CipherText[], +- IN UINT CipherTextLength, +- IN UINT8 Key[], +- IN UINT KeyLength, +- IN UINT8 IV[], +- IN UINT IVLength, +- OUT UINT8 PlainText[], +- INOUT UINT *PlainTextLength) +-{ +- UINT PaddingSize, PlainBlockStart, CipherBlockStart, PlainBlockSize; +- UINT Index; +- +- /* +- * 1. Check the input parameters +- * - CipherTextLength must be divided with no remainder by block +- * - Key length must be 16, 24, or 32 bytes(128, 192, or 256 bits) +- * - IV length must be 16 bytes(128 bits) +- */ +- if ((CipherTextLength % AES_BLOCK_SIZES) != 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Decrypt: cipher text length is %d bytes, it can't be divided with no remainder by block size(%d).\n", +- CipherTextLength, AES_BLOCK_SIZES)); +- return; +- } /* End of if */ +- if ((KeyLength != AES_KEY128_LENGTH) && (KeyLength != AES_KEY192_LENGTH) && (KeyLength != AES_KEY256_LENGTH)) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Decrypt: key length is %d bytes, it must be %d, %d, or %d bytes(128, 192, or 256 bits).\n", +- KeyLength, AES_KEY128_LENGTH, AES_KEY192_LENGTH, AES_KEY256_LENGTH)); +- return; +- } /* End of if */ +- if (IVLength != AES_CBC_IV_LENGTH) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CBC_Decrypt: IV length is %d bytes, it must be %d bytes(128bits).\n", +- IVLength, AES_CBC_IV_LENGTH)); +- return; +- } /* End of if */ +- +- +- /* +- * 2. Main algorithm +- * - Cypher text divide into serveral blocks (16 bytes/block) +- * - Execute AES_Decrypt procedure. +- * - Remove padding bytes, padding size is the last byte of plain text +- */ +- CipherBlockStart = 0; +- PlainBlockStart = 0; +- while ((CipherTextLength - CipherBlockStart) >= AES_BLOCK_SIZES) +- { +- PlainBlockSize = *PlainTextLength - PlainBlockStart; +- AES_Decrypt(CipherText + CipherBlockStart, AES_BLOCK_SIZES , Key, KeyLength, PlainText + PlainBlockStart, &PlainBlockSize); +- +- if (PlainBlockStart == 0) { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- PlainText[PlainBlockStart + Index] ^= IV[Index]; +- } else { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- PlainText[PlainBlockStart + Index] ^= CipherText[CipherBlockStart + Index - ((UINT) AES_BLOCK_SIZES)]; +- } /* End of if */ +- +- CipherBlockStart += AES_BLOCK_SIZES; +- PlainBlockStart += PlainBlockSize; +- } /* End of while */ +- +- PaddingSize = (UINT8) PlainText[PlainBlockStart -1]; +- *PlainTextLength = PlainBlockStart - PaddingSize; +- +-} /* End of AES_CBC_Encrypt */ +- +- +- +-/* +-======================================================================== +-Routine Description: +- AES-CMAC generate subkey +- +-Arguments: +- Key Cipher key 128 bits +- KeyLength The length of Cipher key in bytes +- +-Return Value: +- SubKey1 SubKey 1 128 bits +- SubKey2 SubKey 2 128 bits +- +-Note: +- Reference to RFC 4493 +- +- Step 1. L := AES-128(K, const_Zero); +- Step 2. if MSB(L) is equal to 0 +- then K1 := L << 1; +- else K1 := (L << 1) XOR const_Rb; +- Step 3. if MSB(K1) is equal to 0 +- then K2 := K1 << 1; +- else K2 := (K1 << 1) XOR const_Rb; +- Step 4. return K1, K2; +-======================================================================== +-*/ +-VOID AES_CMAC_GenerateSubKey ( +- IN UINT8 Key[], +- IN UINT KeyLength, +- OUT UINT8 SubKey1[], +- OUT UINT8 SubKey2[]) +-{ +- UINT8 MSB_L = 0, MSB_K1 = 0, Top_Bit = 0; +- UINT SubKey1_Length = 0; +- INT Index = 0; +- +- if (KeyLength != AES_KEY128_LENGTH) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CMAC_GenerateSubKey: key length is %d bytes, it must be %d bytes(128 bits).\n", +- KeyLength, AES_KEY128_LENGTH)); +- return; +- } /* End of if */ +- +- /* Step 1: L := AES-128(K, const_Zero); */ +- SubKey1_Length = 16; +- AES_Encrypt(Const_Zero, sizeof(Const_Zero), Key, KeyLength, SubKey1, &SubKey1_Length); +- +- /* +- * Step 2. if MSB(L) is equal to 0 +- * then K1 := L << 1; +- * else K1 := (L << 1) XOR const_Rb; +- */ +- MSB_L = SubKey1[0] & 0x80; +- for(Index = 0; Index < 15; Index++) { +- Top_Bit = (SubKey1[Index + 1] & 0x80)?1:0; +- SubKey1[Index] <<= 1; +- SubKey1[Index] |= Top_Bit; +- } +- SubKey1[15] <<= 1; +- if (MSB_L > 0) { +- for(Index = 0; Index < 16; Index++) +- SubKey1[Index] ^= Const_Rb[Index]; +- } /* End of if */ +- +- /* +- * Step 3. if MSB(K1) is equal to 0 +- * then K2 := K1 << 1; +- * else K2 := (K1 << 1) XOR const_Rb; +- */ +- MSB_K1 = SubKey1[0] & 0x80; +- for(Index = 0; Index < 15; Index++) { +- Top_Bit = (SubKey1[Index + 1] & 0x80)?1:0; +- SubKey2[Index] = SubKey1[Index] << 1; +- SubKey2[Index] |= Top_Bit; +- } +- SubKey2[15] = SubKey1[15] << 1; +- if (MSB_K1 > 0) { +- for(Index = 0; Index < 16; Index++) +- SubKey2[Index] ^= Const_Rb[Index]; +- } /* End of if */ +-} /* End of AES_CMAC_GenerateSubKey */ +- +- +-/* +-======================================================================== +-Routine Description: +- AES-CMAC +- +-Arguments: +- PlainText Plain text +- PlainTextLength The length of plain text in bytes +- Key Cipher key, it may be 16, 24, or 32 bytes (128, 192, or 256 bits) +- KeyLength The length of cipher key in bytes +- MACTextLength The length of allocated memory spaces in bytes +- +-Return Value: +- MACText Message authentication code (128-bit string) +- MACTextLength Return the length of Message authentication code in bytes +- +-Note: +- Reference to RFC 4493 +-======================================================================== +-*/ +-VOID AES_CMAC ( +- IN UINT8 PlainText[], +- IN UINT PlainTextLength, +- IN UINT8 Key[], +- IN UINT KeyLength, +- OUT UINT8 MACText[], +- INOUT UINT *MACTextLength) +-{ +- UINT PlainBlockStart; +- UINT8 X[AES_BLOCK_SIZES], Y[AES_BLOCK_SIZES]; +- UINT8 SubKey1[16]; +- UINT8 SubKey2[16]; +- INT X_Length, Index; +- +- if (*MACTextLength < AES_MAC_LENGTH) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CMAC: MAC text length is less than %d bytes).\n", +- AES_MAC_LENGTH)); +- return; +- } /* End of if */ +- if (KeyLength != AES_KEY128_LENGTH) { +- DBGPRINT(RT_DEBUG_ERROR, ("AES_CMAC: key length is %d bytes, it must be %d bytes(128 bits).\n", +- KeyLength, AES_KEY128_LENGTH)); +- return; +- } /* End of if */ +- +- /* Step 1. (K1,K2) := Generate_Subkey(K); */ +- NdisZeroMemory(SubKey1, 16); +- NdisZeroMemory(SubKey2, 16); +- AES_CMAC_GenerateSubKey(Key, KeyLength, SubKey1, SubKey2); +- +- /* +- * 2. Main algorithm +- * - Plain text divide into serveral blocks (16 bytes/block) +- * - If plain text is not divided with no remainder by block, padding size = (block - remainder plain text) +- * - Execute AES_Encrypt procedure. +- */ +- PlainBlockStart = 0; +- NdisMoveMemory(X, Const_Zero, AES_BLOCK_SIZES); +- while ((PlainTextLength - PlainBlockStart) > AES_BLOCK_SIZES) +- { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Y[Index] = PlainText[PlainBlockStart + Index]^X[Index]; +- +- X_Length = sizeof(X); +- AES_Encrypt(Y, sizeof(Y) , Key, KeyLength, X, &X_Length); +- PlainBlockStart += ((UINT) AES_BLOCK_SIZES); +- } /* End of while */ +- if ((PlainTextLength - PlainBlockStart) == AES_BLOCK_SIZES) { +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Y[Index] = PlainText[PlainBlockStart + Index]^X[Index]^SubKey1[Index]; +- } else { +- NdisZeroMemory(Y, AES_BLOCK_SIZES); +- NdisMoveMemory(Y, &PlainText[PlainBlockStart], (PlainTextLength - PlainBlockStart)); +- Y[(PlainTextLength - PlainBlockStart)] = 0x80; +- for (Index = 0; Index < AES_BLOCK_SIZES; Index++) +- Y[Index] = Y[Index]^X[Index]^SubKey2[Index]; +- } /* End of if */ +- AES_Encrypt(Y, sizeof(Y) , Key, KeyLength, MACText, MACTextLength); +-} /* End of AES_CMAC */ +diff --git a/drivers/staging/rt3090/common/crypt_biginteger.c b/drivers/staging/rt3090/common/crypt_biginteger.c +deleted file mode 100644 +index b346c5f..0000000 +--- a/drivers/staging/rt3090/common/crypt_biginteger.c ++++ /dev/null +@@ -1,1119 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- cmm_profile.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include "crypt_biginteger.h" +- +-#ifdef __KERNEL__ +-#define DEBUGPRINT(fmt, args...) printk(KERN_ERR fmt, ## args) +-#else +-#define DEBUGPRINT(fmt, args...) printf(fmt, ## args) +-#endif /* __KERNEL__ */ +- +-#define UINT32_HBITS(value) (((value) >> 0x10) & 0xffff) +-#define UINT32_LBITS(value) ((value) & 0xffff) +-#define UINT32_GETBYTE(value, index) (((value) >> ((index)*8)) & 0xff) +-#define UINT64_HBITS(value) (((value) >> 0x20) & 0xffffffff) +-#define UINT64_LBITS(value) ((value) & 0xffffffff) +- +-static UINT8 WPS_DH_P_VALUE[192] = +-{ +- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +- 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, +- 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, +- 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, +- 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, +- 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, +- 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, +- 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, +- 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, +- 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, +- 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, +- 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, +- 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, +- 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, +- 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, +- 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, +- 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, +- 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, +- 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, +- 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, +- 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, +- 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, +- 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x23, 0x73, 0x27, +- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +-}; +- +-static UINT8 WPS_DH_R_VALUE[193] = +-{ +- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +- 0x00, +-}; +- +-static UINT8 WPS_DH_X_VALUE[184] = +-{ +- 0x36, 0xf0, 0x25, 0x5d, 0xde, 0x97, 0x3d, 0xcb, +- 0x3b, 0x39, 0x9d, 0x74, 0x7f, 0x23, 0xe3, 0x2e, +- 0xd6, 0xfd, 0xb1, 0xf7, 0x75, 0x98, 0x33, 0x8b, +- 0xfd, 0xf4, 0x41, 0x59, 0xc4, 0xec, 0x64, 0xdd, +- 0xae, 0xb5, 0xf7, 0x86, 0x71, 0xcb, 0xfb, 0x22, +- 0x10, 0x6a, 0xe6, 0x4c, 0x32, 0xc5, 0xbc, 0xe4, +- 0xcf, 0xd4, 0xf5, 0x92, 0x0d, 0xa0, 0xeb, 0xc8, +- 0xb0, 0x1e, 0xca, 0x92, 0x92, 0xae, 0x3d, 0xba, +- 0x1b, 0x7a, 0x4a, 0x89, 0x9d, 0xa1, 0x81, 0x39, +- 0x0b, 0xb3, 0xbd, 0x16, 0x59, 0xc8, 0x12, 0x94, +- 0xf4, 0x00, 0xa3, 0x49, 0x0b, 0xf9, 0x48, 0x12, +- 0x11, 0xc7, 0x94, 0x04, 0xa5, 0x76, 0x60, 0x5a, +- 0x51, 0x60, 0xdb, 0xee, 0x83, 0xb4, 0xe0, 0x19, +- 0xb6, 0xd7, 0x99, 0xae, 0x13, 0x1b, 0xa4, 0xc2, +- 0x3d, 0xff, 0x83, 0x47, 0x5e, 0x9c, 0x40, 0xfa, +- 0x67, 0x25, 0xb7, 0xc9, 0xe3, 0xaa, 0x2c, 0x65, +- 0x96, 0xe9, 0xc0, 0x57, 0x02, 0xdb, 0x30, 0xa0, +- 0x7c, 0x9a, 0xa2, 0xdc, 0x23, 0x5c, 0x52, 0x69, +- 0xe3, 0x9d, 0x0c, 0xa9, 0xdf, 0x7a, 0xad, 0x44, +- 0x61, 0x2a, 0xd6, 0xf8, 0x8f, 0x69, 0x69, 0x92, +- 0x98, 0xf3, 0xca, 0xb1, 0xb5, 0x43, 0x67, 0xfb, +- 0x0e, 0x8b, 0x93, 0xf7, 0x35, 0xdc, 0x8c, 0xd8, +- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, +-}; +- +-static UINT8 WPS_DH_RRModP_VALUE[192] = +-{ +- 0xe3, 0xb3, 0x3c, 0x72, 0x59, 0x54, 0x1c, 0x01, +- 0xee, 0x9c, 0x9a, 0x21, 0x6c, 0xc1, 0xeb, 0xd2, +- 0xae, 0x59, 0x41, 0x04, 0x79, 0x29, 0xa1, 0xc7, +- 0xe9, 0xc3, 0xfa, 0x02, 0xcc, 0x24, 0x56, 0xef, +- 0x10, 0x26, 0x30, 0xfa, 0x9a, 0x36, 0xa5, 0x1f, +- 0x57, 0xb5, 0x93, 0x48, 0x67, 0x98, 0x44, 0x60, +- 0x0b, 0xe4, 0x96, 0x47, 0xa8, 0x7c, 0x7b, 0x37, +- 0xf8, 0x05, 0x65, 0x64, 0x96, 0x9b, 0x7f, 0x02, +- 0xdc, 0x54, 0x1a, 0x4e, 0xd4, 0x05, 0x3f, 0x54, +- 0xd6, 0x2a, 0x0e, 0xea, 0xb2, 0x70, 0x52, 0x1b, +- 0x22, 0xc2, 0x96, 0xe9, 0xd4, 0x6f, 0xec, 0x23, +- 0x8e, 0x1a, 0xbd, 0x78, 0x02, 0x23, 0xb7, 0x6b, +- 0xb8, 0xfe, 0x61, 0x21, 0x19, 0x6b, 0x7e, 0x88, +- 0x1c, 0x72, 0x9c, 0x7e, 0x04, 0xb9, 0xf7, 0x96, +- 0x07, 0xcd, 0x0a, 0x62, 0x8e, 0x43, 0x41, 0x30, +- 0x04, 0xa5, 0x41, 0xff, 0x93, 0xae, 0x1c, 0xeb, +- 0xb0, 0x04, 0xa7, 0x50, 0xdb, 0x10, 0x2d, 0x39, +- 0xb9, 0x05, 0x2b, 0xb4, 0x7a, 0x58, 0xf1, 0x70, +- 0x7e, 0x8c, 0xd2, 0xac, 0x98, 0xb5, 0xfb, 0x62, +- 0x8f, 0x23, 0x31, 0xb1, 0x3b, 0x01, 0xe0, 0x18, +- 0xf4, 0x66, 0xee, 0x5f, 0xbc, 0xd4, 0x9d, 0x68, +- 0xd0, 0xab, 0x92, 0xe1, 0x83, 0x97, 0xf2, 0x45, +- 0x8e, 0x0e, 0x3e, 0x21, 0x67, 0x47, 0x8c, 0x73, +- 0xf1, 0x15, 0xd2, 0x7d, 0x32, 0xc6, 0x95, 0xe0, +-}; +- +-static UINT8 Value_0[1] = {0x00}; +-static UINT8 Value_1[1] = {0x01}; +-static PBIG_INTEGER pBI_U = NULL, pBI_S = NULL, pBI_O = NULL; +-static UINT Bits_Of_R = 0; +- +- +-VOID BigInteger_Print ( +- IN PBIG_INTEGER pBI) +-{ +- int i = 0, j = 0; +- +- if ((pBI == NULL) || (pBI->pIntegerArray == NULL)) +- return; +- +- if (strlen(pBI->Name) != 0) +- DEBUGPRINT("Name=%s\n", pBI->Name); +- DEBUGPRINT("AllocSize=%d, ArrayLength=%d, IntegerLength=%d, Signed=%d\n", pBI->AllocSize, pBI->ArrayLength, pBI->IntegerLength, pBI->Signed); +- for (i = (pBI->ArrayLength - 1), j = 0;i >=0;i--,j++) { +- DEBUGPRINT("%08x, ", pBI->pIntegerArray[i]); +- if ((j%8) == 7) +- DEBUGPRINT("\n"); +- } /* End od for */ +- DEBUGPRINT("\n\n"); +-} /* End of BigInteger_Print */ +- +- +-VOID BigInteger_Init ( +- INOUT PBIG_INTEGER *pBI) +-{ +- if (*pBI != NULL) +- BigInteger_Free(pBI); +- +- if ((*pBI = (PBIG_INTEGER) kmalloc(sizeof(BIG_INTEGER), GFP_ATOMIC)) == NULL) { +- DEBUGPRINT("BigInteger_Init: allocate %d bytes memory failure.\n", (sizeof(BIG_INTEGER))); +- return; +- } /* End of if */ +- +- NdisZeroMemory(*pBI, sizeof(BIG_INTEGER)); +- (*pBI)->pIntegerArray = NULL; +- (*pBI)->Signed = 1; +-} /* End of BigInteger_Init */ +- +- +-VOID BigInteger_Free_AllocSize ( +- IN PBIG_INTEGER *pBI) +-{ +- if ((*pBI != NULL) && ((*pBI)->pIntegerArray != NULL)) { +- kfree((*pBI)->pIntegerArray); +- NdisZeroMemory(*pBI, sizeof(BIG_INTEGER)); +- (*pBI)->pIntegerArray = NULL; +- (*pBI)->Signed = 1; +- } /* End of if */ +-} /* End of BigInteger_Free_AllocSize */ +- +- +-VOID BigInteger_Free ( +- IN PBIG_INTEGER *pBI) +-{ +- if (*pBI != NULL) { +- BigInteger_Free_AllocSize(pBI); +- kfree(*pBI); +- } /* End of if */ +- +- *pBI = NULL; +-} /* End of BigInteger_Free */ +- +- +-VOID BigInteger_AllocSize ( +- IN PBIG_INTEGER *pBI, +- IN UINT Length) +-{ +- UINT ArrayLength = 0; +- +- if (Length == 0) +- return; +- +- if (*pBI == NULL) +- BigInteger_Init(pBI); +- +- /* Caculate array size */ +- ArrayLength = Length >> 0x2; +- if ((Length & 0x3) != 0) +- ArrayLength++; +- +- if (((*pBI)->pIntegerArray != NULL) && ((*pBI)->AllocSize < (sizeof(UINT32)*ArrayLength))) +- BigInteger_Free_AllocSize(pBI); +- +- if ((*pBI)->pIntegerArray == NULL) { +- if (((*pBI)->pIntegerArray = (UINT32 *) kmalloc(sizeof(UINT32)*ArrayLength, GFP_ATOMIC)) == NULL) { +- DEBUGPRINT("BigInteger_AllocSize: allocate %d bytes memory failure.\n", (sizeof(UINT32)*ArrayLength)); +- return; +- } /* End of if */ +- (*pBI)->AllocSize = sizeof(UINT32)*ArrayLength; +- } /* End of if */ +- +- NdisZeroMemory((*pBI)->pIntegerArray, (*pBI)->AllocSize); +- (*pBI)->ArrayLength = ArrayLength; +- (*pBI)->IntegerLength = Length; +-} /* End of BigInteger_AllocSize */ +- +- +-VOID BigInteger_ClearHighBits ( +- IN PBIG_INTEGER pBI) +-{ +- INT BIArrayIndex, ShiftIndex = 0; +- UINT8 value; +- +- if ((pBI == NULL) || (pBI->pIntegerArray == NULL)) +- return; +- +- BIArrayIndex = pBI->ArrayLength - 1; +- while ((BIArrayIndex >= 0) && (pBI->pIntegerArray[BIArrayIndex] == 0)) +- BIArrayIndex--; +- +- if (BIArrayIndex >= 0) { +- value = 0; +- ShiftIndex = 4; +- while (value == 0) { +- ShiftIndex--; +- value = UINT32_GETBYTE(pBI->pIntegerArray[BIArrayIndex], ShiftIndex); +- } /* End of while */ +- } /* End of if */ +- +- if ((BIArrayIndex == -1) && (ShiftIndex == -1)) { +- pBI->IntegerLength = 1; +- pBI->ArrayLength = 1; +- pBI->Signed = 1; +- } else { +- pBI->IntegerLength = (BIArrayIndex*4) + ShiftIndex + 1; +- pBI->ArrayLength = BIArrayIndex + 1; +- } /* End of if */ +-} /* End of BigInteger_ClearHighBits */ +- +- +-VOID BigInteger_BI2Bin ( +- IN PBIG_INTEGER pBI, +- OUT UINT8 *pValue, +- OUT UINT *Length) +-{ +- INT ValueIndex, BIArrayIndex, ShiftIndex; +- UINT32 Number; +- +- if (pBI == NULL) { +- DEBUGPRINT("BigInteger_BI2Bin: pBI is NUll\n"); +- *Length = 0; +- return; +- } /* End of if */ +- +- if (*Length < (sizeof(UINT8) * pBI->IntegerLength)) { +- DEBUGPRINT("BigInteger_BI2Bin: length(%d) is not enough.\n", *Length); +- *Length = 0; +- return; +- } /* End of if */ +- +- if (pBI->pIntegerArray == NULL) { +- *Length = 0; +- return; +- } /* End of if */ +- +- BigInteger_ClearHighBits(pBI); +- if ((ShiftIndex = pBI->IntegerLength & 0x3) == 0) +- ShiftIndex = 4; +- BIArrayIndex = pBI->ArrayLength - 1; +- ValueIndex = 0; +- +- Number = pBI->pIntegerArray[BIArrayIndex]; +- while (ValueIndex < pBI->IntegerLength) +- { +- pValue[ValueIndex++] = (UINT8) UINT32_GETBYTE(Number, ShiftIndex - 1); +- if ((--ShiftIndex) == 0) { +- ShiftIndex = 4; +- BIArrayIndex--; +- Number = pBI->pIntegerArray[BIArrayIndex]; +- } /* End of if */ +- } /* End of while */ +- *Length = pBI->IntegerLength; +-} /* End of BigInteger_BI2Bin */ +- +- +-VOID BigInteger_Bin2BI ( +- IN UINT8 *pValue, +- IN UINT Length, +- OUT PBIG_INTEGER *pBI) +-{ +- INT ValueIndex, BIArrayIndex, ShiftIndex; +- UINT32 Number; +- +- BigInteger_AllocSize(pBI, Length); +- +- if ((*pBI)->pIntegerArray != NULL) { +- Number = 0; +- if ((ShiftIndex = Length & 0x3) == 0) +- ShiftIndex = 4; +- BIArrayIndex = (*pBI)->ArrayLength - 1; +- ValueIndex = 0; +- while (ValueIndex < Length) +- { +- Number = (Number << 8) | (UINT8) pValue[ValueIndex++]; +- if ((--ShiftIndex) == 0) { +- (*pBI)->pIntegerArray[BIArrayIndex] = Number; +- ShiftIndex = 4; +- BIArrayIndex--; +- Number = 0; +- } /* End of if */ +- } /* End of while */ +- } /* End of if */ +-} /* End of BigInteger_Bin2BI */ +- +- +-/* Calculate the bits of BigInteger, the highest bit is 1 */ +-VOID BigInteger_BitsOfBI ( +- IN PBIG_INTEGER pBI, +- OUT UINT *Bits_Of_P) +-{ +- UINT32 Number, Index; +- +- Number = pBI->pIntegerArray[pBI->ArrayLength - 1]; +- Index = 0; +- while ((!(Number & 0x80000000)) && (Index < 32)) { +- Number <<= 1; +- Index++; +- } /* End of while */ +- *Bits_Of_P = (pBI->ArrayLength*sizeof(UINT32)) - Index; +-} /* End of BigInteger_BitsOfBN */ +- +- +-INT BigInteger_GetBitValue ( +- IN PBIG_INTEGER pBI, +- IN UINT Index) +-{ +- UINT Array = 0; +- UINT Shift = 0; +- +- if (Index > 0) { +- Array = (Index - 1) >> 0x5; +- Shift = (Index - 1) & 0x1F; +- } +- if (Array > pBI->ArrayLength) +- return 0; +- +- return ((pBI->pIntegerArray[Array] >> Shift) & 0x1); +-} /* End of BigInteger_GetBitValue */ +- +- +-UINT8 BigInteger_GetByteValue ( +- IN PBIG_INTEGER pBI, +- IN UINT Index) +-{ +- UINT Array = 0; +- UINT Shift = 0; +- +- if (Index > 0) { +- Array = (Index - 1) >> 0x2; +- Shift = (Index - 1) & 0x3; +- } +- if ((Array > pBI->ArrayLength) || (Index > pBI->IntegerLength)) +- return 0; +- +- +- return (UINT8) UINT32_GETBYTE(pBI->pIntegerArray[Array], Shift - 1); +-} /* End of BigInteger_GetByteValue */ +- +- +-VOID BigInteger_Copy ( +- IN PBIG_INTEGER pBI_Copied, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- BigInteger_AllocSize(pBI_Result, pBI_Copied->IntegerLength); +- NdisCopyMemory((*pBI_Result)->pIntegerArray, pBI_Copied->pIntegerArray, (sizeof(UINT32)*(*pBI_Result)->ArrayLength)); +- (*pBI_Result)->ArrayLength = pBI_Copied->ArrayLength; +- (*pBI_Result)->IntegerLength = pBI_Copied->IntegerLength; +- (*pBI_Result)->Signed = pBI_Copied->Signed; +-} /* End of BigInteger_Copy */ +- +- +-INT BigInteger_UnsignedCompare ( +- IN PBIG_INTEGER pFirstOperand, +- IN PBIG_INTEGER pSecondOperand) +-{ +- INT BIArrayIndex; +- +- if (pFirstOperand->IntegerLength > pSecondOperand->IntegerLength) +- return 1; +- +- if (pFirstOperand->IntegerLength < pSecondOperand->IntegerLength) +- return -1; +- +- if (pFirstOperand->IntegerLength == pSecondOperand->IntegerLength) { +- for(BIArrayIndex = (pFirstOperand->ArrayLength - 1);BIArrayIndex >= 0 ; BIArrayIndex--) +- { +- if (pFirstOperand->pIntegerArray[BIArrayIndex] > pSecondOperand->pIntegerArray[BIArrayIndex]) +- return 1; +- else if (pFirstOperand->pIntegerArray[BIArrayIndex] < pSecondOperand->pIntegerArray[BIArrayIndex]) +- return -1; +- } /* End of for */ +- } /* End of if */ +- +- return 0; +-} /* End of BigInteger_Compare */ +- +- +-VOID BigInteger_Add ( +- IN PBIG_INTEGER pFirstOperand, +- IN PBIG_INTEGER pSecondOperand, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- INT CompareResult; +- UINT32 BIArrayIndex; +- UINT64 Sum, Carry; +- PBIG_INTEGER pTempBI = NULL; +- +- if ((pFirstOperand == NULL) || (pFirstOperand->pIntegerArray == NULL) +- || (pSecondOperand == NULL) || (pSecondOperand->pIntegerArray == NULL)) { +- DEBUGPRINT("BigInteger_Add: first or second operand is NULL.\n"); +- return; +- } /* End of if */ +- +- if (*pBI_Result == NULL) +- BigInteger_Init(pBI_Result); +- +- CompareResult = BigInteger_UnsignedCompare(pFirstOperand, pSecondOperand); +- if ((CompareResult == 0) & ((pFirstOperand->Signed * pSecondOperand->Signed) < 0)) { +- BigInteger_AllocSize(pBI_Result, 1); +- return ; +- } /* End of if */ +- +- /* +- * Singed table +- * A + B || A > B || A < B +- * ------------------------ +- * + + || + || + +- * + - || + || - +- * - + || - || + +- * - - || - || - +- */ +- if ((pFirstOperand->Signed * pSecondOperand->Signed) > 0) { +- if (pFirstOperand->IntegerLength > pSecondOperand->IntegerLength) { +- BigInteger_AllocSize(pBI_Result, pFirstOperand->IntegerLength + 1); +- } else { +- BigInteger_AllocSize(pBI_Result, pSecondOperand->IntegerLength + 1); +- } /* End of if */ +- +- Carry = 0; +- for (BIArrayIndex=0; BIArrayIndex < (*pBI_Result)->ArrayLength; BIArrayIndex++) +- { +- +- Sum = 0; +- if (BIArrayIndex < pFirstOperand->ArrayLength) +- Sum += (UINT64) pFirstOperand->pIntegerArray[BIArrayIndex]; +- +- if (BIArrayIndex < pSecondOperand->ArrayLength) +- Sum += (UINT64) pSecondOperand->pIntegerArray[BIArrayIndex]; +- +- Sum += Carry; +- Carry = Sum >> 32; +- (*pBI_Result)->pIntegerArray[BIArrayIndex] = (UINT32) (Sum & 0xffffffffUL); +- } /* End of for */ +- (*pBI_Result)->Signed = pFirstOperand->Signed; +- BigInteger_ClearHighBits(*pBI_Result); +- } else { +- if ((pFirstOperand->Signed == 1) & (pSecondOperand->Signed == -1)) { +- BigInteger_Copy(pSecondOperand, &pTempBI); +- pTempBI->Signed = 1; +- BigInteger_Sub(pFirstOperand, pTempBI, pBI_Result); +- } else if ((pFirstOperand->Signed == -1) & (pSecondOperand->Signed == 1)) { +- BigInteger_Copy(pFirstOperand, &pTempBI); +- pTempBI->Signed = 1; +- BigInteger_Sub(pSecondOperand, pTempBI, pBI_Result); +- } /* End of if */ +- } /* End of if */ +- +- BigInteger_Free(&pTempBI); +-} /* End of BigInteger_Add */ +- +- +-VOID BigInteger_Sub ( +- IN PBIG_INTEGER pFirstOperand, +- IN PBIG_INTEGER pSecondOperand, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- INT CompareResult; +- UINT32 BIArrayIndex, Carry; +- PBIG_INTEGER pTempBI = NULL, pTempBI2 = NULL; +- +- if ((pFirstOperand == NULL) || (pFirstOperand->pIntegerArray == NULL) +- || (pSecondOperand == NULL) || (pSecondOperand->pIntegerArray == NULL)) { +- DEBUGPRINT("BigInteger_Sub: first or second operand is NULL.\n"); +- return; +- } /* End of if */ +- +- if (*pBI_Result == NULL) +- BigInteger_Init(pBI_Result); +- +- CompareResult = BigInteger_UnsignedCompare(pFirstOperand, pSecondOperand); +- if ((CompareResult == 0) & ((pFirstOperand->Signed * pSecondOperand->Signed) > 0)) { +- BigInteger_AllocSize(pBI_Result, 1); +- return ; +- } /* End of if */ +- +- BigInteger_Init(&pTempBI); +- BigInteger_Init(&pTempBI2); +- +- /* +- * Singed table +- * A - B || A > B || A < B +- * ------------------------ +- * + + || + || - +- * + - || + || + +- * - + || - || - +- * - - || - || + +- */ +- if ((pFirstOperand->Signed * pSecondOperand->Signed) > 0) { +- if (CompareResult == 1) { +- BigInteger_Copy(pFirstOperand, &pTempBI); +- BigInteger_Copy(pSecondOperand, &pTempBI2); +- } else if (CompareResult == -1) { +- BigInteger_Copy(pSecondOperand, &pTempBI); +- BigInteger_Copy(pFirstOperand, &pTempBI2); +- } /* End of if */ +- +- BigInteger_Copy(pTempBI, pBI_Result); +- Carry = 0; +- for (BIArrayIndex=0; BIArrayIndex < (*pBI_Result)->ArrayLength; BIArrayIndex++) +- { +- if (BIArrayIndex < pTempBI2->ArrayLength) { +- if ((*pBI_Result)->pIntegerArray[BIArrayIndex] >= (pTempBI2->pIntegerArray[BIArrayIndex] - Carry)) { +- (*pBI_Result)->pIntegerArray[BIArrayIndex] = (*pBI_Result)->pIntegerArray[BIArrayIndex] - pTempBI2->pIntegerArray[BIArrayIndex] - Carry; +- Carry = 0; +- } else { +- (*pBI_Result)->pIntegerArray[BIArrayIndex] = 0xffffffffUL - pTempBI2->pIntegerArray[BIArrayIndex] - Carry + (*pBI_Result)->pIntegerArray[BIArrayIndex] + 1; +- Carry = 1; +- } /* End of if */ +- } else { +- if ((*pBI_Result)->pIntegerArray[BIArrayIndex] >= Carry) { +- (*pBI_Result)->pIntegerArray[BIArrayIndex] -= Carry; +- Carry = 0; +- } else { +- (*pBI_Result)->pIntegerArray[BIArrayIndex] = 0xffffffffUL - Carry; +- Carry = 1; +- } /* End of if */ +- } /* End of if */ +- } /* End of for */ +- +- if (((pFirstOperand->Signed == 1) & (pSecondOperand->Signed == 1) & (CompareResult == -1)) +- || ((pFirstOperand->Signed == -1) & (pSecondOperand->Signed == -1) & (CompareResult == 1))) +- (*pBI_Result)->Signed = -1; +- +- BigInteger_ClearHighBits(*pBI_Result); +- } else { +- if ((pFirstOperand->Signed == 1) & (pSecondOperand->Signed == -1)) { +- BigInteger_Copy(pSecondOperand, &pTempBI); +- pTempBI->Signed = 1; +- BigInteger_Add(pFirstOperand, pTempBI, pBI_Result); +- } else if ((pFirstOperand->Signed == -1) & (pSecondOperand->Signed == 1)) { +- BigInteger_Copy(pFirstOperand, &pTempBI); +- pTempBI->Signed = 1; +- BigInteger_Add(pTempBI, pSecondOperand, pBI_Result); +- (*pBI_Result)->Signed = -1; +- } /* End of if */ +- } /* End of if */ +- +- BigInteger_Free(&pTempBI); +- BigInteger_Free(&pTempBI2); +-} /* End of BigInteger_Sub */ +- +- +-VOID BigInteger_Mul ( +- IN PBIG_INTEGER pFirstOperand, +- IN PBIG_INTEGER pSecondOperand, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- +- UINT32 BIFirstIndex, BISecondIndex; +- UINT64 FirstValue, SecondValue, Sum, Carry; +- +- if ((pFirstOperand == NULL) || (pFirstOperand->pIntegerArray == NULL) +- || (pSecondOperand == NULL) || (pSecondOperand->pIntegerArray == NULL)) { +- DEBUGPRINT("BigInteger_Mul: first or second operand is NULL.\n"); +- return; +- } /* End of if */ +- +- /* The first or second operand is zero */ +- if (((pFirstOperand->IntegerLength == 1) && (pFirstOperand->pIntegerArray[0] == 0)) +- ||((pSecondOperand->IntegerLength == 1) && (pSecondOperand->pIntegerArray[0] == 0))) { +- BigInteger_AllocSize(pBI_Result, 1); +- goto output; +- } /* End of if */ +- +- /* The first or second operand is one */ +- if ((pFirstOperand->IntegerLength == 1) && (pFirstOperand->pIntegerArray[0] == 1)) { +- BigInteger_Copy(pSecondOperand, pBI_Result); +- goto output; +- } /* End of if */ +- if ((pSecondOperand->IntegerLength == 1) && (pSecondOperand->pIntegerArray[0] == 1)) { +- BigInteger_Copy(pFirstOperand, pBI_Result); +- goto output; +- } /* End of if */ +- +- BigInteger_AllocSize(pBI_Result, pFirstOperand->IntegerLength + pSecondOperand->IntegerLength); +- +- for (BIFirstIndex=0; BIFirstIndex < pFirstOperand->ArrayLength; BIFirstIndex++) +- { +- Carry = 0; +- FirstValue = (UINT64) pFirstOperand->pIntegerArray[BIFirstIndex]; +- if (FirstValue == 0) { +- continue; +- } else { +- for (BISecondIndex=0; BISecondIndex < pSecondOperand->ArrayLength; BISecondIndex++) +- { +- SecondValue = ((UINT64) pSecondOperand->pIntegerArray[BISecondIndex])*FirstValue; +- Sum = (UINT64) ((*pBI_Result)->pIntegerArray[BIFirstIndex + BISecondIndex] + SecondValue + Carry); +- Carry = Sum >> 32; +- (*pBI_Result)->pIntegerArray[BIFirstIndex + BISecondIndex] = (UINT32) (Sum & 0xffffffffUL); +- } /* End of for */ +- while (Carry != 0) { +- Sum = (UINT64) (*pBI_Result)->pIntegerArray[BIFirstIndex + BISecondIndex]; +- Sum += Carry; +- +- Carry = Sum >> 32; +- (*pBI_Result)->pIntegerArray[BIFirstIndex + BISecondIndex] = (UINT32) (Sum & 0xffffffffUL); +- BISecondIndex++; +- } /* End of while */ +- } /* End of if */ +- } /* End of for */ +- +-output: +- (*pBI_Result)->Signed = pFirstOperand->Signed * pSecondOperand->Signed; +- BigInteger_ClearHighBits(*pBI_Result); +-} /* End of BigInteger_Mul */ +- +- +-VOID BigInteger_Square ( +- IN PBIG_INTEGER pBI, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- INT BIFirstIndex, BISecondIndex; +- UINT32 HBITS_Value, LBITS_Value, Temp1_Value, Temp2_Value, Carry32; +- UINT32 *Point_Of_S, *Point_Of_Result, *Point_Of_BI; +- UINT64 Result64_1, Result64_2, Carry64, TempValue64; +- +- if ((pBI == NULL) || (pBI->pIntegerArray == NULL)) { +- DEBUGPRINT("\tBigInteger_Square: the operand is NULL.\n"); +- return; +- } /* End of if */ +- +- /* The operand is zero */ +- if ((pBI->IntegerLength == 1) && (pBI->pIntegerArray[0] == 0)) { +- BigInteger_AllocSize(pBI_Result, 1); +- goto output; +- } /* End of if */ +- +- BigInteger_AllocSize(pBI_Result, (pBI->IntegerLength*2) + 20); +- BigInteger_AllocSize(&pBI_S, (pBI->IntegerLength*2) + 20); +- BigInteger_AllocSize(&pBI_O, (pBI->IntegerLength*2) + 20); +- +- /* +- * Input: pBI = {a_0, a_1, a_2, a_3, ..., a_n} +- * Step1. calculate a_0^2, a_1^2, a_2^2, a_3^2 ... a_n^2 +- */ +- Point_Of_S = pBI_S->pIntegerArray; +- for (BIFirstIndex=0; BIFirstIndex < pBI->ArrayLength; BIFirstIndex++) +- { +- HBITS_Value = UINT32_HBITS(pBI->pIntegerArray[BIFirstIndex]); +- LBITS_Value = UINT32_LBITS(pBI->pIntegerArray[BIFirstIndex]); +- Temp1_Value = HBITS_Value*LBITS_Value; +- Temp2_Value = (Temp1_Value & 0x7fff) << 0x11; +- Point_Of_S[0] = (LBITS_Value*LBITS_Value) + Temp2_Value; +- Point_Of_S[1] = (HBITS_Value*HBITS_Value) + ((Temp1_Value >> 0xf) & 0x1ffff); +- if (Point_Of_S[0] < Temp2_Value) +- Point_Of_S[1] += 1; +- +- Point_Of_S += 2; +- } /* End of for */ +- +- /* +- * Step2. calculate a_0*{a_1, a_2, a_3, a_4, ..., a_n} +- */ +- Point_Of_BI = pBI->pIntegerArray; +- Point_Of_Result = (*pBI_Result)->pIntegerArray; +- Point_Of_Result[0] = 0; +- TempValue64 = (UINT64) Point_Of_BI[0]; +- Point_Of_Result++; +- Carry64 = 0; +- for (BIFirstIndex=1; BIFirstIndex < pBI->ArrayLength; BIFirstIndex++) +- { +- Result64_1 = (UINT64) Point_Of_BI[BIFirstIndex]*TempValue64; +- Result64_1 += Carry64; +- Carry64 = (Result64_1 >> 32); +- Point_Of_Result[0] = (UINT32) (Result64_1 & 0xffffffffUL); +- Point_Of_Result++; +- } /* End of for */ +- if (Carry64 > 0) +- Point_Of_Result[0] = (UINT32) (Carry64 & 0xffffffffUL); +- +- /* +- * Step3. calculate +- * a_1*{a_2, a_3, a_4, ..., a_n} +- * a_2*{a_3, a_4, a_5, ..., a_n} +- * a_3*{a_4, a_5, a_6, ..., a_n} +- * a_4*{a_5, a_6, a_7, ..., a_n} +- * ... +- * a_n-1*{a_n} +- */ +- Point_Of_BI = pBI->pIntegerArray; +- for (BIFirstIndex=1; BIFirstIndex < (pBI->ArrayLength - 1); BIFirstIndex++) +- { +- Point_Of_Result = (*pBI_Result)->pIntegerArray; +- Point_Of_Result += (BIFirstIndex*2) + 1; +- TempValue64 = (UINT64) Point_Of_BI[BIFirstIndex]; +- Carry64 = 0; +- for (BISecondIndex=(BIFirstIndex + 1); BISecondIndex < pBI->ArrayLength; BISecondIndex++) +- { +- Result64_1 = ((UINT64) Point_Of_Result[0]) + Carry64; +- Result64_2 = (UINT64) Point_Of_BI[BISecondIndex]*TempValue64; +- Carry64 = (Result64_1 >> 32); +- Result64_1 = (Result64_1 & 0xffffffffUL); +- Result64_1 = Result64_1 + Result64_2; +- Carry64 += (Result64_1 >> 32); +- Point_Of_Result[0] = (UINT32) (Result64_1 & 0xffffffffUL); +- Point_Of_Result++; +- } /* End of for */ +- if (Carry64 > 0) +- Point_Of_Result[0] += (UINT32) (Carry64 & 0xffffffffUL); +- } /* End of for */ +- +- BigInteger_ClearHighBits(*pBI_Result); +- BigInteger_Copy(*pBI_Result, &pBI_O); +- +- Carry32 = 0; +- for (BIFirstIndex=0; BIFirstIndex < pBI_O->ArrayLength; BIFirstIndex++) { +- pBI_O->pIntegerArray[BIFirstIndex] = (pBI_O->pIntegerArray[BIFirstIndex] << 1) | Carry32; +- if (pBI_O->pIntegerArray[BIFirstIndex] < (*pBI_Result)->pIntegerArray[BIFirstIndex]) +- Carry32 = 1; +- else +- Carry32 = 0; +- } /* End of for */ +- pBI_O->pIntegerArray[BIFirstIndex] = Carry32; +- pBI_O->IntegerLength++; +- pBI_O->ArrayLength++; +- BigInteger_ClearHighBits(pBI_O); +- +- BigInteger_Add(pBI_O, pBI_S, pBI_Result); +-output: +- (*pBI_Result)->Signed = 1; +- BigInteger_ClearHighBits(*pBI_Result); +-} /* End of BigInteger_Square */ +- +- +-VOID BigInteger_Div ( +- IN PBIG_INTEGER pFirstOperand, +- IN PBIG_INTEGER pSecondOperand, +- OUT PBIG_INTEGER *pBI_Result, +- OUT PBIG_INTEGER *pBI_Remainder) +-{ +- INT CompareResult; +- INT Index, MulIndex, ComputeSize; +- UINT32 MulStart; +- UINT AllocLength, ArrayIndex, ShiftIndex; +- PBIG_INTEGER pTempBI = NULL, pTempBI2 = NULL, pMulBI = NULL; +- UINT8 SecondHighByte; +- +- if ((pFirstOperand == NULL) || (pFirstOperand->pIntegerArray == NULL) +- || (pSecondOperand == NULL) || (pSecondOperand->pIntegerArray == NULL)) { +- DEBUGPRINT("BigInteger_Div: first or second operand is NULL.\n"); +- return; +- } /* End of if */ +- +- /* The second operand is zero */ +- if ((pSecondOperand->IntegerLength == 1) && (pSecondOperand->pIntegerArray[0] == 0)) { +- DEBUGPRINT("BigInteger_Div: second operand is zero.\n"); +- return; +- } /* End of if */ +- +- if (*pBI_Result == NULL) +- BigInteger_Init(pBI_Result); +- if (*pBI_Remainder == NULL) +- BigInteger_Init(pBI_Remainder); +- +- /* The second operand is one */ +- if ((pSecondOperand->IntegerLength == 1) && (pSecondOperand->pIntegerArray[0] == 1)) { +- BigInteger_Copy(pFirstOperand, pBI_Result); +- BigInteger_Bin2BI(Value_0, 1, pBI_Remainder); +- goto output; +- } /* End of if */ +- +- CompareResult = BigInteger_UnsignedCompare(pFirstOperand, pSecondOperand); +- if (CompareResult == 0) { +- BigInteger_Bin2BI(Value_1, 1, pBI_Result); +- BigInteger_Bin2BI(Value_0, 1, pBI_Remainder); +- goto output; +- } else if (CompareResult == -1) { +- BigInteger_Bin2BI(Value_0, 1, pBI_Result); +- BigInteger_Copy(pFirstOperand, pBI_Remainder); +- goto output; +- } /* End of if */ +- BigInteger_AllocSize(pBI_Result, pFirstOperand->IntegerLength - pSecondOperand->IntegerLength + 1); +- BigInteger_AllocSize(pBI_Remainder, pSecondOperand->IntegerLength); +- +- AllocLength = (UINT) (pFirstOperand->IntegerLength << 1); +- BigInteger_AllocSize(&pTempBI, AllocLength); +- BigInteger_AllocSize(&pTempBI2, AllocLength); +- BigInteger_AllocSize(&pMulBI, AllocLength); +- +- BigInteger_Copy(pFirstOperand, pBI_Remainder); +- SecondHighByte = BigInteger_GetByteValue(pSecondOperand, pSecondOperand->IntegerLength); +- ComputeSize = (INT) pFirstOperand->IntegerLength - pSecondOperand->IntegerLength + 1; +- for (Index = (INT) ComputeSize;Index >= 0;Index--) { +- if (BigInteger_UnsignedCompare(*pBI_Remainder, pSecondOperand) == -1) +- break; +- +- if (((pSecondOperand->IntegerLength + Index) - (*pBI_Remainder)->IntegerLength) <= 1) { +- BigInteger_AllocSize(&pMulBI, Index + 1); +- ArrayIndex = 0; +- if (Index > 0) +- ArrayIndex = (UINT) (Index - 1) >> 2 ; +- ShiftIndex = (Index & 0x03); +- if (ShiftIndex == 0) +- ShiftIndex = 4; +- ShiftIndex--; +- MulStart = 0; +- MulStart = (BigInteger_GetByteValue((*pBI_Remainder), pFirstOperand->IntegerLength + Index - ComputeSize + 1) & 0xFF) << 8; +- MulStart = MulStart | (BigInteger_GetByteValue((*pBI_Remainder), pFirstOperand->IntegerLength + Index - ComputeSize) & 0xFF); +- if (MulStart < (UINT32) SecondHighByte) +- continue; +- +- MulStart = MulStart / (UINT32) SecondHighByte; +- +- if (MulStart > 0xFF) +- MulStart = 0x100; +- +- for (MulIndex = (INT) MulStart;MulIndex <= 0x101;MulIndex++) { /* 0xFFFF / 0xFF = 0x101 */ +- if ((MulIndex > 0xFF) && (ShiftIndex == 3)) +- pMulBI->pIntegerArray[ArrayIndex + 1] = 0x01; +- pMulBI->pIntegerArray[ArrayIndex] = ((UINT) MulIndex << (8*ShiftIndex)); +- BigInteger_Mul(pSecondOperand, pMulBI , &pTempBI); +- CompareResult = BigInteger_UnsignedCompare(*pBI_Remainder, pTempBI); +- if (CompareResult < 1) { +- if (MulIndex > 1) { +- if (CompareResult != 0) { +- if ((MulIndex == 0x100) && (ShiftIndex == 3)) +- pMulBI->pIntegerArray[ArrayIndex + 1] = 0; +- pMulBI->pIntegerArray[ArrayIndex] = ((UINT) (MulIndex - 1) << (8*ShiftIndex)); +- } /* End of if */ +- +- BigInteger_Mul(pSecondOperand, pMulBI, &pTempBI); +- BigInteger_Sub(*pBI_Remainder, pTempBI, &pTempBI2); +- BigInteger_Copy(pTempBI2, pBI_Remainder); +- BigInteger_Add(*pBI_Result, pMulBI, &pTempBI2); +- BigInteger_Copy(pTempBI2, pBI_Result); +- } /* End of if */ +- break; +- } /* End of if */ +- +- if ((MulIndex >= 0x100) && (ShiftIndex == 3)) +- pMulBI->pIntegerArray[ArrayIndex++] = 0; +- pMulBI->pIntegerArray[ArrayIndex] = 0; +- } /* End of for */ +- } /* End of if */ +- } /* End of for */ +- +- BigInteger_Free(&pTempBI); +- BigInteger_Free(&pTempBI2); +- BigInteger_Free(&pMulBI); +-output: +- (*pBI_Result)->Signed = pFirstOperand->Signed * pSecondOperand->Signed; +- (*pBI_Remainder)->Signed = pFirstOperand->Signed * pSecondOperand->Signed; +- BigInteger_ClearHighBits(*pBI_Result); +- BigInteger_ClearHighBits(*pBI_Remainder); +-} /* End of BigInteger_Div */ +- +- +-VOID BigInteger_Montgomery_Reduction ( +- IN PBIG_INTEGER pBI_A, +- IN PBIG_INTEGER pBI_P, +- IN PBIG_INTEGER pBI_R, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- UINT32 *Point_P, *Point_Result; +- UINT32 LoopCount; +- UINT64 Result64_1, Result64_2, Carry64, TempValue64; +- INT FirstLoop, SecondLoop; +- +- BigInteger_AllocSize(pBI_Result, pBI_A->IntegerLength+ pBI_P->IntegerLength + 20); +- BigInteger_Copy(pBI_A, pBI_Result); +- +- Point_P = pBI_P->pIntegerArray; +- Point_Result = (*pBI_Result)->pIntegerArray; +- +- LoopCount = Bits_Of_R >> 0x5; +- for (FirstLoop = 0;FirstLoop < LoopCount;FirstLoop++) { +- Carry64 = 0; +- TempValue64 = (UINT64) Point_Result[0]; +- for (SecondLoop = 0;SecondLoop < pBI_P->ArrayLength;SecondLoop++) { +- Result64_1 = ((UINT64) Point_Result[SecondLoop]) + Carry64; +- Result64_2 = (UINT64) Point_P[SecondLoop]*TempValue64; +- Carry64 = (Result64_1 >> 32); +- Result64_1 = (Result64_1 & 0xffffffffUL); +- Result64_1 = Result64_1 + Result64_2; +- Carry64 += (Result64_1 >> 32); +- Point_Result[SecondLoop] = (UINT32) (Result64_1 & 0xffffffffUL); +- } /* End of for */ +- while (Carry64 != 0) { +- Result64_1 = ((UINT64) Point_Result[SecondLoop]) + Carry64; +- Carry64 = Result64_1 >> 32; +- Point_Result[SecondLoop] = (UINT32) (Result64_1 & 0xffffffffUL); +- SecondLoop++; +- } /* End of while */ +- Point_Result++; +- } /* End of for */ +- +- for (FirstLoop = 0;FirstLoop <= LoopCount;FirstLoop++) { +- (*pBI_Result)->pIntegerArray[FirstLoop] = (*pBI_Result)->pIntegerArray[FirstLoop + LoopCount]; +- } /* End of for */ +- if ((*pBI_Result)->pIntegerArray[LoopCount] != 0) +- (*pBI_Result)->ArrayLength = LoopCount + 1; +- else +- (*pBI_Result)->ArrayLength = LoopCount; +- +- (*pBI_Result)->IntegerLength = (*pBI_Result)->ArrayLength*4; +- BigInteger_ClearHighBits(*pBI_Result); +- +- if (BigInteger_UnsignedCompare(*pBI_Result, pBI_P) >= 0) { +- BigInteger_Sub(*pBI_Result, pBI_P, &pBI_U); +- BigInteger_Copy(pBI_U, pBI_Result); +- } /* End of if */ +- BigInteger_ClearHighBits(*pBI_Result); +-} /* End of BigInteger_Montgomery_Reduction */ +- +- +-VOID BigInteger_Montgomery_ExpMod ( +- IN PBIG_INTEGER pBI_G, +- IN PBIG_INTEGER pBI_E, +- IN PBIG_INTEGER pBI_P, +- OUT PBIG_INTEGER *pBI_Result) +-{ +- UINT Bits_Of_P; +- UINT32 Index, Index2, AllocLength; +- UINT32 Sliding_Value , Sliding_HighValue, Sliding_LowValue; +- PBIG_INTEGER pBI_Temp1 = NULL, pBI_Temp2 = NULL; +- PBIG_INTEGER pBI_X = NULL, pBI_R = NULL, pBI_RR = NULL, pBI_1 = NULL; +- BIG_INTEGER *pBI_A[SLIDING_WINDOW]; +- UINT8 *pRValue = NULL; +- +- AllocLength = (pBI_G->IntegerLength + pBI_E->IntegerLength + pBI_P->IntegerLength + 300); +- BigInteger_AllocSize(&pBI_Temp1, AllocLength); +- BigInteger_AllocSize(&pBI_Temp2, AllocLength); +- +- /* Calculate the bits of P and E, the highest bit is 1 */ +- BigInteger_BitsOfBI(pBI_P, &Bits_Of_P); +- +- if ((pBI_E->IntegerLength == 1) && (pBI_E->pIntegerArray[0] == 1)) { +- BigInteger_Div(pBI_G, pBI_P, &pBI_Temp1, pBI_Result); +- goto memory_free; +- } /* End of if */ +- +- if ((pBI_E->IntegerLength == 1) && (pBI_E->pIntegerArray[0] == 2)) { +- BigInteger_Mul(pBI_G, pBI_G, &pBI_Temp1); +- BigInteger_Div(pBI_Temp1, pBI_P, &pBI_Temp2, pBI_Result); +- goto memory_free; +- } /* End of if */ +- +- /* +- * Main algorithm +- */ +- BigInteger_Init(&pBI_R); +- BigInteger_Init(&pBI_RR); +- BigInteger_Bin2BI(Value_1, 1, &pBI_1); +- BigInteger_AllocSize(&pBI_X, AllocLength); +- BigInteger_AllocSize(&pBI_U, AllocLength); // for BigInteger_Montgomery_Reduction +- BigInteger_AllocSize(&pBI_S, AllocLength); // for BigInteger_Square +- BigInteger_AllocSize(&pBI_O, AllocLength); // for BigInteger_Square +- +- for (Index = 0; Index < SLIDING_WINDOW; Index++) { +- pBI_A[Index] = NULL; +- BigInteger_AllocSize(&pBI_A[Index], 193); +- } /* End of for */ +- BigInteger_Bin2BI(WPS_DH_P_VALUE, 192, &pBI_Temp1); +- if (NdisCmpMemory(pBI_P->pIntegerArray, pBI_Temp1->pIntegerArray, pBI_P->IntegerLength) == 0) { +- BigInteger_Bin2BI(WPS_DH_X_VALUE, 184, &pBI_X); +- BigInteger_Bin2BI(WPS_DH_R_VALUE, 193, &pBI_R); +- BigInteger_Bin2BI(WPS_DH_RRModP_VALUE, 192, &pBI_RR); +- Bits_Of_R = 1537; +- } else { +- if ((Bits_Of_P % 8) == 0) { +- AllocLength = pBI_P->IntegerLength + 1; +- } else { +- AllocLength = pBI_P->IntegerLength; +- } /* End of if */ +- pRValue = (UINT8 *) kmalloc(sizeof(UINT8)*AllocLength, GFP_ATOMIC); +- if (pRValue == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __FUNCTION__)); +- goto memory_free; +- } +- NdisZeroMemory(pRValue, sizeof(UINT8)*AllocLength); +- pRValue[0] = (UINT8) (1 << (Bits_Of_P & 0x7)); +- BigInteger_Bin2BI(pRValue, AllocLength , &pBI_R); +- +- BigInteger_Mul(pBI_R, pBI_R, &pBI_Temp1); +- BigInteger_Div(pBI_Temp1, pBI_P, &pBI_A[1], &pBI_RR); +- +- /* X = 1*R (mod P) */ +- BigInteger_Div(pBI_R, pBI_P, &pBI_Temp2, &pBI_X); +- } /* End of if */ +- +- /* A = G*R (mod P) => A = MonMod(G, R^2 mod P) */ +- BigInteger_Mul(pBI_G, pBI_RR, &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P , pBI_R, &pBI_A[1]); +- for (Index = 2; Index < SLIDING_WINDOW; Index++) { +- BigInteger_Mul(pBI_A[Index - 1], pBI_A[1], &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P, pBI_R, &pBI_A[Index]); +- } /* End of for */ +- +- for (Index = pBI_E->IntegerLength ; Index > 0 ; Index--) { +- for (Index2 = 0; Index2 < 4 ; Index2++) { +- BigInteger_Square(pBI_X, &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P, pBI_R, &pBI_X); +- } /* End of for */ +- +- Sliding_Value = BigInteger_GetByteValue(pBI_E, Index); +- Sliding_HighValue = (Sliding_Value >> 4); +- if (Sliding_HighValue != 0) { +- BigInteger_Mul(pBI_A[Sliding_HighValue], pBI_X, &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P, pBI_R, &pBI_X); +- } /* End of if */ +- +- for (Index2 = 0; Index2 < 4 ; Index2++) { +- BigInteger_Square(pBI_X, &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P, pBI_R, &pBI_X); +- } /* End of for */ +- +- Sliding_LowValue = Sliding_Value & 0x0f; +- if (Sliding_LowValue != 0) { +- BigInteger_Mul(pBI_A[Sliding_LowValue], pBI_X, &pBI_Temp1); +- BigInteger_Montgomery_Reduction(pBI_Temp1, pBI_P, pBI_R, &pBI_X); +- } /* End of if */ +- } /* End of for */ +- BigInteger_Montgomery_Reduction(pBI_X, pBI_P , pBI_R, pBI_Result); +- +- BigInteger_Free(&pBI_X); +- BigInteger_Free(&pBI_R); +- BigInteger_Free(&pBI_RR); +- BigInteger_Free(&pBI_1); +- BigInteger_Free(&pBI_U); +- BigInteger_Free(&pBI_S); +- BigInteger_Free(&pBI_O); +- for(Index = 0; Index < SLIDING_WINDOW; Index++) +- BigInteger_Free(&pBI_A[Index]); +- if (pRValue != NULL) +- kfree(pRValue); +- +-memory_free: +- BigInteger_Free(&pBI_Temp1); +- BigInteger_Free(&pBI_Temp2); +-} /* End of BigInteger_Montgomery_ExpMod */ +- +-/* End of crypt_biginteger.c */ +diff --git a/drivers/staging/rt3090/common/crypt_dh.c b/drivers/staging/rt3090/common/crypt_dh.c +deleted file mode 100644 +index 0f69f2a..0000000 +--- a/drivers/staging/rt3090/common/crypt_dh.c ++++ /dev/null +@@ -1,234 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- crypt_dh.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Eddy 2009/01/19 Create AES-128, AES-192, AES-256, AES-CBC +-*/ +- +-#include "crypt_dh.h" +-#include "crypt_biginteger.h" +- +-/* +-======================================================================== +-Routine Description: +- Diffie-Hellman public key generation +- +-Arguments: +- GValue Array in UINT8 +- GValueLength The length of G in bytes +- PValue Array in UINT8 +- PValueLength The length of P in bytes +- PrivateKey Private key +- PrivateKeyLength The length of Private key in bytes +- +-Return Value: +- PublicKey Public key +- PublicKeyLength The length of public key in bytes +- +-Note: +- Reference to RFC2631 +- PublicKey = G^PrivateKey (mod P) +-======================================================================== +-*/ +-void DH_PublicKey_Generate ( +- IN UINT8 GValue[], +- IN UINT GValueLength, +- IN UINT8 PValue[], +- IN UINT PValueLength, +- IN UINT8 PrivateKey[], +- IN UINT PrivateKeyLength, +- OUT UINT8 PublicKey[], +- INOUT UINT *PublicKeyLength) +-{ +- PBIG_INTEGER pBI_G = NULL; +- PBIG_INTEGER pBI_P = NULL; +- PBIG_INTEGER pBI_PrivateKey = NULL; +- PBIG_INTEGER pBI_PublicKey = NULL; +- +- /* +- * 1. Check the input parameters +- * - GValueLength, PValueLength and PrivateLength must be large than zero +- * - PublicKeyLength must be large or equal than PValueLength +- * - PValue must be odd +- * +- * - PValue must be prime number (no implement) +- * - GValue must be greater than 0 but less than the PValue (no implement) +- */ +- if (GValueLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_PublicKey_Generate: G length is (%d)\n", GValueLength)); +- return; +- } /* End of if */ +- if (PValueLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_PublicKey_Generate: P length is (%d)\n", PValueLength)); +- return; +- } /* End of if */ +- if (PrivateKeyLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_PublicKey_Generate: private key length is (%d)\n", PrivateKeyLength)); +- return; +- } /* End of if */ +- if (*PublicKeyLength < PValueLength) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_PublicKey_Generate: public key length(%d) must be large or equal than P length(%d)\n", +- *PublicKeyLength, PValueLength)); +- return; +- } /* End of if */ +- if (!(PValue[PValueLength - 1] & 0x1)) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_PublicKey_Generate: P value must be odd\n")); +- return; +- } /* End of if */ +- +- /* +- * 2. Transfer parameters to BigInteger structure +- */ +- BigInteger_Init(&pBI_G); +- BigInteger_Init(&pBI_P); +- BigInteger_Init(&pBI_PrivateKey); +- BigInteger_Init(&pBI_PublicKey); +- BigInteger_Bin2BI(GValue, GValueLength, &pBI_G); +- BigInteger_Bin2BI(PValue, PValueLength, &pBI_P); +- BigInteger_Bin2BI(PrivateKey, PrivateKeyLength, &pBI_PrivateKey); +- +- /* +- * 3. Calculate PublicKey = G^PrivateKey (mod P) +- * - BigInteger Operation +- * - Montgomery reduction +- */ +- BigInteger_Montgomery_ExpMod(pBI_G, pBI_PrivateKey, pBI_P, &pBI_PublicKey); +- +- /* +- * 4. Transfer BigInteger structure to char array +- */ +- BigInteger_BI2Bin(pBI_PublicKey, PublicKey, PublicKeyLength); +- +- BigInteger_Free(&pBI_G); +- BigInteger_Free(&pBI_P); +- BigInteger_Free(&pBI_PrivateKey); +- BigInteger_Free(&pBI_PublicKey); +-} /* End of DH_PublicKey_Generate */ +- +- +-/* +-======================================================================== +-Routine Description: +- Diffie-Hellman secret key generation +- +-Arguments: +- PublicKey Public key +- PublicKeyLength The length of Public key in bytes +- PValue Array in UINT8 +- PValueLength The length of P in bytes +- PrivateKey Private key +- PrivateKeyLength The length of Private key in bytes +- +-Return Value: +- SecretKey Secret key +- SecretKeyLength The length of secret key in bytes +- +-Note: +- Reference to RFC2631 +- SecretKey = PublicKey^PrivateKey (mod P) +-======================================================================== +-*/ +-void DH_SecretKey_Generate ( +- IN UINT8 PublicKey[], +- IN UINT PublicKeyLength, +- IN UINT8 PValue[], +- IN UINT PValueLength, +- IN UINT8 PrivateKey[], +- IN UINT PrivateKeyLength, +- OUT UINT8 SecretKey[], +- INOUT UINT *SecretKeyLength) +-{ +- PBIG_INTEGER pBI_P = NULL; +- PBIG_INTEGER pBI_SecretKey = NULL; +- PBIG_INTEGER pBI_PrivateKey = NULL; +- PBIG_INTEGER pBI_PublicKey = NULL; +- +- /* +- * 1. Check the input parameters +- * - PublicKeyLength, PValueLength and PrivateLength must be large than zero +- * - SecretKeyLength must be large or equal than PValueLength +- * - PValue must be odd +- * +- * - PValue must be prime number (no implement) +- */ +- if (PublicKeyLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_SecretKey_Generate: public key length is (%d)\n", PublicKeyLength)); +- return; +- } /* End of if */ +- if (PValueLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_SecretKey_Generate: P length is (%d)\n", PValueLength)); +- return; +- } /* End of if */ +- if (PrivateKeyLength == 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_SecretKey_Generate: private key length is (%d)\n", PrivateKeyLength)); +- return; +- } /* End of if */ +- if (*SecretKeyLength < PValueLength) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_SecretKey_Generate: secret key length(%d) must be large or equal than P length(%d)\n", +- *SecretKeyLength, PValueLength)); +- return; +- } /* End of if */ +- if (!(PValue[PValueLength - 1] & 0x1)) { +- DBGPRINT(RT_DEBUG_ERROR, ("DH_SecretKey_Generate: P value must be odd\n")); +- return; +- } /* End of if */ +- +- /* +- * 2. Transfer parameters to BigInteger structure +- */ +- BigInteger_Init(&pBI_P); +- BigInteger_Init(&pBI_PrivateKey); +- BigInteger_Init(&pBI_PublicKey); +- BigInteger_Init(&pBI_SecretKey); +- +- BigInteger_Bin2BI(PublicKey, PublicKeyLength, &pBI_PublicKey); +- BigInteger_Bin2BI(PValue, PValueLength, &pBI_P); +- BigInteger_Bin2BI(PrivateKey, PrivateKeyLength, &pBI_PrivateKey); +- +- /* +- * 3. Calculate SecretKey = PublicKey^PrivateKey (mod P) +- * - BigInteger Operation +- * - Montgomery reduction +- */ +- BigInteger_Montgomery_ExpMod(pBI_PublicKey, pBI_PrivateKey, pBI_P, &pBI_SecretKey); +- +- /* +- * 4. Transfer BigInteger structure to char array +- */ +- BigInteger_BI2Bin(pBI_SecretKey, SecretKey, SecretKeyLength); +- +- BigInteger_Free(&pBI_P); +- BigInteger_Free(&pBI_PrivateKey); +- BigInteger_Free(&pBI_PublicKey); +- BigInteger_Free(&pBI_SecretKey); +-} /* End of DH_SecretKey_Generate */ +diff --git a/drivers/staging/rt3090/common/crypt_hmac.c b/drivers/staging/rt3090/common/crypt_hmac.c +deleted file mode 100644 +index e285408..0000000 +--- a/drivers/staging/rt3090/common/crypt_hmac.c ++++ /dev/null +@@ -1,279 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- *************************************************************************/ +- +-#include "../crypt_hmac.h" +- +- +-#ifdef HMAC_SHA1_SUPPORT +-/* +-======================================================================== +-Routine Description: +- HMAC using SHA1 hash function +- +-Arguments: +- key Secret key +- key_len The length of the key in bytes +- message Message context +- message_len The length of message in bytes +- macLen Request the length of message authentication code +- +-Return Value: +- mac Message authentication code +- +-Note: +- None +-======================================================================== +-*/ +-VOID HMAC_SHA1 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen) +-{ +- SHA1_CTX_STRUC sha_ctx1; +- SHA1_CTX_STRUC sha_ctx2; +- UINT8 K0[SHA1_BLOCK_SIZE]; +- UINT8 Digest[SHA1_DIGEST_SIZE]; +- UINT index; +- +- NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); +- NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); +- /* +- * If the length of K = B(Block size): K0 = K. +- * If the length of K > B: hash K to obtain an L byte string, +- * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). +- * If the length of K < B: append zeros to the end of K to create a B-byte string K0 +- */ +- NdisZeroMemory(K0, SHA1_BLOCK_SIZE); +- if (KeyLen <= SHA1_BLOCK_SIZE) +- NdisMoveMemory(K0, Key, KeyLen); +- else +- RT_SHA1(Key, KeyLen, K0); +- /* End of if */ +- +- /* Exclusive-Or K0 with ipad */ +- /* ipad: Inner pad; the byte x��36�� repeated B times. */ +- for (index = 0; index < SHA1_BLOCK_SIZE; index++) +- K0[index] ^= 0x36; +- /* End of for */ +- +- SHA1_Init(&sha_ctx1); +- /* H(K0^ipad) */ +- SHA1_Append(&sha_ctx1, K0, sizeof(K0)); +- /* H((K0^ipad)||text) */ +- SHA1_Append(&sha_ctx1, Message, MessageLen); +- SHA1_End(&sha_ctx1, Digest); +- +- /* Exclusive-Or K0 with opad and remove ipad */ +- /* opad: Outer pad; the byte x��5c�� repeated B times. */ +- for (index = 0; index < SHA1_BLOCK_SIZE; index++) +- K0[index] ^= 0x36^0x5c; +- /* End of for */ +- +- SHA1_Init(&sha_ctx2); +- /* H(K0^opad) */ +- SHA1_Append(&sha_ctx2, K0, sizeof(K0)); +- /* H( (K0^opad) || H((K0^ipad)||text) ) */ +- SHA1_Append(&sha_ctx2, Digest, SHA1_DIGEST_SIZE); +- SHA1_End(&sha_ctx2, Digest); +- +- if (MACLen > SHA1_DIGEST_SIZE) +- NdisMoveMemory(MAC, Digest, SHA1_DIGEST_SIZE); +- else +- NdisMoveMemory(MAC, Digest, MACLen); +-} /* End of HMAC_SHA1 */ +-#endif /* HMAC_SHA1_SUPPORT */ +- +- +-#ifdef HMAC_SHA256_SUPPORT +-/* +-======================================================================== +-Routine Description: +- HMAC using SHA256 hash function +- +-Arguments: +- key Secret key +- key_len The length of the key in bytes +- message Message context +- message_len The length of message in bytes +- macLen Request the length of message authentication code +- +-Return Value: +- mac Message authentication code +- +-Note: +- None +-======================================================================== +-*/ +-VOID HMAC_SHA256 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen) +-{ +- SHA256_CTX_STRUC sha_ctx1; +- SHA256_CTX_STRUC sha_ctx2; +- UINT8 K0[SHA256_BLOCK_SIZE]; +- UINT8 Digest[SHA256_DIGEST_SIZE]; +- UINT index; +- +- NdisZeroMemory(&sha_ctx1, sizeof(SHA256_CTX_STRUC)); +- NdisZeroMemory(&sha_ctx2, sizeof(SHA256_CTX_STRUC)); +- /* +- * If the length of K = B(Block size): K0 = K. +- * If the length of K > B: hash K to obtain an L byte string, +- * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). +- * If the length of K < B: append zeros to the end of K to create a B-byte string K0 +- */ +- NdisZeroMemory(K0, SHA256_BLOCK_SIZE); +- if (KeyLen <= SHA256_BLOCK_SIZE) { +- NdisMoveMemory(K0, Key, KeyLen); +- } else { +- RT_SHA256(Key, KeyLen, K0); +- } +- +- /* Exclusive-Or K0 with ipad */ +- /* ipad: Inner pad; the byte x��36�� repeated B times. */ +- for (index = 0; index < SHA256_BLOCK_SIZE; index++) +- K0[index] ^= 0x36; +- /* End of for */ +- +- SHA256_Init(&sha_ctx1); +- /* H(K0^ipad) */ +- SHA256_Append(&sha_ctx1, K0, sizeof(K0)); +- /* H((K0^ipad)||text) */ +- SHA256_Append(&sha_ctx1, Message, MessageLen); +- SHA256_End(&sha_ctx1, Digest); +- +- /* Exclusive-Or K0 with opad and remove ipad */ +- /* opad: Outer pad; the byte x��5c�� repeated B times. */ +- for (index = 0; index < SHA256_BLOCK_SIZE; index++) +- K0[index] ^= 0x36^0x5c; +- /* End of for */ +- +- SHA256_Init(&sha_ctx2); +- /* H(K0^opad) */ +- SHA256_Append(&sha_ctx2, K0, sizeof(K0)); +- /* H( (K0^opad) || H((K0^ipad)||text) ) */ +- SHA256_Append(&sha_ctx2, Digest, SHA256_DIGEST_SIZE); +- SHA256_End(&sha_ctx2, Digest); +- +- if (MACLen > SHA256_DIGEST_SIZE) +- NdisMoveMemory(MAC, Digest,SHA256_DIGEST_SIZE); +- else +- NdisMoveMemory(MAC, Digest, MACLen); +- +-} /* End of HMAC_SHA256 */ +-#endif /* HMAC_SHA256_SUPPORT */ +- +- +-#ifdef HMAC_MD5_SUPPORT +-/* +-======================================================================== +-Routine Description: +- HMAC using MD5 hash function +- +-Arguments: +- key Secret key +- key_len The length of the key in bytes +- message Message context +- message_len The length of message in bytes +- macLen Request the length of message authentication code +- +-Return Value: +- mac Message authentication code +- +-Note: +- None +-======================================================================== +-*/ +-VOID HMAC_MD5( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen) +-{ +- MD5_CTX_STRUC md5_ctx1; +- MD5_CTX_STRUC md5_ctx2; +- UINT8 K0[MD5_BLOCK_SIZE]; +- UINT8 Digest[MD5_DIGEST_SIZE]; +- UINT index; +- +- NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); +- NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); +- /* +- * If the length of K = B(Block size): K0 = K. +- * If the length of K > B: hash K to obtain an L byte string, +- * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). +- * If the length of K < B: append zeros to the end of K to create a B-byte string K0 +- */ +- NdisZeroMemory(K0, MD5_BLOCK_SIZE); +- if (KeyLen <= MD5_BLOCK_SIZE) { +- NdisMoveMemory(K0, Key, KeyLen); +- } else { +- RT_MD5(Key, KeyLen, K0); +- } +- +- /* Exclusive-Or K0 with ipad */ +- /* ipad: Inner pad; the byte x��36�� repeated B times. */ +- for (index = 0; index < MD5_BLOCK_SIZE; index++) +- K0[index] ^= 0x36; +- /* End of for */ +- +- MD5_Init(&md5_ctx1); +- /* H(K0^ipad) */ +- MD5_Append(&md5_ctx1, K0, sizeof(K0)); +- /* H((K0^ipad)||text) */ +- MD5_Append(&md5_ctx1, Message, MessageLen); +- MD5_End(&md5_ctx1, Digest); +- +- /* Exclusive-Or K0 with opad and remove ipad */ +- /* opad: Outer pad; the byte x��5c�� repeated B times. */ +- for (index = 0; index < MD5_BLOCK_SIZE; index++) +- K0[index] ^= 0x36^0x5c; +- /* End of for */ +- +- MD5_Init(&md5_ctx2); +- /* H(K0^opad) */ +- MD5_Append(&md5_ctx2, K0, sizeof(K0)); +- /* H( (K0^opad) || H((K0^ipad)||text) ) */ +- MD5_Append(&md5_ctx2, Digest, MD5_DIGEST_SIZE); +- MD5_End(&md5_ctx2, Digest); +- +- if (MACLen > MD5_DIGEST_SIZE) +- NdisMoveMemory(MAC, Digest, MD5_DIGEST_SIZE); +- else +- NdisMoveMemory(MAC, Digest, MACLen); +-} /* End of HMAC_SHA256 */ +-#endif /* HMAC_MD5_SUPPORT */ +- +-/* End of crypt_hmac.c */ +diff --git a/drivers/staging/rt3090/common/crypt_md5.c b/drivers/staging/rt3090/common/crypt_md5.c +deleted file mode 100644 +index b093265..0000000 +--- a/drivers/staging/rt3090/common/crypt_md5.c ++++ /dev/null +@@ -1,353 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- *************************************************************************/ +- +-#include "../crypt_md5.h" +- +- +-#ifdef MD5_SUPPORT +-/* +- * F, G, H and I are basic MD5 functions. +- */ +-#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +-#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +-#define H(x, y, z) ((x) ^ (y) ^ (z)) +-#define I(x, y, z) ((y) ^ ((x) | (~z))) +- +-#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) +-#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ +- +-#define ROUND1(a, b, c, d, x, s, ac) { \ +- (a) += F((b),(c),(d)) + (x) + (UINT32)(ac); \ +- (a) = ROTL32((a),(s)); \ +- (a) += (b); \ +-} +-#define ROUND2(a, b, c, d, x, s, ac) { \ +- (a) += G((b),(c),(d)) + (x) + (UINT32)(ac); \ +- (a) = ROTL32((a),(s)); \ +- (a) += (b); \ +-} +-#define ROUND3(a, b, c, d, x, s, ac) { \ +- (a) += H((b),(c),(d)) + (x) + (UINT32)(ac); \ +- (a) = ROTL32((a),(s)); \ +- (a) += (b); \ +-} +-#define ROUND4(a, b, c, d, x, s, ac) { \ +- (a) += I((b),(c),(d)) + (x) + (UINT32)(ac); \ +- (a) = ROTL32((a),(s)); \ +- (a) += (b); \ +-} +-static const UINT32 MD5_DefaultHashValue[4] = { +- 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL +-}; +-#endif /* MD5_SUPPORT */ +- +- +-#ifdef MD5_SUPPORT +-/* +-======================================================================== +-Routine Description: +- Initial Md5_CTX_STRUC +- +-Arguments: +- pMD5_CTX Pointer to Md5_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID MD5_Init ( +- IN MD5_CTX_STRUC *pMD5_CTX) +-{ +- NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, +- sizeof(MD5_DefaultHashValue)); +- NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); +- pMD5_CTX->BlockLen = 0; +- pMD5_CTX->MessageLen = 0; +-} /* End of MD5_Init */ +- +- +-/* +-======================================================================== +-Routine Description: +- MD5 computation for one block (512 bits) +- +-Arguments: +- pMD5_CTX Pointer to Md5_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- T[i] := floor(abs(sin(i + 1)) * (2 pow 32)), i is number of round +-======================================================================== +-*/ +-VOID MD5_Hash ( +- IN MD5_CTX_STRUC *pMD5_CTX) +-{ +- UINT32 X_i; +- UINT32 X[16]; +- UINT32 a,b,c,d; +- +- /* Prepare the message schedule, {X_i} */ +- NdisMoveMemory(X, pMD5_CTX->Block, MD5_BLOCK_SIZE); +- for (X_i = 0; X_i < 16; X_i++) +- X[X_i] = cpu2le32(X[X_i]); /* Endian Swap */ +- /* End of for */ +- +- /* MD5 hash computation */ +- /* Initialize the working variables */ +- a = pMD5_CTX->HashValue[0]; +- b = pMD5_CTX->HashValue[1]; +- c = pMD5_CTX->HashValue[2]; +- d = pMD5_CTX->HashValue[3]; +- +- /* +- * Round 1 +- * Let [abcd k s i] denote the operation +- * a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND1(a, b, c, d, X[ 0], 7, 0xd76aa478); /* 1 */ +- ROUND1(d, a, b, c, X[ 1], 12, 0xe8c7b756); /* 2 */ +- ROUND1(c, d, a, b, X[ 2], 17, 0x242070db); /* 3 */ +- ROUND1(b, c, d, a, X[ 3], 22, 0xc1bdceee); /* 4 */ +- ROUND1(a, b, c, d, X[ 4], 7, 0xf57c0faf); /* 5 */ +- ROUND1(d, a, b, c, X[ 5], 12, 0x4787c62a); /* 6 */ +- ROUND1(c, d, a, b, X[ 6], 17, 0xa8304613); /* 7 */ +- ROUND1(b, c, d, a, X[ 7], 22, 0xfd469501); /* 8 */ +- ROUND1(a, b, c, d, X[ 8], 7, 0x698098d8); /* 9 */ +- ROUND1(d, a, b, c, X[ 9], 12, 0x8b44f7af); /* 10 */ +- ROUND1(c, d, a, b, X[10], 17, 0xffff5bb1); /* 11 */ +- ROUND1(b, c, d, a, X[11], 22, 0x895cd7be); /* 12 */ +- ROUND1(a, b, c, d, X[12], 7, 0x6b901122); /* 13 */ +- ROUND1(d, a, b, c, X[13], 12, 0xfd987193); /* 14 */ +- ROUND1(c, d, a, b, X[14], 17, 0xa679438e); /* 15 */ +- ROUND1(b, c, d, a, X[15], 22, 0x49b40821); /* 16 */ +- +- /* +- * Round 2 +- * Let [abcd k s i] denote the operation +- * a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND2(a, b, c, d, X[ 1], 5, 0xf61e2562); /* 17 */ +- ROUND2(d, a, b, c, X[ 6], 9, 0xc040b340); /* 18 */ +- ROUND2(c, d, a, b, X[11], 14, 0x265e5a51); /* 19 */ +- ROUND2(b, c, d, a, X[ 0], 20, 0xe9b6c7aa); /* 20 */ +- ROUND2(a, b, c, d, X[ 5], 5, 0xd62f105d); /* 21 */ +- ROUND2(d, a, b, c, X[10], 9, 0x2441453); /* 22 */ +- ROUND2(c, d, a, b, X[15], 14, 0xd8a1e681); /* 23 */ +- ROUND2(b, c, d, a, X[ 4], 20, 0xe7d3fbc8); /* 24 */ +- ROUND2(a, b, c, d, X[ 9], 5, 0x21e1cde6); /* 25 */ +- ROUND2(d, a, b, c, X[14], 9, 0xc33707d6); /* 26 */ +- ROUND2(c, d, a, b, X[ 3], 14, 0xf4d50d87); /* 27 */ +- ROUND2(b, c, d, a, X[ 8], 20, 0x455a14ed); /* 28 */ +- ROUND2(a, b, c, d, X[13], 5, 0xa9e3e905); /* 29 */ +- ROUND2(d, a, b, c, X[ 2], 9, 0xfcefa3f8); /* 30 */ +- ROUND2(c, d, a, b, X[ 7], 14, 0x676f02d9); /* 31 */ +- ROUND2(b, c, d, a, X[12], 20, 0x8d2a4c8a); /* 32 */ +- +- /* +- * Round 3 +- * Let [abcd k s t] denote the operation +- * a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND3(a, b, c, d, X[ 5], 4, 0xfffa3942); /* 33 */ +- ROUND3(d, a, b, c, X[ 8], 11, 0x8771f681); /* 34 */ +- ROUND3(c, d, a, b, X[11], 16, 0x6d9d6122); /* 35 */ +- ROUND3(b, c, d, a, X[14], 23, 0xfde5380c); /* 36 */ +- ROUND3(a, b, c, d, X[ 1], 4, 0xa4beea44); /* 37 */ +- ROUND3(d, a, b, c, X[ 4], 11, 0x4bdecfa9); /* 38 */ +- ROUND3(c, d, a, b, X[ 7], 16, 0xf6bb4b60); /* 39 */ +- ROUND3(b, c, d, a, X[10], 23, 0xbebfbc70); /* 40 */ +- ROUND3(a, b, c, d, X[13], 4, 0x289b7ec6); /* 41 */ +- ROUND3(d, a, b, c, X[ 0], 11, 0xeaa127fa); /* 42 */ +- ROUND3(c, d, a, b, X[ 3], 16, 0xd4ef3085); /* 43 */ +- ROUND3(b, c, d, a, X[ 6], 23, 0x4881d05); /* 44 */ +- ROUND3(a, b, c, d, X[ 9], 4, 0xd9d4d039); /* 45 */ +- ROUND3(d, a, b, c, X[12], 11, 0xe6db99e5); /* 46 */ +- ROUND3(c, d, a, b, X[15], 16, 0x1fa27cf8); /* 47 */ +- ROUND3(b, c, d, a, X[ 2], 23, 0xc4ac5665); /* 48 */ +- +- /* +- * Round 4 +- * Let [abcd k s t] denote the operation +- * a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND4(a, b, c, d, X[ 0], 6, 0xf4292244); /* 49 */ +- ROUND4(d, a, b, c, X[ 7], 10, 0x432aff97); /* 50 */ +- ROUND4(c, d, a, b, X[14], 15, 0xab9423a7); /* 51 */ +- ROUND4(b, c, d, a, X[ 5], 21, 0xfc93a039); /* 52 */ +- ROUND4(a, b, c, d, X[12], 6, 0x655b59c3); /* 53 */ +- ROUND4(d, a, b, c, X[ 3], 10, 0x8f0ccc92); /* 54 */ +- ROUND4(c, d, a, b, X[10], 15, 0xffeff47d); /* 55 */ +- ROUND4(b, c, d, a, X[ 1], 21, 0x85845dd1); /* 56 */ +- ROUND4(a, b, c, d, X[ 8], 6, 0x6fa87e4f); /* 57 */ +- ROUND4(d, a, b, c, X[15], 10, 0xfe2ce6e0); /* 58 */ +- ROUND4(c, d, a, b, X[ 6], 15, 0xa3014314); /* 59 */ +- ROUND4(b, c, d, a, X[13], 21, 0x4e0811a1); /* 60 */ +- ROUND4(a, b, c, d, X[ 4], 6, 0xf7537e82); /* 61 */ +- ROUND4(d, a, b, c, X[11], 10, 0xbd3af235); /* 62 */ +- ROUND4(c, d, a, b, X[ 2], 15, 0x2ad7d2bb); /* 63 */ +- ROUND4(b, c, d, a, X[ 9], 21, 0xeb86d391); /* 64 */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pMD5_CTX->HashValue[0] += a; +- pMD5_CTX->HashValue[1] += b; +- pMD5_CTX->HashValue[2] += c; +- pMD5_CTX->HashValue[3] += d; +- +- NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); +- pMD5_CTX->BlockLen = 0; +-} /* End of MD5_Hash */ +- +- +-/* +-======================================================================== +-Routine Description: +- The message is appended to block. If block size > 64 bytes, the MD5_Hash +-will be called. +- +-Arguments: +- pMD5_CTX Pointer to MD5_CTX_STRUC +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID MD5_Append ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) +-{ +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pMD5_CTX->BlockLen + diffLen) < MD5_BLOCK_SIZE) { +- NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, +- Message + appendLen, diffLen); +- pMD5_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, +- Message + appendLen, MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); +- appendLen += (MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); +- pMD5_CTX->BlockLen = MD5_BLOCK_SIZE; +- MD5_Hash(pMD5_CTX); +- } /* End of if */ +- } /* End of while */ +- pMD5_CTX->MessageLen += MessageLen; +-} /* End of MD5_Append */ +- +- +-/* +-======================================================================== +-Routine Description: +- 1. Append bit 1 to end of the message +- 2. Append the length of message in rightmost 64 bits +- 3. Transform the Hash Value to digest message +- +-Arguments: +- pMD5_CTX Pointer to MD5_CTX_STRUC +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID MD5_End ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- OUT UINT8 DigestMessage[]) +-{ +- UINT index; +- UINT64 message_length_bits; +- +- /* append 1 bits to end of the message */ +- NdisFillMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pMD5_CTX->BlockLen > 55) +- MD5_Hash(pMD5_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pMD5_CTX->MessageLen*8; +- message_length_bits = cpu2le64(message_length_bits); +- NdisMoveMemory(&pMD5_CTX->Block[56], &message_length_bits, 8); +- MD5_Hash(pMD5_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 4;index++) +- pMD5_CTX->HashValue[index] = cpu2le32(pMD5_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pMD5_CTX->HashValue, MD5_DIGEST_SIZE); +-} /* End of MD5_End */ +- +- +-/* +-======================================================================== +-Routine Description: +- MD5 algorithm +- +-Arguments: +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID RT_MD5 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) +-{ +- MD5_CTX_STRUC md5_ctx; +- +- NdisZeroMemory(&md5_ctx, sizeof(MD5_CTX_STRUC)); +- MD5_Init(&md5_ctx); +- MD5_Append(&md5_ctx, Message, MessageLen); +- MD5_End(&md5_ctx, DigestMessage); +-} /* End of RT_MD5 */ +- +-#endif /* MD5_SUPPORT */ +- +-/* End of crypt_md5.c */ +diff --git a/drivers/staging/rt3090/common/crypt_sha2.c b/drivers/staging/rt3090/common/crypt_sha2.c +deleted file mode 100644 +index c7490d0..0000000 +--- a/drivers/staging/rt3090/common/crypt_sha2.c ++++ /dev/null +@@ -1,536 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- *************************************************************************/ +- +-#include "../crypt_sha2.h" +- +- +-/* Basic operations */ +-#define SHR(x,n) (x >> n) /* SHR(x)^n, right shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTR(x,n,w) ((x >> n) | (x << (w - n))) /* ROTR(x)^n, circular right shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) /* ROTL(x)^n, circular left shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTR32(x,n) ROTR(x,n,32) /* 32 bits word */ +-#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ +- +-/* Basic functions */ +-#define Ch(x,y,z) ((x & y) ^ ((~x) & z)) +-#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z)) +-#define Parity(x,y,z) (x ^ y ^ z) +- +-#ifdef SHA1_SUPPORT +-/* SHA1 constants */ +-#define SHA1_MASK 0x0000000f +-static const UINT32 SHA1_K[4] = { +- 0x5a827999UL, 0x6ed9eba1UL, 0x8f1bbcdcUL, 0xca62c1d6UL +-}; +-static const UINT32 SHA1_DefaultHashValue[5] = { +- 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL +-}; +-#endif /* SHA1_SUPPORT */ +- +- +-#ifdef SHA256_SUPPORT +-/* SHA256 functions */ +-#define Zsigma_256_0(x) (ROTR32(x,2) ^ ROTR32(x,13) ^ ROTR32(x,22)) +-#define Zsigma_256_1(x) (ROTR32(x,6) ^ ROTR32(x,11) ^ ROTR32(x,25)) +-#define Sigma_256_0(x) (ROTR32(x,7) ^ ROTR32(x,18) ^ SHR(x,3)) +-#define Sigma_256_1(x) (ROTR32(x,17) ^ ROTR32(x,19) ^ SHR(x,10)) +-/* SHA256 constants */ +-static const UINT32 SHA256_K[64] = { +- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, +- 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, +- 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, +- 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, +- 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, +- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, +- 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, +- 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, +- 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, +- 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, +- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, +- 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, +- 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, +- 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, +- 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, +- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +-}; +-static const UINT32 SHA256_DefaultHashValue[8] = { +- 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL, +- 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL +-}; +-#endif /* SHA256_SUPPORT */ +- +- +-#ifdef SHA1_SUPPORT +-/* +-======================================================================== +-Routine Description: +- Initial SHA1_CTX_STRUC +- +-Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA1_Init ( +- IN SHA1_CTX_STRUC *pSHA_CTX) +-{ +- NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, +- sizeof(SHA1_DefaultHashValue)); +- NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- pSHA_CTX->MessageLen = 0; +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA1_Init */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA1 computation for one block (512 bits) +- +-Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA1_Hash ( +- IN SHA1_CTX_STRUC *pSHA_CTX) +-{ +- UINT32 W_i,t,s; +- UINT32 W[16]; +- UINT32 a,b,c,d,e,T,f_t = 0; +- +- /* Prepare the message schedule, {W_i}, 0 < t < 15 */ +- NdisMoveMemory(W, pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- for (W_i = 0; W_i < 16; W_i++) +- W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ +- /* End of for */ +- +- /* SHA256 hash computation */ +- /* Initialize the working variables */ +- a = pSHA_CTX->HashValue[0]; +- b = pSHA_CTX->HashValue[1]; +- c = pSHA_CTX->HashValue[2]; +- d = pSHA_CTX->HashValue[3]; +- e = pSHA_CTX->HashValue[4]; +- +- /* 80 rounds */ +- for (t = 0;t < 80;t++) { +- s = t & SHA1_MASK; +- if (t > 15) { /* Prepare the message schedule, {W_i}, 16 < t < 79 */ +- W[s] = (W[(s+13) & SHA1_MASK]) ^ (W[(s+8) & SHA1_MASK]) ^ (W[(s+2) & SHA1_MASK]) ^ W[s]; +- W[s] = ROTL32(W[s],1); +- } /* End of if */ +- switch (t / 20) { +- case 0: +- f_t = Ch(b,c,d); +- break; +- case 1: +- f_t = Parity(b,c,d); +- break; +- case 2: +- f_t = Maj(b,c,d); +- break; +- case 3: +- f_t = Parity(b,c,d); +- break; +- } /* End of switch */ +- T = ROTL32(a,5) + f_t + e + SHA1_K[t / 20] + W[s]; +- e = d; +- d = c; +- c = ROTL32(b,30); +- b = a; +- a = T; +- } /* End of for */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pSHA_CTX->HashValue[0] += a; +- pSHA_CTX->HashValue[1] += b; +- pSHA_CTX->HashValue[2] += c; +- pSHA_CTX->HashValue[3] += d; +- pSHA_CTX->HashValue[4] += e; +- +- NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA1_Hash */ +- +- +-/* +-======================================================================== +-Routine Description: +- The message is appended to block. If block size > 64 bytes, the SHA1_Hash +-will be called. +- +-Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA1_Append ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) +-{ +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pSHA_CTX->BlockLen + diffLen) < SHA1_BLOCK_SIZE) { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, diffLen); +- pSHA_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); +- appendLen += (SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); +- pSHA_CTX->BlockLen = SHA1_BLOCK_SIZE; +- SHA1_Hash(pSHA_CTX); +- } /* End of if */ +- } /* End of while */ +- pSHA_CTX->MessageLen += MessageLen; +-} /* End of SHA1_Append */ +- +- +-/* +-======================================================================== +-Routine Description: +- 1. Append bit 1 to end of the message +- 2. Append the length of message in rightmost 64 bits +- 3. Transform the Hash Value to digest message +- +-Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA1_End ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]) +-{ +- UINT index; +- UINT64 message_length_bits; +- +- /* Append bit 1 to end of the message */ +- NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pSHA_CTX->BlockLen > 55) +- SHA1_Hash(pSHA_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pSHA_CTX->MessageLen*8; +- message_length_bits = cpu2be64(message_length_bits); +- NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); +- SHA1_Hash(pSHA_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 5;index++) +- pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA1_DIGEST_SIZE); +-} /* End of SHA1_End */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA1 algorithm +- +-Arguments: +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID RT_SHA1 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) +-{ +- +- SHA1_CTX_STRUC sha_ctx; +- +- NdisZeroMemory(&sha_ctx, sizeof(SHA1_CTX_STRUC)); +- SHA1_Init(&sha_ctx); +- SHA1_Append(&sha_ctx, Message, MessageLen); +- SHA1_End(&sha_ctx, DigestMessage); +-} /* End of RT_SHA1 */ +-#endif /* SHA1_SUPPORT */ +- +- +-#ifdef SHA256_SUPPORT +-/* +-======================================================================== +-Routine Description: +- Initial SHA256_CTX_STRUC +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Init ( +- IN SHA256_CTX_STRUC *pSHA_CTX) +-{ +- NdisMoveMemory(pSHA_CTX->HashValue, SHA256_DefaultHashValue, +- sizeof(SHA256_DefaultHashValue)); +- NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- pSHA_CTX->MessageLen = 0; +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA256_Init */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA256 computation for one block (512 bits) +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Hash ( +- IN SHA256_CTX_STRUC *pSHA_CTX) +-{ +- UINT32 W_i,t; +- UINT32 W[64]; +- UINT32 a,b,c,d,e,f,g,h,T1,T2; +- +- /* Prepare the message schedule, {W_i}, 0 < t < 15 */ +- NdisMoveMemory(W, pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- for (W_i = 0; W_i < 16; W_i++) +- W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ +- /* End of for */ +- +- /* SHA256 hash computation */ +- /* Initialize the working variables */ +- a = pSHA_CTX->HashValue[0]; +- b = pSHA_CTX->HashValue[1]; +- c = pSHA_CTX->HashValue[2]; +- d = pSHA_CTX->HashValue[3]; +- e = pSHA_CTX->HashValue[4]; +- f = pSHA_CTX->HashValue[5]; +- g = pSHA_CTX->HashValue[6]; +- h = pSHA_CTX->HashValue[7]; +- +- /* 64 rounds */ +- for (t = 0;t < 64;t++) { +- if (t > 15) /* Prepare the message schedule, {W_i}, 16 < t < 63 */ +- W[t] = Sigma_256_1(W[t-2]) + W[t-7] + Sigma_256_0(W[t-15]) + W[t-16]; +- /* End of if */ +- T1 = h + Zsigma_256_1(e) + Ch(e,f,g) + SHA256_K[t] + W[t]; +- T2 = Zsigma_256_0(a) + Maj(a,b,c); +- h = g; +- g = f; +- f = e; +- e = d + T1; +- d = c; +- c = b; +- b = a; +- a = T1 + T2; +- } /* End of for */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pSHA_CTX->HashValue[0] += a; +- pSHA_CTX->HashValue[1] += b; +- pSHA_CTX->HashValue[2] += c; +- pSHA_CTX->HashValue[3] += d; +- pSHA_CTX->HashValue[4] += e; +- pSHA_CTX->HashValue[5] += f; +- pSHA_CTX->HashValue[6] += g; +- pSHA_CTX->HashValue[7] += h; +- +- NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA256_Hash */ +- +- +-/* +-======================================================================== +-Routine Description: +- The message is appended to block. If block size > 64 bytes, the SHA256_Hash +-will be called. +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Append ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) +-{ +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pSHA_CTX->BlockLen + diffLen) < SHA256_BLOCK_SIZE) { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, diffLen); +- pSHA_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); +- appendLen += (SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); +- pSHA_CTX->BlockLen = SHA256_BLOCK_SIZE; +- SHA256_Hash(pSHA_CTX); +- } /* End of if */ +- } /* End of while */ +- pSHA_CTX->MessageLen += MessageLen; +-} /* End of SHA256_Append */ +- +- +-/* +-======================================================================== +-Routine Description: +- 1. Append bit 1 to end of the message +- 2. Append the length of message in rightmost 64 bits +- 3. Transform the Hash Value to digest message +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_End ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]) +-{ +- UINT index; +- UINT64 message_length_bits; +- +- /* Append bit 1 to end of the message */ +- NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pSHA_CTX->BlockLen > 55) +- SHA256_Hash(pSHA_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pSHA_CTX->MessageLen*8; +- message_length_bits = cpu2be64(message_length_bits); +- NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); +- SHA256_Hash(pSHA_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 8;index++) +- pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA256_DIGEST_SIZE); +-} /* End of SHA256_End */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA256 algorithm +- +-Arguments: +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID RT_SHA256 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) +-{ +- SHA256_CTX_STRUC sha_ctx; +- +- NdisZeroMemory(&sha_ctx, sizeof(SHA256_CTX_STRUC)); +- SHA256_Init(&sha_ctx); +- SHA256_Append(&sha_ctx, Message, MessageLen); +- SHA256_End(&sha_ctx, DigestMessage); +-} /* End of RT_SHA256 */ +-#endif /* SHA256_SUPPORT */ +- +-/* End of crypt_sha2.c */ +diff --git a/drivers/staging/rt3090/common/dfs.c b/drivers/staging/rt3090/common/dfs.c +deleted file mode 100644 +index c15704a..0000000 +--- a/drivers/staging/rt3090/common/dfs.c ++++ /dev/null +@@ -1,481 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ap_dfs.c +- +- Abstract: +- Support DFS function. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-typedef struct _RADAR_DURATION_TABLE +-{ +- ULONG RDDurRegion; +- ULONG RadarSignalDuration; +- ULONG Tolerance; +-} RADAR_DURATION_TABLE, *PRADAR_DURATION_TABLE; +- +- +- +-UCHAR RdIdleTimeTable[MAX_RD_REGION][4] = +-{ +- {9, 250, 250, 250}, // CE +-#ifdef DFS_FCC_BW40_FIX +- {1, 250, 250, 250}, // FCC +-#else +- {4, 250, 250, 250}, // FCC +-#endif +- {4, 250, 250, 250}, // JAP +- {15, 250, 250, 250}, // JAP_W53 +- {4, 250, 250, 250} // JAP_W56 +-}; +- +-#ifdef TONE_RADAR_DETECT_SUPPORT +-static void ToneRadarProgram(PRTMP_ADAPTER pAd); +-static void ToneRadarEnable(PRTMP_ADAPTER pAd); +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +-#ifdef DFS_SUPPORT +-/* +- ======================================================================== +- +- Routine Description: +- Bbp Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID BbpRadarDetectionStart( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT8 RadarPeriod; +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 114, 0x02); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 121, 0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 122, 0x00); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 123, 0x08/*0x80*/); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 124, 0x28); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 125, 0xff); +- +-#ifdef MERGE_ARCH_TEAM +- if ((pAd->CommonCfg.RadarDetect.RDDurRegion == JAP) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) || (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56)) +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = JAP; +- pAd->CommonCfg.RadarDetect.RDDurRegion = JapRadarType(pAd); +- if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56) +- { +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- else if (pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W53) +- { +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 15; +- } +-#ifdef CARRIER_DETECTION_SUPPORT +- pAd->CommonCfg.CarrierDetect.Enable = 1; +-#endif // CARRIER_DETECTION_SUPPORT // +- } +-#endif // MERGE_ARCH_TEAM // +- +- RadarPeriod = ((UINT)RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + (UINT)pAd->CommonCfg.RadarDetect.DfsSessionTime) < 250 ? +- (RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + pAd->CommonCfg.RadarDetect.DfsSessionTime) : 250; +- +-#ifdef MERGE_ARCH_TEAM +- +- +-#else // Original RT28xx source code. +- RTMP_IO_WRITE8(pAd, 0x7020, 0x1d); +- RTMP_IO_WRITE8(pAd, 0x7021, 0x40); +-#endif // MERGE_ARCH_TEAM // +- +- RadarDetectionStart(pAd, 0, RadarPeriod); +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Bbp Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID BbpRadarDetectionStop( +- IN PRTMP_ADAPTER pAd) +-{ +- RTMP_IO_WRITE8(pAd, 0x7020, 0x1d); +- RTMP_IO_WRITE8(pAd, 0x7021, 0x60); +- +- RadarDetectionStop(pAd); +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- +- ======================================================================== +-*/ +-VOID RadarDetectionStart( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN CTSProtect, +- IN UINT8 CTSPeriod) +-{ +- UINT8 DfsActiveTime = (pAd->CommonCfg.RadarDetect.DfsSessionTime & 0x1f); +- UINT8 CtsProtect = (CTSProtect == 1) ? 0x02 : 0x01; // CTS protect. +- +- if (CTSProtect != 0) +- { +- switch(pAd->CommonCfg.RadarDetect.RDDurRegion) +- { +- case FCC: +- case JAP_W56: +- CtsProtect = 0x03; +- break; +- +- case JAP: +- { +- UCHAR RDDurRegion; +- RDDurRegion = JapRadarType(pAd); +- if (RDDurRegion == JAP_W56) +- CtsProtect = 0x03; +- else +- CtsProtect = 0x02; +- break; +- } +- +- case CE: +- case JAP_W53: +- default: +- CtsProtect = 0x02; +- break; +- } +- } +- else +- CtsProtect = 0x01; +- +- +- // send start-RD with CTS protection command to MCU +- // highbyte [7] reserve +- // highbyte [6:5] 0x: stop Carrier/Radar detection +- // highbyte [10]: Start Carrier/Radar detection without CTS protection, 11: Start Carrier/Radar detection with CTS protection +- // highbyte [4:0] Radar/carrier detection duration. In 1ms. +- +- // lowbyte [7:0] Radar/carrier detection period, in 1ms. +- AsicSendCommandToMcu(pAd, 0x60, 0xff, CTSPeriod, DfsActiveTime | (CtsProtect << 5)); +- //AsicSendCommandToMcu(pAd, 0x63, 0xff, 10, 0); +- +- return; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Radar detection routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- TRUE Found radar signal +- FALSE Not found radar signal +- +- ======================================================================== +-*/ +-VOID RadarDetectionStop( +- IN PRTMP_ADAPTER pAd) +-{ +- DBGPRINT(RT_DEBUG_TRACE,("RadarDetectionStop.\n")); +- AsicSendCommandToMcu(pAd, 0x60, 0xff, 0x00, 0x00); // send start-RD with CTS protection command to MCU +- +- return; +-} +-#endif // DFS_SUPPORT // +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Radar channel check routine +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- TRUE need to do radar detect +- FALSE need not to do radar detect +- +- ======================================================================== +-*/ +-BOOLEAN RadarChannelCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ch) +-{ +- INT i; +- BOOLEAN result = FALSE; +- +- for (i=0; iChannelListNum; i++) +- { +- if (Ch == pAd->ChannelList[i].Channel) +- { +- result = pAd->ChannelList[i].DfsReq; +- break; +- } +- } +- +- return result; +-} +- +-#ifdef DFS_SUPPORT +- +-ULONG JapRadarType( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG i; +- const UCHAR Channel[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +- +- if (pAd->CommonCfg.RadarDetect.RDDurRegion != JAP) +- { +- return pAd->CommonCfg.RadarDetect.RDDurRegion; +- } +- +- for (i=0; i<15; i++) +- { +- if (pAd->CommonCfg.Channel == Channel[i]) +- { +- break; +- } +- } +- +- if (i < 4) +- return JAP_W53; +- else if (i < 15) +- return JAP_W56; +- else +- return JAP; // W52 +- +-} +- +-ULONG RTMPBbpReadRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT8 byteValue = 0; +- ULONG result; +- +- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R115, &byteValue); +- +- result = 0; +- switch (byteValue) +- { +- case 1: // radar signal detected by pulse mode. +- case 2: // radar signal detected by width mode. +- result = RTMPReadRadarDuration(pAd); +- break; +- +- case 0: // No radar signal. +- default: +- +- result = 0; +- break; +- } +- +- return result; +-} +- +-ULONG RTMPReadRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG result = 0; +- +-#ifdef DFS_SUPPORT +- UINT8 duration1 = 0, duration2 = 0, duration3 = 0; +- +- +- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R116, &duration1); +- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R117, &duration2); +- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R118, &duration3); +- result = (duration1 << 16) + (duration2 << 8) + duration3; +-#endif // DFS_SUPPORT // +- +- return result; +- +-} +- +-VOID RTMPCleanRadarDuration( +- IN PRTMP_ADAPTER pAd) +-{ +- return; +-} +- +-/* +- ======================================================================== +- Routine Description: +- Radar wave detection. The API should be invoke each second. +- +- Arguments: +- pAd - Adapter pointer +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID ApRadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd) +-{ +- INT i; +- +- pAd->CommonCfg.RadarDetect.InServiceMonitorCount++; +- +- for (i=0; iChannelListNum; i++) +- { +- +- if (pAd->ChannelList[i].RemainingTimeForUse > 0) +- { +- pAd->ChannelList[i].RemainingTimeForUse --; +- if ((pAd->Mlme.PeriodicRound%5) == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RadarDetectPeriodic - ch=%d, RemainingTimeForUse=%d\n", pAd->ChannelList[i].Channel, pAd->ChannelList[i].RemainingTimeForUse)); +- } +- } +- } +- +- //radar detect +- if ((pAd->CommonCfg.Channel > 14) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- RadarDetectPeriodic(pAd); +- } +- +- return; +-} +- +-// Periodic Radar detection, switch channel will occur in RTMPHandleTBTTInterrupt() +-// Before switch channel, driver needs doing channel switch announcement. +-VOID RadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd) +-{ +- +- // need to check channel availability, after switch channel +- if (pAd->CommonCfg.RadarDetect.RDMode != RD_SILENCE_MODE) +- return; +- +- +- +- // channel availability check time is 60sec, use 65 for assurance +- if (pAd->CommonCfg.RadarDetect.RDCount++ > pAd->CommonCfg.RadarDetect.ChMovingTime) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Not found radar signal, start send beacon and radar detection in service monitor\n\n")); +- BbpRadarDetectionStop(pAd); +- +- +- AsicEnableBssSync(pAd); +- pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; +- +- +- +- return; +- } +- +- return; +-} +-#endif // DFS_SUPPORT // +- +-#ifdef DFS_SUPPORT +-/* +- ========================================================================== +- Description: +- change channel moving time for DFS testing. +- +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 set ChMovTime=[value] +- ========================================================================== +-*/ +-INT Set_ChMovingTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT8 Value; +- +- Value = (UINT8) simple_strtol(arg, 0, 10); +- +- pAd->CommonCfg.RadarDetect.ChMovingTime = Value; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s:: %d\n", __FUNCTION__, +- pAd->CommonCfg.RadarDetect.ChMovingTime)); +- +- return TRUE; +-} +- +-INT Set_LongPulseRadarTh_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT8 Value; +- +- Value = (UINT8) simple_strtol(arg, 0, 10) > 10 ? 10 : simple_strtol(arg, 0, 10); +- +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh = Value; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s:: %d\n", __FUNCTION__, +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh)); +- +- return TRUE; +-} +-#endif // DFS_SUPPORT // +diff --git a/drivers/staging/rt3090/common/ee_efuse.c b/drivers/staging/rt3090/common/ee_efuse.c +deleted file mode 100644 +index c51e305..0000000 +--- a/drivers/staging/rt3090/common/ee_efuse.c ++++ /dev/null +@@ -1,1548 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ee_efuse.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-#define EFUSE_USAGE_MAP_START 0x2d0 +-#define EFUSE_USAGE_MAP_END 0x2fc +-#define EFUSE_USAGE_MAP_SIZE 45 +- +- +- +-#define EFUSE_EEPROM_DEFULT_FILE "RT30xxEEPROM.bin" +-#define MAX_EEPROM_BIN_FILE_SIZE 1024 +- +- +- +-#define EFUSE_TAG 0x2fe +- +- +-#ifdef RT_BIG_ENDIAN +-typedef union _EFUSE_CTRL_STRUC { +- struct { +- UINT32 SEL_EFUSE:1; +- UINT32 EFSROM_KICK:1; +- UINT32 RESERVED:4; +- UINT32 EFSROM_AIN:10; +- UINT32 EFSROM_LDO_ON_TIME:2; +- UINT32 EFSROM_LDO_OFF_TIME:6; +- UINT32 EFSROM_MODE:2; +- UINT32 EFSROM_AOUT:6; +- } field; +- UINT32 word; +-} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; +-#else +-typedef union _EFUSE_CTRL_STRUC { +- struct { +- UINT32 EFSROM_AOUT:6; +- UINT32 EFSROM_MODE:2; +- UINT32 EFSROM_LDO_OFF_TIME:6; +- UINT32 EFSROM_LDO_ON_TIME:2; +- UINT32 EFSROM_AIN:10; +- UINT32 RESERVED:4; +- UINT32 EFSROM_KICK:1; +- UINT32 SEL_EFUSE:1; +- } field; +- UINT32 word; +-} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; +-#endif // RT_BIG_ENDIAN // +- +-static UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-static VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize); +- +-static VOID eFusePhysicalWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-static NTSTATUS eFuseWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); +- +-static VOID eFuseWritePhysical( +- IN PRTMP_ADAPTER pAd, +- PUSHORT lpInBuffer, +- ULONG nInBufferSize, +- PUCHAR lpOutBuffer, +- ULONG nOutBufferSize); +- +- +-static NTSTATUS eFuseWriteRegistersFromBin( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); +- +- +-/* +-======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- Note: +- +-======================================================================== +-*/ +-UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) +-{ +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- //Use the eeprom logical address and covert to address to block number +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0. +- eFuseCtrlStruc.field.EFSROM_MODE = 0; +- +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 500) +- { +- //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- { +- break; +- } +- RTMPusecDelay(2); +- i++; +- } +- +- //if EFSROM_AOUT is not found in physical address, write 0xffff +- if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f) +- { +- for(i=0; i> (8*(Offset & 0x3)); +-#endif // RT_BIG_ENDIAN // +- +- NdisMoveMemory(pData, &data, Length); +- } +- +- return (UCHAR) eFuseCtrlStruc.field.EFSROM_AOUT; +- +-} +- +-/* +-======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- Note: +- +-======================================================================== +-*/ +-VOID eFusePhysicalReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) +-{ +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- //Read in physical view +- eFuseCtrlStruc.field.EFSROM_MODE = 1; +- +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- //Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits. +- //The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes +- //Decide which EFUSE_DATA to read +- //590:F E D C +- //594:B A 9 8 +- //598:7 6 5 4 +- //59C:3 2 1 0 +- efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ; +- +- RTMP_IO_READ32(pAd, efuseDataOffset, &data); +- +-#ifdef RT_BIG_ENDIAN +- data = data << (8*((Offset & 0x3)^0x2)); +-#else +- data = data >> (8*(Offset & 0x3)); +-#endif // RT_BIG_ENDIAN // +- +- NdisMoveMemory(pData, &data, Length); +- +-} +- +-/* +-======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- Note: +- +-======================================================================== +-*/ +-static VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize +-) +-{ +- USHORT* pInBuf = (USHORT*)lpInBuffer; +- USHORT* pOutBuf = (USHORT*)lpOutBuffer; +- +- USHORT Offset = pInBuf[0]; //addr +- USHORT Length = pInBuf[1]; //length +- int i; +- +- for(i=0; i> 2; +- data = pData[0] & 0xffff; +- //The offset should be 0x***10 or 0x***00 +- if((Offset % 4) != 0) +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff) | (data << 16); +- } +- else +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff0000) | data; +- } +- +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_WRITE32(pAd, efuseDataOffset, eFuseDataBuffer[i]); +- efuseDataOffset -= 4; +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done. +- i = 0; +- +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- +- RTMPusecDelay(2); +- i++; +- } +-} +- +-/* +-======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- Note: +- +-======================================================================== +-*/ +-static NTSTATUS eFuseWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData) +-{ +- USHORT i,Loop=0; +- USHORT eFuseData; +- USHORT LogicalAddress, BlkNum = 0xffff; +- UCHAR EFSROM_AOUT; +- +- USHORT addr,tmpaddr, InBuf[3], tmpOffset; +- USHORT buffer[8]; +- BOOLEAN bWriteSuccess = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters Offset=%x, pData=%x\n", Offset, *pData)); +- +- //Step 0. find the entry in the mapping table +- //The address of EEPROM is 2-bytes alignment. +- //The last bit is used for alignment, so it must be 0. +- tmpOffset = Offset & 0xfffe; +- EFSROM_AOUT = eFuseReadRegisters(pAd, tmpOffset, 2, &eFuseData); +- +- if( EFSROM_AOUT == 0x3f) +- { //find available logical address pointer +- //the logical address does not exist, find an empty one +- //from the first address of block 45=16*45=0x2d0 to the last address of block 47 +- //==>48*16-3(reserved)=2FC +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //Step 1. Save data of this block which is pointed by the avaible logical address pointer +- // read and save the original block data +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- buffer[i] = InBuf[2]; +- } +- +- //Step 2. Update the data in buffer, and write the data to Efuse +- buffer[ (Offset >> 1) % 8] = pData[0]; +- +- do +- { Loop++; +- //Step 3. Write the data to Efuse +- if(!bWriteSuccess) +- { +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = buffer[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- } +- else +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+(Offset % 16); +- InBuf[1] = 2; +- InBuf[2] = pData[0]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- //Step 4. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; +- else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 5. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- if(buffer[i] != InBuf[2]) +- { +- bWriteSuccess = FALSE; +- break; +- } +- } +- +- //Step 6. invlidate mapping entry and find a free mapping entry if not succeed +- if (!bWriteSuccess) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } +- break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <bUseEfuse) +- return FALSE; +- for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- efusefreenum= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END-i); +- break; +- } +- +- if(i == EFUSE_USAGE_MAP_END) +- efusefreenum = 0; +- } +- printk("efuseFreeNumber is %d\n",efusefreenum); +- return TRUE; +-} +- +- +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +-USHORT InBuf[3]; +- INT i=0; +- if(!pAd->bUseEfuse) +- return FALSE; +- for(i =0; i0) +- NdisMoveMemory(src, arg, strlen(arg)); +- else +- NdisMoveMemory(src, EFUSE_EEPROM_DEFULT_FILE, strlen(EFUSE_EEPROM_DEFULT_FILE)); +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- RtmpOSFSInfoChange(&osfsInfo, TRUE); +- +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error opening file %s\n", src)); +- retval = FALSE; +- goto recoverFS; +- } +- else +- { +- // The object must have a read method +- while(RtmpOSFileRead(srcf, &buffer[i], 1)==1) +- { +- i++; +- if(i>MAX_EEPROM_BIN_FILE_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error reading file %s, file size too large[>%d]\n", src, MAX_EEPROM_BIN_FILE_SIZE)); +- retval = FALSE; +- goto closeFile; +- } +- } +- +- retval = RtmpOSFileClose(srcf); +- if (retval) +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error closing file %s\n", src)); +- } +- +- +- RtmpOSFSInfoChange(&osfsInfo, FALSE); +- +- for(j=0;j48*16-3(reserved)=2FC +- bAllocateNewBlk=TRUE; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- bAllocateNewBlk=FALSE; +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- //Step 1.1.0 +- //If the block is not existing in mapping table, create one +- //and write down the 16-bytes data to the new block +- if(bAllocateNewBlk) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk\n")); +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk, Data%d=%04x%04x\n",3-i,pData[2*i+1],pData[2*i])); +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- +- +- RTMP_IO_WRITE32(pAd, efuseDataOffset,tempbuffer); +- efuseDataOffset -= 4; +- +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1.1.1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- eFuseCtrlStruc.field.EFSROM_AIN = BlkNum* 0x10 ; +- +- //Step1.1.2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step1.1.3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.1.4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- +- RTMPusecDelay(2); +- i++; +- } +- +- } +- else +- { //Step1.2. +- //If the same logical number is existing, check if the writting data and the data +- //saving in this block are the same. +- ///////////////////////////////////////////////////////////////// +- //read current values of 16-byte block +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- //Step1.2.0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1.2.1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- eFuseCtrlStruc.field.EFSROM_MODE = 0; +- +- //Step1.2.2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.2.3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step1.2.4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &buffer[i]); +- efuseDataOffset -= 4; +- } +- //Step1.2.5. Check if the data of efuse and the writing data are the same. +- for(i =0; i<4; i++) +- { +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- DBGPRINT(RT_DEBUG_TRACE, ("buffer[%d]=%x,pData[%d]=%x,pData[%d]=%x,tempbuffer=%x\n",i,buffer[i],2*i,pData[2*i],2*i+1,pData[2*i+1],tempbuffer)); +- +- if(((buffer[i]&0xffff0000)==(pData[2*i+1]<<16))&&((buffer[i]&0xffff)==pData[2*i])) +- bNotWrite&=TRUE; +- else +- { +- bNotWrite&=FALSE; +- break; +- } +- } +- if(!bNotWrite) +- { +- printk("The data is not the same\n"); +- +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = pData[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- } +- else +- return TRUE; +- } +- +- +- +- //Step 2. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; +- else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 3. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- DBGPRINT(RT_DEBUG_TRACE, ("addr=%x, buffer[i]=%x,InBuf[2]=%x\n",InBuf[0],pData[i],InBuf[2])); +- if(pData[i] != InBuf[2]) +- { +- bWriteSuccess = FALSE; +- break; +- } +- } +- +- //Step 4. invlidate mapping entry and find a free mapping entry if not succeed +- +- if (!bWriteSuccess&&Loop<2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } +- break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <bFroceEEPROMBuffer || pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Read from EEPROM Buffer\n")); +- NdisMoveMemory(pValue, &(pAd->EEPROMImage[Offset]), 2); +- } +- else +- eFuseReadRegisters(pAd, Offset, 2, pValue); +- return (*pValue); +-} +- +- +-int rtmp_ee_efuse_write16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT data) +-{ +- if(pAd->bFroceEEPROMBuffer||pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Write to EEPROM Buffer\n")); +- NdisMoveMemory(&(pAd->EEPROMImage[Offset]), &data, 2); +- } +- else +- eFuseWriteRegisters(pAd, Offset, 2, &data); +- return 0; +-} +- +- +-int RtmpEfuseSupportCheck( +- IN RTMP_ADAPTER *pAd) +-{ +- USHORT value; +- +- if (IS_RT30xx(pAd)) +- { +- eFusePhysicalReadRegisters(pAd, EFUSE_TAG, 2, &value); +- pAd->EFuseTag = (value & 0xff); +- } +- return 0; +-} +- +-INT set_eFuseBufferModeWriteBack_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT Enable; +- +- +- if(strlen(arg)>0) +- { +- Enable= simple_strtol(arg, 0, 16); +- } +- else +- return FALSE; +- if(Enable==1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("set_eFuseBufferMode_Proc:: Call WRITEEEPROMBUF")); +- eFuseWriteEeeppromBuf(pAd); +- } +- else +- return FALSE; +- return TRUE; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Load EEPROM from bin file for eFuse mode +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS firmware image load ok +- NDIS_STATUS_FAILURE image not found +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-INT eFuseLoadEEPROM( +- IN PRTMP_ADAPTER pAd) +-{ +- PSTRING src = NULL; +- INT retval; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- +- +- src=EFUSE_BUFFER_PATH; +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- if (src && *src) +- { +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- return FALSE; +- } +- else +- { +- +- memset(pAd->EEPROMImage, 0x00, MAX_EEPROM_BIN_FILE_SIZE); +- +- +- retval =RtmpOSFileRead(srcf, (PSTRING)pAd->EEPROMImage, MAX_EEPROM_BIN_FILE_SIZE); +- if (retval > 0) +- { +- RTMPSetProfileParameters(pAd, (PSTRING)pAd->EEPROMImage); +- retval = NDIS_STATUS_SUCCESS; +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); +- +- } +- +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); +- return FALSE; +- +- } +- +- retval=RtmpOSFileClose(srcf); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- +- return TRUE; +-} +- +-INT eFuseWriteEeeppromBuf( +- IN PRTMP_ADAPTER pAd) +-{ +- +- PSTRING src = NULL; +- INT retval; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- +- +- src=EFUSE_BUFFER_PATH; +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- +- +- if (src && *src) +- { +- srcf = RtmpOSFileOpen(src, O_WRONLY|O_CREAT, 0); +- +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- return FALSE; +- } +- else +- { +-/* +- // The object must have a read method +- if (srcf->f_op && srcf->f_op->write) +- { +- // The object must have a read method +- srcf->f_op->write(srcf, pAd->EEPROMImage, 1024, &srcf->f_pos); +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error!! System doest not support read function\n")); +- return FALSE; +- } +-*/ +- +- RtmpOSFileWrite(srcf, (PSTRING)pAd->EEPROMImage,MAX_EEPROM_BIN_FILE_SIZE); +- +- } +- +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); +- return FALSE; +- +- } +- +- retval=RtmpOSFileClose(srcf); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- return TRUE; +-} +- +- +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, +- PUINT EfuseFreeBlock) +-{ +- USHORT i; +- USHORT LogicalAddress; +- if(!pAd->bUseEfuse) +- { +- DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount Only supports efuse Mode\n")); +- return ; +- } +- for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- *EfuseFreeBlock= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END-i); +- break; +- } +- +- if(i == EFUSE_USAGE_MAP_END) +- *EfuseFreeBlock = 0; +- } +- DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount is 0x%x\n",*EfuseFreeBlock)); +-} +- +-INT eFuse_init( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT EfuseFreeBlock=0; +- DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and its size =%x[%x-%x] \n",EFUSE_USAGE_MAP_SIZE,EFUSE_USAGE_MAP_START,EFUSE_USAGE_MAP_END)); +- eFuseGetFreeBlockCount(pAd, &EfuseFreeBlock); +- //If the used block of efuse is less than 5. We assume the default value +- // of this efuse is empty and change to the buffer mode in odrder to +- //bring up interfaces successfully. +- if(EfuseFreeBlock > (EFUSE_USAGE_MAP_END-5)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and the information is too less to bring up interface. Force to use EEPROM Buffer Mode\n")); +- pAd->bFroceEEPROMBuffer = TRUE; +- eFuseLoadEEPROM(pAd); +- } +- else +- pAd->bFroceEEPROMBuffer = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("NVM is Efuse and force to use EEPROM Buffer Mode=%x\n",pAd->bFroceEEPROMBuffer)); +- +- return 0; +-} +diff --git a/drivers/staging/rt3090/common/ee_prom.c b/drivers/staging/rt3090/common/ee_prom.c +deleted file mode 100644 +index 051cfde..0000000 +--- a/drivers/staging/rt3090/common/ee_prom.c ++++ /dev/null +@@ -1,308 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ee_prom.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-// IRQL = PASSIVE_LEVEL +-static inline VOID RaiseClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) +-{ +- *x = *x | EESK; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition +-} +- +-// IRQL = PASSIVE_LEVEL +-static inline VOID LowerClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) +-{ +- *x = *x & ~EESK; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); +-} +- +-// IRQL = PASSIVE_LEVEL +-static inline USHORT ShiftInBits( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x,i; +- USHORT data=0; +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~( EEDO | EEDI); +- +- for(i=0; i<16; i++) +- { +- data = data << 1; +- RaiseClock(pAd, &x); +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- LowerClock(pAd, &x); //prevent read failed +- +- x &= ~(EEDI); +- if(x & EEDO) +- data |= 1; +- } +- +- return data; +-} +- +- +-// IRQL = PASSIVE_LEVEL +-static inline VOID ShiftOutBits( +- IN PRTMP_ADAPTER pAd, +- IN USHORT data, +- IN USHORT count) +-{ +- UINT32 x,mask; +- +- mask = 0x01 << (count - 1); +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~(EEDO | EEDI); +- +- do +- { +- x &= ~EEDI; +- if(data & mask) x |= EEDI; +- +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- mask = mask >> 1; +- } while(mask); +- +- x &= ~EEDI; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +-} +- +- +-// IRQL = PASSIVE_LEVEL +-static inline VOID EEpromCleanup( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- x &= ~(EECS | EEDI); +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +-} +- +- +-static inline VOID EWEN( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- // output the read_opcode and six pulse in that order +- ShiftOutBits(pAd, EEPROM_EWEN_OPCODE, 5); +- ShiftOutBits(pAd, 0, 6); +- +- EEpromCleanup(pAd); +-} +- +- +-static inline VOID EWDS( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 x; +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- +- // output the read_opcode and six pulse in that order +- ShiftOutBits(pAd, EEPROM_EWDS_OPCODE, 5); +- ShiftOutBits(pAd, 0, 6); +- +- EEpromCleanup(pAd); +-} +- +- +-// IRQL = PASSIVE_LEVEL +-int rtmp_ee_prom_read16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT USHORT *pValue) +-{ +- UINT32 x; +- USHORT data; +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- if (pAd->NicConfig2.field.AntDiversity) +- { +- pAd->EepromAccess = TRUE; +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- Offset /= 2; +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // patch can not access e-Fuse issue +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- } +- +- // output the read_opcode and register number in that order +- ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3); +- ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +- +- // Now read the data (16 bits) in from the selected EEPROM word +- data = ShiftInBits(pAd); +- +- EEpromCleanup(pAd); +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- // Antenna and EEPROM access are both using EESK pin, +- // Therefor we should avoid accessing EESK at the same time +- // Then restore antenna after EEPROM access +- if ((pAd->NicConfig2.field.AntDiversity)/* || (pAd->RfIcType == RFIC_3020)*/) +- { +- pAd->EepromAccess = FALSE; +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- *pValue = data; +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-int rtmp_ee_prom_write16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Data) +-{ +- UINT32 x; +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- if (pAd->NicConfig2.field.AntDiversity) +- { +- pAd->EepromAccess = TRUE; +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- Offset /= 2; +- +- EWEN(pAd); +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // patch can not access e-Fuse issue +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- } +- +- // output the read_opcode ,register number and data in that order +- ShiftOutBits(pAd, EEPROM_WRITE_OPCODE, 3); +- ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +- ShiftOutBits(pAd, Data, 16); // 16-bit access +- +- // read DO status +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- EEpromCleanup(pAd); +- +- RTMPusecDelay(10000); //delay for twp(MAX)=10ms +- +- EWDS(pAd); +- +- EEpromCleanup(pAd); +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- // Antenna and EEPROM access are both using EESK pin, +- // Therefor we should avoid accessing EESK at the same time +- // Then restore antenna after EEPROM access +- if ((pAd->NicConfig2.field.AntDiversity) /*|| (pAd->RfIcType == RFIC_3020)*/) +- { +- pAd->EepromAccess = FALSE; +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- return NDIS_STATUS_SUCCESS; +- +-} +diff --git a/drivers/staging/rt3090/common/eeprom.c b/drivers/staging/rt3090/common/eeprom.c +deleted file mode 100644 +index 2e83749..0000000 +--- a/drivers/staging/rt3090/common/eeprom.c ++++ /dev/null +@@ -1,98 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- eeprom.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +-*/ +- +-#include "../rt_config.h" +- +- +-INT RtmpChipOpsEepromHook( +- IN RTMP_ADAPTER *pAd, +- IN INT infType) +-{ +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +- UINT32 eFuseCtrl, MacCsr0; +- int index; +- +- index = 0; +- do +- { +- RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); +- pAd->MACVersion = MacCsr0; +- +- if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) +- break; +- +- RTMPusecDelay(10); +- } while (index++ < 100); +- +- pAd->bUseEfuse=FALSE; +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrl); +- pAd->bUseEfuse = ( (eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0; +- if(pAd->bUseEfuse) +- { +- pChipOps->eeinit = eFuse_init; +- pChipOps->eeread = rtmp_ee_efuse_read16; +- pChipOps->eewrite = rtmp_ee_efuse_write16; +- return 0 ; +- } +- else +- { +- pAd->bFroceEEPROMBuffer = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); +- } +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +- +- switch(infType) +- { +-#ifdef RTMP_PCI_SUPPORT +- case RTMP_DEV_INF_PCI: +- pChipOps->eeinit = NULL; +- pChipOps->eeread = rtmp_ee_prom_read16; +- pChipOps->eewrite = rtmp_ee_prom_write16; +- break; +-#endif // RTMP_PCI_SUPPORT // +- +- +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("RtmpChipOpsEepromHook() failed!\n")); +- break; +- } +- +- return 0; +-} +diff --git a/drivers/staging/rt3090/common/igmp_snoop.c b/drivers/staging/rt3090/common/igmp_snoop.c +deleted file mode 100644 +index 680658f..0000000 +--- a/drivers/staging/rt3090/common/igmp_snoop.c ++++ /dev/null +@@ -1,1365 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +- +-#ifdef IGMP_SNOOP_SUPPORT +- +-#include "../rt_config.h" +-#include "../ipv6.h" +-#include "../igmp_snoop.h" +- +- +-static inline void initFreeEntryList( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList) +-{ +- int i; +- +- for (i = 0; i < FREE_MEMBER_POOL_SIZE; i++) +- insertTailList(pList, (PLIST_ENTRY)&(pMulticastFilterTable->freeMemberPool[i])); +- +- return; +-} +- +-static inline PMEMBER_ENTRY AllocaGrpMemberEntry( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable) +-{ +- PMEMBER_ENTRY pMemberEntry; +- +- RTMP_SEM_LOCK(&pMulticastFilterTable->FreeMemberPoolTabLock); +- +- pMemberEntry = (PMEMBER_ENTRY)removeHeadList(&pMulticastFilterTable->freeEntryList); +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->FreeMemberPoolTabLock); +- +- return (PMEMBER_ENTRY)pMemberEntry; +-} +- +-static inline VOID FreeGrpMemberEntry( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PMEMBER_ENTRY pEntry) +-{ +- RTMP_SEM_LOCK(&pMulticastFilterTable->FreeMemberPoolTabLock); +- +- insertTailList(&pMulticastFilterTable->freeEntryList, (PLIST_ENTRY)pEntry); +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->FreeMemberPoolTabLock); +-} +- +-static VOID IGMPTableDisplay( +- IN PRTMP_ADAPTER pAd); +- +-static BOOLEAN isIgmpMacAddr( +- IN PUCHAR pMacAddr); +- +-static VOID InsertIgmpMember( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList, +- IN PUCHAR pMemberAddr); +- +-static VOID DeleteIgmpMember( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList, +- IN PUCHAR pMemberAddr); +- +-static VOID DeleteIgmpMemberList( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList); +- +- +-/* +- ========================================================================== +- Description: +- This routine init the entire IGMP table. +- ========================================================================== +- */ +-VOID MulticastFilterTableInit( +- IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable) +-{ +- // Initialize MAC table and allocate spin lock +- *ppMulticastFilterTable = kmalloc(sizeof(MULTICAST_FILTER_TABLE), MEM_ALLOC_FLAG); +- if (*ppMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for Multicase filter table, size=%d\n", +- __FUNCTION__, sizeof(MULTICAST_FILTER_TABLE))); +- return; +- } +- +- NdisZeroMemory(*ppMulticastFilterTable, sizeof(MULTICAST_FILTER_TABLE)); +- NdisAllocateSpinLock(&((*ppMulticastFilterTable)->MulticastFilterTabLock)); +- +- NdisAllocateSpinLock(&((*ppMulticastFilterTable)->FreeMemberPoolTabLock)); +- initList(&((*ppMulticastFilterTable)->freeEntryList)); +- initFreeEntryList(*ppMulticastFilterTable, &((*ppMulticastFilterTable)->freeEntryList)); +- return; +-} +- +-/* +- ========================================================================== +- Description: +- This routine reset the entire IGMP table. +- ========================================================================== +- */ +-VOID MultiCastFilterTableReset( +- IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable) +-{ +- if(*ppMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table is not ready.\n", __FUNCTION__)); +- return; +- } +- +- NdisFreeSpinLock(&((*ppMulticastFilterTable)->FreeMemberPoolTabLock)); +- NdisFreeSpinLock(&((*ppMulticastFilterTable)->MulticastFilterTabLock)); +- kfree(*ppMulticastFilterTable); +- *ppMulticastFilterTable = NULL; +-} +- +-/* +- ========================================================================== +- Description: +- Display all entrys in IGMP table +- ========================================================================== +- */ +-static VOID IGMPTableDisplay( +- IN PRTMP_ADAPTER pAd) +-{ +- int i; +- MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL; +- PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable; +- +- if (pMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_OFF, ("%s Multicase filter table is not ready.\n", __FUNCTION__)); +- return; +- } +- +- // if FULL, return +- if (pMulticastFilterTable->Size == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Table empty.\n")); +- return; +- } +- +- // allocate one MAC entry +- RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- for (i = 0; i< MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++) +- { +- // pick up the first available vacancy +- if (pMulticastFilterTable->Content[i].Valid == TRUE) +- { +- PMEMBER_ENTRY pMemberEntry = NULL; +- pEntry = &pMulticastFilterTable->Content[i]; +- +- DBGPRINT(RT_DEBUG_OFF, ("IF(%s) entry #%d, type=%s, GrpId=(%02x:%02x:%02x:%02x:%02x:%02x) memberCnt=%d\n", +- RTMP_OS_NETDEV_GET_DEVNAME(pEntry->net_dev), i, (pEntry->type==0 ? "static":"dynamic"), +- PRINT_MAC(pEntry->Addr), IgmpMemberCnt(&pEntry->MemberList))); +- +- pMemberEntry = (PMEMBER_ENTRY)pEntry->MemberList.pHead; +- while (pMemberEntry) +- { +- DBGPRINT(RT_DEBUG_OFF, ("member mac=(%02x:%02x:%02x:%02x:%02x:%02x)\n", +- PRINT_MAC(pMemberEntry->Addr))); +- +- pMemberEntry = pMemberEntry->pNext; +- } +- } +- } +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Add and new entry into MAC table +- ========================================================================== +- */ +-BOOLEAN MulticastFilterTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pGrpId, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV dev, +- IN MulticastFilterEntryType type) +-{ +- UCHAR HashIdx; +- int i; +- MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL, *pCurrEntry, *pPrevEntry; +- PMEMBER_ENTRY pMemberEntry; +- PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable; +- +- if (pMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table is not ready.\n", __FUNCTION__)); +- return FALSE; +- } +- +- // if FULL, return +- if (pMulticastFilterTable->Size >= MAX_LEN_OF_MULTICAST_FILTER_TABLE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table full. max-entries = %d\n", +- __FUNCTION__, MAX_LEN_OF_MULTICAST_FILTER_TABLE)); +- return FALSE; +- } +- +- // check the rule is in table already or not. +- if ((pEntry = MulticastFilterTableLookup(pMulticastFilterTable, pGrpId, dev))) +- { +- // doesn't indicate member mac address. +- if(pMemberAddr == NULL) +- { +- return FALSE; +- } +- +- pMemberEntry = (PMEMBER_ENTRY)pEntry->MemberList.pHead; +- +- while (pMemberEntry) +- { +- if (MAC_ADDR_EQUAL(pMemberAddr, pMemberEntry->Addr)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: already in Members list.\n", __FUNCTION__)); +- return FALSE; +- } +- +- pMemberEntry = pMemberEntry->pNext; +- } +- } +- +- RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- do +- { +- ULONG Now; +- // the multicast entry already exist but doesn't include the member yet. +- if (pEntry != NULL && pMemberAddr != NULL) +- { +- InsertIgmpMember(pMulticastFilterTable, &pEntry->MemberList, pMemberAddr); +- break; +- } +- +- // allocate one MAC entry +- for (i = 0; i < MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++) +- { +- // pick up the first available vacancy +- pEntry = &pMulticastFilterTable->Content[i]; +- NdisGetSystemUpTime(&Now); +- if ((pEntry->Valid == TRUE) && (pEntry->type == MCAT_FILTER_DYNAMIC) +- && ((Now - pEntry->lastTime) > IGMPMAC_TB_ENTRY_AGEOUT_TIME)) +- { +- PMULTICAST_FILTER_TABLE_ENTRY pHashEntry; +- +- HashIdx = MULTICAST_ADDR_HASH_INDEX(pEntry->Addr); +- pHashEntry = pMulticastFilterTable->Hash[HashIdx]; +- +- if ((pEntry->net_dev == pHashEntry->net_dev) +- && MAC_ADDR_EQUAL(pEntry->Addr, pHashEntry->Addr)) +- { +- pMulticastFilterTable->Hash[HashIdx] = pHashEntry->pNext; +- pMulticastFilterTable->Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 1 - Total= %d\n", pMulticastFilterTable->Size)); +- } else +- { +- while (pHashEntry->pNext) +- { +- pPrevEntry = pHashEntry; +- pHashEntry = pHashEntry->pNext; +- if ((pEntry->net_dev == pHashEntry->net_dev) +- && MAC_ADDR_EQUAL(pEntry->Addr, pHashEntry->Addr)) +- { +- pPrevEntry->pNext = pHashEntry->pNext; +- pMulticastFilterTable->Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size)); +- break; +- } +- } +- } +- pEntry->Valid = FALSE; +- DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList); +- } +- +- if (pEntry->Valid == FALSE) +- { +- NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY)); +- pEntry->Valid = TRUE; +- +- COPY_MAC_ADDR(pEntry->Addr, pGrpId); +- pEntry->net_dev = dev; +- NdisGetSystemUpTime(&Now); +- pEntry->lastTime = Now; +- pEntry->type = type; +- initList(&pEntry->MemberList); +- if (pMemberAddr != NULL) +- InsertIgmpMember(pMulticastFilterTable, &pEntry->MemberList, pMemberAddr); +- +- pMulticastFilterTable->Size ++; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MulticastFilterTableInsertEntry -IF(%s) allocate entry #%d, Total= %d\n", RTMP_OS_NETDEV_GET_DEVNAME(dev), i, pMulticastFilterTable->Size)); +- break; +- } +- } +- +- // add this MAC entry into HASH table +- if (pEntry) +- { +- HashIdx = MULTICAST_ADDR_HASH_INDEX(pGrpId); +- if (pMulticastFilterTable->Hash[HashIdx] == NULL) +- { +- pMulticastFilterTable->Hash[HashIdx] = pEntry; +- } else +- { +- pCurrEntry = pMulticastFilterTable->Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- pCurrEntry = pCurrEntry->pNext; +- pCurrEntry->pNext = pEntry; +- } +- } +- }while(FALSE); +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Delete a specified client from MAC table +- ========================================================================== +- */ +-BOOLEAN MulticastFilterTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pGrpId, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV dev) +-{ +- USHORT HashIdx; +- MULTICAST_FILTER_TABLE_ENTRY *pEntry, *pPrevEntry; +- PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable; +- USHORT Aid = MCAST_WCID; +- SST Sst = SST_ASSOC; +- UCHAR PsMode = PWR_ACTIVE, Rate; +- +- if (pMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table is not ready.\n", __FUNCTION__)); +- return FALSE; +- } +- +- RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- do +- { +- HashIdx = MULTICAST_ADDR_HASH_INDEX(pGrpId); +- pPrevEntry = pEntry = pMulticastFilterTable->Hash[HashIdx]; +- +- while (pEntry && pEntry->Valid) +- { +- if ((pEntry->net_dev == dev) +- && MAC_ADDR_EQUAL(pEntry->Addr, pGrpId)) +- break; +- else +- { +- pPrevEntry = pEntry; +- pEntry = pEntry->pNext; +- } +- } +- +- // check the rule is in table already or not. +- if (pEntry && (pMemberAddr != NULL)) +- { +- if(APSsPsInquiry(pAd, pMemberAddr, &Sst, &Aid, &PsMode, &Rate)) +- DeleteIgmpMember(pMulticastFilterTable, &pEntry->MemberList, pMemberAddr); +- if (IgmpMemberCnt(&pEntry->MemberList) > 0) +- break; +- } +- +- if (pEntry) +- { +- if (pEntry == pMulticastFilterTable->Hash[HashIdx]) +- { +- pMulticastFilterTable->Hash[HashIdx] = pEntry->pNext; +- DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList); +- NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY)); +- pMulticastFilterTable->Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 1 - Total= %d\n", pMulticastFilterTable->Size)); +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList); +- NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY)); +- pMulticastFilterTable->Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size)); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: the Group doesn't exist.\n", __FUNCTION__)); +- } +- } while(FALSE); +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Look up the MAC address in the IGMP table. Return NULL if not found. +- Return: +- pEntry - pointer to the MAC entry; NULL is not found +- ========================================================================== +-*/ +-PMULTICAST_FILTER_TABLE_ENTRY MulticastFilterTableLookup( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PUCHAR pAddr, +- IN PNET_DEV dev) +-{ +- ULONG HashIdx, Now; +- PMULTICAST_FILTER_TABLE_ENTRY pEntry = NULL, pPrev = NULL; +- +- if (pMulticastFilterTable == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table is not ready.\n", __FUNCTION__)); +- return NULL; +- } +- +- RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- HashIdx = MULTICAST_ADDR_HASH_INDEX(pAddr); +- pEntry = pPrev = pMulticastFilterTable->Hash[HashIdx]; +- +- while (pEntry && pEntry->Valid) +- { +- if ((pEntry->net_dev == dev) +- && MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { +- NdisGetSystemUpTime(&Now); +- pEntry->lastTime = Now; +- break; +- } +- else +- { +- NdisGetSystemUpTime(&Now); +- if ((pEntry->Valid == TRUE) && (pEntry->type == MCAT_FILTER_DYNAMIC) +- && RTMP_TIME_AFTER(Now, pEntry->lastTime+IGMPMAC_TB_ENTRY_AGEOUT_TIME)) +- { +- // Remove the aged entry +- if (pEntry == pMulticastFilterTable->Hash[HashIdx]) +- { +- pMulticastFilterTable->Hash[HashIdx] = pEntry->pNext; +- pPrev = pMulticastFilterTable->Hash[HashIdx]; +- DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList); +- NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY)); +- pMulticastFilterTable->Size --; +- pEntry = pPrev; +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size)); +- } +- else +- { +- pPrev->pNext = pEntry->pNext; +- DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList); +- NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY)); +- pMulticastFilterTable->Size --; +- pEntry = (pPrev == NULL ? NULL: pPrev->pNext); +- DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size)); +- } +- } +- else +- { +- pPrev = pEntry; +- pEntry = pEntry->pNext; +- } +- } +- } +- +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- +- return pEntry; +-} +- +-VOID IGMPSnooping( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pSrcMacAddr, +- IN PUCHAR pIpHeader, +- IN PNET_DEV pDev) +-{ +- INT i; +- INT IpHeaderLen; +- UCHAR GroupType; +- UINT16 numOfGroup; +- UCHAR IgmpVerType; +- PUCHAR pIgmpHeader; +- PUCHAR pGroup; +- UCHAR AuxDataLen; +- UINT16 numOfSources; +- PUCHAR pGroupIpAddr; +- UCHAR GroupMacAddr[6]; +- PUCHAR pGroupMacAddr = (PUCHAR)&GroupMacAddr; +- +- if(isIgmpPkt(pDstMacAddr, pIpHeader)) +- { +- IpHeaderLen = (*(pIpHeader + 2) & 0x0f) * 4; +- pIgmpHeader = pIpHeader + 2 + IpHeaderLen; +- IgmpVerType = (UCHAR)(*(pIgmpHeader)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("IGMP type=%0x\n", IgmpVerType)); +- +- switch(IgmpVerType) +- { +- case IGMP_V1_MEMBERSHIP_REPORT: // IGMP version 1 membership report. +- case IGMP_V2_MEMBERSHIP_REPORT: // IGMP version 2 membership report. +- pGroupIpAddr = (PUCHAR)(pIgmpHeader + 4); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IP); +- DBGPRINT(RT_DEBUG_TRACE, ("IGMP Group=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- +- case IGMP_LEAVE_GROUP: // IGMP version 1 and version 2 leave group. +- pGroupIpAddr = (PUCHAR)(pIgmpHeader + 4); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IP); +- DBGPRINT(RT_DEBUG_TRACE, ("IGMP Group=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- break; +- +- case IGMP_V3_MEMBERSHIP_REPORT: // IGMP version 3 membership report. +- numOfGroup = ntohs(*((UINT16 *)(pIgmpHeader + 6))); +- pGroup = (PUCHAR)(pIgmpHeader + 8); +- for (i=0; i < numOfGroup; i++) +- { +- GroupType = (UCHAR)(*pGroup); +- AuxDataLen = (UCHAR)(*(pGroup + 1)); +- numOfSources = ntohs(*((UINT16 *)(pGroup + 2))); +- pGroupIpAddr = (PUCHAR)(pGroup + 4); +- DBGPRINT(RT_DEBUG_TRACE, ("IGMPv3 Type=%d, ADL=%d, numOfSource=%d\n", GroupType, AuxDataLen, numOfSources)); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IP); +- DBGPRINT(RT_DEBUG_TRACE, ("IGMP Group=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- +- do +- { +- if((GroupType == MODE_IS_EXCLUDE) || (GroupType == CHANGE_TO_EXCLUDE_MODE) || (GroupType == ALLOW_NEW_SOURCES)) +- { +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- } +- +- if((GroupType == MODE_IS_INCLUDE) || (GroupType == BLOCK_OLD_SOURCES)) +- { +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- break; +- } +- +- if((GroupType == CHANGE_TO_INCLUDE_MODE)) +- { +- if(numOfSources == 0) +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- else +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- } +- } while(FALSE); +- pGroup += (8 + (numOfSources * 4) + AuxDataLen); +- } +- break; +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("unknow IGMP Type=%d\n", IgmpVerType)); +- break; +- } +- } +- +- return; +-} +- +- +-static BOOLEAN isIgmpMacAddr( +- IN PUCHAR pMacAddr) +-{ +- if((pMacAddr[0] == 0x01) +- && (pMacAddr[1] == 0x00) +- && (pMacAddr[2] == 0x5e)) +- return TRUE; +- return FALSE; +-} +- +-BOOLEAN isIgmpPkt( +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pIpHeader) +-{ +- UINT16 IpProtocol = ntohs(*((UINT16 *)(pIpHeader))); +- UCHAR IgmpProtocol; +- +- if(!isIgmpMacAddr(pDstMacAddr)) +- return FALSE; +- +- if(IpProtocol == ETH_P_IP) +- { +- IgmpProtocol = (UCHAR)*(pIpHeader + 11); +- if(IgmpProtocol == IGMP_PROTOCOL_DESCRIPTOR) +- return TRUE; +- } +- +- return FALSE; +-} +- +-static VOID InsertIgmpMember( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList, +- IN PUCHAR pMemberAddr) +-{ +- PMEMBER_ENTRY pMemberEntry; +- +- if(pList == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: membert list doesn't exist.\n", __FUNCTION__)); +- return; +- } +- +- if (pMemberAddr == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: invalid member.\n", __FUNCTION__)); +- return; +- } +- +- if((pMemberEntry = (PMEMBER_ENTRY)AllocaGrpMemberEntry(pMulticastFilterTable)) != NULL) +- { +- NdisZeroMemory(pMemberEntry, sizeof(MEMBER_ENTRY)); +- COPY_MAC_ADDR(pMemberEntry->Addr, pMemberAddr); +- insertTailList(pList, (PLIST_ENTRY)pMemberEntry); +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s Member Mac=%02x:%02x:%02x:%02x:%02x:%02x\n", __FUNCTION__, +- pMemberEntry->Addr[0], pMemberEntry->Addr[1], pMemberEntry->Addr[2], +- pMemberEntry->Addr[3], pMemberEntry->Addr[4], pMemberEntry->Addr[5])); +- } +- return; +-} +- +-static VOID DeleteIgmpMember( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList, +- IN PUCHAR pMemberAddr) +-{ +- PMEMBER_ENTRY pCurEntry; +- +- if((pList == NULL) || (pList->pHead == NULL)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: membert list doesn't exist.\n", __FUNCTION__)); +- return; +- } +- +- if (pMemberAddr == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: invalid member.\n", __FUNCTION__)); +- return; +- } +- +- pCurEntry = (PMEMBER_ENTRY)pList->pHead; +- while (pCurEntry) +- { +- if(MAC_ADDR_EQUAL(pMemberAddr, pCurEntry->Addr)) +- { +- delEntryList(pList, (PLIST_ENTRY)pCurEntry); +- FreeGrpMemberEntry(pMulticastFilterTable, pCurEntry); +- break; +- } +- pCurEntry = pCurEntry->pNext; +- } +- +- return; +-} +- +-static VOID DeleteIgmpMemberList( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PLIST_HEADER pList) +-{ +- PMEMBER_ENTRY pCurEntry, pPrvEntry; +- +- if((pList == NULL) || (pList->pHead == NULL)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: membert list doesn't exist.\n", __FUNCTION__)); +- return; +- } +- +- pPrvEntry = pCurEntry = (PMEMBER_ENTRY)pList->pHead; +- while (pCurEntry) +- { +- delEntryList(pList, (PLIST_ENTRY)pCurEntry); +- pPrvEntry = pCurEntry; +- pCurEntry = pCurEntry->pNext; +- FreeGrpMemberEntry(pMulticastFilterTable, pPrvEntry); +- } +- +- initList(pList); +- return; +-} +- +- +-UCHAR IgmpMemberCnt( +- IN PLIST_HEADER pList) +-{ +- if(pList == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: membert list doesn't exist.\n", __FUNCTION__)); +- return 0; +- } +- +- return getListSize(pList); +-} +- +-VOID IgmpGroupDelMembers( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV pDev) +-{ +- INT i; +- MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL; +- PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable; +- +- for (i = 0; i < MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++) +- { +- // pick up the first available vacancy +- pEntry = &pMulticastFilterTable->Content[i]; +- if (pEntry->Valid == TRUE) +- { +- if(pMemberAddr != NULL) +- { +- RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- DeleteIgmpMember(pMulticastFilterTable, &pEntry->MemberList, pMemberAddr); +- RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock); +- } +- +- if((pEntry->type == MCAT_FILTER_DYNAMIC) +- && (IgmpMemberCnt(&pEntry->MemberList) == 0)) +- MulticastFilterTableDeleteEntry(pAd, pEntry->Addr, pMemberAddr, pDev); +- } +- } +-} +- +-INT Set_IgmpSn_Enable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT Enable; +- POS_COOKIE pObj; +- UCHAR ifIndex; +- PNET_DEV pDev; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- ifIndex = pObj->ioctl_if; +- +- pDev = (ifIndex == MAIN_MBSSID) ? (pAd->net_dev) : (pAd->ApCfg.MBSSID[ifIndex].MSSIDDev); +- Enable = (UINT) simple_strtol(arg, 0, 10); +- +- pAd->ApCfg.MBSSID[ifIndex].IgmpSnoopEnable = (BOOLEAN)(Enable == 0 ? 0 : 1); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(%s) %s\n", __FUNCTION__, RTMP_OS_NETDEV_GET_DEVNAME(pDev), Enable == TRUE ? "Enable IGMP Snooping":"Disable IGMP Snooping")); +- +- return TRUE; +-} +- +-INT Set_IgmpSn_AddEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT i; +- BOOLEAN bGroupId = 1; +- PSTRING value; +- PSTRING thisChar; +- UCHAR IpAddr[4]; +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; +- UCHAR GroupId[ETH_LENGTH_OF_ADDRESS]; +- PUCHAR *pAddr = (PUCHAR *)&Addr; +- PNET_DEV pDev; +- POS_COOKIE pObj; +- UCHAR ifIndex; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- ifIndex = pObj->ioctl_if; +- +- pDev = (ifIndex == MAIN_MBSSID) ? (pAd->net_dev) : (pAd->ApCfg.MBSSID[ifIndex].MSSIDDev); +- +- while ((thisChar = strsep((char **)&arg, "-")) != NULL) +- { +- // refuse the Member if it's not a MAC address. +- if((bGroupId == 0) && (strlen(thisChar) != 17)) +- continue; +- +- if(strlen(thisChar) == 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 +- { +- for (i=0, value = rstrtok(thisChar,":"); value; value = rstrtok(NULL,":")) +- { +- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) +- return FALSE; //Invalid +- +- AtoH(value, &Addr[i++], 1); +- } +- +- if(i != 6) +- return FALSE; //Invalid +- } +- else +- { +- for (i=0, value = rstrtok(thisChar,"."); value; value = rstrtok(NULL,".")) +- { +- if((strlen(value) > 0) && (strlen(value) <= 3)) +- { +- int ii; +- for(ii=0; iiOS_Cookie; +- ifIndex = pObj->ioctl_if; +- +- pDev = (ifIndex == MAIN_MBSSID) ? (pAd->net_dev) : (pAd->ApCfg.MBSSID[ifIndex].MSSIDDev); +- +- while ((thisChar = strsep((char **)&arg, "-")) != NULL) +- { +- // refuse the Member if it's not a MAC address. +- if((bGroupId == 0) && (strlen(thisChar) != 17)) +- continue; +- +- if(strlen(thisChar) == 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 +- { +- for (i=0, value = rstrtok(thisChar,":"); value; value = rstrtok(NULL,":")) +- { +- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) +- return FALSE; //Invalid +- +- AtoH(value, &Addr[i++], 1); +- } +- +- if(i != 6) +- return FALSE; //Invalid +- } +- else +- { +- for (i=0, value = rstrtok(thisChar,"."); value; value = rstrtok(NULL,".")) +- { +- if((strlen(value) > 0) && (strlen(value) <= 3)) +- { +- int ii; +- for(ii=0; ii 0 ) +- MulticastFilterTableDeleteEntry(pAd, (PUCHAR)GroupId, Addr, pDev); +- +- bGroupId = 0; +- } +- +- if(memberCnt == 0) +- MulticastFilterTableDeleteEntry(pAd, (PUCHAR)GroupId, NULL, pDev); +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s (%2X:%2X:%2X:%2X:%2X:%2X)\n", +- __FUNCTION__, Addr[0], Addr[1], Addr[2], Addr[3], Addr[4], Addr[5])); +- +- return TRUE; +-} +- +-INT Set_IgmpSn_TabDisplay_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- IGMPTableDisplay(pAd); +- return TRUE; +-} +- +-void rtmp_read_igmp_snoop_from_file( +- IN PRTMP_ADAPTER pAd, +- PSTRING tmpbuf, +- PSTRING buffer) +-{ +- PSTRING macptr; +- INT i=0; +- +- //IgmpSnEnable +- if(RTMPGetKeyParameter("IgmpSnEnable", tmpbuf, 128, buffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); (macptr && i < pAd->ApCfg.BssidNum); macptr = rstrtok(NULL,";"), i++) +- { +- if ((strncmp(macptr, "0", 1) == 0)) +- pAd->ApCfg.MBSSID[i].IgmpSnoopEnable = FALSE; +- else if ((strncmp(macptr, "1", 1) == 0)) +- pAd->ApCfg.MBSSID[i].IgmpSnoopEnable = TRUE; +- else +- pAd->ApCfg.MBSSID[i].IgmpSnoopEnable = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MBSSID[%d].Enable=%d\n", i, pAd->ApCfg.MBSSID[i].IgmpSnoopEnable)); +- } +- } +-} +- +-NDIS_STATUS IgmpPktInfoQuery( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrcBufVA, +- IN PNDIS_PACKET pPacket, +- IN UCHAR apidx, +- OUT BOOLEAN *pInIgmpGroup, +- OUT PMULTICAST_FILTER_TABLE_ENTRY *ppGroupEntry) +-{ +- if(IS_MULTICAST_MAC_ADDR(pSrcBufVA)) +- { +- BOOLEAN IgmpMldPkt = FALSE; +- PUCHAR pIpHeader = pSrcBufVA + 12; +- +- if(ntohs(*((UINT16 *)(pIpHeader))) == ETH_P_IPV6) +- IgmpMldPkt = isMldPkt(pSrcBufVA, pIpHeader, NULL, NULL); +- else +- IgmpMldPkt = isIgmpPkt(pSrcBufVA, pIpHeader); +- +- if (IgmpMldPkt) +- { +- *ppGroupEntry = NULL; +- } +- else if ((*ppGroupEntry = MulticastFilterTableLookup(pAd->pMulticastFilterTable, pSrcBufVA, +- pAd->ApCfg.MBSSID[apidx].MSSIDDev)) == NULL) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- return NDIS_STATUS_FAILURE; +- } +- *pInIgmpGroup = TRUE; +- } +- else if (IS_BROADCAST_MAC_ADDR(pSrcBufVA)) +- { +- PUCHAR pDstIpAddr = pSrcBufVA + 30; // point to Destination of Ip address of IP header. +- UCHAR GroupMacAddr[6]; +- PUCHAR pGroupMacAddr = (PUCHAR)&GroupMacAddr; +- +- ConvertMulticastIP2MAC(pDstIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IP); +- if ((*ppGroupEntry = MulticastFilterTableLookup(pAd->pMulticastFilterTable, pGroupMacAddr, +- pAd->ApCfg.MBSSID[apidx].MSSIDDev)) != NULL) +- { +- *pInIgmpGroup = TRUE; +- } +- } +- return NDIS_STATUS_SUCCESS; +-} +- +-NDIS_STATUS IgmpPktClone( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR QueIdx, +- IN PMULTICAST_FILTER_TABLE_ENTRY pGroupEntry) +-{ +- PNDIS_PACKET pSkbClone = NULL; +- PMEMBER_ENTRY pMemberEntry = (PMEMBER_ENTRY)pGroupEntry->MemberList.pHead; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- USHORT Aid; +- SST Sst = SST_ASSOC; +- UCHAR PsMode = PWR_ACTIVE; +- UCHAR Rate; +- unsigned long IrqFlags; +- +- // check all members of the IGMP group. +- while(pMemberEntry != NULL) +- { +- pMacEntry = APSsPsInquiry(pAd, pMemberEntry->Addr, &Sst, &Aid, &PsMode, &Rate); +- +- if (pMacEntry && (Sst == SST_ASSOC) && (PsMode != PWR_SAVE)) +- { +- pSkbClone = skb_clone(RTPKT_TO_OSPKT(pPacket), MEM_ALLOC_FLAG); +- if(pSkbClone) +- { +- RTMP_SET_PACKET_WCID(pSkbClone, (UCHAR)Aid); +- // Pkt type must set to PKTSRC_NDIS. +- // It cause of the deason that APHardTransmit() +- // doesn't handle PKTSRC_DRIVER pkt type in version 1.3.0.0. +- RTMP_SET_PACKET_SOURCE(pSkbClone, PKTSRC_NDIS); +- } +- else +- { +- pMemberEntry = pMemberEntry->pNext; +- continue; +- } +- +- // insert the pkt to TxSwQueue. +- if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE) +- { +-#ifdef BLOCK_NET_IF +- StopNetIfQueue(pAd, QueIdx, pSkbClone); +-#endif // BLOCK_NET_IF // +- RELEASE_NDIS_PACKET(pAd, pSkbClone, NDIS_STATUS_FAILURE); +- return NDIS_STATUS_FAILURE; +- } +- else +- { +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- InsertTailQueueAc(pAd, pMacEntry, &pAd->TxSwQueue[QueIdx], PACKET_TO_QUEUE_ENTRY(pSkbClone)); +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- } +- } +- pMemberEntry = pMemberEntry->pNext; +- } +- return NDIS_STATUS_SUCCESS; +-} +- +-static inline BOOLEAN isMldMacAddr( +- IN PUCHAR pMacAddr) +-{ +- return ((pMacAddr[0] == 0x33) && (pMacAddr[1] == 0x33)) ? TRUE : FALSE; +-} +- +-static inline BOOLEAN IsSupportedMldMsg( +- IN UINT8 MsgType) +-{ +- BOOLEAN result = FALSE; +- switch(MsgType) +- { +- case MLD_V1_LISTENER_REPORT: +- case MLD_V1_LISTENER_DONE: +- case MLD_V2_LISTERNER_REPORT: +- result = TRUE; +- break; +- default: +- result = FALSE; +- break; +- } +- +- return result; +-} +- +-BOOLEAN isMldPkt( +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pIpHeader, +- OUT UINT8 *pProtoType, +- OUT PUCHAR *pMldHeader) +-{ +- BOOLEAN result = FALSE; +- UINT16 IpProtocol = ntohs(*((UINT16 *)(pIpHeader))); +- +- if(!isMldMacAddr(pDstMacAddr)) +- return FALSE; +- +- if(IpProtocol != ETH_P_IPV6) +- return FALSE; +- +- // skip protocol (2 Bytes). +- pIpHeader += 2; +- do +- { +- PRT_IPV6_HDR pIpv6Hdr = (PRT_IPV6_HDR)(pIpHeader); +- UINT8 nextProtocol = pIpv6Hdr->nextHdr; +- UINT32 offset = IPV6_HDR_LEN; +- +- while(nextProtocol != IPV6_NEXT_HEADER_ICMPV6) +- { +- if(IPv6ExtHdrHandle((RT_IPV6_EXT_HDR *)(pIpHeader + offset), &nextProtocol, &offset) == FALSE) +- break; +- } +- +- if(nextProtocol == IPV6_NEXT_HEADER_ICMPV6) +- { +- PRT_ICMPV6_HDR pICMPv6Hdr = (PRT_ICMPV6_HDR)(pIpHeader + offset); +- if (IsSupportedMldMsg(pICMPv6Hdr->type) == TRUE) +- { +- if (pProtoType != NULL) +- *pProtoType = pICMPv6Hdr->type; +- if (pMldHeader != NULL) +- *pMldHeader = (PUCHAR)pICMPv6Hdr; +- result = TRUE; +- } +- } +- }while(FALSE); +- +- return result; +-} +- +-/* MLD v1 messages have the following format: +- 0 1 2 3 +- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | Type | Code | Checksum | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | Maximum Response Delay | Reserved | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- + + +- | | +- + Multicast Address + +- | | +- + + +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-*/ +- +-/* Version 3 Membership Report Message +- 0 1 2 3 +- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | Type = 143 | Reserved | Checksum | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | Reserved | Number of Group Records (M) | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- . . +- . Multicast Address Record [1] . +- . . +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- . . +- . Multicast Address Record [2] . +- . . +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | . | +- . . . +- | . | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- . . +- . Multicast Address Record [M] . +- . . +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- +- +- where each Group Record has the following internal format: +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | Record Type | Aux Data Len | Number of Sources (N) | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- * * +- | | +- * Multicast Address * +- | | +- * * +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- * * +- | | +- * Source Address [1] * +- | | +- * * +- | | +- +- -+ +- | | +- * * +- | | +- * Source Address [2] * +- | | +- * * +- | | +- +- -+ +- . . . +- . . . +- . . . +- +- -+ +- | | +- * * +- | | +- * Source Address [N] * +- | | +- * * +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +- | | +- . . +- . Auxiliary Data . +- . . +- | | +- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-*/ +- +-VOID MLDSnooping( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pSrcMacAddr, +- IN PUCHAR pIpHeader, +- IN PNET_DEV pDev) +-{ +- INT i; +- UCHAR GroupType; +- UINT16 numOfGroup; +- PUCHAR pGroup; +- UCHAR AuxDataLen; +- UINT16 numOfSources; +- PUCHAR pGroupIpAddr; +- UCHAR GroupMacAddr[6]; +- PUCHAR pGroupMacAddr = (PUCHAR)&GroupMacAddr; +- +- UINT8 MldType; +- PUCHAR pMldHeader; +- +- if(isMldPkt(pDstMacAddr, pIpHeader, &MldType, &pMldHeader) == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MLD type=%0x\n", MldType)); +- +- switch(MldType) +- { +- case MLD_V1_LISTENER_REPORT: +- // skip Type(1 Byte), code(1 Byte), checksum(2 Bytes), Maximum Rsp Delay(2 Bytes), Reserve(2 Bytes). +- pGroupIpAddr = (PUCHAR)(pMldHeader + 8); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IPV6); +- DBGPRINT(RT_DEBUG_TRACE, ("Group Id=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- +- case MLD_V1_LISTENER_DONE: +- // skip Type(1 Byte), code(1 Byte), checksum(2 Bytes), Maximum Rsp Delay(2 Bytes), Reserve(2 Bytes). +- pGroupIpAddr = (PUCHAR)(pMldHeader + 8); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IPV6); +- DBGPRINT(RT_DEBUG_TRACE, ("Group Id=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- break; +- +- case MLD_V2_LISTERNER_REPORT: // IGMP version 3 membership report. +- numOfGroup = ntohs(*((UINT16 *)(pMldHeader + 6))); +- pGroup = (PUCHAR)(pMldHeader + 8); +- for (i=0; i < numOfGroup; i++) +- { +- GroupType = (UCHAR)(*pGroup); +- AuxDataLen = (UCHAR)(*(pGroup + 1)); +- numOfSources = ntohs(*((UINT16 *)(pGroup + 2))); +- pGroupIpAddr = (PUCHAR)(pGroup + 4); +- DBGPRINT(RT_DEBUG_TRACE, ("MLDv2 Type=%d, ADL=%d, numOfSource=%d\n", GroupType, AuxDataLen, numOfSources)); +- ConvertMulticastIP2MAC(pGroupIpAddr, (PUCHAR *)&pGroupMacAddr, ETH_P_IPV6); +- DBGPRINT(RT_DEBUG_TRACE, ("MLD Group=%02x:%02x:%02x:%02x:%02x:%02x\n", +- GroupMacAddr[0], GroupMacAddr[1], GroupMacAddr[2], GroupMacAddr[3], GroupMacAddr[4], GroupMacAddr[5])); +- +- do +- { +- if((GroupType == MODE_IS_EXCLUDE) || (GroupType == CHANGE_TO_EXCLUDE_MODE) || (GroupType == ALLOW_NEW_SOURCES)) +- { +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- } +- +- if((GroupType == MODE_IS_INCLUDE) || (GroupType == BLOCK_OLD_SOURCES)) +- { +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- break; +- } +- +- if((GroupType == CHANGE_TO_INCLUDE_MODE)) +- { +- if(numOfSources == 0) +- MulticastFilterTableDeleteEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev); +- else +- MulticastFilterTableInsertEntry(pAd, GroupMacAddr, pSrcMacAddr, pDev, MCAT_FILTER_DYNAMIC); +- break; +- } +- } while(FALSE); +- // skip 4 Bytes (Record Type, Aux Data Len, Number of Sources) + a IPv6 address. +- pGroup += (4 + IPV6_ADDR_LEN + (numOfSources * 16) + AuxDataLen); +- } +- break; +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("unknow MLD Type=%d\n", MldType)); +- break; +- } +- } +- +- return; +-} +- +- +-#endif // IGMP_SNOOP_SUPPORT // +diff --git a/drivers/staging/rt3090/common/mlme.c b/drivers/staging/rt3090/common/mlme.c +deleted file mode 100644 +index 1613c04..0000000 +--- a/drivers/staging/rt3090/common/mlme.c ++++ /dev/null +@@ -1,6550 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mlme.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2004-08-25 Modify from RT2500 code base +- John Chang 2004-09-06 modified for RT2600 +-*/ +- +-#include "../rt_config.h" +-#include +- +-UCHAR CISCO_OUI[] = {0x00, 0x40, 0x96}; +- +-UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01}; +-UCHAR RSN_OUI[] = {0x00, 0x0f, 0xac}; +-UCHAR WAPI_OUI[] = {0x00, 0x14, 0x72}; +-UCHAR WME_INFO_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01}; +-UCHAR WME_PARM_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01}; +-UCHAR Ccx2QosInfo[] = {0x00, 0x40, 0x96, 0x04}; +-UCHAR RALINK_OUI[] = {0x00, 0x0c, 0x43}; +-UCHAR BROADCOM_OUI[] = {0x00, 0x90, 0x4c}; +-UCHAR WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04}; +-#ifdef CONFIG_STA_SUPPORT +-#ifdef DOT11_N_SUPPORT +-UCHAR PRE_N_HT_OUI[] = {0x00, 0x90, 0x4c}; +-#endif // DOT11_N_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-UCHAR RateSwitchTable[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x11, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +- 0x04, 0x21, 0, 30, 50, +- 0x05, 0x21, 1, 20, 50, +- 0x06, 0x21, 2, 20, 50, +- 0x07, 0x21, 3, 15, 50, +- 0x08, 0x21, 4, 15, 30, +- 0x09, 0x21, 5, 10, 25, +- 0x0a, 0x21, 6, 8, 25, +- 0x0b, 0x21, 7, 8, 25, +- 0x0c, 0x20, 12, 15, 30, +- 0x0d, 0x20, 13, 8, 20, +- 0x0e, 0x20, 14, 8, 20, +- 0x0f, 0x20, 15, 8, 25, +- 0x10, 0x22, 15, 8, 25, +- 0x11, 0x00, 0, 0, 0, +- 0x12, 0x00, 0, 0, 0, +- 0x13, 0x00, 0, 0, 0, +- 0x14, 0x00, 0, 0, 0, +- 0x15, 0x00, 0, 0, 0, +- 0x16, 0x00, 0, 0, 0, +- 0x17, 0x00, 0, 0, 0, +- 0x18, 0x00, 0, 0, 0, +- 0x19, 0x00, 0, 0, 0, +- 0x1a, 0x00, 0, 0, 0, +- 0x1b, 0x00, 0, 0, 0, +- 0x1c, 0x00, 0, 0, 0, +- 0x1d, 0x00, 0, 0, 0, +- 0x1e, 0x00, 0, 0, 0, +- 0x1f, 0x00, 0, 0, 0, +-}; +- +-UCHAR RateSwitchTable11B[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x04, 0x03, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +-}; +- +-UCHAR RateSwitchTable11BG[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +- 0x04, 0x10, 2, 20, 35, +- 0x05, 0x10, 3, 16, 35, +- 0x06, 0x10, 4, 10, 25, +- 0x07, 0x10, 5, 16, 25, +- 0x08, 0x10, 6, 10, 25, +- 0x09, 0x10, 7, 10, 13, +-}; +- +-UCHAR RateSwitchTable11G[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x08, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x10, 0, 20, 101, +- 0x01, 0x10, 1, 20, 35, +- 0x02, 0x10, 2, 20, 35, +- 0x03, 0x10, 3, 16, 35, +- 0x04, 0x10, 4, 10, 25, +- 0x05, 0x10, 5, 16, 25, +- 0x06, 0x10, 6, 10, 25, +- 0x07, 0x10, 7, 10, 13, +-}; +- +-#ifdef DOT11_N_SUPPORT +-UCHAR RateSwitchTable11N1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x21, 5, 10, 25, +- 0x09, 0x21, 6, 8, 14, +- 0x0a, 0x21, 7, 8, 14, +- 0x0b, 0x23, 7, 8, 14, +-}; +- +-UCHAR RateSwitchTable11N2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x20, 11, 15, 30, +- 0x09, 0x20, 12, 15, 30, +- 0x0a, 0x20, 13, 8, 20, +- 0x0b, 0x20, 14, 8, 20, +- 0x0c, 0x20, 15, 8, 25, +- 0x0d, 0x22, 15, 8, 15, +-}; +- +-UCHAR RateSwitchTable11N3S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x00, 0, 0, 0, // 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 11, 15, 30, // Required by System-Alan @ 20080812 +- 0x06, 0x20, 12, 15, 30, // 0x05, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, // 0x06, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, // 0x07, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, // 0x08, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, // 0x09, 0x22, 15, 8, 25, +-}; +- +-UCHAR RateSwitchTable11N2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, +-}; +- +-UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, +-}; +- +-UCHAR RateSwitchTable11BGN1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x21, 5, 10, 25, +- 0x09, 0x21, 6, 8, 14, +- 0x0a, 0x21, 7, 8, 14, +- 0x0b, 0x23, 7, 8, 14, +-}; +- +-UCHAR RateSwitchTable11BGN2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x20, 11, 15, 30, +- 0x09, 0x20, 12, 15, 30, +- 0x0a, 0x20, 13, 8, 20, +- 0x0b, 0x20, 14, 8, 20, +- 0x0c, 0x20, 15, 8, 25, +- 0x0d, 0x22, 15, 8, 15, +-}; +- +-UCHAR RateSwitchTable11BGN3S[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 20, 50, +- 0x04, 0x21, 4, 15, 50, +- 0x05, 0x20, 20, 15, 30, +- 0x06, 0x20, 21, 8, 20, +- 0x07, 0x20, 22, 8, 20, +- 0x08, 0x20, 23, 8, 25, +- 0x09, 0x22, 23, 8, 25, +-}; +- +-UCHAR RateSwitchTable11BGN2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, +-}; +- +-UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x21, 12, 15, 30, +- 0x07, 0x20, 20, 15, 30, +- 0x08, 0x20, 21, 8, 20, +- 0x09, 0x20, 22, 8, 20, +- 0x0a, 0x20, 23, 8, 25, +- 0x0b, 0x22, 23, 8, 25, +-}; +-#endif // DOT11_N_SUPPORT // +- +- +-extern UCHAR OfdmRateToRxwiMCS[]; +-// since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. +-// otherwise the WLAN peer may not be able to receive the ACK thus downgrade its data TX rate +-ULONG BasicRateMask[12] = {0xfffff001 /* 1-Mbps */, 0xfffff003 /* 2 Mbps */, 0xfffff007 /* 5.5 */, 0xfffff00f /* 11 */, +- 0xfffff01f /* 6 */ , 0xfffff03f /* 9 */ , 0xfffff07f /* 12 */ , 0xfffff0ff /* 18 */, +- 0xfffff1ff /* 24 */ , 0xfffff3ff /* 36 */ , 0xfffff7ff /* 48 */ , 0xffffffff /* 54 */}; +- +-UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +-UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +- +-// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than +-// this value, then it's quaranteed capable of operating in 36 mbps TX rate in +-// clean environment. +-// TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 +-CHAR RssiSafeLevelForTxRate[] ={ -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 }; +- +-UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100}; +-USHORT RateIdTo500Kbps[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200}; +- +-UCHAR SsidIe = IE_SSID; +-UCHAR SupRateIe = IE_SUPP_RATES; +-UCHAR ExtRateIe = IE_EXT_SUPP_RATES; +-#ifdef DOT11_N_SUPPORT +-UCHAR HtCapIe = IE_HT_CAP; +-UCHAR AddHtInfoIe = IE_ADD_HT; +-UCHAR NewExtChanIe = IE_SECONDARY_CH_OFFSET; +-#ifdef DOT11N_DRAFT3 +-UCHAR ExtHtCapIe = IE_EXT_CAPABILITY; +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +-UCHAR ErpIe = IE_ERP; +-UCHAR DsIe = IE_DS_PARM; +-UCHAR TimIe = IE_TIM; +-UCHAR WpaIe = IE_WPA; +-UCHAR Wpa2Ie = IE_WPA2; +-UCHAR IbssIe = IE_IBSS_PARM; +-UCHAR Ccx2Ie = IE_CCX_V2; +-UCHAR WapiIe = IE_WAPI; +- +-extern UCHAR WPA_OUI[]; +- +-UCHAR SES_OUI[] = {0x00, 0x90, 0x4c}; +- +-UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +- +- +-/* +- ========================================================================== +- Description: +- initialize the MLME task and its data structure (queue, spinlock, +- timer, state machines). +- +- IRQL = PASSIVE_LEVEL +- +- Return: +- always return NDIS_STATUS_SUCCESS +- +- ========================================================================== +-*/ +-NDIS_STATUS MlmeInit( +- IN PRTMP_ADAPTER pAd) +-{ +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> MLME Initialize\n")); +- +- do +- { +- Status = MlmeQueueInit(&pAd->Mlme.Queue); +- if(Status != NDIS_STATUS_SUCCESS) +- break; +- +- pAd->Mlme.bRunning = FALSE; +- NdisAllocateSpinLock(&pAd->Mlme.TaskLock); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- BssTableInit(&pAd->ScanTab); +- +- // init STA state machines +- AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, pAd->Mlme.AssocFunc); +- AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, pAd->Mlme.AuthFunc); +- AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, pAd->Mlme.AuthRspFunc); +- SyncStateMachineInit(pAd, &pAd->Mlme.SyncMachine, pAd->Mlme.SyncFunc); +- +-#ifdef QOS_DLS_SUPPORT +- DlsStateMachineInit(pAd, &pAd->Mlme.DlsMachine, pAd->Mlme.DlsFunc); +-#endif // QOS_DLS_SUPPORT // +- +- +- +- // Since we are using switch/case to implement it, the init is different from the above +- // state machine init +- MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- WpaStateMachineInit(pAd, &pAd->Mlme.WpaMachine, pAd->Mlme.WpaFunc); +- +- +- ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, pAd->Mlme.ActFunc); +- +- // Init mlme periodic timer +- RTMPInitTimer(pAd, &pAd->Mlme.PeriodicTimer, GET_TIMER_FUNCTION(MlmePeriodicExec), pAd, TRUE); +- +- // Set mlme periodic timer +- RTMPSetTimer(&pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV); +- +- // software-based RX Antenna diversity +- RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, FALSE); +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- // only PCIe cards need these two timers +- RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, GET_TIMER_FUNCTION(PsPollWakeExec), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->Mlme.RadioOnOffTimer, GET_TIMER_FUNCTION(RadioOnExec), pAd, FALSE); +- } +-#endif // RTMP_PCI_SUPPORT // +- +- RTMPInitTimer(pAd, &pAd->Mlme.LinkDownTimer, GET_TIMER_FUNCTION(LinkDownExec), pAd, FALSE); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- } while (FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- MLME Initialize\n")); +- +- return Status; +-} +- +-/* +- ========================================================================== +- Description: +- main loop of the MLME +- Pre: +- Mlme has to be initialized, and there are something inside the queue +- Note: +- This function is invoked from MPSetInformation and MPReceive; +- This task guarantee only one MlmeHandler will run. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeHandler( +- IN PRTMP_ADAPTER pAd) +-{ +- MLME_QUEUE_ELEM *Elem = NULL; +-#ifdef APCLI_SUPPORT +- SHORT apcliIfIndex; +-#endif // APCLI_SUPPORT // +- +- // Only accept MLME and Frame from peer side, no other (control/data) frame should +- // get into this state machine +- +- NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- if(pAd->Mlme.bRunning) +- { +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +- return; +- } +- else +- { +- pAd->Mlme.bRunning = TRUE; +- } +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +- +- while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MLME_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Device Halted or Removed or MlmeRest, exit MlmeHandler! (queue num = %ld)\n", pAd->Mlme.Queue.Num)); +- break; +- } +- +-#ifdef RALINK_ATE +- if(ATE_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now in MlmeHandler\n")); +- break; +- } +-#endif // RALINK_ATE // +- +- //From message type, determine which state machine I should drive +- if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) +- { +- +- // if dequeue success +- switch (Elem->Machine) +- { +- // STA state machines +-#ifdef CONFIG_STA_SUPPORT +- case ASSOC_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem); +- break; +- case AUTH_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem); +- break; +- case AUTH_RSP_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem); +- break; +- case SYNC_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem); +- break; +- case MLME_CNTL_STATE_MACHINE: +- MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem); +- break; +- case WPA_PSK_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem); +- break; +- +-#ifdef QOS_DLS_SUPPORT +- case DLS_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.DlsMachine, Elem); +- break; +-#endif // QOS_DLS_SUPPORT // +- +-#endif // CONFIG_STA_SUPPORT // +- +- case ACTION_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.ActMachine, Elem); +- break; +- +- case WPA_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.WpaMachine, Elem); +- break; +- +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("ERROR: Illegal machine %ld in MlmeHandler()\n", Elem->Machine)); +- break; +- } // end of switch +- +- // free MLME element +- Elem->Occupied = FALSE; +- Elem->MsgLen = 0; +- +- } +- else { +- DBGPRINT_ERR(("MlmeHandler: MlmeQueue empty\n")); +- } +- } +- +- NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- pAd->Mlme.bRunning = FALSE; +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +-} +- +-/* +- ========================================================================== +- Description: +- Destructor of MLME (Destroy queue, state machine, spin lock and timer) +- Parameters: +- Adapter - NIC Adapter pointer +- Post: +- The MLME task will no longer work properly +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeHalt( +- IN PRTMP_ADAPTER pAd) +-{ +- BOOLEAN Cancelled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeHalt\n")); +- +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- // disable BEACON generation and other BEACON related hardware timers +- AsicDisableSync(pAd); +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef QOS_DLS_SUPPORT +- UCHAR i; +-#endif // QOS_DLS_SUPPORT // +- // Cancel pending timers +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- +- +-#ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- } +-#endif // RTMP_MAC_PCI // +- +-#ifdef QOS_DLS_SUPPORT +- for (i=0; iStaCfg.DLSEntry[i].Timer, &Cancelled); +- } +-#endif // QOS_DLS_SUPPORT // +- RTMPCancelTimer(&pAd->Mlme.LinkDownTimer, &Cancelled); +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled); +- +- +- +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- +- // Set LED +- RTMPSetLED(pAd, LED_HALT); +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. +- +- if (pChipOps->AsicHaltAction) +- pChipOps->AsicHaltAction(pAd); +- } +- +- RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled +- +- MlmeQueueDestroy(&pAd->Mlme.Queue); +- NdisFreeSpinLock(&pAd->Mlme.TaskLock); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeHalt\n")); +-} +- +-VOID MlmeResetRalinkCounters( +- IN PRTMP_ADAPTER pAd) +-{ +- pAd->RalinkCounters.LastOneSecRxOkDataCnt = pAd->RalinkCounters.OneSecRxOkDataCnt; +- // clear all OneSecxxx counters. +- pAd->RalinkCounters.OneSecBeaconSentCnt = 0; +- pAd->RalinkCounters.OneSecFalseCCACnt = 0; +- pAd->RalinkCounters.OneSecRxFcsErrCnt = 0; +- pAd->RalinkCounters.OneSecRxOkCnt = 0; +- pAd->RalinkCounters.OneSecTxFailCount = 0; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount = 0; +- pAd->RalinkCounters.OneSecTxRetryOkCount = 0; +- pAd->RalinkCounters.OneSecRxOkDataCnt = 0; +- pAd->RalinkCounters.OneSecReceivedByteCount = 0; +- pAd->RalinkCounters.OneSecTransmittedByteCount = 0; +- +- // TODO: for debug only. to be removed +- pAd->RalinkCounters.OneSecOsTxCount[QID_AC_BE] = 0; +- pAd->RalinkCounters.OneSecOsTxCount[QID_AC_BK] = 0; +- pAd->RalinkCounters.OneSecOsTxCount[QID_AC_VI] = 0; +- pAd->RalinkCounters.OneSecOsTxCount[QID_AC_VO] = 0; +- pAd->RalinkCounters.OneSecDmaDoneCount[QID_AC_BE] = 0; +- pAd->RalinkCounters.OneSecDmaDoneCount[QID_AC_BK] = 0; +- pAd->RalinkCounters.OneSecDmaDoneCount[QID_AC_VI] = 0; +- pAd->RalinkCounters.OneSecDmaDoneCount[QID_AC_VO] = 0; +- pAd->RalinkCounters.OneSecTxDoneCount = 0; +- pAd->RalinkCounters.OneSecRxCount = 0; +- pAd->RalinkCounters.OneSecTxAggregationCount = 0; +- pAd->RalinkCounters.OneSecRxAggregationCount = 0; +- +- return; +-} +- +- +-/* +- ========================================================================== +- Description: +- This routine is executed periodically to - +- 1. Decide if it's a right time to turn on PwrMgmt bit of all +- outgoiing frames +- 2. Calculate ChannelQuality based on statistics of the last +- period, so that TX rate won't toggling very frequently between a +- successful TX and a failed TX. +- 3. If the calculated ChannelQuality indicated current connection not +- healthy, then a ROAMing attempt is tried here. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-#define ADHOC_BEACON_LOST_TIME (8*OS_HZ) // 8 sec +-VOID MlmePeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- ULONG TxTotalCnt; +- PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext; +- SHORT realavgrssi; +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef RTMP_MAC_PCI +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. +- // Move code to here, because following code will return when radio is off +- if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == 0) && (pAd->StaCfg.bHardwareRadio == TRUE) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- /*&&(pAd->bPCIclkOff == FALSE)*/) +- { +- UINT32 data = 0; +- +- // Read GPIO pin2 as Hardware controlled radio state +-#ifndef RT3090 +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); +-#endif // RT3090 // +-//KH(PCIE PS):Added based on Jane<-- +-#ifdef RT3090 +-// Read GPIO pin2 as Hardware controlled radio state +-// We need to Read GPIO if HW said so no mater what advance power saving +-if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) +- && (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) +- && (pAd->StaCfg.PSControl.field.EnablePSinIdle == TRUE)) +- { +- // Want to make sure device goes to L0 state before reading register. +- RTMPPCIeLinkCtrlValueRestore(pAd, 0); +- RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); +- RTMPPCIeLinkCtrlSetting(pAd, 3); +- } +-else +- RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); +-#endif // RT3090 // +-//KH(PCIE PS):Added based on Jane--> +- +- if (data & 0x04) +- { +- pAd->StaCfg.bHwRadio = TRUE; +- } +- else +- { +- pAd->StaCfg.bHwRadio = FALSE; +- } +- if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == TRUE) +- { +- MlmeRadioOn(pAd); +- // Update extra information +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- else +- { +- MlmeRadioOff(pAd); +- // Update extra information +- pAd->ExtraInfo = HW_RADIO_OFF; +- } +- } +- } +- } +-#endif // RTMP_MAC_PCI // +-#endif // CONFIG_STA_SUPPORT // +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RADIO_MEASUREMENT | +- fRTMP_ADAPTER_RESET_IN_PROGRESS)))) +- return; +- +- RTMP_MLME_PRE_SANITY_CHECK(pAd); +- +-#ifdef RALINK_ATE +- /* Do not show RSSI until "Normal 1 second Mlme PeriodicExec". */ +- if (ATE_ON(pAd)) +- { +- if (pAd->Mlme.PeriodicRound % MLME_TASK_EXEC_MULTIPLE != (MLME_TASK_EXEC_MULTIPLE - 1)) +- { +- pAd->Mlme.PeriodicRound ++; +- return; +- } +- } +-#endif // RALINK_ATE // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Do nothing if monitor mode is on +- if (MONITOR_ON(pAd)) +- return; +- +- if (pAd->Mlme.PeriodicRound & 0x1) +- { +- // This is the fix for wifi 11n extension channel overlapping test case. for 2860D +- if (((pAd->MACVersion & 0xffff) == 0x0101) && +- (STA_TGN_WIFI_ON(pAd)) && +- (pAd->CommonCfg.IOTestParm.bToggle == FALSE)) +- +- { +- RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x24Bf); +- pAd->CommonCfg.IOTestParm.bToggle = TRUE; +- } +- else if ((STA_TGN_WIFI_ON(pAd)) && +- ((pAd->MACVersion & 0xffff) == 0x0101)) +- { +- RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x243f); +- pAd->CommonCfg.IOTestParm.bToggle = FALSE; +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- pAd->bUpdateBcnCntDone = FALSE; +- +-// RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); +- pAd->Mlme.PeriodicRound ++; +- +- +- // execute every 500ms +- if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd)/*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))*/) +- { +-#ifdef CONFIG_STA_SUPPORT +- // perform dynamic tx rate switching based on past TX history +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))) +- MlmeDynamicTxRateSwitching(pAd); +- } +-#endif // CONFIG_STA_SUPPORT // +- } +- +- // Normal 1 second Mlme PeriodicExec. +- if (pAd->Mlme.PeriodicRound %MLME_TASK_EXEC_MULTIPLE == 0) +- { +- pAd->Mlme.OneSecPeriodicRound ++; +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- /* request from Baron : move this routine from later to here */ +- /* for showing Rx error count in ATE RXFRAME */ +- NICUpdateRawCounters(pAd); +- if (pAd->ate.bRxFER == 1) +- { +- pAd->ate.RxTotalCnt += pAd->ate.RxCntPerSec; +- ate_print(KERN_EMERG "MlmePeriodicExec: Rx packet cnt = %d/%d\n", pAd->ate.RxCntPerSec, pAd->ate.RxTotalCnt); +- pAd->ate.RxCntPerSec = 0; +- +- if (pAd->ate.RxAntennaSel == 0) +- ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi0=%d, AvgRssi1=%d, AvgRssi2=%d\n\n", +- pAd->ate.AvgRssi0, pAd->ate.AvgRssi1, pAd->ate.AvgRssi2); +- else +- ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi=%d\n\n", pAd->ate.AvgRssi0); +- } +- MlmeResetRalinkCounters(pAd); +- +- +- +- return; +- } +-#endif // RALINK_ATE // +- +- +- +- //ORIBATimerTimeout(pAd); +- +- // Media status changed, report to NDIS +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) +- { +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- pAd->IndicateMediaState = NdisMediaStateConnected; +- RTMP_IndicateMediaState(pAd); +- } +- else +- { +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- } +- } +- +- NdisGetSystemUpTime(&pAd->Mlme.Now32); +- +- // add the most up-to-date h/w raw counters into software variable, so that +- // the dynamic tuning mechanism below are based on most up-to-date information +- NICUpdateRawCounters(pAd); +- +- +-#ifdef DOT11_N_SUPPORT +- // Need statistics after read counter. So put after NICUpdateRawCounters +- ORIBATimerTimeout(pAd); +-#endif // DOT11_N_SUPPORT // +- +- // if MGMT RING is full more than twice within 1 second, we consider there's +- // a hardware problem stucking the TX path. In this case, try a hardware reset +- // to recover the system +- // if (pAd->RalinkCounters.MgmtRingFullCount >= 2) +- // RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); +- // else +- // pAd->RalinkCounters.MgmtRingFullCount = 0; +- +- // The time period for checking antenna is according to traffic +-#ifdef ANT_DIVERSITY_SUPPORT +- if ((pAd->NicConfig2.field.AntDiversity) && +- (pAd->CommonCfg.bRxAntDiversity == ANT_DIVERSITY_ENABLE) && +- (!pAd->EepromAccess)) +- AsicAntennaSelect(pAd, pAd->MlmeAux.Channel); +- else if(pAd->CommonCfg.bRxAntDiversity == ANT_FIX_ANT1 || pAd->CommonCfg.bRxAntDiversity == ANT_FIX_ANT2) +- { +-#ifdef CONFIG_STA_SUPPORT +- realavgrssi = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt] >> 3); +-#endif // CONFIG_STA_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE,("Ant-realrssi0(%d), Lastrssi0(%d), EvaluateStableCnt=%d\n", realavgrssi, pAd->RxAnt.Pair1LastAvgRssi, pAd->RxAnt.EvaluateStableCnt)); +- } +- else +-#endif // ANT_DIVERSITY_SUPPORT // +- { +- if (pAd->Mlme.bEnableAutoAntennaCheck) +- { +- TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- // dynamic adjust antenna evaluation period according to the traffic +- if (TxTotalCnt > 50) +- { +- if (pAd->Mlme.OneSecPeriodicRound % 10 == 0) +- { +- AsicEvaluateRxAnt(pAd); +- } +- } +- else +- { +- if (pAd->Mlme.OneSecPeriodicRound % 3 == 0) +- { +- AsicEvaluateRxAnt(pAd); +- } +- } +- } +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- STAMlmePeriodicExec(pAd); +-#endif // CONFIG_STA_SUPPORT // +- +- MlmeResetRalinkCounters(pAd); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef RTMP_MAC_PCI +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->bPCIclkOff == FALSE)) +-#endif // RTMP_MAC_PCI // +- { +- // When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock +- // and sending CTS-to-self over and over. +- // Software Patch Solution: +- // 1. Polling debug state register 0x10F4 every one second. +- // 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred. +- // 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again. +- +- UINT32 MacReg = 0; +- +- RTMP_IO_READ32(pAd, 0x10F4, &MacReg); +- if (((MacReg & 0x20000000) && (MacReg & 0x80)) || ((MacReg & 0x20000000) && (MacReg & 0x20))) +- { +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); +- RTMPusecDelay(1); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xC); +- +- DBGPRINT(RT_DEBUG_WARN,("Warning, MAC specific condition occurs \n")); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- RTMP_MLME_HANDLER(pAd); +- } +- +- +- pAd->bUpdateBcnCntDone = FALSE; +-} +- +- +-/* +- ========================================================================== +- Validate SSID for connection try and rescan purpose +- Valid SSID will have visible chars only. +- The valid length is from 0 to 32. +- IRQL = DISPATCH_LEVEL +- ========================================================================== +- */ +-BOOLEAN MlmeValidateSSID( +- IN PUCHAR pSsid, +- IN UCHAR SsidLen) +-{ +- int index; +- +- if (SsidLen > MAX_LEN_OF_SSID) +- return (FALSE); +- +- // Check each character value +- for (index = 0; index < SsidLen; index++) +- { +- if (pSsid[index] < 0x20) +- return (FALSE); +- } +- +- // All checked +- return (TRUE); +-} +- +-VOID MlmeSelectTxRateTable( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR *ppTable, +- IN PUCHAR pTableSize, +- IN PUCHAR pInitTxRateIdx) +-{ +- do +- { +- // decide the rate table for tuning +- if (pAd->CommonCfg.TxRateTableSize > 0) +- { +- *ppTable = RateSwitchTable; +- *pTableSize = RateSwitchTable[0]; +- *pInitTxRateIdx = RateSwitchTable[1]; +- +- break; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd)) +- { +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +- (pEntry->HTCapability.MCSSet[0] == 0xff) && +- ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- {// 11N 1S Adhoc +- *ppTable = RateSwitchTable11N1S; +- *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- +- } +- else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +- (pEntry->HTCapability.MCSSet[0] == 0xff) && +- (pEntry->HTCapability.MCSSet[1] == 0xff) && +- (pAd->Antenna.field.TxPath == 2)) +- {// 11N 2S Adhoc +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- *ppTable = RateSwitchTable11N2S; +- *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } +- else +- { +- *ppTable = RateSwitchTable11N2SForABand; +- *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- } +- +- } +- else +-#endif // DOT11_N_SUPPORT // +- if ((pEntry->RateLen == 4) +-#ifdef DOT11_N_SUPPORT +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- *ppTable = RateSwitchTable11B; +- *pTableSize = RateSwitchTable11B[0]; +- *pInitTxRateIdx = RateSwitchTable11B[1]; +- +- } +- else if (pAd->LatchRfRegs.Channel <= 14) +- { +- *ppTable = RateSwitchTable11BG; +- *pTableSize = RateSwitchTable11BG[0]; +- *pInitTxRateIdx = RateSwitchTable11BG[1]; +- +- } +- else +- { +- *ppTable = RateSwitchTable11G; +- *pTableSize = RateSwitchTable11G[0]; +- *pInitTxRateIdx = RateSwitchTable11G[1]; +- +- } +- break; +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +- //if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && +- ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) +- {// 11BGN 1S AP +- *ppTable = RateSwitchTable11BGN1S; +- *pTableSize = RateSwitchTable11BGN1S[0]; +- *pInitTxRateIdx = RateSwitchTable11BGN1S[1]; +- +- break; +- } +- +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && +- (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) +- {// 11BGN 2S AP +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- *ppTable = RateSwitchTable11BGN2S; +- *pTableSize = RateSwitchTable11BGN2S[0]; +- *pInitTxRateIdx = RateSwitchTable11BGN2S[1]; +- +- } +- else +- { +- *ppTable = RateSwitchTable11BGN2SForABand; +- *pTableSize = RateSwitchTable11BGN2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11BGN2SForABand[1]; +- +- } +- break; +- } +- +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) +- {// 11N 1S AP +- *ppTable = RateSwitchTable11N1S; +- *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- +- break; +- } +- +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) +- {// 11N 2S AP +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- *ppTable = RateSwitchTable11N2S; +- *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } +- else +- { +- *ppTable = RateSwitchTable11N2SForABand; +- *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- } +- +- break; +- } +-#endif // DOT11_N_SUPPORT // +- //else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->RateLen == 4 || pAd->CommonCfg.PhyMode==PHY_11B) +-#ifdef DOT11_N_SUPPORT +- //Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode +- /* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)*/ +-#endif // DOT11_N_SUPPORT // +- ) +- {// B only AP +- *ppTable = RateSwitchTable11B; +- *pTableSize = RateSwitchTable11B[0]; +- *pInitTxRateIdx = RateSwitchTable11B[1]; +- +- break; +- } +- +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->RateLen > 8) +-#ifdef DOT11_N_SUPPORT +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +-#endif // DOT11_N_SUPPORT // +- ) +- {// B/G mixed AP +- *ppTable = RateSwitchTable11BG; +- *pTableSize = RateSwitchTable11BG[0]; +- *pInitTxRateIdx = RateSwitchTable11BG[1]; +- +- break; +- } +- +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->RateLen == 8) +-#ifdef DOT11_N_SUPPORT +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +-#endif // DOT11_N_SUPPORT // +- ) +- {// G only AP +- *ppTable = RateSwitchTable11G; +- *pTableSize = RateSwitchTable11G[0]; +- *pInitTxRateIdx = RateSwitchTable11G[1]; +- +- break; +- } +-#ifdef DOT11_N_SUPPORT +-#endif // DOT11_N_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef DOT11_N_SUPPORT +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)) +-#endif // DOT11_N_SUPPORT // +- { // Legacy mode +- if (pAd->CommonCfg.MaxTxRate <= RATE_11) +- { +- *ppTable = RateSwitchTable11B; +- *pTableSize = RateSwitchTable11B[0]; +- *pInitTxRateIdx = RateSwitchTable11B[1]; +- } +- else if ((pAd->CommonCfg.MaxTxRate > RATE_11) && (pAd->CommonCfg.MinTxRate > RATE_11)) +- { +- *ppTable = RateSwitchTable11G; +- *pTableSize = RateSwitchTable11G[0]; +- *pInitTxRateIdx = RateSwitchTable11G[1]; +- +- } +- else +- { +- *ppTable = RateSwitchTable11BG; +- *pTableSize = RateSwitchTable11BG[0]; +- *pInitTxRateIdx = RateSwitchTable11BG[1]; +- } +- break; +- } +-#ifdef DOT11_N_SUPPORT +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- if (pAd->CommonCfg.TxStream == 1) +- { +- *ppTable = RateSwitchTable11N1S; +- *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 1S AP \n")); +- } +- else +- { +- *ppTable = RateSwitchTable11N2S; +- *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n")); +- } +- } +- else +- { +- if (pAd->CommonCfg.TxStream == 1) +- { +- *ppTable = RateSwitchTable11N1S; +- *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 1S AP \n")); +- } +- else +- { +- *ppTable = RateSwitchTable11N2SForABand; +- *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n")); +- } +- } +-#endif // DOT11_N_SUPPORT // +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode (SupRateLen=%d, ExtRateLen=%d, MCSSet[0]=0x%x, MCSSet[1]=0x%x)\n", +- pAd->StaActive.SupRateLen, pAd->StaActive.ExtRateLen, pAd->StaActive.SupportedPhyInfo.MCSSet[0], pAd->StaActive.SupportedPhyInfo.MCSSet[1])); +- } +-#endif // CONFIG_STA_SUPPORT // +- } while(FALSE); +-} +- +- +-#ifdef CONFIG_STA_SUPPORT +-VOID STAMlmePeriodicExec( +- PRTMP_ADAPTER pAd) +-{ +- ULONG TxTotalCnt; +- int i; +- +- +- +- +- /* +- We return here in ATE mode, because the statistics +- that ATE need are not collected via this routine. +- */ +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +-#ifdef RALINK_ATE +- // It is supposed that we will never reach here in ATE mode. +- ASSERT(!(ATE_ON(pAd))); +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +-#ifdef PCIE_PS_SUPPORT +-// don't perform idle-power-save mechanism within 3 min after driver initialization. +-// This can make rebooter test more robust +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) +- && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) +- && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); +- +- RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x2); +- // Wait command success +- AsicCheckCommanOk(pAd, PowerSafeCID); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt30xx Issue Sleep command)\n")); +- } +- } +- else if (pAd->Mlme.OneSecPeriodicRound > 180) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); +- RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x02); +- // Wait command success +- AsicCheckCommanOk(pAd, PowerSafeCID); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt28xx Issue Sleep command)\n")); +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("STAMlmePeriodicExec MMCHK - CommonCfg.Ssid[%d]=%c%c%c%c... MlmeAux.Ssid[%d]=%c%c%c%c...\n", +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid[0], pAd->CommonCfg.Ssid[1], pAd->CommonCfg.Ssid[2], pAd->CommonCfg.Ssid[3], +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid[0], pAd->MlmeAux.Ssid[1], pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3])); +- } +- } +-#endif // PCIE_PS_SUPPORT // +- +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- // WPA MIC error should block association attempt for 60 seconds +- if (pAd->StaCfg.bBlockAssoc && +- RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastMicErrorTime + (60*OS_HZ))) +- pAd->StaCfg.bBlockAssoc = FALSE; +- } +- +- if ((pAd->PreMediaState != pAd->IndicateMediaState) && (pAd->CommonCfg.bWirelessEvent)) +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- pAd->PreMediaState = pAd->IndicateMediaState; +- } +- +- +- +- +- if (pAd->CommonCfg.PSPXlink && ADHOC_ON(pAd)) +- { +- } +- else +- { +- AsicStaBbpTuning(pAd); +- } +- +- TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- // update channel quality for Roaming and UI LinkQuality display +- MlmeCalculateChannelQuality(pAd, NULL, pAd->Mlme.Now32); +- } +- +- // must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if +- // Radio is currently in noisy environment +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- AsicAdjustTxPower(pAd); +- +- if (INFRA_ON(pAd)) +- { +-#ifdef QOS_DLS_SUPPORT +- // Check DLS time out, then tear down those session +- RTMPCheckDLSTimeOut(pAd); +-#endif // QOS_DLS_SUPPORT // +- +- // Is PSM bit consistent with user power management policy? +- // This is the only place that will set PSM bit ON. +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); +- +- pAd->RalinkCounters.LastOneSecTotalTxCount = TxTotalCnt; +- +- if ((RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + (1*OS_HZ))) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- (((TxTotalCnt + pAd->RalinkCounters.OneSecRxOkCnt) < 600))) +- { +- RTMPSetAGCInitValue(pAd, BW_20); +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", (0x2E + GET_LNA_GAIN(pAd)))); +- } +- +- //if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && +- // (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) +- { +- // When APSD is enabled, the period changes as 20 sec +- if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } +- else +- { +- // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) +- if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) +- { +- if (pAd->CommonCfg.bWmmCapable) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- else +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +- } +- } +- } +- +- if (CQI_IS_DEAD(pAd->Mlme.ChannelQuality)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); +- +- // Lost AP, send disconnect & link down event +- LinkDown(pAd, FALSE); +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- //send disassociate event to wpa_supplicant +- if (pAd->StaCfg.WpaSupplicantUP) { +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +- // RTMPPatchMacBbpBug(pAd); +- MlmeAutoReconnectLastSSID(pAd); +- } +- else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) +- { +- pAd->RalinkCounters.BadCQIAutoRecoveryCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Bad CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); +- MlmeAutoReconnectLastSSID(pAd); +- } +- +- if (pAd->StaCfg.bAutoRoaming) +- { +- BOOLEAN rv = FALSE; +- CHAR dBmToRoam = pAd->StaCfg.dBmToRoam; +- CHAR MaxRssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.LastRssi0, +- pAd->StaCfg.RssiSample.LastRssi1, +- pAd->StaCfg.RssiSample.LastRssi2); +- +- // Scanning, ignore Roaming +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) && +- (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) && +- (MaxRssi <= dBmToRoam)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, (CHAR)dBmToRoam)); +- +- +- // Add auto seamless roaming +- if (rv == FALSE) +- rv = MlmeCheckForFastRoaming(pAd); +- +- if (rv == FALSE) +- { +- if ((pAd->StaCfg.LastScanTime + 10 * OS_HZ) < pAd->Mlme.Now32) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming, No eligable entry, try new scan!\n")); +- pAd->StaCfg.ScanCnt = 2; +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- MlmeAutoScan(pAd); +- } +- } +- } +- } +- } +- else if (ADHOC_ON(pAd)) +- { +- +- // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState +- // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can +- // join later. +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- MLME_START_REQ_STRUCT StartReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); +- LinkDown(pAd, FALSE); +- +- StartParmFill(pAd, &StartReq, (CHAR *)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } +- +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i]; +- +- if (pEntry->ValidAsCLI == FALSE) +- continue; +- +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME)) +- MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); +- } +- } +- else // no INFRA nor ADHOC connection +- { +- +- if (pAd->StaCfg.bScanReqIsFromWebUI && +- RTMP_TIME_BEFORE(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (30 * OS_HZ))) +- goto SKIP_AUTO_SCAN_CONN; +- else +- pAd->StaCfg.bScanReqIsFromWebUI = FALSE; +- +- if ((pAd->StaCfg.bAutoReconnect == TRUE) +- && RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP) +- && (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { +- if ((pAd->ScanTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (10 * OS_HZ))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("STAMlmePeriodicExec():CNTL - ScanTab.BssNr==0, start a new ACTIVE scan SSID[%s]\n", pAd->MlmeAux.AutoReconnectSsid)); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room +- MlmeAutoReconnectLastSSID(pAd); +- } +- else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) +- { +- MlmeAutoScan(pAd); +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else +- { +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE) +- { +- if ((pAd->Mlme.OneSecPeriodicRound % 5) == 1) +- MlmeAutoReconnectLastSSID(pAd); +- } +- else +-#endif // CARRIER_DETECTION_SUPPORT // +- MlmeAutoReconnectLastSSID(pAd); +- } +- } +- } +- } +- +-SKIP_AUTO_SCAN_CONN: +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE)) +- { +- pAd->MacTab.fAnyBASession = TRUE; +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, FALSE, FALSE); +- } +- else if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap ==0) && (pAd->MacTab.fAnyBASession == TRUE)) +- { +- pAd->MacTab.fAnyBASession = FALSE; +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); +- } +-#endif // DOT11_N_SUPPORT // +- +- +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SCAN_2040)) +- TriEventCounterMaintenance(pAd); +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +- return; +-} +- +-// Link down report +-VOID LinkDownExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- if (pAd != NULL) +- { +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- +- if ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) && +- (INFRA_ON(pAd))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("LinkDownExec(): disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- } +- } +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeAutoScan( +- IN PRTMP_ADAPTER pAd) +-{ +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Driver auto scan\n")); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- pAd->MlmeAux.AutoReconnectSsidLen, +- pAd->MlmeAux.AutoReconnectSsid); +- RTMP_MLME_HANDLER(pAd); +- } +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeAutoReconnectLastSSID( +- IN PRTMP_ADAPTER pAd) +-{ +- if (pAd->StaCfg.bAutoConnectByBssid) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_BSSID setting - %02X:%02X:%02X:%02X:%02X:%02X\n", +- pAd->MlmeAux.Bssid[0], +- pAd->MlmeAux.Bssid[1], +- pAd->MlmeAux.Bssid[2], +- pAd->MlmeAux.Bssid[3], +- pAd->MlmeAux.Bssid[4], +- pAd->MlmeAux.Bssid[5])); +- +- pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID, +- MAC_ADDR_LEN, +- pAd->MlmeAux.Bssid); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- RTMP_MLME_HANDLER(pAd); +- } +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- else if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && +- (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { +- NDIS_802_11_SSID OidSsid; +- OidSsid.SsidLength = pAd->MlmeAux.AutoReconnectSsidLen; +- NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_SSID setting - %s, len - %d\n", pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen)); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), +- &OidSsid); +- RTMP_MLME_HANDLER(pAd); +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- This routine checks if there're other APs out there capable for +- roaming. Caller should call this routine only when Link up in INFRA mode +- and channel quality is below CQI_GOOD_THRESHOLD. +- +- IRQL = DISPATCH_LEVEL +- +- Output: +- ========================================================================== +- */ +-VOID MlmeCheckForRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32) +-{ +- USHORT i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForRoaming\n")); +- // put all roaming candidates into RoamTab, and sort in RSSI order +- BssTableInit(pRoamTab); +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { +- pBss = &pAd->ScanTab.BssEntry[i]; +- +- if ((pBss->LastBeaconRxTime + pAd->StaCfg.BeaconLostTime) < Now32) +- continue; // AP disappear +- if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING) +- continue; // RSSI too weak. forget it. +- if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP +- if (pBss->Rssi < (pAd->StaCfg.RssiSample.LastRssi0 + RSSI_DELTA)) +- continue; // only AP with stronger RSSI is eligible for roaming +- +- // AP passing all above rules is put into roaming candidate table +- NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY)); +- pRoamTab->BssNr += 1; +- } +- +- if (pRoamTab->BssNr > 0) +- { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- pAd->RalinkCounters.PoorCQIRoamingCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForRoaming(# of candidate= %d)\n",pRoamTab->BssNr)); +-} +- +-/* +- ========================================================================== +- Description: +- This routine checks if there're other APs out there capable for +- roaming. Caller should call this routine only when link up in INFRA mode +- and channel quality is below CQI_GOOD_THRESHOLD. +- +- IRQL = DISPATCH_LEVEL +- +- Output: +- ========================================================================== +- */ +-BOOLEAN MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd) +-{ +- USHORT i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForFastRoaming\n")); +- // put all roaming candidates into RoamTab, and sort in RSSI order +- BssTableInit(pRoamTab); +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { +- pBss = &pAd->ScanTab.BssEntry[i]; +- +- if ((pBss->Rssi <= -50) && (pBss->Channel == pAd->CommonCfg.Channel)) +- continue; // RSSI too weak. forget it. +- if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP +- if (!SSID_EQUAL(pBss->Ssid, pBss->SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)) +- continue; // skip different SSID +- if (pBss->Rssi < (RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2) + RSSI_DELTA)) +- continue; // skip AP without better RSSI +- +- DBGPRINT(RT_DEBUG_TRACE, ("LastRssi0 = %d, pBss->Rssi = %d\n", RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2), pBss->Rssi)); +- // AP passing all above rules is put into roaming candidate table +- NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY)); +- pRoamTab->BssNr += 1; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); +- if (pRoamTab->BssNr > 0) +- { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- pAd->RalinkCounters.PoorCQIRoamingCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +- return TRUE; +- } +- } +- +- return FALSE; +-} +- +-VOID MlmeSetTxRate( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PRTMP_TX_RATE_SWITCH pTxRate) +-{ +- UCHAR MaxMode = MODE_OFDM; +- +-#ifdef DOT11_N_SUPPORT +- MaxMode = MODE_HTGREENFIELD; +- +- if (pTxRate->STBC && (pAd->StaCfg.MaxHTPhyMode.field.STBC) && (pAd->Antenna.field.TxPath == 2)) +- pAd->StaCfg.HTPhyMode.field.STBC = STBC_USE; +- else +-#endif // DOT11_N_SUPPORT // +- pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; +- +- if (pTxRate->CurrMCS < MCS_AUTO) +- pAd->StaCfg.HTPhyMode.field.MCS = pTxRate->CurrMCS; +- +- if (pAd->StaCfg.HTPhyMode.field.MCS > 7) +- pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; +- +- if (ADHOC_ON(pAd)) +- { +- // If peer adhoc is b-only mode, we can't send 11g rate. +- pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- pEntry->HTPhyMode.field.STBC = STBC_NONE; +- +- // +- // For Adhoc MODE_CCK, driver will use AdhocBOnlyJoined flag to roll back to B only if necessary +- // +- pEntry->HTPhyMode.field.MODE = pTxRate->Mode; +- pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- +- // Patch speed error in status page +- pAd->StaCfg.HTPhyMode.field.MODE = pEntry->HTPhyMode.field.MODE; +- } +- else +- { +- if (pTxRate->Mode <= MaxMode) +- pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode; +- +-#ifdef DOT11_N_SUPPORT +- if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI)) +- pAd->StaCfg.HTPhyMode.field.ShortGI = GI_400; +- else +-#endif // DOT11_N_SUPPORT // +- pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- +-#ifdef DOT11_N_SUPPORT +- // Reexam each bandwidth's SGI support. +- if (pAd->StaCfg.HTPhyMode.field.ShortGI == GI_400) +- { +- if ((pEntry->HTPhyMode.field.BW == BW_20) && (!CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE))) +- pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- if ((pEntry->HTPhyMode.field.BW == BW_40) && (!CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE))) +- pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- } +- +- // Turn RTS/CTS rate to 6Mbps. +- if ((pEntry->HTPhyMode.field.MCS == 0) && (pAd->StaCfg.HTPhyMode.field.MCS != 0)) +- { +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- if (pAd->MacTab.fAnyBASession) +- { +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- else +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- } +- else if ((pEntry->HTPhyMode.field.MCS == 8) && (pAd->StaCfg.HTPhyMode.field.MCS != 8)) +- { +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- if (pAd->MacTab.fAnyBASession) +- { +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- else +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- } +- else if ((pEntry->HTPhyMode.field.MCS != 0) && (pAd->StaCfg.HTPhyMode.field.MCS == 0)) +- { +- AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- +- } +- else if ((pEntry->HTPhyMode.field.MCS != 8) && (pAd->StaCfg.HTPhyMode.field.MCS == 8)) +- { +- AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +-#endif // DOT11_N_SUPPORT // +- +- pEntry->HTPhyMode.field.STBC = pAd->StaCfg.HTPhyMode.field.STBC; +- pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +-#ifdef DOT11_N_SUPPORT +- if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) && +- pAd->WIFItestbed.bGreenField) +- pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; +-#endif // DOT11_N_SUPPORT // +- } +- +- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); +-} +- +-/* +- ========================================================================== +- Description: +- This routine calculates the acumulated TxPER of eaxh TxRate. And +- according to the calculation result, change CommonCfg.TxRate which +- is the stable TX Rate we expect the Radio situation could sustained. +- +- CommonCfg.TxRate will change dynamically within {RATE_1/RATE_6, MaxTxRate} +- Output: +- CommonCfg.TxRate - +- +- IRQL = DISPATCH_LEVEL +- +- NOTE: +- call this routine every second +- ========================================================================== +- */ +-VOID MlmeDynamicTxRateSwitching( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; +- ULONG i, AccuTxTotalCnt = 0, TxTotalCnt; +- ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; +- CHAR Rssi, RssiOffset = 0; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT0_STRUC TxStaCnt0; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; +- RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- return; +- } +-#endif // RALINK_ATE // +- +- // +- // walk through MAC table, see if need to change AP's TX rate toward each entry +- // +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { +- pEntry = &pAd->MacTab.Content[i]; +- +- // check if this entry need to switch rate automatically +- if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) +- continue; +- +- if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls)) +- { +- Rssi = RTMPMaxRssi(pAd, +- pRssi->AvgRssi0, +- pRssi->AvgRssi1, +- pRssi->AvgRssi2); +- +- // Update statistic counter +- RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); +- pAd->bUpdateBcnCntDone = TRUE; +- TxRetransmit = StaTx1.field.TxRetransmit; +- TxSuccess = StaTx1.field.TxSuccess; +- TxFailCount = TxStaCnt0.field.TxFailCount; +- TxTotalCnt = TxRetransmit + TxSuccess + TxFailCount; +- +- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; +- +- // if no traffic in the past 1-sec period, don't change TX rate, +- // but clear all bad history. because the bad history may affect the next +- // Chariot throughput test +- AccuTxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- if (TxTotalCnt) +- TxErrorRatio = ((TxRetransmit + TxFailCount) * 100) / TxTotalCnt; +- } +- else +- { +- if (INFRA_ON(pAd) && (i == 1)) +- Rssi = RTMPMaxRssi(pAd, +- pRssi->AvgRssi0, +- pRssi->AvgRssi1, +- pRssi->AvgRssi2); +- else +- Rssi = RTMPMaxRssi(pAd, +- pEntry->RssiSample.AvgRssi0, +- pEntry->RssiSample.AvgRssi1, +- pEntry->RssiSample.AvgRssi2); +- +- TxTotalCnt = pEntry->OneSecTxNoRetryOkCount + +- pEntry->OneSecTxRetryOkCount + +- pEntry->OneSecTxFailCount; +- +- if (TxTotalCnt) +- TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt; +- } +- +- if (TxTotalCnt) +- { +- /* +- Three AdHoc connections can not work normally if one AdHoc connection is disappeared from a heavy traffic environment generated by ping tool +- We force to set LongRtyLimit and ShortRtyLimit to 0 to stop retransmitting packet, after a while, resoring original settings +- */ +- if (TxErrorRatio == 100) +- { +- TX_RTY_CFG_STRUC TxRtyCfg,TxRtyCfgtmp; +- ULONG Index; +- ULONG MACValue; +- +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); +- TxRtyCfgtmp.word = TxRtyCfg.word; +- TxRtyCfg.field.LongRtyLimit = 0x0; +- TxRtyCfg.field.ShortRtyLimit = 0x0; +- RTMP_IO_WRITE32(pAd, TX_RTY_CFG, TxRtyCfg.word); +- +- RTMPusecDelay(1); +- +- Index = 0; +- MACValue = 0; +- do +- { +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- if ((MACValue & 0xffffff) == 0) +- break; +- Index++; +- RTMPusecDelay(1000); +- }while((Index < 330)&&(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))); +- +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); +- TxRtyCfg.field.LongRtyLimit = TxRtyCfgtmp.field.LongRtyLimit; +- TxRtyCfg.field.ShortRtyLimit = TxRtyCfgtmp.field.ShortRtyLimit; +- RTMP_IO_WRITE32(pAd, TX_RTY_CFG, TxRtyCfg.word); +- } +- } +- +- CurrRateIdx = pEntry->CurrTxRateIndex; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &InitTxRateIdx); +- +- if (CurrRateIdx >= TableSize) +- { +- CurrRateIdx = TableSize - 1; +- } +- +- // When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex. +- // So need to sync here. +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; +- if ((pEntry->HTPhyMode.field.MCS != pCurrTxRate->CurrMCS) +- //&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- ) +- { +- +- // Need to sync Real Tx rate and our record. +- // Then return for next DRS. +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(InitTxRateIdx+1)*5]; +- pEntry->CurrTxRateIndex = InitTxRateIdx; +- MlmeSetTxRate(pAd, pEntry, pCurrTxRate); +- +- // reset all OneSecTx counters +- RESET_ONE_SEC_TX_CNT(pEntry); +- continue; +- } +- +- // decide the next upgrade rate and downgrade rate, if any +- if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) +- { +- UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx -1; +- } +- else if (CurrRateIdx == 0) +- { +- UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx; +- } +- else if (CurrRateIdx == (TableSize - 1)) +- { +- UpRateIdx = CurrRateIdx; +- DownRateIdx = CurrRateIdx - 1; +- } +- +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; +- +-#ifdef DOT11_N_SUPPORT +- if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) +- { +- TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1)); +- TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1)); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- TrainUp = pCurrTxRate->TrainUp; +- TrainDown = pCurrTxRate->TrainDown; +- } +- +- //pAd->DrsCounters.LastTimeTxRateChangeAction = pAd->DrsCounters.LastSecTxRateChangeAction; +- +- // +- // Keep the last time TxRateChangeAction status. +- // +- pEntry->LastTimeTxRateChangeAction = pEntry->LastSecTxRateChangeAction; +- +- +- +- // +- // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI +- // (criteria copied from RT2500 for Netopia case) +- // +- if (TxTotalCnt <= 15) +- { +- CHAR idx = 0; +- UCHAR TxRateIdx; +- UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = 0, MCS5 =0, MCS6 = 0, MCS7 = 0; +- UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; +- UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; // 3*3 +- +- // check the existence and index of each needed MCS +- while (idx < pTable[0]) +- { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(idx+1)*5]; +- +- if (pCurrTxRate->CurrMCS == MCS_0) +- { +- MCS0 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_1) +- { +- MCS1 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_2) +- { +- MCS2 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_3) +- { +- MCS3 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_4) +- { +- MCS4 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_5) +- { +- MCS5 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_6) +- { +- MCS6 = idx; +- } +- //else if (pCurrTxRate->CurrMCS == MCS_7) +- else if ((pCurrTxRate->CurrMCS == MCS_7) && (pCurrTxRate->ShortGI == GI_800)) // prevent the highest MCS using short GI when 1T and low throughput +- { +- MCS7 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_12) +- { +- MCS12 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_13) +- { +- MCS13 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_14) +- { +- MCS14 = idx; +- } +- //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate +- else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) //we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI +- { +- MCS15 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_20) // 3*3 +- { +- MCS20 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_21) +- { +- MCS21 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_22) +- { +- MCS22 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_23) +- { +- MCS23 = idx; +- } +- idx ++; +- } +- +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { +- RssiOffset = 2; +- } +- else +- { +- RssiOffset = 5; +- } +- } +- else +- { +- if (pAd->NicConfig2.field.ExternalLNAForA) +- { +- RssiOffset = 5; +- } +- else +- { +- RssiOffset = 8; +- } +- } +-#ifdef DOT11_N_SUPPORT +- /*if (MCS15)*/ +- if ((pTable == RateSwitchTable11BGN3S) || +- (pTable == RateSwitchTable11N3S) || +- (pTable == RateSwitchTable)) +- {// N mode with 3 stream // 3*3 +- if (MCS23 && (Rssi >= -70)) +- TxRateIdx = MCS23; +- else if (MCS22 && (Rssi >= -72)) +- TxRateIdx = MCS22; +- else if (MCS21 && (Rssi >= -76)) +- TxRateIdx = MCS21; +- else if (MCS20 && (Rssi >= -78)) +- TxRateIdx = MCS20; +- else if (MCS4 && (Rssi >= -82)) +- TxRateIdx = MCS4; +- else if (MCS3 && (Rssi >= -84)) +- TxRateIdx = MCS3; +- else if (MCS2 && (Rssi >= -86)) +- TxRateIdx = MCS2; +- else if (MCS1 && (Rssi >= -88)) +- TxRateIdx = MCS1; +- else +- TxRateIdx = MCS0; +- } +-// else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) +- else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand)) // 3*3 +- {// N mode with 2 stream +- if (MCS15 && (Rssi >= (-70+RssiOffset))) +- TxRateIdx = MCS15; +- else if (MCS14 && (Rssi >= (-72+RssiOffset))) +- TxRateIdx = MCS14; +- else if (MCS13 && (Rssi >= (-76+RssiOffset))) +- TxRateIdx = MCS13; +- else if (MCS12 && (Rssi >= (-78+RssiOffset))) +- TxRateIdx = MCS12; +- else if (MCS4 && (Rssi >= (-82+RssiOffset))) +- TxRateIdx = MCS4; +- else if (MCS3 && (Rssi >= (-84+RssiOffset))) +- TxRateIdx = MCS3; +- else if (MCS2 && (Rssi >= (-86+RssiOffset))) +- TxRateIdx = MCS2; +- else if (MCS1 && (Rssi >= (-88+RssiOffset))) +- TxRateIdx = MCS1; +- else +- TxRateIdx = MCS0; +- } +- else if ((pTable == RateSwitchTable11BGN1S) || (pTable == RateSwitchTable11N1S)) +- {// N mode with 1 stream +- if (MCS7 && (Rssi > (-72+RssiOffset))) +- TxRateIdx = MCS7; +- else if (MCS6 && (Rssi > (-74+RssiOffset))) +- TxRateIdx = MCS6; +- else if (MCS5 && (Rssi > (-77+RssiOffset))) +- TxRateIdx = MCS5; +- else if (MCS4 && (Rssi > (-79+RssiOffset))) +- TxRateIdx = MCS4; +- else if (MCS3 && (Rssi > (-81+RssiOffset))) +- TxRateIdx = MCS3; +- else if (MCS2 && (Rssi > (-83+RssiOffset))) +- TxRateIdx = MCS2; +- else if (MCS1 && (Rssi > (-86+RssiOffset))) +- TxRateIdx = MCS1; +- else +- TxRateIdx = MCS0; +- } +- else +-#endif // DOT11_N_SUPPORT // +- {// Legacy mode +- if (MCS7 && (Rssi > -70)) +- TxRateIdx = MCS7; +- else if (MCS6 && (Rssi > -74)) +- TxRateIdx = MCS6; +- else if (MCS5 && (Rssi > -78)) +- TxRateIdx = MCS5; +- else if (MCS4 && (Rssi > -82)) +- TxRateIdx = MCS4; +- else if (MCS4 == 0) // for B-only mode +- TxRateIdx = MCS3; +- else if (MCS3 && (Rssi > -85)) +- TxRateIdx = MCS3; +- else if (MCS2 && (Rssi > -87)) +- TxRateIdx = MCS2; +- else if (MCS1 && (Rssi > -90)) +- TxRateIdx = MCS1; +- else +- TxRateIdx = MCS0; +- } +- +- // if (TxRateIdx != pAd->CommonCfg.TxRateIndex) +- { +- pEntry->CurrTxRateIndex = TxRateIdx; +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; +- MlmeSetTxRate(pAd, pEntry, pNextTxRate); +- } +- +- NdisZeroMemory(pEntry->TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pEntry->PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +- pEntry->fLastSecAccordingRSSI = TRUE; +- // reset all OneSecTx counters +- RESET_ONE_SEC_TX_CNT(pEntry); +- +- continue; +- } +- +- if (pEntry->fLastSecAccordingRSSI == TRUE) +- { +- pEntry->fLastSecAccordingRSSI = FALSE; +- pEntry->LastSecTxRateChangeAction = 0; +- // reset all OneSecTx counters +- RESET_ONE_SEC_TX_CNT(pEntry); +- +- continue; +- } +- +- do +- { +- BOOLEAN bTrainUpDown = FALSE; +- +- pEntry->CurrTxRateStableTime ++; +- +- // downgrade TX quality if PER >= Rate-Down threshold +- if (TxErrorRatio >= TrainDown) +- { +- bTrainUpDown = TRUE; +- pEntry->TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; +- } +- // upgrade TX quality if PER <= Rate-Up threshold +- else if (TxErrorRatio <= TrainUp) +- { +- bTrainUpDown = TRUE; +- bUpgradeQuality = TRUE; +- if (pEntry->TxQuality[CurrRateIdx]) +- pEntry->TxQuality[CurrRateIdx] --; // quality very good in CurrRate +- +- if (pEntry->TxRateUpPenalty) +- pEntry->TxRateUpPenalty --; +- else if (pEntry->TxQuality[UpRateIdx]) +- pEntry->TxQuality[UpRateIdx] --; // may improve next UP rate's quality +- } +- +- pEntry->PER[CurrRateIdx] = (UCHAR)TxErrorRatio; +- +- if (bTrainUpDown) +- { +- // perform DRS - consider TxRate Down first, then rate up. +- if ((CurrRateIdx != DownRateIdx) && (pEntry->TxQuality[CurrRateIdx] >= DRS_TX_QUALITY_WORST_BOUND)) +- { +- pEntry->CurrTxRateIndex = DownRateIdx; +- } +- else if ((CurrRateIdx != UpRateIdx) && (pEntry->TxQuality[UpRateIdx] <= 0)) +- { +- pEntry->CurrTxRateIndex = UpRateIdx; +- } +- } +- } while (FALSE); +- +- // if rate-up happen, clear all bad history of all TX rates +- if (pEntry->CurrTxRateIndex > CurrRateIdx) +- { +- pEntry->CurrTxRateStableTime = 0; +- pEntry->TxRateUpPenalty = 0; +- pEntry->LastSecTxRateChangeAction = 1; // rate UP +- NdisZeroMemory(pEntry->TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pEntry->PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +- +- // +- // For TxRate fast train up +- // +- if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) +- { +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); +- +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE; +- } +- bTxRateChanged = TRUE; +- } +- // if rate-down happen, only clear DownRate's bad history +- else if (pEntry->CurrTxRateIndex < CurrRateIdx) +- { +- pEntry->CurrTxRateStableTime = 0; +- pEntry->TxRateUpPenalty = 0; // no penalty +- pEntry->LastSecTxRateChangeAction = 2; // rate DOWN +- pEntry->TxQuality[pEntry->CurrTxRateIndex] = 0; +- pEntry->PER[pEntry->CurrTxRateIndex] = 0; +- +- // +- // For TxRate fast train down +- // +- if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) +- { +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); +- +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE; +- } +- bTxRateChanged = TRUE; +- } +- else +- { +- pEntry->LastSecTxRateChangeAction = 0; // rate no change +- bTxRateChanged = FALSE; +- } +- +- pEntry->LastTxOkCount = TxSuccess; +- +- { +- UCHAR tmpTxRate; +- +- // to fix tcp ack issue +- if (!bTxRateChanged && (pAd->RalinkCounters.OneSecReceivedByteCount > (pAd->RalinkCounters.OneSecTransmittedByteCount * 5))) +- { +- tmpTxRate = DownRateIdx; +- DBGPRINT_RAW(RT_DEBUG_TRACE,("DRS: Rx(%d) is 5 times larger than Tx(%d), use low rate (curr=%d, tmp=%d)\n", +- pAd->RalinkCounters.OneSecReceivedByteCount, pAd->RalinkCounters.OneSecTransmittedByteCount, pEntry->CurrTxRateIndex, tmpTxRate)); +- } +- else +- { +- tmpTxRate = pEntry->CurrTxRateIndex; +- } +- +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(tmpTxRate+1)*5]; +- if (bTxRateChanged && pNextTxRate) +- { +- MlmeSetTxRate(pAd, pEntry, pNextTxRate); +- } +- } +- // reset all OneSecTx counters +- RESET_ONE_SEC_TX_CNT(pEntry); +- } +-} +- +-/* +- ======================================================================== +- Routine Description: +- Station side, Auto TxRate faster train up timer call back function. +- +- Arguments: +- SystemSpecific1 - Not used. +- FunctionContext - Pointer to our Adapter context. +- SystemSpecific2 - Not used. +- SystemSpecific3 - Not used. +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID StaQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)FunctionContext; +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; +- ULONG TxTotalCnt; +- ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT0_STRUC TxStaCnt0; +- CHAR Rssi, ratio; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; +- ULONG i; +- +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; +- +- // +- // walk through MAC table, see if need to change AP's TX rate toward each entry +- // +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { +- pEntry = &pAd->MacTab.Content[i]; +- +- // check if this entry need to switch rate automatically +- if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) +- continue; +- +- if (INFRA_ON(pAd) && (i == 1)) +- Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); +- else +- Rssi = RTMPMaxRssi(pAd, +- pEntry->RssiSample.AvgRssi0, +- pEntry->RssiSample.AvgRssi1, +- pEntry->RssiSample.AvgRssi2); +- +- CurrRateIdx = pAd->CommonCfg.TxRateIndex; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &InitTxRateIdx); +- +- // decide the next upgrade rate and downgrade rate, if any +- if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) +- { +- UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx -1; +- } +- else if (CurrRateIdx == 0) +- { +- UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx; +- } +- else if (CurrRateIdx == (TableSize - 1)) +- { +- UpRateIdx = CurrRateIdx; +- DownRateIdx = CurrRateIdx - 1; +- } +- +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; +- +-#ifdef DOT11_N_SUPPORT +- if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) +- { +- TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1)); +- TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1)); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- TrainUp = pCurrTxRate->TrainUp; +- TrainDown = pCurrTxRate->TrainDown; +- } +- +- if (pAd->MacTab.Size == 1) +- { +- // Update statistic counter +- RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); +- +- TxRetransmit = StaTx1.field.TxRetransmit; +- TxSuccess = StaTx1.field.TxSuccess; +- TxFailCount = TxStaCnt0.field.TxFailCount; +- TxTotalCnt = TxRetransmit + TxSuccess + TxFailCount; +- +- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; +- +- if (TxTotalCnt) +- TxErrorRatio = ((TxRetransmit + TxFailCount) * 100) / TxTotalCnt; +- } +- else +- { +- TxTotalCnt = pEntry->OneSecTxNoRetryOkCount + +- pEntry->OneSecTxRetryOkCount + +- pEntry->OneSecTxFailCount; +- +- if (TxTotalCnt) +- TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt; +- } +- +- +- // +- // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI +- // (criteria copied from RT2500 for Netopia case) +- // +- if (TxTotalCnt <= 12) +- { +- NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +- +- if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) && (CurrRateIdx != DownRateIdx)) +- { +- pAd->CommonCfg.TxRateIndex = DownRateIdx; +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; +- } +- else if ((pAd->DrsCounters.LastSecTxRateChangeAction == 2) && (CurrRateIdx != UpRateIdx)) +- { +- pAd->CommonCfg.TxRateIndex = UpRateIdx; +- } +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,("QuickDRS: TxTotalCnt <= 15, train back to original rate \n")); +- return; +- } +- +- do +- { +- ULONG OneSecTxNoRetryOKRationCount; +- +- if (pAd->DrsCounters.LastTimeTxRateChangeAction == 0) +- ratio = 5; +- else +- ratio = 4; +- +- // downgrade TX quality if PER >= Rate-Down threshold +- if (TxErrorRatio >= TrainDown) +- { +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; +- } +- +- pAd->DrsCounters.PER[CurrRateIdx] = (UCHAR)TxErrorRatio; +- +- OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); +- +- // perform DRS - consider TxRate Down first, then rate up. +- if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) && (CurrRateIdx != DownRateIdx)) +- { +- if ((pAd->DrsCounters.LastTxOkCount + 2) >= OneSecTxNoRetryOKRationCount) +- { +- pAd->CommonCfg.TxRateIndex = DownRateIdx; +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; +- +- } +- +- } +- else if ((pAd->DrsCounters.LastSecTxRateChangeAction == 2) && (CurrRateIdx != UpRateIdx)) +- { +- if ((TxErrorRatio >= 50) || (TxErrorRatio >= TrainDown)) +- { +- +- } +- else if ((pAd->DrsCounters.LastTxOkCount + 2) >= OneSecTxNoRetryOKRationCount) +- { +- pAd->CommonCfg.TxRateIndex = UpRateIdx; +- } +- } +- }while (FALSE); +- +- // if rate-up happen, clear all bad history of all TX rates +- if (pAd->CommonCfg.TxRateIndex > CurrRateIdx) +- { +- pAd->DrsCounters.TxRateUpPenalty = 0; +- NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +- bTxRateChanged = TRUE; +- } +- // if rate-down happen, only clear DownRate's bad history +- else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE,("QuickDRS: --TX rate from %d to %d \n", CurrRateIdx, pAd->CommonCfg.TxRateIndex)); +- +- pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty +- pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = 0; +- pAd->DrsCounters.PER[pAd->CommonCfg.TxRateIndex] = 0; +- bTxRateChanged = TRUE; +- } +- else +- { +- bTxRateChanged = FALSE; +- } +- +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pAd->CommonCfg.TxRateIndex+1)*5]; +- if (bTxRateChanged && pNextTxRate) +- { +- MlmeSetTxRate(pAd, pEntry, pNextTxRate); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- This routine is executed periodically inside MlmePeriodicExec() after +- association with an AP. +- It checks if StaCfg.Psm is consistent with user policy (recorded in +- StaCfg.WindowsPowerMode). If not, enforce user policy. However, +- there're some conditions to consider: +- 1. we don't support power-saving in ADHOC mode, so Psm=PWR_ACTIVE all +- the time when Mibss==TRUE +- 2. When link up in INFRA mode, Psm should not be switch to PWR_SAVE +- if outgoing traffic available in TxRing or MgmtRing. +- Output: +- 1. change pAd->StaCfg.Psm to PWR_SAVE or leave it untouched +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeCheckPsmChange( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32) +-{ +- ULONG PowerMode; +- +- // condition - +- // 1. Psm maybe ON only happen in INFRASTRUCTURE mode +- // 2. user wants either MAX_PSP or FAST_PSP +- // 3. but current psm is not in PWR_SAVE +- // 4. CNTL state machine is not doing SCANning +- // 5. no TX SUCCESS event for the past 1-sec period +- PowerMode = pAd->StaCfg.WindowsPowerMode; +- +- if (INFRA_ON(pAd) && +- (PowerMode != Ndis802_11PowerModeCAM) && +- (pAd->StaCfg.Psm == PWR_ACTIVE) && +-// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)&& +- RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP) +- /*&& +- (pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && +- (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)*/) +- { +- NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime); +- pAd->RalinkCounters.RxCountSinceLastNULL = 0; +- RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- if (!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) +- { +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +- } +- else +- { +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } +- } +-} +- +-// IRQL = PASSIVE_LEVEL +-// IRQL = DISPATCH_LEVEL +-VOID MlmeSetPsmBit( +- IN PRTMP_ADAPTER pAd, +- IN USHORT psm) +-{ +- AUTO_RSP_CFG_STRUC csr4; +- +- pAd->StaCfg.Psm = psm; +- RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); +- csr4.field.AckCtsPsmBit = (psm == PWR_SAVE)? 1:0; +- RTMP_IO_WRITE32(pAd, AUTO_RSP_CFG, csr4.word); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetPsmBit = %d\n", psm)); +-} +-#endif // CONFIG_STA_SUPPORT // +- +-/* +- ========================================================================== +- Description: +- This routine calculates TxPER, RxPER of the past N-sec period. And +- according to the calculation result, ChannelQuality is calculated here +- to decide if current AP is still doing the job. +- +- If ChannelQuality is not good, a ROAMing attempt may be tried later. +- Output: +- StaCfg.ChannelQuality - 0..100 +- +- IRQL = DISPATCH_LEVEL +- +- NOTE: This routine decide channle quality based on RX CRC error ratio. +- Caller should make sure a function call to NICUpdateRawCounters(pAd) +- is performed right before this routine, so that this routine can decide +- channel quality based on the most up-to-date information +- ========================================================================== +- */ +-VOID MlmeCalculateChannelQuality( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, +- IN ULONG Now32) +-{ +- ULONG TxOkCnt, TxCnt, TxPER, TxPRR; +- ULONG RxCnt, RxPER; +- UCHAR NorRssi; +- CHAR MaxRssi; +- RSSI_SAMPLE *pRssiSample = NULL; +- UINT32 OneSecTxNoRetryOkCount = 0; +- UINT32 OneSecTxRetryOkCount = 0; +- UINT32 OneSecTxFailCount = 0; +- UINT32 OneSecRxOkCnt = 0; +- UINT32 OneSecRxFcsErrCnt = 0; +- ULONG ChannelQuality = 0; // 0..100, Channel Quality Indication for Roaming +-#ifdef CONFIG_STA_SUPPORT +- ULONG BeaconLostTime = pAd->StaCfg.BeaconLostTime; +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- // longer beacon lost time when carrier detection enabled +- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE) +- { +- BeaconLostTime = pAd->StaCfg.BeaconLostTime + (pAd->StaCfg.BeaconLostTime/2); +- } +-#endif // CARRIER_DETECTION_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- { +- pRssiSample = &pAd->StaCfg.RssiSample; +- OneSecTxNoRetryOkCount = pAd->RalinkCounters.OneSecTxNoRetryOkCount; +- OneSecTxRetryOkCount = pAd->RalinkCounters.OneSecTxRetryOkCount; +- OneSecTxFailCount = pAd->RalinkCounters.OneSecTxFailCount; +- OneSecRxOkCnt = pAd->RalinkCounters.OneSecRxOkCnt; +- OneSecRxFcsErrCnt = pAd->RalinkCounters.OneSecRxFcsErrCnt; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- MaxRssi = RTMPMaxRssi(pAd, pRssiSample->LastRssi0, +- pRssiSample->LastRssi1, +- pRssiSample->LastRssi2); +- +- // +- // calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics +- // +- TxOkCnt = OneSecTxNoRetryOkCount + OneSecTxRetryOkCount; +- TxCnt = TxOkCnt + OneSecTxFailCount; +- if (TxCnt < 5) +- { +- TxPER = 0; +- TxPRR = 0; +- } +- else +- { +- TxPER = (OneSecTxFailCount * 100) / TxCnt; +- TxPRR = ((TxCnt - OneSecTxNoRetryOkCount) * 100) / TxCnt; +- } +- +- // +- // calculate RX PER - don't take RxPER into consideration if too few sample +- // +- RxCnt = OneSecRxOkCnt + OneSecRxFcsErrCnt; +- if (RxCnt < 5) +- RxPER = 0; +- else +- RxPER = (OneSecRxFcsErrCnt * 100) / RxCnt; +- +- // +- // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER +- // +-#ifdef CONFIG_STA_SUPPORT +- if ((pAd->OpMode == OPMODE_STA) && +- INFRA_ON(pAd) && +- (OneSecTxNoRetryOkCount < 2) && // no heavy traffic +- ((pAd->StaCfg.LastBeaconRxTime + BeaconLostTime) < Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", BeaconLostTime, TxOkCnt)); +- ChannelQuality = 0; +- } +- else +-#endif // CONFIG_STA_SUPPORT // +- { +- // Normalize Rssi +- if (MaxRssi > -40) +- NorRssi = 100; +- else if (MaxRssi < -90) +- NorRssi = 0; +- else +- NorRssi = (MaxRssi + 90) * 2; +- +- // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) +- ChannelQuality = (RSSI_WEIGHTING * NorRssi + +- TX_WEIGHTING * (100 - TxPRR) + +- RX_WEIGHTING* (100 - RxPER)) / 100; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- pAd->Mlme.ChannelQuality = (ChannelQuality > 100) ? 100 : ChannelQuality; +-#endif // CONFIG_STA_SUPPORT // +- +- +-} +- +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeSetTxPreamble( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TxPreamble) +-{ +- AUTO_RSP_CFG_STRUC csr4; +- +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- //TxPreamble = Rt802_11PreambleLong; +- +- RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); +- if (TxPreamble == Rt802_11PreambleLong) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetTxPreamble (= LONG PREAMBLE)\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- csr4.field.AutoResponderPreamble = 0; +- } +- else +- { +- // NOTE: 1Mbps should always use long preamble +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetTxPreamble (= SHORT PREAMBLE)\n")); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- csr4.field.AutoResponderPreamble = 1; +- } +- +- RTMP_IO_WRITE32(pAd, AUTO_RSP_CFG, csr4.word); +-} +- +-/* +- ========================================================================== +- Description: +- Update basic rate bitmap +- ========================================================================== +- */ +- +-VOID UpdateBasicRateBitmap( +- IN PRTMP_ADAPTER pAdapter) +-{ +- INT i, j; +- /* 1 2 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ +- UCHAR rate[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; +- UCHAR *sup_p = pAdapter->CommonCfg.SupRate; +- UCHAR *ext_p = pAdapter->CommonCfg.ExtRate; +- ULONG bitmap = pAdapter->CommonCfg.BasicRateBitmap; +- +- +- /* if A mode, always use fix BasicRateBitMap */ +- //if (pAdapter->CommonCfg.Channel == PHY_11A) +- if (pAdapter->CommonCfg.Channel > 14) +- pAdapter->CommonCfg.BasicRateBitmap = 0x150; /* 6, 12, 24M */ +- /* End of if */ +- +- if (pAdapter->CommonCfg.BasicRateBitmap > 4095) +- { +- /* (2 ^ MAX_LEN_OF_SUPPORTED_RATES) -1 */ +- return; +- } /* End of if */ +- +- for(i=0; iCommonCfg.DesireRate[i] & 0x7f) +- { +- case 2: Rate = RATE_1; num++; break; +- case 4: Rate = RATE_2; num++; break; +- case 11: Rate = RATE_5_5; num++; break; +- case 22: Rate = RATE_11; num++; break; +- case 12: Rate = RATE_6; num++; break; +- case 18: Rate = RATE_9; num++; break; +- case 24: Rate = RATE_12; num++; break; +- case 36: Rate = RATE_18; num++; break; +- case 48: Rate = RATE_24; num++; break; +- case 72: Rate = RATE_36; num++; break; +- case 96: Rate = RATE_48; num++; break; +- case 108: Rate = RATE_54; num++; break; +- //default: Rate = RATE_1; break; +- } +- if (MaxDesire < Rate) MaxDesire = Rate; +- } +- +-//=========================================================================== +-//=========================================================================== +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pHtPhy = &pAd->StaCfg.HTPhyMode; +- pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; +- pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; +- +- auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch; +- HtMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS; +- +- if ((pAd->StaCfg.BssType == BSS_ADHOC) && +- (pAd->CommonCfg.PhyMode == PHY_11B) && +- (MaxDesire > RATE_11)) +- { +- MaxDesire = RATE_11; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- pAd->CommonCfg.MaxDesiredRate = MaxDesire; +- pMinHtPhy->word = 0; +- pMaxHtPhy->word = 0; +- pHtPhy->word = 0; +- +- // Auto rate switching is enabled only if more than one DESIRED RATES are +- // specified; otherwise disabled +- if (num <= 1) +- { +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; +- *auto_rate_cur_p = FALSE; +- } +- else +- { +- //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; +- *auto_rate_cur_p = TRUE; +- } +- +- if (HtMcs != MCS_AUTO) +- { +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; +- *auto_rate_cur_p = FALSE; +- } +- else +- { +- //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; +- *auto_rate_cur_p = TRUE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) +- { +- pSupRate = &pAd->StaActive.SupRate[0]; +- pExtRate = &pAd->StaActive.ExtRate[0]; +- SupRateLen = pAd->StaActive.SupRateLen; +- ExtRateLen = pAd->StaActive.ExtRateLen; +- } +- else +-#endif // CONFIG_STA_SUPPORT // +- { +- pSupRate = &pAd->CommonCfg.SupRate[0]; +- pExtRate = &pAd->CommonCfg.ExtRate[0]; +- SupRateLen = pAd->CommonCfg.SupRateLen; +- ExtRateLen = pAd->CommonCfg.ExtRateLen; +- } +- +- // find max supported rate +- for (i=0; i Rate) MinSupport = Rate; +- } +- +- for (i=0; i Rate) MinSupport = Rate; +- } +- +- RTMP_IO_WRITE32(pAd, LEGACY_BASIC_RATE, BasicRateBitmap); +- +- // bug fix +- // pAd->CommonCfg.BasicRateBitmap = BasicRateBitmap; +- +- // calculate the exptected ACK rate for each TX rate. This info is used to caculate +- // the DURATION field of outgoing uniicast DATA/MGMT frame +- for (i=0; iCommonCfg.ExpectedACKRate[i] = CurrBasicRate; +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateTxRates[MaxSupport = %d] = MaxDesire %d Mbps\n", RateIdToMbps[MaxSupport], RateIdToMbps[MaxDesire])); +- // max tx rate = min {max desire rate, max supported rate} +- if (MaxSupport < MaxDesire) +- pAd->CommonCfg.MaxTxRate = MaxSupport; +- else +- pAd->CommonCfg.MaxTxRate = MaxDesire; +- +- pAd->CommonCfg.MinTxRate = MinSupport; +- // 2003-07-31 john - 2500 doesn't have good sensitivity at high OFDM rates. to increase the success +- // ratio of initial DHCP packet exchange, TX rate starts from a lower rate depending +- // on average RSSI +- // 1. RSSI >= -70db, start at 54 Mbps (short distance) +- // 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) +- // 3. -75 > RSSI, start at 11 Mbps (long distance) +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)/* && +- // OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)*/) +- if (*auto_rate_cur_p) +- { +- short dbm = 0; +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- dbm = pAd->StaCfg.RssiSample.AvgRssi0 - pAd->BbpRssiToDbmDelta; +-#endif // CONFIG_STA_SUPPORT // +- if (bLinkUp == TRUE) +- pAd->CommonCfg.TxRate = RATE_24; +- else +- pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; +- +- if (dbm < -75) +- pAd->CommonCfg.TxRate = RATE_11; +- else if (dbm < -70) +- pAd->CommonCfg.TxRate = RATE_24; +- +- // should never exceed MaxTxRate (consider 11B-only mode) +- if (pAd->CommonCfg.TxRate > pAd->CommonCfg.MaxTxRate) +- pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; +- +- pAd->CommonCfg.TxRateIndex = 0; +- } +- else +- { +- pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; +- pHtPhy->field.MCS = (pAd->CommonCfg.MaxTxRate > 3) ? (pAd->CommonCfg.MaxTxRate - 4) : pAd->CommonCfg.MaxTxRate; +- pHtPhy->field.MODE = (pAd->CommonCfg.MaxTxRate > 3) ? MODE_OFDM : MODE_CCK; +- +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC = pHtPhy->field.STBC; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI = pHtPhy->field.ShortGI; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS = pHtPhy->field.MCS; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE = pHtPhy->field.MODE; +- } +- +- if (pAd->CommonCfg.TxRate <= RATE_11) +- { +- pMaxHtPhy->field.MODE = MODE_CCK; +- pMaxHtPhy->field.MCS = pAd->CommonCfg.TxRate; +- pMinHtPhy->field.MCS = pAd->CommonCfg.MinTxRate; +- } +- else +- { +- pMaxHtPhy->field.MODE = MODE_OFDM; +- pMaxHtPhy->field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.TxRate]; +- if (pAd->CommonCfg.MinTxRate >= RATE_6 && (pAd->CommonCfg.MinTxRate <= RATE_54)) +- {pMinHtPhy->field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MinTxRate];} +- else +- {pMinHtPhy->field.MCS = pAd->CommonCfg.MinTxRate;} +- } +- +- pHtPhy->word = (pMaxHtPhy->word); +- if (bLinkUp && (pAd->OpMode == OPMODE_STA)) +- { +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word = pHtPhy->word; +- pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word = pMaxHtPhy->word; +- pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word = pMinHtPhy->word; +- } +- else +- { +- switch (pAd->CommonCfg.PhyMode) +- { +- case PHY_11BG_MIXED: +- case PHY_11B: +-#ifdef DOT11_N_SUPPORT +- case PHY_11BGN_MIXED: +-#endif // DOT11_N_SUPPORT // +- pAd->CommonCfg.MlmeRate = RATE_1; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; +- +-//#ifdef WIFI_TEST +- pAd->CommonCfg.RtsRate = RATE_11; +-//#else +-// pAd->CommonCfg.RtsRate = RATE_1; +-//#endif +- break; +- case PHY_11G: +- case PHY_11A: +-#ifdef DOT11_N_SUPPORT +- case PHY_11AGN_MIXED: +- case PHY_11GN_MIXED: +- case PHY_11N_2_4G: +- case PHY_11AN_MIXED: +- case PHY_11N_5G: +-#endif // DOT11_N_SUPPORT // +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.RtsRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- break; +- case PHY_11ABG_MIXED: +-#ifdef DOT11_N_SUPPORT +- case PHY_11ABGN_MIXED: +-#endif // DOT11_N_SUPPORT // +- if (pAd->CommonCfg.Channel <= 14) +- { +- pAd->CommonCfg.MlmeRate = RATE_1; +- pAd->CommonCfg.RtsRate = RATE_1; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; +- } +- else +- { +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.RtsRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- break; +- default: // error +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->CommonCfg.RtsRate = RATE_1; +- break; +- } +- // +- // Keep Basic Mlme Rate. +- // +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.word = pAd->CommonCfg.MlmeTransmit.word; +- if (pAd->CommonCfg.MlmeTransmit.field.MODE == MODE_OFDM) +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[RATE_24]; +- else +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = RATE_1; +- pAd->CommonCfg.BasicMlmeRate = pAd->CommonCfg.MlmeRate; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, MinRate=%d, Rate Switching =%d)\n", +- RateIdToMbps[MaxDesire], RateIdToMbps[MaxSupport], RateIdToMbps[pAd->CommonCfg.MaxTxRate], RateIdToMbps[pAd->CommonCfg.MinTxRate], +- /*OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)*/*auto_rate_cur_p)); +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04lx)\n", +- RateIdToMbps[pAd->CommonCfg.TxRate], RateIdToMbps[pAd->CommonCfg.RtsRate], BasicRateBitmap)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateTxRates (MlmeTransmit=0x%x, MinHTPhyMode=%x, MaxHTPhyMode=0x%x, HTPhyMode=0x%x)\n", +- pAd->CommonCfg.MlmeTransmit.word, pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word )); +-} +- +-#ifdef DOT11_N_SUPPORT +-/* +- ========================================================================== +- Description: +- This function update HT Rate setting. +- Input Wcid value is valid for 2 case : +- 1. it's used for Station in infra mode that copy AP rate to Mactable. +- 2. OR Station in adhoc mode to copy peer's HT rate to Mactable. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeUpdateHtTxRates( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx) +-{ +- UCHAR StbcMcs; //j, StbcMcs, bitmask; +- CHAR i; // 3*3 +- RT_HT_CAPABILITY *pRtHtCap = NULL; +- RT_HT_PHY_INFO *pActiveHtPhy = NULL; +- ULONG BasicMCS; +- UCHAR j, bitmask; +- PRT_HT_PHY_INFO pDesireHtPhy = NULL; +- PHTTRANSMIT_SETTING pHtPhy = NULL; +- PHTTRANSMIT_SETTING pMaxHtPhy = NULL; +- PHTTRANSMIT_SETTING pMinHtPhy = NULL; +- BOOLEAN *auto_rate_cur_p; +- +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates===> \n")); +- +- auto_rate_cur_p = NULL; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- pDesireHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; +- pActiveHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; +- pHtPhy = &pAd->StaCfg.HTPhyMode; +- pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; +- pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; +- +- auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch; +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) +- { +- if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) +- return; +- +- pRtHtCap = &pAd->StaActive.SupportedHtPhy; +- pActiveHtPhy = &pAd->StaActive.SupportedPhyInfo; +- StbcMcs = (UCHAR)pAd->MlmeAux.AddHtInfo.AddHtInfo3.StbcMcs; +- BasicMCS =pAd->MlmeAux.AddHtInfo.MCSSet[0]+(pAd->MlmeAux.AddHtInfo.MCSSet[1]<<8)+(StbcMcs<<16); +- if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) && (pAd->Antenna.field.TxPath == 2)) +- pMaxHtPhy->field.STBC = STBC_USE; +- else +- pMaxHtPhy->field.STBC = STBC_NONE; +- } +- else +-#endif // CONFIG_STA_SUPPORT // +- { +- if (pDesireHtPhy->bHtEnable == FALSE) +- return; +- +- pRtHtCap = &pAd->CommonCfg.DesiredHtPhy; +- StbcMcs = (UCHAR)pAd->CommonCfg.AddHTInfo.AddHtInfo3.StbcMcs; +- BasicMCS = pAd->CommonCfg.AddHTInfo.MCSSet[0]+(pAd->CommonCfg.AddHTInfo.MCSSet[1]<<8)+(StbcMcs<<16); +- if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) && (pAd->Antenna.field.TxPath == 2)) +- pMaxHtPhy->field.STBC = STBC_USE; +- else +- pMaxHtPhy->field.STBC = STBC_NONE; +- } +- +- // Decide MAX ht rate. +- if ((pRtHtCap->GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- pMaxHtPhy->field.MODE = MODE_HTGREENFIELD; +- else +- pMaxHtPhy->field.MODE = MODE_HTMIX; +- +- if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && (pRtHtCap->ChannelWidth)) +- pMaxHtPhy->field.BW = BW_40; +- else +- pMaxHtPhy->field.BW = BW_20; +- +- if (pMaxHtPhy->field.BW == BW_20) +- pMaxHtPhy->field.ShortGI = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 & pRtHtCap->ShortGIfor20); +- else +- pMaxHtPhy->field.ShortGI = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 & pRtHtCap->ShortGIfor40); +- +- if (pDesireHtPhy->MCSSet[4] != 0) +- { +- pMaxHtPhy->field.MCS = 32; +- } +- +- for (i=23; i>=0; i--) // 3*3 +- { +- j = i/8; +- bitmask = (1<<(i-(j*8))); +- +- if ((pActiveHtPhy->MCSSet[j] & bitmask) && (pDesireHtPhy->MCSSet[j] & bitmask)) +- { +- pMaxHtPhy->field.MCS = i; +- break; +- } +- +- if (i==0) +- break; +- } +- +- // Copy MIN ht rate. rt2860??? +- pMinHtPhy->field.BW = BW_20; +- pMinHtPhy->field.MCS = 0; +- pMinHtPhy->field.STBC = 0; +- pMinHtPhy->field.ShortGI = 0; +- //If STA assigns fixed rate. update to fixed here. +-#ifdef CONFIG_STA_SUPPORT +- if ( (pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff)) +- { +- if (pDesireHtPhy->MCSSet[4] != 0) +- { +- pMaxHtPhy->field.MCS = 32; +- pMinHtPhy->field.MCS = 32; +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n",pMinHtPhy->field.MCS)); +- } +- +- for (i=23; (CHAR)i >= 0; i--) // 3*3 +- { +- j = i/8; +- bitmask = (1<<(i-(j*8))); +- if ( (pDesireHtPhy->MCSSet[j] & bitmask) && (pActiveHtPhy->MCSSet[j] & bitmask)) +- { +- pMaxHtPhy->field.MCS = i; +- pMinHtPhy->field.MCS = i; +- break; +- } +- if (i==0) +- break; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- // Decide ht rate +- pHtPhy->field.STBC = pMaxHtPhy->field.STBC; +- pHtPhy->field.BW = pMaxHtPhy->field.BW; +- pHtPhy->field.MODE = pMaxHtPhy->field.MODE; +- pHtPhy->field.MCS = pMaxHtPhy->field.MCS; +- pHtPhy->field.ShortGI = pMaxHtPhy->field.ShortGI; +- +- // use default now. rt2860 +- if (pDesireHtPhy->MCSSet[0] != 0xff) +- *auto_rate_cur_p = FALSE; +- else +- *auto_rate_cur_p = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateHtTxRates<---.AMsduSize = %d \n", pAd->CommonCfg.DesiredHtPhy.AmsduSize )); +- DBGPRINT(RT_DEBUG_TRACE,("TX: MCS[0] = %x (choose %d), BW = %d, ShortGI = %d, MODE = %d, \n", pActiveHtPhy->MCSSet[0],pHtPhy->field.MCS, +- pHtPhy->field.BW, pHtPhy->field.ShortGI, pHtPhy->field.MODE)); +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== \n")); +-} +- +- +-VOID BATableInit( +- IN PRTMP_ADAPTER pAd, +- IN BA_TABLE *Tab) +-{ +- int i; +- +- Tab->numAsOriginator = 0; +- Tab->numAsRecipient = 0; +- Tab->numDoneOriginator = 0; +- NdisAllocateSpinLock(&pAd->BATabLock); +- for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { +- Tab->BARecEntry[i].REC_BA_Status = Recipient_NONE; +- NdisAllocateSpinLock(&(Tab->BARecEntry[i].RxReRingLock)); +- } +- for (i = 0; i < MAX_LEN_OF_BA_ORI_TABLE; i++) +- { +- Tab->BAOriEntry[i].ORI_BA_Status = Originator_NONE; +- } +-} +-#endif // DOT11_N_SUPPORT // +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeRadioOff( +- IN PRTMP_ADAPTER pAd) +-{ +- RTMP_MLME_RADIO_OFF(pAd); +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeRadioOn( +- IN PRTMP_ADAPTER pAd) +-{ +- RTMP_MLME_RADIO_ON(pAd); +-} +- +-// =========================================================================================== +-// bss_table.c +-// =========================================================================================== +- +- +-/*! \brief initialize BSS table +- * \param p_tab pointer to the table +- * \return none +- * \pre +- * \post +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- */ +-VOID BssTableInit( +- IN BSS_TABLE *Tab) +-{ +- int i; +- +- Tab->BssNr = 0; +- Tab->BssOverlapNr = 0; +- for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) +- { +- NdisZeroMemory(&Tab->BssEntry[i], sizeof(BSS_ENTRY)); +- Tab->BssEntry[i].Rssi = -127; // initial the rssi as a minimum value +- } +-} +- +- +-/*! \brief search the BSS table by SSID +- * \param p_tab pointer to the bss table +- * \param ssid SSID string +- * \return index of the table, BSS_NOT_FOUND if not in the table +- * \pre +- * \post +- * \note search by sequential search +- +- IRQL = DISPATCH_LEVEL +- +- */ +-ULONG BssTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel) +-{ +- UCHAR i; +- +- for (i = 0; i < Tab->BssNr; i++) +- { +- // +- // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. +- // We should distinguish this case. +- // +- if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid)) +- { +- return i; +- } +- } +- return (ULONG)BSS_NOT_FOUND; +-} +- +-ULONG BssSsidTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel) +-{ +- UCHAR i; +- +- for (i = 0; i < Tab->BssNr; i++) +- { +- // +- // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. +- // We should distinguish this case. +- // +- if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid) && +- SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen)) +- { +- return i; +- } +- } +- return (ULONG)BSS_NOT_FOUND; +-} +- +-ULONG BssTableSearchWithSSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel) +-{ +- UCHAR i; +- +- for (i = 0; i < Tab->BssNr; i++) +- { +- if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid) && +- (SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen) || +- (NdisEqualMemory(pSsid, ZeroSsid, SsidLen)) || +- (NdisEqualMemory(Tab->BssEntry[i].Ssid, ZeroSsid, Tab->BssEntry[i].SsidLen)))) +- { +- return i; +- } +- } +- return (ULONG)BSS_NOT_FOUND; +-} +- +- +-ULONG BssSsidTableSearchBySSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen) +-{ +- UCHAR i; +- +- for (i = 0; i < Tab->BssNr; i++) +- { +- if (SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen)) +- { +- return i; +- } +- } +- return (ULONG)BSS_NOT_FOUND; +-} +- +- +-// IRQL = DISPATCH_LEVEL +-VOID BssTableDeleteEntry( +- IN OUT BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel) +-{ +- UCHAR i, j; +- +- for (i = 0; i < Tab->BssNr; i++) +- { +- if ((Tab->BssEntry[i].Channel == Channel) && +- (MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid))) +- { +- for (j = i; j < Tab->BssNr - 1; j++) +- { +- NdisMoveMemory(&(Tab->BssEntry[j]), &(Tab->BssEntry[j + 1]), sizeof(BSS_ENTRY)); +- } +- NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr - 1]), sizeof(BSS_ENTRY)); +- Tab->BssNr -= 1; +- return; +- } +- } +-} +- +-#ifdef DOT11_N_SUPPORT +-/* +- ======================================================================== +- Routine Description: +- Delete the Originator Entry in BAtable. Or decrease numAs Originator by 1 if needed. +- +- Arguments: +- // IRQL = DISPATCH_LEVEL +- ======================================================================== +-*/ +-VOID BATableDeleteORIEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY *pBAORIEntry) +-{ +- +- if (pBAORIEntry->ORI_BA_Status != Originator_NONE) +- { +- NdisAcquireSpinLock(&pAd->BATabLock); +- if (pBAORIEntry->ORI_BA_Status == Originator_Done) +- { +- pAd->BATable.numAsOriginator -= 1; +- DBGPRINT(RT_DEBUG_TRACE, ("BATableDeleteORIEntry numAsOriginator= %ld\n", pAd->BATable.numAsRecipient)); +- // Erase Bitmap flag. +- } +- pAd->MacTab.Content[pBAORIEntry->Wcid].TXBAbitmap &= (~(1<<(pBAORIEntry->TID) )); // If STA mode, erase flag here +- pAd->MacTab.Content[pBAORIEntry->Wcid].BAOriWcidArray[pBAORIEntry->TID] = 0; // If STA mode, erase flag here +- pBAORIEntry->ORI_BA_Status = Originator_NONE; +- pBAORIEntry->Token = 1; +- // Not clear Sequence here. +- NdisReleaseSpinLock(&pAd->BATabLock); +- } +-} +-#endif // DOT11_N_SUPPORT // +- +-/*! \brief +- * \param +- * \return +- * \pre +- * \post +- +- IRQL = DISPATCH_LEVEL +- +- */ +-VOID BssEntrySet( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_ENTRY *pBss, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN PCF_PARM pCfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE) +-{ +- COPY_MAC_ADDR(pBss->Bssid, pBssid); +- // Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID +- pBss->Hidden = 1; +- if (SsidLen > 0) +- { +- // For hidden SSID AP, it might send beacon with SSID len equal to 0 +- // Or send beacon /probe response with SSID len matching real SSID length, +- // but SSID is all zero. such as "00-00-00-00" with length 4. +- // We have to prevent this case overwrite correct table +- if (NdisEqualMemory(Ssid, ZeroSsid, SsidLen) == 0) +- { +- NdisZeroMemory(pBss->Ssid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pBss->Ssid, Ssid, SsidLen); +- pBss->SsidLen = SsidLen; +- pBss->Hidden = 0; +- } +- } +- else +- pBss->SsidLen = 0; +- pBss->BssType = BssType; +- pBss->BeaconPeriod = BeaconPeriod; +- if (BssType == BSS_INFRA) +- { +- if (pCfParm->bValid) +- { +- pBss->CfpCount = pCfParm->CfpCount; +- pBss->CfpPeriod = pCfParm->CfpPeriod; +- pBss->CfpMaxDuration = pCfParm->CfpMaxDuration; +- pBss->CfpDurRemaining = pCfParm->CfpDurRemaining; +- } +- } +- else +- { +- pBss->AtimWin = AtimWin; +- } +- +- pBss->CapabilityInfo = CapabilityInfo; +- // The privacy bit indicate security is ON, it maight be WEP, TKIP or AES +- // Combine with AuthMode, they will decide the connection methods. +- pBss->Privacy = CAP_IS_PRIVACY_ON(pBss->CapabilityInfo); +- ASSERT(SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES); +- if (SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES) +- NdisMoveMemory(pBss->SupRate, SupRate, SupRateLen); +- else +- NdisMoveMemory(pBss->SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- pBss->SupRateLen = SupRateLen; +- ASSERT(ExtRateLen <= MAX_LEN_OF_SUPPORTED_RATES); +- NdisMoveMemory(pBss->ExtRate, ExtRate, ExtRateLen); +- pBss->NewExtChanOffset = NewExtChanOffset; +- pBss->ExtRateLen = ExtRateLen; +- pBss->Channel = Channel; +- pBss->CentralChannel = Channel; +- pBss->Rssi = Rssi; +- // Update CkipFlag. if not exists, the value is 0x0 +- pBss->CkipFlag = CkipFlag; +- +- // New for microsoft Fixed IEs +- NdisMoveMemory(pBss->FixIEs.Timestamp, &TimeStamp, 8); +- pBss->FixIEs.BeaconInterval = BeaconPeriod; +- pBss->FixIEs.Capabilities = CapabilityInfo; +- +- // New for microsoft Variable IEs +- if (LengthVIE != 0) +- { +- pBss->VarIELen = LengthVIE; +- NdisMoveMemory(pBss->VarIEs, pVIE, pBss->VarIELen); +- } +- else +- { +- pBss->VarIELen = 0; +- } +- +- pBss->AddHtInfoLen = 0; +- pBss->HtCapabilityLen = 0; +-#ifdef DOT11_N_SUPPORT +- if (HtCapabilityLen> 0) +- { +- pBss->HtCapabilityLen = HtCapabilityLen; +- NdisMoveMemory(&pBss->HtCapability, pHtCapability, HtCapabilityLen); +- if (AddHtInfoLen > 0) +- { +- pBss->AddHtInfoLen = AddHtInfoLen; +- NdisMoveMemory(&pBss->AddHtInfo, pAddHtInfo, AddHtInfoLen); +- +- if ((pAddHtInfo->ControlChan > 2)&& (pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) +- { +- pBss->CentralChannel = pAddHtInfo->ControlChan - 2; +- } +- else if ((pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) +- { +- pBss->CentralChannel = pAddHtInfo->ControlChan + 2; +- } +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- BssCipherParse(pBss); +- +- // new for QOS +- if (pEdcaParm) +- NdisMoveMemory(&pBss->EdcaParm, pEdcaParm, sizeof(EDCA_PARM)); +- else +- pBss->EdcaParm.bValid = FALSE; +- if (pQosCapability) +- NdisMoveMemory(&pBss->QosCapability, pQosCapability, sizeof(QOS_CAPABILITY_PARM)); +- else +- pBss->QosCapability.bValid = FALSE; +- if (pQbssLoad) +- NdisMoveMemory(&pBss->QbssLoad, pQbssLoad, sizeof(QBSS_LOAD_PARM)); +- else +- pBss->QbssLoad.bValid = FALSE; +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- PEID_STRUCT pEid; +- USHORT Length = 0; +- +- +- NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN); +- NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN); +-#ifdef EXT_BUILD_CHANNEL_LIST +- NdisZeroMemory(&pBss->CountryString[0], 3); +- pBss->bHasCountryIE = FALSE; +-#endif // EXT_BUILD_CHANNEL_LIST // +- pEid = (PEID_STRUCT) pVIE; +- while ((Length + 2 + (USHORT)pEid->Len) <= LengthVIE) +- { +- switch(pEid->Eid) +- { +- case IE_WPA: +- if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- { +- if ((pEid->Len + 2) > MAX_CUSTOM_LEN) +- { +- pBss->WpaIE.IELen = 0; +- break; +- } +- pBss->WpaIE.IELen = pEid->Len + 2; +- NdisMoveMemory(pBss->WpaIE.IE, pEid, pBss->WpaIE.IELen); +- } +- break; +- case IE_RSN: +- if (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- { +- if ((pEid->Len + 2) > MAX_CUSTOM_LEN) +- { +- pBss->RsnIE.IELen = 0; +- break; +- } +- pBss->RsnIE.IELen = pEid->Len + 2; +- NdisMoveMemory(pBss->RsnIE.IE, pEid, pBss->RsnIE.IELen); +- } +- break; +-#ifdef EXT_BUILD_CHANNEL_LIST +- case IE_COUNTRY: +- NdisMoveMemory(&pBss->CountryString[0], pEid->Octet, 3); +- pBss->bHasCountryIE = TRUE; +- break; +-#endif // EXT_BUILD_CHANNEL_LIST // +- } +- Length = Length + 2 + (USHORT)pEid->Len; // Eid[1] + Len[1]+ content[Len] +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +-} +- +-/*! +- * \brief insert an entry into the bss table +- * \param p_tab The BSS table +- * \param Bssid BSSID +- * \param ssid SSID +- * \param ssid_len Length of SSID +- * \param bss_type +- * \param beacon_period +- * \param timestamp +- * \param p_cf +- * \param atim_win +- * \param cap +- * \param rates +- * \param rates_len +- * \param channel_idx +- * \return none +- * \pre +- * \post +- * \note If SSID is identical, the old entry will be replaced by the new one +- +- IRQL = DISPATCH_LEVEL +- +- */ +-ULONG BssTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN CF_PARM *CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR ChannelNo, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE) +-{ +- ULONG Idx; +- +- Idx = BssTableSearchWithSSID(Tab, pBssid, (UCHAR *)Ssid, SsidLen, ChannelNo); +- if (Idx == BSS_NOT_FOUND) +- { +- if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) +- { +- // +- // It may happen when BSS Table was full. +- // The desired AP will not be added into BSS Table +- // In this case, if we found the desired AP then overwrite BSS Table. +- // +- if(!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, pBssid) || +- SSID_EQUAL(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Ssid, SsidLen)) +- { +- Idx = Tab->BssOverlapNr; +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); +- Tab->BssOverlapNr = (Tab->BssOverlapNr++) % MAX_LEN_OF_BSS_TABLE; +- } +- return Idx; +- } +- else +- { +- return BSS_NOT_FOUND; +- } +- } +- Idx = Tab->BssNr; +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); +- Tab->BssNr++; +- } +- else +- { +- /* avoid Hidden SSID form beacon to overwirite correct SSID from probe response */ +- if ((SSID_EQUAL(Ssid, SsidLen, Tab->BssEntry[Idx].Ssid, Tab->BssEntry[Idx].SsidLen)) || +- (NdisEqualMemory(Tab->BssEntry[Idx].Ssid, ZeroSsid, Tab->BssEntry[Idx].SsidLen))) +- { +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod,CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); +- } +- } +- +- return Idx; +-} +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +-VOID TriEventInit( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR i; +- +- for (i = 0;i < MAX_TRIGGER_EVENT;i++) +- pAd->CommonCfg.TriggerEventTab.EventA[i].bValid = FALSE; +- +- pAd->CommonCfg.TriggerEventTab.EventANo = 0; +- pAd->CommonCfg.TriggerEventTab.EventBCountDown = 0; +-} +- +-ULONG TriEventTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT TRIGGER_EVENT_TAB *Tab, +- IN PUCHAR pBssid, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN UCHAR RegClass, +- IN UCHAR ChannelNo) +-{ +- // Event A +- if (HtCapabilityLen == 0) +- { +- if (Tab->EventANo < MAX_TRIGGER_EVENT) +- { +- RTMPMoveMemory(Tab->EventA[Tab->EventANo].BSSID, pBssid, 6); +- Tab->EventA[Tab->EventANo].bValid = TRUE; +- Tab->EventA[Tab->EventANo].Channel = ChannelNo; +- Tab->EventA[Tab->EventANo].CDCounter = pAd->CommonCfg.Dot11BssWidthChanTranDelay; +- if (RegClass != 0) +- { +- // Beacon has Regulatory class IE. So use beacon's +- Tab->EventA[Tab->EventANo].RegClass = RegClass; +- } +- else +- { +- // Use Station's Regulatory class instead. +- if (pAd->StaActive.SupportedHtPhy.bHtEnable == TRUE) +- { +- if (pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) +- { +- Tab->EventA[Tab->EventANo].RegClass = 32; +- } +- else if (pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) +- Tab->EventA[Tab->EventANo].RegClass = 33; +- } +- else +- Tab->EventA[Tab->EventANo].RegClass = ??; +- +- } +- +- Tab->EventANo ++; +- } +- } +- else if (pHtCapability->HtCapInfo.Intolerant40) +- { +- Tab->EventBCountDown = pAd->CommonCfg.Dot11BssWidthChanTranDelay; +- } +- +-} +- +-/* +- ======================================================================== +- Routine Description: +- Trigger Event table Maintainence called once every second. +- +- Arguments: +- // IRQL = DISPATCH_LEVEL +- ======================================================================== +-*/ +-VOID TriEventCounterMaintenance( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR i; +- BOOLEAN bNotify = FALSE; +- for (i = 0;i < MAX_TRIGGER_EVENT;i++) +- { +- if (pAd->CommonCfg.TriggerEventTab.EventA[i].bValid && (pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter > 0)) +- { +- pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter--; +- if (pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter == 0) +- { +- pAd->CommonCfg.TriggerEventTab.EventA[i].bValid = FALSE; +- pAd->CommonCfg.TriggerEventTab.EventANo --; +- // Need to send 20/40 Coexistence Notify frame if has status change. +- bNotify = TRUE; +- } +- } +- } +- if (pAd->CommonCfg.TriggerEventTab.EventBCountDown > 0) +- { +- pAd->CommonCfg.TriggerEventTab.EventBCountDown--; +- if (pAd->CommonCfg.TriggerEventTab.EventBCountDown == 0) +- bNotify = TRUE; +- } +- +- if (bNotify == TRUE) +- Update2040CoexistFrameAndNotify(pAd, BSSID_WCID, TRUE); +-} +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-// IRQL = DISPATCH_LEVEL +-VOID BssTableSsidSort( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *OutTab, +- IN CHAR Ssid[], +- IN UCHAR SsidLen) +-{ +- INT i; +- BssTableInit(OutTab); +- +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { +- BSS_ENTRY *pInBss = &pAd->ScanTab.BssEntry[i]; +- BOOLEAN bIsHiddenApIncluded = FALSE; +- +- if (((pAd->CommonCfg.bIEEE80211H == 1) && +- (pAd->MlmeAux.Channel > 14) && +- RadarChannelCheck(pAd, pInBss->Channel)) +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- || (pAd->CommonCfg.CarrierDetect.Enable == TRUE) +-#endif // CARRIER_DETECTION_SUPPORT // +- ) +-{ +- if (pInBss->Hidden) +- bIsHiddenApIncluded = TRUE; +-} +- +- if ((pInBss->BssType == pAd->StaCfg.BssType) && +- (SSID_EQUAL(Ssid, SsidLen, pInBss->Ssid, pInBss->SsidLen) || bIsHiddenApIncluded)) +- { +- BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; +- +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- // If no Country IE exists no Connection will be established when IEEE80211dClientMode is strict. +- if ((pAd->StaCfg.IEEE80211dClientMode == Rt802_11_D_Strict) && +- (pInBss->bHasCountryIE == FALSE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("StaCfg.IEEE80211dClientMode == Rt802_11_D_Strict, but this AP doesn't have country IE.\n")); +- continue; +- } +-#endif // EXT_BUILD_CHANNEL_LIST // +- +-#ifdef DOT11_N_SUPPORT +- // 2.4G/5G N only mode +- if ((pInBss->HtCapabilityLen == 0) && +- ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); +- continue; +- } +-#endif // DOT11_N_SUPPORT // +- +- // New for WPA2 +- // Check the Authmode first +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode +- if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) && (pAd->StaCfg.AuthMode != pInBss->AuthModeAux)) +- // None matched +- continue; +- +- // Check cipher suite, AP must have more secured cipher than station setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- // If it's not mixed mode, we should only let BSS pass with the same encryption +- if (pInBss->WPA.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA.GroupCipher) +- continue; +- +- // check group cipher +- if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && +- (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP40Enabled) && +- (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP104Enabled)) +- continue; +- +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipherAux)) +- continue; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // If it's not mixed mode, we should only let BSS pass with the same encryption +- if (pInBss->WPA2.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA2.GroupCipher) +- continue; +- +- // check group cipher +- if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && +- (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP40Enabled) && +- (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP104Enabled)) +- continue; +- +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipherAux)) +- continue; +- } +- } +- // Bss Type matched, SSID matched. +- // We will check wepstatus for qualification Bss +- else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) +- { +- DBGPRINT(RT_DEBUG_TRACE,("StaCfg.WepStatus=%d, while pInBss->WepStatus=%d\n", pAd->StaCfg.WepStatus, pInBss->WepStatus)); +- // +- // For the SESv2 case, we will not qualify WepStatus. +- // +- if (!pInBss->bSES) +- continue; +- } +- +- // Since the AP is using hidden SSID, and we are trying to connect to ANY +- // It definitely will fail. So, skip it. +- // CCX also require not even try to connect it!! +- if (SsidLen == 0) +- continue; +- +-#ifdef DOT11_N_SUPPORT +- // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region +- // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, +- if ((pInBss->CentralChannel != pInBss->Channel) && +- (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- SetCommonHT(pAd); +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- else +- { +- if (pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BAND_WIDTH_20) +- { +- SetCommonHT(pAd); +- } +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- // copy matching BSS from InTab to OutTab +- NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); +- +- OutTab->BssNr++; +- } +- else if ((pInBss->BssType == pAd->StaCfg.BssType) && (SsidLen == 0)) +- { +- BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; +- +- +-#ifdef DOT11_N_SUPPORT +- // 2.4G/5G N only mode +- if ((pInBss->HtCapabilityLen == 0) && +- ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); +- continue; +- } +-#endif // DOT11_N_SUPPORT // +- +- // New for WPA2 +- // Check the Authmode first +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode +- if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) && (pAd->StaCfg.AuthMode != pInBss->AuthModeAux)) +- // None matched +- continue; +- +- // Check cipher suite, AP must have more secured cipher than station setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- // If it's not mixed mode, we should only let BSS pass with the same encryption +- if (pInBss->WPA.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA.GroupCipher) +- continue; +- +- // check group cipher +- if (pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) +- continue; +- +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipherAux)) +- continue; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // If it's not mixed mode, we should only let BSS pass with the same encryption +- if (pInBss->WPA2.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA2.GroupCipher) +- continue; +- +- // check group cipher +- if (pAd->StaCfg.WepStatus < pInBss->WPA2.GroupCipher) +- continue; +- +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipherAux)) +- continue; +- } +- } +- // Bss Type matched, SSID matched. +- // We will check wepstatus for qualification Bss +- else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) +- continue; +- +-#ifdef DOT11_N_SUPPORT +- // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region +- // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, +- if ((pInBss->CentralChannel != pInBss->Channel) && +- (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- SetCommonHT(pAd); +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- // copy matching BSS from InTab to OutTab +- NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); +- +- OutTab->BssNr++; +- } +- +- if (OutTab->BssNr >= MAX_LEN_OF_BSS_TABLE) +- break; +- } +- +- BssTableSortByRssi(OutTab); +-} +- +- +-// IRQL = DISPATCH_LEVEL +-VOID BssTableSortByRssi( +- IN OUT BSS_TABLE *OutTab) +-{ +- INT i, j; +- BSS_ENTRY TmpBss; +- +- for (i = 0; i < OutTab->BssNr - 1; i++) +- { +- for (j = i+1; j < OutTab->BssNr; j++) +- { +- if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi) +- { +- NdisMoveMemory(&TmpBss, &OutTab->BssEntry[j], sizeof(BSS_ENTRY)); +- NdisMoveMemory(&OutTab->BssEntry[j], &OutTab->BssEntry[i], sizeof(BSS_ENTRY)); +- NdisMoveMemory(&OutTab->BssEntry[i], &TmpBss, sizeof(BSS_ENTRY)); +- } +- } +- } +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-VOID BssCipherParse( +- IN OUT PBSS_ENTRY pBss) +-{ +- PEID_STRUCT pEid; +- PUCHAR pTmp; +- PRSN_IE_HEADER_STRUCT pRsnHeader; +- PCIPHER_SUITE_STRUCT pCipher; +- PAKM_SUITE_STRUCT pAKM; +- USHORT Count; +- INT Length; +- NDIS_802_11_ENCRYPTION_STATUS TmpCipher; +- +- // +- // WepStatus will be reset later, if AP announce TKIP or AES on the beacon frame. +- // +- if (pBss->Privacy) +- { +- pBss->WepStatus = Ndis802_11WEPEnabled; +- } +- else +- { +- pBss->WepStatus = Ndis802_11WEPDisabled; +- } +- // Set default to disable & open authentication before parsing variable IE +- pBss->AuthMode = Ndis802_11AuthModeOpen; +- pBss->AuthModeAux = Ndis802_11AuthModeOpen; +- +- // Init WPA setting +- pBss->WPA.PairCipher = Ndis802_11WEPDisabled; +- pBss->WPA.PairCipherAux = Ndis802_11WEPDisabled; +- pBss->WPA.GroupCipher = Ndis802_11WEPDisabled; +- pBss->WPA.RsnCapability = 0; +- pBss->WPA.bMixMode = FALSE; +- +- // Init WPA2 setting +- pBss->WPA2.PairCipher = Ndis802_11WEPDisabled; +- pBss->WPA2.PairCipherAux = Ndis802_11WEPDisabled; +- pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled; +- pBss->WPA2.RsnCapability = 0; +- pBss->WPA2.bMixMode = FALSE; +- +- +- Length = (INT) pBss->VarIELen; +- +- while (Length > 0) +- { +- // Parse cipher suite base on WPA1 & WPA2, they should be parsed differently +- pTmp = ((PUCHAR) pBss->VarIEs) + pBss->VarIELen - Length; +- pEid = (PEID_STRUCT) pTmp; +- switch (pEid->Eid) +- { +- case IE_WPA: +- if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) && (pEid->Len == 7)) +- { +- pBss->bSES = TRUE; +- break; +- } +- else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4) != 1) +- { +- // if unsupported vendor specific IE +- break; +- } +- // Skip OUI, version, and multicast suite +- // This part should be improved in the future when AP supported multiple cipher suite. +- // For now, it's OK since almost all APs have fixed cipher suite supported. +- // pTmp = (PUCHAR) pEid->Octet; +- pTmp += 11; +- +- // Cipher Suite Selectors from Spec P802.11i/D3.2 P26. +- // Value Meaning +- // 0 None +- // 1 WEP-40 +- // 2 Tkip +- // 3 WRAP +- // 4 AES +- // 5 WEP-104 +- // Parse group cipher +- switch (*pTmp) +- { +- case 1: +- pBss->WPA.GroupCipher = Ndis802_11GroupWEP40Enabled; +- break; +- case 5: +- pBss->WPA.GroupCipher = Ndis802_11GroupWEP104Enabled; +- break; +- case 2: +- pBss->WPA.GroupCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- pBss->WPA.GroupCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- // number of unicast suite +- pTmp += 1; +- +- // skip all unicast cipher suites +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // Parsing all unicast cipher suite +- while (Count > 0) +- { +- // Skip OUI +- pTmp += 3; +- TmpCipher = Ndis802_11WEPDisabled; +- switch (*pTmp) +- { +- case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway +- TmpCipher = Ndis802_11Encryption1Enabled; +- break; +- case 2: +- TmpCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- TmpCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- if (TmpCipher > pBss->WPA.PairCipher) +- { +- // Move the lower cipher suite to PairCipherAux +- pBss->WPA.PairCipherAux = pBss->WPA.PairCipher; +- pBss->WPA.PairCipher = TmpCipher; +- } +- else +- { +- pBss->WPA.PairCipherAux = TmpCipher; +- } +- pTmp++; +- Count--; +- } +- +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- pTmp += 3; +- +- switch (*pTmp) +- { +- case 1: +- // Set AP support WPA-enterprise mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA; +- break; +- case 2: +- // Set AP support WPA-PSK mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPAPSK; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPAPSK; +- break; +- default: +- break; +- } +- pTmp += 1; +- +- // Fixed for WPA-None +- if (pBss->BssType == BSS_ADHOC) +- { +- pBss->AuthMode = Ndis802_11AuthModeWPANone; +- pBss->AuthModeAux = Ndis802_11AuthModeWPANone; +- pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } +- else +- pBss->WepStatus = pBss->WPA.PairCipher; +- +- // Check the Pair & Group, if different, turn on mixed mode flag +- if (pBss->WPA.GroupCipher != pBss->WPA.PairCipher) +- pBss->WPA.bMixMode = TRUE; +- +- break; +- +- case IE_RSN: +- pRsnHeader = (PRSN_IE_HEADER_STRUCT) pTmp; +- +- // 0. Version must be 1 +- if (le2cpu16(pRsnHeader->Version) != 1) +- break; +- pTmp += sizeof(RSN_IE_HEADER_STRUCT); +- +- // 1. Check group cipher +- pCipher = (PCIPHER_SUITE_STRUCT) pTmp; +- if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; +- +- // Parse group cipher +- switch (pCipher->Type) +- { +- case 1: +- pBss->WPA2.GroupCipher = Ndis802_11GroupWEP40Enabled; +- break; +- case 5: +- pBss->WPA2.GroupCipher = Ndis802_11GroupWEP104Enabled; +- break; +- case 2: +- pBss->WPA2.GroupCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- pBss->WPA2.GroupCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- // set to correct offset for next parsing +- pTmp += sizeof(CIPHER_SUITE_STRUCT); +- +- // 2. Get pairwise cipher counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // 3. Get pairwise cipher +- // Parsing all unicast cipher suite +- while (Count > 0) +- { +- // Skip OUI +- pCipher = (PCIPHER_SUITE_STRUCT) pTmp; +- TmpCipher = Ndis802_11WEPDisabled; +- switch (pCipher->Type) +- { +- case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway +- TmpCipher = Ndis802_11Encryption1Enabled; +- break; +- case 2: +- TmpCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- TmpCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- if (TmpCipher > pBss->WPA2.PairCipher) +- { +- // Move the lower cipher suite to PairCipherAux +- pBss->WPA2.PairCipherAux = pBss->WPA2.PairCipher; +- pBss->WPA2.PairCipher = TmpCipher; +- } +- else +- { +- pBss->WPA2.PairCipherAux = TmpCipher; +- } +- pTmp += sizeof(CIPHER_SUITE_STRUCT); +- Count--; +- } +- +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // 5. Get AKM ciphers +- // Parsing all AKM ciphers +- while (Count > 0) +- { +- pAKM = (PAKM_SUITE_STRUCT) pTmp; +- if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; +- +- switch (pAKM->Type) +- { +- case 1: +- // Set AP support WPA-enterprise mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2; +- break; +- case 2: +- // Set AP support WPA-PSK mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2PSK; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2PSK; +- break; +- default: +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeMax; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeMax; +- break; +- } +- pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); +- Count--; +- } +- +- // Fixed for WPA-None +- if (pBss->BssType == BSS_ADHOC) +- { +- pBss->AuthMode = Ndis802_11AuthModeWPANone; +- pBss->AuthModeAux = Ndis802_11AuthModeWPANone; +- pBss->WPA.PairCipherAux = pBss->WPA2.PairCipherAux; +- pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher; +- pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } +- pBss->WepStatus = pBss->WPA2.PairCipher; +- +- // 6. Get RSN capability +- //pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; +- pBss->WPA2.RsnCapability = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // Check the Pair & Group, if different, turn on mixed mode flag +- if (pBss->WPA2.GroupCipher != pBss->WPA2.PairCipher) +- pBss->WPA2.bMixMode = TRUE; +- +- break; +- default: +- break; +- } +- Length -= (pEid->Len + 2); +- } +-} +- +-// =========================================================================================== +-// mac_table.c +-// =========================================================================================== +- +-/*! \brief generates a random mac address value for IBSS BSSID +- * \param Addr the bssid location +- * \return none +- * \pre +- * \post +- */ +-VOID MacAddrRandomBssid( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pAddr) +-{ +- INT i; +- +- for (i = 0; i < MAC_ADDR_LEN; i++) +- { +- pAddr[i] = RandomByte(pAd); +- } +- +- pAddr[0] = (pAddr[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx +-} +- +-/*! \brief init the management mac frame header +- * \param p_hdr mac header +- * \param subtype subtype of the frame +- * \param p_ds destination address, don't care if it is a broadcast address +- * \return none +- * \pre the station has the following information in the pAd->StaCfg +- * - bssid +- * - station address +- * \post +- * \note this function initializes the following field +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- */ +-VOID MgtMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid) +-{ +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); +- +- pHdr80211->FC.Type = BTYPE_MGMT; +- pHdr80211->FC.SubType = SubType; +-// if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type +-// pHdr80211->FC.Type = BTYPE_CNTL; +- pHdr80211->FC.ToDs = ToDs; +- COPY_MAC_ADDR(pHdr80211->Addr1, pDA); +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); +-#endif // CONFIG_STA_SUPPORT // +- COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); +-} +- +-// =========================================================================================== +-// mem_mgmt.c +-// =========================================================================================== +- +-/*!*************************************************************************** +- * This routine build an outgoing frame, and fill all information specified +- * in argument list to the frame body. The actual frame size is the summation +- * of all arguments. +- * input params: +- * Buffer - pointer to a pre-allocated memory segment +- * args - a list of pairs. +- * NOTE NOTE NOTE!!!! the last argument must be NULL, otherwise this +- * function will FAIL!!! +- * return: +- * Size of the buffer +- * usage: +- * MakeOutgoingFrame(Buffer, output_length, 2, &fc, 2, &dur, 6, p_addr1, 6,p_addr2, END_OF_ARGS); +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ****************************************************************************/ +-ULONG MakeOutgoingFrame( +- OUT UCHAR *Buffer, +- OUT ULONG *FrameLen, ...) +-{ +- UCHAR *p; +- int leng; +- ULONG TotLeng; +- va_list Args; +- +- // calculates the total length +- TotLeng = 0; +- va_start(Args, FrameLen); +- do +- { +- leng = va_arg(Args, int); +- if (leng == END_OF_ARGS) +- { +- break; +- } +- p = va_arg(Args, PVOID); +- NdisMoveMemory(&Buffer[TotLeng], p, leng); +- TotLeng = TotLeng + leng; +- } while(TRUE); +- +- va_end(Args); /* clean up */ +- *FrameLen = TotLeng; +- return TotLeng; +-} +- +-// =========================================================================================== +-// mlme_queue.c +-// =========================================================================================== +- +-/*! \brief Initialize The MLME Queue, used by MLME Functions +- * \param *Queue The MLME Queue +- * \return Always Return NDIS_STATE_SUCCESS in this implementation +- * \pre +- * \post +- * \note Because this is done only once (at the init stage), no need to be locked +- +- IRQL = PASSIVE_LEVEL +- +- */ +-NDIS_STATUS MlmeQueueInit( +- IN MLME_QUEUE *Queue) +-{ +- INT i; +- +- NdisAllocateSpinLock(&Queue->Lock); +- +- Queue->Num = 0; +- Queue->Head = 0; +- Queue->Tail = 0; +- +- for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++) +- { +- Queue->Entry[i].Occupied = FALSE; +- Queue->Entry[i].MsgLen = 0; +- NdisZeroMemory(Queue->Entry[i].Msg, MGMT_DMA_BUFFER_SIZE); +- } +- +- return NDIS_STATUS_SUCCESS; +-} +- +-/*! \brief Enqueue a message for other threads, if they want to send messages to MLME thread +- * \param *Queue The MLME Queue +- * \param Machine The State Machine Id +- * \param MsgType The Message Type +- * \param MsgLen The Message length +- * \param *Msg The message pointer +- * \return TRUE if enqueue is successful, FALSE if the queue is full +- * \pre +- * \post +- * \note The message has to be initialized +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- */ +-BOOLEAN MlmeEnqueue( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg) +-{ +- INT Tail; +- MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return FALSE; +- +- // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { +- DBGPRINT_ERR(("MlmeEnqueue: msg too large, size = %ld \n", MsgLen)); +- return FALSE; +- } +- +- if (MlmeQueueFull(Queue)) +- { +- return FALSE; +- } +- +- NdisAcquireSpinLock(&(Queue->Lock)); +- Tail = Queue->Tail; +- Queue->Tail++; +- Queue->Num++; +- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { +- Queue->Tail = 0; +- } +- +- Queue->Entry[Tail].Wcid = RESERVED_WCID; +- Queue->Entry[Tail].Occupied = TRUE; +- Queue->Entry[Tail].Machine = Machine; +- Queue->Entry[Tail].MsgType = MsgType; +- Queue->Entry[Tail].MsgLen = MsgLen; +- +- if (Msg != NULL) +- { +- NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); +- } +- +- NdisReleaseSpinLock(&(Queue->Lock)); +- return TRUE; +-} +- +-/*! \brief This function is used when Recv gets a MLME message +- * \param *Queue The MLME Queue +- * \param TimeStampHigh The upper 32 bit of timestamp +- * \param TimeStampLow The lower 32 bit of timestamp +- * \param Rssi The receiving RSSI strength +- * \param MsgLen The length of the message +- * \param *Msg The message pointer +- * \return TRUE if everything ok, FALSE otherwise (like Queue Full) +- * \pre +- * \post +- +- IRQL = DISPATCH_LEVEL +- +- */ +-BOOLEAN MlmeEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, +- IN VOID *Msg, +- IN UCHAR Signal) +-{ +- INT Tail, Machine; +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- INT MsgType; +- MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; +- +-#ifdef RALINK_ATE +- /* Nothing to do in ATE mode */ +- if(ATE_ON(pAd)) +- return FALSE; +-#endif // RALINK_ATE // +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- DBGPRINT_ERR(("MlmeEnqueueForRecv: fRTMP_ADAPTER_HALT_IN_PROGRESS\n")); +- return FALSE; +- } +- +- // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { +- DBGPRINT_ERR(("MlmeEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); +- return FALSE; +- } +- +- if (MlmeQueueFull(Queue)) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (!MsgTypeSubst(pAd, pFrame, &Machine, &MsgType)) +- { +- DBGPRINT_ERR(("MlmeEnqueueForRecv: un-recongnized mgmt->subtype=%d\n",pFrame->Hdr.FC.SubType)); +- return FALSE; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // OK, we got all the informations, it is time to put things into queue +- NdisAcquireSpinLock(&(Queue->Lock)); +- Tail = Queue->Tail; +- Queue->Tail++; +- Queue->Num++; +- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { +- Queue->Tail = 0; +- } +- Queue->Entry[Tail].Occupied = TRUE; +- Queue->Entry[Tail].Machine = Machine; +- Queue->Entry[Tail].MsgType = MsgType; +- Queue->Entry[Tail].MsgLen = MsgLen; +- Queue->Entry[Tail].TimeStamp.u.LowPart = TimeStampLow; +- Queue->Entry[Tail].TimeStamp.u.HighPart = TimeStampHigh; +- Queue->Entry[Tail].Rssi0 = Rssi0; +- Queue->Entry[Tail].Rssi1 = Rssi1; +- Queue->Entry[Tail].Rssi2 = Rssi2; +- Queue->Entry[Tail].Signal = Signal; +- Queue->Entry[Tail].Wcid = (UCHAR)Wcid; +- +- Queue->Entry[Tail].Channel = pAd->LatchRfRegs.Channel; +- +- if (Msg != NULL) +- { +- NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); +- } +- +- NdisReleaseSpinLock(&(Queue->Lock)); +- +- RTMP_MLME_HANDLER(pAd); +- +- return TRUE; +-} +- +- +-/*! \brief Dequeue a message from the MLME Queue +- * \param *Queue The MLME Queue +- * \param *Elem The message dequeued from MLME Queue +- * \return TRUE if the Elem contains something, FALSE otherwise +- * \pre +- * \post +- +- IRQL = DISPATCH_LEVEL +- +- */ +-BOOLEAN MlmeDequeue( +- IN MLME_QUEUE *Queue, +- OUT MLME_QUEUE_ELEM **Elem) +-{ +- NdisAcquireSpinLock(&(Queue->Lock)); +- *Elem = &(Queue->Entry[Queue->Head]); +- Queue->Num--; +- Queue->Head++; +- if (Queue->Head == MAX_LEN_OF_MLME_QUEUE) +- { +- Queue->Head = 0; +- } +- NdisReleaseSpinLock(&(Queue->Lock)); +- return TRUE; +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID MlmeRestartStateMachine( +- IN PRTMP_ADAPTER pAd) +-{ +-#ifdef RTMP_MAC_PCI +- MLME_QUEUE_ELEM *Elem = NULL; +-#endif // RTMP_MAC_PCI // +-#ifdef CONFIG_STA_SUPPORT +- BOOLEAN Cancelled; +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeRestartStateMachine \n")); +- +-#ifdef RTMP_MAC_PCI +- NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- if(pAd->Mlme.bRunning) +- { +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +- return; +- } +- else +- { +- pAd->Mlme.bRunning = TRUE; +- } +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +- +- // Remove all Mlme queues elements +- while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) +- { +- //From message type, determine which state machine I should drive +- if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) +- { +- // free MLME element +- Elem->Occupied = FALSE; +- Elem->MsgLen = 0; +- +- } +- else { +- DBGPRINT_ERR(("MlmeRestartStateMachine: MlmeQueue empty\n")); +- } +- } +-#endif // RTMP_MAC_PCI // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef QOS_DLS_SUPPORT +- UCHAR i; +-#endif // QOS_DLS_SUPPORT // +- // Cancel all timer events +- // Be careful to cancel new added timer +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- +-#ifdef QOS_DLS_SUPPORT +- for (i=0; iStaCfg.DLSEntry[i].Timer, &Cancelled); +- } +-#endif // QOS_DLS_SUPPORT // +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Change back to original channel in case of doing scan +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- // Resume MSDU which is turned off durning scan +- RTMPResumeMsduTransmission(pAd); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Set all state machines back IDLE +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE; +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- pAd->Mlme.ActMachine.CurrState = ACT_IDLE; +-#ifdef QOS_DLS_SUPPORT +- pAd->Mlme.DlsMachine.CurrState = DLS_IDLE; +-#endif // QOS_DLS_SUPPORT // +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RTMP_MAC_PCI +- // Remove running state +- NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- pAd->Mlme.bRunning = FALSE; +- NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +-#endif // RTMP_MAC_PCI // +-} +- +-/*! \brief test if the MLME Queue is empty +- * \param *Queue The MLME Queue +- * \return TRUE if the Queue is empty, FALSE otherwise +- * \pre +- * \post +- +- IRQL = DISPATCH_LEVEL +- +- */ +-BOOLEAN MlmeQueueEmpty( +- IN MLME_QUEUE *Queue) +-{ +- BOOLEAN Ans; +- +- NdisAcquireSpinLock(&(Queue->Lock)); +- Ans = (Queue->Num == 0); +- NdisReleaseSpinLock(&(Queue->Lock)); +- +- return Ans; +-} +- +-/*! \brief test if the MLME Queue is full +- * \param *Queue The MLME Queue +- * \return TRUE if the Queue is empty, FALSE otherwise +- * \pre +- * \post +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- */ +-BOOLEAN MlmeQueueFull( +- IN MLME_QUEUE *Queue) +-{ +- BOOLEAN Ans; +- +- NdisAcquireSpinLock(&(Queue->Lock)); +- Ans = (Queue->Num == MAX_LEN_OF_MLME_QUEUE || Queue->Entry[Queue->Tail].Occupied); +- NdisReleaseSpinLock(&(Queue->Lock)); +- +- return Ans; +-} +- +-/*! \brief The destructor of MLME Queue +- * \param +- * \return +- * \pre +- * \post +- * \note Clear Mlme Queue, Set Queue->Num to Zero. +- +- IRQL = PASSIVE_LEVEL +- +- */ +-VOID MlmeQueueDestroy( +- IN MLME_QUEUE *pQueue) +-{ +- NdisAcquireSpinLock(&(pQueue->Lock)); +- pQueue->Num = 0; +- pQueue->Head = 0; +- pQueue->Tail = 0; +- NdisReleaseSpinLock(&(pQueue->Lock)); +- NdisFreeSpinLock(&(pQueue->Lock)); +-} +- +- +-/*! \brief To substitute the message type if the message is coming from external +- * \param pFrame The frame received +- * \param *Machine The state machine +- * \param *MsgType the message type for the state machine +- * \return TRUE if the substitution is successful, FALSE otherwise +- * \pre +- * \post +- +- IRQL = DISPATCH_LEVEL +- +- */ +-#ifdef CONFIG_STA_SUPPORT +-BOOLEAN MsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType) +-{ +- USHORT Seq, Alg; +- UCHAR EAPType; +- PUCHAR pData; +- +- // Pointer to start of data frames including SNAP header +- pData = (PUCHAR) pFrame + LENGTH_802_11; +- +- // The only data type will pass to this function is EAPOL frame +- if (pFrame->Hdr.FC.Type == BTYPE_DATA) +- { +- { +- *Machine = WPA_STATE_MACHINE; +- EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1); +- return (WpaMsgTypeSubst(EAPType, (INT *) MsgType)); +- } +- } +- +- switch (pFrame->Hdr.FC.SubType) +- { +- case SUBTYPE_ASSOC_REQ: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_ASSOC_REQ; +- break; +- case SUBTYPE_ASSOC_RSP: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_ASSOC_RSP; +- break; +- case SUBTYPE_REASSOC_REQ: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_REASSOC_REQ; +- break; +- case SUBTYPE_REASSOC_RSP: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_REASSOC_RSP; +- break; +- case SUBTYPE_PROBE_REQ: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_PROBE_REQ; +- break; +- case SUBTYPE_PROBE_RSP: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_PROBE_RSP; +- break; +- case SUBTYPE_BEACON: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_BEACON; +- break; +- case SUBTYPE_ATIM: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_ATIM; +- break; +- case SUBTYPE_DISASSOC: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_DISASSOC_REQ; +- break; +- case SUBTYPE_AUTH: +- // get the sequence number from payload 24 Mac Header + 2 bytes algorithm +- NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); +- NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); +- if (Seq == 1 || Seq == 3) +- { +- *Machine = AUTH_RSP_STATE_MACHINE; +- *MsgType = MT2_PEER_AUTH_ODD; +- } +- else if (Seq == 2 || Seq == 4) +- { +- if (Alg == AUTH_MODE_OPEN || Alg == AUTH_MODE_KEY) +- { +- *Machine = AUTH_STATE_MACHINE; +- *MsgType = MT2_PEER_AUTH_EVEN; +- } +- } +- else +- { +- return FALSE; +- } +- break; +- case SUBTYPE_DEAUTH: +- *Machine = AUTH_RSP_STATE_MACHINE; +- *MsgType = MT2_PEER_DEAUTH; +- break; +- case SUBTYPE_ACTION: +- *Machine = ACTION_STATE_MACHINE; +- // Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support +- if ((pFrame->Octet[0]&0x7F) > MAX_PEER_CATE_MSG) +- { +- *MsgType = MT2_ACT_INVALID; +- } +- else +- { +- *MsgType = (pFrame->Octet[0]&0x7F); +- } +- break; +- default: +- return FALSE; +- break; +- } +- +- return TRUE; +-} +-#endif // CONFIG_STA_SUPPORT // +- +-// =========================================================================================== +-// state_machine.c +-// =========================================================================================== +- +-/*! \brief Initialize the state machine. +- * \param *S pointer to the state machine +- * \param Trans State machine transition function +- * \param StNr number of states +- * \param MsgNr number of messages +- * \param DefFunc default function, when there is invalid state/message combination +- * \param InitState initial state of the state machine +- * \param Base StateMachine base, internal use only +- * \pre p_sm should be a legal pointer +- * \post +- +- IRQL = PASSIVE_LEVEL +- +- */ +-VOID StateMachineInit( +- IN STATE_MACHINE *S, +- IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, +- IN ULONG Base) +-{ +- ULONG i, j; +- +- // set number of states and messages +- S->NrState = StNr; +- S->NrMsg = MsgNr; +- S->Base = Base; +- +- S->TransFunc = Trans; +- +- // init all state transition to default function +- for (i = 0; i < StNr; i++) +- { +- for (j = 0; j < MsgNr; j++) +- { +- S->TransFunc[i * MsgNr + j] = DefFunc; +- } +- } +- +- // set the starting state +- S->CurrState = InitState; +-} +- +-/*! \brief This function fills in the function pointer into the cell in the state machine +- * \param *S pointer to the state machine +- * \param St state +- * \param Msg incoming message +- * \param f the function to be executed when (state, message) combination occurs at the state machine +- * \pre *S should be a legal pointer to the state machine, st, msg, should be all within the range, Base should be set in the initial state +- * \post +- +- IRQL = PASSIVE_LEVEL +- +- */ +-VOID StateMachineSetAction( +- IN STATE_MACHINE *S, +- IN ULONG St, +- IN ULONG Msg, +- IN STATE_MACHINE_FUNC Func) +-{ +- ULONG MsgIdx; +- +- MsgIdx = Msg - S->Base; +- +- if (St < S->NrState && MsgIdx < S->NrMsg) +- { +- // boundary checking before setting the action +- S->TransFunc[St * S->NrMsg + MsgIdx] = Func; +- } +-} +- +-/*! \brief This function does the state transition +- * \param *Adapter the NIC adapter pointer +- * \param *S the state machine +- * \param *Elem the message to be executed +- * \return None +- +- IRQL = DISPATCH_LEVEL +- +- */ +-VOID StateMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base]))(pAd, Elem); +-} +- +-/* +- ========================================================================== +- Description: +- The drop function, when machine executes this, the message is simply +- ignored. This function does nothing, the message is freed in +- StateMachinePerformAction() +- ========================================================================== +- */ +-VOID Drop( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +-} +- +-// =========================================================================================== +-// lfsr.c +-// =========================================================================================== +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-VOID LfsrInit( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Seed) +-{ +- if (Seed == 0) +- pAd->Mlme.ShiftReg = 1; +- else +- pAd->Mlme.ShiftReg = Seed; +-} +- +-/* +- ========================================================================== +- Description: +- ========================================================================== +- */ +-UCHAR RandomByte( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG i; +- UCHAR R, Result; +- +- R = 0; +- +- if (pAd->Mlme.ShiftReg == 0) +- NdisGetSystemUpTime((ULONG *)&pAd->Mlme.ShiftReg); +- +- for (i = 0; i < 8; i++) +- { +- if (pAd->Mlme.ShiftReg & 0x00000001) +- { +- pAd->Mlme.ShiftReg = ((pAd->Mlme.ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000; +- Result = 1; +- } +- else +- { +- pAd->Mlme.ShiftReg = pAd->Mlme.ShiftReg >> 1; +- Result = 0; +- } +- R = (R << 1) | Result; +- } +- +- return R; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Verify the support rate for different PHY type +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPCheckRates( +- IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], +- IN OUT UCHAR *SupRateLen) +-{ +- UCHAR RateIdx, i, j; +- UCHAR NewRate[12], NewRateLen; +- +- NewRateLen = 0; +- +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- RateIdx = 4; +- else +- RateIdx = 12; +- +- // Check for support rates exclude basic rate bit +- for (i = 0; i < *SupRateLen; i++) +- for (j = 0; j < RateIdx; j++) +- if ((SupRate[i] & 0x7f) == RateIdTo500Kbps[j]) +- NewRate[NewRateLen++] = SupRate[i]; +- +- *SupRateLen = NewRateLen; +- NdisMoveMemory(SupRate, NewRate, NewRateLen); +-} +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef DOT11_N_SUPPORT +-BOOLEAN RTMPCheckChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, +- IN UCHAR Channel) +-{ +- UCHAR k; +- UCHAR UpperChannel = 0, LowerChannel = 0; +- UCHAR NoEffectChannelinList = 0; +- +- // Find upper and lower channel according to 40MHz current operation. +- if (CentralChannel < Channel) +- { +- UpperChannel = Channel; +- if (CentralChannel > 2) +- LowerChannel = CentralChannel - 2; +- else +- return FALSE; +- } +- else if (CentralChannel > Channel) +- { +- UpperChannel = CentralChannel + 2; +- LowerChannel = Channel; +- } +- +- for (k = 0;k < pAd->ChannelListNum;k++) +- { +- if (pAd->ChannelList[k].Channel == UpperChannel) +- { +- NoEffectChannelinList ++; +- } +- if (pAd->ChannelList[k].Channel == LowerChannel) +- { +- NoEffectChannelinList ++; +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("Total Channel in Channel List = [%d]\n", NoEffectChannelinList)); +- if (NoEffectChannelinList == 2) +- return TRUE; +- else +- return FALSE; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Verify the support rate for HT phy type +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- FALSE if pAd->CommonCfg.SupportedHtPhy doesn't accept the pHtCapability. (AP Mode) +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-BOOLEAN RTMPCheckHt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo) +-{ +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- return FALSE; +- +- // If use AMSDU, set flag. +- if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_AMSDU_INUSED); +- // Save Peer Capability +- if (pHtCapability->HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_SGI20_CAPABLE); +- if (pHtCapability->HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_SGI40_CAPABLE); +- if (pHtCapability->HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_TxSTBC_CAPABLE); +- if (pHtCapability->HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) +- { +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_RDG_CAPABLE); +- } +- +- if (Wcid < MAX_LEN_OF_MAC_TABLE) +- { +- pAd->MacTab.Content[Wcid].MpduDensity = pHtCapability->HtCapParm.MpduDensity; +- } +- +- // Will check ChannelWidth for MCSSet[4] below +- pAd->MlmeAux.HtCapability.MCSSet[4] = 0x1; +- switch (pAd->CommonCfg.RxStream) +- { +- case 1: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- case 2: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- case 3: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- } +- +- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy.ChannelWidth; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPCheckHt:: HtCapInfo.ChannelWidth=%d, RecomWidth=%d, DesiredHtPhy.ChannelWidth=%d, BW40MAvailForA/G=%d/%d, PhyMode=%d \n", +- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth, pAddHtInfo->AddHtInfo.RecomWidth, pAd->CommonCfg.DesiredHtPhy.ChannelWidth, +- pAd->NicConfig2.field.BW40MAvailForA, pAd->NicConfig2.field.BW40MAvailForG, pAd->CommonCfg.PhyMode)); +- +- pAd->MlmeAux.HtCapability.HtCapInfo.GF = pHtCapability->HtCapInfo.GF &pAd->CommonCfg.DesiredHtPhy.GF; +- +- // Send Assoc Req with my HT capability. +- pAd->MlmeAux.HtCapability.HtCapInfo.AMsduSize = pAd->CommonCfg.DesiredHtPhy.AmsduSize; +- pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs = pAd->CommonCfg.DesiredHtPhy.MimoPs; +- pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20) & (pHtCapability->HtCapInfo.ShortGIfor20); +- pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40) & (pHtCapability->HtCapInfo.ShortGIfor40); +- pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC = (pAd->CommonCfg.DesiredHtPhy.TxSTBC)&(pHtCapability->HtCapInfo.RxSTBC); +- pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC = (pAd->CommonCfg.DesiredHtPhy.RxSTBC)&(pHtCapability->HtCapInfo.TxSTBC); +- pAd->MlmeAux.HtCapability.HtCapParm.MaxRAmpduFactor = pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor; +- pAd->MlmeAux.HtCapability.HtCapParm.MpduDensity = pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity; +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = pHtCapability->ExtHtCapInfo.PlusHTC; +- pAd->MacTab.Content[Wcid].HTCapability.ExtHtCapInfo.PlusHTC = pHtCapability->ExtHtCapInfo.PlusHTC; +- if (pAd->CommonCfg.bRdg) +- { +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.RDGSupport = pHtCapability->ExtHtCapInfo.RDGSupport; +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = 1; +- } +- +- if (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_20) +- pAd->MlmeAux.HtCapability.MCSSet[4] = 0x0; // BW20 can't transmit MCS32 +- +- COPY_AP_HTSETTINGS_FROM_BEACON(pAd, pHtCapability); +- return TRUE; +-} +-#endif // DOT11_N_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-/* +- ======================================================================== +- +- Routine Description: +- Verify the support rate for different PHY type +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPUpdateMlmeRate( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR MinimumRate; +- UCHAR ProperMlmeRate; //= RATE_54; +- UCHAR i, j, RateIdx = 12; //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +- BOOLEAN bMatch = FALSE; +- +- switch (pAd->CommonCfg.PhyMode) +- { +- case PHY_11B: +- ProperMlmeRate = RATE_11; +- MinimumRate = RATE_1; +- break; +- case PHY_11BG_MIXED: +-#ifdef DOT11_N_SUPPORT +- case PHY_11ABGN_MIXED: +- case PHY_11BGN_MIXED: +-#endif // DOT11_N_SUPPORT // +- if ((pAd->MlmeAux.SupRateLen == 4) && +- (pAd->MlmeAux.ExtRateLen == 0)) +- // B only AP +- ProperMlmeRate = RATE_11; +- else +- ProperMlmeRate = RATE_24; +- +- if (pAd->MlmeAux.Channel <= 14) +- MinimumRate = RATE_1; +- else +- MinimumRate = RATE_6; +- break; +- case PHY_11A: +-#ifdef DOT11_N_SUPPORT +- case PHY_11N_2_4G: // rt2860 need to check mlmerate for 802.11n +- case PHY_11GN_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11AN_MIXED: +- case PHY_11N_5G: +-#endif // DOT11_N_SUPPORT // +- ProperMlmeRate = RATE_24; +- MinimumRate = RATE_6; +- break; +- case PHY_11ABG_MIXED: +- ProperMlmeRate = RATE_24; +- if (pAd->MlmeAux.Channel <= 14) +- MinimumRate = RATE_1; +- else +- MinimumRate = RATE_6; +- break; +- default: // error +- ProperMlmeRate = RATE_1; +- MinimumRate = RATE_1; +- break; +- } +- +- for (i = 0; i < pAd->MlmeAux.SupRateLen; i++) +- { +- for (j = 0; j < RateIdx; j++) +- { +- if ((pAd->MlmeAux.SupRate[i] & 0x7f) == RateIdTo500Kbps[j]) +- { +- if (j == ProperMlmeRate) +- { +- bMatch = TRUE; +- break; +- } +- } +- } +- +- if (bMatch) +- break; +- } +- +- if (bMatch == FALSE) +- { +- for (i = 0; i < pAd->MlmeAux.ExtRateLen; i++) +- { +- for (j = 0; j < RateIdx; j++) +- { +- if ((pAd->MlmeAux.ExtRate[i] & 0x7f) == RateIdTo500Kbps[j]) +- { +- if (j == ProperMlmeRate) +- { +- bMatch = TRUE; +- break; +- } +- } +- } +- +- if (bMatch) +- break; +- } +- } +- +- if (bMatch == FALSE) +- { +- ProperMlmeRate = MinimumRate; +- } +- +- pAd->CommonCfg.MlmeRate = MinimumRate; +- pAd->CommonCfg.RtsRate = ProperMlmeRate; +- if (pAd->CommonCfg.MlmeRate >= RATE_6) +- { +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_OFDM; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- else +- { +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- pAd->CommonCfg.MlmeTransmit.field.MCS = pAd->CommonCfg.MlmeRate; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_CCK; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = pAd->CommonCfg.MlmeRate; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateMlmeRate ==> MlmeTransmit = 0x%x \n" , pAd->CommonCfg.MlmeTransmit.word)); +-} +- +-CHAR RTMPMaxRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2) +-{ +- CHAR larger = -127; +- +- if ((pAd->Antenna.field.RxPath == 1) && (Rssi0 != 0)) +- { +- larger = Rssi0; +- } +- +- if ((pAd->Antenna.field.RxPath >= 2) && (Rssi1 != 0)) +- { +- larger = max(Rssi0, Rssi1); +- } +- +- if ((pAd->Antenna.field.RxPath == 3) && (Rssi2 != 0)) +- { +- larger = max(larger, Rssi2); +- } +- +- if (larger == -127) +- larger = 0; +- +- return larger; +-} +- +- +-/* +- ======================================================================== +- Routine Description: +- Periodic evaluate antenna link status +- +- Arguments: +- pAd - Adapter pointer +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID AsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd) +-{ +-#ifdef CONFIG_STA_SUPPORT +- UCHAR BBPR3 = 0; +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_NIC_NOT_EXIST | +- fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) || +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-#ifdef RT3090 +- || (pAd->bPCIclkOff == TRUE) +-#endif // RT3090 // +-#ifdef ANT_DIVERSITY_SUPPORT +- || (pAd->EepromAccess) +-#endif // ANT_DIVERSITY_SUPPORT // +- ) +- return; +- +-#ifdef ANT_DIVERSITY_SUPPORT +- if ((pAd->NicConfig2.field.AntDiversity) && (pAd->CommonCfg.bRxAntDiversity == ANT_DIVERSITY_ENABLE)) +- { +- // two antenna selection mechanism- one is antenna diversity, the other is failed antenna remove +- // one is antenna diversity:there is only one antenna can rx and tx +- // the other is failed antenna remove:two physical antenna can rx and tx +- DBGPRINT(RT_DEBUG_TRACE,("AntDiv - before evaluate Pair1-Ant (%d,%d)\n", +- pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt)); +- +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1SecondaryRxAnt); +- +- pAd->RxAnt.EvaluatePeriod = 1; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt +- pAd->RxAnt.FirstPktArrivedWhenEvaluate = FALSE; +- pAd->RxAnt.RcvPktNumWhenEvaluate = 0; +- +- // a one-shot timer to end the evalution +- // dynamic adjust antenna evaluation period according to the traffic +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 100); +- else +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300); +- } +- else +-#endif // ANT_DIVERSITY_SUPPORT // +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- +- if (pAd->StaCfg.Psm == PWR_SAVE) +- return; +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +- BBPR3 &= (~0x18); +- if(pAd->Antenna.field.RxPath == 3) +- { +- BBPR3 |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- BBPR3 |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- BBPR3 |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +-#ifdef RTMP_MAC_PCI +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- pAd->StaCfg.BBPR3 = BBPR3; +-#endif // RTMP_MAC_PCI // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- { +- ULONG TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- // dynamic adjust antenna evaluation period according to the traffic +- if (TxTotalCnt > 50) +- { +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 20); +- pAd->Mlme.bLowThroughput = FALSE; +- } +- else +- { +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300); +- pAd->Mlme.bLowThroughput = TRUE; +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- } +-} +- +-/* +- ======================================================================== +- Routine Description: +- After evaluation, check antenna link status +- +- Arguments: +- pAd - Adapter pointer +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID AsicRxAntEvalTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- BOOLEAN bSwapAnt = FALSE; +-#ifdef CONFIG_STA_SUPPORT +- UCHAR BBPR3 = 0; +- CHAR larger = -127, rssi0, rssi1, rssi2; +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_NIC_NOT_EXIST) || +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-#ifdef RT3090 +- || (pAd->bPCIclkOff == TRUE) +-#endif // RT3090 // +-#ifdef ANT_DIVERSITY_SUPPORT +- || (pAd->EepromAccess) +-#endif // ANT_DIVERSITY_SUPPORT // +- ) +- return; +- +-#ifdef ANT_DIVERSITY_SUPPORT +- if ((pAd->NicConfig2.field.AntDiversity) && (pAd->CommonCfg.bRxAntDiversity == ANT_DIVERSITY_ENABLE)) +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- if ((pAd->RxAnt.RcvPktNumWhenEvaluate != 0) && (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >= pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt])) +- bSwapAnt = TRUE; +-#endif // CONFIG_STA_SUPPORT // +- if (bSwapAnt == TRUE) +- { +- UCHAR temp; +- +- // +- // select PrimaryRxAntPair +- // Role change, Used Pair1SecondaryRxAnt as PrimaryRxAntPair. +- // Since Pair1SecondaryRxAnt Quality good than Pair1PrimaryRxAnt +- // +- temp = pAd->RxAnt.Pair1PrimaryRxAnt; +- pAd->RxAnt.Pair1PrimaryRxAnt = pAd->RxAnt.Pair1SecondaryRxAnt; +- pAd->RxAnt.Pair1SecondaryRxAnt = temp; +- +-#ifdef CONFIG_STA_SUPPORT +- pAd->RxAnt.Pair1LastAvgRssi = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >> 3); +-#endif // CONFIG_STA_SUPPORT // +-// pAd->RxAnt.EvaluateStableCnt = 0; +- } +- else +- { +- // if the evaluated antenna is not better than original, switch back to original antenna +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +- pAd->RxAnt.EvaluateStableCnt ++; +- } +- +- pAd->RxAnt.EvaluatePeriod = 0; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt +- +-#ifdef CONFIG_STA_SUPPORT +- DBGPRINT(RT_DEBUG_TRACE,("AsicRxAntEvalAction::After Eval(fix in #%d), <%d, %d>, RcvPktNumWhenEvaluate=%ld\n", +- pAd->RxAnt.Pair1PrimaryRxAnt, (pAd->RxAnt.Pair1AvgRssi[0] >> 3), (pAd->RxAnt.Pair1AvgRssi[1] >> 3), pAd->RxAnt.RcvPktNumWhenEvaluate)); +-#endif // CONFIG_STA_SUPPORT // +- } +- else +-#endif // ANT_DIVERSITY_SUPPORT // +- { +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->StaCfg.Psm == PWR_SAVE) +- return; +- +- +- // if the traffic is low, use average rssi as the criteria +- if (pAd->Mlme.bLowThroughput == TRUE) +- { +- rssi0 = pAd->StaCfg.RssiSample.LastRssi0; +- rssi1 = pAd->StaCfg.RssiSample.LastRssi1; +- rssi2 = pAd->StaCfg.RssiSample.LastRssi2; +- } +- else +- { +- rssi0 = pAd->StaCfg.RssiSample.AvgRssi0; +- rssi1 = pAd->StaCfg.RssiSample.AvgRssi1; +- rssi2 = pAd->StaCfg.RssiSample.AvgRssi2; +- } +- +- if(pAd->Antenna.field.RxPath == 3) +- { +- larger = max(rssi0, rssi1); +- +- if (larger > (rssi2 + 20)) +- pAd->Mlme.RealRxPath = 2; +- else +- pAd->Mlme.RealRxPath = 3; +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- if (rssi0 > (rssi1 + 20)) +- pAd->Mlme.RealRxPath = 1; +- else +- pAd->Mlme.RealRxPath = 2; +- } +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +- BBPR3 &= (~0x18); +- if(pAd->Mlme.RealRxPath == 3) +- { +- BBPR3 |= (0x10); +- } +- else if(pAd->Mlme.RealRxPath == 2) +- { +- BBPR3 |= (0x8); +- } +- else if(pAd->Mlme.RealRxPath == 1) +- { +- BBPR3 |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = BBPR3; +-#endif // RTMP_MAC_PCI // +- } +-#endif // CONFIG_STA_SUPPORT // +- } +-} +- +- +-VOID APSDPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- return; +- +- pAd->CommonCfg.TriggerTimerCount++; +- +-// Driver should not send trigger frame, it should be send by application layer +-/* +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable +- && (pAd->CommonCfg.bNeedSendTriggerFrame || +- (((pAd->CommonCfg.TriggerTimerCount%20) == 19) && (!pAd->CommonCfg.bAPSDAC_BE || !pAd->CommonCfg.bAPSDAC_BK || !pAd->CommonCfg.bAPSDAC_VI || !pAd->CommonCfg.bAPSDAC_VO)))) +- { +- DBGPRINT(RT_DEBUG_TRACE,("Sending trigger frame and enter service period when support APSD\n")); +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- pAd->CommonCfg.bNeedSendTriggerFrame = FALSE; +- pAd->CommonCfg.TriggerTimerCount = 0; +- pAd->CommonCfg.bInServicePeriod = TRUE; +- }*/ +-} +- +-/* +- ======================================================================== +- Routine Description: +- Set/reset MAC registers according to bPiggyBack parameter +- +- Arguments: +- pAd - Adapter pointer +- bPiggyBack - Enable / Disable Piggy-Back +- +- Return Value: +- None +- +- ======================================================================== +-*/ +-VOID RTMPSetPiggyBack( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bPiggyBack) +-{ +- TX_LINK_CFG_STRUC TxLinkCfg; +- +- RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); +- +- TxLinkCfg.field.TxCFAckEn = bPiggyBack; +- RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); +-} +- +-/* +- ======================================================================== +- Routine Description: +- check if this entry need to switch rate automatically +- +- Arguments: +- pAd +- pEntry +- +- Return Value: +- TURE +- FALSE +- +- ======================================================================== +-*/ +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry) +-{ +- BOOLEAN result = TRUE; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // only associated STA counts +- if (pEntry && (pEntry->ValidAsCLI) && (pEntry->Sst == SST_ASSOC)) +- { +- result = pAd->StaCfg.bAutoTxRateSwitch; +- } +- else +- result = FALSE; +- +-#ifdef QOS_DLS_SUPPORT +- if (pEntry && (pEntry->ValidAsDls)) +- result = pAd->StaCfg.bAutoTxRateSwitch; +-#endif // QOS_DLS_SUPPORT // +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- return result; +-} +- +- +-BOOLEAN RTMPAutoRateSwitchCheck( +- IN PRTMP_ADAPTER pAd) +-{ +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->StaCfg.bAutoTxRateSwitch) +- return TRUE; +- } +-#endif // CONFIG_STA_SUPPORT // +- return FALSE; +-} +- +- +-/* +- ======================================================================== +- Routine Description: +- check if this entry need to fix tx legacy rate +- +- Arguments: +- pAd +- pEntry +- +- Return Value: +- TURE +- FALSE +- +- ======================================================================== +-*/ +-UCHAR RTMPStaFixedTxMode( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry) +-{ +- UCHAR tx_mode = FIXED_TXMODE_HT; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- tx_mode = (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- return tx_mode; +-} +- +-/* +- ======================================================================== +- Routine Description: +- Overwrite HT Tx Mode by Fixed Legency Tx Mode, if specified. +- +- Arguments: +- pAd +- pEntry +- +- Return Value: +- TURE +- FALSE +- +- ======================================================================== +-*/ +-VOID RTMPUpdateLegacyTxSetting( +- UCHAR fixed_tx_mode, +- PMAC_TABLE_ENTRY pEntry) +-{ +- HTTRANSMIT_SETTING TransmitSetting; +- +- if (fixed_tx_mode == FIXED_TXMODE_HT) +- return; +- +- TransmitSetting.word = 0; +- +- TransmitSetting.field.MODE = pEntry->HTPhyMode.field.MODE; +- TransmitSetting.field.MCS = pEntry->HTPhyMode.field.MCS; +- +- if (fixed_tx_mode == FIXED_TXMODE_CCK) +- { +- TransmitSetting.field.MODE = MODE_CCK; +- // CCK mode allow MCS 0~3 +- if (TransmitSetting.field.MCS > MCS_3) +- TransmitSetting.field.MCS = MCS_3; +- } +- else +- { +- TransmitSetting.field.MODE = MODE_OFDM; +- // OFDM mode allow MCS 0~7 +- if (TransmitSetting.field.MCS > MCS_7) +- TransmitSetting.field.MCS = MCS_7; +- } +- +- if (pEntry->HTPhyMode.field.MODE >= TransmitSetting.field.MODE) +- { +- pEntry->HTPhyMode.word = TransmitSetting.word; +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateLegacyTxSetting : wcid-%d, MODE=%s, MCS=%d \n", +- pEntry->Aid, GetPhyMode(pEntry->HTPhyMode.field.MODE), pEntry->HTPhyMode.field.MCS)); +- } +-} +- +-#ifdef CONFIG_STA_SUPPORT +-/* +- ========================================================================== +- Description: +- dynamic tune BBP R66 to find a balance between sensibility and +- noise isolation +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AsicStaBbpTuning( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR OrigR66Value = 0, R66;//, R66UpperBound = 0x30, R66LowerBound = 0x30; +- CHAR Rssi; +- +- // 2860C did not support Fase CCA, therefore can't tune +- if (pAd->MACVersion == 0x28600100) +- return; +- +- // +- // work as a STA +- // +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) // no R66 tuning when SCANNING +- return; +- +- if ((pAd->OpMode == OPMODE_STA) +- && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- && !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +-#ifdef RTMP_MAC_PCI +- && (pAd->bPCIclkOff == FALSE) +-#endif // RTMP_MAC_PCI // +- ) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &OrigR66Value); +- R66 = OrigR66Value; +- +- if (pAd->Antenna.field.RxPath > 1) +- Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1; +- else +- Rssi = pAd->StaCfg.RssiSample.AvgRssi0; +- +- if (pAd->LatchRfRegs.Channel <= 14) +- { //BG band +-#ifdef RT30xx +- // RT3070 is a no LNA solution, it should have different control regarding to AGC gain control +- // Otherwise, it will have some throughput side effect when low RSSI +- +- if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd) + 0x20; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd); +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- } +- else +-#endif // RT30xx // +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = (0x2E + GET_LNA_GAIN(pAd)) + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { +- R66 = 0x2E + GET_LNA_GAIN(pAd); +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- } +- } +- else +- { //A band +- if (pAd->CommonCfg.BBPCurrentBW == BW_20) +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x32 + (GET_LNA_GAIN(pAd)*5)/3 + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { +- R66 = 0x32 + (GET_LNA_GAIN(pAd)*5)/3; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- } +- else +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x3A + (GET_LNA_GAIN(pAd)*5)/3 + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { +- R66 = 0x3A + (GET_LNA_GAIN(pAd)*5)/3; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- } +- } +- +- +- } +-} +-#endif // CONFIG_STA_SUPPORT // +- +-VOID RTMPSetAGCInitValue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BandWidth) +-{ +- UCHAR R66 = 0x30; +- +- if (pAd->LatchRfRegs.Channel <= 14) +- { // BG band +-#ifdef RT30xx +- /* Gary was verified Amazon AP and find that RT307x has BBP_R66 invalid default value */ +- +- if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- else +-#endif // RT30xx // +- { +- R66 = 0x2E + GET_LNA_GAIN(pAd); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { //A band +- { +- if (BandWidth == BW_20) +- { +- R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +-#ifdef DOT11_N_SUPPORT +- else +- { +- R66 = (UCHAR)(0x3A + (GET_LNA_GAIN(pAd)*5)/3); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +-#endif // DOT11_N_SUPPORT // +- } +- } +- +-} +diff --git a/drivers/staging/rt3090/common/mlme_ex.c b/drivers/staging/rt3090/common/mlme_ex.c +deleted file mode 100644 +index d7fb7f5..0000000 +--- a/drivers/staging/rt3090/common/mlme_ex.c ++++ /dev/null +@@ -1,215 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mlme_ex.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi 2007-06-25 Extend original mlme APIs to support multi-entries +-*/ +- +-#include "../rt_config.h" +-#include "../mlme_ex_def.h" +-//#include +- +- +-// =========================================================================================== +-// state_machine +-// =========================================================================================== +- +-/*! \brief Initialize the state machine. +- * \param *S pointer to the state machine +- * \param Trans State machine transition function +- * \param StNr number of states +- * \param MsgNr number of messages +- * \param DefFunc default function, when there is invalid state/message combination +- * \param InitState initial state of the state machine +- * \param Base StateMachine base, internal use only +- * \pre p_sm should be a legal pointer +- * \post +- */ +-VOID StateMachineInitEx( +- IN STATE_MACHINE_EX *S, +- IN STATE_MACHINE_FUNC_EX Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC_EX DefFunc, +- IN ULONG InitState, +- IN ULONG Base) +-{ +- ULONG i, j; +- +- // set number of states and messages +- S->NrState = StNr; +- S->NrMsg = MsgNr; +- S->Base = Base; +- +- S->TransFunc = Trans; +- +- // init all state transition to default function +- for (i = 0; i < StNr; i++) +- { +- for (j = 0; j < MsgNr; j++) +- { +- S->TransFunc[i * MsgNr + j] = DefFunc; +- } +- } +- +- // set the starting state +- S->CurrState = InitState; +- +- return; +-} +- +-/*! \brief This function fills in the function pointer into the cell in the state machine +- * \param *S pointer to the state machine +- * \param St state +- * \param Msg incoming message +- * \param f the function to be executed when (state, message) combination occurs at the state machine +- * \pre *S should be a legal pointer to the state machine, st, msg, should be all within the range, Base should be set in the initial state +- * \post +- */ +-VOID StateMachineSetActionEx( +- IN STATE_MACHINE_EX *S, +- IN ULONG St, +- IN ULONG Msg, +- IN STATE_MACHINE_FUNC_EX Func) +-{ +- ULONG MsgIdx; +- +- MsgIdx = Msg - S->Base; +- +- if (St < S->NrState && MsgIdx < S->NrMsg) +- { +- // boundary checking before setting the action +- S->TransFunc[St * S->NrMsg + MsgIdx] = Func; +- } +- +- return; +-} +- +-/*! \brief This function does the state transition +- * \param *Adapter the NIC adapter pointer +- * \param *S the state machine +- * \param *Elem the message to be executed +- * \return None +- */ +-VOID StateMachinePerformActionEx( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *S, +- IN MLME_QUEUE_ELEM *Elem, +- USHORT Idx, +- PULONG pCurrState) +-{ +- if (S->TransFunc[(*pCurrState) * S->NrMsg + Elem->MsgType - S->Base]) +- (*(S->TransFunc[(*pCurrState) * S->NrMsg + Elem->MsgType - S->Base]))(pAd, Elem, pCurrState, Idx); +- +- return; +-} +- +-/*! \brief Enqueue a message for other threads, if they want to send messages to MLME thread +- * \param *Queue The MLME Queue +- * \param Machine The State Machine Id +- * \param MsgType The Message Type +- * \param MsgLen The Message length +- * \param *Msg The message pointer +- * \return TRUE if enqueue is successful, FALSE if the queue is full +- * \pre +- * \post +- * \note The message has to be initialized +- */ +-BOOLEAN MlmeEnqueueEx( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg, +- IN USHORT Idx) +-{ +- INT Tail; +- MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- return FALSE; +- +- +- // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MAX_LEN_OF_MLME_BUFFER) +- { +- DBGPRINT_ERR(("MlmeEnqueueEx: msg too large, size = %ld \n", MsgLen)); +- return FALSE; +- } +- +- if (MlmeQueueFull(Queue)) +- { +- +- return FALSE; +- } +- +- RTMP_SEM_LOCK(&Queue->Lock); +- Tail = Queue->Tail; +- Queue->Tail++; +- Queue->Num++; +- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { +- Queue->Tail = 0; +- } +- Queue->Entry[Tail].Occupied = TRUE; +- Queue->Entry[Tail].Machine = Machine; +- Queue->Entry[Tail].MsgType = MsgType; +- Queue->Entry[Tail].MsgLen = MsgLen; +- Queue->Entry[Tail].Idx = Idx; +- if (Msg != NULL) +- NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); +- +- RTMP_SEM_UNLOCK(&Queue->Lock); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- The drop function, when machine executes this, the message is simply +- ignored. This function does nothing, the message is freed in +- StateMachinePerformAction() +- ========================================================================== +- */ +-VOID DropEx( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem, +- PULONG pCurrState, +- USHORT Idx) +-{ +- return; +-} +diff --git a/drivers/staging/rt3090/common/netif_block.c b/drivers/staging/rt3090/common/netif_block.c +deleted file mode 100644 +index 2172957..0000000 +--- a/drivers/staging/rt3090/common/netif_block.c ++++ /dev/null +@@ -1,147 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +-#ifdef BLOCK_NET_IF +- +-#include "../rt_config.h" +-#include "../netif_block.h" +- +- +-static NETIF_ENTRY freeNetIfEntryPool[FREE_NETIF_POOL_SIZE]; +-static LIST_HEADER freeNetIfEntryList; +- +-void initblockQueueTab( +- IN PRTMP_ADAPTER pAd) +-{ +- int i; +- +- initList(&freeNetIfEntryList); +- for (i = 0; i < FREE_NETIF_POOL_SIZE; i++) +- insertTailList(&freeNetIfEntryList, (PLIST_ENTRY)&freeNetIfEntryPool[i]); +- +- for (i=0; i < NUM_OF_TX_RING; i++) +- initList(&pAd->blockQueueTab[i].NetIfList); +- +- return; +-} +- +-BOOLEAN blockNetIf( +- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry, +- IN PNET_DEV pNetDev) +-{ +- PNETIF_ENTRY pNetIfEntry = NULL; +- +- if ((pNetIfEntry = (PNETIF_ENTRY)removeHeadList(&freeNetIfEntryList)) != NULL) +- { +- RTMP_OS_NETDEV_STOP_QUEUE(pNetDev); +- pNetIfEntry->pNetDev = pNetDev; +- insertTailList(&pBlockQueueEntry->NetIfList, (PLIST_ENTRY)pNetIfEntry); +- +- pBlockQueueEntry->SwTxQueueBlockFlag = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("RTMP_OS_NETDEV_STOP_QUEUE(%s)\n", RTMP_OS_NETDEV_GET_DEVNAME(pNetDev))); +- } +- else +- return FALSE; +- +- return TRUE; +-} +- +-VOID releaseNetIf( +- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry) +-{ +- PNETIF_ENTRY pNetIfEntry = NULL; +- PLIST_HEADER pNetIfList = &pBlockQueueEntry->NetIfList; +- +- while((pNetIfEntry = (PNETIF_ENTRY)removeHeadList(pNetIfList)) != NULL) +- { +- PNET_DEV pNetDev = pNetIfEntry->pNetDev; +- RTMP_OS_NETDEV_WAKE_QUEUE(pNetDev); +- insertTailList(&freeNetIfEntryList, (PLIST_ENTRY)pNetIfEntry); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMP_OS_NETDEV_WAKE_QUEUE(%s)\n", RTMP_OS_NETDEV_GET_DEVNAME(pNetDev))); +- } +- pBlockQueueEntry->SwTxQueueBlockFlag = FALSE; +- return; +-} +- +- +-VOID StopNetIfQueue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) +-{ +- PNET_DEV NetDev = NULL; +- UCHAR IfIdx = 0; +- BOOLEAN valid = FALSE; +- +-#ifdef APCLI_SUPPORT +- if (RTMP_GET_PACKET_NET_DEVICE(pPacket) >= MIN_NET_DEVICE_FOR_APCLI) +- { +- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_APCLI) % MAX_APCLI_NUM; +- NetDev = pAd->ApCfg.ApCliTab[IfIdx].dev; +- } +- else +-#endif // APCLI_SUPPORT // +-#ifdef WDS_SUPPORT +- if (RTMP_GET_PACKET_NET_DEVICE(pPacket) >= MIN_NET_DEVICE_FOR_WDS) +- { +- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_WDS) % MAX_WDS_ENTRY; +- NetDev = pAd->WdsTab.WdsEntry[IfIdx].dev; +- } +- else +-#endif // WDS_SUPPORT // +- { +-#ifdef MBSS_SUPPORT +- if (pAd->OpMode == OPMODE_AP) +- { +- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_MBSSID) % MAX_MBSSID_NUM; +- NetDev = pAd->ApCfg.MBSSID[IfIdx].MSSIDDev; +- } +- else +- { +- IfIdx = MAIN_MBSSID; +- NetDev = pAd->net_dev; +- } +-#else +- IfIdx = MAIN_MBSSID; +- NetDev = pAd->net_dev; +-#endif +- } +- +- // WMM support 4 software queues. +- // One software queue full doesn't mean device have no capbility to transmit packet. +- // So disable block Net-If queue function while WMM enable. +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- valid = (pAd->CommonCfg.bWmmCapable == TRUE) ? FALSE : TRUE; +-#endif // CONFIG_STA_SUPPORT // +- +- if (valid) +- blockNetIf(&pAd->blockQueueTab[QueIdx], NetDev); +- return; +-} +- +-#endif // BLOCK_NET_IF // +diff --git a/drivers/staging/rt3090/common/rt_channel.c b/drivers/staging/rt3090/common/rt_channel.c +deleted file mode 100644 +index da2391e..0000000 +--- a/drivers/staging/rt3090/common/rt_channel.c ++++ /dev/null +@@ -1,1287 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-#include "../rt_config.h" +- +- +-CH_FREQ_MAP CH_HZ_ID_MAP[]= +- { +- {1, 2412}, +- {2, 2417}, +- {3, 2422}, +- {4, 2427}, +- {5, 2432}, +- {6, 2437}, +- {7, 2442}, +- {8, 2447}, +- {9, 2452}, +- {10, 2457}, +- {11, 2462}, +- {12, 2467}, +- {13, 2472}, +- {14, 2484}, +- +- /* UNII */ +- {36, 5180}, +- {40, 5200}, +- {44, 5220}, +- {48, 5240}, +- {52, 5260}, +- {56, 5280}, +- {60, 5300}, +- {64, 5320}, +- {149, 5745}, +- {153, 5765}, +- {157, 5785}, +- {161, 5805}, +- {165, 5825}, +- {167, 5835}, +- {169, 5845}, +- {171, 5855}, +- {173, 5865}, +- +- /* HiperLAN2 */ +- {100, 5500}, +- {104, 5520}, +- {108, 5540}, +- {112, 5560}, +- {116, 5580}, +- {120, 5600}, +- {124, 5620}, +- {128, 5640}, +- {132, 5660}, +- {136, 5680}, +- {140, 5700}, +- +- /* Japan MMAC */ +- {34, 5170}, +- {38, 5190}, +- {42, 5210}, +- {46, 5230}, +- +- /* Japan */ +- {184, 4920}, +- {188, 4940}, +- {192, 4960}, +- {196, 4980}, +- +- {208, 5040}, /* Japan, means J08 */ +- {212, 5060}, /* Japan, means J12 */ +- {216, 5080}, /* Japan, means J16 */ +-}; +- +-INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP)/sizeof(CH_FREQ_MAP)); +- +-CH_REGION ChRegion[] = +-{ +- { // Antigua and Berbuda +- "AG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Argentina +- "AR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Aruba +- "AW", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Australia +- "AU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Austria +- "AT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bahamas +- "BS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Barbados +- "BB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bermuda +- "BM", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Brazil +- "BR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Belgium +- "BE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Bulgaria +- "BG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Canada +- "CA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Cayman IsLands +- "KY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Chile +- "CL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // China +- "CN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Colombia +- "CO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Costa Rica +- "CR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Cyprus +- "CY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Czech_Republic +- "CZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Denmark +- "DK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Dominican Republic +- "DO", +- CE, +- { +- { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Equador +- "EC", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // El Salvador +- "SV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64 +- { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Finland +- "FI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // France +- "FR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Germany +- "DE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Greece +- "GR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Guam +- "GU", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Guatemala +- "GT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Haiti +- "HT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Honduras +- "HN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hong Kong +- "HK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hungary +- "HU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Iceland +- "IS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // India +- "IN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Indonesia +- "ID", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Ireland +- "IE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Israel +- "IL", +- CE, +- { +- { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3 +- { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9 +- { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13 +- { 0}, // end +- } +- }, +- +- { // Italy +- "IT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Japan +- "JP", +- JAP, +- { +- { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Jordan +- "JO", +- CE, +- { +- { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Latvia +- "LV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Liechtenstein +- "LI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Lithuania +- "LT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Luxemburg +- "LU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Malaysia +- "MY", +- CE, +- { +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Malta +- "MT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Marocco +- "MA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Mexico +- "MX", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Netherlands +- "NL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // New Zealand +- "NZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Norway +- "NO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Peru +- "PE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Portugal +- "PT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Poland +- "PL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Romania +- "RO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Russia +- "RU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Saudi Arabia +- "SA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Serbia_and_Montenegro +- "CS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 0}, // end +- } +- }, +- +- { // Singapore +- "SG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Slovakia +- "SK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Slovenia +- "SI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // South Africa +- "ZA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // South Korea +- "KR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Spain +- "ES", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Sweden +- "SE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Switzerland +- "CH", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Taiwan +- "TW", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Turkey +- "TR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // UK +- "GB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Ukraine +- "UA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_Arab_Emirates +- "AE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_States +- "US", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Venezuela +- "VE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Default +- "", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +-}; +- +- +-static PCH_REGION GetChRegion( +- IN PUCHAR CntryCode) +-{ +- INT loop = 0; +- PCH_REGION pChRegion = NULL; +- +- while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0) +- { +- if (strncmp((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, 2) == 0) +- { +- pChRegion = &ChRegion[loop]; +- break; +- } +- loop++; +- } +- +- if (pChRegion == NULL) +- pChRegion = &ChRegion[loop]; +- return pChRegion; +-} +- +-static VOID ChBandCheck( +- IN UCHAR PhyMode, +- OUT PUCHAR pChType) +-{ +- switch(PhyMode) +- { +- case PHY_11A: +-#ifdef DOT11_N_SUPPORT +- case PHY_11AN_MIXED: +-#endif // DOT11_N_SUPPORT // +- *pChType = BAND_5G; +- break; +- case PHY_11ABG_MIXED: +-#ifdef DOT11_N_SUPPORT +- case PHY_11AGN_MIXED: +- case PHY_11ABGN_MIXED: +-#endif // DOT11_N_SUPPORT // +- *pChType = BAND_BOTH; +- break; +- +- default: +- *pChType = BAND_24G; +- break; +- } +-} +- +-static UCHAR FillChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_DESP pChDesp, +- IN UCHAR Offset, +- IN UCHAR increment) +-{ +- INT i, j, l; +- UCHAR channel; +- +- j = Offset; +- for (i = 0; i < pChDesp->NumOfCh; i++) +- { +- channel = pChDesp->FirstChannel + i * increment; +- for (l=0; lTxPower[l].Channel) +- { +- pAd->ChannelList[j].Power = pAd->TxPower[l].Power; +- pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2; +- break; +- } +- } +- if (l == MAX_NUM_OF_CHANNELS) +- continue; +- +- pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment; +- pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr; +- pAd->ChannelList[j].DfsReq = pChDesp->DfsReq; +- j++; +- } +- pAd->ChannelListNum = j; +- +- return j; +-} +- +- +-static inline VOID CreateChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_REGION pChRegion, +- IN UCHAR Geography) +-{ +- INT i; +- UCHAR offset = 0; +- PCH_DESP pChDesp; +- UCHAR ChType; +- UCHAR increment; +- +- if (pChRegion == NULL) +- return; +- +- ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); +- +- for (i=0; i<10; i++) +- { +- pChDesp = &pChRegion->ChDesp[i]; +- if (pChDesp->FirstChannel == 0) +- break; +- +- if (ChType == BAND_5G) +- { +- if (pChDesp->FirstChannel <= 14) +- continue; +- } +- else if (ChType == BAND_24G) +- { +- if (pChDesp->FirstChannel > 14) +- continue; +- } +- +- if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == Geography)) +- { +- if (pChDesp->FirstChannel > 14) +- increment = 4; +- else +- increment = 1; +- offset = FillChList(pAd, pChDesp, offset, increment); +- } +- } +-} +- +- +-VOID BuildChannelListEx( +- IN PRTMP_ADAPTER pAd) +-{ +- PCH_REGION pChReg; +- +- pChReg = GetChRegion(pAd->CommonCfg.CountryCode); +- CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); +-} +- +- +-VOID BuildBeaconChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen) +-{ +- INT i; +- ULONG TmpLen; +- PCH_REGION pChRegion; +- PCH_DESP pChDesp; +- UCHAR ChType; +- +- pChRegion = GetChRegion(pAd->CommonCfg.CountryCode); +- +- if (pChRegion == NULL) +- return; +- +- ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); +- *pBufLen = 0; +- +- for (i=0; i<10; i++) +- { +- pChDesp = &pChRegion->ChDesp[i]; +- if (pChDesp->FirstChannel == 0) +- break; +- +- if (ChType == BAND_5G) +- { +- if (pChDesp->FirstChannel <= 14) +- continue; +- } +- else if (ChType == BAND_24G) +- { +- if (pChDesp->FirstChannel > 14) +- continue; +- } +- +- if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == pAd->CommonCfg.Geography)) +- { +- MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen, +- 1, &pChDesp->FirstChannel, +- 1, &pChDesp->NumOfCh, +- 1, &pChDesp->MaxTxPwr, +- END_OF_ARGS); +- *pBufLen += TmpLen; +- } +- } +-} +- +- +-#ifdef DOT11_N_SUPPORT +-static BOOLEAN IsValidChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) +- +-{ +- INT i; +- +- for (i = 0; i < pAd->ChannelListNum; i++) +- { +- if (pAd->ChannelList[i].Channel == channel) +- break; +- } +- +- if (i == pAd->ChannelListNum) +- return FALSE; +- else +- return TRUE; +-} +- +- +-static UCHAR GetExtCh( +- IN UCHAR Channel, +- IN UCHAR Direction) +-{ +- CHAR ExtCh; +- +- if (Direction == EXTCHA_ABOVE) +- ExtCh = Channel + 4; +- else +- ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0; +- +- return ExtCh; +-} +- +- +-VOID N_ChannelCheck( +- IN PRTMP_ADAPTER pAd) +-{ +- //UCHAR ChannelNum = pAd->ChannelListNum; +- UCHAR Channel = pAd->CommonCfg.Channel; +- +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (Channel > 14) +- { +- if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) || +- (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) || +- (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- } +- else +- { +- do +- { +- UCHAR ExtCh; +- UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; +- ExtCh = GetExtCh(Channel, Dir); +- if (IsValidChannel(pAd, ExtCh)) +- break; +- +- Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE; +- ExtCh = GetExtCh(Channel, Dir); +- if (IsValidChannel(pAd, ExtCh)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir; +- break; +- } +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } while(FALSE); +- +- if (Channel == 14) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() +- } +- } +- } +- +- +-} +- +- +-VOID N_SetCenCh( +- IN PRTMP_ADAPTER pAd) +-{ +- if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; +- } +- else +- { +- if (pAd->CommonCfg.Channel == 14) +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1; +- else +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; +- } +- } +- else +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- } +-} +-#endif // DOT11_N_SUPPORT // +- +- +-UINT8 GetCuntryMaxTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 channel) +-{ +- int i; +- for (i = 0; i < pAd->ChannelListNum; i++) +- { +- if (pAd->ChannelList[i].Channel == channel) +- break; +- } +- +- if (i == pAd->ChannelListNum) +- return 0xff; +- else +- return pAd->ChannelList[i].MaxTxPwr; +-} +diff --git a/drivers/staging/rt3090/common/rt_rf.c b/drivers/staging/rt3090/common/rt_rf.c +deleted file mode 100644 +index 9d638f7..0000000 +--- a/drivers/staging/rt3090/common/rt_rf.c ++++ /dev/null +@@ -1,201 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_rf.c +- +- Abstract: +- Ralink Wireless driver RF related functions +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-#ifdef RTMP_RF_RW_SUPPORT +-/* +- ======================================================================== +- +- Routine Description: Write RT30xx RF register through MAC +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN UCHAR value) +-{ +- RF_CSR_CFG_STRUC rfcsr; +- UINT i = 0; +- +- do +- { +- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); +- +- if (!rfcsr.field.RF_CSR_KICK) +- break; +- i++; +- } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); +- +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); +- return STATUS_UNSUCCESSFUL; +- } +- +- rfcsr.field.RF_CSR_WR = 1; +- rfcsr.field.RF_CSR_KICK = 1; +- rfcsr.field.TESTCSR_RFACC_REGNUM = regID; +- rfcsr.field.RF_CSR_DATA = value; +- +- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: Read RT30xx RF register through MAC +- +- Arguments: +- +- Return Value: +- +- IRQL = +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN PUCHAR pValue) +-{ +- RF_CSR_CFG_STRUC rfcsr; +- UINT i=0, k=0; +- +- for (i=0; ichipOps.AsicRfInit) +- pAd->chipOps.AsicRfInit(pAd); +-} +- +- +-VOID RtmpChipOpsRFHook( +- IN RTMP_ADAPTER *pAd) +-{ +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- +- pChipOps->pRFRegTable = NULL; +- pChipOps->AsicRfInit = NULL; +- pChipOps->AsicRfTurnOn = NULL; +- pChipOps->AsicRfTurnOff = NULL; +- pChipOps->AsicReverseRfFromSleepMode = NULL; +- pChipOps->AsicHaltAction = NULL; +-#ifdef RT33xx +-if (IS_RT3390(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) +- { +- pChipOps->pRFRegTable = RFRegTableOverRT3390; +- pChipOps->AsicHaltAction = RT33xxHaltAction; +- pChipOps->AsicRfTurnOff = RT33xxLoadRFSleepModeSetup; +- pChipOps->AsicRfInit = NICInitRT3390RFRegisters; +- pChipOps->AsicReverseRfFromSleepMode = RT33xxReverseRFSleepModeSetup; +- } +-#else // RT33xx // +- /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ +- +-#ifdef RT30xx +- if (IS_RT30xx(pAd)) +- { +- pChipOps->pRFRegTable = RT30xx_RFRegTable; +- pChipOps->AsicHaltAction = RT30xxHaltAction; +-#ifdef RT3090 +- if (IS_RT3090(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) +- { +- pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; +- pChipOps->AsicRfInit = NICInitRT3090RFRegisters; +- pChipOps->AsicReverseRfFromSleepMode = RT30xxReverseRFSleepModeSetup; +- } +-#endif // RT3090 // +- } +-#endif // RT30xx // +-#endif // RT33xx // +-} +- +-#endif // RTMP_RF_RW_SUPPORT // +diff --git a/drivers/staging/rt3090/common/rtmp_init.c b/drivers/staging/rt3090/common/rtmp_init.c +deleted file mode 100644 +index 48b95b7..0000000 +--- a/drivers/staging/rt3090/common/rtmp_init.c ++++ /dev/null +@@ -1,3882 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_init.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-UCHAR BIT8[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; +-char* CipherName[] = {"none","wep64","wep128","TKIP","AES","CKIP64","CKIP128"}; +- +-// +-// BBP register initialization set +-// +-REG_PAIR BBPRegTable[] = { +- {BBP_R65, 0x2C}, // fix rssi issue +- {BBP_R66, 0x38}, // Also set this default value to pAd->BbpTuning.R66CurrentValue at initial +- {BBP_R69, 0x12}, +- {BBP_R70, 0xa}, // BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa +- {BBP_R73, 0x10}, +- {BBP_R81, 0x37}, +- {BBP_R82, 0x62}, +- {BBP_R83, 0x6A}, +- {BBP_R84, 0x99}, // 0x19 is for rt2860E and after. This is for extension channel overlapping IOT. 0x99 is for rt2860D and before +- {BBP_R86, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R91, 0x04}, // middle range issue, Rory @2008-01-28 +- {BBP_R92, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528 +- {BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. +- {BBP_R106, 0x35}, // for ShortGI throughput +-}; +-#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) +- +- +-// +-// ASIC register initialization sets +-// +- +-RTMP_REG_PAIR MACRegTable[] = { +-#if defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x200) +- {BCN_OFFSET0, 0xf8f0e8e0}, /* 0x3800(e0), 0x3A00(e8), 0x3C00(f0), 0x3E00(f8), 512B for each beacon */ +- {BCN_OFFSET1, 0x6f77d0c8}, /* 0x3200(c8), 0x3400(d0), 0x1DC0(77), 0x1BC0(6f), 512B for each beacon */ +-#elif defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x100) +- {BCN_OFFSET0, 0xece8e4e0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ +- {BCN_OFFSET1, 0xfcf8f4f0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ +-#else +- #error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]!!! +-#endif // HW_BEACON_OFFSET // +- +- {LEGACY_BASIC_RATE, 0x0000013f}, // Basic rate set bitmap +- {HT_BASIC_RATE, 0x00008003}, // Basic HT rate set , 20M, MCS=3, MM. Format is the same as in TXWI. +- {MAC_SYS_CTRL, 0x00}, // 0x1004, , default Disable RX +- {RX_FILTR_CFG, 0x17f97}, //0x1400 , RX filter control, +- {BKOFF_SLOT_CFG, 0x209}, // default set short slot time, CC_DELAY_TIME should be 2 +- //{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 +- {TX_SW_CFG0, 0x0}, // Gary,2008-05-21 for CWC test +- {TX_SW_CFG1, 0x80606}, // Gary,2006-08-23 +- {TX_LINK_CFG, 0x1020}, // Gary,2006-08-23 +- //{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT +- {TX_TIMEOUT_CFG, 0x000a2090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 +- {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, // 0x3018, MAX frame length. Max PSDU = 16kbytes. +- {LED_CFG, 0x7f031e46}, // Gary, 2006-08-23 +- +-//#ifdef CONFIG_AP_SUPPORT +-// {WMM_AIFSN_CFG, 0x00001173}, +-// {WMM_CWMIN_CFG, 0x00002344}, +-// {WMM_CWMAX_CFG, 0x000034a6}, +-// {WMM_TXOP0_CFG, 0x00100020}, +-// {WMM_TXOP1_CFG, 0x002F0038}, +-//#endif // CONFIG_AP_SUPPORT // +- +-//#ifdef CONFIG_STA_SUPPORT +-// {WMM_AIFSN_CFG, 0x00002273}, +-// {WMM_CWMIN_CFG, 0x00002344}, +-// {WMM_CWMAX_CFG, 0x000034aa}, +-//#endif // CONFIG_STA_SUPPORT // +-#ifdef INF_AMAZON_SE +- {PBF_MAX_PCNT, 0x1F3F6F6F}, //iverson modify for usb issue, 2008/09/19 +- // 6F + 6F < total page count FE +- // so that RX doesn't occupy TX's buffer space when WMM congestion. +-#else +- {PBF_MAX_PCNT, 0x1F3FBF9F}, //0x1F3f7f9f}, //Jan, 2006/04/20 +-#endif // INF_AMAZON_SE // +- //{TX_RTY_CFG, 0x6bb80408}, // Jan, 2006/11/16 +-// WMM_ACM_SUPPORT +-// {TX_RTY_CFG, 0x6bb80101}, // sample +- {TX_RTY_CFG, 0x47d01f0f}, // Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 +- +- {AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder +- {CCK_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. +- {OFDM_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. +- {GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS +- {GF40_PROT_CFG, 0x03F44084}, +- {MM20_PROT_CFG, 0x01744004}, +-#ifdef RTMP_MAC_PCI +- {MM40_PROT_CFG, 0x03F54084}, +-#endif // RTMP_MAC_PCI // +- {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f*/ /*0x000024bf*/}, //Extension channel backoff. +- {TX_RTS_CFG, 0x00092b20}, +-//#ifdef WIFI_TEST +- {EXP_ACK_TIME, 0x002400ca}, // default value +-//#else +-// {EXP_ACK_TIME, 0x005400ca}, // suggested by Gray @ 20070323 for 11n intel-sta throughput +-//#endif // end - WIFI_TEST // +-//#ifdef CONFIG_AP_SUPPORT +-// {TBTT_SYNC_CFG, 0x00422000}, // TBTT_ADJUST(7:0) == 0 +-// {TBTT_SYNC_CFG, 0x00012000}, // TBTT_ADJUST(7:0) == 0 +-//#endif // CONFIG_AP_SUPPORT // +- {TXOP_HLDR_ET, 0x00000002}, +- +- /* Jerry comments 2008/01/16: we use SIFS = 10us in CCK defaultly, but it seems that 10us +- is too small for INTEL 2200bg card, so in MBSS mode, the delta time between beacon0 +- and beacon1 is SIFS (10us), so if INTEL 2200bg card connects to BSS0, the ping +- will always lost. So we change the SIFS of CCK from 10us to 16us. */ +- {XIFS_TIME_CFG, 0x33a41010}, +- {PWR_PIN_CFG, 0x00000003}, // patch for 2880-E +-}; +- +- +-#ifdef CONFIG_STA_SUPPORT +-RTMP_REG_PAIR STAMACRegTable[] = { +- {WMM_AIFSN_CFG, 0x00002273}, +- {WMM_CWMIN_CFG, 0x00002344}, +- {WMM_CWMAX_CFG, 0x000034aa}, +-}; +-#endif // CONFIG_STA_SUPPORT // +- +-#define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(RTMP_REG_PAIR)) +-#ifdef CONFIG_STA_SUPPORT +-#define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(RTMP_REG_PAIR)) +-#endif // CONFIG_STA_SUPPORT // +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Allocate RTMP_ADAPTER data block and do some initialization +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPAllocAdapterBlock( +- IN PVOID handle, +- OUT PRTMP_ADAPTER *ppAdapter) +-{ +- PRTMP_ADAPTER pAd; +- NDIS_STATUS Status; +- INT index; +- UCHAR *pBeaconBuf = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocAdapterBlock\n")); +- +- *ppAdapter = NULL; +- +- do +- { +- // Allocate RTMP_ADAPTER memory block +- pBeaconBuf = kmalloc(MAX_BEACON_SIZE, MEM_ALLOC_FLAG); +- if (pBeaconBuf == NULL) +- { +- Status = NDIS_STATUS_FAILURE; +- DBGPRINT_ERR(("Failed to allocate memory - BeaconBuf!\n")); +- break; +- } +- NdisZeroMemory(pBeaconBuf, MAX_BEACON_SIZE); +- +- Status = AdapterBlockAllocateMemory(handle, (PVOID *)&pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("Failed to allocate memory - ADAPTER\n")); +- break; +- } +- pAd->BeaconBuf = pBeaconBuf; +- DBGPRINT(RT_DEBUG_OFF, ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER))); +- +- +- // Init spin locks +- NdisAllocateSpinLock(&pAd->MgmtRingLock); +-#ifdef RTMP_MAC_PCI +- NdisAllocateSpinLock(&pAd->RxRingLock); +-#ifdef RT3090 +-#ifdef CONFIG_STA_SUPPORT +- NdisAllocateSpinLock(&pAd->McuCmdLock); +-#endif // CONFIG_STA_SUPPORT // +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // +- +- for (index =0 ; index < NUM_OF_TX_RING; index++) +- { +- NdisAllocateSpinLock(&pAd->TxSwQueueLock[index]); +- NdisAllocateSpinLock(&pAd->DeQueueLock[index]); +- pAd->DeQueueRunning[index] = FALSE; +- } +- +- NdisAllocateSpinLock(&pAd->irq_lock); +- +- +- } while (FALSE); +- +- if ((Status != NDIS_STATUS_SUCCESS) && (pBeaconBuf)) +- kfree(pBeaconBuf); +- +- *ppAdapter = pAd; +- +- DBGPRINT_S(Status, ("<-- RTMPAllocAdapterBlock, Status=%x\n", Status)); +- return Status; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Read initial Tx power per MCS and BW from EEPROM +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPReadTxPwrPerRate( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG data, Adata, Gdata; +- USHORT i, value, value2; +- INT Apwrdelta, Gpwrdelta; +- UCHAR t1,t2,t3,t4; +- BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; +- +- // +- // Get power delta for 20MHz and 40MHz. +- // +- DBGPRINT(RT_DEBUG_TRACE, ("Txpower per Rate\n")); +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_DELTA, value2); +- Apwrdelta = 0; +- Gpwrdelta = 0; +- +- if ((value2 & 0xff) != 0xff) +- { +- if ((value2 & 0x80)) +- Gpwrdelta = (value2&0xf); +- +- if ((value2 & 0x40)) +- bGpwrdeltaMinus = FALSE; +- else +- bGpwrdeltaMinus = TRUE; +- } +- if ((value2 & 0xff00) != 0xff00) +- { +- if ((value2 & 0x8000)) +- Apwrdelta = ((value2&0xf00)>>8); +- +- if ((value2 & 0x4000)) +- bApwrdeltaMinus = FALSE; +- else +- bApwrdeltaMinus = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Gpwrdelta = %x, Apwrdelta = %x .\n", Gpwrdelta, Apwrdelta)); +- +- // +- // Get Txpower per MCS for 20MHz in 2.4G. +- // +- for (i=0; i<5; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4, value); +- data = value; +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); +- else +- t4 = 0; +- } +- Gdata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4 + 2, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); +- else +- t4 = 0; +- } +- Adata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); +- if (t1 > 0xf) +- t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); +- if (t2 > 0xf) +- t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); +- if (t3 > 0xf) +- t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); +- if (t4 > 0xf) +- t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); +- else +- t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); +- else +- t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); +- else +- t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); +- else +- t4 = 0; +- } +- Gdata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- data |= (value<<16); +- +- /* For 20M/40M Power Delta issue */ +- pAd->Tx20MPwrCfgABand[i] = data; +- pAd->Tx20MPwrCfgGBand[i] = data; +- pAd->Tx40MPwrCfgABand[i] = Adata; +- pAd->Tx40MPwrCfgGBand[i] = Gdata; +- +- if (data != 0xffffffff) +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, data); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("20MHz BW, 2.4G band-%lx, Adata = %lx, Gdata = %lx \n", data, Adata, Gdata)); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Read initial channel power parameters from EEPROM +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPReadChannelPwr( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR i, choffset; +- EEPROM_TX_PWR_STRUC Power; +- EEPROM_TX_PWR_STRUC Power2; +- +- // Read Tx power value for all channels +- // Value from 1 - 0x7f. Default value is 24. +- // Power value : 2.4G 0x00 (0) ~ 0x1F (31) +- // : 5.5G 0xF9 (-7) ~ 0x0F (15) +- +- // 0. 11b/g, ch1 - ch 14 +- for (i = 0; i < 7; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX_PWR_OFFSET + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX2_PWR_OFFSET + i * 2, Power2.word); +- pAd->TxPower[i * 2].Channel = i * 2 + 1; +- pAd->TxPower[i * 2 + 1].Channel = i * 2 + 2; +- +- if ((Power.field.Byte0 > 31) || (Power.field.Byte0 < 0)) +- pAd->TxPower[i * 2].Power = DEFAULT_RF_TX_POWER; +- else +- pAd->TxPower[i * 2].Power = Power.field.Byte0; +- +- if ((Power.field.Byte1 > 31) || (Power.field.Byte1 < 0)) +- pAd->TxPower[i * 2 + 1].Power = DEFAULT_RF_TX_POWER; +- else +- pAd->TxPower[i * 2 + 1].Power = Power.field.Byte1; +- +- if ((Power2.field.Byte0 > 31) || (Power2.field.Byte0 < 0)) +- pAd->TxPower[i * 2].Power2 = DEFAULT_RF_TX_POWER; +- else +- pAd->TxPower[i * 2].Power2 = Power2.field.Byte0; +- +- if ((Power2.field.Byte1 > 31) || (Power2.field.Byte1 < 0)) +- pAd->TxPower[i * 2 + 1].Power2 = DEFAULT_RF_TX_POWER; +- else +- pAd->TxPower[i * 2 + 1].Power2 = Power2.field.Byte1; +- } +- +- // 1. U-NII lower/middle band: 36, 38, 40; 44, 46, 48; 52, 54, 56; 60, 62, 64 (including central frequency in BW 40MHz) +- // 1.1 Fill up channel +- choffset = 14; +- for (i = 0; i < 4; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; +- } +- +- // 1.2 Fill up power +- for (i = 0; i < 6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + i * 2, Power2.word); +- +- if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; +- +- if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; +- +- if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; +- +- if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; +- } +- +- // 2. HipperLAN 2 100, 102 ,104; 108, 110, 112; 116, 118, 120; 124, 126, 128; 132, 134, 136; 140 (including central frequency in BW 40MHz) +- // 2.1 Fill up channel +- choffset = 14 + 12; +- for (i = 0; i < 5; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; +- } +- pAd->TxPower[3 * 5 + choffset + 0].Channel = 140; +- pAd->TxPower[3 * 5 + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 5 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; +- +- // 2.2 Fill up power +- for (i = 0; i < 8; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); +- +- if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; +- +- if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; +- +- if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; +- +- if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; +- } +- +- // 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165, 167, 169; 171, 173 (including central frequency in BW 40MHz) +- // 3.1 Fill up channel +- choffset = 14 + 12 + 16; +- /*for (i = 0; i < 2; i++)*/ +- for (i = 0; i < 3; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; +- } +- pAd->TxPower[3 * 3 + choffset + 0].Channel = 171; +- pAd->TxPower[3 * 3 + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 3 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; +- +- pAd->TxPower[3 * 3 + choffset + 1].Channel = 173; +- pAd->TxPower[3 * 3 + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 3 + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; +- +- // 3.2 Fill up power +- /*for (i = 0; i < 4; i++)*/ +- for (i = 0; i < 6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); +- +- if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; +- +- if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; +- +- if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; +- +- if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; +- } +- +- // 4. Print and Debug +- /*choffset = 14 + 12 + 16 + 7;*/ +- choffset = 14 + 12 + 16 + 11; +- +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Read the following from the registry +- 1. All the parameters +- 2. NetworkAddres +- +- Arguments: +- Adapter Pointer to our adapter +- WrapperConfigurationContext For use by NdisOpenConfiguration +- +- Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS NICReadRegParameters( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext +- ) +-{ +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- DBGPRINT_S(Status, ("<-- NICReadRegParameters, Status=%x\n", Status)); +- return Status; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Read initial parameters from EEPROM +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID NICReadEEPROMParameters( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR mac_addr) +-{ +- UINT32 data = 0; +- USHORT i, value, value2; +- UCHAR TmpPhy; +- EEPROM_TX_PWR_STRUC Power; +- EEPROM_VERSION_STRUC Version; +- EEPROM_ANTENNA_STRUC Antenna; +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters\n")); +- +- if (pAd->chipOps.eeinit) +- pAd->chipOps.eeinit(pAd); +-#ifdef RTMP_EFUSE_SUPPORT +-#ifdef RT30xx +- if(!pAd->bFroceEEPROMBuffer && pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters::(Efuse)Load to EEPROM Buffer Mode\n")); +- eFuseLoadEEPROM(pAd); +- } +-#endif // RT30xx // +-#endif // RTMP_EFUSE_SUPPORT // +- +- // Init EEPROM Address Number, before access EEPROM; if 93c46, EEPROMAddressNum=6, else if 93c66, EEPROMAddressNum=8 +- RTMP_IO_READ32(pAd, E2PROM_CSR, &data); +- DBGPRINT(RT_DEBUG_TRACE, ("--> E2PROM_CSR = 0x%x\n", data)); +- +- if((data & 0x30) == 0) +- pAd->EEPROMAddressNum = 6; // 93C46 +- else if((data & 0x30) == 0x10) +- pAd->EEPROMAddressNum = 8; // 93C66 +- else +- pAd->EEPROMAddressNum = 8; // 93C86 +- DBGPRINT(RT_DEBUG_TRACE, ("--> EEPROMAddressNum = %d\n", pAd->EEPROMAddressNum )); +- +- // RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize +- // MAC address registers according to E2PROM setting +- if (mac_addr == NULL || +- strlen((PSTRING) mac_addr) != 17 || +- mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || +- mac_addr[11] != ':' || mac_addr[14] != ':') +- { +- USHORT Addr01,Addr23,Addr45 ; +- +- RT28xx_EEPROM_READ16(pAd, 0x04, Addr01); +- RT28xx_EEPROM_READ16(pAd, 0x06, Addr23); +- RT28xx_EEPROM_READ16(pAd, 0x08, Addr45); +- +- pAd->PermanentAddress[0] = (UCHAR)(Addr01 & 0xff); +- pAd->PermanentAddress[1] = (UCHAR)(Addr01 >> 8); +- pAd->PermanentAddress[2] = (UCHAR)(Addr23 & 0xff); +- pAd->PermanentAddress[3] = (UCHAR)(Addr23 >> 8); +- pAd->PermanentAddress[4] = (UCHAR)(Addr45 & 0xff); +- pAd->PermanentAddress[5] = (UCHAR)(Addr45 >> 8); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from E2PROM \n")); +- } +- else +- { +- INT j; +- PSTRING macptr; +- +- macptr = (PSTRING) mac_addr; +- +- for (j=0; jPermanentAddress[j], 1); +- macptr=macptr+3; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from module parameter \n")); +- } +- +- +- { +- //more conveninet to test mbssid, so ap's bssid &0xf1 +- if (pAd->PermanentAddress[0] == 0xff) +- pAd->PermanentAddress[0] = RandomByte(pAd)&0xf8; +- +- //if (pAd->PermanentAddress[5] == 0xff) +- // pAd->PermanentAddress[5] = RandomByte(pAd)&0xf8; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->PermanentAddress[0], pAd->PermanentAddress[1], +- pAd->PermanentAddress[2], pAd->PermanentAddress[3], +- pAd->PermanentAddress[4], pAd->PermanentAddress[5])); +- if (pAd->bLocalAdminMAC == FALSE) +- { +- MAC_DW0_STRUC csr2; +- MAC_DW1_STRUC csr3; +- COPY_MAC_ADDR(pAd->CurrentAddress, pAd->PermanentAddress); +- csr2.field.Byte0 = pAd->CurrentAddress[0]; +- csr2.field.Byte1 = pAd->CurrentAddress[1]; +- csr2.field.Byte2 = pAd->CurrentAddress[2]; +- csr2.field.Byte3 = pAd->CurrentAddress[3]; +- RTMP_IO_WRITE32(pAd, MAC_ADDR_DW0, csr2.word); +- csr3.word = 0; +- csr3.field.Byte4 = pAd->CurrentAddress[4]; +- csr3.field.Byte5 = pAd->CurrentAddress[5]; +- csr3.field.U2MeMask = 0xff; +- RTMP_IO_WRITE32(pAd, MAC_ADDR_DW1, csr3.word); +- DBGPRINT_RAW(RT_DEBUG_TRACE,("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", +- PRINT_MAC(pAd->PermanentAddress))); +- } +- } +- +- // if not return early. cause fail at emulation. +- // Init the channel number for TX channel power +- RTMPReadChannelPwr(pAd); +- +- // if E2PROM version mismatch with driver's expectation, then skip +- // all subsequent E2RPOM retieval and set a system error bit to notify GUI +- RT28xx_EEPROM_READ16(pAd, EEPROM_VERSION_OFFSET, Version.word); +- pAd->EepromVersion = Version.field.Version + Version.field.FaeReleaseNumber * 256; +- DBGPRINT(RT_DEBUG_TRACE, ("E2PROM: Version = %d, FAE release #%d\n", Version.field.Version, Version.field.FaeReleaseNumber)); +- +- if (Version.field.Version > VALID_EEPROM_VERSION) +- { +- DBGPRINT_ERR(("E2PROM: WRONG VERSION 0x%x, should be %d\n",Version.field.Version, VALID_EEPROM_VERSION)); +- /*pAd->SystemErrorBitmap |= 0x00000001; +- +- // hard-code default value when no proper E2PROM installed +- pAd->bAutoTxAgcA = FALSE; +- pAd->bAutoTxAgcG = FALSE; +- +- // Default the channel power +- for (i = 0; i < MAX_NUM_OF_CHANNELS; i++) +- pAd->TxPower[i].Power = DEFAULT_RF_TX_POWER; +- +- // Default the channel power +- for (i = 0; i < MAX_NUM_OF_11JCHANNELS; i++) +- pAd->TxPower11J[i].Power = DEFAULT_RF_TX_POWER; +- +- for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++) +- pAd->EEPROMDefaultValue[i] = 0xffff; +- return; */ +- } +- +- // Read BBP default value from EEPROM and store to array(EEPROMDefaultValue) in pAd +- RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, value); +- pAd->EEPROMDefaultValue[0] = value; +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_NIC2_OFFSET, value); +- pAd->EEPROMDefaultValue[1] = value; +- +- RT28xx_EEPROM_READ16(pAd, 0x38, value); // Country Region +- pAd->EEPROMDefaultValue[2] = value; +- +- for(i = 0; i < 8; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_BBP_BASE_OFFSET + i*2, value); +- pAd->EEPROMDefaultValue[i+3] = value; +- } +- +- // We have to parse NIC configuration 0 at here. +- // If TSSI did not have preloaded value, it should reset the TxAutoAgc to false +- // Therefore, we have to read TxAutoAgc control beforehand. +- // Read Tx AGC control bit +- Antenna.word = pAd->EEPROMDefaultValue[0]; +- if (Antenna.word == 0xFFFF) +- { +-#ifdef RT30xx +- if(IS_RT3090(pAd)|| IS_RT3390(pAd)) +- { +- Antenna.word = 0; +- Antenna.field.RfIcType = RFIC_3020; +- Antenna.field.TxPath = 1; +- Antenna.field.RxPath = 1; +- } +- else +-#endif // RT30xx // +- { +- +- Antenna.word = 0; +- Antenna.field.RfIcType = RFIC_2820; +- Antenna.field.TxPath = 1; +- Antenna.field.RxPath = 2; +- DBGPRINT(RT_DEBUG_WARN, ("E2PROM error, hard code as 0x%04x\n", Antenna.word)); +- } +- } +- +- // Choose the desired Tx&Rx stream. +- if ((pAd->CommonCfg.TxStream == 0) || (pAd->CommonCfg.TxStream > Antenna.field.TxPath)) +- pAd->CommonCfg.TxStream = Antenna.field.TxPath; +- +- if ((pAd->CommonCfg.RxStream == 0) || (pAd->CommonCfg.RxStream > Antenna.field.RxPath)) +- { +- pAd->CommonCfg.RxStream = Antenna.field.RxPath; +- +- if ((pAd->MACVersion < RALINK_2883_VERSION) && +- (pAd->CommonCfg.RxStream > 2)) +- { +- // only 2 Rx streams for RT2860 series +- pAd->CommonCfg.RxStream = 2; +- } +- } +- +- // 3*3 +- // read value from EEPROM and set them to CSR174 ~ 177 in chain0 ~ chain2 +- // yet implement +- for(i=0; i<3; i++) +- { +- } +- +- NicConfig2.word = pAd->EEPROMDefaultValue[1]; +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if ((NicConfig2.word & 0x00ff) == 0xff) +- { +- NicConfig2.word &= 0xff00; +- } +- +- if ((NicConfig2.word >> 8) == 0xff) +- { +- NicConfig2.word &= 0x00ff; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- if (NicConfig2.field.DynamicTxAgcControl == 1) +- pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE; +- else +- pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("NICReadEEPROMParameters: RxPath = %d, TxPath = %d\n", Antenna.field.RxPath, Antenna.field.TxPath)); +- +- // Save the antenna for future use +- pAd->Antenna.word = Antenna.word; +- +- // Set the RfICType here, then we can initialize RFIC related operation callbacks +- pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; +- pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; +- +-#ifdef RTMP_RF_RW_SUPPORT +- RtmpChipOpsRFHook(pAd); +-#endif // RTMP_RF_RW_SUPPORT // +- +- // +- // Reset PhyMode if we don't support 802.11a +- // Only RFIC_2850 & RFIC_2750 support 802.11a +- // +- if ((Antenna.field.RfIcType != RFIC_2850) +- && (Antenna.field.RfIcType != RFIC_2750) +- && (Antenna.field.RfIcType != RFIC_3052)) +- { +- if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11A)) +- pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; +-#ifdef DOT11_N_SUPPORT +- else if ((pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11N_5G)) +- pAd->CommonCfg.PhyMode = PHY_11BGN_MIXED; +-#endif // DOT11_N_SUPPORT // +- } +- +- // Read TSSI reference and TSSI boundary for temperature compensation. This is ugly +- // 0. 11b/g +- { +- /* these are tempature reference value (0x00 ~ 0xFE) +- ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 +- TssiPlusBoundaryG [4] [3] [2] [1] [0] (smaller) + +- TssiMinusBoundaryG[0] [1] [2] [3] [4] (larger) */ +- RT28xx_EEPROM_READ16(pAd, 0x6E, Power.word); +- pAd->TssiMinusBoundaryG[4] = Power.field.Byte0; +- pAd->TssiMinusBoundaryG[3] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0x70, Power.word); +- pAd->TssiMinusBoundaryG[2] = Power.field.Byte0; +- pAd->TssiMinusBoundaryG[1] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0x72, Power.word); +- pAd->TssiRefG = Power.field.Byte0; /* reference value [0] */ +- pAd->TssiPlusBoundaryG[1] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0x74, Power.word); +- pAd->TssiPlusBoundaryG[2] = Power.field.Byte0; +- pAd->TssiPlusBoundaryG[3] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0x76, Power.word); +- pAd->TssiPlusBoundaryG[4] = Power.field.Byte0; +- pAd->TxAgcStepG = Power.field.Byte1; +- pAd->TxAgcCompensateG = 0; +- pAd->TssiMinusBoundaryG[0] = pAd->TssiRefG; +- pAd->TssiPlusBoundaryG[0] = pAd->TssiRefG; +- +- // Disable TxAgc if the based value is not right +- if (pAd->TssiRefG == 0xff) +- pAd->bAutoTxAgcG = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE,("E2PROM: G Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", +- pAd->TssiMinusBoundaryG[4], pAd->TssiMinusBoundaryG[3], pAd->TssiMinusBoundaryG[2], pAd->TssiMinusBoundaryG[1], +- pAd->TssiRefG, +- pAd->TssiPlusBoundaryG[1], pAd->TssiPlusBoundaryG[2], pAd->TssiPlusBoundaryG[3], pAd->TssiPlusBoundaryG[4], +- pAd->TxAgcStepG, pAd->bAutoTxAgcG)); +- } +- // 1. 11a +- { +- RT28xx_EEPROM_READ16(pAd, 0xD4, Power.word); +- pAd->TssiMinusBoundaryA[4] = Power.field.Byte0; +- pAd->TssiMinusBoundaryA[3] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0xD6, Power.word); +- pAd->TssiMinusBoundaryA[2] = Power.field.Byte0; +- pAd->TssiMinusBoundaryA[1] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0xD8, Power.word); +- pAd->TssiRefA = Power.field.Byte0; +- pAd->TssiPlusBoundaryA[1] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0xDA, Power.word); +- pAd->TssiPlusBoundaryA[2] = Power.field.Byte0; +- pAd->TssiPlusBoundaryA[3] = Power.field.Byte1; +- RT28xx_EEPROM_READ16(pAd, 0xDC, Power.word); +- pAd->TssiPlusBoundaryA[4] = Power.field.Byte0; +- pAd->TxAgcStepA = Power.field.Byte1; +- pAd->TxAgcCompensateA = 0; +- pAd->TssiMinusBoundaryA[0] = pAd->TssiRefA; +- pAd->TssiPlusBoundaryA[0] = pAd->TssiRefA; +- +- // Disable TxAgc if the based value is not right +- if (pAd->TssiRefA == 0xff) +- pAd->bAutoTxAgcA = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE,("E2PROM: A Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", +- pAd->TssiMinusBoundaryA[4], pAd->TssiMinusBoundaryA[3], pAd->TssiMinusBoundaryA[2], pAd->TssiMinusBoundaryA[1], +- pAd->TssiRefA, +- pAd->TssiPlusBoundaryA[1], pAd->TssiPlusBoundaryA[2], pAd->TssiPlusBoundaryA[3], pAd->TssiPlusBoundaryA[4], +- pAd->TxAgcStepA, pAd->bAutoTxAgcA)); +- } +- pAd->BbpRssiToDbmDelta = 0x0; +- +- // Read frequency offset setting for RF +- RT28xx_EEPROM_READ16(pAd, EEPROM_FREQ_OFFSET, value); +- if ((value & 0x00FF) != 0x00FF) +- pAd->RfFreqOffset = (ULONG) (value & 0x00FF); +- else +- pAd->RfFreqOffset = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("E2PROM: RF FreqOffset=0x%lx \n", pAd->RfFreqOffset)); +- +- //CountryRegion byte offset (38h) +- value = pAd->EEPROMDefaultValue[2] >> 8; // 2.4G band +- value2 = pAd->EEPROMDefaultValue[2] & 0x00FF; // 5G band +- +- if ((value <= REGION_MAXIMUM_BG_BAND) && (value2 <= REGION_MAXIMUM_A_BAND)) +- { +- pAd->CommonCfg.CountryRegion = ((UCHAR) value) | 0x80; +- pAd->CommonCfg.CountryRegionForABand = ((UCHAR) value2) | 0x80; +- TmpPhy = pAd->CommonCfg.PhyMode; +- pAd->CommonCfg.PhyMode = 0xff; +- RTMPSetPhyMode(pAd, TmpPhy); +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- } +- +- // +- // Get RSSI Offset on EEPROM 0x9Ah & 0x9Ch. +- // The valid value are (-10 ~ 10) +- // +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, value); +- pAd->BGRssiOffset0 = value & 0x00ff; +- pAd->BGRssiOffset1 = (value >> 8); +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET+2, value); +- pAd->BGRssiOffset2 = value & 0x00ff; +- pAd->ALNAGain1 = (value >> 8); +- RT28xx_EEPROM_READ16(pAd, EEPROM_LNA_OFFSET, value); +- pAd->BLNAGain = value & 0x00ff; +- pAd->ALNAGain0 = (value >> 8); +- +- // Validate 11b/g RSSI_0 offset. +- if ((pAd->BGRssiOffset0 < -10) || (pAd->BGRssiOffset0 > 10)) +- pAd->BGRssiOffset0 = 0; +- +- // Validate 11b/g RSSI_1 offset. +- if ((pAd->BGRssiOffset1 < -10) || (pAd->BGRssiOffset1 > 10)) +- pAd->BGRssiOffset1 = 0; +- +- // Validate 11b/g RSSI_2 offset. +- if ((pAd->BGRssiOffset2 < -10) || (pAd->BGRssiOffset2 > 10)) +- pAd->BGRssiOffset2 = 0; +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_A_OFFSET, value); +- pAd->ARssiOffset0 = value & 0x00ff; +- pAd->ARssiOffset1 = (value >> 8); +- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_A_OFFSET+2), value); +- pAd->ARssiOffset2 = value & 0x00ff; +- pAd->ALNAGain2 = (value >> 8); +- +- if (((UCHAR)pAd->ALNAGain1 == 0xFF) || (pAd->ALNAGain1 == 0x00)) +- pAd->ALNAGain1 = pAd->ALNAGain0; +- if (((UCHAR)pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) +- pAd->ALNAGain2 = pAd->ALNAGain0; +- +- // Validate 11a RSSI_0 offset. +- if ((pAd->ARssiOffset0 < -10) || (pAd->ARssiOffset0 > 10)) +- pAd->ARssiOffset0 = 0; +- +- // Validate 11a RSSI_1 offset. +- if ((pAd->ARssiOffset1 < -10) || (pAd->ARssiOffset1 > 10)) +- pAd->ARssiOffset1 = 0; +- +- //Validate 11a RSSI_2 offset. +- if ((pAd->ARssiOffset2 < -10) || (pAd->ARssiOffset2 > 10)) +- pAd->ARssiOffset2 = 0; +- +-#ifdef RT30xx +- // +- // Get TX mixer gain setting +- // 0xff are invalid value +- // Note: RT30xX default value is 0x00 and will program to RF_R17 only when this value is not zero. +- // RT359X default value is 0x02 +- // +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXMIXER_GAIN_2_4G, value); +- pAd->TxMixerGain24G = 0; +- value &= 0x00ff; +- if (value != 0xff) +- { +- value &= 0x07; +- pAd->TxMixerGain24G = (UCHAR)value; +- } +- } +-#endif // RT30xx // +- +- // +- // Get LED Setting. +- // +- RT28xx_EEPROM_READ16(pAd, 0x3a, value); +- pAd->LedCntl.word = (value>>8); +- RT28xx_EEPROM_READ16(pAd, EEPROM_LED1_OFFSET, value); +- pAd->Led1 = value; +- RT28xx_EEPROM_READ16(pAd, EEPROM_LED2_OFFSET, value); +- pAd->Led2 = value; +- RT28xx_EEPROM_READ16(pAd, EEPROM_LED3_OFFSET, value); +- pAd->Led3 = value; +- +- RTMPReadTxPwrPerRate(pAd); +- +-#ifdef SINGLE_SKU +- RT28xx_EEPROM_READ16(pAd, EEPROM_DEFINE_MAX_TXPWR, pAd->CommonCfg.DefineMaxTxPwr); +-#endif // SINGLE_SKU // +- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +- RtmpEfuseSupportCheck(pAd); +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n")); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Set default value from EEPROM +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID NICInitAsicFromEEPROM( +- IN PRTMP_ADAPTER pAd) +-{ +-#ifdef CONFIG_STA_SUPPORT +- UINT32 data = 0; +- UCHAR BBPR1 = 0; +-#endif // CONFIG_STA_SUPPORT // +- USHORT i; +-// EEPROM_ANTENNA_STRUC Antenna; +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; +- UCHAR BBPR3 = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitAsicFromEEPROM\n")); +- for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++) +- { +- UCHAR BbpRegIdx, BbpValue; +- +- if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) && (pAd->EEPROMDefaultValue[i] != 0)) +- { +- BbpRegIdx = (UCHAR)(pAd->EEPROMDefaultValue[i] >> 8); +- BbpValue = (UCHAR)(pAd->EEPROMDefaultValue[i] & 0xff); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BbpRegIdx, BbpValue); +- } +- } +- +- +- NicConfig2.word = pAd->EEPROMDefaultValue[1]; +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if ((NicConfig2.word & 0x00ff) == 0xff) +- { +- NicConfig2.word &= 0xff00; +- } +- +- if ((NicConfig2.word >> 8) == 0xff) +- { +- NicConfig2.word &= 0x00ff; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Save the antenna for future use +- pAd->NicConfig2.word = NicConfig2.word; +- +-#ifdef RT30xx +- // set default antenna as main +- if (pAd->RfIcType == RFIC_3020) +- AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +-#endif // RT30xx // +- +- // +- // Send LED Setting to MCU. +- // +- if (pAd->LedCntl.word == 0xFF) +- { +- pAd->LedCntl.word = 0x01; +- pAd->Led1 = 0x5555; +- pAd->Led2 = 0x2221; +- +-#ifdef RTMP_MAC_PCI +- pAd->Led3 = 0xA9F8; +-#endif // RTMP_MAC_PCI // +- } +- +- AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8)); +- AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR)pAd->Led2, (UCHAR)(pAd->Led2 >> 8)); +- AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR)pAd->Led3, (UCHAR)(pAd->Led3 >> 8)); +- AsicSendCommandToMcu(pAd, 0x51, 0xff, 0, pAd->LedCntl.field.Polarity); +- +- pAd->LedIndicatorStrength = 0xFF; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Read Hardware controlled Radio state enable bit +- if (NicConfig2.field.HardwareRadioControl == 1) +- { +- pAd->StaCfg.bHardwareRadio = TRUE; +- +- // Read GPIO pin2 as Hardware controlled radio state +- RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); +- if ((data & 0x04) == 0) +- { +- pAd->StaCfg.bHwRadio = FALSE; +- pAd->StaCfg.bRadio = FALSE; +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- } +- } +- else +- pAd->StaCfg.bHardwareRadio = FALSE; +- +- if (pAd->StaCfg.bRadio == FALSE) +- { +- RTMPSetLED(pAd, LED_RADIO_OFF); +- } +- else +- { +- RTMPSetLED(pAd, LED_RADIO_ON); +-#ifdef RTMP_MAC_PCI +-#ifdef RT3090 +- AsicSendCommandToMcu(pAd, 0x30, PowerRadioOffCID, 0xff, 0x02); +- AsicCheckCommanOk(pAd, PowerRadioOffCID); +-#endif // RT3090 // +-#ifndef RT3090 +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); +-#endif // RT3090 // +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00); +- // 2-1. wait command ok. +- AsicCheckCommanOk(pAd, PowerWakeCID); +-#endif // RTMP_MAC_PCI // +- } +- } +-#ifdef RTMP_MAC_PCI +-#ifdef RT30xx +- if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +- } +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- +- if ((IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("%s::%d,release Mcu Lock\n",__FUNCTION__,__LINE__)); +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } +-#endif // RT30xx // +-#endif // RTMP_MAC_PCI // +-#endif // CONFIG_STA_SUPPORT // +- +- // Turn off patching for cardbus controller +- if (NicConfig2.field.CardbusAcceleration == 1) +- { +-// pAd->bTest1 = TRUE; +- } +- +- if (NicConfig2.field.DynamicTxAgcControl == 1) +- pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE; +- else +- pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; +- // +- // Since BBP has been progamed, to make sure BBP setting will be +- // upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! +- // +- pAd->CommonCfg.BandState = UNKNOWN_BAND; +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +- BBPR3 &= (~0x18); +- if(pAd->Antenna.field.RxPath == 3) +- { +- BBPR3 |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- BBPR3 |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- BBPR3 |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Handle the difference when 1T +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BBPR1); +- if(pAd->Antenna.field.TxPath == 1) +- { +- BBPR1 &= (~0x18); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BBPR1); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", +- pAd->CommonCfg.bHardwareRadio, pAd->CommonCfg.bHardwareRadio)); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", +- pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, +- pAd->RfIcType, pAd->LedCntl.word)); +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Initialize NIC hardware +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS NICInitializeAdapter( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset) +-{ +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- WPDMA_GLO_CFG_STRUC GloCfg; +-#ifdef RTMP_MAC_PCI +- UINT32 Value; +- DELAY_INT_CFG_STRUC IntCfg; +-#endif // RTMP_MAC_PCI // +-// INT_MASK_CSR_STRUC IntMask; +- ULONG i =0, j=0; +- AC_TXOP_CSR0_STRUC csr0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n")); +- +- // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: +-retry: +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- RTMPusecDelay(1000); +- i++; +- }while ( i<100); +- DBGPRINT(RT_DEBUG_TRACE, ("<== DMA offset 0x208 = 0x%x\n", GloCfg.word)); +- GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +- // Record HW Beacon offset +- pAd->BeaconOffset[0] = HW_BEACON_BASE0; +- pAd->BeaconOffset[1] = HW_BEACON_BASE1; +- pAd->BeaconOffset[2] = HW_BEACON_BASE2; +- pAd->BeaconOffset[3] = HW_BEACON_BASE3; +- pAd->BeaconOffset[4] = HW_BEACON_BASE4; +- pAd->BeaconOffset[5] = HW_BEACON_BASE5; +- pAd->BeaconOffset[6] = HW_BEACON_BASE6; +- pAd->BeaconOffset[7] = HW_BEACON_BASE7; +- +- // +- // write all shared Ring's base address into ASIC +- // +- +- // asic simulation sequence put this ahead before loading firmware. +- // pbf hardware reset +-#ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); // 0x10000 for reset rx, 0x3f resets all 6 tx rings. +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f); +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00); +-#endif // RTMP_MAC_PCI // +- +- // Initialze ASIC for TX & Rx operation +- if (NICInitializeAsic(pAd , bHardReset) != NDIS_STATUS_SUCCESS) +- { +- if (j++ == 0) +- { +- NICLoadFirmware(pAd); +- goto retry; +- } +- return NDIS_STATUS_FAILURE; +- } +- +- +-#ifdef RTMP_MAC_PCI +- // Write AC_BK base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR1 : 0x%x\n", Value)); +- +- // Write AC_BE base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR0, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR0 : 0x%x\n", Value)); +- +- // Write AC_VI base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR2, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR2 : 0x%x\n", Value)); +- +- // Write AC_VO base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%x\n", Value)); +- +- // Write HCCA base address register +- /* +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR4 : 0x%x\n", Value)); +- */ +- +- // Write MGMT_BASE_CSR register +- Value = RTMP_GetPhysicalAddressLow(pAd->MgmtRing.Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, TX_BASE_PTR5, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR5 : 0x%x\n", Value)); +- +- // Write RX_BASE_CSR register +- Value = RTMP_GetPhysicalAddressLow(pAd->RxRing.Cell[0].AllocPa); +- RTMP_IO_WRITE32(pAd, RX_BASE_PTR, Value); +- DBGPRINT(RT_DEBUG_TRACE, ("--> RX_BASE_PTR : 0x%x\n", Value)); +- +- // Init RX Ring index pointer +- pAd->RxRing.RxSwReadIdx = 0; +- pAd->RxRing.RxCpuIdx = RX_RING_SIZE-1; +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- +- // Init TX rings index pointer +- { +- for (i=0; iTxRing[i].TxSwFreeIdx = 0; +- pAd->TxRing[i].TxCpuIdx = 0; +- RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TxCpuIdx); +- } +- } +- +- // init MGMT ring index pointer +- pAd->MgmtRing.TxSwFreeIdx = 0; +- pAd->MgmtRing.TxCpuIdx = 0; +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +- +- // +- // set each Ring's SIZE into ASIC. Descriptor Size is fixed by design. +- // +- +- // Write TX_RING_CSR0 register +- Value = TX_RING_SIZE; +- RTMP_IO_WRITE32(pAd, TX_MAX_CNT0, Value); +- RTMP_IO_WRITE32(pAd, TX_MAX_CNT1, Value); +- RTMP_IO_WRITE32(pAd, TX_MAX_CNT2, Value); +- RTMP_IO_WRITE32(pAd, TX_MAX_CNT3, Value); +- RTMP_IO_WRITE32(pAd, TX_MAX_CNT4, Value); +- Value = MGMT_RING_SIZE; +- RTMP_IO_WRITE32(pAd, TX_MGMTMAX_CNT, Value); +- +- // Write RX_RING_CSR register +- Value = RX_RING_SIZE; +- RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value); +-#endif // RTMP_MAC_PCI // +- +- +- // WMM parameter +- csr0.word = 0; +- RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- csr0.field.Ac0Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr0.field.Ac1Txop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- csr0.field.Ac0Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr0.field.Ac1Txop = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word); +- +- +-#ifdef RTMP_MAC_PCI +- // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- RTMPusecDelay(1000); +- i++; +- }while ( i < 100); +- +- GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); +- +- IntCfg.word = 0; +- RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word); +-#endif // RTMP_MAC_PCI // +- +- +- // reset action +- // Load firmware +- // Status = NICLoadFirmware(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAdapter\n")); +- return Status; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Initialize ASIC +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS NICInitializeAsic( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset) +-{ +- ULONG Index = 0; +- UCHAR R0 = 0xff; +- UINT32 MacCsr12 = 0, Counter = 0; +-#ifdef RT30xx +- UCHAR bbpreg=0; +- UCHAR RFValue=0; +-#endif // RT30xx // +- USHORT KeyIdx; +- INT i,apidx; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n")); +- +-#ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x3); // To fix driver disable/enable hang issue when radio off +- if (bHardReset == TRUE) +- { +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3); +- } +- else +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); +- // Initialize MAC register to default value +- for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) +- { +-#ifdef RT30xx +- if ((MACRegTable[Index].Register == TX_SW_CFG0) && ( IS_RT3090(pAd) || IS_RT3390(pAd))) +- { +- MACRegTable[Index].Value = 0x00000400; +- } +-#endif // RT30xx // +- RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value); +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) +- { +- RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, STAMACRegTable[Index].Value); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +-#endif // RTMP_MAC_PCI // +- +- +-#ifdef RT30xx +- // Initialize RT3070 serial MAC registers which is different from RT2870 serial +- if (IS_RT3090(pAd) || IS_RT3572(pAd)||IS_RT3390(pAd)) +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); +- +- // RT3071 version E has fixed this issue +- if ((pAd->MACVersion & 0xffff) < 0x0211) +- { +- if (pAd->NicConfig2.field.DACTestBit == 1) +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically +- } +- else +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0F); // To fix throughput drop drastically +- } +- } +- else +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0); +- } +- } +- else if (IS_RT3070(pAd)) +- { +- if (((pAd->MACVersion & 0xffff) < 0x0201)) +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically +- } +- else +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0); +- } +- } +-#endif // RT30xx // +- +- // +- // Before program BBP, we need to wait BBP/RF get wake up. +- // +- Index = 0; +- do +- { +- RTMP_IO_READ32(pAd, MAC_STATUS_CFG, &MacCsr12); +- +- if ((MacCsr12 & 0x03) == 0) // if BB.RF is stable +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Check MAC_STATUS_CFG = Busy = %x\n", MacCsr12)); +- RTMPusecDelay(1000); +- } while (Index++ < 100); +- +- // The commands to firmware should be after these commands, these commands will init firmware +- // PCI and USB are not the same because PCI driver needs to wait for PCI bus ready +- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0); // initialize BBP R/W access agent +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, 0); +-#ifdef RT3090 +- //2008/11/28:KH add to fix the dead rf frequency offset bug<-- +- AsicSendCommandToMcu(pAd, 0x72, 0, 0, 0); +- //2008/11/28:KH add to fix the dead rf frequency offset bug--> +-#endif // RT3090 // +- RTMPusecDelay(1000); +- +- // Read BBP register, make sure BBP is up and running before write new data +- Index = 0; +- do +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R0, &R0); +- DBGPRINT(RT_DEBUG_TRACE, ("BBP version = %x\n", R0)); +- } while ((++Index < 20) && ((R0 == 0xff) || (R0 == 0x00))); +- //ASSERT(Index < 20); //this will cause BSOD on Check-build driver +- +- if ((R0 == 0xff) || (R0 == 0x00)) +- return NDIS_STATUS_FAILURE; +- +- // Initialize BBP register to default value +- for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value); +- } +- +-#ifdef RTMP_MAC_PCI +- // TODO: shiang, check MACVersion, currently, rbus-based chip use this. +- if (pAd->MACVersion == 0x28720200) +- { +- //UCHAR value; +- ULONG value2; +- +- //disable MLD by Bruce 20080704 +- //BBP_IO_READ8_BY_REG_ID(pAd, BBP_R105, &value); +- //BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R105, value | 4); +- +- //Maximum PSDU length from 16K to 32K bytes +- RTMP_IO_READ32(pAd, MAX_LEN_CFG, &value2); +- value2 &= ~(0x3<<12); +- value2 |= (0x2<<12); +- RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, value2); +- } +-#endif // RTMP_MAC_PCI // +- +- // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. +- // RT3090 should not program BBP R84 to 0x19, otherwise TX will block. +- //3070/71/72,3090,3090A( are included in RT30xx),3572,3390 +- if (((pAd->MACVersion & 0xffff) != 0x0101) && !(IS_RT30xx(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd))) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); +- +-#ifdef RT30xx +-// add by johnli, RF power sequence setup +- if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { //update for RT3070/71/72/90/91/92,3572,3390. +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R79, 0x13); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R80, 0x05); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R81, 0x33); +- } +- +- if (IS_RT3090(pAd)||IS_RT3390(pAd)) // RT309x, RT3071/72 +- { +- // enable DC filter +- if ((pAd->MACVersion & 0xffff) >= 0x0211) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); +- } +- +- // improve power consumption +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R138, &bbpreg); +- if (pAd->Antenna.field.TxPath == 1) +- { +- // turn off tx DAC_1 +- bbpreg = (bbpreg | 0x20); +- } +- +- if (pAd->Antenna.field.RxPath == 1) +- { +- // turn off tx ADC_1 +- bbpreg &= (~0x2); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R138, bbpreg); +- +- // improve power consumption in RT3071 Ver.E +- if ((pAd->MACVersion & 0xffff) >= 0x0211) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); +- bbpreg &= (~0x3); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); +- } +- } +- else if (IS_RT3070(pAd)) +- { +- if ((pAd->MACVersion & 0xffff) >= 0x0201) +- { +- // enable DC filter +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); +- +- // improve power consumption in RT3070 Ver.F +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); +- bbpreg &= (~0x3); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); +- } +- +- // TX_LO1_en, RF R17 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R17, &RFValue); +- RFValue &= (~0x08); +- // to fix rx long range issue +- if (pAd->NicConfig2.field.ExternalLNAForG == 0) +- { +- RFValue |= 0x20; +- } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 1) +- { +- RFValue &= (~0x7); // clean bit [2:0] +- RFValue |= pAd->TxMixerGain24G; +- } +- RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +- } +-// end johnli +-#endif // RT30xx // +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); +- } +- +- if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) // 3*3 +- { +- // enlarge MAX_LEN_CFG +- UINT32 csr; +- RTMP_IO_READ32(pAd, MAX_LEN_CFG, &csr); +- csr &= 0xFFF; +- csr |= 0x2000; +- RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, csr); +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- // Add radio off control +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (pAd->StaCfg.bRadio == FALSE) +- { +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("Set Radio Off\n")); +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Clear raw counters +- RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter); +- RTMP_IO_READ32(pAd, RX_STA_CNT1, &Counter); +- RTMP_IO_READ32(pAd, RX_STA_CNT2, &Counter); +- RTMP_IO_READ32(pAd, TX_STA_CNT0, &Counter); +- RTMP_IO_READ32(pAd, TX_STA_CNT1, &Counter); +- RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter); +- +- // ASIC will keep garbage value after boot +- // Clear all shared key table when initial +- // This routine can be ignored in radio-ON/OFF operation. +- if (bHardReset) +- { +- for (KeyIdx = 0; KeyIdx < 4; KeyIdx++) +- { +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4*KeyIdx, 0); +- } +- +- // Clear all pairwise key table when initial +- for (KeyIdx = 0; KeyIdx < 256; KeyIdx++) +- { +- RTMP_IO_WRITE32(pAd, MAC_WCID_ATTRIBUTE_BASE + (KeyIdx * HW_WCID_ATTRI_SIZE), 1); +- } +- } +- +- // assert HOST ready bit +-// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark +-// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4); +- +- // It isn't necessary to clear this space when not hard reset. +- if (bHardReset == TRUE) +- { +- // clear all on-chip BEACON frame space +- for (apidx = 0; apidx < HW_BEACON_MAX_COUNT; apidx++) +- { +- for (i = 0; i < HW_BEACON_OFFSET>>2; i+=4) +- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[apidx] + i, 0x00); +- } +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT. +- if ((pAd->MACVersion&0xffff) != 0x0101) +- RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x583f); +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef RT30xx +-#ifdef NEW_FW +- if (IS_RT3070(pAd) || IS_RT3572(pAd)||IS_RT3390(pAd)||IS_RT3090(pAd)) +- { +- // send 0x36 mcu command after 0x72 for RT3xxx to fix Radio-Off current leakage issue +- RTMPusecDelay(200); +- if (pAd->buseEfuse) +- AsicSendCommandToMcu(pAd, 0x36, 0xff, 0xff, 0); +- else +- AsicSendCommandToMcu(pAd, 0x36, 0xff, 0xff, 0x04); +- RTMPusecDelay(10); +- } +-#endif // NEW_FW // +-#endif // RT30xx // +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAsic\n")); +- return NDIS_STATUS_SUCCESS; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Reset NIC Asics +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- Reset NIC to initial state AS IS system boot up time. +- +- ======================================================================== +-*/ +-VOID NICIssueReset( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 Value = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); +- +- // Abort Tx, prevent ASIC from writing to Host memory +- //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x001f0000); +- +- // Disable Rx, register value supposed will remain after reset +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= (0xfffffff3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // Issue reset and clear from reset state +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); // 2004-09-17 change from 0x01 +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x00); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICIssueReset\n")); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Check ASIC registers and find any reason the system might hang +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-BOOLEAN NICCheckForHang( +- IN PRTMP_ADAPTER pAd) +-{ +- return (FALSE); +-} +- +-VOID NICUpdateFifoStaCounters( +- IN PRTMP_ADAPTER pAd) +-{ +- TX_STA_FIFO_STRUC StaFifo; +- MAC_TABLE_ENTRY *pEntry; +- UCHAR i = 0; +- UCHAR pid = 0, wcid = 0; +- CHAR reTry; +- UCHAR succMCS; +- +-#ifdef RALINK_ATE +- /* Nothing to do in ATE mode */ +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- do +- { +- RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word); +- +- if (StaFifo.field.bValid == 0) +- break; +- +- wcid = (UCHAR)StaFifo.field.wcid; +- +- +- /* ignore NoACK and MGMT frame use 0xFF as WCID */ +- if ((StaFifo.field.TxAckRequired == 0) || (wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- i++; +- continue; +- } +- +- /* PID store Tx MCS Rate */ +- pid = (UCHAR)StaFifo.field.PidType; +- +- pEntry = &pAd->MacTab.Content[wcid]; +- +- pEntry->DebugFIFOCount++; +- +-#ifdef DOT11_N_SUPPORT +- if (StaFifo.field.TxBF) // 3*3 +- pEntry->TxBFCount++; +-#endif // DOT11_N_SUPPORT // +- +-#ifdef UAPSD_AP_SUPPORT +- UAPSD_SP_AUE_Handle(pAd, pEntry, StaFifo.field.TxSuccess); +-#endif // UAPSD_AP_SUPPORT // +- +- if (!StaFifo.field.TxSuccess) +- { +- pEntry->FIFOCount++; +- pEntry->OneSecTxFailCount++; +- +- if (pEntry->FIFOCount >= 1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("#")); +-#ifdef DOT11_N_SUPPORT +- pEntry->NoBADataCountDown = 64; +-#endif // DOT11_N_SUPPORT // +- +- if(pEntry->PsMode == PWR_ACTIVE) +- { +-#ifdef DOT11_N_SUPPORT +- int tid; +- for (tid=0; tidAid, tid, FALSE, FALSE); +- } +-#endif // DOT11_N_SUPPORT // +- +- // Update the continuous transmission counter except PS mode +- pEntry->ContinueTxFailCnt++; +- +-#ifdef WDS_SUPPORT +- // fix WDS Jam issue +- if((pEntry->ValidAsWDS == TRUE) +- && (pEntry->LockEntryTx == FALSE) +- && (pEntry->ContinueTxFailCnt >= pAd->ApCfg.EntryLifeCheck)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Entry %02x:%02x:%02x:%02x:%02x:%02x Blocked!! (Fail Cnt = %d)\n", +- pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2],pEntry->Addr[3], +- pEntry->Addr[4],pEntry->Addr[5],pEntry->ContinueTxFailCnt )); +- +- pEntry->LockEntryTx = TRUE; +- } +-#endif // WDS_SUPPORT // +- } +- else +- { +- // Clear the FIFOCount when sta in Power Save mode. Basically we assume +- // this tx error happened due to sta just go to sleep. +- pEntry->FIFOCount = 0; +- pEntry->ContinueTxFailCnt = 0; +- } +- //pEntry->FIFOCount = 0; +- } +- //pEntry->bSendBAR = TRUE; +- } +- else +- { +-#ifdef DOT11_N_SUPPORT +- if ((pEntry->PsMode != PWR_SAVE) && (pEntry->NoBADataCountDown > 0)) +- { +- pEntry->NoBADataCountDown--; +- if (pEntry->NoBADataCountDown==0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("@\n")); +- } +- } +-#endif // DOT11_N_SUPPORT // +- pEntry->FIFOCount = 0; +- pEntry->OneSecTxNoRetryOkCount++; +- // update NoDataIdleCount when sucessful send packet to STA. +- pEntry->NoDataIdleCount = 0; +- pEntry->ContinueTxFailCnt = 0; +-#ifdef WDS_SUPPORT +- pEntry->LockEntryTx = FALSE; +-#endif // WDS_SUPPORT // +- } +- +- succMCS = StaFifo.field.SuccessRate & 0x7F; +- +- reTry = pid - succMCS; +- +- if (StaFifo.field.TxSuccess) +- { +- pEntry->TXMCSExpected[pid]++; +- if (pid == succMCS) +- { +- pEntry->TXMCSSuccessful[pid]++; +- } +- else +- { +- pEntry->TXMCSAutoFallBack[pid][succMCS]++; +- } +- } +- else +- { +- pEntry->TXMCSFailed[pid]++; +- } +- +- if (reTry > 0) +- { +- if ((pid >= 12) && succMCS <=7) +- { +- reTry -= 4; +- } +- pEntry->OneSecTxRetryOkCount += reTry; +- } +- +- i++; +- // ASIC store 16 stack +- } while ( i < (TX_RING_SIZE<<1) ); +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Read statistical counters from hardware registers and record them +- in software variables for later on query +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID NICUpdateRawCounters( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 OldValue;//, Value2; +- //ULONG PageSum, OneSecTransmitCount; +- //ULONG TxErrorRatio, Retry, Fail; +- RX_STA_CNT0_STRUC RxStaCnt0; +- RX_STA_CNT1_STRUC RxStaCnt1; +- RX_STA_CNT2_STRUC RxStaCnt2; +- TX_STA_CNT0_STRUC TxStaCnt0; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT2_STRUC StaTx2; +- TX_AGG_CNT_STRUC TxAggCnt; +- TX_AGG_CNT0_STRUC TxAggCnt0; +- TX_AGG_CNT1_STRUC TxAggCnt1; +- TX_AGG_CNT2_STRUC TxAggCnt2; +- TX_AGG_CNT3_STRUC TxAggCnt3; +- TX_AGG_CNT4_STRUC TxAggCnt4; +- TX_AGG_CNT5_STRUC TxAggCnt5; +- TX_AGG_CNT6_STRUC TxAggCnt6; +- TX_AGG_CNT7_STRUC TxAggCnt7; +- COUNTER_RALINK *pRalinkCounters; +- +- +- pRalinkCounters = &pAd->RalinkCounters; +- +- RTMP_IO_READ32(pAd, RX_STA_CNT0, &RxStaCnt0.word); +- RTMP_IO_READ32(pAd, RX_STA_CNT2, &RxStaCnt2.word); +- +- { +- RTMP_IO_READ32(pAd, RX_STA_CNT1, &RxStaCnt1.word); +- // Update RX PLCP error counter +- pAd->PrivateInfo.PhyRxErrCnt += RxStaCnt1.field.PlcpErr; +- // Update False CCA counter +- pAd->RalinkCounters.OneSecFalseCCACnt += RxStaCnt1.field.FalseCca; +- } +- +- // Update FCS counters +- OldValue= pAd->WlanCounters.FCSErrorCount.u.LowPart; +- pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); // >> 7); +- if (pAd->WlanCounters.FCSErrorCount.u.LowPart < OldValue) +- pAd->WlanCounters.FCSErrorCount.u.HighPart++; +- +- // Add FCS error count to private counters +- pRalinkCounters->OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr; +- OldValue = pRalinkCounters->RealFcsErrCount.u.LowPart; +- pRalinkCounters->RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr; +- if (pRalinkCounters->RealFcsErrCount.u.LowPart < OldValue) +- pRalinkCounters->RealFcsErrCount.u.HighPart++; +- +- // Update Duplicate Rcv check +- pRalinkCounters->DuplicateRcv += RxStaCnt2.field.RxDupliCount; +- pAd->WlanCounters.FrameDuplicateCount.u.LowPart += RxStaCnt2.field.RxDupliCount; +- // Update RX Overflow counter +- pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount); +- +- //pAd->RalinkCounters.RxCount = 0; +- +- +- //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || +- // (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) +- if (!pAd->bUpdateBcnCntDone) +- { +- // Update BEACON sent count +- RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word); +- pRalinkCounters->OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount; +- pRalinkCounters->OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pRalinkCounters->OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pRalinkCounters->OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; +- } +- +- +- //if (pAd->bStaFifoTest == TRUE) +- { +- RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT0, &TxAggCnt0.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT1, &TxAggCnt1.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT2, &TxAggCnt2.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT3, &TxAggCnt3.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT4, &TxAggCnt4.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT5, &TxAggCnt5.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT6, &TxAggCnt6.word); +- RTMP_IO_READ32(pAd, TX_AGG_CNT7, &TxAggCnt7.word); +- pRalinkCounters->TxAggCount += TxAggCnt.field.AggTxCount; +- pRalinkCounters->TxNonAggCount += TxAggCnt.field.NonAggTxCount; +- pRalinkCounters->TxAgg1MPDUCount += TxAggCnt0.field.AggSize1Count; +- pRalinkCounters->TxAgg2MPDUCount += TxAggCnt0.field.AggSize2Count; +- +- pRalinkCounters->TxAgg3MPDUCount += TxAggCnt1.field.AggSize3Count; +- pRalinkCounters->TxAgg4MPDUCount += TxAggCnt1.field.AggSize4Count; +- pRalinkCounters->TxAgg5MPDUCount += TxAggCnt2.field.AggSize5Count; +- pRalinkCounters->TxAgg6MPDUCount += TxAggCnt2.field.AggSize6Count; +- +- pRalinkCounters->TxAgg7MPDUCount += TxAggCnt3.field.AggSize7Count; +- pRalinkCounters->TxAgg8MPDUCount += TxAggCnt3.field.AggSize8Count; +- pRalinkCounters->TxAgg9MPDUCount += TxAggCnt4.field.AggSize9Count; +- pRalinkCounters->TxAgg10MPDUCount += TxAggCnt4.field.AggSize10Count; +- +- pRalinkCounters->TxAgg11MPDUCount += TxAggCnt5.field.AggSize11Count; +- pRalinkCounters->TxAgg12MPDUCount += TxAggCnt5.field.AggSize12Count; +- pRalinkCounters->TxAgg13MPDUCount += TxAggCnt6.field.AggSize13Count; +- pRalinkCounters->TxAgg14MPDUCount += TxAggCnt6.field.AggSize14Count; +- +- pRalinkCounters->TxAgg15MPDUCount += TxAggCnt7.field.AggSize15Count; +- pRalinkCounters->TxAgg16MPDUCount += TxAggCnt7.field.AggSize16Count; +- +- // Calculate the transmitted A-MPDU count +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += TxAggCnt0.field.AggSize1Count; +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt0.field.AggSize2Count / 2); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize3Count / 3); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize4Count / 4); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize5Count / 5); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize6Count / 6); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize7Count / 7); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize8Count / 8); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize9Count / 9); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize10Count / 10); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize11Count / 11); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize12Count / 12); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize13Count / 13); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize14Count / 14); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize15Count / 15); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize16Count / 16); +- } +- +-#ifdef DBG_DIAGNOSE +- { +- RtmpDiagStruct *pDiag; +- UCHAR ArrayCurIdx, i; +- +- pDiag = &pAd->DiagStruct; +- ArrayCurIdx = pDiag->ArrayCurIdx; +- +- if (pDiag->inited == 0) +- { +- NdisZeroMemory(pDiag, sizeof(struct _RtmpDiagStrcut_)); +- pDiag->ArrayStartIdx = pDiag->ArrayCurIdx = 0; +- pDiag->inited = 1; +- } +- else +- { +- // Tx +- pDiag->TxFailCnt[ArrayCurIdx] = TxStaCnt0.field.TxFailCount; +- pDiag->TxAggCnt[ArrayCurIdx] = TxAggCnt.field.AggTxCount; +- pDiag->TxNonAggCnt[ArrayCurIdx] = TxAggCnt.field.NonAggTxCount; +- pDiag->TxAMPDUCnt[ArrayCurIdx][0] = TxAggCnt0.field.AggSize1Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][1] = TxAggCnt0.field.AggSize2Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][2] = TxAggCnt1.field.AggSize3Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][3] = TxAggCnt1.field.AggSize4Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][4] = TxAggCnt2.field.AggSize5Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][5] = TxAggCnt2.field.AggSize6Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][6] = TxAggCnt3.field.AggSize7Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][7] = TxAggCnt3.field.AggSize8Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][8] = TxAggCnt4.field.AggSize9Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][9] = TxAggCnt4.field.AggSize10Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][10] = TxAggCnt5.field.AggSize11Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][11] = TxAggCnt5.field.AggSize12Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][12] = TxAggCnt6.field.AggSize13Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][13] = TxAggCnt6.field.AggSize14Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][14] = TxAggCnt7.field.AggSize15Count; +- pDiag->TxAMPDUCnt[ArrayCurIdx][15] = TxAggCnt7.field.AggSize16Count; +- +- pDiag->RxCrcErrCnt[ArrayCurIdx] = RxStaCnt0.field.CrcErr; +- +- INC_RING_INDEX(pDiag->ArrayCurIdx, DIAGNOSE_TIME); +- ArrayCurIdx = pDiag->ArrayCurIdx; +- for (i =0; i < 9; i++) +- { +- pDiag->TxDescCnt[ArrayCurIdx][i]= 0; +- pDiag->TxSWQueCnt[ArrayCurIdx][i] =0; +- pDiag->TxMcsCnt[ArrayCurIdx][i] = 0; +- pDiag->RxMcsCnt[ArrayCurIdx][i] = 0; +- } +- pDiag->TxDataCnt[ArrayCurIdx] = 0; +- pDiag->TxFailCnt[ArrayCurIdx] = 0; +- pDiag->RxDataCnt[ArrayCurIdx] = 0; +- pDiag->RxCrcErrCnt[ArrayCurIdx] = 0; +-// for (i = 9; i < 16; i++) +- for (i = 9; i < 24; i++) // 3*3 +- { +- pDiag->TxDescCnt[ArrayCurIdx][i] = 0; +- pDiag->TxMcsCnt[ArrayCurIdx][i] = 0; +- pDiag->RxMcsCnt[ArrayCurIdx][i] = 0; +-} +- +- if (pDiag->ArrayCurIdx == pDiag->ArrayStartIdx) +- INC_RING_INDEX(pDiag->ArrayStartIdx, DIAGNOSE_TIME); +- } +- +- } +-#endif // DBG_DIAGNOSE // +- +- +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Reset NIC from error +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- Reset NIC from error state +- +- ======================================================================== +-*/ +-VOID NICResetFromError( +- IN PRTMP_ADAPTER pAd) +-{ +- // Reset BBP (according to alex, reset ASIC will force reset BBP +- // Therefore, skip the reset BBP +- // RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x2); +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); +- // Remove ASIC from reset state +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); +- +- NICInitializeAdapter(pAd, FALSE); +- NICInitAsicFromEEPROM(pAd); +- +- // Switch to current channel, since during reset process, the connection should remains on. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +-} +- +- +-NDIS_STATUS NICLoadFirmware( +- IN PRTMP_ADAPTER pAd) +-{ +- NDIS_STATUS status = NDIS_STATUS_SUCCESS; +- if (pAd->chipOps.loadFirmware) +- status = pAd->chipOps.loadFirmware(pAd); +- +- return status; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- erase 8051 firmware image in MAC ASIC +- +- Arguments: +- Adapter Pointer to our adapter +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-VOID NICEraseFirmware( +- IN PRTMP_ADAPTER pAd) +-{ +- if (pAd->chipOps.eraseFirmware) +- pAd->chipOps.eraseFirmware(pAd); +- +-}/* End of NICEraseFirmware */ +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Load Tx rate switching parameters +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS firmware image load ok +- NDIS_STATUS_FAILURE image not found +- +- IRQL = PASSIVE_LEVEL +- +- Rate Table Format: +- 1. (B0: Valid Item number) (B1:Initial item from zero) +- 2. Item Number(Dec) Mode(Hex) Current MCS(Dec) TrainUp(Dec) TrainDown(Dec) +- +- ======================================================================== +-*/ +-NDIS_STATUS NICLoadRateSwitchingParams( +- IN PRTMP_ADAPTER pAd) +-{ +- return NDIS_STATUS_SUCCESS; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Compare two memory block +- +- Arguments: +- pSrc1 Pointer to first memory address +- pSrc2 Pointer to second memory address +- +- Return Value: +- 0: memory is equal +- 1: pSrc1 memory is larger +- 2: pSrc2 memory is larger +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-ULONG RTMPCompareMemory( +- IN PVOID pSrc1, +- IN PVOID pSrc2, +- IN ULONG Length) +-{ +- PUCHAR pMem1; +- PUCHAR pMem2; +- ULONG Index = 0; +- +- pMem1 = (PUCHAR) pSrc1; +- pMem2 = (PUCHAR) pSrc2; +- +- for (Index = 0; Index < Length; Index++) +- { +- if (pMem1[Index] > pMem2[Index]) +- return (1); +- else if (pMem1[Index] < pMem2[Index]) +- return (2); +- } +- +- // Equal +- return (0); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Zero out memory block +- +- Arguments: +- pSrc1 Pointer to memory address +- Length Size +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPZeroMemory( +- IN PVOID pSrc, +- IN ULONG Length) +-{ +- PUCHAR pMem; +- ULONG Index = 0; +- +- pMem = (PUCHAR) pSrc; +- +- for (Index = 0; Index < Length; Index++) +- { +- pMem[Index] = 0x00; +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Copy data from memory block 1 to memory block 2 +- +- Arguments: +- pDest Pointer to destination memory address +- pSrc Pointer to source memory address +- Length Copy size +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPMoveMemory( +- OUT PVOID pDest, +- IN PVOID pSrc, +- IN ULONG Length) +-{ +- PUCHAR pMem1; +- PUCHAR pMem2; +- UINT Index; +- +- ASSERT((Length==0) || (pDest && pSrc)); +- +- pMem1 = (PUCHAR) pDest; +- pMem2 = (PUCHAR) pSrc; +- +- for (Index = 0; Index < Length; Index++) +- { +- pMem1[Index] = pMem2[Index]; +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Initialize port configuration structure +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID UserCfgInit( +- IN PRTMP_ADAPTER pAd) +-{ +-// EDCA_PARM DefaultEdcaParm; +- UINT key_index, bss_index; +- +- DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit\n")); +- +- // +- // part I. intialize common configuration +- // +- +- for(key_index=0; key_indexSharedKey[bss_index][key_index].KeyLen = 0; +- pAd->SharedKey[bss_index][key_index].CipherAlg = CIPHER_NONE; +- } +- } +- +- pAd->EepromAccess = FALSE; +- +- pAd->Antenna.word = 0; +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- +- pAd->LedCntl.word = 0; +-#ifdef RTMP_MAC_PCI +- pAd->LedIndicatorStrength = 0; +- pAd->RLnkCtrlOffset = 0; +- pAd->HostLnkCtrlOffset = 0; +-#ifdef CONFIG_STA_SUPPORT +- pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; +- pAd->CheckDmaBusyCount = 0; +-#endif // CONFIG_STA_SUPPORT // +-#endif // RTMP_MAC_PCI // +- +- pAd->bAutoTxAgcA = FALSE; // Default is OFF +- pAd->bAutoTxAgcG = FALSE; // Default is OFF +- pAd->RfIcType = RFIC_2820; +- +- // Init timer for reset complete event +- pAd->CommonCfg.CentralChannel = 1; +- pAd->bForcePrintTX = FALSE; +- pAd->bForcePrintRX = FALSE; +- pAd->bStaFifoTest = FALSE; +- pAd->bProtectionTest = FALSE; +- /* +- pAd->bHCCATest = FALSE; +- pAd->bGenOneHCCA = FALSE; +- */ +- pAd->CommonCfg.Dsifs = 10; // in units of usec +- pAd->CommonCfg.TxPower = 100; //mW +- pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPowerDefault = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- pAd->CommonCfg.RtsThreshold = 2347; +- pAd->CommonCfg.FragmentThreshold = 2346; +- pAd->CommonCfg.UseBGProtection = 0; // 0: AUTO +- pAd->CommonCfg.bEnableTxBurst = TRUE; //0; +- pAd->CommonCfg.PhyMode = 0xff; // unknown +- pAd->CommonCfg.BandState = UNKNOWN_BAND; +- pAd->CommonCfg.RadarDetect.CSPeriod = 10; +- pAd->CommonCfg.RadarDetect.CSCount = 0; +- pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; +- +- +- +-#ifdef TONE_RADAR_DETECT_SUPPORT +-#ifdef CARRIER_DETECTION_SUPPORT +- pAd->CommonCfg.CarrierDetect.delta = CARRIER_DETECT_DELTA; +- pAd->CommonCfg.CarrierDetect.div_flag = CARRIER_DETECT_DIV_FLAG; +- pAd->CommonCfg.CarrierDetect.criteria = CARRIER_DETECT_CRITIRIA; +-#ifdef RT3090 +- if(IS_RT3090A(pAd)) +- pAd->CommonCfg.CarrierDetect.threshold = CARRIER_DETECT_THRESHOLD_3090A; +- else +-#endif // RT3090 // +- pAd->CommonCfg.CarrierDetect.threshold = CARRIER_DETECT_THRESHOLD; +-#endif // CARRIER_DETECTION_SUPPORT // +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +- pAd->CommonCfg.RadarDetect.ChMovingTime = 65; +-#ifdef MERGE_ARCH_TEAM +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh = 2; +- pAd->CommonCfg.RadarDetect.AvgRssiReq = -75; +-#else // original rt28xx source code +- pAd->CommonCfg.RadarDetect.LongPulseRadarTh = 3; +-#endif // MERGE_ARCH_TEAM // +- pAd->CommonCfg.bAPSDCapable = FALSE; +- pAd->CommonCfg.bNeedSendTriggerFrame = FALSE; +- pAd->CommonCfg.TriggerTimerCount = 0; +- pAd->CommonCfg.bAPSDForcePowerSave = FALSE; +- pAd->CommonCfg.bCountryFlag = FALSE; +- pAd->CommonCfg.TxStream = 0; +- pAd->CommonCfg.RxStream = 0; +- +- NdisZeroMemory(&pAd->BeaconTxWI, sizeof(pAd->BeaconTxWI)); +- +-#ifdef DOT11_N_SUPPORT +- NdisZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability)); +- pAd->HTCEnable = FALSE; +- pAd->bBroadComHT = FALSE; +- pAd->CommonCfg.bRdg = FALSE; +- +-#ifdef DOT11N_DRAFT3 +- pAd->CommonCfg.Dot11OBssScanPassiveDwell = dot11OBSSScanPassiveDwell; // Unit : TU. 5~1000 +- pAd->CommonCfg.Dot11OBssScanActiveDwell = dot11OBSSScanActiveDwell; // Unit : TU. 10~1000 +- pAd->CommonCfg.Dot11BssWidthTriggerScanInt = dot11BSSWidthTriggerScanInterval; // Unit : Second +- pAd->CommonCfg.Dot11OBssScanPassiveTotalPerChannel = dot11OBSSScanPassiveTotalPerChannel; // Unit : TU. 200~10000 +- pAd->CommonCfg.Dot11OBssScanActiveTotalPerChannel = dot11OBSSScanActiveTotalPerChannel; // Unit : TU. 20~10000 +- pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor = dot11BSSWidthChannelTransactionDelayFactor; +- pAd->CommonCfg.Dot11OBssScanActivityThre = dot11BSSScanActivityThreshold; // Unit : percentage +- pAd->CommonCfg.Dot11BssWidthChanTranDelay = (pAd->CommonCfg.Dot11BssWidthTriggerScanInt * pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor); +-#endif // DOT11N_DRAFT3 // +- +- NdisZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo)); +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- pAd->CommonCfg.BACapability.field.MpduDensity = 0; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; //32; +- pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; //32; +- DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit. BACapability = 0x%x\n", pAd->CommonCfg.BACapability.word)); +- +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- BATableInit(pAd, &pAd->BATable); +- +- pAd->CommonCfg.bExtChannelSwitchAnnouncement = 1; +- pAd->CommonCfg.bHTProtect = 1; +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- //2008/11/05:KH add to support Antenna power-saving of AP<-- +- pAd->CommonCfg.bGreenAPEnable=FALSE; +- pAd->CommonCfg.bBlockAntDivforGreenAP=FALSE; +- //2008/11/05:KH add to support Antenna power-saving of AP--> +- pAd->CommonCfg.bBADecline = FALSE; +- pAd->CommonCfg.bDisableReordering = FALSE; +- +- if (pAd->MACVersion == 0x28720200) +- { +- pAd->CommonCfg.TxBASize = 13; //by Jerry recommend +- }else{ +- pAd->CommonCfg.TxBASize = 7; +- } +- +- pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word; +-#endif // DOT11_N_SUPPORT // +- +- //pAd->CommonCfg.HTPhyMode.field.BW = BW_20; +- //pAd->CommonCfg.HTPhyMode.field.MCS = MCS_AUTO; +- //pAd->CommonCfg.HTPhyMode.field.ShortGI = GI_800; +- //pAd->CommonCfg.HTPhyMode.field.STBC = STBC_NONE; +- pAd->CommonCfg.TxRate = RATE_6; +- +- pAd->CommonCfg.MlmeTransmit.field.MCS = MCS_RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.BW = BW_20; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- +- pAd->CommonCfg.BeaconPeriod = 100; // in mSec +- +- +- // +- // part II. intialize STA specific configuration +- // +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_DIRECT); +- RX_FILTER_CLEAR_FLAG(pAd, fRX_FILTER_ACCEPT_MULTICAST); +- RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_BROADCAST); +- RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_ALL_MULTICAST); +- +- pAd->StaCfg.Psm = PWR_ACTIVE; +- +- pAd->StaCfg.OrigWepStatus = Ndis802_11EncryptionDisabled; +- pAd->StaCfg.PairCipher = Ndis802_11EncryptionDisabled; +- pAd->StaCfg.GroupCipher = Ndis802_11EncryptionDisabled; +- pAd->StaCfg.bMixCipher = FALSE; +- pAd->StaCfg.DefaultKeyId = 0; +- +- // 802.1x port control +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- pAd->StaCfg.LastMicErrorTime = 0; +- pAd->StaCfg.MicErrCnt = 0; +- pAd->StaCfg.bBlockAssoc = FALSE; +- pAd->StaCfg.WpaState = SS_NOTUSE; +- +- pAd->CommonCfg.NdisRadioStateOff = FALSE; // New to support microsoft disable radio with OID command +- +- pAd->StaCfg.RssiTrigger = 0; +- NdisZeroMemory(&pAd->StaCfg.RssiSample, sizeof(RSSI_SAMPLE)); +- pAd->StaCfg.RssiTriggerMode = RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; +- pAd->StaCfg.AtimWin = 0; +- pAd->StaCfg.DefaultListenCount = 3;//default listen count; +- pAd->StaCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_ADHOC or BSS_MONITOR +- pAd->StaCfg.bScanReqIsFromWebUI = FALSE; +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- +- pAd->StaCfg.bAutoTxRateSwitch = TRUE; +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- } +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- pAd->StaCfg.IEEE80211dClientMode = Rt802_11_D_None; +-#endif // EXT_BUILD_CHANNEL_LIST // +-#ifdef PCIE_PS_SUPPORT +-pAd->brt30xxBanMcuCmd = FALSE; +-pAd->b3090ESpecialChip = FALSE; +-//KH Debug:the following must be removed +-pAd->StaCfg.PSControl.field.rt30xxPowerMode=3; +-pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=0; +-pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; +-#endif // PCIE_PS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +- // global variables mXXXX used in MAC protocol state machines +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); +- +- // PHY specification +- pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; // default PHY mode +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // user desired power mode +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- pAd->StaCfg.bWindowsACCAMEnable = FALSE; +- +- RTMPInitTimer(pAd, &pAd->StaCfg.StaQuickResponeForRateUpTimer, GET_TIMER_FUNCTION(StaQuickResponeForRateUpExec), pAd, FALSE); +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; +- +- // Patch for Ndtest +- pAd->StaCfg.ScanCnt = 0; +- +- pAd->StaCfg.bHwRadio = TRUE; // Default Hardware Radio status is On +- pAd->StaCfg.bSwRadio = TRUE; // Default Software Radio status is On +- pAd->StaCfg.bRadio = TRUE; // bHwRadio && bSwRadio +- pAd->StaCfg.bHardwareRadio = FALSE; // Default is OFF +- pAd->StaCfg.bShowHiddenSSID = FALSE; // Default no show +- +- // Nitro mode control +- pAd->StaCfg.bAutoReconnect = TRUE; +- +- // Save the init time as last scan time, the system should do scan after 2 seconds. +- // This patch is for driver wake up from standby mode, system will do scan right away. +- NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); +- if (pAd->StaCfg.LastScanTime > 10 * OS_HZ) +- pAd->StaCfg.LastScanTime -= (10 * OS_HZ); +- +- NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE+1); +-#ifdef RTMP_MAC_PCI +- sprintf((PSTRING) pAd->nickname, "RT2860STA"); +-#endif // RTMP_MAC_PCI // +- RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), pAd, FALSE); +-#ifdef WPA_SUPPLICANT_SUPPORT +- pAd->StaCfg.IEEE8021X = FALSE; +- pAd->StaCfg.IEEE8021x_required_keys = FALSE; +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +- pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE; +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); +- +- +- pAd->StaCfg.bAutoConnectByBssid = FALSE; +- pAd->StaCfg.BeaconLostTime = BEACON_LOST_TIME; +- NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- pAd->StaCfg.WpaPassPhraseLen = 0; +- pAd->StaCfg.bAutoRoaming = FALSE; +- pAd->StaCfg.bForceTxBurst = FALSE; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // Default for extra information is not valid +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- +- // Default Config change flag +- pAd->bConfigChanged = FALSE; +- +- // +- // part III. AP configurations +- // +- +- +- // +- // part IV. others +- // +- // dynamic BBP R66:sensibity tuning to overcome background noise +- pAd->BbpTuning.bEnable = TRUE; +- pAd->BbpTuning.FalseCcaLowerThreshold = 100; +- pAd->BbpTuning.FalseCcaUpperThreshold = 512; +- pAd->BbpTuning.R66Delta = 4; +- pAd->Mlme.bEnableAutoAntennaCheck = TRUE; +- +- // +- // Also initial R66CurrentValue, RTUSBResumeMsduTransmission might use this value. +- // if not initial this value, the default value will be 0. +- // +- pAd->BbpTuning.R66CurrentValue = 0x38; +- +- pAd->Bbp94 = BBPR94_DEFAULT; +- pAd->BbpForCCK = FALSE; +- +- // Default is FALSE for test bit 1 +- //pAd->bTest1 = FALSE; +- +- // initialize MAC table and allocate spin lock +- NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); +- InitializeQueueHeader(&pAd->MacTab.McastPsQueue); +- NdisAllocateSpinLock(&pAd->MacTabLock); +- +- //RTMPInitTimer(pAd, &pAd->RECBATimer, RECBATimerTimeout, pAd, TRUE); +- //RTMPSetTimer(&pAd->RECBATimer, REORDER_EXEC_INTV); +- +-#ifdef RALINK_ATE +- NdisZeroMemory(&pAd->ate, sizeof(ATE_INFO)); +- pAd->ate.Mode = ATE_STOP; +- pAd->ate.TxCount = 200;/* to exceed TX_RING_SIZE ... */ +- pAd->ate.TxDoneCount = 0; +- pAd->ate.RFFreqOffset = 0; +- pAd->ate.TxLength = 1024; +- pAd->ate.TxWI.ShortGI = 0;// LONG GI : 800 ns +- pAd->ate.TxWI.PHYMODE = MODE_CCK; +- pAd->ate.TxWI.MCS = 3; +- pAd->ate.TxWI.BW = BW_20; +- pAd->ate.Channel = 1; +- pAd->ate.QID = QID_AC_BE; +- pAd->ate.Addr1[0] = 0x00; +- pAd->ate.Addr1[1] = 0x11; +- pAd->ate.Addr1[2] = 0x22; +- pAd->ate.Addr1[3] = 0xAA; +- pAd->ate.Addr1[4] = 0xBB; +- pAd->ate.Addr1[5] = 0xCC; +- NdisMoveMemory(pAd->ate.Addr2, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS); +- NdisMoveMemory(pAd->ate.Addr3, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS); +- pAd->ate.bRxFER = 0; +- pAd->ate.bQATxStart = FALSE; +- pAd->ate.bQARxStart = FALSE; +- +-#ifdef RTMP_MAC_PCI +- pAd->ate.bFWLoading = FALSE; +-#endif // RTMP_MAC_PCI // +- +- +-#ifdef RALINK_28xx_QA +- pAd->ate.TxStatus = 0; +- pAd->ate.AtePid = THREAD_PID_INIT_VALUE; +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +- +- pAd->CommonCfg.bWiFiTest = FALSE; +-#ifdef RTMP_MAC_PCI +- pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // +- +-#ifdef CONFIG_STA_SUPPORT +-RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#endif // CONFIG_STA_SUPPORT // +-#ifdef ANT_DIVERSITY_SUPPORT +- if ( pAd->CommonCfg.bRxAntDiversity == ANT_FIX_ANT2) +- { +- pAd->RxAnt.Pair1PrimaryRxAnt = 1; +- pAd->RxAnt.Pair1SecondaryRxAnt = 0; +- } +- else // Default +- { +- pAd->RxAnt.Pair1PrimaryRxAnt = 0; +- pAd->RxAnt.Pair1SecondaryRxAnt = 1; +- } +- pAd->RxAnt.EvaluatePeriod = 0; +- pAd->RxAnt.RcvPktNumWhenEvaluate = 0; +-#ifdef CONFIG_STA_SUPPORT +- pAd->RxAnt.Pair1AvgRssi[0] = pAd->RxAnt.Pair1AvgRssi[1] = 0; +-#endif // CONFIG_STA_SUPPORT // +-#endif // AP_ANTENNA_DIVERSITY_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n")); +-} +- +-// IRQL = PASSIVE_LEVEL +-UCHAR BtoH(STRING ch) +-{ +- if (ch >= '0' && ch <= '9') return (ch - '0'); // Handle numerals +- if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA); // Handle capitol hex digits +- if (ch >= 'a' && ch <= 'f') return (ch - 'a' + 0xA); // Handle small hex digits +- return(255); +-} +- +-// +-// FUNCTION: AtoH(char *, UCHAR *, int) +-// +-// PURPOSE: Converts ascii string to network order hex +-// +-// PARAMETERS: +-// src - pointer to input ascii string +-// dest - pointer to output hex +-// destlen - size of dest +-// +-// COMMENTS: +-// +-// 2 ascii bytes make a hex byte so must put 1st ascii byte of pair +-// into upper nibble and 2nd ascii byte of pair into lower nibble. +-// +-// IRQL = PASSIVE_LEVEL +- +-void AtoH(PSTRING src, PUCHAR dest, int destlen) +-{ +- PSTRING srcptr; +- PUCHAR destTemp; +- +- srcptr = src; +- destTemp = (PUCHAR) dest; +- +- while(destlen--) +- { +- *destTemp = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble. +- *destTemp += BtoH(*srcptr++); // Add 2nd ascii byte to above. +- destTemp++; +- } +-} +- +- +-//+++Mark by shiang, not use now, need to remove after confirm +-//---Mark by shiang, not use now, need to remove after confirm +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Init timer objects +- +- Arguments: +- pAd Pointer to our adapter +- pTimer Timer structure +- pTimerFunc Function to execute when timer expired +- Repeat Ture for period timer +- +- Return Value: +- None +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPInitTimer( +- IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, +- IN PVOID pData, +- IN BOOLEAN Repeat) +-{ +- // +- // Set Valid to TRUE for later used. +- // It will crash if we cancel a timer or set a timer +- // that we haven't initialize before. +- // +- pTimer->Valid = TRUE; +- +- pTimer->PeriodicType = Repeat; +- pTimer->State = FALSE; +- pTimer->cookie = (ULONG) pData; +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +- pTimer->pAd = pAd; +-#endif // RTMP_TIMER_TASK_SUPPORT // +- +- RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Init timer objects +- +- Arguments: +- pTimer Timer structure +- Value Timer value in milliseconds +- +- Return Value: +- None +- +- Note: +- To use this routine, must call RTMPInitTimer before. +- +- ======================================================================== +-*/ +-VOID RTMPSetTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value) +-{ +- if (pTimer->Valid) +- { +- pTimer->TimerValue = Value; +- pTimer->State = FALSE; +- if (pTimer->PeriodicType == TRUE) +- { +- pTimer->Repeat = TRUE; +- RTMP_SetPeriodicTimer(&pTimer->TimerObj, Value); +- } +- else +- { +- pTimer->Repeat = FALSE; +- RTMP_OS_Add_Timer(&pTimer->TimerObj, Value); +- } +- } +- else +- { +- DBGPRINT_ERR(("RTMPSetTimer failed, Timer hasn't been initialize!\n")); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Init timer objects +- +- Arguments: +- pTimer Timer structure +- Value Timer value in milliseconds +- +- Return Value: +- None +- +- Note: +- To use this routine, must call RTMPInitTimer before. +- +- ======================================================================== +-*/ +-VOID RTMPModTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value) +-{ +- BOOLEAN Cancel; +- +- if (pTimer->Valid) +- { +- pTimer->TimerValue = Value; +- pTimer->State = FALSE; +- if (pTimer->PeriodicType == TRUE) +- { +- RTMPCancelTimer(pTimer, &Cancel); +- RTMPSetTimer(pTimer, Value); +- } +- else +- { +- RTMP_OS_Mod_Timer(&pTimer->TimerObj, Value); +- } +- } +- else +- { +- DBGPRINT_ERR(("RTMPModTimer failed, Timer hasn't been initialize!\n")); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Cancel timer objects +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- 1.) To use this routine, must call RTMPInitTimer before. +- 2.) Reset NIC to initial state AS IS system boot up time. +- +- ======================================================================== +-*/ +-VOID RTMPCancelTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- OUT BOOLEAN *pCancelled) +-{ +- if (pTimer->Valid) +- { +- if (pTimer->State == FALSE) +- pTimer->Repeat = FALSE; +- +- RTMP_OS_Del_Timer(&pTimer->TimerObj, pCancelled); +- +- if (*pCancelled == TRUE) +- pTimer->State = TRUE; +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +- // We need to go-through the TimerQ to findout this timer handler and remove it if +- // it's still waiting for execution. +- RtmpTimerQRemove(pTimer->pAd, pTimer); +-#endif // RTMP_TIMER_TASK_SUPPORT // +- } +- else +- { +- DBGPRINT_ERR(("RTMPCancelTimer failed, Timer hasn't been initialize!\n")); +- } +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Set LED Status +- +- Arguments: +- pAd Pointer to our adapter +- Status LED Status +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPSetLED( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Status) +-{ +- //ULONG data; +- UCHAR HighByte = 0; +- UCHAR LowByte; +- BOOLEAN bIgnored = FALSE; +- +-#ifdef RALINK_ATE +- /* +- In ATE mode of RT2860 AP/STA, we have erased 8051 firmware. +- So LED mode is not supported when ATE is running. +- */ +- if (!IS_RT3572(pAd)) +- { +- if (ATE_ON(pAd)) +- return; +- } +-#endif // RALINK_ATE // +- +- LowByte = pAd->LedCntl.field.LedMode&0x7f; +- switch (Status) +- { +- case LED_LINK_DOWN: +- HighByte = 0x20; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- pAd->LedIndicatorStrength = 0; +- break; +- case LED_LINK_UP: +- if (pAd->CommonCfg.Channel > 14) +- HighByte = 0xa0; +- else +- HighByte = 0x60; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_RADIO_ON: +- HighByte = 0x20; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_HALT: +- LowByte = 0; // Driver sets MAC register and MAC controls LED +- case LED_RADIO_OFF: +- HighByte = 0; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_WPS: +- HighByte = 0x10; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_ON_SITE_SURVEY: +- HighByte = 0x08; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_POWER_UP: +- HighByte = 0x04; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +-#ifdef RALINK_ATE +-#endif // RALINK_ATE // +- default: +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetLED::Unknown Status %d\n", Status)); +- break; +- } +- +- // +- // Keep LED status for LED SiteSurvey mode. +- // After SiteSurvey, we will set the LED mode to previous status. +- // +- if ((Status != LED_ON_SITE_SURVEY) && (Status != LED_POWER_UP) && (bIgnored == FALSE)) +- pAd->LedStatus = Status; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetLED::Mode=%d,HighByte=0x%02x,LowByte=0x%02x\n", pAd->LedCntl.field.LedMode, HighByte, LowByte)); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Set LED Signal Stregth +- +- Arguments: +- pAd Pointer to our adapter +- Dbm Signal Stregth +- +- Return Value: +- None +- +- IRQL = PASSIVE_LEVEL +- +- Note: +- Can be run on any IRQL level. +- +- According to Microsoft Zero Config Wireless Signal Stregth definition as belows. +- <= -90 No Signal +- <= -81 Very Low +- <= -71 Low +- <= -67 Good +- <= -57 Very Good +- > -57 Excellent +- ======================================================================== +-*/ +-VOID RTMPSetSignalLED( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_802_11_RSSI Dbm) +-{ +- UCHAR nLed = 0; +- +- if (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH) +- { +- if (Dbm <= -90) +- nLed = 0; +- else if (Dbm <= -81) +- nLed = 1; +- else if (Dbm <= -71) +- nLed = 3; +- else if (Dbm <= -67) +- nLed = 7; +- else if (Dbm <= -57) +- nLed = 15; +- else +- nLed = 31; +- +- // +- // Update Signal Stregth to firmware if changed. +- // +- if (pAd->LedIndicatorStrength != nLed) +- { +- AsicSendCommandToMcu(pAd, 0x51, 0xff, nLed, pAd->LedCntl.field.Polarity); +- pAd->LedIndicatorStrength = nLed; +- } +- } +-} +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Enable RX +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL <= DISPATCH_LEVEL +- +- Note: +- Before Enable RX, make sure you have enabled Interrupt. +- ======================================================================== +-*/ +-VOID RTMPEnableRxTx( +- IN PRTMP_ADAPTER pAd) +-{ +-// WPDMA_GLO_CFG_STRUC GloCfg; +-// ULONG i = 0; +- UINT32 rx_filter_flag; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n")); +- +- // Enable Rx DMA. +- RT28XXDMAEnable(pAd); +- +- // enable RX of MAC block +- if (pAd->OpMode == OPMODE_AP) +- { +- rx_filter_flag = APNORMAL; +- +- +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); // enable RX of DMA block +- } +- else +- { +- if (pAd->CommonCfg.PSPXlink) +- rx_filter_flag = PSPXLINK; +- else +- rx_filter_flag = STANORMAL; // Staion not drop control frame will fail WiFi Certification. +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); +- } +- +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xc); +- DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPEnableRxTx\n")); +-} +- +- +-//+++Add by shiang, move from os/linux/rt_main_dev.c +-void CfgInitHook(PRTMP_ADAPTER pAd) +-{ +- pAd->bBroadComHT = TRUE; +-} +- +- +-int rt28xx_init( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, +- IN PSTRING pHostName) +-{ +- UINT index; +- UCHAR TmpPhy; +- NDIS_STATUS Status; +- UINT32 MacCsr0 = 0; +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef RTMP_MAC_PCI +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // If dirver doesn't wake up firmware here, +- // NICLoadFirmware will hang forever when interface is up again. +- // RT2860 PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- AsicForceWakeup(pAd, TRUE); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- } +- } +-#endif // RTMP_MAC_PCI // +-#endif // CONFIG_STA_SUPPORT // +- +- +- // reset Adapter flags +- RTMP_CLEAR_FLAGS(pAd); +- +- // Init BssTab & ChannelInfo tabbles for auto channel select. +- +-#ifdef DOT11_N_SUPPORT +- // Allocate BA Reordering memory +- ba_reordering_resource_init(pAd, MAX_REORDERING_MPDU_NUM); +-#endif // DOT11_N_SUPPORT // +- +- // Make sure MAC gets ready. +- index = 0; +- do +- { +- RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); +- pAd->MACVersion = MacCsr0; +- +- if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) +- break; +- +- RTMPusecDelay(10); +- } while (index++ < 100); +- DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); +- +-#ifdef RTMP_MAC_PCI +-#ifdef PCIE_PS_SUPPORT +- /*Iverson patch PCIE L1 issue to make sure that driver can be read,write ,BBP and RF register at pcie L.1 level */ +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))&&OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- RTMP_IO_READ32(pAd, AUX_CTRL, &MacCsr0); +- MacCsr0 |= 0x402; +- RTMP_IO_WRITE32(pAd, AUX_CTRL, MacCsr0); +- DBGPRINT(RT_DEBUG_TRACE, ("AUX_CTRL = 0x%x\n", MacCsr0)); +- } +-#endif // PCIE_PS_SUPPORT // +- +- // To fix driver disable/enable hang issue when radio off +- RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x2); +-#endif // RTMP_MAC_PCI // +- +- // Disable DMA +- RT28XXDMADisable(pAd); +- +- +- // Load 8051 firmware +- Status = NICLoadFirmware(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", Status)); +- goto err1; +- } +- +- NICLoadRateSwitchingParams(pAd); +- +- // Disable interrupts here which is as soon as possible +- // This statement should never be true. We might consider to remove it later +-#ifdef RTMP_MAC_PCI +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) +- { +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- } +-#endif // RTMP_MAC_PCI // +- +- Status = RTMPAllocTxRxRingMemory(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("RTMPAllocDMAMemory failed, Status[=0x%08x]\n", Status)); +- goto err1; +- } +- +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); +- +- // initialize MLME +- // +- +- Status = RtmpMgmtTaskInit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- goto err2; +- +- Status = MlmeInit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("MlmeInit failed, Status[=0x%08x]\n", Status)); +- goto err2; +- } +- +- // Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default +- // +- UserCfgInit(pAd); +- Status = RtmpNetTaskInit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- goto err3; +- +-// COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); +-// pAd->bForcePrintTX = TRUE; +- +- CfgInitHook(pAd); +- +- +-#ifdef BLOCK_NET_IF +- initblockQueueTab(pAd); +-#endif // BLOCK_NET_IF // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- NdisAllocateSpinLock(&pAd->MacTabLock); +-#endif // CONFIG_STA_SUPPORT // +- +- MeasureReqTabInit(pAd); +- TpcReqTabInit(pAd); +- +- // +- // Init the hardware, we need to init asic before read registry, otherwise mac register will be reset +- // +- Status = NICInitializeAdapter(pAd, TRUE); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", Status)); +- if (Status != NDIS_STATUS_SUCCESS) +- goto err3; +- } +- +- // Read parameters from Config File +- Status = RTMPReadParametersHook(pAd); +- +- DBGPRINT(RT_DEBUG_OFF, ("1. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICReadRegParameters failed, Status[=0x%08x]\n",Status)); +- goto err4; +- } +- +- +- +-#ifdef DOT11_N_SUPPORT +- //Init Ba Capability parameters. +-// RT28XX_BA_INIT(pAd); +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- // UPdata to HT IE +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +-#endif // DOT11_N_SUPPORT // +- +- // after reading Registry, we now know if in AP mode or STA mode +- +- // Load 8051 firmware; crash when FW image not existent +- // Status = NICLoadFirmware(pAd); +- // if (Status != NDIS_STATUS_SUCCESS) +- // break; +- +- DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); +- +- // We should read EEPROM for all cases. rt2860b +- NICReadEEPROMParameters(pAd, (PUCHAR)pDefaultMac); +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_OFF, ("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); +- +- NICInitAsicFromEEPROM(pAd); //rt2860b +- +- // Set PHY to appropriate mode +- TmpPhy = pAd->CommonCfg.PhyMode; +- pAd->CommonCfg.PhyMode = 0xff; +- RTMPSetPhyMode(pAd, TmpPhy); +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- +- // No valid channels. +- if (pAd->ChannelListNum == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n")); +- goto err4; +- } +- +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_OFF, ("MCS Set = %02x %02x %02x %02x %02x\n", pAd->CommonCfg.HtCapability.MCSSet[0], +- pAd->CommonCfg.HtCapability.MCSSet[1], pAd->CommonCfg.HtCapability.MCSSet[2], +- pAd->CommonCfg.HtCapability.MCSSet[3], pAd->CommonCfg.HtCapability.MCSSet[4])); +-#endif // DOT11_N_SUPPORT // +- +-#ifdef RTMP_RF_RW_SUPPORT +- //Init RT30xx RFRegisters after read RFIC type from EEPROM +- NICInitRFRegisters(pAd); +-#endif // RTMP_RF_RW_SUPPORT // +- +- +- +-// APInitialize(pAd); +- +-#ifdef IKANOS_VX_1X0 +- VR_IKANOS_FP_Init(pAd->ApCfg.BssidNum, pAd->PermanentAddress); +-#endif // IKANOS_VX_1X0 // +- +- // +- // Initialize RF register to default value +- // +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- // 8051 firmware require the signal during booting time. +- //2008/11/28:KH marked the following codes to patch Frequency offset bug +- //AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); +- +- if (pAd && (Status != NDIS_STATUS_SUCCESS)) +- { +- // +- // Undo everything if it failed +- // +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +-// NdisMDeregisterInterrupt(&pAd->Interrupt); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); +- } +-// RTMPFreeAdapter(pAd); // we will free it in disconnect() +- } +- else if (pAd) +- { +- // Microsoft HCT require driver send a disconnect event after driver initialization. +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +-// pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n")); +- +- +- }// end of else +- +- +- // Set up the Mac address +- RtmpOSNetDevAddrSet(pAd->net_dev, &pAd->CurrentAddress[0]); +- +- // Various AP function init +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- // send wireless event to wpa_supplicant for infroming interface up. +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_INTERFACE_UP, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- DBGPRINT_S(Status, ("<==== rt28xx_init, Status=%x\n", Status)); +- +- return TRUE; +- +- +-err4: +-err3: +- MlmeHalt(pAd); +-err2: +- RTMPFreeTxRxRingMemory(pAd); +-err1: +- +-#ifdef DOT11_N_SUPPORT +- os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool +-#endif // DOT11_N_SUPPORT // +- +- // shall not set priv to NULL here because the priv didn't been free yet. +- //net_dev->priv = 0; +-#ifdef INF_AMAZON_SE +-err0: +-#endif // INF_AMAZON_SE // +-#ifdef ST +-err0: +-#endif // ST // +- +- DBGPRINT(RT_DEBUG_ERROR, ("!!! rt28xx Initialized fail !!!\n")); +- return FALSE; +-} +-//---Add by shiang, move from os/linux/rt_main_dev.c +- +- +-static INT RtmpChipOpsRegister( +- IN RTMP_ADAPTER *pAd, +- IN INT infType) +-{ +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- int status; +- +- memset(pChipOps, 0, sizeof(RTMP_CHIP_OP)); +- +- /* set eeprom related hook functions */ +- status = RtmpChipOpsEepromHook(pAd, infType); +- +- /* set mcu related hook functions */ +- switch(infType) +- { +-#ifdef RTMP_PCI_SUPPORT +- case RTMP_DEV_INF_PCI: +- pChipOps->loadFirmware = RtmpAsicLoadFirmware; +- pChipOps->eraseFirmware = RtmpAsicEraseFirmware; +- pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; +- break; +-#endif // RTMP_PCI_SUPPORT // +- +- +- default: +- break; +- } +- +- return status; +-} +- +- +-INT RtmpRaDevCtrlInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_INF_TYPE infType) +-{ +- //VOID *handle; +- +- // Assign the interface type. We need use it when do register/EEPROM access. +- pAd->infType = infType; +- +- +-#ifdef CONFIG_STA_SUPPORT +- pAd->OpMode = OPMODE_STA; +- DBGPRINT(RT_DEBUG_TRACE, ("STA Driver version-%s\n", STA_DRIVER_VERSION)); +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- RtmpChipOpsRegister(pAd, infType); +- +-#ifdef MULTIPLE_CARD_SUPPORT +-{ +- extern BOOLEAN RTMP_CardInfoRead(PRTMP_ADAPTER pAd); +- +- // find its profile path +- pAd->MC_RowID = -1; // use default profile path +- RTMP_CardInfoRead(pAd); +- +- if (pAd->MC_RowID == -1) +-#ifdef CONFIG_STA_SUPPORT +- strcpy(pAd->MC_FileName, STA_PROFILE_PATH); +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("MC> ROW = %d, PATH = %s\n", pAd->MC_RowID, pAd->MC_FileName)); +-} +-#endif // MULTIPLE_CARD_SUPPORT // +- +- return 0; +-} +- +- +-BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER *pAd) +-{ +-#ifdef MULTIPLE_CARD_SUPPORT +-extern UINT8 MC_CardUsed[MAX_NUM_OF_MULTIPLE_CARD]; +- +- if ((pAd->MC_RowID >= 0) && (pAd->MC_RowID <= MAX_NUM_OF_MULTIPLE_CARD)) +- MC_CardUsed[pAd->MC_RowID] = 0; // not clear MAC address +-#endif // MULTIPLE_CARD_SUPPORT // +- +- +- RTMPFreeAdapter(pAd); +- +- return TRUE; +-} +- +- +-// not yet support MBSS +-PNET_DEV get_netdev_from_bssid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR FromWhichBSSID) +-{ +- PNET_DEV dev_p = NULL; +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- dev_p = pAd->net_dev; +- } +-#endif // CONFIG_STA_SUPPORT // +- +- ASSERT(dev_p); +- return dev_p; /* return one of MBSS */ +-} +diff --git a/drivers/staging/rt3090/common/rtmp_mcu.c b/drivers/staging/rt3090/common/rtmp_mcu.c +deleted file mode 100644 +index 20319e6..0000000 +--- a/drivers/staging/rt3090/common/rtmp_mcu.c ++++ /dev/null +@@ -1,560 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_mcu.c +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +-#include "../firmware.h" +- +-//#define BIN_IN_FILE /* use *.bin firmware */ +- +- +-// New 8k byte firmware size for RT3071/RT3072 +-#define FIRMWAREIMAGE_MAX_LENGTH 0x2000 +-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage_3090) / sizeof(UCHAR)) +-#define FIRMWARE_MAJOR_VERSION 0 +- +-#define FIRMWAREIMAGEV1_LENGTH 0x1000 +-#define FIRMWAREIMAGEV2_LENGTH 0x1000 +- +-#ifdef RTMP_MAC_PCI +-#define FIRMWARE_MINOR_VERSION 2 +-#endif // RTMP_MAC_PCI // +- +-const unsigned short ccitt_16Table[] = { +- 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, +- 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, +- 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, +- 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, +- 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, +- 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, +- 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, +- 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, +- 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, +- 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, +- 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, +- 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, +- 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, +- 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, +- 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, +- 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, +- 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, +- 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, +- 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, +- 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, +- 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, +- 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, +- 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, +- 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, +- 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, +- 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, +- 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, +- 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, +- 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, +- 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, +- 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, +- 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 +-}; +-#define ByteCRC16(v, crc) \ +- (unsigned short)((crc << 8) ^ ccitt_16Table[((crc >> 8) ^ (v)) & 255]) +- +-unsigned char BitReverse(unsigned char x) +-{ +- int i; +- unsigned char Temp=0; +- for(i=0; ; i++) +- { +- if(x & 0x80) Temp |= 0x80; +- if(i==7) break; +- x <<= 1; +- Temp >>= 1; +- } +- return Temp; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- erase 8051 firmware image in MAC ASIC +- +- Arguments: +- Adapter Pointer to our adapter +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-INT RtmpAsicEraseFirmware( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG i; +- +- for(i=0; i %s\n", __FUNCTION__)); +- +- /* init */ +- pFirmwareImage = NULL; +- src = RTMP_FIRMWARE_FILE_NAME; +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- pAd->FirmwareVersion = (FIRMWARE_MAJOR_VERSION << 8) + \ +- FIRMWARE_MINOR_VERSION; +- +- +- /* allocate firmware buffer */ +- pFirmwareImage = kmalloc(MAX_FIRMWARE_IMAGE_SIZE, MEM_ALLOC_FLAG); +- if (pFirmwareImage == NULL) +- { +- /* allocate fail, use default firmware array in firmware.h */ +- DBGPRINT(RT_DEBUG_ERROR, ("%s - Allocate memory fail!\n", __FUNCTION__)); +- NICLF_DEFAULT_USE(); +- } +- else +- { +- /* allocate ok! zero the firmware buffer */ +- memset(pFirmwareImage, 0x00, MAX_FIRMWARE_IMAGE_SIZE); +- } /* End of if */ +- +- +- /* if ok, read firmware file from *.bin file */ +- if (flg_default_firm_use == FALSE) +- { +- do +- { +- /* open the bin file */ +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s - Error opening file %s\n", __FUNCTION__, src)); +- NICLF_DEFAULT_USE(); +- break; +- } +- +- +- /* read the firmware from the file *.bin */ +- FileLength = RtmpOSFileRead(srcf, pFirmwareImage, MAX_FIRMWARE_IMAGE_SIZE); +- if (FileLength != MAX_FIRMWARE_IMAGE_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: error file length (=%d) in RT2860AP.BIN\n", +- __FUNCTION__, FileLength)); +- NICLF_DEFAULT_USE(); +- break; +- } +- else +- { +- PUCHAR ptr = pFirmwareImage; +- USHORT crc = 0xffff; +- +- +- /* calculate firmware CRC */ +- for(i=0; i<(MAX_FIRMWARE_IMAGE_SIZE-2); i++, ptr++) +- crc = ByteCRC16(BitReverse(*ptr), crc); +- /* End of for */ +- +- if ((pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-2] != \ +- (UCHAR)BitReverse((UCHAR)(crc>>8))) || +- (pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-1] != \ +- (UCHAR)BitReverse((UCHAR)crc))) +- { +- /* CRC fail */ +- DBGPRINT(RT_DEBUG_ERROR, ("%s: CRC = 0x%02x 0x%02x " +- "error, should be 0x%02x 0x%02x\n", +- __FUNCTION__, +- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-2], +- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-1], +- (UCHAR)(crc>>8), (UCHAR)(crc))); +- NICLF_DEFAULT_USE(); +- break; +- } +- else +- { +- /* firmware is ok */ +- pAd->FirmwareVersion = \ +- (pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-4] << 8) + +- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-3]; +- +- /* check if firmware version of the file is too old */ +- if ((pAd->FirmwareVersion) < \ +- ((FIRMWARE_MAJOR_VERSION << 8) + +- FIRMWARE_MINOR_VERSION)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: firmware version too old!\n", __FUNCTION__)); +- NICLF_DEFAULT_USE(); +- break; +- } /* End of if */ +- } /* End of if */ +- +- DBGPRINT(RT_DEBUG_TRACE, +- ("NICLoadFirmware: CRC ok, ver=%d.%d\n", +- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-4], +- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-3])); +- } /* End of if (FileLength == MAX_FIRMWARE_IMAGE_SIZE) */ +- break; +- } while(TRUE); +- +- /* close firmware file */ +- if (IS_FILE_OPEN_ERR(srcf)) +- ; +- else +- { +- retval = RtmpOSFileClose(srcf); +- if (retval) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %d closing %s\n", -retval, src)); +- } +- } +- } +- +- +- /* write firmware to ASIC */ +- if (flg_default_firm_use == TRUE) +- { +- /* use default fimeware, free allocated buffer */ +- if (pFirmwareImage != NULL) +- kfree(pFirmwareImage); +- /* End of if */ +- +- /* use default *.bin array */ +- pFirmwareImage = FirmwareImage; +- FileLength = sizeof(FirmwareImage); +- } /* End of if */ +- +- /* enable Host program ram write selection */ +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x10000); +- +- for(i=0; iMACVersion >> 16); +- +- pFirmwareImage = FirmwareImage_3090; +- FileLength = sizeof(*pFirmwareImage); +- +- // New 8k byte firmware size for RT3071/RT3072 +- //DBGPRINT(RT_DEBUG_TRACE, ("Usb Chip\n")); +- if (FIRMWAREIMAGE_LENGTH == FIRMWAREIMAGE_MAX_LENGTH) +- //The firmware image consists of two parts. One is the origianl and the other is the new. +- //Use Second Part +- { +-#ifdef RTMP_MAC_PCI +- if ((Version == 0x2860) || IS_RT3090(pAd)||IS_RT3390(pAd)) +- { +- pFirmwareImage = FirmwareImage_3090; +- FileLength = FIRMWAREIMAGE_LENGTH; +- } +-#endif // RTMP_MAC_PCI // +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("KH: bin file should be 8KB.\n")); +- Status = NDIS_STATUS_FAILURE; +- } +- +- +- RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); +- +-#endif +- +- /* check if MCU is ready */ +- Index = 0; +- do +- { +- RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacReg); +- +- if (MacReg & 0x80) +- break; +- +- RTMPusecDelay(1000); +- } while (Index++ < 1000); +- +- if (Index >= 1000) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware: MCU is not ready\n\n\n")); +- Status = NDIS_STATUS_FAILURE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== %s (status=%d)\n", __FUNCTION__, Status)); +- +- return Status; +-} +- +- +-INT RtmpAsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1) +-{ +- HOST_CMD_CSR_STRUC H2MCmd; +- H2M_MAILBOX_STRUC H2MMailbox; +- ULONG i = 0; +-#ifdef RTMP_MAC_PCI +-#ifdef RALINK_ATE +- static UINT32 j = 0; +-#endif // RALINK_ATE // +-#endif // RTMP_MAC_PCI // +-#ifdef PCIE_PS_SUPPORT +-#ifdef CONFIG_STA_SUPPORT +- // 3090F power solution 3 has hw limitation that needs to ban all mcu command +- // when firmware is in radio state. For other chip doesn't have this limitation. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- if ((pAd->brt30xxBanMcuCmd == TRUE) +- && (Command != WAKE_MCU_CMD) && (Command != RFOFF_MCU_CMD)) +- { +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- DBGPRINT(RT_DEBUG_TRACE, (" Ban Mcu Cmd %x in sleep mode\n", Command)); +- return FALSE; +- } +- else if ((Command == SLEEP_MCU_CMD) +- ||(Command == RFOFF_MCU_CMD)) +- { +- pAd->brt30xxBanMcuCmd = TRUE; +- } +- else if (Command != WAKE_MCU_CMD) +- { +- pAd->brt30xxBanMcuCmd = FALSE; +- } +- +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- +- } +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- && (Command == WAKE_MCU_CMD)) +- { +- +- do +- { +- RTMP_IO_FORCE_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +- if (H2MMailbox.field.Owner == 0) +- break; +- +- RTMPusecDelay(2); +- DBGPRINT(RT_DEBUG_INFO, ("AsicSendCommanToMcu::Mail box is busy\n")); +- } while(i++ < 100); +- +- if (i >= 100) +- { +- DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); +- return FALSE; +- } +- +- H2MMailbox.field.Owner = 1; // pass ownership to MCU +- H2MMailbox.field.CmdToken = Token; +- H2MMailbox.field.HighByte = Arg1; +- H2MMailbox.field.LowByte = Arg0; +- RTMP_IO_FORCE_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); +- +- H2MCmd.word = 0; +- H2MCmd.field.HostCommand = Command; +- RTMP_IO_FORCE_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); +- +- +- } +- else +-#endif // CONFIG_STA_SUPPORT // +-#endif // PCIE_PS_SUPPORT // +- { +- do +- { +- RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +- if (H2MMailbox.field.Owner == 0) +- break; +- +- RTMPusecDelay(2); +- } while(i++ < 100); +- +- if (i >= 100) +- { +-#ifdef RTMP_MAC_PCI +-#ifdef RALINK_ATE +- if (pAd->ate.bFWLoading == TRUE) +- { +- /* reloading firmware when received iwpriv cmd "ATE=ATESTOP" */ +- if (j > 0) +- { +- if (j % 64 != 0) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("#")); +- } +- else +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("\n")); +- } +- ++j; +- } +- else if (j == 0) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Loading firmware. Please wait for a moment...\n")); +- ++j; +- } +- } +- else +-#endif // RALINK_ATE // +-#endif // RTMP_MAC_PCI // +- { +- DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); +- } +- return FALSE; +- } +- +-#ifdef RTMP_MAC_PCI +-#ifdef RALINK_ATE +- else if (pAd->ate.bFWLoading == TRUE) +- { +- /* reloading of firmware is completed */ +- pAd->ate.bFWLoading = FALSE; +- ATEDBGPRINT(RT_DEBUG_ERROR, ("\n")); +- j = 0; +- } +-#endif // RALINK_ATE // +-#endif // RTMP_MAC_PCI // +- +- H2MMailbox.field.Owner = 1; // pass ownership to MCU +- H2MMailbox.field.CmdToken = Token; +- H2MMailbox.field.HighByte = Arg1; +- H2MMailbox.field.LowByte = Arg0; +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); +- +- H2MCmd.word = 0; +- H2MCmd.field.HostCommand = Command; +- RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); +- +- if (Command != 0x80) +- { +- } +-} +-#ifdef PCIE_PS_SUPPORT +-#ifdef CONFIG_STA_SUPPORT +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- && (Command == WAKE_MCU_CMD)) +- { +- RTMPusecDelay(2000); +- //Put this is after RF programming. +- //NdisAcquireSpinLock(&pAd->McuCmdLock); +- //pAd->brt30xxBanMcuCmd = FALSE; +- //NdisReleaseSpinLock(&pAd->McuCmdLock); +- } +-#endif // CONFIG_STA_SUPPORT // +-#endif // PCIE_PS_SUPPORT // +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/common/rtmp_timer.c b/drivers/staging/rt3090/common/rtmp_timer.c +deleted file mode 100644 +index 5253e87..0000000 +--- a/drivers/staging/rt3090/common/rtmp_timer.c ++++ /dev/null +@@ -1,327 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_timer.c +- +- Abstract: +- task for timer handling +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Shiang Tu 08-28-2008 init version +- +-*/ +- +-#include "../rt_config.h" +- +- +-BUILD_TIMER_FUNCTION(MlmePeriodicExec); +-//BUILD_TIMER_FUNCTION(MlmeRssiReportExec); +-BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout); +-BUILD_TIMER_FUNCTION(APSDPeriodicExec); +-BUILD_TIMER_FUNCTION(AsicRfTuningExec); +- +- +-#ifdef CONFIG_STA_SUPPORT +-BUILD_TIMER_FUNCTION(BeaconTimeout); +-BUILD_TIMER_FUNCTION(ScanTimeout); +-BUILD_TIMER_FUNCTION(AuthTimeout); +-BUILD_TIMER_FUNCTION(AssocTimeout); +-BUILD_TIMER_FUNCTION(ReassocTimeout); +-BUILD_TIMER_FUNCTION(DisassocTimeout); +-BUILD_TIMER_FUNCTION(LinkDownExec); +-BUILD_TIMER_FUNCTION(StaQuickResponeForRateUpExec); +-BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); +-#ifdef RTMP_MAC_PCI +-BUILD_TIMER_FUNCTION(PsPollWakeExec); +-BUILD_TIMER_FUNCTION(RadioOnExec); +-#endif // RTMP_MAC_PCI // +-#ifdef QOS_DLS_SUPPORT +-BUILD_TIMER_FUNCTION(DlsTimeoutAction); +-#endif // QOS_DLS_SUPPORT // +- +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-#if defined(AP_LED) || defined(STA_LED) +-extern void LedCtrlMain( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +-BUILD_TIMER_FUNCTION(LedCtrlMain); +-#endif +- +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +-static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) +-{ +-#ifndef KTHREAD_SUPPORT +- int status; +-#endif +- RALINK_TIMER_STRUCT *pTimer; +- RTMP_TIMER_TASK_ENTRY *pEntry; +- unsigned long irqFlag; +- RTMP_OS_TASK *pTask; +- +- +- pTask = &pAd->timerTask; +- while(!pTask->task_killed) +- { +- pTimer = NULL; +- +-#ifdef KTHREAD_SUPPORT +- RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); +-#else +- RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); +-#endif +- +- if (pAd->TimerQ.status == RTMP_TASK_STAT_STOPED) +- break; +- +- // event happened. +- while(pAd->TimerQ.pQHead) +- { +- RTMP_INT_LOCK(&pAd->TimerQLock, irqFlag); +- pEntry = pAd->TimerQ.pQHead; +- if (pEntry) +- { +- pTimer = pEntry->pRaTimer; +- +- // update pQHead +- pAd->TimerQ.pQHead = pEntry->pNext; +- if (pEntry == pAd->TimerQ.pQTail) +- pAd->TimerQ.pQTail = NULL; +- +- // return this queue entry to timerQFreeList. +- pEntry->pNext = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pEntry; +- } +- RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlag); +- +- if (pTimer) +- { +- if ((pTimer->handle != NULL) && (!pAd->PM_FlgSuspend)) +- pTimer->handle(NULL, (PVOID) pTimer->cookie, NULL, pTimer); +- if ((pTimer->Repeat) && (pTimer->State == FALSE)) +- RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); +- } +- } +- +-#ifndef KTHREAD_SUPPORT +- if (status != 0) +- { +- pAd->TimerQ.status = RTMP_TASK_STAT_STOPED; +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- break; +- } +-#endif +- } +-} +- +- +-INT RtmpTimerQThread( +- IN OUT PVOID Context) +-{ +- RTMP_OS_TASK *pTask; +- PRTMP_ADAPTER pAd; +- +- +- pTask = (RTMP_OS_TASK *)Context; +- pAd = (PRTMP_ADAPTER)pTask->priv; +- +- RtmpOSTaskCustomize(pTask); +- +- RtmpTimerQHandle(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__FUNCTION__)); +-#ifndef KTHREAD_SUPPORT +- pTask->taskPID = THREAD_PID_INIT_VALUE; +-#endif +- /* notify the exit routine that we're actually exiting now +- * +- * complete()/wait_for_completion() is similar to up()/down(), +- * except that complete() is safe in the case where the structure +- * is getting deleted in a parallel mode of execution (i.e. just +- * after the down() -- that's necessary for the thread-shutdown +- * case. +- * +- * complete_and_exit() goes even further than this -- it is safe in +- * the case that the thread of the caller is going away (not just +- * the structure) -- this is necessary for the module-remove case. +- * This is important in preemption kernels, which transfer the flow +- * of execution immediately upon a complete(). +- */ +- RtmpOSTaskNotifyToExit(pTask); +- +- return 0; +- +-} +- +- +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) +-{ +- RTMP_TIMER_TASK_ENTRY *pQNode = NULL, *pQTail; +- unsigned long irqFlags; +- RTMP_OS_TASK *pTask = &pAd->timerTask; +- +- RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT) +- { +- if(pAd->TimerQ.pQPollFreeList) +- { +- pQNode = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pQNode->pNext; +- +- pQNode->pRaTimer = pTimer; +- pQNode->pNext = NULL; +- +- pQTail = pAd->TimerQ.pQTail; +- if (pAd->TimerQ.pQTail != NULL) +- pQTail->pNext = pQNode; +- pAd->TimerQ.pQTail = pQNode; +- if (pAd->TimerQ.pQHead == NULL) +- pAd->TimerQ.pQHead = pQNode; +- } +- } +- RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); +- +- if (pQNode) +- { +-#ifdef KTHREAD_SUPPORT +- WAKE_UP(pTask); +-#else +- RTMP_SEM_EVENT_UP(&pTask->taskSema); +-#endif +- } +- +- return pQNode; +-} +- +- +-BOOLEAN RtmpTimerQRemove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) +-{ +- RTMP_TIMER_TASK_ENTRY *pNode, *pPrev = NULL; +- unsigned long irqFlags; +- +- RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status >= RTMP_TASK_STAT_INITED) +- { +- pNode = pAd->TimerQ.pQHead; +- while (pNode) +- { +- if (pNode->pRaTimer == pTimer) +- break; +- pPrev = pNode; +- pNode = pNode->pNext; +- } +- +- // Now move it to freeList queue. +- if (pNode) +- { +- if (pNode == pAd->TimerQ.pQHead) +- pAd->TimerQ.pQHead = pNode->pNext; +- if (pNode == pAd->TimerQ.pQTail) +- pAd->TimerQ.pQTail = pPrev; +- if (pPrev != NULL) +- pPrev->pNext = pNode->pNext; +- +- // return this queue entry to timerQFreeList. +- pNode->pNext = pAd->TimerQ.pQPollFreeList; +- pAd->TimerQ.pQPollFreeList = pNode; +- } +- } +- RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); +- +- return TRUE; +-} +- +- +-void RtmpTimerQExit(RTMP_ADAPTER *pAd) +-{ +- RTMP_TIMER_TASK_ENTRY *pTimerQ; +- unsigned long irqFlags; +- +- RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- while (pAd->TimerQ.pQHead) +- { +- pTimerQ = pAd->TimerQ.pQHead; +- pAd->TimerQ.pQHead = pTimerQ->pNext; +- // remove the timeQ +- } +- pAd->TimerQ.pQPollFreeList = NULL; +- os_free_mem(pAd, pAd->TimerQ.pTimerQPoll); +- pAd->TimerQ.pQTail = NULL; +- pAd->TimerQ.pQHead = NULL; +-#ifndef KTHREAD_SUPPORT +- pAd->TimerQ.status = RTMP_TASK_STAT_STOPED; +-#endif +- RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); +- +-} +- +- +-void RtmpTimerQInit(RTMP_ADAPTER *pAd) +-{ +- int i; +- RTMP_TIMER_TASK_ENTRY *pQNode, *pEntry; +- unsigned long irqFlags; +- +- NdisAllocateSpinLock(&pAd->TimerQLock); +- +- NdisZeroMemory(&pAd->TimerQ, sizeof(pAd->TimerQ)); +- +- os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); +- if (pAd->TimerQ.pTimerQPoll) +- { +- pEntry = NULL; +- pQNode = (RTMP_TIMER_TASK_ENTRY *)pAd->TimerQ.pTimerQPoll; +- NdisZeroMemory(pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); +- +- RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- for (i = 0 ;i pNext = pEntry; +- pEntry = pQNode; +- pQNode++; +- } +- pAd->TimerQ.pQPollFreeList = pEntry; +- pAd->TimerQ.pQHead = NULL; +- pAd->TimerQ.pQTail = NULL; +- pAd->TimerQ.status = RTMP_TASK_STAT_INITED; +- RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); +- } +-} +-#endif // RTMP_TIMER_TASK_SUPPORT // +diff --git a/drivers/staging/rt3090/common/spectrum.c b/drivers/staging/rt3090/common/spectrum.c +deleted file mode 100644 +index 12d2125..0000000 +--- a/drivers/staging/rt3090/common/spectrum.c ++++ /dev/null +@@ -1,2221 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- action.c +- +- Abstract: +- Handle association related requests either from WSTA or from local MLME +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- Fonchi Wu 2008 created for 802.11h +- */ +- +-#include "../rt_config.h" +-#include "../action.h" +- +- +-/* The regulatory information in the USA (US) */ +-DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = +-{ +-/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invlid entry +- {1, {4, 16, {36, 40, 44, 48}}}, +- {2, {4, 23, {52, 56, 60, 64}}}, +- {3, {4, 29, {149, 153, 157, 161}}}, +- {4, {11, 23, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, +- {5, {5, 30, {149, 153, 157, 161, 165}}}, +- {6, {10, 14, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, +- {7, {10, 27, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, +- {8, {5, 17, {11, 13, 15, 17, 19}}}, +- {9, {5, 30, {11, 13, 15, 17, 19}}}, +- {10, {2, 20, {21, 25}}}, +- {11, {2, 33, {21, 25}}}, +- {12, {11, 30, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}}} +-}; +-#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) +- +- +-/* The regulatory information in Europe */ +-DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = +-{ +-/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invalid entry +- {1, {4, 20, {36, 40, 44, 48}}}, +- {2, {4, 20, {52, 56, 60, 64}}}, +- {3, {11, 30, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, +- {4, {13, 20, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}} +-}; +-#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) +- +- +-/* The regulatory information in Japan */ +-DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = +-{ +-/* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invalid entry +- {1, {4, 22, {34, 38, 42, 46}}}, +- {2, {3, 24, {8, 12, 16}}}, +- {3, {3, 24, {8, 12, 16}}}, +- {4, {3, 24, {8, 12, 16}}}, +- {5, {3, 24, {8, 12, 16}}}, +- {6, {3, 22, {8, 12, 16}}}, +- {7, {4, 24, {184, 188, 192, 196}}}, +- {8, {4, 24, {184, 188, 192, 196}}}, +- {9, {4, 24, {184, 188, 192, 196}}}, +- {10, {4, 24, {184, 188, 192, 196}}}, +- {11, {4, 22, {184, 188, 192, 196}}}, +- {12, {4, 24, {7, 8, 9, 11}}}, +- {13, {4, 24, {7, 8, 9, 11}}}, +- {14, {4, 24, {7, 8, 9, 11}}}, +- {15, {4, 24, {7, 8, 9, 11}}}, +- {16, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {17, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {18, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {19, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {20, {6, 17, {183, 184, 185, 187, 188, 189}}}, +- {21, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {22, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {23, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {24, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {25, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {26, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {27, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {28, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {29, {8, 17, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {30, {13, 23, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}}, +- {31, {1, 23, {14}}}, +- {32, {4, 22, {52, 56, 60, 64}}} +-}; +-#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) +- +- +-CHAR RTMP_GetTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN HTTRANSMIT_SETTING HTTxMode) +-{ +-typedef struct __TX_PWR_CFG +-{ +- UINT8 Mode; +- UINT8 MCS; +- UINT16 req; +- UINT8 shift; +- UINT32 BitMask; +-} TX_PWR_CFG; +- +- UINT32 Value; +- INT Idx; +- UINT8 PhyMode; +- CHAR CurTxPwr; +- UINT8 TxPwrRef = 0; +- CHAR DaltaPwr; +- ULONG TxPwr[5]; +- +- +- TX_PWR_CFG TxPwrCfg[] = { +- {MODE_CCK, 0, 0, 4, 0x000000f0}, +- {MODE_CCK, 1, 0, 0, 0x0000000f}, +- {MODE_CCK, 2, 0, 12, 0x0000f000}, +- {MODE_CCK, 3, 0, 8, 0x00000f00}, +- +- {MODE_OFDM, 0, 0, 20, 0x00f00000}, +- {MODE_OFDM, 1, 0, 16, 0x000f0000}, +- {MODE_OFDM, 2, 0, 28, 0xf0000000}, +- {MODE_OFDM, 3, 0, 24, 0x0f000000}, +- {MODE_OFDM, 4, 1, 4, 0x000000f0}, +- {MODE_OFDM, 5, 1, 0, 0x0000000f}, +- {MODE_OFDM, 6, 1, 12, 0x0000f000}, +- {MODE_OFDM, 7, 1, 8, 0x00000f00} +-#ifdef DOT11_N_SUPPORT +- ,{MODE_HTMIX, 0, 1, 20, 0x00f00000}, +- {MODE_HTMIX, 1, 1, 16, 0x000f0000}, +- {MODE_HTMIX, 2, 1, 28, 0xf0000000}, +- {MODE_HTMIX, 3, 1, 24, 0x0f000000}, +- {MODE_HTMIX, 4, 2, 4, 0x000000f0}, +- {MODE_HTMIX, 5, 2, 0, 0x0000000f}, +- {MODE_HTMIX, 6, 2, 12, 0x0000f000}, +- {MODE_HTMIX, 7, 2, 8, 0x00000f00}, +- {MODE_HTMIX, 8, 2, 20, 0x00f00000}, +- {MODE_HTMIX, 9, 2, 16, 0x000f0000}, +- {MODE_HTMIX, 10, 2, 28, 0xf0000000}, +- {MODE_HTMIX, 11, 2, 24, 0x0f000000}, +- {MODE_HTMIX, 12, 3, 4, 0x000000f0}, +- {MODE_HTMIX, 13, 3, 0, 0x0000000f}, +- {MODE_HTMIX, 14, 3, 12, 0x0000f000}, +- {MODE_HTMIX, 15, 3, 8, 0x00000f00} +-#endif // DOT11_N_SUPPORT // +- }; +-#define MAX_TXPWR_TAB_SIZE (sizeof(TxPwrCfg) / sizeof(TX_PWR_CFG)) +- +-#ifdef SINGLE_SKU +- CurTxPwr = pAd->CommonCfg.DefineMaxTxPwr; +-#else +- CurTxPwr = 19; +-#endif +- +- /* check Tx Power setting from UI. */ +- if (pAd->CommonCfg.TxPowerPercentage > 90) +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) /* reduce Pwr for 1 dB. */ +- CurTxPwr -= 1; +- else if (pAd->CommonCfg.TxPowerPercentage > 30) /* reduce Pwr for 3 dB. */ +- CurTxPwr -= 3; +- else if (pAd->CommonCfg.TxPowerPercentage > 15) /* reduce Pwr for 6 dB. */ +- CurTxPwr -= 6; +- else if (pAd->CommonCfg.TxPowerPercentage > 9) /* reduce Pwr for 9 dB. */ +- CurTxPwr -= 9; +- else /* reduce Pwr for 12 dB. */ +- CurTxPwr -= 12; +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- if (pAd->CommonCfg.CentralChannel > 14) +- { +- TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; +- } +- } +- else +- { +- if (pAd->CommonCfg.Channel > 14) +- { +- TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; +- } +- } +- +- +- switch(HTTxMode.field.MODE) +- { +- case MODE_CCK: +- case MODE_OFDM: +- Value = TxPwr[1]; +- TxPwrRef = (Value & 0x00000f00) >> 8; +- +- break; +- +-#ifdef DOT11_N_SUPPORT +- case MODE_HTMIX: +- case MODE_HTGREENFIELD: +- if (pAd->CommonCfg.TxStream == 1) +- { +- Value = TxPwr[2]; +- TxPwrRef = (Value & 0x00000f00) >> 8; +- } +- else if (pAd->CommonCfg.TxStream == 2) +- { +- Value = TxPwr[3]; +- TxPwrRef = (Value & 0x00000f00) >> 8; +- } +- break; +-#endif // DOT11_N_SUPPORT // +- } +- +- PhyMode = +-#ifdef DOT11_N_SUPPORT +- (HTTxMode.field.MODE == MODE_HTGREENFIELD) +- ? MODE_HTMIX : +-#endif // DOT11_N_SUPPORT // +- HTTxMode.field.MODE; +- +- for (Idx = 0; Idx < MAX_TXPWR_TAB_SIZE; Idx++) +- { +- if ((TxPwrCfg[Idx].Mode == PhyMode) +- && (TxPwrCfg[Idx].MCS == HTTxMode.field.MCS)) +- { +- Value = TxPwr[TxPwrCfg[Idx].req]; +- DaltaPwr = TxPwrRef - (CHAR)((Value & TxPwrCfg[Idx].BitMask) +- >> TxPwrCfg[Idx].shift); +- CurTxPwr -= DaltaPwr; +- break; +- } +- } +- +- return CurTxPwr; +-} +- +- +-VOID MeasureReqTabInit( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisAllocateSpinLock(&pAd->CommonCfg.MeasureReqTabLock); +- +- pAd->CommonCfg.pMeasureReqTab = kmalloc(sizeof(MEASURE_REQ_TAB), GFP_ATOMIC); +- if (pAd->CommonCfg.pMeasureReqTab) +- NdisZeroMemory(pAd->CommonCfg.pMeasureReqTab, sizeof(MEASURE_REQ_TAB)); +- else +- DBGPRINT(RT_DEBUG_ERROR, ("%s Fail to alloc memory for pAd->CommonCfg.pMeasureReqTab.\n", __FUNCTION__)); +- +- return; +-} +- +-VOID MeasureReqTabExit( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisFreeSpinLock(&pAd->CommonCfg.MeasureReqTabLock); +- +- if (pAd->CommonCfg.pMeasureReqTab) +- kfree(pAd->CommonCfg.pMeasureReqTab); +- pAd->CommonCfg.pMeasureReqTab = NULL; +- +- return; +-} +- +-PMEASURE_REQ_ENTRY MeasureReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- UINT HashIdx; +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL; +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- +- if (pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __FUNCTION__)); +- return NULL; +- } +- +- RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +- +- HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken); +- pEntry = pTab->Hash[HashIdx]; +- +- while (pEntry) +- { +- if (pEntry->DialogToken == DialogToken) +- break; +- else +- { +- pPrevEntry = pEntry; +- pEntry = pEntry->pNext; +- } +- } +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.MeasureReqTabLock); +- +- return pEntry; +-} +- +-PMEASURE_REQ_ENTRY MeasureReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- INT i; +- ULONG HashIdx; +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL, pCurrEntry; +- ULONG Now; +- +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __FUNCTION__)); +- return NULL; +- } +- +- pEntry = MeasureReqLookUp(pAd, DialogToken); +- if (pEntry == NULL) +- { +- RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +- for (i = 0; i < MAX_MEASURE_REQ_TAB_SIZE; i++) +- { +- NdisGetSystemUpTime(&Now); +- pEntry = &pTab->Content[i]; +- +- if ((pEntry->Valid == TRUE) +- && RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->lastTime + MQ_REQ_AGE_OUT))) +- { +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; +- +- // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- } +- break; +- } +- +- pPrevEntry = pProbeEntry; +- pProbeEntry = pProbeEntry->pNext; +- } while (pProbeEntry); +- +- NdisZeroMemory(pEntry, sizeof(MEASURE_REQ_ENTRY)); +- pTab->Size--; +- +- break; +- } +- +- if (pEntry->Valid == FALSE) +- break; +- } +- +- if (i < MAX_MEASURE_REQ_TAB_SIZE) +- { +- NdisGetSystemUpTime(&Now); +- pEntry->lastTime = Now; +- pEntry->Valid = TRUE; +- pEntry->DialogToken = DialogToken; +- pTab->Size++; +- } +- else +- { +- pEntry = NULL; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab tab full.\n", __FUNCTION__)); +- } +- +- // add this Neighbor entry into HASH table +- if (pEntry) +- { +- HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken); +- if (pTab->Hash[HashIdx] == NULL) +- { +- pTab->Hash[HashIdx] = pEntry; +- } +- else +- { +- pCurrEntry = pTab->Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- pCurrEntry = pCurrEntry->pNext; +- pCurrEntry->pNext = pEntry; +- } +- } +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.MeasureReqTabLock); +- } +- +- return pEntry; +-} +- +-VOID MeasureReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL; +- +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __FUNCTION__)); +- return; +- } +- +- // if empty, return +- if (pTab->Size == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("pMeasureReqTab empty.\n")); +- return; +- } +- +- pEntry = MeasureReqLookUp(pAd, DialogToken); +- if (pEntry != NULL) +- { +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; +- +- RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +- // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- } +- break; +- } +- +- pPrevEntry = pProbeEntry; +- pProbeEntry = pProbeEntry->pNext; +- } while (pProbeEntry); +- +- NdisZeroMemory(pEntry, sizeof(MEASURE_REQ_ENTRY)); +- pTab->Size--; +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.MeasureReqTabLock); +- } +- +- return; +-} +- +-VOID TpcReqTabInit( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisAllocateSpinLock(&pAd->CommonCfg.TpcReqTabLock); +- +- pAd->CommonCfg.pTpcReqTab = kmalloc(sizeof(TPC_REQ_TAB), GFP_ATOMIC); +- if (pAd->CommonCfg.pTpcReqTab) +- NdisZeroMemory(pAd->CommonCfg.pTpcReqTab, sizeof(TPC_REQ_TAB)); +- else +- DBGPRINT(RT_DEBUG_ERROR, ("%s Fail to alloc memory for pAd->CommonCfg.pTpcReqTab.\n", __FUNCTION__)); +- +- return; +-} +- +-VOID TpcReqTabExit( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisFreeSpinLock(&pAd->CommonCfg.TpcReqTabLock); +- +- if (pAd->CommonCfg.pTpcReqTab) +- kfree(pAd->CommonCfg.pTpcReqTab); +- pAd->CommonCfg.pTpcReqTab = NULL; +- +- return; +-} +- +-static PTPC_REQ_ENTRY TpcReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- UINT HashIdx; +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL; +- PTPC_REQ_ENTRY pPrevEntry = NULL; +- +- if (pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __FUNCTION__)); +- return NULL; +- } +- +- RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +- +- HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken); +- pEntry = pTab->Hash[HashIdx]; +- +- while (pEntry) +- { +- if (pEntry->DialogToken == DialogToken) +- break; +- else +- { +- pPrevEntry = pEntry; +- pEntry = pEntry->pNext; +- } +- } +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock); +- +- return pEntry; +-} +- +- +-static PTPC_REQ_ENTRY TpcReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- INT i; +- ULONG HashIdx; +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL, pCurrEntry; +- ULONG Now; +- +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __FUNCTION__)); +- return NULL; +- } +- +- pEntry = TpcReqLookUp(pAd, DialogToken); +- if (pEntry == NULL) +- { +- RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +- for (i = 0; i < MAX_TPC_REQ_TAB_SIZE; i++) +- { +- NdisGetSystemUpTime(&Now); +- pEntry = &pTab->Content[i]; +- +- if ((pEntry->Valid == TRUE) +- && RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->lastTime + TPC_REQ_AGE_OUT))) +- { +- PTPC_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; +- +- // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- } +- break; +- } +- +- pPrevEntry = pProbeEntry; +- pProbeEntry = pProbeEntry->pNext; +- } while (pProbeEntry); +- +- NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY)); +- pTab->Size--; +- +- break; +- } +- +- if (pEntry->Valid == FALSE) +- break; +- } +- +- if (i < MAX_TPC_REQ_TAB_SIZE) +- { +- NdisGetSystemUpTime(&Now); +- pEntry->lastTime = Now; +- pEntry->Valid = TRUE; +- pEntry->DialogToken = DialogToken; +- pTab->Size++; +- } +- else +- { +- pEntry = NULL; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab tab full.\n", __FUNCTION__)); +- } +- +- // add this Neighbor entry into HASH table +- if (pEntry) +- { +- HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken); +- if (pTab->Hash[HashIdx] == NULL) +- { +- pTab->Hash[HashIdx] = pEntry; +- } +- else +- { +- pCurrEntry = pTab->Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- pCurrEntry = pCurrEntry->pNext; +- pCurrEntry->pNext = pEntry; +- } +- } +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock); +- } +- +- return pEntry; +-} +- +-static VOID TpcReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) +-{ +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL; +- +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __FUNCTION__)); +- return; +- } +- +- // if empty, return +- if (pTab->Size == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("pTpcReqTab empty.\n")); +- return; +- } +- +- pEntry = TpcReqLookUp(pAd, DialogToken); +- if (pEntry != NULL) +- { +- PTPC_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; +- +- RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +- // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; +- } +- break; +- } +- +- pPrevEntry = pProbeEntry; +- pProbeEntry = pProbeEntry->pNext; +- } while (pProbeEntry); +- +- NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY)); +- pTab->Size--; +- +- RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock); +- } +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Get Current TimeS tamp. +- +- Parametrs: +- +- Return : Current Time Stamp. +- ========================================================================== +- */ +-static UINT64 GetCurrentTimeStamp( +- IN PRTMP_ADAPTER pAd) +-{ +- // get current time stamp. +- return 0; +-} +- +-/* +- ========================================================================== +- Description: +- Get Current Transmit Power. +- +- Parametrs: +- +- Return : Current Time Stamp. +- ========================================================================== +- */ +-static UINT8 GetCurTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 Wcid) +-{ +- return 16; /* 16 dBm */ +-} +- +-/* +- ========================================================================== +- Description: +- Get Current Transmit Power. +- +- Parametrs: +- +- Return : Current Time Stamp. +- ========================================================================== +- */ +-VOID InsertChannelRepIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, +- IN UINT8 RegulatoryClass) +-{ +- ULONG TempLen; +- UINT8 Len; +- UINT8 IEId = IE_AP_CHANNEL_REPORT; +- PUCHAR pChListPtr = NULL; +- +- Len = 1; +- if (strncmp(pCountry, "US", 2) == 0) +- { +- if (RegulatoryClass >= USA_REGULATORY_INFO_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: USA Unknow Requlatory class (%d)\n", +- __FUNCTION__, RegulatoryClass)); +- return; +- } +- +- Len += USARegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; +- pChListPtr = USARegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; +- } +- else if (strncmp(pCountry, "JP", 2) == 0) +- { +- if (RegulatoryClass >= JP_REGULATORY_INFO_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: JP Unknow Requlatory class (%d)\n", +- __FUNCTION__, RegulatoryClass)); +- return; +- } +- +- Len += JapanRegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; +- pChListPtr = JapanRegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: Unknow Country (%s)\n", +- __FUNCTION__, pCountry)); +- return; +- } +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &IEId, +- 1, &Len, +- 1, &RegulatoryClass, +- Len -1, pChListPtr, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert Dialog Token into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. Dialog token. +- +- Return : None. +- ========================================================================== +- */ +-VOID InsertDialogToken( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 DialogToken) +-{ +- ULONG TempLen; +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &DialogToken, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert TPC Request IE into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- +- Return : None. +- ========================================================================== +- */ +- static VOID InsertTpcReqIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen) +-{ +- ULONG TempLen; +- ULONG Len = 0; +- UINT8 ElementID = IE_TPC_REQUEST; +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert TPC Report IE into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. Transmit Power. +- 4. Link Margin. +- +- Return : None. +- ========================================================================== +- */ +-VOID InsertTpcReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin) +-{ +- ULONG TempLen; +- ULONG Len = sizeof(TPC_REPORT_INFO); +- UINT8 ElementID = IE_TPC_REPORT; +- TPC_REPORT_INFO TpcReportIE; +- +- TpcReportIE.TxPwr = TxPwr; +- TpcReportIE.LinkMargin = LinkMargin; +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, &TpcReportIE, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert Channel Switch Announcement IE into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. channel switch announcement mode. +- 4. new selected channel. +- 5. channel switch announcement count. +- +- Return : None. +- ========================================================================== +- */ +-static VOID InsertChSwAnnIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 ChSwMode, +- IN UINT8 NewChannel, +- IN UINT8 ChSwCnt) +-{ +- ULONG TempLen; +- ULONG Len = sizeof(CH_SW_ANN_INFO); +- UINT8 ElementID = IE_CHANNEL_SWITCH_ANNOUNCEMENT; +- CH_SW_ANN_INFO ChSwAnnIE; +- +- ChSwAnnIE.ChSwMode = ChSwMode; +- ChSwAnnIE.Channel = NewChannel; +- ChSwAnnIE.ChSwCnt = ChSwCnt; +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, &ChSwAnnIE, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert Measure Request IE into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. Measure Token. +- 4. Measure Request Mode. +- 5. Measure Request Type. +- 6. Measure Channel. +- 7. Measure Start time. +- 8. Measure Duration. +- +- +- Return : None. +- ========================================================================== +- */ +-static VOID InsertMeasureReqIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Len, +- IN PMEASURE_REQ_INFO pMeasureReqIE) +-{ +- ULONG TempLen; +- UINT8 ElementID = IE_MEASUREMENT_REQUEST; +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- sizeof(MEASURE_REQ_INFO), pMeasureReqIE, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Insert Measure Report IE into frame. +- +- Parametrs: +- 1. frame buffer pointer. +- 2. frame length. +- 3. Measure Token. +- 4. Measure Request Mode. +- 5. Measure Request Type. +- 6. Length of Report Infomation +- 7. Pointer of Report Infomation Buffer. +- +- Return : None. +- ========================================================================== +- */ +-static VOID InsertMeasureReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PMEASURE_REPORT_INFO pMeasureReportIE, +- IN UINT8 ReportLnfoLen, +- IN PUINT8 pReportInfo) +-{ +- ULONG TempLen; +- ULONG Len; +- UINT8 ElementID = IE_MEASUREMENT_REPORT; +- +- Len = sizeof(MEASURE_REPORT_INFO) + ReportLnfoLen; +- +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, pMeasureReportIE, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- +- if ((ReportLnfoLen > 0) && (pReportInfo != NULL)) +- { +- MakeOutgoingFrame(pFrameBuf + *pFrameLen, &TempLen, +- ReportLnfoLen, pReportInfo, +- END_OF_ARGS); +- +- *pFrameLen = *pFrameLen + TempLen; +- } +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Prepare Measurement request action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID MakeMeasurementReqFrame( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 NumOfRepetitions) +-{ +- ULONG TempLen; +- MEASURE_REQ_INFO MeasureReqIE; +- +- InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, Action); +- +- // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, MeasureToken); +- +- /* fill Number of repetitions. */ +- if (Category == CATEGORY_RM) +- { +- MakeOutgoingFrame((pOutBuffer+*pFrameLen), &TempLen, +- 2, &NumOfRepetitions, +- END_OF_ARGS); +- +- *pFrameLen += TempLen; +- } +- +- // prepare Measurement IE. +- NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO)); +- MeasureReqIE.Token = MeasureToken; +- MeasureReqIE.ReqMode.word = MeasureReqMode; +- MeasureReqIE.ReqType = MeasureReqType; +- InsertMeasureReqIE(pAd, (pOutBuffer+*pFrameLen), pFrameLen, +- TotalLen, &MeasureReqIE); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Prepare Measurement report action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueMeasurementRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, +- IN PUINT8 pReportInfo) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- HEADER_802_11 ActHdr; +- MEASURE_REPORT_INFO MeasureRepIE; +- +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); +- +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __FUNCTION__)); +- return; +- } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); +- +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_MRP); +- +- // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); +- +- // prepare Measurement IE. +- NdisZeroMemory(&MeasureRepIE, sizeof(MEASURE_REPORT_INFO)); +- MeasureRepIE.Token = MeasureToken; +- MeasureRepIE.ReportMode = MeasureReqMode; +- MeasureRepIE.ReportType = MeasureReqType; +- InsertMeasureReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, &MeasureRepIE, ReportInfoLen, pReportInfo); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Prepare TPC Request action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueTPCReq( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UCHAR DialogToken) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- +- HEADER_802_11 ActHdr; +- +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); +- +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __FUNCTION__)); +- return; +- } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); +- +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_TPCRQ); +- +- // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); +- +- // Insert TPC Request IE. +- InsertTpcReqIE(pAd, (pOutBuffer + FrameLen), &FrameLen); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Prepare TPC Report action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueTPCRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- +- HEADER_802_11 ActHdr; +- +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); +- +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __FUNCTION__)); +- return; +- } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); +- +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_TPCRP); +- +- // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); +- +- // Insert TPC Request IE. +- InsertTpcReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, TxPwr, LinkMargin); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Prepare Channel Switch Announcement action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- 2. Channel switch announcement mode. +- 2. a New selected channel. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueChSwAnn( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 ChSwMode, +- IN UINT8 NewCh) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- +- HEADER_802_11 ActHdr; +- +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); +- +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __FUNCTION__)); +- return; +- } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); +- +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_CHANNEL_SWITCH); +- +- InsertChSwAnnIE(pAd, (pOutBuffer + FrameLen), &FrameLen, ChSwMode, NewCh, 0); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- return; +-} +- +-static BOOLEAN DfsRequirementCheck( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 Channel) +-{ +- BOOLEAN Result = FALSE; +- INT i; +- +- do +- { +- // check DFS procedure is running. +- // make sure DFS procedure won't start twice. +- if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- { +- Result = FALSE; +- break; +- } +- +- // check the new channel carried from Channel Switch Announcemnet is valid. +- for (i=0; iChannelListNum; i++) +- { +- if ((Channel == pAd->ChannelList[i].Channel) +- &&(pAd->ChannelList[i].RemainingTimeForUse == 0)) +- { +- // found radar signal in the channel. the channel can't use at least for 30 minutes. +- pAd->ChannelList[i].RemainingTimeForUse = 1800;//30 min = 1800 sec +- Result = TRUE; +- break; +- } +- } +- } while(FALSE); +- +- return Result; +-} +- +-VOID NotifyChSwAnnToPeerAPs( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, +- IN UINT8 ChSwMode, +- IN UINT8 Channel) +-{ +-#ifdef WDS_SUPPORT +- if (!((pRA[0] & 0xff) == 0xff)) // is pRA a broadcase address. +- { +- INT i; +- // info neighbor APs that Radar signal found throgh WDS link. +- for (i = 0; i < MAX_WDS_ENTRY; i++) +- { +- if (ValidWdsEntry(pAd, i)) +- { +- PUCHAR pDA = pAd->WdsTab.WdsEntry[i].PeerWdsAddr; +- +- // DA equal to SA. have no necessary orignal AP which found Radar signal. +- if (MAC_ADDR_EQUAL(pTA, pDA)) +- continue; +- +- // send Channel Switch Action frame to info Neighbro APs. +- EnqueueChSwAnn(pAd, pDA, ChSwMode, Channel); +- } +- } +- } +-#endif // WDS_SUPPORT // +-} +- +-static VOID StartDFSProcedure( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN UINT8 ChSwMode) +-{ +- // start DFS procedure +- pAd->CommonCfg.Channel = Channel; +-#ifdef DOT11_N_SUPPORT +- N_ChannelCheck(pAd); +-#endif // DOT11_N_SUPPORT // +- pAd->CommonCfg.RadarDetect.RDMode = RD_SWITCHING_MODE; +- pAd->CommonCfg.RadarDetect.CSCount = 0; +-} +- +-/* +- ========================================================================== +- Description: +- Channel Switch Announcement action frame sanity check. +- +- Parametrs: +- 1. MLME message containing the received frame +- 2. message length. +- 3. Channel switch announcement infomation buffer. +- +- +- Return : None. +- ========================================================================== +- */ +- +-/* +- Channel Switch Announcement IE. +- +----+-----+-----------+------------+-----------+ +- | ID | Len |Ch Sw Mode | New Ch Num | Ch Sw Cnt | +- +----+-----+-----------+------------+-----------+ +- 1 1 1 1 1 +-*/ +-static BOOLEAN PeerChSwAnnSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PCH_SW_ANN_INFO pChSwAnnInfo) +-{ +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; +- PUCHAR pFramePtr = Fr->Octet; +- BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; +- +- // skip 802.11 header. +- MsgLen -= sizeof(HEADER_802_11); +- +- // skip category and action code. +- pFramePtr += 2; +- MsgLen -= 2; +- +- if (pChSwAnnInfo == NULL) +- return result; +- +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_CHANNEL_SWITCH_ANNOUNCEMENT: +- NdisMoveMemory(&pChSwAnnInfo->ChSwMode, eid_ptr->Octet, 1); +- NdisMoveMemory(&pChSwAnnInfo->Channel, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pChSwAnnInfo->ChSwCnt, eid_ptr->Octet + 2, 1); +- +- result = TRUE; +- break; +- +- default: +- break; +- } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return result; +-} +- +-/* +- ========================================================================== +- Description: +- Measurement request action frame sanity check. +- +- Parametrs: +- 1. MLME message containing the received frame +- 2. message length. +- 3. Measurement request infomation buffer. +- +- Return : None. +- ========================================================================== +- */ +-static BOOLEAN PeerMeasureReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PMEASURE_REQ_INFO pMeasureReqInfo, +- OUT PMEASURE_REQ pMeasureReq) +-{ +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; +- PUCHAR pFramePtr = Fr->Octet; +- BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; +- PUCHAR ptr; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- +- // skip 802.11 header. +- MsgLen -= sizeof(HEADER_802_11); +- +- // skip category and action code. +- pFramePtr += 2; +- MsgLen -= 2; +- +- if (pMeasureReqInfo == NULL) +- return result; +- +- NdisMoveMemory(pDialogToken, pFramePtr, 1); +- pFramePtr += 1; +- MsgLen -= 1; +- +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_MEASUREMENT_REQUEST: +- NdisMoveMemory(&pMeasureReqInfo->Token, eid_ptr->Octet, 1); +- NdisMoveMemory(&pMeasureReqInfo->ReqMode.word, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pMeasureReqInfo->ReqType, eid_ptr->Octet + 2, 1); +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pMeasureReq->ChNum, ptr, 1); +- NdisMoveMemory(&MeasureStartTime, ptr + 1, 8); +- pMeasureReq->MeasureStartTime = SWAP64(MeasureStartTime); +- NdisMoveMemory(&MeasureDuration, ptr + 9, 2); +- pMeasureReq->MeasureDuration = SWAP16(MeasureDuration); +- +- result = TRUE; +- break; +- +- default: +- break; +- } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return result; +-} +- +-/* +- ========================================================================== +- Description: +- Measurement report action frame sanity check. +- +- Parametrs: +- 1. MLME message containing the received frame +- 2. message length. +- 3. Measurement report infomation buffer. +- 4. basic report infomation buffer. +- +- Return : None. +- ========================================================================== +- */ +- +-/* +- Measurement Report IE. +- +----+-----+-------+-------------+--------------+----------------+ +- | ID | Len | Token | Report Mode | Measure Type | Measure Report | +- +----+-----+-------+-------------+--------------+----------------+ +- 1 1 1 1 1 variable +- +- Basic Report. +- +--------+------------+----------+-----+ +- | Ch Num | Start Time | Duration | Map | +- +--------+------------+----------+-----+ +- 1 8 2 1 +- +- Map Field Bit Format. +- +-----+---------------+---------------------+-------+------------+----------+ +- | Bss | OFDM Preamble | Unidentified signal | Radar | Unmeasured | Reserved | +- +-----+---------------+---------------------+-------+------------+----------+ +- 0 1 2 3 4 5-7 +-*/ +-static BOOLEAN PeerMeasureReportSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PMEASURE_REPORT_INFO pMeasureReportInfo, +- OUT PUINT8 pReportBuf) +-{ +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; +- PUCHAR pFramePtr = Fr->Octet; +- BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; +- PUCHAR ptr; +- +- // skip 802.11 header. +- MsgLen -= sizeof(HEADER_802_11); +- +- // skip category and action code. +- pFramePtr += 2; +- MsgLen -= 2; +- +- if (pMeasureReportInfo == NULL) +- return result; +- +- NdisMoveMemory(pDialogToken, pFramePtr, 1); +- pFramePtr += 1; +- MsgLen -= 1; +- +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_MEASUREMENT_REPORT: +- NdisMoveMemory(&pMeasureReportInfo->Token, eid_ptr->Octet, 1); +- NdisMoveMemory(&pMeasureReportInfo->ReportMode, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pMeasureReportInfo->ReportType, eid_ptr->Octet + 2, 1); +- if (pMeasureReportInfo->ReportType == RM_BASIC) +- { +- PMEASURE_BASIC_REPORT pReport = (PMEASURE_BASIC_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->Map, ptr + 11, 1); +- +- } +- else if (pMeasureReportInfo->ReportType == RM_CCA) +- { +- PMEASURE_CCA_REPORT pReport = (PMEASURE_CCA_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->CCA_Busy_Fraction, ptr + 11, 1); +- +- } +- else if (pMeasureReportInfo->ReportType == RM_RPI_HISTOGRAM) +- { +- PMEASURE_RPI_REPORT pReport = (PMEASURE_RPI_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->RPI_Density, ptr + 11, 8); +- } +- result = TRUE; +- break; +- +- default: +- break; +- } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return result; +-} +- +-/* +- ========================================================================== +- Description: +- TPC Request action frame sanity check. +- +- Parametrs: +- 1. MLME message containing the received frame +- 2. message length. +- 3. Dialog Token. +- +- Return : None. +- ========================================================================== +- */ +-static BOOLEAN PeerTpcReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken) +-{ +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; +- PUCHAR pFramePtr = Fr->Octet; +- BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; +- +- MsgLen -= sizeof(HEADER_802_11); +- +- // skip category and action code. +- pFramePtr += 2; +- MsgLen -= 2; +- +- if (pDialogToken == NULL) +- return result; +- +- NdisMoveMemory(pDialogToken, pFramePtr, 1); +- pFramePtr += 1; +- MsgLen -= 1; +- +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_TPC_REQUEST: +- result = TRUE; +- break; +- +- default: +- break; +- } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return result; +-} +- +-/* +- ========================================================================== +- Description: +- TPC Report action frame sanity check. +- +- Parametrs: +- 1. MLME message containing the received frame +- 2. message length. +- 3. Dialog Token. +- 4. TPC Report IE. +- +- Return : None. +- ========================================================================== +- */ +-static BOOLEAN PeerTpcRepSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PTPC_REPORT_INFO pTpcRepInfo) +-{ +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; +- PUCHAR pFramePtr = Fr->Octet; +- BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; +- +- MsgLen -= sizeof(HEADER_802_11); +- +- // skip category and action code. +- pFramePtr += 2; +- MsgLen -= 2; +- +- if (pDialogToken == NULL) +- return result; +- +- NdisMoveMemory(pDialogToken, pFramePtr, 1); +- pFramePtr += 1; +- MsgLen -= 1; +- +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_TPC_REPORT: +- NdisMoveMemory(&pTpcRepInfo->TxPwr, eid_ptr->Octet, 1); +- NdisMoveMemory(&pTpcRepInfo->LinkMargin, eid_ptr->Octet + 1, 1); +- result = TRUE; +- break; +- +- default: +- break; +- } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); +- } +- +- return result; +-} +- +-/* +- ========================================================================== +- Description: +- Channel Switch Announcement action frame handler. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-static VOID PeerChSwAnnAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- CH_SW_ANN_INFO ChSwAnnInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; +-#ifdef CONFIG_STA_SUPPORT +- UCHAR index = 0, Channel = 0, NewChannel = 0; +- ULONG Bssidx = 0; +-#endif // CONFIG_STA_SUPPORT // +- +- NdisZeroMemory(&ChSwAnnInfo, sizeof(CH_SW_ANN_INFO)); +- if (! PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Invalid Channel Switch Action Frame.\n")); +- return; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- { +- Bssidx = BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, pAd->CommonCfg.Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerChSwAnnAction - Bssidx is not found\n")); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("\n****Bssidx is %d, Channel = %d\n", index, pAd->ScanTab.BssEntry[Bssidx].Channel)); +- hex_dump("SSID",pAd->ScanTab.BssEntry[Bssidx].Bssid ,6); +- +- Channel = pAd->CommonCfg.Channel; +- NewChannel = ChSwAnnInfo.Channel; +- +- if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel)) +- { +- // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). +- // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. +- AsicSwitchChannel(pAd, 1, FALSE); +- AsicLockChannel(pAd, 1); +- LinkDown(pAd, FALSE); +- MlmeQueueInit(&pAd->Mlme.Queue); +- BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc +- +- // channel sanity check +- for (index = 0 ; index < pAd->ChannelListNum; index++) +- { +- if (pAd->ChannelList[index].Channel == NewChannel) +- { +- pAd->ScanTab.BssEntry[Bssidx].Channel = NewChannel; +- pAd->CommonCfg.Channel = NewChannel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("&&&&&&&&&&&&&&&&PeerChSwAnnAction - STA receive channel switch announcement IE (New Channel =%d)\n", NewChannel)); +- break; +- } +- } +- +- if (index >= pAd->ChannelListNum) +- { +- DBGPRINT_ERR(("&&&&&&&&&&&&&&&&&&&&&&&&&&PeerChSwAnnAction(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum)); +- } +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- return; +-} +- +- +-/* +- ========================================================================== +- Description: +- Measurement Request action frame handler. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-static VOID PeerMeasureReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; +- UINT8 DialogToken; +- MEASURE_REQ_INFO MeasureReqInfo; +- MEASURE_REQ MeasureReq; +- MEASURE_REPORT_MODE ReportMode; +- +- if(PeerMeasureReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReqInfo, &MeasureReq)) +- { +- ReportMode.word = 0; +- ReportMode.field.Incapable = 1; +- EnqueueMeasurementRep(pAd, pFr->Hdr.Addr2, DialogToken, MeasureReqInfo.Token, ReportMode.word, MeasureReqInfo.ReqType, 0, NULL); +- } +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Measurement Report action frame handler. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-static VOID PeerMeasureReportAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MEASURE_REPORT_INFO MeasureReportInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; +- UINT8 DialogToken; +- PUINT8 pMeasureReportInfo; +- +-// if (pAd->CommonCfg.bIEEE80211H != TRUE) +-// return; +- +- if ((pMeasureReportInfo = kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for measure report buffer (size=%d).\n", __FUNCTION__, sizeof(MEASURE_RPI_REPORT))); +- return; +- } +- +- NdisZeroMemory(&MeasureReportInfo, sizeof(MEASURE_REPORT_INFO)); +- NdisZeroMemory(pMeasureReportInfo, sizeof(MEASURE_RPI_REPORT)); +- if (PeerMeasureReportSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReportInfo, pMeasureReportInfo)) +- { +- do { +- PMEASURE_REQ_ENTRY pEntry = NULL; +- +- // Not a autonomous measure report. +- // check the dialog token field. drop it if the dialog token doesn't match. +- if ((DialogToken != 0) +- && ((pEntry = MeasureReqLookUp(pAd, DialogToken)) == NULL)) +- break; +- +- if (pEntry != NULL) +- MeasureReqDelete(pAd, pEntry->DialogToken); +- +- if (MeasureReportInfo.ReportType == RM_BASIC) +- { +- PMEASURE_BASIC_REPORT pBasicReport = (PMEASURE_BASIC_REPORT)pMeasureReportInfo; +- if ((pBasicReport->Map.field.Radar) +- && (DfsRequirementCheck(pAd, pBasicReport->ChNum) == TRUE)) +- { +- NotifyChSwAnnToPeerAPs(pAd, pFr->Hdr.Addr1, pFr->Hdr.Addr2, 1, pBasicReport->ChNum); +- StartDFSProcedure(pAd, pBasicReport->ChNum, 1); +- } +- } +- } while (FALSE); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("Invalid Measurement Report Frame.\n")); +- +- kfree(pMeasureReportInfo); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- TPC Request action frame handler. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-static VOID PeerTpcReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; +- PUCHAR pFramePtr = pFr->Octet; +- UINT8 DialogToken; +- UINT8 TxPwr = GetCurTxPwr(pAd, Elem->Wcid); +- UINT8 LinkMargin = 0; +- CHAR RealRssi; +- +- // link margin: Ratio of the received signal power to the minimum desired by the station (STA). The +- // STA may incorporate rate information and channel conditions, including interference, into its computation +- // of link margin. +- +- RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), +- ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), +- ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- +- // skip Category and action code. +- pFramePtr += 2; +- +- // Dialog token. +- NdisMoveMemory(&DialogToken, pFramePtr, 1); +- +- LinkMargin = (RealRssi / MIN_RCV_PWR); +- if (PeerTpcReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken)) +- EnqueueTPCRep(pAd, pFr->Hdr.Addr2, DialogToken, TxPwr, LinkMargin); +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- TPC Report action frame handler. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-static VOID PeerTpcRepAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UINT8 DialogToken; +- TPC_REPORT_INFO TpcRepInfo; +- PTPC_REQ_ENTRY pEntry = NULL; +- +- NdisZeroMemory(&TpcRepInfo, sizeof(TPC_REPORT_INFO)); +- if (PeerTpcRepSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &TpcRepInfo)) +- { +- if ((pEntry = TpcReqLookUp(pAd, DialogToken)) != NULL) +- { +- TpcReqDelete(pAd, pEntry->DialogToken); +- DBGPRINT(RT_DEBUG_TRACE, ("%s: DialogToken=%x, TxPwr=%d, LinkMargin=%d\n", +- __FUNCTION__, DialogToken, TpcRepInfo.TxPwr, TpcRepInfo.LinkMargin)); +- } +- } +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- Spectrun action frames Handler such as channel switch annoucement, +- measurement report, measurement request actions frames. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-VOID PeerSpectrumAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +- +- if (pAd->CommonCfg.bIEEE80211H != TRUE) +- return; +- +- switch(Action) +- { +- case SPEC_MRQ: +- // current rt2860 unable do such measure specified in Measurement Request. +- // reject all measurement request. +- PeerMeasureReqAction(pAd, Elem); +- break; +- +- case SPEC_MRP: +- PeerMeasureReportAction(pAd, Elem); +- break; +- +- case SPEC_TPCRQ: +- PeerTpcReqAction(pAd, Elem); +- break; +- +- case SPEC_TPCRP: +- PeerTpcRepAction(pAd, Elem); +- break; +- +- case SPEC_CHANNEL_SWITCH: +- +-#ifdef DOT11N_DRAFT3 +- { +- SEC_CHA_OFFSET_IE Secondary; +- CHA_SWITCH_ANNOUNCE_IE ChannelSwitch; +- +- // 802.11h only has Channel Switch Announcement IE. +- RTMPMoveMemory(&ChannelSwitch, &Elem->Msg[LENGTH_802_11+4], sizeof (CHA_SWITCH_ANNOUNCE_IE)); +- +- // 802.11n D3.03 adds secondary channel offset element in the end. +- if (Elem->MsgLen == (LENGTH_802_11 + 2 + sizeof (CHA_SWITCH_ANNOUNCE_IE) + sizeof (SEC_CHA_OFFSET_IE))) +- { +- RTMPMoveMemory(&Secondary, &Elem->Msg[LENGTH_802_11+9], sizeof (SEC_CHA_OFFSET_IE)); +- } +- else +- { +- Secondary.SecondaryChannelOffset = 0; +- } +- +- if ((Elem->Msg[LENGTH_802_11+2] == IE_CHANNEL_SWITCH_ANNOUNCEMENT) && (Elem->Msg[LENGTH_802_11+3] == 3)) +- { +- ChannelSwitchAction(pAd, Elem->Wcid, ChannelSwitch.NewChannel, Secondary.SecondaryChannelOffset); +- } +- } +-#endif // DOT11N_DRAFT3 // +- +- PeerChSwAnnAction(pAd, Elem); +- break; +- } +- +- return; +-} +- +-/* +- ========================================================================== +- Description: +- +- Parametrs: +- +- Return : None. +- ========================================================================== +- */ +-INT Set_MeasureReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT Aid = 1; +- UINT ArgIdx; +- PSTRING thisChar; +- +- MEASURE_REQ_MODE MeasureReqMode; +- UINT8 MeasureReqToken = RandomByte(pAd); +- UINT8 MeasureReqType = RM_BASIC; +- UINT8 MeasureCh = 1; +- UINT64 MeasureStartTime = GetCurrentTimeStamp(pAd); +- MEASURE_REQ MeasureReq; +- UINT8 TotalLen; +- +- HEADER_802_11 ActHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __FUNCTION__)); +- goto END_OF_MEASURE_REQ; +- } +- +- ArgIdx = 1; +- while ((thisChar = strsep((char **)&arg, "-")) != NULL) +- { +- switch(ArgIdx) +- { +- case 1: // Aid. +- Aid = (UINT8) simple_strtol(thisChar, 0, 16); +- break; +- +- case 2: // Measurement Request Type. +- MeasureReqType = simple_strtol(thisChar, 0, 16); +- if (MeasureReqType > 3) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow MeasureReqType(%d)\n", __FUNCTION__, MeasureReqType)); +- goto END_OF_MEASURE_REQ; +- } +- break; +- +- case 3: // Measurement channel. +- MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); +- break; +- } +- ArgIdx++; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d, MeasureReqType=%d MeasureCh=%d\n", __FUNCTION__, Aid, MeasureReqType, MeasureCh)); +- if (!VALID_WCID(Aid)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow sta of Aid(%d)\n", __FUNCTION__, Aid)); +- goto END_OF_MEASURE_REQ; +- } +- +- MeasureReqMode.word = 0; +- MeasureReqMode.field.Enable = 1; +- +- MeasureReqInsert(pAd, MeasureReqToken); +- +- // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pAd->MacTab.Content[Aid].Addr, +- pAd->CurrentAddress); +- +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); +- +- TotalLen = sizeof(MEASURE_REQ_INFO) + sizeof(MEASURE_REQ); +- +- MakeMeasurementReqFrame(pAd, pOutBuffer, &FrameLen, +- sizeof(MEASURE_REQ_INFO), CATEGORY_RM, RM_BASIC, +- MeasureReqToken, MeasureReqMode.word, +- MeasureReqType, 0); +- +- MeasureReq.ChNum = MeasureCh; +- MeasureReq.MeasureStartTime = cpu2le64(MeasureStartTime); +- MeasureReq.MeasureDuration = cpu2le16(2000); +- +- { +- ULONG TempLen; +- MakeOutgoingFrame( pOutBuffer+FrameLen, &TempLen, +- sizeof(MEASURE_REQ), &MeasureReq, +- END_OF_ARGS); +- FrameLen += TempLen; +- } +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (UINT)FrameLen); +- +-END_OF_MEASURE_REQ: +- MlmeFreeMemory(pAd, pOutBuffer); +- +- return TRUE; +-} +- +-INT Set_TpcReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT Aid; +- +- UINT8 TpcReqToken = RandomByte(pAd); +- +- Aid = (UINT) simple_strtol(arg, 0, 16); +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d\n", __FUNCTION__, Aid)); +- if (!VALID_WCID(Aid)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow sta of Aid(%d)\n", __FUNCTION__, Aid)); +- return TRUE; +- } +- +- TpcReqInsert(pAd, TpcReqToken); +- +- EnqueueTPCReq(pAd, pAd->MacTab.Content[Aid].Addr, TpcReqToken); +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/config.mk b/drivers/staging/rt3090/config.mk +deleted file mode 100644 +index 4c90c40..0000000 +--- a/drivers/staging/rt3090/config.mk ++++ /dev/null +@@ -1,187 +0,0 @@ +-# Support ATE function +-HAS_ATE=y +- +-# Support 28xx QA ATE function +-HAS_28xx_QA=n +- +- +-HAS_NINTENDO=n +- +-# Support LLTD function +-HAS_LLTD=n +- +-# Support WDS function +-HAS_WDS=n +- +-# Support AP-Client function +-HAS_APCLI=n +- +-# Support Wpa_Supplicant +-HAS_WPA_SUPPLICANT=y +- +-# Support Native WpaSupplicant for Network Maganger +-HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y +- +-#Support Net interface block while Tx-Sw queue full +-HAS_BLOCK_NET_IF=n +- +-#Support IGMP-Snooping function. +-HAS_IGMP_SNOOP_SUPPORT=n +- +-#Support DFS function +-HAS_DFS_SUPPORT=n +- +-#Support Carrier-Sense function +-HAS_CS_SUPPORT=n +- +-# Support for STA Ethernet Converter +-HAS_ETH_CONVERT_SUPPORT=n +- +-# Support user specific transmit rate of Multicast packet. +-HAS_MCAST_RATE_SPECIFIC_SUPPORT=n +- +-# Support for Multiple Cards +-HAS_MC_SUPPORT=n +- +-#Support for PCI-MSI +-HAS_MSI_SUPPORT=n +- +- +-#Support for IEEE802.11e DLS +-HAS_QOS_DLS_SUPPORT=n +- +-#Support for EXT_CHANNEL +-HAS_EXT_BUILD_CHANNEL_LIST=n +- +-#Support for IDS +-HAS_IDS_SUPPORT=n +- +- +-#Support for Net-SNMP +-HAS_SNMP_SUPPORT=n +- +-#Support features of 802.11n Draft3 +-HAS_DOT11N_DRAFT3_SUPPORT=n +- +-#Support features of Single SKU. +-HAS_SINGLE_SKU_SUPPORT=n +- +-#Support features of 802.11n +-HAS_DOT11_N_SUPPORT=y +- +- +- +-#Support for 2860/2880 co-exist +-HAS_RT2880_RT2860_COEXIST=n +- +-HAS_KTHREAD_SUPPORT=n +- +- +-#Support for Auto channel select enhance +-HAS_AUTO_CH_SELECT_ENHANCE=n +- +-#Support bypass bridge +-HAS_BG_FT_SUPPORT=n +- +-#Support Antenna Diversity +-HAS_ANTENNA_DIVERSITY_SUPPORT=y +-################################################# +- +-WFLAGS := -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT -DLINUX -Wall -Wstrict-prototypes -Wno-trigraphs -Wpointer-sign +- +-ifeq ($(HAS_KTHREAD_SUPPORT),y) +-WFLAGS += -DKTHREAD_SUPPORT +-endif +- +- +-################################################# +- +-# config for STA mode +- +-WFLAGS += -DCONFIG_STA_SUPPORT -DDBG +- +-ifeq ($(HAS_WPA_SUPPLICANT),y) +-WFLAGS += -DWPA_SUPPLICANT_SUPPORT +-ifeq ($(HAS_NATIVE_WPA_SUPPLICANT_SUPPORT),y) +-WFLAGS += -DNATIVE_WPA_SUPPLICANT_SUPPORT +-endif +-endif +- +- +-ifeq ($(HAS_ETH_CONVERT_SUPPORT), y) +-WFLAGS += -DETH_CONVERT_SUPPORT -DMAT_SUPPORT +-endif +- +-ifeq ($(HAS_ATE),y) +-WFLAGS += -DRALINK_ATE +-ifeq ($(HAS_28xx_QA),y) +-WFLAGS += -DRALINK_28xx_QA +-endif +-endif +- +- +-ifeq ($(HAS_SNMP_SUPPORT),y) +-WFLAGS += -DSNMP_SUPPORT +-endif +- +-ifeq ($(HAS_QOS_DLS_SUPPORT),y) +-WFLAGS += -DQOS_DLS_SUPPORT +-endif +- +-ifeq ($(HAS_DOT11_N_SUPPORT),y) +-WFLAGS += -DDOT11_N_SUPPORT +-endif +- +-ifeq ($(HAS_CS_SUPPORT),y) +-WFLAGS += -DCARRIER_DETECTION_SUPPORT +-endif +- +-ifeq ($(HAS_ANTENNA_DIVERSITY_SUPPORT),y) +-WFLAGS += -DANT_DIVERSITY_SUPPORT +-endif +- +-################################################# +- +-################################################# +- +-# +-# Common compiler flag +-# +- +- +- +- +- +-ifeq ($(HAS_EXT_BUILD_CHANNEL_LIST),y) +-WFLAGS += -DEXT_BUILD_CHANNEL_LIST +-endif +- +-ifeq ($(HAS_IDS_SUPPORT),y) +-WFLAGS += -DIDS_SUPPORT +-endif +- +- +-################################################# +-# ChipSet specific definitions. +-# +-WFLAGS +=-DRTMP_MAC_PCI -DRT30xx -DRT3090 -DRTMP_PCI_SUPPORT -DRTMP_RF_RW_SUPPORT -DRTMP_EFUSE_SUPPORT +-################################################# +- +- +-ifeq ($(HAS_BLOCK_NET_IF),y) +-WFLAGS += -DBLOCK_NET_IF +-endif +- +-ifeq ($(HAS_DFS_SUPPORT),y) +-WFLAGS += -DDFS_SUPPORT +-endif +- +-ifeq ($(HAS_MC_SUPPORT),y) +-WFLAGS += -DMULTIPLE_CARD_SUPPORT +-endif +- +-ifeq ($(HAS_LLTD),y) +-WFLAGS += -DLLTD_SUPPORT +-endif +- +-EXTRA_CFLAGS := $(WFLAGS) +diff --git a/drivers/staging/rt3090/crypt_hmac.h b/drivers/staging/rt3090/crypt_hmac.h +deleted file mode 100644 +index 557ca73..0000000 +--- a/drivers/staging/rt3090/crypt_hmac.h ++++ /dev/null +@@ -1,81 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- crypt_hmac.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Eddy 2008/11/24 Create HMAC-SHA1, HMAC-SHA256 +-*/ +- +-#ifndef __CRYPT_HMAC_H__ +-#define __CRYPT_HMAC_H__ +- +-#ifdef CRYPT_TESTPLAN +-#include "crypt_testplan.h" +-#else +-#include "rt_config.h" +-#endif /* CRYPT_TESTPLAN */ +- +-#ifdef SHA1_SUPPORT +-#define HMAC_SHA1_SUPPORT +-VOID HMAC_SHA1 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); +-#endif /* SHA1_SUPPORT */ +- +-#ifdef SHA256_SUPPORT +-#define HMAC_SHA256_SUPPORT +-VOID HMAC_SHA256 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); +-#endif /* SHA256_SUPPORT */ +- +-#ifdef MD5_SUPPORT +-#define HMAC_MD5_SUPPORT +-VOID HMAC_MD5 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); +-#endif /* MD5_SUPPORT */ +- +-#endif /* __CRYPT_HMAC_H__ */ +diff --git a/drivers/staging/rt3090/crypt_md5.h b/drivers/staging/rt3090/crypt_md5.h +deleted file mode 100644 +index 7ee3f42..0000000 +--- a/drivers/staging/rt3090/crypt_md5.h ++++ /dev/null +@@ -1,78 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- crypt_md5.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Eddy 2008/11/24 Create md5 +-*/ +- +-#ifndef __CRYPT_MD5_H__ +-#define __CRYPT_MD5_H__ +- +-#ifdef CRYPT_TESTPLAN +-#include "crypt_testplan.h" +-#else +-#include "rt_config.h" +-#endif /* CRYPT_TESTPLAN */ +- +-/* Algorithm options */ +-#define MD5_SUPPORT +- +-#ifdef MD5_SUPPORT +-#define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ +-typedef struct { +- UINT32 HashValue[4]; +- UINT64 MessageLen; +- UINT8 Block[MD5_BLOCK_SIZE]; +- UINT BlockLen; +-} MD5_CTX_STRUC, *PMD5_CTX_STRUC; +- +-VOID MD5_Init ( +- IN MD5_CTX_STRUC *pMD5_CTX); +-VOID MD5_Hash ( +- IN MD5_CTX_STRUC *pMD5_CTX); +-VOID MD5_Append ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID MD5_End ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_MD5 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); +-#endif /* MD5_SUPPORT */ +- +-#endif /* __CRYPT_MD5_H__ */ +diff --git a/drivers/staging/rt3090/crypt_sha2.h b/drivers/staging/rt3090/crypt_sha2.h +deleted file mode 100644 +index 85c0403..0000000 +--- a/drivers/staging/rt3090/crypt_sha2.h ++++ /dev/null +@@ -1,107 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- crypt_sha2.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Eddy 2008/11/24 Create SHA1 +- Eddy 2008/07/23 Create SHA256 +-*/ +- +-#ifndef __CRYPT_SHA2_H__ +-#define __CRYPT_SHA2_H__ +- +-#ifdef CRYPT_TESTPLAN +-#include "crypt_testplan.h" +-#else +-#include "rt_config.h" +-#endif /* CRYPT_TESTPLAN */ +- +-/* Algorithm options */ +-#define SHA1_SUPPORT +-#define SHA256_SUPPORT +- +-#ifdef SHA1_SUPPORT +-#define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ +-typedef struct _SHA1_CTX_STRUC { +- UINT32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ +- UINT64 MessageLen; /* total size */ +- UINT8 Block[SHA1_BLOCK_SIZE]; +- UINT BlockLen; +-} SHA1_CTX_STRUC, *PSHA1_CTX_STRUC; +- +-VOID SHA1_Init ( +- IN SHA1_CTX_STRUC *pSHA_CTX); +-VOID SHA1_Hash ( +- IN SHA1_CTX_STRUC *pSHA_CTX); +-VOID SHA1_Append ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID SHA1_End ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_SHA1 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); +-#endif /* SHA1_SUPPORT */ +- +-#ifdef SHA256_SUPPORT +-#define SHA256_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define SHA256_DIGEST_SIZE 32 /* 256 bits = 32 bytes */ +-typedef struct _SHA256_CTX_STRUC { +- UINT32 HashValue[8]; /* 8 = (SHA256_DIGEST_SIZE / 32) */ +- UINT64 MessageLen; /* total size */ +- UINT8 Block[SHA256_BLOCK_SIZE]; +- UINT BlockLen; +-} SHA256_CTX_STRUC, *PSHA256_CTX_STRUC; +- +-VOID SHA256_Init ( +- IN SHA256_CTX_STRUC *pSHA_CTX); +-VOID SHA256_Hash ( +- IN SHA256_CTX_STRUC *pSHA_CTX); +-VOID SHA256_Append ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID SHA256_End ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_SHA256 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); +-#endif /* SHA256_SUPPORT */ +- +-#endif /* __CRYPT_SHA2_H__ */ +diff --git a/drivers/staging/rt3090/dfs.h b/drivers/staging/rt3090/dfs.h +deleted file mode 100644 +index 506468e..0000000 +--- a/drivers/staging/rt3090/dfs.h ++++ /dev/null +@@ -1,137 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- dfs.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi 03-12-2007 created +-*/ +- +-#define RADAR_PULSE 1 +-#define RADAR_WIDTH 2 +- +-#define WIDTH_RD_IDLE 0 +-#define WIDTH_RD_CHECK 1 +- +- +- +-/************************************************************************* +- * +- * DFS Radar related definitions. +- * +- ************************************************************************/ +-//#define CARRIER_DETECT_TASK_NUM 6 +-//#define RADAR_DETECT_TASK_NUM 7 +- +-// McuRadarState && McuCarrierState for 2880-SW-MCU +-#define FREE_FOR_TX 0 +-#define WAIT_CTS_BEING_SENT 1 +-#define DO_DETECTION 2 +- +-// McuRadarEvent +-#define RADAR_EVENT_CTS_SENT 0x01 // Host signal MCU that CTS has been sent +-#define RADAR_EVENT_CTS_CARRIER_SENT 0x02 // Host signal MCU that CTS has been sent (Carrier) +-#define RADAR_EVENT_RADAR_DETECTING 0x04 // Radar detection is on going, carrier detection hold back +-#define RADAR_EVENT_CARRIER_DETECTING 0x08 // Carrier detection is on going, radar detection hold back +-#define RADAR_EVENT_WIDTH_RADAR 0x10 // BBP == 2 radar detected +-#define RADAR_EVENT_CTS_KICKED 0x20 // Radar detection need to sent double CTS, first CTS sent +- +-// McuRadarCmd +-#define DETECTION_STOP 0 +-#define RADAR_DETECTION 1 +-#define CARRIER_DETECTION 2 +- +- +- +-#ifdef TONE_RADAR_DETECT_SUPPORT +-INT Set_CarrierCriteria_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); +-int Set_CarrierReCheck_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); +-INT Set_CarrierStopCheck_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); +-void NewCarrierDetectionStart(PRTMP_ADAPTER pAd); +-void RTMPHandleRadarInterrupt(PRTMP_ADAPTER pAd); +-VOID CSAsicDisableSync(IN PRTMP_ADAPTER pAd); +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +- +-VOID BbpRadarDetectionStart( +- IN PRTMP_ADAPTER pAd); +- +-VOID BbpRadarDetectionStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID RadarDetectionStart( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN CTS_Protect, +- IN UINT8 CTSPeriod); +- +-VOID RadarDetectionStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID RadarDetectPeriodic( +- IN PRTMP_ADAPTER pAd); +- +- +-BOOLEAN RadarChannelCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ch); +- +-ULONG JapRadarType( +- IN PRTMP_ADAPTER pAd); +- +-ULONG RTMPBbpReadRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +-ULONG RTMPReadRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPCleanRadarDuration( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPPrepareRDCTSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN ULONG Duration, +- IN UCHAR RTSRate, +- IN ULONG CTSBaseAddr, +- IN UCHAR FrameGap); +- +-VOID RTMPPrepareRadarDetectParams( +- IN PRTMP_ADAPTER pAd); +- +- +-INT Set_ChMovingTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_LongPulseRadarTh_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +diff --git a/drivers/staging/rt3090/eeprom.h b/drivers/staging/rt3090/eeprom.h +deleted file mode 100644 +index ee0e807..0000000 +--- a/drivers/staging/rt3090/eeprom.h ++++ /dev/null +@@ -1,82 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- eeprom.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +-#ifndef __EEPROM_H__ +-#define __EEPROM_H__ +- +- +- +-#ifdef RTMP_PCI_SUPPORT +-/************************************************************************* +- * Public function declarations for prom-based chipset +- ************************************************************************/ +-int rtmp_ee_prom_read16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT USHORT *pValue); +- +-int rtmp_ee_prom_write16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT value); +-#endif // RTMP_PCI_SUPPORT // +- +- +- +- +- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +-int rtmp_ee_efuse_read16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- OUT USHORT *pValue); +- +-int rtmp_ee_efuse_write16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT data); +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +- +-/************************************************************************* +- * Public function declarations for prom operation callback functions setting +- ************************************************************************/ +-INT RtmpChipOpsEepromHook( +- IN RTMP_ADAPTER *pAd, +- IN INT infType); +- +-#endif // __EEPROM_H__ // +diff --git a/drivers/staging/rt3090/igmp_snoop.h b/drivers/staging/rt3090/igmp_snoop.h +deleted file mode 100644 +index 63f9692..0000000 +--- a/drivers/staging/rt3090/igmp_snoop.h ++++ /dev/null +@@ -1,152 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- igmp_snoop.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +- +-#ifndef __RTMP_IGMP_SNOOP_H__ +-#define __RTMP_IGMP_SNOOP_H__ +- +-#include "link_list.h" +- +-#define IGMP_PROTOCOL_DESCRIPTOR 0x02 +-#define IGMP_V1_MEMBERSHIP_REPORT 0x12 +-#define IGMP_V2_MEMBERSHIP_REPORT 0x16 +-#define IGMP_LEAVE_GROUP 0x17 +-#define IGMP_V3_MEMBERSHIP_REPORT 0x22 +- +-#define MLD_V1_LISTENER_REPORT 131 +-#define MLD_V1_LISTENER_DONE 132 +-#define MLD_V2_LISTERNER_REPORT 143 +- +-#define IGMPMAC_TB_ENTRY_AGEOUT_TIME 120 * OS_HZ +- +-#define MULTICAST_ADDR_HASH_INDEX(Addr) (MAC_ADDR_HASH(Addr) % (MAX_LEN_OF_MULTICAST_FILTER_HASH_TABLE)) +- +-#define IS_MULTICAST_MAC_ADDR(Addr) ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff)) +-#define IS_BROADCAST_MAC_ADDR(Addr) ((((Addr[0]) & 0xff) == 0xff)) +- +-VOID MulticastFilterTableInit( +- IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable); +- +-VOID MultiCastFilterTableReset( +- IN PMULTICAST_FILTER_TABLE *ppMulticastFilterTable); +- +-BOOLEAN MulticastFilterTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pGrpId, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV dev, +- IN MulticastFilterEntryType type); +- +-BOOLEAN MulticastFilterTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pGrpId, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV dev); +- +-PMULTICAST_FILTER_TABLE_ENTRY MulticastFilterTableLookup( +- IN PMULTICAST_FILTER_TABLE pMulticastFilterTable, +- IN PUCHAR pAddr, +- IN PNET_DEV dev); +- +-BOOLEAN isIgmpPkt( +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pIpHeader); +- +-VOID IGMPSnooping( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pSrcMacAddr, +- IN PUCHAR pIpHeader, +- IN PNET_DEV pDev); +- +-BOOLEAN isMldPkt( +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pIpHeader, +- OUT UINT8 *pProtoType, +- OUT PUCHAR *pMldHeader); +- +-VOID MLDSnooping( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDstMacAddr, +- IN PUCHAR pSrcMacAddr, +- IN PUCHAR pIpHeader, +- IN PNET_DEV pDev); +- +-UCHAR IgmpMemberCnt( +- IN PLIST_HEADER pList); +- +-VOID IgmpGroupDelMembers( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pMemberAddr, +- IN PNET_DEV pDev); +- +-INT Set_IgmpSn_Enable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_IgmpSn_AddEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_IgmpSn_DelEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_IgmpSn_TabDisplay_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-void rtmp_read_igmp_snoop_from_file( +- IN PRTMP_ADAPTER pAd, +- PSTRING tmpbuf, +- PSTRING buffer); +- +-NDIS_STATUS IgmpPktInfoQuery( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrcBufVA, +- IN PNDIS_PACKET pPacket, +- IN UCHAR apidx, +- OUT BOOLEAN *pInIgmpGroup, +- OUT PMULTICAST_FILTER_TABLE_ENTRY *ppGroupEntry); +- +-NDIS_STATUS IgmpPktClone( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR QueIdx, +- IN PMULTICAST_FILTER_TABLE_ENTRY pGroupEntry); +- +-#endif /* __RTMP_IGMP_SNOOP_H__ */ +diff --git a/drivers/staging/rt3090/ipv6.h b/drivers/staging/rt3090/ipv6.h +deleted file mode 100644 +index c34a5f2..0000000 +--- a/drivers/staging/rt3090/ipv6.h ++++ /dev/null +@@ -1,215 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- ipv6.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __IPV6_HDR_H_ +-#define __IPV6_HDR_H_ +- +-#define IPV6_ADDR_LEN 16 +-#define IPV6_HDR_LEN 40 +- +-// IPv6 address definition +-#define IPV6_LINK_LOCAL_ADDR_PREFIX 0xFE8 +-#define IPV6_SITE_LOCAL_ADDR_PREFIX 0xFEC +-#define IPV6_LOCAL_ADDR_PREFIX 0xFE8 +-#define IPV6_MULTICAST_ADDR_PREFIX 0xFF +-#define IPV6_LOOPBACK_ADDR 0x1 +-#define IPV6_UNSPECIFIED_ADDR 0x0 +- +-// defined as sequence in IPv6 header +-#define IPV6_NEXT_HEADER_HOP_BY_HOP 0x00 // 0 +-#define IPV6_NEXT_HEADER_DESTINATION 0x3c // 60 +-#define IPV6_NEXT_HEADER_ROUTING 0x2b // 43 +-#define IPV6_NEXT_HEADER_FRAGMENT 0x2c // 44 +-#define IPV6_NEXT_HEADER_AUTHENTICATION 0x33 // 51 +-#define IPV6_NEXT_HEADER_ENCAPSULATION 0x32 // 50, RFC-2406 +-#define IPV6_NEXT_HEADER_NONE 0x3b // 59 +- +-#define IPV6_NEXT_HEADER_TCP 0x06 +-#define IPV6_NEXT_HEADER_UDP 0x11 +-#define IPV6_NEXT_HEADER_ICMPV6 0x3a +- +-// ICMPv6 msg type definition +-#define ICMPV6_MSG_TYPE_ROUTER_SOLICITATION 0x85 // 133 +-#define ROUTER_SOLICITATION_FIXED_LEN 8 +- +-#define ICMPV6_MSG_TYPE_ROUTER_ADVERTISEMENT 0x86 // 134 +-#define ROUTER_ADVERTISEMENT_FIXED_LEN 16 +- +-#define ICMPV6_MSG_TYPE_NEIGHBOR_SOLICITATION 0x87 // 135 +-#define NEIGHBOR_SOLICITATION_FIXED_LEN 24 +- +-#define ICMPV6_MSG_TYPE_NEIGHBOR_ADVERTISEMENT 0x88 // 136 +-#define NEIGHBOR_ADVERTISEMENT_FIXED_LEN 24 +- +-#define ICMPV6_MSG_TYPE_REDIRECT 0x89 // 137 +-#define REDIRECT_FIXED_LEN 40 +- +-/* IPv6 Address related structures */ +-typedef struct rt_ipv6_addr_ +-{ +- union +- { +- UCHAR ipv6Addr8[16]; +- USHORT ipv6Addr16[8]; +- UINT32 ipv6Addr32[4]; +- }addr; +-#define ipv6_addr addr.ipv6Addr8 +-#define ipv6_addr16 addr.ipv6Addr16 +-#define ipv6_addr32 addr.ipv6Addr32 +-}RT_IPV6_ADDR, *PRT_IPV6_ADDR; +- +- +-#define PRINT_IPV6_ADDR(ipv6Addr) \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[0]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[1]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[2]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[3]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[4]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[5]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[6]), \ +- OS_NTOHS((ipv6Addr).ipv6_addr16[7]) +- +- +-/*IPv6 Header related structures */ +-typedef struct PACKED _rt_ipv6_hdr_ +-{ +- UINT32 ver:4, +- trafficClass:8, +- flowLabel:20; +- USHORT payload_len; +- UCHAR nextHdr; +- UCHAR hopLimit; +- RT_IPV6_ADDR srcAddr; +- RT_IPV6_ADDR dstAddr; +-}RT_IPV6_HDR, *PRT_IPV6_HDR; +- +- +-typedef struct PACKED _rt_ipv6_ext_hdr_ +-{ +- UCHAR nextProto; // Indicate the protocol type of next extension header. +- UCHAR extHdrLen; // optional field for msg length of this extension header which didn't include the first "nextProto" field. +- UCHAR octets[1]; // hook to extend header message body. +-}RT_IPV6_EXT_HDR, *PRT_IPV6_EXT_HDR; +- +- +-/* ICMPv6 related structures */ +-typedef struct PACKED _rt_ipv6_icmpv6_hdr_ +-{ +- UCHAR type; +- UCHAR code; +- USHORT chksum; +- UCHAR octets[1]; //hook to extend header message body. +-}RT_ICMPV6_HDR, *PRT_ICMPV6_HDR; +- +- +-typedef struct PACKED _rt_icmp6_option_hdr_ +-{ +- UCHAR type; +- UCHAR len; +- UCHAR octet[1]; +-}RT_ICMPV6_OPTION_HDR, *PRT_ICMPV6_OPTION_HDR; +- +-typedef enum{ +-// Defined ICMPv6 Option Types. +- TYPE_SRC_LL_ADDR = 1, +- TYPE_TGT_LL_ADDR = 2, +- TYPE_PREFIX_INFO = 3, +- TYPE_REDIRECTED_HDR = 4, +- TYPE_MTU = 5, +-}ICMPV6_OPTIONS_TYPE_DEF; +- +- +-static inline BOOLEAN IPv6ExtHdrHandle( +- RT_IPV6_EXT_HDR *pExtHdr, +- UCHAR *pProto, +- UINT32 *pOffset) +-{ +- UCHAR nextProto = 0xff; +- UINT32 extLen = 0; +- BOOLEAN status = TRUE; +- +- //printk("%s(): parsing the Extension Header with Protocol(0x%x):\n", __FUNCTION__, *pProto); +- switch (*pProto) +- { +- case IPV6_NEXT_HEADER_HOP_BY_HOP: +- // IPv6ExtHopByHopHandle(); +- nextProto = pExtHdr->nextProto; +- extLen = (pExtHdr->extHdrLen + 1) * 8; +- break; +- +- case IPV6_NEXT_HEADER_DESTINATION: +- // IPv6ExtDestHandle(); +- nextProto = pExtHdr->nextProto; +- extLen = (pExtHdr->extHdrLen + 1) * 8; +- break; +- +- case IPV6_NEXT_HEADER_ROUTING: +- // IPv6ExtRoutingHandle(); +- nextProto = pExtHdr->nextProto; +- extLen = (pExtHdr->extHdrLen + 1) * 8; +- break; +- +- case IPV6_NEXT_HEADER_FRAGMENT: +- // IPv6ExtFragmentHandle(); +- nextProto = pExtHdr->nextProto; +- extLen = 8; // The Fragment header length is fixed to 8 bytes. +- break; +- +- case IPV6_NEXT_HEADER_AUTHENTICATION: +- // IPV6_NEXT_HEADER_ENCAPSULATION: +- /* +- TODO: Not support. For encryption issue. +- */ +- nextProto = 0xFF; +- status = FALSE; +- break; +- +- default: +- nextProto = 0xFF; +- status = FALSE; +- break; +- } +- +- *pProto = nextProto; +- *pOffset += extLen; +- //printk("%s(): nextProto = 0x%x!, offset=0x%x!\n", __FUNCTION__, nextProto, offset); +- +- return status; +- +-} +- +-#endif // __IPV6_HDR_H_ // +diff --git a/drivers/staging/rt3090/link_list.h b/drivers/staging/rt3090/link_list.h +deleted file mode 100644 +index 205b610..0000000 +--- a/drivers/staging/rt3090/link_list.h ++++ /dev/null +@@ -1,133 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __LINK_LIST_H__ +-#define __LINK_LIST_H__ +- +-typedef struct _LIST_ENTRY +-{ +- struct _LIST_ENTRY *pNext; +-} LIST_ENTRY, *PLIST_ENTRY; +- +-typedef struct _LIST_HEADR +-{ +- PLIST_ENTRY pHead; +- PLIST_ENTRY pTail; +- UCHAR size; +-} LIST_HEADER, *PLIST_HEADER; +- +-static inline VOID initList( +- IN PLIST_HEADER pList) +-{ +- pList->pHead = pList->pTail = NULL; +- pList->size = 0; +- return; +-} +- +-static inline VOID insertTailList( +- IN PLIST_HEADER pList, +- IN PLIST_ENTRY pEntry) +-{ +- pEntry->pNext = NULL; +- if (pList->pTail) +- pList->pTail->pNext = pEntry; +- else +- pList->pHead = pEntry; +- pList->pTail = pEntry; +- pList->size++; +- +- return; +-} +- +-static inline PLIST_ENTRY removeHeadList( +- IN PLIST_HEADER pList) +-{ +- PLIST_ENTRY pNext; +- PLIST_ENTRY pEntry; +- +- pEntry = pList->pHead; +- if (pList->pHead != NULL) +- { +- pNext = pList->pHead->pNext; +- pList->pHead = pNext; +- if (pNext == NULL) +- pList->pTail = NULL; +- pList->size--; +- } +- return pEntry; +-} +- +-static inline int getListSize( +- IN PLIST_HEADER pList) +-{ +- return pList->size; +-} +- +-static inline PLIST_ENTRY delEntryList( +- IN PLIST_HEADER pList, +- IN PLIST_ENTRY pEntry) +-{ +- PLIST_ENTRY pCurEntry; +- PLIST_ENTRY pPrvEntry; +- +- if(pList->pHead == NULL) +- return NULL; +- +- if(pEntry == pList->pHead) +- { +- pCurEntry = pList->pHead; +- pList->pHead = pCurEntry->pNext; +- +- if(pList->pHead == NULL) +- pList->pTail = NULL; +- +- pList->size--; +- return pCurEntry; +- } +- +- pPrvEntry = pList->pHead; +- pCurEntry = pPrvEntry->pNext; +- while(pCurEntry != NULL) +- { +- if (pEntry == pCurEntry) +- { +- pPrvEntry->pNext = pCurEntry->pNext; +- +- if(pEntry == pList->pTail) +- pList->pTail = pPrvEntry; +- +- pList->size--; +- break; +- } +- pPrvEntry = pCurEntry; +- pCurEntry = pPrvEntry->pNext; +- } +- +- return pCurEntry; +-} +- +-#endif // ___LINK_LIST_H__ // +diff --git a/drivers/staging/rt3090/mac_pci.h b/drivers/staging/rt3090/mac_pci.h +deleted file mode 100644 +index bad04d4..0000000 +--- a/drivers/staging/rt3090/mac_pci.h ++++ /dev/null +@@ -1,454 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mac_pci.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __MAC_PCI_H__ +-#define __MAC_PCI_H__ +- +-#include "rtmp_type.h" +-#include "rtmp_mac.h" +-#include "rtmp_phy.h" +-#include "rtmp_iface.h" +-#include "rtmp_dot11.h" +- +- +-// +-// Device ID & Vendor ID related definitions, +-// NOTE: you should not add the new VendorID/DeviceID here unless you not sure it belongs to what chip. +-// +-#define NIC_PCI_VENDOR_ID 0x1814 +-#define PCIBUS_INTEL_VENDOR 0x8086 +- +-#if !defined(PCI_CAP_ID_EXP) +-#define PCI_CAP_ID_EXP 0x10 +-#endif +-#if !defined(PCI_EXP_LNKCTL) +-#define PCI_EXP_LNKCTL 0x10 +-#endif +-#if !defined(PCI_CLASS_BRIDGE_PCI) +-#define PCI_CLASS_BRIDGE_PCI 0x0604 +-#endif +- +- +- +- +- +-#define TXINFO_SIZE 0 +-#define RTMP_PKT_TAIL_PADDING 0 +-#define fRTMP_ADAPTER_NEED_STOP_TX 0 +- +-#define AUX_CTRL 0x10c +- +-// +-// TX descriptor format, Tx ring, Mgmt Ring +-// +-#ifdef RT_BIG_ENDIAN +-typedef struct PACKED _TXD_STRUC { +- // Word 0 +- UINT32 SDPtr0; +- // Word 1 +- UINT32 DMADONE:1; +- UINT32 LastSec0:1; +- UINT32 SDLen0:14; +- UINT32 Burst:1; +- UINT32 LastSec1:1; +- UINT32 SDLen1:14; +- // Word 2 +- UINT32 SDPtr1; +- // Word 3 +- UINT32 ICO:1; +- UINT32 UCO:1; +- UINT32 TCO:1; +- UINT32 rsv:2; +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 rsv2:24; +-} TXD_STRUC, *PTXD_STRUC; +-#else +-typedef struct PACKED _TXD_STRUC { +- // Word 0 +- UINT32 SDPtr0; +- // Word 1 +- UINT32 SDLen1:14; +- UINT32 LastSec1:1; +- UINT32 Burst:1; +- UINT32 SDLen0:14; +- UINT32 LastSec0:1; +- UINT32 DMADONE:1; +- //Word2 +- UINT32 SDPtr1; +- //Word3 +- UINT32 rsv2:24; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 rsv:2; +- UINT32 TCO:1; // +- UINT32 UCO:1; // +- UINT32 ICO:1; // +-} TXD_STRUC, *PTXD_STRUC; +-#endif +- +- +-// +-// Rx descriptor format, Rx Ring +-// +-#ifdef RT_BIG_ENDIAN +-typedef struct PACKED _RXD_STRUC{ +- // Word 0 +- UINT32 SDP0; +- // Word 1 +- UINT32 DDONE:1; +- UINT32 LS0:1; +- UINT32 SDL0:14; +- UINT32 Rsv:2; +- UINT32 SDL1:14; +- // Word 2 +- UINT32 SDP1; +- // Word 3 +- UINT32 Rsv1:13; +- UINT32 PlcpRssil:1;// To be moved +- UINT32 PlcpSignal:1; // To be moved +- UINT32 Decrypted:1; // this frame is being decrypted. +- UINT32 AMPDU:1; +- UINT32 L2PAD:1; +- UINT32 RSSI:1; +- UINT32 HTC:1; +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. obsolete. +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 Crc:1; // 1: CRC error +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 FRAG:1; +- UINT32 NULLDATA:1; +- UINT32 DATA:1; +- UINT32 BA:1; +- +-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; +-#else +-typedef struct PACKED _RXD_STRUC{ +- // Word 0 +- UINT32 SDP0; +- // Word 1 +- UINT32 SDL1:14; +- UINT32 Rsv:2; +- UINT32 SDL0:14; +- UINT32 LS0:1; +- UINT32 DDONE:1; +- // Word 2 +- UINT32 SDP1; +- // Word 3 +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; +- UINT32 Decrypted:1; // this frame is being decrypted. +- UINT32 PlcpSignal:1; // To be moved +- UINT32 PlcpRssil:1;// To be moved +- UINT32 Rsv1:13; +-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; +-#endif +- +-#ifdef BIG_ENDIAN +-typedef union _TX_ATTENUATION_CTRL_STRUC +-{ +- struct +- { +- ULONG Reserve1:20; +- ULONG PCIE_PHY_TX_ATTEN_EN:1; +- ULONG PCIE_PHY_TX_ATTEN_VALUE:3; +- ULONG Reserve2:7; +- ULONG RF_ISOLATION_ENABLE:1; +- } field; +- +- ULONG word; +-} TX_ATTENUATION_CTRL_STRUC, *PTX_ATTENUATION_CTRL_STRUC; +-#else +-typedef union _TX_ATTENUATION_CTRL_STRUC { +- struct +- { +- ULONG RF_ISOLATION_ENABLE:1; +- ULONG Reserve2:7; +- ULONG PCIE_PHY_TX_ATTEN_VALUE:3; +- ULONG PCIE_PHY_TX_ATTEN_EN:1; +- ULONG Reserve1:20; +- } field; +- +- ULONG word; +-} TX_ATTENUATION_CTRL_STRUC, *PTX_ATTENUATION_CTRL_STRUC; +-#endif +-/* ----------------- EEPROM Related MACRO ----------------- */ +- +-// 8051 firmware image for RT2860 - base address = 0x4000 +-#define FIRMWARE_IMAGE_BASE 0x2000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte +- +- +-/* ----------------- Frimware Related MACRO ----------------- */ +-#define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ +- do{ \ +- ULONG _i, _firm; \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x10000); \ +- \ +- for(_i=0; _i<_FwLen; _i+=4) \ +- { \ +- _firm = _pFwImage[_i] + \ +- (_pFwImage[_i+3] << 24) + \ +- (_pFwImage[_i+2] << 16) + \ +- (_pFwImage[_i+1] << 8); \ +- RTMP_IO_WRITE32(_pAd, FIRMWARE_IMAGE_BASE + _i, _firm); \ +- } \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00000); \ +- RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x00001); \ +- \ +- /* initialize BBP R/W access agent */ \ +- RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, 0); \ +- RTMP_IO_WRITE32(_pAd, H2M_MAILBOX_CSR, 0); \ +- }while(0) +- +- +-/* ----------------- TX Related MACRO ----------------- */ +-#define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) +-#define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) +- +- +-#define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ +- ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ +-#define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ +- do{}while(0) +- +-#define NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, freeNum, _TxFrameType) \ +- (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) +- //(((freeNum) != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 1 /*0*/)) +- +- +-#define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ +- RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) +- +-#define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ +- /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber)*/ +- +-#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ +- RtmpPCI_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) +- +-#define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ +- RtmpPCI_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) +- +-#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ +- RtmpPCI_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) +- +-#define HAL_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) \ +- RtmpPCI_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) +- +-#define HAL_LastTxIdx(_pAd, _QueIdx,_LastTxIdx) \ +- /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx)*/ +- +-#define HAL_KickOutTx(_pAd, _pTxBlk, _QueIdx) \ +- RTMP_IO_WRITE32((_pAd), TX_CTX_IDX0+((_QueIdx)*0x10), (_pAd)->TxRing[(_QueIdx)].TxCpuIdx) +-/* RtmpPCIDataKickOut(_pAd, _pTxBlk, _QueIdx)*/ +- +-#define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ +- MiniportMMRequest(_pAd, _QueIdx, _pNullFrame, _frameLen) +- +-#define GET_TXRING_FREENO(_pAd, _QueIdx) \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx > _pAd->TxRing[_QueIdx].TxCpuIdx) ? \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx - _pAd->TxRing[_QueIdx].TxCpuIdx - 1) \ +- : \ +- (_pAd->TxRing[_QueIdx].TxSwFreeIdx + TX_RING_SIZE - _pAd->TxRing[_QueIdx].TxCpuIdx - 1); +- +- +-#define GET_MGMTRING_FREENO(_pAd) \ +- (_pAd->MgmtRing.TxSwFreeIdx > _pAd->MgmtRing.TxCpuIdx) ? \ +- (_pAd->MgmtRing.TxSwFreeIdx - _pAd->MgmtRing.TxCpuIdx - 1) \ +- : \ +- (_pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - _pAd->MgmtRing.TxCpuIdx - 1); +- +- +-/* ----------------- RX Related MACRO ----------------- */ +- +- +-/* ----------------- ASIC Related MACRO ----------------- */ +-// reset MAC of a station entry to 0x000000000000 +-#define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ +- AsicDelWcidTab(pAd, Wcid); +- +-// add this entry into ASIC RX WCID search table +-#define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ +- AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); +- +-// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +-// Set MAC register value according operation mode +-#define RTMP_UPDATE_PROTECT(pAd) \ +- AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0); +-// end johnli +- +-// remove Pair-wise key material from ASIC +-#define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) \ +- AsicRemovePairwiseKeyEntry(pAd, BssIdx, (UCHAR)Wcid); +- +-// add Client security information into ASIC WCID table and IVEIV table +-#define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ +- RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, pEntry); +- +-#define RTMP_SECURITY_KEY_ADD(pAd, apidx, KeyID, pEntry) \ +- { /* update pairwise key information to ASIC Shared Key Table */ \ +- AsicAddSharedKeyEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, \ +- pAd->SharedKey[apidx][KeyID].Key, \ +- pAd->SharedKey[apidx][KeyID].TxMic, \ +- pAd->SharedKey[apidx][KeyID].RxMic); \ +- /* update ASIC WCID attribute table and IVEIV table */ \ +- RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ +- pAd->SharedKey[apidx][KeyID].CipherAlg, \ +- pEntry); } +- +- +-// Insert the BA bitmap to ASIC for the Wcid entry +-#define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ +- do{ \ +- UINT32 _Value = 0, _Offset; \ +- _Offset = MAC_WCID_BASE + (_Aid) * HW_WCID_ENTRY_SIZE + 4; \ +- RTMP_IO_READ32((_pAd), _Offset, &_Value);\ +- _Value |= (0x10000<<(_TID)); \ +- RTMP_IO_WRITE32((_pAd), _Offset, _Value);\ +- }while(0) +- +- +-// Remove the BA bitmap from ASIC for the Wcid entry +-// bitmap field starts at 0x10000 in ASIC WCID table +-#define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ +- do{ \ +- UINT32 _Value = 0, _Offset; \ +- _Offset = MAC_WCID_BASE + (_Wcid) * HW_WCID_ENTRY_SIZE + 4; \ +- RTMP_IO_READ32((_pAd), _Offset, &_Value); \ +- _Value &= (~(0x10000 << (_TID))); \ +- RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ +- }while(0) +- +- +-/* ----------------- Interface Related MACRO ----------------- */ +- +-// +-// Enable & Disable NIC interrupt via writing interrupt mask register +-// Since it use ADAPTER structure, it have to be put after structure definition. +-// +-#define RTMP_ASIC_INTERRUPT_DISABLE(_pAd) \ +- do{ \ +- RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, 0x0); /* 0: disable */ \ +- RTMP_CLEAR_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ +- }while(0) +- +-#define RTMP_ASIC_INTERRUPT_ENABLE(_pAd)\ +- do{ \ +- RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, (_pAd)->int_enable_reg /*DELAYINTMASK*/); /* 1:enable */ \ +- RTMP_SET_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ +- }while(0) +- +- +-#define RTMP_IRQ_INIT(pAd) \ +- { pAd->int_enable_reg = ((DELAYINTMASK) | \ +- (RxINT|TxDataInt|TxMgmtInt)) & ~(0x03); \ +- pAd->int_disable_mask = 0; \ +- pAd->int_pending = 0; } +- +-#define RTMP_IRQ_ENABLE(pAd) \ +- { /* clear garbage ints */ \ +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff);\ +- RTMP_ASIC_INTERRUPT_ENABLE(pAd); } +- +- +-/* ----------------- MLME Related MACRO ----------------- */ +-#define RTMP_MLME_HANDLER(pAd) MlmeHandler(pAd) +- +-#define RTMP_MLME_PRE_SANITY_CHECK(pAd) +- +-#define RTMP_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); +- +-#define RTMP_MLME_RESET_STATE_MACHINE(pAd) \ +- MlmeRestartStateMachine(pAd) +- +-#define RTMP_HANDLE_COUNTER_MEASURE(_pAd, _pEntry)\ +- HandleCounterMeasure(_pAd, _pEntry) +- +-/* ----------------- Power Save Related MACRO ----------------- */ +-#define RTMP_PS_POLL_ENQUEUE(pAd) EnqueuePsPoll(pAd) +- +- +-// For RTMPPCIePowerLinkCtrlRestore () function +-#define RESTORE_HALT 1 +-#define RESTORE_WAKEUP 2 +-#define RESTORE_CLOSE 3 +- +-#define PowerSafeCID 1 +-#define PowerRadioOffCID 2 +-#define PowerWakeCID 3 +-#define CID0MASK 0x000000ff +-#define CID1MASK 0x0000ff00 +-#define CID2MASK 0x00ff0000 +-#define CID3MASK 0xff000000 +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define RTMP_STA_FORCE_WAKEUP(pAd, bFromTx) \ +- RT28xxPciStaAsicForceWakeup(pAd, bFromTx); +- +-#define RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ +- RT28xxPciStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); +- +-#define RTMP_SET_PSM_BIT(_pAd, _val) \ +- MlmeSetPsmBit(_pAd, _val); +-#endif // CONFIG_STA_SUPPORT // +- +-#define RTMP_MLME_RADIO_ON(pAd) \ +- RT28xxPciMlmeRadioOn(pAd); +- +-#define RTMP_MLME_RADIO_OFF(pAd) \ +- RT28xxPciMlmeRadioOFF(pAd); +- +-#endif //__MAC_PCI_H__ // +diff --git a/drivers/staging/rt3090/mlme.h b/drivers/staging/rt3090/mlme.h +deleted file mode 100644 +index 2336743..0000000 +--- a/drivers/staging/rt3090/mlme.h ++++ /dev/null +@@ -1,1360 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mlme.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2003-08-28 Created +- John Chang 2004-09-06 modified for RT2600 +-*/ +-#ifndef __MLME_H__ +-#define __MLME_H__ +- +-#include "rtmp_dot11.h" +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- +-// maximum supported capability information - +-// ESS, IBSS, Privacy, Short Preamble, Spectrum mgmt, Short Slot +-#define SUPPORTED_CAPABILITY_INFO 0x0533 +- +-#define END_OF_ARGS -1 +-#define LFSR_MASK 0x80000057 +-#define MLME_TASK_EXEC_INTV 100/*200*/ // +-#define LEAD_TIME 5 +-#define MLME_TASK_EXEC_MULTIPLE 10 /*5*/ // MLME_TASK_EXEC_MULTIPLE * MLME_TASK_EXEC_INTV = 1 sec +-#define REORDER_EXEC_INTV 100 // 0.1 sec +-//#define TBTT_PRELOAD_TIME 384 // usec. LomgPreamble + 24-byte at 1Mbps +- +-// The definition of Radar detection duration region +-#define CE 0 +-#define FCC 1 +-#define JAP 2 +-#define JAP_W53 3 +-#define JAP_W56 4 +-#define MAX_RD_REGION 5 +- +-#define BEACON_LOST_TIME 4 * OS_HZ // 2048 msec = 2 sec +- +-#define DLS_TIMEOUT 1200 // unit: msec +-#define AUTH_TIMEOUT 300 // unit: msec +-#define ASSOC_TIMEOUT 300 // unit: msec +-#define JOIN_TIMEOUT 2000 // unit: msec +-#define SHORT_CHANNEL_TIME 90 // unit: msec +-#define MIN_CHANNEL_TIME 110 // unit: msec, for dual band scan +-#define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan +-#define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time +-#define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1 +-#define LINK_DOWN_TIMEOUT 20000 // unit: msec +-#define AUTO_WAKEUP_TIMEOUT 70 //unit: msec +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1 +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-extern UINT32 CW_MAX_IN_BITS; +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +-// Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720). +-// SHould not refer to this constant anymore +-//#define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm +-#define RSSI_FOR_MID_TX_POWER -55 // -55 db is considered mid-distance +-#define RSSI_FOR_LOW_TX_POWER -45 // -45 db is considered very short distance and +- // eligible to use a lower TX power +-#define RSSI_FOR_LOWEST_TX_POWER -30 +-//#define MID_TX_POWER_DELTA 0 // 0 db from full TX power upon mid-distance to AP +-#define LOW_TX_POWER_DELTA 6 // -3 db from full TX power upon very short distance. 1 grade is 0.5 db +-#define LOWEST_TX_POWER_DELTA 16 // -8 db from full TX power upon shortest distance. 1 grade is 0.5 db +- +-#define RSSI_TRIGGERED_UPON_BELOW_THRESHOLD 0 +-#define RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD 1 +-#define RSSI_THRESHOLD_FOR_ROAMING 25 +-#define RSSI_DELTA 5 +- +-// Channel Quality Indication +-#define CQI_IS_GOOD(cqi) ((cqi) >= 50) +-//#define CQI_IS_FAIR(cqi) (((cqi) >= 20) && ((cqi) < 50)) +-#define CQI_IS_POOR(cqi) (cqi < 50) //(((cqi) >= 5) && ((cqi) < 20)) +-#define CQI_IS_BAD(cqi) (cqi < 5) +-#define CQI_IS_DEAD(cqi) (cqi == 0) +- +-// weighting factor to calculate Channel quality, total should be 100% +-#define RSSI_WEIGHTING 50 +-#define TX_WEIGHTING 30 +-#define RX_WEIGHTING 20 +- +-//#define PEER_KEY_NOT_USED 0 +-//#define PEER_KEY_64_BIT 64 +-//#define PEER_KEY_128_BIT 128 +- +-//#define PEER_KEY_64BIT_LEN 8 +-//#define PEER_KEY_128BIT_LEN 16 +- +-#define BSS_NOT_FOUND 0xFFFFFFFF +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define MAX_LEN_OF_MLME_QUEUE 40 //10 +-#endif // CONFIG_STA_SUPPORT // +- +-#define SCAN_PASSIVE 18 // scan with no probe request, only wait beacon and probe response +-#define SCAN_ACTIVE 19 // scan with probe request, and wait beacon and probe response +-#define SCAN_CISCO_PASSIVE 20 // Single channel passive scan +-#define SCAN_CISCO_ACTIVE 21 // Single channel active scan +-#define SCAN_CISCO_NOISE 22 // Single channel passive scan for noise histogram collection +-#define SCAN_CISCO_CHANNEL_LOAD 23 // Single channel passive scan for channel load collection +-#define FAST_SCAN_ACTIVE 24 // scan with probe request, and wait beacon and probe response +- +-#ifdef DOT11N_DRAFT3 +-#define SCAN_2040_BSS_COEXIST 26 +-#endif // DOT11N_DRAFT3 // +- +-//#define BSS_TABLE_EMPTY(x) ((x).BssNr == 0) +-#define MAC_ADDR_IS_GROUP(Addr) (((Addr[0]) & 0x01)) +-#define MAC_ADDR_HASH(Addr) (Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5]) +-#define MAC_ADDR_HASH_INDEX(Addr) (MAC_ADDR_HASH(Addr) % HASH_TABLE_SIZE) +-#define TID_MAC_HASH(Addr,TID) (TID^Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5]) +-#define TID_MAC_HASH_INDEX(Addr,TID) (TID_MAC_HASH(Addr,TID) % HASH_TABLE_SIZE) +- +-// LED Control +-// assoiation ON. one LED ON. another blinking when TX, OFF when idle +-// no association, both LED off +-#define ASIC_LED_ACT_ON(pAd) RTMP_IO_WRITE32(pAd, MAC_CSR14, 0x00031e46) +-#define ASIC_LED_ACT_OFF(pAd) RTMP_IO_WRITE32(pAd, MAC_CSR14, 0x00001e46) +- +-// bit definition of the 2-byte pBEACON->Capability field +-#define CAP_IS_ESS_ON(x) (((x) & 0x0001) != 0) +-#define CAP_IS_IBSS_ON(x) (((x) & 0x0002) != 0) +-#define CAP_IS_CF_POLLABLE_ON(x) (((x) & 0x0004) != 0) +-#define CAP_IS_CF_POLL_REQ_ON(x) (((x) & 0x0008) != 0) +-#define CAP_IS_PRIVACY_ON(x) (((x) & 0x0010) != 0) +-#define CAP_IS_SHORT_PREAMBLE_ON(x) (((x) & 0x0020) != 0) +-#define CAP_IS_PBCC_ON(x) (((x) & 0x0040) != 0) +-#define CAP_IS_AGILITY_ON(x) (((x) & 0x0080) != 0) +-#define CAP_IS_SPECTRUM_MGMT(x) (((x) & 0x0100) != 0) // 802.11e d9 +-#define CAP_IS_QOS(x) (((x) & 0x0200) != 0) // 802.11e d9 +-#define CAP_IS_SHORT_SLOT(x) (((x) & 0x0400) != 0) +-#define CAP_IS_APSD(x) (((x) & 0x0800) != 0) // 802.11e d9 +-#define CAP_IS_IMMED_BA(x) (((x) & 0x1000) != 0) // 802.11e d9 +-#define CAP_IS_DSSS_OFDM(x) (((x) & 0x2000) != 0) +-#define CAP_IS_DELAY_BA(x) (((x) & 0x4000) != 0) // 802.11e d9 +- +-#define CAP_GENERATE(ess,ibss,priv,s_pre,s_slot,spectrum) (((ess) ? 0x0001 : 0x0000) | ((ibss) ? 0x0002 : 0x0000) | ((priv) ? 0x0010 : 0x0000) | ((s_pre) ? 0x0020 : 0x0000) | ((s_slot) ? 0x0400 : 0x0000) | ((spectrum) ? 0x0100 : 0x0000)) +- +-//#define STA_QOS_CAPABILITY 0 // 1-byte. see 802.11e d9.0 for bit definition +- +-#define ERP_IS_NON_ERP_PRESENT(x) (((x) & 0x01) != 0) // 802.11g +-#define ERP_IS_USE_PROTECTION(x) (((x) & 0x02) != 0) // 802.11g +-#define ERP_IS_USE_BARKER_PREAMBLE(x) (((x) & 0x04) != 0) // 802.11g +- +-#define DRS_TX_QUALITY_WORST_BOUND 8// 3 // just test by gary +-#define DRS_PENALTY 8 +- +-#define BA_NOTUSE 2 +-//BA Policy subfiled value in ADDBA frame +-#define IMMED_BA 1 +-#define DELAY_BA 0 +- +-// BA Initiator subfield in DELBA frame +-#define ORIGINATOR 1 +-#define RECIPIENT 0 +- +-// ADDBA Status Code +-#define ADDBA_RESULTCODE_SUCCESS 0 +-#define ADDBA_RESULTCODE_REFUSED 37 +-#define ADDBA_RESULTCODE_INVALID_PARAMETERS 38 +- +-// DELBA Reason Code +-#define DELBA_REASONCODE_QSTA_LEAVING 36 +-#define DELBA_REASONCODE_END_BA 37 +-#define DELBA_REASONCODE_UNKNOWN_BA 38 +-#define DELBA_REASONCODE_TIMEOUT 39 +- +-// reset all OneSecTx counters +-#define RESET_ONE_SEC_TX_CNT(__pEntry) \ +-if (((__pEntry)) != NULL) \ +-{ \ +- (__pEntry)->OneSecTxRetryOkCount = 0; \ +- (__pEntry)->OneSecTxFailCount = 0; \ +- (__pEntry)->OneSecTxNoRetryOkCount = 0; \ +-} +- +-// +-// 802.11 frame formats +-// +-// HT Capability INFO field in HT Cap IE . +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT LSIGTxopProSup:1; +- USHORT Forty_Mhz_Intolerant:1; +- USHORT PSMP:1; +- USHORT CCKmodein40:1; +- USHORT AMsduSize:1; +- USHORT DelayedBA:1; //rt2860c not support +- USHORT RxSTBC:2; +- USHORT TxSTBC:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT ShortGIfor20:1; +- USHORT GF:1; //green field +- USHORT MimoPs:2;//momi power safe +- USHORT ChannelWidth:1; +- USHORT AdvCoding:1; +-#else +- USHORT AdvCoding:1; +- USHORT ChannelWidth:1; +- USHORT MimoPs:2;//momi power safe +- USHORT GF:1; //green field +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; +- USHORT DelayedBA:1; //rt2860c not support +- USHORT AMsduSize:1; // only support as zero +- USHORT CCKmodein40:1; +- USHORT PSMP:1; +- USHORT Forty_Mhz_Intolerant:1; +- USHORT LSIGTxopProSup:1; +-#endif /* !RT_BIG_ENDIAN */ +-} HT_CAP_INFO, *PHT_CAP_INFO; +- +-// HT Capability INFO field in HT Cap IE . +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- UCHAR rsv:3;//momi power safe +- UCHAR MpduDensity:3; +- UCHAR MaxRAmpduFactor:2; +-#else +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR rsv:3;//momi power safe +-#endif /* !RT_BIG_ENDIAN */ +-} HT_CAP_PARM, *PHT_CAP_PARM; +- +-// HT Capability INFO field in HT Cap IE . +-typedef struct PACKED { +- UCHAR MCSSet[10]; +- UCHAR SupRate[2]; // unit : 1Mbps +-#ifdef RT_BIG_ENDIAN +- UCHAR rsv:3; +- UCHAR MpduDensity:1; +- UCHAR TxStream:2; +- UCHAR TxRxNotEqual:1; +- UCHAR TxMCSSetDefined:1; +-#else +- UCHAR TxMCSSetDefined:1; +- UCHAR TxRxNotEqual:1; +- UCHAR TxStream:2; +- UCHAR MpduDensity:1; +- UCHAR rsv:3; +-#endif // RT_BIG_ENDIAN // +- UCHAR rsv3[3]; +-} HT_MCS_SET, *PHT_MCS_SET; +- +-// HT Capability INFO field in HT Cap IE . +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT rsv2:4; +- USHORT RDGSupport:1; //reverse Direction Grant support +- USHORT PlusHTC:1; //+HTC control field support +- USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. +- USHORT rsv:5;//momi power safe +- USHORT TranTime:2; +- USHORT Pco:1; +-#else +- USHORT Pco:1; +- USHORT TranTime:2; +- USHORT rsv:5;//momi power safe +- USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. +- USHORT PlusHTC:1; //+HTC control field support +- USHORT RDGSupport:1; //reverse Direction Grant support +- USHORT rsv2:4; +-#endif /* RT_BIG_ENDIAN */ +-} EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO; +- +-// HT Beamforming field in HT Cap IE . +-typedef struct PACKED _HT_BF_CAP{ +-#ifdef RT_BIG_ENDIAN +- ULONG rsv:3; +- ULONG ChanEstimation:2; +- ULONG CSIRowBFSup:2; +- ULONG ComSteerBFAntSup:2; +- ULONG NoComSteerBFAntSup:2; +- ULONG CSIBFAntSup:2; +- ULONG MinGrouping:2; +- ULONG ExpComBF:2; +- ULONG ExpNoComBF:2; +- ULONG ExpCSIFbk:2; +- ULONG ExpComSteerCapable:1; +- ULONG ExpNoComSteerCapable:1; +- ULONG ExpCSICapable:1; +- ULONG Calibration:2; +- ULONG ImpTxBFCapable:1; +- ULONG TxNDPCapable:1; +- ULONG RxNDPCapable:1; +- ULONG TxSoundCapable:1; +- ULONG RxSoundCapable:1; +- ULONG TxBFRecCapable:1; +-#else +- ULONG TxBFRecCapable:1; +- ULONG RxSoundCapable:1; +- ULONG TxSoundCapable:1; +- ULONG RxNDPCapable:1; +- ULONG TxNDPCapable:1; +- ULONG ImpTxBFCapable:1; +- ULONG Calibration:2; +- ULONG ExpCSICapable:1; +- ULONG ExpNoComSteerCapable:1; +- ULONG ExpComSteerCapable:1; +- ULONG ExpCSIFbk:2; +- ULONG ExpNoComBF:2; +- ULONG ExpComBF:2; +- ULONG MinGrouping:2; +- ULONG CSIBFAntSup:2; +- ULONG NoComSteerBFAntSup:2; +- ULONG ComSteerBFAntSup:2; +- ULONG CSIRowBFSup:2; +- ULONG ChanEstimation:2; +- ULONG rsv:3; +-#endif // RT_BIG_ENDIAN // +-} HT_BF_CAP, *PHT_BF_CAP; +- +-// HT antenna selection field in HT Cap IE . +-typedef struct PACKED _HT_AS_CAP{ +-#ifdef RT_BIG_ENDIAN +- UCHAR rsv:1; +- UCHAR TxSoundPPDU:1; +- UCHAR RxASel:1; +- UCHAR AntIndFbk:1; +- UCHAR ExpCSIFbk:1; +- UCHAR AntIndFbkTxASEL:1; +- UCHAR ExpCSIFbkTxASEL:1; +- UCHAR AntSelect:1; +-#else +- UCHAR AntSelect:1; +- UCHAR ExpCSIFbkTxASEL:1; +- UCHAR AntIndFbkTxASEL:1; +- UCHAR ExpCSIFbk:1; +- UCHAR AntIndFbk:1; +- UCHAR RxASel:1; +- UCHAR TxSoundPPDU:1; +- UCHAR rsv:1; +-#endif // RT_BIG_ENDIAN // +-} HT_AS_CAP, *PHT_AS_CAP; +- +-// Draft 1.0 set IE length 26, but is extensible.. +-#define SIZE_HT_CAP_IE 26 +-// The structure for HT Capability IE. +-typedef struct PACKED _HT_CAPABILITY_IE{ +- HT_CAP_INFO HtCapInfo; +- HT_CAP_PARM HtCapParm; +-// HT_MCS_SET HtMCSSet; +- UCHAR MCSSet[16]; +- EXT_HT_CAP_INFO ExtHtCapInfo; +- HT_BF_CAP TxBFCap; // beamforming cap. rt2860c not support beamforming. +- HT_AS_CAP ASCap; //antenna selection. +-} HT_CAPABILITY_IE, *PHT_CAPABILITY_IE; +- +- +-// 802.11n draft3 related structure definitions. +-// 7.3.2.60 +-#define dot11OBSSScanPassiveDwell 20 // in TU. min amount of time that the STA continously scans each channel when performing an active OBSS scan. +-#define dot11OBSSScanActiveDwell 10 // in TU.min amount of time that the STA continously scans each channel when performing an passive OBSS scan. +-#define dot11BSSWidthTriggerScanInterval 300 // in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. +-#define dot11OBSSScanPassiveTotalPerChannel 200 // in TU. min total amount of time that the STA scans each channel when performing a passive OBSS scan. +-#define dot11OBSSScanActiveTotalPerChannel 20 //in TU. min total amount of time that the STA scans each channel when performing a active OBSS scan +-#define dot11BSSWidthChannelTransactionDelayFactor 5 // min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maximum +- // interval between overlapping BSS scan operations. +-#define dot11BSSScanActivityThreshold 25 // in %%, max total time that a STA may be active on the medium during a period of +- // (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without +- // being obligated to perform OBSS Scan operations. default is 25(== 0.25%) +- +-typedef struct PACKED _OVERLAP_BSS_SCAN_IE{ +- USHORT ScanPassiveDwell; +- USHORT ScanActiveDwell; +- USHORT TriggerScanInt; // Trigger scan interval +- USHORT PassiveTalPerChannel; // passive total per channel +- USHORT ActiveTalPerChannel; // active total per channel +- USHORT DelayFactor; // BSS width channel transition delay factor +- USHORT ScanActThre; // Scan Activity threshold +-}OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; +- +- +-// 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST +-typedef union PACKED _BSS_2040_COEXIST_IE{ +- struct PACKED { +- #ifdef RT_BIG_ENDIAN +- UCHAR rsv:5; +- UCHAR BSS20WidthReq:1; +- UCHAR Intolerant40:1; +- UCHAR InfoReq:1; +- #else +- UCHAR InfoReq:1; +- UCHAR Intolerant40:1; // Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. +- UCHAR BSS20WidthReq:1; // Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. +- UCHAR rsv:5; +-#endif // RT_BIG_ENDIAN // +- } field; +- UCHAR word; +-} BSS_2040_COEXIST_IE, *PBSS_2040_COEXIST_IE; +- +- +-typedef struct _TRIGGER_EVENTA{ +- BOOLEAN bValid; +- UCHAR BSSID[6]; +- UCHAR RegClass; // Regulatory Class +- USHORT Channel; +- ULONG CDCounter; // Maintain a seperate count down counter for each Event A. +-} TRIGGER_EVENTA, *PTRIGGER_EVENTA; +- +-// 20/40 trigger event table +-// If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. +-#define MAX_TRIGGER_EVENT 64 +-typedef struct _TRIGGER_EVENT_TAB{ +- UCHAR EventANo; +- TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; +- ULONG EventBCountDown; // Count down counter for Event B. +-} TRIGGER_EVENT_TAB, *PTRIGGER_EVENT_TAB; +- +-// 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). +-// This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 +-typedef struct PACKED _EXT_CAP_INFO_ELEMENT{ +-#ifdef RT_BIG_ENDIAN +- UCHAR rsv2:5; +- UCHAR ExtendChannelSwitch:1; +- UCHAR rsv:1; +- UCHAR BssCoexistMgmtSupport:1; +-#else +- UCHAR BssCoexistMgmtSupport:1; +- UCHAR rsv:1; +- UCHAR ExtendChannelSwitch:1; +- UCHAR rsv2:5; +-#endif // RT_BIG_ENDIAN // +-}EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; +- +- +-// 802.11n 7.3.2.61 +-typedef struct PACKED _BSS_2040_COEXIST_ELEMENT{ +- UCHAR ElementID; // ID = IE_2040_BSS_COEXIST = 72 +- UCHAR Len; +- BSS_2040_COEXIST_IE BssCoexistIe; +-}BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; +- +- +-//802.11n 7.3.2.59 +-typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT{ +- UCHAR ElementID; // ID = IE_2040_BSS_INTOLERANT_REPORT = 73 +- UCHAR Len; +- UCHAR RegulatoryClass; +- UCHAR ChList[0]; +-}BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; +- +- +-// The structure for channel switch annoucement IE. This is in 802.11n D3.03 +-typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE{ +- UCHAR SwitchMode; //channel switch mode +- UCHAR NewChannel; // +- UCHAR SwitchCount; // +-} CHA_SWITCH_ANNOUNCE_IE, *PCHA_SWITCH_ANNOUNCE_IE; +- +- +-// The structure for channel switch annoucement IE. This is in 802.11n D3.03 +-typedef struct PACKED _SEC_CHA_OFFSET_IE{ +- UCHAR SecondaryChannelOffset; // 1: Secondary above, 3: Secondary below, 0: no Secondary +-} SEC_CHA_OFFSET_IE, *PSEC_CHA_OFFSET_IE; +- +- +-// This structure is extracted from struct RT_HT_CAPABILITY +-typedef struct { +- BOOLEAN bHtEnable; // If we should use ht rate. +- BOOLEAN bPreNHt; // If we should use ht rate. +- //Substract from HT Capability IE +- UCHAR MCSSet[16]; +-} RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; +- +-//This structure substracts ralink supports from all 802.11n-related features. +-//Features not listed here but contained in 802.11n spec are not supported in rt2860. +-typedef struct { +-#ifdef RT_BIG_ENDIAN +- USHORT rsv:5; +- USHORT AmsduSize:1; // Max receiving A-MSDU size +- USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n +- USHORT RxSTBC:2; // 2 bits +- USHORT TxSTBC:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT ShortGIfor20:1; +- USHORT GF:1; //green field +- USHORT MimoPs:2;//mimo power safe MMPS_ +- USHORT ChannelWidth:1; +-#else +- USHORT ChannelWidth:1; +- USHORT MimoPs:2;//mimo power safe MMPS_ +- USHORT GF:1; //green field +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; // 2 bits +- USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n +- USHORT AmsduSize:1; // Max receiving A-MSDU size +- USHORT rsv:5; +-#endif +- +- //Substract from Addiont HT INFO IE +-#ifdef RT_BIG_ENDIAN +- UCHAR RecomWidth:1; +- UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n +- UCHAR MpduDensity:3; +- UCHAR MaxRAmpduFactor:2; +-#else +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n +- UCHAR RecomWidth:1; +-#endif +- +-#ifdef RT_BIG_ENDIAN +- USHORT rsv2:11; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv3:1; +- USHORT NonGfPresent:1; +- USHORT OperaionMode:2; +-#else +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv3:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; +-#endif +- +- // New Extension Channel Offset IE +- UCHAR NewExtChannelOffset; +- // Extension Capability IE = 127 +- UCHAR BSSCoexist2040; +-} RT_HT_CAPABILITY, *PRT_HT_CAPABILITY; +- +-// field in Addtional HT Information IE . +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- UCHAR SerInterGranu:3; +- UCHAR S_PSMPSup:1; +- UCHAR RifsMode:1; +- UCHAR RecomWidth:1; +- UCHAR ExtChanOffset:2; +-#else +- UCHAR ExtChanOffset:2; +- UCHAR RecomWidth:1; +- UCHAR RifsMode:1; +- UCHAR S_PSMPSup:1; //Indicate support for scheduled PSMP +- UCHAR SerInterGranu:3; //service interval granularity +-#endif +-} ADD_HTINFO, *PADD_HTINFO; +- +-typedef struct PACKED{ +-#ifdef RT_BIG_ENDIAN +- USHORT rsv2:11; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv:1; +- USHORT NonGfPresent:1; +- USHORT OperaionMode:2; +-#else +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; +-#endif +-} ADD_HTINFO2, *PADD_HTINFO2; +- +- +-// TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. +-typedef struct PACKED{ +-#ifdef RT_BIG_ENDIAN +- USHORT rsv:4; +- USHORT PcoPhase:1; +- USHORT PcoActive:1; +- USHORT LsigTxopProt:1; +- USHORT STBCBeacon:1; +- USHORT DualCTSProtect:1; +- USHORT DualBeacon:1; +- USHORT StbcMcs:6; +-#else +- USHORT StbcMcs:6; +- USHORT DualBeacon:1; +- USHORT DualCTSProtect:1; +- USHORT STBCBeacon:1; +- USHORT LsigTxopProt:1; // L-SIG TXOP protection full support +- USHORT PcoActive:1; +- USHORT PcoPhase:1; +- USHORT rsv:4; +-#endif // RT_BIG_ENDIAN // +-} ADD_HTINFO3, *PADD_HTINFO3; +- +-#define SIZE_ADD_HT_INFO_IE 22 +-typedef struct PACKED{ +- UCHAR ControlChan; +- ADD_HTINFO AddHtInfo; +- ADD_HTINFO2 AddHtInfo2; +- ADD_HTINFO3 AddHtInfo3; +- UCHAR MCSSet[16]; // Basic MCS set +-} ADD_HT_INFO_IE, *PADD_HT_INFO_IE; +- +-typedef struct PACKED{ +- UCHAR NewExtChanOffset; +-} NEW_EXT_CHAN_IE, *PNEW_EXT_CHAN_IE; +- +-typedef struct PACKED _FRAME_802_11 { +- HEADER_802_11 Hdr; +- UCHAR Octet[1]; +-} FRAME_802_11, *PFRAME_802_11; +- +-// QoSNull embedding of management action. When HT Control MA field set to 1. +-typedef struct PACKED _MA_BODY { +- UCHAR Category; +- UCHAR Action; +- UCHAR Octet[1]; +-} MA_BODY, *PMA_BODY; +- +-typedef struct PACKED _HEADER_802_3 { +- UCHAR DAAddr1[MAC_ADDR_LEN]; +- UCHAR SAAddr2[MAC_ADDR_LEN]; +- UCHAR Octet[2]; +-} HEADER_802_3, *PHEADER_802_3; +-////Block ACK related format +-// 2-byte BA Parameter field in DELBA frames to terminate an already set up bA +-typedef struct PACKED{ +-#ifdef RT_BIG_ENDIAN +- USHORT TID:4; // value of TC os TS +- USHORT Initiator:1; // 1: originator 0:recipient +- USHORT Rsv:11; // always set to 0 +-#else +- USHORT Rsv:11; // always set to 0 +- USHORT Initiator:1; // 1: originator 0:recipient +- USHORT TID:4; // value of TC os TS +-#endif /* !RT_BIG_ENDIAN */ +-} DELBA_PARM, *PDELBA_PARM; +- +-// 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT BufSize:10; // number of buffe of size 2304 octetsr +- USHORT TID:4; // value of TC os TS +- USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA +- USHORT AMSDUSupported:1; // 0: not permitted 1: permitted +-#else +- USHORT AMSDUSupported:1; // 0: not permitted 1: permitted +- USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA +- USHORT TID:4; // value of TC os TS +- USHORT BufSize:10; // number of buffe of size 2304 octetsr +-#endif /* !RT_BIG_ENDIAN */ +-} BA_PARM, *PBA_PARM; +- +-// 2-byte BA Starting Seq CONTROL field +-typedef union PACKED { +- struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent +- USHORT FragNum:4; // always set to 0 +-#else +- USHORT FragNum:4; // always set to 0 +- USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent +-#endif /* RT_BIG_ENDIAN */ +- } field; +- USHORT word; +-} BASEQ_CONTROL, *PBASEQ_CONTROL; +- +-//BAControl and BARControl are the same +-// 2-byte BA CONTROL field in BA frame +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT TID:4; +- USHORT Rsv:9; +- USHORT Compressed:1; +- USHORT MTID:1; //EWC V1.24 +- USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK +-#else +- USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK +- USHORT MTID:1; //EWC V1.24 +- USHORT Compressed:1; +- USHORT Rsv:9; +- USHORT TID:4; +-#endif /* !RT_BIG_ENDIAN */ +-} BA_CONTROL, *PBA_CONTROL; +- +-// 2-byte BAR CONTROL field in BAR frame +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT TID:4; +- USHORT Rsv1:9; +- USHORT Compressed:1; +- USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ +- USHORT ACKPolicy:1; +-#else +- USHORT ACKPolicy:1; // 0:normal ack, 1:no ack. +- USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT TID:4; +-#endif /* !RT_BIG_ENDIAN */ +-} BAR_CONTROL, *PBAR_CONTROL; +- +-// BARControl in MTBAR frame +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT NumTID:4; +- USHORT Rsv1:9; +- USHORT Compressed:1; +- USHORT MTID:1; +- USHORT ACKPolicy:1; +-#else +- USHORT ACKPolicy:1; +- USHORT MTID:1; +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT NumTID:4; +-#endif /* !RT_BIG_ENDIAN */ +-} MTBAR_CONTROL, *PMTBAR_CONTROL; +- +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT TID:4; +- USHORT Rsv1:12; +-#else +- USHORT Rsv1:12; +- USHORT TID:4; +-#endif /* !RT_BIG_ENDIAN */ +-} PER_TID_INFO, *PPER_TID_INFO; +- +-typedef struct { +- PER_TID_INFO PerTID; +- BASEQ_CONTROL BAStartingSeq; +-} EACH_TID, *PEACH_TID; +- +- +-// BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. +-typedef struct PACKED _FRAME_BA_REQ { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BARControl; +- BASEQ_CONTROL BAStartingSeq; +-} FRAME_BA_REQ, *PFRAME_BA_REQ; +- +-typedef struct PACKED _FRAME_MTBA_REQ { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- MTBAR_CONTROL MTBARControl; +- PER_TID_INFO PerTIDInfo; +- BASEQ_CONTROL BAStartingSeq; +-} FRAME_MTBA_REQ, *PFRAME_MTBA_REQ; +- +-// Compressed format is mandantory in HT STA +-typedef struct PACKED _FRAME_MTBA { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BA_CONTROL BAControl; +- BASEQ_CONTROL BAStartingSeq; +- UCHAR BitMap[8]; +-} FRAME_MTBA, *PFRAME_MTBA; +- +-typedef struct PACKED _FRAME_PSMP_ACTION { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Psmp; // 7.3.1.25 +-} FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; +- +-typedef struct PACKED _FRAME_ACTION_HDR { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +-} FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; +- +-//Action Frame +-//Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 +-typedef struct PACKED _CHAN_SWITCH_ANNOUNCE { +- UCHAR ElementID; // ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 +- UCHAR Len; +- CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; +-} CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; +- +- +-//802.11n : 7.3.2.20a +-typedef struct PACKED _SECOND_CHAN_OFFSET { +- UCHAR ElementID; // ID = IE_SECONDARY_CH_OFFSET = 62 +- UCHAR Len; +- SEC_CHA_OFFSET_IE SecChOffsetIe; +-} SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; +- +- +-typedef struct PACKED _FRAME_SPETRUM_CS { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- CHAN_SWITCH_ANNOUNCE CSAnnounce; +- SECOND_CHAN_OFFSET SecondChannel; +-} FRAME_SPETRUM_CS, *PFRAME_SPETRUM_CS; +- +- +-typedef struct PACKED _FRAME_ADDBA_REQ { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; // 1 +- BA_PARM BaParm; // 2 - 10 +- USHORT TimeOutValue; // 0 - 0 +- BASEQ_CONTROL BaStartSeq; // 0-0 +-} FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; +- +-typedef struct PACKED _FRAME_ADDBA_RSP { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT StatusCode; +- BA_PARM BaParm; //0 - 2 +- USHORT TimeOutValue; +-} FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; +- +-typedef struct PACKED _FRAME_DELBA_REQ { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- DELBA_PARM DelbaParm; +- USHORT ReasonCode; +-} FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; +- +- +-//7.2.1.7 +-typedef struct PACKED _FRAME_BAR { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; +- BASEQ_CONTROL StartingSeq; +-} FRAME_BAR, *PFRAME_BAR; +- +-//7.2.1.7 +-typedef struct PACKED _FRAME_BA { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; +- BASEQ_CONTROL StartingSeq; +- UCHAR bitmask[8]; +-} FRAME_BA, *PFRAME_BA; +- +- +-// Radio Measuement Request Frame Format +-typedef struct PACKED _FRAME_RM_REQ_ACTION { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT Repetition; +- UCHAR data[0]; +-} FRAME_RM_REQ_ACTION, *PFRAME_RM_REQ_ACTION; +- +-typedef struct PACKED { +- UCHAR ID; +- UCHAR Length; +- UCHAR ChannelSwitchMode; +- UCHAR NewRegClass; +- UCHAR NewChannelNum; +- UCHAR ChannelSwitchCount; +-} HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; +- +- +-// +-// _Limit must be the 2**n - 1 +-// _SEQ1 , _SEQ2 must be within 0 ~ _Limit +-// +-#define SEQ_STEPONE(_SEQ1, _SEQ2, _Limit) ((_SEQ1 == ((_SEQ2+1) & _Limit))) +-#define SEQ_SMALLER(_SEQ1, _SEQ2, _Limit) (((_SEQ1-_SEQ2) & ((_Limit+1)>>1))) +-#define SEQ_LARGER(_SEQ1, _SEQ2, _Limit) ((_SEQ1 != _SEQ2) && !(((_SEQ1-_SEQ2) & ((_Limit+1)>>1)))) +-#define SEQ_WITHIN_WIN(_SEQ1, _SEQ2, _WIN, _Limit) (SEQ_LARGER(_SEQ1, _SEQ2, _Limit) && \ +- SEQ_SMALLER(_SEQ1, ((_SEQ2+_WIN+1)&_Limit), _Limit)) +- +-// +-// Contention-free parameter (without ID and Length) +-// +-typedef struct PACKED { +- BOOLEAN bValid; // 1: variable contains valid value +- UCHAR CfpCount; +- UCHAR CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; +-} CF_PARM, *PCF_PARM; +- +-typedef struct _CIPHER_SUITE { +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher 1, this one has more secured cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; // Unicast cipher 2 if AP announce two unicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Group cipher +- USHORT RsnCapability; // RSN capability from beacon +- BOOLEAN bMixMode; // Indicate Pair & Group cipher might be different +-} CIPHER_SUITE, *PCIPHER_SUITE; +- +-// EDCA configuration from AP's BEACON/ProbeRsp +-typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- BOOLEAN bAdd; // 1: variable contains valid value +- BOOLEAN bQAck; +- BOOLEAN bQueueRequest; +- BOOLEAN bTxopRequest; +- BOOLEAN bAPSDCapable; +-// BOOLEAN bMoreDataAck; +- UCHAR EdcaUpdateCount; +- UCHAR Aifsn[4]; // 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO +- UCHAR Cwmin[4]; +- UCHAR Cwmax[4]; +- USHORT Txop[4]; // in unit of 32-us +- BOOLEAN bACM[4]; // 1: Admission Control of AC_BK is mandattory +-} EDCA_PARM, *PEDCA_PARM; +- +-// QBSS LOAD information from QAP's BEACON/ProbeRsp +-typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- USHORT StaNum; +- UCHAR ChannelUtilization; +- USHORT RemainingAdmissionControl; // in unit of 32-us +-} QBSS_LOAD_PARM, *PQBSS_LOAD_PARM; +- +-// QBSS Info field in QSTA's assoc req +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- UCHAR Rsv2:1; +- UCHAR MaxSPLength:2; +- UCHAR Rsv1:1; +- UCHAR UAPSD_AC_BE:1; +- UCHAR UAPSD_AC_BK:1; +- UCHAR UAPSD_AC_VI:1; +- UCHAR UAPSD_AC_VO:1; +-#else +- UCHAR UAPSD_AC_VO:1; +- UCHAR UAPSD_AC_VI:1; +- UCHAR UAPSD_AC_BK:1; +- UCHAR UAPSD_AC_BE:1; +- UCHAR Rsv1:1; +- UCHAR MaxSPLength:2; +- UCHAR Rsv2:1; +-#endif /* !RT_BIG_ENDIAN */ +-} QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM; +- +-// QBSS Info field in QAP's Beacon/ProbeRsp +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- UCHAR UAPSD:1; +- UCHAR Rsv:3; +- UCHAR ParamSetCount:4; +-#else +- UCHAR ParamSetCount:4; +- UCHAR Rsv:3; +- UCHAR UAPSD:1; +-#endif /* !RT_BIG_ENDIAN */ +-} QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM; +- +-// QOS Capability reported in QAP's BEACON/ProbeRsp +-// QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq +-typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- BOOLEAN bQAck; +- BOOLEAN bQueueRequest; +- BOOLEAN bTxopRequest; +-// BOOLEAN bMoreDataAck; +- UCHAR EdcaUpdateCount; +-} QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM; +- +-#ifdef CONFIG_STA_SUPPORT +-typedef struct { +- UCHAR IELen; +- UCHAR IE[MAX_CUSTOM_LEN]; +-} WPA_IE_; +-#endif // CONFIG_STA_SUPPORT // +- +- +-typedef struct { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Channel; +- UCHAR CentralChannel; //Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. +- UCHAR BssType; +- USHORT AtimWin; +- USHORT BeaconPeriod; +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; +- HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR AddHtInfoLen; +- UCHAR NewExtChanOffset; +- CHAR Rssi; +- UCHAR Privacy; // Indicate security function ON/OFF. Don't mess up with auth mode. +- UCHAR Hidden; +- +- USHORT DtimPeriod; +- USHORT CapabilityInfo; +- +- USHORT CfpCount; +- USHORT CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- +- ULONG LastBeaconRxTime; // OS's timestamp +- +- BOOLEAN bSES; +- +- // New for WPA2 +- CIPHER_SUITE WPA; // AP announced WPA cipher suite +- CIPHER_SUITE WPA2; // AP announced WPA2 cipher suite +- +- // New for microsoft WPA support +- NDIS_802_11_FIXED_IEs FixIEs; +- NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; // Addition mode for WPA2 / WPA capable AP +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; +- NDIS_802_11_WEP_STATUS WepStatus; // Unicast Encryption Algorithm extract from VAR_IE +- USHORT VarIELen; // Length of next VIE include EID & Length +- UCHAR VarIEs[MAX_VIE_LEN]; +- +- // CCX Ckip information +- UCHAR CkipFlag; +- +- // CCX 2 TSF +- UCHAR PTSF[4]; // Parent TSF +- UCHAR TTSF[8]; // Target TSF +- +- // 802.11e d9, and WMM +- EDCA_PARM EdcaParm; +- QOS_CAPABILITY_PARM QosCapability; +- QBSS_LOAD_PARM QbssLoad; +-#ifdef CONFIG_STA_SUPPORT +- WPA_IE_ WpaIE; +- WPA_IE_ RsnIE; +-#ifdef EXT_BUILD_CHANNEL_LIST +- UCHAR CountryString[3]; +- BOOLEAN bHasCountryIE; +-#endif // EXT_BUILD_CHANNEL_LIST // +-#endif // CONFIG_STA_SUPPORT // +- +-} BSS_ENTRY, *PBSS_ENTRY; +- +-typedef struct { +- UCHAR BssNr; +- UCHAR BssOverlapNr; +- BSS_ENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; +-} BSS_TABLE, *PBSS_TABLE; +- +- +-typedef struct _MLME_QUEUE_ELEM { +- ULONG Machine; +- ULONG MsgType; +- ULONG MsgLen; +- UCHAR Msg[MGMT_DMA_BUFFER_SIZE]; +- LARGE_INTEGER TimeStamp; +- UCHAR Rssi0; +- UCHAR Rssi1; +- UCHAR Rssi2; +- UCHAR Signal; +- UCHAR Channel; +- UCHAR Wcid; +- BOOLEAN Occupied; +-#ifdef MLME_EX +- USHORT Idx; +-#endif // MLME_EX // +-} MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM; +- +-typedef struct _MLME_QUEUE { +- ULONG Num; +- ULONG Head; +- ULONG Tail; +- NDIS_SPIN_LOCK Lock; +- MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; +-} MLME_QUEUE, *PMLME_QUEUE; +- +-typedef VOID (*STATE_MACHINE_FUNC)(VOID *Adaptor, MLME_QUEUE_ELEM *Elem); +- +-typedef struct _STATE_MACHINE { +- ULONG Base; +- ULONG NrState; +- ULONG NrMsg; +- ULONG CurrState; +- STATE_MACHINE_FUNC *TransFunc; +-} STATE_MACHINE, *PSTATE_MACHINE; +- +- +-// MLME AUX data structure that hold temporarliy settings during a connection attempt. +-// Once this attemp succeeds, all settings will be copy to pAd->StaActive. +-// A connection attempt (user set OID, roaming, CCX fast roaming,..) consists of +-// several steps (JOIN, AUTH, ASSOC or REASSOC) and may fail at any step. We purposely +-// separate this under-trial settings away from pAd->StaActive so that once +-// this new attempt failed, driver can auto-recover back to the active settings. +-typedef struct _MLME_AUX { +- UCHAR BssType; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR AutoReconnectSsid[MAX_LEN_OF_SSID]; +- UCHAR AutoReconnectSsidLen; +- USHORT Alg; +- UCHAR ScanType; +- UCHAR Channel; +- UCHAR CentralChannel; +- USHORT Aid; +- USHORT CapabilityInfo; +- USHORT BeaconPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; +- USHORT AtimWin; +- +- // Copy supported rate from desired AP's beacon. We are trying to match +- // AP's supported and extended rate settings. +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; +- HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR NewExtChannelOffset; +- //RT_HT_CAPABILITY SupportedHtPhy; +- +- // new for QOS +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP +- +- // new to keep Ralink specific feature +- ULONG APRalinkIe; +- +- BSS_TABLE SsidBssTab; // AP list for the same SSID +- BSS_TABLE RoamTab; // AP list eligible for roaming +- ULONG BssIdx; +- ULONG RoamIdx; +- +- BOOLEAN CurrReqIsFromNdis; +- +- RALINK_TIMER_STRUCT BeaconTimer, ScanTimer; +- RALINK_TIMER_STRUCT AuthTimer; +- RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer; +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +-} MLME_AUX, *PMLME_AUX; +- +-typedef struct _MLME_ADDBA_REQ_STRUCT{ +- UCHAR Wcid; // +- UCHAR pAddr[MAC_ADDR_LEN]; +- UCHAR BaBufSize; +- USHORT TimeOutValue; +- UCHAR TID; +- UCHAR Token; +- USHORT BaStartSeq; +-} MLME_ADDBA_REQ_STRUCT, *PMLME_ADDBA_REQ_STRUCT; +- +- +-typedef struct _MLME_DELBA_REQ_STRUCT{ +- UCHAR Wcid; // +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR TID; +- UCHAR Initiator; +-} MLME_DELBA_REQ_STRUCT, *PMLME_DELBA_REQ_STRUCT; +- +-// assoc struct is equal to reassoc +-typedef struct _MLME_ASSOC_REQ_STRUCT{ +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT CapabilityInfo; +- USHORT ListenIntv; +- ULONG Timeout; +-} MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, *PMLME_REASSOC_REQ_STRUCT; +- +-typedef struct _MLME_DISASSOC_REQ_STRUCT{ +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; +-} MLME_DISASSOC_REQ_STRUCT, *PMLME_DISASSOC_REQ_STRUCT; +- +-typedef struct _MLME_AUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Alg; +- ULONG Timeout; +-} MLME_AUTH_REQ_STRUCT, *PMLME_AUTH_REQ_STRUCT; +- +-typedef struct _MLME_DEAUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; +-} MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT; +- +-typedef struct { +- ULONG BssIdx; +-} MLME_JOIN_REQ_STRUCT; +- +-typedef struct _MLME_SCAN_REQ_STRUCT { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR BssType; +- UCHAR ScanType; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; +-} MLME_SCAN_REQ_STRUCT, *PMLME_SCAN_REQ_STRUCT; +- +-typedef struct _MLME_START_REQ_STRUCT { +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +-} MLME_START_REQ_STRUCT, *PMLME_START_REQ_STRUCT; +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +-// structure for DLS +-typedef struct _RT_802_11_DLS { +- USHORT TimeOut; // Use to time out while slience, unit: second , set by UI +- USHORT CountDownTimer; // Use to time out while slience,unit: second , used by driver only +- NDIS_802_11_MAC_ADDRESS MacAddr; // set by UI +- UCHAR Status; // 0: none , 1: wait STAkey, 2: finish DLS setup , set by driver only +- BOOLEAN Valid; // 1: valid , 0: invalid , set by UI, use to setup or tear down DLS link +- RALINK_TIMER_STRUCT Timer; // Use to time out while handshake +- USHORT Sequence; +- USHORT MacTabMatchWCID; // ASIC +- BOOLEAN bHTCap; +- PVOID pAd; +-} RT_802_11_DLS, *PRT_802_11_DLS; +- +-typedef struct _MLME_DLS_REQ_STRUCT { +- PRT_802_11_DLS pDLS; +- USHORT Reason; +-} MLME_DLS_REQ_STRUCT, *PMLME_DLS_REQ_STRUCT; +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-typedef struct PACKED { +- UCHAR Eid; +- UCHAR Len; +- UCHAR Octet[1]; +-} EID_STRUCT,*PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; +- +-typedef struct PACKED _RTMP_TX_RATE_SWITCH +-{ +- UCHAR ItemNo; +-#ifdef RT_BIG_ENDIAN +- UCHAR Rsv2:2; +- UCHAR Mode:2; +- UCHAR Rsv1:1; +- UCHAR BW:1; +- UCHAR ShortGI:1; +- UCHAR STBC:1; +-#else +- UCHAR STBC:1; +- UCHAR ShortGI:1; +- UCHAR BW:1; +- UCHAR Rsv1:1; +- UCHAR Mode:2; +- UCHAR Rsv2:2; +-#endif +- UCHAR CurrMCS; +- UCHAR TrainUp; +- UCHAR TrainDown; +-} RRTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH; +- +-// ========================== AP mlme.h =============================== +-#define TBTT_PRELOAD_TIME 384 // usec. LomgPreamble + 24-byte at 1Mbps +-#define DEFAULT_DTIM_PERIOD 1 +- +-// weighting factor to calculate Channel quality, total should be 100% +-//#define RSSI_WEIGHTING 0 +-//#define TX_WEIGHTING 40 +-//#define RX_WEIGHTING 60 +- +-#define MAC_TABLE_AGEOUT_TIME 300 // unit: sec +-#define MAC_TABLE_ASSOC_TIMEOUT 5 // unit: sec +-#define MAC_TABLE_FULL(Tab) ((Tab).size == MAX_LEN_OF_MAC_TABLE) +- +-// AP shall drop the sta if contine Tx fail count reach it. +-#define MAC_ENTRY_LIFE_CHECK_CNT 20 // packet cnt. +- +-// Value domain of pMacEntry->Sst +-typedef enum _Sst { +- SST_NOT_AUTH, // 0: equivalent to IEEE 802.11/1999 state 1 +- SST_AUTH, // 1: equivalent to IEEE 802.11/1999 state 2 +- SST_ASSOC // 2: equivalent to IEEE 802.11/1999 state 3 +-} SST; +- +-// value domain of pMacEntry->AuthState +-typedef enum _AuthState { +- AS_NOT_AUTH, +- AS_AUTH_OPEN, // STA has been authenticated using OPEN SYSTEM +- AS_AUTH_KEY, // STA has been authenticated using SHARED KEY +- AS_AUTHENTICATING // STA is waiting for AUTH seq#3 using SHARED KEY +-} AUTH_STATE; +- +-//for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 +-typedef enum _ApWpaState { +- AS_NOTUSE, // 0 +- AS_DISCONNECT, // 1 +- AS_DISCONNECTED, // 2 +- AS_INITIALIZE, // 3 +- AS_AUTHENTICATION, // 4 +- AS_AUTHENTICATION2, // 5 +- AS_INITPMK, // 6 +- AS_INITPSK, // 7 +- AS_PTKSTART, // 8 +- AS_PTKINIT_NEGOTIATING, // 9 +- AS_PTKINITDONE, // 10 +- AS_UPDATEKEYS, // 11 +- AS_INTEGRITY_FAILURE, // 12 +- AS_KEYUPDATE, // 13 +-} AP_WPA_STATE; +- +-// for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 +-typedef enum _GTKState { +- REKEY_NEGOTIATING, +- REKEY_ESTABLISHED, +- KEYERROR, +-} GTK_STATE; +- +-// for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 +-typedef enum _WpaGTKState { +- SETKEYS, +- SETKEYS_DONE, +-} WPA_GTK_STATE; +-// ====================== end of AP mlme.h ============================ +- +- +-#endif // MLME_H__ +diff --git a/drivers/staging/rt3090/mlme_ex.h b/drivers/staging/rt3090/mlme_ex.h +deleted file mode 100644 +index b3e94dc..0000000 +--- a/drivers/staging/rt3090/mlme_ex.h ++++ /dev/null +@@ -1,83 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mlme_ex.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi 2007-06-25 Extend original mlme APIs to support multi-entries +-*/ +-#ifndef __MLME_EX_H__ +-#define __MLME_EX_H__ +- +-#include "mlme_ex_def.h" +- +- +-VOID StateMachineInitEx( +- IN STATE_MACHINE_EX *S, +- IN STATE_MACHINE_FUNC_EX Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC_EX DefFunc, +- IN ULONG InitState, +- IN ULONG Base); +- +-VOID StateMachineSetActionEx( +- IN STATE_MACHINE_EX *S, +- IN ULONG St, +- IN ULONG Msg, +- IN STATE_MACHINE_FUNC_EX Func); +- +-BOOLEAN isValidApCliIf( +- SHORT Idx); +- +-VOID StateMachinePerformActionEx( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE_EX *S, +- IN MLME_QUEUE_ELEM *Elem, +- USHORT Idx, +- PULONG pCurrState); +- +-BOOLEAN MlmeEnqueueEx( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg, +- IN USHORT Idx); +- +-VOID DropEx( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem, +- PULONG pCurrState, +- USHORT Idx); +- +-#endif /* __MLME_EX_H__ */ +diff --git a/drivers/staging/rt3090/mlme_ex_def.h b/drivers/staging/rt3090/mlme_ex_def.h +deleted file mode 100644 +index ccd60b4..0000000 +--- a/drivers/staging/rt3090/mlme_ex_def.h ++++ /dev/null +@@ -1,53 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- mlme_ex_def.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Fonchi 2007-06-25 Extend original mlme APIs to support multi-entries +-*/ +-#ifndef __MLME_EX_DEF_H__ +-#define __MLME_EX_DEF_H__ +- +- +-typedef VOID (*STATE_MACHINE_FUNC_EX)(VOID *Adaptor, MLME_QUEUE_ELEM *Elem, PULONG pCurrState, USHORT Idx); +- +-typedef struct _STA_STATE_MACHINE_EX +-{ +- ULONG Base; +- ULONG NrState; +- ULONG NrMsg; +- ULONG CurrState; +- STATE_MACHINE_FUNC_EX *TransFunc; +-} STATE_MACHINE_EX, *PSTA_STATE_MACHINE_EX; +- +-#endif // __MLME_EX_DEF_H__ // +diff --git a/drivers/staging/rt3090/netif_block.h b/drivers/staging/rt3090/netif_block.h +deleted file mode 100644 +index 9e75389..0000000 +--- a/drivers/staging/rt3090/netif_block.h ++++ /dev/null +@@ -1,56 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __NET_IF_BLOCK_H__ +-#define __NET_IF_BLOCK_H__ +- +-#include "link_list.h" +-#include "rtmp.h" +- +-#define FREE_NETIF_POOL_SIZE 32 +- +-typedef struct _NETIF_ENTRY +-{ +- struct _NETIF_ENTRY *pNext; +- PNET_DEV pNetDev; +-} NETIF_ENTRY, *PNETIF_ENTRY; +- +-void initblockQueueTab( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN blockNetIf( +- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry, +- IN PNET_DEV pNetDev); +- +-VOID releaseNetIf( +- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry); +- +-VOID StopNetIfQueue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +-#endif // __NET_IF_BLOCK_H__ +diff --git a/drivers/staging/rt3090/oid.h b/drivers/staging/rt3090/oid.h +deleted file mode 100644 +index 29a4340..0000000 +--- a/drivers/staging/rt3090/oid.h ++++ /dev/null +@@ -1,1144 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- oid.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +-*/ +-#ifndef _OID_H_ +-#define _OID_H_ +- +-//#include +- +-#ifndef TRUE +-#define TRUE 1 +-#endif +-#ifndef FALSE +-#define FALSE 0 +-#endif +-// +-// IEEE 802.11 Structures and definitions +-// +-#define MAX_TX_POWER_LEVEL 100 /* mW */ +-#define MAX_RSSI_TRIGGER -10 /* dBm */ +-#define MIN_RSSI_TRIGGER -200 /* dBm */ +-#define MAX_FRAG_THRESHOLD 2346 /* byte count */ +-#define MIN_FRAG_THRESHOLD 256 /* byte count */ +-#define MAX_RTS_THRESHOLD 2347 /* byte count */ +- +-// new types for Media Specific Indications +-// Extension channel offset +-#define EXTCHA_NONE 0 +-#define EXTCHA_ABOVE 0x1 +-#define EXTCHA_BELOW 0x3 +- +-// BW +-#define BAND_WIDTH_20 0 +-#define BAND_WIDTH_40 1 +-#define BAND_WIDTH_BOTH 2 +-#define BAND_WIDTH_10 3 // 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. +-// SHORTGI +-#define GAP_INTERVAL_400 1 // only support in HT mode +-#define GAP_INTERVAL_800 0 +-#define GAP_INTERVAL_BOTH 2 +- +-#define NdisMediaStateConnected 1 +-#define NdisMediaStateDisconnected 0 +- +-#define NDIS_802_11_LENGTH_SSID 32 +-#define NDIS_802_11_LENGTH_RATES 8 +-#define NDIS_802_11_LENGTH_RATES_EX 16 +-#define MAC_ADDR_LENGTH 6 +-//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc +-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination +-#define MAX_NUMBER_OF_EVENT 10 // entry # in EVENT table +-#define MAX_NUMBER_OF_MAC 32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 +-#define MAX_NUMBER_OF_ACL 64 +-#define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +-#define MAX_NUMBER_OF_DLS_ENTRY 4 +- +- +-#define RT_QUERY_SIGNAL_CONTEXT 0x0402 +-#define RT_SET_IAPP_PID 0x0404 +-#define RT_SET_APD_PID 0x0405 +-#define RT_SET_DEL_MAC_ENTRY 0x0406 +-#define RT_QUERY_EVENT_TABLE 0x0407 +-// +-// IEEE 802.11 OIDs +-// +-#define OID_GET_SET_TOGGLE 0x8000 +-#define OID_GET_SET_FROM_UI 0x4000 +- +-#define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0103 +-#define OID_802_11_NETWORK_TYPE_IN_USE 0x0104 +-#define OID_802_11_RSSI_TRIGGER 0x0107 +-#define RT_OID_802_11_RSSI 0x0108 //rt2860 only , kathy +-#define RT_OID_802_11_RSSI_1 0x0109 //rt2860 only , kathy +-#define RT_OID_802_11_RSSI_2 0x010A //rt2860 only , kathy +-#define OID_802_11_NUMBER_OF_ANTENNAS 0x010B +-#define OID_802_11_RX_ANTENNA_SELECTED 0x010C +-#define OID_802_11_TX_ANTENNA_SELECTED 0x010D +-#define OID_802_11_SUPPORTED_RATES 0x010E +-#define OID_802_11_ADD_WEP 0x0112 +-#define OID_802_11_REMOVE_WEP 0x0113 +-#define OID_802_11_DISASSOCIATE 0x0114 +-#define OID_802_11_PRIVACY_FILTER 0x0118 +-#define OID_802_11_ASSOCIATION_INFORMATION 0x011E +-#define OID_802_11_TEST 0x011F +- +- +-#define RT_OID_802_11_COUNTRY_REGION 0x0507 +-#define OID_802_11_BSSID_LIST_SCAN 0x0508 +-#define OID_802_11_SSID 0x0509 +-#define OID_802_11_BSSID 0x050A +-#define RT_OID_802_11_RADIO 0x050B +-#define RT_OID_802_11_PHY_MODE 0x050C +-#define RT_OID_802_11_STA_CONFIG 0x050D +-#define OID_802_11_DESIRED_RATES 0x050E +-#define RT_OID_802_11_PREAMBLE 0x050F +-#define OID_802_11_WEP_STATUS 0x0510 +-#define OID_802_11_AUTHENTICATION_MODE 0x0511 +-#define OID_802_11_INFRASTRUCTURE_MODE 0x0512 +-#define RT_OID_802_11_RESET_COUNTERS 0x0513 +-#define OID_802_11_RTS_THRESHOLD 0x0514 +-#define OID_802_11_FRAGMENTATION_THRESHOLD 0x0515 +-#define OID_802_11_POWER_MODE 0x0516 +-#define OID_802_11_TX_POWER_LEVEL 0x0517 +-#define RT_OID_802_11_ADD_WPA 0x0518 +-#define OID_802_11_REMOVE_KEY 0x0519 +-#define OID_802_11_ADD_KEY 0x0520 +-#define OID_802_11_CONFIGURATION 0x0521 +-#define OID_802_11_TX_PACKET_BURST 0x0522 +-#define RT_OID_802_11_QUERY_NOISE_LEVEL 0x0523 +-#define RT_OID_802_11_EXTRA_INFO 0x0524 +-#ifdef DBG +-#define RT_OID_802_11_HARDWARE_REGISTER 0x0525 +-#endif +-#define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS +-#define OID_802_11_DEAUTHENTICATION 0x0526 +-#define OID_802_11_DROP_UNENCRYPTED 0x0527 +-#define OID_802_11_MIC_FAILURE_REPORT_FRAME 0x0528 +-#define OID_802_11_EAP_METHOD 0x0529 +- +-// For 802.1x daemin using to require current driver configuration +-#define OID_802_11_RADIUS_QUERY_SETTING 0x0540 +- +-#define RT_OID_DEVICE_NAME 0x0607 +-#define RT_OID_VERSION_INFO 0x0608 +-#define OID_802_11_BSSID_LIST 0x0609 +-#define OID_802_3_CURRENT_ADDRESS 0x060A +-#define OID_GEN_MEDIA_CONNECT_STATUS 0x060B +-#define RT_OID_802_11_QUERY_LINK_STATUS 0x060C +-#define OID_802_11_RSSI 0x060D +-#define OID_802_11_STATISTICS 0x060E +-#define OID_GEN_RCV_OK 0x060F +-#define OID_GEN_RCV_NO_BUFFER 0x0610 +-#define RT_OID_802_11_QUERY_EEPROM_VERSION 0x0611 +-#define RT_OID_802_11_QUERY_FIRMWARE_VERSION 0x0612 +-#define RT_OID_802_11_QUERY_LAST_RX_RATE 0x0613 +-#define RT_OID_802_11_TX_POWER_LEVEL_1 0x0614 +-#define RT_OID_802_11_QUERY_PIDVID 0x0615 +-//for WPA_SUPPLICANT_SUPPORT +-#define OID_SET_COUNTERMEASURES 0x0616 +-#define OID_802_11_SET_IEEE8021X 0x0617 +-#define OID_802_11_SET_IEEE8021X_REQUIRE_KEY 0x0618 +-#define OID_802_11_PMKID 0x0620 +-#define RT_OID_WPA_SUPPLICANT_SUPPORT 0x0621 +-#define RT_OID_WE_VERSION_COMPILED 0x0622 +-#define RT_OID_NEW_DRIVER 0x0623 +- +-#define RT_OID_802_11_SNR_0 0x0630 +-#define RT_OID_802_11_SNR_1 0x0631 +-#define RT_OID_802_11_QUERY_LAST_TX_RATE 0x0632 +-#define RT_OID_802_11_QUERY_HT_PHYMODE 0x0633 +-#define RT_OID_802_11_SET_HT_PHYMODE 0x0634 +-#define OID_802_11_RELOAD_DEFAULTS 0x0635 +-#define RT_OID_802_11_QUERY_APSD_SETTING 0x0636 +-#define RT_OID_802_11_SET_APSD_SETTING 0x0637 +-#define RT_OID_802_11_QUERY_APSD_PSM 0x0638 +-#define RT_OID_802_11_SET_APSD_PSM 0x0639 +-#define RT_OID_802_11_QUERY_DLS 0x063A +-#define RT_OID_802_11_SET_DLS 0x063B +-#define RT_OID_802_11_QUERY_DLS_PARAM 0x063C +-#define RT_OID_802_11_SET_DLS_PARAM 0x063D +-#define RT_OID_802_11_QUERY_WMM 0x063E +-#define RT_OID_802_11_SET_WMM 0x063F +-#define RT_OID_802_11_QUERY_IMME_BA_CAP 0x0640 +-#define RT_OID_802_11_SET_IMME_BA_CAP 0x0641 +-#define RT_OID_802_11_QUERY_BATABLE 0x0642 +-#define RT_OID_802_11_ADD_IMME_BA 0x0643 +-#define RT_OID_802_11_TEAR_IMME_BA 0x0644 +-#define RT_OID_DRIVER_DEVICE_NAME 0x0645 +-#define RT_OID_802_11_QUERY_DAT_HT_PHYMODE 0x0646 +-#define RT_OID_QUERY_MULTIPLE_CARD_SUPPORT 0x0647 +-#define OID_802_11_SET_PSPXLINK_MODE 0x0648 +-/*+++ add by woody +++*/ +-#define OID_802_11_SET_PASSPHRASE 0x0649 +-// Ralink defined OIDs +-// Dennis Lee move to platform specific +- +-#define RT_OID_802_11_BSSID (OID_GET_SET_TOGGLE | OID_802_11_BSSID) +-#define RT_OID_802_11_SSID (OID_GET_SET_TOGGLE | OID_802_11_SSID) +-#define RT_OID_802_11_INFRASTRUCTURE_MODE (OID_GET_SET_TOGGLE | OID_802_11_INFRASTRUCTURE_MODE) +-#define RT_OID_802_11_ADD_WEP (OID_GET_SET_TOGGLE | OID_802_11_ADD_WEP) +-#define RT_OID_802_11_ADD_KEY (OID_GET_SET_TOGGLE | OID_802_11_ADD_KEY) +-#define RT_OID_802_11_REMOVE_WEP (OID_GET_SET_TOGGLE | OID_802_11_REMOVE_WEP) +-#define RT_OID_802_11_REMOVE_KEY (OID_GET_SET_TOGGLE | OID_802_11_REMOVE_KEY) +-#define RT_OID_802_11_DISASSOCIATE (OID_GET_SET_TOGGLE | OID_802_11_DISASSOCIATE) +-#define RT_OID_802_11_AUTHENTICATION_MODE (OID_GET_SET_TOGGLE | OID_802_11_AUTHENTICATION_MODE) +-#define RT_OID_802_11_PRIVACY_FILTER (OID_GET_SET_TOGGLE | OID_802_11_PRIVACY_FILTER) +-#define RT_OID_802_11_BSSID_LIST_SCAN (OID_GET_SET_TOGGLE | OID_802_11_BSSID_LIST_SCAN) +-#define RT_OID_802_11_WEP_STATUS (OID_GET_SET_TOGGLE | OID_802_11_WEP_STATUS) +-#define RT_OID_802_11_RELOAD_DEFAULTS (OID_GET_SET_TOGGLE | OID_802_11_RELOAD_DEFAULTS) +-#define RT_OID_802_11_NETWORK_TYPE_IN_USE (OID_GET_SET_TOGGLE | OID_802_11_NETWORK_TYPE_IN_USE) +-#define RT_OID_802_11_TX_POWER_LEVEL (OID_GET_SET_TOGGLE | OID_802_11_TX_POWER_LEVEL) +-#define RT_OID_802_11_RSSI_TRIGGER (OID_GET_SET_TOGGLE | OID_802_11_RSSI_TRIGGER) +-#define RT_OID_802_11_FRAGMENTATION_THRESHOLD (OID_GET_SET_TOGGLE | OID_802_11_FRAGMENTATION_THRESHOLD) +-#define RT_OID_802_11_RTS_THRESHOLD (OID_GET_SET_TOGGLE | OID_802_11_RTS_THRESHOLD) +-#define RT_OID_802_11_RX_ANTENNA_SELECTED (OID_GET_SET_TOGGLE | OID_802_11_RX_ANTENNA_SELECTED) +-#define RT_OID_802_11_TX_ANTENNA_SELECTED (OID_GET_SET_TOGGLE | OID_802_11_TX_ANTENNA_SELECTED) +-#define RT_OID_802_11_SUPPORTED_RATES (OID_GET_SET_TOGGLE | OID_802_11_SUPPORTED_RATES) +-#define RT_OID_802_11_DESIRED_RATES (OID_GET_SET_TOGGLE | OID_802_11_DESIRED_RATES) +-#define RT_OID_802_11_CONFIGURATION (OID_GET_SET_TOGGLE | OID_802_11_CONFIGURATION) +-#define RT_OID_802_11_POWER_MODE (OID_GET_SET_TOGGLE | OID_802_11_POWER_MODE) +-#define RT_OID_802_11_SET_PSPXLINK_MODE (OID_GET_SET_TOGGLE | OID_802_11_SET_PSPXLINK_MODE) +-#define RT_OID_802_11_EAP_METHOD (OID_GET_SET_TOGGLE | OID_802_11_EAP_METHOD) +-#define RT_OID_802_11_SET_PASSPHRASE (OID_GET_SET_TOGGLE | OID_802_11_SET_PASSPHRASE) +- +- +- +-typedef enum _NDIS_802_11_STATUS_TYPE +-{ +- Ndis802_11StatusType_Authentication, +- Ndis802_11StatusType_MediaStreamMode, +- Ndis802_11StatusType_PMKID_CandidateList, +- Ndis802_11StatusTypeMax // not a real type, defined as an upper bound +-} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; +- +-typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; +- +-typedef struct _NDIS_802_11_STATUS_INDICATION +-{ +- NDIS_802_11_STATUS_TYPE StatusType; +-} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; +- +-// 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 +- +-typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST +-{ +- ULONG Length; // Length of structure +- NDIS_802_11_MAC_ADDRESS Bssid; +- ULONG Flags; +-} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; +- +-//Added new types for PMKID Candidate lists. +-typedef struct _PMKID_CANDIDATE { +- NDIS_802_11_MAC_ADDRESS BSSID; +- ULONG Flags; +-} PMKID_CANDIDATE, *PPMKID_CANDIDATE; +- +-typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST +-{ +- ULONG Version; // Version of the structure +- ULONG NumCandidates; // No. of pmkid candidates +- PMKID_CANDIDATE CandidateList[1]; +-} NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; +- +-//Flags for PMKID Candidate list structure +-#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 +- +-// Added new types for OFDM 5G and 2.4G +-typedef enum _NDIS_802_11_NETWORK_TYPE +-{ +- Ndis802_11FH, +- Ndis802_11DS, +- Ndis802_11OFDM5, +- Ndis802_11OFDM24, +- Ndis802_11Automode, +- Ndis802_11OFDM5_N, +- Ndis802_11OFDM24_N, +- Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound +-} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; +- +-typedef struct _NDIS_802_11_NETWORK_TYPE_LIST +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_802_11_NETWORK_TYPE NetworkType [1]; +-} NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST; +- +-typedef enum _NDIS_802_11_POWER_MODE +-{ +- Ndis802_11PowerModeCAM, +- Ndis802_11PowerModeMAX_PSP, +- Ndis802_11PowerModeFast_PSP, +- Ndis802_11PowerModeLegacy_PSP, +- Ndis802_11PowerModeMax // not a real mode, defined as an upper bound +-} NDIS_802_11_POWER_MODE, *PNDIS_802_11_POWER_MODE; +- +-typedef ULONG NDIS_802_11_TX_POWER_LEVEL; // in milliwatts +- +-// +-// Received Signal Strength Indication +-// +-typedef LONG NDIS_802_11_RSSI; // in dBm +- +-typedef struct _NDIS_802_11_CONFIGURATION_FH +-{ +- ULONG Length; // Length of structure +- ULONG HopPattern; // As defined by 802.11, MSB set +- ULONG HopSet; // to one if non-802.11 +- ULONG DwellTime; // units are Kusec +-} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; +- +-typedef struct _NDIS_802_11_CONFIGURATION +-{ +- ULONG Length; // Length of structure +- ULONG BeaconPeriod; // units are Kusec +- ULONG ATIMWindow; // units are Kusec +- ULONG DSConfig; // Frequency, units are kHz +- NDIS_802_11_CONFIGURATION_FH FHConfig; +-} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; +- +-typedef struct _NDIS_802_11_STATISTICS +-{ +- ULONG Length; // Length of structure +- LARGE_INTEGER TransmittedFragmentCount; +- LARGE_INTEGER MulticastTransmittedFrameCount; +- LARGE_INTEGER FailedCount; +- LARGE_INTEGER RetryCount; +- LARGE_INTEGER MultipleRetryCount; +- LARGE_INTEGER RTSSuccessCount; +- LARGE_INTEGER RTSFailureCount; +- LARGE_INTEGER ACKFailureCount; +- LARGE_INTEGER FrameDuplicateCount; +- LARGE_INTEGER ReceivedFragmentCount; +- LARGE_INTEGER MulticastReceivedFrameCount; +- LARGE_INTEGER FCSErrorCount; +- LARGE_INTEGER TKIPLocalMICFailures; +- LARGE_INTEGER TKIPRemoteMICErrors; +- LARGE_INTEGER TKIPICVErrors; +- LARGE_INTEGER TKIPCounterMeasuresInvoked; +- LARGE_INTEGER TKIPReplays; +- LARGE_INTEGER CCMPFormatErrors; +- LARGE_INTEGER CCMPReplays; +- LARGE_INTEGER CCMPDecryptErrors; +- LARGE_INTEGER FourWayHandshakeFailures; +-} NDIS_802_11_STATISTICS, *PNDIS_802_11_STATISTICS; +- +-typedef ULONG NDIS_802_11_KEY_INDEX; +-typedef ULONGLONG NDIS_802_11_KEY_RSC; +- +-#define MAX_RADIUS_SRV_NUM 2 // 802.1x failover number +- +-typedef struct PACKED _RADIUS_SRV_INFO { +- UINT32 radius_ip; +- UINT32 radius_port; +- UCHAR radius_key[64]; +- UCHAR radius_key_len; +-} RADIUS_SRV_INFO, *PRADIUS_SRV_INFO; +- +-typedef struct PACKED _RADIUS_KEY_INFO +-{ +- UCHAR radius_srv_num; +- RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; +- UCHAR ieee8021xWEP; // dynamic WEP +- UCHAR key_index; +- UCHAR key_length; // length of key in bytes +- UCHAR key_material[13]; +-} RADIUS_KEY_INFO, *PRADIUS_KEY_INFO; +- +-// It's used by 802.1x daemon to require relative configuration +-typedef struct PACKED _RADIUS_CONF +-{ +- UINT32 Length; // Length of this structure +- UCHAR mbss_num; // indicate multiple BSS number +- UINT32 own_ip_addr; +- UINT32 retry_interval; +- UINT32 session_timeout_interval; +- UCHAR EAPifname[8][IFNAMSIZ]; +- UCHAR EAPifname_len[8]; +- UCHAR PreAuthifname[8][IFNAMSIZ]; +- UCHAR PreAuthifname_len[8]; +- RADIUS_KEY_INFO RadiusInfo[8]; +-} RADIUS_CONF, *PRADIUS_CONF; +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-// Key mapping keys require a BSSID +-typedef struct _NDIS_802_11_KEY +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; +- UINT KeyLength; // length of key in bytes +- NDIS_802_11_MAC_ADDRESS BSSID; +- NDIS_802_11_KEY_RSC KeyRSC; +- UCHAR KeyMaterial[1]; // variable length depending on above field +-} NDIS_802_11_KEY, *PNDIS_802_11_KEY; +- +-typedef struct _NDIS_802_11_PASSPHRASE +-{ +- UINT KeyLength; // length of key in bytes +- NDIS_802_11_MAC_ADDRESS BSSID; +- UCHAR KeyMaterial[1]; // variable length depending on above field +-} NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; +-#endif // CONFIG_STA_SUPPORT // +- +-typedef struct _NDIS_802_11_REMOVE_KEY +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; +- NDIS_802_11_MAC_ADDRESS BSSID; +-} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; +- +-typedef struct _NDIS_802_11_WEP +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; // 0 is the per-client key, 1-N are the +- // global keys +- UINT KeyLength; // length of key in bytes +- UCHAR KeyMaterial[1];// variable length depending on above field +-} NDIS_802_11_WEP, *PNDIS_802_11_WEP; +- +- +-typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE +-{ +- Ndis802_11IBSS, +- Ndis802_11Infrastructure, +- Ndis802_11AutoUnknown, +- Ndis802_11Monitor, +- Ndis802_11InfrastructureMax // Not a real value, defined as upper bound +-} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; +- +-// Add new authentication modes +-typedef enum _NDIS_802_11_AUTHENTICATION_MODE +-{ +- Ndis802_11AuthModeOpen, +- Ndis802_11AuthModeShared, +- Ndis802_11AuthModeAutoSwitch, +- Ndis802_11AuthModeWPA, +- Ndis802_11AuthModeWPAPSK, +- Ndis802_11AuthModeWPANone, +- Ndis802_11AuthModeWPA2, +- Ndis802_11AuthModeWPA2PSK, +- Ndis802_11AuthModeWPA1WPA2, +- Ndis802_11AuthModeWPA1PSKWPA2PSK, +- Ndis802_11AuthModeMax // Not a real mode, defined as upper bound +-} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; +- +-typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates +-typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates +- +-typedef struct PACKED _NDIS_802_11_SSID +-{ +- UINT SsidLength; // length of SSID field below, in bytes; +- // this can be zero. +- UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; // SSID information field +-} NDIS_802_11_SSID, *PNDIS_802_11_SSID; +- +- +-typedef struct PACKED _NDIS_WLAN_BSSID +-{ +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID +- UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- ULONG Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal strength in dBm +- NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; +- NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +- NDIS_802_11_RATES SupportedRates; +-} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; +- +-typedef struct PACKED _NDIS_802_11_BSSID_LIST +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_WLAN_BSSID Bssid[1]; +-} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; +- +-// Added Capabilities, IELength and IEs for each BSSID +-typedef struct PACKED _NDIS_WLAN_BSSID_EX +-{ +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID +- UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- UINT Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal +- // strength in dBm +- NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; +- NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +- NDIS_802_11_RATES_EX SupportedRates; +- ULONG IELength; +- UCHAR IEs[1]; +-} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; +- +-typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_WLAN_BSSID_EX Bssid[1]; +-} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; +- +-typedef struct PACKED _NDIS_802_11_FIXED_IEs +-{ +- UCHAR Timestamp[8]; +- USHORT BeaconInterval; +- USHORT Capabilities; +-} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; +- +-typedef struct _NDIS_802_11_VARIABLE_IEs +-{ +- UCHAR ElementID; +- UCHAR Length; // Number of bytes in data field +- UCHAR data[1]; +-} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; +- +-typedef ULONG NDIS_802_11_FRAGMENTATION_THRESHOLD; +- +-typedef ULONG NDIS_802_11_RTS_THRESHOLD; +- +-typedef ULONG NDIS_802_11_ANTENNA; +- +-typedef enum _NDIS_802_11_PRIVACY_FILTER +-{ +- Ndis802_11PrivFilterAcceptAll, +- Ndis802_11PrivFilter8021xWEP +-} NDIS_802_11_PRIVACY_FILTER, *PNDIS_802_11_PRIVACY_FILTER; +- +-// Added new encryption types +-// Also aliased typedef to new name +-typedef enum _NDIS_802_11_WEP_STATUS +-{ +- Ndis802_11WEPEnabled, +- Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, +- Ndis802_11WEPDisabled, +- Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, +- Ndis802_11WEPKeyAbsent, +- Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, +- Ndis802_11WEPNotSupported, +- Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, +- Ndis802_11Encryption2Enabled, +- Ndis802_11Encryption2KeyAbsent, +- Ndis802_11Encryption3Enabled, +- Ndis802_11Encryption3KeyAbsent, +- Ndis802_11Encryption4Enabled, // TKIP or AES mix +- Ndis802_11Encryption4KeyAbsent, +- Ndis802_11GroupWEP40Enabled, +- Ndis802_11GroupWEP104Enabled, +-} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, +- NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; +- +-typedef enum _NDIS_802_11_RELOAD_DEFAULTS +-{ +- Ndis802_11ReloadWEPKeys +-} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS; +- +-#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 struct _NDIS_802_11_AI_REQFI +-{ +- USHORT Capabilities; +- USHORT ListenInterval; +- NDIS_802_11_MAC_ADDRESS CurrentAPAddress; +-} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; +- +-typedef struct _NDIS_802_11_AI_RESFI +-{ +- USHORT Capabilities; +- USHORT StatusCode; +- USHORT AssociationId; +-} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; +- +-typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION +-{ +- ULONG Length; +- USHORT AvailableRequestFixedIEs; +- NDIS_802_11_AI_REQFI RequestFixedIEs; +- ULONG RequestIELength; +- ULONG OffsetRequestIEs; +- USHORT AvailableResponseFixedIEs; +- NDIS_802_11_AI_RESFI ResponseFixedIEs; +- ULONG ResponseIELength; +- ULONG OffsetResponseIEs; +-} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; +- +-typedef struct _NDIS_802_11_AUTHENTICATION_EVENT +-{ +- NDIS_802_11_STATUS_INDICATION Status; +- NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; +-} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; +- +-/* +-typedef struct _NDIS_802_11_TEST +-{ +- ULONG Length; +- ULONG Type; +- union +- { +- NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent; +- NDIS_802_11_RSSI RssiTrigger; +- }; +-} NDIS_802_11_TEST, *PNDIS_802_11_TEST; +- */ +- +-// 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE +-typedef enum _NDIS_802_11_MEDIA_STREAM_MODE +-{ +- Ndis802_11MediaStreamOff, +- Ndis802_11MediaStreamOn, +-} NDIS_802_11_MEDIA_STREAM_MODE, *PNDIS_802_11_MEDIA_STREAM_MODE; +- +-// PMKID Structures +-typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; +- +-#ifdef CONFIG_STA_SUPPORT +-typedef struct _BSSID_INFO +-{ +- NDIS_802_11_MAC_ADDRESS BSSID; +- NDIS_802_11_PMKID_VALUE PMKID; +-} BSSID_INFO, *PBSSID_INFO; +- +-typedef struct _NDIS_802_11_PMKID +-{ +- UINT Length; +- UINT BSSIDInfoCount; +- BSSID_INFO BSSIDInfo[1]; +-} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID; +-#endif // CONFIG_STA_SUPPORT // +- +- +-typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION +-{ +- NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported; +- NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported; +-} NDIS_802_11_AUTHENTICATION_ENCRYPTION, *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; +- +-typedef struct _NDIS_802_11_CAPABILITY +-{ +- ULONG Length; +- ULONG Version; +- ULONG NoOfPMKIDs; +- ULONG NoOfAuthEncryptPairsSupported; +- NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1]; +-} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; +- +-#ifdef LINUX +-#if WIRELESS_EXT <= 11 +-#ifndef SIOCDEVPRIVATE +-#define SIOCDEVPRIVATE 0x8BE0 +-#endif +-#define SIOCIWFIRSTPRIV SIOCDEVPRIVATE +-#endif +-#endif // LINUX // +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon +-#define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) +- +-#ifdef DBG +-#define RTPRIV_IOCTL_BBP (SIOCIWFIRSTPRIV + 0x03) +-#define RTPRIV_IOCTL_MAC (SIOCIWFIRSTPRIV + 0x05) +- +-#ifdef RTMP_RF_RW_SUPPORT +-// TODO: shiang, Need to reassign the oid number. ArchTeam use (SIOCIWFIRSTPRIV + 0x19) for this oid +-#define RTPRIV_IOCTL_RF (SIOCIWFIRSTPRIV + 0x13) // edit by johnli, fix read rf register problem +-#endif // RTMP_RF_RW_SUPPORT // +- +-#define RTPRIV_IOCTL_E2P (SIOCIWFIRSTPRIV + 0x07) +-#endif // DBG // +- +-#ifdef RALINK_ATE +-#ifdef RALINK_28xx_QA +-#define RTPRIV_IOCTL_ATE (SIOCIWFIRSTPRIV + 0x08) +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +-#define RTPRIV_IOCTL_STATISTICS (SIOCIWFIRSTPRIV + 0x09) +-#define RTPRIV_IOCTL_ADD_PMKID_CACHE (SIOCIWFIRSTPRIV + 0x0A) +-#define RTPRIV_IOCTL_RADIUS_DATA (SIOCIWFIRSTPRIV + 0x0C) +-#define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D) +-#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) +-#define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) +- +-#define RTPRIV_IOCTL_SHOW (SIOCIWFIRSTPRIV + 0x11) +-enum { +- SHOW_CONN_STATUS = 4, +- SHOW_DRVIER_VERION = 5, +- SHOW_BA_INFO = 6, +- SHOW_DESC_INFO = 7, +- RAIO_OFF = 10, +- RAIO_ON = 11, +-#ifdef QOS_DLS_SUPPORT +- SHOW_DLS_ENTRY_INFO = 19, +-#endif // QOS_DLS_SUPPORT // +- SHOW_CFG_VALUE = 20, +- SHOW_ADHOC_ENTRY_INFO = 21, +-}; +- +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-#ifdef SNMP_SUPPORT +-//SNMP ieee 802dot11, kathy , 2008_0220 +-// dot11res(3) +-#define RT_OID_802_11_MANUFACTUREROUI 0x0700 +-#define RT_OID_802_11_MANUFACTURERNAME 0x0701 +-#define RT_OID_802_11_RESOURCETYPEIDNAME 0x0702 +- +-// dot11smt(1) +-#define RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED 0x0703 +-#define RT_OID_802_11_POWERMANAGEMENTMODE 0x0704 +-#define OID_802_11_WEPDEFAULTKEYVALUE 0x0705 // read , write +-#define OID_802_11_WEPDEFAULTKEYID 0x0706 +-#define RT_OID_802_11_WEPKEYMAPPINGLENGTH 0x0707 +-#define OID_802_11_SHORTRETRYLIMIT 0x0708 +-#define OID_802_11_LONGRETRYLIMIT 0x0709 +-#define RT_OID_802_11_PRODUCTID 0x0710 +-#define RT_OID_802_11_MANUFACTUREID 0x0711 +- +-// //dot11Phy(4) +-#define OID_802_11_CURRENTCHANNEL 0x0712 +- +-//dot11mac +-#define RT_OID_802_11_MAC_ADDRESS 0x0713 +-#endif // SNMP_SUPPORT // +- +-#define OID_802_11_BUILD_CHANNEL_EX 0x0714 +-#define OID_802_11_GET_CH_LIST 0x0715 +-#define OID_802_11_GET_COUNTRY_CODE 0x0716 +-#define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717 +- +-//#define RT_OID_802_11_STATISTICS (OID_GET_SET_TOGGLE | OID_802_11_STATISTICS) +- +-#ifdef CONFIG_STA_SUPPORT +-#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk +-#define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741 +-#define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742 +-#define RT_OID_WSC_SET_CONN_BY_PROFILE_INDEX 0x0743 +-#define RT_OID_WSC_SET_ACTION 0x0744 +-#define RT_OID_WSC_SET_SSID 0x0745 +-#define RT_OID_WSC_SET_PIN_CODE 0x0746 +-#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC +-#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar +-#define RT_OID_WSC_SET_PROFILE 0x0749 +-#endif // CONFIG_STA_SUPPORT // +-#define RT_OID_WSC_CONFIG_STATUS 0x074F +-#define RT_OID_802_11_WSC_QUERY_PROFILE 0x0750 +-// for consistency with RT61 +-#define RT_OID_WSC_QUERY_STATUS 0x0751 +-#define RT_OID_WSC_PIN_CODE 0x0752 +-#define RT_OID_WSC_UUID 0x0753 +-#define RT_OID_WSC_SET_SELECTED_REGISTRAR 0x0754 +-#define RT_OID_WSC_EAPMSG 0x0755 +-#define RT_OID_WSC_MANUFACTURER 0x0756 +-#define RT_OID_WSC_MODEL_NAME 0x0757 +-#define RT_OID_WSC_MODEL_NO 0x0758 +-#define RT_OID_WSC_SERIAL_NO 0x0759 +-#define RT_OID_WSC_MAC_ADDRESS 0x0760 +- +-#ifdef LLTD_SUPPORT +-// for consistency with RT61 +-#define RT_OID_GET_PHY_MODE 0x761 +-#endif // LLTD_SUPPORT // +- +-#ifdef NINTENDO_AP +-//#define RT_OID_NINTENDO 0x0D010770 +-#define RT_OID_802_11_NINTENDO_GET_TABLE 0x0771 //((RT_OID_NINTENDO + 0x01) & 0xffff) +-#define RT_OID_802_11_NINTENDO_SET_TABLE 0x0772 //((RT_OID_NINTENDO + 0x02) & 0xffff) +-#define RT_OID_802_11_NINTENDO_CAPABLE 0x0773 //((RT_OID_NINTENDO + 0x03) & 0xffff) +-#endif // NINTENDO_AP // +- +- +-// New for MeetingHouse Api support +-#define OID_MH_802_1X_SUPPORTED 0xFFEDC100 +- +-// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! +-typedef union _HTTRANSMIT_SETTING { +-#ifdef RT_BIG_ENDIAN +- struct { +- USHORT MODE:2; // Use definition MODE_xxx. +-// USHORT rsv:3; +- USHORT TxBF:1; +- USHORT rsv:2; +- USHORT STBC:2; //SPACE +- USHORT ShortGI:1; +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz +- USHORT MCS:7; // MCS +- } field; +-#else +- struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz +- USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +-// USHORT rsv:3; +- USHORT rsv:2; +- USHORT TxBF:1; +- USHORT MODE:2; // Use definition MODE_xxx. +- } field; +-#endif +- USHORT word; +- } HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING; +- +-typedef enum _RT_802_11_PREAMBLE { +- Rt802_11PreambleLong, +- Rt802_11PreambleShort, +- Rt802_11PreambleAuto +-} RT_802_11_PREAMBLE, *PRT_802_11_PREAMBLE; +- +-typedef enum _RT_802_11_PHY_MODE { +- PHY_11BG_MIXED = 0, +- PHY_11B, +- PHY_11A, +- PHY_11ABG_MIXED, +- PHY_11G, +-#ifdef DOT11_N_SUPPORT +- PHY_11ABGN_MIXED, // both band 5 +- PHY_11N_2_4G, // 11n-only with 2.4G band 6 +- PHY_11GN_MIXED, // 2.4G band 7 +- PHY_11AN_MIXED, // 5G band 8 +- PHY_11BGN_MIXED, // if check 802.11b. 9 +- PHY_11AGN_MIXED, // if check 802.11b. 10 +- PHY_11N_5G, // 11n-only with 5G band 11 +-#endif // DOT11_N_SUPPORT // +-} RT_802_11_PHY_MODE; +- +- +-// put all proprietery for-query objects here to reduce # of Query_OID +-typedef struct _RT_802_11_LINK_STATUS { +- ULONG CurrTxRate; // in units of 0.5Mbps +- ULONG ChannelQuality; // 0..100 % +- ULONG TxByteCount; // both ok and fail +- ULONG RxByteCount; // both ok and fail +- ULONG CentralChannel; // 40MHz central channel number +-} RT_802_11_LINK_STATUS, *PRT_802_11_LINK_STATUS; +- +-typedef struct _RT_802_11_EVENT_LOG { +- LARGE_INTEGER SystemTime; // timestammp via NdisGetCurrentSystemTime() +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Event; // EVENT_xxx +-} RT_802_11_EVENT_LOG, *PRT_802_11_EVENT_LOG; +- +-typedef struct _RT_802_11_EVENT_TABLE { +- ULONG Num; +- ULONG Rsv; // to align Log[] at LARGE_INEGER boundary +- RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; +-} RT_802_11_EVENT_TABLE, PRT_802_11_EVENT_TABLE; +- +-// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! +-typedef union _MACHTTRANSMIT_SETTING { +- struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz +- USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +- USHORT rsv:3; +- USHORT MODE:2; // Use definition MODE_xxx. +- } field; +- USHORT word; +- } MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; +- +-typedef struct _RT_802_11_MAC_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- UCHAR Aid; +- UCHAR Psm; // 0:PWR_ACTIVE, 1:PWR_SAVE +- UCHAR MimoPs; // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- UINT32 ConnectedTime; +- MACHTTRANSMIT_SETTING TxRate; +-} RT_802_11_MAC_ENTRY, *PRT_802_11_MAC_ENTRY; +- +-typedef struct _RT_802_11_MAC_TABLE { +- ULONG Num; +- RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; +-} RT_802_11_MAC_TABLE, *PRT_802_11_MAC_TABLE; +- +-// structure for query/set hardware register - MAC, BBP, RF register +-typedef struct _RT_802_11_HARDWARE_REGISTER { +- ULONG HardwareType; // 0:MAC, 1:BBP, 2:RF register, 3:EEPROM +- ULONG Offset; // Q/S register offset addr +- ULONG Data; // R/W data buffer +-} RT_802_11_HARDWARE_REGISTER, *PRT_802_11_HARDWARE_REGISTER; +- +-typedef struct _RT_802_11_AP_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG IsolateInterStaTraffic; // 0-disable, 1-enable isolation +- ULONG HideSsid; // 0-disable, 1-enable hiding +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY +-} RT_802_11_AP_CONFIG, *PRT_802_11_AP_CONFIG; +- +-// structure to query/set STA_CONFIG +-typedef struct _RT_802_11_STA_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time when applicable +- ULONG AdhocMode; // 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only +- ULONG HwRadioStatus; // 0-OFF, 1-ON, default is 1, Read-Only +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY +-} RT_802_11_STA_CONFIG, *PRT_802_11_STA_CONFIG; +- +-// +-// For OID Query or Set about BA structure +-// +-typedef struct _OID_BACAP_STRUC { +- UCHAR RxBAWinLimit; +- UCHAR TxBAWinLimit; +- UCHAR Policy; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR MpduDensity; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR AmsduEnable; //Enable AMSDU transmisstion +- UCHAR AmsduSize; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; +- UCHAR MMPSmode; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable +- BOOLEAN AutoBA; // Auto BA will automatically +-} OID_BACAP_STRUC, *POID_BACAP_STRUC; +- +-typedef struct _RT_802_11_ACL_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Rsv; +-} RT_802_11_ACL_ENTRY, *PRT_802_11_ACL_ENTRY; +- +-typedef struct PACKED _RT_802_11_ACL { +- ULONG Policy; // 0-disable, 1-positive list, 2-negative list +- ULONG Num; +- RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; +-} RT_802_11_ACL, *PRT_802_11_ACL; +- +-typedef struct _RT_802_11_WDS { +- ULONG Num; +- NDIS_802_11_MAC_ADDRESS Entry[24/*MAX_NUM_OF_WDS_LINK*/]; +- ULONG KeyLength; +- UCHAR KeyMaterial[32]; +-} RT_802_11_WDS, *PRT_802_11_WDS; +- +-typedef struct _RT_802_11_TX_RATES_ { +- UCHAR SupRateLen; +- UCHAR SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; +- UCHAR ExtRateLen; +- UCHAR ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; +-} RT_802_11_TX_RATES, *PRT_802_11_TX_RATES; +- +- +-// Definition of extra information code +-#define GENERAL_LINK_UP 0x0 // Link is Up +-#define GENERAL_LINK_DOWN 0x1 // Link is Down +-#define HW_RADIO_OFF 0x2 // Hardware radio off +-#define SW_RADIO_OFF 0x3 // Software radio off +-#define AUTH_FAIL 0x4 // Open authentication fail +-#define AUTH_FAIL_KEYS 0x5 // Shared authentication fail +-#define ASSOC_FAIL 0x6 // Association failed +-#define EAP_MIC_FAILURE 0x7 // Deauthencation because MIC failure +-#define EAP_4WAY_TIMEOUT 0x8 // Deauthencation on 4-way handshake timeout +-#define EAP_GROUP_KEY_TIMEOUT 0x9 // Deauthencation on group key handshake timeout +-#define EAP_SUCCESS 0xa // EAP succeed +-#define DETECT_RADAR_SIGNAL 0xb // Radar signal occur in current channel +-#define EXTRA_INFO_MAX 0xb // Indicate Last OID +- +-#define EXTRA_INFO_CLEAR 0xffffffff +- +-// This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. +-typedef struct { +- RT_802_11_PHY_MODE PhyMode; // +- UCHAR TransmitNo; +- UCHAR HtMode; //HTMODE_GF or HTMODE_MM +- UCHAR ExtOffset; //extension channel above or below +- UCHAR MCS; +- UCHAR BW; +- UCHAR STBC; +- UCHAR SHORTGI; +- UCHAR rsv; +-} OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE; +- +-#ifdef NINTENDO_AP +-#define NINTENDO_MAX_ENTRY 16 +-#define NINTENDO_SSID_NAME_LN 8 +-#define NINTENDO_SSID_NAME "NWCUSBAP" +-#define NINTENDO_PROBE_REQ_FLAG_MASK 0x03 +-#define NINTENDO_PROBE_REQ_ON 0x01 +-#define NINTENDO_PROBE_REQ_SIGNAL 0x02 +-#define NINTENDO_PROBE_RSP_ON 0x01 +-#define NINTENDO_SSID_NICKNAME_LN 20 +- +-#define NINTENDO_WEPKEY_LN 13 +- +-typedef struct _NINTENDO_SSID +-{ +- UCHAR NINTENDOFixChar[NINTENDO_SSID_NAME_LN]; +- UCHAR zero1; +- UCHAR registe; +- UCHAR ID; +- UCHAR zero2; +- UCHAR NICKname[NINTENDO_SSID_NICKNAME_LN]; +-} RT_NINTENDO_SSID, *PRT_NINTENDO_SSID; +- +-typedef struct _NINTENDO_ENTRY +-{ +- UCHAR NICKname[NINTENDO_SSID_NICKNAME_LN]; +- UCHAR DS_Addr[ETH_LENGTH_OF_ADDRESS]; +- UCHAR registe; +- UCHAR UserSpaceAck; +-} RT_NINTENDO_ENTRY, *PRT_NINTENDO_ENTRY; +- +-//RTPRIV_IOCTL_NINTENDO_GET_TABLE +-//RTPRIV_IOCTL_NINTENDO_SET_TABLE +-typedef struct _NINTENDO_TABLE +-{ +- UINT number; +- RT_NINTENDO_ENTRY entry[NINTENDO_MAX_ENTRY]; +-} RT_NINTENDO_TABLE, *PRT_NINTENDO_TABLE; +- +-//RTPRIV_IOCTL_NINTENDO_SEED_WEPKEY +-typedef struct _NINTENDO_SEED_WEPKEY +-{ +- UCHAR seed[NINTENDO_SSID_NICKNAME_LN]; +- UCHAR wepkey[16];//use 13 for 104 bits wep key +-} RT_NINTENDO_SEED_WEPKEY, *PRT_NINTENDO_SEED_WEPKEY; +-#endif // NINTENDO_AP // +- +-#ifdef LLTD_SUPPORT +-typedef struct _RT_LLTD_ASSOICATION_ENTRY { +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; +- unsigned short MOR; // maximum operational rate +- UCHAR phyMode; +-} RT_LLTD_ASSOICATION_ENTRY, *PRT_LLTD_ASSOICATION_ENTRY; +- +-typedef struct _RT_LLTD_ASSOICATION_TABLE { +- unsigned int Num; +- RT_LLTD_ASSOICATION_ENTRY Entry[MAX_NUMBER_OF_MAC]; +-} RT_LLTD_ASSOICATION_TABLE, *PRT_LLTD_ASSOICATION_TABLE; +-#endif // LLTD_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +-//rt2860, kathy 2007-0118 +-// structure for DLS +-typedef struct _RT_802_11_DLS_UI { +- USHORT TimeOut; // unit: second , set by UI +- USHORT CountDownTimer; // unit: second , used by driver only +- NDIS_802_11_MAC_ADDRESS MacAddr; // set by UI +- UCHAR Status; // 0: none , 1: wait STAkey, 2: finish DLS setup , set by driver only +- BOOLEAN Valid; // 1: valid , 0: invalid , set by UI, use to setup or tear down DLS link +-} RT_802_11_DLS_UI, *PRT_802_11_DLS_UI; +- +-typedef struct _RT_802_11_DLS_INFO { +- RT_802_11_DLS_UI Entry[MAX_NUMBER_OF_DLS_ENTRY]; +- UCHAR num; +-} RT_802_11_DLS_INFO, *PRT_802_11_DLS_INFO; +- +-typedef enum _RT_802_11_DLS_MODE { +- DLS_NONE, +- DLS_WAIT_KEY, +- DLS_FINISH +-} RT_802_11_DLS_MODE; +-#endif // QOS_DLS_SUPPORT // +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +-#define RT_ASSOC_EVENT_FLAG 0x0101 +-#define RT_DISASSOC_EVENT_FLAG 0x0102 +-#define RT_REQIE_EVENT_FLAG 0x0103 +-#define RT_RESPIE_EVENT_FLAG 0x0104 +-#define RT_ASSOCINFO_EVENT_FLAG 0x0105 +-#define RT_PMKIDCAND_FLAG 0x0106 +-#define RT_INTERFACE_DOWN 0x0107 +-#define RT_INTERFACE_UP 0x0108 +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- +-#define MAX_CUSTOM_LEN 128 +- +-#ifdef CONFIG_STA_SUPPORT +-typedef enum _RT_802_11_D_CLIENT_MODE +-{ +- Rt802_11_D_None, +- Rt802_11_D_Flexible, +- Rt802_11_D_Strict, +-} RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE; +-#endif // CONFIG_STA_SUPPORT // +- +-typedef struct _RT_CHANNEL_LIST_INFO +-{ +- UCHAR ChannelList[MAX_NUM_OF_CHS]; // list all supported channels for site survey +- UCHAR ChannelListNum; // number of channel in ChannelList[] +-} RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; +- +-// WSC configured credential +-typedef struct _WSC_CREDENTIAL +-{ +- NDIS_802_11_SSID SSID; // mandatory +- USHORT AuthType; // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk +- USHORT EncrType; // mandatory, 1: none, 2: wep, 4: tkip, 8: aes +- UCHAR Key[64]; // mandatory, Maximum 64 byte +- USHORT KeyLength; +- UCHAR MacAddr[6]; // mandatory, AP MAC address +- UCHAR KeyIndex; // optional, default is 1 +- UCHAR Rsvd[3]; // Make alignment +-} WSC_CREDENTIAL, *PWSC_CREDENTIAL; +- +-// WSC configured profiles +-typedef struct _WSC_PROFILE +-{ +- UINT ProfileCnt; +- UINT ApplyProfileIdx; // add by johnli, fix WPS test plan 5.1.1 +- WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles +-} WSC_PROFILE, *PWSC_PROFILE; +- +- +- +-#endif // _OID_H_ +diff --git a/drivers/staging/rt3090/pci_main_dev.c b/drivers/staging/rt3090/pci_main_dev.c +deleted file mode 100644 +index 1410156..0000000 +--- a/drivers/staging/rt3090/pci_main_dev.c ++++ /dev/null +@@ -1,1195 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- pci_main_dev.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +-*/ +- +- +-#include "rt_config.h" +-#include +- +-// Following information will be show when you run 'modinfo' +-// *** If you have a solution for the bug in current version of driver, please mail to me. +-// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** +-MODULE_AUTHOR("Jett Chen "); +-MODULE_DESCRIPTION("RT3090 Wireless Lan Linux Driver"); +-MODULE_LICENSE("GPL"); +- +-// +-// Function declarations +-// +-extern int rt28xx_close(IN struct net_device *net_dev); +-extern int rt28xx_open(struct net_device *net_dev); +- +-static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev); +-static INT __devinit rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent); +-static void __exit rt2860_cleanup_module(void); +-static int __init rt2860_init_module(void); +- +- +- static VOID RTMPInitPCIeDevice( +- IN struct pci_dev *pci_dev, +- IN PRTMP_ADAPTER pAd); +- +- +-#ifdef CONFIG_PM +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) +-#define pm_message_t u32 +-#endif +- +-static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); +-static int rt2860_resume(struct pci_dev *pci_dev); +-#endif +-#endif // CONFIG_PM // +- +-// +-// Ralink PCI device table, include all supported chipsets +-// +-static struct pci_device_id rt2860_pci_tbl[] __devinitdata = +-{ +-#ifdef RT3090 +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3090_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3091_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3092_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(0x1462, 0x891A)}, +-#endif // RT3090 // +-#ifdef RT3390 +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3390_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3391_PCIe_DEVICE_ID)}, +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3392_PCIe_DEVICE_ID)}, +-#endif // RT3390 // +- {0,} // terminate list +-}; +- +-MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); +-#ifdef CONFIG_STA_SUPPORT +-#ifdef MODULE_VERSION +-MODULE_VERSION(STA_DRIVER_VERSION); +-#endif +-#endif // CONFIG_STA_SUPPORT // +- +- +-// +-// Our PCI driver structure +-// +-static struct pci_driver rt2860_driver = +-{ +- name: "rt3090", +- id_table: rt2860_pci_tbl, +- probe: rt2860_probe, +-#if LINUX_VERSION_CODE >= 0x20412 +- remove: __devexit_p(rt2860_remove_one), +-#else +- remove: __devexit(rt2860_remove_one), +-#endif +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#ifdef CONFIG_PM +- suspend: rt2860_suspend, +- resume: rt2860_resume, +-#endif +-#endif +-}; +- +- +-/*************************************************************************** +- * +- * PCI device initialization related procedures. +- * +- ***************************************************************************/ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#ifdef CONFIG_PM +- +-VOID RT2860RejectPendingPackets( +- IN PRTMP_ADAPTER pAd) +-{ +- // clear PS packets +- // clear TxSw packets +-} +- +-static int rt2860_suspend( +- struct pci_dev *pci_dev, +- pm_message_t state) +-{ +- struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- INT32 retval = 0; +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); +- +- if (net_dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- { +- pAd = (PRTMP_ADAPTER)RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- /* we can not use IFF_UP because ra0 down but ra1 up */ +- /* and 1 suspend/resume function for 1 module, not for each interface */ +- /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { +- // avoid users do suspend after interface is down +- +- // stop interface +- netif_carrier_off(net_dev); +- netif_stop_queue(net_dev); +- +- // mark device as removed from system and therefore no longer available +- netif_device_detach(net_dev); +- +- // mark halt flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // take down the device +- rt28xx_close((PNET_DEV)net_dev); +- +- RT_MOD_DEC_USE_COUNT(); +- } +- } +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) +- // reference to http://vovo2000.com/type-lab/linux/kernel-api/linux-kernel-api.html +- // enable device to generate PME# when suspended +- // pci_choose_state(): Choose the power state of a PCI device to be suspended +- retval = pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), 1); +- // save the PCI configuration space of a device before suspending +- pci_save_state(pci_dev); +- // disable PCI device after use +- pci_disable_device(pci_dev); +- +- retval = pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); +-#endif +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_suspend()\n")); +- return retval; +-} +- +-static int rt2860_resume( +- struct pci_dev *pci_dev) +-{ +- struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) +- INT32 retval; +- +- +- // set the power state of a PCI device +- // PCI has 4 power states, DO (normal) ~ D3(less power) +- // in include/linux/pci.h, you can find that +- // #define PCI_D0 ((pci_power_t __force) 0) +- // #define PCI_D1 ((pci_power_t __force) 1) +- // #define PCI_D2 ((pci_power_t __force) 2) +- // #define PCI_D3hot ((pci_power_t __force) 3) +- // #define PCI_D3cold ((pci_power_t __force) 4) +- // #define PCI_UNKNOWN ((pci_power_t __force) 5) +- // #define PCI_POWER_ERROR ((pci_power_t __force) -1) +- retval = pci_set_power_state(pci_dev, PCI_D0); +- +- // restore the saved state of a PCI device +- pci_restore_state(pci_dev); +- +- // initialize device before it's used by a driver +- if (pci_enable_device(pci_dev)) +- { +- printk("pci enable fail!\n"); +- return 0; +- } +-#endif +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_resume()\n")); +- +- if (net_dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- pAd = (PRTMP_ADAPTER)RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- if (pAd != NULL) +- { +- /* we can not use IFF_UP because ra0 down but ra1 up */ +- /* and 1 suspend/resume function for 1 module, not for each interface */ +- /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { +- // mark device as attached from system and restart if needed +- netif_device_attach(net_dev); +- +- if (rt28xx_open((PNET_DEV)net_dev) != 0) +- { +- // open fail +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); +- return 0; +- } +- +- // increase MODULE use count +- RT_MOD_INC_USE_COUNT(); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- netif_start_queue(net_dev); +- netif_carrier_on(net_dev); +- netif_wake_queue(net_dev); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); +- return 0; +-} +-#endif // CONFIG_PM // +-#endif +- +- +-static INT __init rt2860_init_module(VOID) +-{ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- return pci_register_driver(&rt2860_driver); +-#else +- return pci_module_init(&rt2860_driver); +-#endif +-} +- +- +-// +-// Driver module unload function +-// +-static VOID __exit rt2860_cleanup_module(VOID) +-{ +- pci_unregister_driver(&rt2860_driver); +-} +- +-module_init(rt2860_init_module); +-module_exit(rt2860_cleanup_module); +- +- +-// +-// PCI device probe & initialization function +-// +-static INT __devinit rt2860_probe( +- IN struct pci_dev *pci_dev, +- IN const struct pci_device_id *pci_id) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- struct net_device *net_dev; +- PVOID handle; +- PSTRING print_name; +- ULONG csr_addr; +- INT rv = 0; +- RTMP_OS_NETDEV_OP_HOOK netDevHook; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); +- +-//PCIDevInit============================================== +- // wake up and enable device +- if ((rv = pci_enable_device(pci_dev))!= 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Enable PCI device failed, errno=%d!\n", rv)); +- return rv; +- } +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- print_name = pci_dev ? pci_name(pci_dev) : "rt3090"; +-#else +- print_name = pci_dev ? pci_dev->slot_name : "rt3090"; +-#endif // LINUX_VERSION_CODE // +- +- if ((rv = pci_request_regions(pci_dev, print_name)) != 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Request PCI resource failed, errno=%d!\n", rv)); +- goto err_out; +- } +- +- // map physical address to virtual address for accessing register +- csr_addr = (unsigned long) ioremap(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- if (!csr_addr) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", +- print_name, (ULONG)pci_resource_len(pci_dev, 0), (ULONG)pci_resource_start(pci_dev, 0))); +- goto err_out_free_res; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name, +- (ULONG)pci_resource_start(pci_dev, 0), (ULONG)csr_addr, pci_dev->irq)); +- } +- +- // Set DMA master +- pci_set_master(pci_dev); +- +- +-//RtmpDevInit============================================== +- // Allocate RTMP_ADAPTER adapter structure +- handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); +- if (handle == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(): Allocate memory for os handle failed!\n", __FUNCTION__)); +- goto err_out_iounmap; +- } +- +- ((POS_COOKIE)handle)->pci_dev = pci_dev; +- +- rv = RTMPAllocAdapterBlock(handle, &pAd); //shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" +- if (rv != NDIS_STATUS_SUCCESS) +- goto err_out_iounmap; +- // Here are the RTMP_ADAPTER structure with pci-bus specific parameters. +- pAd->CSRBaseAddress = (PUCHAR)csr_addr; +- DBGPRINT(RT_DEBUG_ERROR, ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", (ULONG)pAd->CSRBaseAddress, csr_addr)); +- RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_PCI); +- +- +-//NetDevInit============================================== +- net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); +- if (net_dev == NULL) +- goto err_out_free_radev; +- +- // Here are the net_device structure with pci-bus specific parameters. +- net_dev->irq = pci_dev->irq; // Interrupt IRQ number +- net_dev->base_addr = csr_addr; // Save CSR virtual address and irq to device structure +- pci_set_drvdata(pci_dev, net_dev); // Set driver data +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-/* for supporting Network Manager */ +- /* Set the sysfs physical device reference for the network logical device +- * if set prior to registration will cause a symlink during initialization. +- */ +-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) +- SET_NETDEV_DEV(net_dev, &(pci_dev->dev)); +-#endif +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +- +-//All done, it's time to register the net device to linux kernel. +- // Register this device +- rv = RtmpOSNetDevAttach(net_dev, &netDevHook); +- if (rv) +- goto err_out_free_netdev; +- +-#ifdef CONFIG_STA_SUPPORT +- pAd->StaCfg.OriDevType = net_dev->type; +-#endif // CONFIG_STA_SUPPORT // +-RTMPInitPCIeDevice(pci_dev, pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_probe\n")); +- +- return 0; // probe ok +- +- +- /* --------------------------- ERROR HANDLE --------------------------- */ +-err_out_free_netdev: +- RtmpOSNetDevFree(net_dev); +- +-err_out_free_radev: +- /* free RTMP_ADAPTER strcuture and os_cookie*/ +- RTMPFreeAdapter(pAd); +- +-err_out_iounmap: +- iounmap((void *)(csr_addr)); +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- +-err_out_free_res: +- pci_release_regions(pci_dev); +- +-err_out: +- pci_disable_device(pci_dev); +- +- DBGPRINT(RT_DEBUG_ERROR, ("<=== rt2860_probe failed with rv = %d!\n", rv)); +- +- return -ENODEV; /* probe fail */ +-} +- +- +-static VOID __devexit rt2860_remove_one( +- IN struct pci_dev *pci_dev) +-{ +- PNET_DEV net_dev = pci_get_drvdata(pci_dev); +- RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); +- +- if (pAd != NULL) +- { +- // Unregister/Free all allocated net_device. +- RtmpPhyNetDevExit(pAd, net_dev); +- +- // Unmap CSR base address +- iounmap((char *)(csr_addr)); +- +- // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- +- // Free RTMP_ADAPTER related structures. +- RtmpRaDevCtrlExit(pAd); +- +- } +- else +- { +- // Unregister network device +- RtmpOSNetDevDetach(net_dev); +- +- // Unmap CSR base address +- iounmap((char *)(net_dev->base_addr)); +- +- // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- } +- +- // Free the root net_device +- RtmpOSNetDevFree(net_dev); +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Check the chipset vendor/product ID. +- +-Arguments: +- _dev_p Point to the PCI or USB device +- +-Return Value: +- TRUE Check ok +- FALSE Check fail +- +-Note: +-======================================================================== +-*/ +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p) +-{ +- /* always TRUE */ +- return TRUE; +-} +- +- +- +-/*************************************************************************** +- * +- * PCIe device initialization related procedures. +- * +- ***************************************************************************/ +- static VOID RTMPInitPCIeDevice( +- IN struct pci_dev *pci_dev, +- IN PRTMP_ADAPTER pAd) +-{ +- USHORT device_id; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- pci_read_config_word(pci_dev, PCI_DEVICE_ID, &device_id); +- device_id = le2cpu16(device_id); +- pObj->DeviceID = device_id; +- if ( +-#ifdef RT3090 +- (device_id == NIC3090_PCIe_DEVICE_ID) || +- (device_id == NIC3091_PCIe_DEVICE_ID) || +- (device_id == NIC3092_PCIe_DEVICE_ID) || +-#endif // RT3090 // +- 0) +- { +- UINT32 MacCsr0 = 0, Index= 0; +- do +- { +- RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); +- +- if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF)) +- break; +- +- RTMPusecDelay(10); +- } while (Index++ < 100); +- +- // Support advanced power save after 2892/2790. +- // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). +- if ((MacCsr0&0xffff0000) != 0x28600000) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); +- } +- } +-} +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPInitPCIeLinkCtrlValue( +- IN PRTMP_ADAPTER pAd) +-{ +- INT pos; +- USHORT reg16, data2, PCIePowerSaveLevel, Configuration; +- UINT32 MacValue; +- BOOLEAN bFindIntel = FALSE; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__)); +- // Init EEPROM, and save settings +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); +- pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff; +- pAd->LnkCtrlBitMask = 0; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); +- DBGPRINT(RT_DEBUG_TRACE, ("====> PCIePowerSaveLevel = 0x%x.\n", PCIePowerSaveLevel)); +- return; +- } +- else +- { +- PCIePowerSaveLevel &= 0x3; +- RT28xx_EEPROM_READ16(pAd, 0x24, data2); +- +- if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) +- { +- if (PCIePowerSaveLevel > 1 ) +- PCIePowerSaveLevel = 1; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("====> Write 0x83 = 0x%x.\n", PCIePowerSaveLevel)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); +- RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); +- PCIePowerSaveLevel &= 0xff; +- PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; +- switch(PCIePowerSaveLevel) +- { +- case 0: // Only support L0 +- pAd->LnkCtrlBitMask = 0; +- break; +- case 1: // Only enable L0s +- pAd->LnkCtrlBitMask = 1; +- break; +- case 2: // enable L1, L0s +- pAd->LnkCtrlBitMask = 3; +- break; +- case 3: // sync with host clk and enable L1, L0s +- pAd->LnkCtrlBitMask = 0x103; +- break; +- } +- RT28xx_EEPROM_READ16(pAd, 0x24, data2); +- if ((PCIePowerSaveLevel&0xff) != 0xff) +- { +- PCIePowerSaveLevel &= 0x3; +- +- if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) +- { +- if (PCIePowerSaveLevel > 1 ) +- PCIePowerSaveLevel = 1; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt28xx Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- printk("\n\n\n%s:%d\n",__FUNCTION__,__LINE__); +- +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("====> LnkCtrlBitMask = 0x%x.\n", pAd->LnkCtrlBitMask)); +- } +- } +- else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- UCHAR LinkCtrlSetting = 0; +- +- // Check 3090E special setting chip. +- RT28xx_EEPROM_READ16(pAd, 0x24, data2); +- if ((data2 == 0x9280) && ((pAd->MACVersion&0xffff) == 0x0211)) +- { +- pAd->b3090ESpecialChip = TRUE; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Special 3090E chip \n")); +- } +- +- RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); +- //enable WAKE_PCIE function, which forces to enable PCIE clock when mpu interrupt asserting. +- //Force PCIE 125MHz CLK to toggle +- MacValue |= 0x402; +- RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" AUX_CTRL = 0x%32x\n", MacValue)); +- +- +- +- // for RT30xx F and after, PCIe infterface, and for power solution 3 +- if ((IS_VERSION_AFTER_F(pAd)) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode >= 2) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode <= 3)) +- { +- RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" Read AUX_CTRL = 0x%x\n", MacValue)); +- // turn on bit 12. +- //enable 32KHz clock mode for power saving +- MacValue |= 0x1000; +- if (MacValue != 0xffffffff) +- { +- RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" Write AUX_CTRL = 0x%x\n", MacValue)); +- // 1. if use PCIePowerSetting is 2 or 3, need to program OSC_CTRL to 0x3ff11. +- MacValue = 0x3ff11; +- RTMP_IO_WRITE32(pAd, OSC_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" OSC_CTRL = 0x%x\n", MacValue)); +- // 2. Write PCI register Clk ref bit +- RTMPrt3xSetPCIePowerLinkCtrl(pAd); +- } +- else +- { +- // Error read Aux_Ctrl value. Force to use solution 1 +- DBGPRINT(RT_DEBUG_ERROR,(" Error Value in AUX_CTRL = 0x%x\n", MacValue)); +- pAd->StaCfg.PSControl.field.rt30xxPowerMode = 1; +- DBGPRINT(RT_DEBUG_ERROR,(" Force to use power solution1 \n")); +- } +- } +- // 1. read setting from inf file. +- +- PCIePowerSaveLevel = (USHORT)pAd->StaCfg.PSControl.field.rt30xxPowerMode; +- DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx Read PowerLevelMode = 0x%x.\n", PCIePowerSaveLevel)); +- // 2. Check EnableNewPS. +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- PCIePowerSaveLevel = 1; +- +- if (IS_VERSION_BEFORE_F(pAd) && (pAd->b3090ESpecialChip == FALSE)) +- { +- // Chip Version E only allow 1, So force set 1. +- PCIePowerSaveLevel &= 0x1; +- pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx E Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); +- } +- else +- { +- // Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. +- if (!((PCIePowerSaveLevel == 1) || (PCIePowerSaveLevel == 3))) +- PCIePowerSaveLevel = 1; +- DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx F Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; +- // for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in +- // PCI Configuration Space. Because firmware can't read PCI Configuration Space +- if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) && (pAd->Rt3xxHostLinkCtrl & 0x2)) +- { +- LinkCtrlSetting = 1; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xxF LinkCtrlSetting = 0x%x.\n", LinkCtrlSetting)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, LinkCtrlSetting); +- } +- +- } +- +- // Find Ralink PCIe Device's Express Capability Offset +- pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); +- +- if (pos != 0) +- { +- // Ralink PCIe Device's Link Control Register Offset +- pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); +- pAd->RLnkCtrlConfiguration = (Configuration & 0x103); +- Configuration &= 0xfefc; +- Configuration |= (0x0); +- +- RTMPFindHostPCIDev(pAd); +- if (pObj->parent_pci_dev) +- { +- USHORT vendor_id; +- +- pci_read_config_word(pObj->parent_pci_dev, PCI_VENDOR_ID, &vendor_id); +- vendor_id = le2cpu16(vendor_id); +- if (vendor_id == PCIBUS_INTEL_VENDOR) +- { +- bFindIntel = TRUE; +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); +- } +- /* +- else if ((vendor_id == PCIBUS_AMD_VENDOR1) +- && (DeviceID == 0x96000000)) +- { +- //Verified 2792 Aspire 8530 AMD NB (S3/S4/CBoot/WBoot/Chariot) by customer and ourselves. +- // So use L1 Toggle method in this NB. +- bFindIntel = TRUE; +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM : Aspire 8530 AMD NB. Use L1 Toggle. \n")); +- } +- */ +- // Find PCI-to-PCI Bridge Express Capability Offset +- pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); +- +- if (pos != 0) +- { +- BOOLEAN bChange = FALSE; +- // PCI-to-PCI Bridge Link Control Register Offset +- pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", +- pAd->HostLnkCtrlOffset, Configuration)); +- pAd->HostLnkCtrlConfiguration = (Configuration & 0x103); +- Configuration &= 0xfefc; +- Configuration |= (0x0); +- +- switch (pObj->DeviceID) +- { +-#ifdef RT3090 +- case NIC3090_PCIe_DEVICE_ID: +- case NIC3091_PCIe_DEVICE_ID: +- case NIC3092_PCIe_DEVICE_ID: +- if (bFindIntel == FALSE) +- bChange = TRUE; +- break; +-#endif // RT3090 // +- default: +- break; +- } +- +- if (bChange) +- { +- reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Write (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", +- pAd->HostLnkCtrlOffset, Configuration)); +- } +- } +- else +- { +- pAd->HostLnkCtrlOffset = 0; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find PCI-to-PCI Bridge PCI Express Capability!\n", __FUNCTION__)); +- } +- } +- } +- else +- { +- pAd->RLnkCtrlOffset = 0; +- pAd->HostLnkCtrlOffset = 0; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find Ralink PCIe Device's PCI Express Capability!\n", __FUNCTION__)); +- } +- +- if (bFindIntel == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Doesn't find Intel PCI host controller. \n")); +- // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff +- pAd->PCIePowerSaveLevel = 0xff; +- if ((pAd->RLnkCtrlOffset != 0) +-#ifdef RT3090 +- && ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) +-#endif // RT3090 // +- ) +- { +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink 30xx PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); +- pAd->RLnkCtrlConfiguration = (Configuration & 0x103); +- Configuration &= 0xfefc; +- Configuration |= (0x0); +- reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pos + PCI_EXP_LNKCTL, Configuration)); +- } +- } +-} +- +-VOID RTMPFindHostPCIDev( +- IN PRTMP_ADAPTER pAd) +-{ +- USHORT reg16; +- UCHAR reg8; +- UINT DevFn; +- PPCI_DEV pPci_dev; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__)); +- +- pObj->parent_pci_dev = NULL; +- if (pObj->pci_dev->bus->parent) +- { +- for (DevFn = 0; DevFn < 255; DevFn++) +- { +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +- pPci_dev = pci_get_slot(pObj->pci_dev->bus->parent, DevFn); +-#else +- pPci_dev = pci_find_slot(pObj->pci_dev->bus->parent->number, DevFn); +-#endif +- if (pPci_dev) +- { +- pci_read_config_word(pPci_dev, PCI_CLASS_DEVICE, ®16); +- reg16 = le2cpu16(reg16); +- pci_read_config_byte(pPci_dev, PCI_CB_CARD_BUS, ®8); +- if ((reg16 == PCI_CLASS_BRIDGE_PCI) && +- (reg8 == pObj->pci_dev->bus->number)) +- { +- pObj->parent_pci_dev = pPci_dev; +- } +- } +- } +- } +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Level = RESTORE_HALT : Restore PCI host and Ralink PCIe Link Control field to its default value. +- Level = Other Value : Restore from dot11 power save or radio off status. And force PCI host Link Control fields to 0x1 +- +- ======================================================================== +-*/ +-VOID RTMPPCIeLinkCtrlValueRestore( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) +-{ +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- return; +- +- // Check PSControl Configuration +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- return TRUE; +- +- //3090 will not execute the following codes. +- // Check interface : If not PCIe interface, return. +- +-#ifdef RT3090 +- if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) +- return; +-#endif // RT3090 // +- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__)); +- PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { +- DBGPRINT(RT_DEBUG_TRACE,("return \n")); +- return; +- } +- +- if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- if ((Configuration != 0) && +- (Configuration != 0xFFFF)) +- { +- Configuration &= 0xfefc; +- // If call from interface down, restore to orginial setting. +- if (Level == RESTORE_CLOSE) +- { +- Configuration |= pAd->HostLnkCtrlConfiguration; +- } +- else +- Configuration |= 0x0; +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Restore PCI host : offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Restore PCI host : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); +- } +- +- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- if ((Configuration != 0) && +- (Configuration != 0xFFFF)) +- { +- Configuration &= 0xfefc; +- // If call from interface down, restore to orginial setting. +- if (Level == RESTORE_CLOSE) +- Configuration |= pAd->RLnkCtrlConfiguration; +- else +- Configuration |= 0x0; +- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Restore Ralink : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Restore Ralink : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("%s <===\n", __FUNCTION__)); +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- +- Arguments: +- Max : limit Host PCI and Ralink PCIe device's LINK CONTROL field's value. +- Because now frequently set our device to mode 1 or mode 3 will cause problem. +- +- ======================================================================== +-*/ +-VOID RTMPPCIeLinkCtrlSetting( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Max) +-{ +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- return; +- +- // Check PSControl Configuration +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- return TRUE; +- +- // Check interface : If not PCIe interface, return. +- //Block 3090 to enter the following function +- +-#ifdef RT3090 +- if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) +- return; +-#endif // RT3090 // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) +- { +- DBGPRINT(RT_DEBUG_INFO, ("RTMPPCIePowerLinkCtrl return on fRTMP_PS_CAN_GO_SLEEP flag\n")); +- return; +- } +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __FUNCTION__)); +- PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { +- DBGPRINT(RT_DEBUG_TRACE,("return \n")); +- return; +- } +- PCIePowerSaveLevel = PCIePowerSaveLevel>>6; +- +- // Skip non-exist deice right away +- if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- switch (PCIePowerSaveLevel) +- { +- case 0: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 +- Configuration &= 0xfefc; +- break; +- case 1: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 +- Configuration &= 0xfefc; +- Configuration |= 0x1; +- break; +- case 2: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 +- Configuration &= 0xfefc; +- Configuration |= 0x3; +- break; +- case 3: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 +- Configuration &= 0xfefc; +- Configuration |= 0x103; +- break; +- } +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Write PCI host offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); +- } +- +- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) +- { +- // first 2892 chip not allow to frequently set mode 3. will cause hang problem. +- if (PCIePowerSaveLevel > Max) +- PCIePowerSaveLevel = Max; +- +- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- switch (PCIePowerSaveLevel) +- { +- case 0: +- // No PCI power safe +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . +- Configuration &= 0xfefc; +- break; +- case 1: +- // L0 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . +- Configuration &= 0xfefc; +- Configuration |= 0x1; +- break; +- case 2: +- // L0 and L1 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 +- Configuration &= 0xfefc; +- Configuration |= 0x3; +- break; +- case 3: +- // L0 , L1 and clock management. +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 +- Configuration &= 0xfefc; +- Configuration |= 0x103; +- pAd->bPCIclkOff = TRUE; +- break; +- } +- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Write Ralink device : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPPCIePowerLinkCtrl <==============\n")); +-} +-/* +- ======================================================================== +- +- Routine Description: +- 1. Write a PCI register for rt30xx power solution 3 +- +- ======================================================================== +-*/ +-VOID RTMPrt3xSetPCIePowerLinkCtrl( +- IN PRTMP_ADAPTER pAd) +-{ +- +- ULONG HostConfiguration; +- ULONG Configuration; +- ULONG Vendor; +- ULONG offset; +- POS_COOKIE pObj; +- INT pos; +- USHORT reg16; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- DBGPRINT(RT_DEBUG_INFO, ("RTMPrt3xSetPCIePowerLinkCtrl.===> %x\n", pAd->StaCfg.PSControl.word)); +- +- // Check PSControl Configuration +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- return; +- RTMPFindHostPCIDev(pAd); +- if (pObj->parent_pci_dev) +- { +- USHORT vendor_id; +- // Find PCI-to-PCI Bridge Express Capability Offset +- pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); +- +- if (pos != 0) +- { +- pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- } +- // If configurared to turn on L1. +- HostConfiguration = 0; +- if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); +- +- // Skip non-exist deice right away +- if ((pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); +- // Prepare Configuration to write to Host +- HostConfiguration |= 0x3; +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); +- pAd->Rt3xxHostLinkCtrl = HostConfiguration; +- // Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. +- // Fix HostConfiguration bit0:1 = 0x3 for later use. +- HostConfiguration = 0x3; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM : Force ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); +- } +- } +- else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) +- { +- +- // Skip non-exist deice right away +- if ((pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); +- pAd->Rt3xxHostLinkCtrl = HostConfiguration; +- HostConfiguration &= 0x3; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM : Follow Host ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); +- } +- } +- } +- // Prepare to write Ralink setting. +- // Find Ralink PCIe Device's Express Capability Offset +- pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); +- +- if (pos != 0) +- { +- // Ralink PCIe Device's Link Control Register Offset +- pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); +- Configuration |= 0x100; +- if ((pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) +- || (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1)) +- { +- switch(HostConfiguration) +- { +- case 0: +- Configuration &= 0xffffffc; +- break; +- case 1: +- Configuration &= 0xffffffc; +- Configuration |= 0x1; +- break; +- case 2: +- Configuration &= 0xffffffc; +- Configuration |= 0x2; +- break; +- case 3: +- Configuration |= 0x3; +- break; +- } +- } +- reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); +- pAd->Rt3xxRalinkLinkCtrl = Configuration; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM :Write Ralink device L1/L0s Value = 0x%x\n", Configuration)); +- } +- DBGPRINT(RT_DEBUG_INFO,("PSM :RTMPrt3xSetPCIePowerLinkCtrl <==============\n")); +- +-} +- +-#endif // CONFIG_STA_SUPPORT // +diff --git a/drivers/staging/rt3090/rt3090.h b/drivers/staging/rt3090/rt3090.h +deleted file mode 100644 +index d325cb0..0000000 +--- a/drivers/staging/rt3090/rt3090.h ++++ /dev/null +@@ -1,77 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3090.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RT3090_H__ +-#define __RT3090_H__ +- +-#ifdef RT3090 +- +-#ifndef RTMP_PCI_SUPPORT +-#error "For RT3090, you should define the compile flag -DRTMP_PCI_SUPPORT" +-#endif +- +-#ifndef RTMP_MAC_PCI +-#error "For RT3090, you should define the compile flag -DRTMP_MAC_PCI" +-#endif +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "For RT3090, you should define the compile flag -DRTMP_RF_RW_SUPPORT" +-#endif +- +-#ifndef RT30xx +-#error "For RT3090, you should define the compile flag -DRT30xx" +-#endif +- +-#ifdef CARRIER_DETECTION_SUPPORT +-#define TONE_RADAR_DETECT_SUPPORT +-#define CARRIER_SENSE_NEW_ALGO +-#endif // CARRIER_DETECTION_SUPPORT // +- +-#define PCIE_PS_SUPPORT +- +-#include "mac_pci.h" +-#include "rt30xx.h" +- +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// +-#define NIC3090_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard +-#define NIC3091_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard +-#define NIC3092_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard +- +-#endif // RT3090 // +- +-#endif //__RT3090_H__ // +diff --git a/drivers/staging/rt3090/rt30xx.h b/drivers/staging/rt3090/rt30xx.h +deleted file mode 100644 +index 70971a0..0000000 +--- a/drivers/staging/rt3090/rt30xx.h ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt30xx.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RT30XX_H__ +-#define __RT30XX_H__ +- +-#ifdef RT30xx +- +- +-extern REG_PAIR RT30xx_RFRegTable[]; +-extern UCHAR NUM_RF_REG_PARMS; +- +-#endif // RT30xx // +- +-#endif //__RT30XX_H__ // +diff --git a/drivers/staging/rt3090/rt3370.h b/drivers/staging/rt3090/rt3370.h +deleted file mode 100644 +index bfa9006..0000000 +--- a/drivers/staging/rt3090/rt3370.h ++++ /dev/null +@@ -1,64 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3370.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RT3370_H__ +-#define __RT3370_H__ +- +-#ifdef RT3370 +- +- +-#error "For RT3070, you should define the compile flag -DRTMP_USB_SUPPORT" +- +-#error "For RT3070, you should define the compile flag -DRTMP_MAC_USB" +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "For RT3070, you should define the compile flag -DRTMP_RF_RW_SUPPORT" +-#endif +- +-#ifndef RT33xx +-#error "For RT3070, you should define the compile flag -DRT30xx" +-#endif +- +-#include "mac_usb.h" +-#include "rt33xx.h" +- +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// +- +-#endif // RT3370 // +- +-#endif //__RT3370_H__ // +diff --git a/drivers/staging/rt3090/rt3390.h b/drivers/staging/rt3090/rt3390.h +deleted file mode 100644 +index 412ab3d..0000000 +--- a/drivers/staging/rt3090/rt3390.h ++++ /dev/null +@@ -1,77 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt3390.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RT3390_H__ +-#define __RT3390_H__ +- +-#ifdef RT3390 +- +-#ifndef RTMP_PCI_SUPPORT +-#error "For RT3390, you should define the compile flag -DRTMP_PCI_SUPPORT" +-#endif +- +-#ifndef RTMP_MAC_PCI +-#error "For RT3390, you should define the compile flag -DRTMP_MAC_PCI" +-#endif +- +-#ifndef RTMP_RF_RW_SUPPORT +-#error "For RT3390, you should define the compile flag -DRTMP_RF_RW_SUPPORT" +-#endif +- +-#ifndef RT30xx +-#error "For RT3390, you should define the compile flag -DRT30xx" +-#endif +- +-#ifdef CARRIER_DETECTION_SUPPORT +-#define TONE_RADAR_DETECT_SUPPORT +-#define CARRIER_SENSE_NEW_ALGO +-#endif // CARRIER_DETECTION_SUPPORT // +- +-#define PCIE_PS_SUPPORT +- +-#include "mac_pci.h" +-#include "rt33xx.h" +- +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// +-#define NIC3390_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard +-#define NIC3391_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard +-#define NIC3392_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard +- +-#endif // RT3390 // +- +-#endif //__RT3390_H__ // +diff --git a/drivers/staging/rt3090/rt33xx.h b/drivers/staging/rt3090/rt33xx.h +deleted file mode 100644 +index 6eb9388..0000000 +--- a/drivers/staging/rt3090/rt33xx.h ++++ /dev/null +@@ -1,48 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt33xx.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RT33XX_H__ +-#define __RT33XX_H__ +- +-#ifdef RT33xx +- +- +-extern REG_PAIR RFRegTableOverRT3390[]; +-extern UCHAR NUM_RF_REG_PARMS_OVER_RT3390; +- +-#endif // RT33xx // +- +-#endif //__RT33XX_H__ // +diff --git a/drivers/staging/rt3090/rt_ate.c b/drivers/staging/rt3090/rt_ate.c +deleted file mode 100644 +index 259aae4..0000000 +--- a/drivers/staging/rt3090/rt_ate.c ++++ /dev/null +@@ -1,6089 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#include "rt_config.h" +- +-#ifdef RALINK_ATE +- +-#ifdef RT30xx +-#define ATE_BBP_REG_NUM 168 +-UCHAR restore_BBP[ATE_BBP_REG_NUM]={0}; +-#endif // RT30xx // +- +-// 802.11 MAC Header, Type:Data, Length:24bytes +-UCHAR TemplateFrame[24] = {0x08,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, +- 0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; +- +-extern RTMP_RF_REGS RF2850RegTable[]; +-extern UCHAR NUM_OF_2850_CHNL; +- +-extern FREQUENCY_ITEM FreqItems3020[]; +-extern UCHAR NUM_OF_3020_CHNL; +- +- +- +- +-static CHAR CCKRateTable[] = {0, 1, 2, 3, 8, 9, 10, 11, -1}; /* CCK Mode. */ +-static CHAR OFDMRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, -1}; /* OFDM Mode. */ +-static CHAR HTMIXRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1}; /* HT Mix Mode. */ +- +-static INT TxDmaBusy( +- IN PRTMP_ADAPTER pAd); +- +-static INT RxDmaBusy( +- IN PRTMP_ADAPTER pAd); +- +-static VOID RtmpDmaEnable( +- IN PRTMP_ADAPTER pAd, +- IN INT Enable); +- +-static VOID BbpSoftReset( +- IN PRTMP_ADAPTER pAd); +- +-static VOID RtmpRfIoWrite( +- IN PRTMP_ADAPTER pAd); +- +-static INT ATESetUpFrame( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 TxIdx); +- +-static INT ATETxPwrHandler( +- IN PRTMP_ADAPTER pAd, +- IN char index); +- +-static INT ATECmdHandler( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifndef RT30xx +-static int CheckMCSValid( +- IN UCHAR Mode, +- IN UCHAR Mcs); +-#endif // RT30xx // +- +-#ifdef RT30xx +-static int CheckMCSValid( +- IN UCHAR Mode, +- IN UCHAR Mcs, +- IN BOOLEAN bRT2070); +-#endif // RT30xx // +- +-#ifdef RTMP_MAC_PCI +-static VOID ATEWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pOutTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit); +-#endif // RTMP_MAC_PCI // +- +- +-static VOID SetJapanFilter( +- IN PRTMP_ADAPTER pAd); +- +- +-#ifdef RALINK_28xx_QA +-static inline INT DO_RACFG_CMD_ATE_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_RF_WRITE_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_E2PROM_READ16( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_E2PROM_WRITE16( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_E2PROM_READ_ALL +-( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_E2PROM_WRITE_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_IO_READ( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_IO_WRITE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_IO_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_BBP_READ8( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_BBP_WRITE8( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_BBP_READ_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_GET_NOISE_LEVEL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_GET_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_CLEAR_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_TX_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_GET_TX_STATUS( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_TX_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_RX_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_RX_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_RX_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_CARRIER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_CONT( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_FRAME( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_BW( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_POWER0( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_POWER1( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_FREQ_OFFSET( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_GET_STATISTICS( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_RESET_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SEL_TX_ANTENNA( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SEL_RX_ANTENNA( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_PREAMBLE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_CHANNEL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR1( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR2( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR3( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_RATE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_FRAME_LEN( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_FRAME_COUNT( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_START_RX_FRAME( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_E2PROM_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_E2PROM_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_IO_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_BBP_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-static inline INT DO_RACFG_CMD_ATE_BBP_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg +-); +- +-#endif // RALINK_28xx_QA // +- +- +-#ifdef RTMP_MAC_PCI +-static INT TxDmaBusy( +- IN PRTMP_ADAPTER pAd) +-{ +- INT result; +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- if (GloCfg.field.TxDMABusy) +- result = 1; +- else +- result = 0; +- +- return result; +-} +- +- +-static INT RxDmaBusy( +- IN PRTMP_ADAPTER pAd) +-{ +- INT result; +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- if (GloCfg.field.RxDMABusy) +- result = 1; +- else +- result = 0; +- +- return result; +-} +- +- +-static VOID RtmpDmaEnable( +- IN PRTMP_ADAPTER pAd, +- IN INT Enable) +-{ +- BOOLEAN value; +- ULONG WaitCnt; +- WPDMA_GLO_CFG_STRUC GloCfg; +- +- value = Enable > 0 ? 1 : 0; +- +- // check DMA is in busy mode. +- WaitCnt = 0; +- +- while (TxDmaBusy(pAd) || RxDmaBusy(pAd)) +- { +- RTMPusecDelay(10); +- if (WaitCnt++ > 100) +- break; +- } +- +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- GloCfg.field.EnableTxDMA = value; +- GloCfg.field.EnableRxDMA = value; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings +- RTMPusecDelay(5000); +- +- return; +-} +-#endif // RTMP_MAC_PCI // +- +- +- +- +-static VOID BbpSoftReset( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR BbpData = 0; +- +- // Soft reset, set BBP R21 bit0=1->0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData); +- BbpData |= 0x00000001; //set bit0=1 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData); +- +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData); +- BbpData &= ~(0x00000001); //set bit0=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData); +- +- return; +-} +- +- +-static VOID RtmpRfIoWrite( +- IN PRTMP_ADAPTER pAd) +-{ +- // Set RF value 1's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 2's set R3[bit2] = [1] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04)); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 3's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- return; +-} +- +- +-#ifdef RT30xx +-static int CheckMCSValid( +- UCHAR Mode, +- UCHAR Mcs, +- BOOLEAN bRT2070) +-#endif // RT30xx // +-#ifndef RT30xx +-static int CheckMCSValid( +- IN UCHAR Mode, +- IN UCHAR Mcs) +-#endif // RT30xx // +-{ +- INT i; +- PCHAR pRateTab; +- +- switch (Mode) +- { +- case 0: +- pRateTab = CCKRateTable; +- break; +- case 1: +- pRateTab = OFDMRateTable; +- break; +- case 2: +- case 3: +-#ifdef RT30xx +- if (bRT2070) +- pRateTab = OFDMRateTable; +- else +-#endif // RT30xx // +- pRateTab = HTMIXRateTable; +- break; +- default: +- ATEDBGPRINT(RT_DEBUG_ERROR, ("unrecognizable Tx Mode %d\n", Mode)); +- return -1; +- break; +- } +- +- i = 0; +- while (pRateTab[i] != -1) +- { +- if (pRateTab[i] == Mcs) +- return 0; +- i++; +- } +- +- return -1; +-} +- +- +-static INT ATETxPwrHandler( +- IN PRTMP_ADAPTER pAd, +- IN char index) +-{ +- ULONG R; +- CHAR TxPower; +- UCHAR Bbp94 = 0; +- BOOLEAN bPowerReduce = FALSE; +-#ifdef RTMP_RF_RW_SUPPORT +- UCHAR RFValue; +-#endif // RTMP_RF_RW_SUPPORT // +-#ifdef RALINK_28xx_QA +- if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE)) +- { +- /* +- When QA is used for Tx, pAd->ate.TxPower0/1 and real tx power +- are not synchronized. +- */ +- return 0; +- } +- else +-#endif // RALINK_28xx_QA // +- { +- TxPower = index == 0 ? pAd->ate.TxPower0 : pAd->ate.TxPower1; +- +- if (pAd->ate.Channel <= 14) +- { +- if (TxPower > 31) +- { +- +- // R3, R4 can't large than 31 (0x24), 31 ~ 36 used by BBP 94 +- R = 31; +- if (TxPower <= 36) +- Bbp94 = BBPR94_DEFAULT + (UCHAR)(TxPower - 31); +- } +- else if (TxPower < 0) +- { +- +- // R3, R4 can't less than 0, -1 ~ -6 used by BBP 94 +- R = 0; +- if (TxPower >= -6) +- Bbp94 = BBPR94_DEFAULT + TxPower; +- } +- else +- { +- // 0 ~ 31 +- R = (ULONG) TxPower; +- Bbp94 = BBPR94_DEFAULT; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%ld, BBP_R94=%d)\n", __FUNCTION__, TxPower, R, Bbp94)); +- } +- else /* 5.5 GHz */ +- { +- if (TxPower > 15) +- { +- +- // R3, R4 can't large than 15 (0x0F) +- R = 15; +- } +- else if (TxPower < 0) +- { +- +- // R3, R4 can't less than 0 +- // -1 ~ -7 +- ASSERT((TxPower >= -7)); +- R = (ULONG)(TxPower + 7); +- bPowerReduce = TRUE; +- } +- else +- { +- // 0 ~ 15 +- R = (ULONG) TxPower; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%lu)\n", __FUNCTION__, TxPower, R)); +- } +-//2008/09/10:KH adds to support 3070 ATE TX Power tunning real time<-- +-#ifdef RTMP_RF_RW_SUPPORT +- if (IS_RT30xx(pAd)) +- { +- // Set Tx Power +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R12, (PUCHAR)&RFValue); +- RFValue = (RFValue & 0xE0) | TxPower; +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R12, (UCHAR)RFValue); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("3070 or 2070:%s (TxPower=%d, RFValue=%x)\n", __FUNCTION__, TxPower, RFValue)); +- } +- else +-#endif // RTMP_RF_RW_SUPPORT // +- { +- if (pAd->ate.Channel <= 14) +- { +- if (index == 0) +- { +- // shift TX power control to correct RF(R3) register bit position +- R = R << 9; +- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff); +- pAd->LatchRfRegs.R3 = R; +- } +- else +- { +- // shift TX power control to correct RF(R4) register bit position +- R = R << 6; +- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f); +- pAd->LatchRfRegs.R4 = R; +- } +- } +- else /* 5.5GHz */ +- { +- if (bPowerReduce == FALSE) +- { +- if (index == 0) +- { +- // shift TX power control to correct RF(R3) register bit position +- R = (R << 10) | (1 << 9); +- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff); +- pAd->LatchRfRegs.R3 = R; +- } +- else +- { +- // shift TX power control to correct RF(R4) register bit position +- R = (R << 7) | (1 << 6); +- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f); +- pAd->LatchRfRegs.R4 = R; +- } +- } +- else +- { +- if (index == 0) +- { +- // shift TX power control to correct RF(R3) register bit position +- R = (R << 10); +- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff); +- +- /* Clear bit 9 of R3 to reduce 7dB. */ +- pAd->LatchRfRegs.R3 = (R & (~(1 << 9))); +- } +- else +- { +- // shift TX power control to correct RF(R4) register bit position +- R = (R << 7); +- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f); +- +- /* Clear bit 6 of R4 to reduce 7dB. */ +- pAd->LatchRfRegs.R4 = (R & (~(1 << 6))); +- } +- } +- } +- RtmpRfIoWrite(pAd); +- } +-//2008/09/10:KH adds to support 3070 ATE TX Power tunning real time--> +- +- return 0; +- } +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE operation mode to +- 0. ATESTART = Start ATE Mode +- 1. ATESTOP = Stop ATE Mode +- 2. TXCONT = Continuous Transmit +- 3. TXCARR = Transmit Carrier +- 4. TXFRAME = Transmit Frames +- 5. RXFRAME = Receive Frames +-#ifdef RALINK_28xx_QA +- 6. TXSTOP = Stop Any Type of Transmition +- 7. RXSTOP = Stop Receiving Frames +-#endif // RALINK_28xx_QA // +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-#ifdef RTMP_MAC_PCI +-static INT ATECmdHandler( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT32 Value = 0; +- UCHAR BbpData; +- UINT32 MacData = 0; +- PTXD_STRUC pTxD; +- INT index; +- UINT i = 0, atemode = 0; +- PRXD_STRUC pRxD; +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE]; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("===> ATECmdHandler()\n")); +- +- ATEAsicSwitchChannel(pAd); +- +- /* empty function */ +- AsicLockChannel(pAd, pAd->ate.Channel); +- +- RTMPusecDelay(5000); +- +- // read MAC_SYS_CTRL and backup MAC_SYS_CTRL value. +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); +- +- // Default value in BBP R22 is 0x0. +- BbpData = 0; +- +- // clean bit4 to stop continuous Tx production test. +- MacData &= 0xFFFFFFEF; +- +- // Enter ATE mode and set Tx/Rx Idle +- if (!strcmp(arg, "ATESTART")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTART\n")); +- +-#if defined(LINUX) || defined(VXWORKS) +- // check if we have removed the firmware +- if (!(ATE_ON(pAd))) +- { +- NICEraseFirmware(pAd); +- } +-#endif // defined(LINUX) || defined(VXWORKS) // +- +- atemode = pAd->ate.Mode; +- pAd->ate.Mode = ATE_START; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- +- if (atemode == ATE_TXCARR) +- { +- // No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= 0xFFFFFF00; // clear bit7, bit6, bit[5~0] +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- } +- else if (atemode == ATE_TXCARRSUPP) +- { +- // No Cont. TX set BBP R22 bit7=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= ~(1 << 7); // set bit7=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- // No Carrier Suppression set BBP R24 bit0=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData); +- BbpData &= 0xFFFFFFFE; // clear bit0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData); +- } +- +- /* +- We should free some resource which was allocated +- when ATE_TXFRAME , ATE_STOP, and ATE_TXCONT. +- */ +- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP)) +- { +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE]; +- +- if (atemode == ATE_TXCONT) +- { +- // No Cont. TX set BBP R22 bit7=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= ~(1 << 7); // set bit7=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- } +- +- // Abort Tx, Rx DMA. +- RtmpDmaEnable(pAd, 0); +- for (i=0; iTxRing[QID_AC_BE].Cell[i].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- pTxD->DMADONE = 0; +- pPacket = pTxRing->Cell[i].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[i].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[i].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[i].pNextNdisPacket = NULL; +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- } +- +- // Start Tx, RX DMA +- RtmpDmaEnable(pAd, 1); +- } +- +- // reset Rx statistics. +- pAd->ate.LastSNR0 = 0; +- pAd->ate.LastSNR1 = 0; +- pAd->ate.LastRssi0 = 0; +- pAd->ate.LastRssi1 = 0; +- pAd->ate.LastRssi2 = 0; +- pAd->ate.AvgRssi0 = 0; +- pAd->ate.AvgRssi1 = 0; +- pAd->ate.AvgRssi2 = 0; +- pAd->ate.AvgRssi0X8 = 0; +- pAd->ate.AvgRssi1X8 = 0; +- pAd->ate.AvgRssi2X8 = 0; +- pAd->ate.NumOfAvgRssiSample = 0; +- +-#ifdef RALINK_28xx_QA +- // Tx frame +- pAd->ate.bQATxStart = FALSE; +- pAd->ate.bQARxStart = FALSE; +- pAd->ate.seq = 0; +- +- // counters +- pAd->ate.U2M = 0; +- pAd->ate.OtherData = 0; +- pAd->ate.Beacon = 0; +- pAd->ate.OtherCount = 0; +- pAd->ate.TxAc0 = 0; +- pAd->ate.TxAc1 = 0; +- pAd->ate.TxAc2 = 0; +- pAd->ate.TxAc3 = 0; +- /*pAd->ate.TxHCCA = 0;*/ +- pAd->ate.TxMgmt = 0; +- pAd->ate.RSSI0 = 0; +- pAd->ate.RSSI1 = 0; +- pAd->ate.RSSI2 = 0; +- pAd->ate.SNR0 = 0; +- pAd->ate.SNR1 = 0; +- +- // control +- pAd->ate.TxDoneCount = 0; +- // TxStatus : 0 --> task is idle, 1 --> task is running +- pAd->ate.TxStatus = 0; +-#endif // RALINK_28xx_QA // +- +- // Soft reset BBP. +- BbpSoftReset(pAd); +- +- +-#ifdef CONFIG_STA_SUPPORT +- /* LinkDown() has "AsicDisableSync();" and "RTMP_BBP_IO_R/W8_BY_REG_ID();" inside. */ +-// LinkDown(pAd, FALSE); +-// AsicEnableBssSync(pAd); +- +-#if defined(LINUX) || defined(VXWORKS) +- RTMP_OS_NETDEV_STOP_QUEUE(pAd->net_dev); +-#endif // defined(LINUX) || defined(VXWORKS) // +- +- /* +- If we skip "LinkDown()", we should disable protection +- to prevent from sending out RTS or CTS-to-self. +- */ +- ATEDisableAsicProtect(pAd); +- RTMPStationStop(pAd); +-#endif // CONFIG_STA_SUPPORT // +- +- /* Disable Tx */ +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- /* Disable Rx */ +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- else if (!strcmp(arg, "ATESTOP")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTOP\n")); +- +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- // recover the MAC_SYS_CTRL register back +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- +- // disable Tx, Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= (0xfffffff3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // abort Tx, RX DMA +- RtmpDmaEnable(pAd, 0); +- +-#ifdef LINUX +- pAd->ate.bFWLoading = TRUE; +- +- Status = NICLoadFirmware(pAd); +- +- if (Status != NDIS_STATUS_SUCCESS) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware failed, Status[=0x%08x]\n", Status)); +- return FALSE; +- } +-#endif // LINUX // +- pAd->ate.Mode = ATE_STOP; +- +- /* +- Even the firmware has been loaded, +- we still could use ATE_BBP_IO_READ8_BY_REG_ID(). +- But this is not suggested. +- */ +- BbpSoftReset(pAd); +- +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- +- NICInitializeAdapter(pAd, TRUE); +- +- /* +- Reinitialize Rx Ring before Rx DMA is enabled. +- >>>RxCoherent<<< was gone ! +- */ +- for (index = 0; index < RX_RING_SIZE; index++) +- { +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; +- pRxD->DDONE = 0; +- } +- +- // We should read EEPROM for all cases. +- NICReadEEPROMParameters(pAd, NULL); +- NICInitAsicFromEEPROM(pAd); +- +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- +- /* empty function */ +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- /* clear garbage interrupts */ +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff); +- /* Enable Interrupt */ +- RTMP_ASIC_INTERRUPT_ENABLE(pAd); +- +- /* restore RX_FILTR_CFG */ +- +-#ifdef CONFIG_STA_SUPPORT +- /* restore RX_FILTR_CFG due to that QA maybe set it to 0x3 */ +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL); +-#endif // CONFIG_STA_SUPPORT // +- +- // Enable Tx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // Enable Tx, Rx DMA. +- RtmpDmaEnable(pAd, 1); +- +- // Enable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- +-#ifdef CONFIG_STA_SUPPORT +- RTMPStationStart(pAd); +-#endif // CONFIG_STA_SUPPORT // +- +-#if defined(LINUX) || defined(VXWORKS) +- RTMP_OS_NETDEV_START_QUEUE(pAd->net_dev); +-#endif // defined(LINUX) || defined(VXWORKS) // +- } +- else if (!strcmp(arg, "TXCARR")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n")); +- pAd->ate.Mode = ATE_TXCARR; +- +- // QA has done the following steps if it is used. +- if (pAd->ate.bQATxStart == FALSE) +- { +- // Soft reset BBP. +- BbpSoftReset(pAd); +- +- // Carrier Test set BBP R22 bit7=1, bit6=1, bit[5~0]=0x01 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0] +- BbpData |= 0x000000C1; //set bit7=1, bit6=1, bit[5~0]=0x01 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- // set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1 +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value = Value | 0x00000010; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- } +- else if (!strcmp(arg, "TXCONT")) +- { +- if (pAd->ate.bQATxStart == TRUE) +- { +- /* +- set MAC_SYS_CTRL(0x1004) bit4(Continuous Tx Production Test) +- and bit2(MAC TX enable) back to zero. +- */ +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); +- MacData &= 0xFFFFFFEB; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- +- // set BBP R22 bit7=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= 0xFFFFFF7F; //set bit7=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- } +- +- /* +- for TxCont mode. +- Step 1: Send 50 packets first then wait for a moment. +- Step 2: Send more 50 packet then start continue mode. +- */ +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCONT\n")); +- +- // Step 1: send 50 packets first. +- pAd->ate.Mode = ATE_TXCONT; +- pAd->ate.TxCount = 50; +- +- /* Do it after Tx/Rx DMA is aborted. */ +-// pAd->ate.TxDoneCount = 0; +- +- // Soft reset BBP. +- BbpSoftReset(pAd); +- +- // Abort Tx, RX DMA. +- RtmpDmaEnable(pAd, 0); +- +- // Fix can't smooth kick +- { +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx); +- } +- +- pAd->ate.TxDoneCount = 0; +- +- /* Only needed if we have to send some normal frames. */ +- SetJapanFilter(pAd); +- +- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++) +- { +- PNDIS_PACKET pPacket; +- UINT32 TxIdx = pTxRing->TxCpuIdx; +- +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- // Clean current cell. +- pPacket = pTxRing->Cell[TxIdx].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- +- if (ATESetUpFrame(pAd, TxIdx) != 0) +- break; +- +- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE); +- } +- +- // Setup frame format. +- ATESetUpFrame(pAd, pTxRing->TxCpuIdx); +- +- // Start Tx, RX DMA. +- RtmpDmaEnable(pAd, 1); +- +- // Enable Tx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // Disable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- pAd->ate.TxStatus = 1; +- } +-#endif // RALINK_28xx_QA // +- +- // kick Tx-Ring +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx); +- +- RTMPusecDelay(5000); +- +- +- // Step 2: send more 50 packets then start continue mode. +- // Abort Tx, RX DMA. +- RtmpDmaEnable(pAd, 0); +- +- // Cont. TX set BBP R22 bit7=1 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData |= 0x00000080; //set bit7=1 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- pAd->ate.TxCount = 50; +- +- // Fix can't smooth kick +- { +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx); +- } +- +- pAd->ate.TxDoneCount = 0; +- +- SetJapanFilter(pAd); +- +- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++) +- { +- PNDIS_PACKET pPacket; +- UINT32 TxIdx = pTxRing->TxCpuIdx; +- +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- // clean current cell. +- pPacket = pTxRing->Cell[TxIdx].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- +- if (ATESetUpFrame(pAd, TxIdx) != 0) +- break; +- +- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE); +- } +- +- ATESetUpFrame(pAd, pTxRing->TxCpuIdx); +- +- // Start Tx, RX DMA. +- RtmpDmaEnable(pAd, 1); +- +- // Enable Tx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // Disable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- pAd->ate.TxStatus = 1; +- } +-#endif // RALINK_28xx_QA // +- +- // kick Tx-Ring. +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx); +- +- RTMPusecDelay(500); +- +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); +- MacData |= 0x00000010; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- } +- else if (!strcmp(arg, "TXFRAME")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXFRAME(Count=%d)\n", pAd->ate.TxCount)); +- pAd->ate.Mode |= ATE_TXFRAME; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- // Soft reset BBP. +- BbpSoftReset(pAd); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- +- // Abort Tx, RX DMA. +- RtmpDmaEnable(pAd, 0); +- +- // Fix can't smooth kick +- { +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx); +- } +- +- pAd->ate.TxDoneCount = 0; +- +- SetJapanFilter(pAd); +- +- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++) +- { +- PNDIS_PACKET pPacket; +- UINT32 TxIdx = pTxRing->TxCpuIdx; +- +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- // Clean current cell. +- pPacket = pTxRing->Cell[TxIdx].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- +- if (ATESetUpFrame(pAd, TxIdx) != 0) +- break; +- +- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE); +- +- } +- +- ATESetUpFrame(pAd, pTxRing->TxCpuIdx); +- +- // Start Tx, Rx DMA. +- RtmpDmaEnable(pAd, 1); +- +- // Enable Tx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +-#ifdef RALINK_28xx_QA +- // add this for LoopBack mode +- if (pAd->ate.bQARxStart == FALSE) +- { +- // Disable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- +- if (pAd->ate.bQATxStart == TRUE) +- { +- pAd->ate.TxStatus = 1; +- } +-#else +- // Disable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +-#endif // RALINK_28xx_QA // +- +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * RINGREG_DIFF, &pAd->TxRing[QID_AC_BE].TxDmaIdx); +- // kick Tx-Ring. +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx); +- +- pAd->RalinkCounters.KickTxCount++; +- } +-#ifdef RALINK_28xx_QA +- else if (!strcmp(arg, "TXSTOP")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXSTOP\n")); +- atemode = pAd->ate.Mode; +- pAd->ate.Mode &= ATE_TXSTOP; +- pAd->ate.bQATxStart = FALSE; +-// pAd->ate.TxDoneCount = pAd->ate.TxCount; +- +- if (atemode == ATE_TXCARR) +- { +- // No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0] +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- } +- else if (atemode == ATE_TXCARRSUPP) +- { +- // No Cont. TX set BBP R22 bit7=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= ~(1 << 7); //set bit7=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- +- // No Carrier Suppression set BBP R24 bit0=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData); +- BbpData &= 0xFFFFFFFE; //clear bit0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData); +- } +- +- /* +- We should free some resource which was allocated +- when ATE_TXFRAME, ATE_STOP, and ATE_TXCONT. +- */ +- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP)) +- { +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE]; +- +- if (atemode == ATE_TXCONT) +- { +- // No Cont. TX set BBP R22 bit7=0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); +- BbpData &= ~(1 << 7); //set bit7=0 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- } +- +- // Abort Tx, Rx DMA. +- RtmpDmaEnable(pAd, 0); +- +- for (i=0; iTxRing[QID_AC_BE].Cell[i].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +-#endif +- pTxD->DMADONE = 0; +- pPacket = pTxRing->Cell[i].pNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNdisPacket as NULL after clear +- pTxRing->Cell[i].pNdisPacket = NULL; +- +- pPacket = pTxRing->Cell[i].pNextNdisPacket; +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); +- } +- +- // Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[i].pNextNdisPacket = NULL; +-#ifdef RT_BIG_ENDIAN +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif +- } +- // Enable Tx, Rx DMA +- RtmpDmaEnable(pAd, 1); +- +- } +- +- // TxStatus : 0 --> task is idle, 1 --> task is running +- pAd->ate.TxStatus = 0; +- +- // Soft reset BBP. +- BbpSoftReset(pAd); +- +- // Disable Tx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- else if (!strcmp(arg, "RXSTOP")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXSTOP\n")); +- atemode = pAd->ate.Mode; +- pAd->ate.Mode &= ATE_RXSTOP; +- pAd->ate.bQARxStart = FALSE; +-// pAd->ate.TxDoneCount = pAd->ate.TxCount; +- +- if (atemode == ATE_TXCARR) +- { +- ; +- } +- else if (atemode == ATE_TXCARRSUPP) +- { +- ; +- } +- +- /* +- We should free some resource which was allocated +- when ATE_TXFRAME, ATE_STOP, and ATE_TXCONT. +- */ +- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP)) +- { +- if (atemode == ATE_TXCONT) +- { +- ; +- } +- } +- +- // Soft reset BBP. +- BbpSoftReset(pAd); +- +- // Disable Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +-#endif // RALINK_28xx_QA // +- else if (!strcmp(arg, "RXFRAME")) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXFRAME\n")); +- +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); +- +- pAd->ate.Mode |= ATE_RXFRAME; +- +- // Disable Tx of MAC block. +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= ~(1 << 2); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- +- // Enable Rx of MAC block. +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value |= (1 << 3); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- else +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: Invalid arg!\n")); +- return FALSE; +- } +- RTMPusecDelay(5000); +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATECmdHandler()\n")); +- +- return TRUE; +-} +-/*=======================End of RTMP_MAC_PCI =======================*/ +-#endif // RTMP_MAC_PCI // +- +- +- +- +-INT Set_ATE_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (ATECmdHandler(pAd, arg)) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Success\n")); +- +- +- return TRUE; +- } +- else +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Failed\n")); +- return FALSE; +- } +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE ADDR1=DA for TxFrame(AP : To DS = 0 ; From DS = 1) +- or +- Set ATE ADDR3=DA for TxFrame(STA : To DS = 1 ; From DS = 0) +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_DA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- PSTRING value; +- INT i; +- +- // Mac address acceptable format 01:02:03:04:05:06 length 17 +- if (strlen(arg) != 17) +- return FALSE; +- +- for (i = 0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) +- { +- /* sanity check */ +- if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- AtoH(value, &pAd->ate.Addr3[i++], 1); +-#endif // CONFIG_STA_SUPPORT // +- } +- +- /* sanity check */ +- if (i != 6) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_DA_Proc (DA = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr3[0], +- pAd->ate.Addr3[1], pAd->ate.Addr3[2], pAd->ate.Addr3[3], pAd->ate.Addr3[4], pAd->ate.Addr3[5])); +-#endif // CONFIG_STA_SUPPORT // +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_DA_Proc Success\n")); +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE ADDR3=SA for TxFrame(AP : To DS = 0 ; From DS = 1) +- or +- Set ATE ADDR2=SA for TxFrame(STA : To DS = 1 ; From DS = 0) +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_SA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- PSTRING value; +- INT i; +- +- // Mac address acceptable format 01:02:03:04:05:06 length 17 +- if (strlen(arg) != 17) +- return FALSE; +- +- for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) +- { +- /* sanity check */ +- if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- AtoH(value, &pAd->ate.Addr2[i++], 1); +-#endif // CONFIG_STA_SUPPORT // +- } +- +- /* sanity check */ +- if (i != 6) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_SA_Proc (SA = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr2[0], +- pAd->ate.Addr2[1], pAd->ate.Addr2[2], pAd->ate.Addr2[3], pAd->ate.Addr2[4], pAd->ate.Addr2[5])); +-#endif // CONFIG_STA_SUPPORT // +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_SA_Proc Success\n")); +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE ADDR2=BSSID for TxFrame(AP : To DS = 0 ; From DS = 1) +- or +- Set ATE ADDR1=BSSID for TxFrame(STA : To DS = 1 ; From DS = 0) +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_BSSID_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- PSTRING value; +- INT i; +- +- // Mac address acceptable format 01:02:03:04:05:06 length 17 +- if (strlen(arg) != 17) +- return FALSE; +- +- for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) +- { +- /* sanity check */ +- if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- AtoH(value, &pAd->ate.Addr1[i++], 1); +-#endif // CONFIG_STA_SUPPORT // +- } +- +- /* sanity check */ +- if(i != 6) +- { +- return FALSE; +- } +- +-#ifdef CONFIG_STA_SUPPORT +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_BSSID_Proc (BSSID = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr1[0], +- pAd->ate.Addr1[1], pAd->ate.Addr1[2], pAd->ate.Addr1[3], pAd->ate.Addr1[4], pAd->ate.Addr1[5])); +-#endif // CONFIG_STA_SUPPORT // +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_BSSID_Proc Success\n")); +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx Channel +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_CHANNEL_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR channel; +- +- channel = simple_strtol(arg, 0, 10); +- +- // to allow A band channel : ((channel < 1) || (channel > 14)) +- if ((channel < 1) || (channel > 216)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_CHANNEL_Proc::Out of range, it should be in range of 1~14.\n")); +- return FALSE; +- } +- pAd->ate.Channel = channel; +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_CHANNEL_Proc (ATE Channel = %d)\n", pAd->ate.Channel)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_CHANNEL_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx Power0 +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_POWER0_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- CHAR TxPower; +- +- TxPower = simple_strtol(arg, 0, 10); +- +- if (pAd->ate.Channel <= 14) +- { +- if ((TxPower > 31) || (TxPower < 0)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower)); +- return FALSE; +- } +- } +- else/* 5.5 GHz */ +- { +- if ((TxPower > 15) || (TxPower < -7)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower)); +- return FALSE; +- } +- } +- +- pAd->ate.TxPower0 = TxPower; +- ATETxPwrHandler(pAd, 0); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER0_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx Power1 +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_POWER1_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- CHAR TxPower; +- +- TxPower = simple_strtol(arg, 0, 10); +- +- if (pAd->ate.Channel <= 14) +- { +- if ((TxPower > 31) || (TxPower < 0)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower)); +- return FALSE; +- } +- } +- else +- { +- if ((TxPower > 15) || (TxPower < -7)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower)); +- return FALSE; +- } +- } +- +- pAd->ate.TxPower1 = TxPower; +- ATETxPwrHandler(pAd, 1); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER1_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx Antenna +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- CHAR value; +- +- value = simple_strtol(arg, 0, 10); +- +- if ((value > 2) || (value < 0)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_Antenna_Proc::Out of range (Value=%d)\n", value)); +- return FALSE; +- } +- +- pAd->ate.TxAntennaSel = value; +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_Antenna_Proc (Antenna = %d)\n", pAd->ate.TxAntennaSel)); +- ATEDBGPRINT(RT_DEBUG_TRACE,("Ralink: Set_ATE_TX_Antenna_Proc Success\n")); +- +- // calibration power unbalance issues, merged from Arch Team +- ATEAsicSwitchChannel(pAd); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Rx Antenna +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_RX_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- CHAR value; +- +- value = simple_strtol(arg, 0, 10); +- +- if ((value > 3) || (value < 0)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_RX_Antenna_Proc::Out of range (Value=%d)\n", value)); +- return FALSE; +- } +- +- pAd->ate.RxAntennaSel = value; +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_Antenna_Proc (Antenna = %d)\n", pAd->ate.RxAntennaSel)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_Antenna_Proc Success\n")); +- +- // calibration power unbalance issues, merged from Arch Team +- ATEAsicSwitchChannel(pAd); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE RF frequence offset +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_FREQOFFSET_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR RFFreqOffset = 0; +- ULONG R4 = 0; +- +- RFFreqOffset = simple_strtol(arg, 0, 10); +-#ifndef RTMP_RF_RW_SUPPORT +- if (RFFreqOffset >= 64) +-#endif // RTMP_RF_RW_SUPPORT // +- /* RT35xx ATE will reuse this code segment. */ +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/08/06: KH modified the limit of offset value from 65 to 95(0x5F) +- if (RFFreqOffset >= 95) +-#endif // RTMP_RF_RW_SUPPORT // +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_FREQOFFSET_Proc::Out of range, it should be in range of 0~63.\n")); +- return FALSE; +- } +- +- pAd->ate.RFFreqOffset = RFFreqOffset; +-#ifdef RTMP_RF_RW_SUPPORT +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- // Set RF offset +- UCHAR RFValue; +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R23, (PUCHAR)&RFValue); +-//2008/08/06: KH modified "pAd->RFFreqOffset" to "pAd->ate.RFFreqOffset" +- RFValue = ((RFValue & 0x80) | pAd->ate.RFFreqOffset); +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R23, (UCHAR)RFValue); +- } +- else +-#endif // RTMP_RF_RW_SUPPORT // +- { +- // RT28xx +- // shift TX power control to correct RF register bit position +- R4 = pAd->ate.RFFreqOffset << 15; +- R4 |= (pAd->LatchRfRegs.R4 & ((~0x001f8000))); +- pAd->LatchRfRegs.R4 = R4; +- +- RtmpRfIoWrite(pAd); +- } +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_FREQOFFSET_Proc (RFFreqOffset = %d)\n", pAd->ate.RFFreqOffset)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_FREQOFFSET_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE RF BW +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_BW_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT i; +- UCHAR value = 0; +- UCHAR BBPCurrentBW; +- +- BBPCurrentBW = simple_strtol(arg, 0, 10); +- +- if ((BBPCurrentBW == 0) +-#ifdef RT30xx +- || IS_RT2070(pAd) +-#endif // RT30xx // +- ) +- { +- pAd->ate.TxWI.BW = BW_20; +- } +- else +- { +- pAd->ate.TxWI.BW = BW_40; +- } +- +- /* RT35xx ATE will reuse this code segment. */ +- // Fix the error spectrum of CCK-40MHZ +- // Turn on BBP 20MHz mode by request here. +- if ((pAd->ate.TxWI.PHYMODE == MODE_CCK) && (pAd->ate.TxWI.BW == BW_40)) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_BW_Proc!! Warning!! CCK only supports 20MHZ!!\nBandwidth switch to 20\n")); +- pAd->ate.TxWI.BW = BW_20; +- } +- +- if (pAd->ate.TxWI.BW == BW_20) +- { +- if (pAd->ate.Channel <= 14) +- { +- for (i=0; i<5; i++) +- { +- if (pAd->Tx20MPwrCfgGBand[i] != 0xffffffff) +- { +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgGBand[i]); +- RTMPusecDelay(5000); +- } +- } +- } +- else +- { +- for (i=0; i<5; i++) +- { +- if (pAd->Tx20MPwrCfgABand[i] != 0xffffffff) +- { +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgABand[i]); +- RTMPusecDelay(5000); +- } +- } +- } +- +- // Set BBP R4 bit[4:3]=0:0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); +- value &= (~0x18); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value); +- +- +- // Set BBP R66=0x3C +- value = 0x3C; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value); +- +- // Set BBP R68=0x0B +- // to improve Rx sensitivity. +- value = 0x0B; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value); +- // Set BBP R69=0x16 +- value = 0x16; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value); +- // Set BBP R70=0x08 +- value = 0x08; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value); +- // Set BBP R73=0x11 +- value = 0x11; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value); +- +- /* +- If Channel=14, Bandwidth=20M and Mode=CCK, Set BBP R4 bit5=1 +- (to set Japan filter coefficients). +- This segment of code will only works when ATETXMODE and ATECHANNEL +- were set to MODE_CCK and 14 respectively before ATETXBW is set to 0. +- */ +- if (pAd->ate.Channel == 14) +- { +- INT TxMode = pAd->ate.TxWI.PHYMODE; +- +- if (TxMode == MODE_CCK) +- { +- // when Channel==14 && Mode==CCK && BandWidth==20M, BBP R4 bit5=1 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); +- value |= 0x20; //set bit5=1 +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value); +- } +- } +- +-#ifdef RT30xx +- // set BW = 20 MHz +- if (IS_RT30xx(pAd)) +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW20RfR24); +- else +-#endif // RT30xx // +- // set BW = 20 MHz +- { +- pAd->LatchRfRegs.R4 &= ~0x00200000; +- RtmpRfIoWrite(pAd); +- } +- +- } +- // If bandwidth = 40M, set RF Reg4 bit 21 = 0. +- else if (pAd->ate.TxWI.BW == BW_40) +- { +- if (pAd->ate.Channel <= 14) +- { +- for (i=0; i<5; i++) +- { +- if (pAd->Tx40MPwrCfgGBand[i] != 0xffffffff) +- { +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgGBand[i]); +- RTMPusecDelay(5000); +- } +- } +- } +- else +- { +- for (i=0; i<5; i++) +- { +- if (pAd->Tx40MPwrCfgABand[i] != 0xffffffff) +- { +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgABand[i]); +- RTMPusecDelay(5000); +- } +- } +-#ifdef DOT11_N_SUPPORT +- if ((pAd->ate.TxWI.PHYMODE >= MODE_HTMIX) && (pAd->ate.TxWI.MCS == 7)) +- { +- value = 0x28; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R67, value); +- } +-#endif // DOT11_N_SUPPORT // +- } +- +- // Set BBP R4 bit[4:3]=1:0 +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); +- value &= (~0x18); +- value |= 0x10; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value); +- +- +- // Set BBP R66=0x3C +- value = 0x3C; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value); +- +- // Set BBP R68=0x0C +- // to improve Rx sensitivity +- value = 0x0C; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value); +- // Set BBP R69=0x1A +- value = 0x1A; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value); +- // Set BBP R70=0x0A +- value = 0x0A; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value); +- // Set BBP R73=0x16 +- value = 0x16; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value); +- +- // If bandwidth = 40M, set RF Reg4 bit 21 = 1. +-#ifdef RT30xx +- // set BW = 40 MHz +- if(IS_RT30xx(pAd)) +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW40RfR24); +- else +-#endif // RT30xx // +- // set BW = 40 MHz +- { +- pAd->LatchRfRegs.R4 |= 0x00200000; +- RtmpRfIoWrite(pAd); +- } +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_BW_Proc (BBPCurrentBW = %d)\n", pAd->ate.TxWI.BW)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_BW_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx frame length +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_LENGTH_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- pAd->ate.TxLength = simple_strtol(arg, 0, 10); +- +- if ((pAd->ate.TxLength < 24) || (pAd->ate.TxLength > (MAX_FRAME_SIZE - 34/* == 2312 */))) +- { +- pAd->ate.TxLength = (MAX_FRAME_SIZE - 34/* == 2312 */); +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_LENGTH_Proc::Out of range, it should be in range of 24~%d.\n", (MAX_FRAME_SIZE - 34/* == 2312 */))); +- return FALSE; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_LENGTH_Proc (TxLength = %d)\n", pAd->ate.TxLength)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_LENGTH_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx frame count +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_COUNT_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- pAd->ate.TxCount = simple_strtol(arg, 0, 10); +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAd->ate.TxCount)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx frame MCS +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_MCS_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR MCS; +- INT result; +- +- MCS = simple_strtol(arg, 0, 10); +-#ifndef RT30xx +- result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS); +-#endif // RT30xx // +- +- /* RT35xx ATE will reuse this code segment. */ +-#ifdef RT30xx +- result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS, IS_RT2070(pAd)); +-#endif // RT30xx // +- +- +- if (result != -1) +- { +- pAd->ate.TxWI.MCS = (UCHAR)MCS; +- } +- else +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MCS_Proc::Out of range, refer to rate table.\n")); +- return FALSE; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MCS_Proc (MCS = %d)\n", pAd->ate.TxWI.MCS)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MCS_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx frame Mode +- 0: MODE_CCK +- 1: MODE_OFDM +- 2: MODE_HTMIX +- 3: MODE_HTGREENFIELD +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_MODE_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR BbpData = 0; +- +- pAd->ate.TxWI.PHYMODE = simple_strtol(arg, 0, 10); +- +- if (pAd->ate.TxWI.PHYMODE > 3) +- { +- pAd->ate.TxWI.PHYMODE = 0; +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::Out of range.\nIt should be in range of 0~3\n")); +- ATEDBGPRINT(RT_DEBUG_ERROR, ("0: CCK, 1: OFDM, 2: HT_MIX, 3: HT_GREEN_FIELD.\n")); +- return FALSE; +- } +- +- // Turn on BBP 20MHz mode by request here. +- if (pAd->ate.TxWI.PHYMODE == MODE_CCK) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BbpData); +- BbpData &= (~0x18); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BbpData); +- pAd->ate.TxWI.BW = BW_20; +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::CCK Only support 20MHZ. Switch to 20MHZ.\n")); +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MODE_Proc (TxMode = %d)\n", pAd->ate.TxWI.PHYMODE)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MODE_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Set ATE Tx frame GI +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-INT Set_ATE_TX_GI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- pAd->ate.TxWI.ShortGI = simple_strtol(arg, 0, 10); +- +- if (pAd->ate.TxWI.ShortGI > 1) +- { +- pAd->ate.TxWI.ShortGI = 0; +- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_GI_Proc::Out of range\n")); +- return FALSE; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_GI_Proc (GI = %d)\n", pAd->ate.TxWI.ShortGI)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_GI_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-INT Set_ATE_RX_FER_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- pAd->ate.bRxFER = simple_strtol(arg, 0, 10); +- +- if (pAd->ate.bRxFER == 1) +- { +- pAd->ate.RxCntPerSec = 0; +- pAd->ate.RxTotalCnt = 0; +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_FER_Proc (bRxFER = %d)\n", pAd->ate.bRxFER)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_FER_Proc Success\n")); +- +- +- return TRUE; +-} +- +- +-INT Set_ATE_Read_RF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/07/10:KH add to support RT30xx ATE<-- +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- /* modify by WY for Read RF Reg. error */ +- UCHAR RFValue; +- INT index=0; +- +- for (index = 0; index < 32; index++) +- { +- ATE_RF_IO_READ8_BY_REG_ID(pAd, index, (PUCHAR)&RFValue); +- ate_print("R%d=%d\n",index,RFValue); +- } +- } +- else +-//2008/07/10:KH add to support RT30xx ATE--> +-#endif // RTMP_RF_RW_SUPPORT // +- { +- ate_print(KERN_EMERG "R1 = %lx\n", pAd->LatchRfRegs.R1); +- ate_print(KERN_EMERG "R2 = %lx\n", pAd->LatchRfRegs.R2); +- ate_print(KERN_EMERG "R3 = %lx\n", pAd->LatchRfRegs.R3); +- ate_print(KERN_EMERG "R4 = %lx\n", pAd->LatchRfRegs.R4); +- } +- return TRUE; +-} +- +- +-INT Set_ATE_Write_RF1_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT32 value = (UINT32) simple_strtol(arg, 0, 16); +- +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/07/10:KH add to support 3070 ATE<-- +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- ate_print("Warning!! RT3xxx Don't Support !\n"); +- return FALSE; +- +- } +- else +-//2008/07/10:KH add to support 3070 ATE--> +-#endif // RTMP_RF_RW_SUPPORT // +- { +- pAd->LatchRfRegs.R1 = value; +- RtmpRfIoWrite(pAd); +- } +- return TRUE; +-} +- +- +-INT Set_ATE_Write_RF2_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT32 value = (UINT32) simple_strtol(arg, 0, 16); +- +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/07/10:KH add to support 3070 ATE<-- +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- ate_print("Warning!! RT3xxx Don't Support !\n"); +- return FALSE; +- +- } +- else +-//2008/07/10:KH add to support 3070 ATE--> +-#endif // RTMP_RF_RW_SUPPORT // +- { +- pAd->LatchRfRegs.R2 = value; +- RtmpRfIoWrite(pAd); +- } +- return TRUE; +-} +- +- +-INT Set_ATE_Write_RF3_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT32 value = simple_strtol(arg, 0, 16); +- +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/07/10:KH add to support 3070 ATE<-- +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- ate_print("Warning!! RT3xxx Don't Support !\n"); +- return FALSE; +- +- } +- else +-//2008/07/10:KH add to support 3070 ATE--> +-#endif // RTMP_RF_RW_SUPPORT // +- { +- pAd->LatchRfRegs.R3 = value; +- RtmpRfIoWrite(pAd); +- } +- return TRUE; +-} +- +- +-INT Set_ATE_Write_RF4_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT32 value = (UINT32) simple_strtol(arg, 0, 16); +- +-#ifdef RTMP_RF_RW_SUPPORT +-//2008/07/10:KH add to support 3070 ATE<-- +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { +- ate_print("Warning!! RT3xxx Don't Support !\n"); +- return FALSE; +- +- } +- else +-//2008/07/10:KH add to support 3070 ATE--> +-#endif // RTMP_RF_RW_SUPPORT // +- { +- pAd->LatchRfRegs.R4 = value; +- RtmpRfIoWrite(pAd); +- } +- return TRUE; +-} +- +- +-/* +-========================================================================== +- Description: +- Load and Write EEPROM from a binary file prepared in advance. +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +-========================================================================== +-*/ +-#if defined(LINUX) || defined(VXWORKS) +-INT Set_ATE_Load_E2P_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- BOOLEAN ret = FALSE; +- PSTRING src = EEPROM_BIN_FILE_NAME; +- RTMP_OS_FD srcf; +- INT32 retval; +- USHORT WriteEEPROM[(EEPROM_SIZE/2)]; +- INT FileLength = 0; +- UINT32 value = (UINT32) simple_strtol(arg, 0, 10); +- RTMP_OS_FS_INFO osFSInfo; +- +- ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __FUNCTION__, value)); +- +- if (value > 0) +- { +- /* zero the e2p buffer */ +- NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE); +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- do +- { +- /* open the bin file */ +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- ate_print("%s - Error opening file %s\n", __FUNCTION__, src); +- break; +- } +- +- /* read the firmware from the file *.bin */ +- FileLength = RtmpOSFileRead(srcf, (PSTRING)WriteEEPROM, EEPROM_SIZE); +- +- if (FileLength != EEPROM_SIZE) +- { +- ate_print("%s: error file length (=%d) in e2p.bin\n", +- __FUNCTION__, FileLength); +- break; +- } +- else +- { +- /* write the content of .bin file to EEPROM */ +- rt_ee_write_all(pAd, WriteEEPROM); +- ret = TRUE; +- } +- break; +- } while(TRUE); +- +- /* close firmware file */ +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- ; +- } +- else +- { +- retval = RtmpOSFileClose(srcf); +- +- if (retval) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("--> Error %d closing %s\n", -retval, src)); +- +- } +- } +- +- /* restore */ +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- } +- +- ATEDBGPRINT(RT_DEBUG_ERROR, ("<=== %s (ret=%d)\n", __FUNCTION__, ret)); +- +- return ret; +- +-} +-#endif // defined(LINUX) || defined(VXWORKS) // +- +- +- +- +-INT Set_ATE_Read_E2P_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- USHORT buffer[EEPROM_SIZE/2]; +- USHORT *p; +- int i; +- +- rt_ee_read_all(pAd, (USHORT *)buffer); +- p = buffer; +- for (i = 0; i < (EEPROM_SIZE/2); i++) +- { +- ate_print("%4.4x ", *p); +- if (((i+1) % 16) == 0) +- ate_print("\n"); +- p++; +- } +- return TRUE; +-} +- +- +- +- +-INT Set_ATE_Show_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ate_print("Mode=%d\n", pAd->ate.Mode); +- ate_print("TxPower0=%d\n", pAd->ate.TxPower0); +- ate_print("TxPower1=%d\n", pAd->ate.TxPower1); +- ate_print("TxAntennaSel=%d\n", pAd->ate.TxAntennaSel); +- ate_print("RxAntennaSel=%d\n", pAd->ate.RxAntennaSel); +- ate_print("BBPCurrentBW=%d\n", pAd->ate.TxWI.BW); +- ate_print("GI=%d\n", pAd->ate.TxWI.ShortGI); +- ate_print("MCS=%d\n", pAd->ate.TxWI.MCS); +- ate_print("TxMode=%d\n", pAd->ate.TxWI.PHYMODE); +- ate_print("Addr1=%02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->ate.Addr1[0], pAd->ate.Addr1[1], pAd->ate.Addr1[2], pAd->ate.Addr1[3], pAd->ate.Addr1[4], pAd->ate.Addr1[5]); +- ate_print("Addr2=%02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->ate.Addr2[0], pAd->ate.Addr2[1], pAd->ate.Addr2[2], pAd->ate.Addr2[3], pAd->ate.Addr2[4], pAd->ate.Addr2[5]); +- ate_print("Addr3=%02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->ate.Addr3[0], pAd->ate.Addr3[1], pAd->ate.Addr3[2], pAd->ate.Addr3[3], pAd->ate.Addr3[4], pAd->ate.Addr3[5]); +- ate_print("Channel=%d\n", pAd->ate.Channel); +- ate_print("TxLength=%d\n", pAd->ate.TxLength); +- ate_print("TxCount=%u\n", pAd->ate.TxCount); +- ate_print("RFFreqOffset=%d\n", pAd->ate.RFFreqOffset); +- ate_print(KERN_EMERG "Set_ATE_Show_Proc Success\n"); +- return TRUE; +-} +- +- +-INT Set_ATE_Help_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ate_print("ATE=ATESTART, ATESTOP, TXCONT, TXCARR, TXFRAME, RXFRAME\n"); +- ate_print("ATEDA\n"); +- ate_print("ATESA\n"); +- ate_print("ATEBSSID\n"); +- ate_print("ATECHANNEL, range:0~14(unless A band !)\n"); +- ate_print("ATETXPOW0, set power level of antenna 1.\n"); +- ate_print("ATETXPOW1, set power level of antenna 2.\n"); +- ate_print("ATETXANT, set TX antenna. 0:all, 1:antenna one, 2:antenna two.\n"); +- ate_print("ATERXANT, set RX antenna.0:all, 1:antenna one, 2:antenna two, 3:antenna three.\n"); +- ate_print("ATETXFREQOFFSET, set frequency offset, range 0~63\n"); +- ate_print("ATETXBW, set BandWidth, 0:20MHz, 1:40MHz.\n"); +- ate_print("ATETXLEN, set Frame length, range 24~%d\n", (MAX_FRAME_SIZE - 34/* == 2312 */)); +- ate_print("ATETXCNT, set how many frame going to transmit.\n"); +- ate_print("ATETXMCS, set MCS, reference to rate table.\n"); +- ate_print("ATETXMODE, set Mode 0:CCK, 1:OFDM, 2:HT-Mix, 3:GreenField, reference to rate table.\n"); +- ate_print("ATETXGI, set GI interval, 0:Long, 1:Short\n"); +- ate_print("ATERXFER, 0:disable Rx Frame error rate. 1:enable Rx Frame error rate.\n"); +- ate_print("ATERRF, show all RF registers.\n"); +- ate_print("ATEWRF1, set RF1 register.\n"); +- ate_print("ATEWRF2, set RF2 register.\n"); +- ate_print("ATEWRF3, set RF3 register.\n"); +- ate_print("ATEWRF4, set RF4 register.\n"); +- ate_print("ATELDE2P, load EEPROM from .bin file.\n"); +- ate_print("ATERE2P, display all EEPROM content.\n"); +- ate_print("ATESHOW, display all parameters of ATE.\n"); +- ate_print("ATEHELP, online help.\n"); +- +- return TRUE; +-} +- +- +- +- +-/* +-========================================================================== +- Description: +- +- AsicSwitchChannel() dedicated for ATE. +- +-========================================================================== +-*/ +-VOID ATEAsicSwitchChannel( +- IN PRTMP_ADAPTER pAd) +-{ +- UINT32 R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0, Value = 0; +- CHAR TxPwer = 0, TxPwer2 = 0; +- UCHAR index = 0, BbpValue = 0, R66 = 0x30; +- RTMP_RF_REGS *RFRegTable; +- UCHAR Channel = 0; +- +- RFRegTable = NULL; +- +-#ifdef RALINK_28xx_QA +- // for QA mode, TX power values are passed from UI +- if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE)) +- { +- if (pAd->ate.Channel != pAd->LatchRfRegs.Channel) +- { +- pAd->ate.Channel = pAd->LatchRfRegs.Channel; +- } +- return; +- } +- else +-#endif // RALINK_28xx_QA // +- Channel = pAd->ate.Channel; +- +- // select antenna for RT3090 +- AsicAntennaSelect(pAd, Channel); +- +- // fill Tx power value +- TxPwer = pAd->ate.TxPower0; +- TxPwer2 = pAd->ate.TxPower1; +-#ifdef RT30xx +-//2008/07/10:KH add to support 3070 ATE<-- +- +- /* +- The RF programming sequence is difference between 3xxx and 2xxx. +- The 3070 is 1T1R. Therefore, we don't need to set the number of Tx/Rx path +- and the only job is to set the parameters of channels. +- */ +- if (IS_RT30xx(pAd) && ((pAd->RfIcType == RFIC_3020) || +- (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022) || +- (pAd->RfIcType == RFIC_2020))) +- { +- /* modify by WY for Read RF Reg. error */ +- UCHAR RFValue = 0; +- +- for (index = 0; index < NUM_OF_3020_CHNL; index++) +- { +- if (Channel == FreqItems3020[index].Channel) +- { +- // Programming channel parameters. +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R02, FreqItems3020[index].N); +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R03, FreqItems3020[index].K); +- +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R06, (PUCHAR)&RFValue); +- RFValue = (RFValue & 0xFC) | FreqItems3020[index].R; +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R06, (UCHAR)RFValue); +- +- // Set Tx Power. +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R12, (PUCHAR)&RFValue); +- RFValue = (RFValue & 0xE0) | TxPwer; +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R12, (UCHAR)RFValue); +- +- // Set RF offset. +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R23, (PUCHAR)&RFValue); +- //2008/08/06: KH modified "pAd->RFFreqOffset" to "pAd->ate.RFFreqOffset" +- RFValue = (RFValue & 0x80) | pAd->ate.RFFreqOffset; +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R23, (UCHAR)RFValue); +- +- // Set BW. +- if (pAd->ate.TxWI.BW == BW_40) +- { +- RFValue = pAd->Mlme.CaliBW40RfR24; +-// DISABLE_11N_CHECK(pAd); +- } +- else +- { +- RFValue = pAd->Mlme.CaliBW20RfR24; +- } +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R24, (UCHAR)RFValue); +- +- // Enable RF tuning +- ATE_RF_IO_READ8_BY_REG_ID(pAd, RF_R07, (PUCHAR)&RFValue); +- RFValue = RFValue | 0x1; +- ATE_RF_IO_WRITE8_BY_REG_ID(pAd, RF_R07, (UCHAR)RFValue); +- +- // latch channel for future usage +- pAd->LatchRfRegs.Channel = Channel; +- +- break; +- } +- } +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", +- Channel, +- pAd->RfIcType, +- TxPwer, +- TxPwer2, +- pAd->Antenna.field.TxPath, +- FreqItems3020[index].N, +- FreqItems3020[index].K, +- FreqItems3020[index].R)); +- } +- else +-//2008/07/10:KH add to support 3070 ATE--> +-#endif // RT30xx // +- { +- /* RT28xx */ +- RFRegTable = RF2850RegTable; +- +- switch (pAd->RfIcType) +- { +- /* But only 2850 and 2750 support 5.5GHz band... */ +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R2 = RFRegTable[index].R2; +- +- // If TX path is 1, bit 14 = 1; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- switch (pAd->ate.RxAntennaSel) +- { +- case 1: +- R2 |= 0x20040; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x00; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- case 2: +- R2 |= 0x10040; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x01; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- default: +- R2 |= 0x40; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- /* Only enable two Antenna to receive. */ +- BbpValue |= 0x08; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- } +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- // write 1 to off RxPath +- R2 |= 0x20040; +- } +- +- if (pAd->Antenna.field.TxPath == 2) +- { +- if (pAd->ate.TxAntennaSel == 1) +- { +- // If TX Antenna select is 1 , bit 14 = 1; Disable Ant 2 +- R2 |= 0x4000; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); +- BbpValue &= 0xE7; // 11100111B +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); +- } +- else if (pAd->ate.TxAntennaSel == 2) +- { +- // If TX Antenna select is 2 , bit 15 = 1; Disable Ant 1 +- R2 |= 0x8000; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); +- BbpValue &= 0xE7; +- BbpValue |= 0x08; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); +- } +- else +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); +- BbpValue &= 0xE7; +- BbpValue |= 0x10; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); +- } +- } +- if (pAd->Antenna.field.RxPath == 3) +- { +- switch (pAd->ate.RxAntennaSel) +- { +- case 1: +- R2 |= 0x20040; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x00; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- case 2: +- R2 |= 0x10040; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x01; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- case 3: +- R2 |= 0x30000; +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x02; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- default: +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); +- BbpValue &= 0xE4; +- BbpValue |= 0x10; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); +- break; +- } +- } +- +- if (Channel > 14) +- { +- // initialize R3, R4 +- R3 = (RFRegTable[index].R3 & 0xffffc1ff); +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->ate.RFFreqOffset << 15); +- +- /* +- According the Rory's suggestion to solve the middle range issue. +- +- 5.5G band power range : 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" +- means the TX power reduce 7dB. +- */ +- // R3 +- if ((TxPwer >= -7) && (TxPwer < 0)) +- { +- TxPwer = (7+TxPwer); +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATEAsicSwitchChannel: TxPwer=%d \n", TxPwer)); +- } +- else +- { +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10) | (1 << 9); +- } +- +- // R4 +- if ((TxPwer2 >= -7) && (TxPwer2 < 0)) +- { +- TxPwer2 = (7+TxPwer2); +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATEAsicSwitchChannel: TxPwer2=%d \n", TxPwer2)); +- } +- else +- { +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7) | (1 << 6); +- } +- } +- else +- { +- // Set TX power0. +- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); +- // Set frequency offset and TX power1. +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->ate.RFFreqOffset << 15) | (TxPwer2 <<6); +- } +- +- // based on BBP current mode before changing RF channel +- if (pAd->ate.TxWI.BW == BW_40) +- { +- R4 |=0x200000; +- } +- +- // Update variables. +- pAd->LatchRfRegs.Channel = Channel; +- pAd->LatchRfRegs.R1 = RFRegTable[index].R1; +- pAd->LatchRfRegs.R2 = R2; +- pAd->LatchRfRegs.R3 = R3; +- pAd->LatchRfRegs.R4 = R4; +- +- RtmpRfIoWrite(pAd); +- +- break; +- } +- } +- break; +- +- default: +- break; +- } +- } +- +- // Change BBP setting during switch from a->g, g->a +- if (Channel <= 14) +- { +- UINT32 TxPinCfg = 0x00050F0A;// 2007.10.09 by Brian : 0x0005050A ==> 0x00050F0A +- +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- +- /* For 1T/2R chip only... */ +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); +- } +- else +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84); +- } +- +- // According the Rory's suggestion to solve the middle range issue. +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R86, &BbpValue);// may be removed for RT35xx ++ +- +- ASSERT((BbpValue == 0x00)); +- if ((BbpValue != 0x00)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0x00); +- }// may be removed for RT35xx -- +- +- // 5.5 GHz band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x04); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R. +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- // calibration power unbalance issues +- if (pAd->Antenna.field.TxPath == 2) +- { +- if (pAd->ate.TxAntennaSel == 1) +- { +- TxPinCfg &= 0xFFFFFFF7; +- } +- else if (pAd->ate.TxAntennaSel == 2) +- { +- TxPinCfg &= 0xFFFFFFFD; +- } +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +- else +- { +- UINT32 TxPinCfg = 0x00050F05;// 2007.10.09 by Brian : 0x00050505 ==> 0x00050F05 +- +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); +- +- // According the Rory's suggestion to solve the middle range issue. +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R86, &BbpValue);// may be removed for RT35xx ++ +- +- ASSERT((BbpValue == 0x00)); +- if ((BbpValue != 0x00)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0x00); +- } +- +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R91, &BbpValue); +- ASSERT((BbpValue == 0x04)); +- +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R92, &BbpValue); +- ASSERT((BbpValue == 0x00));// may be removed for RT35xx -- +- +- // 5.5 GHz band selection PIN, bit1 and bit2 are complement +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); +- Value &= (~0x6); +- Value |= (0x02); +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- +- // Turn off unused PA or LNA when only 1T or 1R. +- if (pAd->Antenna.field.TxPath == 1) +- { +- TxPinCfg &= 0xFFFFFFF3; +- } +- if (pAd->Antenna.field.RxPath == 1) +- { +- TxPinCfg &= 0xFFFFF3FF; +- } +- +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); +- } +- +- +- // R66 should be set according to Channel and use 20MHz when scanning +- if (Channel <= 14) +- { +- // BG band +- R66 = 0x2E + GET_LNA_GAIN(pAd); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- else +- { +- // 5.5 GHz band +- if (pAd->ate.TxWI.BW == BW_20) +- { +- R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- else +- { +- R66 = (UCHAR)(0x3A + (GET_LNA_GAIN(pAd)*5)/3); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- +- /* +- On 11A, We should delay and wait RF/BBP to be stable +- and the appropriate time should be 1000 micro seconds. +- +- 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. +- */ +- RTMPusecDelay(1000); +- +-#ifndef RTMP_RF_RW_SUPPORT +- if (Channel > 14) +- { +- // When 5.5GHz band the LSB of TxPwr will be used to reduced 7dB or not. +- ATEDBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", +- Channel, +- pAd->RfIcType, +- pAd->Antenna.field.TxPath, +- pAd->LatchRfRegs.R1, +- pAd->LatchRfRegs.R2, +- pAd->LatchRfRegs.R3, +- pAd->LatchRfRegs.R4)); +- } +- else +- { +- ATEDBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%u, Pwr1=%u, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", +- Channel, +- pAd->RfIcType, +- (R3 & 0x00003e00) >> 9, +- (R4 & 0x000007c0) >> 6, +- pAd->Antenna.field.TxPath, +- pAd->LatchRfRegs.R1, +- pAd->LatchRfRegs.R2, +- pAd->LatchRfRegs.R3, +- pAd->LatchRfRegs.R4)); +- } +-#endif // RTMP_RF_RW_SUPPORT // +-} +- +- +- +-/* In fact, no one will call this routine so far ! */ +- +-/* +-========================================================================== +- Description: +- Gives CCK TX rate 2 more dB TX power. +- This routine works only in ATE mode. +- +- calculate desired Tx power in RF R3.Tx0~5, should consider - +- 0. if current radio is a noisy environment (pAd->DrsCounters.fNoisyEnvironment) +- 1. TxPowerPercentage +- 2. auto calibration based on TSSI feedback +- 3. extra 2 db for CCK +- 4. -10 db upon very-short distance (AvgRSSI >= -40db) to AP +- +- NOTE: Since this routine requires the value of (pAd->DrsCounters.fNoisyEnvironment), +- it should be called AFTER MlmeDynamicTxRateSwitching() +-========================================================================== +-*/ +-VOID ATEAsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd) +-{ +- INT i, j; +- CHAR DeltaPwr = 0; +- BOOLEAN bAutoTxAgc = FALSE; +- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; +- UCHAR BbpR49 = 0, idx; +- PCHAR pTxAgcCompensate; +- ULONG TxPwr[5]; +- CHAR Value; +- +- /* no one calls this procedure so far */ +- if (pAd->ate.TxWI.BW == BW_40) +- { +- if (pAd->ate.Channel > 14) +- { +- TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; +- } +- } +- else +- { +- if (pAd->ate.Channel > 14) +- { +- TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { +- TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; +- TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; +- TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +- TxPwr[3] = pAd->Tx20MPwrCfgGBand[3]; +- TxPwr[4] = pAd->Tx20MPwrCfgGBand[4]; +- } +- } +- +- // TX power compensation for temperature variation based on TSSI. +- // Do it per 4 seconds. +- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) +- { +- if (pAd->ate.Channel <= 14) +- { +- /* bg channel */ +- bAutoTxAgc = pAd->bAutoTxAgcG; +- TssiRef = pAd->TssiRefG; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; +- TxAgcStep = pAd->TxAgcStepG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- /* a channel */ +- bAutoTxAgc = pAd->bAutoTxAgcA; +- TssiRef = pAd->TssiRefA; +- pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; +- TxAgcStep = pAd->TxAgcStepA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- { +- /* BbpR49 is unsigned char. */ +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49); +- +- /* (p) TssiPlusBoundaryG[0] = 0 = (m) TssiMinusBoundaryG[0] */ +- /* compensate: +4 +3 +2 +1 0 -1 -2 -3 -4 * steps */ +- /* step value is defined in pAd->TxAgcStepG for tx power value */ +- +- /* [4]+1+[4] p4 p3 p2 p1 o1 m1 m2 m3 m4 */ +- /* ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 +- above value are examined in mass factory production */ +- /* [4] [3] [2] [1] [0] [1] [2] [3] [4] */ +- +- /* plus is 0x10 ~ 0x40, minus is 0x60 ~ 0x90 */ +- /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */ +- /* if value is 0x65, tx power will be -= TxAgcStep*(2-1) */ +- +- if (BbpR49 > pTssiMinusBoundary[1]) +- { +- // Reading is larger than the reference value. +- // Check for how large we need to decrease the Tx power. +- for (idx = 1; idx < 5; idx++) +- { +- // Found the range. +- if (BbpR49 <= pTssiMinusBoundary[idx]) +- break; +- } +- +- // The index is the step we should decrease, idx = 0 means there is nothing to compensate. +-// if (R3 > (ULONG) (TxAgcStep * (idx-1))) +- *pTxAgcCompensate = -(TxAgcStep * (idx-1)); +-// else +-// *pTxAgcCompensate = -((UCHAR)R3); +- +- DeltaPwr += (*pTxAgcCompensate); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else if (BbpR49 < pTssiPlusBoundary[1]) +- { +- // Reading is smaller than the reference value. +- // Check for how large we need to increase the Tx power. +- for (idx = 1; idx < 5; idx++) +- { +- // Found the range. +- if (BbpR49 >= pTssiPlusBoundary[idx]) +- break; +- } +- +- // The index is the step we should increase, idx = 0 means there is nothing to compensate. +- *pTxAgcCompensate = TxAgcStep * (idx-1); +- DeltaPwr += (*pTxAgcCompensate); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else +- { +- *pTxAgcCompensate = 0; +- ATEDBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, 0)); +- } +- } +- } +- else +- { +- if (pAd->ate.Channel <= 14) +- { +- bAutoTxAgc = pAd->bAutoTxAgcG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- bAutoTxAgc = pAd->bAutoTxAgcA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; +- } +- +- if (bAutoTxAgc) +- DeltaPwr += (*pTxAgcCompensate); +- } +- +- /* Calculate delta power based on the percentage specified from UI. */ +- // E2PROM setting is calibrated for maximum TX power (i.e. 100%) +- // We lower TX power here according to the percentage specified from UI. +- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW +- { +- DeltaPwr -= 1; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW +- { +- DeltaPwr -= 3; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW +- { +- DeltaPwr -= 6; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW +- { +- DeltaPwr -= 9; +- } +- else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW +- { +- DeltaPwr -= 12; +- } +- +- /* Reset different new tx power for different TX rate. */ +- for (i=0; i<5; i++) +- { +- if (TxPwr[i] != 0xffffffff) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */ +- +- if ((Value + DeltaPwr) < 0) +- { +- Value = 0; /* min */ +- } +- else if ((Value + DeltaPwr) > 0xF) +- { +- Value = 0xF; /* max */ +- } +- else +- { +- Value += DeltaPwr; /* temperature compensation */ +- } +- +- /* fill new value to CSR offset */ +- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); +- } +- +- /* write tx power value to CSR */ +- /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M +- TX power for OFDM 6M/9M +- TX power for CCK5.5M/11M +- TX power for CCK1M/2M */ +- /* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */ +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]); +- +- +- } +- } +- +-} +- +- +-/* +-======================================================================== +- Routine Description: +- Write TxWI for ATE mode. +- +- Return Value: +- None +-======================================================================== +-*/ +-#ifdef RTMP_MAC_PCI +-static VOID ATEWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pOutTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit) +-{ +- TXWI_STRUC TxWI; +- PTXWI_STRUC pTxWI; +- +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +- NdisZeroMemory(&TxWI, TXWI_SIZE); +- pTxWI = &TxWI; +- +- pTxWI->FRAG= FRAG; +- +- pTxWI->CFACK = CFACK; +- pTxWI->TS= InsTimestamp; +- pTxWI->AMPDU = AMPDU; +- pTxWI->ACK = Ack; +- pTxWI->txop= Txopmode; +- +- pTxWI->NSEQ = NSeq; +- +- // John tune the performace with Intel Client in 20 MHz performance +- if ( BASize >7 ) +- BASize =7; +- +- pTxWI->BAWinSize = BASize; +- pTxWI->WirelessCliID = WCID; +- pTxWI->MPDUtotalByteCount = Length; +- pTxWI->PacketId = PID; +- +- // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +- pTxWI->ShortGI = pTransmit->field.ShortGI; +- pTxWI->STBC = pTransmit->field.STBC; +- +- pTxWI->MCS = pTransmit->field.MCS; +- pTxWI->PHYMODE = pTransmit->field.MODE; +- pTxWI->CFACK = CfAck; +- pTxWI->MIMOps = 0; +- pTxWI->MpduDensity = 0; +- +- pTxWI->PacketId = pTxWI->MCS; +- NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC)); +- +- return; +-} +-#endif // RTMP_MAC_PCI // +- +- +- +- +-/* +-======================================================================== +- +- Routine Description: +- Disable protection for ATE. +-======================================================================== +-*/ +-VOID ATEDisableAsicProtect( +- IN PRTMP_ADAPTER pAd) +-{ +- PROT_CFG_STRUC ProtCfg, ProtCfg4; +- UINT32 Protect[6]; +- USHORT offset; +- UCHAR i; +- UINT32 MacReg = 0; +- +- // Config ASIC RTS threshold register +- RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); +- MacReg &= 0xFF0000FF; +- MacReg |= (pAd->CommonCfg.RtsThreshold << 8); +- RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); +- +- // Initial common protection settings +- RTMPZeroMemory(Protect, sizeof(Protect)); +- ProtCfg4.word = 0; +- ProtCfg.word = 0; +- ProtCfg.field.TxopAllowGF40 = 1; +- ProtCfg.field.TxopAllowGF20 = 1; +- ProtCfg.field.TxopAllowMM40 = 1; +- ProtCfg.field.TxopAllowMM20 = 1; +- ProtCfg.field.TxopAllowOfdm = 1; +- ProtCfg.field.TxopAllowCck = 1; +- ProtCfg.field.RTSThEn = 1; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- +- // Handle legacy(B/G) protection +- ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; +- Protect[0] = ProtCfg.word; +- Protect[1] = ProtCfg.word; +- +- // NO PROTECT +- // 1.All STAs in the BSS are 20/40 MHz HT +- // 2. in ai 20/40MHz BSS +- // 3. all STAs are 20MHz in a 20MHz BSS +- // Pure HT. no protection. +- +- // MM20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[2] = 0x01744004; +- +- // MM40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[3] = 0x03f44084; +- +- // CF20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[4] = 0x01744004; +- +- // CF40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[5] = 0x03f44084; +- +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- +- offset = CCK_PROT_CFG; +- for (i = 0;i < 6;i++) +- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]); +- +-} +- +- +- +- +-/* There are two ways to convert Rssi */ +-/* the way used with GET_LNA_GAIN() */ +-CHAR ATEConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber) +-{ +- UCHAR RssiOffset, LNAGain; +- +- // Rssi equals to zero should be an invalid value +- if (Rssi == 0) +- return -99; +- +- LNAGain = GET_LNA_GAIN(pAd); +- if (pAd->LatchRfRegs.Channel > 14) +- { +- if (RssiNumber == 0) +- RssiOffset = pAd->ARssiOffset0; +- else if (RssiNumber == 1) +- RssiOffset = pAd->ARssiOffset1; +- else +- RssiOffset = pAd->ARssiOffset2; +- } +- else +- { +- if (RssiNumber == 0) +- RssiOffset = pAd->BGRssiOffset0; +- else if (RssiNumber == 1) +- RssiOffset = pAd->BGRssiOffset1; +- else +- RssiOffset = pAd->BGRssiOffset2; +- } +- +- return (-12 - RssiOffset - LNAGain - Rssi); +-} +- +- +-/* +-======================================================================== +- +- Routine Description: +- Set Japan filter coefficients if needed. +- Note: +- This routine should only be called when +- entering TXFRAME mode or TXCONT mode. +- +-======================================================================== +-*/ +-static VOID SetJapanFilter( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR BbpData = 0; +- +- // +- // If Channel=14 and Bandwidth=20M and Mode=CCK, set BBP R4 bit5=1 +- // (Japan Tx filter coefficients)when (TXFRAME or TXCONT). +- // +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BbpData); +- +- if ((pAd->ate.TxWI.PHYMODE == MODE_CCK) && (pAd->ate.Channel == 14) && (pAd->ate.TxWI.BW == BW_20)) +- { +- BbpData |= 0x20; // turn on +- ATEDBGPRINT(RT_DEBUG_TRACE, ("SetJapanFilter!!!\n")); +- } +- else +- { +- BbpData &= 0xdf; // turn off +- ATEDBGPRINT(RT_DEBUG_TRACE, ("ClearJapanFilter!!!\n")); +- } +- +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BbpData); +-} +- +- +-VOID ATESampleRssi( +- IN PRTMP_ADAPTER pAd, +- IN PRXWI_STRUC pRxWI) +-{ +- /* There are two ways to collect RSSI. */ +-// pAd->LastRxRate = (USHORT)((pRxWI->MCS) + (pRxWI->BW <<7) + (pRxWI->ShortGI <<8)+ (pRxWI->PHYMODE <<14)) ; +- if (pRxWI->RSSI0 != 0) +- { +- pAd->ate.LastRssi0 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI0, RSSI_0); +- pAd->ate.AvgRssi0X8 = (pAd->ate.AvgRssi0X8 - pAd->ate.AvgRssi0) + pAd->ate.LastRssi0; +- pAd->ate.AvgRssi0 = pAd->ate.AvgRssi0X8 >> 3; +- } +- if (pRxWI->RSSI1 != 0) +- { +- pAd->ate.LastRssi1 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI1, RSSI_1); +- pAd->ate.AvgRssi1X8 = (pAd->ate.AvgRssi1X8 - pAd->ate.AvgRssi1) + pAd->ate.LastRssi1; +- pAd->ate.AvgRssi1 = pAd->ate.AvgRssi1X8 >> 3; +- } +- if (pRxWI->RSSI2 != 0) +- { +- pAd->ate.LastRssi2 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI2, RSSI_2); +- pAd->ate.AvgRssi2X8 = (pAd->ate.AvgRssi2X8 - pAd->ate.AvgRssi2) + pAd->ate.LastRssi2; +- pAd->ate.AvgRssi2 = pAd->ate.AvgRssi2X8 >> 3; +- } +- +- pAd->ate.LastSNR0 = (CHAR)(pRxWI->SNR0);// CHAR ==> UCHAR ? +- pAd->ate.LastSNR1 = (CHAR)(pRxWI->SNR1);// CHAR ==> UCHAR ? +- +- pAd->ate.NumOfAvgRssiSample ++; +-} +- +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPStationStop( +- IN PRTMP_ADAPTER pAd) +-{ +-// BOOLEAN Cancelled; +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("==> RTMPStationStop\n")); +- +- // For rx statistics, we need to keep this timer running. +-// RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("<== RTMPStationStop\n")); +-} +- +- +-VOID RTMPStationStart( +- IN PRTMP_ADAPTER pAd) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE, ("==> RTMPStationStart\n")); +- +-#ifdef RTMP_MAC_PCI +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- /* We did not cancel this timer when entering ATE mode. */ +-// RTMPSetTimer(&pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV); +-#endif // RTMP_MAC_PCI // +- +- ATEDBGPRINT(RT_DEBUG_TRACE, ("<== RTMPStationStart\n")); +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-/* +-========================================================================== +- Description: +- Setup Frame format. +- NOTE: +- This routine should only be used in ATE mode. +-========================================================================== +-*/ +-#ifdef RTMP_MAC_PCI +-static INT ATESetUpFrame( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 TxIdx) +-{ +- UINT j; +- PTXD_STRUC pTxD; +-#ifdef RT_BIG_ENDIAN +- PTXD_STRUC pDestTxD; +- TXD_STRUC TxD; +-#endif +- PNDIS_PACKET pPacket; +- PUCHAR pDest; +- PVOID AllocVa; +- NDIS_PHYSICAL_ADDRESS AllocPa; +- HTTRANSMIT_SETTING TxHTPhyMode; +- +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE]; +- PTXWI_STRUC pTxWI = (PTXWI_STRUC) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- PUCHAR pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- +-#ifdef RALINK_28xx_QA +- PHEADER_802_11 pHeader80211; +-#endif // RALINK_28xx_QA // +- +- if (pAd->ate.bQATxStart == TRUE) +- { +- // always use QID_AC_BE and FIFO_EDCA +- +- // fill TxWI +- TxHTPhyMode.field.BW = pAd->ate.TxWI.BW; +- TxHTPhyMode.field.ShortGI = pAd->ate.TxWI.ShortGI; +- TxHTPhyMode.field.STBC = 0; +- TxHTPhyMode.field.MCS = pAd->ate.TxWI.MCS; +- TxHTPhyMode.field.MODE = pAd->ate.TxWI.PHYMODE; +- +- ATEWriteTxWI(pAd, pTxWI, pAd->ate.TxWI.FRAG, pAd->ate.TxWI.CFACK, +- pAd->ate.TxWI.TS, pAd->ate.TxWI.AMPDU, pAd->ate.TxWI.ACK, pAd->ate.TxWI.NSEQ, +- pAd->ate.TxWI.BAWinSize, 0, pAd->ate.TxWI.MPDUtotalByteCount, pAd->ate.TxWI.PacketId, 0, 0, +- pAd->ate.TxWI.txop/*IFS_HTTXOP*/, pAd->ate.TxWI.CFACK/*FALSE*/, &TxHTPhyMode); +- } +- else +- { +- TxHTPhyMode.field.BW = pAd->ate.TxWI.BW; +- TxHTPhyMode.field.ShortGI = pAd->ate.TxWI.ShortGI; +- TxHTPhyMode.field.STBC = 0; +- TxHTPhyMode.field.MCS = pAd->ate.TxWI.MCS; +- TxHTPhyMode.field.MODE = pAd->ate.TxWI.PHYMODE; +- ATEWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, +- 4, 0, pAd->ate.TxLength, 0, 0, 0, IFS_HTTXOP, FALSE, &TxHTPhyMode); +- } +- +- // fill 802.11 header +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE, pAd->ate.Header, pAd->ate.HLen); +- } +- else +-#endif // RALINK_28xx_QA // +- { +- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE, TemplateFrame, LENGTH_802_11); +- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+4, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS); +- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+10, pAd->ate.Addr2, ETH_LENGTH_OF_ADDRESS); +- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+16, pAd->ate.Addr3, ETH_LENGTH_OF_ADDRESS); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (((PUCHAR)pDMAHeaderBufVA)+TXWI_SIZE), DIR_READ, FALSE); +-#endif // RT_BIG_ENDIAN // +- +- /* alloc buffer for payload */ +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- pPacket = RTMP_AllocateRxPacketBuffer(pAd, pAd->ate.DLen + 0x100, FALSE, &AllocVa, &AllocPa); +- } +- else +-#endif // RALINK_28xx_QA // +- { +- pPacket = RTMP_AllocateRxPacketBuffer(pAd, pAd->ate.TxLength, FALSE, &AllocVa, &AllocPa); +- } +- +- if (pPacket == NULL) +- { +- pAd->ate.TxCount = 0; +- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s fail to alloc packet space.\n", __FUNCTION__)); +- return -1; +- } +- pTxRing->Cell[TxIdx].pNextNdisPacket = pPacket; +- +- pDest = (PUCHAR) AllocVa; +- +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- RTPKT_TO_OSPKT(pPacket)->len = pAd->ate.DLen; +- } +- else +-#endif // RALINK_28xx_QA // +- { +- RTPKT_TO_OSPKT(pPacket)->len = pAd->ate.TxLength - LENGTH_802_11; +- } +- +- // prepare frame payload +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- // copy pattern +- if ((pAd->ate.PLen != 0)) +- { +- int j; +- +- for (j = 0; j < pAd->ate.DLen; j+=pAd->ate.PLen) +- { +- memcpy(RTPKT_TO_OSPKT(pPacket)->data + j, pAd->ate.Pattern, pAd->ate.PLen); +- } +- } +- } +- else +-#endif // RALINK_28xx_QA // +- { +- for (j = 0; j < RTPKT_TO_OSPKT(pPacket)->len; j++) +- { +- pDest[j] = 0xA5; +- } +- } +- +- /* build Tx Descriptor */ +-#ifndef RT_BIG_ENDIAN +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +-#else +- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa; +- TxD = *pDestTxD; +- pTxD = &TxD; +-#endif // !RT_BIG_ENDIAN // +- +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQATxStart == TRUE) +- { +- // prepare TxD +- NdisZeroMemory(pTxD, TXD_SIZE); +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- // build TX DESC +- pTxD->SDPtr0 = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- pTxD->SDLen0 = TXWI_SIZE + pAd->ate.HLen; +- pTxD->LastSec0 = 0; +- pTxD->SDPtr1 = AllocPa; +- pTxD->SDLen1 = RTPKT_TO_OSPKT(pPacket)->len; +- pTxD->LastSec1 = 1; +- +- pDest = (PUCHAR)pTxWI; +- pDest += TXWI_SIZE; +- pHeader80211 = (PHEADER_802_11)pDest; +- +- // modify sequence number... +- if (pAd->ate.TxDoneCount == 0) +- { +- pAd->ate.seq = pHeader80211->Sequence; +- } +- else +- pHeader80211->Sequence = ++pAd->ate.seq; +- } +- else +-#endif // RALINK_28xx_QA // +- { +- NdisZeroMemory(pTxD, TXD_SIZE); +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- // build TX DESC +- pTxD->SDPtr0 = RTMP_GetPhysicalAddressLow (pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- pTxD->SDLen0 = TXWI_SIZE + LENGTH_802_11; +- pTxD->LastSec0 = 0; +- pTxD->SDPtr1 = AllocPa; +- pTxD->SDLen1 = RTPKT_TO_OSPKT(pPacket)->len; +- pTxD->LastSec1 = 1; +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI); +- RTMPFrameEndianChange(pAd, (((PUCHAR)pDMAHeaderBufVA)+TXWI_SIZE), DIR_WRITE, FALSE); +- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD); +- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD); +-#endif // RT_BIG_ENDIAN // +- +- return 0; +-} +-/*=======================End of RTMP_MAC_PCI =======================*/ +-#endif // RTMP_MAC_PCI // +- +- +- +- +-VOID rt_ee_read_all(PRTMP_ADAPTER pAd, USHORT *Data) +-{ +- USHORT i; +- USHORT value; +- +- +- for (i = 0 ; i < EEPROM_SIZE/2 ; ) +- { +- /* "value" is especially for some compilers... */ +- RT28xx_EEPROM_READ16(pAd, i*2, value); +- Data[i] = value; +- i++; +- } +-} +- +- +-VOID rt_ee_write_all(PRTMP_ADAPTER pAd, USHORT *Data) +-{ +- USHORT i; +- USHORT value; +- +- +- for (i = 0 ; i < EEPROM_SIZE/2 ; ) +- { +- /* "value" is especially for some compilers... */ +- value = Data[i]; +- RT28xx_EEPROM_WRITE16(pAd, i*2, value); +- i++; +- } +-} +- +- +-#ifdef RALINK_28xx_QA +-VOID ATE_QA_Statistics( +- IN PRTMP_ADAPTER pAd, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD, +- IN PHEADER_802_11 pHeader) +-{ +- // update counter first +- if (pHeader != NULL) +- { +- if (pHeader->FC.Type == BTYPE_DATA) +- { +- if (pRxD->U2M) +- pAd->ate.U2M++; +- else +- pAd->ate.OtherData++; +- } +- else if (pHeader->FC.Type == BTYPE_MGMT) +- { +- if (pHeader->FC.SubType == SUBTYPE_BEACON) +- pAd->ate.Beacon++; +- else +- pAd->ate.OtherCount++; +- } +- else if (pHeader->FC.Type == BTYPE_CNTL) +- { +- pAd->ate.OtherCount++; +- } +- } +- pAd->ate.RSSI0 = pRxWI->RSSI0; +- pAd->ate.RSSI1 = pRxWI->RSSI1; +- pAd->ate.RSSI2 = pRxWI->RSSI2; +- pAd->ate.SNR0 = pRxWI->SNR0; +- pAd->ate.SNR1 = pRxWI->SNR1; +-} +- +- +-/* command id with Cmd Type == 0x0008(for 28xx)/0x0005(for iNIC) */ +-#define RACFG_CMD_RF_WRITE_ALL 0x0000 +-#define RACFG_CMD_E2PROM_READ16 0x0001 +-#define RACFG_CMD_E2PROM_WRITE16 0x0002 +-#define RACFG_CMD_E2PROM_READ_ALL 0x0003 +-#define RACFG_CMD_E2PROM_WRITE_ALL 0x0004 +-#define RACFG_CMD_IO_READ 0x0005 +-#define RACFG_CMD_IO_WRITE 0x0006 +-#define RACFG_CMD_IO_READ_BULK 0x0007 +-#define RACFG_CMD_BBP_READ8 0x0008 +-#define RACFG_CMD_BBP_WRITE8 0x0009 +-#define RACFG_CMD_BBP_READ_ALL 0x000a +-#define RACFG_CMD_GET_COUNTER 0x000b +-#define RACFG_CMD_CLEAR_COUNTER 0x000c +- +-#define RACFG_CMD_RSV1 0x000d +-#define RACFG_CMD_RSV2 0x000e +-#define RACFG_CMD_RSV3 0x000f +- +-#define RACFG_CMD_TX_START 0x0010 +-#define RACFG_CMD_GET_TX_STATUS 0x0011 +-#define RACFG_CMD_TX_STOP 0x0012 +-#define RACFG_CMD_RX_START 0x0013 +-#define RACFG_CMD_RX_STOP 0x0014 +-#define RACFG_CMD_GET_NOISE_LEVEL 0x0015 +- +-#define RACFG_CMD_ATE_START 0x0080 +-#define RACFG_CMD_ATE_STOP 0x0081 +- +-#define RACFG_CMD_ATE_START_TX_CARRIER 0x0100 +-#define RACFG_CMD_ATE_START_TX_CONT 0x0101 +-#define RACFG_CMD_ATE_START_TX_FRAME 0x0102 +-#define RACFG_CMD_ATE_SET_BW 0x0103 +-#define RACFG_CMD_ATE_SET_TX_POWER0 0x0104 +-#define RACFG_CMD_ATE_SET_TX_POWER1 0x0105 +-#define RACFG_CMD_ATE_SET_FREQ_OFFSET 0x0106 +-#define RACFG_CMD_ATE_GET_STATISTICS 0x0107 +-#define RACFG_CMD_ATE_RESET_COUNTER 0x0108 +-#define RACFG_CMD_ATE_SEL_TX_ANTENNA 0x0109 +-#define RACFG_CMD_ATE_SEL_RX_ANTENNA 0x010a +-#define RACFG_CMD_ATE_SET_PREAMBLE 0x010b +-#define RACFG_CMD_ATE_SET_CHANNEL 0x010c +-#define RACFG_CMD_ATE_SET_ADDR1 0x010d +-#define RACFG_CMD_ATE_SET_ADDR2 0x010e +-#define RACFG_CMD_ATE_SET_ADDR3 0x010f +-#define RACFG_CMD_ATE_SET_RATE 0x0110 +-#define RACFG_CMD_ATE_SET_TX_FRAME_LEN 0x0111 +-#define RACFG_CMD_ATE_SET_TX_FRAME_COUNT 0x0112 +-#define RACFG_CMD_ATE_START_RX_FRAME 0x0113 +-#define RACFG_CMD_ATE_E2PROM_READ_BULK 0x0114 +-#define RACFG_CMD_ATE_E2PROM_WRITE_BULK 0x0115 +-#define RACFG_CMD_ATE_IO_WRITE_BULK 0x0116 +-#define RACFG_CMD_ATE_BBP_READ_BULK 0x0117 +-#define RACFG_CMD_ATE_BBP_WRITE_BULK 0x0118 +-#define RACFG_CMD_ATE_RF_READ_BULK 0x0119 +-#define RACFG_CMD_ATE_RF_WRITE_BULK 0x011a +- +- +-static VOID memcpy_exl(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len); +-static VOID memcpy_exs(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len); +-static VOID RTMP_IO_READ_BULK(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, UINT32 len); +- +- +- +-VOID RtmpDoAte( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- USHORT Command_Id; +- INT Status = NDIS_STATUS_SUCCESS; +- struct ate_racfghdr *pRaCfg; +- +- +- if ((pRaCfg = kmalloc(sizeof(struct ate_racfghdr), GFP_KERNEL)) == NULL) +- { +- Status = -EINVAL; +- return; +- } +- +- NdisZeroMemory(pRaCfg, sizeof(struct ate_racfghdr)); +- +- if (copy_from_user((PUCHAR)pRaCfg, wrq->u.data.pointer, wrq->u.data.length)) +- { +- Status = -EFAULT; +- kfree(pRaCfg); +- return; +- } +- +- Command_Id = ntohs(pRaCfg->command_id); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("\n%s: Command_Id = 0x%04x !\n", __FUNCTION__, Command_Id)); +- +- switch (Command_Id) +- { +- /* We will get this command when QA starts. */ +- case RACFG_CMD_ATE_START: +- Status=DO_RACFG_CMD_ATE_START(pAdapter,wrq,pRaCfg); +- break; +- +- /* We will get this command either QA is closed or ated is killed by user. */ +- case RACFG_CMD_ATE_STOP: +- Status=DO_RACFG_CMD_ATE_STOP(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_RF_WRITE_ALL: +- Status=DO_RACFG_CMD_RF_WRITE_ALL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_E2PROM_READ16: +- Status=DO_RACFG_CMD_E2PROM_READ16(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_E2PROM_WRITE16: +- Status=DO_RACFG_CMD_E2PROM_WRITE16(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_E2PROM_READ_ALL: +- Status=DO_RACFG_CMD_E2PROM_READ_ALL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_E2PROM_WRITE_ALL: +- Status=DO_RACFG_CMD_E2PROM_WRITE_ALL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_IO_READ: +- Status=DO_RACFG_CMD_IO_READ(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_IO_WRITE: +- Status=DO_RACFG_CMD_IO_WRITE(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_IO_READ_BULK: +- Status=DO_RACFG_CMD_IO_READ_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_BBP_READ8: +- Status=DO_RACFG_CMD_BBP_READ8(pAdapter,wrq,pRaCfg); +- break; +- case RACFG_CMD_BBP_WRITE8: +- Status=DO_RACFG_CMD_BBP_WRITE8(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_BBP_READ_ALL: +- Status=DO_RACFG_CMD_BBP_READ_ALL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_E2PROM_READ_BULK: +- Status=DO_RACFG_CMD_ATE_E2PROM_READ_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_E2PROM_WRITE_BULK: +- Status=DO_RACFG_CMD_ATE_E2PROM_WRITE_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_IO_WRITE_BULK: +- Status=DO_RACFG_CMD_ATE_IO_WRITE_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_BBP_READ_BULK: +- Status=DO_RACFG_CMD_ATE_BBP_READ_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_BBP_WRITE_BULK: +- Status=DO_RACFG_CMD_ATE_BBP_WRITE_BULK(pAdapter,wrq,pRaCfg); +- break; +- +- +- case RACFG_CMD_GET_NOISE_LEVEL: +- Status=DO_RACFG_CMD_GET_NOISE_LEVEL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_GET_COUNTER: +- Status=DO_RACFG_CMD_GET_COUNTER(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_CLEAR_COUNTER: +- Status=DO_RACFG_CMD_CLEAR_COUNTER(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_TX_START: +- Status=DO_RACFG_CMD_TX_START(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_GET_TX_STATUS: +- Status=DO_RACFG_CMD_GET_TX_STATUS(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_TX_STOP: +- Status=DO_RACFG_CMD_TX_STOP(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_RX_START: +- Status=DO_RACFG_CMD_RX_START(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_RX_STOP: +- Status=DO_RACFG_CMD_RX_STOP(pAdapter,wrq,pRaCfg); +- break; +- +- /* The following cases are for new ATE GUI(not QA). */ +- /*==================================================*/ +- case RACFG_CMD_ATE_START_TX_CARRIER: +- Status=DO_RACFG_CMD_ATE_START_TX_CARRIER(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_START_TX_CONT: +- Status=DO_RACFG_CMD_ATE_START_TX_CONT(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_START_TX_FRAME: +- Status=DO_RACFG_CMD_ATE_START_TX_FRAME(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_BW: +- Status=DO_RACFG_CMD_ATE_SET_BW(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_TX_POWER0: +- Status=DO_RACFG_CMD_ATE_SET_TX_POWER0(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_TX_POWER1: +- Status=DO_RACFG_CMD_ATE_SET_TX_POWER1(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_FREQ_OFFSET: +- Status=DO_RACFG_CMD_ATE_SET_TX_POWER1(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_GET_STATISTICS: +- Status=DO_RACFG_CMD_ATE_GET_STATISTICS(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_RESET_COUNTER: +- Status=DO_RACFG_CMD_ATE_RESET_COUNTER(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SEL_TX_ANTENNA: +- Status=DO_RACFG_CMD_ATE_SEL_TX_ANTENNA(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SEL_RX_ANTENNA: +- Status=DO_RACFG_CMD_ATE_SEL_TX_ANTENNA(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_PREAMBLE: +- Status=DO_RACFG_CMD_ATE_SET_PREAMBLE(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_CHANNEL: +- Status=DO_RACFG_CMD_ATE_SET_CHANNEL(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_ADDR1: +- Status=DO_RACFG_CMD_ATE_SET_ADDR1(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_ADDR2: +- Status=DO_RACFG_CMD_ATE_SET_ADDR2(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_ADDR3: +- Status=DO_RACFG_CMD_ATE_SET_ADDR3(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_RATE: +- Status=DO_RACFG_CMD_ATE_SET_RATE(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_TX_FRAME_LEN: +- Status=DO_RACFG_CMD_ATE_SET_TX_FRAME_LEN(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_SET_TX_FRAME_COUNT: +- Status=DO_RACFG_CMD_ATE_SET_TX_FRAME_COUNT(pAdapter,wrq,pRaCfg); +- break; +- +- case RACFG_CMD_ATE_START_RX_FRAME: +- Status=DO_RACFG_CMD_ATE_START_RX_FRAME(pAdapter,wrq,pRaCfg); +- break; +- default: +- break; +- } +- +- ASSERT(pRaCfg != NULL); +- +- if (pRaCfg != NULL) +- kfree(pRaCfg); +- +- return; +-} +- +- +-VOID BubbleSort(INT32 n, INT32 a[]) +-{ +- INT32 k, j, temp; +- +- for (k = n-1; k>0; k--) +- { +- for (j = 0; j a[j+1]) +- { +- temp = a[j]; +- a[j]=a[j+1]; +- a[j+1]=temp; +- } +- } +- } +-} +- +- +-VOID CalNoiseLevel(PRTMP_ADAPTER pAd, UCHAR channel, INT32 RSSI[3][10]) +-{ +- INT32 RSSI0, RSSI1, RSSI2; +- CHAR Rssi0Offset, Rssi1Offset, Rssi2Offset; +- UCHAR BbpR50Rssi0 = 0, BbpR51Rssi1 = 0, BbpR52Rssi2 = 0; +- UCHAR Org_BBP66value = 0, Org_BBP69value = 0, Org_BBP70value = 0, data = 0; +- USHORT LNA_Gain = 0; +- INT32 j = 0; +- UCHAR Org_Channel = pAd->ate.Channel; +- USHORT GainValue = 0, OffsetValue = 0; +- +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &Org_BBP66value); +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R69, &Org_BBP69value); +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R70, &Org_BBP70value); +- +- //********************************************************************** +- // Read the value of LNA gain and Rssi offset +- //********************************************************************** +- RT28xx_EEPROM_READ16(pAd, EEPROM_LNA_OFFSET, GainValue); +- +- // for Noise Level +- if (channel <= 14) +- { +- LNA_Gain = GainValue & 0x00FF; +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, OffsetValue); +- Rssi0Offset = OffsetValue & 0x00FF; +- Rssi1Offset = (OffsetValue & 0xFF00) >> 8; +- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_BG_OFFSET + 2)/* 0x48 */, OffsetValue); +- Rssi2Offset = OffsetValue & 0x00FF; +- } +- else +- { +- LNA_Gain = (GainValue & 0xFF00) >> 8; +- +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_A_OFFSET, OffsetValue); +- Rssi0Offset = OffsetValue & 0x00FF; +- Rssi1Offset = (OffsetValue & 0xFF00) >> 8; +- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_A_OFFSET + 2)/* 0x4C */, OffsetValue); +- Rssi2Offset = OffsetValue & 0x00FF; +- } +- //********************************************************************** +- { +- pAd->ate.Channel = channel; +- ATEAsicSwitchChannel(pAd); +- mdelay(5); +- +- data = 0x10; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, data); +- data = 0x40; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, data); +- data = 0x40; +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, data); +- mdelay(5); +- +- // start Rx +- pAd->ate.bQARxStart = TRUE; +- Set_ATE_Proc(pAd, "RXFRAME"); +- +- mdelay(5); +- +- for (j = 0; j < 10; j++) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R50, &BbpR50Rssi0); +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R51, &BbpR51Rssi1); +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R52, &BbpR52Rssi2); +- +- mdelay(10); +- +- // calculate RSSI 0 +- if (BbpR50Rssi0 == 0) +- { +- RSSI0 = -100; +- } +- else +- { +- RSSI0 = (INT32)(-12 - BbpR50Rssi0 - LNA_Gain - Rssi0Offset); +- } +- RSSI[0][j] = RSSI0; +- +- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R +- { +- // calculate RSSI 1 +- if (BbpR51Rssi1 == 0) +- { +- RSSI1 = -100; +- } +- else +- { +- RSSI1 = (INT32)(-12 - BbpR51Rssi1 - LNA_Gain - Rssi1Offset); +- } +- RSSI[1][j] = RSSI1; +- } +- +- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R +- { +- // calculate RSSI 2 +- if (BbpR52Rssi2 == 0) +- RSSI2 = -100; +- else +- RSSI2 = (INT32)(-12 - BbpR52Rssi2 - LNA_Gain - Rssi2Offset); +- +- RSSI[2][j] = RSSI2; +- } +- } +- +- // stop Rx +- Set_ATE_Proc(pAd, "RXSTOP"); +- +- mdelay(5); +- +- BubbleSort(10, RSSI[0]); // 1R +- +- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R +- { +- BubbleSort(10, RSSI[1]); +- } +- +- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R +- { +- BubbleSort(10, RSSI[2]); +- } +- } +- +- pAd->ate.Channel = Org_Channel; +- ATEAsicSwitchChannel(pAd); +- +- // restore original value +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, Org_BBP66value); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, Org_BBP69value); +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, Org_BBP70value); +- +- return; +-} +- +- +-BOOLEAN SyncTxRxConfig(PRTMP_ADAPTER pAd, USHORT offset, UCHAR value) +-{ +- UCHAR tmp = 0, bbp_data = 0; +- +- if (ATE_ON(pAd)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, offset, &bbp_data); +- } +- else +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, offset, &bbp_data); +- } +- +- /* confirm again */ +- ASSERT(bbp_data == value); +- +- switch (offset) +- { +- case BBP_R1: +- /* Need to synchronize tx configuration with legacy ATE. */ +- tmp = (bbp_data & ((1 << 4) | (1 << 3))/* 0x18 */) >> 3; +- switch (tmp) +- { +- /* The BBP R1 bit[4:3] = 2 :: Both DACs will be used by QA. */ +- case 2: +- /* All */ +- pAd->ate.TxAntennaSel = 0; +- break; +- /* The BBP R1 bit[4:3] = 0 :: DAC 0 will be used by QA. */ +- case 0: +- /* Antenna one */ +- pAd->ate.TxAntennaSel = 1; +- break; +- /* The BBP R1 bit[4:3] = 1 :: DAC 1 will be used by QA. */ +- case 1: +- /* Antenna two */ +- pAd->ate.TxAntennaSel = 2; +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("%s -- Sth. wrong! : return FALSE; \n", __FUNCTION__)); +- return FALSE; +- } +- break;/* case BBP_R1 */ +- +- case BBP_R3: +- /* Need to synchronize rx configuration with legacy ATE. */ +- tmp = (bbp_data & ((1 << 1) | (1 << 0))/* 0x03 */); +- switch(tmp) +- { +- /* The BBP R3 bit[1:0] = 3 :: All ADCs will be used by QA. */ +- case 3: +- /* All */ +- pAd->ate.RxAntennaSel = 0; +- break; +- /* +- The BBP R3 bit[1:0] = 0 :: ADC 0 will be used by QA, +- unless the BBP R3 bit[4:3] = 2 +- */ +- case 0: +- /* Antenna one */ +- pAd->ate.RxAntennaSel = 1; +- tmp = ((bbp_data & ((1 << 4) | (1 << 3))/* 0x03 */) >> 3); +- if (tmp == 2)// 3R +- { +- /* Default : All ADCs will be used by QA */ +- pAd->ate.RxAntennaSel = 0; +- } +- break; +- /* The BBP R3 bit[1:0] = 1 :: ADC 1 will be used by QA. */ +- case 1: +- /* Antenna two */ +- pAd->ate.RxAntennaSel = 2; +- break; +- /* The BBP R3 bit[1:0] = 2 :: ADC 2 will be used by QA. */ +- case 2: +- /* Antenna three */ +- pAd->ate.RxAntennaSel = 3; +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("%s -- Impossible! : return FALSE; \n", __FUNCTION__)); +- return FALSE; +- } +- break;/* case BBP_R3 */ +- +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("%s -- Sth. wrong! : return FALSE; \n", __FUNCTION__)); +- return FALSE; +- +- } +- return TRUE; +-} +- +- +-static VOID memcpy_exl(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len) +-{ +- ULONG i, Value = 0; +- ULONG *pDst, *pSrc; +- UCHAR *p8; +- +- p8 = src; +- pDst = (ULONG *) dst; +- pSrc = (ULONG *) src; +- +- for (i = 0 ; i < (len/4); i++) +- { +- /* For alignment issue, we need a variable "Value". */ +- memmove(&Value, pSrc, 4); +- Value = htonl(Value); +- memmove(pDst, &Value, 4); +- pDst++; +- pSrc++; +- } +- if ((len % 4) != 0) +- { +- /* wish that it will never reach here */ +- memmove(&Value, pSrc, (len % 4)); +- Value = htonl(Value); +- memmove(pDst, &Value, (len % 4)); +- } +-} +- +- +-static VOID memcpy_exs(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len) +-{ +- ULONG i; +- UCHAR *pDst, *pSrc; +- +- pDst = dst; +- pSrc = src; +- +- for (i = 0; i < (len/2); i++) +- { +- memmove(pDst, pSrc, 2); +- *((USHORT *)pDst) = htons(*((USHORT *)pDst)); +- pDst+=2; +- pSrc+=2; +- } +- +- if ((len % 2) != 0) +- { +- memmove(pDst, pSrc, 1); +- } +-} +- +- +-static VOID RTMP_IO_READ_BULK(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, UINT32 len) +-{ +- UINT32 i, Value; +- UINT32 *pDst, *pSrc; +- +- pDst = (UINT32 *) dst; +- pSrc = (UINT32 *) src; +- +- for (i = 0 ; i < (len/4); i++) +- { +- RTMP_IO_READ32(pAd, (ULONG)pSrc, &Value); +- Value = htonl(Value); +- memmove(pDst, &Value, 4); +- pDst++; +- pSrc++; +- } +- return; +-} +- +- +-INT Set_TxStop_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("Set_TxStop_Proc\n")); +- +- if (Set_ATE_Proc(pAd, "TXSTOP")) +- { +- return TRUE; +- } +- else +- { +- return FALSE; +- } +-} +- +- +-INT Set_RxStop_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("Set_RxStop_Proc\n")); +- +- if (Set_ATE_Proc(pAd, "RXSTOP")) +- { +- return TRUE; +- } +- else +- { +- return FALSE; +- } +-} +- +- +-#ifdef DBG +-INT Set_EERead_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- USHORT buffer[EEPROM_SIZE/2]; +- USHORT *p; +- INT i; +- +- rt_ee_read_all(pAd, (USHORT *)buffer); +- p = buffer; +- +- for (i = 0; i < (EEPROM_SIZE/2); i++) +- { +- ate_print(KERN_EMERG "%4.4x ", *p); +- if (((i+1) % 16) == 0) +- ate_print(KERN_EMERG "\n"); +- p++; +- } +- +- return TRUE; +-} +- +- +-INT Set_EEWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- USHORT offset = 0, value; +- PSTRING p2 = arg; +- +- while ((*p2 != ':') && (*p2 != '\0')) +- { +- p2++; +- } +- +- if (*p2 == ':') +- { +- A2Hex(offset, arg); +- A2Hex(value, p2 + 1); +- } +- else +- { +- A2Hex(value, arg); +- } +- +- if (offset >= EEPROM_SIZE) +- { +- ate_print(KERN_EMERG "Offset can not exceed EEPROM_SIZE( == 0x%04x)\n", EEPROM_SIZE); +- return FALSE; +- } +- +- RT28xx_EEPROM_WRITE16(pAd, offset, value); +- +- return TRUE; +-} +- +- +-INT Set_BBPRead_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR value = 0, offset; +- +- A2Hex(offset, arg); +- +- if (ATE_ON(pAd)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAd, offset, &value); +- } +- else +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, offset, &value); +- } +- +- ate_print(KERN_EMERG "%x\n", value); +- +- return TRUE; +-} +- +- +-INT Set_BBPWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- USHORT offset = 0; +- PSTRING p2 = arg; +- UCHAR value; +- +- while ((*p2 != ':') && (*p2 != '\0')) +- { +- p2++; +- } +- +- if (*p2 == ':') +- { +- A2Hex(offset, arg); +- A2Hex(value, p2 + 1); +- } +- else +- { +- A2Hex(value, arg); +- } +- +- if (ATE_ON(pAd)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, offset, value); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, offset, value); +- } +- +- return TRUE; +-} +- +- +-INT Set_RFWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- PSTRING p2, p3, p4; +- UINT32 R1, R2, R3, R4; +- +- p2 = arg; +- +- while ((*p2 != ':') && (*p2 != '\0')) +- { +- p2++; +- } +- +- if (*p2 != ':') +- return FALSE; +- +- p3 = p2 + 1; +- +- while((*p3 != ':') && (*p3 != '\0')) +- { +- p3++; +- } +- +- if (*p3 != ':') +- return FALSE; +- +- p4 = p3 + 1; +- +- while ((*p4 != ':') && (*p4 != '\0')) +- { +- p4++; +- } +- +- if (*p4 != ':') +- return FALSE; +- +- +- A2Hex(R1, arg); +- A2Hex(R2, p2 + 1); +- A2Hex(R3, p3 + 1); +- A2Hex(R4, p4 + 1); +- +- RTMP_RF_IO_WRITE32(pAd, R1); +- RTMP_RF_IO_WRITE32(pAd, R2); +- RTMP_RF_IO_WRITE32(pAd, R3); +- RTMP_RF_IO_WRITE32(pAd, R4); +- +- return TRUE; +-} +-#endif // DBG // +-#endif // RALINK_28xx_QA // +- +- +- +- +-#ifdef RALINK_28xx_QA +-#define LEN_OF_ARG 16 +- +-#define RESPONSE_TO_GUI(__pRaCfg, __pwrq, __Length, __Status) \ +- (__pRaCfg)->length = htons((__Length)); \ +- (__pRaCfg)->status = htons((__Status)); \ +- (__pwrq)->u.data.length = sizeof((__pRaCfg)->magic_no) + sizeof((__pRaCfg)->command_type) \ +- + sizeof((__pRaCfg)->command_id) + sizeof((__pRaCfg)->length) \ +- + sizeof((__pRaCfg)->sequence) + ntohs((__pRaCfg)->length); \ +- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", (__pwrq)->u.data.length)); \ +- if (copy_to_user((__pwrq)->u.data.pointer, (UCHAR *)(__pRaCfg), (__pwrq)->u.data.length)) \ +- { \ +- ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in %s\n", __FUNCTION__)); \ +- return (-EFAULT); \ +- } \ +- else \ +- { \ +- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s is done !\n", __FUNCTION__)); \ +- } +- +-static inline INT DO_RACFG_CMD_ATE_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START\n")); +- +- /* Prepare feedback as soon as we can to avoid QA timeout. */ +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- Set_ATE_Proc(pAdapter, "ATESTART"); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- INT32 ret; +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_STOP\n")); +- +- /* +- Distinguish this command came from QA(via ate agent) +- or ate agent according to the existence of pid in payload. +- +- No need to prepare feedback if this cmd came directly from ate agent, +- not from QA. +- */ +- pRaCfg->length = ntohs(pRaCfg->length); +- +- if (pRaCfg->length == sizeof(pAdapter->ate.AtePid)) +- { +- /* +- This command came from QA. +- Get the pid of ATE agent. +- */ +- memcpy((UCHAR *)&pAdapter->ate.AtePid, +- (&pRaCfg->data[0]) - 2/* == sizeof(pRaCfg->status) */, +- sizeof(pAdapter->ate.AtePid)); +- +- /* Prepare feedback as soon as we can to avoid QA timeout. */ +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- /* +- Kill ATE agent when leaving ATE mode. +- +- We must kill ATE agent first before setting ATESTOP, +- or Microsoft will report sth. wrong. +- */ +- ret = KILL_THREAD_PID(pAdapter->ate.AtePid, SIGTERM, 1); +- +- if (ret) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR, ("%s: unable to kill ate thread\n", pAdapter->net_dev->name)); +- } +- } +- +- +- /* AP/STA might have in ATE_STOP mode due to cmd from QA. */ +- if (ATE_ON(pAdapter)) +- { +- /* Someone has killed ate agent while QA GUI is still open. */ +- Set_ATE_Proc(pAdapter, "ATESTOP"); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_AP_START is done !\n")); +- } +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_RF_WRITE_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 R1, R2, R3, R4; +- USHORT channel; +- +- memcpy(&R1, pRaCfg->data-2, 4); +- memcpy(&R2, pRaCfg->data+2, 4); +- memcpy(&R3, pRaCfg->data+6, 4); +- memcpy(&R4, pRaCfg->data+10, 4); +- memcpy(&channel, pRaCfg->data+14, 2); +- +- pAdapter->LatchRfRegs.R1 = ntohl(R1); +- pAdapter->LatchRfRegs.R2 = ntohl(R2); +- pAdapter->LatchRfRegs.R3 = ntohl(R3); +- pAdapter->LatchRfRegs.R4 = ntohl(R4); +- pAdapter->LatchRfRegs.Channel = ntohs(channel); +- +- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R3); +- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R4); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_E2PROM_READ16( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT16 offset=0, value=0; +- USHORT tmp=0; +- +- offset = ntohs(pRaCfg->status); +- +- /* "tmp" is especially for some compilers... */ +- RT28xx_EEPROM_READ16(pAdapter, offset, tmp); +- value = tmp; +- value = htons(value); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("EEPROM Read offset = 0x%04x, value = 0x%04x\n", offset, value)); +- memcpy(pRaCfg->data, &value, 2); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+2, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_E2PROM_WRITE16( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset, value; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&value, pRaCfg->data, 2); +- value = ntohs(value); +- RT28xx_EEPROM_WRITE16(pAdapter, offset, value); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_E2PROM_READ_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT buffer[EEPROM_SIZE/2]; +- +- rt_ee_read_all(pAdapter,(USHORT *)buffer); +- memcpy_exs(pAdapter, pRaCfg->data, (UCHAR *)buffer, EEPROM_SIZE); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+EEPROM_SIZE, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_E2PROM_WRITE_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT buffer[EEPROM_SIZE/2]; +- +- NdisZeroMemory((UCHAR *)buffer, EEPROM_SIZE); +- memcpy_exs(pAdapter, (UCHAR *)buffer, (UCHAR *)&pRaCfg->status, EEPROM_SIZE); +- rt_ee_write_all(pAdapter,(USHORT *)buffer); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_IO_READ( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 offset; +- UINT32 value; +- +- memcpy(&offset, &pRaCfg->status, 4); +- offset = ntohl(offset); +- +- /* +- We do not need the base address. +- So just extract the offset out. +- */ +- offset &= 0x0000FFFF; +- RTMP_IO_READ32(pAdapter, offset, &value); +- value = htonl(value); +- memcpy(pRaCfg->data, &value, 4); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+4, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_IO_WRITE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 offset, value; +- +- memcpy(&offset, pRaCfg->data-2, 4); +- memcpy(&value, pRaCfg->data+2, 4); +- +- offset = ntohl(offset); +- +- /* +- We do not need the base address. +- So just extract the offset out. +- */ +- offset &= 0x0000FFFF; +- value = ntohl(value); +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_IO_WRITE: offset = %x, value = %x\n", offset, value)); +- RTMP_IO_WRITE32(pAdapter, offset, value); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_IO_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 offset; +- USHORT len; +- +- memcpy(&offset, &pRaCfg->status, 4); +- offset = ntohl(offset); +- +- /* +- We do not need the base address. +- So just extract the offset out. +- */ +- offset &= 0x0000FFFF; +- memcpy(&len, pRaCfg->data+2, 2); +- len = ntohs(len); +- +- if (len > 371) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("length requested is too large, make it smaller\n")); +- pRaCfg->length = htons(2); +- pRaCfg->status = htons(1); +- return -EFAULT; +- } +- +- RTMP_IO_READ_BULK(pAdapter, pRaCfg->data, (UCHAR *)offset, len*4);// unit in four bytes +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+(len*4), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_BBP_READ8( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- UCHAR value; +- +- value = 0; +- offset = ntohs(pRaCfg->status); +- +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, offset, &value); +- } +- else +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, offset, &value); +- } +- +- pRaCfg->data[0] = value; +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+1, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_BBP_WRITE8( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- UCHAR value; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&value, pRaCfg->data, 1); +- +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, offset, value); +- } +- else +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, offset, value); +- } +- +- if ((offset == BBP_R1) || (offset == BBP_R3)) +- { +- SyncTxRxConfig(pAdapter, offset, value); +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_BBP_READ_ALL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT bbp_reg_index; +- +- for (bbp_reg_index = 0; bbp_reg_index < MAX_BBP_ID+1; bbp_reg_index++) +- { +- pRaCfg->data[bbp_reg_index] = 0; +- +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbp_reg_index, &pRaCfg->data[bbp_reg_index]); +- } +- else +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbp_reg_index, &pRaCfg->data[bbp_reg_index]); +- } +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+MAX_BBP_ID+1, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_GET_NOISE_LEVEL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UCHAR channel; +- INT32 buffer[3][10];/* 3 : RxPath ; 10 : no. of per rssi samples */ +- +- channel = (ntohs(pRaCfg->status) & 0x00FF); +- CalNoiseLevel(pAdapter, channel, buffer); +- memcpy_exl(pAdapter, (UCHAR *)pRaCfg->data, (UCHAR *)&(buffer[0][0]), (sizeof(INT32)*3*10)); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+(sizeof(INT32)*3*10), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_GET_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- memcpy_exl(pAdapter, &pRaCfg->data[0], (UCHAR *)&pAdapter->ate.U2M, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[4], (UCHAR *)&pAdapter->ate.OtherData, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[8], (UCHAR *)&pAdapter->ate.Beacon, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[12], (UCHAR *)&pAdapter->ate.OtherCount, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[16], (UCHAR *)&pAdapter->ate.TxAc0, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[20], (UCHAR *)&pAdapter->ate.TxAc1, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[24], (UCHAR *)&pAdapter->ate.TxAc2, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[28], (UCHAR *)&pAdapter->ate.TxAc3, 4); +- /*memcpy_exl(pAdapter, &pRaCfg->data[32], (UCHAR *)&pAdapter->ate.TxHCCA, 4);*/ +- memcpy_exl(pAdapter, &pRaCfg->data[36], (UCHAR *)&pAdapter->ate.TxMgmt, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&pAdapter->ate.RSSI0, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[44], (UCHAR *)&pAdapter->ate.RSSI1, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[48], (UCHAR *)&pAdapter->ate.RSSI2, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[52], (UCHAR *)&pAdapter->ate.SNR0, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[56], (UCHAR *)&pAdapter->ate.SNR1, 4); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+60, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_CLEAR_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- pAdapter->ate.U2M = 0; +- pAdapter->ate.OtherData = 0; +- pAdapter->ate.Beacon = 0; +- pAdapter->ate.OtherCount = 0; +- pAdapter->ate.TxAc0 = 0; +- pAdapter->ate.TxAc1 = 0; +- pAdapter->ate.TxAc2 = 0; +- pAdapter->ate.TxAc3 = 0; +- /*pAdapter->ate.TxHCCA = 0;*/ +- pAdapter->ate.TxMgmt = 0; +- pAdapter->ate.TxDoneCount = 0; +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_TX_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT *p; +- USHORT err = 1; +- UCHAR Bbp22Value = 0, Bbp24Value = 0; +- +- if ((pAdapter->ate.TxStatus != 0) && (pAdapter->ate.Mode & ATE_TXFRAME)) +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("Ate Tx is already running, to run next Tx, you must stop it first\n")); +- err = 2; +- goto TX_START_ERROR; +- } +- else if ((pAdapter->ate.TxStatus != 0) && !(pAdapter->ate.Mode & ATE_TXFRAME)) +- { +- int i = 0; +- +- while ((i++ < 10) && (pAdapter->ate.TxStatus != 0)) +- { +- RTMPusecDelay(5000); +- } +- +- /* force it to stop */ +- pAdapter->ate.TxStatus = 0; +- pAdapter->ate.TxDoneCount = 0; +- pAdapter->ate.bQATxStart = FALSE; +- } +- +- /* +- If pRaCfg->length == 0, this "RACFG_CMD_TX_START" +- is for Carrier test or Carrier Suppression. +- */ +- if (ntohs(pRaCfg->length) != 0) +- { +- /* get frame info */ +- +- NdisMoveMemory(&pAdapter->ate.TxWI, pRaCfg->data + 2, 16); +-#ifdef RT_BIG_ENDIAN +- RTMPWIEndianChange((PUCHAR)&pAdapter->ate.TxWI, TYPE_TXWI); +-#endif // RT_BIG_ENDIAN // +- +- NdisMoveMemory(&pAdapter->ate.TxCount, pRaCfg->data + 18, 4); +- pAdapter->ate.TxCount = ntohl(pAdapter->ate.TxCount); +- +- p = (USHORT *)(&pRaCfg->data[22]); +- +- /* always use QID_AC_BE */ +- pAdapter->ate.QID = 0; +- +- p = (USHORT *)(&pRaCfg->data[24]); +- pAdapter->ate.HLen = ntohs(*p); +- +- if (pAdapter->ate.HLen > 32) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR,("pAdapter->ate.HLen > 32\n")); +- err = 3; +- goto TX_START_ERROR; +- } +- +- NdisMoveMemory(&pAdapter->ate.Header, pRaCfg->data + 26, pAdapter->ate.HLen); +- +- pAdapter->ate.PLen = ntohs(pRaCfg->length) - (pAdapter->ate.HLen + 28); +- +- if (pAdapter->ate.PLen > 32) +- { +- ATEDBGPRINT(RT_DEBUG_ERROR,("pAdapter->ate.PLen > 32\n")); +- err = 4; +- goto TX_START_ERROR; +- } +- +- NdisMoveMemory(&pAdapter->ate.Pattern, pRaCfg->data + 26 + pAdapter->ate.HLen, pAdapter->ate.PLen); +- pAdapter->ate.DLen = pAdapter->ate.TxWI.MPDUtotalByteCount - pAdapter->ate.HLen; +- } +- +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R22, &Bbp22Value); +- +- switch (Bbp22Value) +- { +- case BBP22_TXFRAME: +- { +- if (pAdapter->ate.TxCount == 0) +- { +-#ifdef RTMP_MAC_PCI +- pAdapter->ate.TxCount = 0xFFFFFFFF; +-#endif // RTMP_MAC_PCI // +- } +- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXFRAME\n")); +- pAdapter->ate.bQATxStart = TRUE; +- Set_ATE_Proc(pAdapter, "TXFRAME"); +- } +- break; +- +- case BBP22_TXCONT_OR_CARRSUPP: +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("BBP22_TXCONT_OR_CARRSUPP\n")); +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R24, &Bbp24Value); +- +- switch (Bbp24Value) +- { +- case BBP24_TXCONT: +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCONT\n")); +- pAdapter->ate.bQATxStart = TRUE; +- Set_ATE_Proc(pAdapter, "TXCONT"); +- } +- break; +- +- case BBP24_CARRSUPP: +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCARRSUPP\n")); +- pAdapter->ate.bQATxStart = TRUE; +- pAdapter->ate.Mode |= ATE_TXCARRSUPP; +- } +- break; +- +- default: +- { +- ATEDBGPRINT(RT_DEBUG_ERROR,("Unknown TX subtype !")); +- } +- break; +- } +- } +- break; +- +- case BBP22_TXCARR: +- { +- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCARR\n")); +- pAdapter->ate.bQATxStart = TRUE; +- Set_ATE_Proc(pAdapter, "TXCARR"); +- } +- break; +- +- default: +- { +- ATEDBGPRINT(RT_DEBUG_ERROR,("Unknown Start TX subtype !")); +- } +- break; +- } +- +- if (pAdapter->ate.bQATxStart == TRUE) +- { +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- return NDIS_STATUS_SUCCESS; +- } +- +-TX_START_ERROR: +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), err); +- +- return err; +-} +- +- +-static inline INT DO_RACFG_CMD_GET_TX_STATUS( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 count=0; +- +- count = htonl(pAdapter->ate.TxDoneCount); +- NdisMoveMemory(pRaCfg->data, &count, 4); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+4, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_TX_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_TX_STOP\n")); +- +- Set_ATE_Proc(pAdapter, "TXSTOP"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_RX_START( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_START\n")); +- +- pAdapter->ate.bQARxStart = TRUE; +- Set_ATE_Proc(pAdapter, "RXFRAME"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_RX_STOP( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_STOP\n")); +- +- Set_ATE_Proc(pAdapter, "RXSTOP"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_CARRIER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_CARRIER\n")); +- +- Set_ATE_Proc(pAdapter, "TXCARR"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_CONT( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_CONT\n")); +- +- Set_ATE_Proc(pAdapter, "TXCONT"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_START_TX_FRAME( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_FRAME\n")); +- +- Set_ATE_Proc(pAdapter, "TXFRAME"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_BW( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_BW\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- +- Set_ATE_TX_BW_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_POWER0( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_POWER0\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_POWER0_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_POWER1( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_POWER1\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_POWER1_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_FREQ_OFFSET( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_FREQ_OFFSET\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_FREQOFFSET_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_GET_STATISTICS( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_GET_STATISTICS\n")); +- +- memcpy_exl(pAdapter, &pRaCfg->data[0], (UCHAR *)&pAdapter->ate.TxDoneCount, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[4], (UCHAR *)&pAdapter->WlanCounters.RetryCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[8], (UCHAR *)&pAdapter->WlanCounters.FailedCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[12], (UCHAR *)&pAdapter->WlanCounters.RTSSuccessCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[16], (UCHAR *)&pAdapter->WlanCounters.RTSFailureCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[20], (UCHAR *)&pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[24], (UCHAR *)&pAdapter->WlanCounters.FCSErrorCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[28], (UCHAR *)&pAdapter->Counters8023.RxNoBuffer, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[32], (UCHAR *)&pAdapter->WlanCounters.FrameDuplicateCount.u.LowPart, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[36], (UCHAR *)&pAdapter->RalinkCounters.OneSecFalseCCACnt, 4); +- +- if (pAdapter->ate.RxAntennaSel == 0) +- { +- INT32 RSSI0 = 0; +- INT32 RSSI1 = 0; +- INT32 RSSI2 = 0; +- +- RSSI0 = (INT32)(pAdapter->ate.LastRssi0 - pAdapter->BbpRssiToDbmDelta); +- RSSI1 = (INT32)(pAdapter->ate.LastRssi1 - pAdapter->BbpRssiToDbmDelta); +- RSSI2 = (INT32)(pAdapter->ate.LastRssi2 - pAdapter->BbpRssiToDbmDelta); +- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&RSSI0, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[44], (UCHAR *)&RSSI1, 4); +- memcpy_exl(pAdapter, &pRaCfg->data[48], (UCHAR *)&RSSI2, 4); +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+52, NDIS_STATUS_SUCCESS); +- } +- else +- { +- INT32 RSSI0 = 0; +- +- RSSI0 = (INT32)(pAdapter->ate.LastRssi0 - pAdapter->BbpRssiToDbmDelta); +- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&RSSI0, 4); +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+44, NDIS_STATUS_SUCCESS); +- } +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_RESET_COUNTER( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 1; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_RESET_COUNTER\n")); +- +- sprintf((char *)str, "%d", value); +- Set_ResetStatCounter_Proc(pAdapter, str); +- +- pAdapter->ate.TxDoneCount = 0; +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SEL_TX_ANTENNA( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SEL_TX_ANTENNA\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_Antenna_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SEL_RX_ANTENNA( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SEL_RX_ANTENNA\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_RX_Antenna_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_PREAMBLE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_PREAMBLE\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_MODE_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_CHANNEL( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_CHANNEL\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_CHANNEL_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR1( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR1\n")); +- +- /* +- Addr is an array of UCHAR, +- so no need to perform endian swap. +- */ +- memcpy(pAdapter->ate.Addr1, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR2( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR2\n")); +- +- /* +- Addr is an array of UCHAR, +- so no need to perform endian swap. +- */ +- memcpy(pAdapter->ate.Addr2, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_ADDR3( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR3\n")); +- +- /* +- Addr is an array of UCHAR, +- so no need to perform endian swap. +- */ +- memcpy(pAdapter->ate.Addr3, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_RATE( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_RATE\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_MCS_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_FRAME_LEN( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- SHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_FRAME_LEN\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_LENGTH_Proc(pAdapter, str); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_SET_TX_FRAME_COUNT( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT value = 0; +- STRING str[LEN_OF_ARG]; +- +- NdisZeroMemory(str, LEN_OF_ARG); +- +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_FRAME_COUNT\n")); +- +- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2); +- value = ntohs(value); +- +-#ifdef RTMP_MAC_PCI +- /* TX_FRAME_COUNT == 0 means tx infinitely */ +- if (value == 0) +- { +- /* Use TxCount = 0xFFFFFFFF to approximate the infinity. */ +- pAdapter->ate.TxCount = 0xFFFFFFFF; +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAdapter->ate.TxCount)); +- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n")); +- +- +- } +- else +-#endif // RTMP_MAC_PCI // +- { +- sprintf((char *)str, "%d", value); +- Set_ATE_TX_COUNT_Proc(pAdapter, str); +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_START_RX_FRAME( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_START\n")); +- +- Set_ATE_Proc(pAdapter, "RXFRAME"); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_E2PROM_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- USHORT len; +- USHORT buffer[EEPROM_SIZE/2]; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&len, pRaCfg->data, 2); +- len = ntohs(len); +- +- rt_ee_read_all(pAdapter, (USHORT *)buffer); +- +- if (offset + len <= EEPROM_SIZE) +- memcpy_exs(pAdapter, pRaCfg->data, (UCHAR *)buffer+offset, len); +- else +- ATEDBGPRINT(RT_DEBUG_ERROR, ("exceed EEPROM size\n")); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+len, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_E2PROM_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- USHORT len; +- USHORT buffer[EEPROM_SIZE/2]; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&len, pRaCfg->data, 2); +- len = ntohs(len); +- +- rt_ee_read_all(pAdapter,(USHORT *)buffer); +- memcpy_exs(pAdapter, (UCHAR *)buffer + offset, (UCHAR *)pRaCfg->data + 2, len); +- rt_ee_write_all(pAdapter,(USHORT *)buffer); +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_IO_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- UINT32 offset, i, value; +- USHORT len; +- +- memcpy(&offset, &pRaCfg->status, 4); +- offset = ntohl(offset); +- memcpy(&len, pRaCfg->data+2, 2); +- len = ntohs(len); +- +- for (i = 0; i < len; i += 4) +- { +- memcpy_exl(pAdapter, (UCHAR *)&value, pRaCfg->data+4+i, 4); +- ATEDBGPRINT(RT_DEBUG_TRACE,("Write %x %x\n", offset + i, value)); +- RTMP_IO_WRITE32(pAdapter, ((offset+i) & (0xffff)), value); +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_BBP_READ_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- USHORT len; +- USHORT j; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&len, pRaCfg->data, 2); +- len = ntohs(len); +- +- for (j = offset; j < (offset+len); j++) +- { +- pRaCfg->data[j - offset] = 0; +- +- if (pAdapter->ate.Mode == ATE_STOP) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j - offset]); +- } +- else +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j - offset]); +- } +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status)+len, NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-static inline INT DO_RACFG_CMD_ATE_BBP_WRITE_BULK( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq, +- IN struct ate_racfghdr *pRaCfg) +-{ +- USHORT offset; +- USHORT len; +- USHORT j; +- UCHAR *value; +- +- offset = ntohs(pRaCfg->status); +- memcpy(&len, pRaCfg->data, 2); +- len = ntohs(len); +- +- for (j = offset; j < (offset+len); j++) +- { +- value = pRaCfg->data + 2 + (j - offset); +- if (pAdapter->ate.Mode == ATE_STOP) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, j, *value); +- } +- else +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, j, *value); +- } +- } +- +- RESPONSE_TO_GUI(pRaCfg, wrq, sizeof(pRaCfg->status), NDIS_STATUS_SUCCESS); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +diff --git a/drivers/staging/rt3090/rt_ate.h b/drivers/staging/rt3090/rt_ate.h +deleted file mode 100644 +index 38d5961..0000000 +--- a/drivers/staging/rt3090/rt_ate.h ++++ /dev/null +@@ -1,314 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __ATE_H__ +-#define __ATE_H__ +- +- +-#ifdef LINUX +-#define ate_print printk +-#define ATEDBGPRINT DBGPRINT +-#ifdef RTMP_MAC_PCI +-#define EEPROM_SIZE 0x200 +-#ifdef CONFIG_STA_SUPPORT +-#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2860STA/e2p.bin" +-#endif // CONFIG_STA_SUPPORT // +-#endif // RTMP_MAC_PCI // +-#endif // LINUX // +- +- +-#define ATE_ON(_p) (((_p)->ate.Mode) != ATE_STOP) +- +-#ifdef RTMP_MAC_PCI +-#define ATE_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int j, k; \ +- for (j=0; jBbpWriteLatch[_I]; \ +- } \ +-} +- +-#define ATE_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int BusyCnt; \ +- for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ +- break; \ +- } \ +- if (BusyCnt == MAX_BUSY_COUNT) \ +- { \ +- ATEDBGPRINT(RT_DEBUG_ERROR, ("BBP write R%d fail\n", _I)); \ +- } \ +-} +-#endif // RTMP_MAC_PCI // +- +- +-#ifdef RT30xx +-#define ATE_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) +-#define ATE_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) +-#endif // RT30xx // +- +- +-VOID rt_ee_read_all( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Data); +- +-VOID rt_ee_write_all( +- IN PRTMP_ADAPTER pAd, +- IN USHORT *Data); +- +-INT Set_ATE_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_DA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_SA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_BSSID_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_CHANNEL_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_POWER0_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_POWER1_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_RX_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_FREQOFFSET_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_BW_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_LENGTH_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_COUNT_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_MCS_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_MODE_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_TX_GI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_ATE_RX_FER_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Read_RF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Write_RF1_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Write_RF2_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Write_RF3_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Write_RF4_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Load_E2P_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Read_E2P_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_ATE_Show_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ATE_Help_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef RALINK_28xx_QA +-VOID ATE_QA_Statistics( +- IN PRTMP_ADAPTER pAd, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC p28xxRxD, +- IN PHEADER_802_11 pHeader); +- +-VOID RtmpDoAte( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-VOID BubbleSort( +- IN INT32 n, +- IN INT32 a[]); +- +-VOID CalNoiseLevel( +- IN PRTMP_ADAPTER pAdapter, +- IN UCHAR channel, +- OUT INT32 buffer[3][10]); +- +-BOOLEAN SyncTxRxConfig( +- IN PRTMP_ADAPTER pAdapter, +- IN USHORT offset, +- IN UCHAR value); +- +-INT Set_TxStop_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_RxStop_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef DBG +-INT Set_EERead_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_EEWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BBPRead_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BBPWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_RFWrite_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // DBG // +-#endif // RALINK_28xx_QA // +- +- +-VOID ATEAsicSwitchChannel( +- IN PRTMP_ADAPTER pAd); +- +-VOID ATEAsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd); +- +-VOID ATEDisableAsicProtect( +- IN PRTMP_ADAPTER pAd); +- +-CHAR ATEConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber); +- +-VOID ATESampleRssi( +- IN PRTMP_ADAPTER pAd, +- IN PRXWI_STRUC pRxWI); +- +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPStationStop( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPStationStart( +- IN PRTMP_ADAPTER pAd); +-#endif // CONFIG_STA_SUPPORT // +-#endif // __ATE_H__ // +diff --git a/drivers/staging/rt3090/rt_config.h b/drivers/staging/rt3090/rt_config.h +deleted file mode 100644 +index 005142d..0000000 +--- a/drivers/staging/rt3090/rt_config.h ++++ /dev/null +@@ -1,126 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_config.h +- +- Abstract: +- Central header file to maintain all include files for all NDIS +- miniport driver routines. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 08-01-2002 created +- +-*/ +-#ifndef __RT_CONFIG_H__ +-#define __RT_CONFIG_H__ +- +-#include "rtmp_type.h" +-#include "rtmp_os.h" +- +-#include "rtmp_def.h" +-#include "rtmp_chip.h" +-#include "rtmp_timer.h" +- +-#include "oid.h" +-#include "mlme.h" +-#include "wpa.h" +-#include "crypt_md5.h" +-#include "crypt_sha2.h" +-#include "crypt_hmac.h" +-#include "rtmp.h" +-#include "ap.h" +-#include "dfs.h" +-#include "chlist.h" +-#include "spectrum.h" +- +-#ifdef MLME_EX +-#include "mlme_ex_def.h" +-#include "mlme_ex.h" +-#endif // MLME_EX // +- +-#include "eeprom.h" +-#if defined(RTMP_PCI_SUPPORT) || defined(RTMP_USB_SUPPORT) +-#include "rtmp_mcu.h" +-#endif +- +- +- +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef BLOCK_NET_IF +-#include "netif_block.h" +-#endif // BLOCK_NET_IF // +- +-#ifdef IGMP_SNOOP_SUPPORT +-#include "igmp_snoop.h" +-#endif // IGMP_SNOOP_SUPPORT // +- +-#ifdef RALINK_ATE +-#include "rt_ate.h" +-#endif // RALINK_ATE // +- +-#ifdef RALINK_28xx_QA +-#ifndef RALINK_ATE +-#error "For supporting QA GUI, please set HAS_ATE=y and HAS_28xx_QA=y." +-#endif // RALINK_ATE // +-#endif // RALINK_28xx_QA // +- +- +- +- +-#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) +-#define WSC_INCLUDED +-#endif +- +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-#ifndef WPA_SUPPLICANT_SUPPORT +-#error "Build for being controlled by NetworkManager or wext, please set HAS_WPA_SUPPLICANT=y and HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y" +-#endif // WPA_SUPPLICANT_SUPPORT // +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-#ifdef IKANOS_VX_1X0 +-#include "vr_ikans.h" +-#endif // IKANOS_VX_1X0 // +- +- +- +-#endif // __RT_CONFIG_H__ +diff --git a/drivers/staging/rt3090/rt_linux.c b/drivers/staging/rt3090/rt_linux.c +deleted file mode 100644 +index 9b94aa6..0000000 +--- a/drivers/staging/rt3090/rt_linux.c ++++ /dev/null +@@ -1,1624 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#include +-#include "rt_config.h" +- +-ULONG RTDebugLevel = RT_DEBUG_ERROR; +- +- +-// for wireless system event message +-char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { +- // system status event +- "had associated successfully", /* IW_ASSOC_EVENT_FLAG */ +- "had disassociated", /* IW_DISASSOC_EVENT_FLAG */ +- "had deauthenticated", /* IW_DEAUTH_EVENT_FLAG */ +- "had been aged-out and disassociated", /* IW_AGEOUT_EVENT_FLAG */ +- "occurred CounterMeasures attack", /* IW_COUNTER_MEASURES_EVENT_FLAG */ +- "occurred replay counter different in Key Handshaking", /* IW_REPLAY_COUNTER_DIFF_EVENT_FLAG */ +- "occurred RSNIE different in Key Handshaking", /* IW_RSNIE_DIFF_EVENT_FLAG */ +- "occurred MIC different in Key Handshaking", /* IW_MIC_DIFF_EVENT_FLAG */ +- "occurred ICV error in RX", /* IW_ICV_ERROR_EVENT_FLAG */ +- "occurred MIC error in RX", /* IW_MIC_ERROR_EVENT_FLAG */ +- "Group Key Handshaking timeout", /* IW_GROUP_HS_TIMEOUT_EVENT_FLAG */ +- "Pairwise Key Handshaking timeout", /* IW_PAIRWISE_HS_TIMEOUT_EVENT_FLAG */ +- "RSN IE sanity check failure", /* IW_RSNIE_SANITY_FAIL_EVENT_FLAG */ +- "set key done in WPA/WPAPSK", /* IW_SET_KEY_DONE_WPA1_EVENT_FLAG */ +- "set key done in WPA2/WPA2PSK", /* IW_SET_KEY_DONE_WPA2_EVENT_FLAG */ +- "connects with our wireless client", /* IW_STA_LINKUP_EVENT_FLAG */ +- "disconnects with our wireless client", /* IW_STA_LINKDOWN_EVENT_FLAG */ +- "scan completed" /* IW_SCAN_COMPLETED_EVENT_FLAG */ +- "scan terminate!! Busy!! Enqueue fail!!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ +- }; +- +-// for wireless IDS_spoof_attack event message +-char const *pWirelessSpoofEventText[IW_SPOOF_EVENT_TYPE_NUM] = { +- "detected conflict SSID", /* IW_CONFLICT_SSID_EVENT_FLAG */ +- "detected spoofed association response", /* IW_SPOOF_ASSOC_RESP_EVENT_FLAG */ +- "detected spoofed reassociation responses", /* IW_SPOOF_REASSOC_RESP_EVENT_FLAG */ +- "detected spoofed probe response", /* IW_SPOOF_PROBE_RESP_EVENT_FLAG */ +- "detected spoofed beacon", /* IW_SPOOF_BEACON_EVENT_FLAG */ +- "detected spoofed disassociation", /* IW_SPOOF_DISASSOC_EVENT_FLAG */ +- "detected spoofed authentication", /* IW_SPOOF_AUTH_EVENT_FLAG */ +- "detected spoofed deauthentication", /* IW_SPOOF_DEAUTH_EVENT_FLAG */ +- "detected spoofed unknown management frame", /* IW_SPOOF_UNKNOWN_MGMT_EVENT_FLAG */ +- "detected replay attack" /* IW_REPLAY_ATTACK_EVENT_FLAG */ +- }; +- +-// for wireless IDS_flooding_attack event message +-char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { +- "detected authentication flooding", /* IW_FLOOD_AUTH_EVENT_FLAG */ +- "detected association request flooding", /* IW_FLOOD_ASSOC_REQ_EVENT_FLAG */ +- "detected reassociation request flooding", /* IW_FLOOD_REASSOC_REQ_EVENT_FLAG */ +- "detected probe request flooding", /* IW_FLOOD_PROBE_REQ_EVENT_FLAG */ +- "detected disassociation flooding", /* IW_FLOOD_DISASSOC_EVENT_FLAG */ +- "detected deauthentication flooding", /* IW_FLOOD_DEAUTH_EVENT_FLAG */ +- "detected 802.1x eap-request flooding" /* IW_FLOOD_EAP_REQ_EVENT_FLAG */ +- }; +- +- +-/* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) +-{ +- timeout = ((timeout*OS_HZ) / 1000); +- pTimer->expires = jiffies + timeout; +- add_timer(pTimer); +-} +- +-/* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ +-VOID RTMP_OS_Init_Timer( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN TIMER_FUNCTION function, +- IN PVOID data) +-{ +- init_timer(pTimer); +- pTimer->data = (unsigned long)data; +- pTimer->function = function; +-} +- +- +-VOID RTMP_OS_Add_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) +-{ +- if (timer_pending(pTimer)) +- return; +- +- timeout = ((timeout*OS_HZ) / 1000); +- pTimer->expires = jiffies + timeout; +- add_timer(pTimer); +-} +- +-VOID RTMP_OS_Mod_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) +-{ +- timeout = ((timeout*OS_HZ) / 1000); +- mod_timer(pTimer, jiffies + timeout); +-} +- +-VOID RTMP_OS_Del_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- OUT BOOLEAN *pCancelled) +-{ +- if (timer_pending(pTimer)) +- { +- *pCancelled = del_timer_sync(pTimer); +- } +- else +- { +- *pCancelled = TRUE; +- } +- +-} +- +-VOID RTMP_OS_Release_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PQUEUE_ENTRY pEntry) +-{ +- //RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); +-} +- +-// Unify all delay routine by using udelay +-VOID RTMPusecDelay( +- IN ULONG usec) +-{ +- ULONG i; +- +- for (i = 0; i < (usec / 50); i++) +- udelay(50); +- +- if (usec % 50) +- udelay(usec % 50); +-} +- +-void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time) +-{ +- time->u.LowPart = jiffies; +-} +- +-// pAd MUST allow to be NULL +-NDIS_STATUS os_alloc_mem( +- IN RTMP_ADAPTER *pAd, +- OUT UCHAR **mem, +- IN ULONG size) +-{ +- *mem = (PUCHAR) kmalloc(size, GFP_ATOMIC); +- if (*mem) +- return (NDIS_STATUS_SUCCESS); +- else +- return (NDIS_STATUS_FAILURE); +-} +- +-// pAd MUST allow to be NULL +-NDIS_STATUS os_free_mem( +- IN PRTMP_ADAPTER pAd, +- IN PVOID mem) +-{ +- +- ASSERT(mem); +- kfree(mem); +- return (NDIS_STATUS_SUCCESS); +-} +- +- +- +- +-PNDIS_PACKET RtmpOSNetPktAlloc( +- IN RTMP_ADAPTER *pAd, +- IN int size) +-{ +- struct sk_buff *skb; +- /* Add 2 more bytes for ip header alignment*/ +- skb = dev_alloc_skb(size+2); +- +- return ((PNDIS_PACKET)skb); +-} +- +- +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length) +-{ +- struct sk_buff *pkt; +- +- pkt = dev_alloc_skb(Length); +- +- if (pkt == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate frag rx %ld size packet\n",Length)); +- } +- +- if (pkt) +- { +- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- } +- +- return (PNDIS_PACKET) pkt; +-} +- +- +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress) +-{ +- struct sk_buff *pkt; +- +- pkt = dev_alloc_skb(Length); +- +- if (pkt == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate tx %ld size packet\n",Length)); +- } +- +- if (pkt) +- { +- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- *VirtualAddress = (PVOID) pkt->data; +- } +- else +- { +- *VirtualAddress = (PVOID) NULL; +- } +- +- return (PNDIS_PACKET) pkt; +-} +- +- +-VOID build_tx_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, +- IN ULONG FrameLen) +-{ +- +- struct sk_buff *pTxPkt; +- +- ASSERT(pPacket); +- pTxPkt = RTPKT_TO_OSPKT(pPacket); +- +- NdisMoveMemory(skb_put(pTxPkt, FrameLen), pFrame, FrameLen); +-} +- +-VOID RTMPFreeAdapter( +- IN PRTMP_ADAPTER pAd) +-{ +- POS_COOKIE os_cookie; +- int index; +- +- os_cookie=(POS_COOKIE)pAd->OS_Cookie; +- +- if (pAd->BeaconBuf) +- kfree(pAd->BeaconBuf); +- +- +- NdisFreeSpinLock(&pAd->MgmtRingLock); +- +-#ifdef RTMP_MAC_PCI +- NdisFreeSpinLock(&pAd->RxRingLock); +-#ifdef RT3090 +-NdisFreeSpinLock(&pAd->McuCmdLock); +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // +- +- for (index =0 ; index < NUM_OF_TX_RING; index++) +- { +- NdisFreeSpinLock(&pAd->TxSwQueueLock[index]); +- NdisFreeSpinLock(&pAd->DeQueueLock[index]); +- pAd->DeQueueRunning[index] = FALSE; +- } +- +- NdisFreeSpinLock(&pAd->irq_lock); +- +- +- vfree(pAd); // pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); +- if (os_cookie) +- kfree(os_cookie); +-} +- +-BOOLEAN OS_Need_Clone_Packet(void) +-{ +- return (FALSE); +-} +- +- +- +-/* +- ======================================================================== +- +- Routine Description: +- clone an input NDIS PACKET to another one. The new internally created NDIS PACKET +- must have only one NDIS BUFFER +- return - byte copied. 0 means can't create NDIS PACKET +- NOTE: internally created NDIS_PACKET should be destroyed by RTMPFreeNdisPacket +- +- Arguments: +- pAd Pointer to our adapter +- pInsAMSDUHdr EWC A-MSDU format has extra 14-bytes header. if TRUE, insert this 14-byte hdr in front of MSDU. +- *pSrcTotalLen return total packet length. This lenght is calculated with 802.3 format packet. +- +- Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPCloneNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET *ppOutPacket) +-{ +- +- struct sk_buff *pkt; +- +- ASSERT(pInPacket); +- ASSERT(ppOutPacket); +- +- // 1. Allocate a packet +- pkt = dev_alloc_skb(2048); +- +- if (pkt == NULL) +- { +- return NDIS_STATUS_FAILURE; +- } +- +- skb_put(pkt, GET_OS_PKT_LEN(pInPacket)); +- NdisMoveMemory(pkt->data, GET_OS_PKT_DATAPTR(pInPacket), GET_OS_PKT_LEN(pInPacket)); +- *ppOutPacket = OSPKT_TO_RTPKT(pkt); +- +- +- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- +- printk("###Clone###\n"); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-// the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() +-NDIS_STATUS RTMPAllocateNdisPacket( +- IN PRTMP_ADAPTER pAd, +- OUT PNDIS_PACKET *ppPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, +- IN UINT DataLen) +-{ +- PNDIS_PACKET pPacket; +- ASSERT(pData); +- ASSERT(DataLen); +- +- // 1. Allocate a packet +- pPacket = (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + RTMP_PKT_TAIL_PADDING); +- if (pPacket == NULL) +- { +- *ppPacket = NULL; +-#ifdef DEBUG +- printk("RTMPAllocateNdisPacket Fail\n\n"); +-#endif +- return NDIS_STATUS_FAILURE; +- } +- +- // 2. clone the frame content +- if (HeaderLen > 0) +- NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket), pHeader, HeaderLen); +- if (DataLen > 0) +- NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket) + HeaderLen, pData, DataLen); +- +- // 3. update length of packet +- skb_put(GET_OS_PKT_TYPE(pPacket), HeaderLen+DataLen); +- +- RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +-// printk("%s : pPacket = %p, len = %d\n", __FUNCTION__, pPacket, GET_OS_PKT_LEN(pPacket)); +- *ppPacket = pPacket; +- return NDIS_STATUS_SUCCESS; +-} +- +-/* +- ======================================================================== +- Description: +- This routine frees a miniport internally allocated NDIS_PACKET and its +- corresponding NDIS_BUFFER and allocated memory. +- ======================================================================== +-*/ +-VOID RTMPFreeNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); +-} +- +- +-// IRQL = DISPATCH_LEVEL +-// NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same +-// scatter gather buffer +-NDIS_STATUS Sniff2BytesFromNdisBuffer( +- IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, +- OUT PUCHAR pByte1) +-{ +- *pByte0 = *(PUCHAR)(pFirstBuffer + DesiredOffset); +- *pByte1 = *(PUCHAR)(pFirstBuffer + DesiredOffset + 1); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-void RTMP_QueryPacketInfo( +- IN PNDIS_PACKET pPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen) +-{ +- pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); +- pPacketInfo->PhysicalBufferCount = 1; +- pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); +- +- *pSrcBufVA = GET_OS_PKT_DATAPTR(pPacket); +- *pSrcBufLen = GET_OS_PKT_LEN(pPacket); +-} +- +-void RTMP_QueryNextPacketInfo( +- IN PNDIS_PACKET *ppPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen) +-{ +- PNDIS_PACKET pPacket = NULL; +- +- if (*ppPacket) +- pPacket = GET_OS_PKT_NEXT(*ppPacket); +- +- if (pPacket) +- { +- pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); +- pPacketInfo->PhysicalBufferCount = 1; +- pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); +- +- *pSrcBufVA = GET_OS_PKT_DATAPTR(pPacket); +- *pSrcBufLen = GET_OS_PKT_LEN(pPacket); +- *ppPacket = GET_OS_PKT_NEXT(pPacket); +- } +- else +- { +- pPacketInfo->BufferCount = 0; +- pPacketInfo->pFirstBuffer = NULL; +- pPacketInfo->PhysicalBufferCount = 0; +- pPacketInfo->TotalPacketLength = 0; +- +- *pSrcBufVA = NULL; +- *pSrcBufLen = 0; +- *ppPacket = NULL; +- } +-} +- +- +-PNDIS_PACKET DuplicatePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID) +-{ +- struct sk_buff *skb; +- PNDIS_PACKET pRetPacket = NULL; +- USHORT DataSize; +- UCHAR *pData; +- +- DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); +- pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); +- +- +- skb = skb_clone(RTPKT_TO_OSPKT(pPacket), MEM_ALLOC_FLAG); +- if (skb) +- { +- skb->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); +- pRetPacket = OSPKT_TO_RTPKT(skb); +- } +- +- +- return pRetPacket; +- +-} +- +-PNDIS_PACKET duplicate_pkt( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID) +-{ +- struct sk_buff *skb; +- PNDIS_PACKET pPacket = NULL; +- +- +- if ((skb = __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) +- { +- skb_reserve(skb, 2); +- NdisMoveMemory(skb_tail_pointer(skb), pHeader802_3, HdrLen); +- skb_put(skb, HdrLen); +- NdisMoveMemory(skb_tail_pointer(skb), pData, DataSize); +- skb_put(skb, DataSize); +- skb->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); +- pPacket = OSPKT_TO_RTPKT(skb); +- } +- +- return pPacket; +-} +- +- +-#define TKIP_TX_MIC_SIZE 8 +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- struct sk_buff *skb, *newskb; +- +- +- skb = RTPKT_TO_OSPKT(pPacket); +- if (skb_tailroom(skb) < TKIP_TX_MIC_SIZE) +- { +- // alloc a new skb and copy the packet +- newskb = skb_copy_expand(skb, skb_headroom(skb), TKIP_TX_MIC_SIZE, GFP_ATOMIC); +- dev_kfree_skb_any(skb); +- if (newskb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Extend Tx.MIC for packet failed!, dropping packet!\n")); +- return NULL; +- } +- skb = newskb; +- } +- +- return OSPKT_TO_RTPKT(skb); +- +- +-} +- +- +- +- +-PNDIS_PACKET ClonePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize) +-{ +- struct sk_buff *pRxPkt; +- struct sk_buff *pClonedPkt; +- +- ASSERT(pPacket); +- pRxPkt = RTPKT_TO_OSPKT(pPacket); +- +- // clone the packet +- pClonedPkt = skb_clone(pRxPkt, MEM_ALLOC_FLAG); +- +- if (pClonedPkt) +- { +- // set the correct dataptr and data len +- pClonedPkt->dev = pRxPkt->dev; +- pClonedPkt->data = pData; +- pClonedPkt->len = DataSize; +- pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len; +- ASSERT(DataSize < 1530); +- } +- return pClonedPkt; +-} +- +-// +-// change OS packet DataPtr and DataLen +-// +-void update_os_packet_info( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- struct sk_buff *pOSPkt; +- +- ASSERT(pRxBlk->pRxPacket); +- pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); +- +- pOSPkt->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); +- pOSPkt->data = pRxBlk->pData; +- pOSPkt->len = pRxBlk->DataSize; +- pOSPkt->tail = pOSPkt->data + pOSPkt->len; +-} +- +- +-void wlan_802_11_to_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID) +-{ +- struct sk_buff *pOSPkt; +- +- ASSERT(pRxBlk->pRxPacket); +- ASSERT(pHeader802_3); +- +- pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); +- +- pOSPkt->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); +- pOSPkt->data = pRxBlk->pData; +- pOSPkt->len = pRxBlk->DataSize; +- pOSPkt->tail = pOSPkt->data + pOSPkt->len; +- +- // +- // copy 802.3 header +- // +- // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, LENGTH_802_3); +-#endif // CONFIG_STA_SUPPORT // +- } +- +- +- +-void announce_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- +- struct sk_buff *pRxPkt; +-#ifdef INF_AMAZON_PPA +- int ret = 0; +- unsigned int ppa_flags = 0; /* reserved for now */ +-#endif // INF_AMAZON_PPA // +- +- ASSERT(pPacket); +- +- pRxPkt = RTPKT_TO_OSPKT(pPacket); +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- /* Push up the protocol stack */ +-#ifdef IKANOS_VX_1X0 +- IKANOS_DataFrameRx(pAd, pRxPkt->dev, pRxPkt, pRxPkt->len); +-#else +-#ifdef INF_AMAZON_SE +-#ifdef BG_FT_SUPPORT +- BG_FTPH_PacketFromApHandle(pRxPkt); +- return; +-#endif // BG_FT_SUPPORT // +-#endif // INF_AMAZON_SE // +- pRxPkt->protocol = eth_type_trans(pRxPkt, pRxPkt->dev); +- +-#ifdef INF_AMAZON_PPA +- if (ppa_hook_directpath_send_fn && pAd->PPAEnable==TRUE ) +- { +- memset(pRxPkt->head,0,pRxPkt->data-pRxPkt->head-14); +- DBGPRINT(RT_DEBUG_TRACE, ("ppa_hook_directpath_send_fn rx :ret:%d headroom:%d dev:%s pktlen:%d<===\n",ret,skb_headroom(pRxPkt) +- ,pRxPkt->dev->name,pRxPkt->len)); +- hex_dump("rx packet", pRxPkt->data, 32); +- ret = ppa_hook_directpath_send_fn(pAd->g_if_id, pRxPkt, pRxPkt->len, ppa_flags); +- pRxPkt=NULL; +- return; +- +- } +-#endif // INF_AMAZON_PPA // +- +-//#ifdef CONFIG_5VT_ENHANCE +-// *(int*)(pRxPkt->cb) = BRIDGE_TAG; +-//#endif +- +- { +- netif_rx(pRxPkt); +- } +- +-#endif // IKANOS_VX_1X0 // +-} +- +- +-PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg) +-{ +- sg->NumberOfElements = 1; +- sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); +- sg->Elements[0].Length = GET_OS_PKT_LEN(pPacket); +- return (sg); +-} +- +-void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen) +-{ +- unsigned char *pt; +- int x; +- +- if (RTDebugLevel < RT_DEBUG_TRACE) +- return; +- +- pt = pSrcBufVA; +- printk("%s: %p, len = %d\n",str, pSrcBufVA, SrcBufLen); +- for (x=0; x= 15 +- +- //union iwreq_data wrqu; +- PSTRING pBuf = NULL, pBufPtr = NULL; +- USHORT event, type, BufLen; +- UCHAR event_table_len = 0; +- +- type = Event_flag & 0xFF00; +- event = Event_flag & 0x00FF; +- +- switch (type) +- { +- case IW_SYS_EVENT_FLAG_START: +- event_table_len = IW_SYS_EVENT_TYPE_NUM; +- break; +- +- case IW_SPOOF_EVENT_FLAG_START: +- event_table_len = IW_SPOOF_EVENT_TYPE_NUM; +- break; +- +- case IW_FLOOD_EVENT_FLAG_START: +- event_table_len = IW_FLOOD_EVENT_TYPE_NUM; +- break; +- } +- +- if (event_table_len == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : The type(%0x02x) is not valid.\n", __FUNCTION__, type)); +- return; +- } +- +- if (event >= event_table_len) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : The event(%0x02x) is not valid.\n", __FUNCTION__, event)); +- return; +- } +- +- //Allocate memory and copy the msg. +- if((pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC)) != NULL) +- { +- //Prepare the payload +- memset(pBuf, 0, IW_CUSTOM_MAX_LEN); +- +- pBufPtr = pBuf; +- +- if (pAddr) +- pBufPtr += sprintf(pBufPtr, "(RT2860) STA(%02x:%02x:%02x:%02x:%02x:%02x) ", PRINT_MAC(pAddr)); +- else if (BssIdx < MAX_MBSSID_NUM) +- pBufPtr += sprintf(pBufPtr, "(RT2860) BSS(ra%d) ", BssIdx); +- else +- pBufPtr += sprintf(pBufPtr, "(RT2860) "); +- +- if (type == IW_SYS_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s", pWirelessSysEventText[event]); +- else if (type == IW_SPOOF_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s (RSSI=%d)", pWirelessSpoofEventText[event], Rssi); +- else if (type == IW_FLOOD_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s", pWirelessFloodEventText[event]); +- else +- pBufPtr += sprintf(pBufPtr, "%s", "unknown event"); +- +- pBufPtr[pBufPtr - pBuf] = '\0'; +- BufLen = pBufPtr - pBuf; +- +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, (PUCHAR)pBuf, BufLen); +- //DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __FUNCTION__, pBuf)); +- +- kfree(pBuf); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Can't allocate memory for wireless event.\n", __FUNCTION__)); +-#else +- DBGPRINT(RT_DEBUG_ERROR, ("%s : The Wireless Extension MUST be v15 or newer.\n", __FUNCTION__)); +-#endif /* WIRELESS_EXT >= 15 */ +-} +- +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-void send_monitor_packets( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) +-{ +- struct sk_buff *pOSPkt; +- wlan_ng_prism2_header *ph; +- int rate_index = 0; +- USHORT header_len = 0; +- UCHAR temp_header[40] = {0}; +- +- u_int32_t ralinkrate[256] = {2,4,11,22, 12,18,24,36,48,72,96, 108, 109, 110, 111, 112, 13, 26, 39, 52,78,104, 117, 130, 26, 52, 78,104, 156, 208, 234, 260, 27, 54,81,108,162, 216, 243, 270, // Last 38 +- 54, 108, 162, 216, 324, 432, 486, 540, 14, 29, 43, 57, 87, 115, 130, 144, 29, 59,87,115, 173, 230,260, 288, 30, 60,90,120,180,240,270,300,60,120,180,240,360,480,540,600, 0,1,2,3,4,5,6,7,8,9,10, +- 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80}; +- +- +- ASSERT(pRxBlk->pRxPacket); +- if (pRxBlk->DataSize < 10) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too small! (%d)\n", __FUNCTION__, pRxBlk->DataSize)); +- goto err_free_sk_buff; +- } +- +- if (pRxBlk->DataSize + sizeof(wlan_ng_prism2_header) > RX_BUFFER_AGGRESIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too large! (%d)\n", __FUNCTION__, pRxBlk->DataSize + sizeof(wlan_ng_prism2_header))); +- goto err_free_sk_buff; +- } +- +- pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); +- pOSPkt->dev = get_netdev_from_bssid(pAd, BSS0); +- if (pRxBlk->pHeader->FC.Type == BTYPE_DATA) +- { +- pRxBlk->DataSize -= LENGTH_802_11; +- if ((pRxBlk->pHeader->FC.ToDs == 1) && +- (pRxBlk->pHeader->FC.FrDs == 1)) +- header_len = LENGTH_802_11_WITH_ADDR4; +- else +- header_len = LENGTH_802_11; +- +- // QOS +- if (pRxBlk->pHeader->FC.SubType & 0x08) +- { +- header_len += 2; +- // Data skip QOS contorl field +- pRxBlk->DataSize -=2; +- } +- +- // Order bit: A-Ralink or HTC+ +- if (pRxBlk->pHeader->FC.Order) +- { +- header_len += 4; +- // Data skip HTC contorl field +- pRxBlk->DataSize -= 4; +- } +- +- // Copy Header +- if (header_len <= 40) +- NdisMoveMemory(temp_header, pRxBlk->pData, header_len); +- +- // skip HW padding +- if (pRxBlk->RxD.L2PAD) +- pRxBlk->pData += (header_len + 2); +- else +- pRxBlk->pData += header_len; +- } //end if +- +- +- if (pRxBlk->DataSize < pOSPkt->len) { +- skb_trim(pOSPkt,pRxBlk->DataSize); +- } else { +- skb_put(pOSPkt,(pRxBlk->DataSize - pOSPkt->len)); +- } //end if +- +- if ((pRxBlk->pData - pOSPkt->data) > 0) { +- skb_put(pOSPkt,(pRxBlk->pData - pOSPkt->data)); +- skb_pull(pOSPkt,(pRxBlk->pData - pOSPkt->data)); +- } //end if +- +- if (skb_headroom(pOSPkt) < (sizeof(wlan_ng_prism2_header)+ header_len)) { +- if (pskb_expand_head(pOSPkt, (sizeof(wlan_ng_prism2_header) + header_len), 0, GFP_ATOMIC)) { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Reallocate header size of sk_buff fail!\n", __FUNCTION__)); +- goto err_free_sk_buff; +- } //end if +- } //end if +- +- if (header_len > 0) +- NdisMoveMemory(skb_push(pOSPkt, header_len), temp_header, header_len); +- +- ph = (wlan_ng_prism2_header *) skb_push(pOSPkt, sizeof(wlan_ng_prism2_header)); +- NdisZeroMemory(ph, sizeof(wlan_ng_prism2_header)); +- +- ph->msgcode = DIDmsg_lnxind_wlansniffrm; +- ph->msglen = sizeof(wlan_ng_prism2_header); +- strcpy((PSTRING) ph->devname, (PSTRING) pAd->net_dev->name); +- +- ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; +- ph->hosttime.status = 0; +- ph->hosttime.len = 4; +- ph->hosttime.data = jiffies; +- +- ph->mactime.did = DIDmsg_lnxind_wlansniffrm_mactime; +- ph->mactime.status = 0; +- ph->mactime.len = 0; +- ph->mactime.data = 0; +- +- ph->istx.did = DIDmsg_lnxind_wlansniffrm_istx; +- ph->istx.status = 0; +- ph->istx.len = 0; +- ph->istx.data = 0; +- +- ph->channel.did = DIDmsg_lnxind_wlansniffrm_channel; +- ph->channel.status = 0; +- ph->channel.len = 4; +- +- ph->channel.data = (u_int32_t)pAd->CommonCfg.Channel; +- +- ph->rssi.did = DIDmsg_lnxind_wlansniffrm_rssi; +- ph->rssi.status = 0; +- ph->rssi.len = 4; +- ph->rssi.data = (u_int32_t)RTMPMaxRssi(pAd, ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI0, RSSI_0), ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI1, RSSI_1), ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI2, RSSI_2));; +- +- ph->signal.did = DIDmsg_lnxind_wlansniffrm_signal; +- ph->signal.status = 0; +- ph->signal.len = 4; +- ph->signal.data = 0; //rssi + noise; +- +- ph->noise.did = DIDmsg_lnxind_wlansniffrm_noise; +- ph->noise.status = 0; +- ph->noise.len = 4; +- ph->noise.data = 0; +- +-#ifdef DOT11_N_SUPPORT +- if (pRxBlk->pRxWI->PHYMODE >= MODE_HTMIX) +- { +- rate_index = 16 + ((UCHAR)pRxBlk->pRxWI->BW *16) + ((UCHAR)pRxBlk->pRxWI->ShortGI *32) + ((UCHAR)pRxBlk->pRxWI->MCS); +- } +- else +-#endif // DOT11_N_SUPPORT // +- if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM) +- rate_index = (UCHAR)(pRxBlk->pRxWI->MCS) + 4; +- else +- rate_index = (UCHAR)(pRxBlk->pRxWI->MCS); +- if (rate_index < 0) +- rate_index = 0; +- if (rate_index > 255) +- rate_index = 255; +- +- ph->rate.did = DIDmsg_lnxind_wlansniffrm_rate; +- ph->rate.status = 0; +- ph->rate.len = 4; +- ph->rate.data = ralinkrate[rate_index]; +- +- ph->frmlen.did = DIDmsg_lnxind_wlansniffrm_frmlen; +- ph->frmlen.status = 0; +- ph->frmlen.len = 4; +- ph->frmlen.data = (u_int32_t)pRxBlk->DataSize; +- +- +- pOSPkt->pkt_type = PACKET_OTHERHOST; +- pOSPkt->protocol = eth_type_trans(pOSPkt, pOSPkt->dev); +- pOSPkt->ip_summed = CHECKSUM_NONE; +- netif_rx(pOSPkt); +- +- return; +- +-err_free_sk_buff: +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-/******************************************************************************* +- +- File open/close related functions. +- +- *******************************************************************************/ +-RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) +-{ +- struct file *filePtr; +- +- filePtr = filp_open(pPath, flag, 0); +- if (IS_ERR(filePtr)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(): Error %ld opening %s\n", __FUNCTION__, -PTR_ERR(filePtr), pPath)); +- } +- +- return (RTMP_OS_FD)filePtr; +-} +- +-int RtmpOSFileClose(RTMP_OS_FD osfd) +-{ +- filp_close(osfd, NULL); +- return 0; +-} +- +- +-void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) +-{ +- osfd->f_pos = offset; +-} +- +- +-int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) +-{ +- // The object must have a read method +- if (osfd->f_op && osfd->f_op->read) +- { +- return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("no file read method\n")); +- return -1; +- } +-} +- +- +-int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) +-{ +- return osfd->f_op->write(osfd, pDataPtr, (size_t)writeLen, &osfd->f_pos); +-} +- +- +-void RtmpOSFSInfoChange(RTMP_OS_FS_INFO *pOSFSInfo, BOOLEAN bSet) +-{ +- if (bSet) +- { +- // Save uid and gid used for filesystem access. +- // Set user and group to 0 (root) +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) +- pOSFSInfo->fsuid= current->fsuid; +- pOSFSInfo->fsgid = current->fsgid; +- current->fsuid = current->fsgid = 0; +-#else +- pOSFSInfo->fsuid = current_fsuid(); +- pOSFSInfo->fsgid = current_fsgid(); +-#endif +- pOSFSInfo->fs = get_fs(); +- set_fs(KERNEL_DS); +- } +- else +- { +- set_fs(pOSFSInfo->fs); +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) +- current->fsuid = pOSFSInfo->fsuid; +- current->fsgid = pOSFSInfo->fsgid; +-#endif +- } +-} +- +- +- +-/******************************************************************************* +- +- Task create/management/kill related functions. +- +- *******************************************************************************/ +-NDIS_STATUS RtmpOSTaskKill( +- IN RTMP_OS_TASK *pTask) +-{ +- RTMP_ADAPTER *pAd; +- int ret = NDIS_STATUS_FAILURE; +- +- pAd = (RTMP_ADAPTER *)pTask->priv; +- +-#ifdef KTHREAD_SUPPORT +- if (pTask->kthread_task) +- { +- kthread_stop(pTask->kthread_task); +- ret = NDIS_STATUS_SUCCESS; +- } +-#else +- CHECK_PID_LEGALITY(pTask->taskPID) +- { +- printk("Terminate the task(%s) with pid(%d)!\n", pTask->taskName, GET_PID_NUMBER(pTask->taskPID)); +- mb(); +- pTask->task_killed = 1; +- mb(); +- ret = KILL_THREAD_PID(pTask->taskPID, SIGTERM, 1); +- if (ret) +- { +- printk(KERN_WARNING "kill task(%s) with pid(%d) failed(retVal=%d)!\n", +- pTask->taskName, GET_PID_NUMBER(pTask->taskPID), ret); +- } +- else +- { +- wait_for_completion(&pTask->taskComplete); +- pTask->taskPID = THREAD_PID_INIT_VALUE; +- pTask->task_killed = 0; +- ret = NDIS_STATUS_SUCCESS; +- } +- } +-#endif +- +- return ret; +- +-} +- +- +-INT RtmpOSTaskNotifyToExit( +- IN RTMP_OS_TASK *pTask) +-{ +- +-#ifndef KTHREAD_SUPPORT +- complete_and_exit(&pTask->taskComplete, 0); +-#endif +- +- return 0; +-} +- +- +-void RtmpOSTaskCustomize( +- IN RTMP_OS_TASK *pTask) +-{ +- +-#ifndef KTHREAD_SUPPORT +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- daemonize((PSTRING)&pTask->taskName[0]/*"%s",pAd->net_dev->name*/); +- +- allow_signal(SIGTERM); +- allow_signal(SIGKILL); +- current->flags |= PF_NOFREEZE; +-#else +- unsigned long flags; +- +- daemonize(); +- reparent_to_init(); +- strcpy(current->comm, &pTask->taskName[0]); +- +- siginitsetinv(¤t->blocked, sigmask(SIGTERM) | sigmask(SIGKILL)); +- +- /* Allow interception of SIGKILL only +- * Don't allow other signals to interrupt the transmission */ +-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,22) +- spin_lock_irqsave(¤t->sigmask_lock, flags); +- flush_signals(current); +- recalc_sigpending(current); +- spin_unlock_irqrestore(¤t->sigmask_lock, flags); +-#endif +-#endif +- +- /* signal that we've started the thread */ +- complete(&pTask->taskComplete); +- +-#endif +-} +- +- +-NDIS_STATUS RtmpOSTaskAttach( +- IN RTMP_OS_TASK *pTask, +- IN int (*fn)(void *), +- IN void *arg) +-{ +- NDIS_STATUS status = NDIS_STATUS_SUCCESS; +- pid_t pid_number = -1; +- +-#ifdef KTHREAD_SUPPORT +- pTask->task_killed = 0; +- pTask->kthread_task = NULL; +- pTask->kthread_task = kthread_run(fn, arg, pTask->taskName); +- if (IS_ERR(pTask->kthread_task)) +- status = NDIS_STATUS_FAILURE; +-#else +- pid_number = kernel_thread(fn, arg, RTMP_OS_MGMT_TASK_FLAGS); +- if (pid_number < 0) +- { +- DBGPRINT (RT_DEBUG_ERROR, ("Attach task(%s) failed!\n", pTask->taskName)); +- status = NDIS_STATUS_FAILURE; +- } +- else +- { +- pTask->taskPID = GET_PID(pid_number); +- +- // Wait for the thread to start +- wait_for_completion(&pTask->taskComplete); +- status = NDIS_STATUS_SUCCESS; +- } +-#endif +- return status; +-} +- +- +-NDIS_STATUS RtmpOSTaskInit( +- IN RTMP_OS_TASK *pTask, +- IN PSTRING pTaskName, +- IN VOID *pPriv) +-{ +- int len; +- +- ASSERT(pTask); +- +-#ifndef KTHREAD_SUPPORT +- NdisZeroMemory((PUCHAR)(pTask), sizeof(RTMP_OS_TASK)); +-#endif +- +- len = strlen(pTaskName); +- len = len > (RTMP_OS_TASK_NAME_LEN -1) ? (RTMP_OS_TASK_NAME_LEN-1) : len; +- NdisMoveMemory(&pTask->taskName[0], pTaskName, len); +- pTask->priv = pPriv; +- +-#ifndef KTHREAD_SUPPORT +- RTMP_SEM_EVENT_INIT_LOCKED(&(pTask->taskSema)); +- pTask->taskPID = THREAD_PID_INIT_VALUE; +- +- init_completion (&pTask->taskComplete); +-#endif +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-void RTMP_IndicateMediaState( +- IN PRTMP_ADAPTER pAd) +-{ +- if (pAd->CommonCfg.bWirelessEvent) +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- else +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- } +-} +- +- +-#if LINUX_VERSION_CODE <= 0x20402 // Red Hat 7.1 +-//static struct net_device *alloc_netdev(int sizeof_priv, const char *mask, void (*setup)(struct net_device *)) //sample +-struct net_device *alloc_netdev( +- int sizeof_priv, +- const char *mask, +- void (*setup)(struct net_device *)) +-{ +- struct net_device *dev; +- INT alloc_size; +- +- +- /* ensure 32-byte alignment of the private area */ +- alloc_size = sizeof (*dev) + sizeof_priv + 31; +- +- dev = (struct net_device *) kmalloc(alloc_size, GFP_KERNEL); +- if (dev == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, +- ("alloc_netdev: Unable to allocate device memory.\n")); +- return NULL; +- } +- +- memset(dev, 0, alloc_size); +- +- if (sizeof_priv) +- dev->priv = (void *) (((long)(dev + 1) + 31) & ~31); +- +- setup(dev); +- strcpy(dev->name, mask); +- +- return dev; +-} +-#endif // LINUX_VERSION_CODE // +- +- +-int RtmpOSWrielessEventSend( +- IN RTMP_ADAPTER *pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, +- IN UINT32 dataLen) +-{ +- union iwreq_data wrqu; +- +- memset(&wrqu, 0, sizeof(wrqu)); +- +- if (flags>-1) +- wrqu.data.flags = flags; +- +- if (pSrcMac) +- memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); +- +- if ((pData!= NULL) && (dataLen > 0)) +- wrqu.data.length = dataLen; +- +- wireless_send_event(pAd->net_dev, eventType, &wrqu, (char *)pData); +- return 0; +-} +- +- +-int RtmpOSNetDevAddrSet( +- IN PNET_DEV pNetDev, +- IN PUCHAR pMacAddr) +-{ +- struct net_device *net_dev; +- RTMP_ADAPTER *pAd; +- +- net_dev = pNetDev; +- //pAd = (RTMP_ADAPTER *)net_dev->priv; +- pAd=RTMP_OS_NETDEV_GET_PRIV(pNetDev); +- +-#ifdef CONFIG_STA_SUPPORT +- // work-around for the SuSE due to it has it's own interface name management system. +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- NdisZeroMemory(pAd->StaCfg.dev_name, 16); +- NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name)); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- NdisMoveMemory(net_dev->dev_addr, pMacAddr, 6); +- +- return 0; +-} +- +- +- +-/* +- * Assign the network dev name for created Ralink WiFi interface. +- */ +-static int RtmpOSNetDevRequestName( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV dev, +- IN PSTRING pPrefixStr, +- IN INT devIdx) +-{ +- PNET_DEV existNetDev; +- STRING suffixName[IFNAMSIZ]; +- STRING desiredName[IFNAMSIZ]; +- int ifNameIdx, prefixLen, slotNameLen; +- int Status; +- +- +- prefixLen = strlen(pPrefixStr); +- ASSERT((prefixLen < IFNAMSIZ)); +- +- for (ifNameIdx = devIdx; ifNameIdx < 32; ifNameIdx++) +- { +- memset(suffixName, 0, IFNAMSIZ); +- memset(desiredName, 0, IFNAMSIZ); +- strncpy(&desiredName[0], pPrefixStr, prefixLen); +- +-#ifdef MULTIPLE_CARD_SUPPORT +- if (pAd->MC_RowID >= 0) +- sprintf(suffixName, "%02d_%d", pAd->MC_RowID, ifNameIdx); +- else +-#endif // MULTIPLE_CARD_SUPPORT // +- sprintf(suffixName, "%d", ifNameIdx); +- +- slotNameLen = strlen(suffixName); +- ASSERT(((slotNameLen + prefixLen) < IFNAMSIZ)); +- strcat(desiredName, suffixName); +- +- existNetDev = RtmpOSNetDevGetByName(dev, &desiredName[0]); +- if (existNetDev == NULL) +- break; +- else +- RtmpOSNetDeviceRefPut(existNetDev); +- } +- +- if(ifNameIdx < 32) +- { +- strcpy(&dev->name[0], &desiredName[0]); +- Status = NDIS_STATUS_SUCCESS; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, +- ("Cannot request DevName with preifx(%s) and in range(0~32) as suffix from OS!\n", pPrefixStr)); +- Status = NDIS_STATUS_FAILURE; +- } +- +- return Status; +-} +- +- +-void RtmpOSNetDevClose( +- IN PNET_DEV pNetDev) +-{ +- dev_close(pNetDev); +-} +- +- +-void RtmpOSNetDevFree(PNET_DEV pNetDev) +-{ +- ASSERT(pNetDev); +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- free_netdev(pNetDev); +-#else +- kfree(pNetDev); +-#endif +-} +- +- +-INT RtmpOSNetDevAlloc( +- IN PNET_DEV *new_dev_p, +- IN UINT32 privDataSize) +-{ +- // assign it as null first. +- *new_dev_p = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate a net device with private data size=%d!\n", privDataSize)); +-#if LINUX_VERSION_CODE <= 0x20402 // Red Hat 7.1 +- *new_dev_p = alloc_netdev(privDataSize, "eth%d", ether_setup); +-#else +- *new_dev_p = alloc_etherdev(privDataSize); +-#endif // LINUX_VERSION_CODE // +- +- if (*new_dev_p) +- return NDIS_STATUS_SUCCESS; +- else +- return NDIS_STATUS_FAILURE; +-} +- +- +-PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, PSTRING pDevName) +-{ +- PNET_DEV pTargetNetDev = NULL; +- +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) +- pTargetNetDev = dev_get_by_name(dev_net(pNetDev), pDevName); +-#else +- ASSERT(pNetDev); +- pTargetNetDev = dev_get_by_name(pNetDev->nd_net, pDevName); +-#endif +-#else +- pTargetNetDev = dev_get_by_name(pDevName); +-#endif // KERNEL_VERSION(2,6,24) // +- +-#else +- int devNameLen; +- +- devNameLen = strlen(pDevName); +- ASSERT((devNameLen <= IFNAMSIZ)); +- +- for(pTargetNetDev=dev_base; pTargetNetDev!=NULL; pTargetNetDev=pTargetNetDev->next) +- { +- if (strncmp(pTargetNetDev->name, pDevName, devNameLen) == 0) +- break; +- } +-#endif // KERNEL_VERSION(2,5,0) // +- +- return pTargetNetDev; +-} +- +- +-void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) +-{ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- /* +- every time dev_get_by_name is called, and it has returned a valid struct +- net_device*, dev_put should be called afterwards, because otherwise the +- machine hangs when the device is unregistered (since dev->refcnt > 1). +- */ +- if(pNetDev) +- dev_put(pNetDev); +-#endif // LINUX_VERSION_CODE // +-} +- +- +-INT RtmpOSNetDevDestory( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV pNetDev) +-{ +- +- // TODO: Need to fix this +- printk("WARNING: This function(%s) not implement yet!!!\n", __FUNCTION__); +- return 0; +-} +- +- +-void RtmpOSNetDevDetach(PNET_DEV pNetDev) +-{ +- unregister_netdev(pNetDev); +-} +- +- +-int RtmpOSNetDevAttach( +- IN PNET_DEV pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook) +-{ +- int ret, rtnl_locked = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RtmpOSNetDevAttach()--->\n")); +- // If we need hook some callback function to the net device structrue, now do it. +- if (pDevOpHook) +- { +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(pNetDev); +- +- pNetDev->netdev_ops = pDevOpHook->netdev_ops; +- +- /* OS specific flags, here we used to indicate if we are virtual interface */ +- pNetDev->priv_flags = pDevOpHook->priv_flags; +- +-#if (WIRELESS_EXT < 21) && (WIRELESS_EXT >= 12) +- pNetDev->get_wireless_stats = rt28xx_get_wireless_stats; +-#endif +- +-#ifdef CONFIG_STA_SUPPORT +-#if WIRELESS_EXT >= 12 +- if (pAd->OpMode == OPMODE_STA) +- { +- pNetDev->wireless_handlers = &rt28xx_iw_handler_def; +- } +-#endif //WIRELESS_EXT >= 12 +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-#if WIRELESS_EXT >= 12 +- if (pAd->OpMode == OPMODE_AP) +- { +- pNetDev->wireless_handlers = &rt28xx_ap_iw_handler_def; +- } +-#endif //WIRELESS_EXT >= 12 +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +- // copy the net device mac address to the net_device structure. +- NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN); +- +- rtnl_locked = pDevOpHook->needProtcted; +- } +- +- if (rtnl_locked) +- ret = register_netdevice(pNetDev); +- else +- ret = register_netdev(pNetDev); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<---RtmpOSNetDevAttach(), ret=%d\n", ret)); +- if (ret == 0) +- return NDIS_STATUS_SUCCESS; +- else +- return NDIS_STATUS_FAILURE; +-} +- +- +-PNET_DEV RtmpOSNetDevCreate( +- IN RTMP_ADAPTER *pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, +- IN PSTRING pNamePrefix) +-{ +- struct net_device *pNetDev = NULL; +- int status; +- +- +- /* allocate a new network device */ +- status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize*/); +- if (status != NDIS_STATUS_SUCCESS) +- { +- /* allocation fail, exit */ +- DBGPRINT(RT_DEBUG_ERROR, ("Allocate network device fail (%s)...\n", pNamePrefix)); +- return NULL; +- } +- +- +- /* find a available interface name, max 32 interfaces */ +- status = RtmpOSNetDevRequestName(pAd, pNetDev, pNamePrefix, devNum); +- if (status != NDIS_STATUS_SUCCESS) +- { +- /* error! no any available ra name can be used! */ +- DBGPRINT(RT_DEBUG_ERROR, ("Assign interface name (%s with suffix 0~32) failed...\n", pNamePrefix)); +- RtmpOSNetDevFree(pNetDev); +- +- return NULL; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("The name of the new %s interface is %s...\n", pNamePrefix, pNetDev->name)); +- } +- +- return pNetDev; +-} +diff --git a/drivers/staging/rt3090/rt_linux.h b/drivers/staging/rt3090/rt_linux.h +deleted file mode 100644 +index a970e78..0000000 +--- a/drivers/staging/rt3090/rt_linux.h ++++ /dev/null +@@ -1,1034 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_linux.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __RT_LINUX_H__ +-#define __RT_LINUX_H__ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#ifdef INF_AMAZON_PPA +-#include +-#include +-#endif // INF_AMAZON_PPA // +- +-// load firmware +-#define __KERNEL_SYSCALLS__ +-#include +-#include +-#include +-#include // for get_unaligned() +- +-#ifdef KTHREAD_SUPPORT +-#include +-#include +-#endif // KTHREAD_SUPPORT // +- +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- +-#ifdef KTHREAD_SUPPORT +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) +-#error "This kerne version doesn't support kthread!!" +-#endif +-#endif // KTHREAD_SUPPORT // +- +-/*********************************************************************************** +- * Profile related sections +- ***********************************************************************************/ +- +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef RTMP_MAC_PCI +-#define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" +-#define STA_DRIVER_VERSION "2.1.0.0" +-#ifdef MULTIPLE_CARD_SUPPORT +-#define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat" +-#endif // MULTIPLE_CARD_SUPPORT // +-#endif // RTMP_MAC_PCI // +- +- +- +-extern const struct iw_handler_def rt28xx_iw_handler_def; +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-extern const struct iw_handler_def rt28xx_ap_iw_handler_def; +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +-/*********************************************************************************** +- * Compiler related definitions +- ***********************************************************************************/ +-#undef __inline +-#define __inline static inline +-#define IN +-#define OUT +-#define INOUT +-#define NDIS_STATUS INT +- +- +-/*********************************************************************************** +- * OS Specific definitions and data structures +- ***********************************************************************************/ +-typedef struct pci_dev * PPCI_DEV; +-typedef struct net_device * PNET_DEV; +-typedef void * PNDIS_PACKET; +-typedef char NDIS_PACKET; +-typedef PNDIS_PACKET * PPNDIS_PACKET; +-typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; +-typedef dma_addr_t * PNDIS_PHYSICAL_ADDRESS; +-typedef void * NDIS_HANDLE; +-typedef char * PNDIS_BUFFER; +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) +-typedef struct pid * RTMP_OS_PID; +-#else +-typedef pid_t RTMP_OS_PID; +-#endif +- +-typedef struct semaphore RTMP_OS_SEM; +- +-#ifdef RTMP_MAC_PCI +-#ifndef PCI_DEVICE +-#define PCI_DEVICE(vend,dev) \ +- .vendor = (vend), .device = (dev), \ +- .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID +-#endif // PCI_DEVICE // +-#endif // RTMP_MAC_PCI // +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#define RT_MOD_INC_USE_COUNT() \ +- if (!try_module_get(THIS_MODULE)) \ +- { \ +- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot reserve module\n", __FUNCTION__)); \ +- return -1; \ +- } +- +-#define RT_MOD_DEC_USE_COUNT() module_put(THIS_MODULE); +-#else +-#define RT_MOD_INC_USE_COUNT() MOD_INC_USE_COUNT; +-#define RT_MOD_DEC_USE_COUNT() MOD_DEC_USE_COUNT; +-#endif +- +-#define RTMP_INC_REF(_A) 0 +-#define RTMP_DEC_REF(_A) 0 +-#define RTMP_GET_REF(_A) 0 +- +- +-#if WIRELESS_EXT >= 12 +-// This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev); +-#endif +- +- +-/*********************************************************************************** +- * Network related constant definitions +- ***********************************************************************************/ +-#ifndef IFNAMSIZ +-#define IFNAMSIZ 16 +-#endif +- +-#define ETH_LENGTH_OF_ADDRESS 6 +- +-#define NDIS_STATUS_SUCCESS 0x00 +-#define NDIS_STATUS_FAILURE 0x01 +-#define NDIS_STATUS_INVALID_DATA 0x02 +-#define NDIS_STATUS_RESOURCES 0x03 +- +-#define NDIS_SET_PACKET_STATUS(_p, _status) do{} while(0) +-#define NdisWriteErrorLogEntry(_a, _b, _c, _d) do{} while(0) +- +-/* statistics counter */ +-#define STATS_INC_RX_PACKETS(_pAd, _dev) +-#define STATS_INC_TX_PACKETS(_pAd, _dev) +- +-#define STATS_INC_RX_BYTESS(_pAd, _dev, len) +-#define STATS_INC_TX_BYTESS(_pAd, _dev, len) +- +-#define STATS_INC_RX_ERRORS(_pAd, _dev) +-#define STATS_INC_TX_ERRORS(_pAd, _dev) +- +-#define STATS_INC_RX_DROPPED(_pAd, _dev) +-#define STATS_INC_TX_DROPPED(_pAd, _dev) +- +- +-/*********************************************************************************** +- * Ralink Specific network related constant definitions +- ***********************************************************************************/ +-#define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f +-#define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30 +-#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70 +-#define MIN_NET_DEVICE_FOR_APCLI 0x20 +-#define MIN_NET_DEVICE_FOR_MESH 0x30 +-#ifdef CONFIG_STA_SUPPORT +-#define MIN_NET_DEVICE_FOR_DLS 0x40 +-#endif // CONFIG_STA_SUPPORT // +-#define NET_DEVICE_REAL_IDX_MASK 0x0f // for each operation mode, we maximum support 15 entities. +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define NDIS_PACKET_TYPE_DIRECTED 0 +-#define NDIS_PACKET_TYPE_MULTICAST 1 +-#define NDIS_PACKET_TYPE_BROADCAST 2 +-#define NDIS_PACKET_TYPE_ALL_MULTICAST 3 +-#define NDIS_PACKET_TYPE_PROMISCUOUS 4 +-#endif // CONFIG_STA_SUPPORT // +- +- +-/*********************************************************************************** +- * OS signaling related constant definitions +- ***********************************************************************************/ +- +- +-/*********************************************************************************** +- * OS file operation related data structure definitions +- ***********************************************************************************/ +-typedef struct file* RTMP_OS_FD; +- +-typedef struct _RTMP_OS_FS_INFO_ +-{ +- int fsuid; +- int fsgid; +- mm_segment_t fs; +-}RTMP_OS_FS_INFO; +- +-#define IS_FILE_OPEN_ERR(_fd) IS_ERR((_fd)) +- +- +-/*********************************************************************************** +- * OS semaphore related data structure and definitions +- ***********************************************************************************/ +-struct os_lock { +- spinlock_t lock; +- unsigned long flags; +-}; +- +-typedef spinlock_t NDIS_SPIN_LOCK; +- +-// +-// spin_lock enhanced for Nested spin lock +-// +-#define NdisAllocateSpinLock(__lock) \ +-{ \ +- spin_lock_init((spinlock_t *)(__lock)); \ +-} +- +-#define NdisFreeSpinLock(lock) \ +- do{}while(0) +- +- +-#define RTMP_SEM_LOCK(__lock) \ +-{ \ +- spin_lock_bh((spinlock_t *)(__lock)); \ +-} +- +-#define RTMP_SEM_UNLOCK(__lock) \ +-{ \ +- spin_unlock_bh((spinlock_t *)(__lock)); \ +-} +- +- +-// sample, use semaphore lock to replace IRQ lock, 2007/11/15 +-#define RTMP_IRQ_LOCK(__lock, __irqflags) \ +-{ \ +- __irqflags = 0; \ +- spin_lock_bh((spinlock_t *)(__lock)); \ +- pAd->irq_disabled |= 1; \ +-} +- +-#define RTMP_IRQ_UNLOCK(__lock, __irqflag) \ +-{ \ +- pAd->irq_disabled &= 0; \ +- spin_unlock_bh((spinlock_t *)(__lock)); \ +-} +- +-#define RTMP_INT_LOCK(__lock, __irqflags) \ +-{ \ +- spin_lock_irqsave((spinlock_t *)__lock, __irqflags); \ +-} +- +-#define RTMP_INT_UNLOCK(__lock, __irqflag) \ +-{ \ +- spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \ +-} +- +-#define NdisAcquireSpinLock RTMP_SEM_LOCK +-#define NdisReleaseSpinLock RTMP_SEM_UNLOCK +- +-#ifndef wait_event_interruptible_timeout +-#define __wait_event_interruptible_timeout(wq, condition, ret) \ +-do { \ +- wait_queue_t __wait; \ +- init_waitqueue_entry(&__wait, current); \ +- add_wait_queue(&wq, &__wait); \ +- for (;;) { \ +- set_current_state(TASK_INTERRUPTIBLE); \ +- if (condition) \ +- break; \ +- if (!signal_pending(current)) { \ +- ret = schedule_timeout(ret); \ +- if (!ret) \ +- break; \ +- continue; \ +- } \ +- ret = -ERESTARTSYS; \ +- break; \ +- } \ +- current->state = TASK_RUNNING; \ +- remove_wait_queue(&wq, &__wait); \ +-} while (0) +- +-#define wait_event_interruptible_timeout(wq, condition, timeout) \ +-({ \ +- long __ret = timeout; \ +- if (!(condition)) \ +- __wait_event_interruptible_timeout(wq, condition, __ret); \ +- __ret; \ +-}) +-#endif +- +-#define RTMP_SEM_EVENT_INIT_LOCKED(_pSema) sema_init((_pSema), 0) +-#define RTMP_SEM_EVENT_INIT(_pSema) sema_init((_pSema), 1) +-#define RTMP_SEM_EVENT_WAIT(_pSema, _status) ((_status) = down_interruptible((_pSema))) +-#define RTMP_SEM_EVENT_UP(_pSema) up(_pSema) +- +-#ifdef KTHREAD_SUPPORT +-#define RTMP_WAIT_EVENT_INTERRUPTIBLE(_pAd, _pTask) \ +-{ \ +- wait_event_interruptible(_pTask->kthread_q, \ +- _pTask->kthread_running || kthread_should_stop()); \ +- _pTask->kthread_running = FALSE; \ +- if (kthread_should_stop()) \ +- { \ +- RTMP_SET_FLAG(_pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); \ +- break; \ +- } \ +-} +-#endif +- +-#ifdef KTHREAD_SUPPORT +-#define WAKE_UP(_pTask) \ +- do{ \ +- if ((_pTask)->kthread_task) \ +- { \ +- (_pTask)->kthread_running = TRUE; \ +- wake_up(&(_pTask)->kthread_q); \ +- } \ +- }while(0) +-#endif +- +-/*********************************************************************************** +- * OS Memory Access related data structure and definitions +- ***********************************************************************************/ +-#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) +- +-#define NdisMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) +-#define NdisCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length) +-#define NdisZeroMemory(Destination, Length) memset(Destination, 0, Length) +-#define NdisFillMemory(Destination, Length, Fill) memset(Destination, Fill, Length) +-#define NdisCmpMemory(Destination, Source, Length) memcmp(Destination, Source, Length) +-#define NdisEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) +-#define RTMPEqualMemory(Source1, Source2, Length) (!memcmp(Source1, Source2, Length)) +- +-#define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE) +-#define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA) +- +-#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) +- +- +-/*********************************************************************************** +- * OS task related data structure and definitions +- ***********************************************************************************/ +-#define RTMP_OS_MGMT_TASK_FLAGS CLONE_VM +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) +-typedef struct pid * THREAD_PID; +-#define THREAD_PID_INIT_VALUE NULL +-#define GET_PID(_v) find_get_pid((_v)) +-#define GET_PID_NUMBER(_v) pid_nr((_v)) +-#define CHECK_PID_LEGALITY(_pid) if (pid_nr((_pid)) >= 0) +-#define KILL_THREAD_PID(_A, _B, _C) kill_pid((_A), (_B), (_C)) +-#else +-typedef pid_t THREAD_PID; +-#define THREAD_PID_INIT_VALUE -1 +-#define GET_PID(_v) (_v) +-#define GET_PID_NUMBER(_v) (_v) +-#define CHECK_PID_LEGALITY(_pid) if ((_pid) >= 0) +-#define KILL_THREAD_PID(_A, _B, _C) kill_proc((_A), (_B), (_C)) +-#endif +- +-typedef struct tasklet_struct RTMP_NET_TASK_STRUCT; +-typedef struct tasklet_struct *PRTMP_NET_TASK_STRUCT; +- +- +-/*********************************************************************************** +- * Timer related definitions and data structures. +- **********************************************************************************/ +-#define OS_HZ HZ +- +-typedef struct timer_list NDIS_MINIPORT_TIMER; +-typedef struct timer_list RTMP_OS_TIMER; +-typedef void (*TIMER_FUNCTION)(unsigned long); +- +- +-#define OS_WAIT(_time) \ +-{ int _i; \ +- long _loop = ((_time)/(1000/OS_HZ)) > 0 ? ((_time)/(1000/OS_HZ)) : 1;\ +- wait_queue_head_t _wait; \ +- init_waitqueue_head(&_wait); \ +- for (_i=0; _i<(_loop); _i++) \ +- wait_event_interruptible_timeout(_wait, 0, ONE_TICK); } +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#define RTMP_TIME_AFTER(a,b) \ +- (typecheck(unsigned long, (unsigned long)a) && \ +- typecheck(unsigned long, (unsigned long)b) && \ +- ((long)(b) - (long)(a) < 0)) +- +-#define RTMP_TIME_AFTER_EQ(a,b) \ +- (typecheck(unsigned long, (unsigned long)a) && \ +- typecheck(unsigned long, (unsigned long)b) && \ +- ((long)(a) - (long)(b) >= 0)) +-#define RTMP_TIME_BEFORE(a,b) RTMP_TIME_AFTER_EQ(b,a) +-#else +-#define typecheck(type,x) \ +-({ type __dummy; \ +- typeof(x) __dummy2; \ +- (void)(&__dummy == &__dummy2); \ +- 1; \ +-}) +-#define RTMP_TIME_AFTER_EQ(a,b) \ +- (typecheck(unsigned long, (unsigned long)a) && \ +- typecheck(unsigned long, (unsigned long)b) && \ +- ((long)(a) - (long)(b) >= 0)) +-#define RTMP_TIME_BEFORE(a,b) RTMP_TIME_AFTER_EQ(b,a) +-#define RTMP_TIME_AFTER(a,b) time_after(a, b) +-#endif +- +-#define ONE_TICK 1 +- +-static inline void NdisGetSystemUpTime(ULONG *time) +-{ +- *time = jiffies; +-} +- +- +-/*********************************************************************************** +- * OS specific cookie data structure binding to RTMP_ADAPTER +- ***********************************************************************************/ +- +-struct os_cookie { +-#ifdef RTMP_MAC_PCI +- struct pci_dev *pci_dev; +- struct pci_dev *parent_pci_dev; +- USHORT DeviceID; +- dma_addr_t pAd_pa; +-#endif // RTMP_MAC_PCI // +- +- +- RTMP_NET_TASK_STRUCT rx_done_task; +- RTMP_NET_TASK_STRUCT mgmt_dma_done_task; +- RTMP_NET_TASK_STRUCT ac0_dma_done_task; +- RTMP_NET_TASK_STRUCT ac1_dma_done_task; +- RTMP_NET_TASK_STRUCT ac2_dma_done_task; +- RTMP_NET_TASK_STRUCT ac3_dma_done_task; +- /*RTMP_NET_TASK_STRUCT hcca_dma_done_task;*/ +- RTMP_NET_TASK_STRUCT tbtt_task; +-#ifdef RTMP_MAC_PCI +- RTMP_NET_TASK_STRUCT fifo_statistic_full_task; +-#endif // RTMP_MAC_PCI // +- +- +- +- unsigned long apd_pid; //802.1x daemon pid +- INT ioctl_if_type; +- INT ioctl_if; +-}; +- +-typedef struct os_cookie * POS_COOKIE; +- +- +- +-/*********************************************************************************** +- * OS debugging and printing related definitions and data structure +- ***********************************************************************************/ +-#define PRINT_MAC(addr) \ +- addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] +- +-#ifdef DBG +-extern ULONG RTDebugLevel; +- +-#define DBGPRINT_RAW(Level, Fmt) \ +-do{ \ +- if (Level <= RTDebugLevel) \ +- { \ +- printk Fmt; \ +- } \ +-}while(0) +- +-#define DBGPRINT(Level, Fmt) DBGPRINT_RAW(Level, Fmt) +- +- +-#define DBGPRINT_ERR(Fmt) \ +-{ \ +- printk("ERROR!!! "); \ +- printk Fmt; \ +-} +- +-#define DBGPRINT_S(Status, Fmt) \ +-{ \ +- printk Fmt; \ +-} +-#else +-#define DBGPRINT(Level, Fmt) +-#define DBGPRINT_RAW(Level, Fmt) +-#define DBGPRINT_S(Status, Fmt) +-#define DBGPRINT_ERR(Fmt) +-#endif +- +-#undef ASSERT +-#define ASSERT(x) \ +-{ \ +- if (!(x)) \ +- { \ +- printk(KERN_WARNING __FILE__ ":%d assert " #x "failed\n", __LINE__); \ +- } \ +-} +- +-void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); +- +- +-/********************************************************************************************************* +- The following code are not revised, temporary put it here. +- *********************************************************************************************************/ +- +- +-/*********************************************************************************** +- * Device DMA Access related definitions and data structures. +- **********************************************************************************/ +-#ifdef RTMP_MAC_PCI +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction); +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction); +- +-#define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ +- linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) +- +-#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) \ +- linux_pci_unmap_single(_handle, _ptr, _size, _dir) +- +-#define PCI_ALLOC_CONSISTENT(_pci_dev, _size, _ptr) \ +- pci_alloc_consistent(_pci_dev, _size, _ptr) +- +-#define PCI_FREE_CONSISTENT(_pci_dev, _size, _virtual_addr, _physical_addr) \ +- pci_free_consistent(_pci_dev, _size, _virtual_addr, _physical_addr) +- +-#define DEV_ALLOC_SKB(_length) \ +- dev_alloc_skb(_length) +-#endif // RTMP_MAC_PCI // +- +- +- +-/* +- * ULONG +- * RTMP_GetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- */ +-#define RTMP_GetPhysicalAddressLow(PhysicalAddress) (PhysicalAddress) +- +-/* +- * ULONG +- * RTMP_GetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- */ +-#define RTMP_GetPhysicalAddressHigh(PhysicalAddress) (0) +- +-/* +- * VOID +- * RTMP_SetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); +- */ +-#define RTMP_SetPhysicalAddressLow(PhysicalAddress, Value) \ +- PhysicalAddress = Value; +- +-/* +- * VOID +- * RTMP_SetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); +- */ +-#define RTMP_SetPhysicalAddressHigh(PhysicalAddress, Value) +- +-#define NdisMIndicateStatus(_w, _x, _y, _z) +- +- +- +-/*********************************************************************************** +- * Device Register I/O Access related definitions and data structures. +- **********************************************************************************/ +-#ifdef RTMP_MAC_PCI +-#if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0) +-//Patch for ASIC turst read/write bug, needs to remove after metel fix +-#define RTMP_IO_READ32(_A, _R, _pV) \ +-{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + (_R)))); \ +- (*_pV = SWAP32(*((UINT32 *)(_pV)))); \ +- } \ +-} +- +-#define RTMP_IO_READ8(_A, _R, _pV) \ +-{ \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readb((void *)((_A)->CSRBaseAddress + (_R)))); \ +-} +- +-#define RTMP_IO_WRITE32(_A, _R, _V) \ +-{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- UINT32 _Val; \ +- _Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- _Val = SWAP32(_V); \ +- writel(_Val, (void *)((_A)->CSRBaseAddress + (_R))); \ +- } \ +-} +- +-#define RTMP_IO_WRITE8(_A, _R, _V) \ +-{ \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writeb((_V), (PUCHAR)((_A)->CSRBaseAddress + (_R))); \ +-} +- +-#define RTMP_IO_WRITE16(_A, _R, _V) \ +-{ \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writew(SWAP16((_V)), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ +-} +-#else +-//Patch for ASIC turst read/write bug, needs to remove after metel fix +-#define RTMP_IO_READ32(_A, _R, _pV) \ +-{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + (_R)))); \ +- } \ +- else \ +- *_pV = 0; \ +-} +- +-#define RTMP_IO_FORCE_READ32(_A, _R, _pV) \ +-{ \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + (_R)))); \ +-} +- +-#define RTMP_IO_READ8(_A, _R, _pV) \ +-{ \ +- (*_pV = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0))); \ +- (*_pV = readb((void *)((_A)->CSRBaseAddress + (_R)))); \ +-} +- +-#define RTMP_IO_WRITE32(_A, _R, _V) \ +-{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writel((_V), (void *)((_A)->CSRBaseAddress + (_R))); \ +- } \ +-} +- +-#define RTMP_IO_FORCE_WRITE32(_A, _R, _V) \ +-{ \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writel(_V, (void *)((_A)->CSRBaseAddress + (_R))); \ +-} +- +- +- +-#if defined(BRCM_6358) || defined(RALINK_2880) || defined(RALINK_3052) +-#define RTMP_IO_WRITE8(_A, _R, _V) \ +-{ \ +- ULONG Val; \ +- UCHAR _i; \ +- _i = ((_R) & 0x3); \ +- Val = readl((void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ +- Val = Val & (~(0x000000ff << ((_i)*8))); \ +- Val = Val | ((ULONG)(_V) << ((_i)*8)); \ +- writel((Val), (void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ +-} +-#else +-#define RTMP_IO_WRITE8(_A, _R, _V) \ +-{ \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writeb((_V), (PUCHAR)((_A)->CSRBaseAddress + (_R))); \ +-} +-#endif // #if defined(BRCM_6358) || defined(RALINK_2880) // +- +-#define RTMP_IO_WRITE16(_A, _R, _V) \ +-{ \ +- UINT Val; \ +- Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ +-} +-#endif // #if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0) // +-#endif // RTMP_MAC_PCI // +- +- +- +-/*********************************************************************************** +- * Network Related data structure and marco definitions +- ***********************************************************************************/ +-#define PKTSRC_NDIS 0x7f +-#define PKTSRC_DRIVER 0x0f +- +- +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) +-#define RTMP_OS_NETDEV_SET_PRIV(_pNetDev, _pPriv) ((_pNetDev)->priv = (_pPriv)) +-#define RTMP_OS_NETDEV_GET_PRIV(_pNetDev) ((_pNetDev)->priv) +-#else +-#define RTMP_OS_NETDEV_SET_PRIV(_pNetDev, _pPriv) ((_pNetDev)->ml_priv = (_pPriv)) +-#define RTMP_OS_NETDEV_GET_PRIV(_pNetDev) ((_pNetDev)->ml_priv) +-#endif +-#define RTMP_OS_NETDEV_GET_DEVNAME(_pNetDev) ((_pNetDev)->name) +-#define RTMP_OS_NETDEV_GET_PHYADDR(_PNETDEV) ((_PNETDEV)->dev_addr) +- +-#define RTMP_OS_NETDEV_START_QUEUE(_pNetDev) netif_start_queue((_pNetDev)) +-#define RTMP_OS_NETDEV_STOP_QUEUE(_pNetDev) netif_stop_queue((_pNetDev)) +-#define RTMP_OS_NETDEV_WAKE_QUEUE(_pNetDev) netif_wake_queue((_pNetDev)) +-#define RTMP_OS_NETDEV_CARRIER_OFF(_pNetDev) netif_carrier_off((_pNetDev)) +- +-#define QUEUE_ENTRY_TO_PACKET(pEntry) \ +- (PNDIS_PACKET)(pEntry) +- +-#define PACKET_TO_QUEUE_ENTRY(pPacket) \ +- (PQUEUE_ENTRY)(pPacket) +- +-#ifdef CONFIG_5VT_ENHANCE +-#define BRIDGE_TAG 0x35564252 // depends on 5VT define in br_input.c +-#endif +- +-#define GET_SG_LIST_FROM_PACKET(_p, _sc) \ +- rt_get_sg_list_from_packet(_p, _sc) +- +-#define RELEASE_NDIS_PACKET(_pAd, _pPacket, _Status) \ +-{ \ +- RTMPFreeNdisPacket(_pAd, _pPacket); \ +-} +- +-/* +- * packet helper +- * - convert internal rt packet to os packet or +- * os packet to rt packet +- */ +-#define RTPKT_TO_OSPKT(_p) ((struct sk_buff *)(_p)) +-#define OSPKT_TO_RTPKT(_p) ((PNDIS_PACKET)(_p)) +- +-#define GET_OS_PKT_DATAPTR(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->data) +-#define SET_OS_PKT_DATAPTR(_pkt, _dataPtr) \ +- (RTPKT_TO_OSPKT(_pkt)->data) = (_dataPtr) +- +-#define GET_OS_PKT_LEN(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->len) +-#define SET_OS_PKT_LEN(_pkt, _len) \ +- (RTPKT_TO_OSPKT(_pkt)->len) = (_len) +- +-#define GET_OS_PKT_DATATAIL(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->tail) +-#define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ +- ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len)) +- +-#define GET_OS_PKT_HEAD(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->head) +- +-#define GET_OS_PKT_END(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->end) +- +-#define GET_OS_PKT_NETDEV(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->dev) +-#define SET_OS_PKT_NETDEV(_pkt, _pNetDev) \ +- (RTPKT_TO_OSPKT(_pkt)->dev) = (_pNetDev) +- +-#define GET_OS_PKT_TYPE(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)) +- +-#define GET_OS_PKT_NEXT(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->next) +- +- +-#define OS_PKT_CLONED(_pkt) skb_cloned(RTPKT_TO_OSPKT(_pkt)) +- +-#define OS_NTOHS(_Val) \ +- (ntohs(_Val)) +-#define OS_HTONS(_Val) \ +- (htons(_Val)) +-#define OS_NTOHL(_Val) \ +- (ntohl(_Val)) +-#define OS_HTONL(_Val) \ +- (htonl(_Val)) +- +-#define CB_OFF 10 +- +-// User Priority +-#define RTMP_SET_PACKET_UP(_p, _prio) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0] = _prio) +-#define RTMP_GET_PACKET_UP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0]) +- +-// Fragment # +-#define RTMP_SET_PACKET_FRAGMENTS(_p, _num) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+1] = _num) +-#define RTMP_GET_PACKET_FRAGMENTS(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+1]) +- +-// 0x0 ~0x7f: TX to AP's own BSS which has the specified AID. if AID>127, set bit 7 in RTMP_SET_PACKET_EMACTAB too. +-//(this value also as MAC(on-chip WCID) table index) +-// 0x80~0xff: TX to a WDS link. b0~6: WDS index +-#define RTMP_SET_PACKET_WCID(_p, _wdsidx) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2] = _wdsidx) +-#define RTMP_GET_PACKET_WCID(_p) ((UCHAR)(RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2])) +- +-// 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet +-#define RTMP_SET_PACKET_SOURCE(_p, _pktsrc) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+3] = _pktsrc) +-#define RTMP_GET_PACKET_SOURCE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+3]) +- +-// RTS/CTS-to-self protection method +-#define RTMP_SET_PACKET_RTS(_p, _num) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+4] = _num) +-#define RTMP_GET_PACKET_RTS(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+4]) +-// see RTMP_S(G)ET_PACKET_EMACTAB +- +-// TX rate index +-#define RTMP_SET_PACKET_TXRATE(_p, _rate) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+5] = _rate) +-#define RTMP_GET_PACKET_TXRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+5]) +- +-// From which Interface +-#define RTMP_SET_PACKET_IF(_p, _ifdx) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+6] = _ifdx) +-#define RTMP_GET_PACKET_IF(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+6]) +-#define RTMP_SET_PACKET_NET_DEVICE_MBSSID(_p, _bss) RTMP_SET_PACKET_IF((_p), (_bss)) +-#define RTMP_SET_PACKET_NET_DEVICE_WDS(_p, _bss) RTMP_SET_PACKET_IF((_p), ((_bss) + MIN_NET_DEVICE_FOR_WDS)) +-#define RTMP_SET_PACKET_NET_DEVICE_APCLI(_p, _idx) RTMP_SET_PACKET_IF((_p), ((_idx) + MIN_NET_DEVICE_FOR_APCLI)) +-#define RTMP_SET_PACKET_NET_DEVICE_MESH(_p, _idx) RTMP_SET_PACKET_IF((_p), ((_idx) + MIN_NET_DEVICE_FOR_MESH)) +-#define RTMP_GET_PACKET_NET_DEVICE_MBSSID(_p) RTMP_GET_PACKET_IF((_p)) +-#define RTMP_GET_PACKET_NET_DEVICE(_p) RTMP_GET_PACKET_IF((_p)) +- +-#define RTMP_SET_PACKET_MOREDATA(_p, _morebit) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7] = _morebit) +-#define RTMP_GET_PACKET_MOREDATA(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7]) +- +- +- +- +- +-// +-// Sepcific Pakcet Type definition +-// +-#define RTMP_PACKET_SPECIFIC_CB_OFFSET 11 +- +-#define RTMP_PACKET_SPECIFIC_DHCP 0x01 +-#define RTMP_PACKET_SPECIFIC_EAPOL 0x02 +-#define RTMP_PACKET_SPECIFIC_IPV4 0x04 +-#define RTMP_PACKET_SPECIFIC_WAI 0x08 +-#define RTMP_PACKET_SPECIFIC_VLAN 0x10 +-#define RTMP_PACKET_SPECIFIC_LLCSNAP 0x20 +- +-//Specific +-#define RTMP_SET_PACKET_SPECIFIC(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] = _flg) +- +-//DHCP +-#define RTMP_SET_PACKET_DHCP(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_DHCP); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_DHCP); \ +- }while(0) +-#define RTMP_GET_PACKET_DHCP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_DHCP) +- +-//EAPOL +-#define RTMP_SET_PACKET_EAPOL(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_EAPOL); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_EAPOL); \ +- }while(0) +-#define RTMP_GET_PACKET_EAPOL(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_EAPOL) +- +-//WAI +-#define RTMP_SET_PACKET_WAI(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_WAI); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_WAI); \ +- }while(0) +-#define RTMP_GET_PACKET_WAI(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_WAI) +- +-#define RTMP_GET_PACKET_LOWRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & (RTMP_PACKET_SPECIFIC_EAPOL | RTMP_PACKET_SPECIFIC_DHCP | RTMP_PACKET_SPECIFIC_WAI)) +- +-//VLAN +-#define RTMP_SET_PACKET_VLAN(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_VLAN); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_VLAN); \ +- }while(0) +-#define RTMP_GET_PACKET_VLAN(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_VLAN) +- +-//LLC/SNAP +-#define RTMP_SET_PACKET_LLCSNAP(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_LLCSNAP); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_LLCSNAP); \ +- }while(0) +- +-#define RTMP_GET_PACKET_LLCSNAP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_LLCSNAP) +- +-// IP +-#define RTMP_SET_PACKET_IPV4(_p, _flg) \ +- do{ \ +- if (_flg) \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_IPV4); \ +- else \ +- (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_IPV4); \ +- }while(0) +- +-#define RTMP_GET_PACKET_IPV4(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_IPV4) +- +- +-// If this flag is set, it indicates that this EAPoL frame MUST be clear. +-#define RTMP_SET_PACKET_CLEAR_EAP_FRAME(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12] = _flg) +-#define RTMP_GET_PACKET_CLEAR_EAP_FRAME(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12]) +- +- +- +-/* use bit3 of cb[CB_OFF+16] */ +- +-#define RTMP_SET_PACKET_5VT(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22] = _flg) +-#define RTMP_GET_PACKET_5VT(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22]) +- +-#ifdef INF_AMAZON_SE +-/* [CB_OFF+28], 1B, Iverson patch for WMM A5-T07 ,WirelessStaToWirelessSta do not bulk out aggregate */ +-#define RTMP_SET_PACKET_NOBULKOUT(_p, _morebit) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+28] = _morebit) +-#define RTMP_GET_PACKET_NOBULKOUT(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+28]) +-#endif // INF_AMAZON_SE // +-/* Max skb->cb = 48B = [CB_OFF+38] */ +- +- +- +-/*********************************************************************************** +- * Other function prototypes definitions +- ***********************************************************************************/ +-void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); +-int rt28xx_packet_xmit(struct sk_buff *skb); +- +- +-void FlashWrite(UCHAR * p, ULONG a, ULONG b); +-void FlashRead(UCHAR * p, ULONG a, ULONG b); +- +-#if LINUX_VERSION_CODE <= 0x20402 // Red Hat 7.1 +-struct net_device *alloc_netdev(int sizeof_priv, const char *mask, void (*setup)(struct net_device *)); +-#endif // LINUX_VERSION_CODE // +- +- +-#ifdef RTMP_MAC_PCI +-/* function declarations */ +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#define IRQ_HANDLE_TYPE irqreturn_t +-#else +-#define IRQ_HANDLE_TYPE void +-#endif +- +-IRQ_HANDLE_TYPE +-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) +-rt2860_interrupt(int irq, void *dev_instance); +-#else +-rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs); +-#endif +- +-#endif // RTMP_MAC_PCI // +- +-INT rt28xx_ioctl( +- IN PNET_DEV net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd); +- +- +-#ifdef CONFIG_STA_SUPPORT +-INT rt28xx_sta_ioctl( +- IN PNET_DEV net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd); +-#endif // CONFIG_STA_SUPPORT // +- +-extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char *buf); +-extern int ra_mtd_read(int num, loff_t from, size_t len, u_char *buf); +- +-#endif // __RT_LINUX_H__ // +diff --git a/drivers/staging/rt3090/rt_main_dev.c b/drivers/staging/rt3090/rt_main_dev.c +deleted file mode 100644 +index 3307a5f..0000000 +--- a/drivers/staging/rt3090/rt_main_dev.c ++++ /dev/null +@@ -1,897 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_main_dev.c +- +- Abstract: +- Create and register network interface. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "rt_config.h" +- +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-UINT32 CW_MAX_IN_BITS; +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +-/*---------------------------------------------------------------------*/ +-/* Private Variables Used */ +-/*---------------------------------------------------------------------*/ +- +-PSTRING mac = ""; // default 00:00:00:00:00:00 +-PSTRING hostname = ""; // default CMPC +-#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,12) +-MODULE_PARM (mac, "s"); +-#else +-module_param (mac, charp, 0); +-#endif +-MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr"); +- +- +-/*---------------------------------------------------------------------*/ +-/* Prototypes of Functions Used */ +-/*---------------------------------------------------------------------*/ +- +-// public function prototype +-int rt28xx_close(IN struct net_device *net_dev); +-int rt28xx_open(struct net_device *net_dev); +- +-// private function prototype +-static INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev); +- +- +-static struct net_device_stats *RT28xx_get_ether_stats( +- IN struct net_device *net_dev); +- +-/* +-======================================================================== +-Routine Description: +- Close raxx interface. +- +-Arguments: +- *net_dev the raxx interface pointer +- +-Return Value: +- 0 Open OK +- otherwise Open Fail +- +-Note: +- 1. if open fail, kernel will not call the close function. +- 2. Free memory for +- (1) Mlme Memory Handler: MlmeHalt() +- (2) TX & RX: RTMPFreeTxRxRingMemory() +- (3) BA Reordering: ba_reordering_resource_release() +-======================================================================== +-*/ +-int MainVirtualIF_close(IN struct net_device *net_dev) +-{ +- RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- // Sanity check for pAd +- if (pAd == NULL) +- return 0; // close ok +- +- netif_carrier_off(pAd->net_dev); +- netif_stop_queue(pAd->net_dev); +- +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- BOOLEAN Cancelled; +-#ifdef QOS_DLS_SUPPORT +- // send DLS-TEAR_DOWN message, +- if (pAd->CommonCfg.bDLSCapable) +- { +- UCHAR i; +- +- // tear down local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- } +- } +- +- // tear down peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- } +- } +- RTMP_MLME_HANDLER(pAd); +- } +-#endif // QOS_DLS_SUPPORT // +- +- if (INFRA_ON(pAd) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- +- if (MsgElem) +- { +- COPY_MAC_ADDR(DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DEAUTH_STA_LEAVING; +- +- MsgElem->Machine = ASSOC_STATE_MACHINE; +- MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(MsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- // Prevent to connect AP again in STAMlmePeriodicExec +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- MlmeDisassocReqAction(pAd, MsgElem); +- kfree(MsgElem); +- } +- +- RTMPusecDelay(1000); +- } +- +- RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled); +- RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled); +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- // send wireless event to wpa_supplicant for infroming interface down. +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_INTERFACE_DOWN, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- +- } +-#endif // CONFIG_STA_SUPPORT // +- +- VIRTUAL_IF_DOWN(pAd); +- +- RT_MOD_DEC_USE_COUNT(); +- +- return 0; // close ok +-} +- +-/* +-======================================================================== +-Routine Description: +- Open raxx interface. +- +-Arguments: +- *net_dev the raxx interface pointer +- +-Return Value: +- 0 Open OK +- otherwise Open Fail +- +-Note: +- 1. if open fail, kernel will not call the close function. +- 2. Free memory for +- (1) Mlme Memory Handler: MlmeHalt() +- (2) TX & RX: RTMPFreeTxRxRingMemory() +- (3) BA Reordering: ba_reordering_resource_release() +-======================================================================== +-*/ +-int MainVirtualIF_open(IN struct net_device *net_dev) +-{ +- RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- // Sanity check for pAd +- if (pAd == NULL) +- return 0; // close ok +- +- if (VIRTUAL_IF_UP(pAd) != 0) +- return -1; +- +- // increase MODULE use count +- RT_MOD_INC_USE_COUNT(); +- +- netif_start_queue(net_dev); +- netif_carrier_on(net_dev); +- netif_wake_queue(net_dev); +- +- return 0; +-} +- +-/* +-======================================================================== +-Routine Description: +- Close raxx interface. +- +-Arguments: +- *net_dev the raxx interface pointer +- +-Return Value: +- 0 Open OK +- otherwise Open Fail +- +-Note: +- 1. if open fail, kernel will not call the close function. +- 2. Free memory for +- (1) Mlme Memory Handler: MlmeHalt() +- (2) TX & RX: RTMPFreeTxRxRingMemory() +- (3) BA Reordering: ba_reordering_resource_release() +-======================================================================== +-*/ +-int rt28xx_close(IN PNET_DEV dev) +-{ +- struct net_device * net_dev = (struct net_device *)dev; +- RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- BOOLEAN Cancelled; +- UINT32 i = 0; +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); +- +- Cancelled = FALSE; +- // Sanity check for pAd +- if (pAd == NULL) +- return 0; // close ok +- +- +- +-#ifdef WDS_SUPPORT +- WdsDown(pAd); +-#endif // WDS_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +-#ifdef RTMP_MAC_PCI +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_CLOSE); +-#endif // RTMP_MAC_PCI // +- +- // If dirver doesn't wake up firmware here, +- // NICLoadFirmware will hang forever when interface is up again. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- AsicForceWakeup(pAd, TRUE); +- } +- +- +- MlmeRadioOff(pAd); +-#ifdef RTMP_MAC_PCI +- pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // +- } +-#endif // CONFIG_STA_SUPPORT // +- +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- +- for (i = 0 ; i < NUM_OF_TX_RING; i++) +- { +- while (pAd->DeQueueRunning[i] == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Waiting for TxQueue[%d] done..........\n", i)); +- RTMPusecDelay(1000); +- } +- } +- +- +- +- // Stop Mlme state machine +- MlmeHalt(pAd); +- +- // Close net tasklets +- RtmpNetTaskExit(pAd); +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- MacTableReset(pAd); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- +- MeasureReqTabExit(pAd); +- TpcReqTabExit(pAd); +- +- +- // Close kernel threads +- RtmpMgmtTaskExit(pAd); +- +-#ifdef RTMP_MAC_PCI +- { +- BOOLEAN brc; +- // ULONG Value; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) +- { +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- } +- +- // Receive packets to clear DMA index after disable interrupt. +- //RTMPHandleRxDoneInterrupt(pAd); +- // put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all +- // register access before Radio off. +- +- +- brc=RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); +- +-//In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff +- pAd->bPCIclkOff = FALSE; +- +- if (brc==FALSE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __FUNCTION__)); +- } +- } +- +- +-/* +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) +- { +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- } +- +- // Disable Rx, register value supposed will remain after reset +- NICIssueReset(pAd); +-*/ +-#endif // RTMP_MAC_PCI // +- +- // Free IRQ +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +-#ifdef RTMP_MAC_PCI +- // Deregister interrupt function +- RTMP_IRQ_RELEASE(net_dev) +-#endif // RTMP_MAC_PCI // +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); +- } +- +- // Free Ring or USB buffers +- RTMPFreeTxRxRingMemory(pAd); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +- +-#ifdef DOT11_N_SUPPORT +- // Free BA reorder resource +- ba_reordering_resource_release(pAd); +-#endif // DOT11_N_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP); +- +-/*+++Modify by woody to solve the bulk fail+++*/ +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- } +-#endif // CONFIG_STA_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt28xx_close\n")); +- return 0; // close ok +-} /* End of rt28xx_close */ +- +- +-/* +-======================================================================== +-Routine Description: +- Open raxx interface. +- +-Arguments: +- *net_dev the raxx interface pointer +- +-Return Value: +- 0 Open OK +- otherwise Open Fail +- +-Note: +-======================================================================== +-*/ +-int rt28xx_open(IN PNET_DEV dev) +-{ +- struct net_device * net_dev = (struct net_device *)dev; +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- int retval = 0; +- //POS_COOKIE pObj; +- +- +- // Sanity check for pAd +- if (pAd == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -1; +- } +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +- if (pAd->OpMode == OPMODE_AP) +- { +- CW_MAX_IN_BITS = 6; +- } +- else if (pAd->OpMode == OPMODE_STA) +- { +- CW_MAX_IN_BITS = 10; +- } +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +-#if WIRELESS_EXT >= 12 +- if (net_dev->priv_flags == INT_MAIN) +- { +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +- if (pAd->OpMode == OPMODE_AP) +- net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_ap_iw_handler_def; +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def; +-#endif // CONFIG_STA_SUPPORT // +- } +-#endif // WIRELESS_EXT >= 12 // +- +- // Request interrupt service routine for PCI device +- // register the interrupt routine with the os +- RTMP_IRQ_REQUEST(net_dev); +- +- // Init IRQ parameters stored in pAd +- RTMP_IRQ_INIT(pAd); +- +- // Chip & other init +- if (rt28xx_init(pAd, mac, hostname) == FALSE) +- goto err; +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- // Enable Interrupt +- RTMP_IRQ_ENABLE(pAd); +- +- // Now Enable RxTx +- RTMPEnableRxTx(pAd); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP); +- +- { +- UINT32 reg = 0; +- RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts +- printk("0x1300 = %08x\n", reg); +- } +- +- { +-// u32 reg; +-// UINT8 byte; +-// u16 tmp; +- +-// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); +- +-// tmp = 0x0805; +-// reg = (reg & 0xffff0000) | tmp; +-// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); +- +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef RTMP_MAC_PCI +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- RTMPInitPCIeLinkCtrlValue(pAd); +-#endif // RTMP_MAC_PCI // +-#endif // CONFIG_STA_SUPPORT // +- +- return (retval); +- +-err: +-//+++Add by shiang, move from rt28xx_init() to here. +- RTMP_IRQ_RELEASE(net_dev); +-//---Add by shiang, move from rt28xx_init() to here. +- return (-1); +-} /* End of rt28xx_open */ +- +-static const struct net_device_ops rt3090_netdev_ops = { +- .ndo_open = MainVirtualIF_open, +- .ndo_stop = MainVirtualIF_close, +- .ndo_do_ioctl = rt28xx_ioctl, +- .ndo_get_stats = RT28xx_get_ether_stats, +- .ndo_set_mac_address = eth_mac_addr, +- .ndo_change_mtu = eth_change_mtu, +-#ifdef IKANOS_VX_1X0 +- .ndo_start_xmit = IKANOS_DataFramesTx, +-#else +- .ndo_start_xmit = rt28xx_send_packets, +-#endif +-}; +- +-PNET_DEV RtmpPhyNetDevInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_OS_NETDEV_OP_HOOK *pNetDevHook) +-{ +- struct net_device *net_dev = NULL; +-// NDIS_STATUS Status; +- +- net_dev = RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), INF_MAIN_DEV_NAME); +- if (net_dev == NULL) +- { +- printk("RtmpPhyNetDevInit(): creation failed for main physical net device!\n"); +- return NULL; +- } +- +- NdisZeroMemory((unsigned char *)pNetDevHook, sizeof(RTMP_OS_NETDEV_OP_HOOK)); +- pNetDevHook->netdev_ops = &rt3090_netdev_ops; +- pNetDevHook->priv_flags = INT_MAIN; +- pNetDevHook->needProtcted = FALSE; +- +- RTMP_OS_NETDEV_SET_PRIV(net_dev, pAd); +- //net_dev->priv = (PVOID)pAd; +- pAd->net_dev = net_dev; +- +- +- +-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) +- SET_MODULE_OWNER(net_dev); +-#endif +- +- netif_stop_queue(net_dev); +- +- return net_dev; +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- The entry point for Linux kernel sent packet to our driver. +- +-Arguments: +- sk_buff *skb the pointer refer to a sk_buffer. +- +-Return Value: +- 0 +- +-Note: +- This function is the entry point of Tx Path for Os delivery packet to +- our driver. You only can put OS-depened & STA/AP common handle procedures +- in here. +-======================================================================== +-*/ +-int rt28xx_packet_xmit(struct sk_buff *skb) +-{ +- struct net_device *net_dev = skb->dev; +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- int status = 0; +- PNDIS_PACKET pPacket = (PNDIS_PACKET) skb; +- +- /* RT2870STA does this in RTMPSendPackets() */ +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_RESOURCES); +- return 0; +- } +-#endif // RALINK_ATE // +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- // Drop send request since we are in monitor mode +- if (MONITOR_ON(pAd)) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- goto done; +- } +- } +-#endif // CONFIG_STA_SUPPORT // +- +- // EapolStart size is 18 +- if (skb->len < 14) +- { +- //printk("bad packet size: %d\n", pkt->len); +- hex_dump("bad packet", skb->data, skb->len); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- goto done; +- } +- +- +- +- RTMP_SET_PACKET_5VT(pPacket, 0); +-// MiniportMMRequest(pAd, pkt->data, pkt->len); +-#ifdef CONFIG_5VT_ENHANCE +- if (*(int*)(skb->cb) == BRIDGE_TAG) { +- RTMP_SET_PACKET_5VT(pPacket, 1); +- } +-#endif +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- +- STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1); +- } +- +-#endif // CONFIG_STA_SUPPORT // +- +- status = 0; +-done: +- +- return status; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Send a packet to WLAN. +- +-Arguments: +- skb_p points to our adapter +- dev_p which WLAN network interface +- +-Return Value: +- 0: transmit successfully +- otherwise: transmit fail +- +-Note: +-======================================================================== +-*/ +-static int rt28xx_send_packets( +- IN struct sk_buff *skb_p, +- IN struct net_device *net_dev) +-{ +- RTMP_ADAPTER *pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- if (!(net_dev->flags & IFF_UP)) +- { +- RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE); +- return 0; +- } +- +- NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15); +- RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); +- +- return rt28xx_packet_xmit(skb_p); +-} +- +- +-#if WIRELESS_EXT >= 12 +-// This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n")); +- +- pAd->iw_stats.status = 0; // Status - device dependent for now +- +- // link quality +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- pAd->iw_stats.qual.qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10); +-#endif // CONFIG_STA_SUPPORT // +- +- if(pAd->iw_stats.qual.qual > 100) +- pAd->iw_stats.qual.qual = 100; +- +-#ifdef CONFIG_STA_SUPPORT +- if (pAd->OpMode == OPMODE_STA) +- { +- pAd->iw_stats.qual.level = +- RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, +- pAd->StaCfg.RssiSample.LastRssi1, +- pAd->StaCfg.RssiSample.LastRssi2); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm) +- +- pAd->iw_stats.qual.noise += 256 - 143; +- pAd->iw_stats.qual.updated = 1; // Flags to know if updated +-#ifdef IW_QUAL_DBM +- pAd->iw_stats.qual.updated |= IW_QUAL_DBM; // Level + Noise are dBm +-#endif // IW_QUAL_DBM // +- +- pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid +- pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe +- +- DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n")); +- return &pAd->iw_stats; +-} +-#endif // WIRELESS_EXT // +- +- +-void tbtt_tasklet(unsigned long data) +-{ +-//#define MAX_TX_IN_TBTT (16) +- +-} +- +-INT rt28xx_ioctl( +- IN PNET_DEV net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd) +-{ +- RTMP_ADAPTER *pAd = NULL; +- INT ret = 0; +- +- pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- if (pAd == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- ret = rt28xx_sta_ioctl(net_dev, rq, cmd); +- } +-#endif // CONFIG_STA_SUPPORT // +- +- return ret; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- return ethernet statistics counter +- +- Arguments: +- net_dev Pointer to net_device +- +- Return Value: +- net_device_stats* +- +- Note: +- +- ======================================================================== +-*/ +-static struct net_device_stats *RT28xx_get_ether_stats( +- IN struct net_device *net_dev) +-{ +- RTMP_ADAPTER *pAd = NULL; +- +- if (net_dev) +- pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- +- if (pAd) +- { +- +- pAd->stats.rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; +- pAd->stats.tx_packets = pAd->WlanCounters.TransmittedFragmentCount.QuadPart; +- +- pAd->stats.rx_bytes = pAd->RalinkCounters.ReceivedByteCount; +- pAd->stats.tx_bytes = pAd->RalinkCounters.TransmittedByteCount; +- +- pAd->stats.rx_errors = pAd->Counters8023.RxErrors; +- pAd->stats.tx_errors = pAd->Counters8023.TxErrors; +- +- pAd->stats.rx_dropped = 0; +- pAd->stats.tx_dropped = 0; +- +- pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received +- pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets +- +- pAd->stats.rx_length_errors = 0; +- pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow +- pAd->stats.rx_crc_errors = 0;//pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error +- pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error +- pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun +- pAd->stats.rx_missed_errors = 0; // receiver missed packet +- +- // detailed tx_errors +- pAd->stats.tx_aborted_errors = 0; +- pAd->stats.tx_carrier_errors = 0; +- pAd->stats.tx_fifo_errors = 0; +- pAd->stats.tx_heartbeat_errors = 0; +- pAd->stats.tx_window_errors = 0; +- +- // for cslip etc +- pAd->stats.rx_compressed = 0; +- pAd->stats.tx_compressed = 0; +- +- return &pAd->stats; +- } +- else +- return NULL; +-} +- +- +-BOOLEAN RtmpPhyNetDevExit( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV net_dev) +-{ +- +- +- +-#ifdef INF_AMAZON_PPA +- if (ppa_hook_directpath_register_dev_fn && pAd->PPAEnable==TRUE) +- { +- UINT status; +- status=ppa_hook_directpath_register_dev_fn(&pAd->g_if_id, pAd->net_dev, NULL, PPA_F_DIRECTPATH_DEREGISTER); +- printk("unregister PPA:g_if_id=%d status=%d\n",pAd->g_if_id,status); +- } +- kfree(pAd->pDirectpathCb); +-#endif // INF_AMAZON_PPA // +- +- // Unregister network device +- if (net_dev != NULL) +- { +- printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); +- RtmpOSNetDevDetach(net_dev); +- } +- +- return TRUE; +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Allocate memory for adapter control block. +- +-Arguments: +- pAd Pointer to our adapter +- +-Return Value: +- NDIS_STATUS_SUCCESS +- NDIS_STATUS_FAILURE +- NDIS_STATUS_RESOURCES +- +-Note: +-======================================================================== +-*/ +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd) +-{ +- +- *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); +- +- if (*ppAd) +- { +- NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +- ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle; +- return (NDIS_STATUS_SUCCESS); +- } else { +- return (NDIS_STATUS_FAILURE); +- } +-} +diff --git a/drivers/staging/rt3090/rt_pci_rbus.c b/drivers/staging/rt3090/rt_pci_rbus.c +deleted file mode 100644 +index 2991319..0000000 +--- a/drivers/staging/rt3090/rt_pci_rbus.c ++++ /dev/null +@@ -1,989 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_pci_rbus.c +- +- Abstract: +- Create and register network interface. +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "rt_config.h" +-#include +- +- +-IRQ_HANDLE_TYPE +-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) +-rt2860_interrupt(int irq, void *dev_instance); +-#else +-rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs); +-#endif +- +- +-static void rx_done_tasklet(unsigned long data); +-static void mgmt_dma_done_tasklet(unsigned long data); +-static void ac0_dma_done_tasklet(unsigned long data); +-static void ac1_dma_done_tasklet(unsigned long data); +-static void ac2_dma_done_tasklet(unsigned long data); +-static void ac3_dma_done_tasklet(unsigned long data); +-/*static void hcca_dma_done_tasklet(unsigned long data);*/ +-static void fifo_statistic_full_tasklet(unsigned long data); +- +- +- +-/*---------------------------------------------------------------------*/ +-/* Symbol & Macro Definitions */ +-/*---------------------------------------------------------------------*/ +-#define RT2860_INT_RX_DLY (1<<0) // bit 0 +-#define RT2860_INT_TX_DLY (1<<1) // bit 1 +-#define RT2860_INT_RX_DONE (1<<2) // bit 2 +-#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 +-#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 +-#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 +-#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 +-#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 +-#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 +-#ifdef TONE_RADAR_DETECT_SUPPORT +-#define RT2860_INT_TONE_RADAR (1<<20) // bit 20 +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +-#define INT_RX RT2860_INT_RX_DONE +- +-#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_MGMT_DLY RT2860_INT_MGMT_DONE +-#ifdef TONE_RADAR_DETECT_SUPPORT +-#define INT_TONE_RADAR (RT2860_INT_TONE_RADAR) +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +- +-/*************************************************************************** +- * +- * Interface-depended memory allocation/Free related procedures. +- * Mainly for Hardware TxDesc/RxDesc/MgmtDesc, DMA Memory for TxData/RxData, etc., +- * +- **************************************************************************/ +-// Function for TxDesc Memory allocation. +-void RTMP_AllocateTxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +- +-// Function for MgmtDesc Memory allocation. +-void RTMP_AllocateMgmtDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +- +-// Function for RxDesc Memory allocation. +-void RTMP_AllocateRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +- +-} +- +- +-// Function for free allocated Desc Memory. +-void RTMP_FreeDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); +-} +- +- +-// Function for TxData DMA Memory allocation. +-void RTMP_AllocateFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +-} +- +- +-void RTMP_FreeFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); +-} +- +- +-/* +- * FUNCTION: Allocate a common buffer for DMA +- * ARGUMENTS: +- * AdapterHandle: AdapterHandle +- * Length: Number of bytes to allocate +- * Cached: Whether or not the memory can be cached +- * VirtualAddress: Pointer to memory is returned here +- * PhysicalAddress: Physical address corresponding to virtual address +- */ +-void RTMP_AllocateSharedMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); +-} +- +- +-/* +- * FUNCTION: Allocate a packet buffer for DMA +- * ARGUMENTS: +- * AdapterHandle: AdapterHandle +- * Length: Number of bytes to allocate +- * Cached: Whether or not the memory can be cached +- * VirtualAddress: Pointer to memory is returned here +- * PhysicalAddress: Physical address corresponding to virtual address +- * Notes: +- * Cached is ignored: always cached memory +- */ +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) +-{ +- struct sk_buff *pkt; +- +- pkt = dev_alloc_skb(Length); +- +- if (pkt == NULL) { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate rx %ld size packet\n",Length)); +- } +- +- if (pkt) { +- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- *VirtualAddress = (PVOID) pkt->data; +-//#ifdef CONFIG_5VT_ENHANCE +-// *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, 1600, PCI_DMA_FROMDEVICE); +-//#else +- *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE); +-//#endif +- } else { +- *VirtualAddress = (PVOID) NULL; +- *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; +- } +- +- return (PNDIS_PACKET) pkt; +-} +- +- +-VOID Invalid_Remaining_Packet( +- IN PRTMP_ADAPTER pAd, +- IN ULONG VirtualAddress) +-{ +- NDIS_PHYSICAL_ADDRESS PhysicalAddress; +- +- PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE); +-} +- +- +-int RtmpOSIRQRequest(IN struct net_device *net_dev) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)(RTMP_OS_NETDEV_GET_PRIV(net_dev)); +- int retval = 0; +- +- ASSERT(pAd); +- +- if (pAd->infType != RTMP_DEV_INF_RBUS) +- { +- POS_COOKIE _pObj = (POS_COOKIE)(pAd->OS_Cookie); +- RTMP_MSI_ENABLE(pAd); +- retval = request_irq(_pObj->pci_dev->irq, rt2860_interrupt, SA_SHIRQ, (net_dev)->name, (net_dev)); +- if (retval != 0) +- printk("RT2860: request_irq ERROR(%d)\n", retval); +- } +- else +- { +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) +- if ((retval = request_irq(net_dev->irq, rt2860_interrupt, IRQF_SHARED, net_dev->name ,net_dev))) +-#else +- if ((retval = request_irq(net_dev->irq,rt2860_interrupt, SA_INTERRUPT, net_dev->name ,net_dev))) +-#endif +- { +- printk("RT2860: request_irq ERROR(%d)\n", retval); +- } +- } +- +- return retval; +- +-} +- +- +-int RtmpOSIRQRelease(IN struct net_device *net_dev) +-{ +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)(RTMP_OS_NETDEV_GET_PRIV(net_dev)); +- +- ASSERT(pAd); +- if (pAd->infType != RTMP_DEV_INF_RBUS) +- { +- POS_COOKIE pObj = (POS_COOKIE)(pAd->OS_Cookie); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- synchronize_irq(pObj->pci_dev->irq); +-#endif +- free_irq(pObj->pci_dev->irq, (net_dev)); +- RTMP_MSI_DISABLE(pAd); +- } +- else +- { +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- synchronize_irq(net_dev->irq); +-#endif +- free_irq(net_dev->irq, (net_dev)); +- } +- +- return 0; +-} +- +- +-NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER *pAd) +-{ +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd); +- /*tasklet_init(&pObj->hcca_dma_done_task, hcca_dma_done_tasklet, (unsigned long)pAd);*/ +- tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd); +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) +-{ +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- tasklet_kill(&pObj->rx_done_task); +- tasklet_kill(&pObj->mgmt_dma_done_task); +- tasklet_kill(&pObj->ac0_dma_done_task); +- tasklet_kill(&pObj->ac1_dma_done_task); +- tasklet_kill(&pObj->ac2_dma_done_task); +- tasklet_kill(&pObj->ac3_dma_done_task); +- /*tasklet_kill(&pObj->hcca_dma_done_task);*/ +- tasklet_kill(&pObj->tbtt_task); +- tasklet_kill(&pObj->fifo_statistic_full_task); +-} +- +- +-NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER *pAd) +-{ +- +- +- return NDIS_STATUS_SUCCESS; +-} +- +- +-/* +-======================================================================== +-Routine Description: +- Close kernel threads. +- +-Arguments: +- *pAd the raxx interface data pointer +- +-Return Value: +- NONE +- +-Note: +-======================================================================== +-*/ +-VOID RtmpMgmtTaskExit( +- IN RTMP_ADAPTER *pAd) +-{ +- +- +- return; +-} +- +- +-static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) +-{ +- u32 regValue; +- +- pAd->int_disable_mask &= ~(mode); +- regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable +- } +- //else +- // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); +- +- if (regValue != 0) +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +-} +- +- +-static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) +-{ +- u32 regValue; +- +- pAd->int_disable_mask |= mode; +- regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable +- +- if (regValue == 0) +- { +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +- } +-} +- +- +-/*************************************************************************** +- * +- * tasklet related procedures. +- * +- **************************************************************************/ +-static void mgmt_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +-// printk("mgmt_dma_done_process\n"); +- IntSource.word = 0; +- IntSource.field.MgmtDmaDone = 1; +- pAd->int_pending &= ~INT_MGMT_DLY; +- +- RTMPHandleMgmtRingDmaDoneInterrupt(pAd); +- +- // if you use RTMP_SEM_LOCK, sometimes kernel will hang up, no any +- // bug report output +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if (pAd->int_pending & INT_MGMT_DLY) +- { +- tasklet_hi_schedule(&pObj->mgmt_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_MGMT_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +-static void rx_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- BOOLEAN bReschedule = 0; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +-#ifdef UAPSD_AP_SUPPORT +- UAPSD_TIMING_RECORD(pAd, UAPSD_TIMING_RECORD_TASKLET); +-#endif // UAPSD_AP_SUPPORT // +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- pAd->int_pending &= ~(INT_RX); +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- bReschedule = STARxDoneInterruptHandle(pAd, 0); +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef UAPSD_AP_SUPPORT +- UAPSD_TIMING_RECORD_STOP(); +-#endif // UAPSD_AP_SUPPORT // +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid rotting packet +- */ +- if (pAd->int_pending & INT_RX || bReschedule) +- { +- tasklet_hi_schedule(&pObj->rx_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable RxINT again */ +- rt2860_int_enable(pAd, INT_RX); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- +-} +- +- +-void fifo_statistic_full_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- POS_COOKIE pObj; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- pAd->int_pending &= ~(FifoStaFullInt); +- NICUpdateFifoStaCounters(pAd); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid rotting packet +- */ +- if (pAd->int_pending & FifoStaFullInt) +- { +- tasklet_hi_schedule(&pObj->fifo_statistic_full_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable RxINT again */ +- +- rt2860_int_enable(pAd, FifoStaFullInt); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- +-} +- +- +- +- +-static void ac3_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +-// printk("ac0_dma_done_process\n"); +- IntSource.word = 0; +- IntSource.field.Ac3DmaDone = 1; +- pAd->int_pending &= ~INT_AC3_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac3_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC3_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +-static void ac2_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- IntSource.word = 0; +- IntSource.field.Ac2DmaDone = 1; +- pAd->int_pending &= ~INT_AC2_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac2_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC2_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +-static void ac1_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +-// printk("ac0_dma_done_process\n"); +- IntSource.word = 0; +- IntSource.field.Ac1DmaDone = 1; +- pAd->int_pending &= ~INT_AC1_DLY; +- +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac1_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC1_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +-static void ac0_dma_done_tasklet(unsigned long data) +-{ +- unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- BOOLEAN bReschedule = 0; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +-// printk("ac0_dma_done_process\n"); +- IntSource.word = 0; +- IntSource.field.Ac0DmaDone = 1; +- pAd->int_pending &= ~INT_AC0_DLY; +- +-// RTMPHandleMgmtRingDmaDoneInterrupt(pAd); +- bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); +- +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- /* +- * double check to avoid lose of interrupts +- */ +- if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) +- { +- tasklet_hi_schedule(&pObj->ac0_dma_done_task); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +- return; +- } +- +- /* enable TxDataInt again */ +- rt2860_int_enable(pAd, INT_AC0_DLY); +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +- +- +- +-/*************************************************************************** +- * +- * interrupt handler related procedures. +- * +- **************************************************************************/ +-int print_int_count; +- +-IRQ_HANDLE_TYPE +-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) +-rt2860_interrupt(int irq, void *dev_instance) +-#else +-rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs) +-#endif +-{ +- struct net_device *net_dev = (struct net_device *) dev_instance; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) RTMP_OS_NETDEV_GET_PRIV(net_dev); +- INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- +- /* Note 03312008: we can not return here before +- RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); +- Or kernel will panic after ifconfig ra0 down sometimes */ +- +- +- // +- // Inital the Interrupt source. +- // +- IntSource.word = 0x00000000L; +-// McuIntSource.word = 0x00000000L; +- +- // +- // Get the interrupt sources & saved to local variable +- // +- //RTMP_IO_READ32(pAd, where, &McuIntSource.word); +- //RTMP_IO_WRITE32(pAd, , McuIntSource.word); +- +- // +- // Flag fOP_STATUS_DOZE On, means ASIC put to sleep, elase means ASICK WakeUp +- // And at the same time, clock maybe turned off that say there is no DMA service. +- // when ASIC get to sleep. +- // To prevent system hang on power saving. +- // We need to check it before handle the INT_SOURCE_CSR, ASIC must be wake up. +- // +- // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. +- // RT2860 => when ASIC is sleeping, MAC register can be read and written. +-// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear +- } +-// else +-// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); +- +-// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); +-// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); +-// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", +-// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); +- +- // Do nothing if Reset in progress +- if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |fRTMP_ADAPTER_HALT_IN_PROGRESS))) +- { +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- return IRQ_HANDLED; +-#else +- return; +-#endif +- } +- +- // +- // Handle interrupt, walk through all bits +- // Should start from highest priority interrupt +- // The priority can be adjust by altering processing if statement +- // +- +-#ifdef DBG +- +-#endif +- +- +- pAd->bPCIclkOff = FALSE; +- +- // If required spinlock, each interrupt service routine has to acquire +- // and release itself. +- // +- +- // Do nothing if NIC doesn't exist +- if (IntSource.word == 0xffffffff) +- { +- RTMP_SET_FLAG(pAd, (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS)); +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- return IRQ_HANDLED; +-#else +- return; +-#endif +- } +- +- if (IntSource.word & TxCoherent) +- { +- DBGPRINT(RT_DEBUG_ERROR, (">>>TxCoherent<<<\n")); +- RTMPHandleRxCoherentInterrupt(pAd); +- } +- +- if (IntSource.word & RxCoherent) +- { +- DBGPRINT(RT_DEBUG_ERROR, (">>>RxCoherent<<<\n")); +- RTMPHandleRxCoherentInterrupt(pAd); +- } +- +- if (IntSource.word & FifoStaFullInt) +- { +- if ((pAd->int_disable_mask & FifoStaFullInt) == 0) +- { +- /* mask FifoStaFullInt */ +- rt2860_int_disable(pAd, FifoStaFullInt); +- tasklet_hi_schedule(&pObj->fifo_statistic_full_task); +- } +- pAd->int_pending |= FifoStaFullInt; +- } +- +- if (IntSource.word & INT_MGMT_DLY) +- { +- if ((pAd->int_disable_mask & INT_MGMT_DLY) ==0 ) +- { +- rt2860_int_disable(pAd, INT_MGMT_DLY); +- tasklet_hi_schedule(&pObj->mgmt_dma_done_task); +- } +- pAd->int_pending |= INT_MGMT_DLY ; +- } +- +- if (IntSource.word & INT_RX) +- { +- if ((pAd->int_disable_mask & INT_RX) == 0) +- { +- +- /* mask RxINT */ +- rt2860_int_disable(pAd, INT_RX); +- tasklet_hi_schedule(&pObj->rx_done_task); +- } +- pAd->int_pending |= INT_RX; +- } +- +- +- if (IntSource.word & INT_AC3_DLY) +- { +- +- if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC3_DLY); +- tasklet_hi_schedule(&pObj->ac3_dma_done_task); +- } +- pAd->int_pending |= INT_AC3_DLY; +- } +- +- if (IntSource.word & INT_AC2_DLY) +- { +- +- if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC2_DLY); +- tasklet_hi_schedule(&pObj->ac2_dma_done_task); +- } +- pAd->int_pending |= INT_AC2_DLY; +- } +- +- if (IntSource.word & INT_AC1_DLY) +- { +- +- pAd->int_pending |= INT_AC1_DLY; +- +- if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC1_DLY); +- tasklet_hi_schedule(&pObj->ac1_dma_done_task); +- } +- +- } +- +- if (IntSource.word & INT_AC0_DLY) +- { +- +-/* +- if (IntSource.word & 0x2) { +- u32 reg; +- RTMP_IO_READ32(pAd, DELAY_INT_CFG, ®); +- printk("IntSource.word = %08x, DELAY_REG = %08x\n", IntSource.word, reg); +- } +-*/ +- pAd->int_pending |= INT_AC0_DLY; +- +- if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) +- { +- /* mask TxDataInt */ +- rt2860_int_disable(pAd, INT_AC0_DLY); +- tasklet_hi_schedule(&pObj->ac0_dma_done_task); +- } +- +- } +- +- +- if (IntSource.word & PreTBTTInt) +- { +- RTMPHandlePreTBTTInterrupt(pAd); +- } +- +- if (IntSource.word & TBTTInt) +- { +- RTMPHandleTBTTInterrupt(pAd); +- } +- +- +- +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- if (IntSource.word & AutoWakeupInt) +- RTMPHandleTwakeupInterrupt(pAd); +- } +-#endif // CONFIG_STA_SUPPORT // +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +- return IRQ_HANDLED; +-#endif +- +-} +- +-/* +- * invaild or writeback cache +- * and convert virtual address to physical address +- */ +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction) +-{ +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- +- /* +- ------ Porting Information ------ +- > For Tx Alloc: +- mgmt packets => sd_idx = 0 +- SwIdx: pAd->MgmtRing.TxCpuIdx +- pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa; +- +- data packets => sd_idx = 1 +- TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx +- QueIdx: pTxBlk->QueIdx +- pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa; +- +- > For Rx Alloc: +- sd_idx = -1 +- */ +- +- pAd = (PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- if (sd_idx == 1) +- { +- PTX_BLK pTxBlk; +- pTxBlk = (PTX_BLK)ptr; +- return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, direction); +- } +- else +- { +- return pci_map_single(pObj->pci_dev, ptr, size, direction); +- } +- +-} +- +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction) +-{ +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- +- pAd=(PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- +- pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); +- +-} +diff --git a/drivers/staging/rt3090/rt_profile.c b/drivers/staging/rt3090/rt_profile.c +deleted file mode 100644 +index 49a0590..0000000 +--- a/drivers/staging/rt3090/rt_profile.c ++++ /dev/null +@@ -1,101 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_profile.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include "rt_config.h" +- +- +-NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd) +-{ +- PSTRING src = NULL; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- INT retval = NDIS_STATUS_FAILURE; +- PSTRING buffer; +- +- buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(buffer == NULL) +- return NDIS_STATUS_FAILURE; +- memset(buffer, 0x00, MAX_INI_BUFFER_SIZE); +- +- { +- +-#ifdef CONFIG_STA_SUPPORT +- IF_DEV_CONFIG_OPMODE_ON_STA(pAd) +- { +- src = STA_PROFILE_PATH; +- } +-#endif // CONFIG_STA_SUPPORT // +-#ifdef MULTIPLE_CARD_SUPPORT +- src = (PSTRING)pAd->MC_FileName; +-#endif // MULTIPLE_CARD_SUPPORT // +- } +- +- if (src && *src) +- { +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Open file \"%s\" failed!\n", src)); +- } +- else +- { +- retval =RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE); +- if (retval > 0) +- { +- RTMPSetProfileParameters(pAd, buffer); +- retval = NDIS_STATUS_SUCCESS; +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); +- +- retval = RtmpOSFileClose(srcf); +- if ( retval != 0) +- { +- retval = NDIS_STATUS_FAILURE; +- DBGPRINT(RT_DEBUG_ERROR, ("Close file \"%s\" failed(errCode=%d)!\n", src, retval)); +- } +- } +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- } +- +- kfree(buffer); +- +- return (retval); +- +-} +diff --git a/drivers/staging/rt3090/rtmp.h b/drivers/staging/rt3090/rtmp.h +deleted file mode 100644 +index 8ef6d0b..0000000 +--- a/drivers/staging/rt3090/rtmp.h ++++ /dev/null +@@ -1,6873 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp.h +- +- Abstract: +- Miniport generic portion header file +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 2002-08-01 created +- James Tan 2002-09-06 modified (Revise NTCRegTable) +- John Chang 2004-09-06 modified for RT2600 +-*/ +-#ifndef __RTMP_H__ +-#define __RTMP_H__ +- +-#include "link_list.h" +-#include "spectrum_def.h" +- +-#include "rtmp_dot11.h" +- +-#ifdef MLME_EX +-#include "mlme_ex_def.h" +-#endif // MLME_EX // +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) +-#define WSC_INCLUDED +-#endif +- +- +- +- +- +-#include "rtmp_chip.h" +- +- +- +-typedef struct _RTMP_ADAPTER RTMP_ADAPTER; +-typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; +- +-typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; +- +- +-//#define DBG 1 +- +-//#define DBG_DIAGNOSE 1 +- +- +-//+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function +-#define MAX_DATAMM_RETRY 3 +-#define MGMT_USE_QUEUE_FLAG 0x80 +-//---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function +- +-#define MAXSEQ (0xFFF) +- +- +-#if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT) +-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP) +-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA) +-#else +-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) +-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) +-#endif +- +-extern unsigned char SNAP_AIRONET[]; +-extern unsigned char CISCO_OUI[]; +-extern UCHAR BaSizeArray[4]; +- +-extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; +-extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; +-extern ULONG BIT32[32]; +-extern UCHAR BIT8[8]; +-extern char* CipherName[]; +-extern char* MCSToMbps[]; +-extern UCHAR RxwiMCSToOfdmRate[12]; +-extern UCHAR SNAP_802_1H[6]; +-extern UCHAR SNAP_BRIDGE_TUNNEL[6]; +-extern UCHAR SNAP_AIRONET[8]; +-extern UCHAR CKIP_LLC_SNAP[8]; +-extern UCHAR EAPOL_LLC_SNAP[8]; +-extern UCHAR EAPOL[2]; +-extern UCHAR IPX[2]; +-extern UCHAR APPLE_TALK[2]; +-extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14 +-extern UCHAR OfdmRateToRxwiMCS[]; +-extern UCHAR OfdmSignalToRateId[16] ; +-extern UCHAR default_cwmin[4]; +-extern UCHAR default_cwmax[4]; +-extern UCHAR default_sta_aifsn[4]; +-extern UCHAR MapUserPriorityToAccessCategory[8]; +- +-extern USHORT RateUpPER[]; +-extern USHORT RateDownPER[]; +-extern UCHAR Phy11BNextRateDownward[]; +-extern UCHAR Phy11BNextRateUpward[]; +-extern UCHAR Phy11BGNextRateDownward[]; +-extern UCHAR Phy11BGNextRateUpward[]; +-extern UCHAR Phy11ANextRateDownward[]; +-extern UCHAR Phy11ANextRateUpward[]; +-extern CHAR RssiSafeLevelForTxRate[]; +-extern UCHAR RateIdToMbps[]; +-extern USHORT RateIdTo500Kbps[]; +- +-extern UCHAR CipherSuiteWpaNoneTkip[]; +-extern UCHAR CipherSuiteWpaNoneTkipLen; +- +-extern UCHAR CipherSuiteWpaNoneAes[]; +-extern UCHAR CipherSuiteWpaNoneAesLen; +- +-extern UCHAR SsidIe; +-extern UCHAR SupRateIe; +-extern UCHAR ExtRateIe; +- +-#ifdef DOT11_N_SUPPORT +-extern UCHAR HtCapIe; +-extern UCHAR AddHtInfoIe; +-extern UCHAR NewExtChanIe; +-#ifdef DOT11N_DRAFT3 +-extern UCHAR ExtHtCapIe; +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-extern UCHAR ErpIe; +-extern UCHAR DsIe; +-extern UCHAR TimIe; +-extern UCHAR WpaIe; +-extern UCHAR Wpa2Ie; +-extern UCHAR IbssIe; +-extern UCHAR Ccx2Ie; +-extern UCHAR WapiIe; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WAPI_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR Ccx2IeInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR PowerConstraintIE[]; +- +- +-extern UCHAR RateSwitchTable[]; +-extern UCHAR RateSwitchTable11B[]; +-extern UCHAR RateSwitchTable11G[]; +-extern UCHAR RateSwitchTable11BG[]; +- +-#ifdef DOT11_N_SUPPORT +-extern UCHAR RateSwitchTable11BGN1S[]; +-extern UCHAR RateSwitchTable11BGN2S[]; +-extern UCHAR RateSwitchTable11BGN2SForABand[]; +-extern UCHAR RateSwitchTable11N1S[]; +-extern UCHAR RateSwitchTable11N2S[]; +-extern UCHAR RateSwitchTable11N2SForABand[]; +- +-#ifdef CONFIG_STA_SUPPORT +-extern UCHAR PRE_N_HT_OUI[]; +-#endif // CONFIG_STA_SUPPORT // +-#endif // DOT11_N_SUPPORT // +- +- +-#ifdef RALINK_ATE +-typedef struct _ATE_INFO { +- UCHAR Mode; +- CHAR TxPower0; +- CHAR TxPower1; +- CHAR TxAntennaSel; +- CHAR RxAntennaSel; +- TXWI_STRUC TxWI; // TXWI +- USHORT QID; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR Addr3[MAC_ADDR_LEN]; +- UCHAR Channel; +- UINT32 TxLength; +- UINT32 TxCount; +- UINT32 TxDoneCount; // Tx DMA Done +- UINT32 RFFreqOffset; +- BOOLEAN bRxFER; // Show Rx Frame Error Rate +- BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx. +- BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx. +-#ifdef RTMP_MAC_PCI +- BOOLEAN bFWLoading; // Reload firmware when ATE is done. +-#endif // RTMP_MAC_PCI // +- UINT32 RxTotalCnt; +- UINT32 RxCntPerSec; +- +- CHAR LastSNR0; // last received SNR +- CHAR LastSNR1; // last received SNR for 2nd antenna +- CHAR LastRssi0; // last received RSSI +- CHAR LastRssi1; // last received RSSI for 2nd antenna +- CHAR LastRssi2; // last received RSSI for 3rd antenna +- CHAR AvgRssi0; // last 8 frames' average RSSI +- CHAR AvgRssi1; // last 8 frames' average RSSI +- CHAR AvgRssi2; // last 8 frames' average RSSI +- SHORT AvgRssi0X8; // sum of last 8 frames' RSSI +- SHORT AvgRssi1X8; // sum of last 8 frames' RSSI +- SHORT AvgRssi2X8; // sum of last 8 frames' RSSI +- +- UINT32 NumOfAvgRssiSample; +- +- +-#ifdef RALINK_28xx_QA +- // Tx frame +- USHORT HLen; // Header Length +- USHORT PLen; // Pattern Length +- UCHAR Header[32]; // Header buffer +- UCHAR Pattern[32]; // Pattern buffer +- USHORT DLen; // Data Length +- USHORT seq; +- UINT32 CID; +- RTMP_OS_PID AtePid; +- // counters +- UINT32 U2M; +- UINT32 OtherData; +- UINT32 Beacon; +- UINT32 OtherCount; +- UINT32 TxAc0; +- UINT32 TxAc1; +- UINT32 TxAc2; +- UINT32 TxAc3; +- /*UINT32 TxHCCA;*/ +- UINT32 TxMgmt; +- UINT32 RSSI0; +- UINT32 RSSI1; +- UINT32 RSSI2; +- UINT32 SNR0; +- UINT32 SNR1; +- // TxStatus : 0 --> task is idle, 1 --> task is running +- UCHAR TxStatus; +-#endif // RALINK_28xx_QA // +-} ATE_INFO, *PATE_INFO; +- +-#ifdef RALINK_28xx_QA +-struct ate_racfghdr { +- UINT32 magic_no; +- USHORT command_type; +- USHORT command_id; +- USHORT length; +- USHORT sequence; +- USHORT status; +- UCHAR data[2046]; +-} __attribute__((packed)); +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +- +-typedef struct _RSSI_SAMPLE { +- CHAR LastRssi0; // last received RSSI +- CHAR LastRssi1; // last received RSSI +- CHAR LastRssi2; // last received RSSI +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- SHORT AvgRssi0X8; +- SHORT AvgRssi1X8; +- SHORT AvgRssi2X8; +-} RSSI_SAMPLE; +- +-// +-// Queue structure and macros +-// +-typedef struct _QUEUE_ENTRY { +- struct _QUEUE_ENTRY *Next; +-} QUEUE_ENTRY, *PQUEUE_ENTRY; +- +-// Queue structure +-typedef struct _QUEUE_HEADER { +- PQUEUE_ENTRY Head; +- PQUEUE_ENTRY Tail; +- ULONG Number; +-} QUEUE_HEADER, *PQUEUE_HEADER; +- +-#define InitializeQueueHeader(QueueHeader) \ +-{ \ +- (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \ +- (QueueHeader)->Number = 0; \ +-} +- +-#define RemoveHeadQueue(QueueHeader) \ +-(QueueHeader)->Head; \ +-{ \ +- PQUEUE_ENTRY pNext; \ +- if ((QueueHeader)->Head != NULL) \ +- { \ +- pNext = (QueueHeader)->Head->Next; \ +- (QueueHeader)->Head->Next = NULL; \ +- (QueueHeader)->Head = pNext; \ +- if (pNext == NULL) \ +- (QueueHeader)->Tail = NULL; \ +- (QueueHeader)->Number--; \ +- } \ +-} +- +-#define InsertHeadQueue(QueueHeader, QueueEntry) \ +-{ \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ +- if ((QueueHeader)->Tail == NULL) \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Number++; \ +-} +- +-#define InsertTailQueue(QueueHeader, QueueEntry) \ +-{ \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ +- if ((QueueHeader)->Tail) \ +- (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ +- else \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Number++; \ +-} +- +-#define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \ +-{ \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ +- if ((QueueHeader)->Tail) \ +- (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ +- else \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Number++; \ +-} +- +- +- +-// +-// Macros for flag and ref count operations +-// +-#define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) +-#define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) +-#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0) +-#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0) +-#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) +-// Macro for power save flag. +-#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F)) +-#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F)) +-#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0) +-#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0) +-#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F)) +- +-#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F)) +-#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F)) +-#define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0) +- +-#define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F)) +-#define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F)) +-#define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0) +- +-#define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F)) +-#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F)) +-#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0) +- +-#ifdef CONFIG_STA_SUPPORT +-#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled) +-#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) +-#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) +-#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- +-#define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE) +-#endif // CONFIG_STA_SUPPORT // +- +-#define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) +-#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) +- +- +-#define INC_RING_INDEX(_idx, _RingSize) \ +-{ \ +- (_idx) = (_idx+1) % (_RingSize); \ +-} +- +- +-#ifdef DOT11_N_SUPPORT +-// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. +-#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ +-{ \ +- _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \ +- _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \ +- _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \ +- _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \ +- _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \ +- _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \ +- _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \ +- _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \ +- _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \ +- _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \ +- _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \ +- NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\ +-} +- +-#define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \ +-{ \ +- _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \ +- _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \ +- _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ +-} +-#endif // DOT11_N_SUPPORT // +- +-// +-// MACRO for 32-bit PCI register read / write +-// +-// Usage : RTMP_IO_READ32( +-// PRTMP_ADAPTER pAd, +-// ULONG Register_Offset, +-// PULONG pValue) +-// +-// RTMP_IO_WRITE32( +-// PRTMP_ADAPTER pAd, +-// ULONG Register_Offset, +-// ULONG Value) +-// +- +- +-// +-// Common fragment list structure - Identical to the scatter gather frag list structure +-// +-//#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT +-//#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT +-#define NIC_MAX_PHYS_BUF_COUNT 8 +- +-typedef struct _RTMP_SCATTER_GATHER_ELEMENT { +- PVOID Address; +- ULONG Length; +- PULONG Reserved; +-} RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT; +- +- +-typedef struct _RTMP_SCATTER_GATHER_LIST { +- ULONG NumberOfElements; +- PULONG Reserved; +- RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; +-} RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; +- +- +-// +-// Some utility macros +-// +-#ifndef min +-#define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) +-#endif +- +-#ifndef max +-#define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b)) +-#endif +- +-#define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2)))) +- +-#define INC_COUNTER64(Val) (Val.QuadPart++) +- +-#define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON)) +-#define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON)) +-#define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR) +-#define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p)) +- +-// Check LEAP & CCKM flags +-#define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) +-#define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE)) +- +-// if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required +-#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \ +-{ \ +- if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \ +- { \ +- _pExtraLlcSnapEncap = SNAP_802_1H; \ +- if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \ +- NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \ +- { \ +- _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ +- } \ +- } \ +- else \ +- { \ +- _pExtraLlcSnapEncap = NULL; \ +- } \ +-} +- +-// New Define for new Tx Path. +-#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \ +-{ \ +- if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \ +- { \ +- _pExtraLlcSnapEncap = SNAP_802_1H; \ +- if (NdisEqualMemory(IPX, _pBufVA, 2) || \ +- NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \ +- { \ +- _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ +- } \ +- } \ +- else \ +- { \ +- _pExtraLlcSnapEncap = NULL; \ +- } \ +-} +- +- +-#define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \ +-{ \ +- NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \ +- NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \ +- NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \ +-} +- +-// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way. +-// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field +-// else remove the LLC/SNAP field from the result Ethernet frame +-// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload +-// Note: +-// _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO +-// _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed +-#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \ +-{ \ +- char LLC_Len[2]; \ +- \ +- _pRemovedLLCSNAP = NULL; \ +- if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \ +- NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \ +- { \ +- PUCHAR pProto = _pData + 6; \ +- \ +- if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \ +- NdisEqualMemory(SNAP_802_1H, _pData, 6)) \ +- { \ +- LLC_Len[0] = (UCHAR)(_DataSize / 256); \ +- LLC_Len[1] = (UCHAR)(_DataSize % 256); \ +- MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ +- } \ +- else \ +- { \ +- MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \ +- _pRemovedLLCSNAP = _pData; \ +- _DataSize -= LENGTH_802_1_H; \ +- _pData += LENGTH_802_1_H; \ +- } \ +- } \ +- else \ +- { \ +- LLC_Len[0] = (UCHAR)(_DataSize / 256); \ +- LLC_Len[1] = (UCHAR)(_DataSize % 256); \ +- MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ +- } \ +-} +- +- +-// Enqueue this frame to MLME engine +-// We need to enqueue the whole frame because MLME need to pass data type +-// information from 802.11 header +-#ifdef RTMP_MAC_PCI +-#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ +-{ \ +- UINT32 High32TSF, Low32TSF; \ +- RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \ +- RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ +- MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ +-} +-#endif // RTMP_MAC_PCI // +- +-#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) +-#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) +- +-// +-// Check if it is Japan W53(ch52,56,60,64) channel. +-// +-#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64)) +- +-#ifdef CONFIG_STA_SUPPORT +-#define STA_EXTRA_SETTING(_pAd) +- +-#define STA_PORT_SECURED(_pAd) \ +-{ \ +- BOOLEAN Cancelled; \ +- (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \ +- NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \ +- (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \ +- (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\ +- NdisReleaseSpinLock(&(_pAd)->MacTabLock); \ +- RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\ +- STA_EXTRA_SETTING(_pAd); \ +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-// +-// Data buffer for DMA operation, the buffer must be contiguous physical memory +-// Both DMA to / from CPU use the same structure. +-// +-typedef struct _RTMP_DMABUF +-{ +- ULONG AllocSize; +- PVOID AllocVa; // TxBuf virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address +-} RTMP_DMABUF, *PRTMP_DMABUF; +- +- +-// +-// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be +-// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor +-// which won't be released, driver has to wait until upper layer return the packet +-// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair +-// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor +-// which driver should ACK upper layer when the tx is physically done or failed. +-// +-typedef struct _RTMP_DMACB +-{ +- ULONG AllocSize; // Control block size +- PVOID AllocVa; // Control block virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address +- PNDIS_PACKET pNdisPacket; +- PNDIS_PACKET pNextNdisPacket; +- +- RTMP_DMABUF DmaBuf; // Associated DMA buffer structure +-} RTMP_DMACB, *PRTMP_DMACB; +- +- +-typedef struct _RTMP_TX_RING +-{ +- RTMP_DMACB Cell[TX_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index +-} RTMP_TX_RING, *PRTMP_TX_RING; +- +-typedef struct _RTMP_RX_RING +-{ +- RTMP_DMACB Cell[RX_RING_SIZE]; +- UINT32 RxCpuIdx; +- UINT32 RxDmaIdx; +- INT32 RxSwReadIdx; // software next read index +-} RTMP_RX_RING, *PRTMP_RX_RING; +- +-typedef struct _RTMP_MGMT_RING +-{ +- RTMP_DMACB Cell[MGMT_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index +-} RTMP_MGMT_RING, *PRTMP_MGMT_RING; +- +- +-// +-// Statistic counter structure +-// +-typedef struct _COUNTER_802_3 +-{ +- // General Stats +- ULONG GoodTransmits; +- ULONG GoodReceives; +- ULONG TxErrors; +- ULONG RxErrors; +- ULONG RxNoBuffer; +- +- // Ethernet Stats +- ULONG RcvAlignmentErrors; +- ULONG OneCollision; +- ULONG MoreCollisions; +- +-} COUNTER_802_3, *PCOUNTER_802_3; +- +-typedef struct _COUNTER_802_11 { +- ULONG Length; +- LARGE_INTEGER LastTransmittedFragmentCount; +- LARGE_INTEGER TransmittedFragmentCount; +- LARGE_INTEGER MulticastTransmittedFrameCount; +- LARGE_INTEGER FailedCount; +- LARGE_INTEGER RetryCount; +- LARGE_INTEGER MultipleRetryCount; +- LARGE_INTEGER RTSSuccessCount; +- LARGE_INTEGER RTSFailureCount; +- LARGE_INTEGER ACKFailureCount; +- LARGE_INTEGER FrameDuplicateCount; +- LARGE_INTEGER ReceivedFragmentCount; +- LARGE_INTEGER MulticastReceivedFrameCount; +- LARGE_INTEGER FCSErrorCount; +-} COUNTER_802_11, *PCOUNTER_802_11; +- +-typedef struct _COUNTER_RALINK { +- ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput +- ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput +- ULONG BeenDisassociatedCount; +- ULONG BadCQIAutoRecoveryCount; +- ULONG PoorCQIRoamingCount; +- ULONG MgmtRingFullCount; +- ULONG RxCountSinceLastNULL; +- ULONG RxCount; +- ULONG RxRingErrCount; +- ULONG KickTxCount; +- ULONG TxRingErrCount; +- LARGE_INTEGER RealFcsErrCount; +- ULONG PendingNdisPacketCount; +- +- ULONG OneSecOsTxCount[NUM_OF_TX_RING]; +- ULONG OneSecDmaDoneCount[NUM_OF_TX_RING]; +- UINT32 OneSecTxDoneCount; +- ULONG OneSecRxCount; +- UINT32 OneSecTxAggregationCount; +- UINT32 OneSecRxAggregationCount; +- UINT32 OneSecReceivedByteCount; +- UINT32 OneSecFrameDuplicateCount; +- +- UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter +- UINT32 OneSecRxOkCnt; // RX without error +- UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count +- UINT32 OneSecRxFcsErrCnt; // CRC error +- UINT32 OneSecBeaconSentCnt; +- UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount +- UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt +- ULONG DuplicateRcv; +- ULONG TxAggCount; +- ULONG TxNonAggCount; +- ULONG TxAgg1MPDUCount; +- ULONG TxAgg2MPDUCount; +- ULONG TxAgg3MPDUCount; +- ULONG TxAgg4MPDUCount; +- ULONG TxAgg5MPDUCount; +- ULONG TxAgg6MPDUCount; +- ULONG TxAgg7MPDUCount; +- ULONG TxAgg8MPDUCount; +- ULONG TxAgg9MPDUCount; +- ULONG TxAgg10MPDUCount; +- ULONG TxAgg11MPDUCount; +- ULONG TxAgg12MPDUCount; +- ULONG TxAgg13MPDUCount; +- ULONG TxAgg14MPDUCount; +- ULONG TxAgg15MPDUCount; +- ULONG TxAgg16MPDUCount; +- +- LARGE_INTEGER TransmittedOctetsInAMSDU; +- LARGE_INTEGER TransmittedAMSDUCount; +- LARGE_INTEGER ReceivedOctesInAMSDUCount; +- LARGE_INTEGER ReceivedAMSDUCount; +- LARGE_INTEGER TransmittedAMPDUCount; +- LARGE_INTEGER TransmittedMPDUsInAMPDUCount; +- LARGE_INTEGER TransmittedOctetsInAMPDUCount; +- LARGE_INTEGER MPDUInReceivedAMPDUCount; +-} COUNTER_RALINK, *PCOUNTER_RALINK; +- +- +-typedef struct _COUNTER_DRS { +- // to record the each TX rate's quality. 0 is best, the bigger the worse. +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +- ULONG CurrTxRateStableTime; // # of second in current TX rate +- BOOLEAN fNoisyEnvironment; +- BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction +- ULONG LastTxOkCount; +-} COUNTER_DRS, *PCOUNTER_DRS; +- +- +- +- +-/*************************************************************************** +- * security key related data structure +- **************************************************************************/ +-typedef struct _CIPHER_KEY { +- UCHAR Key[16]; // right now we implement 4 keys, 128 bits max +- UCHAR RxMic[8]; // make alignment +- UCHAR TxMic[8]; +- UCHAR TxTsc[6]; // 48bit TSC value +- UCHAR RxTsc[6]; // 48bit TSC value +- UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 +- UCHAR KeyLen; +-#ifdef CONFIG_STA_SUPPORT +- UCHAR BssId[6]; +-#endif // CONFIG_STA_SUPPORT // +- // Key length for each key, 0: entry is invalid +- UCHAR Type; // Indicate Pairwise/Group when reporting MIC error +-} CIPHER_KEY, *PCIPHER_KEY; +- +- +-// structure to define WPA Group Key Rekey Interval +-typedef struct PACKED _RT_802_11_WPA_REKEY { +- ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets +-} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; +- +- +- +-typedef struct { +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR ErrorCode[2]; //00 01-Invalid authentication type +- //00 02-Authentication timeout +- //00 03-Challenge from AP failed +- //00 04-Challenge to AP failed +- BOOLEAN Reported; +-} ROGUEAP_ENTRY, *PROGUEAP_ENTRY; +- +-typedef struct { +- UCHAR RogueApNr; +- ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; +-} ROGUEAP_TABLE, *PROGUEAP_TABLE; +- +-// +-// Cisco IAPP format +-// +-typedef struct _CISCO_IAPP_CONTENT_ +-{ +- USHORT Length; //IAPP Length +- UCHAR MessageType; //IAPP type +- UCHAR FunctionCode; //IAPP function type +- UCHAR DestinaionMAC[MAC_ADDR_LEN]; +- UCHAR SourceMAC[MAC_ADDR_LEN]; +- USHORT Tag; //Tag(element IE) - Adjacent AP report +- USHORT TagLength; //Length of element not including 4 byte header +- UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 +- UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point +- USHORT Channel; +- USHORT SsidLen; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT Seconds; //Seconds that the client has been disassociated. +-} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; +- +- +-/* +- * Fragment Frame structure +- */ +-typedef struct _FRAGMENT_FRAME { +- PNDIS_PACKET pFragPacket; +- ULONG RxSize; +- USHORT Sequence; +- USHORT LastFrag; +- ULONG Flags; // Some extra frame information. bit 0: LLC presented +-} FRAGMENT_FRAME, *PFRAGMENT_FRAME; +- +- +-// +-// Packet information for NdisQueryPacket +-// +-typedef struct _PACKET_INFO { +- UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained +- UINT BufferCount ; // Number of Buffer descriptor chained +- UINT TotalPacketLength ; // Self explained +- PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor +-} PACKET_INFO, *PPACKET_INFO; +- +- +-// +-// Arcfour Structure Added by PaulWu +-// +-typedef struct _ARCFOUR +-{ +- UINT X; +- UINT Y; +- UCHAR STATE[256]; +-} ARCFOURCONTEXT, *PARCFOURCONTEXT; +- +- +-// +-// Tkip Key structure which RC4 key & MIC calculation +-// +-typedef struct _TKIP_KEY_INFO { +- UINT nBytesInM; // # bytes in M for MICKEY +- ULONG IV16; +- ULONG IV32; +- ULONG K0; // for MICKEY Low +- ULONG K1; // for MICKEY Hig +- ULONG L; // Current state for MICKEY +- ULONG R; // Current state for MICKEY +- ULONG M; // Message accumulator for MICKEY +- UCHAR RC4KEY[16]; +- UCHAR MIC[8]; +-} TKIP_KEY_INFO, *PTKIP_KEY_INFO; +- +- +-// +-// Private / Misc data, counters for driver internal use +-// +-typedef struct __PRIVATE_STRUC { +- UINT SystemResetCnt; // System reset counter +- UINT TxRingFullCnt; // Tx ring full occurrance number +- UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter +- // Variables for WEP encryption / decryption in rtmp_wep.c +- UINT FCSCRC32; +- ARCFOURCONTEXT WEPCONTEXT; +- // Tkip stuff +- TKIP_KEY_INFO Tx; +- TKIP_KEY_INFO Rx; +-} PRIVATE_STRUC, *PPRIVATE_STRUC; +- +- +-/*************************************************************************** +- * Channel and BBP related data structures +- **************************************************************************/ +-// structure to tune BBP R66 (BBP TUNING) +-typedef struct _BBP_R66_TUNING { +- BOOLEAN bEnable; +- USHORT FalseCcaLowerThreshold; // default 100 +- USHORT FalseCcaUpperThreshold; // default 512 +- UCHAR R66Delta; +- UCHAR R66CurrentValue; +- BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value. +-} BBP_R66_TUNING, *PBBP_R66_TUNING; +- +-// structure to store channel TX power +-typedef struct _CHANNEL_TX_POWER { +- USHORT RemainingTimeForUse; //unit: sec +- UCHAR Channel; +-#ifdef DOT11N_DRAFT3 +- BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz. +-#endif // DOT11N_DRAFT3 // +- CHAR Power; +- CHAR Power2; +- UCHAR MaxTxPwr; +- UCHAR DfsReq; +-} CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; +- +-// structure to store 802.11j channel TX power +-typedef struct _CHANNEL_11J_TX_POWER { +- UCHAR Channel; +- UCHAR BW; // BW_10 or BW_20 +- CHAR Power; +- CHAR Power2; +- USHORT RemainingTimeForUse; //unit: sec +-} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; +- +-typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { +- UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status +- UCHAR EvaluateStableCnt; +- UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +-#ifdef CONFIG_STA_SUPPORT +- SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 +- SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 +-#endif // CONFIG_STA_SUPPORT // +- SHORT Pair1LastAvgRssi; // +- SHORT Pair2LastAvgRssi; // +- ULONG RcvPktNumWhenEvaluate; +- BOOLEAN FirstPktArrivedWhenEvaluate; +- RALINK_TIMER_STRUCT RxAntDiversityTimer; +-} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; +- +- +-/*************************************************************************** +- * structure for radar detection and channel switch +- **************************************************************************/ +-typedef struct _RADAR_DETECT_STRUCT { +- //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h +- UCHAR CSCount; //Channel switch counter +- UCHAR CSPeriod; //Channel switch period (beacon count) +- UCHAR RDCount; //Radar detection counter +- UCHAR RDMode; //Radar Detection mode +- UCHAR RDDurRegion; //Radar detection duration region +- UCHAR BBPR16; +- UCHAR BBPR17; +- UCHAR BBPR18; +- UCHAR BBPR21; +- UCHAR BBPR22; +- UCHAR BBPR64; +- ULONG InServiceMonitorCount; // unit: sec +- UINT8 DfsSessionTime; +-#ifdef DFS_FCC_BW40_FIX +- CHAR DfsSessionFccOff; +-#endif +- BOOLEAN bFastDfs; +- UINT8 ChMovingTime; +- UINT8 LongPulseRadarTh; +-#ifdef MERGE_ARCH_TEAM +- CHAR AvgRssiReq; +- ULONG DfsLowerLimit; +- ULONG DfsUpperLimit; +- UINT8 FixDfsLimit; +- ULONG upperlimit; +- ULONG lowerlimit; +-#endif // MERGE_ARCH_TEAM // +-} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; +- +-#ifdef CARRIER_DETECTION_SUPPORT +-typedef enum CD_STATE_n +-{ +- CD_NORMAL, +- CD_SILENCE, +- CD_MAX_STATE +-} CD_STATE; +- +-#ifdef TONE_RADAR_DETECT_SUPPORT +-#define CARRIER_DETECT_RECHECK_TIME 3 +- +- +-#ifdef CARRIER_SENSE_NEW_ALGO +-#define CARRIER_DETECT_CRITIRIA 400 +-#define CARRIER_DETECT_STOP_RATIO 0x11 +-#define CARRIER_DETECT_STOP_RATIO_OLD_3090 2 +-#endif // CARRIER_SENSE_NEW_ALGO // +- +- +-#define CARRIER_DETECT_STOP_RECHECK_TIME 4 +-#define CARRIER_DETECT_CRITIRIA_A 230 +-#define CARRIER_DETECT_DELTA 7 +-#define CARRIER_DETECT_DIV_FLAG 0 +-#ifdef RT3090 +-#define CARRIER_DETECT_THRESHOLD_3090A 0x1fffffff +-#endif // RT3090 // +-#ifdef RT3390 +-#define CARRIER_DETECT_THRESHOLD 0x0fffffff +-#endif // RT3390 // +-#ifndef RT3390 +-#define CARRIER_DETECT_THRESHOLD 0x0fffffff +-#endif // RT3390 // +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +-typedef struct CARRIER_DETECTION_s +-{ +- BOOLEAN Enable; +- UINT8 CDSessionTime; +- UINT8 CDPeriod; +- CD_STATE CD_State; +-#ifdef TONE_RADAR_DETECT_SUPPORT +- UINT8 delta; +- UINT8 div_flag; +- UINT32 threshold; +- UINT8 recheck; +- UINT8 recheck1; +- UINT8 recheck2; +- UINT32 TimeStamp; +- UINT32 criteria; +- UINT32 CarrierDebug; +- ULONG idle_time; +- ULONG busy_time; +- ULONG Debug; +-#endif // TONE_RADAR_DETECT_SUPPORT // +-}CARRIER_DETECTION_STRUCT, *PCARRIER_DETECTION_STRUCT; +-#endif // CARRIER_DETECTION_SUPPORT // +- +- +-#ifdef NEW_DFS +-typedef struct _NewDFSDebug +-{ +- UCHAR channel; +- ULONG wait_time; +- UCHAR delta_delay_range; +- UCHAR delta_delay_step; +- UCHAR EL_range; +- UCHAR EL_step; +- UCHAR EH_range; +- UCHAR EH_step; +- UCHAR WL_range; +- UCHAR WL_step; +- UCHAR WH_range; +- UCHAR WH_step; +- ULONG T_expected; +- ULONG T_margin; +- UCHAR start; +- ULONG count; +- ULONG idx; +- +-}NewDFSDebug, *pNewDFSDebug; +- +-#define NEW_DFS_FCC_5_ENT_NUM 5 +-#define NEW_DFS_DBG_PORT_ENT_NUM_POWER 8 +-#define NEW_DFS_DBG_PORT_ENT_NUM (1 << NEW_DFS_DBG_PORT_ENT_NUM_POWER) // CE Debug Port entry number, 256 +-#define NEW_DFS_DBG_PORT_MASK 0xff +- +-// Matched Period definition +-#define NEW_DFS_MPERIOD_ENT_NUM_POWER 8 +-#define NEW_DFS_MPERIOD_ENT_NUM (1 << NEW_DFS_MPERIOD_ENT_NUM_POWER) // CE Period Table entry number, 512 +-#define NEW_DFS_MAX_CHANNEL 4 +- +-typedef struct _NewDFSDebugPort{ +- ULONG counter; +- ULONG timestamp; +- USHORT width; +- USHORT start_idx; // start index to period table +- USHORT end_idx; // end index to period table +-}NewDFSDebugPort, *pNewDFSDebugPort; +- +-// Matched Period Table +-typedef struct _NewDFSMPeriod{ +- USHORT idx; +- USHORT width; +- USHORT idx2; +- USHORT width2; +- ULONG period; +-}NewDFSMPeriod, *pNewDFSMPeriod; +- +-#endif // NEW_DFS // +- +- +-typedef enum _ABGBAND_STATE_ { +- UNKNOWN_BAND, +- BG_BAND, +- A_BAND, +-} ABGBAND_STATE; +- +-#ifdef RTMP_MAC_PCI +-#ifdef CONFIG_STA_SUPPORT +-// Power save method control +-typedef union _PS_CONTROL { +- struct { +- ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey, +- ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. +- ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip +- ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip. +- ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. +- ULONG rsv:26; // Radio Measurement Enable +- } field; +- ULONG word; +-} PS_CONTROL, *PPS_CONTROL; +-#endif // CONFIG_STA_SUPPORT // +-#endif // RTMP_MAC_PCI // +-/*************************************************************************** +- * structure for MLME state machine +- **************************************************************************/ +-typedef struct _MLME_STRUCT { +-#ifdef CONFIG_STA_SUPPORT +- // STA state machines +- STATE_MACHINE CntlMachine; +- STATE_MACHINE AssocMachine; +- STATE_MACHINE AuthMachine; +- STATE_MACHINE AuthRspMachine; +- STATE_MACHINE SyncMachine; +- STATE_MACHINE WpaPskMachine; +- STATE_MACHINE LeapMachine; +- STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; +- STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; +- STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; +- STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; +-#endif // CONFIG_STA_SUPPORT // +- STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; +- // Action +- STATE_MACHINE ActMachine; +- +- +-#ifdef QOS_DLS_SUPPORT +- STATE_MACHINE DlsMachine; +- STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE]; +-#endif // QOS_DLS_SUPPORT // +- +- +- // common WPA state machine +- STATE_MACHINE WpaMachine; +- STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; +- +- +- +- ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming +- ULONG Now32; // latch the value of NdisGetSystemUpTime() +- ULONG LastSendNULLpsmTime; +- +- BOOLEAN bRunning; +- NDIS_SPIN_LOCK TaskLock; +- MLME_QUEUE Queue; +- +- UINT ShiftReg; +- +- RALINK_TIMER_STRUCT PeriodicTimer; +- RALINK_TIMER_STRUCT APSDPeriodicTimer; +- RALINK_TIMER_STRUCT LinkDownTimer; +- RALINK_TIMER_STRUCT LinkUpTimer; +-#ifdef RTMP_MAC_PCI +- UCHAR bPsPollTimerRunning; +- RALINK_TIMER_STRUCT PsPollTimer; +- RALINK_TIMER_STRUCT RadioOnOffTimer; +-#endif // RTMP_MAC_PCI // +- ULONG PeriodicRound; +- ULONG OneSecPeriodicRound; +- +- UCHAR RealRxPath; +- BOOLEAN bLowThroughput; +- BOOLEAN bEnableAutoAntennaCheck; +- RALINK_TIMER_STRUCT RxAntEvalTimer; +- +-#ifdef RT30xx +- UCHAR CaliBW40RfR24; +- UCHAR CaliBW20RfR24; +-#endif // RT30xx // +- +-} MLME_STRUCT, *PMLME_STRUCT; +- +- +-#ifdef DOT11_N_SUPPORT +-/*************************************************************************** +- * 802.11 N related data structures +- **************************************************************************/ +-struct reordering_mpdu +-{ +- struct reordering_mpdu *next; +- PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ +- int Sequence; /* sequence number of MPDU */ +- BOOLEAN bAMSDU; +-}; +- +-struct reordering_list +-{ +- struct reordering_mpdu *next; +- int qlen; +-}; +- +-struct reordering_mpdu_pool +-{ +- PVOID mem; +- NDIS_SPIN_LOCK lock; +- struct reordering_list freelist; +-}; +- +-typedef enum _REC_BLOCKACK_STATUS +-{ +- Recipient_NONE=0, +- Recipient_USED, +- Recipient_HandleRes, +- Recipient_Accept +-} REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS; +- +-typedef enum _ORI_BLOCKACK_STATUS +-{ +- Originator_NONE=0, +- Originator_USED, +- Originator_WaitRes, +- Originator_Done +-} ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS; +- +-typedef struct _BA_ORI_ENTRY{ +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; +- UCHAR Token; +-// Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. +- USHORT Sequence; +- USHORT TimeOutValue; +- ORI_BLOCKACK_STATUS ORI_BA_Status; +- RALINK_TIMER_STRUCT ORIBATimer; +- PVOID pAdapter; +-} BA_ORI_ENTRY, *PBA_ORI_ENTRY; +- +-typedef struct _BA_REC_ENTRY { +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. +- //UCHAR NumOfRxPkt; +- //UCHAR Curindidx; // the head in the RX reordering buffer +- USHORT LastIndSeq; +-// USHORT LastIndSeqAtTimer; +- USHORT TimeOutValue; +- RALINK_TIMER_STRUCT RECBATimer; +- ULONG LastIndSeqAtTimer; +- ULONG nDropPacket; +- ULONG rcvSeq; +- REC_BLOCKACK_STATUS REC_BA_Status; +-// UCHAR RxBufIdxUsed; +- // corresponding virtual address for RX reordering packet storage. +- //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; +- NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock +-// struct _BA_REC_ENTRY *pNext; +- PVOID pAdapter; +- struct reordering_list list; +-} BA_REC_ENTRY, *PBA_REC_ENTRY; +- +- +-typedef struct { +- ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] +- ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] +- ULONG numDoneOriginator; // count Done Originator sessions +- BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; +- BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; +-} BA_TABLE, *PBA_TABLE; +- +-//For QureyBATableOID use; +-typedef struct PACKED _OID_BA_REC_ENTRY{ +- UCHAR MACAddr[MAC_ADDR_LEN]; +- UCHAR BaBitmap; // if (BaBitmap&(1<MaxHTPhyMode.field.MODE >= MODE_HTMIX) +- +-#define IS_HT_RATE(_pMacEntry) \ +- (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- +-#define PEER_IS_HT_RATE(_pMacEntry) \ +- (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- +-#endif // DOT11_N_SUPPORT // +- +- +-//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) +-typedef struct _IOT_STRUC { +- UCHAR Threshold[2]; +- UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0] +- UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1] +- ULONG OneSecInWindowCount; +- ULONG OneSecFrameDuplicateCount; +- ULONG OneSecOutWindowCount; +- UCHAR DelOriAct; +- UCHAR DelRecAct; +- UCHAR RTSShortProt; +- UCHAR RTSLongProt; +- BOOLEAN bRTSLongProtOn; +-#ifdef CONFIG_STA_SUPPORT +- BOOLEAN bLastAtheros; +- BOOLEAN bCurrentAtheros; +- BOOLEAN bNowAtherosBurstOn; +- BOOLEAN bNextDisableRxBA; +- BOOLEAN bToggle; +-#endif // CONFIG_STA_SUPPORT // +-} IOT_STRUC, *PIOT_STRUC; +- +- +-// This is the registry setting for 802.11n transmit setting. Used in advanced page. +-typedef union _REG_TRANSMIT_SETTING { +-#ifdef RT_BIG_ENDIAN +- struct { +- UINT32 rsv:13; +- UINT32 EXTCHA:2; +- UINT32 HTMODE:1; +- UINT32 TRANSNO:2; +- UINT32 STBC:1; //SPACE +- UINT32 ShortGI:1; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 TxBF:1; // 3*3 +- UINT32 rsv0:10; +- //UINT32 MCS:7; // MCS +- //UINT32 PhyMode:4; +- } field; +-#else +- struct { +- //UINT32 PhyMode:4; +- //UINT32 MCS:7; // MCS +- UINT32 rsv0:10; +- UINT32 TxBF:1; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 STBC:1; //SPACE +- UINT32 TRANSNO:2; +- UINT32 HTMODE:1; +- UINT32 EXTCHA:2; +- UINT32 rsv:13; +- } field; +-#endif +- UINT32 word; +-} REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING; +- +- +-typedef union _DESIRED_TRANSMIT_SETTING { +-#ifdef RT_BIG_ENDIAN +- struct { +- USHORT rsv:3; +- USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. +- USHORT PhyMode:4; +- USHORT MCS:7; // MCS +- } field; +-#else +- struct { +- USHORT MCS:7; // MCS +- USHORT PhyMode:4; +- USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. +- USHORT rsv:3; +- } field; +-#endif +- USHORT word; +- } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; +- +- +- +- +-/*************************************************************************** +- * Multiple SSID related data structures +- **************************************************************************/ +-#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ +-#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ +- +-/* clear bcmc TIM bit */ +-#define WLAN_MR_TIM_BCMC_CLEAR(apidx) \ +- pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0]; +- +-/* set bcmc TIM bit */ +-#define WLAN_MR_TIM_BCMC_SET(apidx) \ +- pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0]; +- +-/* clear a station PS TIM bit */ +-#define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \ +- { UCHAR tim_offset = wcid >> 3; \ +- UCHAR bit_offset = wcid & 0x7; \ +- ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); } +- +-/* set a station PS TIM bit */ +-#define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \ +- { UCHAR tim_offset = wcid >> 3; \ +- UCHAR bit_offset = wcid & 0x7; \ +- ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } +- +- +-// configuration common to OPMODE_AP as well as OPMODE_STA +-typedef struct _COMMON_CONFIG { +- +- BOOLEAN bCountryFlag; +- UCHAR CountryCode[3]; +- UCHAR Geography; +- UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel +- UCHAR CountryRegionForABand; // Enum of country region for A band +- UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED +- UCHAR DesiredPhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED +- USHORT Dsifs; // in units of usec +- ULONG PacketFilter; // Packet filter for receiving +- UINT8 RegulatoryClass[MAX_NUM_OF_REGULATORY_CLASS]; +- +- CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated +- UCHAR SsidLen; // the actual ssid length in used +- UCHAR LastSsidLen; // the actual ssid length in used +- CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated +- UCHAR LastBssid[MAC_ADDR_LEN]; +- +- UCHAR Bssid[MAC_ADDR_LEN]; +- USHORT BeaconPeriod; +- UCHAR Channel; +- UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel. +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; +- UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES +- UCHAR MaxDesiredRate; +- UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; +- +- ULONG BasicRateBitmap; // backup basic ratebitmap +- +- BOOLEAN bAPSDCapable; +- BOOLEAN bInServicePeriod; +- BOOLEAN bAPSDAC_BE; +- BOOLEAN bAPSDAC_BK; +- BOOLEAN bAPSDAC_VI; +- BOOLEAN bAPSDAC_VO; +- +- /* because TSPEC can modify the APSD flag, we need to keep the APSD flag +- requested in association stage from the station; +- we need to recover the APSD flag after the TSPEC is deleted. */ +- BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */ +- BOOLEAN bACMAPSDTr[4]; /* no use */ +- +- BOOLEAN bNeedSendTriggerFrame; +- BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT +- ULONG TriggerTimerCount; +- UCHAR MaxSPLength; +- UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 +- // move to MULTISSID_STRUCT for MBSS +- //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. +- //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode +- UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit +- UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR TxRateIndex; // Tx rate index in RateSwitchTable +- UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable +- //BOOLEAN bAutoTxRateSwitch; +- UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR RtsRate; // RATE_xxx +- HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. +- UCHAR MlmeRate; // RATE_xxx, used to send MLME frames +- UCHAR BasicMlmeRate; // Default Rate for sending MLME frames +- +- USHORT RtsThreshold; // in unit of BYTE +- USHORT FragmentThreshold; // in unit of BYTE +- +- UCHAR TxPower; // in unit of mW +- ULONG TxPowerPercentage; // 0~100 % +- ULONG TxPowerDefault; // keep for TxPowerPercentage +- UINT8 PwrConstraint; +- +-#ifdef DOT11_N_SUPPORT +- BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +- BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +-#endif // DOT11_N_SUPPORT // +- IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter; +- ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto +- BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable +- ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use +- BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) +- BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST +- BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it +- BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version +- BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. +- ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect +- +-#ifdef DOT11_N_SUPPORT +- BOOLEAN bRdg; +-#endif // DOT11_N_SUPPORT // +- BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP +- UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx +-#ifdef CONFIG_STA_SUPPORT +- BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS +-#endif // CONFIG_STA_SUPPORT // +- // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular +- // BOOLEAN control, either ON or OFF. These flags should always be accessed via +- // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. +- // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition +- ULONG OpStatusFlags; +- +- BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. +- ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode. +-#ifdef ANT_DIVERSITY_SUPPORT +- UCHAR bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity. +-#endif // ANT_DIVERSITY_SUPPORT // +- +- // IEEE802.11H--DFS. +- RADAR_DETECT_STRUCT RadarDetect; +- +-#ifdef CARRIER_DETECTION_SUPPORT +- CARRIER_DETECTION_STRUCT CarrierDetect; +-#endif // CARRIER_DETECTION_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +- // HT +- UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability +- //RT_HT_CAPABILITY SupportedHtPhy; +- RT_HT_CAPABILITY DesiredHtPhy; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHTInfo; // Useful as AP. +- //This IE is used with channel switch announcement element when changing to a new 40MHz. +- //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. +- NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present +- +-#ifdef DOT11N_DRAFT3 +- UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo. +- RALINK_TIMER_STRUCT Bss2040CoexistTimer; +- +- //This IE is used for 20/40 BSS Coexistence. +- BSS_2040_COEXIST_IE BSS2040CoexistInfo; +- // ====== 11n D3.0 =======================> +- USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000 +- USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000 +- USHORT Dot11BssWidthTriggerScanInt; // Unit : Second +- USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000 +- USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000 +- USHORT Dot11BssWidthChanTranDelayFactor; +- USHORT Dot11OBssScanActivityThre; // Unit : percentage +- +- ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor) +- ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor) +- +- NDIS_SPIN_LOCK TriggerEventTabLock; +- BSS_2040_COEXIST_IE LastBSSCoexist2040; +- BSS_2040_COEXIST_IE BSSCoexist2040; +- TRIGGER_EVENT_TAB TriggerEventTab; +- UCHAR ChannelListIdx; +- // <====== 11n D3.0 ======================= +- BOOLEAN bOverlapScanning; +-#endif // DOT11N_DRAFT3 // +- +- BOOLEAN bHTProtect; +- BOOLEAN bMIMOPSEnable; +- BOOLEAN bBADecline; +-//2008/11/05: KH add to support Antenna power-saving of AP<-- +- BOOLEAN bGreenAPEnable; +- BOOLEAN bBlockAntDivforGreenAP; +-//2008/11/05: KH add to support Antenna power-saving of AP--> +- BOOLEAN bDisableReordering; +- BOOLEAN bForty_Mhz_Intolerant; +- BOOLEAN bExtChannelSwitchAnnouncement; +- BOOLEAN bRcvBSSWidthTriggerEvents; +- ULONG LastRcvBSSWidthTriggerEventsTime; +- +- UCHAR TxBASize; +-#endif // DOT11_N_SUPPORT // +- +- // Enable wireless event +- BOOLEAN bWirelessEvent; +- BOOLEAN bWiFiTest; // Enable this parameter for WiFi test +- +- // Tx & Rx Stream number selection +- UCHAR TxStream; +- UCHAR RxStream; +- +- // transmit phy mode, trasmit rate for Multicast. +-#ifdef MCAST_RATE_SPECIFIC +- UCHAR McastTransmitMcs; +- UCHAR McastTransmitPhyMode; +-#endif // MCAST_RATE_SPECIFIC // +- +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled +- +- +- +- NDIS_SPIN_LOCK MeasureReqTabLock; +- PMEASURE_REQ_TAB pMeasureReqTab; +- +- NDIS_SPIN_LOCK TpcReqTabLock; +- PTPC_REQ_TAB pTpcReqTab; +- +- // transmit phy mode, trasmit rate for Multicast. +-#ifdef MCAST_RATE_SPECIFIC +- HTTRANSMIT_SETTING MCastPhyMode; +-#endif // MCAST_RATE_SPECIFIC // +- +-#ifdef SINGLE_SKU +- UINT16 DefineMaxTxPwr; +-#endif // SINGLE_SKU // +- +- +- BOOLEAN PSPXlink; // 0: Disable. 1: Enable +- +- +-#if defined(RT305x)||defined(RT30xx) +- // request by Gary, for High Power issue +- UCHAR HighPowerPatchDisabled; +-#endif +- +- BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ +-} COMMON_CONFIG, *PCOMMON_CONFIG; +- +- +-#ifdef CONFIG_STA_SUPPORT +-/* Modified by Wu Xi-Kun 4/21/2006 */ +-// STA configuration and status +-typedef struct _STA_ADMIN_CONFIG { +- // GROUP 1 - +- // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe +- // the user intended configuration, but not necessary fully equal to the final +- // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either +- // AP or IBSS holder). +- // Once initialized, user configuration can only be changed via OID_xxx +- UCHAR BssType; // BSS_INFRA or BSS_ADHOC +- USHORT AtimWin; // used when starting a new IBSS +- +- // GROUP 2 - +- // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe +- // the user intended configuration, and should be always applied to the final +- // settings in ACTIVE BSS without compromising with the BSS holder. +- // Once initialized, user configuration can only be changed via OID_xxx +- UCHAR RssiTrigger; +- UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD +- USHORT DefaultListenCount; // default listen count; +- ULONG WindowsPowerMode; // Power mode for AC power +- ULONG WindowsBatteryPowerMode; // Power mode for battery if exists +- BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on +- BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID +- ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP +- +- // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1) +- USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE) +- USHORT DisassocReason; +- UCHAR DisassocSta[MAC_ADDR_LEN]; +- USHORT DeauthReason; +- UCHAR DeauthSta[MAC_ADDR_LEN]; +- USHORT AuthFailReason; +- UCHAR AuthFailSta[MAC_ADDR_LEN]; +- +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID +- +- // Add to support different cipher suite for WPA2/WPA mode +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite +- BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites +- USHORT RsnCapability; +- +- NDIS_802_11_WEP_STATUS GroupKeyWepStatus; +- +- UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase +- UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase +- UCHAR PMK[32]; // WPA PSK mode PMK +- UCHAR PTK[64]; // WPA PSK mode PTK +- UCHAR GTK[32]; // GTK from authenticator +- BSSID_INFO SavedPMK[PMKID_NO]; +- UINT SavedPMKNum; // Saved PMKID number +- +- UCHAR DefaultKeyId; +- +- +- // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED +- UCHAR PortSecured; +- +- // For WPA countermeasures +- ULONG LastMicErrorTime; // record last MIC error time +- ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation). +- BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred. +- // For WPA-PSK supplicant state +- WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x +- UCHAR ReplayCounter[8]; +- UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator +- UCHAR SNonce[32]; // SNonce for WPA-PSK +- +- UCHAR LastSNR0; // last received BEACON's SNR +- UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna +- RSSI_SAMPLE RssiSample; +- ULONG NumOfAvgRssiSample; +- +- ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time +- ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time +- ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time +- ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time +- +- ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST +- ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request +- BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On +- BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On +- BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled +- BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation +- +- // New for WPA, windows want us to to keep association information and +- // Fixed IEs from last association response +- NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; +- USHORT ReqVarIELen; // Length of next VIE include EID & Length +- UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format. +- USHORT ResVarIELen; // Length of next VIE include EID & Length +- UCHAR ResVarIEs[MAX_VIE_LEN]; +- +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. +- +- ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time +- USHORT RPIDensity[8]; // Array for RPI density collection +- +- UCHAR RMReqCnt; // Number of measurement request saved. +- UCHAR CurrentRMReqIdx; // Number of measurement request saved. +- BOOLEAN ParallelReq; // Parallel measurement, only one request performed, +- // It must be the same channel with maximum duration +- USHORT ParallelDuration; // Maximum duration for parallel measurement +- UCHAR ParallelChannel; // Only one channel with parallel measurement +- USHORT IAPPToken; // IAPP dialog token +- // Hack for channel load and noise histogram parameters +- UCHAR NHFactor; // Parameter for Noise histogram +- UCHAR CLFactor; // Parameter for channel load +- +- RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; +- BOOLEAN StaQuickResponeForRateUpTimerRunning; +- +- UCHAR DtimCount; // 0.. DtimPeriod-1 +- UCHAR DtimPeriod; // default = 3 +- +-#ifdef QOS_DLS_SUPPORT +- RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY]; +- UCHAR DlsReplayCounter[8]; +-#endif // QOS_DLS_SUPPORT // +- //////////////////////////////////////////////////////////////////////////////////////// +- // This is only for WHQL test. +- BOOLEAN WhqlTest; +- //////////////////////////////////////////////////////////////////////////////////////// +- +- RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; +- // Fast Roaming +- BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI +- CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- BOOLEAN IEEE8021X; +- BOOLEAN IEEE8021x_required_keys; +- CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys +- UCHAR DesireSharedKeyId; +- +- // 0: driver ignores wpa_supplicant +- // 1: wpa_supplicant initiates scanning and AP selection +- // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters +- UCHAR WpaSupplicantUP; +- UCHAR WpaSupplicantScanCount; +- BOOLEAN bRSN_IE_FromWpaSupplicant; +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- CHAR dev_name[16]; +- USHORT OriDevType; +- +- BOOLEAN bTGnWifiTest; +- BOOLEAN bScanReqIsFromWebUI; +- +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; +- RT_HT_PHY_INFO DesiredHtPhyInfo; +- BOOLEAN bAutoTxRateSwitch; +- +-#ifdef RTMP_MAC_PCI +- UCHAR BBPR3; +- // PS Control has 2 meanings for advanced power save function. +- // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. +- // 2. EnableNewPS : will save more current in sleep or radio off mode. +- PS_CONTROL PSControl; +-#endif // RTMP_MAC_PCI // +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- UCHAR IEEE80211dClientMode; +- UCHAR StaOriCountryCode[3]; +- UCHAR StaOriGeography; +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- +- +- BOOLEAN bAutoConnectByBssid; +- ULONG BeaconLostTime; // seconds +- BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable +-} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; +- +-// This data structure keep the current active BSS/IBSS's configuration that this STA +-// had agreed upon joining the network. Which means these parameters are usually decided +-// by the BSS/IBSS creator instead of user configuration. Data in this data structurre +-// is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE. +-// Normally, after SCAN or failed roaming attempts, we need to recover back to +-// the current active settings. +-typedef struct _STA_ACTIVE_CONFIG { +- USHORT Aid; +- USHORT AtimWin; // in kusec; IBSS parameter set element +- USHORT CapabilityInfo; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; +- +- // Copy supported rate from desired AP's beacon. We are trying to match +- // AP's supported and extended rate settings. +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; +- // Copy supported ht from desired AP's beacon. We are trying to match +- RT_HT_PHY_INFO SupportedPhyInfo; +- RT_HT_CAPABILITY SupportedHtPhy; +-} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; +- +- +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-typedef struct _MAC_TABLE_ENTRY { +- //Choose 1 from ValidAsWDS and ValidAsCLI to validize. +- BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too. +- BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode. +- BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions. +- BOOLEAN ValidAsMesh; +- BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode. +- BOOLEAN isCached; +- BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. +- +- UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM +- //jan for wpa +- // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB +- UCHAR CMTimerRunning; +- UCHAR apidx; // MBSS number +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; +- UCHAR ANonce[LEN_KEY_DESC_NONCE]; +- UCHAR SNonce[LEN_KEY_DESC_NONCE]; +- UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; +- UCHAR PTK[64]; +- UCHAR ReTryCounter; +- RALINK_TIMER_STRUCT RetryTimer; +- RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS GroupKeyWepStatus; +- AP_WPA_STATE WpaState; +- GTK_STATE GTKState; +- USHORT PortSecured; +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X +- CIPHER_KEY PairwiseKey; +- PVOID pAd; +- INT PMKID_CacheIdx; +- UCHAR PMKID[LEN_PMKID]; +- +- +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR PsMode; +- SST Sst; +- AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only +- BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure +- USHORT Aid; +- USHORT CapabilityInfo; +- UCHAR LastRssi; +- ULONG NoDataIdleCount; +- UINT16 StationKeepAliveCount; // unit: second +- ULONG PsQIdleCount; +- QUEUE_HEADER PsQueue; +- +- UINT32 StaConnectTime; // the live time of this station since associated with AP +- +- +-#ifdef DOT11_N_SUPPORT +- BOOLEAN bSendBAR; +- USHORT NoBADataCountDown; +- +- UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment +- UINT TxBFCount; // 3*3 +-#endif // DOT11_N_SUPPORT // +- UINT FIFOCount; +- UINT DebugFIFOCount; +- UINT DebugTxCount; +- BOOLEAN bDlsInit; +- +- +-//==================================================== +-//WDS entry needs these +-// if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab +- UINT MatchWDSTabIdx; +- UCHAR MaxSupportedRate; +- UCHAR CurrTxRate; +- UCHAR CurrTxRateIndex; +- // to record the each TX rate's quality. 0 is best, the bigger the worse. +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +-// USHORT OneSecTxOkCount; +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 ContinueTxFailCnt; +- UINT32 CurrTxRateStableTime; // # of second in current TX rate +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +-#ifdef WDS_SUPPORT +- BOOLEAN LockEntryTx; // TRUE = block to WDS Entry traffic, FALSE = not. +- UINT32 TimeStamp_toTxRing; +-#endif // WDS_SUPPORT // +- +-//==================================================== +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +- UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +- BOOLEAN fNoisyEnvironment; +- BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction +- ULONG LastTxOkCount; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; +- +- // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular +- // BOOLEAN control, either ON or OFF. These flags should always be accessed via +- // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. +- // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED +- ULONG ClientStatusFlags; +- +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- +-#ifdef DOT11_N_SUPPORT +- // HT EWC MIMO-N used parameters +- USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format +- USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI +- USHORT TXAutoBAbitmap; +- USHORT BADeclineBitmap; +- USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked +- USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked +- USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked +- +- // 802.11n features. +- UCHAR MpduDensity; +- UCHAR MaxRAmpduFactor; +- UCHAR AMsduSize; +- UCHAR MmpsMode; // MIMO power save more. +- +- HT_CAPABILITY_IE HTCapability; +- +-#ifdef DOT11N_DRAFT3 +- UCHAR BSS2040CoexistenceMgmtSupport; +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +- BOOLEAN bAutoTxRateSwitch; +- +- UCHAR RateLen; +- struct _MAC_TABLE_ENTRY *pNext; +- USHORT TxSeq[NUM_OF_TID]; +- USHORT NonQosDataSeq; +- +- RSSI_SAMPLE RssiSample; +- +- UINT32 TXMCSExpected[16]; +- UINT32 TXMCSSuccessful[16]; +- UINT32 TXMCSFailed[16]; +- UINT32 TXMCSAutoFallBack[16][16]; +- +-#ifdef CONFIG_STA_SUPPORT +- ULONG LastBeaconRxTime; +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- ULONG AssocDeadLine; +- +- +- +- ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming +- +-} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; +- +-typedef struct _MAC_TABLE { +- USHORT Size; +- MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE]; +- MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; +- QUEUE_HEADER McastPsQueue; +- ULONG PsQIdleCount; +- BOOLEAN fAnyStationInPsm; +- BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. +- BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP +- BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset +-#ifdef DOT11_N_SUPPORT +- BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ +- BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. +- BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. +- BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic +- BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS +-//2008/10/28: KH add to support Antenna power-saving of AP<-- +-//2008/10/28: KH add to support Antenna power-saving of AP--> +-#endif // DOT11_N_SUPPORT // +-} MAC_TABLE, *PMAC_TABLE; +- +- +- +- +-#ifdef BLOCK_NET_IF +-typedef struct _BLOCK_QUEUE_ENTRY +-{ +- BOOLEAN SwTxQueueBlockFlag; +- LIST_HEADER NetIfList; +-} BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY; +-#endif // BLOCK_NET_IF // +- +- +-struct wificonf +-{ +- BOOLEAN bShortGI; +- BOOLEAN bGreenField; +-}; +- +- +-typedef struct _RTMP_DEV_INFO_ +-{ +- UCHAR chipName[16]; +- RTMP_INF_TYPE infType; +-}RTMP_DEV_INFO; +- +- +-#ifdef DBG_DIAGNOSE +-#define DIAGNOSE_TIME 10 // 10 sec +-typedef struct _RtmpDiagStrcut_ +-{ // Diagnosis Related element +- unsigned char inited; +- unsigned char qIdx; +- unsigned char ArrayStartIdx; +- unsigned char ArrayCurIdx; +- // Tx Related Count +- USHORT TxDataCnt[DIAGNOSE_TIME]; +- USHORT TxFailCnt[DIAGNOSE_TIME]; +-// USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15 +- USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15 +-// USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1. +- USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3 +- USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8 +- +- USHORT TxAggCnt[DIAGNOSE_TIME]; +- USHORT TxNonAggCnt[DIAGNOSE_TIME]; +-// USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1. +- USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1. +- USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale. +- USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale. +- +- // Rx Related Count +- USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count. +- USHORT RxCrcErrCnt[DIAGNOSE_TIME]; +-// USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1. +- USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3 +-}RtmpDiagStruct; +-#endif // DBG_DIAGNOSE // +- +- +-struct _RTMP_CHIP_OP_ +-{ +- /* Calibration access related callback functions */ +- int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ +- int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ +- int (*eewrite)(RTMP_ADAPTER *pAd, USHORT offset, USHORT value);; /* int (*eewrite)(RTMP_ADAPTER *pAd, int offset, USHORT value); */ +- +- /* MCU related callback functions */ +- int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ +- int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ +- int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */ +- +- /* RF access related callback functions */ +- REG_PAIR *pRFRegTable; +- void (*AsicRfInit)(RTMP_ADAPTER *pAd); +- void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd); +- void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd); +- void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd); +- void (*AsicHaltAction)(RTMP_ADAPTER *pAd); +-}; +- +- +-// +-// The miniport adapter structure +-// +-struct _RTMP_ADAPTER +-{ +- PVOID OS_Cookie; // save specific structure relative to OS +- PNET_DEV net_dev; +- ULONG VirtualIfCnt; +- +- RTMP_CHIP_OP chipOps; +- USHORT ThisTbttNumToNextWakeUp; +- +-#ifdef INF_AMAZON_PPA +- UINT32 g_if_id; +- BOOLEAN PPAEnable; +- PPA_DIRECTPATH_CB *pDirectpathCb; +-#endif // INF_AMAZON_PPA // +- +-#ifdef RTMP_MAC_PCI +-/*****************************************************************************************/ +-/* PCI related parameters */ +-/*****************************************************************************************/ +- PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use +- unsigned int irq_num; +- +- USHORT LnkCtrlBitMask; +- USHORT RLnkCtrlConfiguration; +- USHORT RLnkCtrlOffset; +- USHORT HostLnkCtrlConfiguration; +- USHORT HostLnkCtrlOffset; +- USHORT PCIePowerSaveLevel; +- ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip +- ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip +- USHORT DeviceID; // Read from PCI config +- ULONG AccessBBPFailCount; +- BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. +- BOOLEAN bPCIclkOffDisableTx; // +- +- BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set . +- BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280. +- ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. +- +- UINT int_enable_reg; +- UINT int_disable_mask; +- UINT int_pending; +- +- +- RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD +- RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors +- RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors +- RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA +-#endif // RTMP_MAC_PCI // +- +- +- NDIS_SPIN_LOCK irq_lock; +- UCHAR irq_disabled; +- +- +-/*****************************************************************************************/ +-/* RBUS related parameters */ +-/*****************************************************************************************/ +- +- +-/*****************************************************************************************/ +-/* Both PCI/USB related parameters */ +-/*****************************************************************************************/ +- //RTMP_DEV_INFO chipInfo; +- RTMP_INF_TYPE infType; +- +-/*****************************************************************************************/ +-/* Driver Mgmt related parameters */ +-/*****************************************************************************************/ +- RTMP_OS_TASK mlmeTask; +-#ifdef RTMP_TIMER_TASK_SUPPORT +- // If you want use timer task to handle the timer related jobs, enable this. +- RTMP_TIMER_TASK_QUEUE TimerQ; +- NDIS_SPIN_LOCK TimerQLock; +- RTMP_OS_TASK timerTask; +-#endif // RTMP_TIMER_TASK_SUPPORT // +- +- +-/*****************************************************************************************/ +-/* Tx related parameters */ +-/*****************************************************************************************/ +- BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once +- NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; +- +- +- // resource for software backlog queues +- QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA +- NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock +- +- RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors +- RTMP_MGMT_RING MgmtRing; +- NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock +- +- +-/*****************************************************************************************/ +-/* Rx related parameters */ +-/*****************************************************************************************/ +- +-#ifdef RTMP_MAC_PCI +- RTMP_RX_RING RxRing; +- NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock +-#ifdef RT3090 +- NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // +- +- +- +-/*****************************************************************************************/ +-/* ASIC related parameters */ +-/*****************************************************************************************/ +- UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. +- +- // --------------------------- +- // E2PROM +- // --------------------------- +- ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused +- ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. +- USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; +- UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 +- BOOLEAN EepromAccess; +- UCHAR EFuseTag; +- +- +- // --------------------------- +- // BBP Control +- // --------------------------- +-#ifdef MERGE_ARCH_TEAM +- UCHAR BbpWriteLatch[256]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID +-#else +- UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID +-#endif // MERGE_ARCH_TEAM // +- CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power +- BBP_R66_TUNING BbpTuning; +- +- // ---------------------------- +- // RFIC control +- // ---------------------------- +- UCHAR RfIcType; // RFIC_xxx +- ULONG RfFreqOffset; // Frequency offset for channel switching +- RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ +- +- EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference. +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; +- +- // This soft Rx Antenna Diversity mechanism is used only when user set +- // RX Antenna = DIVERSITY ON +- SOFT_RX_ANT_DIVERSITY RxAnt; +- +- UCHAR RFProgSeq; +- CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels. +- CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey +- CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw +- CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey +- +- UCHAR ChannelListNum; // number of channel in ChannelList[] +- UCHAR Bbp94; +- BOOLEAN BbpForCCK; +- ULONG Tx20MPwrCfgABand[5]; +- ULONG Tx20MPwrCfgGBand[5]; +- ULONG Tx40MPwrCfgABand[5]; +- ULONG Tx40MPwrCfgGBand[5]; +- +- BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control +- UCHAR TssiRefA; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1)) +- +- BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control +- UCHAR TssiRefG; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) +- +- CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h +- CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value +- CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value +- +- CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah +- CHAR ARssiOffset1; // Store A RSSI#1 Offset value +- CHAR ARssiOffset2; // Store A RSSI#2 Offset value +- +- CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h +- CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 +- CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 +- CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 +-#ifdef RT30xx +- // for 3572 +- UCHAR Bbp25; +- UCHAR Bbp26; +- +- UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G +- UCHAR TxMixerGain5G; +-#endif // RT30xx // +- // ---------------------------- +- // LED control +- // ---------------------------- +- MCU_LEDCS_STRUC LedCntl; +- USHORT Led1; // read from EEPROM 0x3c +- USHORT Led2; // EEPROM 0x3e +- USHORT Led3; // EEPROM 0x40 +- UCHAR LedIndicatorStrength; +- UCHAR RssiSingalstrengthOffet; +- BOOLEAN bLedOnScanning; +- UCHAR LedStatus; +- +-/*****************************************************************************************/ +-/* 802.11 related parameters */ +-/*****************************************************************************************/ +- // outgoing BEACON frame buffer and corresponding TXD +- TXWI_STRUC BeaconTxWI; +- PUCHAR BeaconBuf; +- USHORT BeaconOffset[HW_BEACON_MAX_COUNT]; +- +- // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. +- PSPOLL_FRAME PsPollFrame; +- HEADER_802_11 NullFrame; +- +- +- +- +-//=========AP=========== +- +- +-//=======STA=========== +-#ifdef CONFIG_STA_SUPPORT +- // ----------------------------------------------- +- // STA specific configuration & operation status +- // used only when pAd->OpMode == OPMODE_STA +- // ----------------------------------------------- +- STA_ADMIN_CONFIG StaCfg; // user desired settings +- STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) +- CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f +- NDIS_MEDIA_STATE PreMediaState; +-#endif // CONFIG_STA_SUPPORT // +- +-//=======Common=========== +- // OP mode: either AP or STA +- UCHAR OpMode; // OPMODE_STA, OPMODE_AP +- +- NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected +- +- +- /* MAT related parameters */ +- +- // configuration: read from Registry & E2PROM +- BOOLEAN bLocalAdminMAC; // Use user changed MAC +- UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address +- UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address +- +- // ------------------------------------------------------ +- // common configuration to both OPMODE_STA and OPMODE_AP +- // ------------------------------------------------------ +- COMMON_CONFIG CommonCfg; +- MLME_STRUCT Mlme; +- +- // AP needs those vaiables for site survey feature. +- MLME_AUX MlmeAux; // temporary settings used during MLME state machine +- BSS_TABLE ScanTab; // store the latest SCAN result +- +- //About MacTab, the sta driver will use #0 and #1 for multicast and AP. +- MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. +- NDIS_SPIN_LOCK MacTabLock; +- +-#ifdef DOT11_N_SUPPORT +- BA_TABLE BATable; +- NDIS_SPIN_LOCK BATabLock; +- RALINK_TIMER_STRUCT RECBATimer; +-#endif // DOT11_N_SUPPORT // +- +- // encryption/decryption KEY tables +- CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3] +- +- // RX re-assembly buffer for fragmentation +- FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame +- +- // various Counters +- COUNTER_802_3 Counters8023; // 802.3 counters +- COUNTER_802_11 WlanCounters; // 802.11 MIB counters +- COUNTER_RALINK RalinkCounters; // Ralink propriety counters +- COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching +- PRIVATE_STRUC PrivateInfo; // Private information & counters +- +- // flags, see fRTMP_ADAPTER_xxx flags +- ULONG Flags; // Represent current device status +- ULONG PSFlags; // Power Save operation flag. +- +- // current TX sequence # +- USHORT Sequence; +- +- // Control disconnect / connect event generation +- //+++Didn't used anymore +- ULONG LinkDownTime; +- //--- +- ULONG LastRxRate; +- ULONG LastTxRate; +- //+++Used only for Station +- BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting +- //--- +- +- ULONG ExtraInfo; // Extra information for displaying status +- ULONG SystemErrorBitmap; // b0: E2PROM version error +- +- //+++Didn't used anymore +- ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D +- //--- +- +- // --------------------------- +- // System event log +- // --------------------------- +- RT_802_11_EVENT_TABLE EventTab; +- +- +- BOOLEAN HTCEnable; +- +- /*****************************************************************************************/ +- /* Statistic related parameters */ +- /*****************************************************************************************/ +- +- BOOLEAN bUpdateBcnCntDone; +- ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition +- // ---------------------------- +- // DEBUG paramerts +- // ---------------------------- +- //ULONG DebugSetting[4]; +- BOOLEAN bBanAllBaSetup; +- BOOLEAN bPromiscuous; +- +- // ---------------------------- +- // rt2860c emulation-use Parameters +- // ---------------------------- +- //ULONG rtsaccu[30]; +- //ULONG ctsaccu[30]; +- //ULONG cfendaccu[30]; +- //ULONG bacontent[16]; +- //ULONG rxint[RX_RING_SIZE+1]; +- //UCHAR rcvba[60]; +- BOOLEAN bLinkAdapt; +- BOOLEAN bForcePrintTX; +- BOOLEAN bForcePrintRX; +- //BOOLEAN bDisablescanning; //defined in RT2870 USB +- BOOLEAN bStaFifoTest; +- BOOLEAN bProtectionTest; +- /* +- BOOLEAN bHCCATest; +- BOOLEAN bGenOneHCCA; +- */ +- BOOLEAN bBroadComHT; +- //+++Following add from RT2870 USB. +- ULONG BulkOutReq; +- ULONG BulkOutComplete; +- ULONG BulkOutCompleteOther; +- ULONG BulkOutCompleteCancel; // seems not use now? +- ULONG BulkInReq; +- ULONG BulkInComplete; +- ULONG BulkInCompleteFail; +- //--- +- +- struct wificonf WIFItestbed; +- +-#ifdef RALINK_ATE +- ATE_INFO ate; +-#endif // RALINK_ATE // +- +-#ifdef DOT11_N_SUPPORT +- struct reordering_mpdu_pool mpdu_blk_pool; +-#endif // DOT11_N_SUPPORT // +- +- ULONG OneSecondnonBEpackets; // record non BE packets per second +- +-#ifdef LINUX +-#if WIRELESS_EXT >= 12 +- struct iw_statistics iw_stats; +-#endif +- +- struct net_device_stats stats; +-#endif // LINUX // +- +-#ifdef BLOCK_NET_IF +- BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING]; +-#endif // BLOCK_NET_IF // +- +- +- +-#ifdef MULTIPLE_CARD_SUPPORT +- INT32 MC_RowID; +- STRING MC_FileName[256]; +-#endif // MULTIPLE_CARD_SUPPORT // +- +- ULONG TbttTickCount; +-#ifdef PCI_MSI_SUPPORT +- BOOLEAN HaveMsi; +-#endif // PCI_MSI_SUPPORT // +- +- +- UCHAR is_on; +- +-#define TIME_BASE (1000000/OS_HZ) +-#define TIME_ONE_SECOND (1000000/TIME_BASE) +- UCHAR flg_be_adjust; +- ULONG be_adjust_last_time; +- +-#ifdef NINTENDO_AP +- NINDO_CTRL_BLOCK nindo_ctrl_block; +-#endif // NINTENDO_AP // +- +- +-#ifdef IKANOS_VX_1X0 +- struct IKANOS_TX_INFO IkanosTxInfo; +- struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM]; +-#endif // IKANOS_VX_1X0 // +- +- +-#ifdef DBG_DIAGNOSE +- RtmpDiagStruct DiagStruct; +-#endif // DBG_DIAGNOSE // +- +- +- UINT8 FlgCtsEnabled; +- UINT8 PM_FlgSuspend; +- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +- BOOLEAN bUseEfuse; +- BOOLEAN bEEPROMFile; +- BOOLEAN bFroceEEPROMBuffer; +- UCHAR EEPROMImage[1024]; +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-}; +- +- +- +-#ifdef TONE_RADAR_DETECT_SUPPORT +-#define DELAYINTMASK 0x0013fffb +-#define INTMASK 0x0013fffb +-#define IndMask 0x0013fffc +-#define RadarInt 0x00100000 +-#else +-#define DELAYINTMASK 0x0003fffb +-#define INTMASK 0x0003fffb +-#define IndMask 0x0003fffc +-#endif // TONE_RADAR_DETECT_SUPPORT // +- +-#define RxINT 0x00000005 // Delayed Rx or indivi rx +-#define TxDataInt 0x000000fa // Delayed Tx or indivi tx +-#define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx +-#define TxCoherent 0x00020000 // tx coherent +-#define RxCoherent 0x00010000 // rx coherent +-#define McuCommand 0x00000200 // mcu +-#define PreTBTTInt 0x00001000 // Pre-TBTT interrupt +-#define TBTTInt 0x00000800 // TBTT interrupt +-#define GPTimeOutInt 0x00008000 // GPtimeout interrupt +-#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt +-#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt +- +- +-/*************************************************************************** +- * Rx Path software control block related data structures +- **************************************************************************/ +-typedef struct _RX_BLK_ +-{ +-// RXD_STRUC RxD; // sample +- RT28XX_RXD_STRUC RxD; +- PRXWI_STRUC pRxWI; +- PHEADER_802_11 pHeader; +- PNDIS_PACKET pRxPacket; +- UCHAR *pData; +- USHORT DataSize; +- USHORT Flags; +- UCHAR UserPriority; // for calculate TKIP MIC using +-} RX_BLK; +- +- +-#define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) +-#define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag) +-#define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag)) +- +- +-#define fRX_WDS 0x0001 +-#define fRX_AMSDU 0x0002 +-#define fRX_ARALINK 0x0004 +-#define fRX_HTC 0x0008 +-#define fRX_PAD 0x0010 +-#define fRX_AMPDU 0x0020 +-#define fRX_QOS 0x0040 +-#define fRX_INFRA 0x0080 +-#define fRX_EAP 0x0100 +-#define fRX_MESH 0x0200 +-#define fRX_APCLI 0x0400 +-#define fRX_DLS 0x0800 +-#define fRX_WPI 0x1000 +- +-#define LENGTH_AMSDU_SUBFRAMEHEAD 14 +-#define LENGTH_ARALINK_SUBFRAMEHEAD 14 +-#define LENGTH_ARALINK_HEADER_FIELD 2 +- +- +-/*************************************************************************** +- * Tx Path software control block related data structures +- **************************************************************************/ +-#define TX_UNKOWN_FRAME 0x00 +-#define TX_MCAST_FRAME 0x01 +-#define TX_LEGACY_FRAME 0x02 +-#define TX_AMPDU_FRAME 0x04 +-#define TX_AMSDU_FRAME 0x08 +-#define TX_RALINK_FRAME 0x10 +-#define TX_FRAG_FRAME 0x20 +- +- +-// Currently the sizeof(TX_BLK) is 148 bytes. +-typedef struct _TX_BLK_ +-{ +- UCHAR QueIdx; +- UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch +- UCHAR TotalFrameNum; // Total frame number want to send-out in one batch +- USHORT TotalFragNum; // Total frame fragments required in one batch +- USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch +- +- QUEUE_HEADER TxPacketList; +- MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address +- HTTRANSMIT_SETTING *pTransmit; +- +- // Following structure used for the characteristics of a specific packet. +- PNDIS_PACKET pPacket; +- PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data +- PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss +- UINT SrcBufLen; // Length of packet payload which not including Layer 2 header +- PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required +- UCHAR HeaderBuf[96]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP +- UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding +- UCHAR HdrPadLen; // recording Header Padding Length; +- UCHAR apidx; // The interface associated to this packet +- UCHAR Wcid; // The MAC entry associated to this packet +- UCHAR UserPriority; // priority class of packet +- UCHAR FrameGap; // what kind of IFS this packet use +- UCHAR MpduReqNum; // number of fragments of this frame +- UCHAR TxRate; // TODO: Obsoleted? Should change to MCS? +- UCHAR CipherAlg; // cipher alogrithm +- PCIPHER_KEY pKey; +- +- +- +- USHORT Flags; //See following definitions for detail. +- +- //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. +- ULONG Priv; // Hardware specific value saved in here. +- +-} TX_BLK, *PTX_BLK; +- +- +-#define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. +-#define fTX_bAckRequired 0x0002 // the packet need ack response +-#define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not +-#define fTX_bHTRate 0x0008 // allow to use HT rate +-#define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode +-#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment +-#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue +-#define fTX_bWMM 0x0080 // QOS Data +-#define fTX_bClearEAPFrame 0x0100 +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- +-#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag) +-#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0) +-#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag)) +- +- +- +- +-#ifdef RT_BIG_ENDIAN +-/*************************************************************************** +- * Endian conversion related functions +- **************************************************************************/ +-/* +- ======================================================================== +- +- Routine Description: +- Endian conversion of Tx/Rx descriptor . +- +- Arguments: +- pAd Pointer to our adapter +- pData Pointer to Tx/Rx descriptor +- DescriptorType Direction of the frame +- +- Return Value: +- None +- +- Note: +- Call this function when read or update descriptor +- ======================================================================== +-*/ +-static inline VOID RTMPWIEndianChange( +- IN PUCHAR pData, +- IN ULONG DescriptorType) +-{ +- int size; +- int i; +- +- size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE); +- +- if(DescriptorType == TYPE_TXWI) +- { +- *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3 +- *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7 +- } +- else +- { +- for(i=0; i < size/4 ; i++) +- *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i)); +- } +-} +- +- +-#ifdef RTMP_MAC_PCI +-static inline VOID WriteBackToDescriptor( +- IN PUCHAR Dest, +- IN PUCHAR Src, +- IN BOOLEAN DoEncrypt, +- IN ULONG DescriptorType) +-{ +- UINT32 *p1, *p2; +- +- p1 = ((UINT32 *)Dest); +- p2 = ((UINT32 *)Src); +- +- *p1 = *p2; +- *(p1+2) = *(p2+2); +- *(p1+3) = *(p2+3); +- *(p1+1) = *(p2+1); // Word 1; this must be written back last +-} +-#endif // RTMP_MAC_PCI // +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Endian conversion of Tx/Rx descriptor . +- +- Arguments: +- pAd Pointer to our adapter +- pData Pointer to Tx/Rx descriptor +- DescriptorType Direction of the frame +- +- Return Value: +- None +- +- Note: +- Call this function when read or update descriptor +- ======================================================================== +-*/ +-#ifdef RTMP_MAC_PCI +-static inline VOID RTMPDescriptorEndianChange( +- IN PUCHAR pData, +- IN ULONG DescriptorType) +-{ +- *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3 +- *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11 +- *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15 +- *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last +-} +-#endif // RTMP_MAC_PCI // +- +-/* +- ======================================================================== +- +- Routine Description: +- Endian conversion of all kinds of 802.11 frames . +- +- Arguments: +- pAd Pointer to our adapter +- pData Pointer to the 802.11 frame structure +- Dir Direction of the frame +- FromRxDoneInt Caller is from RxDone interrupt +- +- Return Value: +- None +- +- Note: +- Call this function when read or update buffer data +- ======================================================================== +-*/ +-static inline VOID RTMPFrameEndianChange( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG Dir, +- IN BOOLEAN FromRxDoneInt) +-{ +- PHEADER_802_11 pFrame; +- PUCHAR pMacHdr; +- +- // swab 16 bit fields - Frame Control field +- if(Dir == DIR_READ) +- { +- *(USHORT *)pData = SWAP16(*(USHORT *)pData); +- } +- +- pFrame = (PHEADER_802_11) pData; +- pMacHdr = (PUCHAR) pFrame; +- +- // swab 16 bit fields - Duration/ID field +- *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2)); +- +- // swab 16 bit fields - Sequence Control field +- *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22)); +- +- if(pFrame->FC.Type == BTYPE_MGMT) +- { +- switch(pFrame->FC.SubType) +- { +- case SUBTYPE_ASSOC_REQ: +- case SUBTYPE_REASSOC_REQ: +- // swab 16 bit fields - CapabilityInfo field +- pMacHdr += sizeof(HEADER_802_11); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - Listen Interval field +- pMacHdr += 2; +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- break; +- +- case SUBTYPE_ASSOC_RSP: +- case SUBTYPE_REASSOC_RSP: +- // swab 16 bit fields - CapabilityInfo field +- pMacHdr += sizeof(HEADER_802_11); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - Status Code field +- pMacHdr += 2; +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - AID field +- pMacHdr += 2; +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- break; +- +- case SUBTYPE_AUTH: +- // If from APHandleRxDoneInterrupt routine, it is still a encrypt format. +- // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt. +- if(!FromRxDoneInt && pFrame->FC.Wep == 1) +- break; +- else +- { +- // swab 16 bit fields - Auth Alg No. field +- pMacHdr += sizeof(HEADER_802_11); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - Auth Seq No. field +- pMacHdr += 2; +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - Status Code field +- pMacHdr += 2; +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- } +- break; +- +- case SUBTYPE_BEACON: +- case SUBTYPE_PROBE_RSP: +- // swab 16 bit fields - BeaconInterval field +- pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- +- // swab 16 bit fields - CapabilityInfo field +- pMacHdr += sizeof(USHORT); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- break; +- +- case SUBTYPE_DEAUTH: +- case SUBTYPE_DISASSOC: +- // swab 16 bit fields - Reason code field +- pMacHdr += sizeof(HEADER_802_11); +- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); +- break; +- } +- } +- else if( pFrame->FC.Type == BTYPE_DATA ) +- { +- } +- else if(pFrame->FC.Type == BTYPE_CNTL) +- { +- switch(pFrame->FC.SubType) +- { +- case SUBTYPE_BLOCK_ACK_REQ: +- { +- PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame; +- *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl)); +- pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word); +- } +- break; +- case SUBTYPE_BLOCK_ACK: +- // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3 +- *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0])); +- break; +- +- case SUBTYPE_ACK: +- //For ACK packet, the HT_CONTROL field is in the same offset with Addr2 +- *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0])); +- break; +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n")); +- } +- +- // swab 16 bit fields - Frame Control +- if(Dir == DIR_WRITE) +- { +- *(USHORT *)pData = SWAP16(*(USHORT *)pData); +- } +-} +-#endif // RT_BIG_ENDIAN // +- +- +-/*************************************************************************** +- * Other static inline function definitions +- **************************************************************************/ +-static inline VOID ConvertMulticastIP2MAC( +- IN PUCHAR pIpAddr, +- IN PUCHAR *ppMacAddr, +- IN UINT16 ProtoType) +-{ +- if (pIpAddr == NULL) +- return; +- +- if (ppMacAddr == NULL || *ppMacAddr == NULL) +- return; +- +- switch (ProtoType) +- { +- case ETH_P_IPV6: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); +- *(*ppMacAddr) = 0x33; +- *(*ppMacAddr + 1) = 0x33; +- *(*ppMacAddr + 2) = pIpAddr[12]; +- *(*ppMacAddr + 3) = pIpAddr[13]; +- *(*ppMacAddr + 4) = pIpAddr[14]; +- *(*ppMacAddr + 5) = pIpAddr[15]; +- break; +- +- case ETH_P_IP: +- default: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); +- *(*ppMacAddr) = 0x01; +- *(*ppMacAddr + 1) = 0x00; +- *(*ppMacAddr + 2) = 0x5e; +- *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f; +- *(*ppMacAddr + 4) = pIpAddr[2]; +- *(*ppMacAddr + 5) = pIpAddr[3]; +- break; +- } +- +- return; +-} +- +- +-char *GetPhyMode(int Mode); +-char* GetBW(int BW); +- +- +- +-BOOLEAN RTMPCheckForHang( +- IN NDIS_HANDLE MiniportAdapterContext); +- +-VOID RTMPHalt( +- IN NDIS_HANDLE MiniportAdapterContext); +- +-// +-// Private routines in rtmp_init.c +-// +-NDIS_STATUS RTMPAllocAdapterBlock( +- IN PVOID handle, +- OUT PRTMP_ADAPTER *ppAdapter); +- +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RTMPFindAdapter( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext); +- +-NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RTMPSetProfileParameters( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING pBuffer); +- +-INT RTMPGetKeyParameter( +- IN PSTRING key, +- OUT PSTRING dest, +- IN INT destsize, +- IN PSTRING buffer, +- IN BOOLEAN bTrimSpace); +- +-VOID RTMPFreeAdapter( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS NICReadRegParameters( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext); +- +-#ifdef RTMP_RF_RW_SUPPORT +-VOID NICInitRFRegisters( +- IN PRTMP_ADAPTER pAd); +- +-VOID RtmpChipOpsRFHook( +- IN RTMP_ADAPTER *pAd); +- +-NDIS_STATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN UCHAR value); +- +-NDIS_STATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN PUCHAR pValue); +-#endif // RTMP_RF_RW_SUPPORT // +- +-VOID NICReadEEPROMParameters( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR mac_addr); +- +-VOID NICInitAsicFromEEPROM( +- IN PRTMP_ADAPTER pAd); +- +- +-NDIS_STATUS NICInitializeAdapter( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset); +- +-NDIS_STATUS NICInitializeAsic( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset); +- +-VOID NICIssueReset( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPRingCleanUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType); +- +-VOID RxTest( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS DbgSendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +-VOID UserCfgInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID NICResetFromError( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS NICLoadFirmware( +- IN PRTMP_ADAPTER pAd); +- +-VOID NICEraseFirmware( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS NICLoadRateSwitchingParams( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN NICCheckForHang( +- IN PRTMP_ADAPTER pAd); +- +-VOID NICUpdateFifoStaCounters( +- IN PRTMP_ADAPTER pAd); +- +-VOID NICUpdateRawCounters( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPZeroMemory( +- IN PVOID pSrc, +- IN ULONG Length); +- +-ULONG RTMPCompareMemory( +- IN PVOID pSrc1, +- IN PVOID pSrc2, +- IN ULONG Length); +- +-VOID RTMPMoveMemory( +- OUT PVOID pDest, +- IN PVOID pSrc, +- IN ULONG Length); +- +-VOID AtoH( +- PSTRING src, +- PUCHAR dest, +- int destlen); +- +-UCHAR BtoH( +- char ch); +- +-VOID RTMPPatchMacBbpBug( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPPatchCardBus( +- IN PRTMP_ADAPTER pAdapter); +- +-VOID RTMPPatchRalinkCardBus( +- IN PRTMP_ADAPTER pAdapter, +- IN ULONG Bus); +- +-ULONG RTMPReadCBConfig( +- IN ULONG Bus, +- IN ULONG Slot, +- IN ULONG Func, +- IN ULONG Offset); +- +-VOID RTMPWriteCBConfig( +- IN ULONG Bus, +- IN ULONG Slot, +- IN ULONG Func, +- IN ULONG Offset, +- IN ULONG Value); +- +-VOID RTMPInitTimer( +- IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, +- IN PVOID pData, +- IN BOOLEAN Repeat); +- +-VOID RTMPSetTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value); +- +- +-VOID RTMPModTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value); +- +-VOID RTMPCancelTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- OUT BOOLEAN *pCancelled); +- +-VOID RTMPSetLED( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Status); +- +-VOID RTMPSetSignalLED( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_802_11_RSSI Dbm); +- +- +-VOID RTMPEnableRxTx( +- IN PRTMP_ADAPTER pAd); +- +-// +-// prototype in action.c +-// +-VOID ActionStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID MlmeADDBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDELBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeInvalidAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-#ifdef DOT11_N_SUPPORT +-VOID PeerAddBAReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAddBARspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDelBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +-#endif // DOT11_N_SUPPORT // +- +-VOID SendPSMPAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR Psmp); +- +- +-VOID PeerRMAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-#ifdef CONFIG_STA_SUPPORT +-VOID StaPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Bss2040Coexist); +-#endif // CONFIG_STA_SUPPORT // +- +- +-VOID PeerBSSTranAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-#ifdef DOT11_N_SUPPORT +-VOID PeerHTAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +-#endif // DOT11_N_SUPPORT // +- +-VOID PeerQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-#ifdef QOS_DLS_SUPPORT +-VOID PeerDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +-#endif // QOS_DLS_SUPPORT // +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +-VOID DlsParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DLS_REQ_STRUCT *pDlsReq, +- IN PRT_802_11_DLS pDls, +- IN USHORT reason); +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +-VOID RECBATimerTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID ORIBATimerTimeout( +- IN PRTMP_ADAPTER pAd); +- +-VOID SendRefreshBAR( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +-#ifdef DOT11N_DRAFT3 +-VOID SendBSS2040CoexistMgmtAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR apidx, +- IN UCHAR InfoReq); +- +-VOID SendNotifyBWActionFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR apidx); +- +-BOOLEAN ChannelSwitchSanityCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR NewChannel, +- IN UCHAR Secondary); +- +-VOID ChannelSwitchAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR Channel, +- IN UCHAR Secondary); +- +-ULONG BuildIntolerantChannelRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest); +- +-VOID Update2040CoexistFrameAndNotify( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN BOOLEAN bAddIntolerantCha); +- +-VOID Send2040CoexistAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN BOOLEAN bAddIntolerantCha); +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-VOID ActHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, +- IN PUCHAR Addr2, +- IN PUCHAR Addr3); +- +-VOID BarHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, +- IN PUCHAR pDA, +- IN PUCHAR pSA); +- +-VOID InsertActField( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Category, +- IN UINT8 ActCode); +- +-BOOLEAN QosBADataParse( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bAMSDU, +- IN PUCHAR p8023Header, +- IN UCHAR WCID, +- IN UCHAR TID, +- IN USHORT Sequence, +- IN UCHAR DataOffset, +- IN USHORT Datasize, +- IN UINT CurRxIndex); +- +-#ifdef DOT11_N_SUPPORT +-BOOLEAN CntlEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, +- IN PFRAME_BA_REQ pMsg); +- +-VOID BaAutoManSwitch( +- IN PRTMP_ADAPTER pAd); +-#endif // DOT11_N_SUPPORT // +- +-VOID HTIOTCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BatRecIdx); +- +-// +-// Private routines in rtmp_data.c +-// +-BOOLEAN RTMPHandleRxDoneInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandleTxDoneInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap); +- +-VOID RTMPHandleMgmtRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandleTBTTInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandlePreTBTTInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-void RTMPHandleTwakeupInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandleRxCoherentInterrupt( +- IN PRTMP_ADAPTER pAd); +- +- +-BOOLEAN TxFrameIsAggregatible( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, +- IN PUCHAR p8023hdr); +- +-BOOLEAN PeerIsAggreOn( +- IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, +- IN PMAC_TABLE_ENTRY pMacEntry); +- +- +-NDIS_STATUS Sniff2BytesFromNdisBuffer( +- IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, +- OUT PUCHAR pByte1); +- +-NDIS_STATUS STASendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +-VOID STASendPackets( +- IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, +- IN UINT NumberOfPackets); +- +-VOID RTMPDeQueuePacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bIntContext, +- IN UCHAR QueIdx, +- IN UCHAR Max_Tx_Packets); +- +-NDIS_STATUS RTMPHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR QueIdx, +- OUT PULONG pFreeTXDLeft); +- +-NDIS_STATUS STAHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +-VOID STARxEAPOLFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-NDIS_STATUS RTMPFreeTXDRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType, +- IN UCHAR NumberRequired, +- IN PUCHAR FreeNumberIs); +- +-NDIS_STATUS MlmeHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-NDIS_STATUS MlmeHardTransmitMgmtRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-#ifdef RTMP_MAC_PCI +-NDIS_STATUS MlmeHardTransmitTxRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-NDIS_STATUS MlmeDataHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QSEL); +-#endif // RTMP_MAC_PCI // +- +-USHORT RTMPCalcDuration( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Rate, +- IN ULONG Size); +- +-VOID RTMPWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit); +- +- +-VOID RTMPWriteTxWI_Data( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk); +- +- +-VOID RTMPWriteTxWI_Cache( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk); +- +-VOID RTMPSuspendMsduTransmission( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPResumeMsduTransmission( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS MiniportMMRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PUCHAR pData, +- IN UINT Length); +- +-//+++mark by shiang, now this function merge to MiniportMMRequest() +-//---mark by shiang, now this function merge to MiniportMMRequest() +- +-VOID RTMPSendNullFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, +- IN BOOLEAN bQosNull); +- +-VOID RTMPSendDisassociationFrame( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPSendRTSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, +- IN UCHAR QueIdx, +- IN UCHAR FrameGap); +- +- +-NDIS_STATUS RTMPApplyPacketFilter( +- IN PRTMP_ADAPTER pAd, +- IN PRT28XX_RXD_STRUC pRxD, +- IN PHEADER_802_11 pHeader); +- +-PQUEUE_HEADER RTMPCheckTxSwQueue( +- IN PRTMP_ADAPTER pAd, +- OUT UCHAR *QueIdx); +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPReportMicError( +- IN PRTMP_ADAPTER pAd, +- IN PCIPHER_KEY pWpaKey); +- +-VOID WpaMicFailureReportFrame( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID WpaDisassocApAndBlockAssoc( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID WpaStaPairwiseKeySetting( +- IN PRTMP_ADAPTER pAd); +- +-VOID WpaStaGroupKeySetting( +- IN PRTMP_ADAPTER pAd); +- +-#endif // CONFIG_STA_SUPPORT // +- +-NDIS_STATUS RTMPCloneNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET *ppOutPacket); +- +-NDIS_STATUS RTMPAllocateNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET *pPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, +- IN UINT DataLen); +- +-VOID RTMPFreeNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +-BOOLEAN RTMPFreeTXDUponTxDmaDone( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx); +- +-BOOLEAN RTMPCheckDHCPFrame( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +- +-BOOLEAN RTMPCheckEtherType( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +- +-VOID RTMPCckBbpTuning( +- IN PRTMP_ADAPTER pAd, +- IN UINT TxRate); +- +-// +-// Private routines in rtmp_wep.c +-// +-VOID RTMPInitWepEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN UCHAR KeyLen, +- IN PUCHAR pDest); +- +-VOID RTMPEncryptData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDest, +- IN UINT Len); +- +-BOOLEAN RTMPDecryptData( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR pSrc, +- IN UINT Len, +- IN UINT idx); +- +-BOOLEAN RTMPSoftDecryptWEP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pGroupKey); +- +-VOID RTMPSetICV( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest); +- +-VOID ARCFOUR_INIT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pKey, +- IN UINT KeyLen); +- +-UCHAR ARCFOUR_BYTE( +- IN PARCFOURCONTEXT Ctx); +- +-VOID ARCFOUR_DECRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-VOID ARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-VOID WPAARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-UINT RTMP_CALC_FCS32( +- IN UINT Fcs, +- IN PUCHAR Cp, +- IN INT Len); +- +-// +-// MLME routines +-// +- +-// Asic/RF/BBP related functions +- +-VOID AsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateProtect( +- IN PRTMP_ADAPTER pAd, +- IN USHORT OperaionMode, +- IN UCHAR SetMask, +- IN BOOLEAN bDisableBGProtect, +- IN BOOLEAN bNonGFExist); +- +-VOID AsicSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN BOOLEAN bScan); +- +-VOID AsicLockChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) ; +- +-VOID AsicAntennaSelect( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); +- +-VOID AsicAntennaSetting( +- IN PRTMP_ADAPTER pAd, +- IN ABGBAND_STATE BandState); +- +-VOID AsicRfTuningExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-#ifdef CONFIG_STA_SUPPORT +- +-VOID AsicResetBBPAgent( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- +-VOID AsicForceSleep( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx); +-#endif // CONFIG_STA_SUPPORT // +- +-VOID AsicSetBssid( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid); +- +-VOID AsicSetMcastWC( +- IN PRTMP_ADAPTER pAd); +- +- +-VOID AsicDelWcidTab( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid); +- +-VOID AsicEnableRDG( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicDisableRDG( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicDisableSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicEnableBssSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicEnableIbssSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicSetEdcaParm( +- IN PRTMP_ADAPTER pAd, +- IN PEDCA_PARM pEdcaParm); +- +-VOID AsicSetSlotTime( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUseShortSlotTime); +- +- +-VOID AsicAddSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic); +- +-VOID AsicRemoveSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx); +- +-VOID AsicUpdateWCIDAttribute( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR CipherAlg, +- IN BOOLEAN bUsePairewiseKeyTable); +- +-VOID AsicUpdateWCIDIVEIV( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN ULONG uIV, +- IN ULONG uEIV); +- +-VOID AsicUpdateRxWCIDTable( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN PUCHAR pAddr); +- +-VOID AsicAddKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN PCIPHER_KEY pCipherKey, +- IN BOOLEAN bUsePairewiseKeyTable, +- IN BOOLEAN bTxKey); +- +-VOID AsicAddPairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, +- IN CIPHER_KEY *pCipherKey); +- +-VOID AsicRemovePairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR Wcid); +- +-BOOLEAN AsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1); +- +- +-#ifdef RTMP_MAC_PCI +-BOOLEAN AsicCheckCommanOk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command); +-#endif // RTMP_MAC_PCI // +- +-VOID MacAddrRandomBssid( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pAddr); +- +-VOID MgtMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid); +- +-VOID MlmeRadioOff( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +- +-VOID BssTableInit( +- IN BSS_TABLE *Tab); +- +-#ifdef DOT11_N_SUPPORT +-VOID BATableInit( +- IN PRTMP_ADAPTER pAd, +- IN BA_TABLE *Tab); +-#endif // DOT11_N_SUPPORT // +- +-ULONG BssTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel); +- +-ULONG BssSsidTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel); +- +-ULONG BssTableSearchWithSSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel); +- +-ULONG BssSsidTableSearchBySSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen); +- +-VOID BssTableDeleteEntry( +- IN OUT PBSS_TABLE pTab, +- IN PUCHAR pBssid, +- IN UCHAR Channel); +- +-#ifdef DOT11_N_SUPPORT +-VOID BATableDeleteORIEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY *pBAORIEntry); +- +-VOID BATableDeleteRECEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN BA_REC_ENTRY *pBARECEntry); +- +-VOID BATableTearORIEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR TID, +- IN UCHAR Wcid, +- IN BOOLEAN bForceDelete, +- IN BOOLEAN ALL); +- +-VOID BATableTearRECEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR TID, +- IN UCHAR WCID, +- IN BOOLEAN ALL); +-#endif // DOT11_N_SUPPORT // +- +-VOID BssEntrySet( +- IN PRTMP_ADAPTER pAd, +- OUT PBSS_ENTRY pBss, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN PCF_PARM CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE); +- +-ULONG BssTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT PBSS_TABLE pTab, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN CF_PARM *CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE); +- +-#ifdef DOT11_N_SUPPORT +-VOID BATableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Aid, +- IN USHORT TimeOutValue, +- IN USHORT StartingSeq, +- IN UCHAR TID, +- IN UCHAR BAWinSize, +- IN UCHAR OriginatorStatus, +- IN BOOLEAN IsRecipient); +- +-#ifdef DOT11N_DRAFT3 +-VOID Bss2040CoexistTimeOut( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +- +-VOID TriEventInit( +- IN PRTMP_ADAPTER pAd); +- +-ULONG TriEventTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT TRIGGER_EVENT_TAB *Tab, +- IN PUCHAR pBssid, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN UCHAR RegClass, +- IN UCHAR ChannelNo); +- +-VOID TriEventCounterMaintenance( +- IN PRTMP_ADAPTER pAd); +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-VOID BssTableSsidSort( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *OutTab, +- IN CHAR Ssid[], +- IN UCHAR SsidLen); +- +-VOID BssTableSortByRssi( +- IN OUT BSS_TABLE *OutTab); +- +-VOID BssCipherParse( +- IN OUT PBSS_ENTRY pBss); +- +-NDIS_STATUS MlmeQueueInit( +- IN MLME_QUEUE *Queue); +- +-VOID MlmeQueueDestroy( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MlmeEnqueue( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg); +- +-BOOLEAN MlmeEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, +- IN PVOID Msg, +- IN UCHAR Signal); +- +- +-BOOLEAN MlmeDequeue( +- IN MLME_QUEUE *Queue, +- OUT MLME_QUEUE_ELEM **Elem); +- +-VOID MlmeRestartStateMachine( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeQueueEmpty( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MlmeQueueFull( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType); +- +-VOID StateMachineInit( +- IN STATE_MACHINE *Sm, +- IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, +- IN ULONG Base); +- +-VOID StateMachineSetAction( +- IN STATE_MACHINE *S, +- IN ULONG St, +- ULONG Msg, +- IN STATE_MACHINE_FUNC F); +- +-VOID StateMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Drop( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID AssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID ReassocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID AssocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID DisassocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-//---------------------------------------------- +-VOID MlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeAssocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeReassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAssocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerReassocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDisassocAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID DisassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID AssocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ReassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Cls3errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-VOID InvalidStateWhenAssoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenReassoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenDisassociate( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +- +-VOID ComposePsPoll( +- IN PRTMP_ADAPTER pAd); +- +-VOID ComposeNullFrame( +- IN PRTMP_ADAPTER pAd); +- +-VOID AssocPostProc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN USHORT CapabilityInfo, +- IN USHORT Aid, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN PEDCA_PARM pEdcaParm, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID AuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID AuthTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID MlmeAuthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAuthRspAtSeq2Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAuthRspAtSeq4Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID AuthTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Cls2errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-VOID MlmeDeauthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenAuth( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-//============================================= +- +-VOID AuthRspStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, +- IN STATE_MACHINE_FUNC Trans[]); +- +-VOID PeerDeauthAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAuthSimpleRspGenAndSend( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, +- IN USHORT Status); +- +-// +-// Private routines in dls.c +-// +- +-#ifdef CONFIG_STA_SUPPORT +-#ifdef QOS_DLS_SUPPORT +-void DlsStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID MlmeDlsReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDlsReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDlsRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDlsTearDownAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDlsTearDownAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID RTMPCheckDLSTimeOut( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN RTMPRcvFrameDLSCheck( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN ULONG Len, +- IN PRT28XX_RXD_STRUC pRxD); +- +-INT RTMPCheckDLSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA); +- +-VOID RTMPSendDLSTearDownFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA); +- +-NDIS_STATUS RTMPSendSTAKeyRequest( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA); +- +-NDIS_STATUS RTMPSendSTAKeyHandShake( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA); +- +-VOID DlsTimeoutAction( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-BOOLEAN MlmeDlsReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PRT_802_11_DLS *pDLS, +- OUT PUSHORT pReason); +- +-INT Set_DlsEntryInfo_Display_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-MAC_TABLE_ENTRY *MacTableInsertDlsEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UINT DlsEntryIdx); +- +-BOOLEAN MacTableDeleteDlsEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr); +- +-MAC_TABLE_ENTRY *DlsEntryTableLookup( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount); +- +-MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR wcid, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount); +- +-INT Set_DlsAddEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_DlsTearDownEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // QOS_DLS_SUPPORT // +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef QOS_DLS_SUPPORT +-BOOLEAN PeerDlsReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pDlsTimeout, +- OUT UCHAR *pRatesLen, +- OUT UCHAR Rates[], +- OUT UCHAR *pHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability); +- +-BOOLEAN PeerDlsRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT UCHAR *pRatesLen, +- OUT UCHAR Rates[], +- OUT UCHAR *pHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability); +- +-BOOLEAN PeerDlsTearDownSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pDA, +- OUT PUCHAR pSA, +- OUT USHORT *pReason); +-#endif // QOS_DLS_SUPPORT // +- +-//======================================== +- +-VOID SyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID BeaconTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID ScanTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID MlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenScan( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenJoin( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenStart( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeacon( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID EnqueueProbeRequest( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN ScanRunning( +- IN PRTMP_ADAPTER pAd); +-//========================================= +- +-VOID MlmeCntlInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID MlmeCntlMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlIdleProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlOidScanProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlOidSsidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlOidRTBssidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlMlmeRoamingProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlWaitDisassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitJoinProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitReassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitStartProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAuthProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAuthProc2( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAssocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-#ifdef QOS_DLS_SUPPORT +-VOID CntlOidDLSSetupProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +-#endif // QOS_DLS_SUPPORT // +- +-VOID LinkUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssType); +- +-VOID LinkDown( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN IsReqFromAP); +- +-VOID IterateOnBssTab( +- IN PRTMP_ADAPTER pAd); +- +-VOID IterateOnBssTab2( +- IN PRTMP_ADAPTER pAd);; +- +-VOID JoinParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, +- IN ULONG BssIdx); +- +-VOID AssocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, +- IN USHORT ListenIntv); +- +-VOID ScanParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN UCHAR ScanType); +- +-VOID DisassocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, +- IN PUCHAR pAddr, +- IN USHORT Reason); +- +-VOID StartParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT *StartReq, +- IN CHAR Ssid[], +- IN UCHAR SsidLen); +- +-VOID AuthParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, +- IN PUCHAR pAddr, +- IN USHORT Alg); +- +-VOID EnqueuePsPoll( +- IN PRTMP_ADAPTER pAd); +- +-VOID EnqueueBeaconFrame( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeJoinReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeStartReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ScanTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID BeaconTimeoutAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeaconAtScanAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeaconAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeacon( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerProbeReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ScanNextChannel( +- IN PRTMP_ADAPTER pAd); +- +-ULONG MakeIbssBeacon( +- IN PRTMP_ADAPTER pAd); +- +-VOID CCXAdjacentAPReport( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeScanReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT UCHAR *BssType, +- OUT CHAR ssid[], +- OUT UCHAR *SsidLen, +- OUT UCHAR *ScanType); +- +-BOOLEAN PeerBeaconAndProbeRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- IN UCHAR MsgChannel, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pBssType, +- OUT USHORT *pBeaconPeriod, +- OUT UCHAR *pChannel, +- OUT UCHAR *pNewChannel, +- OUT LARGE_INTEGER *pTimestamp, +- OUT CF_PARM *pCfParm, +- OUT USHORT *pAtimWin, +- OUT USHORT *pCapabilityInfo, +- OUT UCHAR *pErp, +- OUT UCHAR *pDtimCount, +- OUT UCHAR *pDtimPeriod, +- OUT UCHAR *pBcastFlag, +- OUT UCHAR *pMessageToMe, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT UCHAR *pCkipFlag, +- OUT UCHAR *pAironetCellPowerLimit, +- OUT PEDCA_PARM pEdcaParm, +- OUT PQBSS_LOAD_PARM pQbssLoad, +- OUT PQOS_CAPABILITY_PARM pQosCapability, +- OUT ULONG *pRalinkIe, +- OUT UCHAR *pHtCapabilityLen, +-#ifdef CONFIG_STA_SUPPORT +- OUT UCHAR *pPreNHtCapabilityLen, +-#endif // CONFIG_STA_SUPPORT // +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT UCHAR *AddHtInfoLen, +- OUT ADD_HT_INFO_IE *AddHtInfo, +- OUT UCHAR *NewExtChannel, +- OUT USHORT *LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE); +- +-BOOLEAN PeerAddBAReqActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2); +- +-BOOLEAN PeerAddBARspActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen); +- +-BOOLEAN PeerDelBAActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN VOID *pMsg, +- IN ULONG MsgLen); +- +-BOOLEAN MlmeAssocReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT *CapabilityInfo, +- OUT ULONG *Timeout, +- OUT USHORT *ListenIntv); +- +-BOOLEAN MlmeAuthReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG *Timeout, +- OUT USHORT *Alg); +- +-BOOLEAN MlmeStartReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], +- OUT UCHAR *Ssidlen); +- +-BOOLEAN PeerAuthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT *Alg, +- OUT USHORT *Seq, +- OUT USHORT *Status, +- OUT CHAR ChlgText[]); +- +-BOOLEAN PeerAssocRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT USHORT *pAid, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pAddHtInfoLen, +- OUT UCHAR *pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, +- OUT UCHAR *pCkipFlag); +- +-BOOLEAN PeerDisassocSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN PeerWpaMessageSanity( +- IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, +- IN MAC_TABLE_ENTRY *pEntry); +- +-BOOLEAN PeerDeauthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN PeerProbeReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen); +- +-BOOLEAN GetTimBit( +- IN CHAR *Ptr, +- IN USHORT Aid, +- OUT UCHAR *TimLen, +- OUT UCHAR *BcastFlag, +- OUT UCHAR *DtimCount, +- OUT UCHAR *DtimPeriod, +- OUT UCHAR *MessageToMe); +- +-UCHAR ChannelSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel); +- +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( +- IN PBSS_ENTRY pBss); +- +- +-BOOLEAN MlmeDelBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen); +- +-BOOLEAN MlmeAddBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2); +- +-ULONG MakeOutgoingFrame( +- OUT UCHAR *Buffer, +- OUT ULONG *Length, ...); +- +-VOID LfsrInit( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Seed); +- +-UCHAR RandomByte( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateAutoFallBackTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pTxRate); +- +-VOID MlmePeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID LinkDownExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID LinkUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID STAMlmePeriodicExec( +- PRTMP_ADAPTER pAd); +- +-VOID MlmeAutoScan( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeAutoReconnectLastSSID( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeValidateSSID( +- IN PUCHAR pSsid, +- IN UCHAR SsidLen); +- +-VOID MlmeCheckForRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32); +- +-BOOLEAN MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeDynamicTxRateSwitching( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeSetTxRate( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PRTMP_TX_RATE_SWITCH pTxRate); +- +-VOID MlmeSelectTxRateTable( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR *ppTable, +- IN PUCHAR pTableSize, +- IN PUCHAR pInitTxRateIdx); +- +-VOID MlmeCalculateChannelQuality( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, +- IN ULONG Now); +- +-VOID MlmeCheckPsmChange( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32); +- +-VOID MlmeSetPsmBit( +- IN PRTMP_ADAPTER pAd, +- IN USHORT psm); +- +-VOID MlmeSetTxPreamble( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TxPreamble); +- +-VOID UpdateBasicRateBitmap( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeUpdateTxRates( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bLinkUp, +- IN UCHAR apidx); +- +-#ifdef DOT11_N_SUPPORT +-VOID MlmeUpdateHtTxRates( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx); +-#endif // DOT11_N_SUPPORT // +- +-VOID RTMPCheckRates( +- IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], +- IN OUT UCHAR *SupRateLen); +- +-#ifdef CONFIG_STA_SUPPORT +-BOOLEAN RTMPCheckChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, +- IN UCHAR Channel); +-#endif // CONFIG_STA_SUPPORT // +- +-BOOLEAN RTMPCheckHt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN OUT HT_CAPABILITY_IE *pHtCapability, +- IN OUT ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID StaQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID AsicBbpTuning1( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicBbpTuning2( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPUpdateMlmeRate( +- IN PRTMP_ADAPTER pAd); +- +-CHAR RTMPMaxRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2); +- +-#ifdef RT30xx +-VOID AsicSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant); +- +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd); +- +-#ifdef RTMP_EFUSE_SUPPORT +-//2008/09/11:KH add to support efuse<-- +-INT set_eFuseGetFreeBlockCount_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT set_eFuseLoadFromBin_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-VOID eFusePhysicalReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-int RtmpEfuseSupportCheck( +- IN RTMP_ADAPTER *pAd); +- +-INT set_eFuseBufferModeWriteBack_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT eFuseLoadEEPROM( +- IN PRTMP_ADAPTER pAd); +- +-INT eFuseWriteEeeppromBuf( +- IN PRTMP_ADAPTER pAd); +- +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, +- PUINT EfuseFreeBlock); +- +-INT eFuse_init( +- IN PRTMP_ADAPTER pAd); +- +-NTSTATUS eFuseRead( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT Length); +- +-NTSTATUS eFuseWrite( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length); +-//2008/09/11:KH add to support efuse--> +-#endif // RTMP_EFUSE_SUPPORT // +- +-// add by johnli, RF power sequence setup +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT30xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT30xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); +-// end johnli +- +- +-#ifdef RT3090 +-VOID NICInitRT3090RFRegisters( +- IN RTMP_ADAPTER *pAd); +-#endif // RT3090 // +- +-VOID RT30xxHaltAction( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT30xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant); +-#endif // RT30xx // +-#ifdef RT33xx +-VOID RT33xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT33xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT33xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); +- +-#ifdef RT3370 +-VOID NICInitRT3370RFRegisters( +- IN RTMP_ADAPTER *pAd); +-#endif // RT3070 // +- +-#ifdef RT3390 +-VOID NICInitRT3390RFRegisters( +- IN RTMP_ADAPTER *pAd); +-#endif // RT3090 // +- +-VOID RT33xxHaltAction( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT33xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant); +- +-#endif // RT33xx // +- +- +- +-VOID AsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicRxAntEvalTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID APSDPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry); +- +-UCHAR RTMPStaFixedTxMode( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry); +- +-VOID RTMPUpdateLegacyTxSetting( +- UCHAR fixed_tx_mode, +- PMAC_TABLE_ENTRY pEntry); +- +-BOOLEAN RTMPAutoRateSwitchCheck( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS MlmeInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeHandler( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeHalt( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeResetRalinkCounters( +- IN PRTMP_ADAPTER pAd); +- +-VOID BuildChannelList( +- IN PRTMP_ADAPTER pAd); +- +-UCHAR FirstChannel( +- IN PRTMP_ADAPTER pAd); +- +-UCHAR NextChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel); +- +-VOID ChangeToCellPowerLimit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit); +- +-// +-// Prototypes of function definition in rtmp_tkip.c +-// +-VOID RTMPInitTkipEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pTKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, +- OUT PULONG pIV16, +- OUT PULONG pIV32); +- +-VOID RTMPInitMICEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN UCHAR UserPriority, +- IN PUCHAR pMICKey); +- +-BOOLEAN RTMPTkipCompareMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, +- IN UINT Len); +- +-VOID RTMPCalculateMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, +- IN UCHAR apidx); +- +-BOOLEAN RTMPTkipCompareMICValueWithLLC( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pLLC, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UINT Len); +- +-VOID RTMPTkipAppendByte( +- IN PTKIP_KEY_INFO pTkip, +- IN UCHAR uChar); +- +-VOID RTMPTkipAppend( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pSrc, +- IN UINT nBytes); +- +-VOID RTMPTkipGetMIC( +- IN PTKIP_KEY_INFO pTkip); +- +-BOOLEAN RTMPSoftDecryptTKIP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, +- IN PCIPHER_KEY pWpaKey); +- +-BOOLEAN RTMPSoftDecryptAES( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pWpaKey); +- +- +- +-// +-// Prototypes of function definition in cmm_info.c +-// +-INT RT_CfgSetCountryRegion( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg, +- IN INT band); +- +-INT RT_CfgSetWirelessMode( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT RT_CfgSetShortSlot( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT RT_CfgSetWepKey( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY *pSharedKey, +- IN INT keyIdx); +- +-INT RT_CfgSetWPAPSKKey( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING keyString, +- IN UCHAR *pHashStr, +- IN INT hashStrLen, +- OUT PUCHAR pPMKBuf); +- +- +- +-// +-// Prototypes of function definition in cmm_info.c +-// +-NDIS_STATUS RTMPWPARemoveKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf); +- +-VOID RTMPWPARemoveAllKeys( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN RTMPCheckStrPrintAble( +- IN CHAR *pInPutStr, +- IN UCHAR strLen); +- +-VOID RTMPSetPhyMode( +- IN PRTMP_ADAPTER pAd, +- IN ULONG phymode); +- +-VOID RTMPUpdateHTIE( +- IN RT_HT_CAPABILITY *pRtHt, +- IN UCHAR *pMcsSet, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID RTMPAddWcidAttributeEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN MAC_TABLE_ENTRY *pEntry); +- +-PSTRING GetEncryptType( +- CHAR enc); +- +-PSTRING GetAuthMode( +- CHAR auth); +- +- +-VOID RTMPIndicateWPA2Status( +- IN PRTMP_ADAPTER pAdapter); +- +-VOID RTMPOPModeSwitching( +- IN PRTMP_ADAPTER pAd); +- +- +-#ifdef DOT11_N_SUPPORT +-VOID RTMPSetHT( +- IN PRTMP_ADAPTER pAd, +- IN OID_SET_HT_PHYMODE *pHTPhyMode); +- +-VOID RTMPSetIndividualHT( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx); +-#endif // DOT11_N_SUPPORT // +- +-VOID RTMPSendWirelessEvent( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Event_flag, +- IN PUCHAR pAddr, +- IN UCHAR BssIdx, +- IN CHAR Rssi); +- +-VOID NICUpdateCntlCounters( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN UCHAR SubType, +- IN PRXWI_STRUC pRxWI); +- +-VOID DBGPRINT_TX_RING( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx); +- +-VOID DBGPRINT_RX_RING( +- IN PRTMP_ADAPTER pAd); +- +-CHAR ConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber); +- +- +-#ifdef DOT11N_DRAFT3 +-VOID BuildEffectedChannelList( +- IN PRTMP_ADAPTER pAd); +-#endif // DOT11N_DRAFT3 // +- +- +-VOID APAsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd); +- +-#ifdef ANT_DIVERSITY_SUPPORT +-VOID APAsicAntennaAvg( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR AntSelect, +- IN SHORT *RssiAvg); +-#endif // ANT_DIVERSITY_SUPPORT // +- +-VOID APAsicRxAntEvalTimeout( +- IN PRTMP_ADAPTER pAd); +- +-/*=================================== +- Function prototype in cmm_wpa.c +- =================================== */ +-VOID RTMPToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN BOOLEAN bClearFrame); +- +-VOID WpaDerivePTK( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *PMK, +- IN UCHAR *ANonce, +- IN UCHAR *AA, +- IN UCHAR *SNonce, +- IN UCHAR *SA, +- OUT UCHAR *output, +- IN UINT len); +- +-VOID GenRandom( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *macAddr, +- OUT UCHAR *random); +- +-BOOLEAN RTMPCheckWPAframe( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, +- IN UCHAR FromWhichBSSID); +- +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UINT32 c_len, +- IN UCHAR *ciphertext); +- +-BOOLEAN RTMPParseEapolKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, +- IN BOOLEAN bWPA2, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID ConstructEapolMsg( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *KeyNonce, +- IN UCHAR *TxRSC, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_Len, +- OUT PEAPOL_PACKET pMsg); +- +-NDIS_STATUS RTMPSoftDecryptBroadCastData( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, +- IN PCIPHER_KEY pShard_key); +- +-VOID RTMPMakeRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, +- IN UINT WepStatus, +- IN UCHAR apidx); +- +-// +-// function prototype in ap_wpa.c +-// +-VOID RTMPGetTxTscFromAsic( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx, +- OUT PUCHAR pTxTsc); +- +-VOID APInstallPairwiseKey( +- PRTMP_ADAPTER pAd, +- PMAC_TABLE_ENTRY pEntry); +- +-MAC_TABLE_ENTRY *PACInquiry( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid); +- +-UINT APValidateRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pRsnIe, +- IN UCHAR rsnie_len); +- +-VOID HandleCounterMeasure( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID WPAStart4WayHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN ULONG TimeInterval); +- +-VOID WPAStart2WayGroupHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID PeerPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg4Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerGroupMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN VOID *Msg, +- IN UINT MsgLen); +- +-VOID CMTimerExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID WPARetryExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID EnqueueStartForPSKExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RTMPHandleSTAKey( +- IN PRTMP_ADAPTER pAdapter, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PairDisAssocAction( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN USHORT Reason); +- +-VOID MlmeDeAuthAction( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN USHORT Reason); +- +-VOID GREKEYPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID WpaDeriveGTK( +- IN UCHAR *PMK, +- IN UCHAR *GNonce, +- IN UCHAR *AA, +- OUT UCHAR *output, +- IN UINT len); +- +-VOID AES_GTK_KEY_WRAP( +- IN UCHAR *key, +- IN UCHAR *plaintext, +- IN UINT32 p_len, +- OUT UCHAR *ciphertext); +- +-VOID AES_128_CMAC( +- IN PUCHAR key, +- IN PUCHAR input, +- IN INT len, +- OUT PUCHAR mac); +- +-VOID WpaSend( +- IN PRTMP_ADAPTER pAdapter, +- IN PUCHAR pPacket, +- IN ULONG Len); +- +-VOID RTMPAddPMKIDCache( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx, +- IN PUCHAR pAddr, +- IN UCHAR *PMKID, +- IN UCHAR *PMK); +- +-INT RTMPSearchPMKIDCache( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx, +- IN PUCHAR pAddr); +- +-VOID RTMPDeletePMKIDCache( +- IN PRTMP_ADAPTER pAd, +- IN INT apidx, +- IN INT idx); +- +-VOID RTMPMaintainPMKIDCache( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPSendTriggerFrame( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuffer, +- IN ULONG Length, +- IN UCHAR TxRate, +- IN BOOLEAN bQosNull); +- +-//typedef void (*TIMER_FUNCTION)(unsigned long); +- +- +-/* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +-VOID RTMP_OS_Init_Timer( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN TIMER_FUNCTION function, +- IN PVOID data); +- +-VOID RTMP_OS_Add_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +-VOID RTMP_OS_Mod_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +- +-VOID RTMP_OS_Del_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- OUT BOOLEAN *pCancelled); +- +- +-VOID RTMP_OS_Release_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PQUEUE_ENTRY pEntry); +- +-VOID RTMPusecDelay( +- IN ULONG usec); +- +-NDIS_STATUS os_alloc_mem( +- IN RTMP_ADAPTER *pAd, +- OUT UCHAR **mem, +- IN ULONG size); +- +-NDIS_STATUS os_free_mem( +- IN PRTMP_ADAPTER pAd, +- IN PVOID mem); +- +- +-void RTMP_AllocateSharedMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd); +- +-void RTMP_AllocateTxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_FreeFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateMgmtDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_FreeDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-PNDIS_PACKET RtmpOSNetPktAlloc( +- IN RTMP_ADAPTER *pAd, +- IN int size); +- +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress); +- +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length); +- +-void RTMP_QueryPacketInfo( +- IN PNDIS_PACKET pPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen); +- +-void RTMP_QueryNextPacketInfo( +- IN PNDIS_PACKET *ppPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen); +- +- +-BOOLEAN RTMP_FillTxBlkInfo( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk); +- +- +-PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg); +- +- +- void announce_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +- +-UINT BA_Reorder_AMSDU_Annnounce( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +- +-UINT Handle_AMSDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID); +- +- +-void convert_802_11_to_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR p8023hdr, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID); +- +- +-PNET_DEV get_netdev_from_bssid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR FromWhichBSSID); +- +- +-PNDIS_PACKET duplicate_pkt( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID); +- +- +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pOldPkt); +- +-PNDIS_PACKET duplicate_pkt_with_VLAN( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID); +- +- +-UCHAR VLAN_8023_Header_Copy( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- OUT PUCHAR pData, +- IN UCHAR FromWhichBSSID); +- +-#ifdef DOT11_N_SUPPORT +-void ba_flush_reordering_timeout_mpdus( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32); +- +- +-VOID BAOriSessionSetUp( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, +- IN BOOLEAN isForced); +- +-VOID BASessionTearDownALL( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid); +-#endif // DOT11_N_SUPPORT // +- +-BOOLEAN OS_Need_Clone_Packet(void); +- +- +-VOID build_tx_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, +- IN ULONG FrameLen); +- +- +-VOID BAOriSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive, +- IN BOOLEAN bForceSend); +- +-VOID BARecSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive); +- +-BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); +-void ba_reordering_resource_release(PRTMP_ADAPTER pAd); +- +- +- +-#ifdef NINTENDO_AP +-VOID InitNINTENDO_TABLE( +- IN PRTMP_ADAPTER pAd); +- +-UCHAR CheckNINTENDO_TABLE( +- IN PRTMP_ADAPTER pAd, +- PCHAR pDS_Ssid, +- UCHAR DS_SsidLen, +- PUCHAR pDS_Addr); +- +-UCHAR DelNINTENDO_ENTRY( +- IN PRTMP_ADAPTER pAd, +- UCHAR * pDS_Addr); +- +-VOID RTMPIoctlNintendoCapable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlNintendoGetTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlNintendoSetTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq); +- +-#endif // NINTENDO_AP // +- +-BOOLEAN rtstrmactohex( +- IN PSTRING s1, +- IN PSTRING s2); +- +-BOOLEAN rtstrcasecmp( +- IN PSTRING s1, +- IN PSTRING s2); +- +-PSTRING rtstrstruncasecmp( +- IN PSTRING s1, +- IN PSTRING s2); +- +-PSTRING rtstrstr( +- IN const PSTRING s1, +- IN const PSTRING s2); +- +-PSTRING rstrtok( +- IN PSTRING s, +- IN const PSTRING ct); +- +-int rtinet_aton( +- const PSTRING cp, +- unsigned int *addr); +- +-////////// common ioctl functions ////////// +-INT Set_DriverVersion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ShortSlot_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef AGGREGATION_SUPPORT +-INT Set_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef INF_AMAZON_PPA +-INT Set_INF_AMAZON_SE_PPA_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +- +-#endif // INF_AMAZON_PPA // +- +-INT Set_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef DBG +-INT Set_Debug_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif +- +-INT Show_DescInfo_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ResetStatCounter_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef DOT11_N_SUPPORT +-INT Set_BASetup_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BADecline_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BAOriTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BARecTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtStbc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtHtc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtLinkAdapt_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtProtect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMimoPs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_ForceShortGI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ForceGF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT SetCommonHT( +- IN PRTMP_ADAPTER pAd); +- +-INT Set_SendPSMPAction_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMIMOPSmode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_HtTxBASize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtDisallowTKIP_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#endif // DOT11_N_SUPPORT // +- +- +- +-#ifdef CONFIG_STA_SUPPORT +-//Dls , kathy +-VOID RTMPSendDLSTearDownFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA); +- +-#ifdef DOT11_N_SUPPORT +-//Block ACK +-VOID QueryBATABLE( +- IN PRTMP_ADAPTER pAd, +- OUT PQUERYBA_TABLE pBAT); +-#endif // DOT11_N_SUPPORT // +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-INT WpaCheckEapCode( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, +- IN USHORT FrameLen, +- IN USHORT OffSet); +- +-VOID WpaSendMicFailureToWpaSupplicant( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUnicast); +- +-VOID SendAssocIEsToWpaSupplicant( +- IN PRTMP_ADAPTER pAd); +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-int wext_notify_event_assoc( +- IN RTMP_ADAPTER *pAd); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +-#ifdef DOT11_N_SUPPORT +-VOID Handle_BSS_Width_Trigger_Events( +- IN PRTMP_ADAPTER pAd); +- +-void build_ext_channel_switch_ie( +- IN PRTMP_ADAPTER pAd, +- IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE); +-#endif // DOT11_N_SUPPORT // +- +- +-BOOLEAN APRxDoneInterruptHandle( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN STARxDoneInterruptHandle( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN argc); +- +-#ifdef DOT11_N_SUPPORT +-// AMPDU packet indication +-VOID Indicate_AMPDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-// AMSDU packet indication +-VOID Indicate_AMSDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +-#endif // DOT11_N_SUPPORT // +- +-// Normal legacy Rx packet indication +-VOID Indicate_Legacy_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID Indicate_EAPOL_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-void update_os_packet_info( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-void wlan_802_11_to_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID); +- +-UINT deaggregate_AMSDU_announce( +- IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize); +- +- +-#ifdef CONFIG_STA_SUPPORT +-// remove LLC and get 802_3 Header +-#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ +-{ \ +- PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \ +- \ +- if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \ +- { \ +- _pDA = _pRxBlk->pHeader->Addr3; \ +- _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \ +- } \ +- else \ +- { \ +- if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \ +- { \ +- _pDA = _pRxBlk->pHeader->Addr1; \ +- if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \ +- _pSA = _pRxBlk->pHeader->Addr2; \ +- else \ +- _pSA = _pRxBlk->pHeader->Addr3; \ +- } \ +- else \ +- { \ +- _pDA = _pRxBlk->pHeader->Addr1; \ +- _pSA = _pRxBlk->pHeader->Addr2; \ +- } \ +- } \ +- \ +- CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \ +- _pRxBlk->DataSize, _pRemovedLLCSNAP); \ +-} +-#endif // CONFIG_STA_SUPPORT // +- +- +-BOOLEAN APFowardWirelessStaToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN ULONG FromWhichBSSID); +- +-VOID Announce_or_Forward_802_3_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); +- +-VOID Sta_Announce_or_Forward_802_3_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); +- +- +-#ifdef CONFIG_STA_SUPPORT +-#define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ +- Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); +- //announce_802_3_packet(_pAd, _pPacket); +-#endif // CONFIG_STA_SUPPORT // +- +- +-PNDIS_PACKET DuplicatePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); +- +- +-PNDIS_PACKET ClonePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize); +- +- +-// Normal, AMPDU or AMSDU +-VOID CmmRxnonRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID CmmRxRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID Update_Rssi_Sample( +- IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE *pRssi, +- IN PRXWI_STRUC pRxWI); +- +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending); +- +-PNDIS_PACKET RTMPDeFragmentDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk); +- +-//////////////////////////////////////// +- +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +- +- +- +- +-#ifdef SNMP_SUPPORT +-//for snmp , kathy +-typedef struct _DefaultKeyIdxValue +-{ +- UCHAR KeyIdx; +- UCHAR Value[16]; +-} DefaultKeyIdxValue, *PDefaultKeyIdxValue; +-#endif +- +- +-#ifdef CONFIG_STA_SUPPORT +-enum { +- DIDmsg_lnxind_wlansniffrm = 0x00000044, +- DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, +- DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044, +- DIDmsg_lnxind_wlansniffrm_channel = 0x00030044, +- DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044, +- DIDmsg_lnxind_wlansniffrm_sq = 0x00050044, +- DIDmsg_lnxind_wlansniffrm_signal = 0x00060044, +- DIDmsg_lnxind_wlansniffrm_noise = 0x00070044, +- DIDmsg_lnxind_wlansniffrm_rate = 0x00080044, +- DIDmsg_lnxind_wlansniffrm_istx = 0x00090044, +- DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044 +-}; +-enum { +- P80211ENUM_msgitem_status_no_value = 0x00 +-}; +-enum { +- P80211ENUM_truth_false = 0x00, +- P80211ENUM_truth_true = 0x01 +-}; +- +-/* Definition from madwifi */ +-typedef struct { +- UINT32 did; +- UINT16 status; +- UINT16 len; +- UINT32 data; +-} p80211item_uint32_t; +- +-typedef struct { +- UINT32 msgcode; +- UINT32 msglen; +-#define WLAN_DEVNAMELEN_MAX 16 +- UINT8 devname[WLAN_DEVNAMELEN_MAX]; +- p80211item_uint32_t hosttime; +- p80211item_uint32_t mactime; +- p80211item_uint32_t channel; +- p80211item_uint32_t rssi; +- p80211item_uint32_t sq; +- p80211item_uint32_t signal; +- p80211item_uint32_t noise; +- p80211item_uint32_t rate; +- p80211item_uint32_t istx; +- p80211item_uint32_t frmlen; +-} wlan_ng_prism2_header; +- +-/* The radio capture header precedes the 802.11 header. */ +-typedef struct PACKED _ieee80211_radiotap_header { +- UINT8 it_version; /* Version 0. Only increases +- * for drastic changes, +- * introduction of compatible +- * new fields does not count. +- */ +- UINT8 it_pad; +- UINT16 it_len; /* length of the whole +- * header in bytes, including +- * it_version, it_pad, +- * it_len, and data fields. +- */ +- UINT32 it_present; /* A bitmap telling which +- * fields are present. Set bit 31 +- * (0x80000000) to extend the +- * bitmap by another 32 bits. +- * Additional extensions are made +- * by setting bit 31. +- */ +-}ieee80211_radiotap_header ; +- +-enum ieee80211_radiotap_type { +- IEEE80211_RADIOTAP_TSFT = 0, +- IEEE80211_RADIOTAP_FLAGS = 1, +- IEEE80211_RADIOTAP_RATE = 2, +- IEEE80211_RADIOTAP_CHANNEL = 3, +- IEEE80211_RADIOTAP_FHSS = 4, +- IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, +- IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, +- IEEE80211_RADIOTAP_LOCK_QUALITY = 7, +- IEEE80211_RADIOTAP_TX_ATTENUATION = 8, +- IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, +- IEEE80211_RADIOTAP_DBM_TX_POWER = 10, +- IEEE80211_RADIOTAP_ANTENNA = 11, +- IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, +- IEEE80211_RADIOTAP_DB_ANTNOISE = 13 +-}; +- +-#define WLAN_RADIOTAP_PRESENT ( \ +- (1 << IEEE80211_RADIOTAP_TSFT) | \ +- (1 << IEEE80211_RADIOTAP_FLAGS) | \ +- (1 << IEEE80211_RADIOTAP_RATE) | \ +- 0) +- +-typedef struct _wlan_radiotap_header { +- ieee80211_radiotap_header wt_ihdr; +- INT64 wt_tsft; +- UINT8 wt_flags; +- UINT8 wt_rate; +-} wlan_radiotap_header; +-/* Definition from madwifi */ +- +-void send_monitor_packets( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk); +- +- +-VOID RTMPSetDesiredRates( +- IN PRTMP_ADAPTER pAdapter, +- IN LONG Rates); +-#endif // CONFIG_STA_SUPPORT // +- +-INT Set_FixedTxMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +-INT Set_OpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p); +- +- +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd); +- +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd); +- +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER * pAd, +- IN INT apidx, +- IN ULONG BeaconLen, +- IN ULONG UpdatePos); +- +-int rt28xx_init( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, +- IN PSTRING pHostName); +- +-BOOLEAN RT28XXSecurityKeyAdd( +- IN PRTMP_ADAPTER pAd, +- IN ULONG apidx, +- IN ULONG KeyIdx, +- IN MAC_TABLE_ENTRY *pEntry); +- +-NDIS_STATUS RtmpNetTaskInit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RtmpNetTaskExit( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RtmpMgmtTaskInit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RtmpMgmtTaskExit( +- IN RTMP_ADAPTER *pAd); +- +-void tbtt_tasklet(unsigned long data); +- +- +-PNET_DEV RtmpPhyNetDevInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_OS_NETDEV_OP_HOOK *pNetHook); +- +-BOOLEAN RtmpPhyNetDevExit( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV net_dev); +- +-INT RtmpRaDevCtrlInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_INF_TYPE infType); +- +-BOOLEAN RtmpRaDevCtrlExit( +- IN RTMP_ADAPTER *pAd); +- +- +-#ifdef RTMP_MAC_PCI +-// +-// Function Prototype in cmm_data_pci.c +-// +-USHORT RtmpPCI_WriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteSubTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-VOID RtmpPCI_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx); +- +-VOID RtmpPCIDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT LastTxIdx); +- +-VOID RtmpPCIDataKickOut( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +- +-int RtmpPCIMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen); +- +- +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD); +- +-BOOLEAN RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp); +- +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-#ifdef CONFIG_STA_SUPPORT +-VOID RTMPInitPCIeLinkCtrlValue( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPFindHostPCIDev( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPPCIeLinkCtrlValueRestore( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-VOID RTMPPCIeLinkCtrlSetting( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Max); +- +-VOID RTMPrt3xSetPCIePowerLinkCtrl( +- IN PRTMP_ADAPTER pAd); +- +- +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx); +- +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- +-VOID PsPollWakeExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RadioOnExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +-#endif // CONFIG_STA_SUPPORT // +- +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd); +-#endif // RTMP_MAC_PCI // +- +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); +- +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); +- +- +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +-INT RtmpTimerQThread( +- IN OUT PVOID Context); +- +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); +- +-BOOLEAN RtmpTimerQRemove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); +- +-void RtmpTimerQExit( +- IN RTMP_ADAPTER *pAd); +- +-void RtmpTimerQInit( +- IN RTMP_ADAPTER *pAd); +-#endif // RTMP_TIMER_TASK_SUPPORT // +- +- +- +-//////////////////////////////////////// +- +-VOID QBSS_LoadInit( +- IN RTMP_ADAPTER *pAd); +- +-UINT32 QBSS_LoadElementAppend( +- IN RTMP_ADAPTER *pAd, +- OUT UINT8 *buf_p); +- +-VOID QBSS_LoadUpdate( +- IN RTMP_ADAPTER *pAd); +- +-/////////////////////////////////////// +-INT RTMPShowCfgValue( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pName, +- IN PSTRING pBuf); +- +-PSTRING RTMPGetRalinkAuthModeStr( +- IN NDIS_802_11_AUTHENTICATION_MODE authMode); +- +-PSTRING RTMPGetRalinkEncryModeStr( +- IN USHORT encryMode); +-////////////////////////////////////// +- +-#ifdef CONFIG_STA_SUPPORT +-VOID AsicStaBbpTuning( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN StaAddMacTableEntry( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo, +- IN UCHAR AddHtInfoLen, +- IN USHORT CapabilityInfo); +- +- +-BOOLEAN AUTH_ReqSend( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, +- IN ULONG ElementLen); +-#endif // CONFIG_STA_SUPPORT // +- +-void RTMP_IndicateMediaState( +- IN PRTMP_ADAPTER pAd); +- +-VOID ReSyncBeaconTime( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPSetAGCInitValue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BandWidth); +- +-int rt28xx_close(IN PNET_DEV dev); +-int rt28xx_open(IN PNET_DEV dev); +- +- +-#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) +-#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) +-#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) +- +- +-#ifdef LINUX +-__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) +-{ +- if (VIRTUAL_IF_NUM(pAd) == 0) +- { +- if (rt28xx_open(pAd->net_dev) != 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n")); +- return -1; +- } +- } +- else +- { +- } +- VIRTUAL_IF_INC(pAd); +- return 0; +-} +- +-__inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) +-{ +- VIRTUAL_IF_DEC(pAd); +- if (VIRTUAL_IF_NUM(pAd) == 0) +- rt28xx_close(pAd->net_dev); +- return; +-} +-#endif // LINUX // +- +- +- +- +-/* +- OS Related funciton prototype definitions. +- TODO: Maybe we need to move these function prototypes to other proper place. +-*/ +-int RtmpOSWrielessEventSend( +- IN RTMP_ADAPTER *pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, +- IN UINT32 dataLen); +- +-int RtmpOSNetDevAddrSet( +- IN PNET_DEV pNetDev, +- IN PUCHAR pMacAddr); +- +-int RtmpOSNetDevAttach( +- IN PNET_DEV pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook); +- +-void RtmpOSNetDevClose( +- IN PNET_DEV pNetDev); +- +-void RtmpOSNetDevDetach( +- IN PNET_DEV pNetDev); +- +-INT RtmpOSNetDevAlloc( +- IN PNET_DEV *pNewNetDev, +- IN UINT32 privDataSize); +- +-void RtmpOSNetDevFree( +- IN PNET_DEV pNetDev); +- +-PNET_DEV RtmpOSNetDevGetByName( +- IN PNET_DEV pNetDev, +- IN PSTRING pDevName); +- +-void RtmpOSNetDeviceRefPut( +- IN PNET_DEV pNetDev); +- +-PNET_DEV RtmpOSNetDevCreate( +- IN RTMP_ADAPTER *pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, +- IN PSTRING pNamePrefix); +- +-/* +- Task operation related function prototypes +-*/ +-void RtmpOSTaskCustomize( +- IN RTMP_OS_TASK *pTask); +- +-INT RtmpOSTaskNotifyToExit( +- IN RTMP_OS_TASK *pTask); +- +-NDIS_STATUS RtmpOSTaskKill( +- IN RTMP_OS_TASK *pTask); +- +-NDIS_STATUS RtmpOSTaskInit( +- IN RTMP_OS_TASK *pTask, +- PSTRING pTaskName, +- VOID *pPriv); +- +-NDIS_STATUS RtmpOSTaskAttach( +- IN RTMP_OS_TASK *pTask, +- IN int (*fn)(void *), +- IN void *arg); +- +- +-/* +- File operation related function prototypes +-*/ +-RTMP_OS_FD RtmpOSFileOpen( +- IN char *pPath, +- IN int flag, +- IN int mode); +- +-int RtmpOSFileClose( +- IN RTMP_OS_FD osfd); +- +-void RtmpOSFileSeek( +- IN RTMP_OS_FD osfd, +- IN int offset); +- +-int RtmpOSFileRead( +- IN RTMP_OS_FD osfd, +- IN char *pDataPtr, +- IN int readLen); +- +-int RtmpOSFileWrite( +- IN RTMP_OS_FD osfd, +- IN char *pDataPtr, +- IN int writeLen); +- +-void RtmpOSFSInfoChange( +- IN RTMP_OS_FS_INFO *pOSFSInfo, +- IN BOOLEAN bSet); +- +- +-#endif // __RTMP_H__ +diff --git a/drivers/staging/rt3090/rtmp_chip.h b/drivers/staging/rt3090/rtmp_chip.h +deleted file mode 100644 +index a0b4bf0..0000000 +--- a/drivers/staging/rt3090/rtmp_chip.h ++++ /dev/null +@@ -1,355 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_chip.h +- +- Abstract: +- Ralink Wireless Chip related definition & structures +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __RTMP_CHIP_H__ +-#define __RTMP_CHIP_H__ +- +-#include "rtmp_type.h" +- +-#ifdef RT3090 +-#include "rt3090.h" +-#endif // RT3090 // +- +-#ifdef RT3370 +-#include "rt3370.h" +-#endif // RT3370 // +- +-#ifdef RT3390 +-#include "rt3390.h" +-#endif // RT3390 // +- +-// We will have a cost down version which mac version is 0x3090xxxx +-// +-// RT3090A facts +-// +-// a) 2.4 GHz +-// b) Replacement for RT3090 +-// c) Internal LNA +-// d) Interference over channel #14 +-// e) New BBP features (e.g., SIG re-modulation) +-// +-#define IS_RT3090A(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30900000)) +- +-// We will have a cost down version which mac version is 0x3090xxxx +-#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (IS_RT3090A(_pAd))) +- +-#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000) +-#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000) +-#define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27)) +- +-#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000||IS_RT3090A(_pAd)) +-//#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) +- +-/* RT3572, 3592, 3562, 3062 share the same MAC version */ +-#define IS_RT3572(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x35720000) +-#define IS_VERSION_BEFORE_F(_pAd) (((_pAd)->MACVersion&0xffff) <= 0x0211) +-// F version is 0x0212, E version is 0x0211. 309x can save more power after F version. +-#define IS_VERSION_AFTER_F(_pAd) ((((_pAd)->MACVersion&0xffff) >= 0x0212) || (((_pAd)->b3090ESpecialChip == TRUE))) +-// +-// RT3390 facts +-// +-// a) Base on RT3090 (RF IC: RT3020) +-// b) 2.4 GHz +-// c) 1x1 +-// d) Single chip +-// e) Internal components: PA and LNA +-// +-//RT3390,RT3370 +-#define IS_RT3390(_pAd) (((_pAd)->MACVersion & 0xFFFF0000) == 0x33900000) +- +-// ------------------------------------------------------ +-// PCI registers - base address 0x0000 +-// ------------------------------------------------------ +-#define CHIP_PCI_CFG 0x0000 +-#define CHIP_PCI_EECTRL 0x0004 +-#define CHIP_PCI_MCUCTRL 0x0008 +- +-#define OPT_14 0x114 +- +-#define RETRY_LIMIT 10 +- +- +- +-// ------------------------------------------------------ +-// BBP & RF definition +-// ------------------------------------------------------ +-#define BUSY 1 +-#define IDLE 0 +- +- +-//------------------------------------------------------------------------- +-// EEPROM definition +-//------------------------------------------------------------------------- +-#define EEDO 0x08 +-#define EEDI 0x04 +-#define EECS 0x02 +-#define EESK 0x01 +-#define EERL 0x80 +- +-#define EEPROM_WRITE_OPCODE 0x05 +-#define EEPROM_READ_OPCODE 0x06 +-#define EEPROM_EWDS_OPCODE 0x10 +-#define EEPROM_EWEN_OPCODE 0x13 +- +-#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs +-#define NUM_EEPROM_TX_G_PARMS 7 +-#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_G_TX_PWR_OFFSET 0x52 +-#define EEPROM_G_TX2_PWR_OFFSET 0x60 +-#define EEPROM_LED1_OFFSET 0x3c +-#define EEPROM_LED2_OFFSET 0x3e +-#define EEPROM_LED3_OFFSET 0x40 +-#define EEPROM_LNA_OFFSET 0x44 +-#define EEPROM_RSSI_BG_OFFSET 0x46 +-#define EEPROM_TXMIXER_GAIN_2_4G 0x48 +-#define EEPROM_RSSI_A_OFFSET 0x4a +-#define EEPROM_TXMIXER_GAIN_5G 0x4c +-#define EEPROM_DEFINE_MAX_TXPWR 0x4e +-#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power. +-#define EEPROM_A_TX_PWR_OFFSET 0x78 +-#define EEPROM_A_TX2_PWR_OFFSET 0xa6 +-//#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j +-//#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe +-//#define EEPROM_TSSI_REF_OFFSET 0x54 +-//#define EEPROM_TSSI_DELTA_OFFSET 0x24 +-//#define EEPROM_CCK_TX_PWR_OFFSET 0x62 +-//#define EEPROM_CALIBRATE_OFFSET 0x7c +-#define EEPROM_VERSION_OFFSET 0x02 +-#define EEPROM_FREQ_OFFSET 0x3a +-#define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power. +-#define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. +-#define VALID_EEPROM_VERSION 1 +- +- +-/* +- * EEPROM operation related marcos +- */ +-#define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ +- (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) +- +-#define RT28xx_EEPROM_WRITE16(_pAd, _offset, _value) \ +- (_pAd)->chipOps.eewrite((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (USHORT)(_value)) +- +- +- +-// ------------------------------------------------------------------- +-// E2PROM data layout +-// ------------------------------------------------------------------- +- +-// +-// MCU_LEDCS: MCU LED Control Setting. +-// +-typedef union _MCU_LEDCS_STRUC { +- struct { +-#ifdef RT_BIG_ENDIAN +- UCHAR Polarity:1; +- UCHAR LedMode:7; +-#else +- UCHAR LedMode:7; +- UCHAR Polarity:1; +-#endif // RT_BIG_ENDIAN // +- } field; +- UCHAR word; +-} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; +- +- +-// +-// EEPROM antenna select format +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_ANTENNA_STRUC { +- struct { +- USHORT Rsv:4; +- USHORT RfIcType:4; // see E2PROM document +- USHORT TxPath:4; // 1: 1T, 2: 2T +- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R +- } field; +- USHORT word; +-} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; +-#else +-typedef union _EEPROM_ANTENNA_STRUC { +- struct { +- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R +- USHORT TxPath:4; // 1: 1T, 2: 2T +- USHORT RfIcType:4; // see E2PROM document +- USHORT Rsv:4; +- } field; +- USHORT word; +-} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; +-#endif +- +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_NIC_CINFIG2_STRUC { +- struct { +- USHORT DACTestBit:1; // control if driver should patch the DAC issue +- USHORT Rsv2:3; // must be 0 +- USHORT AntDiversity:1; // Antenna diversity +- USHORT Rsv1:1; // must be 0 +- USHORT BW40MAvailForA:1; // 0:enable, 1:disable +- USHORT BW40MAvailForG:1; // 0:enable, 1:disable +- USHORT EnableWPSPBC:1; // WPS PBC Control bit +- USHORT BW40MSidebandForA:1; +- USHORT BW40MSidebandForG:1; +- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable +- USHORT ExternalLNAForA:1; // external LNA enable for 5G +- USHORT ExternalLNAForG:1; // external LNA enable for 2.4G +- USHORT DynamicTxAgcControl:1; // +- USHORT HardwareRadioControl:1; // Whether RF is controlled by driver or HW. 1:enable hw control, 0:disable +- } field; +- USHORT word; +-} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; +-#else +-typedef union _EEPROM_NIC_CINFIG2_STRUC { +- struct { +- USHORT HardwareRadioControl:1; // 1:enable, 0:disable +- USHORT DynamicTxAgcControl:1; // +- USHORT ExternalLNAForG:1; // +- USHORT ExternalLNAForA:1; // external LNA enable for 2.4G +- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable +- USHORT BW40MSidebandForG:1; +- USHORT BW40MSidebandForA:1; +- USHORT EnableWPSPBC:1; // WPS PBC Control bit +- USHORT BW40MAvailForG:1; // 0:enable, 1:disable +- USHORT BW40MAvailForA:1; // 0:enable, 1:disable +- USHORT Rsv1:1; // must be 0 +- USHORT AntDiversity:1; // Antenna diversity +- USHORT Rsv2:3; // must be 0 +- USHORT DACTestBit:1; // control if driver should patch the DAC issue +- } field; +- USHORT word; +-} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; +-#endif +- +-// +-// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_TX_PWR_STRUC { +- struct { +- CHAR Byte1; // High Byte +- CHAR Byte0; // Low Byte +- } field; +- USHORT word; +-} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; +-#else +-typedef union _EEPROM_TX_PWR_STRUC { +- struct { +- CHAR Byte0; // Low Byte +- CHAR Byte1; // High Byte +- } field; +- USHORT word; +-} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; +-#endif +- +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_VERSION_STRUC { +- struct { +- UCHAR Version; // High Byte +- UCHAR FaeReleaseNumber; // Low Byte +- } field; +- USHORT word; +-} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; +-#else +-typedef union _EEPROM_VERSION_STRUC { +- struct { +- UCHAR FaeReleaseNumber; // Low Byte +- UCHAR Version; // High Byte +- } field; +- USHORT word; +-} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; +-#endif +- +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_LED_STRUC { +- struct { +- USHORT Rsvd:3; // Reserved +- USHORT LedMode:5; // Led mode. +- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. +- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. +- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. +- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. +- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. +- USHORT PolarityACT:1; // Polarity ACT setting. +- USHORT PolarityRDY_A:1; // Polarity RDY_A setting. +- USHORT PolarityRDY_G:1; // Polarity RDY_G setting. +- } field; +- USHORT word; +-} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; +-#else +-typedef union _EEPROM_LED_STRUC { +- struct { +- USHORT PolarityRDY_G:1; // Polarity RDY_G setting. +- USHORT PolarityRDY_A:1; // Polarity RDY_A setting. +- USHORT PolarityACT:1; // Polarity ACT setting. +- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. +- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. +- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. +- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. +- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. +- USHORT LedMode:5; // Led mode. +- USHORT Rsvd:3; // Reserved +- } field; +- USHORT word; +-} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; +-#endif +- +-#ifdef RT_BIG_ENDIAN +-typedef union _EEPROM_TXPOWER_DELTA_STRUC { +- struct { +- UCHAR TxPowerEnable:1;// Enable +- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value +- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) +- } field; +- UCHAR value; +-} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; +-#else +-typedef union _EEPROM_TXPOWER_DELTA_STRUC { +- struct { +- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) +- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value +- UCHAR TxPowerEnable:1;// Enable +- } field; +- UCHAR value; +-} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; +-#endif +- +-#endif // __RTMP_CHIP_H__ // +diff --git a/drivers/staging/rt3090/rtmp_def.h b/drivers/staging/rt3090/rtmp_def.h +deleted file mode 100644 +index aeb739d..0000000 +--- a/drivers/staging/rt3090/rtmp_def.h ++++ /dev/null +@@ -1,1650 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_def.h +- +- Abstract: +- Miniport related definition header +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Paul Lin 08-01-2002 created +- John Chang 08-05-2003 add definition for 11g & other drafts +-*/ +-#ifndef __RTMP_DEF_H__ +-#define __RTMP_DEF_H__ +- +-#include "oid.h" +- +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +-#ifdef CONFIG_STA_SUPPORT +-#endif // CONFIG_STA_SUPPORT // +- +-#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) +-#define WSC_INCLUDED +-#endif +-// +-// Debug information verbosity: lower values indicate higher urgency +-// +-#define RT_DEBUG_OFF 0 +-#define RT_DEBUG_ERROR 1 +-#define RT_DEBUG_WARN 2 +-#define RT_DEBUG_TRACE 3 +-#define RT_DEBUG_INFO 4 +-#define RT_DEBUG_LOUD 5 +- +-#define NIC_TAG ((ULONG)'0682') +-#define NIC_DBG_STRING ("**RT28xx**") +- +-#ifdef SNMP_SUPPORT +-// for snmp +-// to get manufacturer OUI, kathy, 2008_0220 +-#define ManufacturerOUI_LEN 3 +-#define ManufacturerNAME ("Ralink Technology Company.") +-#define ResourceTypeIdName ("Ralink_ID") +-#endif +- +- +-//#define PACKED +- +-#define RALINK_2883_VERSION ((UINT32)0x28830300) +-#define RALINK_2880E_VERSION ((UINT32)0x28720200) +-#define RALINK_3070_VERSION ((UINT32)0x30700200) +- +-#define MAX_RX_PKT_LEN 1520 +- +-// +-// Entry number for each DMA descriptor ring +-// +- +-#ifdef RTMP_MAC_PCI +-#define TX_RING_SIZE 64 //64 +-#define MGMT_RING_SIZE 128 +-#define RX_RING_SIZE 128 //64 +-#define MAX_TX_PROCESS TX_RING_SIZE //8 +-#define MAX_DMA_DONE_PROCESS TX_RING_SIZE +-#define MAX_TX_DONE_PROCESS TX_RING_SIZE //8 +-#define LOCAL_TXBUF_SIZE 2 +-#endif // RTMP_MAC_PCI // +- +-#define PCI_VIRT_TO_PHYS(__Addr) (((UINT32)(__Addr)) & 0x0FFFFFFF) +- +- +-#ifdef MULTIPLE_CARD_SUPPORT +-// MC: Multple Cards +-#define MAX_NUM_OF_MULTIPLE_CARD 32 +-#endif // MULTIPLE_CARD_SUPPORT // +- +-#define MAX_RX_PROCESS 128 //64 //32 +-#define NUM_OF_LOCAL_TXBUF 2 +-#define TXD_SIZE 16 +-#define TXWI_SIZE 16 +-#define RXD_SIZE 16 +-#define RXWI_SIZE 16 +-// TXINFO_SIZE + TXWI_SIZE + 802.11 Header Size + AMSDU sub frame header +-#define TX_DMA_1ST_BUFFER_SIZE 96 // only the 1st physical buffer is pre-allocated +-#define MGMT_DMA_BUFFER_SIZE 1536 //2048 +-#define RX_BUFFER_AGGRESIZE 3840 //3904 //3968 //4096 //2048 //4096 +-#define RX_BUFFER_NORMSIZE 3840 //3904 //3968 //4096 //2048 //4096 +-#define TX_BUFFER_NORMSIZE RX_BUFFER_NORMSIZE +-#define MAX_FRAME_SIZE 2346 // Maximum 802.11 frame size +-#define MAX_AGGREGATION_SIZE 3840 //3904 //3968 //4096 +-#define MAX_NUM_OF_TUPLE_CACHE 2 +-#define MAX_MCAST_LIST_SIZE 32 +-#define MAX_LEN_OF_VENDOR_DESC 64 +-//#define MAX_SIZE_OF_MCAST_PSQ (NUM_OF_LOCAL_TXBUF >> 2) // AP won't spend more than 1/4 of total buffers on M/BCAST PSQ +-#define MAX_SIZE_OF_MCAST_PSQ 32 +- +-#define MAX_RX_PROCESS_CNT (RX_RING_SIZE) +- +- +-/* +- WMM Note: If memory of your system is not much, please reduce the definition; +- or when you do WMM test, the queue for low priority AC will be full, i.e. +- TX_RING_SIZE + MAX_PACKETS_IN_QUEUE packets for the AC will be buffered in +- WLAN, maybe no any packet buffer can be got in Ethernet driver. +- +- Sometimes no packet buffer can be got in Ethernet driver, the system will +- send flow control packet to the sender to slow down its sending rate. +- So no WMM can be saw in the air. +-*/ +- +-/* +- Need to use 64 in vxworks for test case WMM A5-T07 +- Two dnlink (10Mbps) from a WMM station to a non-WMM station. +- If use 256, queue is not enough. +- And in rt_main_end.c, clConfig.clNum = RX_RING_SIZE * 3; is changed to +- clConfig.clNum = RX_RING_SIZE * 4; +-*/ +-// TODO: For VxWorks the size is 256. Shall we cahnge the value as 256 for all OS????? +-#define MAX_PACKETS_IN_QUEUE (512) //(512) // to pass WMM A5-WPAPSK +- +-#define MAX_PACKETS_IN_MCAST_PS_QUEUE 32 +-#define MAX_PACKETS_IN_PS_QUEUE 128 //32 +-#define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */ +- +- +-#ifdef RTMP_EFUSE_SUPPORT +-//2008/09/11:KH add to support efuse<-- +-#define MAX_EEPROM_BIN_FILE_SIZE 1024 +-#define EFUSE_BUFFER_PATH "/tmp/RT30xxEEPROM.bin" +-//2008/09/11:KH add to support efuse--> +-#endif // RTMP_EFUSE_SUPPORT // +- +-// RxFilter +-#define STANORMAL 0x17f97 +-#define APNORMAL 0x15f97 +-#define PSPXLINK 0x17f93 +-// +-// RTMP_ADAPTER flags +-// +-#define fRTMP_ADAPTER_MAP_REGISTER 0x00000001 +-#define fRTMP_ADAPTER_INTERRUPT_IN_USE 0x00000002 +-#define fRTMP_ADAPTER_HARDWARE_ERROR 0x00000004 +-#define fRTMP_ADAPTER_SCATTER_GATHER 0x00000008 +-#define fRTMP_ADAPTER_SEND_PACKET_ERROR 0x00000010 +-#define fRTMP_ADAPTER_MLME_RESET_IN_PROGRESS 0x00000020 +-#define fRTMP_ADAPTER_HALT_IN_PROGRESS 0x00000040 +-#define fRTMP_ADAPTER_RESET_IN_PROGRESS 0x00000080 +-#define fRTMP_ADAPTER_NIC_NOT_EXIST 0x00000100 +-#define fRTMP_ADAPTER_TX_RING_ALLOCATED 0x00000200 +-#define fRTMP_ADAPTER_REMOVE_IN_PROGRESS 0x00000400 +-#define fRTMP_ADAPTER_MIMORATE_INUSED 0x00000800 +-#define fRTMP_ADAPTER_RX_RING_ALLOCATED 0x00001000 +-#define fRTMP_ADAPTER_INTERRUPT_ACTIVE 0x00002000 +-#define fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS 0x00004000 +-#define fRTMP_ADAPTER_REASSOC_IN_PROGRESS 0x00008000 +-#define fRTMP_ADAPTER_MEDIA_STATE_PENDING 0x00010000 +-#define fRTMP_ADAPTER_RADIO_OFF 0x00020000 +-#define fRTMP_ADAPTER_BULKOUT_RESET 0x00040000 +-#define fRTMP_ADAPTER_BULKIN_RESET 0x00080000 +-#define fRTMP_ADAPTER_RDG_ACTIVE 0x00100000 +-#define fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE 0x00200000 +-#define fRTMP_ADAPTER_SCAN_2040 0x04000000 +-#define fRTMP_ADAPTER_RADIO_MEASUREMENT 0x08000000 +- +-#define fRTMP_ADAPTER_START_UP 0x10000000 //Devive already initialized and enabled Tx/Rx. +-#define fRTMP_ADAPTER_MEDIA_STATE_CHANGE 0x20000000 +-#define fRTMP_ADAPTER_IDLE_RADIO_OFF 0x40000000 +- +-// Lock bit for accessing different ring buffers +-//#define fRTMP_ADAPTER_TX_RING_BUSY 0x80000000 +-//#define fRTMP_ADAPTER_MGMT_RING_BUSY 0x40000000 +-//#define fRTMP_ADAPTER_ATIM_RING_BUSY 0x20000000 +-//#define fRTMP_ADAPTER_RX_RING_BUSY 0x10000000 +- +-// Lock bit for accessing different queue +-//#define fRTMP_ADAPTER_TX_QUEUE_BUSY 0x08000000 +-//#define fRTMP_ADAPTER_MGMT_QUEUE_BUSY 0x04000000 +- +-// +-// STA operation status flags +-// +-#define fOP_STATUS_INFRA_ON 0x00000001 +-#define fOP_STATUS_ADHOC_ON 0x00000002 +-#define fOP_STATUS_BG_PROTECTION_INUSED 0x00000004 +-#define fOP_STATUS_SHORT_SLOT_INUSED 0x00000008 +-#define fOP_STATUS_SHORT_PREAMBLE_INUSED 0x00000010 +-#define fOP_STATUS_RECEIVE_DTIM 0x00000020 +-//#define fOP_STATUS_TX_RATE_SWITCH_ENABLED 0x00000040 +-#define fOP_STATUS_MEDIA_STATE_CONNECTED 0x00000080 +-#define fOP_STATUS_WMM_INUSED 0x00000100 +-#define fOP_STATUS_AGGREGATION_INUSED 0x00000200 +-#define fOP_STATUS_DOZE 0x00000400 // debug purpose +-#define fOP_STATUS_PIGGYBACK_INUSED 0x00000800 // piggy-back, and aggregation +-#define fOP_STATUS_APSD_INUSED 0x00001000 +-#define fOP_STATUS_TX_AMSDU_INUSED 0x00002000 +-#define fOP_STATUS_MAX_RETRY_ENABLED 0x00004000 +-#define fOP_STATUS_WAKEUP_NOW 0x00008000 +-#define fOP_STATUS_PCIE_DEVICE 0x00020000 +- +-// +-// RTMP_ADAPTER PSFlags : related to advanced power save. +-// +-// Indicate whether driver can go to sleep mode from now. This flag is useful AFTER link up +-#define fRTMP_PS_CAN_GO_SLEEP 0x00000001 +-// Indicate whether driver has issue a LinkControl command to PCIe L1 +-#define fRTMP_PS_SET_PCI_CLK_OFF_COMMAND 0x00000002 +-// Indicate driver should disable kick off hardware to send packets from now. +-#define fRTMP_PS_DISABLE_TX 0x00000004 +-// Indicate driver should IMMEDIATELY fo to sleep after receiving AP's beacon in which doesn't indicate unicate nor multicast packets for me +-//. This flag is used ONLY in RTMPHandleRxDoneInterrupt routine. +-#define fRTMP_PS_GO_TO_SLEEP_NOW 0x00000008 +-#define fRTMP_PS_TOGGLE_L1 0x00000010 // Use Toggle L1 mechanism for rt28xx PCIe +-#ifdef RT3090 +-#define WAKE_MCU_CMD 0x31 +-#define SLEEP_MCU_CMD 0x30 +-#define RFOFF_MCU_CMD 0x35 +-#endif // RT3090 // +-#ifdef DOT11N_DRAFT3 +-#define fOP_STATUS_SCAN_2040 0x00040000 +-#endif // DOT11N_DRAFT3 // +- +-#define CCKSETPROTECT 0x1 +-#define OFDMSETPROTECT 0x2 +-#define MM20SETPROTECT 0x4 +-#define MM40SETPROTECT 0x8 +-#define GF20SETPROTECT 0x10 +-#define GR40SETPROTECT 0x20 +-#define ALLN_SETPROTECT (GR40SETPROTECT | GF20SETPROTECT | MM40SETPROTECT | MM20SETPROTECT) +- +-// +-// AP's client table operation status flags +-// +-#define fCLIENT_STATUS_WMM_CAPABLE 0x00000001 // CLIENT can parse QOS DATA frame +-#define fCLIENT_STATUS_AGGREGATION_CAPABLE 0x00000002 // CLIENT can receive Ralink's proprietary TX aggregation frame +-#define fCLIENT_STATUS_PIGGYBACK_CAPABLE 0x00000004 // CLIENT support piggy-back +-#define fCLIENT_STATUS_AMSDU_INUSED 0x00000008 +-#define fCLIENT_STATUS_SGI20_CAPABLE 0x00000010 +-#define fCLIENT_STATUS_SGI40_CAPABLE 0x00000020 +-#define fCLIENT_STATUS_TxSTBC_CAPABLE 0x00000040 +-#define fCLIENT_STATUS_RxSTBC_CAPABLE 0x00000080 +-#define fCLIENT_STATUS_HTC_CAPABLE 0x00000100 +-#define fCLIENT_STATUS_RDG_CAPABLE 0x00000200 +-#define fCLIENT_STATUS_MCSFEEDBACK_CAPABLE 0x00000400 +-#define fCLIENT_STATUS_APSD_CAPABLE 0x00000800 /* UAPSD STATION */ +- +-#ifdef DOT11N_DRAFT3 +-#define fCLIENT_STATUS_BSSCOEXIST_CAPABLE 0x00001000 +-#endif // DOT11N_DRAFT3 // +- +-#define fCLIENT_STATUS_RALINK_CHIPSET 0x00100000 +-// +-// STA configuration flags +-// +-//#define fSTA_CFG_ENABLE_TX_BURST 0x00000001 +- +-// 802.11n Operating Mode Definition. 0-3 also used in ASICUPdateProtect switch case +-#define HT_NO_PROTECT 0 +-#define HT_LEGACY_PROTECT 1 +-#define HT_40_PROTECT 2 +-#define HT_2040_PROTECT 3 +-#define HT_RTSCTS_6M 7 +-//following is our own definition in order to turn on our ASIC protection register in INFRASTRUCTURE. +-#define HT_ATHEROS 8 // rt2860c has problem with atheros chip. we need to turn on RTS/CTS . +-#define HT_FORCERTSCTS 9 // Force turn on RTS/CTS first. then go to evaluate if this force RTS is necessary. +- +-// +-// RX Packet Filter control flags. Apply on pAd->PacketFilter +-// +-#define fRX_FILTER_ACCEPT_DIRECT NDIS_PACKET_TYPE_DIRECTED +-#define fRX_FILTER_ACCEPT_MULTICAST NDIS_PACKET_TYPE_MULTICAST +-#define fRX_FILTER_ACCEPT_BROADCAST NDIS_PACKET_TYPE_BROADCAST +-#define fRX_FILTER_ACCEPT_ALL_MULTICAST NDIS_PACKET_TYPE_ALL_MULTICAST +-#define fRX_FILTER_ACCEPT_PROMISCUOUS NDIS_PACKET_TYPE_PROMISCUOUS +- +-// +-// Error code section +-// +-// NDIS_ERROR_CODE_ADAPTER_NOT_FOUND +-#define ERRLOG_READ_PCI_SLOT_FAILED 0x00000101L +-#define ERRLOG_WRITE_PCI_SLOT_FAILED 0x00000102L +-#define ERRLOG_VENDOR_DEVICE_NOMATCH 0x00000103L +- +-// NDIS_ERROR_CODE_ADAPTER_DISABLED +-#define ERRLOG_BUS_MASTER_DISABLED 0x00000201L +- +-// NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION +-#define ERRLOG_INVALID_SPEED_DUPLEX 0x00000301L +-#define ERRLOG_SET_SECONDARY_FAILED 0x00000302L +- +-// NDIS_ERROR_CODE_OUT_OF_RESOURCES +-#define ERRLOG_OUT_OF_MEMORY 0x00000401L +-#define ERRLOG_OUT_OF_SHARED_MEMORY 0x00000402L +-#define ERRLOG_OUT_OF_MAP_REGISTERS 0x00000403L +-#define ERRLOG_OUT_OF_BUFFER_POOL 0x00000404L +-#define ERRLOG_OUT_OF_NDIS_BUFFER 0x00000405L +-#define ERRLOG_OUT_OF_PACKET_POOL 0x00000406L +-#define ERRLOG_OUT_OF_NDIS_PACKET 0x00000407L +-#define ERRLOG_OUT_OF_LOOKASIDE_MEMORY 0x00000408L +- +-// NDIS_ERROR_CODE_HARDWARE_FAILURE +-#define ERRLOG_SELFTEST_FAILED 0x00000501L +-#define ERRLOG_INITIALIZE_ADAPTER 0x00000502L +-#define ERRLOG_REMOVE_MINIPORT 0x00000503L +- +-// NDIS_ERROR_CODE_RESOURCE_CONFLICT +-#define ERRLOG_MAP_IO_SPACE 0x00000601L +-#define ERRLOG_QUERY_ADAPTER_RESOURCES 0x00000602L +-#define ERRLOG_NO_IO_RESOURCE 0x00000603L +-#define ERRLOG_NO_INTERRUPT_RESOURCE 0x00000604L +-#define ERRLOG_NO_MEMORY_RESOURCE 0x00000605L +- +- +-// WDS definition +-#define MAX_WDS_ENTRY 4 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table +- +-#define WDS_DISABLE_MODE 0 +-#define WDS_RESTRICT_MODE 1 +-#define WDS_BRIDGE_MODE 2 +-#define WDS_REPEATER_MODE 3 +-#define WDS_LAZY_MODE 4 +- +- +-#define MAX_MESH_NUM 0 +- +-#define MAX_APCLI_NUM 0 +-#ifdef APCLI_SUPPORT +-#undef MAX_APCLI_NUM +-#define MAX_APCLI_NUM 1 +-#endif // APCLI_SUPPORT // +- +-#define MAX_MBSSID_NUM 1 +-#ifdef MBSS_SUPPORT +-#undef MAX_MBSSID_NUM +-#define MAX_MBSSID_NUM (8 - MAX_MESH_NUM - MAX_APCLI_NUM) +-#endif // MBSS_SUPPORT // +- +-/* sanity check for apidx */ +-#define MBSS_MR_APIDX_SANITY_CHECK(apidx) \ +- { if (apidx > MAX_MBSSID_NUM) { \ +- DBGPRINT(RT_DEBUG_ERROR, ("%s> Error! apidx = %d > MAX_MBSSID_NUM!\n", __FUNCTION__, apidx)); \ +- apidx = MAIN_MBSSID; } } +- +-#define VALID_WCID(_wcid) ((_wcid) > 0 && (_wcid) < MAX_LEN_OF_MAC_TABLE ) +- +-#define MAIN_MBSSID 0 +-#define FIRST_MBSSID 1 +- +- +-#define MAX_BEACON_SIZE 512 +-// If the MAX_MBSSID_NUM is larger than 6, +-// it shall reserve some WCID space(wcid 222~253) for beacon frames. +-// - these wcid 238~253 are reserved for beacon#6(ra6). +-// - these wcid 222~237 are reserved for beacon#7(ra7). +-#if defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 8) +-#define HW_RESERVED_WCID 222 +-#elif defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 7) +-#define HW_RESERVED_WCID 238 +-#else +-#define HW_RESERVED_WCID 255 +-#endif +- +-// Then dedicate wcid of DFS and Carrier-Sense. +-#define DFS_CTS_WCID (HW_RESERVED_WCID - 1) +-#define CS_CTS_WCID (HW_RESERVED_WCID - 2) +-#define LAST_SPECIFIC_WCID (HW_RESERVED_WCID - 2) +- +-// If MAX_MBSSID_NUM is 8, the maximum available wcid for the associated STA is 211. +-// If MAX_MBSSID_NUM is 7, the maximum available wcid for the associated STA is 228. +-#define MAX_AVAILABLE_CLIENT_WCID (LAST_SPECIFIC_WCID - MAX_MBSSID_NUM - 1) +- +-// TX need WCID to find Cipher Key +-// these wcid 212 ~ 219 are reserved for bc/mc packets if MAX_MBSSID_NUM is 8. +-#define GET_GroupKey_WCID(__wcid, __bssidx) \ +- { \ +- __wcid = LAST_SPECIFIC_WCID - (MAX_MBSSID_NUM) + __bssidx; \ +- } +- +-#define IsGroupKeyWCID(__wcid) (((__wcid) < LAST_SPECIFIC_WCID) && ((__wcid) >= (LAST_SPECIFIC_WCID - (MAX_MBSSID_NUM)))) +- +- +-// definition to support multiple BSSID +-#define BSS0 0 +-#define BSS1 1 +-#define BSS2 2 +-#define BSS3 3 +-#define BSS4 4 +-#define BSS5 5 +-#define BSS6 6 +-#define BSS7 7 +- +- +-//============================================================ +-// Length definitions +-#define PEER_KEY_NO 2 +-#define MAC_ADDR_LEN 6 +-#define TIMESTAMP_LEN 8 +-#define MAX_LEN_OF_SUPPORTED_RATES MAX_LENGTH_OF_SUPPORT_RATES // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +-#define MAX_NUM_OF_REGULATORY_CLASS 16 +-#define MAX_LEN_OF_KEY 32 // 32 octets == 256 bits, Redefine for WPA +-#define MAX_NUM_OF_CHANNELS MAX_NUM_OF_CHS // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination +-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination +-#define MAX_LEN_OF_SSID 32 +-#define CIPHER_TEXT_LEN 128 +-#define HASH_TABLE_SIZE 256 +-#define MAX_VIE_LEN 1024 // New for WPA cipher suite variable IE sizes. +-#define MAX_SUPPORT_MCS 32 +-#define MAX_NUM_OF_BBP_LATCH 140 +-//============================================================ +-// ASIC WCID Table definition. +-//============================================================ +-#define BSSID_WCID 1 // in infra mode, always put bssid with this WCID +-#define MCAST_WCID 0x0 +-#define BSS0Mcast_WCID 0x0 +-#define BSS1Mcast_WCID 0xf8 +-#define BSS2Mcast_WCID 0xf9 +-#define BSS3Mcast_WCID 0xfa +-#define BSS4Mcast_WCID 0xfb +-#define BSS5Mcast_WCID 0xfc +-#define BSS6Mcast_WCID 0xfd +-#define BSS7Mcast_WCID 0xfe +-#define RESERVED_WCID 0xff +- +-#define MAX_NUM_OF_ACL_LIST MAX_NUMBER_OF_ACL +- +-#define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 +- +-#if MAX_LEN_OF_MAC_TABLE>MAX_AVAILABLE_CLIENT_WCID +-#error MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID!!!! +-#endif +- +-#define MAX_NUM_OF_WDS_LINK_PERBSSID 3 +-#define MAX_NUM_OF_WDS_LINK (MAX_NUM_OF_WDS_LINK_PERBSSID*MAX_MBSSID_NUM) +-#define MAX_NUM_OF_EVENT MAX_NUMBER_OF_EVENT +-#define WDS_LINK_START_WCID (MAX_LEN_OF_MAC_TABLE-1) +- +-#define NUM_OF_TID 8 +-#define MAX_AID_BA 4 +-#define MAX_LEN_OF_BA_REC_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2)// (NUM_OF_TID*MAX_AID_BA + 32) //Block ACK recipient +-#define MAX_LEN_OF_BA_ORI_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2)// (NUM_OF_TID*MAX_AID_BA + 32) // Block ACK originator +-#define MAX_LEN_OF_BSS_TABLE 64 +-#define MAX_REORDERING_MPDU_NUM 512 +- +-// key related definitions +-#define SHARE_KEY_NUM 4 +-#define MAX_LEN_OF_SHARE_KEY 16 // byte count +-#define MAX_LEN_OF_PEER_KEY 16 // byte count +-#define PAIRWISE_KEY_NUM 64 // in MAC ASIC pairwise key table +-#define GROUP_KEY_NUM 4 +-#define PMK_LEN 32 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table +-#define PMKID_NO 4 // Number of PMKID saved supported +-#define MAX_LEN_OF_MLME_BUFFER 2048 +- +-// power status related definitions +-#define PWR_ACTIVE 0 +-#define PWR_SAVE 1 +-#define PWR_MMPS 2 //MIMO power save +-//#define PWR_UNKNOWN 2 +- +-// Auth and Assoc mode related definitions +-#define AUTH_MODE_OPEN 0x00 +-#define AUTH_MODE_KEY 0x01 +-//#define AUTH_MODE_AUTO_SWITCH 0x03 +-//#define AUTH_MODE_DEAUTH 0x04 +-//#define AUTH_MODE_UPLAYER 0x05 // reserved for 802.11i use +- +-// BSS Type definitions +-#define BSS_ADHOC 0 // = Ndis802_11IBSS +-#define BSS_INFRA 1 // = Ndis802_11Infrastructure +-#define BSS_ANY 2 // = Ndis802_11AutoUnknown +-#define BSS_MONITOR 3 // = Ndis802_11Monitor +- +- +-// Reason code definitions +-#define REASON_RESERVED 0 +-#define REASON_UNSPECIFY 1 +-#define REASON_NO_LONGER_VALID 2 +-#define REASON_DEAUTH_STA_LEAVING 3 +-#define REASON_DISASSOC_INACTIVE 4 +-#define REASON_DISASSPC_AP_UNABLE 5 +-#define REASON_CLS2ERR 6 +-#define REASON_CLS3ERR 7 +-#define REASON_DISASSOC_STA_LEAVING 8 +-#define REASON_STA_REQ_ASSOC_NOT_AUTH 9 +-#define REASON_INVALID_IE 13 +-#define REASON_MIC_FAILURE 14 +-#define REASON_4_WAY_TIMEOUT 15 +-#define REASON_GROUP_KEY_HS_TIMEOUT 16 +-#define REASON_IE_DIFFERENT 17 +-#define REASON_MCIPHER_NOT_VALID 18 +-#define REASON_UCIPHER_NOT_VALID 19 +-#define REASON_AKMP_NOT_VALID 20 +-#define REASON_UNSUPPORT_RSNE_VER 21 +-#define REASON_INVALID_RSNE_CAP 22 +-#define REASON_8021X_AUTH_FAIL 23 +-#define REASON_CIPHER_SUITE_REJECTED 24 +-#define REASON_DECLINED 37 +- +-#define REASON_QOS_UNSPECIFY 32 +-#define REASON_QOS_LACK_BANDWIDTH 33 +-#define REASON_POOR_CHANNEL_CONDITION 34 +-#define REASON_QOS_OUTSIDE_TXOP_LIMITION 35 +-#define REASON_QOS_QSTA_LEAVING_QBSS 36 +-#define REASON_QOS_UNWANTED_MECHANISM 37 +-#define REASON_QOS_MECH_SETUP_REQUIRED 38 +-#define REASON_QOS_REQUEST_TIMEOUT 39 +-#define REASON_QOS_CIPHER_NOT_SUPPORT 45 +- +-// Status code definitions +-#define MLME_SUCCESS 0 +-#define MLME_UNSPECIFY_FAIL 1 +-#define MLME_CANNOT_SUPPORT_CAP 10 +-#define MLME_REASSOC_DENY_ASSOC_EXIST 11 +-#define MLME_ASSOC_DENY_OUT_SCOPE 12 +-#define MLME_ALG_NOT_SUPPORT 13 +-#define MLME_SEQ_NR_OUT_OF_SEQUENCE 14 +-#define MLME_REJ_CHALLENGE_FAILURE 15 +-#define MLME_REJ_TIMEOUT 16 +-#define MLME_ASSOC_REJ_UNABLE_HANDLE_STA 17 +-#define MLME_ASSOC_REJ_DATA_RATE 18 +- +-#define MLME_ASSOC_REJ_NO_EXT_RATE 22 +-#define MLME_ASSOC_REJ_NO_EXT_RATE_PBCC 23 +-#define MLME_ASSOC_REJ_NO_CCK_OFDM 24 +- +-#define MLME_QOS_UNSPECIFY 32 +-#define MLME_REQUEST_DECLINED 37 +-#define MLME_REQUEST_WITH_INVALID_PARAM 38 +-#define MLME_INVALID_GROUP_CIPHER 41 +-#define MLME_INVALID_PAIRWISE_CIPHER 42 +-#define MLME_INVALID_AKMP 43 +-#define MLME_DLS_NOT_ALLOW_IN_QBSS 48 +-#define MLME_DEST_STA_NOT_IN_QBSS 49 +-#define MLME_DEST_STA_IS_NOT_A_QSTA 50 +- +-#define MLME_INVALID_FORMAT 0x51 +-#define MLME_FAIL_NO_RESOURCE 0x52 +-#define MLME_STATE_MACHINE_REJECT 0x53 +-#define MLME_MAC_TABLE_FAIL 0x54 +- +-// IE code +-#define IE_SSID 0 +-#define IE_SUPP_RATES 1 +-#define IE_FH_PARM 2 +-#define IE_DS_PARM 3 +-#define IE_CF_PARM 4 +-#define IE_TIM 5 +-#define IE_IBSS_PARM 6 +-#define IE_COUNTRY 7 // 802.11d +-#define IE_802_11D_REQUEST 10 // 802.11d +-#define IE_QBSS_LOAD 11 // 802.11e d9 +-#define IE_EDCA_PARAMETER 12 // 802.11e d9 +-#define IE_TSPEC 13 // 802.11e d9 +-#define IE_TCLAS 14 // 802.11e d9 +-#define IE_SCHEDULE 15 // 802.11e d9 +-#define IE_CHALLENGE_TEXT 16 +-#define IE_POWER_CONSTRAINT 32 // 802.11h d3.3 +-#define IE_POWER_CAPABILITY 33 // 802.11h d3.3 +-#define IE_TPC_REQUEST 34 // 802.11h d3.3 +-#define IE_TPC_REPORT 35 // 802.11h d3.3 +-#define IE_SUPP_CHANNELS 36 // 802.11h d3.3 +-#define IE_CHANNEL_SWITCH_ANNOUNCEMENT 37 // 802.11h d3.3 +-#define IE_MEASUREMENT_REQUEST 38 // 802.11h d3.3 +-#define IE_MEASUREMENT_REPORT 39 // 802.11h d3.3 +-#define IE_QUIET 40 // 802.11h d3.3 +-#define IE_IBSS_DFS 41 // 802.11h d3.3 +-#define IE_ERP 42 // 802.11g +-#define IE_TS_DELAY 43 // 802.11e d9 +-#define IE_TCLAS_PROCESSING 44 // 802.11e d9 +-#define IE_QOS_CAPABILITY 46 // 802.11e d6 +-#define IE_HT_CAP 45 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_AP_CHANNEL_REPORT 51 // 802.11k d6 +-#define IE_HT_CAP2 52 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_RSN 48 // 802.11i d3.0 +-#define IE_WPA2 48 // WPA2 +-#define IE_EXT_SUPP_RATES 50 // 802.11g +-#define IE_SUPP_REG_CLASS 59 // 802.11y. Supported regulatory classes. +-#define IE_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 60 // 802.11n +-#define IE_ADD_HT 61 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +-#define IE_ADD_HT2 53 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +- +- +-// For 802.11n D3.03 +-//#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet +-#define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element +-#define IE_WAPI 68 // WAPI information element +-#define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3 +-#define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03 +-#define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03 +-#define IE_EXT_CAPABILITY 127 // 802.11n D3.03 +- +- +-#define IE_WPA 221 // WPA +-#define IE_VENDOR_SPECIFIC 221 // Wifi WMM (WME) +- +-#define OUI_BROADCOM_HT 51 // +-#define OUI_BROADCOM_HTADD 52 // +-#define OUI_PREN_HT_CAP 51 // +-#define OUI_PREN_ADD_HT 52 // +- +-// CCX information +-#define IE_AIRONET_CKIP 133 // CCX1.0 ID 85H for CKIP +-#define IE_AP_TX_POWER 150 // CCX 2.0 for AP transmit power +-#define IE_MEASUREMENT_CAPABILITY 221 // CCX 2.0 +-#define IE_CCX_V2 221 +-#define IE_AIRONET_IPADDRESS 149 // CCX ID 95H for IP Address +-#define IE_AIRONET_CCKMREASSOC 156 // CCX ID 9CH for CCKM Reassociation Request element +-#define CKIP_NEGOTIATION_LENGTH 30 +-#define AIRONET_IPADDRESS_LENGTH 10 +-#define AIRONET_CCKMREASSOC_LENGTH 24 +- +-// ======================================================== +-// MLME state machine definition +-// ======================================================== +- +-// STA MLME state mahcines +-#define ASSOC_STATE_MACHINE 1 +-#define AUTH_STATE_MACHINE 2 +-#define AUTH_RSP_STATE_MACHINE 3 +-#define SYNC_STATE_MACHINE 4 +-#define MLME_CNTL_STATE_MACHINE 5 +-#define WPA_PSK_STATE_MACHINE 6 +-//#define LEAP_STATE_MACHINE 7 +-#define AIRONET_STATE_MACHINE 8 +-#define ACTION_STATE_MACHINE 9 +- +-// AP MLME state machines +-#define AP_ASSOC_STATE_MACHINE 11 +-#define AP_AUTH_STATE_MACHINE 12 +-#define AP_SYNC_STATE_MACHINE 14 +-#define AP_CNTL_STATE_MACHINE 15 +-#define WSC_STATE_MACHINE 17 +-#define WSC_UPNP_STATE_MACHINE 18 +- +- +-#define WPA_STATE_MACHINE 23 +- +- +-#ifdef QOS_DLS_SUPPORT +-#define DLS_STATE_MACHINE 26 +-#endif // QOS_DLS_SUPPORT // +- +-// +-// STA's CONTROL/CONNECT state machine: states, events, total function # +-// +-#define CNTL_IDLE 0 +-#define CNTL_WAIT_DISASSOC 1 +-#define CNTL_WAIT_JOIN 2 +-#define CNTL_WAIT_REASSOC 3 +-#define CNTL_WAIT_START 4 +-#define CNTL_WAIT_AUTH 5 +-#define CNTL_WAIT_ASSOC 6 +-#define CNTL_WAIT_AUTH2 7 +-#define CNTL_WAIT_OID_LIST_SCAN 8 +-#define CNTL_WAIT_OID_DISASSOC 9 +- +-#define MT2_ASSOC_CONF 34 +-#define MT2_AUTH_CONF 35 +-#define MT2_DEAUTH_CONF 36 +-#define MT2_DISASSOC_CONF 37 +-#define MT2_REASSOC_CONF 38 +-#define MT2_PWR_MGMT_CONF 39 +-#define MT2_JOIN_CONF 40 +-#define MT2_SCAN_CONF 41 +-#define MT2_START_CONF 42 +-#define MT2_GET_CONF 43 +-#define MT2_SET_CONF 44 +-#define MT2_RESET_CONF 45 +-#define MT2_FT_OTD_CONF 46 +-#define MT2_MLME_ROAMING_REQ 52 +- +-#define CNTL_FUNC_SIZE 1 +- +-// +-// STA's ASSOC state machine: states, events, total function # +-// +-#define ASSOC_IDLE 0 +-#define ASSOC_WAIT_RSP 1 +-#define REASSOC_WAIT_RSP 2 +-#define DISASSOC_WAIT_RSP 3 +-#define MAX_ASSOC_STATE 4 +- +-#define ASSOC_MACHINE_BASE 0 +-#define MT2_MLME_ASSOC_REQ 0 +-#define MT2_MLME_REASSOC_REQ 1 +-#define MT2_MLME_DISASSOC_REQ 2 +-#define MT2_PEER_DISASSOC_REQ 3 +-#define MT2_PEER_ASSOC_REQ 4 +-#define MT2_PEER_ASSOC_RSP 5 +-#define MT2_PEER_REASSOC_REQ 6 +-#define MT2_PEER_REASSOC_RSP 7 +-#define MT2_DISASSOC_TIMEOUT 8 +-#define MT2_ASSOC_TIMEOUT 9 +-#define MT2_REASSOC_TIMEOUT 10 +-#define MAX_ASSOC_MSG 11 +- +-#define ASSOC_FUNC_SIZE (MAX_ASSOC_STATE * MAX_ASSOC_MSG) +- +-// +-// ACT state machine: states, events, total function # +-// +-#define ACT_IDLE 0 +-#define MAX_ACT_STATE 1 +- +-#define ACT_MACHINE_BASE 0 +- +-//Those PEER_xx_CATE number is based on real Categary value in IEEE spec. Please don'es modify it by your self. +-//Category +-#define MT2_PEER_SPECTRUM_CATE 0 +-#define MT2_PEER_QOS_CATE 1 +-#define MT2_PEER_DLS_CATE 2 +-#define MT2_PEER_BA_CATE 3 +-#define MT2_PEER_PUBLIC_CATE 4 +-#define MT2_PEER_RM_CATE 5 +-/* "FT_CATEGORY_BSS_TRANSITION equal to 6" is defined file of "dot11r_ft.h" */ +-#define MT2_PEER_HT_CATE 7 // 7.4.7 +-#define MAX_PEER_CATE_MSG 7 +- +- +-#define MT2_MLME_ADD_BA_CATE 8 +-#define MT2_MLME_ORI_DELBA_CATE 9 +-#define MT2_MLME_REC_DELBA_CATE 10 +-#define MT2_MLME_QOS_CATE 11 +-#define MT2_MLME_DLS_CATE 12 +-#define MT2_ACT_INVALID 13 +- +-#define MAX_ACT_MSG 14 +- +- +-//Category field +-#define CATEGORY_SPECTRUM 0 +-#define CATEGORY_QOS 1 +-#define CATEGORY_DLS 2 +-#define CATEGORY_BA 3 +-#define CATEGORY_PUBLIC 4 +-#define CATEGORY_RM 5 +-#define CATEGORY_HT 7 +- +- +-// DLS Action frame definition +-#define ACTION_DLS_REQUEST 0 +-#define ACTION_DLS_RESPONSE 1 +-#define ACTION_DLS_TEARDOWN 2 +- +-//Spectrum Action field value 802.11h 7.4.1 +-#define SPEC_MRQ 0 // Request +-#define SPEC_MRP 1 //Report +-#define SPEC_TPCRQ 2 +-#define SPEC_TPCRP 3 +-#define SPEC_CHANNEL_SWITCH 4 +- +- +-//BA Action field value +-#define ADDBA_REQ 0 +-#define ADDBA_RESP 1 +-#define DELBA 2 +- +-//Public's Action field value in Public Category. Some in 802.11y and some in 11n +-#define ACTION_BSS_2040_COEXIST 0 // 11n +-#define ACTION_DSE_ENABLEMENT 1 // 11y D9.0 +-#define ACTION_DSE_DEENABLEMENT 2 // 11y D9.0 +-#define ACTION_DSE_REG_LOCATION_ANNOUNCE 3 // 11y D9.0 +-#define ACTION_EXT_CH_SWITCH_ANNOUNCE 4 // 11y D9.0 +-#define ACTION_DSE_MEASUREMENT_REQ 5 // 11y D9.0 +-#define ACTION_DSE_MEASUREMENT_REPORT 6 // 11y D9.0 +-#define ACTION_MEASUREMENT_PILOT_ACTION 7 // 11y D9.0 +-#define ACTION_DSE_POWER_CONSTRAINT 8 // 11y D9.0 +- +- +-//HT Action field value +-#define NOTIFY_BW_ACTION 0 +-#define SMPS_ACTION 1 +-#define PSMP_ACTION 2 +-#define SETPCO_ACTION 3 +-#define MIMO_CHA_MEASURE_ACTION 4 +-#define MIMO_N_BEACONFORM 5 +-#define MIMO_BEACONFORM 6 +-#define ANTENNA_SELECT 7 +-#define HT_INFO_EXCHANGE 8 +- +-#define ACT_FUNC_SIZE (MAX_ACT_STATE * MAX_ACT_MSG) +-// +-// STA's AUTHENTICATION state machine: states, evvents, total function # +-// +-#define AUTH_REQ_IDLE 0 +-#define AUTH_WAIT_SEQ2 1 +-#define AUTH_WAIT_SEQ4 2 +-#define MAX_AUTH_STATE 3 +- +-#define AUTH_MACHINE_BASE 0 +-#define MT2_MLME_AUTH_REQ 0 +-#define MT2_PEER_AUTH_EVEN 1 +-#define MT2_AUTH_TIMEOUT 2 +-#define MAX_AUTH_MSG 3 +- +-#define AUTH_FUNC_SIZE (MAX_AUTH_STATE * MAX_AUTH_MSG) +- +-// +-// STA's AUTH_RSP state machine: states, events, total function # +-// +-#define AUTH_RSP_IDLE 0 +-#define AUTH_RSP_WAIT_CHAL 1 +-#define MAX_AUTH_RSP_STATE 2 +- +-#define AUTH_RSP_MACHINE_BASE 0 +-#define MT2_AUTH_CHALLENGE_TIMEOUT 0 +-#define MT2_PEER_AUTH_ODD 1 +-#define MT2_PEER_DEAUTH 2 +-#define MAX_AUTH_RSP_MSG 3 +- +-#define AUTH_RSP_FUNC_SIZE (MAX_AUTH_RSP_STATE * MAX_AUTH_RSP_MSG) +- +-// +-// STA's SYNC state machine: states, events, total function # +-// +-#define SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state +-#define JOIN_WAIT_BEACON 1 +-#define SCAN_LISTEN 2 +-#define MAX_SYNC_STATE 3 +- +-#define SYNC_MACHINE_BASE 0 +-#define MT2_MLME_SCAN_REQ 0 +-#define MT2_MLME_JOIN_REQ 1 +-#define MT2_MLME_START_REQ 2 +-#define MT2_PEER_BEACON 3 +-#define MT2_PEER_PROBE_RSP 4 +-#define MT2_PEER_ATIM 5 +-#define MT2_SCAN_TIMEOUT 6 +-#define MT2_BEACON_TIMEOUT 7 +-#define MT2_ATIM_TIMEOUT 8 +-#define MT2_PEER_PROBE_REQ 9 +-#define MAX_SYNC_MSG 10 +- +-#define SYNC_FUNC_SIZE (MAX_SYNC_STATE * MAX_SYNC_MSG) +- +-//Messages for the DLS state machine +-#define DLS_IDLE 0 +-#define MAX_DLS_STATE 1 +- +-#define DLS_MACHINE_BASE 0 +-#define MT2_MLME_DLS_REQ 0 +-#define MT2_PEER_DLS_REQ 1 +-#define MT2_PEER_DLS_RSP 2 +-#define MT2_MLME_DLS_TEAR_DOWN 3 +-#define MT2_PEER_DLS_TEAR_DOWN 4 +-#define MAX_DLS_MSG 5 +- +-#define DLS_FUNC_SIZE (MAX_DLS_STATE * MAX_DLS_MSG) +- +-// +-// WSC State machine: states, events, total function # +-// +- +-// +-// AP's CONTROL/CONNECT state machine: states, events, total function # +-// +-#define AP_CNTL_FUNC_SIZE 1 +- +-// +-// AP's ASSOC state machine: states, events, total function # +-// +-#define AP_ASSOC_IDLE 0 +-#define AP_MAX_ASSOC_STATE 1 +- +-#define AP_ASSOC_MACHINE_BASE 0 +-#define APMT2_MLME_DISASSOC_REQ 0 +-#define APMT2_PEER_DISASSOC_REQ 1 +-#define APMT2_PEER_ASSOC_REQ 2 +-#define APMT2_PEER_REASSOC_REQ 3 +-#define APMT2_CLS3ERR 4 +-#define AP_MAX_ASSOC_MSG 5 +- +-#define AP_ASSOC_FUNC_SIZE (AP_MAX_ASSOC_STATE * AP_MAX_ASSOC_MSG) +- +-// +-// AP's AUTHENTICATION state machine: states, events, total function # +-// +-#define AP_AUTH_REQ_IDLE 0 +-#define AP_MAX_AUTH_STATE 1 +- +-#define AP_AUTH_MACHINE_BASE 0 +-#define APMT2_MLME_DEAUTH_REQ 0 +-#define APMT2_CLS2ERR 1 +-#define APMT2_PEER_DEAUTH 2 +-#define APMT2_PEER_AUTH_REQ 3 +-#define APMT2_PEER_AUTH_CONFIRM 4 +-#define AP_MAX_AUTH_MSG 5 +- +-#define AP_AUTH_FUNC_SIZE (AP_MAX_AUTH_STATE * AP_MAX_AUTH_MSG) +- +-// +-// AP's SYNC state machine: states, events, total function # +-// +-#define AP_SYNC_IDLE 0 +-#define AP_SCAN_LISTEN 1 +-#define AP_MAX_SYNC_STATE 2 +- +-#define AP_SYNC_MACHINE_BASE 0 +-#define APMT2_PEER_PROBE_REQ 0 +-#define APMT2_PEER_BEACON 1 +-#define APMT2_MLME_SCAN_REQ 2 +-#define APMT2_PEER_PROBE_RSP 3 +-#define APMT2_SCAN_TIMEOUT 4 +-#define APMT2_MLME_SCAN_CNCL 5 +-#define AP_MAX_SYNC_MSG 6 +- +-#define AP_SYNC_FUNC_SIZE (AP_MAX_SYNC_STATE * AP_MAX_SYNC_MSG) +- +-// +-// Common WPA state machine: states, events, total function # +-// +-#define WPA_PTK 0 +-#define MAX_WPA_PTK_STATE 1 +- +-#define WPA_MACHINE_BASE 0 +-#define MT2_EAPPacket 0 +-#define MT2_EAPOLStart 1 +-#define MT2_EAPOLLogoff 2 +-#define MT2_EAPOLKey 3 +-#define MT2_EAPOLASFAlert 4 +-#define MAX_WPA_MSG 5 +- +-#define WPA_FUNC_SIZE (MAX_WPA_PTK_STATE * MAX_WPA_MSG) +- +-#ifdef APCLI_SUPPORT +-//ApCli authentication state machine +-#define APCLI_AUTH_REQ_IDLE 0 +-#define APCLI_AUTH_WAIT_SEQ2 1 +-#define APCLI_AUTH_WAIT_SEQ4 2 +-#define APCLI_MAX_AUTH_STATE 3 +- +-#define APCLI_AUTH_MACHINE_BASE 0 +-#define APCLI_MT2_MLME_AUTH_REQ 0 +-#define APCLI_MT2_MLME_DEAUTH_REQ 1 +-#define APCLI_MT2_PEER_AUTH_EVEN 2 +-#define APCLI_MT2_PEER_DEAUTH 3 +-#define APCLI_MT2_AUTH_TIMEOUT 4 +-#define APCLI_MAX_AUTH_MSG 5 +- +-#define APCLI_AUTH_FUNC_SIZE (APCLI_MAX_AUTH_STATE * APCLI_MAX_AUTH_MSG) +- +-//ApCli association state machine +-#define APCLI_ASSOC_IDLE 0 +-#define APCLI_ASSOC_WAIT_RSP 1 +-#define APCLI_MAX_ASSOC_STATE 2 +- +-#define APCLI_ASSOC_MACHINE_BASE 0 +-#define APCLI_MT2_MLME_ASSOC_REQ 0 +-#define APCLI_MT2_MLME_DISASSOC_REQ 1 +-#define APCLI_MT2_PEER_DISASSOC_REQ 2 +-#define APCLI_MT2_PEER_ASSOC_RSP 3 +-#define APCLI_MT2_ASSOC_TIMEOUT 4 +-#define APCLI_MAX_ASSOC_MSG 5 +- +-#define APCLI_ASSOC_FUNC_SIZE (APCLI_MAX_ASSOC_STATE * APCLI_MAX_ASSOC_MSG) +- +-//ApCli sync state machine +-#define APCLI_SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state +-#define APCLI_JOIN_WAIT_PROBE_RSP 1 +-#define APCLI_MAX_SYNC_STATE 2 +- +-#define APCLI_SYNC_MACHINE_BASE 0 +-#define APCLI_MT2_MLME_PROBE_REQ 0 +-#define APCLI_MT2_PEER_PROBE_RSP 1 +-#define APCLI_MT2_PROBE_TIMEOUT 2 +-#define APCLI_MAX_SYNC_MSG 3 +- +-#define APCLI_SYNC_FUNC_SIZE (APCLI_MAX_SYNC_STATE * APCLI_MAX_SYNC_MSG) +- +-//ApCli ctrl state machine +-#define APCLI_CTRL_DISCONNECTED 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state +-#define APCLI_CTRL_PROBE 1 +-#define APCLI_CTRL_AUTH 2 +-#define APCLI_CTRL_AUTH_2 3 +-#define APCLI_CTRL_ASSOC 4 +-#define APCLI_CTRL_DEASSOC 5 +-#define APCLI_CTRL_CONNECTED 6 +-#define APCLI_MAX_CTRL_STATE 7 +- +-#define APCLI_CTRL_MACHINE_BASE 0 +-#define APCLI_CTRL_JOIN_REQ 0 +-#define APCLI_CTRL_PROBE_RSP 1 +-#define APCLI_CTRL_AUTH_RSP 2 +-#define APCLI_CTRL_DISCONNECT_REQ 3 +-#define APCLI_CTRL_PEER_DISCONNECT_REQ 4 +-#define APCLI_CTRL_ASSOC_RSP 5 +-#define APCLI_CTRL_DEASSOC_RSP 6 +-#define APCLI_CTRL_JOIN_REQ_TIMEOUT 7 +-#define APCLI_CTRL_AUTH_REQ_TIMEOUT 8 +-#define APCLI_CTRL_ASSOC_REQ_TIMEOUT 9 +-#define APCLI_MAX_CTRL_MSG 10 +- +-#define APCLI_CTRL_FUNC_SIZE (APCLI_MAX_CTRL_STATE * APCLI_MAX_CTRL_MSG) +- +- +-#endif // APCLI_SUPPORT // +- +- +-// ============================================================================= +- +-// value domain of 802.11 header FC.Tyte, which is b3..b2 of the 1st-byte of MAC header +-#define BTYPE_MGMT 0 +-#define BTYPE_CNTL 1 +-#define BTYPE_DATA 2 +- +-// value domain of 802.11 MGMT frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header +-#define SUBTYPE_ASSOC_REQ 0 +-#define SUBTYPE_ASSOC_RSP 1 +-#define SUBTYPE_REASSOC_REQ 2 +-#define SUBTYPE_REASSOC_RSP 3 +-#define SUBTYPE_PROBE_REQ 4 +-#define SUBTYPE_PROBE_RSP 5 +-#define SUBTYPE_BEACON 8 +-#define SUBTYPE_ATIM 9 +-#define SUBTYPE_DISASSOC 10 +-#define SUBTYPE_AUTH 11 +-#define SUBTYPE_DEAUTH 12 +-#define SUBTYPE_ACTION 13 +-#define SUBTYPE_ACTION_NO_ACK 14 +- +-// value domain of 802.11 CNTL frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header +-#define SUBTYPE_WRAPPER 7 +-#define SUBTYPE_BLOCK_ACK_REQ 8 +-#define SUBTYPE_BLOCK_ACK 9 +-#define SUBTYPE_PS_POLL 10 +-#define SUBTYPE_RTS 11 +-#define SUBTYPE_CTS 12 +-#define SUBTYPE_ACK 13 +-#define SUBTYPE_CFEND 14 +-#define SUBTYPE_CFEND_CFACK 15 +- +-// value domain of 802.11 DATA frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header +-#define SUBTYPE_DATA 0 +-#define SUBTYPE_DATA_CFACK 1 +-#define SUBTYPE_DATA_CFPOLL 2 +-#define SUBTYPE_DATA_CFACK_CFPOLL 3 +-#define SUBTYPE_NULL_FUNC 4 +-#define SUBTYPE_CFACK 5 +-#define SUBTYPE_CFPOLL 6 +-#define SUBTYPE_CFACK_CFPOLL 7 +-#define SUBTYPE_QDATA 8 +-#define SUBTYPE_QDATA_CFACK 9 +-#define SUBTYPE_QDATA_CFPOLL 10 +-#define SUBTYPE_QDATA_CFACK_CFPOLL 11 +-#define SUBTYPE_QOS_NULL 12 +-#define SUBTYPE_QOS_CFACK 13 +-#define SUBTYPE_QOS_CFPOLL 14 +-#define SUBTYPE_QOS_CFACK_CFPOLL 15 +- +-// ACK policy of QOS Control field bit 6:5 +-#define NORMAL_ACK 0x00 // b6:5 = 00 +-#define NO_ACK 0x20 // b6:5 = 01 +-#define NO_EXPLICIT_ACK 0x40 // b6:5 = 10 +-#define BLOCK_ACK 0x60 // b6:5 = 11 +- +-// +-// rtmp_data.c use these definition +-// +-#define LENGTH_802_11 24 +-#define LENGTH_802_11_AND_H 30 +-#define LENGTH_802_11_CRC_H 34 +-#define LENGTH_802_11_CRC 28 +-#define LENGTH_802_11_WITH_ADDR4 30 +-#define LENGTH_802_3 14 +-#define LENGTH_802_3_TYPE 2 +-#define LENGTH_802_1_H 8 +-#define LENGTH_EAPOL_H 4 +-#define LENGTH_WMMQOS_H 2 +-#define LENGTH_CRC 4 +-#define MAX_SEQ_NUMBER 0x0fff +-#define LENGTH_802_3_NO_TYPE 12 +-#define LENGTH_802_1Q 4 /* VLAN related */ +- +-// STA_CSR4.field.TxResult +-#define TX_RESULT_SUCCESS 0 +-#define TX_RESULT_ZERO_LENGTH 1 +-#define TX_RESULT_UNDER_RUN 2 +-#define TX_RESULT_OHY_ERROR 4 +-#define TX_RESULT_RETRY_FAIL 6 +- +-// All PHY rate summary in TXD +-// Preamble MODE in TxD +-#define MODE_CCK 0 +-#define MODE_OFDM 1 +-#ifdef DOT11_N_SUPPORT +-#define MODE_HTMIX 2 +-#define MODE_HTGREENFIELD 3 +-#endif // DOT11_N_SUPPORT // +-// MCS for CCK. BW.SGI.STBC are reserved +-#define MCS_LONGP_RATE_1 0 // long preamble CCK 1Mbps +-#define MCS_LONGP_RATE_2 1 // long preamble CCK 1Mbps +-#define MCS_LONGP_RATE_5_5 2 +-#define MCS_LONGP_RATE_11 3 +-#define MCS_SHORTP_RATE_1 4 // long preamble CCK 1Mbps. short is forbidden in 1Mbps +-#define MCS_SHORTP_RATE_2 5 // short preamble CCK 2Mbps +-#define MCS_SHORTP_RATE_5_5 6 +-#define MCS_SHORTP_RATE_11 7 +-// To send duplicate legacy OFDM. set BW=BW_40. SGI.STBC are reserved +-#define MCS_RATE_6 0 // legacy OFDM +-#define MCS_RATE_9 1 // OFDM +-#define MCS_RATE_12 2 // OFDM +-#define MCS_RATE_18 3 // OFDM +-#define MCS_RATE_24 4 // OFDM +-#define MCS_RATE_36 5 // OFDM +-#define MCS_RATE_48 6 // OFDM +-#define MCS_RATE_54 7 // OFDM +-// HT +-#define MCS_0 0 // 1S +-#define MCS_1 1 +-#define MCS_2 2 +-#define MCS_3 3 +-#define MCS_4 4 +-#define MCS_5 5 +-#define MCS_6 6 +-#define MCS_7 7 +-#define MCS_8 8 // 2S +-#define MCS_9 9 +-#define MCS_10 10 +-#define MCS_11 11 +-#define MCS_12 12 +-#define MCS_13 13 +-#define MCS_14 14 +-#define MCS_15 15 +-#define MCS_16 16 // 3*3 +-#define MCS_17 17 +-#define MCS_18 18 +-#define MCS_19 19 +-#define MCS_20 20 +-#define MCS_21 21 +-#define MCS_22 22 +-#define MCS_23 23 +-#define MCS_32 32 +-#define MCS_AUTO 33 +- +-#ifdef DOT11_N_SUPPORT +-// OID_HTPHYMODE +-// MODE +-#define HTMODE_MM 0 +-#define HTMODE_GF 1 +-#endif // DOT11_N_SUPPORT // +- +-// Fixed Tx MODE - HT, CCK or OFDM +-#define FIXED_TXMODE_HT 0 +-#define FIXED_TXMODE_CCK 1 +-#define FIXED_TXMODE_OFDM 2 +-// BW +-#define BW_20 BAND_WIDTH_20 +-#define BW_40 BAND_WIDTH_40 +-#define BW_BOTH BAND_WIDTH_BOTH +-#define BW_10 BAND_WIDTH_10 // 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. +- +-#ifdef DOT11_N_SUPPORT +-// SHORTGI +-#define GI_400 GAP_INTERVAL_400 // only support in HT mode +-#define GI_BOTH GAP_INTERVAL_BOTH +-#endif // DOT11_N_SUPPORT // +-#define GI_800 GAP_INTERVAL_800 +-// STBC +-#define STBC_NONE 0 +-#ifdef DOT11_N_SUPPORT +-#define STBC_USE 1 // limited use in rt2860b phy +-#define RXSTBC_ONE 1 // rx support of one spatial stream +-#define RXSTBC_TWO 2 // rx support of 1 and 2 spatial stream +-#define RXSTBC_THR 3 // rx support of 1~3 spatial stream +-// MCS FEEDBACK +-#define MCSFBK_NONE 0 // not support mcs feedback / +-#define MCSFBK_RSV 1 // reserved +-#define MCSFBK_UNSOLICIT 2 // only support unsolict mcs feedback +-#define MCSFBK_MRQ 3 // response to both MRQ and unsolict mcs feedback +- +-// MIMO power safe +-#define MMPS_STATIC 0 +-#define MMPS_DYNAMIC 1 +-#define MMPS_RSV 2 +-#define MMPS_ENABLE 3 +- +- +-// A-MSDU size +-#define AMSDU_0 0 +-#define AMSDU_1 1 +- +-#endif // DOT11_N_SUPPORT // +- +-// MCS use 7 bits +-#define TXRATEMIMO 0x80 +-#define TXRATEMCS 0x7F +-#define TXRATEOFDM 0x7F +-#define RATE_1 0 +-#define RATE_2 1 +-#define RATE_5_5 2 +-#define RATE_11 3 +-#define RATE_6 4 // OFDM +-#define RATE_9 5 // OFDM +-#define RATE_12 6 // OFDM +-#define RATE_18 7 // OFDM +-#define RATE_24 8 // OFDM +-#define RATE_36 9 // OFDM +-#define RATE_48 10 // OFDM +-#define RATE_54 11 // OFDM +-#define RATE_FIRST_OFDM_RATE RATE_6 +-#define RATE_LAST_OFDM_RATE RATE_54 +-#define RATE_6_5 12 // HT mix +-#define RATE_13 13 // HT mix +-#define RATE_19_5 14 // HT mix +-#define RATE_26 15 // HT mix +-#define RATE_39 16 // HT mix +-#define RATE_52 17 // HT mix +-#define RATE_58_5 18 // HT mix +-#define RATE_65 19 // HT mix +-#define RATE_78 20 // HT mix +-#define RATE_104 21 // HT mix +-#define RATE_117 22 // HT mix +-#define RATE_130 23 // HT mix +-//#define RATE_AUTO_SWITCH 255 // for StaCfg.FixedTxRate only +-#define HTRATE_0 12 +-#define RATE_FIRST_MM_RATE HTRATE_0 +-#define RATE_FIRST_HT_RATE HTRATE_0 +-#define RATE_LAST_HT_RATE HTRATE_0 +- +-// pTxWI->txop +-#define IFS_HTTXOP 0 // The txop will be handles by ASIC. +-#define IFS_PIFS 1 +-#define IFS_SIFS 2 +-#define IFS_BACKOFF 3 +- +-// pTxD->RetryMode +-#define LONG_RETRY 1 +-#define SHORT_RETRY 0 +- +-// Country Region definition +-#define REGION_MINIMUM_BG_BAND 0 +-#define REGION_0_BG_BAND 0 // 1-11 +-#define REGION_1_BG_BAND 1 // 1-13 +-#define REGION_2_BG_BAND 2 // 10-11 +-#define REGION_3_BG_BAND 3 // 10-13 +-#define REGION_4_BG_BAND 4 // 14 +-#define REGION_5_BG_BAND 5 // 1-14 +-#define REGION_6_BG_BAND 6 // 3-9 +-#define REGION_7_BG_BAND 7 // 5-13 +-#define REGION_31_BG_BAND 31 // 5-13 +-#define REGION_MAXIMUM_BG_BAND 7 +- +-#define REGION_MINIMUM_A_BAND 0 +-#define REGION_0_A_BAND 0 // 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 +-#define REGION_1_A_BAND 1 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_2_A_BAND 2 // 36, 40, 44, 48, 52, 56, 60, 64 +-#define REGION_3_A_BAND 3 // 52, 56, 60, 64, 149, 153, 157, 161 +-#define REGION_4_A_BAND 4 // 149, 153, 157, 161, 165 +-#define REGION_5_A_BAND 5 // 149, 153, 157, 161 +-#define REGION_6_A_BAND 6 // 36, 40, 44, 48 +-#define REGION_7_A_BAND 7 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 +-#define REGION_8_A_BAND 8 // 52, 56, 60, 64 +-#define REGION_9_A_BAND 9 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_10_A_BAND 10 // 36, 40, 44, 48, 149, 153, 157, 161, 165 +-#define REGION_11_A_BAND 11 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 +-#define REGION_12_A_BAND 12 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_13_A_BAND 13 // 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 +-#define REGION_14_A_BAND 14 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_15_A_BAND 15 // 149, 153, 157, 161, 165, 169, 173 +-#define REGION_MAXIMUM_A_BAND 15 +- +-// pTxD->CipherAlg +-#define CIPHER_NONE 0 +-#define CIPHER_WEP64 1 +-#define CIPHER_WEP128 2 +-#define CIPHER_TKIP 3 +-#define CIPHER_AES 4 +-#define CIPHER_CKIP64 5 +-#define CIPHER_CKIP128 6 +-#define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table +-#define CIPHER_SMS4 8 +- +- +-// LED Status. +-#define LED_LINK_DOWN 0 +-#define LED_LINK_UP 1 +-#define LED_RADIO_OFF 2 +-#define LED_RADIO_ON 3 +-#define LED_HALT 4 +-#define LED_WPS 5 +-#define LED_ON_SITE_SURVEY 6 +-#define LED_POWER_UP 7 +- +- +-// value domain of pAd->LedCntl.LedMode and E2PROM +-#define LED_MODE_DEFAULT 0 +-#define LED_MODE_TWO_LED 1 +-//#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 +-#define LED_MODE_SIGNAL_STREGTH 0x40 // EEPROM define = 64 +- +-// RC4 init value, used fro WEP & TKIP +-#define PPPINITFCS32 0xffffffff /* Initial FCS value */ +- +-// value domain of pAd->StaCfg.PortSecured. 802.1X controlled port definition +-#define WPA_802_1X_PORT_SECURED 1 +-#define WPA_802_1X_PORT_NOT_SECURED 2 +- +-#define PAIRWISE_KEY 1 +-#define GROUP_KEY 2 +- +-//definition of DRS +-#define MAX_STEP_OF_TX_RATE_SWITCH 32 +- +- +-// pre-allocated free NDIS PACKET/BUFFER poll for internal usage +-#define MAX_NUM_OF_FREE_NDIS_PACKET 128 +- +-//Block ACK +-#define MAX_TX_REORDERBUF 64 +-#define MAX_RX_REORDERBUF 64 +-#define DEFAULT_TX_TIMEOUT 30 +-#define DEFAULT_RX_TIMEOUT 30 +- +-// definition of Recipient or Originator +-#define I_RECIPIENT TRUE +-#define I_ORIGINATOR FALSE +- +-#define DEFAULT_BBP_TX_POWER 0 +-#define DEFAULT_RF_TX_POWER 5 +- +-#define MAX_INI_BUFFER_SIZE 4096 +-#define MAX_PARAM_BUFFER_SIZE (2048) // enough for ACL (18*64) +- //18 : the length of Mac address acceptable format "01:02:03:04:05:06;") +- //64 : MAX_NUM_OF_ACL_LIST +-// definition of pAd->OpMode +-#define OPMODE_STA 0 +-#define OPMODE_AP 1 +-//#define OPMODE_L3_BRG 2 // as AP and STA at the same time +- +-#ifdef RT_BIG_ENDIAN +-#define DIR_READ 0 +-#define DIR_WRITE 1 +-#define TYPE_TXD 0 +-#define TYPE_RXD 1 +-#define TYPE_TXINFO 0 +-#define TYPE_RXINFO 1 +-#define TYPE_TXWI 0 +-#define TYPE_RXWI 1 +-#endif +- +-// ========================= AP rtmp_def.h =========================== +-// value domain for pAd->EventTab.Log[].Event +-#define EVENT_RESET_ACCESS_POINT 0 // Log = "hh:mm:ss Restart Access Point" +-#define EVENT_ASSOCIATED 1 // Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" +-#define EVENT_DISASSOCIATED 2 // Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" +-#define EVENT_AGED_OUT 3 // Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" +-#define EVENT_COUNTER_M 4 +-#define EVENT_INVALID_PSK 5 +-#define EVENT_MAX_EVENT_TYPE 6 +-// ==== end of AP rtmp_def.h ============ +- +-// definition RSSI Number +-#define RSSI_0 0 +-#define RSSI_1 1 +-#define RSSI_2 2 +- +-// definition of radar detection +-#define RD_NORMAL_MODE 0 // Not found radar signal +-#define RD_SWITCHING_MODE 1 // Found radar signal, and doing channel switch +-#define RD_SILENCE_MODE 2 // After channel switch, need to be silence a while to ensure radar not found +- +-//Driver defined cid for mapping status and command. +-#define SLEEPCID 0x11 +-#define WAKECID 0x22 +-#define QUERYPOWERCID 0x33 +-#define OWNERMCU 0x1 +-#define OWNERCPU 0x0 +- +-// MBSSID definition +-#define ENTRY_NOT_FOUND 0xFF +- +- +-/* After Linux 2.6.9, +- * VLAN module use Private (from user) interface flags (netdevice->priv_flags). +- * #define IFF_802_1Q_VLAN 0x1 -- 802.1Q VLAN device. in if.h +- * ref to ip_sabotage_out() [ out->priv_flags & IFF_802_1Q_VLAN ] in br_netfilter.c +- * +- * For this reason, we MUST use EVEN value in priv_flags +- */ +-#define INT_MAIN 0x0100 +-#define INT_MBSSID 0x0200 +-#define INT_WDS 0x0300 +-#define INT_APCLI 0x0400 +-#define INT_MESH 0x0500 +- +-#define INF_MAIN_DEV_NAME "wlan" +-#define INF_MBSSID_DEV_NAME "wlan" +-#define INF_WDS_DEV_NAME "wds" +-#define INF_APCLI_DEV_NAME "apcli" +-#define INF_MESH_DEV_NAME "mesh" +- +-// Use bitmap to allow coexist of ATE_TXFRAME and ATE_RXFRAME(i.e.,to support LoopBack mode). +-#ifdef RALINK_ATE +-#define ATE_START 0x00 // Start ATE +-#define ATE_STOP 0x80 // Stop ATE +-#define ATE_TXCONT 0x05 // Continuous Transmit +-#define ATE_TXCARR 0x09 // Transmit Carrier +-#define ATE_TXCARRSUPP 0x11 // Transmit Carrier Suppression +-#define ATE_TXFRAME 0x01 // Transmit Frames +-#define ATE_RXFRAME 0x02 // Receive Frames +-#ifdef RALINK_28xx_QA +-#define ATE_TXSTOP 0xe2 // Stop Transmition(i.e., TXCONT, TXCARR, TXCARRSUPP, and TXFRAME) +-#define ATE_RXSTOP 0xfd // Stop receiving Frames +-#define BBP22_TXFRAME 0x00 // Transmit Frames +-#define BBP22_TXCONT_OR_CARRSUPP 0x80 // Continuous Transmit or Carrier Suppression +-#define BBP22_TXCARR 0xc1 // Transmit Carrier +-#define BBP24_TXCONT 0x00 // Continuous Transmit +-#define BBP24_CARRSUPP 0x01 // Carrier Suppression +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +-// WEP Key TYPE +-#define WEP_HEXADECIMAL_TYPE 0 +-#define WEP_ASCII_TYPE 1 +- +- +- +-// WIRELESS EVENTS definition +-/* Max number of char in custom event, refer to wireless_tools.28/wireless.20.h */ +-#define IW_CUSTOM_MAX_LEN 255 /* In bytes */ +- +-// For system event - start +-#define IW_SYS_EVENT_FLAG_START 0x0200 +-#define IW_ASSOC_EVENT_FLAG 0x0200 +-#define IW_DISASSOC_EVENT_FLAG 0x0201 +-#define IW_DEAUTH_EVENT_FLAG 0x0202 +-#define IW_AGEOUT_EVENT_FLAG 0x0203 +-#define IW_COUNTER_MEASURES_EVENT_FLAG 0x0204 +-#define IW_REPLAY_COUNTER_DIFF_EVENT_FLAG 0x0205 +-#define IW_RSNIE_DIFF_EVENT_FLAG 0x0206 +-#define IW_MIC_DIFF_EVENT_FLAG 0x0207 +-#define IW_ICV_ERROR_EVENT_FLAG 0x0208 +-#define IW_MIC_ERROR_EVENT_FLAG 0x0209 +-#define IW_GROUP_HS_TIMEOUT_EVENT_FLAG 0x020A +-#define IW_PAIRWISE_HS_TIMEOUT_EVENT_FLAG 0x020B +-#define IW_RSNIE_SANITY_FAIL_EVENT_FLAG 0x020C +-#define IW_SET_KEY_DONE_WPA1_EVENT_FLAG 0x020D +-#define IW_SET_KEY_DONE_WPA2_EVENT_FLAG 0x020E +-#define IW_STA_LINKUP_EVENT_FLAG 0x020F +-#define IW_STA_LINKDOWN_EVENT_FLAG 0x0210 +-#define IW_SCAN_COMPLETED_EVENT_FLAG 0x0211 +-#define IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG 0x0212 +-// if add new system event flag, please upadte the IW_SYS_EVENT_FLAG_END +-#define IW_SYS_EVENT_FLAG_END 0x0212 +-#define IW_SYS_EVENT_TYPE_NUM (IW_SYS_EVENT_FLAG_END - IW_SYS_EVENT_FLAG_START + 1) +-// For system event - end +- +-// For spoof attack event - start +-#define IW_SPOOF_EVENT_FLAG_START 0x0300 +-#define IW_CONFLICT_SSID_EVENT_FLAG 0x0300 +-#define IW_SPOOF_ASSOC_RESP_EVENT_FLAG 0x0301 +-#define IW_SPOOF_REASSOC_RESP_EVENT_FLAG 0x0302 +-#define IW_SPOOF_PROBE_RESP_EVENT_FLAG 0x0303 +-#define IW_SPOOF_BEACON_EVENT_FLAG 0x0304 +-#define IW_SPOOF_DISASSOC_EVENT_FLAG 0x0305 +-#define IW_SPOOF_AUTH_EVENT_FLAG 0x0306 +-#define IW_SPOOF_DEAUTH_EVENT_FLAG 0x0307 +-#define IW_SPOOF_UNKNOWN_MGMT_EVENT_FLAG 0x0308 +-#define IW_REPLAY_ATTACK_EVENT_FLAG 0x0309 +-// if add new spoof attack event flag, please upadte the IW_SPOOF_EVENT_FLAG_END +-#define IW_SPOOF_EVENT_FLAG_END 0x0309 +-#define IW_SPOOF_EVENT_TYPE_NUM (IW_SPOOF_EVENT_FLAG_END - IW_SPOOF_EVENT_FLAG_START + 1) +-// For spoof attack event - end +- +-// For flooding attack event - start +-#define IW_FLOOD_EVENT_FLAG_START 0x0400 +-#define IW_FLOOD_AUTH_EVENT_FLAG 0x0400 +-#define IW_FLOOD_ASSOC_REQ_EVENT_FLAG 0x0401 +-#define IW_FLOOD_REASSOC_REQ_EVENT_FLAG 0x0402 +-#define IW_FLOOD_PROBE_REQ_EVENT_FLAG 0x0403 +-#define IW_FLOOD_DISASSOC_EVENT_FLAG 0x0404 +-#define IW_FLOOD_DEAUTH_EVENT_FLAG 0x0405 +-#define IW_FLOOD_EAP_REQ_EVENT_FLAG 0x0406 +-// if add new flooding attack event flag, please upadte the IW_FLOOD_EVENT_FLAG_END +-#define IW_FLOOD_EVENT_FLAG_END 0x0406 +-#define IW_FLOOD_EVENT_TYPE_NUM (IW_FLOOD_EVENT_FLAG_END - IW_FLOOD_EVENT_FLAG_START + 1) +-// For flooding attack - end +- +-// End - WIRELESS EVENTS definition +- +-#ifdef CONFIG_STA_SUPPORT +-// definition for DLS, kathy +-#define MAX_NUM_OF_INIT_DLS_ENTRY 1 +-#define MAX_NUM_OF_DLS_ENTRY MAX_NUMBER_OF_DLS_ENTRY +- +-//Block ACK, kathy +-#define MAX_TX_REORDERBUF 64 +-#define MAX_RX_REORDERBUF 64 +-#define DEFAULT_TX_TIMEOUT 30 +-#define DEFAULT_RX_TIMEOUT 30 +-#define MAX_BARECI_SESSION 8 +- +-#ifndef IW_ESSID_MAX_SIZE +-/* Maximum size of the ESSID and pAd->nickname strings */ +-#define IW_ESSID_MAX_SIZE 32 +-#endif +-#endif // CONFIG_STA_SUPPORT // +- +-#ifdef MCAST_RATE_SPECIFIC +-#define MCAST_DISABLE 0 +-#define MCAST_CCK 1 +-#define MCAST_OFDM 2 +-#define MCAST_HTMIX 3 +-#endif // MCAST_RATE_SPECIFIC // +- +-// For AsicRadioOff/AsicRadioOn function +-#define DOT11POWERSAVE 0 +-#define GUIRADIO_OFF 1 +-#define RTMP_HALT 2 +-#define GUI_IDLE_POWER_SAVE 3 +-// -- +- +- +-// definition for WpaSupport flag +-#define WPA_SUPPLICANT_DISABLE 0 +-#define WPA_SUPPLICANT_ENABLE 1 +-#define WPA_SUPPLICANT_ENABLE_WITH_WEB_UI 2 +- +-// definition for Antenna Diversity flag +-#ifdef ANT_DIVERSITY_SUPPORT +-enum ANT_DIVERSITY_TYPE { +- ANT_DIVERSITY_DISABLE = 0, +- ANT_DIVERSITY_ENABLE = 1, +- ANT_FIX_ANT1 = 2, +- ANT_FIX_ANT2 = 3 +-}; +-#endif // ANT_DIVERSITY_SUPPORT // +- +-// Endian byte swapping codes +-#define SWAP16(x) \ +- ((UINT16)( \ +- (((UINT16)(x) & (UINT16) 0x00ffU) << 8) | \ +- (((UINT16)(x) & (UINT16) 0xff00U) >> 8) )) +- +-#define SWAP32(x) \ +- ((UINT32)( \ +- (((UINT32)(x) & (UINT32) 0x000000ffUL) << 24) | \ +- (((UINT32)(x) & (UINT32) 0x0000ff00UL) << 8) | \ +- (((UINT32)(x) & (UINT32) 0x00ff0000UL) >> 8) | \ +- (((UINT32)(x) & (UINT32) 0xff000000UL) >> 24) )) +- +-#define SWAP64(x) \ +- ((UINT64)( \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00000000000000ffULL) << 56) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x000000000000ff00ULL) << 40) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x0000000000ff0000ULL) << 24) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00000000ff000000ULL) << 8) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x000000ff00000000ULL) >> 8) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x0000ff0000000000ULL) >> 24) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00ff000000000000ULL) >> 40) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0xff00000000000000ULL) >> 56) )) +- +-#ifdef RT_BIG_ENDIAN +- +-#define cpu2le64(x) SWAP64((x)) +-#define le2cpu64(x) SWAP64((x)) +-#define cpu2le32(x) SWAP32((x)) +-#define le2cpu32(x) SWAP32((x)) +-#define cpu2le16(x) SWAP16((x)) +-#define le2cpu16(x) SWAP16((x)) +-#define cpu2be64(x) ((UINT64)(x)) +-#define be2cpu64(x) ((UINT64)(x)) +-#define cpu2be32(x) ((UINT32)(x)) +-#define be2cpu32(x) ((UINT32)(x)) +-#define cpu2be16(x) ((UINT16)(x)) +-#define be2cpu16(x) ((UINT16)(x)) +- +-#else // Little_Endian +- +-#define cpu2le64(x) ((UINT64)(x)) +-#define le2cpu64(x) ((UINT64)(x)) +-#define cpu2le32(x) ((UINT32)(x)) +-#define le2cpu32(x) ((UINT32)(x)) +-#define cpu2le16(x) ((UINT16)(x)) +-#define le2cpu16(x) ((UINT16)(x)) +-#define cpu2be64(x) SWAP64((x)) +-#define be2cpu64(x) SWAP64((x)) +-#define cpu2be32(x) SWAP32((x)) +-#define be2cpu32(x) SWAP32((x)) +-#define cpu2be16(x) SWAP16((x)) +-#define be2cpu16(x) SWAP16((x)) +- +-#endif // RT_BIG_ENDIAN +- +-#define ABS(_x, _y) ((_x) > (_y)) ? ((_x) -(_y)) : ((_y) -(_x)) +- +- +-#define A2Dec(_X, _p) \ +-{ \ +- UCHAR *p; \ +- _X = 0; \ +- p = _p; \ +- while (((*p >= '0') && (*p <= '9'))) \ +- { \ +- if ((*p >= '0') && (*p <= '9')) \ +- _X = _X * 10 + *p - 48; \ +- p++; \ +- } \ +-} +- +- +-#define A2Hex(_X, _p) \ +-do{ \ +- char *__p; \ +- (_X) = 0; \ +- __p = (char *)(_p); \ +- while (((*__p >= 'a') && (*__p <= 'f')) || ((*__p >= 'A') && (*__p <= 'F')) || ((*__p >= '0') && (*__p <= '9'))) \ +- { \ +- if ((*__p >= 'a') && (*__p <= 'f')) \ +- (_X) = (_X) * 16 + *__p - 87; \ +- else if ((*__p >= 'A') && (*__p <= 'F')) \ +- (_X) = (_X) * 16 + *__p - 55; \ +- else if ((*__p >= '0') && (*__p <= '9')) \ +- (_X) = (_X) * 16 + *__p - 48; \ +- __p++; \ +- } \ +-}while(0) +- +-#endif // __RTMP_DEF_H__ +diff --git a/drivers/staging/rt3090/rtmp_dot11.h b/drivers/staging/rt3090/rtmp_dot11.h +deleted file mode 100644 +index a637825..0000000 +--- a/drivers/staging/rt3090/rtmp_dot11.h ++++ /dev/null +@@ -1,146 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-#ifndef __DOT11_BASE_H__ +-#define __DOT11_BASE_H__ +- +-#include "rtmp_type.h" +- +- +-// 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- UINT32 RDG:1; //RDG / More PPDU +- UINT32 ACConstraint:1; //feedback request +- UINT32 rsv:5; //calibration sequence +- UINT32 ZLFAnnouce:1; // ZLF announcement +- UINT32 CSISTEERING:2; //CSI/ STEERING +- UINT32 FBKReq:2; //feedback request +- UINT32 CalSeq:2; //calibration sequence +- UINT32 CalPos:2; // calibration position +- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available +- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. +- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. +- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback +- UINT32 TRQ:1; //sounding request +- UINT32 MA:1; //management action payload exist in (QoS Null+HTC) +-#else +- UINT32 MA:1; //management action payload exist in (QoS Null+HTC) +- UINT32 TRQ:1; //sounding request +- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback +- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. +- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. +- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available +- UINT32 CalPos:2; // calibration position +- UINT32 CalSeq:2; //calibration sequence +- UINT32 FBKReq:2; //feedback request +- UINT32 CSISTEERING:2; //CSI/ STEERING +- UINT32 ZLFAnnouce:1; // ZLF announcement +- UINT32 rsv:5; //calibration sequence +- UINT32 ACConstraint:1; //feedback request +- UINT32 RDG:1; //RDG / More PPDU +-#endif /* !RT_BIG_ENDIAN */ +-} HT_CONTROL, *PHT_CONTROL; +- +-// 2-byte QOS CONTROL field +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT Txop_QueueSize:8; +- USHORT AMsduPresent:1; +- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA +- USHORT EOSP:1; +- USHORT TID:4; +-#else +- USHORT TID:4; +- USHORT EOSP:1; +- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA +- USHORT AMsduPresent:1; +- USHORT Txop_QueueSize:8; +-#endif /* !RT_BIG_ENDIAN */ +-} QOS_CONTROL, *PQOS_CONTROL; +- +- +-// 2-byte Frame control field +-typedef struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT Order:1; // Strict order expected +- USHORT Wep:1; // Wep data +- USHORT MoreData:1; // More data bit +- USHORT PwrMgmt:1; // Power management bit +- USHORT Retry:1; // Retry status bit +- USHORT MoreFrag:1; // More fragment bit +- USHORT FrDs:1; // From DS indication +- USHORT ToDs:1; // To DS indication +- USHORT SubType:4; // MSDU subtype +- USHORT Type:2; // MSDU type +- USHORT Ver:2; // Protocol version +-#else +- USHORT Ver:2; // Protocol version +- USHORT Type:2; // MSDU type +- USHORT SubType:4; // MSDU subtype +- USHORT ToDs:1; // To DS indication +- USHORT FrDs:1; // From DS indication +- USHORT MoreFrag:1; // More fragment bit +- USHORT Retry:1; // Retry status bit +- USHORT PwrMgmt:1; // Power management bit +- USHORT MoreData:1; // More data bit +- USHORT Wep:1; // Wep data +- USHORT Order:1; // Strict order expected +-#endif /* !RT_BIG_ENDIAN */ +-} FRAME_CONTROL, *PFRAME_CONTROL; +- +-typedef struct PACKED _HEADER_802_11 { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR Addr3[MAC_ADDR_LEN]; +-#ifdef RT_BIG_ENDIAN +- USHORT Sequence:12; +- USHORT Frag:4; +-#else +- USHORT Frag:4; +- USHORT Sequence:12; +-#endif /* !RT_BIG_ENDIAN */ +- UCHAR Octet[0]; +-} HEADER_802_11, *PHEADER_802_11; +- +-typedef struct PACKED _PSPOLL_FRAME { +- FRAME_CONTROL FC; +- USHORT Aid; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Ta[MAC_ADDR_LEN]; +-} PSPOLL_FRAME, *PPSPOLL_FRAME; +- +-typedef struct PACKED _RTS_FRAME { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +-}RTS_FRAME, *PRTS_FRAME; +- +-#endif // __DOT11_BASE_H__ // +diff --git a/drivers/staging/rt3090/rtmp_iface.h b/drivers/staging/rt3090/rtmp_iface.h +deleted file mode 100644 +index 168d079..0000000 +--- a/drivers/staging/rt3090/rtmp_iface.h ++++ /dev/null +@@ -1,81 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_iface.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#ifndef __RTMP_IFACE_H__ +-#define __RTMP_IFACE_H__ +- +-#ifdef RTMP_PCI_SUPPORT +-#include "rtmp_pci.h" +-#endif // RTMP_PCI_SUPPORT // +- +- +-typedef struct _INF_PCI_CONFIG_ +-{ +- unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use +- unsigned int irq_num; +-}INF_PCI_CONFIG; +- +- +-typedef struct _INF_USB_CONFIG_ +-{ +- UINT8 BulkInEpAddr; // bulk-in endpoint address +- UINT8 BulkOutEpAddr[6]; // bulk-out endpoint address +-}INF_USB_CONFIG; +- +- +-typedef struct _INF_RBUS_CONFIG_ +-{ +- unsigned long csr_addr; +- unsigned int irq; +-}INF_RBUS_CONFIG; +- +- +-typedef enum _RTMP_INF_TYPE_ +-{ +- RTMP_DEV_INF_UNKNOWN = 0, +- RTMP_DEV_INF_PCI = 1, +- RTMP_DEV_INF_USB = 2, +- RTMP_DEV_INF_RBUS = 4, +-}RTMP_INF_TYPE; +- +- +-typedef union _RTMP_INF_CONFIG_{ +- struct _INF_PCI_CONFIG_ pciConfig; +- struct _INF_USB_CONFIG_ usbConfig; +- struct _INF_RBUS_CONFIG_ rbusConfig; +-}RTMP_INF_CONFIG; +- +-#endif // __RTMP_IFACE_H__ // +diff --git a/drivers/staging/rt3090/rtmp_mac.h b/drivers/staging/rt3090/rtmp_mac.h +deleted file mode 100644 +index c57b295..0000000 +--- a/drivers/staging/rt3090/rtmp_mac.h ++++ /dev/null +@@ -1,2304 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_mac.h +- +- Abstract: +- Ralink Wireless Chip MAC related definition & structures +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __RTMP_MAC_H__ +-#define __RTMP_MAC_H__ +- +- +- +-// ================================================================================= +-// TX / RX ring descriptor format +-// ================================================================================= +- +-// the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO. +-// MAC block use this TXINFO to control the transmission behavior of this frame. +-#define FIFO_MGMT 0 +-#define FIFO_HCCA 1 +-#define FIFO_EDCA 2 +- +- +-// +-// TXD Wireless Information format for Tx ring and Mgmt Ring +-// +-//txop : for txop mode +-// 0:txop for the MPDU frame will be handles by ASIC by register +-// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS +-#ifdef RT_BIG_ENDIAN +-typedef struct PACKED _TXWI_STRUC { +- // Word 0 +- UINT32 PHYMODE:2; +- UINT32 TxBF:1; // 3*3 +- UINT32 rsv2:1; +-// UINT32 rsv2:2; +- UINT32 Ifs:1; // +- UINT32 STBC:2; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 MCS:7; +- +- UINT32 rsv:6; +- UINT32 txop:2; //tx back off mode 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. +- UINT32 MpduDensity:3; +- UINT32 AMPDU:1; +- +- UINT32 TS:1; +- UINT32 CFACK:1; +- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode +- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. +- // Word 1 +- UINT32 PacketId:4; +- UINT32 MPDUtotalByteCount:12; +- UINT32 WirelessCliID:8; +- UINT32 BAWinSize:6; +- UINT32 NSEQ:1; +- UINT32 ACK:1; +- // Word 2 +- UINT32 IV; +- // Word 3 +- UINT32 EIV; +-} TXWI_STRUC, *PTXWI_STRUC; +-#else +-typedef struct PACKED _TXWI_STRUC { +- // Word 0 +- // ex: 00 03 00 40 means txop = 3, PHYMODE = 1 +- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. +- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode +- UINT32 CFACK:1; +- UINT32 TS:1; +- +- UINT32 AMPDU:1; +- UINT32 MpduDensity:3; +- UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. +- UINT32 rsv:6; +- +- UINT32 MCS:7; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE +- UINT32 Ifs:1; // +-// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz +- UINT32 rsv2:1; +- UINT32 TxBF:1; // 3*3 +- UINT32 PHYMODE:2; +- // Word1 +- // ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 +- UINT32 ACK:1; +- UINT32 NSEQ:1; +- UINT32 BAWinSize:6; +- UINT32 WirelessCliID:8; +- UINT32 MPDUtotalByteCount:12; +- UINT32 PacketId:4; +- //Word2 +- UINT32 IV; +- //Word3 +- UINT32 EIV; +-} TXWI_STRUC, *PTXWI_STRUC; +-#endif +- +- +-// +-// RXWI wireless information format, in PBF. invisible in driver. +-// +-#ifdef RT_BIG_ENDIAN +-typedef struct PACKED _RXWI_STRUC { +- // Word 0 +- UINT32 TID:4; +- UINT32 MPDUtotalByteCount:12; +- UINT32 UDF:3; +- UINT32 BSSID:3; +- UINT32 KeyIndex:2; +- UINT32 WirelessCliID:8; +- // Word 1 +- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me +- UINT32 rsv:3; +- UINT32 STBC:2; +- UINT32 ShortGI:1; +- UINT32 BW:1; +- UINT32 MCS:7; +- UINT32 SEQUENCE:12; +- UINT32 FRAG:4; +- // Word 2 +- UINT32 rsv1:8; +- UINT32 RSSI2:8; +- UINT32 RSSI1:8; +- UINT32 RSSI0:8; +- // Word 3 +- /*UINT32 rsv2:16;*/ +- UINT32 rsv2:8; +- UINT32 FOFFSET:8; // RT35xx +- UINT32 SNR1:8; +- UINT32 SNR0:8; +-} RXWI_STRUC, *PRXWI_STRUC; +-#else +-typedef struct PACKED _RXWI_STRUC { +- // Word 0 +- UINT32 WirelessCliID:8; +- UINT32 KeyIndex:2; +- UINT32 BSSID:3; +- UINT32 UDF:3; +- UINT32 MPDUtotalByteCount:12; +- UINT32 TID:4; +- // Word 1 +- UINT32 FRAG:4; +- UINT32 SEQUENCE:12; +- UINT32 MCS:7; +- UINT32 BW:1; +- UINT32 ShortGI:1; +- UINT32 STBC:2; +- UINT32 rsv:3; +- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me +- //Word2 +- UINT32 RSSI0:8; +- UINT32 RSSI1:8; +- UINT32 RSSI2:8; +- UINT32 rsv1:8; +- //Word3 +- UINT32 SNR0:8; +- UINT32 SNR1:8; +- UINT32 FOFFSET:8; // RT35xx +- UINT32 rsv2:8; +- /*UINT32 rsv2:16;*/ +-} RXWI_STRUC, *PRXWI_STRUC; +-#endif +- +- +-// ================================================================================= +-// Register format +-// ================================================================================= +- +- +-// +-// SCH/DMA registers - base address 0x0200 +-// +-// INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit +-// +-#define DMA_CSR0 0x200 +-#define INT_SOURCE_CSR 0x200 +-#ifdef RT_BIG_ENDIAN +-typedef union _INT_SOURCE_CSR_STRUC { +- struct { +-#ifdef TONE_RADAR_DETECT_SUPPORT +- UINT32 :11; +- UINT32 RadarINT:1; +- UINT32 rsv:2; +-#else // original source code +- UINT32 :14; +-#endif // TONE_RADAR_DETECT_SUPPORT // +- UINT32 TxCoherent:1; +- UINT32 RxCoherent:1; +- UINT32 GPTimer:1; +- UINT32 AutoWakeup:1;//bit14 +- UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c +- UINT32 PreTBTT:1; +- UINT32 TBTTInt:1; +- UINT32 RxTxCoherent:1; +- UINT32 MCUCommandINT:1; +- UINT32 MgmtDmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 RxDone:1; +- UINT32 TxDelayINT:1; //delayed interrupt, not interrupt until several int or time limit hit +- UINT32 RxDelayINT:1; //dealyed interrupt +- } field; +- UINT32 word; +-} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; +-#else +-typedef union _INT_SOURCE_CSR_STRUC { +- struct { +- UINT32 RxDelayINT:1; +- UINT32 TxDelayINT:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1;//4 +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; // bit7 +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1;//bit 9 +- UINT32 RxTxCoherent:1; +- UINT32 TBTTInt:1; +- UINT32 PreTBTT:1; +- UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c +- UINT32 AutoWakeup:1;//bit14 +- UINT32 GPTimer:1; +- UINT32 RxCoherent:1;//bit16 +- UINT32 TxCoherent:1; +-#ifdef TONE_RADAR_DETECT_SUPPORT +- UINT32 rsv:2; +- UINT32 RadarINT:1; +- UINT32 :11; +-#else +- UINT32 :14; +-#endif // TONE_RADAR_DETECT_SUPPORT // +- } field; +- UINT32 word; +-} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; +-#endif +- +-// +-// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF +-// +-#define INT_MASK_CSR 0x204 +-#ifdef RT_BIG_ENDIAN +-typedef union _INT_MASK_CSR_STRUC { +- struct { +- UINT32 TxCoherent:1; +- UINT32 RxCoherent:1; +-#ifdef TONE_RADAR_DETECT_SUPPORT +- UINT32 :9; +- UINT32 RadarINT:1; +- UINT32 rsv:10; +-#else +- UINT32 :20; +-#endif // TONE_RADAR_DETECT_SUPPORT // +- UINT32 MCUCommandINT:1; +- UINT32 MgmtDmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 RxDone:1; +- UINT32 TxDelay:1; +- UINT32 RXDelay_INT_MSK:1; +- } field; +- UINT32 word; +-}INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; +-#else +-typedef union _INT_MASK_CSR_STRUC { +- struct { +- UINT32 RXDelay_INT_MSK:1; +- UINT32 TxDelay:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; +-#ifdef TONE_RADAR_DETECT_SUPPORT +- UINT32 rsv:10; +- UINT32 RadarINT:1; +- UINT32 :9; +-#else +- UINT32 :20; +-#endif // TONE_RADAR_DETECT_SUPPORT // +- UINT32 RxCoherent:1; +- UINT32 TxCoherent:1; +- } field; +- UINT32 word; +-} INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; +-#endif +- +-#define WPDMA_GLO_CFG 0x208 +-#ifdef RT_BIG_ENDIAN +-typedef union _WPDMA_GLO_CFG_STRUC { +- struct { +- UINT32 HDR_SEG_LEN:16; +- UINT32 RXHdrScater:8; +- UINT32 BigEndian:1; +- UINT32 EnTXWriteBackDDONE:1; +- UINT32 WPDMABurstSIZE:2; +- UINT32 RxDMABusy:1; +- UINT32 EnableRxDMA:1; +- UINT32 TxDMABusy:1; +- UINT32 EnableTxDMA:1; +- } field; +- UINT32 word; +-}WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; +-#else +-typedef union _WPDMA_GLO_CFG_STRUC { +- struct { +- UINT32 EnableTxDMA:1; +- UINT32 TxDMABusy:1; +- UINT32 EnableRxDMA:1; +- UINT32 RxDMABusy:1; +- UINT32 WPDMABurstSIZE:2; +- UINT32 EnTXWriteBackDDONE:1; +- UINT32 BigEndian:1; +- UINT32 RXHdrScater:8; +- UINT32 HDR_SEG_LEN:16; +- } field; +- UINT32 word; +-} WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; +-#endif +- +-#define WPDMA_RST_IDX 0x20c +-#ifdef RT_BIG_ENDIAN +-typedef union _WPDMA_RST_IDX_STRUC { +- struct { +- UINT32 :15; +- UINT32 RST_DRX_IDX0:1; +- UINT32 rsv:10; +- UINT32 RST_DTX_IDX5:1; +- UINT32 RST_DTX_IDX4:1; +- UINT32 RST_DTX_IDX3:1; +- UINT32 RST_DTX_IDX2:1; +- UINT32 RST_DTX_IDX1:1; +- UINT32 RST_DTX_IDX0:1; +- } field; +- UINT32 word; +-}WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; +-#else +-typedef union _WPDMA_RST_IDX_STRUC { +- struct { +- UINT32 RST_DTX_IDX0:1; +- UINT32 RST_DTX_IDX1:1; +- UINT32 RST_DTX_IDX2:1; +- UINT32 RST_DTX_IDX3:1; +- UINT32 RST_DTX_IDX4:1; +- UINT32 RST_DTX_IDX5:1; +- UINT32 rsv:10; +- UINT32 RST_DRX_IDX0:1; +- UINT32 :15; +- } field; +- UINT32 word; +-} WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; +-#endif +-#define DELAY_INT_CFG 0x0210 +-#ifdef RT_BIG_ENDIAN +-typedef union _DELAY_INT_CFG_STRUC { +- struct { +- UINT32 TXDLY_INT_EN:1; +- UINT32 TXMAX_PINT:7; +- UINT32 TXMAX_PTIME:8; +- UINT32 RXDLY_INT_EN:1; +- UINT32 RXMAX_PINT:7; +- UINT32 RXMAX_PTIME:8; +- } field; +- UINT32 word; +-}DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; +-#else +-typedef union _DELAY_INT_CFG_STRUC { +- struct { +- UINT32 RXMAX_PTIME:8; +- UINT32 RXMAX_PINT:7; +- UINT32 RXDLY_INT_EN:1; +- UINT32 TXMAX_PTIME:8; +- UINT32 TXMAX_PINT:7; +- UINT32 TXDLY_INT_EN:1; +- } field; +- UINT32 word; +-} DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; +-#endif +-#define WMM_AIFSN_CFG 0x0214 +-#ifdef RT_BIG_ENDIAN +-typedef union _AIFSN_CSR_STRUC { +- struct { +- UINT32 Rsv:16; +- UINT32 Aifsn3:4; // for AC_VO +- UINT32 Aifsn2:4; // for AC_VI +- UINT32 Aifsn1:4; // for AC_BK +- UINT32 Aifsn0:4; // for AC_BE +- } field; +- UINT32 word; +-} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; +-#else +-typedef union _AIFSN_CSR_STRUC { +- struct { +- UINT32 Aifsn0:4; // for AC_BE +- UINT32 Aifsn1:4; // for AC_BK +- UINT32 Aifsn2:4; // for AC_VI +- UINT32 Aifsn3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; +-#endif +-// +-// CWMIN_CSR: CWmin for each EDCA AC +-// +-#define WMM_CWMIN_CFG 0x0218 +-#ifdef RT_BIG_ENDIAN +-typedef union _CWMIN_CSR_STRUC { +- struct { +- UINT32 Rsv:16; +- UINT32 Cwmin3:4; // for AC_VO +- UINT32 Cwmin2:4; // for AC_VI +- UINT32 Cwmin1:4; // for AC_BK +- UINT32 Cwmin0:4; // for AC_BE +- } field; +- UINT32 word; +-} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; +-#else +-typedef union _CWMIN_CSR_STRUC { +- struct { +- UINT32 Cwmin0:4; // for AC_BE +- UINT32 Cwmin1:4; // for AC_BK +- UINT32 Cwmin2:4; // for AC_VI +- UINT32 Cwmin3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; +-#endif +- +-// +-// CWMAX_CSR: CWmin for each EDCA AC +-// +-#define WMM_CWMAX_CFG 0x021c +-#ifdef RT_BIG_ENDIAN +-typedef union _CWMAX_CSR_STRUC { +- struct { +- UINT32 Rsv:16; +- UINT32 Cwmax3:4; // for AC_VO +- UINT32 Cwmax2:4; // for AC_VI +- UINT32 Cwmax1:4; // for AC_BK +- UINT32 Cwmax0:4; // for AC_BE +- } field; +- UINT32 word; +-} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; +-#else +-typedef union _CWMAX_CSR_STRUC { +- struct { +- UINT32 Cwmax0:4; // for AC_BE +- UINT32 Cwmax1:4; // for AC_BK +- UINT32 Cwmax2:4; // for AC_VI +- UINT32 Cwmax3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; +-#endif +- +- +-// +-// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register +-// +-#define WMM_TXOP0_CFG 0x0220 +-#ifdef RT_BIG_ENDIAN +-typedef union _AC_TXOP_CSR0_STRUC { +- struct { +- USHORT Ac1Txop; // for AC_BE, in unit of 32us +- USHORT Ac0Txop; // for AC_BK, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; +-#else +-typedef union _AC_TXOP_CSR0_STRUC { +- struct { +- USHORT Ac0Txop; // for AC_BK, in unit of 32us +- USHORT Ac1Txop; // for AC_BE, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; +-#endif +- +-// +-// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register +-// +-#define WMM_TXOP1_CFG 0x0224 +-#ifdef RT_BIG_ENDIAN +-typedef union _AC_TXOP_CSR1_STRUC { +- struct { +- USHORT Ac3Txop; // for AC_VO, in unit of 32us +- USHORT Ac2Txop; // for AC_VI, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; +-#else +-typedef union _AC_TXOP_CSR1_STRUC { +- struct { +- USHORT Ac2Txop; // for AC_VI, in unit of 32us +- USHORT Ac3Txop; // for AC_VO, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; +-#endif +- +- +-#define RINGREG_DIFF 0x10 +-#define GPIO_CTRL_CFG 0x0228 //MAC_CSR13 +-#define MCU_CMD_CFG 0x022c +-#define TX_BASE_PTR0 0x0230 //AC_BK base address +-#define TX_MAX_CNT0 0x0234 +-#define TX_CTX_IDX0 0x0238 +-#define TX_DTX_IDX0 0x023c +-#define TX_BASE_PTR1 0x0240 //AC_BE base address +-#define TX_MAX_CNT1 0x0244 +-#define TX_CTX_IDX1 0x0248 +-#define TX_DTX_IDX1 0x024c +-#define TX_BASE_PTR2 0x0250 //AC_VI base address +-#define TX_MAX_CNT2 0x0254 +-#define TX_CTX_IDX2 0x0258 +-#define TX_DTX_IDX2 0x025c +-#define TX_BASE_PTR3 0x0260 //AC_VO base address +-#define TX_MAX_CNT3 0x0264 +-#define TX_CTX_IDX3 0x0268 +-#define TX_DTX_IDX3 0x026c +-#define TX_BASE_PTR4 0x0270 //HCCA base address +-#define TX_MAX_CNT4 0x0274 +-#define TX_CTX_IDX4 0x0278 +-#define TX_DTX_IDX4 0x027c +-#define TX_BASE_PTR5 0x0280 //MGMT base address +-#define TX_MAX_CNT5 0x0284 +-#define TX_CTX_IDX5 0x0288 +-#define TX_DTX_IDX5 0x028c +-#define TX_MGMTMAX_CNT TX_MAX_CNT5 +-#define TX_MGMTCTX_IDX TX_CTX_IDX5 +-#define TX_MGMTDTX_IDX TX_DTX_IDX5 +-#define RX_BASE_PTR 0x0290 //RX base address +-#define RX_MAX_CNT 0x0294 +-#define RX_CRX_IDX 0x0298 +-#define RX_DRX_IDX 0x029c +- +- +-#define USB_DMA_CFG 0x02a0 +-#ifdef RT_BIG_ENDIAN +-typedef union _USB_DMA_CFG_STRUC { +- struct { +- UINT32 TxBusy:1; //USB DMA TX FSM busy . debug only +- UINT32 RxBusy:1; //USB DMA RX FSM busy . debug only +- UINT32 EpoutValid:6; //OUT endpoint data valid. debug only +- UINT32 TxBulkEn:1; //Enable USB DMA Tx +- UINT32 RxBulkEn:1; //Enable USB DMA Rx +- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation +- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. +- UINT32 TxClear:1; //Clear USB DMA TX path +- UINT32 rsv:2; +- UINT32 phyclear:1; //phy watch dog enable. write 1 +- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 1024 bytes +- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns +- } field; +- UINT32 word; +-} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; +-#else +-typedef union _USB_DMA_CFG_STRUC { +- struct { +- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns +- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes +- UINT32 phyclear:1; //phy watch dog enable. write 1 +- UINT32 rsv:2; +- UINT32 TxClear:1; //Clear USB DMA TX path +- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. +- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation +- UINT32 RxBulkEn:1; //Enable USB DMA Rx +- UINT32 TxBulkEn:1; //Enable USB DMA Tx +- UINT32 EpoutValid:6; //OUT endpoint data valid +- UINT32 RxBusy:1; //USB DMA RX FSM busy +- UINT32 TxBusy:1; //USB DMA TX FSM busy +- } field; +- UINT32 word; +-} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; +-#endif +- +- +-// +-// 3 PBF registers +-// +-// +-// Most are for debug. Driver doesn't touch PBF register. +-#define PBF_SYS_CTRL 0x0400 +-#define PBF_CFG 0x0408 +-#define PBF_MAX_PCNT 0x040C +-#define PBF_CTRL 0x0410 +-#define PBF_INT_STA 0x0414 +-#define PBF_INT_ENA 0x0418 +-#define TXRXQ_PCNT 0x0438 +-#define PBF_DBG 0x043c +-#define PBF_CAP_CTRL 0x0440 +- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +-// eFuse registers +-#define EFUSE_CTRL 0x0580 +-#define EFUSE_DATA0 0x0590 +-#define EFUSE_DATA1 0x0594 +-#define EFUSE_DATA2 0x0598 +-#define EFUSE_DATA3 0x059c +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +- +-#define OSC_CTRL 0x5a4 +-#define PCIE_PHY_TX_ATTENUATION_CTRL 0x05C8 +-#define LDO_CFG0 0x05d4 +-#define GPIO_SWITCH 0x05dc +- +- +-// +-// 4 MAC registers +-// +-// +-// 4.1 MAC SYSTEM configuration registers (offset:0x1000) +-// +-#define MAC_CSR0 0x1000 +-#ifdef RT_BIG_ENDIAN +-typedef union _ASIC_VER_ID_STRUC { +- struct { +- USHORT ASICVer; // version : 2860 +- USHORT ASICRev; // reversion : 0 +- } field; +- UINT32 word; +-} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; +-#else +-typedef union _ASIC_VER_ID_STRUC { +- struct { +- USHORT ASICRev; // reversion : 0 +- USHORT ASICVer; // version : 2860 +- } field; +- UINT32 word; +-} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; +-#endif +-#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 +-#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 +-#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 +-// +-// MAC_CSR2: STA MAC register 0 +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _MAC_DW0_STRUC { +- struct { +- UCHAR Byte3; // MAC address byte 3 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte0; // MAC address byte 0 +- } field; +- UINT32 word; +-} MAC_DW0_STRUC, *PMAC_DW0_STRUC; +-#else +-typedef union _MAC_DW0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} MAC_DW0_STRUC, *PMAC_DW0_STRUC; +-#endif +- +-// +-// MAC_CSR3: STA MAC register 1 +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _MAC_DW1_STRUC { +- struct { +- UCHAR Rsvd1; +- UCHAR U2MeMask; +- UCHAR Byte5; // MAC address byte 5 +- UCHAR Byte4; // MAC address byte 4 +- } field; +- UINT32 word; +-} MAC_DW1_STRUC, *PMAC_DW1_STRUC; +-#else +-typedef union _MAC_DW1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR U2MeMask; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} MAC_DW1_STRUC, *PMAC_DW1_STRUC; +-#endif +- +-#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 +-#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 +- +-// +-// MAC_CSR5: BSSID register 1 +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _MAC_CSR5_STRUC { +- struct { +- USHORT Rsvd:11; +- USHORT MBssBcnNum:3; +- USHORT BssIdMode:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID +- UCHAR Byte5; // BSSID byte 5 +- UCHAR Byte4; // BSSID byte 4 +- } field; +- UINT32 word; +-} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; +-#else +-typedef union _MAC_CSR5_STRUC { +- struct { +- UCHAR Byte4; // BSSID byte 4 +- UCHAR Byte5; // BSSID byte 5 +- USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID +- USHORT MBssBcnNum:3; +- USHORT Rsvd:11; +- } field; +- UINT32 word; +-} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; +-#endif +- +-#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 +-#define BBP_CSR_CFG 0x101c // +-// +-// BBP_CSR_CFG: BBP serial control register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _BBP_CSR_CFG_STRUC { +- struct { +- UINT32 :12; +- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel +- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles +- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. +- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP +- UINT32 RegNum:8; // Selected BBP register +- UINT32 Value:8; // Register value to program into BBP +- } field; +- UINT32 word; +-} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; +-#else +-typedef union _BBP_CSR_CFG_STRUC { +- struct { +- UINT32 Value:8; // Register value to program into BBP +- UINT32 RegNum:8; // Selected BBP register +- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP +- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. +- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles +- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel +- UINT32 :12; +- } field; +- UINT32 word; +-} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; +-#endif +-#define RF_CSR_CFG0 0x1020 +-// +-// RF_CSR_CFG: RF control register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _RF_CSR_CFG0_STRUC { +- struct { +- UINT32 Busy:1; // 0: idle 1: 8busy +- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate +- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby +- UINT32 bitwidth:5; // Selected BBP register +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- } field; +- UINT32 word; +-} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; +-#else +-typedef union _RF_CSR_CFG0_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 bitwidth:5; // Selected BBP register +- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby +- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate +- UINT32 Busy:1; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; +-#endif +-#define RF_CSR_CFG1 0x1024 +-#ifdef RT_BIG_ENDIAN +-typedef union _RF_CSR_CFG1_STRUC { +- struct { +- UINT32 rsv:7; // 0: idle 1: 8busy +- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- } field; +- UINT32 word; +-} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; +-#else +-typedef union _RF_CSR_CFG1_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) +- UINT32 rsv:7; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; +-#endif +-#define RF_CSR_CFG2 0x1028 // +-#ifdef RT_BIG_ENDIAN +-typedef union _RF_CSR_CFG2_STRUC { +- struct { +- UINT32 rsv:8; // 0: idle 1: 8busy +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- } field; +- UINT32 word; +-} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; +-#else +-typedef union _RF_CSR_CFG2_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 rsv:8; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; +-#endif +-#define LED_CFG 0x102c // MAC_CSR14 +-#ifdef RT_BIG_ENDIAN +-typedef union _LED_CFG_STRUC { +- struct { +- UINT32 :1; +- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high +- UINT32 YLedMode:2; // yellow Led Mode +- UINT32 GLedMode:2; // green Led Mode +- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on +- UINT32 rsv:2; +- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms +- UINT32 OffPeriod:8; // blinking off period unit 1ms +- UINT32 OnPeriod:8; // blinking on period unit 1ms +- } field; +- UINT32 word; +-} LED_CFG_STRUC, *PLED_CFG_STRUC; +-#else +-typedef union _LED_CFG_STRUC { +- struct { +- UINT32 OnPeriod:8; // blinking on period unit 1ms +- UINT32 OffPeriod:8; // blinking off period unit 1ms +- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms +- UINT32 rsv:2; +- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on +- UINT32 GLedMode:2; // green Led Mode +- UINT32 YLedMode:2; // yellow Led Mode +- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high +- UINT32 :1; +- } field; +- UINT32 word; +-} LED_CFG_STRUC, *PLED_CFG_STRUC; +-#endif +-// +-// 4.2 MAC TIMING configuration registers (offset:0x1100) +-// +-#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 +-#ifdef RT_BIG_ENDIAN +-typedef union _IFS_SLOT_CFG_STRUC { +- struct { +- UINT32 rsv:2; +- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer +- UINT32 EIFS:9; // unit 1us +- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND +- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX +- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX +- } field; +- UINT32 word; +-} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; +-#else +-typedef union _IFS_SLOT_CFG_STRUC { +- struct { +- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX +- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX +- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND +- UINT32 EIFS:9; // unit 1us +- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer +- UINT32 rsv:2; +- } field; +- UINT32 word; +-} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; +-#endif +- +-#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits +-#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) +-#define CH_TIME_CFG 0x110C // Count as channel busy +-#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us +-#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 +- +-#define BCN_OFFSET0 0x042C +-#define BCN_OFFSET1 0x0430 +- +-// +-// BCN_TIME_CFG : Synchronization control register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _BCN_TIME_CFG_STRUC { +- struct { +- UINT32 TxTimestampCompensate:8; +- UINT32 :3; +- UINT32 bBeaconGen:1; // Enable beacon generator +- UINT32 bTBTTEnable:1; +- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode +- UINT32 bTsfTicking:1; // Enable TSF auto counting +- UINT32 BeaconInterval:16; // in unit of 1/16 TU +- } field; +- UINT32 word; +-} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; +-#else +-typedef union _BCN_TIME_CFG_STRUC { +- struct { +- UINT32 BeaconInterval:16; // in unit of 1/16 TU +- UINT32 bTsfTicking:1; // Enable TSF auto counting +- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode +- UINT32 bTBTTEnable:1; +- UINT32 bBeaconGen:1; // Enable beacon generator +- UINT32 :3; +- UINT32 TxTimestampCompensate:8; +- } field; +- UINT32 word; +-} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; +-#endif +-#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 +-#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only +-#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. +-#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 +-#define INT_TIMER_CFG 0x1128 // +-#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable +-#define CH_IDLE_STA 0x1130 // channel idle time +-#define CH_BUSY_STA 0x1134 // channle busy time +-// +-// 4.2 MAC POWER configuration registers (offset:0x1200) +-// +-#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 +-#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 +-#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 +-// +-// AUTO_WAKEUP_CFG: Manual power control / status register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _AUTO_WAKEUP_STRUC { +- struct { +- UINT32 :16; +- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake +- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set +- UINT32 AutoLeadTime:8; +- } field; +- UINT32 word; +-} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; +-#else +-typedef union _AUTO_WAKEUP_STRUC { +- struct { +- UINT32 AutoLeadTime:8; +- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set +- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake +- UINT32 :16; +- } field; +- UINT32 word; +-} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; +-#endif +-// +-// 4.3 MAC TX configuration registers (offset:0x1300) +-// +- +-#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 +-#define EDCA_AC1_CFG 0x1304 +-#define EDCA_AC2_CFG 0x1308 +-#define EDCA_AC3_CFG 0x130c +-#ifdef RT_BIG_ENDIAN +-typedef union _EDCA_AC_CFG_STRUC { +- struct { +- UINT32 :12; // +- UINT32 Cwmax:4; //unit power of 2 +- UINT32 Cwmin:4; // +- UINT32 Aifsn:4; // # of slot time +- UINT32 AcTxop:8; // in unit of 32us +- } field; +- UINT32 word; +-} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; +-#else +-typedef union _EDCA_AC_CFG_STRUC { +- struct { +- UINT32 AcTxop:8; // in unit of 32us +- UINT32 Aifsn:4; // # of slot time +- UINT32 Cwmin:4; // +- UINT32 Cwmax:4; //unit power of 2 +- UINT32 :12; // +- } field; +- UINT32 word; +-} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; +-#endif +- +-#define EDCA_TID_AC_MAP 0x1310 +-#define TX_PWR_CFG_0 0x1314 +-#define TX_PWR_CFG_1 0x1318 +-#define TX_PWR_CFG_2 0x131C +-#define TX_PWR_CFG_3 0x1320 +-#define TX_PWR_CFG_4 0x1324 +-#define TX_PIN_CFG 0x1328 +-#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz +-#define TX_SW_CFG0 0x1330 +-#define TX_SW_CFG1 0x1334 +-#define TX_SW_CFG2 0x1338 +-#define TXOP_THRES_CFG 0x133c +-#define TXOP_CTRL_CFG 0x1340 +-#define TX_RTS_CFG 0x1344 +- +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_RTS_CFG_STRUC { +- struct { +- UINT32 rsv:7; +- UINT32 RtsFbkEn:1; // enable rts rate fallback +- UINT32 RtsThres:16; // unit:byte +- UINT32 AutoRtsRetryLimit:8; +- } field; +- UINT32 word; +-} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; +-#else +-typedef union _TX_RTS_CFG_STRUC { +- struct { +- UINT32 AutoRtsRetryLimit:8; +- UINT32 RtsThres:16; // unit:byte +- UINT32 RtsFbkEn:1; // enable rts rate fallback +- UINT32 rsv:7; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; +-#endif +-#define TX_TIMEOUT_CFG 0x1348 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_TIMEOUT_CFG_STRUC { +- struct { +- UINT32 rsv2:8; +- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) +- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure +- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us +- UINT32 rsv:4; +- } field; +- UINT32 word; +-} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; +-#else +-typedef union _TX_TIMEOUT_CFG_STRUC { +- struct { +- UINT32 rsv:4; +- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us +- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure +- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) +- UINT32 rsv2:8; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; +-#endif +-#define TX_RTY_CFG 0x134c +-#ifdef RT_BIG_ENDIAN +-typedef union PACKED _TX_RTY_CFG_STRUC { +- struct { +- UINT32 rsv:1; +- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable +- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 LongRtyThre:12; // Long retry threshoold +- UINT32 LongRtyLimit:8; //long retry limit +- UINT32 ShortRtyLimit:8; // short retry limit +- +- } field; +- UINT32 word; +-} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; +-#else +-typedef union PACKED _TX_RTY_CFG_STRUC { +- struct { +- UINT32 ShortRtyLimit:8; // short retry limit +- UINT32 LongRtyLimit:8; //long retry limit +- UINT32 LongRtyThre:12; // Long retry threshoold +- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable +- UINT32 rsv:1; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; +-#endif +-#define TX_LINK_CFG 0x1350 +-#ifdef RT_BIG_ENDIAN +-typedef union PACKED _TX_LINK_CFG_STRUC { +- struct PACKED { +- UINT32 RemotMFS:8; //remote MCS feedback sequence number +- UINT32 RemotMFB:8; // remote MCS feedback +- UINT32 rsv:3; // +- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable +- UINT32 TxRDGEn:1; // RDG TX enable +- UINT32 TxMRQEn:1; // MCS request TX enable +- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) +- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable +- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us +- } field; +- UINT32 word; +-} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; +-#else +-typedef union PACKED _TX_LINK_CFG_STRUC { +- struct PACKED { +- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us +- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable +- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) +- UINT32 TxMRQEn:1; // MCS request TX enable +- UINT32 TxRDGEn:1; // RDG TX enable +- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable +- UINT32 rsv:3; // +- UINT32 RemotMFB:8; // remote MCS feedback +- UINT32 RemotMFS:8; //remote MCS feedback sequence number +- } field; +- UINT32 word; +-} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; +-#endif +-#define HT_FBK_CFG0 0x1354 +-#ifdef RT_BIG_ENDIAN +-typedef union PACKED _HT_FBK_CFG0_STRUC { +- struct { +- UINT32 HTMCS7FBK:4; +- UINT32 HTMCS6FBK:4; +- UINT32 HTMCS5FBK:4; +- UINT32 HTMCS4FBK:4; +- UINT32 HTMCS3FBK:4; +- UINT32 HTMCS2FBK:4; +- UINT32 HTMCS1FBK:4; +- UINT32 HTMCS0FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; +-#else +-typedef union PACKED _HT_FBK_CFG0_STRUC { +- struct { +- UINT32 HTMCS0FBK:4; +- UINT32 HTMCS1FBK:4; +- UINT32 HTMCS2FBK:4; +- UINT32 HTMCS3FBK:4; +- UINT32 HTMCS4FBK:4; +- UINT32 HTMCS5FBK:4; +- UINT32 HTMCS6FBK:4; +- UINT32 HTMCS7FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; +-#endif +-#define HT_FBK_CFG1 0x1358 +-#ifdef RT_BIG_ENDIAN +-typedef union _HT_FBK_CFG1_STRUC { +- struct { +- UINT32 HTMCS15FBK:4; +- UINT32 HTMCS14FBK:4; +- UINT32 HTMCS13FBK:4; +- UINT32 HTMCS12FBK:4; +- UINT32 HTMCS11FBK:4; +- UINT32 HTMCS10FBK:4; +- UINT32 HTMCS9FBK:4; +- UINT32 HTMCS8FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; +-#else +-typedef union _HT_FBK_CFG1_STRUC { +- struct { +- UINT32 HTMCS8FBK:4; +- UINT32 HTMCS9FBK:4; +- UINT32 HTMCS10FBK:4; +- UINT32 HTMCS11FBK:4; +- UINT32 HTMCS12FBK:4; +- UINT32 HTMCS13FBK:4; +- UINT32 HTMCS14FBK:4; +- UINT32 HTMCS15FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; +-#endif +-#define LG_FBK_CFG0 0x135c +-#ifdef RT_BIG_ENDIAN +-typedef union _LG_FBK_CFG0_STRUC { +- struct { +- UINT32 OFDMMCS7FBK:4; //initial value is 6 +- UINT32 OFDMMCS6FBK:4; //initial value is 5 +- UINT32 OFDMMCS5FBK:4; //initial value is 4 +- UINT32 OFDMMCS4FBK:4; //initial value is 3 +- UINT32 OFDMMCS3FBK:4; //initial value is 2 +- UINT32 OFDMMCS2FBK:4; //initial value is 1 +- UINT32 OFDMMCS1FBK:4; //initial value is 0 +- UINT32 OFDMMCS0FBK:4; //initial value is 0 +- } field; +- UINT32 word; +-} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; +-#else +-typedef union _LG_FBK_CFG0_STRUC { +- struct { +- UINT32 OFDMMCS0FBK:4; //initial value is 0 +- UINT32 OFDMMCS1FBK:4; //initial value is 0 +- UINT32 OFDMMCS2FBK:4; //initial value is 1 +- UINT32 OFDMMCS3FBK:4; //initial value is 2 +- UINT32 OFDMMCS4FBK:4; //initial value is 3 +- UINT32 OFDMMCS5FBK:4; //initial value is 4 +- UINT32 OFDMMCS6FBK:4; //initial value is 5 +- UINT32 OFDMMCS7FBK:4; //initial value is 6 +- } field; +- UINT32 word; +-} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; +-#endif +-#define LG_FBK_CFG1 0x1360 +-#ifdef RT_BIG_ENDIAN +-typedef union _LG_FBK_CFG1_STRUC { +- struct { +- UINT32 rsv:16; +- UINT32 CCKMCS3FBK:4; //initial value is 2 +- UINT32 CCKMCS2FBK:4; //initial value is 1 +- UINT32 CCKMCS1FBK:4; //initial value is 0 +- UINT32 CCKMCS0FBK:4; //initial value is 0 +- } field; +- UINT32 word; +-} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; +-#else +-typedef union _LG_FBK_CFG1_STRUC { +- struct { +- UINT32 CCKMCS0FBK:4; //initial value is 0 +- UINT32 CCKMCS1FBK:4; //initial value is 0 +- UINT32 CCKMCS2FBK:4; //initial value is 1 +- UINT32 CCKMCS3FBK:4; //initial value is 2 +- UINT32 rsv:16; +- } field; +- UINT32 word; +-} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; +-#endif +- +- +-//======================================================= +-//================ Protection Paramater================================ +-//======================================================= +-#define CCK_PROT_CFG 0x1364 //CCK Protection +-#define ASIC_SHORTNAV 1 +-#define ASIC_LONGNAV 2 +-#define ASIC_RTS 1 +-#define ASIC_CTS 2 +-#ifdef RT_BIG_ENDIAN +-typedef union _PROT_CFG_STRUC { +- struct { +- UINT32 rsv:5; +- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX +- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. +- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. +- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv +- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv +- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). +- } field; +- UINT32 word; +-} PROT_CFG_STRUC, *PPROT_CFG_STRUC; +-#else +-typedef union _PROT_CFG_STRUC { +- struct { +- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). +- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv +- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv +- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. +- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. +- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX +- UINT32 rsv:5; +- } field; +- UINT32 word; +-} PROT_CFG_STRUC, *PPROT_CFG_STRUC; +-#endif +- +-#define OFDM_PROT_CFG 0x1368 //OFDM Protection +-#define MM20_PROT_CFG 0x136C //MM20 Protection +-#define MM40_PROT_CFG 0x1370 //MM40 Protection +-#define GF20_PROT_CFG 0x1374 //GF20 Protection +-#define GF40_PROT_CFG 0x1378 //GR40 Protection +-#define EXP_CTS_TIME 0x137C // +-#define EXP_ACK_TIME 0x1380 // +- +-// +-// 4.4 MAC RX configuration registers (offset:0x1400) +-// +-#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 +-#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 +-// +-// TXRX_CSR4: Auto-Responder/ +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _AUTO_RSP_CFG_STRUC { +- struct { +- UINT32 :24; +- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame +- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame +- UINT32 rsv:1; // Power bit value in conrtrol frame +- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble +- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode +- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode +- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble +- UINT32 AutoResponderEnable:1; +- } field; +- UINT32 word; +-} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; +-#else +-typedef union _AUTO_RSP_CFG_STRUC { +- struct { +- UINT32 AutoResponderEnable:1; +- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble +- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode +- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode +- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble +- UINT32 rsv:1; // Power bit value in conrtrol frame +- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame +- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame +- UINT32 :24; +- } field; +- UINT32 word; +-} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; +-#endif +- +-#define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054 +-#define HT_BASIC_RATE 0x140c +-#define HT_CTRL_CFG 0x1410 +-#define SIFS_COST_CFG 0x1414 +-#define RX_PARSER_CFG 0x1418 //Set NAV for all received frames +- +-// +-// 4.5 MAC Security configuration (offset:0x1500) +-// +-#define TX_SEC_CNT0 0x1500 // +-#define RX_SEC_CNT0 0x1504 // +-#define CCMP_FC_MUTE 0x1508 // +-// +-// 4.6 HCCA/PSMP (offset:0x1600) +-// +-#define TXOP_HLDR_ADDR0 0x1600 +-#define TXOP_HLDR_ADDR1 0x1604 +-#define TXOP_HLDR_ET 0x1608 +-#define QOS_CFPOLL_RA_DW0 0x160c +-#define QOS_CFPOLL_A1_DW1 0x1610 +-#define QOS_CFPOLL_QC 0x1614 +-// +-// 4.7 MAC Statistis registers (offset:0x1700) +-// +-#define RX_STA_CNT0 0x1700 // +-#define RX_STA_CNT1 0x1704 // +-#define RX_STA_CNT2 0x1708 // +- +-// +-// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _RX_STA_CNT0_STRUC { +- struct { +- USHORT PhyErr; +- USHORT CrcErr; +- } field; +- UINT32 word; +-} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; +-#else +-typedef union _RX_STA_CNT0_STRUC { +- struct { +- USHORT CrcErr; +- USHORT PhyErr; +- } field; +- UINT32 word; +-} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; +-#endif +- +-// +-// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _RX_STA_CNT1_STRUC { +- struct { +- USHORT PlcpErr; +- USHORT FalseCca; +- } field; +- UINT32 word; +-} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; +-#else +-typedef union _RX_STA_CNT1_STRUC { +- struct { +- USHORT FalseCca; +- USHORT PlcpErr; +- } field; +- UINT32 word; +-} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; +-#endif +- +-// +-// RX_STA_CNT2_STRUC: +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _RX_STA_CNT2_STRUC { +- struct { +- USHORT RxFifoOverflowCount; +- USHORT RxDupliCount; +- } field; +- UINT32 word; +-} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; +-#else +-typedef union _RX_STA_CNT2_STRUC { +- struct { +- USHORT RxDupliCount; +- USHORT RxFifoOverflowCount; +- } field; +- UINT32 word; +-} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; +-#endif +-#define TX_STA_CNT0 0x170C // +-// +-// STA_CSR3: TX Beacon count +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_STA_CNT0_STRUC { +- struct { +- USHORT TxBeaconCount; +- USHORT TxFailCount; +- } field; +- UINT32 word; +-} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; +-#else +-typedef union _TX_STA_CNT0_STRUC { +- struct { +- USHORT TxFailCount; +- USHORT TxBeaconCount; +- } field; +- UINT32 word; +-} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; +-#endif +-#define TX_STA_CNT1 0x1710 // +-// +-// TX_STA_CNT1: TX tx count +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_STA_CNT1_STRUC { +- struct { +- USHORT TxRetransmit; +- USHORT TxSuccess; +- } field; +- UINT32 word; +-} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; +-#else +-typedef union _TX_STA_CNT1_STRUC { +- struct { +- USHORT TxSuccess; +- USHORT TxRetransmit; +- } field; +- UINT32 word; +-} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; +-#endif +-#define TX_STA_CNT2 0x1714 // +-// +-// TX_STA_CNT2: TX tx count +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_STA_CNT2_STRUC { +- struct { +- USHORT TxUnderFlowCount; +- USHORT TxZeroLenCount; +- } field; +- UINT32 word; +-} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; +-#else +-typedef union _TX_STA_CNT2_STRUC { +- struct { +- USHORT TxZeroLenCount; +- USHORT TxUnderFlowCount; +- } field; +- UINT32 word; +-} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; +-#endif +-#define TX_STA_FIFO 0x1718 // +-// +-// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union PACKED _TX_STA_FIFO_STRUC { +- struct { +- UINT32 Reserve:2; +- UINT32 TxBF:1; // 3*3 +- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 wcid:8; //wireless client index +- UINT32 TxAckRequired:1; // ack required +- UINT32 TxAggre:1; // Tx is aggregated +- UINT32 TxSuccess:1; // Tx success. whether success or not +- UINT32 PidType:4; +- UINT32 bValid:1; // 1:This register contains a valid TX result +- } field; +- UINT32 word; +-} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; +-#else +-typedef union PACKED _TX_STA_FIFO_STRUC { +- struct { +- UINT32 bValid:1; // 1:This register contains a valid TX result +- UINT32 PidType:4; +- UINT32 TxSuccess:1; // Tx No retry success +- UINT32 TxAggre:1; // Tx Retry Success +- UINT32 TxAckRequired:1; // Tx fail +- UINT32 wcid:8; //wireless client index +-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 TxBF:1; +- UINT32 Reserve:2; +- } field; +- UINT32 word; +-} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; +-#endif +-// Debug counter +-#define TX_AGG_CNT 0x171c +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT_STRUC { +- struct { +- USHORT AggTxCount; +- USHORT NonAggTxCount; +- } field; +- UINT32 word; +-} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; +-#else +-typedef union _TX_AGG_CNT_STRUC { +- struct { +- USHORT NonAggTxCount; +- USHORT AggTxCount; +- } field; +- UINT32 word; +-} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; +-#endif +-// Debug counter +-#define TX_AGG_CNT0 0x1720 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT0_STRUC { +- struct { +- USHORT AggSize2Count; +- USHORT AggSize1Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; +-#else +-typedef union _TX_AGG_CNT0_STRUC { +- struct { +- USHORT AggSize1Count; +- USHORT AggSize2Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; +-#endif +-// Debug counter +-#define TX_AGG_CNT1 0x1724 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT1_STRUC { +- struct { +- USHORT AggSize4Count; +- USHORT AggSize3Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; +-#else +-typedef union _TX_AGG_CNT1_STRUC { +- struct { +- USHORT AggSize3Count; +- USHORT AggSize4Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; +-#endif +-#define TX_AGG_CNT2 0x1728 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT2_STRUC { +- struct { +- USHORT AggSize6Count; +- USHORT AggSize5Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; +-#else +-typedef union _TX_AGG_CNT2_STRUC { +- struct { +- USHORT AggSize5Count; +- USHORT AggSize6Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; +-#endif +-// Debug counter +-#define TX_AGG_CNT3 0x172c +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT3_STRUC { +- struct { +- USHORT AggSize8Count; +- USHORT AggSize7Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; +-#else +-typedef union _TX_AGG_CNT3_STRUC { +- struct { +- USHORT AggSize7Count; +- USHORT AggSize8Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; +-#endif +-// Debug counter +-#define TX_AGG_CNT4 0x1730 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT4_STRUC { +- struct { +- USHORT AggSize10Count; +- USHORT AggSize9Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; +-#else +-typedef union _TX_AGG_CNT4_STRUC { +- struct { +- USHORT AggSize9Count; +- USHORT AggSize10Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; +-#endif +-#define TX_AGG_CNT5 0x1734 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT5_STRUC { +- struct { +- USHORT AggSize12Count; +- USHORT AggSize11Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; +-#else +-typedef union _TX_AGG_CNT5_STRUC { +- struct { +- USHORT AggSize11Count; +- USHORT AggSize12Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; +-#endif +-#define TX_AGG_CNT6 0x1738 +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT6_STRUC { +- struct { +- USHORT AggSize14Count; +- USHORT AggSize13Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; +-#else +-typedef union _TX_AGG_CNT6_STRUC { +- struct { +- USHORT AggSize13Count; +- USHORT AggSize14Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; +-#endif +-#define TX_AGG_CNT7 0x173c +-#ifdef RT_BIG_ENDIAN +-typedef union _TX_AGG_CNT7_STRUC { +- struct { +- USHORT AggSize16Count; +- USHORT AggSize15Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; +-#else +-typedef union _TX_AGG_CNT7_STRUC { +- struct { +- USHORT AggSize15Count; +- USHORT AggSize16Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; +-#endif +-#define MPDU_DENSITY_CNT 0x1740 +-#ifdef RT_BIG_ENDIAN +-typedef union _MPDU_DEN_CNT_STRUC { +- struct { +- USHORT RXZeroDelCount; //RX zero length delimiter count +- USHORT TXZeroDelCount; //TX zero length delimiter count +- } field; +- UINT32 word; +-} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; +-#else +-typedef union _MPDU_DEN_CNT_STRUC { +- struct { +- USHORT TXZeroDelCount; //TX zero length delimiter count +- USHORT RXZeroDelCount; //RX zero length delimiter count +- } field; +- UINT32 word; +-} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; +-#endif +-// +-// TXRX control registers - base address 0x3000 +-// +-// rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first.. +-#define TXRX_CSR1 0x77d0 +- +-// +-// Security key table memory, base address = 0x1000 +-// +-#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = +-#define HW_WCID_ENTRY_SIZE 8 +-#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte +-#define HW_KEY_ENTRY_SIZE 0x20 +-#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define HW_IVEIV_ENTRY_SIZE 8 +-#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte +-#define HW_WCID_ATTRI_SIZE 4 +-#define WCID_RESERVED 0x6bfc +-#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte +-#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte +-#define HW_SHARED_KEY_MODE_SIZE 4 +-#define SHAREDKEYTABLE 0 +-#define PAIRWISEKEYTABLE 1 +- +- +-#ifdef RT_BIG_ENDIAN +-typedef union _SHAREDKEY_MODE_STRUC { +- struct { +- UINT32 :1; +- UINT32 Bss1Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key0CipherAlg:3; +- } field; +- UINT32 word; +-} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; +-#else +-typedef union _SHAREDKEY_MODE_STRUC { +- struct { +- UINT32 Bss0Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; +-#endif +-// 64-entry for pairwise key table +-typedef struct _HW_WCID_ENTRY { // 8-byte per entry +- UCHAR Address[6]; +- UCHAR Rsv[2]; +-} HW_WCID_ENTRY, PHW_WCID_ENTRY; +- +- +-// ================================================================================= +-// WCID format +-// ================================================================================= +-//7.1 WCID ENTRY format : 8bytes +-typedef struct _WCID_ENTRY_STRUC { +- UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 +- UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 +- UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table +-} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; +- +-//8.1.1 SECURITY KEY format : 8DW +-// 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table +-typedef struct _HW_KEY_ENTRY { // 32-byte per entry +- UCHAR Key[16]; +- UCHAR TxMic[8]; +- UCHAR RxMic[8]; +-} HW_KEY_ENTRY, *PHW_KEY_ENTRY; +- +-//8.1.2 IV/EIV format : 2DW +- +-//8.1.3 RX attribute entry format : 1DW +-#ifdef RT_BIG_ENDIAN +-typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 rsv:22; +- UINT32 RXWIUDF:3; +- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID +- UINT32 PairKeyMode:3; +- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table +-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; +-#else +-typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table +- UINT32 PairKeyMode:3; +- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID +- UINT32 RXWIUDF:3; +- UINT32 rsv:22; +-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; +-#endif +- +- +-// ================================================================================= +-// HOST-MCU communication data structure +-// ================================================================================= +- +-// +-// H2M_MAILBOX_CSR: Host-to-MCU Mailbox +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _H2M_MAILBOX_STRUC { +- struct { +- UINT32 Owner:8; +- UINT32 CmdToken:8; // 0xff tells MCU not to report CmdDoneInt after excuting the command +- UINT32 HighByte:8; +- UINT32 LowByte:8; +- } field; +- UINT32 word; +-} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; +-#else +-typedef union _H2M_MAILBOX_STRUC { +- struct { +- UINT32 LowByte:8; +- UINT32 HighByte:8; +- UINT32 CmdToken:8; +- UINT32 Owner:8; +- } field; +- UINT32 word; +-} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; +-#endif +- +-// +-// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _M2H_CMD_DONE_STRUC { +- struct { +- UINT32 CmdToken3; +- UINT32 CmdToken2; +- UINT32 CmdToken1; +- UINT32 CmdToken0; +- } field; +- UINT32 word; +-} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; +-#else +-typedef union _M2H_CMD_DONE_STRUC { +- struct { +- UINT32 CmdToken0; +- UINT32 CmdToken1; +- UINT32 CmdToken2; +- UINT32 CmdToken3; +- } field; +- UINT32 word; +-} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; +-#endif +- +- +-//NAV_TIME_CFG :NAV +-#ifdef RT_BIG_ENDIAN +-typedef union _NAV_TIME_CFG_STRUC { +- struct { +- USHORT rsv:6; +- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable +- USHORT Eifs:9; // in unit of 1-us +- UCHAR SlotTime; // in unit of 1-us +- UCHAR Sifs; // in unit of 1-us +- } field; +- UINT32 word; +-} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; +-#else +-typedef union _NAV_TIME_CFG_STRUC { +- struct { +- UCHAR Sifs; // in unit of 1-us +- UCHAR SlotTime; // in unit of 1-us +- USHORT Eifs:9; // in unit of 1-us +- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable +- USHORT rsv:6; +- } field; +- UINT32 word; +-} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; +-#endif +- +- +-// +-// RX_FILTR_CFG: /RX configuration register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union RX_FILTR_CFG_STRUC { +- struct { +- UINT32 :15; +- UINT32 DropRsvCntlType:1; +- +- UINT32 DropBAR:1; // +- UINT32 DropBA:1; // +- UINT32 DropPsPoll:1; // Drop Ps-Poll +- UINT32 DropRts:1; // Drop Ps-Poll +- +- UINT32 DropCts:1; // Drop Ps-Poll +- UINT32 DropAck:1; // Drop Ps-Poll +- UINT32 DropCFEnd:1; // Drop Ps-Poll +- UINT32 DropCFEndAck:1; // Drop Ps-Poll +- +- UINT32 DropDuplicate:1; // Drop duplicate frame +- UINT32 DropBcast:1; // Drop broadcast frames +- UINT32 DropMcast:1; // Drop multicast frames +- UINT32 DropVerErr:1; // Drop version error frame +- +- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true +- UINT32 DropNotToMe:1; // Drop not to me unicast frame +- UINT32 DropPhyErr:1; // Drop physical error +- UINT32 DropCRCErr:1; // Drop CRC error +- } field; +- UINT32 word; +-} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; +-#else +-typedef union _RX_FILTR_CFG_STRUC { +- struct { +- UINT32 DropCRCErr:1; // Drop CRC error +- UINT32 DropPhyErr:1; // Drop physical error +- UINT32 DropNotToMe:1; // Drop not to me unicast frame +- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true +- +- UINT32 DropVerErr:1; // Drop version error frame +- UINT32 DropMcast:1; // Drop multicast frames +- UINT32 DropBcast:1; // Drop broadcast frames +- UINT32 DropDuplicate:1; // Drop duplicate frame +- +- UINT32 DropCFEndAck:1; // Drop Ps-Poll +- UINT32 DropCFEnd:1; // Drop Ps-Poll +- UINT32 DropAck:1; // Drop Ps-Poll +- UINT32 DropCts:1; // Drop Ps-Poll +- +- UINT32 DropRts:1; // Drop Ps-Poll +- UINT32 DropPsPoll:1; // Drop Ps-Poll +- UINT32 DropBA:1; // +- UINT32 DropBAR:1; // +- +- UINT32 DropRsvCntlType:1; +- UINT32 :15; +- } field; +- UINT32 word; +-} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; +-#endif +- +- +- +- +-// +-// PHY_CSR4: RF serial control register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _PHY_CSR4_STRUC { +- struct { +- UINT32 Busy:1; // 1: ASIC is busy execute RF programming. +- UINT32 PLL_LD:1; // RF PLL_LD status +- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program +- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) +- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. +- } field; +- UINT32 word; +-} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; +-#else +-typedef union _PHY_CSR4_STRUC { +- struct { +- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. +- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) +- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program +- UINT32 PLL_LD:1; // RF PLL_LD status +- UINT32 Busy:1; // 1: ASIC is busy execute RF programming. +- } field; +- UINT32 word; +-} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; +-#endif +- +- +-// +-// SEC_CSR5: shared key table security mode register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _SEC_CSR5_STRUC { +- struct { +- UINT32 :1; +- UINT32 Bss3Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key0CipherAlg:3; +- } field; +- UINT32 word; +-} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; +-#else +-typedef union _SEC_CSR5_STRUC { +- struct { +- UINT32 Bss2Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; +-#endif +- +- +-// +-// HOST_CMD_CSR: For HOST to interrupt embedded processor +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _HOST_CMD_CSR_STRUC { +- struct { +- UINT32 Rsv:24; +- UINT32 HostCommand:8; +- } field; +- UINT32 word; +-} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; +-#else +-typedef union _HOST_CMD_CSR_STRUC { +- struct { +- UINT32 HostCommand:8; +- UINT32 Rsv:24; +- } field; +- UINT32 word; +-} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; +-#endif +- +- +-// +-// AIFSN_CSR: AIFSN for each EDCA AC +-// +- +- +- +-// +-// E2PROM_CSR: EEPROM control register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _E2PROM_CSR_STRUC { +- struct { +- UINT32 Rsvd:25; +- UINT32 LoadStatus:1; // 1:loading, 0:done +- UINT32 Type:1; // 1: 93C46, 0:93C66 +- UINT32 EepromDO:1; +- UINT32 EepromDI:1; +- UINT32 EepromCS:1; +- UINT32 EepromSK:1; +- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. +- } field; +- UINT32 word; +-} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; +-#else +-typedef union _E2PROM_CSR_STRUC { +- struct { +- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. +- UINT32 EepromSK:1; +- UINT32 EepromCS:1; +- UINT32 EepromDI:1; +- UINT32 EepromDO:1; +- UINT32 Type:1; // 1: 93C46, 0:93C66 +- UINT32 LoadStatus:1; // 1:loading, 0:done +- UINT32 Rsvd:25; +- } field; +- UINT32 word; +-} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; +-#endif +- +-// +-// QOS_CSR0: TXOP holder address0 register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _QOS_CSR0_STRUC { +- struct { +- UCHAR Byte3; // MAC address byte 3 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte0; // MAC address byte 0 +- } field; +- UINT32 word; +-} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; +-#else +-typedef union _QOS_CSR0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; +-#endif +- +-// +-// QOS_CSR1: TXOP holder address1 register +-// +-#ifdef RT_BIG_ENDIAN +-typedef union _QOS_CSR1_STRUC { +- struct { +- UCHAR Rsvd1; +- UCHAR Rsvd0; +- UCHAR Byte5; // MAC address byte 5 +- UCHAR Byte4; // MAC address byte 4 +- } field; +- UINT32 word; +-} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; +-#else +-typedef union _QOS_CSR1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR Rsvd0; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; +-#endif +- +-#define RF_CSR_CFG 0x500 +-#ifdef RT_BIG_ENDIAN +-typedef union _RF_CSR_CFG_STRUC { +- struct { +- UINT Rsvd1:14; // Reserved +- UINT RF_CSR_KICK:1; // kick RF register read/write +- UINT RF_CSR_WR:1; // 0: read 1: write +- UINT Rsvd2:3; // Reserved +- UINT TESTCSR_RFACC_REGNUM:5; // RF register ID +- UINT RF_CSR_DATA:8; // DATA +- } field; +- UINT word; +-} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; +-#else +-typedef union _RF_CSR_CFG_STRUC { +- struct { +- UINT RF_CSR_DATA:8; // DATA +- UINT TESTCSR_RFACC_REGNUM:5; // RF register ID +- UINT Rsvd2:3; // Reserved +- UINT RF_CSR_WR:1; // 0: read 1: write +- UINT RF_CSR_KICK:1; // kick RF register read/write +- UINT Rsvd1:14; // Reserved +- } field; +- UINT word; +-} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; +-#endif +- +- +-// +-// Other on-chip shared memory space, base = 0x2000 +-// +- +-// CIS space - base address = 0x2000 +-#define HW_CIS_BASE 0x2000 +- +-// Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function. +-#define HW_CS_CTS_BASE 0x7700 +-// DFS CTS frame base address. It's where mac stores CTS frame for DFS. +-#define HW_DFS_CTS_BASE 0x7780 +-#define HW_CTS_FRAME_SIZE 0x80 +- +-// 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes +-// to save debugging settings +-#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes +-#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes +- +-// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon +-// Three section discontinue memory segments will be used. +-// 1. The original region for BCN 0~3 +-// 2. Extract memory from FCE table for BCN 4~5 +-// 3. Extract memory from Pair-wise key table for BCN 6~7 +-// It occupied those memory of wcid 238~253 for BCN 6 +-// and wcid 222~237 for BCN 7 +-#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ +-#define HW_BEACON_BASE0 0x7800 +-#define HW_BEACON_BASE1 0x7A00 +-#define HW_BEACON_BASE2 0x7C00 +-#define HW_BEACON_BASE3 0x7E00 +-#define HW_BEACON_BASE4 0x7200 +-#define HW_BEACON_BASE5 0x7400 +-#define HW_BEACON_BASE6 0x5DC0 +-#define HW_BEACON_BASE7 0x5BC0 +- +-#define HW_BEACON_MAX_COUNT 8 +-#define HW_BEACON_OFFSET 0x0200 +-#define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE) +- +-// HOST-MCU shared memory - base address = 0x2100 +-#define HOST_CMD_CSR 0x404 +-#define H2M_MAILBOX_CSR 0x7010 +-#define H2M_MAILBOX_CID 0x7014 +-#define H2M_MAILBOX_STATUS 0x701c +-#define H2M_INT_SRC 0x7024 +-#define H2M_BBP_AGENT 0x7028 +-#define M2H_CMD_DONE_CSR 0x000c +-#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert +-#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert +-#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware +-#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert +-#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert +- +-// +-// Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, +-// +-// +-// DMA RING DESCRIPTOR +-// +-#define E2PROM_CSR 0x0004 +-#define IO_CNTL_CSR 0x77d0 +- +- +- +-// ================================================================ +-// Tx / Rx / Mgmt ring descriptor definition +-// ================================================================ +- +-// the following PID values are used to mark outgoing frame type in TXD->PID so that +-// proper TX statistics can be collected based on these categories +-// b3-2 of PID field - +-#define PID_MGMT 0x05 +-#define PID_BEACON 0x0c +-#define PID_DATA_NORMALUCAST 0x02 +-#define PID_DATA_AMPDU 0x04 +-#define PID_DATA_NO_ACK 0x08 +-#define PID_DATA_NOT_NORM_ACK 0x03 +-// value domain of pTxD->HostQId (4-bit: 0~15) +-#define QID_AC_BK 1 // meet ACI definition in 802.11e +-#define QID_AC_BE 0 // meet ACI definition in 802.11e +-#define QID_AC_VI 2 +-#define QID_AC_VO 3 +-#define QID_HCCA 4 +-//#define NUM_OF_TX_RING 5 +-#define NUM_OF_TX_RING 4 +-#define QID_MGMT 13 +-#define QID_RX 14 +-#define QID_OTHER 15 +- +-#endif // __RTMP_MAC_H__ // +diff --git a/drivers/staging/rt3090/rtmp_mcu.h b/drivers/staging/rt3090/rtmp_mcu.h +deleted file mode 100644 +index e1b2fee..0000000 +--- a/drivers/staging/rt3090/rtmp_mcu.h ++++ /dev/null +@@ -1,55 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_mcu.h +- +- Abstract: +- Miniport header file for mcu related information +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __RTMP_MCU_H__ +-#define __RTMP_MCU_H__ +- +- +-INT RtmpAsicEraseFirmware( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RtmpAsicLoadFirmware( +- IN PRTMP_ADAPTER pAd); +- +-INT RtmpAsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1); +- +-#endif // __RTMP_MCU_H__ // +diff --git a/drivers/staging/rt3090/rtmp_os.h b/drivers/staging/rt3090/rtmp_os.h +deleted file mode 100644 +index 5646b2d..0000000 +--- a/drivers/staging/rt3090/rtmp_os.h ++++ /dev/null +@@ -1,93 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_os.h +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +- +-#ifndef __RTMP_OS_H__ +-#define __RTMP_OS_H__ +- +-#ifdef LINUX +-#include "rt_linux.h" +-#endif // LINUX // +- +- +-/* +- This data structure mainly strip some callback function defined in +- "struct net_device" in kernel source "include/linux/netdevice.h". +- +- The definition of this data structure may various depends on different +- OS. Use it carefully. +-*/ +-typedef struct _RTMP_OS_NETDEV_OP_HOOK_ +-{ +- const struct net_device_ops *netdev_ops; +- void *priv; +- int priv_flags; +- unsigned char devAddr[6]; +- unsigned char devName[16]; +- unsigned char needProtcted; +-}RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK; +- +- +-typedef enum _RTMP_TASK_STATUS_ +-{ +- RTMP_TASK_STAT_UNKNOWN = 0, +- RTMP_TASK_STAT_INITED = 1, +- RTMP_TASK_STAT_RUNNING = 2, +- RTMP_TASK_STAT_STOPED = 4, +-}RTMP_TASK_STATUS; +-#define RTMP_TASK_CAN_DO_INSERT (RTMP_TASK_STAT_INITED |RTMP_TASK_STAT_RUNNING) +- +-#define RTMP_OS_TASK_NAME_LEN 16 +-typedef struct _RTMP_OS_TASK_ +-{ +- char taskName[RTMP_OS_TASK_NAME_LEN]; +- void *priv; +- //unsigned long taskFlags; +- RTMP_TASK_STATUS taskStatus; +-#ifndef KTHREAD_SUPPORT +- RTMP_OS_SEM taskSema; +- RTMP_OS_PID taskPID; +- struct completion taskComplete; +-#endif +- unsigned char task_killed; +-#ifdef KTHREAD_SUPPORT +- struct task_struct *kthread_task; +- wait_queue_head_t kthread_q; +- BOOLEAN kthread_running; +-#endif +-}RTMP_OS_TASK; +- +-#endif // __RMTP_OS_H__ // +diff --git a/drivers/staging/rt3090/rtmp_pci.h b/drivers/staging/rt3090/rtmp_pci.h +deleted file mode 100644 +index c2fed29..0000000 +--- a/drivers/staging/rt3090/rtmp_pci.h ++++ /dev/null +@@ -1,110 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +- +-#ifndef __RTMP_PCI_H__ +-#define __RTMP_PCI_H__ +- +-#define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ +- ((POS_COOKIE)handle)->pci_dev = dev_p; +- +- +-#ifdef LINUX +-// set driver data +-#define RT28XX_DRVDATA_SET(_a) pci_set_drvdata(_a, net_dev); +- +-#define RT28XX_PUT_DEVICE(dev_p) +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) +-#define SA_SHIRQ IRQF_SHARED +-#endif +- +-#ifdef PCI_MSI_SUPPORT +-#define RTMP_MSI_ENABLE(_pAd) \ +-{ POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- (_pAd)->HaveMsi = pci_enable_msi(_pObj->pci_dev) == 0 ? TRUE : FALSE; } +- +-#define RTMP_MSI_DISABLE(_pAd) \ +-{ POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- if (_pAd->HaveMsi == TRUE) \ +- pci_disable_msi(_pObj->pci_dev); \ +- _pAd->HaveMsi = FALSE; } +-#else +-#define RTMP_MSI_ENABLE(_pAd) +-#define RTMP_MSI_DISABLE(_pAd) +-#endif // PCI_MSI_SUPPORT // +- +- +-#define RTMP_PCI_DEV_UNMAP() \ +-{ if (net_dev->base_addr) { \ +- iounmap((void *)(net_dev->base_addr)); \ +- release_mem_region(pci_resource_start(dev_p, 0), \ +- pci_resource_len(dev_p, 0)); } \ +- if (net_dev->irq) pci_release_regions(dev_p); } +- +- +-#define RTMP_IRQ_REQUEST(net_dev) \ +-{ PRTMP_ADAPTER _pAd = (PRTMP_ADAPTER)(RTMP_OS_NETDEV_GET_PRIV(net_dev)); \ +- POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- RTMP_MSI_ENABLE(_pAd); \ +- if ((retval = request_irq(_pObj->pci_dev->irq, \ +- rt2860_interrupt, SA_SHIRQ, \ +- (net_dev)->name, (net_dev)))) { \ +- DBGPRINT(RT_DEBUG_ERROR, ("request_irq error(%d)\n", retval)); \ +- return retval; } } +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +-#define RTMP_IRQ_RELEASE(net_dev) \ +-{ PRTMP_ADAPTER _pAd = (PRTMP_ADAPTER)(RTMP_OS_NETDEV_GET_PRIV(net_dev)); \ +- POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- synchronize_irq(_pObj->pci_dev->irq); \ +- free_irq(_pObj->pci_dev->irq, (net_dev)); \ +- RTMP_MSI_DISABLE(_pAd); } +-#else +-#define RTMP_IRQ_RELEASE(net_dev) \ +-{ PRTMP_ADAPTER _pAd = (PRTMP_ADAPTER)(RTMP_OS_NETDEV_GET_PRIV(net_dev)); \ +- POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ +- free_irq(_pObj->pci_dev->irq, (net_dev)); \ +- RTMP_MSI_DISABLE(_pAd); } +-#endif +- +-#define PCI_REG_READ_WORD(pci_dev, offset, Configuration) \ +- if (pci_read_config_word(pci_dev, offset, ®16) == 0) \ +- Configuration = le2cpu16(reg16); \ +- else \ +- Configuration = 0; +- +-#define PCI_REG_WIRTE_WORD(pci_dev, offset, Configuration) \ +- reg16 = cpu2le16(Configuration); \ +- pci_write_config_word(pci_dev, offset, reg16); \ +- +-#endif // LINUX // +- +- +- +- +-#endif // __RTMP_PCI_H__ // +diff --git a/drivers/staging/rt3090/rtmp_phy.h b/drivers/staging/rt3090/rtmp_phy.h +deleted file mode 100644 +index b9848ca..0000000 +--- a/drivers/staging/rt3090/rtmp_phy.h ++++ /dev/null +@@ -1,631 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_phy.h +- +- Abstract: +- Ralink Wireless Chip PHY(BBP/RF) related definition & structures +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#ifndef __RTMP_PHY_H__ +-#define __RTMP_PHY_H__ +- +- +-/* +- RF sections +-*/ +-#define RF_R00 0 +-#define RF_R01 1 +-#define RF_R02 2 +-#define RF_R03 3 +-#define RF_R04 4 +-#define RF_R05 5 +-#define RF_R06 6 +-#define RF_R07 7 +-#define RF_R08 8 +-#define RF_R09 9 +-#define RF_R10 10 +-#define RF_R11 11 +-#define RF_R12 12 +-#define RF_R13 13 +-#define RF_R14 14 +-#define RF_R15 15 +-#define RF_R16 16 +-#define RF_R17 17 +-#define RF_R18 18 +-#define RF_R19 19 +-#define RF_R20 20 +-#define RF_R21 21 +-#define RF_R22 22 +-#define RF_R23 23 +-#define RF_R24 24 +-#define RF_R25 25 +-#define RF_R26 26 +-#define RF_R27 27 +-#define RF_R28 28 +-#define RF_R29 29 +-#define RF_R30 30 +-#define RF_R31 31 +- +- +-// value domain of pAd->RfIcType +-#define RFIC_2820 1 // 2.4G 2T3R +-#define RFIC_2850 2 // 2.4G/5G 2T3R +-#define RFIC_2720 3 // 2.4G 1T2R +-#define RFIC_2750 4 // 2.4G/5G 1T2R +-#define RFIC_3020 5 // 2.4G 1T1R +-#define RFIC_2020 6 // 2.4G B/G +-#define RFIC_3021 7 // 2.4G 1T2R +-#define RFIC_3022 8 // 2.4G 2T2R +-#define RFIC_3052 9 // 2.4G/5G 2T2R +- +-/* +- BBP sections +-*/ +-#define BBP_R0 0 // version +-#define BBP_R1 1 // TSSI +-#define BBP_R2 2 // TX configure +-#define BBP_R3 3 +-#define BBP_R4 4 +-#define BBP_R5 5 +-#define BBP_R6 6 +-#define BBP_R14 14 // RX configure +-#define BBP_R16 16 +-#define BBP_R17 17 // RX sensibility +-#define BBP_R18 18 +-#define BBP_R21 21 +-#define BBP_R22 22 +-#define BBP_R24 24 +-#define BBP_R25 25 +-#define BBP_R26 26 +-#define BBP_R27 27 +-#define BBP_R31 31 +-#define BBP_R49 49 //TSSI +-#define BBP_R50 50 +-#define BBP_R51 51 +-#define BBP_R52 52 +-#define BBP_R55 55 +-#define BBP_R62 62 // Rx SQ0 Threshold HIGH +-#define BBP_R63 63 +-#define BBP_R64 64 +-#define BBP_R65 65 +-#define BBP_R66 66 +-#define BBP_R67 67 +-#define BBP_R68 68 +-#define BBP_R69 69 +-#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold +-#define BBP_R73 73 +-#define BBP_R75 75 +-#define BBP_R77 77 +-#define BBP_R78 78 +-#define BBP_R79 79 +-#define BBP_R80 80 +-#define BBP_R81 81 +-#define BBP_R82 82 +-#define BBP_R83 83 +-#define BBP_R84 84 +-#define BBP_R86 86 +-#define BBP_R91 91 +-#define BBP_R92 92 +-#define BBP_R94 94 // Tx Gain Control +-#define BBP_R103 103 +-#define BBP_R105 105 +-#define BBP_R106 106 +-#define BBP_R113 113 +-#define BBP_R114 114 +-#define BBP_R115 115 +-#define BBP_R116 116 +-#define BBP_R117 117 +-#define BBP_R118 118 +-#define BBP_R119 119 +-#define BBP_R120 120 +-#define BBP_R121 121 +-#define BBP_R122 122 +-#define BBP_R123 123 +-#ifdef RT30xx +-#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control +-#endif // RT30xx // +- +- +-#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db +- +- +-#ifdef MERGE_ARCH_TEAM +- #define MAX_BBP_ID 200 +- #define MAX_BBP_MSG_SIZE 4096 +-#else +-#ifdef RT30xx +- // edit by johnli, RF power sequence setup, add BBP R138 for ADC dynamic on/off control +- #define MAX_BBP_ID 138 +-#endif // RT30xx // +-#ifndef RT30xx +- #define MAX_BBP_ID 136 +-#endif // RT30xx // +- #define MAX_BBP_MSG_SIZE 2048 +-#endif // MERGE_ARCH_TEAM // +- +- +-// +-// BBP & RF are using indirect access. Before write any value into it. +-// We have to make sure there is no outstanding command pending via checking busy bit. +-// +-#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register +- +-//#define PHY_TR_SWITCH_TIME 5 // usec +- +-//#define BBP_R17_LOW_SENSIBILITY 0x50 +-//#define BBP_R17_MID_SENSIBILITY 0x41 +-//#define BBP_R17_DYNAMIC_UP_BOUND 0x40 +- +-#define RSSI_FOR_VERY_LOW_SENSIBILITY -35 +-#define RSSI_FOR_LOW_SENSIBILITY -58 +-#define RSSI_FOR_MID_LOW_SENSIBILITY -80 +-#define RSSI_FOR_MID_SENSIBILITY -90 +- +-/***************************************************************************** +- RF register Read/Write marco definition +- *****************************************************************************/ +-#ifdef RTMP_MAC_PCI +-#define RTMP_RF_IO_WRITE32(_A, _V) \ +-{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- PHY_CSR4_STRUC _value; \ +- ULONG _busyCnt = 0; \ +- \ +- do { \ +- RTMP_IO_READ32((_A), RF_CSR_CFG0, &_value.word); \ +- if (_value.field.Busy == IDLE) \ +- break; \ +- _busyCnt++; \ +- }while (_busyCnt < MAX_BUSY_COUNT); \ +- if(_busyCnt < MAX_BUSY_COUNT) \ +- { \ +- RTMP_IO_WRITE32((_A), RF_CSR_CFG0, (_V)); \ +- } \ +- } \ +-} +-#endif // RTMP_MAC_PCI // +- +- +- +-#ifdef RT30xx +-#define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV) +-#define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V) +-#endif // RT30xx // +- +- +-/***************************************************************************** +- BBP register Read/Write marco definitions. +- we read/write the bbp value by register's ID. +- Generate PER to test BA +- *****************************************************************************/ +-#ifdef RTMP_MAC_PCI +-/* +- basic marco for BBP read operation. +- _pAd: the data structure pointer of RTMP_ADAPTER +- _bbpID : the bbp register ID +- _pV: data pointer used to save the value of queried bbp register. +- _bViaMCU: if we need access the bbp via the MCU. +-*/ +-#define RTMP_BBP_IO_READ8(_pAd, _bbpID, _pV, _bViaMCU) \ +- do{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int _busyCnt, _secCnt, _regID; \ +- \ +- _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ +- for (_busyCnt=0; _busyCntBbpWriteLatch[_bbpID]; \ +- if ((_bViaMCU) == TRUE) \ +- { \ +- RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \ +- BbpCsr.field.Busy = 0; \ +- RTMP_IO_WRITE32(_pAd, _regID, BbpCsr.word); \ +- } \ +- } \ +- }while(0) +- +-/* +- This marco used for the BBP read operation which didn't need via MCU. +-*/ +-#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +- RTMP_BBP_IO_READ8((_A), (_I), (_pV), FALSE) +- +-/* +- This marco used for the BBP read operation which need via MCU. +- But for some chipset which didn't have mcu (e.g., RBUS based chipset), we +- will use this function too and didn't access the bbp register via the MCU. +-*/ +-#ifndef CONFIG_STA_SUPPORT +-#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +- do{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- if ((_A)->infType == RTMP_DEV_INF_RBUS) \ +- RTMP_BBP_IO_READ8((_A), (_I), (_pV), FALSE); \ +- else \ +- RTMP_BBP_IO_READ8((_A), (_I), (_pV), TRUE); \ +- } \ +- }while(0) +-#endif // CONFIG_STA_SUPPORT // +-#ifdef CONFIG_STA_SUPPORT +-// Read BBP register by register's ID. Generate PER to test BA +-#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int i, k; \ +- BOOLEAN brc; \ +- BbpCsr.field.Busy = IDLE; \ +- if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ +- && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ +- && ((_A)->bPCIclkOff == FALSE) \ +- && ((_A)->brt30xxBanMcuCmd == FALSE)) \ +- { \ +- for (i=0; iStaCfg.PSControl.field.rt30xxPowerMode == 3) \ +- && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ +- && ((_A)->bPCIclkOff == FALSE)) \ +- { \ +- for (i=0; ibrt30xxBanMcuCmd, (_I))); \ +- *(_pV) = (_A)->BbpWriteLatch[_I]; \ +- } \ +- if ((BbpCsr.field.Busy == BUSY) || ((_A)->bPCIclkOff == TRUE)) \ +- { \ +- DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \ +- *(_pV) = (_A)->BbpWriteLatch[_I]; \ +- } \ +-} +-#endif // CONFIG_STA_SUPPORT // +- +-/* +- basic marco for BBP write operation. +- _pAd: the data structure pointer of RTMP_ADAPTER +- _bbpID : the bbp register ID +- _pV: data used to save the value of queried bbp register. +- _bViaMCU: if we need access the bbp via the MCU. +-*/ +-#define RTMP_BBP_IO_WRITE8(_pAd, _bbpID, _pV, _bViaMCU) \ +- do{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- int _busyCnt, _regID; \ +- \ +- _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ +- for (_busyCnt=0; _busyCntOpMode == OPMODE_AP) \ +- RTMPusecDelay(1000); \ +- } \ +- (_pAd)->BbpWriteLatch[_bbpID] = _pV; \ +- break; \ +- } \ +- if (_busyCnt == MAX_BUSY_COUNT) \ +- { \ +- DBGPRINT_ERR(("BBP write R%d fail\n", _bbpID)); \ +- if((_bViaMCU) == TRUE) \ +- { \ +- RTMP_IO_READ32(_pAd, H2M_BBP_AGENT, &BbpCsr.word); \ +- BbpCsr.field.Busy = 0; \ +- RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, BbpCsr.word); \ +- } \ +- } \ +- }while(0) +- +- +-/* +- This marco used for the BBP write operation which didn't need via MCU. +-*/ +-#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ +- RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), FALSE) +- +-/* +- This marco used for the BBP write operation which need via MCU. +- But for some chipset which didn't have mcu (e.g., RBUS based chipset), we +- will use this function too and didn't access the bbp register via the MCU. +-*/ +-#ifndef CONFIG_STA_SUPPORT +-#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ +- do{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- if ((_A)->infType == RTMP_DEV_INF_RBUS) \ +- RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), FALSE); \ +- else \ +- RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), TRUE); \ +- } \ +- }while(0) +-#endif // CONFIG_STA_SUPPORT // +-#ifdef CONFIG_STA_SUPPORT +-// Write BBP register by register's ID & value +-#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ +-{ \ +- BBP_CSR_CFG_STRUC BbpCsr; \ +- INT BusyCnt = 0; \ +- BOOLEAN brc; \ +- if (_I < MAX_NUM_OF_BBP_LATCH) \ +- { \ +- if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ +- && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ +- && ((_A)->bPCIclkOff == FALSE) \ +- && ((_A)->brt30xxBanMcuCmd == FALSE)) \ +- { \ +- if (_A->AccessBBPFailCount > 20) \ +- { \ +- AsicResetBBPAgent(_A); \ +- _A->AccessBBPFailCount = 0; \ +- } \ +- for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ +- } \ +- else \ +- { \ +- BbpCsr.field.Busy = 0; \ +- RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ +- } \ +- break; \ +- } \ +- } \ +- else if (!((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ +- && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ +- && ((_A)->bPCIclkOff == FALSE)) \ +- { \ +- if (_A->AccessBBPFailCount > 20) \ +- { \ +- AsicResetBBPAgent(_A); \ +- _A->AccessBBPFailCount = 0; \ +- } \ +- for (BusyCnt=0; BusyCntBbpWriteLatch[_I] = _V; \ +- break; \ +- } \ +- } \ +- else \ +- { \ +- DBGPRINT_ERR((" brt30xxBanMcuCmd = %d. Write BBP %d \n", (_A)->brt30xxBanMcuCmd, (_I))); \ +- } \ +- if ((BusyCnt == MAX_BUSY_COUNT) || ((_A)->bPCIclkOff == TRUE)) \ +- { \ +- if (BusyCnt == MAX_BUSY_COUNT) \ +- (_A)->AccessBBPFailCount++; \ +- DBGPRINT_ERR(("BBP write R%d=0x%x fail. BusyCnt= %d.bPCIclkOff = %d. \n", _I, BbpCsr.word, BusyCnt, (_A)->bPCIclkOff )); \ +- } \ +- } \ +- else \ +- { \ +- DBGPRINT_ERR(("****** BBP_Write_Latch Buffer exceeds max boundry ****** \n")); \ +- } \ +-} +-#endif // CONFIG_STA_SUPPORT // +-#endif // RTMP_MAC_PCI // +- +- +- +-#ifdef RT30xx +-//Need to collect each ant's rssi concurrently +-//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant +-#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \ +-{ \ +- SHORT AvgRssi; \ +- UCHAR UsedAnt; \ +- if (_pAd->RxAnt.EvaluatePeriod == 0) \ +- { \ +- UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \ +- AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \ +- if (AvgRssi < 0) \ +- AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \ +- else \ +- AvgRssi = _rssi1 << 3; \ +- _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \ +- } \ +- else \ +- { \ +- UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \ +- AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \ +- if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \ +- AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \ +- else \ +- { \ +- _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \ +- AvgRssi = _rssi1 << 3; \ +- } \ +- _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \ +- _pAd->RxAnt.RcvPktNumWhenEvaluate++; \ +- } \ +-} +- +-#define RTMP_ASIC_MMPS_DISABLE(_pAd) \ +- do{ \ +- UCHAR _bbpData; \ +- UINT32 _macData; \ +- /* disable MMPS BBP control register */ \ +- RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ +- _bbpData &= ~(0x04); /*bit 2*/ \ +- RTMP_BBP_IO_WRITE8_BY_REG_ID(_pAd, BBP_R3, _bbpData); \ +- \ +- /* disable MMPS MAC control register */ \ +- RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ +- _macData &= ~(0x09); /*bit 0, 3*/ \ +- RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ +- }while(0) +- +- +-#define RTMP_ASIC_MMPS_ENABLE(_pAd) \ +- do{ \ +- UCHAR _bbpData; \ +- UINT32 _macData; \ +- /* enable MMPS BBP control register */ \ +- RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ +- _bbpData |= (0x04); /*bit 2*/ \ +- RTMP_BBP_IO_WRITE8_BY_REG_ID(_pAd, BBP_R3, _bbpData); \ +- \ +- /* enable MMPS MAC control register */ \ +- RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ +- _macData |= (0x09); /*bit 0, 3*/ \ +- RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ +- }while(0) +- +-#endif // RT30xx // +- +-#endif // __RTMP_PHY_H__ // +diff --git a/drivers/staging/rt3090/rtmp_timer.h b/drivers/staging/rt3090/rtmp_timer.h +deleted file mode 100644 +index dfac124..0000000 +--- a/drivers/staging/rt3090/rtmp_timer.h ++++ /dev/null +@@ -1,162 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_timer.h +- +- Abstract: +- Ralink Wireless Driver timer related data structures and delcarations +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Shiang Tu Aug-28-2008 init version +- +-*/ +- +-#ifndef __RTMP_TIMER_H__ +-#define __RTMP_TIMER_H__ +- +-#include "rtmp_os.h" +- +- +-#define DECLARE_TIMER_FUNCTION(_func) \ +- void rtmp_timer_##_func(unsigned long data) +- +-#define GET_TIMER_FUNCTION(_func) \ +- rtmp_timer_##_func +- +- +-/* ----------------- Timer Related MARCO ---------------*/ +-// In some os or chipset, we have a lot of timer functions and will read/write register, +-// it's not allowed in Linux USB sub-system to do it ( because of sleep issue when +-// submit to ctrl pipe). So we need a wrapper function to take care it. +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +-typedef VOID (*RTMP_TIMER_TASK_HANDLE)( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +-#endif // RTMP_TIMER_TASK_SUPPORT // +- +-typedef struct _RALINK_TIMER_STRUCT { +- RTMP_OS_TIMER TimerObj; // Ndis Timer object +- BOOLEAN Valid; // Set to True when call RTMPInitTimer +- BOOLEAN State; // True if timer cancelled +- BOOLEAN PeriodicType; // True if timer is periodic timer +- BOOLEAN Repeat; // True if periodic timer +- ULONG TimerValue; // Timer value in milliseconds +- ULONG cookie; // os specific object +-#ifdef RTMP_TIMER_TASK_SUPPORT +- RTMP_TIMER_TASK_HANDLE handle; +- void *pAd; +-#endif // RTMP_TIMER_TASK_SUPPORT // +-}RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; +- +- +-#ifdef RTMP_TIMER_TASK_SUPPORT +-typedef struct _RTMP_TIMER_TASK_ENTRY_ +-{ +- RALINK_TIMER_STRUCT *pRaTimer; +- struct _RTMP_TIMER_TASK_ENTRY_ *pNext; +-}RTMP_TIMER_TASK_ENTRY; +- +- +-#define TIMER_QUEUE_SIZE_MAX 128 +-typedef struct _RTMP_TIMER_TASK_QUEUE_ +-{ +- unsigned int status; +- unsigned char *pTimerQPoll; +- RTMP_TIMER_TASK_ENTRY *pQPollFreeList; +- RTMP_TIMER_TASK_ENTRY *pQHead; +- RTMP_TIMER_TASK_ENTRY *pQTail; +-}RTMP_TIMER_TASK_QUEUE; +- +-#define BUILD_TIMER_FUNCTION(_func) \ +-void rtmp_timer_##_func(unsigned long data) \ +-{ \ +- PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \ +- RTMP_TIMER_TASK_ENTRY *_pQNode; \ +- RTMP_ADAPTER *_pAd; \ +- \ +- _pTimer->handle = _func; \ +- _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \ +- _pQNode = RtmpTimerQInsert(_pAd, _pTimer); \ +- if ((_pQNode == NULL) && (_pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT)) \ +- RTMP_OS_Add_Timer(&_pTimer->TimerObj, OS_HZ); \ +-} +-#else +-#define BUILD_TIMER_FUNCTION(_func) \ +-void rtmp_timer_##_func(unsigned long data) \ +-{ \ +- PRALINK_TIMER_STRUCT pTimer = (PRALINK_TIMER_STRUCT) data; \ +- \ +- _func(NULL, (PVOID) pTimer->cookie, NULL, pTimer); \ +- if (pTimer->Repeat) \ +- RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ +-} +-#endif // RTMP_TIMER_TASK_SUPPORT // +- +- +-DECLARE_TIMER_FUNCTION(MlmePeriodicExec); +-DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); +-DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); +-DECLARE_TIMER_FUNCTION(APSDPeriodicExec); +-DECLARE_TIMER_FUNCTION(AsicRfTuningExec); +- +- +-#ifdef CONFIG_STA_SUPPORT +-DECLARE_TIMER_FUNCTION(BeaconTimeout); +-DECLARE_TIMER_FUNCTION(ScanTimeout); +-DECLARE_TIMER_FUNCTION(AuthTimeout); +-DECLARE_TIMER_FUNCTION(AssocTimeout); +-DECLARE_TIMER_FUNCTION(ReassocTimeout); +-DECLARE_TIMER_FUNCTION(DisassocTimeout); +-DECLARE_TIMER_FUNCTION(LinkDownExec); +-DECLARE_TIMER_FUNCTION(StaQuickResponeForRateUpExec); +-DECLARE_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); +-DECLARE_TIMER_FUNCTION(PsPollWakeExec); +-DECLARE_TIMER_FUNCTION(RadioOnExec); +- +-#ifdef QOS_DLS_SUPPORT +-DECLARE_TIMER_FUNCTION(DlsTimeoutAction); +-#endif // QOS_DLS_SUPPORT // +- +- +-#endif // CONFIG_STA_SUPPORT // +- +- +- +- +-#if defined(AP_LED) || defined(STA_LED) +-DECLARE_TIMER_FUNCTION(LedCtrlMain); +-#endif +- +- +- +-#endif // __RTMP_TIMER_H__ // +diff --git a/drivers/staging/rt3090/rtmp_type.h b/drivers/staging/rt3090/rtmp_type.h +deleted file mode 100644 +index d8b571e..0000000 +--- a/drivers/staging/rt3090/rtmp_type.h ++++ /dev/null +@@ -1,147 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_type.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +- Paul Lin 1-2-2004 +-*/ +- +-#ifndef __RTMP_TYPE_H__ +-#define __RTMP_TYPE_H__ +- +- +-#define PACKED __attribute__ ((packed)) +- +-#ifdef LINUX +-// Put platform dependent declaration here +-// For example, linux type definition +-typedef unsigned char UINT8; +-typedef unsigned short UINT16; +-typedef unsigned int UINT32; +-typedef unsigned long long UINT64; +-typedef int INT32; +-typedef long long INT64; +-#endif // LINUX // +- +-typedef unsigned char * PUINT8; +-typedef unsigned short * PUINT16; +-typedef unsigned int * PUINT32; +-typedef unsigned long long * PUINT64; +-typedef int * PINT32; +-typedef long long * PINT64; +- +-// modified for fixing compile warning on Sigma 8634 platform +-typedef char STRING; +-typedef signed char CHAR; +- +-typedef signed short SHORT; +-typedef signed int INT; +-typedef signed long LONG; +-typedef signed long long LONGLONG; +- +- +-#ifdef LINUX +-typedef unsigned char UCHAR; +-typedef unsigned short USHORT; +-typedef unsigned int UINT; +-typedef unsigned long ULONG; +-#endif // LINUX // +-typedef unsigned long long ULONGLONG; +- +-typedef unsigned char BOOLEAN; +-#ifdef LINUX +-typedef void VOID; +-#endif // LINUX // +- +-typedef char * PSTRING; +-typedef VOID * PVOID; +-typedef CHAR * PCHAR; +-typedef UCHAR * PUCHAR; +-typedef USHORT * PUSHORT; +-typedef LONG * PLONG; +-typedef ULONG * PULONG; +-typedef UINT * PUINT; +- +-typedef unsigned int NDIS_MEDIA_STATE; +- +-typedef union _LARGE_INTEGER { +- struct { +- UINT LowPart; +- INT32 HighPart; +- } u; +- INT64 QuadPart; +-} LARGE_INTEGER; +- +- +-// +-// Register set pair for initialzation register set definition +-// +-typedef struct _RTMP_REG_PAIR +-{ +- ULONG Register; +- ULONG Value; +-} RTMP_REG_PAIR, *PRTMP_REG_PAIR; +- +-typedef struct _REG_PAIR +-{ +- UCHAR Register; +- UCHAR Value; +-} REG_PAIR, *PREG_PAIR; +- +-// +-// Register set pair for initialzation register set definition +-// +-typedef struct _RTMP_RF_REGS +-{ +- UCHAR Channel; +- ULONG R1; +- ULONG R2; +- ULONG R3; +- ULONG R4; +-} RTMP_RF_REGS, *PRTMP_RF_REGS; +- +-typedef struct _FREQUENCY_ITEM { +- UCHAR Channel; +- UCHAR N; +- UCHAR R; +- UCHAR K; +-} FREQUENCY_ITEM, *PFREQUENCY_ITEM; +- +- +-typedef int NTSTATUS; +- +- +-#define STATUS_SUCCESS 0x00 +-#define STATUS_UNSUCCESSFUL 0x01 +- +-#endif // __RTMP_TYPE_H__ // +diff --git a/drivers/staging/rt3090/spectrum.h b/drivers/staging/rt3090/spectrum.h +deleted file mode 100644 +index be9bae5..0000000 +--- a/drivers/staging/rt3090/spectrum.h ++++ /dev/null +@@ -1,234 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- */ +- +-#ifndef __SPECTRUM_H__ +-#define __SPECTRUM_H__ +- +-#include "rtmp_type.h" +-#include "spectrum_def.h" +- +- +-CHAR RTMP_GetTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN HTTRANSMIT_SETTING HTTxMode); +- +-/* +- ========================================================================== +- Description: +- Prepare Measurement request action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID MakeMeasurementReqFrame( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 NumOfRepetitions); +- +-/* +- ========================================================================== +- Description: +- Prepare Measurement report action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueMeasurementRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, +- IN PUINT8 pReportInfo); +- +-/* +- ========================================================================== +- Description: +- Prepare TPC Request action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueTPCReq( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UCHAR DialogToken); +- +-/* +- ========================================================================== +- Description: +- Prepare TPC Report action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueTPCRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin); +- +-/* +- ========================================================================== +- Description: +- Prepare Channel Switch Announcement action frame and enqueue it into +- management queue waiting for transmition. +- +- Parametrs: +- 1. the destination mac address of the frame. +- 2. Channel switch announcement mode. +- 2. a New selected channel. +- +- Return : None. +- ========================================================================== +- */ +-VOID EnqueueChSwAnn( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 ChSwMode, +- IN UINT8 NewCh); +- +-/* +- ========================================================================== +- Description: +- Spectrun action frames Handler such as channel switch annoucement, +- measurement report, measurement request actions frames. +- +- Parametrs: +- Elme - MLME message containing the received frame +- +- Return : None. +- ========================================================================== +- */ +-VOID PeerSpectrumAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-/* +- ========================================================================== +- Description: +- +- Parametrs: +- +- Return : None. +- ========================================================================== +- */ +-INT Set_MeasureReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TpcReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_PwrConstraint( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-VOID MeasureReqTabInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID MeasureReqTabExit( +- IN PRTMP_ADAPTER pAd); +- +-PMEASURE_REQ_ENTRY MeasureReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-PMEASURE_REQ_ENTRY MeasureReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-VOID MeasureReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-VOID InsertChannelRepIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, +- IN UINT8 RegulatoryClass); +- +-VOID InsertTpcReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin); +- +-VOID InsertDialogToken( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 DialogToken); +- +-VOID TpcReqTabInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID TpcReqTabExit( +- IN PRTMP_ADAPTER pAd); +- +-VOID NotifyChSwAnnToPeerAPs( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, +- IN UINT8 ChSwMode, +- IN UINT8 Channel); +- +-VOID RguClass_BuildBcnChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen); +-#endif // __SPECTRUM_H__ // +diff --git a/drivers/staging/rt3090/spectrum_def.h b/drivers/staging/rt3090/spectrum_def.h +deleted file mode 100644 +index 0389b09..0000000 +--- a/drivers/staging/rt3090/spectrum_def.h ++++ /dev/null +@@ -1,257 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- spectrum_def.h +- +- Abstract: +- Handle association related requests either from WSTA or from local MLME +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- Fonchi Wu 2008 created for 802.11h +- */ +- +-#ifndef __SPECTRUM_DEF_H__ +-#define __SPECTRUM_DEF_H__ +- +- +-#define MAX_MEASURE_REQ_TAB_SIZE 32 +-#define MAX_HASH_MEASURE_REQ_TAB_SIZE MAX_MEASURE_REQ_TAB_SIZE +- +-#define MAX_TPC_REQ_TAB_SIZE 32 +-#define MAX_HASH_TPC_REQ_TAB_SIZE MAX_TPC_REQ_TAB_SIZE +- +-#define MIN_RCV_PWR 100 /* Negative value ((dBm) */ +- +-#define TPC_REQ_AGE_OUT 500 /* ms */ +-#define MQ_REQ_AGE_OUT 500 /* ms */ +- +-#define TPC_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_HASH_TPC_REQ_TAB_SIZE) +-#define MQ_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_MEASURE_REQ_TAB_SIZE) +- +-typedef struct _MEASURE_REQ_ENTRY +-{ +- struct _MEASURE_REQ_ENTRY *pNext; +- ULONG lastTime; +- BOOLEAN Valid; +- UINT8 DialogToken; +- UINT8 MeasureDialogToken[3]; // 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. +-} MEASURE_REQ_ENTRY, *PMEASURE_REQ_ENTRY; +- +-typedef struct _MEASURE_REQ_TAB +-{ +- UCHAR Size; +- PMEASURE_REQ_ENTRY Hash[MAX_HASH_MEASURE_REQ_TAB_SIZE]; +- MEASURE_REQ_ENTRY Content[MAX_MEASURE_REQ_TAB_SIZE]; +-} MEASURE_REQ_TAB, *PMEASURE_REQ_TAB; +- +-typedef struct _TPC_REQ_ENTRY +-{ +- struct _TPC_REQ_ENTRY *pNext; +- ULONG lastTime; +- BOOLEAN Valid; +- UINT8 DialogToken; +-} TPC_REQ_ENTRY, *PTPC_REQ_ENTRY; +- +-typedef struct _TPC_REQ_TAB +-{ +- UCHAR Size; +- PTPC_REQ_ENTRY Hash[MAX_HASH_TPC_REQ_TAB_SIZE]; +- TPC_REQ_ENTRY Content[MAX_TPC_REQ_TAB_SIZE]; +-} TPC_REQ_TAB, *PTPC_REQ_TAB; +- +- +-/* The regulatory information */ +-typedef struct _DOT11_CHANNEL_SET +-{ +- UCHAR NumberOfChannels; +- UINT8 MaxTxPwr; +- UCHAR ChannelList[16]; +-} DOT11_CHANNEL_SET, *PDOT11_CHANNEL_SET; +- +-typedef struct _DOT11_REGULATORY_INFORMATION +-{ +- UCHAR RegulatoryClass; +- DOT11_CHANNEL_SET ChannelSet; +-} DOT11_REGULATORY_INFORMATION, *PDOT11_REGULATORY_INFORMATION; +- +- +- +-#define RM_TPC_REQ 0 +-#define RM_MEASURE_REQ 1 +- +-#define RM_BASIC 0 +-#define RM_CCA 1 +-#define RM_RPI_HISTOGRAM 2 +-#define RM_CH_LOAD 3 +-#define RM_NOISE_HISTOGRAM 4 +- +- +-typedef struct PACKED _TPC_REPORT_INFO +-{ +- UINT8 TxPwr; +- UINT8 LinkMargin; +-} TPC_REPORT_INFO, *PTPC_REPORT_INFO; +- +-typedef struct PACKED _CH_SW_ANN_INFO +-{ +- UINT8 ChSwMode; +- UINT8 Channel; +- UINT8 ChSwCnt; +-} CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; +- +-typedef union PACKED _MEASURE_REQ_MODE +-{ +-#ifdef RT_BIG_ENDIAN +- struct PACKED +- { +- +- UINT8 :3; +- UINT8 DurationMandatory:1; +- UINT8 Report:1; +- UINT8 Request:1; +- UINT8 Enable:1; +- UINT8 Parallel:1; +- } field; +-#else +- struct PACKED +- { +- UINT8 Parallel:1; +- UINT8 Enable:1; +- UINT8 Request:1; +- UINT8 Report:1; +- UINT8 DurationMandatory:1; +- UINT8 :3; +- } field; +-#endif // RT_BIG_ENDIAN // +- UINT8 word; +-} MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; +- +-typedef struct PACKED _MEASURE_REQ +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +-} MEASURE_REQ, *PMEASURE_REQ; +- +-typedef struct PACKED _MEASURE_REQ_INFO +-{ +- UINT8 Token; +- MEASURE_REQ_MODE ReqMode; +- UINT8 ReqType; +- UINT8 Oct[0]; +-} MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; +- +-typedef union PACKED _MEASURE_BASIC_REPORT_MAP +-{ +-#ifdef RT_BIG_ENDIAN +- struct PACKED +- { +- UINT8 Rev:3; +- +- UINT8 Unmeasure:1; +- UINT8 Radar:1; +- UINT8 UnidentifiedSignal:1; +- UINT8 OfdmPreamble:1; +- UINT8 BSS:1; +- } field; +-#else +- struct PACKED +- { +- UINT8 BSS:1; +- +- UINT8 OfdmPreamble:1; +- UINT8 UnidentifiedSignal:1; +- UINT8 Radar:1; +- UINT8 Unmeasure:1; +- UINT8 Rev:3; +- } field; +-#endif // RT_BIG_ENDIAN // +- UINT8 word; +-} MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; +- +-typedef struct PACKED _MEASURE_BASIC_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- MEASURE_BASIC_REPORT_MAP Map; +-} MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; +- +-typedef struct PACKED _MEASURE_CCA_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 CCA_Busy_Fraction; +-} MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; +- +-typedef struct PACKED _MEASURE_RPI_REPORT +-{ +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 RPI_Density[8]; +-} MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; +- +-typedef union PACKED _MEASURE_REPORT_MODE +-{ +- struct PACKED +- { +-#ifdef RT_BIG_ENDIAN +- UINT8 Rev:5; +- UINT8 Refused:1; +- UINT8 Incapable:1; +- UINT8 Late:1; +-#else +- UINT8 Late:1; +- UINT8 Incapable:1; +- UINT8 Refused:1; +- UINT8 Rev:5; +-#endif // RT_BIG_ENDIAN // +- } field; +- UINT8 word; +-} MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; +- +-typedef struct PACKED _MEASURE_REPORT_INFO +-{ +- UINT8 Token; +- UINT8 ReportMode; +- UINT8 ReportType; +- UINT8 Octect[0]; +-} MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; +- +-typedef struct PACKED _QUIET_INFO +-{ +- UINT8 QuietCnt; +- UINT8 QuietPeriod; +- UINT16 QuietDuration; +- UINT16 QuietOffset; +-} QUIET_INFO, *PQUIET_INFO; +- +-#endif // __SPECTRUM_DEF_H__ // +diff --git a/drivers/staging/rt3090/sta/assoc.c b/drivers/staging/rt3090/sta/assoc.c +deleted file mode 100644 +index 012ed2b..0000000 +--- a/drivers/staging/rt3090/sta/assoc.c ++++ /dev/null +@@ -1,1673 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- assoc.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John 2004-9-3 porting from RT2500 +-*/ +- +-#include "../rt_config.h" +- +- +-UCHAR CipherWpaTemplate[] = { +- 0xdd, // WPA IE +- 0x16, // Length +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x01 // authentication +- }; +- +-UCHAR CipherWpa2Template[] = { +- 0x30, // RSN IE +- 0x14, // Length +- 0x01, 0x00, // Version +- 0x00, 0x0f, 0xac, 0x02, // group cipher, TKIP +- 0x01, 0x00, // number of pairwise +- 0x00, 0x0f, 0xac, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x0f, 0xac, 0x02, // authentication +- 0x00, 0x00, // RSN capability +- }; +- +-UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02}; +- +-/* +- ========================================================================== +- Description: +- association state machine init, including state transition and timer init +- Parameters: +- S - pointer to the association state machine +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-VOID AssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(S, Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, (STATE_MACHINE_FUNC)Drop, ASSOC_IDLE, ASSOC_MACHINE_BASE); +- +- // first column +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)MlmeAssocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)MlmeReassocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)MlmeDisassocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- +- // second column +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, (STATE_MACHINE_FUNC)PeerAssocRspAction); +- // +- // Patch 3Com AP MOde:3CRWE454G72 +- // We send Assoc request frame to this AP, it always send Reassoc Rsp not Associate Rsp. +- // +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, (STATE_MACHINE_FUNC)PeerAssocRspAction); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_ASSOC_TIMEOUT, (STATE_MACHINE_FUNC)AssocTimeoutAction); +- +- // third column +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, (STATE_MACHINE_FUNC)PeerReassocRspAction); +- // +- // Patch, AP doesn't send Reassociate Rsp frame to Station. +- // +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, (STATE_MACHINE_FUNC)PeerReassocRspAction); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_REASSOC_TIMEOUT, (STATE_MACHINE_FUNC)ReassocTimeoutAction); +- +- // fourth column +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_DISASSOC_TIMEOUT, (STATE_MACHINE_FUNC)DisassocTimeoutAction); +- +- // initialize the timer +- RTMPInitTimer(pAd, &pAd->MlmeAux.AssocTimer, GET_TIMER_FUNCTION(AssocTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.ReassocTimer, GET_TIMER_FUNCTION(ReassocTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.DisassocTimer, GET_TIMER_FUNCTION(DisassocTimeout), pAd, FALSE); +-} +- +-/* +- ========================================================================== +- Description: +- Association timeout procedure. After association timeout, this function +- will be called and it will put a message into the MLME queue +- Parameters: +- Standard timer parameters +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AssocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_ASSOC_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +-} +- +-/* +- ========================================================================== +- Description: +- Reassociation timeout procedure. After reassociation timeout, this +- function will be called and put a message into the MLME queue +- Parameters: +- Standard timer parameters +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID ReassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_REASSOC_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +-} +- +-/* +- ========================================================================== +- Description: +- Disassociation timeout procedure. After disassociation timeout, this +- function will be called and put a message into the MLME queue +- Parameters: +- Standard timer parameters +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID DisassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_DISASSOC_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +-} +- +-/* +- ========================================================================== +- Description: +- mlme assoc req handling procedure +- Parameters: +- Adapter - Adapter pointer +- Elem - MLME Queue Element +- Pre: +- the station has been authenticated and the following information is stored in the config +- -# SSID +- -# supported rates and their length +- -# listen interval (Adapter->StaCfg.default_listen_count) +- -# Transmit power (Adapter->StaCfg.tx_power) +- Post : +- -# An association request frame is generated and sent to the air +- -# Association timer starts +- -# Association state -> ASSOC_WAIT_RSP +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeAssocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR ApAddr[6]; +- HEADER_802_11 AssocHdr; +- UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; +- USHORT ListenIntv; +- ULONG Timeout; +- USHORT CapabilityInfo; +- BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- ULONG tmp; +- USHORT VarIesOffset; +- USHORT Status; +- +- // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Block Assoc request durning WPA block period!\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +- } +- // check sanity first +- else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, &Timeout, &ListenIntv)) +- { +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); +- +- // Get an unused nonpaged memory +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeAssocReqAction() allocate memory failed \n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +- return; +- } +- +- // Add by James 03/06/27 +- pAd->StaCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); +- // Association don't need to report MAC address +- pAd->StaCfg.AssocInfo.AvailableRequestFixedIEs = +- NDIS_802_11_AI_REQFI_CAPABILITIES | NDIS_802_11_AI_REQFI_LISTENINTERVAL; +- pAd->StaCfg.AssocInfo.RequestFixedIEs.Capabilities = CapabilityInfo; +- pAd->StaCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv; +- // Only reassociate need this +- //COPY_MAC_ADDR(pAd->StaCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, ApAddr); +- pAd->StaCfg.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); +- +- NdisZeroMemory(pAd->StaCfg.ReqVarIEs, MAX_VIE_LEN); +- // First add SSID +- VarIesOffset = 0; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SsidIe, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->MlmeAux.SsidLen, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- VarIesOffset += pAd->MlmeAux.SsidLen; +- +- // Second add Supported rates +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SupRateIe, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->MlmeAux.SupRateLen, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen); +- VarIesOffset += pAd->MlmeAux.SupRateLen; +- // End Add by James +- +- if ((pAd->CommonCfg.Channel > 14) && +- (pAd->CommonCfg.bIEEE80211H == TRUE)) +- CapabilityInfo |= 0x0100; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send ASSOC request...\n")); +- MgtMacHeaderInit(pAd, &AssocHdr, SUBTYPE_ASSOC_REQ, 0, ApAddr, ApAddr); +- +- // Build basic frame first +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AssocHdr, +- 2, &CapabilityInfo, +- 2, &ListenIntv, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- +-#ifdef DOT11_N_SUPPORT +- // HT +- if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- ULONG TmpLen; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) +- { +- HtLen = SIZE_HT_CAP_IE + 4; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +-#ifdef RT_BIG_ENDIAN +- HT_CAPABILITY_IE HtCapabilityTmp; +-#endif +- +-#ifndef RT_BIG_ENDIAN +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &pAd->MlmeAux.HtCapabilityLen, +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +-#else +- NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE)); +- NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, pAd->MlmeAux.HtCapabilityLen); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &pAd->MlmeAux.HtCapabilityLen, +- pAd->MlmeAux.HtCapabilityLen,&HtCapabilityTmp, +- END_OF_ARGS); +-#endif +- } +- FrameLen += TmpLen; +- } +-#endif // DOT11_N_SUPPORT // +- +- // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION +- // Case I: (Aggregation + Piggy-Back) +- // 1. user enable aggregation, AND +- // 2. Mac support piggy-back +- // 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON +- // Case II: (Aggregation) +- // 1. user enable aggregation, AND +- // 2. AP annouces it's AGGREGATION-capable in BEACON +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x03, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x01, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- } +- else +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x06, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- +- if (pAd->MlmeAux.APEdcaParm.bValid) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->MlmeAux.APEdcaParm.bAPSDCapable) +- { +- QBSS_STA_INFO_PARM QosInfo; +- +- NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM)); +- QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; +- QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; +- QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; +- QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; +- QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR)&QosInfo; +- } +- else +- { +- // The Parameter Set Count is set to ��0�� in the association request frames +- // WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); +- } +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 9, &WmeIe[0], +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- // +- // Let WPA(#221) Element ID on the end of this association frame. +- // Otherwise some AP will fail on parsing Element ID and set status fail on Assoc Rsp. +- // For example: Put Vendor Specific IE on the front of WPA IE. +- // This happens on AP (Model No:Linksys WRK54G) +- // +- if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) +- ) +- ) +- { +- UCHAR RSNIe = IE_WPA; +- +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) +- { +- RSNIe = IE_WPA2; +- } +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-#ifdef SIOCSIWGENIE +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) && +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) +-#endif // SIOCSIWGENIE // +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); +- +- // Check for WPA PMK cache list +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) +- { +- INT idx; +- BOOLEAN FoundPMK = FALSE; +- // Search chched PMKID, append it if existed +- for (idx = 0; idx < PMKID_NO; idx++) +- { +- if (NdisEqualMemory(ApAddr, &pAd->StaCfg.SavedPMK[idx].BSSID, 6)) +- { +- FoundPMK = TRUE; +- break; +- } +- } +- +- if (FoundPMK) +- { +- // Set PMK number +- *(PUSHORT) &pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len] = 1; +- NdisMoveMemory(&pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len + 2], &pAd->StaCfg.SavedPMK[idx].PMKID, 16); +- pAd->StaCfg.RSNIE_Len += 18; +- } +- } +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-#ifdef SIOCSIWGENIE +- if ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) && +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == TRUE)) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); +- } +- else +-#endif +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); +- } +- +- FrameLen += tmp; +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-#ifdef SIOCSIWGENIE +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) || +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) +-#endif +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- { +- // Append Variable IE +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->StaCfg.RSNIE_Len, 1); +- VarIesOffset += 1; +- } +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->StaCfg.RSN_IE, pAd->StaCfg.RSNIE_Len); +- VarIesOffset += pAd->StaCfg.RSNIE_Len; +- +- // Set Variable IEs Length +- pAd->StaCfg.ReqVarIELen = VarIesOffset; +- } +- +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(&pAd->MlmeAux.AssocTimer, Timeout); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +- } +- +-} +- +-/* +- ========================================================================== +- Description: +- mlme reassoc req handling procedure +- Parameters: +- Elem - +- Pre: +- -# SSID (Adapter->StaCfg.ssid[]) +- -# BSSID (AP address, Adapter->StaCfg.bssid) +- -# Supported rates (Adapter->StaCfg.supported_rates[]) +- -# Supported rates length (Adapter->StaCfg.supported_rates_len) +- -# Tx power (Adapter->StaCfg.tx_power) +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeReassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR ApAddr[6]; +- HEADER_802_11 ReassocHdr; +- UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; +- USHORT CapabilityInfo, ListenIntv; +- ULONG Timeout; +- ULONG FrameLen = 0; +- BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- ULONG tmp; +- PUCHAR pOutBuffer = NULL; +- USHORT Status; +- +- // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Block ReAssoc request durning WPA block period!\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +- } +- // the parameters are the same as the association +- else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, &Timeout, &ListenIntv)) +- { +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeReassocReqAction() allocate memory failed \n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +- return; +- } +- +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); +- +- // make frame, use bssid as the AP address?? +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send RE-ASSOC request...\n")); +- MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, ApAddr, ApAddr); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &ReassocHdr, +- 2, &CapabilityInfo, +- 2, &ListenIntv, +- MAC_ADDR_LEN, ApAddr, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- +- if (pAd->MlmeAux.APEdcaParm.bValid) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->MlmeAux.APEdcaParm.bAPSDCapable) +- { +- QBSS_STA_INFO_PARM QosInfo; +- +- NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM)); +- QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; +- QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; +- QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; +- QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; +- QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR)&QosInfo; +- } +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 9, &WmeIe[0], +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +-#ifdef DOT11_N_SUPPORT +- // HT +- if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- ULONG TmpLen; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) +- { +- HtLen = SIZE_HT_CAP_IE + 4; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &pAd->MlmeAux.HtCapabilityLen, +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- FrameLen += TmpLen; +- } +-#endif // DOT11_N_SUPPORT // +- +- // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION +- // Case I: (Aggregation + Piggy-Back) +- // 1. user enable aggregation, AND +- // 2. Mac support piggy-back +- // 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON +- // Case II: (Aggregation) +- // 1. user enable aggregation, AND +- // 2. AP annouces it's AGGREGATION-capable in BEACON +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x03, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x01, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- } +- else +- { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x04, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); +- FrameLen += TmpLen; +- } +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(&pAd->MlmeAux.ReassocTimer, Timeout); /* in mSec */ +- pAd->Mlme.AssocMachine.CurrState = REASSOC_WAIT_RSP; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +- } +-} +- +-/* +- ========================================================================== +- Description: +- Upper layer issues disassoc request +- Parameters: +- Elem - +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PMLME_DISASSOC_REQ_STRUCT pDisassocReq; +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; +- BOOLEAN TimerCancelled; +- ULONG Timeout = 500; +- USHORT Status; +- +-#ifdef QOS_DLS_SUPPORT +- // send DLS-TEAR_DOWN message, +- if (pAd->CommonCfg.bDLSCapable) +- { +- UCHAR i; +- +- // tear down local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- } +- } +- +- // tear down peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- } +- } +- } +-#endif // QOS_DLS_SUPPORT // +- +- // skip sanity check +- pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT)(Elem->Msg); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - MlmeDisassocReqAction() allocate memory failed\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); +- return; +- } +- +- +- +- +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &TimerCancelled); +- +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send DISASSOC request[BSSID::%02x:%02x:%02x:%02x:%02x:%02x (Reason=%d)\n", +- pDisassocReq->Addr[0], pDisassocReq->Addr[1], pDisassocReq->Addr[2], +- pDisassocReq->Addr[3], pDisassocReq->Addr[4], pDisassocReq->Addr[5], pDisassocReq->Reason)); +- MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pDisassocReq->Addr, pDisassocReq->Addr); // patch peap ttls switching issue +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DisassocHdr, +- 2, &pDisassocReq->Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- +- // To patch Instance and Buffalo(N) AP +- // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine +- // Therefore, we send both of them. +- pDisassocHdr = (PHEADER_802_11)pOutBuffer; +- pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- +- MlmeFreeMemory(pAd, pOutBuffer); +- +- pAd->StaCfg.DisassocReason = REASON_DISASSOC_STA_LEAVING; +- COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pDisassocReq->Addr); +- +- RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */ +- pAd->Mlme.AssocMachine.CurrState = DISASSOC_WAIT_RSP; +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- //send disassociate event to wpa_supplicant +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +-} +- +-/* +- ========================================================================== +- Description: +- peer sends assoc rsp back +- Parameters: +- Elme - MLME message containing the received frame +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerAssocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT CapabilityInfo, Status, Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BOOLEAN TimerCancelled; +- UCHAR CkipFlag; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, +- &HtCapability,&AddHtInfo, &HtCapabilityLen,&AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) +- { +- // The frame is for me ? +- if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status)); +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n",Elem->Wcid, pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); +-#endif // DOT11_N_SUPPORT // +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); +- +- +- if(Status == MLME_SUCCESS) +- { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; +- +- // supported rates array may not be sorted. sort it and find the maximum rate +- for (idx=0; idxMacTab.Content[BSSID_WCID], +- MaxSupportedRateIn500Kbps, +- &HtCapability, +- HtCapabilityLen, +- &AddHtInfo, +- AddHtInfoLen, +- CapabilityInfo); +- } +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerAssocRspAction() sanity check fail\n")); +- } +-} +- +-/* +- ========================================================================== +- Description: +- peer sends reassoc rsp +- Parametrs: +- Elem - MLME message cntaining the received frame +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerReassocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT CapabilityInfo; +- USHORT Status; +- USHORT Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR CkipFlag; +- BOOLEAN TimerCancelled; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, +- &HtCapability, &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) +- { +- if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) // The frame is for me ? +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status)); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled); +- +- if(Status == MLME_SUCCESS) +- { +- // go to procedure listed on page 376 +- AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, +- &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- SendAssocIEsToWpaSupplicant(pAd); +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_ASSOC_EVENT_FLAG, NULL, NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- { +- wext_notify_event_assoc(pAd); +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +- } +- +- // CkipFlag is no use for reassociate +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerReassocRspAction() sanity check fail\n")); +- } +- +-} +- +-/* +- ========================================================================== +- Description: +- procedures on IEEE 802.11/1999 p.376 +- Parametrs: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AssocPostProc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN USHORT CapabilityInfo, +- IN USHORT Aid, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN PEDCA_PARM pEdcaParm, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo) // AP might use this additional ht info IE +-{ +- ULONG Idx; +- +- pAd->MlmeAux.BssType = BSS_INFRA; +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pAddr2); +- pAd->MlmeAux.Aid = Aid; +- pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; +- +-#ifdef DOT11_N_SUPPORT +- // Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on. +- if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE)) +- { +- pEdcaParm->bValid = TRUE; +- pEdcaParm->Aifsn[0] = 3; +- pEdcaParm->Aifsn[1] = 7; +- pEdcaParm->Aifsn[2] = 2; +- pEdcaParm->Aifsn[3] = 2; +- +- pEdcaParm->Cwmin[0] = 4; +- pEdcaParm->Cwmin[1] = 4; +- pEdcaParm->Cwmin[2] = 3; +- pEdcaParm->Cwmin[3] = 2; +- +- pEdcaParm->Cwmax[0] = 10; +- pEdcaParm->Cwmax[1] = 10; +- pEdcaParm->Cwmax[2] = 4; +- pEdcaParm->Cwmax[3] = 3; +- +- pEdcaParm->Txop[0] = 0; +- pEdcaParm->Txop[1] = 0; +- pEdcaParm->Txop[2] = 96; +- pEdcaParm->Txop[3] = 48; +- +- } +-#endif // DOT11_N_SUPPORT // +- +- NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); +- +- // filter out un-supported rates +- pAd->MlmeAux.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); +- +- // filter out un-supported rates +- pAd->MlmeAux.ExtRateLen = ExtRateLen; +- NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +- +-#ifdef DOT11_N_SUPPORT +- if (HtCapabilityLen > 0) +- { +- RTMPCheckHt(pAd, BSSID_WCID, pHtCapability, pAddHtInfo); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> AP.AMsduSize = %d. ClientStatusFlags = 0x%lx \n", pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> (Mmps=%d, AmsduSize=%d, )\n", +- pAd->MacTab.Content[BSSID_WCID].MmpsMode, pAd->MacTab.Content[BSSID_WCID].AMsduSize)); +-#endif // DOT11_N_SUPPORT // +- +- // Set New WPA information +- Idx = BssTableSearch(&pAd->ScanTab, pAddr2, pAd->MlmeAux.Channel); +- if (Idx == BSS_NOT_FOUND) +- { +- DBGPRINT_ERR(("ASSOC - Can't find BSS after receiving Assoc response\n")); +- } +- else +- { +- // Init variable +- pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = 0; +- NdisZeroMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, MAX_LEN_OF_RSNIE); +- +- // Store appropriate RSN_IE for WPA SM negotiation later +- if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) +- { +- PUCHAR pVIE; +- USHORT len; +- PEID_STRUCT pEid; +- +- pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; +- len = pAd->ScanTab.BssEntry[Idx].VarIELen; +- //KH need to check again +- // Don't allow to go to sleep mode if authmode is WPA-related. +- //This can make Authentication process more smoothly. +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- +- while (len > 0) +- { +- pEid = (PEID_STRUCT) pVIE; +- // For WPA/WPAPSK +- if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- && (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2)); +- pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2); +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA SM negotiation \n")); +- } +- // For WPA2/WPA2PSK +- else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- && (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2 || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2)); +- pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2); +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA2 SM negotiation \n")); +- } +- +- pVIE += (pEid->Len + 2); +- len -= (pEid->Len + 2); +- } +- +- +- } +- +- if (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> no RSN_IE \n")); +- } +- else +- { +- hex_dump("RSN_IE", pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- left part of IEEE 802.11/1999 p.374 +- Parameters: +- Elem - MLME message containing the received frame +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerDisassocAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction()\n")); +- if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() Reason = %d\n", Reason)); +- if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, Addr2)) +- { +- +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- +- +- LinkDown(pAd, TRUE); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- //send disassociate event to wpa_supplicant +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() sanity check fail\n")); +- } +- +-} +- +-/* +- ========================================================================== +- Description: +- what the state machine will do after assoc timeout +- Parameters: +- Elme - +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AssocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_REJ_TIMEOUT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- what the state machine will do after reassoc timeout +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID ReassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_REJ_TIMEOUT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- what the state machine will do after disassoc timeout +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID DisassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - DisassocTimeoutAction\n")); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); +-} +- +-VOID InvalidStateWhenAssoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenAssoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); +-} +- +-VOID InvalidStateWhenReassoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenReassoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); +-} +- +-VOID InvalidStateWhenDisassociate( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenDisassoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- right part of IEEE 802.11/1999 page 374 +- Note: +- This event should never cause ASSOC state machine perform state +- transition, and has no relationship with CNTL machine. So we separate +- this routine as a service outside of ASSOC state transition table. +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID Cls3errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr) +-{ +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; +- USHORT Reason = REASON_CLS3ERR; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Class 3 Error, Send DISASSOC frame\n")); +- MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid); // patch peap ttls switching issue +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DisassocHdr, +- 2, &Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- +- // To patch Instance and Buffalo(N) AP +- // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine +- // Therefore, we send both of them. +- pDisassocHdr = (PHEADER_802_11)pOutBuffer; +- pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- +- MlmeFreeMemory(pAd, pOutBuffer); +- +- pAd->StaCfg.DisassocReason = REASON_CLS3ERR; +- COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pAddr); +-} +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +-VOID SendAssocIEsToWpaSupplicant( +- IN PRTMP_ADAPTER pAd) +-{ +- STRING custom[IW_CUSTOM_MAX] = {0}; +- +- if ((pAd->StaCfg.ReqVarIELen + 17) <= IW_CUSTOM_MAX) +- { +- sprintf(custom, "ASSOCINFO_ReqIEs="); +- NdisMoveMemory(custom+17, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen); +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_REQIE_EVENT_FLAG, NULL, (PUCHAR)custom, pAd->StaCfg.ReqVarIELen + 17); +- +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_ASSOCINFO_EVENT_FLAG, NULL, NULL, 0); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen + 17 > MAX_CUSTOM_LEN\n")); +- +- return; +-} +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-int wext_notify_event_assoc( +- IN RTMP_ADAPTER *pAd) +-{ +- char custom[IW_CUSTOM_MAX] = {0}; +- +-#if WIRELESS_EXT > 17 +- if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX) +- { +- NdisMoveMemory(custom, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen); +- RtmpOSWrielessEventSend(pAd, IWEVASSOCREQIE, -1, NULL, custom, pAd->StaCfg.ReqVarIELen); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n")); +-#else +- int len; +- +- len = (pAd->StaCfg.ReqVarIELen*2) + 17; +- if (len <= IW_CUSTOM_MAX) +- { +- UCHAR idx; +- sprintf(custom, "ASSOCINFO(ReqIEs="); +- for (idx=0; idxStaCfg.ReqVarIELen; idx++) +- sprintf(custom, "%s%02x", custom, pAd->StaCfg.ReqVarIEs[idx]); +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, custom, len); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("len(%d) > MAX_CUSTOM_LEN\n", len)); +-#endif +- +- return 0; +- +-} +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +- +-BOOLEAN StaAddMacTableEntry( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo, +- IN UCHAR AddHtInfoLen, +- IN USHORT CapabilityInfo) +-{ +- UCHAR MaxSupportedRate = RATE_11; +- +- if (ADHOC_ON(pAd)) +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- +- switch (MaxSupportedRateIn500Kbps) +- { +- case 108: MaxSupportedRate = RATE_54; break; +- case 96: MaxSupportedRate = RATE_48; break; +- case 72: MaxSupportedRate = RATE_36; break; +- case 48: MaxSupportedRate = RATE_24; break; +- case 36: MaxSupportedRate = RATE_18; break; +- case 24: MaxSupportedRate = RATE_12; break; +- case 18: MaxSupportedRate = RATE_9; break; +- case 12: MaxSupportedRate = RATE_6; break; +- case 22: MaxSupportedRate = RATE_11; break; +- case 11: MaxSupportedRate = RATE_5_5; break; +- case 4: MaxSupportedRate = RATE_2; break; +- case 2: MaxSupportedRate = RATE_1; break; +- default: MaxSupportedRate = RATE_11; break; +- } +- +- if ((pAd->CommonCfg.PhyMode == PHY_11G) && (MaxSupportedRate < RATE_FIRST_OFDM_RATE)) +- return FALSE; +- +-#ifdef DOT11_N_SUPPORT +- // 11n only +- if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))&& (HtCapabilityLen == 0)) +- return FALSE; +-#endif // DOT11_N_SUPPORT // +- +- if (!pEntry) +- return FALSE; +- +- NdisAcquireSpinLock(&pAd->MacTabLock); +- if (pEntry) +- { +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- if ((MaxSupportedRate < RATE_FIRST_OFDM_RATE) || +- (pAd->CommonCfg.PhyMode == PHY_11B)) +- { +- pEntry->RateLen = 4; +- if (MaxSupportedRate >= RATE_FIRST_OFDM_RATE) +- MaxSupportedRate = RATE_11; +- } +- else +- pEntry->RateLen = 12; +- +- pEntry->MaxHTPhyMode.word = 0; +- pEntry->MinHTPhyMode.word = 0; +- pEntry->HTPhyMode.word = 0; +- pEntry->MaxSupportedRate = MaxSupportedRate; +- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->MinHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->HTPhyMode.field.MODE = MODE_CCK; +- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- } +- pEntry->CapabilityInfo = CapabilityInfo; +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); +- } +- +-#ifdef DOT11_N_SUPPORT +- NdisZeroMemory(&pEntry->HTCapability, sizeof(pEntry->HTCapability)); +- // If this Entry supports 802.11n, upgrade to HT rate. +- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR j, bitmask; //k,bitmask; +- CHAR i; +- +- if (ADHOC_ON(pAd)) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- if ((pHtCapability->HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pAd->MacTab.fAnyStationNonGF = TRUE; +- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; +- } +- +- if ((pHtCapability->HtCapInfo.ChannelWidth) && +- (pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && +- ((pAd->StaCfg.BssType == BSS_INFRA) || ((pAd->StaCfg.BssType == BSS_ADHOC) && (pAddHtInfo->AddHtInfo.ExtChanOffset == pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset)))) +- { +- pEntry->MaxHTPhyMode.field.BW= BW_40; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40)); +- } +- else +- { +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(pHtCapability->HtCapInfo.ShortGIfor20)); +- pAd->MacTab.fAnyStation20Only = TRUE; +- } +- +- // 3*3 +- if (pAd->MACVersion >= RALINK_2883_VERSION && pAd->MACVersion < RALINK_3070_VERSION) +- pEntry->MaxHTPhyMode.field.TxBF = pAd->CommonCfg.RegTransmitSetting.field.TxBF; +- +- // find max fixed rate +- for (i=23; i>=0; i--) // 3*3 +- { +- j = i/8; +- bitmask = (1<<(i-(j*8))); +- if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) && (pHtCapability->MCSSet[j] & bitmask)) +- { +- pEntry->MaxHTPhyMode.field.MCS = i; +- break; +- } +- if (i==0) +- break; +- } +- +- +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) +- { +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) +- { +- // Fix MCS as HT Duplicated Mode +- pEntry->MaxHTPhyMode.field.BW = 1; +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pEntry->MaxHTPhyMode.field.STBC = 0; +- pEntry->MaxHTPhyMode.field.ShortGI = 0; +- pEntry->MaxHTPhyMode.field.MCS = 32; +- } +- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS) +- { +- // STA supports fixed MCS +- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- } +- } +- +- pEntry->MaxHTPhyMode.field.STBC = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); +- pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity; +- pEntry->MaxRAmpduFactor = pHtCapability->HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR)pHtCapability->HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR)pHtCapability->HtCapInfo.AMsduSize; +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- +- if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE)) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED); +- if (pHtCapability->HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); +- if (pHtCapability->HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); +- if (pHtCapability->HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); +- if (pHtCapability->HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (pHtCapability->ExtHtCapInfo.PlusHTC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); +- if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); +- if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); +- NdisMoveMemory(&pEntry->HTCapability, pHtCapability, HtCapabilityLen); +- } +- else +- { +- pAd->MacTab.fAnyStationIsLegacy = TRUE; +- } +-#endif // DOT11_N_SUPPORT // +- +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- pEntry->CurrTxRate = pEntry->MaxSupportedRate; +- +- // Set asic auto fall back +- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex); +- pEntry->bAutoTxRateSwitch = TRUE; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->bAutoTxRateSwitch = FALSE; +- +- // If the legacy mode is set, overwrite the transmit setting of this entry. +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- pEntry->Sst = SST_ASSOC; +- pEntry->AuthState = AS_AUTH_OPEN; +- pEntry->AuthMode = pAd->StaCfg.AuthMode; +- pEntry->WepStatus = pAd->StaCfg.WepStatus; +- +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP) +- { +- union iwreq_data wrqu; +- +- SendAssocIEsToWpaSupplicant(pAd); +- memset(&wrqu, 0, sizeof(wrqu)); +- wrqu.data.flags = RT_ASSOC_EVENT_FLAG; +- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- { +- union iwreq_data wrqu; +- wext_notify_event_assoc(pAd); +- +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); +- +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/sta/auth.c b/drivers/staging/rt3090/sta/auth.c +deleted file mode 100644 +index 157e299..0000000 +--- a/drivers/staging/rt3090/sta/auth.c ++++ /dev/null +@@ -1,491 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- auth.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John 2004-9-3 porting from RT2500 +-*/ +- +-#include "../rt_config.h" +- +- +-/* +- ========================================================================== +- Description: +- authenticate state machine init, including state transition and timer init +- Parameters: +- Sm - pointer to the auth state machine +- Note: +- The state machine looks like this +- +- AUTH_REQ_IDLE AUTH_WAIT_SEQ2 AUTH_WAIT_SEQ4 +- MT2_MLME_AUTH_REQ mlme_auth_req_action invalid_state_when_auth invalid_state_when_auth +- MT2_PEER_AUTH_EVEN drop peer_auth_even_at_seq2_action peer_auth_even_at_seq4_action +- MT2_AUTH_TIMEOUT Drop auth_timeout_action auth_timeout_action +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +- +-void AuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(Sm, Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_REQ_IDLE, AUTH_MACHINE_BASE); +- +- // the first column +- StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)MlmeAuthReqAction); +- +- // the second column +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq2Action); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction); +- +- // the third column +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq4Action); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction); +- +- RTMPInitTimer(pAd, &pAd->MlmeAux.AuthTimer, GET_TIMER_FUNCTION(AuthTimeout), pAd, FALSE); +-} +- +-/* +- ========================================================================== +- Description: +- function to be executed at timer thread when auth timer expires +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AuthTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- DBGPRINT(RT_DEBUG_TRACE,("AUTH - AuthTimeout\n")); +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- return; +- +- // send a de-auth to reset AP's state machine (Patch AP-Dir635) +- if (pAd->Mlme.AuthMachine.CurrState == AUTH_WAIT_SEQ2) +- Cls2errAction(pAd, pAd->MlmeAux.Bssid); +- +- +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeAuthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- if (AUTH_ReqSend(pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) +- pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2; +- else +- { +- USHORT Status; +- +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerAuthRspAtSeq2Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Seq, Status, RemoteStatus, Alg; +- UCHAR ChlgText[CIPHER_TEXT_LEN]; +- UCHAR CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; +- UCHAR Element[2]; +- HEADER_802_11 AuthHdr; +- BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status2; +- +- if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, (PCHAR)ChlgText)) +- { +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status)); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &TimerCancelled); +- +- if (Status == MLME_SUCCESS) +- { +- // Authentication Mode "LEAP" has allow for CCX 1.X +- if (pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) +- { +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- else +- { +- // 2. shared key, need to be challenged +- Seq++; +- RemoteStatus = MLME_SUCCESS; +- +- // Get an unused nonpaged memory +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthRspAtSeq2Action() allocate memory fail\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status2 = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status2); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Send AUTH request seq#3...\n")); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr2, pAd->MlmeAux.Bssid); +- AuthHdr.FC.Wep = 1; +- // Encrypt challenge text & auth information +- RTMPInitWepEngine( +- pAd, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen, +- CyperChlgText); +- +- Alg = cpu2le16(*(USHORT *)&Alg); +- Seq = cpu2le16(*(USHORT *)&Seq); +- RemoteStatus= cpu2le16(*(USHORT *)&RemoteStatus); +- +- RTMPEncryptData(pAd, (PUCHAR) &Alg, CyperChlgText + 4, 2); +- RTMPEncryptData(pAd, (PUCHAR) &Seq, CyperChlgText + 6, 2); +- RTMPEncryptData(pAd, (PUCHAR) &RemoteStatus, CyperChlgText + 8, 2); +- Element[0] = 16; +- Element[1] = 128; +- RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2); +- RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128); +- RTMPSetICV(pAd, CyperChlgText + 140); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AuthHdr, +- CIPHER_TEXT_LEN + 16, CyperChlgText, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(&pAd->MlmeAux.AuthTimer, AUTH_TIMEOUT); +- pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4; +- } +- } +- else +- { +- pAd->StaCfg.AuthFailReason = Status; +- COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthSanity() sanity check fail\n")); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerAuthRspAtSeq4Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Alg, Seq, Status; +- CHAR ChlgText[CIPHER_TEXT_LEN]; +- BOOLEAN TimerCancelled; +- +- if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ChlgText)) +- { +- if(MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 4) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Receive AUTH_RSP seq#4 to me\n")); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &TimerCancelled); +- +- if (Status != MLME_SUCCESS) +- { +- pAd->StaCfg.AuthFailReason = Status; +- COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); +- } +- +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthRspAtSeq4Action() sanity check fail\n")); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeDeauthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MLME_DEAUTH_REQ_STRUCT *pInfo; +- HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status; +- +- pInfo = (MLME_DEAUTH_REQ_STRUCT *)Elem->Msg; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - MlmeDeauthReqAction() allocate memory fail\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); +- return; +- } +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Send DE-AUTH request (Reason=%d)...\n", pInfo->Reason)); +- MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pInfo->Addr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DeauthHdr, +- 2, &pInfo->Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- pAd->StaCfg.DeauthReason = pInfo->Reason; +- COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pInfo->Addr); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); +- +- // send wireless event - for deauthentication +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID AuthTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeoutAction\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_REJ_TIMEOUT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID InvalidStateWhenAuth( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - InvalidStateWhenAuth (state=%ld), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- Some STA/AP +- Note: +- This action should never trigger AUTH state transition, therefore we +- separate it from AUTH state machine, and make it as a standalone service +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID Cls2errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr) +-{ +- HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Reason = REASON_CLS2ERR; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Class 2 error, Send DEAUTH frame...\n")); +- MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pAddr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DeauthHdr, +- 2, &Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- pAd->StaCfg.DeauthReason = Reason; +- COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pAddr); +-} +- +-BOOLEAN AUTH_ReqSend( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, +- IN ULONG ElementLen) +-{ +- USHORT Alg, Seq, Status; +- UCHAR Addr[6]; +- ULONG Timeout; +- HEADER_802_11 AuthHdr; +- BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0, tmp = 0; +- +- // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s - Block Auth request durning WPA block period!\n", pSMName)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- else if(MlmeAuthReqSanity(pAd, pElem->Msg, pElem->MsgLen, Addr, &Timeout, &Alg)) +- { +- /* reset timer */ +- RTMPCancelTimer(pAuthTimer, &TimerCancelled); +- +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, Addr); +- pAd->MlmeAux.Alg = Alg; +- Seq = SeqNo; +- Status = MLME_SUCCESS; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", pSMName, Alg)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s - Send AUTH request seq#1 (Alg=%d)...\n", pSMName, Alg)); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&AuthHdr, +- 2, &Alg, +- 2, &Seq, +- 2, &Status, +- END_OF_ARGS); +- +- if (pNewElement && ElementLen) +- { +- MakeOutgoingFrame(pOutBuffer+FrameLen, &tmp, +- ElementLen, pNewElement, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(pAuthTimer, Timeout); +- return TRUE; +- } +- else +- { +- DBGPRINT_ERR(("%s - MlmeAuthReqAction() sanity check failed\n", pSMName)); +- return FALSE; +- } +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/sta/auth_rsp.c b/drivers/staging/rt3090/sta/auth_rsp.c +deleted file mode 100644 +index 207bfea..0000000 +--- a/drivers/staging/rt3090/sta/auth_rsp.c ++++ /dev/null +@@ -1,151 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- auth_rsp.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John 2004-10-1 copy from RT2560 +-*/ +- +-#include "../rt_config.h" +- +- +-/* +- ========================================================================== +- Description: +- authentication state machine init procedure +- Parameters: +- Sm - the state machine +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-VOID AuthRspStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, +- IN STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(Sm, Trans, MAX_AUTH_RSP_STATE, MAX_AUTH_RSP_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_RSP_IDLE, AUTH_RSP_MACHINE_BASE); +- +- // column 1 +- StateMachineSetAction(Sm, AUTH_RSP_IDLE, MT2_PEER_DEAUTH, (STATE_MACHINE_FUNC)PeerDeauthAction); +- +- // column 2 +- StateMachineSetAction(Sm, AUTH_RSP_WAIT_CHAL, MT2_PEER_DEAUTH, (STATE_MACHINE_FUNC)PeerDeauthAction); +- +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID PeerAuthSimpleRspGenAndSend( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, +- IN USHORT Status) +-{ +- HEADER_802_11 AuthHdr; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- +- if (Reason != MLME_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n")); +- return; +- } +- +- //Get an unused nonpaged memory +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Send AUTH response (seq#2)...\n")); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, pHdr80211->Addr2, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AuthHdr, +- 2, &Alg, +- 2, &Seq, +- 2, &Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID PeerDeauthAction( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM Elem) +-{ +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; +- +- if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) +- { +- if (INFRA_ON(pAd) +- && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason)); +- +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +- +- // send wireless event - for deauthentication +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- LinkDown(pAd, TRUE); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - PeerDeauthAction() sanity check fail\n")); +- } +-} +diff --git a/drivers/staging/rt3090/sta/connect.c b/drivers/staging/rt3090/sta/connect.c +deleted file mode 100644 +index 4aa35ee..0000000 +--- a/drivers/staging/rt3090/sta/connect.c ++++ /dev/null +@@ -1,2759 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- connect.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John 2004-08-08 Major modification from RT2560 +-*/ +- +-#include "../rt_config.h" +- +- +-UCHAR CipherSuiteWpaNoneTkip[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication +- }; +-UCHAR CipherSuiteWpaNoneTkipLen = (sizeof(CipherSuiteWpaNoneTkip) / sizeof(UCHAR)); +- +-UCHAR CipherSuiteWpaNoneAes[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x04, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x04, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication +- }; +-UCHAR CipherSuiteWpaNoneAesLen = (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)); +- +-// The following MACRO is called after 1. starting an new IBSS, 2. succesfully JOIN an IBSS, +-// or 3. succesfully ASSOCIATE to a BSS, 4. successfully RE_ASSOCIATE to a BSS +-// All settings successfuly negotiated furing MLME state machines become final settings +-// and are copied to pAd->StaActive +-#define COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ +-{ \ +- NdisZeroMemory((_pAd)->CommonCfg.Ssid, MAX_LEN_OF_SSID); \ +- (_pAd)->CommonCfg.SsidLen = (_pAd)->MlmeAux.SsidLen; \ +- NdisMoveMemory((_pAd)->CommonCfg.Ssid, (_pAd)->MlmeAux.Ssid, (_pAd)->MlmeAux.SsidLen); \ +- COPY_MAC_ADDR((_pAd)->CommonCfg.Bssid, (_pAd)->MlmeAux.Bssid); \ +- (_pAd)->CommonCfg.Channel = (_pAd)->MlmeAux.Channel; \ +- (_pAd)->CommonCfg.CentralChannel = (_pAd)->MlmeAux.CentralChannel; \ +- (_pAd)->StaActive.Aid = (_pAd)->MlmeAux.Aid; \ +- (_pAd)->StaActive.AtimWin = (_pAd)->MlmeAux.AtimWin; \ +- (_pAd)->StaActive.CapabilityInfo = (_pAd)->MlmeAux.CapabilityInfo; \ +- (_pAd)->CommonCfg.BeaconPeriod = (_pAd)->MlmeAux.BeaconPeriod; \ +- (_pAd)->StaActive.CfpMaxDuration = (_pAd)->MlmeAux.CfpMaxDuration; \ +- (_pAd)->StaActive.CfpPeriod = (_pAd)->MlmeAux.CfpPeriod; \ +- (_pAd)->StaActive.SupRateLen = (_pAd)->MlmeAux.SupRateLen; \ +- NdisMoveMemory((_pAd)->StaActive.SupRate, (_pAd)->MlmeAux.SupRate, (_pAd)->MlmeAux.SupRateLen);\ +- (_pAd)->StaActive.ExtRateLen = (_pAd)->MlmeAux.ExtRateLen; \ +- NdisMoveMemory((_pAd)->StaActive.ExtRate, (_pAd)->MlmeAux.ExtRate, (_pAd)->MlmeAux.ExtRateLen);\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APEdcaParm, &(_pAd)->MlmeAux.APEdcaParm, sizeof(EDCA_PARM));\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APQosCapability, &(_pAd)->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APQbssLoad, &(_pAd)->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));\ +- COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].Addr, (_pAd)->MlmeAux.Bssid); \ +- (_pAd)->MacTab.Content[BSSID_WCID].Aid = (_pAd)->MlmeAux.Aid; \ +- (_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = (_pAd)->StaCfg.PairCipher;\ +- COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.BssId, (_pAd)->MlmeAux.Bssid);\ +- (_pAd)->MacTab.Content[BSSID_WCID].RateLen = (_pAd)->StaActive.SupRateLen + (_pAd)->StaActive.ExtRateLen;\ +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +-*/ +-VOID MlmeCntlInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- // Control state machine differs from other state machines, the interface +- // follows the standard interface +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID MlmeCntlMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- switch(pAd->Mlme.CntlMachine.CurrState) +- { +- case CNTL_IDLE: +- CntlIdleProc(pAd, Elem); +- break; +- case CNTL_WAIT_DISASSOC: +- CntlWaitDisassocProc(pAd, Elem); +- break; +- case CNTL_WAIT_JOIN: +- CntlWaitJoinProc(pAd, Elem); +- break; +- +- // CNTL_WAIT_REASSOC is the only state in CNTL machine that does +- // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)". +- // Therefore not protected by NDIS's "only one outstanding OID request" +- // rule. Which means NDIS may SET OID in the middle of ROAMing attempts. +- // Current approach is to block new SET request at RTMPSetInformation() +- // when CntlMachine.CurrState is not CNTL_IDLE +- case CNTL_WAIT_REASSOC: +- CntlWaitReassocProc(pAd, Elem); +- break; +- +- case CNTL_WAIT_START: +- CntlWaitStartProc(pAd, Elem); +- break; +- case CNTL_WAIT_AUTH: +- CntlWaitAuthProc(pAd, Elem); +- break; +- case CNTL_WAIT_AUTH2: +- CntlWaitAuthProc2(pAd, Elem); +- break; +- case CNTL_WAIT_ASSOC: +- CntlWaitAssocProc(pAd, Elem); +- break; +- +- case CNTL_WAIT_OID_LIST_SCAN: +- if(Elem->MsgType == MT2_SCAN_CONF) +- { +- // Resume TxRing after SCANING complete. We hope the out-of-service time +- // won't be too long to let upper layer time-out the waiting frames +- RTMPResumeMsduTransmission(pAd); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- // +- // Set LED status to previous status. +- // +- if (pAd->bLedOnScanning) +- { +- pAd->bLedOnScanning = FALSE; +- RTMPSetLED(pAd, pAd->LedStatus); +- } +-#ifdef DOT11N_DRAFT3 +- // AP sent a 2040Coexistence mgmt frame, then station perform a scan, and then send back the respone. +- if (pAd->CommonCfg.BSSCoexist2040.field.InfoReq == 1) +- { +- Update2040CoexistFrameAndNotify(pAd, BSSID_WCID, TRUE); +- } +-#endif // DOT11N_DRAFT3 // +- } +- break; +- +- case CNTL_WAIT_OID_DISASSOC: +- if (Elem->MsgType == MT2_DISASSOC_CONF) +- { +- LinkDown(pAd, FALSE); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- } +- break; +- default: +- DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", Elem->MsgType)); +- break; +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlIdleProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- switch(Elem->MsgType) +- { +- case OID_802_11_SSID: +- CntlOidSsidProc(pAd, Elem); +- break; +- +- case OID_802_11_BSSID: +- CntlOidRTBssidProc(pAd,Elem); +- break; +- +- case OID_802_11_BSSID_LIST_SCAN: +- CntlOidScanProc(pAd,Elem); +- break; +- +- case OID_802_11_DISASSOCIATE: +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE_WITH_WEB_UI) +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- } +- break; +- +- case MT2_MLME_ROAMING_REQ: +- CntlMlmeRoamingProc(pAd, Elem); +- break; +- +- case OID_802_11_MIC_FAILURE_REPORT_FRAME: +- WpaMicFailureReportFrame(pAd, Elem); +- break; +- +-#ifdef QOS_DLS_SUPPORT +- case RT_OID_802_11_SET_DLS_PARAM: +- CntlOidDLSSetupProc(pAd, Elem); +- break; +-#endif // QOS_DLS_SUPPORT // +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Illegal message in CntlIdleProc(MsgType=%ld)\n",Elem->MsgType)); +- break; +- } +-} +- +-VOID CntlOidScanProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MLME_SCAN_REQ_STRUCT ScanReq; +- ULONG BssIdx = BSS_NOT_FOUND; +- BSS_ENTRY CurrBss; +- +-#ifdef RALINK_ATE +-/* Disable scanning when ATE is running. */ +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- +- // record current BSS if network is connected. +- // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- BssIdx = BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->CommonCfg.Channel); +- if (BssIdx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(&CurrBss, &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); +- } +- } +- +- // clean up previous SCAN result, add current BSS back to table if any +- BssTableInit(&pAd->ScanTab); +- if (BssIdx != BSS_NOT_FOUND) +- { +- // DDK Note: If the NIC is associated with a particular BSSID and SSID +- // that are not contained in the list of BSSIDs generated by this scan, the +- // BSSID description of the currently associated BSSID and SSID should be +- // appended to the list of BSSIDs in the NIC's database. +- // To ensure this, we append this BSS as the first entry in SCAN result +- NdisMoveMemory(&pAd->ScanTab.BssEntry[0], &CurrBss, sizeof(BSS_ENTRY)); +- pAd->ScanTab.BssNr = 1; +- } +- +- ScanParmFill(pAd, &ScanReq, (PSTRING) Elem->Msg, Elem->MsgLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +- sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +-} +- +-/* +- ========================================================================== +- Description: +- Before calling this routine, user desired SSID should already been +- recorded in CommonCfg.Ssid[] +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlOidSsidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) +-{ +- PNDIS_802_11_SSID pOidSsid = (NDIS_802_11_SSID *)Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- ULONG Now; +- +- +- // Step 1. record the desired user settings to MlmeAux +- NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, pOidSsid->Ssid, pOidSsid->SsidLength); +- pAd->MlmeAux.SsidLen = (UCHAR)pOidSsid->SsidLength; +- NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- pAd->MlmeAux.BssType = pAd->StaCfg.BssType; +- +- pAd->StaCfg.bAutoConnectByBssid = FALSE; +- +- // +- // Update Reconnect Ssid, that user desired to connect. +- // +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->MlmeAux.SsidLen; +- +- // step 2. find all matching BSS in the lastest SCAN result (inBssTab) +- // & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order +- BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - %d BSS of %d BSS match the desire (%d)SSID - %s\n", +- pAd->MlmeAux.SsidBssTab.BssNr, pAd->ScanTab.BssNr, pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid)); +- NdisGetSystemUpTime(&Now); +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && +- (pAd->CommonCfg.SsidLen == pAd->MlmeAux.SsidBssTab.BssEntry[0].SsidLen) && +- NdisEqualMemory(pAd->CommonCfg.Ssid, pAd->MlmeAux.SsidBssTab.BssEntry[0].Ssid, pAd->CommonCfg.SsidLen) && +- MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, pAd->MlmeAux.SsidBssTab.BssEntry[0].Bssid)) +- { +- // Case 1. already connected with an AP who has the desired SSID +- // with highest RSSI +- +- // Add checking Mode "LEAP" for CCX 1.0 +- if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- ) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- // case 1.1 For WPA, WPA-PSK, if the 1x port is not secured, we have to redo +- // connection process +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else if (pAd->bConfigChanged == TRUE) +- { +- // case 1.2 Important Config has changed, we have to reconnect to the same AP +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP Because config changed...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { +- // case 1.3. already connected to the SSID with highest RSSI. +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - already with this BSSID. ignore this SET_SSID request\n")); +- // +- // (HCT 12.1) 1c_wlan_mediaevents required +- // media connect events are indicated when associating with the same AP +- // +- if (INFRA_ON(pAd)) +- { +- // +- // Since MediaState already is NdisMediaStateConnected +- // We just indicate the connect event again to meet the WHQL required. +- // +- pAd->IndicateMediaState = NdisMediaStateConnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up +- } +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- } +- } +- else if (INFRA_ON(pAd)) +- { +- // +- // For RT61 +- // [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) +- // RT61 may lost SSID, and not connect to NDTEST_WEP_AP2 and will connect to NDTEST_WEP_AP2 by Autoreconnect +- // But media status is connected, so the SSID not report correctly. +- // +- if (!SSID_EQUAL(pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen)) +- { +- // +- // Different SSID means not Roaming case, so we let LinkDown() to Indicate a disconnect event. +- // +- pAd->MlmeAux.CurrReqIsFromNdis = TRUE; +- } +- // case 2. active INFRA association existent +- // roaming is done within miniport driver, nothing to do with configuration +- // utility. so upon a new SET(OID_802_11_SSID) is received, we just +- // disassociate with the current associated AP, +- // then perform a new association with this new SSID, no matter the +- // new/old SSID are the same or not. +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { +- if (ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - drop current ADHOC\n")); +- LinkDown(pAd, FALSE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); +- } +- +- if ((pAd->MlmeAux.SsidBssTab.BssNr == 0) && +- (pAd->StaCfg.bAutoReconnect == TRUE) && +- (pAd->MlmeAux.BssType == BSS_INFRA) && +- (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) == TRUE) +- ) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number +- pAd->StaCfg.LastScanTime = Now; +- } +- else +- { +- +- pAd->MlmeAux.BssIdx = 0; +- IterateOnBssTab(pAd); +- } +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlOidRTBssidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) +-{ +- ULONG BssIdx; +- PUCHAR pOidBssid = (PUCHAR)Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- MLME_JOIN_REQ_STRUCT JoinReq; +- +-#ifdef RALINK_ATE +-/* No need to perform this routine when ATE is running. */ +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- +- // record user desired settings +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid); +- pAd->MlmeAux.BssType = pAd->StaCfg.BssType; +- +- // find the desired BSS in the latest SCAN result table +- BssIdx = BssTableSearch(&pAd->ScanTab, pOidBssid, pAd->MlmeAux.Channel); +- if (BssIdx == BSS_NOT_FOUND) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); +- //pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number +- NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); +- return; +- } +- +- // +- // Update Reconnect Ssid, that user desired to connect. +- // +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->ScanTab.BssEntry[BssIdx].SsidLen); +- +- // copy the matched BSS entry from ScanTab to MlmeAux.SsidBssTab. Why? +- // Because we need this entry to become the JOIN target in later on SYNC state machine +- pAd->MlmeAux.BssIdx = 0; +- pAd->MlmeAux.SsidBssTab.BssNr = 1; +- NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); +- +- // Add SSID into MlmeAux for site surey joining hidden SSID +- pAd->MlmeAux.SsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; +- NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->MlmeAux.SsidLen); +- +- { +- if (INFRA_ON(pAd)) +- { +- // disassoc from current AP first +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - disassociate with current AP ...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { +- if (ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - drop current ADHOC\n")); +- LinkDown(pAd, FALSE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); +- } +- +- // Change the wepstatus to original wepstatus +- pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; +- +- // Check cipher suite, AP must have more secured cipher than station setting +- // Set the Pairwise and Group cipher to match the intended AP setting +- // We can only connect to AP with less secured cipher setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipher) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipher; +- else if (pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipher) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipher; +- else if (pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- +- // RSN capability +- pAd->StaCfg.RsnCapability = pAd->ScanTab.BssEntry[BssIdx].WPA2.RsnCapability; +- } +- +- // Set Mix cipher flag +- pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +- /*if (pAd->StaCfg.bMixCipher == TRUE) +- { +- // If mix cipher, re-build RSNIE +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- }*/ +- // No active association, join the BSS immediately +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pOidBssid[0],pOidBssid[1],pOidBssid[2],pOidBssid[3],pOidBssid[4],pOidBssid[5])); +- +- JoinParmFill(pAd, &JoinReq, pAd->MlmeAux.BssIdx); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; +- } +- } +-} +- +-// Roaming is the only external request triggering CNTL state machine +-// despite of other "SET OID" operation. All "SET OID" related oerations +-// happen in sequence, because no other SET OID will be sent to this device +-// until the the previous SET operation is complete (successful o failed). +-// So, how do we quarantee this ROAMING request won't corrupt other "SET OID"? +-// or been corrupted by other "SET OID"? +-// +-// IRQL = DISPATCH_LEVEL +-VOID CntlMlmeRoamingProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR BBPValue = 0; +- +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - Roaming in MlmeAux.RoamTab...\n")); +- +- { +- //Let BBP register at 20MHz to do (fast) roaming. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- +- NdisMoveMemory(&pAd->MlmeAux.SsidBssTab, &pAd->MlmeAux.RoamTab, sizeof(pAd->MlmeAux.RoamTab)); +- pAd->MlmeAux.SsidBssTab.BssNr = pAd->MlmeAux.RoamTab.BssNr; +- +- BssTableSortByRssi(&pAd->MlmeAux.SsidBssTab); +- pAd->MlmeAux.BssIdx = 0; +- IterateOnBssTab(pAd); +- } +-} +- +-#ifdef QOS_DLS_SUPPORT +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlOidDLSSetupProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PRT_802_11_DLS pDLS = (PRT_802_11_DLS)Elem->Msg; +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- INT i; +- USHORT reason = REASON_UNSPECIFY; +- +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - (OID set %02x:%02x:%02x:%02x:%02x:%02x with Valid=%d, Status=%d, TimeOut=%d, CountDownTimer=%d)\n", +- pDLS->MacAddr[0], pDLS->MacAddr[1], pDLS->MacAddr[2], pDLS->MacAddr[3], pDLS->MacAddr[4], pDLS->MacAddr[5], +- pDLS->Valid, pDLS->Status, pDLS->TimeOut, pDLS->CountDownTimer)); +- +- if (!pAd->CommonCfg.bDLSCapable) +- return; +- +- // DLS will not be supported when Adhoc mode +- if (INFRA_ON(pAd)) +- { +- for (i = 0; i < MAX_NUM_OF_DLS_ENTRY; i++) +- { +- if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && +- (pDLS->TimeOut == pAd->StaCfg.DLSEntry[i].TimeOut) && MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- // 1. Same setting, just drop it +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - setting unchanged\n")); +- break; +- } +- else if (!pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && +- MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- // 2. Disable DLS link case, just tear down DLS link +- reason = REASON_QOS_UNWANTED_MECHANISM; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - start tear down procedure\n")); +- break; +- } +- else if ((i < MAX_NUM_OF_DLS_ENTRY) && pDLS->Valid && !pAd->StaCfg.DLSEntry[i].Valid) +- { +- // 3. Enable case, start DLS setup procedure +- NdisMoveMemory(&pAd->StaCfg.DLSEntry[i], pDLS, sizeof(RT_802_11_DLS_UI)); +- +- //Update countdown timer +- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS setup case\n")); +- break; +- } +- else if ((i < MAX_NUM_OF_DLS_ENTRY) && pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && +- (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && !MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- // 4. update mac case, tear down old DLS and setup new DLS +- reason = REASON_QOS_UNWANTED_MECHANISM; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- NdisMoveMemory(&pAd->StaCfg.DLSEntry[i], pDLS, sizeof(RT_802_11_DLS_UI)); +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS tear down and restart case\n")); +- break; +- } +- else if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && +- MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr) && (pAd->StaCfg.DLSEntry[i].TimeOut != pDLS->TimeOut)) +- { +- // 5. update timeout case, start DLS setup procedure (no tear down) +- pAd->StaCfg.DLSEntry[i].TimeOut = pDLS->TimeOut; +- //Update countdown timer +- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS update timeout case\n")); +- break; +- } +- else if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && +- (pAd->StaCfg.DLSEntry[i].Status != DLS_FINISH) && MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- // 6. re-setup case, start DLS setup procedure (no tear down) +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS retry setup procedure\n")); +- break; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN,("CNTL - DLS not changed in entry - %d - Valid=%d, Status=%d, TimeOut=%d\n", +- i, pAd->StaCfg.DLSEntry[i].Valid, pAd->StaCfg.DLSEntry[i].Status, pAd->StaCfg.DLSEntry[i].TimeOut)); +- } +- } +- } +-} +-#endif // QOS_DLS_SUPPORT // +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitDisassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- MLME_START_REQ_STRUCT StartReq; +- +- if (Elem->MsgType == MT2_DISASSOC_CONF) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Dis-associate successful\n")); +- +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- +- LinkDown(pAd, FALSE); +- +- // case 1. no matching BSS, and user wants ADHOC, so we just start a new one +- if ((pAd->MlmeAux.SsidBssTab.BssNr==0) && (pAd->StaCfg.BssType == BSS_ADHOC)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } +- // case 2. try each matched BSS +- else +- { +- pAd->MlmeAux.BssIdx = 0; +- +- IterateOnBssTab(pAd); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitJoinProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Reason; +- MLME_AUTH_REQ_STRUCT AuthReq; +- +- if (Elem->MsgType == MT2_JOIN_CONF) +- { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { +- // 1. joined an IBSS, we are pretty much done here +- if (pAd->MlmeAux.BssType == BSS_ADHOC) +- { +- // +- // 5G bands rules of Japan: +- // Ad hoc must be disabled in W53(ch52,56,60,64) channels. +- // +- if ( (pAd->CommonCfg.bIEEE80211H == 1) && +- RadarChannelCheck(pAd, pAd->CommonCfg.Channel) +- ) +- { +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Join adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel)); +- return; +- } +- +- LinkUp(pAd, BSS_ADHOC); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - join the IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pAd->CommonCfg.Bssid[0],pAd->CommonCfg.Bssid[1],pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3],pAd->CommonCfg.Bssid[4],pAd->CommonCfg.Bssid[5])); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; +- } +- // 2. joined a new INFRA network, start from authentication +- else +- { +- { +- // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); +- } +- else +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); +- } +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); +- } +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH; +- } +- } +- else +- { +- // 3. failed, try next BSS +- pAd->MlmeAux.BssIdx++; +- IterateOnBssTab(pAd); +- } +- } +-} +- +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitStartProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Result; +- +- if (Elem->MsgType == MT2_START_CONF) +- { +- NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); +- if (Result == MLME_SUCCESS) +- { +- // +- // 5G bands rules of Japan: +- // Ad hoc must be disabled in W53(ch52,56,60,64) channels. +- // +- if ( (pAd->CommonCfg.bIEEE80211H == 1) && +- RadarChannelCheck(pAd, pAd->CommonCfg.Channel) +- ) +- { +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Start adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel)); +- return; +- } +-#ifdef DOT11_N_SUPPORT +- NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- N_ChannelCheck(pAd); +- SetCommonHT(pAd); +- NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &pAd->CommonCfg.AddHTInfo, sizeof(ADD_HT_INFO_IE)); +- RTMPCheckHt(pAd, BSSID_WCID, &pAd->CommonCfg.HtCapability, &pAd->CommonCfg.AddHTInfo); +- pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; +- NdisMoveMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], &pAd->CommonCfg.HtCapability.MCSSet[0], 16); +- COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +- +- if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE)) +- { +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel + 2; +- } +- else if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW)) +- { +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel - 2; +- } +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- } +- LinkUp(pAd, BSS_ADHOC); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- // Before send beacon, driver need do radar detection +- if ((pAd->CommonCfg.Channel > 14 ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- pAd->CommonCfg.RadarDetect.RDMode = RD_SILENCE_MODE; +- pAd->CommonCfg.RadarDetect.RDCount = 0; +-#ifdef DFS_SUPPORT +- BbpRadarDetectionStart(pAd); +-#endif // DFS_SUPPORT // +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - start a new IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pAd->CommonCfg.Bssid[0],pAd->CommonCfg.Bssid[1],pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3],pAd->CommonCfg.Bssid[4],pAd->CommonCfg.Bssid[5])); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Start IBSS fail. BUG!!!!!\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitAuthProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; +- +- if (Elem->MsgType == MT2_AUTH_CONF) +- { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); +- AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); +- +- { +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC; +- } +- } +- else +- { +- // This fail may because of the AP already keep us in its MAC table without +- // ageing-out. The previous authentication attempt must have let it remove us. +- // so try Authentication again may help. For D-Link DWL-900AP+ compatibility. +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try again...\n")); +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) +- { +- // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); +- } +- else +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); +- } +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); +- +- } +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2; +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitAuthProc2( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; +- +- if (Elem->MsgType == MT2_AUTH_CONF) +- { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); +- AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); +- { +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC; +- } +- } +- else +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) && +- (pAd->MlmeAux.Alg == Ndis802_11AuthModeShared)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try OPEN system...\n")); +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeOpen); +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2; +- } +- else +- { +- // not success, try next BSS +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, give up; try next BSS\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; //??????? +- pAd->MlmeAux.BssIdx++; +- IterateOnBssTab(pAd); +- } +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitAssocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Reason; +- +- if (Elem->MsgType == MT2_ASSOC_CONF) +- { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- +- LinkUp(pAd, BSS_INFRA); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx)); +- } +- else +- { +- // not success, try next BSS +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association fails on BSS #%ld\n",pAd->MlmeAux.BssIdx)); +- pAd->MlmeAux.BssIdx++; +- IterateOnBssTab(pAd); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID CntlWaitReassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Result; +- +- if (Elem->MsgType == MT2_REASSOC_CONF) +- { +- NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); +- if (Result == MLME_SUCCESS) +- { +- // send wireless event - for association +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- // +- // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC +- // +- LinkUp(pAd, BSS_INFRA); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition successful on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); +- } +- else +- { +- // reassoc failed, try to pick next BSS in the BSS Table +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition fails on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); +- { +- pAd->MlmeAux.RoamIdx++; +- IterateOnBssTab2(pAd); +- } +- } +- } +-} +- +- +-VOID AdhocTurnOnQos( +- IN PRTMP_ADAPTER pAd) +-{ +-#define AC0_DEF_TXOP 0 +-#define AC1_DEF_TXOP 0 +-#define AC2_DEF_TXOP 94 +-#define AC3_DEF_TXOP 47 +- +- // Turn on QOs if use HT rate. +- if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) +- { +- pAd->CommonCfg.APEdcaParm.bValid = TRUE; +- pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; +- pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; +- pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1; +- pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1; +- +- pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3; +- pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2; +- +- pAd->CommonCfg.APEdcaParm.Cwmax[0] = 10; +- pAd->CommonCfg.APEdcaParm.Cwmax[1] = 6; +- pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; +- pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; +- +- pAd->CommonCfg.APEdcaParm.Txop[0] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[1] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[2] = AC2_DEF_TXOP; +- pAd->CommonCfg.APEdcaParm.Txop[3] = AC3_DEF_TXOP; +- } +- AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID LinkUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssType) +-{ +- ULONG Now; +- UINT32 Data; +- BOOLEAN Cancelled; +- UCHAR Value = 0, idx = 0, HashIdx = 0; +- MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; +- +- // Init ChannelQuality to prevent DEAD_CQI at initial LinkUp +- pAd->Mlme.ChannelQuality = 50; +- +- pEntry = MacTableLookup(pAd, pAd->CommonCfg.Bssid); +- if (pEntry) +- { +- MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); +- pEntry = NULL; +- } +- +- +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- +- // +- // ASSOC - DisassocTimeoutAction +- // CNTL - Dis-associate successful +- // !!! LINK DOWN !!! +- // [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) +- // +- // To prevent DisassocTimeoutAction to call Link down after we link up, +- // cancel the DisassocTimer no matter what it start or not. +- // +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +- +- COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +- +-#ifdef DOT11_N_SUPPORT +- COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +-#endif // DOT11_N_SUPPORT // +- +-#ifdef RTMP_MAC_PCI +- // Before power save before link up function, We will force use 1R. +- // So after link up, check Rx antenna # again. +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- if(pAd->Antenna.field.RxPath == 3) +- { +- Value |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- Value |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- Value |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- if (BssType == BSS_ADHOC) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); +- +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- // No carrier detection when adhoc +- // CarrierDetectionStop(pAd); +- pAd->CommonCfg.CarrierDetect.CD_State = CD_NORMAL; +-#endif // CARRIER_DETECTION_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- AdhocTurnOnQos(pAd); +-#endif // DOT11_N_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" )); +- } +- else +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" )); +- } +- +- // 3*3 +- // reset Tx beamforming bit +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x01); +- Value |= pAd->CommonCfg.RegTransmitSetting.field.TxBF; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +-#ifdef DOT11_N_SUPPORT +- // Change to AP channel +- if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- // RX : control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- pAd->CommonCfg.BBPCurrentBW = BW_40; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- Value |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data |= 0x1; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value |= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); +- Value &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); +- +- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); +- Data &= 0xfffffffe; +- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); +-#ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // +- +- if (pAd->MACVersion == 0x28600100) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n" )); +- } +- +- RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +- // +- // Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission +- // +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue); +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", +- BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); +- +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Density =%d, )\n", pAd->MacTab.Content[BSSID_WCID].MpduDensity)); +-#endif // DOT11_N_SUPPORT // +- +- AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- +- AsicSetSlotTime(pAd, TRUE); +- AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); +- +- +- // Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit +- AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, FALSE); +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) +- { +- // Update HT protectionfor based on AP's operating mode. +- if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, TRUE); +- } +- else +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); +- } +-#endif // DOT11_N_SUPPORT // +- +- NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS)); +- +- NdisGetSystemUpTime(&Now); +- pAd->StaCfg.LastBeaconRxTime = Now; // last RX timestamp +- +- if ((pAd->CommonCfg.TxPreamble != Rt802_11PreambleLong) && +- CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo)) +- { +- MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); +- } +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- +- if (pAd->CommonCfg.RadarDetect.RDMode == RD_SILENCE_MODE) +- { +-#ifdef DFS_SUPPORT +- RadarDetectionStop(pAd); +-#endif // DFS_SUPPORT // +- } +- pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; +- +- if (BssType == BSS_ADHOC) +- { +- MakeIbssBeacon(pAd); +- if ((pAd->CommonCfg.Channel > 14) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- ; //Do nothing +- } +- else +- { +- AsicEnableIbssSync(pAd); +- } +- +- // In ad hoc mode, use MAC table from index 1. +- // p.s ASIC use all 0xff as termination of WCID table search.To prevent it's 0xff-ff-ff-ff-ff-ff, Write 0 here. +- RTMP_IO_WRITE32(pAd, MAC_WCID_BASE, 0x00); +- RTMP_IO_WRITE32(pAd, 0x1808, 0x00); +- +- // If WEP is enabled, add key material and cipherAlg into Asic +- // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) +- +- if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) +- { +- PUCHAR Key; +- UCHAR CipherAlg; +- +- for (idx=0; idx < SHARE_KEY_NUM; idx++) +- { +- CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +- Key = pAd->SharedKey[BSS0][idx].Key; +- +- if (pAd->SharedKey[BSS0][idx].KeyLen > 0) +- { +- // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); +- +- if (idx == pAd->StaCfg.DefaultKeyId) +- { +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); +- } +- } +- +- +- } +- } +- // If WPANone is enabled, add key material and cipherAlg into Asic +- // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) +- else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.DefaultKeyId = 0; // always be zero +- +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pAd->StaCfg.PMK, LEN_TKIP_EK); +- +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_TXMICK); +- } +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Unknow Cipher (=%d), set Cipher to AES\n", pAd->StaCfg.PairCipher)); +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- } +- +- // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, 0, pAd->SharedKey[BSS0][0].CipherAlg, NULL); +- +- } +- +- } +- else // BSS_INFRA +- { +- // Check the new SSID with last SSID +- while (Cancelled == TRUE) +- { +- if (pAd->CommonCfg.LastSsidLen == pAd->CommonCfg.SsidLen) +- { +- if (RTMPCompareMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, pAd->CommonCfg.LastSsidLen) == 0) +- { +- // Link to the old one no linkdown is required. +- break; +- } +- } +- // Send link down event before set to link up +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event AA!\n")); +- break; +- } +- +- // +- // On WPA mode, Remove All Keys if not connect to the last BSSID +- // Key will be set after 4-way handshake. +- // +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- ULONG IV; +- +- // Remove all WPA keys +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- RTMPWPARemoveAllKeys(pAd); +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- +- // Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP +- // If IV related values are too large in GroupMsg2, AP would ignore this message. +- IV = 1; +- IV |= (pAd->StaCfg.DefaultKeyId << 30); +- AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0); +- //RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- } +- +- // NOTE: +- // the decision of using "short slot time" or not may change dynamically due to +- // new STA association to the AP. so we have to decide that upon parsing BEACON, not here +- +- // NOTE: +- // the decision to use "RTC/CTS" or "CTS-to-self" protection or not may change dynamically +- // due to new STA association to the AP. so we have to decide that upon parsing BEACON, not here +- +- ComposePsPoll(pAd); +- ComposeNullFrame(pAd); +- +- AsicEnableBssSync(pAd); +- +- // Add BSSID to WCID search table +- AsicUpdateRxWCIDTable(pAd, BSSID_WCID, pAd->CommonCfg.Bssid); +- +- // If WEP is enabled, add paiewise and shared key +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (((pAd->StaCfg.WpaSupplicantUP)&& +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)&& +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) || +- ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)&& +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled))) +-#else +- if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- PUCHAR Key; +- UCHAR CipherAlg; +- +- for (idx=0; idx < SHARE_KEY_NUM; idx++) +- { +- CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +- Key = pAd->SharedKey[BSS0][idx].Key; +- +- if (pAd->SharedKey[BSS0][idx].KeyLen > 0) +- { +- // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); +- +- if (idx == pAd->StaCfg.DefaultKeyId) +- { +- // Assign group key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); +- +- pEntry->Aid = BSSID_WCID; +- // Assign pairwise key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, pEntry); +- } +- } +- } +- } +- +- // only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode +- // should wait until at least 2 active nodes in this BSSID. +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- +- // For GUI ++ +- if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- { +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; +- RTMP_IndicateMediaState(pAd); +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) +-#endif // WPA_SUPPLICANT_SUPPORT // +- RTMPSetTimer(&pAd->Mlme.LinkDownTimer, LINK_DOWN_TIMEOUT); +- } +- // -- +- +- // Add BSSID in my MAC Table. +- NdisAcquireSpinLock(&pAd->MacTabLock); +- // add this MAC entry into HASH table +- if (pEntry) +- { +- HashIdx = MAC_ADDR_HASH_INDEX(pAd->CommonCfg.Bssid); +- if (pAd->MacTab.Hash[HashIdx] == NULL) +- { +- pAd->MacTab.Hash[HashIdx] = pEntry; +- } +- else +- { +- pCurrEntry = pAd->MacTab.Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- { +- pCurrEntry = pCurrEntry->pNext; +- } +- pCurrEntry->pNext = pEntry; +- } +- } +- RTMPMoveMemory(pEntry->Addr, pAd->CommonCfg.Bssid, MAC_ADDR_LEN); +- pEntry->Aid = BSSID_WCID; +- pEntry->pAd = pAd; +- pEntry->ValidAsCLI = TRUE; //Although this is bssid..still set ValidAsCl +- pAd->MacTab.Size = 1; // infra mode always set MACtab size =1. +- pEntry->Sst = SST_ASSOC; +- pEntry->AuthState = SST_ASSOC; +- pEntry->AuthMode = pAd->StaCfg.AuthMode; +- pEntry->WepStatus = pAd->StaCfg.WepStatus; +- if (pEntry->AuthMode < Ndis802_11AuthModeWPA) +- { +- pEntry->WpaState = AS_NOTUSE; +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- } +- else +- { +- pEntry->WpaState = AS_PTKSTART; +- pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- } +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! ClientStatusFlags=%lx)\n", +- pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); +- +- +- MlmeUpdateTxRates(pAd, TRUE, BSS0); +-#ifdef DOT11_N_SUPPORT +- MlmeUpdateHtTxRates(pAd, BSS0); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", pAd->StaActive.SupportedPhyInfo.bHtEnable)); +-#endif // DOT11_N_SUPPORT // +- +- +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && (pAd->MlmeAux.APRalinkIe & 0x00000003) == 3) +- { +- +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); +- RTMPSetPiggyBack(pAd, TRUE); +- DBGPRINT(RT_DEBUG_TRACE, ("Turn on Piggy-Back\n")); +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- } +- } +- +- if (pAd->MlmeAux.APRalinkIe != 0x0) +- { +-#ifdef DOT11_N_SUPPORT +- if (CLIENT_STATUS_TEST_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RDG_CAPABLE)) +- { +- AsicEnableRDG(pAd); +- } +-#endif // DOT11_N_SUPPORT // +- OPSTATUS_SET_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RALINK_CHIPSET); +- } +- else +- { +- OPSTATUS_CLEAR_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RALINK_CHIPSET); +- } +- } +- +- +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_CONNECT Event B!.BACapability = %x. ClientStatusFlags = %lx\n", pAd->CommonCfg.BACapability.word, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); +-#endif // DOT11_N_SUPPORT // +- +- // Set LED +- RTMPSetLED(pAd, LED_LINK_UP); +- +- pAd->Mlme.PeriodicRound = 0; +- pAd->Mlme.OneSecPeriodicRound = 0; +- pAd->bConfigChanged = FALSE; // Reset config flag +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up +- +- // Set asic auto fall back +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; +- +- MlmeSelectTxRateTable(pAd, &pAd->MacTab.Content[BSSID_WCID], &pTable, &TableSize, &pAd->CommonCfg.TxRateIndex); +- AsicUpdateAutoFallBackTable(pAd, pTable); +- } +- +- NdisAcquireSpinLock(&pAd->MacTabLock); +- pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word; +- pEntry->MaxHTPhyMode.word = pAd->StaCfg.HTPhyMode.word; +- if (pAd->StaCfg.bAutoTxRateSwitch == FALSE) +- { +- pEntry->bAutoTxRateSwitch = FALSE; +-#ifdef DOT11_N_SUPPORT +- if (pEntry->HTPhyMode.field.MCS == 32) +- pEntry->HTPhyMode.field.ShortGI = GI_800; +- +- if ((pEntry->HTPhyMode.field.MCS > MCS_7) || (pEntry->HTPhyMode.field.MCS == 32)) +- pEntry->HTPhyMode.field.STBC = STBC_NONE; +-#endif // DOT11_N_SUPPORT // +- // If the legacy mode is set, overwrite the transmit setting of this entry. +- if (pEntry->HTPhyMode.field.MODE <= MODE_OFDM) +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- else +- pEntry->bAutoTxRateSwitch = TRUE; +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- // Let Link Status Page display first initial rate. +- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); +- // Select DAC according to HT or Legacy +- if (pAd->StaActive.SupportedPhyInfo.MCSSet[0] != 0x00) +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); +- Value &= (~0x18); +- if (pAd->Antenna.field.TxPath == 2) +- { +- Value |= 0x10; +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value); +- } +- else +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); +- Value &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value); +- } +- +-#ifdef DOT11_N_SUPPORT +- if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) +- { +- } +- else if (pEntry->MaxRAmpduFactor == 0) +- { +- // If HT AP doesn't support MaxRAmpduFactor = 1, we need to set max PSDU to 0. +- // Because our Init value is 1 at MACRegTable. +- RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x0fff); +- } +-#endif // DOT11_N_SUPPORT // +- +- // Patch for Marvel AP to gain high throughput +- // Need to set as following, +- // 1. Set txop in register-EDCA_AC0_CFG as 0x60 +- // 2. Set EnTXWriteBackDDONE in register-WPDMA_GLO_CFG as zero +- // 3. PBF_MAX_PCNT as 0x1F3FBF9F +- // 4. kick per two packets when dequeue +- // +- // Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable +- // +- // if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is. +-#ifdef DOT11_N_SUPPORT +- if (!((pAd->CommonCfg.RxStream == 1)&&(pAd->CommonCfg.TxStream == 1)) && +- (pAd->StaCfg.bForceTxBurst == FALSE) && +- (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) +- || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))) +- { +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +- +- RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3F7F9F); +- DBGPRINT(RT_DEBUG_TRACE, ("Txburst 1\n")); +- } +- else +-#endif // DOT11_N_SUPPORT // +- if (pAd->CommonCfg.bEnableTxBurst) +- { +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- Data |= 0x60; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +- pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = TRUE; +- +- RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3FBF9F); +- DBGPRINT(RT_DEBUG_TRACE, ("Txburst 2\n")); +- } +- else +- { +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); +- +- RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3F7F9F); +- DBGPRINT(RT_DEBUG_TRACE, ("Txburst 3\n")); +- } +- +-#ifdef DOT11_N_SUPPORT +- // Re-check to turn on TX burst or not. +- if ((pAd->CommonCfg.IOTestParm.bLastAtheros == TRUE) && ((STA_WEP_ON(pAd))||(STA_TKIP_ON(pAd)))) +- { +- pAd->CommonCfg.IOTestParm.bNextDisableRxBA = TRUE; +- if (pAd->CommonCfg.bEnableTxBurst) +- { +- UINT32 MACValue = 0; +- // Force disable TXOP value in this case. The same action in MLMEUpdateProtect too. +- // I didn't change PBF_MAX_PCNT setting. +- RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &MACValue); +- MACValue &= 0xFFFFFF00; +- RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, MACValue); +- pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = FALSE; +- } +- } +- else +- { +- pAd->CommonCfg.IOTestParm.bNextDisableRxBA = FALSE; +- } +-#endif // DOT11_N_SUPPORT // +- +- pAd->CommonCfg.IOTestParm.bLastAtheros = FALSE; +- COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!pAd->bNextDisableRxBA= %d \n", pAd->CommonCfg.IOTestParm.bNextDisableRxBA)); +- // BSSID add in one MAC entry too. Because in Tx, ASIC need to check Cipher and IV/EIV, BAbitmap +- // Pther information in MACTab.Content[BSSID_WCID] is not necessary for driver. +- // Note: As STA, The MACTab.Content[BSSID_WCID]. PairwiseKey and Shared Key for BSS0 are the same. +- +- if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled) +- { +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP && +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && +- (pAd->StaCfg.IEEE8021X == TRUE)) +- ; +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- } +- } +- +- NdisAcquireSpinLock(&pAd->MacTabLock); +- pEntry->PortSecured = pAd->StaCfg.PortSecured; +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- // +- // Patch Atheros AP TX will breakdown issue. +- // AP Model: DLink DWL-8200AP +- // +- if (INFRA_ON(pAd) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && STA_TKIP_ON(pAd)) +- { +- RTMP_IO_WRITE32(pAd, RX_PARSER_CFG, 0x01); +- } +- else +- { +- RTMP_IO_WRITE32(pAd, RX_PARSER_CFG, 0x00); +- } +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- if ((pAd->CommonCfg.BACapability.field.b2040CoexistScanSup) && (pAd->CommonCfg.Channel <= 11)) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SCAN_2040); +- BuildEffectedChannelList(pAd); +- } +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +-} +- +-/* +- ========================================================================== +- +- Routine Description: +- Disconnect current BSSID +- +- Arguments: +- pAd - Pointer to our adapter +- IsReqFromAP - Request from AP +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- We need more information to know it's this requst from AP. +- If yes! we need to do extra handling, for example, remove the WPA key. +- Otherwise on 4-way handshaking will faied, since the WPA key didn't be +- remove while auto reconnect. +- Disconnect request from AP, it means we will start afresh 4-way handshaking +- on WPA mode. +- +- ========================================================================== +-*/ +-VOID LinkDown( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN IsReqFromAP) +-{ +- UCHAR i, ByteValue = 0; +- +- BOOLEAN Cancelled; +- +- // Do nothing if monitor mode is on +- if (MONITOR_ON(pAd)) +- return; +- +-#ifdef RALINK_ATE +- // Nothing to do in ATE mode. +- if (ATE_ON(pAd)) +- return; +-#endif // RALINK_ATE // +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- //Comment the codes, beasue the line 2291 call the same function. +- //RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- // Not allow go to sleep within linkdown function. +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- +-#ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- BOOLEAN Cancelled; +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- } +- +- pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-|| RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) +- || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- AsicForceWakeup(pAd, TRUE); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- } +-#ifdef RTMP_MAC_PCI +- pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // +- if (ADHOC_ON(pAd)) // Adhoc mode link down +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size)); +- } +- else // Infra structure mode +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 2!!!\n")); +- +-#ifdef QOS_DLS_SUPPORT +- // DLS tear down frame must be sent before link down +- // send DLS-TEAR_DOWN message +- if (pAd->CommonCfg.bDLSCapable) +- { +- // tear down local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- // tear down peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- } +-#endif // QOS_DLS_SUPPORT // +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- +- // Saved last SSID for linkup comparison +- pAd->CommonCfg.LastSsidLen = pAd->CommonCfg.SsidLen; +- NdisMoveMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, pAd->CommonCfg.LastSsidLen); +- COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid); +- if (pAd->MlmeAux.CurrReqIsFromNdis == TRUE) +- { +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event A!\n")); +- pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- } +- else +- { +- // +- // If disassociation request is from NDIS, then we don't need to delete BSSID from entry. +- // Otherwise lost beacon or receive De-Authentication from AP, +- // then we should delete BSSID from BssTable. +- // If we don't delete from entry, roaming will fail. +- // +- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel); +- } +- +- // restore back to - +- // 1. long slot (20 us) or short slot (9 us) time +- // 2. turn on/off RTS/CTS and/or CTS-to-self protection +- // 3. short preamble +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- // Country IE of the AP will be evaluated and will be used. +- if (pAd->StaCfg.IEEE80211dClientMode != Rt802_11_D_None) +- { +- NdisMoveMemory(&pAd->CommonCfg.CountryCode[0], &pAd->StaCfg.StaOriCountryCode[0], 2); +- pAd->CommonCfg.Geography = pAd->StaCfg.StaOriGeography; +- BuildChannelListEx(pAd); +- } +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- } +- +- +- for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) +- MacTableDeleteEntry(pAd, pAd->MacTab.Content[i].Aid, pAd->MacTab.Content[i].Addr); +- } +- +- AsicSetSlotTime(pAd, TRUE); //FALSE); +- AsicSetEdcaParm(pAd, NULL); +- +- // Set LED +- RTMPSetLED(pAd, LED_LINK_DOWN); +- pAd->LedIndicatorStrength = 0xF0; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. +- +- AsicDisableSync(pAd); +- +- pAd->Mlme.PeriodicRound = 0; +- pAd->Mlme.OneSecPeriodicRound = 0; +- +- if (pAd->StaCfg.BssType == BSS_INFRA) +- { +- // Remove StaCfg Information after link down +- NdisZeroMemory(pAd->CommonCfg.Bssid, MAC_ADDR_LEN); +- NdisZeroMemory(pAd->CommonCfg.Ssid, MAX_LEN_OF_SSID); +- pAd->CommonCfg.SsidLen = 0; +- } +-#ifdef DOT11_N_SUPPORT +- NdisZeroMemory(&pAd->MlmeAux.HtCapability, sizeof(HT_CAPABILITY_IE)); +- NdisZeroMemory(&pAd->MlmeAux.AddHtInfo, sizeof(ADD_HT_INFO_IE)); +- pAd->MlmeAux.HtCapabilityLen = 0; +- pAd->MlmeAux.NewExtChannelOffset = 0xff; +-#endif // DOT11_N_SUPPORT // +- +- // Reset WPA-PSK state. Only reset when supplicant enabled +- if (pAd->StaCfg.WpaState != SS_NOTUSE) +- { +- pAd->StaCfg.WpaState = SS_START; +- // Clear Replay counter +- NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); +- +-#ifdef QOS_DLS_SUPPORT +- if (pAd->CommonCfg.bDLSCapable) +- NdisZeroMemory(pAd->StaCfg.DlsReplayCounter, 8); +-#endif // QOS_DLS_SUPPORT // +- } +- +- // +- // if link down come from AP, we need to remove all WPA keys on WPA mode. +- // otherwise will cause 4-way handshaking failed, since the WPA key not empty. +- // +- if ((IsReqFromAP) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) +- { +- // Remove all WPA keys +- RTMPWPARemoveAllKeys(pAd); +- } +- +- // 802.1x port control +-#ifdef WPA_SUPPLICANT_SUPPORT +- // Prevent clear PortSecured here with static WEP +- // NetworkManger set security policy first then set SSID to connect AP. +- if (pAd->StaCfg.WpaSupplicantUP && +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && +- (pAd->StaCfg.IEEE8021X == FALSE)) +- { +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- } +- +- NdisAcquireSpinLock(&pAd->MacTabLock); +- NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); +- pAd->MacTab.Content[BSSID_WCID].PortSecured = pAd->StaCfg.PortSecured; +- NdisReleaseSpinLock(&pAd->MacTabLock); +- +- pAd->StaCfg.MicErrCnt = 0; +- +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- // Update extra information to link is up +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- +- +- // Clean association information +- NdisZeroMemory(&pAd->StaCfg.AssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); +- pAd->StaCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); +- pAd->StaCfg.ReqVarIELen = 0; +- pAd->StaCfg.ResVarIELen = 0; +- +- // +- // Reset RSSI value after link down +- // +- pAd->StaCfg.RssiSample.AvgRssi0 = 0; +- pAd->StaCfg.RssiSample.AvgRssi0X8 = 0; +- pAd->StaCfg.RssiSample.AvgRssi1 = 0; +- pAd->StaCfg.RssiSample.AvgRssi1X8 = 0; +- pAd->StaCfg.RssiSample.AvgRssi2 = 0; +- pAd->StaCfg.RssiSample.AvgRssi2X8 = 0; +- +- // Restore MlmeRate +- pAd->CommonCfg.MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- pAd->CommonCfg.RtsRate = pAd->CommonCfg.BasicMlmeRate; +- +-#ifdef DOT11_N_SUPPORT +- // +- // After Link down, reset piggy-back setting in ASIC. Disable RDG. +- // +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- pAd->CommonCfg.BBPCurrentBW = BW_20; +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &ByteValue); +- ByteValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, ByteValue); +- } +-#endif // DOT11_N_SUPPORT // +- // Reset DAC +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &ByteValue); +- ByteValue &= (~0x18); +- if (pAd->Antenna.field.TxPath == 2) +- { +- ByteValue |= 0x10; +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, ByteValue); +- +- RTMPSetPiggyBack(pAd,FALSE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED); +- +-#ifdef DOT11_N_SUPPORT +- pAd->CommonCfg.BACapability.word = pAd->CommonCfg.REGBACapability.word; +-#endif // DOT11_N_SUPPORT // +- +- // Restore all settings in the following. +- AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT|CCKSETPROTECT|OFDMSETPROTECT), TRUE, FALSE); +- AsicDisableRDG(pAd); +- pAd->CommonCfg.IOTestParm.bCurrentAtheros = FALSE; +- pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = FALSE; +- +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SCAN_2040); +- pAd->CommonCfg.BSSCoexist2040.word = 0; +- TriEventInit(pAd); +- for (i = 0; i < (pAd->ChannelListNum - 1); i++) +- { +- pAd->ChannelList[i].bEffectedChannel = FALSE; +- } +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +- RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x1fff); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +-// Allow go to sleep after linkdown steps. +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +-#ifdef WPA_SUPPLICANT_SUPPORT +-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP) { +- //send disassociate event to wpa_supplicant +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, RT_DISASSOC_EVENT_FLAG, NULL, NULL, 0); +- } +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- +-#ifdef RT30xx +- if ((IS_RT30xx(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { +- RTMP_ASIC_MMPS_DISABLE(pAd); +- } +-#endif // RT30xx // +- +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID IterateOnBssTab( +- IN PRTMP_ADAPTER pAd) +-{ +- MLME_START_REQ_STRUCT StartReq; +- MLME_JOIN_REQ_STRUCT JoinReq; +- ULONG BssIdx; +- +- // Change the wepstatus to original wepstatus +- pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; +- +- BssIdx = pAd->MlmeAux.BssIdx; +- if (BssIdx < pAd->MlmeAux.SsidBssTab.BssNr) +- { +- // Check cipher suite, AP must have more secured cipher than station setting +- // Set the Pairwise and Group cipher to match the intended AP setting +- // We can only connect to AP with less secured cipher setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipher) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipher; +- else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipher) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipher; +- else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- +- // RSN capability +- pAd->StaCfg.RsnCapability = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.RsnCapability; +- } +- +- // Set Mix cipher flag +- pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +- /*if (pAd->StaCfg.bMixCipher == TRUE) +- { +- // If mix cipher, re-build RSNIE +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- }*/ +- +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - iterate BSS %ld of %d\n", BssIdx, pAd->MlmeAux.SsidBssTab.BssNr)); +- JoinParmFill(pAd, &JoinReq, BssIdx); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, sizeof(MLME_JOIN_REQ_STRUCT), +- &JoinReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; +- } +- else if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All BSS fail; start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } +- else // no more BSS +- { +- +-#ifdef DOT11_N_SUPPORT +-#endif // DOT11_N_SUPPORT // +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); +- } +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- } +-} +- +-// for re-association only +-// IRQL = DISPATCH_LEVEL +-VOID IterateOnBssTab2( +- IN PRTMP_ADAPTER pAd) +-{ +- MLME_REASSOC_REQ_STRUCT ReassocReq; +- ULONG BssIdx; +- BSS_ENTRY *pBss; +- +- BssIdx = pAd->MlmeAux.RoamIdx; +- pBss = &pAd->MlmeAux.RoamTab.BssEntry[BssIdx]; +- +- if (BssIdx < pAd->MlmeAux.RoamTab.BssNr) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - iterate BSS %ld of %d\n", BssIdx, pAd->MlmeAux.RoamTab.BssNr)); +- +- AsicSwitchChannel(pAd, pBss->Channel, FALSE); +- AsicLockChannel(pAd, pBss->Channel); +- +- // reassociate message has the same structure as associate message +- AssocParmFill(pAd, &ReassocReq, pBss->Bssid, pBss->CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ, +- sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC; +- } +- else // no more BSS +- { +- +-#ifdef DOT11_N_SUPPORT +-#endif // DOT11_N_SUPPORT // +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); +- } +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID JoinParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, +- IN ULONG BssIdx) +-{ +- JoinReq->BssIdx = BssIdx; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID ScanParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN UCHAR ScanType) +-{ +- NdisZeroMemory(ScanReq->Ssid, MAX_LEN_OF_SSID); +- ScanReq->SsidLen = SsidLen; +- NdisMoveMemory(ScanReq->Ssid, Ssid, SsidLen); +- ScanReq->BssType = BssType; +- ScanReq->ScanType = ScanType; +-} +- +-#ifdef QOS_DLS_SUPPORT +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID DlsParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DLS_REQ_STRUCT *pDlsReq, +- IN PRT_802_11_DLS pDls, +- IN USHORT reason) +-{ +- pDlsReq->pDLS = pDls; +- pDlsReq->Reason = reason; +-} +-#endif // QOS_DLS_SUPPORT // +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID StartParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT *StartReq, +- IN CHAR Ssid[], +- IN UCHAR SsidLen) +-{ +- ASSERT(SsidLen <= MAX_LEN_OF_SSID); +- NdisMoveMemory(StartReq->Ssid, Ssid, SsidLen); +- StartReq->SsidLen = SsidLen; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-VOID AuthParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, +- IN PUCHAR pAddr, +- IN USHORT Alg) +-{ +- COPY_MAC_ADDR(AuthReq->Addr, pAddr); +- AuthReq->Alg = Alg; +- AuthReq->Timeout = AUTH_TIMEOUT; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-#ifdef RTMP_MAC_PCI +-VOID ComposePsPoll( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); +- pAd->PsPollFrame.FC.Type = BTYPE_CNTL; +- pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL; +- pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000; +- COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid); +- COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID ComposeNullFrame( +- IN PRTMP_ADAPTER pAd) +-{ +- NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); +- pAd->NullFrame.FC.Type = BTYPE_DATA; +- pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC; +- pAd->NullFrame.FC.ToDs = 1; +- COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid); +- COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); +-} +-#endif // RTMP_MAC_PCI // +- +- +- +- +-/* +- ========================================================================== +- Description: +- Pre-build a BEACON frame in the shared memory +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +-*/ +-ULONG MakeIbssBeacon( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = {IE_ERP, 1, 0x04}; +- HEADER_802_11 BcnHdr; +- USHORT CapabilityInfo; +- LARGE_INTEGER FakeTimestamp; +- ULONG FrameLen = 0; +- PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; +- UCHAR *pBeaconFrame = pAd->BeaconBuf; +- BOOLEAN Privacy; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen = 0; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen = 0; +- UCHAR RSNIe = IE_WPA; +- +- if ((pAd->CommonCfg.PhyMode == PHY_11B) && (pAd->CommonCfg.Channel <= 14)) +- { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps +- SupRateLen = 4; +- ExtRateLen = 0; +- } +- else if (pAd->CommonCfg.Channel > 14) +- { +- SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- SupRateLen = 8; +- ExtRateLen = 0; +- +- // +- // Also Update MlmeRate & RtsRate for G only & A only +- // +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.RtsRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_OFDM; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- else +- { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps +- SupRateLen = 4; +- +- ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps, +- ExtRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- ExtRate[2] = 0x18; // 12 mbps, in units of 0.5 Mbps, +- ExtRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- ExtRate[4] = 0x30; // 24 mbps, in units of 0.5 Mbps, +- ExtRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- ExtRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- ExtRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- ExtRateLen = 8; +- } +- +- pAd->StaActive.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->StaActive.SupRate, SupRate, SupRateLen); +- pAd->StaActive.ExtRateLen = ExtRateLen; +- NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, ExtRateLen); +- +- // compose IBSS beacon frame +- MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, BROADCAST_ADDR, pAd->CommonCfg.Bssid); +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- CapabilityInfo = CAP_GENERATE(0, 1, Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 0, 0); +- +- MakeOutgoingFrame(pBeaconFrame, &FrameLen, +- sizeof(HEADER_802_11), &BcnHdr, +- TIMESTAMP_LEN, &FakeTimestamp, +- 2, &pAd->CommonCfg.BeaconPeriod, +- 2, &CapabilityInfo, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &SupRateLen, +- SupRateLen, SupRate, +- 1, &DsIe, +- 1, &DsLen, +- 1, &pAd->CommonCfg.Channel, +- 1, &IbssIe, +- 1, &IbssLen, +- 2, &pAd->StaActive.AtimWin, +- END_OF_ARGS); +- +- // add ERP_IE and EXT_RAE IE of in 802.11g +- if (ExtRateLen) +- { +- ULONG tmp; +- +- MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, +- 3, LocalErpIe, +- 1, &ExtRateIe, +- 1, &ExtRateLen, +- ExtRateLen, ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- // If adhoc secruity is set for WPA-None, append the cipher suite IE +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- ULONG tmp; +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); +- +- MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- ULONG TmpLen; +- UCHAR HtLen, HtLen1; +- +-#ifdef RT_BIG_ENDIAN +- HT_CAPABILITY_IE HtCapabilityTmp; +- ADD_HT_INFO_IE addHTInfoTmp; +- USHORT b2lTmp, b2lTmp2; +-#endif +- +- // add HT Capability IE +- HtLen = sizeof(pAd->CommonCfg.HtCapability); +- HtLen1 = sizeof(pAd->CommonCfg.AddHTInfo); +-#ifndef RT_BIG_ENDIAN +- MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- 1, &AddHtInfoIe, +- 1, &HtLen1, +- HtLen1, &pAd->CommonCfg.AddHTInfo, +- END_OF_ARGS); +-#else +- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +- +- NdisMoveMemory(&addHTInfoTmp, &pAd->CommonCfg.AddHTInfo, HtLen1); +- *(USHORT *)(&addHTInfoTmp.AddHtInfo2) = SWAP16(*(USHORT *)(&addHTInfoTmp.AddHtInfo2)); +- *(USHORT *)(&addHTInfoTmp.AddHtInfo3) = SWAP16(*(USHORT *)(&addHTInfoTmp.AddHtInfo3)); +- +- MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &HtCapabilityTmp, +- 1, &AddHtInfoIe, +- 1, &HtLen1, +- HtLen1, &addHTInfoTmp, +- END_OF_ARGS); +-#endif +- FrameLen += TmpLen; +- } +-#endif // DOT11_N_SUPPORT // +- +- //beacon use reserved WCID 0xff +- if (pAd->CommonCfg.Channel > 14) +- { +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, 0, 0xff, FrameLen, +- PID_MGMT, PID_BEACON, RATE_1, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { +- // Set to use 1Mbps for Adhoc beacon. +- HTTRANSMIT_SETTING Transmit; +- Transmit.word = 0; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, 0, 0xff, FrameLen, +- PID_MGMT, PID_BEACON, RATE_1, IFS_HTTXOP, FALSE, &Transmit); +- } +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, pBeaconFrame, DIR_WRITE, FALSE); +- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI); +-#endif +- +- DBGPRINT(RT_DEBUG_TRACE, ("MakeIbssBeacon (len=%ld), SupRateLen=%d, ExtRateLen=%d, Channel=%d, PhyMode=%d\n", +- FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, pAd->CommonCfg.PhyMode)); +- return FrameLen; +-} +diff --git a/drivers/staging/rt3090/sta/dls.c b/drivers/staging/rt3090/sta/dls.c +deleted file mode 100644 +index 306e16f..0000000 +--- a/drivers/staging/rt3090/sta/dls.c ++++ /dev/null +@@ -1,2207 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- dls.c +- +- Abstract: +- Handle WMM-DLS state machine +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Rory Chen 02-14-2006 +- Arvin Tai 06-03-2008 Modified for RT28xx +- */ +- +-#include "../rt_config.h" +- +- +-/* +- ========================================================================== +- Description: +- dls state machine init, including state transition and timer init +- Parameters: +- Sm - pointer to the dls state machine +- Note: +- The state machine looks like this +- +- DLS_IDLE +- MT2_MLME_DLS_REQUEST MlmeDlsReqAction +- MT2_PEER_DLS_REQUEST PeerDlsReqAction +- MT2_PEER_DLS_RESPONSE PeerDlsRspAction +- MT2_MLME_DLS_TEARDOWN MlmeTearDownAction +- MT2_PEER_DLS_TEARDOWN PeerTearDownAction +- +- IRQL = PASSIVE_LEVEL +- +- ========================================================================== +- */ +-void DlsStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- UCHAR i; +- +- StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_DLS_STATE, MAX_DLS_MSG, (STATE_MACHINE_FUNC)Drop, DLS_IDLE, DLS_MACHINE_BASE); +- +- // the first column +- StateMachineSetAction(Sm, DLS_IDLE, MT2_MLME_DLS_REQ, (STATE_MACHINE_FUNC)MlmeDlsReqAction); +- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_REQ, (STATE_MACHINE_FUNC)PeerDlsReqAction); +- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_RSP, (STATE_MACHINE_FUNC)PeerDlsRspAction); +- StateMachineSetAction(Sm, DLS_IDLE, MT2_MLME_DLS_TEAR_DOWN, (STATE_MACHINE_FUNC)MlmeDlsTearDownAction); +- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_TEAR_DOWN, (STATE_MACHINE_FUNC)PeerDlsTearDownAction); +- +- for (i=0; iStaCfg.DLSEntry[i].pAd = pAd; +- RTMPInitTimer(pAd, &pAd->StaCfg.DLSEntry[i].Timer, GET_TIMER_FUNCTION(DlsTimeoutAction), pAd, FALSE); +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeDlsReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- HEADER_802_11 DlsReqHdr; +- PRT_802_11_DLS pDLS = NULL; +- UCHAR Category = CATEGORY_DLS; +- UCHAR Action = ACTION_DLS_REQUEST; +- ULONG tmp; +- USHORT reason; +- ULONG Timeout; +- BOOLEAN TimerCancelled; +- +- if(!MlmeDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, &pDLS, &reason)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - MlmeDlsReqAction() \n")); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("DLS - MlmeDlsReqAction() allocate memory failed \n")); +- return; +- } +- +- ActHeaderInit(pAd, &DlsReqHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- +- // Build basic frame first +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DlsReqHdr, +- 1, &Category, +- 1, &Action, +- 6, &pDLS->MacAddr, +- 6, pAd->CurrentAddress, +- 2, &pAd->StaActive.CapabilityInfo, +- 2, &pDLS->TimeOut, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR HtLen; +- +-#ifdef RT_BIG_ENDIAN +- HT_CAPABILITY_IE HtCapabilityTmp; +-#endif +- +- // add HT Capability IE +- HtLen = sizeof(HT_CAPABILITY_IE); +-#ifndef RT_BIG_ENDIAN +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- END_OF_ARGS); +-#else +- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &HtCapabilityTmp, +- END_OF_ARGS); +-#endif +- FrameLen = FrameLen + tmp; +- } +-#endif // DOT11_N_SUPPORT // +- +- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled); +- Timeout = DLS_TIMEOUT; +- RTMPSetTimer(&pDLS->Timer, Timeout); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerDlsReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT StatusCode = MLME_SUCCESS; +- HEADER_802_11 DlsRspHdr; +- UCHAR Category = CATEGORY_DLS; +- UCHAR Action = ACTION_DLS_RESPONSE; +- ULONG tmp; +- USHORT CapabilityInfo; +- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN]; +- USHORT DLSTimeOut; +- SHORT i; +- ULONG Timeout; +- BOOLEAN TimerCancelled; +- PRT_802_11_DLS pDLS = NULL; +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR SupportedRatesLen; +- UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR HtCapabilityLen; +- HT_CAPABILITY_IE HtCapability; +- +- if (!PeerDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &CapabilityInfo, &DLSTimeOut, +- &SupportedRatesLen, &SupportedRates[0], &HtCapabilityLen, &HtCapability)) +- return; +- +- // supported rates array may not be sorted. sort it and find the maximum rate +- for (i = 0; i < SupportedRatesLen; i++) +- { +- if (MaxSupportedRateIn500Kbps < (SupportedRates[i] & 0x7f)) +- MaxSupportedRateIn500Kbps = SupportedRates[i] & 0x7f; +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() from %02x:%02x:%02x:%02x:%02x:%02x\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsReqAction() allocate memory failed \n")); +- return; +- } +- +- if (!INFRA_ON(pAd)) +- { +- StatusCode = MLME_REQUEST_DECLINED; +- } +- else if (!pAd->CommonCfg.bWmmCapable) +- { +- StatusCode = MLME_DEST_STA_IS_NOT_A_QSTA; +- } +- else if (!pAd->CommonCfg.bDLSCapable) +- { +- StatusCode = MLME_REQUEST_DECLINED; +- } +- else +- { +- // find table to update parameters +- for (i = (MAX_NUM_OF_DLS_ENTRY-1); i >= 0; i--) +- { +- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY; +- else +- { +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- } +- +- pAd->StaCfg.DLSEntry[i].Sequence = 0; +- pAd->StaCfg.DLSEntry[i].TimeOut = DLSTimeOut; +- pAd->StaCfg.DLSEntry[i].CountDownTimer = DLSTimeOut; +- if (HtCapabilityLen != 0) +- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE; +- else +- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE; +- pDLS = &pAd->StaCfg.DLSEntry[i]; +- break; +- } +- } +- +- // can not find in table, create a new one +- if (i < 0) +- { +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() can not find same entry \n")); +- for (i=(MAX_NUM_OF_DLS_ENTRY - 1); i >= MAX_NUM_OF_INIT_DLS_ENTRY; i--) +- { +- if (!pAd->StaCfg.DLSEntry[i].Valid) +- { +- MAC_TABLE_ENTRY *pEntry; +- UCHAR MaxSupportedRate = RATE_11; +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY; +- } +- else +- { +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- } +- +- pAd->StaCfg.DLSEntry[i].Sequence = 0; +- pAd->StaCfg.DLSEntry[i].Valid = TRUE; +- pAd->StaCfg.DLSEntry[i].TimeOut = DLSTimeOut; +- pAd->StaCfg.DLSEntry[i].CountDownTimer = DLSTimeOut; +- NdisMoveMemory(pAd->StaCfg.DLSEntry[i].MacAddr, SA, MAC_ADDR_LEN); +- if (HtCapabilityLen != 0) +- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE; +- else +- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE; +- pDLS = &pAd->StaCfg.DLSEntry[i]; +- pEntry = MacTableInsertDlsEntry(pAd, SA, i); +- +- switch (MaxSupportedRateIn500Kbps) +- { +- case 108: MaxSupportedRate = RATE_54; break; +- case 96: MaxSupportedRate = RATE_48; break; +- case 72: MaxSupportedRate = RATE_36; break; +- case 48: MaxSupportedRate = RATE_24; break; +- case 36: MaxSupportedRate = RATE_18; break; +- case 24: MaxSupportedRate = RATE_12; break; +- case 18: MaxSupportedRate = RATE_9; break; +- case 12: MaxSupportedRate = RATE_6; break; +- case 22: MaxSupportedRate = RATE_11; break; +- case 11: MaxSupportedRate = RATE_5_5; break; +- case 4: MaxSupportedRate = RATE_2; break; +- case 2: MaxSupportedRate = RATE_1; break; +- default: MaxSupportedRate = RATE_11; break; +- } +- +- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate); +- +- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->MinHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->HTPhyMode.field.MODE = MODE_CCK; +- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- } +- +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MinHTPhyMode.field.BW = BW_20; +- +-#ifdef DOT11_N_SUPPORT +- pEntry->HTCapability.MCSSet[0] = 0; +- pEntry->HTCapability.MCSSet[1] = 0; +- +- // If this Entry supports 802.11n, upgrade to HT rate. +- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR j, bitmask; //k,bitmask; +- CHAR ii; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DLS - PeerDlsReqAction() Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n", +- SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- +- if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pAd->MacTab.fAnyStationNonGF = TRUE; +- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; +- } +- +- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth)) +- { +- pEntry->MaxHTPhyMode.field.BW= BW_40; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40)); +- } +- else +- { +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20)); +- pAd->MacTab.fAnyStation20Only = TRUE; +- } +- +- // find max fixed rate +- for (ii=15; ii>=0; ii--) +- { +- j = ii/8; +- bitmask = (1<<(ii-(j*8))); +- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask)) +- { +- pEntry->MaxHTPhyMode.field.MCS = ii; +- break; +- } +- if (ii==0) +- break; +- } +- +- +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) +- { +- +- DBGPRINT(RT_DEBUG_OFF, ("@@@ pAd->CommonCfg.RegTransmitSetting.field.MCS = %d\n", +- pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) +- { +- // Fix MCS as HT Duplicated Mode +- pEntry->MaxHTPhyMode.field.BW = 1; +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pEntry->MaxHTPhyMode.field.STBC = 0; +- pEntry->MaxHTPhyMode.field.ShortGI = 0; +- pEntry->MaxHTPhyMode.field.MCS = 32; +- } +- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS) +- { +- // STA supports fixed MCS +- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- } +- } +- +- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); +- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity; +- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize; +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- +- if (HtCapability.HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); +- if (HtCapability.HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); +- if (HtCapability.HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); +- if (HtCapability.HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (HtCapability.ExtHtCapInfo.PlusHTC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); +- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); +- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); +- +- NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE)); +- } +-#endif // DOT11_N_SUPPORT // +- +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- pEntry->CurrTxRate = pEntry->MaxSupportedRate; +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- +- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex); +- pEntry->bAutoTxRateSwitch = TRUE; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->bAutoTxRateSwitch = FALSE; +- +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- pEntry->RateLen = SupportedRatesLen; +- +- break; +- } +- } +- } +- StatusCode = MLME_SUCCESS; +- +- // can not find in table, create a new one +- if (i < 0) +- { +- StatusCode = MLME_QOS_UNSPECIFY; +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsReqAction() DLSEntry table full(only can support %d DLS session) \n", MAX_NUM_OF_DLS_ENTRY - MAX_NUM_OF_INIT_DLS_ENTRY)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() use entry(%d) %02x:%02x:%02x:%02x:%02x:%02x\n", +- i, SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- } +- } +- +- ActHeaderInit(pAd, &DlsRspHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- +- // Build basic frame first +- if (StatusCode == MLME_SUCCESS) +- { +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DlsRspHdr, +- 1, &Category, +- 1, &Action, +- 2, &StatusCode, +- 6, SA, +- 6, pAd->CurrentAddress, +- 2, &pAd->StaActive.CapabilityInfo, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR HtLen; +- +-#ifdef RT_BIG_ENDIAN +- HT_CAPABILITY_IE HtCapabilityTmp; +-#endif +- +- // add HT Capability IE +- HtLen = sizeof(HT_CAPABILITY_IE); +-#ifndef RT_BIG_ENDIAN +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- END_OF_ARGS); +-#else +- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen); +- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo)); +- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo)); +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &HtCapabilityTmp, +- END_OF_ARGS); +-#endif +- FrameLen = FrameLen + tmp; +- } +-#endif // DOT11_N_SUPPORT // +- +- if (pDLS && (pDLS->Status != DLS_FINISH)) +- { +- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled); +- Timeout = DLS_TIMEOUT; +- RTMPSetTimer(&pDLS->Timer, Timeout); +- } +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DlsRspHdr, +- 1, &Category, +- 1, &Action, +- 2, &StatusCode, +- 6, SA, +- 6, pAd->CurrentAddress, +- END_OF_ARGS); +- } +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerDlsRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT CapabilityInfo; +- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN]; +- USHORT StatusCode; +- SHORT i; +- BOOLEAN TimerCancelled; +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR SupportedRatesLen; +- UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR HtCapabilityLen; +- HT_CAPABILITY_IE HtCapability; +- +- if (!pAd->CommonCfg.bDLSCapable) +- return; +- +- if (!INFRA_ON(pAd)) +- return; +- +- if (!PeerDlsRspSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &CapabilityInfo, &StatusCode, +- &SupportedRatesLen, &SupportedRates[0], &HtCapabilityLen, &HtCapability)) +- return; +- +- // supported rates array may not be sorted. sort it and find the maximum rate +- for (i=0; iStaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- if (StatusCode == MLME_SUCCESS) +- { +- MAC_TABLE_ENTRY *pEntry; +- UCHAR MaxSupportedRate = RATE_11; +- +- pEntry = MacTableInsertDlsEntry(pAd, SA, i); +- +- switch (MaxSupportedRateIn500Kbps) +- { +- case 108: MaxSupportedRate = RATE_54; break; +- case 96: MaxSupportedRate = RATE_48; break; +- case 72: MaxSupportedRate = RATE_36; break; +- case 48: MaxSupportedRate = RATE_24; break; +- case 36: MaxSupportedRate = RATE_18; break; +- case 24: MaxSupportedRate = RATE_12; break; +- case 18: MaxSupportedRate = RATE_9; break; +- case 12: MaxSupportedRate = RATE_6; break; +- case 22: MaxSupportedRate = RATE_11; break; +- case 11: MaxSupportedRate = RATE_5_5; break; +- case 4: MaxSupportedRate = RATE_2; break; +- case 2: MaxSupportedRate = RATE_1; break; +- default: MaxSupportedRate = RATE_11; break; +- } +- +- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate); +- +- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->MinHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->HTPhyMode.field.MODE = MODE_CCK; +- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- } +- +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MinHTPhyMode.field.BW = BW_20; +- +-#ifdef DOT11_N_SUPPORT +- pEntry->HTCapability.MCSSet[0] = 0; +- pEntry->HTCapability.MCSSet[1] = 0; +- +- // If this Entry supports 802.11n, upgrade to HT rate. +- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR j, bitmask; //k,bitmask; +- CHAR ii; +- +- DBGPRINT(RT_DEBUG_OFF, ("DLS - PeerDlsRspAction Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n", +- SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- +- if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pAd->MacTab.fAnyStationNonGF = TRUE; +- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; +- } +- +- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth)) +- { +- pEntry->MaxHTPhyMode.field.BW= BW_40; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40)); +- } +- else +- { +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20)); +- pAd->MacTab.fAnyStation20Only = TRUE; +- } +- +- // find max fixed rate +- for (ii=15; ii>=0; ii--) +- { +- j = ii/8; +- bitmask = (1<<(ii-(j*8))); +- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask)) +- { +- pEntry->MaxHTPhyMode.field.MCS = ii; +- break; +- } +- if (ii==0) +- break; +- } +- +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) +- { +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) +- { +- // Fix MCS as HT Duplicated Mode +- pEntry->MaxHTPhyMode.field.BW = 1; +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pEntry->MaxHTPhyMode.field.STBC = 0; +- pEntry->MaxHTPhyMode.field.ShortGI = 0; +- pEntry->MaxHTPhyMode.field.MCS = 32; +- } +- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS) +- { +- // STA supports fixed MCS +- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- } +- } +- +- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); +- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity; +- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize; +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- +- if (HtCapability.HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); +- if (HtCapability.HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); +- if (HtCapability.HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); +- if (HtCapability.HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (HtCapability.ExtHtCapInfo.PlusHTC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); +- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); +- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); +- +- NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE)); +- } +-#endif // DOT11_N_SUPPORT // +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- pEntry->CurrTxRate = pEntry->MaxSupportedRate; +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- +- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex); +- pEntry->bAutoTxRateSwitch = TRUE; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->bAutoTxRateSwitch = FALSE; +- +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- pEntry->RateLen = SupportedRatesLen; +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- // If support WPA or WPA2, start STAKey hand shake, +- // If failed hand shake, just tear down peer DLS +- if (RTMPSendSTAKeyRequest(pAd, pAd->StaCfg.DLSEntry[i].MacAddr) != NDIS_STATUS_SUCCESS) +- { +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT; +- +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed when call RTMPSendSTAKeyRequest \n")); +- } +- else +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY; +- DBGPRINT(RT_DEBUG_TRACE,("DLS - waiting for STAKey handshake procedure\n")); +- } +- } +- else +- { +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x Succeed with WEP or no security\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- } +- +- //initialize seq no for DLS frames. +- pAd->StaCfg.DLSEntry[i].Sequence = 0; +- if (HtCapabilityLen != 0) +- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE; +- else +- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE; +- } +- else +- { +- // DLS setup procedure failed. +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed with StatusCode=%d \n", StatusCode)); +- } +- } +- } +- +- if (i >= MAX_NUM_OF_INIT_DLS_ENTRY) +- { +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() update timeout value \n")); +- for (i=(MAX_NUM_OF_DLS_ENTRY-1); i>=MAX_NUM_OF_INIT_DLS_ENTRY; i--) +- { +- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- if (StatusCode == MLME_SUCCESS) +- { +- MAC_TABLE_ENTRY *pEntry; +- UCHAR MaxSupportedRate = RATE_11; +- +- pEntry = MacTableInsertDlsEntry(pAd, SA, i); +- +- switch (MaxSupportedRateIn500Kbps) +- { +- case 108: MaxSupportedRate = RATE_54; break; +- case 96: MaxSupportedRate = RATE_48; break; +- case 72: MaxSupportedRate = RATE_36; break; +- case 48: MaxSupportedRate = RATE_24; break; +- case 36: MaxSupportedRate = RATE_18; break; +- case 24: MaxSupportedRate = RATE_12; break; +- case 18: MaxSupportedRate = RATE_9; break; +- case 12: MaxSupportedRate = RATE_6; break; +- case 22: MaxSupportedRate = RATE_11; break; +- case 11: MaxSupportedRate = RATE_5_5; break; +- case 4: MaxSupportedRate = RATE_2; break; +- case 2: MaxSupportedRate = RATE_1; break; +- default: MaxSupportedRate = RATE_11; break; +- } +- +- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate); +- +- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->MinHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- pEntry->HTPhyMode.field.MODE = MODE_CCK; +- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; +- } +- +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MinHTPhyMode.field.BW = BW_20; +- +-#ifdef DOT11_N_SUPPORT +- pEntry->HTCapability.MCSSet[0] = 0; +- pEntry->HTCapability.MCSSet[1] = 0; +- +- // If this Entry supports 802.11n, upgrade to HT rate. +- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR j, bitmask; //k,bitmask; +- CHAR ii; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DLS - PeerDlsRspAction Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n", +- SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- +- if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- else +- { +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pAd->MacTab.fAnyStationNonGF = TRUE; +- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; +- } +- +- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth)) +- { +- pEntry->MaxHTPhyMode.field.BW= BW_40; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40)); +- } +- else +- { +- pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20)); +- pAd->MacTab.fAnyStation20Only = TRUE; +- } +- +- // find max fixed rate +- for (ii=15; ii>=0; ii--) +- { +- j = ii/8; +- bitmask = (1<<(ii-(j*8))); +- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask)) +- { +- pEntry->MaxHTPhyMode.field.MCS = ii; +- break; +- } +- if (ii==0) +- break; +- } +- +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) +- { +- DBGPRINT(RT_DEBUG_OFF, ("@@@ pAd->CommonCfg.RegTransmitSetting.field.MCS = %d\n", +- pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) +- { +- // Fix MCS as HT Duplicated Mode +- pEntry->MaxHTPhyMode.field.BW = 1; +- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; +- pEntry->MaxHTPhyMode.field.STBC = 0; +- pEntry->MaxHTPhyMode.field.ShortGI = 0; +- pEntry->MaxHTPhyMode.field.MCS = 32; +- } +- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS) +- { +- // STA supports fixed MCS +- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- } +- } +- +- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); +- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity; +- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize; +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- +- if (HtCapability.HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); +- if (HtCapability.HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); +- if (HtCapability.HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); +- if (HtCapability.HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (HtCapability.ExtHtCapInfo.PlusHTC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); +- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); +- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); +- +- NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE)); +- } +-#endif // DOT11_N_SUPPORT // +- +- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; +- pEntry->CurrTxRate = pEntry->MaxSupportedRate; +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- +- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; +- +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex); +- pEntry->bAutoTxRateSwitch = TRUE; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->bAutoTxRateSwitch = FALSE; +- +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- pEntry->RateLen = SupportedRatesLen; +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- // If support WPA or WPA2, start STAKey hand shake, +- // If failed hand shake, just tear down peer DLS +- if (RTMPSendSTAKeyRequest(pAd, pAd->StaCfg.DLSEntry[i].MacAddr) != NDIS_STATUS_SUCCESS) +- { +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT; +- +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed when call RTMPSendSTAKeyRequest \n")); +- } +- else +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY; +- DBGPRINT(RT_DEBUG_TRACE,("DLS - waiting for STAKey handshake procedure\n")); +- } +- } +- else +- { +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x Succeed with WEP or no security\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5])); +- } +- pAd->StaCfg.DLSEntry[i].Sequence = 0; +- if (HtCapabilityLen != 0) +- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE; +- else +- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE; +- } +- else +- { +- // DLS setup procedure failed. +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed with StatusCode=%d \n", StatusCode)); +- } +- } +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID MlmeDlsTearDownAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- UCHAR Category = CATEGORY_DLS; +- UCHAR Action = ACTION_DLS_TEARDOWN; +- USHORT ReasonCode = REASON_QOS_UNSPECIFY; +- HEADER_802_11 DlsTearDownHdr; +- PRT_802_11_DLS pDLS; +- BOOLEAN TimerCancelled; +- UCHAR i; +- +- if(!MlmeDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, &pDLS, &ReasonCode)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - MlmeDlsTearDownAction() with ReasonCode=%d \n", ReasonCode)); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("DLS - MlmeDlsTearDownAction() allocate memory failed \n")); +- return; +- } +- +- ActHeaderInit(pAd, &DlsTearDownHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- +- // Build basic frame first +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DlsTearDownHdr, +- 1, &Category, +- 1, &Action, +- 6, &pDLS->MacAddr, +- 6, pAd->CurrentAddress, +- 2, &ReasonCode, +- END_OF_ARGS); +- +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled); +- +- // Remove key in local dls table entry +- for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++) +- { +- if (MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- // clear peer dls table entry +- for (i = MAX_NUM_OF_INIT_DLS_ENTRY; i < MAX_NUM_OF_DLS_ENTRY; i++) +- { +- if (MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerDlsTearDownAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN]; +- USHORT ReasonCode; +- UINT i; +- BOOLEAN TimerCancelled; +- +- if (!pAd->CommonCfg.bDLSCapable) +- return; +- +- if (!INFRA_ON(pAd)) +- return; +- +- if (!PeerDlsTearDownSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &ReasonCode)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsTearDownAction() from %02x:%02x:%02x:%02x:%02x:%02x with ReasonCode=%d\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], ReasonCode)); +- +- // clear local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- //AsicDelWcidTab(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID); +- //AsicRemovePairwiseKeyEntry(pAd, BSS0, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID); +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- // clear peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- //AsicDelWcidTab(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID); +- //AsicRemovePairwiseKeyEntry(pAd, BSS0, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID); +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID RTMPCheckDLSTimeOut( +- IN PRTMP_ADAPTER pAd) +-{ +- ULONG i; +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- USHORT reason = REASON_QOS_UNSPECIFY; +- +- if (! pAd->CommonCfg.bDLSCapable) +- return; +- +- if (! INFRA_ON(pAd)) +- return; +- +- // If timeout value is equaled to zero, it means always not be timeout. +- +- // update local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid) && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- && (pAd->StaCfg.DLSEntry[i].TimeOut != 0)) +- { +- pAd->StaCfg.DLSEntry[i].CountDownTimer --; +- +- if (pAd->StaCfg.DLSEntry[i].CountDownTimer == 0) +- { +- reason = REASON_QOS_REQUEST_TIMEOUT; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- } +- } +- } +- +- // update peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid) && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- && (pAd->StaCfg.DLSEntry[i].TimeOut != 0)) +- { +- pAd->StaCfg.DLSEntry[i].CountDownTimer --; +- +- if (pAd->StaCfg.DLSEntry[i].CountDownTimer == 0) +- { +- reason = REASON_QOS_REQUEST_TIMEOUT; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- } +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN RTMPRcvFrameDLSCheck( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN ULONG Len, +- IN PRT28XX_RXD_STRUC pRxD) +-{ +- ULONG i; +- BOOLEAN bFindEntry = FALSE; +- BOOLEAN bSTAKeyFrame = FALSE; +- PEAPOL_PACKET pEap; +- PUCHAR pProto, pAddr = NULL; +- PUCHAR pSTAKey = NULL; +- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; +- UCHAR Mic[16], OldMic[16]; +- UCHAR digest[80]; +- UCHAR DlsPTK[80]; +- UCHAR temp[64]; +- BOOLEAN TimerCancelled; +- CIPHER_KEY PairwiseKey; +- +- +- if (! pAd->CommonCfg.bDLSCapable) +- return bSTAKeyFrame; +- +- if (! INFRA_ON(pAd)) +- return bSTAKeyFrame; +- +- if (Len < LENGTH_802_11 + 6 + 2) /* LENGTH_802_11 + LLC + EAPOL protocol type */ +- return bSTAKeyFrame; +- +- pProto = (PUCHAR)pHeader + LENGTH_802_11; +- +- if ((pHeader->FC.SubType & 0x08)) +- pProto += 2; /* QOS Control field */ +- +- /* Skip 4-bytes for HTC */ +- if (pHeader->FC.Order && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED))) +- { +- pProto += 4; +- } +- +- /* L2PAD bit on will pad 2 bytes at LLC */ +- if (pRxD->L2PAD) +- { +- pProto += 2; +- } +- +- pProto += 6; /* 0xAA 0xAA 0xAA 0x00 0x00 0x00 */ +- +- if ((!(pHeader->FC.SubType & 0x08)) && (!RTMPEqualMemory(EAPOL, pProto, 2))) +- return bSTAKeyFrame; +- +- pAddr = pHeader->Addr2; +- +- if (RTMPEqualMemory(EAPOL, pProto, 2) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) +- { +- pEap = (PEAPOL_PACKET) (pProto + 2); +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff Len=%ld, DataLen=%d, KeyMic=%d, Install=%d, KeyAck=%d, Secure=%d, EKD_DL=%d, Error=%d, Request=%d\n", Len, +- (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE + 16), +- pEap->KeyDesc.KeyInfo.KeyMic, +- pEap->KeyDesc.KeyInfo.Install, +- pEap->KeyDesc.KeyInfo.KeyAck, +- pEap->KeyDesc.KeyInfo.Secure, +- pEap->KeyDesc.KeyInfo.EKD_DL, +- pEap->KeyDesc.KeyInfo.Error, +- pEap->KeyDesc.KeyInfo.Request)); +- +- if ((Len >= (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE + 16)) && pEap->KeyDesc.KeyInfo.KeyMic +- && pEap->KeyDesc.KeyInfo.Install && pEap->KeyDesc.KeyInfo.KeyAck && pEap->KeyDesc.KeyInfo.Secure +- && pEap->KeyDesc.KeyInfo.EKD_DL && !pEap->KeyDesc.KeyInfo.Error && !pEap->KeyDesc.KeyInfo.Request) +- { +- // First validate replay counter, only accept message with larger replay counter +- // Let equal pass, some AP start with all zero replay counter +- NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); +- if ((RTMPCompareMemory(pEap->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) && +- (RTMPCompareMemory(pEap->KeyDesc.ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) +- return bSTAKeyFrame; +- +- //RTMPMoveMemory(pAd->StaCfg.ReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- RTMPMoveMemory(pAd->StaCfg.DlsReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff replay counter (%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x) Len=%ld, KeyDataLen=%d\n", +- pAd->StaCfg.ReplayCounter[0], pAd->StaCfg.ReplayCounter[1], pAd->StaCfg.ReplayCounter[2], +- pAd->StaCfg.ReplayCounter[3], pAd->StaCfg.ReplayCounter[4], pAd->StaCfg.ReplayCounter[5], +- pAd->StaCfg.ReplayCounter[6], pAd->StaCfg.ReplayCounter[7], Len, pEap->KeyDesc.KeyData[1])); +- +- // put these code segment to get the replay counter +- if (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) +- return bSTAKeyFrame; +- +- // Check MIC value +- // Save the MIC and replace with zero +- // use proprietary PTK +- NdisZeroMemory(temp, 64); +- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32); +- WpaDerivePTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK); +- +- NdisMoveMemory(OldMic, pEap->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- NdisZeroMemory(pEap->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- HMAC_SHA1(DlsPTK, LEN_EAP_MICK, (PUCHAR) pEap, pEap->Body_Len[1] + 4, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- HMAC_MD5(DlsPTK, LEN_EAP_MICK, (PUCHAR) pEap, pEap->Body_Len[1] + 4, Mic, MD5_DIGEST_SIZE); +- } +- +- if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in Msg1 of STAKey handshake! \n")); +- return bSTAKeyFrame; +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("MIC VALID in Msg1 of STAKey handshake! \n")); +- if ((pEap->KeyDesc.KeyData[0] == 0xDD) && (pEap->KeyDesc.KeyData[2] == 0x00) && (pEap->KeyDesc.KeyData[3] == 0x0C) +- && (pEap->KeyDesc.KeyData[4] == 0x43) && (pEap->KeyDesc.KeyData[5] == 0x02)) +- { +- pAddr = pEap->KeyDesc.KeyData + 8; // Tpe(1), Len(1), OUI(3), DataType(1), Reserved(2) +- pSTAKey = pEap->KeyDesc.KeyData + 14; // Tpe(1), Len(1), OUI(3), DataType(1), Reserved(2), STAKey_Mac_Addr(6) +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 from %02x:%02x:%02x:%02x:%02x:%02x Len=%ld, KeyDataLen=%d\n", +- pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], Len, pEap->KeyDesc.KeyData[1])); +- +- bSTAKeyFrame = TRUE; +- } +- +- } +- else if (Len >= (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE)) +- { +- RTMPMoveMemory(pAd->StaCfg.DlsReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff replay counter 2(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x) Len=%ld, KeyDataLen=%d\n", +- pAd->StaCfg.ReplayCounter[0], pAd->StaCfg.ReplayCounter[1], pAd->StaCfg.ReplayCounter[2], +- pAd->StaCfg.ReplayCounter[3], pAd->StaCfg.ReplayCounter[4], pAd->StaCfg.ReplayCounter[5], +- pAd->StaCfg.ReplayCounter[6], pAd->StaCfg.ReplayCounter[7], Len, pEap->KeyDesc.KeyData[1])); +- } +- } +- +- // If timeout value is equaled to zero, it means always not be timeout. +- // update local dls table entry +- for (i= 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++) +- { +- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(pAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- if (bSTAKeyFrame) +- { +- PMAC_TABLE_ENTRY pEntry; +- +- // STAKey frame, add pairwise key table +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- +- PairwiseKey.KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(PairwiseKey.Key, &pSTAKey[0], LEN_TKIP_EK); +- NdisMoveMemory(PairwiseKey.TxMic, &pSTAKey[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(PairwiseKey.RxMic, &pSTAKey[24], LEN_TKIP_TXMICK); +- +- //PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg; +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- PairwiseKey.CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- PairwiseKey.CipherAlg = CIPHER_AES; +- +- pEntry = DlsEntryTableLookup(pAd, pAd->StaCfg.DLSEntry[i].MacAddr, TRUE); +- //AsicAddKeyEntry(pAd, (USHORT)(i + 2), BSS0, 0, &PairwiseKey, TRUE, TRUE); // reserve 0 for multicast, 1 for unicast +- //AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr); +- // Add Pair-wise key to Asic +-#ifdef RTMP_MAC_PCI +- AsicAddPairwiseKeyEntry(pAd, +- pAd->StaCfg.DLSEntry[i].MacAddr, +- (UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, +- &PairwiseKey); +- +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- PairwiseKey.CipherAlg, +- pEntry); +- +-#endif // RTMP_MAC_PCI // +- NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY)); +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Peer STA MAC Address STAKey) \n")); +- +- RTMPSendSTAKeyHandShake(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Finish STAKey handshake procedure (Initiator side)\n")); +- } +- else +- { +- // Data frame, update timeout value +- if (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- { +- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut; +- //AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr); +- } +- } +- +- bFindEntry = TRUE; +- } +- } +- +- // update peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(pAddr, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- if (bSTAKeyFrame) +- { +- PMAC_TABLE_ENTRY pEntry = NULL; +- +- // STAKey frame, add pairwise key table, and send STAkey Msg-2 +- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH; +- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled); +- +- PairwiseKey.KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(PairwiseKey.Key, &pSTAKey[0], LEN_TKIP_EK); +- NdisMoveMemory(PairwiseKey.TxMic, &pSTAKey[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(PairwiseKey.RxMic, &pSTAKey[24], LEN_TKIP_TXMICK); +- +- //PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg; +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- PairwiseKey.CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- PairwiseKey.CipherAlg = CIPHER_AES; +- +- pEntry = DlsEntryTableLookup(pAd, pAd->StaCfg.DLSEntry[i].MacAddr, TRUE); +- //AsicAddKeyEntry(pAd, (USHORT)(i + 2), BSS0, 0, &PairwiseKey, TRUE, TRUE); // reserve 0 for multicast, 1 for unicast +- //AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr); +- // Add Pair-wise key to Asic +-#ifdef RTMP_MAC_PCI +- AsicAddPairwiseKeyEntry(pAd, +- pAd->StaCfg.DLSEntry[i].MacAddr, +- (UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, +- &PairwiseKey); +- +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- PairwiseKey.CipherAlg, +- pEntry); +-#endif // RTMP_MAC_PCI // +- NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY)); +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Initiator STA MAC Address STAKey)\n")); +- +- // If support WPA or WPA2, start STAKey hand shake, +- // If failed hand shake, just tear down peer DLS +- if (RTMPSendSTAKeyHandShake(pAd, pAddr) != NDIS_STATUS_SUCCESS) +- { +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT; +- +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("DLS - Finish STAKey handshake procedure (Peer side)\n")); +- } +- } +- else +- { +- // Data frame, update timeout value +- if (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- { +- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut; +- } +- } +- +- bFindEntry = TRUE; +- } +- } +- +- +- return bSTAKeyFrame; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Check if the frame can be sent through DLS direct link interface +- +- Arguments: +- pAd Pointer to adapter +- +- Return Value: +- DLS entry index +- +- Note: +- +- ======================================================================== +-*/ +-INT RTMPCheckDLSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA) +-{ +- INT rval = -1; +- INT i; +- +- if (!pAd->CommonCfg.bDLSCapable) +- return rval; +- +- if (!INFRA_ON(pAd)) +- return rval; +- +- do{ +- // check local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && +- MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- rval = i; +- break; +- } +- } +- +- // check peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && +- MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- rval = i; +- break; +- } +- } +- } while (FALSE); +- +- return rval; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID RTMPSendDLSTearDownFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA) +-{ +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- HEADER_802_11 DlsTearDownHdr; +- ULONG FrameLen = 0; +- USHORT Reason = REASON_QOS_QSTA_LEAVING_QBSS; +- UCHAR Category = CATEGORY_DLS; +- UCHAR Action = ACTION_DLS_TEARDOWN; +- UCHAR i = 0; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Send DLS TearDown Frame \n")); +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("ASSOC - RTMPSendDLSTearDownFrame() allocate memory failed \n")); +- return; +- } +- +- ActHeaderInit(pAd, &DlsTearDownHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DlsTearDownHdr, +- 1, &Category, +- 1, &Action, +- 6, pDA, +- 6, pAd->CurrentAddress, +- 2, &Reason, +- END_OF_ARGS); +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- // Remove key in local dls table entry +- for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++) +- { +- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- && MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- // Remove key in peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) +- && MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr)) +- { +- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Send DLS TearDown Frame and remove key in (i=%d) \n", i)); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-NDIS_STATUS RTMPSendSTAKeyRequest( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA) +-{ +- UCHAR Header802_3[14]; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- UCHAR digest[80]; +- PUCHAR pOutBuffer = NULL; +- PNDIS_PACKET pNdisPacket; +- UCHAR temp[64]; +- UCHAR DlsPTK[80]; +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - RTMPSendSTAKeyRequest() to %02x:%02x:%02x:%02x:%02x:%02x\n", pDA[0], pDA[1], pDA[2], pDA[3], pDA[4], pDA[5])); +- +- pAd->Sequence ++; +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero message body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + 6 + MAC_ADDR_LEN; // data field contain KDE andPeer MAC address +- +- // STAKey Message is as EAPOL-Key(1,1,0,0,G/0,0,0, MIC, 0,Peer MAC KDE) +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- Packet.KeyDesc.Type = WPA2_KEY_DESC; +- } +- +- // Key descriptor version +- Packet.KeyDesc.KeyInfo.KeyDescVer = +- (((pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) || (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP)); +- +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- Packet.KeyDesc.KeyInfo.Secure = 1; +- Packet.KeyDesc.KeyInfo.Request = 1; +- +- Packet.KeyDesc.KeyDataLen[1] = 12; +- +- // use our own OUI to distinguish proprietary with standard. +- Packet.KeyDesc.KeyData[0] = 0xDD; +- Packet.KeyDesc.KeyData[1] = 0x0A; +- Packet.KeyDesc.KeyData[2] = 0x00; +- Packet.KeyDesc.KeyData[3] = 0x0C; +- Packet.KeyDesc.KeyData[4] = 0x43; +- Packet.KeyDesc.KeyData[5] = 0x03; +- NdisMoveMemory(&Packet.KeyDesc.KeyData[6], pDA, MAC_ADDR_LEN); +- +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.DlsReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Allocate buffer for transmitting message +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- return NStatus; +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // use proprietary PTK +- NdisZeroMemory(temp, 64); +- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32); +- WpaDerivePTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK); +- +- // calculate MIC +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- NdisZeroMemory(digest, sizeof(digest)); +- HMAC_SHA1(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(Packet.KeyDesc.KeyMic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- NdisZeroMemory(Mic, sizeof(Mic)); +- HMAC_MD5(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE); +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- } +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(Header802_3), Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- NStatus = RTMPAllocateNdisPacket(pAd, &pNdisPacket, NULL, 0, pOutBuffer, FrameLen); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- RTMP_SET_PACKET_WCID(pNdisPacket, BSSID_WCID); +- STASendPacket(pAd, pNdisPacket); +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- +- MlmeFreeMemory(pAd, pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSendSTAKeyRequest- Send STAKey request (NStatus=%x, FrameLen=%ld)\n", NStatus, FrameLen)); +- +- return NStatus; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-NDIS_STATUS RTMPSendSTAKeyHandShake( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA) +-{ +- UCHAR Header802_3[14]; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- UCHAR digest[80]; +- PUCHAR pOutBuffer = NULL; +- PNDIS_PACKET pNdisPacket; +- UCHAR temp[64]; +- UCHAR DlsPTK[80]; // Due to dirver can not get PTK, use proprietary PTK +- +- DBGPRINT(RT_DEBUG_TRACE,("DLS - RTMPSendSTAKeyHandShake() to %02x:%02x:%02x:%02x:%02x:%02x\n", pDA[0], pDA[1], pDA[2], pDA[3], pDA[4], pDA[5])); +- +- pAd->Sequence ++; +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- // Zero message body +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + 6 + MAC_ADDR_LEN; // data field contain KDE and Peer MAC address +- +- // STAKey Message is as EAPOL-Key(1,1,0,0,G/0,0,0, MIC, 0,Peer MAC KDE) +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- Packet.KeyDesc.Type = WPA2_KEY_DESC; +- } +- +- // Key descriptor version +- Packet.KeyDesc.KeyInfo.KeyDescVer = +- (((pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) || (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP)); +- +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- Packet.KeyDesc.KeyInfo.Secure = 1; +- +- Packet.KeyDesc.KeyDataLen[1] = 12; +- +- // use our own OUI to distinguish proprietary with standard. +- Packet.KeyDesc.KeyData[0] = 0xDD; +- Packet.KeyDesc.KeyData[1] = 0x0A; +- Packet.KeyDesc.KeyData[2] = 0x00; +- Packet.KeyDesc.KeyData[3] = 0x0C; +- Packet.KeyDesc.KeyData[4] = 0x43; +- Packet.KeyDesc.KeyData[5] = 0x03; +- NdisMoveMemory(&Packet.KeyDesc.KeyData[6], pDA, MAC_ADDR_LEN); +- +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.DlsReplayCounter, LEN_KEY_DESC_REPLAY); +- +- // Allocate buffer for transmitting message +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- return NStatus; +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- // use proprietary PTK +- NdisZeroMemory(temp, 64); +- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32); +- WpaDerivePTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK); +- +- // calculate MIC +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- // AES +- NdisZeroMemory(digest, sizeof(digest)); +- HMAC_SHA1(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(Packet.KeyDesc.KeyMic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- NdisZeroMemory(Mic, sizeof(Mic)); +- HMAC_MD5(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE); +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- } +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(Header802_3), Header802_3, +- Packet.Body_Len[1] + 4, &Packet, +- END_OF_ARGS); +- +- NStatus = RTMPAllocateNdisPacket(pAd, &pNdisPacket, NULL, 0, pOutBuffer, FrameLen); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- RTMP_SET_PACKET_WCID(pNdisPacket, BSSID_WCID); +- STASendPacket(pAd, pNdisPacket); +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- +- MlmeFreeMemory(pAd, pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSendSTAKeyHandShake- Send STAKey Message-2 (NStatus=%x, FrameLen=%ld)\n", NStatus, FrameLen)); +- +- return NStatus; +-} +- +-VOID DlsTimeoutAction( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- MLME_DLS_REQ_STRUCT MlmeDlsReq; +- USHORT reason; +- PRT_802_11_DLS pDLS = (PRT_802_11_DLS)FunctionContext; +- PRTMP_ADAPTER pAd = pDLS->pAd; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DlsTimeout - Tear down DLS links (%02x:%02x:%02x:%02x:%02x:%02x)\n", +- pDLS->MacAddr[0], pDLS->MacAddr[1], pDLS->MacAddr[2], pDLS->MacAddr[3], pDLS->MacAddr[4], pDLS->MacAddr[5])); +- +- if ((pDLS) && (pDLS->Valid)) +- { +- reason = REASON_QOS_REQUEST_TIMEOUT; +- pDLS->Valid = FALSE; +- pDLS->Status = DLS_NONE; +- DlsParmFill(pAd, &MlmeDlsReq, pDLS, reason); +- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq); +- RTMP_MLME_HANDLER(pAd); +- } +-} +- +-/* +-================================================================ +-Description : because DLS and CLI share the same WCID table in ASIC. +-Mesh entry also insert to pAd->MacTab.content[]. Such is marked as ValidAsDls = TRUE. +-Also fills the pairwise key. +-Because front MAX_AID_BA entries have direct mapping to BAEntry, which is only used as CLI. So we insert Dls +-from index MAX_AID_BA. +-================================================================ +-*/ +-MAC_TABLE_ENTRY *MacTableInsertDlsEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UINT DlsEntryIdx) +-{ +- PMAC_TABLE_ENTRY pEntry = NULL; +- +- DBGPRINT(RT_DEBUG_TRACE, ("====> MacTableInsertDlsEntry\n")); +- // if FULL, return +- if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) +- return NULL; +- +- do +- { +- if((pEntry = DlsEntryTableLookup(pAd, pAddr, TRUE)) != NULL) +- break; +- +- // allocate one MAC entry +- pEntry = MacTableInsertEntry(pAd, pAddr, DlsEntryIdx + MIN_NET_DEVICE_FOR_DLS, TRUE); +- if (pEntry) +- { +- pAd->StaCfg.DLSEntry[DlsEntryIdx].MacTabMatchWCID = pEntry->Aid; +- pEntry->MatchDlsEntryIdx = DlsEntryIdx; +- pEntry->AuthMode = pAd->StaCfg.AuthMode; +- pEntry->WepStatus = pAd->StaCfg.WepStatus; +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableInsertDlsEntry - allocate entry #%d, Total= %d\n",pEntry->Aid, pAd->MacTab.Size)); +- +- // If legacy WEP is used, set pair-wise cipherAlg into WCID attribute table for this entry +- if ((pEntry->ValidAsDls) && (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)) +- { +- UCHAR KeyIdx = 0; +- UCHAR CipherAlg = 0; +- +- KeyIdx = pAd->StaCfg.DefaultKeyId; +- +- CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; +- +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- pEntry); +- } +- +- break; +- } +- } while(FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==== MacTableInsertDlsEntry\n")); +- +- return pEntry; +-} +- +- +-/* +- ========================================================================== +- Description: +- Delete all Mesh Entry in pAd->MacTab +- ========================================================================== +- */ +-BOOLEAN MacTableDeleteDlsEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr) +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("====> MacTableDeleteDlsEntry\n")); +- +- if (!VALID_WCID(wcid)) +- return FALSE; +- +- MacTableDeleteEntry(pAd, wcid, pAddr); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==== MacTableDeleteDlsEntry\n")); +- +- return TRUE; +-} +- +-MAC_TABLE_ENTRY *DlsEntryTableLookup( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount) +-{ +- ULONG HashIdx; +- MAC_TABLE_ENTRY *pEntry = NULL; +- +- RTMP_SEM_LOCK(&pAd->MacTabLock); +- HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- pEntry = pAd->MacTab.Hash[HashIdx]; +- +- while (pEntry) +- { +- if ((pEntry->ValidAsDls == TRUE) +- && MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { +- if(bResetIdelCount) +- pEntry->NoDataIdleCount = 0; +- break; +- } +- else +- pEntry = pEntry->pNext; +- } +- +- RTMP_SEM_UNLOCK(&pAd->MacTabLock); +- return pEntry; +-} +- +-MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR wcid, +- IN PUCHAR pAddr, +- IN BOOLEAN bResetIdelCount) +-{ +- ULONG DLsIndex; +- PMAC_TABLE_ENTRY pCurEntry = NULL; +- PMAC_TABLE_ENTRY pEntry = NULL; +- +- if (!VALID_WCID(wcid)) +- return NULL; +- +- RTMP_SEM_LOCK(&pAd->MacTabLock); +- +- do +- { +- pCurEntry = &pAd->MacTab.Content[wcid]; +- +- DLsIndex = 0xff; +- if ((pCurEntry) && (pCurEntry->ValidAsDls== TRUE)) +- { +- DLsIndex = pCurEntry->MatchDlsEntryIdx; +- } +- +- if (DLsIndex == 0xff) +- break; +- +- if (MAC_ADDR_EQUAL(pCurEntry->Addr, pAddr)) +- { +- if(bResetIdelCount) +- pCurEntry->NoDataIdleCount = 0; +- pEntry = pCurEntry; +- break; +- } +- } while(FALSE); +- +- RTMP_SEM_UNLOCK(&pAd->MacTabLock); +- +- return pEntry; +-} +- +-INT Set_DlsEntryInfo_Display_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) +-{ +- INT i; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-8s\n", "MAC", "TIMEOUT\n")); +- for (i=0; iStaCfg.DLSEntry[i].Valid) && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[pAd->StaCfg.DLSEntry[i].MacTabMatchWCID]; +- +- DBGPRINT(RT_DEBUG_OFF, ("%02x:%02x:%02x:%02x:%02x:%02x ", +- pAd->StaCfg.DLSEntry[i].MacAddr[0], pAd->StaCfg.DLSEntry[i].MacAddr[1], pAd->StaCfg.DLSEntry[i].MacAddr[2], +- pAd->StaCfg.DLSEntry[i].MacAddr[3], pAd->StaCfg.DLSEntry[i].MacAddr[4], pAd->StaCfg.DLSEntry[i].MacAddr[5])); +- DBGPRINT(RT_DEBUG_OFF, ("%-8d\n", pAd->StaCfg.DLSEntry[i].TimeOut)); +- +- DBGPRINT(RT_DEBUG_OFF, ("\n")); +- DBGPRINT(RT_DEBUG_OFF, ("\n%-19s%-4s%-4s%-4s%-4s%-7s%-7s%-7s","MAC", "AID", "BSS", "PSM", "WMM", "RSSI0", "RSSI1", "RSSI2")); +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_OFF, ("%-8s%-10s%-6s%-6s%-6s%-6s", "MIMOPS", "PhMd", "BW", "MCS", "SGI", "STBC")); +-#endif // DOT11_N_SUPPORT // +- DBGPRINT(RT_DEBUG_OFF, ("\n%02X:%02X:%02X:%02X:%02X:%02X ", +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); +- DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->Aid)); +- DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->apidx)); +- DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)pEntry->PsMode)); +- DBGPRINT(RT_DEBUG_OFF, ("%-4d", (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE))); +- DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi0)); +- DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi1)); +- DBGPRINT(RT_DEBUG_OFF, ("%-7d", pEntry->RssiSample.AvgRssi2)); +-#ifdef DOT11_N_SUPPORT +- DBGPRINT(RT_DEBUG_OFF, ("%-8d", (int)pEntry->MmpsMode)); +- DBGPRINT(RT_DEBUG_OFF, ("%-10s", GetPhyMode(pEntry->HTPhyMode.field.MODE))); +- DBGPRINT(RT_DEBUG_OFF, ("%-6s", GetBW(pEntry->HTPhyMode.field.BW))); +- DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.MCS)); +- DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.ShortGI)); +- DBGPRINT(RT_DEBUG_OFF, ("%-6d", pEntry->HTPhyMode.field.STBC)); +-#endif // DOT11_N_SUPPORT // +- DBGPRINT(RT_DEBUG_OFF, ("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, +- (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0)); +- DBGPRINT(RT_DEBUG_OFF, ("\n")); +- +- } +- } +- +- return TRUE; +-} +- +-INT Set_DlsAddEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[MAC_ADDR_LEN]; +- USHORT Timeout; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- RT_802_11_DLS Dls; +- +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and timeout value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- Timeout = (USHORT) simple_strtol((token+1), 0, 10); +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%d", mac[0], mac[1], +- mac[2], mac[3], mac[4], mac[5], (int)Timeout)); +- +- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS)); +- Dls.TimeOut = Timeout; +- COPY_MAC_ADDR(Dls.MacAddr, mac); +- Dls.Valid = 1; +- +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- RT_OID_802_11_SET_DLS_PARAM, +- sizeof(RT_802_11_DLS), +- &Dls); +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_DlsTearDownEntry_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR macAddr[MAC_ADDR_LEN]; +- PSTRING value; +- INT i; +- RT_802_11_DLS Dls; +- +- if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 +- return FALSE; +- +- for (i=0, value = rstrtok(arg,":"); value; value = rstrtok(NULL,":")) +- { +- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) +- return FALSE; //Invalid +- +- AtoH(value, &macAddr[i++], 2); +- } +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], +- macAddr[2], macAddr[3], macAddr[4], macAddr[5])); +- +- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS)); +- COPY_MAC_ADDR(Dls.MacAddr, macAddr); +- Dls.Valid = 0; +- +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- RT_OID_802_11_SET_DLS_PARAM, +- sizeof(RT_802_11_DLS), +- &Dls); +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/sta/rtmp_ckipmic.c b/drivers/staging/rt3090/sta/rtmp_ckipmic.c +deleted file mode 100644 +index 5f6dbd7..0000000 +--- a/drivers/staging/rt3090/sta/rtmp_ckipmic.c ++++ /dev/null +@@ -1,579 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_ckipmic.c +- +- Abstract: +- Data path subroutines +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +-#include "../rtmp_ckipmic.h" +- +- +-#define MIC_ACCUM(v) pContext->accum += (ULONGLONG)v * RTMPMicGetCoefficient(pContext) +-#define GB(p,i,s) ( ((ULONG) *((UCHAR*)(p)+i) ) << (s) ) +-#define GETBIG32(p) GB(p,0,24)|GB(p,1,16)|GB(p,2,8)|GB(p,3,0) +- +-/*****************************/ +-/******** SBOX Table *********/ +-/*****************************/ +- +-UCHAR SboxTable[256] = +-{ +- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, +- 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, +- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +- 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, +- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, +- 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, +- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, +- 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, +- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, +- 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, +- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, +- 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, +- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, +- 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, +- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, +- 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, +- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, +- 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, +- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, +- 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, +- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, +- 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, +- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, +- 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, +- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, +- 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, +- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, +- 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, +- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, +- 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, +- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, +- 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +-}; +- +-/*===========================================================================*/ +-/*=================== CKIP KEY PERMUTATION ==================================*/ +-/*===========================================================================*/ +- +-/* 2-byte by 2-byte subset of the full AES table */ +-static const USHORT Sbox[256] = +-{ +- 0xC6A5,0xF884,0xEE99,0xF68D,0xFF0D,0xD6BD,0xDEB1,0x9154, +- 0x6050,0x0203,0xCEA9,0x567D,0xE719,0xB562,0x4DE6,0xEC9A, +- 0x8F45,0x1F9D,0x8940,0xFA87,0xEF15,0xB2EB,0x8EC9,0xFB0B, +- 0x41EC,0xB367,0x5FFD,0x45EA,0x23BF,0x53F7,0xE496,0x9B5B, +- 0x75C2,0xE11C,0x3DAE,0x4C6A,0x6C5A,0x7E41,0xF502,0x834F, +- 0x685C,0x51F4,0xD134,0xF908,0xE293,0xAB73,0x6253,0x2A3F, +- 0x080C,0x9552,0x4665,0x9D5E,0x3028,0x37A1,0x0A0F,0x2FB5, +- 0x0E09,0x2436,0x1B9B,0xDF3D,0xCD26,0x4E69,0x7FCD,0xEA9F, +- 0x121B,0x1D9E,0x5874,0x342E,0x362D,0xDCB2,0xB4EE,0x5BFB, +- 0xA4F6,0x764D,0xB761,0x7DCE,0x527B,0xDD3E,0x5E71,0x1397, +- 0xA6F5,0xB968,0x0000,0xC12C,0x4060,0xE31F,0x79C8,0xB6ED, +- 0xD4BE,0x8D46,0x67D9,0x724B,0x94DE,0x98D4,0xB0E8,0x854A, +- 0xBB6B,0xC52A,0x4FE5,0xED16,0x86C5,0x9AD7,0x6655,0x1194, +- 0x8ACF,0xE910,0x0406,0xFE81,0xA0F0,0x7844,0x25BA,0x4BE3, +- 0xA2F3,0x5DFE,0x80C0,0x058A,0x3FAD,0x21BC,0x7048,0xF104, +- 0x63DF,0x77C1,0xAF75,0x4263,0x2030,0xE51A,0xFD0E,0xBF6D, +- 0x814C,0x1814,0x2635,0xC32F,0xBEE1,0x35A2,0x88CC,0x2E39, +- 0x9357,0x55F2,0xFC82,0x7A47,0xC8AC,0xBAE7,0x322B,0xE695, +- 0xC0A0,0x1998,0x9ED1,0xA37F,0x4466,0x547E,0x3BAB,0x0B83, +- 0x8CCA,0xC729,0x6BD3,0x283C,0xA779,0xBCE2,0x161D,0xAD76, +- 0xDB3B,0x6456,0x744E,0x141E,0x92DB,0x0C0A,0x486C,0xB8E4, +- 0x9F5D,0xBD6E,0x43EF,0xC4A6,0x39A8,0x31A4,0xD337,0xF28B, +- 0xD532,0x8B43,0x6E59,0xDAB7,0x018C,0xB164,0x9CD2,0x49E0, +- 0xD8B4,0xACFA,0xF307,0xCF25,0xCAAF,0xF48E,0x47E9,0x1018, +- 0x6FD5,0xF088,0x4A6F,0x5C72,0x3824,0x57F1,0x73C7,0x9751, +- 0xCB23,0xA17C,0xE89C,0x3E21,0x96DD,0x61DC,0x0D86,0x0F85, +- 0xE090,0x7C42,0x71C4,0xCCAA,0x90D8,0x0605,0xF701,0x1C12, +- 0xC2A3,0x6A5F,0xAEF9,0x69D0,0x1791,0x9958,0x3A27,0x27B9, +- 0xD938,0xEB13,0x2BB3,0x2233,0xD2BB,0xA970,0x0789,0x33A7, +- 0x2DB6,0x3C22,0x1592,0xC920,0x8749,0xAAFF,0x5078,0xA57A, +- 0x038F,0x59F8,0x0980,0x1A17,0x65DA,0xD731,0x84C6,0xD0B8, +- 0x82C3,0x29B0,0x5A77,0x1E11,0x7BCB,0xA8FC,0x6DD6,0x2C3A +- }; +- +-#define Lo8(v16) ((v16) & 0xFF) +-#define Hi8(v16) (((v16) >> 8) & 0xFF) +-#define u16Swap(i) ( (((i) >> 8) & 0xFF) | (((i) << 8) & 0xFF00) ) +-#define _S_(i) (Sbox[Lo8(i)] ^ u16Swap(Sbox[Hi8(i)])) +- +-#define rotLeft_1(x) ((((x) << 1) | ((x) >> 15)) & 0xFFFF) +-VOID CKIP_key_permute +- ( +- OUT UCHAR *PK, /* output permuted key */ +- IN UCHAR *CK, /* input CKIP key */ +- IN UCHAR toDsFromDs, /* input toDs/FromDs bits */ +- IN UCHAR *piv /* input pointer to IV */ +- ) +-{ +- int i; +- USHORT H[2], tmp; /* H=32-bits of per-packet hash value */ +- USHORT L[8], R[8]; /* L=u16 array of CK, R=u16 array of PK */ +- +- /* build L from input key */ +- memset(L, 0, sizeof(L)); +- for (i=0; i<16; i++) { +- L[i>>1] |= ( ((USHORT)(CK[i])) << ( i & 1 ? 8 : 0) ); +- } +- +- H[0] = (((USHORT)piv[0]) << 8) + piv[1]; +- H[1] = ( ((USHORT)toDsFromDs) << 8) | piv[2]; +- +- for (i=0; i<8; i++) { +- H[0] ^= L[i]; /* 16-bits of key material */ +- tmp = _S_(H[0]); /* 16x16 permutation */ +- H[0] = tmp ^ H[1]; /* set up for next round */ +- H[1] = tmp; +- R[i] = H[0]; /* store into key array */ +- } +- +- /* sweep in the other direction */ +- tmp=L[0]; +- for (i=7; i>0; i--) { +- R[i] = tmp = rotLeft_1(tmp) + R[i]; +- } +- +- /* IV of the permuted key is unchanged */ +- PK[0] = piv[0]; +- PK[1] = piv[1]; +- PK[2] = piv[2]; +- +- /* key portion of the permuted key is changed */ +- for (i=3; i<16; i++) { +- PK[i] = (UCHAR) (R[i>>1] >> (i & 1 ? 8 : 0)); +- } +-} +- +-/* prepare for calculation of a new mic */ +-VOID RTMPCkipMicInit( +- IN PMIC_CONTEXT pContext, +- IN PUCHAR CK) +-{ +- /* prepare for new mic calculation */ +- NdisMoveMemory(pContext->CK, CK, sizeof(pContext->CK)); +- pContext->accum = 0; +- pContext->position = 0; +-} +- +-/* add some bytes to the mic calculation */ +-VOID RTMPMicUpdate( +- IN PMIC_CONTEXT pContext, +- IN PUCHAR pOctets, +- IN INT len) +-{ +- INT byte_position; +- ULONG val; +- +- byte_position = (pContext->position & 3); +- while (len > 0) { +- /* build a 32-bit word for MIC multiply accumulate */ +- do { +- if (len == 0) return; +- pContext->part[byte_position++] = *pOctets++; +- pContext->position++; +- len--; +- } while (byte_position < 4); +- /* have a full 32-bit word to process */ +- val = GETBIG32(&pContext->part[0]); +- MIC_ACCUM(val); +- byte_position = 0; +- } +-} +- +-ULONG RTMPMicGetCoefficient( +- IN PMIC_CONTEXT pContext) +-{ +- UCHAR aes_counter[16]; +- INT coeff_position; +- UCHAR *p; +- +- coeff_position = (pContext->position - 1) >> 2; +- if ( (coeff_position & 3) == 0) { +- /* fetching the first coefficient -- get new 16-byte aes counter output */ +- u32 counter = (coeff_position >> 2); +- +- /* new counter value */ +- memset(&aes_counter[0], 0, sizeof(aes_counter)); +- aes_counter[15] = (UINT8)(counter >> 0); +- aes_counter[14] = (UINT8)(counter >> 8); +- aes_counter[13] = (UINT8)(counter >> 16); +- aes_counter[12] = (UINT8)(counter >> 24); +- +- RTMPAesEncrypt(&pContext->CK[0], &aes_counter[0], pContext->coefficient); +- } +- p = &(pContext->coefficient[ (coeff_position & 3) << 2 ]); +- return GETBIG32(p); +-} +- +-/****************************************/ +-/* aes128k128d() */ +-/* Performs a 128 bit AES encrypt with */ +-/* 128 bit data. */ +-/****************************************/ +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<16; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-UCHAR RTMPCkipSbox( +- IN UCHAR a) +-{ +- return SboxTable[(int)a]; +-} +- +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0;i<4; i++) +- { +- out[i] = a[i] ^ b[i]; +- } +-} +- +-VOID next_key( +- IN PUCHAR key, +- IN INT round) +-{ +- UCHAR rcon; +- UCHAR sbox_key[4]; +- UCHAR rcon_table[12] = +- { +- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, +- 0x1b, 0x36, 0x36, 0x36 +- }; +- +- sbox_key[0] = RTMPCkipSbox(key[13]); +- sbox_key[1] = RTMPCkipSbox(key[14]); +- sbox_key[2] = RTMPCkipSbox(key[15]); +- sbox_key[3] = RTMPCkipSbox(key[12]); +- +- rcon = rcon_table[round]; +- +- xor_32(&key[0], sbox_key, &key[0]); +- key[0] = key[0] ^ rcon; +- +- xor_32(&key[4], &key[0], &key[4]); +- xor_32(&key[8], &key[4], &key[8]); +- xor_32(&key[12], &key[8], &key[12]); +-} +- +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- +- for (i=0; i< 16; i++) +- { +- out[i] = RTMPCkipSbox(in[i]); +- } +-} +- +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- out[0] = in[0]; +- out[1] = in[5]; +- out[2] = in[10]; +- out[3] = in[15]; +- out[4] = in[4]; +- out[5] = in[9]; +- out[6] = in[14]; +- out[7] = in[3]; +- out[8] = in[8]; +- out[9] = in[13]; +- out[10] = in[2]; +- out[11] = in[7]; +- out[12] = in[12]; +- out[13] = in[1]; +- out[14] = in[6]; +- out[15] = in[11]; +-} +- +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out) +-{ +- INT i; +- UCHAR add1b[4]; +- UCHAR add1bf7[4]; +- UCHAR rotl[4]; +- UCHAR swap_halfs[4]; +- UCHAR andf7[4]; +- UCHAR rotr[4]; +- UCHAR temp[4]; +- UCHAR tempb[4]; +- +- for (i=0 ; i<4; i++) +- { +- if ((in[i] & 0x80)== 0x80) +- add1b[i] = 0x1b; +- else +- add1b[i] = 0x00; +- } +- +- swap_halfs[0] = in[2]; /* Swap halfs */ +- swap_halfs[1] = in[3]; +- swap_halfs[2] = in[0]; +- swap_halfs[3] = in[1]; +- +- rotl[0] = in[3]; /* Rotate left 8 bits */ +- rotl[1] = in[0]; +- rotl[2] = in[1]; +- rotl[3] = in[2]; +- +- andf7[0] = in[0] & 0x7f; +- andf7[1] = in[1] & 0x7f; +- andf7[2] = in[2] & 0x7f; +- andf7[3] = in[3] & 0x7f; +- +- for (i = 3; i>0; i--) /* logical shift left 1 bit */ +- { +- andf7[i] = andf7[i] << 1; +- if ((andf7[i-1] & 0x80) == 0x80) +- { +- andf7[i] = (andf7[i] | 0x01); +- } +- } +- andf7[0] = andf7[0] << 1; +- andf7[0] = andf7[0] & 0xfe; +- +- xor_32(add1b, andf7, add1bf7); +- +- xor_32(in, add1bf7, rotr); +- +- temp[0] = rotr[0]; /* Rotate right 8 bits */ +- rotr[0] = rotr[1]; +- rotr[1] = rotr[2]; +- rotr[2] = rotr[3]; +- rotr[3] = temp[0]; +- +- xor_32(add1bf7, rotr, temp); +- xor_32(swap_halfs, rotl,tempb); +- xor_32(temp, tempb, out); +-} +- +-VOID RTMPAesEncrypt( +- IN PUCHAR key, +- IN PUCHAR data, +- IN PUCHAR ciphertext) +-{ +- INT round; +- INT i; +- UCHAR intermediatea[16]; +- UCHAR intermediateb[16]; +- UCHAR round_key[16]; +- +- for(i=0; i<16; i++) round_key[i] = key[i]; +- +- for (round = 0; round < 11; round++) +- { +- if (round == 0) +- { +- xor_128(round_key, data, ciphertext); +- next_key(round_key, round); +- } +- else if (round == 10) +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- xor_128(intermediateb, round_key, ciphertext); +- } +- else /* 1 - 9 */ +- { +- byte_sub(ciphertext, intermediatea); +- shift_row(intermediatea, intermediateb); +- mix_column(&intermediateb[0], &intermediatea[0]); +- mix_column(&intermediateb[4], &intermediatea[4]); +- mix_column(&intermediateb[8], &intermediatea[8]); +- mix_column(&intermediateb[12], &intermediatea[12]); +- xor_128(intermediatea, round_key, ciphertext); +- next_key(round_key, round); +- } +- } +- +-} +- +-/* calculate the mic */ +-VOID RTMPMicFinal( +- IN PMIC_CONTEXT pContext, +- OUT UCHAR digest[4]) +-{ +- INT byte_position; +- ULONG val; +- ULONGLONG sum, utmp; +- LONGLONG stmp; +- +- /* deal with partial 32-bit word left over from last update */ +- if ( (byte_position = (pContext->position & 3)) != 0) { +- /* have a partial word in part to deal with -- zero unused bytes */ +- do { +- pContext->part[byte_position++] = 0; +- pContext->position++; +- } while (byte_position < 4); +- val = GETBIG32(&pContext->part[0]); +- MIC_ACCUM(val); +- } +- +- /* reduce the accumulated u64 to a 32-bit MIC */ +- sum = pContext->accum; +- stmp = (sum & 0xffffffffL) - ((sum >> 32) * 15); +- utmp = (stmp & 0xffffffffL) - ((stmp >> 32) * 15); +- sum = utmp & 0xffffffffL; +- if (utmp > 0x10000000fL) +- sum -= 15; +- +- val = (ULONG)sum; +- digest[0] = (UCHAR)((val>>24) & 0xFF); +- digest[1] = (UCHAR) ((val>>16) & 0xFF); +- digest[2] = (UCHAR) ((val>>8) & 0xFF); +- digest[3] = (UCHAR)((val>>0) & 0xFF); +-} +- +-VOID RTMPCkipInsertCMIC( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pMIC, +- IN PUCHAR p80211hdr, +- IN PNDIS_PACKET pPacket, +- IN PCIPHER_KEY pKey, +- IN PUCHAR mic_snap) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- ULONG SrcBufLen; +- PUCHAR pDA, pSA, pProto; +- UCHAR bigethlen[2]; +- UCHAR ckip_ck[16]; +- MIC_CONTEXT mic_ctx; +- USHORT payloadlen; +- UCHAR i; +- +- if (pKey == NULL) +- { +- DBGPRINT_ERR(("RTMPCkipInsertCMIC, Before to form the CKIP key (CK), pKey can't be NULL\n")); +- return; +- } +- +- switch (*(p80211hdr+1) & 3) +- { +- case 0: /* FromDs=0, ToDs=0 */ +- pDA = p80211hdr+4; +- pSA = p80211hdr+10; +- break; +- case 1: /* FromDs=0, ToDs=1 */ +- pDA = p80211hdr+16; +- pSA = p80211hdr+10; +- break; +- case 2: /* FromDs=1, ToDs=0 */ +- pDA = p80211hdr+4; +- pSA = p80211hdr+16; +- break; +- case 3: /* FromDs=1, ToDs=1 */ +- pDA = p80211hdr+16; +- pSA = p80211hdr+24; +- break; +- } +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- if (SrcBufLen < LENGTH_802_3) +- return; +- +- pProto = pSrcBufVA + 12; +- payloadlen = PacketInfo.TotalPacketLength - LENGTH_802_3 + 18; // CKIP_LLC(8)+CMIC(4)+TxSEQ(4)+PROTO(2)=18 +- +- bigethlen[0] = (unsigned char)(payloadlen >> 8); +- bigethlen[1] = (unsigned char)payloadlen; +- +- // +- // Encryption Key expansion to form the CKIP Key (CKIP_CK). +- // +- if (pKey->KeyLen < 16) +- { +- for(i = 0; i < (16 / pKey->KeyLen); i++) +- { +- NdisMoveMemory(ckip_ck + i * pKey->KeyLen, +- pKey->Key, +- pKey->KeyLen); +- } +- NdisMoveMemory(ckip_ck + i * pKey->KeyLen, +- pKey->Key, +- 16 - (i * pKey->KeyLen)); +- } +- else +- { +- NdisMoveMemory(ckip_ck, pKey->Key, pKey->KeyLen); +- } +- RTMPCkipMicInit(&mic_ctx, ckip_ck); +- RTMPMicUpdate(&mic_ctx, pDA, MAC_ADDR_LEN); // MIC <-- DA +- RTMPMicUpdate(&mic_ctx, pSA, MAC_ADDR_LEN); // MIC <-- SA +- RTMPMicUpdate(&mic_ctx, bigethlen, 2); // MIC <-- payload length starting from CKIP SNAP +- RTMPMicUpdate(&mic_ctx, mic_snap, 8); // MIC <-- snap header +- RTMPMicUpdate(&mic_ctx, pAd->StaCfg.TxSEQ, 4); // MIC <-- TxSEQ +- RTMPMicUpdate(&mic_ctx, pProto, 2); // MIC <-- Protocol +- +- pSrcBufVA += LENGTH_802_3; +- SrcBufLen -= LENGTH_802_3; +- +- // Mic <-- original payload. loop until all payload processed +- do +- { +- if (SrcBufLen > 0) +- RTMPMicUpdate(&mic_ctx, pSrcBufVA, SrcBufLen); +- +- NdisGetNextBuffer(PacketInfo.pFirstBuffer, &PacketInfo.pFirstBuffer); +- if (PacketInfo.pFirstBuffer) +- { +- NDIS_QUERY_BUFFER(PacketInfo.pFirstBuffer, &pSrcBufVA, &SrcBufLen); +- } +- else +- break; +- } while (TRUE); +- +- RTMPMicFinal(&mic_ctx, pMIC); // update MIC +-} +diff --git a/drivers/staging/rt3090/sta/rtmp_data.c b/drivers/staging/rt3090/sta/rtmp_data.c +deleted file mode 100644 +index 5591364..0000000 +--- a/drivers/staging/rt3090/sta/rtmp_data.c ++++ /dev/null +@@ -1,2661 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rtmp_data.c +- +- Abstract: +- Data path subroutines +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +-*/ +- +-#include "../rt_config.h" +- +- +-VOID STARxEAPOLFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- UCHAR *pTmpBuf; +- +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP) +- { +- // All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon) +- // TBD : process fragmented EAPol frames +- { +- // In 802.1x mode, if the received frame is EAP-SUCCESS packet, turn on the PortSecured variable +- if ( pAd->StaCfg.IEEE8021X == TRUE && +- (EAP_CODE_SUCCESS == WpaCheckEapCode(pAd, pRxBlk->pData, pRxBlk->DataSize, LENGTH_802_1_H))) +- { +- PUCHAR Key; +- UCHAR CipherAlg; +- int idx = 0; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("Receive EAP-SUCCESS Packet\n")); +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAd); +- +- if (pAd->StaCfg.IEEE8021x_required_keys == FALSE) +- { +- idx = pAd->StaCfg.DesireSharedKeyId; +- CipherAlg = pAd->StaCfg.DesireSharedKey[idx].CipherAlg; +- Key = pAd->StaCfg.DesireSharedKey[idx].Key; +- +- if (pAd->StaCfg.DesireSharedKey[idx].KeyLen > 0) +- { +-#ifdef RTMP_MAC_PCI +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- +- // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); +- +- // Assign group key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); +- +- // Assign pairwise key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, pEntry); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; +-#endif // RTMP_MAC_PCI // +- // For Preventing ShardKey Table is cleared by remove key procedure. +- pAd->SharedKey[BSS0][idx].CipherAlg = CipherAlg; +- pAd->SharedKey[BSS0][idx].KeyLen = pAd->StaCfg.DesireSharedKey[idx].KeyLen; +- NdisMoveMemory(pAd->SharedKey[BSS0][idx].Key, +- pAd->StaCfg.DesireSharedKey[idx].Key, +- pAd->StaCfg.DesireSharedKey[idx].KeyLen); +- } +- } +- } +- +- Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); +- return; +- } +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- // Special DATA frame that has to pass to MLME +- // 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process +- // 2. EAPOL handshaking frames when driver supplicant enabled, pass to MLME for special process +- { +- pTmpBuf = pRxBlk->pData - LENGTH_802_11; +- NdisMoveMemory(pTmpBuf, pRxBlk->pHeader, LENGTH_802_11); +- REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, pTmpBuf, pRxBlk->DataSize + LENGTH_802_11, pRxWI->RSSI0, pRxWI->RSSI1, pRxWI->RSSI2, pRxD->PlcpSignal); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("!!! report EAPOL/AIRONET DATA to MLME (len=%d) !!!\n", pRxBlk->DataSize)); +- } +- } +- +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- +-} +- +-VOID STARxDataFrameAnnounce( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) +-{ +- +- // non-EAP frame +- if (!RTMPCheckWPAframe(pAd, pEntry, pRxBlk->pData, pRxBlk->DataSize, FromWhichBSSID)) +- { +- +- { +- // drop all non-EAP DATA frame before +- // this client's Port-Access-Control is secured +- if (pRxBlk->pHeader->FC.Wep) +- { +- // unsupported cipher suite +- if (pAd->StaCfg.WepStatus == Ndis802_11EncryptionDisabled) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- } +- else +- { +- // encryption in-use but receive a non-EAPOL clear text frame, drop it +- if ((pAd->StaCfg.WepStatus != Ndis802_11EncryptionDisabled) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- } +- } +- RX_BLK_CLEAR_FLAG(pRxBlk, fRX_EAP); +- +- +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_ARALINK)) +- { +- // Normal legacy, AMPDU or AMSDU +- CmmRxnonRalinkFrameIndicate(pAd, pRxBlk, FromWhichBSSID); +- +- } +- else +- { +- // ARALINK +- CmmRxRalinkFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID); +- } +-#ifdef QOS_DLS_SUPPORT +- RX_BLK_CLEAR_FLAG(pRxBlk, fRX_DLS); +-#endif // QOS_DLS_SUPPORT // +- } +- else +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_EAP); +-#ifdef DOT11_N_SUPPORT +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0)) +- { +- Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- // Determin the destination of the EAP frame +- // to WPA state machine or upper layer +- STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID); +- } +- } +-} +- +- +-// For TKIP frame, calculate the MIC value +-BOOLEAN STACheckTkipMICValue( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk) +-{ +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; +- UCHAR UserPriority = pRxBlk->UserPriority; +- PCIPHER_KEY pWpaKey; +- UCHAR *pDA, *pSA; +- +- pWpaKey = &pAd->SharedKey[BSS0][pRxBlk->pRxWI->KeyIndex]; +- +- pDA = pHeader->Addr1; +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_INFRA)) +- { +- pSA = pHeader->Addr3; +- } +- else +- { +- pSA = pHeader->Addr2; +- } +- +- if (RTMPTkipCompareMICValue(pAd, +- pData, +- pDA, +- pSA, +- pWpaKey->RxMic, +- UserPriority, +- DataSize) == FALSE) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error 2\n")); +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.WpaSupplicantUP) +- { +- WpaSendMicFailureToWpaSupplicant(pAd, (pWpaKey->Type == PAIRWISEKEY) ? TRUE : FALSE); +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- RTMPReportMicError(pAd, pWpaKey); +- } +- +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +- return FALSE; +- } +- +- return TRUE; +-} +- +- +-// +-// All Rx routines use RX_BLK structure to hande rx events +-// It is very important to build pRxBlk attributes +-// 1. pHeader pointer to 802.11 Header +-// 2. pData pointer to payload including LLC (just skip Header) +-// 3. set payload size including LLC to DataSize +-// 4. set some flags with RX_BLK_SET_FLAG() +-// +-VOID STAHandleRxDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) +-{ +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- BOOLEAN bFragment = FALSE; +- MAC_TABLE_ENTRY *pEntry = NULL; +- UCHAR FromWhichBSSID = BSS0; +- UCHAR UserPriority = 0; +- +- { +- // before LINK UP, all DATA frames are rejected +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +-#ifdef QOS_DLS_SUPPORT +- //if ((pHeader->FC.FrDs == 0) && (pHeader->FC.ToDs == 0)) +- if (RTMPRcvFrameDLSCheck(pAd, pHeader, pRxWI->MPDUtotalByteCount, pRxD)) +- { +- return; +- } +-#endif // QOS_DLS_SUPPORT // +- +- // Drop not my BSS frames +- if (pRxD->MyBss == 0) +- { +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- } +- +- pAd->RalinkCounters.RxCountSinceLastNULL++; +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && (pHeader->FC.SubType & 0x08)) +- { +- UCHAR *pData; +- DBGPRINT(RT_DEBUG_INFO,("bAPSDCapable\n")); +- +- // Qos bit 4 +- pData = (PUCHAR)pHeader + LENGTH_802_11; +- if ((*pData >> 4) & 0x01) +- { +- DBGPRINT(RT_DEBUG_INFO,("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); +- pAd->CommonCfg.bInServicePeriod = FALSE; +- +- // Force driver to fall into sleep mode when rcv EOSP frame +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- USHORT TbttNumToNextWakeUp; +- USHORT NextDtim = pAd->StaCfg.DtimPeriod; +- ULONG Now; +- +- NdisGetSystemUpTime(&Now); +- NextDtim -= (USHORT)(Now - pAd->StaCfg.LastBeaconRxTime)/pAd->CommonCfg.BeaconPeriod; +- +- TbttNumToNextWakeUp = pAd->StaCfg.DefaultListenCount; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim)) +- TbttNumToNextWakeUp = NextDtim; +- +- RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- // if WMM-APSD is failed, try to disable following line +- AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); +- } +- } +- +- if ((pHeader->FC.MoreData) && (pAd->CommonCfg.bInServicePeriod)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("Sending another trigger frame when More Data bit is set to 1\n")); +- } +- } +- +- // Drop NULL, CF-ACK(no data), CF-POLL(no data), and CF-ACK+CF-POLL(no data) data frame +- if ((pHeader->FC.SubType & 0x04)) // bit 2 : no DATA +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- // Drop not my BSS frame (we can not only check the MyBss bit in RxD) +-#ifdef QOS_DLS_SUPPORT +- if (!pAd->CommonCfg.bDLSCapable) +- { +-#endif // QOS_DLS_SUPPORT // +- if (INFRA_ON(pAd)) +- { +- // Infrastructure mode, check address 2 for BSSID +- if (!RTMPEqualMemory(&pHeader->Addr2, &pAd->CommonCfg.Bssid, 6)) +- { +- // Receive frame not my BSSID +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- } +- else // Ad-Hoc mode or Not associated +- { +- // Ad-Hoc mode, check address 3 for BSSID +- if (!RTMPEqualMemory(&pHeader->Addr3, &pAd->CommonCfg.Bssid, 6)) +- { +- // Receive frame not my BSSID +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- } +-#ifdef QOS_DLS_SUPPORT +- } +-#endif // QOS_DLS_SUPPORT // +- +- // +- // find pEntry +- // +- if (pRxWI->WirelessCliID < MAX_LEN_OF_MAC_TABLE) +- { +- pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; +- +- } +- else +- { +- // 1. release packet if infra mode +- // 2. new a pEntry if ad-hoc mode +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- // infra or ad-hoc +- if (INFRA_ON(pAd)) +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_INFRA); +-#ifdef QOS_DLS_SUPPORT +- if ((pHeader->FC.FrDs == 0) && (pHeader->FC.ToDs == 0)) +- RX_BLK_SET_FLAG(pRxBlk, fRX_DLS); +- else +-#endif // QOS_DLS_SUPPORT // +- ASSERT(pRxWI->WirelessCliID == BSSID_WCID); +- } +- +- // check Atheros Client +- if ((pEntry->bIAmBadAtheros == FALSE) && (pRxD->AMPDU == 1) && (pHeader->FC.Retry )) +- { +- pEntry->bIAmBadAtheros = TRUE; +- pAd->CommonCfg.IOTestParm.bCurrentAtheros = TRUE; +- pAd->CommonCfg.IOTestParm.bLastAtheros = TRUE; +- if (!STA_AES_ON(pAd)) +- { +- AsicUpdateProtect(pAd, 8, ALLN_SETPROTECT, TRUE, FALSE); +- } +- } +- } +- +- pRxBlk->pData = (UCHAR *)pHeader; +- +- // +- // update RxBlk->pData, DataSize +- // 802.11 Header, QOS, HTC, Hw Padding +- // +- +- // 1. skip 802.11 HEADER +- { +- pRxBlk->pData += LENGTH_802_11; +- pRxBlk->DataSize -= LENGTH_802_11; +- } +- +- // 2. QOS +- if (pHeader->FC.SubType & 0x08) +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_QOS); +- UserPriority = *(pRxBlk->pData) & 0x0f; +- // bit 7 in QoS Control field signals the HT A-MSDU format +- if ((*pRxBlk->pData) & 0x80) +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_AMSDU); +- } +- +- // skip QOS contorl field +- pRxBlk->pData += 2; +- pRxBlk->DataSize -=2; +- } +- pRxBlk->UserPriority = UserPriority; +- +- /* check if need to resend PS Poll when received packet with MoreData = 1 */ +- if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) +- { +- if ((((UserPriority == 0) || (UserPriority == 3)) && +- pAd->CommonCfg.bAPSDAC_BE == 0) || +- (((UserPriority == 1) || (UserPriority == 2)) && +- pAd->CommonCfg.bAPSDAC_BK == 0) || +- (((UserPriority == 4) || (UserPriority == 5)) && +- pAd->CommonCfg.bAPSDAC_VI == 0) || +- (((UserPriority == 6) || (UserPriority == 7)) && +- pAd->CommonCfg.bAPSDAC_VO == 0)) +- { +- /* non-UAPSD delivery-enabled AC */ +- RTMP_PS_POLL_ENQUEUE(pAd); +- } +- } +- +- // 3. Order bit: A-Ralink or HTC+ +- if (pHeader->FC.Order) +- { +-#ifdef AGGREGATION_SUPPORT +- if ((pRxWI->PHYMODE <= MODE_OFDM) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED))) +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_ARALINK); +- } +- else +-#endif // AGGREGATION_SUPPORT // +- { +-#ifdef DOT11_N_SUPPORT +- RX_BLK_SET_FLAG(pRxBlk, fRX_HTC); +- // skip HTC contorl field +- pRxBlk->pData += 4; +- pRxBlk->DataSize -= 4; +-#endif // DOT11_N_SUPPORT // +- } +- } +- +- // 4. skip HW padding +- if (pRxD->L2PAD) +- { +- // just move pData pointer +- // because DataSize excluding HW padding +- RX_BLK_SET_FLAG(pRxBlk, fRX_PAD); +- pRxBlk->pData += 2; +- } +- +-#ifdef DOT11_N_SUPPORT +- if (pRxD->BA) +- { +- RX_BLK_SET_FLAG(pRxBlk, fRX_AMPDU); +- } +-#endif // DOT11_N_SUPPORT // +- +- +- // +- // Case I Process Broadcast & Multicast data frame +- // +- if (pRxD->Bcast || pRxD->Mcast) +- { +- INC_COUNTER64(pAd->WlanCounters.MulticastReceivedFrameCount); +- +- // Drop Mcast/Bcast frame with fragment bit on +- if (pHeader->FC.MoreFrag) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- // Filter out Bcast frame which AP relayed for us +- if (pHeader->FC.FrDs && MAC_ADDR_EQUAL(pHeader->Addr3, pAd->CurrentAddress)) +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); +- return; +- } +- else if (pRxD->U2M) +- { +- pAd->LastRxRate = (USHORT)((pRxWI->MCS) + (pRxWI->BW <<7) + (pRxWI->ShortGI <<8)+ (pRxWI->PHYMODE <<14)) ; +- +- +-#ifdef QOS_DLS_SUPPORT +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_DLS)) +- { +- MAC_TABLE_ENTRY *pDlsEntry = NULL; +- +- pDlsEntry = DlsEntryTableLookupByWcid(pAd, pRxWI->WirelessCliID, pHeader->Addr2, TRUE); +- if(pDlsEntry) +- Update_Rssi_Sample(pAd, &pDlsEntry->RssiSample, pRxWI); +- } +- else +-#endif // QOS_DLS_SUPPORT // +- if (ADHOC_ON(pAd)) +- { +- pEntry = MacTableLookup(pAd, pHeader->Addr2); +- if (pEntry) +- Update_Rssi_Sample(pAd, &pEntry->RssiSample, pRxWI); +- } +- +- +- Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); +- +- pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); +- +- pAd->RalinkCounters.OneSecRxOkDataCnt++; +- +- +- if (!((pHeader->Frag == 0) && (pHeader->FC.MoreFrag == 0))) +- { +- // re-assemble the fragmented packets +- // return complete frame (pRxPacket) or NULL +- bFragment = TRUE; +- pRxPacket = RTMPDeFragmentDataFrame(pAd, pRxBlk); +- } +- +- if (pRxPacket) +- { +- pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; +- +- // process complete frame +- if (bFragment && (pRxD->Decrypted) && (pEntry->WepStatus == Ndis802_11Encryption2Enabled)) +- { +- // Minus MIC length +- pRxBlk->DataSize -= 8; +- +- // For TKIP frame, calculate the MIC value +- if (STACheckTkipMICValue(pAd, pEntry, pRxBlk) == FALSE) +- { +- return; +- } +- } +- +- STARxDataFrameAnnounce(pAd, pEntry, pRxBlk, FromWhichBSSID); +- return; +- } +- else +- { +- // just return +- // because RTMPDeFragmentDataFrame() will release rx packet, +- // if packet is fragmented +- return; +- } +- } +- +- ASSERT(0); +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +-} +- +-VOID STAHandleRxMgmtFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) +-{ +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- +- do +- { +- +- +- /* check if need to resend PS Poll when received packet with MoreData = 1 */ +- if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) +- { +- /* for UAPSD, all management frames will be VO priority */ +- if (pAd->CommonCfg.bAPSDAC_VO == 0) +- { +- /* non-UAPSD delivery-enabled AC */ +- RTMP_PS_POLL_ENQUEUE(pAd); +- } +- } +- +- /* TODO: if MoreData == 0, station can go to sleep */ +- +- +- // We should collect RSSI not only U2M data but also my beacon +- if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) +- && (pAd->RxAnt.EvaluatePeriod == 0)) +- { +- Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); +- +- pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); +- } +- +-#ifdef RT30xx +-#ifdef ANT_DIVERSITY_SUPPORT +- // collect rssi information for antenna diversity +- if ((pAd->NicConfig2.field.AntDiversity) && +- (pAd->CommonCfg.bRxAntDiversity != ANT_DIVERSITY_DISABLE)) +- { +- if ((pRxD->U2M) || ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)))) +- { +- COLLECT_RX_ANTENNA_AVERAGE_RSSI(pAd, ConvertToRssi(pAd, (UCHAR)pRxWI->RSSI0, RSSI_0), 0); //Note: RSSI2 not used on RT73 +- pAd->StaCfg.NumOfAvgRssiSample ++; +- } +- } +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +- +- // First check the size, it MUST not exceed the mlme queue size +- if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) +- { +- DBGPRINT_ERR(("STAHandleRxMgmtFrame: frame too large, size = %d \n", pRxWI->MPDUtotalByteCount)); +- break; +- } +- +- REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, pHeader, pRxWI->MPDUtotalByteCount, +- pRxWI->RSSI0, pRxWI->RSSI1, pRxWI->RSSI2, pRxD->PlcpSignal); +- } while (FALSE); +- +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); +-} +- +-VOID STAHandleRxControlFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) +-{ +-#ifdef DOT11_N_SUPPORT +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +-#endif // DOT11_N_SUPPORT // +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- +- switch (pHeader->FC.SubType) +- { +- case SUBTYPE_BLOCK_ACK_REQ: +-#ifdef DOT11_N_SUPPORT +- { +- CntlEnqueueForRecv(pAd, pRxWI->WirelessCliID, (pRxWI->MPDUtotalByteCount), (PFRAME_BA_REQ)pHeader); +- } +- break; +-#endif // DOT11_N_SUPPORT // +- case SUBTYPE_BLOCK_ACK: +- case SUBTYPE_ACK: +- default: +- break; +- } +- +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Process RxDone interrupt, running in DPC level +- +- Arguments: +- pAd Pointer to our adapter +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- This routine has to maintain Rx ring read pointer. +- Need to consider QOS DATA format when converting to 802.3 +- ======================================================================== +-*/ +-BOOLEAN STARxDoneInterruptHandle( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN argc) +-{ +- NDIS_STATUS Status; +- UINT32 RxProcessed, RxPending; +- BOOLEAN bReschedule = FALSE; +- RT28XX_RXD_STRUC *pRxD; +- UCHAR *pData; +- PRXWI_STRUC pRxWI; +- PNDIS_PACKET pRxPacket; +- PHEADER_802_11 pHeader; +- RX_BLK RxCell; +- +- RxProcessed = RxPending = 0; +- +- // process whole rx ring +- while (1) +- { +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST) || +- !RTMP_TEST_FLAG(pAd,fRTMP_ADAPTER_START_UP)) +- { +- break; +- } +- +-#ifdef RTMP_MAC_PCI +- if (RxProcessed++ > MAX_RX_PROCESS_CNT) +- { +- // need to reschedule rx handle +- bReschedule = TRUE; +- break; +- } +-#endif // RTMP_MAC_PCI // +- +- RxProcessed ++; // test +- +- // 1. allocate a new data packet into rx ring to replace received packet +- // then processing the received packet +- // 2. the callee must take charge of release of packet +- // 3. As far as driver is concerned , +- // the rx packet must +- // a. be indicated to upper layer or +- // b. be released if it is discarded +- pRxPacket = GetPacketFromRxRing(pAd, &(RxCell.RxD), &bReschedule, &RxPending); +- if (pRxPacket == NULL) +- { +- // no more packet to process +- break; +- } +- +- // get rx ring descriptor +- pRxD = &(RxCell.RxD); +- // get rx data buffer +- pData = GET_OS_PKT_DATAPTR(pRxPacket); +- pRxWI = (PRXWI_STRUC) pData; +- pHeader = (PHEADER_802_11) (pData+RXWI_SIZE) ; +- +-#ifdef RT_BIG_ENDIAN +- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader, DIR_READ, TRUE); +- RTMPWIEndianChange((PUCHAR)pRxWI, TYPE_RXWI); +-#endif +- +- // build RxCell +- RxCell.pRxWI = pRxWI; +- RxCell.pHeader = pHeader; +- RxCell.pRxPacket = pRxPacket; +- RxCell.pData = (UCHAR *) pHeader; +- RxCell.DataSize = pRxWI->MPDUtotalByteCount; +- RxCell.Flags = 0; +- +- // Increase Total receive byte counter after real data received no mater any error or not +- pAd->RalinkCounters.ReceivedByteCount += pRxWI->MPDUtotalByteCount; +- pAd->RalinkCounters.OneSecReceivedByteCount += pRxWI->MPDUtotalByteCount; +- pAd->RalinkCounters.RxCount ++; +- +- INC_COUNTER64(pAd->WlanCounters.ReceivedFragmentCount); +- +- if (pRxWI->MPDUtotalByteCount < 14) +- Status = NDIS_STATUS_FAILURE; +- +- if (MONITOR_ON(pAd)) +- { +- send_monitor_packets(pAd, &RxCell); +- break; +- } +- +- /* STARxDoneInterruptHandle() is called in rtusb_bulk.c */ +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- pAd->ate.RxCntPerSec++; +- ATESampleRssi(pAd, pRxWI); +-#ifdef RALINK_28xx_QA +- if (pAd->ate.bQARxStart == TRUE) +- { +- /* (*pRxD) has been swapped in GetPacketFromRxRing() */ +- ATE_QA_Statistics(pAd, pRxWI, pRxD, pHeader); +- } +-#endif // RALINK_28xx_QA // +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); +- continue; +- } +-#endif // RALINK_ATE // +- +- // Check for all RxD errors +- Status = RTMPCheckRxError(pAd, pHeader, pRxWI, pRxD); +- +- // Handle the received frame +- if (Status == NDIS_STATUS_SUCCESS) +- { +- switch (pHeader->FC.Type) +- { +- // CASE I, receive a DATA frame +- case BTYPE_DATA: +- { +- // process DATA frame +- STAHandleRxDataFrame(pAd, &RxCell); +- } +- break; +- // CASE II, receive a MGMT frame +- case BTYPE_MGMT: +- { +- STAHandleRxMgmtFrame(pAd, &RxCell); +- } +- break; +- // CASE III. receive a CNTL frame +- case BTYPE_CNTL: +- { +- STAHandleRxControlFrame(pAd, &RxCell); +- } +- break; +- // discard other type +- default: +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- break; +- } +- } +- else +- { +- pAd->Counters8023.RxErrors++; +- // discard this frame +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- } +- } +- +- return bReschedule; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Arguments: +- pAd Pointer to our adapter +- +- IRQL = DISPATCH_LEVEL +- +- ======================================================================== +-*/ +-VOID RTMPHandleTwakeupInterrupt( +- IN PRTMP_ADAPTER pAd) +-{ +- AsicForceWakeup(pAd, FALSE); +-} +- +-/* +-======================================================================== +-Routine Description: +- Early checking and OS-depened parsing for Tx packet send to our STA driver. +- +-Arguments: +- NDIS_HANDLE MiniportAdapterContext Pointer refer to the device handle, i.e., the pAd. +- PPNDIS_PACKET ppPacketArray The packet array need to do transmission. +- UINT NumberOfPackets Number of packet in packet array. +- +-Return Value: +- NONE +- +-Note: +- This function do early checking and classification for send-out packet. +- You only can put OS-depened & STA related code in here. +-======================================================================== +-*/ +-VOID STASendPackets( +- IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, +- IN UINT NumberOfPackets) +-{ +- UINT Index; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; +- PNDIS_PACKET pPacket; +- BOOLEAN allowToSend = FALSE; +- +- +- for (Index = 0; Index < NumberOfPackets; Index++) +- { +- pPacket = ppPacketArray[Index]; +- +- do +- { +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- { +- // Drop send request since hardware is in reset state +- break; +- } +- else if (!INFRA_ON(pAd) && !ADHOC_ON(pAd)) +- { +- // Drop send request since there are no physical connection yet +- break; +- } +- else +- { +- // Record that orignal packet source is from NDIS layer,so that +- // later on driver knows how to release this NDIS PACKET +-#ifdef QOS_DLS_SUPPORT +- MAC_TABLE_ENTRY *pEntry; +- PUCHAR pSrcBufVA = GET_OS_PKT_DATAPTR(pPacket); +- +- pEntry = MacTableLookup(pAd, pSrcBufVA); +- if (pEntry && (pEntry->ValidAsDls == TRUE)) +- { +- RTMP_SET_PACKET_WCID(pPacket, pEntry->Aid); +- } +- else +-#endif // QOS_DLS_SUPPORT // +- RTMP_SET_PACKET_WCID(pPacket, 0); // this field is useless when in STA mode +- RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +- NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_PENDING); +- pAd->RalinkCounters.PendingNdisPacketCount++; +- +- allowToSend = TRUE; +- } +- } while(FALSE); +- +- if (allowToSend == TRUE) +- STASendPacket(pAd, pPacket); +- else +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- +- // Dequeue outgoing frames from TxSwQueue[] and process it +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- +-} +- +- +-/* +-======================================================================== +-Routine Description: +- This routine is used to do packet parsing and classification for Tx packet +- to STA device, and it will en-queue packets to our TxSwQueue depends on AC +- class. +- +-Arguments: +- pAd Pointer to our adapter +- pPacket Pointer to send packet +- +-Return Value: +- NDIS_STATUS_SUCCESS If succes to queue the packet into TxSwQueue. +- NDIS_STATUS_FAILURE If failed to do en-queue. +- +-Note: +- You only can put OS-indepened & STA related code in here. +-======================================================================== +-*/ +-NDIS_STATUS STASendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) +-{ +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- UINT AllowFragSize; +- UCHAR NumberOfFrag; +- UCHAR RTSRequired; +- UCHAR QueIdx, UserPriority; +- MAC_TABLE_ENTRY *pEntry = NULL; +- unsigned int IrqFlags; +- UCHAR FlgIsIP = 0; +- UCHAR Rate; +- +- // Prepare packet information structure for buffer descriptor +- // chained within a single NDIS packet. +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +- +- if (pSrcBufVA == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket --> pSrcBufVA == NULL !!!SrcBufLen=%x\n",SrcBufLen)); +- // Resourece is low, system did not allocate virtual address +- // return NDIS_STATUS_FAILURE directly to upper layer +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- return NDIS_STATUS_FAILURE; +- } +- +- +- if (SrcBufLen < 14) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket --> Ndis Packet buffer error !!!\n")); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- return (NDIS_STATUS_FAILURE); +- } +- +- // In HT rate adhoc mode, A-MPDU is often used. So need to lookup BA Table and MAC Entry. +- // Note multicast packets in adhoc also use BSSID_WCID index. +- { +- if(INFRA_ON(pAd)) +- { +-#ifdef QOS_DLS_SUPPORT +- USHORT tmpWcid; +- +- tmpWcid = RTMP_GET_PACKET_WCID(pPacket); +- if (VALID_WCID(tmpWcid) && +- (pAd->MacTab.Content[tmpWcid].ValidAsDls== TRUE)) +- { +- pEntry = &pAd->MacTab.Content[tmpWcid]; +- Rate = pAd->MacTab.Content[tmpWcid].CurrTxRate; +- } +- else +-#endif // QOS_DLS_SUPPORT // +- { +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- RTMP_SET_PACKET_WCID(pPacket, BSSID_WCID); +- Rate = pAd->CommonCfg.TxRate; +- } +- } +- else if (ADHOC_ON(pAd)) +- { +- if (*pSrcBufVA & 0x01) +- { +- RTMP_SET_PACKET_WCID(pPacket, MCAST_WCID); +- pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- } +- else +- { +- pEntry = MacTableLookup(pAd, pSrcBufVA); +- } +- Rate = pAd->CommonCfg.TxRate; +- } +- } +- +- if (!pEntry) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket->Cannot find pEntry(%2x:%2x:%2x:%2x:%2x:%2x) in MacTab!\n", PRINT_MAC(pSrcBufVA))); +- // Resourece is low, system did not allocate virtual address +- // return NDIS_STATUS_FAILURE directly to upper layer +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- return NDIS_STATUS_FAILURE; +- } +- +- if (ADHOC_ON(pAd) +- ) +- { +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid); +- } +- +- // +- // Check the Ethernet Frame type of this packet, and set the RTMP_SET_PACKET_SPECIFIC flags. +- // Here we set the PACKET_SPECIFIC flags(LLC, VLAN, DHCP/ARP, EAPOL). +- RTMPCheckEtherType(pAd, pPacket); +- +- +- +- // +- // WPA 802.1x secured port control - drop all non-802.1x frame before port secured +- // +- if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +-#ifdef WPA_SUPPLICANT_SUPPORT +- || (pAd->StaCfg.IEEE8021X == TRUE) +-#endif // WPA_SUPPLICANT_SUPPORT // +- ) +- && ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) || (pAd->StaCfg.MicErrCnt >= 2)) +- && (RTMP_GET_PACKET_EAPOL(pPacket)== FALSE) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STASendPacket --> Drop packet before port secured !!!\n")); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- +- return (NDIS_STATUS_FAILURE); +- } +- +- +- // STEP 1. Decide number of fragments required to deliver this MSDU. +- // The estimation here is not very accurate because difficult to +- // take encryption overhead into consideration here. The result +- // "NumberOfFrag" is then just used to pre-check if enough free +- // TXD are available to hold this MSDU. +- +- +- if (*pSrcBufVA & 0x01) // fragmentation not allowed on multicast & broadcast +- NumberOfFrag = 1; +- else if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) +- NumberOfFrag = 1; // Aggregation overwhelms fragmentation +- else if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED)) +- NumberOfFrag = 1; // Aggregation overwhelms fragmentation +-#ifdef DOT11_N_SUPPORT +- else if ((pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTMIX) || (pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTGREENFIELD)) +- NumberOfFrag = 1; // MIMO RATE overwhelms fragmentation +-#endif // DOT11_N_SUPPORT // +- else +- { +- // The calculated "NumberOfFrag" is a rough estimation because of various +- // encryption/encapsulation overhead not taken into consideration. This number is just +- // used to make sure enough free TXD are available before fragmentation takes place. +- // In case the actual required number of fragments of an NDIS packet +- // excceeds "NumberOfFrag"caculated here and not enough free TXD available, the +- // last fragment (i.e. last MPDU) will be dropped in RTMPHardTransmit() due to out of +- // resource, and the NDIS packet will be indicated NDIS_STATUS_FAILURE. This should +- // rarely happen and the penalty is just like a TX RETRY fail. Affordable. +- +- AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; +- NumberOfFrag = ((PacketInfo.TotalPacketLength - LENGTH_802_3 + LENGTH_802_1_H) / AllowFragSize) + 1; +- // To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size +- if (((PacketInfo.TotalPacketLength - LENGTH_802_3 + LENGTH_802_1_H) % AllowFragSize) == 0) +- { +- NumberOfFrag--; +- } +- } +- +- // Save fragment number to Ndis packet reserved field +- RTMP_SET_PACKET_FRAGMENTS(pPacket, NumberOfFrag); +- +- +- // STEP 2. Check the requirement of RTS: +- // If multiple fragment required, RTS is required only for the first fragment +- // if the fragment size large than RTS threshold +- // For RT28xx, Let ASIC send RTS/CTS +-// RTMP_SET_PACKET_RTS(pPacket, 0); +- if (NumberOfFrag > 1) +- RTSRequired = (pAd->CommonCfg.FragmentThreshold > pAd->CommonCfg.RtsThreshold) ? 1 : 0; +- else +- RTSRequired = (PacketInfo.TotalPacketLength > pAd->CommonCfg.RtsThreshold) ? 1 : 0; +- +- // Save RTS requirement to Ndis packet reserved field +- RTMP_SET_PACKET_RTS(pPacket, RTSRequired); +- RTMP_SET_PACKET_TXRATE(pPacket, pAd->CommonCfg.TxRate); +- +- // +- // STEP 3. Traffic classification. outcome = +- // +- UserPriority = 0; +- QueIdx = QID_AC_BE; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) +- { +- USHORT Protocol; +- UCHAR LlcSnapLen = 0, Byte0, Byte1; +- do +- { +- // get Ethernet protocol field +- Protocol = (USHORT)((pSrcBufVA[12] << 8) + pSrcBufVA[13]); +- if (Protocol <= 1500) +- { +- // get Ethernet protocol field from LLC/SNAP +- if (Sniff2BytesFromNdisBuffer(PacketInfo.pFirstBuffer, LENGTH_802_3 + 6, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) +- break; +- +- Protocol = (USHORT)((Byte0 << 8) + Byte1); +- LlcSnapLen = 8; +- } +- +- // always AC_BE for non-IP packet +- if (Protocol != 0x0800) +- break; +- +- // get IP header +- if (Sniff2BytesFromNdisBuffer(PacketInfo.pFirstBuffer, LENGTH_802_3 + LlcSnapLen, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) +- break; +- +- // return AC_BE if packet is not IPv4 +- if ((Byte0 & 0xf0) != 0x40) +- break; +- +- FlgIsIP = 1; +- UserPriority = (Byte1 & 0xe0) >> 5; +- QueIdx = MapUserPriorityToAccessCategory[UserPriority]; +- +- // TODO: have to check ACM bit. apply TSPEC if ACM is ON +- // TODO: downgrade UP & QueIdx before passing ACM +- /* +- Under WMM ACM control, we dont need to check the bit; +- Or when a TSPEC is built for VO but we will change to issue +- BA session for BE here, so we will not use BA to send VO packets. +- */ +- if (pAd->CommonCfg.APEdcaParm.bACM[QueIdx]) +- { +- UserPriority = 0; +- QueIdx = QID_AC_BE; +- } +- } while (FALSE); +- } +- +- RTMP_SET_PACKET_UP(pPacket, UserPriority); +- +- +- +- // Make sure SendTxWait queue resource won't be used by other threads +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE) +- { +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +-#ifdef BLOCK_NET_IF +- StopNetIfQueue(pAd, QueIdx, pPacket); +-#endif // BLOCK_NET_IF // +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- +- return NDIS_STATUS_FAILURE; +- } +- else +- { +- InsertTailQueueAc(pAd, pEntry, &pAd->TxSwQueue[QueIdx], PACKET_TO_QUEUE_ENTRY(pPacket)); +- } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&& +- IS_HT_STA(pEntry)) +- { +- //PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; +- if (((pEntry->TXBAbitmap & (1<BADeclineBitmap & (1<PortSecured == WPA_802_1X_PORT_SECURED) +- // For IOT compatibility, if +- // 1. It is Ralink chip or +- // 2. It is OPEN or AES mode, +- // then BA session can be bulit. +- && ((pEntry->ValidAsCLI && pAd->MlmeAux.APRalinkIe != 0x0) || +- (pEntry->WepStatus != Ndis802_11WEPEnabled && pEntry->WepStatus != Ndis802_11Encryption2Enabled)) +- ) +- { +- BAOriSessionSetUp(pAd, pEntry, UserPriority, 0, 10, FALSE); +- } +- } +-#endif // DOT11_N_SUPPORT // +- +- pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; // TODO: for debug only. to be removed +- return NDIS_STATUS_SUCCESS; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- This subroutine will scan through releative ring descriptor to find +- out avaliable free ring descriptor and compare with request size. +- +- Arguments: +- pAd Pointer to our adapter +- QueIdx Selected TX Ring +- +- Return Value: +- NDIS_STATUS_FAILURE Not enough free descriptor +- NDIS_STATUS_SUCCESS Enough free descriptor +- +- IRQL = PASSIVE_LEVEL +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-#ifdef RTMP_MAC_PCI +-NDIS_STATUS RTMPFreeTXDRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN UCHAR NumberRequired, +- IN PUCHAR FreeNumberIs) +-{ +- ULONG FreeNumber = 0; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- +- switch (QueIdx) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: +- /*case QID_HCCA:*/ +- if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx) +- FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1; +- else +- FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx + TX_RING_SIZE - pAd->TxRing[QueIdx].TxCpuIdx - 1; +- +- if (FreeNumber >= NumberRequired) +- Status = NDIS_STATUS_SUCCESS; +- break; +- +- case QID_MGMT: +- if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1; +- else +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - pAd->MgmtRing.TxCpuIdx - 1; +- +- if (FreeNumber >= NumberRequired) +- Status = NDIS_STATUS_SUCCESS; +- break; +- +- default: +- DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); +- break; +- } +- *FreeNumberIs = (UCHAR)FreeNumber; +- +- return (Status); +-} +-#endif // RTMP_MAC_PCI // +- +- +- +-VOID RTMPSendDisassociationFrame( +- IN PRTMP_ADAPTER pAd) +-{ +-} +- +-VOID RTMPSendNullFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, +- IN BOOLEAN bQosNull) +-{ +- UCHAR NullFrame[48]; +- ULONG Length; +- PHEADER_802_11 pHeader_802_11; +- +- +-#ifdef RALINK_ATE +- if(ATE_ON(pAd)) +- { +- return; +- } +-#endif // RALINK_ATE // +- +- // WPA 802.1x secured port control +- if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +-#ifdef WPA_SUPPLICANT_SUPPORT +- || (pAd->StaCfg.IEEE8021X == TRUE) +-#endif +- ) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- return; +- } +- +- NdisZeroMemory(NullFrame, 48); +- Length = sizeof(HEADER_802_11); +- +- pHeader_802_11 = (PHEADER_802_11) NullFrame; +- +- pHeader_802_11->FC.Type = BTYPE_DATA; +- pHeader_802_11->FC.SubType = SUBTYPE_NULL_FUNC; +- pHeader_802_11->FC.ToDs = 1; +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pAd->CommonCfg.Bssid); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid); +- +- if (pAd->CommonCfg.bAPSDForcePowerSave) +- { +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; +- } +- else +- { +- pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE) ? 1: 0; +- } +- pHeader_802_11->Duration = pAd->CommonCfg.Dsifs + RTMPCalcDuration(pAd, TxRate, 14); +- +- pAd->Sequence++; +- pHeader_802_11->Sequence = pAd->Sequence; +- +- // Prepare QosNull function frame +- if (bQosNull) +- { +- pHeader_802_11->FC.SubType = SUBTYPE_QOS_NULL; +- +- // copy QOS control bytes +- NullFrame[Length] = 0; +- NullFrame[Length+1] = 0; +- Length += 2;// if pad with 2 bytes for alignment, APSD will fail +- } +- +- HAL_KickOutNullFrameTx(pAd, 0, NullFrame, Length); +- +-} +- +-// IRQL = DISPATCH_LEVEL +-VOID RTMPSendRTSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, +- IN UCHAR QueIdx, +- IN UCHAR FrameGap) +-{ +-} +- +- +- +-// -------------------------------------------------------- +-// FIND ENCRYPT KEY AND DECIDE CIPHER ALGORITHM +-// Find the WPA key, either Group or Pairwise Key +-// LEAP + TKIP also use WPA key. +-// -------------------------------------------------------- +-// Decide WEP bit and cipher suite to be used. Same cipher suite should be used for whole fragment burst +-// In Cisco CCX 2.0 Leap Authentication +-// WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey +-// Instead of the SharedKey, SharedKey Length may be Zero. +-VOID STAFindCipherAlgorithm( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- NDIS_802_11_ENCRYPTION_STATUS Cipher; // To indicate cipher used for this packet +- UCHAR CipherAlg = CIPHER_NONE; // cipher alogrithm +- UCHAR KeyIdx = 0xff; +- PUCHAR pSrcBufVA; +- PCIPHER_KEY pKey = NULL; +- +- pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket); +- +- { +- // Select Cipher +- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) +- Cipher = pAd->StaCfg.GroupCipher; // Cipher for Multicast or Broadcast +- else +- Cipher = pAd->StaCfg.PairCipher; // Cipher for Unicast +- +- if (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) +- { +- ASSERT(pAd->SharedKey[BSS0][0].CipherAlg <= CIPHER_CKIP128); +- +- // 4-way handshaking frame must be clear +- if (!(TX_BLK_TEST_FLAG(pTxBlk, fTX_bClearEAPFrame)) && (pAd->SharedKey[BSS0][0].CipherAlg) && +- (pAd->SharedKey[BSS0][0].KeyLen)) +- { +- CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- KeyIdx = 0; +- } +- } +- else if (Cipher == Ndis802_11Encryption1Enabled) +- { +- KeyIdx = pAd->StaCfg.DefaultKeyId; +- } +- else if ((Cipher == Ndis802_11Encryption2Enabled) || +- (Cipher == Ndis802_11Encryption3Enabled)) +- { +- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) // multicast +- KeyIdx = pAd->StaCfg.DefaultKeyId; +- else if (pAd->SharedKey[BSS0][0].KeyLen) +- KeyIdx = 0; +- else +- KeyIdx = pAd->StaCfg.DefaultKeyId; +- } +- +- if (KeyIdx == 0xff) +- CipherAlg = CIPHER_NONE; +- else if ((Cipher == Ndis802_11EncryptionDisabled) || (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 0)) +- CipherAlg = CIPHER_NONE; +-#ifdef WPA_SUPPLICANT_SUPPORT +- else if ( pAd->StaCfg.WpaSupplicantUP && +- (Cipher == Ndis802_11Encryption1Enabled) && +- (pAd->StaCfg.IEEE8021X == TRUE) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- CipherAlg = CIPHER_NONE; +-#endif // WPA_SUPPLICANT_SUPPORT // +- else +- { +- //Header_802_11.FC.Wep = 1; +- CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; +- pKey = &pAd->SharedKey[BSS0][KeyIdx]; +- } +- } +- +- pTxBlk->CipherAlg = CipherAlg; +- pTxBlk->pKey = pKey; +-} +- +- +-VOID STABuildCommon802_11Header( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- +- HEADER_802_11 *pHeader_802_11; +-#ifdef QOS_DLS_SUPPORT +- BOOLEAN bDLSFrame = FALSE; +- INT DlsEntryIndex = 0; +-#endif // QOS_DLS_SUPPORT // +- +- // +- // MAKE A COMMON 802.11 HEADER +- // +- +- // normal wlan header size : 24 octets +- pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); +- +- pHeader_802_11 = (HEADER_802_11 *) &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- +- NdisZeroMemory(pHeader_802_11, sizeof(HEADER_802_11)); +- +- pHeader_802_11->FC.FrDs = 0; +- pHeader_802_11->FC.Type = BTYPE_DATA; +- pHeader_802_11->FC.SubType = ((TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) ? SUBTYPE_QDATA : SUBTYPE_DATA); +- +-#ifdef QOS_DLS_SUPPORT +- if (INFRA_ON(pAd)) +- { +- // Check if the frame can be sent through DLS direct link interface +- // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability) +- DlsEntryIndex = RTMPCheckDLSFrame(pAd, pTxBlk->pSrcBufHeader); +- if (DlsEntryIndex >= 0) +- bDLSFrame = TRUE; +- else +- bDLSFrame = FALSE; +- } +-#endif // QOS_DLS_SUPPORT // +- +- if (pTxBlk->pMacEntry) +- { +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bForceNonQoS)) +- { +- pHeader_802_11->Sequence = pTxBlk->pMacEntry->NonQosDataSeq; +- pTxBlk->pMacEntry->NonQosDataSeq = (pTxBlk->pMacEntry->NonQosDataSeq+1) & MAXSEQ; +- } +- else +- { +- { +- pHeader_802_11->Sequence = pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority]; +- pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority] = (pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ; +- } +- } +- } +- else +- { +- pHeader_802_11->Sequence = pAd->Sequence; +- pAd->Sequence = (pAd->Sequence+1) & MAXSEQ; // next sequence +- } +- +- pHeader_802_11->Frag = 0; +- +- pHeader_802_11->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData); +- +- { +- if (INFRA_ON(pAd)) +- { +-#ifdef QOS_DLS_SUPPORT +- if (bDLSFrame) +- { +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pTxBlk->pSrcBufHeader); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid); +- pHeader_802_11->FC.ToDs = 0; +- } +- else +-#endif // QOS_DLS_SUPPORT // +- { +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pAd->CommonCfg.Bssid); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pTxBlk->pSrcBufHeader); +- pHeader_802_11->FC.ToDs = 1; +- } +- } +- else if (ADHOC_ON(pAd)) +- { +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pTxBlk->pSrcBufHeader); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid); +- pHeader_802_11->FC.ToDs = 0; +- } +- } +- +- if (pTxBlk->CipherAlg != CIPHER_NONE) +- pHeader_802_11->FC.Wep = 1; +- +- // ----------------------------------------------------------------- +- // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. +- // ----------------------------------------------------------------- +- if (pAd->CommonCfg.bAPSDForcePowerSave) +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; +- else +- pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); +-} +- +-#ifdef DOT11_N_SUPPORT +-VOID STABuildCache802_11Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR *pHeader) +-{ +- MAC_TABLE_ENTRY *pMacEntry; +- PHEADER_802_11 pHeader80211; +- +- pHeader80211 = (PHEADER_802_11)pHeader; +- pMacEntry = pTxBlk->pMacEntry; +- +- // +- // Update the cached 802.11 HEADER +- // +- +- // normal wlan header size : 24 octets +- pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); +- +- // More Bit +- pHeader80211->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData); +- +- // Sequence +- pHeader80211->Sequence = pMacEntry->TxSeq[pTxBlk->UserPriority]; +- pMacEntry->TxSeq[pTxBlk->UserPriority] = (pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ; +- +- { +- // Check if the frame can be sent through DLS direct link interface +- // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability) +-#ifdef QOS_DLS_SUPPORT +- BOOLEAN bDLSFrame = FALSE; +- INT DlsEntryIndex = 0; +- +- DlsEntryIndex = RTMPCheckDLSFrame(pAd, pTxBlk->pSrcBufHeader); +- if (DlsEntryIndex >= 0) +- bDLSFrame = TRUE; +- else +- bDLSFrame = FALSE; +-#endif // QOS_DLS_SUPPORT // +- +- // The addr3 of normal packet send from DS is Dest Mac address. +-#ifdef QOS_DLS_SUPPORT +- if (bDLSFrame) +- { +- COPY_MAC_ADDR(pHeader80211->Addr1, pTxBlk->pSrcBufHeader); +- COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid); +- pHeader80211->FC.ToDs = 0; +- } +- else +-#endif // QOS_DLS_SUPPORT // +- if (ADHOC_ON(pAd)) +- COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid); +- else +- COPY_MAC_ADDR(pHeader80211->Addr3, pTxBlk->pSrcBufHeader); +- } +- +- // ----------------------------------------------------------------- +- // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. +- // ----------------------------------------------------------------- +- if (pAd->CommonCfg.bAPSDForcePowerSave) +- pHeader80211->FC.PwrMgmt = PWR_SAVE; +- else +- pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); +-} +-#endif // DOT11_N_SUPPORT // +- +-static inline PUCHAR STA_Build_ARalink_Frame_Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) +-{ +- PUCHAR pHeaderBufPtr; +- HEADER_802_11 *pHeader_802_11; +- PNDIS_PACKET pNextPacket; +- UINT32 nextBufLen; +- PQUEUE_ENTRY pQEntry; +- +- STAFindCipherAlgorithm(pAd, pTxBlk); +- STABuildCommon802_11Header(pAd, pTxBlk); +- +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; +- +- // steal "order" bit to mark "aggregation" +- pHeader_802_11->FC.Order = 1; +- +- // skip common header +- pHeaderBufPtr += pTxBlk->MpduHeaderLen; +- +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { +- // +- // build QOS Control bytes +- // +- *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); +- +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; +- pTxBlk->MpduHeaderLen += 2; +- } +- +- // padding at front of LLC header. LLC header should at 4-bytes aligment. +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR)ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- // For RA Aggregation, +- // put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format +- pQEntry = pTxBlk->TxPacketList.Head; +- pNextPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- nextBufLen = GET_OS_PKT_LEN(pNextPacket); +- if (RTMP_GET_PACKET_VLAN(pNextPacket)) +- nextBufLen -= LENGTH_802_1Q; +- +- *pHeaderBufPtr = (UCHAR)nextBufLen & 0xff; +- *(pHeaderBufPtr+1) = (UCHAR)(nextBufLen >> 8); +- +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += 2; +- +- return pHeaderBufPtr; +- +-} +- +-#ifdef DOT11_N_SUPPORT +-static inline PUCHAR STA_Build_AMSDU_Frame_Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) +-{ +- PUCHAR pHeaderBufPtr;//, pSaveBufPtr; +- HEADER_802_11 *pHeader_802_11; +- +- +- STAFindCipherAlgorithm(pAd, pTxBlk); +- STABuildCommon802_11Header(pAd, pTxBlk); +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; +- +- // skip common header +- pHeaderBufPtr += pTxBlk->MpduHeaderLen; +- +- // +- // build QOS Control bytes +- // +- *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); +- +- // +- // A-MSDU packet +- // +- *pHeaderBufPtr |= 0x80; +- +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; +- pTxBlk->MpduHeaderLen += 2; +- +- //pSaveBufPtr = pHeaderBufPtr; +- +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // +- // @@@ MpduHeaderLen excluding padding @@@ +- // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- return pHeaderBufPtr; +- +-} +- +- +-VOID STA_AMPDU_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- MAC_TABLE_ENTRY *pMacEntry; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- +- ASSERT(pTxBlk); +- +- while(pTxBlk->TxPacketList.Head) +- { +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if ( RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- continue; +- } +- +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); +- +- pMacEntry = pTxBlk->pMacEntry; +- if (pMacEntry->isCached) +- { +- // NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! +- NdisMoveMemory((PUCHAR)&pTxBlk->HeaderBuf[TXINFO_SIZE], (PUCHAR)&pMacEntry->CachedBuf[0], TXWI_SIZE + sizeof(HEADER_802_11)); +- pHeaderBufPtr = (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]); +- STABuildCache802_11Header(pAd, pTxBlk, pHeaderBufPtr); +- } +- else +- { +- STAFindCipherAlgorithm(pAd, pTxBlk); +- STABuildCommon802_11Header(pAd, pTxBlk); +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- } +- +- +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; +- +- // skip common header +- pHeaderBufPtr += pTxBlk->MpduHeaderLen; +- +- // +- // build QOS Control bytes +- // +- *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; +- pTxBlk->MpduHeaderLen += 2; +- +- // +- // build HTC+ +- // HTC control filed following QoS field +- // +- if ((pAd->CommonCfg.bRdg == TRUE) && CLIENT_STATUS_TEST_FLAG(pTxBlk->pMacEntry, fCLIENT_STATUS_RDG_CAPABLE)) +- { +- if (pMacEntry->isCached == FALSE) +- { +- // mark HTC bit +- pHeader_802_11->FC.Order = 1; +- +- NdisZeroMemory(pHeaderBufPtr, 4); +- *(pHeaderBufPtr+3) |= 0x80; +- } +- pHeaderBufPtr += 4; +- pTxBlk->MpduHeaderLen += 4; +- } +- +- //pTxBlk->MpduHeaderLen = pHeaderBufPtr - pTxBlk->HeaderBuf - TXWI_SIZE - TXINFO_SIZE; +- ASSERT(pTxBlk->MpduHeaderLen >= 24); +- +- // skip 802.3 header +- pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- +- // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; +- } +- +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // +- // @@@ MpduHeaderLen excluding padding @@@ +- // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- { +- +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); +- pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += LENGTH_802_1_H; +- } +- +- } +- +- if (pMacEntry->isCached) +- { +- RTMPWriteTxWI_Cache(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- } +- else +- { +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- +- NdisZeroMemory((PUCHAR)(&pMacEntry->CachedBuf[0]), sizeof(pMacEntry->CachedBuf)); +- NdisMoveMemory((PUCHAR)(&pMacEntry->CachedBuf[0]), (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), (pHeaderBufPtr - (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE]))); +- pMacEntry->isCached = TRUE; +- } +- +- // calculate Transmitted AMPDU count and ByteCount +- { +- pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u.LowPart ++; +- pAd->RalinkCounters.TransmittedOctetsInAMPDUCount.QuadPart += pTxBlk->SrcBufLen; +- } +- +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); +- +- HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber); +- +- // +- // Kick out Tx +- // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- } +- +-} +- +- +-VOID STA_AMSDU_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT subFramePayloadLen = 0; // AMSDU Subframe length without AMSDU-Header / Padding. +- USHORT totalMPDUSize=0; +- UCHAR *subFrameHeader; +- UCHAR padding = 0; +- USHORT FirstTx = 0, LastTxIdx = 0; +- BOOLEAN bVLANPkt; +- int frameNum = 0; +- PQUEUE_ENTRY pQEntry; +- +- +- ASSERT(pTxBlk); +- +- ASSERT((pTxBlk->TxPacketList.Number > 1)); +- +- while(pTxBlk->TxPacketList.Head) +- { +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- continue; +- } +- +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); +- +- // skip 802.3 header +- pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- +- // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; +- } +- +- if (frameNum == 0) +- { +- pHeaderBufPtr = STA_Build_AMSDU_Frame_Header(pAd, pTxBlk); +- +- // NOTE: TxWI->MPDUtotalByteCount will be updated after final frame was handled. +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- } +- else +- { +- pHeaderBufPtr = &pTxBlk->HeaderBuf[0]; +- padding = ROUND_UP(LENGTH_AMSDU_SUBFRAMEHEAD + subFramePayloadLen, 4) - (LENGTH_AMSDU_SUBFRAMEHEAD + subFramePayloadLen); +- NdisZeroMemory(pHeaderBufPtr, padding + LENGTH_AMSDU_SUBFRAMEHEAD); +- pHeaderBufPtr += padding; +- pTxBlk->MpduHeaderLen = padding; +- } +- +- // +- // A-MSDU subframe +- // DA(6)+SA(6)+Length(2) + LLC/SNAP Encap +- // +- subFrameHeader = pHeaderBufPtr; +- subFramePayloadLen = pTxBlk->SrcBufLen; +- +- NdisMoveMemory(subFrameHeader, pTxBlk->pSrcBufHeader, 12); +- +- +- pHeaderBufPtr += LENGTH_AMSDU_SUBFRAMEHEAD; +- pTxBlk->MpduHeaderLen += LENGTH_AMSDU_SUBFRAMEHEAD; +- +- +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); +- +- subFramePayloadLen = pTxBlk->SrcBufLen; +- +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); +- pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += LENGTH_802_1_H; +- subFramePayloadLen += LENGTH_802_1_H; +- } +- +- // update subFrame Length field +- subFrameHeader[12] = (subFramePayloadLen & 0xFF00) >> 8; +- subFrameHeader[13] = subFramePayloadLen & 0xFF; +- +- totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; +- +- if (frameNum ==0) +- FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); +- else +- LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); +- +- frameNum++; +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // calculate Transmitted AMSDU Count and ByteCount +- { +- pAd->RalinkCounters.TransmittedAMSDUCount.u.LowPart ++; +- pAd->RalinkCounters.TransmittedOctetsInAMSDU.QuadPart += totalMPDUSize; +- } +- +- } +- +- HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx); +- HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx); +- +- // +- // Kick out Tx +- // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); +-} +-#endif // DOT11_N_SUPPORT // +- +-VOID STA_Legacy_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- +- ASSERT(pTxBlk); +- +- +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- if (pTxBlk->TxFrameType == TX_MCAST_FRAME) +- { +- INC_COUNTER64(pAd->WlanCounters.MulticastTransmittedFrameCount); +- } +- +- if (RTMP_GET_PACKET_RTS(pTxBlk->pPacket)) +- TX_BLK_SET_FLAG(pTxBlk, fTX_bRtsRequired); +- else +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bRtsRequired); +- +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); +- +- if (pTxBlk->TxRate < pAd->CommonCfg.MinTxRate) +- pTxBlk->TxRate = pAd->CommonCfg.MinTxRate; +- +- STAFindCipherAlgorithm(pAd, pTxBlk); +- STABuildCommon802_11Header(pAd, pTxBlk); +- +- +- // skip 802.3 header +- pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- +- // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; +- } +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; +- +- // skip common header +- pHeaderBufPtr += pTxBlk->MpduHeaderLen; +- +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { +- // +- // build QOS Control bytes +- // +- *(pHeaderBufPtr) = ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx]<<5)); +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; +- pTxBlk->MpduHeaderLen += 2; +- } +- +- // The remaining content of MPDU header should locate at 4-octets aligment +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- { +- +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- // +- // if original Ethernet frame contains no LLC/SNAP, +- // then an extra LLC/SNAP encap is required +- // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- UCHAR vlan_size; +- +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); +- pHeaderBufPtr += 6; +- // skip vlan tag +- vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += LENGTH_802_1_H; +- } +- +- } +- +- // +- // prepare for TXWI +- // use Wcid as Key Index +- // +- +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); +- +- HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber); +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // +- // Kick out Tx +- // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); +-} +- +- +-VOID STA_ARalink_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) +-{ +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT totalMPDUSize=0; +- USHORT FirstTx, LastTxIdx; +- int frameNum = 0; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- +- +- ASSERT(pTxBlk); +- +- ASSERT((pTxBlk->TxPacketList.Number== 2)); +- +- +- FirstTx = LastTxIdx = 0; // Is it ok init they as 0? +- while(pTxBlk->TxPacketList.Head) +- { +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- continue; +- } +- +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); +- +- // skip 802.3 header +- pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- +- // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; +- } +- +- if (frameNum == 0) +- { // For first frame, we need to create the 802.11 header + padding(optional) + RA-AGG-LEN + SNAP Header +- +- pHeaderBufPtr = STA_Build_ARalink_Frame_Header(pAd, pTxBlk); +- +- // It's ok write the TxWI here, because the TxWI->MPDUtotalByteCount +- // will be updated after final frame was handled. +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- +- +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); +- +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); +- pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += LENGTH_802_1_H; +- } +- } +- else +- { // For second aggregated frame, we need create the 802.3 header to headerBuf, because PCI will copy it to SDPtr0. +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[0]; +- pTxBlk->MpduHeaderLen = 0; +- +- // A-Ralink sub-sequent frame header is the same as 802.3 header. +- // DA(6)+SA(6)+FrameType(2) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader, 12); +- pHeaderBufPtr += 12; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen = LENGTH_ARALINK_SUBFRAMEHEAD; +- } +- +- totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; +- +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); +- if (frameNum ==0) +- FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); +- else +- LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); +- +- frameNum++; +- +- pAd->RalinkCounters.OneSecTxAggregationCount++; +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- } +- +- HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx); +- HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx); +- +- // +- // Kick out Tx +- // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); +- +-} +- +- +-VOID STA_Fragment_Frame_Tx( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) +-{ +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- UCHAR fragNum = 0; +- PACKET_INFO PacketInfo; +- USHORT EncryptionOverhead = 0; +- UINT32 FreeMpduSize, SrcRemainingBytes; +- USHORT AckDuration; +- UINT NextMpduSize; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- HTTRANSMIT_SETTING *pTransmit; +- +- +- ASSERT(pTxBlk); +- +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return; +- } +- +- ASSERT(TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag)); +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); +- +- STAFindCipherAlgorithm(pAd, pTxBlk); +- STABuildCommon802_11Header(pAd, pTxBlk); +- +- if (pTxBlk->CipherAlg == CIPHER_TKIP) +- { +- pTxBlk->pPacket = duplicate_pkt_with_TKIP_MIC(pAd, pTxBlk->pPacket); +- if (pTxBlk->pPacket == NULL) +- return; +- RTMP_QueryPacketInfo(pTxBlk->pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, &pTxBlk->SrcBufLen); +- } +- +- // skip 802.3 header +- pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- +- +- // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; +- } +- +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *)pHeaderBufPtr; +- +- +- // skip common header +- pHeaderBufPtr += pTxBlk->MpduHeaderLen; +- +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { +- // +- // build QOS Control bytes +- // +- *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); +- +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; +- pTxBlk->MpduHeaderLen += 2; +- } +- +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- +- +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- // +- // if original Ethernet frame contains no LLC/SNAP, +- // then an extra LLC/SNAP encap is required +- // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- UCHAR vlan_size; +- +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); +- pHeaderBufPtr += 6; +- // skip vlan tag +- vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; +- // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2); +- pHeaderBufPtr += 2; +- pTxBlk->MpduHeaderLen += LENGTH_802_1_H; +- } +- +- +- // If TKIP is used and fragmentation is required. Driver has to +- // append TKIP MIC at tail of the scatter buffer +- // MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC +- if (pTxBlk->CipherAlg == CIPHER_TKIP) +- { +- RTMPCalculateMICValue(pAd, pTxBlk->pPacket, pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey, 0); +- +- // NOTE: DON'T refer the skb->len directly after following copy. Becasue the length is not adjust +- // to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. +- NdisMoveMemory(pTxBlk->pSrcBufData + pTxBlk->SrcBufLen, &pAd->PrivateInfo.Tx.MIC[0], 8); +- //skb_put((RTPKT_TO_OSPKT(pTxBlk->pPacket))->tail, 8); +- pTxBlk->SrcBufLen += 8; +- pTxBlk->TotalFrameLen += 8; +- pTxBlk->CipherAlg = CIPHER_TKIP_NO_MIC; +- } +- +- // +- // calcuate the overhead bytes that encryption algorithm may add. This +- // affects the calculate of "duration" field +- // +- if ((pTxBlk->CipherAlg == CIPHER_WEP64) || (pTxBlk->CipherAlg == CIPHER_WEP128)) +- EncryptionOverhead = 8; //WEP: IV[4] + ICV[4]; +- else if (pTxBlk->CipherAlg == CIPHER_TKIP_NO_MIC) +- EncryptionOverhead = 12;//TKIP: IV[4] + EIV[4] + ICV[4], MIC will be added to TotalPacketLength +- else if (pTxBlk->CipherAlg == CIPHER_TKIP) +- EncryptionOverhead = 20;//TKIP: IV[4] + EIV[4] + ICV[4] + MIC[8] +- else if (pTxBlk->CipherAlg == CIPHER_AES) +- EncryptionOverhead = 16; // AES: IV[4] + EIV[4] + MIC[8] +- else +- EncryptionOverhead = 0; +- +- pTransmit = pTxBlk->pTransmit; +- // Decide the TX rate +- if (pTransmit->field.MODE == MODE_CCK) +- pTxBlk->TxRate = pTransmit->field.MCS; +- else if (pTransmit->field.MODE == MODE_OFDM) +- pTxBlk->TxRate = pTransmit->field.MCS + RATE_FIRST_OFDM_RATE; +- else +- pTxBlk->TxRate = RATE_6_5; +- +- // decide how much time an ACK/CTS frame will consume in the air +- if (pTxBlk->TxRate <= RATE_LAST_OFDM_RATE) +- AckDuration = RTMPCalcDuration(pAd, pAd->CommonCfg.ExpectedACKRate[pTxBlk->TxRate], 14); +- else +- AckDuration = RTMPCalcDuration(pAd, RATE_6_5, 14); +- +- // Init the total payload length of this frame. +- SrcRemainingBytes = pTxBlk->SrcBufLen; +- +- pTxBlk->TotalFragNum = 0xff; +- +- do { +- +- FreeMpduSize = pAd->CommonCfg.FragmentThreshold - LENGTH_CRC; +- +- FreeMpduSize -= pTxBlk->MpduHeaderLen; +- +- if (SrcRemainingBytes <= FreeMpduSize) +- { // this is the last or only fragment +- +- pTxBlk->SrcBufLen = SrcRemainingBytes; +- +- pHeader_802_11->FC.MoreFrag = 0; +- pHeader_802_11->Duration = pAd->CommonCfg.Dsifs + AckDuration; +- +- // Indicate the lower layer that this's the last fragment. +- pTxBlk->TotalFragNum = fragNum; +- } +- else +- { // more fragment is required +- +- pTxBlk->SrcBufLen = FreeMpduSize; +- +- NextMpduSize = min(((UINT)SrcRemainingBytes - pTxBlk->SrcBufLen), ((UINT)pAd->CommonCfg.FragmentThreshold)); +- pHeader_802_11->FC.MoreFrag = 1; +- pHeader_802_11->Duration = (3 * pAd->CommonCfg.Dsifs) + (2 * AckDuration) + RTMPCalcDuration(pAd, pTxBlk->TxRate, NextMpduSize + EncryptionOverhead); +- } +- +- if (fragNum == 0) +- pTxBlk->FrameGap = IFS_HTTXOP; +- else +- pTxBlk->FrameGap = IFS_SIFS; +- +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- +- HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, &FreeNumber); +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // Update the frame number, remaining size of the NDIS packet payload. +- +- // space for 802.11 header. +- if (fragNum == 0 && pTxBlk->pExtraLlcSnapEncap) +- pTxBlk->MpduHeaderLen -= LENGTH_802_1_H; +- +- fragNum++; +- SrcRemainingBytes -= pTxBlk->SrcBufLen; +- pTxBlk->pSrcBufData += pTxBlk->SrcBufLen; +- +- pHeader_802_11->Frag++; // increase Frag # +- +- }while(SrcRemainingBytes > 0); +- +- // +- // Kick out Tx +- // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); +-} +- +- +-#define RELEASE_FRAMES_OF_TXBLK(_pAd, _pTxBlk, _pQEntry, _Status) \ +- while(_pTxBlk->TxPacketList.Head) \ +- { \ +- _pQEntry = RemoveHeadQueue(&_pTxBlk->TxPacketList); \ +- RELEASE_NDIS_PACKET(_pAd, QUEUE_ENTRY_TO_PACKET(_pQEntry), _Status); \ +- } +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Copy frame from waiting queue into relative ring buffer and set +- appropriate ASIC register to kick hardware encryption before really +- sent out to air. +- +- Arguments: +- pAd Pointer to our adapter +- PNDIS_PACKET Pointer to outgoing Ndis frame +- NumberOfFrag Number of fragment required +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS STAHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx) +-{ +- NDIS_PACKET *pPacket; +- PQUEUE_ENTRY pQEntry; +- +- // --------------------------------------------- +- // STEP 0. DO SANITY CHECK AND SOME EARLY PREPARATION. +- // --------------------------------------------- +- // +- ASSERT(pTxBlk->TxPacketList.Number); +- if (pTxBlk->TxPacketList.Head == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("pTxBlk->TotalFrameNum == %ld!\n", pTxBlk->TxPacketList.Number)); +- return NDIS_STATUS_FAILURE; +- } +- +- pPacket = QUEUE_ENTRY_TO_PACKET(pTxBlk->TxPacketList.Head); +- +- +- // ------------------------------------------------------------------ +- // STEP 1. WAKE UP PHY +- // outgoing frame always wakeup PHY to prevent frame lost and +- // turn off PSM bit to improve performance +- // ------------------------------------------------------------------ +- // not to change PSM bit, just send this frame out? +- if ((pAd->StaCfg.Psm == PWR_SAVE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT_RAW(RT_DEBUG_INFO, ("AsicForceWakeup At HardTx\n")); +-#ifdef RTMP_MAC_PCI +- AsicForceWakeup(pAd, TRUE); +-#endif // RTMP_MAC_PCI // +- } +- +- // It should not change PSM bit, when APSD turn on. +- if ((!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) && (pAd->CommonCfg.bAPSDForcePowerSave == FALSE)) +- || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) +- || (RTMP_GET_PACKET_WAI(pTxBlk->pPacket))) +- { +- if ((pAd->StaCfg.Psm == PWR_SAVE) && +- (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP)) +- RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); +- } +- +- switch (pTxBlk->TxFrameType) +- { +-#ifdef DOT11_N_SUPPORT +- case TX_AMPDU_FRAME: +- STA_AMPDU_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_AMSDU_FRAME: +- STA_AMSDU_Frame_Tx(pAd, pTxBlk); +- break; +-#endif // DOT11_N_SUPPORT // +- case TX_LEGACY_FRAME: +- STA_Legacy_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_MCAST_FRAME: +- STA_Legacy_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_RALINK_FRAME: +- STA_ARalink_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_FRAG_FRAME: +- STA_Fragment_Frame_Tx(pAd, pTxBlk); +- break; +- default: +- { +- // It should not happened! +- DBGPRINT(RT_DEBUG_ERROR, ("Send a pacekt was not classified!! It should not happen!\n")); +- while(pTxBlk->TxPacketList.Number) +- { +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (pPacket) +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- } +- break; +- } +- +- return (NDIS_STATUS_SUCCESS); +- +-} +- +-ULONG HashBytesPolynomial(UCHAR *value, unsigned int len) +-{ +- unsigned char *word = value; +- unsigned int ret = 0; +- unsigned int i; +- +- for(i=0; i < len; i++) +- { +- int mod = i % 32; +- ret ^=(unsigned int) (word[i]) << mod; +- ret ^=(unsigned int) (word[i]) >> (32 - mod); +- } +- return ret; +-} +- +-VOID Sta_Announce_or_Forward_802_3_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID) +-{ +- if (TRUE +- ) +- { +- announce_802_3_packet(pAd, pPacket); +- } +- else +- { +- // release packet +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +-} +diff --git a/drivers/staging/rt3090/sta/sanity.c b/drivers/staging/rt3090/sta/sanity.c +deleted file mode 100644 +index aeda15b..0000000 +--- a/drivers/staging/rt3090/sta/sanity.c ++++ /dev/null +@@ -1,382 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- sanity.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2004-09-01 add WMM support +-*/ +- +-#include "../rt_config.h" +- +- +-extern UCHAR CISCO_OUI[]; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +- */ +-BOOLEAN MlmeStartReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen) +-{ +- MLME_START_REQ_STRUCT *Info; +- +- Info = (MLME_START_REQ_STRUCT *)(Msg); +- +- if (Info->SsidLen > MAX_LEN_OF_SSID) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqSanity fail - wrong SSID length\n")); +- return FALSE; +- } +- +- *pSsidLen = Info->SsidLen; +- NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerAssocRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT USHORT *pAid, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pAddHtInfoLen, +- OUT UCHAR *pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, +- OUT UCHAR *pCkipFlag) +-{ +- CHAR IeType, *Ptr; +- PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PEID_STRUCT pEid; +- ULONG Length = 0; +- +- *pNewExtChannelOffset = 0xff; +- *pHtCapabilityLen = 0; +- *pAddHtInfoLen = 0; +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- Ptr = (PCHAR)pFrame->Octet; +- Length += LENGTH_802_11; +- +- NdisMoveMemory(pCapabilityInfo, &pFrame->Octet[0], 2); +- Length += 2; +- NdisMoveMemory(pStatus, &pFrame->Octet[2], 2); +- Length += 2; +- *pCkipFlag = 0; +- *pExtRateLen = 0; +- pEdcaParm->bValid = FALSE; +- +- if (*pStatus != MLME_SUCCESS) +- return TRUE; +- +- NdisMoveMemory(pAid, &pFrame->Octet[4], 2); +- Length += 2; +- +- // Aid already swaped byte order in RTMPFrameEndianChange() for big endian platform +- *pAid = (*pAid) & 0x3fff; // AID is low 14-bit +- +- // -- get supported rates from payload and advance the pointer +- IeType = pFrame->Octet[6]; +- *pSupRateLen = pFrame->Octet[7]; +- if ((IeType != IE_SUPP_RATES) || (*pSupRateLen > MAX_LEN_OF_SUPPORTED_RATES)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspSanity fail - wrong SupportedRates IE\n")); +- return FALSE; +- } +- else +- NdisMoveMemory(SupRate, &pFrame->Octet[8], *pSupRateLen); +- +- +- Length = Length + 2 + *pSupRateLen; +- +- // many AP implement proprietary IEs in non-standard order, we'd better +- // tolerate mis-ordered IEs to get best compatibility +- pEid = (PEID_STRUCT) &pFrame->Octet[8 + (*pSupRateLen)]; +- +- // get variable fields from payload and advance the pointer +- while ((Length + 2 + pEid->Len) <= MsgLen) +- { +- switch (pEid->Eid) +- { +- case IE_EXT_SUPP_RATES: +- if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); +- *pExtRateLen = pEid->Len; +- } +- break; +- +- case IE_HT_CAP: +- case IE_HT_CAP2: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! +- { +- NdisMoveMemory(pHtCapability, pEid->Octet, SIZE_HT_CAP_IE); +- +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); +- +- *pHtCapabilityLen = SIZE_HT_CAP_IE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_HT_CAP. \n")); +- } +- +- break; +-#ifdef DOT11_N_SUPPORT +- case IE_ADD_HT: +- case IE_ADD_HT2: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) +- { +- // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only +- // copy first sizeof(ADD_HT_INFO_IE) +- NdisMoveMemory(pAddHtInfo, pEid->Octet, sizeof(ADD_HT_INFO_IE)); +- +- *(USHORT *)(&pAddHtInfo->AddHtInfo2) = cpu2le16(*(USHORT *)(&pAddHtInfo->AddHtInfo2)); +- *(USHORT *)(&pAddHtInfo->AddHtInfo3) = cpu2le16(*(USHORT *)(&pAddHtInfo->AddHtInfo3)); +- +- *pAddHtInfoLen = SIZE_ADD_HT_INFO_IE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_ADD_HT. \n")); +- } +- +- break; +- case IE_SECONDARY_CH_OFFSET: +- if (pEid->Len == 1) +- { +- *pNewExtChannelOffset = pEid->Octet[0]; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); +- } +-#endif // DOT11_N_SUPPORT // +- break; +- +- case IE_VENDOR_SPECIFIC: +- // handle WME PARAMTER ELEMENT +- if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) && (pEid->Len == 24)) +- { +- PUCHAR ptr; +- int i; +- +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- //pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = (PUCHAR)&pEid->Octet[8]; +- for (i=0; i<4; i++) +- { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr+1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr+1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr+2) + 256 * (*(ptr+3)); // in unit of 32-us +- ptr += 4; // point to next AC +- } +- } +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspSanity - ignore unrecognized EID = %d\n", pEid->Eid)); +- break; +- } +- +- Length = Length + 2 + pEid->Len; +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- MLME message sanity check +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN PeerProbeReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen) +-{ +- UCHAR Idx; +- UCHAR RateLen; +- CHAR IeType; +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- +- if ((pFrame->Octet[0] != IE_SSID) || (pFrame->Octet[1] > MAX_LEN_OF_SSID)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerProbeReqSanity fail - wrong SSID IE(Type=%d,Len=%d)\n",pFrame->Octet[0],pFrame->Octet[1])); +- return FALSE; +- } +- +- *pSsidLen = pFrame->Octet[1]; +- NdisMoveMemory(Ssid, &pFrame->Octet[2], *pSsidLen); +- +- Idx = *pSsidLen + 2; +- +- // -- get supported rates from payload and advance the pointer +- IeType = pFrame->Octet[Idx]; +- RateLen = pFrame->Octet[Idx + 1]; +- if (IeType != IE_SUPP_RATES) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerProbeReqSanity fail - wrong SupportRates IE(Type=%d,Len=%d)\n",pFrame->Octet[Idx],pFrame->Octet[Idx+1])); +- return FALSE; +- } +- else +- { +- if ((pAd->CommonCfg.PhyMode == PHY_11G) && (RateLen < 8)) +- return (FALSE); +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-BOOLEAN GetTimBit( +- IN CHAR *Ptr, +- IN USHORT Aid, +- OUT UCHAR *TimLen, +- OUT UCHAR *BcastFlag, +- OUT UCHAR *DtimCount, +- OUT UCHAR *DtimPeriod, +- OUT UCHAR *MessageToMe) +-{ +- UCHAR BitCntl, N1, N2, MyByte, MyBit; +- CHAR *IdxPtr; +- +- IdxPtr = Ptr; +- +- IdxPtr ++; +- *TimLen = *IdxPtr; +- +- // get DTIM Count from TIM element +- IdxPtr ++; +- *DtimCount = *IdxPtr; +- +- // get DTIM Period from TIM element +- IdxPtr++; +- *DtimPeriod = *IdxPtr; +- +- // get Bitmap Control from TIM element +- IdxPtr++; +- BitCntl = *IdxPtr; +- +- if ((*DtimCount == 0) && (BitCntl & 0x01)) +- *BcastFlag = TRUE; +- else +- *BcastFlag = FALSE; +- +- // Parse Partial Virtual Bitmap from TIM element +- N1 = BitCntl & 0xfe; // N1 is the first bitmap byte# +- N2 = *TimLen - 4 + N1; // N2 is the last bitmap byte# +- +- if ((Aid < (N1 << 3)) || (Aid >= ((N2 + 1) << 3))) +- *MessageToMe = FALSE; +- else +- { +- MyByte = (Aid >> 3) - N1; // my byte position in the bitmap byte-stream +- MyBit = Aid % 16 - ((MyByte & 0x01)? 8:0); +- +- IdxPtr += (MyByte + 1); +- +- //if (*IdxPtr) +- // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr)); +- +- if (*IdxPtr & (0x01 << MyBit)) +- *MessageToMe = TRUE; +- else +- *MessageToMe = FALSE; +- } +- +- return TRUE; +-} +diff --git a/drivers/staging/rt3090/sta/sync.c b/drivers/staging/rt3090/sta/sync.c +deleted file mode 100644 +index 2520e03..0000000 +--- a/drivers/staging/rt3090/sta/sync.c ++++ /dev/null +@@ -1,1840 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- sync.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- John Chang 2004-09-01 modified for rt2561/2661 +- Jan Lee 2006-08-01 modified for rt2860 for 802.11n +-*/ +- +-#include "../rt_config.h" +- +- +-#define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) // 2 sec +- +-/* +- ========================================================================== +- Description: +- The sync state machine, +- Parameters: +- Sm - pointer to the state machine +- Note: +- the state machine looks like the following +- +- ========================================================================== +- */ +-VOID SyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]) +-{ +- StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, (STATE_MACHINE_FUNC)Drop, SYNC_IDLE, SYNC_MACHINE_BASE); +- +- // column 1 +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)MlmeScanReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)MlmeJoinReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)MlmeStartReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeacon); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction); +- +- //column 2 +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtJoinAction); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_BEACON_TIMEOUT, (STATE_MACHINE_FUNC)BeaconTimeoutAtJoinAction); +- +- // column 3 +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_PROBE_RSP, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_SCAN_TIMEOUT, (STATE_MACHINE_FUNC)ScanTimeoutAction); +- +- // timer init +- RTMPInitTimer(pAd, &pAd->MlmeAux.BeaconTimer, GET_TIMER_FUNCTION(BeaconTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.ScanTimer, GET_TIMER_FUNCTION(ScanTimeout), pAd, FALSE); +-} +- +-/* +- ========================================================================== +- Description: +- Beacon timeout handler, executed in timer thread +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID BeaconTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- DBGPRINT(RT_DEBUG_TRACE,("SYNC - BeaconTimeout\n")); +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- return; +- +-#ifdef DOT11_N_SUPPORT +- if ((pAd->CommonCfg.BBPCurrentBW == BW_40) +- ) +- { +- UCHAR BBPValue = 0; +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- BBPValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr)); +- } +-#endif // DOT11_N_SUPPORT // +- +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_BEACON_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); +-} +- +-/* +- ========================================================================== +- Description: +- Scan timeout handler, executed in timer thread +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID ScanTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- +- +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- return; +- +- if (MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL)) +- { +- RTMP_MLME_HANDLER(pAd); +-} +- else +- { +- // To prevent SyncMachine.CurrState is SCAN_LISTEN forever. +- pAd->MlmeAux.Channel = 0; +- ScanNextChannel(pAd); +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- } +-} +- +-/* +- ========================================================================== +- Description: +- MLME SCAN req state machine procedure +- ========================================================================== +- */ +-VOID MlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; +- BOOLEAN TimerCancelled; +- ULONG Now; +- USHORT Status; +- PHEADER_802_11 pHdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- +- // Check the total scan tries for one single OID command +- // If this is the CCX 2.0 Case, skip that! +- if ( !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeScanReqAction before Startup\n")); +- return; +- } +- +- // Increase the scan retry counters. +- pAd->StaCfg.ScanCnt++; +- +-#ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && +- (IDLE_ON(pAd)) && +- (pAd->StaCfg.bRadio == TRUE) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- { +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- AsicCheckCommanOk(pAd, PowerWakeCID); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - Issue Wake up command \n")); +- } +- else +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- } +- } +-#endif // RTMP_MAC_PCI // +- +- // first check the parameter sanity +- if (MlmeScanReqSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- &BssType, +- (PCHAR)Ssid, +- &SsidLen, +- &ScanType)) +- { +- +- // Check for channel load and noise hist request +- // Suspend MSDU only at scan request, not the last two mentioned +- // Suspend MSDU transmission here +- RTMPSuspendMsduTransmission(pAd); +- +- // +- // To prevent data lost. +- // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +- // And should send an NULL data with turned PSM bit off to AP, when scan progress done +- // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd))) +- { +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- pHdr80211 = (PHEADER_802_11) pOutBuffer; +- MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); +- pHdr80211->Duration = 0; +- pHdr80211->FC.Type = BTYPE_DATA; +- pHdr80211->FC.PwrMgmt = PWR_SAVE; +- +- // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame for off channel RM\n")); +- MlmeFreeMemory(pAd, pOutBuffer); +- RTMPusecDelay(5000); +- } +- } +- +- NdisGetSystemUpTime(&Now); +- pAd->StaCfg.LastScanTime = Now; +- // reset all the timers +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); +- +- // record desired BSS parameters +- pAd->MlmeAux.BssType = BssType; +- pAd->MlmeAux.ScanType = ScanType; +- pAd->MlmeAux.SsidLen = SsidLen; +- NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); +- +- // start from the first channel +- pAd->MlmeAux.Channel = FirstChannel(pAd); +- +- // Let BBP register at 20MHz to do scan +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); +- ScanNextChannel(pAd); +- } +- else +- { +- DBGPRINT_ERR(("SYNC - MlmeScanReqAction() sanity check fail\n")); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); +- } +-} +- +-/* +- ========================================================================== +- Description: +- MLME JOIN req state machine procedure +- ========================================================================== +- */ +-VOID MlmeJoinReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR BBPValue = 0; +- BSS_ENTRY *pBss; +- BOOLEAN TimerCancelled; +- HEADER_802_11 Hdr80211; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pSupRate = NULL; +- UCHAR SupRateLen; +- PUCHAR pExtRate = NULL; +- UCHAR ExtRateLen; +- UCHAR ASupRate[] = {0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C}; +- UCHAR ASupRateLen = sizeof(ASupRate)/sizeof(UCHAR); +- MLME_JOIN_REQ_STRUCT *pInfo = (MLME_JOIN_REQ_STRUCT *)(Elem->Msg); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); +- +-#ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && +- (IDLE_ON(pAd)) && +- (pAd->StaCfg.bRadio == TRUE) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- } +-#endif // RTMP_MAC_PCI // +- +- // reset all the timers +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +- +- pBss = &pAd->MlmeAux.SsidBssTab.BssEntry[pInfo->BssIdx]; +- +- // record the desired SSID & BSSID we're waiting for +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pBss->Bssid); +- +- // If AP's SSID is not hidden, it is OK for updating ssid to MlmeAux again. +- if (pBss->Hidden == 0) +- { +- RTMPZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, pBss->Ssid, pBss->SsidLen); +- pAd->MlmeAux.SsidLen = pBss->SsidLen; +- } +- +- pAd->MlmeAux.BssType = pBss->BssType; +- pAd->MlmeAux.Channel = pBss->Channel; +- pAd->MlmeAux.CentralChannel = pBss->CentralChannel; +- +-#ifdef EXT_BUILD_CHANNEL_LIST +- // Country IE of the AP will be evaluated and will be used. +- if ((pAd->StaCfg.IEEE80211dClientMode != Rt802_11_D_None) && +- (pBss->bHasCountryIE == TRUE)) +- { +- NdisMoveMemory(&pAd->CommonCfg.CountryCode[0], &pBss->CountryString[0], 2); +- if (pBss->CountryString[2] == 'I') +- pAd->CommonCfg.Geography = IDOR; +- else if (pBss->CountryString[2] == 'O') +- pAd->CommonCfg.Geography = ODOR; +- else +- pAd->CommonCfg.Geography = BOTH; +- BuildChannelListEx(pAd); +- } +-#endif // EXT_BUILD_CHANNEL_LIST // +- +- // Let BBP register at 20MHz to do scan +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); +- +- // switch channel and waiting for beacon timer +- AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE); +- AsicLockChannel(pAd, pAd->MlmeAux.Channel); +- +- +- RTMPSetTimer(&pAd->MlmeAux.BeaconTimer, JOIN_TIMEOUT); +- +- do +- { +- if (((pAd->CommonCfg.bIEEE80211H == 1) && +- (pAd->MlmeAux.Channel > 14) && +- RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) +-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier +- || (pAd->CommonCfg.CarrierDetect.Enable == TRUE) +-#endif // CARRIER_DETECTION_SUPPORT // +- ) +- { +- // +- // We can't send any Probe request frame to meet 802.11h. +- // +- if (pBss->Hidden == 0) +- break; +- } +- +- // +- // send probe request +- // +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- if (pAd->MlmeAux.Channel <= 14) +- { +- pSupRate = pAd->CommonCfg.SupRate; +- SupRateLen = pAd->CommonCfg.SupRateLen; +- pExtRate = pAd->CommonCfg.ExtRate; +- ExtRateLen = pAd->CommonCfg.ExtRateLen; +- } +- else +- { +- // +- // Overwrite Support Rate, CCK rate are not allowed +- // +- pSupRate = ASupRate; +- SupRateLen = ASupRateLen; +- ExtRateLen = 0; +- } +- +- if (pAd->MlmeAux.BssType == BSS_INFRA) +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, pAd->MlmeAux.Bssid, pAd->MlmeAux.Bssid); +- else +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &SupRateLen, +- SupRateLen, pSupRate, +- END_OF_ARGS); +- +- if (ExtRateLen) +- { +- ULONG Tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &ExtRateIe, +- 1, &ExtRateLen, +- ExtRateLen, pExtRate, +- END_OF_ARGS); +- FrameLen += Tmp; +- } +- +- +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- } +- } while (FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Switch to ch %d, Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x\n", +- pBss->Channel, pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5])); +- +- pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON; +-} +- +-/* +- ========================================================================== +- Description: +- MLME START Request state machine procedure, starting an IBSS +- ========================================================================== +- */ +-VOID MlmeStartReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen; +- BOOLEAN TimerCancelled; +- +- // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- LARGE_INTEGER TimeStamp; +- BOOLEAN Privacy; +- USHORT Status; +- +- // Init Variable IE structure +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +- pVIE->Length = 0; +- TimeStamp.u.LowPart = 0; +- TimeStamp.u.HighPart = 0; +- +- if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, (PCHAR)Ssid, &SsidLen)) +- { +- // reset all the timers +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +- +- // +- // Start a new IBSS. All IBSS parameters are decided now.... +- // +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - Start a new IBSS. All IBSS parameters are decided now.... \n")); +- pAd->MlmeAux.BssType = BSS_ADHOC; +- NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); +- pAd->MlmeAux.SsidLen = SsidLen; +- +- // generate a radom number as BSSID +- MacAddrRandomBssid(pAd, pAd->MlmeAux.Bssid); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - generate a radom number as BSSID \n")); +- +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- pAd->MlmeAux.CapabilityInfo = CAP_GENERATE(0,1,Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 1, 0); +- pAd->MlmeAux.BeaconPeriod = pAd->CommonCfg.BeaconPeriod; +- pAd->MlmeAux.AtimWin = pAd->StaCfg.AtimWin; +- pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; +- +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.CentralChannel; +- +- pAd->MlmeAux.SupRateLen= pAd->CommonCfg.SupRateLen; +- NdisMoveMemory(pAd->MlmeAux.SupRate, pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); +- pAd->MlmeAux.ExtRateLen = pAd->CommonCfg.ExtRateLen; +- NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES); +- RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +-#ifdef DOT11_N_SUPPORT +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo); +- pAd->MlmeAux.HtCapabilityLen = sizeof(HT_CAPABILITY_IE); +- // Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here. +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n")); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- pAd->MlmeAux.HtCapabilityLen = 0; +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); +- } +- // temporarily not support QOS in IBSS +- NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM)); +- +- AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE); +- AsicLockChannel(pAd, pAd->MlmeAux.Channel); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n", +- pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen)); +- +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); +- } +- else +- { +- DBGPRINT_ERR(("SYNC - MlmeStartReqAction() sanity check fail.\n")); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); +- } +-} +- +-/* +- ========================================================================== +- Description: +- peer sends beacon back when scanning +- ========================================================================== +- */ +-VOID PeerBeaconAtScanAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, +- SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe; +- CF_PARM CfParm; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; +- PFRAME_802_11 pFrame; +- LARGE_INTEGER TimeStamp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- USHORT LenVIE; +- UCHAR CkipFlag; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- +- // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); +- pFrame = (PFRAME_802_11) Elem->Msg; +- // Init Variable IE structure +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +- pVIE->Length = 0; +-#ifdef DOT11_N_SUPPORT +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); +-#endif // DOT11_N_SUPPORT // +- +- if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- (PCHAR)Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &CfParm, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { +- ULONG Idx; +- CHAR Rssi = 0; +- +- Idx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Idx != BSS_NOT_FOUND) +- Rssi = pAd->ScanTab.BssEntry[Idx].Rssi; +- +- Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- +- +-#ifdef DOT11_N_SUPPORT +- if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) +- HtCapabilityLen = SIZE_HT_CAP_IE; +-#endif // DOT11_N_SUPPORT // +- +- Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (PCHAR)Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +- if (pAd->ChannelList[pAd->CommonCfg.ChannelListIdx].bEffectedChannel == TRUE) +- { +- UCHAR RegClass; +- PeerBeaconAndProbeRspSanity2(pAd, Elem->Msg, Elem->MsgLen, &RegClass); +- TriEventTableSetEntry(pAd, &pAd->CommonCfg.TriggerEventTab, Bssid, &HtCapability, HtCapabilityLen, RegClass, Channel); +- } +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- if (Idx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- } +- +- } +- // sanity check fail, ignored +-} +- +-/* +- ========================================================================== +- Description: +- When waiting joining the (I)BSS, beacon received from external +- ========================================================================== +- */ +-VOID PeerBeaconAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, +- DtimCount, DtimPeriod, BcastFlag, NewChannel; +- LARGE_INTEGER TimeStamp; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; +- CF_PARM Cf; +- BOOLEAN TimerCancelled; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; +- USHORT Status; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- ULONG RalinkIe; +- ULONG Idx; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +-#ifdef DOT11_N_SUPPORT +- UCHAR CentralChannel; +- BOOLEAN bAllowNrate = FALSE; +-#endif // DOT11_N_SUPPORT // +- +- // Init Variable IE structure +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +- pVIE->Length = 0; +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); +- +- +- if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- (PCHAR)Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &Cf, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { +- // Disqualify 11b only adhoc when we are in 11g only adhoc mode +- if ((BssType == BSS_ADHOC) && (pAd->CommonCfg.PhyMode == PHY_11G) && ((SupRateLen+ExtRateLen)< 12)) +- return; +- +- // BEACON from desired BSS/IBSS found. We should be able to decide most +- // BSS parameters here. +- // Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION? +- // Do we need to receover back all parameters belonging to previous BSS? +- // A. Should be not. There's no back-door recover to previous AP. It still need +- // a new JOIN-AUTH-ASSOC sequence. +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", Channel)); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +- +- // Update RSSI to prevent No signal display when cards first initialized +- pAd->StaCfg.RssiSample.LastRssi0 = ConvertToRssi(pAd, Elem->Rssi0, RSSI_0); +- pAd->StaCfg.RssiSample.LastRssi1 = ConvertToRssi(pAd, Elem->Rssi1, RSSI_1); +- pAd->StaCfg.RssiSample.LastRssi2 = ConvertToRssi(pAd, Elem->Rssi2, RSSI_2); +- pAd->StaCfg.RssiSample.AvgRssi0 = pAd->StaCfg.RssiSample.LastRssi0; +- pAd->StaCfg.RssiSample.AvgRssi0X8 = pAd->StaCfg.RssiSample.AvgRssi0 << 3; +- pAd->StaCfg.RssiSample.AvgRssi1 = pAd->StaCfg.RssiSample.LastRssi1; +- pAd->StaCfg.RssiSample.AvgRssi1X8 = pAd->StaCfg.RssiSample.AvgRssi1 << 3; +- pAd->StaCfg.RssiSample.AvgRssi2 = pAd->StaCfg.RssiSample.LastRssi2; +- pAd->StaCfg.RssiSample.AvgRssi2X8 = pAd->StaCfg.RssiSample.AvgRssi2 << 3; +- +- // +- // We need to check if SSID only set to any, then we can record the current SSID. +- // Otherwise will cause hidden SSID association failed. +- // +- if (pAd->MlmeAux.SsidLen == 0) +- { +- NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); +- pAd->MlmeAux.SsidLen = SsidLen; +- } +- else +- { +- Idx = BssSsidTableSearch(&pAd->ScanTab, Bssid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Channel); +- +- if (Idx == BSS_NOT_FOUND) +- { +- CHAR Rssi = 0; +- Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (CHAR *) Ssid, SsidLen, BssType, BeaconPeriod, +- &Cf, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- if (Idx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo; +- } +- } +- else +- { +- // +- // Multiple SSID case, used correct CapabilityInfo +- // +- CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo; +- } +- } +- NdisMoveMemory(pAd->MlmeAux.Bssid, Bssid, MAC_ADDR_LEN); +- pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; +- pAd->MlmeAux.BssType = BssType; +- pAd->MlmeAux.BeaconPeriod = BeaconPeriod; +- pAd->MlmeAux.Channel = Channel; +- pAd->MlmeAux.AtimWin = AtimWin; +- pAd->MlmeAux.CfpPeriod = Cf.CfpPeriod; +- pAd->MlmeAux.CfpMaxDuration = Cf.CfpMaxDuration; +- pAd->MlmeAux.APRalinkIe = RalinkIe; +- +- // Copy AP's supported rate to MlmeAux for creating assoication request +- // Also filter out not supported rate +- pAd->MlmeAux.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); +- pAd->MlmeAux.ExtRateLen = ExtRateLen; +- NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +- +- NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16); +- +- +-#ifdef DOT11_N_SUPPORT +- if (((pAd->StaCfg.WepStatus != Ndis802_11WEPEnabled) && (pAd->StaCfg.WepStatus != Ndis802_11Encryption2Enabled)) +- || (pAd->CommonCfg.HT_DisallowTKIP == FALSE)) +- { +- bAllowNrate = TRUE; +- } +- +- pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset; +- pAd->MlmeAux.HtCapabilityLen = HtCapabilityLen; +- +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); +- // filter out un-supported ht rates +- if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && +- ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (bAllowNrate))) +- { +- RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, SIZE_ADD_HT_INFO_IE); +- +- // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability +- NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16); +- pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset; +- pAd->MlmeAux.HtCapabilityLen = SIZE_HT_CAP_IE; +- pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; +- if (PreNHtCapabilityLen > 0) +- pAd->StaActive.SupportedPhyInfo.bPreNHt = TRUE; +- RTMPCheckHt(pAd, BSSID_WCID, &HtCapability, &AddHtInfo); +- // Copy AP Parameter to StaActive. This is also in LinkUp. +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction! (MpduDensity=%d, MaxRAmpduFactor=%d, BW=%d)\n", +- pAd->StaActive.SupportedHtPhy.MpduDensity, pAd->StaActive.SupportedHtPhy.MaxRAmpduFactor, HtCapability.HtCapInfo.ChannelWidth)); +- +- if (AddHtInfoLen > 0) +- { +- CentralChannel = AddHtInfo.ControlChan; +- // Check again the Bandwidth capability of this AP. +- if ((AddHtInfo.ControlChan > 2)&& (AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- CentralChannel = AddHtInfo.ControlChan - 2; +- } +- else if ((AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- CentralChannel = AddHtInfo.ControlChan + 2; +- } +- +- // Check Error . +- if (pAd->MlmeAux.CentralChannel != CentralChannel) +- DBGPRINT(RT_DEBUG_ERROR, ("PeerBeaconAtJoinAction HT===>Beacon Central Channel = %d, Control Channel = %d. Mlmeaux CentralChannel = %d\n", CentralChannel, AddHtInfo.ControlChan, pAd->MlmeAux.CentralChannel)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction HT===>Central Channel = %d, Control Channel = %d, .\n", CentralChannel, AddHtInfo.ControlChan)); +- +- } +- +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- // To prevent error, let legacy AP must have same CentralChannel and Channel. +- if ((HtCapabilityLen == 0) && (PreNHtCapabilityLen == 0)) +- pAd->MlmeAux.CentralChannel = pAd->MlmeAux.Channel; +- +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- pAd->MlmeAux.NewExtChannelOffset = 0xff; +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); +- pAd->MlmeAux.HtCapabilityLen = 0; +- RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE); +- } +- +- RTMPUpdateMlmeRate(pAd); +- +- // copy QOS related information +- if ((pAd->CommonCfg.bWmmCapable) +-#ifdef DOT11_N_SUPPORT +- || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +-#endif // DOT11_N_SUPPORT // +- ) +- { +- NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, &EdcaParm, sizeof(EDCA_PARM)); +- NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisMoveMemory(&pAd->MlmeAux.APQosCapability, &QosCapability, sizeof(QOS_CAPABILITY_PARM)); +- } +- else +- { +- NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM)); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n", +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen)); +- +- if (AironetCellPowerLimit != 0xFF) +- { +- //We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power +- ChangeToCellPowerLimit(pAd, AironetCellPowerLimit); +- } +- else //Used the default TX Power Percentage. +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +- } +- // not to me BEACON, ignored +- } +- // sanity check fail, ignore this frame +-} +- +-/* +- ========================================================================== +- Description: +- receive BEACON from peer +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID PeerBeacon( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- CF_PARM CfParm; +- UCHAR SsidLen, MessageToMe=0, BssType, Channel, NewChannel, index=0; +- UCHAR DtimCount=0, DtimPeriod=0, BcastFlag=0; +- USHORT CapabilityInfo, AtimWin, BeaconPeriod; +- LARGE_INTEGER TimeStamp; +- USHORT TbttNumToNextWakeUp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; +- // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen, PreNHtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- return; +- } +-#endif // RALINK_ATE // +- +- if (!(INFRA_ON(pAd) || ADHOC_ON(pAd) +- )) +- return; +- +- // Init Variable IE structure +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +- pVIE->Length = 0; +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); +- +- if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &CfParm, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { +- BOOLEAN is_my_bssid, is_my_ssid; +- ULONG Bssidx, Now; +- BSS_ENTRY *pBss; +- CHAR RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- +- is_my_bssid = MAC_ADDR_EQUAL(Bssid, pAd->CommonCfg.Bssid)? TRUE : FALSE; +- is_my_ssid = SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)? TRUE:FALSE; +- +- +- // ignore BEACON not for my SSID +- if ((! is_my_ssid) && (! is_my_bssid)) +- return; +- +- // It means STA waits disassoc completely from this AP, ignores this beacon. +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_WAIT_DISASSOC) +- return; +- +-#ifdef DOT11_N_SUPPORT +- // Copy Control channel for this BSSID. +- if (AddHtInfoLen != 0) +- Channel = AddHtInfo.ControlChan; +- +- if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) +- HtCapabilityLen = SIZE_HT_CAP_IE; +-#endif // DOT11_N_SUPPORT // +- +- // +- // Housekeeping "SsidBssTab" table for later-on ROAMing usage. +- // +- Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- // discover new AP of this network, create BSS entry +- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, +- &HtCapability, &AddHtInfo,HtCapabilityLen,AddHtInfoLen,NewExtChannelOffset, Channel, +- RealRssi, TimeStamp, CkipFlag, &EdcaParm, &QosCapability, +- &QbssLoad, LenVIE, pVIE); +- if (Bssidx == BSS_NOT_FOUND) // return if BSS table full +- return; +- +- NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- +- +- +- } +- +- if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel)) +- { +- // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). +- // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. +- AsicSwitchChannel(pAd, 1, FALSE); +- AsicLockChannel(pAd, 1); +- LinkDown(pAd, FALSE); +- MlmeQueueInit(&pAd->Mlme.Queue); +- BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc +- +- // channel sanity check +- for (index = 0 ; index < pAd->ChannelListNum; index++) +- { +- if (pAd->ChannelList[index].Channel == NewChannel) +- { +- pAd->ScanTab.BssEntry[Bssidx].Channel = NewChannel; +- pAd->CommonCfg.Channel = NewChannel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeacon - STA receive channel switch announcement IE (New Channel =%d)\n", NewChannel)); +- break; +- } +- } +- +- if (index >= pAd->ChannelListNum) +- { +- DBGPRINT_ERR(("PeerBeacon(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum)); +- } +- } +- +- // if the ssid matched & bssid unmatched, we should select the bssid with large value. +- // This might happened when two STA start at the same time +- if ((! is_my_bssid) && ADHOC_ON(pAd)) +- { +- INT i; +- +- // Add the safeguard against the mismatch of adhoc wep status +- if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus) +- { +- return; +- } +- +- // collapse into the ADHOC network which has bigger BSSID value. +- for (i = 0; i < 6; i++) +- { +- if (Bssid[i] > pAd->CommonCfg.Bssid[i]) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - merge to the IBSS with bigger BSSID=%02x:%02x:%02x:%02x:%02x:%02x\n", +- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); +- AsicDisableSync(pAd); +- COPY_MAC_ADDR(pAd->CommonCfg.Bssid, Bssid); +- AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy BEACON frame to on-chip memory +- is_my_bssid = TRUE; +- break; +- } +- else if (Bssid[i] < pAd->CommonCfg.Bssid[i]) +- break; +- } +- } +- +- +- NdisGetSystemUpTime(&Now); +- pBss = &pAd->ScanTab.BssEntry[Bssidx]; +- pBss->Rssi = RealRssi; // lastest RSSI +- pBss->LastBeaconRxTime = Now; // last RX timestamp +- +- // +- // BEACON from my BSSID - either IBSS or INFRA network +- // +- if (is_my_bssid) +- { +- RXWI_STRUC RxWI; +- +- pAd->StaCfg.DtimCount = DtimCount; +- pAd->StaCfg.DtimPeriod = DtimPeriod; +- pAd->StaCfg.LastBeaconRxTime = Now; +- +- +- RxWI.RSSI0 = Elem->Rssi0; +- RxWI.RSSI1 = Elem->Rssi1; +- RxWI.RSSI2 = Elem->Rssi2; +- +- Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, &RxWI); +- if (AironetCellPowerLimit != 0xFF) +- { +- // +- // We get the Cisco (ccx) "TxPower Limit" required +- // Changed to appropriate TxPower Limit for Ciso Compatible Extensions +- // +- ChangeToCellPowerLimit(pAd, AironetCellPowerLimit); +- } +- else +- { +- // +- // AironetCellPowerLimit equal to 0xFF means the Cisco (ccx) "TxPower Limit" not exist. +- // Used the default TX Power Percentage, that set from UI. +- // +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- } +- +- if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) +- { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; +- MAC_TABLE_ENTRY *pEntry; +- +- // supported rates array may not be sorted. sort it and find the maximum rate +- for (idx=0; idxWcid == RESERVED_WCID)) || +- (pEntry && ((pEntry->LastBeaconRxTime + ADHOC_ENTRY_BEACON_LOST_TIME) < Now))) +- { +- if (pEntry == NULL) +- // Another adhoc joining, add to our MAC table. +- pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE); +- +- if (StaAddMacTableEntry(pAd, +- pEntry, +- MaxSupportedRateIn500Kbps, +- &HtCapability, +- HtCapabilityLen, +- &AddHtInfo, +- AddHtInfoLen, +- CapabilityInfo) == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC - Add Entry failed.\n")); +- return; +- } +- +- if (pEntry && +- (Elem->Wcid == RESERVED_WCID)) +- { +- idx = pAd->StaCfg.DefaultKeyId; +- RTMP_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); +- } +- } +- +- if (pEntry && pEntry->ValidAsCLI) +- pEntry->LastBeaconRxTime = Now; +- +- // At least another peer in this IBSS, declare MediaState as CONNECTED +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; +- AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- +- // 2003/03/12 - john +- // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that +- // "site survey" result should always include the current connected network. +- // +- Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); +- } +- } +- +- if (INFRA_ON(pAd)) +- { +- BOOLEAN bUseShortSlot, bUseBGProtection; +- +- // decide to use/change to - +- // 1. long slot (20 us) or short slot (9 us) time +- // 2. turn on/off RTS/CTS and/or CTS-to-self protection +- // 3. short preamble +- +- //bUseShortSlot = pAd->CommonCfg.bUseShortSlotTime && CAP_IS_SHORT_SLOT(CapabilityInfo); +- bUseShortSlot = CAP_IS_SHORT_SLOT(CapabilityInfo); +- if (bUseShortSlot != OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) +- AsicSetSlotTime(pAd, bUseShortSlot); +- +- bUseBGProtection = (pAd->CommonCfg.UseBGProtection == 1) || // always use +- ((pAd->CommonCfg.UseBGProtection == 0) && ERP_IS_USE_PROTECTION(Erp)); +- +- if (pAd->CommonCfg.Channel > 14) // always no BG protection in A-band. falsely happened when switching A/G band to a dual-band AP +- bUseBGProtection = FALSE; +- +- if (bUseBGProtection != OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- if (bUseBGProtection) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, (OFDMSETPROTECT|CCKSETPROTECT|ALLN_SETPROTECT),FALSE,(pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1)); +- } +- else +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, (OFDMSETPROTECT|CCKSETPROTECT|ALLN_SETPROTECT),TRUE,(pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1)); +- } +- +- DBGPRINT(RT_DEBUG_WARN, ("SYNC - AP changed B/G protection to %d\n", bUseBGProtection)); +- } +- +-#ifdef DOT11_N_SUPPORT +- // check Ht protection mode. and adhere to the Non-GF device indication by AP. +- if ((AddHtInfoLen != 0) && +- ((AddHtInfo.AddHtInfo2.OperaionMode != pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode) || +- (AddHtInfo.AddHtInfo2.NonGfPresent != pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent))) +- { +- pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent = AddHtInfo.AddHtInfo2.NonGfPresent; +- pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode = AddHtInfo.AddHtInfo2.OperaionMode; +- if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, TRUE); +- } +- else +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP changed N OperaionMode to %d\n", pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode)); +- } +-#endif // DOT11_N_SUPPORT // +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED) && +- ERP_IS_USE_BARKER_PREAMBLE(Erp)) +- { +- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP forced to use LONG preamble\n")); +- } +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- (EdcaParm.bValid == TRUE) && +- (EdcaParm.EdcaUpdateCount != pAd->CommonCfg.APEdcaParm.EdcaUpdateCount)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP change EDCA parameters(from %d to %d)\n", +- pAd->CommonCfg.APEdcaParm.EdcaUpdateCount, +- EdcaParm.EdcaUpdateCount)); +- AsicSetEdcaParm(pAd, &EdcaParm); +- } +- +- // copy QOS related information +- NdisMoveMemory(&pAd->CommonCfg.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisMoveMemory(&pAd->CommonCfg.APQosCapability, &QosCapability, sizeof(QOS_CAPABILITY_PARM)); +- } +- +- // only INFRASTRUCTURE mode support power-saving feature +- if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) || (pAd->CommonCfg.bAPSDForcePowerSave)) +- { +- UCHAR FreeNumber; +- // 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL +- // 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE +- // 3. we have outgoing frames in TxRing or MgmtRing, better stay AWAKE +- // 4. Psm change to PWR_SAVE, but AP not been informed yet, we better stay AWAKE +- // 5. otherwise, put PHY back to sleep to save battery. +- if (MessageToMe) +- { +-#ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- // Restore to correct BBP R3 value +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- // Turn clk to 80Mhz. +- } +-#endif // RTMP_MAC_PCI // +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && +- pAd->CommonCfg.bAPSDAC_BE && pAd->CommonCfg.bAPSDAC_BK && pAd->CommonCfg.bAPSDAC_VI && pAd->CommonCfg.bAPSDAC_VO) +- { +- pAd->CommonCfg.bNeedSendTriggerFrame = TRUE; +- } +- else +- RTMP_PS_POLL_ENQUEUE(pAd); +- } +- else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM)) +- { +-#ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- } +-#endif // RTMP_MAC_PCI // +- } +- else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) || +- (pAd->TxSwQueue[QID_AC_BE].Number != 0) || +- (pAd->TxSwQueue[QID_AC_VI].Number != 0) || +- (pAd->TxSwQueue[QID_AC_VO].Number != 0) || +- (RTMPFreeTXDRequest(pAd, QID_AC_BK, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_BE, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_VI, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_VO, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_MGMT, MGMT_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS)) +- { +- // TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme +- // can we cheat here (i.e. just check MGMT & AC_BE) for better performance? +-#ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- } +-#endif // RTMP_MAC_PCI // +- } +- else +- { +- if ((pAd->CommonCfg.bACMAPSDTr[QID_AC_VO]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_VI]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_BK]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_BE])) +- { +- /* +- WMM Spec v1.0 3.6.2.4, +- The WMM STA shall remain awake until it receives a +- QoS Data or Null frame addressed to it, with the +- EOSP subfield in QoS Control field set to 1. +- +- So we can not sleep here or we will suffer a case: +- +- PS Management Frame --> +- Trigger frame --> +- Beacon (TIM=0) (Beacon is closer to Trig frame) --> +- Station goes to sleep --> +- AP delivery queued UAPSD packets --> +- Station can NOT receive the reply +- +- Maybe we need a timeout timer to avoid that we do +- NOT receive the EOSP frame. +- +- We can not use More Data to check if SP is ended +- due to MaxSPLength. +- */ +- } +- else +- { +- USHORT NextDtim = DtimCount; +- +- +- if (NextDtim == 0) +- NextDtim = DtimPeriod; +- +- TbttNumToNextWakeUp = pAd->StaCfg.DefaultListenCount; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim)) +- TbttNumToNextWakeUp = NextDtim; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- // Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. +- pAd->ThisTbttNumToNextWakeUp = TbttNumToNextWakeUp; +- AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp); +- +- } +- } +- } +- } +- } +- // not my BSSID, ignore it +- } +- // sanity check fail, ignore this frame +-} +- +-/* +- ========================================================================== +- Description: +- Receive PROBE REQ from remote peer when operating in IBSS mode +- ========================================================================== +- */ +-VOID PeerProbeReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- UCHAR Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +-#ifdef DOT11_N_SUPPORT +- UCHAR HtLen, AddHtLen, NewExtLen; +-#endif // DOT11_N_SUPPORT // +- HEADER_802_11 ProbeRspHdr; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- LARGE_INTEGER FakeTimestamp; +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = {IE_ERP, 1, 0}; +- BOOLEAN Privacy; +- USHORT CapabilityInfo; +- UCHAR RSNIe = IE_WPA; +- +- if (! ADHOC_ON(pAd)) +- return; +- +- if (PeerProbeReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, Ssid, &SsidLen)) +- { +- if ((SsidLen == 0) || SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)) +- { +- // allocate and send out ProbeRsp frame +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- //pAd->StaCfg.AtimWin = 0; // ?????? +- +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- CapabilityInfo = CAP_GENERATE(0, 1, Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 0, 0); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &ProbeRspHdr, +- TIMESTAMP_LEN, &FakeTimestamp, +- 2, &pAd->CommonCfg.BeaconPeriod, +- 2, &CapabilityInfo, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &pAd->StaActive.SupRateLen, +- pAd->StaActive.SupRateLen, pAd->StaActive.SupRate, +- 1, &DsIe, +- 1, &DsLen, +- 1, &pAd->CommonCfg.Channel, +- 1, &IbssIe, +- 1, &IbssLen, +- 2, &pAd->StaActive.AtimWin, +- END_OF_ARGS); +- +- if (pAd->StaActive.ExtRateLen) +- { +- ULONG tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 3, LocalErpIe, +- 1, &ExtRateIe, +- 1, &pAd->StaActive.ExtRateLen, +- pAd->StaActive.ExtRateLen, &pAd->StaActive.ExtRate, +- END_OF_ARGS); +- FrameLen += tmp; +- } +- +- // If adhoc secruity is set for WPA-None, append the cipher suite IE +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- ULONG tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); +- FrameLen += tmp; +- } +-#ifdef DOT11_N_SUPPORT +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- ULONG TmpLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- HtLen = sizeof(pAd->CommonCfg.HtCapability); +- AddHtLen = sizeof(pAd->CommonCfg.AddHTInfo); +- NewExtLen = 1; +- //New extension channel offset IE is included in Beacon, Probe Rsp or channel Switch Announcement Frame +- if (pAd->bBroadComHT == TRUE) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &HtLen, +- sizeof(HT_CAPABILITY_IE), &pAd->CommonCfg.HtCapability, +- 1, &AddHtInfoIe, +- 1, &AddHtLen, +- sizeof(ADD_HT_INFO_IE), &pAd->CommonCfg.AddHTInfo, +- 1, &NewExtChanIe, +- 1, &NewExtLen, +- sizeof(NEW_EXT_CHAN_IE), &pAd->CommonCfg.NewExtChanOffset, +- END_OF_ARGS); +- } +- FrameLen += TmpLen; +- } +-#endif // DOT11_N_SUPPORT // +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- } +- } +-} +- +-VOID BeaconTimeoutAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeoutAtJoinAction\n")); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_REJ_TIMEOUT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- Scan timeout procedure. basically add channel index by 1 and rescan +- ========================================================================== +- */ +-VOID ScanTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel); +- +- // Only one channel scanned for CISCO beacon request +- if ((pAd->MlmeAux.ScanType == SCAN_CISCO_ACTIVE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_PASSIVE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_NOISE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_CHANNEL_LOAD)) +- pAd->MlmeAux.Channel = 0; +- +- // this routine will stop if pAd->MlmeAux.Channel == 0 +- ScanNextChannel(pAd); +-} +- +-/* +- ========================================================================== +- Description: +- ========================================================================== +- */ +-VOID InvalidStateWhenScan( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AYNC - InvalidStateWhenScan(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- ========================================================================== +- */ +-VOID InvalidStateWhenJoin( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenJoin(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- ========================================================================== +- */ +-VOID InvalidStateWhenStart( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenStart(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); +-} +- +-/* +- ========================================================================== +- Description: +- +- IRQL = DISPATCH_LEVEL +- +- ========================================================================== +- */ +-VOID EnqueuePsPoll( +- IN PRTMP_ADAPTER pAd) +-{ +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- return; +- } +-#endif // RALINK_ATE // +- +- +- if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP) +- pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; +- MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); +-} +- +- +-/* +- ========================================================================== +- Description: +- ========================================================================== +- */ +-VOID EnqueueProbeRequest( +- IN PRTMP_ADAPTER pAd) +-{ +- NDIS_STATUS NState; +- PUCHAR pOutBuffer; +- ULONG FrameLen = 0; +- HEADER_802_11 Hdr80211; +- +- DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n")); +- +- NState = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NState == NDIS_STATUS_SUCCESS) +- { +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); +- +- // this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &pAd->StaActive.SupRateLen, +- pAd->StaActive.SupRateLen, pAd->StaActive.SupRate, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- } +- +-} +- +-#ifdef DOT11_N_SUPPORT +-#ifdef DOT11N_DRAFT3 +-VOID BuildEffectedChannelList( +- IN PRTMP_ADAPTER pAd) +-{ +- UCHAR EChannel[11]; +- UCHAR i, j, k; +- UCHAR UpperChannel = 0, LowerChannel = 0; +- +- RTMPZeroMemory(EChannel, 11); +- i = 0; +- // Find upper channel and lower channel. +- if (pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) +- { +- UpperChannel = pAd->CommonCfg.Channel; +- LowerChannel = pAd->CommonCfg.CentralChannel; +- } +- else if (pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) +- { +- UpperChannel = pAd->CommonCfg.CentralChannel; +- LowerChannel = pAd->CommonCfg.Channel; +- } +- else +- { +- return; +- } +- +- // Record channels that is below lower channel.. +- if (LowerChannel > 1) +- { +- EChannel[0] = LowerChannel - 1; +- i = 1; +- if (LowerChannel > 2) +- { +- EChannel[1] = LowerChannel - 2; +- i = 2; +- if (LowerChannel > 3) +- { +- EChannel[2] = LowerChannel - 3; +- i = 3; +- } +- } +- } +- // Record channels that is between lower channel and upper channel. +- for (k = LowerChannel;k < UpperChannel;k++) +- { +- EChannel[i] = k; +- i++; +- } +- // Record channels that is above upper channel.. +- if (LowerChannel < 11) +- { +- EChannel[i] = UpperChannel + 1; +- i++; +- if (LowerChannel < 10) +- { +- EChannel[i] = LowerChannel + 2; +- i++; +- if (LowerChannel < 9) +- { +- EChannel[i] = LowerChannel + 3; +- i++; +- } +- } +- } +- // +- for (j = 0;j < i;j++) +- { +- for (k = 0;k < pAd->ChannelListNum;k++) +- { +- if (pAd->ChannelList[k].Channel == EChannel[j]) +- { +- pAd->ChannelList[k].bEffectedChannel = TRUE; +- DBGPRINT(RT_DEBUG_TRACE,(" EffectedChannel( =%d)\n", EChannel[j])); +- break; +- } +- } +- } +-} +-#endif // DOT11N_DRAFT3 // +-#endif // DOT11_N_SUPPORT // +- +-BOOLEAN ScanRunning( +- IN PRTMP_ADAPTER pAd) +-{ +- return (pAd->Mlme.SyncMachine.CurrState == SCAN_LISTEN) ? TRUE : FALSE; +-} +diff --git a/drivers/staging/rt3090/sta/wpa.c b/drivers/staging/rt3090/sta/wpa.c +deleted file mode 100644 +index 2dbdba5..0000000 +--- a/drivers/staging/rt3090/sta/wpa.c ++++ /dev/null +@@ -1,396 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- wpa.c +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Jan Lee 03-07-22 Initial +- Paul Lin 03-11-28 Modify for supplicant +-*/ +- +-#include "../rt_config.h" +- +- +-void inc_byte_array(UCHAR *counter, int len); +- +-/* +- ======================================================================== +- +- Routine Description: +- Process MIC error indication and record MIC error timer. +- +- Arguments: +- pAd Pointer to our adapter +- pWpaKey Pointer to the WPA key structure +- +- Return Value: +- None +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +-VOID RTMPReportMicError( +- IN PRTMP_ADAPTER pAd, +- IN PCIPHER_KEY pWpaKey) +-{ +- ULONG Now; +- UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1:0); +- +- // Record Last MIC error time and count +- NdisGetSystemUpTime(&Now); +- if (pAd->StaCfg.MicErrCnt == 0) +- { +- pAd->StaCfg.MicErrCnt++; +- pAd->StaCfg.LastMicErrorTime = Now; +- NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); +- } +- else if (pAd->StaCfg.MicErrCnt == 1) +- { +- if ((pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ)) < Now) +- { +- // Update Last MIC error time, this did not violate two MIC errors within 60 seconds +- pAd->StaCfg.LastMicErrorTime = Now; +- } +- else +- { +- +- if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_COUNTER_MEASURES_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- pAd->StaCfg.LastMicErrorTime = Now; +- // Violate MIC error counts, MIC countermeasures kicks in +- pAd->StaCfg.MicErrCnt++; +- // We shall block all reception +- // We shall clean all Tx ring and disassoicate from AP after next EAPOL frame +- // +- // No necessary to clean all Tx ring, on RTMPHardTransmit will stop sending non-802.1X EAPOL packets +- // if pAd->StaCfg.MicErrCnt greater than 2. +- // +- // RTMPRingCleanUp(pAd, QID_AC_BK); +- // RTMPRingCleanUp(pAd, QID_AC_BE); +- // RTMPRingCleanUp(pAd, QID_AC_VI); +- // RTMPRingCleanUp(pAd, QID_AC_VO); +- // RTMPRingCleanUp(pAd, QID_HCCA); +- } +- } +- else +- { +- // MIC error count >= 2 +- // This should not happen +- ; +- } +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_MIC_FAILURE_REPORT_FRAME, +- 1, +- &unicastKey); +- +- if (pAd->StaCfg.MicErrCnt == 2) +- { +- RTMPSetTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, 100); +- } +-} +- +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-#define LENGTH_EAP_H 4 +-// If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). +-INT WpaCheckEapCode( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, +- IN USHORT FrameLen, +- IN USHORT OffSet) +-{ +- +- PUCHAR pData; +- INT result = 0; +- +- if( FrameLen < OffSet + LENGTH_EAPOL_H + LENGTH_EAP_H ) +- return result; +- +- pData = pFrame + OffSet; // skip offset bytes +- +- if(*(pData+1) == EAPPacket) // 802.1x header - Packet Type +- { +- result = *(pData+4); // EAP header - Code +- } +- +- return result; +-} +- +-VOID WpaSendMicFailureToWpaSupplicant( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUnicast) +-{ +- char custom[IW_CUSTOM_MAX] = {0}; +- +- sprintf(custom, "MLME-MICHAELMICFAILURE.indication"); +- if(bUnicast) +- sprintf(custom, "%s unicast", custom); +- +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (PUCHAR)custom, strlen(custom)); +- +- return; +-} +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-VOID WpaMicFailureReportFrame( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +-{ +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- BOOLEAN bUnicast; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame ----->\n")); +- +- bUnicast = (Elem->Msg[0] == 1 ? TRUE:FALSE); +- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER); +- +- // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); +- +- NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; +- +- Packet.KeyDesc.Type = WPA1_KEY_DESC; +- +- // Request field presented +- Packet.KeyDesc.KeyInfo.Request = 1; +- +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 2; +- } +- else // TKIP +- { +- Packet.KeyDesc.KeyInfo.KeyDescVer = 1; +- } +- +- Packet.KeyDesc.KeyInfo.KeyType = (bUnicast ? PAIRWISEKEY : GROUPKEY); +- +- // KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; +- +- // Error field presented +- Packet.KeyDesc.KeyInfo.Error = 1; +- +- // Update packet length after decide Key data payload +- SET_UINT16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) +- +- // Key Replay Count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); +- inc_byte_array(pAd->StaCfg.ReplayCounter, 8); +- +- // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- +- +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { +- return; +- } +- +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, +- END_OF_ARGS); +- +- // Prepare and Fill MIC value +- NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { // AES +- UCHAR digest[20] = {0}; +- HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { // TKIP +- HMAC_MD5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE); +- } +- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); +- +- // copy frame to Tx ring and send MIC failure report frame to authenticator +- RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID], +- Header802_3, LENGTH_802_3, +- (PUCHAR)&Packet, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, FALSE); +- +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame <-----\n")); +-} +- +-/** from wpa_supplicant +- * inc_byte_array - Increment arbitrary length byte array by one +- * @counter: Pointer to byte array +- * @len: Length of the counter in bytes +- * +- * This function increments the last byte of the counter by one and continues +- * rolling over to more significant bytes if the byte was incremented from +- * 0xff to 0x00. +- */ +-void inc_byte_array(UCHAR *counter, int len) +-{ +- int pos = len - 1; +- while (pos >= 0) { +- counter[pos]++; +- if (counter[pos] != 0) +- break; +- pos--; +- } +-} +- +-VOID WpaDisassocApAndBlockAssoc( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (PRTMP_ADAPTER)FunctionContext; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- +- // disassoc from current AP first +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPReportMicError - disassociate with current AP after sending second continuous EAPOL frame\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_MIC_FAILURE); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- pAd->StaCfg.bBlockAssoc = TRUE; +-} +- +-VOID WpaStaPairwiseKeySetting( +- IN PRTMP_ADAPTER pAd) +-{ +- PCIPHER_KEY pSharedKey; +- PMAC_TABLE_ENTRY pEntry; +- +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- +- // Pairwise key shall use key#0 +- pSharedKey = &pAd->SharedKey[BSS0][0]; +- +- NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); +- +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); +- pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pSharedKey->CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pSharedKey->CipherAlg = CIPHER_AES; +- else +- pSharedKey->CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pEntry); +- STA_PORT_SECURED(pAd); +- pAd->IndicateMediaState = NdisMediaStateConnected; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s : AID(%d) port secured\n", __FUNCTION__, pEntry->Aid)); +- +-} +- +-VOID WpaStaGroupKeySetting( +- IN PRTMP_ADAPTER pAd) +-{ +- PCIPHER_KEY pSharedKey; +- +- pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; +- +- // Prepare pair-wise key information into shared key table +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); +- pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); +- +- // Update Shared Key CipherAlg +- pSharedKey->CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pSharedKey->CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pSharedKey->CipherAlg = CIPHER_AES; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) +- pSharedKey->CipherAlg = CIPHER_WEP64; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- pSharedKey->CipherAlg = CIPHER_WEP128; +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- NULL); +- +-} +diff --git a/drivers/staging/rt3090/sta_ioctl.c b/drivers/staging/rt3090/sta_ioctl.c +deleted file mode 100644 +index b8ab84a..0000000 +--- a/drivers/staging/rt3090/sta_ioctl.c ++++ /dev/null +@@ -1,7557 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- sta_ioctl.c +- +- Abstract: +- IOCTL related subroutines +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Rory Chen 01-03-2003 created +- Rory Chen 02-14-2005 modify to support RT61 +-*/ +- +-#include "rt_config.h" +- +-#ifdef DBG +-extern ULONG RTDebugLevel; +-#endif +- +-#define NR_WEP_KEYS 4 +-#define WEP_SMALL_KEY_LEN (40/8) +-#define WEP_LARGE_KEY_LEN (104/8) +- +-#define GROUP_KEY_NO 4 +- +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) +-#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_A, _B, _C, _D, _E) +-#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_A, _B, _C, _D, _E) +-#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_A, _B, _C, _D, _E, _F) +-#else +-#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_B, _C, _D, _E) +-#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_B, _C, _D, _E) +-#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_B, _C, _D, _E, _F) +-#endif +- +-extern UCHAR CipherWpa2Template[]; +- +-typedef struct PACKED _RT_VERSION_INFO{ +- UCHAR DriverVersionW; +- UCHAR DriverVersionX; +- UCHAR DriverVersionY; +- UCHAR DriverVersionZ; +- UINT DriverBuildYear; +- UINT DriverBuildMonth; +- UINT DriverBuildDay; +-} RT_VERSION_INFO, *PRT_VERSION_INFO; +- +-struct iw_priv_args privtab[] = { +-{ RTPRIV_IOCTL_SET, +- IW_PRIV_TYPE_CHAR | 1024, 0, +- "set"}, +- +-{ RTPRIV_IOCTL_SHOW, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- ""}, +-/* --- sub-ioctls definitions --- */ +- { SHOW_CONN_STATUS, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "connStatus" }, +- { SHOW_DRVIER_VERION, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "driverVer" }, +- { SHOW_BA_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bainfo" }, +- { SHOW_DESC_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "descinfo" }, +- { RAIO_OFF, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" }, +- { RAIO_ON, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" }, +-#ifdef QOS_DLS_SUPPORT +- { SHOW_DLS_ENTRY_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "dlsentryinfo" }, +-#endif // QOS_DLS_SUPPORT // +- { SHOW_CFG_VALUE, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "show" }, +- { SHOW_ADHOC_ENTRY_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "adhocEntry" }, +-/* --- sub-ioctls relations --- */ +- +-#ifdef DBG +-{ RTPRIV_IOCTL_BBP, +- IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- "bbp"}, +-{ RTPRIV_IOCTL_MAC, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024, +- "mac"}, +-#ifdef RTMP_RF_RW_SUPPORT +-{ RTPRIV_IOCTL_RF, +- IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- "rf"}, +-#endif // RTMP_RF_RW_SUPPORT // +-{ RTPRIV_IOCTL_E2P, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024, +- "e2p"}, +-#endif /* DBG */ +- +-{ RTPRIV_IOCTL_STATISTICS, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- "stat"}, +-{ RTPRIV_IOCTL_GSITESURVEY, +- 0, IW_PRIV_TYPE_CHAR | 1024, +- "get_site_survey"}, +- +- +-}; +- +-static __s32 ralinkrate[] = +- {2, 4, 11, 22, // CCK +- 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +- 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 +- 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 +- 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 +- 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 +- 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 +- 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 +- 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 +- 90, 180, 270, 360, 540, 720, 810, 900}; +- +- +- +-INT Set_SSID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-#ifdef WMM_SUPPORT +-INT Set_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif +- +-INT Set_NetworkType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_AuthMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_EncrypType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key1_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key2_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key3_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key4_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +- +-INT Set_PSMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-#ifdef RT3090 +-INT Set_PCIePSLevel_Proc( +-IN PRTMP_ADAPTER pAdapter, +-IN PUCHAR arg); +-#endif // RT3090 // +-#ifdef WPA_SUPPLICANT_SUPPORT +-INT Set_Wpa_Support( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef DBG +- +-VOID RTMPIoctlMAC( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +-VOID RTMPIoctlE2PROM( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +-#endif // DBG // +- +- +-NDIS_STATUS RTMPWPANoneAddKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf); +- +-INT Set_FragTest_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-#ifdef DOT11_N_SUPPORT +-INT Set_TGnWifiTest_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // DOT11_N_SUPPORT // +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-#ifdef EXT_BUILD_CHANNEL_LIST +-INT Set_Ieee80211dClientMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +-#endif // EXT_BUILD_CHANNEL_LIST // +- +-#ifdef CARRIER_DETECTION_SUPPORT +-INT Set_CarrierDetect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // CARRIER_DETECTION_SUPPORT // +- +-INT Show_Adhoc_MacTable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING extra); +- +-#ifdef RTMP_RF_RW_SUPPORT +-VOID RTMPIoctlRF( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +-#endif // RTMP_RF_RW_SUPPORT // +- +- +-INT Set_BeaconLostTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_AutoRoaming_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_SiteSurvey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ForceTxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef ANT_DIVERSITY_SUPPORT +-INT Set_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg); +-#endif // ANT_DIVERSITY_SUPPORT // +- +-static struct { +- PSTRING name; +- INT (*set_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); +-} *PRTMP_PRIVATE_SET_PROC, RTMP_PRIVATE_SUPPORT_PROC[] = { +- {"DriverVersion", Set_DriverVersion_Proc}, +- {"CountryRegion", Set_CountryRegion_Proc}, +- {"CountryRegionABand", Set_CountryRegionABand_Proc}, +- {"SSID", Set_SSID_Proc}, +- {"WirelessMode", Set_WirelessMode_Proc}, +- {"TxBurst", Set_TxBurst_Proc}, +- {"TxPreamble", Set_TxPreamble_Proc}, +- {"TxPower", Set_TxPower_Proc}, +- {"Channel", Set_Channel_Proc}, +- {"BGProtection", Set_BGProtection_Proc}, +- {"RTSThreshold", Set_RTSThreshold_Proc}, +- {"FragThreshold", Set_FragThreshold_Proc}, +-#ifdef DOT11_N_SUPPORT +- {"HtBw", Set_HtBw_Proc}, +- {"HtMcs", Set_HtMcs_Proc}, +- {"HtGi", Set_HtGi_Proc}, +- {"HtOpMode", Set_HtOpMode_Proc}, +- {"HtExtcha", Set_HtExtcha_Proc}, +- {"HtMpduDensity", Set_HtMpduDensity_Proc}, +- {"HtBaWinSize", Set_HtBaWinSize_Proc}, +- {"HtRdg", Set_HtRdg_Proc}, +- {"HtAmsdu", Set_HtAmsdu_Proc}, +- {"HtAutoBa", Set_HtAutoBa_Proc}, +- {"HtBaDecline", Set_BADecline_Proc}, +- {"HtProtect", Set_HtProtect_Proc}, +- {"HtMimoPs", Set_HtMimoPs_Proc}, +- {"HtDisallowTKIP", Set_HtDisallowTKIP_Proc}, +-#endif // DOT11_N_SUPPORT // +- +-#ifdef AGGREGATION_SUPPORT +- {"PktAggregate", Set_PktAggregate_Proc}, +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +- {"WmmCapable", Set_WmmCapable_Proc}, +-#endif +- {"IEEE80211H", Set_IEEE80211H_Proc}, +- {"NetworkType", Set_NetworkType_Proc}, +- {"AuthMode", Set_AuthMode_Proc}, +- {"EncrypType", Set_EncrypType_Proc}, +- {"DefaultKeyID", Set_DefaultKeyID_Proc}, +- {"Key1", Set_Key1_Proc}, +- {"Key2", Set_Key2_Proc}, +- {"Key3", Set_Key3_Proc}, +- {"Key4", Set_Key4_Proc}, +- {"WPAPSK", Set_WPAPSK_Proc}, +- {"ResetCounter", Set_ResetStatCounter_Proc}, +- {"PSMode", Set_PSMode_Proc}, +-#ifdef DBG +- {"Debug", Set_Debug_Proc}, +-#endif // DBG // +- +-#ifdef RALINK_ATE +- {"ATE", Set_ATE_Proc}, +- {"ATEDA", Set_ATE_DA_Proc}, +- {"ATESA", Set_ATE_SA_Proc}, +- {"ATEBSSID", Set_ATE_BSSID_Proc}, +- {"ATECHANNEL", Set_ATE_CHANNEL_Proc}, +- {"ATETXPOW0", Set_ATE_TX_POWER0_Proc}, +- {"ATETXPOW1", Set_ATE_TX_POWER1_Proc}, +- {"ATETXANT", Set_ATE_TX_Antenna_Proc}, +- {"ATERXANT", Set_ATE_RX_Antenna_Proc}, +- {"ATETXFREQOFFSET", Set_ATE_TX_FREQOFFSET_Proc}, +- {"ATETXBW", Set_ATE_TX_BW_Proc}, +- {"ATETXLEN", Set_ATE_TX_LENGTH_Proc}, +- {"ATETXCNT", Set_ATE_TX_COUNT_Proc}, +- {"ATETXMCS", Set_ATE_TX_MCS_Proc}, +- {"ATETXMODE", Set_ATE_TX_MODE_Proc}, +- {"ATETXGI", Set_ATE_TX_GI_Proc}, +- {"ATERXFER", Set_ATE_RX_FER_Proc}, +- {"ATERRF", Set_ATE_Read_RF_Proc}, +- {"ATEWRF1", Set_ATE_Write_RF1_Proc}, +- {"ATEWRF2", Set_ATE_Write_RF2_Proc}, +- {"ATEWRF3", Set_ATE_Write_RF3_Proc}, +- {"ATEWRF4", Set_ATE_Write_RF4_Proc}, +- {"ATELDE2P", Set_ATE_Load_E2P_Proc}, +- {"ATERE2P", Set_ATE_Read_E2P_Proc}, +- {"ATESHOW", Set_ATE_Show_Proc}, +- {"ATEHELP", Set_ATE_Help_Proc}, +- +-#ifdef RALINK_28xx_QA +- {"TxStop", Set_TxStop_Proc}, +- {"RxStop", Set_RxStop_Proc}, +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- {"WpaSupport", Set_Wpa_Support}, +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- +- +- +- +- {"FixedTxMode", Set_FixedTxMode_Proc}, +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +- {"OpMode", Set_OpMode_Proc}, +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +-#ifdef DOT11_N_SUPPORT +- {"TGnWifiTest", Set_TGnWifiTest_Proc}, +- {"ForceGF", Set_ForceGF_Proc}, +-#endif // DOT11_N_SUPPORT // +-#ifdef QOS_DLS_SUPPORT +- {"DlsAddEntry", Set_DlsAddEntry_Proc}, +- {"DlsTearDownEntry", Set_DlsTearDownEntry_Proc}, +-#endif // QOS_DLS_SUPPORT // +- {"LongRetry", Set_LongRetryLimit_Proc}, +- {"ShortRetry", Set_ShortRetryLimit_Proc}, +-#ifdef EXT_BUILD_CHANNEL_LIST +- {"11dClientMode", Set_Ieee80211dClientMode_Proc}, +-#endif // EXT_BUILD_CHANNEL_LIST // +-#ifdef CARRIER_DETECTION_SUPPORT +- {"CarrierDetect", Set_CarrierDetect_Proc}, +-#endif // CARRIER_DETECTION_SUPPORT // +- +- +-//2008/09/11:KH add to support efuse<-- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +- {"efuseFreeNumber", set_eFuseGetFreeBlockCount_Proc}, +- {"efuseDump", set_eFusedump_Proc}, +- {"efuseLoadFromBin", set_eFuseLoadFromBin_Proc}, +- {"efuseBufferModeWriteBack", set_eFuseBufferModeWriteBack_Proc}, +-#endif // RTMP_EFUSE_SUPPORT // +-#ifdef ANT_DIVERSITY_SUPPORT +- {"ant", Set_Antenna_Proc}, +-#endif // ANT_DIVERSITY_SUPPORT // +-#endif // RT30xx // +-//2008/09/11:KH add to support efuse--> +- +- {"BeaconLostTime", Set_BeaconLostTime_Proc}, +- {"AutoRoaming", Set_AutoRoaming_Proc}, +- {"SiteSurvey", Set_SiteSurvey_Proc}, +- {"ForceTxBurst", Set_ForceTxBurst_Proc}, +- +- {NULL,} +-}; +- +- +-VOID RTMPAddKey( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_802_11_KEY pKey) +-{ +- ULONG KeyIdx; +- MAC_TABLE_ENTRY *pEntry; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- if (pKey->KeyIndex & 0x80000000) +- { +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- NdisZeroMemory(pAd->StaCfg.PMK, 32); +- NdisMoveMemory(pAd->StaCfg.PMK, pKey->KeyMaterial, pKey->KeyLength); +- goto end; +- } +- // Update PTK +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pKey->KeyMaterial, LEN_TKIP_EK); +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(pEntry->PairwiseKey.Key, pAd->SharedKey[BSS0][0].Key, LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, pAd->SharedKey[BSS0][0].RxMic, LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, pAd->SharedKey[BSS0][0].TxMic, LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pEntry); +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- { +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAd); +- +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else +- { +- // Update GTK +- pAd->StaCfg.DefaultKeyId = (pKey->KeyIndex & 0xFF); +- NdisZeroMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, pKey->KeyMaterial, LEN_TKIP_EK); +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- else +-#endif // WPA_SUPPLICANT_SUPPORT // +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- +- // Update Shared Key CipherAlg +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- NULL); +- +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAd); +- +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else // dynamic WEP from wpa_supplicant +- { +- UCHAR CipherAlg; +- PUCHAR Key; +- +- if(pKey->KeyLength == 32) +- goto end; +- +- KeyIdx = pKey->KeyIndex & 0x0fffffff; +- +- if (KeyIdx < 4) +- { +- // it is a default shared key, for Pairwise key setting +- if (pKey->KeyIndex & 0x80000000) +- { +- pEntry = MacTableLookup(pAd, pKey->BSSID); +- +- if (pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey: Set Pair-wise Key\n")); +- +- // set key material and key length +- pEntry->PairwiseKey.KeyLen = (UCHAR)pKey->KeyLength; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pKey->KeyMaterial, pKey->KeyLength); +- +- // set Cipher type +- if (pKey->KeyLength == 5) +- pEntry->PairwiseKey.CipherAlg = CIPHER_WEP64; +- else +- pEntry->PairwiseKey.CipherAlg = CIPHER_WEP128; +- +- // Add Pair-wise key to Asic +- AsicAddPairwiseKeyEntry( +- pAd, +- pEntry->Addr, +- (UCHAR)pEntry->Aid, +- &pEntry->PairwiseKey); +- +- // update WCID attribute table and IVEIV table for this entry +- RTMPAddWcidAttributeEntry( +- pAd, +- BSS0, +- KeyIdx, // The value may be not zero +- pEntry->PairwiseKey.CipherAlg, +- pEntry); +- +- } +- } +- else +- { +- // Default key for tx (shared key) +- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; +- +- // set key material and key length +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = (UCHAR) pKey->KeyLength; +- NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, &pKey->KeyMaterial, pKey->KeyLength); +- +- // Set Ciper type +- if (pKey->KeyLength == 5) +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_WEP64; +- else +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_WEP128; +- +- CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; +- Key = pAd->SharedKey[BSS0][KeyIdx].Key; +- +- // Set Group key material to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, CipherAlg, Key, NULL, NULL); +- +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, CipherAlg, NULL); +- +- } +- } +- } +-end: +- return; +-} +- +-char * rtstrchr(const char * s, int c) +-{ +- for(; *s != (char) c; ++s) +- if (*s == '\0') +- return NULL; +- return (char *) s; +-} +- +-/* +-This is required for LinEX2004/kernel2.6.7 to provide iwlist scanning function +-*/ +- +-int +-rt_ioctl_giwname(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) +-{ +- +-#ifdef RTMP_MAC_PCI +- strncpy(name, "RT2860 Wireless", IFNAMSIZ); +-#endif // RTMP_MAC_PCI // +- return 0; +-} +- +-int rt_ioctl_siwfreq(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_freq *freq, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- int chan = -1; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- +- if (freq->e > 1) +- return -EINVAL; +- +- if((freq->e == 0) && (freq->m <= 1000)) +- chan = freq->m; // Setting by channel number +- else +- MAP_KHZ_TO_CHANNEL_ID( (freq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G, +- +- if (ChannelSanity(pAdapter, chan) == TRUE) +- { +- pAdapter->CommonCfg.Channel = chan; +- DBGPRINT(RT_DEBUG_ERROR, ("==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->CommonCfg.Channel)); +- } +- else +- return -EINVAL; +- +- return 0; +-} +- +- +-int rt_ioctl_giwfreq(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_freq *freq, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = NULL; +- UCHAR ch; +- ULONG m = 2412000; +- +- pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- ch = pAdapter->CommonCfg.Channel; +- +- DBGPRINT(RT_DEBUG_TRACE,("==>rt_ioctl_giwfreq %d\n", ch)); +- +- MAP_CHANNEL_ID_TO_KHZ(ch, m); +- freq->m = m * 100; +- freq->e = 1; +- return 0; +-} +- +- +-int rt_ioctl_siwmode(struct net_device *dev, +- struct iw_request_info *info, +- __u32 *mode, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- switch (*mode) +- { +- case IW_MODE_ADHOC: +- Set_NetworkType_Proc(pAdapter, "Adhoc"); +- break; +- case IW_MODE_INFRA: +- Set_NetworkType_Proc(pAdapter, "Infra"); +- break; +-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20)) +- case IW_MODE_MONITOR: +- Set_NetworkType_Proc(pAdapter, "Monitor"); +- break; +-#endif +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_siwmode::SIOCSIWMODE (unknown %d)\n", *mode)); +- return -EINVAL; +- } +- +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAdapter->StaCfg.WpaState = SS_NOTUSE; +- +- return 0; +-} +- +- +-int rt_ioctl_giwmode(struct net_device *dev, +- struct iw_request_info *info, +- __u32 *mode, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- if (ADHOC_ON(pAdapter)) +- *mode = IW_MODE_ADHOC; +- else if (INFRA_ON(pAdapter)) +- *mode = IW_MODE_INFRA; +-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20)) +- else if (MONITOR_ON(pAdapter)) +- { +- *mode = IW_MODE_MONITOR; +- } +-#endif +- else +- *mode = IW_MODE_AUTO; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==>rt_ioctl_giwmode(mode=%d)\n", *mode)); +- return 0; +-} +- +-int rt_ioctl_siwsens(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- return 0; +-} +- +-int rt_ioctl_giwsens(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) +-{ +- return 0; +-} +- +-int rt_ioctl_giwrange(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_range *range = (struct iw_range *) extra; +- u16 val; +- int i; +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n")); +- data->length = sizeof(struct iw_range); +- memset(range, 0, sizeof(struct iw_range)); +- +- range->txpower_capa = IW_TXPOW_DBM; +- +- if (INFRA_ON(pAdapter)||ADHOC_ON(pAdapter)) +- { +- range->min_pmp = 1 * 1024; +- range->max_pmp = 65535 * 1024; +- range->min_pmt = 1 * 1024; +- range->max_pmt = 1000 * 1024; +- range->pmp_flags = IW_POWER_PERIOD; +- range->pmt_flags = IW_POWER_TIMEOUT; +- range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | +- IW_POWER_UNICAST_R | IW_POWER_ALL_R; +- } +- +- range->we_version_compiled = WIRELESS_EXT; +- range->we_version_source = 14; +- +- range->retry_capa = IW_RETRY_LIMIT; +- range->retry_flags = IW_RETRY_LIMIT; +- range->min_retry = 0; +- range->max_retry = 255; +- +- range->num_channels = pAdapter->ChannelListNum; +- +- val = 0; +- for (i = 1; i <= range->num_channels; i++) +- { +- u32 m = 2412000; +- range->freq[val].i = pAdapter->ChannelList[i-1].Channel; +- MAP_CHANNEL_ID_TO_KHZ(pAdapter->ChannelList[i-1].Channel, m); +- range->freq[val].m = m * 100; /* OS_HZ */ +- +- range->freq[val].e = 1; +- val++; +- if (val == IW_MAX_FREQUENCIES) +- break; +- } +- range->num_frequency = val; +- +- range->max_qual.qual = 100; /* what is correct max? This was not +- * documented exactly. At least +- * 69 has been observed. */ +- range->max_qual.level = 0; /* dB */ +- range->max_qual.noise = 0; /* dB */ +- +- /* What would be suitable values for "average/typical" qual? */ +- range->avg_qual.qual = 20; +- range->avg_qual.level = -60; +- range->avg_qual.noise = -95; +- range->sensitivity = 3; +- +- range->max_encoding_tokens = NR_WEP_KEYS; +- range->num_encoding_sizes = 2; +- range->encoding_size[0] = 5; +- range->encoding_size[1] = 13; +- +- range->min_rts = 0; +- range->max_rts = 2347; +- range->min_frag = 256; +- range->max_frag = 2346; +- +-#if WIRELESS_EXT > 17 +- /* IW_ENC_CAPA_* bit field */ +- range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | +- IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; +-#endif +- +- return 0; +-} +- +-int rt_ioctl_siwap(struct net_device *dev, +- struct iw_request_info *info, +- struct sockaddr *ap_addr, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- NDIS_802_11_MAC_ADDRESS Bssid; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Prevent to connect AP again in STAMlmePeriodicExec +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; +- +- memset(Bssid, 0, MAC_ADDR_LEN); +- memcpy(Bssid, ap_addr->sa_data, MAC_ADDR_LEN); +- MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID, +- sizeof(NDIS_802_11_MAC_ADDRESS), +- (VOID *)&Bssid); +- +- DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCSIWAP %02x:%02x:%02x:%02x:%02x:%02x\n", +- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); +- +- return 0; +-} +- +-int rt_ioctl_giwap(struct net_device *dev, +- struct iw_request_info *info, +- struct sockaddr *ap_addr, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) +- { +- ap_addr->sa_family = ARPHRD_ETHER; +- memcpy(ap_addr->sa_data, &pAdapter->CommonCfg.Bssid, ETH_ALEN); +- } +-#ifdef WPA_SUPPLICANT_SUPPORT +- // Add for RT2870 +- else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- ap_addr->sa_family = ARPHRD_ETHER; +- memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN); +- } +-#endif // WPA_SUPPLICANT_SUPPORT // +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIWAP(=EMPTY)\n")); +- return -ENOTCONN; +- } +- +- return 0; +-} +- +-/* +- * Units are in db above the noise floor. That means the +- * rssi values reported in the tx/rx descriptors in the +- * driver are the SNR expressed in db. +- * +- * If you assume that the noise floor is -95, which is an +- * excellent assumption 99.5 % of the time, then you can +- * derive the absolute signal level (i.e. -95 + rssi). +- * There are some other slight factors to take into account +- * depending on whether the rssi measurement is from 11b, +- * 11g, or 11a. These differences are at most 2db and +- * can be documented. +- * +- * NB: various calculations are based on the orinoco/wavelan +- * drivers for compatibility +- */ +-static void set_quality(PRTMP_ADAPTER pAdapter, +- struct iw_quality *iq, +- signed char rssi) +-{ +- __u8 ChannelQuality; +- +- // Normalize Rssi +- if (rssi >= -50) +- ChannelQuality = 100; +- else if (rssi >= -80) // between -50 ~ -80dbm +- ChannelQuality = (__u8)(24 + ((rssi + 80) * 26)/10); +- else if (rssi >= -90) // between -80 ~ -90dbm +- ChannelQuality = (__u8)((rssi + 90) * 26)/10; +- else +- ChannelQuality = 0; +- +- iq->qual = (__u8)ChannelQuality; +- +- iq->level = (__u8)(rssi); +- iq->noise = (pAdapter->BbpWriteLatch[66] > pAdapter->BbpTuning.FalseCcaUpperThreshold) ? ((__u8)pAdapter->BbpTuning.FalseCcaUpperThreshold) : ((__u8) pAdapter->BbpWriteLatch[66]); // noise level (dBm) +- iq->noise += 256 - 143; +- iq->updated = pAdapter->iw_stats.qual.updated; +-} +- +-int rt_ioctl_iwaplist(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- struct sockaddr addr[IW_MAX_AP]; +- struct iw_quality qual[IW_MAX_AP]; +- int i; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- data->length = 0; +- return 0; +- //return -ENETDOWN; +- } +- +- for (i = 0; i = pAdapter->ScanTab.BssNr) +- break; +- addr[i].sa_family = ARPHRD_ETHER; +- memcpy(addr[i].sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, MAC_ADDR_LEN); +- set_quality(pAdapter, &qual[i], pAdapter->ScanTab.BssEntry[i].Rssi); +- } +- data->length = i; +- memcpy(extra, &addr, i*sizeof(addr[0])); +- data->flags = 1; /* signal quality present (sort of) */ +- memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i])); +- +- return 0; +-} +- +-#ifdef SIOCGIWSCAN +-int rt_ioctl_siwscan(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- ULONG Now; +- int Status = NDIS_STATUS_SUCCESS; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (MONITOR_ON(pAdapter)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); +- return -EINVAL; +- } +- +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { +- pAdapter->StaCfg.WpaSupplicantScanCount++; +- } +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; +- if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- return NDIS_STATUS_SUCCESS; +- do{ +- Now = jiffies; +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) && +- (pAdapter->StaCfg.WpaSupplicantScanCount > 3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! WpaSupplicantScanCount > 3\n")); +- Status = NDIS_STATUS_SUCCESS; +- break; +- } +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- if ((OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) && +- ((pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) && +- (pAdapter->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); +- Status = NDIS_STATUS_SUCCESS; +- break; +- } +- +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Reset allowed scan retries +- pAdapter->StaCfg.ScanCnt = 0; +- pAdapter->StaCfg.LastScanTime = Now; +- +- MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- 0, +- NULL); +- +- Status = NDIS_STATUS_SUCCESS; +- RTMP_MLME_HANDLER(pAdapter); +- }while(0); +- return NDIS_STATUS_SUCCESS; +-} +- +-int rt_ioctl_giwscan(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) +-{ +- +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- int i=0; +- PSTRING current_ev = extra, previous_ev = extra; +- PSTRING end_buf; +- PSTRING current_val; +- STRING custom[MAX_CUSTOM_LEN] = {0}; +-#ifndef IWEVGENIE +- unsigned char idx; +-#endif // IWEVGENIE // +- struct iw_event iwe; +- +- if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- /* +- * Still scanning, indicate the caller should try again. +- */ +- return -EAGAIN; +- } +- +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { +- pAdapter->StaCfg.WpaSupplicantScanCount = 0; +- } +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- if (pAdapter->ScanTab.BssNr == 0) +- { +- data->length = 0; +- return 0; +- } +- +-#if WIRELESS_EXT >= 17 +- if (data->length > 0) +- end_buf = extra + data->length; +- else +- end_buf = extra + IW_SCAN_MAX_DATA; +-#else +- end_buf = extra + IW_SCAN_MAX_DATA; +-#endif +- +- for (i = 0; i < pAdapter->ScanTab.BssNr; i++) +- { +- if (current_ev >= end_buf) +- { +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +- +- //MAC address +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWAP; +- iwe.u.ap_addr.sa_family = ARPHRD_ETHER; +- memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN); +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_EVENT(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- /* +- Protocol: +- it will show scanned AP's WirelessMode . +- it might be +- 802.11a +- 802.11a/n +- 802.11g/n +- 802.11b/g/n +- 802.11g +- 802.11b/g +- */ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWNAME; +- +- +- { +- PBSS_ENTRY pBssEntry=&pAdapter->ScanTab.BssEntry[i]; +- BOOLEAN isGonly=FALSE; +- int rateCnt=0; +- +- if (pBssEntry->Channel>14) +- { +- if (pBssEntry->HtCapabilityLen!=0) +- strcpy(iwe.u.name,"802.11a/n"); +- else +- strcpy(iwe.u.name,"802.11a"); +- } +- else +- { +- /* +- if one of non B mode rate is set supported rate . it mean G only. +- */ +- for (rateCnt=0;rateCntSupRateLen;rateCnt++) +- { +- /* +- 6Mbps(140) 9Mbps(146) and >=12Mbps(152) are supported rate , it mean G only. +- */ +- if (pBssEntry->SupRate[rateCnt]==140 || pBssEntry->SupRate[rateCnt]==146 || pBssEntry->SupRate[rateCnt]>=152) +- isGonly=TRUE; +- } +- +- for (rateCnt=0;rateCntExtRateLen;rateCnt++) +- { +- if (pBssEntry->ExtRate[rateCnt]==140 || pBssEntry->ExtRate[rateCnt]==146 || pBssEntry->ExtRate[rateCnt]>=152) +- isGonly=TRUE; +- } +- +- +- if (pBssEntry->HtCapabilityLen!=0) +- { +- if (isGonly==TRUE) +- strcpy(iwe.u.name,"802.11g/n"); +- else +- strcpy(iwe.u.name,"802.11b/g/n"); +- } +- else +- { +- if (isGonly==TRUE) +- strcpy(iwe.u.name,"802.11g"); +- else +- { +- if (pBssEntry->SupRateLen==4 && pBssEntry->ExtRateLen==0) +- strcpy(iwe.u.name,"802.11b"); +- else +- strcpy(iwe.u.name,"802.11b/g"); +- } +- } +- } +- } +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_EVENT(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //ESSID +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWESSID; +- iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].SsidLen; +- iwe.u.data.flags = 1; +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev,end_buf, &iwe, (PSTRING) pAdapter->ScanTab.BssEntry[i].Ssid); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //Network Type +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWMODE; +- if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11IBSS) +- { +- iwe.u.mode = IW_MODE_ADHOC; +- } +- else if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11Infrastructure) +- { +- iwe.u.mode = IW_MODE_INFRA; +- } +- else +- { +- iwe.u.mode = IW_MODE_AUTO; +- } +- iwe.len = IW_EV_UINT_LEN; +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_EVENT(info, current_ev, end_buf, &iwe, IW_EV_UINT_LEN); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //Channel and Frequency +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWFREQ; +- if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) +- iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel; +- else +- iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel; +- iwe.u.freq.e = 0; +- iwe.u.freq.i = 0; +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_EVENT(info, current_ev,end_buf, &iwe, IW_EV_FREQ_LEN); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //Add quality statistics +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = IWEVQUAL; +- iwe.u.qual.level = 0; +- iwe.u.qual.noise = 0; +- set_quality(pAdapter, &iwe.u.qual, pAdapter->ScanTab.BssEntry[i].Rssi); +- current_ev = IWE_STREAM_ADD_EVENT(info, current_ev, end_buf, &iwe, IW_EV_QUAL_LEN); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //Encyption key +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWENCODE; +- if (CAP_IS_PRIVACY_ON (pAdapter->ScanTab.BssEntry[i].CapabilityInfo )) +- iwe.u.data.flags =IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; +- else +- iwe.u.data.flags = IW_ENCODE_DISABLED; +- +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf,&iwe, (char *)pAdapter->SharedKey[BSS0][(iwe.u.data.flags & IW_ENCODE_INDEX)-1].Key); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- +- //Bit Rate +- //================================ +- if (pAdapter->ScanTab.BssEntry[i].SupRateLen) +- { +- UCHAR tmpRate = pAdapter->ScanTab.BssEntry[i].SupRate[pAdapter->ScanTab.BssEntry[i].SupRateLen-1]; +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = SIOCGIWRATE; +- current_val = current_ev + IW_EV_LCP_LEN; +- if (tmpRate == 0x82) +- iwe.u.bitrate.value = 1 * 1000000; +- else if (tmpRate == 0x84) +- iwe.u.bitrate.value = 2 * 1000000; +- else if (tmpRate == 0x8B) +- iwe.u.bitrate.value = 5.5 * 1000000; +- else if (tmpRate == 0x96) +- iwe.u.bitrate.value = 11 * 1000000; +- else +- iwe.u.bitrate.value = (tmpRate/2) * 1000000; +- +- if (tmpRate == 0x6c && pAdapter->ScanTab.BssEntry[i].HtCapabilityLen > 0) +- { +- int rate_count = sizeof(ralinkrate)/sizeof(__s32); +- HT_CAP_INFO capInfo = pAdapter->ScanTab.BssEntry[i].HtCapability.HtCapInfo; +- int shortGI = capInfo.ChannelWidth ? capInfo.ShortGIfor40 : capInfo.ShortGIfor20; +- int maxMCS = pAdapter->ScanTab.BssEntry[i].HtCapability.MCSSet[1] ? 15 : 7; +- int rate_index = 12 + ((UCHAR)capInfo.ChannelWidth * 24) + ((UCHAR)shortGI *48) + ((UCHAR)maxMCS); +- if (rate_index < 0) +- rate_index = 0; +- if (rate_index > rate_count) +- rate_index = rate_count; +- iwe.u.bitrate.value = ralinkrate[rate_index] * 500000; +- } +- +- iwe.u.bitrate.disabled = 0; +- current_val = IWE_STREAM_ADD_VALUE(info, current_ev, +- current_val, end_buf, &iwe, +- IW_EV_PARAM_LEN); +- +- if((current_val-current_ev)>IW_EV_LCP_LEN) +- current_ev = current_val; +- else +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +- +-#ifdef IWEVGENIE +- //WPA IE +- if (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen > 0) +- { +- memset(&iwe, 0, sizeof(iwe)); +- memset(&custom[0], 0, MAX_CUSTOM_LEN); +- memcpy(custom, &(pAdapter->ScanTab.BssEntry[i].WpaIE.IE[0]), +- pAdapter->ScanTab.BssEntry[i].WpaIE.IELen); +- iwe.cmd = IWEVGENIE; +- iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +- +- //WPA2 IE +- if (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen > 0) +- { +- memset(&iwe, 0, sizeof(iwe)); +- memset(&custom[0], 0, MAX_CUSTOM_LEN); +- memcpy(custom, &(pAdapter->ScanTab.BssEntry[i].RsnIE.IE[0]), +- pAdapter->ScanTab.BssEntry[i].RsnIE.IELen); +- iwe.cmd = IWEVGENIE; +- iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +-#else +- //WPA IE +- //================================ +- if (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen > 0) +- { +- NdisZeroMemory(&iwe, sizeof(iwe)); +- memset(&custom[0], 0, MAX_CUSTOM_LEN); +- iwe.cmd = IWEVCUSTOM; +- iwe.u.data.length = (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen * 2) + 7; +- NdisMoveMemory(custom, "wpa_ie=", 7); +- for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; idx++) +- sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].WpaIE.IE[idx]); +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +- +- //WPA2 IE +- if (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen > 0) +- { +- NdisZeroMemory(&iwe, sizeof(iwe)); +- memset(&custom[0], 0, MAX_CUSTOM_LEN); +- iwe.cmd = IWEVCUSTOM; +- iwe.u.data.length = (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen * 2) + 7; +- NdisMoveMemory(custom, "rsn_ie=", 7); +- for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; idx++) +- sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].RsnIE.IE[idx]); +- previous_ev = current_ev; +- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom); +- if (current_ev == previous_ev) +-#if WIRELESS_EXT >= 17 +- return -E2BIG; +-#else +- break; +-#endif +- } +-#endif // IWEVGENIE // +- } +- +- data->length = current_ev - extra; +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +- DBGPRINT(RT_DEBUG_ERROR ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %d\n",i , pAdapter->ScanTab.BssNr, data->length)); +- return 0; +-} +-#endif +- +-int rt_ioctl_siwessid(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *essid) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (data->flags) +- { +- PSTRING pSsidString = NULL; +- +- // Includes null character. +- if (data->length > (IW_ESSID_MAX_SIZE + 1)) +- return -E2BIG; +- +- pSsidString = kmalloc(MAX_LEN_OF_SSID+1, MEM_ALLOC_FLAG); +- if (pSsidString) +- { +- NdisZeroMemory(pSsidString, MAX_LEN_OF_SSID+1); +- NdisMoveMemory(pSsidString, essid, data->length); +- if (Set_SSID_Proc(pAdapter, pSsidString) == FALSE) +- return -EINVAL; +- } +- else +- return -ENOMEM; +- } +- else +- { +- // ANY ssid +- if (Set_SSID_Proc(pAdapter, "") == FALSE) +- return -EINVAL; +- } +- return 0; +-} +- +-int rt_ioctl_giwessid(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *essid) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- data->flags = 1; +- if (MONITOR_ON(pAdapter)) +- { +- data->length = 0; +- return 0; +- } +- +- if (OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("MediaState is connected\n")); +- data->length = pAdapter->CommonCfg.SsidLen; +- memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen); +- } +- else +- {//the ANY ssid was specified +- data->length = 0; +- DBGPRINT(RT_DEBUG_TRACE ,("MediaState is not connected, ess\n")); +- } +- +- return 0; +- +-} +- +-int rt_ioctl_siwnickn(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *nickname) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (data->length > IW_ESSID_MAX_SIZE) +- return -EINVAL; +- +- memset(pAdapter->nickname, 0, IW_ESSID_MAX_SIZE + 1); +- memcpy(pAdapter->nickname, nickname, data->length); +- +- +- return 0; +-} +- +-int rt_ioctl_giwnickn(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *nickname) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- if (data->length > strlen((PSTRING) pAdapter->nickname) + 1) +- data->length = strlen((PSTRING) pAdapter->nickname) + 1; +- if (data->length > 0) { +- memcpy(nickname, pAdapter->nickname, data->length-1); +- nickname[data->length-1] = '\0'; +- } +- return 0; +-} +- +-int rt_ioctl_siwrts(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *rts, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- u16 val; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (rts->disabled) +- val = MAX_RTS_THRESHOLD; +- else if (rts->value < 0 || rts->value > MAX_RTS_THRESHOLD) +- return -EINVAL; +- else if (rts->value == 0) +- val = MAX_RTS_THRESHOLD; +- else +- val = rts->value; +- +- if (val != pAdapter->CommonCfg.RtsThreshold) +- pAdapter->CommonCfg.RtsThreshold = val; +- +- return 0; +-} +- +-int rt_ioctl_giwrts(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *rts, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- rts->value = pAdapter->CommonCfg.RtsThreshold; +- rts->disabled = (rts->value == MAX_RTS_THRESHOLD); +- rts->fixed = 1; +- +- return 0; +-} +- +-int rt_ioctl_siwfrag(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *frag, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- u16 val; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (frag->disabled) +- val = MAX_FRAG_THRESHOLD; +- else if (frag->value >= MIN_FRAG_THRESHOLD || frag->value <= MAX_FRAG_THRESHOLD) +- val = __cpu_to_le16(frag->value & ~0x1); /* even numbers only */ +- else if (frag->value == 0) +- val = MAX_FRAG_THRESHOLD; +- else +- return -EINVAL; +- +- pAdapter->CommonCfg.FragmentThreshold = val; +- return 0; +-} +- +-int rt_ioctl_giwfrag(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *frag, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- frag->value = pAdapter->CommonCfg.FragmentThreshold; +- frag->disabled = (frag->value == MAX_FRAG_THRESHOLD); +- frag->fixed = 1; +- +- return 0; +-} +- +-#define MAX_WEP_KEY_SIZE 13 +-#define MIN_WEP_KEY_SIZE 5 +-int rt_ioctl_siwencode(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *erq, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if ((erq->length == 0) && +- (erq->flags & IW_ENCODE_DISABLED)) +- { +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- goto done; +- } +- else if (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- if (erq->flags & IW_ENCODE_RESTRICTED) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- } +- +- if (erq->length > 0) +- { +- int keyIdx = (erq->flags & IW_ENCODE_INDEX) - 1; +- /* Check the size of the key */ +- if (erq->length > MAX_WEP_KEY_SIZE) +- { +- return -EINVAL; +- } +- /* Check key index */ +- if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::Wrong keyIdx=%d! Using default key instead (%d)\n", +- keyIdx, pAdapter->StaCfg.DefaultKeyId)); +- +- //Using default key +- keyIdx = pAdapter->StaCfg.DefaultKeyId; +- } +- else +- pAdapter->StaCfg.DefaultKeyId = keyIdx; +- +- NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); +- +- if (erq->length == MAX_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MAX_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP128; +- } +- else if (erq->length == MIN_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MIN_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP64; +- } +- else +- /* Disable the key */ +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; +- +- /* Check if the key is not marked as invalid */ +- if(!(erq->flags & IW_ENCODE_NOKEY)) +- { +- /* Copy the key in the driver */ +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, extra, erq->length); +- } +- } +- else +- { +- /* Do we want to just set the transmit key index ? */ +- int index = (erq->flags & IW_ENCODE_INDEX) - 1; +- if ((index >= 0) && (index < 4)) +- { +- pAdapter->StaCfg.DefaultKeyId = index; +- } +- else +- /* Don't complain if only change the mode */ +- if (!(erq->flags & IW_ENCODE_MODE)) +- return -EINVAL; +- } +- +-done: +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::erq->flags=%x\n",erq->flags)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::AuthMode=%x\n",pAdapter->StaCfg.AuthMode)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::DefaultKeyId=%x, KeyLen = %d\n",pAdapter->StaCfg.DefaultKeyId , pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::WepStatus=%x\n",pAdapter->StaCfg.WepStatus)); +- return 0; +-} +- +-int +-rt_ioctl_giwencode(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *erq, char *key) +-{ +- int kid; +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- kid = erq->flags & IW_ENCODE_INDEX; +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_giwencode %d\n", erq->flags & IW_ENCODE_INDEX)); +- +- if (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled) +- { +- erq->length = 0; +- erq->flags = IW_ENCODE_DISABLED; +- } +- else if ((kid > 0) && (kid <=4)) +- { +- // copy wep key +- erq->flags = kid ; /* NB: base 1 */ +- if (erq->length > pAdapter->SharedKey[BSS0][kid-1].KeyLen) +- erq->length = pAdapter->SharedKey[BSS0][kid-1].KeyLen; +- memcpy(key, pAdapter->SharedKey[BSS0][kid-1].Key, erq->length); +- //if ((kid == pAdapter->PortCfg.DefaultKeyId)) +- //erq->flags |= IW_ENCODE_ENABLED; /* XXX */ +- if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ +- else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ +- +- } +- else if (kid == 0) +- { +- if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ +- else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ +- erq->length = pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen; +- memcpy(key, pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].Key, erq->length); +- // copy default key ID +- if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ +- else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ +- erq->flags = pAdapter->StaCfg.DefaultKeyId + 1; /* NB: base 1 */ +- erq->flags |= IW_ENCODE_ENABLED; /* XXX */ +- } +- +- return 0; +- +-} +- +-static int +-rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, +- void *w, char *extra) +-{ +- PRTMP_ADAPTER pAdapter; +- POS_COOKIE pObj; +- PSTRING this_char = extra; +- PSTRING value; +- int Status=0; +- +- pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- if (pAdapter == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- pObj = (POS_COOKIE) pAdapter->OS_Cookie; +- { +- pObj->ioctl_if_type = INT_MAIN; +- pObj->ioctl_if = MAIN_MBSSID; +- } +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (!*this_char) +- return -EINVAL; +- +- if ((value = rtstrchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value && (strcmp(this_char, "SiteSurvey") != 0)) +- return -EINVAL; +- else +- goto SET_PROC; +- +- // reject setting nothing besides ANY ssid(ssidLen=0) +- if (!*value && (strcmp(this_char, "SSID") != 0)) +- return -EINVAL; +- +-SET_PROC: +- for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++) +- { +- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0) +- { +- if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value)) +- { //FALSE:Set private failed then return Invalid argument +- Status = -EINVAL; +- } +- break; //Exit for loop. +- } +- } +- +- if(PRTMP_PRIVATE_SET_PROC->name == NULL) +- { //Not found argument +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_setparam:: (iwpriv) Not Support Set Command [%s=%s]\n", this_char, value)); +- } +- +- return Status; +-} +- +- +-static int +-rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, char *extra) +-{ +- INT Status = 0; +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if (extra == NULL) +- { +- wrq->length = 0; +- return -EIO; +- } +- +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- sprintf(extra, "\n\n"); +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- sprintf(extra+strlen(extra), "Tx success = %ld\n", (ULONG)pAd->ate.TxDoneCount); +- //sprintf(extra+strlen(extra), "Tx success without retry = %ld\n", (ULONG)pAd->ate.TxDoneCount); +- } +- else +-#endif // RALINK_ATE // +- { +- sprintf(extra+strlen(extra), "Tx success = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart); +- sprintf(extra+strlen(extra), "Tx success without retry = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart - (ULONG)pAd->WlanCounters.RetryCount.QuadPart); +- } +- sprintf(extra+strlen(extra), "Tx success after retry = %ld\n", (ULONG)pAd->WlanCounters.RetryCount.QuadPart); +- sprintf(extra+strlen(extra), "Tx fail to Rcv ACK after retry = %ld\n", (ULONG)pAd->WlanCounters.FailedCount.QuadPart); +- sprintf(extra+strlen(extra), "RTS Success Rcv CTS = %ld\n", (ULONG)pAd->WlanCounters.RTSSuccessCount.QuadPart); +- sprintf(extra+strlen(extra), "RTS Fail Rcv CTS = %ld\n", (ULONG)pAd->WlanCounters.RTSFailureCount.QuadPart); +- +- sprintf(extra+strlen(extra), "Rx success = %ld\n", (ULONG)pAd->WlanCounters.ReceivedFragmentCount.QuadPart); +- sprintf(extra+strlen(extra), "Rx with CRC = %ld\n", (ULONG)pAd->WlanCounters.FCSErrorCount.QuadPart); +- sprintf(extra+strlen(extra), "Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer); +- sprintf(extra+strlen(extra), "Rx duplicate frame = %ld\n", (ULONG)pAd->WlanCounters.FrameDuplicateCount.QuadPart); +- +- sprintf(extra+strlen(extra), "False CCA (one second) = %ld\n", (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt); +- +-#ifdef RALINK_ATE +- if (ATE_ON(pAd)) +- { +- if (pAd->ate.RxAntennaSel == 0) +- { +- sprintf(extra+strlen(extra), "RSSI-A = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-B (if available) = %ld\n", (LONG)(pAd->ate.LastRssi1 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-C (if available) = %ld\n\n", (LONG)(pAd->ate.LastRssi2 - pAd->BbpRssiToDbmDelta)); +- } +- else +- { +- sprintf(extra+strlen(extra), "RSSI = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta)); +- } +- } +- else +-#endif // RALINK_ATE // +- { +- sprintf(extra+strlen(extra), "RSSI-A = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi0 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-B (if available) = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi1 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-C (if available) = %ld\n\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi2 - pAd->BbpRssiToDbmDelta)); +- } +-#ifdef WPA_SUPPLICANT_SUPPORT +- sprintf(extra+strlen(extra), "WpaSupplicantUP = %d\n\n", pAd->StaCfg.WpaSupplicantUP); +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- +- +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length)); +- +- return Status; +-} +- +-#ifdef DOT11_N_SUPPORT +-void getBaInfo( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pOutBuf) +-{ +- INT i, j; +- BA_ORI_ENTRY *pOriBAEntry; +- BA_REC_ENTRY *pRecBAEntry; +- +- for (i=0; iMacTab.Content[i]; +- if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC)) +- || (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh)) +- { +- sprintf(pOutBuf, "%s\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n", +- pOutBuf, +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5], pEntry->Aid); +- +- sprintf(pOutBuf, "%s[Recipient]\n", pOutBuf); +- for (j=0; j < NUM_OF_TID; j++) +- { +- if (pEntry->BARecWcidArray[j] != 0) +- { +- pRecBAEntry =&pAd->BATable.BARecEntry[pEntry->BARecWcidArray[j]]; +- sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", pOutBuf, j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen); +- } +- } +- sprintf(pOutBuf, "%s\n", pOutBuf); +- +- sprintf(pOutBuf, "%s[Originator]\n", pOutBuf); +- for (j=0; j < NUM_OF_TID; j++) +- { +- if (pEntry->BAOriWcidArray[j] != 0) +- { +- pOriBAEntry =&pAd->BATable.BAOriEntry[pEntry->BAOriWcidArray[j]]; +- sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", pOutBuf, j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, pEntry->TxSeq[j]); +- } +- } +- sprintf(pOutBuf, "%s\n\n", pOutBuf); +- } +- if (strlen(pOutBuf) > (IW_PRIV_SIZE_MASK - 30)) +- break; +- } +- +- return; +-} +-#endif // DOT11_N_SUPPORT // +- +-static int +-rt_private_show(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, PSTRING extra) +-{ +- INT Status = 0; +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- u32 subcmd = wrq->flags; +- +- pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- if (pAd == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- if (extra == NULL) +- { +- wrq->length = 0; +- return -EIO; +- } +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- +- { +- pObj->ioctl_if_type = INT_MAIN; +- pObj->ioctl_if = MAIN_MBSSID; +- } +- +- switch(subcmd) +- { +- +- case SHOW_CONN_STATUS: +- if (MONITOR_ON(pAd)) +- { +-#ifdef DOT11_N_SUPPORT +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAd->CommonCfg.RegTransmitSetting.field.BW) +- sprintf(extra, "Monitor Mode(CentralChannel %d)\n", pAd->CommonCfg.CentralChannel); +- else +-#endif // DOT11_N_SUPPORT // +- sprintf(extra, "Monitor Mode(Channel %d)\n", pAd->CommonCfg.Channel); +- } +- else +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- if (INFRA_ON(pAd)) +- { +- sprintf(extra, "Connected(AP: %s[%02X:%02X:%02X:%02X:%02X:%02X])\n", +- pAd->CommonCfg.Ssid, +- pAd->CommonCfg.Bssid[0], +- pAd->CommonCfg.Bssid[1], +- pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3], +- pAd->CommonCfg.Bssid[4], +- pAd->CommonCfg.Bssid[5]); +- DBGPRINT(RT_DEBUG_TRACE ,("Ssid=%s ,Ssidlen = %d\n",pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)); +- } +- else if (ADHOC_ON(pAd)) +- sprintf(extra, "Connected\n"); +- } +- else +- { +- sprintf(extra, "Disconnected\n"); +- DBGPRINT(RT_DEBUG_TRACE ,("ConnStatus is not connected\n")); +- } +- } +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case SHOW_DRVIER_VERION: +- sprintf(extra, "Driver version-%s, %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__ ); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +-#ifdef DOT11_N_SUPPORT +- case SHOW_BA_INFO: +- getBaInfo(pAd, extra); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +-#endif // DOT11_N_SUPPORT // +- case SHOW_DESC_INFO: +- { +- Show_DescInfo_Proc(pAd, NULL); +- wrq->length = 0; // 1: size of '\0' +- } +- break; +- case RAIO_OFF: +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- } +- pAd->StaCfg.bSwRadio = FALSE; +- if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == FALSE) +- { +- MlmeRadioOff(pAd); +- // Update extra information +- pAd->ExtraInfo = SW_RADIO_OFF; +- } +- } +- sprintf(extra, "Radio Off\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case RAIO_ON: +- pAd->StaCfg.bSwRadio = TRUE; +- //if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == TRUE) +- { +- MlmeRadioOn(pAd); +- // Update extra information +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- } +- sprintf(extra, "Radio On\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- +- +-#ifdef QOS_DLS_SUPPORT +- case SHOW_DLS_ENTRY_INFO: +- { +- Set_DlsEntryInfo_Display_Proc(pAd, NULL); +- wrq->length = 0; // 1: size of '\0' +- } +- break; +-#endif // QOS_DLS_SUPPORT // +- +- case SHOW_CFG_VALUE: +- { +- Status = RTMPShowCfgValue(pAd, (PSTRING) wrq->pointer, extra); +- if (Status == 0) +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- } +- break; +- case SHOW_ADHOC_ENTRY_INFO: +- Show_Adhoc_MacTable_Proc(pAd, extra); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("%s - unknow subcmd = %d\n", __FUNCTION__, subcmd)); +- break; +- } +- +- return Status; +-} +- +-#ifdef SIOCSIWMLME +-int rt_ioctl_siwmlme(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_mlme *pMlme = (struct iw_mlme *)wrqu->data.pointer; +- MLME_QUEUE_ELEM MsgElem; +- MLME_DISASSOC_REQ_STRUCT DisAssocReq; +- MLME_DEAUTH_REQ_STRUCT DeAuthReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s\n", __FUNCTION__)); +- +- if (pMlme == NULL) +- return -EINVAL; +- +- switch(pMlme->cmd) +- { +-#ifdef IW_MLME_DEAUTH +- case IW_MLME_DEAUTH: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - IW_MLME_DEAUTH\n", __FUNCTION__)); +- COPY_MAC_ADDR(DeAuthReq.Addr, pAd->CommonCfg.Bssid); +- DeAuthReq.Reason = pMlme->reason_code; +- MsgElem.MsgLen = sizeof(MLME_DEAUTH_REQ_STRUCT); +- NdisMoveMemory(MsgElem.Msg, &DeAuthReq, sizeof(MLME_DEAUTH_REQ_STRUCT)); +- MlmeDeauthReqAction(pAd, &MsgElem); +- if (INFRA_ON(pAd)) +- { +- LinkDown(pAd, FALSE); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- } +- break; +-#endif // IW_MLME_DEAUTH // +-#ifdef IW_MLME_DISASSOC +- case IW_MLME_DISASSOC: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - IW_MLME_DISASSOC\n", __FUNCTION__)); +- COPY_MAC_ADDR(DisAssocReq.Addr, pAd->CommonCfg.Bssid); +- DisAssocReq.Reason = pMlme->reason_code; +- +- MsgElem.Machine = ASSOC_STATE_MACHINE; +- MsgElem.MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem.MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(MsgElem.Msg, &DisAssocReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- MlmeDisassocReqAction(pAd, &MsgElem); +- break; +-#endif // IW_MLME_DISASSOC // +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - Unknow Command\n", __FUNCTION__)); +- break; +- } +- +- return 0; +-} +-#endif // SIOCSIWMLME // +- +-#if WIRELESS_EXT > 17 +-int rt_ioctl_siwauth(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_param *param = &wrqu->param; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- switch (param->flags & IW_AUTH_INDEX) { +- case IW_AUTH_WPA_VERSION: +- if (param->value == IW_AUTH_WPA_VERSION_WPA) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- if (pAdapter->StaCfg.BssType == BSS_ADHOC) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- } +- else if (param->value == IW_AUTH_WPA_VERSION_WPA2) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_CIPHER_PAIRWISE: +- if (param->value == IW_AUTH_CIPHER_NONE) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- } +- else if (param->value == IW_AUTH_CIPHER_WEP40 || +- param->value == IW_AUTH_CIPHER_WEP104) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; +-#ifdef WPA_SUPPLICANT_SUPPORT +- pAdapter->StaCfg.IEEE8021X = FALSE; +-#endif // WPA_SUPPLICANT_SUPPORT // +- } +- else if (param->value == IW_AUTH_CIPHER_TKIP) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if (param->value == IW_AUTH_CIPHER_CCMP) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption3Enabled; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_CIPHER_PAIRWISE - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_CIPHER_GROUP: +- if (param->value == IW_AUTH_CIPHER_NONE) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- } +- else if (param->value == IW_AUTH_CIPHER_WEP40 || +- param->value == IW_AUTH_CIPHER_WEP104) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +- } +- else if (param->value == IW_AUTH_CIPHER_TKIP) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption2Enabled; +- } +- else if (param->value == IW_AUTH_CIPHER_CCMP) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption3Enabled; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_CIPHER_GROUP - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_KEY_MGMT: +- if (param->value == IW_AUTH_KEY_MGMT_802_1X) +- { +- if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +-#ifdef WPA_SUPPLICANT_SUPPORT +- pAdapter->StaCfg.IEEE8021X = FALSE; +-#endif // WPA_SUPPLICANT_SUPPORT // +- } +- else if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +-#ifdef WPA_SUPPLICANT_SUPPORT +- pAdapter->StaCfg.IEEE8021X = FALSE; +-#endif // WPA_SUPPLICANT_SUPPORT // +- } +-#ifdef WPA_SUPPLICANT_SUPPORT +- else +- // WEP 1x +- pAdapter->StaCfg.IEEE8021X = TRUE; +-#endif // WPA_SUPPLICANT_SUPPORT // +- } +- else if (param->value == 0) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_KEY_MGMT - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_RX_UNENCRYPTED_EAPOL: +- break; +- case IW_AUTH_PRIVACY_INVOKED: +- /*if (param->value == 0) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- }*/ +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_PRIVACY_INVOKED - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_DROP_UNENCRYPTED: +- if (param->value != 0) +- pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- else +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_80211_AUTH_ALG: +- if (param->value & IW_AUTH_ALG_SHARED_KEY) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- } +- else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- } +- else +- return -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_80211_AUTH_ALG - param->value = %d!\n", __FUNCTION__, param->value)); +- break; +- case IW_AUTH_WPA_ENABLED: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_ENABLED - Driver supports WPA!(param->value = %d)\n", __FUNCTION__, param->value)); +- break; +- default: +- return -EOPNOTSUPP; +-} +- +- return 0; +-} +- +-int rt_ioctl_giwauth(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_param *param = &wrqu->param; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- switch (param->flags & IW_AUTH_INDEX) { +- case IW_AUTH_DROP_UNENCRYPTED: +- param->value = (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled) ? 0 : 1; +- break; +- +- case IW_AUTH_80211_AUTH_ALG: +- param->value = (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) ? IW_AUTH_ALG_SHARED_KEY : IW_AUTH_ALG_OPEN_SYSTEM; +- break; +- +- case IW_AUTH_WPA_ENABLED: +- param->value = (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) ? 1 : 0; +- break; +- +- default: +- return -EOPNOTSUPP; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_giwauth::param->value = %d!\n", param->value)); +- return 0; +-} +- +-void fnSetCipherKey( +- IN PRTMP_ADAPTER pAdapter, +- IN INT keyIdx, +- IN UCHAR CipherAlg, +- IN BOOLEAN bGTK, +- IN struct iw_encode_ext *ext) +-{ +- NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, LEN_TKIP_EK); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].TxMic, ext->key + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].RxMic, ext->key + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CipherAlg; +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- pAdapter->SharedKey[BSS0][keyIdx].Key, +- pAdapter->SharedKey[BSS0][keyIdx].TxMic, +- pAdapter->SharedKey[BSS0][keyIdx].RxMic); +- +- if (bGTK) +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- NULL); +- else +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- &pAdapter->MacTab.Content[BSSID_WCID]); +-} +- +-int rt_ioctl_siwencodeext(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) +- { +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_point *encoding = &wrqu->encoding; +- struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; +- int keyIdx, alg = ext->alg; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (encoding->flags & IW_ENCODE_DISABLED) +- { +- keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; +- // set BSSID wcid entry of the Pair-wise Key table as no-security mode +- AsicRemovePairwiseKeyEntry(pAdapter, BSS0, BSSID_WCID); +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAdapter, 0, (UCHAR)keyIdx); +- NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::Remove all keys!(encoding->flags = %x)\n", __FUNCTION__, encoding->flags)); +- } +- else +- { +- // Get Key Index and convet to our own defined key index +- keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; +- if((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) +- return -EINVAL; +- +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- pAdapter->StaCfg.DefaultKeyId = keyIdx; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::DefaultKeyId = %d\n", __FUNCTION__, pAdapter->StaCfg.DefaultKeyId)); +- } +- +- switch (alg) { +- case IW_ENCODE_ALG_NONE: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_NONE\n", __FUNCTION__)); +- break; +- case IW_ENCODE_ALG_WEP: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_WEP - ext->key_len = %d, keyIdx = %d\n", __FUNCTION__, ext->key_len, keyIdx)); +- if (ext->key_len == MAX_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MAX_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP128; +- } +- else if (ext->key_len == MIN_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MIN_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP64; +- } +- else +- return -EINVAL; +- +- NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, ext->key_len); +- +- if (pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled || +- pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- { +- // Set Group key material to Asic +- AsicAddSharedKeyEntry(pAdapter, BSS0, keyIdx, pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, pAdapter->SharedKey[BSS0][keyIdx].Key, NULL, NULL); +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAdapter, BSS0, keyIdx, pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, NULL); +- STA_PORT_SECURED(pAdapter); +- // Indicate Connected for GUI +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- break; +- case IW_ENCODE_ALG_TKIP: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_TKIP - keyIdx = %d, ext->key_len = %d\n", __FUNCTION__, keyIdx, ext->key_len)); +- if (ext->key_len == 32) +- { +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, FALSE, ext); +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, TRUE, ext); +- +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else +- return -EINVAL; +- break; +- case IW_ENCODE_ALG_CCMP: +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, FALSE, ext); +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, TRUE, ext); +- +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- break; +- default: +- return -EINVAL; +- } +- } +- +- return 0; +-} +- +-int +-rt_ioctl_giwencodeext(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- PCHAR pKey = NULL; +- struct iw_point *encoding = &wrqu->encoding; +- struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; +- int idx, max_key_len; +- +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_giwencodeext\n")); +- +- max_key_len = encoding->length - sizeof(*ext); +- if (max_key_len < 0) +- return -EINVAL; +- +- idx = encoding->flags & IW_ENCODE_INDEX; +- if (idx) +- { +- if (idx < 1 || idx > 4) +- return -EINVAL; +- idx--; +- +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)) +- { +- if (idx != pAd->StaCfg.DefaultKeyId) +- { +- ext->key_len = 0; +- return 0; +- } +- } +- } +- else +- idx = pAd->StaCfg.DefaultKeyId; +- +- encoding->flags = idx + 1; +- memset(ext, 0, sizeof(*ext)); +- +- ext->key_len = 0; +- switch(pAd->StaCfg.WepStatus) { +- case Ndis802_11WEPDisabled: +- ext->alg = IW_ENCODE_ALG_NONE; +- encoding->flags |= IW_ENCODE_DISABLED; +- break; +- case Ndis802_11WEPEnabled: +- ext->alg = IW_ENCODE_ALG_WEP; +- if (pAd->SharedKey[BSS0][idx].KeyLen > max_key_len) +- return -E2BIG; +- else +- { +- ext->key_len = pAd->SharedKey[BSS0][idx].KeyLen; +- pKey = (PCHAR)&(pAd->SharedKey[BSS0][idx].Key[0]); +- } +- break; +- case Ndis802_11Encryption2Enabled: +- case Ndis802_11Encryption3Enabled: +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) +- ext->alg = IW_ENCODE_ALG_TKIP; +- else +- ext->alg = IW_ENCODE_ALG_CCMP; +- +- if (max_key_len < 32) +- return -E2BIG; +- else +- { +- ext->key_len = 32; +- pKey = (PCHAR)&pAd->StaCfg.PMK[0]; +- } +- break; +- default: +- return -EINVAL; +- } +- +- if (ext->key_len && pKey) +- { +- encoding->flags |= IW_ENCODE_ENABLED; +- memcpy(ext->key, pKey, ext->key_len); +- } +- +- return 0; +-} +- +-#ifdef SIOCSIWGENIE +-int rt_ioctl_siwgenie(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_siwgenie\n")); +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- if (wrqu->data.length > MAX_LEN_OF_RSNIE || +- (wrqu->data.length && extra == NULL)) +- return -EINVAL; +- +- if (wrqu->data.length) +- { +- pAd->StaCfg.RSNIE_Len = wrqu->data.length; +- NdisMoveMemory(&pAd->StaCfg.RSN_IE[0], extra, pAd->StaCfg.RSNIE_Len); +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +- pAd->StaCfg.bRSN_IE_FromWpaSupplicant = TRUE; +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- } +- else +- { +- pAd->StaCfg.RSNIE_Len = 0; +- NdisZeroMemory(&pAd->StaCfg.RSN_IE[0], MAX_LEN_OF_RSNIE); +- } +- +- return 0; +-} +-#endif // SIOCSIWGENIE // +- +-int rt_ioctl_giwgenie(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- if ((pAd->StaCfg.RSNIE_Len == 0) || +- (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)) +- { +- wrqu->data.length = 0; +- return 0; +- } +- +-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT +-#ifdef SIOCSIWGENIE +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { +- if (wrqu->data.length < pAd->StaCfg.RSNIE_Len) +- return -E2BIG; +- +- wrqu->data.length = pAd->StaCfg.RSNIE_Len; +- memcpy(extra, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); +- } +- else +-#endif // SIOCSIWGENIE // +-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT // +- { +- UCHAR RSNIe = IE_WPA; +- +- if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) // ID, Len +- return -E2BIG; +- wrqu->data.length = pAd->StaCfg.RSNIE_Len + 2; +- +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) +- RSNIe = IE_RSN; +- +- extra[0] = (char)RSNIe; +- extra[1] = pAd->StaCfg.RSNIE_Len; +- memcpy(extra+2, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); +- } +- +- return 0; +-} +- +-int rt_ioctl_siwpmksa(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer; +- INT CachedIdx = 0, idx = 0; +- +- if (pPmksa == NULL) +- return -EINVAL; +- +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_siwpmksa\n")); +- switch(pPmksa->cmd) +- { +- case IW_PMKSA_FLUSH: +- NdisZeroMemory(pAd->StaCfg.SavedPMK, sizeof(BSSID_INFO)*PMKID_NO); +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_FLUSH\n")); +- break; +- case IW_PMKSA_REMOVE: +- for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; CachedIdx++) +- { +- // compare the BSSID +- if (NdisEqualMemory(pPmksa->bssid.sa_data, pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN)) +- { +- NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN); +- NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx].PMKID, 16); +- for (idx = CachedIdx; idx < (pAd->StaCfg.SavedPMKNum - 1); idx++) +- { +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[idx].BSSID[0], &pAd->StaCfg.SavedPMK[idx+1].BSSID[0], MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[idx].PMKID[0], &pAd->StaCfg.SavedPMK[idx+1].PMKID[0], 16); +- } +- pAd->StaCfg.SavedPMKNum--; +- break; +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_REMOVE\n")); +- break; +- case IW_PMKSA_ADD: +- for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; CachedIdx++) +- { +- // compare the BSSID +- if (NdisEqualMemory(pPmksa->bssid.sa_data, pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN)) +- break; +- } +- +- // Found, replace it +- if (CachedIdx < PMKID_NO) +- { +- DBGPRINT(RT_DEBUG_OFF, ("Update PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].BSSID[0], pPmksa->bssid.sa_data, MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].PMKID[0], pPmksa->pmkid, 16); +- pAd->StaCfg.SavedPMKNum++; +- } +- // Not found, replace the last one +- else +- { +- // Randomly replace one +- CachedIdx = (pPmksa->bssid.sa_data[5] % PMKID_NO); +- DBGPRINT(RT_DEBUG_OFF, ("Update PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].BSSID[0], pPmksa->bssid.sa_data, MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].PMKID[0], pPmksa->pmkid, 16); +- } +- +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_ADD\n")); +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - Unknow Command!!\n")); +- break; +- } +- +- return 0; +-} +-#endif // #if WIRELESS_EXT > 17 +- +-#ifdef DBG +-static int +-rt_private_ioctl_bbp(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, char *extra) +- { +- PSTRING this_char; +- PSTRING value = NULL; +- UCHAR regBBP = 0; +-// CHAR arg[255]={0}; +- UINT32 bbpId; +- UINT32 bbpValue; +- BOOLEAN bIsPrintAllBBP = FALSE; +- INT Status = 0; +- PRTMP_ADAPTER pAdapter = RTMP_OS_NETDEV_GET_PRIV(dev); +- +- +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- +- if (wrq->length > 1) //No parameters. +- { +- sprintf(extra, "\n"); +- +- //Parsing Read or Write +- this_char = wrq->pointer; +- DBGPRINT(RT_DEBUG_TRACE, ("this_char=%s\n", this_char)); +- if (!*this_char) +- goto next; +- +- if ((value = rtstrchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value || !*value) +- { //Read +- DBGPRINT(RT_DEBUG_TRACE, ("this_char=%s, value=%s\n", this_char, value)); +- if (sscanf(this_char, "%d", &(bbpId)) == 1) +- { +- if (bbpId <= MAX_BBP_ID) +- { +-#ifdef RALINK_ATE +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- } +- else +-#endif // RALINK_ATE // +- { +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- } +- sprintf(extra+strlen(extra), "R%02d[0x%02X]:%02X\n", bbpId, bbpId, regBBP); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- DBGPRINT(RT_DEBUG_TRACE, ("msg=%s\n", extra)); +- } +- else +- {//Invalid parametes, so default printk all bbp +- bIsPrintAllBBP = TRUE; +- goto next; +- } +- } +- else +- { //Invalid parametes, so default printk all bbp +- bIsPrintAllBBP = TRUE; +- goto next; +- } +- } +- else +- { //Write +- if ((sscanf(this_char, "%d", &(bbpId)) == 1) && (sscanf(value, "%x", &(bbpValue)) == 1)) +- { +- if (bbpId <= MAX_BBP_ID) +- { +-#ifdef RALINK_ATE +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, bbpId, bbpValue); +- /* read it back for showing */ +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- } +- else +-#endif // RALINK_ATE // +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, bbpId, bbpValue); +- /* read it back for showing */ +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- } +- sprintf(extra+strlen(extra), "R%02d[0x%02X]:%02X\n", bbpId, bbpId, regBBP); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- DBGPRINT(RT_DEBUG_TRACE, ("msg=%s\n", extra)); +- } +- else +- {//Invalid parametes, so default printk all bbp +- bIsPrintAllBBP = TRUE; +- goto next; +- } +- } +- else +- { //Invalid parametes, so default printk all bbp +- bIsPrintAllBBP = TRUE; +- goto next; +- } +- } +- } +- else +- bIsPrintAllBBP = TRUE; +- +-next: +- if (bIsPrintAllBBP) +- { +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- sprintf(extra, "\n"); +- for (bbpId = 0; bbpId <= MAX_BBP_ID; bbpId++) +- { +- if (strlen(extra) >= (IW_PRIV_SIZE_MASK - 20)) +- break; +-#ifdef RALINK_ATE +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- } +- else +-#endif // RALINK_ATE // +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- sprintf(extra+strlen(extra), "R%02d[0x%02X]:%02X ", bbpId, bbpId, regBBP); +- if (bbpId%5 == 4) +- sprintf(extra+strlen(extra), "%03d = %02X\n", bbpId, regBBP); // edit by johnli, change display format +- } +- +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- DBGPRINT(RT_DEBUG_TRACE, ("wrq->length = %d\n", wrq->length)); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==rt_private_ioctl_bbp\n\n")); +- +- return Status; +-} +-#endif // DBG // +- +-int rt_ioctl_siwrate(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- UINT32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::Network is down!\n")); +- return -ENETDOWN; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::(rate = %d, fixed = %d)\n", rate, fixed)); +- /* rate = -1 => auto rate +- rate = X, fixed = 1 => (fixed rate X) +- */ +- if (rate == -1) +- { +- //Auto Rate +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- pAd->StaCfg.bAutoTxRateSwitch = TRUE; +- if ((pAd->CommonCfg.PhyMode <= PHY_11G) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM)) +- RTMPSetDesiredRates(pAd, -1); +- +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- } +- else +- { +- if (fixed) +- { +- pAd->StaCfg.bAutoTxRateSwitch = FALSE; +- if ((pAd->CommonCfg.PhyMode <= PHY_11G) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM)) +- RTMPSetDesiredRates(pAd, rate); +- else +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- } +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::(HtMcs=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- } +- else +- { +- // TODO: rate = X, fixed = 0 => (rates <= X) +- return -EOPNOTSUPP; +- } +- } +- +- return 0; +-} +- +-int rt_ioctl_giwrate(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) +-{ +- PRTMP_ADAPTER pAd = RTMP_OS_NETDEV_GET_PRIV(dev); +- int rate_index = 0, rate_count = 0; +- HTTRANSMIT_SETTING ht_setting; +-/* Remove to global variable +- __s32 ralinkrate[] = +- {2, 4, 11, 22, // CCK +- 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +- 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 +- 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 +- 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 +- 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 +- 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 +- 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 +- 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 +- 90, 180, 270, 360, 540, 720, 810, 900}; // 40MHz, 400ns GI, MCS: 16 ~ 23 +-*/ +- +- rate_count = sizeof(ralinkrate)/sizeof(__s32); +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if ((pAd->StaCfg.bAutoTxRateSwitch == FALSE) && +- (INFRA_ON(pAd)) && +- ((pAd->CommonCfg.PhyMode <= PHY_11G) || (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM))) +- ht_setting.word = pAd->StaCfg.HTPhyMode.word; +- else +- ht_setting.word = pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; +- +-#ifdef DOT11_N_SUPPORT +- if (ht_setting.field.MODE >= MODE_HTMIX) +- { +-// rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); +- rate_index = 12 + ((UCHAR)ht_setting.field.BW *24) + ((UCHAR)ht_setting.field.ShortGI *48) + ((UCHAR)ht_setting.field.MCS); +- } +- else +-#endif // DOT11_N_SUPPORT // +- if (ht_setting.field.MODE == MODE_OFDM) +- rate_index = (UCHAR)(ht_setting.field.MCS) + 4; +- else if (ht_setting.field.MODE == MODE_CCK) +- rate_index = (UCHAR)(ht_setting.field.MCS); +- +- if (rate_index < 0) +- rate_index = 0; +- +- if (rate_index > rate_count) +- rate_index = rate_count; +- +- wrqu->bitrate.value = ralinkrate[rate_index] * 500000; +- wrqu->bitrate.disabled = 0; +- +- return 0; +-} +- +-static const iw_handler rt_handler[] = +-{ +- (iw_handler) NULL, /* SIOCSIWCOMMIT */ +- (iw_handler) rt_ioctl_giwname, /* SIOCGIWNAME */ +- (iw_handler) NULL, /* SIOCSIWNWID */ +- (iw_handler) NULL, /* SIOCGIWNWID */ +- (iw_handler) rt_ioctl_siwfreq, /* SIOCSIWFREQ */ +- (iw_handler) rt_ioctl_giwfreq, /* SIOCGIWFREQ */ +- (iw_handler) rt_ioctl_siwmode, /* SIOCSIWMODE */ +- (iw_handler) rt_ioctl_giwmode, /* SIOCGIWMODE */ +- (iw_handler) NULL, /* SIOCSIWSENS */ +- (iw_handler) NULL, /* SIOCGIWSENS */ +- (iw_handler) NULL /* not used */, /* SIOCSIWRANGE */ +- (iw_handler) rt_ioctl_giwrange, /* SIOCGIWRANGE */ +- (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */ +- (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */ +- (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */ +- (iw_handler) rt28xx_get_wireless_stats /* kernel code */, /* SIOCGIWSTATS */ +- (iw_handler) NULL, /* SIOCSIWSPY */ +- (iw_handler) NULL, /* SIOCGIWSPY */ +- (iw_handler) NULL, /* SIOCSIWTHRSPY */ +- (iw_handler) NULL, /* SIOCGIWTHRSPY */ +- (iw_handler) rt_ioctl_siwap, /* SIOCSIWAP */ +- (iw_handler) rt_ioctl_giwap, /* SIOCGIWAP */ +-#ifdef SIOCSIWMLME +- (iw_handler) rt_ioctl_siwmlme, /* SIOCSIWMLME */ +-#else +- (iw_handler) NULL, /* SIOCSIWMLME */ +-#endif // SIOCSIWMLME // +- (iw_handler) rt_ioctl_iwaplist, /* SIOCGIWAPLIST */ +-#ifdef SIOCGIWSCAN +- (iw_handler) rt_ioctl_siwscan, /* SIOCSIWSCAN */ +- (iw_handler) rt_ioctl_giwscan, /* SIOCGIWSCAN */ +-#else +- (iw_handler) NULL, /* SIOCSIWSCAN */ +- (iw_handler) NULL, /* SIOCGIWSCAN */ +-#endif /* SIOCGIWSCAN */ +- (iw_handler) rt_ioctl_siwessid, /* SIOCSIWESSID */ +- (iw_handler) rt_ioctl_giwessid, /* SIOCGIWESSID */ +- (iw_handler) rt_ioctl_siwnickn, /* SIOCSIWNICKN */ +- (iw_handler) rt_ioctl_giwnickn, /* SIOCGIWNICKN */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) rt_ioctl_siwrate, /* SIOCSIWRATE */ +- (iw_handler) rt_ioctl_giwrate, /* SIOCGIWRATE */ +- (iw_handler) rt_ioctl_siwrts, /* SIOCSIWRTS */ +- (iw_handler) rt_ioctl_giwrts, /* SIOCGIWRTS */ +- (iw_handler) rt_ioctl_siwfrag, /* SIOCSIWFRAG */ +- (iw_handler) rt_ioctl_giwfrag, /* SIOCGIWFRAG */ +- (iw_handler) NULL, /* SIOCSIWTXPOW */ +- (iw_handler) NULL, /* SIOCGIWTXPOW */ +- (iw_handler) NULL, /* SIOCSIWRETRY */ +- (iw_handler) NULL, /* SIOCGIWRETRY */ +- (iw_handler) rt_ioctl_siwencode, /* SIOCSIWENCODE */ +- (iw_handler) rt_ioctl_giwencode, /* SIOCGIWENCODE */ +- (iw_handler) NULL, /* SIOCSIWPOWER */ +- (iw_handler) NULL, /* SIOCGIWPOWER */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) NULL, /* -- hole -- */ +-#if WIRELESS_EXT > 17 +- (iw_handler) rt_ioctl_siwgenie, /* SIOCSIWGENIE */ +- (iw_handler) rt_ioctl_giwgenie, /* SIOCGIWGENIE */ +- (iw_handler) rt_ioctl_siwauth, /* SIOCSIWAUTH */ +- (iw_handler) rt_ioctl_giwauth, /* SIOCGIWAUTH */ +- (iw_handler) rt_ioctl_siwencodeext, /* SIOCSIWENCODEEXT */ +- (iw_handler) rt_ioctl_giwencodeext, /* SIOCGIWENCODEEXT */ +- (iw_handler) rt_ioctl_siwpmksa, /* SIOCSIWPMKSA */ +-#endif +-}; +- +-static const iw_handler rt_priv_handlers[] = { +- (iw_handler) NULL, /* + 0x00 */ +- (iw_handler) NULL, /* + 0x01 */ +- (iw_handler) rt_ioctl_setparam, /* + 0x02 */ +-#ifdef DBG +- (iw_handler) rt_private_ioctl_bbp, /* + 0x03 */ +-#else +- (iw_handler) NULL, /* + 0x03 */ +-#endif +- (iw_handler) NULL, /* + 0x04 */ +- (iw_handler) NULL, /* + 0x05 */ +- (iw_handler) NULL, /* + 0x06 */ +- (iw_handler) NULL, /* + 0x07 */ +- (iw_handler) NULL, /* + 0x08 */ +- (iw_handler) rt_private_get_statistics, /* + 0x09 */ +- (iw_handler) NULL, /* + 0x0A */ +- (iw_handler) NULL, /* + 0x0B */ +- (iw_handler) NULL, /* + 0x0C */ +- (iw_handler) NULL, /* + 0x0D */ +- (iw_handler) NULL, /* + 0x0E */ +- (iw_handler) NULL, /* + 0x0F */ +- (iw_handler) NULL, /* + 0x10 */ +- (iw_handler) rt_private_show, /* + 0x11 */ +- (iw_handler) NULL, /* + 0x12 */ +- (iw_handler) NULL, /* + 0x13 */ +- (iw_handler) NULL, /* + 0x14 */ +- (iw_handler) NULL, /* + 0x15 */ +- (iw_handler) NULL, /* + 0x16 */ +- (iw_handler) NULL, /* + 0x17 */ +- (iw_handler) NULL, /* + 0x18 */ +-}; +- +-const struct iw_handler_def rt28xx_iw_handler_def = +-{ +-#define N(a) (sizeof (a) / sizeof (a[0])) +- .standard = (iw_handler *) rt_handler, +- .num_standard = sizeof(rt_handler) / sizeof(iw_handler), +- .private = (iw_handler *) rt_priv_handlers, +- .num_private = N(rt_priv_handlers), +- .private_args = (struct iw_priv_args *) privtab, +- .num_private_args = N(privtab), +-#if IW_HANDLER_VERSION >= 7 +- .get_wireless_stats = rt28xx_get_wireless_stats, +-#endif +-}; +- +-INT RTMPSetInformation( +- IN PRTMP_ADAPTER pAd, +- IN OUT struct ifreq *rq, +- IN INT cmd) +-{ +- struct iwreq *wrq = (struct iwreq *) rq; +- NDIS_802_11_SSID Ssid; +- NDIS_802_11_MAC_ADDRESS Bssid; +- RT_802_11_PHY_MODE PhyMode; +- RT_802_11_STA_CONFIG StaConfig; +- NDIS_802_11_RATES aryRates; +- RT_802_11_PREAMBLE Preamble; +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeMax; +- NDIS_802_11_NETWORK_INFRASTRUCTURE BssType; +- NDIS_802_11_RTS_THRESHOLD RtsThresh; +- NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; +- NDIS_802_11_POWER_MODE PowerMode; +- PNDIS_802_11_KEY pKey = NULL; +- PNDIS_802_11_WEP pWepKey =NULL; +- PNDIS_802_11_REMOVE_KEY pRemoveKey = NULL; +- NDIS_802_11_CONFIGURATION Config, *pConfig = NULL; +- NDIS_802_11_NETWORK_TYPE NetType; +- ULONG Now; +- UINT KeyIdx = 0; +- INT Status = NDIS_STATUS_SUCCESS, MaxPhyMode = PHY_11G; +- ULONG PowerTemp; +- BOOLEAN RadioState; +- BOOLEAN StateMachineTouched = FALSE; +- PNDIS_802_11_PASSPHRASE ppassphrase = NULL; +-#ifdef DOT11_N_SUPPORT +- OID_SET_HT_PHYMODE HT_PhyMode; //11n ,kathy +-#endif // DOT11_N_SUPPORT // +-#ifdef WPA_SUPPLICANT_SUPPORT +- PNDIS_802_11_PMKID pPmkId = NULL; +- BOOLEAN IEEE8021xState = FALSE; +- BOOLEAN IEEE8021x_required_keys = FALSE; +- UCHAR wpa_supplicant_enable = 0; +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef SNMP_SUPPORT +- TX_RTY_CFG_STRUC tx_rty_cfg; +- ULONG ShortRetryLimit, LongRetryLimit; +- UCHAR ctmp; +-#endif // SNMP_SUPPORT // +- +- +- +- +-#ifdef DOT11_N_SUPPORT +- MaxPhyMode = PHY_11N_5G; +-#endif // DOT11_N_SUPPORT // +- +- DBGPRINT(RT_DEBUG_TRACE, ("-->RTMPSetInformation(), 0x%08x\n", cmd&0x7FFF)); +- switch(cmd & 0x7FFF) { +- case RT_OID_802_11_COUNTRY_REGION: +- if (wrq->u.data.length < sizeof(UCHAR)) +- Status = -EINVAL; +- // Only avaliable when EEPROM not programming +- else if (!(pAd->CommonCfg.CountryRegion & 0x80) && !(pAd->CommonCfg.CountryRegionForABand & 0x80)) +- { +- ULONG Country; +- UCHAR TmpPhy; +- +- Status = copy_from_user(&Country, wrq->u.data.pointer, wrq->u.data.length); +- pAd->CommonCfg.CountryRegion = (UCHAR)(Country & 0x000000FF); +- pAd->CommonCfg.CountryRegionForABand = (UCHAR)((Country >> 8) & 0x000000FF); +- TmpPhy = pAd->CommonCfg.PhyMode; +- pAd->CommonCfg.PhyMode = 0xff; +- // Build all corresponding channel information +- RTMPSetPhyMode(pAd, TmpPhy); +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_COUNTRY_REGION (A:%d B/G:%d)\n", pAd->CommonCfg.CountryRegionForABand, +- pAd->CommonCfg.CountryRegion)); +- } +- break; +- case OID_802_11_BSSID_LIST_SCAN: +- Now = jiffies; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_BSSID_LIST_SCAN, TxCnt = %d \n", pAd->RalinkCounters.LastOneSecTotalTxCount)); +- +- if (MONITOR_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); +- break; +- } +- +- //Benson add 20080527, when radio off, sta don't need to scan +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- break; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is scanning now !!!\n")); +- pAd->StaCfg.bScanReqIsFromWebUI = TRUE; +- Status = NDIS_STATUS_SUCCESS; +- break; +- } +- +- if (pAd->RalinkCounters.LastOneSecTotalTxCount > 100) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Link UP, ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); +- Status = NDIS_STATUS_SUCCESS; +- pAd->StaCfg.ScanCnt = 99; // Prevent auto scan triggered by this OID +- break; +- } +- +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) && +- ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); +- Status = NDIS_STATUS_SUCCESS; +- pAd->StaCfg.ScanCnt = 99; // Prevent auto scan triggered by this OID +- break; +- } +- +- +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Reset allowed scan retries +- pAd->StaCfg.ScanCnt = 0; +- pAd->StaCfg.LastScanTime = Now; +- +- pAd->StaCfg.bScanReqIsFromWebUI = TRUE; +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- 0, +- NULL); +- +- Status = NDIS_STATUS_SUCCESS; +- StateMachineTouched = TRUE; +- break; +- case OID_802_11_SSID: +- if (wrq->u.data.length != sizeof(NDIS_802_11_SSID)) +- Status = -EINVAL; +- else +- { +- PSTRING pSsidString = NULL; +- Status = copy_from_user(&Ssid, wrq->u.data.pointer, wrq->u.data.length); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SSID (Len=%d,Ssid=%s)\n", Ssid.SsidLength, Ssid.Ssid)); +- if (Ssid.SsidLength > MAX_LEN_OF_SSID) +- Status = -EINVAL; +- else +- { +- if (Ssid.SsidLength == 0) +- { +- Set_SSID_Proc(pAd, ""); +- } +- else +- { +- pSsidString = (PSTRING)kmalloc(MAX_LEN_OF_SSID+1, MEM_ALLOC_FLAG); +- if (pSsidString) +- { +- NdisZeroMemory(pSsidString, MAX_LEN_OF_SSID+1); +- NdisMoveMemory(pSsidString, Ssid.Ssid, Ssid.SsidLength); +- Set_SSID_Proc(pAd, pSsidString); +- kfree(pSsidString); +- } +- else +- Status = -ENOMEM; +- } +- } +- } +- break; +- case OID_802_11_SET_PASSPHRASE: +- ppassphrase= kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- +- if(ppassphrase== NULL) +- { +- Status = -ENOMEM; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SET_PASSPHRASE, Failed!!\n")); +- break; +- } +- else +- { +- Status = copy_from_user(ppassphrase, wrq->u.data.pointer, wrq->u.data.length); +- +- if (Status) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SET_PASSPHRASE, Failed (length mismatch)!!\n")); +- } +- else +- { +- if(ppassphrase->KeyLength < 8 || ppassphrase->KeyLength > 64) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SET_PASSPHRASE, Failed (len less than 8 or greater than 64)!!\n")); +- } +- else +- { +- // set key passphrase and length +- NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- NdisMoveMemory(pAd->StaCfg.WpaPassPhrase, &ppassphrase->KeyMaterial, ppassphrase->KeyLength); +- pAd->StaCfg.WpaPassPhraseLen = ppassphrase->KeyLength; +- hex_dump("pAd->StaCfg.WpaPassPhrase", pAd->StaCfg.WpaPassPhrase, 64); +- printk("WpaPassPhrase=%s\n",pAd->StaCfg.WpaPassPhrase); +- } +- } +- } +- kfree(ppassphrase); +- break; +- +- case OID_802_11_BSSID: +- if (wrq->u.data.length != sizeof(NDIS_802_11_MAC_ADDRESS)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&Bssid, wrq->u.data.pointer, wrq->u.data.length); +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- +- // Prevent to connect AP again in STAMlmePeriodicExec +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- +- // Reset allowed scan retries +- pAd->StaCfg.ScanCnt = 0; +- +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID, +- sizeof(NDIS_802_11_MAC_ADDRESS), +- (VOID *)&Bssid); +- Status = NDIS_STATUS_SUCCESS; +- StateMachineTouched = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_BSSID %02x:%02x:%02x:%02x:%02x:%02x\n", +- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); +- } +- break; +- case RT_OID_802_11_RADIO: +- if (wrq->u.data.length != sizeof(BOOLEAN)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&RadioState, wrq->u.data.pointer, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_RADIO (=%d)\n", RadioState)); +- if (pAd->StaCfg.bSwRadio != RadioState) +- { +- pAd->StaCfg.bSwRadio = RadioState; +- if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == TRUE) +- { +- MlmeRadioOn(pAd); +- // Update extra information +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- } +- +- MlmeRadioOff(pAd); +- // Update extra information +- pAd->ExtraInfo = SW_RADIO_OFF; +- } +- } +- } +- } +- break; +- case RT_OID_802_11_PHY_MODE: +- if (wrq->u.data.length != sizeof(RT_802_11_PHY_MODE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&PhyMode, wrq->u.data.pointer, wrq->u.data.length); +- if (PhyMode <= MaxPhyMode) +- { +- RTMPSetPhyMode(pAd, PhyMode); +-#ifdef DOT11_N_SUPPORT +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_PHY_MODE (=%d)\n", PhyMode)); +- } +- break; +- case RT_OID_802_11_STA_CONFIG: +- if (wrq->u.data.length != sizeof(RT_802_11_STA_CONFIG)) +- Status = -EINVAL; +- else +- { +- UINT32 Value; +- +- Status = copy_from_user(&StaConfig, wrq->u.data.pointer, wrq->u.data.length); +- pAd->CommonCfg.bEnableTxBurst = StaConfig.EnableTxBurst; +- pAd->CommonCfg.UseBGProtection = StaConfig.UseBGProtection; +- pAd->CommonCfg.bUseShortSlotTime = 1; // 2003-10-30 always SHORT SLOT capable +- if ((pAd->CommonCfg.PhyMode != StaConfig.AdhocMode) && +- (StaConfig.AdhocMode <= MaxPhyMode)) +- { +- // allow dynamic change of "USE OFDM rate or not" in ADHOC mode +- // if setting changed, need to reset current TX rate as well as BEACON frame format +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- pAd->CommonCfg.PhyMode = StaConfig.AdhocMode; +- RTMPSetPhyMode(pAd, PhyMode); +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_STA_CONFIG (Burst=%d, Protection=%ld,ShortSlot=%d\n", +- pAd->CommonCfg.bEnableTxBurst, +- pAd->CommonCfg.UseBGProtection, +- pAd->CommonCfg.bUseShortSlotTime)); +- +- if (pAd->CommonCfg.PSPXlink) +- Value = PSPXLINK; +- else +- Value = STANORMAL; +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, Value); +- Value = 0; +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +- Value &= (~0x80); +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +- } +- break; +- case OID_802_11_DESIRED_RATES: +- if (wrq->u.data.length != sizeof(NDIS_802_11_RATES)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&aryRates, wrq->u.data.pointer, wrq->u.data.length); +- NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); +- NdisMoveMemory(pAd->CommonCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES)); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_DESIRED_RATES (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n", +- pAd->CommonCfg.DesireRate[0],pAd->CommonCfg.DesireRate[1], +- pAd->CommonCfg.DesireRate[2],pAd->CommonCfg.DesireRate[3], +- pAd->CommonCfg.DesireRate[4],pAd->CommonCfg.DesireRate[5], +- pAd->CommonCfg.DesireRate[6],pAd->CommonCfg.DesireRate[7] )); +- // Changing DesiredRate may affect the MAX TX rate we used to TX frames out +- MlmeUpdateTxRates(pAd, FALSE, 0); +- } +- break; +- case RT_OID_802_11_PREAMBLE: +- if (wrq->u.data.length != sizeof(RT_802_11_PREAMBLE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&Preamble, wrq->u.data.pointer, wrq->u.data.length); +- if (Preamble == Rt802_11PreambleShort) +- { +- pAd->CommonCfg.TxPreamble = Preamble; +- MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); +- } +- else if ((Preamble == Rt802_11PreambleLong) || (Preamble == Rt802_11PreambleAuto)) +- { +- // if user wants AUTO, initialize to LONG here, then change according to AP's +- // capability upon association. +- pAd->CommonCfg.TxPreamble = Preamble; +- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); +- } +- else +- { +- Status = -EINVAL; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_PREAMBLE (=%d)\n", Preamble)); +- } +- break; +- case OID_802_11_WEP_STATUS: +- if (wrq->u.data.length != sizeof(NDIS_802_11_WEP_STATUS)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&WepStatus, wrq->u.data.pointer, wrq->u.data.length); +- // Since TKIP, AES, WEP are all supported. It should not have any invalid setting +- if (WepStatus <= Ndis802_11Encryption3KeyAbsent) +- { +- if (pAd->StaCfg.WepStatus != WepStatus) +- { +- // Config has changed +- pAd->bConfigChanged = TRUE; +- } +- pAd->StaCfg.WepStatus = WepStatus; +- pAd->StaCfg.OrigWepStatus = WepStatus; +- pAd->StaCfg.PairCipher = WepStatus; +- pAd->StaCfg.GroupCipher = WepStatus; +- } +- else +- { +- Status = -EINVAL; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEP_STATUS (=%d)\n",WepStatus)); +- } +- break; +- case OID_802_11_AUTHENTICATION_MODE: +- if (wrq->u.data.length != sizeof(NDIS_802_11_AUTHENTICATION_MODE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&AuthMode, wrq->u.data.pointer, wrq->u.data.length); +- if (AuthMode > Ndis802_11AuthModeMax) +- { +- Status = -EINVAL; +- break; +- } +- else +- { +- if (pAd->StaCfg.AuthMode != AuthMode) +- { +- // Config has changed +- pAd->bConfigChanged = TRUE; +- } +- pAd->StaCfg.AuthMode = AuthMode; +- } +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_AUTHENTICATION_MODE (=%d) \n",pAd->StaCfg.AuthMode)); +- } +- break; +- case OID_802_11_INFRASTRUCTURE_MODE: +- if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&BssType, wrq->u.data.pointer, wrq->u.data.length); +- +- if (BssType == Ndis802_11IBSS) +- Set_NetworkType_Proc(pAd, "Adhoc"); +- else if (BssType == Ndis802_11Infrastructure) +- Set_NetworkType_Proc(pAd, "Infra"); +- else if (BssType == Ndis802_11Monitor) +- Set_NetworkType_Proc(pAd, "Monitor"); +- else +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_INFRASTRUCTURE_MODE (unknown)\n")); +- } +- } +- break; +- case OID_802_11_REMOVE_WEP: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_WEP\n")); +- if (wrq->u.data.length != sizeof(NDIS_802_11_KEY_INDEX)) +- { +- Status = -EINVAL; +- } +- else +- { +- KeyIdx = *(NDIS_802_11_KEY_INDEX *) wrq->u.data.pointer; +- +- if (KeyIdx & 0x80000000) +- { +- // Should never set default bit when remove key +- Status = -EINVAL; +- } +- else +- { +- KeyIdx = KeyIdx & 0x0fffffff; +- if (KeyIdx >= 4){ +- Status = -EINVAL; +- } +- else +- { +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0; +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx); +- } +- } +- } +- break; +- case RT_OID_802_11_RESET_COUNTERS: +- NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11)); +- NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3)); +- NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK)); +- pAd->Counters8023.RxNoBuffer = 0; +- pAd->Counters8023.GoodReceives = 0; +- pAd->Counters8023.RxNoBuffer = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_RESET_COUNTERS \n")); +- break; +- case OID_802_11_RTS_THRESHOLD: +- if (wrq->u.data.length != sizeof(NDIS_802_11_RTS_THRESHOLD)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&RtsThresh, wrq->u.data.pointer, wrq->u.data.length); +- if (RtsThresh > MAX_RTS_THRESHOLD) +- Status = -EINVAL; +- else +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_RTS_THRESHOLD (=%ld)\n",RtsThresh)); +- break; +- case OID_802_11_FRAGMENTATION_THRESHOLD: +- if (wrq->u.data.length != sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&FragThresh, wrq->u.data.pointer, wrq->u.data.length); +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { +- if (FragThresh == 0) +- { +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- } +- else +- Status = -EINVAL; +- } +- else +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_FRAGMENTATION_THRESHOLD (=%ld) \n",FragThresh)); +- break; +- case OID_802_11_POWER_MODE: +- if (wrq->u.data.length != sizeof(NDIS_802_11_POWER_MODE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&PowerMode, wrq->u.data.pointer, wrq->u.data.length); +- if (PowerMode == Ndis802_11PowerModeCAM) +- Set_PSMode_Proc(pAd, "CAM"); +- else if (PowerMode == Ndis802_11PowerModeMAX_PSP) +- Set_PSMode_Proc(pAd, "Max_PSP"); +- else if (PowerMode == Ndis802_11PowerModeFast_PSP) +- Set_PSMode_Proc(pAd, "Fast_PSP"); +- else if (PowerMode == Ndis802_11PowerModeLegacy_PSP) +- Set_PSMode_Proc(pAd, "Legacy_PSP"); +- else +- Status = -EINVAL; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_POWER_MODE (=%d)\n",PowerMode)); +- break; +- case RT_OID_802_11_TX_POWER_LEVEL_1: +- if (wrq->u.data.length < sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&PowerTemp, wrq->u.data.pointer, wrq->u.data.length); +- if (PowerTemp > 100) +- PowerTemp = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPowerDefault = PowerTemp; //keep current setting. +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_TX_POWER_LEVEL_1 (=%ld)\n", pAd->CommonCfg.TxPowerPercentage)); +- } +- break; +- case OID_802_11_NETWORK_TYPE_IN_USE: +- if (wrq->u.data.length != sizeof(NDIS_802_11_NETWORK_TYPE)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&NetType, wrq->u.data.pointer, wrq->u.data.length); +- +- if (NetType == Ndis802_11DS) +- RTMPSetPhyMode(pAd, PHY_11B); +- else if (NetType == Ndis802_11OFDM24) +- RTMPSetPhyMode(pAd, PHY_11BG_MIXED); +- else if (NetType == Ndis802_11OFDM5) +- RTMPSetPhyMode(pAd, PHY_11A); +- else +- Status = -EINVAL; +-#ifdef DOT11_N_SUPPORT +- if (Status == NDIS_STATUS_SUCCESS) +- SetCommonHT(pAd); +-#endif // DOT11_N_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_NETWORK_TYPE_IN_USE (=%d)\n",NetType)); +- } +- break; +- // For WPA PSK PMK key +- case RT_OID_802_11_ADD_WPA: +- pKey = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- if(pKey == NULL) +- { +- Status = -ENOMEM; +- break; +- } +- +- Status = copy_from_user(pKey, wrq->u.data.pointer, wrq->u.data.length); +- if (pKey->Length != wrq->u.data.length) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_ADD_WPA, Failed!!\n")); +- } +- else +- { +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) ) +- { +- Status = -EOPNOTSUPP; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_ADD_WPA, Failed!! [AuthMode != WPAPSK/WPA2PSK/WPANONE]\n")); +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) ) // Only for WPA PSK mode +- { +- NdisMoveMemory(pAd->StaCfg.PMK, &pKey->KeyMaterial, pKey->KeyLength); +- // Use RaConfig as PSK agent. +- // Start STA supplicant state machine +- if (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- pAd->StaCfg.WpaState = SS_START; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_ADD_WPA (id=0x%x, Len=%d-byte)\n", pKey->KeyIndex, pKey->KeyLength)); +- } +- else +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_ADD_WPA (id=0x%x, Len=%d-byte)\n", pKey->KeyIndex, pKey->KeyLength)); +- } +- } +- kfree(pKey); +- break; +- case OID_802_11_REMOVE_KEY: +- pRemoveKey = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- if(pRemoveKey == NULL) +- { +- Status = -ENOMEM; +- break; +- } +- +- Status = copy_from_user(pRemoveKey, wrq->u.data.pointer, wrq->u.data.length); +- if (pRemoveKey->Length != wrq->u.data.length) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY, Failed!!\n")); +- } +- else +- { +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- RTMPWPARemoveKeyProc(pAd, pRemoveKey); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY, Remove WPA Key!!\n")); +- } +- else +- { +- KeyIdx = pRemoveKey->KeyIndex; +- +- if (KeyIdx & 0x80000000) +- { +- // Should never set default bit when remove key +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY, Failed!!(Should never set default bit when remove key)\n")); +- } +- else +- { +- KeyIdx = KeyIdx & 0x0fffffff; +- if (KeyIdx > 3) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY, Failed!!(KeyId[%d] out of range)\n", KeyIdx)); +- } +- else +- { +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0; +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_REMOVE_KEY (id=0x%x, Len=%d-byte)\n", pRemoveKey->KeyIndex, pRemoveKey->Length)); +- } +- } +- } +- } +- kfree(pRemoveKey); +- break; +- // New for WPA +- case OID_802_11_ADD_KEY: +- pKey = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- if(pKey == NULL) +- { +- Status = -ENOMEM; +- break; +- } +- Status = copy_from_user(pKey, wrq->u.data.pointer, wrq->u.data.length); +- if (pKey->Length != wrq->u.data.length) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_KEY, Failed!!\n")); +- } +- else +- { +- RTMPAddKey(pAd, pKey); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_KEY (id=0x%x, Len=%d-byte)\n", pKey->KeyIndex, pKey->KeyLength)); +- } +- kfree(pKey); +- break; +- case OID_802_11_CONFIGURATION: +- if (wrq->u.data.length != sizeof(NDIS_802_11_CONFIGURATION)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&Config, wrq->u.data.pointer, wrq->u.data.length); +- pConfig = &Config; +- +- if ((pConfig->BeaconPeriod >= 20) && (pConfig->BeaconPeriod <=400)) +- pAd->CommonCfg.BeaconPeriod = (USHORT) pConfig->BeaconPeriod; +- +- pAd->StaActive.AtimWin = (USHORT) pConfig->ATIMWindow; +- MAP_KHZ_TO_CHANNEL_ID(pConfig->DSConfig, pAd->CommonCfg.Channel); +- // +- // Save the channel on MlmeAux for CntlOidRTBssidProc used. +- // +- pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_CONFIGURATION (BeacnPeriod=%ld,AtimW=%ld,Ch=%d)\n", +- pConfig->BeaconPeriod, pConfig->ATIMWindow, pAd->CommonCfg.Channel)); +- // Config has changed +- pAd->bConfigChanged = TRUE; +- } +- break; +-#ifdef DOT11_N_SUPPORT +- case RT_OID_802_11_SET_HT_PHYMODE: +- if (wrq->u.data.length != sizeof(OID_SET_HT_PHYMODE)) +- Status = -EINVAL; +- else +- { +- POID_SET_HT_PHYMODE pHTPhyMode = &HT_PhyMode; +- +- Status = copy_from_user(&HT_PhyMode, wrq->u.data.pointer, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::pHTPhyMode (PhyMode = %d,TransmitNo = %d, HtMode = %d, ExtOffset = %d , MCS = %d, BW = %d, STBC = %d, SHORTGI = %d) \n", +- pHTPhyMode->PhyMode, pHTPhyMode->TransmitNo,pHTPhyMode->HtMode,pHTPhyMode->ExtOffset, +- pHTPhyMode->MCS, pHTPhyMode->BW, pHTPhyMode->STBC, pHTPhyMode->SHORTGI)); +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- RTMPSetHT(pAd, pHTPhyMode); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_HT_PHYMODE(MCS=%d,BW=%d,SGI=%d,STBC=%d)\n", +- pAd->StaCfg.HTPhyMode.field.MCS, pAd->StaCfg.HTPhyMode.field.BW, pAd->StaCfg.HTPhyMode.field.ShortGI, +- pAd->StaCfg.HTPhyMode.field.STBC)); +- break; +-#endif // DOT11_N_SUPPORT // +- case RT_OID_802_11_SET_APSD_SETTING: +- if (wrq->u.data.length != sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- ULONG apsd ; +- Status = copy_from_user(&apsd, wrq->u.data.pointer, wrq->u.data.length); +- +- /*------------------------------------------------------------------- +- |B31~B7 | B6~B5 | B4 | B3 | B2 | B1 | B0 | +- --------------------------------------------------------------------- +- | Rsvd | Max SP Len | AC_VO | AC_VI | AC_BK | AC_BE | APSD Capable | +- ---------------------------------------------------------------------*/ +- pAd->CommonCfg.bAPSDCapable = (apsd & 0x00000001) ? TRUE : FALSE; +- pAd->CommonCfg.bAPSDAC_BE = ((apsd & 0x00000002) >> 1) ? TRUE : FALSE; +- pAd->CommonCfg.bAPSDAC_BK = ((apsd & 0x00000004) >> 2) ? TRUE : FALSE; +- pAd->CommonCfg.bAPSDAC_VI = ((apsd & 0x00000008) >> 3) ? TRUE : FALSE; +- pAd->CommonCfg.bAPSDAC_VO = ((apsd & 0x00000010) >> 4) ? TRUE : FALSE; +- pAd->CommonCfg.MaxSPLength = (UCHAR)((apsd & 0x00000060) >> 5); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_APSD_SETTING (apsd=0x%lx, APSDCap=%d, [BE,BK,VI,VO]=[%d/%d/%d/%d], MaxSPLen=%d)\n", apsd, pAd->CommonCfg.bAPSDCapable, +- pAd->CommonCfg.bAPSDAC_BE, pAd->CommonCfg.bAPSDAC_BK, pAd->CommonCfg.bAPSDAC_VI, pAd->CommonCfg.bAPSDAC_VO, pAd->CommonCfg.MaxSPLength)); +- } +- break; +- +- case RT_OID_802_11_SET_APSD_PSM: +- if (wrq->u.data.length != sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- // Driver needs to notify AP when PSM changes +- Status = copy_from_user(&pAd->CommonCfg.bAPSDForcePowerSave, wrq->u.data.pointer, wrq->u.data.length); +- if (pAd->CommonCfg.bAPSDForcePowerSave != pAd->StaCfg.Psm) +- { +- RTMP_SET_PSM_BIT(pAd, pAd->CommonCfg.bAPSDForcePowerSave); +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_APSD_PSM (bAPSDForcePowerSave:%d)\n", pAd->CommonCfg.bAPSDForcePowerSave)); +- } +- break; +-#ifdef QOS_DLS_SUPPORT +- case RT_OID_802_11_SET_DLS: +- if (wrq->u.data.length != sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- BOOLEAN oldvalue = pAd->CommonCfg.bDLSCapable; +- Status = copy_from_user(&pAd->CommonCfg.bDLSCapable, wrq->u.data.pointer, wrq->u.data.length); +- if (oldvalue && !pAd->CommonCfg.bDLSCapable) +- { +- int i; +- // tear down local dls table entry +- for (i=0; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- +- // tear down peer dls table entry +- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; iStaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)) +- { +- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE; +- pAd->StaCfg.DLSEntry[i].Valid = FALSE; +- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr); +- } +- } +- } +- +- DBGPRINT(RT_DEBUG_TRACE,("Set::RT_OID_802_11_SET_DLS (=%d)\n", pAd->CommonCfg.bDLSCapable)); +- } +- break; +- +- case RT_OID_802_11_SET_DLS_PARAM: +- if (wrq->u.data.length != sizeof(RT_802_11_DLS_UI)) +- Status = -EINVAL; +- else +- { +- RT_802_11_DLS Dls; +- +- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS)); +- RTMPMoveMemory(&Dls, wrq->u.data.pointer, sizeof(RT_802_11_DLS_UI)); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- RT_OID_802_11_SET_DLS_PARAM, +- sizeof(RT_802_11_DLS), +- &Dls); +- DBGPRINT(RT_DEBUG_TRACE,("Set::RT_OID_802_11_SET_DLS_PARAM \n")); +- } +- break; +-#endif // QOS_DLS_SUPPORT // +- case RT_OID_802_11_SET_WMM: +- if (wrq->u.data.length != sizeof(BOOLEAN)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&pAd->CommonCfg.bWmmCapable, wrq->u.data.pointer, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_WMM (=%d) \n", pAd->CommonCfg.bWmmCapable)); +- } +- break; +- +- case OID_802_11_DISASSOCIATE: +- // +- // Set NdisRadioStateOff to TRUE, instead of called MlmeRadioOff. +- // Later on, NDIS_802_11_BSSID_LIST_EX->NumberOfItems should be 0 +- // when query OID_802_11_BSSID_LIST. +- // +- // TRUE: NumberOfItems will set to 0. +- // FALSE: NumberOfItems no change. +- // +- pAd->CommonCfg.NdisRadioStateOff = TRUE; +- // Set to immediately send the media disconnect event +- pAd->MlmeAux.CurrReqIsFromNdis = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_DISASSOCIATE \n")); +- +- +- if (INFRA_ON(pAd)) +- { +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_DISASSOCIATE, +- 0, +- NULL); +- +- StateMachineTouched = TRUE; +- } +- break; +- +-#ifdef DOT11_N_SUPPORT +- case RT_OID_802_11_SET_IMME_BA_CAP: +- if (wrq->u.data.length != sizeof(OID_BACAP_STRUC)) +- Status = -EINVAL; +- else +- { +- OID_BACAP_STRUC Orde ; +- Status = copy_from_user(&Orde, wrq->u.data.pointer, wrq->u.data.length); +- if (Orde.Policy > BA_NOTUSE) +- { +- Status = NDIS_STATUS_INVALID_DATA; +- } +- else if (Orde.Policy == BA_NOTUSE) +- { +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- pAd->CommonCfg.BACapability.field.MpduDensity = Orde.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = Orde.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = Orde.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize= Orde.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs= Orde.MMPSmode; +- pAd->CommonCfg.BACapability.field.MMPSmode = Orde.MMPSmode; +- // UPdata to HT IE +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = Orde.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = Orde.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = Orde.MpduDensity; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = Orde.AutoBA; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; // we only support immediate BA. +- pAd->CommonCfg.BACapability.field.MpduDensity = Orde.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = Orde.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = Orde.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize= Orde.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = Orde.MMPSmode; +- pAd->CommonCfg.BACapability.field.MMPSmode = Orde.MMPSmode; +- +- // UPdata to HT IE +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = Orde.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = Orde.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = Orde.MpduDensity; +- +- if (pAd->CommonCfg.BACapability.field.RxBAWinLimit > MAX_RX_REORDERBUF) +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = MAX_RX_REORDERBUF; +- +- } +- +- pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::(Orde.AutoBA = %d) (Policy=%d)(ReBAWinLimit=%d)(TxBAWinLimit=%d)(AutoMode=%d)\n",Orde.AutoBA, pAd->CommonCfg.BACapability.field.Policy, +- pAd->CommonCfg.BACapability.field.RxBAWinLimit,pAd->CommonCfg.BACapability.field.TxBAWinLimit, pAd->CommonCfg.BACapability.field.AutoBA)); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::(MimoPs = %d)(AmsduEnable = %d) (AmsduSize=%d)(MpduDensity=%d)\n",pAd->CommonCfg.DesiredHtPhy.MimoPs, pAd->CommonCfg.DesiredHtPhy.AmsduEnable, +- pAd->CommonCfg.DesiredHtPhy.AmsduSize, pAd->CommonCfg.DesiredHtPhy.MpduDensity)); +- } +- +- break; +- case RT_OID_802_11_ADD_IMME_BA: +- DBGPRINT(RT_DEBUG_TRACE, (" Set :: RT_OID_802_11_ADD_IMME_BA \n")); +- if (wrq->u.data.length != sizeof(OID_ADD_BA_ENTRY)) +- Status = -EINVAL; +- else +- { +- UCHAR index; +- OID_ADD_BA_ENTRY BA; +- MAC_TABLE_ENTRY *pEntry; +- +- Status = copy_from_user(&BA, wrq->u.data.pointer, wrq->u.data.length); +- if (BA.TID > 15) +- { +- Status = NDIS_STATUS_INVALID_DATA; +- break; +- } +- else +- { +- //BATableInsertEntry +- //As ad-hoc mode, BA pair is not limited to only BSSID. so add via OID. +- index = BA.TID; +- // in ad hoc mode, when adding BA pair, we should insert this entry into MACEntry too +- pEntry = MacTableLookup(pAd, BA.MACAddr); +- if (!pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT_OID_802_11_ADD_IMME_BA. break on no connection.----:%x:%x\n", BA.MACAddr[4], BA.MACAddr[5])); +- break; +- } +- if (BA.IsRecipient == FALSE) +- { +- if (pEntry->bIAmBadAtheros == TRUE) +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 0x10; +- +- BAOriSessionSetUp(pAd, pEntry, index, 0, 100, TRUE); +- } +- else +- { +- //BATableInsertEntry(pAd, pEntry->Aid, BA.MACAddr, 0, 0xffff, BA.TID, BA.nMSDU, BA.IsRecipient); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_ADD_IMME_BA. Rec = %d. Mac = %x:%x:%x:%x:%x:%x . \n", +- BA.IsRecipient, BA.MACAddr[0], BA.MACAddr[1], BA.MACAddr[2], BA.MACAddr[2] +- , BA.MACAddr[4], BA.MACAddr[5])); +- } +- } +- break; +- +- case RT_OID_802_11_TEAR_IMME_BA: +- DBGPRINT(RT_DEBUG_TRACE, ("Set :: RT_OID_802_11_TEAR_IMME_BA \n")); +- if (wrq->u.data.length != sizeof(OID_ADD_BA_ENTRY)) +- Status = -EINVAL; +- else +- { +- POID_ADD_BA_ENTRY pBA; +- MAC_TABLE_ENTRY *pEntry; +- +- pBA = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- +- if (pBA == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Set :: RT_OID_802_11_TEAR_IMME_BA kmalloc() can't allocate enough memory\n")); +- Status = NDIS_STATUS_FAILURE; +- } +- else +- { +- Status = copy_from_user(pBA, wrq->u.data.pointer, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Set :: RT_OID_802_11_TEAR_IMME_BA(TID=%d, bAllTid=%d)\n", pBA->TID, pBA->bAllTid)); +- +- if (!pBA->bAllTid && (pBA->TID > NUM_OF_TID)) +- { +- Status = NDIS_STATUS_INVALID_DATA; +- break; +- } +- +- if (pBA->IsRecipient == FALSE) +- { +- pEntry = MacTableLookup(pAd, pBA->MACAddr); +- DBGPRINT(RT_DEBUG_TRACE, (" pBA->IsRecipient == FALSE\n")); +- if (pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, (" pBA->pEntry\n")); +- BAOriSessionTearDown(pAd, pEntry->Aid, pBA->TID, FALSE, TRUE); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("Set :: Not found pEntry \n")); +- } +- else +- { +- pEntry = MacTableLookup(pAd, pBA->MACAddr); +- if (pEntry) +- { +- BARecSessionTearDown( pAd, (UCHAR)pEntry->Aid, pBA->TID, TRUE); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("Set :: Not found pEntry \n")); +- } +- kfree(pBA); +- } +- } +- break; +-#endif // DOT11_N_SUPPORT // +- +- // For WPA_SUPPLICANT to set static wep key +- case OID_802_11_ADD_WEP: +- pWepKey = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- +- if(pWepKey == NULL) +- { +- Status = -ENOMEM; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP, Failed!!\n")); +- break; +- } +- Status = copy_from_user(pWepKey, wrq->u.data.pointer, wrq->u.data.length); +- if (Status) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP, Failed (length mismatch)!!\n")); +- } +- else +- { +- KeyIdx = pWepKey->KeyIndex & 0x0fffffff; +- // KeyIdx must be 0 ~ 3 +- if (KeyIdx > 4) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP, Failed (KeyIdx must be smaller than 4)!!\n")); +- } +- else +- { +- UCHAR CipherAlg = 0; +- PUCHAR Key; +- +- // set key material and key length +- NdisZeroMemory(pAd->SharedKey[BSS0][KeyIdx].Key, 16); +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength; +- NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength); +- +- switch(pWepKey->KeyLength) +- { +- case 5: +- CipherAlg = CIPHER_WEP64; +- break; +- case 13: +- CipherAlg = CIPHER_WEP128; +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP, only support CIPHER_WEP64(len:5) & CIPHER_WEP128(len:13)!!\n")); +- Status = -EINVAL; +- break; +- } +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CipherAlg; +- +- // Default key for tx (shared key) +- if (pWepKey->KeyIndex & 0x80000000) +- { +-#ifdef WPA_SUPPLICANT_SUPPORT +- // set key material and key length +- NdisZeroMemory(pAd->StaCfg.DesireSharedKey[KeyIdx].Key, 16); +- pAd->StaCfg.DesireSharedKey[KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength; +- NdisMoveMemory(pAd->StaCfg.DesireSharedKey[KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength); +- pAd->StaCfg.DesireSharedKeyId = KeyIdx; +- pAd->StaCfg.DesireSharedKey[KeyIdx].CipherAlg = CipherAlg; +-#endif // WPA_SUPPLICANT_SUPPORT // +- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; +- } +- +-#ifdef WPA_SUPPLICANT_SUPPORT +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) && +- (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) +- { +- Key = pWepKey->KeyMaterial; +- +- // Set Group key material to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, CipherAlg, Key, NULL, NULL); +- +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, CipherAlg, NULL); +- +- STA_PORT_SECURED(pAd); +- +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- } +- else if (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED) +-#endif // WPA_SUPPLICANT_SUPPORT +- { +- Key = pAd->SharedKey[BSS0][KeyIdx].Key; +- +- // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, CipherAlg, Key, NULL, NULL); +- +- if (pWepKey->KeyIndex & 0x80000000) +- { +- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- // Assign group key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, CipherAlg, NULL); +- // Assign pairwise key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, CipherAlg, pEntry); +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_ADD_WEP (id=0x%x, Len=%d-byte), %s\n", pWepKey->KeyIndex, pWepKey->KeyLength, (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED) ? "Port Secured":"Port NOT Secured")); +- } +- } +- kfree(pWepKey); +- break; +-#ifdef WPA_SUPPLICANT_SUPPORT +- case OID_SET_COUNTERMEASURES: +- if (wrq->u.data.length != sizeof(int)) +- Status = -EINVAL; +- else +- { +- int enabled = 0; +- Status = copy_from_user(&enabled, wrq->u.data.pointer, wrq->u.data.length); +- if (enabled == 1) +- pAd->StaCfg.bBlockAssoc = TRUE; +- else +- // WPA MIC error should block association attempt for 60 seconds +- pAd->StaCfg.bBlockAssoc = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_SET_COUNTERMEASURES bBlockAssoc=%s\n", pAd->StaCfg.bBlockAssoc ? "TRUE":"FALSE")); +- } +- break; +- case RT_OID_WPA_SUPPLICANT_SUPPORT: +- if (wrq->u.data.length != sizeof(UCHAR)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&wpa_supplicant_enable, wrq->u.data.pointer, wrq->u.data.length); +- pAd->StaCfg.WpaSupplicantUP = wpa_supplicant_enable; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_WPA_SUPPLICANT_SUPPORT (=%d)\n", pAd->StaCfg.WpaSupplicantUP)); +- } +- break; +- case OID_802_11_DEAUTHENTICATION: +- if (wrq->u.data.length != sizeof(MLME_DEAUTH_REQ_STRUCT)) +- Status = -EINVAL; +- else +- { +- MLME_DEAUTH_REQ_STRUCT *pInfo; +- MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (MsgElem == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __FUNCTION__)); +- return -EINVAL; +- } +- +- pInfo = (MLME_DEAUTH_REQ_STRUCT *) MsgElem->Msg; +- Status = copy_from_user(pInfo, wrq->u.data.pointer, wrq->u.data.length); +- MlmeDeauthReqAction(pAd, MsgElem); +- kfree(MsgElem); +- +- if (INFRA_ON(pAd)) +- { +- LinkDown(pAd, FALSE); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_DEAUTHENTICATION (Reason=%d)\n", pInfo->Reason)); +- } +- break; +- case OID_802_11_DROP_UNENCRYPTED: +- if (wrq->u.data.length != sizeof(int)) +- Status = -EINVAL; +- else +- { +- int enabled = 0; +- Status = copy_from_user(&enabled, wrq->u.data.pointer, wrq->u.data.length); +- if (enabled == 1) +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- else +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- NdisAcquireSpinLock(&pAd->MacTabLock); +- pAd->MacTab.Content[BSSID_WCID].PortSecured = pAd->StaCfg.PortSecured; +- NdisReleaseSpinLock(&pAd->MacTabLock); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_DROP_UNENCRYPTED (=%d)\n", enabled)); +- } +- break; +- case OID_802_11_SET_IEEE8021X: +- if (wrq->u.data.length != sizeof(BOOLEAN)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&IEEE8021xState, wrq->u.data.pointer, wrq->u.data.length); +- pAd->StaCfg.IEEE8021X = IEEE8021xState; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SET_IEEE8021X (=%d)\n", IEEE8021xState)); +- } +- break; +- case OID_802_11_SET_IEEE8021X_REQUIRE_KEY: +- if (wrq->u.data.length != sizeof(BOOLEAN)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&IEEE8021x_required_keys, wrq->u.data.pointer, wrq->u.data.length); +- pAd->StaCfg.IEEE8021x_required_keys = IEEE8021x_required_keys; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SET_IEEE8021X_REQUIRE_KEY (%d)\n", IEEE8021x_required_keys)); +- } +- break; +- case OID_802_11_PMKID: +- pPmkId = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG); +- +- if(pPmkId == NULL) { +- Status = -ENOMEM; +- break; +- } +- Status = copy_from_user(pPmkId, wrq->u.data.pointer, wrq->u.data.length); +- +- // check the PMKID information +- if (pPmkId->BSSIDInfoCount == 0) +- NdisZeroMemory(pAd->StaCfg.SavedPMK, sizeof(BSSID_INFO)*PMKID_NO); +- else +- { +- PBSSID_INFO pBssIdInfo; +- UINT BssIdx; +- UINT CachedIdx; +- +- for (BssIdx = 0; BssIdx < pPmkId->BSSIDInfoCount; BssIdx++) +- { +- // point to the indexed BSSID_INFO structure +- pBssIdInfo = (PBSSID_INFO) ((PUCHAR) pPmkId + 2 * sizeof(UINT) + BssIdx * sizeof(BSSID_INFO)); +- // Find the entry in the saved data base. +- for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; CachedIdx++) +- { +- // compare the BSSID +- if (NdisEqualMemory(pBssIdInfo->BSSID, pAd->StaCfg.SavedPMK[CachedIdx].BSSID, sizeof(NDIS_802_11_MAC_ADDRESS))) +- break; +- } +- +- // Found, replace it +- if (CachedIdx < PMKID_NO) +- { +- DBGPRINT(RT_DEBUG_OFF, ("Update OID_802_11_PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx], pBssIdInfo, sizeof(BSSID_INFO)); +- pAd->StaCfg.SavedPMKNum++; +- } +- // Not found, replace the last one +- else +- { +- // Randomly replace one +- CachedIdx = (pBssIdInfo->BSSID[5] % PMKID_NO); +- DBGPRINT(RT_DEBUG_OFF, ("Update OID_802_11_PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx], pBssIdInfo, sizeof(BSSID_INFO)); +- } +- } +- } +- if(pPmkId) +- kfree(pPmkId); +- break; +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- +- +-#ifdef SNMP_SUPPORT +- case OID_802_11_SHORTRETRYLIMIT: +- if (wrq->u.data.length != sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&ShortRetryLimit, wrq->u.data.pointer, wrq->u.data.length); +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit; +- RTMP_IO_WRITE32(pAd, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SHORTRETRYLIMIT (tx_rty_cfg.field.ShortRetryLimit=%d, ShortRetryLimit=%ld)\n", tx_rty_cfg.field.ShortRtyLimit, ShortRetryLimit)); +- } +- break; +- +- case OID_802_11_LONGRETRYLIMIT: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_LONGRETRYLIMIT \n")); +- if (wrq->u.data.length != sizeof(ULONG)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&LongRetryLimit, wrq->u.data.pointer, wrq->u.data.length); +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.LongRtyLimit = LongRetryLimit; +- RTMP_IO_WRITE32(pAd, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_LONGRETRYLIMIT (tx_rty_cfg.field.LongRetryLimit= %d,LongRetryLimit=%ld)\n", tx_rty_cfg.field.LongRtyLimit, LongRetryLimit)); +- } +- break; +- +- case OID_802_11_WEPDEFAULTKEYVALUE: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYVALUE\n")); +- pKey = kmalloc(wrq->u.data.length, GFP_KERNEL); +- Status = copy_from_user(pKey, wrq->u.data.pointer, wrq->u.data.length); +- //pKey = &WepKey; +- +- if ( pKey->Length != wrq->u.data.length) +- { +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYVALUE, Failed!!\n")); +- } +- KeyIdx = pKey->KeyIndex & 0x0fffffff; +- DBGPRINT(RT_DEBUG_TRACE,("pKey->KeyIndex =%d, pKey->KeyLength=%d\n", pKey->KeyIndex, pKey->KeyLength)); +- +- // it is a shared key +- if (KeyIdx > 4) +- Status = -EINVAL; +- else +- { +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = (UCHAR) pKey->KeyLength; +- NdisMoveMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, &pKey->KeyMaterial, pKey->KeyLength); +- if (pKey->KeyIndex & 0x80000000) +- { +- // Default key for tx (shared key) +- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; +- } +- //RestartAPIsRequired = TRUE; +- } +- break; +- +- +- case OID_802_11_WEPDEFAULTKEYID: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYID \n")); +- +- if (wrq->u.data.length != sizeof(UCHAR)) +- Status = -EINVAL; +- else +- Status = copy_from_user(&pAd->StaCfg.DefaultKeyId, wrq->u.data.pointer, wrq->u.data.length); +- +- break; +- +- +- case OID_802_11_CURRENTCHANNEL: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_CURRENTCHANNEL \n")); +- if (wrq->u.data.length != sizeof(UCHAR)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&ctmp, wrq->u.data.pointer, wrq->u.data.length); +- sprintf((PSTRING)&ctmp,"%d", ctmp); +- Set_Channel_Proc(pAd, (PSTRING)&ctmp); +- } +- break; +-#endif +- +- +- +- case RT_OID_802_11_SET_PSPXLINK_MODE: +- if (wrq->u.data.length != sizeof(BOOLEAN)) +- Status = -EINVAL; +- else +- { +- Status = copy_from_user(&pAd->CommonCfg.PSPXlink, wrq->u.data.pointer, wrq->u.data.length); +- /*if (pAd->CommonCfg.PSPXlink) +- RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_PROMISCUOUS)*/ +- DBGPRINT(RT_DEBUG_TRACE,("Set::RT_OID_802_11_SET_PSPXLINK_MODE(=%d) \n", pAd->CommonCfg.PSPXlink)); +- } +- break; +- +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("Set::unknown IOCTL's subcmd = 0x%08x\n", cmd)); +- Status = -EOPNOTSUPP; +- break; +- } +- +- +- return Status; +-} +- +-INT RTMPQueryInformation( +- IN PRTMP_ADAPTER pAd, +- IN OUT struct ifreq *rq, +- IN INT cmd) +-{ +- struct iwreq *wrq = (struct iwreq *) rq; +- NDIS_802_11_BSSID_LIST_EX *pBssidList = NULL; +- PNDIS_WLAN_BSSID_EX pBss; +- NDIS_802_11_SSID Ssid; +- NDIS_802_11_CONFIGURATION *pConfiguration = NULL; +- RT_802_11_LINK_STATUS *pLinkStatus = NULL; +- RT_802_11_STA_CONFIG *pStaConfig = NULL; +- NDIS_802_11_STATISTICS *pStatistics = NULL; +- NDIS_802_11_RTS_THRESHOLD RtsThresh; +- NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; +- NDIS_802_11_POWER_MODE PowerMode; +- NDIS_802_11_NETWORK_INFRASTRUCTURE BssType; +- RT_802_11_PREAMBLE PreamType; +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_MEDIA_STATE MediaState; +- ULONG BssBufSize, ulInfo=0, NetworkTypeList[4], apsd = 0; +- USHORT BssLen = 0; +- PUCHAR pBuf = NULL, pPtr; +- INT Status = NDIS_STATUS_SUCCESS; +- UINT we_version_compiled; +- UCHAR i, Padding = 0; +- BOOLEAN RadioState; +- STRING driverVersion[8]; +- OID_SET_HT_PHYMODE *pHTPhyMode = NULL; +- +- +-#ifdef SNMP_SUPPORT +- //for snmp, kathy +- DefaultKeyIdxValue *pKeyIdxValue; +- INT valueLen; +- TX_RTY_CFG_STRUC tx_rty_cfg; +- ULONG ShortRetryLimit, LongRetryLimit; +- UCHAR tmp[64]; +-#endif //SNMP +- +- switch(cmd) +- { +- case RT_OID_DEVICE_NAME: +- wrq->u.data.length = sizeof(pAd->nickname); +- Status = copy_to_user(wrq->u.data.pointer, pAd->nickname, wrq->u.data.length); +- break; +- case RT_OID_VERSION_INFO: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_VERSION_INFO \n")); +- wrq->u.data.length = 8*sizeof(CHAR); +- sprintf(&driverVersion[0], "%s", STA_DRIVER_VERSION); +- driverVersion[7] = '\0'; +- if (copy_to_user(wrq->u.data.pointer, &driverVersion[0], wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- break; +- +- case OID_802_11_BSSID_LIST: +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- /* +- * Still scanning, indicate the caller should try again. +- */ +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_BSSID_LIST (Still scanning)\n")); +- return -EAGAIN; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_BSSID_LIST (%d BSS returned)\n",pAd->ScanTab.BssNr)); +- pAd->StaCfg.bScanReqIsFromWebUI = FALSE; +- // Claculate total buffer size required +- BssBufSize = sizeof(ULONG); +- +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { +- // Align pointer to 4 bytes boundary. +- //Padding = 4 - (pAdapter->ScanTab.BssEntry[i].VarIELen & 0x0003); +- //if (Padding == 4) +- // Padding = 0; +- BssBufSize += (sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs) + pAd->ScanTab.BssEntry[i].VarIELen + Padding); +- } +- +- // For safety issue, we add 256 bytes just in case +- BssBufSize += 256; +- // Allocate the same size as passed from higher layer +- pBuf = kmalloc(BssBufSize, MEM_ALLOC_FLAG); +- if(pBuf == NULL) +- { +- Status = -ENOMEM; +- break; +- } +- // Init 802_11_BSSID_LIST_EX structure +- NdisZeroMemory(pBuf, BssBufSize); +- pBssidList = (PNDIS_802_11_BSSID_LIST_EX) pBuf; +- pBssidList->NumberOfItems = pAd->ScanTab.BssNr; +- +- // Calculate total buffer length +- BssLen = 4; // Consist of NumberOfItems +- // Point to start of NDIS_WLAN_BSSID_EX +- // pPtr = pBuf + sizeof(ULONG); +- pPtr = (PUCHAR) &pBssidList->Bssid[0]; +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { +- pBss = (PNDIS_WLAN_BSSID_EX) pPtr; +- NdisMoveMemory(&pBss->MacAddress, &pAd->ScanTab.BssEntry[i].Bssid, MAC_ADDR_LEN); +- if ((pAd->ScanTab.BssEntry[i].Hidden == 1) && (pAd->StaCfg.bShowHiddenSSID == FALSE)) +- { +- // +- // We must return this SSID during 4way handshaking, otherwise Aegis will failed to parse WPA infomation +- // and then failed to send EAPOl farame. +- // +- if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pAd->StaCfg.PortSecured != WPA_802_1X_PORT_SECURED)) +- { +- pBss->Ssid.SsidLength = pAd->ScanTab.BssEntry[i].SsidLen; +- NdisMoveMemory(pBss->Ssid.Ssid, pAd->ScanTab.BssEntry[i].Ssid, pAd->ScanTab.BssEntry[i].SsidLen); +- } +- else +- pBss->Ssid.SsidLength = 0; +- } +- else +- { +- pBss->Ssid.SsidLength = pAd->ScanTab.BssEntry[i].SsidLen; +- NdisMoveMemory(pBss->Ssid.Ssid, pAd->ScanTab.BssEntry[i].Ssid, pAd->ScanTab.BssEntry[i].SsidLen); +- } +- pBss->Privacy = pAd->ScanTab.BssEntry[i].Privacy; +- pBss->Rssi = pAd->ScanTab.BssEntry[i].Rssi - pAd->BbpRssiToDbmDelta; +- pBss->NetworkTypeInUse = NetworkTypeInUseSanity(&pAd->ScanTab.BssEntry[i]); +- pBss->Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION); +- pBss->Configuration.BeaconPeriod = pAd->ScanTab.BssEntry[i].BeaconPeriod; +- pBss->Configuration.ATIMWindow = pAd->ScanTab.BssEntry[i].AtimWin; +- +- MAP_CHANNEL_ID_TO_KHZ(pAd->ScanTab.BssEntry[i].Channel, pBss->Configuration.DSConfig); +- +- if (pAd->ScanTab.BssEntry[i].BssType == BSS_INFRA) +- pBss->InfrastructureMode = Ndis802_11Infrastructure; +- else +- pBss->InfrastructureMode = Ndis802_11IBSS; +- +- NdisMoveMemory(pBss->SupportedRates, pAd->ScanTab.BssEntry[i].SupRate, pAd->ScanTab.BssEntry[i].SupRateLen); +- NdisMoveMemory(pBss->SupportedRates + pAd->ScanTab.BssEntry[i].SupRateLen, +- pAd->ScanTab.BssEntry[i].ExtRate, +- pAd->ScanTab.BssEntry[i].ExtRateLen); +- +- if (pAd->ScanTab.BssEntry[i].VarIELen == 0) +- { +- pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs); +- NdisMoveMemory(pBss->IEs, &pAd->ScanTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs)); +- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs); +- } +- else +- { +- pBss->IELength = (ULONG)(sizeof(NDIS_802_11_FIXED_IEs) + pAd->ScanTab.BssEntry[i].VarIELen); +- pPtr = pPtr + sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs); +- NdisMoveMemory(pBss->IEs, &pAd->ScanTab.BssEntry[i].FixIEs, sizeof(NDIS_802_11_FIXED_IEs)); +- NdisMoveMemory(pBss->IEs + sizeof(NDIS_802_11_FIXED_IEs), pAd->ScanTab.BssEntry[i].VarIEs, pAd->ScanTab.BssEntry[i].VarIELen); +- pPtr += pAd->ScanTab.BssEntry[i].VarIELen; +- } +- pBss->Length = (ULONG)(sizeof(NDIS_WLAN_BSSID_EX) - 1 + sizeof(NDIS_802_11_FIXED_IEs) + pAd->ScanTab.BssEntry[i].VarIELen + Padding); +- +-#if WIRELESS_EXT < 17 +- if ((BssLen + pBss->Length) < wrq->u.data.length) +- BssLen += pBss->Length; +- else +- { +- pBssidList->NumberOfItems = i; +- break; +- } +-#else +- BssLen += pBss->Length; +-#endif +- } +- +-#if WIRELESS_EXT < 17 +- wrq->u.data.length = BssLen; +-#else +- if (BssLen > wrq->u.data.length) +- { +- kfree(pBssidList); +- return -E2BIG; +- } +- else +- wrq->u.data.length = BssLen; +-#endif +- Status = copy_to_user(wrq->u.data.pointer, pBssidList, BssLen); +- kfree(pBssidList); +- break; +- case OID_802_3_CURRENT_ADDRESS: +- wrq->u.data.length = MAC_ADDR_LEN; +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CurrentAddress, wrq->u.data.length); +- break; +- case OID_GEN_MEDIA_CONNECT_STATUS: +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- MediaState = NdisMediaStateConnected; +- else +- MediaState = NdisMediaStateDisconnected; +- +- wrq->u.data.length = sizeof(NDIS_MEDIA_STATE); +- Status = copy_to_user(wrq->u.data.pointer, &MediaState, wrq->u.data.length); +- break; +- case OID_802_11_BSSID: +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- { +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.Bssid, sizeof(NDIS_802_11_MAC_ADDRESS)); +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_BSSID(=EMPTY)\n")); +- Status = -ENOTCONN; +- } +- break; +- case OID_802_11_SSID: +- NdisZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); +- NdisZeroMemory(Ssid.Ssid, MAX_LEN_OF_SSID); +- Ssid.SsidLength = pAd->CommonCfg.SsidLen; +- memcpy(Ssid.Ssid, pAd->CommonCfg.Ssid, Ssid.SsidLength); +- wrq->u.data.length = sizeof(NDIS_802_11_SSID); +- Status = copy_to_user(wrq->u.data.pointer, &Ssid, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_SSID (Len=%d, ssid=%s)\n", Ssid.SsidLength,Ssid.Ssid)); +- break; +- case RT_OID_802_11_QUERY_LINK_STATUS: +- pLinkStatus = (RT_802_11_LINK_STATUS *) kmalloc(sizeof(RT_802_11_LINK_STATUS), MEM_ALLOC_FLAG); +- if (pLinkStatus) +- { +- pLinkStatus->CurrTxRate = RateIdTo500Kbps[pAd->CommonCfg.TxRate]; // unit : 500 kbps +- pLinkStatus->ChannelQuality = pAd->Mlme.ChannelQuality; +- pLinkStatus->RxByteCount = pAd->RalinkCounters.ReceivedByteCount; +- pLinkStatus->TxByteCount = pAd->RalinkCounters.TransmittedByteCount; +- pLinkStatus->CentralChannel = pAd->CommonCfg.CentralChannel; +- wrq->u.data.length = sizeof(RT_802_11_LINK_STATUS); +- Status = copy_to_user(wrq->u.data.pointer, pLinkStatus, wrq->u.data.length); +- kfree(pLinkStatus); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_LINK_STATUS\n")); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_LINK_STATUS(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case OID_802_11_CONFIGURATION: +- pConfiguration = (NDIS_802_11_CONFIGURATION *) kmalloc(sizeof(NDIS_802_11_CONFIGURATION), MEM_ALLOC_FLAG); +- if (pConfiguration) +- { +- pConfiguration->Length = sizeof(NDIS_802_11_CONFIGURATION); +- pConfiguration->BeaconPeriod = pAd->CommonCfg.BeaconPeriod; +- pConfiguration->ATIMWindow = pAd->StaActive.AtimWin; +- MAP_CHANNEL_ID_TO_KHZ(pAd->CommonCfg.Channel, pConfiguration->DSConfig); +- wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION); +- Status = copy_to_user(wrq->u.data.pointer, pConfiguration, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_CONFIGURATION(BeaconPeriod=%ld,AtimW=%ld,Channel=%d) \n", +- pConfiguration->BeaconPeriod, pConfiguration->ATIMWindow, pAd->CommonCfg.Channel)); +- kfree(pConfiguration); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_CONFIGURATION(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case RT_OID_802_11_SNR_0: +- if ((pAd->StaCfg.LastSNR0 > 0)) +- { +- ulInfo = ((0xeb - pAd->StaCfg.LastSNR0) * 3) / 16 ; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_SNR_0(0x=%lx)\n", ulInfo)); +- } +- else +- Status = -EFAULT; +- break; +- case RT_OID_802_11_SNR_1: +- if ((pAd->Antenna.field.RxPath > 1) && +- (pAd->StaCfg.LastSNR1 > 0)) +- { +- ulInfo = ((0xeb - pAd->StaCfg.LastSNR1) * 3) / 16 ; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE,("Query::RT_OID_802_11_SNR_1(0x=%lx)\n",ulInfo)); +- } +- else +- Status = -EFAULT; +- DBGPRINT(RT_DEBUG_TRACE,("Query::RT_OID_802_11_SNR_1(pAd->StaCfg.LastSNR1=%d)\n",pAd->StaCfg.LastSNR1)); +- break; +- case OID_802_11_RSSI_TRIGGER: +- ulInfo = pAd->StaCfg.RssiSample.LastRssi0 - pAd->BbpRssiToDbmDelta; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_RSSI_TRIGGER(=%ld)\n", ulInfo)); +- break; +- case OID_802_11_RSSI: +- case RT_OID_802_11_RSSI: +- ulInfo = pAd->StaCfg.RssiSample.LastRssi0; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case RT_OID_802_11_RSSI_1: +- ulInfo = pAd->StaCfg.RssiSample.LastRssi1; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case RT_OID_802_11_RSSI_2: +- ulInfo = pAd->StaCfg.RssiSample.LastRssi2; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case OID_802_11_STATISTICS: +- pStatistics = (NDIS_802_11_STATISTICS *) kmalloc(sizeof(NDIS_802_11_STATISTICS), MEM_ALLOC_FLAG); +- if (pStatistics) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_STATISTICS \n")); +- // add the most up-to-date h/w raw counters into software counters +- NICUpdateRawCounters(pAd); +- +- // Sanity check for calculation of sucessful count +- if (pAd->WlanCounters.TransmittedFragmentCount.QuadPart < pAd->WlanCounters.RetryCount.QuadPart) +- pAd->WlanCounters.TransmittedFragmentCount.QuadPart = pAd->WlanCounters.RetryCount.QuadPart; +- +- pStatistics->TransmittedFragmentCount.QuadPart = pAd->WlanCounters.TransmittedFragmentCount.QuadPart; +- pStatistics->MulticastTransmittedFrameCount.QuadPart = pAd->WlanCounters.MulticastTransmittedFrameCount.QuadPart; +- pStatistics->FailedCount.QuadPart = pAd->WlanCounters.FailedCount.QuadPart; +- pStatistics->RetryCount.QuadPart = pAd->WlanCounters.RetryCount.QuadPart; +- pStatistics->MultipleRetryCount.QuadPart = pAd->WlanCounters.MultipleRetryCount.QuadPart; +- pStatistics->RTSSuccessCount.QuadPart = pAd->WlanCounters.RTSSuccessCount.QuadPart; +- pStatistics->RTSFailureCount.QuadPart = pAd->WlanCounters.RTSFailureCount.QuadPart; +- pStatistics->ACKFailureCount.QuadPart = pAd->WlanCounters.ACKFailureCount.QuadPart; +- pStatistics->FrameDuplicateCount.QuadPart = pAd->WlanCounters.FrameDuplicateCount.QuadPart; +- pStatistics->ReceivedFragmentCount.QuadPart = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; +- pStatistics->MulticastReceivedFrameCount.QuadPart = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; +-#ifdef DBG +- pStatistics->FCSErrorCount = pAd->RalinkCounters.RealFcsErrCount; +-#else +- pStatistics->FCSErrorCount.QuadPart = pAd->WlanCounters.FCSErrorCount.QuadPart; +- pStatistics->FrameDuplicateCount.u.LowPart = pAd->WlanCounters.FrameDuplicateCount.u.LowPart / 100; +-#endif +- wrq->u.data.length = sizeof(NDIS_802_11_STATISTICS); +- Status = copy_to_user(wrq->u.data.pointer, pStatistics, wrq->u.data.length); +- kfree(pStatistics); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_STATISTICS(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case OID_GEN_RCV_OK: +- ulInfo = pAd->Counters8023.GoodReceives; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case OID_GEN_RCV_NO_BUFFER: +- ulInfo = pAd->Counters8023.RxNoBuffer; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case RT_OID_802_11_PHY_MODE: +- ulInfo = (ULONG)pAd->CommonCfg.PhyMode; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PHY_MODE (=%ld)\n", ulInfo)); +- break; +- case RT_OID_802_11_STA_CONFIG: +- pStaConfig = (RT_802_11_STA_CONFIG *) kmalloc(sizeof(RT_802_11_STA_CONFIG), MEM_ALLOC_FLAG); +- if (pStaConfig) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_STA_CONFIG\n")); +- pStaConfig->EnableTxBurst = pAd->CommonCfg.bEnableTxBurst; +- pStaConfig->EnableTurboRate = 0; +- pStaConfig->UseBGProtection = pAd->CommonCfg.UseBGProtection; +- pStaConfig->UseShortSlotTime = pAd->CommonCfg.bUseShortSlotTime; +- //pStaConfig->AdhocMode = pAd->StaCfg.AdhocMode; +- pStaConfig->HwRadioStatus = (pAd->StaCfg.bHwRadio == TRUE) ? 1 : 0; +- pStaConfig->Rsv1 = 0; +- pStaConfig->SystemErrorBitmap = pAd->SystemErrorBitmap; +- wrq->u.data.length = sizeof(RT_802_11_STA_CONFIG); +- Status = copy_to_user(wrq->u.data.pointer, pStaConfig, wrq->u.data.length); +- kfree(pStaConfig); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_STA_CONFIG(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case OID_802_11_RTS_THRESHOLD: +- RtsThresh = pAd->CommonCfg.RtsThreshold; +- wrq->u.data.length = sizeof(RtsThresh); +- Status = copy_to_user(wrq->u.data.pointer, &RtsThresh, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_RTS_THRESHOLD(=%ld)\n", RtsThresh)); +- break; +- case OID_802_11_FRAGMENTATION_THRESHOLD: +- FragThresh = pAd->CommonCfg.FragmentThreshold; +- if (pAd->CommonCfg.bUseZeroToDisableFragment == TRUE) +- FragThresh = 0; +- wrq->u.data.length = sizeof(FragThresh); +- Status = copy_to_user(wrq->u.data.pointer, &FragThresh, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_FRAGMENTATION_THRESHOLD(=%ld)\n", FragThresh)); +- break; +- case OID_802_11_POWER_MODE: +- PowerMode = pAd->StaCfg.WindowsPowerMode; +- wrq->u.data.length = sizeof(PowerMode); +- Status = copy_to_user(wrq->u.data.pointer, &PowerMode, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_POWER_MODE(=%d)\n", PowerMode)); +- break; +- case RT_OID_802_11_RADIO: +- RadioState = (BOOLEAN) pAd->StaCfg.bSwRadio; +- wrq->u.data.length = sizeof(RadioState); +- Status = copy_to_user(wrq->u.data.pointer, &RadioState, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_RADIO (=%d)\n", RadioState)); +- break; +- case OID_802_11_INFRASTRUCTURE_MODE: +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- BssType = Ndis802_11IBSS; +- else if (pAd->StaCfg.BssType == BSS_INFRA) +- BssType = Ndis802_11Infrastructure; +- else if (pAd->StaCfg.BssType == BSS_MONITOR) +- BssType = Ndis802_11Monitor; +- else +- BssType = Ndis802_11AutoUnknown; +- +- wrq->u.data.length = sizeof(BssType); +- Status = copy_to_user(wrq->u.data.pointer, &BssType, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_INFRASTRUCTURE_MODE(=%d)\n", BssType)); +- break; +- case RT_OID_802_11_PREAMBLE: +- PreamType = pAd->CommonCfg.TxPreamble; +- wrq->u.data.length = sizeof(PreamType); +- Status = copy_to_user(wrq->u.data.pointer, &PreamType, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PREAMBLE(=%d)\n", PreamType)); +- break; +- case OID_802_11_AUTHENTICATION_MODE: +- AuthMode = pAd->StaCfg.AuthMode; +- wrq->u.data.length = sizeof(AuthMode); +- Status = copy_to_user(wrq->u.data.pointer, &AuthMode, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_AUTHENTICATION_MODE(=%d)\n", AuthMode)); +- break; +- case OID_802_11_WEP_STATUS: +- WepStatus = pAd->StaCfg.WepStatus; +- wrq->u.data.length = sizeof(WepStatus); +- Status = copy_to_user(wrq->u.data.pointer, &WepStatus, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_WEP_STATUS(=%d)\n", WepStatus)); +- break; +- case OID_802_11_TX_POWER_LEVEL: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.TxPower, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_TX_POWER_LEVEL %x\n",pAd->CommonCfg.TxPower)); +- break; +- case RT_OID_802_11_TX_POWER_LEVEL_1: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.TxPowerPercentage, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_TX_POWER_LEVEL_1 (=%ld)\n", pAd->CommonCfg.TxPowerPercentage)); +- break; +- case OID_802_11_NETWORK_TYPES_SUPPORTED: +- if ((pAd->RfIcType == RFIC_2850) || (pAd->RfIcType == RFIC_2750) || (pAd->RfIcType == RFIC_3052)) +- { +- NetworkTypeList[0] = 3; // NumberOfItems = 3 +- NetworkTypeList[1] = Ndis802_11DS; // NetworkType[1] = 11b +- NetworkTypeList[2] = Ndis802_11OFDM24; // NetworkType[2] = 11g +- NetworkTypeList[3] = Ndis802_11OFDM5; // NetworkType[3] = 11a +- wrq->u.data.length = 16; +- Status = copy_to_user(wrq->u.data.pointer, &NetworkTypeList[0], wrq->u.data.length); +- } +- else +- { +- NetworkTypeList[0] = 2; // NumberOfItems = 2 +- NetworkTypeList[1] = Ndis802_11DS; // NetworkType[1] = 11b +- NetworkTypeList[2] = Ndis802_11OFDM24; // NetworkType[2] = 11g +- wrq->u.data.length = 12; +- Status = copy_to_user(wrq->u.data.pointer, &NetworkTypeList[0], wrq->u.data.length); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_NETWORK_TYPES_SUPPORTED\n")); +- break; +- case OID_802_11_NETWORK_TYPE_IN_USE: +- wrq->u.data.length = sizeof(ULONG); +- if (pAd->CommonCfg.PhyMode == PHY_11A) +- ulInfo = Ndis802_11OFDM5; +- else if ((pAd->CommonCfg.PhyMode == PHY_11BG_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11G)) +- ulInfo = Ndis802_11OFDM24; +- else +- ulInfo = Ndis802_11DS; +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- case RT_OID_802_11_QUERY_LAST_RX_RATE: +- ulInfo = (ULONG)pAd->LastRxRate; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_LAST_RX_RATE (=%ld)\n", ulInfo)); +- break; +- case RT_OID_802_11_QUERY_LAST_TX_RATE: +- //ulInfo = (ULONG)pAd->LastTxRate; +- ulInfo = (ULONG)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_LAST_TX_RATE (=%lx)\n", ulInfo)); +- break; +- case RT_OID_802_11_QUERY_EEPROM_VERSION: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->EepromVersion, wrq->u.data.length); +- break; +- case RT_OID_802_11_QUERY_FIRMWARE_VERSION: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->FirmwareVersion, wrq->u.data.length); +- break; +- case RT_OID_802_11_QUERY_NOISE_LEVEL: +- wrq->u.data.length = sizeof(UCHAR); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->BbpWriteLatch[66], wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_NOISE_LEVEL (=%d)\n", pAd->BbpWriteLatch[66])); +- break; +- case RT_OID_802_11_EXTRA_INFO: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->ExtraInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_EXTRA_INFO (=%ld)\n", pAd->ExtraInfo)); +- break; +- case RT_OID_WE_VERSION_COMPILED: +- wrq->u.data.length = sizeof(UINT); +- we_version_compiled = WIRELESS_EXT; +- Status = copy_to_user(wrq->u.data.pointer, &we_version_compiled, wrq->u.data.length); +- break; +- case RT_OID_802_11_QUERY_APSD_SETTING: +- apsd = (pAd->CommonCfg.bAPSDCapable | (pAd->CommonCfg.bAPSDAC_BE << 1) | (pAd->CommonCfg.bAPSDAC_BK << 2) +- | (pAd->CommonCfg.bAPSDAC_VI << 3) | (pAd->CommonCfg.bAPSDAC_VO << 4) | (pAd->CommonCfg.MaxSPLength << 5)); +- +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &apsd, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_APSD_SETTING (=0x%lx,APSDCap=%d,AC_BE=%d,AC_BK=%d,AC_VI=%d,AC_VO=%d,MAXSPLen=%d)\n", +- apsd,pAd->CommonCfg.bAPSDCapable,pAd->CommonCfg.bAPSDAC_BE,pAd->CommonCfg.bAPSDAC_BK,pAd->CommonCfg.bAPSDAC_VI,pAd->CommonCfg.bAPSDAC_VO,pAd->CommonCfg.MaxSPLength)); +- break; +- case RT_OID_802_11_QUERY_APSD_PSM: +- wrq->u.data.length = sizeof(ULONG); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.bAPSDForcePowerSave, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_APSD_PSM (=%d)\n", pAd->CommonCfg.bAPSDForcePowerSave)); +- break; +- case RT_OID_802_11_QUERY_WMM: +- wrq->u.data.length = sizeof(BOOLEAN); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.bWmmCapable, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_WMM (=%d)\n", pAd->CommonCfg.bWmmCapable)); +- break; +-#ifdef WPA_SUPPLICANT_SUPPORT +- case RT_OID_NEW_DRIVER: +- { +- UCHAR enabled = 1; +- wrq->u.data.length = sizeof(UCHAR); +- Status = copy_to_user(wrq->u.data.pointer, &enabled, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_NEW_DRIVER (=%d)\n", enabled)); +- } +- break; +- case RT_OID_WPA_SUPPLICANT_SUPPORT: +- wrq->u.data.length = sizeof(UCHAR); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->StaCfg.WpaSupplicantUP, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_WPA_SUPPLICANT_SUPPORT (=%d)\n", pAd->StaCfg.WpaSupplicantUP)); +- break; +-#endif // WPA_SUPPLICANT_SUPPORT // +- +- case RT_OID_DRIVER_DEVICE_NAME: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_DRIVER_DEVICE_NAME \n")); +- wrq->u.data.length = 16; +- if (copy_to_user(wrq->u.data.pointer, pAd->StaCfg.dev_name, wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- break; +- case RT_OID_802_11_QUERY_HT_PHYMODE: +- pHTPhyMode = (OID_SET_HT_PHYMODE *) kmalloc(sizeof(OID_SET_HT_PHYMODE), MEM_ALLOC_FLAG); +- if (pHTPhyMode) +- { +- pHTPhyMode->PhyMode = pAd->CommonCfg.PhyMode; +- pHTPhyMode->HtMode = (UCHAR)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE; +- pHTPhyMode->BW = (UCHAR)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.BW; +- pHTPhyMode->MCS= (UCHAR)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS; +- pHTPhyMode->SHORTGI= (UCHAR)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI; +- pHTPhyMode->STBC= (UCHAR)pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC; +- +- pHTPhyMode->ExtOffset = ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) ? (EXTCHA_BELOW) : (EXTCHA_ABOVE)); +- wrq->u.data.length = sizeof(OID_SET_HT_PHYMODE); +- if (copy_to_user(wrq->u.data.pointer, pHTPhyMode, wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_HT_PHYMODE (PhyMode = %d, MCS =%d, BW = %d, STBC = %d, ExtOffset=%d)\n", +- pHTPhyMode->HtMode, pHTPhyMode->MCS, pHTPhyMode->BW, pHTPhyMode->STBC, pHTPhyMode->ExtOffset)); +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (.word = %x )\n", pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_STA_CONFIG(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case RT_OID_802_11_COUNTRY_REGION: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_COUNTRY_REGION \n")); +- wrq->u.data.length = sizeof(ulInfo); +- ulInfo = pAd->CommonCfg.CountryRegionForABand; +- ulInfo = (ulInfo << 8)|(pAd->CommonCfg.CountryRegion); +- if (copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- break; +- case RT_OID_802_11_QUERY_DAT_HT_PHYMODE: +- pHTPhyMode = (OID_SET_HT_PHYMODE *) kmalloc(sizeof(OID_SET_HT_PHYMODE), MEM_ALLOC_FLAG); +- if (pHTPhyMode) +- { +- pHTPhyMode->PhyMode = pAd->CommonCfg.PhyMode; +- pHTPhyMode->HtMode = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.HTMODE; +- pHTPhyMode->BW = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW; +- pHTPhyMode->MCS= (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.MCS; +- pHTPhyMode->SHORTGI= (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI; +- pHTPhyMode->STBC= (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.STBC; +- +- wrq->u.data.length = sizeof(OID_SET_HT_PHYMODE); +- if (copy_to_user(wrq->u.data.pointer, pHTPhyMode, wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_HT_PHYMODE (PhyMode = %d, MCS =%d, BW = %d, STBC = %d, ExtOffset=%d)\n", +- pHTPhyMode->HtMode, pHTPhyMode->MCS, pHTPhyMode->BW, pHTPhyMode->STBC, pHTPhyMode->ExtOffset)); +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (.word = %x )\n", pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_STA_CONFIG(kmalloc failed)\n")); +- Status = -EFAULT; +- } +- break; +- case RT_OID_QUERY_MULTIPLE_CARD_SUPPORT: +- wrq->u.data.length = sizeof(UCHAR); +- i = 0; +-#ifdef MULTIPLE_CARD_SUPPORT +- i = 1; +-#endif // MULTIPLE_CARD_SUPPORT // +- if (copy_to_user(wrq->u.data.pointer, &i, wrq->u.data.length)) +- { +- Status = -EFAULT; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_QUERY_MULTIPLE_CARD_SUPPORT(=%d) \n", i)); +- break; +-#ifdef SNMP_SUPPORT +- case RT_OID_802_11_MAC_ADDRESS: +- wrq->u.data.length = MAC_ADDR_LEN; +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CurrentAddress, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_MANUFACTUREROUI: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTUREROUI \n")); +- wrq->u.data.length = ManufacturerOUI_LEN; +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CurrentAddress, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_MANUFACTURERNAME: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTURERNAME \n")); +- wrq->u.data.length = strlen(ManufacturerNAME); +- Status = copy_to_user(wrq->u.data.pointer, ManufacturerNAME, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_RESOURCETYPEIDNAME: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_RESOURCETYPEIDNAME \n")); +- wrq->u.data.length = strlen(ResourceTypeIdName); +- Status = copy_to_user(wrq->u.data.pointer, ResourceTypeIdName, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED \n")); +- ulInfo = 1; // 1 is support wep else 2 is not support. +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_POWERMANAGEMENTMODE: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_POWERMANAGEMENTMODE \n")); +- if (pAd->StaCfg.Psm == PSMP_ACTION) +- ulInfo = 1; // 1 is power active else 2 is power save. +- else +- ulInfo = 2; +- +- wrq->u.data.length = sizeof(ulInfo); +- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length); +- break; +- +- case OID_802_11_WEPDEFAULTKEYVALUE: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_WEPDEFAULTKEYVALUE \n")); +- //KeyIdxValue.KeyIdx = pAd->PortCfg.MBSSID[pAd->IoctlIF].DefaultKeyId; +- pKeyIdxValue = wrq->u.data.pointer; +- DBGPRINT(RT_DEBUG_TRACE,("KeyIdxValue.KeyIdx = %d, \n",pKeyIdxValue->KeyIdx)); +- valueLen = pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen; +- NdisMoveMemory(pKeyIdxValue->Value, +- &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- valueLen); +- pKeyIdxValue->Value[valueLen]='\0'; +- +- wrq->u.data.length = sizeof(DefaultKeyIdxValue); +- +- Status = copy_to_user(wrq->u.data.pointer, pKeyIdxValue, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE,("DefaultKeyId = %d, total len = %d, str len=%d, KeyValue= %02x %02x %02x %02x \n", +- pAd->StaCfg.DefaultKeyId, +- wrq->u.data.length, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen, +- pAd->SharedKey[BSS0][0].Key[0], +- pAd->SharedKey[BSS0][1].Key[0], +- pAd->SharedKey[BSS0][2].Key[0], +- pAd->SharedKey[BSS0][3].Key[0])); +- break; +- +- case OID_802_11_WEPDEFAULTKEYID: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_WEPDEFAULTKEYID \n")); +- wrq->u.data.length = sizeof(UCHAR); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->StaCfg.DefaultKeyId, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyId =%d \n", pAd->StaCfg.DefaultKeyId)); +- break; +- +- case RT_OID_802_11_WEPKEYMAPPINGLENGTH: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_WEPKEYMAPPINGLENGTH \n")); +- wrq->u.data.length = sizeof(UCHAR); +- Status = copy_to_user(wrq->u.data.pointer, +- &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen, +- wrq->u.data.length); +- break; +- +- case OID_802_11_SHORTRETRYLIMIT: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_SHORTRETRYLIMIT \n")); +- wrq->u.data.length = sizeof(ULONG); +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &tx_rty_cfg.word); +- ShortRetryLimit = tx_rty_cfg.field.ShortRtyLimit; +- DBGPRINT(RT_DEBUG_TRACE, ("ShortRetryLimit =%ld, tx_rty_cfg.field.ShortRetryLimit=%d\n", ShortRetryLimit, tx_rty_cfg.field.ShortRtyLimit)); +- Status = copy_to_user(wrq->u.data.pointer, &ShortRetryLimit, wrq->u.data.length); +- break; +- +- case OID_802_11_LONGRETRYLIMIT: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_LONGRETRYLIMIT \n")); +- wrq->u.data.length = sizeof(ULONG); +- RTMP_IO_READ32(pAd, TX_RTY_CFG, &tx_rty_cfg.word); +- LongRetryLimit = tx_rty_cfg.field.LongRtyLimit; +- DBGPRINT(RT_DEBUG_TRACE, ("LongRetryLimit =%ld, tx_rty_cfg.field.LongRtyLimit=%d\n", LongRetryLimit, tx_rty_cfg.field.LongRtyLimit)); +- Status = copy_to_user(wrq->u.data.pointer, &LongRetryLimit, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_PRODUCTID: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PRODUCTID \n")); +- +-#ifdef RTMP_MAC_PCI +- { +- +- USHORT device_id; +- if (((POS_COOKIE)pAd->OS_Cookie)->pci_dev != NULL) +- pci_read_config_word(((POS_COOKIE)pAd->OS_Cookie)->pci_dev, PCI_DEVICE_ID, &device_id); +- else +- DBGPRINT(RT_DEBUG_TRACE, (" pci_dev = NULL\n")); +- sprintf((PSTRING)tmp, "%04x %04x\n", NIC_PCI_VENDOR_ID, device_id); +- } +-#endif // RTMP_MAC_PCI // +- wrq->u.data.length = strlen((PSTRING)tmp); +- Status = copy_to_user(wrq->u.data.pointer, tmp, wrq->u.data.length); +- break; +- +- case RT_OID_802_11_MANUFACTUREID: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTUREID \n")); +- wrq->u.data.length = strlen(ManufacturerNAME); +- Status = copy_to_user(wrq->u.data.pointer, ManufacturerNAME, wrq->u.data.length); +- break; +- +- case OID_802_11_CURRENTCHANNEL: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_CURRENTCHANNEL \n")); +- wrq->u.data.length = sizeof(UCHAR); +- DBGPRINT(RT_DEBUG_TRACE, ("sizeof UCHAR=%d, channel=%d \n", sizeof(UCHAR), pAd->CommonCfg.Channel)); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.Channel, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status)); +- break; +-#endif //SNMP_SUPPORT +- +- case OID_802_11_BUILD_CHANNEL_EX: +- { +- UCHAR value; +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_BUILD_CHANNEL_EX \n")); +- wrq->u.data.length = sizeof(UCHAR); +-#ifdef EXT_BUILD_CHANNEL_LIST +- DBGPRINT(RT_DEBUG_TRACE, ("Support EXT_BUILD_CHANNEL_LIST.\n")); +- value = 1; +-#else +- DBGPRINT(RT_DEBUG_TRACE, ("Doesn't support EXT_BUILD_CHANNEL_LIST.\n")); +- value = 0; +-#endif // EXT_BUILD_CHANNEL_LIST // +- Status = copy_to_user(wrq->u.data.pointer, &value, 1); +- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status)); +- } +- break; +- +- case OID_802_11_GET_CH_LIST: +- { +- PRT_CHANNEL_LIST_INFO pChListBuf; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_GET_CH_LIST \n")); +- if (pAd->ChannelListNum == 0) +- { +- wrq->u.data.length = 0; +- break; +- } +- +- pChListBuf = (RT_CHANNEL_LIST_INFO *) kmalloc(sizeof(RT_CHANNEL_LIST_INFO), MEM_ALLOC_FLAG); +- if (pChListBuf == NULL) +- { +- wrq->u.data.length = 0; +- break; +- } +- +- pChListBuf->ChannelListNum = pAd->ChannelListNum; +- for (i = 0; i < pChListBuf->ChannelListNum; i++) +- pChListBuf->ChannelList[i] = pAd->ChannelList[i].Channel; +- +- wrq->u.data.length = sizeof(RT_CHANNEL_LIST_INFO); +- Status = copy_to_user(wrq->u.data.pointer, pChListBuf, sizeof(RT_CHANNEL_LIST_INFO)); +- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status)); +- +- if (pChListBuf) +- kfree(pChListBuf); +- } +- break; +- +- case OID_802_11_GET_COUNTRY_CODE: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_GET_COUNTRY_CODE \n")); +- wrq->u.data.length = 2; +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.CountryCode, 2); +- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status)); +- break; +- +- case OID_802_11_GET_CHANNEL_GEOGRAPHY: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_GET_CHANNEL_GEOGRAPHY \n")); +- wrq->u.data.length = 1; +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.Geography, 1); +- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status)); +- break; +- +- +-#ifdef QOS_DLS_SUPPORT +- case RT_OID_802_11_QUERY_DLS: +- wrq->u.data.length = sizeof(BOOLEAN); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.bDLSCapable, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_DLS(=%d)\n", pAd->CommonCfg.bDLSCapable)); +- break; +- +- case RT_OID_802_11_QUERY_DLS_PARAM: +- { +- PRT_802_11_DLS_INFO pDlsInfo = kmalloc(sizeof(RT_802_11_DLS_INFO), GFP_ATOMIC); +- if (pDlsInfo == NULL) +- break; +- +- for (i=0; iEntry[i], &pAd->StaCfg.DLSEntry[i], sizeof(RT_802_11_DLS_UI)); +- } +- +- pDlsInfo->num = MAX_NUM_OF_DLS_ENTRY; +- wrq->u.data.length = sizeof(RT_802_11_DLS_INFO); +- Status = copy_to_user(wrq->u.data.pointer, pDlsInfo, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_DLS_PARAM\n")); +- +- if (pDlsInfo) +- kfree(pDlsInfo); +- } +- break; +-#endif // QOS_DLS_SUPPORT // +- +- case OID_802_11_SET_PSPXLINK_MODE: +- wrq->u.data.length = sizeof(BOOLEAN); +- Status = copy_to_user(wrq->u.data.pointer, &pAd->CommonCfg.PSPXlink, wrq->u.data.length); +- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_SET_PSPXLINK_MODE(=%d)\n", pAd->CommonCfg.PSPXlink)); +- break; +- +- +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("Query::unknown IOCTL's subcmd = 0x%08x\n", cmd)); +- Status = -EOPNOTSUPP; +- break; +- } +- return Status; +-} +- +-INT rt28xx_sta_ioctl( +- IN struct net_device *net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd) +-{ +- POS_COOKIE pObj; +- RTMP_ADAPTER *pAd = NULL; +- struct iwreq *wrq = (struct iwreq *) rq; +- BOOLEAN StateMachineTouched = FALSE; +- INT Status = NDIS_STATUS_SUCCESS; +- USHORT subcmd; +- +- +- pAd = RTMP_OS_NETDEV_GET_PRIV(net_dev); +- if (pAd == NULL) +- { +- /* if 1st open fail, pAd will be free; +- So the net_dev->priv will be NULL in 2rd open */ +- return -ENETDOWN; +- } +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +-#ifdef CONFIG_APSTA_MIXED_SUPPORT +- if (wrq->u.data.pointer == NULL) +- { +- return Status; +- } +- +- if (strstr(wrq->u.data.pointer, "OpMode") == NULL) +-#endif // CONFIG_APSTA_MIXED_SUPPORT // +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- } +- +- { // determine this ioctl command is comming from which interface. +- pObj->ioctl_if_type = INT_MAIN; +- pObj->ioctl_if = MAIN_MBSSID; +- } +- +- switch(cmd) +- { +-#ifdef RALINK_ATE +-#ifdef RALINK_28xx_QA +- case RTPRIV_IOCTL_ATE: +- { +- RtmpDoAte(pAd, wrq); +- } +- break; +-#endif // RALINK_28xx_QA // +-#endif // RALINK_ATE // +- case SIOCGIFHWADDR: +- DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIFHWADDR\n")); +- memcpy(wrq->u.name, pAd->CurrentAddress, ETH_ALEN); +- break; +- case SIOCGIWNAME: +- { +- char *name=&wrq->u.name[0]; +- rt_ioctl_giwname(net_dev, NULL, name, NULL); +- break; +- } +- case SIOCGIWESSID: //Get ESSID +- { +- struct iw_point *essid=&wrq->u.essid; +- rt_ioctl_giwessid(net_dev, NULL, essid, essid->pointer); +- break; +- } +- case SIOCSIWESSID: //Set ESSID +- { +- struct iw_point *essid=&wrq->u.essid; +- rt_ioctl_siwessid(net_dev, NULL, essid, essid->pointer); +- break; +- } +- case SIOCSIWNWID: // set network id (the cell) +- case SIOCGIWNWID: // get network id +- Status = -EOPNOTSUPP; +- break; +- case SIOCSIWFREQ: //set channel/frequency (Hz) +- { +- struct iw_freq *freq=&wrq->u.freq; +- rt_ioctl_siwfreq(net_dev, NULL, freq, NULL); +- break; +- } +- case SIOCGIWFREQ: // get channel/frequency (Hz) +- { +- struct iw_freq *freq=&wrq->u.freq; +- rt_ioctl_giwfreq(net_dev, NULL, freq, NULL); +- break; +- } +- case SIOCSIWNICKN: //set node name/nickname +- { +- //struct iw_point *data=&wrq->u.data; +- //rt_ioctl_siwnickn(net_dev, NULL, data, NULL); +- break; +- } +- case SIOCGIWNICKN: //get node name/nickname +- { +- struct iw_point *erq = NULL; +- erq = &wrq->u.data; +- erq->length = strlen((PSTRING) pAd->nickname); +- Status = copy_to_user(erq->pointer, pAd->nickname, erq->length); +- break; +- } +- case SIOCGIWRATE: //get default bit rate (bps) +- rt_ioctl_giwrate(net_dev, NULL, &wrq->u, NULL); +- break; +- case SIOCSIWRATE: //set default bit rate (bps) +- rt_ioctl_siwrate(net_dev, NULL, &wrq->u, NULL); +- break; +- case SIOCGIWRTS: // get RTS/CTS threshold (bytes) +- { +- struct iw_param *rts=&wrq->u.rts; +- rt_ioctl_giwrts(net_dev, NULL, rts, NULL); +- break; +- } +- case SIOCSIWRTS: //set RTS/CTS threshold (bytes) +- { +- struct iw_param *rts=&wrq->u.rts; +- rt_ioctl_siwrts(net_dev, NULL, rts, NULL); +- break; +- } +- case SIOCGIWFRAG: //get fragmentation thr (bytes) +- { +- struct iw_param *frag=&wrq->u.frag; +- rt_ioctl_giwfrag(net_dev, NULL, frag, NULL); +- break; +- } +- case SIOCSIWFRAG: //set fragmentation thr (bytes) +- { +- struct iw_param *frag=&wrq->u.frag; +- rt_ioctl_siwfrag(net_dev, NULL, frag, NULL); +- break; +- } +- case SIOCGIWENCODE: //get encoding token & mode +- { +- struct iw_point *erq=&wrq->u.encoding; +- if(erq) +- rt_ioctl_giwencode(net_dev, NULL, erq, erq->pointer); +- break; +- } +- case SIOCSIWENCODE: //set encoding token & mode +- { +- struct iw_point *erq=&wrq->u.encoding; +- if(erq) +- rt_ioctl_siwencode(net_dev, NULL, erq, erq->pointer); +- break; +- } +- case SIOCGIWAP: //get access point MAC addresses +- { +- struct sockaddr *ap_addr=&wrq->u.ap_addr; +- rt_ioctl_giwap(net_dev, NULL, ap_addr, ap_addr->sa_data); +- break; +- } +- case SIOCSIWAP: //set access point MAC addresses +- { +- struct sockaddr *ap_addr=&wrq->u.ap_addr; +- rt_ioctl_siwap(net_dev, NULL, ap_addr, ap_addr->sa_data); +- break; +- } +- case SIOCGIWMODE: //get operation mode +- { +- __u32 *mode=&wrq->u.mode; +- rt_ioctl_giwmode(net_dev, NULL, mode, NULL); +- break; +- } +- case SIOCSIWMODE: //set operation mode +- { +- __u32 *mode=&wrq->u.mode; +- rt_ioctl_siwmode(net_dev, NULL, mode, NULL); +- break; +- } +- case SIOCGIWSENS: //get sensitivity (dBm) +- case SIOCSIWSENS: //set sensitivity (dBm) +- case SIOCGIWPOWER: //get Power Management settings +- case SIOCSIWPOWER: //set Power Management settings +- case SIOCGIWTXPOW: //get transmit power (dBm) +- case SIOCSIWTXPOW: //set transmit power (dBm) +- case SIOCGIWRANGE: //Get range of parameters +- case SIOCGIWRETRY: //get retry limits and lifetime +- case SIOCSIWRETRY: //set retry limits and lifetime +- Status = -EOPNOTSUPP; +- break; +- case RT_PRIV_IOCTL: +- case RT_PRIV_IOCTL_EXT: +- subcmd = wrq->u.data.flags; +- if( subcmd & OID_GET_SET_TOGGLE) +- Status = RTMPSetInformation(pAd, rq, subcmd); +- else +- Status = RTMPQueryInformation(pAd, rq, subcmd); +- break; +- case SIOCGIWPRIV: +- if (wrq->u.data.pointer) +- { +- if ( access_ok(VERIFY_WRITE, wrq->u.data.pointer, sizeof(privtab)) != TRUE) +- break; +- wrq->u.data.length = sizeof(privtab) / sizeof(privtab[0]); +- if (copy_to_user(wrq->u.data.pointer, privtab, sizeof(privtab))) +- Status = -EFAULT; +- } +- break; +- case RTPRIV_IOCTL_SET: +- if(access_ok(VERIFY_READ, wrq->u.data.pointer, wrq->u.data.length) != TRUE) +- break; +- rt_ioctl_setparam(net_dev, NULL, NULL, wrq->u.data.pointer); +- break; +- case RTPRIV_IOCTL_GSITESURVEY: +- RTMPIoctlGetSiteSurvey(pAd, wrq); +- break; +-#ifdef DBG +- case RTPRIV_IOCTL_MAC: +- RTMPIoctlMAC(pAd, wrq); +- break; +- case RTPRIV_IOCTL_E2P: +- RTMPIoctlE2PROM(pAd, wrq); +- break; +-#ifdef RTMP_RF_RW_SUPPORT +- case RTPRIV_IOCTL_RF: +- RTMPIoctlRF(pAd, wrq); +- break; +-#endif // RTMP_RF_RW_SUPPORT // +-#endif // DBG // +- +- case SIOCETHTOOL: +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("IOCTL::unknown IOCTL's cmd = 0x%08x\n", cmd)); +- Status = -EOPNOTSUPP; +- break; +- } +- +- if(StateMachineTouched) // Upper layer sent a MLME-related operations +- RTMP_MLME_HANDLER(pAd); +- +- return Status; +-} +- +-/* +- ========================================================================== +- Description: +- Set SSID +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_SSID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- NDIS_802_11_SSID Ssid, *pSsid=NULL; +- BOOLEAN StateMachineTouched = FALSE; +- int success = TRUE; +- +- if( strlen(arg) <= MAX_LEN_OF_SSID) +- { +- NdisZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); +- if (strlen(arg) != 0) +- { +- NdisMoveMemory(Ssid.Ssid, arg, strlen(arg)); +- Ssid.SsidLength = strlen(arg); +- } +- else //ANY ssid +- { +- Ssid.SsidLength = 0; +- memcpy(Ssid.Ssid, "", 0); +- pAdapter->StaCfg.BssType = BSS_INFRA; +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- pAdapter->StaCfg.WepStatus = Ndis802_11EncryptionDisabled; +- } +- pSsid = &Ssid; +- +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- if ((pAdapter->StaCfg.WpaPassPhraseLen >= 8) && +- (pAdapter->StaCfg.WpaPassPhraseLen <= 64)) +- { +- STRING passphrase_str[65] = {0}; +- UCHAR keyMaterial[40]; +- +- RTMPMoveMemory(passphrase_str, pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.WpaPassPhraseLen); +- RTMPZeroMemory(pAdapter->StaCfg.PMK, 32); +- if (pAdapter->StaCfg.WpaPassPhraseLen == 64) +- { +- AtoH((PSTRING) pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.PMK, 32); +- } +- else +- { +- PasswordHash((PSTRING) pAdapter->StaCfg.WpaPassPhrase, Ssid.Ssid, Ssid.SsidLength, keyMaterial); +- NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32); +- } +- } +- +- pAdapter->MlmeAux.CurrReqIsFromNdis = TRUE; +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +- pAdapter->bConfigChanged = TRUE; +- +- MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), +- (VOID *)pSsid); +- +- StateMachineTouched = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_SSID_Proc::(Len=%d,Ssid=%s)\n", Ssid.SsidLength, Ssid.Ssid)); +- } +- else +- success = FALSE; +- +- if (StateMachineTouched) // Upper layer sent a MLME-related operations +- RTMP_MLME_HANDLER(pAdapter); +- +- return success; +-} +- +-#ifdef WMM_SUPPORT +-/* +- ========================================================================== +- Description: +- Set WmmCapable Enable or Disable +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- BOOLEAN bWmmCapable; +- +- bWmmCapable = simple_strtol(arg, 0, 10); +- +- if ((bWmmCapable == 1) +- ) +- pAd->CommonCfg.bWmmCapable = TRUE; +- else if (bWmmCapable == 0) +- pAd->CommonCfg.bWmmCapable = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WmmCapable_Proc::(bWmmCapable=%d)\n", +- pAd->CommonCfg.bWmmCapable)); +- +- return TRUE; +-} +-#endif // WMM_SUPPORT // +- +-/* +- ========================================================================== +- Description: +- Set Network Type(Infrastructure/Adhoc mode) +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_NetworkType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- UINT32 Value = 0; +- +- if (strcmp(arg, "Adhoc") == 0) +- { +- if (pAdapter->StaCfg.BssType != BSS_ADHOC) +- { +- // Config has changed +- pAdapter->bConfigChanged = TRUE; +- if (MONITOR_ON(pAdapter)) +- { +- RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, STANORMAL); +- RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); +- Value &= (~0x80); +- RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAdapter->StaCfg.bAutoReconnect = TRUE; +- LinkDown(pAdapter, FALSE); +- } +- if (INFRA_ON(pAdapter)) +- { +- //BOOLEAN Cancelled; +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAdapter->MlmeAux.AutoReconnectSsid, pAdapter->MlmeAux.AutoReconnectSsidLen); +- +- LinkDown(pAdapter, FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event BB!\n")); +- } +- } +- pAdapter->StaCfg.BssType = BSS_ADHOC; +- pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(AD-HOC)\n")); +- } +- else if (strcmp(arg, "Infra") == 0) +- { +- if (pAdapter->StaCfg.BssType != BSS_INFRA) +- { +- // Config has changed +- pAdapter->bConfigChanged = TRUE; +- if (MONITOR_ON(pAdapter)) +- { +- RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, STANORMAL); +- RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); +- Value &= (~0x80); +- RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAdapter->StaCfg.bAutoReconnect = TRUE; +- LinkDown(pAdapter, FALSE); +- } +- if (ADHOC_ON(pAdapter)) +- { +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAdapter->MlmeAux.AutoReconnectSsid, pAdapter->MlmeAux.AutoReconnectSsidLen); +- +- LinkDown(pAdapter, FALSE); +- } +- } +- pAdapter->StaCfg.BssType = BSS_INFRA; +- pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(INFRA)\n")); +- } +- else if (strcmp(arg, "Monitor") == 0) +- { +- UCHAR bbpValue = 0; +- BCN_TIME_CFG_STRUC csr; +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_INFRA_ON); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_ADHOC_ON); +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- // disable all periodic state machine +- pAdapter->StaCfg.bAutoReconnect = FALSE; +- // reset all mlme state machine +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_MEDIA_STATE_CONNECTED \n")); +- if (pAdapter->CommonCfg.CentralChannel == 0) +- { +-#ifdef DOT11_N_SUPPORT +- if (pAdapter->CommonCfg.PhyMode == PHY_11AN_MIXED) +- pAdapter->CommonCfg.CentralChannel = 36; +- else +-#endif // DOT11_N_SUPPORT // +- pAdapter->CommonCfg.CentralChannel = 6; +- } +-#ifdef DOT11_N_SUPPORT +- else +- N_ChannelCheck(pAdapter); +-#endif // DOT11_N_SUPPORT // +- +-#ifdef DOT11_N_SUPPORT +- if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && +- pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) +- { +- // 40MHz ,control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); +- bbpValue &= (~0x18); +- bbpValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); +- pAdapter->CommonCfg.BBPCurrentBW = BW_40; +- // RX : control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, &bbpValue); +- bbpValue &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, bbpValue); +- +- RTMP_IO_READ32(pAdapter, TX_BAND_CFG, &Value); +- Value &= 0xfffffffe; +- RTMP_IO_WRITE32(pAdapter, TX_BAND_CFG, Value); +- pAdapter->CommonCfg.CentralChannel = pAdapter->CommonCfg.Channel + 2; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAdapter, pAdapter->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", +- pAdapter->CommonCfg.Channel, +- pAdapter->CommonCfg.CentralChannel)); +- } +- else if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && +- pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW) +- { +- // 40MHz ,control channel at upper +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); +- bbpValue &= (~0x18); +- bbpValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); +- pAdapter->CommonCfg.BBPCurrentBW = BW_40; +- RTMP_IO_READ32(pAdapter, TX_BAND_CFG, &Value); +- Value |= 0x1; +- RTMP_IO_WRITE32(pAdapter, TX_BAND_CFG, Value); +- +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, &bbpValue); +- bbpValue |= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, bbpValue); +- pAdapter->CommonCfg.CentralChannel = pAdapter->CommonCfg.Channel - 2; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAdapter, pAdapter->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", +- pAdapter->CommonCfg.Channel, +- pAdapter->CommonCfg.CentralChannel)); +- } +- else +-#endif // DOT11_N_SUPPORT // +- { +- // 20MHz +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); +- bbpValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); +- pAdapter->CommonCfg.BBPCurrentBW = BW_20; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAdapter, pAdapter->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAdapter->CommonCfg.Channel)); +- } +- // Enable Rx with promiscuous reception +- RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, 0x3); +- // ASIC supporsts sniffer function with replacing RSSI with timestamp. +- //RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); +- //Value |= (0x80); +- //RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- // disable sync +- RTMP_IO_READ32(pAdapter, BCN_TIME_CFG, &csr.word); +- csr.field.bBeaconGen = 0; +- csr.field.bTBTTEnable = 0; +- csr.field.TsfSyncMode = 0; +- RTMP_IO_WRITE32(pAdapter, BCN_TIME_CFG, csr.word); +- +- pAdapter->StaCfg.BssType = BSS_MONITOR; +- pAdapter->net_dev->type = ARPHRD_IEEE80211_PRISM; //ARPHRD_IEEE80211; // IEEE80211 +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(MONITOR)\n")); +- } +- +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAdapter->StaCfg.WpaState = SS_NOTUSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_NetworkType_Proc::(NetworkType=%d)\n", pAdapter->StaCfg.BssType)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Authentication mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_AuthMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if ((strcmp(arg, "WEPAUTO") == 0) || (strcmp(arg, "wepauto") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +- else if ((strcmp(arg, "OPEN") == 0) || (strcmp(arg, "open") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- else if ((strcmp(arg, "SHARED") == 0) || (strcmp(arg, "shared") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else if ((strcmp(arg, "WPAPSK") == 0) || (strcmp(arg, "wpapsk") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- else if ((strcmp(arg, "WPANONE") == 0) || (strcmp(arg, "wpanone") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- else if ((strcmp(arg, "WPA2PSK") == 0) || (strcmp(arg, "wpa2psk") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +-#ifdef WPA_SUPPLICANT_SUPPORT +- else if ((strcmp(arg, "WPA") == 0) || (strcmp(arg, "wpa") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- else if ((strcmp(arg, "WPA2") == 0) || (strcmp(arg, "wpa2") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +-#endif // WPA_SUPPLICANT_SUPPORT // +- else +- return FALSE; +- +- pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_AuthMode_Proc::(AuthMode=%d)\n", pAdapter->StaCfg.AuthMode)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Encryption Type +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_EncrypType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if ((strcmp(arg, "NONE") == 0) || (strcmp(arg, "none") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- } +- else if ((strcmp(arg, "WEP") == 0) || (strcmp(arg, "wep") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +- } +- else if ((strcmp(arg, "TKIP") == 0) || (strcmp(arg, "tkip") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((strcmp(arg, "AES") == 0) || (strcmp(arg, "aes") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption3Enabled; +- } +- else +- return FALSE; +- +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_EncrypType_Proc::(EncrypType=%d)\n", pAdapter->StaCfg.WepStatus)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Default Key ID +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- ULONG KeyIdx; +- +- KeyIdx = simple_strtol(arg, 0, 10); +- if((KeyIdx >= 1 ) && (KeyIdx <= 4)) +- pAdapter->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1 ); +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_DefaultKeyID_Proc::(DefaultKeyID=%d)\n", pAdapter->StaCfg.DefaultKeyId)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set WEP KEY1 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key1_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][0].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][0].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][0].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][0].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- +- pAdapter->SharedKey[BSS0][0].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 0, +- pAdapter->SharedKey[BSS0][0].CipherAlg, +- pAdapter->SharedKey[BSS0][0].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- +- Description: +- Set WEP KEY2 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key2_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][1].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][1].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][1].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][1].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][1].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 1, +- pAdapter->SharedKey[BSS0][1].CipherAlg, +- pAdapter->SharedKey[BSS0][1].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- Description: +- Set WEP KEY3 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key3_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][2].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Ascii)\n", arg)); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][2].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Hex)\n", arg)); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][2].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Ascii)\n", arg)); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][2].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Hex)\n", arg)); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][2].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 2, +- pAdapter->SharedKey[BSS0][2].CipherAlg, +- pAdapter->SharedKey[BSS0][2].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- Description: +- Set WEP KEY4 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key4_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][3].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][3].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][3].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][3].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][3].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 3, +- pAdapter->SharedKey[BSS0][3].CipherAlg, +- pAdapter->SharedKey[BSS0][3].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set WPA PSK key +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int status; +- +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- ) +- return TRUE; // do nothing +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc::(WPAPSK=%s)\n", arg)); +- +- status = RT_CfgSetWPAPSKKey(pAd, arg, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, pAd->StaCfg.PMK); +- if (status == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc(): Set key failed!\n")); +- return FALSE; +- } +- NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- NdisMoveMemory(pAd->StaCfg.WpaPassPhrase, arg, strlen(arg)); +- pAd->StaCfg.WpaPassPhraseLen = (UINT)strlen(arg); +- +- +- +- if(pAd->StaCfg.BssType == BSS_ADHOC && +- pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- } +- else +- { +- // Start STA supplicant state machine +- pAd->StaCfg.WpaState = SS_START; +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Power Saving mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_PSMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if (pAdapter->StaCfg.BssType == BSS_INFRA) +- { +- if ((strcmp(arg, "Max_PSP") == 0) || +- (strcmp(arg, "max_psp") == 0) || +- (strcmp(arg, "MAX_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- pAdapter->StaCfg.DefaultListenCount = 5; +- +- } +- else if ((strcmp(arg, "Fast_PSP") == 0) || +- (strcmp(arg, "fast_psp") == 0) || +- (strcmp(arg, "FAST_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; +- pAdapter->StaCfg.DefaultListenCount = 3; +- } +- else if ((strcmp(arg, "Legacy_PSP") == 0) || +- (strcmp(arg, "legacy_psp") == 0) || +- (strcmp(arg, "LEGACY_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAdapter->StaCfg.DefaultListenCount = 3; +- } +- else +- { +- //Default Ndis802_11PowerModeCAM +- // clear PSM bit immediately +- RTMP_SET_PSM_BIT(pAdapter, PWR_ACTIVE); +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_PSMode_Proc::(PSMode=%ld)\n", pAdapter->StaCfg.WindowsPowerMode)); +- } +- else +- return FALSE; +- +- +- return TRUE; +-} +-//Add to suport the function which clould dynamicallly enable/disable PCIe Power Saving +- +-#ifdef WPA_SUPPLICANT_SUPPORT +-/* +- ========================================================================== +- Description: +- Set WpaSupport flag. +- Value: +- 0: Driver ignore wpa_supplicant. +- 1: wpa_supplicant initiates scanning and AP selection. +- 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Wpa_Support( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- if ( simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +- else if ( simple_strtol(arg, 0, 10) == 1) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE; +- else if ( simple_strtol(arg, 0, 10) == 2) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE_WITH_WEB_UI; +- else +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Wpa_Support::(WpaSupplicantUP=%d)\n", pAd->StaCfg.WpaSupplicantUP)); +- +- return TRUE; +-} +-#endif // WPA_SUPPLICANT_SUPPORT // +- +-#ifdef DBG +-/* +- ========================================================================== +- Description: +- Read / Write MAC +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 mac 0 ==> read MAC where Addr=0x0 +- 2.) iwpriv ra0 mac 0=12 ==> write MAC where Addr=0x0, value=12 +- ========================================================================== +-*/ +-VOID RTMPIoctlMAC( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- PSTRING this_char; +- PSTRING value; +- INT j = 0, k = 0; +- STRING msg[1024]; +- STRING arg[255]; +- ULONG macAddr = 0; +- UCHAR temp[16]; +- STRING temp2[16]; +- UINT32 macValue = 0; +- INT Status; +- BOOLEAN bIsPrintAllMAC = FALSE; +- +- +- memset(msg, 0x00, 1024); +- if (wrq->u.data.length > 1) //No parameters. +- { +- Status = copy_from_user(arg, wrq->u.data.pointer, (wrq->u.data.length > 255) ? 255 : wrq->u.data.length); +- sprintf(msg, "\n"); +- +- //Parsing Read or Write +- this_char = arg; +- if (!*this_char) +- goto next; +- +- if ((value = rtstrchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value || !*value) +- { //Read +- // Sanity check +- if(strlen(this_char) > 4) +- goto next; +- +- j = strlen(this_char); +- while(j-- > 0) +- { +- if(this_char[j] > 'f' || this_char[j] < '0') +- return; +- } +- +- // Mac Addr +- k = j = strlen(this_char); +- while(j-- > 0) +- { +- this_char[4-k+j] = this_char[j]; +- } +- +- while(k < 4) +- this_char[3-k++]='0'; +- this_char[4]='\0'; +- +- if(strlen(this_char) == 4) +- { +- AtoH(this_char, temp, 2); +- macAddr = *temp*256 + temp[1]; +- if (macAddr < 0xFFFF) +- { +- RTMP_IO_READ32(pAdapter, macAddr, &macValue); +- DBGPRINT(RT_DEBUG_TRACE, ("MacAddr=%lx, MacValue=%x\n", macAddr, macValue)); +- sprintf(msg+strlen(msg), "[0x%08lX]:%08X ", macAddr , macValue); +- } +- else +- {//Invalid parametes, so default printk all mac +- bIsPrintAllMAC = TRUE; +- goto next; +- } +- } +- } +- else +- { //Write +- memcpy(&temp2, value, strlen(value)); +- temp2[strlen(value)] = '\0'; +- +- // Sanity check +- if((strlen(this_char) > 4) || strlen(temp2) > 8) +- goto next; +- +- j = strlen(this_char); +- while(j-- > 0) +- { +- if(this_char[j] > 'f' || this_char[j] < '0') +- return; +- } +- +- j = strlen(temp2); +- while(j-- > 0) +- { +- if(temp2[j] > 'f' || temp2[j] < '0') +- return; +- } +- +- //MAC Addr +- k = j = strlen(this_char); +- while(j-- > 0) +- { +- this_char[4-k+j] = this_char[j]; +- } +- +- while(k < 4) +- this_char[3-k++]='0'; +- this_char[4]='\0'; +- +- //MAC value +- k = j = strlen(temp2); +- while(j-- > 0) +- { +- temp2[8-k+j] = temp2[j]; +- } +- +- while(k < 8) +- temp2[7-k++]='0'; +- temp2[8]='\0'; +- +- { +- AtoH(this_char, temp, 2); +- macAddr = *temp*256 + temp[1]; +- +- AtoH(temp2, temp, 4); +- macValue = *temp*256*256*256 + temp[1]*256*256 + temp[2]*256 + temp[3]; +- +- // debug mode +- if (macAddr == (HW_DEBUG_SETTING_BASE + 4)) +- { +- // 0x2bf4: byte0 non-zero: enable R17 tuning, 0: disable R17 tuning +- if (macValue & 0x000000ff) +- { +- pAdapter->BbpTuning.bEnable = TRUE; +- DBGPRINT(RT_DEBUG_TRACE,("turn on R17 tuning\n")); +- } +- else +- { +- UCHAR R66; +- pAdapter->BbpTuning.bEnable = FALSE; +- R66 = 0x26 + GET_LNA_GAIN(pAdapter); +-#ifdef RALINK_ATE +- if (ATE_ON(pAdapter)) +- { +- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R66, (0x26 + GET_LNA_GAIN(pAdapter))); +- } +- else +-#endif // RALINK_ATE // +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R66, (0x26 + GET_LNA_GAIN(pAdapter))); +- DBGPRINT(RT_DEBUG_TRACE,("turn off R17 tuning, restore to 0x%02x\n", R66)); +- } +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("MacAddr=%02lx, MacValue=0x%x\n", macAddr, macValue)); +- +- RTMP_IO_WRITE32(pAdapter, macAddr, macValue); +- sprintf(msg+strlen(msg), "[0x%08lX]:%08X ", macAddr, macValue); +- } +- } +- } +- else +- bIsPrintAllMAC = TRUE; +-next: +- if (bIsPrintAllMAC) +- { +- struct file *file_w; +- PSTRING fileName = "MacDump.txt"; +- mm_segment_t orig_fs; +- +- orig_fs = get_fs(); +- set_fs(KERNEL_DS); +- +- // open file +- file_w = filp_open(fileName, O_WRONLY|O_CREAT, 0); +- if (IS_ERR(file_w)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("-->2) %s: Error %ld opening %s\n", __FUNCTION__, -PTR_ERR(file_w), fileName)); +- } +- else +- { +- if (file_w->f_op && file_w->f_op->write) +- { +- file_w->f_pos = 0; +- macAddr = 0x1000; +- +- while (macAddr <= 0x1800) +- { +- RTMP_IO_READ32(pAdapter, macAddr, &macValue); +- sprintf(msg, "%08lx = %08X\n", macAddr, macValue); +- +- // write data to file +- file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos); +- +- printk("%s", msg); +- macAddr += 4; +- } +- sprintf(msg, "\nDump all MAC values to %s\n", fileName); +- } +- filp_close(file_w, NULL); +- } +- set_fs(orig_fs); +- } +- if(strlen(msg) == 1) +- sprintf(msg+strlen(msg), "===>Error command format!"); +- +- // Copy the information into the user buffer +- wrq->u.data.length = strlen(msg); +- Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==RTMPIoctlMAC\n\n")); +-} +- +-/* +- ========================================================================== +- Description: +- Read / Write E2PROM +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 e2p 0 ==> read E2PROM where Addr=0x0 +- 2.) iwpriv ra0 e2p 0=1234 ==> write E2PROM where Addr=0x0, value=1234 +- ========================================================================== +-*/ +-VOID RTMPIoctlE2PROM( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- PSTRING this_char; +- PSTRING value; +- INT j = 0, k = 0; +- STRING msg[1024]; +- STRING arg[255]; +- USHORT eepAddr = 0; +- UCHAR temp[16]; +- STRING temp2[16]; +- USHORT eepValue; +- int Status; +- BOOLEAN bIsPrintAllE2P = FALSE; +- +- +- memset(msg, 0x00, 1024); +- if (wrq->u.data.length > 1) //No parameters. +- { +- Status = copy_from_user(arg, wrq->u.data.pointer, (wrq->u.data.length > 255) ? 255 : wrq->u.data.length); +- sprintf(msg, "\n"); +- +- //Parsing Read or Write +- this_char = arg; +- +- +- if (!*this_char) +- goto next; +- +- if ((value = rtstrchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value || !*value) +- { //Read +- +- // Sanity check +- if(strlen(this_char) > 4) +- goto next; +- +- j = strlen(this_char); +- while(j-- > 0) +- { +- if(this_char[j] > 'f' || this_char[j] < '0') +- return; +- } +- +- // E2PROM addr +- k = j = strlen(this_char); +- while(j-- > 0) +- { +- this_char[4-k+j] = this_char[j]; +- } +- +- while(k < 4) +- this_char[3-k++]='0'; +- this_char[4]='\0'; +- +- if(strlen(this_char) == 4) +- { +- AtoH(this_char, temp, 2); +- eepAddr = *temp*256 + temp[1]; +- if (eepAddr < 0xFFFF) +- { +- RT28xx_EEPROM_READ16(pAdapter, eepAddr, eepValue); +- sprintf(msg+strlen(msg), "[0x%04X]:0x%04X ", eepAddr , eepValue); +- } +- else +- {//Invalid parametes, so default printk all bbp +- bIsPrintAllE2P = TRUE; +- goto next; +- } +- } +- } +- else +- { //Write +- memcpy(&temp2, value, strlen(value)); +- temp2[strlen(value)] = '\0'; +- +- // Sanity check +- if((strlen(this_char) > 4) || strlen(temp2) > 8) +- goto next; +- +- j = strlen(this_char); +- while(j-- > 0) +- { +- if(this_char[j] > 'f' || this_char[j] < '0') +- return; +- } +- j = strlen(temp2); +- while(j-- > 0) +- { +- if(temp2[j] > 'f' || temp2[j] < '0') +- return; +- } +- +- //MAC Addr +- k = j = strlen(this_char); +- while(j-- > 0) +- { +- this_char[4-k+j] = this_char[j]; +- } +- +- while(k < 4) +- this_char[3-k++]='0'; +- this_char[4]='\0'; +- +- //MAC value +- k = j = strlen(temp2); +- while(j-- > 0) +- { +- temp2[4-k+j] = temp2[j]; +- } +- +- while(k < 4) +- temp2[3-k++]='0'; +- temp2[4]='\0'; +- +- AtoH(this_char, temp, 2); +- eepAddr = *temp*256 + temp[1]; +- +- AtoH(temp2, temp, 2); +- eepValue = *temp*256 + temp[1]; +- +- RT28xx_EEPROM_WRITE16(pAdapter, eepAddr, eepValue); +- sprintf(msg+strlen(msg), "[0x%02X]:%02X ", eepAddr, eepValue); +- } +- } +- else +- bIsPrintAllE2P = TRUE; +-next: +- if (bIsPrintAllE2P) +- { +- struct file *file_w; +- PSTRING fileName = "EEPROMDump.txt"; +- mm_segment_t orig_fs; +- +- orig_fs = get_fs(); +- set_fs(KERNEL_DS); +- +- // open file +- file_w = filp_open(fileName, O_WRONLY|O_CREAT, 0); +- if (IS_ERR(file_w)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("-->2) %s: Error %ld opening %s\n", __FUNCTION__, -PTR_ERR(file_w), fileName)); +- } +- else +- { +- if (file_w->f_op && file_w->f_op->write) +- { +- file_w->f_pos = 0; +- eepAddr = 0x00; +- +- while (eepAddr <= 0xFE) +- { +- RT28xx_EEPROM_READ16(pAdapter, eepAddr, eepValue); +- sprintf(msg, "%08x = %04x\n", eepAddr , eepValue); +- +- // write data to file +- file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos); +- +- printk("%s", msg); +- eepAddr += 2; +- } +- sprintf(msg, "\nDump all EEPROM values to %s\n", fileName); +- } +- filp_close(file_w, NULL); +- } +- set_fs(orig_fs); +- } +- if(strlen(msg) == 1) +- sprintf(msg+strlen(msg), "===>Error command format!"); +- +- +- // Copy the information into the user buffer +- wrq->u.data.length = strlen(msg); +- Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==RTMPIoctlE2PROM\n")); +-} +- +- +-#ifdef RT30xx +-/* +- ========================================================================== +- Description: +- Read / Write RF register +-Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 rf ==> read all RF registers +- 2.) iwpriv ra0 rf 1 ==> read RF where RegID=1 +- 3.) iwpriv ra0 rf 1=10 ==> write RF R1=0x10 +- ========================================================================== +-*/ +-VOID RTMPIoctlRF( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- CHAR *this_char; +- CHAR *value; +- UCHAR regRF = 0; +- STRING msg[2048]; +- CHAR arg[255]; +- INT rfId; +- LONG rfValue; +- int Status; +- BOOLEAN bIsPrintAllRF = FALSE; +- +- +- memset(msg, 0x00, 2048); +- if (wrq->u.data.length > 1) //No parameters. +- { +- Status = copy_from_user(arg, wrq->u.data.pointer, (wrq->u.data.length > 255) ? 255 : wrq->u.data.length); +- sprintf(msg, "\n"); +- +- //Parsing Read or Write +- this_char = arg; +- if (!*this_char) +- goto next; +- +- if ((value = strchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value || !*value) +- { //Read +- if (sscanf((PSTRING) this_char, "%d", &(rfId)) == 1) +- { +- if (rfId <= 31) +- { +-#ifdef RALINK_ATE +- /* +- In RT2860 ATE mode, we do not load 8051 firmware. +- We must access RF directly. +- For RT2870 ATE mode, ATE_RF_IO_WRITE8(/READ8)_BY_REG_ID are redefined. +- */ +- if (ATE_ON(pAdapter)) +- { +- ATE_RF_IO_READ8_BY_REG_ID(pAdapter, rfId, ®RF); +- } +- else +-#endif // RALINK_ATE // +- // according to Andy, Gary, David require. +- // the command rf shall read rf register directly for dubug. +- // BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- RT30xxReadRFRegister(pAdapter, rfId, ®RF); +- +- sprintf(msg+strlen(msg), "R%02d[0x%02x]:%02X ", rfId, rfId, regRF); +- } +- else +- {//Invalid parametes, so default printk all RF +- bIsPrintAllRF = TRUE; +- goto next; +- } +- } +- else +- { //Invalid parametes, so default printk all RF +- bIsPrintAllRF = TRUE; +- goto next; +- } +- } +- else +- { //Write +- if ((sscanf((PSTRING) this_char, "%d", &(rfId)) == 1) && (sscanf((PSTRING) value, "%lx", &(rfValue)) == 1)) +- { +- if (rfId <= 31) +- { +-#ifdef RALINK_ATE +- /* +- In RT2860 ATE mode, we do not load 8051 firmware. +- We must access RF directly. +- For RT2870 ATE mode, ATE_RF_IO_WRITE8(/READ8)_BY_REG_ID are redefined. +- */ +- if (ATE_ON(pAdapter)) +- { +- ATE_RF_IO_READ8_BY_REG_ID(pAdapter, rfId, ®RF); +- ATE_RF_IO_WRITE8_BY_REG_ID(pAdapter, (UCHAR)rfId,(UCHAR) rfValue); +- //Read it back for showing +- ATE_RF_IO_READ8_BY_REG_ID(pAdapter, rfId, ®RF); +- sprintf(msg+strlen(msg), "R%02d[0x%02X]:%02X\n", rfId, rfId, regRF); +- } +- else +-#endif // RALINK_ATE // +- { +- // according to Andy, Gary, David require. +- // the command RF shall read/write RF register directly for dubug. +- //BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- //BBP_IO_WRITE8_BY_REG_ID(pAdapter, (UCHAR)bbpId,(UCHAR) bbpValue); +- RT30xxReadRFRegister(pAdapter, rfId, ®RF); +- RT30xxWriteRFRegister(pAdapter, (UCHAR)rfId,(UCHAR) rfValue); +- //Read it back for showing +- //BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, ®BBP); +- RT30xxReadRFRegister(pAdapter, rfId, ®RF); +- sprintf(msg+strlen(msg), "R%02d[0x%02X]:%02X\n", rfId, rfId, regRF); +- } +- } +- else +- {//Invalid parametes, so default printk all RF +- bIsPrintAllRF = TRUE; +- } +- } +- else +- { //Invalid parametes, so default printk all RF +- bIsPrintAllRF = TRUE; +- } +- } +- } +- else +- bIsPrintAllRF = TRUE; +-next: +- if (bIsPrintAllRF) +- { +- memset(msg, 0x00, 2048); +- sprintf(msg, "\n"); +- for (rfId = 0; rfId <= 31; rfId++) +- { +-#ifdef RALINK_ATE +- /* +- In RT2860 ATE mode, we do not load 8051 firmware. +- We must access RF directly. +- For RT2870 ATE mode, ATE_RF_IO_WRITE8(/READ8)_BY_REG_ID are redefined. +- */ +- if (ATE_ON(pAdapter)) +- { +- ATE_RF_IO_READ8_BY_REG_ID(pAdapter, rfId, ®RF); +- } +- else +-#endif // RALINK_ATE // +- +- // according to Andy, Gary, David require. +- // the command RF shall read/write RF register directly for dubug. +- RT30xxReadRFRegister(pAdapter, rfId, ®RF); +- sprintf(msg+strlen(msg), "%03d = %02X\n", rfId, regRF); +- } +- // Copy the information into the user buffer +- DBGPRINT(RT_DEBUG_TRACE, ("strlen(msg)=%d\n", (UINT32)strlen(msg))); +- wrq->u.data.length = strlen(msg); +- if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __FUNCTION__)); +- } +- } +- else +- { +- if(strlen(msg) == 1) +- sprintf(msg+strlen(msg), "===>Error command format!"); +- +- DBGPRINT(RT_DEBUG_TRACE, ("copy to user [msg=%s]\n", msg)); +- // Copy the information into the user buffer +- DBGPRINT(RT_DEBUG_TRACE, ("strlen(msg) =%d\n", (UINT32)strlen(msg))); +- +- // Copy the information into the user buffer +- wrq->u.data.length = strlen(msg); +- Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("<==RTMPIoctlRF\n\n")); +-} +-#endif // RT30xx // +-#endif // DBG // +- +- +- +- +-INT Set_TGnWifiTest_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bTGnWifiTest = FALSE; +- else +- pAd->StaCfg.bTGnWifiTest = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_TGnWifiTest_Proc::(bTGnWifiTest=%d)\n", pAd->StaCfg.bTGnWifiTest)); +- return TRUE; +-} +- +-#ifdef EXT_BUILD_CHANNEL_LIST +-INT Set_Ieee80211dClientMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_None; +- else if (simple_strtol(arg, 0, 10) == 1) +- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_Flexible; +- else if (simple_strtol(arg, 0, 10) == 2) +- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_Strict; +- else +- return FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Ieee802dMode_Proc::(IEEEE0211dMode=%d)\n", pAdapter->StaCfg.IEEE80211dClientMode)); +- return TRUE; +-} +-#endif // EXT_BUILD_CHANNEL_LIST // +- +-#ifdef CARRIER_DETECTION_SUPPORT +-INT Set_CarrierDetect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->CommonCfg.CarrierDetect.Enable = FALSE; +- else +- pAd->CommonCfg.CarrierDetect.Enable = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_CarrierDetect_Proc::(CarrierDetect.Enable=%d)\n", pAd->CommonCfg.CarrierDetect.Enable)); +- return TRUE; +-} +-#endif // CARRIER_DETECTION_SUPPORT // +- +- +-INT Show_Adhoc_MacTable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING extra) +-{ +- INT i; +- +- sprintf(extra, "\n"); +- +-#ifdef DOT11_N_SUPPORT +- sprintf(extra, "%sHT Operating Mode : %d\n", extra, pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); +-#endif // DOT11_N_SUPPORT // +- +- sprintf(extra, "%s\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n", extra, +- "MAC", "AID", "BSS", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC"); +- +- for (i=1; iMacTab.Content[i]; +- +- if (strlen(extra) > (IW_PRIV_SIZE_MASK - 30)) +- break; +- if ((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC)) +- { +- sprintf(extra, "%s%02X:%02X:%02X:%02X:%02X:%02X ", extra, +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); +- sprintf(extra, "%s%-4d", extra, (int)pEntry->Aid); +- sprintf(extra, "%s%-4d", extra, (int)pEntry->apidx); +- sprintf(extra, "%s%-7d", extra, pEntry->RssiSample.AvgRssi0); +- sprintf(extra, "%s%-7d", extra, pEntry->RssiSample.AvgRssi1); +- sprintf(extra, "%s%-7d", extra, pEntry->RssiSample.AvgRssi2); +- sprintf(extra, "%s%-10s", extra, GetPhyMode(pEntry->HTPhyMode.field.MODE)); +- sprintf(extra, "%s%-6s", extra, GetBW(pEntry->HTPhyMode.field.BW)); +- sprintf(extra, "%s%-6d", extra, pEntry->HTPhyMode.field.MCS); +- sprintf(extra, "%s%-6d", extra, pEntry->HTPhyMode.field.ShortGI); +- sprintf(extra, "%s%-6d", extra, pEntry->HTPhyMode.field.STBC); +- sprintf(extra, "%s%-10d, %d, %d%%\n", extra, pEntry->DebugFIFOCount, pEntry->DebugTxCount, +- (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); +- sprintf(extra, "%s\n", extra); +- } +- } +- +- return TRUE; +-} +- +- +-INT Set_BeaconLostTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG ltmp = (ULONG)simple_strtol(arg, 0, 10); +- +- if ((ltmp != 0) && (ltmp <= 60)) +- pAd->StaCfg.BeaconLostTime = (ltmp * OS_HZ); +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_BeaconLostTime_Proc::(BeaconLostTime=%ld)\n", pAd->StaCfg.BeaconLostTime)); +- return TRUE; +-} +- +-INT Set_AutoRoaming_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bAutoRoaming = FALSE; +- else +- pAd->StaCfg.bAutoRoaming = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_AutoRoaming_Proc::(bAutoRoaming=%d)\n", pAd->StaCfg.bAutoRoaming)); +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Issue a site survey command to driver +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 set site_survey +- ========================================================================== +-*/ +-INT Set_SiteSurvey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_SSID Ssid; +- +- //check if the interface is down +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (MONITOR_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); +- return -EINVAL; +- } +- +- RTMPZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); +- Ssid.SsidLength = 0; +- if ((arg != NULL) && +- (strlen(arg) <= MAX_LEN_OF_SSID)) +- { +- RTMPMoveMemory(Ssid.Ssid, arg, strlen(arg)); +- Ssid.SsidLength = strlen(arg); +- } +- +- pAd->StaCfg.bScanReqIsFromWebUI = TRUE; +- +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Reset allowed scan retries +- pAd->StaCfg.ScanCnt = 0; +- NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); +- +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- Ssid.SsidLength, +- Ssid.Ssid); +- +- RTMP_MLME_HANDLER(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_SiteSurvey_Proc\n")); +- +- return TRUE; +-} +- +-INT Set_ForceTxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bForceTxBurst = FALSE; +- else +- pAd->StaCfg.bForceTxBurst = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ForceTxBurst_Proc::(bForceTxBurst=%d)\n", pAd->StaCfg.bForceTxBurst)); +- return TRUE; +-} +- +-#ifdef ANT_DIVERSITY_SUPPORT +-INT Set_Antenna_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR arg) +-{ +- UCHAR UsedAnt; +- DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Antenna_Proc *******************\n")); +- +- if(simple_strtol(arg, 0, 10) <= 3) +- UsedAnt = simple_strtol(arg, 0, 10); +- +- pAd->CommonCfg.bRxAntDiversity = UsedAnt; // Auto switch +- if (UsedAnt == ANT_DIVERSITY_ENABLE) +- { +- pAd->RxAnt.EvaluateStableCnt = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Antenna_Proc(Auto Switch Mode), (%d,%d)\n", pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt)); +- } +- /* 2: Fix in the PHY Antenna CON1*/ +- if (UsedAnt == ANT_FIX_ANT1) +- { +- AsicSetRxAnt(pAd, 0); +- DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Antenna_Proc(Fix in Ant CON1), (%d,%d)\n", pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt)); +- } +- /* 3: Fix in the PHY Antenna CON2*/ +- if (UsedAnt == ANT_FIX_ANT2) +- { +- AsicSetRxAnt(pAd, 1); +- DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Antenna_Proc(Fix in Ant CON2), (%d,%d)\n", pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt)); +- } +- +- return TRUE; +-} +-#endif // ANT_DIVERSITY_SUPPORT // +\ No newline at end of file +diff --git a/drivers/staging/rt3090/vr_ikans.h b/drivers/staging/rt3090/vr_ikans.h +deleted file mode 100644 +index 16bff3b..0000000 +--- a/drivers/staging/rt3090/vr_ikans.h ++++ /dev/null +@@ -1,71 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- vr_ikans.h +- +- Abstract: +- Handle association related requests either from WSTA or from local MLME +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- Sample Lin 01-28-2008 Created +- */ +- +-#ifndef __VR_IKANS_H__ +-#define __VR_IKANS_H__ +- +-#ifndef MODULE_IKANOS +-#define IKANOS_EXTERN extern +-#else +-#define IKANOS_EXTERN +-#endif // MODULE_IKANOS // +- +-#ifdef IKANOS_VX_1X0 +- typedef void (*IkanosWlanTxCbFuncP)(void *, void *); +- +- struct IKANOS_TX_INFO +- { +- struct net_device *netdev; +- IkanosWlanTxCbFuncP *fp; +- }; +-#endif // IKANOS_VX_1X0 // +- +- +-IKANOS_EXTERN void VR_IKANOS_FP_Init(UINT8 BssNum, UINT8 *pApMac); +- +-IKANOS_EXTERN INT32 IKANOS_DataFramesTx(struct sk_buff *pSkb, +- struct net_device *pNetDev); +- +-IKANOS_EXTERN void IKANOS_DataFrameRx(PRTMP_ADAPTER pAd, +- void *pRxParam, +- struct sk_buff *pSkb, +- UINT32 Length); +- +-#endif // __VR_IKANS_H__ // +- +-/* End of vr_ikans.h */ +diff --git a/drivers/staging/rt3090/wpa.h b/drivers/staging/rt3090/wpa.h +deleted file mode 100644 +index 8baa287..0000000 +--- a/drivers/staging/rt3090/wpa.h ++++ /dev/null +@@ -1,447 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- wpa.h +- +- Abstract: +- +- Revision History: +- Who When What +- -------- ---------- ---------------------------------------------- +- Name Date Modification logs +-*/ +- +-#ifndef __WPA_H__ +-#define __WPA_H__ +- +-// EAPOL Key descripter frame format related length +-#define LEN_KEY_DESC_NONCE 32 +-#define LEN_KEY_DESC_IV 16 +-#define LEN_KEY_DESC_RSC 8 +-#define LEN_KEY_DESC_ID 8 +-#define LEN_KEY_DESC_REPLAY 8 +-#define LEN_KEY_DESC_MIC 16 +- +-// The length is the EAPoL-Key frame except key data field. +-// Please refer to 802.11i-2004 ,Figure 43u in p.78 +-#define LEN_EAPOL_KEY_MSG (sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE) +- +-// EAP Code Type. +-#define EAP_CODE_REQUEST 1 +-#define EAP_CODE_RESPONSE 2 +-#define EAP_CODE_SUCCESS 3 +-#define EAP_CODE_FAILURE 4 +- +-// EAPOL frame Protocol Version +-#define EAPOL_VER 1 +-#define EAPOL_VER2 2 +- +-// EAPOL-KEY Descriptor Type +-#define WPA1_KEY_DESC 0xfe +-#define WPA2_KEY_DESC 0x02 +- +-// Key Descriptor Version of Key Information +-#define DESC_TYPE_TKIP 1 +-#define DESC_TYPE_AES 2 +- +-#define LEN_MSG1_2WAY 0x7f +-#define MAX_LEN_OF_EAP_HS 256 +- +-#define LEN_MASTER_KEY 32 +- +-// EAPOL EK, MK +-#define LEN_EAP_EK 16 +-#define LEN_EAP_MICK 16 +-#define LEN_EAP_KEY ((LEN_EAP_EK)+(LEN_EAP_MICK)) +-// TKIP key related +-#define LEN_PMKID 16 +-#define LEN_TKIP_EK 16 +-#define LEN_TKIP_RXMICK 8 +-#define LEN_TKIP_TXMICK 8 +-#define LEN_AES_EK 16 +-#define LEN_AES_KEY LEN_AES_EK +-#define LEN_TKIP_KEY ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK)) +-#define TKIP_AP_TXMICK_OFFSET ((LEN_EAP_KEY)+(LEN_TKIP_EK)) +-#define TKIP_AP_RXMICK_OFFSET (TKIP_AP_TXMICK_OFFSET+LEN_TKIP_TXMICK) +-#define TKIP_GTK_LENGTH ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK)) +-#define LEN_PTK ((LEN_EAP_KEY)+(LEN_TKIP_KEY)) +-#define MIN_LEN_OF_GTK 5 +-#define LEN_PMK 32 +-#define LEN_PMK_NAME 16 +-#define LEN_NONCE 32 +- +-// RSN IE Length definition +-#define MAX_LEN_OF_RSNIE 255 +-#define MIN_LEN_OF_RSNIE 8 +- +-#define KEY_LIFETIME 3600 +- +-//EAP Packet Type +-#define EAPPacket 0 +-#define EAPOLStart 1 +-#define EAPOLLogoff 2 +-#define EAPOLKey 3 +-#define EAPOLASFAlert 4 +-#define EAPTtypeMax 5 +- +-#define EAPOL_MSG_INVALID 0 +-#define EAPOL_PAIR_MSG_1 1 +-#define EAPOL_PAIR_MSG_2 2 +-#define EAPOL_PAIR_MSG_3 3 +-#define EAPOL_PAIR_MSG_4 4 +-#define EAPOL_GROUP_MSG_1 5 +-#define EAPOL_GROUP_MSG_2 6 +- +-#define PAIRWISEKEY 1 +-#define GROUPKEY 0 +- +-// Retry timer counter initial value +-#define PEER_MSG1_RETRY_TIMER_CTR 0 +-#define PEER_MSG3_RETRY_TIMER_CTR 10 +-#define GROUP_MSG1_RETRY_TIMER_CTR 20 +- +-// WPA mechanism retry timer interval +-#define PEER_MSG1_RETRY_EXEC_INTV 1000 // 1 sec +-#define PEER_MSG3_RETRY_EXEC_INTV 3000 // 3 sec +-#define GROUP_KEY_UPDATE_EXEC_INTV 1000 // 1 sec +-#define PEER_GROUP_KEY_UPDATE_INIV 2000 // 2 sec +- +-#define ENQUEUE_EAPOL_START_TIMER 200 // 200 ms +- +-// group rekey interval +-#define TIME_REKEY 0 +-#define PKT_REKEY 1 +-#define DISABLE_REKEY 2 +-#define MAX_REKEY 2 +- +-#define MAX_REKEY_INTER 0x3ffffff +- +-#define GROUP_SUITE 0 +-#define PAIRWISE_SUITE 1 +-#define AKM_SUITE 2 +-#define PMKID_LIST 3 +- +- +-#define EAPOL_START_DISABLE 0 +-#define EAPOL_START_PSK 1 +-#define EAPOL_START_1X 2 +- +-#define MIX_CIPHER_WPA_TKIP_ON(x) (((x) & 0x08) != 0) +-#define MIX_CIPHER_WPA_AES_ON(x) (((x) & 0x04) != 0) +-#define MIX_CIPHER_WPA2_TKIP_ON(x) (((x) & 0x02) != 0) +-#define MIX_CIPHER_WPA2_AES_ON(x) (((x) & 0x01) != 0) +- +-#ifndef ROUND_UP +-#define ROUND_UP(__x, __y) \ +- (((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1))) +-#endif +- +-#define SET_UINT16_TO_ARRARY(_V, _LEN) \ +-{ \ +- _V[0] = (_LEN & 0xFF00) >> 8; \ +- _V[1] = (_LEN & 0xFF); \ +-} +- +-#define INC_UINT16_TO_ARRARY(_V, _LEN) \ +-{ \ +- UINT16 var_len; \ +- \ +- var_len = (_V[0]<<8) | (_V[1]); \ +- var_len += _LEN; \ +- \ +- _V[0] = (var_len & 0xFF00) >> 8; \ +- _V[1] = (var_len & 0xFF); \ +-} +- +-#define CONV_ARRARY_TO_UINT16(_V) ((_V[0]<<8) | (_V[1])) +- +- +-#define ADD_ONE_To_64BIT_VAR(_V) \ +-{ \ +- UCHAR cnt = LEN_KEY_DESC_REPLAY; \ +- do \ +- { \ +- cnt--; \ +- _V[cnt]++; \ +- if (cnt == 0) \ +- break; \ +- }while (_V[cnt] == 0); \ +-} +- +-#define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- +-// EAPOL Key Information definition within Key descriptor format +-typedef struct PACKED _KEY_INFO +-{ +-#ifdef RT_BIG_ENDIAN +- UCHAR KeyAck:1; +- UCHAR Install:1; +- UCHAR KeyIndex:2; +- UCHAR KeyType:1; +- UCHAR KeyDescVer:3; +- UCHAR Rsvd:3; +- UCHAR EKD_DL:1; // EKD for AP; DL for STA +- UCHAR Request:1; +- UCHAR Error:1; +- UCHAR Secure:1; +- UCHAR KeyMic:1; +-#else +- UCHAR KeyMic:1; +- UCHAR Secure:1; +- UCHAR Error:1; +- UCHAR Request:1; +- UCHAR EKD_DL:1; // EKD for AP; DL for STA +- UCHAR Rsvd:3; +- UCHAR KeyDescVer:3; +- UCHAR KeyType:1; +- UCHAR KeyIndex:2; +- UCHAR Install:1; +- UCHAR KeyAck:1; +-#endif +-} KEY_INFO, *PKEY_INFO; +- +-// EAPOL Key descriptor format +-typedef struct PACKED _KEY_DESCRIPTER +-{ +- UCHAR Type; +- KEY_INFO KeyInfo; +- UCHAR KeyLength[2]; +- UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; +- UCHAR KeyNonce[LEN_KEY_DESC_NONCE]; +- UCHAR KeyIv[LEN_KEY_DESC_IV]; +- UCHAR KeyRsc[LEN_KEY_DESC_RSC]; +- UCHAR KeyId[LEN_KEY_DESC_ID]; +- UCHAR KeyMic[LEN_KEY_DESC_MIC]; +- UCHAR KeyDataLen[2]; +- UCHAR KeyData[MAX_LEN_OF_RSNIE]; +-} KEY_DESCRIPTER, *PKEY_DESCRIPTER; +- +-typedef struct PACKED _EAPOL_PACKET +-{ +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; +- KEY_DESCRIPTER KeyDesc; +-} EAPOL_PACKET, *PEAPOL_PACKET; +- +-//802.11i D10 page 83 +-typedef struct PACKED _GTK_ENCAP +-{ +-#ifndef RT_BIG_ENDIAN +- UCHAR Kid:2; +- UCHAR tx:1; +- UCHAR rsv:5; +- UCHAR rsv1; +-#else +- UCHAR rsv:5; +- UCHAR tx:1; +- UCHAR Kid:2; +- UCHAR rsv1; +-#endif +- UCHAR GTK[TKIP_GTK_LENGTH]; +-} GTK_ENCAP, *PGTK_ENCAP; +- +-typedef struct PACKED _KDE_ENCAP +-{ +- UCHAR Type; +- UCHAR Len; +- UCHAR OUI[3]; +- UCHAR DataType; +- GTK_ENCAP GTKEncap; +-} KDE_ENCAP, *PKDE_ENCAP; +- +-// For WPA1 +-typedef struct PACKED _RSNIE { +- UCHAR oui[4]; +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; +- struct PACKED { +- UCHAR oui[4]; +- }ucast[1]; +-} RSNIE, *PRSNIE; +- +-// For WPA2 +-typedef struct PACKED _RSNIE2 { +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; +- struct PACKED { +- UCHAR oui[4]; +- }ucast[1]; +-} RSNIE2, *PRSNIE2; +- +-// AKM Suite +-typedef struct PACKED _RSNIE_AUTH { +- USHORT acount; +- struct PACKED { +- UCHAR oui[4]; +- }auth[1]; +-} RSNIE_AUTH,*PRSNIE_AUTH; +- +-typedef union PACKED _RSN_CAPABILITIES { +- struct PACKED { +-#ifdef RT_BIG_ENDIAN +- USHORT Rsvd:10; +- USHORT GTKSA_R_Counter:2; +- USHORT PTKSA_R_Counter:2; +- USHORT No_Pairwise:1; +- USHORT PreAuth:1; +-#else +- USHORT PreAuth:1; +- USHORT No_Pairwise:1; +- USHORT PTKSA_R_Counter:2; +- USHORT GTKSA_R_Counter:2; +- USHORT Rsvd:10; +-#endif +- } field; +- USHORT word; +-} RSN_CAPABILITIES, *PRSN_CAPABILITIES; +- +-typedef struct PACKED _EAP_HDR { +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; +- UCHAR code; +- UCHAR identifier; +- UCHAR length[2]; // including code and identifier, followed by length-2 octets of data +-} EAP_HDR, *PEAP_HDR; +- +-// For supplicant state machine states. 802.11i Draft 4.1, p. 97 +-// We simplified it +-typedef enum _WpaState +-{ +- SS_NOTUSE, // 0 +- SS_START, // 1 +- SS_WAIT_MSG_3, // 2 +- SS_WAIT_GROUP, // 3 +- SS_FINISH, // 4 +- SS_KEYUPDATE, // 5 +-} WPA_STATE; +- +-// +-// The definition of the cipher combination +-// +-// bit3 bit2 bit1 bit0 +-// +------------+------------+ +-// | WPA | WPA2 | +-// +------+-----+------+-----+ +-// | TKIP | AES | TKIP | AES | +-// | 0 | 1 | 1 | 0 | -> 0x06 +-// | 0 | 1 | 1 | 1 | -> 0x07 +-// | 1 | 0 | 0 | 1 | -> 0x09 +-// | 1 | 0 | 1 | 1 | -> 0x0B +-// | 1 | 1 | 0 | 1 | -> 0x0D +-// | 1 | 1 | 1 | 0 | -> 0x0E +-// | 1 | 1 | 1 | 1 | -> 0x0F +-// +------+-----+------+-----+ +-// +-typedef enum _WpaMixPairCipher +-{ +- MIX_CIPHER_NOTUSE = 0x00, +- WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES +- WPA_AES_WPA2_TKIP = 0x06, +- WPA_AES_WPA2_TKIPAES = 0x07, +- WPA_TKIP_WPA2_AES = 0x09, +- WPA_TKIP_WPA2_TKIPAES = 0x0B, +- WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES +- WPA_TKIPAES_WPA2_AES = 0x0D, +- WPA_TKIPAES_WPA2_TKIP = 0x0E, +- WPA_TKIPAES_WPA2_TKIPAES = 0x0F, +-} WPA_MIX_PAIR_CIPHER; +- +-typedef struct PACKED _RSN_IE_HEADER_STRUCT { +- UCHAR Eid; +- UCHAR Length; +- USHORT Version; // Little endian format +-} RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; +- +-// Cipher suite selector types +-typedef struct PACKED _CIPHER_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; +-} CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; +- +-// Authentication and Key Management suite selector +-typedef struct PACKED _AKM_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; +-} AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; +- +-// RSN capability +-typedef struct PACKED _RSN_CAPABILITY { +- USHORT Rsv:10; +- USHORT GTKSAReplayCnt:2; +- USHORT PTKSAReplayCnt:2; +- USHORT NoPairwise:1; +- USHORT PreAuth:1; +-} RSN_CAPABILITY, *PRSN_CAPABILITY; +- +- +-/*======================================== +- The prototype is defined in cmm_wpa.c +- ========================================*/ +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType); +- +-VOID PRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *prefix, +- IN INT prefix_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len); +- +-int PasswordHash( +- char *password, +- unsigned char *ssid, +- int ssidlength, +- unsigned char *output); +- +-PUINT8 GetSuiteFromRSNIE( +- IN PUINT8 rsnie, +- IN UINT rsnie_len, +- IN UINT8 type, +- OUT UINT8 *count); +- +-VOID WpaShowAllsuite( +- IN PUINT8 rsnie, +- IN UINT rsnie_len); +- +-VOID RTMPInsertRSNIE( +- IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, +- IN UINT8 pmkid_len); +- +- +-#endif +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch b/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch new file mode 100644 index 000000000..f967f3188 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch @@ -0,0 +1,222 @@ +From 620d8973fb89089d4210f1e21c02b5e9654ae3ee Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:43:51 +0200 +Subject: [PATCH 05/42] Staging: rt28x0: remove unused ->eewrite methods + +commit fbedb45f6a547901781d23d0e70ef77e0724cb1c upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/ee_efuse.c | 17 ---------- + drivers/staging/rt2860/common/ee_prom.c | 48 ------------------------------ + drivers/staging/rt2860/common/eeprom.c | 3 -- + drivers/staging/rt2860/eeprom.h | 15 --------- + drivers/staging/rt2860/rtmp.h | 1 - + drivers/staging/rt2860/rtmp_chip.h | 4 -- + drivers/staging/rt2870/common/rtusb_io.c | 11 ------- + 7 files changed, 0 insertions(+), 99 deletions(-) + +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index f522244..f294450 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -1271,23 +1271,6 @@ int rtmp_ee_efuse_read16( + return (*pValue); + } + +- +-int rtmp_ee_efuse_write16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT data) +-{ +- if(pAd->bFroceEEPROMBuffer||pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Write to EEPROM Buffer\n")); +- NdisMoveMemory(&(pAd->EEPROMImage[Offset]), &data, 2); +- } +- else +- eFuseWriteRegisters(pAd, Offset, 2, &data); +- return 0; +-} +- +- + int RtmpEfuseSupportCheck( + IN RTMP_ADAPTER *pAd) + { +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +index 9ebff8b..d600e9b 100644 +--- a/drivers/staging/rt2860/common/ee_prom.c ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -220,51 +220,3 @@ int rtmp_ee_prom_read16( + + return NDIS_STATUS_SUCCESS; + } +- +- +-int rtmp_ee_prom_write16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Data) +-{ +- UINT32 x; +- +- +- Offset /= 2; +- +- EWEN(pAd); +- +- // reset bits and set EECS +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- x &= ~(EEDI | EEDO | EESK); +- x |= EECS; +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); +- +- // patch can not access e-Fuse issue +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- // kick a pulse +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); +- } +- +- // output the read_opcode ,register number and data in that order +- ShiftOutBits(pAd, EEPROM_WRITE_OPCODE, 3); +- ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +- ShiftOutBits(pAd, Data, 16); // 16-bit access +- +- // read DO status +- RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- +- EEpromCleanup(pAd); +- +- RTMPusecDelay(10000); //delay for twp(MAX)=10ms +- +- EWDS(pAd); +- +- EEpromCleanup(pAd); +- +- +- return NDIS_STATUS_SUCCESS; +- +-} +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index 03b8454..d7a2664 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -66,7 +66,6 @@ INT RtmpChipOpsEepromHook( + { + pChipOps->eeinit = eFuse_init; + pChipOps->eeread = rtmp_ee_efuse_read16; +- pChipOps->eewrite = rtmp_ee_efuse_write16; + return 0 ; + } + else +@@ -83,14 +82,12 @@ INT RtmpChipOpsEepromHook( + case RTMP_DEV_INF_PCI: + pChipOps->eeinit = NULL; + pChipOps->eeread = rtmp_ee_prom_read16; +- pChipOps->eewrite = rtmp_ee_prom_write16; + break; + #endif // RTMP_PCI_SUPPORT // + #ifdef RTMP_USB_SUPPORT + case RTMP_DEV_INF_USB: + pChipOps->eeinit = NULL; + pChipOps->eeread = RTUSBReadEEPROM16; +- pChipOps->eewrite = RTUSBWriteEEPROM16; + break; + #endif // RTMP_USB_SUPPORT // + +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +index f1aef0c..9979fef 100644 +--- a/drivers/staging/rt2860/eeprom.h ++++ b/drivers/staging/rt2860/eeprom.h +@@ -48,11 +48,6 @@ int rtmp_ee_prom_read16( + IN PRTMP_ADAPTER pAd, + IN USHORT Offset, + OUT USHORT *pValue); +- +-int rtmp_ee_prom_write16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT value); + #endif // RTMP_PCI_SUPPORT // + #ifdef RTMP_USB_SUPPORT + /************************************************************************* +@@ -62,11 +57,6 @@ NTSTATUS RTUSBReadEEPROM16( + IN PRTMP_ADAPTER pAd, + IN USHORT offset, + OUT PUSHORT pData); +- +-NTSTATUS RTUSBWriteEEPROM16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT offset, +- IN USHORT value); + #endif // RTMP_USB_SUPPORT // + + #ifdef RT30xx +@@ -75,11 +65,6 @@ int rtmp_ee_efuse_read16( + IN RTMP_ADAPTER *pAd, + IN USHORT Offset, + OUT USHORT *pValue); +- +-int rtmp_ee_efuse_write16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT data); + #endif // RTMP_EFUSE_SUPPORT // + #endif // RT30xx // + +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 12b1465..3e284f2 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -1790,7 +1790,6 @@ struct _RTMP_CHIP_OP_ + /* Calibration access related callback functions */ + int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ + int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ +- int (*eewrite)(RTMP_ADAPTER *pAd, USHORT offset, USHORT value);; /* int (*eewrite)(RTMP_ADAPTER *pAd, int offset, USHORT value); */ + + /* MCU related callback functions */ + int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index 1284a44..1098a85 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -167,10 +167,6 @@ + #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ + (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) + +-#define RT28xx_EEPROM_WRITE16(_pAd, _offset, _value) \ +- (_pAd)->chipOps.eewrite((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (USHORT)(_value)) +- +- + + // ------------------------------------------------------------------- + // E2PROM data layout +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index a93fde5..b01a24a 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -619,17 +619,6 @@ NTSTATUS RTUSBReadEEPROM16( + + } + +-NTSTATUS RTUSBWriteEEPROM16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT offset, +- IN USHORT value) +-{ +- USHORT tmpVal; +- +- tmpVal = cpu2le16(value); +- return RTUSBWriteEEPROM(pAd, offset, (PUCHAR)&(tmpVal), 2); +-} +- + /* + ======================================================================== + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch b/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch new file mode 100644 index 000000000..7a78b6b65 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch @@ -0,0 +1,412 @@ +From edfb9eabb381f5666328ced6adf7978ca66e310e Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:43:57 +0200 +Subject: [PATCH 06/42] Staging: rt28x0: remove unused code from common/ee_efuse-c + +commit abf1794e698d9bbdade846ef6ffd23b247cfb59f upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/ee_efuse.c | 340 ------------------------------ + drivers/staging/rt2860/rtmp.h | 12 - + 2 files changed, 0 insertions(+), 352 deletions(-) + +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index f294450..5807cc4 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -67,31 +67,6 @@ typedef union _EFUSE_CTRL_STRUC { + UINT32 word; + } EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; + +-static UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-static VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize); +- +-static VOID eFusePhysicalWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); +- +-static NTSTATUS eFuseWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); +- + static VOID eFuseWritePhysical( + IN PRTMP_ADAPTER pAd, + PUSHORT lpInBuffer, +@@ -306,37 +281,6 @@ static VOID eFuseReadPhysical( + + ======================================================================== + */ +-NTSTATUS eFuseRead( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT Length) +-{ +- USHORT* pOutBuf = (USHORT*)pData; +- NTSTATUS Status = STATUS_SUCCESS; +- UCHAR EFSROM_AOUT; +- int i; +- +- for(i=0; i48*16-3(reserved)=2FC +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //Step 1. Save data of this block which is pointed by the avaible logical address pointer +- // read and save the original block data +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- buffer[i] = InBuf[2]; +- } +- +- //Step 2. Update the data in buffer, and write the data to Efuse +- buffer[ (Offset >> 1) % 8] = pData[0]; +- +- do +- { Loop++; +- //Step 3. Write the data to Efuse +- if(!bWriteSuccess) +- { +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = buffer[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- } +- else +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+(Offset % 16); +- InBuf[1] = 2; +- InBuf[2] = pData[0]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- //Step 4. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; +- else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 5. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- if(buffer[i] != InBuf[2]) +- { +- bWriteSuccess = FALSE; +- break; +- } +- } +- +- //Step 6. invlidate mapping entry and find a free mapping entry if not succeed +- if (!bWriteSuccess) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } +- break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 < + #endif // RTMP_EFUSE_SUPPORT // + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch b/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch new file mode 100644 index 000000000..3ba0d6d60 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch @@ -0,0 +1,40 @@ +From e5b457c03b8163cf4c791521a3703a627090ff8c Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:05 +0200 +Subject: [PATCH 07/42] Staging: rt28x0: remove private RTPRIV_IOCTL_SET ioctl + +commit 468d0c507b9c11a2e3ae95ff149eb551d05be8b9 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/sta_ioctl.c | 6 +----- + 1 files changed, 1 insertions(+), 5 deletions(-) + +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index e5e2942..b6ba561 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -2978,6 +2978,7 @@ INT rt28xx_sta_ioctl( + case SIOCSIWRETRY: //set retry limits and lifetime + case RT_PRIV_IOCTL: + case RT_PRIV_IOCTL_EXT: ++ case RTPRIV_IOCTL_SET: + Status = -EOPNOTSUPP; + break; + case SIOCGIWPRIV: +@@ -2990,11 +2991,6 @@ INT rt28xx_sta_ioctl( + Status = -EFAULT; + } + break; +- case RTPRIV_IOCTL_SET: +- if(access_ok(VERIFY_READ, wrq->u.data.pointer, wrq->u.data.length) != TRUE) +- break; +- rt_ioctl_setparam(net_dev, NULL, NULL, wrq->u.data.pointer); +- break; + case RTPRIV_IOCTL_GSITESURVEY: + RTMPIoctlGetSiteSurvey(pAd, wrq); + break; +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch b/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch new file mode 100644 index 000000000..286683354 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch @@ -0,0 +1,131 @@ +From 5c0670fc0db64dad3b864ffa7907aac00eb22c13 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:12 +0200 +Subject: [PATCH 08/42] Staging: rt28x0: remove private RTPRIV_IOCTL_GSITESURVEY ioctl + +commit 725fef147b29eaf37aaee6e80c2c19c5c9c4bff9 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/cmm_info.c | 57 ------------------------------ + drivers/staging/rt2860/rtmp.h | 12 ------ + drivers/staging/rt2860/sta_ioctl.c | 4 +-- + 3 files changed, 1 insertions(+), 72 deletions(-) + +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 49e9bdf..0f4aab9 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -1969,63 +1969,6 @@ VOID RTMPCommSiteSurveyData( + return; + } + +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq) +-{ +- PSTRING msg; +- INT i=0; +- INT WaitCnt; +- INT Status=0; +- INT max_len = LINE_LEN; +- PBSS_ENTRY pBss; +- +- +- os_alloc_mem(NULL, (PUCHAR *)&msg, sizeof(CHAR)*((MAX_LEN_OF_BSS_TABLE)*max_len)); +- +- if (msg == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - msg memory alloc fail.\n")); +- return; +- } +- +- memset(msg, 0 ,(MAX_LEN_OF_BSS_TABLE)*max_len ); +- sprintf(msg,"%s","\n"); +- sprintf(msg+strlen(msg),"%-4s%-33s%-20s%-23s%-9s%-7s%-7s%-3s\n", +- "Ch", "SSID", "BSSID", "Security", "Siganl(%)", "W-Mode", " ExtCH"," NT"); +- +- +- +- WaitCnt = 0; +- pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; +- while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200)) +- OS_WAIT(500); +- +- for(i=0; iScanTab.BssNr ;i++) +- { +- pBss = &pAdapter->ScanTab.BssEntry[i]; +- +- if( pBss->Channel==0) +- break; +- +- if((strlen(msg)+max_len ) >= IW_SCAN_MAX_DATA) +- break; +- +- +- RTMPCommSiteSurveyData(msg, pBss); +- +- +- } +- +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +- wrq->u.data.length = strlen(msg); +- Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length); +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPIoctlGetSiteSurvey - wrq->u.data.length = %d\n", wrq->u.data.length)); +- os_free_mem(NULL, (PUCHAR)msg); +-} +- +- + #define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rate + VOID RTMPIoctlGetMacTable( + IN PRTMP_ADAPTER pAd, +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index c9e3045..32e553a 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -4991,18 +4991,6 @@ PNDIS_PACKET RTMPDeFragmentDataFrame( + IN PRTMP_ADAPTER pAd, + IN RX_BLK *pRxBlk); + +-//////////////////////////////////////// +- +-VOID RTMPIoctlGetSiteSurvey( +- IN PRTMP_ADAPTER pAdapter, +- IN struct iwreq *wrq); +- +- +- +- +- +- +- + enum { + DIDmsg_lnxind_wlansniffrm = 0x00000044, + DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index b6ba561..a3aeb1e 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -2979,6 +2979,7 @@ INT rt28xx_sta_ioctl( + case RT_PRIV_IOCTL: + case RT_PRIV_IOCTL_EXT: + case RTPRIV_IOCTL_SET: ++ case RTPRIV_IOCTL_GSITESURVEY: + Status = -EOPNOTSUPP; + break; + case SIOCGIWPRIV: +@@ -2991,9 +2992,6 @@ INT rt28xx_sta_ioctl( + Status = -EFAULT; + } + break; +- case RTPRIV_IOCTL_GSITESURVEY: +- RTMPIoctlGetSiteSurvey(pAd, wrq); +- break; + case SIOCETHTOOL: + break; + default: +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch b/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch new file mode 100644 index 000000000..629e19c7a --- /dev/null +++ b/debian/patches/features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch @@ -0,0 +1,4115 @@ +From 88d64a2b356a9ddb6e598674663aa35260c514a7 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:19 +0200 +Subject: [PATCH 09/42] Staging: rt28x0: remove private WEXT handlers + +commit 4c96e89320b6327e8967c31761cc0730cace8b4c upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/cmm_info.c | 2448 ------------------------------ + drivers/staging/rt2860/rtmp.h | 204 --- + drivers/staging/rt2860/sta_ioctl.c | 1305 +---------------- + 3 files changed, 1 insertions(+), 3956 deletions(-) + +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 0f4aab9..3c47b81 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -28,801 +28,6 @@ + #include + #include "../rt_config.h" + +-INT Show_SSID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_CountryCode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-#ifdef AGGREGATION_SUPPORT +-INT Show_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +-INT Show_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +-#endif // WMM_SUPPORT // +- +-INT Show_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_NetworkType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_AuthMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_EncrypType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key1_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key2_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key3_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_Key4_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-INT Show_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf); +- +-static struct { +- PSTRING name; +- INT (*show_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); +-} *PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC, RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC[] = { +- {"SSID", Show_SSID_Proc}, +- {"WirelessMode", Show_WirelessMode_Proc}, +- {"TxBurst", Show_TxBurst_Proc}, +- {"TxPreamble", Show_TxPreamble_Proc}, +- {"TxPower", Show_TxPower_Proc}, +- {"Channel", Show_Channel_Proc}, +- {"BGProtection", Show_BGProtection_Proc}, +- {"RTSThreshold", Show_RTSThreshold_Proc}, +- {"FragThreshold", Show_FragThreshold_Proc}, +- {"HtBw", Show_HtBw_Proc}, +- {"HtMcs", Show_HtMcs_Proc}, +- {"HtGi", Show_HtGi_Proc}, +- {"HtOpMode", Show_HtOpMode_Proc}, +- {"HtExtcha", Show_HtExtcha_Proc}, +- {"HtMpduDensity", Show_HtMpduDensity_Proc}, +- {"HtBaWinSize", Show_HtBaWinSize_Proc}, +- {"HtRdg", Show_HtRdg_Proc}, +- {"HtAmsdu", Show_HtAmsdu_Proc}, +- {"HtAutoBa", Show_HtAutoBa_Proc}, +- {"CountryRegion", Show_CountryRegion_Proc}, +- {"CountryRegionABand", Show_CountryRegionABand_Proc}, +- {"CountryCode", Show_CountryCode_Proc}, +-#ifdef AGGREGATION_SUPPORT +- {"PktAggregate", Show_PktAggregate_Proc}, +-#endif +- +-#ifdef WMM_SUPPORT +- {"WmmCapable", Show_WmmCapable_Proc}, +-#endif +- {"IEEE80211H", Show_IEEE80211H_Proc}, +- {"NetworkType", Show_NetworkType_Proc}, +- {"AuthMode", Show_AuthMode_Proc}, +- {"EncrypType", Show_EncrypType_Proc}, +- {"DefaultKeyID", Show_DefaultKeyID_Proc}, +- {"Key1", Show_Key1_Proc}, +- {"Key2", Show_Key2_Proc}, +- {"Key3", Show_Key3_Proc}, +- {"Key4", Show_Key4_Proc}, +- {"WPAPSK", Show_WPAPSK_Proc}, +- {NULL, NULL} +-}; +- +-/* +- ========================================================================== +- Description: +- Get Driver version. +- +- Return: +- ========================================================================== +-*/ +-INT Set_DriverVersion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Country Region. +- This command will not work, if the field of CountryRegion in eeprom is programmed. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +- +- retval = RT_CfgSetCountryRegion(pAd, arg, BAND_24G); +- if (retval == FALSE) +- return FALSE; +- +- // if set country region, driver needs to be reset +- BuildChannelList(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegion_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegion)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Country Region for A band. +- This command will not work, if the field of CountryRegion in eeprom is programmed. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +- +- retval = RT_CfgSetCountryRegion(pAd, arg, BAND_5G); +- if (retval == FALSE) +- return FALSE; +- +- // if set country region, driver needs to be reset +- BuildChannelList(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_CountryRegionABand_Proc::(CountryRegion=%d)\n", pAd->CommonCfg.CountryRegionForABand)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Wireless Mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT success = TRUE; +- +- success = RT_CfgSetWirelessMode(pAd, arg); +- if (success) +- { +- { +- LONG WirelessMode = pAd->CommonCfg.PhyMode; +- +- RTMPSetPhyMode(pAd, WirelessMode); +- if (WirelessMode >= PHY_11ABGN_MIXED) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.REGBACapability.field.AutoBA = TRUE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.REGBACapability.field.AutoBA = FALSE; +- } +- +- // Set AdhocMode rates +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- MlmeUpdateTxRates(pAd, FALSE, 0); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy to on-chip memory +- } +- } +- +- // it is needed to set SSID to take effect +- SetCommonHT(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%d)\n", pAd->CommonCfg.PhyMode)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Set_WirelessMode_Proc::parameters out of range\n")); +- } +- +- return success; +-} +- +-/* +- ========================================================================== +- Description: +- Set Channel +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- INT success = TRUE; +- UCHAR Channel; +- +- Channel = (UCHAR) simple_strtol(arg, 0, 10); +- +- // check if this channel is valid +- if (ChannelSanity(pAd, Channel) == TRUE) +- { +- { +- pAd->CommonCfg.Channel = Channel; +- +- if (MONITOR_ON(pAd)) +- { +- N_ChannelCheck(pAd); +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- N_SetCenCh(pAd); +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40, control_channel(%d), CentralChannel(%d) \n", +- pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); +- } +- else +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAd->CommonCfg.Channel)); +- } +- } +- } +- success = TRUE; +- } +- else +- { +- success = FALSE; +- } +- +- +- if (success == TRUE) +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Channel_Proc::(Channel=%d)\n", pAd->CommonCfg.Channel)); +- +- return success; +-} +- +-/* +- ========================================================================== +- Description: +- Set Short Slot Time Enable or Disable +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_ShortSlot_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int retval; +- +- retval = RT_CfgSetShortSlot(pAd, arg); +- if (retval == TRUE) +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ShortSlot_Proc::(ShortSlot=%d)\n", pAd->CommonCfg.bUseShortSlotTime)); +- +- return retval; +-} +- +- +-/* +- ========================================================================== +- Description: +- Set Tx power +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG TxPower; +- INT success = FALSE; +- +- TxPower = simple_strtol(arg, 0, 10); +- if (TxPower <= 100) +- { +- { +- pAd->CommonCfg.TxPowerDefault = TxPower; +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; +- } +- success = TRUE; +- } +- else +- success = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPower_Proc::(TxPowerPercentage=%ld)\n", pAd->CommonCfg.TxPowerPercentage)); +- +- return success; +-} +- +-/* +- ========================================================================== +- Description: +- Set 11B/11G Protection +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- switch (simple_strtol(arg, 0, 10)) +- { +- case 0: //AUTO +- pAd->CommonCfg.UseBGProtection = 0; +- break; +- case 1: //Always On +- pAd->CommonCfg.UseBGProtection = 1; +- break; +- case 2: //Always OFF +- pAd->CommonCfg.UseBGProtection = 2; +- break; +- default: //Invalid argument +- return FALSE; +- } +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_BGProtection_Proc::(BGProtection=%ld)\n", pAd->CommonCfg.UseBGProtection)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set TxPreamble +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- RT_802_11_PREAMBLE Preamble; +- +- Preamble = simple_strtol(arg, 0, 10); +- +- +- switch (Preamble) +- { +- case Rt802_11PreambleShort: +- pAd->CommonCfg.TxPreamble = Preamble; +- +- MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); +- break; +- case Rt802_11PreambleLong: +- case Rt802_11PreambleAuto: +- // if user wants AUTO, initialize to LONG here, then change according to AP's +- // capability upon association. +- pAd->CommonCfg.TxPreamble = Preamble; +- +- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); +- break; +- default: //Invalid argument +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxPreamble_Proc::(TxPreamble=%ld)\n", pAd->CommonCfg.TxPreamble)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set RTS Threshold +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_RTS_THRESHOLD RtsThresh; +- +- RtsThresh = simple_strtol(arg, 0, 10); +- +- if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD)) +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +- else if (RtsThresh == 0) +- pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_RTSThreshold_Proc::(RTSThreshold=%d)\n", pAd->CommonCfg.RtsThreshold)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Fragment Threshold +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_FRAGMENTATION_THRESHOLD FragThresh; +- +- FragThresh = simple_strtol(arg, 0, 10); +- +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { +- //Illegal FragThresh so we set it to default +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- } +- else if (FragThresh % 2 == 1) +- { +- // The length of each fragment shall always be an even number of octets, except for the last fragment +- // of an MSDU or MMPDU, which may be either an even or an odd number of octets. +- pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); +- } +- else +- { +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- +- { +- if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD) +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- else +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_FragThreshold_Proc::(FragThreshold=%d)\n", pAd->CommonCfg.FragmentThreshold)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set TxBurst +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG TxBurst; +- +- TxBurst = simple_strtol(arg, 0, 10); +- if (TxBurst == 1) +- pAd->CommonCfg.bEnableTxBurst = TRUE; +- else if (TxBurst == 0) +- pAd->CommonCfg.bEnableTxBurst = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_TxBurst_Proc::(TxBurst=%d)\n", pAd->CommonCfg.bEnableTxBurst)); +- +- return TRUE; +-} +- +-#ifdef AGGREGATION_SUPPORT +-/* +- ========================================================================== +- Description: +- Set TxBurst +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG aggre; +- +- aggre = simple_strtol(arg, 0, 10); +- +- if (aggre == 1) +- pAd->CommonCfg.bAggregationCapable = TRUE; +- else if (aggre == 0) +- pAd->CommonCfg.bAggregationCapable = FALSE; +- else +- return FALSE; //Invalid argument +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_PktAggregate_Proc::(AGGRE=%d)\n", pAd->CommonCfg.bAggregationCapable)); +- +- return TRUE; +-} +-#endif +- +-/* +- ========================================================================== +- Description: +- Set IEEE80211H. +- This parameter is 1 when needs radar detection, otherwise 0 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- LONG ieee80211h; +- +- ieee80211h = simple_strtol(arg, 0, 10); +- +- if (ieee80211h == 1) +- pAd->CommonCfg.bIEEE80211H = TRUE; +- else if (ieee80211h == 0) +- pAd->CommonCfg.bIEEE80211H = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_IEEE80211H_Proc::(IEEE80211H=%d)\n", pAd->CommonCfg.bIEEE80211H)); +- +- return TRUE; +-} +- +- +-#ifdef DBG +-/* +- ========================================================================== +- Description: +- For Debug information +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Debug_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- DBGPRINT(RT_DEBUG_TRACE, ("==> Set_Debug_Proc *******************\n")); +- +- if(simple_strtol(arg, 0, 10) <= RT_DEBUG_LOUD) +- RTDebugLevel = simple_strtol(arg, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<== Set_Debug_Proc(RTDebugLevel = %ld)\n", RTDebugLevel)); +- +- return TRUE; +-} +-#endif +- +-INT Show_DescInfo_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +-#ifdef RTMP_MAC_PCI +- INT i, QueIdx=0; +-// ULONG RegValue; +- PRT28XX_RXD_STRUC pRxD; +- PTXD_STRUC pTxD; +- PRTMP_TX_RING pTxRing = &pAd->TxRing[QueIdx]; +- PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; +- PRTMP_RX_RING pRxRing = &pAd->RxRing; +- +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Tx Descriptor", (PUCHAR)pTxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pTxD->DMADONE = %x\n", pTxD->DMADONE)); +- } +- DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Mgmt Descriptor", (PUCHAR)pTxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pMgmt->DMADONE = %x\n", pTxD->DMADONE)); +- } +- DBGPRINT(RT_DEBUG_OFF, ("---------------------------------------------------\n")); +- for(i=0;iCell[i].AllocVa; +- DBGPRINT(RT_DEBUG_OFF, ("Desc #%d\n",i)); +- hex_dump("Rx Descriptor", (PUCHAR)pRxD, 16); +- DBGPRINT(RT_DEBUG_OFF, ("pRxD->DDONE = %x\n", pRxD->DDONE)); +- } +-#endif // RTMP_MAC_PCI // +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Reset statistics counter +- +- Arguments: +- pAdapter Pointer to our adapter +- arg +- +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_ResetStatCounter_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- //UCHAR i; +- //MAC_TABLE_ENTRY *pEntry; +- +- DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n")); +- +- // add the most up-to-date h/w raw counters into software counters +- NICUpdateRawCounters(pAd); +- +- NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11)); +- NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3)); +- NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK)); +- +- // Reset HotSpot counter +- +- +- return TRUE; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Add WPA key process. +- In Adhoc WPANONE, bPairwise = 0; KeyIdx = 0; +- +- Arguments: +- pAd Pointer to our adapter +- pBuf Pointer to the where the key stored +- +- Return Value: +- NDIS_SUCCESS Add key successfully +- +- IRQL = DISPATCH_LEVEL +- +- Note: +- +- ======================================================================== +-*/ +- +-BOOLEAN RTMPCheckStrPrintAble( +- IN CHAR *pInPutStr, +- IN UCHAR strLen) +-{ +- UCHAR i=0; +- +- for (i=0; i 0x7E)) +- return FALSE; +- } +- +- return TRUE; +-} +- + /* + ======================================================================== + +@@ -991,70 +196,6 @@ VOID RTMPSetDesiredRates( + MlmeUpdateTxRates(pAdapter, FALSE, 0); + } + +-NDIS_STATUS RTMPWPARemoveKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf) +-{ +- PNDIS_802_11_REMOVE_KEY pKey; +- ULONG KeyIdx; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- BOOLEAN bTxKey; // Set the key as transmit key +- BOOLEAN bPairwise; // Indicate the key is pairwise key +- BOOLEAN bKeyRSC; // indicate the receive SC set by KeyRSC value. +- // Otherwise, it will set by the NIC. +- BOOLEAN bAuthenticator; // indicate key is set by authenticator. +- INT i; +- +- DBGPRINT(RT_DEBUG_TRACE,("---> RTMPWPARemoveKeyProc\n")); +- +- pKey = (PNDIS_802_11_REMOVE_KEY) pBuf; +- KeyIdx = pKey->KeyIndex & 0xff; +- // Bit 31 of Add-key, Tx Key +- bTxKey = (pKey->KeyIndex & 0x80000000) ? TRUE : FALSE; +- // Bit 30 of Add-key PairwiseKey +- bPairwise = (pKey->KeyIndex & 0x40000000) ? TRUE : FALSE; +- // Bit 29 of Add-key KeyRSC +- bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE; +- // Bit 28 of Add-key Authenticator +- bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE; +- +- // 1. If bTx is TRUE, return failure information +- if (bTxKey == TRUE) +- return(NDIS_STATUS_INVALID_DATA); +- +- // 2. Check Pairwise Key +- if (bPairwise) +- { +- // a. If BSSID is broadcast, remove all pairwise keys. +- // b. If not broadcast, remove the pairwise specified by BSSID +- for (i = 0; i < SHARE_KEY_NUM; i++) +- { +- if (MAC_ADDR_EQUAL(pAd->SharedKey[BSS0][i].BssId, pKey->BSSID)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%d)\n", i)); +- pAd->SharedKey[BSS0][i].KeyLen = 0; +- pAd->SharedKey[BSS0][i].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)i); +- Status = NDIS_STATUS_SUCCESS; +- break; +- } +- } +- } +- // 3. Group Key +- else +- { +- // a. If BSSID is broadcast, remove all group keys indexed +- // b. If BSSID matched, delete the group key indexed. +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveKeyProc(KeyIdx=%ld)\n", KeyIdx)); +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = 0; +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx); +- Status = NDIS_STATUS_SUCCESS; +- } +- +- return (Status); +-} +- + /* + ======================================================================== + +@@ -1773,1004 +914,6 @@ PSTRING GetAuthMode(CHAR auth) + return "UNKNOW"; + } + +-/* +- ========================================================================== +- Description: +- Get site survey results +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) UI needs to wait 4 seconds after issue a site survey command +- 2.) iwpriv ra0 get_site_survey +- 3.) UI needs to prepare at least 4096bytes to get the results +- ========================================================================== +-*/ +-#define LINE_LEN (4+33+20+23+9+7+7+3) // Channel+SSID+Bssid+Security+Signal+WiressMode+ExtCh+NetworkType +-VOID RTMPCommSiteSurveyData( +- IN PSTRING msg, +- IN PBSS_ENTRY pBss) +-{ +- INT Rssi = 0; +- UINT Rssi_Quality = 0; +- NDIS_802_11_NETWORK_TYPE wireless_mode; +- CHAR Ssid[MAX_LEN_OF_SSID +1]; +- STRING SecurityStr[32] = {0}; +- NDIS_802_11_ENCRYPTION_STATUS ap_cipher = Ndis802_11EncryptionDisabled; +- NDIS_802_11_AUTHENTICATION_MODE ap_auth_mode = Ndis802_11AuthModeOpen; +- +- memset(Ssid, 0 ,(MAX_LEN_OF_SSID +1)); +- +- //Channel +- sprintf(msg+strlen(msg),"%-4d", pBss->Channel); +- //SSID +- memcpy(Ssid, pBss->Ssid, pBss->SsidLen); +- Ssid[pBss->SsidLen] = '\0'; +- sprintf(msg+strlen(msg),"%-33s", Ssid); +- //BSSID +- sprintf(msg+strlen(msg),"%02x:%02x:%02x:%02x:%02x:%02x ", +- pBss->Bssid[0], +- pBss->Bssid[1], +- pBss->Bssid[2], +- pBss->Bssid[3], +- pBss->Bssid[4], +- pBss->Bssid[5]); +- +- //Security +- if ((Ndis802_11AuthModeWPA <= pBss->AuthMode) && +- (pBss->AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- { +- if (pBss->AuthModeAux == Ndis802_11AuthModeWPANone) +- { +- ap_auth_mode = pBss->AuthMode; +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- else if (pBss->AuthModeAux == Ndis802_11AuthModeOpen) +- { +- ap_auth_mode = pBss->AuthMode; +- if ((ap_auth_mode == Ndis802_11AuthModeWPA) || +- (ap_auth_mode == Ndis802_11AuthModeWPAPSK)) +- { +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- else if ((ap_auth_mode == Ndis802_11AuthModeWPA2) || +- (ap_auth_mode == Ndis802_11AuthModeWPA2PSK)) +- { +- if (pBss->WPA2.PairCipherAux == Ndis802_11WEPDisabled) +- ap_cipher = pBss->WPA2.PairCipher; +- else +- ap_cipher = Ndis802_11Encryption4Enabled; +- } +- } +- else if ((pBss->AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- if ((pBss->AuthModeAux == Ndis802_11AuthModeWPAPSK) || +- (pBss->AuthModeAux == Ndis802_11AuthModeWPA2PSK)) +- ap_auth_mode = Ndis802_11AuthModeWPA1PSKWPA2PSK; +- else +- ap_auth_mode = pBss->AuthMode; +- +- if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) +- ap_cipher = pBss->WPA.PairCipher; +- } +- else if ((pBss->AuthMode == Ndis802_11AuthModeWPA) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2)) +- { +- if ((pBss->AuthModeAux == Ndis802_11AuthModeWPA) || +- (pBss->AuthMode == Ndis802_11AuthModeWPA2)) +- ap_auth_mode = Ndis802_11AuthModeWPA1WPA2; +- else +- ap_auth_mode = pBss->AuthMode; +- +- if (pBss->WPA.PairCipher != pBss->WPA2.PairCipher) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux != pBss->WPA2.PairCipherAux)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux != Ndis802_11WEPDisabled)) +- ap_cipher = Ndis802_11Encryption4Enabled; +- else if ((pBss->WPA.PairCipher == pBss->WPA2.PairCipher) && +- (pBss->WPA.PairCipherAux == pBss->WPA2.PairCipherAux) && +- (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)) +- ap_cipher = pBss->WPA.PairCipher; +- } +- +- sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); +- } +- else +- { +- ap_auth_mode = pBss->AuthMode; +- ap_cipher = pBss->WepStatus; +- if (ap_cipher == Ndis802_11WEPDisabled) +- sprintf(SecurityStr, "NONE"); +- else if (ap_cipher == Ndis802_11WEPEnabled) +- sprintf(SecurityStr, "WEP"); +- else +- sprintf(SecurityStr, "%s/%s", GetAuthMode((CHAR)ap_auth_mode), GetEncryptType((CHAR)ap_cipher)); +- } +- +- sprintf(msg+strlen(msg), "%-23s", SecurityStr); +- +- // Rssi +- Rssi = (INT)pBss->Rssi; +- if (Rssi >= -50) +- Rssi_Quality = 100; +- else if (Rssi >= -80) // between -50 ~ -80dbm +- Rssi_Quality = (UINT)(24 + ((Rssi + 80) * 26)/10); +- else if (Rssi >= -90) // between -80 ~ -90dbm +- Rssi_Quality = (UINT)(((Rssi + 90) * 26)/10); +- else // < -84 dbm +- Rssi_Quality = 0; +- sprintf(msg+strlen(msg),"%-9d", Rssi_Quality); +- // Wireless Mode +- wireless_mode = NetworkTypeInUseSanity(pBss); +- if (wireless_mode == Ndis802_11FH || +- wireless_mode == Ndis802_11DS) +- sprintf(msg+strlen(msg),"%-7s", "11b"); +- else if (wireless_mode == Ndis802_11OFDM5) +- sprintf(msg+strlen(msg),"%-7s", "11a"); +- else if (wireless_mode == Ndis802_11OFDM5_N) +- sprintf(msg+strlen(msg),"%-7s", "11a/n"); +- else if (wireless_mode == Ndis802_11OFDM24) +- sprintf(msg+strlen(msg),"%-7s", "11b/g"); +- else if (wireless_mode == Ndis802_11OFDM24_N) +- sprintf(msg+strlen(msg),"%-7s", "11b/g/n"); +- else +- sprintf(msg+strlen(msg),"%-7s", "unknow"); +- +- // Ext Channel +- if (pBss->AddHtInfoLen > 0) +- { +- if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) +- sprintf(msg+strlen(msg),"%-7s", " ABOVE"); +- else if (pBss->AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) +- sprintf(msg+strlen(msg),"%-7s", " BELOW"); +- else +- sprintf(msg+strlen(msg),"%-7s", " NONE"); +- } +- else +- { +- sprintf(msg+strlen(msg),"%-7s", " NONE"); +- } +- +- //Network Type +- if (pBss->BssType == BSS_ADHOC) +- sprintf(msg+strlen(msg),"%-3s", " Ad"); +- else +- sprintf(msg+strlen(msg),"%-3s", " In"); +- +- sprintf(msg+strlen(msg),"\n"); +- +- return; +-} +- +-#define MAC_LINE_LEN (14+4+4+10+10+10+6+6) // Addr+aid+psm+datatime+rxbyte+txbyte+current tx rate+last tx rate +-VOID RTMPIoctlGetMacTable( +- IN PRTMP_ADAPTER pAd, +- IN struct iwreq *wrq) +-{ +- INT i; +- RT_802_11_MAC_TABLE MacTab; +- char *msg; +- +- MacTab.Num = 0; +- for (i=0; iMacTab.Content[i].ValidAsCLI && (pAd->MacTab.Content[i].Sst == SST_ASSOC)) +- { +- COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr); +- MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid; +- MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode; +- MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode; +- +- // Fill in RSSI per entry +- MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0; +- MacTab.Entry[MacTab.Num].AvgRssi1 = pAd->MacTab.Content[i].RssiSample.AvgRssi1; +- MacTab.Entry[MacTab.Num].AvgRssi2 = pAd->MacTab.Content[i].RssiSample.AvgRssi2; +- +- // the connected time per entry +- MacTab.Entry[MacTab.Num].ConnectedTime = pAd->MacTab.Content[i].StaConnectTime; +- MacTab.Entry[MacTab.Num].TxRate.field.MCS = pAd->MacTab.Content[i].HTPhyMode.field.MCS; +- MacTab.Entry[MacTab.Num].TxRate.field.BW = pAd->MacTab.Content[i].HTPhyMode.field.BW; +- MacTab.Entry[MacTab.Num].TxRate.field.ShortGI = pAd->MacTab.Content[i].HTPhyMode.field.ShortGI; +- MacTab.Entry[MacTab.Num].TxRate.field.STBC = pAd->MacTab.Content[i].HTPhyMode.field.STBC; +- MacTab.Entry[MacTab.Num].TxRate.field.rsv = pAd->MacTab.Content[i].HTPhyMode.field.rsv; +- MacTab.Entry[MacTab.Num].TxRate.field.MODE = pAd->MacTab.Content[i].HTPhyMode.field.MODE; +- MacTab.Entry[MacTab.Num].TxRate.word = pAd->MacTab.Content[i].HTPhyMode.word; +- +- MacTab.Num += 1; +- } +- } +- wrq->u.data.length = sizeof(RT_802_11_MAC_TABLE); +- if (copy_to_user(wrq->u.data.pointer, &MacTab, wrq->u.data.length)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __func__)); +- } +- +- msg = kmalloc(sizeof(CHAR)*(MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN), MEM_ALLOC_FLAG); +- if (msg == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():Alloc memory failed\n", __func__)); +- return; +- } +- memset(msg, 0 ,MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN ); +- sprintf(msg,"%s","\n"); +- sprintf(msg+strlen(msg),"%-14s%-4s%-4s%-10s%-10s%-10s%-6s%-6s\n", +- "MAC", "AID", "PSM", "LDT", "RxB", "TxB","CTxR", "LTxR"); +- +- for (i=0; iMacTab.Content[i]; +- if (pEntry->ValidAsCLI && (pEntry->Sst == SST_ASSOC)) +- { +- if((strlen(msg)+MAC_LINE_LEN ) >= (MAX_LEN_OF_MAC_TABLE*MAC_LINE_LEN) ) +- break; +- sprintf(msg+strlen(msg),"%02x%02x%02x%02x%02x%02x ", +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); +- sprintf(msg+strlen(msg),"%-4d", (int)pEntry->Aid); +- sprintf(msg+strlen(msg),"%-4d", (int)pEntry->PsMode); +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.LastDataPacketTime*/); // ToDo +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalRxByteCount*/); // ToDo +- sprintf(msg+strlen(msg),"%-10d",0/*pAd->MacTab.Content[i].HSCounter.TotalTxByteCount*/); // ToDo +- sprintf(msg+strlen(msg),"%-6d",RateIdToMbps[pAd->MacTab.Content[i].CurrTxRate]); +- sprintf(msg+strlen(msg),"%-6d\n",0/*RateIdToMbps[pAd->MacTab.Content[i].LastTxRate]*/); // ToDo +- } +- } +- // for compatible with old API just do the printk to console +- //wrq->u.data.length = strlen(msg); +- //if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s", msg)); +- } +- +- kfree(msg); +-} +- +- +-INT Set_BASetup_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +-/* +- The BASetup inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +- +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = (UCHAR) simple_strtol((token+1), 0, 10); +- if (tid > 15) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x\n", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nSetup BA Session: Tid = %d\n", tid)); +- BAOriSessionSetUp(pAd, pEntry, tid, 0, 100, TRUE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_BADecline_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG bBADecline; +- +- bBADecline = simple_strtol(arg, 0, 10); +- +- if (bBADecline == 0) +- { +- pAd->CommonCfg.bBADecline = FALSE; +- } +- else if (bBADecline == 1) +- { +- pAd->CommonCfg.bBADecline = TRUE; +- } +- else +- { +- return FALSE; //Invalid argument +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_BADecline_Proc::(BADecline=%d)\n", pAd->CommonCfg.bBADecline)); +- +- return TRUE; +-} +- +-INT Set_BAOriTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = simple_strtol((token+1), 0, 10); +- if (tid > NUM_OF_TID) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nTear down Ori BA Session: Tid = %d\n", tid)); +- BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, TRUE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_BARecTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], tid; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the tid value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- tid = simple_strtol((token+1), 0, 10); +- if (tid > NUM_OF_TID) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], tid)); +- +- pEntry = MacTableLookup(pAd, (PUCHAR) mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nTear down Rec BA Session: Tid = %d\n", tid)); +- BARecSessionTearDown(pAd, pEntry->Aid, tid, FALSE); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +-} +- +-INT Set_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtBw; +- +- HtBw = simple_strtol(arg, 0, 10); +- if (HtBw == BW_40) +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- else if (HtBw == BW_20) +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBw_Proc::(HtBw=%d)\n", pAd->CommonCfg.RegTransmitSetting.field.BW)); +- +- return TRUE; +-} +- +-INT Set_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtMcs, Mcs_tmp; +- BOOLEAN bAutoRate = FALSE; +- +- Mcs_tmp = simple_strtol(arg, 0, 10); +- +- if (Mcs_tmp <= 15 || Mcs_tmp == 32) +- HtMcs = Mcs_tmp; +- else +- HtMcs = MCS_AUTO; +- +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = HtMcs; +- pAd->StaCfg.bAutoTxRateSwitch = (HtMcs == MCS_AUTO) ? TRUE:FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(HtMcs=%d, bAutoTxRateSwitch = %d)\n", +- pAd->StaCfg.DesiredTransmitSetting.field.MCS, pAd->StaCfg.bAutoTxRateSwitch)); +- +- if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX)) +- { +- if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) && +- (HtMcs >= 0 && HtMcs <= 3) && +- (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_CCK)) +- { +- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs] * 1000000)); +- } +- else if ((pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) && +- (HtMcs >= 0 && HtMcs <= 7) && +- (pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode == FIXED_TXMODE_OFDM)) +- { +- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[HtMcs+4] * 1000000)); +- } +- else +- bAutoRate = TRUE; +- +- if (bAutoRate) +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- RTMPSetDesiredRates(pAd, -1); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMcs_Proc::(FixedTxMode=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode)); +- } +- if (ADHOC_ON(pAd)) +- return TRUE; +- } +- +- SetCommonHT(pAd); +- +- return TRUE; +-} +- +-INT Set_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG HtGi; +- +- HtGi = simple_strtol(arg, 0, 10); +- +- if ( HtGi == GI_400) +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; +- else if ( HtGi == GI_800 ) +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtGi_Proc::(ShortGI=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.ShortGI)); +- +- return TRUE; +-} +- +- +-INT Set_HtTxBASize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR Size; +- +- Size = simple_strtol(arg, 0, 10); +- +- if (Size <=0 || Size >=64) +- { +- Size = 8; +- } +- pAd->CommonCfg.TxBASize = Size-1; +- DBGPRINT(RT_DEBUG_ERROR, ("Set_HtTxBASize ::(TxBASize= %d)\n", Size)); +- +- return TRUE; +-} +- +-INT Set_HtDisallowTKIP_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 1) +- { +- pAd->CommonCfg.HT_DisallowTKIP = TRUE; +- } +- else +- { +- pAd->CommonCfg.HT_DisallowTKIP = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtDisallowTKIP_Proc ::%s\n", +- (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "enabled" : "disabled")); +- +- return TRUE; +-} +- +-INT Set_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == HTMODE_GF) +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; +- else if ( Value == HTMODE_MM ) +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtOpMode_Proc::(HtOpMode=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.HTMODE)); +- +- return TRUE; +- +-} +- +-INT Set_HtStbc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == STBC_USE) +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; +- else if ( Value == STBC_NONE ) +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Stbc_Proc::(HtStbc=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.STBC)); +- +- return TRUE; +-} +- +-INT Set_HtHtc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->HTCEnable = FALSE; +- else if ( Value ==1 ) +- pAd->HTCEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtHtc_Proc::(HtHtc=%d)\n",pAd->HTCEnable)); +- +- return TRUE; +-} +- +-INT Set_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 0) +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- else if ( Value ==1 ) +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtExtcha_Proc::(HtExtcha=%d)\n",pAd->CommonCfg.RegTransmitSetting.field.EXTCHA)); +- +- return TRUE; +-} +- +-INT Set_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value <=7 && Value >= 0) +- pAd->CommonCfg.BACapability.field.MpduDensity = Value; +- else +- pAd->CommonCfg.BACapability.field.MpduDensity = 4; +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMpduDensity_Proc::(HtMpduDensity=%d)\n",pAd->CommonCfg.BACapability.field.MpduDensity)); +- +- return TRUE; +-} +- +-INT Set_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- +- if (Value >=1 && Value <= 64) +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; +- } +- else +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; +- } +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtBaWinSize_Proc::(HtBaWinSize=%d)\n",pAd->CommonCfg.BACapability.field.RxBAWinLimit)); +- +- return TRUE; +-} +- +-INT Set_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value == 0) +- pAd->CommonCfg.bRdg = FALSE; +- else if ( Value ==1 ) +- { +- pAd->HTCEnable = TRUE; +- pAd->CommonCfg.bRdg = TRUE; +- } +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtRdg_Proc::(HtRdg=%d)\n",pAd->CommonCfg.bRdg)); +- +- return TRUE; +-} +- +-INT Set_HtLinkAdapt_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->bLinkAdapt = FALSE; +- else if ( Value ==1 ) +- { +- pAd->HTCEnable = TRUE; +- pAd->bLinkAdapt = TRUE; +- } +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtLinkAdapt_Proc::(HtLinkAdapt=%d)\n",pAd->bLinkAdapt)); +- +- return TRUE; +-} +- +-INT Set_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; +- else if ( Value == 1 ) +- pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAmsdu_Proc::(HtAmsdu=%d)\n",pAd->CommonCfg.BACapability.field.AmsduEnable)); +- +- return TRUE; +-} +- +-INT Set_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- } +- else if (Value == 1) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- } +- else +- return FALSE; //Invalid argument +- +- pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; +- pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy; +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA)); +- +- return TRUE; +- +-} +- +-INT Set_HtProtect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.bHTProtect = FALSE; +- else if (Value == 1) +- pAd->CommonCfg.bHTProtect = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtProtect_Proc::(HtProtect=%d)\n",pAd->CommonCfg.bHTProtect)); +- +- return TRUE; +-} +- +-INT Set_SendPSMPAction_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR mac[6], mode; +- PSTRING token; +- STRING sepValue[] = ":", DASH = '-'; +- INT i; +- MAC_TABLE_ENTRY *pEntry; +- +- //DBGPRINT(RT_DEBUG_TRACE,("\n%s\n", arg)); +-/* +- The BARecTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d, +- =>The six 2 digit hex-decimal number previous are the Mac address, +- =>The seventh decimal number is the mode value. +-*/ +- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and mode value in decimal format. +- return FALSE; +- +- token = strchr(arg, DASH); +- if ((token != NULL) && (strlen(token)>1)) +- { +- mode = simple_strtol((token+1), 0, 10); +- if (mode > MMPS_ENABLE) +- return FALSE; +- +- *token = '\0'; +- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++) +- { +- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1)))) +- return FALSE; +- AtoH(token, (&mac[i]), 1); +- } +- if(i != 6) +- return FALSE; +- +- DBGPRINT(RT_DEBUG_OFF, ("\n%02x:%02x:%02x:%02x:%02x:%02x-%02x", +- mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], mode)); +- +- pEntry = MacTableLookup(pAd, mac); +- +- if (pEntry) { +- DBGPRINT(RT_DEBUG_OFF, ("\nSendPSMPAction MIPS mode = %d\n", mode)); +- SendPSMPAction(pAd, pEntry->Aid, mode); +- } +- +- return TRUE; +- } +- +- return FALSE; +- +- +-} +- +-INT Set_HtMIMOPSmode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- +- if (Value <=3 && Value >= 0) +- pAd->CommonCfg.BACapability.field.MMPSmode = Value; +- else +- pAd->CommonCfg.BACapability.field.MMPSmode = 3; +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMIMOPSmode_Proc::(MIMOPS mode=%d)\n",pAd->CommonCfg.BACapability.field.MMPSmode)); +- +- return TRUE; +-} +- +- +-INT Set_ForceShortGI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->WIFItestbed.bShortGI = FALSE; +- else if (Value == 1) +- pAd->WIFItestbed.bShortGI = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceShortGI_Proc::(ForceShortGI=%d)\n", pAd->WIFItestbed.bShortGI)); +- +- return TRUE; +-} +- +- +- +-INT Set_ForceGF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->WIFItestbed.bGreenField = FALSE; +- else if (Value == 1) +- pAd->WIFItestbed.bGreenField = TRUE; +- else +- return FALSE; //Invalid argument +- +- SetCommonHT(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_ForceGF_Proc::(ForceGF=%d)\n", pAd->WIFItestbed.bGreenField)); +- +- return TRUE; +-} +- +-INT Set_HtMimoPs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG Value; +- +- Value = simple_strtol(arg, 0, 10); +- if (Value == 0) +- pAd->CommonCfg.bMIMOPSEnable = FALSE; +- else if (Value == 1) +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_HtMimoPs_Proc::(HtMimoPs=%d)\n",pAd->CommonCfg.bMIMOPSEnable)); +- +- return TRUE; +-} +- + INT SetCommonHT( + IN PRTMP_ADAPTER pAd) + { +@@ -2793,106 +936,6 @@ INT SetCommonHT( + return TRUE; + } + +-INT Set_FixedTxMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UCHAR fix_tx_mode = FIXED_TXMODE_HT; +- +- if (strcmp(arg, "OFDM") == 0 || strcmp(arg, "ofdm") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_OFDM; +- } +- else if (strcmp(arg, "CCK") == 0 || strcmp(arg, "cck") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_CCK; +- } +- +- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_FixedTxMode_Proc::(FixedTxMode=%d)\n", fix_tx_mode)); +- +- return TRUE; +-} +- +-#if defined(RT305x)||defined(RT3070) +-INT Set_HiPower_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- pAdapter->CommonCfg.HighPowerPatchDisabled = !(simple_strtol(arg, 0, 10)); +- +- if (pAdapter->CommonCfg.HighPowerPatchDisabled != 0) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R82, 0x62); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R67, 0x20); +-#ifdef RT3070 +- if ((IS_RT3070(pAdapter) && ((pAdapter->MACVersion & 0xffff) < 0x0201))) +-#endif // RT3070 // +- RT30xxWriteRFRegister(pAdapter, RF_R27, 0x23); +- } +- return TRUE; +-} +-#endif +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR LongRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); +- +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.LongRtyLimit = LongRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_LongRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); +- return TRUE; +-} +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- TX_RTY_CFG_STRUC tx_rty_cfg; +- UCHAR ShortRetryLimit = (UCHAR)simple_strtol(arg, 0, 10); +- +- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word); +- tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit; +- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word); +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ShortRetryLimit_Proc::(tx_rty_cfg=0x%x)\n", tx_rty_cfg.word)); +- return TRUE; +-} +- +- +-///////////////////////////////////////////////////////////////////////// +-PSTRING RTMPGetRalinkAuthModeStr( +- IN NDIS_802_11_AUTHENTICATION_MODE authMode) +-{ +- switch(authMode) +- { +- case Ndis802_11AuthModeOpen: +- return "OPEN"; +- case Ndis802_11AuthModeWPAPSK: +- return "WPAPSK"; +- case Ndis802_11AuthModeShared: +- return "SHARED"; +- case Ndis802_11AuthModeWPA: +- return "WPA"; +- case Ndis802_11AuthModeWPA2: +- return "WPA2"; +- case Ndis802_11AuthModeWPA2PSK: +- return "WPA2PSK"; +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- return "WPAPSKWPA2PSK"; +- case Ndis802_11AuthModeWPA1WPA2: +- return "WPA1WPA2"; +- case Ndis802_11AuthModeWPANone: +- return "WPANONE"; +- default: +- return "UNKNOW"; +- } +-} +- + PSTRING RTMPGetRalinkEncryModeStr( + IN USHORT encryMode) + { +@@ -2912,494 +955,3 @@ PSTRING RTMPGetRalinkEncryModeStr( + return "UNKNOW"; + } + } +- +-INT RTMPShowCfgValue( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pName, +- IN PSTRING pBuf) +-{ +- INT Status = 0; +- +- for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++) +- { +- if (!strcmp(pName, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name)) +- { +- if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->show_proc(pAd, pBuf)) +- Status = -EINVAL; +- break; //Exit for loop. +- } +- } +- +- if(PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name == NULL) +- { +- sprintf(pBuf, "\n"); +- for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++) +- sprintf(pBuf + strlen(pBuf), "%s\n", PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name); +- } +- +- return Status; +-} +- +-INT Show_SSID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid); +- return 0; +-} +- +-INT Show_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.PhyMode) +- { +- case PHY_11BG_MIXED: +- sprintf(pBuf, "\t11B/G"); +- break; +- case PHY_11B: +- sprintf(pBuf, "\t11B"); +- break; +- case PHY_11A: +- sprintf(pBuf, "\t11A"); +- break; +- case PHY_11ABG_MIXED: +- sprintf(pBuf, "\t11A/B/G"); +- break; +- case PHY_11G: +- sprintf(pBuf, "\t11G"); +- break; +- case PHY_11ABGN_MIXED: +- sprintf(pBuf, "\t11A/B/G/N"); +- break; +- case PHY_11N_2_4G: +- sprintf(pBuf, "\t11N only with 2.4G"); +- break; +- case PHY_11GN_MIXED: +- sprintf(pBuf, "\t11G/N"); +- break; +- case PHY_11AN_MIXED: +- sprintf(pBuf, "\t11A/N"); +- break; +- case PHY_11BGN_MIXED: +- sprintf(pBuf, "\t11B/G/N"); +- break; +- case PHY_11AGN_MIXED: +- sprintf(pBuf, "\t11A/G/N"); +- break; +- case PHY_11N_5G: +- sprintf(pBuf, "\t11N only with 5G"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%d)", pAd->CommonCfg.PhyMode); +- break; +- } +- return 0; +-} +- +- +-INT Show_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bEnableTxBurst ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.TxPreamble) +- { +- case Rt802_11PreambleShort: +- sprintf(pBuf, "\tShort"); +- break; +- case Rt802_11PreambleLong: +- sprintf(pBuf, "\tLong"); +- break; +- case Rt802_11PreambleAuto: +- sprintf(pBuf, "\tAuto"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.TxPreamble); +- break; +- } +- +- return 0; +-} +- +-INT Show_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%lu", pAd->CommonCfg.TxPowerPercentage); +- return 0; +-} +- +-INT Show_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.Channel); +- return 0; +-} +- +-INT Show_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.UseBGProtection) +- { +- case 1: //Always On +- sprintf(pBuf, "\tON"); +- break; +- case 2: //Always OFF +- sprintf(pBuf, "\tOFF"); +- break; +- case 0: //AUTO +- sprintf(pBuf, "\tAuto"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%lu)", pAd->CommonCfg.UseBGProtection); +- break; +- } +- return 0; +-} +- +-INT Show_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.RtsThreshold); +- return 0; +-} +- +-INT Show_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.FragmentThreshold); +- return 0; +-} +- +-INT Show_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- sprintf(pBuf, "\t40 MHz"); +- } +- else +- { +- sprintf(pBuf, "\t20 MHz"); +- } +- return 0; +-} +- +-INT Show_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS); +- return 0; +-} +- +-INT Show_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.ShortGI) +- { +- case GI_400: +- sprintf(pBuf, "\tGI_400"); +- break; +- case GI_800: +- sprintf(pBuf, "\tGI_800"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.ShortGI); +- break; +- } +- return 0; +-} +- +-INT Show_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.HTMODE) +- { +- case HTMODE_GF: +- sprintf(pBuf, "\tGF"); +- break; +- case HTMODE_MM: +- sprintf(pBuf, "\tMM"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.HTMODE); +- break; +- } +- return 0; +-} +- +-INT Show_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->CommonCfg.RegTransmitSetting.field.EXTCHA) +- { +- case EXTCHA_BELOW: +- sprintf(pBuf, "\tBelow"); +- break; +- case EXTCHA_ABOVE: +- sprintf(pBuf, "\tAbove"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%u)", pAd->CommonCfg.RegTransmitSetting.field.EXTCHA); +- break; +- } +- return 0; +-} +- +- +-INT Show_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.MpduDensity); +- return 0; +-} +- +-INT Show_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%u", pAd->CommonCfg.BACapability.field.RxBAWinLimit); +- return 0; +-} +- +-INT Show_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bRdg ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AmsduEnable ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegion); +- return 0; +-} +- +-INT Show_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%d", pAd->CommonCfg.CountryRegionForABand); +- return 0; +-} +- +-INT Show_CountryCode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.CountryCode); +- return 0; +-} +- +-#ifdef AGGREGATION_SUPPORT +-INT Show_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bAggregationCapable ? "TRUE":"FALSE"); +- return 0; +-} +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +-INT Show_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE"); +- +- return 0; +-} +-#endif // WMM_SUPPORT // +- +-INT Show_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- sprintf(pBuf, "\t%s", pAd->CommonCfg.bIEEE80211H ? "TRUE":"FALSE"); +- return 0; +-} +- +-INT Show_NetworkType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- switch(pAd->StaCfg.BssType) +- { +- case BSS_ADHOC: +- sprintf(pBuf, "\tAdhoc"); +- break; +- case BSS_INFRA: +- sprintf(pBuf, "\tInfra"); +- break; +- case BSS_ANY: +- sprintf(pBuf, "\tAny"); +- break; +- case BSS_MONITOR: +- sprintf(pBuf, "\tMonitor"); +- break; +- default: +- sprintf(pBuf, "\tUnknow Value(%d)", pAd->StaCfg.BssType); +- break; +- } +- return 0; +-} +- +- +- +-INT Show_AuthMode_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen; +- +- AuthMode = pAd->StaCfg.AuthMode; +- +- if ((AuthMode >= Ndis802_11AuthModeOpen) && +- (AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) +- sprintf(pBuf, "\t%s", RTMPGetRalinkAuthModeStr(AuthMode)); +- else +- sprintf(pBuf, "\tUnknow Value(%d)", AuthMode); +- +- return 0; +-} +- +-INT Show_EncrypType_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled; +- +- WepStatus = pAd->StaCfg.WepStatus; +- +- if ((WepStatus >= Ndis802_11WEPEnabled) && +- (WepStatus <= Ndis802_11Encryption4KeyAbsent)) +- sprintf(pBuf, "\t%s", RTMPGetRalinkEncryModeStr(WepStatus)); +- else +- sprintf(pBuf, "\tUnknow Value(%d)", WepStatus); +- +- return 0; +-} +- +-INT Show_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- UCHAR DefaultKeyId = 0; +- +- DefaultKeyId = pAd->StaCfg.DefaultKeyId; +- +- sprintf(pBuf, "\t%d", DefaultKeyId); +- +- return 0; +-} +- +-INT Show_WepKey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN INT KeyIdx, +- OUT PSTRING pBuf) +-{ +- UCHAR Key[16] = {0}, KeyLength = 0; +- INT index = BSS0; +- +- KeyLength = pAd->SharedKey[index][KeyIdx].KeyLen; +- NdisMoveMemory(Key, pAd->SharedKey[index][KeyIdx].Key, KeyLength); +- +- //check key string is ASCII or not +- if (RTMPCheckStrPrintAble((PCHAR)Key, KeyLength)) +- sprintf(pBuf, "\t%s", Key); +- else +- { +- int idx; +- sprintf(pBuf, "\t"); +- for (idx = 0; idx < KeyLength; idx++) +- sprintf(pBuf+strlen(pBuf), "%02X", Key[idx]); +- } +- return 0; +-} +- +-INT Show_Key1_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 0, pBuf); +- return 0; +-} +- +-INT Show_Key2_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 1, pBuf); +- return 0; +-} +- +-INT Show_Key3_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 2, pBuf); +- return 0; +-} +- +-INT Show_Key4_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- Show_WepKey_Proc(pAd, 3, pBuf); +- return 0; +-} +- +-INT Show_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- OUT PSTRING pBuf) +-{ +- INT idx; +- UCHAR PMK[32] = {0}; +- +- NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32); +- +- sprintf(pBuf, "\tPMK = "); +- for (idx = 0; idx < 32; idx++) +- sprintf(pBuf+strlen(pBuf), "%02X", PMK[idx]); +- +- return 0; +-} +- +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 32e553a..59fd05b 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -4237,17 +4237,9 @@ INT RT_CfgSetWPAPSKKey( + // + // Prototypes of function definition in cmm_info.c + // +-NDIS_STATUS RTMPWPARemoveKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf); +- + VOID RTMPWPARemoveAllKeys( + IN PRTMP_ADAPTER pAd); + +-BOOLEAN RTMPCheckStrPrintAble( +- IN CHAR *pInPutStr, +- IN UCHAR strLen); +- + VOID RTMPSetPhyMode( + IN PRTMP_ADAPTER pAd, + IN ULONG phymode); +@@ -4683,183 +4675,9 @@ int rtinet_aton( + unsigned int *addr); + + ////////// common ioctl functions ////////// +-INT Set_DriverVersion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_CountryRegion_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_CountryRegionABand_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_WirelessMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_Channel_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ShortSlot_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxPower_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BGProtection_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxPreamble_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_RTSThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_FragThreshold_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef AGGREGATION_SUPPORT +-INT Set_PktAggregate_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif // AGGREGATION_SUPPORT // +- +-INT Set_IEEE80211H_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-#ifdef DBG +-INT Set_Debug_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif +- +-INT Show_DescInfo_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ResetStatCounter_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BASetup_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BADecline_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BAOriTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_BARecTearDown_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtBw_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMcs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtGi_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtOpMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtStbc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtHtc_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtExtcha_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMpduDensity_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtBaWinSize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtRdg_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtLinkAdapt_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtAmsdu_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtAutoBa_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtProtect_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMimoPs_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_ForceShortGI_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ForceGF_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- + INT SetCommonHT( + IN PRTMP_ADAPTER pAd); + +-INT Set_SendPSMPAction_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtMIMOPSmode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-INT Set_HtTxBASize_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_HtDisallowTKIP_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- + INT WpaCheckEapCode( + IN PRTMP_ADAPTER pAd, + IN PUCHAR pFrame, +@@ -5103,15 +4921,6 @@ INT Set_FixedTxMode_Proc( + IN PRTMP_ADAPTER pAd, + IN PSTRING arg); + +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- + BOOLEAN RT28XXChipsetCheck( + IN void *_dev_p); + +@@ -5661,19 +5470,6 @@ void RtmpTimerQInit( + IN RTMP_ADAPTER *pAd); + #endif // RTMP_TIMER_TASK_SUPPORT // + +-/////////////////////////////////////// +-INT RTMPShowCfgValue( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pName, +- IN PSTRING pBuf); +- +-PSTRING RTMPGetRalinkAuthModeStr( +- IN NDIS_802_11_AUTHENTICATION_MODE authMode); +- +-PSTRING RTMPGetRalinkEncryModeStr( +- IN USHORT encryMode); +-////////////////////////////////////// +- + VOID AsicStaBbpTuning( + IN PRTMP_ADAPTER pAd); + +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index a3aeb1e..df6130c 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -61,42 +61,6 @@ typedef struct PACKED _RT_VERSION_INFO{ + UINT DriverBuildDay; + } RT_VERSION_INFO, *PRT_VERSION_INFO; + +-struct iw_priv_args privtab[] = { +-{ RTPRIV_IOCTL_SET, +- IW_PRIV_TYPE_CHAR | 1024, 0, +- "set"}, +- +-{ RTPRIV_IOCTL_SHOW, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- ""}, +-/* --- sub-ioctls definitions --- */ +- { SHOW_CONN_STATUS, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "connStatus" }, +- { SHOW_DRVIER_VERION, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "driverVer" }, +- { SHOW_BA_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "bainfo" }, +- { SHOW_DESC_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "descinfo" }, +- { RAIO_OFF, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" }, +- { RAIO_ON, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" }, +- { SHOW_CFG_VALUE, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "show" }, +- { SHOW_ADHOC_ENTRY_INFO, +- IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "adhocEntry" }, +-/* --- sub-ioctls relations --- */ +- +-{ RTPRIV_IOCTL_STATISTICS, +- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, +- "stat"}, +-{ RTPRIV_IOCTL_GSITESURVEY, +- 0, IW_PRIV_TYPE_CHAR | 1024, +- "get_site_survey"}, +- +- +-}; +- + static __s32 ralinkrate[] = + {2, 4, 11, 22, // CCK + 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +@@ -113,190 +77,10 @@ INT Set_SSID_Proc( + IN PRTMP_ADAPTER pAdapter, + IN PSTRING arg); + +-#ifdef WMM_SUPPORT +-INT Set_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +-#endif +- + INT Set_NetworkType_Proc( + IN PRTMP_ADAPTER pAdapter, + IN PSTRING arg); + +-INT Set_AuthMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_EncrypType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key1_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key2_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key3_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_Key4_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +- +-INT Set_PSMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-#ifdef RT3090 +-INT Set_PCIePSLevel_Proc( +-IN PRTMP_ADAPTER pAdapter, +-IN PUCHAR arg); +-#endif // RT3090 // +- +-INT Set_Wpa_Support( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-NDIS_STATUS RTMPWPANoneAddKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf); +- +-INT Set_FragTest_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_TGnWifiTest_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_LongRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +-INT Set_ShortRetryLimit_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); +- +- +- +-INT Show_Adhoc_MacTable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING extra); +- +-INT Set_BeaconLostTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_AutoRoaming_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_SiteSurvey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_ForceTxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-static struct { +- PSTRING name; +- INT (*set_proc)(PRTMP_ADAPTER pAdapter, PSTRING arg); +-} *PRTMP_PRIVATE_SET_PROC, RTMP_PRIVATE_SUPPORT_PROC[] = { +- {"DriverVersion", Set_DriverVersion_Proc}, +- {"CountryRegion", Set_CountryRegion_Proc}, +- {"CountryRegionABand", Set_CountryRegionABand_Proc}, +- {"SSID", Set_SSID_Proc}, +- {"WirelessMode", Set_WirelessMode_Proc}, +- {"TxBurst", Set_TxBurst_Proc}, +- {"TxPreamble", Set_TxPreamble_Proc}, +- {"TxPower", Set_TxPower_Proc}, +- {"Channel", Set_Channel_Proc}, +- {"BGProtection", Set_BGProtection_Proc}, +- {"RTSThreshold", Set_RTSThreshold_Proc}, +- {"FragThreshold", Set_FragThreshold_Proc}, +- {"HtBw", Set_HtBw_Proc}, +- {"HtMcs", Set_HtMcs_Proc}, +- {"HtGi", Set_HtGi_Proc}, +- {"HtOpMode", Set_HtOpMode_Proc}, +- {"HtExtcha", Set_HtExtcha_Proc}, +- {"HtMpduDensity", Set_HtMpduDensity_Proc}, +- {"HtBaWinSize", Set_HtBaWinSize_Proc}, +- {"HtRdg", Set_HtRdg_Proc}, +- {"HtAmsdu", Set_HtAmsdu_Proc}, +- {"HtAutoBa", Set_HtAutoBa_Proc}, +- {"HtBaDecline", Set_BADecline_Proc}, +- {"HtProtect", Set_HtProtect_Proc}, +- {"HtMimoPs", Set_HtMimoPs_Proc}, +- {"HtDisallowTKIP", Set_HtDisallowTKIP_Proc}, +-#ifdef AGGREGATION_SUPPORT +- {"PktAggregate", Set_PktAggregate_Proc}, +-#endif // AGGREGATION_SUPPORT // +- +-#ifdef WMM_SUPPORT +- {"WmmCapable", Set_WmmCapable_Proc}, +-#endif +- {"IEEE80211H", Set_IEEE80211H_Proc}, +- {"NetworkType", Set_NetworkType_Proc}, +- {"AuthMode", Set_AuthMode_Proc}, +- {"EncrypType", Set_EncrypType_Proc}, +- {"DefaultKeyID", Set_DefaultKeyID_Proc}, +- {"Key1", Set_Key1_Proc}, +- {"Key2", Set_Key2_Proc}, +- {"Key3", Set_Key3_Proc}, +- {"Key4", Set_Key4_Proc}, +- {"WPAPSK", Set_WPAPSK_Proc}, +- {"ResetCounter", Set_ResetStatCounter_Proc}, +- {"PSMode", Set_PSMode_Proc}, +-#ifdef DBG +- {"Debug", Set_Debug_Proc}, +-#endif // DBG // +- +- +- {"WpaSupport", Set_Wpa_Support}, +- +- +- +- +- +- {"FixedTxMode", Set_FixedTxMode_Proc}, +- {"TGnWifiTest", Set_TGnWifiTest_Proc}, +- {"ForceGF", Set_ForceGF_Proc}, +- {"LongRetry", Set_LongRetryLimit_Proc}, +- {"ShortRetry", Set_ShortRetryLimit_Proc}, +- +-//2008/09/11:KH add to support efuse<-- +-#ifdef RT30xx +-#ifdef RTMP_EFUSE_SUPPORT +- {"efuseFreeNumber", set_eFuseGetFreeBlockCount_Proc}, +- {"efuseDump", set_eFusedump_Proc}, +- {"efuseLoadFromBin", set_eFuseLoadFromBin_Proc}, +- {"efuseBufferModeWriteBack", set_eFuseBufferModeWriteBack_Proc}, +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // +-//2008/09/11:KH add to support efuse--> +- {"BeaconLostTime", Set_BeaconLostTime_Proc}, +- {"AutoRoaming", Set_AutoRoaming_Proc}, +- {"SiteSurvey", Set_SiteSurvey_Proc}, +- {"ForceTxBurst", Set_ForceTxBurst_Proc}, +- +- {NULL,} +-}; +- +- + VOID RTMPAddKey( + IN PRTMP_ADAPTER pAd, + IN PNDIS_802_11_KEY pKey) +@@ -1656,117 +1440,6 @@ rt_ioctl_giwencode(struct net_device *dev, + + } + +-static int +-rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info, +- void *w, char *extra) +-{ +- PRTMP_ADAPTER pAdapter; +- POS_COOKIE pObj; +- PSTRING this_char = extra; +- PSTRING value; +- int Status=0; +- +- GET_PAD_FROM_NET_DEV(pAdapter, dev); +- +- pObj = (POS_COOKIE) pAdapter->OS_Cookie; +- { +- pObj->ioctl_if_type = INT_MAIN; +- pObj->ioctl_if = MAIN_MBSSID; +- } +- +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (!*this_char) +- return -EINVAL; +- +- if ((value = rtstrchr(this_char, '=')) != NULL) +- *value++ = 0; +- +- if (!value && (strcmp(this_char, "SiteSurvey") != 0)) +- return -EINVAL; +- else +- goto SET_PROC; +- +- // reject setting nothing besides ANY ssid(ssidLen=0) +- if (!*value && (strcmp(this_char, "SSID") != 0)) +- return -EINVAL; +- +-SET_PROC: +- for (PRTMP_PRIVATE_SET_PROC = RTMP_PRIVATE_SUPPORT_PROC; PRTMP_PRIVATE_SET_PROC->name; PRTMP_PRIVATE_SET_PROC++) +- { +- if (strcmp(this_char, PRTMP_PRIVATE_SET_PROC->name) == 0) +- { +- if(!PRTMP_PRIVATE_SET_PROC->set_proc(pAdapter, value)) +- { //FALSE:Set private failed then return Invalid argument +- Status = -EINVAL; +- } +- break; //Exit for loop. +- } +- } +- +- if(PRTMP_PRIVATE_SET_PROC->name == NULL) +- { //Not found argument +- Status = -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_setparam:: (iwpriv) Not Support Set Command [%s=%s]\n", this_char, value)); +- } +- +- return Status; +-} +- +- +-static int +-rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, char *extra) +-{ +- INT Status = 0; +- PRTMP_ADAPTER pAd = NULL; +- +- GET_PAD_FROM_NET_DEV(pAd, dev); +- +- if (extra == NULL) +- { +- wrq->length = 0; +- return -EIO; +- } +- +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- sprintf(extra, "\n\n"); +- +- { +- sprintf(extra+strlen(extra), "Tx success = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart); +- sprintf(extra+strlen(extra), "Tx success without retry = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart - (ULONG)pAd->WlanCounters.RetryCount.QuadPart); +- } +- sprintf(extra+strlen(extra), "Tx success after retry = %ld\n", (ULONG)pAd->WlanCounters.RetryCount.QuadPart); +- sprintf(extra+strlen(extra), "Tx fail to Rcv ACK after retry = %ld\n", (ULONG)pAd->WlanCounters.FailedCount.QuadPart); +- sprintf(extra+strlen(extra), "RTS Success Rcv CTS = %ld\n", (ULONG)pAd->WlanCounters.RTSSuccessCount.QuadPart); +- sprintf(extra+strlen(extra), "RTS Fail Rcv CTS = %ld\n", (ULONG)pAd->WlanCounters.RTSFailureCount.QuadPart); +- +- sprintf(extra+strlen(extra), "Rx success = %ld\n", (ULONG)pAd->WlanCounters.ReceivedFragmentCount.QuadPart); +- sprintf(extra+strlen(extra), "Rx with CRC = %ld\n", (ULONG)pAd->WlanCounters.FCSErrorCount.QuadPart); +- sprintf(extra+strlen(extra), "Rx drop due to out of resource = %ld\n", (ULONG)pAd->Counters8023.RxNoBuffer); +- sprintf(extra+strlen(extra), "Rx duplicate frame = %ld\n", (ULONG)pAd->WlanCounters.FrameDuplicateCount.QuadPart); +- +- sprintf(extra+strlen(extra), "False CCA (one second) = %ld\n", (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt); +- { +- sprintf(extra+strlen(extra), "RSSI-A = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi0 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-B (if available) = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi1 - pAd->BbpRssiToDbmDelta)); +- sprintf(extra+strlen(extra), "RSSI-C (if available) = %ld\n\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi2 - pAd->BbpRssiToDbmDelta)); +- } +- sprintf(extra+strlen(extra), "WpaSupplicantUP = %d\n\n", pAd->StaCfg.WpaSupplicantUP); +- +- +- +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length)); +- +- return Status; +-} +- + void getBaInfo( + IN PRTMP_ADAPTER pAd, + IN PSTRING pOutBuf) +@@ -1814,143 +1487,6 @@ void getBaInfo( + return; + } + +-static int +-rt_private_show(struct net_device *dev, struct iw_request_info *info, +- struct iw_point *wrq, PSTRING extra) +-{ +- INT Status = 0; +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- u32 subcmd = wrq->flags; +- +- GET_PAD_FROM_NET_DEV(pAd, dev); +- +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- if (extra == NULL) +- { +- wrq->length = 0; +- return -EIO; +- } +- memset(extra, 0x00, IW_PRIV_SIZE_MASK); +- +- { +- pObj->ioctl_if_type = INT_MAIN; +- pObj->ioctl_if = MAIN_MBSSID; +- } +- +- switch(subcmd) +- { +- +- case SHOW_CONN_STATUS: +- if (MONITOR_ON(pAd)) +- { +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAd->CommonCfg.RegTransmitSetting.field.BW) +- sprintf(extra, "Monitor Mode(CentralChannel %d)\n", pAd->CommonCfg.CentralChannel); +- else +- sprintf(extra, "Monitor Mode(Channel %d)\n", pAd->CommonCfg.Channel); +- } +- else +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- if (INFRA_ON(pAd)) +- { +- sprintf(extra, "Connected(AP: %s[%02X:%02X:%02X:%02X:%02X:%02X])\n", +- pAd->CommonCfg.Ssid, +- pAd->CommonCfg.Bssid[0], +- pAd->CommonCfg.Bssid[1], +- pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3], +- pAd->CommonCfg.Bssid[4], +- pAd->CommonCfg.Bssid[5]); +- DBGPRINT(RT_DEBUG_TRACE ,("Ssid=%s ,Ssidlen = %d\n",pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)); +- } +- else if (ADHOC_ON(pAd)) +- sprintf(extra, "Connected\n"); +- } +- else +- { +- sprintf(extra, "Disconnected\n"); +- DBGPRINT(RT_DEBUG_TRACE ,("ConnStatus is not connected\n")); +- } +- } +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case SHOW_DRVIER_VERION: +- sprintf(extra, "Driver version-%s, %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__ ); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case SHOW_BA_INFO: +- getBaInfo(pAd, extra); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case SHOW_DESC_INFO: +- { +- Show_DescInfo_Proc(pAd, NULL); +- wrq->length = 0; // 1: size of '\0' +- } +- break; +- case RAIO_OFF: +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- } +- pAd->StaCfg.bSwRadio = FALSE; +- if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == FALSE) +- { +- MlmeRadioOff(pAd); +- // Update extra information +- pAd->ExtraInfo = SW_RADIO_OFF; +- } +- } +- sprintf(extra, "Radio Off\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- case RAIO_ON: +- pAd->StaCfg.bSwRadio = TRUE; +- //if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == TRUE) +- { +- MlmeRadioOn(pAd); +- // Update extra information +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- } +- sprintf(extra, "Radio On\n"); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- +- +- +- case SHOW_CFG_VALUE: +- { +- Status = RTMPShowCfgValue(pAd, (PSTRING) wrq->pointer, extra); +- if (Status == 0) +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- } +- break; +- case SHOW_ADHOC_ENTRY_INFO: +- Show_Adhoc_MacTable_Proc(pAd, extra); +- wrq->length = strlen(extra) + 1; // 1: size of '\0' +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("%s - unknow subcmd = %d\n", __func__, subcmd)); +- break; +- } +- +- return Status; +-} +- + int rt_ioctl_siwmlme(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, +@@ -2774,43 +2310,10 @@ static const iw_handler rt_handler[] = + (iw_handler) rt_ioctl_siwpmksa, /* SIOCSIWPMKSA */ + }; + +-static const iw_handler rt_priv_handlers[] = { +- (iw_handler) NULL, /* + 0x00 */ +- (iw_handler) NULL, /* + 0x01 */ +- (iw_handler) rt_ioctl_setparam, /* + 0x02 */ +- (iw_handler) NULL, /* + 0x03 */ +- (iw_handler) NULL, /* + 0x04 */ +- (iw_handler) NULL, /* + 0x05 */ +- (iw_handler) NULL, /* + 0x06 */ +- (iw_handler) NULL, /* + 0x07 */ +- (iw_handler) NULL, /* + 0x08 */ +- (iw_handler) rt_private_get_statistics, /* + 0x09 */ +- (iw_handler) NULL, /* + 0x0A */ +- (iw_handler) NULL, /* + 0x0B */ +- (iw_handler) NULL, /* + 0x0C */ +- (iw_handler) NULL, /* + 0x0D */ +- (iw_handler) NULL, /* + 0x0E */ +- (iw_handler) NULL, /* + 0x0F */ +- (iw_handler) NULL, /* + 0x10 */ +- (iw_handler) rt_private_show, /* + 0x11 */ +- (iw_handler) NULL, /* + 0x12 */ +- (iw_handler) NULL, /* + 0x13 */ +- (iw_handler) NULL, /* + 0x14 */ +- (iw_handler) NULL, /* + 0x15 */ +- (iw_handler) NULL, /* + 0x16 */ +- (iw_handler) NULL, /* + 0x17 */ +- (iw_handler) NULL, /* + 0x18 */ +-}; +- + const struct iw_handler_def rt28xx_iw_handler_def = + { +-#define N(a) (sizeof (a) / sizeof (a[0])) + .standard = (iw_handler *) rt_handler, + .num_standard = sizeof(rt_handler) / sizeof(iw_handler), +- .private = (iw_handler *) rt_priv_handlers, +- .num_private = N(rt_priv_handlers), +- .private_args = (struct iw_priv_args *) privtab, +- .num_private_args = N(privtab), + #if IW_HANDLER_VERSION >= 7 + .get_wireless_stats = rt28xx_get_wireless_stats, + #endif +@@ -2980,17 +2483,8 @@ INT rt28xx_sta_ioctl( + case RT_PRIV_IOCTL_EXT: + case RTPRIV_IOCTL_SET: + case RTPRIV_IOCTL_GSITESURVEY: +- Status = -EOPNOTSUPP; +- break; + case SIOCGIWPRIV: +- if (wrq->u.data.pointer) +- { +- if ( access_ok(VERIFY_WRITE, wrq->u.data.pointer, sizeof(privtab)) != TRUE) +- break; +- wrq->u.data.length = sizeof(privtab) / sizeof(privtab[0]); +- if (copy_to_user(wrq->u.data.pointer, privtab, sizeof(privtab))) +- Status = -EFAULT; +- } ++ Status = -EOPNOTSUPP; + break; + case SIOCETHTOOL: + break; +@@ -3087,41 +2581,6 @@ INT Set_SSID_Proc( + return success; + } + +-#ifdef WMM_SUPPORT +-/* +- ========================================================================== +- Description: +- Set WmmCapable Enable or Disable +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WmmCapable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- BOOLEAN bWmmCapable; +- +- bWmmCapable = simple_strtol(arg, 0, 10); +- +- if ((bWmmCapable == 1) +-#ifdef RTMP_MAC_USB +- && (pAd->NumberOfPipes >= 5) +-#endif // RTMP_MAC_USB // +- ) +- pAd->CommonCfg.bWmmCapable = TRUE; +- else if (bWmmCapable == 0) +- pAd->CommonCfg.bWmmCapable = FALSE; +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WmmCapable_Proc::(bWmmCapable=%d)\n", +- pAd->CommonCfg.bWmmCapable)); +- +- return TRUE; +-} +-#endif // WMM_SUPPORT // +- + /* + ========================================================================== + Description: +@@ -3306,765 +2765,3 @@ INT Set_NetworkType_Proc( + + return TRUE; + } +- +-/* +- ========================================================================== +- Description: +- Set Authentication mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_AuthMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if ((strcmp(arg, "WEPAUTO") == 0) || (strcmp(arg, "wepauto") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +- else if ((strcmp(arg, "OPEN") == 0) || (strcmp(arg, "open") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- else if ((strcmp(arg, "SHARED") == 0) || (strcmp(arg, "shared") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else if ((strcmp(arg, "WPAPSK") == 0) || (strcmp(arg, "wpapsk") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- else if ((strcmp(arg, "WPANONE") == 0) || (strcmp(arg, "wpanone") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- else if ((strcmp(arg, "WPA2PSK") == 0) || (strcmp(arg, "wpa2psk") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +- else if ((strcmp(arg, "WPA") == 0) || (strcmp(arg, "wpa") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- else if ((strcmp(arg, "WPA2") == 0) || (strcmp(arg, "wpa2") == 0)) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +- else +- return FALSE; +- +- pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_AuthMode_Proc::(AuthMode=%d)\n", pAdapter->StaCfg.AuthMode)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Encryption Type +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_EncrypType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if ((strcmp(arg, "NONE") == 0) || (strcmp(arg, "none") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- } +- else if ((strcmp(arg, "WEP") == 0) || (strcmp(arg, "wep") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +- } +- else if ((strcmp(arg, "TKIP") == 0) || (strcmp(arg, "tkip") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((strcmp(arg, "AES") == 0) || (strcmp(arg, "aes") == 0)) +- { +- if (pAdapter->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption3Enabled; +- } +- else +- return FALSE; +- +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_EncrypType_Proc::(EncrypType=%d)\n", pAdapter->StaCfg.WepStatus)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Default Key ID +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_DefaultKeyID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- ULONG KeyIdx; +- +- KeyIdx = simple_strtol(arg, 0, 10); +- if((KeyIdx >= 1 ) && (KeyIdx <= 4)) +- pAdapter->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1 ); +- else +- return FALSE; //Invalid argument +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_DefaultKeyID_Proc::(DefaultKeyID=%d)\n", pAdapter->StaCfg.DefaultKeyId)); +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set WEP KEY1 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key1_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][0].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][0].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][0].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][0].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][0].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::(Key1=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key1_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- +- pAdapter->SharedKey[BSS0][0].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 0, +- pAdapter->SharedKey[BSS0][0].CipherAlg, +- pAdapter->SharedKey[BSS0][0].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- +- Description: +- Set WEP KEY2 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key2_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][1].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][1].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][1].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][1].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][1].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::(Key2=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key2_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][1].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 1, +- pAdapter->SharedKey[BSS0][1].CipherAlg, +- pAdapter->SharedKey[BSS0][1].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- Description: +- Set WEP KEY3 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key3_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][2].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Ascii)\n", arg)); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][2].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Hex)\n", arg)); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][2].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Ascii)\n", arg)); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][2].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][2].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::(Key3=%s and type=Hex)\n", arg)); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key3_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][2].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 2, +- pAdapter->SharedKey[BSS0][2].CipherAlg, +- pAdapter->SharedKey[BSS0][2].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +-/* +- ========================================================================== +- Description: +- Set WEP KEY4 +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Key4_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- int KeyLen; +- int i; +- UCHAR CipherAlg=CIPHER_WEP64; +- +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- return TRUE; // do nothing +- +- KeyLen = strlen(arg); +- +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][3].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 10: //wep 40 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][3].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP64; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex")); +- break; +- case 13: //wep 104 Ascii type +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen; +- memcpy(pAdapter->SharedKey[BSS0][3].Key, arg, KeyLen); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Ascii")); +- break; +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(arg+i)) ) +- return FALSE; //Not Hex value; +- } +- pAdapter->SharedKey[BSS0][3].KeyLen = KeyLen / 2 ; +- AtoH(arg, pAdapter->SharedKey[BSS0][3].Key, KeyLen / 2); +- CipherAlg = CIPHER_WEP128; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::(Key4=%s and type=%s)\n", arg, "Hex")); +- break; +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Key4_Proc::Invalid argument (=%s)\n", arg)); +- return FALSE; +- } +- pAdapter->SharedKey[BSS0][3].CipherAlg = CipherAlg; +- +- // Set keys (into ASIC) +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- ; // not support +- else // Old WEP stuff +- { +- AsicAddSharedKeyEntry(pAdapter, +- 0, +- 3, +- pAdapter->SharedKey[BSS0][3].CipherAlg, +- pAdapter->SharedKey[BSS0][3].Key, +- NULL, +- NULL); +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set WPA PSK key +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_WPAPSK_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- int status; +- +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- ) +- return TRUE; // do nothing +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc::(WPAPSK=%s)\n", arg)); +- +- status = RT_CfgSetWPAPSKKey(pAd, arg, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, pAd->StaCfg.PMK); +- if (status == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc(): Set key failed!\n")); +- return FALSE; +- } +- NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- NdisMoveMemory(pAd->StaCfg.WpaPassPhrase, arg, strlen(arg)); +- pAd->StaCfg.WpaPassPhraseLen = (UINT)strlen(arg); +- +- +- +- if(pAd->StaCfg.BssType == BSS_ADHOC && +- pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- } +- else +- { +- // Start STA supplicant state machine +- pAd->StaCfg.WpaState = SS_START; +- } +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set Power Saving mode +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_PSMode_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) +-{ +- if (pAdapter->StaCfg.BssType == BSS_INFRA) +- { +- if ((strcmp(arg, "Max_PSP") == 0) || +- (strcmp(arg, "max_psp") == 0) || +- (strcmp(arg, "MAX_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- pAdapter->StaCfg.DefaultListenCount = 5; +- +- } +- else if ((strcmp(arg, "Fast_PSP") == 0) || +- (strcmp(arg, "fast_psp") == 0) || +- (strcmp(arg, "FAST_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; +- pAdapter->StaCfg.DefaultListenCount = 3; +- } +- else if ((strcmp(arg, "Legacy_PSP") == 0) || +- (strcmp(arg, "legacy_psp") == 0) || +- (strcmp(arg, "LEGACY_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckPsmChange() +- // to exclude certain situations. +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAdapter->StaCfg.DefaultListenCount = 3; +- } +- else +- { +- //Default Ndis802_11PowerModeCAM +- // clear PSM bit immediately +- RTMP_SET_PSM_BIT(pAdapter, PWR_ACTIVE); +- OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_RECEIVE_DTIM); +- if (pAdapter->StaCfg.bWindowsACCAMEnable == FALSE) +- pAdapter->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAdapter->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_PSMode_Proc::(PSMode=%ld)\n", pAdapter->StaCfg.WindowsPowerMode)); +- } +- else +- return FALSE; +- +- +- return TRUE; +-} +- +-/* +- ========================================================================== +- Description: +- Set WpaSupport flag. +- Value: +- 0: Driver ignore wpa_supplicant. +- 1: wpa_supplicant initiates scanning and AP selection. +- 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters. +- Return: +- TRUE if all parameters are OK, FALSE otherwise +- ========================================================================== +-*/ +-INT Set_Wpa_Support( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- +- if ( simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +- else if ( simple_strtol(arg, 0, 10) == 1) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE; +- else if ( simple_strtol(arg, 0, 10) == 2) +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE_WITH_WEB_UI; +- else +- pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_Wpa_Support::(WpaSupplicantUP=%d)\n", pAd->StaCfg.WpaSupplicantUP)); +- +- return TRUE; +-} +- +-INT Set_TGnWifiTest_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bTGnWifiTest = FALSE; +- else +- pAd->StaCfg.bTGnWifiTest = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_TGnWifiTest_Proc::(bTGnWifiTest=%d)\n", pAd->StaCfg.bTGnWifiTest)); +- return TRUE; +-} +- +- +- +- +-INT Show_Adhoc_MacTable_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING extra) +-{ +- INT i; +- +- sprintf(extra, "\n"); +- +- sprintf(extra + strlen(extra), "HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode); +- +- sprintf(extra + strlen(extra), "\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n", +- "MAC", "AID", "BSS", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC"); +- +- for (i=1; iMacTab.Content[i]; +- +- if (strlen(extra) > (IW_PRIV_SIZE_MASK - 30)) +- break; +- if ((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC)) +- { +- sprintf(extra + strlen(extra), "%02X:%02X:%02X:%02X:%02X:%02X ", +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]); +- sprintf(extra + strlen(extra), "%-4d", (int)pEntry->Aid); +- sprintf(extra + strlen(extra), "%-4d", (int)pEntry->apidx); +- sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi0); +- sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi1); +- sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi2); +- sprintf(extra + strlen(extra), "%-10s", GetPhyMode(pEntry->HTPhyMode.field.MODE)); +- sprintf(extra + strlen(extra), "%-6s", GetBW(pEntry->HTPhyMode.field.BW)); +- sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.MCS); +- sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.ShortGI); +- sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.STBC); +- sprintf(extra + strlen(extra), "%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount, +- (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0); +- sprintf(extra, "%s\n", extra); +- } +- } +- +- return TRUE; +-} +- +- +-INT Set_BeaconLostTime_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- ULONG ltmp = (ULONG)simple_strtol(arg, 0, 10); +- +- if ((ltmp != 0) && (ltmp <= 60)) +- pAd->StaCfg.BeaconLostTime = (ltmp * OS_HZ); +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_BeaconLostTime_Proc::(BeaconLostTime=%ld)\n", pAd->StaCfg.BeaconLostTime)); +- return TRUE; +-} +- +-INT Set_AutoRoaming_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bAutoRoaming = FALSE; +- else +- pAd->StaCfg.bAutoRoaming = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_AutoRoaming_Proc::(bAutoRoaming=%d)\n", pAd->StaCfg.bAutoRoaming)); +- return TRUE; +-} +- +- +-/* +- ========================================================================== +- Description: +- Issue a site survey command to driver +- Arguments: +- pAdapter Pointer to our adapter +- wrq Pointer to the ioctl argument +- +- Return Value: +- None +- +- Note: +- Usage: +- 1.) iwpriv ra0 set site_survey +- ========================================================================== +-*/ +-INT Set_SiteSurvey_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- NDIS_802_11_SSID Ssid; +- +- //check if the interface is down +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (MONITOR_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); +- return -EINVAL; +- } +- +- RTMPZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); +- Ssid.SsidLength = 0; +- if ((arg != NULL) && +- (strlen(arg) <= MAX_LEN_OF_SSID)) +- { +- RTMPMoveMemory(Ssid.Ssid, arg, strlen(arg)); +- Ssid.SsidLength = strlen(arg); +- } +- +- pAd->StaCfg.bScanReqIsFromWebUI = TRUE; +- +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Reset allowed scan retries +- pAd->StaCfg.ScanCnt = 0; +- NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); +- +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- Ssid.SsidLength, +- Ssid.Ssid); +- +- RTMP_MLME_HANDLER(pAd); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Set_SiteSurvey_Proc\n")); +- +- return TRUE; +-} +- +-INT Set_ForceTxBurst_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- if (simple_strtol(arg, 0, 10) == 0) +- pAd->StaCfg.bForceTxBurst = FALSE; +- else +- pAd->StaCfg.bForceTxBurst = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_ForceTxBurst_Proc::(bForceTxBurst=%d)\n", pAd->StaCfg.bForceTxBurst)); +- return TRUE; +-} +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch b/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch new file mode 100644 index 000000000..90096b354 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch @@ -0,0 +1,181 @@ +From 9228d0d8c860c266248bb1034d74952e1928f03b Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:27 +0200 +Subject: [PATCH 10/42] Staging: rt28x0: remove support for private driver parameters + +commit 782f1111256557c75415f57cd360ebf9d1377a55 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/Makefile | 1 - + drivers/staging/rt2860/common/rtmp_init.c | 9 --- + drivers/staging/rt2860/rt_profile.c | 95 ----------------------------- + drivers/staging/rt2860/rtmp.h | 3 - + drivers/staging/rt2870/Makefile | 1 - + 5 files changed, 0 insertions(+), 109 deletions(-) + delete mode 100644 drivers/staging/rt2860/rt_profile.c + +diff --git a/drivers/staging/rt2860/Makefile b/drivers/staging/rt2860/Makefile +index ba17142..09e448a 100644 +--- a/drivers/staging/rt2860/Makefile ++++ b/drivers/staging/rt2860/Makefile +@@ -38,7 +38,6 @@ rt2860sta-objs := \ + sta/connect.o \ + sta/wpa.o \ + rt_linux.o \ +- rt_profile.o \ + rt_main_dev.o \ + sta_ioctl.o \ + common/ba_action.o \ +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 3b43101..9e1c73d 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -3439,16 +3439,7 @@ int rt28xx_init( + goto err3; + } + +- // Read parameters from Config File +- Status = RTMPReadParametersHook(pAd); +- + DBGPRINT(RT_DEBUG_OFF, ("1. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICReadRegParameters failed, Status[=0x%08x]\n",Status)); +-// goto err4; +- Status = 0; +- } + + #ifdef RTMP_MAC_USB + pAd->CommonCfg.bMultipleIRP = FALSE; +diff --git a/drivers/staging/rt2860/rt_profile.c b/drivers/staging/rt2860/rt_profile.c +deleted file mode 100644 +index 4355331..0000000 +--- a/drivers/staging/rt2860/rt_profile.c ++++ /dev/null +@@ -1,95 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +- +- Module Name: +- rt_profile.c +- +- Abstract: +- +- Revision History: +- Who When What +- --------- ---------- ---------------------------------------------- +- */ +- +-#include "rt_config.h" +- +- +-NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd) +-{ +- PSTRING src = NULL; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- INT retval = NDIS_STATUS_FAILURE; +- PSTRING buffer; +- +- buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(buffer == NULL) +- return NDIS_STATUS_FAILURE; +- memset(buffer, 0x00, MAX_INI_BUFFER_SIZE); +- +- { +- { +- src = STA_PROFILE_PATH; +- } +- } +- +- if (src && *src) +- { +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Open file \"%s\" failed!\n", src)); +- } +- else +- { +- retval =RtmpOSFileRead(srcf, buffer, MAX_INI_BUFFER_SIZE); +- if (retval > 0) +- { +- RTMPSetProfileParameters(pAd, buffer); +- retval = NDIS_STATUS_SUCCESS; +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); +- +- retval = RtmpOSFileClose(srcf); +- if ( retval != 0) +- { +- retval = NDIS_STATUS_FAILURE; +- DBGPRINT(RT_DEBUG_ERROR, ("Close file \"%s\" failed(errCode=%d)!\n", src, retval)); +- } +- } +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- } +- +- kfree(buffer); +- +- return (retval); +- +-} +- +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 59fd05b..3ec50b5 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -2453,9 +2453,6 @@ NDIS_STATUS RTMPAllocAdapterBlock( + NDIS_STATUS RTMPAllocTxRxRingMemory( + IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RTMPReadParametersHook( +- IN PRTMP_ADAPTER pAd); +- + NDIS_STATUS RTMPSetProfileParameters( + IN RTMP_ADAPTER *pAd, + IN PSTRING pBuffer); +diff --git a/drivers/staging/rt2870/Makefile b/drivers/staging/rt2870/Makefile +index 661cdf9..92668eb 100644 +--- a/drivers/staging/rt2870/Makefile ++++ b/drivers/staging/rt2870/Makefile +@@ -39,7 +39,6 @@ rt2870sta-objs := \ + sta/connect.o \ + sta/wpa.o \ + rt_linux.o \ +- rt_profile.o \ + rt_main_dev.o \ + sta_ioctl.o \ + common/ba_action.o \ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch b/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch new file mode 100644 index 000000000..5db604dcd --- /dev/null +++ b/debian/patches/features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch @@ -0,0 +1,992 @@ +From 00bbeabc14e759b3df8071d5ac38ec73f84061eb Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:35 +0200 +Subject: [PATCH 11/42] Staging: rt28x0: remove optional loading of EEPROM from file in eFuse mode + +commit 44c68c23b16c85127d187fd720f95aa2e7a94d2e upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/cmm_profile.c | 10 - + drivers/staging/rt2860/common/ee_efuse.c | 788 +-------------------------- + drivers/staging/rt2860/common/eeprom.c | 3 - + drivers/staging/rt2860/common/rtmp_init.c | 9 - + drivers/staging/rt2860/rt_linux.c | 20 - + drivers/staging/rt2860/rtmp.h | 21 - + 6 files changed, 1 insertions(+), 850 deletions(-) + +diff --git a/drivers/staging/rt2860/common/cmm_profile.c b/drivers/staging/rt2860/common/cmm_profile.c +index 056cffd..117ee07 100644 +--- a/drivers/staging/rt2860/common/cmm_profile.c ++++ b/drivers/staging/rt2860/common/cmm_profile.c +@@ -1194,16 +1194,6 @@ NDIS_STATUS RTMPSetProfileParameters( + retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_5G); + DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); + } +-#ifdef RTMP_EFUSE_SUPPORT +-#ifdef RT30xx +- //EfuseBufferMode +- if(RTMPGetKeyParameter("EfuseBufferMode", tmpbuf, 25, pBuffer, TRUE)) +- { +- pAd->bEEPROMFile = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("EfuseBufferMode=%d\n", pAd->bUseEfuse)); +- } +-#endif // RT30xx // +-#endif // RTMP_EFUSE_SUPPORT // + //CountryCode + if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, pBuffer, TRUE)) + { +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index 5807cc4..4bff473 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -67,21 +67,6 @@ typedef union _EFUSE_CTRL_STRUC { + UINT32 word; + } EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; + +-static VOID eFuseWritePhysical( +- IN PRTMP_ADAPTER pAd, +- PUSHORT lpInBuffer, +- ULONG nInBufferSize, +- PUCHAR lpOutBuffer, +- ULONG nOutBufferSize); +- +- +-static NTSTATUS eFuseWriteRegistersFromBin( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- IN USHORT* pData); +- +- + /* + ======================================================================== + +@@ -281,164 +266,6 @@ static VOID eFuseReadPhysical( + + ======================================================================== + */ +-static VOID eFusePhysicalWriteRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) +-{ +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data, eFuseDataBuffer[4]; +- +- //Step0. Write 16-byte of data to EFUSE_DATA0-3 (0x590-0x59C), where EFUSE_DATA0 is the LSB DW, EFUSE_DATA3 is the MSB DW. +- +- ///////////////////////////////////////////////////////////////// +- //read current values of 16-byte block +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- eFuseCtrlStruc.field.EFSROM_MODE = 1; +- +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &eFuseDataBuffer[i]); +- efuseDataOffset -= 4; +- } +- +- //Update the value, the offset is multiple of 2, length is 2 +- efuseDataOffset = (Offset & 0xc) >> 2; +- data = pData[0] & 0xffff; +- //The offset should be 0x***10 or 0x***00 +- if((Offset % 4) != 0) +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff) | (data << 16); +- } +- else +- { +- eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff0000) | data; +- } +- +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_WRITE32(pAd, efuseDataOffset, eFuseDataBuffer[i]); +- efuseDataOffset -= 4; +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It¡¦s done. +- i = 0; +- +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- +- RTMPusecDelay(2); +- i++; +- } +-} +- +-/* +-======================================================================== +- +- Routine Description: +- +- Arguments: +- +- Return Value: +- +- Note: +- +-======================================================================== +-*/ +-static VOID eFuseWritePhysical( +- IN PRTMP_ADAPTER pAd, +- PUSHORT lpInBuffer, +- ULONG nInBufferSize, +- PUCHAR lpOutBuffer, +- ULONG nOutBufferSize +-) +-{ +- USHORT* pInBuf = (USHORT*)lpInBuffer; +- int i; +- //USHORT* pOutBuf = (USHORT*)ioBuffer; +- USHORT Offset = pInBuf[0]; // addr +- USHORT Length = pInBuf[1]; // length +- USHORT* pValueX = &pInBuf[2]; // value ... +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWritePhysical Offset=0x%x, length=%d\n", Offset, Length)); +- +- { +- // Little-endian S | S Big-endian +- // addr 3 2 1 0 | 0 1 2 3 +- // Ori-V D C B A | A B C D +- // After swapping +- // D C B A | D C B A +- // Both the little and big-endian use the same sequence to write data. +- // Therefore, we only need swap data when read the data. +- for (i=0; i0) +- NdisMoveMemory(src, arg, strlen(arg)); +- else +- NdisMoveMemory(src, EFUSE_EEPROM_DEFULT_FILE, strlen(EFUSE_EEPROM_DEFULT_FILE)); +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- RtmpOSFSInfoChange(&osfsInfo, TRUE); +- +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error opening file %s\n", src)); +- retval = FALSE; +- goto recoverFS; +- } +- else +- { +- // The object must have a read method +- while(RtmpOSFileRead(srcf, &buffer[i], 1)==1) +- { +- i++; +- if(i>MAX_EEPROM_BIN_FILE_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error reading file %s, file size too large[>%d]\n", src, MAX_EEPROM_BIN_FILE_SIZE)); +- retval = FALSE; +- goto closeFile; +- } +- } +- +- retval = RtmpOSFileClose(srcf); +- if (retval) +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error closing file %s\n", src)); +- } +- +- +- RtmpOSFSInfoChange(&osfsInfo, FALSE); +- +- for(j=0;j48*16-3(reserved)=2FC +- bAllocateNewBlk=TRUE; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- //Retrive the logical block nubmer form each logical address pointer +- //It will access two logical address pointer each time. +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- {//Not used logical address pointer +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- {//Not used logical address pointer +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START+1; +- } +- break; +- } +- } +- } +- else +- { +- bAllocateNewBlk=FALSE; +- BlkNum = EFSROM_AOUT; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum)); +- +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- //Step 1.1.0 +- //If the block is not existing in mapping table, create one +- //and write down the 16-bytes data to the new block +- if(bAllocateNewBlk) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk\n")); +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk, Data%d=%04x%04x\n",3-i,pData[2*i+1],pData[2*i])); +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- +- +- RTMP_IO_WRITE32(pAd, efuseDataOffset,tempbuffer); +- efuseDataOffset -= 4; +- +- } +- ///////////////////////////////////////////////////////////////// +- +- //Step1.1.1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- eFuseCtrlStruc.field.EFSROM_AIN = BlkNum* 0x10 ; +- +- //Step1.1.2. Write EFSROM_MODE (0x580, bit7:bit6) to 3. +- eFuseCtrlStruc.field.EFSROM_MODE = 3; +- +- //Step1.1.3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.1.4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It¡¦s done. +- i = 0; +- while(i < 100) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- +- RTMPusecDelay(2); +- i++; +- } +- +- } +- else +- { //Step1.2. +- //If the same logical number is existing, check if the writting data and the data +- //saving in this block are the same. +- ///////////////////////////////////////////////////////////////// +- //read current values of 16-byte block +- RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- +- //Step1.2.0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; +- +- //Step1.2.1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- eFuseCtrlStruc.field.EFSROM_MODE = 0; +- +- //Step1.2.2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. +- eFuseCtrlStruc.field.EFSROM_KICK = 1; +- +- NdisMoveMemory(&data, &eFuseCtrlStruc, 4); +- RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); +- +- //Step1.2.3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. +- i = 0; +- while(i < 500) +- { +- RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc); +- +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- break; +- RTMPusecDelay(2); +- i++; +- } +- +- //Step1.2.4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- efuseDataOffset = EFUSE_DATA3; +- for(i=0; i< 4; i++) +- { +- RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &buffer[i]); +- efuseDataOffset -= 4; +- } +- //Step1.2.5. Check if the data of efuse and the writing data are the same. +- for(i =0; i<4; i++) +- { +- tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i]; +- DBGPRINT(RT_DEBUG_TRACE, ("buffer[%d]=%x,pData[%d]=%x,pData[%d]=%x,tempbuffer=%x\n",i,buffer[i],2*i,pData[2*i],2*i+1,pData[2*i+1],tempbuffer)); +- +- if(((buffer[i]&0xffff0000)==(pData[2*i+1]<<16))&&((buffer[i]&0xffff)==pData[2*i])) +- bNotWrite&=TRUE; +- else +- { +- bNotWrite&=FALSE; +- break; +- } +- } +- if(!bNotWrite) +- { +- printk("The data is not the same\n"); +- +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = pData[i]; +- +- eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2); +- } +- +- } +- else +- return TRUE; +- } +- +- +- +- //Step 2. Write mapping table +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry +- tmpOffset = Offset; +- tmpOffset >>= 4; +- tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40; +- tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80; +- +- // write the logical address +- if(tmpaddr%2 != 0) +- InBuf[2] = tmpOffset<<8; +- else +- InBuf[2] = tmpOffset; +- +- eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0); +- +- //Step 3. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted +- bWriteSuccess = TRUE; +- for(i =0; i<8; i++) +- { +- addr = BlkNum * 0x10 ; +- +- InBuf[0] = addr+2*i; +- InBuf[1] = 2; +- InBuf[2] = 0x0; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- DBGPRINT(RT_DEBUG_TRACE, ("addr=%x, buffer[i]=%x,InBuf[2]=%x\n",InBuf[0],pData[i],InBuf[2])); +- if(pData[i] != InBuf[2]) +- { +- bWriteSuccess = FALSE; +- break; +- } +- } +- +- //Step 4. invlidate mapping entry and find a free mapping entry if not succeed +- +- if (!bWriteSuccess&&Loop<2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess BlkNum = %d\n", BlkNum)); +- +- // the offset of current mapping entry +- addr = EFUSE_USAGE_MAP_START+BlkNum; +- +- //find a new mapping entry +- BlkNum = 0xffff; +- for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2) +- { +- eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- BlkNum = i-EFUSE_USAGE_MAP_START; +- break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- if (i != EFUSE_USAGE_MAP_END) +- { +- BlkNum = i+1-EFUSE_USAGE_MAP_START; +- } +- break; +- } +- } +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess new BlkNum = %d\n", BlkNum)); +- if(BlkNum == 0xffff) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin: out of free E-fuse space!!!\n")); +- return FALSE; +- } +- +- //invalidate the original mapping entry if new entry is not found +- tmpaddr = addr; +- +- if(addr % 2 != 0) +- addr = addr -1; +- InBuf[0] = addr; +- InBuf[1] = 2; +- +- eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2); +- +- // write the logical address +- if(tmpaddr%2 != 0) +- { +- // Invalidate the high byte +- for (i=8; i<15; i++) +- { +- if( ( (InBuf[2] >> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <> i) & 0x01) == 0) +- { +- InBuf[2] |= (0x1 <bFroceEEPROMBuffer || pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Read from EEPROM Buffer\n")); +- NdisMoveMemory(pValue, &(pAd->EEPROMImage[Offset]), 2); +- } +- else +- eFuseReadRegisters(pAd, Offset, 2, pValue); ++ eFuseReadRegisters(pAd, Offset, 2, pValue); + return (*pValue); + } + +@@ -944,177 +341,6 @@ int RtmpEfuseSupportCheck( + return 0; + } + +-INT set_eFuseBufferModeWriteBack_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) +-{ +- UINT Enable; +- +- +- if(strlen(arg)>0) +- { +- Enable= simple_strtol(arg, 0, 16); +- } +- else +- return FALSE; +- if(Enable==1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("set_eFuseBufferMode_Proc:: Call WRITEEEPROMBUF")); +- eFuseWriteEeeppromBuf(pAd); +- } +- else +- return FALSE; +- return TRUE; +-} +- +- +-/* +- ======================================================================== +- +- Routine Description: +- Load EEPROM from bin file for eFuse mode +- +- Arguments: +- Adapter Pointer to our adapter +- +- Return Value: +- NDIS_STATUS_SUCCESS firmware image load ok +- NDIS_STATUS_FAILURE image not found +- +- IRQL = PASSIVE_LEVEL +- +- ======================================================================== +-*/ +-INT eFuseLoadEEPROM( +- IN PRTMP_ADAPTER pAd) +-{ +- PSTRING src = NULL; +- INT retval; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- +- +- src=EFUSE_BUFFER_PATH; +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- if (src && *src) +- { +- srcf = RtmpOSFileOpen(src, O_RDONLY, 0); +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- return FALSE; +- } +- else +- { +- +- memset(pAd->EEPROMImage, 0x00, MAX_EEPROM_BIN_FILE_SIZE); +- +- +- retval =RtmpOSFileRead(srcf, (PSTRING)pAd->EEPROMImage, MAX_EEPROM_BIN_FILE_SIZE); +- if (retval > 0) +- { +- RTMPSetProfileParameters(pAd, (PSTRING)pAd->EEPROMImage); +- retval = NDIS_STATUS_SUCCESS; +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Read file \"%s\" failed(errCode=%d)!\n", src, retval)); +- +- } +- +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); +- return FALSE; +- +- } +- +- retval=RtmpOSFileClose(srcf); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- +- return TRUE; +-} +- +-INT eFuseWriteEeeppromBuf( +- IN PRTMP_ADAPTER pAd) +-{ +- +- PSTRING src = NULL; +- INT retval; +- RTMP_OS_FD srcf; +- RTMP_OS_FS_INFO osFSInfo; +- +- +- src=EFUSE_BUFFER_PATH; +- DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src)); +- +- RtmpOSFSInfoChange(&osFSInfo, TRUE); +- +- +- +- if (src && *src) +- { +- srcf = RtmpOSFileOpen(src, O_WRONLY|O_CREAT, 0); +- +- if (IS_FILE_OPEN_ERR(srcf)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src)); +- return FALSE; +- } +- else +- { +-/* +- // The object must have a read method +- if (srcf->f_op && srcf->f_op->write) +- { +- // The object must have a read method +- srcf->f_op->write(srcf, pAd->EEPROMImage, 1024, &srcf->f_pos); +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error!! System doest not support read function\n")); +- return FALSE; +- } +-*/ +- +- RtmpOSFileWrite(srcf, (PSTRING)pAd->EEPROMImage,MAX_EEPROM_BIN_FILE_SIZE); +- +- } +- +- +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n")); +- return FALSE; +- +- } +- +- retval=RtmpOSFileClose(srcf); +- +- if (retval) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src)); +- } +- +- RtmpOSFSInfoChange(&osFSInfo, FALSE); +- return TRUE; +-} +- +- + VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, + PUINT EfuseFreeBlock) + { +@@ -1151,18 +377,6 @@ INT eFuse_init( + UINT EfuseFreeBlock=0; + DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and its size =%x[%x-%x] \n",EFUSE_USAGE_MAP_SIZE,EFUSE_USAGE_MAP_START,EFUSE_USAGE_MAP_END)); + eFuseGetFreeBlockCount(pAd, &EfuseFreeBlock); +- //If the used block of efuse is less than 5. We assume the default value +- // of this efuse is empty and change to the buffer mode in odrder to +- //bring up interfaces successfully. +- if(EfuseFreeBlock > (EFUSE_USAGE_MAP_END-5)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and the information is too less to bring up interface. Force to use EEPROM Buffer Mode\n")); +- pAd->bFroceEEPROMBuffer = TRUE; +- eFuseLoadEEPROM(pAd); +- } +- else +- pAd->bFroceEEPROMBuffer = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("NVM is Efuse and force to use EEPROM Buffer Mode=%x\n",pAd->bFroceEEPROMBuffer)); + + return 0; + } +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index d7a2664..39276ca 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -69,10 +69,7 @@ INT RtmpChipOpsEepromHook( + return 0 ; + } + else +- { +- pAd->bFroceEEPROMBuffer = FALSE; + DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); +- } + #endif // RTMP_EFUSE_SUPPORT // + #endif // RT30xx // + +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 9e1c73d..fe8327b 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -694,15 +694,6 @@ VOID NICReadEEPROMParameters( + + if (pAd->chipOps.eeinit) + pAd->chipOps.eeinit(pAd); +-#ifdef RTMP_EFUSE_SUPPORT +-#ifdef RT30xx +- if(!pAd->bFroceEEPROMBuffer && pAd->bEEPROMFile) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters::(Efuse)Load to EEPROM Buffer Mode\n")); +- eFuseLoadEEPROM(pAd); +- } +-#endif // RT30xx // +-#endif // RTMP_EFUSE_SUPPORT // + + // Init EEPROM Address Number, before access EEPROM; if 93c46, EEPROMAddressNum=6, else if 93c66, EEPROMAddressNum=8 + RTMP_IO_READ32(pAd, E2PROM_CSR, &data); +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index b578360..cdda247 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -1065,26 +1065,6 @@ int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) + return osfd->f_op->write(osfd, pDataPtr, (size_t)writeLen, &osfd->f_pos); + } + +- +-void RtmpOSFSInfoChange(RTMP_OS_FS_INFO *pOSFSInfo, BOOLEAN bSet) +-{ +- if (bSet) +- { +- // Save uid and gid used for filesystem access. +- // Set user and group to 0 (root) +- pOSFSInfo->fsuid = current_fsuid(); +- pOSFSInfo->fsgid = current_fsgid(); +- pOSFSInfo->fs = get_fs(); +- set_fs(KERNEL_DS); +- } +- else +- { +- set_fs(pOSFSInfo->fs); +- } +-} +- +- +- + /******************************************************************************* + + Task create/management/kill related functions. +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 3ec50b5..c43c8ea 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -2258,8 +2258,6 @@ struct _RTMP_ADAPTER + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + BOOLEAN bUseEfuse; +- BOOLEAN bEEPROMFile; +- BOOLEAN bFroceEEPROMBuffer; + UCHAR EEPROMImage[1024]; + #endif // RTMP_EFUSE_SUPPORT // + #endif // RT30xx // +@@ -4021,10 +4019,6 @@ INT set_eFusedump_Proc( + IN PRTMP_ADAPTER pAd, + IN PSTRING arg); + +-INT set_eFuseLoadFromBin_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- + VOID eFusePhysicalReadRegisters( + IN PRTMP_ADAPTER pAd, + IN USHORT Offset, +@@ -4034,16 +4028,6 @@ VOID eFusePhysicalReadRegisters( + int RtmpEfuseSupportCheck( + IN RTMP_ADAPTER *pAd); + +-INT set_eFuseBufferModeWriteBack_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT eFuseLoadEEPROM( +- IN PRTMP_ADAPTER pAd); +- +-INT eFuseWriteEeeppromBuf( +- IN PRTMP_ADAPTER pAd); +- + VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, + PUINT EfuseFreeBlock); + +@@ -5632,10 +5616,5 @@ int RtmpOSFileWrite( + IN char *pDataPtr, + IN int writeLen); + +-void RtmpOSFSInfoChange( +- IN RTMP_OS_FS_INFO *pOSFSInfo, +- IN BOOLEAN bSet); +- +- + #endif // __RTMP_H__ + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch b/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch new file mode 100644 index 000000000..ecf82c375 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch @@ -0,0 +1,349 @@ +From 579614c2cab885c702da52c9c1cb836bd08ddbd0 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:42 +0200 +Subject: [PATCH 12/42] Staging: rt28x0: fix some build warnings + +commit ca58fb303757d73876af32238d86091c59b88507 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chip/rtmp_phy.h | 8 +++--- + drivers/staging/rt2860/chips/rt30xx.c | 2 + + drivers/staging/rt2860/common/cmm_asic.c | 6 ++-- + drivers/staging/rt2860/common/cmm_mac_pci.c | 7 ++--- + drivers/staging/rt2860/common/mlme.c | 1 - + drivers/staging/rt2860/common/rtmp_init.c | 3 +- + drivers/staging/rt2860/common/rtmp_mcu.c | 2 + + drivers/staging/rt2860/pci_main_dev.c | 35 +++++++++++++++++---------- + drivers/staging/rt2860/rt_linux.c | 10 +++---- + drivers/staging/rt2860/rt_main_dev.c | 6 +--- + drivers/staging/rt2860/sta/connect.c | 1 - + drivers/staging/rt2860/usb_main_dev.c | 7 +++-- + 12 files changed, 48 insertions(+), 40 deletions(-) + +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index 87516f3..e2b90a1 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -552,8 +552,8 @@ + #ifdef RT30xx + #define RTMP_ASIC_MMPS_DISABLE(_pAd) \ + do{ \ +- UCHAR _bbpData; \ +- UINT32 _macData; \ ++ UINT32 _macData; \ ++ UCHAR _bbpData = 0; \ + /* disable MMPS BBP control register */ \ + RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ + _bbpData &= ~(0x04); /*bit 2*/ \ +@@ -568,8 +568,8 @@ + + #define RTMP_ASIC_MMPS_ENABLE(_pAd) \ + do{ \ +- UCHAR _bbpData; \ +- UINT32 _macData; \ ++ UINT32 _macData; \ ++ UCHAR _bbpData = 0; \ + /* enable MMPS BBP control register */ \ + RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ + _bbpData |= (0x04); /*bit 2*/ \ +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index f29d11d..c69fab5 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -86,7 +86,9 @@ VOID RT30xxSetRxAnt( + IN UCHAR Ant) + { + UINT32 Value; ++#ifdef RTMP_MAC_PCI + UINT32 x; ++#endif + + if ((pAd->EepromAccess) || + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index 5d3a387..406e0bb 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -810,9 +810,9 @@ VOID AsicSwitchChannel( + + #if defined(RT3090) || defined(RT3390) + // PCIe PHY Transmit attenuation adjustment +- if (IS_RT3090A(pAd) || IS_RT3390(pAd)) +- { +- TX_ATTENUATION_CTRL_STRUC TxAttenuationCtrl = {0}; ++ if (IS_RT3090A(pAd) || IS_RT3390(pAd)) { ++ TX_ATTENUATION_CTRL_STRUC ++ TxAttenuationCtrl = { .word = 0 }; + + RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, &TxAttenuationCtrl.word); + +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index 73992cb..d910bfd 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -1173,10 +1173,9 @@ BOOLEAN RT28xxPciAsicRadioOn( + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + } +- if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)&& +- ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE)) +- ||(RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))) +- { ++ if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE && ++ (Level == GUIRADIO_OFF || Level == GUI_IDLE_POWER_SAVE)) || ++ RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) { + // Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore + // return condition here. + /* +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 7647c09..9fa853e 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -679,7 +679,6 @@ VOID MlmePeriodicExec( + { + ULONG TxTotalCnt; + PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext; +- SHORT realavgrssi; + + #ifdef RTMP_MAC_PCI + { +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index fe8327b..5deba8d 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -3621,7 +3621,8 @@ INT RtmpRaDevCtrlInit( + + #ifdef RTMP_MAC_USB + init_MUTEX(&(pAd->UsbVendorReq_semaphore)); +- os_alloc_mem(pAd, (PUCHAR)&pAd->UsbVendorReqBuf, MAX_PARAM_BUFFER_SIZE - 1); ++ os_alloc_mem(pAd, (PUCHAR *)&pAd->UsbVendorReqBuf, ++ MAX_PARAM_BUFFER_SIZE - 1); + if (pAd->UsbVendorReqBuf == NULL) + { + DBGPRINT(RT_DEBUG_ERROR, ("Allocate vendor request temp buffer failed!\n")); +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 229ea05..e5d1902 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -119,7 +119,9 @@ NDIS_STATUS RtmpAsicLoadFirmware( + PUCHAR pFirmwareImage = NULL; + ULONG FileLength, Index; + UINT32 MacReg = 0; ++#ifdef RTMP_MAC_USB + UINT32 Version = (pAd->MACVersion >> 16); ++#endif + + // New 8k byte firmware size for RT3071/RT3072 + { +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 1436a60..38bc429 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -310,7 +310,7 @@ static INT __devinit rt2860_probe( + return rv; + } + +- print_name = pci_name(pci_dev); ++ print_name = (PSTRING)pci_name(pci_dev); + + if ((rv = pci_request_regions(pci_dev, print_name)) != 0) + { +@@ -883,7 +883,7 @@ VOID RTMPPCIeLinkCtrlValueRestore( + #endif // RT2860 // + // Check PSControl Configuration + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- return TRUE; ++ return; + + //3090 will not execute the following codes. + // Check interface : If not PCIe interface, return. +@@ -977,7 +977,7 @@ VOID RTMPPCIeLinkCtrlSetting( + #endif // RT2860 // + // Check PSControl Configuration + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- return TRUE; ++ return; + + // Check interface : If not PCIe interface, return. + //Block 3090 to enter the following function +@@ -1086,17 +1086,17 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + IN PRTMP_ADAPTER pAd) + { + +- ULONG HostConfiguration; ++ ULONG HostConfiguration = 0; + ULONG Configuration; +- ULONG Vendor; +- ULONG offset; + POS_COOKIE pObj; + INT pos; + USHORT reg16; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- DBGPRINT(RT_DEBUG_INFO, ("RTMPrt3xSetPCIePowerLinkCtrl.===> %x\n", pAd->StaCfg.PSControl.word)); ++ DBGPRINT(RT_DEBUG_INFO, ++ ("RTMPrt3xSetPCIePowerLinkCtrl.===> %lx\n", ++ pAd->StaCfg.PSControl.word)); + + // Check PSControl Configuration + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +@@ -1104,7 +1104,6 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + RTMPFindHostPCIDev(pAd); + if (pObj->parent_pci_dev) + { +- USHORT vendor_id; + // Find PCI-to-PCI Bridge Express Capability Offset + pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); + +@@ -1129,7 +1128,10 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + // Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. + // Fix HostConfiguration bit0:1 = 0x3 for later use. + HostConfiguration = 0x3; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM : Force ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM : Force ASPM : " ++ "Host device L1/L0s Value = 0x%lx\n", ++ HostConfiguration)); + } + } + else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) +@@ -1141,7 +1143,10 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); + pAd->Rt3xxHostLinkCtrl = HostConfiguration; + HostConfiguration &= 0x3; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM : Follow Host ASPM : Host device L1/L0s Value = 0x%x\n", HostConfiguration)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM : Follow Host ASPM : " ++ "Host device L1/L0s Value = 0x%lx\n", ++ HostConfiguration)); + } + } + } +@@ -1155,8 +1160,10 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); + Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Read (Ralink PCIe Link Control Register) " ++ "offset 0x%x = 0x%lx\n", ++ pAd->RLnkCtrlOffset, Configuration)); + Configuration |= 0x100; + if ((pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) + || (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1)) +@@ -1182,7 +1189,9 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + reg16 = cpu2le16(Configuration); + pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); + pAd->Rt3xxRalinkLinkCtrl = Configuration; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM :Write Ralink device L1/L0s Value = 0x%x\n", Configuration)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM :Write Ralink device L1/L0s Value = 0x%lx\n", ++ Configuration)); + } + DBGPRINT(RT_DEBUG_INFO,("PSM :RTMPrt3xSetPCIePowerLinkCtrl <==============\n")); + } +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index cdda247..d57013f 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -965,6 +965,7 @@ err_free_sk_buff: + *******************************************************************************/ + int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + { ++#ifdef RTMP_PCI_SUPPORT + struct net_device *net_dev = pNetDev; + PRTMP_ADAPTER pAd = NULL; + int retval = 0; +@@ -973,7 +974,6 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + + ASSERT(pAd); + +-#ifdef RTMP_PCI_SUPPORT + if (pAd->infType == RTMP_DEV_INF_PCI) + { + POS_COOKIE _pObj = (POS_COOKIE)(pAd->OS_Cookie); +@@ -982,14 +982,13 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + if (retval != 0) + printk("RT2860: request_irq ERROR(%d)\n", retval); + } +-#endif // RTMP_PCI_SUPPORT // +- + + return retval; +- ++#else ++ return 0; ++#endif + } + +- + int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + { + struct net_device *net_dev = pNetDev; +@@ -1149,7 +1148,6 @@ NDIS_STATUS RtmpOSTaskAttach( + IN void *arg) + { + NDIS_STATUS status = NDIS_STATUS_SUCCESS; +- pid_t pid_number = -1; + + #ifdef KTHREAD_SUPPORT + pTask->task_killed = 0; +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 7ea85e6..3a73571 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -209,15 +209,13 @@ int rt28xx_close(IN PNET_DEV dev) + BOOLEAN Cancelled; + UINT32 i = 0; + +- GET_PAD_FROM_NET_DEV(pAd, net_dev); +- + #ifdef RTMP_MAC_USB + DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); + DECLARE_WAITQUEUE(wait, current); +- +- //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); + #endif // RTMP_MAC_USB // + ++ GET_PAD_FROM_NET_DEV(pAd, net_dev); ++ + DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); + + Cancelled = FALSE; +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 7f263a6..43edd8e 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -1809,7 +1809,6 @@ VOID LinkDown( + IN BOOLEAN IsReqFromAP) + { + UCHAR i, ByteValue = 0; +- BOOLEAN Cancelled; + + // Do nothing if monitor mode is on + if (MONITOR_ON(pAd)) +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 16e1bbf..00732be 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -686,9 +686,10 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER *pAd) + + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); + +- +- printk("%d:%d LTL=%d , TL=%d L:%d\n",idx,pAd->watchDogTxPendingCnt[idx],pAd->TransferedLength[idx] +- ,actual_length,transfer_buffer_length); ++ printk(KERN_INFO "%d:%lu LTL=%d , TL=%d L:%d\n", ++ idx, pAd->watchDogTxPendingCnt[idx], ++ pAd->TransferedLength[idx], ++ actual_length, transfer_buffer_length); + + if (pUrb) + { +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch b/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch new file mode 100644 index 000000000..d49f3aef9 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch @@ -0,0 +1,1875 @@ +From 8d90a318f5ad9d02ff5a9dc24c0f832ea39cf9e4 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:48 +0200 +Subject: [PATCH 13/42] Staging: rt28x0: remove optional cmm profile parameters + +commit f4e54708bc60be380b3640e6db2b3f73cb13eebd upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/Makefile | 1 - + drivers/staging/rt2860/common/cmm_profile.c | 1769 --------------------------- + drivers/staging/rt2860/rtmp.h | 34 - + drivers/staging/rt2870/Makefile | 1 - + 4 files changed, 0 insertions(+), 1805 deletions(-) + delete mode 100644 drivers/staging/rt2860/common/cmm_profile.c + +diff --git a/drivers/staging/rt2860/Makefile b/drivers/staging/rt2860/Makefile +index 09e448a..23ae07f 100644 +--- a/drivers/staging/rt2860/Makefile ++++ b/drivers/staging/rt2860/Makefile +@@ -27,7 +27,6 @@ rt2860sta-objs := \ + common/spectrum.o \ + common/rtmp_timer.o \ + common/rt_channel.o \ +- common/cmm_profile.o \ + common/cmm_asic.o \ + sta/assoc.o \ + sta/auth.o \ +diff --git a/drivers/staging/rt2860/common/cmm_profile.c b/drivers/staging/rt2860/common/cmm_profile.c +deleted file mode 100644 +index 117ee07..0000000 +--- a/drivers/staging/rt2860/common/cmm_profile.c ++++ /dev/null +@@ -1,1769 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-#include "../rt_config.h" +- +- +-#define ETH_MAC_ADDR_STR_LEN 17 // in format of xx:xx:xx:xx:xx:xx +- +-// We assume the s1 is a sting, s2 is a memory space with 6 bytes. and content of s1 will be changed. +-BOOLEAN rtstrmactohex(PSTRING s1, PSTRING s2) +-{ +- int i = 0; +- PSTRING ptokS = s1, ptokE = s1; +- +- if (strlen(s1) != ETH_MAC_ADDR_STR_LEN) +- return FALSE; +- +- while((*ptokS) != '\0') +- { +- if((ptokE = strchr(ptokS, ':')) != NULL) +- *ptokE++ = '\0'; +- if ((strlen(ptokS) != 2) || (!isxdigit(*ptokS)) || (!isxdigit(*(ptokS+1)))) +- break; // fail +- AtoH(ptokS, (PUCHAR)&s2[i++], 1); +- ptokS = ptokE; +- if (i == 6) +- break; // parsing finished +- } +- +- return ( i == 6 ? TRUE : FALSE); +- +-} +- +- +-// we assume the s1 and s2 both are strings. +-BOOLEAN rtstrcasecmp(PSTRING s1, PSTRING s2) +-{ +- PSTRING p1 = s1, p2 = s2; +- +- if (strlen(s1) != strlen(s2)) +- return FALSE; +- +- while(*p1 != '\0') +- { +- if((*p1 != *p2) && ((*p1 ^ *p2) != 0x20)) +- return FALSE; +- p1++; +- p2++; +- } +- +- return TRUE; +-} +- +-// we assume the s1 (buffer) and s2 (key) both are strings. +-PSTRING rtstrstruncasecmp(PSTRING s1, PSTRING s2) +-{ +- INT l1, l2, i; +- char temp1, temp2; +- +- l2 = strlen(s2); +- if (!l2) +- return (char *) s1; +- +- l1 = strlen(s1); +- +- while (l1 >= l2) +- { +- l1--; +- +- for(i=0; i= l2) +- { +- l1--; +- if (!memcmp(s1,s2,l2)) +- return s1; +- s1++; +- } +- +- return NULL; +-} +- +-/** +- * rstrtok - Split a string into tokens +- * @s: The string to be searched +- * @ct: The characters to search for +- * * WARNING: strtok is deprecated, use strsep instead. However strsep is not compatible with old architecture. +- */ +-PSTRING __rstrtok; +-PSTRING rstrtok(PSTRING s,const PSTRING ct) +-{ +- PSTRING sbegin, send; +- +- sbegin = s ? s : __rstrtok; +- if (!sbegin) +- { +- return NULL; +- } +- +- sbegin += strspn(sbegin,ct); +- if (*sbegin == '\0') +- { +- __rstrtok = NULL; +- return( NULL ); +- } +- +- send = strpbrk( sbegin, ct); +- if (send && *send != '\0') +- *send++ = '\0'; +- +- __rstrtok = send; +- +- return (sbegin); +-} +- +-/** +- * delimitcnt - return the count of a given delimiter in a given string. +- * @s: The string to be searched. +- * @ct: The delimiter to search for. +- * Notice : We suppose the delimiter is a single-char string(for example : ";"). +- */ +-INT delimitcnt(PSTRING s,PSTRING ct) +-{ +- INT count = 0; +- /* point to the beginning of the line */ +- PSTRING token = s; +- +- for ( ;; ) +- { +- token = strpbrk(token, ct); /* search for delimiters */ +- +- if ( token == NULL ) +- { +- /* advanced to the terminating null character */ +- break; +- } +- /* skip the delimiter */ +- ++token; +- +- /* +- * Print the found text: use len with %.*s to specify field width. +- */ +- +- /* accumulate delimiter count */ +- ++count; +- } +- return count; +-} +- +-/* +- * converts the Internet host address from the standard numbers-and-dots notation +- * into binary data. +- * returns nonzero if the address is valid, zero if not. +- */ +-int rtinet_aton(PSTRING cp, unsigned int *addr) +-{ +- unsigned int val; +- int base, n; +- STRING c; +- unsigned int parts[4]; +- unsigned int *pp = parts; +- +- for (;;) +- { +- /* +- * Collect number up to ``.''. +- * Values are specified as for C: +- * 0x=hex, 0=octal, other=decimal. +- */ +- val = 0; +- base = 10; +- if (*cp == '0') +- { +- if (*++cp == 'x' || *cp == 'X') +- base = 16, cp++; +- else +- base = 8; +- } +- while ((c = *cp) != '\0') +- { +- if (isdigit((unsigned char) c)) +- { +- val = (val * base) + (c - '0'); +- cp++; +- continue; +- } +- if (base == 16 && isxdigit((unsigned char) c)) +- { +- val = (val << 4) + +- (c + 10 - (islower((unsigned char) c) ? 'a' : 'A')); +- cp++; +- continue; +- } +- break; +- } +- if (*cp == '.') +- { +- /* +- * Internet format: a.b.c.d a.b.c (with c treated as 16-bits) +- * a.b (with b treated as 24 bits) +- */ +- if (pp >= parts + 3 || val > 0xff) +- return 0; +- *pp++ = val, cp++; +- } +- else +- break; +- } +- +- /* +- * Check for trailing junk. +- */ +- while (*cp) +- if (!isspace((unsigned char) *cp++)) +- return 0; +- +- /* +- * Concoct the address according to the number of parts specified. +- */ +- n = pp - parts + 1; +- switch (n) +- { +- +- case 1: /* a -- 32 bits */ +- break; +- +- case 2: /* a.b -- 8.24 bits */ +- if (val > 0xffffff) +- return 0; +- val |= parts[0] << 24; +- break; +- +- case 3: /* a.b.c -- 8.8.16 bits */ +- if (val > 0xffff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16); +- break; +- +- case 4: /* a.b.c.d -- 8.8.8.8 bits */ +- if (val > 0xff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); +- break; +- } +- +- *addr = htonl(val); +- return 1; +- +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Find key section for Get key parameter. +- +- Arguments: +- buffer Pointer to the buffer to start find the key section +- section the key of the secion to be find +- +- Return Value: +- NULL Fail +- Others Success +- ======================================================================== +-*/ +-PSTRING RTMPFindSection( +- IN PSTRING buffer) +-{ +- STRING temp_buf[32]; +- PSTRING ptr; +- +- strcpy(temp_buf, "Default"); +- +- if((ptr = rtstrstr(buffer, temp_buf)) != NULL) +- return (ptr+strlen("\n")); +- else +- return NULL; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Get key parameter. +- +- Arguments: +- key Pointer to key string +- dest Pointer to destination +- destsize The datasize of the destination +- buffer Pointer to the buffer to start find the key +- bTrimSpace Set true if you want to strip the space character of the result pattern +- +- Return Value: +- TRUE Success +- FALSE Fail +- +- Note: +- This routine get the value with the matched key (case case-sensitive) +- For SSID and security key related parameters, we SHALL NOT trim the space(' ') character. +- ======================================================================== +-*/ +-INT RTMPGetKeyParameter( +- IN PSTRING key, +- OUT PSTRING dest, +- IN INT destsize, +- IN PSTRING buffer, +- IN BOOLEAN bTrimSpace) +-{ +- PSTRING pMemBuf, temp_buf1 = NULL, temp_buf2 = NULL; +- PSTRING start_ptr, end_ptr; +- PSTRING ptr; +- PSTRING offset = NULL; +- INT len, keyLen; +- +- +- keyLen = strlen(key); +- os_alloc_mem(NULL, (PUCHAR *)&pMemBuf, MAX_PARAM_BUFFER_SIZE * 2); +- if (pMemBuf == NULL) +- return (FALSE); +- +- memset(pMemBuf, 0, MAX_PARAM_BUFFER_SIZE * 2); +- temp_buf1 = pMemBuf; +- temp_buf2 = (PSTRING)(pMemBuf + MAX_PARAM_BUFFER_SIZE); +- +- +- //find section +- if((offset = RTMPFindSection(buffer)) == NULL) +- { +- os_free_mem(NULL, (PUCHAR)pMemBuf); +- return (FALSE); +- } +- +- strcpy(temp_buf1, "\n"); +- strcat(temp_buf1, key); +- strcat(temp_buf1, "="); +- +- //search key +- if((start_ptr=rtstrstr(offset, temp_buf1)) == NULL) +- { +- os_free_mem(NULL, (PUCHAR)pMemBuf); +- return (FALSE); +- } +- +- start_ptr += strlen("\n"); +- if((end_ptr = rtstrstr(start_ptr, "\n"))==NULL) +- end_ptr = start_ptr+strlen(start_ptr); +- +- if (end_ptr= 1 ) && (KeyIdx <= 4)) +- pAd->StaCfg.DefaultKeyId = (UCHAR) (KeyIdx - 1); +- else +- pAd->StaCfg.DefaultKeyId = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyID(0~3)=%d\n", pAd->StaCfg.DefaultKeyId)); +- } +- } +- +- +- for (idx = 0; idx < 4; idx++) +- { +- sprintf(tok_str, "Key%dType", idx + 1); +- //Key1Type +- if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- /* +- do sanity check for KeyType length; +- or in station mode, the KeyType length > 1, +- the code will overwrite the stack of caller +- (RTMPSetProfileParameters) and cause srcbuf = NULL +- */ +- if (i < MAX_MBSSID_NUM) +- KeyType[i] = simple_strtol(macptr, 0, 10); +- } +- +- { +- sprintf(tok_str, "Key%dStr", idx + 1); +- if (RTMPGetKeyParameter(tok_str, tmpbuf, 128, buffer, FALSE)) +- { +- rtmp_parse_key_buffer_from_file(pAd, tmpbuf, KeyType[BSS0], BSS0, idx); +- } +- } +- } +- } +-} +- +- +- +-static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer) +-{ +- PSTRING macptr; +- INT i=0; +- BOOLEAN bWmmEnable = FALSE; +- +- //WmmCapable +- if(RTMPGetKeyParameter("WmmCapable", tmpbuf, 32, buffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- { +- pAd->CommonCfg.bWmmCapable = TRUE; +- bWmmEnable = TRUE; +- } +- else //Disable +- { +- pAd->CommonCfg.bWmmCapable = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("WmmCapable=%d\n", pAd->CommonCfg.bWmmCapable)); +- } +- +- +- //AckPolicy for AC_BK, AC_BE, AC_VI, AC_VO +- if(RTMPGetKeyParameter("AckPolicy", tmpbuf, 32, buffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- pAd->CommonCfg.AckPolicy[i] = (UCHAR)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AckPolicy[%d]=%d\n", i, pAd->CommonCfg.AckPolicy[i])); +- } +- } +- +- if (bWmmEnable) +- { +- //APSDCapable +- if(RTMPGetKeyParameter("APSDCapable", tmpbuf, 10, buffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAPSDCapable = TRUE; +- else +- pAd->CommonCfg.bAPSDCapable = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("APSDCapable=%d\n", pAd->CommonCfg.bAPSDCapable)); +- } +- +- //MaxSPLength +- if(RTMPGetKeyParameter("MaxSPLength", tmpbuf, 10, buffer, TRUE)) +- { +- pAd->CommonCfg.MaxSPLength = simple_strtol(tmpbuf, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("MaxSPLength=%d\n", pAd->CommonCfg.MaxSPLength)); +- } +- +- //APSDAC for AC_BE, AC_BK, AC_VI, AC_VO +- if(RTMPGetKeyParameter("APSDAC", tmpbuf, 32, buffer, TRUE)) +- { +- BOOLEAN apsd_ac[4]; +- +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- apsd_ac[i] = (BOOLEAN)simple_strtol(macptr, 0, 10); +- +- DBGPRINT(RT_DEBUG_TRACE, ("APSDAC%d %d\n", i, apsd_ac[i])); +- } +- +- pAd->CommonCfg.bAPSDAC_BE = apsd_ac[0]; +- pAd->CommonCfg.bAPSDAC_BK = apsd_ac[1]; +- pAd->CommonCfg.bAPSDAC_VI = apsd_ac[2]; +- pAd->CommonCfg.bAPSDAC_VO = apsd_ac[3]; +- +- pAd->CommonCfg.bACMAPSDTr[0] = apsd_ac[0]; +- pAd->CommonCfg.bACMAPSDTr[1] = apsd_ac[1]; +- pAd->CommonCfg.bACMAPSDTr[2] = apsd_ac[2]; +- pAd->CommonCfg.bACMAPSDTr[3] = apsd_ac[3]; +- } +- } +- +-} +- +- +-static void HTParametersHook( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pValueStr, +- IN PSTRING pInput) +-{ +- +- long Value; +- +- if (RTMPGetKeyParameter("HT_PROTECT", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bHTProtect = FALSE; +- } +- else +- { +- pAd->CommonCfg.bHTProtect = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Protection = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- if (RTMPGetKeyParameter("HT_MIMOPSEnable", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bMIMOPSEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.bMIMOPSEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPSEnable = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_MIMOPSMode", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value > MMPS_ENABLE) +- { +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- } +- else +- { +- //TODO: add mimo power saving mechanism +- pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; +- //pAd->CommonCfg.BACapability.field.MMPSmode = Value; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MIMOPS Mode = %d\n", (INT) Value)); +- } +- +- if (RTMPGetKeyParameter("HT_BADecline", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bBADecline = FALSE; +- } +- else +- { +- pAd->CommonCfg.bBADecline = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Decline = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- +- if (RTMPGetKeyParameter("HT_DisableReordering", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bDisableReordering = FALSE; +- } +- else +- { +- pAd->CommonCfg.bDisableReordering = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: DisableReordering = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- if (RTMPGetKeyParameter("HT_AutoBA", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AutoBA = FALSE; +- pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AutoBA = TRUE; +- pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- } +- pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Tx_+HTC frame +- if (RTMPGetKeyParameter("HT_HTC", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->HTCEnable = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // Enable HT Link Adaptation Control +- if (RTMPGetKeyParameter("HT_LinkAdapt", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->bLinkAdapt = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->bLinkAdapt = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Link Adaptation Control = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- // Reverse Direction Mechanism +- if (RTMPGetKeyParameter("HT_RDG", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bRdg = FALSE; +- } +- else +- { +- pAd->HTCEnable = TRUE; +- pAd->CommonCfg.bRdg = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: RDG = %s\n", (Value==0) ? "Disable" : "Enable(+HTC)")); +- } +- +- +- +- +- // Tx A-MSUD ? +- if (RTMPGetKeyParameter("HT_AMSDU", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.BACapability.field.AmsduEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx A-MSDU = %s\n", (Value==0) ? "Disable" : "Enable")); +- } +- +- // MPDU Density +- if (RTMPGetKeyParameter("HT_MpduDensity", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value <=7 && Value >= 0) +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d\n", (INT) Value)); +- } +- else +- { +- pAd->CommonCfg.BACapability.field.MpduDensity = 4; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MPDU Density = %d (Default)\n", 4)); +- } +- } +- +- // Max Rx BA Window Size +- if (RTMPGetKeyParameter("HT_BAWinSize", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value >=1 && Value <= 64) +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = Value; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = %d\n", (INT) Value)); +- } +- else +- { +- pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = 64; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: BA Windw Size = 64 (Defualt)\n")); +- } +- +- } +- +- // Guard Interval +- if (RTMPGetKeyParameter("HT_GI", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == GI_400) +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_400; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.ShortGI = GI_800; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Guard Interval = %s\n", (Value==GI_400) ? "400" : "800" )); +- } +- +- // HT Operation Mode : Mixed Mode , Green Field +- if (RTMPGetKeyParameter("HT_OpMode", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == HTMODE_GF) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_GF; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.HTMODE = HTMODE_MM; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Operate Mode = %s\n", (Value==HTMODE_GF) ? "Green Field" : "Mixed Mode" )); +- } +- +- // Fixed Tx mode : CCK, OFDM +- if (RTMPGetKeyParameter("FixedTxMode", pValueStr, 25, pInput, TRUE)) +- { +- UCHAR fix_tx_mode; +- +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- +- if (strcmp(pValueStr, "OFDM") == 0 || strcmp(pValueStr, "ofdm") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_OFDM; +- } +- else if (strcmp(pValueStr, "CCK") == 0 || strcmp(pValueStr, "cck") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_CCK; +- } +- else if (strcmp(pValueStr, "HT") == 0 || strcmp(pValueStr, "ht") == 0) +- { +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- else +- { +- Value = simple_strtol(pValueStr, 0, 10); +- // 1 : CCK +- // 2 : OFDM +- // otherwise : HT +- if (Value == FIXED_TXMODE_CCK || Value == FIXED_TXMODE_OFDM) +- fix_tx_mode = Value; +- else +- fix_tx_mode = FIXED_TXMODE_HT; +- } +- +- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode; +- DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", fix_tx_mode)); +- +- } +- } +- +- +- // Channel Width +- if (RTMPGetKeyParameter("HT_BW", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == BW_40) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" )); +- } +- +- if (RTMPGetKeyParameter("HT_EXTCHA", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == 0) +- { +- +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Ext Channel = %s\n", (Value==0) ? "BELOW" : "ABOVE" )); +- } +- +- // MSC +- if (RTMPGetKeyParameter("HT_MCS", pValueStr, 50, pInput, TRUE)) +- { +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +-// if ((Value >= 0 && Value <= 15) || (Value == 32)) +- if ((Value >= 0 && Value <= 23) || (Value == 32)) // 3*3 +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = Value; +- pAd->StaCfg.bAutoTxRateSwitch = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = %d\n", pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- } +- else +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- pAd->StaCfg.bAutoTxRateSwitch = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n")); +- } +- } +- } +- +- // STBC +- if (RTMPGetKeyParameter("HT_STBC", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == STBC_USE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_USE; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.STBC = STBC_NONE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: STBC = %d\n", pAd->CommonCfg.RegTransmitSetting.field.STBC)); +- } +- +- // 40_Mhz_Intolerant +- if (RTMPGetKeyParameter("HT_40MHZ_INTOLERANT", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = FALSE; +- } +- else +- { +- pAd->CommonCfg.bForty_Mhz_Intolerant = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: 40MHZ INTOLERANT = %d\n", pAd->CommonCfg.bForty_Mhz_Intolerant)); +- } +- //HT_TxStream +- if(RTMPGetKeyParameter("HT_TxStream", pValueStr, 10, pInput, TRUE)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.TxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.TxStream = 2; +- break; +- case 3: // 3*3 +- default: +- pAd->CommonCfg.TxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.TxStream = 2; // only 2 tx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx Stream = %d\n", pAd->CommonCfg.TxStream)); +- } +- //HT_RxStream +- if(RTMPGetKeyParameter("HT_RxStream", pValueStr, 10, pInput, TRUE)) +- { +- switch (simple_strtol(pValueStr, 0, 10)) +- { +- case 1: +- pAd->CommonCfg.RxStream = 1; +- break; +- case 2: +- pAd->CommonCfg.RxStream = 2; +- break; +- case 3: +- default: +- pAd->CommonCfg.RxStream = 3; +- +- if (pAd->MACVersion < RALINK_2883_VERSION) +- pAd->CommonCfg.RxStream = 2; // only 2 rx streams for RT2860 series +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Rx Stream = %d\n", pAd->CommonCfg.RxStream)); +- } +- //2008/11/05: KH add to support Antenna power-saving of AP<-- +- //Green AP +- if(RTMPGetKeyParameter("GreenAP", pValueStr, 10, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- if (Value == 0) +- { +- pAd->CommonCfg.bGreenAPEnable = FALSE; +- } +- else +- { +- pAd->CommonCfg.bGreenAPEnable = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Green AP= %d\n", pAd->CommonCfg.bGreenAPEnable)); +- } +- +- // HT_DisallowTKIP +- if (RTMPGetKeyParameter("HT_DisallowTKIP", pValueStr, 25, pInput, TRUE)) +- { +- Value = simple_strtol(pValueStr, 0, 10); +- +- if (Value == 1) +- { +- pAd->CommonCfg.HT_DisallowTKIP = TRUE; +- } +- else +- { +- pAd->CommonCfg.HT_DisallowTKIP = FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("HT: Disallow TKIP mode = %s\n", (pAd->CommonCfg.HT_DisallowTKIP == TRUE) ? "ON" : "OFF" )); +- } +- +- +- //2008/11/05:KH add to support Antenna power-saving of AP--> +-} +- +- +-NDIS_STATUS RTMPSetProfileParameters( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING pBuffer) +-{ +- PSTRING tmpbuf; +- ULONG RtsThresh; +- ULONG FragThresh; +- PSTRING macptr; +- INT i = 0, retval; +- tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG); +- if(tmpbuf == NULL) +- return NDIS_STATUS_FAILURE; +- +- do +- { +- // set file parameter to portcfg +- //CountryRegion +- if(RTMPGetKeyParameter("CountryRegion", tmpbuf, 25, pBuffer, TRUE)) +- { +- retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_24G); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegion=%d\n", pAd->CommonCfg.CountryRegion)); +- } +- //CountryRegionABand +- if(RTMPGetKeyParameter("CountryRegionABand", tmpbuf, 25, pBuffer, TRUE)) +- { +- retval = RT_CfgSetCountryRegion(pAd, tmpbuf, BAND_5G); +- DBGPRINT(RT_DEBUG_TRACE, ("CountryRegionABand=%d\n", pAd->CommonCfg.CountryRegionForABand)); +- } +- //CountryCode +- if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, pBuffer, TRUE)) +- { +- NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2); +- if (strlen((PSTRING) pAd->CommonCfg.CountryCode) != 0) +- { +- pAd->CommonCfg.bCountryFlag = TRUE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("CountryCode=%s\n", pAd->CommonCfg.CountryCode)); +- } +- //ChannelGeography +- if(RTMPGetKeyParameter("ChannelGeography", tmpbuf, 25, pBuffer, TRUE)) +- { +- UCHAR Geography = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- if (Geography <= BOTH) +- { +- pAd->CommonCfg.Geography = Geography; +- pAd->CommonCfg.CountryCode[2] = +- (pAd->CommonCfg.Geography == BOTH) ? ' ' : ((pAd->CommonCfg.Geography == IDOR) ? 'I' : 'O'); +- DBGPRINT(RT_DEBUG_TRACE, ("ChannelGeography=%d\n", pAd->CommonCfg.Geography)); +- } +- } +- else +- { +- pAd->CommonCfg.Geography = BOTH; +- pAd->CommonCfg.CountryCode[2] = ' '; +- } +- +- { +- //SSID +- if (RTMPGetKeyParameter("SSID", tmpbuf, 256, pBuffer, FALSE)) +- { +- if (strlen(tmpbuf) <= 32) +- { +- pAd->CommonCfg.SsidLen = (UCHAR) strlen(tmpbuf); +- NdisZeroMemory(pAd->CommonCfg.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->CommonCfg.Ssid, tmpbuf, pAd->CommonCfg.SsidLen); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, tmpbuf, pAd->MlmeAux.AutoReconnectSsidLen); +- pAd->MlmeAux.SsidLen = pAd->CommonCfg.SsidLen; +- NdisZeroMemory(pAd->MlmeAux.Ssid, NDIS_802_11_LENGTH_SSID); +- NdisMoveMemory(pAd->MlmeAux.Ssid, tmpbuf, pAd->MlmeAux.SsidLen); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(SSID=%s)\n", __func__, tmpbuf)); +- } +- } +- } +- +- { +- //NetworkType +- if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, pBuffer, TRUE)) +- { +- pAd->bConfigChanged = TRUE; +- if (strcmp(tmpbuf, "Adhoc") == 0) +- pAd->StaCfg.BssType = BSS_ADHOC; +- else //Default Infrastructure mode +- pAd->StaCfg.BssType = BSS_INFRA; +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAd->StaCfg.WpaState = SS_NOTUSE; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __func__, pAd->StaCfg.BssType)); +- } +- } +-#ifdef RTMP_MAC_PCI +- //NewPCIePS +- if(RTMPGetKeyParameter("NewPCIePS", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; +- else +- pAd->StaCfg.PSControl.field.EnableNewPS=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("NewPCIePS=%d\n", pAd->StaCfg.PSControl.field.EnableNewPS)); +- } +-#endif // RTMP_MAC_PCI // +-#ifdef RT3090 +- //PCIePowerLevel +- +- if(RTMPGetKeyParameter("PCIePowerLevel", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->StaCfg.PSControl.field.rt30xxPowerMode = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("PCIePowerLevel=%d\n", pAd->StaCfg.PSControl.field.rt30xxPowerMode)); +- } +- //FollowHostASPM +- if(RTMPGetKeyParameter("FollowHostASPM", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=TRUE; +- else +- pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("rt30xxFollowHostASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM)); +- } +- //ForceTestASPM +- if(RTMPGetKeyParameter("ForceTestASPM", tmpbuf, 10, pBuffer, TRUE)) +- { +- UCHAR temp_buffer = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- +- if(temp_buffer>0) +- pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=TRUE; +- else +- pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("rt30xxForceASPM=%d\n", pAd->StaCfg.PSControl.field.rt30xxForceASPMTest)); +- } +-#endif // RT3090 // +- //Channel +- if(RTMPGetKeyParameter("Channel", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.Channel = (UCHAR) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("Channel=%d\n", pAd->CommonCfg.Channel)); +- } +- //WirelessMode +- if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, pBuffer, TRUE)) +- { +- RT_CfgSetWirelessMode(pAd, tmpbuf); +- DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode)); +- } +- //BasicRate +- if(RTMPGetKeyParameter("BasicRate", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.BasicRateBitmap = (ULONG) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BasicRate=%ld\n", pAd->CommonCfg.BasicRateBitmap)); +- } +- //BeaconPeriod +- if(RTMPGetKeyParameter("BeaconPeriod", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.BeaconPeriod = (USHORT) simple_strtol(tmpbuf, 0, 10); +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconPeriod=%d\n", pAd->CommonCfg.BeaconPeriod)); +- } +- //TxPower +- if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, pBuffer, TRUE)) +- { +- pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10); +- pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage; +- DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage)); +- } +- //BGProtection +- if(RTMPGetKeyParameter("BGProtection", tmpbuf, 10, pBuffer, TRUE)) +- { +- //#if 0 //#ifndef WIFI_TEST +- // pAd->CommonCfg.UseBGProtection = 2;// disable b/g protection for throughput test +- //#else +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //Always On +- pAd->CommonCfg.UseBGProtection = 1; +- break; +- case 2: //Always OFF +- pAd->CommonCfg.UseBGProtection = 2; +- break; +- case 0: //AUTO +- default: +- pAd->CommonCfg.UseBGProtection = 0; +- break; +- } +- //#endif +- DBGPRINT(RT_DEBUG_TRACE, ("BGProtection=%ld\n", pAd->CommonCfg.UseBGProtection)); +- } +- //OLBCDetection +- if(RTMPGetKeyParameter("DisableOLBC", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //disable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 1; +- break; +- case 0: //enable OLBC Detection +- pAd->CommonCfg.DisableOLBCDetect = 0; +- break; +- default: +- pAd->CommonCfg.DisableOLBCDetect= 0; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("OLBCDetection=%ld\n", pAd->CommonCfg.DisableOLBCDetect)); +- } +- //TxPreamble +- if(RTMPGetKeyParameter("TxPreamble", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case Rt802_11PreambleShort: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleShort; +- break; +- case Rt802_11PreambleLong: +- default: +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleLong; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("TxPreamble=%ld\n", pAd->CommonCfg.TxPreamble)); +- } +- //RTSThreshold +- if(RTMPGetKeyParameter("RTSThreshold", tmpbuf, 10, pBuffer, TRUE)) +- { +- RtsThresh = simple_strtol(tmpbuf, 0, 10); +- if( (RtsThresh >= 1) && (RtsThresh <= MAX_RTS_THRESHOLD) ) +- pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh; +- else +- pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTSThreshold=%d\n", pAd->CommonCfg.RtsThreshold)); +- } +- //FragThreshold +- if(RTMPGetKeyParameter("FragThreshold", tmpbuf, 10, pBuffer, TRUE)) +- { +- FragThresh = simple_strtol(tmpbuf, 0, 10); +- pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; +- +- if (FragThresh > MAX_FRAG_THRESHOLD || FragThresh < MIN_FRAG_THRESHOLD) +- { //illegal FragThresh so we set it to default +- pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD; +- pAd->CommonCfg.bUseZeroToDisableFragment = TRUE; +- } +- else if (FragThresh % 2 == 1) +- { +- // The length of each fragment shall always be an even number of octets, except for the last fragment +- // of an MSDU or MMPDU, which may be either an even or an odd number of octets. +- pAd->CommonCfg.FragmentThreshold = (USHORT)(FragThresh - 1); +- } +- else +- { +- pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh; +- } +- //pAd->CommonCfg.AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; +- DBGPRINT(RT_DEBUG_TRACE, ("FragThreshold=%d\n", pAd->CommonCfg.FragmentThreshold)); +- } +- //TxBurst +- if(RTMPGetKeyParameter("TxBurst", tmpbuf, 10, pBuffer, TRUE)) +- { +- //#ifdef WIFI_TEST +- // pAd->CommonCfg.bEnableTxBurst = FALSE; +- //#else +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bEnableTxBurst = TRUE; +- else //Disable +- pAd->CommonCfg.bEnableTxBurst = FALSE; +- //#endif +- DBGPRINT(RT_DEBUG_TRACE, ("TxBurst=%d\n", pAd->CommonCfg.bEnableTxBurst)); +- } +- +-#ifdef AGGREGATION_SUPPORT +- //PktAggregate +- if(RTMPGetKeyParameter("PktAggregate", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable +- pAd->CommonCfg.bAggregationCapable = TRUE; +- else //Disable +- pAd->CommonCfg.bAggregationCapable = FALSE; +-#ifdef PIGGYBACK_SUPPORT +- pAd->CommonCfg.bPiggyBackCapable = pAd->CommonCfg.bAggregationCapable; +-#endif // PIGGYBACK_SUPPORT // +- DBGPRINT(RT_DEBUG_TRACE, ("PktAggregate=%d\n", pAd->CommonCfg.bAggregationCapable)); +- } +-#else +- pAd->CommonCfg.bAggregationCapable = FALSE; +- pAd->CommonCfg.bPiggyBackCapable = FALSE; +-#endif // AGGREGATION_SUPPORT // +- +- // WmmCapable +- +- rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, pBuffer); +- +- //ShortSlot +- if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, pBuffer, TRUE)) +- { +- RT_CfgSetShortSlot(pAd, tmpbuf); +- DBGPRINT(RT_DEBUG_TRACE, ("ShortSlot=%d\n", pAd->CommonCfg.bUseShortSlotTime)); +- } +- //IEEE80211H +- if(RTMPGetKeyParameter("IEEE80211H", tmpbuf, 10, pBuffer, TRUE)) +- { +- for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++) +- { +- if(simple_strtol(macptr, 0, 10) != 0) //Enable +- pAd->CommonCfg.bIEEE80211H = TRUE; +- else //Disable +- pAd->CommonCfg.bIEEE80211H = FALSE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("IEEE80211H=%d\n", pAd->CommonCfg.bIEEE80211H)); +- } +- } +- //CSPeriod +- if(RTMPGetKeyParameter("CSPeriod", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.RadarDetect.CSPeriod = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.RadarDetect.CSPeriod = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CSPeriod=%d\n", pAd->CommonCfg.RadarDetect.CSPeriod)); +- } +- +- //RDRegion +- if(RTMPGetKeyParameter("RDRegion", tmpbuf, 128, pBuffer, TRUE)) +- { +- RADAR_DETECT_STRUCT *pRadarDetect = &pAd->CommonCfg.RadarDetect; +- if ((strncmp(tmpbuf, "JAP_W53", 7) == 0) || (strncmp(tmpbuf, "jap_w53", 7) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP_W53; +- pRadarDetect->DfsSessionTime = 15; +- } +- else if ((strncmp(tmpbuf, "JAP_W56", 7) == 0) || (strncmp(tmpbuf, "jap_w56", 7) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP_W56; +- pRadarDetect->DfsSessionTime = 13; +- } +- else if ((strncmp(tmpbuf, "JAP", 3) == 0) || (strncmp(tmpbuf, "jap", 3) == 0)) +- { +- pRadarDetect->RDDurRegion = JAP; +- pRadarDetect->DfsSessionTime = 5; +- } +- else if ((strncmp(tmpbuf, "FCC", 3) == 0) || (strncmp(tmpbuf, "fcc", 3) == 0)) +- { +- pRadarDetect->RDDurRegion = FCC; +- pRadarDetect->DfsSessionTime = 5; +- } +- else if ((strncmp(tmpbuf, "CE", 2) == 0) || (strncmp(tmpbuf, "ce", 2) == 0)) +- { +- pRadarDetect->RDDurRegion = CE; +- pRadarDetect->DfsSessionTime = 13; +- } +- else +- { +- pRadarDetect->RDDurRegion = CE; +- pRadarDetect->DfsSessionTime = 13; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("RDRegion=%d\n", pRadarDetect->RDDurRegion)); +- } +- else +- { +- pAd->CommonCfg.RadarDetect.RDDurRegion = CE; +- pAd->CommonCfg.RadarDetect.DfsSessionTime = 13; +- } +- +- //WirelessEvent +- if(RTMPGetKeyParameter("WirelessEvent", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWirelessEvent = simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWirelessEvent = 0; // disable +- DBGPRINT(RT_DEBUG_TRACE, ("WirelessEvent=%d\n", pAd->CommonCfg.bWirelessEvent)); +- } +- if(RTMPGetKeyParameter("WiFiTest", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) != 0) +- pAd->CommonCfg.bWiFiTest= simple_strtol(tmpbuf, 0, 10); +- else +- pAd->CommonCfg.bWiFiTest = 0; // disable +- +- DBGPRINT(RT_DEBUG_TRACE, ("WiFiTest=%d\n", pAd->CommonCfg.bWiFiTest)); +- } +- //AuthMode +- if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, pBuffer, TRUE)) +- { +- { +- if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch; +- else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +- else if ((strcmp(tmpbuf, "WPA") == 0) || (strcmp(tmpbuf, "wpa") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0)) +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +- else +- pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(AuthMode=%d)\n", __func__, pAd->StaCfg.AuthMode)); +- } +- } +- //EncrypType +- if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, pBuffer, TRUE)) +- { +- { +- if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- else if ((strcmp(tmpbuf, "TKIP") == 0) || (strcmp(tmpbuf, "tkip") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- else if ((strcmp(tmpbuf, "AES") == 0) || (strcmp(tmpbuf, "aes") == 0)) +- pAd->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- else +- pAd->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- +- // Update all wepstatus related +- pAd->StaCfg.PairCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.GroupCipher = pAd->StaCfg.WepStatus; +- pAd->StaCfg.OrigWepStatus = pAd->StaCfg.WepStatus; +- pAd->StaCfg.bMixCipher = FALSE; +- +- //RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus)); +- } +- } +- +- { +- if(RTMPGetKeyParameter("WPAPSK", tmpbuf, 512, pBuffer, FALSE)) +- { +- int ret = TRUE; +- +- tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input +- +- if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) +- ) +- { +- ret = FALSE; +- } +- else +- { +- ret = RT_CfgSetWPAPSKKey(pAd, tmpbuf, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->StaCfg.PMK); +- } +- +- if (ret == TRUE) +- { +- RTMPZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +- RTMPMoveMemory(pAd->StaCfg.WpaPassPhrase, tmpbuf, strlen(tmpbuf)); +- pAd->StaCfg.WpaPassPhraseLen= strlen(tmpbuf); +- +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- // Start STA supplicant state machine +- pAd->StaCfg.WpaState = SS_START; +- } +- else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- pAd->StaCfg.WpaState = SS_NOTUSE; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __func__, tmpbuf)); +- } +- } +- } +- +- //DefaultKeyID, KeyType, KeyStr +- rtmp_read_key_parms_from_file(pAd, tmpbuf, pBuffer); +- +- +- //HSCounter +- /*if(RTMPGetKeyParameter("HSCounter", tmpbuf, 10, pBuffer, TRUE)) +- { +- switch (simple_strtol(tmpbuf, 0, 10)) +- { +- case 1: //Enable +- pAd->CommonCfg.bEnableHSCounter = TRUE; +- break; +- case 0: //Disable +- default: +- pAd->CommonCfg.bEnableHSCounter = FALSE; +- break; +- } +- DBGPRINT(RT_DEBUG_TRACE, "HSCounter=%d\n", pAd->CommonCfg.bEnableHSCounter); +- }*/ +- +- HTParametersHook(pAd, tmpbuf, pBuffer); +- +- { +- //PSMode +- if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, pBuffer, TRUE)) +- { +- if (pAd->StaCfg.BssType == BSS_INFRA) +- { +- if ((strcmp(tmpbuf, "MAX_PSP") == 0) || (strcmp(tmpbuf, "max_psp") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // MlmeSetPsm(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeMAX_PSP; +- pAd->StaCfg.DefaultListenCount = 5; +- } +- else if ((strcmp(tmpbuf, "Fast_PSP") == 0) || (strcmp(tmpbuf, "fast_psp") == 0) +- || (strcmp(tmpbuf, "FAST_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeFast_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else if ((strcmp(tmpbuf, "Legacy_PSP") == 0) || (strcmp(tmpbuf, "legacy_psp") == 0) +- || (strcmp(tmpbuf, "LEGACY_PSP") == 0)) +- { +- // do NOT turn on PSM bit here, wait until MlmeCheckForPsmChange() +- // to exclude certain situations. +- // RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeLegacy_PSP; +- pAd->StaCfg.DefaultListenCount = 3; +- } +- else +- { //Default Ndis802_11PowerModeCAM +- // clear PSM bit immediately +- RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); +- if (pAd->StaCfg.bWindowsACCAMEnable == FALSE) +- pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; +- pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("PSMode=%ld\n", pAd->StaCfg.WindowsPowerMode)); +- } +- } +- // AutoRoaming by RSSI +- if (RTMPGetKeyParameter("AutoRoaming", tmpbuf, 32, pBuffer, TRUE)) +- { +- if (simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bAutoRoaming = FALSE; +- else +- pAd->StaCfg.bAutoRoaming = TRUE; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AutoRoaming=%d\n", pAd->StaCfg.bAutoRoaming)); +- } +- // RoamThreshold +- if (RTMPGetKeyParameter("RoamThreshold", tmpbuf, 32, pBuffer, TRUE)) +- { +- long lInfo = simple_strtol(tmpbuf, 0, 10); +- +- if (lInfo > 90 || lInfo < 60) +- pAd->StaCfg.dBmToRoam = -70; +- else +- pAd->StaCfg.dBmToRoam = (CHAR)(-1)*lInfo; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RoamThreshold=%d dBm\n", pAd->StaCfg.dBmToRoam)); +- } +- +- if(RTMPGetKeyParameter("TGnWifiTest", tmpbuf, 10, pBuffer, TRUE)) +- { +- if(simple_strtol(tmpbuf, 0, 10) == 0) +- pAd->StaCfg.bTGnWifiTest = FALSE; +- else +- pAd->StaCfg.bTGnWifiTest = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest)); +- } +- +- // Beacon Lost Time +- if (RTMPGetKeyParameter("BeaconLostTime", tmpbuf, 32, pBuffer, TRUE)) +- { +- ULONG lInfo = (ULONG)simple_strtol(tmpbuf, 0, 10); +- +- if ((lInfo != 0) && (lInfo <= 60)) +- pAd->StaCfg.BeaconLostTime = (lInfo * OS_HZ); +- DBGPRINT(RT_DEBUG_TRACE, ("BeaconLostTime=%ld \n", pAd->StaCfg.BeaconLostTime)); +- } +- +- +- } +- +- +- +- +- }while(0); +- +- +- kfree(tmpbuf); +- +- return NDIS_STATUS_SUCCESS; +- +-} +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index c43c8ea..d213387 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -2451,17 +2451,6 @@ NDIS_STATUS RTMPAllocAdapterBlock( + NDIS_STATUS RTMPAllocTxRxRingMemory( + IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RTMPSetProfileParameters( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING pBuffer); +- +-INT RTMPGetKeyParameter( +- IN PSTRING key, +- OUT PSTRING dest, +- IN INT destsize, +- IN PSTRING buffer, +- IN BOOLEAN bTrimSpace); +- + VOID RTMPFreeAdapter( + IN PRTMP_ADAPTER pAd); + +@@ -4628,33 +4617,10 @@ VOID BARecSessionTearDown( + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); + void ba_reordering_resource_release(PRTMP_ADAPTER pAd); + +- +- +- +-BOOLEAN rtstrmactohex( +- IN PSTRING s1, +- IN PSTRING s2); +- +-BOOLEAN rtstrcasecmp( +- IN PSTRING s1, +- IN PSTRING s2); +- +-PSTRING rtstrstruncasecmp( +- IN PSTRING s1, +- IN PSTRING s2); +- +-PSTRING rtstrstr( +- IN const PSTRING s1, +- IN const PSTRING s2); +- + PSTRING rstrtok( + IN PSTRING s, + IN const PSTRING ct); + +-int rtinet_aton( +- const PSTRING cp, +- unsigned int *addr); +- + ////////// common ioctl functions ////////// + INT SetCommonHT( + IN PRTMP_ADAPTER pAd); +diff --git a/drivers/staging/rt2870/Makefile b/drivers/staging/rt2870/Makefile +index 92668eb..523e7e7 100644 +--- a/drivers/staging/rt2870/Makefile ++++ b/drivers/staging/rt2870/Makefile +@@ -28,7 +28,6 @@ rt2870sta-objs := \ + common/spectrum.o \ + common/rtmp_timer.o \ + common/rt_channel.o \ +- common/cmm_profile.o \ + common/cmm_asic.o \ + sta/assoc.o \ + sta/auth.o \ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch b/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch new file mode 100644 index 000000000..3787b0d9b --- /dev/null +++ b/debian/patches/features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch @@ -0,0 +1,77 @@ +From a0320664481bcaff11aa238dcbce4518b015cfb8 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:44:55 +0200 +Subject: [PATCH 14/42] Staging: rt28x0: remove dead code from rtmp_phy.h + +commit 46ff62398cdabb87522c0564d1ebfa397132abe4 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chip/rtmp_phy.h | 28 +--------------------------- + 1 files changed, 1 insertions(+), 27 deletions(-) + +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index e2b90a1..36f438b 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -278,18 +278,6 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ +-#if 0 +-#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ +- do{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- if ((_A)->infType == RTMP_DEV_INF_RBUS) \ +- RTMP_BBP_IO_READ8((_A), (_I), (_pV), FALSE); \ +- else \ +- RTMP_BBP_IO_READ8((_A), (_I), (_pV), TRUE); \ +- } \ +- }while(0) +-#else + // Read BBP register by register's ID. Generate PER to test BA + #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ + { \ +@@ -381,7 +369,6 @@ + *(_pV) = (_A)->BbpWriteLatch[_I]; \ + } \ + } +-#endif // 0 // + + /* + basic marco for BBP write operation. +@@ -441,18 +428,6 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ +-#if 0 +-#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _pV) \ +- do{ \ +- if ((_A)->bPCIclkOff == FALSE) \ +- { \ +- if ((_A)->infType == RTMP_DEV_INF_RBUS) \ +- RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), FALSE); \ +- else \ +- RTMP_BBP_IO_WRITE8((_A), (_I), (_pV), TRUE); \ +- } \ +- }while(0) +-#else + // Write BBP register by register's ID & value + #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ + { \ +@@ -538,9 +513,8 @@ + DBGPRINT_ERR(("****** BBP_Write_Latch Buffer exceeds max boundry ****** \n")); \ + } \ + } +-#endif // 0 // +- + #endif // RTMP_MAC_PCI // ++ + #ifdef RTMP_MAC_USB + #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) + #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch b/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch new file mode 100644 index 000000000..1e464fd0a --- /dev/null +++ b/debian/patches/features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch @@ -0,0 +1,358 @@ +From 90a74c98d8173bc0fdbfb4e852d8c946119d25c8 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:45:02 +0200 +Subject: [PATCH 15/42] Staging: rt28x0: remove unused SHA256 code + +commit ef3e746815954ada673fab6545679e7418d1b1d3 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/crypt_sha2.c | 257 ---------------------------- + drivers/staging/rt2860/crypt_hmac.h | 11 -- + drivers/staging/rt2860/crypt_sha2.h | 28 --- + 3 files changed, 0 insertions(+), 296 deletions(-) + +diff --git a/drivers/staging/rt2860/common/crypt_sha2.c b/drivers/staging/rt2860/common/crypt_sha2.c +index cb3f7c2..d4b2396 100644 +--- a/drivers/staging/rt2860/common/crypt_sha2.c ++++ b/drivers/staging/rt2860/common/crypt_sha2.c +@@ -47,42 +47,7 @@ static const UINT32 SHA1_K[4] = { + static const UINT32 SHA1_DefaultHashValue[5] = { + 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL + }; +-#endif /* SHA1_SUPPORT */ +- +- +-#ifdef SHA256_SUPPORT +-/* SHA256 functions */ +-#define Zsigma_256_0(x) (ROTR32(x,2) ^ ROTR32(x,13) ^ ROTR32(x,22)) +-#define Zsigma_256_1(x) (ROTR32(x,6) ^ ROTR32(x,11) ^ ROTR32(x,25)) +-#define Sigma_256_0(x) (ROTR32(x,7) ^ ROTR32(x,18) ^ SHR(x,3)) +-#define Sigma_256_1(x) (ROTR32(x,17) ^ ROTR32(x,19) ^ SHR(x,10)) +-/* SHA256 constants */ +-static const UINT32 SHA256_K[64] = { +- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, +- 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, +- 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, +- 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, +- 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, +- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, +- 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, +- 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, +- 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, +- 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, +- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, +- 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, +- 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, +- 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, +- 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, +- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +-}; +-static const UINT32 SHA256_DefaultHashValue[8] = { +- 0x6a09e667UL, 0xbb67ae85UL, 0x3c6ef372UL, 0xa54ff53aUL, +- 0x510e527fUL, 0x9b05688cUL, 0x1f83d9abUL, 0x5be0cd19UL +-}; +-#endif /* SHA256_SUPPORT */ + +- +-#ifdef SHA1_SUPPORT + /* + ======================================================================== + Routine Description: +@@ -310,226 +275,4 @@ VOID RT_SHA1 ( + } /* End of RT_SHA1 */ + #endif /* SHA1_SUPPORT */ + +- +-#ifdef SHA256_SUPPORT +-/* +-======================================================================== +-Routine Description: +- Initial SHA256_CTX_STRUC +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Init ( +- IN SHA256_CTX_STRUC *pSHA_CTX) +-{ +- NdisMoveMemory(pSHA_CTX->HashValue, SHA256_DefaultHashValue, +- sizeof(SHA256_DefaultHashValue)); +- NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- pSHA_CTX->MessageLen = 0; +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA256_Init */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA256 computation for one block (512 bits) +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Hash ( +- IN SHA256_CTX_STRUC *pSHA_CTX) +-{ +- UINT32 W_i,t; +- UINT32 W[64]; +- UINT32 a,b,c,d,e,f,g,h,T1,T2; +- +- /* Prepare the message schedule, {W_i}, 0 < t < 15 */ +- NdisMoveMemory(W, pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- for (W_i = 0; W_i < 16; W_i++) +- W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ +- /* End of for */ +- +- /* SHA256 hash computation */ +- /* Initialize the working variables */ +- a = pSHA_CTX->HashValue[0]; +- b = pSHA_CTX->HashValue[1]; +- c = pSHA_CTX->HashValue[2]; +- d = pSHA_CTX->HashValue[3]; +- e = pSHA_CTX->HashValue[4]; +- f = pSHA_CTX->HashValue[5]; +- g = pSHA_CTX->HashValue[6]; +- h = pSHA_CTX->HashValue[7]; +- +- /* 64 rounds */ +- for (t = 0;t < 64;t++) { +- if (t > 15) /* Prepare the message schedule, {W_i}, 16 < t < 63 */ +- W[t] = Sigma_256_1(W[t-2]) + W[t-7] + Sigma_256_0(W[t-15]) + W[t-16]; +- /* End of if */ +- T1 = h + Zsigma_256_1(e) + Ch(e,f,g) + SHA256_K[t] + W[t]; +- T2 = Zsigma_256_0(a) + Maj(a,b,c); +- h = g; +- g = f; +- f = e; +- e = d + T1; +- d = c; +- c = b; +- b = a; +- a = T1 + T2; +- } /* End of for */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pSHA_CTX->HashValue[0] += a; +- pSHA_CTX->HashValue[1] += b; +- pSHA_CTX->HashValue[2] += c; +- pSHA_CTX->HashValue[3] += d; +- pSHA_CTX->HashValue[4] += e; +- pSHA_CTX->HashValue[5] += f; +- pSHA_CTX->HashValue[6] += g; +- pSHA_CTX->HashValue[7] += h; +- +- NdisZeroMemory(pSHA_CTX->Block, SHA256_BLOCK_SIZE); +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA256_Hash */ +- +- +-/* +-======================================================================== +-Routine Description: +- The message is appended to block. If block size > 64 bytes, the SHA256_Hash +-will be called. +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- None +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_Append ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) +-{ +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pSHA_CTX->BlockLen + diffLen) < SHA256_BLOCK_SIZE) { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, diffLen); +- pSHA_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); +- appendLen += (SHA256_BLOCK_SIZE - pSHA_CTX->BlockLen); +- pSHA_CTX->BlockLen = SHA256_BLOCK_SIZE; +- SHA256_Hash(pSHA_CTX); +- } /* End of if */ +- } /* End of while */ +- pSHA_CTX->MessageLen += MessageLen; +-} /* End of SHA256_Append */ +- +- +-/* +-======================================================================== +-Routine Description: +- 1. Append bit 1 to end of the message +- 2. Append the length of message in rightmost 64 bits +- 3. Transform the Hash Value to digest message +- +-Arguments: +- pSHA_CTX Pointer to SHA256_CTX_STRUC +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID SHA256_End ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]) +-{ +- UINT index; +- UINT64 message_length_bits; +- +- /* Append bit 1 to end of the message */ +- NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pSHA_CTX->BlockLen > 55) +- SHA256_Hash(pSHA_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pSHA_CTX->MessageLen*8; +- message_length_bits = cpu2be64(message_length_bits); +- NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); +- SHA256_Hash(pSHA_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 8;index++) +- pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA256_DIGEST_SIZE); +-} /* End of SHA256_End */ +- +- +-/* +-======================================================================== +-Routine Description: +- SHA256 algorithm +- +-Arguments: +- message Message context +- messageLen The length of message in bytes +- +-Return Value: +- digestMessage Digest message +- +-Note: +- None +-======================================================================== +-*/ +-VOID RT_SHA256 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) +-{ +- SHA256_CTX_STRUC sha_ctx; +- +- NdisZeroMemory(&sha_ctx, sizeof(SHA256_CTX_STRUC)); +- SHA256_Init(&sha_ctx); +- SHA256_Append(&sha_ctx, Message, MessageLen); +- SHA256_End(&sha_ctx, DigestMessage); +-} /* End of RT_SHA256 */ +-#endif /* SHA256_SUPPORT */ +- + /* End of crypt_sha2.c */ +diff --git a/drivers/staging/rt2860/crypt_hmac.h b/drivers/staging/rt2860/crypt_hmac.h +index 9314ff7..717b8a2 100644 +--- a/drivers/staging/rt2860/crypt_hmac.h ++++ b/drivers/staging/rt2860/crypt_hmac.h +@@ -57,17 +57,6 @@ VOID HMAC_SHA1 ( + IN UINT MACLen); + #endif /* SHA1_SUPPORT */ + +-#ifdef SHA256_SUPPORT +-#define HMAC_SHA256_SUPPORT +-VOID HMAC_SHA256 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); +-#endif /* SHA256_SUPPORT */ +- + #ifdef MD5_SUPPORT + #define HMAC_MD5_SUPPORT + VOID HMAC_MD5 ( +diff --git a/drivers/staging/rt2860/crypt_sha2.h b/drivers/staging/rt2860/crypt_sha2.h +index 055efb1..5b95965 100644 +--- a/drivers/staging/rt2860/crypt_sha2.h ++++ b/drivers/staging/rt2860/crypt_sha2.h +@@ -50,7 +50,6 @@ + + /* Algorithm options */ + #define SHA1_SUPPORT +-#define SHA256_SUPPORT + + #ifdef SHA1_SUPPORT + #define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +@@ -79,31 +78,4 @@ VOID RT_SHA1 ( + OUT UINT8 DigestMessage[]); + #endif /* SHA1_SUPPORT */ + +-#ifdef SHA256_SUPPORT +-#define SHA256_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define SHA256_DIGEST_SIZE 32 /* 256 bits = 32 bytes */ +-typedef struct _SHA256_CTX_STRUC { +- UINT32 HashValue[8]; /* 8 = (SHA256_DIGEST_SIZE / 32) */ +- UINT64 MessageLen; /* total size */ +- UINT8 Block[SHA256_BLOCK_SIZE]; +- UINT BlockLen; +-} SHA256_CTX_STRUC, *PSHA256_CTX_STRUC; +- +-VOID SHA256_Init ( +- IN SHA256_CTX_STRUC *pSHA_CTX); +-VOID SHA256_Hash ( +- IN SHA256_CTX_STRUC *pSHA_CTX); +-VOID SHA256_Append ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID SHA256_End ( +- IN SHA256_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_SHA256 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); +-#endif /* SHA256_SUPPORT */ +- + #endif /* __CRYPT_SHA2_H__ */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch b/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch new file mode 100644 index 000000000..a6d4f4685 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch @@ -0,0 +1,152 @@ +From e84beefedf58e615983a84621af3d47301e45835 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Wed, 21 Oct 2009 22:45:09 +0200 +Subject: [PATCH 16/42] Staging: rt28x0: remove dead code + +commit 5a1322317abff17a6cdaf53bd33a4102d456ec23 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/oid.h | 19 ------------------- + drivers/staging/rt2860/rt_config.h | 8 -------- + drivers/staging/rt2860/rt_linux.h | 10 ---------- + drivers/staging/rt2860/rtmp.h | 13 ------------- + drivers/staging/rt2860/rtmp_def.h | 9 --------- + 5 files changed, 0 insertions(+), 59 deletions(-) + +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index a03293c..f3fb5ff 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -502,19 +502,6 @@ typedef struct _NDIS_802_11_AUTHENTICATION_EVENT + NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; + } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; + +-/* +-typedef struct _NDIS_802_11_TEST +-{ +- ULONG Length; +- ULONG Type; +- union +- { +- NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent; +- NDIS_802_11_RSSI RssiTrigger; +- }; +-} NDIS_802_11_TEST, *PNDIS_802_11_TEST; +- */ +- + // 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE + typedef enum _NDIS_802_11_MEDIA_STREAM_MODE + { +@@ -553,10 +540,6 @@ typedef struct _NDIS_802_11_CAPABILITY + NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1]; + } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; + +-#ifdef LINUX +-#endif // LINUX // +- +- + #define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon + #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) + +@@ -593,8 +576,6 @@ enum { + #define OID_802_11_GET_COUNTRY_CODE 0x0716 + #define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717 + +-//#define RT_OID_802_11_STATISTICS (OID_GET_SET_TOGGLE | OID_802_11_STATISTICS) +- + #define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk + #define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741 + #define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742 +diff --git a/drivers/staging/rt2860/rt_config.h b/drivers/staging/rt2860/rt_config.h +index 67b957b..9e684ae 100644 +--- a/drivers/staging/rt2860/rt_config.h ++++ b/drivers/staging/rt2860/rt_config.h +@@ -64,14 +64,6 @@ + #include "rtmp_mcu.h" + #endif + +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +- +- +- + #ifdef IGMP_SNOOP_SUPPORT + #include "igmp_snoop.h" + #endif // IGMP_SNOOP_SUPPORT // +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index e8c7d88..d16bcf3 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -75,16 +75,6 @@ + #include + #endif // KTHREAD_SUPPORT // + +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +- +- +-#ifdef KTHREAD_SUPPORT +-#endif // KTHREAD_SUPPORT // +- + /*********************************************************************************** + * Profile related sections + ***********************************************************************************/ +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index d213387..2ca1ca6 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -41,23 +41,10 @@ + #define __RTMP_H__ + + #include "spectrum_def.h" +- + #include "rtmp_dot11.h" +- +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +- +-#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) +-#define WSC_INCLUDED +-#endif +- + #include "rtmp_chip.h" + + +- + typedef struct _RTMP_ADAPTER RTMP_ADAPTER; + typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; + +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index ca700d0..816ae62 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -41,15 +41,6 @@ + + #include "oid.h" + +-#undef AP_WSC_INCLUDED +-#undef STA_WSC_INCLUDED +-#undef WSC_INCLUDED +- +- +- +-#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED) +-#define WSC_INCLUDED +-#endif + // + // Debug information verbosity: lower values indicate higher urgency + // +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch b/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch new file mode 100644 index 000000000..153f75922 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch @@ -0,0 +1,80 @@ +From 8558c5398d6f51507e6f5ff205526b1756377d63 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:13 -0800 +Subject: [PATCH 17/42] Staging: rt28x0: remove __LINE__ instances + +commit 460bb8df1e910a8c5d36ad363fbc1f0164cf0b85 upstream. + +Remove instances of __LINE__ preprocessor directive to make +validation of resulting binary output files easier. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/mlme.c | 7 ++----- + drivers/staging/rt2860/common/rtmp_init.c | 3 ++- + drivers/staging/rt2860/pci_main_dev.c | 1 - + 3 files changed, 4 insertions(+), 7 deletions(-) + +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 9fa853e..9c250c2 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -1222,13 +1222,11 @@ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); +- ++ DBGPRINT(RT_DEBUG_TRACE, ("%s\n", __func__)); + RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); + } + else + { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); + AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x2); + // Wait command success + AsicCheckCommanOk(pAd, PowerSafeCID); +@@ -1240,12 +1238,11 @@ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + { + if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s\n", __func__)); + RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); + } + else + { +- DBGPRINT(RT_DEBUG_TRACE, ("%s::%d\n",__FUNCTION__,__LINE__)); + AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x02); + // Wait command success + AsicCheckCommanOk(pAd, PowerSafeCID); +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 5deba8d..1cc6e44 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -1261,7 +1261,8 @@ VOID NICInitAsicFromEEPROM( + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) + && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) + { +- DBGPRINT(RT_DEBUG_TRACE,("%s::%d,release Mcu Lock\n",__FUNCTION__,__LINE__)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s, release Mcu Lock\n", __func__)); + RTMP_SEM_LOCK(&pAd->McuCmdLock); + pAd->brt30xxBanMcuCmd = FALSE; + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 38bc429..2c51d9d 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -599,7 +599,6 @@ VOID RTMPInitPCIeLinkCtrlValue( + } + + DBGPRINT(RT_DEBUG_TRACE, ("====> rt28xx Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- printk("\n\n\n%s:%d\n",__FUNCTION__,__LINE__); + + AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); + } +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch b/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch new file mode 100644 index 000000000..38c423114 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch @@ -0,0 +1,16892 @@ +From 5871d1b40dae3dbb16f7f9adfd6c2e4fbcb96320 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:13 -0800 +Subject: [PATCH 18/42] Staging: rt28x0: run *.c files through Lindent + +commit 66cd8d6ec97bbfac53b5e67df9ef4668c3f96085 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chips/rt3070.c | 74 +- + drivers/staging/rt2860/chips/rt3090.c | 32 +- + drivers/staging/rt2860/chips/rt30xx.c | 273 +-- + drivers/staging/rt2860/pci_main_dev.c | 1016 ++++----- + drivers/staging/rt2860/rt_linux.c | 1067 ++++----- + drivers/staging/rt2860/rt_main_dev.c | 399 ++-- + drivers/staging/rt2860/rt_pci_rbus.c | 481 ++--- + drivers/staging/rt2860/rt_usb.c | 649 +++--- + drivers/staging/rt2860/sta_ioctl.c | 3437 +++++++++++++++------------- + drivers/staging/rt2860/usb_main_dev.c | 699 +++--- + drivers/staging/rt2870/common/rtusb_bulk.c | 896 ++++---- + drivers/staging/rt2870/common/rtusb_data.c | 173 +- + drivers/staging/rt2870/common/rtusb_io.c | 2390 +++++++++++-------- + 13 files changed, 5933 insertions(+), 5653 deletions(-) + +diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c +index 5a3e668..eb3b214 100644 +--- a/drivers/staging/rt2860/chips/rt3070.c ++++ b/drivers/staging/rt2860/chips/rt3070.c +@@ -39,12 +39,10 @@ + + #include "../rt_config.h" + +- + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif // RTMP_RF_RW_SUPPORT // + +- + VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + { + INT i; +@@ -52,61 +50,55 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + + // Driver must read EEPROM to get RfIcType before initial RF registers + // Initialize RF register to default value +- if (IS_RT3070(pAd) || IS_RT3071(pAd)) +- { ++ if (IS_RT3070(pAd) || IS_RT3071(pAd)) { + // Init RF calibration + // Driver should toggle RF R30 bit7 before init RF registers + UINT32 RfReg = 0; + UINT32 data; + +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); ++ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg); + RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + RTMPusecDelay(1000); + RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + + // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS; i++) +- { +- RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); ++ for (i = 0; i < NUM_RF_REG_PARMS; i++) { ++ RT30xxWriteRFRegister(pAd, ++ RT30xx_RFRegTable[i].Register, ++ RT30xx_RFRegTable[i].Value); + } + + // add by johnli +- if (IS_RT3070(pAd)) +- { ++ if (IS_RT3070(pAd)) { + // + // The DAC issue(LDO_CFG0) has been fixed in RT3070(F). + // The voltage raising patch is no longer needed for RT3070(F) + // +- if ((pAd->MACVersion & 0xffff) < 0x0201) +- { ++ if ((pAd->MACVersion & 0xffff) < 0x0201) { + // Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate + RTUSBReadMACRegister(pAd, LDO_CFG0, &data); + data = ((data & 0xF0FFFFFF) | 0x0D000000); + RTUSBWriteMACRegister(pAd, LDO_CFG0, data); + } +- } +- else if (IS_RT3071(pAd)) +- { ++ } else if (IS_RT3071(pAd)) { + // Driver should set RF R6 bit6 on before init RF registers +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); ++ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); + RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); + + // init R31 + RT30xxWriteRFRegister(pAd, RF_R31, 0x14); + + // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { ++ if ((pAd->NicConfig2.field.DACTestBit == 1) ++ && ((pAd->MACVersion & 0xffff) < 0x0211)) { + // patch tx EVM issue temporarily + RTUSBReadMACRegister(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x0D000000); + RTUSBWriteMACRegister(pAd, LDO_CFG0, data); +- } +- else +- { ++ } else { + RTMP_IO_READ32(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x01000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +@@ -117,8 +109,7 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + data &= ~(0x20); + RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data); + } +- +- //For RF filter Calibration ++ //For RF filter Calibration + RTMPFilterCalibration(pAd); + + // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +@@ -126,15 +117,12 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). + // Raising RF voltage is no longer needed for RT3070(F) + // +- if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201)) +- { ++ if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201)) { + RT30xxWriteRFRegister(pAd, RF_R27, 0x3); +- } +- else if ((IS_RT3071(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { ++ } else if ((IS_RT3071(pAd)) ++ && ((pAd->MACVersion & 0xffff) < 0x0211)) { + RT30xxWriteRFRegister(pAd, RF_R27, 0x3); + } +- + // set led open drain enable + RTUSBReadMACRegister(pAd, OPT_14, &data); + data |= 0x01; +@@ -145,29 +133,25 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + RT30xxReadRFRegister(pAd, RF_R17, &RFValue); + RFValue &= (~0x08); + // to fix rx long range issue +- if (pAd->NicConfig2.field.ExternalLNAForG == 0) +- { +- if ((IS_RT3071(pAd) && ((pAd->MACVersion & 0xffff) >= 0x0211)) || IS_RT3070(pAd)) +- { ++ if (pAd->NicConfig2.field.ExternalLNAForG == 0) { ++ if ((IS_RT3071(pAd) ++ && ((pAd->MACVersion & 0xffff) >= 0x0211)) ++ || IS_RT3070(pAd)) { + RFValue |= 0x20; + } + } + // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 1) +- { +- RFValue &= (~0x7); // clean bit [2:0] ++ if (pAd->TxMixerGain24G >= 1) { ++ RFValue &= (~0x7); // clean bit [2:0] + RFValue |= pAd->TxMixerGain24G; + } + RT30xxWriteRFRegister(pAd, RF_R17, RFValue); + +- if (IS_RT3071(pAd)) +- { ++ if (IS_RT3071(pAd)) { + // add by johnli, RF power sequence setup, load RF normal operation-mode setup + RT30xxLoadRFNormalModeSetup(pAd); +- } +- else if (IS_RT3070(pAd)) +- { +- /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ ++ } else if (IS_RT3070(pAd)) { ++ /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */ + // LDORF_VC, RF R27 register Bit 2 to 0 + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); + // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c +index 35c549d..1435294 100644 +--- a/drivers/staging/rt2860/chips/rt3090.c ++++ b/drivers/staging/rt2860/chips/rt3090.c +@@ -39,44 +39,39 @@ + + #include "../rt_config.h" + +- + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif // RTMP_RF_RW_SUPPORT // + +- + VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + { +- INT i; ++ INT i; + // Driver must read EEPROM to get RfIcType before initial RF registers + // Initialize RF register to default value +- if (IS_RT3090(pAd)) +- { ++ if (IS_RT3090(pAd)) { + // Init RF calibration + // Driver should toggle RF R30 bit7 before init RF registers + UINT32 RfReg = 0, data; + +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg); ++ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg); + RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + RTMPusecDelay(1000); + RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + + // init R24, R31 + RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); + RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); + + // RT309x version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { ++ if ((pAd->NicConfig2.field.DACTestBit == 1) ++ && ((pAd->MACVersion & 0xffff) < 0x0211)) { + // patch tx EVM issue temporarily + RTMP_IO_READ32(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x0D000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +- } +- else +- { ++ } else { + RTMP_IO_READ32(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x01000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +@@ -88,15 +83,16 @@ VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); + + // Initialize RF register to default value +- for (i = 0; i < NUM_RF_REG_PARMS; i++) +- { +- RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value); ++ for (i = 0; i < NUM_RF_REG_PARMS; i++) { ++ RT30xxWriteRFRegister(pAd, ++ RT30xx_RFRegTable[i].Register, ++ RT30xx_RFRegTable[i].Value); + } + + // Driver should set RF R6 bit6 on before calibration +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg); ++ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); + RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); + + //For RF filter Calibration + RTMPFilterCalibration(pAd); +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index c69fab5..940f731 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -35,73 +35,82 @@ + -------- ---------- ---------------------------------------------- + */ + +- + #ifdef RT30xx + +- + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif // RTMP_RF_RW_SUPPORT // + + #include "../rt_config.h" + +- + // + // RF register initialization set + // +-REG_PAIR RT30xx_RFRegTable[] = { +- {RF_R04, 0x40}, +- {RF_R05, 0x03}, +- {RF_R06, 0x02}, +- {RF_R07, 0x70}, +- {RF_R09, 0x0F}, +- {RF_R10, 0x41}, +- {RF_R11, 0x21}, +- {RF_R12, 0x7B}, +- {RF_R14, 0x90}, +- {RF_R15, 0x58}, +- {RF_R16, 0xB3}, +- {RF_R17, 0x92}, +- {RF_R18, 0x2C}, +- {RF_R19, 0x02}, +- {RF_R20, 0xBA}, +- {RF_R21, 0xDB}, +- {RF_R24, 0x16}, +- {RF_R25, 0x01}, +- {RF_R29, 0x1F}, ++REG_PAIR RT30xx_RFRegTable[] = { ++ {RF_R04, 0x40} ++ , ++ {RF_R05, 0x03} ++ , ++ {RF_R06, 0x02} ++ , ++ {RF_R07, 0x70} ++ , ++ {RF_R09, 0x0F} ++ , ++ {RF_R10, 0x41} ++ , ++ {RF_R11, 0x21} ++ , ++ {RF_R12, 0x7B} ++ , ++ {RF_R14, 0x90} ++ , ++ {RF_R15, 0x58} ++ , ++ {RF_R16, 0xB3} ++ , ++ {RF_R17, 0x92} ++ , ++ {RF_R18, 0x2C} ++ , ++ {RF_R19, 0x02} ++ , ++ {RF_R20, 0xBA} ++ , ++ {RF_R21, 0xDB} ++ , ++ {RF_R24, 0x16} ++ , ++ {RF_R25, 0x01} ++ , ++ {RF_R29, 0x1F} ++ , + }; + + UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); + +- +- + // Antenna divesity use GPIO3 and EESK pin for control + // Antenna and EEPROM access are both using EESK pin, + // Therefor we should avoid accessing EESK at the same time + // Then restore antenna after EEPROM access + // The original name of this function is AsicSetRxAnt(), now change to + //VOID AsicSetRxAnt( +-VOID RT30xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) ++VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + { +- UINT32 Value; ++ UINT32 Value; + #ifdef RTMP_MAC_PCI +- UINT32 x; ++ UINT32 x; + #endif + + if ((pAd->EepromAccess) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) || ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { + return; + } +- + // the antenna selection is through firmware and MAC register(GPIO3) +- if (Ant == 0) +- { ++ if (Ant == 0) { + // Main antenna + #ifdef RTMP_MAC_PCI + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -114,10 +123,9 @@ VOID RT30xxSetRxAnt( + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); + Value &= ~(0x0808); + RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n")); +- } +- else +- { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("AsicSetRxAnt, switch to main antenna\n")); ++ } else { + // Aux antenna + #ifdef RTMP_MAC_PCI + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -130,11 +138,11 @@ VOID RT30xxSetRxAnt( + Value &= ~(0x0808); + Value |= 0x08; + RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n")); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("AsicSetRxAnt, switch to aux antenna\n")); + } + } + +- + /* + ======================================================================== + +@@ -151,46 +159,43 @@ VOID RT30xxSetRxAnt( + + ======================================================================== + */ +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + { +- UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0; +- UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; +- UCHAR RF_R24_Value = 0; ++ UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue = 0; ++ UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; ++ UCHAR RF_R24_Value = 0; + + // Give bbp filter initial value + pAd->Mlme.CaliBW20RfR24 = 0x1F; +- pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 ++ pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 + +- do +- { ++ do { + if (loop == 1) //BandWidth = 40 MHz + { + // Write 0x27 to RF_R24 to program filter + RF_R24_Value = 0x27; + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + FilterTarget = 0x15; + else + FilterTarget = 0x19; + + // when calibrate BW40, BBP mask must set to BW40. + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); +- BBPValue|= (0x10); ++ BBPValue &= (~0x18); ++ BBPValue |= (0x10); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + + // set to BW40 + RT30xxReadRFRegister(pAd, RF_R31, &value); + value |= 0x20; + RT30xxWriteRFRegister(pAd, RF_R31, value); +- } +- else //BandWidth = 20 MHz ++ } else //BandWidth = 20 MHz + { + // Write 0x07 to RF_R24 to program filter + RF_R24_Value = 0x07; + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); +- if (IS_RT3090(pAd) || IS_RT3572(pAd)|| IS_RT3390(pAd)) ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + FilterTarget = 0x13; + else + FilterTarget = 0x16; +@@ -209,8 +214,7 @@ VOID RTMPFilterCalibration( + // Write 0x00 to BBP_R24 to set power & frequency of passband test tone + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); + +- do +- { ++ do { + // Write 0x90 to BBP_R25 to transmit test tone + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); + +@@ -224,8 +228,7 @@ VOID RTMPFilterCalibration( + // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); + +- while(TRUE) +- { ++ while (TRUE) { + // Write 0x90 to BBP_R25 to transmit test tone + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); + +@@ -233,59 +236,47 @@ VOID RTMPFilterCalibration( + RTMPusecDelay(1000); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); + value &= 0xFF; +- if ((R55x - value) < FilterTarget) +- { +- RF_R24_Value ++; +- } +- else if ((R55x - value) == FilterTarget) +- { +- RF_R24_Value ++; +- count ++; +- } +- else +- { ++ if ((R55x - value) < FilterTarget) { ++ RF_R24_Value++; ++ } else if ((R55x - value) == FilterTarget) { ++ RF_R24_Value++; ++ count++; ++ } else { + break; + } + + // prevent infinite loop cause driver hang. +- if (loopcnt++ > 100) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt)); ++ if (loopcnt++ > 100) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", ++ loopcnt)); + break; + } +- + // Write RF_R24 to program filter + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + } + +- if (count > 0) +- { ++ if (count > 0) { + RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); + } +- + // Store for future usage +- if (loopcnt < 100) +- { +- if (loop++ == 0) +- { ++ if (loopcnt < 100) { ++ if (loop++ == 0) { + //BandWidth = 20 MHz +- pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value; +- } +- else +- { ++ pAd->Mlme.CaliBW20RfR24 = (UCHAR) RF_R24_Value; ++ } else { + //BandWidth = 40 MHz +- pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value; ++ pAd->Mlme.CaliBW40RfR24 = (UCHAR) RF_R24_Value; + break; + } +- } +- else ++ } else + break; + + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + + // reset count + count = 0; +- } while(TRUE); ++ } while (TRUE); + + // + // Set back to initial state +@@ -298,13 +289,14 @@ VOID RTMPFilterCalibration( + + // set BBP back to BW20 + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +- BBPValue&= (~0x18); ++ BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", ++ pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); + } + +- + // add by johnli, RF power sequence setup + /* + ========================================================================== +@@ -314,8 +306,7 @@ VOID RTMPFilterCalibration( + + ========================================================================== + */ +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd) ++VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + { + UCHAR RFValue; + +@@ -330,22 +321,22 @@ VOID RT30xxLoadRFNormalModeSetup( + RT30xxWriteRFRegister(pAd, RF_R15, RFValue); + + /* move to NICInitRT30xxRFRegisters +- // TX_LO1_en, RF R17 register Bit 3 to 0 +- RT30xxReadRFRegister(pAd, RF_R17, &RFValue); +- RFValue &= (~0x08); +- // to fix rx long range issue +- if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) +- { +- RFValue |= 0x20; +- } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 2) +- { +- RFValue &= (~0x7); // clean bit [2:0] +- RFValue |= pAd->TxMixerGain24G; +- } +- RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +- */ ++ // TX_LO1_en, RF R17 register Bit 3 to 0 ++ RT30xxReadRFRegister(pAd, RF_R17, &RFValue); ++ RFValue &= (~0x08); ++ // to fix rx long range issue ++ if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0)) ++ { ++ RFValue |= 0x20; ++ } ++ // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ if (pAd->TxMixerGain24G >= 2) ++ { ++ RFValue &= (~0x7); // clean bit [2:0] ++ RFValue |= pAd->TxMixerGain24G; ++ } ++ RT30xxWriteRFRegister(pAd, RF_R17, RFValue); ++ */ + + // RX_LO1_en, RF R20 register Bit 3 to 0 + RT30xxReadRFRegister(pAd, RF_R20, &RFValue); +@@ -357,7 +348,7 @@ VOID RT30xxLoadRFNormalModeSetup( + RFValue &= (~0x08); + RT30xxWriteRFRegister(pAd, RF_R21, RFValue); + +- /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem*/ ++ /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */ + // LDORF_VC, RF R27 register Bit 2 to 0 + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); + // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +@@ -381,15 +372,13 @@ VOID RT30xxLoadRFNormalModeSetup( + + ========================================================================== + */ +-VOID RT30xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) ++VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + { + UCHAR RFValue; + UINT32 MACValue; + +- + #ifdef RTMP_MAC_USB +- if(!IS_RT3572(pAd)) ++ if (!IS_RT3572(pAd)) + #endif // RTMP_MAC_USB // + { + // RF_BLOCK_en. RF R1 register Bit 0 to 0 +@@ -414,9 +403,8 @@ VOID RT30xxLoadRFSleepModeSetup( + } + + if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { ++ IS_RT3572(pAd) || ++ (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) { + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) + #endif // RTMP_MAC_USB // +@@ -440,14 +428,13 @@ VOID RT30xxLoadRFSleepModeSetup( + + ========================================================================== + */ +-VOID RT30xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd) ++VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + { + UCHAR RFValue; + UINT32 MACValue; + + #ifdef RTMP_MAC_USB +- if(!IS_RT3572(pAd)) ++ if (!IS_RT3572(pAd)) + #endif // RTMP_MAC_USB // + { + // RF_BLOCK_en, RF R1 register Bit 0 to 1 +@@ -472,10 +459,9 @@ VOID RT30xxReverseRFSleepModeSetup( + } + + if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 +- IS_RT3572(pAd) || +- IS_RT3390(pAd) || +- (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +- { ++ IS_RT3572(pAd) || ++ IS_RT3390(pAd) || ++ (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) { + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) + #endif // RTMP_MAC_USB // +@@ -487,48 +473,41 @@ VOID RT30xxReverseRFSleepModeSetup( + RFValue = (RFValue & (~0x77)); + RT30xxWriteRFRegister(pAd, RF_R27, RFValue); + } +- + // RT3071 version E has fixed this issue +- if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211)) +- { ++ if ((pAd->NicConfig2.field.DACTestBit == 1) ++ && ((pAd->MACVersion & 0xffff) < 0x0211)) { + // patch tx EVM issue temporarily + RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); + MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +- } +- else +- { ++ } else { + RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); + MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); + } + } + +- if(IS_RT3572(pAd)) ++ if (IS_RT3572(pAd)) + RT30xxWriteRFRegister(pAd, RF_R08, 0x80); + } ++ + // end johnli + +-VOID RT30xxHaltAction( +- IN PRTMP_ADAPTER pAd) ++VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd) + { +- UINT32 TxPinCfg = 0x00050F0F; ++ UINT32 TxPinCfg = 0x00050F0F; + + // + // Turn off LNA_PE or TRSW_POL + // +- if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) +- { ++ if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) { + if ((IS_RT3071(pAd) || IS_RT3572(pAd)) + #ifdef RTMP_EFUSE_SUPPORT +- && (pAd->bUseEfuse) ++ && (pAd->bUseEfuse) + #endif // RTMP_EFUSE_SUPPORT // +- ) +- { +- TxPinCfg &= 0xFFFBF0F0; // bit18 off +- } +- else +- { ++ ) { ++ TxPinCfg &= 0xFFFBF0F0; // bit18 off ++ } else { + TxPinCfg &= 0xFFFFF0F0; + } + +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 2c51d9d..2a22e45 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -53,13 +53,13 @@ extern int rt28xx_close(IN struct net_device *net_dev); + extern int rt28xx_open(struct net_device *net_dev); + + static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev); +-static INT __devinit rt2860_probe(struct pci_dev *pci_dev, const struct pci_device_id *ent); ++static INT __devinit rt2860_probe(struct pci_dev *pci_dev, ++ const struct pci_device_id *ent); + static void __exit rt2860_cleanup_module(void); + static int __init rt2860_init_module(void); + +- static VOID RTMPInitPCIeDevice( +- IN struct pci_dev *pci_dev, +- IN PRTMP_ADAPTER pAd); ++static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, ++ IN PRTMP_ADAPTER pAd); + + #ifdef CONFIG_PM + static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); +@@ -69,10 +69,9 @@ static int rt2860_resume(struct pci_dev *pci_dev); + // + // Ralink PCI device table, include all supported chipsets + // +-static struct pci_device_id rt2860_pci_tbl[] __devinitdata = +-{ ++static struct pci_device_id rt2860_pci_tbl[] __devinitdata = { + #ifdef RT2860 +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2760_PCI_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2790_PCIe_DEVICE_ID)}, +@@ -95,7 +94,7 @@ static struct pci_device_id rt2860_pci_tbl[] __devinitdata = + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3391_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3392_PCIe_DEVICE_ID)}, + #endif // RT3390 // +- {0,} // terminate list ++ {0,} // terminate list + }; + + MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); +@@ -103,23 +102,20 @@ MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); + MODULE_VERSION(STA_DRIVER_VERSION); + #endif + +- + // + // Our PCI driver structure + // +-static struct pci_driver rt2860_driver = +-{ +- name: "rt2860", +- id_table: rt2860_pci_tbl, +- probe: rt2860_probe, +- remove: __devexit_p(rt2860_remove_one), ++static struct pci_driver rt2860_driver = { ++name: "rt2860", ++id_table:rt2860_pci_tbl, ++probe: rt2860_probe, ++remove:__devexit_p(rt2860_remove_one), + #ifdef CONFIG_PM +- suspend: rt2860_suspend, +- resume: rt2860_resume, ++suspend:rt2860_suspend, ++resume:rt2860_resume, + #endif + }; + +- + /*************************************************************************** + * + * PCI device initialization related procedures. +@@ -127,37 +123,29 @@ static struct pci_driver rt2860_driver = + ***************************************************************************/ + #ifdef CONFIG_PM + +-VOID RT2860RejectPendingPackets( +- IN PRTMP_ADAPTER pAd) ++VOID RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { + // clear PS packets + // clear TxSw packets + } + +-static int rt2860_suspend( +- struct pci_dev *pci_dev, +- pm_message_t state) ++static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; + INT32 retval = 0; + +- + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); + +- if (net_dev == NULL) +- { ++ if (net_dev == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else +- { ++ } else { + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + /* we can not use IFF_UP because ra0 down but ra1 up */ + /* and 1 suspend/resume function for 1 module, not for each interface */ + /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { ++ if (VIRTUAL_IF_NUM(pAd) > 0) { + // avoid users do suspend after interface is down + + // stop interface +@@ -172,7 +160,7 @@ static int rt2860_suspend( + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + // take down the device +- rt28xx_close((PNET_DEV)net_dev); ++ rt28xx_close((PNET_DEV) net_dev); + + RT_MOD_DEC_USE_COUNT(); + } +@@ -193,14 +181,12 @@ static int rt2860_suspend( + return retval; + } + +-static int rt2860_resume( +- struct pci_dev *pci_dev) ++static int rt2860_resume(struct pci_dev *pci_dev) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; + INT32 retval; + +- + // set the power state of a PCI device + // PCI has 4 power states, DO (normal) ~ D3(less power) + // in include/linux/pci.h, you can find that +@@ -217,38 +203,32 @@ static int rt2860_resume( + pci_restore_state(pci_dev); + + // initialize device before it's used by a driver +- if (pci_enable_device(pci_dev)) +- { ++ if (pci_enable_device(pci_dev)) { + printk("pci enable fail!\n"); + return 0; + } + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_resume()\n")); + +- if (net_dev == NULL) +- { ++ if (net_dev == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); +- } +- else ++ } else + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- if (pAd != NULL) +- { ++ if (pAd != NULL) { + /* we can not use IFF_UP because ra0 down but ra1 up */ + /* and 1 suspend/resume function for 1 module, not for each interface */ + /* so Linux will call suspend/resume function once */ +- if (VIRTUAL_IF_NUM(pAd) > 0) +- { ++ if (VIRTUAL_IF_NUM(pAd) > 0) { + // mark device as attached from system and restart if needed + netif_device_attach(net_dev); + +- if (rt28xx_open((PNET_DEV)net_dev) != 0) +- { ++ if (rt28xx_open((PNET_DEV) net_dev) != 0) { + // open fail +- DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== rt2860_resume()\n")); + return 0; + } +- + // increase MODULE use count + RT_MOD_INC_USE_COUNT(); + +@@ -266,113 +246,111 @@ static int rt2860_resume( + } + #endif // CONFIG_PM // + +- + static INT __init rt2860_init_module(VOID) + { + return pci_register_driver(&rt2860_driver); + } + +- + // + // Driver module unload function + // + static VOID __exit rt2860_cleanup_module(VOID) + { +- pci_unregister_driver(&rt2860_driver); ++ pci_unregister_driver(&rt2860_driver); + } + + module_init(rt2860_init_module); + module_exit(rt2860_cleanup_module); + +- + // + // PCI device probe & initialization function + // +-static INT __devinit rt2860_probe( +- IN struct pci_dev *pci_dev, +- IN const struct pci_device_id *pci_id) ++static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, ++ IN const struct pci_device_id *pci_id) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)NULL; +- struct net_device *net_dev; +- PVOID handle; +- PSTRING print_name; +- ULONG csr_addr; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; ++ struct net_device *net_dev; ++ PVOID handle; ++ PSTRING print_name; ++ ULONG csr_addr; + INT rv = 0; +- RTMP_OS_NETDEV_OP_HOOK netDevHook; ++ RTMP_OS_NETDEV_OP_HOOK netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); + + //PCIDevInit============================================== + // wake up and enable device +- if ((rv = pci_enable_device(pci_dev))!= 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Enable PCI device failed, errno=%d!\n", rv)); ++ if ((rv = pci_enable_device(pci_dev)) != 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Enable PCI device failed, errno=%d!\n", rv)); + return rv; + } + +- print_name = (PSTRING)pci_name(pci_dev); ++ print_name = (PSTRING) pci_name(pci_dev); + +- if ((rv = pci_request_regions(pci_dev, print_name)) != 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Request PCI resource failed, errno=%d!\n", rv)); ++ if ((rv = pci_request_regions(pci_dev, print_name)) != 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Request PCI resource failed, errno=%d!\n", rv)); + goto err_out; + } +- + // map physical address to virtual address for accessing register +- csr_addr = (unsigned long) ioremap(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); +- if (!csr_addr) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", +- print_name, (ULONG)pci_resource_len(pci_dev, 0), (ULONG)pci_resource_start(pci_dev, 0))); ++ csr_addr = ++ (unsigned long)ioremap(pci_resource_start(pci_dev, 0), ++ pci_resource_len(pci_dev, 0)); ++ if (!csr_addr) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", ++ print_name, (ULONG) pci_resource_len(pci_dev, 0), ++ (ULONG) pci_resource_start(pci_dev, 0))); + goto err_out_free_res; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name, +- (ULONG)pci_resource_start(pci_dev, 0), (ULONG)csr_addr, pci_dev->irq)); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name, ++ (ULONG) pci_resource_start(pci_dev, 0), ++ (ULONG) csr_addr, pci_dev->irq)); + } + + // Set DMA master + pci_set_master(pci_dev); + +- + //RtmpDevInit============================================== + // Allocate RTMP_ADAPTER adapter structure + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); +- if (handle == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(): Allocate memory for os handle failed!\n", __func__)); ++ if (handle == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s(): Allocate memory for os handle failed!\n", ++ __func__)); + goto err_out_iounmap; + } + +- ((POS_COOKIE)handle)->pci_dev = pci_dev; ++ ((POS_COOKIE) handle)->pci_dev = pci_dev; + + rv = RTMPAllocAdapterBlock(handle, &pAd); //shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" + if (rv != NDIS_STATUS_SUCCESS) + goto err_out_iounmap; + // Here are the RTMP_ADAPTER structure with pci-bus specific parameters. +- pAd->CSRBaseAddress = (PUCHAR)csr_addr; +- DBGPRINT(RT_DEBUG_ERROR, ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", (ULONG)pAd->CSRBaseAddress, csr_addr)); ++ pAd->CSRBaseAddress = (PUCHAR) csr_addr; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", ++ (ULONG) pAd->CSRBaseAddress, csr_addr)); + RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_PCI); + +- + //NetDevInit============================================== + net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); + if (net_dev == NULL) + goto err_out_free_radev; + + // Here are the net_device structure with pci-bus specific parameters. +- net_dev->irq = pci_dev->irq; // Interrupt IRQ number +- net_dev->base_addr = csr_addr; // Save CSR virtual address and irq to device structure ++ net_dev->irq = pci_dev->irq; // Interrupt IRQ number ++ net_dev->base_addr = csr_addr; // Save CSR virtual address and irq to device structure + pci_set_drvdata(pci_dev, net_dev); // Set driver data + + /* for supporting Network Manager */ + /* Set the sysfs physical device reference for the network logical device +- * if set prior to registration will cause a symlink during initialization. ++ * if set prior to registration will cause a symlink during initialization. + */ + SET_NETDEV_DEV(net_dev, &(pci_dev->dev)); + +- + //All done, it's time to register the net device to linux kernel. + // Register this device + rv = RtmpOSNetDevAttach(net_dev, &netDevHook); +@@ -384,20 +362,20 @@ static INT __devinit rt2860_probe( + + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_probe\n")); + +- return 0; // probe ok +- ++ return 0; // probe ok + + /* --------------------------- ERROR HANDLE --------------------------- */ + err_out_free_netdev: + RtmpOSNetDevFree(net_dev); + + err_out_free_radev: +- /* free RTMP_ADAPTER strcuture and os_cookie*/ ++ /* free RTMP_ADAPTER strcuture and os_cookie */ + RTMPFreeAdapter(pAd); + + err_out_iounmap: + iounmap((void *)(csr_addr)); +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ release_mem_region(pci_resource_start(pci_dev, 0), ++ pci_resource_len(pci_dev, 0)); + + err_out_free_res: + pci_release_regions(pci_dev); +@@ -405,25 +383,23 @@ err_out_free_res: + err_out: + pci_disable_device(pci_dev); + +- DBGPRINT(RT_DEBUG_ERROR, ("<=== rt2860_probe failed with rv = %d!\n", rv)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("<=== rt2860_probe failed with rv = %d!\n", rv)); + +- return -ENODEV; /* probe fail */ ++ return -ENODEV; /* probe fail */ + } + +- +-static VOID __devexit rt2860_remove_one( +- IN struct pci_dev *pci_dev) ++static VOID __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + { +- PNET_DEV net_dev = pci_get_drvdata(pci_dev); +- RTMP_ADAPTER *pAd = NULL; +- ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; ++ PNET_DEV net_dev = pci_get_drvdata(pci_dev); ++ RTMP_ADAPTER *pAd = NULL; ++ ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); + +- if (pAd != NULL) +- { ++ if (pAd != NULL) { + // Unregister/Free all allocated net_device. + RtmpPhyNetDevExit(pAd, net_dev); + +@@ -431,14 +407,13 @@ static VOID __devexit rt2860_remove_one( + iounmap((char *)(csr_addr)); + + // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ release_mem_region(pci_resource_start(pci_dev, 0), ++ pci_resource_len(pci_dev, 0)); + + // Free RTMP_ADAPTER related structures. + RtmpRaDevCtrlExit(pAd); + +- } +- else +- { ++ } else { + // Unregister network device + RtmpOSNetDevDetach(net_dev); + +@@ -446,7 +421,8 @@ static VOID __devexit rt2860_remove_one( + iounmap((char *)(net_dev->base_addr)); + + // release memory region +- release_mem_region(pci_resource_start(pci_dev, 0), pci_resource_len(pci_dev, 0)); ++ release_mem_region(pci_resource_start(pci_dev, 0), ++ pci_resource_len(pci_dev, 0)); + } + + // Free the root net_device +@@ -454,7 +430,6 @@ static VOID __devexit rt2860_remove_one( + + } + +- + /* + ======================================================================== + Routine Description: +@@ -470,24 +445,20 @@ Return Value: + Note: + ======================================================================== + */ +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p) ++BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + { + /* always TRUE */ + return TRUE; + } + +- + /*************************************************************************** + * + * PCIe device initialization related procedures. + * + ***************************************************************************/ +- static VOID RTMPInitPCIeDevice( +- IN struct pci_dev *pci_dev, +- IN PRTMP_ADAPTER pAd) ++static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + { +- USHORT device_id; ++ USHORT device_id; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -496,20 +467,18 @@ BOOLEAN RT28XXChipsetCheck( + pObj->DeviceID = device_id; + if ( + #ifdef RT2860 +- (device_id == NIC2860_PCIe_DEVICE_ID) || +- (device_id == NIC2790_PCIe_DEVICE_ID) || +- (device_id == VEN_AWT_PCIe_DEVICE_ID) || ++ (device_id == NIC2860_PCIe_DEVICE_ID) || ++ (device_id == NIC2790_PCIe_DEVICE_ID) || ++ (device_id == VEN_AWT_PCIe_DEVICE_ID) || + #endif + #ifdef RT3090 +- (device_id == NIC3090_PCIe_DEVICE_ID) || +- (device_id == NIC3091_PCIe_DEVICE_ID) || +- (device_id == NIC3092_PCIe_DEVICE_ID) || ++ (device_id == NIC3090_PCIe_DEVICE_ID) || ++ (device_id == NIC3091_PCIe_DEVICE_ID) || ++ (device_id == NIC3092_PCIe_DEVICE_ID) || + #endif // RT3090 // +- 0) +- { +- UINT32 MacCsr0 = 0, Index= 0; +- do +- { ++ 0) { ++ UINT32 MacCsr0 = 0, Index = 0; ++ do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + + if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF)) +@@ -520,21 +489,18 @@ BOOLEAN RT28XXChipsetCheck( + + // Support advanced power save after 2892/2790. + // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). +- if ((MacCsr0&0xffff0000) != 0x28600000) +- { ++ if ((MacCsr0 & 0xffff0000) != 0x28600000) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); + } + } + } + +- +-VOID RTMPInitPCIeLinkCtrlValue( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + { +- INT pos; +- USHORT reg16, data2, PCIePowerSaveLevel, Configuration; ++ INT pos; ++ USHORT reg16, data2, PCIePowerSaveLevel, Configuration; + UINT32 MacValue; +- BOOLEAN bFindIntel = FALSE; ++ BOOLEAN bFindIntel = FALSE; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -542,79 +508,83 @@ VOID RTMPInitPCIeLinkCtrlValue( + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + +- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); + // Init EEPROM, and save settings +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { ++ if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); + pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff; + + pAd->LnkCtrlBitMask = 0; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { ++ if ((PCIePowerSaveLevel & 0xff) == 0xff) { + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); +- DBGPRINT(RT_DEBUG_TRACE, ("====> PCIePowerSaveLevel = 0x%x.\n", PCIePowerSaveLevel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> PCIePowerSaveLevel = 0x%x.\n", ++ PCIePowerSaveLevel)); + return; +- } +- else +- { +- PCIePowerSaveLevel &= 0x3; +- RT28xx_EEPROM_READ16(pAd, 0x24, data2); ++ } else { ++ PCIePowerSaveLevel &= 0x3; ++ RT28xx_EEPROM_READ16(pAd, 0x24, data2); + +- if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) +- { +- if (PCIePowerSaveLevel > 1 ) +- PCIePowerSaveLevel = 1; +- } ++ if (! ++ (((data2 & 0xff00) == 0x9200) ++ && ((data2 & 0x80) != 0))) { ++ if (PCIePowerSaveLevel > 1) ++ PCIePowerSaveLevel = 1; ++ } + +- DBGPRINT(RT_DEBUG_TRACE, ("====> Write 0x83 = 0x%x.\n", PCIePowerSaveLevel)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); +- RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); +- PCIePowerSaveLevel &= 0xff; +- PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; +- switch(PCIePowerSaveLevel) +- { +- case 0: // Only support L0 +- pAd->LnkCtrlBitMask = 0; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> Write 0x83 = 0x%x.\n", ++ PCIePowerSaveLevel)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, ++ (UCHAR) PCIePowerSaveLevel, 0x00); ++ RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); ++ PCIePowerSaveLevel &= 0xff; ++ PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; ++ switch (PCIePowerSaveLevel) { ++ case 0: // Only support L0 ++ pAd->LnkCtrlBitMask = 0; + break; +- case 1: // Only enable L0s +- pAd->LnkCtrlBitMask = 1; ++ case 1: // Only enable L0s ++ pAd->LnkCtrlBitMask = 1; + break; +- case 2: // enable L1, L0s +- pAd->LnkCtrlBitMask = 3; ++ case 2: // enable L1, L0s ++ pAd->LnkCtrlBitMask = 3; + break; +- case 3: // sync with host clk and enable L1, L0s ++ case 3: // sync with host clk and enable L1, L0s + pAd->LnkCtrlBitMask = 0x103; + break; +- } ++ } + RT28xx_EEPROM_READ16(pAd, 0x24, data2); +- if ((PCIePowerSaveLevel&0xff) != 0xff) +- { ++ if ((PCIePowerSaveLevel & 0xff) != 0xff) { + PCIePowerSaveLevel &= 0x3; + +- if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) ) +- { +- if (PCIePowerSaveLevel > 1 ) ++ if (! ++ (((data2 & 0xff00) == 0x9200) ++ && ((data2 & 0x80) != 0))) { ++ if (PCIePowerSaveLevel > 1) + PCIePowerSaveLevel = 1; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt28xx Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> rt28xx Write 0x83 Command = 0x%x.\n", ++ PCIePowerSaveLevel)); + +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, ++ (UCHAR) PCIePowerSaveLevel, ++ 0x00); + } +- DBGPRINT(RT_DEBUG_TRACE, ("====> LnkCtrlBitMask = 0x%x.\n", pAd->LnkCtrlBitMask)); +- } +- } +- else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- UCHAR LinkCtrlSetting = 0; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> LnkCtrlBitMask = 0x%x.\n", ++ pAd->LnkCtrlBitMask)); ++ } ++ } else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { ++ UCHAR LinkCtrlSetting = 0; + + // Check 3090E special setting chip. +- RT28xx_EEPROM_READ16(pAd, 0x24, data2); +- if ((data2 == 0x9280) && ((pAd->MACVersion&0xffff) == 0x0211)) +- { ++ RT28xx_EEPROM_READ16(pAd, 0x24, data2); ++ if ((data2 == 0x9280) && ((pAd->MACVersion & 0xffff) == 0x0211)) { + pAd->b3090ESpecialChip = TRUE; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Special 3090E chip \n")); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Special 3090E chip \n")); + } + + RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); +@@ -622,130 +592,148 @@ VOID RTMPInitPCIeLinkCtrlValue( + //Force PCIE 125MHz CLK to toggle + MacValue |= 0x402; + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" AUX_CTRL = 0x%32x\n", MacValue)); +- +- ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ (" AUX_CTRL = 0x%32x\n", MacValue)); + + // for RT30xx F and after, PCIe infterface, and for power solution 3 + if ((IS_VERSION_AFTER_F(pAd)) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode >= 2) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode <= 3)) +- { ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode >= 2) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode <= 3)) { + RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" Read AUX_CTRL = 0x%x\n", MacValue)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ (" Read AUX_CTRL = 0x%x\n", MacValue)); + // turn on bit 12. + //enable 32KHz clock mode for power saving + MacValue |= 0x1000; +- if (MacValue != 0xffffffff) +- { ++ if (MacValue != 0xffffffff) { + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" Write AUX_CTRL = 0x%x\n", MacValue)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ (" Write AUX_CTRL = 0x%x\n", ++ MacValue)); + // 1. if use PCIePowerSetting is 2 or 3, need to program OSC_CTRL to 0x3ff11. + MacValue = 0x3ff11; + RTMP_IO_WRITE32(pAd, OSC_CTRL, MacValue); +- DBGPRINT_RAW(RT_DEBUG_ERROR,(" OSC_CTRL = 0x%x\n", MacValue)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ (" OSC_CTRL = 0x%x\n", MacValue)); + // 2. Write PCI register Clk ref bit + RTMPrt3xSetPCIePowerLinkCtrl(pAd); +- } +- else +- { ++ } else { + // Error read Aux_Ctrl value. Force to use solution 1 +- DBGPRINT(RT_DEBUG_ERROR,(" Error Value in AUX_CTRL = 0x%x\n", MacValue)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ (" Error Value in AUX_CTRL = 0x%x\n", ++ MacValue)); + pAd->StaCfg.PSControl.field.rt30xxPowerMode = 1; +- DBGPRINT(RT_DEBUG_ERROR,(" Force to use power solution1 \n")); ++ DBGPRINT(RT_DEBUG_ERROR, ++ (" Force to use power solution1 \n")); + } + } + // 1. read setting from inf file. + +- PCIePowerSaveLevel = (USHORT)pAd->StaCfg.PSControl.field.rt30xxPowerMode; +- DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx Read PowerLevelMode = 0x%x.\n", PCIePowerSaveLevel)); ++ PCIePowerSaveLevel = ++ (USHORT) pAd->StaCfg.PSControl.field.rt30xxPowerMode; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("====> rt30xx Read PowerLevelMode = 0x%x.\n", ++ PCIePowerSaveLevel)); + // 2. Check EnableNewPS. + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + PCIePowerSaveLevel = 1; + +- if (IS_VERSION_BEFORE_F(pAd) && (pAd->b3090ESpecialChip == FALSE)) +- { ++ if (IS_VERSION_BEFORE_F(pAd) ++ && (pAd->b3090ESpecialChip == FALSE)) { + // Chip Version E only allow 1, So force set 1. + PCIePowerSaveLevel &= 0x1; +- pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xx E Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00); +- } +- else +- { ++ pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> rt30xx E Write 0x83 Command = 0x%x.\n", ++ PCIePowerSaveLevel)); ++ ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, ++ (UCHAR) PCIePowerSaveLevel, 0x00); ++ } else { + // Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. +- if (!((PCIePowerSaveLevel == 1) || (PCIePowerSaveLevel == 3))) ++ if (! ++ ((PCIePowerSaveLevel == 1) ++ || (PCIePowerSaveLevel == 3))) + PCIePowerSaveLevel = 1; +- DBGPRINT(RT_DEBUG_ERROR, ("====> rt30xx F Write 0x83 Command = 0x%x.\n", PCIePowerSaveLevel)); +- pAd->PCIePowerSaveLevel = (USHORT)PCIePowerSaveLevel; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("====> rt30xx F Write 0x83 Command = 0x%x.\n", ++ PCIePowerSaveLevel)); ++ pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; + // for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in + // PCI Configuration Space. Because firmware can't read PCI Configuration Space +- if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) && (pAd->Rt3xxHostLinkCtrl & 0x2)) +- { ++ if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) ++ && (pAd->Rt3xxHostLinkCtrl & 0x2)) { + LinkCtrlSetting = 1; + } +- DBGPRINT(RT_DEBUG_TRACE, ("====> rt30xxF LinkCtrlSetting = 0x%x.\n", LinkCtrlSetting)); +- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, LinkCtrlSetting); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> rt30xxF LinkCtrlSetting = 0x%x.\n", ++ LinkCtrlSetting)); ++ AsicSendCommandToMcu(pAd, 0x83, 0xff, ++ (UCHAR) PCIePowerSaveLevel, ++ LinkCtrlSetting); + } + } +- +- // Find Ralink PCIe Device's Express Capability Offset ++ // Find Ralink PCIe Device's Express Capability Offset + pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); + +- if (pos != 0) +- { +- // Ralink PCIe Device's Link Control Register Offset +- pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); +- pAd->RLnkCtrlConfiguration = (Configuration & 0x103); +- Configuration &= 0xfefc; +- Configuration |= (0x0); ++ if (pos != 0) { ++ // Ralink PCIe Device's Link Control Register Offset ++ pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); ++ pAd->RLnkCtrlConfiguration = (Configuration & 0x103); ++ Configuration &= 0xfefc; ++ Configuration |= (0x0); + #ifdef RT2860 + if ((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID)) +- { ++ || (pObj->DeviceID == NIC2790_PCIe_DEVICE_ID)) { + reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pos + PCI_EXP_LNKCTL, Configuration)); ++ pci_write_config_word(pObj->pci_dev, ++ pAd->RLnkCtrlOffset, reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pos + PCI_EXP_LNKCTL, Configuration)); + } + #endif // RT2860 // + +- RTMPFindHostPCIDev(pAd); +- if (pObj->parent_pci_dev) +- { +- USHORT vendor_id; ++ RTMPFindHostPCIDev(pAd); ++ if (pObj->parent_pci_dev) { ++ USHORT vendor_id; + +- pci_read_config_word(pObj->parent_pci_dev, PCI_VENDOR_ID, &vendor_id); +- vendor_id = le2cpu16(vendor_id); +- if (vendor_id == PCIBUS_INTEL_VENDOR) +- { +- bFindIntel = TRUE; +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); +- } +- +- // Find PCI-to-PCI Bridge Express Capability Offset +- pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); +- +- if (pos != 0) +- { +- BOOLEAN bChange = FALSE; +- // PCI-to-PCI Bridge Link Control Register Offset +- pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", +- pAd->HostLnkCtrlOffset, Configuration)); +- pAd->HostLnkCtrlConfiguration = (Configuration & 0x103); +- Configuration &= 0xfefc; +- Configuration |= (0x0); ++ pci_read_config_word(pObj->parent_pci_dev, ++ PCI_VENDOR_ID, &vendor_id); ++ vendor_id = le2cpu16(vendor_id); ++ if (vendor_id == PCIBUS_INTEL_VENDOR) { ++ bFindIntel = TRUE; ++ RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); ++ } ++ // Find PCI-to-PCI Bridge Express Capability Offset ++ pos = ++ pci_find_capability(pObj->parent_pci_dev, ++ PCI_CAP_ID_EXP); ++ ++ if (pos != 0) { ++ BOOLEAN bChange = FALSE; ++ // PCI-to-PCI Bridge Link Control Register Offset ++ pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->parent_pci_dev, ++ pAd->HostLnkCtrlOffset, ++ ®16); ++ Configuration = le2cpu16(reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Read (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, ++ Configuration)); ++ pAd->HostLnkCtrlConfiguration = ++ (Configuration & 0x103); ++ Configuration &= 0xfefc; ++ Configuration |= (0x0); + +- switch (pObj->DeviceID) +- { ++ switch (pObj->DeviceID) { + #ifdef RT2860 + case NIC2860_PCIe_DEVICE_ID: + case NIC2790_PCIe_DEVICE_ID: +@@ -757,98 +745,104 @@ VOID RTMPInitPCIeLinkCtrlValue( + case NIC3091_PCIe_DEVICE_ID: + case NIC3092_PCIe_DEVICE_ID: + if (bFindIntel == FALSE) +- bChange = TRUE; ++ bChange = TRUE; + break; + #endif // RT3090 // + default: + break; +- } ++ } + +- if (bChange) +- { +- reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Write (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", +- pAd->HostLnkCtrlOffset, Configuration)); ++ if (bChange) { ++ reg16 = cpu2le16(Configuration); ++ pci_write_config_word(pObj-> ++ parent_pci_dev, ++ pAd-> ++ HostLnkCtrlOffset, ++ reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Write (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, ++ Configuration)); ++ } ++ } else { ++ pAd->HostLnkCtrlOffset = 0; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: cannot find PCI-to-PCI Bridge PCI Express Capability!\n", ++ __func__)); + } + } +- else +- { +- pAd->HostLnkCtrlOffset = 0; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find PCI-to-PCI Bridge PCI Express Capability!\n", __func__)); +- } +- } +- } +- else +- { +- pAd->RLnkCtrlOffset = 0; +- pAd->HostLnkCtrlOffset = 0; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find Ralink PCIe Device's PCI Express Capability!\n", __func__)); +- } +- +- if (bFindIntel == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Doesn't find Intel PCI host controller. \n")); ++ } else { ++ pAd->RLnkCtrlOffset = 0; ++ pAd->HostLnkCtrlOffset = 0; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: cannot find Ralink PCIe Device's PCI Express Capability!\n", ++ __func__)); ++ } ++ ++ if (bFindIntel == FALSE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Doesn't find Intel PCI host controller. \n")); + // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff + pAd->PCIePowerSaveLevel = 0xff; + if ((pAd->RLnkCtrlOffset != 0) + #ifdef RT3090 +- && ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++ && ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) ++ || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) + #endif // RT3090 // +- ) +- { +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); ++ ) { ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ ®16); + Configuration = le2cpu16(reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink 30xx PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pAd->RLnkCtrlOffset, Configuration)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Read (Ralink 30xx PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); + pAd->RLnkCtrlConfiguration = (Configuration & 0x103); + Configuration &= 0xfefc; + Configuration |= (0x0); + reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); +- DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", +- pos + PCI_EXP_LNKCTL, Configuration)); ++ pci_write_config_word(pObj->pci_dev, ++ pAd->RLnkCtrlOffset, reg16); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", ++ pos + PCI_EXP_LNKCTL, Configuration)); + } + } + } + +-VOID RTMPFindHostPCIDev( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) + { +- USHORT reg16; +- UCHAR reg8; +- UINT DevFn; +- PPCI_DEV pPci_dev; +- POS_COOKIE pObj; ++ USHORT reg16; ++ UCHAR reg8; ++ UINT DevFn; ++ PPCI_DEV pPci_dev; ++ POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; + +- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); +- +- pObj->parent_pci_dev = NULL; +- if (pObj->pci_dev->bus->parent) +- { +- for (DevFn = 0; DevFn < 255; DevFn++) +- { +- pPci_dev = pci_get_slot(pObj->pci_dev->bus->parent, DevFn); +- if (pPci_dev) +- { +- pci_read_config_word(pPci_dev, PCI_CLASS_DEVICE, ®16); +- reg16 = le2cpu16(reg16); +- pci_read_config_byte(pPci_dev, PCI_CB_CARD_BUS, ®8); +- if ((reg16 == PCI_CLASS_BRIDGE_PCI) && +- (reg8 == pObj->pci_dev->bus->number)) +- { +- pObj->parent_pci_dev = pPci_dev; +- } +- } +- } +- } ++ DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); ++ ++ pObj->parent_pci_dev = NULL; ++ if (pObj->pci_dev->bus->parent) { ++ for (DevFn = 0; DevFn < 255; DevFn++) { ++ pPci_dev = ++ pci_get_slot(pObj->pci_dev->bus->parent, DevFn); ++ if (pPci_dev) { ++ pci_read_config_word(pPci_dev, PCI_CLASS_DEVICE, ++ ®16); ++ reg16 = le2cpu16(reg16); ++ pci_read_config_byte(pPci_dev, PCI_CB_CARD_BUS, ++ ®8); ++ if ((reg16 == PCI_CLASS_BRIDGE_PCI) ++ && (reg8 == pObj->pci_dev->bus->number)) { ++ pObj->parent_pci_dev = pPci_dev; ++ } ++ } ++ } ++ } + } + + /* +@@ -862,13 +856,11 @@ VOID RTMPFindHostPCIDev( + + ======================================================================== + */ +-VOID RTMPPCIeLinkCtrlValueRestore( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) ++VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + { +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; +- POS_COOKIE pObj; ++ USHORT PCIePowerSaveLevel, reg16; ++ USHORT Configuration; ++ POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +@@ -877,7 +869,7 @@ VOID RTMPPCIeLinkCtrlValueRestore( + + #ifdef RT2860 + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ || (pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; + #endif // RT2860 // + // Check PSControl Configuration +@@ -889,60 +881,62 @@ VOID RTMPPCIeLinkCtrlValueRestore( + + #ifdef RT3090 + if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++ || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) + return; + #endif // RT3090 // + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); + PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { +- DBGPRINT(RT_DEBUG_TRACE,("return \n")); ++ if ((PCIePowerSaveLevel & 0xff) == 0xff) { ++ DBGPRINT(RT_DEBUG_TRACE, ("return \n")); + return; + } + +- if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- if ((Configuration != 0) && +- (Configuration != 0xFFFF)) +- { +- Configuration &= 0xfefc; +- // If call from interface down, restore to orginial setting. +- if (Level == RESTORE_CLOSE) +- { +- Configuration |= pAd->HostLnkCtrlConfiguration; +- } +- else +- Configuration |= 0x0; +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Restore PCI host : offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Restore PCI host : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); +- } +- +- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- if ((Configuration != 0) && +- (Configuration != 0xFFFF)) +- { +- Configuration &= 0xfefc; ++ if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ++ Configuration); ++ if ((Configuration != 0) && (Configuration != 0xFFFF)) { ++ Configuration &= 0xfefc; ++ // If call from interface down, restore to orginial setting. ++ if (Level == RESTORE_CLOSE) { ++ Configuration |= pAd->HostLnkCtrlConfiguration; ++ } else ++ Configuration |= 0x0; ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, ++ pAd->HostLnkCtrlOffset, ++ Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Restore PCI host : offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, Configuration)); ++ } else ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Restore PCI host : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", ++ Configuration)); ++ } ++ ++ if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) { ++ PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ Configuration); ++ if ((Configuration != 0) && (Configuration != 0xFFFF)) { ++ Configuration &= 0xfefc; + // If call from interface down, restore to orginial setting. + if (Level == RESTORE_CLOSE) +- Configuration |= pAd->RLnkCtrlConfiguration; ++ Configuration |= pAd->RLnkCtrlConfiguration; + else + Configuration |= 0x0; +- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Restore Ralink : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("Restore Ralink : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration)); ++ PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Restore Ralink : offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); ++ } else ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Restore Ralink : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", ++ Configuration)); + } + +- DBGPRINT(RT_DEBUG_TRACE,("%s <===\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s <===\n", __func__)); + } + + /* +@@ -956,13 +950,11 @@ VOID RTMPPCIeLinkCtrlValueRestore( + + ======================================================================== + */ +-VOID RTMPPCIeLinkCtrlSetting( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Max) ++VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + { +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; +- POS_COOKIE pObj; ++ USHORT PCIePowerSaveLevel, reg16; ++ USHORT Configuration; ++ POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +@@ -971,7 +963,7 @@ VOID RTMPPCIeLinkCtrlSetting( + + #ifdef RT2860 + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ || (pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; + #endif // RT2860 // + // Check PSControl Configuration +@@ -983,94 +975,97 @@ VOID RTMPPCIeLinkCtrlSetting( + + #ifdef RT3090 + if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) +- ||(pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) ++ || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) ++ || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) + return; + #endif // RT3090 // +- if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) +- { +- DBGPRINT(RT_DEBUG_INFO, ("RTMPPCIePowerLinkCtrl return on fRTMP_PS_CAN_GO_SLEEP flag\n")); ++ if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) { ++ DBGPRINT(RT_DEBUG_INFO, ++ ("RTMPPCIePowerLinkCtrl return on fRTMP_PS_CAN_GO_SLEEP flag\n")); + return; + } + +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s===>\n", __func__)); + PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +- if ((PCIePowerSaveLevel&0xff) == 0xff) +- { +- DBGPRINT(RT_DEBUG_TRACE,("return \n")); ++ if ((PCIePowerSaveLevel & 0xff) == 0xff) { ++ DBGPRINT(RT_DEBUG_TRACE, ("return \n")); + return; + } +- PCIePowerSaveLevel = PCIePowerSaveLevel>>6; +- +- // Skip non-exist deice right away +- if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- switch (PCIePowerSaveLevel) +- { +- case 0: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 +- Configuration &= 0xfefc; +- break; +- case 1: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 +- Configuration &= 0xfefc; +- Configuration |= 0x1; +- break; +- case 2: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 +- Configuration &= 0xfefc; +- Configuration |= 0x3; +- break; +- case 3: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 +- Configuration &= 0xfefc; +- Configuration |= 0x103; +- break; ++ PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; ++ ++ // Skip non-exist deice right away ++ if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ++ Configuration); ++ switch (PCIePowerSaveLevel) { ++ case 0: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 ++ Configuration &= 0xfefc; ++ break; ++ case 1: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 ++ Configuration &= 0xfefc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ Configuration &= 0xfefc; ++ Configuration |= 0x3; ++ break; ++ case 3: ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ Configuration &= 0xfefc; ++ Configuration |= 0x103; ++ break; + } +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Write PCI host offset 0x%x = 0x%x\n", pAd->HostLnkCtrlOffset, Configuration)); ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ++ Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Write PCI host offset 0x%x = 0x%x\n", ++ pAd->HostLnkCtrlOffset, Configuration)); + } + +- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) +- { ++ if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) { + // first 2892 chip not allow to frequently set mode 3. will cause hang problem. + if (PCIePowerSaveLevel > Max) + PCIePowerSaveLevel = Max; + +- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- switch (PCIePowerSaveLevel) +- { +- case 0: +- // No PCI power safe +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . +- Configuration &= 0xfefc; +- break; +- case 1: +- // L0 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . +- Configuration &= 0xfefc; +- Configuration |= 0x1; +- break; +- case 2: +- // L0 and L1 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 +- Configuration &= 0xfefc; +- Configuration |= 0x3; +- break; +- case 3: +- // L0 , L1 and clock management. +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 +- Configuration &= 0xfefc; +- Configuration |= 0x103; +- pAd->bPCIclkOff = TRUE; +- break; ++ PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ Configuration); ++ switch (PCIePowerSaveLevel) { ++ case 0: ++ // No PCI power safe ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . ++ Configuration &= 0xfefc; ++ break; ++ case 1: ++ // L0 ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . ++ Configuration &= 0xfefc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ // L0 and L1 ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ Configuration &= 0xfefc; ++ Configuration |= 0x3; ++ break; ++ case 3: ++ // L0 , L1 and clock management. ++ // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ Configuration &= 0xfefc; ++ Configuration |= 0x103; ++ pAd->bPCIclkOff = TRUE; ++ break; + } +- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration); +- DBGPRINT(RT_DEBUG_TRACE, ("Write Ralink device : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration)); ++ PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ Configuration); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Write Ralink device : offset 0x%x = 0x%x\n", ++ pAd->RLnkCtrlOffset, Configuration)); + } + +- DBGPRINT(RT_DEBUG_TRACE,("RTMPPCIePowerLinkCtrl <==============\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPPCIePowerLinkCtrl <==============\n")); + } + + /* +@@ -1081,15 +1076,14 @@ VOID RTMPPCIeLinkCtrlSetting( + + ======================================================================== + */ +-VOID RTMPrt3xSetPCIePowerLinkCtrl( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + { + +- ULONG HostConfiguration = 0; +- ULONG Configuration; +- POS_COOKIE pObj; +- INT pos; +- USHORT reg16; ++ ULONG HostConfiguration = 0; ++ ULONG Configuration; ++ POS_COOKIE pObj; ++ INT pos; ++ USHORT reg16; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +@@ -1101,28 +1095,28 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + return; + RTMPFindHostPCIDev(pAd); +- if (pObj->parent_pci_dev) +- { ++ if (pObj->parent_pci_dev) { + // Find PCI-to-PCI Bridge Express Capability Offset + pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); + +- if (pos != 0) +- { ++ if (pos != 0) { + pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + } +- // If configurared to turn on L1. +- HostConfiguration = 0; +- if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); ++ // If configurared to turn on L1. ++ HostConfiguration = 0; ++ if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) { ++ DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); + + // Skip non-exist deice right away +- if ((pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ if ((pAd->HostLnkCtrlOffset != 0)) { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, ++ pAd->HostLnkCtrlOffset, ++ HostConfiguration); + // Prepare Configuration to write to Host + HostConfiguration |= 0x3; +- PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, ++ pAd->HostLnkCtrlOffset, ++ HostConfiguration); + pAd->Rt3xxHostLinkCtrl = HostConfiguration; + // Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. + // Fix HostConfiguration bit0:1 = 0x3 for later use. +@@ -1132,14 +1126,14 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + "Host device L1/L0s Value = 0x%lx\n", + HostConfiguration)); + } +- } +- else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) +- { ++ } else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == ++ 1) { + + // Skip non-exist deice right away +- if ((pAd->HostLnkCtrlOffset != 0)) +- { +- PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, HostConfiguration); ++ if ((pAd->HostLnkCtrlOffset != 0)) { ++ PCI_REG_READ_WORD(pObj->parent_pci_dev, ++ pAd->HostLnkCtrlOffset, ++ HostConfiguration); + pAd->Rt3xxHostLinkCtrl = HostConfiguration; + HostConfiguration &= 0x3; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1148,49 +1142,49 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl( + HostConfiguration)); + } + } +- } ++ } + // Prepare to write Ralink setting. + // Find Ralink PCIe Device's Express Capability Offset + pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); + +- if (pos != 0) +- { +- // Ralink PCIe Device's Link Control Register Offset +- pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; +- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16); +- Configuration = le2cpu16(reg16); ++ if (pos != 0) { ++ // Ralink PCIe Device's Link Control Register Offset ++ pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; ++ pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ ®16); ++ Configuration = le2cpu16(reg16); + DBGPRINT(RT_DEBUG_TRACE, + ("Read (Ralink PCIe Link Control Register) " + "offset 0x%x = 0x%lx\n", + pAd->RLnkCtrlOffset, Configuration)); + Configuration |= 0x100; + if ((pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == 1) +- || (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1)) +- { +- switch(HostConfiguration) +- { +- case 0: +- Configuration &= 0xffffffc; +- break; +- case 1: +- Configuration &= 0xffffffc; +- Configuration |= 0x1; +- break; +- case 2: +- Configuration &= 0xffffffc; +- Configuration |= 0x2; +- break; +- case 3: +- Configuration |= 0x3; +- break; ++ || (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1)) { ++ switch (HostConfiguration) { ++ case 0: ++ Configuration &= 0xffffffc; ++ break; ++ case 1: ++ Configuration &= 0xffffffc; ++ Configuration |= 0x1; ++ break; ++ case 2: ++ Configuration &= 0xffffffc; ++ Configuration |= 0x2; ++ break; ++ case 3: ++ Configuration |= 0x3; ++ break; + } + } + reg16 = cpu2le16(Configuration); +- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16); ++ pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ++ reg16); + pAd->Rt3xxRalinkLinkCtrl = Configuration; + DBGPRINT(RT_DEBUG_TRACE, + ("PSM :Write Ralink device L1/L0s Value = 0x%lx\n", + Configuration)); + } +- DBGPRINT(RT_DEBUG_INFO,("PSM :RTMPrt3xSetPCIePowerLinkCtrl <==============\n")); ++ DBGPRINT(RT_DEBUG_INFO, ++ ("PSM :RTMPrt3xSetPCIePowerLinkCtrl <==============\n")); + } +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index d57013f..fd577e0 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -28,128 +28,114 @@ + #include + #include "rt_config.h" + +-ULONG RTDebugLevel = RT_DEBUG_ERROR; +- ++ULONG RTDebugLevel = RT_DEBUG_ERROR; + + // for wireless system event message + char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { + // system status event +- "had associated successfully", /* IW_ASSOC_EVENT_FLAG */ +- "had disassociated", /* IW_DISASSOC_EVENT_FLAG */ +- "had deauthenticated", /* IW_DEAUTH_EVENT_FLAG */ +- "had been aged-out and disassociated", /* IW_AGEOUT_EVENT_FLAG */ +- "occurred CounterMeasures attack", /* IW_COUNTER_MEASURES_EVENT_FLAG */ +- "occurred replay counter different in Key Handshaking", /* IW_REPLAY_COUNTER_DIFF_EVENT_FLAG */ +- "occurred RSNIE different in Key Handshaking", /* IW_RSNIE_DIFF_EVENT_FLAG */ +- "occurred MIC different in Key Handshaking", /* IW_MIC_DIFF_EVENT_FLAG */ +- "occurred ICV error in RX", /* IW_ICV_ERROR_EVENT_FLAG */ +- "occurred MIC error in RX", /* IW_MIC_ERROR_EVENT_FLAG */ +- "Group Key Handshaking timeout", /* IW_GROUP_HS_TIMEOUT_EVENT_FLAG */ +- "Pairwise Key Handshaking timeout", /* IW_PAIRWISE_HS_TIMEOUT_EVENT_FLAG */ +- "RSN IE sanity check failure", /* IW_RSNIE_SANITY_FAIL_EVENT_FLAG */ +- "set key done in WPA/WPAPSK", /* IW_SET_KEY_DONE_WPA1_EVENT_FLAG */ +- "set key done in WPA2/WPA2PSK", /* IW_SET_KEY_DONE_WPA2_EVENT_FLAG */ +- "connects with our wireless client", /* IW_STA_LINKUP_EVENT_FLAG */ +- "disconnects with our wireless client", /* IW_STA_LINKDOWN_EVENT_FLAG */ +- "scan completed" /* IW_SCAN_COMPLETED_EVENT_FLAG */ +- "scan terminate!! Busy!! Enqueue fail!!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ +- }; ++ "had associated successfully", /* IW_ASSOC_EVENT_FLAG */ ++ "had disassociated", /* IW_DISASSOC_EVENT_FLAG */ ++ "had deauthenticated", /* IW_DEAUTH_EVENT_FLAG */ ++ "had been aged-out and disassociated", /* IW_AGEOUT_EVENT_FLAG */ ++ "occurred CounterMeasures attack", /* IW_COUNTER_MEASURES_EVENT_FLAG */ ++ "occurred replay counter different in Key Handshaking", /* IW_REPLAY_COUNTER_DIFF_EVENT_FLAG */ ++ "occurred RSNIE different in Key Handshaking", /* IW_RSNIE_DIFF_EVENT_FLAG */ ++ "occurred MIC different in Key Handshaking", /* IW_MIC_DIFF_EVENT_FLAG */ ++ "occurred ICV error in RX", /* IW_ICV_ERROR_EVENT_FLAG */ ++ "occurred MIC error in RX", /* IW_MIC_ERROR_EVENT_FLAG */ ++ "Group Key Handshaking timeout", /* IW_GROUP_HS_TIMEOUT_EVENT_FLAG */ ++ "Pairwise Key Handshaking timeout", /* IW_PAIRWISE_HS_TIMEOUT_EVENT_FLAG */ ++ "RSN IE sanity check failure", /* IW_RSNIE_SANITY_FAIL_EVENT_FLAG */ ++ "set key done in WPA/WPAPSK", /* IW_SET_KEY_DONE_WPA1_EVENT_FLAG */ ++ "set key done in WPA2/WPA2PSK", /* IW_SET_KEY_DONE_WPA2_EVENT_FLAG */ ++ "connects with our wireless client", /* IW_STA_LINKUP_EVENT_FLAG */ ++ "disconnects with our wireless client", /* IW_STA_LINKDOWN_EVENT_FLAG */ ++ "scan completed" /* IW_SCAN_COMPLETED_EVENT_FLAG */ ++ "scan terminate!! Busy!! Enqueue fail!!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ ++}; + + // for wireless IDS_spoof_attack event message + char const *pWirelessSpoofEventText[IW_SPOOF_EVENT_TYPE_NUM] = { +- "detected conflict SSID", /* IW_CONFLICT_SSID_EVENT_FLAG */ +- "detected spoofed association response", /* IW_SPOOF_ASSOC_RESP_EVENT_FLAG */ +- "detected spoofed reassociation responses", /* IW_SPOOF_REASSOC_RESP_EVENT_FLAG */ +- "detected spoofed probe response", /* IW_SPOOF_PROBE_RESP_EVENT_FLAG */ +- "detected spoofed beacon", /* IW_SPOOF_BEACON_EVENT_FLAG */ +- "detected spoofed disassociation", /* IW_SPOOF_DISASSOC_EVENT_FLAG */ +- "detected spoofed authentication", /* IW_SPOOF_AUTH_EVENT_FLAG */ +- "detected spoofed deauthentication", /* IW_SPOOF_DEAUTH_EVENT_FLAG */ +- "detected spoofed unknown management frame", /* IW_SPOOF_UNKNOWN_MGMT_EVENT_FLAG */ +- "detected replay attack" /* IW_REPLAY_ATTACK_EVENT_FLAG */ +- }; ++ "detected conflict SSID", /* IW_CONFLICT_SSID_EVENT_FLAG */ ++ "detected spoofed association response", /* IW_SPOOF_ASSOC_RESP_EVENT_FLAG */ ++ "detected spoofed reassociation responses", /* IW_SPOOF_REASSOC_RESP_EVENT_FLAG */ ++ "detected spoofed probe response", /* IW_SPOOF_PROBE_RESP_EVENT_FLAG */ ++ "detected spoofed beacon", /* IW_SPOOF_BEACON_EVENT_FLAG */ ++ "detected spoofed disassociation", /* IW_SPOOF_DISASSOC_EVENT_FLAG */ ++ "detected spoofed authentication", /* IW_SPOOF_AUTH_EVENT_FLAG */ ++ "detected spoofed deauthentication", /* IW_SPOOF_DEAUTH_EVENT_FLAG */ ++ "detected spoofed unknown management frame", /* IW_SPOOF_UNKNOWN_MGMT_EVENT_FLAG */ ++ "detected replay attack" /* IW_REPLAY_ATTACK_EVENT_FLAG */ ++}; + + // for wireless IDS_flooding_attack event message + char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { +- "detected authentication flooding", /* IW_FLOOD_AUTH_EVENT_FLAG */ +- "detected association request flooding", /* IW_FLOOD_ASSOC_REQ_EVENT_FLAG */ +- "detected reassociation request flooding", /* IW_FLOOD_REASSOC_REQ_EVENT_FLAG */ +- "detected probe request flooding", /* IW_FLOOD_PROBE_REQ_EVENT_FLAG */ +- "detected disassociation flooding", /* IW_FLOOD_DISASSOC_EVENT_FLAG */ +- "detected deauthentication flooding", /* IW_FLOOD_DEAUTH_EVENT_FLAG */ +- "detected 802.1x eap-request flooding" /* IW_FLOOD_EAP_REQ_EVENT_FLAG */ +- }; ++ "detected authentication flooding", /* IW_FLOOD_AUTH_EVENT_FLAG */ ++ "detected association request flooding", /* IW_FLOOD_ASSOC_REQ_EVENT_FLAG */ ++ "detected reassociation request flooding", /* IW_FLOOD_REASSOC_REQ_EVENT_FLAG */ ++ "detected probe request flooding", /* IW_FLOOD_PROBE_REQ_EVENT_FLAG */ ++ "detected disassociation flooding", /* IW_FLOOD_DISASSOC_EVENT_FLAG */ ++ "detected deauthentication flooding", /* IW_FLOOD_DEAUTH_EVENT_FLAG */ ++ "detected 802.1x eap-request flooding" /* IW_FLOOD_EAP_REQ_EVENT_FLAG */ ++}; + + /* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) ++VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout) + { +- timeout = ((timeout*OS_HZ) / 1000); ++ timeout = ((timeout * OS_HZ) / 1000); + pTimer->expires = jiffies + timeout; + add_timer(pTimer); + } + + /* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ +-VOID RTMP_OS_Init_Timer( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN TIMER_FUNCTION function, +- IN PVOID data) ++VOID RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++ IN NDIS_MINIPORT_TIMER * pTimer, ++ IN TIMER_FUNCTION function, IN PVOID data) + { + init_timer(pTimer); +- pTimer->data = (unsigned long)data; +- pTimer->function = function; ++ pTimer->data = (unsigned long)data; ++ pTimer->function = function; + } + +- +-VOID RTMP_OS_Add_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) ++VOID RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout) + { + if (timer_pending(pTimer)) + return; + +- timeout = ((timeout*OS_HZ) / 1000); ++ timeout = ((timeout * OS_HZ) / 1000); + pTimer->expires = jiffies + timeout; + add_timer(pTimer); + } + +-VOID RTMP_OS_Mod_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout) ++VOID RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout) + { +- timeout = ((timeout*OS_HZ) / 1000); ++ timeout = ((timeout * OS_HZ) / 1000); + mod_timer(pTimer, jiffies + timeout); + } + +-VOID RTMP_OS_Del_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- OUT BOOLEAN *pCancelled) ++VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ OUT BOOLEAN * pCancelled) + { +- if (timer_pending(pTimer)) +- { ++ if (timer_pending(pTimer)) { + *pCancelled = del_timer_sync(pTimer); +- } +- else +- { ++ } else { + *pCancelled = TRUE; + } + + } + +-VOID RTMP_OS_Release_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PQUEUE_ENTRY pEntry) ++VOID RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry) + { + //RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); + } + + // Unify all delay routine by using udelay +-VOID RTMPusecDelay( +- IN ULONG usec) ++VOID RTMPusecDelay(IN ULONG usec) + { +- ULONG i; ++ ULONG i; + + for (i = 0; i < (usec / 50); i++) + udelay(50); +@@ -158,16 +144,13 @@ VOID RTMPusecDelay( + udelay(usec % 50); + } + +-void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time) ++void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time) + { + time->u.LowPart = jiffies; + } + + // pAd MUST allow to be NULL +-NDIS_STATUS os_alloc_mem( +- IN RTMP_ADAPTER *pAd, +- OUT UCHAR **mem, +- IN ULONG size) ++NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, OUT UCHAR ** mem, IN ULONG size) + { + *mem = (PUCHAR) kmalloc(size, GFP_ATOMIC); + if (*mem) +@@ -177,9 +160,7 @@ NDIS_STATUS os_alloc_mem( + } + + // pAd MUST allow to be NULL +-NDIS_STATUS os_free_mem( +- IN PRTMP_ADAPTER pAd, +- IN PVOID mem) ++NDIS_STATUS os_free_mem(IN PRTMP_ADAPTER pAd, IN PVOID mem) + { + + ASSERT(mem); +@@ -187,80 +168,64 @@ NDIS_STATUS os_free_mem( + return (NDIS_STATUS_SUCCESS); + } + +- +- +- +-PNDIS_PACKET RtmpOSNetPktAlloc( +- IN RTMP_ADAPTER *pAd, +- IN int size) ++PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) + { + struct sk_buff *skb; +- /* Add 2 more bytes for ip header alignment*/ +- skb = dev_alloc_skb(size+2); ++ /* Add 2 more bytes for ip header alignment */ ++ skb = dev_alloc_skb(size + 2); + +- return ((PNDIS_PACKET)skb); ++ return ((PNDIS_PACKET) skb); + } + +- +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length) ++PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length) + { + struct sk_buff *pkt; + + pkt = dev_alloc_skb(Length); + +- if (pkt == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate frag rx %ld size packet\n",Length)); ++ if (pkt == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("can't allocate frag rx %ld size packet\n", Length)); + } + +- if (pkt) +- { ++ if (pkt) { + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); + } + + return (PNDIS_PACKET) pkt; + } + +- +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress) ++PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress) + { + struct sk_buff *pkt; + + pkt = dev_alloc_skb(Length); + +- if (pkt == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate tx %ld size packet\n",Length)); ++ if (pkt == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("can't allocate tx %ld size packet\n", Length)); + } + +- if (pkt) +- { ++ if (pkt) { + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); + *VirtualAddress = (PVOID) pkt->data; +- } +- else +- { ++ } else { + *VirtualAddress = (PVOID) NULL; + } + + return (PNDIS_PACKET) pkt; + } + +- +-VOID build_tx_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, +- IN ULONG FrameLen) ++VOID build_tx_packet(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pFrame, IN ULONG FrameLen) + { + +- struct sk_buff *pTxPkt; ++ struct sk_buff *pTxPkt; + + ASSERT(pPacket); + pTxPkt = RTPKT_TO_OSPKT(pPacket); +@@ -268,40 +233,36 @@ VOID build_tx_packet( + NdisMoveMemory(skb_put(pTxPkt, FrameLen), pFrame, FrameLen); + } + +-VOID RTMPFreeAdapter( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + { +- POS_COOKIE os_cookie; ++ POS_COOKIE os_cookie; + int index; + +- os_cookie=(POS_COOKIE)pAd->OS_Cookie; ++ os_cookie = (POS_COOKIE) pAd->OS_Cookie; + + if (pAd->BeaconBuf) +- kfree(pAd->BeaconBuf); +- ++ kfree(pAd->BeaconBuf); + + NdisFreeSpinLock(&pAd->MgmtRingLock); + + #ifdef RTMP_MAC_PCI + NdisFreeSpinLock(&pAd->RxRingLock); + #ifdef RT3090 +-NdisFreeSpinLock(&pAd->McuCmdLock); ++ NdisFreeSpinLock(&pAd->McuCmdLock); + #endif // RT3090 // + #endif // RTMP_MAC_PCI // + +- for (index =0 ; index < NUM_OF_TX_RING; index++) +- { +- NdisFreeSpinLock(&pAd->TxSwQueueLock[index]); ++ for (index = 0; index < NUM_OF_TX_RING; index++) { ++ NdisFreeSpinLock(&pAd->TxSwQueueLock[index]); + NdisFreeSpinLock(&pAd->DeQueueLock[index]); + pAd->DeQueueRunning[index] = FALSE; + } + + NdisFreeSpinLock(&pAd->irq_lock); + +- +- vfree(pAd); // pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); ++ vfree(pAd); // pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); + if (os_cookie) +- kfree(os_cookie); ++ kfree(os_cookie); + } + + BOOLEAN OS_Need_Clone_Packet(void) +@@ -309,8 +270,6 @@ BOOLEAN OS_Need_Clone_Packet(void) + return (FALSE); + } + +- +- + /* + ======================================================================== + +@@ -333,11 +292,10 @@ BOOLEAN OS_Need_Clone_Packet(void) + + ======================================================================== + */ +-NDIS_STATUS RTMPCloneNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET *ppOutPacket) ++NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN pInsAMSDUHdr, ++ IN PNDIS_PACKET pInPacket, ++ OUT PNDIS_PACKET * ppOutPacket) + { + + struct sk_buff *pkt; +@@ -348,16 +306,15 @@ NDIS_STATUS RTMPCloneNdisPacket( + // 1. Allocate a packet + pkt = dev_alloc_skb(2048); + +- if (pkt == NULL) +- { ++ if (pkt == NULL) { + return NDIS_STATUS_FAILURE; + } + +- skb_put(pkt, GET_OS_PKT_LEN(pInPacket)); +- NdisMoveMemory(pkt->data, GET_OS_PKT_DATAPTR(pInPacket), GET_OS_PKT_LEN(pInPacket)); ++ skb_put(pkt, GET_OS_PKT_LEN(pInPacket)); ++ NdisMoveMemory(pkt->data, GET_OS_PKT_DATAPTR(pInPacket), ++ GET_OS_PKT_LEN(pInPacket)); + *ppOutPacket = OSPKT_TO_RTPKT(pkt); + +- + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); + + printk("###Clone###\n"); +@@ -365,42 +322,40 @@ NDIS_STATUS RTMPCloneNdisPacket( + return NDIS_STATUS_SUCCESS; + } + +- + // the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() +-NDIS_STATUS RTMPAllocateNdisPacket( +- IN PRTMP_ADAPTER pAd, +- OUT PNDIS_PACKET *ppPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, +- IN UINT DataLen) ++NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++ OUT PNDIS_PACKET * ppPacket, ++ IN PUCHAR pHeader, ++ IN UINT HeaderLen, ++ IN PUCHAR pData, IN UINT DataLen) + { +- PNDIS_PACKET pPacket; ++ PNDIS_PACKET pPacket; + ASSERT(pData); + ASSERT(DataLen); + + // 1. Allocate a packet +- pPacket = (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + RTMP_PKT_TAIL_PADDING); +- if (pPacket == NULL) +- { ++ pPacket = ++ (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + ++ RTMP_PKT_TAIL_PADDING); ++ if (pPacket == NULL) { + *ppPacket = NULL; + #ifdef DEBUG + printk("RTMPAllocateNdisPacket Fail\n\n"); + #endif + return NDIS_STATUS_FAILURE; + } +- + // 2. clone the frame content + if (HeaderLen > 0) + NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket), pHeader, HeaderLen); + if (DataLen > 0) +- NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket) + HeaderLen, pData, DataLen); ++ NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket) + HeaderLen, pData, ++ DataLen); + + // 3. update length of packet +- skb_put(GET_OS_PKT_TYPE(pPacket), HeaderLen+DataLen); ++ skb_put(GET_OS_PKT_TYPE(pPacket), HeaderLen + DataLen); + + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +-// printk("%s : pPacket = %p, len = %d\n", __func__, pPacket, GET_OS_PKT_LEN(pPacket)); ++// printk("%s : pPacket = %p, len = %d\n", __func__, pPacket, GET_OS_PKT_LEN(pPacket)); + *ppPacket = pPacket; + return NDIS_STATUS_SUCCESS; + } +@@ -412,38 +367,30 @@ NDIS_STATUS RTMPAllocateNdisPacket( + corresponding NDIS_BUFFER and allocated memory. + ======================================================================== + */ +-VOID RTMPFreeNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { + dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); + } + +- + // IRQL = DISPATCH_LEVEL + // NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same +-// scatter gather buffer +-NDIS_STATUS Sniff2BytesFromNdisBuffer( +- IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, +- OUT PUCHAR pByte1) ++// scatter gather buffer ++NDIS_STATUS Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++ IN UCHAR DesiredOffset, ++ OUT PUCHAR pByte0, OUT PUCHAR pByte1) + { +- *pByte0 = *(PUCHAR)(pFirstBuffer + DesiredOffset); +- *pByte1 = *(PUCHAR)(pFirstBuffer + DesiredOffset + 1); ++ *pByte0 = *(PUCHAR) (pFirstBuffer + DesiredOffset); ++ *pByte1 = *(PUCHAR) (pFirstBuffer + DesiredOffset + 1); + + return NDIS_STATUS_SUCCESS; + } + +- +-void RTMP_QueryPacketInfo( +- IN PNDIS_PACKET pPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen) ++void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, ++ OUT PACKET_INFO * pPacketInfo, ++ OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen) + { + pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); ++ pPacketInfo->pFirstBuffer = (PNDIS_BUFFER) GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + +@@ -451,30 +398,26 @@ void RTMP_QueryPacketInfo( + *pSrcBufLen = GET_OS_PKT_LEN(pPacket); + } + +-void RTMP_QueryNextPacketInfo( +- IN PNDIS_PACKET *ppPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen) ++void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, ++ OUT PACKET_INFO * pPacketInfo, ++ OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen) + { + PNDIS_PACKET pPacket = NULL; + + if (*ppPacket) + pPacket = GET_OS_PKT_NEXT(*ppPacket); + +- if (pPacket) +- { ++ if (pPacket) { + pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = (PNDIS_BUFFER)GET_OS_PKT_DATAPTR(pPacket); ++ pPacketInfo->pFirstBuffer = ++ (PNDIS_BUFFER) GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + + *pSrcBufVA = GET_OS_PKT_DATAPTR(pPacket); + *pSrcBufLen = GET_OS_PKT_LEN(pPacket); + *ppPacket = GET_OS_PKT_NEXT(pPacket); +- } +- else +- { ++ } else { + pPacketInfo->BufferCount = 0; + pPacketInfo->pFirstBuffer = NULL; + pPacketInfo->PhysicalBufferCount = 0; +@@ -486,24 +429,19 @@ void RTMP_QueryNextPacketInfo( + } + } + +- +-PNDIS_PACKET DuplicatePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID) ++PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID) + { +- struct sk_buff *skb; +- PNDIS_PACKET pRetPacket = NULL; +- USHORT DataSize; +- UCHAR *pData; ++ struct sk_buff *skb; ++ PNDIS_PACKET pRetPacket = NULL; ++ USHORT DataSize; ++ UCHAR *pData; + + DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); + pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); + +- + skb = skb_clone(RTPKT_TO_OSPKT(pPacket), MEM_ALLOC_FLAG); +- if (skb) +- { ++ if (skb) { + skb->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); + pRetPacket = OSPKT_TO_RTPKT(skb); + } +@@ -512,20 +450,17 @@ PNDIS_PACKET DuplicatePacket( + + } + +-PNDIS_PACKET duplicate_pkt( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID) ++PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN ULONG DataSize, IN UCHAR FromWhichBSSID) + { +- struct sk_buff *skb; +- PNDIS_PACKET pPacket = NULL; +- ++ struct sk_buff *skb; ++ PNDIS_PACKET pPacket = NULL; + +- if ((skb = __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) +- { ++ if ((skb = ++ __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) { + skb_reserve(skb, 2); + NdisMoveMemory(skb->tail, pHeader802_3, HdrLen); + skb_put(skb, HdrLen); +@@ -538,24 +473,22 @@ PNDIS_PACKET duplicate_pkt( + return pPacket; + } + +- + #define TKIP_TX_MIC_SIZE 8 +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket) + { +- struct sk_buff *skb, *newskb; +- ++ struct sk_buff *skb, *newskb; + + skb = RTPKT_TO_OSPKT(pPacket); +- if (skb_tailroom(skb) < TKIP_TX_MIC_SIZE) +- { ++ if (skb_tailroom(skb) < TKIP_TX_MIC_SIZE) { + // alloc a new skb and copy the packet +- newskb = skb_copy_expand(skb, skb_headroom(skb), TKIP_TX_MIC_SIZE, GFP_ATOMIC); ++ newskb = ++ skb_copy_expand(skb, skb_headroom(skb), TKIP_TX_MIC_SIZE, ++ GFP_ATOMIC); + dev_kfree_skb_any(skb); +- if (newskb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Extend Tx.MIC for packet failed!, dropping packet!\n")); ++ if (newskb == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Extend Tx.MIC for packet failed!, dropping packet!\n")); + return NULL; + } + skb = newskb; +@@ -564,17 +497,12 @@ PNDIS_PACKET duplicate_pkt_with_TKIP_MIC( + return OSPKT_TO_RTPKT(skb); + } + +- +- +- +-PNDIS_PACKET ClonePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize) ++PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pData, IN ULONG DataSize) + { +- struct sk_buff *pRxPkt; +- struct sk_buff *pClonedPkt; ++ struct sk_buff *pRxPkt; ++ struct sk_buff *pClonedPkt; + + ASSERT(pPacket); + pRxPkt = RTPKT_TO_OSPKT(pPacket); +@@ -582,13 +510,12 @@ PNDIS_PACKET ClonePacket( + // clone the packet + pClonedPkt = skb_clone(pRxPkt, MEM_ALLOC_FLAG); + +- if (pClonedPkt) +- { +- // set the correct dataptr and data len +- pClonedPkt->dev = pRxPkt->dev; +- pClonedPkt->data = pData; +- pClonedPkt->len = DataSize; +- pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len; ++ if (pClonedPkt) { ++ // set the correct dataptr and data len ++ pClonedPkt->dev = pRxPkt->dev; ++ pClonedPkt->data = pData; ++ pClonedPkt->len = DataSize; ++ pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len; + ASSERT(DataSize < 1530); + } + return pClonedPkt; +@@ -597,12 +524,10 @@ PNDIS_PACKET ClonePacket( + // + // change OS packet DataPtr and DataLen + // +-void update_os_packet_info( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++void update_os_packet_info(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- struct sk_buff *pOSPkt; ++ struct sk_buff *pOSPkt; + + ASSERT(pRxBlk->pRxPacket); + pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); +@@ -613,14 +538,12 @@ void update_os_packet_info( + pOSPkt->tail = pOSPkt->data + pOSPkt->len; + } + +- +-void wlan_802_11_to_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID) ++void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, ++ IN PUCHAR pHeader802_3, ++ IN UCHAR FromWhichBSSID) + { +- struct sk_buff *pOSPkt; ++ struct sk_buff *pOSPkt; + + ASSERT(pRxBlk->pRxPacket); + ASSERT(pHeader802_3); +@@ -637,34 +560,30 @@ void wlan_802_11_to_802_3_packet( + // + // + +- NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, LENGTH_802_3); +- } +- +- ++ NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, ++ LENGTH_802_3); ++} + +-void announce_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { + +- struct sk_buff *pRxPkt; ++ struct sk_buff *pRxPkt; + + ASSERT(pPacket); + + pRxPkt = RTPKT_TO_OSPKT(pPacket); + +- /* Push up the protocol stack */ ++ /* Push up the protocol stack */ + pRxPkt->protocol = eth_type_trans(pRxPkt, pRxPkt->dev); + + netif_rx(pRxPkt); + } + +- + PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg) ++rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST * sg) + { + sg->NumberOfElements = 1; +- sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); ++ sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); + sg->Elements[0].Length = GET_OS_PKT_LEN(pPacket); + return (sg); + } +@@ -678,13 +597,13 @@ void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen) + return; + + pt = pSrcBufVA; +- printk("%s: %p, len = %d\n",str, pSrcBufVA, SrcBufLen); +- for (x=0; x= event_table_len) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : The event(%0x02x) is not valid.\n", __func__, event)); ++ if (event >= event_table_len) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s : The event(%0x02x) is not valid.\n", __func__, ++ event)); + return; + } +- + //Allocate memory and copy the msg. +- if((pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC)) != NULL) +- { ++ if ((pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC)) != NULL) { + //Prepare the payload + memset(pBuf, 0, IW_CUSTOM_MAX_LEN); + + pBufPtr = pBuf; + + if (pAddr) +- pBufPtr += sprintf(pBufPtr, "(RT2860) STA(%02x:%02x:%02x:%02x:%02x:%02x) ", PRINT_MAC(pAddr)); ++ pBufPtr += ++ sprintf(pBufPtr, ++ "(RT2860) STA(%02x:%02x:%02x:%02x:%02x:%02x) ", ++ PRINT_MAC(pAddr)); + else if (BssIdx < MAX_MBSSID_NUM) +- pBufPtr += sprintf(pBufPtr, "(RT2860) BSS(wlan%d) ", BssIdx); ++ pBufPtr += ++ sprintf(pBufPtr, "(RT2860) BSS(wlan%d) ", BssIdx); + else + pBufPtr += sprintf(pBufPtr, "(RT2860) "); + + if (type == IW_SYS_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s", pWirelessSysEventText[event]); ++ pBufPtr += ++ sprintf(pBufPtr, "%s", ++ pWirelessSysEventText[event]); + else if (type == IW_SPOOF_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s (RSSI=%d)", pWirelessSpoofEventText[event], Rssi); ++ pBufPtr += ++ sprintf(pBufPtr, "%s (RSSI=%d)", ++ pWirelessSpoofEventText[event], Rssi); + else if (type == IW_FLOOD_EVENT_FLAG_START) +- pBufPtr += sprintf(pBufPtr, "%s", pWirelessFloodEventText[event]); ++ pBufPtr += ++ sprintf(pBufPtr, "%s", ++ pWirelessFloodEventText[event]); + else + pBufPtr += sprintf(pBufPtr, "%s", "unknown event"); + + pBufPtr[pBufPtr - pBuf] = '\0'; + BufLen = pBufPtr - pBuf; + +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, (PUCHAR)pBuf, BufLen); ++ RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, ++ (PUCHAR) pBuf, BufLen); + //DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __func__, pBuf)); + + kfree(pBuf); +- } +- else +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Can't allocate memory for wireless event.\n", __func__)); ++ } else ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s : Can't allocate memory for wireless event.\n", ++ __func__)); + } + +-void send_monitor_packets( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) ++void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { +- struct sk_buff *pOSPkt; +- wlan_ng_prism2_header *ph; +- int rate_index = 0; +- USHORT header_len = 0; +- UCHAR temp_header[40] = {0}; +- +- u_int32_t ralinkrate[256] = {2,4,11,22, 12,18,24,36,48,72,96, 108, 109, 110, 111, 112, 13, 26, 39, 52,78,104, 117, 130, 26, 52, 78,104, 156, 208, 234, 260, 27, 54,81,108,162, 216, 243, 270, // Last 38 +- 54, 108, 162, 216, 324, 432, 486, 540, 14, 29, 43, 57, 87, 115, 130, 144, 29, 59,87,115, 173, 230,260, 288, 30, 60,90,120,180,240,270,300,60,120,180,240,360,480,540,600, 0,1,2,3,4,5,6,7,8,9,10, +- 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80}; +- ++ struct sk_buff *pOSPkt; ++ wlan_ng_prism2_header *ph; ++ int rate_index = 0; ++ USHORT header_len = 0; ++ UCHAR temp_header[40] = { 0 }; ++ ++ u_int32_t ralinkrate[256] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 109, 110, 111, 112, 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, 27, 54, 81, 108, 162, 216, 243, 270, // Last 38 ++ 54, 108, 162, 216, 324, 432, 486, 540, 14, 29, 43, 57, 87, 115, ++ 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, 30, 60, 90, ++ 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, ++ 600, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ++ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ++ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, ++ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, ++ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, ++ 72, 73, 74, 75, 76, 77, 78, 79, 80 ++ }; + +- ASSERT(pRxBlk->pRxPacket); +- if (pRxBlk->DataSize < 10) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too small! (%d)\n", __func__, pRxBlk->DataSize)); ++ ASSERT(pRxBlk->pRxPacket); ++ if (pRxBlk->DataSize < 10) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s : Size is too small! (%d)\n", __func__, ++ pRxBlk->DataSize)); + goto err_free_sk_buff; +- } ++ } + +- if (pRxBlk->DataSize + sizeof(wlan_ng_prism2_header) > RX_BUFFER_AGGRESIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too large! (%zu)\n", __func__, pRxBlk->DataSize + sizeof(wlan_ng_prism2_header))); ++ if (pRxBlk->DataSize + sizeof(wlan_ng_prism2_header) > ++ RX_BUFFER_AGGRESIZE) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s : Size is too large! (%zu)\n", __func__, ++ pRxBlk->DataSize + sizeof(wlan_ng_prism2_header))); + goto err_free_sk_buff; +- } ++ } + +- pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); ++ pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket); + pOSPkt->dev = get_netdev_from_bssid(pAd, BSS0); +- if (pRxBlk->pHeader->FC.Type == BTYPE_DATA) +- { +- pRxBlk->DataSize -= LENGTH_802_11; +- if ((pRxBlk->pHeader->FC.ToDs == 1) && +- (pRxBlk->pHeader->FC.FrDs == 1)) +- header_len = LENGTH_802_11_WITH_ADDR4; +- else +- header_len = LENGTH_802_11; +- +- // QOS +- if (pRxBlk->pHeader->FC.SubType & 0x08) +- { +- header_len += 2; +- // Data skip QOS contorl field +- pRxBlk->DataSize -=2; +- } +- +- // Order bit: A-Ralink or HTC+ +- if (pRxBlk->pHeader->FC.Order) +- { +- header_len += 4; ++ if (pRxBlk->pHeader->FC.Type == BTYPE_DATA) { ++ pRxBlk->DataSize -= LENGTH_802_11; ++ if ((pRxBlk->pHeader->FC.ToDs == 1) && ++ (pRxBlk->pHeader->FC.FrDs == 1)) ++ header_len = LENGTH_802_11_WITH_ADDR4; ++ else ++ header_len = LENGTH_802_11; ++ ++ // QOS ++ if (pRxBlk->pHeader->FC.SubType & 0x08) { ++ header_len += 2; ++ // Data skip QOS contorl field ++ pRxBlk->DataSize -= 2; ++ } ++ // Order bit: A-Ralink or HTC+ ++ if (pRxBlk->pHeader->FC.Order) { ++ header_len += 4; + // Data skip HTC contorl field + pRxBlk->DataSize -= 4; +- } +- +- // Copy Header +- if (header_len <= 40) +- NdisMoveMemory(temp_header, pRxBlk->pData, header_len); +- +- // skip HW padding +- if (pRxBlk->RxD.L2PAD) +- pRxBlk->pData += (header_len + 2); +- else +- pRxBlk->pData += header_len; +- } //end if ++ } ++ // Copy Header ++ if (header_len <= 40) ++ NdisMoveMemory(temp_header, pRxBlk->pData, header_len); + ++ // skip HW padding ++ if (pRxBlk->RxD.L2PAD) ++ pRxBlk->pData += (header_len + 2); ++ else ++ pRxBlk->pData += header_len; ++ } //end if + + if (pRxBlk->DataSize < pOSPkt->len) { +- skb_trim(pOSPkt,pRxBlk->DataSize); +- } else { +- skb_put(pOSPkt,(pRxBlk->DataSize - pOSPkt->len)); +- } //end if +- +- if ((pRxBlk->pData - pOSPkt->data) > 0) { +- skb_put(pOSPkt,(pRxBlk->pData - pOSPkt->data)); +- skb_pull(pOSPkt,(pRxBlk->pData - pOSPkt->data)); +- } //end if +- +- if (skb_headroom(pOSPkt) < (sizeof(wlan_ng_prism2_header)+ header_len)) { +- if (pskb_expand_head(pOSPkt, (sizeof(wlan_ng_prism2_header) + header_len), 0, GFP_ATOMIC)) { +- DBGPRINT(RT_DEBUG_ERROR, ("%s : Reallocate header size of sk_buff fail!\n", __func__)); ++ skb_trim(pOSPkt, pRxBlk->DataSize); ++ } else { ++ skb_put(pOSPkt, (pRxBlk->DataSize - pOSPkt->len)); ++ } //end if ++ ++ if ((pRxBlk->pData - pOSPkt->data) > 0) { ++ skb_put(pOSPkt, (pRxBlk->pData - pOSPkt->data)); ++ skb_pull(pOSPkt, (pRxBlk->pData - pOSPkt->data)); ++ } //end if ++ ++ if (skb_headroom(pOSPkt) < (sizeof(wlan_ng_prism2_header) + header_len)) { ++ if (pskb_expand_head ++ (pOSPkt, (sizeof(wlan_ng_prism2_header) + header_len), 0, ++ GFP_ATOMIC)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s : Reallocate header size of sk_buff fail!\n", ++ __func__)); + goto err_free_sk_buff; +- } //end if +- } //end if ++ } //end if ++ } //end if + +- if (header_len > 0) +- NdisMoveMemory(skb_push(pOSPkt, header_len), temp_header, header_len); ++ if (header_len > 0) ++ NdisMoveMemory(skb_push(pOSPkt, header_len), temp_header, ++ header_len); + +- ph = (wlan_ng_prism2_header *) skb_push(pOSPkt, sizeof(wlan_ng_prism2_header)); ++ ph = (wlan_ng_prism2_header *) skb_push(pOSPkt, ++ sizeof(wlan_ng_prism2_header)); + NdisZeroMemory(ph, sizeof(wlan_ng_prism2_header)); + +- ph->msgcode = DIDmsg_lnxind_wlansniffrm; +- ph->msglen = sizeof(wlan_ng_prism2_header); ++ ph->msgcode = DIDmsg_lnxind_wlansniffrm; ++ ph->msglen = sizeof(wlan_ng_prism2_header); + strcpy((PSTRING) ph->devname, (PSTRING) pAd->net_dev->name); + +- ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; ++ ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; + ph->hosttime.status = 0; + ph->hosttime.len = 4; + ph->hosttime.data = jiffies; +@@ -893,63 +828,71 @@ void send_monitor_packets( + ph->mactime.len = 0; + ph->mactime.data = 0; + +- ph->istx.did = DIDmsg_lnxind_wlansniffrm_istx; ++ ph->istx.did = DIDmsg_lnxind_wlansniffrm_istx; + ph->istx.status = 0; + ph->istx.len = 0; + ph->istx.data = 0; + +- ph->channel.did = DIDmsg_lnxind_wlansniffrm_channel; ++ ph->channel.did = DIDmsg_lnxind_wlansniffrm_channel; + ph->channel.status = 0; + ph->channel.len = 4; + +- ph->channel.data = (u_int32_t)pAd->CommonCfg.Channel; ++ ph->channel.data = (u_int32_t) pAd->CommonCfg.Channel; + +- ph->rssi.did = DIDmsg_lnxind_wlansniffrm_rssi; ++ ph->rssi.did = DIDmsg_lnxind_wlansniffrm_rssi; + ph->rssi.status = 0; + ph->rssi.len = 4; +- ph->rssi.data = (u_int32_t)RTMPMaxRssi(pAd, ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI0, RSSI_0), ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI1, RSSI_1), ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI2, RSSI_2));; ++ ph->rssi.data = ++ (u_int32_t) RTMPMaxRssi(pAd, ++ ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI0, ++ RSSI_0), ConvertToRssi(pAd, ++ pRxBlk-> ++ pRxWI-> ++ RSSI1, ++ RSSI_1), ++ ConvertToRssi(pAd, pRxBlk->pRxWI->RSSI2, ++ RSSI_2));; + + ph->signal.did = DIDmsg_lnxind_wlansniffrm_signal; + ph->signal.status = 0; + ph->signal.len = 4; +- ph->signal.data = 0; //rssi + noise; ++ ph->signal.data = 0; //rssi + noise; + + ph->noise.did = DIDmsg_lnxind_wlansniffrm_noise; + ph->noise.status = 0; + ph->noise.len = 4; + ph->noise.data = 0; + +- if (pRxBlk->pRxWI->PHYMODE >= MODE_HTMIX) +- { +- rate_index = 16 + ((UCHAR)pRxBlk->pRxWI->BW *16) + ((UCHAR)pRxBlk->pRxWI->ShortGI *32) + ((UCHAR)pRxBlk->pRxWI->MCS); +- } +- else +- if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM) +- rate_index = (UCHAR)(pRxBlk->pRxWI->MCS) + 4; +- else +- rate_index = (UCHAR)(pRxBlk->pRxWI->MCS); +- if (rate_index < 0) +- rate_index = 0; +- if (rate_index > 255) +- rate_index = 255; ++ if (pRxBlk->pRxWI->PHYMODE >= MODE_HTMIX) { ++ rate_index = ++ 16 + ((UCHAR) pRxBlk->pRxWI->BW * 16) + ++ ((UCHAR) pRxBlk->pRxWI->ShortGI * 32) + ++ ((UCHAR) pRxBlk->pRxWI->MCS); ++ } else if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM) ++ rate_index = (UCHAR) (pRxBlk->pRxWI->MCS) + 4; ++ else ++ rate_index = (UCHAR) (pRxBlk->pRxWI->MCS); ++ if (rate_index < 0) ++ rate_index = 0; ++ if (rate_index > 255) ++ rate_index = 255; + + ph->rate.did = DIDmsg_lnxind_wlansniffrm_rate; + ph->rate.status = 0; + ph->rate.len = 4; +- ph->rate.data = ralinkrate[rate_index]; ++ ph->rate.data = ralinkrate[rate_index]; + + ph->frmlen.did = DIDmsg_lnxind_wlansniffrm_frmlen; +- ph->frmlen.status = 0; ++ ph->frmlen.status = 0; + ph->frmlen.len = 4; +- ph->frmlen.data = (u_int32_t)pRxBlk->DataSize; +- ++ ph->frmlen.data = (u_int32_t) pRxBlk->DataSize; + +- pOSPkt->pkt_type = PACKET_OTHERHOST; +- pOSPkt->protocol = eth_type_trans(pOSPkt, pOSPkt->dev); +- pOSPkt->ip_summed = CHECKSUM_NONE; +- netif_rx(pOSPkt); ++ pOSPkt->pkt_type = PACKET_OTHERHOST; ++ pOSPkt->protocol = eth_type_trans(pOSPkt, pOSPkt->dev); ++ pOSPkt->ip_summed = CHECKSUM_NONE; ++ netif_rx(pOSPkt); + +- return; ++ return; + + err_free_sk_buff: + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); +@@ -957,7 +900,6 @@ err_free_sk_buff: + + } + +- + /******************************************************************************* + + Device IRQ related functions. +@@ -974,11 +916,12 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + + ASSERT(pAd); + +- if (pAd->infType == RTMP_DEV_INF_PCI) +- { +- POS_COOKIE _pObj = (POS_COOKIE)(pAd->OS_Cookie); ++ if (pAd->infType == RTMP_DEV_INF_PCI) { ++ POS_COOKIE _pObj = (POS_COOKIE) (pAd->OS_Cookie); + RTMP_MSI_ENABLE(pAd); +- retval = request_irq(_pObj->pci_dev->irq, rt2860_interrupt, SA_SHIRQ, (net_dev)->name, (net_dev)); ++ retval = ++ request_irq(_pObj->pci_dev->irq, rt2860_interrupt, SA_SHIRQ, ++ (net_dev)->name, (net_dev)); + if (retval != 0) + printk("RT2860: request_irq ERROR(%d)\n", retval); + } +@@ -999,36 +942,34 @@ int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + ASSERT(pAd); + + #ifdef RTMP_PCI_SUPPORT +- if (pAd->infType == RTMP_DEV_INF_PCI) +- { +- POS_COOKIE pObj = (POS_COOKIE)(pAd->OS_Cookie); ++ if (pAd->infType == RTMP_DEV_INF_PCI) { ++ POS_COOKIE pObj = (POS_COOKIE) (pAd->OS_Cookie); + synchronize_irq(pObj->pci_dev->irq); + free_irq(pObj->pci_dev->irq, (net_dev)); + RTMP_MSI_DISABLE(pAd); + } + #endif // RTMP_PCI_SUPPORT // + +- + return 0; + } + +- + /******************************************************************************* + + File open/close related functions. + + *******************************************************************************/ +-RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) ++RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) + { +- struct file *filePtr; ++ struct file *filePtr; + + filePtr = filp_open(pPath, flag, 0); +- if (IS_ERR(filePtr)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(): Error %ld opening %s\n", __func__, -PTR_ERR(filePtr), pPath)); ++ if (IS_ERR(filePtr)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s(): Error %ld opening %s\n", __func__, ++ -PTR_ERR(filePtr), pPath)); + } + +- return (RTMP_OS_FD)filePtr; ++ return (RTMP_OS_FD) filePtr; + } + + int RtmpOSFileClose(RTMP_OS_FD osfd) +@@ -1037,31 +978,26 @@ int RtmpOSFileClose(RTMP_OS_FD osfd) + return 0; + } + +- + void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) + { + osfd->f_pos = offset; + } + +- + int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) + { + // The object must have a read method +- if (osfd->f_op && osfd->f_op->read) +- { +- return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); +- } +- else +- { ++ if (osfd->f_op && osfd->f_op->read) { ++ return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); ++ } else { + DBGPRINT(RT_DEBUG_ERROR, ("no file read method\n")); + return -1; + } + } + +- + int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) + { +- return osfd->f_op->write(osfd, pDataPtr, (size_t)writeLen, &osfd->f_pos); ++ return osfd->f_op->write(osfd, pDataPtr, (size_t) writeLen, ++ &osfd->f_pos); + } + + /******************************************************************************* +@@ -1069,35 +1005,32 @@ int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) + Task create/management/kill related functions. + + *******************************************************************************/ +-NDIS_STATUS RtmpOSTaskKill( +- IN RTMP_OS_TASK *pTask) ++NDIS_STATUS RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) + { + RTMP_ADAPTER *pAd; + int ret = NDIS_STATUS_FAILURE; + +- pAd = (RTMP_ADAPTER *)pTask->priv; ++ pAd = (RTMP_ADAPTER *) pTask->priv; + + #ifdef KTHREAD_SUPPORT +- if (pTask->kthread_task) +- { ++ if (pTask->kthread_task) { + kthread_stop(pTask->kthread_task); + ret = NDIS_STATUS_SUCCESS; + } + #else +- CHECK_PID_LEGALITY(pTask->taskPID) +- { +- printk("Terminate the task(%s) with pid(%d)!\n", pTask->taskName, GET_PID_NUMBER(pTask->taskPID)); ++ CHECK_PID_LEGALITY(pTask->taskPID) { ++ printk("Terminate the task(%s) with pid(%d)!\n", ++ pTask->taskName, GET_PID_NUMBER(pTask->taskPID)); + mb(); + pTask->task_killed = 1; + mb(); + ret = KILL_THREAD_PID(pTask->taskPID, SIGTERM, 1); +- if (ret) +- { +- printk(KERN_WARNING "kill task(%s) with pid(%d) failed(retVal=%d)!\n", +- pTask->taskName, GET_PID_NUMBER(pTask->taskPID), ret); +- } +- else +- { ++ if (ret) { ++ printk(KERN_WARNING ++ "kill task(%s) with pid(%d) failed(retVal=%d)!\n", ++ pTask->taskName, GET_PID_NUMBER(pTask->taskPID), ++ ret); ++ } else { + wait_for_completion(&pTask->taskComplete); + pTask->taskPID = THREAD_PID_INIT_VALUE; + pTask->task_killed = 0; +@@ -1110,9 +1043,7 @@ NDIS_STATUS RtmpOSTaskKill( + + } + +- +-INT RtmpOSTaskNotifyToExit( +- IN RTMP_OS_TASK *pTask) ++INT RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask) + { + + #ifndef KTHREAD_SUPPORT +@@ -1122,14 +1053,12 @@ INT RtmpOSTaskNotifyToExit( + return 0; + } + +- +-void RtmpOSTaskCustomize( +- IN RTMP_OS_TASK *pTask) ++void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask) + { + + #ifndef KTHREAD_SUPPORT + +- daemonize((PSTRING)&pTask->taskName[0]/*"%s",pAd->net_dev->name*/); ++ daemonize((PSTRING) & pTask->taskName[0] /*"%s",pAd->net_dev->name */ ); + + allow_signal(SIGTERM); + allow_signal(SIGKILL); +@@ -1141,11 +1070,8 @@ void RtmpOSTaskCustomize( + #endif + } + +- +-NDIS_STATUS RtmpOSTaskAttach( +- IN RTMP_OS_TASK *pTask, +- IN int (*fn)(void *), +- IN void *arg) ++NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++ IN int (*fn) (void *), IN void *arg) + { + NDIS_STATUS status = NDIS_STATUS_SUCCESS; + +@@ -1157,13 +1083,11 @@ NDIS_STATUS RtmpOSTaskAttach( + status = NDIS_STATUS_FAILURE; + #else + pid_number = kernel_thread(fn, arg, RTMP_OS_MGMT_TASK_FLAGS); +- if (pid_number < 0) +- { +- DBGPRINT (RT_DEBUG_ERROR, ("Attach task(%s) failed!\n", pTask->taskName)); ++ if (pid_number < 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Attach task(%s) failed!\n", pTask->taskName)); + status = NDIS_STATUS_FAILURE; +- } +- else +- { ++ } else { + pTask->taskPID = GET_PID(pid_number); + + // Wait for the thread to start +@@ -1174,22 +1098,21 @@ NDIS_STATUS RtmpOSTaskAttach( + return status; + } + +- +-NDIS_STATUS RtmpOSTaskInit( +- IN RTMP_OS_TASK *pTask, +- IN PSTRING pTaskName, +- IN VOID *pPriv) ++NDIS_STATUS RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++ IN PSTRING pTaskName, IN VOID * pPriv) + { + int len; + + ASSERT(pTask); + + #ifndef KTHREAD_SUPPORT +- NdisZeroMemory((PUCHAR)(pTask), sizeof(RTMP_OS_TASK)); ++ NdisZeroMemory((PUCHAR) (pTask), sizeof(RTMP_OS_TASK)); + #endif + + len = strlen(pTaskName); +- len = len > (RTMP_OS_TASK_NAME_LEN -1) ? (RTMP_OS_TASK_NAME_LEN-1) : len; ++ len = ++ len > ++ (RTMP_OS_TASK_NAME_LEN - 1) ? (RTMP_OS_TASK_NAME_LEN - 1) : len; + NdisMoveMemory(&pTask->taskName[0], pTaskName, len); + pTask->priv = pPriv; + +@@ -1197,58 +1120,51 @@ NDIS_STATUS RtmpOSTaskInit( + RTMP_SEM_EVENT_INIT_LOCKED(&(pTask->taskSema)); + pTask->taskPID = THREAD_PID_INIT_VALUE; + +- init_completion (&pTask->taskComplete); ++ init_completion(&pTask->taskComplete); + #endif + + return NDIS_STATUS_SUCCESS; + } + +- +-void RTMP_IndicateMediaState( +- IN PRTMP_ADAPTER pAd) ++void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd) + { +- if (pAd->CommonCfg.bWirelessEvent) +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- } +- else +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (pAd->CommonCfg.bWirelessEvent) { ++ if (pAd->IndicateMediaState == NdisMediaStateConnected) { ++ RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); ++ } else { ++ RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); + } + } + } + +-int RtmpOSWrielessEventSend( +- IN RTMP_ADAPTER *pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, +- IN UINT32 dataLen) ++int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, ++ IN UINT32 eventType, ++ IN INT flags, ++ IN PUCHAR pSrcMac, ++ IN PUCHAR pData, IN UINT32 dataLen) + { +- union iwreq_data wrqu; ++ union iwreq_data wrqu; + +- memset(&wrqu, 0, sizeof(wrqu)); ++ memset(&wrqu, 0, sizeof(wrqu)); + +- if (flags>-1) +- wrqu.data.flags = flags; ++ if (flags > -1) ++ wrqu.data.flags = flags; + + if (pSrcMac) + memcpy(wrqu.ap_addr.sa_data, pSrcMac, MAC_ADDR_LEN); + +- if ((pData!= NULL) && (dataLen > 0)) ++ if ((pData != NULL) && (dataLen > 0)) + wrqu.data.length = dataLen; + +- wireless_send_event(pAd->net_dev, eventType, &wrqu, (char *)pData); ++ wireless_send_event(pAd->net_dev, eventType, &wrqu, (char *)pData); + return 0; + } + +- +-int RtmpOSNetDevAddrSet( +- IN PNET_DEV pNetDev, +- IN PUCHAR pMacAddr) ++int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr) + { + struct net_device *net_dev; + RTMP_ADAPTER *pAd; +@@ -1259,7 +1175,8 @@ int RtmpOSNetDevAddrSet( + // work-around for the SuSE due to it has it's own interface name management system. + { + NdisZeroMemory(pAd->StaCfg.dev_name, 16); +- NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name)); ++ NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, ++ strlen(net_dev->name)); + } + + NdisMoveMemory(net_dev->dev_addr, pMacAddr, 6); +@@ -1267,29 +1184,23 @@ int RtmpOSNetDevAddrSet( + return 0; + } + +- +- + /* + * Assign the network dev name for created Ralink WiFi interface. + */ +-static int RtmpOSNetDevRequestName( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV dev, +- IN PSTRING pPrefixStr, +- IN INT devIdx) ++static int RtmpOSNetDevRequestName(IN RTMP_ADAPTER * pAd, ++ IN PNET_DEV dev, ++ IN PSTRING pPrefixStr, IN INT devIdx) + { +- PNET_DEV existNetDev; +- STRING suffixName[IFNAMSIZ]; +- STRING desiredName[IFNAMSIZ]; +- int ifNameIdx, prefixLen, slotNameLen; ++ PNET_DEV existNetDev; ++ STRING suffixName[IFNAMSIZ]; ++ STRING desiredName[IFNAMSIZ]; ++ int ifNameIdx, prefixLen, slotNameLen; + int Status; + +- + prefixLen = strlen(pPrefixStr); + ASSERT((prefixLen < IFNAMSIZ)); + +- for (ifNameIdx = devIdx; ifNameIdx < 32; ifNameIdx++) +- { ++ for (ifNameIdx = devIdx; ifNameIdx < 32; ifNameIdx++) { + memset(suffixName, 0, IFNAMSIZ); + memset(desiredName, 0, IFNAMSIZ); + strncpy(&desiredName[0], pPrefixStr, prefixLen); +@@ -1307,29 +1218,24 @@ static int RtmpOSNetDevRequestName( + RtmpOSNetDeviceRefPut(existNetDev); + } + +- if(ifNameIdx < 32) +- { ++ if (ifNameIdx < 32) { + strcpy(&dev->name[0], &desiredName[0]); + Status = NDIS_STATUS_SUCCESS; +- } +- else +- { ++ } else { + DBGPRINT(RT_DEBUG_ERROR, +- ("Cannot request DevName with preifx(%s) and in range(0~32) as suffix from OS!\n", pPrefixStr)); ++ ("Cannot request DevName with preifx(%s) and in range(0~32) as suffix from OS!\n", ++ pPrefixStr)); + Status = NDIS_STATUS_FAILURE; + } + + return Status; + } + +- +-void RtmpOSNetDevClose( +- IN PNET_DEV pNetDev) ++void RtmpOSNetDevClose(IN PNET_DEV pNetDev) + { + dev_close(pNetDev); + } + +- + void RtmpOSNetDevFree(PNET_DEV pNetDev) + { + ASSERT(pNetDev); +@@ -1337,15 +1243,14 @@ void RtmpOSNetDevFree(PNET_DEV pNetDev) + free_netdev(pNetDev); + } + +- +-INT RtmpOSNetDevAlloc( +- IN PNET_DEV *new_dev_p, +- IN UINT32 privDataSize) ++INT RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, IN UINT32 privDataSize) + { + // assign it as null first. + *new_dev_p = NULL; + +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate a net device with private data size=%d!\n", privDataSize)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Allocate a net device with private data size=%d!\n", ++ privDataSize)); + *new_dev_p = alloc_etherdev(privDataSize); + if (*new_dev_p) + return NDIS_STATUS_SUCCESS; +@@ -1353,32 +1258,27 @@ INT RtmpOSNetDevAlloc( + return NDIS_STATUS_FAILURE; + } + +- + PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, PSTRING pDevName) + { +- PNET_DEV pTargetNetDev = NULL; ++ PNET_DEV pTargetNetDev = NULL; + + pTargetNetDev = dev_get_by_name(dev_net(pNetDev), pDevName); + + return pTargetNetDev; + } + +- + void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) + { + /* +- every time dev_get_by_name is called, and it has returned a valid struct +- net_device*, dev_put should be called afterwards, because otherwise the +- machine hangs when the device is unregistered (since dev->refcnt > 1). +- */ +- if(pNetDev) ++ every time dev_get_by_name is called, and it has returned a valid struct ++ net_device*, dev_put should be called afterwards, because otherwise the ++ machine hangs when the device is unregistered (since dev->refcnt > 1). ++ */ ++ if (pNetDev) + dev_put(pNetDev); + } + +- +-INT RtmpOSNetDevDestory( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV pNetDev) ++INT RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) + { + + // TODO: Need to fix this +@@ -1386,23 +1286,19 @@ INT RtmpOSNetDevDestory( + return 0; + } + +- + void RtmpOSNetDevDetach(PNET_DEV pNetDev) + { + unregister_netdev(pNetDev); + } + +- +-int RtmpOSNetDevAttach( +- IN PNET_DEV pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook) ++int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, ++ IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook) + { + int ret, rtnl_locked = FALSE; + + DBGPRINT(RT_DEBUG_TRACE, ("RtmpOSNetDevAttach()--->\n")); + // If we need hook some callback function to the net device structrue, now do it. +- if (pDevOpHook) +- { ++ if (pDevOpHook) { + PRTMP_ADAPTER pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, pNetDev); +@@ -1412,15 +1308,13 @@ int RtmpOSNetDevAttach( + /* OS specific flags, here we used to indicate if we are virtual interface */ + pNetDev->priv_flags = pDevOpHook->priv_flags; + +- +- if (pAd->OpMode == OPMODE_STA) +- { ++ if (pAd->OpMode == OPMODE_STA) { + pNetDev->wireless_handlers = &rt28xx_iw_handler_def; + } + +- + // copy the net device mac address to the net_device structure. +- NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], MAC_ADDR_LEN); ++ NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], ++ MAC_ADDR_LEN); + + rtnl_locked = pDevOpHook->needProtcted; + } +@@ -1437,41 +1331,38 @@ int RtmpOSNetDevAttach( + return NDIS_STATUS_FAILURE; + } + +- +-PNET_DEV RtmpOSNetDevCreate( +- IN RTMP_ADAPTER *pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, +- IN PSTRING pNamePrefix) ++PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++ IN INT devType, ++ IN INT devNum, ++ IN INT privMemSize, IN PSTRING pNamePrefix) + { + struct net_device *pNetDev = NULL; + int status; + +- + /* allocate a new network device */ +- status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize*/); +- if (status != NDIS_STATUS_SUCCESS) +- { ++ status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize */ ); ++ if (status != NDIS_STATUS_SUCCESS) { + /* allocation fail, exit */ +- DBGPRINT(RT_DEBUG_ERROR, ("Allocate network device fail (%s)...\n", pNamePrefix)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Allocate network device fail (%s)...\n", ++ pNamePrefix)); + return NULL; + } + +- + /* find a available interface name, max 32 interfaces */ + status = RtmpOSNetDevRequestName(pAd, pNetDev, pNamePrefix, devNum); +- if (status != NDIS_STATUS_SUCCESS) +- { ++ if (status != NDIS_STATUS_SUCCESS) { + /* error! no any available ra name can be used! */ +- DBGPRINT(RT_DEBUG_ERROR, ("Assign interface name (%s with suffix 0~32) failed...\n", pNamePrefix)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Assign interface name (%s with suffix 0~32) failed...\n", ++ pNamePrefix)); + RtmpOSNetDevFree(pNetDev); + + return NULL; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("The name of the new %s interface is %s...\n", pNamePrefix, pNetDev->name)); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("The name of the new %s interface is %s...\n", ++ pNamePrefix, pNetDev->name)); + } + + return pNetDev; +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 3a73571..8f65e46 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -37,17 +37,14 @@ + + #include "rt_config.h" + +- +- + /*---------------------------------------------------------------------*/ + /* Private Variables Used */ + /*---------------------------------------------------------------------*/ + +-PSTRING mac = ""; // default 00:00:00:00:00:00 +-PSTRING hostname = ""; // default CMPC +-module_param (mac, charp, 0); +-MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr"); +- ++PSTRING mac = ""; // default 00:00:00:00:00:00 ++PSTRING hostname = ""; // default CMPC ++module_param(mac, charp, 0); ++MODULE_PARM_DESC(mac, "rt28xx: wireless mac addr"); + + /*---------------------------------------------------------------------*/ + /* Prototypes of Functions Used */ +@@ -58,11 +55,11 @@ int rt28xx_close(IN struct net_device *net_dev); + int rt28xx_open(struct net_device *net_dev); + + // private function prototype +-static INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev); +- ++static INT rt28xx_send_packets(IN struct sk_buff *skb_p, ++ IN struct net_device *net_dev); + +-static struct net_device_stats *RT28xx_get_ether_stats( +- IN struct net_device *net_dev); ++static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device ++ *net_dev); + + /* + ======================================================================== +@@ -86,57 +83,66 @@ Note: + */ + int MainVirtualIF_close(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ RTMP_ADAPTER *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd + if (pAd == NULL) +- return 0; // close ok ++ return 0; // close ok + + netif_carrier_off(pAd->net_dev); + netif_stop_queue(pAd->net_dev); + + { +- BOOLEAN Cancelled; ++ BOOLEAN Cancelled; + + if (INFRA_ON(pAd) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *MsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- +- if (MsgElem) +- { +- COPY_MAC_ADDR(DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DEAUTH_STA_LEAVING; +- +- MsgElem->Machine = ASSOC_STATE_MACHINE; +- MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(MsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- // Prevent to connect AP again in STAMlmePeriodicExec +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- MlmeDisassocReqAction(pAd, MsgElem); +- kfree(MsgElem); ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { ++ MLME_DISASSOC_REQ_STRUCT DisReq; ++ MLME_QUEUE_ELEM *MsgElem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); ++ ++ if (MsgElem) { ++ COPY_MAC_ADDR(DisReq.Addr, ++ pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DEAUTH_STA_LEAVING; ++ ++ MsgElem->Machine = ASSOC_STATE_MACHINE; ++ MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; ++ MsgElem->MsgLen = ++ sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(MsgElem->Msg, &DisReq, ++ sizeof ++ (MLME_DISASSOC_REQ_STRUCT)); ++ ++ // Prevent to connect AP again in STAMlmePeriodicExec ++ pAd->MlmeAux.AutoReconnectSsidLen = 32; ++ NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux. ++ AutoReconnectSsidLen); ++ ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_OID_DISASSOC; ++ MlmeDisassocReqAction(pAd, MsgElem); ++ kfree(MsgElem); + } + + RTMPusecDelay(1000); + } + +- RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled); +- RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, ++ &Cancelled); ++ RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, ++ &Cancelled); + } + + VIRTUAL_IF_DOWN(pAd); + + RT_MOD_DEC_USE_COUNT(); + +- return 0; // close ok ++ return 0; // close ok + } + + /* +@@ -161,13 +167,13 @@ Note: + */ + int MainVirtualIF_open(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ RTMP_ADAPTER *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd + if (pAd == NULL) +- return 0; // close ok ++ return 0; // close ok + + if (VIRTUAL_IF_UP(pAd) != 0) + return -1; +@@ -204,10 +210,10 @@ Note: + */ + int rt28xx_close(IN PNET_DEV dev) + { +- struct net_device * net_dev = (struct net_device *)dev; +- RTMP_ADAPTER *pAd = NULL; +- BOOLEAN Cancelled; +- UINT32 i = 0; ++ struct net_device *net_dev = (struct net_device *)dev; ++ RTMP_ADAPTER *pAd = NULL; ++ BOOLEAN Cancelled; ++ UINT32 i = 0; + + #ifdef RTMP_MAC_USB + DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); +@@ -216,12 +222,12 @@ int rt28xx_close(IN PNET_DEV dev) + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); + + Cancelled = FALSE; + // Sanity check for pAd + if (pAd == NULL) +- return 0; // close ok ++ return 0; // close ok + + { + #ifdef RTMP_MAC_PCI +@@ -230,13 +236,11 @@ int rt28xx_close(IN PNET_DEV dev) + + // If dirver doesn't wake up firmware here, + // NICLoadFirmware will hang forever when interface is up again. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- AsicForceWakeup(pAd, TRUE); +- } +- ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { ++ AsicForceWakeup(pAd, TRUE); ++ } + #ifdef RTMP_MAC_USB +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); + #endif // RTMP_MAC_USB // + + MlmeRadioOff(pAd); +@@ -247,30 +251,28 @@ int rt28xx_close(IN PNET_DEV dev) + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + +- for (i = 0 ; i < NUM_OF_TX_RING; i++) +- { +- while (pAd->DeQueueRunning[i] == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Waiting for TxQueue[%d] done..........\n", i)); ++ for (i = 0; i < NUM_OF_TX_RING; i++) { ++ while (pAd->DeQueueRunning[i] == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Waiting for TxQueue[%d] done..........\n", ++ i)); + RTMPusecDelay(1000); + } + } + + #ifdef RTMP_MAC_USB + // ensure there are no more active urbs. +- add_wait_queue (&unlink_wakeup, &wait); ++ add_wait_queue(&unlink_wakeup, &wait); + pAd->wait = &unlink_wakeup; + + // maybe wait for deletions to finish. + i = 0; + //while((i < 25) && atomic_read(&pAd->PendingRx) > 0) +- while(i < 25) +- { ++ while (i < 25) { + unsigned long IrqFlags; + + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); +- if (pAd->PendingRx == 0) +- { ++ if (pAd->PendingRx == 0) { + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + break; + } +@@ -280,7 +282,7 @@ int rt28xx_close(IN PNET_DEV dev) + i++; + } + pAd->wait = NULL; +- remove_wait_queue (&unlink_wakeup, &wait); ++ remove_wait_queue(&unlink_wakeup, &wait); + #endif // RTMP_MAC_USB // + + // Stop Mlme state machine +@@ -293,42 +295,37 @@ int rt28xx_close(IN PNET_DEV dev) + MacTableReset(pAd); + } + +- + MeasureReqTabExit(pAd); + TpcReqTabExit(pAd); + +- + // Close kernel threads + RtmpMgmtTaskExit(pAd); + + #ifdef RTMP_MAC_PCI + { +- BOOLEAN brc; +- // ULONG Value; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) +- { +- RTMP_ASIC_INTERRUPT_DISABLE(pAd); +- } +- +- // Receive packets to clear DMA index after disable interrupt. +- //RTMPHandleRxDoneInterrupt(pAd); +- // put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all +- // register access before Radio off. ++ BOOLEAN brc; ++ // ULONG Value; + ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) { ++ RTMP_ASIC_INTERRUPT_DISABLE(pAd); ++ } ++ // Receive packets to clear DMA index after disable interrupt. ++ //RTMPHandleRxDoneInterrupt(pAd); ++ // put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all ++ // register access before Radio off. + +- brc=RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); ++ brc = RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); + + //In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff +- pAd->bPCIclkOff = FALSE; ++ pAd->bPCIclkOff = FALSE; + +- if (brc==FALSE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); +- } ++ if (brc == FALSE) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s call RT28xxPciAsicRadioOff fail !!\n", ++ __func__)); ++ } + } + +- + /* + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) + { +@@ -341,15 +338,13 @@ int rt28xx_close(IN PNET_DEV dev) + #endif // RTMP_MAC_PCI // + + // Free IRQ +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + #ifdef RTMP_MAC_PCI + // Deregister interrupt function + RtmpOSIRQRelease(net_dev); + #endif // RTMP_MAC_PCI // +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); +- } +- ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); ++ } + // Free Ring or USB buffers + RTMPFreeTxRxRingMemory(pAd); + +@@ -358,7 +353,6 @@ int rt28xx_close(IN PNET_DEV dev) + // Free BA reorder resource + ba_reordering_resource_release(pAd); + +- + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP); + + /*+++Modify by woody to solve the bulk fail+++*/ +@@ -366,9 +360,8 @@ int rt28xx_close(IN PNET_DEV dev) + } + + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt28xx_close\n")); +- return 0; // close ok +-} /* End of rt28xx_close */ +- ++ return 0; // close ok ++} /* End of rt28xx_close */ + + /* + ======================================================================== +@@ -387,7 +380,7 @@ Note: + */ + int rt28xx_open(IN PNET_DEV dev) + { +- struct net_device * net_dev = (struct net_device *)dev; ++ struct net_device *net_dev = (struct net_device *)dev; + PRTMP_ADAPTER pAd = NULL; + int retval = 0; + //POS_COOKIE pObj; +@@ -395,24 +388,21 @@ int rt28xx_open(IN PNET_DEV dev) + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + // Sanity check for pAd +- if (pAd == NULL) +- { ++ if (pAd == NULL) { + /* if 1st open fail, pAd will be free; + So the net_dev->ml_priv will be NULL in 2rd open */ + return -1; + } + +- if (net_dev->priv_flags == INT_MAIN) +- { ++ if (net_dev->priv_flags == INT_MAIN) { + if (pAd->OpMode == OPMODE_STA) +- net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def; ++ net_dev->wireless_handlers = ++ (struct iw_handler_def *)&rt28xx_iw_handler_def; + } +- + // Request interrupt service routine for PCI device + // register the interrupt routine with the os + RtmpOSIRQRequest(net_dev); + +- + // Init IRQ parameters stored in pAd + RTMP_IRQ_INIT(pAd); + +@@ -420,7 +410,6 @@ int rt28xx_open(IN PNET_DEV dev) + if (rt28xx_init(pAd, mac, hostname) == FALSE) + goto err; + +- + // Enable Interrupt + RTMP_IRQ_ENABLE(pAd); + +@@ -429,25 +418,25 @@ int rt28xx_open(IN PNET_DEV dev) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP); + + { +- UINT32 reg = 0; +- RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts +- printk("0x1300 = %08x\n", reg); ++ UINT32 reg = 0; ++ RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts ++ printk("0x1300 = %08x\n", reg); + } + + { +-// u32 reg; +-// UINT8 byte; +-// u16 tmp; ++// u32 reg; ++// UINT8 byte; ++// u16 tmp; + +-// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); ++// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); + +-// tmp = 0x0805; +-// reg = (reg & 0xffff0000) | tmp; +-// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); ++// tmp = 0x0805; ++// reg = (reg & 0xffff0000) | tmp; ++// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); + + } + #ifdef RTMP_MAC_PCI +- RTMPInitPCIeLinkCtrlValue(pAd); ++ RTMPInitPCIeLinkCtrlValue(pAd); + #endif // RTMP_MAC_PCI // + + return (retval); +@@ -457,39 +446,41 @@ err: + RtmpOSIRQRelease(net_dev); + //---Add by shiang, move from rt28xx_init() to here. + return (-1); +-} /* End of rt28xx_open */ ++} /* End of rt28xx_open */ + + static const struct net_device_ops rt2860_netdev_ops = { +- .ndo_open = MainVirtualIF_open, +- .ndo_stop = MainVirtualIF_close, +- .ndo_do_ioctl = rt28xx_sta_ioctl, +- .ndo_get_stats = RT28xx_get_ether_stats, +- .ndo_validate_addr = NULL, +- .ndo_set_mac_address = eth_mac_addr, +- .ndo_change_mtu = eth_change_mtu, +- .ndo_start_xmit = rt28xx_send_packets, ++ .ndo_open = MainVirtualIF_open, ++ .ndo_stop = MainVirtualIF_close, ++ .ndo_do_ioctl = rt28xx_sta_ioctl, ++ .ndo_get_stats = RT28xx_get_ether_stats, ++ .ndo_validate_addr = NULL, ++ .ndo_set_mac_address = eth_mac_addr, ++ .ndo_change_mtu = eth_change_mtu, ++ .ndo_start_xmit = rt28xx_send_packets, + }; + +-PNET_DEV RtmpPhyNetDevInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_OS_NETDEV_OP_HOOK *pNetDevHook) ++PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, ++ IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook) + { +- struct net_device *net_dev = NULL; +-// NDIS_STATUS Status; +- +- net_dev = RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), INF_MAIN_DEV_NAME); +- if (net_dev == NULL) +- { +- printk("RtmpPhyNetDevInit(): creation failed for main physical net device!\n"); ++ struct net_device *net_dev = NULL; ++// NDIS_STATUS Status; ++ ++ net_dev = ++ RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), ++ INF_MAIN_DEV_NAME); ++ if (net_dev == NULL) { ++ printk ++ ("RtmpPhyNetDevInit(): creation failed for main physical net device!\n"); + return NULL; +- } ++ } + +- NdisZeroMemory((unsigned char *)pNetDevHook, sizeof(RTMP_OS_NETDEV_OP_HOOK)); ++ NdisZeroMemory((unsigned char *)pNetDevHook, ++ sizeof(RTMP_OS_NETDEV_OP_HOOK)); + pNetDevHook->netdev_ops = &rt2860_netdev_ops; + pNetDevHook->priv_flags = INT_MAIN; + pNetDevHook->needProtcted = FALSE; + +- net_dev->ml_priv = (PVOID)pAd; ++ net_dev->ml_priv = (PVOID) pAd; + pAd->net_dev = net_dev; + + netif_stop_queue(net_dev); +@@ -498,7 +489,6 @@ PNET_DEV RtmpPhyNetDevInit( + + } + +- + /* + ======================================================================== + Routine Description: +@@ -529,16 +519,14 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + + { + // Drop send request since we are in monitor mode +- if (MONITOR_ON(pAd)) +- { ++ if (MONITOR_ON(pAd)) { + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + goto done; + } + } + +- // EapolStart size is 18 +- if (skb->len < 14) +- { ++ // EapolStart size is 18 ++ if (skb->len < 14) { + //printk("bad packet size: %d\n", pkt->len); + hex_dump("bad packet", skb->data, skb->len); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +@@ -546,7 +534,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + } + + RTMP_SET_PACKET_5VT(pPacket, 0); +- STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1); ++ STASendPackets((NDIS_HANDLE) pAd, (PPNDIS_PACKET) & pPacket, 1); + + status = NETDEV_TX_OK; + done: +@@ -554,7 +542,6 @@ done: + return status; + } + +- + /* + ======================================================================== + Routine Description: +@@ -571,30 +558,27 @@ Return Value: + Note: + ======================================================================== + */ +-static int rt28xx_send_packets( +- IN struct sk_buff *skb_p, +- IN struct net_device *net_dev) ++static int rt28xx_send_packets(IN struct sk_buff *skb_p, ++ IN struct net_device *net_dev) + { + RTMP_ADAPTER *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- if (!(net_dev->flags & IFF_UP)) +- { +- RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET)skb_p, NDIS_STATUS_FAILURE); ++ if (!(net_dev->flags & IFF_UP)) { ++ RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET) skb_p, ++ NDIS_STATUS_FAILURE); + return NETDEV_TX_OK; + } + +- NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15); ++ NdisZeroMemory((PUCHAR) & skb_p->cb[CB_OFF], 15); + RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); + + return rt28xx_packet_xmit(skb_p); + } + +- + // This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev) ++struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + { + PRTMP_ADAPTER pAd = NULL; + +@@ -602,42 +586,41 @@ struct iw_statistics *rt28xx_get_wireless_stats( + + DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n")); + +- pAd->iw_stats.status = 0; // Status - device dependent for now ++ pAd->iw_stats.status = 0; // Status - device dependent for now + + // link quality + if (pAd->OpMode == OPMODE_STA) +- pAd->iw_stats.qual.qual = ((pAd->Mlme.ChannelQuality * 12)/10 + 10); ++ pAd->iw_stats.qual.qual = ++ ((pAd->Mlme.ChannelQuality * 12) / 10 + 10); + +- if(pAd->iw_stats.qual.qual > 100) ++ if (pAd->iw_stats.qual.qual > 100) + pAd->iw_stats.qual.qual = 100; + +- if (pAd->OpMode == OPMODE_STA) +- { ++ if (pAd->OpMode == OPMODE_STA) { + pAd->iw_stats.qual.level = +- RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, +- pAd->StaCfg.RssiSample.LastRssi1, +- pAd->StaCfg.RssiSample.LastRssi2); ++ RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, ++ pAd->StaCfg.RssiSample.LastRssi1, ++ pAd->StaCfg.RssiSample.LastRssi2); + } + +- pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm) ++ pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm) + + pAd->iw_stats.qual.noise += 256 - 143; +- pAd->iw_stats.qual.updated = 1; // Flags to know if updated ++ pAd->iw_stats.qual.updated = 1; // Flags to know if updated + #ifdef IW_QUAL_DBM + pAd->iw_stats.qual.updated |= IW_QUAL_DBM; // Level + Noise are dBm + #endif // IW_QUAL_DBM // + +- pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid +- pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe ++ pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid ++ pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe + + DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n")); + return &pAd->iw_stats; + } + +- + void tbtt_tasklet(unsigned long data) + { +-//#define MAX_TX_IN_TBTT (16) ++//#define MAX_TX_IN_TBTT (16) + + } + +@@ -657,19 +640,20 @@ void tbtt_tasklet(unsigned long data) + + ======================================================================== + */ +-static struct net_device_stats *RT28xx_get_ether_stats( +- IN struct net_device *net_dev) ++static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device ++ *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ RTMP_ADAPTER *pAd = NULL; + + if (net_dev) + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- if (pAd) +- { ++ if (pAd) { + +- pAd->stats.rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart; +- pAd->stats.tx_packets = pAd->WlanCounters.TransmittedFragmentCount.QuadPart; ++ pAd->stats.rx_packets = ++ pAd->WlanCounters.ReceivedFragmentCount.QuadPart; ++ pAd->stats.tx_packets = ++ pAd->WlanCounters.TransmittedFragmentCount.QuadPart; + + pAd->stats.rx_bytes = pAd->RalinkCounters.ReceivedByteCount; + pAd->stats.tx_bytes = pAd->RalinkCounters.TransmittedByteCount; +@@ -680,45 +664,40 @@ static struct net_device_stats *RT28xx_get_ether_stats( + pAd->stats.rx_dropped = 0; + pAd->stats.tx_dropped = 0; + +- pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received +- pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets ++ pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received ++ pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets + +- pAd->stats.rx_length_errors = 0; +- pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow +- pAd->stats.rx_crc_errors = 0;//pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error +- pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error +- pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun +- pAd->stats.rx_missed_errors = 0; // receiver missed packet ++ pAd->stats.rx_length_errors = 0; ++ pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow ++ pAd->stats.rx_crc_errors = 0; //pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error ++ pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error ++ pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun ++ pAd->stats.rx_missed_errors = 0; // receiver missed packet + +- // detailed tx_errors +- pAd->stats.tx_aborted_errors = 0; +- pAd->stats.tx_carrier_errors = 0; +- pAd->stats.tx_fifo_errors = 0; +- pAd->stats.tx_heartbeat_errors = 0; +- pAd->stats.tx_window_errors = 0; ++ // detailed tx_errors ++ pAd->stats.tx_aborted_errors = 0; ++ pAd->stats.tx_carrier_errors = 0; ++ pAd->stats.tx_fifo_errors = 0; ++ pAd->stats.tx_heartbeat_errors = 0; ++ pAd->stats.tx_window_errors = 0; + +- // for cslip etc +- pAd->stats.rx_compressed = 0; +- pAd->stats.tx_compressed = 0; ++ // for cslip etc ++ pAd->stats.rx_compressed = 0; ++ pAd->stats.tx_compressed = 0; + + return &pAd->stats; +- } +- else +- return NULL; ++ } else ++ return NULL; + } + +- +-BOOLEAN RtmpPhyNetDevExit( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV net_dev) ++BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev) + { + +- +- + // Unregister network device +- if (net_dev != NULL) +- { +- printk("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", net_dev->name); ++ if (net_dev != NULL) { ++ printk ++ ("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", ++ net_dev->name); + RtmpOSNetDevDetach(net_dev); + } + +@@ -726,7 +705,6 @@ BOOLEAN RtmpPhyNetDevExit( + + } + +- + /* + ======================================================================== + Routine Description: +@@ -743,17 +721,14 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd) ++NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd) + { + +- *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); ++ *ppAd = (PVOID) vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); + +- if (*ppAd) +- { ++ if (*ppAd) { + NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +- ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle; ++ ((PRTMP_ADAPTER) * ppAd)->OS_Cookie = handle; + return (NDIS_STATUS_SUCCESS); + } else { + return (NDIS_STATUS_FAILURE); +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index 5990001..8ae0e3e 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -48,31 +48,28 @@ static void ac2_dma_done_tasklet(unsigned long data); + static void ac3_dma_done_tasklet(unsigned long data); + static void fifo_statistic_full_tasklet(unsigned long data); + +- +- + /*---------------------------------------------------------------------*/ + /* Symbol & Macro Definitions */ + /*---------------------------------------------------------------------*/ +-#define RT2860_INT_RX_DLY (1<<0) // bit 0 +-#define RT2860_INT_TX_DLY (1<<1) // bit 1 +-#define RT2860_INT_RX_DONE (1<<2) // bit 2 +-#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 +-#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 +-#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 +-#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 +-#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 +-#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 ++#define RT2860_INT_RX_DLY (1<<0) // bit 0 ++#define RT2860_INT_TX_DLY (1<<1) // bit 1 ++#define RT2860_INT_RX_DONE (1<<2) // bit 2 ++#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 ++#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 ++#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 ++#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 ++#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 ++#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 + + #define INT_RX RT2860_INT_RX_DONE + +-#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) + #define INT_MGMT_DLY RT2860_INT_MGMT_DONE + +- + /*************************************************************************** + * + * Interface-depended memory allocation/Free related procedures. +@@ -80,92 +77,90 @@ static void fifo_statistic_full_tasklet(unsigned long data); + * + **************************************************************************/ + // Function for TxDesc Memory allocation. +-void RTMP_AllocateTxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ *VirtualAddress = ++ (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ PhysicalAddress); + + } + +- + // Function for MgmtDesc Memory allocation. +-void RTMP_AllocateMgmtDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ *VirtualAddress = ++ (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ PhysicalAddress); + + } + +- + // Function for RxDesc Memory allocation. +-void RTMP_AllocateRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ *VirtualAddress = ++ (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ PhysicalAddress); + + } + +- + // Function for free allocated Desc Memory. +-void RTMP_FreeDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); ++ pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, ++ PhysicalAddress); + } + +- + // Function for TxData DMA Memory allocation. +-void RTMP_AllocateFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ *VirtualAddress = ++ (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ PhysicalAddress); + } + +- +-void RTMP_FreeFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, PhysicalAddress); ++ pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, ++ PhysicalAddress); + } + +- + /* + * FUNCTION: Allocate a common buffer for DMA + * ARGUMENTS: +@@ -175,19 +170,19 @@ void RTMP_FreeFirstTxBuffer( + * VirtualAddress: Pointer to memory is returned here + * PhysicalAddress: Physical address corresponding to virtual address + */ +-void RTMP_AllocateSharedMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE)pAd->OS_Cookie; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- *VirtualAddress = (PVOID)pci_alloc_consistent(pObj->pci_dev,sizeof(char)*Length, PhysicalAddress); ++ *VirtualAddress = ++ (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ PhysicalAddress); + } + +- + /* + * FUNCTION: Allocate a packet buffer for DMA + * ARGUMENTS: +@@ -199,25 +194,28 @@ void RTMP_AllocateSharedMemory( + * Notes: + * Cached is ignored: always cached memory + */ +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS ++ PhysicalAddress) + { + struct sk_buff *pkt; + + pkt = dev_alloc_skb(Length); + + if (pkt == NULL) { +- DBGPRINT(RT_DEBUG_ERROR, ("can't allocate rx %ld size packet\n",Length)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("can't allocate rx %ld size packet\n", Length)); + } + + if (pkt) { + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); + *VirtualAddress = (PVOID) pkt->data; +- *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE); ++ *PhysicalAddress = ++ PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, ++ PCI_DMA_FROMDEVICE); + } else { + *VirtualAddress = (PVOID) NULL; + *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; +@@ -226,36 +224,40 @@ PNDIS_PACKET RTMP_AllocateRxPacketBuffer( + return (PNDIS_PACKET) pkt; + } + +- +-VOID Invalid_Remaining_Packet( +- IN PRTMP_ADAPTER pAd, +- IN ULONG VirtualAddress) ++VOID Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, IN ULONG VirtualAddress) + { + NDIS_PHYSICAL_ADDRESS PhysicalAddress; + +- PhysicalAddress = PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress+1600), RX_BUFFER_NORMSIZE-1600, -1, PCI_DMA_FROMDEVICE); ++ PhysicalAddress = ++ PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress + 1600), ++ RX_BUFFER_NORMSIZE - 1600, -1, PCI_DMA_FROMDEVICE); + } + +-NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER *pAd) ++NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + + tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac0_dma_done_task, ac0_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac1_dma_done_task, ac1_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac2_dma_done_task, ac2_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac3_dma_done_task, ac3_dma_done_tasklet, ++ (unsigned long)pAd); + tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->fifo_statistic_full_task, ++ fifo_statistic_full_tasklet, (unsigned long)pAd); + + return NDIS_STATUS_SUCCESS; + } + +- +-void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) ++void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj; + +@@ -271,15 +273,12 @@ void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) + tasklet_kill(&pObj->fifo_statistic_full_task); + } + +- +-NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER *pAd) ++NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) + { + +- + return NDIS_STATUS_SUCCESS; + } + +- + /* + ======================================================================== + Routine Description: +@@ -294,15 +293,12 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RtmpMgmtTaskExit( +- IN RTMP_ADAPTER *pAd) ++VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + { + +- + return; + } + +- + static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) + { + u32 regValue; +@@ -311,31 +307,28 @@ static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) + regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); + //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + { +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable + } + //else +- // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); ++ // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); + + if (regValue != 0) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); + } + +- + static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) + { + u32 regValue; + + pAd->int_disable_mask |= mode; +- regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable ++ regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable + +- if (regValue == 0) +- { ++ if (regValue == 0) { + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); + } + } + +- + /*************************************************************************** + * + * tasklet related procedures. +@@ -345,17 +338,18 @@ static void mgmt_dma_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("mgmt_dma_done_process\n"); ++// printk("mgmt_dma_done_process\n"); + IntSource.word = 0; + IntSource.field.MgmtDmaDone = 1; + pAd->int_pending &= ~INT_MGMT_DLY; +@@ -368,8 +362,7 @@ static void mgmt_dma_done_tasklet(unsigned long data) + /* + * double check to avoid lose of interrupts + */ +- if (pAd->int_pending & INT_MGMT_DLY) +- { ++ if (pAd->int_pending & INT_MGMT_DLY) { + tasklet_hi_schedule(&pObj->mgmt_dma_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -380,30 +373,29 @@ static void mgmt_dma_done_tasklet(unsigned long data) + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + } + +- + static void rx_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- BOOLEAN bReschedule = 0; ++ BOOLEAN bReschedule = 0; + POS_COOKIE pObj; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + pAd->int_pending &= ~(INT_RX); +- bReschedule = STARxDoneInterruptHandle(pAd, 0); ++ bReschedule = STARxDoneInterruptHandle(pAd, 0); + + RTMP_INT_LOCK(&pAd->irq_lock, flags); + /* + * double check to avoid rotting packet + */ +- if (pAd->int_pending & INT_RX || bReschedule) +- { ++ if (pAd->int_pending & INT_RX || bReschedule) { + tasklet_hi_schedule(&pObj->rx_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -415,7 +407,6 @@ static void rx_done_tasklet(unsigned long data) + + } + +- + void fifo_statistic_full_tasklet(unsigned long data) + { + unsigned long flags; +@@ -424,10 +415,11 @@ void fifo_statistic_full_tasklet(unsigned long data) + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + pAd->int_pending &= ~(FifoStaFullInt); + NICUpdateFifoStaCounters(pAd); +@@ -436,8 +428,7 @@ void fifo_statistic_full_tasklet(unsigned long data) + /* + * double check to avoid rotting packet + */ +- if (pAd->int_pending & FifoStaFullInt) +- { ++ if (pAd->int_pending & FifoStaFullInt) { + tasklet_hi_schedule(&pObj->fifo_statistic_full_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -454,18 +445,19 @@ static void ac3_dma_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++// printk("ac0_dma_done_process\n"); + IntSource.word = 0; + IntSource.field.Ac3DmaDone = 1; + pAd->int_pending &= ~INT_AC3_DLY; +@@ -476,8 +468,7 @@ static void ac3_dma_done_tasklet(unsigned long data) + /* + * double check to avoid lose of interrupts + */ +- if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) +- { ++ if ((pAd->int_pending & INT_AC3_DLY) || bReschedule) { + tasklet_hi_schedule(&pObj->ac3_dma_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -488,21 +479,21 @@ static void ac3_dma_done_tasklet(unsigned long data) + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + } + +- + static void ac2_dma_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + IntSource.word = 0; + IntSource.field.Ac2DmaDone = 1; +@@ -515,8 +506,7 @@ static void ac2_dma_done_tasklet(unsigned long data) + /* + * double check to avoid lose of interrupts + */ +- if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) +- { ++ if ((pAd->int_pending & INT_AC2_DLY) || bReschedule) { + tasklet_hi_schedule(&pObj->ac2_dma_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -527,23 +517,23 @@ static void ac2_dma_done_tasklet(unsigned long data) + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + } + +- + static void ac1_dma_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++// printk("ac0_dma_done_process\n"); + IntSource.word = 0; + IntSource.field.Ac1DmaDone = 1; + pAd->int_pending &= ~INT_AC1_DLY; +@@ -554,8 +544,7 @@ static void ac1_dma_done_tasklet(unsigned long data) + /* + * double check to avoid lose of interrupts + */ +- if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) +- { ++ if ((pAd->int_pending & INT_AC1_DLY) || bReschedule) { + tasklet_hi_schedule(&pObj->ac1_dma_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -566,36 +555,35 @@ static void ac1_dma_done_tasklet(unsigned long data) + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + } + +- + static void ac0_dma_done_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++// printk("ac0_dma_done_process\n"); + IntSource.word = 0; + IntSource.field.Ac0DmaDone = 1; + pAd->int_pending &= ~INT_AC0_DLY; + +-// RTMPHandleMgmtRingDmaDoneInterrupt(pAd); ++// RTMPHandleMgmtRingDmaDoneInterrupt(pAd); + bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); + + RTMP_INT_LOCK(&pAd->irq_lock, flags); + /* + * double check to avoid lose of interrupts + */ +- if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) +- { ++ if ((pAd->int_pending & INT_AC0_DLY) || bReschedule) { + tasklet_hi_schedule(&pObj->ac0_dma_done_task); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + return; +@@ -606,9 +594,6 @@ static void ac0_dma_done_tasklet(unsigned long data) + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + } + +- +- +- + /*************************************************************************** + * + * interrupt handler related procedures. +@@ -618,27 +603,25 @@ int print_int_count; + + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + { +- struct net_device *net_dev = (struct net_device *) dev_instance; ++ struct net_device *net_dev = (struct net_device *)dev_instance; + PRTMP_ADAPTER pAd = NULL; +- INT_SOURCE_CSR_STRUC IntSource; ++ INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- + /* Note 03312008: we can not return here before +- RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); +- Or kernel will panic after ifconfig ra0 down sometimes */ +- ++ RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); ++ Or kernel will panic after ifconfig ra0 down sometimes */ + + // + // Inital the Interrupt source. + // + IntSource.word = 0x00000000L; +-// McuIntSource.word = 0x00000000L; ++// McuIntSource.word = 0x00000000L; + + // + // Get the interrupt sources & saved to local variable +@@ -655,25 +638,26 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + // + // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. + // RT2860 => when ASIC is sleeping, MAC register can be read and written. +-// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + { + RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear + } +-// else +-// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); ++// else ++// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); + +-// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); +-// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); +-// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", +-// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); ++// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); ++// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); ++// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", ++// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); + + // Do nothing if Reset in progress +- if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |fRTMP_ADAPTER_HALT_IN_PROGRESS))) +- { +- return IRQ_HANDLED; ++ if (RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS))) { ++ return IRQ_HANDLED; + } +- + // + // Handle interrupt, walk through all bits + // Should start from highest priority interrupt +@@ -684,7 +668,6 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + + #endif + +- + pAd->bPCIclkOff = FALSE; + + // If required spinlock, each interrupt service routine has to acquire +@@ -692,28 +675,25 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + // + + // Do nothing if NIC doesn't exist +- if (IntSource.word == 0xffffffff) +- { +- RTMP_SET_FLAG(pAd, (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS)); +- return IRQ_HANDLED; ++ if (IntSource.word == 0xffffffff) { ++ RTMP_SET_FLAG(pAd, ++ (fRTMP_ADAPTER_NIC_NOT_EXIST | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS)); ++ return IRQ_HANDLED; + } + +- if (IntSource.word & TxCoherent) +- { ++ if (IntSource.word & TxCoherent) { + DBGPRINT(RT_DEBUG_ERROR, (">>>TxCoherent<<<\n")); + RTMPHandleRxCoherentInterrupt(pAd); + } + +- if (IntSource.word & RxCoherent) +- { ++ if (IntSource.word & RxCoherent) { + DBGPRINT(RT_DEBUG_ERROR, (">>>RxCoherent<<<\n")); + RTMPHandleRxCoherentInterrupt(pAd); + } + +- if (IntSource.word & FifoStaFullInt) +- { +- if ((pAd->int_disable_mask & FifoStaFullInt) == 0) +- { ++ if (IntSource.word & FifoStaFullInt) { ++ if ((pAd->int_disable_mask & FifoStaFullInt) == 0) { + /* mask FifoStaFullInt */ + rt2860_int_disable(pAd, FifoStaFullInt); + tasklet_hi_schedule(&pObj->fifo_statistic_full_task); +@@ -721,20 +701,16 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + pAd->int_pending |= FifoStaFullInt; + } + +- if (IntSource.word & INT_MGMT_DLY) +- { +- if ((pAd->int_disable_mask & INT_MGMT_DLY) ==0 ) +- { ++ if (IntSource.word & INT_MGMT_DLY) { ++ if ((pAd->int_disable_mask & INT_MGMT_DLY) == 0) { + rt2860_int_disable(pAd, INT_MGMT_DLY); + tasklet_hi_schedule(&pObj->mgmt_dma_done_task); + } +- pAd->int_pending |= INT_MGMT_DLY ; ++ pAd->int_pending |= INT_MGMT_DLY; + } + +- if (IntSource.word & INT_RX) +- { +- if ((pAd->int_disable_mask & INT_RX) == 0) +- { ++ if (IntSource.word & INT_RX) { ++ if ((pAd->int_disable_mask & INT_RX) == 0) { + + /* mask RxINT */ + rt2860_int_disable(pAd, INT_RX); +@@ -743,11 +719,9 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + pAd->int_pending |= INT_RX; + } + +- if (IntSource.word & INT_AC3_DLY) +- { ++ if (IntSource.word & INT_AC3_DLY) { + +- if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) +- { ++ if ((pAd->int_disable_mask & INT_AC3_DLY) == 0) { + /* mask TxDataInt */ + rt2860_int_disable(pAd, INT_AC3_DLY); + tasklet_hi_schedule(&pObj->ac3_dma_done_task); +@@ -755,11 +729,9 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + pAd->int_pending |= INT_AC3_DLY; + } + +- if (IntSource.word & INT_AC2_DLY) +- { ++ if (IntSource.word & INT_AC2_DLY) { + +- if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) +- { ++ if ((pAd->int_disable_mask & INT_AC2_DLY) == 0) { + /* mask TxDataInt */ + rt2860_int_disable(pAd, INT_AC2_DLY); + tasklet_hi_schedule(&pObj->ac2_dma_done_task); +@@ -767,13 +739,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + pAd->int_pending |= INT_AC2_DLY; + } + +- if (IntSource.word & INT_AC1_DLY) +- { ++ if (IntSource.word & INT_AC1_DLY) { + + pAd->int_pending |= INT_AC1_DLY; + +- if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) +- { ++ if ((pAd->int_disable_mask & INT_AC1_DLY) == 0) { + /* mask TxDataInt */ + rt2860_int_disable(pAd, INT_AC1_DLY); + tasklet_hi_schedule(&pObj->ac1_dma_done_task); +@@ -781,8 +751,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + + } + +- if (IntSource.word & INT_AC0_DLY) +- { ++ if (IntSource.word & INT_AC0_DLY) { + + /* + if (IntSource.word & 0x2) { +@@ -793,8 +762,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + */ + pAd->int_pending |= INT_AC0_DLY; + +- if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) +- { ++ if ((pAd->int_disable_mask & INT_AC0_DLY) == 0) { + /* mask TxDataInt */ + rt2860_int_disable(pAd, INT_AC0_DLY); + tasklet_hi_schedule(&pObj->ac0_dma_done_task); +@@ -802,14 +770,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + + } + +- +- if (IntSource.word & PreTBTTInt) +- { ++ if (IntSource.word & PreTBTTInt) { + RTMPHandlePreTBTTInterrupt(pAd); + } + +- if (IntSource.word & TBTTInt) +- { ++ if (IntSource.word & TBTTInt) { + RTMPHandleTBTTInterrupt(pAd); + } + +@@ -818,57 +783,57 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + RTMPHandleTwakeupInterrupt(pAd); + } + +- return IRQ_HANDLED; ++ return IRQ_HANDLED; + } + + /* + * invaild or writeback cache + * and convert virtual address to physical address + */ +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction) ++dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, ++ int sd_idx, int direction) + { + PRTMP_ADAPTER pAd; + POS_COOKIE pObj; + + /* +- ------ Porting Information ------ +- > For Tx Alloc: +- mgmt packets => sd_idx = 0 +- SwIdx: pAd->MgmtRing.TxCpuIdx +- pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa; +- +- data packets => sd_idx = 1 +- TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx +- QueIdx: pTxBlk->QueIdx +- pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa; +- +- > For Rx Alloc: +- sd_idx = -1 +- */ ++ ------ Porting Information ------ ++ > For Tx Alloc: ++ mgmt packets => sd_idx = 0 ++ SwIdx: pAd->MgmtRing.TxCpuIdx ++ pTxD : pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ ++ data packets => sd_idx = 1 ++ TxIdx : pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx ++ QueIdx: pTxBlk->QueIdx ++ pTxD : pAd->TxRing[pTxBlk->QueIdx].Cell[TxIdx].AllocVa; ++ ++ > For Rx Alloc: ++ sd_idx = -1 ++ */ + +- pAd = (PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; ++ pAd = (PRTMP_ADAPTER) handle; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (sd_idx == 1) +- { +- PTX_BLK pTxBlk; +- pTxBlk = (PTX_BLK)ptr; +- return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, direction); +- } +- else +- { ++ if (sd_idx == 1) { ++ PTX_BLK pTxBlk; ++ pTxBlk = (PTX_BLK) ptr; ++ return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, ++ pTxBlk->SrcBufLen, direction); ++ } else { + return pci_map_single(pObj->pci_dev, ptr, size, direction); + } + + } + +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction) ++void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, ++ int direction) + { + PRTMP_ADAPTER pAd; + POS_COOKIE pObj; + +- pAd=(PRTMP_ADAPTER)handle; +- pObj = (POS_COOKIE)pAd->OS_Cookie; ++ pAd = (PRTMP_ADAPTER) handle; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); + +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +index 1e6d347..30fc4bb 100644 +--- a/drivers/staging/rt2860/rt_usb.c ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -38,7 +38,7 @@ + + #include "rt_config.h" + +- void dump_urb(struct urb* purb) ++void dump_urb(struct urb *purb) + { + printk("urb :0x%08lx\n", (unsigned long)purb); + printk("\tdev :0x%08lx\n", (unsigned long)purb->dev); +@@ -46,16 +46,20 @@ + printk("\tpipe :0x%08x\n", purb->pipe); + printk("\tstatus :%d\n", purb->status); + printk("\ttransfer_flags :0x%08x\n", purb->transfer_flags); +- printk("\ttransfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer); ++ printk("\ttransfer_buffer :0x%08lx\n", ++ (unsigned long)purb->transfer_buffer); + printk("\ttransfer_buffer_length:%d\n", purb->transfer_buffer_length); + printk("\tactual_length :%d\n", purb->actual_length); +- printk("\tsetup_packet :0x%08lx\n", (unsigned long)purb->setup_packet); ++ printk("\tsetup_packet :0x%08lx\n", ++ (unsigned long)purb->setup_packet); + printk("\tstart_frame :%d\n", purb->start_frame); + printk("\tnumber_of_packets :%d\n", purb->number_of_packets); + printk("\tinterval :%d\n", purb->interval); + printk("\terror_count :%d\n", purb->error_count); +- printk("\tcontext :0x%08lx\n", (unsigned long)purb->context); +- printk("\tcomplete :0x%08lx\n\n", (unsigned long)purb->complete); ++ printk("\tcontext :0x%08lx\n", ++ (unsigned long)purb->context); ++ printk("\tcomplete :0x%08lx\n\n", ++ (unsigned long)purb->complete); + } + + /* +@@ -73,23 +77,22 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RtmpMgmtTaskInit( +- IN RTMP_ADAPTER *pAd) ++NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) + { + RTMP_OS_TASK *pTask; + NDIS_STATUS status; + + /* +- Creat TimerQ Thread, We need init timerQ related structure before create the timer thread. +- */ ++ Creat TimerQ Thread, We need init timerQ related structure before create the timer thread. ++ */ + RtmpTimerQInit(pAd); + + pTask = &pAd->timerTask; + RtmpOSTaskInit(pTask, "RtmpTimerTask", pAd); + status = RtmpOSTaskAttach(pTask, RtmpTimerQThread, pTask); +- if (status == NDIS_STATUS_FAILURE) +- { +- printk (KERN_WARNING "%s: unable to start RtmpTimerQThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ if (status == NDIS_STATUS_FAILURE) { ++ printk(KERN_WARNING "%s: unable to start RtmpTimerQThread\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); + return NDIS_STATUS_FAILURE; + } + +@@ -97,9 +100,9 @@ NDIS_STATUS RtmpMgmtTaskInit( + pTask = &pAd->mlmeTask; + RtmpOSTaskInit(pTask, "RtmpMlmeTask", pAd); + status = RtmpOSTaskAttach(pTask, MlmeThread, pTask); +- if (status == NDIS_STATUS_FAILURE) +- { +- printk (KERN_WARNING "%s: unable to start MlmeThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ if (status == NDIS_STATUS_FAILURE) { ++ printk(KERN_WARNING "%s: unable to start MlmeThread\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); + return NDIS_STATUS_FAILURE; + } + +@@ -107,18 +110,15 @@ NDIS_STATUS RtmpMgmtTaskInit( + pTask = &pAd->cmdQTask; + RtmpOSTaskInit(pTask, "RtmpCmdQTask", pAd); + status = RtmpOSTaskAttach(pTask, RTUSBCmdThread, pTask); +- if (status == NDIS_STATUS_FAILURE) +- { +- printk (KERN_WARNING "%s: unable to start RTUSBCmdThread\n", RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); ++ if (status == NDIS_STATUS_FAILURE) { ++ printk(KERN_WARNING "%s: unable to start RTUSBCmdThread\n", ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev)); + return NDIS_STATUS_FAILURE; + } + +- + return NDIS_STATUS_SUCCESS; + } + +- +- + /* + ======================================================================== + Routine Description: +@@ -133,11 +133,10 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RtmpMgmtTaskExit( +- IN RTMP_ADAPTER *pAd) ++VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + { +- INT ret; +- RTMP_OS_TASK *pTask; ++ INT ret; ++ RTMP_OS_TASK *pTask; + + // Sleep 50 milliseconds so pending io might finish normally + RTMPusecDelay(50000); +@@ -153,10 +152,11 @@ VOID RtmpMgmtTaskExit( + /* Terminate Mlme Thread */ + pTask = &pAd->mlmeTask; + ret = RtmpOSTaskKill(pTask); +- if (ret == NDIS_STATUS_FAILURE) +- { ++ if (ret == NDIS_STATUS_FAILURE) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", +- RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd-> ++ net_dev), ++ pTask->taskName)); + } + + /* Terminate cmdQ thread */ +@@ -174,10 +174,11 @@ VOID RtmpMgmtTaskExit( + mb(); + //RTUSBCMDUp(pAd); + ret = RtmpOSTaskKill(pTask); +- if (ret == NDIS_STATUS_FAILURE) +- { ++ if (ret == NDIS_STATUS_FAILURE) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", +- RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ RTMP_OS_NETDEV_GET_DEVNAME ++ (pAd->net_dev), ++ pTask->taskName)); + } + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_UNKNOWN; + } +@@ -185,47 +186,44 @@ VOID RtmpMgmtTaskExit( + /* Terminate timer thread */ + pTask = &pAd->timerTask; + ret = RtmpOSTaskKill(pTask); +- if (ret == NDIS_STATUS_FAILURE) +- { ++ if (ret == NDIS_STATUS_FAILURE) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", +- RTMP_OS_NETDEV_GET_DEVNAME(pAd->net_dev), pTask->taskName)); ++ RTMP_OS_NETDEV_GET_DEVNAME(pAd-> ++ net_dev), ++ pTask->taskName)); + } + +- + } + +- + static void rtusb_dataout_complete(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- purbb_t pUrb; +- POS_COOKIE pObj; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId; +- NTSTATUS Status; +- unsigned long IrqFlags; +- +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; +- Status = pUrb->status; ++ PRTMP_ADAPTER pAd; ++ purbb_t pUrb; ++ POS_COOKIE pObj; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId; ++ NTSTATUS Status; ++ unsigned long IrqFlags; ++ ++ pUrb = (purbb_t) data; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ Status = pUrb->status; + + // Store BulkOut PipeId + BulkOutPipeId = pHTTXContext->BulkOutPipeId; + pAd->BulkOutDataOneSecCount++; + + //DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition, +- // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; + pHTTXContext->IRPPending = FALSE; + pAd->watchDogTxPendingCnt[BulkOutPipeId] = 0; + +- if (Status == USB_ST_NOERROR) +- { ++ if (Status == USB_ST_NOERROR) { + pAd->BulkOutComplete++; + + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); +@@ -235,30 +233,37 @@ static void rtusb_dataout_complete(unsigned long data) + FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext); + //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); + +- +- } +- else // STATUS_OTHER ++ } else // STATUS_OTHER + { +- PUCHAR pBuf; ++ PUCHAR pBuf; + + pAd->BulkOutCompleteOther++; + +- pBuf = &pHTTXContext->TransferBuffer->field.WirelessPacket[pHTTXContext->NextBulkOutPosition]; ++ pBuf = ++ &pHTTXContext->TransferBuffer->field. ++ WirelessPacket[pHTTXContext->NextBulkOutPosition]; + + if (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST | +- fRTMP_ADAPTER_BULKOUT_RESET))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST | ++ fRTMP_ADAPTER_BULKOUT_RESET))) { + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); + pAd->bulkResetPipeid = BulkOutPipeId; + pAd->bulkResetReq[BulkOutPipeId] = pAd->BulkOutReq; + } + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkOutDataPacket failed: ReasonCode=%d!\n", Status)); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther)); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7])); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("BulkOutDataPacket failed: ReasonCode=%d!\n", ++ Status)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", ++ pAd->BulkOutReq, pAd->BulkOutComplete, ++ pAd->BulkOutCompleteOther)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", ++ pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], ++ pBuf[5], pBuf[6], pBuf[7])); + //DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther)); + + } +@@ -268,12 +273,17 @@ static void rtusb_dataout_complete(unsigned long data) + // bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out. + // + //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- if ((pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition) && +- (pHTTXContext->ENextBulkOutPosition != (pHTTXContext->CurWritePosition+8)) && +- !RTUSB_TEST_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId))) +- { ++ if ((pHTTXContext->ENextBulkOutPosition != ++ pHTTXContext->CurWritePosition) ++ && (pHTTXContext->ENextBulkOutPosition != ++ (pHTTXContext->CurWritePosition + 8)) ++ && !RTUSB_TEST_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_FRAG << ++ BulkOutPipeId))) { + // Indicate There is data avaliable +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << ++ BulkOutPipeId)); + } + //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); + +@@ -282,49 +292,46 @@ static void rtusb_dataout_complete(unsigned long data) + RTUSBKickBulkOut(pAd); + } + +- + static void rtusb_null_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pNullContext; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long irqFlag; +- +- +- pUrb = (purbb_t)data; +- pNullContext = (PTX_CONTEXT)pUrb->context; +- pAd = pNullContext->pAd; +- Status = pUrb->status; ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pNullContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long irqFlag; ++ ++ pUrb = (purbb_t) data; ++ pNullContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pNullContext->pAd; ++ Status = pUrb->status; + + // Reset Null frame context flags + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); +- pNullContext->IRPPending = FALSE; +- pNullContext->InUse = FALSE; ++ pNullContext->IRPPending = FALSE; ++ pNullContext->InUse = FALSE; + pAd->BulkOutPending[0] = FALSE; + pAd->watchDogTxPendingCnt[0] = 0; + +- if (Status == USB_ST_NOERROR) +- { ++ if (Status == USB_ST_NOERROR) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER ++ } else // STATUS_OTHER + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", Status)); ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", ++ Status)); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ pAd->bulkResetPipeid = ++ (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + } + } +@@ -334,46 +341,42 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + RTUSBKickBulkOut(pAd); + } + +- + static void rtusb_rts_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pRTSContext; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long irqFlag; +- +- +- pUrb = (purbb_t)data; +- pRTSContext = (PTX_CONTEXT)pUrb->context; +- pAd = pRTSContext->pAd; +- Status = pUrb->status; ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pRTSContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long irqFlag; ++ ++ pUrb = (purbb_t) data; ++ pRTSContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pRTSContext->pAd; ++ Status = pUrb->status; + + // Reset RTS frame context flags + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); + pRTSContext->IRPPending = FALSE; +- pRTSContext->InUse = FALSE; ++ pRTSContext->InUse = FALSE; + +- if (Status == USB_ST_NOERROR) +- { ++ if (Status == USB_ST_NOERROR) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER ++ } else // STATUS_OTHER + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n")); ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Bulk Out RTS Frame Failed\n")); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ pAd->bulkResetPipeid = ++ (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + } + } +@@ -386,44 +389,40 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + // The protectioon of rest bulk should be in BulkOut routine + RTUSBKickBulkOut(pAd); + +- + } + +- + static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pPsPollContext; +- purbb_t pUrb; +- NTSTATUS Status; +- +- +- +- pUrb = (purbb_t)data; +- pPsPollContext = (PTX_CONTEXT)pUrb->context; +- pAd = pPsPollContext->pAd; +- Status = pUrb->status; ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pPsPollContext; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ ++ pUrb = (purbb_t) data; ++ pPsPollContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pPsPollContext->pAd; ++ Status = pUrb->status; + + // Reset PsPoll context flags +- pPsPollContext->IRPPending = FALSE; +- pPsPollContext->InUse = FALSE; ++ pPsPollContext->IRPPending = FALSE; ++ pPsPollContext->InUse = FALSE; + pAd->watchDogTxPendingCnt[0] = 0; + +- if (Status == USB_ST_NOERROR) +- { ++ if (Status == USB_ST_NOERROR) { + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } +- else // STATUS_OTHER ++ } else // STATUS_OTHER + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n")); ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Bulk Out PSPoll Failed\n")); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); ++ pAd->bulkResetPipeid = ++ (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); + } + } + +@@ -437,7 +436,6 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + + } + +- + /* + ======================================================================== + Routine Description: +@@ -454,18 +452,17 @@ Note: + */ + static void rx_done_tasklet(unsigned long data) + { +- purbb_t pUrb; +- PRX_CONTEXT pRxContext; +- PRTMP_ADAPTER pAd; +- NTSTATUS Status; +- unsigned int IrqFlags; +- +- pUrb = (purbb_t)data; +- pRxContext = (PRX_CONTEXT)pUrb->context; +- pAd = pRxContext->pAd; ++ purbb_t pUrb; ++ PRX_CONTEXT pRxContext; ++ PRTMP_ADAPTER pAd; ++ NTSTATUS Status; ++ unsigned int IrqFlags; ++ ++ pUrb = (purbb_t) data; ++ pRxContext = (PRX_CONTEXT) pUrb->context; ++ pAd = pRxContext->pAd; + Status = pUrb->status; + +- + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext->InUse = FALSE; + pRxContext->IRPPending = FALSE; +@@ -473,8 +470,7 @@ static void rx_done_tasklet(unsigned long data) + //NdisInterlockedDecrement(&pAd->PendingRx); + pAd->PendingRx--; + +- if (Status == USB_ST_NOERROR) +- { ++ if (Status == USB_ST_NOERROR) { + pAd->BulkInComplete++; + pAd->NextRxBulkInPosition = 0; + if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero. +@@ -483,8 +479,7 @@ static void rx_done_tasklet(unsigned long data) + INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE); + } + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- } +- else // STATUS_OTHER ++ } else // STATUS_OTHER + { + pAd->BulkInCompleteFail++; + // Still read this packet although it may comtain wrong bytes. +@@ -493,16 +488,19 @@ static void rx_done_tasklet(unsigned long data) + + // Parsing all packets. because after reset, the index will reset to all zero. + if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_BULKIN_RESET | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_BULKIN_RESET | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n", +- Status, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pRxContext->pUrb->actual_length)); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n", ++ Status, pAd->NextRxBulkInIndex, ++ pAd->NextRxBulkInReadIndex, ++ pRxContext->pUrb->actual_length)); + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, ++ NULL, 0); + } + } + +@@ -510,46 +508,43 @@ static void rx_done_tasklet(unsigned long data) + + RTUSBBulkReceive(pAd); + +- + return; + + } + +- + static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pMLMEContext; +- int index; +- PNDIS_PACKET pPacket; +- purbb_t pUrb; +- NTSTATUS Status; +- unsigned long IrqFlags; +- +- +- pUrb = (purbb_t)data; +- pMLMEContext = (PTX_CONTEXT)pUrb->context; +- pAd = pMLMEContext->pAd; +- Status = pUrb->status; +- index = pMLMEContext->SelfIdx; ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pMLMEContext; ++ int index; ++ PNDIS_PACKET pPacket; ++ purbb_t pUrb; ++ NTSTATUS Status; ++ unsigned long IrqFlags; ++ ++ pUrb = (purbb_t) data; ++ pMLMEContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pMLMEContext->pAd; ++ Status = pUrb->status; ++ index = pMLMEContext->SelfIdx; + + ASSERT((pAd->MgmtRing.TxDmaIdx == index)); + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + +- +- if (Status != USB_ST_NOERROR) +- { ++ if (Status != USB_ST_NOERROR) { + //Bulk-Out fail status handle + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out MLME Failed, Status=%d!\n", Status)); ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Bulk Out MLME Failed, Status=%d!\n", ++ Status)); + // TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt? + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); ++ pAd->bulkResetPipeid = ++ (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); + } + } + +@@ -576,163 +571,141 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + RTMPFreeNdisPacket(pAd, pPacket); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && +- ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) +- { // For Mgmt Bulk-Out failed, ignore it now. +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { ++ } else { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) { // For Mgmt Bulk-Out failed, ignore it now. ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { + + // Always call Bulk routine, even reset bulk. + // The protectioon of rest bulk should be in BulkOut routine +- if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */) +- { ++ if (pAd->MgmtRing.TxSwFreeIdx < ++ MGMT_RING_SIZE ++ /* pMLMEContext->bWaitingBulkOut == TRUE */ ) { + RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); + } +- RTUSBKickBulkOut(pAd); +- } ++ RTUSBKickBulkOut(pAd); + } +- ++ } + + } + + static void rtusb_ac3_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 3; +- purbb_t pUrb; +- ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 3; ++ purbb_t pUrb; + +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; ++ pUrb = (purbb_t) data; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ } else { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { ++ pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, ++ MAX_TX_PROCESS); + } + +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<3); ++ RTUSB_SET_BULK_FLAG(pAd, ++ fRTUSB_BULK_OUT_DATA_NORMAL << 3); + RTUSBKickBulkOut(pAd); + } + } + +- + return; + } + +- + static void rtusb_ac2_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 2; +- purbb_t pUrb; +- ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 2; ++ purbb_t pUrb; + +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; ++ pUrb = (purbb_t) data; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ } else { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { ++ pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, ++ MAX_TX_PROCESS); + } + +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<2); ++ RTUSB_SET_BULK_FLAG(pAd, ++ fRTUSB_BULK_OUT_DATA_NORMAL << 2); + RTUSBKickBulkOut(pAd); + } + } + +- + return; + } + +- + static void rtusb_ac1_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 1; +- purbb_t pUrb; +- ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 1; ++ purbb_t pUrb; + +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; ++ pUrb = (purbb_t) data; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ } else { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { ++ pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, ++ MAX_TX_PROCESS); + } + +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<1); ++ RTUSB_SET_BULK_FLAG(pAd, ++ fRTUSB_BULK_OUT_DATA_NORMAL << 1); + RTUSBKickBulkOut(pAd); + } + } +@@ -740,41 +713,35 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data) + + } + +- + static void rtusb_ac0_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 0; +- purbb_t pUrb; ++ PRTMP_ADAPTER pAd; ++ PHT_TX_CONTEXT pHTTXContext; ++ UCHAR BulkOutPipeId = 0; ++ purbb_t pUrb; + +- +- pUrb = (purbb_t)data; +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; ++ pUrb = (purbb_t) data; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + // do nothing and return directly. +- } +- else +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) +- { +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0); +- } +- else +- { pHTTXContext = &pAd->TxContext[BulkOutPipeId]; ++ } else { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, ++ NULL, 0); ++ } else { ++ pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) && +- /* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ +- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && +- (pHTTXContext->bCurWriting == FALSE)) +- { +- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS); ++ /* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */ ++ (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) && ++ (pHTTXContext->bCurWriting == FALSE)) { ++ RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, ++ MAX_TX_PROCESS); + } + + RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL); +@@ -782,34 +749,38 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + } + } + +- + return; + + } + +- +-NDIS_STATUS RtmpNetTaskInit( +- IN RTMP_ADAPTER *pAd) ++NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + // Create receive tasklet +- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG)pAd); +- tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac1_dma_done_task, rtusb_ac1_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac2_dma_done_task, rtusb_ac2_dma_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->ac3_dma_done_task, rtusb_ac3_dma_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG) pAd); ++ tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac1_dma_done_task, rtusb_ac1_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac2_dma_done_task, rtusb_ac2_dma_done_tasklet, ++ (unsigned long)pAd); ++ tasklet_init(&pObj->ac3_dma_done_task, rtusb_ac3_dma_done_tasklet, ++ (unsigned long)pAd); + tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->null_frame_complete_task, rtusb_null_frame_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->rts_frame_complete_task, rtusb_rts_frame_done_tasklet, (unsigned long)pAd); +- tasklet_init(&pObj->pspoll_frame_complete_task, rtusb_pspoll_frame_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->null_frame_complete_task, ++ rtusb_null_frame_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->rts_frame_complete_task, ++ rtusb_rts_frame_done_tasklet, (unsigned long)pAd); ++ tasklet_init(&pObj->pspoll_frame_complete_task, ++ rtusb_pspoll_frame_done_tasklet, (unsigned long)pAd); + + return NDIS_STATUS_SUCCESS; + } + +- +-void RtmpNetTaskExit(IN RTMP_ADAPTER *pAd) ++void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj; + +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index df6130c..dc1f600 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -40,7 +40,7 @@ + #include "rt_config.h" + + #ifdef DBG +-extern ULONG RTDebugLevel; ++extern ULONG RTDebugLevel; + #endif + + #define NR_WEP_KEYS 4 +@@ -49,235 +49,296 @@ extern ULONG RTDebugLevel; + + #define GROUP_KEY_NO 4 + +-extern UCHAR CipherWpa2Template[]; ++extern UCHAR CipherWpa2Template[]; + +-typedef struct PACKED _RT_VERSION_INFO{ +- UCHAR DriverVersionW; +- UCHAR DriverVersionX; +- UCHAR DriverVersionY; +- UCHAR DriverVersionZ; +- UINT DriverBuildYear; +- UINT DriverBuildMonth; +- UINT DriverBuildDay; ++typedef struct PACKED _RT_VERSION_INFO { ++ UCHAR DriverVersionW; ++ UCHAR DriverVersionX; ++ UCHAR DriverVersionY; ++ UCHAR DriverVersionZ; ++ UINT DriverBuildYear; ++ UINT DriverBuildMonth; ++ UINT DriverBuildDay; + } RT_VERSION_INFO, *PRT_VERSION_INFO; + +-static __s32 ralinkrate[] = +- {2, 4, 11, 22, // CCK +- 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +- 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 +- 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 +- 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 +- 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 +- 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 +- 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 +- 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 +- 90, 180, 270, 360, 540, 720, 810, 900}; ++static __s32 ralinkrate[] = { 2, 4, 11, 22, // CCK ++ 12, 18, 24, 36, 48, 72, 96, 108, // OFDM ++ 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 ++ 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 ++ 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 ++ 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 ++ 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 ++ 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 ++ 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 ++ 90, 180, 270, 360, 540, 720, 810, 900 ++}; + +-INT Set_SSID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); ++INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); + +-INT Set_NetworkType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg); ++INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); + +-VOID RTMPAddKey( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_802_11_KEY pKey) ++VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + { +- ULONG KeyIdx; +- MAC_TABLE_ENTRY *pEntry; ++ ULONG KeyIdx; ++ MAC_TABLE_ENTRY *pEntry; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); ++ ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { ++ if (pKey->KeyIndex & 0x80000000) { ++ if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { ++ NdisZeroMemory(pAd->StaCfg.PMK, 32); ++ NdisMoveMemory(pAd->StaCfg.PMK, ++ pKey->KeyMaterial, ++ pKey->KeyLength); ++ goto end; ++ } ++ // Update PTK ++ NdisZeroMemory(&pAd->SharedKey[BSS0][0], ++ sizeof(CIPHER_KEY)); ++ pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, ++ pKey->KeyMaterial, LEN_TKIP_EK); ++ ++ if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption2Enabled) { ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK, ++ LEN_TKIP_TXMICK); ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK + ++ LEN_TKIP_TXMICK, ++ LEN_TKIP_RXMICK); ++ } else { ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK, ++ LEN_TKIP_TXMICK); ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK + ++ LEN_TKIP_TXMICK, ++ LEN_TKIP_RXMICK); ++ } + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); ++ // Decide its ChiperAlg ++ if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption2Enabled) ++ pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption3Enabled) ++ pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; ++ else ++ pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; ++ ++ // Update these related information to MAC_TABLE_ENTRY ++ pEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ NdisMoveMemory(pEntry->PairwiseKey.Key, ++ pAd->SharedKey[BSS0][0].Key, ++ LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, ++ pAd->SharedKey[BSS0][0].RxMic, ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, ++ pAd->SharedKey[BSS0][0].TxMic, ++ LEN_TKIP_TXMICK); ++ pEntry->PairwiseKey.CipherAlg = ++ pAd->SharedKey[BSS0][0].CipherAlg; ++ ++ // Update pairwise key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ 0, ++ pAd->SharedKey[BSS0][0].CipherAlg, ++ pAd->SharedKey[BSS0][0].Key, ++ pAd->SharedKey[BSS0][0].TxMic, ++ pAd->SharedKey[BSS0][0].RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ 0, ++ pAd->SharedKey[BSS0][0]. ++ CipherAlg, pEntry); + +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- if (pKey->KeyIndex & 0x80000000) +- { +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { +- NdisZeroMemory(pAd->StaCfg.PMK, 32); +- NdisMoveMemory(pAd->StaCfg.PMK, pKey->KeyMaterial, pKey->KeyLength); +- goto end; +- } +- // Update PTK +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pKey->KeyMaterial, LEN_TKIP_EK); +- +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- else +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- +- // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; +- +- // Update these related information to MAC_TABLE_ENTRY +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(pEntry->PairwiseKey.Key, pAd->SharedKey[BSS0][0].Key, LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, pAd->SharedKey[BSS0][0].RxMic, LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, pAd->SharedKey[BSS0][0].TxMic, LEN_TKIP_TXMICK); +- pEntry->PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; +- +- // Update pairwise key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pEntry); +- +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- { +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) { ++ // set 802.1x port control ++ //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else +- { +- // Update GTK +- pAd->StaCfg.DefaultKeyId = (pKey->KeyIndex & 0xFF); +- NdisZeroMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, pKey->KeyMaterial, LEN_TKIP_EK); +- +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- else +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- } +- +- // Update Shared Key CipherAlg +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_NONE; +- if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; +- +- // Update group key information to ASIC Shared Key Table +- AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic); +- +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, +- NULL); +- +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; ++ } ++ } else { ++ // Update GTK ++ pAd->StaCfg.DefaultKeyId = (pKey->KeyIndex & 0xFF); ++ NdisZeroMemory(&pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId], ++ sizeof(CIPHER_KEY)); ++ pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = ++ LEN_TKIP_EK; ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId].Key, ++ pKey->KeyMaterial, LEN_TKIP_EK); ++ ++ if (pAd->StaCfg.GroupCipher == ++ Ndis802_11Encryption2Enabled) { ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ RxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK, ++ LEN_TKIP_TXMICK); ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ TxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK + ++ LEN_TKIP_TXMICK, ++ LEN_TKIP_RXMICK); ++ } else { ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ TxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK, ++ LEN_TKIP_TXMICK); ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ RxMic, ++ pKey->KeyMaterial + LEN_TKIP_EK + ++ LEN_TKIP_TXMICK, ++ LEN_TKIP_RXMICK); ++ } ++ ++ // Update Shared Key CipherAlg ++ pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]. ++ CipherAlg = CIPHER_NONE; ++ if (pAd->StaCfg.GroupCipher == ++ Ndis802_11Encryption2Enabled) ++ pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]. ++ CipherAlg = CIPHER_TKIP; ++ else if (pAd->StaCfg.GroupCipher == ++ Ndis802_11Encryption3Enabled) ++ pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]. ++ CipherAlg = CIPHER_AES; ++ ++ // Update group key information to ASIC Shared Key Table ++ AsicAddSharedKeyEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pAd->SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ CipherAlg, ++ pAd->SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ Key, ++ pAd->SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ TxMic, ++ pAd->SharedKey[BSS0][pAd->StaCfg. ++ DefaultKeyId]. ++ RxMic); ++ ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pAd->SharedKey[BSS0][pAd-> ++ StaCfg. ++ DefaultKeyId]. ++ CipherAlg, NULL); ++ ++ // set 802.1x port control ++ //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else // dynamic WEP from wpa_supplicant ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = NdisMediaStateConnected; ++ } ++ } else // dynamic WEP from wpa_supplicant + { +- UCHAR CipherAlg; +- PUCHAR Key; ++ UCHAR CipherAlg; ++ PUCHAR Key; + +- if(pKey->KeyLength == 32) ++ if (pKey->KeyLength == 32) + goto end; + + KeyIdx = pKey->KeyIndex & 0x0fffffff; + +- if (KeyIdx < 4) +- { ++ if (KeyIdx < 4) { + // it is a default shared key, for Pairwise key setting +- if (pKey->KeyIndex & 0x80000000) +- { ++ if (pKey->KeyIndex & 0x80000000) { + pEntry = MacTableLookup(pAd, pKey->BSSID); + +- if (pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey: Set Pair-wise Key\n")); ++ if (pEntry) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPAddKey: Set Pair-wise Key\n")); + + // set key material and key length +- pEntry->PairwiseKey.KeyLen = (UCHAR)pKey->KeyLength; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pKey->KeyMaterial, pKey->KeyLength); ++ pEntry->PairwiseKey.KeyLen = ++ (UCHAR) pKey->KeyLength; ++ NdisMoveMemory(pEntry->PairwiseKey.Key, ++ &pKey->KeyMaterial, ++ pKey->KeyLength); + + // set Cipher type + if (pKey->KeyLength == 5) +- pEntry->PairwiseKey.CipherAlg = CIPHER_WEP64; ++ pEntry->PairwiseKey.CipherAlg = ++ CIPHER_WEP64; + else +- pEntry->PairwiseKey.CipherAlg = CIPHER_WEP128; ++ pEntry->PairwiseKey.CipherAlg = ++ CIPHER_WEP128; + + // Add Pair-wise key to Asic +- AsicAddPairwiseKeyEntry( +- pAd, +- pEntry->Addr, +- (UCHAR)pEntry->Aid, +- &pEntry->PairwiseKey); ++ AsicAddPairwiseKeyEntry(pAd, ++ pEntry->Addr, ++ (UCHAR) pEntry-> ++ Aid, ++ &pEntry-> ++ PairwiseKey); + + // update WCID attribute table and IVEIV table for this entry +- RTMPAddWcidAttributeEntry( +- pAd, +- BSS0, +- KeyIdx, // The value may be not zero +- pEntry->PairwiseKey.CipherAlg, +- pEntry); ++ RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, // The value may be not zero ++ pEntry-> ++ PairwiseKey. ++ CipherAlg, ++ pEntry); + + } +- } +- else +- { ++ } else { + // Default key for tx (shared key) + pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; + + // set key material and key length +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = (UCHAR) pKey->KeyLength; +- NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, &pKey->KeyMaterial, pKey->KeyLength); ++ pAd->SharedKey[BSS0][KeyIdx].KeyLen = ++ (UCHAR) pKey->KeyLength; ++ NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, ++ &pKey->KeyMaterial, ++ pKey->KeyLength); + + // Set Ciper type + if (pKey->KeyLength == 5) +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_WEP64; ++ pAd->SharedKey[BSS0][KeyIdx].CipherAlg = ++ CIPHER_WEP64; + else +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CIPHER_WEP128; ++ pAd->SharedKey[BSS0][KeyIdx].CipherAlg = ++ CIPHER_WEP128; + +- CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; +- Key = pAd->SharedKey[BSS0][KeyIdx].Key; ++ CipherAlg = ++ pAd->SharedKey[BSS0][KeyIdx].CipherAlg; ++ Key = pAd->SharedKey[BSS0][KeyIdx].Key; + + // Set Group key material to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, CipherAlg, Key, NULL, NULL); ++ AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, ++ CipherAlg, Key, NULL, ++ NULL); + + // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, CipherAlg, NULL); ++ RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, ++ CipherAlg, NULL); + + } + } +@@ -286,12 +347,12 @@ end: + return; + } + +-char * rtstrchr(const char * s, int c) ++char *rtstrchr(const char *s, int c) + { +- for(; *s != (char) c; ++s) +- if (*s == '\0') +- return NULL; +- return (char *) s; ++ for (; *s != (char)c; ++s) ++ if (*s == '\0') ++ return NULL; ++ return (char *)s; + } + + /* +@@ -300,8 +361,7 @@ This is required for LinEX2004/kernel2.6.7 to provide iwlist scanning function + + int + rt_ioctl_giwname(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) ++ struct iw_request_info *info, char *name, char *extra) + { + strncpy(name, "Ralink STA", IFNAMSIZ); + // RT2870 2.1.0.0 uses "RT2870 Wireless" +@@ -310,89 +370,87 @@ rt_ioctl_giwname(struct net_device *dev, + } + + int rt_ioctl_siwfreq(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_freq *freq, char *extra) ++ struct iw_request_info *info, ++ struct iw_freq *freq, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; +- int chan = -1; ++ int chan = -1; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + if (freq->e > 1) + return -EINVAL; + +- if((freq->e == 0) && (freq->m <= 1000)) ++ if ((freq->e == 0) && (freq->m <= 1000)) + chan = freq->m; // Setting by channel number + else +- MAP_KHZ_TO_CHANNEL_ID( (freq->m /100) , chan); // Setting by frequency - search the table , like 2.412G, 2.422G, +- +- if (ChannelSanity(pAdapter, chan) == TRUE) +- { +- pAdapter->CommonCfg.Channel = chan; +- DBGPRINT(RT_DEBUG_ERROR, ("==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->CommonCfg.Channel)); +- } +- else +- return -EINVAL; ++ MAP_KHZ_TO_CHANNEL_ID((freq->m / 100), chan); // Setting by frequency - search the table , like 2.412G, 2.422G, ++ ++ if (ChannelSanity(pAdapter, chan) == TRUE) { ++ pAdapter->CommonCfg.Channel = chan; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", ++ SIOCSIWFREQ, pAdapter->CommonCfg.Channel)); ++ } else ++ return -EINVAL; + + return 0; + } ++ + int rt_ioctl_giwfreq(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_freq *freq, char *extra) ++ struct iw_request_info *info, ++ struct iw_freq *freq, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + UCHAR ch; +- ULONG m = 2412000; ++ ULONG m = 2412000; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- ch = pAdapter->CommonCfg.Channel; ++ ch = pAdapter->CommonCfg.Channel; + +- DBGPRINT(RT_DEBUG_TRACE,("==>rt_ioctl_giwfreq %d\n", ch)); ++ DBGPRINT(RT_DEBUG_TRACE, ("==>rt_ioctl_giwfreq %d\n", ch)); + +- MAP_CHANNEL_ID_TO_KHZ(ch, m); ++ MAP_CHANNEL_ID_TO_KHZ(ch, m); + freq->m = m * 100; + freq->e = 1; + return 0; + } + + int rt_ioctl_siwmode(struct net_device *dev, +- struct iw_request_info *info, +- __u32 *mode, char *extra) ++ struct iw_request_info *info, __u32 * mode, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + +- switch (*mode) +- { +- case IW_MODE_ADHOC: +- Set_NetworkType_Proc(pAdapter, "Adhoc"); +- break; +- case IW_MODE_INFRA: +- Set_NetworkType_Proc(pAdapter, "Infra"); +- break; +- case IW_MODE_MONITOR: +- Set_NetworkType_Proc(pAdapter, "Monitor"); +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_siwmode::SIOCSIWMODE (unknown %d)\n", *mode)); +- return -EINVAL; ++ switch (*mode) { ++ case IW_MODE_ADHOC: ++ Set_NetworkType_Proc(pAdapter, "Adhoc"); ++ break; ++ case IW_MODE_INFRA: ++ Set_NetworkType_Proc(pAdapter, "Infra"); ++ break; ++ case IW_MODE_MONITOR: ++ Set_NetworkType_Proc(pAdapter, "Monitor"); ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===>rt_ioctl_siwmode::SIOCSIWMODE (unknown %d)\n", ++ *mode)); ++ return -EINVAL; + } + + // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +@@ -402,8 +460,7 @@ int rt_ioctl_siwmode(struct net_device *dev, + } + + int rt_ioctl_giwmode(struct net_device *dev, +- struct iw_request_info *info, +- __u32 *mode, char *extra) ++ struct iw_request_info *info, __u32 * mode, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + +@@ -411,63 +468,57 @@ int rt_ioctl_giwmode(struct net_device *dev, + + if (ADHOC_ON(pAdapter)) + *mode = IW_MODE_ADHOC; +- else if (INFRA_ON(pAdapter)) ++ else if (INFRA_ON(pAdapter)) + *mode = IW_MODE_INFRA; +- else if (MONITOR_ON(pAdapter)) +- { +- *mode = IW_MODE_MONITOR; +- } +- else +- *mode = IW_MODE_AUTO; ++ else if (MONITOR_ON(pAdapter)) { ++ *mode = IW_MODE_MONITOR; ++ } else ++ *mode = IW_MODE_AUTO; + + DBGPRINT(RT_DEBUG_TRACE, ("==>rt_ioctl_giwmode(mode=%d)\n", *mode)); + return 0; + } + + int rt_ioctl_siwsens(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) ++ struct iw_request_info *info, char *name, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + return 0; + } + + int rt_ioctl_giwsens(struct net_device *dev, +- struct iw_request_info *info, +- char *name, char *extra) ++ struct iw_request_info *info, char *name, char *extra) + { + return 0; + } + + int rt_ioctl_giwrange(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) ++ struct iw_request_info *info, ++ struct iw_point *data, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; +- struct iw_range *range = (struct iw_range *) extra; ++ struct iw_range *range = (struct iw_range *)extra; + u16 val; + int i; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_giwrange\n")); + data->length = sizeof(struct iw_range); + memset(range, 0, sizeof(struct iw_range)); + + range->txpower_capa = IW_TXPOW_DBM; + +- if (INFRA_ON(pAdapter)||ADHOC_ON(pAdapter)) +- { ++ if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) { + range->min_pmp = 1 * 1024; + range->max_pmp = 65535 * 1024; + range->min_pmt = 1 * 1024; +@@ -475,7 +526,7 @@ int rt_ioctl_giwrange(struct net_device *dev, + range->pmp_flags = IW_POWER_PERIOD; + range->pmt_flags = IW_POWER_TIMEOUT; + range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | +- IW_POWER_UNICAST_R | IW_POWER_ALL_R; ++ IW_POWER_UNICAST_R | IW_POWER_ALL_R; + } + + range->we_version_compiled = WIRELESS_EXT; +@@ -486,15 +537,14 @@ int rt_ioctl_giwrange(struct net_device *dev, + range->min_retry = 0; + range->max_retry = 255; + +- range->num_channels = pAdapter->ChannelListNum; ++ range->num_channels = pAdapter->ChannelListNum; + + val = 0; +- for (i = 1; i <= range->num_channels; i++) +- { ++ for (i = 1; i <= range->num_channels; i++) { + u32 m = 2412000; +- range->freq[val].i = pAdapter->ChannelList[i-1].Channel; +- MAP_CHANNEL_ID_TO_KHZ(pAdapter->ChannelList[i-1].Channel, m); +- range->freq[val].m = m * 100; /* OS_HZ */ ++ range->freq[val].i = pAdapter->ChannelList[i - 1].Channel; ++ MAP_CHANNEL_ID_TO_KHZ(pAdapter->ChannelList[i - 1].Channel, m); ++ range->freq[val].m = m * 100; /* OS_HZ */ + + range->freq[val].e = 1; + val++; +@@ -503,11 +553,11 @@ int rt_ioctl_giwrange(struct net_device *dev, + } + range->num_frequency = val; + +- range->max_qual.qual = 100; /* what is correct max? This was not +- * documented exactly. At least +- * 69 has been observed. */ +- range->max_qual.level = 0; /* dB */ +- range->max_qual.noise = 0; /* dB */ ++ range->max_qual.qual = 100; /* what is correct max? This was not ++ * documented exactly. At least ++ * 69 has been observed. */ ++ range->max_qual.level = 0; /* dB */ ++ range->max_qual.noise = 0; /* dB */ + + /* What would be suitable values for "average/typical" qual? */ + range->avg_qual.qual = 20; +@@ -527,74 +577,68 @@ int rt_ioctl_giwrange(struct net_device *dev, + + /* IW_ENC_CAPA_* bit field */ + range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 | +- IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; ++ IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP; + + return 0; + } + + int rt_ioctl_siwap(struct net_device *dev, +- struct iw_request_info *info, +- struct sockaddr *ap_addr, char *extra) ++ struct iw_request_info *info, ++ struct sockaddr *ap_addr, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; +- NDIS_802_11_MAC_ADDRESS Bssid; ++ NDIS_802_11_MAC_ADDRESS Bssid; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } +- +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. +- pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } ++ ++ if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! MLME busy, reset MLME state machine !!!\n")); ++ } ++ // tell CNTL state machine to call NdisMSetInformationComplete() after completing ++ // this request, because this request is initiated by NDIS. ++ pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; + // Prevent to connect AP again in STAMlmePeriodicExec +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; ++ pAdapter->MlmeAux.AutoReconnectSsidLen = 32; + +- memset(Bssid, 0, MAC_ADDR_LEN); +- memcpy(Bssid, ap_addr->sa_data, MAC_ADDR_LEN); +- MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID, +- sizeof(NDIS_802_11_MAC_ADDRESS), +- (VOID *)&Bssid); ++ memset(Bssid, 0, MAC_ADDR_LEN); ++ memcpy(Bssid, ap_addr->sa_data, MAC_ADDR_LEN); ++ MlmeEnqueue(pAdapter, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID, ++ sizeof(NDIS_802_11_MAC_ADDRESS), (VOID *) & Bssid); + +- DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCSIWAP %02x:%02x:%02x:%02x:%02x:%02x\n", +- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("IOCTL::SIOCSIWAP %02x:%02x:%02x:%02x:%02x:%02x\n", Bssid[0], ++ Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); + + return 0; + } + + int rt_ioctl_giwap(struct net_device *dev, +- struct iw_request_info *info, +- struct sockaddr *ap_addr, char *extra) ++ struct iw_request_info *info, ++ struct sockaddr *ap_addr, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) +- { ++ if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) { + ap_addr->sa_family = ARPHRD_ETHER; + memcpy(ap_addr->sa_data, &pAdapter->CommonCfg.Bssid, ETH_ALEN); + } +- // Add for RT2870 +- else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- ap_addr->sa_family = ARPHRD_ETHER; +- memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN); +- } +- else +- { ++ // Add for RT2870 ++ else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) { ++ ap_addr->sa_family = ARPHRD_ETHER; ++ memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN); ++ } else { + DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIWAP(=EMPTY)\n")); + return -ENOTCONN; + } +@@ -619,32 +663,31 @@ int rt_ioctl_giwap(struct net_device *dev, + * drivers for compatibility + */ + static void set_quality(PRTMP_ADAPTER pAdapter, +- struct iw_quality *iq, +- signed char rssi) ++ struct iw_quality *iq, signed char rssi) + { + __u8 ChannelQuality; + + // Normalize Rssi + if (rssi >= -50) + ChannelQuality = 100; +- else if (rssi >= -80) // between -50 ~ -80dbm +- ChannelQuality = (__u8)(24 + ((rssi + 80) * 26)/10); +- else if (rssi >= -90) // between -80 ~ -90dbm +- ChannelQuality = (__u8)((rssi + 90) * 26)/10; ++ else if (rssi >= -80) // between -50 ~ -80dbm ++ ChannelQuality = (__u8) (24 + ((rssi + 80) * 26) / 10); ++ else if (rssi >= -90) // between -80 ~ -90dbm ++ ChannelQuality = (__u8) ((rssi + 90) * 26) / 10; + else + ChannelQuality = 0; + +- iq->qual = (__u8)ChannelQuality; ++ iq->qual = (__u8) ChannelQuality; + +- iq->level = (__u8)(rssi); +- iq->noise = (pAdapter->BbpWriteLatch[66] > pAdapter->BbpTuning.FalseCcaUpperThreshold) ? ((__u8)pAdapter->BbpTuning.FalseCcaUpperThreshold) : ((__u8) pAdapter->BbpWriteLatch[66]); // noise level (dBm) +- iq->noise += 256 - 143; +- iq->updated = pAdapter->iw_stats.qual.updated; ++ iq->level = (__u8) (rssi); ++ iq->noise = (pAdapter->BbpWriteLatch[66] > pAdapter->BbpTuning.FalseCcaUpperThreshold) ? ((__u8) pAdapter->BbpTuning.FalseCcaUpperThreshold) : ((__u8) pAdapter->BbpWriteLatch[66]); // noise level (dBm) ++ iq->noise += 256 - 143; ++ iq->updated = pAdapter->iw_stats.qual.updated; + } + + int rt_ioctl_iwaplist(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) ++ struct iw_request_info *info, ++ struct iw_point *data, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + +@@ -654,91 +697,90 @@ int rt_ioctl_iwaplist(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + data->length = 0; + return 0; +- //return -ENETDOWN; ++ //return -ENETDOWN; + } + +- for (i = 0; i = pAdapter->ScanTab.BssNr) ++ for (i = 0; i < IW_MAX_AP; i++) { ++ if (i >= pAdapter->ScanTab.BssNr) + break; + addr[i].sa_family = ARPHRD_ETHER; +- memcpy(addr[i].sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, MAC_ADDR_LEN); +- set_quality(pAdapter, &qual[i], pAdapter->ScanTab.BssEntry[i].Rssi); ++ memcpy(addr[i].sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ++ MAC_ADDR_LEN); ++ set_quality(pAdapter, &qual[i], ++ pAdapter->ScanTab.BssEntry[i].Rssi); + } + data->length = i; +- memcpy(extra, &addr, i*sizeof(addr[0])); +- data->flags = 1; /* signal quality present (sort of) */ +- memcpy(extra + i*sizeof(addr[0]), &qual, i*sizeof(qual[i])); ++ memcpy(extra, &addr, i * sizeof(addr[0])); ++ data->flags = 1; /* signal quality present (sort of) */ ++ memcpy(extra + i * sizeof(addr[0]), &qual, i * sizeof(qual[i])); + + return 0; + } + + int rt_ioctl_siwscan(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) ++ struct iw_request_info *info, ++ struct iw_point *data, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + +- ULONG Now; ++ ULONG Now; + int Status = NDIS_STATUS_SUCCESS; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; + } + +- if (MONITOR_ON(pAdapter)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n")); +- return -EINVAL; +- } +- ++ if (MONITOR_ON(pAdapter)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! Driver is in Monitor Mode now !!!\n")); ++ return -EINVAL; ++ } + +- if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { ++ if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) { + pAdapter->StaCfg.WpaSupplicantScanCount++; + } + +- pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; ++ pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE; + if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + return NDIS_STATUS_SUCCESS; +- do{ ++ do { + Now = jiffies; + +- if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) && +- (pAdapter->StaCfg.WpaSupplicantScanCount > 3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! WpaSupplicantScanCount > 3\n")); ++ if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) ++ && (pAdapter->StaCfg.WpaSupplicantScanCount > 3)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! WpaSupplicantScanCount > 3\n")); + Status = NDIS_STATUS_SUCCESS; + break; + } + +- if ((OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) && +- ((pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) && +- (pAdapter->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); ++ if ((OPSTATUS_TEST_FLAG ++ (pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ && ((pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ++ || (pAdapter->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK)) ++ && (pAdapter->StaCfg.PortSecured == ++ WPA_802_1X_PORT_NOT_SECURED)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); + Status = NDIS_STATUS_SUCCESS; + break; + } + +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { ++ if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { + RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! MLME busy, reset MLME state machine !!!\n")); + } +- + // tell CNTL state machine to call NdisMSetInformationComplete() after completing + // this request, because this request is initiated by NDIS. + pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; +@@ -747,148 +789,151 @@ int rt_ioctl_siwscan(struct net_device *dev, + pAdapter->StaCfg.LastScanTime = Now; + + MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- 0, +- NULL); ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID_LIST_SCAN, 0, NULL); + + Status = NDIS_STATUS_SUCCESS; + RTMP_MLME_HANDLER(pAdapter); +- }while(0); ++ } while (0); + return NDIS_STATUS_SUCCESS; + } + + int rt_ioctl_giwscan(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *extra) ++ struct iw_request_info *info, ++ struct iw_point *data, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; +- int i=0; ++ int i = 0; + PSTRING current_ev = extra, previous_ev = extra; + PSTRING end_buf; + PSTRING current_val; +- STRING custom[MAX_CUSTOM_LEN] = {0}; ++ STRING custom[MAX_CUSTOM_LEN] = { 0 }; + struct iw_event iwe; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { ++ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { + /* + * Still scanning, indicate the caller should try again. + */ + return -EAGAIN; + } + +- if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { ++ if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) { + pAdapter->StaCfg.WpaSupplicantScanCount = 0; + } + +- if (pAdapter->ScanTab.BssNr == 0) +- { ++ if (pAdapter->ScanTab.BssNr == 0) { + data->length = 0; + return 0; + } + +- if (data->length > 0) +- end_buf = extra + data->length; +- else +- end_buf = extra + IW_SCAN_MAX_DATA; ++ if (data->length > 0) ++ end_buf = extra + data->length; ++ else ++ end_buf = extra + IW_SCAN_MAX_DATA; + +- for (i = 0; i < pAdapter->ScanTab.BssNr; i++) +- { +- if (current_ev >= end_buf) +- { ++ for (i = 0; i < pAdapter->ScanTab.BssNr; i++) { ++ if (current_ev >= end_buf) { + return -E2BIG; +- } +- ++ } + //MAC address + //================================ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWAP; + iwe.u.ap_addr.sa_family = ARPHRD_ETHER; +- memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN); ++ memcpy(iwe.u.ap_addr.sa_data, ++ &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN); + +- previous_ev = current_ev; +- current_ev = iwe_stream_add_event(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN); +- if (current_ev == previous_ev) +- return -E2BIG; ++ previous_ev = current_ev; ++ current_ev = ++ iwe_stream_add_event(info, current_ev, end_buf, &iwe, ++ IW_EV_ADDR_LEN); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + /* +- Protocol: +- it will show scanned AP's WirelessMode . +- it might be +- 802.11a +- 802.11a/n +- 802.11g/n +- 802.11b/g/n +- 802.11g +- 802.11b/g +- */ ++ Protocol: ++ it will show scanned AP's WirelessMode . ++ it might be ++ 802.11a ++ 802.11a/n ++ 802.11g/n ++ 802.11b/g/n ++ 802.11g ++ 802.11b/g ++ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWNAME; + +- +- { +- PBSS_ENTRY pBssEntry=&pAdapter->ScanTab.BssEntry[i]; +- BOOLEAN isGonly=FALSE; +- int rateCnt=0; +- +- if (pBssEntry->Channel>14) +- { +- if (pBssEntry->HtCapabilityLen!=0) +- strcpy(iwe.u.name,"802.11a/n"); +- else +- strcpy(iwe.u.name,"802.11a"); +- } +- else + { +- /* +- if one of non B mode rate is set supported rate . it mean G only. +- */ +- for (rateCnt=0;rateCntSupRateLen;rateCnt++) +- { +- /* +- 6Mbps(140) 9Mbps(146) and >=12Mbps(152) are supported rate , it mean G only. +- */ +- if (pBssEntry->SupRate[rateCnt]==140 || pBssEntry->SupRate[rateCnt]==146 || pBssEntry->SupRate[rateCnt]>=152) +- isGonly=TRUE; +- } ++ PBSS_ENTRY pBssEntry = &pAdapter->ScanTab.BssEntry[i]; ++ BOOLEAN isGonly = FALSE; ++ int rateCnt = 0; + +- for (rateCnt=0;rateCntExtRateLen;rateCnt++) +- { +- if (pBssEntry->ExtRate[rateCnt]==140 || pBssEntry->ExtRate[rateCnt]==146 || pBssEntry->ExtRate[rateCnt]>=152) +- isGonly=TRUE; +- } ++ if (pBssEntry->Channel > 14) { ++ if (pBssEntry->HtCapabilityLen != 0) ++ strcpy(iwe.u.name, "802.11a/n"); ++ else ++ strcpy(iwe.u.name, "802.11a"); ++ } else { ++ /* ++ if one of non B mode rate is set supported rate . it mean G only. ++ */ ++ for (rateCnt = 0; ++ rateCnt < pBssEntry->SupRateLen; ++ rateCnt++) { ++ /* ++ 6Mbps(140) 9Mbps(146) and >=12Mbps(152) are supported rate , it mean G only. ++ */ ++ if (pBssEntry->SupRate[rateCnt] == 140 ++ || pBssEntry->SupRate[rateCnt] == ++ 146 ++ || pBssEntry->SupRate[rateCnt] >= ++ 152) ++ isGonly = TRUE; ++ } + ++ for (rateCnt = 0; ++ rateCnt < pBssEntry->ExtRateLen; ++ rateCnt++) { ++ if (pBssEntry->ExtRate[rateCnt] == 140 ++ || pBssEntry->ExtRate[rateCnt] == ++ 146 ++ || pBssEntry->ExtRate[rateCnt] >= ++ 152) ++ isGonly = TRUE; ++ } + +- if (pBssEntry->HtCapabilityLen!=0) +- { +- if (isGonly==TRUE) +- strcpy(iwe.u.name,"802.11g/n"); +- else +- strcpy(iwe.u.name,"802.11b/g/n"); +- } +- else +- { +- if (isGonly==TRUE) +- strcpy(iwe.u.name,"802.11g"); +- else +- { +- if (pBssEntry->SupRateLen==4 && pBssEntry->ExtRateLen==0) +- strcpy(iwe.u.name,"802.11b"); ++ if (pBssEntry->HtCapabilityLen != 0) { ++ if (isGonly == TRUE) ++ strcpy(iwe.u.name, "802.11g/n"); + else +- strcpy(iwe.u.name,"802.11b/g"); ++ strcpy(iwe.u.name, ++ "802.11b/g/n"); ++ } else { ++ if (isGonly == TRUE) ++ strcpy(iwe.u.name, "802.11g"); ++ else { ++ if (pBssEntry->SupRateLen == 4 ++ && pBssEntry->ExtRateLen == ++ 0) ++ strcpy(iwe.u.name, ++ "802.11b"); ++ else ++ strcpy(iwe.u.name, ++ "802.11b/g"); ++ } + } + } + } +- } + + previous_ev = current_ev; +- current_ev = iwe_stream_add_event(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN); +- if (current_ev == previous_ev) +- return -E2BIG; ++ current_ev = ++ iwe_stream_add_event(info, current_ev, end_buf, &iwe, ++ IW_EV_ADDR_LEN); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + //ESSID + //================================ +@@ -897,33 +942,34 @@ int rt_ioctl_giwscan(struct net_device *dev, + iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].SsidLen; + iwe.u.data.flags = 1; + +- previous_ev = current_ev; +- current_ev = iwe_stream_add_point(info, current_ev,end_buf, &iwe, (PSTRING) pAdapter->ScanTab.BssEntry[i].Ssid); +- if (current_ev == previous_ev) +- return -E2BIG; ++ previous_ev = current_ev; ++ current_ev = ++ iwe_stream_add_point(info, current_ev, end_buf, &iwe, ++ (PSTRING) pAdapter->ScanTab. ++ BssEntry[i].Ssid); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + //Network Type + //================================ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWMODE; +- if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11IBSS) +- { ++ if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11IBSS) { + iwe.u.mode = IW_MODE_ADHOC; +- } +- else if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11Infrastructure) +- { ++ } else if (pAdapter->ScanTab.BssEntry[i].BssType == ++ Ndis802_11Infrastructure) { + iwe.u.mode = IW_MODE_INFRA; +- } +- else +- { ++ } else { + iwe.u.mode = IW_MODE_AUTO; + } + iwe.len = IW_EV_UINT_LEN; + +- previous_ev = current_ev; +- current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_UINT_LEN); +- if (current_ev == previous_ev) +- return -E2BIG; ++ previous_ev = current_ev; ++ current_ev = ++ iwe_stream_add_event(info, current_ev, end_buf, &iwe, ++ IW_EV_UINT_LEN); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + //Channel and Frequency + //================================ +@@ -937,190 +983,217 @@ int rt_ioctl_giwscan(struct net_device *dev, + iwe.u.freq.i = 0; + + previous_ev = current_ev; +- current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_FREQ_LEN); +- if (current_ev == previous_ev) +- return -E2BIG; +- +- //Add quality statistics +- //================================ +- memset(&iwe, 0, sizeof(iwe)); +- iwe.cmd = IWEVQUAL; +- iwe.u.qual.level = 0; +- iwe.u.qual.noise = 0; +- set_quality(pAdapter, &iwe.u.qual, pAdapter->ScanTab.BssEntry[i].Rssi); +- current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_QUAL_LEN); +- if (current_ev == previous_ev) +- return -E2BIG; ++ current_ev = ++ iwe_stream_add_event(info, current_ev, end_buf, &iwe, ++ IW_EV_FREQ_LEN); ++ if (current_ev == previous_ev) ++ return -E2BIG; ++ ++ //Add quality statistics ++ //================================ ++ memset(&iwe, 0, sizeof(iwe)); ++ iwe.cmd = IWEVQUAL; ++ iwe.u.qual.level = 0; ++ iwe.u.qual.noise = 0; ++ set_quality(pAdapter, &iwe.u.qual, ++ pAdapter->ScanTab.BssEntry[i].Rssi); ++ current_ev = ++ iwe_stream_add_event(info, current_ev, end_buf, &iwe, ++ IW_EV_QUAL_LEN); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + //Encyption key + //================================ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWENCODE; +- if (CAP_IS_PRIVACY_ON (pAdapter->ScanTab.BssEntry[i].CapabilityInfo )) +- iwe.u.data.flags =IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; ++ if (CAP_IS_PRIVACY_ON ++ (pAdapter->ScanTab.BssEntry[i].CapabilityInfo)) ++ iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY; + else + iwe.u.data.flags = IW_ENCODE_DISABLED; + +- previous_ev = current_ev; +- current_ev = iwe_stream_add_point(info, current_ev, end_buf,&iwe, (char *)pAdapter->SharedKey[BSS0][(iwe.u.data.flags & IW_ENCODE_INDEX)-1].Key); +- if (current_ev == previous_ev) +- return -E2BIG; ++ previous_ev = current_ev; ++ current_ev = ++ iwe_stream_add_point(info, current_ev, end_buf, &iwe, ++ (char *)pAdapter-> ++ SharedKey[BSS0][(iwe.u.data. ++ flags & ++ IW_ENCODE_INDEX) - ++ 1].Key); ++ if (current_ev == previous_ev) ++ return -E2BIG; + + //Bit Rate + //================================ +- if (pAdapter->ScanTab.BssEntry[i].SupRateLen) +- { +- UCHAR tmpRate = pAdapter->ScanTab.BssEntry[i].SupRate[pAdapter->ScanTab.BssEntry[i].SupRateLen-1]; ++ if (pAdapter->ScanTab.BssEntry[i].SupRateLen) { ++ UCHAR tmpRate = ++ pAdapter->ScanTab.BssEntry[i].SupRate[pAdapter-> ++ ScanTab. ++ BssEntry[i]. ++ SupRateLen - ++ 1]; + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWRATE; +- current_val = current_ev + IW_EV_LCP_LEN; +- if (tmpRate == 0x82) +- iwe.u.bitrate.value = 1 * 1000000; +- else if (tmpRate == 0x84) +- iwe.u.bitrate.value = 2 * 1000000; +- else if (tmpRate == 0x8B) +- iwe.u.bitrate.value = 5.5 * 1000000; +- else if (tmpRate == 0x96) +- iwe.u.bitrate.value = 11 * 1000000; +- else +- iwe.u.bitrate.value = (tmpRate/2) * 1000000; +- +- if (tmpRate == 0x6c && pAdapter->ScanTab.BssEntry[i].HtCapabilityLen > 0) +- { +- int rate_count = sizeof(ralinkrate)/sizeof(__s32); +- HT_CAP_INFO capInfo = pAdapter->ScanTab.BssEntry[i].HtCapability.HtCapInfo; +- int shortGI = capInfo.ChannelWidth ? capInfo.ShortGIfor40 : capInfo.ShortGIfor20; +- int maxMCS = pAdapter->ScanTab.BssEntry[i].HtCapability.MCSSet[1] ? 15 : 7; +- int rate_index = 12 + ((UCHAR)capInfo.ChannelWidth * 24) + ((UCHAR)shortGI *48) + ((UCHAR)maxMCS); ++ current_val = current_ev + IW_EV_LCP_LEN; ++ if (tmpRate == 0x82) ++ iwe.u.bitrate.value = 1 * 1000000; ++ else if (tmpRate == 0x84) ++ iwe.u.bitrate.value = 2 * 1000000; ++ else if (tmpRate == 0x8B) ++ iwe.u.bitrate.value = 5.5 * 1000000; ++ else if (tmpRate == 0x96) ++ iwe.u.bitrate.value = 11 * 1000000; ++ else ++ iwe.u.bitrate.value = (tmpRate / 2) * 1000000; ++ ++ if (tmpRate == 0x6c ++ && pAdapter->ScanTab.BssEntry[i].HtCapabilityLen > ++ 0) { ++ int rate_count = ++ sizeof(ralinkrate) / sizeof(__s32); ++ HT_CAP_INFO capInfo = ++ pAdapter->ScanTab.BssEntry[i].HtCapability. ++ HtCapInfo; ++ int shortGI = ++ capInfo.ChannelWidth ? capInfo. ++ ShortGIfor40 : capInfo.ShortGIfor20; ++ int maxMCS = ++ pAdapter->ScanTab.BssEntry[i].HtCapability. ++ MCSSet[1] ? 15 : 7; ++ int rate_index = ++ 12 + ((UCHAR) capInfo.ChannelWidth * 24) + ++ ((UCHAR) shortGI * 48) + ((UCHAR) maxMCS); + if (rate_index < 0) + rate_index = 0; + if (rate_index > rate_count) + rate_index = rate_count; +- iwe.u.bitrate.value = ralinkrate[rate_index] * 500000; ++ iwe.u.bitrate.value = ++ ralinkrate[rate_index] * 500000; + } + + iwe.u.bitrate.disabled = 0; + current_val = iwe_stream_add_value(info, current_ev, +- current_val, end_buf, &iwe, +- IW_EV_PARAM_LEN); +- +- if((current_val-current_ev)>IW_EV_LCP_LEN) +- current_ev = current_val; +- else +- return -E2BIG; +- } ++ current_val, end_buf, ++ &iwe, ++ IW_EV_PARAM_LEN); + ++ if ((current_val - current_ev) > IW_EV_LCP_LEN) ++ current_ev = current_val; ++ else ++ return -E2BIG; ++ } + //WPA IE +- if (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen > 0) +- { ++ if (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen > 0) { + memset(&iwe, 0, sizeof(iwe)); + memset(&custom[0], 0, MAX_CUSTOM_LEN); +- memcpy(custom, &(pAdapter->ScanTab.BssEntry[i].WpaIE.IE[0]), +- pAdapter->ScanTab.BssEntry[i].WpaIE.IELen); ++ memcpy(custom, ++ &(pAdapter->ScanTab.BssEntry[i].WpaIE.IE[0]), ++ pAdapter->ScanTab.BssEntry[i].WpaIE.IELen); + iwe.cmd = IWEVGENIE; +- iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; +- current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, custom); ++ iwe.u.data.length = ++ pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; ++ current_ev = ++ iwe_stream_add_point(info, current_ev, end_buf, ++ &iwe, custom); + if (current_ev == previous_ev) + return -E2BIG; + } +- + //WPA2 IE +- if (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen > 0) +- { +- memset(&iwe, 0, sizeof(iwe)); ++ if (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen > 0) { ++ memset(&iwe, 0, sizeof(iwe)); + memset(&custom[0], 0, MAX_CUSTOM_LEN); +- memcpy(custom, &(pAdapter->ScanTab.BssEntry[i].RsnIE.IE[0]), +- pAdapter->ScanTab.BssEntry[i].RsnIE.IELen); ++ memcpy(custom, ++ &(pAdapter->ScanTab.BssEntry[i].RsnIE.IE[0]), ++ pAdapter->ScanTab.BssEntry[i].RsnIE.IELen); + iwe.cmd = IWEVGENIE; +- iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; +- current_ev = iwe_stream_add_point(info, current_ev, end_buf, &iwe, custom); ++ iwe.u.data.length = ++ pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; ++ current_ev = ++ iwe_stream_add_point(info, current_ev, end_buf, ++ &iwe, custom); + if (current_ev == previous_ev) + return -E2BIG; +- } ++ } + } + + data->length = current_ev - extra; +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; +- DBGPRINT(RT_DEBUG_ERROR ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %d\n",i , pAdapter->ScanTab.BssNr, data->length)); ++ pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %d\n", ++ i, pAdapter->ScanTab.BssNr, data->length)); + return 0; + } + + int rt_ioctl_siwessid(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *essid) ++ struct iw_request_info *info, ++ struct iw_point *data, char *essid) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + +- if (data->flags) +- { +- PSTRING pSsidString = NULL; ++ if (data->flags) { ++ PSTRING pSsidString = NULL; + + // Includes null character. + if (data->length > (IW_ESSID_MAX_SIZE + 1)) + return -E2BIG; + +- pSsidString = kmalloc(MAX_LEN_OF_SSID+1, MEM_ALLOC_FLAG); +- if (pSsidString) +- { +- NdisZeroMemory(pSsidString, MAX_LEN_OF_SSID+1); ++ pSsidString = kmalloc(MAX_LEN_OF_SSID + 1, MEM_ALLOC_FLAG); ++ if (pSsidString) { ++ NdisZeroMemory(pSsidString, MAX_LEN_OF_SSID + 1); + NdisMoveMemory(pSsidString, essid, data->length); + if (Set_SSID_Proc(pAdapter, pSsidString) == FALSE) + return -EINVAL; +- } +- else ++ } else + return -ENOMEM; +- } +- else +- { ++ } else { + // ANY ssid + if (Set_SSID_Proc(pAdapter, "") == FALSE) + return -EINVAL; +- } ++ } + return 0; + } + + int rt_ioctl_giwessid(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *essid) ++ struct iw_request_info *info, ++ struct iw_point *data, char *essid) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + data->flags = 1; +- if (MONITOR_ON(pAdapter)) +- { +- data->length = 0; +- return 0; +- } ++ if (MONITOR_ON(pAdapter)) { ++ data->length = 0; ++ return 0; ++ } + +- if (OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("MediaState is connected\n")); ++ if (OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("MediaState is connected\n")); + data->length = pAdapter->CommonCfg.SsidLen; +- memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen); ++ memcpy(essid, pAdapter->CommonCfg.Ssid, ++ pAdapter->CommonCfg.SsidLen); + } + #ifdef RTMP_MAC_USB +- // Add for RT2870 +- else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { +- data->length = pAdapter->CommonCfg.SsidLen; +- memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen); ++ // Add for RT2870 ++ else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) { ++ data->length = pAdapter->CommonCfg.SsidLen; ++ memcpy(essid, pAdapter->CommonCfg.Ssid, ++ pAdapter->CommonCfg.SsidLen); + } + #endif // RTMP_MAC_USB // +- else +- {//the ANY ssid was specified +- data->length = 0; +- DBGPRINT(RT_DEBUG_TRACE ,("MediaState is not connected, ess\n")); ++ else { //the ANY ssid was specified ++ data->length = 0; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MediaState is not connected, ess\n")); + } + + return 0; +@@ -1128,19 +1201,18 @@ int rt_ioctl_giwessid(struct net_device *dev, + } + + int rt_ioctl_siwnickn(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *nickname) ++ struct iw_request_info *info, ++ struct iw_point *data, char *nickname) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + if (data->length > IW_ESSID_MAX_SIZE) + return -EINVAL; +@@ -1148,13 +1220,12 @@ int rt_ioctl_siwnickn(struct net_device *dev, + memset(pAdapter->nickname, 0, IW_ESSID_MAX_SIZE + 1); + memcpy(pAdapter->nickname, nickname, data->length); + +- + return 0; + } + + int rt_ioctl_giwnickn(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *data, char *nickname) ++ struct iw_request_info *info, ++ struct iw_point *data, char *nickname) + { + PRTMP_ADAPTER pAdapter = NULL; + +@@ -1163,34 +1234,33 @@ int rt_ioctl_giwnickn(struct net_device *dev, + if (data->length > strlen((PSTRING) pAdapter->nickname) + 1) + data->length = strlen((PSTRING) pAdapter->nickname) + 1; + if (data->length > 0) { +- memcpy(nickname, pAdapter->nickname, data->length-1); +- nickname[data->length-1] = '\0'; ++ memcpy(nickname, pAdapter->nickname, data->length - 1); ++ nickname[data->length - 1] = '\0'; + } + return 0; + } + + int rt_ioctl_siwrts(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *rts, char *extra) ++ struct iw_request_info *info, ++ struct iw_param *rts, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + u16 val; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + if (rts->disabled) + val = MAX_RTS_THRESHOLD; + else if (rts->value < 0 || rts->value > MAX_RTS_THRESHOLD) + return -EINVAL; + else if (rts->value == 0) +- val = MAX_RTS_THRESHOLD; ++ val = MAX_RTS_THRESHOLD; + else + val = rts->value; + +@@ -1201,19 +1271,18 @@ int rt_ioctl_siwrts(struct net_device *dev, + } + + int rt_ioctl_giwrts(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *rts, char *extra) ++ struct iw_request_info *info, ++ struct iw_param *rts, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + rts->value = pAdapter->CommonCfg.RtsThreshold; + rts->disabled = (rts->value == MAX_RTS_THRESHOLD); +@@ -1223,8 +1292,8 @@ int rt_ioctl_giwrts(struct net_device *dev, + } + + int rt_ioctl_siwfrag(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *frag, char *extra) ++ struct iw_request_info *info, ++ struct iw_param *frag, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + u16 val; +@@ -1232,18 +1301,18 @@ int rt_ioctl_siwfrag(struct net_device *dev, + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + if (frag->disabled) + val = MAX_FRAG_THRESHOLD; +- else if (frag->value >= MIN_FRAG_THRESHOLD && frag->value <= MAX_FRAG_THRESHOLD) +- val = __cpu_to_le16(frag->value & ~0x1); /* even numbers only */ ++ else if (frag->value >= MIN_FRAG_THRESHOLD ++ && frag->value <= MAX_FRAG_THRESHOLD) ++ val = __cpu_to_le16(frag->value & ~0x1); /* even numbers only */ + else if (frag->value == 0) +- val = MAX_FRAG_THRESHOLD; ++ val = MAX_FRAG_THRESHOLD; + else + return -EINVAL; + +@@ -1252,19 +1321,18 @@ int rt_ioctl_siwfrag(struct net_device *dev, + } + + int rt_ioctl_giwfrag(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_param *frag, char *extra) ++ struct iw_request_info *info, ++ struct iw_param *frag, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + frag->value = pAdapter->CommonCfg.FragmentThreshold; + frag->disabled = (frag->value == MAX_FRAG_THRESHOLD); +@@ -1276,113 +1344,111 @@ int rt_ioctl_giwfrag(struct net_device *dev, + #define MAX_WEP_KEY_SIZE 13 + #define MIN_WEP_KEY_SIZE 5 + int rt_ioctl_siwencode(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *erq, char *extra) ++ struct iw_request_info *info, ++ struct iw_point *erq, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- +- if ((erq->length == 0) && +- (erq->flags & IW_ENCODE_DISABLED)) +- { ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } ++ ++ if ((erq->length == 0) && (erq->flags & IW_ENCODE_DISABLED)) { + pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; + pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; + pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- goto done; +- } +- else if (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; ++ goto done; ++ } else if (erq->flags & IW_ENCODE_RESTRICTED ++ || erq->flags & IW_ENCODE_OPEN) { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAdapter); + pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; + pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; + pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; + if (erq->flags & IW_ENCODE_RESTRICTED) + pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- else ++ else + pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; + } + +- if (erq->length > 0) +- { ++ if (erq->length > 0) { + int keyIdx = (erq->flags & IW_ENCODE_INDEX) - 1; + /* Check the size of the key */ +- if (erq->length > MAX_WEP_KEY_SIZE) +- { ++ if (erq->length > MAX_WEP_KEY_SIZE) { + return -EINVAL; + } + /* Check key index */ +- if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) +- { +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::Wrong keyIdx=%d! Using default key instead (%d)\n", +- keyIdx, pAdapter->StaCfg.DefaultKeyId)); ++ if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==>rt_ioctl_siwencode::Wrong keyIdx=%d! Using default key instead (%d)\n", ++ keyIdx, pAdapter->StaCfg.DefaultKeyId)); + +- //Using default key ++ //Using default key + keyIdx = pAdapter->StaCfg.DefaultKeyId; +- } +- else ++ } else + pAdapter->StaCfg.DefaultKeyId = keyIdx; + +- NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); +- +- if (erq->length == MAX_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MAX_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP128; +- } +- else if (erq->length == MIN_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MIN_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP64; +- } +- else ++ NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); ++ ++ if (erq->length == MAX_WEP_KEY_SIZE) { ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = ++ MAX_WEP_KEY_SIZE; ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = ++ CIPHER_WEP128; ++ } else if (erq->length == MIN_WEP_KEY_SIZE) { ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = ++ MIN_WEP_KEY_SIZE; ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = ++ CIPHER_WEP64; ++ } else + /* Disable the key */ + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; + + /* Check if the key is not marked as invalid */ +- if(!(erq->flags & IW_ENCODE_NOKEY)) +- { ++ if (!(erq->flags & IW_ENCODE_NOKEY)) { + /* Copy the key in the driver */ +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, extra, erq->length); +- } +- } +- else +- { ++ NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ++ extra, erq->length); ++ } ++ } else { + /* Do we want to just set the transmit key index ? */ + int index = (erq->flags & IW_ENCODE_INDEX) - 1; +- if ((index >= 0) && (index < 4)) +- { ++ if ((index >= 0) && (index < 4)) { + pAdapter->StaCfg.DefaultKeyId = index; +- } +- else ++ } else + /* Don't complain if only change the mode */ +- if (!(erq->flags & IW_ENCODE_MODE)) +- return -EINVAL; +- } ++ if (!(erq->flags & IW_ENCODE_MODE)) ++ return -EINVAL; ++ } + + done: +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::erq->flags=%x\n",erq->flags)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::AuthMode=%x\n",pAdapter->StaCfg.AuthMode)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::DefaultKeyId=%x, KeyLen = %d\n",pAdapter->StaCfg.DefaultKeyId , pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen)); +- DBGPRINT(RT_DEBUG_TRACE ,("==>rt_ioctl_siwencode::WepStatus=%x\n",pAdapter->StaCfg.WepStatus)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==>rt_ioctl_siwencode::erq->flags=%x\n", erq->flags)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==>rt_ioctl_siwencode::AuthMode=%x\n", ++ pAdapter->StaCfg.AuthMode)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==>rt_ioctl_siwencode::DefaultKeyId=%x, KeyLen = %d\n", ++ pAdapter->StaCfg.DefaultKeyId, ++ pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId]. ++ KeyLen)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==>rt_ioctl_siwencode::WepStatus=%x\n", ++ pAdapter->StaCfg.WepStatus)); + return 0; + } + + int + rt_ioctl_giwencode(struct net_device *dev, +- struct iw_request_info *info, +- struct iw_point *erq, char *key) ++ struct iw_request_info *info, ++ struct iw_point *erq, char *key) + { + int kid; + PRTMP_ADAPTER pAdapter = NULL; +@@ -1390,49 +1456,49 @@ rt_ioctl_giwencode(struct net_device *dev, + GET_PAD_FROM_NET_DEV(pAdapter, dev); + + //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; + } + + kid = erq->flags & IW_ENCODE_INDEX; +- DBGPRINT(RT_DEBUG_TRACE, ("===>rt_ioctl_giwencode %d\n", erq->flags & IW_ENCODE_INDEX)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===>rt_ioctl_giwencode %d\n", erq->flags & IW_ENCODE_INDEX)); + +- if (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled) +- { ++ if (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled) { + erq->length = 0; + erq->flags = IW_ENCODE_DISABLED; +- } +- else if ((kid > 0) && (kid <=4)) +- { ++ } else if ((kid > 0) && (kid <= 4)) { + // copy wep key +- erq->flags = kid ; /* NB: base 1 */ +- if (erq->length > pAdapter->SharedKey[BSS0][kid-1].KeyLen) +- erq->length = pAdapter->SharedKey[BSS0][kid-1].KeyLen; +- memcpy(key, pAdapter->SharedKey[BSS0][kid-1].Key, erq->length); ++ erq->flags = kid; /* NB: base 1 */ ++ if (erq->length > pAdapter->SharedKey[BSS0][kid - 1].KeyLen) ++ erq->length = pAdapter->SharedKey[BSS0][kid - 1].KeyLen; ++ memcpy(key, pAdapter->SharedKey[BSS0][kid - 1].Key, ++ erq->length); + //if ((kid == pAdapter->PortCfg.DefaultKeyId)) +- //erq->flags |= IW_ENCODE_ENABLED; /* XXX */ ++ //erq->flags |= IW_ENCODE_ENABLED; /* XXX */ + if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ ++ erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ + else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ ++ erq->flags |= IW_ENCODE_OPEN; /* XXX */ + +- } +- else if (kid == 0) +- { ++ } else if (kid == 0) { + if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ ++ erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ + else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ +- erq->length = pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen; +- memcpy(key, pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].Key, erq->length); ++ erq->flags |= IW_ENCODE_OPEN; /* XXX */ ++ erq->length = ++ pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId]. ++ KeyLen; ++ memcpy(key, ++ pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId]. ++ Key, erq->length); + // copy default key ID + if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) +- erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ ++ erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ + else +- erq->flags |= IW_ENCODE_OPEN; /* XXX */ +- erq->flags = pAdapter->StaCfg.DefaultKeyId + 1; /* NB: base 1 */ ++ erq->flags |= IW_ENCODE_OPEN; /* XXX */ ++ erq->flags = pAdapter->StaCfg.DefaultKeyId + 1; /* NB: base 1 */ + erq->flags |= IW_ENCODE_ENABLED; /* XXX */ + } + +@@ -1440,63 +1506,71 @@ rt_ioctl_giwencode(struct net_device *dev, + + } + +-void getBaInfo( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pOutBuf) ++void getBaInfo(IN PRTMP_ADAPTER pAd, IN PSTRING pOutBuf) + { + INT i, j; + BA_ORI_ENTRY *pOriBAEntry; + BA_REC_ENTRY *pRecBAEntry; + +- for (i=0; iMacTab.Content[i]; +- if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC)) +- || (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh)) +- { +- sprintf(pOutBuf + strlen(pOutBuf), "\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n", +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], +- pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5], pEntry->Aid); ++ if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) ++ && (pEntry->Sst == SST_ASSOC)) ++ || (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh)) { ++ sprintf(pOutBuf + strlen(pOutBuf), ++ "\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n", ++ pEntry->Addr[0], pEntry->Addr[1], ++ pEntry->Addr[2], pEntry->Addr[3], ++ pEntry->Addr[4], pEntry->Addr[5], pEntry->Aid); + + sprintf(pOutBuf, "%s[Recipient]\n", pOutBuf); +- for (j=0; j < NUM_OF_TID; j++) +- { +- if (pEntry->BARecWcidArray[j] != 0) +- { +- pRecBAEntry =&pAd->BATable.BARecEntry[pEntry->BARecWcidArray[j]]; +- sprintf(pOutBuf + strlen(pOutBuf), "TID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen); ++ for (j = 0; j < NUM_OF_TID; j++) { ++ if (pEntry->BARecWcidArray[j] != 0) { ++ pRecBAEntry = ++ &pAd->BATable.BARecEntry[pEntry-> ++ BARecWcidArray ++ [j]]; ++ sprintf(pOutBuf + strlen(pOutBuf), ++ "TID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", ++ j, pRecBAEntry->BAWinSize, ++ pRecBAEntry->LastIndSeq, ++ pRecBAEntry->list.qlen); + } + } + sprintf(pOutBuf, "%s\n", pOutBuf); + + sprintf(pOutBuf, "%s[Originator]\n", pOutBuf); +- for (j=0; j < NUM_OF_TID; j++) +- { +- if (pEntry->BAOriWcidArray[j] != 0) +- { +- pOriBAEntry =&pAd->BATable.BAOriEntry[pEntry->BAOriWcidArray[j]]; +- sprintf(pOutBuf + strlen(pOutBuf), "TID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, pEntry->TxSeq[j]); ++ for (j = 0; j < NUM_OF_TID; j++) { ++ if (pEntry->BAOriWcidArray[j] != 0) { ++ pOriBAEntry = ++ &pAd->BATable.BAOriEntry[pEntry-> ++ BAOriWcidArray ++ [j]]; ++ sprintf(pOutBuf + strlen(pOutBuf), ++ "TID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", ++ j, pOriBAEntry->BAWinSize, ++ pOriBAEntry->Sequence, ++ pEntry->TxSeq[j]); + } + } + sprintf(pOutBuf, "%s\n\n", pOutBuf); + } +- if (strlen(pOutBuf) > (IW_PRIV_SIZE_MASK - 30)) +- break; ++ if (strlen(pOutBuf) > (IW_PRIV_SIZE_MASK - 30)) ++ break; + } + + return; + } + + int rt_ioctl_siwmlme(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ PRTMP_ADAPTER pAd = NULL; + struct iw_mlme *pMlme = (struct iw_mlme *)wrqu->data.pointer; +- MLME_QUEUE_ELEM MsgElem; +- MLME_DISASSOC_REQ_STRUCT DisAssocReq; +- MLME_DEAUTH_REQ_STRUCT DeAuthReq; ++ MLME_QUEUE_ELEM MsgElem; ++ MLME_DISASSOC_REQ_STRUCT DisAssocReq; ++ MLME_DEAUTH_REQ_STRUCT DeAuthReq; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -1505,405 +1579,444 @@ int rt_ioctl_siwmlme(struct net_device *dev, + if (pMlme == NULL) + return -EINVAL; + +- switch(pMlme->cmd) +- { ++ switch (pMlme->cmd) { + #ifdef IW_MLME_DEAUTH +- case IW_MLME_DEAUTH: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - IW_MLME_DEAUTH\n", __func__)); +- COPY_MAC_ADDR(DeAuthReq.Addr, pAd->CommonCfg.Bssid); +- DeAuthReq.Reason = pMlme->reason_code; +- MsgElem.MsgLen = sizeof(MLME_DEAUTH_REQ_STRUCT); +- NdisMoveMemory(MsgElem.Msg, &DeAuthReq, sizeof(MLME_DEAUTH_REQ_STRUCT)); +- MlmeDeauthReqAction(pAd, &MsgElem); +- if (INFRA_ON(pAd)) +- { +- LinkDown(pAd, FALSE); +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- } +- break; ++ case IW_MLME_DEAUTH: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> %s - IW_MLME_DEAUTH\n", __func__)); ++ COPY_MAC_ADDR(DeAuthReq.Addr, pAd->CommonCfg.Bssid); ++ DeAuthReq.Reason = pMlme->reason_code; ++ MsgElem.MsgLen = sizeof(MLME_DEAUTH_REQ_STRUCT); ++ NdisMoveMemory(MsgElem.Msg, &DeAuthReq, ++ sizeof(MLME_DEAUTH_REQ_STRUCT)); ++ MlmeDeauthReqAction(pAd, &MsgElem); ++ if (INFRA_ON(pAd)) { ++ LinkDown(pAd, FALSE); ++ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; ++ } ++ break; + #endif // IW_MLME_DEAUTH // + #ifdef IW_MLME_DISASSOC +- case IW_MLME_DISASSOC: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - IW_MLME_DISASSOC\n", __func__)); +- COPY_MAC_ADDR(DisAssocReq.Addr, pAd->CommonCfg.Bssid); +- DisAssocReq.Reason = pMlme->reason_code; +- +- MsgElem.Machine = ASSOC_STATE_MACHINE; +- MsgElem.MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem.MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(MsgElem.Msg, &DisAssocReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- MlmeDisassocReqAction(pAd, &MsgElem); +- break; ++ case IW_MLME_DISASSOC: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> %s - IW_MLME_DISASSOC\n", __func__)); ++ COPY_MAC_ADDR(DisAssocReq.Addr, pAd->CommonCfg.Bssid); ++ DisAssocReq.Reason = pMlme->reason_code; ++ ++ MsgElem.Machine = ASSOC_STATE_MACHINE; ++ MsgElem.MsgType = MT2_MLME_DISASSOC_REQ; ++ MsgElem.MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(MsgElem.Msg, &DisAssocReq, ++ sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; ++ MlmeDisassocReqAction(pAd, &MsgElem); ++ break; + #endif // IW_MLME_DISASSOC // +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("====> %s - Unknow Command\n", __func__)); +- break; ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> %s - Unknow Command\n", __func__)); ++ break; + } + + return 0; + } + + int rt_ioctl_siwauth(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_param *param = &wrqu->param; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; + } + switch (param->flags & IW_AUTH_INDEX) { +- case IW_AUTH_WPA_VERSION: +- if (param->value == IW_AUTH_WPA_VERSION_WPA) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; +- if (pAdapter->StaCfg.BssType == BSS_ADHOC) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPANone; +- } +- else if (param->value == IW_AUTH_WPA_VERSION_WPA2) +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_CIPHER_PAIRWISE: +- if (param->value == IW_AUTH_CIPHER_NONE) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- } +- else if (param->value == IW_AUTH_CIPHER_WEP40 || +- param->value == IW_AUTH_CIPHER_WEP104) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; +- pAdapter->StaCfg.IEEE8021X = FALSE; +- } +- else if (param->value == IW_AUTH_CIPHER_TKIP) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption2Enabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if (param->value == IW_AUTH_CIPHER_CCMP) +- { +- pAdapter->StaCfg.WepStatus = Ndis802_11Encryption3Enabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11Encryption3Enabled; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_CIPHER_PAIRWISE - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_CIPHER_GROUP: +- if (param->value == IW_AUTH_CIPHER_NONE) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- } +- else if (param->value == IW_AUTH_CIPHER_WEP40 || +- param->value == IW_AUTH_CIPHER_WEP104) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +- } +- else if (param->value == IW_AUTH_CIPHER_TKIP) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption2Enabled; +- } +- else if (param->value == IW_AUTH_CIPHER_CCMP) +- { +- pAdapter->StaCfg.GroupCipher = Ndis802_11Encryption3Enabled; +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_CIPHER_GROUP - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_KEY_MGMT: +- if (param->value == IW_AUTH_KEY_MGMT_802_1X) +- { +- if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA; +- pAdapter->StaCfg.IEEE8021X = FALSE; +- } +- else if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2; +- pAdapter->StaCfg.IEEE8021X = FALSE; +- } +- else +- // WEP 1x +- pAdapter->StaCfg.IEEE8021X = TRUE; +- } +- else if (param->value == 0) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_KEY_MGMT - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_RX_UNENCRYPTED_EAPOL: +- break; +- case IW_AUTH_PRIVACY_INVOKED: +- /*if (param->value == 0) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; +- pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; +- pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; +- }*/ +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_PRIVACY_INVOKED - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_DROP_UNENCRYPTED: +- if (param->value != 0) +- pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- else +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_80211_AUTH_ALG: +- if (param->value & IW_AUTH_ALG_SHARED_KEY) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; +- } +- else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) +- { +- pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- } +- else +- return -EINVAL; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_80211_AUTH_ALG - param->value = %d!\n", __func__, param->value)); +- break; +- case IW_AUTH_WPA_ENABLED: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_ENABLED - Driver supports WPA!(param->value = %d)\n", __func__, param->value)); +- break; +- default: +- return -EOPNOTSUPP; +-} ++ case IW_AUTH_WPA_VERSION: ++ if (param->value == IW_AUTH_WPA_VERSION_WPA) { ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK; ++ if (pAdapter->StaCfg.BssType == BSS_ADHOC) ++ pAdapter->StaCfg.AuthMode = ++ Ndis802_11AuthModeWPANone; ++ } else if (param->value == IW_AUTH_WPA_VERSION_WPA2) ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_CIPHER_PAIRWISE: ++ if (param->value == IW_AUTH_CIPHER_NONE) { ++ pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; ++ pAdapter->StaCfg.OrigWepStatus = ++ pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; ++ } else if (param->value == IW_AUTH_CIPHER_WEP40 || ++ param->value == IW_AUTH_CIPHER_WEP104) { ++ pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled; ++ pAdapter->StaCfg.OrigWepStatus = ++ pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; ++ pAdapter->StaCfg.IEEE8021X = FALSE; ++ } else if (param->value == IW_AUTH_CIPHER_TKIP) { ++ pAdapter->StaCfg.WepStatus = ++ Ndis802_11Encryption2Enabled; ++ pAdapter->StaCfg.OrigWepStatus = ++ pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = ++ Ndis802_11Encryption2Enabled; ++ } else if (param->value == IW_AUTH_CIPHER_CCMP) { ++ pAdapter->StaCfg.WepStatus = ++ Ndis802_11Encryption3Enabled; ++ pAdapter->StaCfg.OrigWepStatus = ++ pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = ++ Ndis802_11Encryption3Enabled; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_CIPHER_PAIRWISE - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_CIPHER_GROUP: ++ if (param->value == IW_AUTH_CIPHER_NONE) { ++ pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; ++ } else if (param->value == IW_AUTH_CIPHER_WEP40 || ++ param->value == IW_AUTH_CIPHER_WEP104) { ++ pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; ++ } else if (param->value == IW_AUTH_CIPHER_TKIP) { ++ pAdapter->StaCfg.GroupCipher = ++ Ndis802_11Encryption2Enabled; ++ } else if (param->value == IW_AUTH_CIPHER_CCMP) { ++ pAdapter->StaCfg.GroupCipher = ++ Ndis802_11Encryption3Enabled; ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_CIPHER_GROUP - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_KEY_MGMT: ++ if (param->value == IW_AUTH_KEY_MGMT_802_1X) { ++ if (pAdapter->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK) { ++ pAdapter->StaCfg.AuthMode = ++ Ndis802_11AuthModeWPA; ++ pAdapter->StaCfg.IEEE8021X = FALSE; ++ } else if (pAdapter->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK) { ++ pAdapter->StaCfg.AuthMode = ++ Ndis802_11AuthModeWPA2; ++ pAdapter->StaCfg.IEEE8021X = FALSE; ++ } else ++ // WEP 1x ++ pAdapter->StaCfg.IEEE8021X = TRUE; ++ } else if (param->value == 0) { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_KEY_MGMT - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_RX_UNENCRYPTED_EAPOL: ++ break; ++ case IW_AUTH_PRIVACY_INVOKED: ++ /*if (param->value == 0) ++ { ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; ++ pAdapter->StaCfg.WepStatus = Ndis802_11WEPDisabled; ++ pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus; ++ pAdapter->StaCfg.PairCipher = Ndis802_11WEPDisabled; ++ pAdapter->StaCfg.GroupCipher = Ndis802_11WEPDisabled; ++ } */ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_PRIVACY_INVOKED - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_DROP_UNENCRYPTED: ++ if (param->value != 0) ++ pAdapter->StaCfg.PortSecured = ++ WPA_802_1X_PORT_NOT_SECURED; ++ else { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_80211_AUTH_ALG: ++ if (param->value & IW_AUTH_ALG_SHARED_KEY) { ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared; ++ } else if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) { ++ pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; ++ } else ++ return -EINVAL; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_80211_AUTH_ALG - param->value = %d!\n", ++ __func__, param->value)); ++ break; ++ case IW_AUTH_WPA_ENABLED: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_AUTH_WPA_ENABLED - Driver supports WPA!(param->value = %d)\n", ++ __func__, param->value)); ++ break; ++ default: ++ return -EOPNOTSUPP; ++ } + + return 0; + } + + int rt_ioctl_giwauth(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_param *param = &wrqu->param; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } + + switch (param->flags & IW_AUTH_INDEX) { + case IW_AUTH_DROP_UNENCRYPTED: +- param->value = (pAdapter->StaCfg.WepStatus == Ndis802_11WEPDisabled) ? 0 : 1; ++ param->value = ++ (pAdapter->StaCfg.WepStatus == ++ Ndis802_11WEPDisabled) ? 0 : 1; + break; + + case IW_AUTH_80211_AUTH_ALG: +- param->value = (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) ? IW_AUTH_ALG_SHARED_KEY : IW_AUTH_ALG_OPEN_SYSTEM; ++ param->value = ++ (pAdapter->StaCfg.AuthMode == ++ Ndis802_11AuthModeShared) ? IW_AUTH_ALG_SHARED_KEY : ++ IW_AUTH_ALG_OPEN_SYSTEM; + break; + + case IW_AUTH_WPA_ENABLED: +- param->value = (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) ? 1 : 0; ++ param->value = ++ (pAdapter->StaCfg.AuthMode >= ++ Ndis802_11AuthModeWPA) ? 1 : 0; + break; + + default: + return -EOPNOTSUPP; + } +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_giwauth::param->value = %d!\n", param->value)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_giwauth::param->value = %d!\n", param->value)); + return 0; + } + +-void fnSetCipherKey( +- IN PRTMP_ADAPTER pAdapter, +- IN INT keyIdx, +- IN UCHAR CipherAlg, +- IN BOOLEAN bGTK, +- IN struct iw_encode_ext *ext) ++void fnSetCipherKey(IN PRTMP_ADAPTER pAdapter, ++ IN INT keyIdx, ++ IN UCHAR CipherAlg, ++ IN BOOLEAN bGTK, IN struct iw_encode_ext *ext) + { +- NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, LEN_TKIP_EK); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].TxMic, ext->key + LEN_TKIP_EK, LEN_TKIP_TXMICK); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].RxMic, ext->key + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK); +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CipherAlg; +- +- // Update group key information to ASIC Shared Key Table ++ NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, ++ LEN_TKIP_EK); ++ NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].TxMic, ++ ext->key + LEN_TKIP_EK, LEN_TKIP_TXMICK); ++ NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].RxMic, ++ ext->key + LEN_TKIP_EK + LEN_TKIP_TXMICK, ++ LEN_TKIP_RXMICK); ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CipherAlg; ++ ++ // Update group key information to ASIC Shared Key Table + AsicAddSharedKeyEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- pAdapter->SharedKey[BSS0][keyIdx].Key, +- pAdapter->SharedKey[BSS0][keyIdx].TxMic, +- pAdapter->SharedKey[BSS0][keyIdx].RxMic); +- +- if (bGTK) +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- NULL); +- else +- // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAdapter, +- BSS0, +- keyIdx, +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, +- &pAdapter->MacTab.Content[BSSID_WCID]); ++ BSS0, ++ keyIdx, ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, ++ pAdapter->SharedKey[BSS0][keyIdx].Key, ++ pAdapter->SharedKey[BSS0][keyIdx].TxMic, ++ pAdapter->SharedKey[BSS0][keyIdx].RxMic); ++ ++ if (bGTK) ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAdapter, ++ BSS0, ++ keyIdx, ++ pAdapter->SharedKey[BSS0][keyIdx]. ++ CipherAlg, NULL); ++ else ++ // Update ASIC WCID attribute table and IVEIV table ++ RTMPAddWcidAttributeEntry(pAdapter, ++ BSS0, ++ keyIdx, ++ pAdapter->SharedKey[BSS0][keyIdx]. ++ CipherAlg, ++ &pAdapter->MacTab. ++ Content[BSSID_WCID]); + } + + int rt_ioctl_siwencodeext(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) +- { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) ++{ ++ PRTMP_ADAPTER pAdapter = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; +- int keyIdx, alg = ext->alg; ++ int keyIdx, alg = ext->alg; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; + } + +- if (encoding->flags & IW_ENCODE_DISABLED) +- { +- keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; +- // set BSSID wcid entry of the Pair-wise Key table as no-security mode +- AsicRemovePairwiseKeyEntry(pAdapter, BSS0, BSSID_WCID); +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; ++ if (encoding->flags & IW_ENCODE_DISABLED) { ++ keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; ++ // set BSSID wcid entry of the Pair-wise Key table as no-security mode ++ AsicRemovePairwiseKeyEntry(pAdapter, BSS0, BSSID_WCID); ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAdapter, 0, (UCHAR)keyIdx); +- NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); +- DBGPRINT(RT_DEBUG_TRACE, ("%s::Remove all keys!(encoding->flags = %x)\n", __func__, encoding->flags)); +- } +- else +- { +- // Get Key Index and convet to our own defined key index +- keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; +- if((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) +- return -EINVAL; +- +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- pAdapter->StaCfg.DefaultKeyId = keyIdx; +- DBGPRINT(RT_DEBUG_TRACE, ("%s::DefaultKeyId = %d\n", __func__, pAdapter->StaCfg.DefaultKeyId)); +- } +- +- switch (alg) { +- case IW_ENCODE_ALG_NONE: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_NONE\n", __func__)); +- break; +- case IW_ENCODE_ALG_WEP: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_WEP - ext->key_len = %d, keyIdx = %d\n", __func__, ext->key_len, keyIdx)); +- if (ext->key_len == MAX_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MAX_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP128; +- } +- else if (ext->key_len == MIN_WEP_KEY_SIZE) +- { +- pAdapter->SharedKey[BSS0][keyIdx].KeyLen = MIN_WEP_KEY_SIZE; +- pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_WEP64; +- } +- else +- return -EINVAL; ++ AsicRemoveSharedKeyEntry(pAdapter, 0, (UCHAR) keyIdx); ++ NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], ++ sizeof(CIPHER_KEY)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::Remove all keys!(encoding->flags = %x)\n", ++ __func__, encoding->flags)); ++ } else { ++ // Get Key Index and convet to our own defined key index ++ keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; ++ if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) ++ return -EINVAL; + +- NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16); +- NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, ext->key_len); +- if (pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled || +- pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) +- { +- // Set Group key material to Asic +- AsicAddSharedKeyEntry(pAdapter, BSS0, keyIdx, pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, pAdapter->SharedKey[BSS0][keyIdx].Key, NULL, NULL); ++ if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { ++ pAdapter->StaCfg.DefaultKeyId = keyIdx; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::DefaultKeyId = %d\n", __func__, ++ pAdapter->StaCfg.DefaultKeyId)); ++ } + +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAdapter, BSS0, keyIdx, pAdapter->SharedKey[BSS0][keyIdx].CipherAlg, NULL); ++ switch (alg) { ++ case IW_ENCODE_ALG_NONE: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_ENCODE_ALG_NONE\n", __func__)); ++ break; ++ case IW_ENCODE_ALG_WEP: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_ENCODE_ALG_WEP - ext->key_len = %d, keyIdx = %d\n", ++ __func__, ext->key_len, keyIdx)); ++ if (ext->key_len == MAX_WEP_KEY_SIZE) { ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = ++ MAX_WEP_KEY_SIZE; ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = ++ CIPHER_WEP128; ++ } else if (ext->key_len == MIN_WEP_KEY_SIZE) { ++ pAdapter->SharedKey[BSS0][keyIdx].KeyLen = ++ MIN_WEP_KEY_SIZE; ++ pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = ++ CIPHER_WEP64; ++ } else ++ return -EINVAL; + +- STA_PORT_SECURED(pAdapter); ++ NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ++ 16); ++ NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ++ ext->key, ext->key_len); ++ if (pAdapter->StaCfg.GroupCipher == ++ Ndis802_11GroupWEP40Enabled ++ || pAdapter->StaCfg.GroupCipher == ++ Ndis802_11GroupWEP104Enabled) { ++ // Set Group key material to Asic ++ AsicAddSharedKeyEntry(pAdapter, BSS0, keyIdx, ++ pAdapter-> ++ SharedKey[BSS0][keyIdx]. ++ CipherAlg, ++ pAdapter-> ++ SharedKey[BSS0][keyIdx]. ++ Key, NULL, NULL); ++ ++ // Update WCID attribute table and IVEIV table for this group key table ++ RTMPAddWcidAttributeEntry(pAdapter, BSS0, ++ keyIdx, ++ pAdapter-> ++ SharedKey[BSS0] ++ [keyIdx].CipherAlg, ++ NULL); ++ ++ STA_PORT_SECURED(pAdapter); ++ ++ // Indicate Connected for GUI ++ pAdapter->IndicateMediaState = ++ NdisMediaStateConnected; ++ } ++ break; ++ case IW_ENCODE_ALG_TKIP: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::IW_ENCODE_ALG_TKIP - keyIdx = %d, ext->key_len = %d\n", ++ __func__, keyIdx, ext->key_len)); ++ if (ext->key_len == 32) { ++ if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { ++ fnSetCipherKey(pAdapter, keyIdx, ++ CIPHER_TKIP, FALSE, ext); ++ if (pAdapter->StaCfg.AuthMode >= ++ Ndis802_11AuthModeWPA2) { ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = ++ NdisMediaStateConnected; ++ } ++ } else if (ext-> ++ ext_flags & IW_ENCODE_EXT_GROUP_KEY) ++ { ++ fnSetCipherKey(pAdapter, keyIdx, ++ CIPHER_TKIP, TRUE, ext); + +- // Indicate Connected for GUI +- pAdapter->IndicateMediaState = NdisMediaStateConnected; ++ // set 802.1x port control ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = ++ NdisMediaStateConnected; + } +- break; +- case IW_ENCODE_ALG_TKIP: +- DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_TKIP - keyIdx = %d, ext->key_len = %d\n", __func__, keyIdx, ext->key_len)); +- if (ext->key_len == 32) +- { +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, FALSE, ext); +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, TRUE, ext); +- +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- } +- else +- return -EINVAL; +- break; +- case IW_ENCODE_ALG_CCMP: +- if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, FALSE, ext); +- if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) +- { +- fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, TRUE, ext); +- +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- STA_PORT_SECURED(pAdapter); +- pAdapter->IndicateMediaState = NdisMediaStateConnected; +- } +- break; +- default: +- return -EINVAL; ++ } else ++ return -EINVAL; ++ break; ++ case IW_ENCODE_ALG_CCMP: ++ if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) { ++ fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, ++ FALSE, ext); ++ if (pAdapter->StaCfg.AuthMode >= ++ Ndis802_11AuthModeWPA2) ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = ++ NdisMediaStateConnected; ++ } else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) { ++ fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, ++ TRUE, ext); ++ ++ // set 802.1x port control ++ //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ STA_PORT_SECURED(pAdapter); ++ pAdapter->IndicateMediaState = ++ NdisMediaStateConnected; ++ } ++ break; ++ default: ++ return -EINVAL; + } +- } ++ } + +- return 0; ++ return 0; + } + + int + rt_ioctl_giwencodeext(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { + PRTMP_ADAPTER pAd = NULL; + PCHAR pKey = NULL; +@@ -1913,72 +2026,65 @@ rt_ioctl_giwencodeext(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAd, dev); + +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_giwencodeext\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt_ioctl_giwencodeext\n")); + + max_key_len = encoding->length - sizeof(*ext); + if (max_key_len < 0) + return -EINVAL; + + idx = encoding->flags & IW_ENCODE_INDEX; +- if (idx) +- { ++ if (idx) { + if (idx < 1 || idx > 4) + return -EINVAL; + idx--; + + if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)) +- { +- if (idx != pAd->StaCfg.DefaultKeyId) +- { ++ (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)) { ++ if (idx != pAd->StaCfg.DefaultKeyId) { + ext->key_len = 0; + return 0; + } + } +- } +- else ++ } else + idx = pAd->StaCfg.DefaultKeyId; + + encoding->flags = idx + 1; + memset(ext, 0, sizeof(*ext)); + + ext->key_len = 0; +- switch(pAd->StaCfg.WepStatus) { +- case Ndis802_11WEPDisabled: +- ext->alg = IW_ENCODE_ALG_NONE; +- encoding->flags |= IW_ENCODE_DISABLED; +- break; +- case Ndis802_11WEPEnabled: +- ext->alg = IW_ENCODE_ALG_WEP; +- if (pAd->SharedKey[BSS0][idx].KeyLen > max_key_len) +- return -E2BIG; +- else +- { +- ext->key_len = pAd->SharedKey[BSS0][idx].KeyLen; +- pKey = (PCHAR)&(pAd->SharedKey[BSS0][idx].Key[0]); +- } +- break; +- case Ndis802_11Encryption2Enabled: +- case Ndis802_11Encryption3Enabled: +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) +- ext->alg = IW_ENCODE_ALG_TKIP; +- else +- ext->alg = IW_ENCODE_ALG_CCMP; ++ switch (pAd->StaCfg.WepStatus) { ++ case Ndis802_11WEPDisabled: ++ ext->alg = IW_ENCODE_ALG_NONE; ++ encoding->flags |= IW_ENCODE_DISABLED; ++ break; ++ case Ndis802_11WEPEnabled: ++ ext->alg = IW_ENCODE_ALG_WEP; ++ if (pAd->SharedKey[BSS0][idx].KeyLen > max_key_len) ++ return -E2BIG; ++ else { ++ ext->key_len = pAd->SharedKey[BSS0][idx].KeyLen; ++ pKey = (PCHAR) & (pAd->SharedKey[BSS0][idx].Key[0]); ++ } ++ break; ++ case Ndis802_11Encryption2Enabled: ++ case Ndis802_11Encryption3Enabled: ++ if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) ++ ext->alg = IW_ENCODE_ALG_TKIP; ++ else ++ ext->alg = IW_ENCODE_ALG_CCMP; + +- if (max_key_len < 32) +- return -E2BIG; +- else +- { +- ext->key_len = 32; +- pKey = (PCHAR)&pAd->StaCfg.PMK[0]; +- } +- break; +- default: +- return -EINVAL; ++ if (max_key_len < 32) ++ return -E2BIG; ++ else { ++ ext->key_len = 32; ++ pKey = (PCHAR) & pAd->StaCfg.PMK[0]; ++ } ++ break; ++ default: ++ return -EINVAL; + } + +- if (ext->key_len && pKey) +- { ++ if (ext->key_len && pKey) { + encoding->flags |= IW_ENCODE_ENABLED; + memcpy(ext->key, pKey, ext->key_len); + } +@@ -1987,27 +2093,25 @@ rt_ioctl_giwencodeext(struct net_device *dev, + } + + int rt_ioctl_siwgenie(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ PRTMP_ADAPTER pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_siwgenie\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt_ioctl_siwgenie\n")); + pAd->StaCfg.bRSN_IE_FromWpaSupplicant = FALSE; + if (wrqu->data.length > MAX_LEN_OF_RSNIE || + (wrqu->data.length && extra == NULL)) + return -EINVAL; + +- if (wrqu->data.length) +- { ++ if (wrqu->data.length) { + pAd->StaCfg.RSNIE_Len = wrqu->data.length; +- NdisMoveMemory(&pAd->StaCfg.RSN_IE[0], extra, pAd->StaCfg.RSNIE_Len); ++ NdisMoveMemory(&pAd->StaCfg.RSN_IE[0], extra, ++ pAd->StaCfg.RSNIE_Len); + pAd->StaCfg.bRSN_IE_FromWpaSupplicant = TRUE; +- } +- else +- { ++ } else { + pAd->StaCfg.RSNIE_Len = 0; + NdisZeroMemory(&pAd->StaCfg.RSN_IE[0], MAX_LEN_OF_RSNIE); + } +@@ -2016,188 +2120,212 @@ int rt_ioctl_siwgenie(struct net_device *dev, + } + + int rt_ioctl_giwgenie(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ PRTMP_ADAPTER pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, dev); + + if ((pAd->StaCfg.RSNIE_Len == 0) || +- (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)) +- { ++ (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA)) { + wrqu->data.length = 0; + return 0; + } + +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) +- { +- if (wrqu->data.length < pAd->StaCfg.RSNIE_Len) +- return -E2BIG; ++ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) { ++ if (wrqu->data.length < pAd->StaCfg.RSNIE_Len) ++ return -E2BIG; + +- wrqu->data.length = pAd->StaCfg.RSNIE_Len; +- memcpy(extra, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); +- } +- else +- { ++ wrqu->data.length = pAd->StaCfg.RSNIE_Len; ++ memcpy(extra, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); ++ } else { + UCHAR RSNIe = IE_WPA; + +- if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) // ID, Len ++ if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) // ID, Len + return -E2BIG; + wrqu->data.length = pAd->StaCfg.RSNIE_Len + 2; + + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) + RSNIe = IE_RSN; + + extra[0] = (char)RSNIe; + extra[1] = pAd->StaCfg.RSNIE_Len; +- memcpy(extra+2, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); ++ memcpy(extra + 2, &pAd->StaCfg.RSN_IE[0], ++ pAd->StaCfg.RSNIE_Len); + } + + return 0; + } + + int rt_ioctl_siwpmksa(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, +- char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ PRTMP_ADAPTER pAd = NULL; + struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer; +- INT CachedIdx = 0, idx = 0; ++ INT CachedIdx = 0, idx = 0; + + GET_PAD_FROM_NET_DEV(pAd, dev); + + if (pPmksa == NULL) + return -EINVAL; + +- DBGPRINT(RT_DEBUG_TRACE ,("===> rt_ioctl_siwpmksa\n")); +- switch(pPmksa->cmd) +- { +- case IW_PMKSA_FLUSH: +- NdisZeroMemory(pAd->StaCfg.SavedPMK, sizeof(BSSID_INFO)*PMKID_NO); +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_FLUSH\n")); +- break; +- case IW_PMKSA_REMOVE: +- for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; CachedIdx++) +- { +- // compare the BSSID +- if (NdisEqualMemory(pPmksa->bssid.sa_data, pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN)) +- { +- NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN); +- NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx].PMKID, 16); +- for (idx = CachedIdx; idx < (pAd->StaCfg.SavedPMKNum - 1); idx++) +- { +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[idx].BSSID[0], &pAd->StaCfg.SavedPMK[idx+1].BSSID[0], MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[idx].PMKID[0], &pAd->StaCfg.SavedPMK[idx+1].PMKID[0], 16); +- } +- pAd->StaCfg.SavedPMKNum--; +- break; +- } +- } ++ DBGPRINT(RT_DEBUG_TRACE, ("===> rt_ioctl_siwpmksa\n")); ++ switch (pPmksa->cmd) { ++ case IW_PMKSA_FLUSH: ++ NdisZeroMemory(pAd->StaCfg.SavedPMK, ++ sizeof(BSSID_INFO) * PMKID_NO); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwpmksa - IW_PMKSA_FLUSH\n")); ++ break; ++ case IW_PMKSA_REMOVE: ++ for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; ++ CachedIdx++) { ++ // compare the BSSID ++ if (NdisEqualMemory ++ (pPmksa->bssid.sa_data, ++ pAd->StaCfg.SavedPMK[CachedIdx].BSSID, ++ MAC_ADDR_LEN)) { ++ NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx]. ++ BSSID, MAC_ADDR_LEN); ++ NdisZeroMemory(pAd->StaCfg.SavedPMK[CachedIdx]. ++ PMKID, 16); ++ for (idx = CachedIdx; ++ idx < (pAd->StaCfg.SavedPMKNum - 1); ++ idx++) { ++ NdisMoveMemory(&pAd->StaCfg. ++ SavedPMK[idx].BSSID[0], ++ &pAd->StaCfg. ++ SavedPMK[idx + ++ 1].BSSID[0], ++ MAC_ADDR_LEN); ++ NdisMoveMemory(&pAd->StaCfg. ++ SavedPMK[idx].PMKID[0], ++ &pAd->StaCfg. ++ SavedPMK[idx + ++ 1].PMKID[0], ++ 16); ++ } ++ pAd->StaCfg.SavedPMKNum--; ++ break; ++ } ++ } + +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_REMOVE\n")); +- break; +- case IW_PMKSA_ADD: +- for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; CachedIdx++) +- { +- // compare the BSSID +- if (NdisEqualMemory(pPmksa->bssid.sa_data, pAd->StaCfg.SavedPMK[CachedIdx].BSSID, MAC_ADDR_LEN)) +- break; +- } +- +- // Found, replace it +- if (CachedIdx < PMKID_NO) +- { +- DBGPRINT(RT_DEBUG_OFF, ("Update PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].BSSID[0], pPmksa->bssid.sa_data, MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].PMKID[0], pPmksa->pmkid, 16); +- pAd->StaCfg.SavedPMKNum++; +- } +- // Not found, replace the last one +- else +- { +- // Randomly replace one +- CachedIdx = (pPmksa->bssid.sa_data[5] % PMKID_NO); +- DBGPRINT(RT_DEBUG_OFF, ("Update PMKID, idx = %d\n", CachedIdx)); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].BSSID[0], pPmksa->bssid.sa_data, MAC_ADDR_LEN); +- NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx].PMKID[0], pPmksa->pmkid, 16); +- } +- +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - IW_PMKSA_ADD\n")); +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE ,("rt_ioctl_siwpmksa - Unknow Command!!\n")); +- break; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwpmksa - IW_PMKSA_REMOVE\n")); ++ break; ++ case IW_PMKSA_ADD: ++ for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; ++ CachedIdx++) { ++ // compare the BSSID ++ if (NdisEqualMemory ++ (pPmksa->bssid.sa_data, ++ pAd->StaCfg.SavedPMK[CachedIdx].BSSID, ++ MAC_ADDR_LEN)) ++ break; ++ } ++ ++ // Found, replace it ++ if (CachedIdx < PMKID_NO) { ++ DBGPRINT(RT_DEBUG_OFF, ++ ("Update PMKID, idx = %d\n", CachedIdx)); ++ NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx]. ++ BSSID[0], pPmksa->bssid.sa_data, ++ MAC_ADDR_LEN); ++ NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx]. ++ PMKID[0], pPmksa->pmkid, 16); ++ pAd->StaCfg.SavedPMKNum++; ++ } ++ // Not found, replace the last one ++ else { ++ // Randomly replace one ++ CachedIdx = (pPmksa->bssid.sa_data[5] % PMKID_NO); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("Update PMKID, idx = %d\n", CachedIdx)); ++ NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx]. ++ BSSID[0], pPmksa->bssid.sa_data, ++ MAC_ADDR_LEN); ++ NdisMoveMemory(&pAd->StaCfg.SavedPMK[CachedIdx]. ++ PMKID[0], pPmksa->pmkid, 16); ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwpmksa - IW_PMKSA_ADD\n")); ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwpmksa - Unknow Command!!\n")); ++ break; + } + + return 0; + } + + int rt_ioctl_siwrate(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; +- UINT32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; ++ PRTMP_ADAPTER pAd = NULL; ++ UINT32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::Network is down!\n")); +- return -ENETDOWN; ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwrate::Network is down!\n")); ++ return -ENETDOWN; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::(rate = %d, fixed = %d)\n", rate, fixed)); +- /* rate = -1 => auto rate +- rate = X, fixed = 1 => (fixed rate X) +- */ +- if (rate == -1) +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwrate::(rate = %d, fixed = %d)\n", rate, fixed)); ++ /* rate = -1 => auto rate ++ rate = X, fixed = 1 => (fixed rate X) ++ */ ++ if (rate == -1) { + //Auto Rate + pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; + pAd->StaCfg.bAutoTxRateSwitch = TRUE; + if ((pAd->CommonCfg.PhyMode <= PHY_11G) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM)) ++ (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= ++ MODE_OFDM)) + RTMPSetDesiredRates(pAd, -1); + + SetCommonHT(pAd); +- } +- else +- { +- if (fixed) +- { +- pAd->StaCfg.bAutoTxRateSwitch = FALSE; +- if ((pAd->CommonCfg.PhyMode <= PHY_11G) || +- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM)) +- RTMPSetDesiredRates(pAd, rate); +- else +- { +- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- SetCommonHT(pAd); +- } +- DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::(HtMcs=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.MCS)); +- } +- else +- { +- // TODO: rate = X, fixed = 0 => (rates <= X) +- return -EOPNOTSUPP; +- } +- } +- +- return 0; ++ } else { ++ if (fixed) { ++ pAd->StaCfg.bAutoTxRateSwitch = FALSE; ++ if ((pAd->CommonCfg.PhyMode <= PHY_11G) || ++ (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field. ++ MODE <= MODE_OFDM)) ++ RTMPSetDesiredRates(pAd, rate); ++ else { ++ pAd->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_AUTO; ++ SetCommonHT(pAd); ++ } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt_ioctl_siwrate::(HtMcs=%d)\n", ++ pAd->StaCfg.DesiredTransmitSetting.field. ++ MCS)); ++ } else { ++ // TODO: rate = X, fixed = 0 => (rates <= X) ++ return -EOPNOTSUPP; ++ } ++ } ++ ++ return 0; + } + + int rt_ioctl_giwrate(struct net_device *dev, +- struct iw_request_info *info, +- union iwreq_data *wrqu, char *extra) ++ struct iw_request_info *info, ++ union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; +- int rate_index = 0, rate_count = 0; +- HTTRANSMIT_SETTING ht_setting; ++ PRTMP_ADAPTER pAd = NULL; ++ int rate_index = 0, rate_count = 0; ++ HTTRANSMIT_SETTING ht_setting; + /* Remove to global variable + __s32 ralinkrate[] = + {2, 4, 11, 22, // CCK +@@ -2213,289 +2341,292 @@ int rt_ioctl_giwrate(struct net_device *dev, + */ + GET_PAD_FROM_NET_DEV(pAd, dev); + +- rate_count = sizeof(ralinkrate)/sizeof(__s32); +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; ++ rate_count = sizeof(ralinkrate) / sizeof(__s32); ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; + } + +- if ((pAd->StaCfg.bAutoTxRateSwitch == FALSE) && +- (INFRA_ON(pAd)) && +- ((pAd->CommonCfg.PhyMode <= PHY_11G) || (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM))) +- ht_setting.word = pAd->StaCfg.HTPhyMode.word; +- else +- ht_setting.word = pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; +- +- if (ht_setting.field.MODE >= MODE_HTMIX) +- { +-// rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); +- rate_index = 12 + ((UCHAR)ht_setting.field.BW *24) + ((UCHAR)ht_setting.field.ShortGI *48) + ((UCHAR)ht_setting.field.MCS); +- } +- else +- if (ht_setting.field.MODE == MODE_OFDM) +- rate_index = (UCHAR)(ht_setting.field.MCS) + 4; +- else if (ht_setting.field.MODE == MODE_CCK) +- rate_index = (UCHAR)(ht_setting.field.MCS); +- +- if (rate_index < 0) +- rate_index = 0; +- +- if (rate_index > rate_count) +- rate_index = rate_count; +- +- wrqu->bitrate.value = ralinkrate[rate_index] * 500000; +- wrqu->bitrate.disabled = 0; +- +- return 0; ++ if ((pAd->StaCfg.bAutoTxRateSwitch == FALSE) && ++ (INFRA_ON(pAd)) && ++ ((pAd->CommonCfg.PhyMode <= PHY_11G) ++ || (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= ++ MODE_OFDM))) ++ ht_setting.word = pAd->StaCfg.HTPhyMode.word; ++ else ++ ht_setting.word = ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; ++ ++ if (ht_setting.field.MODE >= MODE_HTMIX) { ++// rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); ++ rate_index = ++ 12 + ((UCHAR) ht_setting.field.BW * 24) + ++ ((UCHAR) ht_setting.field.ShortGI * 48) + ++ ((UCHAR) ht_setting.field.MCS); ++ } else if (ht_setting.field.MODE == MODE_OFDM) ++ rate_index = (UCHAR) (ht_setting.field.MCS) + 4; ++ else if (ht_setting.field.MODE == MODE_CCK) ++ rate_index = (UCHAR) (ht_setting.field.MCS); ++ ++ if (rate_index < 0) ++ rate_index = 0; ++ ++ if (rate_index > rate_count) ++ rate_index = rate_count; ++ ++ wrqu->bitrate.value = ralinkrate[rate_index] * 500000; ++ wrqu->bitrate.disabled = 0; ++ ++ return 0; + } + +-static const iw_handler rt_handler[] = +-{ +- (iw_handler) NULL, /* SIOCSIWCOMMIT */ +- (iw_handler) rt_ioctl_giwname, /* SIOCGIWNAME */ +- (iw_handler) NULL, /* SIOCSIWNWID */ +- (iw_handler) NULL, /* SIOCGIWNWID */ +- (iw_handler) rt_ioctl_siwfreq, /* SIOCSIWFREQ */ +- (iw_handler) rt_ioctl_giwfreq, /* SIOCGIWFREQ */ +- (iw_handler) rt_ioctl_siwmode, /* SIOCSIWMODE */ +- (iw_handler) rt_ioctl_giwmode, /* SIOCGIWMODE */ +- (iw_handler) NULL, /* SIOCSIWSENS */ +- (iw_handler) NULL, /* SIOCGIWSENS */ +- (iw_handler) NULL /* not used */, /* SIOCSIWRANGE */ +- (iw_handler) rt_ioctl_giwrange, /* SIOCGIWRANGE */ +- (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */ +- (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */ +- (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */ +- (iw_handler) rt28xx_get_wireless_stats /* kernel code */, /* SIOCGIWSTATS */ +- (iw_handler) NULL, /* SIOCSIWSPY */ +- (iw_handler) NULL, /* SIOCGIWSPY */ +- (iw_handler) NULL, /* SIOCSIWTHRSPY */ +- (iw_handler) NULL, /* SIOCGIWTHRSPY */ +- (iw_handler) rt_ioctl_siwap, /* SIOCSIWAP */ +- (iw_handler) rt_ioctl_giwap, /* SIOCGIWAP */ +- (iw_handler) rt_ioctl_siwmlme, /* SIOCSIWMLME */ +- (iw_handler) rt_ioctl_iwaplist, /* SIOCGIWAPLIST */ +- (iw_handler) rt_ioctl_siwscan, /* SIOCSIWSCAN */ +- (iw_handler) rt_ioctl_giwscan, /* SIOCGIWSCAN */ +- (iw_handler) rt_ioctl_siwessid, /* SIOCSIWESSID */ +- (iw_handler) rt_ioctl_giwessid, /* SIOCGIWESSID */ +- (iw_handler) rt_ioctl_siwnickn, /* SIOCSIWNICKN */ +- (iw_handler) rt_ioctl_giwnickn, /* SIOCGIWNICKN */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) rt_ioctl_siwrate, /* SIOCSIWRATE */ +- (iw_handler) rt_ioctl_giwrate, /* SIOCGIWRATE */ +- (iw_handler) rt_ioctl_siwrts, /* SIOCSIWRTS */ +- (iw_handler) rt_ioctl_giwrts, /* SIOCGIWRTS */ +- (iw_handler) rt_ioctl_siwfrag, /* SIOCSIWFRAG */ +- (iw_handler) rt_ioctl_giwfrag, /* SIOCGIWFRAG */ +- (iw_handler) NULL, /* SIOCSIWTXPOW */ +- (iw_handler) NULL, /* SIOCGIWTXPOW */ +- (iw_handler) NULL, /* SIOCSIWRETRY */ +- (iw_handler) NULL, /* SIOCGIWRETRY */ +- (iw_handler) rt_ioctl_siwencode, /* SIOCSIWENCODE */ +- (iw_handler) rt_ioctl_giwencode, /* SIOCGIWENCODE */ +- (iw_handler) NULL, /* SIOCSIWPOWER */ +- (iw_handler) NULL, /* SIOCGIWPOWER */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) NULL, /* -- hole -- */ +- (iw_handler) rt_ioctl_siwgenie, /* SIOCSIWGENIE */ +- (iw_handler) rt_ioctl_giwgenie, /* SIOCGIWGENIE */ +- (iw_handler) rt_ioctl_siwauth, /* SIOCSIWAUTH */ +- (iw_handler) rt_ioctl_giwauth, /* SIOCGIWAUTH */ +- (iw_handler) rt_ioctl_siwencodeext, /* SIOCSIWENCODEEXT */ +- (iw_handler) rt_ioctl_giwencodeext, /* SIOCGIWENCODEEXT */ +- (iw_handler) rt_ioctl_siwpmksa, /* SIOCSIWPMKSA */ ++static const iw_handler rt_handler[] = { ++ (iw_handler) NULL, /* SIOCSIWCOMMIT */ ++ (iw_handler) rt_ioctl_giwname, /* SIOCGIWNAME */ ++ (iw_handler) NULL, /* SIOCSIWNWID */ ++ (iw_handler) NULL, /* SIOCGIWNWID */ ++ (iw_handler) rt_ioctl_siwfreq, /* SIOCSIWFREQ */ ++ (iw_handler) rt_ioctl_giwfreq, /* SIOCGIWFREQ */ ++ (iw_handler) rt_ioctl_siwmode, /* SIOCSIWMODE */ ++ (iw_handler) rt_ioctl_giwmode, /* SIOCGIWMODE */ ++ (iw_handler) NULL, /* SIOCSIWSENS */ ++ (iw_handler) NULL, /* SIOCGIWSENS */ ++ (iw_handler) NULL /* not used */ , /* SIOCSIWRANGE */ ++ (iw_handler) rt_ioctl_giwrange, /* SIOCGIWRANGE */ ++ (iw_handler) NULL /* not used */ , /* SIOCSIWPRIV */ ++ (iw_handler) NULL /* kernel code */ , /* SIOCGIWPRIV */ ++ (iw_handler) NULL /* not used */ , /* SIOCSIWSTATS */ ++ (iw_handler) rt28xx_get_wireless_stats /* kernel code */ , /* SIOCGIWSTATS */ ++ (iw_handler) NULL, /* SIOCSIWSPY */ ++ (iw_handler) NULL, /* SIOCGIWSPY */ ++ (iw_handler) NULL, /* SIOCSIWTHRSPY */ ++ (iw_handler) NULL, /* SIOCGIWTHRSPY */ ++ (iw_handler) rt_ioctl_siwap, /* SIOCSIWAP */ ++ (iw_handler) rt_ioctl_giwap, /* SIOCGIWAP */ ++ (iw_handler) rt_ioctl_siwmlme, /* SIOCSIWMLME */ ++ (iw_handler) rt_ioctl_iwaplist, /* SIOCGIWAPLIST */ ++ (iw_handler) rt_ioctl_siwscan, /* SIOCSIWSCAN */ ++ (iw_handler) rt_ioctl_giwscan, /* SIOCGIWSCAN */ ++ (iw_handler) rt_ioctl_siwessid, /* SIOCSIWESSID */ ++ (iw_handler) rt_ioctl_giwessid, /* SIOCGIWESSID */ ++ (iw_handler) rt_ioctl_siwnickn, /* SIOCSIWNICKN */ ++ (iw_handler) rt_ioctl_giwnickn, /* SIOCGIWNICKN */ ++ (iw_handler) NULL, /* -- hole -- */ ++ (iw_handler) NULL, /* -- hole -- */ ++ (iw_handler) rt_ioctl_siwrate, /* SIOCSIWRATE */ ++ (iw_handler) rt_ioctl_giwrate, /* SIOCGIWRATE */ ++ (iw_handler) rt_ioctl_siwrts, /* SIOCSIWRTS */ ++ (iw_handler) rt_ioctl_giwrts, /* SIOCGIWRTS */ ++ (iw_handler) rt_ioctl_siwfrag, /* SIOCSIWFRAG */ ++ (iw_handler) rt_ioctl_giwfrag, /* SIOCGIWFRAG */ ++ (iw_handler) NULL, /* SIOCSIWTXPOW */ ++ (iw_handler) NULL, /* SIOCGIWTXPOW */ ++ (iw_handler) NULL, /* SIOCSIWRETRY */ ++ (iw_handler) NULL, /* SIOCGIWRETRY */ ++ (iw_handler) rt_ioctl_siwencode, /* SIOCSIWENCODE */ ++ (iw_handler) rt_ioctl_giwencode, /* SIOCGIWENCODE */ ++ (iw_handler) NULL, /* SIOCSIWPOWER */ ++ (iw_handler) NULL, /* SIOCGIWPOWER */ ++ (iw_handler) NULL, /* -- hole -- */ ++ (iw_handler) NULL, /* -- hole -- */ ++ (iw_handler) rt_ioctl_siwgenie, /* SIOCSIWGENIE */ ++ (iw_handler) rt_ioctl_giwgenie, /* SIOCGIWGENIE */ ++ (iw_handler) rt_ioctl_siwauth, /* SIOCSIWAUTH */ ++ (iw_handler) rt_ioctl_giwauth, /* SIOCGIWAUTH */ ++ (iw_handler) rt_ioctl_siwencodeext, /* SIOCSIWENCODEEXT */ ++ (iw_handler) rt_ioctl_giwencodeext, /* SIOCGIWENCODEEXT */ ++ (iw_handler) rt_ioctl_siwpmksa, /* SIOCSIWPMKSA */ + }; + +-const struct iw_handler_def rt28xx_iw_handler_def = +-{ +- .standard = (iw_handler *) rt_handler, +- .num_standard = sizeof(rt_handler) / sizeof(iw_handler), ++const struct iw_handler_def rt28xx_iw_handler_def = { ++ .standard = (iw_handler *) rt_handler, ++ .num_standard = sizeof(rt_handler) / sizeof(iw_handler), + #if IW_HANDLER_VERSION >= 7 +- .get_wireless_stats = rt28xx_get_wireless_stats, ++ .get_wireless_stats = rt28xx_get_wireless_stats, + #endif + }; + +-INT rt28xx_sta_ioctl( +- IN struct net_device *net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd) ++INT rt28xx_sta_ioctl(IN struct net_device *net_dev, ++ IN OUT struct ifreq *rq, IN INT cmd) + { +- POS_COOKIE pObj; +- RTMP_ADAPTER *pAd = NULL; +- struct iwreq *wrq = (struct iwreq *) rq; +- BOOLEAN StateMachineTouched = FALSE; +- INT Status = NDIS_STATUS_SUCCESS; ++ POS_COOKIE pObj; ++ RTMP_ADAPTER *pAd = NULL; ++ struct iwreq *wrq = (struct iwreq *)rq; ++ BOOLEAN StateMachineTouched = FALSE; ++ INT Status = NDIS_STATUS_SUCCESS; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- //check if the interface is down +- if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +- { +- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +- return -ENETDOWN; +- } +- } ++ //check if the interface is down ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); ++ return -ENETDOWN; ++ } ++ } + +- { // determine this ioctl command is comming from which interface. ++ { // determine this ioctl command is comming from which interface. + pObj->ioctl_if_type = INT_MAIN; + pObj->ioctl_if = MAIN_MBSSID; + } + +- switch(cmd) +- { +- case SIOCGIFHWADDR: +- DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIFHWADDR\n")); +- memcpy(wrq->u.name, pAd->CurrentAddress, ETH_ALEN); +- break; +- case SIOCGIWNAME: +- { +- char *name=&wrq->u.name[0]; +- rt_ioctl_giwname(net_dev, NULL, name, NULL); ++ switch (cmd) { ++ case SIOCGIFHWADDR: ++ DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIFHWADDR\n")); ++ memcpy(wrq->u.name, pAd->CurrentAddress, ETH_ALEN); ++ break; ++ case SIOCGIWNAME: ++ { ++ char *name = &wrq->u.name[0]; ++ rt_ioctl_giwname(net_dev, NULL, name, NULL); + break; + } +- case SIOCGIWESSID: //Get ESSID +- { +- struct iw_point *essid=&wrq->u.essid; +- rt_ioctl_giwessid(net_dev, NULL, essid, essid->pointer); ++ case SIOCGIWESSID: //Get ESSID ++ { ++ struct iw_point *essid = &wrq->u.essid; ++ rt_ioctl_giwessid(net_dev, NULL, essid, essid->pointer); + break; + } +- case SIOCSIWESSID: //Set ESSID +- { +- struct iw_point *essid=&wrq->u.essid; +- rt_ioctl_siwessid(net_dev, NULL, essid, essid->pointer); ++ case SIOCSIWESSID: //Set ESSID ++ { ++ struct iw_point *essid = &wrq->u.essid; ++ rt_ioctl_siwessid(net_dev, NULL, essid, essid->pointer); + break; + } +- case SIOCSIWNWID: // set network id (the cell) +- case SIOCGIWNWID: // get network id +- Status = -EOPNOTSUPP; +- break; +- case SIOCSIWFREQ: //set channel/frequency (Hz) +- { +- struct iw_freq *freq=&wrq->u.freq; +- rt_ioctl_siwfreq(net_dev, NULL, freq, NULL); ++ case SIOCSIWNWID: // set network id (the cell) ++ case SIOCGIWNWID: // get network id ++ Status = -EOPNOTSUPP; ++ break; ++ case SIOCSIWFREQ: //set channel/frequency (Hz) ++ { ++ struct iw_freq *freq = &wrq->u.freq; ++ rt_ioctl_siwfreq(net_dev, NULL, freq, NULL); + break; + } +- case SIOCGIWFREQ: // get channel/frequency (Hz) +- { +- struct iw_freq *freq=&wrq->u.freq; +- rt_ioctl_giwfreq(net_dev, NULL, freq, NULL); ++ case SIOCGIWFREQ: // get channel/frequency (Hz) ++ { ++ struct iw_freq *freq = &wrq->u.freq; ++ rt_ioctl_giwfreq(net_dev, NULL, freq, NULL); + break; + } +- case SIOCSIWNICKN: //set node name/nickname +- { +- //struct iw_point *data=&wrq->u.data; +- //rt_ioctl_siwnickn(net_dev, NULL, data, NULL); ++ case SIOCSIWNICKN: //set node name/nickname ++ { ++ //struct iw_point *data=&wrq->u.data; ++ //rt_ioctl_siwnickn(net_dev, NULL, data, NULL); + break; + } +- case SIOCGIWNICKN: //get node name/nickname +- { +- struct iw_point *erq = NULL; +- erq = &wrq->u.data; +- erq->length = strlen((PSTRING) pAd->nickname); +- Status = copy_to_user(erq->pointer, pAd->nickname, erq->length); ++ case SIOCGIWNICKN: //get node name/nickname ++ { ++ struct iw_point *erq = NULL; ++ erq = &wrq->u.data; ++ erq->length = strlen((PSTRING) pAd->nickname); ++ Status = ++ copy_to_user(erq->pointer, pAd->nickname, ++ erq->length); + break; + } +- case SIOCGIWRATE: //get default bit rate (bps) +- rt_ioctl_giwrate(net_dev, NULL, &wrq->u, NULL); +- break; +- case SIOCSIWRATE: //set default bit rate (bps) +- rt_ioctl_siwrate(net_dev, NULL, &wrq->u, NULL); +- break; +- case SIOCGIWRTS: // get RTS/CTS threshold (bytes) +- { +- struct iw_param *rts=&wrq->u.rts; +- rt_ioctl_giwrts(net_dev, NULL, rts, NULL); ++ case SIOCGIWRATE: //get default bit rate (bps) ++ rt_ioctl_giwrate(net_dev, NULL, &wrq->u, NULL); ++ break; ++ case SIOCSIWRATE: //set default bit rate (bps) ++ rt_ioctl_siwrate(net_dev, NULL, &wrq->u, NULL); ++ break; ++ case SIOCGIWRTS: // get RTS/CTS threshold (bytes) ++ { ++ struct iw_param *rts = &wrq->u.rts; ++ rt_ioctl_giwrts(net_dev, NULL, rts, NULL); + break; + } +- case SIOCSIWRTS: //set RTS/CTS threshold (bytes) +- { +- struct iw_param *rts=&wrq->u.rts; +- rt_ioctl_siwrts(net_dev, NULL, rts, NULL); ++ case SIOCSIWRTS: //set RTS/CTS threshold (bytes) ++ { ++ struct iw_param *rts = &wrq->u.rts; ++ rt_ioctl_siwrts(net_dev, NULL, rts, NULL); + break; + } +- case SIOCGIWFRAG: //get fragmentation thr (bytes) +- { +- struct iw_param *frag=&wrq->u.frag; +- rt_ioctl_giwfrag(net_dev, NULL, frag, NULL); ++ case SIOCGIWFRAG: //get fragmentation thr (bytes) ++ { ++ struct iw_param *frag = &wrq->u.frag; ++ rt_ioctl_giwfrag(net_dev, NULL, frag, NULL); + break; + } +- case SIOCSIWFRAG: //set fragmentation thr (bytes) +- { +- struct iw_param *frag=&wrq->u.frag; +- rt_ioctl_siwfrag(net_dev, NULL, frag, NULL); ++ case SIOCSIWFRAG: //set fragmentation thr (bytes) ++ { ++ struct iw_param *frag = &wrq->u.frag; ++ rt_ioctl_siwfrag(net_dev, NULL, frag, NULL); + break; + } +- case SIOCGIWENCODE: //get encoding token & mode +- { +- struct iw_point *erq=&wrq->u.encoding; +- if(erq) +- rt_ioctl_giwencode(net_dev, NULL, erq, erq->pointer); ++ case SIOCGIWENCODE: //get encoding token & mode ++ { ++ struct iw_point *erq = &wrq->u.encoding; ++ if (erq) ++ rt_ioctl_giwencode(net_dev, NULL, erq, ++ erq->pointer); + break; + } +- case SIOCSIWENCODE: //set encoding token & mode +- { +- struct iw_point *erq=&wrq->u.encoding; +- if(erq) +- rt_ioctl_siwencode(net_dev, NULL, erq, erq->pointer); ++ case SIOCSIWENCODE: //set encoding token & mode ++ { ++ struct iw_point *erq = &wrq->u.encoding; ++ if (erq) ++ rt_ioctl_siwencode(net_dev, NULL, erq, ++ erq->pointer); + break; + } +- case SIOCGIWAP: //get access point MAC addresses +- { +- struct sockaddr *ap_addr=&wrq->u.ap_addr; +- rt_ioctl_giwap(net_dev, NULL, ap_addr, ap_addr->sa_data); ++ case SIOCGIWAP: //get access point MAC addresses ++ { ++ struct sockaddr *ap_addr = &wrq->u.ap_addr; ++ rt_ioctl_giwap(net_dev, NULL, ap_addr, ++ ap_addr->sa_data); + break; + } +- case SIOCSIWAP: //set access point MAC addresses +- { +- struct sockaddr *ap_addr=&wrq->u.ap_addr; +- rt_ioctl_siwap(net_dev, NULL, ap_addr, ap_addr->sa_data); ++ case SIOCSIWAP: //set access point MAC addresses ++ { ++ struct sockaddr *ap_addr = &wrq->u.ap_addr; ++ rt_ioctl_siwap(net_dev, NULL, ap_addr, ++ ap_addr->sa_data); + break; + } +- case SIOCGIWMODE: //get operation mode +- { +- __u32 *mode=&wrq->u.mode; +- rt_ioctl_giwmode(net_dev, NULL, mode, NULL); ++ case SIOCGIWMODE: //get operation mode ++ { ++ __u32 *mode = &wrq->u.mode; ++ rt_ioctl_giwmode(net_dev, NULL, mode, NULL); + break; + } +- case SIOCSIWMODE: //set operation mode +- { +- __u32 *mode=&wrq->u.mode; +- rt_ioctl_siwmode(net_dev, NULL, mode, NULL); ++ case SIOCSIWMODE: //set operation mode ++ { ++ __u32 *mode = &wrq->u.mode; ++ rt_ioctl_siwmode(net_dev, NULL, mode, NULL); + break; + } +- case SIOCGIWSENS: //get sensitivity (dBm) +- case SIOCSIWSENS: //set sensitivity (dBm) +- case SIOCGIWPOWER: //get Power Management settings +- case SIOCSIWPOWER: //set Power Management settings +- case SIOCGIWTXPOW: //get transmit power (dBm) +- case SIOCSIWTXPOW: //set transmit power (dBm) +- case SIOCGIWRANGE: //Get range of parameters +- case SIOCGIWRETRY: //get retry limits and lifetime +- case SIOCSIWRETRY: //set retry limits and lifetime +- case RT_PRIV_IOCTL: +- case RT_PRIV_IOCTL_EXT: +- case RTPRIV_IOCTL_SET: +- case RTPRIV_IOCTL_GSITESURVEY: +- case SIOCGIWPRIV: +- Status = -EOPNOTSUPP; +- break; +- case SIOCETHTOOL: +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("IOCTL::unknown IOCTL's cmd = 0x%08x\n", cmd)); +- Status = -EOPNOTSUPP; +- break; ++ case SIOCGIWSENS: //get sensitivity (dBm) ++ case SIOCSIWSENS: //set sensitivity (dBm) ++ case SIOCGIWPOWER: //get Power Management settings ++ case SIOCSIWPOWER: //set Power Management settings ++ case SIOCGIWTXPOW: //get transmit power (dBm) ++ case SIOCSIWTXPOW: //set transmit power (dBm) ++ case SIOCGIWRANGE: //Get range of parameters ++ case SIOCGIWRETRY: //get retry limits and lifetime ++ case SIOCSIWRETRY: //set retry limits and lifetime ++ case RT_PRIV_IOCTL: ++ case RT_PRIV_IOCTL_EXT: ++ case RTPRIV_IOCTL_SET: ++ case RTPRIV_IOCTL_GSITESURVEY: ++ case SIOCGIWPRIV: ++ Status = -EOPNOTSUPP; ++ break; ++ case SIOCETHTOOL: ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("IOCTL::unknown IOCTL's cmd = 0x%08x\n", cmd)); ++ Status = -EOPNOTSUPP; ++ break; + } + +- if(StateMachineTouched) // Upper layer sent a MLME-related operations +- RTMP_MLME_HANDLER(pAd); ++ if (StateMachineTouched) // Upper layer sent a MLME-related operations ++ RTMP_MLME_HANDLER(pAd); + + return Status; + } +@@ -2508,77 +2639,75 @@ INT rt28xx_sta_ioctl( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT Set_SSID_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) ++INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + { +- NDIS_802_11_SSID Ssid, *pSsid=NULL; +- BOOLEAN StateMachineTouched = FALSE; +- int success = TRUE; +- +- if( strlen(arg) <= MAX_LEN_OF_SSID) +- { +- NdisZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); +- if (strlen(arg) != 0) +- { +- NdisMoveMemory(Ssid.Ssid, arg, strlen(arg)); +- Ssid.SsidLength = strlen(arg); +- } +- else //ANY ssid +- { +- Ssid.SsidLength = 0; +- memcpy(Ssid.Ssid, "", 0); ++ NDIS_802_11_SSID Ssid, *pSsid = NULL; ++ BOOLEAN StateMachineTouched = FALSE; ++ int success = TRUE; ++ ++ if (strlen(arg) <= MAX_LEN_OF_SSID) { ++ NdisZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); ++ if (strlen(arg) != 0) { ++ NdisMoveMemory(Ssid.Ssid, arg, strlen(arg)); ++ Ssid.SsidLength = strlen(arg); ++ } else //ANY ssid ++ { ++ Ssid.SsidLength = 0; ++ memcpy(Ssid.Ssid, "", 0); + pAdapter->StaCfg.BssType = BSS_INFRA; + pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen; +- pAdapter->StaCfg.WepStatus = Ndis802_11EncryptionDisabled; ++ pAdapter->StaCfg.WepStatus = ++ Ndis802_11EncryptionDisabled; + } +- pSsid = &Ssid; ++ pSsid = &Ssid; + +- if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) +- { +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MLME busy, reset MLME state machine !!!\n")); +- } ++ if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! MLME busy, reset MLME state machine !!!\n")); ++ } + + if ((pAdapter->StaCfg.WpaPassPhraseLen >= 8) && +- (pAdapter->StaCfg.WpaPassPhraseLen <= 64)) +- { +- STRING passphrase_str[65] = {0}; ++ (pAdapter->StaCfg.WpaPassPhraseLen <= 64)) { ++ STRING passphrase_str[65] = { 0 }; + UCHAR keyMaterial[40]; + +- RTMPMoveMemory(passphrase_str, pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.WpaPassPhraseLen); ++ RTMPMoveMemory(passphrase_str, ++ pAdapter->StaCfg.WpaPassPhrase, ++ pAdapter->StaCfg.WpaPassPhraseLen); + RTMPZeroMemory(pAdapter->StaCfg.PMK, 32); +- if (pAdapter->StaCfg.WpaPassPhraseLen == 64) +- { +- AtoH((PSTRING) pAdapter->StaCfg.WpaPassPhrase, pAdapter->StaCfg.PMK, 32); +- } +- else +- { +- PasswordHash((PSTRING) pAdapter->StaCfg.WpaPassPhrase, Ssid.Ssid, Ssid.SsidLength, keyMaterial); +- NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32); ++ if (pAdapter->StaCfg.WpaPassPhraseLen == 64) { ++ AtoH((PSTRING) pAdapter->StaCfg.WpaPassPhrase, ++ pAdapter->StaCfg.PMK, 32); ++ } else { ++ PasswordHash((PSTRING) pAdapter->StaCfg. ++ WpaPassPhrase, Ssid.Ssid, ++ Ssid.SsidLength, keyMaterial); ++ NdisMoveMemory(pAdapter->StaCfg.PMK, ++ keyMaterial, 32); + } + } + +- pAdapter->MlmeAux.CurrReqIsFromNdis = TRUE; +- pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; ++ pAdapter->MlmeAux.CurrReqIsFromNdis = TRUE; ++ pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE; + pAdapter->bConfigChanged = TRUE; + +- MlmeEnqueue(pAdapter, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), +- (VOID *)pSsid); +- +- StateMachineTouched = TRUE; +- DBGPRINT(RT_DEBUG_TRACE, ("Set_SSID_Proc::(Len=%d,Ssid=%s)\n", Ssid.SsidLength, Ssid.Ssid)); +- } +- else +- success = FALSE; +- +- if (StateMachineTouched) // Upper layer sent a MLME-related operations +- RTMP_MLME_HANDLER(pAdapter); ++ MlmeEnqueue(pAdapter, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_SSID, ++ sizeof(NDIS_802_11_SSID), (VOID *) pSsid); ++ ++ StateMachineTouched = TRUE; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Set_SSID_Proc::(Len=%d,Ssid=%s)\n", Ssid.SsidLength, ++ Ssid.Ssid)); ++ } else ++ success = FALSE; ++ ++ if (StateMachineTouched) // Upper layer sent a MLME-related operations ++ RTMP_MLME_HANDLER(pAdapter); + +- return success; ++ return success; + } + + /* +@@ -2589,156 +2718,176 @@ INT Set_SSID_Proc( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT Set_NetworkType_Proc( +- IN PRTMP_ADAPTER pAdapter, +- IN PSTRING arg) ++INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + { +- UINT32 Value = 0; ++ UINT32 Value = 0; + +- if (strcmp(arg, "Adhoc") == 0) +- { +- if (pAdapter->StaCfg.BssType != BSS_ADHOC) +- { ++ if (strcmp(arg, "Adhoc") == 0) { ++ if (pAdapter->StaCfg.BssType != BSS_ADHOC) { + // Config has changed + pAdapter->bConfigChanged = TRUE; +- if (MONITOR_ON(pAdapter)) +- { +- RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, STANORMAL); +- RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); ++ if (MONITOR_ON(pAdapter)) { ++ RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, ++ STANORMAL); ++ RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); + Value &= (~0x80); + RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAdapter->StaCfg.bAutoReconnect = TRUE; +- LinkDown(pAdapter, FALSE); +- } +- if (INFRA_ON(pAdapter)) +- { ++ OPSTATUS_CLEAR_FLAG(pAdapter, ++ fOP_STATUS_MEDIA_STATE_CONNECTED); ++ pAdapter->StaCfg.bAutoReconnect = TRUE; ++ LinkDown(pAdapter, FALSE); ++ } ++ if (INFRA_ON(pAdapter)) { + //BOOLEAN Cancelled; + // Set the AutoReconnectSsid to prevent it reconnect to old SSID + // Since calling this indicate user don't want to connect to that SSID anymore. +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAdapter->MlmeAux.AutoReconnectSsid, pAdapter->MlmeAux.AutoReconnectSsidLen); ++ pAdapter->MlmeAux.AutoReconnectSsidLen = 32; ++ NdisZeroMemory(pAdapter->MlmeAux. ++ AutoReconnectSsid, ++ pAdapter->MlmeAux. ++ AutoReconnectSsidLen); + + LinkDown(pAdapter, FALSE); + +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event BB!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_DISCONNECT Event BB!\n")); + } + } + pAdapter->StaCfg.BssType = BSS_ADHOC; +- pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(AD-HOC)\n")); +- } +- else if (strcmp(arg, "Infra") == 0) +- { +- if (pAdapter->StaCfg.BssType != BSS_INFRA) +- { ++ pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===>Set_NetworkType_Proc::(AD-HOC)\n")); ++ } else if (strcmp(arg, "Infra") == 0) { ++ if (pAdapter->StaCfg.BssType != BSS_INFRA) { + // Config has changed + pAdapter->bConfigChanged = TRUE; +- if (MONITOR_ON(pAdapter)) +- { +- RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, STANORMAL); +- RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); ++ if (MONITOR_ON(pAdapter)) { ++ RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, ++ STANORMAL); ++ RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); + Value &= (~0x80); + RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAdapter->StaCfg.bAutoReconnect = TRUE; +- LinkDown(pAdapter, FALSE); +- } +- if (ADHOC_ON(pAdapter)) +- { ++ OPSTATUS_CLEAR_FLAG(pAdapter, ++ fOP_STATUS_MEDIA_STATE_CONNECTED); ++ pAdapter->StaCfg.bAutoReconnect = TRUE; ++ LinkDown(pAdapter, FALSE); ++ } ++ if (ADHOC_ON(pAdapter)) { + // Set the AutoReconnectSsid to prevent it reconnect to old SSID + // Since calling this indicate user don't want to connect to that SSID anymore. +- pAdapter->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAdapter->MlmeAux.AutoReconnectSsid, pAdapter->MlmeAux.AutoReconnectSsidLen); ++ pAdapter->MlmeAux.AutoReconnectSsidLen = 32; ++ NdisZeroMemory(pAdapter->MlmeAux. ++ AutoReconnectSsid, ++ pAdapter->MlmeAux. ++ AutoReconnectSsidLen); + + LinkDown(pAdapter, FALSE); + } + } + pAdapter->StaCfg.BssType = BSS_INFRA; +- pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(INFRA)\n")); +- } +- else if (strcmp(arg, "Monitor") == 0) +- { +- UCHAR bbpValue = 0; ++ pAdapter->net_dev->type = pAdapter->StaCfg.OriDevType; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===>Set_NetworkType_Proc::(INFRA)\n")); ++ } else if (strcmp(arg, "Monitor") == 0) { ++ UCHAR bbpValue = 0; + BCN_TIME_CFG_STRUC csr; + OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_INFRA_ON); +- OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_ADHOC_ON); ++ OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_ADHOC_ON); + OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); + // disable all periodic state machine + pAdapter->StaCfg.bAutoReconnect = FALSE; + // reset all mlme state machine +- RTMP_MLME_RESET_STATE_MACHINE(pAdapter); +- DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_MEDIA_STATE_CONNECTED \n")); +- if (pAdapter->CommonCfg.CentralChannel == 0) +- { +- if (pAdapter->CommonCfg.PhyMode == PHY_11AN_MIXED) +- pAdapter->CommonCfg.CentralChannel = 36; +- else +- pAdapter->CommonCfg.CentralChannel = 6; +- } +- else +- N_ChannelCheck(pAdapter); +- +- if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && +- pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) +- { ++ RTMP_MLME_RESET_STATE_MACHINE(pAdapter); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("fOP_STATUS_MEDIA_STATE_CONNECTED \n")); ++ if (pAdapter->CommonCfg.CentralChannel == 0) { ++ if (pAdapter->CommonCfg.PhyMode == PHY_11AN_MIXED) ++ pAdapter->CommonCfg.CentralChannel = 36; ++ else ++ pAdapter->CommonCfg.CentralChannel = 6; ++ } else ++ N_ChannelCheck(pAdapter); ++ ++ if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && ++ pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && ++ pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == ++ EXTCHA_ABOVE) { + // 40MHz ,control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, ++ &bbpValue); + bbpValue &= (~0x18); + bbpValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, ++ bbpValue); + pAdapter->CommonCfg.BBPCurrentBW = BW_40; + // RX : control channel at lower +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, &bbpValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, ++ &bbpValue); + bbpValue &= (~0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, bbpValue); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, ++ bbpValue); + + RTMP_IO_READ32(pAdapter, TX_BAND_CFG, &Value); + Value &= 0xfffffffe; + RTMP_IO_WRITE32(pAdapter, TX_BAND_CFG, Value); +- pAdapter->CommonCfg.CentralChannel = pAdapter->CommonCfg.Channel + 2; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAdapter, pAdapter->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", +- pAdapter->CommonCfg.Channel, +- pAdapter->CommonCfg.CentralChannel)); +- } +- else if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED && +- pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && +- pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_BELOW) +- { ++ pAdapter->CommonCfg.CentralChannel = ++ pAdapter->CommonCfg.Channel + 2; ++ AsicSwitchChannel(pAdapter, ++ pAdapter->CommonCfg.CentralChannel, ++ FALSE); ++ AsicLockChannel(pAdapter, ++ pAdapter->CommonCfg.CentralChannel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", ++ pAdapter->CommonCfg.Channel, ++ pAdapter->CommonCfg.CentralChannel)); ++ } else if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED ++ && pAdapter->CommonCfg.RegTransmitSetting.field.BW == ++ BW_40 ++ && pAdapter->CommonCfg.RegTransmitSetting.field. ++ EXTCHA == EXTCHA_BELOW) { + // 40MHz ,control channel at upper +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, ++ &bbpValue); + bbpValue &= (~0x18); + bbpValue |= 0x10; +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, ++ bbpValue); + pAdapter->CommonCfg.BBPCurrentBW = BW_40; + RTMP_IO_READ32(pAdapter, TX_BAND_CFG, &Value); + Value |= 0x1; + RTMP_IO_WRITE32(pAdapter, TX_BAND_CFG, Value); + +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, &bbpValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, ++ &bbpValue); + bbpValue |= (0x20); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, bbpValue); +- pAdapter->CommonCfg.CentralChannel = pAdapter->CommonCfg.Channel - 2; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAdapter, pAdapter->CommonCfg.CentralChannel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", +- pAdapter->CommonCfg.Channel, +- pAdapter->CommonCfg.CentralChannel)); +- } +- else +- { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R3, ++ bbpValue); ++ pAdapter->CommonCfg.CentralChannel = ++ pAdapter->CommonCfg.Channel - 2; ++ AsicSwitchChannel(pAdapter, ++ pAdapter->CommonCfg.CentralChannel, ++ FALSE); ++ AsicLockChannel(pAdapter, ++ pAdapter->CommonCfg.CentralChannel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BW_40 ,control_channel(%d), CentralChannel(%d) \n", ++ pAdapter->CommonCfg.Channel, ++ pAdapter->CommonCfg.CentralChannel)); ++ } else { + // 20MHz +- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, ++ &bbpValue); + bbpValue &= (~0x18); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, ++ bbpValue); + pAdapter->CommonCfg.BBPCurrentBW = BW_20; +- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.Channel, FALSE); ++ AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.Channel, ++ FALSE); + AsicLockChannel(pAdapter, pAdapter->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAdapter->CommonCfg.Channel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BW_20, Channel(%d)\n", ++ pAdapter->CommonCfg.Channel)); + } + // Enable Rx with promiscuous reception + RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, 0x3); +@@ -2754,14 +2903,16 @@ INT Set_NetworkType_Proc( + RTMP_IO_WRITE32(pAdapter, BCN_TIME_CFG, csr.word); + + pAdapter->StaCfg.BssType = BSS_MONITOR; +- pAdapter->net_dev->type = ARPHRD_IEEE80211_PRISM; //ARPHRD_IEEE80211; // IEEE80211 +- DBGPRINT(RT_DEBUG_TRACE, ("===>Set_NetworkType_Proc::(MONITOR)\n")); +- } +- +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key +- pAdapter->StaCfg.WpaState = SS_NOTUSE; ++ pAdapter->net_dev->type = ARPHRD_IEEE80211_PRISM; //ARPHRD_IEEE80211; // IEEE80211 ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===>Set_NetworkType_Proc::(MONITOR)\n")); ++ } ++ // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key ++ pAdapter->StaCfg.WpaState = SS_NOTUSE; + +- DBGPRINT(RT_DEBUG_TRACE, ("Set_NetworkType_Proc::(NetworkType=%d)\n", pAdapter->StaCfg.BssType)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Set_NetworkType_Proc::(NetworkType=%d)\n", ++ pAdapter->StaCfg.BssType)); + +- return TRUE; ++ return TRUE; + } +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 00732be..ebc2261 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -26,7 +26,6 @@ + + #include "rt_config.h" + +- + // Following information will be show when you run 'modinfo' + // *** If you have a solution for the bug in current version of driver, please mail to me. + // Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** +@@ -37,141 +36,135 @@ MODULE_LICENSE("GPL"); + MODULE_VERSION(STA_DRIVER_VERSION); + #endif + +- + /* module table */ + struct usb_device_id rtusb_usb_id[] = { + #ifdef RT2870 +- {USB_DEVICE(0x148F,0x2770)}, /* Ralink */ +- {USB_DEVICE(0x148F,0x2870)}, /* Ralink */ +- {USB_DEVICE(0x07B8,0x2870)}, /* AboCom */ +- {USB_DEVICE(0x07B8,0x2770)}, /* AboCom */ +- {USB_DEVICE(0x0DF6,0x0039)}, /* Sitecom 2770 */ +- {USB_DEVICE(0x083A,0x7512)}, /* Arcadyan 2770 */ +- {USB_DEVICE(0x0789,0x0162)}, /* Logitec 2870 */ +- {USB_DEVICE(0x0789,0x0163)}, /* Logitec 2870 */ +- {USB_DEVICE(0x0789,0x0164)}, /* Logitec 2870 */ +- {USB_DEVICE(0x177f,0x0302)}, /* lsusb */ +- {USB_DEVICE(0x0B05,0x1731)}, /* Asus */ +- {USB_DEVICE(0x0B05,0x1732)}, /* Asus */ +- {USB_DEVICE(0x0B05,0x1742)}, /* Asus */ +- {USB_DEVICE(0x0DF6,0x0017)}, /* Sitecom */ +- {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ +- {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ +- {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ +- {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ +- {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ +- {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ +- {USB_DEVICE(0x07D1,0x3C09)}, /* D-Link */ +- {USB_DEVICE(0x07D1,0x3C11)}, /* D-Link */ +- {USB_DEVICE(0x14B2,0x3C07)}, /* AL */ +- {USB_DEVICE(0x050D,0x8053)}, /* Belkin */ +- {USB_DEVICE(0x14B2,0x3C23)}, /* Airlink */ +- {USB_DEVICE(0x14B2,0x3C27)}, /* Airlink */ +- {USB_DEVICE(0x07AA,0x002F)}, /* Corega */ +- {USB_DEVICE(0x07AA,0x003C)}, /* Corega */ +- {USB_DEVICE(0x07AA,0x003F)}, /* Corega */ +- {USB_DEVICE(0x1044,0x800B)}, /* Gigabyte */ +- {USB_DEVICE(0x15A9,0x0006)}, /* Sparklan */ +- {USB_DEVICE(0x083A,0xB522)}, /* SMC */ +- {USB_DEVICE(0x083A,0xA618)}, /* SMC */ +- {USB_DEVICE(0x083A,0x8522)}, /* Arcadyan */ +- {USB_DEVICE(0x083A,0x7522)}, /* Arcadyan */ +- {USB_DEVICE(0x0CDE,0x0022)}, /* ZCOM */ +- {USB_DEVICE(0x0586,0x3416)}, /* Zyxel */ +- {USB_DEVICE(0x0CDE,0x0025)}, /* Zyxel */ +- {USB_DEVICE(0x1740,0x9701)}, /* EnGenius */ +- {USB_DEVICE(0x1740,0x9702)}, /* EnGenius */ +- {USB_DEVICE(0x0471,0x200f)}, /* Philips */ +- {USB_DEVICE(0x14B2,0x3C25)}, /* Draytek */ +- {USB_DEVICE(0x13D3,0x3247)}, /* AzureWave */ +- {USB_DEVICE(0x083A,0x6618)}, /* Accton */ +- {USB_DEVICE(0x15c5,0x0008)}, /* Amit */ +- {USB_DEVICE(0x0E66,0x0001)}, /* Hawking */ +- {USB_DEVICE(0x0E66,0x0003)}, /* Hawking */ +- {USB_DEVICE(0x129B,0x1828)}, /* Siemens */ +- {USB_DEVICE(0x157E,0x300E)}, /* U-Media */ +- {USB_DEVICE(0x050d,0x805c)}, +- {USB_DEVICE(0x050d,0x815c)}, +- {USB_DEVICE(0x1482,0x3C09)}, /* Abocom*/ +- {USB_DEVICE(0x14B2,0x3C09)}, /* Alpha */ +- {USB_DEVICE(0x04E8,0x2018)}, /* samsung */ +- {USB_DEVICE(0x5A57,0x0280)}, /* Zinwell */ +- {USB_DEVICE(0x5A57,0x0282)}, /* Zinwell */ +- {USB_DEVICE(0x7392,0x7718)}, +- {USB_DEVICE(0x7392,0x7717)}, +- {USB_DEVICE(0x1737,0x0070)}, /* Linksys WUSB100 */ +- {USB_DEVICE(0x1737,0x0071)}, /* Linksys WUSB600N */ +- {USB_DEVICE(0x0411,0x00e8)}, /* Buffalo WLI-UC-G300N*/ +- {USB_DEVICE(0x050d,0x815c)}, /* Belkin F5D8053 */ ++ {USB_DEVICE(0x148F, 0x2770)}, /* Ralink */ ++ {USB_DEVICE(0x148F, 0x2870)}, /* Ralink */ ++ {USB_DEVICE(0x07B8, 0x2870)}, /* AboCom */ ++ {USB_DEVICE(0x07B8, 0x2770)}, /* AboCom */ ++ {USB_DEVICE(0x0DF6, 0x0039)}, /* Sitecom 2770 */ ++ {USB_DEVICE(0x083A, 0x7512)}, /* Arcadyan 2770 */ ++ {USB_DEVICE(0x0789, 0x0162)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x0789, 0x0163)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x0789, 0x0164)}, /* Logitec 2870 */ ++ {USB_DEVICE(0x177f, 0x0302)}, /* lsusb */ ++ {USB_DEVICE(0x0B05, 0x1731)}, /* Asus */ ++ {USB_DEVICE(0x0B05, 0x1732)}, /* Asus */ ++ {USB_DEVICE(0x0B05, 0x1742)}, /* Asus */ ++ {USB_DEVICE(0x0DF6, 0x0017)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6, 0x002B)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6, 0x002C)}, /* Sitecom */ ++ {USB_DEVICE(0x0DF6, 0x002D)}, /* Sitecom */ ++ {USB_DEVICE(0x14B2, 0x3C06)}, /* Conceptronic */ ++ {USB_DEVICE(0x14B2, 0x3C28)}, /* Conceptronic */ ++ {USB_DEVICE(0x2019, 0xED06)}, /* Planex Communications, Inc. */ ++ {USB_DEVICE(0x07D1, 0x3C09)}, /* D-Link */ ++ {USB_DEVICE(0x07D1, 0x3C11)}, /* D-Link */ ++ {USB_DEVICE(0x14B2, 0x3C07)}, /* AL */ ++ {USB_DEVICE(0x050D, 0x8053)}, /* Belkin */ ++ {USB_DEVICE(0x14B2, 0x3C23)}, /* Airlink */ ++ {USB_DEVICE(0x14B2, 0x3C27)}, /* Airlink */ ++ {USB_DEVICE(0x07AA, 0x002F)}, /* Corega */ ++ {USB_DEVICE(0x07AA, 0x003C)}, /* Corega */ ++ {USB_DEVICE(0x07AA, 0x003F)}, /* Corega */ ++ {USB_DEVICE(0x1044, 0x800B)}, /* Gigabyte */ ++ {USB_DEVICE(0x15A9, 0x0006)}, /* Sparklan */ ++ {USB_DEVICE(0x083A, 0xB522)}, /* SMC */ ++ {USB_DEVICE(0x083A, 0xA618)}, /* SMC */ ++ {USB_DEVICE(0x083A, 0x8522)}, /* Arcadyan */ ++ {USB_DEVICE(0x083A, 0x7522)}, /* Arcadyan */ ++ {USB_DEVICE(0x0CDE, 0x0022)}, /* ZCOM */ ++ {USB_DEVICE(0x0586, 0x3416)}, /* Zyxel */ ++ {USB_DEVICE(0x0CDE, 0x0025)}, /* Zyxel */ ++ {USB_DEVICE(0x1740, 0x9701)}, /* EnGenius */ ++ {USB_DEVICE(0x1740, 0x9702)}, /* EnGenius */ ++ {USB_DEVICE(0x0471, 0x200f)}, /* Philips */ ++ {USB_DEVICE(0x14B2, 0x3C25)}, /* Draytek */ ++ {USB_DEVICE(0x13D3, 0x3247)}, /* AzureWave */ ++ {USB_DEVICE(0x083A, 0x6618)}, /* Accton */ ++ {USB_DEVICE(0x15c5, 0x0008)}, /* Amit */ ++ {USB_DEVICE(0x0E66, 0x0001)}, /* Hawking */ ++ {USB_DEVICE(0x0E66, 0x0003)}, /* Hawking */ ++ {USB_DEVICE(0x129B, 0x1828)}, /* Siemens */ ++ {USB_DEVICE(0x157E, 0x300E)}, /* U-Media */ ++ {USB_DEVICE(0x050d, 0x805c)}, ++ {USB_DEVICE(0x050d, 0x815c)}, ++ {USB_DEVICE(0x1482, 0x3C09)}, /* Abocom */ ++ {USB_DEVICE(0x14B2, 0x3C09)}, /* Alpha */ ++ {USB_DEVICE(0x04E8, 0x2018)}, /* samsung */ ++ {USB_DEVICE(0x5A57, 0x0280)}, /* Zinwell */ ++ {USB_DEVICE(0x5A57, 0x0282)}, /* Zinwell */ ++ {USB_DEVICE(0x7392, 0x7718)}, ++ {USB_DEVICE(0x7392, 0x7717)}, ++ {USB_DEVICE(0x1737, 0x0070)}, /* Linksys WUSB100 */ ++ {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */ ++ {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */ ++ {USB_DEVICE(0x050d, 0x815c)}, /* Belkin F5D8053 */ + #endif // RT2870 // + #ifdef RT3070 +- {USB_DEVICE(0x148F,0x3070)}, /* Ralink 3070 */ +- {USB_DEVICE(0x148F,0x3071)}, /* Ralink 3071 */ +- {USB_DEVICE(0x148F,0x3072)}, /* Ralink 3072 */ +- {USB_DEVICE(0x0DB0,0x3820)}, /* Ralink 3070 */ +- {USB_DEVICE(0x0DF6,0x003E)}, /* Sitecom 3070 */ +- {USB_DEVICE(0x0DF6,0x0042)}, /* Sitecom 3072 */ +- {USB_DEVICE(0x14B2,0x3C12)}, /* AL 3070 */ +- {USB_DEVICE(0x18C5,0x0012)}, /* Corega 3070 */ +- {USB_DEVICE(0x083A,0x7511)}, /* Arcadyan 3070 */ +- {USB_DEVICE(0x1740,0x9703)}, /* EnGenius 3070 */ +- {USB_DEVICE(0x1740,0x9705)}, /* EnGenius 3071 */ +- {USB_DEVICE(0x1740,0x9706)}, /* EnGenius 3072 */ +- {USB_DEVICE(0x13D3,0x3273)}, /* AzureWave 3070*/ +- {USB_DEVICE(0x1044,0x800D)}, /* Gigabyte GN-WB32L 3070 */ +- {USB_DEVICE(0x2019,0xAB25)}, /* Planex Communications, Inc. RT3070 */ +- {USB_DEVICE(0x07B8,0x3070)}, /* AboCom 3070 */ +- {USB_DEVICE(0x07B8,0x3071)}, /* AboCom 3071 */ +- {USB_DEVICE(0x07B8,0x3072)}, /* Abocom 3072 */ +- {USB_DEVICE(0x7392,0x7711)}, /* Edimax 3070 */ +- {USB_DEVICE(0x1A32,0x0304)}, /* Quanta 3070 */ +- {USB_DEVICE(0x1EDA,0x2310)}, /* AirTies 3070 */ +- {USB_DEVICE(0x07D1,0x3C0A)}, /* D-Link 3072 */ +- {USB_DEVICE(0x07D1,0x3C0D)}, /* D-Link 3070 */ +- {USB_DEVICE(0x07D1,0x3C0E)}, /* D-Link 3070 */ +- {USB_DEVICE(0x07D1,0x3C0F)}, /* D-Link 3070 */ +- {USB_DEVICE(0x1D4D,0x000C)}, /* Pegatron Corporation 3070 */ +- {USB_DEVICE(0x1D4D,0x000E)}, /* Pegatron Corporation 3070 */ +- {USB_DEVICE(0x5A57,0x5257)}, /* Zinwell 3070 */ +- {USB_DEVICE(0x5A57,0x0283)}, /* Zinwell 3072 */ +- {USB_DEVICE(0x04BB,0x0945)}, /* I-O DATA 3072 */ +- {USB_DEVICE(0x203D,0x1480)}, /* Encore 3070 */ ++ {USB_DEVICE(0x148F, 0x3070)}, /* Ralink 3070 */ ++ {USB_DEVICE(0x148F, 0x3071)}, /* Ralink 3071 */ ++ {USB_DEVICE(0x148F, 0x3072)}, /* Ralink 3072 */ ++ {USB_DEVICE(0x0DB0, 0x3820)}, /* Ralink 3070 */ ++ {USB_DEVICE(0x0DF6, 0x003E)}, /* Sitecom 3070 */ ++ {USB_DEVICE(0x0DF6, 0x0042)}, /* Sitecom 3072 */ ++ {USB_DEVICE(0x14B2, 0x3C12)}, /* AL 3070 */ ++ {USB_DEVICE(0x18C5, 0x0012)}, /* Corega 3070 */ ++ {USB_DEVICE(0x083A, 0x7511)}, /* Arcadyan 3070 */ ++ {USB_DEVICE(0x1740, 0x9703)}, /* EnGenius 3070 */ ++ {USB_DEVICE(0x1740, 0x9705)}, /* EnGenius 3071 */ ++ {USB_DEVICE(0x1740, 0x9706)}, /* EnGenius 3072 */ ++ {USB_DEVICE(0x13D3, 0x3273)}, /* AzureWave 3070 */ ++ {USB_DEVICE(0x1044, 0x800D)}, /* Gigabyte GN-WB32L 3070 */ ++ {USB_DEVICE(0x2019, 0xAB25)}, /* Planex Communications, Inc. RT3070 */ ++ {USB_DEVICE(0x07B8, 0x3070)}, /* AboCom 3070 */ ++ {USB_DEVICE(0x07B8, 0x3071)}, /* AboCom 3071 */ ++ {USB_DEVICE(0x07B8, 0x3072)}, /* Abocom 3072 */ ++ {USB_DEVICE(0x7392, 0x7711)}, /* Edimax 3070 */ ++ {USB_DEVICE(0x1A32, 0x0304)}, /* Quanta 3070 */ ++ {USB_DEVICE(0x1EDA, 0x2310)}, /* AirTies 3070 */ ++ {USB_DEVICE(0x07D1, 0x3C0A)}, /* D-Link 3072 */ ++ {USB_DEVICE(0x07D1, 0x3C0D)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x07D1, 0x3C0E)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x07D1, 0x3C0F)}, /* D-Link 3070 */ ++ {USB_DEVICE(0x1D4D, 0x000C)}, /* Pegatron Corporation 3070 */ ++ {USB_DEVICE(0x1D4D, 0x000E)}, /* Pegatron Corporation 3070 */ ++ {USB_DEVICE(0x5A57, 0x5257)}, /* Zinwell 3070 */ ++ {USB_DEVICE(0x5A57, 0x0283)}, /* Zinwell 3072 */ ++ {USB_DEVICE(0x04BB, 0x0945)}, /* I-O DATA 3072 */ ++ {USB_DEVICE(0x203D, 0x1480)}, /* Encore 3070 */ + #endif // RT3070 // +- { USB_DEVICE(0x0DF6, 0x003F) }, /* Sitecom WL-608 */ +- { USB_DEVICE(0x1737, 0x0077) }, /* Linksys WUSB54GC-EU v3 */ +- { USB_DEVICE(0x2001, 0x3C09) }, /* D-Link */ +- { USB_DEVICE(0x2001, 0x3C0A) }, /* D-Link 3072*/ +- { USB_DEVICE(0x2019, 0xED14) }, /* Planex Communications, Inc. */ +- { }/* Terminating entry */ ++ {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom WL-608 */ ++ {USB_DEVICE(0x1737, 0x0077)}, /* Linksys WUSB54GC-EU v3 */ ++ {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */ ++ {USB_DEVICE(0x2001, 0x3C0A)}, /* D-Link 3072 */ ++ {USB_DEVICE(0x2019, 0xED14)}, /* Planex Communications, Inc. */ ++ {} /* Terminating entry */ + }; + +-INT const rtusb_usb_id_len = sizeof(rtusb_usb_id) / sizeof(struct usb_device_id); ++INT const rtusb_usb_id_len = ++ sizeof(rtusb_usb_id) / sizeof(struct usb_device_id); + + MODULE_DEVICE_TABLE(usb, rtusb_usb_id); + +-static void rt2870_disconnect( +- IN struct usb_device *dev, +- IN PRTMP_ADAPTER pAd); ++static void rt2870_disconnect(IN struct usb_device *dev, IN PRTMP_ADAPTER pAd); + +-static int __devinit rt2870_probe( +- IN struct usb_interface *intf, +- IN struct usb_device *usb_dev, +- IN const struct usb_device_id *dev_id, +- IN RTMP_ADAPTER **ppAd); ++static int __devinit rt2870_probe(IN struct usb_interface *intf, ++ IN struct usb_device *usb_dev, ++ IN const struct usb_device_id *dev_id, ++ IN RTMP_ADAPTER ** ppAd); + + #ifndef PF_NOFREEZE + #define PF_NOFREEZE 0 + #endif + +- + extern int rt28xx_close(IN struct net_device *net_dev); + extern int rt28xx_open(struct net_device *net_dev); + +-static BOOLEAN USBDevConfigInit( +- IN struct usb_device *dev, +- IN struct usb_interface *intf, +- IN RTMP_ADAPTER *pAd); +- ++static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, ++ IN struct usb_interface *intf, ++ IN RTMP_ADAPTER * pAd); + + /* + ======================================================================== +@@ -188,27 +181,23 @@ Return Value: + Note: + ======================================================================== + */ +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p) ++BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + { + struct usb_interface *intf = (struct usb_interface *)_dev_p; + struct usb_device *dev_p = interface_to_usbdev(intf); + UINT32 i; + +- +- for(i=0; idescriptor.idVendor == rtusb_usb_id[i].idVendor && +- dev_p->descriptor.idProduct == rtusb_usb_id[i].idProduct) +- { ++ dev_p->descriptor.idProduct == rtusb_usb_id[i].idProduct) { + printk("rt2870: idVendor = 0x%x, idProduct = 0x%x\n", +- dev_p->descriptor.idVendor, dev_p->descriptor.idProduct); ++ dev_p->descriptor.idVendor, ++ dev_p->descriptor.idProduct); + break; + } + } + +- if (i == rtusb_usb_id_len) +- { ++ if (i == rtusb_usb_id_len) { + printk("rt2870: Error! Device Descriptor not matching!\n"); + return FALSE; + } +@@ -227,61 +216,76 @@ static int rt2870_suspend(struct usb_interface *intf, pm_message_t state); + static int rt2870_resume(struct usb_interface *intf); + #endif // CONFIG_PM // + +-static int rtusb_probe (struct usb_interface *intf, +- const struct usb_device_id *id); ++static int rtusb_probe(struct usb_interface *intf, ++ const struct usb_device_id *id); + static void rtusb_disconnect(struct usb_interface *intf); + +-static BOOLEAN USBDevConfigInit( +- IN struct usb_device *dev, +- IN struct usb_interface *intf, +- IN RTMP_ADAPTER *pAd) ++static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, ++ IN struct usb_interface *intf, ++ IN RTMP_ADAPTER * pAd) + { + struct usb_host_interface *iface_desc; + ULONG BulkOutIdx; + UINT32 i; + +- + /* get the active interface descriptor */ + iface_desc = intf->cur_altsetting; + + /* get # of enpoints */ + pAd->NumberOfPipes = iface_desc->desc.bNumEndpoints; +- DBGPRINT(RT_DEBUG_TRACE, ("NumEndpoints=%d\n", iface_desc->desc.bNumEndpoints)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NumEndpoints=%d\n", iface_desc->desc.bNumEndpoints)); + + /* Configure Pipes */ + BulkOutIdx = 0; + +- for(i=0; iNumberOfPipes; i++) +- { ++ for (i = 0; i < pAd->NumberOfPipes; i++) { + if ((iface_desc->endpoint[i].desc.bmAttributes == +- USB_ENDPOINT_XFER_BULK) && +- ((iface_desc->endpoint[i].desc.bEndpointAddress & +- USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)) +- { +- pAd->BulkInEpAddr = iface_desc->endpoint[i].desc.bEndpointAddress; +- pAd->BulkInMaxPacketSize = le2cpu16(iface_desc->endpoint[i].desc.wMaxPacketSize); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("BULK IN MaxPacketSize = %d\n", pAd->BulkInMaxPacketSize)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("EP address = 0x%2x\n", iface_desc->endpoint[i].desc.bEndpointAddress)); +- } +- else if ((iface_desc->endpoint[i].desc.bmAttributes == +- USB_ENDPOINT_XFER_BULK) && +- ((iface_desc->endpoint[i].desc.bEndpointAddress & +- USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) +- { ++ USB_ENDPOINT_XFER_BULK) && ++ ((iface_desc->endpoint[i].desc.bEndpointAddress & ++ USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)) { ++ pAd->BulkInEpAddr = ++ iface_desc->endpoint[i].desc.bEndpointAddress; ++ pAd->BulkInMaxPacketSize = ++ le2cpu16(iface_desc->endpoint[i].desc. ++ wMaxPacketSize); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("BULK IN MaxPacketSize = %d\n", ++ pAd->BulkInMaxPacketSize)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("EP address = 0x%2x\n", ++ iface_desc->endpoint[i].desc. ++ bEndpointAddress)); ++ } else ++ if ((iface_desc->endpoint[i].desc.bmAttributes == ++ USB_ENDPOINT_XFER_BULK) ++ && ++ ((iface_desc->endpoint[i].desc. ++ bEndpointAddress & USB_ENDPOINT_DIR_MASK) == ++ USB_DIR_OUT)) { + // there are 6 bulk out EP. EP6 highest priority. + // EP1-4 is EDCA. EP5 is HCCA. +- pAd->BulkOutEpAddr[BulkOutIdx++] = iface_desc->endpoint[i].desc.bEndpointAddress; +- pAd->BulkOutMaxPacketSize = le2cpu16(iface_desc->endpoint[i].desc.wMaxPacketSize); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("BULK OUT MaxPacketSize = %d\n", pAd->BulkOutMaxPacketSize)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("EP address = 0x%2x \n", iface_desc->endpoint[i].desc.bEndpointAddress)); ++ pAd->BulkOutEpAddr[BulkOutIdx++] = ++ iface_desc->endpoint[i].desc.bEndpointAddress; ++ pAd->BulkOutMaxPacketSize = ++ le2cpu16(iface_desc->endpoint[i].desc. ++ wMaxPacketSize); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("BULK OUT MaxPacketSize = %d\n", ++ pAd->BulkOutMaxPacketSize)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("EP address = 0x%2x \n", ++ iface_desc->endpoint[i].desc. ++ bEndpointAddress)); + } + } + +- if (!(pAd->BulkInEpAddr && pAd->BulkOutEpAddr[0])) +- { +- printk("%s: Could not find both bulk-in and bulk-out endpoints\n", __FUNCTION__); ++ if (!(pAd->BulkInEpAddr && pAd->BulkOutEpAddr[0])) { ++ printk ++ ("%s: Could not find both bulk-in and bulk-out endpoints\n", ++ __FUNCTION__); + return FALSE; + } + +@@ -292,10 +296,8 @@ static BOOLEAN USBDevConfigInit( + + } + +- +- +-static int rtusb_probe (struct usb_interface *intf, +- const struct usb_device_id *id) ++static int rtusb_probe(struct usb_interface *intf, ++ const struct usb_device_id *id) + { + RTMP_ADAPTER *pAd; + struct usb_device *dev; +@@ -311,12 +313,10 @@ static int rtusb_probe (struct usb_interface *intf, + return rv; + } + +- + static void rtusb_disconnect(struct usb_interface *intf) + { +- struct usb_device *dev = interface_to_usbdev(intf); +- PRTMP_ADAPTER pAd; +- ++ struct usb_device *dev = interface_to_usbdev(intf); ++ PRTMP_ADAPTER pAd; + + pAd = usb_get_intfdata(intf); + usb_set_intfdata(intf, NULL); +@@ -324,36 +324,31 @@ static void rtusb_disconnect(struct usb_interface *intf) + rt2870_disconnect(dev, pAd); + } + +- + struct usb_driver rtusb_driver = { +- .name="rt2870", +- .probe=rtusb_probe, +- .disconnect=rtusb_disconnect, +- .id_table=rtusb_usb_id, ++ .name = "rt2870", ++ .probe = rtusb_probe, ++ .disconnect = rtusb_disconnect, ++ .id_table = rtusb_usb_id, + + #ifdef CONFIG_PM +- suspend: rt2870_suspend, +- resume: rt2870_resume, ++suspend:rt2870_suspend, ++resume:rt2870_resume, + #endif +- }; ++}; + + #ifdef CONFIG_PM + +-VOID RT2870RejectPendingPackets( +- IN PRTMP_ADAPTER pAd) ++VOID RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { + // clear PS packets + // clear TxSw packets + } + +-static int rt2870_suspend( +- struct usb_interface *intf, +- pm_message_t state) ++static int rt2870_suspend(struct usb_interface *intf, pm_message_t state) + { + struct net_device *net_dev; + PRTMP_ADAPTER pAd = usb_get_intfdata(intf); + +- + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_suspend()\n")); + net_dev = pAd->net_dev; + netif_device_detach(net_dev); +@@ -367,13 +362,11 @@ static int rt2870_suspend( + return 0; + } + +-static int rt2870_resume( +- struct usb_interface *intf) ++static int rt2870_resume(struct usb_interface *intf) + { + struct net_device *net_dev; + PRTMP_ADAPTER pAd = usb_get_intfdata(intf); + +- + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_resume()\n")); + + pAd->PM_FlgSuspend = 0; +@@ -405,9 +398,6 @@ VOID __exit rtusb_exit(void) + module_init(rtusb_init); + module_exit(rtusb_exit); + +- +- +- + /*--------------------------------------------------------------------- */ + /* function declarations */ + /*--------------------------------------------------------------------- */ +@@ -426,35 +416,32 @@ Return Value: + Note: + ======================================================================== + */ +-INT MlmeThread( +- IN void *Context) ++INT MlmeThread(IN void *Context) + { + RTMP_ADAPTER *pAd; + RTMP_OS_TASK *pTask; + int status; + status = 0; + +- pTask = (RTMP_OS_TASK *)Context; +- pAd = (PRTMP_ADAPTER)pTask->priv; ++ pTask = (RTMP_OS_TASK *) Context; ++ pAd = (PRTMP_ADAPTER) pTask->priv; + + RtmpOSTaskCustomize(pTask); + +- while(!pTask->task_killed) +- { ++ while (!pTask->task_killed) { + #ifdef KTHREAD_SUPPORT + RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); + #else + RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); + + /* unlock the device pointers */ +- if (status != 0) +- { ++ if (status != 0) { + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + break; + } + #endif + +- /* lock the device pointers , need to check if required*/ ++ /* lock the device pointers , need to check if required */ + //down(&(pAd->usbdev_semaphore)); + + if (!pAd->PM_FlgSuspend) +@@ -475,16 +462,15 @@ INT MlmeThread( + * This is important in preemption kernels, which transfer the flow + * of execution immediately upon a complete(). + */ +- DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__FUNCTION__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("<---%s\n", __FUNCTION__)); + #ifndef KTHREAD_SUPPORT + pTask->taskPID = THREAD_PID_INIT_VALUE; +- complete_and_exit (&pTask->taskComplete, 0); ++ complete_and_exit(&pTask->taskComplete, 0); + #endif + return 0; + + } + +- + /* + ======================================================================== + Routine Description: +@@ -499,16 +485,15 @@ Return Value: + Note: + ======================================================================== + */ +-INT RTUSBCmdThread( +- IN void * Context) ++INT RTUSBCmdThread(IN void *Context) + { + RTMP_ADAPTER *pAd; + RTMP_OS_TASK *pTask; + int status; + status = 0; + +- pTask = (RTMP_OS_TASK *)Context; +- pAd = (PRTMP_ADAPTER)pTask->priv; ++ pTask = (RTMP_OS_TASK *) Context; ++ pAd = (PRTMP_ADAPTER) pTask->priv; + + RtmpOSTaskCustomize(pTask); + +@@ -516,16 +501,14 @@ INT RTUSBCmdThread( + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_RUNNING; + NdisReleaseSpinLock(&pAd->CmdQLock); + +- while (pAd && pAd->CmdQ.CmdQState == RTMP_TASK_STAT_RUNNING) +- { ++ while (pAd && pAd->CmdQ.CmdQState == RTMP_TASK_STAT_RUNNING) { + #ifdef KTHREAD_SUPPORT + RTMP_WAIT_EVENT_INTERRUPTIBLE(pAd, pTask); + #else + /* lock the device pointers */ + RTMP_SEM_EVENT_WAIT(&(pTask->taskSema), status); + +- if (status != 0) +- { ++ if (status != 0) { + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + break; + } +@@ -538,28 +521,25 @@ INT RTUSBCmdThread( + CMDHandler(pAd); + } + +- if (pAd && !pAd->PM_FlgSuspend) +- { // Clear the CmdQElements. +- CmdQElmt *pCmdQElmt = NULL; ++ if (pAd && !pAd->PM_FlgSuspend) { // Clear the CmdQElements. ++ CmdQElmt *pCmdQElmt = NULL; + + NdisAcquireSpinLock(&pAd->CmdQLock); + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; +- while(pAd->CmdQ.size) +- { ++ while (pAd->CmdQ.size) { + RTUSBDequeueCmd(&pAd->CmdQ, &pCmdQElmt); +- if (pCmdQElmt) +- { +- if (pCmdQElmt->CmdFromNdis == TRUE) +- { ++ if (pCmdQElmt) { ++ if (pCmdQElmt->CmdFromNdis == TRUE) { + if (pCmdQElmt->buffer != NULL) +- os_free_mem(pAd, pCmdQElmt->buffer); +- os_free_mem(pAd, (PUCHAR)pCmdQElmt); +- } +- else +- { +- if ((pCmdQElmt->buffer != NULL) && (pCmdQElmt->bufferlength != 0)) +- os_free_mem(pAd, pCmdQElmt->buffer); +- os_free_mem(pAd, (PUCHAR)pCmdQElmt); ++ os_free_mem(pAd, ++ pCmdQElmt->buffer); ++ os_free_mem(pAd, (PUCHAR) pCmdQElmt); ++ } else { ++ if ((pCmdQElmt->buffer != NULL) ++ && (pCmdQElmt->bufferlength != 0)) ++ os_free_mem(pAd, ++ pCmdQElmt->buffer); ++ os_free_mem(pAd, (PUCHAR) pCmdQElmt); + } + } + } +@@ -580,52 +560,54 @@ INT RTUSBCmdThread( + * This is important in preemption kernels, which transfer the flow + * of execution immediately upon a complete(). + */ +- DBGPRINT(RT_DEBUG_TRACE,( "<---RTUSBCmdThread\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("<---RTUSBCmdThread\n")); + + #ifndef KTHREAD_SUPPORT + pTask->taskPID = THREAD_PID_INIT_VALUE; +- complete_and_exit (&pTask->taskComplete, 0); ++ complete_and_exit(&pTask->taskComplete, 0); + #endif + return 0; + + } + +- +-VOID RTUSBWatchDog(IN RTMP_ADAPTER *pAd) ++VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + { +- PHT_TX_CONTEXT pHTTXContext; +- int idx; +- ULONG irqFlags; +- PURB pUrb; +- BOOLEAN needDumpSeq = FALSE; +- UINT32 MACValue; +- UINT32 TxRxQ_Pcnt; ++ PHT_TX_CONTEXT pHTTXContext; ++ int idx; ++ ULONG irqFlags; ++ PURB pUrb; ++ BOOLEAN needDumpSeq = FALSE; ++ UINT32 MACValue; ++ UINT32 TxRxQ_Pcnt; + + idx = 0; + RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- if ((MACValue & 0xff) !=0 ) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TX QUEUE 0 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", MACValue)); ++ if ((MACValue & 0xff) != 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("TX QUEUE 0 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", ++ MACValue)); + RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40012); +- while((MACValue &0xff) != 0 && (idx++ < 10)) +- { +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +- RTMPusecDelay(1); ++ while ((MACValue & 0xff) != 0 && (idx++ < 10)) { ++ RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); ++ RTMPusecDelay(1); + } + RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40006); + } + +- if (pAd->watchDogRxOverFlowCnt >= 2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Rx Bulk-In hanged! Cancel the pending Rx bulks request!\n")); +- if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_BULKIN_RESET | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Call CMDTHREAD_RESET_BULK_IN to cancel the pending Rx Bulk!\n")); ++ if (pAd->watchDogRxOverFlowCnt >= 2) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Maybe the Rx Bulk-In hanged! Cancel the pending Rx bulks request!\n")); ++ if ((!RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_BULKIN_RESET | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Call CMDTHREAD_RESET_BULK_IN to cancel the pending Rx Bulk!\n")); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); +- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0); ++ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, ++ NULL, 0); + needDumpSeq = TRUE; + } + pAd->watchDogRxOverFlowCnt = 0; +@@ -633,126 +615,139 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER *pAd) + + RTUSBReadMACRegister(pAd, 0x438, &TxRxQ_Pcnt); + +- for (idx = 0; idx < NUM_OF_TX_RING; idx++) +- { ++ for (idx = 0; idx < NUM_OF_TX_RING; idx++) { + pUrb = NULL; + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[idx], irqFlags); +- if ((pAd->BulkOutPending[idx] == TRUE) && pAd->watchDogTxPendingCnt) +- { +- INT actual_length=0,transfer_buffer_length=0; +- BOOLEAN isDataPacket=FALSE; ++ if ((pAd->BulkOutPending[idx] == TRUE) ++ && pAd->watchDogTxPendingCnt) { ++ INT actual_length = 0, transfer_buffer_length = 0; ++ BOOLEAN isDataPacket = FALSE; + pAd->watchDogTxPendingCnt[idx]++; + + if ((pAd->watchDogTxPendingCnt[idx] > 2) && +- (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_BULKOUT_RESET))) +- ) +- { ++ (!RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST | ++ fRTMP_ADAPTER_BULKOUT_RESET))) ++ ) { + // FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! +- pHTTXContext = (PHT_TX_CONTEXT)(&pAd->TxContext[idx]); +- if (pHTTXContext->IRPPending) +- { // Check TxContext. ++ pHTTXContext = ++ (PHT_TX_CONTEXT) (&pAd->TxContext[idx]); ++ if (pHTTXContext->IRPPending) { // Check TxContext. + pUrb = pHTTXContext->pUrb; + +- actual_length=pUrb->actual_length; +- transfer_buffer_length=pUrb->transfer_buffer_length; +- isDataPacket=TRUE; +- } +- else if (idx == MGMTPIPEIDX) +- { +- PTX_CONTEXT pMLMEContext, pNULLContext, pPsPollContext; ++ actual_length = pUrb->actual_length; ++ transfer_buffer_length = ++ pUrb->transfer_buffer_length; ++ isDataPacket = TRUE; ++ } else if (idx == MGMTPIPEIDX) { ++ PTX_CONTEXT pMLMEContext, pNULLContext, ++ pPsPollContext; + + //Check MgmtContext. +- pMLMEContext = (PTX_CONTEXT)(pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa); +- pPsPollContext = (PTX_CONTEXT)(&pAd->PsPollContext); +- pNULLContext = (PTX_CONTEXT)(&pAd->NullContext); +- +- if (pMLMEContext->IRPPending) +- { +- ASSERT(pMLMEContext->IRPPending); ++ pMLMEContext = ++ (PTX_CONTEXT) (pAd->MgmtRing. ++ Cell[pAd->MgmtRing. ++ TxDmaIdx]. ++ AllocVa); ++ pPsPollContext = ++ (PTX_CONTEXT) (&pAd->PsPollContext); ++ pNULLContext = ++ (PTX_CONTEXT) (&pAd->NullContext); ++ ++ if (pMLMEContext->IRPPending) { ++ ASSERT(pMLMEContext-> ++ IRPPending); + pUrb = pMLMEContext->pUrb; +- } +- else if (pNULLContext->IRPPending) +- { +- ASSERT(pNULLContext->IRPPending); ++ } else if (pNULLContext->IRPPending) { ++ ASSERT(pNULLContext-> ++ IRPPending); + pUrb = pNULLContext->pUrb; +- } +- else if (pPsPollContext->IRPPending) +- { +- ASSERT(pPsPollContext->IRPPending); ++ } else if (pPsPollContext->IRPPending) { ++ ASSERT(pPsPollContext-> ++ IRPPending); + pUrb = pPsPollContext->pUrb; + } + } + +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], ++ irqFlags); + + printk(KERN_INFO "%d:%lu LTL=%d , TL=%d L:%d\n", + idx, pAd->watchDogTxPendingCnt[idx], + pAd->TransferedLength[idx], + actual_length, transfer_buffer_length); + +- if (pUrb) +- { ++ if (pUrb) { + if ((isDataPacket +- && pAd->TransferedLength[idx]==actual_length +- && pAd->TransferedLength[idx]watchDogTxPendingCnt[idx]>3) +- || isDataPacket==FALSE || pAd->watchDogTxPendingCnt[idx]>6) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Maybe the Tx Bulk-Out hanged! Cancel the pending Tx bulks request of idx(%d)!\n", idx)); +- DBGPRINT(RT_DEBUG_TRACE, ("Unlink the pending URB!\n")); +- // unlink it now +- RTUSB_UNLINK_URB(pUrb); +- // Sleep 200 microseconds to give cancellation time to work ++ && pAd->TransferedLength[idx] == ++ actual_length ++ && pAd->TransferedLength[idx] < ++ transfer_buffer_length ++ && actual_length != 0 ++// && TxRxQ_Pcnt==0 ++ && pAd->watchDogTxPendingCnt[idx] > ++ 3) ++ || isDataPacket == FALSE ++ || pAd->watchDogTxPendingCnt[idx] > ++ 6) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Maybe the Tx Bulk-Out hanged! Cancel the pending Tx bulks request of idx(%d)!\n", ++ idx)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Unlink the pending URB!\n")); ++ // unlink it now ++ RTUSB_UNLINK_URB(pUrb); ++ // Sleep 200 microseconds to give cancellation time to work + //RTMPusecDelay(200); +- needDumpSeq = TRUE; ++ needDumpSeq = TRUE; + } ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Unkonw bulkOut URB maybe hanged!!!!!!!!!!!!\n")); + } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Unkonw bulkOut URB maybe hanged!!!!!!!!!!!!\n")); +- } +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); ++ } else { ++ RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], ++ irqFlags); + } + +- if (isDataPacket==TRUE) +- pAd->TransferedLength[idx]=actual_length; +- } +- else +- { ++ if (isDataPacket == TRUE) ++ pAd->TransferedLength[idx] = actual_length; ++ } else { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], irqFlags); + } + } + + // For Sigma debug, dump the ba_reordering sequence. +- if((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) +- { +- USHORT Idx; +- PBA_REC_ENTRY pBAEntry = NULL; +- UCHAR count = 0; ++ if ((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) { ++ USHORT Idx; ++ PBA_REC_ENTRY pBAEntry = NULL; ++ UCHAR count = 0; + struct reordering_mpdu *mpdu_blk; + + Idx = pAd->MacTab.Content[BSSID_WCID].BARecWcidArray[0]; + + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- if((pBAEntry->list.qlen > 0) && (pBAEntry->list.next != NULL)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("NICUpdateRawCounters():The Queueing pkt in reordering buffer:\n")); ++ if ((pBAEntry->list.qlen > 0) && (pBAEntry->list.next != NULL)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NICUpdateRawCounters():The Queueing pkt in reordering buffer:\n")); + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + mpdu_blk = pBAEntry->list.next; +- while (mpdu_blk) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("\t%d:Seq-%d, bAMSDU-%d!\n", count, mpdu_blk->Sequence, mpdu_blk->bAMSDU)); ++ while (mpdu_blk) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\t%d:Seq-%d, bAMSDU-%d!\n", count, ++ mpdu_blk->Sequence, ++ mpdu_blk->bAMSDU)); + mpdu_blk = mpdu_blk->next; + count++; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("\npBAEntry->LastIndSeq=%d!\n", pBAEntry->LastIndSeq)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\npBAEntry->LastIndSeq=%d!\n", ++ pBAEntry->LastIndSeq)); + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } + } +@@ -775,10 +770,10 @@ Note: + */ + static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) + { +- DBGPRINT(RT_DEBUG_ERROR, ("rtusb_disconnect: unregister usbnet usb-%s-%s\n", +- dev->bus->bus_name, dev->devpath)); +- if (!pAd) +- { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("rtusb_disconnect: unregister usbnet usb-%s-%s\n", ++ dev->bus->bus_name, dev->devpath)); ++ if (!pAd) { + usb_put_dev(dev); + printk("rtusb_disconnect: pAd == NULL!\n"); + return; +@@ -788,7 +783,6 @@ static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) + // for debug, wait to show some messages to /proc system + udelay(1); + +- + RtmpPhyNetDevExit(pAd, pAd->net_dev); + + // FIXME: Shall we need following delay and flush the schedule?? +@@ -808,43 +802,38 @@ static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_ERROR, (" RTUSB disconnect successfully\n")); + } + +- +-static int __devinit rt2870_probe( +- IN struct usb_interface *intf, +- IN struct usb_device *usb_dev, +- IN const struct usb_device_id *dev_id, +- IN RTMP_ADAPTER **ppAd) ++static int __devinit rt2870_probe(IN struct usb_interface *intf, ++ IN struct usb_device *usb_dev, ++ IN const struct usb_device_id *dev_id, ++ IN RTMP_ADAPTER ** ppAd) + { +- struct net_device *net_dev = NULL; +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) NULL; +- INT status, rv; +- PVOID handle; +- RTMP_OS_NETDEV_OP_HOOK netDevHook; +- ++ struct net_device *net_dev = NULL; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) NULL; ++ INT status, rv; ++ PVOID handle; ++ RTMP_OS_NETDEV_OP_HOOK netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n")); + + // Check chipset vendor/product ID + //if (RT28XXChipsetCheck(_dev_p) == FALSE) +- // goto err_out; ++ // goto err_out; + + //RtmpDevInit============================================= + // Allocate RTMP_ADAPTER adapter structure + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); +- if (handle == NULL) +- { +- printk("rt2870_probe(): Allocate memory for os handle failed!\n"); ++ if (handle == NULL) { ++ printk ++ ("rt2870_probe(): Allocate memory for os handle failed!\n"); + return -ENOMEM; + } +- ((POS_COOKIE)handle)->pUsb_Dev = usb_dev; ++ ((POS_COOKIE) handle)->pUsb_Dev = usb_dev; + + rv = RTMPAllocAdapterBlock(handle, &pAd); +- if (rv != NDIS_STATUS_SUCCESS) +- { ++ if (rv != NDIS_STATUS_SUCCESS) { + kfree(handle); + goto err_out; + } +- + //USBDevInit============================================== + if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE) + goto err_out_free_radev; +@@ -858,12 +847,12 @@ static int __devinit rt2870_probe( + + // Here are the net_device structure with usb specific parameters. + /* for supporting Network Manager. +- * Set the sysfs physical device reference for the network logical device if set prior to registration will +- * cause a symlink during initialization. ++ * Set the sysfs physical device reference for the network logical device if set prior to registration will ++ * cause a symlink during initialization. + */ + SET_NETDEV_DEV(net_dev, &(usb_dev->dev)); + +- pAd->StaCfg.OriDevType = net_dev->type; ++ pAd->StaCfg.OriDevType = net_dev->type; + + //All done, it's time to register the net device to linux kernel. + // Register this device +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index 82b23ae..269dedc 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -39,35 +39,32 @@ + + #ifdef RTMP_MAC_USB + +- + #include "../rt_config.h" + // Match total 6 bulkout endpoint to corresponding queue. +-UCHAR EpToQueue[6]={FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT}; ++UCHAR EpToQueue[6] = ++ { FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT }; + + //static BOOLEAN SingleBulkOut = FALSE; + +-void RTUSB_FILL_BULK_URB (struct urb *pUrb, +- struct usb_device *pUsb_Dev, +- unsigned int bulkpipe, +- void *pTransferBuf, +- int BufSize, +- usb_complete_t Complete, +- void *pContext) ++void RTUSB_FILL_BULK_URB(struct urb *pUrb, ++ struct usb_device *pUsb_Dev, ++ unsigned int bulkpipe, ++ void *pTransferBuf, ++ int BufSize, usb_complete_t Complete, void *pContext) + { + +- usb_fill_bulk_urb(pUrb, pUsb_Dev, bulkpipe, pTransferBuf, BufSize, (usb_complete_t)Complete, pContext); ++ usb_fill_bulk_urb(pUrb, pUsb_Dev, bulkpipe, pTransferBuf, BufSize, ++ (usb_complete_t) Complete, pContext); + + } + +-VOID RTUSBInitTxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PTX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN usb_complete_t Func) ++VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, ++ IN PTX_CONTEXT pTxContext, ++ IN UCHAR BulkOutPipeId, IN usb_complete_t Func) + { +- PURB pUrb; +- PUCHAR pSrc = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ PURB pUrb; ++ PUCHAR pSrc = NULL; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; + ASSERT(pUrb); +@@ -75,44 +72,38 @@ VOID RTUSBInitTxDesc( + // Store BulkOut PipeId + pTxContext->BulkOutPipeId = BulkOutPipeId; + +- if (pTxContext->bAggregatible) +- { ++ if (pTxContext->bAggregatible) { + pSrc = &pTxContext->TransferBuffer->Aggregation[2]; +- } +- else +- { +- pSrc = (PUCHAR) pTxContext->TransferBuffer->field.WirelessPacket; ++ } else { ++ pSrc = ++ (PUCHAR) pTxContext->TransferBuffer->field.WirelessPacket; + } + +- + //Initialize a tx bulk urb + RTUSB_FILL_BULK_URB(pUrb, +- pObj->pUsb_Dev, +- usb_sndbulkpipe(pObj->pUsb_Dev, pAd->BulkOutEpAddr[BulkOutPipeId]), +- pSrc, +- pTxContext->BulkOutSize, +- Func, +- pTxContext); ++ pObj->pUsb_Dev, ++ usb_sndbulkpipe(pObj->pUsb_Dev, ++ pAd->BulkOutEpAddr[BulkOutPipeId]), ++ pSrc, pTxContext->BulkOutSize, Func, pTxContext); + + if (pTxContext->bAggregatible) +- pUrb->transfer_dma = (pTxContext->data_dma + TX_BUFFER_NORMSIZE + 2); ++ pUrb->transfer_dma = ++ (pTxContext->data_dma + TX_BUFFER_NORMSIZE + 2); + else +- pUrb->transfer_dma = pTxContext->data_dma; ++ pUrb->transfer_dma = pTxContext->data_dma; + + pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + + } + +-VOID RTUSBInitHTTxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PHT_TX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN ULONG BulkOutSize, +- IN usb_complete_t Func) ++VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, ++ IN PHT_TX_CONTEXT pTxContext, ++ IN UCHAR BulkOutPipeId, ++ IN ULONG BulkOutSize, IN usb_complete_t Func) + { +- PURB pUrb; +- PUCHAR pSrc = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ PURB pUrb; ++ PUCHAR pSrc = NULL; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; + ASSERT(pUrb); +@@ -120,53 +111,50 @@ VOID RTUSBInitHTTxDesc( + // Store BulkOut PipeId + pTxContext->BulkOutPipeId = BulkOutPipeId; + +- pSrc = &pTxContext->TransferBuffer->field.WirelessPacket[pTxContext->NextBulkOutPosition]; +- ++ pSrc = ++ &pTxContext->TransferBuffer->field.WirelessPacket[pTxContext-> ++ NextBulkOutPosition]; + + //Initialize a tx bulk urb + RTUSB_FILL_BULK_URB(pUrb, +- pObj->pUsb_Dev, +- usb_sndbulkpipe(pObj->pUsb_Dev, pAd->BulkOutEpAddr[BulkOutPipeId]), +- pSrc, +- BulkOutSize, +- Func, +- pTxContext); +- +- pUrb->transfer_dma = (pTxContext->data_dma + pTxContext->NextBulkOutPosition); ++ pObj->pUsb_Dev, ++ usb_sndbulkpipe(pObj->pUsb_Dev, ++ pAd->BulkOutEpAddr[BulkOutPipeId]), ++ pSrc, BulkOutSize, Func, pTxContext); ++ ++ pUrb->transfer_dma = ++ (pTxContext->data_dma + pTxContext->NextBulkOutPosition); + pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + + } + +-VOID RTUSBInitRxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PRX_CONTEXT pRxContext) ++VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + { +- PURB pUrb; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- ULONG RX_bulk_size; +- ++ PURB pUrb; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ ULONG RX_bulk_size; + + pUrb = pRxContext->pUrb; + ASSERT(pUrb); + +- if ( pAd->BulkInMaxPacketSize == 64) ++ if (pAd->BulkInMaxPacketSize == 64) + RX_bulk_size = 4096; + else + RX_bulk_size = MAX_RXBULK_SIZE; + + //Initialize a rx bulk urb + RTUSB_FILL_BULK_URB(pUrb, +- pObj->pUsb_Dev, +- usb_rcvbulkpipe(pObj->pUsb_Dev, pAd->BulkInEpAddr), +- &(pRxContext->TransferBuffer[pAd->NextRxBulkInPosition]), +- RX_bulk_size - (pAd->NextRxBulkInPosition), +- (usb_complete_t)RTUSBBulkRxComplete, +- (void *)pRxContext); +- +- pUrb->transfer_dma = pRxContext->data_dma + pAd->NextRxBulkInPosition; ++ pObj->pUsb_Dev, ++ usb_rcvbulkpipe(pObj->pUsb_Dev, pAd->BulkInEpAddr), ++ &(pRxContext-> ++ TransferBuffer[pAd->NextRxBulkInPosition]), ++ RX_bulk_size - (pAd->NextRxBulkInPosition), ++ (usb_complete_t) RTUSBBulkRxComplete, ++ (void *)pRxContext); ++ ++ pUrb->transfer_dma = pRxContext->data_dma + pAd->NextRxBulkInPosition; + pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; + +- + } + + /* +@@ -191,179 +179,215 @@ VOID RTUSBInitRxDesc( + if(1 /*!(in_interrupt() & 0xffff0000)*/) \ + RTMP_IRQ_UNLOCK((pLock), IrqFlags); + +- +-VOID RTUSBBulkOutDataPacket( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UCHAR Index) ++VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BulkOutPipeId, IN UCHAR Index) + { + +- PHT_TX_CONTEXT pHTTXContext; +- PURB pUrb; +- int ret = 0; +- PTXINFO_STRUC pTxInfo, pLastTxInfo = NULL; +- PTXWI_STRUC pTxWI; +- ULONG TmpBulkEndPos, ThisBulkSize; +- unsigned long IrqFlags = 0, IrqFlags2 = 0; +- PUCHAR pWirelessPkt, pAppendant; +- BOOLEAN bTxQLastRound = FALSE; +- UCHAR allzero[4]= {0x0,0x0,0x0,0x0}; ++ PHT_TX_CONTEXT pHTTXContext; ++ PURB pUrb; ++ int ret = 0; ++ PTXINFO_STRUC pTxInfo, pLastTxInfo = NULL; ++ PTXWI_STRUC pTxWI; ++ ULONG TmpBulkEndPos, ThisBulkSize; ++ unsigned long IrqFlags = 0, IrqFlags2 = 0; ++ PUCHAR pWirelessPkt, pAppendant; ++ BOOLEAN bTxQLastRound = FALSE; ++ UCHAR allzero[4] = { 0x0, 0x0, 0x0, 0x0 }; + + BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); +- if ((pAd->BulkOutPending[BulkOutPipeId] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) +- { ++ if ((pAd->BulkOutPending[BulkOutPipeId] == TRUE) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) { + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + return; + } + pAd->BulkOutPending[BulkOutPipeId] = TRUE; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- { ++ ) { + pAd->BulkOutPending[BulkOutPipeId] = FALSE; + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + return; + } + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + +- + pHTTXContext = &(pAd->TxContext[BulkOutPipeId]); + + BULK_OUT_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2); +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) +- || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition)) +- { +- BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2); ++ if ((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition) ++ || ((pHTTXContext->ENextBulkOutPosition - 8) == ++ pHTTXContext->CurWritePosition)) { ++ BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], ++ IrqFlags2); + + BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; + + // Clear Data flag +- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)); +- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); ++ RTUSB_CLEAR_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_FRAG << ++ BulkOutPipeId)); ++ RTUSB_CLEAR_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << ++ BulkOutPipeId)); + + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + return; + } +- + // Clear Data flag +- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)); +- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); ++ RTUSB_CLEAR_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)); ++ RTUSB_CLEAR_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); + + //DBGPRINT(RT_DEBUG_TRACE,("BulkOut-B:I=0x%lx, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", in_interrupt(), +- // pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, +- // pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ // pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, ++ // pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); + pHTTXContext->NextBulkOutPosition = pHTTXContext->ENextBulkOutPosition; + ThisBulkSize = 0; + TmpBulkEndPos = pHTTXContext->NextBulkOutPosition; + pWirelessPkt = &pHTTXContext->TransferBuffer->field.WirelessPacket[0]; + +- if ((pHTTXContext->bCopySavePad == TRUE)) +- { +- if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero,4)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR,("e1, allzero : %x %x %x %x %x %x %x %x \n", +- pHTTXContext->SavedPad[0], pHTTXContext->SavedPad[1], pHTTXContext->SavedPad[2],pHTTXContext->SavedPad[3] +- ,pHTTXContext->SavedPad[4], pHTTXContext->SavedPad[5], pHTTXContext->SavedPad[6],pHTTXContext->SavedPad[7])); ++ if ((pHTTXContext->bCopySavePad == TRUE)) { ++ if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero, 4)) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("e1, allzero : %x %x %x %x %x %x %x %x \n", ++ pHTTXContext->SavedPad[0], ++ pHTTXContext->SavedPad[1], ++ pHTTXContext->SavedPad[2], ++ pHTTXContext->SavedPad[3] ++ , pHTTXContext->SavedPad[4], ++ pHTTXContext->SavedPad[5], ++ pHTTXContext->SavedPad[6], ++ pHTTXContext->SavedPad[7])); + } +- NdisMoveMemory(&pWirelessPkt[TmpBulkEndPos], pHTTXContext->SavedPad, 8); ++ NdisMoveMemory(&pWirelessPkt[TmpBulkEndPos], ++ pHTTXContext->SavedPad, 8); + pHTTXContext->bCopySavePad = FALSE; + if (pAd->bForcePrintTX == TRUE) +- DBGPRINT(RT_DEBUG_TRACE,("RTUSBBulkOutDataPacket --> COPY PAD. CurWrite = %ld, NextBulk = %ld. ENextBulk = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBBulkOutDataPacket --> COPY PAD. CurWrite = %ld, NextBulk = %ld. ENextBulk = %ld.\n", ++ pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition, ++ pHTTXContext->ENextBulkOutPosition)); + } + +- do +- { +- pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[TmpBulkEndPos]; +- pTxWI = (PTXWI_STRUC)&pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; ++ do { ++ pTxInfo = (PTXINFO_STRUC) & pWirelessPkt[TmpBulkEndPos]; ++ pTxWI = ++ (PTXWI_STRUC) & pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; + + if (pAd->bForcePrintTX == TRUE) +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkOutDataPacket AMPDU = %d.\n", pTxWI->AMPDU)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBBulkOutDataPacket AMPDU = %d.\n", ++ pTxWI->AMPDU)); + + // add by Iverson, limit BulkOut size to 4k to pass WMM b mode 2T1R test items + //if ((ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) +- if ((ThisBulkSize != 0) && (pTxWI->PHYMODE == MODE_CCK)) +- { +- if (((ThisBulkSize&0xffff8000) != 0) || ((ThisBulkSize&0x1000) == 0x1000)) +- { ++ if ((ThisBulkSize != 0) && (pTxWI->PHYMODE == MODE_CCK)) { ++ if (((ThisBulkSize & 0xffff8000) != 0) ++ || ((ThisBulkSize & 0x1000) == 0x1000)) { + // Limit BulkOut size to about 4k bytes. +- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; ++ pHTTXContext->ENextBulkOutPosition = ++ TmpBulkEndPos; + break; +- } +- else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize&0xfffff800) != 0) ) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0))*/) +- { ++ } else ++ if (((pAd->BulkOutMaxPacketSize < 512) ++ && ((ThisBulkSize & 0xfffff800) != ++ 0)) ++ /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ++ ) { + // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. + // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. +- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; ++ pHTTXContext->ENextBulkOutPosition = ++ TmpBulkEndPos; + break; + } + } + // end Iverson +- else +- { +- if (((ThisBulkSize&0xffff8000) != 0) || ((ThisBulkSize&0x6000) == 0x6000)) +- { // Limit BulkOut size to about 24k bytes. +- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; ++ else { ++ if (((ThisBulkSize & 0xffff8000) != 0) || ((ThisBulkSize & 0x6000) == 0x6000)) { // Limit BulkOut size to about 24k bytes. ++ pHTTXContext->ENextBulkOutPosition = ++ TmpBulkEndPos; + break; +- } +- else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize&0xfffff800) != 0) ) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0))*/) +- { // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. ++ } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ) { // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. + // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. +- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; ++ pHTTXContext->ENextBulkOutPosition = ++ TmpBulkEndPos; + break; + } + } + +- if (TmpBulkEndPos == pHTTXContext->CurWritePosition) +- { ++ if (TmpBulkEndPos == pHTTXContext->CurWritePosition) { + pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; + break; + } + +- if (pTxInfo->QSEL != FIFO_EDCA) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", +- __FUNCTION__, pTxInfo->QSEL)); +- DBGPRINT(RT_DEBUG_ERROR, ("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", +- pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, +- pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); +- hex_dump("Wrong QSel Pkt:", (PUCHAR)&pWirelessPkt[TmpBulkEndPos], (pHTTXContext->CurWritePosition - pHTTXContext->NextBulkOutPosition)); ++ if (pTxInfo->QSEL != FIFO_EDCA) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", ++ __FUNCTION__, pTxInfo->QSEL)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", ++ pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition, ++ pHTTXContext->ENextBulkOutPosition, ++ pHTTXContext->bCopySavePad)); ++ hex_dump("Wrong QSel Pkt:", ++ (PUCHAR) & pWirelessPkt[TmpBulkEndPos], ++ (pHTTXContext->CurWritePosition - ++ pHTTXContext->NextBulkOutPosition)); + } + +- if (pTxInfo->USBDMATxPktLen <= 8) +- { +- BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2); +- DBGPRINT(RT_DEBUG_ERROR /*RT_DEBUG_TRACE*/,("e2, USBDMATxPktLen==0, Size=%ld, bCSPad=%d, CWPos=%ld, NBPos=%ld, CWRPos=%ld!\n", +- pHTTXContext->BulkOutSize, pHTTXContext->bCopySavePad, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->CurWriteRealPos)); ++ if (pTxInfo->USBDMATxPktLen <= 8) { ++ BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], ++ IrqFlags2); ++ DBGPRINT(RT_DEBUG_ERROR /*RT_DEBUG_TRACE */ , ++ ("e2, USBDMATxPktLen==0, Size=%ld, bCSPad=%d, CWPos=%ld, NBPos=%ld, CWRPos=%ld!\n", ++ pHTTXContext->BulkOutSize, ++ pHTTXContext->bCopySavePad, ++ pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition, ++ pHTTXContext->CurWriteRealPos)); + { +- DBGPRINT_RAW(RT_DEBUG_ERROR /*RT_DEBUG_TRACE*/,("%x %x %x %x %x %x %x %x \n", +- pHTTXContext->SavedPad[0], pHTTXContext->SavedPad[1], pHTTXContext->SavedPad[2],pHTTXContext->SavedPad[3] +- ,pHTTXContext->SavedPad[4], pHTTXContext->SavedPad[5], pHTTXContext->SavedPad[6],pHTTXContext->SavedPad[7])); ++ DBGPRINT_RAW(RT_DEBUG_ERROR /*RT_DEBUG_TRACE */ ++ , ++ ("%x %x %x %x %x %x %x %x \n", ++ pHTTXContext->SavedPad[0], ++ pHTTXContext->SavedPad[1], ++ pHTTXContext->SavedPad[2], ++ pHTTXContext->SavedPad[3] ++ , pHTTXContext->SavedPad[4], ++ pHTTXContext->SavedPad[5], ++ pHTTXContext->SavedPad[6], ++ pHTTXContext->SavedPad[7])); + } + pAd->bForcePrintTX = TRUE; +- BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); ++ BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], ++ IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; +- BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); ++ BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], ++ IrqFlags); + //DBGPRINT(RT_DEBUG_LOUD,("Out:pTxInfo->USBDMATxPktLen=%d!\n", pTxInfo->USBDMATxPktLen)); + return; + } +- +- // Increase Total transmit byte counter +- pAd->RalinkCounters.OneSecTransmittedByteCount += pTxWI->MPDUtotalByteCount; +- pAd->RalinkCounters.TransmittedByteCount += pTxWI->MPDUtotalByteCount; ++ // Increase Total transmit byte counter ++ pAd->RalinkCounters.OneSecTransmittedByteCount += ++ pTxWI->MPDUtotalByteCount; ++ pAd->RalinkCounters.TransmittedByteCount += ++ pTxWI->MPDUtotalByteCount; + + pLastTxInfo = pTxInfo; + + // Make sure we use EDCA QUEUE. + pTxInfo->QSEL = FIFO_EDCA; +- ThisBulkSize += (pTxInfo->USBDMATxPktLen+4); +- TmpBulkEndPos += (pTxInfo->USBDMATxPktLen+4); ++ ThisBulkSize += (pTxInfo->USBDMATxPktLen + 4); ++ TmpBulkEndPos += (pTxInfo->USBDMATxPktLen + 4); + + if (TmpBulkEndPos != pHTTXContext->CurWritePosition) + pTxInfo->USBDMANextVLD = 1; + +- if (pTxInfo->SwUseLastRound == 1) +- { ++ if (pTxInfo->SwUseLastRound == 1) { + if (pHTTXContext->CurWritePosition == 8) + pTxInfo->USBDMANextVLD = 0; + pTxInfo->SwUseLastRound = 0; +@@ -371,73 +395,90 @@ VOID RTUSBBulkOutDataPacket( + bTxQLastRound = TRUE; + pHTTXContext->ENextBulkOutPosition = 8; + +- + break; + } + +- +- }while (TRUE); ++ } while (TRUE); + + // adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. +- if (pLastTxInfo) +- { ++ if (pLastTxInfo) { + pLastTxInfo->USBDMANextVLD = 0; + } + + /* +- We need to copy SavedPad when following condition matched! +- 1. Not the last round of the TxQueue and +- 2. any match of following cases: +- (1). The End Position of this bulk out is reach to the Currenct Write position and +- the TxInfo and related header already write to the CurWritePosition. +- =>(ENextBulkOutPosition == CurWritePosition) && (CurWriteRealPos > CurWritePosition) +- +- (2). The EndPosition of the bulk out is not reach to the Current Write Position. +- =>(ENextBulkOutPosition != CurWritePosition) +- */ ++ We need to copy SavedPad when following condition matched! ++ 1. Not the last round of the TxQueue and ++ 2. any match of following cases: ++ (1). The End Position of this bulk out is reach to the Currenct Write position and ++ the TxInfo and related header already write to the CurWritePosition. ++ =>(ENextBulkOutPosition == CurWritePosition) && (CurWriteRealPos > CurWritePosition) ++ ++ (2). The EndPosition of the bulk out is not reach to the Current Write Position. ++ =>(ENextBulkOutPosition != CurWritePosition) ++ */ + if ((bTxQLastRound == FALSE) && +- (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) && (pHTTXContext->CurWriteRealPos > pHTTXContext->CurWritePosition)) || +- (pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition)) +- ) +- { +- NdisMoveMemory(pHTTXContext->SavedPad, &pWirelessPkt[pHTTXContext->ENextBulkOutPosition], 8); ++ (((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition) ++ && (pHTTXContext->CurWriteRealPos > ++ pHTTXContext->CurWritePosition)) ++ || (pHTTXContext->ENextBulkOutPosition != ++ pHTTXContext->CurWritePosition)) ++ ) { ++ NdisMoveMemory(pHTTXContext->SavedPad, ++ &pWirelessPkt[pHTTXContext-> ++ ENextBulkOutPosition], 8); + pHTTXContext->bCopySavePad = TRUE; +- if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero,4)) +- { +- PUCHAR pBuf = &pHTTXContext->SavedPad[0]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("WARNING-Zero-3:%02x%02x%02x%02x%02x%02x%02x%02x,CWPos=%ld, CWRPos=%ld, bCW=%d, NBPos=%ld, TBPos=%ld, TBSize=%ld\n", +- pBuf[0], pBuf[1], pBuf[2],pBuf[3],pBuf[4], pBuf[5], pBuf[6],pBuf[7], pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, +- pHTTXContext->bCurWriting, pHTTXContext->NextBulkOutPosition, TmpBulkEndPos, ThisBulkSize)); ++ if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero, 4)) { ++ PUCHAR pBuf = &pHTTXContext->SavedPad[0]; ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("WARNING-Zero-3:%02x%02x%02x%02x%02x%02x%02x%02x,CWPos=%ld, CWRPos=%ld, bCW=%d, NBPos=%ld, TBPos=%ld, TBSize=%ld\n", ++ pBuf[0], pBuf[1], pBuf[2], pBuf[3], ++ pBuf[4], pBuf[5], pBuf[6], pBuf[7], ++ pHTTXContext->CurWritePosition, ++ pHTTXContext->CurWriteRealPos, ++ pHTTXContext->bCurWriting, ++ pHTTXContext->NextBulkOutPosition, ++ TmpBulkEndPos, ThisBulkSize)); + + pBuf = &pWirelessPkt[pHTTXContext->CurWritePosition]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("\tCWPos=%02x%02x%02x%02x%02x%02x%02x%02x\n", pBuf[0], pBuf[1], pBuf[2],pBuf[3],pBuf[4], pBuf[5], pBuf[6],pBuf[7])); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("\tCWPos=%02x%02x%02x%02x%02x%02x%02x%02x\n", ++ pBuf[0], pBuf[1], pBuf[2], pBuf[3], ++ pBuf[4], pBuf[5], pBuf[6], pBuf[7])); + } + //DBGPRINT(RT_DEBUG_LOUD,("ENPos==CWPos=%ld, CWRPos=%ld, bCSPad=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->bCopySavePad)); + } + + if (pAd->bForcePrintTX == TRUE) +- DBGPRINT(RT_DEBUG_TRACE,("BulkOut-A:Size=%ld, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BulkOut-A:Size=%ld, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", ++ ThisBulkSize, pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition, ++ pHTTXContext->ENextBulkOutPosition, ++ pHTTXContext->bCopySavePad)); + //DBGPRINT(RT_DEBUG_LOUD,("BulkOut-A:Size=%ld, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, bLRound=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, bTxQLastRound)); + +- // USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize. ++ // USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize. + pAppendant = &pWirelessPkt[TmpBulkEndPos]; + NdisZeroMemory(pAppendant, 8); ++ ThisBulkSize += 4; ++ pHTTXContext->LastOne = TRUE; ++ if ((ThisBulkSize % pAd->BulkOutMaxPacketSize) == 0) + ThisBulkSize += 4; +- pHTTXContext->LastOne = TRUE; +- if ((ThisBulkSize % pAd->BulkOutMaxPacketSize) == 0) +- ThisBulkSize += 4; + pHTTXContext->BulkOutSize = ThisBulkSize; + + pAd->watchDogTxPendingCnt[BulkOutPipeId] = 1; + BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2); + + // Init Tx context descriptor +- RTUSBInitHTTxDesc(pAd, pHTTXContext, BulkOutPipeId, ThisBulkSize, (usb_complete_t)RTUSBBulkOutDataPacketComplete); ++ RTUSBInitHTTxDesc(pAd, pHTTXContext, BulkOutPipeId, ThisBulkSize, ++ (usb_complete_t) RTUSBBulkOutDataPacketComplete); + + pUrb = pHTTXContext->pUrb; +- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutDataPacket: Submit Tx URB failed %d\n", ret)); ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSBBulkOutDataPacket: Submit Tx URB failed %d\n", ++ ret)); + + BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; +@@ -454,47 +495,42 @@ VOID RTUSBBulkOutDataPacket( + + } + +- +-VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs) ++VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { +- PHT_TX_CONTEXT pHTTXContext; +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; +- UCHAR BulkOutPipeId; ++ PHT_TX_CONTEXT pHTTXContext; ++ PRTMP_ADAPTER pAd; ++ POS_COOKIE pObj; ++ UCHAR BulkOutPipeId; + +- +- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context; +- pAd = pHTTXContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pAd = pHTTXContext->pAd; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + // Store BulkOut PipeId +- BulkOutPipeId = pHTTXContext->BulkOutPipeId; ++ BulkOutPipeId = pHTTXContext->BulkOutPipeId; + pAd->BulkOutDataOneSecCount++; + +- switch (BulkOutPipeId) +- { +- case 0: +- pObj->ac0_dma_done_task.data = (unsigned long)pUrb; +- tasklet_hi_schedule(&pObj->ac0_dma_done_task); +- break; +- case 1: +- pObj->ac1_dma_done_task.data = (unsigned long)pUrb; +- tasklet_hi_schedule(&pObj->ac1_dma_done_task); +- break; +- case 2: +- pObj->ac2_dma_done_task.data = (unsigned long)pUrb; +- tasklet_hi_schedule(&pObj->ac2_dma_done_task); +- break; +- case 3: +- pObj->ac3_dma_done_task.data = (unsigned long)pUrb; +- tasklet_hi_schedule(&pObj->ac3_dma_done_task); +- break; ++ switch (BulkOutPipeId) { ++ case 0: ++ pObj->ac0_dma_done_task.data = (unsigned long)pUrb; ++ tasklet_hi_schedule(&pObj->ac0_dma_done_task); ++ break; ++ case 1: ++ pObj->ac1_dma_done_task.data = (unsigned long)pUrb; ++ tasklet_hi_schedule(&pObj->ac1_dma_done_task); ++ break; ++ case 2: ++ pObj->ac2_dma_done_task.data = (unsigned long)pUrb; ++ tasklet_hi_schedule(&pObj->ac2_dma_done_task); ++ break; ++ case 3: ++ pObj->ac3_dma_done_task.data = (unsigned long)pUrb; ++ tasklet_hi_schedule(&pObj->ac3_dma_done_task); ++ break; + } + +- + } + +- + /* + ======================================================================== + +@@ -508,17 +544,16 @@ VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutNullFrame( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + { +- PTX_CONTEXT pNullContext = &(pAd->NullContext); +- PURB pUrb; +- int ret = 0; +- unsigned long IrqFlags; ++ PTX_CONTEXT pNullContext = &(pAd->NullContext); ++ PURB pUrb; ++ int ret = 0; ++ unsigned long IrqFlags; + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); +- if ((pAd->BulkOutPending[0] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) +- { ++ if ((pAd->BulkOutPending[0] == TRUE) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + return; + } +@@ -528,42 +563,42 @@ VOID RTUSBBulkOutNullFrame( + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + + // Increase Total transmit byte counter +- pAd->RalinkCounters.TransmittedByteCount += pNullContext->BulkOutSize; +- ++ pAd->RalinkCounters.TransmittedByteCount += pNullContext->BulkOutSize; + + // Clear Null frame bulk flag + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); + + // Init Tx context descriptor +- RTUSBInitTxDesc(pAd, pNullContext, 0, (usb_complete_t)RTUSBBulkOutNullFrameComplete); ++ RTUSBInitTxDesc(pAd, pNullContext, 0, ++ (usb_complete_t) RTUSBBulkOutNullFrameComplete); + + pUrb = pNullContext->pUrb; +- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); + pAd->BulkOutPending[0] = FALSE; + pAd->watchDogTxPendingCnt[0] = 0; + pNullContext->IRPPending = FALSE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutNullFrame: Submit Tx URB failed %d\n", ret)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSBBulkOutNullFrame: Submit Tx URB failed %d\n", ++ ret)); + return; + } + + } + + // NULL frame use BulkOutPipeId = 0 +-VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs) ++VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pNullContext; +- NTSTATUS Status; +- POS_COOKIE pObj; +- ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pNullContext; ++ NTSTATUS Status; ++ POS_COOKIE pObj; + +- pNullContext = (PTX_CONTEXT)pUrb->context; +- pAd = pNullContext->pAd; +- Status = pUrb->status; ++ pNullContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pNullContext->pAd; ++ Status = pUrb->status; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + pObj->null_frame_complete_task.data = (unsigned long)pUrb; +@@ -583,23 +618,20 @@ VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutMLMEPacket( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index) ++VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) + { +- PTX_CONTEXT pMLMEContext; +- PURB pUrb; +- int ret = 0; +- unsigned long IrqFlags; ++ PTX_CONTEXT pMLMEContext; ++ PURB pUrb; ++ int ret = 0; ++ unsigned long IrqFlags; + +- pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; ++ pMLMEContext = ++ (PTX_CONTEXT) pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; + pUrb = pMLMEContext->pUrb; + + if ((pAd->MgmtRing.TxSwFreeIdx >= MGMT_RING_SIZE) || +- (pMLMEContext->InUse == FALSE) || +- (pMLMEContext->bWaitingBulkOut == FALSE)) +- { +- ++ (pMLMEContext->InUse == FALSE) || ++ (pMLMEContext->bWaitingBulkOut == FALSE)) { + + // Clear MLME bulk flag + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); +@@ -607,10 +639,9 @@ VOID RTUSBBulkOutMLMEPacket( + return; + } + +- + RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); +- if ((pAd->BulkOutPending[MGMTPIPEIDX] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) +- { ++ if ((pAd->BulkOutPending[MGMTPIPEIDX] == TRUE) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + return; + } +@@ -622,22 +653,24 @@ VOID RTUSBBulkOutMLMEPacket( + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + + // Increase Total transmit byte counter +- pAd->RalinkCounters.TransmittedByteCount += pMLMEContext->BulkOutSize; ++ pAd->RalinkCounters.TransmittedByteCount += pMLMEContext->BulkOutSize; + + // Clear MLME bulk flag + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); + + // Init Tx context descriptor +- RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX, (usb_complete_t)RTUSBBulkOutMLMEPacketComplete); ++ RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX, ++ (usb_complete_t) RTUSBBulkOutMLMEPacketComplete); + + //For mgmt urb buffer, because we use sk_buff, so we need to notify the USB controller do dma mapping. +- pUrb->transfer_dma = 0; ++ pUrb->transfer_dma = 0; + pUrb->transfer_flags &= (~URB_NO_TRANSFER_DMA_MAP); + + pUrb = pMLMEContext->pUrb; +- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutMLMEPacket: Submit MLME URB failed %d\n", ret)); ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSBBulkOutMLMEPacket: Submit MLME URB failed %d\n", ++ ret)); + RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + pAd->BulkOutPending[MGMTPIPEIDX] = FALSE; + pAd->watchDogTxPendingCnt[MGMTPIPEIDX] = 0; +@@ -647,32 +680,29 @@ VOID RTUSBBulkOutMLMEPacket( + + return; + } +- + //DBGPRINT_RAW(RT_DEBUG_INFO, ("<---RTUSBBulkOutMLMEPacket \n")); +-// printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); ++// printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); + } + +- +-VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs) ++VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { +- PTX_CONTEXT pMLMEContext; +- PRTMP_ADAPTER pAd; +- NTSTATUS Status; +- POS_COOKIE pObj; +- int index; ++ PTX_CONTEXT pMLMEContext; ++ PRTMP_ADAPTER pAd; ++ NTSTATUS Status; ++ POS_COOKIE pObj; ++ int index; + + //DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); +- pMLMEContext = (PTX_CONTEXT)pUrb->context; +- pAd = pMLMEContext->pAd; +- pObj = (POS_COOKIE)pAd->OS_Cookie; +- Status = pUrb->status; +- index = pMLMEContext->SelfIdx; ++ pMLMEContext = (PTX_CONTEXT) pUrb->context; ++ pAd = pMLMEContext->pAd; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; ++ Status = pUrb->status; ++ index = pMLMEContext->SelfIdx; + + pObj->mgmt_dma_done_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->mgmt_dma_done_task); + } + +- + /* + ======================================================================== + +@@ -686,17 +716,16 @@ VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutPsPoll( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + { +- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); +- PURB pUrb; +- int ret = 0; +- unsigned long IrqFlags; ++ PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); ++ PURB pUrb; ++ int ret = 0; ++ unsigned long IrqFlags; + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); +- if ((pAd->BulkOutPending[0] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) +- { ++ if ((pAd->BulkOutPending[0] == TRUE) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + return; + } +@@ -705,38 +734,38 @@ VOID RTUSBBulkOutPsPoll( + pPsPollContext->IRPPending = TRUE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + +- + // Clear PS-Poll bulk flag + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL); + + // Init Tx context descriptor +- RTUSBInitTxDesc(pAd, pPsPollContext, MGMTPIPEIDX, (usb_complete_t)RTUSBBulkOutPsPollComplete); ++ RTUSBInitTxDesc(pAd, pPsPollContext, MGMTPIPEIDX, ++ (usb_complete_t) RTUSBBulkOutPsPollComplete); + + pUrb = pPsPollContext->pUrb; +- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); + pAd->BulkOutPending[0] = FALSE; + pAd->watchDogTxPendingCnt[0] = 0; + pPsPollContext->IRPPending = FALSE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutPsPoll: Submit Tx URB failed %d\n", ret)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSBBulkOutPsPoll: Submit Tx URB failed %d\n", ++ ret)); + return; + } + + } + + // PS-Poll frame use BulkOutPipeId = 0 +-VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb,struct pt_regs *pt_regs) ++VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pPsPollContext; +- NTSTATUS Status; +- POS_COOKIE pObj; +- ++ PRTMP_ADAPTER pAd; ++ PTX_CONTEXT pPsPollContext; ++ NTSTATUS Status; ++ POS_COOKIE pObj; + +- pPsPollContext= (PTX_CONTEXT)pUrb->context; ++ pPsPollContext = (PTX_CONTEXT) pUrb->context; + pAd = pPsPollContext->pAd; + Status = pUrb->status; + +@@ -745,17 +774,17 @@ VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb,struct pt_regs *pt_regs) + tasklet_hi_schedule(&pObj->pspoll_frame_complete_task); + } + +-VOID DoBulkIn(IN RTMP_ADAPTER *pAd) ++VOID DoBulkIn(IN RTMP_ADAPTER * pAd) + { +- PRX_CONTEXT pRxContext; +- PURB pUrb; +- int ret = 0; +- unsigned long IrqFlags; ++ PRX_CONTEXT pRxContext; ++ PURB pUrb; ++ int ret = 0; ++ unsigned long IrqFlags; + + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext = &(pAd->RxContext[pAd->NextRxBulkInIndex]); +- if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE) || (pRxContext->InUse == TRUE)) +- { ++ if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE) ++ || (pRxContext->InUse == TRUE)) { + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + return; + } +@@ -770,8 +799,7 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd) + RTUSBInitRxDesc(pAd, pRxContext); + + pUrb = pRxContext->pUrb; +- if ((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { // fail ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { // fail + + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext->InUse = FALSE; +@@ -779,16 +807,14 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd) + pAd->PendingRx--; + pAd->BulkInReq--; + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkReceive: Submit Rx URB failed %d\n", ret)); +- } +- else +- { // success ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSBBulkReceive: Submit Rx URB failed %d\n", ret)); ++ } else { // success + ASSERT((pRxContext->InUse == pRxContext->IRPPending)); + //printk("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex); + } + } + +- + /* + ======================================================================== + +@@ -819,25 +845,22 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd) + fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_RESET_IN_PROGRESS | \ + fRTMP_ADAPTER_REMOVE_IN_PROGRESS) + +-VOID RTUSBBulkReceive( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + { +- PRX_CONTEXT pRxContext; +- unsigned long IrqFlags; +- ++ PRX_CONTEXT pRxContext; ++ unsigned long IrqFlags; + + /* sanity check */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_HANDLE_RX)) + return; + +- while(1) +- { ++ while (1) { + + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext = &(pAd->RxContext[pAd->NextRxBulkInReadIndex]); +- if (((pRxContext->InUse == FALSE) && (pRxContext->Readable == TRUE)) && +- (pRxContext->bRxHandling == FALSE)) +- { ++ if (((pRxContext->InUse == FALSE) ++ && (pRxContext->Readable == TRUE)) ++ && (pRxContext->bRxHandling == FALSE)) { + pRxContext->bRxHandling = TRUE; + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +@@ -851,12 +874,11 @@ VOID RTUSBBulkReceive( + pRxContext->bRxHandling = FALSE; + pAd->ReadPosition = 0; + pAd->TransferBufferLength = 0; +- INC_RING_INDEX(pAd->NextRxBulkInReadIndex, RX_RING_SIZE); ++ INC_RING_INDEX(pAd->NextRxBulkInReadIndex, ++ RX_RING_SIZE); + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +- } +- else +- { ++ } else { + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + break; + } +@@ -867,7 +889,6 @@ VOID RTUSBBulkReceive( + + } + +- + /* + ======================================================================== + +@@ -896,22 +917,19 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + // use a receive tasklet to handle received packets; + // or sometimes hardware IRQ will be disabled here, so we can not + // use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< +- PRX_CONTEXT pRxContext; +- PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; ++ PRX_CONTEXT pRxContext; ++ PRTMP_ADAPTER pAd; ++ POS_COOKIE pObj; + +- +- pRxContext = (PRX_CONTEXT)pUrb->context; +- pAd = pRxContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pRxContext = (PRX_CONTEXT) pUrb->context; ++ pAd = pRxContext->pAd; ++ pObj = (POS_COOKIE) pAd->OS_Cookie; + + pObj->rx_done_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->rx_done_task); + + } + +- +- + /* + ======================================================================== + +@@ -925,76 +943,78 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-VOID RTUSBKickBulkOut( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + { + // BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. +- if (!RTMP_TEST_FLAG(pAd ,fRTMP_ADAPTER_NEED_STOP_TX) +- ) +- { ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX) ++ ) { + // 2. PS-Poll frame is next +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) +- { ++ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) { + RTUSBBulkOutPsPoll(pAd); + } +- + // 5. Mlme frame is next + else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) || +- (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) +- { ++ (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) { + RTUSBBulkOutMLMEPacket(pAd, pAd->MgmtRing.TxDmaIdx); + } +- + // 6. Data frame normal is next +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL)) +- { +- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || +- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- )) +- { +- RTUSBBulkOutDataPacket(pAd, 0, pAd->NextBulkOutIndex[0]); ++ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL)) { ++ if (((!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ || ++ (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ )) { ++ RTUSBBulkOutDataPacket(pAd, 0, ++ pAd-> ++ NextBulkOutIndex[0]); + } + } +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_2)) +- { +- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || +- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- )) +- { +- RTUSBBulkOutDataPacket(pAd, 1, pAd->NextBulkOutIndex[1]); ++ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_2)) { ++ if (((!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ || ++ (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ )) { ++ RTUSBBulkOutDataPacket(pAd, 1, ++ pAd-> ++ NextBulkOutIndex[1]); + } + } +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_3)) +- { +- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || +- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- )) +- { +- RTUSBBulkOutDataPacket(pAd, 2, pAd->NextBulkOutIndex[2]); ++ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_3)) { ++ if (((!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ || ++ (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ )) { ++ RTUSBBulkOutDataPacket(pAd, 2, ++ pAd-> ++ NextBulkOutIndex[2]); + } + } +- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_4)) +- { +- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) || +- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- )) +- { +- RTUSBBulkOutDataPacket(pAd, 3, pAd->NextBulkOutIndex[3]); ++ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_4)) { ++ if (((!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ || ++ (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) ++ )) { ++ RTUSBBulkOutDataPacket(pAd, 3, ++ pAd-> ++ NextBulkOutIndex[3]); + } + } +- + // 7. Null frame is the last +- else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL)) +- { +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { ++ else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL)) { ++ if (!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { + RTUSBBulkOutNullFrame(pAd); + } + } +- + // 8. No data avaliable +- else +- { ++ else { + + } + } +@@ -1013,16 +1033,14 @@ VOID RTUSBKickBulkOut( + + ======================================================================== + */ +-VOID RTUSBCleanUpDataBulkOutQueue( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) + { +- UCHAR Idx; +- PHT_TX_CONTEXT pTxContext; ++ UCHAR Idx; ++ PHT_TX_CONTEXT pTxContext; + + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpDataBulkOutQueue\n")); + +- for (Idx = 0; Idx < 4; Idx++) +- { ++ for (Idx = 0; Idx < 4; Idx++) { + pTxContext = &pAd->TxContext[Idx]; + + pTxContext->CurWritePosition = pTxContext->NextBulkOutPosition; +@@ -1048,14 +1066,12 @@ VOID RTUSBCleanUpDataBulkOutQueue( + + ======================================================================== + */ +-VOID RTUSBCleanUpMLMEBulkOutQueue( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpMLMEBulkOutQueue\n")); + DBGPRINT(RT_DEBUG_TRACE, ("<---CleanUpMLMEBulkOutQueue\n")); + } + +- + /* + ======================================================================== + +@@ -1065,13 +1081,11 @@ VOID RTUSBCleanUpMLMEBulkOutQueue( + + Return Value: + +- + Note: + + ======================================================================== + */ +-VOID RTUSBCancelPendingIRPs( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) + { + RTUSBCancelPendingBulkInIRP(pAd); + RTUSBCancelPendingBulkOutIRP(pAd); +@@ -1090,18 +1104,15 @@ VOID RTUSBCancelPendingIRPs( + + ======================================================================== + */ +-VOID RTUSBCancelPendingBulkInIRP( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) + { +- PRX_CONTEXT pRxContext; +- UINT i; ++ PRX_CONTEXT pRxContext; ++ UINT i; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->RTUSBCancelPendingBulkInIRP\n")); +- for ( i = 0; i < (RX_RING_SIZE); i++) +- { ++ for (i = 0; i < (RX_RING_SIZE); i++) { + pRxContext = &(pAd->RxContext[i]); +- if(pRxContext->IRPPending == TRUE) +- { ++ if (pRxContext->IRPPending == TRUE) { + RTUSB_UNLINK_URB(pRxContext->pUrb); + pRxContext->IRPPending = FALSE; + pRxContext->InUse = FALSE; +@@ -1112,7 +1123,6 @@ VOID RTUSBCancelPendingBulkInIRP( + DBGPRINT_RAW(RT_DEBUG_TRACE, ("<---RTUSBCancelPendingBulkInIRP\n")); + } + +- + /* + ======================================================================== + +@@ -1126,34 +1136,30 @@ VOID RTUSBCancelPendingBulkInIRP( + + ======================================================================== + */ +-VOID RTUSBCancelPendingBulkOutIRP( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + { +- PHT_TX_CONTEXT pHTTXContext; +- PTX_CONTEXT pMLMEContext; +- PTX_CONTEXT pBeaconContext; +- PTX_CONTEXT pNullContext; +- PTX_CONTEXT pPsPollContext; +- PTX_CONTEXT pRTSContext; +- UINT i, Idx; +-// unsigned int IrqFlags; +-// NDIS_SPIN_LOCK *pLock; +-// BOOLEAN *pPending; +- +- +-// pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; +-// pPending = &pAd->BulkOutPending[MGMTPIPEIDX]; +- +- for (Idx = 0; Idx < 4; Idx++) +- { ++ PHT_TX_CONTEXT pHTTXContext; ++ PTX_CONTEXT pMLMEContext; ++ PTX_CONTEXT pBeaconContext; ++ PTX_CONTEXT pNullContext; ++ PTX_CONTEXT pPsPollContext; ++ PTX_CONTEXT pRTSContext; ++ UINT i, Idx; ++// unsigned int IrqFlags; ++// NDIS_SPIN_LOCK *pLock; ++// BOOLEAN *pPending; ++ ++// pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; ++// pPending = &pAd->BulkOutPending[MGMTPIPEIDX]; ++ ++ for (Idx = 0; Idx < 4; Idx++) { + pHTTXContext = &(pAd->TxContext[Idx]); + +- if (pHTTXContext->IRPPending == TRUE) +- { ++ if (pHTTXContext->IRPPending == TRUE) { + + // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself + // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop ++ // when the last IRP on the list has been cancelled; that's how we exit this loop + // + + RTUSB_UNLINK_URB(pHTTXContext->pUrb); +@@ -1166,15 +1172,13 @@ VOID RTUSBCancelPendingBulkOutIRP( + } + + //RTMP_IRQ_LOCK(pLock, IrqFlags); +- for (i = 0; i < MGMT_RING_SIZE; i++) +- { +- pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa; +- if(pMLMEContext && (pMLMEContext->IRPPending == TRUE)) +- { ++ for (i = 0; i < MGMT_RING_SIZE; i++) { ++ pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ if (pMLMEContext && (pMLMEContext->IRPPending == TRUE)) { + + // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself + // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop ++ // when the last IRP on the list has been cancelled; that's how we exit this loop + // + + RTUSB_UNLINK_URB(pMLMEContext->pUrb); +@@ -1187,17 +1191,14 @@ VOID RTUSBCancelPendingBulkOutIRP( + pAd->BulkOutPending[MGMTPIPEIDX] = FALSE; + //RTMP_IRQ_UNLOCK(pLock, IrqFlags); + +- +- for (i = 0; i < BEACON_RING_SIZE; i++) +- { ++ for (i = 0; i < BEACON_RING_SIZE; i++) { + pBeaconContext = &(pAd->BeaconContext[i]); + +- if(pBeaconContext->IRPPending == TRUE) +- { ++ if (pBeaconContext->IRPPending == TRUE) { + + // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself + // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop ++ // when the last IRP on the list has been cancelled; that's how we exit this loop + // + + RTUSB_UNLINK_URB(pBeaconContext->pUrb); +@@ -1219,8 +1220,7 @@ VOID RTUSBCancelPendingBulkOutIRP( + if (pPsPollContext->IRPPending == TRUE) + RTUSB_UNLINK_URB(pPsPollContext->pUrb); + +- for (Idx = 0; Idx < 4; Idx++) +- { ++ for (Idx = 0; Idx < 4; Idx++) { + NdisAcquireSpinLock(&pAd->BulkOutLock[Idx]); + pAd->BulkOutPending[Idx] = FALSE; + NdisReleaseSpinLock(&pAd->BulkOutLock[Idx]); +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index 807b32a..d662f7f 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -39,40 +39,33 @@ + + #ifdef RTMP_MAC_USB + +- + #include "../rt_config.h" + +-extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c +-extern UCHAR EpToQueue[]; ++extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c ++extern UCHAR EpToQueue[]; + +-VOID REPORT_AMSDU_FRAMES_TO_LLC( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataSize) ++VOID REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, IN ULONG DataSize) + { +- PNDIS_PACKET pPacket; +- UINT nMSDU; +- struct sk_buff *pSkb; ++ PNDIS_PACKET pPacket; ++ UINT nMSDU; ++ struct sk_buff *pSkb; + + nMSDU = 0; + /* allocate a rx packet */ + pSkb = dev_alloc_skb(RX_BUFFER_AGGRESIZE); +- pPacket = (PNDIS_PACKET)OSPKT_TO_RTPKT(pSkb); +- if (pSkb) +- { ++ pPacket = (PNDIS_PACKET) OSPKT_TO_RTPKT(pSkb); ++ if (pSkb) { + + /* convert 802.11 to 802.3 packet */ + pSkb->dev = get_netdev_from_bssid(pAd, BSS0); + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); + deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR,("Can't allocate skb\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ("Can't allocate skb\n")); + } + } + +- + /* + ======================================================================== + +@@ -92,50 +85,53 @@ VOID REPORT_AMSDU_FRAMES_TO_LLC( + + ======================================================================== + */ +-NDIS_STATUS RTUSBFreeDescriptorRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UINT32 NumberRequired) ++NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BulkOutPipeId, ++ IN UINT32 NumberRequired) + { +-// UCHAR FreeNumber = 0; +-// UINT Index; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; +- ++// UCHAR FreeNumber = 0; ++// UINT Index; ++ NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ unsigned long IrqFlags; ++ HT_TX_CONTEXT *pHTTXContext; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition) && ((pHTTXContext->CurWritePosition + NumberRequired + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition)) +- { +- +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); +- } +- else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < (NumberRequired + LOCAL_TXBUF_SIZE))) +- { +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); +- } +- else if (pHTTXContext->bCurWriting == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE,("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n", BulkOutPipeId, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition)); +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); +- } +- else +- { ++ if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition) ++ && ++ ((pHTTXContext->CurWritePosition + NumberRequired + ++ LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition)) { ++ ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << ++ BulkOutPipeId)); ++ } else if ((pHTTXContext->CurWritePosition == 8) ++ && (pHTTXContext->NextBulkOutPosition < ++ (NumberRequired + LOCAL_TXBUF_SIZE))) { ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << ++ BulkOutPipeId)); ++ } else if (pHTTXContext->bCurWriting == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n", ++ BulkOutPipeId, pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition)); ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << ++ BulkOutPipeId)); ++ } else { + Status = NDIS_STATUS_SUCCESS; + } + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); + +- + return (Status); + } + +-NDIS_STATUS RTUSBFreeDescriptorRelease( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR BulkOutPipeId) ++NDIS_STATUS RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, ++ IN UCHAR BulkOutPipeId) + { +- unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; ++ unsigned long IrqFlags; ++ HT_TX_CONTEXT *pHTTXContext; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +@@ -145,28 +141,32 @@ NDIS_STATUS RTUSBFreeDescriptorRelease( + return (NDIS_STATUS_SUCCESS); + } + +- +-BOOLEAN RTUSBNeedQueueBackForAgg( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR BulkOutPipeId) ++BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId) + { +- unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; +- BOOLEAN needQueBack = FALSE; ++ unsigned long IrqFlags; ++ HT_TX_CONTEXT *pHTTXContext; ++ BOOLEAN needQueBack = FALSE; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +- if ((pHTTXContext->IRPPending == TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */) +- { +- if ((pHTTXContext->CurWritePosition < pHTTXContext->ENextBulkOutPosition) && +- (((pHTTXContext->ENextBulkOutPosition+MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT) || (pHTTXContext->CurWritePosition > MAX_AGGREGATION_SIZE))) +- { ++ if ((pHTTXContext->IRPPending == ++ TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */ ) { ++ if ((pHTTXContext->CurWritePosition < ++ pHTTXContext->ENextBulkOutPosition) ++ && ++ (((pHTTXContext->ENextBulkOutPosition + ++ MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT) ++ || (pHTTXContext->CurWritePosition > ++ MAX_AGGREGATION_SIZE))) { + needQueBack = TRUE; +- } +- else if ((pHTTXContext->CurWritePosition > pHTTXContext->ENextBulkOutPosition) && +- ((pHTTXContext->ENextBulkOutPosition + MAX_AGGREGATION_SIZE) < pHTTXContext->CurWritePosition)) +- { ++ } else ++ if ((pHTTXContext->CurWritePosition > ++ pHTTXContext->ENextBulkOutPosition) ++ && ++ ((pHTTXContext->ENextBulkOutPosition + ++ MAX_AGGREGATION_SIZE) < ++ pHTTXContext->CurWritePosition)) { + needQueBack = TRUE; + } + } +@@ -176,7 +176,6 @@ BOOLEAN RTUSBNeedQueueBackForAgg( + + } + +- + /* + ======================================================================== + +@@ -192,21 +191,17 @@ BOOLEAN RTUSBNeedQueueBackForAgg( + + ======================================================================== + */ +-VOID RTUSBRejectPendingPackets( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) + { +- UCHAR Index; +- PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; +- PQUEUE_HEADER pQueue; ++ UCHAR Index; ++ PQUEUE_ENTRY pEntry; ++ PNDIS_PACKET pPacket; ++ PQUEUE_HEADER pQueue; + +- +- for (Index = 0; Index < 4; Index++) +- { ++ for (Index = 0; Index < 4; Index++) { + NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]); +- while (pAd->TxSwQueue[Index].Head != NULL) +- { +- pQueue = (PQUEUE_HEADER) &(pAd->TxSwQueue[Index]); ++ while (pAd->TxSwQueue[Index].Head != NULL) { ++ pQueue = (PQUEUE_HEADER) & (pAd->TxSwQueue[Index]); + pEntry = RemoveHeadQueue(pQueue); + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +@@ -217,7 +212,6 @@ VOID RTUSBRejectPendingPackets( + + } + +- + /* + ======================================================================== + +@@ -246,21 +240,18 @@ VOID RTUSBRejectPendingPackets( + ======================================================================== + */ + +- +-VOID RTMPWriteTxInfo( +- IN PRTMP_ADAPTER pAd, +- IN PTXINFO_STRUC pTxInfo, +- IN USHORT USBDMApktLen, +- IN BOOLEAN bWiv, +- IN UCHAR QueueSel, +- IN UCHAR NextValid, +- IN UCHAR TxBurst) ++VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, ++ IN PTXINFO_STRUC pTxInfo, ++ IN USHORT USBDMApktLen, ++ IN BOOLEAN bWiv, ++ IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst) + { + pTxInfo->USBDMATxPktLen = USBDMApktLen; + pTxInfo->QSEL = QueueSel; + if (QueueSel != FIFO_EDCA) +- DBGPRINT(RT_DEBUG_TRACE, ("====> QueueSel != FIFO_EDCA<============\n")); +- pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this. ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("====> QueueSel != FIFO_EDCA<============\n")); ++ pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this. + pTxInfo->USBDMATxburst = TxBurst; + pTxInfo->WIV = bWiv; + pTxInfo->SwUseLastRound = 0; +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index b01a24a..9a32bc8 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -38,10 +38,8 @@ + + #ifdef RTMP_MAC_USB + +- + #include "../rt_config.h" + +- + /* + ======================================================================== + +@@ -58,26 +56,18 @@ + ======================================================================== + */ + +-static NTSTATUS RTUSBFirmwareRun( +- IN PRTMP_ADAPTER pAd) ++static NTSTATUS RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; +- +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x01, +- 0x8, +- 0, +- NULL, +- 0); ++ NTSTATUS Status; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x01, 0x8, 0, NULL, 0); + + return Status; + } + +- +- + /* + ======================================================================== + +@@ -93,19 +83,16 @@ static NTSTATUS RTUSBFirmwareRun( + + ======================================================================== + */ +-NTSTATUS RTUSBFirmwareWrite( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFwImage, +- IN ULONG FwLen) ++NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pFwImage, IN ULONG FwLen) + { +- UINT32 MacReg; +- NTSTATUS Status; +-// ULONG i; +- USHORT writeLen; ++ UINT32 MacReg; ++ NTSTATUS Status; ++// ULONG i; ++ USHORT writeLen; + + Status = RTUSBReadMACRegister(pAd, MAC_CSR0, &MacReg); + +- + writeLen = FwLen; + RTUSBMultiWrite(pAd, FIRMWARE_IMAGE_BASE, pFwImage, writeLen); + +@@ -115,32 +102,26 @@ NTSTATUS RTUSBFirmwareWrite( + + //2008/11/28:KH add to fix the dead rf frequency offset bug<-- + RTMPusecDelay(10000); +- RTUSBWriteMACRegister(pAd,H2M_MAILBOX_CSR,0); +- AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); //reset rf by MCU supported by new firmware ++ RTUSBWriteMACRegister(pAd, H2M_MAILBOX_CSR, 0); ++ AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); //reset rf by MCU supported by new firmware + //2008/11/28:KH add to fix the dead rf frequency offset bug--> + + return Status; + } + +- +-NTSTATUS RTUSBVenderReset( +- IN PRTMP_ADAPTER pAd) ++NTSTATUS RTUSBVenderReset(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; ++ NTSTATUS Status; + DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n")); +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x01, +- 0x1, +- 0, +- NULL, +- 0); ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x01, 0x1, 0, NULL, 0); + + DBGPRINT_RAW(RT_DEBUG_ERROR, ("<--RTUSBVenderReset\n")); + return Status; + } ++ + /* + ======================================================================== + +@@ -156,23 +137,16 @@ NTSTATUS RTUSBVenderReset( + + ======================================================================== + */ +-NTSTATUS RTUSBMultiRead( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT length) ++NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) + { +- NTSTATUS Status; +- +- Status = RTUSB_VendorRequest( +- pAd, +- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), +- DEVICE_VENDOR_REQUEST_IN, +- 0x7, +- 0, +- Offset, +- pData, +- length); ++ NTSTATUS Status; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ (USBD_TRANSFER_DIRECTION_IN | ++ USBD_SHORT_TRANSFER_OK), ++ DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset, ++ pData, length); + + return Status; + } +@@ -192,77 +166,56 @@ NTSTATUS RTUSBMultiRead( + + ======================================================================== + */ +-NTSTATUS RTUSBMultiWrite_OneByte( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData) ++NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData) + { +- NTSTATUS Status; ++ NTSTATUS Status; + + // TODO: In 2870, use this funciton carefully cause it's not stable. +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x6, +- 0, +- Offset, +- pData, +- 1); ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x6, 0, Offset, pData, 1); + + return Status; + } + +-NTSTATUS RTUSBMultiWrite( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length) ++NTSTATUS RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData, IN USHORT length) + { +- NTSTATUS Status; +- +- +- USHORT index = 0,Value; +- PUCHAR pSrc = pData; +- USHORT resude = 0; +- +- resude = length % 2; +- length += resude; +- do +- { +- Value =(USHORT)( *pSrc | (*(pSrc + 1) << 8)); +- Status = RTUSBSingleWrite(pAd,Offset + index,Value); +- index +=2; +- length -= 2; +- pSrc = pSrc + 2; +- }while(length > 0); ++ NTSTATUS Status; ++ ++ USHORT index = 0, Value; ++ PUCHAR pSrc = pData; ++ USHORT resude = 0; ++ ++ resude = length % 2; ++ length += resude; ++ do { ++ Value = (USHORT) (*pSrc | (*(pSrc + 1) << 8)); ++ Status = RTUSBSingleWrite(pAd, Offset + index, Value); ++ index += 2; ++ length -= 2; ++ pSrc = pSrc + 2; ++ } while (length > 0); + + return Status; + } + +- +-NTSTATUS RTUSBSingleWrite( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT Value) ++NTSTATUS RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++ IN USHORT Offset, IN USHORT Value) + { +- NTSTATUS Status; +- +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x2, +- Value, +- Offset, +- NULL, +- 0); ++ NTSTATUS Status; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x2, Value, Offset, NULL, 0); + + return Status; + + } + +- + /* + ======================================================================== + +@@ -278,26 +231,19 @@ NTSTATUS RTUSBSingleWrite( + + ======================================================================== + */ +-NTSTATUS RTUSBReadMACRegister( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUINT32 pValue) ++NTSTATUS RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUINT32 pValue) + { +- NTSTATUS Status = 0; +- UINT32 localVal; +- +- Status = RTUSB_VendorRequest( +- pAd, +- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), +- DEVICE_VENDOR_REQUEST_IN, +- 0x7, +- 0, +- Offset, +- &localVal, +- 4); ++ NTSTATUS Status = 0; ++ UINT32 localVal; + +- *pValue = le2cpu32(localVal); ++ Status = RTUSB_VendorRequest(pAd, ++ (USBD_TRANSFER_DIRECTION_IN | ++ USBD_SHORT_TRANSFER_OK), ++ DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset, ++ &localVal, 4); + ++ *pValue = le2cpu32(localVal); + + if (Status < 0) + *pValue = 0xffffffff; +@@ -305,7 +251,6 @@ NTSTATUS RTUSBReadMACRegister( + return Status; + } + +- + /* + ======================================================================== + +@@ -321,24 +266,22 @@ NTSTATUS RTUSBReadMACRegister( + + ======================================================================== + */ +-NTSTATUS RTUSBWriteMACRegister( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN UINT32 Value) ++NTSTATUS RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN UINT32 Value) + { +- NTSTATUS Status; +- UINT32 localVal; ++ NTSTATUS Status; ++ UINT32 localVal; + + localVal = Value; + +- Status = RTUSBSingleWrite(pAd, Offset, (USHORT)(localVal & 0xffff)); +- Status = RTUSBSingleWrite(pAd, Offset + 2, (USHORT)((localVal & 0xffff0000) >> 16)); ++ Status = RTUSBSingleWrite(pAd, Offset, (USHORT) (localVal & 0xffff)); ++ Status = ++ RTUSBSingleWrite(pAd, Offset + 2, ++ (USHORT) ((localVal & 0xffff0000) >> 16)); + + return Status; + } + +- +- + /* + ======================================================================== + +@@ -354,78 +297,77 @@ NTSTATUS RTUSBWriteMACRegister( + + ======================================================================== + */ +-NTSTATUS RTUSBReadBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN PUCHAR pValue) ++NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Id, IN PUCHAR pValue) + { +- BBP_CSR_CFG_STRUC BbpCsr; +- UINT i = 0; +- NTSTATUS status; ++ BBP_CSR_CFG_STRUC BbpCsr; ++ UINT i = 0; ++ NTSTATUS status; + + // Verify the busy condition +- do +- { ++ do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); +- if(status >= 0) +- { +- if (!(BbpCsr.field.Busy == BUSY)) +- break; ++ if (status >= 0) { ++ if (!(BbpCsr.field.Busy == BUSY)) ++ break; + } +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n", i)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n", ++ i)); + i++; +- }while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ } while ((i < RETRY_LIMIT) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { ++ if ((i == RETRY_LIMIT) ++ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { + // + // Read failed then Return Default value. + // + *pValue = pAd->BbpWriteLatch[Id]; + +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } +- + // Prepare for write material +- BbpCsr.word = 0; +- BbpCsr.field.fRead = 1; +- BbpCsr.field.Busy = 1; +- BbpCsr.field.RegNum = Id; ++ BbpCsr.word = 0; ++ BbpCsr.field.fRead = 1; ++ BbpCsr.field.Busy = 1; ++ BbpCsr.field.RegNum = Id; + RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word); + + i = 0; + // Verify the busy condition +- do +- { ++ do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); +- if (status >= 0) +- { +- if (!(BbpCsr.field.Busy == BUSY)) +- { +- *pValue = (UCHAR)BbpCsr.field.Value; +- break; +- } ++ if (status >= 0) { ++ if (!(BbpCsr.field.Busy == BUSY)) { ++ *pValue = (UCHAR) BbpCsr.field.Value; ++ break; ++ } + } +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n", i)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n", ++ i)); + i++; +- }while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ } while ((i < RETRY_LIMIT) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { ++ if ((i == RETRY_LIMIT) ++ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { + // + // Read failed then Return Default value. + // + *pValue = pAd->BbpWriteLatch[Id]; + +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } + + return STATUS_SUCCESS; + } + +- + /* + ======================================================================== + +@@ -441,46 +383,46 @@ NTSTATUS RTUSBReadBBPRegister( + + ======================================================================== + */ +-NTSTATUS RTUSBWriteBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN UCHAR Value) ++NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Id, IN UCHAR Value) + { +- BBP_CSR_CFG_STRUC BbpCsr; +- UINT i = 0; +- NTSTATUS status; ++ BBP_CSR_CFG_STRUC BbpCsr; ++ UINT i = 0; ++ NTSTATUS status; + // Verify the busy condition +- do +- { ++ do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); +- if (status >= 0) +- { +- if (!(BbpCsr.field.Busy == BUSY)) +- break; ++ if (status >= 0) { ++ if (!(BbpCsr.field.Busy == BUSY)) ++ break; + } +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", ++ i)); + i++; + } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ while ((i < RETRY_LIMIT) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ if ((i == RETRY_LIMIT) ++ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } +- + // Prepare for write material +- BbpCsr.word = 0; +- BbpCsr.field.fRead = 0; +- BbpCsr.field.Value = Value; +- BbpCsr.field.Busy = 1; +- BbpCsr.field.RegNum = Id; ++ BbpCsr.word = 0; ++ BbpCsr.field.fRead = 0; ++ BbpCsr.field.Value = Value; ++ BbpCsr.field.Busy = 1; ++ BbpCsr.field.RegNum = Id; + RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word); + + pAd->BbpWriteLatch[Id] = Value; + + return STATUS_SUCCESS; + } ++ + /* + ======================================================================== + +@@ -496,31 +438,31 @@ NTSTATUS RTUSBWriteBBPRegister( + + ======================================================================== + */ +-NTSTATUS RTUSBWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 Value) ++NTSTATUS RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, IN UINT32 Value) + { +- PHY_CSR4_STRUC PhyCsr4; +- UINT i = 0; +- NTSTATUS status; ++ PHY_CSR4_STRUC PhyCsr4; ++ UINT i = 0; ++ NTSTATUS status; + + NdisZeroMemory(&PhyCsr4, sizeof(PHY_CSR4_STRUC)); +- do +- { ++ do { + status = RTUSBReadMACRegister(pAd, RF_CSR_CFG0, &PhyCsr4.word); +- if (status >= 0) +- { +- if (!(PhyCsr4.field.Busy)) +- break; ++ if (status >= 0) { ++ if (!(PhyCsr4.field.Busy)) ++ break; + } +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", ++ i)); + i++; + } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ while ((i < RETRY_LIMIT) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ if ((i == RETRY_LIMIT) ++ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } + +@@ -529,7 +471,6 @@ NTSTATUS RTUSBWriteRFRegister( + return STATUS_SUCCESS; + } + +- + /* + ======================================================================== + +@@ -545,23 +486,16 @@ NTSTATUS RTUSBWriteRFRegister( + + ======================================================================== + */ +-NTSTATUS RTUSBReadEEPROM( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT length) ++NTSTATUS RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) + { +- NTSTATUS Status = STATUS_SUCCESS; +- +- Status = RTUSB_VendorRequest( +- pAd, +- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK), +- DEVICE_VENDOR_REQUEST_IN, +- 0x9, +- 0, +- Offset, +- pData, +- length); ++ NTSTATUS Status = STATUS_SUCCESS; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ (USBD_TRANSFER_DIRECTION_IN | ++ USBD_SHORT_TRANSFER_OK), ++ DEVICE_VENDOR_REQUEST_IN, 0x9, 0, Offset, ++ pData, length); + + return Status; + } +@@ -581,37 +515,26 @@ NTSTATUS RTUSBReadEEPROM( + + ======================================================================== + */ +-NTSTATUS RTUSBWriteEEPROM( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length) ++NTSTATUS RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData, IN USHORT length) + { +- NTSTATUS Status = STATUS_SUCCESS; +- +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x8, +- 0, +- Offset, +- pData, +- length); ++ NTSTATUS Status = STATUS_SUCCESS; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x8, 0, Offset, pData, length); + + return Status; + } + +- +-NTSTATUS RTUSBReadEEPROM16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT offset, +- OUT PUSHORT pData) ++NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++ IN USHORT offset, OUT PUSHORT pData) + { + NTSTATUS status; +- USHORT localData; ++ USHORT localData; + +- status = RTUSBReadEEPROM(pAd, offset, (PUCHAR)(&localData), 2); ++ status = RTUSBReadEEPROM(pAd, offset, (PUCHAR) (&localData), 2); + if (status == STATUS_SUCCESS) + *pData = le2cpu16(localData); + +@@ -634,13 +557,12 @@ NTSTATUS RTUSBReadEEPROM16( + + ======================================================================== + */ +-VOID RTUSBPutToSleep( +- IN PRTMP_ADAPTER pAd) ++VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) + { +- UINT32 value; ++ UINT32 value; + + // Timeout 0x40 x 50us +- value = (SLEEPCID<<16)+(OWNERMCU<<24)+ (0x40<<8)+1; ++ value = (SLEEPCID << 16) + (OWNERMCU << 24) + (0x40 << 8) + 1; + RTUSBWriteMACRegister(pAd, 0x7010, value); + RTUSBWriteMACRegister(pAd, 0x404, 0x30); + //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +@@ -663,20 +585,14 @@ VOID RTUSBPutToSleep( + + ======================================================================== + */ +-NTSTATUS RTUSBWakeUp( +- IN PRTMP_ADAPTER pAd) ++NTSTATUS RTUSBWakeUp(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; +- +- Status = RTUSB_VendorRequest( +- pAd, +- USBD_TRANSFER_DIRECTION_OUT, +- DEVICE_VENDOR_REQUEST_OUT, +- 0x01, +- 0x09, +- 0, +- NULL, +- 0); ++ NTSTATUS Status; ++ ++ Status = RTUSB_VendorRequest(pAd, ++ USBD_TRANSFER_DIRECTION_OUT, ++ DEVICE_VENDOR_REQUEST_OUT, ++ 0x01, 0x09, 0, NULL, 0); + + return Status; + } +@@ -696,8 +612,7 @@ NTSTATUS RTUSBWakeUp( + + ======================================================================== + */ +-VOID RTUSBInitializeCmdQ( +- IN PCmdQ cmdq) ++VOID RTUSBInitializeCmdQ(IN PCmdQ cmdq) + { + cmdq->head = NULL; + cmdq->tail = NULL; +@@ -720,48 +635,45 @@ VOID RTUSBInitializeCmdQ( + + ======================================================================== + */ +-NDIS_STATUS RTUSBEnqueueCmdFromNdis( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_OID Oid, +- IN BOOLEAN SetInformation, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength) ++NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++ IN NDIS_OID Oid, ++ IN BOOLEAN SetInformation, ++ IN PVOID pInformationBuffer, ++ IN UINT32 InformationBufferLength) + { +- NDIS_STATUS status; +- PCmdQElmt cmdqelmt = NULL; +- RTMP_OS_TASK *pTask = &pAd->cmdQTask; ++ NDIS_STATUS status; ++ PCmdQElmt cmdqelmt = NULL; ++ RTMP_OS_TASK *pTask = &pAd->cmdQTask; + + #ifdef KTHREAD_SUPPORT + if (pTask->kthread_task == NULL) + #else +- CHECK_PID_LEGALITY(pTask->taskPID) +- { ++ CHECK_PID_LEGALITY(pTask->taskPID) { + } + else + #endif +- return (NDIS_STATUS_RESOURCES); ++ return (NDIS_STATUS_RESOURCES); + +- status = os_alloc_mem(pAd, (PUCHAR *)(&cmdqelmt), sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (PUCHAR *) (&cmdqelmt), sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + +- cmdqelmt->buffer = NULL; +- if (pInformationBuffer != NULL) +- { +- status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength); +- if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) +- { +- kfree(cmdqelmt); +- return (NDIS_STATUS_RESOURCES); +- } +- else +- { +- NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength); +- cmdqelmt->bufferlength = InformationBufferLength; +- } ++ cmdqelmt->buffer = NULL; ++ if (pInformationBuffer != NULL) { ++ status = ++ os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt->buffer, ++ InformationBufferLength); ++ if ((status != NDIS_STATUS_SUCCESS) ++ || (cmdqelmt->buffer == NULL)) { ++ kfree(cmdqelmt); ++ return (NDIS_STATUS_RESOURCES); ++ } else { ++ NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, ++ InformationBufferLength); ++ cmdqelmt->bufferlength = InformationBufferLength; + } +- else +- cmdqelmt->bufferlength = 0; ++ } else ++ cmdqelmt->bufferlength = 0; + + cmdqelmt->command = Oid; + cmdqelmt->CmdFromNdis = TRUE; +@@ -771,28 +683,22 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( + cmdqelmt->SetOperation = FALSE; + + NdisAcquireSpinLock(&pAd->CmdQLock); +- if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) +- { ++ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) { + EnqueueCmd((&pAd->CmdQ), cmdqelmt); + status = NDIS_STATUS_SUCCESS; +- } +- else +- { ++ } else { + status = NDIS_STATUS_FAILURE; + } + NdisReleaseSpinLock(&pAd->CmdQLock); + +- if (status == NDIS_STATUS_FAILURE) +- { ++ if (status == NDIS_STATUS_FAILURE) { + if (cmdqelmt->buffer) + os_free_mem(pAd, cmdqelmt->buffer); + os_free_mem(pAd, cmdqelmt); +- } +- else +- RTUSBCMDUp(pAd); +- ++ } else ++ RTUSBCMDUp(pAd); + +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + } + + /* +@@ -810,37 +716,33 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis( + + ======================================================================== + */ +-NDIS_STATUS RTUSBEnqueueInternalCmd( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_OID Oid, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength) ++NDIS_STATUS RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++ IN NDIS_OID Oid, ++ IN PVOID pInformationBuffer, ++ IN UINT32 InformationBufferLength) + { +- NDIS_STATUS status; +- PCmdQElmt cmdqelmt = NULL; +- ++ NDIS_STATUS status; ++ PCmdQElmt cmdqelmt = NULL; + +- status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt, sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt, sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt)); + +- if(InformationBufferLength > 0) +- { +- status = os_alloc_mem(pAd, (PUCHAR *)&cmdqelmt->buffer, InformationBufferLength); +- if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) +- { ++ if (InformationBufferLength > 0) { ++ status = ++ os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt->buffer, ++ InformationBufferLength); ++ if ((status != NDIS_STATUS_SUCCESS) ++ || (cmdqelmt->buffer == NULL)) { + os_free_mem(pAd, cmdqelmt); + return (NDIS_STATUS_RESOURCES); +- } +- else +- { +- NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength); ++ } else { ++ NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, ++ InformationBufferLength); + cmdqelmt->bufferlength = InformationBufferLength; + } +- } +- else +- { ++ } else { + cmdqelmt->buffer = NULL; + cmdqelmt->bufferlength = 0; + } +@@ -848,30 +750,24 @@ NDIS_STATUS RTUSBEnqueueInternalCmd( + cmdqelmt->command = Oid; + cmdqelmt->CmdFromNdis = FALSE; + +- if (cmdqelmt != NULL) +- { ++ if (cmdqelmt != NULL) { + NdisAcquireSpinLock(&pAd->CmdQLock); +- if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) +- { ++ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) { + EnqueueCmd((&pAd->CmdQ), cmdqelmt); + status = NDIS_STATUS_SUCCESS; +- } +- else +- { ++ } else { + status = NDIS_STATUS_FAILURE; + } + NdisReleaseSpinLock(&pAd->CmdQLock); + +- if (status == NDIS_STATUS_FAILURE) +- { ++ if (status == NDIS_STATUS_FAILURE) { + if (cmdqelmt->buffer) + os_free_mem(pAd, cmdqelmt->buffer); + os_free_mem(pAd, cmdqelmt); +- } +- else +- RTUSBCMDUp(pAd); ++ } else ++ RTUSBCMDUp(pAd); + } +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + } + + /* +@@ -889,14 +785,11 @@ NDIS_STATUS RTUSBEnqueueInternalCmd( + + ======================================================================== + */ +-VOID RTUSBDequeueCmd( +- IN PCmdQ cmdq, +- OUT PCmdQElmt *pcmdqelmt) ++VOID RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) + { + *pcmdqelmt = cmdq->head; + +- if (*pcmdqelmt != NULL) +- { ++ if (*pcmdqelmt != NULL) { + cmdq->head = cmdq->head->next; + cmdq->size--; + if (cmdq->size == 0) +@@ -930,7 +823,6 @@ VOID RTUSBDequeueCmd( + method can wait for it to complete. Since you don't have a handle on + the URB used, you can't cancel the request. + +- + Routine Description: + + Arguments: +@@ -941,81 +833,102 @@ VOID RTUSBDequeueCmd( + + ======================================================================== + */ +-NTSTATUS RTUSB_VendorRequest( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 TransferFlags, +- IN UCHAR RequestType, +- IN UCHAR Request, +- IN USHORT Value, +- IN USHORT Index, +- IN PVOID TransferBuffer, +- IN UINT32 TransferBufferLength) ++NTSTATUS RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++ IN UINT32 TransferFlags, ++ IN UCHAR RequestType, ++ IN UCHAR Request, ++ IN USHORT Value, ++ IN USHORT Index, ++ IN PVOID TransferBuffer, ++ IN UINT32 TransferBufferLength) + { +- int ret = 0; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ int ret = 0; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + DBGPRINT(RT_DEBUG_ERROR, ("device disconnected\n")); + return -1; +- } +- else if (in_interrupt()) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("in_interrupt, RTUSB_VendorRequest Request%02x Value%04x Offset%04x\n",Request,Value,Index)); ++ } else if (in_interrupt()) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("in_interrupt, RTUSB_VendorRequest Request%02x Value%04x Offset%04x\n", ++ Request, Value, Index)); + + return -1; +- } +- else +- { ++ } else { + #define MAX_RETRY_COUNT 10 + + int retryCount = 0; +- void *tmpBuf = TransferBuffer; ++ void *tmpBuf = TransferBuffer; + + ret = down_interruptible(&(pAd->UsbVendorReq_semaphore)); +- if (pAd->UsbVendorReqBuf) +- { +- ASSERT(TransferBufferLength UsbVendorReqBuf) { ++ ASSERT(TransferBufferLength < MAX_PARAM_BUFFER_SIZE); + + tmpBuf = (void *)pAd->UsbVendorReqBuf; +- NdisZeroMemory(pAd->UsbVendorReqBuf, TransferBufferLength); ++ NdisZeroMemory(pAd->UsbVendorReqBuf, ++ TransferBufferLength); + + if (RequestType == DEVICE_VENDOR_REQUEST_OUT) +- NdisMoveMemory(tmpBuf, TransferBuffer, TransferBufferLength); ++ NdisMoveMemory(tmpBuf, TransferBuffer, ++ TransferBufferLength); + } + + do { +- if( RequestType == DEVICE_VENDOR_REQUEST_OUT) +- ret=usb_control_msg(pObj->pUsb_Dev, usb_sndctrlpipe( pObj->pUsb_Dev, 0 ), Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES); +- else if(RequestType == DEVICE_VENDOR_REQUEST_IN) +- ret=usb_control_msg(pObj->pUsb_Dev, usb_rcvctrlpipe( pObj->pUsb_Dev, 0 ), Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES); +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("vendor request direction is failed\n")); +- ret = -1; +- } ++ if (RequestType == DEVICE_VENDOR_REQUEST_OUT) ++ ret = ++ usb_control_msg(pObj->pUsb_Dev, ++ usb_sndctrlpipe(pObj-> ++ pUsb_Dev, ++ 0), Request, ++ RequestType, Value, Index, ++ tmpBuf, ++ TransferBufferLength, ++ CONTROL_TIMEOUT_JIFFIES); ++ else if (RequestType == DEVICE_VENDOR_REQUEST_IN) ++ ret = ++ usb_control_msg(pObj->pUsb_Dev, ++ usb_rcvctrlpipe(pObj-> ++ pUsb_Dev, ++ 0), Request, ++ RequestType, Value, Index, ++ tmpBuf, ++ TransferBufferLength, ++ CONTROL_TIMEOUT_JIFFIES); ++ else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("vendor request direction is failed\n")); ++ ret = -1; ++ } + + retryCount++; + if (ret < 0) { + DBGPRINT(RT_DEBUG_OFF, ("#\n")); + RTMPusecDelay(5000); + } +- } while((ret < 0) && (retryCount < MAX_RETRY_COUNT)); ++ } while ((ret < 0) && (retryCount < MAX_RETRY_COUNT)); + +- if ((pAd->UsbVendorReqBuf) && (RequestType == DEVICE_VENDOR_REQUEST_IN)) +- NdisMoveMemory(TransferBuffer, tmpBuf, TransferBufferLength); ++ if ((pAd->UsbVendorReqBuf) ++ && (RequestType == DEVICE_VENDOR_REQUEST_IN)) ++ NdisMoveMemory(TransferBuffer, tmpBuf, ++ TransferBufferLength); + up(&(pAd->UsbVendorReq_semaphore)); + +- if (ret < 0) { +- DBGPRINT(RT_DEBUG_ERROR, ("RTUSB_VendorRequest failed(%d),TxFlags=0x%x, ReqType=%s, Req=0x%x, Index=0x%x\n", +- ret, TransferFlags, (RequestType == DEVICE_VENDOR_REQUEST_OUT ? "OUT" : "IN"), Request, Index)); ++ if (ret < 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTUSB_VendorRequest failed(%d),TxFlags=0x%x, ReqType=%s, Req=0x%x, Index=0x%x\n", ++ ret, TransferFlags, ++ (RequestType == ++ DEVICE_VENDOR_REQUEST_OUT ? "OUT" : "IN"), ++ Request, Index)); + if (Request == 0x2) +- DBGPRINT(RT_DEBUG_ERROR, ("\tRequest Value=0x%04x!\n", Value)); +- +- if ((TransferBuffer!= NULL) && (TransferBufferLength > 0)) +- hex_dump("Failed TransferBuffer value", TransferBuffer, TransferBufferLength); +- } ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("\tRequest Value=0x%04x!\n", Value)); + ++ if ((TransferBuffer != NULL) ++ && (TransferBufferLength > 0)) ++ hex_dump("Failed TransferBuffer value", ++ TransferBuffer, TransferBufferLength); ++ } + + } + +@@ -1041,28 +954,25 @@ NTSTATUS RTUSB_VendorRequest( + + ======================================================================== + */ +-NTSTATUS RTUSB_ResetDevice( +- IN PRTMP_ADAPTER pAd) ++NTSTATUS RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status = TRUE; ++ NTSTATUS Status = TRUE; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->USB_ResetDevice\n")); + //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); + return Status; + } + +-VOID CMDHandler( +- IN PRTMP_ADAPTER pAd) ++VOID CMDHandler(IN PRTMP_ADAPTER pAd) + { +- PCmdQElmt cmdqelmt; +- PUCHAR pData; +- NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS; +-// ULONG Now = 0; +- NTSTATUS ntStatus; +-// unsigned long IrqFlags; +- +- while (pAd && pAd->CmdQ.size > 0) +- { ++ PCmdQElmt cmdqelmt; ++ PUCHAR pData; ++ NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS; ++// ULONG Now = 0; ++ NTSTATUS ntStatus; ++// unsigned long IrqFlags; ++ ++ while (pAd && pAd->CmdQ.size > 0) { + NdisStatus = NDIS_STATUS_SUCCESS; + + NdisAcquireSpinLock(&pAd->CmdQLock); +@@ -1074,645 +984,1129 @@ VOID CMDHandler( + + pData = cmdqelmt->buffer; + +- if(!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) +- { +- switch (cmdqelmt->command) +- { +- case CMDTHREAD_CHECK_GPIO: +- { +- UINT32 data; ++ if (! ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) { ++ switch (cmdqelmt->command) { ++ case CMDTHREAD_CHECK_GPIO: ++ { ++ UINT32 data; + +- { +- // Read GPIO pin2 as Hardware controlled radio state +- +- RTUSBReadMACRegister( pAd, GPIO_CTRL_CFG, &data); +- +- if (data & 0x04) +- { +- pAd->StaCfg.bHwRadio = TRUE; +- } +- else +- { +- pAd->StaCfg.bHwRadio = FALSE; +- } +- +- if(pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if(pAd->StaCfg.bRadio == TRUE) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("!!! Radio On !!!\n")); +- +- MlmeRadioOn(pAd); +- // Update extra information +- pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- else +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("!!! Radio Off !!!\n")); ++ { ++ // Read GPIO pin2 as Hardware controlled radio state ++ ++ RTUSBReadMACRegister(pAd, ++ GPIO_CTRL_CFG, ++ &data); ++ ++ if (data & 0x04) { ++ pAd->StaCfg.bHwRadio = ++ TRUE; ++ } else { ++ pAd->StaCfg.bHwRadio = ++ FALSE; ++ } + +- MlmeRadioOff(pAd); +- // Update extra information +- pAd->ExtraInfo = HW_RADIO_OFF; +- } ++ if (pAd->StaCfg.bRadio != ++ (pAd->StaCfg.bHwRadio ++ && pAd->StaCfg.bSwRadio)) { ++ pAd->StaCfg.bRadio = ++ (pAd->StaCfg. ++ bHwRadio ++ && pAd->StaCfg. ++ bSwRadio); ++ if (pAd->StaCfg. ++ bRadio == TRUE) { ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("!!! Radio On !!!\n")); ++ ++ MlmeRadioOn ++ (pAd); ++ // Update extra information ++ pAd->ExtraInfo = ++ EXTRA_INFO_CLEAR; ++ } else { ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("!!! Radio Off !!!\n")); ++ ++ MlmeRadioOff ++ (pAd); ++ // Update extra information ++ pAd->ExtraInfo = ++ HW_RADIO_OFF; + } + } + } +- break; +- +- case CMDTHREAD_QKERIODIC_EXECUT: +- { +- StaQuickResponeForRateUpExec(NULL, pAd, NULL, NULL); +- } +- break; ++ } ++ break; ++ ++ case CMDTHREAD_QKERIODIC_EXECUT: ++ { ++ StaQuickResponeForRateUpExec(NULL, pAd, ++ NULL, ++ NULL); ++ } ++ break; ++ ++ case CMDTHREAD_RESET_BULK_OUT: ++ { ++ UINT32 MACValue; ++ UCHAR Index; ++ int ret = 0; ++ PHT_TX_CONTEXT pHTTXContext; ++// RTMP_TX_RING *pTxRing; ++ unsigned long IrqFlags; ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("CmdThread : CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n", ++ pAd->bulkResetPipeid)); ++ // All transfers must be aborted or cancelled before attempting to reset the pipe. ++ //RTUSBCancelPendingBulkOutIRP(pAd); ++ // Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007 ++ Index = 0; ++ do { ++ RTUSBReadMACRegister(pAd, ++ TXRXQ_PCNT, ++ &MACValue); ++ if ((MACValue & 0xf00000 ++ /*0x800000 */ ) == 0) ++ break; ++ Index++; ++ RTMPusecDelay(10000); ++ } while (Index < 100); ++ MACValue = 0; ++ RTUSBReadMACRegister(pAd, USB_DMA_CFG, ++ &MACValue); ++ // To prevent Read Register error, we 2nd check the validity. ++ if ((MACValue & 0xc00000) == 0) ++ RTUSBReadMACRegister(pAd, ++ USB_DMA_CFG, ++ &MACValue); ++ // To prevent Read Register error, we 3rd check the validity. ++ if ((MACValue & 0xc00000) == 0) ++ RTUSBReadMACRegister(pAd, ++ USB_DMA_CFG, ++ &MACValue); ++ MACValue |= 0x80000; ++ RTUSBWriteMACRegister(pAd, USB_DMA_CFG, ++ MACValue); ++ ++ // Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 ++ RTMPusecDelay(1000); ++ ++ MACValue &= (~0x80000); ++ RTUSBWriteMACRegister(pAd, USB_DMA_CFG, ++ MACValue); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("\tSet 0x2a0 bit19. Clear USB DMA TX path\n")); ++ ++ // Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 ++ //RTMPusecDelay(5000); ++ ++ if ((pAd-> ++ bulkResetPipeid & ++ BULKOUT_MGMT_RESET_FLAG) == ++ BULKOUT_MGMT_RESET_FLAG) { ++ RTMP_CLEAR_FLAG(pAd, ++ fRTMP_ADAPTER_BULKOUT_RESET); ++ if (pAd->MgmtRing.TxSwFreeIdx < ++ MGMT_RING_SIZE ++ /* pMLMEContext->bWaitingBulkOut == TRUE */ ++ ) { ++ RTUSB_SET_BULK_FLAG(pAd, ++ fRTUSB_BULK_OUT_MLME); ++ } ++ RTUSBKickBulkOut(pAd); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("\tTX MGMT RECOVER Done!\n")); ++ } else { ++ pHTTXContext = ++ &(pAd-> ++ TxContext[pAd-> ++ bulkResetPipeid]); ++ //NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); ++ RTMP_INT_LOCK(&pAd-> ++ BulkOutLock[pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ if (pAd-> ++ BulkOutPending[pAd-> ++ bulkResetPipeid] ++ == FALSE) { ++ pAd-> ++ BulkOutPending[pAd-> ++ bulkResetPipeid] ++ = TRUE; ++ pHTTXContext-> ++ IRPPending = TRUE; ++ pAd-> ++ watchDogTxPendingCnt ++ [pAd-> ++ bulkResetPipeid] = ++ 1; + +- case CMDTHREAD_RESET_BULK_OUT: +- { +- UINT32 MACValue; +- UCHAR Index; +- int ret=0; +- PHT_TX_CONTEXT pHTTXContext; +-// RTMP_TX_RING *pTxRing; +- unsigned long IrqFlags; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n", pAd->bulkResetPipeid)); +- // All transfers must be aborted or cancelled before attempting to reset the pipe. +- //RTUSBCancelPendingBulkOutIRP(pAd); +- // Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007 +- Index = 0; +- do +- { +- RTUSBReadMACRegister(pAd, TXRXQ_PCNT, &MACValue); +- if ((MACValue & 0xf00000/*0x800000*/) == 0) +- break; +- Index++; +- RTMPusecDelay(10000); +- }while(Index < 100); +- MACValue = 0; +- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue); +- // To prevent Read Register error, we 2nd check the validity. +- if ((MACValue & 0xc00000) == 0) +- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue); +- // To prevent Read Register error, we 3rd check the validity. +- if ((MACValue & 0xc00000) == 0) +- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue); +- MACValue |= 0x80000; +- RTUSBWriteMACRegister(pAd, USB_DMA_CFG, MACValue); +- +- // Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 +- RTMPusecDelay(1000); +- +- MACValue &= (~0x80000); +- RTUSBWriteMACRegister(pAd, USB_DMA_CFG, MACValue); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tSet 0x2a0 bit19. Clear USB DMA TX path\n")); +- +- // Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 +- //RTMPusecDelay(5000); +- +- if ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG) +- { +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */) ++ // no matter what, clean the flag ++ RTMP_CLEAR_FLAG(pAd, ++ fRTMP_ADAPTER_BULKOUT_RESET); ++ ++ //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); ++ RTMP_INT_UNLOCK(&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); + { +- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); +- } +- RTUSBKickBulkOut(pAd); ++ RTUSBInitHTTxDesc ++ (pAd, ++ pHTTXContext, ++ pAd-> ++ bulkResetPipeid, ++ pHTTXContext-> ++ BulkOutSize, ++ (usb_complete_t) ++ RTUSBBulkOutDataPacketComplete); ++ ++ if ((ret = ++ RTUSB_SUBMIT_URB ++ (pHTTXContext-> ++ pUrb)) != ++ 0) { ++ RTMP_INT_LOCK ++ (&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ pAd-> ++ BulkOutPending ++ [pAd-> ++ bulkResetPipeid] ++ = ++ FALSE; ++ pHTTXContext-> ++ IRPPending ++ = ++ FALSE; ++ pAd-> ++ watchDogTxPendingCnt ++ [pAd-> ++ bulkResetPipeid] ++ = 0; ++ RTMP_INT_UNLOCK ++ (&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ ++ DBGPRINT ++ (RT_DEBUG_ERROR, ++ ("CmdThread : CMDTHREAD_RESET_BULK_OUT: Submit Tx URB failed %d\n", ++ ret)); ++ } else { ++ RTMP_IRQ_LOCK ++ (&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ DBGPRINT_RAW ++ (RT_DEBUG_TRACE, ++ ("\tCMDTHREAD_RESET_BULK_OUT: TxContext[%d]:CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, pending=%d!\n", ++ pAd-> ++ bulkResetPipeid, ++ pHTTXContext-> ++ CurWritePosition, ++ pHTTXContext-> ++ NextBulkOutPosition, ++ pHTTXContext-> ++ ENextBulkOutPosition, ++ pHTTXContext-> ++ bCopySavePad, ++ pAd-> ++ BulkOutPending ++ [pAd-> ++ bulkResetPipeid])); ++ DBGPRINT_RAW ++ (RT_DEBUG_TRACE, ++ ("\t\tBulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", ++ pAd-> ++ BulkOutReq, ++ pAd-> ++ BulkOutComplete, ++ pAd-> ++ BulkOutCompleteOther)); ++ RTMP_IRQ_UNLOCK ++ (&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ DBGPRINT_RAW ++ (RT_DEBUG_TRACE, ++ ("\tCMDTHREAD_RESET_BULK_OUT: Submit Tx DATA URB for failed BulkReq(0x%lx) Done, status=%d!\n", ++ pAd-> ++ bulkResetReq ++ [pAd-> ++ bulkResetPipeid], ++ pHTTXContext-> ++ pUrb-> ++ status)); + +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tTX MGMT RECOVER Done!\n")); +- } +- else +- { +- pHTTXContext = &(pAd->TxContext[pAd->bulkResetPipeid]); +- //NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); +- RTMP_INT_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- if ( pAd->BulkOutPending[pAd->bulkResetPipeid] == FALSE) +- { +- pAd->BulkOutPending[pAd->bulkResetPipeid] = TRUE; +- pHTTXContext->IRPPending = TRUE; +- pAd->watchDogTxPendingCnt[pAd->bulkResetPipeid] = 1; +- +- // no matter what, clean the flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- +- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); +- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- { +- RTUSBInitHTTxDesc(pAd, pHTTXContext, pAd->bulkResetPipeid, pHTTXContext->BulkOutSize, (usb_complete_t)RTUSBBulkOutDataPacketComplete); +- +- if((ret = RTUSB_SUBMIT_URB(pHTTXContext->pUrb))!=0) +- { +- RTMP_INT_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- pAd->BulkOutPending[pAd->bulkResetPipeid] = FALSE; +- pHTTXContext->IRPPending = FALSE; +- pAd->watchDogTxPendingCnt[pAd->bulkResetPipeid] = 0; +- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- +- DBGPRINT(RT_DEBUG_ERROR, ("CmdThread : CMDTHREAD_RESET_BULK_OUT: Submit Tx URB failed %d\n", ret)); +- } +- else +- { +- RTMP_IRQ_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- DBGPRINT_RAW(RT_DEBUG_TRACE,("\tCMDTHREAD_RESET_BULK_OUT: TxContext[%d]:CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, pending=%d!\n", +- pAd->bulkResetPipeid, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, +- pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, pAd->BulkOutPending[pAd->bulkResetPipeid])); +- DBGPRINT_RAW(RT_DEBUG_TRACE,("\t\tBulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", +- pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther)); +- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tCMDTHREAD_RESET_BULK_OUT: Submit Tx DATA URB for failed BulkReq(0x%lx) Done, status=%d!\n", pAd->bulkResetReq[pAd->bulkResetPipeid], pHTTXContext->pUrb->status)); +- +- } + } + } +- else +- { +- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); +- //RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CmdThread : TX DATA RECOVER FAIL for BulkReq(0x%lx) because BulkOutPending[%d] is TRUE!\n", pAd->bulkResetReq[pAd->bulkResetPipeid], pAd->bulkResetPipeid)); +- if (pAd->bulkResetPipeid == 0) +- { +- UCHAR pendingContext = 0; +- PHT_TX_CONTEXT pHTTXContext = (PHT_TX_CONTEXT)(&pAd->TxContext[pAd->bulkResetPipeid ]); +- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)(pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa); +- PTX_CONTEXT pNULLContext = (PTX_CONTEXT)(&pAd->PsPollContext); +- PTX_CONTEXT pPsPollContext = (PTX_CONTEXT)(&pAd->NullContext); +- +- if (pHTTXContext->IRPPending) +- pendingContext |= 1; +- else if (pMLMEContext->IRPPending) +- pendingContext |= 2; +- else if (pNULLContext->IRPPending) +- pendingContext |= 4; +- else if (pPsPollContext->IRPPending) +- pendingContext |= 8; +- else +- pendingContext = 0; +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\tTX Occupied by %d!\n", pendingContext)); +- } +- +- // no matter what, clean the flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); +- +- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); ++ } else { ++ //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); ++ //RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); ++ ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("CmdThread : TX DATA RECOVER FAIL for BulkReq(0x%lx) because BulkOutPending[%d] is TRUE!\n", ++ pAd-> ++ bulkResetReq[pAd-> ++ bulkResetPipeid], ++ pAd-> ++ bulkResetPipeid)); ++ if (pAd-> ++ bulkResetPipeid == ++ 0) { ++ UCHAR ++ pendingContext ++ = 0; ++ PHT_TX_CONTEXT ++ pHTTXContext ++ = ++ (PHT_TX_CONTEXT) ++ (&pAd-> ++ TxContext ++ [pAd-> ++ bulkResetPipeid]); ++ PTX_CONTEXT ++ pMLMEContext ++ = ++ (PTX_CONTEXT) ++ (pAd-> ++ MgmtRing. ++ Cell[pAd-> ++ MgmtRing. ++ TxDmaIdx]. ++ AllocVa); ++ PTX_CONTEXT ++ pNULLContext ++ = ++ (PTX_CONTEXT) ++ (&pAd-> ++ PsPollContext); ++ PTX_CONTEXT ++ pPsPollContext ++ = ++ (PTX_CONTEXT) ++ (&pAd-> ++ NullContext); ++ ++ if (pHTTXContext->IRPPending) ++ pendingContext ++ |= ++ 1; ++ else if ++ (pMLMEContext-> ++ IRPPending) ++ pendingContext ++ |= ++ 2; ++ else if ++ (pNULLContext-> ++ IRPPending) ++ pendingContext ++ |= ++ 4; ++ else if ++ (pPsPollContext-> ++ IRPPending) ++ pendingContext ++ |= ++ 8; ++ else ++ pendingContext ++ = 0; + +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << pAd->bulkResetPipeid)); ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("\tTX Occupied by %d!\n", ++ pendingContext)); + } +- +- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- //RTUSBKickBulkOut(pAd); ++ // no matter what, clean the flag ++ RTMP_CLEAR_FLAG(pAd, ++ fRTMP_ADAPTER_BULKOUT_RESET); ++ ++ RTMP_INT_UNLOCK(&pAd-> ++ BulkOutLock ++ [pAd-> ++ bulkResetPipeid], ++ IrqFlags); ++ ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL ++ << ++ pAd-> ++ bulkResetPipeid)); + } + ++ RTMPDeQueuePacket(pAd, FALSE, ++ NUM_OF_TX_RING, ++ MAX_TX_PROCESS); ++ //RTUSBKickBulkOut(pAd); + } +- /* +- // Don't cancel BULKIN. +- while ((atomic_read(&pAd->PendingRx) > 0) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- if (atomic_read(&pAd->PendingRx) > 0) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!cancel it!\n")); +- RTUSBCancelPendingBulkInIRP(pAd); +- } +- RTMPusecDelay(100000); +- } +- +- if ((atomic_read(&pAd->PendingRx) == 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) +- { +- UCHAR i; +- RTUSBRxPacket(pAd); +- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index +- pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); +- +- pRxContext->pAd = pAd; +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pRxContext->Readable = FALSE; +- pRxContext->ReorderInUse = FALSE; +- +- } +- RTUSBBulkReceive(pAd); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTUSBBulkReceive\n")); +- }*/ +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_OUT<===\n")); +- break; + +- case CMDTHREAD_RESET_BULK_IN: +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n")); ++ } ++ /* ++ // Don't cancel BULKIN. ++ while ((atomic_read(&pAd->PendingRx) > 0) && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ { ++ if (atomic_read(&pAd->PendingRx) > 0) ++ { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!cancel it!\n")); ++ RTUSBCancelPendingBulkInIRP(pAd); ++ } ++ RTMPusecDelay(100000); ++ } ++ ++ if ((atomic_read(&pAd->PendingRx) == 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) ++ { ++ UCHAR i; ++ RTUSBRxPacket(pAd); ++ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index ++ pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer ++ for (i = 0; i < (RX_RING_SIZE); i++) ++ { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ ++ pRxContext->pAd = pAd; ++ pRxContext->InUse = FALSE; ++ pRxContext->IRPPending = FALSE; ++ pRxContext->Readable = FALSE; ++ pRxContext->ReorderInUse = FALSE; ++ ++ } ++ RTUSBBulkReceive(pAd); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTUSBBulkReceive\n")); ++ } */ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("CmdThread : CMDTHREAD_RESET_BULK_OUT<===\n")); ++ break; ++ ++ case CMDTHREAD_RESET_BULK_IN: ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n")); ++ ++ // All transfers must be aborted or cancelled before attempting to reset the pipe. ++ { ++ UINT32 MACValue; + +- // All transfers must be aborted or cancelled before attempting to reset the pipe. + { +- UINT32 MACValue; +- +- { + //while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- if((pAd->PendingRx > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ if ((pAd->PendingRx > 0) ++ && ++ (!RTMP_TEST_FLAG ++ (pAd, ++ fRTMP_ADAPTER_NIC_NOT_EXIST))) + { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!!\n")); +- RTUSBCancelPendingBulkInIRP(pAd); ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("BulkIn IRP Pending!!!\n")); ++ RTUSBCancelPendingBulkInIRP ++ (pAd); + RTMPusecDelay(100000); + pAd->PendingRx = 0; + } +- } +- +- // Wait 10ms before reading register. +- RTMPusecDelay(10000); +- ntStatus = RTUSBReadMACRegister(pAd, MAC_CSR0, &MACValue); +- +- if ((NT_SUCCESS(ntStatus) == TRUE) && +- (!(RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))))) +- { +- UCHAR i; ++ } + +- if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ // Wait 10ms before reading register. ++ RTMPusecDelay(10000); ++ ntStatus = ++ RTUSBReadMACRegister(pAd, MAC_CSR0, ++ &MACValue); ++ ++ if ((NT_SUCCESS(ntStatus) == TRUE) && ++ (!(RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_RESET_IN_PROGRESS ++ | fRTMP_ADAPTER_RADIO_OFF | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS ++ | ++ fRTMP_ADAPTER_NIC_NOT_EXIST))))) ++ { ++ UCHAR i; ++ ++ if (RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_RESET_IN_PROGRESS ++ | fRTMP_ADAPTER_RADIO_OFF ++ | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS ++ | ++ fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ break; ++ pAd->NextRxBulkInPosition = ++ pAd->RxContext[pAd-> ++ NextRxBulkInIndex]. ++ BulkInOffset; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BULK_IN_RESET: NBIIdx=0x%x,NBIRIdx=0x%x, BIRPos=0x%lx. BIReq=x%lx, BIComplete=0x%lx, BICFail0x%lx\n", ++ pAd-> ++ NextRxBulkInIndex, ++ pAd-> ++ NextRxBulkInReadIndex, ++ pAd-> ++ NextRxBulkInPosition, ++ pAd->BulkInReq, ++ pAd->BulkInComplete, ++ pAd-> ++ BulkInCompleteFail)); ++ for (i = 0; i < RX_RING_SIZE; ++ i++) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\tRxContext[%d]: IRPPending=%d, InUse=%d, Readable=%d!\n", ++ i, ++ pAd-> ++ RxContext[i]. ++ IRPPending, ++ pAd-> ++ RxContext[i]. ++ InUse, ++ pAd-> ++ RxContext[i]. ++ Readable)); ++ } ++ /* ++ ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("==========================================\n")); ++ ++ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index ++ pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer ++ for (i = 0; i < (RX_RING_SIZE); i++) ++ { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ ++ pRxContext->pAd = pAd; ++ pRxContext->InUse = FALSE; ++ pRxContext->IRPPending = FALSE; ++ pRxContext->Readable = FALSE; ++ pRxContext->ReorderInUse = FALSE; ++ ++ } */ ++ RTMP_CLEAR_FLAG(pAd, ++ fRTMP_ADAPTER_BULKIN_RESET); ++ for (i = 0; ++ i < ++ pAd->CommonCfg. ++ NumOfBulkInIRP; i++) { ++ //RTUSBBulkReceive(pAd); ++ PRX_CONTEXT pRxContext; ++ PURB pUrb; ++ int ret = 0; ++ unsigned long IrqFlags; ++ ++ RTMP_IRQ_LOCK(&pAd-> ++ BulkInLock, ++ IrqFlags); ++ pRxContext = ++ &(pAd-> ++ RxContext[pAd-> ++ NextRxBulkInIndex]); ++ if ((pAd->PendingRx > 0) ++ || (pRxContext-> ++ Readable == ++ TRUE) ++ || (pRxContext-> ++ InUse == ++ TRUE)) { ++ RTMP_IRQ_UNLOCK ++ (&pAd-> ++ BulkInLock, ++ IrqFlags); + break; +- pAd->NextRxBulkInPosition = pAd->RxContext[pAd->NextRxBulkInIndex].BulkInOffset; +- DBGPRINT(RT_DEBUG_TRACE, ("BULK_IN_RESET: NBIIdx=0x%x,NBIRIdx=0x%x, BIRPos=0x%lx. BIReq=x%lx, BIComplete=0x%lx, BICFail0x%lx\n", +- pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pAd->NextRxBulkInPosition, pAd->BulkInReq, pAd->BulkInComplete, pAd->BulkInCompleteFail)); +- for (i = 0; i < RX_RING_SIZE; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("\tRxContext[%d]: IRPPending=%d, InUse=%d, Readable=%d!\n" +- , i, pAd->RxContext[i].IRPPending, pAd->RxContext[i].InUse, pAd->RxContext[i].Readable)); +- } +- /* +- +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("==========================================\n")); +- +- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index +- pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); +- +- pRxContext->pAd = pAd; +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pRxContext->Readable = FALSE; +- pRxContext->ReorderInUse = FALSE; +- +- }*/ +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET); +- for (i = 0; i < pAd->CommonCfg.NumOfBulkInIRP; i++) +- { +- //RTUSBBulkReceive(pAd); +- PRX_CONTEXT pRxContext; +- PURB pUrb; +- int ret = 0; +- unsigned long IrqFlags; +- +- +- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); +- pRxContext = &(pAd->RxContext[pAd->NextRxBulkInIndex]); +- if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE) || (pRxContext->InUse == TRUE)) +- { +- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- break; +- } +- pRxContext->InUse = TRUE; +- pRxContext->IRPPending = TRUE; +- pAd->PendingRx++; +- pAd->BulkInReq++; +- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- +- // Init Rx context descriptor +- RTUSBInitRxDesc(pAd, pRxContext); +- pUrb = pRxContext->pUrb; +- if ((ret = RTUSB_SUBMIT_URB(pUrb))!=0) +- { // fail +- +- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pAd->PendingRx--; +- pAd->BulkInReq--; +- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- DBGPRINT(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB failed(%d), status=%d\n", ret, pUrb->status)); +- } +- else +- { // success +- //DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", +- // pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n", pUrb->status)); +- ASSERT((pRxContext->InUse == pRxContext->IRPPending)); +- } + } +- +- } +- else +- { +- // Card must be removed +- if (NT_SUCCESS(ntStatus) != TRUE) +- { +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Read Register Failed!Card must be removed!!\n\n")); ++ pRxContext->InUse = ++ TRUE; ++ pRxContext->IRPPending = ++ TRUE; ++ pAd->PendingRx++; ++ pAd->BulkInReq++; ++ RTMP_IRQ_UNLOCK(&pAd-> ++ BulkInLock, ++ IrqFlags); ++ ++ // Init Rx context descriptor ++ RTUSBInitRxDesc(pAd, ++ pRxContext); ++ pUrb = pRxContext->pUrb; ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { // fail ++ ++ RTMP_IRQ_LOCK ++ (&pAd-> ++ BulkInLock, ++ IrqFlags); ++ pRxContext-> ++ InUse = ++ FALSE; ++ pRxContext-> ++ IRPPending = ++ FALSE; ++ pAd-> ++ PendingRx--; ++ pAd-> ++ BulkInReq--; ++ RTMP_IRQ_UNLOCK ++ (&pAd-> ++ BulkInLock, ++ IrqFlags); ++ DBGPRINT ++ (RT_DEBUG_ERROR, ++ ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB failed(%d), status=%d\n", ++ ret, ++ pUrb-> ++ status)); ++ } else { // success ++ //DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", ++ // pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); ++ DBGPRINT_RAW ++ (RT_DEBUG_TRACE, ++ ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n", ++ pUrb-> ++ status)); ++ ASSERT((pRxContext->InUse == pRxContext->IRPPending)); + } +- else +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Cannot do bulk in because flags(0x%lx) on !\n", pAd->Flags)); + } +- } +- } +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN <===\n")); +- break; +- +- case CMDTHREAD_SET_ASIC_WCID: +- { +- RT_SET_ASIC_WCID SetAsicWcid; +- USHORT offset; +- UINT32 MACValue, MACRValue = 0; +- SetAsicWcid = *((PRT_SET_ASIC_WCID)(pData)); +- +- if (SetAsicWcid.WCID >= MAX_LEN_OF_MAC_TABLE) +- return; +- +- offset = MAC_WCID_BASE + ((UCHAR)SetAsicWcid.WCID)*HW_WCID_ENTRY_SIZE; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = %ld, SetTid = %lx, DeleteTid = %lx.\n", SetAsicWcid.WCID, SetAsicWcid.SetTid, SetAsicWcid.DeleteTid)); +- MACValue = (pAd->MacTab.Content[SetAsicWcid.WCID].Addr[3]<<24)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[2]<<16)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[1]<<8)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[0]); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("1-MACValue= %x,\n", MACValue)); +- RTUSBWriteMACRegister(pAd, offset, MACValue); +- // Read bitmask +- RTUSBReadMACRegister(pAd, offset+4, &MACRValue); +- if ( SetAsicWcid.DeleteTid != 0xffffffff) +- MACRValue &= (~SetAsicWcid.DeleteTid); +- if (SetAsicWcid.SetTid != 0xffffffff) +- MACRValue |= (SetAsicWcid.SetTid); +- MACRValue &= 0xffff0000; +- +- MACValue = (pAd->MacTab.Content[SetAsicWcid.WCID].Addr[5]<<8)+pAd->MacTab.Content[SetAsicWcid.WCID].Addr[4]; +- MACValue |= MACRValue; +- RTUSBWriteMACRegister(pAd, offset+4, MACValue); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-MACValue= %x,\n", MACValue)); +- } +- break; +- +- case CMDTHREAD_SET_ASIC_WCID_CIPHER: +- { +- RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; +- USHORT offset; +- UINT32 MACRValue = 0; +- SHAREDKEY_MODE_STRUC csr1; +- SetAsicWcidAttri = *((PRT_SET_ASIC_WCID_ATTRI)(pData)); +- +- if (SetAsicWcidAttri.WCID >= MAX_LEN_OF_MAC_TABLE) +- return; +- +- offset = MAC_WCID_ATTRIBUTE_BASE + ((UCHAR)SetAsicWcidAttri.WCID)*HW_WCID_ATTRI_SIZE; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("Cmd : CMDTHREAD_SET_ASIC_WCID_CIPHER : WCID = %ld, Cipher = %lx.\n", SetAsicWcidAttri.WCID, SetAsicWcidAttri.Cipher)); +- // Read bitmask +- RTUSBReadMACRegister(pAd, offset, &MACRValue); +- MACRValue = 0; +- MACRValue |= (((UCHAR)SetAsicWcidAttri.Cipher) << 1); +- +- RTUSBWriteMACRegister(pAd, offset, MACRValue); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-offset = %x , MACValue= %x,\n", offset, MACRValue)); +- +- offset = PAIRWISE_IVEIV_TABLE_BASE + ((UCHAR)SetAsicWcidAttri.WCID)*HW_IVEIV_ENTRY_SIZE; +- MACRValue = 0; +- if ( (SetAsicWcidAttri.Cipher <= CIPHER_WEP128)) +- MACRValue |= ( pAd->StaCfg.DefaultKeyId << 30); +- else +- MACRValue |= (0x20000000); +- RTUSBWriteMACRegister(pAd, offset, MACRValue); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-offset = %x , MACValue= %x,\n", offset, MACRValue)); +- +- // +- // Update cipher algorithm. WSTA always use BSS0 +- // +- // for adhoc mode only ,because wep status slow than add key, when use zero config +- if (pAd->StaCfg.BssType == BSS_ADHOC ) +- { +- offset = MAC_WCID_ATTRIBUTE_BASE; + +- RTUSBReadMACRegister(pAd, offset, &MACRValue); +- MACRValue &= (~0xe); +- MACRValue |= (((UCHAR)SetAsicWcidAttri.Cipher) << 1); +- +- RTUSBWriteMACRegister(pAd, offset, MACRValue); +- +- //Update group key cipher,,because wep status slow than add key, when use zero config +- RTUSBReadMACRegister(pAd, SHARED_KEY_MODE_BASE+4*(0/2), &csr1.word); +- +- csr1.field.Bss0Key0CipherAlg = SetAsicWcidAttri.Cipher; +- csr1.field.Bss0Key1CipherAlg = SetAsicWcidAttri.Cipher; +- +- RTUSBWriteMACRegister(pAd, SHARED_KEY_MODE_BASE+4*(0/2), csr1.word); ++ } else { ++ // Card must be removed ++ if (NT_SUCCESS(ntStatus) != ++ TRUE) { ++ RTMP_SET_FLAG(pAd, ++ fRTMP_ADAPTER_NIC_NOT_EXIST); ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("CMDTHREAD_RESET_BULK_IN: Read Register Failed!Card must be removed!!\n\n")); ++ } else { ++ DBGPRINT_RAW ++ (RT_DEBUG_ERROR, ++ ("CMDTHREAD_RESET_BULK_IN: Cannot do bulk in because flags(0x%lx) on !\n", ++ pAd->Flags)); + } + } +- break; +- +-//Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> +- case RT_CMD_SET_KEY_TABLE: //General call for AsicAddPairwiseKeyEntry() +- { +- RT_ADD_PAIRWISE_KEY_ENTRY KeyInfo; +- KeyInfo = *((PRT_ADD_PAIRWISE_KEY_ENTRY)(pData)); +- AsicAddPairwiseKeyEntry(pAd, +- KeyInfo.MacAddr, +- (UCHAR)KeyInfo.MacTabMatchWCID, +- &KeyInfo.CipherKey); ++ } ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("CmdThread : CMDTHREAD_RESET_BULK_IN <===\n")); ++ break; ++ ++ case CMDTHREAD_SET_ASIC_WCID: ++ { ++ RT_SET_ASIC_WCID SetAsicWcid; ++ USHORT offset; ++ UINT32 MACValue, MACRValue = 0; ++ SetAsicWcid = ++ *((PRT_SET_ASIC_WCID) (pData)); ++ ++ if (SetAsicWcid.WCID >= ++ MAX_LEN_OF_MAC_TABLE) ++ return; ++ ++ offset = ++ MAC_WCID_BASE + ++ ((UCHAR) SetAsicWcid.WCID) * ++ HW_WCID_ENTRY_SIZE; ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = %ld, SetTid = %lx, DeleteTid = %lx.\n", ++ SetAsicWcid.WCID, ++ SetAsicWcid.SetTid, ++ SetAsicWcid.DeleteTid)); ++ MACValue = ++ (pAd->MacTab. ++ Content[SetAsicWcid.WCID]. ++ Addr[3] << 24) + ++ (pAd->MacTab. ++ Content[SetAsicWcid.WCID]. ++ Addr[2] << 16) + ++ (pAd->MacTab. ++ Content[SetAsicWcid.WCID]. ++ Addr[1] << 8) + ++ (pAd->MacTab. ++ Content[SetAsicWcid.WCID].Addr[0]); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("1-MACValue= %x,\n", ++ MACValue)); ++ RTUSBWriteMACRegister(pAd, offset, ++ MACValue); ++ // Read bitmask ++ RTUSBReadMACRegister(pAd, offset + 4, ++ &MACRValue); ++ if (SetAsicWcid.DeleteTid != 0xffffffff) ++ MACRValue &= ++ (~SetAsicWcid.DeleteTid); ++ if (SetAsicWcid.SetTid != 0xffffffff) ++ MACRValue |= ++ (SetAsicWcid.SetTid); ++ MACRValue &= 0xffff0000; ++ ++ MACValue = ++ (pAd->MacTab. ++ Content[SetAsicWcid.WCID]. ++ Addr[5] << 8) + ++ pAd->MacTab.Content[SetAsicWcid. ++ WCID].Addr[4]; ++ MACValue |= MACRValue; ++ RTUSBWriteMACRegister(pAd, offset + 4, ++ MACValue); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("2-MACValue= %x,\n", ++ MACValue)); ++ } ++ break; ++ ++ case CMDTHREAD_SET_ASIC_WCID_CIPHER: ++ { ++ RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; ++ USHORT offset; ++ UINT32 MACRValue = 0; ++ SHAREDKEY_MODE_STRUC csr1; ++ SetAsicWcidAttri = ++ *((PRT_SET_ASIC_WCID_ATTRI) ++ (pData)); ++ ++ if (SetAsicWcidAttri.WCID >= ++ MAX_LEN_OF_MAC_TABLE) ++ return; ++ ++ offset = ++ MAC_WCID_ATTRIBUTE_BASE + ++ ((UCHAR) SetAsicWcidAttri.WCID) * ++ HW_WCID_ATTRI_SIZE; ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("Cmd : CMDTHREAD_SET_ASIC_WCID_CIPHER : WCID = %ld, Cipher = %lx.\n", ++ SetAsicWcidAttri.WCID, ++ SetAsicWcidAttri.Cipher)); ++ // Read bitmask ++ RTUSBReadMACRegister(pAd, offset, ++ &MACRValue); ++ MACRValue = 0; ++ MACRValue |= ++ (((UCHAR) SetAsicWcidAttri. ++ Cipher) << 1); ++ ++ RTUSBWriteMACRegister(pAd, offset, ++ MACRValue); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("2-offset = %x , MACValue= %x,\n", ++ offset, MACRValue)); ++ ++ offset = ++ PAIRWISE_IVEIV_TABLE_BASE + ++ ((UCHAR) SetAsicWcidAttri.WCID) * ++ HW_IVEIV_ENTRY_SIZE; ++ MACRValue = 0; ++ if ((SetAsicWcidAttri.Cipher <= ++ CIPHER_WEP128)) ++ MACRValue |= ++ (pAd->StaCfg. ++ DefaultKeyId << 30); ++ else ++ MACRValue |= (0x20000000); ++ RTUSBWriteMACRegister(pAd, offset, ++ MACRValue); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("2-offset = %x , MACValue= %x,\n", ++ offset, MACRValue)); ++ ++ // ++ // Update cipher algorithm. WSTA always use BSS0 ++ // ++ // for adhoc mode only ,because wep status slow than add key, when use zero config ++ if (pAd->StaCfg.BssType == BSS_ADHOC) { ++ offset = ++ MAC_WCID_ATTRIBUTE_BASE; ++ ++ RTUSBReadMACRegister(pAd, ++ offset, ++ &MACRValue); ++ MACRValue &= (~0xe); ++ MACRValue |= ++ (((UCHAR) SetAsicWcidAttri. ++ Cipher) << 1); ++ ++ RTUSBWriteMACRegister(pAd, ++ offset, ++ MACRValue); ++ ++ //Update group key cipher,,because wep status slow than add key, when use zero config ++ RTUSBReadMACRegister(pAd, ++ SHARED_KEY_MODE_BASE ++ + ++ 4 * (0 / ++ 2), ++ &csr1. ++ word); ++ ++ csr1.field.Bss0Key0CipherAlg = ++ SetAsicWcidAttri.Cipher; ++ csr1.field.Bss0Key1CipherAlg = ++ SetAsicWcidAttri.Cipher; ++ ++ RTUSBWriteMACRegister(pAd, ++ SHARED_KEY_MODE_BASE ++ + ++ 4 * (0 / ++ 2), ++ csr1. ++ word); + } +- break; ++ } ++ break; + +- case RT_CMD_SET_RX_WCID_TABLE: //General call for RTMPAddWcidAttributeEntry() +- { +- PMAC_TABLE_ENTRY pEntry ; +- UCHAR KeyIdx = 0; +- UCHAR CipherAlg = CIPHER_NONE; +- UCHAR ApIdx = BSS0; +- +- pEntry = (PMAC_TABLE_ENTRY)(pData); +- +- +- +- RTMPAddWcidAttributeEntry( +- pAd, +- ApIdx, +- KeyIdx, +- CipherAlg, +- pEntry); +- } +- break; ++//Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> ++ case RT_CMD_SET_KEY_TABLE: //General call for AsicAddPairwiseKeyEntry() ++ { ++ RT_ADD_PAIRWISE_KEY_ENTRY KeyInfo; ++ KeyInfo = ++ *((PRT_ADD_PAIRWISE_KEY_ENTRY) ++ (pData)); ++ AsicAddPairwiseKeyEntry(pAd, ++ KeyInfo.MacAddr, ++ (UCHAR) KeyInfo. ++ MacTabMatchWCID, ++ &KeyInfo. ++ CipherKey); ++ } ++ break; ++ ++ case RT_CMD_SET_RX_WCID_TABLE: //General call for RTMPAddWcidAttributeEntry() ++ { ++ PMAC_TABLE_ENTRY pEntry; ++ UCHAR KeyIdx = 0; ++ UCHAR CipherAlg = CIPHER_NONE; ++ UCHAR ApIdx = BSS0; ++ ++ pEntry = (PMAC_TABLE_ENTRY) (pData); ++ ++ RTMPAddWcidAttributeEntry(pAd, ++ ApIdx, ++ KeyIdx, ++ CipherAlg, ++ pEntry); ++ } ++ break; + //Benson modified for USB interface, avoid in interrupt when write key, 20080724 <-- + +- case CMDTHREAD_SET_CLIENT_MAC_ENTRY: +- { +- MAC_TABLE_ENTRY *pEntry; +- pEntry = (MAC_TABLE_ENTRY *)pData; ++ case CMDTHREAD_SET_CLIENT_MAC_ENTRY: ++ { ++ MAC_TABLE_ENTRY *pEntry; ++ pEntry = (MAC_TABLE_ENTRY *) pData; + ++ { ++ AsicRemovePairwiseKeyEntry(pAd, ++ pEntry-> ++ apidx, ++ (UCHAR) ++ pEntry-> ++ Aid); ++ if ((pEntry->AuthMode <= ++ Ndis802_11AuthModeAutoSwitch) ++ && (pEntry->WepStatus == ++ Ndis802_11Encryption1Enabled)) + { +- AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)pEntry->Aid); +- if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) +- { +- UINT32 uIV = 1; +- PUCHAR ptr; +- +- ptr = (PUCHAR) &uIV; +- *(ptr + 3) = (pAd->StaCfg.DefaultKeyId << 6); +- AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, uIV, 0); +- AsicUpdateWCIDAttribute(pAd, pEntry->Aid, BSS0, pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, FALSE); +- } +- else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone) +- { +- UINT32 uIV = 1; +- PUCHAR ptr; +- +- ptr = (PUCHAR) &uIV; +- *(ptr + 3) = (pAd->StaCfg.DefaultKeyId << 6); +- AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, uIV, 0); +- AsicUpdateWCIDAttribute(pAd, pEntry->Aid, BSS0, pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, FALSE); +- } +- else +- { +- // +- // Other case, disable engine. +- // Don't worry WPA key, we will add WPA Key after 4-Way handshaking. +- // +- USHORT offset; +- offset = MAC_WCID_ATTRIBUTE_BASE + (pEntry->Aid * HW_WCID_ATTRI_SIZE); +- // RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0 +- RTUSBWriteMACRegister(pAd, offset, 0); +- } ++ UINT32 uIV = 1; ++ PUCHAR ptr; ++ ++ ptr = (PUCHAR) & uIV; ++ *(ptr + 3) = ++ (pAd->StaCfg. ++ DefaultKeyId << 6); ++ AsicUpdateWCIDIVEIV(pAd, ++ pEntry-> ++ Aid, ++ uIV, ++ 0); ++ AsicUpdateWCIDAttribute ++ (pAd, pEntry->Aid, ++ BSS0, ++ pAd-> ++ SharedKey[BSS0] ++ [pAd->StaCfg. ++ DefaultKeyId]. ++ CipherAlg, FALSE); ++ } else if (pEntry->AuthMode == ++ Ndis802_11AuthModeWPANone) ++ { ++ UINT32 uIV = 1; ++ PUCHAR ptr; ++ ++ ptr = (PUCHAR) & uIV; ++ *(ptr + 3) = ++ (pAd->StaCfg. ++ DefaultKeyId << 6); ++ AsicUpdateWCIDIVEIV(pAd, ++ pEntry-> ++ Aid, ++ uIV, ++ 0); ++ AsicUpdateWCIDAttribute ++ (pAd, pEntry->Aid, ++ BSS0, ++ pAd-> ++ SharedKey[BSS0] ++ [pAd->StaCfg. ++ DefaultKeyId]. ++ CipherAlg, FALSE); ++ } else { ++ // ++ // Other case, disable engine. ++ // Don't worry WPA key, we will add WPA Key after 4-Way handshaking. ++ // ++ USHORT offset; ++ offset = ++ MAC_WCID_ATTRIBUTE_BASE ++ + ++ (pEntry->Aid * ++ HW_WCID_ATTRI_SIZE); ++ // RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0 ++ RTUSBWriteMACRegister ++ (pAd, offset, 0); + } +- +- AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); +- DBGPRINT(RT_DEBUG_TRACE, ("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", pEntry->Aid, +- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5])); + } +- break; ++ ++ AsicUpdateRxWCIDTable(pAd, pEntry->Aid, ++ pEntry->Addr); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", ++ pEntry->Aid, pEntry->Addr[0], ++ pEntry->Addr[1], ++ pEntry->Addr[2], ++ pEntry->Addr[3], ++ pEntry->Addr[4], ++ pEntry->Addr[5])); ++ } ++ break; + + // add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +- case CMDTHREAD_UPDATE_PROTECT: +- { +- AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0); +- } +- break; ++ case CMDTHREAD_UPDATE_PROTECT: ++ { ++ AsicUpdateProtect(pAd, 0, ++ (ALLN_SETPROTECT), ++ TRUE, 0); ++ } ++ break; + // end johnli + +- case OID_802_11_ADD_WEP: +- { +- UINT i; +- UINT32 KeyIdx; +- PNDIS_802_11_WEP pWepKey; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::OID_802_11_ADD_WEP \n")); ++ case OID_802_11_ADD_WEP: ++ { ++ UINT i; ++ UINT32 KeyIdx; ++ PNDIS_802_11_WEP pWepKey; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CmdThread::OID_802_11_ADD_WEP \n")); ++ ++ pWepKey = (PNDIS_802_11_WEP) pData; ++ KeyIdx = pWepKey->KeyIndex & 0x0fffffff; ++ ++ // it is a shared key ++ if ((KeyIdx >= 4) ++ || ((pWepKey->KeyLength != 5) ++ && (pWepKey->KeyLength != ++ 13))) { ++ NdisStatus = ++ NDIS_STATUS_INVALID_DATA; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("CmdThread::OID_802_11_ADD_WEP, INVALID_DATA!!\n")); ++ } else { ++ UCHAR CipherAlg; ++ pAd->SharedKey[BSS0][KeyIdx]. ++ KeyLen = ++ (UCHAR) pWepKey->KeyLength; ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0] ++ [KeyIdx].Key, ++ &pWepKey-> ++ KeyMaterial, ++ pWepKey-> ++ KeyLength); ++ CipherAlg = ++ (pAd-> ++ SharedKey[BSS0][KeyIdx]. ++ KeyLen == ++ 5) ? CIPHER_WEP64 : ++ CIPHER_WEP128; + +- pWepKey = (PNDIS_802_11_WEP)pData; +- KeyIdx = pWepKey->KeyIndex & 0x0fffffff; ++ // ++ // Change the WEP cipher to CKIP cipher if CKIP KP on. ++ // Funk UI or Meetinghouse UI will add ckip key from this path. ++ // + +- // it is a shared key +- if ((KeyIdx >= 4) || ((pWepKey->KeyLength != 5) && (pWepKey->KeyLength != 13))) +- { +- NdisStatus = NDIS_STATUS_INVALID_DATA; +- DBGPRINT(RT_DEBUG_ERROR, ("CmdThread::OID_802_11_ADD_WEP, INVALID_DATA!!\n")); ++ if (pAd->OpMode == OPMODE_STA) { ++ pAd->MacTab. ++ Content[BSSID_WCID]. ++ PairwiseKey. ++ CipherAlg = ++ pAd-> ++ SharedKey[BSS0] ++ [KeyIdx].CipherAlg; ++ pAd->MacTab. ++ Content[BSSID_WCID]. ++ PairwiseKey.KeyLen = ++ pAd-> ++ SharedKey[BSS0] ++ [KeyIdx].KeyLen; + } +- else +- { +- UCHAR CipherAlg; +- pAd->SharedKey[BSS0][KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength; +- NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength); +- CipherAlg = (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 5)? CIPHER_WEP64 : CIPHER_WEP128; +- +- // +- // Change the WEP cipher to CKIP cipher if CKIP KP on. +- // Funk UI or Meetinghouse UI will add ckip key from this path. +- // +- +- if (pAd->OpMode == OPMODE_STA) +- { +- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; +- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.KeyLen = pAd->SharedKey[BSS0][KeyIdx].KeyLen; +- } +- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CipherAlg; +- if (pWepKey->KeyIndex & 0x80000000) +- { +- // Default key for tx (shared key) +- UCHAR IVEIV[8]; +- UINT32 WCIDAttri, Value; +- USHORT offset, offset2; +- NdisZeroMemory(IVEIV, 8); +- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; +- // Add BSSID to WCTable. because this is Tx wep key. +- // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 +- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE; +- +- offset = MAC_WCID_ATTRIBUTE_BASE + (BSSID_WCID* HW_WCID_ATTRI_SIZE); +- RTUSBWriteMACRegister(pAd, offset, WCIDAttri); +- // 1. IV/EIV +- // Specify key index to find shared key. +- IVEIV[3] = (UCHAR)(KeyIdx<< 6); //WEP Eiv bit off. groupkey index is not 0 +- offset = PAIRWISE_IVEIV_TABLE_BASE + (BSS0Mcast_WCID * HW_IVEIV_ENTRY_SIZE); +- offset2 = PAIRWISE_IVEIV_TABLE_BASE + (BSSID_WCID* HW_IVEIV_ENTRY_SIZE); +- for (i=0; i<8;) +- { +- Value = IVEIV[i]; +- Value += (IVEIV[i+1]<<8); +- Value += (IVEIV[i+2]<<16); +- Value += (IVEIV[i+3]<<24); +- RTUSBWriteMACRegister(pAd, offset+i, Value); +- RTUSBWriteMACRegister(pAd, offset2+i, Value); +- i+=4; +- } +- +- // 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0 +- WCIDAttri = (pAd->SharedKey[BSS0][KeyIdx].CipherAlg<<1)|SHAREDKEYTABLE; +- offset = MAC_WCID_ATTRIBUTE_BASE + (BSS0Mcast_WCID* HW_WCID_ATTRI_SIZE); +- DBGPRINT(RT_DEBUG_TRACE, ("BSS0Mcast_WCID : offset = %x, WCIDAttri = %x\n", offset, WCIDAttri)); +- RTUSBWriteMACRegister(pAd, offset, WCIDAttri); +- ++ pAd->SharedKey[BSS0][KeyIdx]. ++ CipherAlg = CipherAlg; ++ if (pWepKey-> ++ KeyIndex & 0x80000000) { ++ // Default key for tx (shared key) ++ UCHAR IVEIV[8]; ++ UINT32 WCIDAttri, Value; ++ USHORT offset, offset2; ++ NdisZeroMemory(IVEIV, ++ 8); ++ pAd->StaCfg. ++ DefaultKeyId = ++ (UCHAR) KeyIdx; ++ // Add BSSID to WCTable. because this is Tx wep key. ++ // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 ++ WCIDAttri = ++ (CipherAlg << 1) | ++ SHAREDKEYTABLE; ++ ++ offset = ++ MAC_WCID_ATTRIBUTE_BASE ++ + ++ (BSSID_WCID * ++ HW_WCID_ATTRI_SIZE); ++ RTUSBWriteMACRegister ++ (pAd, offset, ++ WCIDAttri); ++ // 1. IV/EIV ++ // Specify key index to find shared key. ++ IVEIV[3] = (UCHAR) (KeyIdx << 6); //WEP Eiv bit off. groupkey index is not 0 ++ offset = ++ PAIRWISE_IVEIV_TABLE_BASE ++ + ++ (BSS0Mcast_WCID * ++ HW_IVEIV_ENTRY_SIZE); ++ offset2 = ++ PAIRWISE_IVEIV_TABLE_BASE ++ + ++ (BSSID_WCID * ++ HW_IVEIV_ENTRY_SIZE); ++ for (i = 0; i < 8;) { ++ Value = ++ IVEIV[i]; ++ Value += ++ (IVEIV ++ [i + ++ 1] << 8); ++ Value += ++ (IVEIV ++ [i + ++ 2] << 16); ++ Value += ++ (IVEIV ++ [i + ++ 3] << 24); ++ RTUSBWriteMACRegister ++ (pAd, ++ offset + i, ++ Value); ++ RTUSBWriteMACRegister ++ (pAd, ++ offset2 + ++ i, Value); ++ i += 4; + } +- AsicAddSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx, CipherAlg, pWepKey->KeyMaterial, NULL, NULL); +- DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::OID_802_11_ADD_WEP (KeyIdx=%d, Len=%d-byte)\n", KeyIdx, pWepKey->KeyLength)); +- } +- } +- break; +- +- case CMDTHREAD_802_11_COUNTER_MEASURE: +- break; +- +- case CMDTHREAD_SET_GROUP_KEY: +- WpaStaGroupKeySetting(pAd); +- break; + +- case CMDTHREAD_SET_PAIRWISE_KEY: +- WpaStaPairwiseKeySetting(pAd); +- break; ++ // 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0 ++ WCIDAttri = ++ (pAd-> ++ SharedKey[BSS0] ++ [KeyIdx]. ++ CipherAlg << 1) | ++ SHAREDKEYTABLE; ++ offset = ++ MAC_WCID_ATTRIBUTE_BASE ++ + ++ (BSS0Mcast_WCID * ++ HW_WCID_ATTRI_SIZE); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BSS0Mcast_WCID : offset = %x, WCIDAttri = %x\n", ++ offset, ++ WCIDAttri)); ++ RTUSBWriteMACRegister ++ (pAd, offset, ++ WCIDAttri); + +- case CMDTHREAD_SET_PSM_BIT: +- { +- USHORT *pPsm = (USHORT *)pData; +- MlmeSetPsmBit(pAd, *pPsm); ++ } ++ AsicAddSharedKeyEntry(pAd, BSS0, ++ (UCHAR) ++ KeyIdx, ++ CipherAlg, ++ pWepKey-> ++ KeyMaterial, ++ NULL, ++ NULL); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CmdThread::OID_802_11_ADD_WEP (KeyIdx=%d, Len=%d-byte)\n", ++ KeyIdx, ++ pWepKey->KeyLength)); + } +- break; +- case CMDTHREAD_FORCE_WAKE_UP: +- AsicForceWakeup(pAd, TRUE); +- break; +- +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("--> Control Thread !! ERROR !! Unknown(cmdqelmt->command=0x%x) !! \n", cmdqelmt->command)); +- break; ++ } ++ break; ++ ++ case CMDTHREAD_802_11_COUNTER_MEASURE: ++ break; ++ ++ case CMDTHREAD_SET_GROUP_KEY: ++ WpaStaGroupKeySetting(pAd); ++ break; ++ ++ case CMDTHREAD_SET_PAIRWISE_KEY: ++ WpaStaPairwiseKeySetting(pAd); ++ break; ++ ++ case CMDTHREAD_SET_PSM_BIT: ++ { ++ USHORT *pPsm = (USHORT *) pData; ++ MlmeSetPsmBit(pAd, *pPsm); ++ } ++ break; ++ case CMDTHREAD_FORCE_WAKE_UP: ++ AsicForceWakeup(pAd, TRUE); ++ break; ++ ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("--> Control Thread !! ERROR !! Unknown(cmdqelmt->command=0x%x) !! \n", ++ cmdqelmt->command)); ++ break; + } + } + +- if (cmdqelmt->CmdFromNdis == TRUE) +- { +- if (cmdqelmt->buffer != NULL) ++ if (cmdqelmt->CmdFromNdis == TRUE) { ++ if (cmdqelmt->buffer != NULL) + os_free_mem(pAd, cmdqelmt->buffer); + os_free_mem(pAd, cmdqelmt); +- } +- else +- { +- if ((cmdqelmt->buffer != NULL) && (cmdqelmt->bufferlength != 0)) ++ } else { ++ if ((cmdqelmt->buffer != NULL) ++ && (cmdqelmt->bufferlength != 0)) + os_free_mem(pAd, cmdqelmt->buffer); + os_free_mem(pAd, cmdqelmt); + } +- } /* end of while */ ++ } /* end of while */ + } + + #endif // RTMP_MAC_USB // +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch b/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch new file mode 100644 index 000000000..a7a096b01 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch @@ -0,0 +1,47154 @@ +From 35e37448ece375013cbd87318273f597459d4b0a Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:13 -0800 +Subject: [PATCH 19/42] Staging: rt28x0: run common/*.c files through Lindent + +commit 96b3c83dc27dca271594463aa99e166974a91171 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/action.c | 610 ++-- + drivers/staging/rt2860/common/ba_action.c | 1454 +++---- + drivers/staging/rt2860/common/cmm_aes.c | 1103 +++--- + drivers/staging/rt2860/common/cmm_asic.c | 2443 +++++----- + drivers/staging/rt2860/common/cmm_cfg.c | 216 +- + drivers/staging/rt2860/common/cmm_data.c | 1808 ++++----- + drivers/staging/rt2860/common/cmm_data_pci.c | 711 ++-- + drivers/staging/rt2860/common/cmm_data_usb.c | 755 ++-- + drivers/staging/rt2860/common/cmm_info.c | 1056 +++--- + drivers/staging/rt2860/common/cmm_mac_pci.c | 1641 ++++---- + drivers/staging/rt2860/common/cmm_mac_usb.c | 703 ++-- + drivers/staging/rt2860/common/cmm_sanity.c | 1606 ++++---- + drivers/staging/rt2860/common/cmm_sync.c | 734 ++-- + drivers/staging/rt2860/common/cmm_tkip.c | 627 ++-- + drivers/staging/rt2860/common/cmm_wep.c | 186 +- + drivers/staging/rt2860/common/cmm_wpa.c | 2920 ++++++------- + drivers/staging/rt2860/common/crypt_hmac.c | 231 +- + drivers/staging/rt2860/common/crypt_md5.c | 373 +- + drivers/staging/rt2860/common/crypt_sha2.c | 271 +- + drivers/staging/rt2860/common/dfs.c | 12 +- + drivers/staging/rt2860/common/ee_efuse.c | 234 +- + drivers/staging/rt2860/common/ee_prom.c | 91 +- + drivers/staging/rt2860/common/eeprom.c | 56 +- + drivers/staging/rt2860/common/mlme.c | 6147 +++++++++++++------------- + drivers/staging/rt2860/common/rt_channel.c | 2585 +++++++----- + drivers/staging/rt2860/common/rt_rf.c | 86 +- + drivers/staging/rt2860/common/rtmp_init.c | 2375 +++++------ + drivers/staging/rt2860/common/rtmp_mcu.c | 178 +- + drivers/staging/rt2860/common/rtmp_timer.c | 119 +- + drivers/staging/rt2860/common/spectrum.c | 1591 ++++---- + 30 files changed, 16243 insertions(+), 16679 deletions(-) + +diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c +index 5593966..f6efdb6 100644 +--- a/drivers/staging/rt2860/common/action.c ++++ b/drivers/staging/rt2860/common/action.c +@@ -39,10 +39,7 @@ + #include "../rt_config.h" + #include "action.h" + +- +-static VOID ReservedAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -61,75 +58,89 @@ static VOID ReservedAction( + MT2_CLS3ERR cls3err_action + ========================================================================== + */ +-VOID ActionStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) ++VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, ++ OUT STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(S, (STATE_MACHINE_FUNC *)Trans, MAX_ACT_STATE, MAX_ACT_MSG, (STATE_MACHINE_FUNC)Drop, ACT_IDLE, ACT_MACHINE_BASE); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_SPECTRUM_CATE, (STATE_MACHINE_FUNC)PeerSpectrumAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_QOS_CATE, (STATE_MACHINE_FUNC)PeerQOSAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, (STATE_MACHINE_FUNC)ReservedAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_BA_CATE, (STATE_MACHINE_FUNC)PeerBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_HT_CATE, (STATE_MACHINE_FUNC)PeerHTAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ADD_BA_CATE, (STATE_MACHINE_FUNC)MlmeADDBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ORI_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_REC_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_PUBLIC_CATE, (STATE_MACHINE_FUNC)PeerPublicAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_RM_CATE, (STATE_MACHINE_FUNC)PeerRMAction); +- +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_QOS_CATE, (STATE_MACHINE_FUNC)MlmeQOSAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_MLME_DLS_CATE, (STATE_MACHINE_FUNC)MlmeDLSAction); +- StateMachineSetAction(S, ACT_IDLE, MT2_ACT_INVALID, (STATE_MACHINE_FUNC)MlmeInvalidAction); ++ StateMachineInit(S, (STATE_MACHINE_FUNC *) Trans, MAX_ACT_STATE, ++ MAX_ACT_MSG, (STATE_MACHINE_FUNC) Drop, ACT_IDLE, ++ ACT_MACHINE_BASE); ++ ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_SPECTRUM_CATE, ++ (STATE_MACHINE_FUNC) PeerSpectrumAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_QOS_CATE, ++ (STATE_MACHINE_FUNC) PeerQOSAction); ++ ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, ++ (STATE_MACHINE_FUNC) ReservedAction); ++ ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_BA_CATE, ++ (STATE_MACHINE_FUNC) PeerBAAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_HT_CATE, ++ (STATE_MACHINE_FUNC) PeerHTAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ADD_BA_CATE, ++ (STATE_MACHINE_FUNC) MlmeADDBAAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ORI_DELBA_CATE, ++ (STATE_MACHINE_FUNC) MlmeDELBAAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_MLME_REC_DELBA_CATE, ++ (STATE_MACHINE_FUNC) MlmeDELBAAction); ++ ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_PUBLIC_CATE, ++ (STATE_MACHINE_FUNC) PeerPublicAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_RM_CATE, ++ (STATE_MACHINE_FUNC) PeerRMAction); ++ ++ StateMachineSetAction(S, ACT_IDLE, MT2_MLME_QOS_CATE, ++ (STATE_MACHINE_FUNC) MlmeQOSAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_MLME_DLS_CATE, ++ (STATE_MACHINE_FUNC) MlmeDLSAction); ++ StateMachineSetAction(S, ACT_IDLE, MT2_ACT_INVALID, ++ (STATE_MACHINE_FUNC) MlmeInvalidAction); + } + +-VOID MlmeADDBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- ++VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_ADDBA_REQ_STRUCT *pInfo; +- UCHAR Addr[6]; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; +- FRAME_ADDBA_REQ Frame; +- ULONG FrameLen; +- BA_ORI_ENTRY *pBAEntry = NULL; +- +- pInfo = (MLME_ADDBA_REQ_STRUCT *)Elem->Msg; ++ UCHAR Addr[6]; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG Idx; ++ FRAME_ADDBA_REQ Frame; ++ ULONG FrameLen; ++ BA_ORI_ENTRY *pBAEntry = NULL; ++ ++ pInfo = (MLME_ADDBA_REQ_STRUCT *) Elem->Msg; + NdisZeroMemory(&Frame, sizeof(FRAME_ADDBA_REQ)); + +- if(MlmeAddBAReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr)) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - MlmeADDBAAction() allocate memory failed \n")); ++ if (MlmeAddBAReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr)) { ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - MlmeADDBAAction() allocate memory failed \n")); + return; + } + // 1. find entry +- Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; +- if (Idx == 0) +- { ++ Idx = ++ pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; ++ if (Idx == 0) { + MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() can't find BAOriEntry \n")); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BA - MlmeADDBAAction() can't find BAOriEntry \n")); + return; +- } +- else +- { +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; ++ } else { ++ pBAEntry = &pAd->BATable.BAOriEntry[Idx]; + } + + { + if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); ++ ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, ++ pAd->CurrentAddress, ++ pAd->CommonCfg.Bssid); + else +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pInfo->pAddr); ++ ActHeaderInit(pAd, &Frame.Hdr, ++ pAd->CommonCfg.Bssid, ++ pAd->CurrentAddress, ++ pInfo->pAddr); + } + + Frame.Category = CATEGORY_BA; +@@ -141,22 +152,29 @@ VOID MlmeADDBAAction( + Frame.Token = pInfo->Token; + Frame.TimeOutValue = pInfo->TimeOutValue; + Frame.BaStartSeq.field.FragNum = 0; +- Frame.BaStartSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; ++ Frame.BaStartSeq.field.StartSeq = ++ pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; + +- *(USHORT *)(&Frame.BaParm) = cpu2le16(*(USHORT *)(&Frame.BaParm)); ++ *(USHORT *) (&Frame.BaParm) = ++ cpu2le16(*(USHORT *) (&Frame.BaParm)); + Frame.TimeOutValue = cpu2le16(Frame.TimeOutValue); + Frame.BaStartSeq.word = cpu2le16(Frame.BaStartSeq.word); + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_REQ), &Frame, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_ADDBA_REQ), &Frame, END_OF_ARGS); + +- MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[pInfo->TID]), pOutBuffer, FrameLen); ++ MiniportMMRequest(pAd, ++ (MGMT_USE_QUEUE_FLAG | ++ MapUserPriorityToAccessCategory[pInfo->TID]), ++ pOutBuffer, FrameLen); + + MlmeFreeMemory(pAd, pOutBuffer); + +- DBGPRINT(RT_DEBUG_TRACE, ("BA - Send ADDBA request. StartSeq = %x, FrameLen = %ld. BufSize = %d\n", Frame.BaStartSeq.field.StartSeq, FrameLen, Frame.BaParm.BufSize)); +- } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - Send ADDBA request. StartSeq = %x, FrameLen = %ld. BufSize = %d\n", ++ Frame.BaStartSeq.field.StartSeq, FrameLen, ++ Frame.BaParm.BufSize)); ++ } + } + + /* +@@ -170,282 +188,271 @@ VOID MlmeADDBAAction( + + ========================================================================== + */ +-VOID MlmeDELBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_DELBA_REQ_STRUCT *pInfo; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; +- FRAME_DELBA_REQ Frame; +- ULONG FrameLen; +- FRAME_BAR FrameBar; +- +- pInfo = (MLME_DELBA_REQ_STRUCT *)Elem->Msg; ++ PUCHAR pOutBuffer = NULL; ++ PUCHAR pOutBuffer2 = NULL; ++ NDIS_STATUS NStatus; ++ ULONG Idx; ++ FRAME_DELBA_REQ Frame; ++ ULONG FrameLen; ++ FRAME_BAR FrameBar; ++ ++ pInfo = (MLME_DELBA_REQ_STRUCT *) Elem->Msg; + // must send back DELBA + NdisZeroMemory(&Frame, sizeof(FRAME_DELBA_REQ)); +- DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeDELBAAction(), Initiator(%d) \n", pInfo->Initiator)); +- +- if(MlmeDelBAReqSanity(pAd, Elem->Msg, Elem->MsgLen)) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeDELBAAction() allocate memory failed 1. \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==> MlmeDELBAAction(), Initiator(%d) \n", pInfo->Initiator)); ++ ++ if (MlmeDelBAReqSanity(pAd, Elem->Msg, Elem->MsgLen)) { ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BA - MlmeDELBAAction() allocate memory failed 1. \n")); + return; + } + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { + MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR, ("BA - MlmeDELBAAction() allocate memory failed 2. \n")); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BA - MlmeDELBAAction() allocate memory failed 2. \n")); + return; + } +- + // SEND BAR (Send BAR to refresh peer reordering buffer.) +- Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; +- +- BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress); +- +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL funciton. +- FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pInfo->TID; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.ACKPolicy = IMMED_BA; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.Compressed = 1; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.MTID = 0; // make sure sequence not clear in DEL funciton. +- +- MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); ++ Idx = ++ pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; ++ ++ BarHeaderInit(pAd, &FrameBar, ++ pAd->MacTab.Content[pInfo->Wcid].Addr, ++ pAd->CurrentAddress); ++ ++ FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL funciton. ++ FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.TID = pInfo->TID; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.ACKPolicy = IMMED_BA; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.Compressed = 1; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.MTID = 0; // make sure sequence not clear in DEL funciton. ++ ++ MakeOutgoingFrame(pOutBuffer2, &FrameLen, ++ sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer2); +- DBGPRINT(RT_DEBUG_TRACE,("BA - MlmeDELBAAction() . Send BAR to refresh peer reordering buffer \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - MlmeDELBAAction() . Send BAR to refresh peer reordering buffer \n")); + + // SEND DELBA FRAME + FrameLen = 0; + + { + if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); ++ ActHeaderInit(pAd, &Frame.Hdr, ++ pAd->MacTab.Content[pInfo->Wcid]. ++ Addr, pAd->CurrentAddress, ++ pAd->CommonCfg.Bssid); + else +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[pInfo->Wcid].Addr); ++ ActHeaderInit(pAd, &Frame.Hdr, ++ pAd->CommonCfg.Bssid, ++ pAd->CurrentAddress, ++ pAd->MacTab.Content[pInfo->Wcid]. ++ Addr); + } + + Frame.Category = CATEGORY_BA; + Frame.Action = DELBA; + Frame.DelbaParm.Initiator = pInfo->Initiator; + Frame.DelbaParm.TID = pInfo->TID; +- Frame.ReasonCode = 39; // Time Out +- *(USHORT *)(&Frame.DelbaParm) = cpu2le16(*(USHORT *)(&Frame.DelbaParm)); ++ Frame.ReasonCode = 39; // Time Out ++ *(USHORT *) (&Frame.DelbaParm) = ++ cpu2le16(*(USHORT *) (&Frame.DelbaParm)); + Frame.ReasonCode = cpu2le16(Frame.ReasonCode); + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_DELBA_REQ), &Frame, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_DELBA_REQ), &Frame, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_TRACE, ("BA - MlmeDELBAAction() . 3 DELBA sent. Initiator(%d)\n", pInfo->Initiator)); +- } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - MlmeDELBAAction() . 3 DELBA sent. Initiator(%d)\n", ++ pInfo->Initiator)); ++ } + } + +-VOID MlmeQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID MlmeDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID MlmeInvalidAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //PUCHAR pOutBuffer = NULL; ++ //PUCHAR pOutBuffer = NULL; + //Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 + } + +-VOID PeerQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID PeerBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; +- +- switch(Action) +- { +- case ADDBA_REQ: +- PeerAddBAReqAction(pAd,Elem); +- break; +- case ADDBA_RESP: +- PeerAddBARspAction(pAd,Elem); +- break; +- case DELBA: +- PeerDelBAAction(pAd,Elem); +- break; ++ UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; ++ ++ switch (Action) { ++ case ADDBA_REQ: ++ PeerAddBAReqAction(pAd, Elem); ++ break; ++ case ADDBA_RESP: ++ PeerAddBARspAction(pAd, Elem); ++ break; ++ case DELBA: ++ PeerDelBAAction(pAd, Elem); ++ break; + } + } + +-VOID PeerPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + } + +- +-static VOID ReservedAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + UCHAR Category; + +- if (Elem->MsgLen <= LENGTH_802_11) +- { ++ if (Elem->MsgLen <= LENGTH_802_11) { + return; + } + + Category = Elem->Msg[LENGTH_802_11]; +- DBGPRINT(RT_DEBUG_TRACE,("Rcv reserved category(%d) Action Frame\n", Category)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Rcv reserved category(%d) Action Frame\n", Category)); + hex_dump("Reserved Action Frame", &Elem->Msg[0], Elem->MsgLen); + } + +-VOID PeerRMAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- ++VOID PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + return; + } + +-static VOID respond_ht_information_exchange_action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- FRAME_HT_INFO HTINFOframe, *pFrame; +- UCHAR *pAddr; +- ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen; ++ FRAME_HT_INFO HTINFOframe, *pFrame; ++ UCHAR *pAddr; + + // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory + +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - respond_ht_information_exchange_action() allocate memory failed \n")); ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ACTION - respond_ht_information_exchange_action() allocate memory failed \n")); + return; + } +- + // get RA +- pFrame = (FRAME_HT_INFO *) &Elem->Msg[0]; ++ pFrame = (FRAME_HT_INFO *) & Elem->Msg[0]; + pAddr = pFrame->Hdr.Addr2; + + NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO)); + // 2-1. Prepare ADDBA Response frame. + { + if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); ++ ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, ++ pAd->CurrentAddress, ++ pAd->CommonCfg.Bssid); + else +- ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr); ++ ActHeaderInit(pAd, &HTINFOframe.Hdr, ++ pAd->CommonCfg.Bssid, pAd->CurrentAddress, ++ pAddr); + } + + HTINFOframe.Category = CATEGORY_HT; + HTINFOframe.Action = HT_INFO_EXCHANGE; + HTINFOframe.HT_Info.Request = 0; +- HTINFOframe.HT_Info.Forty_MHz_Intolerant = pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant; +- HTINFOframe.HT_Info.STA_Channel_Width = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; ++ HTINFOframe.HT_Info.Forty_MHz_Intolerant = ++ pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant; ++ HTINFOframe.HT_Info.STA_Channel_Width = ++ pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_HT_INFO), &HTINFOframe, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_HT_INFO), &HTINFOframe, END_OF_ARGS); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } + +-VOID PeerHTAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; ++ UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; + + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + +- switch(Action) +- { +- case NOTIFY_BW_ACTION: +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Notify Channel bandwidth action----> \n")); +- +- if(pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) +- { +- // Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps +- // sending BW_Notify Action frame, and cause us to linkup and linkdown. +- // In legacy mode, don't need to parse HT action frame. +- DBGPRINT(RT_DEBUG_TRACE,("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n", +- Elem->Msg[LENGTH_802_11+2] )); +- break; +- } +- +- if (Elem->Msg[LENGTH_802_11+2] == 0) // 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. +- pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0; +- ++ switch (Action) { ++ case NOTIFY_BW_ACTION: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ACTION - HT Notify Channel bandwidth action----> \n")); ++ ++ if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) { ++ // Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps ++ // sending BW_Notify Action frame, and cause us to linkup and linkdown. ++ // In legacy mode, don't need to parse HT action frame. ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n", ++ Elem->Msg[LENGTH_802_11 + 2])); + break; +- case SMPS_ACTION: +- // 7.3.1.25 +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - SMPS action----> \n")); +- if (((Elem->Msg[LENGTH_802_11+2]&0x1) == 0)) +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_ENABLE; +- } +- else if (((Elem->Msg[LENGTH_802_11+2]&0x2) == 0)) +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_STATIC; +- } +- else +- { +- pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_DYNAMIC; +- } ++ } + +- DBGPRINT(RT_DEBUG_TRACE,("Aid(%d) MIMO PS = %d\n", Elem->Wcid, pAd->MacTab.Content[Elem->Wcid].MmpsMode)); +- // rt2860c : add something for smps change. +- break; ++ if (Elem->Msg[LENGTH_802_11 + 2] == 0) // 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. ++ pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0; ++ ++ break; ++ case SMPS_ACTION: ++ // 7.3.1.25 ++ DBGPRINT(RT_DEBUG_TRACE, ("ACTION - SMPS action----> \n")); ++ if (((Elem->Msg[LENGTH_802_11 + 2] & 0x1) == 0)) { ++ pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_ENABLE; ++ } else if (((Elem->Msg[LENGTH_802_11 + 2] & 0x2) == 0)) { ++ pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_STATIC; ++ } else { ++ pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_DYNAMIC; ++ } + +- case SETPCO_ACTION: +- break; +- case MIMO_CHA_MEASURE_ACTION: +- break; +- case HT_INFO_EXCHANGE: +- { +- HT_INFORMATION_OCTET *pHT_info; +- +- pHT_info = (HT_INFORMATION_OCTET *) &Elem->Msg[LENGTH_802_11+2]; +- // 7.4.8.10 +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Information Exchange action----> \n")); +- if (pHT_info->Request) +- { +- respond_ht_information_exchange_action(pAd, Elem); +- } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Aid(%d) MIMO PS = %d\n", Elem->Wcid, ++ pAd->MacTab.Content[Elem->Wcid].MmpsMode)); ++ // rt2860c : add something for smps change. ++ break; ++ ++ case SETPCO_ACTION: ++ break; ++ case MIMO_CHA_MEASURE_ACTION: ++ break; ++ case HT_INFO_EXCHANGE: ++ { ++ HT_INFORMATION_OCTET *pHT_info; ++ ++ pHT_info = ++ (HT_INFORMATION_OCTET *) & Elem->Msg[LENGTH_802_11 + ++ 2]; ++ // 7.4.8.10 ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ACTION - HT Information Exchange action----> \n")); ++ if (pHT_info->Request) { ++ respond_ht_information_exchange_action(pAd, ++ Elem); + } +- break; ++ } ++ break; + } + } + +- + /* + ========================================================================== + Description: +@@ -460,80 +467,79 @@ VOID PeerHTAction( + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-VOID ORIBATimerTimeout( +- IN PRTMP_ADAPTER pAd) ++VOID ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) + { +- MAC_TABLE_ENTRY *pEntry; +- INT i, total; +- UCHAR TID; ++ MAC_TABLE_ENTRY *pEntry; ++ INT i, total; ++ UCHAR TID; + + total = pAd->MacTab.Size * NUM_OF_TID; + +- for (i = 1; ((i 0)) ; i++) +- { +- if (pAd->BATable.BAOriEntry[i].ORI_BA_Status == Originator_Done) +- { +- pEntry = &pAd->MacTab.Content[pAd->BATable.BAOriEntry[i].Wcid]; ++ for (i = 1; ((i < MAX_LEN_OF_BA_ORI_TABLE) && (total > 0)); i++) { ++ if (pAd->BATable.BAOriEntry[i].ORI_BA_Status == Originator_Done) { ++ pEntry = ++ &pAd->MacTab.Content[pAd->BATable.BAOriEntry[i]. ++ Wcid]; + TID = pAd->BATable.BAOriEntry[i].TID; + +- ASSERT(pAd->BATable.BAOriEntry[i].Wcid < MAX_LEN_OF_MAC_TABLE); ++ ASSERT(pAd->BATable.BAOriEntry[i].Wcid < ++ MAX_LEN_OF_MAC_TABLE); + } +- total --; ++ total--; + } + } + +- +-VOID SendRefreshBAR( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry) ++VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + { +- FRAME_BAR FrameBar; +- ULONG FrameLen; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- USHORT Sequence; +- UCHAR i, TID; +- USHORT idx; +- BA_ORI_ENTRY *pBAEntry; +- +- for (i = 0; i BAOriWcidArray[i]; +- if (idx == 0) +- { ++ if (idx == 0) { + continue; + } + pBAEntry = &pAd->BATable.BAOriEntry[idx]; + +- if (pBAEntry->ORI_BA_Status == Originator_Done) +- { ++ if (pBAEntry->ORI_BA_Status == Originator_Done) { + TID = pBAEntry->TID; + + ASSERT(pBAEntry->Wcid < MAX_LEN_OF_MAC_TABLE); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BA - MlmeADDBAAction() allocate memory failed \n")); + return; + } + + Sequence = pEntry->TxSeq[TID]; + +- BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress); ++ BarHeaderInit(pAd, &FrameBar, pEntry->Addr, ++ pAd->CurrentAddress); + +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = TID; // make sure sequence not clear in DEL funciton. ++ FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. ++ FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.TID = TID; // make sure sequence not clear in DEL funciton. + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_BAR), &FrameBar, ++ END_OF_ARGS); + //if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) + if (1) // Now we always send BAR. + { + //MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen); +- MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[TID]), pOutBuffer, FrameLen); ++ MiniportMMRequest(pAd, ++ (MGMT_USE_QUEUE_FLAG | ++ MapUserPriorityToAccessCategory ++ [TID]), pOutBuffer, ++ FrameLen); + + } + MlmeFreeMemory(pAd, pOutBuffer); +@@ -541,43 +547,36 @@ VOID SendRefreshBAR( + } + } + +-VOID ActHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, +- IN PUCHAR Addr2, +- IN PUCHAR Addr3) ++VOID ActHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PHEADER_802_11 pHdr80211, ++ IN PUCHAR Addr1, IN PUCHAR Addr2, IN PUCHAR Addr3) + { +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); +- pHdr80211->FC.Type = BTYPE_MGMT; +- pHdr80211->FC.SubType = SUBTYPE_ACTION; ++ NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); ++ pHdr80211->FC.Type = BTYPE_MGMT; ++ pHdr80211->FC.SubType = SUBTYPE_ACTION; + +- COPY_MAC_ADDR(pHdr80211->Addr1, Addr1); ++ COPY_MAC_ADDR(pHdr80211->Addr1, Addr1); + COPY_MAC_ADDR(pHdr80211->Addr2, Addr2); +- COPY_MAC_ADDR(pHdr80211->Addr3, Addr3); ++ COPY_MAC_ADDR(pHdr80211->Addr3, Addr3); + } + +-VOID BarHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, +- IN PUCHAR pDA, +- IN PUCHAR pSA) ++VOID BarHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PFRAME_BAR pCntlBar, IN PUCHAR pDA, IN PUCHAR pSA) + { + NdisZeroMemory(pCntlBar, sizeof(FRAME_BAR)); + pCntlBar->FC.Type = BTYPE_CNTL; + pCntlBar->FC.SubType = SUBTYPE_BLOCK_ACK_REQ; +- pCntlBar->BarControl.MTID = 0; ++ pCntlBar->BarControl.MTID = 0; + pCntlBar->BarControl.Compressed = 1; + pCntlBar->BarControl.ACKPolicy = 0; + +- +- pCntlBar->Duration = 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(FRAME_BA)); ++ pCntlBar->Duration = ++ 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(FRAME_BA)); + + COPY_MAC_ADDR(pCntlBar->Addr1, pDA); + COPY_MAC_ADDR(pCntlBar->Addr2, pSA); + } + +- + /* + ========================================================================== + Description: +@@ -592,19 +591,14 @@ VOID BarHeaderInit( + Return : None. + ========================================================================== + */ +-VOID InsertActField( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Category, +- IN UINT8 ActCode) ++VOID InsertActField(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, IN UINT8 Category, IN UINT8 ActCode) + { + ULONG TempLen; + +- MakeOutgoingFrame( pFrameBuf, &TempLen, +- 1, &Category, +- 1, &ActCode, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &Category, 1, &ActCode, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index ff4dce6..dedbe52 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -27,9 +27,7 @@ + + #include "../rt_config.h" + +- +- +-#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) //1 // inital sequence number of BA session ++#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) //1 // inital sequence number of BA session + + #define ORI_SESSION_MAX_RETRY 8 + #define ORI_BA_SESSION_TIMEOUT (2000) // ms +@@ -40,29 +38,22 @@ + + #define RESET_RCV_SEQ (0xFFFF) + +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, struct reordering_mpdu *mpdu_blk); +- ++static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, ++ struct reordering_mpdu *mpdu_blk); + +-BA_ORI_ENTRY *BATableAllocOriEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx); ++BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx); + +-BA_REC_ENTRY *BATableAllocRecEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx); ++BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx); + +-VOID BAOriSessionSetupTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID BARecSessionIdleTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); + ++VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); + + BUILD_TIMER_FUNCTION(BAOriSessionSetupTimeout); + BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); +@@ -70,91 +61,78 @@ BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); + #define ANNOUNCE_REORDERING_PACKET(_pAd, _mpdu_blk) \ + Announce_Reordering_Packet(_pAd, _mpdu_blk); + +-VOID BA_MaxWinSizeReasign( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntryPeer, +- OUT UCHAR *pWinSize) ++VOID BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntryPeer, OUT UCHAR * pWinSize) + { + UCHAR MaxSize; + +- +- if (pAd->MACVersion >= RALINK_2883_VERSION) // 3*3 ++ if (pAd->MACVersion >= RALINK_2883_VERSION) // 3*3 + { +- if (pAd->MACVersion >= RALINK_3070_VERSION) +- { +- if (pEntryPeer->WepStatus != Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode ++ if (pAd->MACVersion >= RALINK_3070_VERSION) { ++ if (pEntryPeer->WepStatus != ++ Ndis802_11EncryptionDisabled) ++ MaxSize = 7; // for non-open mode + else + MaxSize = 13; +- } +- else ++ } else + MaxSize = 31; +- } +- else if (pAd->MACVersion >= RALINK_2880E_VERSION) // 2880 e ++ } else if (pAd->MACVersion >= RALINK_2880E_VERSION) // 2880 e + { + if (pEntryPeer->WepStatus != Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode ++ MaxSize = 7; // for non-open mode + else + MaxSize = 13; +- } +- else ++ } else + MaxSize = 7; + + DBGPRINT(RT_DEBUG_TRACE, ("ba> Win Size = %d, Max Size = %d\n", +- *pWinSize, MaxSize)); ++ *pWinSize, MaxSize)); + +- if ((*pWinSize) > MaxSize) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ba> reassign max win size from %d to %d\n", +- *pWinSize, MaxSize)); ++ if ((*pWinSize) > MaxSize) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ba> reassign max win size from %d to %d\n", ++ *pWinSize, MaxSize)); + + *pWinSize = MaxSize; + } + } + +-void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, +- IN struct reordering_mpdu *mpdu) ++void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, ++ IN struct reordering_mpdu *mpdu) + { +- PNDIS_PACKET pPacket; ++ PNDIS_PACKET pPacket; + + pPacket = mpdu->pPacket; + +- if (mpdu->bAMSDU) +- { ++ if (mpdu->bAMSDU) { + ASSERT(0); + BA_Reorder_AMSDU_Annnounce(pAd, pPacket); +- } +- else +- { ++ } else { + // + // pass this 802.3 packet to upper layer or forward this packet to WM directly + // + +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, RTMP_GET_PACKET_IF(pPacket)); ++ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, ++ RTMP_GET_PACKET_IF(pPacket)); + } + } + + /* + * Insert a reordering mpdu into sorted linked list by sequence no. + */ +-BOOLEAN ba_reordering_mpdu_insertsorted(struct reordering_list *list, struct reordering_mpdu *mpdu) ++BOOLEAN ba_reordering_mpdu_insertsorted(struct reordering_list *list, ++ struct reordering_mpdu *mpdu) + { + + struct reordering_mpdu **ppScan = &list->next; + +- while (*ppScan != NULL) +- { +- if (SEQ_SMALLER((*ppScan)->Sequence, mpdu->Sequence, MAXSEQ)) +- { ++ while (*ppScan != NULL) { ++ if (SEQ_SMALLER((*ppScan)->Sequence, mpdu->Sequence, MAXSEQ)) { + ppScan = &(*ppScan)->next; +- } +- else if ((*ppScan)->Sequence == mpdu->Sequence) +- { ++ } else if ((*ppScan)->Sequence == mpdu->Sequence) { + /* give up this duplicated frame */ +- return(FALSE); +- } +- else +- { ++ return (FALSE); ++ } else { + /* find position */ + break; + } +@@ -166,11 +144,11 @@ BOOLEAN ba_reordering_mpdu_insertsorted(struct reordering_list *list, struct reo + return TRUE; + } + +- + /* + * caller lock critical section if necessary + */ +-static inline void ba_enqueue(struct reordering_list *list, struct reordering_mpdu *mpdu_blk) ++static inline void ba_enqueue(struct reordering_list *list, ++ struct reordering_mpdu *mpdu_blk) + { + list->qlen++; + mpdu_blk->next = list->next; +@@ -180,47 +158,46 @@ static inline void ba_enqueue(struct reordering_list *list, struct reordering_mp + /* + * caller lock critical section if necessary + */ +-static inline struct reordering_mpdu * ba_dequeue(struct reordering_list *list) ++static inline struct reordering_mpdu *ba_dequeue(struct reordering_list *list) + { + struct reordering_mpdu *mpdu_blk = NULL; + + ASSERT(list); + +- if (list->qlen) +- { +- list->qlen--; +- mpdu_blk = list->next; +- if (mpdu_blk) +- { +- list->next = mpdu_blk->next; +- mpdu_blk->next = NULL; +- } ++ if (list->qlen) { ++ list->qlen--; ++ mpdu_blk = list->next; ++ if (mpdu_blk) { ++ list->next = mpdu_blk->next; ++ mpdu_blk->next = NULL; + } ++ } + return mpdu_blk; + } + +- +-static inline struct reordering_mpdu *ba_reordering_mpdu_dequeue(struct reordering_list *list) ++static inline struct reordering_mpdu *ba_reordering_mpdu_dequeue(struct ++ reordering_list ++ *list) + { +- return(ba_dequeue(list)); ++ return (ba_dequeue(list)); + } + +- +-static inline struct reordering_mpdu *ba_reordering_mpdu_probe(struct reordering_list *list) +- { ++static inline struct reordering_mpdu *ba_reordering_mpdu_probe(struct ++ reordering_list ++ *list) ++{ + ASSERT(list); + +- return(list->next); +- } +- ++ return (list->next); ++} + + /* + * free all resource for reordering mechanism + */ + void ba_reordering_resource_release(PRTMP_ADAPTER pAd) + { +- BA_TABLE *Tab; +- PBA_REC_ENTRY pBAEntry; ++ BA_TABLE *Tab; ++ PBA_REC_ENTRY pBAEntry; + struct reordering_mpdu *mpdu_blk; + int i; + +@@ -228,15 +205,14 @@ void ba_reordering_resource_release(PRTMP_ADAPTER pAd) + + /* I. release all pending reordering packet */ + NdisAcquireSpinLock(&pAd->BATabLock); +- for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { ++ for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) { + pBAEntry = &Tab->BARecEntry[i]; +- if (pBAEntry->REC_BA_Status != Recipient_NONE) +- { +- while ((mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list))) +- { ++ if (pBAEntry->REC_BA_Status != Recipient_NONE) { ++ while ((mpdu_blk = ++ ba_reordering_mpdu_dequeue(&pBAEntry->list))) { + ASSERT(mpdu_blk->pPacket); +- RELEASE_NDIS_PACKET(pAd, mpdu_blk->pPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, mpdu_blk->pPacket, ++ NDIS_STATUS_FAILURE); + ba_mpdu_blk_free(pAd, mpdu_blk); + } + } +@@ -250,15 +226,13 @@ void ba_reordering_resource_release(PRTMP_ADAPTER pAd) + NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); + } + +- +- + /* + * Allocate all resource for reordering mechanism + */ + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + { +- int i; +- PUCHAR mem; ++ int i; ++ PUCHAR mem; + struct reordering_mpdu *mpdu_blk; + struct reordering_list *freelist; + +@@ -270,24 +244,26 @@ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + freelist->next = NULL; + freelist->qlen = 0; + +- DBGPRINT(RT_DEBUG_TRACE, ("Allocate %d memory for BA reordering\n", (UINT32)(num*sizeof(struct reordering_mpdu)))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Allocate %d memory for BA reordering\n", ++ (UINT32) (num * sizeof(struct reordering_mpdu)))); + + /* allocate number of mpdu_blk memory */ +- os_alloc_mem(pAd, (PUCHAR *)&mem, (num*sizeof(struct reordering_mpdu))); ++ os_alloc_mem(pAd, (PUCHAR *) & mem, ++ (num * sizeof(struct reordering_mpdu))); + + pAd->mpdu_blk_pool.mem = mem; + +- if (mem == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Can't Allocate Memory for BA Reordering\n")); +- return(FALSE); ++ if (mem == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Can't Allocate Memory for BA Reordering\n")); ++ return (FALSE); + } + + /* build mpdu_blk free list */ +- for (i=0; impdu_blk_pool.lock); + mpdu_blk = ba_dequeue(&pAd->mpdu_blk_pool.freelist); +- if (mpdu_blk) +- { +-// blk_count++; ++ if (mpdu_blk) { ++// blk_count++; + /* reset mpdu_blk */ + NdisZeroMemory(mpdu_blk, sizeof(struct reordering_mpdu)); + } +@@ -317,43 +292,40 @@ static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd) + return mpdu_blk; + } + +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, struct reordering_mpdu *mpdu_blk) ++static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, ++ struct reordering_mpdu *mpdu_blk) + { + ASSERT(mpdu_blk); + + NdisAcquireSpinLock(&pAd->mpdu_blk_pool.lock); +-// blk_count--; ++// blk_count--; + ba_enqueue(&pAd->mpdu_blk_pool.freelist, mpdu_blk); + NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); + } + +- +-static USHORT ba_indicate_reordering_mpdus_in_order( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN USHORT StartSeq) ++static USHORT ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, ++ IN PBA_REC_ENTRY pBAEntry, ++ IN USHORT StartSeq) + { + struct reordering_mpdu *mpdu_blk; +- USHORT LastIndSeq = RESET_RCV_SEQ; ++ USHORT LastIndSeq = RESET_RCV_SEQ; + + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + +- while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) +- { +- /* find in-order frame */ +- if (!SEQ_STEPONE(mpdu_blk->Sequence, StartSeq, MAXSEQ)) +- { +- break; +- } +- /* dequeue in-order frame from reodering list */ +- mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list); +- /* pass this frame up */ ++ while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) { ++ /* find in-order frame */ ++ if (!SEQ_STEPONE(mpdu_blk->Sequence, StartSeq, MAXSEQ)) { ++ break; ++ } ++ /* dequeue in-order frame from reodering list */ ++ mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list); ++ /* pass this frame up */ + ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); + /* move to next sequence */ +- StartSeq = mpdu_blk->Sequence; ++ StartSeq = mpdu_blk->Sequence; + LastIndSeq = StartSeq; + /* free mpdu_blk */ +- ba_mpdu_blk_free(pAd, mpdu_blk); ++ ba_mpdu_blk_free(pAd, mpdu_blk); + } + + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +@@ -362,51 +334,44 @@ static USHORT ba_indicate_reordering_mpdus_in_order( + return LastIndSeq; + } + +-static void ba_indicate_reordering_mpdus_le_seq( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN USHORT Sequence) ++static void ba_indicate_reordering_mpdus_le_seq(IN PRTMP_ADAPTER pAd, ++ IN PBA_REC_ENTRY pBAEntry, ++ IN USHORT Sequence) + { + struct reordering_mpdu *mpdu_blk; + + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); +- while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) +- { +- /* find in-order frame */ +- if ((mpdu_blk->Sequence == Sequence) || SEQ_SMALLER(mpdu_blk->Sequence, Sequence, MAXSEQ)) +- { ++ while ((mpdu_blk = ba_reordering_mpdu_probe(&pBAEntry->list))) { ++ /* find in-order frame */ ++ if ((mpdu_blk->Sequence == Sequence) ++ || SEQ_SMALLER(mpdu_blk->Sequence, Sequence, MAXSEQ)) { + /* dequeue in-order frame from reodering list */ + mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list); + /* pass this frame up */ + ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); + /* free mpdu_blk */ + ba_mpdu_blk_free(pAd, mpdu_blk); ++ } else { ++ break; + } +- else +- { +- break; +- } + } + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } + +- +-static void ba_refresh_reordering_mpdus( +- IN PRTMP_ADAPTER pAd, +- PBA_REC_ENTRY pBAEntry) ++static void ba_refresh_reordering_mpdus(IN PRTMP_ADAPTER pAd, ++ PBA_REC_ENTRY pBAEntry) + { + struct reordering_mpdu *mpdu_blk; + + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + +- /* dequeue in-order frame from reodering list */ +- while ((mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list))) +- { +- /* pass this frame up */ ++ /* dequeue in-order frame from reodering list */ ++ while ((mpdu_blk = ba_reordering_mpdu_dequeue(&pBAEntry->list))) { ++ /* pass this frame up */ + ANNOUNCE_REORDERING_PACKET(pAd, mpdu_blk); + + pBAEntry->LastIndSeq = mpdu_blk->Sequence; +- ba_mpdu_blk_free(pAd, mpdu_blk); ++ ba_mpdu_blk_free(pAd, mpdu_blk); + + /* update last indicated sequence */ + } +@@ -415,109 +380,106 @@ static void ba_refresh_reordering_mpdus( + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } + +- + //static +-void ba_flush_reordering_timeout_mpdus( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32) +- ++void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, ++ IN PBA_REC_ENTRY pBAEntry, ++ IN ULONG Now32) + { + USHORT Sequence; + +-// if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && +-// (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| +-// (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(10*REORDERING_PACKET_TIMEOUT))) && +-// (pBAEntry->list.qlen > (pBAEntry->BAWinSize/8))) +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(MAX_REORDERING_PACKET_TIMEOUT/6))) +- &&(pBAEntry->list.qlen > 1) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("timeout[%d] (%08lx-%08lx = %d > %d): %x, flush all!\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer), +- (int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), MAX_REORDERING_PACKET_TIMEOUT, +- pBAEntry->LastIndSeq)); ++// if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && ++// (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| ++// (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(10*REORDERING_PACKET_TIMEOUT))) && ++// (pBAEntry->list.qlen > (pBAEntry->BAWinSize/8))) ++ if (RTMP_TIME_AFTER ++ ((unsigned long)Now32, ++ (unsigned long)(pBAEntry->LastIndSeqAtTimer + ++ (MAX_REORDERING_PACKET_TIMEOUT / 6))) ++ && (pBAEntry->list.qlen > 1) ++ ) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("timeout[%d] (%08lx-%08lx = %d > %d): %x, flush all!\n ", ++ pBAEntry->list.qlen, Now32, ++ (pBAEntry->LastIndSeqAtTimer), ++ (int)((long)Now32 - ++ (long)(pBAEntry->LastIndSeqAtTimer)), ++ MAX_REORDERING_PACKET_TIMEOUT, pBAEntry->LastIndSeq)); + ba_refresh_reordering_mpdus(pAd, pBAEntry); + pBAEntry->LastIndSeqAtTimer = Now32; +- } +- else +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT))) ++ } else ++ if (RTMP_TIME_AFTER ++ ((unsigned long)Now32, ++ (unsigned long)(pBAEntry->LastIndSeqAtTimer + ++ (REORDERING_PACKET_TIMEOUT))) + && (pBAEntry->list.qlen > 0) +- ) +- { +- // ++ ) { ++ // + // force LastIndSeq to shift to LastIndSeq+1 +- // +- Sequence = (pBAEntry->LastIndSeq+1) & MAXSEQ; +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); +- pBAEntry->LastIndSeqAtTimer = Now32; ++ // ++ Sequence = (pBAEntry->LastIndSeq + 1) & MAXSEQ; ++ ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); ++ pBAEntry->LastIndSeqAtTimer = Now32; ++ pBAEntry->LastIndSeq = Sequence; ++ // ++ // indicate in-order mpdus ++ // ++ Sequence = ++ ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, ++ Sequence); ++ if (Sequence != RESET_RCV_SEQ) { + pBAEntry->LastIndSeq = Sequence; +- // +- // indicate in-order mpdus +- // +- Sequence = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, Sequence); +- if (Sequence != RESET_RCV_SEQ) +- { +- pBAEntry->LastIndSeq = Sequence; +- } ++ } + +- DBGPRINT(RT_DEBUG_OFF, ("%x, flush one!\n", pBAEntry->LastIndSeq)); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("%x, flush one!\n", pBAEntry->LastIndSeq)); + + } + } + +- + /* + * generate ADDBA request to + * set up BA agreement + */ +-VOID BAOriSessionSetUp( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, +- IN BOOLEAN isForced) +- ++VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN UCHAR TID, ++ IN USHORT TimeOut, ++ IN ULONG DelayTime, IN BOOLEAN isForced) + { +- //MLME_ADDBA_REQ_STRUCT AddbaReq; +- BA_ORI_ENTRY *pBAEntry = NULL; +- USHORT Idx; +- BOOLEAN Cancelled; ++ //MLME_ADDBA_REQ_STRUCT AddbaReq; ++ BA_ORI_ENTRY *pBAEntry = NULL; ++ USHORT Idx; ++ BOOLEAN Cancelled; + +- if ((pAd->CommonCfg.BACapability.field.AutoBA != TRUE) && (isForced == FALSE)) ++ if ((pAd->CommonCfg.BACapability.field.AutoBA != TRUE) ++ && (isForced == FALSE)) + return; + + // if this entry is limited to use legacy tx mode, it doesn't generate BA. + if (RTMPStaFixedTxMode(pAd, pEntry) != FIXED_TXMODE_HT) + return; + +- if ((pEntry->BADeclineBitmap & (1<BADeclineBitmap & (1 << TID)) && (isForced == FALSE)) { + // try again after 3 secs + DelayTime = 3000; +-// DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n")); +-// return; ++// DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n")); ++// return; + } + +- + Idx = pEntry->BAOriWcidArray[TID]; +- if (Idx == 0) +- { ++ if (Idx == 0) { + // allocate a BA session + pBAEntry = BATableAllocOriEntry(pAd, &Idx); +- if (pBAEntry == NULL) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ADDBA - MlmeADDBAAction() allocate BA session failed \n")); ++ if (pBAEntry == NULL) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ADDBA - MlmeADDBAAction() allocate BA session failed \n")); + return; + } +- } +- else +- { +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; ++ } else { ++ pBAEntry = &pAd->BATable.BAOriEntry[Idx]; + } + +- if (pBAEntry->ORI_BA_Status >= Originator_WaitRes) +- { ++ if (pBAEntry->ORI_BA_Status >= Originator_WaitRes) { + return; + } + +@@ -533,129 +495,125 @@ VOID BAOriSessionSetUp( + pBAEntry->TimeOutValue = TimeOut; + pBAEntry->pAdapter = pAd; + +- if (!(pEntry->TXBAbitmap & (1<ORIBATimer, GET_TIMER_FUNCTION(BAOriSessionSetupTimeout), pBAEntry, FALSE); +- } +- else ++ if (!(pEntry->TXBAbitmap & (1 << TID))) { ++ RTMPInitTimer(pAd, &pBAEntry->ORIBATimer, ++ GET_TIMER_FUNCTION(BAOriSessionSetupTimeout), ++ pBAEntry, FALSE); ++ } else + RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + + // set timer to send ADDBA request + RTMPSetTimer(&pBAEntry->ORIBATimer, DelayTime); + } + +-VOID BAOriSessionAdd( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN PFRAME_ADDBA_RSP pFrame) ++VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN PFRAME_ADDBA_RSP pFrame) + { +- BA_ORI_ENTRY *pBAEntry = NULL; +- BOOLEAN Cancelled; +- UCHAR TID; +- USHORT Idx; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; +- FRAME_BAR FrameBar; ++ BA_ORI_ENTRY *pBAEntry = NULL; ++ BOOLEAN Cancelled; ++ UCHAR TID; ++ USHORT Idx; ++ PUCHAR pOutBuffer2 = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen; ++ FRAME_BAR FrameBar; + + TID = pFrame->BaParm.TID; + Idx = pEntry->BAOriWcidArray[TID]; +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; ++ pBAEntry = &pAd->BATable.BAOriEntry[Idx]; + + // Start fill in parameters. +- if ((Idx !=0) && (pBAEntry->TID == TID) && (pBAEntry->ORI_BA_Status == Originator_WaitRes)) +- { +- pBAEntry->BAWinSize = min(pBAEntry->BAWinSize, ((UCHAR)pFrame->BaParm.BufSize)); ++ if ((Idx != 0) && (pBAEntry->TID == TID) ++ && (pBAEntry->ORI_BA_Status == Originator_WaitRes)) { ++ pBAEntry->BAWinSize = ++ min(pBAEntry->BAWinSize, ((UCHAR) pFrame->BaParm.BufSize)); + BA_MaxWinSizeReasign(pAd, pEntry, &pBAEntry->BAWinSize); + + pBAEntry->TimeOutValue = pFrame->TimeOutValue; + pBAEntry->ORI_BA_Status = Originator_Done; +- pAd->BATable.numDoneOriginator ++; ++ pAd->BATable.numDoneOriginator++; + + // reset sequence number + pBAEntry->Sequence = BA_ORI_INIT_SEQ; + // Set Bitmap flag. +- pEntry->TXBAbitmap |= (1<ORIBATimer, &Cancelled); ++ pEntry->TXBAbitmap |= (1 << TID); ++ RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + + pBAEntry->ORIBATimer.TimerValue = 0; //pFrame->TimeOutValue; + +- DBGPRINT(RT_DEBUG_TRACE,("%s : TXBAbitmap = %x, BAWinSize = %d, TimeOut = %ld\n", __func__, pEntry->TXBAbitmap, +- pBAEntry->BAWinSize, pBAEntry->ORIBATimer.TimerValue)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s : TXBAbitmap = %x, BAWinSize = %d, TimeOut = %ld\n", ++ __func__, pEntry->TXBAbitmap, pBAEntry->BAWinSize, ++ pBAEntry->ORIBATimer.TimerValue)); + + // SEND BAR ; +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - BAOriSessionAdd() allocate memory failed \n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - BAOriSessionAdd() allocate memory failed \n")); + return; + } + +- BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pBAEntry->Wcid].Addr, pAd->CurrentAddress); ++ BarHeaderInit(pAd, &FrameBar, ++ pAd->MacTab.Content[pBAEntry->Wcid].Addr, ++ pAd->CurrentAddress); + + FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pBAEntry->TID; // make sure sequence not clear in DEL funciton. +- MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, +- END_OF_ARGS); ++ FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; // make sure sequence not clear in DEL funciton. ++ FrameBar.BarControl.TID = pBAEntry->TID; // make sure sequence not clear in DEL funciton. ++ MakeOutgoingFrame(pOutBuffer2, &FrameLen, ++ sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer2); + +- + if (pBAEntry->ORIBATimer.TimerValue) +- RTMPSetTimer(&pBAEntry->ORIBATimer, pBAEntry->ORIBATimer.TimerValue); // in mSec ++ RTMPSetTimer(&pBAEntry->ORIBATimer, pBAEntry->ORIBATimer.TimerValue); // in mSec + } + } + +-BOOLEAN BARecSessionAdd( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN PFRAME_ADDBA_REQ pFrame) ++BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN PFRAME_ADDBA_REQ pFrame) + { +- BA_REC_ENTRY *pBAEntry = NULL; +- BOOLEAN Status = TRUE; +- BOOLEAN Cancelled; +- USHORT Idx; +- UCHAR TID; +- UCHAR BAWinSize; ++ BA_REC_ENTRY *pBAEntry = NULL; ++ BOOLEAN Status = TRUE; ++ BOOLEAN Cancelled; ++ USHORT Idx; ++ UCHAR TID; ++ UCHAR BAWinSize; + //UINT32 Value; + //UINT offset; + +- + ASSERT(pEntry); + + // find TID + TID = pFrame->BaParm.TID; + +- BAWinSize = min(((UCHAR)pFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); ++ BAWinSize = ++ min(((UCHAR) pFrame->BaParm.BufSize), ++ (UCHAR) pAd->CommonCfg.BACapability.field.RxBAWinLimit); + + // Intel patch +- if (BAWinSize == 0) +- { ++ if (BAWinSize == 0) { + BAWinSize = 64; + } + + Idx = pEntry->BARecWcidArray[TID]; + +- +- if (Idx == 0) +- { ++ if (Idx == 0) { + pBAEntry = BATableAllocRecEntry(pAd, &Idx); +- } +- else +- { ++ } else { + pBAEntry = &pAd->BATable.BARecEntry[Idx]; + // flush all pending reordering mpdus + ba_refresh_reordering_mpdus(pAd, pBAEntry); + } + +- DBGPRINT(RT_DEBUG_TRACE,("%s(%ld): Idx = %d, BAWinSize(req %d) = %d\n", __func__, pAd->BATable.numAsRecipient, Idx, +- pFrame->BaParm.BufSize, BAWinSize)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s(%ld): Idx = %d, BAWinSize(req %d) = %d\n", __func__, ++ pAd->BATable.numAsRecipient, Idx, pFrame->BaParm.BufSize, ++ BAWinSize)); + + // Start fill in parameters. +- if (pBAEntry != NULL) +- { ++ if (pBAEntry != NULL) { + ASSERT(pBAEntry->list.qlen == 0); + + pBAEntry->REC_BA_Status = Recipient_HandleRes; +@@ -665,64 +623,60 @@ BOOLEAN BARecSessionAdd( + pBAEntry->TimeOutValue = pFrame->TimeOutValue; + pBAEntry->REC_BA_Status = Recipient_Accept; + // initial sequence number +- pBAEntry->LastIndSeq = RESET_RCV_SEQ; //pFrame->BaStartSeq.field.StartSeq; ++ pBAEntry->LastIndSeq = RESET_RCV_SEQ; //pFrame->BaStartSeq.field.StartSeq; + +- DBGPRINT(RT_DEBUG_OFF, ("Start Seq = %08x\n", pFrame->BaStartSeq.field.StartSeq)); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("Start Seq = %08x\n", ++ pFrame->BaStartSeq.field.StartSeq)); + +- if (pEntry->RXBAbitmap & (1<RXBAbitmap & (1 << TID)) { + RTMPCancelTimer(&pBAEntry->RECBATimer, &Cancelled); +- } +- else +- { +- RTMPInitTimer(pAd, &pBAEntry->RECBATimer, GET_TIMER_FUNCTION(BARecSessionIdleTimeout), pBAEntry, TRUE); ++ } else { ++ RTMPInitTimer(pAd, &pBAEntry->RECBATimer, ++ GET_TIMER_FUNCTION ++ (BARecSessionIdleTimeout), pBAEntry, ++ TRUE); + } + + // Set Bitmap flag. +- pEntry->RXBAbitmap |= (1<RXBAbitmap |= (1 << TID); + pEntry->BARecWcidArray[TID] = Idx; + +- pEntry->BADeclineBitmap &= ~(1<BADeclineBitmap &= ~(1 << TID); + + // Set BA session mask in WCID table. + RTMP_ADD_BA_SESSION_TO_ASIC(pAd, pEntry->Aid, TID); + +- DBGPRINT(RT_DEBUG_TRACE,("MACEntry[%d]RXBAbitmap = 0x%x. BARecWcidArray=%d\n", +- pEntry->Aid, pEntry->RXBAbitmap, pEntry->BARecWcidArray[TID])); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MACEntry[%d]RXBAbitmap = 0x%x. BARecWcidArray=%d\n", ++ pEntry->Aid, pEntry->RXBAbitmap, ++ pEntry->BARecWcidArray[TID])); ++ } else { + Status = FALSE; +- DBGPRINT(RT_DEBUG_TRACE,("Can't Accept ADDBA for %02x:%02x:%02x:%02x:%02x:%02x TID = %d\n", +- PRINT_MAC(pEntry->Addr), TID)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Can't Accept ADDBA for %02x:%02x:%02x:%02x:%02x:%02x TID = %d\n", ++ PRINT_MAC(pEntry->Addr), TID)); + } +- return(Status); ++ return (Status); + } + +- +-BA_REC_ENTRY *BATableAllocRecEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx) ++BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) + { +- int i; +- BA_REC_ENTRY *pBAEntry = NULL; +- ++ int i; ++ BA_REC_ENTRY *pBAEntry = NULL; + + NdisAcquireSpinLock(&pAd->BATabLock); + +- if (pAd->BATable.numAsRecipient >= MAX_BARECI_SESSION) +- { ++ if (pAd->BATable.numAsRecipient >= MAX_BARECI_SESSION) { + DBGPRINT(RT_DEBUG_OFF, ("BA Recipeint Session (%ld) > %d\n", +- pAd->BATable.numAsRecipient, MAX_BARECI_SESSION)); ++ pAd->BATable.numAsRecipient, ++ MAX_BARECI_SESSION)); + goto done; + } +- + // reserve idx 0 to identify BAWcidArray[TID] as empty +- for (i=1; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { +- pBAEntry =&pAd->BATable.BARecEntry[i]; +- if ((pBAEntry->REC_BA_Status == Recipient_NONE)) +- { ++ for (i = 1; i < MAX_LEN_OF_BA_REC_TABLE; i++) { ++ pBAEntry = &pAd->BATable.BARecEntry[i]; ++ if ((pBAEntry->REC_BA_Status == Recipient_NONE)) { + // get one + pAd->BATable.numAsRecipient++; + pBAEntry->REC_BA_Status = Recipient_USED; +@@ -736,26 +690,20 @@ done: + return pBAEntry; + } + +-BA_ORI_ENTRY *BATableAllocOriEntry( +- IN PRTMP_ADAPTER pAd, +- OUT USHORT *Idx) ++BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) + { +- int i; +- BA_ORI_ENTRY *pBAEntry = NULL; ++ int i; ++ BA_ORI_ENTRY *pBAEntry = NULL; + + NdisAcquireSpinLock(&pAd->BATabLock); + +- if (pAd->BATable.numAsOriginator >= (MAX_LEN_OF_BA_ORI_TABLE)) +- { ++ if (pAd->BATable.numAsOriginator >= (MAX_LEN_OF_BA_ORI_TABLE)) { + goto done; + } +- + // reserve idx 0 to identify BAWcidArray[TID] as empty +- for (i=1; iBATable.BAOriEntry[i]; +- if ((pBAEntry->ORI_BA_Status == Originator_NONE)) +- { ++ for (i = 1; i < MAX_LEN_OF_BA_ORI_TABLE; i++) { ++ pBAEntry = &pAd->BATable.BAOriEntry[i]; ++ if ((pBAEntry->ORI_BA_Status == Originator_NONE)) { + // get one + pAd->BATable.numAsOriginator++; + pBAEntry->ORI_BA_Status = Originator_USED; +@@ -770,32 +718,27 @@ done: + return pBAEntry; + } + +- +-VOID BATableFreeOriEntry( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Idx) ++VOID BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) + { +- BA_ORI_ENTRY *pBAEntry = NULL; ++ BA_ORI_ENTRY *pBAEntry = NULL; + MAC_TABLE_ENTRY *pEntry; + +- + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) + return; + +- pBAEntry =&pAd->BATable.BAOriEntry[Idx]; ++ pBAEntry = &pAd->BATable.BAOriEntry[Idx]; + +- if (pBAEntry->ORI_BA_Status != Originator_NONE) +- { ++ if (pBAEntry->ORI_BA_Status != Originator_NONE) { + pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; + pEntry->BAOriWcidArray[pBAEntry->TID] = 0; + +- + NdisAcquireSpinLock(&pAd->BATabLock); +- if (pBAEntry->ORI_BA_Status == Originator_Done) +- { ++ if (pBAEntry->ORI_BA_Status == Originator_Done) { + pAd->BATable.numDoneOriginator -= 1; +- pEntry->TXBAbitmap &= (~(1<<(pBAEntry->TID) )); +- DBGPRINT(RT_DEBUG_TRACE, ("BATableFreeOriEntry numAsOriginator= %ld\n", pAd->BATable.numAsRecipient)); ++ pEntry->TXBAbitmap &= (~(1 << (pBAEntry->TID))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BATableFreeOriEntry numAsOriginator= %ld\n", ++ pAd->BATable.numAsRecipient)); + // Erase Bitmap flag. + } + +@@ -809,22 +752,17 @@ VOID BATableFreeOriEntry( + } + } + +- +-VOID BATableFreeRecEntry( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Idx) ++VOID BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) + { +- BA_REC_ENTRY *pBAEntry = NULL; ++ BA_REC_ENTRY *pBAEntry = NULL; + MAC_TABLE_ENTRY *pEntry; + +- + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_REC_TABLE)) + return; + +- pBAEntry =&pAd->BATable.BARecEntry[Idx]; ++ pBAEntry = &pAd->BATable.BARecEntry[Idx]; + +- if (pBAEntry->REC_BA_Status != Recipient_NONE) +- { ++ if (pBAEntry->REC_BA_Status != Recipient_NONE) { + pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; + pEntry->BARecWcidArray[pBAEntry->TID] = 0; + +@@ -839,111 +777,105 @@ VOID BATableFreeRecEntry( + } + } + +- +-VOID BAOriSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive, +- IN BOOLEAN bForceSend) ++VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, ++ IN UCHAR TID, ++ IN BOOLEAN bPassive, IN BOOLEAN bForceSend) + { +- ULONG Idx = 0; +- BA_ORI_ENTRY *pBAEntry; +- BOOLEAN Cancelled; ++ ULONG Idx = 0; ++ BA_ORI_ENTRY *pBAEntry; ++ BOOLEAN Cancelled; + +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- { ++ if (Wcid >= MAX_LEN_OF_MAC_TABLE) { + return; + } +- + // + // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). + // + Idx = pAd->MacTab.Content[Wcid].BAOriWcidArray[TID]; +- if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) +- { +- if (bForceSend == TRUE) +- { ++ if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) { ++ if (bForceSend == TRUE) { + // force send specified TID DelBA +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = TID; +- DelbaReq.Initiator = ORIGINATOR; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s(bForceSend):alloc memory failed!\n", __func__)); ++ MLME_DELBA_REQ_STRUCT DelbaReq; ++ MLME_QUEUE_ELEM *Elem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); ++ if (Elem != NULL) { ++ NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); ++ NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ ++ COPY_MAC_ADDR(DelbaReq.Addr, ++ pAd->MacTab.Content[Wcid].Addr); ++ DelbaReq.Wcid = Wcid; ++ DelbaReq.TID = TID; ++ DelbaReq.Initiator = ORIGINATOR; ++ Elem->MsgLen = sizeof(DelbaReq); ++ NdisMoveMemory(Elem->Msg, &DelbaReq, ++ sizeof(DelbaReq)); ++ MlmeDELBAAction(pAd, Elem); ++ kfree(Elem); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s(bForceSend):alloc memory failed!\n", ++ __func__)); + } + } + + return; + } + +- DBGPRINT(RT_DEBUG_TRACE,("%s===>Wcid=%d.TID=%d \n", __func__, Wcid, TID)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s===>Wcid=%d.TID=%d \n", __func__, Wcid, TID)); + + pBAEntry = &pAd->BATable.BAOriEntry[Idx]; +- DBGPRINT(RT_DEBUG_TRACE,("\t===>Idx = %ld, Wcid=%d.TID=%d, ORI_BA_Status = %d \n", Idx, Wcid, TID, pBAEntry->ORI_BA_Status)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\t===>Idx = %ld, Wcid=%d.TID=%d, ORI_BA_Status = %d \n", Idx, ++ Wcid, TID, pBAEntry->ORI_BA_Status)); + // + // Prepare DelBA action frame and send to the peer. + // +- if ((bPassive == FALSE) && (TID == pBAEntry->TID) && (pBAEntry->ORI_BA_Status == Originator_Done)) +- { +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = pBAEntry->TID; +- DelbaReq.Initiator = ORIGINATOR; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __func__)); ++ if ((bPassive == FALSE) && (TID == pBAEntry->TID) ++ && (pBAEntry->ORI_BA_Status == Originator_Done)) { ++ MLME_DELBA_REQ_STRUCT DelbaReq; ++ MLME_QUEUE_ELEM *Elem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); ++ if (Elem != NULL) { ++ NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); ++ NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ ++ COPY_MAC_ADDR(DelbaReq.Addr, ++ pAd->MacTab.Content[Wcid].Addr); ++ DelbaReq.Wcid = Wcid; ++ DelbaReq.TID = pBAEntry->TID; ++ DelbaReq.Initiator = ORIGINATOR; ++ Elem->MsgLen = sizeof(DelbaReq); ++ NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); ++ MlmeDELBAAction(pAd, Elem); ++ kfree(Elem); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s():alloc memory failed!\n", __func__)); + return; + } + } + RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + BATableFreeOriEntry(pAd, Idx); + +- if (bPassive) +- { ++ if (bPassive) { + //BAOriSessionSetUp(pAd, &pAd->MacTab.Content[Wcid], TID, 0, 10000, TRUE); + } + } + +-VOID BARecSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive) ++VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive) + { +- ULONG Idx = 0; +- BA_REC_ENTRY *pBAEntry; ++ ULONG Idx = 0; ++ BA_REC_ENTRY *pBAEntry; + +- if (Wcid >= MAX_LEN_OF_MAC_TABLE) +- { ++ if (Wcid >= MAX_LEN_OF_MAC_TABLE) { + return; + } +- + // + // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). + // +@@ -951,18 +883,20 @@ VOID BARecSessionTearDown( + if (Idx == 0) + return; + +- DBGPRINT(RT_DEBUG_TRACE,("%s===>Wcid=%d.TID=%d \n", __func__, Wcid, TID)); +- ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s===>Wcid=%d.TID=%d \n", __func__, Wcid, TID)); + + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- DBGPRINT(RT_DEBUG_TRACE,("\t===>Idx = %ld, Wcid=%d.TID=%d, REC_BA_Status = %d \n", Idx, Wcid, TID, pBAEntry->REC_BA_Status)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\t===>Idx = %ld, Wcid=%d.TID=%d, REC_BA_Status = %d \n", Idx, ++ Wcid, TID, pBAEntry->REC_BA_Status)); + // + // Prepare DelBA action frame and send to the peer. + // +- if ((TID == pBAEntry->TID) && (pBAEntry->REC_BA_Status == Recipient_Accept)) +- { +- MLME_DELBA_REQ_STRUCT DelbaReq; +- BOOLEAN Cancelled; ++ if ((TID == pBAEntry->TID) ++ && (pBAEntry->REC_BA_Status == Recipient_Accept)) { ++ MLME_DELBA_REQ_STRUCT DelbaReq; ++ BOOLEAN Cancelled; + //ULONG offset; + //UINT32 VALUE; + +@@ -971,31 +905,32 @@ VOID BARecSessionTearDown( + // + // 1. Send DELBA Action Frame + // +- if (bPassive == FALSE) +- { +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); +- +- COPY_MAC_ADDR(DelbaReq.Addr, pAd->MacTab.Content[Wcid].Addr); +- DelbaReq.Wcid = Wcid; +- DelbaReq.TID = TID; +- DelbaReq.Initiator = RECIPIENT; +- Elem->MsgLen = sizeof(DelbaReq); +- NdisMoveMemory(Elem->Msg, &DelbaReq, sizeof(DelbaReq)); +- MlmeDELBAAction(pAd, Elem); +- kfree(Elem); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():alloc memory failed!\n", __func__)); ++ if (bPassive == FALSE) { ++ MLME_QUEUE_ELEM *Elem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); ++ if (Elem != NULL) { ++ NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); ++ NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ ++ COPY_MAC_ADDR(DelbaReq.Addr, ++ pAd->MacTab.Content[Wcid].Addr); ++ DelbaReq.Wcid = Wcid; ++ DelbaReq.TID = TID; ++ DelbaReq.Initiator = RECIPIENT; ++ Elem->MsgLen = sizeof(DelbaReq); ++ NdisMoveMemory(Elem->Msg, &DelbaReq, ++ sizeof(DelbaReq)); ++ MlmeDELBAAction(pAd, Elem); ++ kfree(Elem); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s():alloc memory failed!\n", ++ __func__)); + return; + } + } + +- + // + // 2. Free resource of BA session + // +@@ -1008,7 +943,8 @@ VOID BARecSessionTearDown( + pBAEntry->LastIndSeq = RESET_RCV_SEQ; + pBAEntry->BAWinSize = 0; + // Erase Bitmap flag at software mactable +- pAd->MacTab.Content[Wcid].RXBAbitmap &= (~(1<<(pBAEntry->TID))); ++ pAd->MacTab.Content[Wcid].RXBAbitmap &= ++ (~(1 << (pBAEntry->TID))); + pAd->MacTab.Content[Wcid].BARecWcidArray[TID] = 0; + + RTMP_DEL_BA_SESSION_FROM_ASIC(pAd, Wcid, TID); +@@ -1020,20 +956,16 @@ VOID BARecSessionTearDown( + BATableFreeRecEntry(pAd, Idx); + } + +-VOID BASessionTearDownALL( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid) ++VOID BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid) + { + int i; + +- for (i=0; ipAdapter; + + { +- // Do nothing if monitor mode is on +- if (MONITOR_ON(pAd)) +- return; ++ // Do nothing if monitor mode is on ++ if (MONITOR_ON(pAd)) ++ return; + } + +- + pEntry = &pAd->MacTab.Content[pBAEntry->Wcid]; + +- if ((pBAEntry->ORI_BA_Status == Originator_WaitRes) && (pBAEntry->Token < ORI_SESSION_MAX_RETRY)) +- { +- MLME_ADDBA_REQ_STRUCT AddbaReq; ++ if ((pBAEntry->ORI_BA_Status == Originator_WaitRes) ++ && (pBAEntry->Token < ORI_SESSION_MAX_RETRY)) { ++ MLME_ADDBA_REQ_STRUCT AddbaReq; + + NdisZeroMemory(&AddbaReq, sizeof(AddbaReq)); + COPY_MAC_ADDR(AddbaReq.pAddr, pEntry->Addr); +- AddbaReq.Wcid = (UCHAR)(pEntry->Aid); ++ AddbaReq.Wcid = (UCHAR) (pEntry->Aid); + AddbaReq.TID = pBAEntry->TID; +- AddbaReq.BaBufSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; ++ AddbaReq.BaBufSize = ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit; + AddbaReq.TimeOutValue = 0; + AddbaReq.Token = pBAEntry->Token; +- MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID)&AddbaReq); ++ MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, ++ sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID) & AddbaReq); + RTMP_MLME_HANDLER(pAd); +- DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) : Send ADD BA again\n", pBAEntry->Token)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA Ori Session Timeout(%d) : Send ADD BA again\n", ++ pBAEntry->Token)); + + pBAEntry->Token++; + RTMPSetTimer(&pBAEntry->ORIBATimer, ORI_BA_SESSION_TIMEOUT); +- } +- else +- { ++ } else { + BATableFreeOriEntry(pAd, pEntry->BAOriWcidArray[pBAEntry->TID]); + } + } +@@ -1110,54 +1042,51 @@ VOID BAOriSessionSetupTimeout( + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-VOID BARecSessionIdleTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { + +- BA_REC_ENTRY *pBAEntry = (BA_REC_ENTRY *)FunctionContext; +- PRTMP_ADAPTER pAd; +- ULONG Now32; ++ BA_REC_ENTRY *pBAEntry = (BA_REC_ENTRY *) FunctionContext; ++ PRTMP_ADAPTER pAd; ++ ULONG Now32; + + if (pBAEntry == NULL) + return; + +- if ((pBAEntry->REC_BA_Status == Recipient_Accept)) +- { ++ if ((pBAEntry->REC_BA_Status == Recipient_Accept)) { + NdisGetSystemUpTime(&Now32); + +- if (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer + REC_BA_SESSION_IDLE_TIMEOUT))) +- { ++ if (RTMP_TIME_AFTER ++ ((unsigned long)Now32, ++ (unsigned long)(pBAEntry->LastIndSeqAtTimer + ++ REC_BA_SESSION_IDLE_TIMEOUT))) { + pAd = pBAEntry->pAdapter; + // flush all pending reordering mpdus + ba_refresh_reordering_mpdus(pAd, pBAEntry); +- DBGPRINT(RT_DEBUG_OFF, ("%ld: REC BA session Timeout\n", Now32)); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("%ld: REC BA session Timeout\n", Now32)); + } + } + } + +- +-VOID PeerAddBAReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- ++VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- // 7.4.4.1 +- //ULONG Idx; +- UCHAR Status = 1; +- UCHAR pAddr[6]; ++ // 7.4.4.1 ++ //ULONG Idx; ++ UCHAR Status = 1; ++ UCHAR pAddr[6]; + FRAME_ADDBA_RSP ADDframe; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- PFRAME_ADDBA_REQ pAddreqFrame = NULL; +- //UCHAR BufSize; +- ULONG FrameLen; +- PULONG ptemp; +- PMAC_TABLE_ENTRY pMacEntry; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ PFRAME_ADDBA_REQ pAddreqFrame = NULL; ++ //UCHAR BufSize; ++ ULONG FrameLen; ++ PULONG ptemp; ++ PMAC_TABLE_ENTRY pMacEntry; + +- DBGPRINT(RT_DEBUG_TRACE, ("%s ==> (Wcid = %d)\n", __func__, Elem->Wcid)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s ==> (Wcid = %d)\n", __func__, Elem->Wcid)); + + //hex_dump("AddBAReq", Elem->Msg, Elem->MsgLen); + +@@ -1166,37 +1095,37 @@ VOID PeerAddBAReqAction( + return; + + pMacEntry = &pAd->MacTab.Content[Elem->Wcid]; +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerAddBAReqAction----> \n")); +- ptemp = (PULONG)Elem->Msg; ++ DBGPRINT(RT_DEBUG_TRACE, ("BA - PeerAddBAReqAction----> \n")); ++ ptemp = (PULONG) Elem->Msg; + //DBGPRINT_RAW(RT_DEBUG_EMU, ("%08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x\n", *(ptemp), *(ptemp+1), *(ptemp+2), *(ptemp+3), *(ptemp+4), *(ptemp+5), *(ptemp+6), *(ptemp+7), *(ptemp+8))); + +- if (PeerAddBAReqActionSanity(pAd, Elem->Msg, Elem->MsgLen, pAddr)) +- { ++ if (PeerAddBAReqActionSanity(pAd, Elem->Msg, Elem->MsgLen, pAddr)) { + +- if ((pAd->CommonCfg.bBADecline == FALSE) && IS_HT_STA(pMacEntry)) +- { +- pAddreqFrame = (PFRAME_ADDBA_REQ)(&Elem->Msg[0]); +- DBGPRINT(RT_DEBUG_OFF, ("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid)); +- if (BARecSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], pAddreqFrame)) ++ if ((pAd->CommonCfg.bBADecline == FALSE) ++ && IS_HT_STA(pMacEntry)) { ++ pAddreqFrame = (PFRAME_ADDBA_REQ) (&Elem->Msg[0]); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid)); ++ if (BARecSessionAdd ++ (pAd, &pAd->MacTab.Content[Elem->Wcid], ++ pAddreqFrame)) + Status = 0; + else +- Status = 38; // more parameters have invalid values +- } +- else +- { +- Status = 37; // the request has been declined. ++ Status = 38; // more parameters have invalid values ++ } else { ++ Status = 37; // the request has been declined. + } + } + + if (pAd->MacTab.Content[Elem->Wcid].ValidAsCLI) + ASSERT(pAd->MacTab.Content[Elem->Wcid].Sst == SST_ASSOC); + +- pAddreqFrame = (PFRAME_ADDBA_REQ)(&Elem->Msg[0]); ++ pAddreqFrame = (PFRAME_ADDBA_REQ) (&Elem->Msg[0]); + // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ACTION - PeerBAAction() allocate memory failed \n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ACTION - PeerBAAction() allocate memory failed \n")); + return; + } + +@@ -1205,9 +1134,12 @@ VOID PeerAddBAReqAction( + // 2-1. Prepare ADDBA Response frame. + { + if (ADHOC_ON(pAd)) +- ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid); ++ ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, ++ pAd->CurrentAddress, ++ pAd->CommonCfg.Bssid); + else +- ActHeaderInit(pAd, &ADDframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr); ++ ActHeaderInit(pAd, &ADDframe.Hdr, pAd->CommonCfg.Bssid, ++ pAd->CurrentAddress, pAddr); + } + + ADDframe.Category = CATEGORY_BA; +@@ -1218,37 +1150,35 @@ VOID PeerAddBAReqAction( + ADDframe.BaParm.BAPolicy = IMMED_BA; + ADDframe.BaParm.AMSDUSupported = 0; + ADDframe.BaParm.TID = pAddreqFrame->BaParm.TID; +- ADDframe.BaParm.BufSize = min(((UCHAR)pAddreqFrame->BaParm.BufSize), (UCHAR)pAd->CommonCfg.BACapability.field.RxBAWinLimit); +- if (ADDframe.BaParm.BufSize == 0) +- { ++ ADDframe.BaParm.BufSize = ++ min(((UCHAR) pAddreqFrame->BaParm.BufSize), ++ (UCHAR) pAd->CommonCfg.BACapability.field.RxBAWinLimit); ++ if (ADDframe.BaParm.BufSize == 0) { + ADDframe.BaParm.BufSize = 64; + } +- ADDframe.TimeOutValue = 0; //pAddreqFrame->TimeOutValue; ++ ADDframe.TimeOutValue = 0; //pAddreqFrame->TimeOutValue; + +- *(USHORT *)(&ADDframe.BaParm) = cpu2le16(*(USHORT *)(&ADDframe.BaParm)); ++ *(USHORT *) (&ADDframe.BaParm) = ++ cpu2le16(*(USHORT *) (&ADDframe.BaParm)); + ADDframe.StatusCode = cpu2le16(ADDframe.StatusCode); + ADDframe.TimeOutValue = cpu2le16(ADDframe.TimeOutValue); + +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_RSP), &ADDframe, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_ADDBA_RSP), &ADDframe, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +- DBGPRINT(RT_DEBUG_TRACE, ("%s(%d): TID(%d), BufSize(%d) <== \n", __func__, Elem->Wcid, ADDframe.BaParm.TID, +- ADDframe.BaParm.BufSize)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s(%d): TID(%d), BufSize(%d) <== \n", __func__, Elem->Wcid, ++ ADDframe.BaParm.TID, ADDframe.BaParm.BufSize)); + } + +- +-VOID PeerAddBARspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- ++VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //UCHAR Idx, i; +- //PUCHAR pOutBuffer = NULL; +- PFRAME_ADDBA_RSP pFrame = NULL; +- //PBA_ORI_ENTRY pBAEntry; ++ //UCHAR Idx, i; ++ //PUCHAR pOutBuffer = NULL; ++ PFRAME_ADDBA_RSP pFrame = NULL; ++ //PBA_ORI_ENTRY pBAEntry; + + //ADDBA Response from unknown peer, ignore this. + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +@@ -1258,120 +1188,119 @@ VOID PeerAddBARspAction( + + //hex_dump("PeerAddBARspAction()", Elem->Msg, Elem->MsgLen); + +- if (PeerAddBARspActionSanity(pAd, Elem->Msg, Elem->MsgLen)) +- { +- pFrame = (PFRAME_ADDBA_RSP)(&Elem->Msg[0]); ++ if (PeerAddBARspActionSanity(pAd, Elem->Msg, Elem->MsgLen)) { ++ pFrame = (PFRAME_ADDBA_RSP) (&Elem->Msg[0]); + +- DBGPRINT(RT_DEBUG_TRACE, ("\t\t StatusCode = %d\n", pFrame->StatusCode)); +- switch (pFrame->StatusCode) +- { +- case 0: +- // I want a BAsession with this peer as an originator. +- BAOriSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], pFrame); +- break; +- default: +- // check status == USED ??? +- BAOriSessionTearDown(pAd, Elem->Wcid, pFrame->BaParm.TID, TRUE, FALSE); +- break; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\t\t StatusCode = %d\n", pFrame->StatusCode)); ++ switch (pFrame->StatusCode) { ++ case 0: ++ // I want a BAsession with this peer as an originator. ++ BAOriSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], ++ pFrame); ++ break; ++ default: ++ // check status == USED ??? ++ BAOriSessionTearDown(pAd, Elem->Wcid, ++ pFrame->BaParm.TID, TRUE, FALSE); ++ break; + } + // Rcv Decline StatusCode + if ((pFrame->StatusCode == 37) +- || ((pAd->OpMode == OPMODE_STA) && STA_TGN_WIFI_ON(pAd) && (pFrame->StatusCode != 0)) +- ) +- { +- pAd->MacTab.Content[Elem->Wcid].BADeclineBitmap |= 1<BaParm.TID; ++ || ((pAd->OpMode == OPMODE_STA) && STA_TGN_WIFI_ON(pAd) ++ && (pFrame->StatusCode != 0)) ++ ) { ++ pAd->MacTab.Content[Elem->Wcid].BADeclineBitmap |= ++ 1 << pFrame->BaParm.TID; + } + } + } + +-VOID PeerDelBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) +- ++VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //UCHAR Idx; +- //PUCHAR pOutBuffer = NULL; +- PFRAME_DELBA_REQ pDelFrame = NULL; ++ //UCHAR Idx; ++ //PUCHAR pOutBuffer = NULL; ++ PFRAME_DELBA_REQ pDelFrame = NULL; + +- DBGPRINT(RT_DEBUG_TRACE,("%s ==>\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s ==>\n", __func__)); + //DELBA Request from unknown peer, ignore this. +- if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) +- { +- pDelFrame = (PFRAME_DELBA_REQ)(&Elem->Msg[0]); +- if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> ORIGINATOR\n")); +- BARecSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n", pDelFrame->ReasonCode)); ++ if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) { ++ pDelFrame = (PFRAME_DELBA_REQ) (&Elem->Msg[0]); ++ if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - PeerDelBAAction----> ORIGINATOR\n")); ++ BARecSessionTearDown(pAd, Elem->Wcid, ++ pDelFrame->DelbaParm.TID, TRUE); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n", ++ pDelFrame->ReasonCode)); + //hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen); +- BAOriSessionTearDown(pAd, Elem->Wcid, pDelFrame->DelbaParm.TID, TRUE, FALSE); ++ BAOriSessionTearDown(pAd, Elem->Wcid, ++ pDelFrame->DelbaParm.TID, TRUE, ++ FALSE); + } + } + } + +- +-BOOLEAN CntlEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, +- IN PFRAME_BA_REQ pMsg) ++BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++ IN ULONG Wcid, ++ IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg) + { +- PFRAME_BA_REQ pFrame = pMsg; +- //PRTMP_REORDERBUF pBuffer; +- //PRTMP_REORDERBUF pDmaBuf; ++ PFRAME_BA_REQ pFrame = pMsg; ++ //PRTMP_REORDERBUF pBuffer; ++ //PRTMP_REORDERBUF pDmaBuf; + PBA_REC_ENTRY pBAEntry; +- //BOOLEAN Result; +- ULONG Idx; +- //UCHAR NumRxPkt; +- UCHAR TID;//, i; ++ //BOOLEAN Result; ++ ULONG Idx; ++ //UCHAR NumRxPkt; ++ UCHAR TID; //, i; + +- TID = (UCHAR)pFrame->BARControl.TID; ++ TID = (UCHAR) pFrame->BARControl.TID; + +- DBGPRINT(RT_DEBUG_TRACE, ("%s(): BAR-Wcid(%ld), Tid (%d)\n", __func__, Wcid, TID)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s(): BAR-Wcid(%ld), Tid (%d)\n", __func__, Wcid, TID)); + //hex_dump("BAR", (PCHAR) pFrame, MsgLen); + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return FALSE; + + // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { ++ if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("CntlEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); + return FALSE; +- } +- else if (MsgLen != sizeof(FRAME_BA_REQ)) +- { ++ } else if (MsgLen != sizeof(FRAME_BA_REQ)) { + DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); + return FALSE; +- } +- else if (MsgLen != sizeof(FRAME_BA_REQ)) +- { ++ } else if (MsgLen != sizeof(FRAME_BA_REQ)) { + DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); + return FALSE; + } + +- if ((Wcid < MAX_LEN_OF_MAC_TABLE) && (TID < 8)) +- { ++ if ((Wcid < MAX_LEN_OF_MAC_TABLE) && (TID < 8)) { + // if this receiving packet is from SA that is in our OriEntry. Since WCID <9 has direct mapping. no need search. + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- } +- else +- { ++ } else { + return FALSE; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("BAR(%ld) : Tid (%d) - %04x:%04x\n", Wcid, TID, pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq )); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BAR(%ld) : Tid (%d) - %04x:%04x\n", Wcid, TID, ++ pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); + +- if (SEQ_SMALLER(pBAEntry->LastIndSeq, pFrame->BAStartingSeq.field.StartSeq, MAXSEQ)) +- { ++ if (SEQ_SMALLER ++ (pBAEntry->LastIndSeq, pFrame->BAStartingSeq.field.StartSeq, ++ MAXSEQ)) { + //DBGPRINT(RT_DEBUG_TRACE, ("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); +- ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, pFrame->BAStartingSeq.field.StartSeq); +- pBAEntry->LastIndSeq = (pFrame->BAStartingSeq.field.StartSeq == 0) ? MAXSEQ :(pFrame->BAStartingSeq.field.StartSeq -1); ++ ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, ++ pFrame->BAStartingSeq.field. ++ StartSeq); ++ pBAEntry->LastIndSeq = ++ (pFrame->BAStartingSeq.field.StartSeq == ++ 0) ? MAXSEQ : (pFrame->BAStartingSeq.field.StartSeq - 1); + } + //ba_refresh_reordering_mpdus(pAd, pBAEntry); + return TRUE; +@@ -1380,101 +1309,91 @@ BOOLEAN CntlEnqueueForRecv( + /* + Description : Send PSMP Action frame If PSMP mode switches. + */ +-VOID SendPSMPAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR Psmp) ++VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; + //ULONG Idx; +- FRAME_PSMP_ACTION Frame; +- ULONG FrameLen; ++ FRAME_PSMP_ACTION Frame; ++ ULONG FrameLen; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BA - MlmeADDBAAction() allocate memory failed \n")); + return; + } + +- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[Wcid].Addr); ++ ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, ++ pAd->CurrentAddress, pAd->MacTab.Content[Wcid].Addr); + + Frame.Category = CATEGORY_HT; + Frame.Action = SMPS_ACTION; +- switch (Psmp) +- { +- case MMPS_ENABLE: ++ switch (Psmp) { ++ case MMPS_ENABLE: + #ifdef RT30xx +- if (IS_RT30xx(pAd) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { +- RTMP_ASIC_MMPS_DISABLE(pAd); +- } ++ if (IS_RT30xx(pAd) ++ && (pAd->Antenna.field.RxPath > 1 ++ || pAd->Antenna.field.TxPath > 1)) { ++ RTMP_ASIC_MMPS_DISABLE(pAd); ++ } + #endif // RT30xx // +- Frame.Psmp = 0; +- break; +- case MMPS_DYNAMIC: +- Frame.Psmp = 3; +- break; +- case MMPS_STATIC: ++ Frame.Psmp = 0; ++ break; ++ case MMPS_DYNAMIC: ++ Frame.Psmp = 3; ++ break; ++ case MMPS_STATIC: + #ifdef RT30xx +- if (IS_RT30xx(pAd) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { +- RTMP_ASIC_MMPS_ENABLE(pAd); +- } ++ if (IS_RT30xx(pAd) ++ && (pAd->Antenna.field.RxPath > 1 ++ || pAd->Antenna.field.TxPath > 1)) { ++ RTMP_ASIC_MMPS_ENABLE(pAd); ++ } + #endif // RT30xx // +- Frame.Psmp = 1; +- break; ++ Frame.Psmp = 1; ++ break; + } +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_PSMP_ACTION), &Frame, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(FRAME_PSMP_ACTION), &Frame, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +- DBGPRINT(RT_DEBUG_ERROR,("HT - SendPSMPAction( %d ) \n", Frame.Psmp)); ++ DBGPRINT(RT_DEBUG_ERROR, ("HT - SendPSMPAction( %d ) \n", Frame.Psmp)); + } + +- + #define RADIO_MEASUREMENT_REQUEST_ACTION 0 + +-typedef struct PACKED +-{ +- UCHAR RegulatoryClass; +- UCHAR ChannelNumber; +- USHORT RandomInterval; +- USHORT MeasurementDuration; +- UCHAR MeasurementMode; +- UCHAR BSSID[MAC_ADDR_LEN]; +- UCHAR ReportingCondition; +- UCHAR Threshold; +- UCHAR SSIDIE[2]; // 2 byte ++typedef struct PACKED { ++ UCHAR RegulatoryClass; ++ UCHAR ChannelNumber; ++ USHORT RandomInterval; ++ USHORT MeasurementDuration; ++ UCHAR MeasurementMode; ++ UCHAR BSSID[MAC_ADDR_LEN]; ++ UCHAR ReportingCondition; ++ UCHAR Threshold; ++ UCHAR SSIDIE[2]; // 2 byte + } BEACON_REQUEST; + +-typedef struct PACKED +-{ +- UCHAR ID; +- UCHAR Length; +- UCHAR Token; +- UCHAR RequestMode; +- UCHAR Type; ++typedef struct PACKED { ++ UCHAR ID; ++ UCHAR Length; ++ UCHAR Token; ++ UCHAR RequestMode; ++ UCHAR Type; + } MEASUREMENT_REQ; + +- +- +- +-void convert_reordering_packet_to_preAMSDU_or_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, ++ IN UCHAR ++ FromWhichBSSID) + { +- PNDIS_PACKET pRxPkt; +- UCHAR Header802_3[LENGTH_802_3]; ++ PNDIS_PACKET pRxPkt; ++ UCHAR Header802_3[LENGTH_802_3]; + + // 1. get 802.3 Header + // 2. remove LLC +- // a. pointer pRxBlk->pData to payload ++ // a. pointer pRxBlk->pData to payload + // b. modify pRxBlk->DataSize + + RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); +@@ -1490,17 +1409,16 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet( + // + // copy 802.3 header, if necessary + // +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) +- { ++ if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) { + { + #ifdef LINUX +- NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3); ++ NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), ++ Header802_3, LENGTH_802_3); + #endif +- } ++ } + } + } + +- + #define INDICATE_LEGACY_OR_AMSDU(_pAd, _pRxBlk, _fromWhichBSSID) \ + do \ + { \ +@@ -1518,21 +1436,16 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet( + } \ + } while (0); + +- +- +-static VOID ba_enqueue_reordering_packet( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, ++ IN PBA_REC_ENTRY pBAEntry, ++ IN RX_BLK * pRxBlk, ++ IN UCHAR FromWhichBSSID) + { + struct reordering_mpdu *mpdu_blk; +- UINT16 Sequence = (UINT16) pRxBlk->pHeader->Sequence; ++ UINT16 Sequence = (UINT16) pRxBlk->pHeader->Sequence; + + mpdu_blk = ba_mpdu_blk_alloc(pAd); +- if ((mpdu_blk != NULL) && +- (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) +- { ++ if ((mpdu_blk != NULL) && (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) { + // Write RxD buffer address & allocated buffer length + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + +@@ -1540,11 +1453,13 @@ static VOID ba_enqueue_reordering_packet( + + mpdu_blk->bAMSDU = RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU); + +- convert_reordering_packet_to_preAMSDU_or_802_3_packet(pAd, pRxBlk, FromWhichBSSID); ++ convert_reordering_packet_to_preAMSDU_or_802_3_packet(pAd, ++ pRxBlk, ++ FromWhichBSSID); + + STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); + +- // ++ // + // it is necessary for reordering packet to record + // which BSS it come from + // +@@ -1552,21 +1467,22 @@ static VOID ba_enqueue_reordering_packet( + + mpdu_blk->pPacket = pRxBlk->pRxPacket; + +- if (ba_reordering_mpdu_insertsorted(&pBAEntry->list, mpdu_blk) == FALSE) +- { ++ if (ba_reordering_mpdu_insertsorted(&pBAEntry->list, mpdu_blk) ++ == FALSE) { + // had been already within reordering list + // don't indicate +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_SUCCESS); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_SUCCESS); + ba_mpdu_blk_free(pAd, mpdu_blk); + } + +- ASSERT((0<= pBAEntry->list.qlen) && (pBAEntry->list.qlen <= pBAEntry->BAWinSize)); ++ ASSERT((0 <= pBAEntry->list.qlen) ++ && (pBAEntry->list.qlen <= pBAEntry->BAWinSize)); + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!! (%d) Can't allocate reordering mpdu blk\n", +- pBAEntry->list.qlen)); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("!!! (%d) Can't allocate reordering mpdu blk\n", ++ pBAEntry->list.qlen)); + + /* + * flush all pending reordering mpdus +@@ -1581,7 +1497,6 @@ static VOID ba_enqueue_reordering_packet( + } + } + +- + /* + ========================================================================== + Description: +@@ -1600,43 +1515,38 @@ static VOID ba_enqueue_reordering_packet( + ========================================================================== + */ + +-VOID Indicate_AMPDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- USHORT Idx; +- PBA_REC_ENTRY pBAEntry = NULL; +- UINT16 Sequence = pRxBlk->pHeader->Sequence; +- ULONG Now32; +- UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; +- UCHAR TID = pRxBlk->pRxWI->TID; +- +- +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) && (pRxBlk->DataSize > MAX_RX_PKT_LEN)) +- { ++ USHORT Idx; ++ PBA_REC_ENTRY pBAEntry = NULL; ++ UINT16 Sequence = pRxBlk->pHeader->Sequence; ++ ULONG Now32; ++ UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; ++ UCHAR TID = pRxBlk->pRxWI->TID; ++ ++ if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) ++ && (pRxBlk->DataSize > MAX_RX_PKT_LEN)) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + +- if (Wcid < MAX_LEN_OF_MAC_TABLE) +- { ++ if (Wcid < MAX_LEN_OF_MAC_TABLE) { + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; +- if (Idx == 0) +- { ++ if (Idx == 0) { + /* Rec BA Session had been torn down */ + INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); + return; + } + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- } +- else +- { ++ } else { + // impossible !!! + ASSERT(0); + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + +@@ -1647,16 +1557,15 @@ VOID Indicate_AMPDU_Packet( + + pBAEntry->rcvSeq = Sequence; + +- + ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32); + pBAEntry->LastIndSeqAtTimer = Now32; + + // + // Reset Last Indicate Sequence + // +- if (pBAEntry->LastIndSeq == RESET_RCV_SEQ) +- { +- ASSERT((pBAEntry->list.qlen == 0) && (pBAEntry->list.next == NULL)); ++ if (pBAEntry->LastIndSeq == RESET_RCV_SEQ) { ++ ASSERT((pBAEntry->list.qlen == 0) ++ && (pBAEntry->list.next == NULL)); + + // reset rcv sequence of BA session + pBAEntry->LastIndSeq = Sequence; +@@ -1665,19 +1574,18 @@ VOID Indicate_AMPDU_Packet( + return; + } + +- + // + // I. Check if in order. + // +- if (SEQ_STEPONE(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) +- { +- USHORT LastIndSeq; ++ if (SEQ_STEPONE(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) { ++ USHORT LastIndSeq; + + pBAEntry->LastIndSeq = Sequence; + INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +- LastIndSeq = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, pBAEntry->LastIndSeq); +- if (LastIndSeq != RESET_RCV_SEQ) +- { ++ LastIndSeq = ++ ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, ++ pBAEntry->LastIndSeq); ++ if (LastIndSeq != RESET_RCV_SEQ) { + pBAEntry->LastIndSeq = LastIndSeq; + } + pBAEntry->LastIndSeqAtTimer = Now32; +@@ -1685,54 +1593,56 @@ VOID Indicate_AMPDU_Packet( + // + // II. Drop Duplicated Packet + // +- else if (Sequence == pBAEntry->LastIndSeq) +- { ++ else if (Sequence == pBAEntry->LastIndSeq) { + + // drop and release packet + pBAEntry->nDropPacket++; +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + } + // + // III. Drop Old Received Packet + // +- else if (SEQ_SMALLER(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) +- { ++ else if (SEQ_SMALLER(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) { + + // drop and release packet + pBAEntry->nDropPacket++; +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + } + // + // IV. Receive Sequence within Window Size + // +- else if (SEQ_SMALLER(Sequence, (((pBAEntry->LastIndSeq+pBAEntry->BAWinSize+1)) & MAXSEQ), MAXSEQ)) +- { +- ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, FromWhichBSSID); ++ else if (SEQ_SMALLER ++ (Sequence, ++ (((pBAEntry->LastIndSeq + pBAEntry->BAWinSize + 1)) & MAXSEQ), ++ MAXSEQ)) { ++ ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, ++ FromWhichBSSID); + } + // + // V. Receive seq surpasses Win(lastseq + nMSDU). So refresh all reorder buffer + // +- else +- { ++ else { + LONG WinStartSeq, TmpSeq; + +- +- TmpSeq = Sequence - (pBAEntry->BAWinSize) -1; +- if (TmpSeq < 0) +- { +- TmpSeq = (MAXSEQ+1) + TmpSeq; ++ TmpSeq = Sequence - (pBAEntry->BAWinSize) - 1; ++ if (TmpSeq < 0) { ++ TmpSeq = (MAXSEQ + 1) + TmpSeq; + } +- WinStartSeq = (TmpSeq+1) & MAXSEQ; ++ WinStartSeq = (TmpSeq + 1) & MAXSEQ; + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, WinStartSeq); +- pBAEntry->LastIndSeq = WinStartSeq; //TmpSeq; ++ pBAEntry->LastIndSeq = WinStartSeq; //TmpSeq; + + pBAEntry->LastIndSeqAtTimer = Now32; + +- ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, FromWhichBSSID); ++ ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, ++ FromWhichBSSID); + +- TmpSeq = ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, pBAEntry->LastIndSeq); +- if (TmpSeq != RESET_RCV_SEQ) +- { ++ TmpSeq = ++ ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, ++ pBAEntry->LastIndSeq); ++ if (TmpSeq != RESET_RCV_SEQ) { + pBAEntry->LastIndSeq = TmpSeq; + } + } +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +index 2c311b1..a3758b0 100644 +--- a/drivers/staging/rt2860/common/cmm_aes.c ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -37,21 +37,17 @@ + + #include "../rt_config.h" + +- +-typedef struct +-{ +- UINT32 erk[64]; /* encryption round keys */ +- UINT32 drk[64]; /* decryption round keys */ +- int nr; /* number of rounds */ +-} +-aes_context; ++typedef struct { ++ UINT32 erk[64]; /* encryption round keys */ ++ UINT32 drk[64]; /* decryption round keys */ ++ int nr; /* number of rounds */ ++} aes_context; + + /*****************************/ + /******** SBOX Table *********/ + /*****************************/ + +-UCHAR SboxTable[256] = +-{ ++UCHAR SboxTable[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +@@ -86,46 +82,34 @@ UCHAR SboxTable[256] = + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 + }; + +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) ++VOID xor_32(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out) + { + INT i; + +- for (i=0;i<4; i++) +- { ++ for (i = 0; i < 4; i++) { + out[i] = a[i] ^ b[i]; + } + } + +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out) ++VOID xor_128(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out) + { + INT i; + +- for (i=0;i<16; i++) +- { ++ for (i = 0; i < 16; i++) { + out[i] = a[i] ^ b[i]; + } + } + +-UCHAR RTMPCkipSbox( +- IN UCHAR a) ++UCHAR RTMPCkipSbox(IN UCHAR a) + { + return SboxTable[(int)a]; + } + +-VOID next_key( +- IN PUCHAR key, +- IN INT round) ++VOID next_key(IN PUCHAR key, IN INT round) + { +- UCHAR rcon; +- UCHAR sbox_key[4]; +- UCHAR rcon_table[12] = +- { ++ UCHAR rcon; ++ UCHAR sbox_key[4]; ++ UCHAR rcon_table[12] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1b, 0x36, 0x36, 0x36 + }; +@@ -145,14 +129,11 @@ VOID next_key( + xor_32(&key[12], &key[8], &key[12]); + } + +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out) ++VOID byte_sub(IN PUCHAR in, OUT PUCHAR out) + { + INT i; + +- for (i=0; i< 16; i++) +- { ++ for (i = 0; i < 16; i++) { + out[i] = RTMPCkipSbox(in[i]); + } + } +@@ -165,26 +146,23 @@ VOID byte_sub( + void bitwise_xor(unsigned char *ina, unsigned char *inb, unsigned char *out) + { + int i; +- for (i=0; i<16; i++) +- { ++ for (i = 0; i < 16; i++) { + out[i] = ina[i] ^ inb[i]; + } + } + +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out) ++VOID shift_row(IN PUCHAR in, OUT PUCHAR out) + { +- out[0] = in[0]; +- out[1] = in[5]; +- out[2] = in[10]; +- out[3] = in[15]; +- out[4] = in[4]; +- out[5] = in[9]; +- out[6] = in[14]; +- out[7] = in[3]; +- out[8] = in[8]; +- out[9] = in[13]; ++ out[0] = in[0]; ++ out[1] = in[5]; ++ out[2] = in[10]; ++ out[3] = in[15]; ++ out[4] = in[4]; ++ out[5] = in[9]; ++ out[6] = in[14]; ++ out[7] = in[3]; ++ out[8] = in[8]; ++ out[9] = in[13]; + out[10] = in[2]; + out[11] = in[7]; + out[12] = in[12]; +@@ -193,34 +171,31 @@ VOID shift_row( + out[15] = in[11]; + } + +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out) ++VOID mix_column(IN PUCHAR in, OUT PUCHAR out) + { +- INT i; +- UCHAR add1b[4]; +- UCHAR add1bf7[4]; +- UCHAR rotl[4]; +- UCHAR swap_halfs[4]; +- UCHAR andf7[4]; +- UCHAR rotr[4]; +- UCHAR temp[4]; +- UCHAR tempb[4]; +- +- for (i=0 ; i<4; i++) +- { +- if ((in[i] & 0x80)== 0x80) ++ INT i; ++ UCHAR add1b[4]; ++ UCHAR add1bf7[4]; ++ UCHAR rotl[4]; ++ UCHAR swap_halfs[4]; ++ UCHAR andf7[4]; ++ UCHAR rotr[4]; ++ UCHAR temp[4]; ++ UCHAR tempb[4]; ++ ++ for (i = 0; i < 4; i++) { ++ if ((in[i] & 0x80) == 0x80) + add1b[i] = 0x1b; + else + add1b[i] = 0x00; + } + +- swap_halfs[0] = in[2]; /* Swap halfs */ ++ swap_halfs[0] = in[2]; /* Swap halfs */ + swap_halfs[1] = in[3]; + swap_halfs[2] = in[0]; + swap_halfs[3] = in[1]; + +- rotl[0] = in[3]; /* Rotate left 8 bits */ ++ rotl[0] = in[3]; /* Rotate left 8 bits */ + rotl[1] = in[0]; + rotl[2] = in[1]; + rotl[3] = in[2]; +@@ -230,11 +205,9 @@ VOID mix_column( + andf7[2] = in[2] & 0x7f; + andf7[3] = in[3] & 0x7f; + +- for (i = 3; i>0; i--) /* logical shift left 1 bit */ +- { ++ for (i = 3; i > 0; i--) { /* logical shift left 1 bit */ + andf7[i] = andf7[i] << 1; +- if ((andf7[i-1] & 0x80) == 0x80) +- { ++ if ((andf7[i - 1] & 0x80) == 0x80) { + andf7[i] = (andf7[i] | 0x01); + } + } +@@ -245,40 +218,37 @@ VOID mix_column( + + xor_32(in, add1bf7, rotr); + +- temp[0] = rotr[0]; /* Rotate right 8 bits */ ++ temp[0] = rotr[0]; /* Rotate right 8 bits */ + rotr[0] = rotr[1]; + rotr[1] = rotr[2]; + rotr[2] = rotr[3]; + rotr[3] = temp[0]; + + xor_32(add1bf7, rotr, temp); +- xor_32(swap_halfs, rotl,tempb); ++ xor_32(swap_halfs, rotl, tempb); + xor_32(temp, tempb, out); + } + +- + /************************************************/ + /* construct_mic_header1() */ + /* Builds the first MIC header block from */ + /* header fields. */ + /************************************************/ + +-void construct_mic_header1( +- unsigned char *mic_header1, +- int header_length, +- unsigned char *mpdu) ++void construct_mic_header1(unsigned char *mic_header1, ++ int header_length, unsigned char *mpdu) + { + mic_header1[0] = (unsigned char)((header_length - 2) / 256); + mic_header1[1] = (unsigned char)((header_length - 2) % 256); +- mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */ +- mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */ +- mic_header1[4] = mpdu[4]; /* A1 */ ++ mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */ ++ mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */ ++ mic_header1[4] = mpdu[4]; /* A1 */ + mic_header1[5] = mpdu[5]; + mic_header1[6] = mpdu[6]; + mic_header1[7] = mpdu[7]; + mic_header1[8] = mpdu[8]; + mic_header1[9] = mpdu[9]; +- mic_header1[10] = mpdu[10]; /* A2 */ ++ mic_header1[10] = mpdu[10]; /* A2 */ + mic_header1[11] = mpdu[11]; + mic_header1[12] = mpdu[12]; + mic_header1[13] = mpdu[13]; +@@ -292,17 +262,15 @@ void construct_mic_header1( + /* header fields. */ + /************************************************/ + +-void construct_mic_header2( +- unsigned char *mic_header2, +- unsigned char *mpdu, +- int a4_exists, +- int qc_exists) ++void construct_mic_header2(unsigned char *mic_header2, ++ unsigned char *mpdu, int a4_exists, int qc_exists) + { + int i; + +- for (i = 0; i<16; i++) mic_header2[i]=0x00; ++ for (i = 0; i < 16; i++) ++ mic_header2[i] = 0x00; + +- mic_header2[0] = mpdu[16]; /* A3 */ ++ mic_header2[0] = mpdu[16]; /* A3 */ + mic_header2[1] = mpdu[17]; + mic_header2[2] = mpdu[18]; + mic_header2[3] = mpdu[19]; +@@ -310,66 +278,62 @@ void construct_mic_header2( + mic_header2[5] = mpdu[21]; + + // In Sequence Control field, mute sequence numer bits (12-bit) +- mic_header2[6] = mpdu[22] & 0x0f; /* SC */ +- mic_header2[7] = 0x00; /* mpdu[23]; */ ++ mic_header2[6] = mpdu[22] & 0x0f; /* SC */ ++ mic_header2[7] = 0x00; /* mpdu[23]; */ + +- if ((!qc_exists) & a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ ++ if ((!qc_exists) & a4_exists) { ++ for (i = 0; i < 6; i++) ++ mic_header2[8 + i] = mpdu[24 + i]; /* A4 */ + + } + +- if (qc_exists && (!a4_exists)) +- { +- mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */ ++ if (qc_exists && (!a4_exists)) { ++ mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */ + mic_header2[9] = mpdu[25] & 0x00; + } + +- if (qc_exists && a4_exists) +- { +- for (i=0;i<6;i++) mic_header2[8+i] = mpdu[24+i]; /* A4 */ ++ if (qc_exists && a4_exists) { ++ for (i = 0; i < 6; i++) ++ mic_header2[8 + i] = mpdu[24 + i]; /* A4 */ + + mic_header2[14] = mpdu[30] & 0x0f; + mic_header2[15] = mpdu[31] & 0x00; + } + } + +- + /************************************************/ + /* construct_mic_iv() */ + /* Builds the MIC IV from header fields and PN */ + /************************************************/ + +-void construct_mic_iv( +- unsigned char *mic_iv, +- int qc_exists, +- int a4_exists, +- unsigned char *mpdu, +- unsigned int payload_length, +- unsigned char *pn_vector) ++void construct_mic_iv(unsigned char *mic_iv, ++ int qc_exists, ++ int a4_exists, ++ unsigned char *mpdu, ++ unsigned int payload_length, unsigned char *pn_vector) + { + int i; + + mic_iv[0] = 0x59; + if (qc_exists && a4_exists) +- mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */ ++ mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */ + if (qc_exists && !a4_exists) +- mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */ ++ mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */ + if (!qc_exists) + mic_iv[1] = 0x00; + for (i = 2; i < 8; i++) +- mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */ ++ mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */ + #ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[i - 8]; /* mic_iv[8:13] = PN[0:5] */ ++ for (i = 8; i < 14; i++) ++ mic_iv[i] = pn_vector[i - 8]; /* mic_iv[8:13] = PN[0:5] */ + #else +- for (i = 8; i < 14; i++) +- mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */ ++ for (i = 8; i < 14; i++) ++ mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */ + #endif + i = (payload_length / 256); + i = (payload_length % 256); +- mic_iv[14] = (unsigned char) (payload_length / 256); +- mic_iv[15] = (unsigned char) (payload_length % 256); ++ mic_iv[14] = (unsigned char)(payload_length / 256); ++ mic_iv[15] = (unsigned char)(payload_length % 256); + + } + +@@ -378,7 +342,8 @@ void construct_mic_iv( + /* Performs a 128 bit AES encrypt with */ + /* 128 bit data. */ + /****************************************/ +-void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphertext) ++void aes128k128d(unsigned char *key, unsigned char *data, ++ unsigned char *ciphertext) + { + int round; + int i; +@@ -386,23 +351,19 @@ void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphert + unsigned char intermediateb[16]; + unsigned char round_key[16]; + +- for(i=0; i<16; i++) round_key[i] = key[i]; ++ for (i = 0; i < 16; i++) ++ round_key[i] = key[i]; + +- for (round = 0; round < 11; round++) +- { +- if (round == 0) +- { ++ for (round = 0; round < 11; round++) { ++ if (round == 0) { + xor_128(round_key, data, ciphertext); + next_key(round_key, round); +- } +- else if (round == 10) +- { ++ } else if (round == 10) { + byte_sub(ciphertext, intermediatea); + shift_row(intermediatea, intermediateb); + xor_128(intermediateb, round_key, ciphertext); +- } +- else /* 1 - 9 */ +- { ++ } else { /* 1 - 9 */ ++ + byte_sub(ciphertext, intermediatea); + shift_row(intermediatea, intermediateb); + mix_column(&intermediateb[0], &intermediatea[0]); +@@ -416,75 +377,72 @@ void aes128k128d(unsigned char *key, unsigned char *data, unsigned char *ciphert + + } + +-void construct_ctr_preload( +- unsigned char *ctr_preload, +- int a4_exists, +- int qc_exists, +- unsigned char *mpdu, +- unsigned char *pn_vector, +- int c) ++void construct_ctr_preload(unsigned char *ctr_preload, ++ int a4_exists, ++ int qc_exists, ++ unsigned char *mpdu, unsigned char *pn_vector, int c) + { + + int i = 0; +- for (i=0; i<16; i++) ctr_preload[i] = 0x00; ++ for (i = 0; i < 16; i++) ++ ctr_preload[i] = 0x00; + i = 0; + +- ctr_preload[0] = 0x01; /* flag */ +- if (qc_exists && a4_exists) ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */ +- if (qc_exists && !a4_exists) ctr_preload[1] = mpdu[24] & 0x0f; ++ ctr_preload[0] = 0x01; /* flag */ ++ if (qc_exists && a4_exists) ++ ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */ ++ if (qc_exists && !a4_exists) ++ ctr_preload[1] = mpdu[24] & 0x0f; + + for (i = 2; i < 8; i++) +- ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */ ++ ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */ + #ifdef CONSISTENT_PN_ORDER +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[i - 8]; /* ctr_preload[8:13] = PN[0:5] */ ++ for (i = 8; i < 14; i++) ++ ctr_preload[i] = pn_vector[i - 8]; /* ctr_preload[8:13] = PN[0:5] */ + #else +- for (i = 8; i < 14; i++) +- ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ ++ for (i = 8; i < 14; i++) ++ ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ + #endif +- ctr_preload[14] = (unsigned char) (c / 256); // Ctr +- ctr_preload[15] = (unsigned char) (c % 256); ++ ctr_preload[14] = (unsigned char)(c / 256); // Ctr ++ ctr_preload[15] = (unsigned char)(c % 256); + + } + +-BOOLEAN RTMPSoftDecryptAES( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pWpaKey) ++BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, IN PCIPHER_KEY pWpaKey) + { +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR PN[6]; +- UINT payload_len; +- UINT num_blocks; +- UINT payload_remainder; +- USHORT fc; +- UCHAR fc0; +- UCHAR fc1; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- UCHAR aes_out[16]; +- int payload_index; +- UINT i; +- UCHAR ctr_preload[16]; +- UCHAR chain_buffer[16]; +- UCHAR padded_buffer[16]; +- UCHAR mic_iv[16]; +- UCHAR mic_header1[16]; +- UCHAR mic_header2[16]; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- ++ UCHAR KeyID; ++ UINT HeaderLen; ++ UCHAR PN[6]; ++ UINT payload_len; ++ UINT num_blocks; ++ UINT payload_remainder; ++ USHORT fc; ++ UCHAR fc0; ++ UCHAR fc1; ++ UINT frame_type; ++ UINT frame_subtype; ++ UINT from_ds; ++ UINT to_ds; ++ INT a4_exists; ++ INT qc_exists; ++ UCHAR aes_out[16]; ++ int payload_index; ++ UINT i; ++ UCHAR ctr_preload[16]; ++ UCHAR chain_buffer[16]; ++ UCHAR padded_buffer[16]; ++ UCHAR mic_iv[16]; ++ UCHAR mic_header1[16]; ++ UCHAR mic_header2[16]; ++ UCHAR MIC[8]; ++ UCHAR TrailMIC[8]; + + fc0 = *pData; + fc1 = *(pData + 1); + +- fc = *((PUSHORT)pData); ++ fc = *((PUSHORT) pData); + + frame_type = ((fc0 >> 2) & 0x03); + frame_subtype = ((fc0 >> 4) & 0x0f); +@@ -493,49 +451,42 @@ BOOLEAN RTMPSoftDecryptAES( + to_ds = (fc1 & 0x1); + + a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); ++ qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ ++ (frame_subtype == 0x09) || /* Likely to change. */ ++ (frame_subtype == 0x0a) || (frame_subtype == 0x0b) ++ ); + + HeaderLen = 24; + if (a4_exists) + HeaderLen += 6; + +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); ++ KeyID = *((PUCHAR) (pData + HeaderLen + 3)); + KeyID = KeyID >> 6; + +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptAES failed!(KeyID[%d] Length can not be 0)\n", KeyID)); ++ if (pWpaKey[KeyID].KeyLen == 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSoftDecryptAES failed!(KeyID[%d] Length can not be 0)\n", ++ KeyID)); + return FALSE; + } + +- PN[0] = *(pData+ HeaderLen); +- PN[1] = *(pData+ HeaderLen + 1); +- PN[2] = *(pData+ HeaderLen + 4); +- PN[3] = *(pData+ HeaderLen + 5); +- PN[4] = *(pData+ HeaderLen + 6); +- PN[5] = *(pData+ HeaderLen + 7); ++ PN[0] = *(pData + HeaderLen); ++ PN[1] = *(pData + HeaderLen + 1); ++ PN[2] = *(pData + HeaderLen + 4); ++ PN[3] = *(pData + HeaderLen + 5); ++ PN[4] = *(pData + HeaderLen + 6); ++ PN[5] = *(pData + HeaderLen + 7); + + payload_len = DataByteCnt - HeaderLen - 8 - 8; // 8 bytes for CCMP header , 8 bytes for MIC + payload_remainder = (payload_len) % 16; + num_blocks = (payload_len) / 16; + +- +- + // Find start of payload +- payload_index = HeaderLen + 8; //IV+EIV ++ payload_index = HeaderLen + 8; //IV+EIV + +- for (i=0; i< num_blocks; i++) +- { ++ for (i = 0; i < num_blocks; i++) { + construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- i+1 ); ++ a4_exists, qc_exists, pData, PN, i + 1); + + aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); + +@@ -548,34 +499,26 @@ BOOLEAN RTMPSoftDecryptAES( + // If there is a short final block, then pad it + // encrypt it and copy the unpadded part back + // +- if (payload_remainder > 0) +- { ++ if (payload_remainder > 0) { + construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- num_blocks + 1); ++ a4_exists, ++ qc_exists, pData, PN, num_blocks + 1); + + NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); ++ NdisMoveMemory(padded_buffer, pData + payload_index, ++ payload_remainder); + + aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out); + + bitwise_xor(aes_out, padded_buffer, chain_buffer); +- NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder); ++ NdisMoveMemory(pData + payload_index - 8, chain_buffer, ++ payload_remainder); + payload_index += payload_remainder; + } +- + // + // Descrypt the MIC + // +- construct_ctr_preload(ctr_preload, +- a4_exists, +- qc_exists, +- pData, +- PN, +- 0); ++ construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pData, PN, 0); + NdisZeroMemory(padded_buffer, 16); + NdisMoveMemory(padded_buffer, pData + payload_index, 8); + +@@ -585,7 +528,6 @@ BOOLEAN RTMPSoftDecryptAES( + + NdisMoveMemory(TrailMIC, chain_buffer, 8); + +- + // + // Calculate MIC + // +@@ -597,24 +539,11 @@ BOOLEAN RTMPSoftDecryptAES( + // Because the CCMP header has been removed + payload_index = HeaderLen; + +- construct_mic_iv( +- mic_iv, +- qc_exists, +- a4_exists, +- pData, +- payload_len, +- PN); +- +- construct_mic_header1( +- mic_header1, +- HeaderLen, +- pData); +- +- construct_mic_header2( +- mic_header2, +- pData, +- a4_exists, +- qc_exists); ++ construct_mic_iv(mic_iv, qc_exists, a4_exists, pData, payload_len, PN); ++ ++ construct_mic_header1(mic_header1, HeaderLen, pData); ++ ++ construct_mic_header2(mic_header2, pData, a4_exists, qc_exists); + + aes128k128d(pWpaKey[KeyID].Key, mic_iv, aes_out); + bitwise_xor(aes_out, mic_header1, chain_buffer); +@@ -623,34 +552,31 @@ BOOLEAN RTMPSoftDecryptAES( + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + + // iterate through each 16 byte payload block +- for (i = 0; i < num_blocks; i++) +- { ++ for (i = 0; i < num_blocks; i++) { + bitwise_xor(aes_out, pData + payload_index, chain_buffer); + payload_index += 16; + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + } + + // Add on the final payload block if it needs padding +- if (payload_remainder > 0) +- { ++ if (payload_remainder > 0) { + NdisZeroMemory(padded_buffer, 16); +- NdisMoveMemory(padded_buffer, pData + payload_index, payload_remainder); ++ NdisMoveMemory(padded_buffer, pData + payload_index, ++ payload_remainder); + + bitwise_xor(aes_out, padded_buffer, chain_buffer); + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + } +- + // aes_out contains padded mic, discard most significant + // 8 bytes to generate 64 bit MIC +- for (i = 0 ; i < 8; i++) MIC[i] = aes_out[i]; ++ for (i = 0; i < 8; i++) ++ MIC[i] = aes_out[i]; + +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. ++ if (!NdisEqualMemory(MIC, TrailMIC, 8)) { ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. + return FALSE; + } + +- + return TRUE; + } + +@@ -664,40 +590,39 @@ BOOLEAN RTMPSoftDecryptAES( + #endif + + /* forward S-box */ +-static uint32 FSb[256] = +-{ +- 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, +- 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, +- 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, +- 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, +- 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, +- 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, +- 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, +- 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, +- 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, +- 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, +- 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, +- 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, +- 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, +- 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, +- 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, +- 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, +- 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, +- 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, +- 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, +- 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, +- 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, +- 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, +- 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, +- 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, +- 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, +- 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, +- 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, +- 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, +- 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, +- 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, +- 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, +- 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 ++static uint32 FSb[256] = { ++ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, ++ 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, ++ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, ++ 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, ++ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, ++ 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, ++ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, ++ 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, ++ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, ++ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, ++ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, ++ 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, ++ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, ++ 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, ++ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, ++ 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, ++ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, ++ 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, ++ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, ++ 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, ++ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, ++ 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, ++ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, ++ 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, ++ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, ++ 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, ++ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, ++ 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, ++ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, ++ 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, ++ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, ++ 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + }; + + /* forward table */ +@@ -770,58 +695,61 @@ static uint32 FSb[256] = + + #define V(a,b,c,d) 0x##a##b##c##d + static uint32 FT0[256] = { FT }; ++ + #undef V + + #define V(a,b,c,d) 0x##d##a##b##c + static uint32 FT1[256] = { FT }; ++ + #undef V + + #define V(a,b,c,d) 0x##c##d##a##b + static uint32 FT2[256] = { FT }; ++ + #undef V + + #define V(a,b,c,d) 0x##b##c##d##a + static uint32 FT3[256] = { FT }; ++ + #undef V + + #undef FT + + /* reverse S-box */ + +-static uint32 RSb[256] = +-{ +- 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, +- 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, +- 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, +- 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, +- 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, +- 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, +- 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, +- 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, +- 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, +- 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, +- 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, +- 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, +- 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, +- 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, +- 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, +- 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, +- 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, +- 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, +- 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, +- 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, +- 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, +- 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, +- 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, +- 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, +- 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, +- 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, +- 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, +- 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, +- 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, +- 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, +- 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, +- 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D ++static uint32 RSb[256] = { ++ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, ++ 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, ++ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, ++ 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, ++ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, ++ 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, ++ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, ++ 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, ++ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, ++ 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, ++ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, ++ 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, ++ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, ++ 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, ++ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, ++ 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, ++ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, ++ 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, ++ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, ++ 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, ++ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, ++ 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, ++ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, ++ 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, ++ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, ++ 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, ++ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, ++ 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, ++ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, ++ 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, ++ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, ++ 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + }; + + /* reverse table */ +@@ -895,29 +823,32 @@ static uint32 RSb[256] = + + #define V(a,b,c,d) 0x##a##b##c##d + static uint32 RT0[256] = { RT }; ++ + #undef V + + #define V(a,b,c,d) 0x##d##a##b##c + static uint32 RT1[256] = { RT }; ++ + #undef V + + #define V(a,b,c,d) 0x##c##d##a##b + static uint32 RT2[256] = { RT }; ++ + #undef V + + #define V(a,b,c,d) 0x##b##c##d##a + static uint32 RT3[256] = { RT }; ++ + #undef V + + #undef RT + + /* round constants */ + +-static uint32 RCON[10] = +-{ +- 0x01000000, 0x02000000, 0x04000000, 0x08000000, +- 0x10000000, 0x20000000, 0x40000000, 0x80000000, +- 0x1B000000, 0x36000000 ++static uint32 RCON[10] = { ++ 0x01000000, 0x02000000, 0x04000000, 0x08000000, ++ 0x10000000, 0x20000000, 0x40000000, 0x80000000, ++ 0x1B000000, 0x36000000 + }; + + /* key schedule tables */ +@@ -947,60 +878,61 @@ static uint32 KT3[256]; + (b)[(i) + 3] = (uint8) ( (n) ); \ + } + +- +-int rt_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) ++int rt_aes_set_key(aes_context * ctx, uint8 * key, int nbits) + { +- int i; +- uint32 *RK, *SK; +- +- switch( nbits ) +- { +- case 128: ctx->nr = 10; break; +- case 192: ctx->nr = 12; break; +- case 256: ctx->nr = 14; break; +- default : return( 1 ); ++ int i; ++ uint32 *RK, *SK; ++ ++ switch (nbits) { ++ case 128: ++ ctx->nr = 10; ++ break; ++ case 192: ++ ctx->nr = 12; ++ break; ++ case 256: ++ ctx->nr = 14; ++ break; ++ default: ++ return (1); + } + + RK = (uint32 *) ctx->erk; + +- for( i = 0; i < (nbits >> 5); i++ ) +- { +- GET_UINT32( RK[i], key, i * 4 ); ++ for (i = 0; i < (nbits >> 5); i++) { ++ GET_UINT32(RK[i], key, i * 4); + } + +- /* setup encryption round keys */ ++ /* setup encryption round keys */ + +- switch( nbits ) +- { ++ switch (nbits) { + case 128: + +- for( i = 0; i < 10; i++, RK += 4 ) +- { +- RK[4] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[3] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[3] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[3] >> 24 ) ] ); +- +- RK[5] = RK[1] ^ RK[4]; +- RK[6] = RK[2] ^ RK[5]; +- RK[7] = RK[3] ^ RK[6]; ++ for (i = 0; i < 10; i++, RK += 4) { ++ RK[4] = RK[0] ^ RCON[i] ^ ++ (FSb[(uint8) (RK[3] >> 16)] << 24) ^ ++ (FSb[(uint8) (RK[3] >> 8)] << 16) ^ ++ (FSb[(uint8) (RK[3])] << 8) ^ ++ (FSb[(uint8) (RK[3] >> 24)]); ++ ++ RK[5] = RK[1] ^ RK[4]; ++ RK[6] = RK[2] ^ RK[5]; ++ RK[7] = RK[3] ^ RK[6]; + } + break; + + case 192: + +- for( i = 0; i < 8; i++, RK += 6 ) +- { +- RK[6] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[5] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[5] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[5] >> 24 ) ] ); +- +- RK[7] = RK[1] ^ RK[6]; +- RK[8] = RK[2] ^ RK[7]; +- RK[9] = RK[3] ^ RK[8]; ++ for (i = 0; i < 8; i++, RK += 6) { ++ RK[6] = RK[0] ^ RCON[i] ^ ++ (FSb[(uint8) (RK[5] >> 16)] << 24) ^ ++ (FSb[(uint8) (RK[5] >> 8)] << 16) ^ ++ (FSb[(uint8) (RK[5])] << 8) ^ ++ (FSb[(uint8) (RK[5] >> 24)]); ++ ++ RK[7] = RK[1] ^ RK[6]; ++ RK[8] = RK[2] ^ RK[7]; ++ RK[9] = RK[3] ^ RK[8]; + RK[10] = RK[4] ^ RK[9]; + RK[11] = RK[5] ^ RK[10]; + } +@@ -1008,23 +940,22 @@ int rt_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) + + case 256: + +- for( i = 0; i < 7; i++, RK += 8 ) +- { +- RK[8] = RK[0] ^ RCON[i] ^ +- ( FSb[ (uint8) ( RK[7] >> 16 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 8 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[7] ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[7] >> 24 ) ] ); ++ for (i = 0; i < 7; i++, RK += 8) { ++ RK[8] = RK[0] ^ RCON[i] ^ ++ (FSb[(uint8) (RK[7] >> 16)] << 24) ^ ++ (FSb[(uint8) (RK[7] >> 8)] << 16) ^ ++ (FSb[(uint8) (RK[7])] << 8) ^ ++ (FSb[(uint8) (RK[7] >> 24)]); + +- RK[9] = RK[1] ^ RK[8]; ++ RK[9] = RK[1] ^ RK[8]; + RK[10] = RK[2] ^ RK[9]; + RK[11] = RK[3] ^ RK[10]; + + RK[12] = RK[4] ^ +- ( FSb[ (uint8) ( RK[11] >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( RK[11] >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( RK[11] ) ] ); ++ (FSb[(uint8) (RK[11] >> 24)] << 24) ^ ++ (FSb[(uint8) (RK[11] >> 16)] << 16) ^ ++ (FSb[(uint8) (RK[11] >> 8)] << 8) ^ ++ (FSb[(uint8) (RK[11])]); + + RK[13] = RK[5] ^ RK[12]; + RK[14] = RK[6] ^ RK[13]; +@@ -1033,74 +964,75 @@ int rt_aes_set_key( aes_context *ctx, uint8 *key, int nbits ) + break; + } + +- /* setup decryption round keys */ ++ /* setup decryption round keys */ + +- if( KT_init ) +- { +- for( i = 0; i < 256; i++ ) +- { +- KT0[i] = RT0[ FSb[i] ]; +- KT1[i] = RT1[ FSb[i] ]; +- KT2[i] = RT2[ FSb[i] ]; +- KT3[i] = RT3[ FSb[i] ]; ++ if (KT_init) { ++ for (i = 0; i < 256; i++) { ++ KT0[i] = RT0[FSb[i]]; ++ KT1[i] = RT1[FSb[i]]; ++ KT2[i] = RT2[FSb[i]]; ++ KT3[i] = RT3[FSb[i]]; + } + +- KT_init = 0; ++ KT_init = 0; + } + + SK = (uint32 *) ctx->drk; + +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; + +- for( i = 1; i < ctx->nr; i++ ) +- { ++ for (i = 1; i < ctx->nr; i++) { + RK -= 8; + +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; +- +- *SK++ = KT0[ (uint8) ( *RK >> 24 ) ] ^ +- KT1[ (uint8) ( *RK >> 16 ) ] ^ +- KT2[ (uint8) ( *RK >> 8 ) ] ^ +- KT3[ (uint8) ( *RK ) ]; RK++; ++ *SK++ = KT0[(uint8) (*RK >> 24)] ^ ++ KT1[(uint8) (*RK >> 16)] ^ ++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)]; ++ RK++; ++ ++ *SK++ = KT0[(uint8) (*RK >> 24)] ^ ++ KT1[(uint8) (*RK >> 16)] ^ ++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)]; ++ RK++; ++ ++ *SK++ = KT0[(uint8) (*RK >> 24)] ^ ++ KT1[(uint8) (*RK >> 16)] ^ ++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)]; ++ RK++; ++ ++ *SK++ = KT0[(uint8) (*RK >> 24)] ^ ++ KT1[(uint8) (*RK >> 16)] ^ ++ KT2[(uint8) (*RK >> 8)] ^ KT3[(uint8) (*RK)]; ++ RK++; + } + + RK -= 8; + +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; +- *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; ++ *SK++ = *RK++; + +- return( 0 ); ++ return (0); + } + + /* AES 128-bit block encryption routine */ + +-void rt_aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] ) ++void rt_aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) + { +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; ++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + + RK = (uint32 *) ctx->erk; +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; ++ GET_UINT32(X0, input, 0); ++ X0 ^= RK[0]; ++ GET_UINT32(X1, input, 4); ++ X1 ^= RK[1]; ++ GET_UINT32(X2, input, 8); ++ X2 ^= RK[2]; ++ GET_UINT32(X3, input, 12); ++ X3 ^= RK[3]; + + #define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ + { \ +@@ -1127,70 +1059,68 @@ void rt_aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16] ) + FT3[ (uint8) ( Y2 ) ]; \ + } + +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */ ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */ ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */ ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */ ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */ ++ ++ if (ctx->nr > 10) { ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */ + } + +- if( ctx->nr > 12 ) +- { +- AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ ++ if (ctx->nr > 12) { ++ AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */ ++ AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */ + } + +- /* last round */ ++ /* last round */ + + RK += 4; + +- X0 = RK[0] ^ ( FSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y3 ) ] ); +- +- X1 = RK[1] ^ ( FSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y0 ) ] ); +- +- X2 = RK[2] ^ ( FSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y1 ) ] ); +- +- X3 = RK[3] ^ ( FSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( FSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( FSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( FSb[ (uint8) ( Y2 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); ++ X0 = RK[0] ^ (FSb[(uint8) (Y0 >> 24)] << 24) ^ ++ (FSb[(uint8) (Y1 >> 16)] << 16) ^ ++ (FSb[(uint8) (Y2 >> 8)] << 8) ^ (FSb[(uint8) (Y3)]); ++ ++ X1 = RK[1] ^ (FSb[(uint8) (Y1 >> 24)] << 24) ^ ++ (FSb[(uint8) (Y2 >> 16)] << 16) ^ ++ (FSb[(uint8) (Y3 >> 8)] << 8) ^ (FSb[(uint8) (Y0)]); ++ ++ X2 = RK[2] ^ (FSb[(uint8) (Y2 >> 24)] << 24) ^ ++ (FSb[(uint8) (Y3 >> 16)] << 16) ^ ++ (FSb[(uint8) (Y0 >> 8)] << 8) ^ (FSb[(uint8) (Y1)]); ++ ++ X3 = RK[3] ^ (FSb[(uint8) (Y3 >> 24)] << 24) ^ ++ (FSb[(uint8) (Y0 >> 16)] << 16) ^ ++ (FSb[(uint8) (Y1 >> 8)] << 8) ^ (FSb[(uint8) (Y2)]); ++ ++ PUT_UINT32(X0, output, 0); ++ PUT_UINT32(X1, output, 4); ++ PUT_UINT32(X2, output, 8); ++ PUT_UINT32(X3, output, 12); + } + + /* AES 128-bit block decryption routine */ + +-void rt_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) ++void rt_aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) + { +- uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; ++ uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + + RK = (uint32 *) ctx->drk; + +- GET_UINT32( X0, input, 0 ); X0 ^= RK[0]; +- GET_UINT32( X1, input, 4 ); X1 ^= RK[1]; +- GET_UINT32( X2, input, 8 ); X2 ^= RK[2]; +- GET_UINT32( X3, input, 12 ); X3 ^= RK[3]; ++ GET_UINT32(X0, input, 0); ++ X0 ^= RK[0]; ++ GET_UINT32(X1, input, 4); ++ X1 ^= RK[1]; ++ GET_UINT32(X2, input, 8); ++ X2 ^= RK[2]; ++ GET_UINT32(X3, input, 12); ++ X3 ^= RK[3]; + + #define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ + { \ +@@ -1217,56 +1147,50 @@ void rt_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) + RT3[ (uint8) ( Y0 ) ]; \ + } + +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 1 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 2 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 3 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 4 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 5 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 6 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 7 */ +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 8 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 9 */ +- +- if( ctx->nr > 10 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 10 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 11 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */ ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */ ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */ ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */ ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */ ++ ++ if (ctx->nr > 10) { ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */ + } + +- if( ctx->nr > 12 ) +- { +- AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); /* round 12 */ +- AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); /* round 13 */ ++ if (ctx->nr > 12) { ++ AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */ ++ AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */ + } + +- /* last round */ ++ /* last round */ + + RK += 4; + +- X0 = RK[0] ^ ( RSb[ (uint8) ( Y0 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y3 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y2 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y1 ) ] ); +- +- X1 = RK[1] ^ ( RSb[ (uint8) ( Y1 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y0 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y3 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y2 ) ] ); +- +- X2 = RK[2] ^ ( RSb[ (uint8) ( Y2 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y1 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y0 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y3 ) ] ); +- +- X3 = RK[3] ^ ( RSb[ (uint8) ( Y3 >> 24 ) ] << 24 ) ^ +- ( RSb[ (uint8) ( Y2 >> 16 ) ] << 16 ) ^ +- ( RSb[ (uint8) ( Y1 >> 8 ) ] << 8 ) ^ +- ( RSb[ (uint8) ( Y0 ) ] ); +- +- PUT_UINT32( X0, output, 0 ); +- PUT_UINT32( X1, output, 4 ); +- PUT_UINT32( X2, output, 8 ); +- PUT_UINT32( X3, output, 12 ); ++ X0 = RK[0] ^ (RSb[(uint8) (Y0 >> 24)] << 24) ^ ++ (RSb[(uint8) (Y3 >> 16)] << 16) ^ ++ (RSb[(uint8) (Y2 >> 8)] << 8) ^ (RSb[(uint8) (Y1)]); ++ ++ X1 = RK[1] ^ (RSb[(uint8) (Y1 >> 24)] << 24) ^ ++ (RSb[(uint8) (Y0 >> 16)] << 16) ^ ++ (RSb[(uint8) (Y3 >> 8)] << 8) ^ (RSb[(uint8) (Y2)]); ++ ++ X2 = RK[2] ^ (RSb[(uint8) (Y2 >> 24)] << 24) ^ ++ (RSb[(uint8) (Y1 >> 16)] << 16) ^ ++ (RSb[(uint8) (Y0 >> 8)] << 8) ^ (RSb[(uint8) (Y3)]); ++ ++ X3 = RK[3] ^ (RSb[(uint8) (Y3 >> 24)] << 24) ^ ++ (RSb[(uint8) (Y2 >> 16)] << 16) ^ ++ (RSb[(uint8) (Y1 >> 8)] << 8) ^ (RSb[(uint8) (Y0)]); ++ ++ PUT_UINT32(X0, output, 0); ++ PUT_UINT32(X1, output, 4); ++ PUT_UINT32(X2, output, 8); ++ PUT_UINT32(X3, output, 12); + } + + /* +@@ -1278,57 +1202,51 @@ void rt_aes_decrypt( aes_context *ctx, uint8 input[16], uint8 output[16] ) + Return: + ========================================================================== + */ +-VOID AES_GTK_KEY_WRAP( +- IN UCHAR *key, +- IN UCHAR *plaintext, +- IN UINT32 p_len, +- OUT UCHAR *ciphertext) ++VOID AES_GTK_KEY_WRAP(IN UCHAR * key, ++ IN UCHAR * plaintext, ++ IN UINT32 p_len, OUT UCHAR * ciphertext) + { +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR R[512]; +- INT num_blocks = p_len/8; // unit:64bits +- INT i, j; +- aes_context aesctx; +- UCHAR xor; +- +- rt_aes_set_key(&aesctx, key, 128); +- +- // Init IA +- for (i = 0; i < 8; i++) +- A[i] = 0xa6; +- +- //Input plaintext +- for (i = 0; i < num_blocks; i++) +- { +- for (j = 0 ; j < 8; j++) +- R[8 * (i + 1) + j] = plaintext[8 * i + j]; +- } +- +- // Key Mix +- for (j = 0; j < 6; j++) +- { +- for(i = 1; i <= num_blocks; i++) +- { +- //phase 1 +- NdisMoveMemory(BIN, A, 8); +- NdisMoveMemory(&BIN[8], &R[8 * i], 8); +- rt_aes_encrypt(&aesctx, BIN, BOUT); +- +- NdisMoveMemory(A, &BOUT[0], 8); +- xor = num_blocks * j + i; +- A[7] = BOUT[7] ^ xor; +- NdisMoveMemory(&R[8 * i], &BOUT[8], 8); +- } +- } +- +- // Output ciphertext +- NdisMoveMemory(ciphertext, A, 8); +- +- for (i = 1; i <= num_blocks; i++) +- { +- for (j = 0 ; j < 8; j++) +- ciphertext[8 * i + j] = R[8 * i + j]; +- } ++ UCHAR A[8], BIN[16], BOUT[16]; ++ UCHAR R[512]; ++ INT num_blocks = p_len / 8; // unit:64bits ++ INT i, j; ++ aes_context aesctx; ++ UCHAR xor; ++ ++ rt_aes_set_key(&aesctx, key, 128); ++ ++ // Init IA ++ for (i = 0; i < 8; i++) ++ A[i] = 0xa6; ++ ++ //Input plaintext ++ for (i = 0; i < num_blocks; i++) { ++ for (j = 0; j < 8; j++) ++ R[8 * (i + 1) + j] = plaintext[8 * i + j]; ++ } ++ ++ // Key Mix ++ for (j = 0; j < 6; j++) { ++ for (i = 1; i <= num_blocks; i++) { ++ //phase 1 ++ NdisMoveMemory(BIN, A, 8); ++ NdisMoveMemory(&BIN[8], &R[8 * i], 8); ++ rt_aes_encrypt(&aesctx, BIN, BOUT); ++ ++ NdisMoveMemory(A, &BOUT[0], 8); ++ xor = num_blocks * j + i; ++ A[7] = BOUT[7] ^ xor; ++ NdisMoveMemory(&R[8 * i], &BOUT[8], 8); ++ } ++ } ++ ++ // Output ciphertext ++ NdisMoveMemory(ciphertext, A, 8); ++ ++ for (i = 1; i <= num_blocks; i++) { ++ for (j = 0; j < 8; j++) ++ ciphertext[8 * i + j] = R[8 * i + j]; ++ } + } + + /* +@@ -1346,59 +1264,50 @@ VOID AES_GTK_KEY_WRAP( + + ======================================================================== + */ +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UINT32 c_len, +- IN UCHAR *ciphertext) +- ++VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, ++ OUT UCHAR * plaintext, ++ IN UINT32 c_len, IN UCHAR * ciphertext) + { +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR xor; +- INT i, j; ++ UCHAR A[8], BIN[16], BOUT[16]; ++ UCHAR xor; ++ INT i, j; + aes_context aesctx; +- UCHAR *R; +- INT num_blocks = c_len/8; // unit:64bits ++ UCHAR *R; ++ INT num_blocks = c_len / 8; // unit:64bits + ++ os_alloc_mem(NULL, (PUCHAR *) & R, 512); + +- os_alloc_mem(NULL, (PUCHAR *)&R, 512); +- +- if (R == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); +- return; +- } /* End of if */ +- ++ if (R == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); ++ return; ++ } ++ /* End of if */ + // Initialize + NdisMoveMemory(A, ciphertext, 8); + //Input plaintext +- for(i = 0; i < (c_len-8); i++) +- { +- R[ i] = ciphertext[i + 8]; ++ for (i = 0; i < (c_len - 8); i++) { ++ R[i] = ciphertext[i + 8]; + } + + rt_aes_set_key(&aesctx, key, 128); + +- for(j = 5; j >= 0; j--) +- { +- for(i = (num_blocks-1); i > 0; i--) +- { +- xor = (num_blocks -1 )* j + i; ++ for (j = 5; j >= 0; j--) { ++ for (i = (num_blocks - 1); i > 0; i--) { ++ xor = (num_blocks - 1) * j + i; + NdisMoveMemory(BIN, A, 8); + BIN[7] = A[7] ^ xor; +- NdisMoveMemory(&BIN[8], &R[(i-1)*8], 8); ++ NdisMoveMemory(&BIN[8], &R[(i - 1) * 8], 8); + rt_aes_decrypt(&aesctx, BIN, BOUT); + NdisMoveMemory(A, &BOUT[0], 8); +- NdisMoveMemory(&R[(i-1)*8], &BOUT[8], 8); ++ NdisMoveMemory(&R[(i - 1) * 8], &BOUT[8], 8); + } + } + + // OUTPUT +- for(i = 0; i < c_len; i++) +- { ++ for (i = 0; i < c_len; i++) { + plaintext[i] = R[i]; + } + +- + os_free_mem(NULL, R); + } +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index 406e0bb..7205b36 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -37,124 +37,195 @@ + + #include "../rt_config.h" + +- + // Reset the RFIC setting to new series + RTMP_RF_REGS RF2850RegTable[] = { +-// ch R1 R2 R3(TX0~4=0) R4 +- {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b}, +- {2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f}, +- {3, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800518b}, +- {4, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800519f}, +- {5, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800518b}, +- {6, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800519f}, +- {7, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800518b}, +- {8, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800519f}, +- {9, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800518b}, +- {10, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800519f}, +- {11, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800518b}, +- {12, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800519f}, +- {13, 0x98402ecc, 0x984c079e, 0x98168a55, 0x9800518b}, +- {14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193}, +- +- // 802.11 UNI / HyperLan 2 +- {36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3}, +- {38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193}, +- {40, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed183}, +- {44, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed1a3}, +- {46, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed18b}, +- {48, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed19b}, +- {52, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed193}, +- {54, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed1a3}, +- {56, 0x98402ec8, 0x984c068e, 0x98158a55, 0x980ed18b}, +- {60, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed183}, +- {62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193}, +- {64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3}, // Plugfest#4, Day4, change RFR3 left4th 9->5. +- +- // 802.11 HyperLan 2 +- {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783}, +- +- // 2008.04.30 modified +- // The system team has AN to improve the EVM value +- // for channel 102 to 108 for the RT2850/RT2750 dual band solution. +- {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793}, +- {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3}, +- {108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193}, +- +- {110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183}, +- {112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b}, +- {116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3}, +- {118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193}, +- {120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183}, +- {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193}, +- {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b}, // 0x980ed1bb->0x980ed15b required by Rory 20070927 +- {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3}, +- {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b}, +- {134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193}, +- {136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b}, +- {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183}, +- +- // 802.11 UNII +- {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7}, +- {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187}, +- {153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f}, +- {157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f}, +- {159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7}, +- {161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187}, +- {165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197}, +- {167, 0x98402ec4, 0x984c03d2, 0x98179855, 0x9815531f}, +- {169, 0x98402ec4, 0x984c03d2, 0x98179855, 0x98155327}, +- {171, 0x98402ec4, 0x984c03d6, 0x98179855, 0x98155307}, +- {173, 0x98402ec4, 0x984c03d6, 0x98179855, 0x9815530f}, +- +- // Japan +- {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b}, +- {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13}, +- {192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b}, +- {196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23}, +- {208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13}, +- {212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b}, +- {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23}, +- +- // still lack of MMAC(Japan) ch 34,38,42,46 ++// ch R1 R2 R3(TX0~4=0) R4 ++ {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b} ++ , ++ {2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f} ++ , ++ {3, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800518b} ++ , ++ {4, 0x98402ecc, 0x984c078a, 0x98168a55, 0x9800519f} ++ , ++ {5, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800518b} ++ , ++ {6, 0x98402ecc, 0x984c078e, 0x98168a55, 0x9800519f} ++ , ++ {7, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800518b} ++ , ++ {8, 0x98402ecc, 0x984c0792, 0x98168a55, 0x9800519f} ++ , ++ {9, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800518b} ++ , ++ {10, 0x98402ecc, 0x984c0796, 0x98168a55, 0x9800519f} ++ , ++ {11, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800518b} ++ , ++ {12, 0x98402ecc, 0x984c079a, 0x98168a55, 0x9800519f} ++ , ++ {13, 0x98402ecc, 0x984c079e, 0x98168a55, 0x9800518b} ++ , ++ {14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193} ++ , ++ ++ // 802.11 UNI / HyperLan 2 ++ {36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3} ++ , ++ {38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193} ++ , ++ {40, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed183} ++ , ++ {44, 0x98402ec8, 0x984c0682, 0x98158a55, 0x980ed1a3} ++ , ++ {46, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed18b} ++ , ++ {48, 0x98402ec8, 0x984c0686, 0x98158a55, 0x980ed19b} ++ , ++ {52, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed193} ++ , ++ {54, 0x98402ec8, 0x984c068a, 0x98158a55, 0x980ed1a3} ++ , ++ {56, 0x98402ec8, 0x984c068e, 0x98158a55, 0x980ed18b} ++ , ++ {60, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed183} ++ , ++ {62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193} ++ , ++ {64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3} ++ , // Plugfest#4, Day4, change RFR3 left4th 9->5. ++ ++ // 802.11 HyperLan 2 ++ {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783} ++ , ++ ++ // 2008.04.30 modified ++ // The system team has AN to improve the EVM value ++ // for channel 102 to 108 for the RT2850/RT2750 dual band solution. ++ {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793} ++ , ++ {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3} ++ , ++ {108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193} ++ , ++ ++ {110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183} ++ , ++ {112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b} ++ , ++ {116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3} ++ , ++ {118, 0x98402ecc, 0x984c0a3e, 0x98178a55, 0x980ed193} ++ , ++ {120, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed183} ++ , ++ {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193} ++ , ++ {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b} ++ , // 0x980ed1bb->0x980ed15b required by Rory 20070927 ++ {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3} ++ , ++ {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b} ++ , ++ {134, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed193} ++ , ++ {136, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed19b} ++ , ++ {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183} ++ , ++ ++ // 802.11 UNII ++ {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7} ++ , ++ {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187} ++ , ++ {153, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed18f} ++ , ++ {157, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed19f} ++ , ++ {159, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed1a7} ++ , ++ {161, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed187} ++ , ++ {165, 0x98402ec4, 0x984c0392, 0x98178a55, 0x980ed197} ++ , ++ {167, 0x98402ec4, 0x984c03d2, 0x98179855, 0x9815531f} ++ , ++ {169, 0x98402ec4, 0x984c03d2, 0x98179855, 0x98155327} ++ , ++ {171, 0x98402ec4, 0x984c03d6, 0x98179855, 0x98155307} ++ , ++ {173, 0x98402ec4, 0x984c03d6, 0x98179855, 0x9815530f} ++ , ++ ++ // Japan ++ {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b} ++ , ++ {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13} ++ , ++ {192, 0x95002ccc, 0x95004926, 0x9509be55, 0x950c0a1b} ++ , ++ {196, 0x95002ccc, 0x9500492a, 0x9509be55, 0x950c0a23} ++ , ++ {208, 0x95002ccc, 0x9500493a, 0x9509be55, 0x950c0a13} ++ , ++ {212, 0x95002ccc, 0x9500493e, 0x9509be55, 0x950c0a1b} ++ , ++ {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23} ++ , ++ ++ // still lack of MMAC(Japan) ch 34,38,42,46 + }; +-UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); + +-FREQUENCY_ITEM FreqItems3020[] = +-{ ++UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); ++ ++FREQUENCY_ITEM FreqItems3020[] = { + /**************************************************/ + // ISM : 2.4 to 2.483 GHz // + /**************************************************/ + // 11g + /**************************************************/ + //-CH---N-------R---K----------- +- {1, 241, 2, 2}, +- {2, 241, 2, 7}, +- {3, 242, 2, 2}, +- {4, 242, 2, 7}, +- {5, 243, 2, 2}, +- {6, 243, 2, 7}, +- {7, 244, 2, 2}, +- {8, 244, 2, 7}, +- {9, 245, 2, 2}, +- {10, 245, 2, 7}, +- {11, 246, 2, 2}, +- {12, 246, 2, 7}, +- {13, 247, 2, 2}, +- {14, 248, 2, 4}, ++ {1, 241, 2, 2} ++ , ++ {2, 241, 2, 7} ++ , ++ {3, 242, 2, 2} ++ , ++ {4, 242, 2, 7} ++ , ++ {5, 243, 2, 2} ++ , ++ {6, 243, 2, 7} ++ , ++ {7, 244, 2, 2} ++ , ++ {8, 244, 2, 7} ++ , ++ {9, 245, 2, 2} ++ , ++ {10, 245, 2, 7} ++ , ++ {11, 246, 2, 2} ++ , ++ {12, 246, 2, 7} ++ , ++ {13, 247, 2, 2} ++ , ++ {14, 248, 2, 4} ++ , + }; +-UCHAR NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); + ++UCHAR NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); + +-VOID AsicUpdateAutoFallBackTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRateTable) ++VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + { +- UCHAR i; +- HT_FBK_CFG0_STRUC HtCfg0; +- HT_FBK_CFG1_STRUC HtCfg1; +- LG_FBK_CFG0_STRUC LgCfg0; +- LG_FBK_CFG1_STRUC LgCfg1; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; ++ UCHAR i; ++ HT_FBK_CFG0_STRUC HtCfg0; ++ HT_FBK_CFG1_STRUC HtCfg1; ++ LG_FBK_CFG0_STRUC LgCfg0; ++ LG_FBK_CFG1_STRUC LgCfg1; ++ PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; + + // set to initial value + HtCfg0.word = 0x65432100; +@@ -162,106 +233,162 @@ VOID AsicUpdateAutoFallBackTable( + LgCfg0.word = 0xedcba988; + LgCfg1.word = 0x00002100; + +- pNextTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1; +- for (i = 1; i < *((PUCHAR) pRateTable); i++) +- { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH)pRateTable+1+i; +- switch (pCurrTxRate->Mode) +- { +- case 0: //CCK +- break; +- case 1: //OFDM +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- LgCfg0.field.OFDMMCS0FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 1: +- LgCfg0.field.OFDMMCS1FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 2: +- LgCfg0.field.OFDMMCS2FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 3: +- LgCfg0.field.OFDMMCS3FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 4: +- LgCfg0.field.OFDMMCS4FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 5: +- LgCfg0.field.OFDMMCS5FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 6: +- LgCfg0.field.OFDMMCS6FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- case 7: +- LgCfg0.field.OFDMMCS7FBK = (pNextTxRate->Mode == MODE_OFDM) ? (pNextTxRate->CurrMCS+8): pNextTxRate->CurrMCS; +- break; +- } ++ pNextTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1; ++ for (i = 1; i < *((PUCHAR) pRateTable); i++) { ++ pCurrTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1 + i; ++ switch (pCurrTxRate->Mode) { ++ case 0: //CCK ++ break; ++ case 1: //OFDM ++ { ++ switch (pCurrTxRate->CurrMCS) { ++ case 0: ++ LgCfg0.field.OFDMMCS0FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 1: ++ LgCfg0.field.OFDMMCS1FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 2: ++ LgCfg0.field.OFDMMCS2FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 3: ++ LgCfg0.field.OFDMMCS3FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 4: ++ LgCfg0.field.OFDMMCS4FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 5: ++ LgCfg0.field.OFDMMCS5FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 6: ++ LgCfg0.field.OFDMMCS6FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; ++ case 7: ++ LgCfg0.field.OFDMMCS7FBK = ++ (pNextTxRate->Mode == ++ MODE_OFDM) ? (pNextTxRate-> ++ CurrMCS + ++ 8) : pNextTxRate-> ++ CurrMCS; ++ break; + } +- break; +- case 2: //HT-MIX +- case 3: //HT-GF +- { +- if ((pNextTxRate->Mode >= MODE_HTMIX) && (pCurrTxRate->CurrMCS != pNextTxRate->CurrMCS)) +- { +- switch(pCurrTxRate->CurrMCS) +- { +- case 0: +- HtCfg0.field.HTMCS0FBK = pNextTxRate->CurrMCS; +- break; +- case 1: +- HtCfg0.field.HTMCS1FBK = pNextTxRate->CurrMCS; +- break; +- case 2: +- HtCfg0.field.HTMCS2FBK = pNextTxRate->CurrMCS; +- break; +- case 3: +- HtCfg0.field.HTMCS3FBK = pNextTxRate->CurrMCS; +- break; +- case 4: +- HtCfg0.field.HTMCS4FBK = pNextTxRate->CurrMCS; +- break; +- case 5: +- HtCfg0.field.HTMCS5FBK = pNextTxRate->CurrMCS; +- break; +- case 6: +- HtCfg0.field.HTMCS6FBK = pNextTxRate->CurrMCS; +- break; +- case 7: +- HtCfg0.field.HTMCS7FBK = pNextTxRate->CurrMCS; +- break; +- case 8: +- HtCfg1.field.HTMCS8FBK = pNextTxRate->CurrMCS; +- break; +- case 9: +- HtCfg1.field.HTMCS9FBK = pNextTxRate->CurrMCS; +- break; +- case 10: +- HtCfg1.field.HTMCS10FBK = pNextTxRate->CurrMCS; +- break; +- case 11: +- HtCfg1.field.HTMCS11FBK = pNextTxRate->CurrMCS; +- break; +- case 12: +- HtCfg1.field.HTMCS12FBK = pNextTxRate->CurrMCS; +- break; +- case 13: +- HtCfg1.field.HTMCS13FBK = pNextTxRate->CurrMCS; +- break; +- case 14: +- HtCfg1.field.HTMCS14FBK = pNextTxRate->CurrMCS; +- break; +- case 15: +- HtCfg1.field.HTMCS15FBK = pNextTxRate->CurrMCS; +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("AsicUpdateAutoFallBackTable: not support CurrMCS=%d\n", pCurrTxRate->CurrMCS)); +- } ++ } ++ break; ++ case 2: //HT-MIX ++ case 3: //HT-GF ++ { ++ if ((pNextTxRate->Mode >= MODE_HTMIX) ++ && (pCurrTxRate->CurrMCS != ++ pNextTxRate->CurrMCS)) { ++ switch (pCurrTxRate->CurrMCS) { ++ case 0: ++ HtCfg0.field.HTMCS0FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 1: ++ HtCfg0.field.HTMCS1FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 2: ++ HtCfg0.field.HTMCS2FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 3: ++ HtCfg0.field.HTMCS3FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 4: ++ HtCfg0.field.HTMCS4FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 5: ++ HtCfg0.field.HTMCS5FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 6: ++ HtCfg0.field.HTMCS6FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 7: ++ HtCfg0.field.HTMCS7FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 8: ++ HtCfg1.field.HTMCS8FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 9: ++ HtCfg1.field.HTMCS9FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 10: ++ HtCfg1.field.HTMCS10FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 11: ++ HtCfg1.field.HTMCS11FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 12: ++ HtCfg1.field.HTMCS12FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 13: ++ HtCfg1.field.HTMCS13FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 14: ++ HtCfg1.field.HTMCS14FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ case 15: ++ HtCfg1.field.HTMCS15FBK = ++ pNextTxRate->CurrMCS; ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("AsicUpdateAutoFallBackTable: not support CurrMCS=%d\n", ++ pCurrTxRate-> ++ CurrMCS)); + } + } +- break; ++ } ++ break; + } + + pNextTxRate = pCurrTxRate; +@@ -290,49 +417,39 @@ VOID AsicUpdateAutoFallBackTable( + we should choose not to use GF. But still set correct ASIC registers. + ======================================================================== + */ +-VOID AsicUpdateProtect( +- IN PRTMP_ADAPTER pAd, +- IN USHORT OperationMode, +- IN UCHAR SetMask, +- IN BOOLEAN bDisableBGProtect, +- IN BOOLEAN bNonGFExist) ++VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++ IN USHORT OperationMode, ++ IN UCHAR SetMask, ++ IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist) + { +- PROT_CFG_STRUC ProtCfg, ProtCfg4; ++ PROT_CFG_STRUC ProtCfg, ProtCfg4; + UINT32 Protect[6]; +- USHORT offset; +- UCHAR i; ++ USHORT offset; ++ UCHAR i; + UINT32 MacReg = 0; + +- +- if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) +- { ++ if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) { + return; + } + +- if (pAd->BATable.numDoneOriginator) +- { ++ if (pAd->BATable.numDoneOriginator) { + // + // enable the RTS/CTS to avoid channel collision + // + SetMask = ALLN_SETPROTECT; + OperationMode = 8; + } +- + // Config ASIC RTS threshold register + RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); + MacReg &= 0xFF0000FF; + // If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 +- if (( +- (pAd->CommonCfg.BACapability.field.AmsduEnable) || +- (pAd->CommonCfg.bAggregationCapable == TRUE)) +- && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) +- { +- MacReg |= (0x1000 << 8); +- } +- else +- { +- MacReg |= (pAd->CommonCfg.RtsThreshold << 8); +- } ++ if (((pAd->CommonCfg.BACapability.field.AmsduEnable) || ++ (pAd->CommonCfg.bAggregationCapable == TRUE)) ++ && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) { ++ MacReg |= (0x1000 << 8); ++ } else { ++ MacReg |= (pAd->CommonCfg.RtsThreshold << 8); ++ } + + RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); + +@@ -355,165 +472,155 @@ VOID AsicUpdateProtect( + ProtCfg.field.ProtectRate |= pAd->CommonCfg.RtsRate; + + // Handle legacy(B/G) protection +- if (bDisableBGProtect) +- { ++ if (bDisableBGProtect) { + //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; + ProtCfg.field.ProtectCtrl = 0; + Protect[0] = ProtCfg.word; + Protect[1] = ProtCfg.word; +- pAd->FlgCtsEnabled = 0; /* CTS-self is not used */ +- } +- else +- { ++ pAd->FlgCtsEnabled = 0; /* CTS-self is not used */ ++ } else { + //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected ++ ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected + Protect[0] = ProtCfg.word; + ProtCfg.field.ProtectCtrl = ASIC_CTS; // OFDM needs using CCK to protect + Protect[1] = ProtCfg.word; +- pAd->FlgCtsEnabled = 1; /* CTS-self is used */ ++ pAd->FlgCtsEnabled = 1; /* CTS-self is used */ + } + + // Decide HT frame protection. +- if ((SetMask & ALLN_SETPROTECT) != 0) +- { +- switch(OperationMode) +- { +- case 0x0: +- // NO PROTECT +- // 1.All STAs in the BSS are 20/40 MHz HT +- // 2. in ai 20/40MHz BSS +- // 3. all STAs are 20MHz in a 20MHz BSS +- // Pure HT. no protection. +- +- // MM20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[2] = 0x01744004; +- +- // MM40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[3] = 0x03f44084; +- +- // CF20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) +- Protect[4] = 0x01744004; +- +- // CF40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) +- Protect[5] = 0x03f44084; +- +- if (bNonGFExist) +- { +- // PROT_NAV(19:18) -- 01 (Short NAV protectiion) +- // PROT_CTRL(17:16) -- 01 (RTS/CTS) +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- } +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; ++ if ((SetMask & ALLN_SETPROTECT) != 0) { ++ switch (OperationMode) { ++ case 0x0: ++ // NO PROTECT ++ // 1.All STAs in the BSS are 20/40 MHz HT ++ // 2. in ai 20/40MHz BSS ++ // 3. all STAs are 20MHz in a 20MHz BSS ++ // Pure HT. no protection. ++ ++ // MM20_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 010111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ Protect[2] = 0x01744004; ++ ++ // MM40_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 111111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ Protect[3] = 0x03f44084; ++ ++ // CF20_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 010111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ Protect[4] = 0x01744004; ++ ++ // CF40_PROT_CFG ++ // Reserved (31:27) ++ // PROT_TXOP(25:20) -- 111111 ++ // PROT_NAV(19:18) -- 01 (Short NAV protection) ++ // PROT_CTRL(17:16) -- 00 (None) ++ // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ Protect[5] = 0x03f44084; ++ ++ if (bNonGFExist) { ++ // PROT_NAV(19:18) -- 01 (Short NAV protectiion) ++ // PROT_CTRL(17:16) -- 01 (RTS/CTS) ++ Protect[4] = 0x01754004; ++ Protect[5] = 0x03f54084; ++ } ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; ++ break; + +- case 1: +- // This is "HT non-member protection mode." +- // If there may be non-HT STAs my BSS +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; +- } +- //Assign Protection method for 20&40 MHz packets ++ case 1: ++ // This is "HT non-member protection mode." ++ // If there may be non-HT STAs my BSS ++ ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) ++ ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_BG_PROTECTION_INUSED)) { ++ ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. ++ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; ++ } ++ //Assign Protection method for 20&40 MHz packets ++ ProtCfg.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; ++ ++ case 2: ++ // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets ++ ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) ++ ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ ++ //Assign Protection method for 40MHz packets ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ if (bNonGFExist) { + ProtCfg.field.ProtectCtrl = ASIC_RTS; + ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; +- +- case 2: +- // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. +- +- //Assign Protection method for 40MHz packets +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- if (bNonGFExist) +- { +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- } +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; ++ } ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; + +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; +- break; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE; ++ break; + +- case 3: +- // HT mixed mode. PROTECT ALL! +- // Assign Rate +- ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. +- ProtCfg4.word = 0x03f44084; +- // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) +- { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 +- } +- //Assign Protection method for 20&40 MHz packets +- ProtCfg.field.ProtectCtrl = ASIC_RTS; +- ProtCfg.field.ProtectNav = ASIC_SHORTNAV; +- ProtCfg4.field.ProtectCtrl = ASIC_RTS; +- ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; +- Protect[2] = ProtCfg.word; +- Protect[3] = ProtCfg4.word; +- Protect[4] = ProtCfg.word; +- Protect[5] = ProtCfg4.word; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; ++ case 3: ++ // HT mixed mode. PROTECT ALL! ++ // Assign Rate ++ ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. ++ ProtCfg4.word = 0x03f44084; ++ // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_BG_PROTECTION_INUSED)) { ++ ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. ++ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 ++ } ++ //Assign Protection method for 20&40 MHz packets ++ ProtCfg.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg.field.ProtectNav = ASIC_SHORTNAV; ++ ProtCfg4.field.ProtectCtrl = ASIC_RTS; ++ ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; ++ Protect[2] = ProtCfg.word; ++ Protect[3] = ProtCfg4.word; ++ Protect[4] = ProtCfg.word; ++ Protect[5] = ProtCfg4.word; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; + +- case 8: +- // Special on for Atheros problem n chip. +- Protect[2] = 0x01754004; +- Protect[3] = 0x03f54084; +- Protect[4] = 0x01754004; +- Protect[5] = 0x03f54084; +- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; +- break; ++ case 8: ++ // Special on for Atheros problem n chip. ++ Protect[2] = 0x01754004; ++ Protect[3] = 0x03f54084; ++ Protect[4] = 0x01754004; ++ Protect[5] = 0x03f54084; ++ pAd->CommonCfg.IOTestParm.bRTSLongProtOn = TRUE; ++ break; + } + } + + offset = CCK_PROT_CFG; +- for (i = 0;i < 6;i++) +- { +- if ((SetMask & (1<< i))) +- { +- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]); ++ for (i = 0; i < 6; i++) { ++ if ((SetMask & (1 << i))) { ++ RTMP_IO_WRITE32(pAd, offset + i * 4, Protect[i]); ++ } + } + } +-} +- + + /* + ========================================================================== +@@ -524,54 +631,51 @@ VOID AsicUpdateProtect( + + ========================================================================== + */ +-VOID AsicSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN BOOLEAN bScan) ++VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + { +- ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; +- CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; +- UCHAR index; +- UINT32 Value = 0; //BbpReg, Value; ++ ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; ++ CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; ++ UCHAR index; ++ UINT32 Value = 0; //BbpReg, Value; + RTMP_RF_REGS *RFRegTable; +- UCHAR RFValue; ++ UCHAR RFValue; + + RFValue = 0; + // Search Tx power value + // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list + // in ChannelList, so use TxPower array instead. + // +- for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) +- { +- if (Channel == pAd->TxPower[index].Channel) +- { ++ for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) { ++ if (Channel == pAd->TxPower[index].Channel) { + TxPwer = pAd->TxPower[index].Power; + TxPwer2 = pAd->TxPower[index].Power2; + break; + } + } + +- if (index == MAX_NUM_OF_CHANNELS) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Can't find the Channel#%d \n", Channel)); ++ if (index == MAX_NUM_OF_CHANNELS) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("AsicSwitchChannel: Can't find the Channel#%d \n", ++ Channel)); + } +- + #ifdef RT30xx + // The RF programming sequence is difference between 3xxx and 2xxx +- if ((IS_RT3070(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) || +- (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022))) +- { ++ if ((IS_RT3070(pAd) || IS_RT3090(pAd) || IS_RT3390(pAd)) ++ && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) ++ || (pAd->RfIcType == RFIC_3021) ++ || (pAd->RfIcType == RFIC_3022))) { + /* modify by WY for Read RF Reg. error */ + +- for (index = 0; index < NUM_OF_3020_CHNL; index++) +- { +- if (Channel == FreqItems3020[index].Channel) +- { ++ for (index = 0; index < NUM_OF_3020_CHNL; index++) { ++ if (Channel == FreqItems3020[index].Channel) { + // Programming channel parameters +- RT30xxWriteRFRegister(pAd, RF_R02, FreqItems3020[index].N); +- RT30xxWriteRFRegister(pAd, RF_R03, FreqItems3020[index].K); ++ RT30xxWriteRFRegister(pAd, RF_R02, ++ FreqItems3020[index].N); ++ RT30xxWriteRFRegister(pAd, RF_R03, ++ FreqItems3020[index].K); + RT30xxReadRFRegister(pAd, RF_R06, &RFValue); +- RFValue = (RFValue & 0xFC) | FreqItems3020[index].R; ++ RFValue = ++ (RFValue & 0xFC) | FreqItems3020[index].R; + RT30xxWriteRFRegister(pAd, RF_R06, RFValue); + + // Set Tx0 Power +@@ -587,7 +691,7 @@ VOID AsicSwitchChannel( + // Tx/Rx Stream setting + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); + //if (IS_RT3090(pAd)) +- // RFValue |= 0x01; // Enable RF block. ++ // RFValue |= 0x01; // Enable RF block. + RFValue &= 0x03; //clear bit[7~2] + if (pAd->Antenna.field.TxPath == 1) + RFValue |= 0xA0; +@@ -605,13 +709,11 @@ VOID AsicSwitchChannel( + RT30xxWriteRFRegister(pAd, RF_R23, RFValue); + + // Set BW +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { ++ if (!bScan ++ && (pAd->CommonCfg.BBPCurrentBW == BW_40)) { + RFValue = pAd->Mlme.CaliBW40RfR24; + //DISABLE_11N_CHECK(pAd); +- } +- else +- { ++ } else { + RFValue = pAd->Mlme.CaliBW20RfR24; + } + RT30xxWriteRFRegister(pAd, RF_R24, RFValue); +@@ -625,166 +727,186 @@ VOID AsicSwitchChannel( + // latch channel for future usage. + pAd->LatchRfRegs.Channel = Channel; + +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", +- Channel, +- pAd->RfIcType, +- TxPwer, +- TxPwer2, +- pAd->Antenna.field.TxPath, +- FreqItems3020[index].N, +- FreqItems3020[index].K, +- FreqItems3020[index].R)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n", ++ Channel, pAd->RfIcType, TxPwer, ++ TxPwer2, pAd->Antenna.field.TxPath, ++ FreqItems3020[index].N, ++ FreqItems3020[index].K, ++ FreqItems3020[index].R)); + + break; + } + } +- } +- else ++ } else + #endif // RT30xx // + { + RFRegTable = RF2850RegTable; +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } ++ switch (pAd->RfIcType) { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: + +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) { ++ if (Channel == RFRegTable[index].Channel) { ++ R2 = RFRegTable[index].R2; ++ if (pAd->Antenna.field.TxPath == 1) { ++ R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ } + +- if (Channel > 14) +- { +- // initialize R3, R4 +- R3 = (RFRegTable[index].R3 & 0xffffc1ff); +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15); +- +- // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB +- // R3 +- if ((TxPwer >= -7) && (TxPwer < 0)) +- { +- TxPwer = (7+TxPwer); +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer=%d \n", TxPwer)); +- } +- else +- { +- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer); +- R3 |= (TxPwer << 10) | (1 << 9); +- } +- +- // R4 +- if ((TxPwer2 >= -7) && (TxPwer2 < 0)) +- { +- TxPwer2 = (7+TxPwer2); +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7); +- DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: TxPwer2=%d \n", TxPwer2)); +- } +- else +- { +- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2); +- R4 |= (TxPwer2 << 7) | (1 << 6); +- } +- } +- else +- { +- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 <<6);// Set freq Offset & TxPwr1 +- } ++ if (pAd->Antenna.field.RxPath == 2) { ++ R2 |= 0x40; // write 1 to off Rxpath. ++ } else if (pAd->Antenna.field.RxPath == ++ 1) { ++ R2 |= 0x20040; // write 1 to off RxPath ++ } + +- // Based on BBP current mode before changing RF channel. +- if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40)) +- { +- R4 |=0x200000; ++ if (Channel > 14) { ++ // initialize R3, R4 ++ R3 = (RFRegTable[index]. ++ R3 & 0xffffc1ff); ++ R4 = (RFRegTable[index]. ++ R4 & (~0x001f87c0)) | ++ (pAd->RfFreqOffset << 15); ++ ++ // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB ++ // R3 ++ if ((TxPwer >= -7) ++ && (TxPwer < 0)) { ++ TxPwer = (7 + TxPwer); ++ TxPwer = ++ (TxPwer > ++ 0xF) ? (0xF) ++ : (TxPwer); ++ R3 |= (TxPwer << 10); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("AsicSwitchChannel: TxPwer=%d \n", ++ TxPwer)); ++ } else { ++ TxPwer = ++ (TxPwer > ++ 0xF) ? (0xF) ++ : (TxPwer); ++ R3 |= ++ (TxPwer << 10) | (1 ++ << ++ 9); + } + +- // Update variables +- pAd->LatchRfRegs.Channel = Channel; +- pAd->LatchRfRegs.R1 = RFRegTable[index].R1; +- pAd->LatchRfRegs.R2 = R2; +- pAd->LatchRfRegs.R3 = R3; +- pAd->LatchRfRegs.R4 = R4; +- +- // Set RF value 1's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 2's set R3[bit2] = [1] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04)); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); +- +- RTMPusecDelay(200); +- +- // Set RF value 3's set R3[bit2] = [0] +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2); +- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04))); +- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4); ++ // R4 ++ if ((TxPwer2 >= -7) ++ && (TxPwer2 < 0)) { ++ TxPwer2 = (7 + TxPwer2); ++ TxPwer2 = ++ (TxPwer2 > ++ 0xF) ? (0xF) ++ : (TxPwer2); ++ R4 |= (TxPwer2 << 7); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("AsicSwitchChannel: TxPwer2=%d \n", ++ TxPwer2)); ++ } else { ++ TxPwer2 = ++ (TxPwer2 > ++ 0xF) ? (0xF) ++ : (TxPwer2); ++ R4 |= ++ (TxPwer2 << 7) | (1 ++ << ++ 6); ++ } ++ } else { ++ R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 ++ R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 << 6); // Set freq Offset & TxPwr1 ++ } + +- break; ++ // Based on BBP current mode before changing RF channel. ++ if (!bScan ++ && (pAd->CommonCfg.BBPCurrentBW == ++ BW_40)) { ++ R4 |= 0x200000; + } ++ // Update variables ++ pAd->LatchRfRegs.Channel = Channel; ++ pAd->LatchRfRegs.R1 = ++ RFRegTable[index].R1; ++ pAd->LatchRfRegs.R2 = R2; ++ pAd->LatchRfRegs.R3 = R3; ++ pAd->LatchRfRegs.R4 = R4; ++ ++ // Set RF value 1's set R3[bit2] = [0] ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, ++ (pAd->LatchRfRegs. ++ R3 & (~0x04))); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R4); ++ ++ RTMPusecDelay(200); ++ ++ // Set RF value 2's set R3[bit2] = [1] ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, ++ (pAd->LatchRfRegs. ++ R3 | 0x04)); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R4); ++ ++ RTMPusecDelay(200); ++ ++ // Set RF value 3's set R3[bit2] = [0] ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R1); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R2); ++ RTMP_RF_IO_WRITE32(pAd, ++ (pAd->LatchRfRegs. ++ R3 & (~0x04))); ++ RTMP_RF_IO_WRITE32(pAd, ++ pAd->LatchRfRegs.R4); ++ ++ break; + } +- break; ++ } ++ break; + +- default: +- break; ++ default: ++ break; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%lu, Pwr1=%lu, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", +- Channel, +- pAd->RfIcType, +- (R3 & 0x00003e00) >> 9, +- (R4 & 0x000007c0) >> 6, +- pAd->Antenna.field.TxPath, +- pAd->LatchRfRegs.R1, +- pAd->LatchRfRegs.R2, +- pAd->LatchRfRegs.R3, +- pAd->LatchRfRegs.R4)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SwitchChannel#%d(RF=%d, Pwr0=%lu, Pwr1=%lu, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n", ++ Channel, pAd->RfIcType, (R3 & 0x00003e00) >> 9, ++ (R4 & 0x000007c0) >> 6, pAd->Antenna.field.TxPath, ++ pAd->LatchRfRegs.R1, pAd->LatchRfRegs.R2, ++ pAd->LatchRfRegs.R3, pAd->LatchRfRegs.R4)); + } + + // Change BBP setting during siwtch from a->g, g->a +- if (Channel <= 14) +- { +- ULONG TxPinCfg = 0x00050F0A;//Gary 2007/08/09 0x050A0A +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. ++ if (Channel <= 14) { ++ ULONG TxPinCfg = 0x00050F0A; //Gary 2007/08/09 0x050A0A ++ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); //(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. + //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); + + // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { ++ if (pAd->NicConfig2.field.ExternalLNAForG) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { ++ } else { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); + } +@@ -796,58 +918,54 @@ VOID AsicSwitchChannel( + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + + // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { ++ if (pAd->Antenna.field.TxPath == 1) { + TxPinCfg &= 0xFFFFFFF3; + } +- if (pAd->Antenna.field.RxPath == 1) +- { ++ if (pAd->Antenna.field.RxPath == 1) { + TxPinCfg &= 0xFFFFF3FF; + } + +- + RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); + + #if defined(RT3090) || defined(RT3390) + // PCIe PHY Transmit attenuation adjustment + if (IS_RT3090A(pAd) || IS_RT3390(pAd)) { +- TX_ATTENUATION_CTRL_STRUC +- TxAttenuationCtrl = { .word = 0 }; ++ TX_ATTENUATION_CTRL_STRUC TxAttenuationCtrl = { ++ .word = 0}; + +- RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, &TxAttenuationCtrl.word); ++ RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, ++ &TxAttenuationCtrl.word); + +- if (Channel == 14) // Channel #14 ++ if (Channel == 14) // Channel #14 + { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; // Enable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; // 9/16 full drive level +- } +- else // Channel #1~#13 ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; // Enable PCIe PHY Tx attenuation ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; // 9/16 full drive level ++ } else // Channel #1~#13 + { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; // Disable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; // n/a ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; // Disable PCIe PHY Tx attenuation ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; // n/a + } + +- RTMP_IO_WRITE32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, TxAttenuationCtrl.word); ++ RTMP_IO_WRITE32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, ++ TxAttenuationCtrl.word); + } + #endif +- } +- else +- { +- ULONG TxPinCfg = 0x00050F05;//Gary 2007/8/9 0x050505 +- +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0);//(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); ++ } else { ++ ULONG TxPinCfg = 0x00050F05; //Gary 2007/8/9 0x050505 ++ ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, ++ (0x37 - GET_LNA_GAIN(pAd))); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); //(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); + + // Rx High power VGA offset for LNA select +- if (pAd->NicConfig2.field.ExternalLNAForA) +- { ++ if (pAd->NicConfig2.field.ExternalLNAForA) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +- } +- else +- { ++ } else { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); + } + +@@ -858,16 +976,13 @@ VOID AsicSwitchChannel( + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + + // Turn off unused PA or LNA when only 1T or 1R +- if (pAd->Antenna.field.TxPath == 1) +- { ++ if (pAd->Antenna.field.TxPath == 1) { + TxPinCfg &= 0xFFFFFFF3; + } +- if (pAd->Antenna.field.RxPath == 1) +- { ++ if (pAd->Antenna.field.RxPath == 1) { + TxPinCfg &= 0xFFFFF3FF; + } + +- + RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); + + } +@@ -887,10 +1002,9 @@ VOID AsicSwitchChannel( + RTMPusecDelay(1000); + } + +-VOID AsicResetBBPAgent( +-IN PRTMP_ADAPTER pAd) ++VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) + { +- BBP_CSR_CFG_STRUC BbpCsr; ++ BBP_CSR_CFG_STRUC BbpCsr; + DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); + // Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. + RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word); +@@ -911,17 +1025,13 @@ IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicLockChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) ++VOID AsicLockChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + { + } + +-VOID AsicRfTuningExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID AsicRfTuningExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { + } + +@@ -942,65 +1052,53 @@ VOID AsicRfTuningExec( + it should be called AFTER MlmeDynamicTxRatSwitching() + ========================================================================== + */ +-VOID AsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd) ++VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + { +- INT i, j; +- CHAR DeltaPwr = 0; +- BOOLEAN bAutoTxAgc = FALSE; +- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; +- UCHAR BbpR1 = 0, BbpR49 = 0, idx; +- PCHAR pTxAgcCompensate; +- ULONG TxPwr[5]; +- CHAR Value; +- CHAR Rssi = -127; +- +- ++ INT i, j; ++ CHAR DeltaPwr = 0; ++ BOOLEAN bAutoTxAgc = FALSE; ++ UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; ++ UCHAR BbpR1 = 0, BbpR49 = 0, idx; ++ PCHAR pTxAgcCompensate; ++ ULONG TxPwr[5]; ++ CHAR Value; ++ CHAR Rssi = -127; + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || + #ifdef RTMP_MAC_PCI +- (pAd->bPCIclkOff == TRUE) || ++ (pAd->bPCIclkOff == TRUE) || + #endif // RTMP_MAC_PCI // +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) || ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + return; + +- Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); ++ Rssi = RTMPMaxRssi(pAd, ++ pAd->StaCfg.RssiSample.AvgRssi0, ++ pAd->StaCfg.RssiSample.AvgRssi1, ++ pAd->StaCfg.RssiSample.AvgRssi2); + +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- if (pAd->CommonCfg.CentralChannel > 14) +- { ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) { ++ if (pAd->CommonCfg.CentralChannel > 14) { + TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; + TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; + TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; + TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; + TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { ++ } else { + TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; + TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; + TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; + TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; + TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; + } +- } +- else +- { +- if (pAd->CommonCfg.Channel > 14) +- { ++ } else { ++ if (pAd->CommonCfg.Channel > 14) { + TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; + TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; + TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; + TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; + TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { ++ } else { + TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; + TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; + TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +@@ -1010,31 +1108,26 @@ VOID AsicAdjustTxPower( + } + + // TX power compensation for temperature variation based on TSSI. try every 4 second +- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) +- { +- if (pAd->CommonCfg.Channel <= 14) +- { ++ if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) { ++ if (pAd->CommonCfg.Channel <= 14) { + /* bg channel */ +- bAutoTxAgc = pAd->bAutoTxAgcG; +- TssiRef = pAd->TssiRefG; ++ bAutoTxAgc = pAd->bAutoTxAgcG; ++ TssiRef = pAd->TssiRefG; + pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; +- TxAgcStep = pAd->TxAgcStepG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { ++ pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0]; ++ TxAgcStep = pAd->TxAgcStepG; ++ pTxAgcCompensate = &pAd->TxAgcCompensateG; ++ } else { + /* a channel */ +- bAutoTxAgc = pAd->bAutoTxAgcA; +- TssiRef = pAd->TssiRefA; ++ bAutoTxAgc = pAd->bAutoTxAgcA; ++ TssiRef = pAd->TssiRefA; + pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0]; +- pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; +- TxAgcStep = pAd->TxAgcStepA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; ++ pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0]; ++ TxAgcStep = pAd->TxAgcStepA; ++ pTxAgcCompensate = &pAd->TxAgcCompensateA; + } + +- if (bAutoTxAgc) +- { ++ if (bAutoTxAgc) { + /* BbpR1 is unsigned char */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49); + +@@ -1051,59 +1144,50 @@ VOID AsicAdjustTxPower( + /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */ + /* if value is 0xa5, tx power will be -= TxAgcStep*(2-1) */ + +- if (BbpR49 > pTssiMinusBoundary[1]) +- { ++ if (BbpR49 > pTssiMinusBoundary[1]) { + // Reading is larger than the reference value + // check for how large we need to decrease the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range ++ for (idx = 1; idx < 5; idx++) { ++ if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range + break; + } + // The index is the step we should decrease, idx = 0 means there is nothing to compensate +-// if (R3 > (ULONG) (TxAgcStep * (idx-1))) +- *pTxAgcCompensate = -(TxAgcStep * (idx-1)); +-// else +-// *pTxAgcCompensate = -((UCHAR)R3); ++// if (R3 > (ULONG) (TxAgcStep * (idx-1))) ++ *pTxAgcCompensate = -(TxAgcStep * (idx - 1)); ++// else ++// *pTxAgcCompensate = -((UCHAR)R3); + + DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else if (BbpR49 < pTssiPlusBoundary[1]) +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", ++ BbpR49, TssiRef, TxAgcStep, idx - 1)); ++ } else if (BbpR49 < pTssiPlusBoundary[1]) { + // Reading is smaller than the reference value + // check for how large we need to increase the Tx power +- for (idx = 1; idx < 5; idx++) +- { +- if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range ++ for (idx = 1; idx < 5; idx++) { ++ if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range + break; + } + // The index is the step we should increase, idx = 0 means there is nothing to compensate +- *pTxAgcCompensate = TxAgcStep * (idx-1); ++ *pTxAgcCompensate = TxAgcStep * (idx - 1); + DeltaPwr += (*pTxAgcCompensate); +- DBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, idx-1)); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", ++ BbpR49, TssiRef, TxAgcStep, idx - 1)); ++ } else { + *pTxAgcCompensate = 0; +- DBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", +- BbpR49, TssiRef, TxAgcStep, 0)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" Tx Power, BBP R49=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n", ++ BbpR49, TssiRef, TxAgcStep, 0)); + } + } +- } +- else +- { +- if (pAd->CommonCfg.Channel <= 14) +- { +- bAutoTxAgc = pAd->bAutoTxAgcG; +- pTxAgcCompensate = &pAd->TxAgcCompensateG; +- } +- else +- { +- bAutoTxAgc = pAd->bAutoTxAgcA; +- pTxAgcCompensate = &pAd->TxAgcCompensateA; ++ } else { ++ if (pAd->CommonCfg.Channel <= 14) { ++ bAutoTxAgc = pAd->bAutoTxAgcG; ++ pTxAgcCompensate = &pAd->TxAgcCompensateG; ++ } else { ++ bAutoTxAgc = pAd->bAutoTxAgcA; ++ pTxAgcCompensate = &pAd->TxAgcCompensateA; + } + + if (bAutoTxAgc) +@@ -1113,46 +1197,35 @@ VOID AsicAdjustTxPower( + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1); + BbpR1 &= 0xFC; + +- + /* calculate delta power based on the percentage specified from UI */ + // E2PROM setting is calibrated for maximum TX power (i.e. 100%) + // We lower TX power here according to the percentage specified from UI +- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control ++ if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control + { + { + // to patch high power issue with some APs, like Belkin N1. +- if (Rssi > -35) +- { +- BbpR1 |= 0x02; // DeltaPwr -= 12; +- } +- else if (Rssi > -40) +- { +- BbpR1 |= 0x01; // DeltaPwr -= 6; +- } +- else +- ; ++ if (Rssi > -35) { ++ BbpR1 |= 0x02; // DeltaPwr -= 12; ++ } else if (Rssi > -40) { ++ BbpR1 |= 0x01; // DeltaPwr -= 6; ++ } else; + } +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW ++ } else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW + ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; ++ else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; + { + DeltaPwr -= 1; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; + { + DeltaPwr -= 3; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; + { + BbpR1 |= 0x01; +- } +- else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; + { + BbpR1 |= 0x01; + DeltaPwr -= 3; +- } +- else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; ++ } else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; + { + BbpR1 |= 0x02; + } +@@ -1160,45 +1233,38 @@ VOID AsicAdjustTxPower( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpR1); + + /* reset different new tx power for different TX rate */ +- for(i=0; i<5; i++) +- { +- if (TxPwr[i] != 0xffffffff) +- { +- for (j=0; j<8; j++) +- { +- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */ +- +- if ((Value + DeltaPwr) < 0) +- { +- Value = 0; /* min */ +- } +- else if ((Value + DeltaPwr) > 0xF) +- { +- Value = 0xF; /* max */ +- } +- else +- { +- Value += DeltaPwr; /* temperature compensation */ ++ for (i = 0; i < 5; i++) { ++ if (TxPwr[i] != 0xffffffff) { ++ for (j = 0; j < 8; j++) { ++ Value = (CHAR) ((TxPwr[i] >> j * 4) & 0x0F); /* 0 ~ 15 */ ++ ++ if ((Value + DeltaPwr) < 0) { ++ Value = 0; /* min */ ++ } else if ((Value + DeltaPwr) > 0xF) { ++ Value = 0xF; /* max */ ++ } else { ++ Value += DeltaPwr; /* temperature compensation */ + } + + /* fill new value to CSR offset */ +- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4); ++ TxPwr[i] = ++ (TxPwr[i] & ~(0x0000000F << j * 4)) | (Value ++ << j ++ * 4); + } + + /* write tx power value to CSR */ +- /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M +- TX power for OFDM 6M/9M +- TX power for CCK5.5M/11M +- TX power for CCK1M/2M */ ++ /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M ++ TX power for OFDM 6M/9M ++ TX power for CCK5.5M/11M ++ TX power for CCK1M/2M */ + /* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */ +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]); ++ RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i * 4, TxPwr[i]); + } + } + +- + } + +- + /* + ========================================================================== + Description: +@@ -1211,9 +1277,8 @@ VOID AsicAdjustTxPower( + + ========================================================================== + */ +-VOID AsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++VOID AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) + { + RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); + } +@@ -1226,8 +1291,7 @@ VOID AsicSleepThenAutoWakeup( + in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. + ========================================================================== + */ +-VOID AsicForceSleep( +- IN PRTMP_ADAPTER pAd) ++VOID AsicForceSleep(IN PRTMP_ADAPTER pAd) + { + + } +@@ -1242,15 +1306,12 @@ VOID AsicForceSleep( + IRQL = DISPATCH_LEVEL + ========================================================================== + */ +-VOID AsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) ++VOID AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { +- DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); +- RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); ++ DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); ++ RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); + } + +- + /* + ========================================================================== + Description: +@@ -1260,36 +1321,33 @@ VOID AsicForceWakeup( + + ========================================================================== + */ +-VOID AsicSetBssid( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid) ++VOID AsicSetBssid(IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid) + { +- ULONG Addr4; +- DBGPRINT(RT_DEBUG_TRACE, ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", +- pBssid[0],pBssid[1],pBssid[2],pBssid[3], pBssid[4],pBssid[5])); +- +- Addr4 = (ULONG)(pBssid[0]) | +- (ULONG)(pBssid[1] << 8) | +- (ULONG)(pBssid[2] << 16) | +- (ULONG)(pBssid[3] << 24); ++ ULONG Addr4; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", pBssid[0], ++ pBssid[1], pBssid[2], pBssid[3], pBssid[4], pBssid[5])); ++ ++ Addr4 = (ULONG) (pBssid[0]) | ++ (ULONG) (pBssid[1] << 8) | ++ (ULONG) (pBssid[2] << 16) | (ULONG) (pBssid[3] << 24); + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); + + Addr4 = 0; + // always one BSSID in STA mode +- Addr4 = (ULONG)(pBssid[4]) | (ULONG)(pBssid[5] << 8); ++ Addr4 = (ULONG) (pBssid[4]) | (ULONG) (pBssid[5] << 8); + + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); + } + +-VOID AsicSetMcastWC( +- IN PRTMP_ADAPTER pAd) ++VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd) + { + MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- USHORT offset; ++ USHORT offset; + +- pEntry->Sst = SST_ASSOC; +- pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index +- pEntry->PsMode = PWR_ACTIVE; ++ pEntry->Sst = SST_ASSOC; ++ pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index ++ pEntry->PsMode = PWR_ACTIVE; + pEntry->CurrTxRate = pAd->CommonCfg.MlmeRate; + offset = MAC_WCID_BASE + BSS0Mcast_WCID * HW_WCID_ENTRY_SIZE; + } +@@ -1302,14 +1360,12 @@ VOID AsicSetMcastWC( + + ========================================================================== + */ +-VOID AsicDelWcidTab( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid) ++VOID AsicDelWcidTab(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid) + { +- ULONG Addr0 = 0x0, Addr1 = 0x0; +- ULONG offset; ++ ULONG Addr0 = 0x0, Addr1 = 0x0; ++ ULONG offset; + +- DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n",Wcid)); ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n", Wcid)); + offset = MAC_WCID_BASE + Wcid * HW_WCID_ENTRY_SIZE; + RTMP_IO_WRITE32(pAd, offset, Addr0); + offset += 4; +@@ -1324,19 +1380,18 @@ VOID AsicDelWcidTab( + + ========================================================================== + */ +-VOID AsicEnableRDG( +- IN PRTMP_ADAPTER pAd) ++VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd) + { +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; ++ TX_LINK_CFG_STRUC TxLinkCfg; ++ UINT32 Data = 0; + + RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); + TxLinkCfg.field.TxRDGEn = 1; + RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word); + + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- Data |= 0x80; ++ Data &= 0xFFFFFF00; ++ Data |= 0x80; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + + //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +@@ -1350,12 +1405,10 @@ VOID AsicEnableRDG( + + ========================================================================== + */ +-VOID AsicDisableRDG( +- IN PRTMP_ADAPTER pAd) ++VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd) + { +- TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; +- ++ TX_LINK_CFG_STRUC TxLinkCfg; ++ UINT32 Data = 0; + + RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); + TxLinkCfg.field.TxRDGEn = 0; +@@ -1363,19 +1416,18 @@ VOID AsicDisableRDG( + + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); + +- Data &= 0xFFFFFF00; ++ Data &= 0xFFFFFF00; + //Data |= 0x20; + #ifndef WIFI_TEST + //if ( pAd->CommonCfg.bEnableTxBurst ) +- // Data |= 0x60; // for performance issue not set the TXOP to 0 ++ // Data |= 0x60; // for performance issue not set the TXOP to 0 + #endif + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) +- && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) +- ) +- { ++ && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) ++ ) { + // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode + if (pAd->CommonCfg.bEnableTxBurst) +- Data |= 0x20; ++ Data |= 0x20; + } + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + } +@@ -1389,16 +1441,15 @@ VOID AsicDisableRDG( + + ========================================================================== + */ +-VOID AsicDisableSync( +- IN PRTMP_ADAPTER pAd) ++VOID AsicDisableSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr; + + DBGPRINT(RT_DEBUG_TRACE, ("--->Disable TSF synchronization\n")); + + // 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect +- // that NIC will never wakes up because TSF stops and no more +- // TBTT interrupts ++ // that NIC will never wakes up because TSF stops and no more ++ // TBTT interrupts + pAd->TbttTickCount = 0; + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); + csr.field.bBeaconGen = 0; +@@ -1417,20 +1468,19 @@ VOID AsicDisableSync( + + ========================================================================== + */ +-VOID AsicEnableBssSync( +- IN PRTMP_ADAPTER pAd) ++VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr; + + DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n")); + + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +-// RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); ++// RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); + { +- csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU + csr.field.bTsfTicking = 1; +- csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode +- csr.field.bBeaconGen = 0; // do NOT generate BEACON ++ csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode ++ csr.field.bBeaconGen = 0; // do NOT generate BEACON + csr.field.bTBTTEnable = 1; + } + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +@@ -1448,14 +1498,15 @@ VOID AsicEnableBssSync( + + ========================================================================== + */ +-VOID AsicEnableIbssSync( +- IN PRTMP_ADAPTER pAd) ++VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr9; +- PUCHAR ptr; ++ PUCHAR ptr; + UINT i; + +- DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", pAd->BeaconTxWI.MPDUtotalByteCount)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", ++ pAd->BeaconTxWI.MPDUtotalByteCount)); + + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr9.word); + csr9.field.bBeaconGen = 0; +@@ -1465,27 +1516,30 @@ VOID AsicEnableIbssSync( + + #ifdef RTMP_MAC_PCI + // move BEACON TXD and frame content to on-chip memory +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconTxWI; ++ for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field + { +- UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); ++ UINT32 longptr = ++ *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + ++ (*(ptr + 3) << 24); + RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); + ptr += 4; + } + + // start right after the 16-byte TXWI field + ptr = pAd->BeaconBuf; +- for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=4) +- { +- UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); ++ for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 4) { ++ UINT32 longptr = ++ *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + ++ (*(ptr + 3) << 24); + RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); +- ptr +=4; ++ ptr += 4; + } + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + // move BEACON TXD and frame content to on-chip memory +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconTxWI; ++ for (i = 0; i < TXWI_SIZE; i += 2) // 16-byte TXWI field + { + //UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); + //RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); +@@ -1495,12 +1549,11 @@ VOID AsicEnableIbssSync( + + // start right after the 16-byte TXWI field + ptr = pAd->BeaconBuf; +- for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=2) +- { ++ for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 2) { + //UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); + //RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); + RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2); +- ptr +=2; ++ ptr += 2; + } + #endif // RTMP_MAC_USB // + +@@ -1511,9 +1564,9 @@ VOID AsicEnableIbssSync( + //RTMP_IO_WRITE32(pAd, TBTT_SYNC_CFG, 0x00001010); + + // start sending BEACON +- csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU + csr9.field.bTsfTicking = 1; +- csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode ++ csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode + csr9.field.bTBTTEnable = 1; + csr9.field.bBeaconGen = 1; + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +@@ -1528,45 +1581,42 @@ VOID AsicEnableIbssSync( + + ========================================================================== + */ +-VOID AsicSetEdcaParm( +- IN PRTMP_ADAPTER pAd, +- IN PEDCA_PARM pEdcaParm) ++VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + { +- EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; ++ EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; + AC_TXOP_CSR0_STRUC csr0; + AC_TXOP_CSR1_STRUC csr1; +- AIFSN_CSR_STRUC AifsnCsr; +- CWMIN_CSR_STRUC CwminCsr; +- CWMAX_CSR_STRUC CwmaxCsr; ++ AIFSN_CSR_STRUC AifsnCsr; ++ CWMIN_CSR_STRUC CwminCsr; ++ CWMAX_CSR_STRUC CwmaxCsr; + int i; + + Ac0Cfg.word = 0; + Ac1Cfg.word = 0; + Ac2Cfg.word = 0; + Ac3Cfg.word = 0; +- if ((pEdcaParm == NULL) || (pEdcaParm->bValid == FALSE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AsicSetEdcaParm\n")); ++ if ((pEdcaParm == NULL) || (pEdcaParm->bValid == FALSE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("AsicSetEdcaParm\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- for (i=0; iMacTab.Content[i].ValidAsCLI || pAd->MacTab.Content[i].ValidAsApCli) +- CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab.Content[i], fCLIENT_STATUS_WMM_CAPABLE); ++ for (i = 0; i < MAX_LEN_OF_MAC_TABLE; i++) { ++ if (pAd->MacTab.Content[i].ValidAsCLI ++ || pAd->MacTab.Content[i].ValidAsApCli) ++ CLIENT_STATUS_CLEAR_FLAG(&pAd->MacTab. ++ Content[i], ++ fCLIENT_STATUS_WMM_CAPABLE); + } + + //======================================================== + // MAC Register has a copy . + //======================================================== + //#ifndef WIFI_TEST +- if( pAd->CommonCfg.bEnableTxBurst ) +- { ++ if (pAd->CommonCfg.bEnableTxBurst) { + // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode +- } +- else ++ Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode ++ } else + Ac0Cfg.field.AcTxop = 0; // QID_AC_BE + //#else +-// Ac0Cfg.field.AcTxop = 0; // QID_AC_BE ++// Ac0Cfg.field.AcTxop = 0; // QID_AC_BE + //#endif + Ac0Cfg.field.Cwmin = CW_MIN_IN_BITS; + Ac0Cfg.field.Cwmax = CW_MAX_IN_BITS; +@@ -1579,13 +1629,10 @@ VOID AsicSetEdcaParm( + Ac1Cfg.field.Aifsn = 2; + RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); + +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { ++ if (pAd->CommonCfg.PhyMode == PHY_11B) { + Ac2Cfg.field.AcTxop = 192; // AC_VI: 192*32us ~= 6ms + Ac3Cfg.field.AcTxop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { ++ } else { + Ac2Cfg.field.AcTxop = 96; // AC_VI: 96*32us ~= 3ms + Ac3Cfg.field.AcTxop = 48; // AC_VO: 48*32us ~= 1.5ms + } +@@ -1601,18 +1648,15 @@ VOID AsicSetEdcaParm( + //======================================================== + // DMA Register has a copy too. + //======================================================== +- csr0.field.Ac0Txop = 0; // QID_AC_BE +- csr0.field.Ac1Txop = 0; // QID_AC_BK ++ csr0.field.Ac0Txop = 0; // QID_AC_BE ++ csr0.field.Ac1Txop = 0; // QID_AC_BK + RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { +- csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { +- csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms ++ if (pAd->CommonCfg.PhyMode == PHY_11B) { ++ csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms ++ csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms ++ } else { ++ csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms ++ csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms + } + RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); + +@@ -1633,9 +1677,7 @@ VOID AsicSetEdcaParm( + RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, 0x00002222); + + NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); +- } +- else +- { ++ } else { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); + //======================================================== + // MAC Register has a copy. +@@ -1646,26 +1688,23 @@ VOID AsicSetEdcaParm( + // + //pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this + +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; +- Ac0Cfg.field.Cwmin= pEdcaParm->Cwmin[QID_AC_BE]; ++ Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; ++ Ac0Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BE]; + Ac0Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BE]; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; ++ Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; + +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; ++ Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; ++ Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; + Ac1Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; ++ Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; + + Ac2Cfg.field.AcTxop = (pEdcaParm->Txop[QID_AC_VI] * 6) / 10; +- if(pAd->Antenna.field.TxPath == 1) +- { ++ if (pAd->Antenna.field.TxPath == 1) { + Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI] + 1; + Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI] + 1; +- } +- else +- { +- Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI]; +- Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI]; ++ } else { ++ Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI]; ++ Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI]; + } + Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 1; + #ifdef RTMP_MAC_USB +@@ -1675,20 +1714,19 @@ VOID AsicSetEdcaParm( + { + // Tuning for Wi-Fi WMM S06 + if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) + Ac2Cfg.field.Aifsn -= 1; + + // Tuning for TGn Wi-Fi 5.2.32 + // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta + if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) { + Ac0Cfg.field.Aifsn = 3; + Ac2Cfg.field.AcTxop = 5; + } + #ifdef RT30xx +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- { ++ if (pAd->RfIcType == RFIC_3020 ++ || pAd->RfIcType == RFIC_2020) { + // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. + Ac2Cfg.field.Aifsn = 5; + } +@@ -1701,16 +1739,19 @@ VOID AsicSetEdcaParm( + Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO]; + + //#ifdef WIFI_TEST +- if (pAd->CommonCfg.bWiFiTest) +- { +- if (Ac3Cfg.field.AcTxop == 102) +- { +- Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm->Txop[QID_AC_BE] : 10; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]-1; /* AIFSN must >= 1 */ +- Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; +- Ac2Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VI]; +- } /* End of if */ ++ if (pAd->CommonCfg.bWiFiTest) { ++ if (Ac3Cfg.field.AcTxop == 102) { ++ Ac0Cfg.field.AcTxop = ++ pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm-> ++ Txop[QID_AC_BE] : 10; ++ Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE] - 1; /* AIFSN must >= 1 */ ++ Ac1Cfg.field.AcTxop = ++ pEdcaParm->Txop[QID_AC_BK]; ++ Ac1Cfg.field.Aifsn = ++ pEdcaParm->Aifsn[QID_AC_BK]; ++ Ac2Cfg.field.AcTxop = ++ pEdcaParm->Txop[QID_AC_VI]; ++ } /* End of if */ + } + //#endif // WIFI_TEST // + +@@ -1719,7 +1760,6 @@ VOID AsicSetEdcaParm( + RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); + RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); + +- + //======================================================== + // DMA Register has a copy too. + //======================================================== +@@ -1735,7 +1775,7 @@ VOID AsicSetEdcaParm( + CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE]; + CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK]; + CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI]; +- CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test ++ CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test + RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); + + CwmaxCsr.word = 0; +@@ -1746,69 +1786,68 @@ VOID AsicSetEdcaParm( + RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); + + AifsnCsr.word = 0; +- AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; +- AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; ++ AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; ++ AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; ++ AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; + + { + // Tuning for Wi-Fi WMM S06 + if (pAd->CommonCfg.bWiFiTest && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) + AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4; + + // Tuning for TGn Wi-Fi 5.2.32 + // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta + if (STA_TGN_WIFI_ON(pAd) && +- pEdcaParm->Aifsn[QID_AC_VI] == 10) +- { ++ pEdcaParm->Aifsn[QID_AC_VI] == 10) { + AifsnCsr.field.Aifsn0 = 3; + AifsnCsr.field.Aifsn2 = 7; + } + + if (INFRA_ON(pAd)) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab. ++ Content[BSSID_WCID], ++ fCLIENT_STATUS_WMM_CAPABLE); + } + + { +- AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test ++ AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test + #ifdef RT30xx + // TODO: Shiang, this modification also suitable for RT3052/RT3050 ??? +- if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020) +- { +- AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. ++ if (pAd->RfIcType == RFIC_3020 ++ || pAd->RfIcType == RFIC_2020) { ++ AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. + } + #endif // RT30xx // + } + RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); + +- NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); +- if (!ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", pEdcaParm->EdcaUpdateCount)); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BE %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[0], +- pEdcaParm->Cwmin[0], +- pEdcaParm->Cwmax[0], +- pEdcaParm->Txop[0]<<5, +- pEdcaParm->bACM[0])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_BK %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[1], +- pEdcaParm->Cwmin[1], +- pEdcaParm->Cwmax[1], +- pEdcaParm->Txop[1]<<5, +- pEdcaParm->bACM[1])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VI %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[2], +- pEdcaParm->Cwmin[2], +- pEdcaParm->Cwmax[2], +- pEdcaParm->Txop[2]<<5, +- pEdcaParm->bACM[2])); +- DBGPRINT(RT_DEBUG_TRACE,(" AC_VO %2d %2d %2d %4d %d\n", +- pEdcaParm->Aifsn[3], +- pEdcaParm->Cwmin[3], +- pEdcaParm->Cwmax[3], +- pEdcaParm->Txop[3]<<5, +- pEdcaParm->bACM[3])); ++ NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, ++ sizeof(EDCA_PARM)); ++ if (!ADHOC_ON(pAd)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", ++ pEdcaParm->EdcaUpdateCount)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" AC_BE %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[0], pEdcaParm->Cwmin[0], ++ pEdcaParm->Cwmax[0], pEdcaParm->Txop[0] << 5, ++ pEdcaParm->bACM[0])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" AC_BK %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[1], pEdcaParm->Cwmin[1], ++ pEdcaParm->Cwmax[1], pEdcaParm->Txop[1] << 5, ++ pEdcaParm->bACM[1])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" AC_VI %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[2], pEdcaParm->Cwmin[2], ++ pEdcaParm->Cwmax[2], pEdcaParm->Txop[2] << 5, ++ pEdcaParm->bACM[2])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" AC_VO %2d %2d %2d %4d %d\n", ++ pEdcaParm->Aifsn[3], pEdcaParm->Cwmin[3], ++ pEdcaParm->Cwmax[3], pEdcaParm->Txop[3] << 5, ++ pEdcaParm->bACM[3])); + } + } + +@@ -1823,19 +1862,19 @@ VOID AsicSetEdcaParm( + + ========================================================================== + */ +-VOID AsicSetSlotTime( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUseShortSlotTime) ++VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) + { +- ULONG SlotTime; +- UINT32 RegValue = 0; ++ ULONG SlotTime; ++ UINT32 RegValue = 0; + + if (pAd->CommonCfg.Channel > 14) + bUseShortSlotTime = TRUE; + +- if (bUseShortSlotTime && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) ++ if (bUseShortSlotTime ++ && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) + return; +- else if ((!bUseShortSlotTime) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED))) ++ else if ((!bUseShortSlotTime) ++ && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED))) + return; + + if (bUseShortSlotTime) +@@ -1843,19 +1882,19 @@ VOID AsicSetSlotTime( + else + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); + +- SlotTime = (bUseShortSlotTime)? 9 : 20; ++ SlotTime = (bUseShortSlotTime) ? 9 : 20; + + { + // force using short SLOT time for FAE to demo performance when TxBurst is ON +- if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) +- || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)) +- ) +- { ++ if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) ++ && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) ++ || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) ++ && (pAd->CommonCfg.BACapability.field.Policy == ++ BA_NOTUSE)) ++ ) { + // In this case, we will think it is doing Wi-Fi test + // And we will not set to short slot when bEnableTxBurst is TRUE. +- } +- else if (pAd->CommonCfg.bEnableTxBurst) +- { ++ } else if (pAd->CommonCfg.bEnableTxBurst) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); + SlotTime = 9; + } +@@ -1867,8 +1906,7 @@ VOID AsicSetSlotTime( + // ToDo: Should consider capability with 11B + // + { +- if (pAd->StaCfg.BssType == BSS_ADHOC) +- { ++ if (pAd->StaCfg.BssType == BSS_ADHOC) { + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); + SlotTime = 20; + } +@@ -1892,92 +1930,97 @@ VOID AsicSetSlotTime( + Return: + ======================================================================== + */ +-VOID AsicAddSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic) ++VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIndex, ++ IN UCHAR KeyIdx, ++ IN UCHAR CipherAlg, ++ IN PUCHAR pKey, IN PUCHAR pTxMic, IN PUCHAR pRxMic) + { +- ULONG offset; //, csr0; ++ ULONG offset; //, csr0; + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI +- INT i; ++ INT i; + #endif // RTMP_MAC_PCI // + +- DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex, ++ KeyIdx)); + //============================================================================================ + +- DBGPRINT(RT_DEBUG_TRACE,("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], BssIndex*4 + KeyIdx)); +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15])); +- if (pRxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], ++ BssIndex * 4 + KeyIdx)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ (" Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pKey[0], pKey[1], pKey[2], pKey[3], pKey[4], ++ pKey[5], pKey[6], pKey[7], pKey[8], pKey[9], ++ pKey[10], pKey[11], pKey[12], pKey[13], pKey[14], ++ pKey[15])); ++ if (pRxMic) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ (" Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pRxMic[0], pRxMic[1], pRxMic[2], pRxMic[3], ++ pRxMic[4], pRxMic[5], pRxMic[6], pRxMic[7])); + } +- if (pTxMic) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", +- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7])); ++ if (pTxMic) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ (" Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pTxMic[0], pTxMic[1], pTxMic[2], pTxMic[3], ++ pTxMic[4], pTxMic[5], pTxMic[6], pTxMic[7])); + } + //============================================================================================ + // + // fill key material - key + TX MIC + RX MIC + // + #ifdef RTMP_MAC_PCI +- offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE; +- for (i=0; iKey; +-// ULONG KeyLen = pCipherKey->KeyLen; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +- PUCHAR pTxtsc = pCipherKey->TxTsc; +- UCHAR CipherAlg = pCipherKey->CipherAlg; ++ ULONG offset; ++// ULONG WCIDAttri = 0; ++ UCHAR IV4 = 0; ++ PUCHAR pKey = pCipherKey->Key; ++// ULONG KeyLen = pCipherKey->KeyLen; ++ PUCHAR pTxMic = pCipherKey->TxMic; ++ PUCHAR pRxMic = pCipherKey->RxMic; ++ PUCHAR pTxtsc = pCipherKey->TxTsc; ++ UCHAR CipherAlg = pCipherKey->CipherAlg; + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI +- UCHAR i; ++ UCHAR i; + #endif // RTMP_MAC_PCI // + +-// ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); ++// ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); + + DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n")); + // +@@ -2158,15 +2193,16 @@ VOID AsicAddKeyEntry( + if (bUsePairewiseKeyTable) + offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); + else +- offset = SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE; ++ offset = ++ SHARED_KEY_TABLE_BASE + (4 * BssIndex + ++ KeyIdx) * HW_KEY_ENTRY_SIZE; + + // + // 2.) Set Key to Asic + // + //for (i = 0; i < KeyLen; i++) + #ifdef RTMP_MAC_PCI +- for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) +- { ++ for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); + } + offset += MAX_LEN_OF_PEER_KEY; +@@ -2174,19 +2210,15 @@ VOID AsicAddKeyEntry( + // + // 3.) Set MIC key if available + // +- if (pTxMic) +- { +- for (i = 0; i < 8; i++) +- { ++ if (pTxMic) { ++ for (i = 0; i < 8; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); + } + } + offset += LEN_TKIP_TXMICK; + +- if (pRxMic) +- { +- for (i = 0; i < 8; i++) +- { ++ if (pRxMic) { ++ for (i = 0; i < 8; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); + } + } +@@ -2198,14 +2230,12 @@ VOID AsicAddKeyEntry( + // + // 3.) Set MIC key if available + // +- if (pTxMic) +- { ++ if (pTxMic) { + RTUSBMultiWrite(pAd, offset, pTxMic, 8); + } + offset += LEN_TKIP_TXMICK; + +- if (pRxMic) +- { ++ if (pRxMic) { + RTUSBMultiWrite(pAd, offset, pRxMic, 8); + } + #endif // RTMP_MAC_USB // +@@ -2214,8 +2244,7 @@ VOID AsicAddKeyEntry( + // 4.) Modify IV/EIV if needs + // This will force Asic to use this key ID by setting IV. + // +- if (bTxKey) +- { ++ if (bTxKey) { + #ifdef RTMP_MAC_PCI + offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); + // +@@ -2226,8 +2255,10 @@ VOID AsicAddKeyEntry( + RTMP_IO_WRITE8(pAd, offset + 2, pTxtsc[0]); + + IV4 = (KeyIdx << 6); +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence ++ if ((CipherAlg == CIPHER_TKIP) ++ || (CipherAlg == CIPHER_TKIP_NO_MIC) ++ || (CipherAlg == CIPHER_AES)) ++ IV4 |= 0x20; // turn on extension bit means EIV existence + + RTMP_IO_WRITE8(pAd, offset + 3, IV4); + +@@ -2235,8 +2266,7 @@ VOID AsicAddKeyEntry( + // Write EIV + // + offset += 4; +- for (i = 0; i < 4; i++) +- { ++ for (i = 0; i < 4; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]); + } + #endif // RTMP_MAC_PCI // +@@ -2247,30 +2277,34 @@ VOID AsicAddKeyEntry( + // Write IV + // + IV4 = (KeyIdx << 6); +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence +- +- tmpVal = pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + (pTxtsc[0] << 16) + (IV4 << 24); ++ if ((CipherAlg == CIPHER_TKIP) ++ || (CipherAlg == CIPHER_TKIP_NO_MIC) ++ || (CipherAlg == CIPHER_AES)) ++ IV4 |= 0x20; // turn on extension bit means EIV existence ++ ++ tmpVal = ++ pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + ++ (pTxtsc[0] << 16) + (IV4 << 24); + RTMP_IO_WRITE32(pAd, offset, tmpVal); + + // + // Write EIV + // + offset += 4; +- RTMP_IO_WRITE32(pAd, offset, *(PUINT32)&pCipherKey->TxTsc[2]); ++ RTMP_IO_WRITE32(pAd, offset, *(PUINT32) & pCipherKey->TxTsc[2]); + #endif // RTMP_MAC_USB // + +- AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, bUsePairewiseKeyTable); ++ AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, ++ bUsePairewiseKeyTable); + } + +- if (!bUsePairewiseKeyTable) +- { ++ if (!bUsePairewiseKeyTable) { + // + // Only update the shared key security mode + // +- RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), &csr1.word); +- if ((BssIndex % 2) == 0) +- { ++ RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), ++ &csr1.word); ++ if ((BssIndex % 2) == 0) { + if (KeyIdx == 0) + csr1.field.Bss0Key0CipherAlg = CipherAlg; + else if (KeyIdx == 1) +@@ -2279,9 +2313,7 @@ VOID AsicAddKeyEntry( + csr1.field.Bss0Key2CipherAlg = CipherAlg; + else + csr1.field.Bss0Key3CipherAlg = CipherAlg; +- } +- else +- { ++ } else { + if (KeyIdx == 0) + csr1.field.Bss1Key0CipherAlg = CipherAlg; + else if (KeyIdx == 1) +@@ -2291,13 +2323,13 @@ VOID AsicAddKeyEntry( + else + csr1.field.Bss1Key3CipherAlg = CipherAlg; + } +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), csr1.word); ++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), ++ csr1.word); + } + + DBGPRINT(RT_DEBUG_TRACE, ("<== AsicAddKeyEntry\n")); + } + +- + /* + ======================================================================== + Description: +@@ -2307,34 +2339,30 @@ VOID AsicAddKeyEntry( + Return: + ======================================================================== + */ +-VOID AsicAddPairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, +- IN CIPHER_KEY *pCipherKey) ++VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr, ++ IN UCHAR WCID, IN CIPHER_KEY * pCipherKey) + { + INT i; +- ULONG offset; +- PUCHAR pKey = pCipherKey->Key; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; ++ ULONG offset; ++ PUCHAR pKey = pCipherKey->Key; ++ PUCHAR pTxMic = pCipherKey->TxMic; ++ PUCHAR pRxMic = pCipherKey->RxMic; + #ifdef DBG +- UCHAR CipherAlg = pCipherKey->CipherAlg; ++ UCHAR CipherAlg = pCipherKey->CipherAlg; + #endif // DBG // + + // EKEY + offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); + #ifdef RTMP_MAC_PCI +- for (i=0; iKey[0], MAX_LEN_OF_PEER_KEY); + #endif // RTMP_MAC_USB // +- for (i=0; ichipOps.sendCommandToMcu) +@@ -2418,10 +2445,7 @@ BOOLEAN AsicSendCommandToMcu( + return TRUE; + } + +- +-VOID AsicSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant) ++VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + { + #ifdef RT30xx + /* RT3572 ATE need not to do this. */ +@@ -2429,132 +2453,113 @@ VOID AsicSetRxAnt( + #endif // RT30xx // + } + +- +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) ++VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + { +- if (pAd->chipOps.AsicRfTurnOff) +- { ++ if (pAd->chipOps.AsicRfTurnOff) { + pAd->chipOps.AsicRfTurnOff(pAd); +- } +- else +- { ++ } else { + // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; ++ UINT32 R1 = 0, R2 = 0, R3 = 0; ++ UCHAR index; ++ RTMP_RF_REGS *RFRegTable; + + RFRegTable = RF2850RegTable; + +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R1 = RFRegTable[index].R1 & 0xffffdfff; +- R2 = RFRegTable[index].R2 & 0xfffbffff; +- R3 = RFRegTable[index].R3 & 0xfff3ffff; +- +- RTMP_RF_IO_WRITE32(pAd, R1); +- RTMP_RF_IO_WRITE32(pAd, R2); +- +- // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. +- // Set RF R2 bit18=0, R3 bit[18:19]=0 +- //if (pAd->StaCfg.bRadio == FALSE) +- if (1) +- { +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x, R3 = 0x%08x \n", +- Channel, pAd->RfIcType, R2, R3)); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x \n", +- Channel, pAd->RfIcType, R2)); +- break; +- } ++ switch (pAd->RfIcType) { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: ++ ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) { ++ if (Channel == RFRegTable[index].Channel) { ++ R1 = RFRegTable[index].R1 & 0xffffdfff; ++ R2 = RFRegTable[index].R2 & 0xfffbffff; ++ R3 = RFRegTable[index].R3 & 0xfff3ffff; ++ ++ RTMP_RF_IO_WRITE32(pAd, R1); ++ RTMP_RF_IO_WRITE32(pAd, R2); ++ ++ // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. ++ // Set RF R2 bit18=0, R3 bit[18:19]=0 ++ //if (pAd->StaCfg.bRadio == FALSE) ++ if (1) { ++ RTMP_RF_IO_WRITE32(pAd, R3); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x, R3 = 0x%08x \n", ++ Channel, ++ pAd->RfIcType, R2, ++ R3)); ++ } else ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicTurnOffRFClk#%d(RF=%d, ) , R2=0x%08x \n", ++ Channel, ++ pAd->RfIcType, R2)); ++ break; + } +- break; ++ } ++ break; + +- default: +- break; ++ default: ++ break; + } + } + } + +- +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) ++VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + { + // RF R2 bit 18 = 0 +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; +- RTMP_RF_REGS *RFRegTable; ++ UINT32 R1 = 0, R2 = 0, R3 = 0; ++ UCHAR index; ++ RTMP_RF_REGS *RFRegTable; + + #ifdef PCIE_PS_SUPPORT + // The RF programming sequence is difference between 3xxx and 2xxx +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + return; + } + #endif // PCIE_PS_SUPPORT // + + RFRegTable = RF2850RegTable; + +- switch (pAd->RfIcType) +- { +- case RFIC_2820: +- case RFIC_2850: +- case RFIC_2720: +- case RFIC_2750: +- +- for (index = 0; index < NUM_OF_2850_CHNL; index++) +- { +- if (Channel == RFRegTable[index].Channel) +- { +- R3 = pAd->LatchRfRegs.R3; +- R3 &= 0xfff3ffff; +- R3 |= 0x00080000; +- RTMP_RF_IO_WRITE32(pAd, R3); +- +- R1 = RFRegTable[index].R1; +- RTMP_RF_IO_WRITE32(pAd, R1); +- +- R2 = RFRegTable[index].R2; +- if (pAd->Antenna.field.TxPath == 1) +- { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; +- } +- +- if (pAd->Antenna.field.RxPath == 2) +- { +- R2 |= 0x40; // write 1 to off Rxpath. +- } +- else if (pAd->Antenna.field.RxPath == 1) +- { +- R2 |= 0x20040; // write 1 to off RxPath +- } +- RTMP_RF_IO_WRITE32(pAd, R2); ++ switch (pAd->RfIcType) { ++ case RFIC_2820: ++ case RFIC_2850: ++ case RFIC_2720: ++ case RFIC_2750: ++ ++ for (index = 0; index < NUM_OF_2850_CHNL; index++) { ++ if (Channel == RFRegTable[index].Channel) { ++ R3 = pAd->LatchRfRegs.R3; ++ R3 &= 0xfff3ffff; ++ R3 |= 0x00080000; ++ RTMP_RF_IO_WRITE32(pAd, R3); ++ ++ R1 = RFRegTable[index].R1; ++ RTMP_RF_IO_WRITE32(pAd, R1); ++ ++ R2 = RFRegTable[index].R2; ++ if (pAd->Antenna.field.TxPath == 1) { ++ R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ } + +- break; ++ if (pAd->Antenna.field.RxPath == 2) { ++ R2 |= 0x40; // write 1 to off Rxpath. ++ } else if (pAd->Antenna.field.RxPath == 1) { ++ R2 |= 0x20040; // write 1 to off RxPath + } ++ RTMP_RF_IO_WRITE32(pAd, R2); ++ ++ break; + } +- break; ++ } ++ break; + +- default: +- break; ++ default: ++ break; + } + + DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOnRFClk#%d(RF=%d, ) , R2=0x%08x\n", +- Channel, +- pAd->RfIcType, +- R2)); ++ Channel, pAd->RfIcType, R2)); + } +diff --git a/drivers/staging/rt2860/common/cmm_cfg.c b/drivers/staging/rt2860/common/cmm_cfg.c +index c1cf2bf..9f33717 100644 +--- a/drivers/staging/rt2860/common/cmm_cfg.c ++++ b/drivers/staging/rt2860/common/cmm_cfg.c +@@ -35,50 +35,41 @@ + --------- ---------- ---------------------------------------------- + */ + +- +- + #include "../rt_config.h" + +- +-char* GetPhyMode( +- int Mode) ++char *GetPhyMode(int Mode) + { +- switch(Mode) +- { +- case MODE_CCK: +- return "CCK"; +- +- case MODE_OFDM: +- return "OFDM"; +- case MODE_HTMIX: +- return "HTMIX"; +- +- case MODE_HTGREENFIELD: +- return "GREEN"; +- default: +- return "N/A"; ++ switch (Mode) { ++ case MODE_CCK: ++ return "CCK"; ++ ++ case MODE_OFDM: ++ return "OFDM"; ++ case MODE_HTMIX: ++ return "HTMIX"; ++ ++ case MODE_HTGREENFIELD: ++ return "GREEN"; ++ default: ++ return "N/A"; + } + } + +- +-char* GetBW( +- int BW) ++char *GetBW(int BW) + { +- switch(BW) +- { +- case BW_10: +- return "10M"; +- +- case BW_20: +- return "20M"; +- case BW_40: +- return "40M"; +- default: +- return "N/A"; ++ switch (BW) { ++ case BW_10: ++ return "10M"; ++ ++ case BW_20: ++ return "20M"; ++ case BW_40: ++ return "40M"; ++ default: ++ return "N/A"; + } + } + +- + /* + ========================================================================== + Description: +@@ -89,46 +80,37 @@ char* GetBW( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetCountryRegion( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg, +- IN INT band) ++INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band) + { + LONG region, regionMax; + UCHAR *pCountryRegion; + + region = simple_strtol(arg, 0, 10); + +- if (band == BAND_24G) +- { ++ if (band == BAND_24G) { + pCountryRegion = &pAd->CommonCfg.CountryRegion; + regionMax = REGION_MAXIMUM_BG_BAND; +- } +- else +- { ++ } else { + pCountryRegion = &pAd->CommonCfg.CountryRegionForABand; + regionMax = REGION_MAXIMUM_A_BAND; + } + + // TODO: Is it neccesay for following check??? + // Country can be set only when EEPROM not programmed +- if (*pCountryRegion & 0x80) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():CountryRegion in eeprom was programmed\n")); ++ if (*pCountryRegion & 0x80) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("CfgSetCountryRegion():CountryRegion in eeprom was programmed\n")); + return FALSE; + } + +- if((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) +- { +- *pCountryRegion= (UCHAR) region; +- } +- else if ((region == REGION_31_BG_BAND) && (band == BAND_24G)) +- { ++ if ((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) { + *pCountryRegion = (UCHAR) region; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("CfgSetCountryRegion():region(%ld) out of range!\n", region)); ++ } else if ((region == REGION_31_BG_BAND) && (band == BAND_24G)) { ++ *pCountryRegion = (UCHAR) region; ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("CfgSetCountryRegion():region(%ld) out of range!\n", ++ region)); + return FALSE; + } + +@@ -136,7 +118,6 @@ INT RT_CfgSetCountryRegion( + + } + +- + /* + ========================================================================== + Description: +@@ -145,18 +126,15 @@ INT RT_CfgSetCountryRegion( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWirelessMode( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) ++INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + { +- INT MaxPhyMode = PHY_11G; +- LONG WirelessMode; ++ INT MaxPhyMode = PHY_11G; ++ LONG WirelessMode; + + MaxPhyMode = PHY_11N_5G; + + WirelessMode = simple_strtol(arg, 0, 10); +- if (WirelessMode <= MaxPhyMode) +- { ++ if (WirelessMode <= MaxPhyMode) { + pAd->CommonCfg.PhyMode = WirelessMode; + return TRUE; + } +@@ -165,10 +143,7 @@ INT RT_CfgSetWirelessMode( + + } + +- +-INT RT_CfgSetShortSlot( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) ++INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + { + LONG ShortSlot; + +@@ -179,12 +154,11 @@ INT RT_CfgSetShortSlot( + else if (ShortSlot == 0) + pAd->CommonCfg.bUseShortSlotTime = FALSE; + else +- return FALSE; //Invalid argument ++ return FALSE; //Invalid argument + + return TRUE; + } + +- + /* + ========================================================================== + Description: +@@ -193,54 +167,53 @@ INT RT_CfgSetShortSlot( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWepKey( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY *pSharedKey, +- IN INT keyIdx) ++INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++ IN PSTRING keyString, ++ IN CIPHER_KEY * pSharedKey, IN INT keyIdx) + { +- INT KeyLen; +- INT i; +- UCHAR CipherAlg = CIPHER_NONE; +- BOOLEAN bKeyIsHex = FALSE; ++ INT KeyLen; ++ INT i; ++ UCHAR CipherAlg = CIPHER_NONE; ++ BOOLEAN bKeyIsHex = FALSE; + + // TODO: Shall we do memset for the original key info?? + memset(pSharedKey, 0, sizeof(CIPHER_KEY)); + KeyLen = strlen(keyString); +- switch (KeyLen) +- { +- case 5: //wep 40 Ascii type +- case 13: //wep 104 Ascii type +- bKeyIsHex = FALSE; +- pSharedKey->KeyLen = KeyLen; +- NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); +- break; +- +- case 10: //wep 40 Hex type +- case 26: //wep 104 Hex type +- for(i=0; i < KeyLen; i++) +- { +- if( !isxdigit(*(keyString+i)) ) +- return FALSE; //Not Hex value; +- } +- bKeyIsHex = TRUE; +- pSharedKey->KeyLen = KeyLen/2 ; +- AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); +- break; +- +- default: //Invalid argument +- DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey(keyIdx=%d):Invalid argument (arg=%s)\n", keyIdx, keyString)); +- return FALSE; ++ switch (KeyLen) { ++ case 5: //wep 40 Ascii type ++ case 13: //wep 104 Ascii type ++ bKeyIsHex = FALSE; ++ pSharedKey->KeyLen = KeyLen; ++ NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); ++ break; ++ ++ case 10: //wep 40 Hex type ++ case 26: //wep 104 Hex type ++ for (i = 0; i < KeyLen; i++) { ++ if (!isxdigit(*(keyString + i))) ++ return FALSE; //Not Hex value; ++ } ++ bKeyIsHex = TRUE; ++ pSharedKey->KeyLen = KeyLen / 2; ++ AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); ++ break; ++ ++ default: //Invalid argument ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RT_CfgSetWepKey(keyIdx=%d):Invalid argument (arg=%s)\n", ++ keyIdx, keyString)); ++ return FALSE; + } + + pSharedKey->CipherAlg = ((KeyLen % 5) ? CIPHER_WEP128 : CIPHER_WEP64); +- DBGPRINT(RT_DEBUG_TRACE, ("RT_CfgSetWepKey:(KeyIdx=%d,type=%s, Alg=%s)\n", +- keyIdx, (bKeyIsHex == FALSE ? "Ascii" : "Hex"), CipherName[CipherAlg])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RT_CfgSetWepKey:(KeyIdx=%d,type=%s, Alg=%s)\n", keyIdx, ++ (bKeyIsHex == FALSE ? "Ascii" : "Hex"), ++ CipherName[CipherAlg])); + + return TRUE; + } + +- + /* + ========================================================================== + Description: +@@ -257,33 +230,28 @@ INT RT_CfgSetWepKey( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWPAPSKKey( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING keyString, +- IN UCHAR *pHashStr, +- IN INT hashStrLen, +- OUT PUCHAR pPMKBuf) ++INT RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++ IN PSTRING keyString, ++ IN UCHAR * pHashStr, ++ IN INT hashStrLen, OUT PUCHAR pPMKBuf) + { + int keyLen; + UCHAR keyMaterial[40]; + + keyLen = strlen(keyString); +- if ((keyLen < 8) || (keyLen > 64)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("WPAPSK Key length(%d) error, required 8 ~ 64 characters!(keyStr=%s)\n", +- keyLen, keyString)); ++ if ((keyLen < 8) || (keyLen > 64)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("WPAPSK Key length(%d) error, required 8 ~ 64 characters!(keyStr=%s)\n", ++ keyLen, keyString)); + return FALSE; + } + + memset(pPMKBuf, 0, 32); +- if (keyLen == 64) +- { +- AtoH(keyString, pPMKBuf, 32); +- } +- else +- { +- PasswordHash(keyString, pHashStr, hashStrLen, keyMaterial); +- NdisMoveMemory(pPMKBuf, keyMaterial, 32); ++ if (keyLen == 64) { ++ AtoH(keyString, pPMKBuf, 32); ++ } else { ++ PasswordHash(keyString, pHashStr, hashStrLen, keyMaterial); ++ NdisMoveMemory(pPMKBuf, keyMaterial, 32); + } + + return TRUE; +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 3696913..033a4ea 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -25,52 +25,60 @@ + ************************************************************************* + */ + +- + #include "../rt_config.h" + ++UCHAR SNAP_802_1H[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; ++UCHAR SNAP_BRIDGE_TUNNEL[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; + +-UCHAR SNAP_802_1H[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00}; +-UCHAR SNAP_BRIDGE_TUNNEL[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8}; + // Add Cisco Aironet SNAP heade for CCX2 support +-UCHAR SNAP_AIRONET[] = {0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; +-UCHAR CKIP_LLC_SNAP[] = {0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02}; +-UCHAR EAPOL_LLC_SNAP[]= {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e}; +-UCHAR EAPOL[] = {0x88, 0x8e}; +-UCHAR TPID[] = {0x81, 0x00}; /* VLAN related */ +- +-UCHAR IPX[] = {0x81, 0x37}; +-UCHAR APPLE_TALK[] = {0x80, 0xf3}; +-UCHAR RateIdToPlcpSignal[12] = { +- 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */ // see BBP spec +- 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */ // see IEEE802.11a-1999 p.14 +- 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ }; // see IEEE802.11a-1999 p.14 +- +-UCHAR OfdmSignalToRateId[16] = { +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 0, 1, 2, 3 respectively +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 4, 5, 6, 7 respectively +- RATE_48, RATE_24, RATE_12, RATE_6, // OFDM PLCP Signal = 8, 9, 10, 11 respectively +- RATE_54, RATE_36, RATE_18, RATE_9, // OFDM PLCP Signal = 12, 13, 14, 15 respectively ++UCHAR SNAP_AIRONET[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00 }; ++UCHAR CKIP_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02 }; ++UCHAR EAPOL_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e }; ++UCHAR EAPOL[] = { 0x88, 0x8e }; ++UCHAR TPID[] = { 0x81, 0x00 }; /* VLAN related */ ++ ++UCHAR IPX[] = { 0x81, 0x37 }; ++UCHAR APPLE_TALK[] = { 0x80, 0xf3 }; ++ ++UCHAR RateIdToPlcpSignal[12] = { ++ 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */// see BBP spec ++ 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */// see IEEE802.11a-1999 p.14 ++ 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ ++}; // see IEEE802.11a-1999 p.14 ++ ++UCHAR OfdmSignalToRateId[16] = { ++ RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 0, 1, 2, 3 respectively ++ RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 4, 5, 6, 7 respectively ++ RATE_48, RATE_24, RATE_12, RATE_6, // OFDM PLCP Signal = 8, 9, 10, 11 respectively ++ RATE_54, RATE_36, RATE_18, RATE_9, // OFDM PLCP Signal = 12, 13, 14, 15 respectively + }; + +-UCHAR OfdmRateToRxwiMCS[12] = { +- 0, 0, 0, 0, +- 0, 1, 2, 3, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 ++UCHAR OfdmRateToRxwiMCS[12] = { ++ 0, 0, 0, 0, ++ 0, 1, 2, 3, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 ++ 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 + }; +-UCHAR RxwiMCSToOfdmRate[12] = { +- RATE_6, RATE_9, RATE_12, RATE_18, +- RATE_24, RATE_36, RATE_48, RATE_54, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 ++ ++UCHAR RxwiMCSToOfdmRate[12] = { ++ RATE_6, RATE_9, RATE_12, RATE_18, ++ RATE_24, RATE_36, RATE_48, RATE_54, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 ++ 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 + }; + +-char* MCSToMbps[] = {"1Mbps","2Mbps","5.5Mbps","11Mbps","06Mbps","09Mbps","12Mbps","18Mbps","24Mbps","36Mbps","48Mbps","54Mbps","MM-0","MM-1","MM-2","MM-3","MM-4","MM-5","MM-6","MM-7","MM-8","MM-9","MM-10","MM-11","MM-12","MM-13","MM-14","MM-15","MM-32","ee1","ee2","ee3"}; ++char *MCSToMbps[] = ++ { "1Mbps", "2Mbps", "5.5Mbps", "11Mbps", "06Mbps", "09Mbps", "12Mbps", ++"18Mbps", "24Mbps", "36Mbps", "48Mbps", "54Mbps", "MM-0", "MM-1", "MM-2", "MM-3", ++"MM-4", "MM-5", "MM-6", "MM-7", "MM-8", "MM-9", "MM-10", "MM-11", "MM-12", "MM-13", ++"MM-14", "MM-15", "MM-32", "ee1", "ee2", "ee3" }; + +-UCHAR default_cwmin[]={CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1, CW_MIN_IN_BITS-2}; ++UCHAR default_cwmin[] = ++ { CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS - 1, CW_MIN_IN_BITS - 2 }; + //UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; +-UCHAR default_sta_aifsn[]={3,7,2,2}; +- +-UCHAR MapUserPriorityToAccessCategory[8] = {QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, QID_AC_VO, QID_AC_VO}; ++UCHAR default_sta_aifsn[] = { 3, 7, 2, 2 }; + ++UCHAR MapUserPriorityToAccessCategory[8] = ++ { QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, ++QID_AC_VO, QID_AC_VO }; + + /* + ======================================================================== +@@ -96,120 +104,112 @@ UCHAR MapUserPriorityToAccessCategory[8] = {QID_AC_BE, QID_AC_BK, QID_AC_BK, QID + + ======================================================================== + */ +-NDIS_STATUS MiniportMMRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PUCHAR pData, +- IN UINT Length) ++NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PUCHAR pData, IN UINT Length) + { +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG FreeNum; +- UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; ++ PNDIS_PACKET pPacket; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ ULONG FreeNum; ++ UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; + #ifdef RTMP_MAC_PCI +- unsigned long IrqFlags = 0; +- UCHAR IrqState; ++ unsigned long IrqFlags = 0; ++ UCHAR IrqState; + #endif // RTMP_MAC_PCI // +- BOOLEAN bUseDataQ = FALSE; +- int retryCnt = 0; ++ BOOLEAN bUseDataQ = FALSE; ++ int retryCnt = 0; + + ASSERT(Length <= MGMT_DMA_BUFFER_SIZE); + +- if ((QueIdx & MGMT_USE_QUEUE_FLAG) == MGMT_USE_QUEUE_FLAG) +- { ++ if ((QueIdx & MGMT_USE_QUEUE_FLAG) == MGMT_USE_QUEUE_FLAG) { + bUseDataQ = TRUE; + QueIdx &= (~MGMT_USE_QUEUE_FLAG); + } +- + #ifdef RTMP_MAC_PCI + // 2860C use Tx Ring + IrqState = pAd->irq_disabled; +- if (pAd->MACVersion == 0x28600100) +- { +- QueIdx = (bUseDataQ ==TRUE ? QueIdx : 3); ++ if (pAd->MACVersion == 0x28600100) { ++ QueIdx = (bUseDataQ == TRUE ? QueIdx : 3); + bUseDataQ = TRUE; + } + if (bUseDataQ && (!IrqState)) + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); + #endif // RTMP_MAC_PCI // + +- do +- { ++ do { + // Reset is in progress, stop immediately + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)|| +- !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) +- { ++ RTMP_TEST_FLAG(pAd, ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST) ++ || !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) { + Status = NDIS_STATUS_FAILURE; + break; + } +- + // Check Free priority queue + // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. + #ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { ++ if (bUseDataQ) { + retryCnt = MAX_DATAMM_RETRY; + // free Tx(QueIdx) resources + RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); + FreeNum = GET_TXRING_FREENO(pAd, QueIdx); +- } +- else ++ } else + #endif // RTMP_MAC_PCI // + { + FreeNum = GET_MGMTRING_FREENO(pAd); + } + +- if ((FreeNum > 0)) +- { ++ if ((FreeNum > 0)) { + // We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870 + NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE)); +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, (PUCHAR)&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE), pData, Length); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n")); ++ Status = ++ RTMPAllocateNdisPacket(pAd, &pPacket, ++ (PUCHAR) & rtmpHwHdr, ++ (TXINFO_SIZE + TXWI_SIZE), ++ pData, Length); ++ if (Status != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n")); + break; + } +- + //pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; + //pAd->CommonCfg.MlmeRate = RATE_2; + +- + #ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { +- Status = MlmeDataHardTransmit(pAd, QueIdx, pPacket); ++ if (bUseDataQ) { ++ Status = ++ MlmeDataHardTransmit(pAd, QueIdx, pPacket); + retryCnt--; +- } +- else ++ } else + #endif // RTMP_MAC_PCI // +- Status = MlmeHardTransmit(pAd, QueIdx, pPacket); ++ Status = MlmeHardTransmit(pAd, QueIdx, pPacket); + if (Status == NDIS_STATUS_SUCCESS) + retryCnt = 0; + else + RTMPFreeNdisPacket(pAd, pPacket); +- } +- else +- { ++ } else { + pAd->RalinkCounters.MgmtRingFullCount++; + #ifdef RTMP_MAC_PCI +- if (bUseDataQ) +- { ++ if (bUseDataQ) { + retryCnt--; +- DBGPRINT(RT_DEBUG_TRACE, ("retryCnt %d\n", retryCnt)); +- if (retryCnt == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n", +- QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("retryCnt %d\n", retryCnt)); ++ if (retryCnt == 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n", ++ QueIdx, ++ pAd->RalinkCounters. ++ MgmtRingFullCount)); + } + } + #endif // RTMP_MAC_PCI // +- DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in MgmtRing, MgmtRingFullCount=%ld!\n", +- QueIdx, pAd->RalinkCounters.MgmtRingFullCount)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Qidx(%d), not enough space in MgmtRing, MgmtRingFullCount=%ld!\n", ++ QueIdx, ++ pAd->RalinkCounters.MgmtRingFullCount)); + } + } while (retryCnt > 0); + +- + #ifdef RTMP_MAC_PCI + if (bUseDataQ && (!IrqState)) + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +@@ -218,9 +218,6 @@ NDIS_STATUS MiniportMMRequest( + return Status; + } + +- +- +- + /* + ======================================================================== + +@@ -245,19 +242,16 @@ NDIS_STATUS MiniportMMRequest( + + ======================================================================== + */ +-NDIS_STATUS MlmeHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) ++NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) + { +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PHEADER_802_11 pHeader_802_11; ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PHEADER_802_11 pHeader_802_11; + + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- ) +- { ++ ) { + return NDIS_STATUS_FAILURE; + } + +@@ -267,77 +261,66 @@ NDIS_STATUS MlmeHardTransmit( + + pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); + +- + #ifdef RTMP_MAC_PCI +- if ( pAd->MACVersion == 0x28600100 ) +- return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); ++ if (pAd->MACVersion == 0x28600100) ++ return MlmeHardTransmitTxRing(pAd, QueIdx, pPacket); + else + #endif // RTMP_MAC_PCI // +- return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket); ++ return MlmeHardTransmitMgmtRing(pAd, QueIdx, pPacket); + + } + +- +-NDIS_STATUS MlmeHardTransmitMgmtRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) ++NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) + { +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PHEADER_802_11 pHeader_802_11; +- BOOLEAN bAckRequired, bInsertTimestamp; +- UCHAR MlmeRate; +- PTXWI_STRUC pFirstTxWI; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- UCHAR PID; ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PHEADER_802_11 pHeader_802_11; ++ BOOLEAN bAckRequired, bInsertTimestamp; ++ UCHAR MlmeRate; ++ PTXWI_STRUC pFirstTxWI; ++ MAC_TABLE_ENTRY *pMacEntry = NULL; ++ UCHAR PID; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + + // Make sure MGMT ring resource won't be used by other threads + RTMP_SEM_LOCK(&pAd->MgmtRingLock); +- if (pSrcBufVA == NULL) +- { ++ if (pSrcBufVA == NULL) { + // The buffer shouldn't be NULL + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_FAILURE; + } + + { +- // outgoing frame always wakeup PHY to prevent frame lost +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, TRUE); ++ // outgoing frame always wakeup PHY to prevent frame lost ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ AsicForceWakeup(pAd, TRUE); + } + +- pFirstTxWI = (PTXWI_STRUC)(pSrcBufVA + TXINFO_SIZE); +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE); ++ pFirstTxWI = (PTXWI_STRUC) (pSrcBufVA + TXINFO_SIZE); ++ pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE); + +- if (pHeader_802_11->Addr1[0] & 0x01) +- { ++ if (pHeader_802_11->Addr1[0] & 0x01) { + MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- } +- else +- { ++ } else { + MlmeRate = pAd->CommonCfg.MlmeRate; + } + + // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band ++ if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band + MlmeRate = RATE_6; + + if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) +- { ++ (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) { + pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); + } + + { + // Fixed W52 with Activity scan issue in ABG_MIXED and ABGN_MIXED mode. + if (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED +- || pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED +- ) +- { ++ || pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) { + if (pAd->LatchRfRegs.Channel > 14) + pAd->CommonCfg.MlmeTransmit.field.MODE = 1; + else +@@ -350,82 +333,76 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + // Snice it's been set to 0 while on MgtMacHeaderInit + // By the way this will cause frame to be send on PWR_SAVE failed. + // +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; // (pAd->StaCfg.Psm == PWR_SAVE); ++ pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; // (pAd->StaCfg.Psm == PWR_SAVE); + + // + // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +-// if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) ++ // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD ++// if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) + { + if ((pHeader_802_11->FC.SubType == SUBTYPE_ACTION) || +- ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- ((pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL) || +- (pHeader_802_11->FC.SubType == SUBTYPE_NULL_FUNC)))) +- { ++ ((pHeader_802_11->FC.Type == BTYPE_DATA) && ++ ((pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL) || ++ (pHeader_802_11->FC.SubType == SUBTYPE_NULL_FUNC)))) { + if (pAd->StaCfg.Psm == PWR_SAVE) +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; +- else +- pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; +- } ++ pHeader_802_11->FC.PwrMgmt = PWR_SAVE; ++ else ++ pHeader_802_11->FC.PwrMgmt = ++ pAd->CommonCfg.bAPSDForcePowerSave; ++ } + } + +- +- +- +- + bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL ++ if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL + { + //Set PM bit in ps-poll, to fix WLK 1.2 PowerSaveMode_ext failure issue. +- if ((pAd->OpMode == OPMODE_STA) && (pHeader_802_11->FC.SubType == SUBTYPE_PS_POLL)) +- { ++ if ((pAd->OpMode == OPMODE_STA) ++ && (pHeader_802_11->FC.SubType == SUBTYPE_PS_POLL)) { + pHeader_802_11->FC.PwrMgmt = PWR_SAVE; + } + bAckRequired = FALSE; +- } +- else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) ++ } else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) + { + //pAd->Sequence++; + //pHeader_802_11->Sequence = pAd->Sequence; + +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST ++ if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST + { + bAckRequired = FALSE; + pHeader_802_11->Duration = 0; +- } +- else +- { ++ } else { + bAckRequired = TRUE; +- pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) +- { ++ pHeader_802_11->Duration = ++ RTMPCalcDuration(pAd, MlmeRate, 14); ++ if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) ++ && (pHeader_802_11->FC.Type == BTYPE_MGMT)) { + bInsertTimestamp = TRUE; +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Response +- } +- else if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) && (pHeader_802_11->FC.Type == BTYPE_MGMT)) +- { +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Request ++ bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Response ++ } else ++ if ((pHeader_802_11->FC.SubType == ++ SUBTYPE_PROBE_REQ) ++ && (pHeader_802_11->FC.Type == BTYPE_MGMT)) { ++ bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Request + } + } + } + + pHeader_802_11->Sequence = pAd->Sequence++; +- if (pAd->Sequence >0xfff) ++ if (pAd->Sequence > 0xfff) + pAd->Sequence = 0; + + // Before radar detection done, mgmt frame can not be sent but probe req + // Because we need to use probe req to trigger driver to send probe req in passive scan + if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +-// if (!IrqState) ++ && (pAd->CommonCfg.bIEEE80211H == 1) ++ && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++// if (!IrqState) + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return (NDIS_STATUS_FAILURE); + } + +- + // + // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET + // should always has only one physical buffer, and the whole frame size equals +@@ -435,38 +412,37 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + // Initialize TX Descriptor + // For inter-frame gap, the number is for this frame and next frame + // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; ++// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; + + // management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. + PID = PID_MGMT; + +- +- if (pMacEntry == NULL) +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { ++ if (pMacEntry == NULL) { ++ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, ++ FALSE, bAckRequired, FALSE, 0, RESERVED_WCID, ++ (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID, 0, ++ (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ } else { + /* dont use low rate to send QoS Null data frame */ + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, +- bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, pMacEntry->Aid, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), +- pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, +- IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); ++ bInsertTimestamp, FALSE, bAckRequired, FALSE, ++ 0, pMacEntry->Aid, ++ (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), ++ pMacEntry->MaxHTPhyMode.field.MCS, 0, ++ (UCHAR) pMacEntry->MaxHTPhyMode.field.MCS, ++ IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); + } + + // Now do hardware-depened kick out. + HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen); + + // Make sure to release MGMT ring resource +-// if (!IrqState) ++// if (!IrqState) + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_SUCCESS; + } + +- + /******************************************************************************** + + New DeQueue Procedures. +@@ -530,79 +506,68 @@ NDIS_STATUS MlmeHardTransmitMgmtRing( + (2).Normal + ======================================================================== + */ +-static UCHAR TxPktClassification( +- IN RTMP_ADAPTER *pAd, +- IN PNDIS_PACKET pPacket) ++static UCHAR TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) + { +- UCHAR TxFrameType = TX_UNKOWN_FRAME; +- UCHAR Wcid; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- BOOLEAN bHTRate = FALSE; ++ UCHAR TxFrameType = TX_UNKOWN_FRAME; ++ UCHAR Wcid; ++ MAC_TABLE_ENTRY *pMacEntry = NULL; ++ BOOLEAN bHTRate = FALSE; + + Wcid = RTMP_GET_PACKET_WCID(pPacket); +- if (Wcid == MCAST_WCID) +- { // Handle for RA is Broadcast/Multicast Address. ++ if (Wcid == MCAST_WCID) { // Handle for RA is Broadcast/Multicast Address. + return TX_MCAST_FRAME; + } +- + // Handle for unicast packets + pMacEntry = &pAd->MacTab.Content[Wcid]; +- if (RTMP_GET_PACKET_LOWRATE(pPacket)) +- { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame ++ if (RTMP_GET_PACKET_LOWRATE(pPacket)) { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame + TxFrameType = TX_LEGACY_FRAME; +- } +- else if (IS_HT_RATE(pMacEntry)) +- { // it's a 11n capable packet ++ } else if (IS_HT_RATE(pMacEntry)) { // it's a 11n capable packet + + // Depends on HTPhyMode to check if the peer support the HTRate transmission. +- // Currently didn't support A-MSDU embedded in A-MPDU ++ // Currently didn't support A-MSDU embedded in A-MPDU + bHTRate = TRUE; +- if (RTMP_GET_PACKET_MOREDATA(pPacket) || (pMacEntry->PsMode == PWR_SAVE)) ++ if (RTMP_GET_PACKET_MOREDATA(pPacket) ++ || (pMacEntry->PsMode == PWR_SAVE)) + TxFrameType = TX_LEGACY_FRAME; +- else if((pMacEntry->TXBAbitmap & (1<<(RTMP_GET_PACKET_UP(pPacket)))) != 0) ++ else if ((pMacEntry-> ++ TXBAbitmap & (1 << (RTMP_GET_PACKET_UP(pPacket)))) != ++ 0) + return TX_AMPDU_FRAME; +- else if(CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AMSDU_INUSED)) ++ else if (CLIENT_STATUS_TEST_FLAG ++ (pMacEntry, fCLIENT_STATUS_AMSDU_INUSED)) + return TX_AMSDU_FRAME; + else + TxFrameType = TX_LEGACY_FRAME; +- } +- else +- { // it's a legacy b/g packet. +- if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) && +- (RTMP_GET_PACKET_TXRATE(pPacket) >= RATE_6) && +- (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) +- { // if peer support Ralink Aggregation, we use it. ++ } else { // it's a legacy b/g packet. ++ if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) && (RTMP_GET_PACKET_TXRATE(pPacket) >= RATE_6) && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { // if peer support Ralink Aggregation, we use it. + TxFrameType = TX_RALINK_FRAME; +- } +- else +- { ++ } else { + TxFrameType = TX_LEGACY_FRAME; + } + } + + // Currently, our fragment only support when a unicast packet send as NOT-ARALINK, NOT-AMSDU and NOT-AMPDU. +- if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) && (TxFrameType == TX_LEGACY_FRAME)) ++ if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) ++ && (TxFrameType == TX_LEGACY_FRAME)) + TxFrameType = TX_FRAG_FRAME; + + return TxFrameType; + } + +- +-BOOLEAN RTMP_FillTxBlkInfo( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) ++BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + { +- PACKET_INFO PacketInfo; +- PNDIS_PACKET pPacket; +- PMAC_TABLE_ENTRY pMacEntry = NULL; ++ PACKET_INFO PacketInfo; ++ PNDIS_PACKET pPacket; ++ PMAC_TABLE_ENTRY pMacEntry = NULL; + + pPacket = pTxBlk->pPacket; +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, &pTxBlk->SrcBufLen); ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, ++ &pTxBlk->SrcBufLen); + +- pTxBlk->Wcid = RTMP_GET_PACKET_WCID(pPacket); +- pTxBlk->apidx = RTMP_GET_PACKET_IF(pPacket); +- pTxBlk->UserPriority = RTMP_GET_PACKET_UP(pPacket); +- pTxBlk->FrameGap = IFS_HTTXOP; // ASIC determine Frame Gap ++ pTxBlk->Wcid = RTMP_GET_PACKET_WCID(pPacket); ++ pTxBlk->apidx = RTMP_GET_PACKET_IF(pPacket); ++ pTxBlk->UserPriority = RTMP_GET_PACKET_UP(pPacket); ++ pTxBlk->FrameGap = IFS_HTTXOP; // ASIC determine Frame Gap + + if (RTMP_GET_PACKET_CLEAR_EAP_FRAME(pTxBlk->pPacket)) + TX_BLK_SET_FLAG(pTxBlk, fTX_bClearEAPFrame); +@@ -612,32 +577,27 @@ BOOLEAN RTMP_FillTxBlkInfo( + // Default to clear this flag + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bForceNonQoS); + +- +- if (pTxBlk->Wcid == MCAST_WCID) +- { ++ if (pTxBlk->Wcid == MCAST_WCID) { + pTxBlk->pMacEntry = NULL; + { +- pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; ++ pTxBlk->pTransmit = ++ &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; + } + + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); // AckRequired = FALSE, when broadcast packet in Adhoc mode. + //TX_BLK_SET_FLAG(pTxBlk, fTX_bForceLowRate); + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAllowFrag); + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM); +- if (RTMP_GET_PACKET_MOREDATA(pPacket)) +- { ++ if (RTMP_GET_PACKET_MOREDATA(pPacket)) { + TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData); + } + +- } +- else +- { ++ } else { + pTxBlk->pMacEntry = &pAd->MacTab.Content[pTxBlk->Wcid]; + pTxBlk->pTransmit = &pTxBlk->pMacEntry->HTPhyMode; + + pMacEntry = pTxBlk->pMacEntry; + +- + // For all unicast packets, need Ack unless the Ack Policy is not set as NORMAL_ACK. + if (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx] != NORMAL_ACK) + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); +@@ -645,56 +605,54 @@ BOOLEAN RTMP_FillTxBlkInfo( + TX_BLK_SET_FLAG(pTxBlk, fTX_bAckRequired); + + if ((pAd->OpMode == OPMODE_STA) && +- (ADHOC_ON(pAd)) && +- (RX_FILTER_TEST_FLAG(pAd, fRX_FILTER_ACCEPT_PROMISCUOUS))) +- { +- if(pAd->CommonCfg.PSPXlink) ++ (ADHOC_ON(pAd)) && ++ (RX_FILTER_TEST_FLAG(pAd, fRX_FILTER_ACCEPT_PROMISCUOUS))) { ++ if (pAd->CommonCfg.PSPXlink) + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); + } + + { +- { ++ { + +- // If support WMM, enable it. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)) +- TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM); ++ // If support WMM, enable it. ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_WMM_INUSED) ++ && CLIENT_STATUS_TEST_FLAG(pMacEntry, ++ fCLIENT_STATUS_WMM_CAPABLE)) ++ TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM); + +-// if (pAd->StaCfg.bAutoTxRateSwitch) +-// TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); ++// if (pAd->StaCfg.bAutoTxRateSwitch) ++// TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); + } + } + +- if (pTxBlk->TxFrameType == TX_LEGACY_FRAME) +- { +- if ( (RTMP_GET_PACKET_LOWRATE(pPacket)) || +- ((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1))) +- { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate. +- pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; ++ if (pTxBlk->TxFrameType == TX_LEGACY_FRAME) { ++ if ((RTMP_GET_PACKET_LOWRATE(pPacket)) || ((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1))) { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate. ++ pTxBlk->pTransmit = ++ &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; + + // Modify the WMM bit for ICV issue. If we have a packet with EOSP field need to set as 1, how to handle it??? + if (IS_HT_STA(pTxBlk->pMacEntry) && +- (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_RALINK_CHIPSET)) && +- ((pAd->CommonCfg.bRdg == TRUE) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_RDG_CAPABLE))) ++ (CLIENT_STATUS_TEST_FLAG ++ (pMacEntry, fCLIENT_STATUS_RALINK_CHIPSET)) ++ && ((pAd->CommonCfg.bRdg == TRUE) ++ && CLIENT_STATUS_TEST_FLAG(pMacEntry, ++ fCLIENT_STATUS_RDG_CAPABLE))) + { + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM); +- TX_BLK_SET_FLAG(pTxBlk, fTX_bForceNonQoS); ++ TX_BLK_SET_FLAG(pTxBlk, ++ fTX_bForceNonQoS); + } + } + +- if ( (IS_HT_RATE(pMacEntry) == FALSE) && +- (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE))) +- { // Currently piggy-back only support when peer is operate in b/g mode. ++ if ((IS_HT_RATE(pMacEntry) == FALSE) && (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE))) { // Currently piggy-back only support when peer is operate in b/g mode. + TX_BLK_SET_FLAG(pTxBlk, fTX_bPiggyBack); + } + +- if (RTMP_GET_PACKET_MOREDATA(pPacket)) +- { ++ if (RTMP_GET_PACKET_MOREDATA(pPacket)) { + TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData); + } +- } +- else if (pTxBlk->TxFrameType == TX_FRAG_FRAME) +- { ++ } else if (pTxBlk->TxFrameType == TX_FRAG_FRAME) { + TX_BLK_SET_FLAG(pTxBlk, fTX_bAllowFrag); + } + +@@ -704,11 +662,8 @@ BOOLEAN RTMP_FillTxBlkInfo( + return TRUE; + } + +- +-BOOLEAN CanDoAggregateTransmit( +- IN RTMP_ADAPTER *pAd, +- IN NDIS_PACKET *pPacket, +- IN TX_BLK *pTxBlk) ++BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, ++ IN NDIS_PACKET * pPacket, IN TX_BLK * pTxBlk) + { + + //DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); +@@ -717,30 +672,24 @@ BOOLEAN CanDoAggregateTransmit( + return FALSE; + + if (RTMP_GET_PACKET_DHCP(pPacket) || +- RTMP_GET_PACKET_EAPOL(pPacket) || +- RTMP_GET_PACKET_WAI(pPacket)) ++ RTMP_GET_PACKET_EAPOL(pPacket) || RTMP_GET_PACKET_WAI(pPacket)) + return FALSE; + +- if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) && +- ((pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket))> (RX_BUFFER_AGGRESIZE - 100))) +- { // For AMSDU, allow the packets with total length < max-amsdu size ++ if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) && ((pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket)) > (RX_BUFFER_AGGRESIZE - 100))) { // For AMSDU, allow the packets with total length < max-amsdu size + return FALSE; + } + +- if ((pTxBlk->TxFrameType == TX_RALINK_FRAME) && +- (pTxBlk->TxPacketList.Number == 2)) +- { // For RALINK-Aggregation, allow two frames in one batch. ++ if ((pTxBlk->TxFrameType == TX_RALINK_FRAME) && (pTxBlk->TxPacketList.Number == 2)) { // For RALINK-Aggregation, allow two frames in one batch. + return FALSE; + } + +- if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) // must be unicast to AP ++ if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) // must be unicast to AP + return TRUE; + else + return FALSE; + + } + +- + /* + ======================================================================== + +@@ -763,51 +712,41 @@ BOOLEAN CanDoAggregateTransmit( + + ======================================================================== + */ +-VOID RTMPDeQueuePacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bIntContext, +- IN UCHAR QIdx, /* BulkOutPipeId */ +- IN UCHAR Max_Tx_Packets) ++VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QIdx, /* BulkOutPipeId */ ++ IN UCHAR Max_Tx_Packets) + { +- PQUEUE_ENTRY pEntry = NULL; +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- UCHAR Count=0; +- PQUEUE_HEADER pQueue; +- ULONG FreeNumber[NUM_OF_TX_RING]; +- UCHAR QueIdx, sQIdx, eQIdx; +- unsigned long IrqFlags = 0; +- BOOLEAN hasTxDesc = FALSE; +- TX_BLK TxBlk; +- TX_BLK *pTxBlk; +- +- +- +- if (QIdx == NUM_OF_TX_RING) +- { ++ PQUEUE_ENTRY pEntry = NULL; ++ PNDIS_PACKET pPacket; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ UCHAR Count = 0; ++ PQUEUE_HEADER pQueue; ++ ULONG FreeNumber[NUM_OF_TX_RING]; ++ UCHAR QueIdx, sQIdx, eQIdx; ++ unsigned long IrqFlags = 0; ++ BOOLEAN hasTxDesc = FALSE; ++ TX_BLK TxBlk; ++ TX_BLK *pTxBlk; ++ ++ if (QIdx == NUM_OF_TX_RING) { + sQIdx = 0; + eQIdx = 3; // 4 ACs, start from 0. +- } +- else +- { ++ } else { + sQIdx = eQIdx = QIdx; + } + +- for (QueIdx=sQIdx; QueIdx <= eQIdx; QueIdx++) +- { +- Count=0; ++ for (QueIdx = sQIdx; QueIdx <= eQIdx; QueIdx++) { ++ Count = 0; + + RTMP_START_DEQUEUE(pAd, QueIdx, IrqFlags); + +- +- while (1) +- { +- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST)))) +- { ++ while (1) { ++ if ((RTMP_TEST_FLAG ++ (pAd, ++ (fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS | ++ fRTMP_ADAPTER_RADIO_OFF | ++ fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST)))) { + RTMP_STOP_DEQUEUE(pAd, QueIdx, IrqFlags); + return; + } +@@ -816,47 +755,47 @@ VOID RTMPDeQueuePacket( + break; + + DEQUEUE_LOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- if (&pAd->TxSwQueue[QueIdx] == NULL) +- { +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); ++ if (&pAd->TxSwQueue[QueIdx] == NULL) { ++ DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, ++ IrqFlags); + break; + } +- + #ifdef RTMP_MAC_PCI + FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); + +- +- if (FreeNumber[QueIdx] <= 5) +- { ++ if (FreeNumber[QueIdx] <= 5) { + // free Tx(QueIdx) resources + RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); +- FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); ++ FreeNumber[QueIdx] = ++ GET_TXRING_FREENO(pAd, QueIdx); + } + #endif // RTMP_MAC_PCI // + + // probe the Queue Head + pQueue = &pAd->TxSwQueue[QueIdx]; +- if ((pEntry = pQueue->Head) == NULL) +- { +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); ++ if ((pEntry = pQueue->Head) == NULL) { ++ DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, ++ IrqFlags); + break; + } + + pTxBlk = &TxBlk; +- NdisZeroMemory((PUCHAR)pTxBlk, sizeof(TX_BLK)); +- //InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. ++ NdisZeroMemory((PUCHAR) pTxBlk, sizeof(TX_BLK)); ++ //InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. + pTxBlk->QueIdx = QueIdx; + + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + +- + // Early check to make sure we have enoguh Tx Resource. +- hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); +- if (!hasTxDesc) +- { ++ hasTxDesc = ++ RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, ++ FreeNumber[QueIdx], ++ pPacket); ++ if (!hasTxDesc) { + pAd->PrivateInfo.TxRingFullCnt++; + +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); ++ DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, ++ IrqFlags); + + break; + } +@@ -867,27 +806,41 @@ VOID RTMPDeQueuePacket( + pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary + pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); + pTxBlk->pPacket = pPacket; +- InsertTailQueue(&pTxBlk->TxPacketList, PACKET_TO_QUEUE_ENTRY(pPacket)); ++ InsertTailQueue(&pTxBlk->TxPacketList, ++ PACKET_TO_QUEUE_ENTRY(pPacket)); + +- if (pTxBlk->TxFrameType == TX_RALINK_FRAME || pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- { ++ if (pTxBlk->TxFrameType == TX_RALINK_FRAME ++ || pTxBlk->TxFrameType == TX_AMSDU_FRAME) { + // Enhance SW Aggregation Mechanism +- if (NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, FreeNumber[QueIdx], pTxBlk->TxFrameType)) +- { +- InsertHeadQueue(pQueue, PACKET_TO_QUEUE_ENTRY(pPacket)); +- DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); ++ if (NEED_QUEUE_BACK_FOR_AGG ++ (pAd, QueIdx, FreeNumber[QueIdx], ++ pTxBlk->TxFrameType)) { ++ InsertHeadQueue(pQueue, ++ PACKET_TO_QUEUE_ENTRY ++ (pPacket)); ++ DEQUEUE_UNLOCK(&pAd->irq_lock, ++ bIntContext, IrqFlags); + break; + } + +- do{ +- if((pEntry = pQueue->Head) == NULL) ++ do { ++ if ((pEntry = pQueue->Head) == NULL) + break; + + // For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); +- hasTxDesc = RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, FreeNumber[QueIdx], pPacket); +- if ((hasTxDesc == FALSE) || (CanDoAggregateTransmit(pAd, pPacket, pTxBlk) == FALSE)) ++ FreeNumber[QueIdx] = ++ GET_TXRING_FREENO(pAd, QueIdx); ++ hasTxDesc = ++ RTMP_HAS_ENOUGH_FREE_DESC(pAd, ++ pTxBlk, ++ FreeNumber ++ [QueIdx], ++ pPacket); ++ if ((hasTxDesc == FALSE) ++ || ++ (CanDoAggregateTransmit ++ (pAd, pPacket, pTxBlk) == FALSE)) + break; + + //Remove the packet from the TxSwQueue and insert into pTxBlk +@@ -896,14 +849,16 @@ VOID RTMPDeQueuePacket( + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + pTxBlk->TotalFrameNum++; + pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary +- pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); +- InsertTailQueue(&pTxBlk->TxPacketList, PACKET_TO_QUEUE_ENTRY(pPacket)); +- }while(1); ++ pTxBlk->TotalFrameLen += ++ GET_OS_PKT_LEN(pPacket); ++ InsertTailQueue(&pTxBlk->TxPacketList, ++ PACKET_TO_QUEUE_ENTRY ++ (pPacket)); ++ } while (1); + + if (pTxBlk->TxPacketList.Number == 1) + pTxBlk->TxFrameType = TX_LEGACY_FRAME; + } +- + #ifdef RTMP_MAC_USB + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); + #endif // RTMP_MAC_USB // +@@ -916,7 +871,7 @@ VOID RTMPDeQueuePacket( + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); + // static rate also need NICUpdateFifoStaCounters() function. + //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- NICUpdateFifoStaCounters(pAd); ++ NICUpdateFifoStaCounters(pAd); + #endif // RTMP_MAC_PCI // + + } +@@ -931,7 +886,6 @@ VOID RTMPDeQueuePacket( + + } + +- + /* + ======================================================================== + +@@ -954,40 +908,37 @@ VOID RTMPDeQueuePacket( + + ======================================================================== + */ +-USHORT RTMPCalcDuration( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Rate, +- IN ULONG Size) ++USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + { +- ULONG Duration = 0; ++ ULONG Duration = 0; + +- if (Rate < RATE_FIRST_OFDM_RATE) // CCK ++ if (Rate < RATE_FIRST_OFDM_RATE) // CCK + { +- if ((Rate > RATE_1) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED)) ++ if ((Rate > RATE_1) ++ && OPSTATUS_TEST_FLAG(pAd, ++ fOP_STATUS_SHORT_PREAMBLE_INUSED)) + Duration = 96; // 72+24 preamble+plcp + else +- Duration = 192; // 144+48 preamble+plcp ++ Duration = 192; // 144+48 preamble+plcp + +- Duration += (USHORT)((Size << 4) / RateIdTo500Kbps[Rate]); ++ Duration += (USHORT) ((Size << 4) / RateIdTo500Kbps[Rate]); + if ((Size << 4) % RateIdTo500Kbps[Rate]) +- Duration ++; +- } +- else if (Rate <= RATE_LAST_OFDM_RATE)// OFDM rates ++ Duration++; ++ } else if (Rate <= RATE_LAST_OFDM_RATE) // OFDM rates + { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension +- Duration += 4 * (USHORT)((11 + Size * 4) / RateIdTo500Kbps[Rate]); ++ Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension ++ Duration += ++ 4 * (USHORT) ((11 + Size * 4) / RateIdTo500Kbps[Rate]); + if ((11 + Size * 4) % RateIdTo500Kbps[Rate]) + Duration += 4; +- } +- else //mimo rate ++ } else //mimo rate + { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension ++ Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension + } + +- return (USHORT)Duration; ++ return (USHORT) Duration; + } + +- + /* + ======================================================================== + +@@ -1017,28 +968,19 @@ USHORT RTMPCalcDuration( + + ======================================================================== + */ +-VOID RTMPWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pOutTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit) ++VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, // HW new a sequence. ++ IN UCHAR BASize, ++ IN UCHAR WCID, ++ IN ULONG Length, ++ IN UCHAR PID, ++ IN UCHAR TID, ++ IN UCHAR TxRate, ++ IN UCHAR Txopmode, ++ IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit) + { +- PMAC_TABLE_ENTRY pMac = NULL; +- TXWI_STRUC TxWI; +- PTXWI_STRUC pTxWI; ++ PMAC_TABLE_ENTRY pMac = NULL; ++ TXWI_STRUC TxWI; ++ PTXWI_STRUC pTxWI; + + if (WCID < MAX_LEN_OF_MAC_TABLE) + pMac = &pAd->MacTab.Content[WCID]; +@@ -1051,26 +993,23 @@ VOID RTMPWriteTxWI( + NdisZeroMemory(&TxWI, TXWI_SIZE); + pTxWI = &TxWI; + +- pTxWI->FRAG= FRAG; ++ pTxWI->FRAG = FRAG; + + pTxWI->CFACK = CFACK; +- pTxWI->TS= InsTimestamp; ++ pTxWI->TS = InsTimestamp; + pTxWI->AMPDU = AMPDU; + pTxWI->ACK = Ack; +- pTxWI->txop= Txopmode; ++ pTxWI->txop = Txopmode; + + pTxWI->NSEQ = NSeq; + // John tune the performace with Intel Client in 20 MHz performance + BASize = pAd->CommonCfg.TxBASize; +- if (pAd->MACVersion == 0x28720200) +- { +- if( BASize >13 ) +- BASize =13; +- } +- else +- { +- if( BASize >7 ) +- BASize =7; ++ if (pAd->MACVersion == 0x28720200) { ++ if (BASize > 13) ++ BASize = 13; ++ } else { ++ if (BASize > 7) ++ BASize = 7; + } + pTxWI->BAWinSize = BASize; + pTxWI->ShortGI = pTransmit->field.ShortGI; +@@ -1081,38 +1020,34 @@ VOID RTMPWriteTxWI( + pTxWI->PacketId = PID; + + // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); ++ pTxWI->BW = ++ (pTransmit->field.MODE <= ++ MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); + + pTxWI->MCS = pTransmit->field.MCS; + pTxWI->PHYMODE = pTransmit->field.MODE; + pTxWI->CFACK = CfAck; + +- if (pMac) +- { +- if (pAd->CommonCfg.bMIMOPSEnable) +- { +- if ((pMac->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { ++ if (pMac) { ++ if (pAd->CommonCfg.bMIMOPSEnable) { ++ if ((pMac->MmpsMode == MMPS_DYNAMIC) ++ && (pTransmit->field.MCS > 7)) { + // Dynamic MIMO Power Save Mode + pTxWI->MIMOps = 1; +- } +- else if (pMac->MmpsMode == MMPS_STATIC) +- { ++ } else if (pMac->MmpsMode == MMPS_STATIC) { + // Static MIMO Power Save Mode +- if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7) +- { ++ if (pTransmit->field.MODE >= MODE_HTMIX ++ && pTransmit->field.MCS > 7) { + pTxWI->MCS = 7; + pTxWI->MIMOps = 0; + } + } + } + //pTxWI->MIMOps = (pMac->PsMode == PWR_MMPS)? 1:0; +- if (pMac->bIAmBadAtheros && (pMac->WepStatus != Ndis802_11WEPDisabled)) +- { ++ if (pMac->bIAmBadAtheros ++ && (pMac->WepStatus != Ndis802_11WEPDisabled)) { + pTxWI->MpduDensity = 7; +- } +- else +- { ++ } else { + pTxWI->MpduDensity = pMac->MpduDensity; + } + } +@@ -1121,22 +1056,18 @@ VOID RTMPWriteTxWI( + NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC)); + } + +- +-VOID RTMPWriteTxWI_Data( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk) ++VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, ++ IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) + { +- HTTRANSMIT_SETTING *pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; +- UCHAR BASize; ++ HTTRANSMIT_SETTING *pTransmit; ++ PMAC_TABLE_ENTRY pMacEntry; ++ UCHAR BASize; + + ASSERT(pTxWI); + + pTransmit = pTxBlk->pTransmit; + pMacEntry = pTxBlk->pMacEntry; + +- + // + // Always use Long preamble before verifiation short preamble functionality works well. + // Todo: remove the following line if short preamble functionality works +@@ -1144,26 +1075,28 @@ VOID RTMPWriteTxWI_Data( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + NdisZeroMemory(pTxWI, TXWI_SIZE); + +- pTxWI->FRAG = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag); +- pTxWI->ACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAckRequired); +- pTxWI->txop = pTxBlk->FrameGap; ++ pTxWI->FRAG = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag); ++ pTxWI->ACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAckRequired); ++ pTxWI->txop = pTxBlk->FrameGap; + +- pTxWI->WirelessCliID = pTxBlk->Wcid; ++ pTxWI->WirelessCliID = pTxBlk->Wcid; + +- pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; +- pTxWI->CFACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bPiggyBack); ++ pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; ++ pTxWI->CFACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bPiggyBack); + + // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +- pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE); ++ pTxWI->BW = ++ (pTransmit->field.MODE <= ++ MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); ++ pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE); + + // John tune the performace with Intel Client in 20 MHz performance + BASize = pAd->CommonCfg.TxBASize; +- if((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry)) +- { +- UCHAR RABAOriIdx = 0; //The RA's BA Originator table index. ++ if ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry)) { ++ UCHAR RABAOriIdx = 0; //The RA's BA Originator table index. + +- RABAOriIdx = pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority]; ++ RABAOriIdx = ++ pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority]; + BASize = pAd->BATable.BAOriEntry[RABAOriIdx].BAWinSize; + } + +@@ -1175,46 +1108,37 @@ VOID RTMPWriteTxWI_Data( + pTxWI->MCS = pTransmit->field.MCS; + pTxWI->PHYMODE = pTransmit->field.MODE; + +- if (pMacEntry) +- { +- if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { ++ if (pMacEntry) { ++ if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) ++ && (pTransmit->field.MCS > 7)) { + // Dynamic MIMO Power Save Mode + pTxWI->MIMOps = 1; +- } +- else if (pMacEntry->MmpsMode == MMPS_STATIC) +- { ++ } else if (pMacEntry->MmpsMode == MMPS_STATIC) { + // Static MIMO Power Save Mode +- if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7) +- { ++ if (pTransmit->field.MODE >= MODE_HTMIX ++ && pTransmit->field.MCS > 7) { + pTxWI->MCS = 7; + pTxWI->MIMOps = 0; + } + } + +- if (pMacEntry->bIAmBadAtheros && (pMacEntry->WepStatus != Ndis802_11WEPDisabled)) +- { ++ if (pMacEntry->bIAmBadAtheros ++ && (pMacEntry->WepStatus != Ndis802_11WEPDisabled)) { + pTxWI->MpduDensity = 7; +- } +- else +- { ++ } else { + pTxWI->MpduDensity = pMacEntry->MpduDensity; + } + } + +- + // for rate adapation + pTxWI->PacketId = pTxWI->MCS; + } + +- +-VOID RTMPWriteTxWI_Cache( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk) ++VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, ++ IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) + { +- PHTTRANSMIT_SETTING /*pTxHTPhyMode,*/ pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; ++ PHTTRANSMIT_SETTING /*pTxHTPhyMode, */ pTransmit; ++ PMAC_TABLE_ENTRY pMacEntry; + + // + // update TXWI +@@ -1225,12 +1149,13 @@ VOID RTMPWriteTxWI_Cache( + //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) + //if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pMacEntry)) + //if (TX_BLK_TEST_FLAG(pTxBlk, fTX_AutoRateSwitch)) +- if (pMacEntry->bAutoTxRateSwitch) +- { ++ if (pMacEntry->bAutoTxRateSwitch) { + pTxWI->txop = IFS_HTTXOP; + + // If CCK or OFDM, BW must be 20 +- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); ++ pTxWI->BW = ++ (pTransmit->field.MODE <= ++ MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); + pTxWI->ShortGI = pTransmit->field.ShortGI; + pTxWI->STBC = pTransmit->field.STBC; + +@@ -1241,43 +1166,36 @@ VOID RTMPWriteTxWI_Cache( + pTxWI->PacketId = pTransmit->field.MCS; + } + +- pTxWI->AMPDU = ((pMacEntry->NoBADataCountDown == 0) ? TRUE: FALSE); ++ pTxWI->AMPDU = ((pMacEntry->NoBADataCountDown == 0) ? TRUE : FALSE); + pTxWI->MIMOps = 0; + +- if (pAd->CommonCfg.bMIMOPSEnable) +- { ++ if (pAd->CommonCfg.bMIMOPSEnable) { + // MIMO Power Save Mode +- if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7)) +- { ++ if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) ++ && (pTransmit->field.MCS > 7)) { + // Dynamic MIMO Power Save Mode + pTxWI->MIMOps = 1; +- } +- else if (pMacEntry->MmpsMode == MMPS_STATIC) +- { ++ } else if (pMacEntry->MmpsMode == MMPS_STATIC) { + // Static MIMO Power Save Mode +- if ((pTransmit->field.MODE >= MODE_HTMIX) && (pTransmit->field.MCS > 7)) +- { ++ if ((pTransmit->field.MODE >= MODE_HTMIX) ++ && (pTransmit->field.MCS > 7)) { + pTxWI->MCS = 7; + pTxWI->MIMOps = 0; + } + } + } + +- + pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; + + } + +- + // should be called only when - + // 1. MEADIA_CONNECTED + // 2. AGGREGATION_IN_USED + // 3. Fragmentation not in used + // 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible +-BOOLEAN TxFrameIsAggregatible( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, +- IN PUCHAR p8023hdr) ++BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pPrevAddr1, IN PUCHAR p8023hdr) + { + + // can't aggregate EAPOL (802.1x) frame +@@ -1288,15 +1206,14 @@ BOOLEAN TxFrameIsAggregatible( + if (p8023hdr[0] & 0x01) + return FALSE; + +- if (INFRA_ON(pAd)) // must be unicast to AP ++ if (INFRA_ON(pAd)) // must be unicast to AP + return TRUE; +- else if ((pPrevAddr1 == NULL) || MAC_ADDR_EQUAL(pPrevAddr1, p8023hdr)) // unicast to same STA ++ else if ((pPrevAddr1 == NULL) || MAC_ADDR_EQUAL(pPrevAddr1, p8023hdr)) // unicast to same STA + return TRUE; + else + return FALSE; + } + +- + /* + ======================================================================== + +@@ -1313,23 +1230,18 @@ BOOLEAN TxFrameIsAggregatible( + + ======================================================================== + */ +-BOOLEAN PeerIsAggreOn( +- IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, +- IN PMAC_TABLE_ENTRY pMacEntry) ++BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, ++ IN ULONG TxRate, IN PMAC_TABLE_ENTRY pMacEntry) + { +- ULONG AFlags = (fCLIENT_STATUS_AMSDU_INUSED | fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ ULONG AFlags = ++ (fCLIENT_STATUS_AMSDU_INUSED | fCLIENT_STATUS_AGGREGATION_CAPABLE); + +- if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags)) +- { +- if (pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) +- { ++ if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags)) { ++ if (pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) { + return TRUE; + } +- + #ifdef AGGREGATION_SUPPORT +- if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) +- { // legacy Ralink Aggregation support ++ if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { // legacy Ralink Aggregation support + return TRUE; + } + #endif // AGGREGATION_SUPPORT // +@@ -1339,7 +1251,6 @@ BOOLEAN PeerIsAggreOn( + + } + +- + /* + ======================================================================== + +@@ -1358,49 +1269,38 @@ BOOLEAN PeerIsAggreOn( + + ======================================================================== + */ +-PQUEUE_HEADER RTMPCheckTxSwQueue( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pQueIdx) ++PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT PUCHAR pQueIdx) + { + +- ULONG Number; ++ ULONG Number; + // 2004-11-15 to be removed. test aggregation only +-// if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) +-// return NULL; ++// if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) ++// return NULL; + + Number = pAd->TxSwQueue[QID_AC_BK].Number +- + pAd->TxSwQueue[QID_AC_BE].Number +- + pAd->TxSwQueue[QID_AC_VI].Number +- + pAd->TxSwQueue[QID_AC_VO].Number; ++ + pAd->TxSwQueue[QID_AC_BE].Number ++ + pAd->TxSwQueue[QID_AC_VI].Number ++ + pAd->TxSwQueue[QID_AC_VO].Number; + +- if (pAd->TxSwQueue[QID_AC_VO].Head != NULL) +- { ++ if (pAd->TxSwQueue[QID_AC_VO].Head != NULL) { + *pQueIdx = QID_AC_VO; + return (&pAd->TxSwQueue[QID_AC_VO]); +- } +- else if (pAd->TxSwQueue[QID_AC_VI].Head != NULL) +- { ++ } else if (pAd->TxSwQueue[QID_AC_VI].Head != NULL) { + *pQueIdx = QID_AC_VI; + return (&pAd->TxSwQueue[QID_AC_VI]); +- } +- else if (pAd->TxSwQueue[QID_AC_BE].Head != NULL) +- { ++ } else if (pAd->TxSwQueue[QID_AC_BE].Head != NULL) { + *pQueIdx = QID_AC_BE; + return (&pAd->TxSwQueue[QID_AC_BE]); +- } +- else if (pAd->TxSwQueue[QID_AC_BK].Head != NULL) +- { ++ } else if (pAd->TxSwQueue[QID_AC_BK].Head != NULL) { + *pQueIdx = QID_AC_BK; + return (&pAd->TxSwQueue[QID_AC_BK]); + } +- + // No packet pending in Tx Sw queue + *pQueIdx = QID_AC_BK; + + return (NULL); + } + +- + /* + ======================================================================== + +@@ -1417,27 +1317,25 @@ PQUEUE_HEADER RTMPCheckTxSwQueue( + + ======================================================================== + */ +-VOID RTMPSuspendMsduTransmission( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + { +- DBGPRINT(RT_DEBUG_TRACE,("SCANNING, suspend MSDU transmission ...\n")); +- ++ DBGPRINT(RT_DEBUG_TRACE, ("SCANNING, suspend MSDU transmission ...\n")); + + // + // Before BSS_SCAN_IN_PROGRESS, we need to keep Current R66 value and + // use Lowbound as R66 value on ScanNextChannel(...) + // +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, ++ &pAd->BbpTuning.R66CurrentValue); + + // set BBP_R66 to 0x30/0x40 when scanning (AsicSwitchChannel will set R66 according to channel when scanning) + //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x26 + GET_LNA_GAIN(pAd))); + RTMPSetAGCInitValue(pAd, BW_20); + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings ++ //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings + } + +- + /* + ======================================================================== + +@@ -1456,70 +1354,61 @@ VOID RTMPSuspendMsduTransmission( + + ======================================================================== + */ +-VOID RTMPResumeMsduTransmission( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + { +-// UCHAR IrqState; +- +- DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n")); ++// UCHAR IrqState; + ++ DBGPRINT(RT_DEBUG_TRACE, ("SCAN done, resume MSDU transmission ...\n")); + + // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value + // R66 should not be 0 +- if (pAd->BbpTuning.R66CurrentValue == 0) +- { ++ if (pAd->BbpTuning.R66CurrentValue == 0) { + pAd->BbpTuning.R66CurrentValue = 0x38; + DBGPRINT_ERR(("RTMPResumeMsduTransmission, R66CurrentValue=0...\n")); + } + +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, ++ pAd->BbpTuning.R66CurrentValue); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + // sample, for IRQ LOCK to SEM LOCK + // IrqState = pAd->irq_disabled; +-// if (IrqState) +-// RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); ++// if (IrqState) ++// RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); + // else + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + } + +- +-UINT deaggregate_AMSDU_announce( +- IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize) ++UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++ PNDIS_PACKET pPacket, ++ IN PUCHAR pData, IN ULONG DataSize) + { +- USHORT PayloadSize; +- USHORT SubFrameSize; +- PHEADER_802_3 pAMSDUsubheader; +- UINT nMSDU; +- UCHAR Header802_3[14]; +- +- PUCHAR pPayload, pDA, pSA, pRemovedLLCSNAP; +- PNDIS_PACKET pClonePacket; +- ++ USHORT PayloadSize; ++ USHORT SubFrameSize; ++ PHEADER_802_3 pAMSDUsubheader; ++ UINT nMSDU; ++ UCHAR Header802_3[14]; + ++ PUCHAR pPayload, pDA, pSA, pRemovedLLCSNAP; ++ PNDIS_PACKET pClonePacket; + + nMSDU = 0; + +- while (DataSize > LENGTH_802_3) +- { ++ while (DataSize > LENGTH_802_3) { + + nMSDU++; + + //hex_dump("subheader", pData, 64); +- pAMSDUsubheader = (PHEADER_802_3)pData; ++ pAMSDUsubheader = (PHEADER_802_3) pData; + //pData += LENGTH_802_3; +- PayloadSize = pAMSDUsubheader->Octet[1] + (pAMSDUsubheader->Octet[0]<<8); ++ PayloadSize = ++ pAMSDUsubheader->Octet[1] + ++ (pAMSDUsubheader->Octet[0] << 8); + SubFrameSize = PayloadSize + LENGTH_802_3; + +- +- if ((DataSize < SubFrameSize) || (PayloadSize > 1518 )) +- { ++ if ((DataSize < SubFrameSize) || (PayloadSize > 1518)) { + break; + } +- + //DBGPRINT(RT_DEBUG_TRACE,("%d subframe: Size = %d\n", nMSDU, PayloadSize)); + + pPayload = pData + LENGTH_802_3; +@@ -1527,55 +1416,58 @@ UINT deaggregate_AMSDU_announce( + pSA = pData + MAC_ADDR_LEN; + + // convert to 802.3 header +- CONVERT_TO_802_3(Header802_3, pDA, pSA, pPayload, PayloadSize, pRemovedLLCSNAP); ++ CONVERT_TO_802_3(Header802_3, pDA, pSA, pPayload, PayloadSize, ++ pRemovedLLCSNAP); + +- if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E) ) +- { ++ if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E)) { + /* avoid local heap overflow, use dyanamic allocation */ +- MLME_QUEUE_ELEM *Elem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); +- if (Elem != NULL) +- { +- memmove(Elem->Msg+(LENGTH_802_11 + LENGTH_802_1_H), pPayload, PayloadSize); +- Elem->MsgLen = LENGTH_802_11 + LENGTH_802_1_H + PayloadSize; ++ MLME_QUEUE_ELEM *Elem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); ++ if (Elem != NULL) { ++ memmove(Elem->Msg + ++ (LENGTH_802_11 + LENGTH_802_1_H), ++ pPayload, PayloadSize); ++ Elem->MsgLen = ++ LENGTH_802_11 + LENGTH_802_1_H + ++ PayloadSize; + //WpaEAPOLKeyAction(pAd, Elem); +- REPORT_MGMT_FRAME_TO_MLME(pAd, BSSID_WCID, Elem->Msg, Elem->MsgLen, 0, 0, 0, 0); +- kfree(Elem); +- } ++ REPORT_MGMT_FRAME_TO_MLME(pAd, BSSID_WCID, ++ Elem->Msg, ++ Elem->MsgLen, 0, 0, 0, ++ 0); ++ kfree(Elem); ++ } + } + + { +- if (pRemovedLLCSNAP) +- { +- pPayload -= LENGTH_802_3; +- PayloadSize += LENGTH_802_3; +- NdisMoveMemory(pPayload, &Header802_3[0], LENGTH_802_3); +- } ++ if (pRemovedLLCSNAP) { ++ pPayload -= LENGTH_802_3; ++ PayloadSize += LENGTH_802_3; ++ NdisMoveMemory(pPayload, &Header802_3[0], ++ LENGTH_802_3); ++ } + } + + pClonePacket = ClonePacket(pAd, pPacket, pPayload, PayloadSize); +- if (pClonePacket) +- { +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pClonePacket, RTMP_GET_PACKET_IF(pPacket)); ++ if (pClonePacket) { ++ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pClonePacket, ++ RTMP_GET_PACKET_IF ++ (pPacket)); + } + +- + // A-MSDU has padding to multiple of 4 including subframe header. + // align SubFrameSize up to multiple of 4 +- SubFrameSize = (SubFrameSize+3)&(~0x3); +- ++ SubFrameSize = (SubFrameSize + 3) & (~0x3); + +- if (SubFrameSize > 1528 || SubFrameSize < 32) +- { ++ if (SubFrameSize > 1528 || SubFrameSize < 32) { + break; + } + +- if (DataSize > SubFrameSize) +- { ++ if (DataSize > SubFrameSize) { + pData += SubFrameSize; + DataSize -= SubFrameSize; +- } +- else +- { ++ } else { + // end of A-MSDU + DataSize = 0; + } +@@ -1587,14 +1479,11 @@ UINT deaggregate_AMSDU_announce( + return nMSDU; + } + +- +-UINT BA_Reorder_AMSDU_Annnounce( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++UINT BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- PUCHAR pData; +- USHORT DataSize; +- UINT nMSDU = 0; ++ PUCHAR pData; ++ USHORT DataSize; ++ UINT nMSDU = 0; + + pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); + DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); +@@ -1604,7 +1493,6 @@ UINT BA_Reorder_AMSDU_Annnounce( + return nMSDU; + } + +- + /* + ========================================================================== + Description: +@@ -1613,9 +1501,7 @@ UINT BA_Reorder_AMSDU_Annnounce( + pEntry - pointer to the MAC entry; NULL is not found + ========================================================================== + */ +-MAC_TABLE_ENTRY *MacTableLookup( +- IN PRTMP_ADAPTER pAd, +- PUCHAR pAddr) ++MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, PUCHAR pAddr) + { + ULONG HashIdx; + MAC_TABLE_ENTRY *pEntry = NULL; +@@ -1623,30 +1509,27 @@ MAC_TABLE_ENTRY *MacTableLookup( + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); + pEntry = pAd->MacTab.Hash[HashIdx]; + +- while (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsWDS || pEntry->ValidAsApCli || pEntry->ValidAsMesh)) +- { +- if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { ++ while (pEntry ++ && (pEntry->ValidAsCLI || pEntry->ValidAsWDS ++ || pEntry->ValidAsApCli || pEntry->ValidAsMesh)) { ++ if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) { + break; +- } +- else ++ } else + pEntry = pEntry->pNext; + } + + return pEntry; + } + +-MAC_TABLE_ENTRY *MacTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, +- IN BOOLEAN CleanAll) ++MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr, ++ IN UCHAR apidx, IN BOOLEAN CleanAll) + { + UCHAR HashIdx; + int i, FirstWcid; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; +-// USHORT offset; +-// ULONG addr; ++// USHORT offset; ++// ULONG addr; + + // if FULL, return + if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) +@@ -1659,18 +1542,16 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + + // allocate one MAC entry + NdisAcquireSpinLock(&pAd->MacTabLock); +- for (i = FirstWcid; i< MAX_LEN_OF_MAC_TABLE; i++) // skip entry#0 so that "entry index == AID" for fast lookup ++ for (i = FirstWcid; i < MAX_LEN_OF_MAC_TABLE; i++) // skip entry#0 so that "entry index == AID" for fast lookup + { + // pick up the first available vacancy + if ((pAd->MacTab.Content[i].ValidAsCLI == FALSE) && +- (pAd->MacTab.Content[i].ValidAsWDS == FALSE) && +- (pAd->MacTab.Content[i].ValidAsApCli== FALSE) && +- (pAd->MacTab.Content[i].ValidAsMesh == FALSE) +- ) +- { ++ (pAd->MacTab.Content[i].ValidAsWDS == FALSE) && ++ (pAd->MacTab.Content[i].ValidAsApCli == FALSE) && ++ (pAd->MacTab.Content[i].ValidAsMesh == FALSE) ++ ) { + pEntry = &pAd->MacTab.Content[i]; +- if (CleanAll == TRUE) +- { ++ if (CleanAll == TRUE) { + pEntry->MaxSupportedRate = RATE_11; + pEntry->CurrTxRate = RATE_11; + NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); +@@ -1690,27 +1571,37 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + pEntry->bIAmBadAtheros = FALSE; + pEntry->pAd = pAd; + pEntry->CMTimerRunning = FALSE; +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; ++ pEntry->EnqueueEapolStartTimerRunning = ++ EAPOL_START_DISABLE; + pEntry->RSNIE_Len = 0; +- NdisZeroMemory(pEntry->R_Counter, sizeof(pEntry->R_Counter)); ++ NdisZeroMemory(pEntry->R_Counter, ++ sizeof(pEntry->R_Counter)); + pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; + + if (pEntry->ValidAsMesh) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_MESH); ++ pEntry->apidx = ++ (apidx - MIN_NET_DEVICE_FOR_MESH); + else if (pEntry->ValidAsApCli) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_APCLI); ++ pEntry->apidx = ++ (apidx - MIN_NET_DEVICE_FOR_APCLI); + else if (pEntry->ValidAsWDS) +- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_WDS); ++ pEntry->apidx = ++ (apidx - MIN_NET_DEVICE_FOR_WDS); + else + pEntry->apidx = apidx; + + { + { + pEntry->AuthMode = pAd->StaCfg.AuthMode; +- pEntry->WepStatus = pAd->StaCfg.WepStatus; +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ pEntry->WepStatus = ++ pAd->StaCfg.WepStatus; ++ pEntry->PrivacyFilter = ++ Ndis802_11PrivFilterAcceptAll; + #ifdef RTMP_MAC_PCI +- AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)i); ++ AsicRemovePairwiseKeyEntry(pAd, ++ pEntry-> ++ apidx, ++ (UCHAR) i); + #endif // RTMP_MAC_PCI // + } + } +@@ -1724,7 +1615,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + COPY_MAC_ADDR(pEntry->Addr, pAddr); + pEntry->Sst = SST_NOT_AUTH; + pEntry->AuthState = AS_NOT_AUTH; +- pEntry->Aid = (USHORT)i; //0; ++ pEntry->Aid = (USHORT) i; //0; + pEntry->CapabilityInfo = 0; + pEntry->PsMode = PWR_ACTIVE; + pEntry->PsQIdleCount = 0; +@@ -1733,28 +1624,23 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + pEntry->ContinueTxFailCnt = 0; + InitializeQueueHeader(&pEntry->PsQueue); + +- +- pAd->MacTab.Size ++; ++ pAd->MacTab.Size++; + // Add this entry into ASIC RX WCID search table + RTMP_STA_ENTRY_ADD(pAd, pEntry); + +- +- +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableInsertEntry - allocate entry #%d, Total= %d\n",i, pAd->MacTab.Size)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MacTableInsertEntry - allocate entry #%d, Total= %d\n", ++ i, pAd->MacTab.Size)); + break; + } + } + + // add this MAC entry into HASH table +- if (pEntry) +- { ++ if (pEntry) { + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- if (pAd->MacTab.Hash[HashIdx] == NULL) +- { ++ if (pAd->MacTab.Hash[HashIdx] == NULL) { + pAd->MacTab.Hash[HashIdx] = pEntry; +- } +- else +- { ++ } else { + pCurrEntry = pAd->MacTab.Hash[HashIdx]; + while (pCurrEntry->pNext != NULL) + pCurrEntry = pCurrEntry->pNext; +@@ -1772,16 +1658,14 @@ MAC_TABLE_ENTRY *MacTableInsertEntry( + Delete a specified client from MAC table + ========================================================================== + */ +-BOOLEAN MacTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr) ++BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, ++ IN USHORT wcid, IN PUCHAR pAddr) + { + USHORT HashIdx; + MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; + BOOLEAN Cancelled; +- //USHORT offset; // unused variable +- //UCHAR j; // unused variable ++ //USHORT offset; // unused variable ++ //UCHAR j; // unused variable + + if (wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; +@@ -1792,11 +1676,10 @@ BOOLEAN MacTableDeleteEntry( + //pEntry = pAd->MacTab.Hash[HashIdx]; + pEntry = &pAd->MacTab.Content[wcid]; + +- if (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsApCli || pEntry->ValidAsWDS || pEntry->ValidAsMesh +- )) +- { +- if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) +- { ++ if (pEntry ++ && (pEntry->ValidAsCLI || pEntry->ValidAsApCli || pEntry->ValidAsWDS ++ || pEntry->ValidAsMesh)) { ++ if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) { + + // Delete this entry from ASIC on-chip WCID Table + RTMP_STA_ENTRY_MAC_RESET(pAd, wcid); +@@ -1809,17 +1692,14 @@ BOOLEAN MacTableDeleteEntry( + ASSERT(pProbeEntry); + + // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pAd->MacTab.Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; ++ do { ++ if (pProbeEntry == pEntry) { ++ if (pPrevEntry == NULL) { ++ pAd->MacTab.Hash[HashIdx] = ++ pEntry->pNext; ++ } else { ++ pPrevEntry->pNext = ++ pEntry->pNext; + } + break; + } +@@ -1833,38 +1713,39 @@ BOOLEAN MacTableDeleteEntry( + + RTMP_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); + ++ if (pEntry->EnqueueEapolStartTimerRunning != ++ EAPOL_START_DISABLE) { ++ RTMPCancelTimer(&pEntry-> ++ EnqueueStartForPSKTimer, ++ &Cancelled); ++ pEntry->EnqueueEapolStartTimerRunning = ++ EAPOL_START_DISABLE; ++ } + +- if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) +- { +- RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled); +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; +- } +- +- +- NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); +- pAd->MacTab.Size --; +- DBGPRINT(RT_DEBUG_TRACE, ("MacTableDeleteEntry1 - Total= %d\n", pAd->MacTab.Size)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_OFF, ("\n%s: Impossible Wcid = %d !!!!!\n", __func__, wcid)); ++ NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); ++ pAd->MacTab.Size--; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MacTableDeleteEntry1 - Total= %d\n", ++ pAd->MacTab.Size)); ++ } else { ++ DBGPRINT(RT_DEBUG_OFF, ++ ("\n%s: Impossible Wcid = %d !!!!!\n", ++ __func__, wcid)); + } + } + + NdisReleaseSpinLock(&pAd->MacTabLock); + + //Reset operating mode when no Sta. +- if (pAd->MacTab.Size == 0) +- { ++ if (pAd->MacTab.Size == 0) { + pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0; + //AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/); +- RTMP_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++ RTMP_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet + } + + return TRUE; + } + +- + /* + ========================================================================== + Description: +@@ -1872,23 +1753,18 @@ BOOLEAN MacTableDeleteEntry( + the power-saving queues are freed here. + ========================================================================== + */ +-VOID MacTableReset( +- IN PRTMP_ADAPTER pAd) ++VOID MacTableReset(IN PRTMP_ADAPTER pAd) + { +- int i; ++ int i; + + DBGPRINT(RT_DEBUG_TRACE, ("MacTableReset\n")); + //NdisAcquireSpinLock(&pAd->MacTabLock); + +- +- for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) +- { +- ++ if (pAd->MacTab.Content[i].ValidAsCLI == TRUE) { + + // free resources of BA + BASessionTearDownALL(pAd, i); +@@ -1915,22 +1791,19 @@ VOID MacTableReset( + + ========================================================================== + */ +-VOID AssocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, +- IN USHORT ListenIntv) ++VOID AssocParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, ++ IN PUCHAR pAddr, ++ IN USHORT CapabilityInfo, ++ IN ULONG Timeout, IN USHORT ListenIntv) + { + COPY_MAC_ADDR(AssocReq->Addr, pAddr); + // Add mask to support 802.11b mode only +- AssocReq->CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; // not cf-pollable, not cf-poll-request ++ AssocReq->CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; // not cf-pollable, not cf-poll-request + AssocReq->Timeout = Timeout; + AssocReq->ListenIntv = ListenIntv; + } + +- + /* + ========================================================================== + Description: +@@ -1939,17 +1812,14 @@ VOID AssocParmFill( + + ========================================================================== + */ +-VOID DisassocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, +- IN PUCHAR pAddr, +- IN USHORT Reason) ++VOID DisassocParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, ++ IN PUCHAR pAddr, IN USHORT Reason) + { + COPY_MAC_ADDR(DisassocReq->Addr, pAddr); + DisassocReq->Reason = Reason; + } + +- + /* + ======================================================================== + +@@ -1984,22 +1854,21 @@ VOID DisassocParmFill( + ======================================================================== + */ + +-BOOLEAN RTMPCheckDHCPFrame( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- PACKET_INFO PacketInfo; +- ULONG NumberOfBytesRead = 0; +- ULONG CurrentOffset = 0; +- PVOID pVirtualAddress = NULL; +- UINT NdisBufferLength; +- PUCHAR pSrc; +- USHORT Protocol; +- UCHAR ByteOffset36 = 0; +- UCHAR ByteOffset38 = 0; +- BOOLEAN ReadFirstParm = TRUE; +- +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, (PUCHAR *)&pVirtualAddress, &NdisBufferLength); ++ PACKET_INFO PacketInfo; ++ ULONG NumberOfBytesRead = 0; ++ ULONG CurrentOffset = 0; ++ PVOID pVirtualAddress = NULL; ++ UINT NdisBufferLength; ++ PUCHAR pSrc; ++ USHORT Protocol; ++ UCHAR ByteOffset36 = 0; ++ UCHAR ByteOffset38 = 0; ++ BOOLEAN ReadFirstParm = TRUE; ++ ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, (PUCHAR *) & pVirtualAddress, ++ &NdisBufferLength); + + NumberOfBytesRead += NdisBufferLength; + pSrc = (PUCHAR) pVirtualAddress; +@@ -2008,18 +1877,17 @@ BOOLEAN RTMPCheckDHCPFrame( + // + // Check DHCP & BOOTP protocol + // +- while (NumberOfBytesRead <= PacketInfo.TotalPacketLength) +- { +- if ((NumberOfBytesRead >= 35) && (ReadFirstParm == TRUE)) +- { +- CurrentOffset = 35 - (NumberOfBytesRead - NdisBufferLength); ++ while (NumberOfBytesRead <= PacketInfo.TotalPacketLength) { ++ if ((NumberOfBytesRead >= 35) && (ReadFirstParm == TRUE)) { ++ CurrentOffset = ++ 35 - (NumberOfBytesRead - NdisBufferLength); + ByteOffset36 = *(pSrc + CurrentOffset); + ReadFirstParm = FALSE; + } + +- if (NumberOfBytesRead >= 37) +- { +- CurrentOffset = 37 - (NumberOfBytesRead - NdisBufferLength); ++ if (NumberOfBytesRead >= 37) { ++ CurrentOffset = ++ 37 - (NumberOfBytesRead - NdisBufferLength); + ByteOffset38 = *(pSrc + CurrentOffset); + //End of Read + break; +@@ -2028,32 +1896,27 @@ BOOLEAN RTMPCheckDHCPFrame( + } + + // Check for DHCP & BOOTP protocol +- if ((ByteOffset36 != 0x44) || (ByteOffset38 != 0x43)) +- { ++ if ((ByteOffset36 != 0x44) || (ByteOffset38 != 0x43)) { + // + // 2054 (hex 0806) for ARP datagrams + // if this packet is not ARP datagrams, then do nothing + // ARP datagrams will also be duplicate at 1mb broadcast frames + // +- if (Protocol != 0x0806 ) ++ if (Protocol != 0x0806) + return FALSE; +- } ++ } + + return TRUE; + } + +- +-BOOLEAN RTMPCheckEtherType( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- USHORT TypeLen; +- UCHAR Byte0, Byte1; +- PUCHAR pSrcBuf; +- UINT32 pktLen; +- UINT16 srcPort, dstPort; +- BOOLEAN status = TRUE; +- ++ USHORT TypeLen; ++ UCHAR Byte0, Byte1; ++ PUCHAR pSrcBuf; ++ UINT32 pktLen; ++ UINT16 srcPort, dstPort; ++ BOOLEAN status = TRUE; + + pSrcBuf = GET_OS_PKT_DATAPTR(pPacket); + pktLen = GET_OS_PKT_LEN(pPacket); +@@ -2067,30 +1930,26 @@ BOOLEAN RTMPCheckEtherType( + + pSrcBuf += LENGTH_802_3; // Skip the Ethernet Header. + +- if (TypeLen <= 1500) +- { // 802.3, 802.3 LLC ++ if (TypeLen <= 1500) { // 802.3, 802.3 LLC + /* +- DestMAC(6) + SrcMAC(6) + Lenght(2) + +- DSAP(1) + SSAP(1) + Control(1) + +- if the DSAP = 0xAA, SSAP=0xAA, Contorl = 0x03, it has a 5-bytes SNAP header. +- => + SNAP (5, OriginationID(3) + etherType(2)) +- */ +- if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA && pSrcBuf[2] == 0x03) +- { +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 6, &Byte0, &Byte1); ++ DestMAC(6) + SrcMAC(6) + Lenght(2) + ++ DSAP(1) + SSAP(1) + Control(1) + ++ if the DSAP = 0xAA, SSAP=0xAA, Contorl = 0x03, it has a 5-bytes SNAP header. ++ => + SNAP (5, OriginationID(3) + etherType(2)) ++ */ ++ if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA ++ && pSrcBuf[2] == 0x03) { ++ Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 6, ++ &Byte0, &Byte1); + RTMP_SET_PACKET_LLCSNAP(pPacket, 1); +- TypeLen = (USHORT)((Byte0 << 8) + Byte1); +- pSrcBuf += 8; // Skip this LLC/SNAP header +- } +- else +- { ++ TypeLen = (USHORT) ((Byte0 << 8) + Byte1); ++ pSrcBuf += 8; // Skip this LLC/SNAP header ++ } else { + //It just has 3-byte LLC header, maybe a legacy ether type frame. we didn't handle it. + } + } +- + // If it's a VLAN packet, get the real Type/Length field. +- if (TypeLen == 0x8100) +- { ++ if (TypeLen == 0x8100) { + /* 0x8100 means VLAN packets */ + + /* Dest. MAC Address (6-bytes) + +@@ -2103,141 +1962,141 @@ BOOLEAN RTMPCheckEtherType( + Frame Check Sequence (4-bytes) */ + + RTMP_SET_PACKET_VLAN(pPacket, 1); +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER)pSrcBuf, 2, &Byte0, &Byte1); +- TypeLen = (USHORT)((Byte0 << 8) + Byte1); ++ Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 2, &Byte0, ++ &Byte1); ++ TypeLen = (USHORT) ((Byte0 << 8) + Byte1); + +- pSrcBuf += 4; // Skip the VLAN Header. ++ pSrcBuf += 4; // Skip the VLAN Header. + } + +- switch (TypeLen) +- { +- case 0x0800: +- { +- ASSERT((pktLen > 34)); +- if (*(pSrcBuf + 9) == 0x11) +- { // udp packet +- ASSERT((pktLen > 34)); // 14 for ethernet header, 20 for IP header +- +- pSrcBuf += 20; // Skip the IP header +- srcPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf))); +- dstPort = OS_NTOHS(get_unaligned((PUINT16)(pSrcBuf+2))); +- +- if ((srcPort==0x44 && dstPort==0x43) || (srcPort==0x43 && dstPort==0x44)) +- { //It's a BOOTP/DHCP packet +- RTMP_SET_PACKET_DHCP(pPacket, 1); +- } ++ switch (TypeLen) { ++ case 0x0800: ++ { ++ ASSERT((pktLen > 34)); ++ if (*(pSrcBuf + 9) == 0x11) { // udp packet ++ ASSERT((pktLen > 34)); // 14 for ethernet header, 20 for IP header ++ ++ pSrcBuf += 20; // Skip the IP header ++ srcPort = ++ OS_NTOHS(get_unaligned ++ ((PUINT16) (pSrcBuf))); ++ dstPort = ++ OS_NTOHS(get_unaligned ++ ((PUINT16) (pSrcBuf + 2))); ++ ++ if ((srcPort == 0x44 && dstPort == 0x43) || (srcPort == 0x43 && dstPort == 0x44)) { //It's a BOOTP/DHCP packet ++ RTMP_SET_PACKET_DHCP(pPacket, 1); + } + } +- break; +- case 0x0806: +- { +- //ARP Packet. +- RTMP_SET_PACKET_DHCP(pPacket, 1); +- } +- break; +- case 0x888e: +- { +- // EAPOL Packet. +- RTMP_SET_PACKET_EAPOL(pPacket, 1); +- } +- break; +- default: +- status = FALSE; +- break; ++ } ++ break; ++ case 0x0806: ++ { ++ //ARP Packet. ++ RTMP_SET_PACKET_DHCP(pPacket, 1); ++ } ++ break; ++ case 0x888e: ++ { ++ // EAPOL Packet. ++ RTMP_SET_PACKET_EAPOL(pPacket, 1); ++ } ++ break; ++ default: ++ status = FALSE; ++ break; + } + + return status; + + } + ++VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, ++ IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI) ++{ ++ CHAR rssi0 = pRxWI->RSSI0; ++ CHAR rssi1 = pRxWI->RSSI1; ++ CHAR rssi2 = pRxWI->RSSI2; + +- +-VOID Update_Rssi_Sample( +- IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE *pRssi, +- IN PRXWI_STRUC pRxWI) +- { +- CHAR rssi0 = pRxWI->RSSI0; +- CHAR rssi1 = pRxWI->RSSI1; +- CHAR rssi2 = pRxWI->RSSI2; +- +- if (rssi0 != 0) +- { +- pRssi->LastRssi0 = ConvertToRssi(pAd, (CHAR)rssi0, RSSI_0); +- pRssi->AvgRssi0X8 = (pRssi->AvgRssi0X8 - pRssi->AvgRssi0) + pRssi->LastRssi0; +- pRssi->AvgRssi0 = pRssi->AvgRssi0X8 >> 3; ++ if (rssi0 != 0) { ++ pRssi->LastRssi0 = ConvertToRssi(pAd, (CHAR) rssi0, RSSI_0); ++ pRssi->AvgRssi0X8 = ++ (pRssi->AvgRssi0X8 - pRssi->AvgRssi0) + pRssi->LastRssi0; ++ pRssi->AvgRssi0 = pRssi->AvgRssi0X8 >> 3; + } + +- if (rssi1 != 0) +- { +- pRssi->LastRssi1 = ConvertToRssi(pAd, (CHAR)rssi1, RSSI_1); +- pRssi->AvgRssi1X8 = (pRssi->AvgRssi1X8 - pRssi->AvgRssi1) + pRssi->LastRssi1; +- pRssi->AvgRssi1 = pRssi->AvgRssi1X8 >> 3; ++ if (rssi1 != 0) { ++ pRssi->LastRssi1 = ConvertToRssi(pAd, (CHAR) rssi1, RSSI_1); ++ pRssi->AvgRssi1X8 = ++ (pRssi->AvgRssi1X8 - pRssi->AvgRssi1) + pRssi->LastRssi1; ++ pRssi->AvgRssi1 = pRssi->AvgRssi1X8 >> 3; + } + +- if (rssi2 != 0) +- { +- pRssi->LastRssi2 = ConvertToRssi(pAd, (CHAR)rssi2, RSSI_2); +- pRssi->AvgRssi2X8 = (pRssi->AvgRssi2X8 - pRssi->AvgRssi2) + pRssi->LastRssi2; ++ if (rssi2 != 0) { ++ pRssi->LastRssi2 = ConvertToRssi(pAd, (CHAR) rssi2, RSSI_2); ++ pRssi->AvgRssi2X8 = ++ (pRssi->AvgRssi2X8 - pRssi->AvgRssi2) + pRssi->LastRssi2; + pRssi->AvgRssi2 = pRssi->AvgRssi2X8 >> 3; + } + } + +- +- + // Normal legacy Rx packet indication +-VOID Indicate_Legacy_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR Header802_3[LENGTH_802_3]; ++ PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ UCHAR Header802_3[LENGTH_802_3]; + + // 1. get 802.3 Header + // 2. remove LLC +- // a. pointer pRxBlk->pData to payload ++ // a. pointer pRxBlk->pData to payload + // b. modify pRxBlk->DataSize + RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); + +- if (pRxBlk->DataSize > MAX_RX_PKT_LEN) +- { ++ if (pRxBlk->DataSize > MAX_RX_PKT_LEN) { + + // release packet + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + return; + } + +- + STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); + + #ifdef RTMP_MAC_USB +- if (pAd->CommonCfg.bDisableReordering == 0) +- { +- PBA_REC_ENTRY pBAEntry; +- ULONG Now32; +- UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; +- UCHAR TID = pRxBlk->pRxWI->TID; +- USHORT Idx; ++ if (pAd->CommonCfg.bDisableReordering == 0) { ++ PBA_REC_ENTRY pBAEntry; ++ ULONG Now32; ++ UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; ++ UCHAR TID = pRxBlk->pRxWI->TID; ++ USHORT Idx; + + #define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms + +- if (Wcid < MAX_LEN_OF_MAC_TABLE) +- { ++ if (Wcid < MAX_LEN_OF_MAC_TABLE) { + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; +- if (Idx != 0) +- { ++ if (Idx != 0) { + pBAEntry = &pAd->BATable.BARecEntry[Idx]; + // update last rx time + NdisGetSystemUpTime(&Now32); + if ((pBAEntry->list.qlen > 0) && +- RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT))) +- ) +- { +- DBGPRINT(RT_DEBUG_OFF, ("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", +- pRxBlk->Flags, pRxBlk->pRxWI->TID, pRxBlk->RxD.AMPDU)); +- hex_dump("Dump the legacy Packet:", GET_OS_PKT_DATAPTR(pRxBlk->pRxPacket), 64); +- ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32); ++ RTMP_TIME_AFTER((unsigned long)Now32, ++ (unsigned long)(pBAEntry-> ++ LastIndSeqAtTimer ++ + ++ (REORDERING_PACKET_TIMEOUT))) ++ ) { ++ DBGPRINT(RT_DEBUG_OFF, ++ ("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", ++ pRxBlk->Flags, ++ pRxBlk->pRxWI->TID, ++ pRxBlk->RxD.AMPDU)); ++ hex_dump("Dump the legacy Packet:", ++ GET_OS_PKT_DATAPTR(pRxBlk-> ++ pRxPacket), ++ 64); ++ ba_flush_reordering_timeout_mpdus(pAd, ++ pBAEntry, ++ Now32); + } + } + } +@@ -2252,58 +2111,43 @@ VOID Indicate_Legacy_Packet( + ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxPacket, FromWhichBSSID); + } + +- + // Normal, AMPDU or AMSDU +-VOID CmmRxnonRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0)) +- { ++ if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) ++ && (pAd->CommonCfg.bDisableReordering == 0)) { + Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +- { +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) +- { ++ } else { ++ if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) { + // handle A-MSDU + Indicate_AMSDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +- { ++ } else { + Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); + } + } + } + +- +-VOID CmmRxRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- UCHAR Header802_3[LENGTH_802_3]; +- UINT16 Msdu2Size; +- UINT16 Payload1Size, Payload2Size; +- PUCHAR pData2; +- PNDIS_PACKET pPacket2 = NULL; +- ++ UCHAR Header802_3[LENGTH_802_3]; ++ UINT16 Msdu2Size; ++ UINT16 Payload1Size, Payload2Size; ++ PUCHAR pData2; ++ PNDIS_PACKET pPacket2 = NULL; + ++ Msdu2Size = *(pRxBlk->pData) + (*(pRxBlk->pData + 1) << 8); + +- Msdu2Size = *(pRxBlk->pData) + (*(pRxBlk->pData+1) << 8); +- +- if ((Msdu2Size <= 1536) && (Msdu2Size < pRxBlk->DataSize)) +- { ++ if ((Msdu2Size <= 1536) && (Msdu2Size < pRxBlk->DataSize)) { + /* skip two byte MSDU2 len */ + pRxBlk->pData += 2; + pRxBlk->DataSize -= 2; +- } +- else +- { ++ } else { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + +@@ -2313,34 +2157,34 @@ VOID CmmRxRalinkFrameIndicate( + ASSERT(pRxBlk->pRxPacket); + + // Ralink Aggregation frame +- pAd->RalinkCounters.OneSecRxAggregationCount ++; ++ pAd->RalinkCounters.OneSecRxAggregationCount++; + Payload1Size = pRxBlk->DataSize - Msdu2Size; + Payload2Size = Msdu2Size - LENGTH_802_3; + + pData2 = pRxBlk->pData + Payload1Size + LENGTH_802_3; + +- pPacket2 = duplicate_pkt(pAd, (pData2-LENGTH_802_3), LENGTH_802_3, pData2, Payload2Size, FromWhichBSSID); ++ pPacket2 = ++ duplicate_pkt(pAd, (pData2 - LENGTH_802_3), LENGTH_802_3, pData2, ++ Payload2Size, FromWhichBSSID); + +- if (!pPacket2) +- { ++ if (!pPacket2) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } +- + // update payload size of 1st packet + pRxBlk->DataSize = Payload1Size; + wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); + +- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxBlk->pRxPacket, FromWhichBSSID); ++ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxBlk->pRxPacket, ++ FromWhichBSSID); + +- if (pPacket2) +- { ++ if (pPacket2) { + ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket2, FromWhichBSSID); + } + } + +- + #define RESET_FRAGFRAME(_fragFrame) \ + { \ + _fragFrame.RxSize = 0; \ +@@ -2349,81 +2193,76 @@ VOID CmmRxRalinkFrameIndicate( + _fragFrame.Flags = 0; \ + } + +- +-PNDIS_PACKET RTMPDeFragmentDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) ++PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; +- PNDIS_PACKET pRetPacket = NULL; +- UCHAR *pFragBuffer = NULL; +- BOOLEAN bReassDone = FALSE; +- UCHAR HeaderRoom = 0; +- ++ PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ UCHAR *pData = pRxBlk->pData; ++ USHORT DataSize = pRxBlk->DataSize; ++ PNDIS_PACKET pRetPacket = NULL; ++ UCHAR *pFragBuffer = NULL; ++ BOOLEAN bReassDone = FALSE; ++ UCHAR HeaderRoom = 0; + + ASSERT(pHeader); + +- HeaderRoom = pData - (UCHAR *)pHeader; ++ HeaderRoom = pData - (UCHAR *) pHeader; + + // Re-assemble the fragmented packets +- if (pHeader->Frag == 0) // Frag. Number is 0 : First frag or only one pkt ++ if (pHeader->Frag == 0) // Frag. Number is 0 : First frag or only one pkt + { + // the first pkt of fragment, record it. +- if (pHeader->FC.MoreFrag) +- { ++ if (pHeader->FC.MoreFrag) { + ASSERT(pAd->FragFrame.pFragPacket); +- pFragBuffer = GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); +- pAd->FragFrame.RxSize = DataSize + HeaderRoom; +- NdisMoveMemory(pFragBuffer, pHeader, pAd->FragFrame.RxSize); ++ pFragBuffer = ++ GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); ++ pAd->FragFrame.RxSize = DataSize + HeaderRoom; ++ NdisMoveMemory(pFragBuffer, pHeader, ++ pAd->FragFrame.RxSize); + pAd->FragFrame.Sequence = pHeader->Sequence; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Should be 0 ++ pAd->FragFrame.LastFrag = pHeader->Frag; // Should be 0 + ASSERT(pAd->FragFrame.LastFrag == 0); + goto done; // end of processing this frame + } +- } +- else //Middle & End of fragment ++ } else //Middle & End of fragment + { + if ((pHeader->Sequence != pAd->FragFrame.Sequence) || +- (pHeader->Frag != (pAd->FragFrame.LastFrag + 1))) +- { ++ (pHeader->Frag != (pAd->FragFrame.LastFrag + 1))) { + // Fragment is not the same sequence or out of fragment number order + // Reset Fragment control blk + RESET_FRAGFRAME(pAd->FragFrame); +- DBGPRINT(RT_DEBUG_ERROR, ("Fragment is not the same sequence or out of fragment number order.\n")); +- goto done; // give up this frame +- } +- else if ((pAd->FragFrame.RxSize + DataSize) > MAX_FRAME_SIZE) +- { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Fragment is not the same sequence or out of fragment number order.\n")); ++ goto done; // give up this frame ++ } else if ((pAd->FragFrame.RxSize + DataSize) > MAX_FRAME_SIZE) { + // Fragment frame is too large, it exeeds the maximum frame size. + // Reset Fragment control blk + RESET_FRAGFRAME(pAd->FragFrame); +- DBGPRINT(RT_DEBUG_ERROR, ("Fragment frame is too large, it exeeds the maximum frame size.\n")); +- goto done; // give up this frame ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Fragment frame is too large, it exeeds the maximum frame size.\n")); ++ goto done; // give up this frame + } +- +- // ++ // + // Broadcom AP(BCM94704AGR) will send out LLC in fragment's packet, LLC only can accpet at first fragment. + // In this case, we will dropt it. + // +- if (NdisEqualMemory(pData, SNAP_802_1H, sizeof(SNAP_802_1H))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Find another LLC at Middle or End fragment(SN=%d, Frag=%d)\n", pHeader->Sequence, pHeader->Frag)); +- goto done; // give up this frame ++ if (NdisEqualMemory(pData, SNAP_802_1H, sizeof(SNAP_802_1H))) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Find another LLC at Middle or End fragment(SN=%d, Frag=%d)\n", ++ pHeader->Sequence, pHeader->Frag)); ++ goto done; // give up this frame + } + + pFragBuffer = GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); + + // concatenate this fragment into the re-assembly buffer +- NdisMoveMemory((pFragBuffer + pAd->FragFrame.RxSize), pData, DataSize); +- pAd->FragFrame.RxSize += DataSize; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Update fragment number ++ NdisMoveMemory((pFragBuffer + pAd->FragFrame.RxSize), pData, ++ DataSize); ++ pAd->FragFrame.RxSize += DataSize; ++ pAd->FragFrame.LastFrag = pHeader->Frag; // Update fragment number + + // Last fragment +- if (pHeader->FC.MoreFrag == FALSE) +- { ++ if (pHeader->FC.MoreFrag == FALSE) { + bReassDone = TRUE; + } + } +@@ -2434,24 +2273,22 @@ done: + + // return defragmented packet if packet is reassembled completely + // otherwise return NULL +- if (bReassDone) +- { ++ if (bReassDone) { + PNDIS_PACKET pNewFragPacket; + + // allocate a new packet buffer for fragment +- pNewFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); +- if (pNewFragPacket) +- { ++ pNewFragPacket = ++ RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); ++ if (pNewFragPacket) { + // update RxBlk + pRetPacket = pAd->FragFrame.pFragPacket; + pAd->FragFrame.pFragPacket = pNewFragPacket; +- pRxBlk->pHeader = (PHEADER_802_11) GET_OS_PKT_DATAPTR(pRetPacket); +- pRxBlk->pData = (UCHAR *)pRxBlk->pHeader + HeaderRoom; ++ pRxBlk->pHeader = ++ (PHEADER_802_11) GET_OS_PKT_DATAPTR(pRetPacket); ++ pRxBlk->pData = (UCHAR *) pRxBlk->pHeader + HeaderRoom; + pRxBlk->DataSize = pAd->FragFrame.RxSize - HeaderRoom; + pRxBlk->pRxPacket = pRetPacket; +- } +- else +- { ++ } else { + RESET_FRAGFRAME(pAd->FragFrame); + } + } +@@ -2459,23 +2296,20 @@ done: + return pRetPacket; + } + +- +-VOID Indicate_AMSDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- UINT nMSDU; ++ UINT nMSDU; + + update_os_packet_info(pAd, pRxBlk, FromWhichBSSID); + RTMP_SET_PACKET_IF(pRxBlk->pRxPacket, FromWhichBSSID); +- nMSDU = deaggregate_AMSDU_announce(pAd, pRxBlk->pRxPacket, pRxBlk->pData, pRxBlk->DataSize); ++ nMSDU = ++ deaggregate_AMSDU_announce(pAd, pRxBlk->pRxPacket, pRxBlk->pData, ++ pRxBlk->DataSize); + } + +-VOID Indicate_EAPOL_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { + MAC_TABLE_ENTRY *pEntry = NULL; + +@@ -2485,22 +2319,21 @@ VOID Indicate_EAPOL_Packet( + return; + } + +- if (pEntry == NULL) +- { +- DBGPRINT(RT_DEBUG_WARN, ("Indicate_EAPOL_Packet: drop and release the invalid packet.\n")); ++ if (pEntry == NULL) { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("Indicate_EAPOL_Packet: drop and release the invalid packet.\n")); + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + } + + #define BCN_TBTT_OFFSET 64 //defer 64 us +-VOID ReSyncBeaconTime( +- IN PRTMP_ADAPTER pAd) ++VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) + { + +- UINT32 Offset; +- ++ UINT32 Offset; + + Offset = (pAd->TbttTickCount) % (BCN_TBTT_OFFSET); + +@@ -2510,23 +2343,18 @@ VOID ReSyncBeaconTime( + // The updated BeaconInterval Value will affect Beacon Interval after two TBTT + // beacasue the original BeaconInterval had been loaded into next TBTT_TIMER + // +- if (Offset == (BCN_TBTT_OFFSET-2)) +- { ++ if (Offset == (BCN_TBTT_OFFSET - 2)) { + BCN_TIME_CFG_STRUC csr; + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod << 4) - 1 ; // ASIC register in units of 1/16 TU = 64us ++ csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod << 4) - 1; // ASIC register in units of 1/16 TU = 64us + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +- } +- else +- { +- if (Offset == (BCN_TBTT_OFFSET-1)) +- { ++ } else { ++ if (Offset == (BCN_TBTT_OFFSET - 1)) { + BCN_TIME_CFG_STRUC csr; + + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod) << 4; // ASIC register in units of 1/16 TU ++ csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod) << 4; // ASIC register in units of 1/16 TU + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); + } + } + } +- +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index e9739b4..f98f1a8 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -32,20 +32,17 @@ + */ + #include "../rt_config.h" + +- +-USHORT RtmpPCI_WriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) ++USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, OUT USHORT * FreeNumber) + { + +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; + + // + // get Tx Ring Resource +@@ -53,20 +50,21 @@ USHORT RtmpPCI_WriteTxResource( + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ BufBasePaLow = ++ RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + + // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- { ++ if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) { + //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHeaderLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- } +- else +- { ++ hwHeaderLen = ++ pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + ++ pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ } else { + //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); + hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + } +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, ++ TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); + + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +@@ -79,7 +77,7 @@ USHORT RtmpPCI_WriteTxResource( + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -99,20 +97,18 @@ USHORT RtmpPCI_WriteTxResource( + return RetTxIdx; + } + +- +-USHORT RtmpPCI_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) ++USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT * FreeNumber) + { + +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; + + // + // get Tx Ring Resource +@@ -120,13 +116,15 @@ USHORT RtmpPCI_WriteSingleTxResource( + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ BufBasePaLow = ++ RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + + // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer + //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); + hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); ++ NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, ++ TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); + + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +@@ -138,7 +136,7 @@ USHORT RtmpPCI_WriteSingleTxResource( + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -158,21 +156,18 @@ USHORT RtmpPCI_WriteSingleTxResource( + return RetTxIdx; + } + +- +-USHORT RtmpPCI_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber) ++USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR frameNum, OUT USHORT * FreeNumber) + { + BOOLEAN bIsLast; +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHdrLen; +- UINT32 firstDMALen; ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHdrLen; ++ UINT32 firstDMALen; + + bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); + +@@ -182,25 +177,28 @@ USHORT RtmpPCI_WriteMultiTxResource( + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ BufBasePaLow = ++ RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +- if (frameNum == 0) +- { ++ if (frameNum == 0) { + // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer + if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ hwHdrLen = ++ pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + ++ pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; + else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; ++ hwHdrLen = ++ pTxBlk->MpduHeaderLen - ++ LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + ++ LENGTH_ARALINK_HEADER_FIELD; + else + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); + hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + + firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; +- } +- else +- { ++ } else { + firstDMALen = pTxBlk->MpduHeaderLen; + } + +@@ -216,7 +214,7 @@ USHORT RtmpPCI_WriteMultiTxResource( + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDLen0 = firstDMALen; // include padding + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -224,7 +222,6 @@ USHORT RtmpPCI_WriteMultiTxResource( + + RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); + +- + RetTxIdx = TxIdx; + // + // Update Tx index +@@ -238,16 +235,13 @@ USHORT RtmpPCI_WriteMultiTxResource( + + } + +- +-VOID RtmpPCI_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx) ++VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN USHORT totalMPDUSize, IN USHORT FirstTxIdx) + { + +- PTXWI_STRUC pTxWI; +- PRTMP_TX_RING pTxRing; ++ PTXWI_STRUC pTxWI; ++ PRTMP_TX_RING pTxRing; + + // + // get Tx Ring Resource +@@ -258,14 +252,11 @@ VOID RtmpPCI_FinalWriteTxResource( + + } + +- +-VOID RtmpPCIDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT LastTxIdx) ++VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN USHORT LastTxIdx) + { +- PTXD_STRUC pTxD; +- PRTMP_TX_RING pTxRing; ++ PTXD_STRUC pTxD; ++ PRTMP_TX_RING pTxRing; + + // + // get Tx Ring Resource +@@ -279,23 +270,19 @@ VOID RtmpPCIDataLastTxIdx( + + pTxD->LastSec1 = 1; + +- + } + +- +-USHORT RtmpPCI_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber) ++USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR fragNum, OUT USHORT * FreeNumber) + { +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- UINT32 firstDMALen; ++ UCHAR *pDMAHeaderBufVA; ++ USHORT TxIdx, RetTxIdx; ++ PTXD_STRUC pTxD; ++ UINT32 BufBasePaLow; ++ PRTMP_TX_RING pTxRing; ++ USHORT hwHeaderLen; ++ UINT32 firstDMALen; + + // + // Get Tx Ring Resource +@@ -303,7 +290,8 @@ USHORT RtmpPCI_WriteFragTxResource( + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); ++ BufBasePaLow = ++ RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + + // + // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +@@ -314,21 +302,19 @@ USHORT RtmpPCI_WriteFragTxResource( + firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; + NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); + +- + // + // Build Tx Descriptor + // + pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + +- if (fragNum == pTxBlk->TotalFragNum) +- { ++ if (fragNum == pTxBlk->TotalFragNum) { + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; + } + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDLen0 = firstDMALen; // include padding + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -336,7 +322,6 @@ USHORT RtmpPCI_WriteFragTxResource( + + RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); + +- + RetTxIdx = TxIdx; + pTxBlk->Priv += pTxBlk->SrcBufLen; + +@@ -352,22 +337,19 @@ USHORT RtmpPCI_WriteFragTxResource( + + } + +- + /* + Must be run in Interrupt context + This function handle PCI specific TxDesc and cpu index update and kick the packet out. + */ +-int RtmpPCIMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen) ++int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, IN UINT SrcBufLen) + { +- PTXD_STRUC pTxD; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ PTXD_STRUC pTxD; ++ ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; + +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; + + pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket; + pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL; +@@ -377,10 +359,10 @@ int RtmpPCIMgmtKickOut( + pTxD->LastSec1 = 1; + pTxD->DMADONE = 0; + pTxD->SDLen1 = 0; +- pTxD->SDPtr0 = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); ++ pTxD->SDPtr0 = ++ PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); + pTxD->SDLen0 = SrcBufLen; + +- + //================================================================== + /* DBGPRINT_RAW(RT_DEBUG_TRACE, ("MLMEHardTransmit\n")); + for (i = 0; i < (TXWI_SIZE+24); i++) +@@ -401,12 +383,11 @@ int RtmpPCIMgmtKickOut( + // Increase TX_CTX_IDX, but write to register later. + INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); + +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); ++ RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); + + return 0; + } + +- + /* + ======================================================================== + +@@ -424,18 +405,15 @@ int RtmpPCIMgmtKickOut( + + ======================================================================== + */ +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD) ++NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD) + { + PCIPHER_KEY pWpaKey; + INT dBm; + + // Phy errors & CRC errors +- if (/*(pRxD->PhyErr) ||*/ (pRxD->Crc)) +- { ++ if ( /*(pRxD->PhyErr) || */ (pRxD->Crc)) { + // Check RSSI for Noise Hist statistic collection. + dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) +@@ -455,157 +433,166 @@ NDIS_STATUS RTMPCheckRxError( + else if (dBm > -57) + pAd->StaCfg.RPIDensity[7] += 1; + +- return(NDIS_STATUS_FAILURE); ++ return (NDIS_STATUS_FAILURE); + } +- + // Add Rx size to channel load counter, we should ignore error counts + pAd->StaCfg.CLBusyBytes += (pRxD->SDL0 + 14); + + // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics +- if (pHeader != NULL) +- { +- if (pHeader->FC.ToDs) +- { +- return(NDIS_STATUS_FAILURE); ++ if (pHeader != NULL) { ++ if (pHeader->FC.ToDs) { ++ return (NDIS_STATUS_FAILURE); + } + } +- + // Drop not U2M frames, cant's drop here because we will drop beacon in this case + // I am kind of doubting the U2M bit operation + // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); ++ // return(NDIS_STATUS_FAILURE); + + // drop decyption fail frame +- if (pRxD->CipherErr) +- { +- if (pRxD->CipherErr == 2) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV ok but MICErr "));} +- else if (pRxD->CipherErr == 1) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV Err "));} +- else if (pRxD->CipherErr == 3) +- DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: Key not valid ")); +- +- if (((pRxD->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" %d (len=%d, Mcast=%d, MyBss=%d, Wcid=%d, KeyId=%d)\n", +- pRxD->CipherErr, +- pRxD->SDL0, +- pRxD->Mcast | pRxD->Bcast, +- pRxD->MyBss, +- pRxWI->WirelessCliID, +-// CipherName[pRxD->CipherAlg], +- pRxWI->KeyIndex)); ++ if (pRxD->CipherErr) { ++ if (pRxD->CipherErr == 2) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("pRxD ERROR: ICV ok but MICErr ")); ++ } else if (pRxD->CipherErr == 1) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ("pRxD ERROR: ICV Err ")); ++ } else if (pRxD->CipherErr == 3) ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("pRxD ERROR: Key not valid ")); ++ ++ if (((pRxD->CipherErr & 1) == 1) ++ && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ (" %d (len=%d, Mcast=%d, MyBss=%d, Wcid=%d, KeyId=%d)\n", ++ pRxD->CipherErr, pRxD->SDL0, ++ pRxD->Mcast | pRxD->Bcast, pRxD->MyBss, ++ pRxWI->WirelessCliID, ++// CipherName[pRxD->CipherAlg], ++ pRxWI->KeyIndex)); + + // + // MIC Error + // +- if (pRxD->CipherErr == 2) +- { ++ if (pRxD->CipherErr == 2) { + pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; +- if (pAd->StaCfg.WpaSupplicantUP) +- WpaSendMicFailureToWpaSupplicant(pAd, +- (pWpaKey->Type == PAIRWISEKEY) ? TRUE:FALSE); +- else +- RTMPReportMicError(pAd, pWpaKey); +- +- if (((pRxD->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); ++ if (pAd->StaCfg.WpaSupplicantUP) ++ WpaSendMicFailureToWpaSupplicant(pAd, ++ (pWpaKey-> ++ Type == ++ PAIRWISEKEY) ? ++ TRUE : FALSE); ++ else ++ RTMPReportMicError(pAd, pWpaKey); ++ ++ if (((pRxD->CipherErr & 2) == 2) ++ && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, ++ IW_MIC_ERROR_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); ++ ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Rx MIC Value error\n")); + } + + if (pHeader == NULL) +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + /*if ((pRxD->CipherAlg == CIPHER_AES) && +- (pHeader->Sequence == pAd->FragFrame.Sequence)) +- { +- // +- // Acceptable since the First FragFrame no CipherErr problem. +- // +- return(NDIS_STATUS_SUCCESS); +- }*/ ++ (pHeader->Sequence == pAd->FragFrame.Sequence)) ++ { ++ // ++ // Acceptable since the First FragFrame no CipherErr problem. ++ // ++ return(NDIS_STATUS_SUCCESS); ++ } */ + +- return(NDIS_STATUS_FAILURE); ++ return (NDIS_STATUS_FAILURE); + } + +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + } + +- +-BOOLEAN RTMPFreeTXDUponTxDmaDone( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx) ++BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + { + PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- UCHAR FREE = 0; +- TXD_STRUC TxD, *pOriTxD; +- //ULONG IrqFlags; +- BOOLEAN bReschedule = FALSE; +- ++ PTXD_STRUC pTxD; ++ PNDIS_PACKET pPacket; ++ UCHAR FREE = 0; ++ TXD_STRUC TxD, *pOriTxD; ++ //ULONG IrqFlags; ++ BOOLEAN bReschedule = FALSE; + + ASSERT(QueIdx < NUM_OF_TX_RING); + pTxRing = &pAd->TxRing[QueIdx]; + +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, &pTxRing->TxDmaIdx); +- while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) +- { +-// RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, ++ &pTxRing->TxDmaIdx); ++ while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) { ++// RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); + + // static rate also need NICUpdateFifoStaCounters() function. + //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- NICUpdateFifoStaCounters(pAd); ++ NICUpdateFifoStaCounters(pAd); + + /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ + FREE++; +- pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); ++ pTxD = ++ (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); + pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); ++ NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); + pTxD = &TxD; + + pTxD->DMADONE = 0; + +- + { +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket; +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ pPacket = ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket; ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, ++ pTxD->SDLen1, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_SUCCESS); + } + //Always assign pNdisPacket as NULL after clear + pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket = NULL; + +- pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket; ++ pPacket = ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket; + + ASSERT(pPacket == NULL); +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, ++ pTxD->SDLen1, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_SUCCESS); + } + //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = ++ NULL; + } + +- pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0); +- pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++; ++ pAd->RalinkCounters.TransmittedByteCount += ++ (pTxD->SDLen1 + pTxD->SDLen0); ++ pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx]++; + INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE); + /* get tx_tdx_idx again */ +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx); +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, ++ &pTxRing->TxDmaIdx); ++ NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); + + // RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + } + +- +- return bReschedule; ++ return bReschedule; + + } + +- + /* + ======================================================================== + +@@ -622,13 +609,12 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone( + + ======================================================================== + */ +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap) ++BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, ++ IN INT_SOURCE_CSR_STRUC TxRingBitmap) + { +-// UCHAR Count = 0; +- unsigned long IrqFlags; +- BOOLEAN bReschedule = FALSE; ++// UCHAR Count = 0; ++ unsigned long IrqFlags; ++ BOOLEAN bReschedule = FALSE; + + // Make sure Tx ring resource won't be used by other threads + //NdisAcquireSpinLock(&pAd->TxRingLock); +@@ -654,10 +640,9 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( + // Dequeue outgoing frames from TxSwQueue[] and process it + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + +- return bReschedule; ++ return bReschedule; + } + +- + /* + ======================================================================== + +@@ -676,37 +661,37 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( + + ======================================================================== + */ +-VOID RTMPHandleMgmtRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + { +- PTXD_STRUC pTxD; ++ PTXD_STRUC pTxD; + PNDIS_PACKET pPacket; +-// int i; +- UCHAR FREE = 0; ++// int i; ++ UCHAR FREE = 0; + PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; + + NdisAcquireSpinLock(&pAd->MgmtRingLock); + + RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pMgmtRing->TxDmaIdx); +- while (pMgmtRing->TxSwFreeIdx!= pMgmtRing->TxDmaIdx) +- { ++ while (pMgmtRing->TxSwFreeIdx != pMgmtRing->TxDmaIdx) { + FREE++; +- pTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa); ++ pTxD = ++ (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx]. ++ AllocVa); + pTxD->DMADONE = 0; + pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket; + +- +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, ++ PCI_DMA_TODEVICE); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); + } + pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket = NULL; + +- pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket; +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); ++ pPacket = ++ pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket; ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, ++ PCI_DMA_TODEVICE); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); + } + pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket = NULL; +@@ -717,7 +702,6 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt( + + } + +- + /* + ======================================================================== + +@@ -729,17 +713,14 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt( + + ======================================================================== + */ +-VOID RTMPHandleTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) + { + { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { + } + } + } + +- + /* + ======================================================================== + +@@ -751,33 +732,29 @@ VOID RTMPHandleTBTTInterrupt( + + ======================================================================== + */ +-VOID RTMPHandlePreTBTTInterrupt( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) + { + { +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPHandlePreTBTTInterrupt...\n")); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPHandlePreTBTTInterrupt...\n")); + } + } + +- + } + +-VOID RTMPHandleRxCoherentInterrupt( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) + { +- WPDMA_GLO_CFG_STRUC GloCfg; ++ WPDMA_GLO_CFG_STRUC GloCfg; + +- if (pAd == NULL) +- { ++ if (pAd == NULL) { + DBGPRINT(RT_DEBUG_TRACE, ("====> pAd is NULL, return.\n")); + return; + } + + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPHandleRxCoherentInterrupt \n")); + +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG , &GloCfg.word); ++ RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); + + GloCfg.field.EnTXWriteBackDDONE = 0; + GloCfg.field.EnableRxDMA = 0; +@@ -796,39 +773,38 @@ VOID RTMPHandleRxCoherentInterrupt( + DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); + } + +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending) ++PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN * pbReschedule, ++ IN OUT UINT32 * pRxPending) + { +- PRXD_STRUC pRxD; +- PNDIS_PACKET pRxPacket = NULL; +- PNDIS_PACKET pNewPacket; +- PVOID AllocVa; +- NDIS_PHYSICAL_ADDRESS AllocPa; +- BOOLEAN bReschedule = FALSE; +- RTMP_DMACB *pRxCell; ++ PRXD_STRUC pRxD; ++ PNDIS_PACKET pRxPacket = NULL; ++ PNDIS_PACKET pNewPacket; ++ PVOID AllocVa; ++ NDIS_PHYSICAL_ADDRESS AllocPa; ++ BOOLEAN bReschedule = FALSE; ++ RTMP_DMACB *pRxCell; + + RTMP_SEM_LOCK(&pAd->RxRingLock); + +- if (*pRxPending == 0) +- { ++ if (*pRxPending == 0) { + // Get how may packets had been received +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &pAd->RxRing.RxDmaIdx); ++ RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); + +- if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) +- { ++ if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) { + // no more rx packets + bReschedule = FALSE; + goto done; + } +- + // get rx pending count + if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx) +- *pRxPending = pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; ++ *pRxPending = ++ pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; + else +- *pRxPending = pAd->RxRing.RxDmaIdx + RX_RING_SIZE - pAd->RxRing.RxSwReadIdx; ++ *pRxPending = ++ pAd->RxRing.RxDmaIdx + RX_RING_SIZE - ++ pAd->RxRing.RxSwReadIdx; + + } + +@@ -837,36 +813,33 @@ PNDIS_PACKET GetPacketFromRxRing( + // Point to Rx indexed rx ring descriptor + pRxD = (PRXD_STRUC) pRxCell->AllocVa; + +- if (pRxD->DDONE == 0) +- { ++ if (pRxD->DDONE == 0) { + *pRxPending = 0; + // DMAIndx had done but DDONE bit not ready + bReschedule = TRUE; + goto done; + } + +- + // return rx descriptor + NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE); + +- pNewPacket = RTMP_AllocateRxPacketBuffer(pAd, RX_BUFFER_AGGRESIZE, FALSE, &AllocVa, &AllocPa); ++ pNewPacket = ++ RTMP_AllocateRxPacketBuffer(pAd, RX_BUFFER_AGGRESIZE, FALSE, ++ &AllocVa, &AllocPa); + +- if (pNewPacket) +- { ++ if (pNewPacket) { + // unmap the rx buffer + PCI_UNMAP_SINGLE(pAd, pRxCell->DmaBuf.AllocPa, +- pRxCell->DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); ++ pRxCell->DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); + pRxPacket = pRxCell->pNdisPacket; + +- pRxCell->DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; +- pRxCell->pNdisPacket = (PNDIS_PACKET) pNewPacket; +- pRxCell->DmaBuf.AllocVa = AllocVa; +- pRxCell->DmaBuf.AllocPa = AllocPa; ++ pRxCell->DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; ++ pRxCell->pNdisPacket = (PNDIS_PACKET) pNewPacket; ++ pRxCell->DmaBuf.AllocVa = AllocVa; ++ pRxCell->DmaBuf.AllocPa = AllocPa; + /* update SDP0 to new buffer of rx packet */ + pRxD->SDP0 = AllocPa; +- } +- else +- { ++ } else { + //DBGPRINT(RT_DEBUG_TRACE,("No Rx Buffer\n")); + pRxPacket = NULL; + bReschedule = TRUE; +@@ -880,7 +853,9 @@ PNDIS_PACKET GetPacketFromRxRing( + // update rx descriptor and kick rx + INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE); + +- pAd->RxRing.RxCpuIdx = (pAd->RxRing.RxSwReadIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxSwReadIdx-1); ++ pAd->RxRing.RxCpuIdx = ++ (pAd->RxRing.RxSwReadIdx == ++ 0) ? (RX_RING_SIZE - 1) : (pAd->RxRing.RxSwReadIdx - 1); + RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); + + done: +@@ -889,55 +864,46 @@ done: + return pRxPacket; + } + +- +-NDIS_STATUS MlmeHardTransmitTxRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) ++NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) + { +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PTXD_STRUC pTxD; +- PHEADER_802_11 pHeader_802_11; +- BOOLEAN bAckRequired, bInsertTimestamp; +- ULONG SrcBufPA; +- //UCHAR TxBufIdx; +- UCHAR MlmeRate; +- ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- PTXWI_STRUC pFirstTxWI; +- //ULONG i; +- //HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. +- ULONG FreeNum; +- MAC_TABLE_ENTRY *pMacEntry = NULL; +- ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PTXD_STRUC pTxD; ++ PHEADER_802_11 pHeader_802_11; ++ BOOLEAN bAckRequired, bInsertTimestamp; ++ ULONG SrcBufPA; ++ //UCHAR TxBufIdx; ++ UCHAR MlmeRate; ++ ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; ++ PTXWI_STRUC pFirstTxWI; ++ //ULONG i; ++ //HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. ++ ULONG FreeNum; ++ MAC_TABLE_ENTRY *pMacEntry = NULL; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +- +- if (pSrcBufVA == NULL) +- { ++ if (pSrcBufVA == NULL) { + // The buffer shouldn't be NULL + return NDIS_STATUS_FAILURE; + } +- + // Make sure MGMT ring resource won't be used by other threads + //NdisAcquireSpinLock(&pAd->TxRingLock); + + FreeNum = GET_TXRING_FREENO(pAd, QueIdx); + +- if (FreeNum == 0) +- { ++ if (FreeNum == 0) { + //NdisReleaseSpinLock(&pAd->TxRingLock); + return NDIS_STATUS_FAILURE; + } + + SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; + +- pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; ++ pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; + +- if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) +- { ++ if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) { + DBGPRINT(RT_DEBUG_OFF, ("MlmeHardTransmit Error\n")); + //NdisReleaseSpinLock(&pAd->TxRingLock); + return NDIS_STATUS_FAILURE; +@@ -949,26 +915,21 @@ NDIS_STATUS MlmeHardTransmitTxRing( + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + AsicForceWakeup(pAd, TRUE); + } +- pFirstTxWI =(PTXWI_STRUC)pSrcBufVA; ++ pFirstTxWI = (PTXWI_STRUC) pSrcBufVA; + + pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE); +- if (pHeader_802_11->Addr1[0] & 0x01) +- { ++ if (pHeader_802_11->Addr1[0] & 0x01) { + MlmeRate = pAd->CommonCfg.BasicMlmeRate; +- } +- else +- { ++ } else { + MlmeRate = pAd->CommonCfg.MlmeRate; + } + + if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +- (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) +- { ++ (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) { + pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); + } +- + // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band ++ if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band + MlmeRate = RATE_6; + + // +@@ -978,37 +939,33 @@ NDIS_STATUS MlmeHardTransmitTxRing( + // + // + // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +- if (pHeader_802_11->FC.Type != BTYPE_DATA) +- { +- if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) || !(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) +- { +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; +- } +- else +- { +- pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave; ++ // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD ++ if (pHeader_802_11->FC.Type != BTYPE_DATA) { ++ if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) ++ || !(pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) { ++ pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; ++ } else { ++ pHeader_802_11->FC.PwrMgmt = ++ pAd->CommonCfg.bAPSDForcePowerSave; ++ } + } +- } + + bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL ++ if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL + { + bAckRequired = FALSE; +- } +- else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) ++ } else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) + { +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST ++ if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST + { + bAckRequired = FALSE; + pHeader_802_11->Duration = 0; +- } +- else +- { ++ } else { + bAckRequired = TRUE; +- pHeader_802_11->Duration = RTMPCalcDuration(pAd, MlmeRate, 14); +- if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) +- { ++ pHeader_802_11->Duration = ++ RTMPCalcDuration(pAd, MlmeRate, 14); ++ if (pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) { + bInsertTimestamp = TRUE; + } + } +@@ -1019,14 +976,13 @@ NDIS_STATUS MlmeHardTransmitTxRing( + // Before radar detection done, mgmt frame can not be sent but probe req + // Because we need to use probe req to trigger driver to send probe req in passive scan + if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++ && (pAd->CommonCfg.bIEEE80211H == 1) ++ && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); + //NdisReleaseSpinLock(&pAd->TxRingLock); + return (NDIS_STATUS_FAILURE); + } +- + // + // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET + // should always has only one ohysical buffer, and the whole frame size equals +@@ -1036,30 +992,30 @@ NDIS_STATUS MlmeHardTransmitTxRing( + // Initialize TX Descriptor + // For inter-frame gap, the number is for this frame and next frame + // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; ++// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; + + // management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. + // Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. +- if (pMacEntry == NULL) +- { +- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, RESERVED_WCID, (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { ++ if (pMacEntry == NULL) { ++ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, ++ FALSE, bAckRequired, FALSE, 0, RESERVED_WCID, ++ (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, ++ (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ } else { + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, +- bInsertTimestamp, FALSE, bAckRequired, FALSE, +- 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), +- pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS, +- IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); ++ bInsertTimestamp, FALSE, bAckRequired, FALSE, ++ 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), ++ pMacEntry->MaxHTPhyMode.field.MCS, 0, ++ (UCHAR) pMacEntry->MaxHTPhyMode.field.MCS, ++ IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); + } + + pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket; + pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL; +-// pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; +- SrcBufPA = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); +- ++// pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; ++ SrcBufPA = ++ PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); + + RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_EDCA); + pTxD->LastSec0 = 1; +@@ -1069,37 +1025,32 @@ NDIS_STATUS MlmeHardTransmitTxRing( + pTxD->SDPtr0 = SrcBufPA; + pTxD->DMADONE = 0; + +- + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + + // Increase TX_CTX_IDX, but write to register later. + INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); + +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx*0x10, pAd->TxRing[QueIdx].TxCpuIdx); ++ RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx * 0x10, ++ pAd->TxRing[QueIdx].TxCpuIdx); + + // Make sure to release MGMT ring resource +-// NdisReleaseSpinLock(&pAd->TxRingLock); ++// NdisReleaseSpinLock(&pAd->TxRingLock); + + return NDIS_STATUS_SUCCESS; + } + +- +-NDIS_STATUS MlmeDataHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket) ++NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) + { + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- ) +- { ++ ) { + return NDIS_STATUS_FAILURE; + } + +- return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket); ++ return MlmeHardTransmitTxRing(pAd, QueIdx, pPacket); + } + +- + /* + ======================================================================== + +@@ -1127,11 +1078,9 @@ NDIS_STATUS MlmeDataHardTransmit( + + ======================================================================== + */ +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QueueSEL) ++VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, ++ IN PTXD_STRUC pTxD, ++ IN BOOLEAN bWIV, IN UCHAR QueueSEL) + { + // + // Always use Long preamble before verifiation short preamble functionality works well. +@@ -1139,8 +1088,8 @@ VOID RTMPWriteTxDescriptor( + // + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + +- pTxD->WIV = (bWIV) ? 1: 0; +- pTxD->QSEL= (QueueSEL); ++ pTxD->WIV = (bWIV) ? 1 : 0; ++ pTxD->QSEL = (QueueSEL); + //RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan + //pTxD->QSEL= FIFO_EDCA; + pTxD->DMADONE = 0; +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +index bd6f9d8..fbcb3a3 100644 +--- a/drivers/staging/rt2860/common/cmm_data_usb.c ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -33,52 +33,44 @@ + + #ifdef RTMP_MAC_USB + +- + #include "../rt_config.h" + +- + /* + We can do copy the frame into pTxContext when match following conditions. + => + => + => + */ +-static inline NDIS_STATUS RtmpUSBCanDoWrite( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN HT_TX_CONTEXT *pHTTXContext) ++static inline NDIS_STATUS RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN HT_TX_CONTEXT * pHTTXContext) + { +- NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES; +- +- if (((pHTTXContext->CurWritePosition) < pHTTXContext->NextBulkOutPosition) && (pHTTXContext->CurWritePosition + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c1!\n")); +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); +- } +- else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < LOCAL_TXBUF_SIZE)) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c2!\n")); +- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); +- } +- else if (pHTTXContext->bCurWriting == TRUE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c3!\n")); +- } +- else +- { ++ NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES; ++ ++ if (((pHTTXContext->CurWritePosition) < ++ pHTTXContext->NextBulkOutPosition) ++ && (pHTTXContext->CurWritePosition + LOCAL_TXBUF_SIZE) > ++ pHTTXContext->NextBulkOutPosition) { ++ DBGPRINT(RT_DEBUG_ERROR, ("RtmpUSBCanDoWrite c1!\n")); ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); ++ } else if ((pHTTXContext->CurWritePosition == 8) ++ && (pHTTXContext->NextBulkOutPosition < LOCAL_TXBUF_SIZE)) { ++ DBGPRINT(RT_DEBUG_ERROR, ("RtmpUSBCanDoWrite c2!\n")); ++ RTUSB_SET_BULK_FLAG(pAd, ++ (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); ++ } else if (pHTTXContext->bCurWriting == TRUE) { ++ DBGPRINT(RT_DEBUG_ERROR, ("RtmpUSBCanDoWrite c3!\n")); ++ } else { + canWrite = NDIS_STATUS_SUCCESS; + } + +- + return canWrite; + } + +- +-USHORT RtmpUSB_WriteSubTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) ++USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, OUT USHORT * FreeNumber) + { + + // Dummy function. Should be removed in the future. +@@ -86,83 +78,80 @@ USHORT RtmpUSB_WriteSubTxResource( + + } + +-USHORT RtmpUSB_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber) ++USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR fragNum, OUT USHORT * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; +- unsigned long IrqFlags; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; +- BOOLEAN TxQLastRound = FALSE; ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket = NULL; ++ UCHAR QueIdx; ++ NDIS_STATUS Status; ++ unsigned long IrqFlags; ++ UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ BOOLEAN TxQLastRound = FALSE; + + // + // get Tx Ring Resource & Dma Buffer address + // + QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; ++ pHTTXContext = &pAd->TxContext[QueIdx]; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- pHTTXContext = &pAd->TxContext[QueIdx]; ++ pHTTXContext = &pAd->TxContext[QueIdx]; + fillOffset = pHTTXContext->CurWritePosition; + +- if(fragNum == 0) +- { ++ if (fragNum == 0) { + // Check if we have enough space for this bulk-out batch. + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if (Status == NDIS_STATUS_SUCCESS) +- { ++ if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + + // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { ++ if ((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition)) { + pHTTXContext->ENextBulkOutPosition += 8; + pHTTXContext->CurWritePosition += 8; + fillOffset += 8; + } + pTxBlk->Priv = 0; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return(Status); ++ pHTTXContext->CurWriteRealPos = ++ pHTTXContext->CurWritePosition; ++ } else { ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], ++ IrqFlags); ++ ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, ++ NDIS_STATUS_FAILURE); ++ return (Status); + } +- } +- else +- { ++ } else { + // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. +- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); +- if (Status == NDIS_STATUS_SUCCESS) +- { ++ Status = ++ ((pHTTXContext->bCurWriting == ++ TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); ++ if (Status == NDIS_STATUS_SUCCESS) { + fillOffset += pTxBlk->Priv; +- } +- else +- { +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); ++ } else { ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], ++ IrqFlags); + +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); +- return(Status); ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, ++ NDIS_STATUS_FAILURE); ++ return (Status); + } + } + +- NdisZeroMemory((PUCHAR)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ NdisZeroMemory((PUCHAR) (&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); ++ pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); ++ pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ pWirelessPacket = ++ &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; + + // copy TXWI + WLAN Header + LLC into DMA Header Buffer + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +@@ -177,23 +166,22 @@ USHORT RtmpUSB_WriteFragTxResource( + pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen); + + // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, FIFO_EDCA, ++ FALSE /*NextValid */ , FALSE); + +- if (fragNum == pTxBlk->TotalFragNum) +- { ++ if (fragNum == pTxBlk->TotalFragNum) { + pTxInfo->USBDMATxburst = 0; +- if ((pHTTXContext->CurWritePosition + pTxBlk->Priv + 3906)> MAX_TXBULK_LIMIT) +- { ++ if ((pHTTXContext->CurWritePosition + pTxBlk->Priv + 3906) > ++ MAX_TXBULK_LIMIT) { + pTxInfo->SwUseLastRound = 1; + TxQLastRound = TRUE; + } +- } +- else +- { ++ } else { + pTxInfo->USBDMATxburst = 1; + } + +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, ++ TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + +@@ -201,12 +189,11 @@ USHORT RtmpUSB_WriteFragTxResource( + + NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); + +- // Zero the last padding. ++ // Zero the last padding. + pWirelessPacket += pTxBlk->SrcBufLen; + NdisZeroMemory(pWirelessPacket, padding + 8); + +- if (fragNum == pTxBlk->TotalFragNum) +- { ++ if (fragNum == pTxBlk->TotalFragNum) { + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + + // Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame. +@@ -215,9 +202,8 @@ USHORT RtmpUSB_WriteFragTxResource( + pHTTXContext->CurWritePosition = 8; + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- + // Finally, set bCurWriting as FALSE +- pHTTXContext->bCurWriting = FALSE; ++ pHTTXContext->bCurWriting = FALSE; + + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +@@ -225,64 +211,59 @@ USHORT RtmpUSB_WriteFragTxResource( + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + } + +- +- return(Status); ++ return (Status); + + } + +- +-USHORT RtmpUSB_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) ++USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket; +- UCHAR QueIdx; +- unsigned long IrqFlags; +- NDIS_STATUS Status; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; +- BOOLEAN bTxQLastRound = FALSE; ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket; ++ UCHAR QueIdx; ++ unsigned long IrqFlags; ++ NDIS_STATUS Status; ++ UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ BOOLEAN bTxQLastRound = FALSE; + + // For USB, didn't need PCI_MAP_SINGLE() + //SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE); + +- + // + // get Tx Ring Resource & Dma Buffer address + // + QueIdx = pTxBlk->QueIdx; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- pHTTXContext = &pAd->TxContext[QueIdx]; ++ pHTTXContext = &pAd->TxContext[QueIdx]; + fillOffset = pHTTXContext->CurWritePosition; + +- +- + // Check ring full. + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if(Status == NDIS_STATUS_SUCCESS) +- { ++ if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); ++ pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + + // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { ++ if ((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition)) { + pHTTXContext->ENextBulkOutPosition += 8; + pHTTXContext->CurWritePosition += 8; + fillOffset += 8; + } + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ pWirelessPacket = ++ &pHTTXContext->TransferBuffer->field. ++ WirelessPacket[fillOffset]; + + // copy TXWI + WLAN Header + LLC into DMA Header Buffer + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +@@ -297,30 +278,34 @@ USHORT RtmpUSB_WriteSingleTxResource( + pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen); + + // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, ++ FIFO_EDCA, FALSE /*NextValid */ , FALSE); + +- if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > MAX_TXBULK_LIMIT) +- { ++ if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > ++ MAX_TXBULK_LIMIT) { + pTxInfo->SwUseLastRound = 1; + bTxQLastRound = TRUE; + } +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, ++ TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + + // We unlock it here to prevent the first 8 bytes maybe over-writed issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. ++ // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. ++ // 2. An interrupt break our routine and handle bulk-out complete. ++ // 3. In the bulk-out compllete, it need to do another bulk-out, ++ // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, ++ // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. ++ // 4. Interrupt complete. + // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. +- pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); ++ // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. ++ // and the packet will wrong. ++ pHTTXContext->CurWriteRealPos += ++ (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); ++ NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, ++ pTxBlk->SrcBufLen); + pWirelessPacket += pTxBlk->SrcBufLen; + NdisZeroMemory(pWirelessPacket, padding + 8); + +@@ -331,135 +316,144 @@ USHORT RtmpUSB_WriteSingleTxResource( + pHTTXContext->CurWritePosition = 8; + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- pHTTXContext->bCurWriting = FALSE; ++ pHTTXContext->bCurWriting = FALSE; + } + +- + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- + // succeed and release the skb buffer + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + +- return(Status); ++ return (Status); + + } + +- +-USHORT RtmpUSB_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber) ++USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR frameNum, OUT USHORT * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; +- unsigned long IrqFlags; +- //UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ HT_TX_CONTEXT *pHTTXContext; ++ USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ PUCHAR pWirelessPacket = NULL; ++ UCHAR QueIdx; ++ NDIS_STATUS Status; ++ unsigned long IrqFlags; ++ //UINT32 USBDMApktLen = 0, DMAHdrLen, padding; + + // + // get Tx Ring Resource & Dma Buffer address + // + QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; ++ pHTTXContext = &pAd->TxContext[QueIdx]; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- if(frameNum == 0) +- { ++ if (frameNum == 0) { + // Check if we have enough space for this bulk-out batch. + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); +- if (Status == NDIS_STATUS_SUCCESS) +- { ++ if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + +- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]); +- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]); +- ++ pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); ++ pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + + // Reserve space for 8 bytes padding. +- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)) +- { ++ if ((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition)) { + + pHTTXContext->CurWritePosition += 8; + pHTTXContext->ENextBulkOutPosition += 8; + } + fillOffset = pHTTXContext->CurWritePosition; +- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; ++ pHTTXContext->CurWriteRealPos = ++ pHTTXContext->CurWritePosition; + +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ pWirelessPacket = ++ &pHTTXContext->TransferBuffer->field. ++ WirelessPacket[fillOffset]; + + // + // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer + // + if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; ++ hwHdrLen = ++ pTxBlk->MpduHeaderLen - ++ LENGTH_AMSDU_SUBFRAMEHEAD + ++ pTxBlk->HdrPadLen + ++ LENGTH_AMSDU_SUBFRAMEHEAD; + else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; +- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; ++ hwHdrLen = ++ pTxBlk->MpduHeaderLen - ++ LENGTH_ARALINK_HEADER_FIELD + ++ pTxBlk->HdrPadLen + ++ LENGTH_ARALINK_HEADER_FIELD; + else + //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; ++ hwHdrLen = ++ pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + + // Update the pTxBlk->Priv. + pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; + +- // pTxInfo->USBDMApktLen now just a temp value and will to correct latter. +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(pTxBlk->Priv), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE); ++ // pTxInfo->USBDMApktLen now just a temp value and will to correct latter. ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (pTxBlk->Priv), ++ FALSE, FIFO_EDCA, FALSE /*NextValid */ , ++ FALSE); + + // Copy it. +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->Priv); ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, ++ pTxBlk->Priv); + pHTTXContext->CurWriteRealPos += pTxBlk->Priv; + pWirelessPacket += pTxBlk->Priv; + } +- } +- else +- { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. +- +- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- fillOffset = (pHTTXContext->CurWritePosition + pTxBlk->Priv); +- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; ++ } else { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. ++ ++ Status = ++ ((pHTTXContext->bCurWriting == ++ TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); ++ if (Status == NDIS_STATUS_SUCCESS) { ++ fillOffset = ++ (pHTTXContext->CurWritePosition + pTxBlk->Priv); ++ pWirelessPacket = ++ &pHTTXContext->TransferBuffer->field. ++ WirelessPacket[fillOffset]; + + //hwHdrLen = pTxBlk->MpduHeaderLen; +- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->MpduHeaderLen); ++ NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, ++ pTxBlk->MpduHeaderLen); + pWirelessPacket += (pTxBlk->MpduHeaderLen); + pTxBlk->Priv += pTxBlk->MpduHeaderLen; +- } +- else +- { // It should not happened now unless we are going to shutdown. +- DBGPRINT(RT_DEBUG_ERROR, ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n")); ++ } else { // It should not happened now unless we are going to shutdown. ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n")); + Status = NDIS_STATUS_FAILURE; + } + } + +- + // We unlock it here to prevent the first 8 bytes maybe over-write issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. ++ // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. ++ // 2. An interrupt break our routine and handle bulk-out complete. ++ // 3. In the bulk-out compllete, it need to do another bulk-out, ++ // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, ++ // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. ++ // 4. Interrupt complete. + // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. ++ // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. ++ // and the packet will wrong. + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_ERROR,("WriteMultiTxResource: CWPos = %ld, NBOutPos = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition)); ++ if (Status != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("WriteMultiTxResource: CWPos = %ld, NBOutPos = %ld.\n", ++ pHTTXContext->CurWritePosition, ++ pHTTXContext->NextBulkOutPosition)); + goto done; + } +- + // Copy the frame content into DMA buffer and update the pTxBlk->Priv + NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); + pWirelessPacket += pTxBlk->SrcBufLen; +@@ -469,45 +463,46 @@ done: + // Release the skb buffer here + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + +- return(Status); ++ return (Status); + + } + +- +-VOID RtmpUSB_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT TxIdx) ++VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN USHORT totalMPDUSize, IN USHORT TxIdx) + { +- UCHAR QueIdx; +- HT_TX_CONTEXT *pHTTXContext; +- UINT32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; +- UINT32 USBDMApktLen, padding; +- unsigned long IrqFlags; +- PUCHAR pWirelessPacket; ++ UCHAR QueIdx; ++ HT_TX_CONTEXT *pHTTXContext; ++ UINT32 fillOffset; ++ TXINFO_STRUC *pTxInfo; ++ TXWI_STRUC *pTxWI; ++ UINT32 USBDMApktLen, padding; ++ unsigned long IrqFlags; ++ PUCHAR pWirelessPacket; + + QueIdx = pTxBlk->QueIdx; +- pHTTXContext = &pAd->TxContext[QueIdx]; ++ pHTTXContext = &pAd->TxContext[QueIdx]; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- if (pHTTXContext->bCurWriting == TRUE) +- { ++ if (pHTTXContext->bCurWriting == TRUE) { + fillOffset = pHTTXContext->CurWritePosition; +- if (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition)) +- && (pHTTXContext->bCopySavePad == TRUE)) +- pWirelessPacket = (PUCHAR)(&pHTTXContext->SavedPad[0]); ++ if (((pHTTXContext->ENextBulkOutPosition == ++ pHTTXContext->CurWritePosition) ++ || ((pHTTXContext->ENextBulkOutPosition - 8) == ++ pHTTXContext->CurWritePosition)) ++ && (pHTTXContext->bCopySavePad == TRUE)) ++ pWirelessPacket = (PUCHAR) (&pHTTXContext->SavedPad[0]); + else +- pWirelessPacket = (PUCHAR)(&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]); ++ pWirelessPacket = ++ (PUCHAR) (&pHTTXContext->TransferBuffer->field. ++ WirelessPacket[fillOffset]); + + // + // Update TxInfo->USBDMApktLen , +- // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding ++ // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding + // +- pTxInfo = (PTXINFO_STRUC)(pWirelessPacket); ++ pTxInfo = (PTXINFO_STRUC) (pWirelessPacket); + + // Calculate the bulk-out padding + USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE; +@@ -518,51 +513,46 @@ VOID RtmpUSB_FinalWriteTxResource( + + // + // Update TXWI->MPDUtotalByteCount , +- // the length = 802.11 header + payload_of_all_batch_frames +- pTxWI= (PTXWI_STRUC)(pWirelessPacket + TXINFO_SIZE); ++ // the length = 802.11 header + payload_of_all_batch_frames ++ pTxWI = (PTXWI_STRUC) (pWirelessPacket + TXINFO_SIZE); + pTxWI->MPDUtotalByteCount = totalMPDUSize; + + // + // Update the pHTTXContext->CurWritePosition + // + pHTTXContext->CurWritePosition += (TXINFO_SIZE + USBDMApktLen); +- if ((pHTTXContext->CurWritePosition + 3906)> MAX_TXBULK_LIMIT) +- { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. ++ if ((pHTTXContext->CurWritePosition + 3906) > MAX_TXBULK_LIMIT) { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. + pHTTXContext->CurWritePosition = 8; + pTxInfo->SwUseLastRound = 1; + } + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- + // +- // Zero the last padding. ++ // Zero the last padding. + // +- pWirelessPacket = (&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset + pTxBlk->Priv]); ++ pWirelessPacket = ++ (&pHTTXContext->TransferBuffer->field. ++ WirelessPacket[fillOffset + pTxBlk->Priv]); + NdisZeroMemory(pWirelessPacket, padding + 8); + + // Finally, set bCurWriting as FALSE + pHTTXContext->bCurWriting = FALSE; + +- } +- else +- { // It should not happened now unless we are going to shutdown. +- DBGPRINT(RT_DEBUG_ERROR, ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n")); ++ } else { // It should not happened now unless we are going to shutdown. ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n")); + } + + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + + } + +- +-VOID RtmpUSBDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT TxIdx) ++VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN USHORT TxIdx) + { + // DO nothing for USB. + } + +- + /* + When can do bulk-out: + 1. TxSwFreeIdx < TX_RING_SIZE; +@@ -571,45 +561,41 @@ VOID RtmpUSBDataLastTxIdx( + Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out. + + */ +-VOID RtmpUSBDataKickOut( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx) ++VOID RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR QueIdx) + { + RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); + RTUSBKickBulkOut(pAd); + + } + +- + /* + Must be run in Interrupt context + This function handle RT2870 specific TxDesc and cpu index update and kick the packet out. + */ +-int RtmpUSBMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen) ++int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, IN UINT SrcBufLen) + { +- PTXINFO_STRUC pTxInfo; +- ULONG BulkOutSize; +- UCHAR padLen; +- PUCHAR pDest; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; +- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[SwIdx].AllocVa; +- unsigned long IrqFlags; ++ PTXINFO_STRUC pTxInfo; ++ ULONG BulkOutSize; ++ UCHAR padLen; ++ PUCHAR pDest; ++ ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ PTX_CONTEXT pMLMEContext = ++ (PTX_CONTEXT) pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ unsigned long IrqFlags; + +- +- pTxInfo = (PTXINFO_STRUC)(pSrcBufVA); ++ pTxInfo = (PTXINFO_STRUC) (pSrcBufVA); + + // Build our URB for USBD + BulkOutSize = SrcBufLen; + BulkOutSize = (BulkOutSize + 3) & (~3); +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(BulkOutSize - TXINFO_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (BulkOutSize - TXINFO_SIZE), ++ TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + +- BulkOutSize += 4; // Always add 4 extra bytes at every packet. ++ BulkOutSize += 4; // Always add 4 extra bytes at every packet. + + // If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again. + if ((BulkOutSize % pAd->BulkOutMaxPacketSize) == 0) +@@ -619,21 +605,21 @@ int RtmpUSBMgmtKickOut( + ASSERT((padLen <= RTMP_PKT_TAIL_PADDING)); + + // Now memzero all extra padding bytes. +- pDest = (PUCHAR)(pSrcBufVA + SrcBufLen); ++ pDest = (PUCHAR) (pSrcBufVA + SrcBufLen); + skb_put(GET_OS_PKT_TYPE(pPacket), padLen); + NdisZeroMemory(pDest, padLen); + + RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); + + pAd->MgmtRing.Cell[pAd->MgmtRing.TxCpuIdx].pNdisPacket = pPacket; +- pMLMEContext->TransferBuffer = (PTX_BUFFER)(GET_OS_PKT_DATAPTR(pPacket)); ++ pMLMEContext->TransferBuffer = ++ (PTX_BUFFER) (GET_OS_PKT_DATAPTR(pPacket)); + + // Length in TxInfo should be 8 less than bulkout size. + pMLMEContext->BulkOutSize = BulkOutSize; + pMLMEContext->InUse = TRUE; + pMLMEContext->bWaitingBulkOut = TRUE; + +- + //for debug + //hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize)); + +@@ -641,7 +627,7 @@ int RtmpUSBMgmtKickOut( + //pAd->RalinkCounters.OneSecTxDoneCount++; + + //if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE) +- // needKickOut = TRUE; ++ // needKickOut = TRUE; + + // Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX + pAd->MgmtRing.TxSwFreeIdx--; +@@ -656,40 +642,46 @@ int RtmpUSBMgmtKickOut( + return 0; + } + +- +-VOID RtmpUSBNullFrameKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN UCHAR *pNullFrame, +- IN UINT32 frameLen) ++VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR * pNullFrame, IN UINT32 frameLen) + { +- if (pAd->NullContext.InUse == FALSE) +- { +- PTX_CONTEXT pNullContext; +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; +- PUCHAR pWirelessPkt; ++ if (pAd->NullContext.InUse == FALSE) { ++ PTX_CONTEXT pNullContext; ++ PTXINFO_STRUC pTxInfo; ++ PTXWI_STRUC pTxWI; ++ PUCHAR pWirelessPkt; + + pNullContext = &(pAd->NullContext); + + // Set the in use bit + pNullContext->InUse = TRUE; +- pWirelessPkt = (PUCHAR)&pNullContext->TransferBuffer->field.WirelessPacket[0]; ++ pWirelessPkt = ++ (PUCHAR) & pNullContext->TransferBuffer->field. ++ WirelessPacket[0]; + + RTMPZeroMemory(&pWirelessPkt[0], 100); +- pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[0]; +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ pTxInfo = (PTXINFO_STRUC) & pWirelessPkt[0]; ++ RTMPWriteTxInfo(pAd, pTxInfo, ++ (USHORT) (sizeof(HEADER_802_11) + TXWI_SIZE), ++ TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxInfo->QSEL = FIFO_EDCA; +- pTxWI = (PTXWI_STRUC)&pWirelessPkt[TXINFO_SIZE]; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), +- 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ pTxWI = (PTXWI_STRUC) & pWirelessPkt[TXINFO_SIZE]; ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, ++ FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), 0, ++ 0, (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); + +- RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); +- pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; ++ RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE + TXINFO_SIZE], ++ &pAd->NullFrame, sizeof(HEADER_802_11)); ++ pAd->NullContext.BulkOutSize = ++ TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + + // Fill out frame length information for global Bulk out arbitor + //pNullContext->BulkOutSize = TransferBufferLength; +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[pAd->CommonCfg.TxRate])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - send NULL Frame @%d Mbps...\n", ++ RateIdToMbps[pAd->CommonCfg.TxRate])); + RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); + + // Kick bulk out +@@ -698,7 +690,6 @@ VOID RtmpUSBNullFrameKickOut( + + } + +- + /* + ======================================================================== + Routine Description: +@@ -716,79 +707,83 @@ Return Value: + Note: + ======================================================================== + */ +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending) ++PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN * pbReschedule, ++ IN OUT UINT32 * pRxPending) + { +- PRX_CONTEXT pRxContext; +- PNDIS_PACKET pSkb; +- PUCHAR pData; +- ULONG ThisFrameLen; +- ULONG RxBufferLength; +- PRXWI_STRUC pRxWI; ++ PRX_CONTEXT pRxContext; ++ PNDIS_PACKET pSkb; ++ PUCHAR pData; ++ ULONG ThisFrameLen; ++ ULONG RxBufferLength; ++ PRXWI_STRUC pRxWI; + + pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex]; + if ((pRxContext->Readable == FALSE) || (pRxContext->InUse == TRUE)) + return NULL; + + RxBufferLength = pRxContext->BulkInOffset - pAd->ReadPosition; +- if (RxBufferLength < (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + sizeof(RXINFO_STRUC))) +- { ++ if (RxBufferLength < ++ (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + ++ sizeof(RXINFO_STRUC))) { + goto label_null; + } + +- pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */ ++ pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */ + // The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding) +- ThisFrameLen = *pData + (*(pData+1)<<8); +- if (ThisFrameLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("BIRIdx(%d): RXDMALen is zero.[%ld], BulkInBufLen = %ld)\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); ++ ThisFrameLen = *pData + (*(pData + 1) << 8); ++ if (ThisFrameLen == 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BIRIdx(%d): RXDMALen is zero.[%ld], BulkInBufLen = %ld)\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, ++ pRxContext->BulkInOffset)); + goto label_null; + } +- if ((ThisFrameLen&0x3) != 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("BIRIdx(%d): RXDMALen not multiple of 4.[%ld], BulkInBufLen = %ld)\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset)); ++ if ((ThisFrameLen & 0x3) != 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("BIRIdx(%d): RXDMALen not multiple of 4.[%ld], BulkInBufLen = %ld)\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, ++ pRxContext->BulkInOffset)); + goto label_null; + } + +- if ((ThisFrameLen + 8)> RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) ++ if ((ThisFrameLen + 8) > RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) + { +- DBGPRINT(RT_DEBUG_TRACE,("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", +- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset, RxBufferLength, pAd->ReadPosition)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", ++ pAd->NextRxBulkInReadIndex, ThisFrameLen, ++ pRxContext->BulkInOffset, RxBufferLength, ++ pAd->ReadPosition)); + + // error frame. finish this loop + goto label_null; + } +- + // skip USB frame length field + pData += RT2870_RXDMALEN_FIELD_SIZE; +- pRxWI = (PRXWI_STRUC)pData; +- if (pRxWI->MPDUtotalByteCount > ThisFrameLen) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n", +- __FUNCTION__, pRxWI->MPDUtotalByteCount, ThisFrameLen)); ++ pRxWI = (PRXWI_STRUC) pData; ++ if (pRxWI->MPDUtotalByteCount > ThisFrameLen) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n", ++ __FUNCTION__, pRxWI->MPDUtotalByteCount, ++ ThisFrameLen)); + goto label_null; + } +- + // allocate a rx packet + pSkb = dev_alloc_skb(ThisFrameLen); +- if (pSkb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s():Cannot Allocate sk buffer for this Bulk-In buffer!\n", __FUNCTION__)); ++ if (pSkb == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s():Cannot Allocate sk buffer for this Bulk-In buffer!\n", ++ __FUNCTION__)); + goto label_null; + } +- + // copy the rx packet + memcpy(skb_put(pSkb, ThisFrameLen), pData, ThisFrameLen); + RTPKT_TO_OSPKT(pSkb)->dev = get_netdev_from_bssid(pAd, BSS0); + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS); + + // copy RxD +- *pSaveRxD = *(PRXINFO_STRUC)(pData + ThisFrameLen); ++ *pSaveRxD = *(PRXINFO_STRUC) (pData + ThisFrameLen); + + // update next packet read position. + pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) +@@ -800,7 +795,6 @@ label_null: + return NULL; + } + +- + /* + ======================================================================== + +@@ -818,23 +812,20 @@ label_null: + + ======================================================================== + */ +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxINFO) ++NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxINFO) + { + PCIPHER_KEY pWpaKey; +- INT dBm; ++ INT dBm; + + if (pAd->bPromiscuous == TRUE) +- return(NDIS_STATUS_SUCCESS); +- if(pRxINFO == NULL) +- return(NDIS_STATUS_FAILURE); ++ return (NDIS_STATUS_SUCCESS); ++ if (pRxINFO == NULL) ++ return (NDIS_STATUS_FAILURE); + + // Phy errors & CRC errors +- if (pRxINFO->Crc) +- { ++ if (pRxINFO->Crc) { + // Check RSSI for Noise Hist statistic collection. + dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) +@@ -854,77 +845,73 @@ NDIS_STATUS RTMPCheckRxError( + else if (dBm > -57) + pAd->StaCfg.RPIDensity[7] += 1; + +- return(NDIS_STATUS_FAILURE); ++ return (NDIS_STATUS_FAILURE); + } +- + // Add Rx size to channel load counter, we should ignore error counts +- pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount+ 14); ++ pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount + 14); + + // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics +- if (pHeader->FC.ToDs) +- { ++ if (pHeader->FC.ToDs) { + DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n")); + return NDIS_STATUS_FAILURE; + } +- + // Paul 04-03 for OFDM Rx length issue +- if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE) +- { ++ if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE) { + DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n")); + return NDIS_STATUS_FAILURE; + } +- + // Drop not U2M frames, cant's drop here because we will drop beacon in this case + // I am kind of doubting the U2M bit operation + // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); ++ // return(NDIS_STATUS_FAILURE); + + // drop decyption fail frame +- if (pRxINFO->Decrypted && pRxINFO->CipherErr) +- { +- +- if (((pRxINFO->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- if (((pRxINFO->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (pRxINFO->Decrypted && pRxINFO->CipherErr) { ++ ++ if (((pRxINFO->CipherErr & 1) == 1) ++ && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); ++ ++ if (((pRxINFO->CipherErr & 2) == 2) ++ && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) ++ RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); + // + // MIC Error + // +- if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss) +- { ++ if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss) { + pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; + RTMPReportMicError(pAd, pWpaKey); +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Rx MIC Value error\n")); + } + + if (pRxINFO->Decrypted && +- (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == CIPHER_AES) && +- (pHeader->Sequence == pAd->FragFrame.Sequence)) +- { ++ (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == ++ CIPHER_AES) ++ && (pHeader->Sequence == pAd->FragFrame.Sequence)) { + // + // Acceptable since the First FragFrame no CipherErr problem. + // +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + } + +- return(NDIS_STATUS_FAILURE); ++ return (NDIS_STATUS_FAILURE); + } + +- return(NDIS_STATUS_SUCCESS); ++ return (NDIS_STATUS_SUCCESS); + } + +-VOID RtmpUsbStaAsicForceWakeupTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID RtmpUsbStaAsicForceWakeupTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- if (pAd && pAd->Mlme.AutoWakeupTimerRunning) +- { ++ if (pAd && pAd->Mlme.AutoWakeupTimerRunning) { + AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); + + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +@@ -932,11 +919,9 @@ VOID RtmpUsbStaAsicForceWakeupTimeout( + } + } + +-VOID RT28xxUsbStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) ++VOID RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { +- BOOLEAN Canceled; ++ BOOLEAN Canceled; + + if (pAd->Mlme.AutoWakeupTimerRunning) + RTMPCancelTimer(&pAd->Mlme.AutoWakeupTimer, &Canceled); +@@ -946,12 +931,10 @@ VOID RT28xxUsbStaAsicForceWakeup( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + +-VOID RT28xxUsbStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) + { + +- + // we have decided to SLEEP, so at least do it for a BEACON period. + if (TbttNumToNextWakeUp == 0) + TbttNumToNextWakeUp = 1; +@@ -959,7 +942,7 @@ VOID RT28xxUsbStaAsicSleepThenAutoWakeup( + RTMPSetTimer(&pAd->Mlme.AutoWakeupTimer, AUTO_WAKEUP_TIMEOUT); + pAd->Mlme.AutoWakeupTimerRunning = TRUE; + +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us. ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us. + + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); + +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 3c47b81..be01b07 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -47,153 +47,174 @@ + + ======================================================================== + */ +-VOID RTMPSetDesiredRates( +- IN PRTMP_ADAPTER pAdapter, +- IN LONG Rates) ++VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates) + { +- NDIS_802_11_RATES aryRates; +- +- memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES)); +- switch (pAdapter->CommonCfg.PhyMode) +- { +- case PHY_11A: // A only +- switch (Rates) +- { +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4; +- break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5; +- break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6; +- break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7; +- break; +- case -1: //Auto +- default: +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x24; // 18M +- aryRates[5] = 0x18; // 12M +- aryRates[6] = 0x12; // 9M +- aryRates[7] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- break; +- } +- break; +- case PHY_11BG_MIXED: // B/G Mixed +- case PHY_11B: // B only +- case PHY_11ABG_MIXED: // A/B/G Mixed +- default: +- switch (Rates) +- { +- case 1000000: //1M +- aryRates[0] = 0x02; +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 2000000: //2M +- aryRates[0] = 0x04; +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 5000000: //5.5M +- aryRates[0] = 0x0b; // 5.5M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 11000000: //11M +- aryRates[0] = 0x16; // 11M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_0; +- break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_1; +- break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_2; +- break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_3; +- break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_4; +- break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_5; +- break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_6; +- break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_7; +- break; +- case -1: //Auto +- default: +- if (pAdapter->CommonCfg.PhyMode == PHY_11B) +- { //B Only +- aryRates[0] = 0x16; // 11Mbps +- aryRates[1] = 0x0b; // 5.5Mbps +- aryRates[2] = 0x04; // 2Mbps +- aryRates[3] = 0x02; // 1Mbps +- } +- else +- { //(B/G) Mixed or (A/B/G) Mixed +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x16; // 11Mbps +- aryRates[5] = 0x0b; // 5.5Mbps +- aryRates[6] = 0x04; // 2Mbps +- aryRates[7] = 0x02; // 1Mbps +- } +- pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; +- break; +- } +- break; +- } +- +- NdisZeroMemory(pAdapter->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); +- NdisMoveMemory(pAdapter->CommonCfg.DesireRate, &aryRates, sizeof(NDIS_802_11_RATES)); +- DBGPRINT(RT_DEBUG_TRACE, (" RTMPSetDesiredRates (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n", +- pAdapter->CommonCfg.DesireRate[0],pAdapter->CommonCfg.DesireRate[1], +- pAdapter->CommonCfg.DesireRate[2],pAdapter->CommonCfg.DesireRate[3], +- pAdapter->CommonCfg.DesireRate[4],pAdapter->CommonCfg.DesireRate[5], +- pAdapter->CommonCfg.DesireRate[6],pAdapter->CommonCfg.DesireRate[7] )); +- // Changing DesiredRate may affect the MAX TX rate we used to TX frames out +- MlmeUpdateTxRates(pAdapter, FALSE, 0); ++ NDIS_802_11_RATES aryRates; ++ ++ memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES)); ++ switch (pAdapter->CommonCfg.PhyMode) { ++ case PHY_11A: // A only ++ switch (Rates) { ++ case 6000000: //6M ++ aryRates[0] = 0x0c; // 6M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_0; ++ break; ++ case 9000000: //9M ++ aryRates[0] = 0x12; // 9M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_1; ++ break; ++ case 12000000: //12M ++ aryRates[0] = 0x18; // 12M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_2; ++ break; ++ case 18000000: //18M ++ aryRates[0] = 0x24; // 18M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_3; ++ break; ++ case 24000000: //24M ++ aryRates[0] = 0x30; // 24M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_4; ++ break; ++ case 36000000: //36M ++ aryRates[0] = 0x48; // 36M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_5; ++ break; ++ case 48000000: //48M ++ aryRates[0] = 0x60; // 48M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_6; ++ break; ++ case 54000000: //54M ++ aryRates[0] = 0x6c; // 54M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_7; ++ break; ++ case -1: //Auto ++ default: ++ aryRates[0] = 0x6c; // 54Mbps ++ aryRates[1] = 0x60; // 48Mbps ++ aryRates[2] = 0x48; // 36Mbps ++ aryRates[3] = 0x30; // 24Mbps ++ aryRates[4] = 0x24; // 18M ++ aryRates[5] = 0x18; // 12M ++ aryRates[6] = 0x12; // 9M ++ aryRates[7] = 0x0c; // 6M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_AUTO; ++ break; ++ } ++ break; ++ case PHY_11BG_MIXED: // B/G Mixed ++ case PHY_11B: // B only ++ case PHY_11ABG_MIXED: // A/B/G Mixed ++ default: ++ switch (Rates) { ++ case 1000000: //1M ++ aryRates[0] = 0x02; ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_0; ++ break; ++ case 2000000: //2M ++ aryRates[0] = 0x04; ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_1; ++ break; ++ case 5000000: //5.5M ++ aryRates[0] = 0x0b; // 5.5M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_2; ++ break; ++ case 11000000: //11M ++ aryRates[0] = 0x16; // 11M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_3; ++ break; ++ case 6000000: //6M ++ aryRates[0] = 0x0c; // 6M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_0; ++ break; ++ case 9000000: //9M ++ aryRates[0] = 0x12; // 9M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_1; ++ break; ++ case 12000000: //12M ++ aryRates[0] = 0x18; // 12M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_2; ++ break; ++ case 18000000: //18M ++ aryRates[0] = 0x24; // 18M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_3; ++ break; ++ case 24000000: //24M ++ aryRates[0] = 0x30; // 24M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_4; ++ break; ++ case 36000000: //36M ++ aryRates[0] = 0x48; // 36M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_5; ++ break; ++ case 48000000: //48M ++ aryRates[0] = 0x60; // 48M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_6; ++ break; ++ case 54000000: //54M ++ aryRates[0] = 0x6c; // 54M ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_7; ++ break; ++ case -1: //Auto ++ default: ++ if (pAdapter->CommonCfg.PhyMode == PHY_11B) { //B Only ++ aryRates[0] = 0x16; // 11Mbps ++ aryRates[1] = 0x0b; // 5.5Mbps ++ aryRates[2] = 0x04; // 2Mbps ++ aryRates[3] = 0x02; // 1Mbps ++ } else { //(B/G) Mixed or (A/B/G) Mixed ++ aryRates[0] = 0x6c; // 54Mbps ++ aryRates[1] = 0x60; // 48Mbps ++ aryRates[2] = 0x48; // 36Mbps ++ aryRates[3] = 0x30; // 24Mbps ++ aryRates[4] = 0x16; // 11Mbps ++ aryRates[5] = 0x0b; // 5.5Mbps ++ aryRates[6] = 0x04; // 2Mbps ++ aryRates[7] = 0x02; // 1Mbps ++ } ++ pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = ++ MCS_AUTO; ++ break; ++ } ++ break; ++ } ++ ++ NdisZeroMemory(pAdapter->CommonCfg.DesireRate, ++ MAX_LEN_OF_SUPPORTED_RATES); ++ NdisMoveMemory(pAdapter->CommonCfg.DesireRate, &aryRates, ++ sizeof(NDIS_802_11_RATES)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" RTMPSetDesiredRates (%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x)\n", ++ pAdapter->CommonCfg.DesireRate[0], ++ pAdapter->CommonCfg.DesireRate[1], ++ pAdapter->CommonCfg.DesireRate[2], ++ pAdapter->CommonCfg.DesireRate[3], ++ pAdapter->CommonCfg.DesireRate[4], ++ pAdapter->CommonCfg.DesireRate[5], ++ pAdapter->CommonCfg.DesireRate[6], ++ pAdapter->CommonCfg.DesireRate[7])); ++ // Changing DesiredRate may affect the MAX TX rate we used to TX frames out ++ MlmeUpdateTxRates(pAdapter, FALSE, 0); + } + + /* +@@ -214,13 +235,14 @@ VOID RTMPSetDesiredRates( + + ======================================================================== + */ +-VOID RTMPWPARemoveAllKeys( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + { + +- UCHAR i; ++ UCHAR i; + +- DBGPRINT(RT_DEBUG_TRACE,("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", ++ pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus)); + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after + // Link up. And it will be replaced if user changed it. +@@ -236,9 +258,10 @@ VOID RTMPWPARemoveAllKeys( + AsicRemovePairwiseKeyEntry(pAd, BSS0, BSSID_WCID); + + // set all shared key mode as no-security. +- for (i = 0; i < SHARE_KEY_NUM; i++) +- { +- DBGPRINT(RT_DEBUG_TRACE,("remove %s key #%d\n", CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i)); ++ for (i = 0; i < SHARE_KEY_NUM; i++) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("remove %s key #%d\n", ++ CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i)); + NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(CIPHER_KEY)); + + AsicRemoveSharedKeyEntry(pAd, BSS0, i); +@@ -246,7 +269,6 @@ VOID RTMPWPARemoveAllKeys( + RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + } + +- + /* + ======================================================================== + +@@ -285,120 +307,119 @@ VOID RTMPWPARemoveAllKeys( + + ======================================================================== + */ +-VOID RTMPSetPhyMode( +- IN PRTMP_ADAPTER pAd, +- IN ULONG phymode) ++VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + { + INT i; + // the selected phymode must be supported by the RF IC encoded in E2PROM + + // if no change, do nothing + /* bug fix +- if (pAd->CommonCfg.PhyMode == phymode) +- return; +- */ +- pAd->CommonCfg.PhyMode = (UCHAR)phymode; ++ if (pAd->CommonCfg.PhyMode == phymode) ++ return; ++ */ ++ pAd->CommonCfg.PhyMode = (UCHAR) phymode; + +- DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", ++ pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel)); + + BuildChannelList(pAd); + + // sanity check user setting +- for (i = 0; i < pAd->ChannelListNum; i++) +- { ++ for (i = 0; i < pAd->ChannelListNum; i++) { + if (pAd->CommonCfg.Channel == pAd->ChannelList[i].Channel) + break; + } + +- if (i == pAd->ChannelListNum) +- { ++ if (i == pAd->ChannelListNum) { + pAd->CommonCfg.Channel = FirstChannel(pAd); +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", pAd->CommonCfg.Channel)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", ++ pAd->CommonCfg.Channel)); + } + + NdisZeroMemory(pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES); + NdisZeroMemory(pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES); + NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); + switch (phymode) { +- case PHY_11B: +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRateLen = 4; +- pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use +- break; +- +- case PHY_11G: +- case PHY_11BG_MIXED: +- case PHY_11ABG_MIXED: +- case PHY_11N_2_4G: +- case PHY_11ABGN_MIXED: +- case PHY_11BGN_MIXED: +- case PHY_11GN_MIXED: +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRateLen = 8; +- pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRateLen = 4; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps +- break; +- +- case PHY_11A: +- case PHY_11AN_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11N_5G: +- pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRateLen = 8; +- pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use +- break; +- +- default: +- break; ++ case PHY_11B: ++ pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRateLen = 4; ++ pAd->CommonCfg.ExtRateLen = 0; ++ pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps ++ //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use ++ break; ++ ++ case PHY_11G: ++ case PHY_11BG_MIXED: ++ case PHY_11ABG_MIXED: ++ case PHY_11N_2_4G: ++ case PHY_11ABGN_MIXED: ++ case PHY_11BGN_MIXED: ++ case PHY_11GN_MIXED: ++ pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRateLen = 8; ++ pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.ExtRateLen = 4; ++ pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps ++ break; ++ ++ case PHY_11A: ++ case PHY_11AN_MIXED: ++ case PHY_11AGN_MIXED: ++ case PHY_11N_5G: ++ pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRateLen = 8; ++ pAd->CommonCfg.ExtRateLen = 0; ++ pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps ++ //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use ++ break; ++ ++ default: ++ break; + } + +- + pAd->CommonCfg.BandState = UNKNOWN_BAND; + } + +@@ -414,34 +435,33 @@ VOID RTMPSetPhyMode( + + ======================================================================== + */ +-VOID RTMPSetHT( +- IN PRTMP_ADAPTER pAd, +- IN OID_SET_HT_PHYMODE *pHTPhyMode) ++VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + { +- //ULONG *pmcs; +- UINT32 Value = 0; +- UCHAR BBPValue = 0; +- UCHAR BBP3Value = 0; +- UCHAR RxStream = pAd->CommonCfg.RxStream; ++ //ULONG *pmcs; ++ UINT32 Value = 0; ++ UCHAR BBPValue = 0; ++ UCHAR BBP3Value = 0; ++ UCHAR RxStream = pAd->CommonCfg.RxStream; + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n", +- pHTPhyMode->HtMode, pHTPhyMode->ExtOffset, +- pHTPhyMode->MCS, pHTPhyMode->BW, +- pHTPhyMode->STBC, pHTPhyMode->SHORTGI)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n", ++ pHTPhyMode->HtMode, pHTPhyMode->ExtOffset, pHTPhyMode->MCS, ++ pHTPhyMode->BW, pHTPhyMode->STBC, pHTPhyMode->SHORTGI)); + + // Don't zero supportedHyPhy structure. +- RTMPZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability)); +- RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo)); +- RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, sizeof(pAd->CommonCfg.NewExtChanOffset)); +- RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, sizeof(pAd->CommonCfg.DesiredHtPhy)); +- +- if (pAd->CommonCfg.bRdg) +- { ++ RTMPZeroMemory(&pAd->CommonCfg.HtCapability, ++ sizeof(pAd->CommonCfg.HtCapability)); ++ RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, ++ sizeof(pAd->CommonCfg.AddHTInfo)); ++ RTMPZeroMemory(&pAd->CommonCfg.NewExtChanOffset, ++ sizeof(pAd->CommonCfg.NewExtChanOffset)); ++ RTMPZeroMemory(&pAd->CommonCfg.DesiredHtPhy, ++ sizeof(pAd->CommonCfg.DesiredHtPhy)); ++ ++ if (pAd->CommonCfg.bRdg) { + pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 1; + pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 1; +- } +- else +- { ++ } else { + pAd->CommonCfg.HtCapability.ExtHtCapInfo.PlusHTC = 0; + pAd->CommonCfg.HtCapability.ExtHtCapInfo.RDGSupport = 0; + } +@@ -449,89 +469,92 @@ VOID RTMPSetHT( + pAd->CommonCfg.HtCapability.HtCapParm.MaxRAmpduFactor = 3; + pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor = 3; + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : RxBAWinLimit = %d\n", pAd->CommonCfg.BACapability.field.RxBAWinLimit)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetHT : RxBAWinLimit = %d\n", ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit)); + + // Mimo power save, A-MSDU size, +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize = (UCHAR)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = (UCHAR)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n", +- pAd->CommonCfg.DesiredHtPhy.AmsduSize, +- pAd->CommonCfg.DesiredHtPhy.MimoPs, +- pAd->CommonCfg.DesiredHtPhy.MpduDensity, +- pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor)); +- +- if(pHTPhyMode->HtMode == HTMODE_GF) +- { ++ pAd->CommonCfg.DesiredHtPhy.AmsduEnable = ++ (USHORT) pAd->CommonCfg.BACapability.field.AmsduEnable; ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize = ++ (UCHAR) pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.DesiredHtPhy.MimoPs = ++ (UCHAR) pAd->CommonCfg.BACapability.field.MMPSmode; ++ pAd->CommonCfg.DesiredHtPhy.MpduDensity = ++ (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ ++ pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = ++ (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = ++ (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; ++ pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = ++ (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n", ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize, ++ pAd->CommonCfg.DesiredHtPhy.MimoPs, ++ pAd->CommonCfg.DesiredHtPhy.MpduDensity, ++ pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor)); ++ ++ if (pHTPhyMode->HtMode == HTMODE_GF) { + pAd->CommonCfg.HtCapability.HtCapInfo.GF = 1; + pAd->CommonCfg.DesiredHtPhy.GF = 1; +- } +- else ++ } else + pAd->CommonCfg.DesiredHtPhy.GF = 0; + + // Decide Rx MCSSet +- switch (RxStream) +- { +- case 1: +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00; +- break; +- +- case 2: +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; +- break; +- +- case 3: // 3*3 +- pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; +- pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff; +- break; ++ switch (RxStream) { ++ case 1: ++ pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; ++ pAd->CommonCfg.HtCapability.MCSSet[1] = 0x00; ++ break; ++ ++ case 2: ++ pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; ++ pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; ++ break; ++ ++ case 3: // 3*3 ++ pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; ++ pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; ++ pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff; ++ break; + } + +- if (pAd->CommonCfg.bForty_Mhz_Intolerant && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40) ) +- { ++ if (pAd->CommonCfg.bForty_Mhz_Intolerant ++ && (pAd->CommonCfg.Channel <= 14) && (pHTPhyMode->BW == BW_40)) { + pHTPhyMode->BW = BW_20; + pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant = 1; + } + +- if(pHTPhyMode->BW == BW_40) +- { +- pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32 ++ if (pHTPhyMode->BW == BW_40) { ++ pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32 + pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1; + if (pAd->CommonCfg.Channel <= 14) + pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1; + + pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 1; + pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 1; +- pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = (pHTPhyMode->ExtOffset == EXTCHA_BELOW)? (EXTCHA_BELOW): EXTCHA_ABOVE; ++ pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = ++ (pHTPhyMode->ExtOffset == ++ EXTCHA_BELOW) ? (EXTCHA_BELOW) : EXTCHA_ABOVE; + // Set Regsiter for extension channel position. + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value); +- if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW)) +- { ++ if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW)) { + Value |= 0x1; + BBP3Value |= (0x20); + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); +- } +- else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE)) +- { ++ } else if ((pHTPhyMode->ExtOffset == EXTCHA_ABOVE)) { + Value &= 0xfe; + BBP3Value &= (~0x20); + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + } +- + // Turn on BBP 40MHz mode now only as AP . + // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection. + if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd) +- ) +- { ++ ) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + BBPValue |= 0x10; +@@ -540,9 +563,7 @@ VOID RTMPSetHT( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBP3Value); + pAd->CommonCfg.BBPCurrentBW = BW_40; + } +- } +- else +- { ++ } else { + pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 0; + pAd->CommonCfg.DesiredHtPhy.ChannelWidth = 0; + pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0; +@@ -557,28 +578,22 @@ VOID RTMPSetHT( + } + } + +- if(pHTPhyMode->STBC == STBC_USE) +- { ++ if (pHTPhyMode->STBC == STBC_USE) { + pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 1; + pAd->CommonCfg.DesiredHtPhy.TxSTBC = 1; + pAd->CommonCfg.HtCapability.HtCapInfo.RxSTBC = 1; + pAd->CommonCfg.DesiredHtPhy.RxSTBC = 1; +- } +- else +- { ++ } else { + pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0; + pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0; + } + +- if(pHTPhyMode->SHORTGI == GI_400) +- { ++ if (pHTPhyMode->SHORTGI == GI_400) { + pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1; + pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 1; + pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 1; + pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 1; +- } +- else +- { ++ } else { + pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 0; + pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor40 = 0; + pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 = 0; +@@ -586,13 +601,12 @@ VOID RTMPSetHT( + } + + // We support link adaptation for unsolicit MCS feedback, set to 2. +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT; ++ pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT; + pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel; + // 1, the extension channel above the control channel. + + // EDCA parameters used for AP's own transmission +- if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) +- { ++ if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) { + pAd->CommonCfg.APEdcaParm.bValid = TRUE; + pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; + pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; +@@ -609,16 +623,16 @@ VOID RTMPSetHT( + pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; + pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; + +- pAd->CommonCfg.APEdcaParm.Txop[0] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[1] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[2] = 94; +- pAd->CommonCfg.APEdcaParm.Txop[3] = 47; ++ pAd->CommonCfg.APEdcaParm.Txop[0] = 0; ++ pAd->CommonCfg.APEdcaParm.Txop[1] = 0; ++ pAd->CommonCfg.APEdcaParm.Txop[2] = 94; ++ pAd->CommonCfg.APEdcaParm.Txop[3] = 47; + } + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + +- { +- RTMPSetIndividualHT(pAd, 0); +- } ++ { ++ RTMPSetIndividualHT(pAd, 0); ++ } + + } + +@@ -634,112 +648,103 @@ VOID RTMPSetHT( + + ======================================================================== + */ +-VOID RTMPSetIndividualHT( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx) ++VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + { +- PRT_HT_PHY_INFO pDesired_ht_phy = NULL; +- UCHAR TxStream = pAd->CommonCfg.TxStream; +- UCHAR DesiredMcs = MCS_AUTO; ++ PRT_HT_PHY_INFO pDesired_ht_phy = NULL; ++ UCHAR TxStream = pAd->CommonCfg.TxStream; ++ UCHAR DesiredMcs = MCS_AUTO; + +- do +- { ++ do { + { + pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo; +- DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS; ++ DesiredMcs = ++ pAd->StaCfg.DesiredTransmitSetting.field.MCS; + //pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; +- break; ++ break; + } + } while (FALSE); + +- if (pDesired_ht_phy == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx)); ++ if (pDesired_ht_phy == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx)); + return; + } + RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO)); + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs)); + // Check the validity of MCS +- if ((TxStream == 1) && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15))) +- { +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", DesiredMcs)); ++ if ((TxStream == 1) ++ && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15))) { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("RTMPSetIndividualHT: MCS(%d) is invalid in 1S, reset it as MCS_7\n", ++ DesiredMcs)); + DesiredMcs = MCS_7; + } + +- if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) && (DesiredMcs == MCS_32)) +- { +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n")); ++ if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_20) ++ && (DesiredMcs == MCS_32)) { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("RTMPSetIndividualHT: MCS_32 is only supported in 40-MHz, reset it as MCS_0\n")); + DesiredMcs = MCS_0; + } + + pDesired_ht_phy->bHtEnable = TRUE; + + // Decide desired Tx MCS +- switch (TxStream) +- { +- case 1: +- if (DesiredMcs == MCS_AUTO) +- { +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0x00; +- } +- else if (DesiredMcs <= MCS_7) +- { +- pDesired_ht_phy->MCSSet[0]= 1<MCSSet[1]= 0x00; +- } +- break; +- +- case 2: +- if (DesiredMcs == MCS_AUTO) +- { +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0xff; +- } +- else if (DesiredMcs <= MCS_15) +- { +- ULONG mode; +- +- mode = DesiredMcs / 8; +- if (mode < 2) +- pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); +- } +- break; +- +- case 3: // 3*3 +- if (DesiredMcs == MCS_AUTO) +- { +- /* MCS0 ~ MCS23, 3 bytes */ +- pDesired_ht_phy->MCSSet[0]= 0xff; +- pDesired_ht_phy->MCSSet[1]= 0xff; +- pDesired_ht_phy->MCSSet[2]= 0xff; +- } +- else if (DesiredMcs <= MCS_23) +- { +- ULONG mode; +- +- mode = DesiredMcs / 8; +- if (mode < 3) +- pDesired_ht_phy->MCSSet[mode] = (1 << (DesiredMcs - mode * 8)); +- } +- break; ++ switch (TxStream) { ++ case 1: ++ if (DesiredMcs == MCS_AUTO) { ++ pDesired_ht_phy->MCSSet[0] = 0xff; ++ pDesired_ht_phy->MCSSet[1] = 0x00; ++ } else if (DesiredMcs <= MCS_7) { ++ pDesired_ht_phy->MCSSet[0] = 1 << DesiredMcs; ++ pDesired_ht_phy->MCSSet[1] = 0x00; ++ } ++ break; ++ ++ case 2: ++ if (DesiredMcs == MCS_AUTO) { ++ pDesired_ht_phy->MCSSet[0] = 0xff; ++ pDesired_ht_phy->MCSSet[1] = 0xff; ++ } else if (DesiredMcs <= MCS_15) { ++ ULONG mode; ++ ++ mode = DesiredMcs / 8; ++ if (mode < 2) ++ pDesired_ht_phy->MCSSet[mode] = ++ (1 << (DesiredMcs - mode * 8)); ++ } ++ break; ++ ++ case 3: // 3*3 ++ if (DesiredMcs == MCS_AUTO) { ++ /* MCS0 ~ MCS23, 3 bytes */ ++ pDesired_ht_phy->MCSSet[0] = 0xff; ++ pDesired_ht_phy->MCSSet[1] = 0xff; ++ pDesired_ht_phy->MCSSet[2] = 0xff; ++ } else if (DesiredMcs <= MCS_23) { ++ ULONG mode; ++ ++ mode = DesiredMcs / 8; ++ if (mode < 3) ++ pDesired_ht_phy->MCSSet[mode] = ++ (1 << (DesiredMcs - mode * 8)); ++ } ++ break; + } + +- if(pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40) +- { ++ if (pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BW_40) { + if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32) + pDesired_ht_phy->MCSSet[4] = 0x1; + } +- + // update HT Rate setting +- if (pAd->OpMode == OPMODE_STA) +- MlmeUpdateHtTxRates(pAd, BSS0); +- else +- MlmeUpdateHtTxRates(pAd, apidx); ++ if (pAd->OpMode == OPMODE_STA) ++ MlmeUpdateHtTxRates(pAd, BSS0); ++ else ++ MlmeUpdateHtTxRates(pAd, apidx); + } + +- + /* + ======================================================================== + Routine Description: +@@ -748,36 +753,34 @@ VOID RTMPSetIndividualHT( + Arguments: + Send all HT IE in beacon/probe rsp/assoc rsp/action frame. + +- + ======================================================================== + */ +-VOID RTMPUpdateHTIE( +- IN RT_HT_CAPABILITY *pRtHt, +- IN UCHAR *pMcsSet, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo) ++VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++ IN UCHAR * pMcsSet, ++ OUT HT_CAPABILITY_IE * pHtCapability, ++ OUT ADD_HT_INFO_IE * pAddHtInfo) + { + RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE)); + RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE)); + +- pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth; +- pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs; +- pHtCapability->HtCapInfo.GF = pRtHt->GF; +- pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20; +- pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40; +- pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC; +- pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC; +- pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize; +- pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor; +- pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity; +- +- pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset ; +- pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth; +- pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode; +- pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent; +- RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet*/pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar. +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n")); ++ pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth; ++ pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs; ++ pHtCapability->HtCapInfo.GF = pRtHt->GF; ++ pHtCapability->HtCapInfo.ShortGIfor20 = pRtHt->ShortGIfor20; ++ pHtCapability->HtCapInfo.ShortGIfor40 = pRtHt->ShortGIfor40; ++ pHtCapability->HtCapInfo.TxSTBC = pRtHt->TxSTBC; ++ pHtCapability->HtCapInfo.RxSTBC = pRtHt->RxSTBC; ++ pHtCapability->HtCapInfo.AMsduSize = pRtHt->AmsduSize; ++ pHtCapability->HtCapParm.MaxRAmpduFactor = pRtHt->MaxRAmpduFactor; ++ pHtCapability->HtCapParm.MpduDensity = pRtHt->MpduDensity; ++ ++ pAddHtInfo->AddHtInfo.ExtChanOffset = pRtHt->ExtChanOffset; ++ pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth; ++ pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode; ++ pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent; ++ RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet */ pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar. ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateHTIE <== \n")); + } + + /* +@@ -787,29 +790,27 @@ VOID RTMPUpdateHTIE( + Return: + ======================================================================== + */ +-VOID RTMPAddWcidAttributeEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN MAC_TABLE_ENTRY *pEntry) ++VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIdx, ++ IN UCHAR KeyIdx, ++ IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY * pEntry) + { +- UINT32 WCIDAttri = 0; +- USHORT offset; +- UCHAR IVEIV = 0; +- USHORT Wcid = 0; ++ UINT32 WCIDAttri = 0; ++ USHORT offset; ++ UCHAR IVEIV = 0; ++ USHORT Wcid = 0; + + { + { +- if (BssIdx > BSS0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", BssIdx)); ++ if (BssIdx > BSS0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPAddWcidAttributeEntry: The BSS-index(%d) is out of range for Infra link. \n", ++ BssIdx)); + return; + } +- +- // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. +- // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. +- // the AID:2~ assign to mesh link entry. ++ // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. ++ // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. ++ // the AID:2~ assign to mesh link entry. + if (pEntry) + Wcid = pEntry->Aid; + else +@@ -822,39 +823,38 @@ VOID RTMPAddWcidAttributeEntry( + + { + if (pEntry && pEntry->ValidAsMesh) +- WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE; ++ WCIDAttri = (CipherAlg << 1) | PAIRWISEKEYTABLE; + else +- WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE; ++ WCIDAttri = (CipherAlg << 1) | SHAREDKEYTABLE; + } + + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); + +- + // Update IV/EIV table + offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE); + + // WPA mode +- if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) || (CipherAlg == CIPHER_AES)) +- { ++ if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ++ || (CipherAlg == CIPHER_AES)) { + // Eiv bit on. keyid always is 0 for pairwise key +- IVEIV = (KeyIdx <<6) | 0x20; +- } +- else +- { ++ IVEIV = (KeyIdx << 6) | 0x20; ++ } else { + // WEP KeyIdx is default tx key. + IVEIV = (KeyIdx << 6); + } + + // For key index and ext IV bit, so only need to update the position(offset+3). + #ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE8(pAd, offset+3, IVEIV); ++ RTMP_IO_WRITE8(pAd, offset + 3, IVEIV); + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +- RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV); ++ RTUSBMultiWrite_OneByte(pAd, offset + 3, &IVEIV); + #endif // RTMP_MAC_USB // + +- DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg])); +- DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n", ++ Wcid, KeyIdx, CipherName[CipherAlg])); ++ DBGPRINT(RT_DEBUG_TRACE, (" WCIDAttri = 0x%x \n", WCIDAttri)); + + } + +@@ -874,84 +874,82 @@ Arguments: + */ + PSTRING GetEncryptType(CHAR enc) + { +- if(enc == Ndis802_11WEPDisabled) +- return "NONE"; +- if(enc == Ndis802_11WEPEnabled) +- return "WEP"; +- if(enc == Ndis802_11Encryption2Enabled) +- return "TKIP"; +- if(enc == Ndis802_11Encryption3Enabled) +- return "AES"; +- if(enc == Ndis802_11Encryption4Enabled) +- return "TKIPAES"; +- else +- return "UNKNOW"; ++ if (enc == Ndis802_11WEPDisabled) ++ return "NONE"; ++ if (enc == Ndis802_11WEPEnabled) ++ return "WEP"; ++ if (enc == Ndis802_11Encryption2Enabled) ++ return "TKIP"; ++ if (enc == Ndis802_11Encryption3Enabled) ++ return "AES"; ++ if (enc == Ndis802_11Encryption4Enabled) ++ return "TKIPAES"; ++ else ++ return "UNKNOW"; + } + + PSTRING GetAuthMode(CHAR auth) + { +- if(auth == Ndis802_11AuthModeOpen) +- return "OPEN"; +- if(auth == Ndis802_11AuthModeShared) +- return "SHARED"; +- if(auth == Ndis802_11AuthModeAutoSwitch) +- return "AUTOWEP"; +- if(auth == Ndis802_11AuthModeWPA) +- return "WPA"; +- if(auth == Ndis802_11AuthModeWPAPSK) +- return "WPAPSK"; +- if(auth == Ndis802_11AuthModeWPANone) +- return "WPANONE"; +- if(auth == Ndis802_11AuthModeWPA2) +- return "WPA2"; +- if(auth == Ndis802_11AuthModeWPA2PSK) +- return "WPA2PSK"; +- if(auth == Ndis802_11AuthModeWPA1WPA2) +- return "WPA1WPA2"; +- if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) +- return "WPA1PSKWPA2PSK"; +- +- return "UNKNOW"; ++ if (auth == Ndis802_11AuthModeOpen) ++ return "OPEN"; ++ if (auth == Ndis802_11AuthModeShared) ++ return "SHARED"; ++ if (auth == Ndis802_11AuthModeAutoSwitch) ++ return "AUTOWEP"; ++ if (auth == Ndis802_11AuthModeWPA) ++ return "WPA"; ++ if (auth == Ndis802_11AuthModeWPAPSK) ++ return "WPAPSK"; ++ if (auth == Ndis802_11AuthModeWPANone) ++ return "WPANONE"; ++ if (auth == Ndis802_11AuthModeWPA2) ++ return "WPA2"; ++ if (auth == Ndis802_11AuthModeWPA2PSK) ++ return "WPA2PSK"; ++ if (auth == Ndis802_11AuthModeWPA1WPA2) ++ return "WPA1WPA2"; ++ if (auth == Ndis802_11AuthModeWPA1PSKWPA2PSK) ++ return "WPA1PSKWPA2PSK"; ++ ++ return "UNKNOW"; + } + +-INT SetCommonHT( +- IN PRTMP_ADAPTER pAd) ++INT SetCommonHT(IN PRTMP_ADAPTER pAd) + { +- OID_SET_HT_PHYMODE SetHT; ++ OID_SET_HT_PHYMODE SetHT; + + if (pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) + return FALSE; + + SetHT.PhyMode = pAd->CommonCfg.PhyMode; +- SetHT.TransmitNo = ((UCHAR)pAd->Antenna.field.TxPath); +- SetHT.HtMode = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.HTMODE; +- SetHT.ExtOffset = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; ++ SetHT.TransmitNo = ((UCHAR) pAd->Antenna.field.TxPath); ++ SetHT.HtMode = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.HTMODE; ++ SetHT.ExtOffset = ++ (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; + SetHT.MCS = MCS_AUTO; +- SetHT.BW = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.BW; +- SetHT.STBC = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.STBC; +- SetHT.SHORTGI = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI; ++ SetHT.BW = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.BW; ++ SetHT.STBC = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.STBC; ++ SetHT.SHORTGI = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.ShortGI; + + RTMPSetHT(pAd, &SetHT); + + return TRUE; + } + +-PSTRING RTMPGetRalinkEncryModeStr( +- IN USHORT encryMode) ++PSTRING RTMPGetRalinkEncryModeStr(IN USHORT encryMode) + { +- switch(encryMode) +- { +- case Ndis802_11WEPDisabled: +- return "NONE"; +- case Ndis802_11WEPEnabled: +- return "WEP"; +- case Ndis802_11Encryption2Enabled: +- return "TKIP"; +- case Ndis802_11Encryption3Enabled: +- return "AES"; +- case Ndis802_11Encryption4Enabled: +- return "TKIPAES"; +- default: +- return "UNKNOW"; ++ switch (encryMode) { ++ case Ndis802_11WEPDisabled: ++ return "NONE"; ++ case Ndis802_11WEPEnabled: ++ return "WEP"; ++ case Ndis802_11Encryption2Enabled: ++ return "TKIP"; ++ case Ndis802_11Encryption3Enabled: ++ return "AES"; ++ case Ndis802_11Encryption4Enabled: ++ return "TKIPAES"; ++ default: ++ return "UNKNOW"; + } + } +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index d910bfd..c920925 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -25,11 +25,9 @@ + ************************************************************************* + */ + +- + #ifdef RTMP_MAC_PCI + #include "../rt_config.h" + +- + /* + ======================================================================== + +@@ -50,115 +48,125 @@ + + ======================================================================== + */ +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG RingBasePaHigh; +- ULONG RingBasePaLow; +- PVOID RingBaseVa; +- INT index, num; +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- ULONG ErrorValue = 0; +- PRTMP_TX_RING pTxRing; +- PRTMP_DMABUF pDmaBuf; +- PNDIS_PACKET pPacket; +-// PRTMP_REORDERBUF pReorderBuf; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ ULONG RingBasePaHigh; ++ ULONG RingBasePaLow; ++ PVOID RingBaseVa; ++ INT index, num; ++ PTXD_STRUC pTxD; ++ PRXD_STRUC pRxD; ++ ULONG ErrorValue = 0; ++ PRTMP_TX_RING pTxRing; ++ PRTMP_DMABUF pDmaBuf; ++ PNDIS_PACKET pPacket; ++// PRTMP_REORDERBUF pReorderBuf; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); +- do +- { ++ do { + // + // Allocate all ring descriptors, include TxD, RxD, MgmtD. + // Although each size is different, to prevent cacheline and alignment + // issue, I intentional set them all to 64 bytes. + // +- for (num=0; numTxDescRing[num].AllocSize = TX_RING_SIZE * TXD_SIZE; +- RTMP_AllocateTxDescMemory( +- pAd, +- num, +- pAd->TxDescRing[num].AllocSize, +- FALSE, +- &pAd->TxDescRing[num].AllocVa, +- &pAd->TxDescRing[num].AllocPa); +- +- if (pAd->TxDescRing[num].AllocVa == NULL) +- { ++ pAd->TxDescRing[num].AllocSize = ++ TX_RING_SIZE * TXD_SIZE; ++ RTMP_AllocateTxDescMemory(pAd, num, ++ pAd->TxDescRing[num]. ++ AllocSize, FALSE, ++ &pAd->TxDescRing[num].AllocVa, ++ &pAd->TxDescRing[num]. ++ AllocPa); ++ ++ if (pAd->TxDescRing[num].AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate a big buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- + // Zero init this memory block +- NdisZeroMemory(pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocSize); ++ NdisZeroMemory(pAd->TxDescRing[num].AllocVa, ++ pAd->TxDescRing[num].AllocSize); + + // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num].AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxDescRing[num].AllocPa); +- RingBaseVa = pAd->TxDescRing[num].AllocVa; ++ RingBasePaHigh = ++ RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num]. ++ AllocPa); ++ RingBasePaLow = ++ RTMP_GetPhysicalAddressLow(pAd->TxDescRing[num]. ++ AllocPa); ++ RingBaseVa = pAd->TxDescRing[num].AllocVa; + + // + // Allocate all 1st TXBuf's memory for this TxRing + // +- pAd->TxBufSpace[num].AllocSize = TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; +- RTMP_AllocateFirstTxBuffer( +- pAd, +- num, +- pAd->TxBufSpace[num].AllocSize, +- FALSE, +- &pAd->TxBufSpace[num].AllocVa, +- &pAd->TxBufSpace[num].AllocPa); +- +- if (pAd->TxBufSpace[num].AllocVa == NULL) +- { ++ pAd->TxBufSpace[num].AllocSize = ++ TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; ++ RTMP_AllocateFirstTxBuffer(pAd, num, ++ pAd->TxBufSpace[num]. ++ AllocSize, FALSE, ++ &pAd->TxBufSpace[num]. ++ AllocVa, ++ &pAd->TxBufSpace[num]. ++ AllocPa); ++ ++ if (pAd->TxBufSpace[num].AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate a big buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- + // Zero init this memory block +- NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocSize); ++ NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, ++ pAd->TxBufSpace[num].AllocSize); + + // Save PA & VA for further operation +- BufBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num].AllocPa); +- BufBasePaLow = RTMP_GetPhysicalAddressLow (pAd->TxBufSpace[num].AllocPa); +- BufBaseVa = pAd->TxBufSpace[num].AllocVa; ++ BufBasePaHigh = ++ RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num]. ++ AllocPa); ++ BufBasePaLow = ++ RTMP_GetPhysicalAddressLow(pAd->TxBufSpace[num]. ++ AllocPa); ++ BufBaseVa = pAd->TxBufSpace[num].AllocVa; + + // + // Initialize Tx Ring Descriptor and associated buffer memory + // + pTxRing = &pAd->TxRing[num]; +- for (index = 0; index < TX_RING_SIZE; index++) +- { ++ for (index = 0; index < TX_RING_SIZE; index++) { + pTxRing->Cell[index].pNdisPacket = NULL; + pTxRing->Cell[index].pNextNdisPacket = NULL; + // Init Tx Ring Size, Va, Pa variables + pTxRing->Cell[index].AllocSize = TXD_SIZE; + pTxRing->Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pTxRing->Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pTxRing->Cell[index].AllocPa, RingBasePaLow); ++ RTMP_SetPhysicalAddressHigh(pTxRing-> ++ Cell[index].AllocPa, ++ RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow(pTxRing->Cell[index]. ++ AllocPa, ++ RingBasePaLow); + + // Setup Tx Buffer size & address. only 802.11 header will store in this space + pDmaBuf = &pTxRing->Cell[index].DmaBuf; + pDmaBuf->AllocSize = TX_DMA_1ST_BUFFER_SIZE; + pDmaBuf->AllocVa = BufBaseVa; +- RTMP_SetPhysicalAddressHigh(pDmaBuf->AllocPa, BufBasePaHigh); +- RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, BufBasePaLow); ++ RTMP_SetPhysicalAddressHigh(pDmaBuf->AllocPa, ++ BufBasePaHigh); ++ RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, ++ BufBasePaLow); + + // link the pre-allocated TxBuf to TXD +- pTxD = (PTXD_STRUC) pTxRing->Cell[index].AllocVa; ++ pTxD = ++ (PTXD_STRUC) pTxRing->Cell[index].AllocVa; + pTxD->SDPtr0 = BufBasePaLow; + // advance to next ring descriptor address + pTxD->DMADONE = 1; +@@ -167,9 +175,12 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + + // advance to next TxBuf address + BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; +- BufBaseVa = (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; ++ BufBaseVa = ++ (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; + } +- DBGPRINT(RT_DEBUG_TRACE, ("TxRing[%d]: total %d entry allocated\n", num, index)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("TxRing[%d]: total %d entry allocated\n", num, ++ index)); + } + if (Status == NDIS_STATUS_RESOURCES) + break; +@@ -178,41 +189,42 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + // Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler + // + pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * TXD_SIZE; +- RTMP_AllocateMgmtDescMemory( +- pAd, +- pAd->MgmtDescRing.AllocSize, +- FALSE, +- &pAd->MgmtDescRing.AllocVa, +- &pAd->MgmtDescRing.AllocPa); +- +- if (pAd->MgmtDescRing.AllocVa == NULL) +- { ++ RTMP_AllocateMgmtDescMemory(pAd, ++ pAd->MgmtDescRing.AllocSize, ++ FALSE, ++ &pAd->MgmtDescRing.AllocVa, ++ &pAd->MgmtDescRing.AllocPa); ++ ++ if (pAd->MgmtDescRing.AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate a big buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- + // Zero init this memory block +- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); ++ NdisZeroMemory(pAd->MgmtDescRing.AllocVa, ++ pAd->MgmtDescRing.AllocSize); + + // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->MgmtDescRing.AllocPa); +- RingBaseVa = pAd->MgmtDescRing.AllocVa; ++ RingBasePaHigh = ++ RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); ++ RingBasePaLow = ++ RTMP_GetPhysicalAddressLow(pAd->MgmtDescRing.AllocPa); ++ RingBaseVa = pAd->MgmtDescRing.AllocVa; + + // + // Initialize MGMT Ring and associated buffer memory + // +- for (index = 0; index < MGMT_RING_SIZE; index++) +- { ++ for (index = 0; index < MGMT_RING_SIZE; index++) { + pAd->MgmtRing.Cell[index].pNdisPacket = NULL; + pAd->MgmtRing.Cell[index].pNextNdisPacket = NULL; + // Init MGMT Ring Size, Va, Pa variables + pAd->MgmtRing.Cell[index].AllocSize = TXD_SIZE; + pAd->MgmtRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->MgmtRing.Cell[index].AllocPa, RingBasePaLow); ++ RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index]. ++ AllocPa, RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow(pAd->MgmtRing.Cell[index]. ++ AllocPa, RingBasePaLow); + + // Offset to next ring descriptor address + RingBasePaLow += TXD_SIZE; +@@ -224,49 +236,51 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + + // no pre-allocated buffer required in MgmtRing for scatter-gather case + } +- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", index)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MGMT Ring: total %d entry allocated\n", index)); + + // + // Allocate RX ring descriptor's memory except Tx ring which allocated eariler + // + pAd->RxDescRing.AllocSize = RX_RING_SIZE * RXD_SIZE; +- RTMP_AllocateRxDescMemory( +- pAd, +- pAd->RxDescRing.AllocSize, +- FALSE, +- &pAd->RxDescRing.AllocVa, +- &pAd->RxDescRing.AllocPa); +- +- if (pAd->RxDescRing.AllocVa == NULL) +- { ++ RTMP_AllocateRxDescMemory(pAd, ++ pAd->RxDescRing.AllocSize, ++ FALSE, ++ &pAd->RxDescRing.AllocVa, ++ &pAd->RxDescRing.AllocPa); ++ ++ if (pAd->RxDescRing.AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate a big buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- + // Zero init this memory block +- NdisZeroMemory(pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize); +- ++ NdisZeroMemory(pAd->RxDescRing.AllocVa, ++ pAd->RxDescRing.AllocSize); + + DBGPRINT(RT_DEBUG_OFF, +- ("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocSize)); ++ ("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, ++ pAd->RxDescRing.AllocSize)); + + // Save PA & VA for further operation +- RingBasePaHigh = RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); +- RingBasePaLow = RTMP_GetPhysicalAddressLow (pAd->RxDescRing.AllocPa); +- RingBaseVa = pAd->RxDescRing.AllocVa; ++ RingBasePaHigh = ++ RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); ++ RingBasePaLow = ++ RTMP_GetPhysicalAddressLow(pAd->RxDescRing.AllocPa); ++ RingBaseVa = pAd->RxDescRing.AllocVa; + + // + // Initialize Rx Ring and associated buffer memory + // +- for (index = 0; index < RX_RING_SIZE; index++) +- { ++ for (index = 0; index < RX_RING_SIZE; index++) { + // Init RX Ring Size, Va, Pa variables + pAd->RxRing.Cell[index].AllocSize = RXD_SIZE; + pAd->RxRing.Cell[index].AllocVa = RingBaseVa; +- RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index].AllocPa, RingBasePaHigh); +- RTMP_SetPhysicalAddressLow (pAd->RxRing.Cell[index].AllocPa, RingBasePaLow); ++ RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index]. ++ AllocPa, RingBasePaHigh); ++ RTMP_SetPhysicalAddressLow(pAd->RxRing.Cell[index]. ++ AllocPa, RingBasePaLow); + + //NdisZeroMemory(RingBaseVa, RXD_SIZE); + +@@ -277,61 +291,57 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + // Setup Rx associated Buffer size & allocate share memory + pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; + pDmaBuf->AllocSize = RX_BUFFER_AGGRESIZE; +- pPacket = RTMP_AllocateRxPacketBuffer( +- pAd, +- pDmaBuf->AllocSize, +- FALSE, +- &pDmaBuf->AllocVa, +- &pDmaBuf->AllocPa); ++ pPacket = RTMP_AllocateRxPacketBuffer(pAd, ++ pDmaBuf-> ++ AllocSize, FALSE, ++ &pDmaBuf->AllocVa, ++ &pDmaBuf-> ++ AllocPa); + + /* keep allocated rx packet */ + pAd->RxRing.Cell[index].pNdisPacket = pPacket; + + // Error handling +- if (pDmaBuf->AllocVa == NULL) +- { ++ if (pDmaBuf->AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate RxRing's 1st buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- + // Zero init this memory block + NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); + + // Write RxD buffer address & allocated buffer length + pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; +- pRxD->SDP0 = RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); ++ pRxD->SDP0 = ++ RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); + pRxD->DDONE = 0; + + } + +- DBGPRINT(RT_DEBUG_TRACE, ("Rx Ring: total %d entry allocated\n", index)); +- +- } while (FALSE); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Rx Ring: total %d entry allocated\n", index)); + ++ } while (FALSE); + + NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); +- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); ++ pAd->FragFrame.pFragPacket = ++ RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); + +- if (pAd->FragFrame.pFragPacket == NULL) +- { ++ if (pAd->FragFrame.pFragPacket == NULL) { + Status = NDIS_STATUS_RESOURCES; + } + +- if (Status != NDIS_STATUS_SUCCESS) +- { ++ if (Status != NDIS_STATUS_SUCCESS) { + // Log error inforamtion +- NdisWriteErrorLogEntry( +- pAd->AdapterHandle, +- NDIS_ERROR_CODE_OUT_OF_RESOURCES, +- 1, +- ErrorValue); ++ NdisWriteErrorLogEntry(pAd->AdapterHandle, ++ NDIS_ERROR_CODE_OUT_OF_RESOURCES, ++ 1, ErrorValue); + } +- + // Following code segment get from original func:NICInitTxRxRingAndBacklogQueue(), now should integrate it to here. + { +- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTxRxRingAndBacklogQueue\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> NICInitTxRxRingAndBacklogQueue\n")); + + /* + // Disable DMA. +@@ -342,8 +352,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + */ + + // Initialize all transmit related software queues +- for(index = 0; index < NUM_OF_TX_RING; index++) +- { ++ for (index = 0; index < NUM_OF_TX_RING; index++) { + InitializeQueueHeader(&pAd->TxSwQueue[index]); + // Init TX rings index pointer + pAd->TxRing[index].TxSwFreeIdx = 0; +@@ -356,23 +365,21 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; + //RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RX_CRX_IDX0); + +- + // init MGMT ring index pointer + pAd->MgmtRing.TxSwFreeIdx = 0; + pAd->MgmtRing.TxCpuIdx = 0; + + pAd->PrivateInfo.TxRingFullCnt = 0; + +- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTxRxRingAndBacklogQueue\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<-- NICInitTxRxRingAndBacklogQueue\n")); + } + +- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); ++ DBGPRINT_S(Status, ++ ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); + return Status; + } + +- +- +- + /* + ======================================================================== + +@@ -393,156 +400,160 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + + ======================================================================== + */ +-VOID RTMPRingCleanUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType) ++VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + { +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; +- int i; +- PRTMP_TX_RING pTxRing; +- unsigned long IrqFlags; +- //UINT32 RxSwReadIdx; +- +- +- DBGPRINT(RT_DEBUG_TRACE,("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, pAd->RalinkCounters.PendingNdisPacketCount)); +- switch (RingType) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: ++ PTXD_STRUC pTxD; ++ PRXD_STRUC pRxD; ++ PQUEUE_ENTRY pEntry; ++ PNDIS_PACKET pPacket; ++ int i; ++ PRTMP_TX_RING pTxRing; ++ unsigned long IrqFlags; ++ //UINT32 RxSwReadIdx; + +- pTxRing = &pAd->TxRing[RingType]; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, ++ pAd->RalinkCounters.PendingNdisPacketCount)); ++ switch (RingType) { ++ case QID_AC_BK: ++ case QID_AC_BE: ++ case QID_AC_VI: ++ case QID_AC_VO: + +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- // We have to clean all descriptors in case some error happened with reset +- for (i=0; iCell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNdisPacket = NULL; +- } ++ pTxRing = &pAd->TxRing[RingType]; + +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- pTxRing->Cell[i].pNextNdisPacket = NULL; +- } ++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ // We have to clean all descriptors in case some error happened with reset ++ for (i = 0; i < TX_RING_SIZE; i++) // We have to scan all TX ring ++ { ++ pTxD = (PTXD_STRUC) pTxRing->Cell[i].AllocVa; ++ ++ pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) { ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_FAILURE); ++ pTxRing->Cell[i].pNdisPacket = NULL; + } + +- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + RingType * 0x10, &pTxRing->TxDmaIdx); +- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; +- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + RingType * 0x10, pTxRing->TxCpuIdx); +- +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- +- RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- while (pAd->TxSwQueue[RingType].Head != NULL) +- { +- pEntry = RemoveHeadQueue(&pAd->TxSwQueue[RingType]); +- pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- DBGPRINT(RT_DEBUG_TRACE,("Release 1 NDIS packet from s/w backlog queue\n")); ++ pPacket = ++ (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) { ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_FAILURE); ++ pTxRing->Cell[i].pNextNdisPacket = NULL; + } +- RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +- break; ++ } + +- case QID_MGMT: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->MgmtRingLock); ++ RTMP_IO_READ32(pAd, TX_DTX_IDX0 + RingType * 0x10, ++ &pTxRing->TxDmaIdx); ++ pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx; ++ pTxRing->TxCpuIdx = pTxRing->TxDmaIdx; ++ RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + RingType * 0x10, ++ pTxRing->TxCpuIdx); + +- for (i=0; iMgmtRing.Cell[i].AllocVa; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; +- // rlease scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNdisPacket = NULL; +- +- pPacket = (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } +- pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL; ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + ++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++ while (pAd->TxSwQueue[RingType].Head != NULL) { ++ pEntry = RemoveHeadQueue(&pAd->TxSwQueue[RingType]); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); ++ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Release 1 NDIS packet from s/w backlog queue\n")); ++ } ++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++ break; ++ ++ case QID_MGMT: ++ // We have to clean all descriptors in case some error happened with reset ++ NdisAcquireSpinLock(&pAd->MgmtRingLock); ++ ++ for (i = 0; i < MGMT_RING_SIZE; i++) { ++ pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[i].AllocVa; ++ ++ pPacket = ++ (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; ++ // rlease scatter-and-gather NDIS_PACKET ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, ++ pTxD->SDLen0, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_FAILURE); ++ } ++ pAd->MgmtRing.Cell[i].pNdisPacket = NULL; ++ ++ pPacket = ++ (PNDIS_PACKET) pAd->MgmtRing.Cell[i]. ++ pNextNdisPacket; ++ // release scatter-and-gather NDIS_PACKET ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, ++ pTxD->SDLen1, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_FAILURE); + } ++ pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL; + +- RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pAd->MgmtRing.TxDmaIdx); +- pAd->MgmtRing.TxSwFreeIdx = pAd->MgmtRing.TxDmaIdx; +- pAd->MgmtRing.TxCpuIdx = pAd->MgmtRing.TxDmaIdx; +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); ++ } + +- NdisReleaseSpinLock(&pAd->MgmtRingLock); +- pAd->RalinkCounters.MgmtRingFullCount = 0; +- break; ++ RTMP_IO_READ32(pAd, TX_MGMTDTX_IDX, &pAd->MgmtRing.TxDmaIdx); ++ pAd->MgmtRing.TxSwFreeIdx = pAd->MgmtRing.TxDmaIdx; ++ pAd->MgmtRing.TxCpuIdx = pAd->MgmtRing.TxDmaIdx; ++ RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); + +- case QID_RX: +- // We have to clean all descriptors in case some error happened with reset +- NdisAcquireSpinLock(&pAd->RxRingLock); ++ NdisReleaseSpinLock(&pAd->MgmtRingLock); ++ pAd->RalinkCounters.MgmtRingFullCount = 0; ++ break; + +- for (i=0; iRxRing.Cell[i].AllocVa; +- pRxD->DDONE = 0 ; +- } ++ case QID_RX: ++ // We have to clean all descriptors in case some error happened with reset ++ NdisAcquireSpinLock(&pAd->RxRingLock); ++ ++ for (i = 0; i < RX_RING_SIZE; i++) { ++ pRxD = (PRXD_STRUC) pAd->RxRing.Cell[i].AllocVa; ++ pRxD->DDONE = 0; ++ } + +- RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); +- pAd->RxRing.RxSwReadIdx = pAd->RxRing.RxDmaIdx; +- pAd->RxRing.RxCpuIdx = ((pAd->RxRing.RxDmaIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxDmaIdx-1)); +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); ++ RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); ++ pAd->RxRing.RxSwReadIdx = pAd->RxRing.RxDmaIdx; ++ pAd->RxRing.RxCpuIdx = ++ ((pAd->RxRing.RxDmaIdx == ++ 0) ? (RX_RING_SIZE - 1) : (pAd->RxRing.RxDmaIdx - 1)); ++ RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); + +- NdisReleaseSpinLock(&pAd->RxRingLock); +- break; ++ NdisReleaseSpinLock(&pAd->RxRingLock); ++ break; + +- default: +- break; ++ default: ++ break; + } + } + +- +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { +- int index, num , j; ++ int index, num, j; + PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; +- unsigned int IrqFlags; ++ PTXD_STRUC pTxD; ++ PNDIS_PACKET pPacket; ++ unsigned int IrqFlags; + + //POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); + + // Free TxSwQueue Packet +- for (index=0; index irq_lock, IrqFlags); + pQueue = &pAd->TxSwQueue[index]; +- while (pQueue->Head) +- { ++ while (pQueue->Head) { + pEntry = RemoveHeadQueue(pQueue); + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +@@ -551,80 +562,92 @@ VOID RTMPFreeTxRxRingMemory( + } + + // Free Tx Ring Packet +- for (index=0;index< NUM_OF_TX_RING;index++) +- { ++ for (index = 0; index < NUM_OF_TX_RING; index++) { + pTxRing = &pAd->TxRing[index]; + +- for (j=0; j< TX_RING_SIZE; j++) +- { ++ for (j = 0; j < TX_RING_SIZE; j++) { + pTxD = (PTXD_STRUC) (pTxRing->Cell[j].AllocVa); + pPacket = pTxRing->Cell[j].pNdisPacket; + +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, ++ pTxD->SDLen0, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_SUCCESS); + } + //Always assign pNdisPacket as NULL after clear + pTxRing->Cell[j].pNdisPacket = NULL; + + pPacket = pTxRing->Cell[j].pNextNdisPacket; + +- if (pPacket) +- { +- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE); +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); ++ if (pPacket) { ++ PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, ++ pTxD->SDLen1, ++ PCI_DMA_TODEVICE); ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_SUCCESS); + } + //Always assign pNextNdisPacket as NULL after clear +- pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = NULL; ++ pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = ++ NULL; + + } + } + +- for (index = RX_RING_SIZE - 1 ; index >= 0; index--) +- { +- if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) && (pAd->RxRing.Cell[index].pNdisPacket)) +- { +- PCI_UNMAP_SINGLE(pAd, pAd->RxRing.Cell[index].DmaBuf.AllocPa, pAd->RxRing.Cell[index].DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); +- RELEASE_NDIS_PACKET(pAd, pAd->RxRing.Cell[index].pNdisPacket, NDIS_STATUS_SUCCESS); ++ for (index = RX_RING_SIZE - 1; index >= 0; index--) { ++ if ((pAd->RxRing.Cell[index].DmaBuf.AllocVa) ++ && (pAd->RxRing.Cell[index].pNdisPacket)) { ++ PCI_UNMAP_SINGLE(pAd, ++ pAd->RxRing.Cell[index].DmaBuf.AllocPa, ++ pAd->RxRing.Cell[index].DmaBuf. ++ AllocSize, PCI_DMA_FROMDEVICE); ++ RELEASE_NDIS_PACKET(pAd, ++ pAd->RxRing.Cell[index].pNdisPacket, ++ NDIS_STATUS_SUCCESS); + } + } + NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(RTMP_DMACB)); + +- if (pAd->RxDescRing.AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->RxDescRing.AllocSize, pAd->RxDescRing.AllocVa, pAd->RxDescRing.AllocPa); +- } +- NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); ++ if (pAd->RxDescRing.AllocVa) { ++ RTMP_FreeDescMemory(pAd, pAd->RxDescRing.AllocSize, ++ pAd->RxDescRing.AllocVa, ++ pAd->RxDescRing.AllocPa); ++ } ++ NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); + +- if (pAd->MgmtDescRing.AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->MgmtDescRing.AllocSize, pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocPa); ++ if (pAd->MgmtDescRing.AllocVa) { ++ RTMP_FreeDescMemory(pAd, pAd->MgmtDescRing.AllocSize, ++ pAd->MgmtDescRing.AllocVa, ++ pAd->MgmtDescRing.AllocPa); + } + NdisZeroMemory(&pAd->MgmtDescRing, sizeof(RTMP_DMABUF)); + +- for (num = 0; num < NUM_OF_TX_RING; num++) +- { +- if (pAd->TxBufSpace[num].AllocVa) +- { +- RTMP_FreeFirstTxBuffer(pAd, pAd->TxBufSpace[num].AllocSize, FALSE, pAd->TxBufSpace[num].AllocVa, pAd->TxBufSpace[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); ++ for (num = 0; num < NUM_OF_TX_RING; num++) { ++ if (pAd->TxBufSpace[num].AllocVa) { ++ RTMP_FreeFirstTxBuffer(pAd, ++ pAd->TxBufSpace[num].AllocSize, ++ FALSE, ++ pAd->TxBufSpace[num].AllocVa, ++ pAd->TxBufSpace[num].AllocPa); ++ } ++ NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); + +- if (pAd->TxDescRing[num].AllocVa) +- { +- RTMP_FreeDescMemory(pAd, pAd->TxDescRing[num].AllocSize, pAd->TxDescRing[num].AllocVa, pAd->TxDescRing[num].AllocPa); +- } +- NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); ++ if (pAd->TxDescRing[num].AllocVa) { ++ RTMP_FreeDescMemory(pAd, pAd->TxDescRing[num].AllocSize, ++ pAd->TxDescRing[num].AllocVa, ++ pAd->TxDescRing[num].AllocPa); ++ } ++ NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); + } + + if (pAd->FragFrame.pFragPacket) +- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); ++ RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, ++ NDIS_STATUS_SUCCESS); + + DBGPRINT(RT_DEBUG_TRACE, ("<-- RTMPFreeTxRxRingMemory\n")); + } + +- + /*************************************************************************** + * + * register related procedures. +@@ -644,19 +667,16 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd) ++VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd) + { +- WPDMA_GLO_CFG_STRUC GloCfg; +- ++ WPDMA_GLO_CFG_STRUC GloCfg; + + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); + GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; ++ GloCfg.field.EnTXWriteBackDDONE = 1; + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + } + +- + /* + ======================================================================== + Routine Description: +@@ -671,23 +691,22 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd) ++VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + { +- WPDMA_GLO_CFG_STRUC GloCfg; ++ WPDMA_GLO_CFG_STRUC GloCfg; + int i = 0; + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ if ((GloCfg.field.TxDMABusy == 0) ++ && (GloCfg.field.RxDMABusy == 0)) + break; + + DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); + RTMPusecDelay(1000); + i++; +- }while ( i <200); ++ } while (i < 200); + + RTMPusecDelay(50); + +@@ -696,69 +715,63 @@ VOID RT28XXDMAEnable( + GloCfg.field.EnableRxDMA = 1; + GloCfg.field.EnableTxDMA = 1; + +- DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + + } + +- +-BOOLEAN AsicCheckCommanOk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command) ++BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command) + { +- UINT32 CmdStatus = 0, CID = 0, i; +- UINT32 ThisCIDMask = 0; ++ UINT32 CmdStatus = 0, CID = 0, i; ++ UINT32 ThisCIDMask = 0; + + i = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, H2M_MAILBOX_CID, &CID); + // Find where the command is. Because this is randomly specified by firmware. +- if ((CID & CID0MASK) == Command) +- { ++ if ((CID & CID0MASK) == Command) { + ThisCIDMask = CID0MASK; + break; +- } +- else if ((((CID & CID1MASK)>>8) & 0xff) == Command) +- { ++ } else if ((((CID & CID1MASK) >> 8) & 0xff) == Command) { + ThisCIDMask = CID1MASK; + break; +- } +- else if ((((CID & CID2MASK)>>16) & 0xff) == Command) +- { ++ } else if ((((CID & CID2MASK) >> 16) & 0xff) == Command) { + ThisCIDMask = CID2MASK; + break; +- } +- else if ((((CID & CID3MASK)>>24) & 0xff) == Command) +- { ++ } else if ((((CID & CID3MASK) >> 24) & 0xff) == Command) { + ThisCIDMask = CID3MASK; + break; + } + + RTMPusecDelay(100); + i++; +- }while (i < 200); ++ } while (i < 200); + + // Get CommandStatus Value + RTMP_IO_READ32(pAd, H2M_MAILBOX_STATUS, &CmdStatus); + + // This command's status is at the same position as command. So AND command position's bitmask to read status. +- if (i < 200) +- { ++ if (i < 200) { + // If Status is 1, the comamnd is success. +- if (((CmdStatus & ThisCIDMask) == 0x1) || ((CmdStatus & ThisCIDMask) == 0x100) +- || ((CmdStatus & ThisCIDMask) == 0x10000) || ((CmdStatus & ThisCIDMask) == 0x1000000)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanOk CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); ++ if (((CmdStatus & ThisCIDMask) == 0x1) ++ || ((CmdStatus & ThisCIDMask) == 0x100) ++ || ((CmdStatus & ThisCIDMask) == 0x10000) ++ || ((CmdStatus & ThisCIDMask) == 0x1000000)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> AsicCheckCommanOk CID = 0x%x, CmdStatus= 0x%x \n", ++ CID, CmdStatus)); + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); + return TRUE; + } +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail1 CID = 0x%x, CmdStatus= 0x%x \n", CID, CmdStatus)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", Command, CmdStatus)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> AsicCheckCommanFail1 CID = 0x%x, CmdStatus= 0x%x \n", ++ CID, CmdStatus)); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", ++ Command, CmdStatus)); + } + // Clear Command and Status. + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +@@ -767,7 +780,6 @@ BOOLEAN AsicCheckCommanOk( + return FALSE; + } + +- + /* + ======================================================================== + Routine Description: +@@ -782,58 +794,58 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER *pAd, +- IN INT apidx, +- IN ULONG FrameLen, +- IN ULONG UpdatePos) ++VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ IN INT apidx, ++ IN ULONG FrameLen, IN ULONG UpdatePos) + { +- ULONG CapInfoPos = 0; +- UCHAR *ptr, *ptr_update, *ptr_capinfo; +- UINT i; +- BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; +- ++ ULONG CapInfoPos = 0; ++ UCHAR *ptr, *ptr_update, *ptr_capinfo; ++ UINT i; ++ BOOLEAN bBcnReq = FALSE; ++ UCHAR bcn_idx = 0; + + { +- DBGPRINT(RT_DEBUG_ERROR, ("%s() : No valid Interface be found.\n", __func__)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s() : No valid Interface be found.\n", __func__)); + return; + } + + //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) +- // || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) +- // || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) +- if (bBcnReq == FALSE) +- { ++ // || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) ++ // || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) ++ // ) ++ if (bBcnReq == FALSE) { + /* when the ra interface is down, do not send its beacon frame */ + /* clear all zero */ +- for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); +- } +- else +- { +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- for (i=0; iBeaconOffset[bcn_idx] + i, ++ 0x00); ++ } else { ++ ptr = (PUCHAR) & pAd->BeaconTxWI; ++ for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field + { +- UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, longptr); ++ UINT32 longptr = ++ *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + ++ (*(ptr + 3) << 24); ++ RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, ++ longptr); + ptr += 4; + } + + // Update CapabilityInfo in Beacon +- for (i = CapInfoPos; i < (CapInfoPos+2); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_capinfo); +- ptr_capinfo ++; ++ for (i = CapInfoPos; i < (CapInfoPos + 2); i++) { ++ RTMP_IO_WRITE8(pAd, ++ pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + ++ i, *ptr_capinfo); ++ ptr_capinfo++; + } + +- if (FrameLen > UpdatePos) +- { +- for (i= UpdatePos; i< (FrameLen); i++) +- { +- RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, *ptr_update); +- ptr_update ++; ++ if (FrameLen > UpdatePos) { ++ for (i = UpdatePos; i < (FrameLen); i++) { ++ RTMP_IO_WRITE8(pAd, ++ pAd->BeaconOffset[bcn_idx] + ++ TXWI_SIZE + i, *ptr_update); ++ ptr_update++; + } + } + +@@ -841,119 +853,115 @@ VOID RT28xx_UpdateBeaconToAsic( + + } + +- +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx) ++VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; + +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- return; ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ return; + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); +- return; +- } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); ++ return; ++ } + +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); ++ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); + +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- // Support PCIe Advance Power Save +- if (bFromTx == TRUE +- &&(pAd->Mlme.bPsPollTimerRunning == TRUE)) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(3000); +- DBGPRINT(RT_DEBUG_TRACE, ("=======AsicForceWakeup===bFromTx\n")); +- } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ // Support PCIe Advance Power Save ++ if (bFromTx == TRUE && (pAd->Mlme.bPsPollTimerRunning == TRUE)) { ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ RTMPusecDelay(3000); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("=======AsicForceWakeup===bFromTx\n")); ++ } + + AutoWakeupCfg.word = 0; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + +- if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) +- { ++ if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) { + #ifdef PCIE_PS_SUPPORT + // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) +- { ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + + if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +- } +- else ++ pChipOps-> ++ AsicReverseRfFromSleepMode(pAd); ++ } else + #endif // PCIE_PS_SUPPORT // + { +- // end johnli ++ // end johnli + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { ++ if (INFRA_ON(pAd) ++ && (pAd->CommonCfg.CentralChannel != ++ pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo. ++ ChannelWidth == BW_40)) { + // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ CentralChannel, ++ FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg. ++ CentralChannel); ++ } else { + // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ Channel, FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg.Channel); + } + } +- } ++ } + #ifdef PCIE_PS_SUPPORT + // 3090 MCU Wakeup command needs more time to be stable. + // Before stable, don't issue other MCU command to prevent from firmware error. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Release the MCU Lock(3090)\n")); ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<==RT28xxPciStaAsicForceWakeup::Release the MCU Lock(3090)\n")); + RTMP_SEM_LOCK(&pAd->McuCmdLock); + pAd->brt30xxBanMcuCmd = FALSE; + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } ++ } + #endif // PCIE_PS_SUPPORT // +- } +- else +- { +- // PCI, 2860-PCIe +- DBGPRINT(RT_DEBUG_TRACE, ("<==RT28xxPciStaAsicForceWakeup::Original PCI Power Saving\n")); +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- } +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); +-} ++ } else { ++ // PCI, 2860-PCIe ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<==RT28xxPciStaAsicForceWakeup::Original PCI Power Saving\n")); ++ AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ } + ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); ++ DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); ++} + +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp) + { + BOOLEAN brc; + +- if (pAd->StaCfg.bRadio == FALSE) +- { ++ if (pAd->StaCfg.bRadio == FALSE) { + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + return; + } + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- ULONG Now = 0; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ ULONG Now = 0; ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) { + DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + return; +@@ -962,24 +970,31 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup( + NdisGetSystemUpTime(&Now); + // If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. + // Because Some AP can't queuing outgoing frames immediately. +- if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) && (pAd->Mlme.LastSendNULLpsmTime <= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu : RxCountSinceLastNULL = %lu. \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); ++ if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) ++ && (pAd->Mlme.LastSendNULLpsmTime <= Now)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Now = %lu, LastSendNULLpsmTime=%lu : RxCountSinceLastNULL = %lu. \n", ++ Now, pAd->Mlme.LastSendNULLpsmTime, ++ pAd->RalinkCounters.RxCountSinceLastNULL)); + return; +- } +- else if ((pAd->RalinkCounters.RxCountSinceLastNULL > 0) && ((pAd->Mlme.LastSendNULLpsmTime + pAd->CommonCfg.BeaconPeriod) >= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu: RxCountSinceLastNULL = %lu > 0 \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); ++ } else if ((pAd->RalinkCounters.RxCountSinceLastNULL > 0) ++ && ++ ((pAd->Mlme.LastSendNULLpsmTime + ++ pAd->CommonCfg.BeaconPeriod) >= Now)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Now = %lu, LastSendNULLpsmTime=%lu: RxCountSinceLastNULL = %lu > 0 \n", ++ Now, pAd->Mlme.LastSendNULLpsmTime, ++ pAd->RalinkCounters.RxCountSinceLastNULL)); + return; + } + +- brc = RT28xxPciAsicRadioOff(pAd, DOT11POWERSAVE, TbttNumToNextWakeUp); +- if (brc==TRUE) ++ brc = ++ RT28xxPciAsicRadioOff(pAd, DOT11POWERSAVE, ++ TbttNumToNextWakeUp); ++ if (brc == TRUE) + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +- } +- else +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ } else { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; + // we have decided to SLEEP, so at least do it for a BEACON period. + if (TbttNumToNextWakeUp == 0) + TbttNumToNextWakeUp = 1; +@@ -992,87 +1007,83 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup( + AutoWakeupCfg.field.EnableAutoWakeup = 1; + AutoWakeupCfg.field.AutoLeadTime = 5; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +- DBGPRINT(RT_DEBUG_TRACE, ("<-- %s, TbttNumToNextWakeUp=%d \n", __func__, TbttNumToNextWakeUp)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<-- %s, TbttNumToNextWakeUp=%d \n", __func__, ++ TbttNumToNextWakeUp)); + } + + } + +-VOID PsPollWakeExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID PsPollWakeExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + unsigned long flags; + +- DBGPRINT(RT_DEBUG_TRACE,("-->PsPollWakeExec \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("-->PsPollWakeExec \n")); + RTMP_INT_LOCK(&pAd->irq_lock, flags); +- if (pAd->Mlme.bPsPollTimerRunning) +- { +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- } +- pAd->Mlme.bPsPollTimerRunning = FALSE; ++ if (pAd->Mlme.bPsPollTimerRunning) { ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ } ++ pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + #ifdef PCIE_PS_SUPPORT + // For rt30xx power solution 3, Use software timer to wake up in psm. So call + // AsicForceWakeup here instead of handling twakeup interrupt. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("<--PsPollWakeExec::3090 calls AsicForceWakeup(pAd, DOT11POWERSAVE) in advance \n")); ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<--PsPollWakeExec::3090 calls AsicForceWakeup(pAd, DOT11POWERSAVE) in advance \n")); + AsicForceWakeup(pAd, DOT11POWERSAVE); + } + #endif // PCIE_PS_SUPPORT // + } + +-VOID RadioOnExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID RadioOnExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- WPDMA_GLO_CFG_STRUC DmaCfg; +- BOOLEAN Cancelled; ++ WPDMA_GLO_CFG_STRUC DmaCfg; ++ BOOLEAN Cancelled; + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); + //KH Debug: Add the compile flag "RT2860 and condition + #ifdef RTMP_PCI_SUPPORT + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); + #endif // RTMP_PCI_SUPPORT // + return; + } + +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); + #ifdef RTMP_PCI_SUPPORT +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); + #endif // RTMP_PCI_SUPPORT // + return; + } + //KH Debug: need to check. I add the compile flag "CONFIG_STA_SUPPORT" to enclose the following codes. + #ifdef RTMP_PCI_SUPPORT +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + } + #endif // RTMP_PCI_SUPPORT // +- if (pAd->StaCfg.bRadio == TRUE) +- { ++ if (pAd->StaCfg.bRadio == TRUE) { + pAd->bPCIclkOff = FALSE; + RTMPRingCleanUp(pAd, QID_AC_BK); + RTMPRingCleanUp(pAd, QID_AC_BE); +@@ -1096,15 +1107,15 @@ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); + + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { ++ if (INFRA_ON(pAd) ++ && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == ++ BW_40)) { + // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, ++ FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { ++ } else { + // Must using 20MHz. + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); +@@ -1117,14 +1128,14 @@ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + #ifdef PCIE_PS_SUPPORT + // 3090 MCU Wakeup command needs more time to be stable. + // Before stable, don't issue other MCU command to prevent from firmware error. +-if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } + #endif // PCIE_PS_SUPPORT // + + // Clear Radio off flag +@@ -1133,13 +1144,11 @@ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(p + // Set LED + RTMPSetLED(pAd, LED_RADIO_ON); + +- if (pAd->StaCfg.Psm == PWR_ACTIVE) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- } +- } +- else +- { ++ if (pAd->StaCfg.Psm == PWR_ACTIVE) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, ++ pAd->StaCfg.BBPR3); ++ } ++ } else { + RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); + } + } +@@ -1155,23 +1164,19 @@ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(p + + ========================================================================== + */ +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) ++BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + { +- //WPDMA_GLO_CFG_STRUC DmaCfg; +- BOOLEAN Cancelled; +- //UINT32 MACValue; ++ //WPDMA_GLO_CFG_STRUC DmaCfg; ++ BOOLEAN Cancelled; ++ //UINT32 MACValue; + +- if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) ++ if (pAd->OpMode == OPMODE_AP && Level == DOT11POWERSAVE) + return FALSE; + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + } + if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE && + (Level == GUIRADIO_OFF || Level == GUI_IDLE_POWER_SAVE)) || +@@ -1179,86 +1184,96 @@ BOOLEAN RT28xxPciAsicRadioOn( + // Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore + // return condition here. + /* +- if (((pAd->MACVersion&0xffff0000) != 0x28600000) +- && ((pAd->DeviceID == NIC2860_PCIe_DEVICE_ID) +- ||(pAd->DeviceID == NIC2790_PCIe_DEVICE_ID))) +- */ +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n")); +- // 1. Set PCI Link Control in Configuration Space. +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(6000); ++ if (((pAd->MACVersion&0xffff0000) != 0x28600000) ++ && ((pAd->DeviceID == NIC2860_PCIe_DEVICE_ID) ++ ||(pAd->DeviceID == NIC2790_PCIe_DEVICE_ID))) ++ */ ++ { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RT28xxPciAsicRadioOn ()\n")); ++ // 1. Set PCI Link Control in Configuration Space. ++ RTMPPCIeLinkCtrlValueRestore(pAd, ++ RESTORE_WAKEUP); ++ RTMPusecDelay(6000); ++ } + } + } +- } +- + #ifdef PCIE_PS_SUPPORT +-if (!(((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)))) ++ if (! ++ (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)))) + #endif // PCIE_PS_SUPPORT // + { +- pAd->bPCIclkOff = FALSE; +- DBGPRINT(RT_DEBUG_TRACE, ("PSM :309xbPCIclkOff == %d\n", pAd->bPCIclkOff)); ++ pAd->bPCIclkOff = FALSE; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM :309xbPCIclkOff == %d\n", pAd->bPCIclkOff)); + } + // 2. Send wake up command. + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- pAd->bPCIclkOff = FALSE; ++ pAd->bPCIclkOff = FALSE; + // 2-1. wait command ok. + AsicCheckCommanOk(pAd, PowerWakeCID); + RTMP_ASIC_INTERRUPT_ENABLE(pAd); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- if (Level == GUI_IDLE_POWER_SAVE) +- { ++ if (Level == GUI_IDLE_POWER_SAVE) { + #ifdef PCIE_PS_SUPPORT + +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } ++ // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == ++ 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == ++ TRUE)) { ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + } +- else ++ } else + // end johnli + #endif // PCIE_PS_SUPPORT // +- { ++ { + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- { +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { ++ { ++ if (INFRA_ON(pAd) ++ && (pAd->CommonCfg.CentralChannel != ++ pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo. ++ ChannelWidth == BW_40)) { + // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ CentralChannel, ++ FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg. ++ CentralChannel); ++ } else { + // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ Channel, FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg.Channel); + } +- } +- + } ++ ++ } + } +- return TRUE; ++ return TRUE; + + } + +- + /* + ========================================================================== + Description: +@@ -1271,126 +1286,123 @@ if (!(((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_ + + ========================================================================== + */ +-BOOLEAN RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp) ++BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level, IN USHORT TbttNumToNextWakeUp) + { +- WPDMA_GLO_CFG_STRUC DmaCfg; +- UCHAR i, tempBBP_R3 = 0; +- BOOLEAN brc = FALSE, Cancelled; +- UINT32 TbTTTime = 0; +- UINT32 PsPollTime = 0/*, MACValue*/; +- ULONG BeaconPeriodTime; +- UINT32 RxDmaIdx, RxCpuIdx; +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> Lv= %d, TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", Level,pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, pAd->RxRing.RxCpuIdx, pAd->RxRing.RxDmaIdx)); +- +- if (pAd->OpMode == OPMODE_AP && Level==DOT11POWERSAVE) ++ WPDMA_GLO_CFG_STRUC DmaCfg; ++ UCHAR i, tempBBP_R3 = 0; ++ BOOLEAN brc = FALSE, Cancelled; ++ UINT32 TbTTTime = 0; ++ UINT32 PsPollTime = 0 /*, MACValue */ ; ++ ULONG BeaconPeriodTime; ++ UINT32 RxDmaIdx, RxCpuIdx; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicRadioOff ===> Lv= %d, TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", ++ Level, pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, ++ pAd->RxRing.RxCpuIdx, pAd->RxRing.RxDmaIdx)); ++ ++ if (pAd->OpMode == OPMODE_AP && Level == DOT11POWERSAVE) + return FALSE; + +- // Check Rx DMA busy status, if more than half is occupied, give up this radio off. +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &RxDmaIdx); +- RTMP_IO_READ32(pAd, RX_CRX_IDX , &RxCpuIdx); +- if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return1. RxDmaIdx = %d , RxCpuIdx = %d. \n", RxDmaIdx, RxCpuIdx)); ++ // Check Rx DMA busy status, if more than half is occupied, give up this radio off. ++ RTMP_IO_READ32(pAd, RX_DRX_IDX, &RxDmaIdx); ++ RTMP_IO_READ32(pAd, RX_CRX_IDX, &RxCpuIdx); ++ if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE / 3)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicRadioOff ===> return1. RxDmaIdx = %d , RxCpuIdx = %d. \n", ++ RxDmaIdx, RxCpuIdx)); + return FALSE; +- } +- else if ((RxCpuIdx >= RxDmaIdx) && ((RxCpuIdx - RxDmaIdx) < RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return2. RxCpuIdx = %d. RxDmaIdx = %d , \n", RxCpuIdx, RxDmaIdx)); ++ } else if ((RxCpuIdx >= RxDmaIdx) ++ && ((RxCpuIdx - RxDmaIdx) < RX_RING_SIZE / 3)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AsicRadioOff ===> return2. RxCpuIdx = %d. RxDmaIdx = %d , \n", ++ RxCpuIdx, RxDmaIdx)); + return FALSE; + } +- +- // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. ++ // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. + //pAd->bPCIclkOffDisableTx = TRUE; + RTMP_SET_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- && pAd->OpMode == OPMODE_STA +- &&pAd->StaCfg.PSControl.field.EnableNewPS == TRUE +- ) +- { +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ && pAd->OpMode == OPMODE_STA ++ && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + +- if (Level == DOT11POWERSAVE) +- { ++ if (Level == DOT11POWERSAVE) { + RTMP_IO_READ32(pAd, TBTT_TIMER, &TbTTTime); + TbTTTime &= 0x1ffff; + // 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. + // TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms +- if (((64*TbTTTime) <((LEAD_TIME*1024) + 40000)) && (TbttNumToNextWakeUp == 0)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TbTTTime = 0x%x , give up this sleep. \n", TbTTTime)); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- //pAd->bPCIclkOffDisableTx = FALSE; +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); ++ if (((64 * TbTTTime) < ((LEAD_TIME * 1024) + 40000)) ++ && (TbttNumToNextWakeUp == 0)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("TbTTTime = 0x%x , give up this sleep. \n", ++ TbTTTime)); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ //pAd->bPCIclkOffDisableTx = FALSE; ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return FALSE; +- } +- else +- { +- PsPollTime = (64*TbTTTime- LEAD_TIME*1024)/1000; ++ } else { ++ PsPollTime = ++ (64 * TbTTTime - LEAD_TIME * 1024) / 1000; + #ifdef PCIE_PS_SUPPORT +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- PsPollTime -= 5; +- } +- else ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) ++ || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field. ++ rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field. ++ EnableNewPS == TRUE)) { ++ PsPollTime -= 5; ++ } else + #endif // PCIE_PS_SUPPORT // +- PsPollTime -= 3; ++ PsPollTime -= 3; + +- BeaconPeriodTime = pAd->CommonCfg.BeaconPeriod*102/100; ++ BeaconPeriodTime = ++ pAd->CommonCfg.BeaconPeriod * 102 / 100; + if (TbttNumToNextWakeUp > 0) +- PsPollTime += ((TbttNumToNextWakeUp -1) * BeaconPeriodTime); ++ PsPollTime += ++ ((TbttNumToNextWakeUp - ++ 1) * BeaconPeriodTime); + +- pAd->Mlme.bPsPollTimerRunning = TRUE; +- RTMPSetTimer(&pAd->Mlme.PsPollTimer, PsPollTime); ++ pAd->Mlme.bPsPollTimerRunning = TRUE; ++ RTMPSetTimer(&pAd->Mlme.PsPollTimer, ++ PsPollTime); + } + } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::Level!=DOT11POWERSAVE \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RT28xxPciAsicRadioOff::Level!=DOT11POWERSAVE \n")); + } + + pAd->bPCIclkOffDisableTx = FALSE; + +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + +- // Set to 1R. +- if (pAd->Antenna.field.RxPath > 1 && pAd->OpMode == OPMODE_STA) +- { +- tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); ++ // Set to 1R. ++ if (pAd->Antenna.field.RxPath > 1 && pAd->OpMode == OPMODE_STA) { ++ tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, tempBBP_R3); + } +- + // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if ((INFRA_ON(pAd) || pAd->OpMode == OPMODE_AP) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { ++ if ((INFRA_ON(pAd) || pAd->OpMode == OPMODE_AP) ++ && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) { + // Must using 40MHz. + AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { ++ } else { + // Must using 20MHz. + AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); + } + +- if (Level != RTMP_HALT) +- { ++ if (Level != RTMP_HALT) { + // Change Interrupt bitmask. +- // When PCI clock is off, don't want to service interrupt. +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); +- } +- else +- { ++ // When PCI clock is off, don't want to service interrupt. ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); ++ } else { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } + +- + RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); + // 2. Send Sleep command + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +@@ -1403,62 +1415,58 @@ BOOLEAN RT28xxPciAsicRadioOff( + + // 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. + // If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. +- if ((Level == DOT11POWERSAVE) && (brc == TRUE)) +- { ++ if ((Level == DOT11POWERSAVE) && (brc == TRUE)) { + AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. + // 3-1. Wait command success + AsicCheckCommanOk(pAd, PowerRadioOffCID); +- } +- else if (brc == TRUE) +- { ++ } else if (brc == TRUE) { + AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. + // 3-1. Wait command success + AsicCheckCommanOk(pAd, PowerRadioOffCID); + } +- + // 1. Wait DMA not busy + i = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- if ((DmaCfg.field.RxDMABusy == 0) && (DmaCfg.field.TxDMABusy == 0)) ++ if ((DmaCfg.field.RxDMABusy == 0) ++ && (DmaCfg.field.TxDMABusy == 0)) + break; + RTMPusecDelay(20); + i++; +- }while(i < 50); ++ } while (i < 50); + + /* +- if (i >= 50) +- { +- pAd->CheckDmaBusyCount++; +- DBGPRINT(RT_DEBUG_TRACE, ("DMA Rx keeps busy. return on AsicRadioOff () CheckDmaBusyCount = %d \n", pAd->CheckDmaBusyCount)); +- } +- else +- { +- pAd->CheckDmaBusyCount = 0; +- } +- */ ++ if (i >= 50) ++ { ++ pAd->CheckDmaBusyCount++; ++ DBGPRINT(RT_DEBUG_TRACE, ("DMA Rx keeps busy. return on AsicRadioOff () CheckDmaBusyCount = %d \n", pAd->CheckDmaBusyCount)); ++ } ++ else ++ { ++ pAd->CheckDmaBusyCount = 0; ++ } ++ */ + //KH Debug:My original codes have the follwoing codes, but currecnt codes do not have it. + // Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment. +-RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280); ++ RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280); + //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ); + + #ifdef PCIE_PS_SUPPORT +-if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOff::3090 return to skip the following TbttNumToNextWakeUp setting for 279x\n")); +- pAd->bPCIclkOff = TRUE; +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- // For this case, doesn't need to below actions, so return here. +- return brc; ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RT28xxPciAsicRadioOff::3090 return to skip the following TbttNumToNextWakeUp setting for 279x\n")); ++ pAd->bPCIclkOff = TRUE; ++ RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); ++ // For this case, doesn't need to below actions, so return here. ++ return brc; + } + #endif // PCIE_PS_SUPPORT // + +- if (Level == DOT11POWERSAVE) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ if (Level == DOT11POWERSAVE) { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; + //RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); + + // we have decided to SLEEP, so at least do it for a BEACON period. +@@ -1474,105 +1482,97 @@ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(p + AutoWakeupCfg.field.AutoLeadTime = LEAD_TIME; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + } +- + // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. +- if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) +- { ++ if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) { + if ((brc == TRUE) && (i < 50)) + RTMPPCIeLinkCtrlSetting(pAd, 1); + } + // 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function +- else if (pAd->OpMode == OPMODE_STA) +- { ++ else if (pAd->OpMode == OPMODE_STA) { + if ((brc == TRUE) && (i < 50)) + RTMPPCIeLinkCtrlSetting(pAd, 3); + } +- + //pAd->bPCIclkOffDisableTx = FALSE; + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return TRUE; + } + +- +- +- +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd) ++VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + { +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; + +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s===>\n", __func__)); + +- if ((pAd->OpMode == OPMODE_AP) || +- ((pAd->OpMode == OPMODE_STA) +- && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- ||pAd->StaCfg.PSControl.field.EnableNewPS == FALSE +- ))) +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); ++ if ((pAd->OpMode == OPMODE_AP) || ((pAd->OpMode == OPMODE_STA) ++ && ++ (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_PCIE_DEVICE) ++ || pAd->StaCfg.PSControl.field. ++ EnableNewPS == FALSE))) { ++ RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + //NICResetFromError(pAd); + +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); ++ RTMPRingCleanUp(pAd, QID_AC_BK); ++ RTMPRingCleanUp(pAd, QID_AC_BE); ++ RTMPRingCleanUp(pAd, QID_AC_VI); ++ RTMPRingCleanUp(pAd, QID_AC_VO); ++ RTMPRingCleanUp(pAd, QID_MGMT); ++ RTMPRingCleanUp(pAd, QID_RX); + +- // Enable Tx/Rx +- RTMPEnableRxTx(pAd); ++ // Enable Tx/Rx ++ RTMPEnableRxTx(pAd); + +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); ++ // Clear Radio off flag ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +- } ++ // Set LED ++ RTMPSetLED(pAd, LED_RADIO_ON); ++ } + +- if ((pAd->OpMode == OPMODE_STA) && +- (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- BOOLEAN Cancelled; ++ if ((pAd->OpMode == OPMODE_STA) && ++ (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ BOOLEAN Cancelled; + +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); ++ RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); + +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 40); +- } ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 40); ++ } + } + +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd) ++VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + { +- BOOLEAN brc=TRUE; ++ BOOLEAN brc = TRUE; + +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ++ return; + + // Link down first if any association exists +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- { ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { + MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *pMsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ MLME_QUEUE_ELEM *pMsgElem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); + +- if (pMsgElem) +- { +- COPY_MAC_ADDR(&DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DISASSOC_STA_LEAVING; ++ if (pMsgElem) { ++ COPY_MAC_ADDR(&DisReq.Addr, ++ pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DISASSOC_STA_LEAVING; + + pMsgElem->Machine = ASSOC_STATE_MACHINE; + pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- pMsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(pMsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ pMsgElem->MsgLen = ++ sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(pMsgElem->Msg, &DisReq, ++ sizeof ++ (MLME_DISASSOC_REQ_STRUCT)); + + MlmeDisassocReqAction(pAd, pMsgElem); + kfree(pMsgElem); +@@ -1582,57 +1582,58 @@ VOID RT28xxPciMlmeRadioOFF( + } + } + +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("%s===>\n", __func__)); + + // Set Radio off flag + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +- { +- BOOLEAN Cancelled; +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + { +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- } ++ BOOLEAN Cancelled; ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { ++ RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, ++ &Cancelled); ++ RTMP_CLEAR_FLAG(pAd, ++ fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); ++ } + // If during power safe mode. +- if (pAd->StaCfg.bRadio == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->MlmeRadioOff() return on bRadio == TRUE; \n")); ++ if (pAd->StaCfg.bRadio == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("-->MlmeRadioOff() return on bRadio == TRUE; \n")); + return; + } + // Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). + if (IDLE_ON(pAd) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) + { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- BOOLEAN Cancelled; +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ BOOLEAN Cancelled; ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, ++ &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, ++ &Cancelled); ++ } + } +- +- // Link down first if any association exists +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- LinkDown(pAd, FALSE); +- RTMPusecDelay(10000); +- //========================================== +- // Clean up old bss table +- BssTableInit(&pAd->ScanTab); +- +- /* +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- return; +- } +- */ +- } ++ // Link down first if any association exists ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) ++ LinkDown(pAd, FALSE); ++ RTMPusecDelay(10000); ++ //========================================== ++ // Clean up old bss table ++ BssTableInit(&pAd->ScanTab); ++ ++ /* ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) ++ { ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ return; ++ } ++ */ ++ } + + // Set LED.Move to here for fixing LED bug. This flag must be called after LinkDown + RTMPSetLED(pAd, LED_RADIO_OFF); +@@ -1640,21 +1641,19 @@ VOID RT28xxPciMlmeRadioOFF( + //KH Debug:All PCIe devices need to use timer to execute radio off function, or the PCIe&&EnableNewPS needs. + //KH Ans:It is right, because only when the PCIe and EnableNewPs is true, we need to delay the RadioOffTimer + //to avoid the deadlock with PCIe Power saving function. +-if (pAd->OpMode == OPMODE_STA&& +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)&& +- pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- } +-else +-{ +- brc=RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); ++ if (pAd->OpMode == OPMODE_STA && ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) && ++ pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { ++ RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); ++ } else { ++ brc = RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); + +- if (brc==FALSE) +- { +- DBGPRINT(RT_DEBUG_ERROR,("%s call RT28xxPciAsicRadioOff fail !!\n", __func__)); ++ if (brc == FALSE) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s call RT28xxPciAsicRadioOff fail !!\n", ++ __func__)); ++ } + } +-} + /* + */ + } +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index ad8c601..e537455 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -27,10 +27,8 @@ + + #ifdef RTMP_MAC_USB + +- + #include "../rt_config.h" + +- + /* + ======================================================================== + Routine Description: +@@ -50,50 +48,46 @@ Note: + NDIS packet descriptor. + ======================================================================== + */ +-NDIS_STATUS NICInitRecv( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS NICInitRecv(IN PRTMP_ADAPTER pAd) + { +- UCHAR i; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- ++ UCHAR i; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); + pObj = pObj; + + //InterlockedExchange(&pAd->PendingRx, 0); + pAd->PendingRx = 0; +- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index +- pAd->NextRxBulkInIndex = 0 ; //RX_RING_SIZE -1; // Rx Bulk pointer +- pAd->NextRxBulkInPosition = 0; ++ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index ++ pAd->NextRxBulkInIndex = 0; //RX_RING_SIZE -1; // Rx Bulk pointer ++ pAd->NextRxBulkInPosition = 0; + +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ for (i = 0; i < (RX_RING_SIZE); i++) { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); + + //Allocate URB + pRxContext->pUrb = RTUSB_ALLOC_URB(0); +- if (pRxContext->pUrb == NULL) +- { ++ if (pRxContext->pUrb == NULL) { + Status = NDIS_STATUS_RESOURCES; + goto out1; + } +- + // Allocate transfer buffer +- pRxContext->TransferBuffer = RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, &pRxContext->data_dma); +- if (pRxContext->TransferBuffer == NULL) +- { ++ pRxContext->TransferBuffer = ++ RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, ++ &pRxContext->data_dma); ++ if (pRxContext->TransferBuffer == NULL) { + Status = NDIS_STATUS_RESOURCES; + goto out1; + } + + NdisZeroMemory(pRxContext->TransferBuffer, MAX_RXBULK_SIZE); + +- pRxContext->pAd = pAd; ++ pRxContext->pAd = pAd; + pRxContext->pIrp = NULL; +- pRxContext->InUse = FALSE; +- pRxContext->IRPPending = FALSE; +- pRxContext->Readable = FALSE; ++ pRxContext->InUse = FALSE; ++ pRxContext->IRPPending = FALSE; ++ pRxContext->Readable = FALSE; + //pRxContext->ReorderInUse = FALSE; + pRxContext->bRxHandling = FALSE; + pRxContext->BulkInOffset = 0; +@@ -103,19 +97,17 @@ NDIS_STATUS NICInitRecv( + return Status; + + out1: +- for (i = 0; i < (RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ for (i = 0; i < (RX_RING_SIZE); i++) { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); + +- if (NULL != pRxContext->TransferBuffer) +- { ++ if (NULL != pRxContext->TransferBuffer) { + RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, +- pRxContext->TransferBuffer, pRxContext->data_dma); ++ pRxContext->TransferBuffer, ++ pRxContext->data_dma); + pRxContext->TransferBuffer = NULL; + } + +- if (NULL != pRxContext->pUrb) +- { ++ if (NULL != pRxContext->pUrb) { + RTUSB_UNLINK_URB(pRxContext->pUrb); + RTUSB_FREE_URB(pRxContext->pUrb); + pRxContext->pUrb = NULL; +@@ -125,7 +117,6 @@ out1: + return Status; + } + +- + /* + ======================================================================== + Routine Description: +@@ -141,8 +132,7 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS NICInitTransmit( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + { + #define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \ + Context->pUrb = RTUSB_ALLOC_URB(0); \ +@@ -169,60 +159,59 @@ NDIS_STATUS NICInitTransmit( + Context->data_dma); \ + Context->TransferBuffer = NULL; } + +- UCHAR i, acidx; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- PTX_CONTEXT pNullContext = &(pAd->NullContext); +- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); +- PTX_CONTEXT pRTSContext = &(pAd->RTSContext); +- PTX_CONTEXT pMLMEContext = NULL; +-// PHT_TX_CONTEXT pHTTXContext = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- PVOID RingBaseVa; +-// RTMP_TX_RING *pTxRing; +- RTMP_MGMT_RING *pMgmtRing; ++ UCHAR i, acidx; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ PTX_CONTEXT pNullContext = &(pAd->NullContext); ++ PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); ++ PTX_CONTEXT pRTSContext = &(pAd->RTSContext); ++ PTX_CONTEXT pMLMEContext = NULL; ++// PHT_TX_CONTEXT pHTTXContext = NULL; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ PVOID RingBaseVa; ++// RTMP_TX_RING *pTxRing; ++ RTMP_MGMT_RING *pMgmtRing; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n")); + pObj = pObj; + + // Init 4 set of Tx parameters +- for(acidx = 0; acidx < NUM_OF_TX_RING; acidx++) +- { ++ for (acidx = 0; acidx < NUM_OF_TX_RING; acidx++) { + // Initialize all Transmit releated queues + InitializeQueueHeader(&pAd->TxSwQueue[acidx]); + + // Next Local tx ring pointer waiting for buck out + pAd->NextBulkOutIndex[acidx] = acidx; +- pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag ++ pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag + //pAd->DataBulkDoneIdx[acidx] = 0; + } + +- //pAd->NextMLMEIndex = 0; +- //pAd->PushMgmtIndex = 0; +- //pAd->PopMgmtIndex = 0; ++ //pAd->NextMLMEIndex = 0; ++ //pAd->PushMgmtIndex = 0; ++ //pAd->PopMgmtIndex = 0; + //InterlockedExchange(&pAd->MgmtQueueSize, 0); + //InterlockedExchange(&pAd->TxCount, 0); + +- //pAd->PrioRingFirstIndex = 0; +- //pAd->PrioRingTxCnt = 0; ++ //pAd->PrioRingFirstIndex = 0; ++ //pAd->PrioRingTxCnt = 0; + +- do +- { ++ do { + // + // TX_RING_SIZE, 4 ACs + // +- for(acidx=0; acidx<4; acidx++) +- { +- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); ++ for (acidx = 0; acidx < 4; acidx++) { ++ PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); + + NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT)); + //Allocate URB +- LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, sizeof(HTTX_BUFFER), Status, +- ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", acidx), +- done, +- ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", acidx), +- out1); +- +- NdisZeroMemory(pHTTXContext->TransferBuffer->Aggregation, 4); ++ LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, ++ sizeof(HTTX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", ++ acidx), done, ++ ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", ++ acidx), out1); ++ ++ NdisZeroMemory(pHTTXContext->TransferBuffer-> ++ Aggregation, 4); + pHTTXContext->pAd = pAd; + pHTTXContext->pIrp = NULL; + pHTTXContext->IRPPending = FALSE; +@@ -237,27 +226,27 @@ NDIS_STATUS NICInitTransmit( + pAd->BulkOutPending[acidx] = FALSE; + } + +- + // + // MGMT_RING_SIZE + // + + // Allocate MGMT ring descriptor's memory +- pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * sizeof(TX_CONTEXT); +- os_alloc_mem(pAd, (PUCHAR *)(&pAd->MgmtDescRing.AllocVa), pAd->MgmtDescRing.AllocSize); +- if (pAd->MgmtDescRing.AllocVa == NULL) +- { ++ pAd->MgmtDescRing.AllocSize = ++ MGMT_RING_SIZE * sizeof(TX_CONTEXT); ++ os_alloc_mem(pAd, (PUCHAR *) (&pAd->MgmtDescRing.AllocVa), ++ pAd->MgmtDescRing.AllocSize); ++ if (pAd->MgmtDescRing.AllocVa == NULL) { + DBGPRINT_ERR(("Failed to allocate a big buffer for MgmtDescRing!\n")); + Status = NDIS_STATUS_RESOURCES; + goto out1; + } +- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize); +- RingBaseVa = pAd->MgmtDescRing.AllocVa; ++ NdisZeroMemory(pAd->MgmtDescRing.AllocVa, ++ pAd->MgmtDescRing.AllocSize); ++ RingBaseVa = pAd->MgmtDescRing.AllocVa; + + // Initialize MGMT Ring and associated buffer memory + pMgmtRing = &pAd->MgmtRing; +- for (i = 0; i < MGMT_RING_SIZE; i++) +- { ++ for (i = 0; i < MGMT_RING_SIZE; i++) { + // link the pre-allocated Mgmt buffer to MgmtRing.Cell + pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT); + pMgmtRing->Cell[i].AllocVa = RingBaseVa; +@@ -265,11 +254,13 @@ NDIS_STATUS NICInitTransmit( + pMgmtRing->Cell[i].pNextNdisPacket = NULL; + + //Allocate URB for MLMEContext +- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ pMLMEContext = ++ (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; + pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); +- if (pMLMEContext->pUrb == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", i)); ++ if (pMLMEContext->pUrb == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", ++ i)); + Status = NDIS_STATUS_RESOURCES; + goto out2; + } +@@ -285,7 +276,8 @@ NDIS_STATUS NICInitTransmit( + // Offset to next ring descriptor address + RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT); + } +- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", i)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MGMT Ring: total %d entry allocated\n", i)); + + //pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1); + pAd->MgmtRing.TxSwFreeIdx = MGMT_RING_SIZE; +@@ -295,19 +287,19 @@ NDIS_STATUS NICInitTransmit( + // + // BEACON_RING_SIZE + // +- for(i=0; iBeaconContext[i]); +- ++ PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); + + NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT)); + + //Allocate URB +- LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", i), +- out2, +- ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", i), +- out3); ++ LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, ++ sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", ++ i), out2, ++ ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", ++ i), out3); + + pBeaconContext->pAd = pAd; + pBeaconContext->pIrp = NULL; +@@ -321,11 +313,12 @@ NDIS_STATUS NICInitTransmit( + NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT)); + + //Allocate URB +- LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX NullContext urb!! \n"), +- out3, +- ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"), +- out4); ++ LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), ++ Status, ++ ("<-- ERROR in Alloc TX NullContext urb!! \n"), ++ out3, ++ ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"), ++ out4); + + pNullContext->pAd = pAd; + pNullContext->pIrp = NULL; +@@ -338,11 +331,12 @@ NDIS_STATUS NICInitTransmit( + NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT)); + + //Allocate URB +- LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX RTSContext urb!! \n"), +- out4, +- ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"), +- out5); ++ LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), ++ Status, ++ ("<-- ERROR in Alloc TX RTSContext urb!! \n"), ++ out4, ++ ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"), ++ out5); + + pRTSContext->pAd = pAd; + pRTSContext->pIrp = NULL; +@@ -354,11 +348,12 @@ NDIS_STATUS NICInitTransmit( + // + //NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); + //Allocate URB +- LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, sizeof(TX_BUFFER), Status, +- ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), +- out5, +- ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"), +- out6); ++ LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, ++ sizeof(TX_BUFFER), Status, ++ ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), ++ out5, ++ ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"), ++ out6); + + pPsPollContext->pAd = pAd; + pPsPollContext->pIrp = NULL; +@@ -367,8 +362,7 @@ NDIS_STATUS NICInitTransmit( + pPsPollContext->bAggregatible = FALSE; + pPsPollContext->LastOne = TRUE; + +- } while (FALSE); +- ++ } while (FALSE); + + done: + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTransmit(Status=%d)\n", Status)); +@@ -386,30 +380,28 @@ out4: + LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); + + out3: +- for(i=0; iBeaconContext[i]); ++ for (i = 0; i < BEACON_RING_SIZE; i++) { ++ PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); + if (pBeaconContext) + LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); + } + + out2: +- if (pAd->MgmtDescRing.AllocVa) +- { ++ if (pAd->MgmtDescRing.AllocVa) { + pMgmtRing = &pAd->MgmtRing; +- for(i=0; iMgmtRing.Cell[i].AllocVa; ++ for (i = 0; i < MGMT_RING_SIZE; i++) { ++ pMLMEContext = ++ (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; + if (pMLMEContext) +- LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pMLMEContext, ++ sizeof(TX_BUFFER)); + } + os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); + pAd->MgmtDescRing.AllocVa = NULL; + } + + out1: +- for (acidx = 0; acidx < 4; acidx++) +- { ++ for (acidx = 0; acidx < 4; acidx++) { + PHT_TX_CONTEXT pTxContext = &(pAd->TxContext[acidx]); + if (pTxContext) + LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER)); +@@ -420,7 +412,6 @@ out1: + return Status; + } + +- + /* + ======================================================================== + Routine Description: +@@ -437,26 +428,21 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { +-// COUNTER_802_11 pCounter = &pAd->WlanCounters; +- NDIS_STATUS Status; +- INT num; +- ++// COUNTER_802_11 pCounter = &pAd->WlanCounters; ++ NDIS_STATUS Status; ++ INT num; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); + +- +- do +- { ++ do { + // Init the CmdQ and CmdQLock + NdisAllocateSpinLock(&pAd->CmdQLock); + NdisAcquireSpinLock(&pAd->CmdQLock); + RTUSBInitializeCmdQ(&pAd->CmdQ); + NdisReleaseSpinLock(&pAd->CmdQLock); + +- + NdisAllocateSpinLock(&pAd->MLMEBulkOutLock); + //NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock); + NdisAllocateSpinLock(&pAd->BulkOutLock[0]); +@@ -467,26 +453,24 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + NdisAllocateSpinLock(&pAd->BulkOutLock[5]); + NdisAllocateSpinLock(&pAd->BulkInLock); + +- for (num = 0; num < NUM_OF_TX_RING; num++) +- { ++ for (num = 0; num < NUM_OF_TX_RING; num++) { + NdisAllocateSpinLock(&pAd->TxContextQueueLock[num]); + } + ++// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX + +-// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX ++// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() ++// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() + +-// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() +-// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() +- +-// for(num=0; numBATable.BARecEntry[num].RxReRingLock); +-// } ++// for(num=0; numBATable.BARecEntry[num].RxReRingLock); ++// } + + // + // Init Mac Table + // +-// MacTableInitialize(pAd); ++// MacTableInitialize(pAd); + + // + // Init send data structures and related parameters +@@ -507,18 +491,18 @@ NDIS_STATUS RTMPAllocTxRxRingMemory( + } while (FALSE); + + NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); +- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); ++ pAd->FragFrame.pFragPacket = ++ RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); + +- if (pAd->FragFrame.pFragPacket == NULL) +- { ++ if (pAd->FragFrame.pFragPacket == NULL) { + Status = NDIS_STATUS_RESOURCES; + } + +- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); ++ DBGPRINT_S(Status, ++ ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status)); + return Status; + } + +- + /* + ======================================================================== + Routine Description: +@@ -535,8 +519,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { + #define LM_URB_FREE(pObj, Context, BufferSize) \ + if (NULL != Context->pUrb) { \ +@@ -549,23 +532,21 @@ VOID RTMPFreeTxRxRingMemory( + Context->data_dma); \ + Context->TransferBuffer = NULL; } + +- +- UINT i, acidx; +- PTX_CONTEXT pNullContext = &pAd->NullContext; +- PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; +- PTX_CONTEXT pRTSContext = &pAd->RTSContext; +-// PHT_TX_CONTEXT pHTTXContext; +- //PRTMP_REORDERBUF pReorderBuf; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +-// RTMP_TX_RING *pTxRing; ++ UINT i, acidx; ++ PTX_CONTEXT pNullContext = &pAd->NullContext; ++ PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; ++ PTX_CONTEXT pRTSContext = &pAd->RTSContext; ++// PHT_TX_CONTEXT pHTTXContext; ++ //PRTMP_REORDERBUF pReorderBuf; ++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++// RTMP_TX_RING *pTxRing; + + DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); + pObj = pObj; + + // Free all resources for the RECEIVE buffer queue. +- for(i=0; i<(RX_RING_SIZE); i++) +- { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ for (i = 0; i < (RX_RING_SIZE); i++) { ++ PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); + if (pRxContext) + LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE); + } +@@ -579,32 +560,27 @@ VOID RTMPFreeTxRxRingMemory( + // Free RTS frame resource + LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); + +- + // Free beacon frame resource +- for(i=0; iBeaconContext[i]); ++ for (i = 0; i < BEACON_RING_SIZE; i++) { ++ PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); + if (pBeaconContext) + LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); + } + +- + // Free mgmt frame resource +- for(i = 0; i < MGMT_RING_SIZE; i++) +- { +- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa; ++ for (i = 0; i < MGMT_RING_SIZE; i++) { ++ PTX_CONTEXT pMLMEContext = ++ (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; + //LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); +- if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) +- { +- RTMPFreeNdisPacket(pAd, pAd->MgmtRing.Cell[i].pNdisPacket); ++ if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) { ++ RTMPFreeNdisPacket(pAd, ++ pAd->MgmtRing.Cell[i].pNdisPacket); + pAd->MgmtRing.Cell[i].pNdisPacket = NULL; + pMLMEContext->TransferBuffer = NULL; + } + +- if (pMLMEContext) +- { +- if (NULL != pMLMEContext->pUrb) +- { ++ if (pMLMEContext) { ++ if (NULL != pMLMEContext->pUrb) { + RTUSB_UNLINK_URB(pMLMEContext->pUrb); + RTUSB_FREE_URB(pMLMEContext->pUrb); + pMLMEContext->pUrb = NULL; +@@ -614,20 +590,18 @@ VOID RTMPFreeTxRxRingMemory( + if (pAd->MgmtDescRing.AllocVa) + os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); + +- + // Free Tx frame resource +- for (acidx = 0; acidx < 4; acidx++) +- { ++ for (acidx = 0; acidx < 4; acidx++) { + PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); +- if (pHTTXContext) +- LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER)); +- } ++ if (pHTTXContext) ++ LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER)); ++ } + + if (pAd->FragFrame.pFragPacket) +- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS); ++ RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, ++ NDIS_STATUS_SUCCESS); + +- for(i=0; i<6; i++) +- { ++ for (i = 0; i < 6; i++) { + NdisFreeSpinLock(&pAd->BulkOutLock[i]); + } + +@@ -638,17 +612,16 @@ VOID RTMPFreeTxRxRingMemory( + // Clear all pending bulk-out request flags. + RTUSB_CLEAR_BULK_FLAG(pAd, 0xffffffff); + +-// NdisFreeSpinLock(&pAd->MacTabLock); ++// NdisFreeSpinLock(&pAd->MacTabLock); + +-// for(i=0; iBATable.BARecEntry[i].RxReRingLock); +-// } ++// for(i=0; iBATable.BARecEntry[i].RxReRingLock); ++// } + + DBGPRINT(RT_DEBUG_ERROR, ("<--- RTMPFreeTxRxRingMemory\n")); + } + +- + /* + ======================================================================== + Routine Description: +@@ -663,20 +636,17 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RTUSBWriteHWMACAddress( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) + { +- MAC_DW0_STRUC StaMacReg0; +- MAC_DW1_STRUC StaMacReg1; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- LARGE_INTEGER NOW; +- ++ MAC_DW0_STRUC StaMacReg0; ++ MAC_DW1_STRUC StaMacReg1; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ LARGE_INTEGER NOW; + + // initialize the random number generator + RTMP_GetCurrentSystemTime(&NOW); + +- if (pAd->bLocalAdminMAC != TRUE) +- { ++ if (pAd->bLocalAdminMAC != TRUE) { + pAd->CurrentAddress[0] = pAd->PermanentAddress[0]; + pAd->CurrentAddress[1] = pAd->PermanentAddress[1]; + pAd->CurrentAddress[2] = pAd->PermanentAddress[2]; +@@ -692,16 +662,17 @@ NDIS_STATUS RTUSBWriteHWMACAddress( + StaMacReg1.field.Byte4 = pAd->CurrentAddress[4]; + StaMacReg1.field.Byte5 = pAd->CurrentAddress[5]; + StaMacReg1.field.U2MeMask = 0xff; +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("Local MAC = %02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->CurrentAddress[0], pAd->CurrentAddress[1], pAd->CurrentAddress[2], +- pAd->CurrentAddress[3], pAd->CurrentAddress[4], pAd->CurrentAddress[5])); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("Local MAC = %02x:%02x:%02x:%02x:%02x:%02x\n", ++ pAd->CurrentAddress[0], pAd->CurrentAddress[1], ++ pAd->CurrentAddress[2], pAd->CurrentAddress[3], ++ pAd->CurrentAddress[4], pAd->CurrentAddress[5])); + + RTUSBWriteMACRegister(pAd, MAC_ADDR_DW0, StaMacReg0.word); + RTUSBWriteMACRegister(pAd, MAC_ADDR_DW1, StaMacReg1.word); + return Status; + } + +- + /* + ======================================================================== + Routine Description: +@@ -716,13 +687,11 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd) ++VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd) + { + // no use + } + +- + /* + ======================================================================== + Routine Description: +@@ -737,42 +706,40 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd) ++VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + { +- WPDMA_GLO_CFG_STRUC GloCfg; +- USB_DMA_CFG_STRUC UsbCfg; +- int i = 0; +- ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ USB_DMA_CFG_STRUC UsbCfg; ++ int i = 0; + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x4); +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ if ((GloCfg.field.TxDMABusy == 0) ++ && (GloCfg.field.RxDMABusy == 0)) + break; + + DBGPRINT(RT_DEBUG_TRACE, ("==> DMABusy\n")); + RTMPusecDelay(1000); + i++; +- }while ( i <200); +- ++ } while (i < 200); + + RTMPusecDelay(50); + GloCfg.field.EnTXWriteBackDDONE = 1; + GloCfg.field.EnableRxDMA = 1; + GloCfg.field.EnableTxDMA = 1; +- DBGPRINT(RT_DEBUG_TRACE, ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<== WRITE DMA offset 0x208 = 0x%x\n", GloCfg.word)); + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + + UsbCfg.word = 0; + UsbCfg.field.phyclear = 0; + /* usb version is 1.1,do not use bulk in aggregation */ + if (pAd->BulkInMaxPacketSize == 512) +- UsbCfg.field.RxBulkAggEn = 1; ++ UsbCfg.field.RxBulkAggEn = 1; + /* for last packet, PBF might use more than limited, so minus 2 to prevent from error */ +- UsbCfg.field.RxBulkAggLmt = (MAX_RXBULK_SIZE /1024)-3; +- UsbCfg.field.RxBulkAggTOut = 0x80; /* 2006-10-18 */ ++ UsbCfg.field.RxBulkAggLmt = (MAX_RXBULK_SIZE / 1024) - 3; ++ UsbCfg.field.RxBulkAggTOut = 0x80; /* 2006-10-18 */ + UsbCfg.field.RxBulkEn = 1; + UsbCfg.field.TxBulkEn = 1; + +@@ -800,101 +767,96 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER *pAd, +- IN INT apidx, +- IN ULONG FrameLen, +- IN ULONG UpdatePos) ++VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ IN INT apidx, ++ IN ULONG FrameLen, IN ULONG UpdatePos) + { +- PUCHAR pBeaconFrame = NULL; +- UCHAR *ptr; +- UINT i, padding; +- BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; +- UINT32 longValue; +-// USHORT shortValue; +- BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; +- +- +- if (pBeaconFrame == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("pBeaconFrame is NULL!\n")); ++ PUCHAR pBeaconFrame = NULL; ++ UCHAR *ptr; ++ UINT i, padding; ++ BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ UINT32 longValue; ++// USHORT shortValue; ++ BOOLEAN bBcnReq = FALSE; ++ UCHAR bcn_idx = 0; ++ ++ if (pBeaconFrame == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ("pBeaconFrame is NULL!\n")); + return; + } + +- if (pBeaconSync == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("pBeaconSync is NULL!\n")); ++ if (pBeaconSync == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ("pBeaconSync is NULL!\n")); + return; + } +- + //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) || +- // ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) +- if (bBcnReq == FALSE) +- { ++ // ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) ++ // ) ++ if (bBcnReq == FALSE) { + /* when the ra interface is down, do not send its beacon frame */ + /* clear all zero */ +- for(i=0; iBeaconOffset[bcn_idx] + i, 0x00); ++ for (i = 0; i < TXWI_SIZE; i += 4) { ++ RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, ++ 0x00); + } +- pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); ++ pBeaconSync->BeaconBitMap &= ++ (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); + NdisZeroMemory(pBeaconSync->BeaconTxWI[bcn_idx], TXWI_SIZE); +- } +- else +- { +- ptr = (PUCHAR)&pAd->BeaconTxWI; +- if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) +- { // If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. +- pBeaconSync->BeaconBitMap &= (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); +- NdisMoveMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE); ++ } else { ++ ptr = (PUCHAR) & pAd->BeaconTxWI; ++ if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) { // If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. ++ pBeaconSync->BeaconBitMap &= ++ (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); ++ NdisMoveMemory(pBeaconSync->BeaconTxWI[bcn_idx], ++ &pAd->BeaconTxWI, TXWI_SIZE); + } + +- if ((pBeaconSync->BeaconBitMap & (1 << bcn_idx)) != (1 << bcn_idx)) +- { +- for (i=0; iBeaconBitMap & (1 << bcn_idx)) != ++ (1 << bcn_idx)) { ++ for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field + { +- longValue = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, longValue); ++ longValue = ++ *ptr + (*(ptr + 1) << 8) + ++ (*(ptr + 2) << 16) + (*(ptr + 3) << 24); ++ RTMP_IO_WRITE32(pAd, ++ pAd->BeaconOffset[bcn_idx] + i, ++ longValue); + ptr += 4; + } + } + + ptr = pBeaconSync->BeaconBuf[bcn_idx]; + padding = (FrameLen & 0x01); +- NdisZeroMemory((PUCHAR)(pBeaconFrame + FrameLen), padding); ++ NdisZeroMemory((PUCHAR) (pBeaconFrame + FrameLen), padding); + FrameLen += padding; +- for (i = 0 ; i < FrameLen /*HW_BEACON_OFFSET*/; i += 2) +- { +- if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) +- { ++ for (i = 0; i < FrameLen /*HW_BEACON_OFFSET */ ; i += 2) { ++ if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) { + NdisMoveMemory(ptr, pBeaconFrame, 2); + //shortValue = *ptr + (*(ptr+1)<<8); + //RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, shortValue); +- RTUSBMultiWrite(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, ptr, 2); ++ RTUSBMultiWrite(pAd, ++ pAd->BeaconOffset[bcn_idx] + ++ TXWI_SIZE + i, ptr, 2); + } +- ptr +=2; ++ ptr += 2; + pBeaconFrame += 2; + } + + pBeaconSync->BeaconBitMap |= (1 << bcn_idx); + + // For AP interface, set the DtimBitOn so that we can send Bcast/Mcast frame out after this beacon frame. +-} ++ } + + } + +- +-VOID RTUSBBssBeaconStop( +- IN RTMP_ADAPTER *pAd) ++VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; ++ BEACON_SYNC_STRUCT *pBeaconSync; + int i, offset; +- BOOLEAN Cancelled = TRUE; ++ BOOLEAN Cancelled = TRUE; + + pBeaconSync = pAd->CommonCfg.pBeaconSync; +- if (pBeaconSync && pBeaconSync->EnableBeacon) +- { ++ if (pBeaconSync && pBeaconSync->EnableBeacon) { + INT NumOfBcn; + + { +@@ -903,13 +865,15 @@ VOID RTUSBBssBeaconStop( + + RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); + +- for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); ++ for (i = 0; i < NumOfBcn; i++) { ++ NdisZeroMemory(pBeaconSync->BeaconBuf[i], ++ HW_BEACON_OFFSET); + NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); + +- for (offset=0; offsetBeaconOffset[i] + offset, 0x00); ++ for (offset = 0; offset < HW_BEACON_OFFSET; offset += 4) ++ RTMP_IO_WRITE32(pAd, ++ pAd->BeaconOffset[i] + offset, ++ 0x00); + + pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; + pBeaconSync->TimIELocationInBeacon[i] = 0; +@@ -919,64 +883,66 @@ VOID RTUSBBssBeaconStop( + } + } + +- +-VOID RTUSBBssBeaconStart( +- IN RTMP_ADAPTER *pAd) ++VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + { + int apidx; +- BEACON_SYNC_STRUCT *pBeaconSync; +-// LARGE_INTEGER tsfTime, deltaTime; ++ BEACON_SYNC_STRUCT *pBeaconSync; ++// LARGE_INTEGER tsfTime, deltaTime; + + pBeaconSync = pAd->CommonCfg.pBeaconSync; +- if (pBeaconSync && pBeaconSync->EnableBeacon) +- { ++ if (pBeaconSync && pBeaconSync->EnableBeacon) { + INT NumOfBcn; + + { + NumOfBcn = MAX_MESH_NUM; + } + +- for(apidx=0; apidxBeaconBuf[apidx], HW_BEACON_OFFSET); +- pBeaconSync->CapabilityInfoLocationInBeacon[apidx] = CapabilityInfoLocationInBeacon; +- pBeaconSync->TimIELocationInBeacon[apidx] = TimIELocationInBeacon; +- NdisZeroMemory(pBeaconSync->BeaconTxWI[apidx], TXWI_SIZE); ++ NdisZeroMemory(pBeaconSync->BeaconBuf[apidx], ++ HW_BEACON_OFFSET); ++ pBeaconSync->CapabilityInfoLocationInBeacon[apidx] = ++ CapabilityInfoLocationInBeacon; ++ pBeaconSync->TimIELocationInBeacon[apidx] = ++ TimIELocationInBeacon; ++ NdisZeroMemory(pBeaconSync->BeaconTxWI[apidx], ++ TXWI_SIZE); + } + pBeaconSync->BeaconBitMap = 0; + pBeaconSync->DtimBitOn = 0; + pAd->CommonCfg.BeaconUpdateTimer.Repeat = TRUE; + + pAd->CommonCfg.BeaconAdjust = 0; +- pAd->CommonCfg.BeaconFactor = 0xffffffff / (pAd->CommonCfg.BeaconPeriod << 10); +- pAd->CommonCfg.BeaconRemain = (0xffffffff % (pAd->CommonCfg.BeaconPeriod << 10)) + 1; +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBssBeaconStart:BeaconFactor=%d, BeaconRemain=%d!\n", +- pAd->CommonCfg.BeaconFactor, pAd->CommonCfg.BeaconRemain)); +- RTMPSetTimer(&pAd->CommonCfg.BeaconUpdateTimer, 10 /*pAd->CommonCfg.BeaconPeriod*/); ++ pAd->CommonCfg.BeaconFactor = ++ 0xffffffff / (pAd->CommonCfg.BeaconPeriod << 10); ++ pAd->CommonCfg.BeaconRemain = ++ (0xffffffff % (pAd->CommonCfg.BeaconPeriod << 10)) + 1; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTUSBBssBeaconStart:BeaconFactor=%d, BeaconRemain=%d!\n", ++ pAd->CommonCfg.BeaconFactor, ++ pAd->CommonCfg.BeaconRemain)); ++ RTMPSetTimer(&pAd->CommonCfg.BeaconUpdateTimer, ++ 10 /*pAd->CommonCfg.BeaconPeriod */ ); + + } + } + +- +-VOID RTUSBBssBeaconInit( +- IN RTMP_ADAPTER *pAd) ++VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; ++ BEACON_SYNC_STRUCT *pBeaconSync; + int i; + +- os_alloc_mem(pAd, (PUCHAR *)(&pAd->CommonCfg.pBeaconSync), sizeof(BEACON_SYNC_STRUCT)); ++ os_alloc_mem(pAd, (PUCHAR *) (&pAd->CommonCfg.pBeaconSync), ++ sizeof(BEACON_SYNC_STRUCT)); + //NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); +- if (pAd->CommonCfg.pBeaconSync) +- { ++ if (pAd->CommonCfg.pBeaconSync) { + pBeaconSync = pAd->CommonCfg.pBeaconSync; + NdisZeroMemory(pBeaconSync, sizeof(BEACON_SYNC_STRUCT)); +- for(i=0; i < HW_BEACON_MAX_COUNT; i++) +- { +- NdisZeroMemory(pBeaconSync->BeaconBuf[i], HW_BEACON_OFFSET); ++ for (i = 0; i < HW_BEACON_MAX_COUNT; i++) { ++ NdisZeroMemory(pBeaconSync->BeaconBuf[i], ++ HW_BEACON_OFFSET); + pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; + pBeaconSync->TimIELocationInBeacon[i] = 0; + NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); +@@ -988,24 +954,21 @@ VOID RTUSBBssBeaconInit( + } + } + +- +-VOID RTUSBBssBeaconExit( +- IN RTMP_ADAPTER *pAd) ++VOID RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; +- BOOLEAN Cancelled = TRUE; ++ BEACON_SYNC_STRUCT *pBeaconSync; ++ BOOLEAN Cancelled = TRUE; + int i; + +- if (pAd->CommonCfg.pBeaconSync) +- { ++ if (pAd->CommonCfg.pBeaconSync) { + pBeaconSync = pAd->CommonCfg.pBeaconSync; + pBeaconSync->EnableBeacon = FALSE; + RTMPCancelTimer(&pAd->CommonCfg.BeaconUpdateTimer, &Cancelled); + pBeaconSync->BeaconBitMap = 0; + +- for(i=0; iBeaconBuf[i], HW_BEACON_OFFSET); ++ for (i = 0; i < HW_BEACON_MAX_COUNT; i++) { ++ NdisZeroMemory(pBeaconSync->BeaconBuf[i], ++ HW_BEACON_OFFSET); + pBeaconSync->CapabilityInfoLocationInBeacon[i] = 0; + pBeaconSync->TimIELocationInBeacon[i] = 0; + NdisZeroMemory(pBeaconSync->BeaconTxWI[i], TXWI_SIZE); +@@ -1016,7 +979,6 @@ VOID RTUSBBssBeaconExit( + } + } + +- + /* + ======================================================================== + Routine Description: +@@ -1035,61 +997,52 @@ VOID RTUSBBssBeaconExit( + + ======================================================================== + */ +-VOID BeaconUpdateExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID BeaconUpdateExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)FunctionContext; +- LARGE_INTEGER tsfTime_a;//, tsfTime_b, deltaTime_exp, deltaTime_ab; +- UINT32 delta, delta2MS, period2US, remain, remain_low, remain_high; +-// BOOLEAN positive; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; ++ LARGE_INTEGER tsfTime_a; //, tsfTime_b, deltaTime_exp, deltaTime_ab; ++ UINT32 delta, delta2MS, period2US, remain, remain_low, remain_high; ++// BOOLEAN positive; + +- if (pAd->CommonCfg.IsUpdateBeacon==TRUE) +- { ++ if (pAd->CommonCfg.IsUpdateBeacon == TRUE) { + ReSyncBeaconTime(pAd); + +- + } + + RTMP_IO_READ32(pAd, TSF_TIMER_DW0, &tsfTime_a.u.LowPart); + RTMP_IO_READ32(pAd, TSF_TIMER_DW1, &tsfTime_a.u.HighPart); + +- + //positive=getDeltaTime(tsfTime_a, expectedTime, &deltaTime_exp); + period2US = (pAd->CommonCfg.BeaconPeriod << 10); + remain_high = pAd->CommonCfg.BeaconRemain * tsfTime_a.u.HighPart; + remain_low = tsfTime_a.u.LowPart % (pAd->CommonCfg.BeaconPeriod << 10); +- remain = (remain_high + remain_low)%(pAd->CommonCfg.BeaconPeriod << 10); ++ remain = ++ (remain_high + remain_low) % (pAd->CommonCfg.BeaconPeriod << 10); + delta = (pAd->CommonCfg.BeaconPeriod << 10) - remain; + +- delta2MS = (delta>>10); +- if (delta2MS > 150) +- { ++ delta2MS = (delta >> 10); ++ if (delta2MS > 150) { + pAd->CommonCfg.BeaconUpdateTimer.TimerValue = 100; +- pAd->CommonCfg.IsUpdateBeacon=FALSE; +- } +- else +- { ++ pAd->CommonCfg.IsUpdateBeacon = FALSE; ++ } else { + pAd->CommonCfg.BeaconUpdateTimer.TimerValue = delta2MS + 10; +- pAd->CommonCfg.IsUpdateBeacon=TRUE; ++ pAd->CommonCfg.IsUpdateBeacon = TRUE; + } + + } + +- + /******************************************************************** + * + * 2870 Radio on/off Related functions. + * + ********************************************************************/ +-VOID RT28xxUsbMlmeRadioOn( +- IN PRTMP_ADAPTER pAd) ++VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + +- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOn()\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("RT28xxUsbMlmeRadioOn()\n")); + + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; +@@ -1109,20 +1062,18 @@ VOID RT28xxUsbMlmeRadioOn( + // Clear Radio off flag + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +- RTUSBBulkReceive(pAd); ++ RTUSBBulkReceive(pAd); + + // Set LED + RTMPSetLED(pAd, LED_RADIO_ON); + } + +- +-VOID RT28xxUsbMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd) ++VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + { +- WPDMA_GLO_CFG_STRUC GloCfg; +- UINT32 Value, i; ++ WPDMA_GLO_CFG_STRUC GloCfg; ++ UINT32 Value, i; + +- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOFF()\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("RT28xxUsbMlmeRadioOFF()\n")); + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; +@@ -1132,22 +1083,25 @@ VOID RT28xxUsbMlmeRadioOFF( + RTMPZeroMemory(pAd->StaCfg.SavedPMK, (PMKID_NO * sizeof(BSSID_INFO))); + + // Link down first if any association exists +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- { ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { ++ if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { + MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *pMsgElem = (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), MEM_ALLOC_FLAG); ++ MLME_QUEUE_ELEM *pMsgElem = ++ (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ MEM_ALLOC_FLAG); + +- if (pMsgElem) +- { +- COPY_MAC_ADDR(&DisReq.Addr, pAd->CommonCfg.Bssid); +- DisReq.Reason = REASON_DISASSOC_STA_LEAVING; ++ if (pMsgElem) { ++ COPY_MAC_ADDR(&DisReq.Addr, ++ pAd->CommonCfg.Bssid); ++ DisReq.Reason = REASON_DISASSOC_STA_LEAVING; + + pMsgElem->Machine = ASSOC_STATE_MACHINE; + pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; +- pMsgElem->MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); +- NdisMoveMemory(pMsgElem->Msg, &DisReq, sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ pMsgElem->MsgLen = ++ sizeof(MLME_DISASSOC_REQ_STRUCT); ++ NdisMoveMemory(pMsgElem->Msg, &DisReq, ++ sizeof ++ (MLME_DISASSOC_REQ_STRUCT)); + + MlmeDisassocReqAction(pAd, pMsgElem); + kfree(pMsgElem); +@@ -1156,7 +1110,6 @@ VOID RT28xxUsbMlmeRadioOFF( + } + } + } +- + // Set Radio off flag + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +@@ -1174,34 +1127,30 @@ VOID RT28xxUsbMlmeRadioOFF( + // Set LED + RTMPSetLED(pAd, LED_RADIO_OFF); + +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) { + // Must using 40MHz. + AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { ++ } else { + // Must using 20MHz. + AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); + } + + // Disable Tx/Rx DMA +- RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA ++ RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA + GloCfg.field.EnableTxDMA = 0; + GloCfg.field.EnableRxDMA = 0; +- RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings ++ RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings + + // Waiting for DMA idle + i = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ if ((GloCfg.field.TxDMABusy == 0) ++ && (GloCfg.field.RxDMABusy == 0)) + break; + + RTMPusecDelay(1000); +- }while (i++ < 100); ++ } while (i++ < 100); + + // Disable MAC Tx/Rx + RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index 457b6d8..92c44c7 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -36,17 +36,16 @@ + */ + #include "../rt_config.h" + ++extern UCHAR CISCO_OUI[]; + +-extern UCHAR CISCO_OUI[]; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; +-extern UCHAR WPS_OUI[]; ++extern UCHAR WPA_OUI[]; ++extern UCHAR RSN_OUI[]; ++extern UCHAR WME_INFO_ELEM[]; ++extern UCHAR WME_PARM_ELEM[]; ++extern UCHAR Ccx2QosInfo[]; ++extern UCHAR RALINK_OUI[]; ++extern UCHAR BROADCOM_OUI[]; ++extern UCHAR WPS_OUI[]; + + /* + ========================================================================== +@@ -59,35 +58,32 @@ extern UCHAR WPS_OUI[]; + + ========================================================================== + */ +-BOOLEAN MlmeAddBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2) ++BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2) + { +- PMLME_ADDBA_REQ_STRUCT pInfo; ++ PMLME_ADDBA_REQ_STRUCT pInfo; + +- pInfo = (MLME_ADDBA_REQ_STRUCT *)Msg; ++ pInfo = (MLME_ADDBA_REQ_STRUCT *) Msg; + +- if ((MsgLen != sizeof(MLME_ADDBA_REQ_STRUCT))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - message lenght not correct.\n")); +- return FALSE; +- } ++ if ((MsgLen != sizeof(MLME_ADDBA_REQ_STRUCT))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeAddBAReqSanity fail - message lenght not correct.\n")); ++ return FALSE; ++ } + +- if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - The peer Mac is not associated yet.\n")); +- return FALSE; +- } ++ if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeAddBAReqSanity fail - The peer Mac is not associated yet.\n")); ++ return FALSE; ++ } + +- if ((pInfo->pAddr[0]&0x01) == 0x01) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - broadcast address not support BA\n")); +- return FALSE; +- } ++ if ((pInfo->pAddr[0] & 0x01) == 0x01) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeAddBAReqSanity fail - broadcast address not support BA\n")); ++ return FALSE; ++ } + +- return TRUE; ++ return TRUE; + } + + /* +@@ -101,131 +97,133 @@ BOOLEAN MlmeAddBAReqSanity( + + ========================================================================== + */ +-BOOLEAN MlmeDelBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen) ++BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen) + { + MLME_DELBA_REQ_STRUCT *pInfo; +- pInfo = (MLME_DELBA_REQ_STRUCT *)Msg; +- +- if ((MsgLen != sizeof(MLME_DELBA_REQ_STRUCT))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - message lenght not correct.\n")); +- return FALSE; +- } +- +- if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - The peer Mac is not associated yet.\n")); +- return FALSE; +- } +- +- if ((pInfo->TID & 0xf0)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - The peer TID is incorrect.\n")); +- return FALSE; +- } +- +- if (NdisEqualMemory(pAd->MacTab.Content[pInfo->Wcid].Addr, pInfo->Addr, MAC_ADDR_LEN) == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MlmeDelBAReqSanity fail - the peer addr dosen't exist.\n")); +- return FALSE; +- } +- +- return TRUE; ++ pInfo = (MLME_DELBA_REQ_STRUCT *) Msg; ++ ++ if ((MsgLen != sizeof(MLME_DELBA_REQ_STRUCT))) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeDelBAReqSanity fail - message lenght not correct.\n")); ++ return FALSE; ++ } ++ ++ if ((pInfo->Wcid >= MAX_LEN_OF_MAC_TABLE)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeDelBAReqSanity fail - The peer Mac is not associated yet.\n")); ++ return FALSE; ++ } ++ ++ if ((pInfo->TID & 0xf0)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeDelBAReqSanity fail - The peer TID is incorrect.\n")); ++ return FALSE; ++ } ++ ++ if (NdisEqualMemory ++ (pAd->MacTab.Content[pInfo->Wcid].Addr, pInfo->Addr, ++ MAC_ADDR_LEN) == 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MlmeDelBAReqSanity fail - the peer addr dosen't exist.\n")); ++ return FALSE; ++ } ++ ++ return TRUE; + } + +-BOOLEAN PeerAddBAReqActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2) ++BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, OUT PUCHAR pAddr2) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; + PFRAME_ADDBA_REQ pAddFrame; +- pAddFrame = (PFRAME_ADDBA_REQ)(pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_REQ))) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request frame length size = %ld incorrect\n", MsgLen)); ++ pAddFrame = (PFRAME_ADDBA_REQ) (pMsg); ++ if (MsgLen < (sizeof(FRAME_ADDBA_REQ))) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBAReqActionSanity: ADDBA Request frame length size = %ld incorrect\n", ++ MsgLen)); + return FALSE; + } + // we support immediate BA. +- *(USHORT *)(&pAddFrame->BaParm) = cpu2le16(*(USHORT *)(&pAddFrame->BaParm)); ++ *(USHORT *) (&pAddFrame->BaParm) = ++ cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); + pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); + pAddFrame->BaStartSeq.word = cpu2le16(pAddFrame->BaStartSeq.word); + +- if (pAddFrame->BaParm.BAPolicy != IMMED_BA) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request Ba Policy[%d] not support\n", pAddFrame->BaParm.BAPolicy)); +- DBGPRINT(RT_DEBUG_ERROR,("ADDBA Request. tid=%x, Bufsize=%x, AMSDUSupported=%x \n", pAddFrame->BaParm.TID, pAddFrame->BaParm.BufSize, pAddFrame->BaParm.AMSDUSupported)); ++ if (pAddFrame->BaParm.BAPolicy != IMMED_BA) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBAReqActionSanity: ADDBA Request Ba Policy[%d] not support\n", ++ pAddFrame->BaParm.BAPolicy)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ADDBA Request. tid=%x, Bufsize=%x, AMSDUSupported=%x \n", ++ pAddFrame->BaParm.TID, pAddFrame->BaParm.BufSize, ++ pAddFrame->BaParm.AMSDUSupported)); + return FALSE; + } +- + // we support immediate BA. +- if (pAddFrame->BaParm.TID &0xfff0) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Request incorrect TID = %d\n", pAddFrame->BaParm.TID)); ++ if (pAddFrame->BaParm.TID & 0xfff0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBAReqActionSanity: ADDBA Request incorrect TID = %d\n", ++ pAddFrame->BaParm.TID)); + return FALSE; + } + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); + return TRUE; + } + +-BOOLEAN PeerAddBARspActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen) ++BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, IN ULONG MsgLen) + { + PFRAME_ADDBA_RSP pAddFrame; + +- pAddFrame = (PFRAME_ADDBA_RSP)(pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_RSP))) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBARspActionSanity: ADDBA Response frame length size = %ld incorrect\n", MsgLen)); ++ pAddFrame = (PFRAME_ADDBA_RSP) (pMsg); ++ if (MsgLen < (sizeof(FRAME_ADDBA_RSP))) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBARspActionSanity: ADDBA Response frame length size = %ld incorrect\n", ++ MsgLen)); + return FALSE; + } + // we support immediate BA. +- *(USHORT *)(&pAddFrame->BaParm) = cpu2le16(*(USHORT *)(&pAddFrame->BaParm)); ++ *(USHORT *) (&pAddFrame->BaParm) = ++ cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); + pAddFrame->StatusCode = cpu2le16(pAddFrame->StatusCode); + pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); + +- if (pAddFrame->BaParm.BAPolicy != IMMED_BA) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBAReqActionSanity: ADDBA Response Ba Policy[%d] not support\n", pAddFrame->BaParm.BAPolicy)); ++ if (pAddFrame->BaParm.BAPolicy != IMMED_BA) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBAReqActionSanity: ADDBA Response Ba Policy[%d] not support\n", ++ pAddFrame->BaParm.BAPolicy)); + return FALSE; + } +- + // we support immediate BA. +- if (pAddFrame->BaParm.TID &0xfff0) +- { +- DBGPRINT(RT_DEBUG_ERROR,("PeerAddBARspActionSanity: ADDBA Response incorrect TID = %d\n", pAddFrame->BaParm.TID)); ++ if (pAddFrame->BaParm.TID & 0xfff0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerAddBARspActionSanity: ADDBA Response incorrect TID = %d\n", ++ pAddFrame->BaParm.TID)); + return FALSE; + } + return TRUE; + + } + +-BOOLEAN PeerDelBAActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN VOID *pMsg, +- IN ULONG MsgLen ) ++BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, IN VOID * pMsg, IN ULONG MsgLen) + { + //PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PFRAME_DELBA_REQ pDelFrame; ++ PFRAME_DELBA_REQ pDelFrame; + if (MsgLen != (sizeof(FRAME_DELBA_REQ))) + return FALSE; + + if (Wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; + +- pDelFrame = (PFRAME_DELBA_REQ)(pMsg); ++ pDelFrame = (PFRAME_DELBA_REQ) (pMsg); + +- *(USHORT *)(&pDelFrame->DelbaParm) = cpu2le16(*(USHORT *)(&pDelFrame->DelbaParm)); ++ *(USHORT *) (&pDelFrame->DelbaParm) = ++ cpu2le16(*(USHORT *) (&pDelFrame->DelbaParm)); + pDelFrame->ReasonCode = cpu2le16(pDelFrame->ReasonCode); + +- if (pDelFrame->DelbaParm.TID &0xfff0) ++ if (pDelFrame->DelbaParm.TID & 0xfff0) + return FALSE; + + return TRUE; +@@ -242,493 +240,469 @@ BOOLEAN PeerDelBAActionSanity( + + ========================================================================== + */ +-BOOLEAN PeerBeaconAndProbeRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- IN UCHAR MsgChannel, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pBssType, +- OUT USHORT *pBeaconPeriod, +- OUT UCHAR *pChannel, +- OUT UCHAR *pNewChannel, +- OUT LARGE_INTEGER *pTimestamp, +- OUT CF_PARM *pCfParm, +- OUT USHORT *pAtimWin, +- OUT USHORT *pCapabilityInfo, +- OUT UCHAR *pErp, +- OUT UCHAR *pDtimCount, +- OUT UCHAR *pDtimPeriod, +- OUT UCHAR *pBcastFlag, +- OUT UCHAR *pMessageToMe, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT UCHAR *pCkipFlag, +- OUT UCHAR *pAironetCellPowerLimit, +- OUT PEDCA_PARM pEdcaParm, +- OUT PQBSS_LOAD_PARM pQbssLoad, +- OUT PQOS_CAPABILITY_PARM pQosCapability, +- OUT ULONG *pRalinkIe, +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pPreNHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT UCHAR *AddHtInfoLen, +- OUT ADD_HT_INFO_IE *AddHtInfo, +- OUT UCHAR *NewExtChannelOffset, // Ht extension channel offset(above or below) +- OUT USHORT *LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE) ++BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT PUCHAR pAddr2, OUT PUCHAR pBssid, OUT CHAR Ssid[], OUT UCHAR * pSsidLen, OUT UCHAR * pBssType, OUT USHORT * pBeaconPeriod, OUT UCHAR * pChannel, OUT UCHAR * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, OUT USHORT * pAtimWin, OUT USHORT * pCapabilityInfo, OUT UCHAR * pErp, OUT UCHAR * pDtimCount, OUT UCHAR * pDtimPeriod, OUT UCHAR * pBcastFlag, OUT UCHAR * pMessageToMe, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT UCHAR * pCkipFlag, OUT UCHAR * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, OUT ULONG * pRalinkIe, OUT UCHAR * pHtCapabilityLen, OUT UCHAR * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT UCHAR * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, OUT UCHAR * NewExtChannelOffset, // Ht extension channel offset(above or below) ++ OUT USHORT * LengthVIE, ++ OUT PNDIS_802_11_VARIABLE_IEs pVIE) + { +- UCHAR *Ptr; +- UCHAR TimLen; +- PFRAME_802_11 pFrame; +- PEID_STRUCT pEid; +- UCHAR SubType; +- UCHAR Sanity; +- //UCHAR ECWMin, ECWMax; +- //MAC_CSR9_STRUC Csr9; +- ULONG Length = 0; ++ UCHAR *Ptr; ++ UCHAR TimLen; ++ PFRAME_802_11 pFrame; ++ PEID_STRUCT pEid; ++ UCHAR SubType; ++ UCHAR Sanity; ++ //UCHAR ECWMin, ECWMax; ++ //MAC_CSR9_STRUC Csr9; ++ ULONG Length = 0; + + // For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel +- // 1. If the AP is 11n enabled, then check the control channel. +- // 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) +- UCHAR CtrlChannel = 0; +- +- // Add for 3 necessary EID field check +- Sanity = 0; +- +- *pAtimWin = 0; +- *pErp = 0; +- *pDtimCount = 0; +- *pDtimPeriod = 0; +- *pBcastFlag = 0; +- *pMessageToMe = 0; +- *pExtRateLen = 0; +- *pCkipFlag = 0; // Default of CkipFlag is 0 +- *pAironetCellPowerLimit = 0xFF; // Default of AironetCellPowerLimit is 0xFF +- *LengthVIE = 0; // Set the length of VIE to init value 0 +- *pHtCapabilityLen = 0; // Set the length of VIE to init value 0 ++ // 1. If the AP is 11n enabled, then check the control channel. ++ // 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) ++ UCHAR CtrlChannel = 0; ++ ++ // Add for 3 necessary EID field check ++ Sanity = 0; ++ ++ *pAtimWin = 0; ++ *pErp = 0; ++ *pDtimCount = 0; ++ *pDtimPeriod = 0; ++ *pBcastFlag = 0; ++ *pMessageToMe = 0; ++ *pExtRateLen = 0; ++ *pCkipFlag = 0; // Default of CkipFlag is 0 ++ *pAironetCellPowerLimit = 0xFF; // Default of AironetCellPowerLimit is 0xFF ++ *LengthVIE = 0; // Set the length of VIE to init value 0 ++ *pHtCapabilityLen = 0; // Set the length of VIE to init value 0 + if (pAd->OpMode == OPMODE_STA) +- *pPreNHtCapabilityLen = 0; // Set the length of VIE to init value 0 +- *AddHtInfoLen = 0; // Set the length of VIE to init value 0 +- *pRalinkIe = 0; +- *pNewChannel = 0; +- *NewExtChannelOffset = 0xff; //Default 0xff means no such IE +- pCfParm->bValid = FALSE; // default: no IE_CF found +- pQbssLoad->bValid = FALSE; // default: no IE_QBSS_LOAD found +- pEdcaParm->bValid = FALSE; // default: no IE_EDCA_PARAMETER found +- pQosCapability->bValid = FALSE; // default: no IE_QOS_CAPABILITY found ++ *pPreNHtCapabilityLen = 0; // Set the length of VIE to init value 0 ++ *AddHtInfoLen = 0; // Set the length of VIE to init value 0 ++ *pRalinkIe = 0; ++ *pNewChannel = 0; ++ *NewExtChannelOffset = 0xff; //Default 0xff means no such IE ++ pCfParm->bValid = FALSE; // default: no IE_CF found ++ pQbssLoad->bValid = FALSE; // default: no IE_QBSS_LOAD found ++ pEdcaParm->bValid = FALSE; // default: no IE_EDCA_PARAMETER found ++ pQosCapability->bValid = FALSE; // default: no IE_QOS_CAPABILITY found ++ ++ pFrame = (PFRAME_802_11) Msg; ++ ++ // get subtype from header ++ SubType = (UCHAR) pFrame->Hdr.FC.SubType; ++ ++ // get Addr2 and BSSID from header ++ COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); ++ COPY_MAC_ADDR(pBssid, pFrame->Hdr.Addr3); + +- pFrame = (PFRAME_802_11)Msg; ++ Ptr = pFrame->Octet; ++ Length += LENGTH_802_11; + +- // get subtype from header +- SubType = (UCHAR)pFrame->Hdr.FC.SubType; ++ // get timestamp from payload and advance the pointer ++ NdisMoveMemory(pTimestamp, Ptr, TIMESTAMP_LEN); + +- // get Addr2 and BSSID from header +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- COPY_MAC_ADDR(pBssid, pFrame->Hdr.Addr3); ++ pTimestamp->u.LowPart = cpu2le32(pTimestamp->u.LowPart); ++ pTimestamp->u.HighPart = cpu2le32(pTimestamp->u.HighPart); + +- Ptr = pFrame->Octet; +- Length += LENGTH_802_11; ++ Ptr += TIMESTAMP_LEN; ++ Length += TIMESTAMP_LEN; + +- // get timestamp from payload and advance the pointer +- NdisMoveMemory(pTimestamp, Ptr, TIMESTAMP_LEN); ++ // get beacon interval from payload and advance the pointer ++ NdisMoveMemory(pBeaconPeriod, Ptr, 2); ++ Ptr += 2; ++ Length += 2; + +- pTimestamp->u.LowPart = cpu2le32(pTimestamp->u.LowPart); +- pTimestamp->u.HighPart = cpu2le32(pTimestamp->u.HighPart); ++ // get capability info from payload and advance the pointer ++ NdisMoveMemory(pCapabilityInfo, Ptr, 2); ++ Ptr += 2; ++ Length += 2; + +- Ptr += TIMESTAMP_LEN; +- Length += TIMESTAMP_LEN; +- +- // get beacon interval from payload and advance the pointer +- NdisMoveMemory(pBeaconPeriod, Ptr, 2); +- Ptr += 2; +- Length += 2; +- +- // get capability info from payload and advance the pointer +- NdisMoveMemory(pCapabilityInfo, Ptr, 2); +- Ptr += 2; +- Length += 2; +- +- if (CAP_IS_ESS_ON(*pCapabilityInfo)) +- *pBssType = BSS_INFRA; +- else +- *pBssType = BSS_ADHOC; +- +- pEid = (PEID_STRUCT) Ptr; +- +- // get variable fields from payload and advance the pointer +- while ((Length + 2 + pEid->Len) <= MsgLen) +- { +- // +- // Secure copy VIE to VarIE[MAX_VIE_LEN] didn't overflow. +- // +- if ((*LengthVIE + pEid->Len + 2) >= MAX_VIE_LEN) +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - Variable IEs out of resource [len(=%d) > MAX_VIE_LEN(=%d)]\n", +- (*LengthVIE + pEid->Len + 2), MAX_VIE_LEN)); +- break; +- } +- +- switch(pEid->Eid) +- { +- case IE_SSID: +- // Already has one SSID EID in this beacon, ignore the second one +- if (Sanity & 0x1) +- break; +- if(pEid->Len <= MAX_LEN_OF_SSID) +- { +- NdisMoveMemory(Ssid, pEid->Octet, pEid->Len); +- *pSsidLen = pEid->Len; +- Sanity |= 0x1; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_SUPP_RATES: +- if(pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- Sanity |= 0x2; +- NdisMoveMemory(SupRate, pEid->Octet, pEid->Len); +- *pSupRateLen = pEid->Len; +- +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, SupRate, pSupRateLen); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_HT_CAP: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! ++ if (CAP_IS_ESS_ON(*pCapabilityInfo)) ++ *pBssType = BSS_INFRA; ++ else ++ *pBssType = BSS_ADHOC; ++ ++ pEid = (PEID_STRUCT) Ptr; ++ ++ // get variable fields from payload and advance the pointer ++ while ((Length + 2 + pEid->Len) <= MsgLen) { ++ // ++ // Secure copy VIE to VarIE[MAX_VIE_LEN] didn't overflow. ++ // ++ if ((*LengthVIE + pEid->Len + 2) >= MAX_VIE_LEN) { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerBeaconAndProbeRspSanity - Variable IEs out of resource [len(=%d) > MAX_VIE_LEN(=%d)]\n", ++ (*LengthVIE + pEid->Len + 2), MAX_VIE_LEN)); ++ break; ++ } ++ ++ switch (pEid->Eid) { ++ case IE_SSID: ++ // Already has one SSID EID in this beacon, ignore the second one ++ if (Sanity & 0x1) ++ break; ++ if (pEid->Len <= MAX_LEN_OF_SSID) { ++ NdisMoveMemory(Ssid, pEid->Octet, pEid->Len); ++ *pSsidLen = pEid->Len; ++ Sanity |= 0x1; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n", ++ pEid->Len)); ++ return FALSE; ++ } ++ break; ++ ++ case IE_SUPP_RATES: ++ if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) { ++ Sanity |= 0x2; ++ NdisMoveMemory(SupRate, pEid->Octet, pEid->Len); ++ *pSupRateLen = pEid->Len; ++ ++ // TODO: 2004-09-14 not a good design here, cause it exclude extra rates ++ // from ScanTab. We should report as is. And filter out unsupported ++ // rates in MlmeAux. ++ // Check against the supported rates ++ // RTMPCheckRates(pAd, SupRate, pSupRateLen); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n", ++ pEid->Len)); ++ return FALSE; ++ } ++ break; ++ ++ case IE_HT_CAP: ++ if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! + { +- NdisMoveMemory(pHtCapability, pEid->Octet, sizeof(HT_CAPABILITY_IE)); ++ NdisMoveMemory(pHtCapability, pEid->Octet, ++ sizeof(HT_CAPABILITY_IE)); + *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. + +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); ++ *(USHORT *) (&pHtCapability->HtCapInfo) = ++ cpu2le16(*(USHORT *) ++ (&pHtCapability->HtCapInfo)); ++ *(USHORT *) (&pHtCapability->ExtHtCapInfo) = ++ cpu2le16(*(USHORT *) ++ (&pHtCapability->ExtHtCapInfo)); + + { + *pPreNHtCapabilityLen = 0; // Nnow we only support 26 bytes. + + Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); ++ NdisMoveMemory(Ptr + *LengthVIE, ++ &pEid->Eid, ++ pEid->Len + 2); + *LengthVIE += (pEid->Len + 2); + } +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_HT_CAP. pEid->Len = %d\n", pEid->Len)); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_HT_CAP. pEid->Len = %d\n", ++ pEid->Len)); + } + +- break; +- case IE_ADD_HT: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) +- { ++ break; ++ case IE_ADD_HT: ++ if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { + // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only + // copy first sizeof(ADD_HT_INFO_IE) +- NdisMoveMemory(AddHtInfo, pEid->Octet, sizeof(ADD_HT_INFO_IE)); ++ NdisMoveMemory(AddHtInfo, pEid->Octet, ++ sizeof(ADD_HT_INFO_IE)); + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; + + CtrlChannel = AddHtInfo->ControlChan; + +- *(USHORT *)(&AddHtInfo->AddHtInfo2) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo2)); +- *(USHORT *)(&AddHtInfo->AddHtInfo3) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo3)); ++ *(USHORT *) (&AddHtInfo->AddHtInfo2) = ++ cpu2le16(*(USHORT *) ++ (&AddHtInfo->AddHtInfo2)); ++ *(USHORT *) (&AddHtInfo->AddHtInfo3) = ++ cpu2le16(*(USHORT *) ++ (&AddHtInfo->AddHtInfo3)); + + { +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); ++ Ptr = (PUCHAR) pVIE; ++ NdisMoveMemory(Ptr + *LengthVIE, ++ &pEid->Eid, ++ pEid->Len + 2); ++ *LengthVIE += (pEid->Len + 2); + } +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_ADD_HT. \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_ADD_HT. \n")); + } + +- break; +- case IE_SECONDARY_CH_OFFSET: +- if (pEid->Len == 1) +- { ++ break; ++ case IE_SECONDARY_CH_OFFSET: ++ if (pEid->Len == 1) { + *NewExtChannelOffset = pEid->Octet[0]; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerBeaconAndProbeRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); + } + +- break; +- case IE_FH_PARM: +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n")); +- break; ++ break; ++ case IE_FH_PARM: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n")); ++ break; + +- case IE_DS_PARM: +- if(pEid->Len == 1) +- { +- *pChannel = *pEid->Octet; ++ case IE_DS_PARM: ++ if (pEid->Len == 1) { ++ *pChannel = *pEid->Octet; + +- { +- if (ChannelSanity(pAd, *pChannel) == 0) +- { ++ { ++ if (ChannelSanity(pAd, *pChannel) == 0) { + +- return FALSE; +- } ++ return FALSE; + } +- +- Sanity |= 0x4; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n",pEid->Len)); +- return FALSE; +- } +- break; +- +- case IE_CF_PARM: +- if(pEid->Len == 6) +- { +- pCfParm->bValid = TRUE; +- pCfParm->CfpCount = pEid->Octet[0]; +- pCfParm->CfpPeriod = pEid->Octet[1]; +- pCfParm->CfpMaxDuration = pEid->Octet[2] + 256 * pEid->Octet[3]; +- pCfParm->CfpDurRemaining = pEid->Octet[4] + 256 * pEid->Octet[5]; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n")); +- return FALSE; +- } +- break; +- +- case IE_IBSS_PARM: +- if(pEid->Len == 2) +- { +- NdisMoveMemory(pAtimWin, pEid->Octet, pEid->Len); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n")); +- return FALSE; +- } +- break; +- +- case IE_TIM: +- if(INFRA_ON(pAd) && SubType == SUBTYPE_BEACON) +- { +- GetTimBit((PCHAR)pEid, pAd->StaActive.Aid, &TimLen, pBcastFlag, pDtimCount, pDtimPeriod, pMessageToMe); +- } +- break; +- case IE_CHANNEL_SWITCH_ANNOUNCEMENT: +- if(pEid->Len == 3) +- { +- *pNewChannel = pEid->Octet[1]; //extract new channel number +- } +- break; +- +- // New for WPA +- // CCX v2 has the same IE, we need to parse that too +- // Wifi WMM use the same IE vale, need to parse that too +- // case IE_WPA: +- case IE_VENDOR_SPECIFIC: +- // Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. +- /*if (NdisEqualMemory(pEid->Octet, BROADCOM_OUI, 3) && (pEid->Len >= 4)) +- { +- if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) +- { +- { +- NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); +- *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. + } ++ ++ Sanity |= 0x4; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n", ++ pEid->Len)); ++ return FALSE; + } +- if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 26)) +- { +- { +- NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); +- *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; // Nnow we only support 26 bytes. ++ break; ++ ++ case IE_CF_PARM: ++ if (pEid->Len == 6) { ++ pCfParm->bValid = TRUE; ++ pCfParm->CfpCount = pEid->Octet[0]; ++ pCfParm->CfpPeriod = pEid->Octet[1]; ++ pCfParm->CfpMaxDuration = ++ pEid->Octet[2] + 256 * pEid->Octet[3]; ++ pCfParm->CfpDurRemaining = ++ pEid->Octet[4] + 256 * pEid->Octet[5]; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n")); ++ return FALSE; ++ } ++ break; ++ ++ case IE_IBSS_PARM: ++ if (pEid->Len == 2) { ++ NdisMoveMemory(pAtimWin, pEid->Octet, ++ pEid->Len); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n")); ++ return FALSE; ++ } ++ break; ++ ++ case IE_TIM: ++ if (INFRA_ON(pAd) && SubType == SUBTYPE_BEACON) { ++ GetTimBit((PCHAR) pEid, pAd->StaActive.Aid, ++ &TimLen, pBcastFlag, pDtimCount, ++ pDtimPeriod, pMessageToMe); ++ } ++ break; ++ case IE_CHANNEL_SWITCH_ANNOUNCEMENT: ++ if (pEid->Len == 3) { ++ *pNewChannel = pEid->Octet[1]; //extract new channel number ++ } ++ break; ++ ++ // New for WPA ++ // CCX v2 has the same IE, we need to parse that too ++ // Wifi WMM use the same IE vale, need to parse that too ++ // case IE_WPA: ++ case IE_VENDOR_SPECIFIC: ++ // Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. ++ // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. ++ /*if (NdisEqualMemory(pEid->Octet, BROADCOM_OUI, 3) && (pEid->Len >= 4)) ++ { ++ if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) ++ { ++ { ++ NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); ++ *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. ++ } ++ } ++ if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 26)) ++ { ++ { ++ NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); ++ *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; // Nnow we only support 26 bytes. ++ } ++ } ++ } ++ */ ++ // Check the OUI version, filter out non-standard usage ++ if (NdisEqualMemory(pEid->Octet, RALINK_OUI, 3) ++ && (pEid->Len == 7)) { ++ //*pRalinkIe = pEid->Octet[3]; ++ if (pEid->Octet[3] != 0) ++ *pRalinkIe = pEid->Octet[3]; ++ else ++ *pRalinkIe = 0xf0000000; // Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag. ++ } ++ // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. ++ ++ // Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP, ++ // Check broadcom-defiend pre-802.11nD1.0 OUI for HT related IE, including HT Capatilities IE and HT Information IE ++ else if ((*pHtCapabilityLen == 0) ++ && NdisEqualMemory(pEid->Octet, PRE_N_HT_OUI, ++ 3) && (pEid->Len >= 4) ++ && (pAd->OpMode == OPMODE_STA)) { ++ if ((pEid->Octet[3] == OUI_PREN_HT_CAP) ++ && (pEid->Len >= 30) ++ && (*pHtCapabilityLen == 0)) { ++ NdisMoveMemory(pHtCapability, ++ &pEid->Octet[4], ++ sizeof ++ (HT_CAPABILITY_IE)); ++ *pPreNHtCapabilityLen = SIZE_HT_CAP_IE; ++ } ++ ++ if ((pEid->Octet[3] == OUI_PREN_ADD_HT) ++ && (pEid->Len >= 26)) { ++ NdisMoveMemory(AddHtInfo, ++ &pEid->Octet[4], ++ sizeof(ADD_HT_INFO_IE)); ++ *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; ++ } ++ } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { ++ // Copy to pVIE which will report to microsoft bssid list. ++ Ptr = (PUCHAR) pVIE; ++ NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, ++ pEid->Len + 2); ++ *LengthVIE += (pEid->Len + 2); ++ } else ++ if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) ++ && (pEid->Len == 24)) { ++ PUCHAR ptr; ++ int i; ++ ++ // parsing EDCA parameters ++ pEdcaParm->bValid = TRUE; ++ pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; ++ pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; ++ pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; ++ pEdcaParm->EdcaUpdateCount = ++ pEid->Octet[6] & 0x0f; ++ pEdcaParm->bAPSDCapable = ++ (pEid->Octet[6] & 0x80) ? 1 : 0; ++ ptr = &pEid->Octet[8]; ++ for (i = 0; i < 4; i++) { ++ UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX ++ pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM ++ pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN ++ pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; // b0~4 is Cwmin ++ pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; // b5~8 is Cwmax ++ pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); // in unit of 32-us ++ ptr += 4; // point to next AC + } ++ } else ++ if (NdisEqualMemory(pEid->Octet, WME_INFO_ELEM, 6) ++ && (pEid->Len == 7)) { ++ // parsing EDCA parameters ++ pEdcaParm->bValid = TRUE; ++ pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; ++ pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; ++ pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; ++ pEdcaParm->EdcaUpdateCount = ++ pEid->Octet[6] & 0x0f; ++ pEdcaParm->bAPSDCapable = ++ (pEid->Octet[6] & 0x80) ? 1 : 0; ++ ++ // use default EDCA parameter ++ pEdcaParm->bACM[QID_AC_BE] = 0; ++ pEdcaParm->Aifsn[QID_AC_BE] = 3; ++ pEdcaParm->Cwmin[QID_AC_BE] = CW_MIN_IN_BITS; ++ pEdcaParm->Cwmax[QID_AC_BE] = CW_MAX_IN_BITS; ++ pEdcaParm->Txop[QID_AC_BE] = 0; ++ ++ pEdcaParm->bACM[QID_AC_BK] = 0; ++ pEdcaParm->Aifsn[QID_AC_BK] = 7; ++ pEdcaParm->Cwmin[QID_AC_BK] = CW_MIN_IN_BITS; ++ pEdcaParm->Cwmax[QID_AC_BK] = CW_MAX_IN_BITS; ++ pEdcaParm->Txop[QID_AC_BK] = 0; ++ ++ pEdcaParm->bACM[QID_AC_VI] = 0; ++ pEdcaParm->Aifsn[QID_AC_VI] = 2; ++ pEdcaParm->Cwmin[QID_AC_VI] = ++ CW_MIN_IN_BITS - 1; ++ pEdcaParm->Cwmax[QID_AC_VI] = CW_MAX_IN_BITS; ++ pEdcaParm->Txop[QID_AC_VI] = 96; // AC_VI: 96*32us ~= 3ms ++ ++ pEdcaParm->bACM[QID_AC_VO] = 0; ++ pEdcaParm->Aifsn[QID_AC_VO] = 2; ++ pEdcaParm->Cwmin[QID_AC_VO] = ++ CW_MIN_IN_BITS - 2; ++ pEdcaParm->Cwmax[QID_AC_VO] = ++ CW_MAX_IN_BITS - 1; ++ pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms ++ } ++ ++ break; ++ ++ case IE_EXT_SUPP_RATES: ++ if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) { ++ NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); ++ *pExtRateLen = pEid->Len; ++ ++ // TODO: 2004-09-14 not a good design here, cause it exclude extra rates ++ // from ScanTab. We should report as is. And filter out unsupported ++ // rates in MlmeAux. ++ // Check against the supported rates ++ // RTMPCheckRates(pAd, ExtRate, pExtRateLen); + } +- } +- */ +- // Check the OUI version, filter out non-standard usage +- if (NdisEqualMemory(pEid->Octet, RALINK_OUI, 3) && (pEid->Len == 7)) +- { +- //*pRalinkIe = pEid->Octet[3]; +- if (pEid->Octet[3] != 0) +- *pRalinkIe = pEid->Octet[3]; +- else +- *pRalinkIe = 0xf0000000; // Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag. +- } +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. +- +- // Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP, +- // Check broadcom-defiend pre-802.11nD1.0 OUI for HT related IE, including HT Capatilities IE and HT Information IE +- else if ((*pHtCapabilityLen == 0) && NdisEqualMemory(pEid->Octet, PRE_N_HT_OUI, 3) && (pEid->Len >= 4) && (pAd->OpMode == OPMODE_STA)) +- { +- if ((pEid->Octet[3] == OUI_PREN_HT_CAP) && (pEid->Len >= 30) && (*pHtCapabilityLen == 0)) +- { +- NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); +- *pPreNHtCapabilityLen = SIZE_HT_CAP_IE; +- } +- +- if ((pEid->Octet[3] == OUI_PREN_ADD_HT) && (pEid->Len >= 26)) +- { +- NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); +- *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; +- } +- } +- else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- { +- // Copy to pVIE which will report to microsoft bssid list. +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +- else if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) && (pEid->Len == 24)) +- { +- PUCHAR ptr; +- int i; +- +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = &pEid->Octet[8]; +- for (i=0; i<4; i++) +- { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr+1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr+1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr+2) + 256 * (*(ptr+3)); // in unit of 32-us +- ptr += 4; // point to next AC +- } +- } +- else if (NdisEqualMemory(pEid->Octet, WME_INFO_ELEM, 6) && (pEid->Len == 7)) +- { +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- +- // use default EDCA parameter +- pEdcaParm->bACM[QID_AC_BE] = 0; +- pEdcaParm->Aifsn[QID_AC_BE] = 3; +- pEdcaParm->Cwmin[QID_AC_BE] = CW_MIN_IN_BITS; +- pEdcaParm->Cwmax[QID_AC_BE] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_BE] = 0; +- +- pEdcaParm->bACM[QID_AC_BK] = 0; +- pEdcaParm->Aifsn[QID_AC_BK] = 7; +- pEdcaParm->Cwmin[QID_AC_BK] = CW_MIN_IN_BITS; +- pEdcaParm->Cwmax[QID_AC_BK] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_BK] = 0; +- +- pEdcaParm->bACM[QID_AC_VI] = 0; +- pEdcaParm->Aifsn[QID_AC_VI] = 2; +- pEdcaParm->Cwmin[QID_AC_VI] = CW_MIN_IN_BITS-1; +- pEdcaParm->Cwmax[QID_AC_VI] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_VI] = 96; // AC_VI: 96*32us ~= 3ms +- +- pEdcaParm->bACM[QID_AC_VO] = 0; +- pEdcaParm->Aifsn[QID_AC_VO] = 2; +- pEdcaParm->Cwmin[QID_AC_VO] = CW_MIN_IN_BITS-2; +- pEdcaParm->Cwmax[QID_AC_VO] = CW_MAX_IN_BITS-1; +- pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms +- } +- +- +- break; +- +- case IE_EXT_SUPP_RATES: +- if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); +- *pExtRateLen = pEid->Len; +- +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, ExtRate, pExtRateLen); +- } +- break; +- +- case IE_ERP: +- if (pEid->Len == 1) +- { +- *pErp = (UCHAR)pEid->Octet[0]; +- } +- break; +- +- case IE_AIRONET_CKIP: +- // 0. Check Aironet IE length, it must be larger or equal to 28 +- // Cisco AP350 used length as 28 +- // Cisco AP12XX used length as 30 +- if (pEid->Len < (CKIP_NEGOTIATION_LENGTH - 2)) +- break; +- +- // 1. Copy CKIP flag byte to buffer for process +- *pCkipFlag = *(pEid->Octet + 8); +- break; +- +- case IE_AP_TX_POWER: +- // AP Control of Client Transmit Power +- //0. Check Aironet IE length, it must be 6 +- if (pEid->Len != 0x06) +- break; +- +- // Get cell power limit in dBm +- if (NdisEqualMemory(pEid->Octet, CISCO_OUI, 3) == 1) +- *pAironetCellPowerLimit = *(pEid->Octet + 4); +- break; +- +- // WPA2 & 802.11i RSN +- case IE_RSN: +- // There is no OUI for version anymore, check the group cipher OUI before copying +- if (RTMPEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- { +- // Copy to pVIE which will report to microsoft bssid list. +- Ptr = (PUCHAR) pVIE; +- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2); +- *LengthVIE += (pEid->Len + 2); +- } +- break; +- +- default: +- break; +- } +- +- Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len] +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- +- // For some 11a AP. it did not have the channel EID, patch here ++ break; ++ ++ case IE_ERP: ++ if (pEid->Len == 1) { ++ *pErp = (UCHAR) pEid->Octet[0]; ++ } ++ break; ++ ++ case IE_AIRONET_CKIP: ++ // 0. Check Aironet IE length, it must be larger or equal to 28 ++ // Cisco AP350 used length as 28 ++ // Cisco AP12XX used length as 30 ++ if (pEid->Len < (CKIP_NEGOTIATION_LENGTH - 2)) ++ break; ++ ++ // 1. Copy CKIP flag byte to buffer for process ++ *pCkipFlag = *(pEid->Octet + 8); ++ break; ++ ++ case IE_AP_TX_POWER: ++ // AP Control of Client Transmit Power ++ //0. Check Aironet IE length, it must be 6 ++ if (pEid->Len != 0x06) ++ break; ++ ++ // Get cell power limit in dBm ++ if (NdisEqualMemory(pEid->Octet, CISCO_OUI, 3) == 1) ++ *pAironetCellPowerLimit = *(pEid->Octet + 4); ++ break; ++ ++ // WPA2 & 802.11i RSN ++ case IE_RSN: ++ // There is no OUI for version anymore, check the group cipher OUI before copying ++ if (RTMPEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) { ++ // Copy to pVIE which will report to microsoft bssid list. ++ Ptr = (PUCHAR) pVIE; ++ NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, ++ pEid->Len + 2); ++ *LengthVIE += (pEid->Len + 2); ++ } ++ break; ++ ++ default: ++ break; ++ } ++ ++ Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len] ++ pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); ++ } ++ ++ // For some 11a AP. it did not have the channel EID, patch here + { + UCHAR LatchRfChannel = MsgChannel; +- if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0)) +- { ++ if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0)) { + if (CtrlChannel != 0) + *pChannel = CtrlChannel; + else +@@ -737,13 +711,12 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + } + } + +- if (Sanity != 0x7) +- { +- DBGPRINT(RT_DEBUG_LOUD, ("PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", Sanity)); ++ if (Sanity != 0x7) { ++ DBGPRINT(RT_DEBUG_LOUD, ++ ("PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n", ++ Sanity)); + return FALSE; +- } +- else +- { ++ } else { + return TRUE; + } + +@@ -757,49 +730,42 @@ BOOLEAN PeerBeaconAndProbeRspSanity( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeScanReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT UCHAR *pBssType, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pScanType) ++BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT UCHAR * pBssType, ++ OUT CHAR Ssid[], ++ OUT UCHAR * pSsidLen, OUT UCHAR * pScanType) + { + MLME_SCAN_REQ_STRUCT *Info; + +- Info = (MLME_SCAN_REQ_STRUCT *)(Msg); ++ Info = (MLME_SCAN_REQ_STRUCT *) (Msg); + *pBssType = Info->BssType; + *pSsidLen = Info->SsidLen; + NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); + *pScanType = Info->ScanType; + +- if ((*pBssType == BSS_INFRA || *pBssType == BSS_ADHOC || *pBssType == BSS_ANY) +- && (*pScanType == SCAN_ACTIVE || *pScanType == SCAN_PASSIVE +- )) +- { ++ if ((*pBssType == BSS_INFRA || *pBssType == BSS_ADHOC ++ || *pBssType == BSS_ANY) ++ && (*pScanType == SCAN_ACTIVE || *pScanType == SCAN_PASSIVE)) { + return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqSanity fail - wrong BssType or ScanType\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeScanReqSanity fail - wrong BssType or ScanType\n")); + return FALSE; + } + } + + // IRQL = DISPATCH_LEVEL +-UCHAR ChannelSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) ++UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + { +- int i; +- +- for (i = 0; i < pAd->ChannelListNum; i ++) +- { +- if (channel == pAd->ChannelList[i].Channel) +- return 1; +- } +- return 0; ++ int i; ++ ++ for (i = 0; i < pAd->ChannelListNum; i++) { ++ if (channel == pAd->ChannelList[i].Channel) ++ return 1; ++ } ++ return 0; + } + + /* +@@ -813,19 +779,17 @@ UCHAR ChannelSanity( + + ========================================================================== + */ +-BOOLEAN PeerDeauthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pReason) ++BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, OUT USHORT * pReason) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- NdisMoveMemory(pReason, &pFrame->Octet[0], 2); ++ COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); ++ NdisMoveMemory(pReason, &pFrame->Octet[0], 2); + +- return TRUE; ++ return TRUE; + } + + /* +@@ -839,57 +803,46 @@ BOOLEAN PeerDeauthSanity( + + ========================================================================== + */ +-BOOLEAN PeerAuthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT *pAlg, +- OUT USHORT *pSeq, +- OUT USHORT *pStatus, +- CHAR *pChlgText) ++BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr, ++ OUT USHORT * pAlg, ++ OUT USHORT * pSeq, ++ OUT USHORT * pStatus, CHAR * pChlgText) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr, pFrame->Hdr.Addr2); +- NdisMoveMemory(pAlg, &pFrame->Octet[0], 2); +- NdisMoveMemory(pSeq, &pFrame->Octet[2], 2); +- NdisMoveMemory(pStatus, &pFrame->Octet[4], 2); +- +- if (*pAlg == AUTH_MODE_OPEN) +- { +- if (*pSeq == 1 || *pSeq == 2) +- { +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong Seg#\n")); +- return FALSE; +- } +- } +- else if (*pAlg == AUTH_MODE_KEY) +- { +- if (*pSeq == 1 || *pSeq == 4) +- { +- return TRUE; +- } +- else if (*pSeq == 2 || *pSeq == 3) +- { +- NdisMoveMemory(pChlgText, &pFrame->Octet[8], CIPHER_TEXT_LEN); +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong Seg#\n")); +- return FALSE; +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAuthSanity fail - wrong algorithm\n")); +- return FALSE; +- } ++ PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ ++ COPY_MAC_ADDR(pAddr, pFrame->Hdr.Addr2); ++ NdisMoveMemory(pAlg, &pFrame->Octet[0], 2); ++ NdisMoveMemory(pSeq, &pFrame->Octet[2], 2); ++ NdisMoveMemory(pStatus, &pFrame->Octet[4], 2); ++ ++ if (*pAlg == AUTH_MODE_OPEN) { ++ if (*pSeq == 1 || *pSeq == 2) { ++ return TRUE; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAuthSanity fail - wrong Seg#\n")); ++ return FALSE; ++ } ++ } else if (*pAlg == AUTH_MODE_KEY) { ++ if (*pSeq == 1 || *pSeq == 4) { ++ return TRUE; ++ } else if (*pSeq == 2 || *pSeq == 3) { ++ NdisMoveMemory(pChlgText, &pFrame->Octet[8], ++ CIPHER_TEXT_LEN); ++ return TRUE; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAuthSanity fail - wrong Seg#\n")); ++ return FALSE; ++ } ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAuthSanity fail - wrong algorithm\n")); ++ return FALSE; ++ } + } + + /* +@@ -900,32 +853,27 @@ BOOLEAN PeerAuthSanity( + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeAuthReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG *pTimeout, +- OUT USHORT *pAlg) ++BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr, ++ OUT ULONG * pTimeout, OUT USHORT * pAlg) + { +- MLME_AUTH_REQ_STRUCT *pInfo; +- +- pInfo = (MLME_AUTH_REQ_STRUCT *)Msg; +- COPY_MAC_ADDR(pAddr, pInfo->Addr); +- *pTimeout = pInfo->Timeout; +- *pAlg = pInfo->Alg; +- +- if (((*pAlg == AUTH_MODE_KEY) ||(*pAlg == AUTH_MODE_OPEN) +- ) && +- ((*pAddr & 0x01) == 0)) +- { +- return TRUE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeAuthReqSanity fail - wrong algorithm\n")); +- return FALSE; +- } ++ MLME_AUTH_REQ_STRUCT *pInfo; ++ ++ pInfo = (MLME_AUTH_REQ_STRUCT *) Msg; ++ COPY_MAC_ADDR(pAddr, pInfo->Addr); ++ *pTimeout = pInfo->Timeout; ++ *pAlg = pInfo->Alg; ++ ++ if (((*pAlg == AUTH_MODE_KEY) || (*pAlg == AUTH_MODE_OPEN) ++ ) && ((*pAddr & 0x01) == 0)) { ++ return TRUE; ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeAuthReqSanity fail - wrong algorithm\n")); ++ return FALSE; ++ } + } + + /* +@@ -939,24 +887,22 @@ BOOLEAN MlmeAuthReqSanity( + + ========================================================================== + */ +-BOOLEAN MlmeAssocReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT *pCapabilityInfo, +- OUT ULONG *pTimeout, +- OUT USHORT *pListenIntv) ++BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pApAddr, ++ OUT USHORT * pCapabilityInfo, ++ OUT ULONG * pTimeout, OUT USHORT * pListenIntv) + { +- MLME_ASSOC_REQ_STRUCT *pInfo; ++ MLME_ASSOC_REQ_STRUCT *pInfo; + +- pInfo = (MLME_ASSOC_REQ_STRUCT *)Msg; +- *pTimeout = pInfo->Timeout; // timeout +- COPY_MAC_ADDR(pApAddr, pInfo->Addr); // AP address +- *pCapabilityInfo = pInfo->CapabilityInfo; // capability info +- *pListenIntv = pInfo->ListenIntv; ++ pInfo = (MLME_ASSOC_REQ_STRUCT *) Msg; ++ *pTimeout = pInfo->Timeout; // timeout ++ COPY_MAC_ADDR(pApAddr, pInfo->Addr); // AP address ++ *pCapabilityInfo = pInfo->CapabilityInfo; // capability info ++ *pListenIntv = pInfo->ListenIntv; + +- return TRUE; ++ return TRUE; + } + + /* +@@ -970,19 +916,17 @@ BOOLEAN MlmeAssocReqSanity( + + ========================================================================== + */ +-BOOLEAN PeerDisassocSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pReason) ++BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, OUT USHORT * pReason) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- NdisMoveMemory(pReason, &pFrame->Octet[0], 2); ++ COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); ++ NdisMoveMemory(pReason, &pFrame->Octet[0], 2); + +- return TRUE; ++ return TRUE; + } + + /* +@@ -1002,28 +946,23 @@ BOOLEAN PeerDisassocSanity( + + ======================================================================== + */ +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( +- IN PBSS_ENTRY pBss) ++NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) + { +- NDIS_802_11_NETWORK_TYPE NetWorkType; +- UCHAR rate, i; ++ NDIS_802_11_NETWORK_TYPE NetWorkType; ++ UCHAR rate, i; + + NetWorkType = Ndis802_11DS; + +- if (pBss->Channel <= 14) +- { ++ if (pBss->Channel <= 14) { + // + // First check support Rate. + // +- for (i = 0; i < pBss->SupRateLen; i++) +- { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit +- if ((rate == 2) || (rate == 4) || (rate == 11) || (rate == 22)) +- { ++ for (i = 0; i < pBss->SupRateLen; i++) { ++ rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit ++ if ((rate == 2) || (rate == 4) || (rate == 11) ++ || (rate == 22)) { + continue; +- } +- else +- { ++ } else { + // + // Otherwise (even rate > 108) means Ndis802_11OFDM24 + // +@@ -1035,17 +974,13 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( + // + // Second check Extend Rate. + // +- if (NetWorkType != Ndis802_11OFDM24) +- { +- for (i = 0; i < pBss->ExtRateLen; i++) +- { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit +- if ((rate == 2) || (rate == 4) || (rate == 11) || (rate == 22)) +- { ++ if (NetWorkType != Ndis802_11OFDM24) { ++ for (i = 0; i < pBss->ExtRateLen; i++) { ++ rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit ++ if ((rate == 2) || (rate == 4) || (rate == 11) ++ || (rate == 22)) { + continue; +- } +- else +- { ++ } else { + // + // Otherwise (even rate > 108) means Ndis802_11OFDM24 + // +@@ -1054,19 +989,16 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( + } + } + } +- } +- else +- { ++ } else { + NetWorkType = Ndis802_11OFDM5; + } + +- if (pBss->HtCapabilityLen != 0) +- { +- if (NetWorkType == Ndis802_11OFDM5) +- NetWorkType = Ndis802_11OFDM5_N; +- else +- NetWorkType = Ndis802_11OFDM24_N; +- } ++ if (pBss->HtCapabilityLen != 0) { ++ if (NetWorkType == Ndis802_11OFDM5) ++ NetWorkType = Ndis802_11OFDM5_N; ++ else ++ NetWorkType = Ndis802_11OFDM24_N; ++ } + + return NetWorkType; + } +@@ -1080,170 +1012,177 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( + FALSE otherwise + ========================================================================== + */ +-BOOLEAN PeerWpaMessageSanity( +- IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, +- IN MAC_TABLE_ENTRY *pEntry) ++BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, ++ IN PEAPOL_PACKET pMsg, ++ IN ULONG MsgLen, ++ IN UCHAR MsgType, IN MAC_TABLE_ENTRY * pEntry) + { +- UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; +- BOOLEAN bReplayDiff = FALSE; +- BOOLEAN bWPA2 = FALSE; +- KEY_INFO EapolKeyInfo; +- UCHAR GroupKeyIndex = 0; +- ++ UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; ++ BOOLEAN bReplayDiff = FALSE; ++ BOOLEAN bWPA2 = FALSE; ++ KEY_INFO EapolKeyInfo; ++ UCHAR GroupKeyIndex = 0; + + NdisZeroMemory(mic, sizeof(mic)); + NdisZeroMemory(digest, sizeof(digest)); + NdisZeroMemory(KEYDATA, sizeof(KEYDATA)); +- NdisZeroMemory((PUCHAR)&EapolKeyInfo, sizeof(EapolKeyInfo)); ++ NdisZeroMemory((PUCHAR) & EapolKeyInfo, sizeof(EapolKeyInfo)); + +- NdisMoveMemory((PUCHAR)&EapolKeyInfo, (PUCHAR)&pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ NdisMoveMemory((PUCHAR) & EapolKeyInfo, ++ (PUCHAR) & pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); + +- *((USHORT *)&EapolKeyInfo) = cpu2le16(*((USHORT *)&EapolKeyInfo)); ++ *((USHORT *) & EapolKeyInfo) = cpu2le16(*((USHORT *) & EapolKeyInfo)); + + // Choose WPA2 or not +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) ++ || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2 = TRUE; + + // 0. Check MsgType +- if ((MsgType > EAPOL_GROUP_MSG_2) || (MsgType < EAPOL_PAIR_MSG_1)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("The message type is invalid(%d)! \n", MsgType)); ++ if ((MsgType > EAPOL_GROUP_MSG_2) || (MsgType < EAPOL_PAIR_MSG_1)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("The message type is invalid(%d)! \n", MsgType)); + return FALSE; + } +- + // 1. Replay counter check + if (MsgType == EAPOL_PAIR_MSG_1 || MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1) // For supplicant +- { +- // First validate replay counter, only accept message with larger replay counter. +- // Let equal pass, some AP start with all zero replay counter +- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; +- +- NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); +- if ((RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY) != 1) && +- (RTMPCompareMemory(pMsg->KeyDesc.ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0)) + { ++ // First validate replay counter, only accept message with larger replay counter. ++ // Let equal pass, some AP start with all zero replay counter ++ UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; ++ ++ NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); ++ if ((RTMPCompareMemory ++ (pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, ++ LEN_KEY_DESC_REPLAY) != 1) ++ && ++ (RTMPCompareMemory ++ (pMsg->KeyDesc.ReplayCounter, ZeroReplay, ++ LEN_KEY_DESC_REPLAY) != 0)) { + bReplayDiff = TRUE; +- } +- } +- else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) // For authenticator ++ } ++ } else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) // For authenticator + { + // check Replay Counter coresponds to MSG from authenticator, otherwise discard +- if (!NdisEqualMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY)) +- { ++ if (!NdisEqualMemory ++ (pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, ++ LEN_KEY_DESC_REPLAY)) { + bReplayDiff = TRUE; ++ } + } +- } +- + // Replay Counter different condition +- if (bReplayDiff) +- { ++ if (bReplayDiff) { + // send wireless event - for replay counter different + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_REPLAY_COUNTER_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- if (MsgType < EAPOL_GROUP_MSG_1) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in pairwise msg %d of 4-way handshake!\n", MsgType)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Replay Counter Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); ++ RTMPSendWirelessEvent(pAd, ++ IW_REPLAY_COUNTER_DIFF_EVENT_FLAG, ++ pEntry->Addr, pEntry->apidx, 0); ++ ++ if (MsgType < EAPOL_GROUP_MSG_1) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Replay Counter Different in pairwise msg %d of 4-way handshake!\n", ++ MsgType)); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Replay Counter Different in group msg %d of 2-way handshake!\n", ++ (MsgType - EAPOL_PAIR_MSG_4))); + } + +- hex_dump("Receive replay counter ", pMsg->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); +- hex_dump("Current replay counter ", pEntry->R_Counter, LEN_KEY_DESC_REPLAY); +- return FALSE; ++ hex_dump("Receive replay counter ", pMsg->KeyDesc.ReplayCounter, ++ LEN_KEY_DESC_REPLAY); ++ hex_dump("Current replay counter ", pEntry->R_Counter, ++ LEN_KEY_DESC_REPLAY); ++ return FALSE; + } +- + // 2. Verify MIC except Pairwise Msg1 +- if (MsgType != EAPOL_PAIR_MSG_1) +- { +- UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; ++ if (MsgType != EAPOL_PAIR_MSG_1) { ++ UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; + + // Record the received MIC for check later +- NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); ++ NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, ++ LEN_KEY_DESC_MIC); + NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); + +- if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) // TKIP +- { +- HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, mic, MD5_DIGEST_SIZE); +- } +- else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) // AES +- { +- HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR)pMsg, MsgLen, digest, SHA1_DIGEST_SIZE); +- NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); +- } +- +- if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC)) +- { ++ if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) // TKIP ++ { ++ HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, ++ MsgLen, mic, MD5_DIGEST_SIZE); ++ } else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) // AES ++ { ++ HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, ++ MsgLen, digest, SHA1_DIGEST_SIZE); ++ NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); ++ } ++ ++ if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC)) { + // send wireless event - for MIC different + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_MIC_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- if (MsgType < EAPOL_GROUP_MSG_1) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in pairwise msg %d of 4-way handshake!\n", MsgType)); +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4))); ++ RTMPSendWirelessEvent(pAd, ++ IW_MIC_DIFF_EVENT_FLAG, ++ pEntry->Addr, ++ pEntry->apidx, 0); ++ ++ if (MsgType < EAPOL_GROUP_MSG_1) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MIC Different in pairwise msg %d of 4-way handshake!\n", ++ MsgType)); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("MIC Different in group msg %d of 2-way handshake!\n", ++ (MsgType - EAPOL_PAIR_MSG_4))); + } + + hex_dump("Received MIC", rcvd_mic, LEN_KEY_DESC_MIC); + hex_dump("Desired MIC", mic, LEN_KEY_DESC_MIC); + + return FALSE; +- } ++ } + } +- + // 1. Decrypt the Key Data field if GTK is included. + // 2. Extract the context of the Key Data field if it exist. + // The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. + // The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. +- if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) +- { ++ if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) { + // Decrypt this field +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) +- { +- if( +- (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) +- { ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) ++ || (MsgType == EAPOL_GROUP_MSG_1)) { ++ if ((EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) { + // AES + AES_GTK_KEY_UNWRAP(&pEntry->PTK[16], KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), +- pMsg->KeyDesc.KeyData); +- } +- else +- { +- INT i; +- UCHAR Key[32]; ++ CONV_ARRARY_TO_UINT16(pMsg-> ++ KeyDesc. ++ KeyDataLen), ++ pMsg->KeyDesc.KeyData); ++ } else { ++ INT i; ++ UCHAR Key[32]; + // Decrypt TKIP GTK + // Construct 32 bytes RC4 Key + NdisMoveMemory(Key, pMsg->KeyDesc.KeyIv, 16); + NdisMoveMemory(&Key[16], &pEntry->PTK[16], 16); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, 32); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, ++ 32); + //discard first 256 bytes +- for(i = 0; i < 256; i++) +- ARCFOUR_BYTE(&pAd->PrivateInfo.WEPCONTEXT); ++ for (i = 0; i < 256; i++) ++ ARCFOUR_BYTE(&pAd->PrivateInfo. ++ WEPCONTEXT); + // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, KEYDATA, +- pMsg->KeyDesc.KeyData, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); ++ ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, ++ KEYDATA, pMsg->KeyDesc.KeyData, ++ CONV_ARRARY_TO_UINT16(pMsg-> ++ KeyDesc. ++ KeyDataLen)); + } + + if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) + GroupKeyIndex = EapolKeyInfo.KeyIndex; + +- } +- else if ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3 && !bWPA2)) +- { +- NdisMoveMemory(KEYDATA, pMsg->KeyDesc.KeyData, CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen)); +- } +- else +- { ++ } else if ((MsgType == EAPOL_PAIR_MSG_2) ++ || (MsgType == EAPOL_PAIR_MSG_3 && !bWPA2)) { ++ NdisMoveMemory(KEYDATA, pMsg->KeyDesc.KeyData, ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc. ++ KeyDataLen)); ++ } else { + + return TRUE; + } +@@ -1253,9 +1192,10 @@ BOOLEAN PeerWpaMessageSanity( + // 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 + // 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) + if (!RTMPParseEapolKeyData(pAd, KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen), +- GroupKeyIndex, MsgType, bWPA2, pEntry)) +- { ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc. ++ KeyDataLen), ++ GroupKeyIndex, MsgType, bWPA2, ++ pEntry)) { + return FALSE; + } + } +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index 9be4d50..9934a1b 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -37,46 +37,61 @@ + #include "../rt_config.h" + + // 2.4 Ghz channel plan index in the TxPower arrays. +-#define BG_BAND_REGION_0_START 0 // 1,2,3,4,5,6,7,8,9,10,11 ++#define BG_BAND_REGION_0_START 0 // 1,2,3,4,5,6,7,8,9,10,11 + #define BG_BAND_REGION_0_SIZE 11 +-#define BG_BAND_REGION_1_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13 ++#define BG_BAND_REGION_1_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13 + #define BG_BAND_REGION_1_SIZE 13 +-#define BG_BAND_REGION_2_START 9 // 10,11 ++#define BG_BAND_REGION_2_START 9 // 10,11 + #define BG_BAND_REGION_2_SIZE 2 +-#define BG_BAND_REGION_3_START 9 // 10,11,12,13 ++#define BG_BAND_REGION_3_START 9 // 10,11,12,13 + #define BG_BAND_REGION_3_SIZE 4 +-#define BG_BAND_REGION_4_START 13 // 14 ++#define BG_BAND_REGION_4_START 13 // 14 + #define BG_BAND_REGION_4_SIZE 1 +-#define BG_BAND_REGION_5_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 ++#define BG_BAND_REGION_5_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 + #define BG_BAND_REGION_5_SIZE 14 +-#define BG_BAND_REGION_6_START 2 // 3,4,5,6,7,8,9 ++#define BG_BAND_REGION_6_START 2 // 3,4,5,6,7,8,9 + #define BG_BAND_REGION_6_SIZE 7 +-#define BG_BAND_REGION_7_START 4 // 5,6,7,8,9,10,11,12,13 ++#define BG_BAND_REGION_7_START 4 // 5,6,7,8,9,10,11,12,13 + #define BG_BAND_REGION_7_SIZE 9 +-#define BG_BAND_REGION_31_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 ++#define BG_BAND_REGION_31_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 + #define BG_BAND_REGION_31_SIZE 14 + + // 5 Ghz channel plan index in the TxPower arrays. +-UCHAR A_BAND_REGION_0_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_1_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +-UCHAR A_BAND_REGION_2_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64}; +-UCHAR A_BAND_REGION_3_CHANNEL_LIST[]={52, 56, 60, 64, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_4_CHANNEL_LIST[]={149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_5_CHANNEL_LIST[]={149, 153, 157, 161}; +-UCHAR A_BAND_REGION_6_CHANNEL_LIST[]={36, 40, 44, 48}; +-UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173}; +-UCHAR A_BAND_REGION_8_CHANNEL_LIST[]={52, 56, 60, 64}; +-UCHAR A_BAND_REGION_9_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_10_CHANNEL_LIST[]={36, 40, 44, 48, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_11_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_12_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +-UCHAR A_BAND_REGION_13_CHANNEL_LIST[]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161}; +-UCHAR A_BAND_REGION_14_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}; +-UCHAR A_BAND_REGION_15_CHANNEL_LIST[]={149, 153, 157, 161, 165, 169, 173}; +- ++UCHAR A_BAND_REGION_0_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 }; ++UCHAR A_BAND_REGION_1_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, ++132, 136, 140 }; ++UCHAR A_BAND_REGION_2_CHANNEL_LIST[] = { 36, 40, 44, 48, 52, 56, 60, 64 }; ++UCHAR A_BAND_REGION_3_CHANNEL_LIST[] = { 52, 56, 60, 64, 149, 153, 157, 161 }; ++UCHAR A_BAND_REGION_4_CHANNEL_LIST[] = { 149, 153, 157, 161, 165 }; ++UCHAR A_BAND_REGION_5_CHANNEL_LIST[] = { 149, 153, 157, 161 }; ++UCHAR A_BAND_REGION_6_CHANNEL_LIST[] = { 36, 40, 44, 48 }; ++UCHAR A_BAND_REGION_7_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, ++132, 136, 140, 149, 153, 157, 161, 165, 169, 173 }; ++UCHAR A_BAND_REGION_8_CHANNEL_LIST[] = { 52, 56, 60, 64 }; ++UCHAR A_BAND_REGION_9_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, ++149, 153, 157, 161, 165 }; ++UCHAR A_BAND_REGION_10_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 149, 153, 157, 161, 165 }; ++UCHAR A_BAND_REGION_11_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, ++157, 161 }; ++UCHAR A_BAND_REGION_12_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, ++132, 136, 140 }; ++UCHAR A_BAND_REGION_13_CHANNEL_LIST[] = ++ { 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, ++149, 153, 157, 161 }; ++UCHAR A_BAND_REGION_14_CHANNEL_LIST[] = ++ { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, ++153, 157, 161, 165 }; ++UCHAR A_BAND_REGION_15_CHANNEL_LIST[] = { 149, 153, 157, 161, 165, 169, 173 }; + + //BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. +-UCHAR BaSizeArray[4] = {8,16,32,64}; ++UCHAR BaSizeArray[4] = { 8, 16, 32, 64 }; + + /* + ========================================================================== +@@ -90,170 +105,243 @@ UCHAR BaSizeArray[4] = {8,16,32,64}; + + ========================================================================== + */ +-VOID BuildChannelList( +- IN PRTMP_ADAPTER pAd) ++VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + { +- UCHAR i, j, index=0, num=0; +- PUCHAR pChannelList = NULL; ++ UCHAR i, j, index = 0, num = 0; ++ PUCHAR pChannelList = NULL; + +- NdisZeroMemory(pAd->ChannelList, MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); ++ NdisZeroMemory(pAd->ChannelList, ++ MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); + + // if not 11a-only mode, channel list starts from 2.4Ghz band + if ((pAd->CommonCfg.PhyMode != PHY_11A) +- && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G) +- ) +- { +- switch (pAd->CommonCfg.CountryRegion & 0x7f) +- { +- case REGION_0_BG_BAND: // 1 -11 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_0_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_0_SIZE); +- index += BG_BAND_REGION_0_SIZE; +- break; +- case REGION_1_BG_BAND: // 1 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_1_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_1_SIZE); +- index += BG_BAND_REGION_1_SIZE; +- break; +- case REGION_2_BG_BAND: // 10 - 11 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_2_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_2_SIZE); +- index += BG_BAND_REGION_2_SIZE; +- break; +- case REGION_3_BG_BAND: // 10 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_3_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_3_SIZE); +- index += BG_BAND_REGION_3_SIZE; +- break; +- case REGION_4_BG_BAND: // 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_4_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_4_SIZE); +- index += BG_BAND_REGION_4_SIZE; +- break; +- case REGION_5_BG_BAND: // 1 - 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_5_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_5_SIZE); +- index += BG_BAND_REGION_5_SIZE; +- break; +- case REGION_6_BG_BAND: // 3 - 9 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_6_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_6_SIZE); +- index += BG_BAND_REGION_6_SIZE; +- break; +- case REGION_7_BG_BAND: // 5 - 13 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_7_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_7_SIZE); +- index += BG_BAND_REGION_7_SIZE; +- break; +- case REGION_31_BG_BAND: // 1 - 14 +- NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_31_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_31_SIZE); +- index += BG_BAND_REGION_31_SIZE; +- break; +- default: // Error. should never happen +- break; ++ && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) ++ && (pAd->CommonCfg.PhyMode != PHY_11N_5G) ++ ) { ++ switch (pAd->CommonCfg.CountryRegion & 0x7f) { ++ case REGION_0_BG_BAND: // 1 -11 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_0_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_0_SIZE); ++ index += BG_BAND_REGION_0_SIZE; ++ break; ++ case REGION_1_BG_BAND: // 1 - 13 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_1_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_1_SIZE); ++ index += BG_BAND_REGION_1_SIZE; ++ break; ++ case REGION_2_BG_BAND: // 10 - 11 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_2_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_2_SIZE); ++ index += BG_BAND_REGION_2_SIZE; ++ break; ++ case REGION_3_BG_BAND: // 10 - 13 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_3_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_3_SIZE); ++ index += BG_BAND_REGION_3_SIZE; ++ break; ++ case REGION_4_BG_BAND: // 14 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_4_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_4_SIZE); ++ index += BG_BAND_REGION_4_SIZE; ++ break; ++ case REGION_5_BG_BAND: // 1 - 14 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_5_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_5_SIZE); ++ index += BG_BAND_REGION_5_SIZE; ++ break; ++ case REGION_6_BG_BAND: // 3 - 9 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_6_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_6_SIZE); ++ index += BG_BAND_REGION_6_SIZE; ++ break; ++ case REGION_7_BG_BAND: // 5 - 13 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_7_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_7_SIZE); ++ index += BG_BAND_REGION_7_SIZE; ++ break; ++ case REGION_31_BG_BAND: // 1 - 14 ++ NdisMoveMemory(&pAd->ChannelList[index], ++ &pAd->TxPower[BG_BAND_REGION_31_START], ++ sizeof(CHANNEL_TX_POWER) * ++ BG_BAND_REGION_31_SIZE); ++ index += BG_BAND_REGION_31_SIZE; ++ break; ++ default: // Error. should never happen ++ break; + } +- for (i=0; iChannelList[i].MaxTxPwr = 20; + } + +- if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) +- || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) +- || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G) +- ) +- { +- switch (pAd->CommonCfg.CountryRegionForABand & 0x7f) +- { +- case REGION_0_A_BAND: +- num = sizeof(A_BAND_REGION_0_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_0_CHANNEL_LIST; +- break; +- case REGION_1_A_BAND: +- num = sizeof(A_BAND_REGION_1_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_1_CHANNEL_LIST; +- break; +- case REGION_2_A_BAND: +- num = sizeof(A_BAND_REGION_2_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_2_CHANNEL_LIST; +- break; +- case REGION_3_A_BAND: +- num = sizeof(A_BAND_REGION_3_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_3_CHANNEL_LIST; +- break; +- case REGION_4_A_BAND: +- num = sizeof(A_BAND_REGION_4_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_4_CHANNEL_LIST; +- break; +- case REGION_5_A_BAND: +- num = sizeof(A_BAND_REGION_5_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_5_CHANNEL_LIST; +- break; +- case REGION_6_A_BAND: +- num = sizeof(A_BAND_REGION_6_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_6_CHANNEL_LIST; +- break; +- case REGION_7_A_BAND: +- num = sizeof(A_BAND_REGION_7_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_7_CHANNEL_LIST; +- break; +- case REGION_8_A_BAND: +- num = sizeof(A_BAND_REGION_8_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_8_CHANNEL_LIST; +- break; +- case REGION_9_A_BAND: +- num = sizeof(A_BAND_REGION_9_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_9_CHANNEL_LIST; +- break; +- +- case REGION_10_A_BAND: +- num = sizeof(A_BAND_REGION_10_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_10_CHANNEL_LIST; +- break; +- +- case REGION_11_A_BAND: +- num = sizeof(A_BAND_REGION_11_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_11_CHANNEL_LIST; +- break; +- case REGION_12_A_BAND: +- num = sizeof(A_BAND_REGION_12_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_12_CHANNEL_LIST; +- break; +- case REGION_13_A_BAND: +- num = sizeof(A_BAND_REGION_13_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_13_CHANNEL_LIST; +- break; +- case REGION_14_A_BAND: +- num = sizeof(A_BAND_REGION_14_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_14_CHANNEL_LIST; +- break; +- case REGION_15_A_BAND: +- num = sizeof(A_BAND_REGION_15_CHANNEL_LIST)/sizeof(UCHAR); +- pChannelList = A_BAND_REGION_15_CHANNEL_LIST; +- break; +- default: // Error. should never happen +- DBGPRINT(RT_DEBUG_WARN,("countryregion=%d not support", pAd->CommonCfg.CountryRegionForABand)); +- break; ++ if ((pAd->CommonCfg.PhyMode == PHY_11A) ++ || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) ++ || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) ++ || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) ++ || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) ++ || (pAd->CommonCfg.PhyMode == PHY_11N_5G) ++ ) { ++ switch (pAd->CommonCfg.CountryRegionForABand & 0x7f) { ++ case REGION_0_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_0_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_0_CHANNEL_LIST; ++ break; ++ case REGION_1_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_1_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_1_CHANNEL_LIST; ++ break; ++ case REGION_2_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_2_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_2_CHANNEL_LIST; ++ break; ++ case REGION_3_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_3_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_3_CHANNEL_LIST; ++ break; ++ case REGION_4_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_4_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_4_CHANNEL_LIST; ++ break; ++ case REGION_5_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_5_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_5_CHANNEL_LIST; ++ break; ++ case REGION_6_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_6_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_6_CHANNEL_LIST; ++ break; ++ case REGION_7_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_7_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_7_CHANNEL_LIST; ++ break; ++ case REGION_8_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_8_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_8_CHANNEL_LIST; ++ break; ++ case REGION_9_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_9_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_9_CHANNEL_LIST; ++ break; ++ ++ case REGION_10_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_10_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_10_CHANNEL_LIST; ++ break; ++ ++ case REGION_11_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_11_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_11_CHANNEL_LIST; ++ break; ++ case REGION_12_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_12_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_12_CHANNEL_LIST; ++ break; ++ case REGION_13_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_13_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_13_CHANNEL_LIST; ++ break; ++ case REGION_14_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_14_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_14_CHANNEL_LIST; ++ break; ++ case REGION_15_A_BAND: ++ num = ++ sizeof(A_BAND_REGION_15_CHANNEL_LIST) / ++ sizeof(UCHAR); ++ pChannelList = A_BAND_REGION_15_CHANNEL_LIST; ++ break; ++ default: // Error. should never happen ++ DBGPRINT(RT_DEBUG_WARN, ++ ("countryregion=%d not support", ++ pAd->CommonCfg.CountryRegionForABand)); ++ break; + } + +- if (num != 0) +- { +- UCHAR RadarCh[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}; +- for (i=0; iTxPower[j].Channel) +- NdisMoveMemory(&pAd->ChannelList[index+i], &pAd->TxPower[j], sizeof(CHANNEL_TX_POWER)); +- } +- for (j=0; j<15; j++) +- { ++ if (num != 0) { ++ UCHAR RadarCh[15] = ++ { 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, ++ 128, 132, 136, 140 }; ++ for (i = 0; i < num; i++) { ++ for (j = 0; j < MAX_NUM_OF_CHANNELS; j++) { ++ if (pChannelList[i] == ++ pAd->TxPower[j].Channel) ++ NdisMoveMemory(&pAd-> ++ ChannelList[index ++ + i], ++ &pAd->TxPower[j], ++ sizeof ++ (CHANNEL_TX_POWER)); ++ } ++ for (j = 0; j < 15; j++) { + if (pChannelList[i] == RadarCh[j]) +- pAd->ChannelList[index+i].DfsReq = TRUE; ++ pAd->ChannelList[index + ++ i].DfsReq = ++ TRUE; + } +- pAd->ChannelList[index+i].MaxTxPwr = 20; ++ pAd->ChannelList[index + i].MaxTxPwr = 20; + } + index += num; + } + } + + pAd->ChannelListNum = index; +- DBGPRINT(RT_DEBUG_TRACE,("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n", +- pAd->CommonCfg.CountryRegion, pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, pAd->CommonCfg.PhyMode, pAd->ChannelListNum)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n", ++ pAd->CommonCfg.CountryRegion, ++ pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, ++ pAd->CommonCfg.PhyMode, pAd->ChannelListNum)); + #ifdef DBG +- for (i=0;iChannelListNum;i++) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE,("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, \n ", pAd->ChannelList[i].Channel, pAd->ChannelList[i].Power, pAd->ChannelList[i].Power2)); ++ for (i = 0; i < pAd->ChannelListNum; i++) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, \n ", ++ pAd->ChannelList[i].Channel, ++ pAd->ChannelList[i].Power, ++ pAd->ChannelList[i].Power2)); + } + #endif + } +@@ -271,8 +359,7 @@ VOID BuildChannelList( + + ========================================================================== + */ +-UCHAR FirstChannel( +- IN PRTMP_ADAPTER pAd) ++UCHAR FirstChannel(IN PRTMP_ADAPTER pAd) + { + return pAd->ChannelList[0].Channel; + } +@@ -288,19 +375,16 @@ UCHAR FirstChannel( + return 0 if no more next channel + ========================================================================== + */ +-UCHAR NextChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) ++UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + { + int i; + UCHAR next_channel = 0; + + for (i = 0; i < (pAd->ChannelListNum - 1); i++) +- if (channel == pAd->ChannelList[i].Channel) +- { +- next_channel = pAd->ChannelList[i+1].Channel; ++ if (channel == pAd->ChannelList[i].Channel) { ++ next_channel = pAd->ChannelList[i + 1].Channel; + break; +- } ++ } + return next_channel; + } + +@@ -324,16 +408,15 @@ UCHAR NextChannel( + the minimum value or next lower value. + ========================================================================== + */ +-VOID ChangeToCellPowerLimit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit) ++VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR AironetCellPowerLimit) + { + //valud 0xFF means that hasn't found power limit information + //from the AP's Beacon/Probe response. + if (AironetCellPowerLimit == 0xFF) + return; + +- if (AironetCellPowerLimit < 6) //Used Lowest Power Percentage. ++ if (AironetCellPowerLimit < 6) //Used Lowest Power Percentage. + pAd->CommonCfg.TxPowerPercentage = 6; + else if (AironetCellPowerLimit < 9) + pAd->CommonCfg.TxPowerPercentage = 10; +@@ -344,45 +427,40 @@ VOID ChangeToCellPowerLimit( + else if (AironetCellPowerLimit < 15) + pAd->CommonCfg.TxPowerPercentage = 75; + else +- pAd->CommonCfg.TxPowerPercentage = 100; //else used maximum ++ pAd->CommonCfg.TxPowerPercentage = 100; //else used maximum + + if (pAd->CommonCfg.TxPowerPercentage > pAd->CommonCfg.TxPowerDefault) +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; ++ pAd->CommonCfg.TxPowerPercentage = ++ pAd->CommonCfg.TxPowerDefault; + + } + +-CHAR ConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber) ++CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber) + { +- UCHAR RssiOffset, LNAGain; ++ UCHAR RssiOffset, LNAGain; + + // Rssi equals to zero should be an invalid value + if (Rssi == 0) + return -99; + + LNAGain = GET_LNA_GAIN(pAd); +- if (pAd->LatchRfRegs.Channel > 14) +- { +- if (RssiNumber == 0) ++ if (pAd->LatchRfRegs.Channel > 14) { ++ if (RssiNumber == 0) + RssiOffset = pAd->ARssiOffset0; + else if (RssiNumber == 1) + RssiOffset = pAd->ARssiOffset1; + else + RssiOffset = pAd->ARssiOffset2; +- } +- else +- { +- if (RssiNumber == 0) ++ } else { ++ if (RssiNumber == 0) + RssiOffset = pAd->BGRssiOffset0; + else if (RssiNumber == 1) + RssiOffset = pAd->BGRssiOffset1; + else + RssiOffset = pAd->BGRssiOffset2; +- } ++ } + +- return (-12 - RssiOffset - LNAGain - Rssi); ++ return (-12 - RssiOffset - LNAGain - Rssi); + } + + /* +@@ -391,44 +469,44 @@ CHAR ConvertToRssi( + Scan next channel + ========================================================================== + */ +-VOID ScanNextChannel( +- IN PRTMP_ADAPTER pAd) ++VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + { +- HEADER_802_11 Hdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; +- USHORT Status; +- PHEADER_802_11 pHdr80211; +- UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; ++ HEADER_802_11 Hdr80211; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; ++ USHORT Status; ++ PHEADER_802_11 pHdr80211; ++ UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; + + { +- if (MONITOR_ON(pAd)) +- return; ++ if (MONITOR_ON(pAd)) ++ return; + } + +- +- if (pAd->MlmeAux.Channel == 0) +- { ++ if (pAd->MlmeAux.Channel == 0) { + if ((pAd->CommonCfg.BBPCurrentBW == BW_40) +- && (INFRA_ON(pAd) +- || (pAd->OpMode == OPMODE_AP)) +- ) +- { +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); ++ && (INFRA_ON(pAd) ++ || (pAd->OpMode == OPMODE_AP)) ++ ) { ++ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, ++ FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + BBPValue |= 0x10; + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr)); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n", ++ pAd->CommonCfg.CentralChannel, ++ pAd->ScanTab.BssNr)); ++ } else { + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n", ++ pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); + } + + { +@@ -437,20 +515,29 @@ VOID ScanNextChannel( + // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. + // Now, we need to send an NULL data with turned PSM bit off to AP, when scan progress done + // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd))) +- { +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) ++ && (INFRA_ON(pAd))) { ++ NStatus = ++ MlmeAllocateMemory(pAd, ++ (PVOID) & pOutBuffer); ++ if (NStatus == NDIS_STATUS_SUCCESS) { + pHdr80211 = (PHEADER_802_11) pOutBuffer; +- MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); ++ MgtMacHeaderInit(pAd, pHdr80211, ++ SUBTYPE_NULL_FUNC, 1, ++ pAd->CommonCfg.Bssid, ++ pAd->CommonCfg.Bssid); + pHdr80211->Duration = 0; + pHdr80211->FC.Type = BTYPE_DATA; +- pHdr80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); ++ pHdr80211->FC.PwrMgmt = ++ (pAd->StaCfg.Psm == PWR_SAVE); + + // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame\n")); ++ MiniportMMRequest(pAd, 0, pOutBuffer, ++ sizeof ++ (HEADER_802_11)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeScanReqAction -- Send PSM Data frame\n")); + MlmeFreeMemory(pAd, pOutBuffer); + RTMPusecDelay(5000); + } +@@ -458,25 +545,24 @@ VOID ScanNextChannel( + + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, ++ 2, &Status); + } + +- + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + } + #ifdef RTMP_MAC_USB +- else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA)) +- { ++ else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) ++ && (pAd->OpMode == OPMODE_STA)) { + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE); + } + #endif // RTMP_MAC_USB // +- else +- { ++ else { + { +- // BBP and RF are not accessible in PS mode, we has to wake them up first +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- AsicForceWakeup(pAd, TRUE); ++ // BBP and RF are not accessible in PS mode, we has to wake them up first ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ AsicForceWakeup(pAd, TRUE); + + // leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON + if (pAd->StaCfg.Psm == PWR_SAVE) +@@ -487,10 +573,11 @@ VOID ScanNextChannel( + AsicLockChannel(pAd, pAd->MlmeAux.Channel); + + { +- if (pAd->MlmeAux.Channel > 14) +- { +- if ((pAd->CommonCfg.bIEEE80211H == 1) && RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) +- { ++ if (pAd->MlmeAux.Channel > 14) { ++ if ((pAd->CommonCfg.bIEEE80211H == 1) ++ && RadarChannelCheck(pAd, ++ pAd->MlmeAux. ++ Channel)) { + ScanType = SCAN_PASSIVE; + ScanTimeIn5gChannel = MIN_CHANNEL_TIME; + } +@@ -498,103 +585,108 @@ VOID ScanNextChannel( + } + + //Global country domain(ch1-11:active scan, ch12-14 passive scan) +- if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) && ((pAd->CommonCfg.CountryRegion & 0x7f) == REGION_31_BG_BAND)) +- { ++ if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) ++ && ((pAd->CommonCfg.CountryRegion & 0x7f) == ++ REGION_31_BG_BAND)) { + ScanType = SCAN_PASSIVE; + } +- + // We need to shorten active scan time in order for WZC connect issue + // Chnage the channel scan time for CISCO stuff based on its IAPP announcement + if (ScanType == FAST_SCAN_ACTIVE) +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME); +- else // must be SCAN_PASSIVE or SCAN_ACTIVE ++ RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ++ FAST_ACTIVE_SCAN_TIME); ++ else // must be SCAN_PASSIVE or SCAN_ACTIVE + { + if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) +- || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) +- ) +- { ++ || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) ++ || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) ++ ) { + if (pAd->MlmeAux.Channel > 14) +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ScanTimeIn5gChannel); ++ RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ++ ScanTimeIn5gChannel); + else +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MIN_CHANNEL_TIME); +- } +- else +- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MAX_CHANNEL_TIME); ++ RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ++ MIN_CHANNEL_TIME); ++ } else ++ RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ++ MAX_CHANNEL_TIME); + } + + if ((ScanType == SCAN_ACTIVE) +- || (ScanType == FAST_SCAN_ACTIVE) +- ) +- { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - ScanNextChannel() allocate memory fail\n")); ++ || (ScanType == FAST_SCAN_ACTIVE) ++ ) { ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - ScanNextChannel() allocate memory fail\n")); + + { +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; ++ pAd->Mlme.SyncMachine.CurrState = ++ SYNC_IDLE; + Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ MT2_SCAN_CONF, 2, &Status); + } + + return; + } +- + // There is no need to send broadcast probe request if active scan is in effect. +- if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) +- ) ++ if ((ScanType == SCAN_ACTIVE) ++ || (ScanType == FAST_SCAN_ACTIVE) ++ ) + SsidLen = pAd->MlmeAux.SsidLen; + else + SsidLen = 0; + +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &SsidLen, +- SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->CommonCfg.SupRateLen, +- pAd->CommonCfg.SupRateLen, pAd->CommonCfg.SupRate, +- END_OF_ARGS); +- +- if (pAd->CommonCfg.ExtRateLen) +- { ++ MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, ++ BROADCAST_ADDR, BROADCAST_ADDR); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &Hdr80211, 1, ++ &SsidIe, 1, &SsidLen, SsidLen, ++ pAd->MlmeAux.Ssid, 1, &SupRateIe, 1, ++ &pAd->CommonCfg.SupRateLen, ++ pAd->CommonCfg.SupRateLen, ++ pAd->CommonCfg.SupRate, END_OF_ARGS); ++ ++ if (pAd->CommonCfg.ExtRateLen) { + ULONG Tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &ExtRateIe, +- 1, &pAd->CommonCfg.ExtRateLen, +- pAd->CommonCfg.ExtRateLen, pAd->CommonCfg.ExtRate, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, ++ 1, &ExtRateIe, ++ 1, &pAd->CommonCfg.ExtRateLen, ++ pAd->CommonCfg.ExtRateLen, ++ pAd->CommonCfg.ExtRate, ++ END_OF_ARGS); + FrameLen += Tmp; + } + +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- ULONG Tmp; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- +- if (pAd->bBroadComHT == TRUE) +- { +- HtLen = pAd->MlmeAux.HtCapabilityLen + 4; +- +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { ++ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { ++ ULONG Tmp; ++ UCHAR HtLen; ++ UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ ++ if (pAd->bBroadComHT == TRUE) { ++ HtLen = ++ pAd->MlmeAux.HtCapabilityLen + 4; ++ ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &Tmp, 1, &WpaIe, 1, ++ &HtLen, 4, ++ &BROADCOM[0], ++ pAd->MlmeAux. ++ HtCapabilityLen, ++ &pAd->MlmeAux. ++ HtCapability, ++ END_OF_ARGS); ++ } else { + HtLen = pAd->MlmeAux.HtCapabilityLen; + +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &Tmp, 1, &HtCapIe, 1, ++ &HtLen, HtLen, ++ &pAd->CommonCfg. ++ HtCapability, ++ END_OF_ARGS); + } + FrameLen += Tmp; + } +@@ -602,20 +694,16 @@ VOID ScanNextChannel( + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } +- + // For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse + + pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN; + } + } + +-VOID MgtProbReqMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid) ++VOID MgtProbReqMacHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PHEADER_802_11 pHdr80211, ++ IN UCHAR SubType, ++ IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid) + { + NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); + +@@ -628,5 +716,3 @@ VOID MgtProbReqMacHeaderInit( + COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); + } +- +- +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index 20423e1..b93c3fa 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -42,109 +42,101 @@ + ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) + #define ROR32( A, n ) ROL32( (A), 32-(n) ) + +-UINT Tkip_Sbox_Lower[256] = +-{ +- 0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54, +- 0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A, +- 0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B, +- 0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B, +- 0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F, +- 0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F, +- 0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5, +- 0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F, +- 0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB, +- 0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97, +- 0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED, +- 0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A, +- 0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94, +- 0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3, +- 0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04, +- 0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D, +- 0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39, +- 0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95, +- 0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83, +- 0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76, +- 0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4, +- 0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B, +- 0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0, +- 0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18, +- 0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51, +- 0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85, +- 0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12, +- 0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9, +- 0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7, +- 0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A, +- 0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8, +- 0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A ++UINT Tkip_Sbox_Lower[256] = { ++ 0xA5, 0x84, 0x99, 0x8D, 0x0D, 0xBD, 0xB1, 0x54, ++ 0x50, 0x03, 0xA9, 0x7D, 0x19, 0x62, 0xE6, 0x9A, ++ 0x45, 0x9D, 0x40, 0x87, 0x15, 0xEB, 0xC9, 0x0B, ++ 0xEC, 0x67, 0xFD, 0xEA, 0xBF, 0xF7, 0x96, 0x5B, ++ 0xC2, 0x1C, 0xAE, 0x6A, 0x5A, 0x41, 0x02, 0x4F, ++ 0x5C, 0xF4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3F, ++ 0x0C, 0x52, 0x65, 0x5E, 0x28, 0xA1, 0x0F, 0xB5, ++ 0x09, 0x36, 0x9B, 0x3D, 0x26, 0x69, 0xCD, 0x9F, ++ 0x1B, 0x9E, 0x74, 0x2E, 0x2D, 0xB2, 0xEE, 0xFB, ++ 0xF6, 0x4D, 0x61, 0xCE, 0x7B, 0x3E, 0x71, 0x97, ++ 0xF5, 0x68, 0x00, 0x2C, 0x60, 0x1F, 0xC8, 0xED, ++ 0xBE, 0x46, 0xD9, 0x4B, 0xDE, 0xD4, 0xE8, 0x4A, ++ 0x6B, 0x2A, 0xE5, 0x16, 0xC5, 0xD7, 0x55, 0x94, ++ 0xCF, 0x10, 0x06, 0x81, 0xF0, 0x44, 0xBA, 0xE3, ++ 0xF3, 0xFE, 0xC0, 0x8A, 0xAD, 0xBC, 0x48, 0x04, ++ 0xDF, 0xC1, 0x75, 0x63, 0x30, 0x1A, 0x0E, 0x6D, ++ 0x4C, 0x14, 0x35, 0x2F, 0xE1, 0xA2, 0xCC, 0x39, ++ 0x57, 0xF2, 0x82, 0x47, 0xAC, 0xE7, 0x2B, 0x95, ++ 0xA0, 0x98, 0xD1, 0x7F, 0x66, 0x7E, 0xAB, 0x83, ++ 0xCA, 0x29, 0xD3, 0x3C, 0x79, 0xE2, 0x1D, 0x76, ++ 0x3B, 0x56, 0x4E, 0x1E, 0xDB, 0x0A, 0x6C, 0xE4, ++ 0x5D, 0x6E, 0xEF, 0xA6, 0xA8, 0xA4, 0x37, 0x8B, ++ 0x32, 0x43, 0x59, 0xB7, 0x8C, 0x64, 0xD2, 0xE0, ++ 0xB4, 0xFA, 0x07, 0x25, 0xAF, 0x8E, 0xE9, 0x18, ++ 0xD5, 0x88, 0x6F, 0x72, 0x24, 0xF1, 0xC7, 0x51, ++ 0x23, 0x7C, 0x9C, 0x21, 0xDD, 0xDC, 0x86, 0x85, ++ 0x90, 0x42, 0xC4, 0xAA, 0xD8, 0x05, 0x01, 0x12, ++ 0xA3, 0x5F, 0xF9, 0xD0, 0x91, 0x58, 0x27, 0xB9, ++ 0x38, 0x13, 0xB3, 0x33, 0xBB, 0x70, 0x89, 0xA7, ++ 0xB6, 0x22, 0x92, 0x20, 0x49, 0xFF, 0x78, 0x7A, ++ 0x8F, 0xF8, 0x80, 0x17, 0xDA, 0x31, 0xC6, 0xB8, ++ 0xC3, 0xB0, 0x77, 0x11, 0xCB, 0xFC, 0xD6, 0x3A + }; + +-UINT Tkip_Sbox_Upper[256] = +-{ +- 0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91, +- 0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC, +- 0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB, +- 0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B, +- 0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83, +- 0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A, +- 0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F, +- 0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA, +- 0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B, +- 0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13, +- 0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6, +- 0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85, +- 0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11, +- 0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B, +- 0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1, +- 0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF, +- 0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E, +- 0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6, +- 0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B, +- 0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD, +- 0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8, +- 0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2, +- 0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49, +- 0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10, +- 0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97, +- 0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F, +- 0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C, +- 0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27, +- 0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33, +- 0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5, +- 0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0, +- 0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C ++UINT Tkip_Sbox_Upper[256] = { ++ 0xC6, 0xF8, 0xEE, 0xF6, 0xFF, 0xD6, 0xDE, 0x91, ++ 0x60, 0x02, 0xCE, 0x56, 0xE7, 0xB5, 0x4D, 0xEC, ++ 0x8F, 0x1F, 0x89, 0xFA, 0xEF, 0xB2, 0x8E, 0xFB, ++ 0x41, 0xB3, 0x5F, 0x45, 0x23, 0x53, 0xE4, 0x9B, ++ 0x75, 0xE1, 0x3D, 0x4C, 0x6C, 0x7E, 0xF5, 0x83, ++ 0x68, 0x51, 0xD1, 0xF9, 0xE2, 0xAB, 0x62, 0x2A, ++ 0x08, 0x95, 0x46, 0x9D, 0x30, 0x37, 0x0A, 0x2F, ++ 0x0E, 0x24, 0x1B, 0xDF, 0xCD, 0x4E, 0x7F, 0xEA, ++ 0x12, 0x1D, 0x58, 0x34, 0x36, 0xDC, 0xB4, 0x5B, ++ 0xA4, 0x76, 0xB7, 0x7D, 0x52, 0xDD, 0x5E, 0x13, ++ 0xA6, 0xB9, 0x00, 0xC1, 0x40, 0xE3, 0x79, 0xB6, ++ 0xD4, 0x8D, 0x67, 0x72, 0x94, 0x98, 0xB0, 0x85, ++ 0xBB, 0xC5, 0x4F, 0xED, 0x86, 0x9A, 0x66, 0x11, ++ 0x8A, 0xE9, 0x04, 0xFE, 0xA0, 0x78, 0x25, 0x4B, ++ 0xA2, 0x5D, 0x80, 0x05, 0x3F, 0x21, 0x70, 0xF1, ++ 0x63, 0x77, 0xAF, 0x42, 0x20, 0xE5, 0xFD, 0xBF, ++ 0x81, 0x18, 0x26, 0xC3, 0xBE, 0x35, 0x88, 0x2E, ++ 0x93, 0x55, 0xFC, 0x7A, 0xC8, 0xBA, 0x32, 0xE6, ++ 0xC0, 0x19, 0x9E, 0xA3, 0x44, 0x54, 0x3B, 0x0B, ++ 0x8C, 0xC7, 0x6B, 0x28, 0xA7, 0xBC, 0x16, 0xAD, ++ 0xDB, 0x64, 0x74, 0x14, 0x92, 0x0C, 0x48, 0xB8, ++ 0x9F, 0xBD, 0x43, 0xC4, 0x39, 0x31, 0xD3, 0xF2, ++ 0xD5, 0x8B, 0x6E, 0xDA, 0x01, 0xB1, 0x9C, 0x49, ++ 0xD8, 0xAC, 0xF3, 0xCF, 0xCA, 0xF4, 0x47, 0x10, ++ 0x6F, 0xF0, 0x4A, 0x5C, 0x38, 0x57, 0x73, 0x97, ++ 0xCB, 0xA1, 0xE8, 0x3E, 0x96, 0x61, 0x0D, 0x0F, ++ 0xE0, 0x7C, 0x71, 0xCC, 0x90, 0x06, 0xF7, 0x1C, ++ 0xC2, 0x6A, 0xAE, 0x69, 0x17, 0x99, 0x3A, 0x27, ++ 0xD9, 0xEB, 0x2B, 0x22, 0xD2, 0xA9, 0x07, 0x33, ++ 0x2D, 0x3C, 0x15, 0xC9, 0x87, 0xAA, 0x50, 0xA5, ++ 0x03, 0x59, 0x09, 0x1A, 0x65, 0xD7, 0x84, 0xD0, ++ 0x82, 0x29, 0x5A, 0x1E, 0x7B, 0xA8, 0x6D, 0x2C + }; + + // + // Expanded IV for TKIP function. + // +-typedef struct PACKED _IV_CONTROL_ +-{ +- union PACKED +- { +- struct PACKED +- { +- UCHAR rc0; +- UCHAR rc1; +- UCHAR rc2; +- +- union PACKED +- { +- struct PACKED +- { +- UCHAR Rsvd:5; +- UCHAR ExtIV:1; +- UCHAR KeyID:2; +- } field; +- UCHAR Byte; +- } CONTROL; +- } field; +- +- ULONG word; +- } IV16; +- +- ULONG IV32; +-} TKIP_IV, *PTKIP_IV; +- ++typedef struct PACKED _IV_CONTROL_ { ++ union PACKED { ++ struct PACKED { ++ UCHAR rc0; ++ UCHAR rc1; ++ UCHAR rc2; ++ ++ union PACKED { ++ struct PACKED { ++ UCHAR Rsvd:5; ++ UCHAR ExtIV:1; ++ UCHAR KeyID:2; ++ } field; ++ UCHAR Byte; ++ } CONTROL; ++ } field; ++ ++ ULONG word; ++ } IV16; ++ ++ ULONG IV32; ++} TKIP_IV, *PTKIP_IV; + + /* + ======================================================================== +@@ -162,14 +154,12 @@ typedef struct PACKED _IV_CONTROL_ + + ======================================================================== + */ +-ULONG RTMPTkipGetUInt32( +- IN PUCHAR pMICKey) ++ULONG RTMPTkipGetUInt32(IN PUCHAR pMICKey) + { +- ULONG res = 0; +- INT i; ++ ULONG res = 0; ++ INT i; + +- for (i = 0; i < 4; i++) +- { ++ for (i = 0; i < 4; i++) { + res |= (*pMICKey++) << (8 * i); + } + +@@ -195,14 +185,11 @@ ULONG RTMPTkipGetUInt32( + + ======================================================================== + */ +-VOID RTMPTkipPutUInt32( +- IN OUT PUCHAR pDst, +- IN ULONG val) ++VOID RTMPTkipPutUInt32(IN OUT PUCHAR pDst, IN ULONG val) + { + INT i; + +- for(i = 0; i < 4; i++) +- { ++ for (i = 0; i < 4; i++) { + *pDst++ = (UCHAR) (val & 0xff); + val >>= 8; + } +@@ -227,9 +214,7 @@ VOID RTMPTkipPutUInt32( + + ======================================================================== + */ +-VOID RTMPTkipSetMICKey( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pMICKey) ++VOID RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pMICKey) + { + // Set the key + pTkip->K0 = RTMPTkipGetUInt32(pMICKey); +@@ -260,24 +245,23 @@ VOID RTMPTkipSetMICKey( + + ======================================================================== + */ +-VOID RTMPTkipAppendByte( +- IN PTKIP_KEY_INFO pTkip, +- IN UCHAR uChar) ++VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) + { + // Append the byte to our word-sized buffer +- pTkip->M |= (uChar << (8* pTkip->nBytesInM)); ++ pTkip->M |= (uChar << (8 * pTkip->nBytesInM)); + pTkip->nBytesInM++; + // Process the word if it is full. +- if( pTkip->nBytesInM >= 4 ) +- { ++ if (pTkip->nBytesInM >= 4) { + pTkip->L ^= pTkip->M; +- pTkip->R ^= ROL32( pTkip->L, 17 ); ++ pTkip->R ^= ROL32(pTkip->L, 17); + pTkip->L += pTkip->R; +- pTkip->R ^= ((pTkip->L & 0xff00ff00) >> 8) | ((pTkip->L & 0x00ff00ff) << 8); ++ pTkip->R ^= ++ ((pTkip->L & 0xff00ff00) >> 8) | ((pTkip-> ++ L & 0x00ff00ff) << 8); + pTkip->L += pTkip->R; +- pTkip->R ^= ROL32( pTkip->L, 3 ); ++ pTkip->R ^= ROL32(pTkip->L, 3); + pTkip->L += pTkip->R; +- pTkip->R ^= ROR32( pTkip->L, 2 ); ++ pTkip->R ^= ROR32(pTkip->L, 2); + pTkip->L += pTkip->R; + // Clear the buffer + pTkip->M = 0; +@@ -305,14 +289,10 @@ VOID RTMPTkipAppendByte( + + ======================================================================== + */ +-VOID RTMPTkipAppend( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pSrc, +- IN UINT nBytes) ++VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes) + { + // This is simple +- while(nBytes > 0) +- { ++ while (nBytes > 0) { + RTMPTkipAppendByte(pTkip, *pSrc++); + nBytes--; + } +@@ -336,19 +316,17 @@ VOID RTMPTkipAppend( + the MIC Value is store in pAd->PrivateInfo.MIC + ======================================================================== + */ +-VOID RTMPTkipGetMIC( +- IN PTKIP_KEY_INFO pTkip) ++VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) + { + // Append the minimum padding +- RTMPTkipAppendByte(pTkip, 0x5a ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); +- RTMPTkipAppendByte(pTkip, 0 ); ++ RTMPTkipAppendByte(pTkip, 0x5a); ++ RTMPTkipAppendByte(pTkip, 0); ++ RTMPTkipAppendByte(pTkip, 0); ++ RTMPTkipAppendByte(pTkip, 0); ++ RTMPTkipAppendByte(pTkip, 0); + // and then zeroes until the length is a multiple of 4 +- while( pTkip->nBytesInM != 0 ) +- { +- RTMPTkipAppendByte(pTkip, 0 ); ++ while (pTkip->nBytesInM != 0) { ++ RTMPTkipAppendByte(pTkip, 0); + } + // The appendByte function has already computed the result. + RTMPTkipPutUInt32(pTkip->MIC, pTkip->L); +@@ -377,27 +355,24 @@ VOID RTMPTkipGetMIC( + + ======================================================================== + */ +-VOID RTMPInitTkipEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, +- OUT PULONG pIV16, +- OUT PULONG pIV32) ++VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN UCHAR KeyId, ++ IN PUCHAR pTA, ++ IN PUCHAR pMICKey, ++ IN PUCHAR pTSC, OUT PULONG pIV16, OUT PULONG pIV32) + { +- TKIP_IV tkipIv; ++ TKIP_IV tkipIv; + + // Prepare 8 bytes TKIP encapsulation for MPDU + NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); + tkipIv.IV16.field.rc0 = *(pTSC + 1); + tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; + tkipIv.IV16.field.rc2 = *pTSC; +- tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV ++ tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV + tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; +-// tkipIv.IV32 = *(PULONG)(pTSC + 2); +- NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV ++// tkipIv.IV32 = *(PULONG)(pTSC + 2); ++ NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV + + *pIV16 = tkipIv.IV16.word; + *pIV32 = tkipIv.IV32; +@@ -424,13 +399,10 @@ VOID RTMPInitTkipEngine( + + ======================================================================== + */ +-VOID RTMPInitMICEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN UCHAR UserPriority, +- IN PUCHAR pMICKey) ++VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, IN UCHAR UserPriority, IN PUCHAR pMICKey) + { + ULONG Priority = UserPriority; + +@@ -441,7 +413,7 @@ VOID RTMPInitMICEngine( + // SA + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); + // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR)&Priority, 4); ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR) & Priority, 4); + } + + /* +@@ -468,17 +440,15 @@ VOID RTMPInitMICEngine( + + ======================================================================== + */ +-BOOLEAN RTMPTkipCompareMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, +- IN UINT Len) ++BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, ++ IN PUCHAR pMICKey, ++ IN UCHAR UserPriority, IN UINT Len) + { +- UCHAR OldMic[8]; +- ULONG Priority = UserPriority; ++ UCHAR OldMic[8]; ++ ULONG Priority = UserPriority; + + // Init MIC value calculation + RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +@@ -487,7 +457,7 @@ BOOLEAN RTMPTkipCompareMICValue( + // SA + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); + // Priority + 3 bytes of 0 +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR)&Priority, 4); ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR) & Priority, 4); + + // Calculate MIC value from plain text data + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +@@ -500,10 +470,8 @@ BOOLEAN RTMPTkipCompareMICValue( + + // Move MIC value from MSDU, this steps should move to data path. + // Since the MIC value might cross MPDUs. +- if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. +- ++ if (!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. + + return (FALSE); + } +@@ -532,19 +500,17 @@ BOOLEAN RTMPTkipCompareMICValue( + + ======================================================================== + */ +-VOID RTMPCalculateMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, +- IN UCHAR apidx) ++VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pEncap, ++ IN PCIPHER_KEY pKey, IN UCHAR apidx) + { +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PUCHAR pSrc; +- UCHAR UserPriority; +- UCHAR vlan_offset = 0; ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ PUCHAR pSrc; ++ UCHAR UserPriority; ++ UCHAR vlan_offset = 0; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +@@ -556,41 +522,33 @@ VOID RTMPCalculateMICValue( + vlan_offset = 4; + + { +- RTMPInitMICEngine( +- pAd, +- pKey->Key, +- pSrc, +- pSrc + 6, +- UserPriority, +- pKey->TxMic); ++ RTMPInitMICEngine(pAd, ++ pKey->Key, ++ pSrc, pSrc + 6, UserPriority, pKey->TxMic); + } + +- +- if (pEncap != NULL) +- { ++ if (pEncap != NULL) { + // LLC encapsulation + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pEncap, 6); + // Protocol Type +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, 2); ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, ++ 2); + } + SrcBufLen -= (14 + vlan_offset); + pSrc += (14 + vlan_offset); +- do +- { +- if (SrcBufLen > 0) +- { ++ do { ++ if (SrcBufLen > 0) { + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen); + } + +- break; // No need handle next packet ++ break; // No need handle next packet + +- } while (TRUE); // End of copying payload ++ } while (TRUE); // End of copying payload + + // Compute the final MIC Value + RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); + } + +- + /************************************************************/ + /* tkip_sbox() */ + /* Returns a 16 bit value from a 64K entry table. The Table */ +@@ -607,7 +565,8 @@ UINT tkip_sbox(UINT index) + index_high = ((index >> 8) % 256); + + left = Tkip_Sbox_Lower[index_low] + (Tkip_Sbox_Upper[index_low] * 256); +- right = Tkip_Sbox_Upper[index_high] + (Tkip_Sbox_Lower[index_high] * 256); ++ right = ++ Tkip_Sbox_Upper[index_high] + (Tkip_Sbox_Lower[index_high] * 256); + + return (left ^ right); + } +@@ -616,25 +575,18 @@ UINT rotr1(UINT a) + { + unsigned int b; + +- if ((a & 0x01) == 0x01) +- { ++ if ((a & 0x01) == 0x01) { + b = (a >> 1) | 0x8000; +- } +- else +- { ++ } else { + b = (a >> 1) & 0x7fff; + } + b = b % 65536; + return b; + } + +-VOID RTMPTkipMixKey( +- UCHAR *key, +- UCHAR *ta, +- ULONG pnl, /* Least significant 16 bits of PN */ +- ULONG pnh, /* Most significant 32 bits of PN */ +- UCHAR *rc4key, +- UINT *p1k) ++VOID RTMPTkipMixKey(UCHAR * key, UCHAR * ta, ULONG pnl, /* Least significant 16 bits of PN */ ++ ULONG pnh, /* Most significant 32 bits of PN */ ++ UCHAR * rc4key, UINT * p1k) + { + + UINT tsc0; +@@ -651,26 +603,40 @@ VOID RTMPTkipMixKey( + INT i; + INT j; + +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ ++ tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ + tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ ++ tsc2 = (unsigned int)(pnl % 65536); /* lsb */ + + /* Phase 1, step 1 */ + p1k[0] = tsc1; + p1k[1] = tsc0; +- p1k[2] = (UINT)(ta[0] + (ta[1]*256)); +- p1k[3] = (UINT)(ta[2] + (ta[3]*256)); +- p1k[4] = (UINT)(ta[4] + (ta[5]*256)); ++ p1k[2] = (UINT) (ta[0] + (ta[1] * 256)); ++ p1k[3] = (UINT) (ta[2] + (ta[3] * 256)); ++ p1k[4] = (UINT) (ta[4] + (ta[5] * 256)); + + /* Phase 1, step 2 */ +- for (i=0; i<8; i++) +- { +- j = 2*(i & 1); +- p1k[0] = (p1k[0] + tkip_sbox( (p1k[4] ^ ((256*key[1+j]) + key[j])) % 65536 )) % 65536; +- p1k[1] = (p1k[1] + tkip_sbox( (p1k[0] ^ ((256*key[5+j]) + key[4+j])) % 65536 )) % 65536; +- p1k[2] = (p1k[2] + tkip_sbox( (p1k[1] ^ ((256*key[9+j]) + key[8+j])) % 65536 )) % 65536; +- p1k[3] = (p1k[3] + tkip_sbox( (p1k[2] ^ ((256*key[13+j]) + key[12+j])) % 65536 )) % 65536; +- p1k[4] = (p1k[4] + tkip_sbox( (p1k[3] ^ (((256*key[1+j]) + key[j]))) % 65536 )) % 65536; ++ for (i = 0; i < 8; i++) { ++ j = 2 * (i & 1); ++ p1k[0] = ++ (p1k[0] + ++ tkip_sbox((p1k[4] ^ ((256 * key[1 + j]) + key[j])) % ++ 65536)) % 65536; ++ p1k[1] = ++ (p1k[1] + ++ tkip_sbox((p1k[0] ^ ((256 * key[5 + j]) + key[4 + j])) % ++ 65536)) % 65536; ++ p1k[2] = ++ (p1k[2] + ++ tkip_sbox((p1k[1] ^ ((256 * key[9 + j]) + key[8 + j])) % ++ 65536)) % 65536; ++ p1k[3] = ++ (p1k[3] + ++ tkip_sbox((p1k[2] ^ ((256 * key[13 + j]) + key[12 + j])) % ++ 65536)) % 65536; ++ p1k[4] = ++ (p1k[4] + ++ tkip_sbox((p1k[3] ^ (((256 * key[1 + j]) + key[j]))) % ++ 65536)) % 65536; + p1k[4] = (p1k[4] + i) % 65536; + } + +@@ -683,31 +649,31 @@ VOID RTMPTkipMixKey( + ppk5 = (p1k[4] + tsc2) % 65536; + + /* Phase2, Step 2 */ +- ppk0 = ppk0 + tkip_sbox( (ppk5 ^ ((256*key[1]) + key[0])) % 65536); +- ppk1 = ppk1 + tkip_sbox( (ppk0 ^ ((256*key[3]) + key[2])) % 65536); +- ppk2 = ppk2 + tkip_sbox( (ppk1 ^ ((256*key[5]) + key[4])) % 65536); +- ppk3 = ppk3 + tkip_sbox( (ppk2 ^ ((256*key[7]) + key[6])) % 65536); +- ppk4 = ppk4 + tkip_sbox( (ppk3 ^ ((256*key[9]) + key[8])) % 65536); +- ppk5 = ppk5 + tkip_sbox( (ppk4 ^ ((256*key[11]) + key[10])) % 65536); +- +- ppk0 = ppk0 + rotr1(ppk5 ^ ((256*key[13]) + key[12])); +- ppk1 = ppk1 + rotr1(ppk0 ^ ((256*key[15]) + key[14])); ++ ppk0 = ppk0 + tkip_sbox((ppk5 ^ ((256 * key[1]) + key[0])) % 65536); ++ ppk1 = ppk1 + tkip_sbox((ppk0 ^ ((256 * key[3]) + key[2])) % 65536); ++ ppk2 = ppk2 + tkip_sbox((ppk1 ^ ((256 * key[5]) + key[4])) % 65536); ++ ppk3 = ppk3 + tkip_sbox((ppk2 ^ ((256 * key[7]) + key[6])) % 65536); ++ ppk4 = ppk4 + tkip_sbox((ppk3 ^ ((256 * key[9]) + key[8])) % 65536); ++ ppk5 = ppk5 + tkip_sbox((ppk4 ^ ((256 * key[11]) + key[10])) % 65536); ++ ++ ppk0 = ppk0 + rotr1(ppk5 ^ ((256 * key[13]) + key[12])); ++ ppk1 = ppk1 + rotr1(ppk0 ^ ((256 * key[15]) + key[14])); + ppk2 = ppk2 + rotr1(ppk1); + ppk3 = ppk3 + rotr1(ppk2); + ppk4 = ppk4 + rotr1(ppk3); + ppk5 = ppk5 + rotr1(ppk4); + + /* Phase 2, Step 3 */ +- /* Phase 2, Step 3 */ ++ /* Phase 2, Step 3 */ + +- tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ ++ tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ + tsc1 = (unsigned int)(pnh % 65536); +- tsc2 = (unsigned int)(pnl % 65536); /* lsb */ ++ tsc2 = (unsigned int)(pnl % 65536); /* lsb */ + + rc4key[0] = (tsc2 >> 8) % 256; + rc4key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f; + rc4key[2] = tsc2 % 256; +- rc4key[3] = ((ppk5 ^ ((256*key[1]) + key[0])) >> 1) % 256; ++ rc4key[3] = ((ppk5 ^ ((256 * key[1]) + key[0])) >> 1) % 256; + + rc4key[4] = ppk0 % 256; + rc4key[5] = (ppk0 >> 8) % 256; +@@ -728,155 +694,140 @@ VOID RTMPTkipMixKey( + rc4key[15] = (ppk5 >> 8) % 256; + } + +- + // + // TRUE: Success! + // FALSE: Decrypt Error! + // +-BOOLEAN RTMPSoftDecryptTKIP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, +- IN PCIPHER_KEY pWpaKey) ++BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, ++ IN UCHAR UserPriority, IN PCIPHER_KEY pWpaKey) + { +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR fc0; +- UCHAR fc1; +- USHORT fc; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- USHORT duration; +- USHORT seq_control; +- USHORT qos_control; +- UCHAR TA[MAC_ADDR_LEN]; +- UCHAR DA[MAC_ADDR_LEN]; +- UCHAR SA[MAC_ADDR_LEN]; +- UCHAR RC4Key[16]; +- UINT p1k[5]; //for mix_key; +- ULONG pnl;/* Least significant 16 bits of PN */ +- ULONG pnh;/* Most significant 32 bits of PN */ +- UINT num_blocks; +- UINT payload_remainder; +- ARCFOURCONTEXT ArcFourContext; +- UINT crc32 = 0; +- UINT trailfcs = 0; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; +- ++ UCHAR KeyID; ++ UINT HeaderLen; ++ UCHAR fc0; ++ UCHAR fc1; ++ USHORT fc; ++ UINT frame_type; ++ UINT frame_subtype; ++ UINT from_ds; ++ UINT to_ds; ++ INT a4_exists; ++ INT qc_exists; ++ USHORT duration; ++ USHORT seq_control; ++ USHORT qos_control; ++ UCHAR TA[MAC_ADDR_LEN]; ++ UCHAR DA[MAC_ADDR_LEN]; ++ UCHAR SA[MAC_ADDR_LEN]; ++ UCHAR RC4Key[16]; ++ UINT p1k[5]; //for mix_key; ++ ULONG pnl; /* Least significant 16 bits of PN */ ++ ULONG pnh; /* Most significant 32 bits of PN */ ++ UINT num_blocks; ++ UINT payload_remainder; ++ ARCFOURCONTEXT ArcFourContext; ++ UINT crc32 = 0; ++ UINT trailfcs = 0; ++ UCHAR MIC[8]; ++ UCHAR TrailMIC[8]; + + fc0 = *pData; + fc1 = *(pData + 1); + +- fc = *((PUSHORT)pData); ++ fc = *((PUSHORT) pData); + + frame_type = ((fc0 >> 2) & 0x03); + frame_subtype = ((fc0 >> 4) & 0x0f); + +- from_ds = (fc1 & 0x2) >> 1; +- to_ds = (fc1 & 0x1); ++ from_ds = (fc1 & 0x2) >> 1; ++ to_ds = (fc1 & 0x1); + +- a4_exists = (from_ds & to_ds); +- qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ +- (frame_subtype == 0x09) || /* Likely to change. */ +- (frame_subtype == 0x0a) || +- (frame_subtype == 0x0b) +- ); ++ a4_exists = (from_ds & to_ds); ++ qc_exists = ((frame_subtype == 0x08) || /* Assumed QoS subtypes */ ++ (frame_subtype == 0x09) || /* Likely to change. */ ++ (frame_subtype == 0x0a) || (frame_subtype == 0x0b) ++ ); + + HeaderLen = 24; + if (a4_exists) + HeaderLen += 6; + +- KeyID = *((PUCHAR)(pData+ HeaderLen + 3)); ++ KeyID = *((PUCHAR) (pData + HeaderLen + 3)); + KeyID = KeyID >> 6; + +- if (pWpaKey[KeyID].KeyLen == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP failed!(KeyID[%d] Length can not be 0)\n", KeyID)); ++ if (pWpaKey[KeyID].KeyLen == 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSoftDecryptTKIP failed!(KeyID[%d] Length can not be 0)\n", ++ KeyID)); + return FALSE; + } + +- duration = *((PUSHORT)(pData+2)); ++ duration = *((PUSHORT) (pData + 2)); + +- seq_control = *((PUSHORT)(pData+22)); ++ seq_control = *((PUSHORT) (pData + 22)); + +- if (qc_exists) +- { +- if (a4_exists) +- { +- qos_control = *((PUSHORT)(pData+30)); +- } +- else +- { +- qos_control = *((PUSHORT)(pData+24)); ++ if (qc_exists) { ++ if (a4_exists) { ++ qos_control = *((PUSHORT) (pData + 30)); ++ } else { ++ qos_control = *((PUSHORT) (pData + 24)); + } + } + +- if (to_ds == 0 && from_ds == 1) +- { +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); //BSSID +- } +- else if (to_ds == 0 && from_ds == 0 ) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+4, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 0) +- { +- NdisMoveMemory(SA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- } +- else if (to_ds == 1 && from_ds == 1) +- { +- NdisMoveMemory(TA, pData+10, MAC_ADDR_LEN); +- NdisMoveMemory(DA, pData+16, MAC_ADDR_LEN); +- NdisMoveMemory(SA, pData+22, MAC_ADDR_LEN); ++ if (to_ds == 0 && from_ds == 1) { ++ NdisMoveMemory(DA, pData + 4, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData + 16, MAC_ADDR_LEN); ++ NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); //BSSID ++ } else if (to_ds == 0 && from_ds == 0) { ++ NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData + 4, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData + 10, MAC_ADDR_LEN); ++ } else if (to_ds == 1 && from_ds == 0) { ++ NdisMoveMemory(SA, pData + 10, MAC_ADDR_LEN); ++ NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData + 16, MAC_ADDR_LEN); ++ } else if (to_ds == 1 && from_ds == 1) { ++ NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); ++ NdisMoveMemory(DA, pData + 16, MAC_ADDR_LEN); ++ NdisMoveMemory(SA, pData + 22, MAC_ADDR_LEN); + } + + num_blocks = (DataByteCnt - 16) / 16; + payload_remainder = (DataByteCnt - 16) % 16; + + pnl = (*(pData + HeaderLen)) * 256 + *(pData + HeaderLen + 2); +- pnh = *((PULONG)(pData + HeaderLen + 4)); ++ pnh = *((PULONG) (pData + HeaderLen + 4)); + pnh = cpu2le32(pnh); + RTMPTkipMixKey(pWpaKey[KeyID].Key, TA, pnl, pnh, RC4Key, p1k); + + ARCFOUR_INIT(&ArcFourContext, RC4Key, 16); + +- ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); ++ ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, ++ pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); + NdisMoveMemory(&trailfcs, pData + DataByteCnt - 8 - 4, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). ++ crc32 ^= 0xffffffff; /* complement */ + +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. ++ if (crc32 != cpu2le32(trailfcs)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. + + return (FALSE); + } + + NdisMoveMemory(TrailMIC, pData + DataByteCnt - 8 - 8 - 4, 8); +- RTMPInitMICEngine(pAd, pWpaKey[KeyID].Key, DA, SA, UserPriority, pWpaKey[KeyID].RxMic); +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 12); ++ RTMPInitMICEngine(pAd, pWpaKey[KeyID].Key, DA, SA, UserPriority, ++ pWpaKey[KeyID].RxMic); ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, pData + HeaderLen, ++ DataByteCnt - HeaderLen - 8 - 12); + RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); + NdisMoveMemory(MIC, pAd->PrivateInfo.Tx.MIC, 8); + +- if (!NdisEqualMemory(MIC, TrailMIC, 8)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. +- //RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 ++ if (!NdisEqualMemory(MIC, TrailMIC, 8)) { ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. ++ //RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 + return (FALSE); + } +- + //DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); + return TRUE; + } +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +index b13858d..4f407e9 100644 +--- a/drivers/staging/rt2860/common/cmm_wep.c ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -37,8 +37,7 @@ + + #include "../rt_config.h" + +-UINT FCSTAB_32[256] = +-{ ++UINT FCSTAB_32[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, +@@ -136,33 +135,31 @@ UCHAR WEPKEY[] = { + + ======================================================================== + */ +-VOID RTMPInitWepEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN UCHAR KeyLen, +- IN OUT PUCHAR pDest) ++VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN UCHAR KeyId, IN UCHAR KeyLen, IN OUT PUCHAR pDest) + { + UINT i; +- UCHAR WEPKEY[] = { ++ UCHAR WEPKEY[] = { + //IV + 0x00, 0x11, 0x22, + //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC ++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, ++ 0xAA, 0xBB, 0xCC + }; + +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. + +- { ++ { + NdisMoveMemory(WEPKEY + 3, pKey, KeyLen); + +- for(i = 0; i < 3; i++) +- WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) ++ for (i = 0; i < 3; i++) ++ WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) + +- NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector +- } +- *(pDest+3) = (KeyId << 6); //Append KEYID ++ NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector ++ } ++ *(pDest + 3) = (KeyId << 6); //Append KEYID + + } + +@@ -187,17 +184,14 @@ VOID RTMPInitWepEngine( + + ======================================================================== + */ +-VOID RTMPEncryptData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDest, +- IN UINT Len) ++VOID RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, IN PUCHAR pDest, IN UINT Len) + { +- pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); ++ pAd->PrivateInfo.FCSCRC32 = ++ RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); + ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, pSrc, Len); + } + +- + /* + ======================================================================== + +@@ -217,40 +211,41 @@ VOID RTMPEncryptData( + + ======================================================================== + */ +-BOOLEAN RTMPSoftDecryptWEP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pGroupKey) ++BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, IN PCIPHER_KEY pGroupKey) + { +- UINT trailfcs; +- UINT crc32; +- UCHAR KeyIdx; +- UCHAR WEPKEY[] = { ++ UINT trailfcs; ++ UINT crc32; ++ UCHAR KeyIdx; ++ UCHAR WEPKEY[] = { + //IV + 0x00, 0x11, 0x22, + //WEP KEY +- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC ++ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, ++ 0xAA, 0xBB, 0xCC + }; +- UCHAR *pPayload = (UCHAR *)pData + LENGTH_802_11; +- ULONG payload_len = DataByteCnt - LENGTH_802_11; ++ UCHAR *pPayload = (UCHAR *) pData + LENGTH_802_11; ++ ULONG payload_len = DataByteCnt - LENGTH_802_11; + +- NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV ++ NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV + + KeyIdx = (*(pPayload + 3) & 0xc0) >> 6; + if (pGroupKey[KeyIdx].KeyLen == 0) + return (FALSE); + +- NdisMoveMemory(WEPKEY + 3, pGroupKey[KeyIdx].Key, pGroupKey[KeyIdx].KeyLen); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, pGroupKey[KeyIdx].KeyLen + 3); +- ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, payload_len - 4); ++ NdisMoveMemory(WEPKEY + 3, pGroupKey[KeyIdx].Key, ++ pGroupKey[KeyIdx].KeyLen); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, ++ pGroupKey[KeyIdx].KeyLen + 3); ++ ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, ++ payload_len - 4); + NdisMoveMemory(&trailfcs, pPayload + payload_len - 8, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). +- crc32 ^= 0xffffffff; /* complement */ ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). ++ crc32 ^= 0xffffffff; /* complement */ + +- if(crc32 != cpu2le32(trailfcs)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. ++ if (crc32 != cpu2le32(trailfcs)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. + return (FALSE); + } + return (TRUE); +@@ -276,26 +271,22 @@ BOOLEAN RTMPSoftDecryptWEP( + + ======================================================================== + */ +-VOID ARCFOUR_INIT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pKey, +- IN UINT KeyLen) ++VOID ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, IN PUCHAR pKey, IN UINT KeyLen) + { +- UCHAR t, u; +- UINT keyindex; +- UINT stateindex; +- PUCHAR state; +- UINT counter; ++ UCHAR t, u; ++ UINT keyindex; ++ UINT stateindex; ++ PUCHAR state; ++ UINT counter; + + state = Ctx->STATE; + Ctx->X = 0; + Ctx->Y = 0; + for (counter = 0; counter < 256; counter++) +- state[counter] = (UCHAR)counter; ++ state[counter] = (UCHAR) counter; + keyindex = 0; + stateindex = 0; +- for (counter = 0; counter < 256; counter++) +- { ++ for (counter = 0; counter < 256; counter++) { + t = state[counter]; + stateindex = (stateindex + pKey[keyindex] + t) & 0xff; + u = state[stateindex]; +@@ -322,25 +313,24 @@ VOID ARCFOUR_INIT( + + ======================================================================== + */ +-UCHAR ARCFOUR_BYTE( +- IN PARCFOURCONTEXT Ctx) ++UCHAR ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) + { +- UINT x; +- UINT y; +- UCHAR sx, sy; +- PUCHAR state; +- +- state = Ctx->STATE; +- x = (Ctx->X + 1) & 0xff; +- sx = state[x]; +- y = (sx + Ctx->Y) & 0xff; +- sy = state[y]; +- Ctx->X = x; +- Ctx->Y = y; +- state[y] = sx; +- state[x] = sy; +- +- return(state[(sx + sy) & 0xff]); ++ UINT x; ++ UINT y; ++ UCHAR sx, sy; ++ PUCHAR state; ++ ++ state = Ctx->STATE; ++ x = (Ctx->X + 1) & 0xff; ++ sx = state[x]; ++ y = (sx + Ctx->Y) & 0xff; ++ sy = state[y]; ++ Ctx->X = x; ++ Ctx->Y = y; ++ state[y] = sx; ++ state[x] = sy; ++ ++ return (state[(sx + sy) & 0xff]); + + } + +@@ -363,11 +353,8 @@ UCHAR ARCFOUR_BYTE( + + ======================================================================== + */ +-VOID ARCFOUR_DECRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) ++VOID ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) + { + UINT i; + +@@ -396,11 +383,8 @@ VOID ARCFOUR_DECRYPT( + + ======================================================================== + */ +-VOID ARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) ++VOID ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) + { + UINT i; + +@@ -420,26 +404,21 @@ VOID ARCFOUR_ENCRYPT( + pSrc Pointer to the Source data + Len Indicate the length of the Source dta + +- + ======================================================================== + */ + +-VOID WPAARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len) ++VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) + { + UINT i; +- //discard first 256 bytes ++ //discard first 256 bytes + for (i = 0; i < 256; i++) +- ARCFOUR_BYTE(Ctx); ++ ARCFOUR_BYTE(Ctx); + + for (i = 0; i < Len; i++) + pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); + } + +- + /* + ======================================================================== + +@@ -460,18 +439,14 @@ VOID WPAARCFOUR_ENCRYPT( + + ======================================================================== + */ +-UINT RTMP_CALC_FCS32( +- IN UINT Fcs, +- IN PUCHAR Cp, +- IN INT Len) ++UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len) + { + while (Len--) +- Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); ++ Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); + + return (Fcs); + } + +- + /* + ======================================================================== + +@@ -488,12 +463,11 @@ UINT RTMP_CALC_FCS32( + + ======================================================================== + */ +-VOID RTMPSetICV( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest) ++VOID RTMPSetICV(IN PRTMP_ADAPTER pAd, IN PUCHAR pDest) + { +- pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ ++ pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ + pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); + +- ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, (PUCHAR) &pAd->PrivateInfo.FCSCRC32, 4); ++ ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, ++ (PUCHAR) & pAd->PrivateInfo.FCSCRC32, 4); + } +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 5af78b8..4d070af 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -37,59 +37,47 @@ + */ + #include "../rt_config.h" + // WPA OUI +-UCHAR OUI_WPA_NONE_AKM[4] = {0x00, 0x50, 0xF2, 0x00}; +-UCHAR OUI_WPA_VERSION[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_WEP40[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_TKIP[4] = {0x00, 0x50, 0xF2, 0x02}; +-UCHAR OUI_WPA_CCMP[4] = {0x00, 0x50, 0xF2, 0x04}; +-UCHAR OUI_WPA_WEP104[4] = {0x00, 0x50, 0xF2, 0x05}; +-UCHAR OUI_WPA_8021X_AKM[4] = {0x00, 0x50, 0xF2, 0x01}; +-UCHAR OUI_WPA_PSK_AKM[4] = {0x00, 0x50, 0xF2, 0x02}; ++UCHAR OUI_WPA_NONE_AKM[4] = { 0x00, 0x50, 0xF2, 0x00 }; ++UCHAR OUI_WPA_VERSION[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++UCHAR OUI_WPA_WEP40[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++UCHAR OUI_WPA_TKIP[4] = { 0x00, 0x50, 0xF2, 0x02 }; ++UCHAR OUI_WPA_CCMP[4] = { 0x00, 0x50, 0xF2, 0x04 }; ++UCHAR OUI_WPA_WEP104[4] = { 0x00, 0x50, 0xF2, 0x05 }; ++UCHAR OUI_WPA_8021X_AKM[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++UCHAR OUI_WPA_PSK_AKM[4] = { 0x00, 0x50, 0xF2, 0x02 }; ++ + // WPA2 OUI +-UCHAR OUI_WPA2_WEP40[4] = {0x00, 0x0F, 0xAC, 0x01}; +-UCHAR OUI_WPA2_TKIP[4] = {0x00, 0x0F, 0xAC, 0x02}; +-UCHAR OUI_WPA2_CCMP[4] = {0x00, 0x0F, 0xAC, 0x04}; +-UCHAR OUI_WPA2_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x01}; +-UCHAR OUI_WPA2_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x02}; +-UCHAR OUI_WPA2_WEP104[4] = {0x00, 0x0F, 0xAC, 0x05}; +- +- +- +-static VOID ConstructEapolKeyData( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_LEN, +- OUT PEAPOL_PACKET pMsg); +- +-static VOID CalculateMIC( +- IN UCHAR KeyDescVer, +- IN UCHAR *PTK, +- OUT PEAPOL_PACKET pMsg); +- +-static VOID WpaEAPPacketAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLASFAlertAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLLogoffAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLStartAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-static VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++UCHAR OUI_WPA2_WEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 }; ++UCHAR OUI_WPA2_TKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 }; ++UCHAR OUI_WPA2_CCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 }; ++UCHAR OUI_WPA2_8021X_AKM[4] = { 0x00, 0x0F, 0xAC, 0x01 }; ++UCHAR OUI_WPA2_PSK_AKM[4] = { 0x00, 0x0F, 0xAC, 0x02 }; ++UCHAR OUI_WPA2_WEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 }; ++ ++static VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR keyDescVer, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR * GTK, ++ IN UCHAR * RSNIE, ++ IN UCHAR RSNIE_LEN, OUT PEAPOL_PACKET pMsg); ++ ++static VOID CalculateMIC(IN UCHAR KeyDescVer, ++ IN UCHAR * PTK, OUT PEAPOL_PACKET pMsg); ++ ++static VOID WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++static VOID WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem); ++ ++static VOID WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem); ++ ++static VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem); ++ ++static VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -99,18 +87,23 @@ static VOID WpaEAPOLKeyAction( + S - pointer to the association state machine + ========================================================================== + */ +-VOID WpaStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) ++VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(S, (STATE_MACHINE_FUNC *)Trans, MAX_WPA_PTK_STATE, MAX_WPA_MSG, (STATE_MACHINE_FUNC)Drop, WPA_PTK, WPA_MACHINE_BASE); +- +- StateMachineSetAction(S, WPA_PTK, MT2_EAPPacket, (STATE_MACHINE_FUNC)WpaEAPPacketAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLStart, (STATE_MACHINE_FUNC)WpaEAPOLStartAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLLogoff, (STATE_MACHINE_FUNC)WpaEAPOLLogoffAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLKey, (STATE_MACHINE_FUNC)WpaEAPOLKeyAction); +- StateMachineSetAction(S, WPA_PTK, MT2_EAPOLASFAlert, (STATE_MACHINE_FUNC)WpaEAPOLASFAlertAction); ++ StateMachineInit(S, (STATE_MACHINE_FUNC *) Trans, MAX_WPA_PTK_STATE, ++ MAX_WPA_MSG, (STATE_MACHINE_FUNC) Drop, WPA_PTK, ++ WPA_MACHINE_BASE); ++ ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPPacket, ++ (STATE_MACHINE_FUNC) WpaEAPPacketAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLStart, ++ (STATE_MACHINE_FUNC) WpaEAPOLStartAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLLogoff, ++ (STATE_MACHINE_FUNC) WpaEAPOLLogoffAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLKey, ++ (STATE_MACHINE_FUNC) WpaEAPOLKeyAction); ++ StateMachineSetAction(S, WPA_PTK, MT2_EAPOLASFAlert, ++ (STATE_MACHINE_FUNC) WpaEAPOLASFAlertAction); + } + + /* +@@ -122,21 +115,15 @@ VOID WpaStateMachineInit( + Return: + ========================================================================== + */ +-VOID WpaEAPPacketAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID WpaEAPOLASFAlertAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID WpaEAPOLLogoffAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +@@ -147,42 +134,44 @@ VOID WpaEAPOLLogoffAction( + Return: + ========================================================================== + */ +-VOID WpaEAPOLStartAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; +- +- DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLStartAction ===> \n")); +- +- pHeader = (PHEADER_802_11)Elem->Msg; +- +- //For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. +- if (Elem->MsgLen == 6) +- pEntry = MacTableLookup(pAd, Elem->Msg); +- else +- { +- pEntry = MacTableLookup(pAd, pHeader->Addr2); +- } +- +- if (pEntry) +- { +- DBGPRINT(RT_DEBUG_TRACE, (" PortSecured(%d), WpaState(%d), AuthMode(%d), PMKID_CacheIdx(%d) \n", pEntry->PortSecured, pEntry->WpaState, pEntry->AuthMode, pEntry->PMKID_CacheIdx)); +- +- if ((pEntry->PortSecured == WPA_802_1X_PORT_NOT_SECURED) +- && (pEntry->WpaState < AS_PTKSTART) +- && ((pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) || ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) && (pEntry->PMKID_CacheIdx != ENTRY_NOT_FOUND)))) +- { +- pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; +- pEntry->WpaState = AS_INITPSK; +- pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- NdisZeroMemory(pEntry->R_Counter, sizeof(pEntry->R_Counter)); +- pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; +- +- WPAStart4WayHS(pAd, pEntry, PEER_MSG1_RETRY_EXEC_INTV); +- } +- } ++ MAC_TABLE_ENTRY *pEntry; ++ PHEADER_802_11 pHeader; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLStartAction ===> \n")); ++ ++ pHeader = (PHEADER_802_11) Elem->Msg; ++ ++ //For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. ++ if (Elem->MsgLen == 6) ++ pEntry = MacTableLookup(pAd, Elem->Msg); ++ else { ++ pEntry = MacTableLookup(pAd, pHeader->Addr2); ++ } ++ ++ if (pEntry) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" PortSecured(%d), WpaState(%d), AuthMode(%d), PMKID_CacheIdx(%d) \n", ++ pEntry->PortSecured, pEntry->WpaState, ++ pEntry->AuthMode, pEntry->PMKID_CacheIdx)); ++ ++ if ((pEntry->PortSecured == WPA_802_1X_PORT_NOT_SECURED) ++ && (pEntry->WpaState < AS_PTKSTART) ++ && ((pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) ++ || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) ++ || ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) ++ && (pEntry->PMKID_CacheIdx != ENTRY_NOT_FOUND)))) { ++ pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; ++ pEntry->WpaState = AS_INITPSK; ++ pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED; ++ NdisZeroMemory(pEntry->R_Counter, ++ sizeof(pEntry->R_Counter)); ++ pEntry->ReTryCounter = PEER_MSG1_RETRY_TIMER_CTR; ++ ++ WPAStart4WayHS(pAd, pEntry, PEER_MSG1_RETRY_EXEC_INTV); ++ } ++ } + } + + /* +@@ -198,138 +187,154 @@ VOID WpaEAPOLStartAction( + Return: + ========================================================================== + */ +-VOID WpaEAPOLKeyAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; +- PEAPOL_PACKET pEapol_packet; +- KEY_INFO peerKeyInfo; ++ MAC_TABLE_ENTRY *pEntry; ++ PHEADER_802_11 pHeader; ++ PEAPOL_PACKET pEapol_packet; ++ KEY_INFO peerKeyInfo; + +- DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLKeyAction ===>\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLKeyAction ===>\n")); + +- pHeader = (PHEADER_802_11)Elem->Msg; +- pEapol_packet = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pHeader = (PHEADER_802_11) Elem->Msg; ++ pEapol_packet = ++ (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + +- NdisZeroMemory((PUCHAR)&peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR)&peerKeyInfo, (PUCHAR)&pEapol_packet->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ NdisZeroMemory((PUCHAR) & peerKeyInfo, sizeof(peerKeyInfo)); ++ NdisMoveMemory((PUCHAR) & peerKeyInfo, ++ (PUCHAR) & pEapol_packet->KeyDesc.KeyInfo, ++ sizeof(KEY_INFO)); + +- hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); ++ hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, ++ (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); + +- *((USHORT *)&peerKeyInfo) = cpu2le16(*((USHORT *)&peerKeyInfo)); ++ *((USHORT *) & peerKeyInfo) = cpu2le16(*((USHORT *) & peerKeyInfo)); + +- do +- { +- pEntry = MacTableLookup(pAd, pHeader->Addr2); ++ do { ++ pEntry = MacTableLookup(pAd, pHeader->Addr2); + +- if (!pEntry || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- break; ++ if (!pEntry ++ || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) ++ break; + + if (pEntry->AuthMode < Ndis802_11AuthModeWPA) +- break; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPoL-Key frame from STA %02X-%02X-%02X-%02X-%02X-%02X\n", PRINT_MAC(pEntry->Addr))); ++ break; + +- if (((pEapol_packet->ProVer != EAPOL_VER) && (pEapol_packet->ProVer != EAPOL_VER2)) || +- ((pEapol_packet->KeyDesc.Type != WPA1_KEY_DESC) && (pEapol_packet->KeyDesc.Type != WPA2_KEY_DESC))) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter does not match with WPA rule\n")); +- break; +- } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAPoL-Key frame from STA %02X-%02X-%02X-%02X-%02X-%02X\n", ++ PRINT_MAC(pEntry->Addr))); + ++ if (((pEapol_packet->ProVer != EAPOL_VER) ++ && (pEapol_packet->ProVer != EAPOL_VER2)) ++ || ((pEapol_packet->KeyDesc.Type != WPA1_KEY_DESC) ++ && (pEapol_packet->KeyDesc.Type != WPA2_KEY_DESC))) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Key descripter does not match with WPA rule\n")); ++ break; ++ } + // The value 1 shall be used for all EAPOL-Key frames to and from a STA when + // neither the group nor pairwise ciphers are CCMP for Key Descriptor 1. +- if ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_TKIP)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(TKIP) \n")); +- break; +- } ++ if ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) ++ && (peerKeyInfo.KeyDescVer != DESC_TYPE_TKIP)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Key descripter version not match(TKIP) \n")); ++ break; ++ } + // The value 2 shall be used for all EAPOL-Key frames to and from a STA when + // either the pairwise or the group cipher is AES-CCMP for Key Descriptor 2. +- else if ((pEntry->WepStatus == Ndis802_11Encryption3Enabled) && (peerKeyInfo.KeyDescVer != DESC_TYPE_AES)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Key descripter version not match(AES) \n")); +- break; +- } +- ++ else if ((pEntry->WepStatus == Ndis802_11Encryption3Enabled) ++ && (peerKeyInfo.KeyDescVer != DESC_TYPE_AES)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Key descripter version not match(AES) \n")); ++ break; ++ } + // Check if this STA is in class 3 state and the WPA state is started +- if ((pEntry->Sst == SST_ASSOC) && (pEntry->WpaState >= AS_INITPSK)) +- { ++ if ((pEntry->Sst == SST_ASSOC) ++ && (pEntry->WpaState >= AS_INITPSK)) { + // Check the Key Ack (bit 7) of the Key Information to determine the Authenticator + // or not. + // An EAPOL-Key frame that is sent by the Supplicant in response to an EAPOL- + // Key frame from the Authenticator must not have the Ack bit set. +- if (peerKeyInfo.KeyAck == 1) +- { ++ if (peerKeyInfo.KeyAck == 1) { + // The frame is snet by Authenticator. + // So the Supplicant side shall handle this. + +- if ((peerKeyInfo.Secure == 0) && (peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0) && (peerKeyInfo.KeyType == PAIRWISEKEY)) +- { ++ if ((peerKeyInfo.Secure == 0) ++ && (peerKeyInfo.Request == 0) ++ && (peerKeyInfo.Error == 0) ++ && (peerKeyInfo.KeyType == PAIRWISEKEY)) { + // Process 1. the message 1 of 4-way HS in WPA or WPA2 +- // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) +- // 2. the message 3 of 4-way HS in WPA +- // EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) ++ // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) ++ // 2. the message 3 of 4-way HS in WPA ++ // EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) + if (peerKeyInfo.KeyMic == 0) +- PeerPairMsg1Action(pAd, pEntry, Elem); +- else +- PeerPairMsg3Action(pAd, pEntry, Elem); +- } +- else if ((peerKeyInfo.Secure == 1) && +- (peerKeyInfo.KeyMic == 1) && +- (peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0)) +- { ++ PeerPairMsg1Action(pAd, pEntry, ++ Elem); ++ else ++ PeerPairMsg3Action(pAd, pEntry, ++ Elem); ++ } else if ((peerKeyInfo.Secure == 1) ++ && (peerKeyInfo.KeyMic == 1) ++ && (peerKeyInfo.Request == 0) ++ && (peerKeyInfo.Error == 0)) { + // Process 1. the message 3 of 4-way HS in WPA2 +- // EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) +- // 2. the message 1 of group KS in WPA or WPA2 +- // EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) ++ // EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) ++ // 2. the message 1 of group KS in WPA or WPA2 ++ // EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) + if (peerKeyInfo.KeyType == PAIRWISEKEY) +- PeerPairMsg3Action(pAd, pEntry, Elem); ++ PeerPairMsg3Action(pAd, pEntry, ++ Elem); + else +- PeerGroupMsg1Action(pAd, pEntry, Elem); ++ PeerGroupMsg1Action(pAd, pEntry, ++ Elem); + } +- } +- else +- { ++ } else { + // The frame is snet by Supplicant. + // So the Authenticator side shall handle this. + if ((peerKeyInfo.Request == 0) && +- (peerKeyInfo.Error == 0) && +- (peerKeyInfo.KeyMic == 1)) +- { +- if (peerKeyInfo.Secure == 0 && peerKeyInfo.KeyType == PAIRWISEKEY) +- { ++ (peerKeyInfo.Error == 0) && ++ (peerKeyInfo.KeyMic == 1)) { ++ if (peerKeyInfo.Secure == 0 ++ && peerKeyInfo.KeyType == ++ PAIRWISEKEY) { + // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) + // Process 1. message 2 of 4-way HS in WPA or WPA2 +- // 2. message 4 of 4-way HS in WPA +- if (CONV_ARRARY_TO_UINT16(pEapol_packet->KeyDesc.KeyDataLen) == 0) +- { +- PeerPairMsg4Action(pAd, pEntry, Elem); +- } +- else +- { +- PeerPairMsg2Action(pAd, pEntry, Elem); ++ // 2. message 4 of 4-way HS in WPA ++ if (CONV_ARRARY_TO_UINT16 ++ (pEapol_packet->KeyDesc. ++ KeyDataLen) == 0) { ++ PeerPairMsg4Action(pAd, ++ pEntry, ++ Elem); ++ } else { ++ PeerPairMsg2Action(pAd, ++ pEntry, ++ Elem); + } +- } +- else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == PAIRWISEKEY) +- { ++ } else if (peerKeyInfo.Secure == 1 ++ && peerKeyInfo.KeyType == ++ PAIRWISEKEY) { + // EAPOL-Key(1,1,0,0,P,0,0,0,MIC,0) + // Process message 4 of 4-way HS in WPA2 +- PeerPairMsg4Action(pAd, pEntry, Elem); +- } +- else if (peerKeyInfo.Secure == 1 && peerKeyInfo.KeyType == GROUPKEY) +- { ++ PeerPairMsg4Action(pAd, pEntry, ++ Elem); ++ } else if (peerKeyInfo.Secure == 1 ++ && peerKeyInfo.KeyType == ++ GROUPKEY) { + // EAPOL-Key(1,1,0,0,G,0,0,0,MIC,0) + // Process message 2 of Group key HS in WPA or WPA2 +- PeerGroupMsg2Action(pAd, pEntry, &Elem->Msg[LENGTH_802_11], (Elem->MsgLen - LENGTH_802_11)); ++ PeerGroupMsg2Action(pAd, pEntry, ++ &Elem-> ++ Msg ++ [LENGTH_802_11], ++ (Elem-> ++ MsgLen - ++ LENGTH_802_11)); + } + } + } +- } +- }while(FALSE); ++ } ++ } while (FALSE); + } + + /* +@@ -352,66 +357,71 @@ VOID WpaEAPOLKeyAction( + + ======================================================================== + */ +-VOID RTMPToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN BOOLEAN bClearFrame) ++VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, IN UINT DataLen, IN BOOLEAN bClearFrame) + { +- PNDIS_PACKET pPacket; +- NDIS_STATUS Status; ++ PNDIS_PACKET pPacket; ++ NDIS_STATUS Status; + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) + return; + +- do { ++ do { + // build a NDIS packet +- Status = RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, pData, DataLen); ++ Status = ++ RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, ++ pData, DataLen); + if (Status != NDIS_STATUS_SUCCESS) +- break; +- ++ break; + +- if (bClearFrame) +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 1); +- else +- RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 0); ++ if (bClearFrame) ++ RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 1); ++ else ++ RTMP_SET_PACKET_CLEAR_EAP_FRAME(pPacket, 0); + { + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); + + RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, MAIN_MBSSID); // set a default value +- if(pEntry->apidx != 0) +- RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, pEntry->apidx); ++ if (pEntry->apidx != 0) ++ RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, ++ pEntry-> ++ apidx); + +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid); ++ RTMP_SET_PACKET_WCID(pPacket, (UCHAR) pEntry->Aid); + RTMP_SET_PACKET_MOREDATA(pPacket, FALSE); + } + + { +- // send out the packet +- Status = STASendPacket(pAd, pPacket); +- if (Status == NDIS_STATUS_SUCCESS) +- { +- UCHAR Index; ++ // send out the packet ++ Status = STASendPacket(pAd, pPacket); ++ if (Status == NDIS_STATUS_SUCCESS) { ++ UCHAR Index; + + // Dequeue one frame from TxSwQueue0..3 queue and process it + // There are three place calling dequeue for TX ring. + // 1. Here, right after queueing the frame. + // 2. At the end of TxRingTxDone service routine. + // 3. Upon NDIS call RTMPSendPackets +- if((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) +- { +- for(Index = 0; Index < 5; Index ++) +- if(pAd->TxSwQueue[Index].Number > 0) +- RTMPDeQueuePacket(pAd, FALSE, Index, MAX_TX_PROCESS); ++ if ((!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ && ++ (!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS))) { ++ for (Index = 0; Index < 5; Index++) ++ if (pAd->TxSwQueue[Index]. ++ Number > 0) ++ RTMPDeQueuePacket(pAd, ++ FALSE, ++ Index, ++ MAX_TX_PROCESS); + } + } + } + +- } while (FALSE); ++ } while (FALSE); + } + + /* +@@ -423,74 +433,69 @@ VOID RTMPToWirelessSta( + + ========================================================================== + */ +-VOID WPAStart4WayHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN ULONG TimeInterval) ++VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN ULONG TimeInterval) + { +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PUINT8 pBssid = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PUINT8 pBssid = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; + +- DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart4WayHS\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart4WayHS\n")); + +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS)) ++ if (RTMP_TEST_FLAG ++ (pAd, ++ fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_HALT_IN_PROGRESS)) + { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : The interface is closed...\n")); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("[ERROR]WPAStart4WayHS : The interface is closed...\n")); + return; + } + +- +- if (pBssid == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : No corresponding Authenticator.\n")); ++ if (pBssid == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("[ERROR]WPAStart4WayHS : No corresponding Authenticator.\n")); + return; +- } +- ++ } + // Check the status +- if ((pEntry->WpaState > AS_PTKSTART) || (pEntry->WpaState < AS_INITPMK)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("[ERROR]WPAStart4WayHS : Not expect calling\n")); +- return; +- } +- ++ if ((pEntry->WpaState > AS_PTKSTART) || (pEntry->WpaState < AS_INITPMK)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("[ERROR]WPAStart4WayHS : Not expect calling\n")); ++ return; ++ } + + // Increment replay counter by 1 + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + + // Randomly generate ANonce +- GenRandom(pAd, (UCHAR *)pBssid, pEntry->ANonce); ++ GenRandom(pAd, (UCHAR *) pBssid, pEntry->ANonce); + + // Construct EAPoL message - Pairwise Msg 1 + // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_1, +- 0, // Default key index +- pEntry->ANonce, +- NULL, // TxRSC +- NULL, // GTK +- NULL, // RSNIE +- 0, // RSNIE length +- &EAPOLPKT); +- ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_1, 0, // Default key index ++ pEntry->ANonce, NULL, // TxRSC ++ NULL, // GTK ++ NULL, // RSNIE ++ 0, // RSNIE length ++ &EAPOLPKT); + + // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, Header802_3, +- LENGTH_802_3, (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, +- (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, Header802_3, ++ LENGTH_802_3, (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (pEntry->PortSecured == ++ WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); + + // Trigger Retry Timer +- RTMPModTimer(&pEntry->RetryTimer, TimeInterval); ++ RTMPModTimer(&pEntry->RetryTimer, TimeInterval); + + // Update State +- pEntry->WpaState = AS_PTKSTART; ++ pEntry->WpaState = AS_PTKSTART; + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart4WayHS: send Msg1 of 4-way \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== WPAStart4WayHS: send Msg1 of 4-way \n")); + + } + +@@ -511,29 +516,29 @@ VOID WPAStart4WayHS( + + ======================================================================== + */ +-VOID PeerPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR PTK[80]; +- UCHAR Header802_3[14]; +- PEAPOL_PACKET pMsg1; +- UINT MsgLen; +- EAPOL_PACKET EAPOLPKT; +- PUINT8 pCurrentAddr = NULL; +- PUINT8 pmk_ptr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; ++ UCHAR PTK[80]; ++ UCHAR Header802_3[14]; ++ PEAPOL_PACKET pMsg1; ++ UINT MsgLen; ++ EAPOL_PACKET EAPOLPKT; ++ PUINT8 pCurrentAddr = NULL; ++ PUINT8 pmk_ptr = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 rsnie_ptr = NULL; ++ UCHAR rsnie_len = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg1Action \n")); + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) + return; + +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- return; ++ if (Elem->MsgLen < ++ (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + ++ sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ return; + + { + pCurrentAddr = pAd->CurrentAddress; +@@ -544,32 +549,32 @@ VOID PeerPairMsg1Action( + } + + // Store the received frame +- pMsg1 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pMsg1 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + // Sanity Check peer Pairwise message 1 - Replay Counter +- if (PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pEntry) == FALSE) ++ if (PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pEntry) ++ == FALSE) + return; + + // Store Replay counter, it will use to verify message 3 and construct message 2 +- NdisMoveMemory(pEntry->R_Counter, pMsg1->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ NdisMoveMemory(pEntry->R_Counter, pMsg1->KeyDesc.ReplayCounter, ++ LEN_KEY_DESC_REPLAY); + + // Store ANonce +- NdisMoveMemory(pEntry->ANonce, pMsg1->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); ++ NdisMoveMemory(pEntry->ANonce, pMsg1->KeyDesc.KeyNonce, ++ LEN_KEY_DESC_NONCE); + + // Generate random SNonce +- GenRandom(pAd, (UCHAR *)pCurrentAddr, pEntry->SNonce); ++ GenRandom(pAd, (UCHAR *) pCurrentAddr, pEntry->SNonce); + + { +- // Calculate PTK(ANonce, SNonce) +- WpaDerivePTK(pAd, +- pmk_ptr, +- pEntry->ANonce, +- pEntry->Addr, +- pEntry->SNonce, +- pCurrentAddr, +- PTK, +- LEN_PTK); ++ // Calculate PTK(ANonce, SNonce) ++ WpaDerivePTK(pAd, ++ pmk_ptr, ++ pEntry->ANonce, ++ pEntry->Addr, ++ pEntry->SNonce, pCurrentAddr, PTK, LEN_PTK); + + // Save key to PTK entry + NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); +@@ -581,28 +586,22 @@ VOID PeerPairMsg1Action( + // Construct EAPoL message - Pairwise Msg 2 + // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_2, +- 0, // DefaultKeyIdx +- pEntry->SNonce, +- NULL, // TxRsc +- NULL, // GTK +- (UCHAR *)rsnie_ptr, +- rsnie_len, +- &EAPOLPKT); ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, // DefaultKeyIdx ++ pEntry->SNonce, NULL, // TxRsc ++ NULL, // GTK ++ (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); + + // Make outgoing frame + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + + RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ Header802_3, sizeof(Header802_3), (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); + } + +- + /* + ========================================================================== + Description: +@@ -610,76 +609,70 @@ VOID PeerPairMsg1Action( + Return: + ========================================================================== + */ +-VOID PeerPairMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR PTK[80]; +- BOOLEAN Cancelled; +- PHEADER_802_11 pHeader; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg2; +- UINT MsgLen; +- UCHAR Header802_3[LENGTH_802_3]; +- UCHAR TxTsc[6]; +- PUINT8 pBssid = NULL; +- PUINT8 pmk_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg2Action \n")); +- +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- return; +- +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- return; +- +- // check Entry in valid State +- if (pEntry->WpaState < AS_PTKSTART) +- return; ++ UCHAR PTK[80]; ++ BOOLEAN Cancelled; ++ PHEADER_802_11 pHeader; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pMsg2; ++ UINT MsgLen; ++ UCHAR Header802_3[LENGTH_802_3]; ++ UCHAR TxTsc[6]; ++ PUINT8 pBssid = NULL; ++ PUINT8 pmk_ptr = NULL; ++ PUINT8 gtk_ptr = NULL; ++ UCHAR default_key = 0; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 rsnie_ptr = NULL; ++ UCHAR rsnie_len = 0; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg2Action \n")); ++ ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ return; + ++ if (Elem->MsgLen < ++ (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + ++ sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ return; + ++ // check Entry in valid State ++ if (pEntry->WpaState < AS_PTKSTART) ++ return; + +- // pointer to 802.11 header +- pHeader = (PHEADER_802_11)Elem->Msg; ++ // pointer to 802.11 header ++ pHeader = (PHEADER_802_11) Elem->Msg; + + // skip 802.11_header(24-byte) and LLC_header(8) +- pMsg2 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pMsg2 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + // Store SNonce +- NdisMoveMemory(pEntry->SNonce, pMsg2->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE); ++ NdisMoveMemory(pEntry->SNonce, pMsg2->KeyDesc.KeyNonce, ++ LEN_KEY_DESC_NONCE); + + { + // Derive PTK +- WpaDerivePTK(pAd, +- (UCHAR *)pmk_ptr, +- pEntry->ANonce, // ANONCE +- (UCHAR *)pBssid, +- pEntry->SNonce, // SNONCE +- pEntry->Addr, +- PTK, +- LEN_PTK); +- +- NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); ++ WpaDerivePTK(pAd, (UCHAR *) pmk_ptr, pEntry->ANonce, // ANONCE ++ (UCHAR *) pBssid, pEntry->SNonce, // SNONCE ++ pEntry->Addr, PTK, LEN_PTK); ++ ++ NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); + } + + // Sanity Check peer Pairwise message 2 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pMsg2, MsgLen, EAPOL_PAIR_MSG_2, pEntry) == FALSE) ++ if (PeerWpaMessageSanity(pAd, pMsg2, MsgLen, EAPOL_PAIR_MSG_2, pEntry) ++ == FALSE) + return; + +- do +- { +- // delete retry timer ++ do { ++ // delete retry timer + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + + // Change state +- pEntry->WpaState = AS_PTKINIT_NEGOTIATING; ++ pEntry->WpaState = AS_PTKINIT_NEGOTIATING; + + // Increment replay counter by 1 + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); +@@ -687,31 +680,31 @@ VOID PeerPairMsg2Action( + // Construct EAPoL message - Pairwise Msg 3 + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); + ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_3, +- default_key, +- pEntry->ANonce, +- TxTsc, +- (UCHAR *)gtk_ptr, +- (UCHAR *)rsnie_ptr, +- rsnie_len, +- &EAPOLPKT); +- +- // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, +- (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); +- +- pEntry->ReTryCounter = PEER_MSG3_RETRY_TIMER_CTR; ++ group_cipher, ++ EAPOL_PAIR_MSG_3, ++ default_key, ++ pEntry->ANonce, ++ TxTsc, ++ (UCHAR *) gtk_ptr, ++ (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); ++ ++ // Make outgoing frame ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, ++ (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (pEntry->PortSecured == ++ WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); ++ ++ pEntry->ReTryCounter = PEER_MSG3_RETRY_TIMER_CTR; + RTMPSetTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); + + // Update State +- pEntry->WpaState = AS_PTKINIT_NEGOTIATING; +- }while(FALSE); ++ pEntry->WpaState = AS_PTKINIT_NEGOTIATING; ++ } while (FALSE); + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg2Action: send Msg3 of 4-way \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== PeerPairMsg2Action: send Msg3 of 4-way \n")); + } + + /* +@@ -731,25 +724,25 @@ VOID PeerPairMsg2Action( + + ======================================================================== + */ +-VOID PeerPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- PHEADER_802_11 pHeader; +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg3; +- UINT MsgLen; +- PUINT8 pCurrentAddr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PHEADER_802_11 pHeader; ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pMsg3; ++ UINT MsgLen; ++ PUINT8 pCurrentAddr = NULL; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg3Action \n")); + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) + return; + +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ if (Elem->MsgLen < ++ (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + ++ sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) + return; + + { +@@ -759,35 +752,32 @@ VOID PeerPairMsg3Action( + } + + // Record 802.11 header & the received EAPOL packet Msg3 +- pHeader = (PHEADER_802_11) Elem->Msg; +- pMsg3 = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pHeader = (PHEADER_802_11) Elem->Msg; ++ pMsg3 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + // Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pMsg3, MsgLen, EAPOL_PAIR_MSG_3, pEntry) == FALSE) ++ if (PeerWpaMessageSanity(pAd, pMsg3, MsgLen, EAPOL_PAIR_MSG_3, pEntry) ++ == FALSE) + return; + + // Save Replay counter, it will use construct message 4 +- NdisMoveMemory(pEntry->R_Counter, pMsg3->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ NdisMoveMemory(pEntry->R_Counter, pMsg3->KeyDesc.ReplayCounter, ++ LEN_KEY_DESC_REPLAY); + + // Double check ANonce +- if (!NdisEqualMemory(pEntry->ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) +- { ++ if (!NdisEqualMemory ++ (pEntry->ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) { + return; + } +- + // Construct EAPoL message - Pairwise Msg 4 + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_PAIR_MSG_4, +- 0, // group key index not used in message 4 +- NULL, // Nonce not used in message 4 +- NULL, // TxRSC not used in message 4 +- NULL, // GTK not used in message 4 +- NULL, // RSN IE not used in message 4 +- 0, +- &EAPOLPKT); ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_4, 0, // group key index not used in message 4 ++ NULL, // Nonce not used in message 4 ++ NULL, // TxRSC not used in message 4 ++ NULL, // GTK not used in message 4 ++ NULL, // RSN IE not used in message 4 ++ 0, &EAPOLPKT); + + // Update WpaState + pEntry->WpaState = AS_PTKINITDONE; +@@ -803,9 +793,13 @@ VOID PeerPairMsg3Action( + // Prepare pair-wise key information into shared key table + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], ++ LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, ++ &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], ++ LEN_TKIP_TXMICK); + + // Decide its ChiperAlg + if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +@@ -817,56 +811,56 @@ VOID PeerPairMsg3Action( + + // Update these related information to MAC_TABLE_ENTRY + pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], ++ LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, ++ &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], ++ LEN_TKIP_TXMICK); + pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; + + // Update pairwise key information to ASIC Shared Key Table + AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, pSharedKey->RxMic); + + // Update ASIC WCID attribute table and IVEIV table + RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pEntry); ++ BSS0, ++ 0, pSharedKey->CipherAlg, pEntry); + + } + + // open 802.1x port control and privacy filter + if (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK || +- pEntry->AuthMode == Ndis802_11AuthModeWPA2) +- { ++ pEntry->AuthMode == Ndis802_11AuthModeWPA2) { + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + + STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; +- DBGPRINT(RT_DEBUG_TRACE, ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", +- GetAuthMode(pEntry->AuthMode), +- GetEncryptType(pEntry->WepStatus), +- GetEncryptType(group_cipher))); +- } +- else +- { ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = NdisMediaStateConnected; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", ++ GetAuthMode(pEntry->AuthMode), ++ GetEncryptType(pEntry->WepStatus), ++ GetEncryptType(group_cipher))); ++ } else { + } + + // Init 802.3 header and send out + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ Header802_3, sizeof(Header802_3), ++ (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerPairMsg3Action: send Msg4 of 4-way \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== PeerPairMsg3Action: send Msg4 of 4-way \n")); + } + + /* +@@ -877,109 +871,114 @@ VOID PeerPairMsg3Action( + Return: + ========================================================================== + */ +-VOID PeerPairMsg4Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- PEAPOL_PACKET pMsg4; +- PHEADER_802_11 pHeader; +- UINT MsgLen; +- BOOLEAN Cancelled; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg4Action\n")); ++ PEAPOL_PACKET pMsg4; ++ PHEADER_802_11 pHeader; ++ UINT MsgLen; ++ BOOLEAN Cancelled; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; + +- do +- { +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- break; ++ DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg4Action\n")); + +- if (Elem->MsgLen < (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2 ) ) +- break; ++ do { ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ break; + +- if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) +- break; ++ if (Elem->MsgLen < ++ (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + ++ sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ break; + ++ if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) ++ break; + +- // pointer to 802.11 header +- pHeader = (PHEADER_802_11)Elem->Msg; ++ // pointer to 802.11 header ++ pHeader = (PHEADER_802_11) Elem->Msg; + + // skip 802.11_header(24-byte) and LLC_header(8) +- pMsg4 = (PEAPOL_PACKET)&Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pMsg4 = ++ (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Sanity Check peer Pairwise message 4 - Replay Counter, MIC +- if (PeerWpaMessageSanity(pAd, pMsg4, MsgLen, EAPOL_PAIR_MSG_4, pEntry) == FALSE) ++ // Sanity Check peer Pairwise message 4 - Replay Counter, MIC ++ if (PeerWpaMessageSanity ++ (pAd, pMsg4, MsgLen, EAPOL_PAIR_MSG_4, pEntry) == FALSE) + break; + +- // 3. uses the MLME.SETKEYS.request to configure PTK into MAC +- NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); ++ // 3. uses the MLME.SETKEYS.request to configure PTK into MAC ++ NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); + + // reset IVEIV in Asic + AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, 1, 0); + +- pEntry->PairwiseKey.KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pEntry->PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pEntry->PTK[TKIP_AP_RXMICK_OFFSET], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pEntry->PTK[TKIP_AP_TXMICK_OFFSET], LEN_TKIP_TXMICK); ++ pEntry->PairwiseKey.KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pEntry->PTK[32], ++ LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, ++ &pEntry->PTK[TKIP_AP_RXMICK_OFFSET], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, ++ &pEntry->PTK[TKIP_AP_TXMICK_OFFSET], ++ LEN_TKIP_TXMICK); + + // Set pairwise key to Asic +- { +- pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; +- if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) +- pEntry->PairwiseKey.CipherAlg = CIPHER_TKIP; +- else if (pEntry->WepStatus == Ndis802_11Encryption3Enabled) +- pEntry->PairwiseKey.CipherAlg = CIPHER_AES; ++ { ++ pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; ++ if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) ++ pEntry->PairwiseKey.CipherAlg = CIPHER_TKIP; ++ else if (pEntry->WepStatus == ++ Ndis802_11Encryption3Enabled) ++ pEntry->PairwiseKey.CipherAlg = CIPHER_AES; + + // Add Pair-wise key to Asic +- AsicAddPairwiseKeyEntry( +- pAd, +- pEntry->Addr, +- (UCHAR)pEntry->Aid, +- &pEntry->PairwiseKey); ++ AsicAddPairwiseKeyEntry(pAd, ++ pEntry->Addr, ++ (UCHAR) pEntry->Aid, ++ &pEntry->PairwiseKey); + + // update WCID attribute table and IVEIV table for this entry +- RTMPAddWcidAttributeEntry( +- pAd, +- pEntry->apidx, +- 0, +- pEntry->PairwiseKey.CipherAlg, +- pEntry); +- } +- +- // 4. upgrade state +- pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- pEntry->WpaState = AS_PTKINITDONE; +- pEntry->PortSecured = WPA_802_1X_PORT_SECURED; ++ RTMPAddWcidAttributeEntry(pAd, ++ pEntry->apidx, ++ 0, ++ pEntry->PairwiseKey.CipherAlg, ++ pEntry); ++ } + ++ // 4. upgrade state ++ pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; ++ pEntry->WpaState = AS_PTKINITDONE; ++ pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + + if (pEntry->AuthMode == Ndis802_11AuthModeWPA2 || +- pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) +- { ++ pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) { + pEntry->GTKState = REKEY_ESTABLISHED; + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + +- + // send wireless event - for set key done WPA2 + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, +- GetEncryptType(group_cipher))); ++ RTMPSendWirelessEvent(pAd, ++ IW_SET_KEY_DONE_WPA2_EVENT_FLAG, ++ pEntry->Addr, ++ pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ++ ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, ++ GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, ++ GetEncryptType(pEntry->WepStatus), ++ group_cipher, GetEncryptType(group_cipher))); ++ } else { ++ // 5. init Group 2-way handshake if necessary. ++ WPAStart2WayGroupHS(pAd, pEntry); ++ ++ pEntry->ReTryCounter = GROUP_MSG1_RETRY_TIMER_CTR; ++ RTMPModTimer(&pEntry->RetryTimer, ++ PEER_MSG3_RETRY_EXEC_INTV); + } +- else +- { +- // 5. init Group 2-way handshake if necessary. +- WPAStart2WayGroupHS(pAd, pEntry); +- +- pEntry->ReTryCounter = GROUP_MSG1_RETRY_TIMER_CTR; +- RTMPModTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); +- } +- }while(FALSE); ++ } while (FALSE); + + } + +@@ -991,57 +990,49 @@ VOID PeerPairMsg4Action( + + ========================================================================== + */ +-VOID WPAStart2WayGroupHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry) ++VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + { +- UCHAR Header802_3[14]; +- UCHAR TxTsc[6]; +- EAPOL_PACKET EAPOLPKT; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- UCHAR default_key = 0; +- PUINT8 gnonce_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- PUINT8 pBssid = NULL; ++ UCHAR Header802_3[14]; ++ UCHAR TxTsc[6]; ++ EAPOL_PACKET EAPOLPKT; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ UCHAR default_key = 0; ++ PUINT8 gnonce_ptr = NULL; ++ PUINT8 gtk_ptr = NULL; ++ PUINT8 pBssid = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart2WayGroupHS\n")); + +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- return; +- ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ return; + +- do +- { +- // Increment replay counter by 1 ++ do { ++ // Increment replay counter by 1 + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + + // Construct EAPoL message - Group Msg 1 + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); + ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_GROUP_MSG_1, +- default_key, +- (UCHAR *)gnonce_ptr, +- TxTsc, +- (UCHAR *)gtk_ptr, +- NULL, +- 0, +- &EAPOLPKT); ++ group_cipher, ++ EAPOL_GROUP_MSG_1, ++ default_key, ++ (UCHAR *) gnonce_ptr, ++ TxTsc, (UCHAR *) gtk_ptr, NULL, 0, &EAPOLPKT); + + // Make outgoing frame +- MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); +- RTMPToWirelessSta(pAd, pEntry, +- Header802_3, LENGTH_802_3, +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); ++ MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); ++ RTMPToWirelessSta(pAd, pEntry, ++ Header802_3, LENGTH_802_3, ++ (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ FALSE); + ++ } while (FALSE); + ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== WPAStart2WayGroupHS : send out Group Message 1 \n")); + +- }while (FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("<=== WPAStart2WayGroupHS : send out Group Message 1 \n")); +- +- return; ++ return; + } + + /* +@@ -1061,24 +1052,22 @@ VOID WPAStart2WayGroupHS( + + ======================================================================== + */ +-VOID PeerGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pGroup; +- UINT MsgLen; +- BOOLEAN Cancelled; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 pCurrentAddr = NULL; ++ UCHAR Header802_3[14]; ++ EAPOL_PACKET EAPOLPKT; ++ PEAPOL_PACKET pGroup; ++ UINT MsgLen; ++ BOOLEAN Cancelled; ++ UCHAR default_key = 0; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; ++ PUINT8 pCurrentAddr = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg1Action \n")); + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +- return; ++ return; + + { + pCurrentAddr = pAd->CurrentAddress; +@@ -1087,53 +1076,52 @@ VOID PeerGroupMsg1Action( + } + + // Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) +- pGroup = (PEAPOL_PACKET) &Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pGroup = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + // Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE +- if (PeerWpaMessageSanity(pAd, pGroup, MsgLen, EAPOL_GROUP_MSG_1, pEntry) == FALSE) ++ if (PeerWpaMessageSanity(pAd, pGroup, MsgLen, EAPOL_GROUP_MSG_1, pEntry) ++ == FALSE) + return; + + // delete retry timer + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + + // Save Replay counter, it will use to construct message 2 +- NdisMoveMemory(pEntry->R_Counter, pGroup->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ NdisMoveMemory(pEntry->R_Counter, pGroup->KeyDesc.ReplayCounter, ++ LEN_KEY_DESC_REPLAY); + + // Construct EAPoL message - Group Msg 2 + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, +- group_cipher, +- EAPOL_GROUP_MSG_2, +- default_key, +- NULL, // Nonce not used +- NULL, // TxRSC not used +- NULL, // GTK not used +- NULL, // RSN IE not used +- 0, +- &EAPOLPKT); +- +- // open 802.1x port control and privacy filter ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_GROUP_MSG_2, default_key, NULL, // Nonce not used ++ NULL, // TxRSC not used ++ NULL, // GTK not used ++ NULL, // RSN IE not used ++ 0, &EAPOLPKT); ++ ++ // open 802.1x port control and privacy filter + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + + STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI +- pAd->IndicateMediaState = NdisMediaStateConnected; ++ // Indicate Connected for GUI ++ pAd->IndicateMediaState = NdisMediaStateConnected; + +- DBGPRINT(RT_DEBUG_TRACE, ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", +- GetAuthMode(pEntry->AuthMode), +- GetEncryptType(pEntry->WepStatus), +- GetEncryptType(group_cipher))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerGroupMsg1Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", ++ GetAuthMode(pEntry->AuthMode), ++ GetEncryptType(pEntry->WepStatus), ++ GetEncryptType(group_cipher))); + + // init header and Fill Packet and send Msg 2 to authenticator + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), +- (PUCHAR)&EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); ++ Header802_3, sizeof(Header802_3), ++ (PUCHAR) & EAPOLPKT, ++ CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== PeerGroupMsg1Action: sned group message 2\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<=== PeerGroupMsg1Action: sned group message 2\n")); + } + + /* +@@ -1143,68 +1131,77 @@ VOID PeerGroupMsg1Action( + Return: + ========================================================================== + */ +-VOID PeerGroupMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN VOID *Msg, +- IN UINT MsgLen) ++VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN VOID * Msg, IN UINT MsgLen) + { +- UINT Len; +- PUCHAR pData; +- BOOLEAN Cancelled; +- PEAPOL_PACKET pMsg2; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ UINT Len; ++ PUCHAR pData; ++ BOOLEAN Cancelled; ++ PEAPOL_PACKET pMsg2; ++ UCHAR group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg2Action \n")); + +- do +- { +- if ((!pEntry) || (!pEntry->ValidAsCLI)) +- break; +- +- if (MsgLen < (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) +- break; ++ do { ++ if ((!pEntry) || (!pEntry->ValidAsCLI)) ++ break; + +- if (pEntry->WpaState != AS_PTKINITDONE) +- break; ++ if (MsgLen < ++ (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - ++ MAX_LEN_OF_RSNIE - 2)) ++ break; + ++ if (pEntry->WpaState != AS_PTKINITDONE) ++ break; + +- pData = (PUCHAR)Msg; ++ pData = (PUCHAR) Msg; + pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); +- Len = MsgLen - LENGTH_802_1_H; ++ Len = MsgLen - LENGTH_802_1_H; + + // Sanity Check peer group message 2 - Replay Counter, MIC +- if (PeerWpaMessageSanity(pAd, pMsg2, Len, EAPOL_GROUP_MSG_2, pEntry) == FALSE) +- break; ++ if (PeerWpaMessageSanity ++ (pAd, pMsg2, Len, EAPOL_GROUP_MSG_2, pEntry) == FALSE) ++ break; + +- // 3. upgrade state ++ // 3. upgrade state + + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); +- pEntry->GTKState = REKEY_ESTABLISHED; ++ pEntry->GTKState = REKEY_ESTABLISHED; + +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) ++ || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) { + // send wireless event - for set key done WPA2 + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA2_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, GetEncryptType(group_cipher))); +- } +- else +- { ++ RTMPSendWirelessEvent(pAd, ++ IW_SET_KEY_DONE_WPA2_EVENT_FLAG, ++ pEntry->Addr, ++ pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ++ ("AP SETKEYS DONE - WPA2, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, ++ GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, ++ GetEncryptType(pEntry->WepStatus), ++ group_cipher, GetEncryptType(group_cipher))); ++ } else { + // send wireless event - for set key done WPA + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_SET_KEY_DONE_WPA1_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_OFF, ("AP SETKEYS DONE - WPA1, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", +- pEntry->AuthMode, GetAuthMode(pEntry->AuthMode), +- pEntry->WepStatus, GetEncryptType(pEntry->WepStatus), +- group_cipher, GetEncryptType(group_cipher))); ++ RTMPSendWirelessEvent(pAd, ++ IW_SET_KEY_DONE_WPA1_EVENT_FLAG, ++ pEntry->Addr, ++ pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_OFF, ++ ("AP SETKEYS DONE - WPA1, AuthMode(%d)=%s, WepStatus(%d)=%s, GroupWepStatus(%d)=%s\n\n", ++ pEntry->AuthMode, ++ GetAuthMode(pEntry->AuthMode), ++ pEntry->WepStatus, ++ GetEncryptType(pEntry->WepStatus), ++ group_cipher, GetEncryptType(group_cipher))); + } +- }while(FALSE); ++ } while (FALSE); + } + + /* +@@ -1229,29 +1226,26 @@ VOID PeerGroupMsg2Action( + + ======================================================================== + */ +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType) ++BOOLEAN WpaMsgTypeSubst(IN UCHAR EAPType, OUT INT * MsgType) + { +- switch (EAPType) +- { +- case EAPPacket: +- *MsgType = MT2_EAPPacket; +- break; +- case EAPOLStart: +- *MsgType = MT2_EAPOLStart; +- break; +- case EAPOLLogoff: +- *MsgType = MT2_EAPOLLogoff; +- break; +- case EAPOLKey: +- *MsgType = MT2_EAPOLKey; +- break; +- case EAPOLASFAlert: +- *MsgType = MT2_EAPOLASFAlert; +- break; +- default: +- return FALSE; ++ switch (EAPType) { ++ case EAPPacket: ++ *MsgType = MT2_EAPPacket; ++ break; ++ case EAPOLStart: ++ *MsgType = MT2_EAPOLStart; ++ break; ++ case EAPOLLogoff: ++ *MsgType = MT2_EAPOLLogoff; ++ break; ++ case EAPOLKey: ++ *MsgType = MT2_EAPOLKey; ++ break; ++ case EAPOLASFAlert: ++ *MsgType = MT2_EAPOLASFAlert; ++ break; ++ default: ++ return FALSE; + } + return TRUE; + } +@@ -1283,39 +1277,33 @@ BOOLEAN WpaMsgTypeSubst( + + ======================================================================== + */ +-VOID PRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *prefix, +- IN INT prefix_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len) ++VOID PRF(IN UCHAR * key, ++ IN INT key_len, ++ IN UCHAR * prefix, ++ IN INT prefix_len, ++ IN UCHAR * data, IN INT data_len, OUT UCHAR * output, IN INT len) + { +- INT i; +- UCHAR *input; +- INT currentindex = 0; +- INT total_len; ++ INT i; ++ UCHAR *input; ++ INT currentindex = 0; ++ INT total_len; + + // Allocate memory for input +- os_alloc_mem(NULL, (PUCHAR *)&input, 1024); +- +- if (input == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); +- return; +- } ++ os_alloc_mem(NULL, (PUCHAR *) & input, 1024); + ++ if (input == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); ++ return; ++ } + // Generate concatenation input + NdisMoveMemory(input, prefix, prefix_len); + + // Concatenate a single octet containing 0 +- input[prefix_len] = 0; ++ input[prefix_len] = 0; + + // Concatenate specific data + NdisMoveMemory(&input[prefix_len + 1], data, data_len); +- total_len = prefix_len + 1 + data_len; ++ total_len = prefix_len + 1 + data_len; + + // Concatenate a single octet containing 0 + // This octet shall be update later +@@ -1324,15 +1312,15 @@ VOID PRF( + + // Iterate to calculate the result by hmac-sha-1 + // Then concatenate to last result +- for (i = 0; i < (len + 19) / 20; i++) +- { +- HMAC_SHA1(key, key_len, input, total_len, &output[currentindex], SHA1_DIGEST_SIZE); +- currentindex += 20; ++ for (i = 0; i < (len + 19) / 20; i++) { ++ HMAC_SHA1(key, key_len, input, total_len, &output[currentindex], ++ SHA1_DIGEST_SIZE); ++ currentindex += 20; + + // update the last octet + input[total_len - 1]++; + } +- os_free_mem(NULL, input); ++ os_free_mem(NULL, input); + } + + /* +@@ -1342,34 +1330,33 @@ VOID PRF( + * Uc = PRF(P, Uc-1) + */ + +-static void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output) ++static void F(char *password, unsigned char *ssid, int ssidlength, ++ int iterations, int count, unsigned char *output) + { +- unsigned char digest[36], digest1[SHA1_DIGEST_SIZE]; +- int i, j; +- +- /* U1 = PRF(P, S || int(i)) */ +- memcpy(digest, ssid, ssidlength); +- digest[ssidlength] = (unsigned char)((count>>24) & 0xff); +- digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff); +- digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff); +- digest[ssidlength+3] = (unsigned char)(count & 0xff); +- HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest, ssidlength+4, digest1, SHA1_DIGEST_SIZE); // for WPA update +- +- /* output = U1 */ +- memcpy(output, digest1, SHA1_DIGEST_SIZE); +- +- for (i = 1; i < iterations; i++) +- { +- /* Un = PRF(P, Un-1) */ +- HMAC_SHA1((unsigned char*) password, (int) strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); // for WPA update +- memcpy(digest1, digest, SHA1_DIGEST_SIZE); +- +- /* output = output xor Un */ +- for (j = 0; j < SHA1_DIGEST_SIZE; j++) +- { +- output[j] ^= digest[j]; +- } +- } ++ unsigned char digest[36], digest1[SHA1_DIGEST_SIZE]; ++ int i, j; ++ ++ /* U1 = PRF(P, S || int(i)) */ ++ memcpy(digest, ssid, ssidlength); ++ digest[ssidlength] = (unsigned char)((count >> 24) & 0xff); ++ digest[ssidlength + 1] = (unsigned char)((count >> 16) & 0xff); ++ digest[ssidlength + 2] = (unsigned char)((count >> 8) & 0xff); ++ digest[ssidlength + 3] = (unsigned char)(count & 0xff); ++ HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest, ssidlength + 4, digest1, SHA1_DIGEST_SIZE); // for WPA update ++ ++ /* output = U1 */ ++ memcpy(output, digest1, SHA1_DIGEST_SIZE); ++ ++ for (i = 1; i < iterations; i++) { ++ /* Un = PRF(P, Un-1) */ ++ HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); // for WPA update ++ memcpy(digest1, digest, SHA1_DIGEST_SIZE); ++ ++ /* output = output xor Un */ ++ for (j = 0; j < SHA1_DIGEST_SIZE; j++) { ++ output[j] ^= digest[j]; ++ } ++ } + } + + /* +@@ -1380,16 +1367,14 @@ static void F(char *password, unsigned char *ssid, int ssidlength, int iteration + */ + int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) + { +- if ((strlen(password) > 63) || (ssidlength > 32)) +- return 0; ++ if ((strlen(password) > 63) || (ssidlength > 32)) ++ return 0; + +- F(password, ssid, ssidlength, 4096, 1, output); +- F(password, ssid, ssidlength, 4096, 2, &output[SHA1_DIGEST_SIZE]); +- return 1; ++ F(password, ssid, ssidlength, 4096, 1, output); ++ F(password, ssid, ssidlength, 4096, 2, &output[SHA1_DIGEST_SIZE]); ++ return 1; + } + +- +- + /* + ======================================================================== + +@@ -1414,21 +1399,20 @@ int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) + + ======================================================================== + */ +-VOID WpaDerivePTK( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *PMK, +- IN UCHAR *ANonce, +- IN UCHAR *AA, +- IN UCHAR *SNonce, +- IN UCHAR *SA, +- OUT UCHAR *output, +- IN UINT len) ++VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++ IN UCHAR * PMK, ++ IN UCHAR * ANonce, ++ IN UCHAR * AA, ++ IN UCHAR * SNonce, ++ IN UCHAR * SA, OUT UCHAR * output, IN UINT len) + { +- UCHAR concatenation[76]; +- UINT CurrPos = 0; +- UCHAR temp[32]; +- UCHAR Prefix[] = {'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ', +- 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n'}; ++ UCHAR concatenation[76]; ++ UINT CurrPos = 0; ++ UCHAR temp[32]; ++ UCHAR Prefix[] = ++ { 'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ', ++ 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n' ++ }; + + // initiate the concatenation input + NdisZeroMemory(temp, sizeof(temp)); +@@ -1494,46 +1478,43 @@ VOID WpaDerivePTK( + + ======================================================================== + */ +-VOID GenRandom( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *macAddr, +- OUT UCHAR *random) ++VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random) + { +- INT i, curr; +- UCHAR local[80], KeyCounter[32]; +- UCHAR result[80]; +- ULONG CurrentTime; +- UCHAR prefix[] = {'I', 'n', 'i', 't', ' ', 'C', 'o', 'u', 'n', 't', 'e', 'r'}; ++ INT i, curr; ++ UCHAR local[80], KeyCounter[32]; ++ UCHAR result[80]; ++ ULONG CurrentTime; ++ UCHAR prefix[] = ++ { 'I', 'n', 'i', 't', ' ', 'C', 'o', 'u', 'n', 't', 'e', 'r' }; + + // Zero the related information + NdisZeroMemory(result, 80); + NdisZeroMemory(local, 80); + NdisZeroMemory(KeyCounter, 32); + +- for (i = 0; i < 32; i++) +- { ++ for (i = 0; i < 32; i++) { + // copy the local MAC address + COPY_MAC_ADDR(local, macAddr); +- curr = MAC_ADDR_LEN; ++ curr = MAC_ADDR_LEN; + + // concatenate the current time + NdisGetSystemUpTime(&CurrentTime); +- NdisMoveMemory(&local[curr], &CurrentTime, sizeof(CurrentTime)); +- curr += sizeof(CurrentTime); ++ NdisMoveMemory(&local[curr], &CurrentTime, sizeof(CurrentTime)); ++ curr += sizeof(CurrentTime); + + // concatenate the last result +- NdisMoveMemory(&local[curr], result, 32); +- curr += 32; ++ NdisMoveMemory(&local[curr], result, 32); ++ curr += 32; + + // concatenate a variable +- NdisMoveMemory(&local[curr], &i, 2); +- curr += 2; ++ NdisMoveMemory(&local[curr], &i, 2); ++ curr += 2; + + // calculate the result +- PRF(KeyCounter, 32, prefix,12, local, curr, result, 32); ++ PRF(KeyCounter, 32, prefix, 12, local, curr, result, 32); + } + +- NdisMoveMemory(random, result, 32); ++ NdisMoveMemory(random, result, 32); + } + + /* +@@ -1556,170 +1537,169 @@ VOID GenRandom( + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeCipher( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT WepStatus, +- IN BOOLEAN bMixCipher, +- IN UCHAR FlexibleCipher, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) ++static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, ++ IN UCHAR ElementID, ++ IN UINT WepStatus, ++ IN BOOLEAN bMixCipher, ++ IN UCHAR FlexibleCipher, ++ OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) + { +- UCHAR PairwiseCnt; ++ UCHAR PairwiseCnt; + + *rsn_len = 0; + + // decide WPA2 or WPA1 +- if (ElementID == Wpa2Ie) +- { +- RSNIE2 *pRsnie_cipher = (RSNIE2*)pRsnIe; ++ if (ElementID == Wpa2Ie) { ++ RSNIE2 *pRsnie_cipher = (RSNIE2 *) pRsnIe; + + // Assign the verson as 1 + pRsnie_cipher->version = 1; + +- switch (WepStatus) +- { +- // TKIP mode +- case Ndis802_11Encryption2Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); +- *rsn_len = sizeof(RSNIE2); +- break; ++ switch (WepStatus) { ++ // TKIP mode ++ case Ndis802_11Encryption2Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); ++ pRsnie_cipher->ucount = 1; ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA2_TKIP, 4); ++ *rsn_len = sizeof(RSNIE2); ++ break; + + // AES mode +- case Ndis802_11Encryption3Enabled: +- if (bMixCipher) +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- else +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_CCMP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_CCMP, 4); +- *rsn_len = sizeof(RSNIE2); +- break; ++ case Ndis802_11Encryption3Enabled: ++ if (bMixCipher) ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA2_TKIP, 4); ++ else ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA2_CCMP, 4); ++ pRsnie_cipher->ucount = 1; ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA2_CCMP, 4); ++ *rsn_len = sizeof(RSNIE2); ++ break; + + // TKIP-AES mix mode +- case Ndis802_11Encryption4Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); +- +- PairwiseCnt = 1; +- // Insert WPA2 TKIP as the first pairwise cipher +- if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4); +- // Insert WPA2 AES as the secondary pairwise cipher +- if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4); +- PairwiseCnt = 2; +- } +- } +- else +- { +- // Insert WPA2 AES as the first pairwise cipher +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_CCMP, 4); ++ case Ndis802_11Encryption4Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); ++ ++ PairwiseCnt = 1; ++ // Insert WPA2 TKIP as the first pairwise cipher ++ if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher)) { ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA2_TKIP, 4); ++ // Insert WPA2 AES as the secondary pairwise cipher ++ if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher)) { ++ NdisMoveMemory(pRsnie_cipher->ucast[0]. ++ oui + 4, OUI_WPA2_CCMP, ++ 4); ++ PairwiseCnt = 2; + } ++ } else { ++ // Insert WPA2 AES as the first pairwise cipher ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA2_CCMP, 4); ++ } + +- pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE2) + (4 * (PairwiseCnt - 1)); +- break; +- } ++ pRsnie_cipher->ucount = PairwiseCnt; ++ *rsn_len = sizeof(RSNIE2) + (4 * (PairwiseCnt - 1)); ++ break; ++ } + + if ((pAd->OpMode == OPMODE_STA) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) +- { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; +- switch(GroupCipher) +- { +- case Ndis802_11GroupWEP40Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_WEP40, 4); +- break; +- case Ndis802_11GroupWEP104Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_WEP104, 4); +- break; ++ (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && ++ (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) { ++ UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ switch (GroupCipher) { ++ case Ndis802_11GroupWEP40Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA2_WEP40, 4); ++ break; ++ case Ndis802_11GroupWEP104Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA2_WEP104, 4); ++ break; + } + } +- + // swap for big-endian platform + pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); +- pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); +- } +- else +- { +- RSNIE *pRsnie_cipher = (RSNIE*)pRsnIe; ++ pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); ++ } else { ++ RSNIE *pRsnie_cipher = (RSNIE *) pRsnIe; + + // Assign OUI and version + NdisMoveMemory(pRsnie_cipher->oui, OUI_WPA_VERSION, 4); +- pRsnie_cipher->version = 1; ++ pRsnie_cipher->version = 1; + +- switch (WepStatus) +- { ++ switch (WepStatus) { + // TKIP mode +- case Ndis802_11Encryption2Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); +- *rsn_len = sizeof(RSNIE); +- break; ++ case Ndis802_11Encryption2Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); ++ pRsnie_cipher->ucount = 1; ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA_TKIP, 4); ++ *rsn_len = sizeof(RSNIE); ++ break; + + // AES mode +- case Ndis802_11Encryption3Enabled: +- if (bMixCipher) +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- else +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_CCMP, 4); +- pRsnie_cipher->ucount = 1; +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_CCMP, 4); +- *rsn_len = sizeof(RSNIE); +- break; ++ case Ndis802_11Encryption3Enabled: ++ if (bMixCipher) ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA_TKIP, 4); ++ else ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA_CCMP, 4); ++ pRsnie_cipher->ucount = 1; ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA_CCMP, 4); ++ *rsn_len = sizeof(RSNIE); ++ break; + + // TKIP-AES mix mode +- case Ndis802_11Encryption4Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); +- +- PairwiseCnt = 1; +- // Insert WPA TKIP as the first pairwise cipher +- if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4); +- // Insert WPA AES as the secondary pairwise cipher +- if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher)) +- { +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4); +- PairwiseCnt = 2; +- } +- } +- else +- { +- // Insert WPA AES as the first pairwise cipher +- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_CCMP, 4); ++ case Ndis802_11Encryption4Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); ++ ++ PairwiseCnt = 1; ++ // Insert WPA TKIP as the first pairwise cipher ++ if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher)) { ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA_TKIP, 4); ++ // Insert WPA AES as the secondary pairwise cipher ++ if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher)) { ++ NdisMoveMemory(pRsnie_cipher->ucast[0]. ++ oui + 4, OUI_WPA_CCMP, ++ 4); ++ PairwiseCnt = 2; + } ++ } else { ++ // Insert WPA AES as the first pairwise cipher ++ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, ++ OUI_WPA_CCMP, 4); ++ } + +- pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE) + (4 * (PairwiseCnt - 1)); +- break; +- } ++ pRsnie_cipher->ucount = PairwiseCnt; ++ *rsn_len = sizeof(RSNIE) + (4 * (PairwiseCnt - 1)); ++ break; ++ } + + if ((pAd->OpMode == OPMODE_STA) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) +- { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; +- switch(GroupCipher) +- { +- case Ndis802_11GroupWEP40Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_WEP40, 4); +- break; +- case Ndis802_11GroupWEP104Enabled: +- NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_WEP104, 4); +- break; ++ (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && ++ (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) { ++ UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ switch (GroupCipher) { ++ case Ndis802_11GroupWEP40Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA_WEP40, 4); ++ break; ++ case Ndis802_11GroupWEP104Enabled: ++ NdisMoveMemory(pRsnie_cipher->mcast, ++ OUI_WPA_WEP104, 4); ++ break; + } + } +- + // swap for big-endian platform + pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); +- pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); ++ pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); + } + } + +@@ -1742,61 +1722,59 @@ static VOID RTMPMakeRsnIeCipher( + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeAKM( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT AuthMode, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) ++static VOID RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, ++ IN UCHAR ElementID, ++ IN UINT AuthMode, ++ IN UCHAR apidx, ++ OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) + { +- RSNIE_AUTH *pRsnie_auth; +- UCHAR AkmCnt = 1; // default as 1 ++ RSNIE_AUTH *pRsnie_auth; ++ UCHAR AkmCnt = 1; // default as 1 + +- pRsnie_auth = (RSNIE_AUTH*)(pRsnIe + (*rsn_len)); ++ pRsnie_auth = (RSNIE_AUTH *) (pRsnIe + (*rsn_len)); + + // decide WPA2 or WPA1 +- if (ElementID == Wpa2Ie) +- { ++ if (ElementID == Wpa2Ie) { + +- switch (AuthMode) +- { +- case Ndis802_11AuthModeWPA2: +- case Ndis802_11AuthModeWPA1WPA2: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPA2PSK: +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4); +- break; +- default: +- AkmCnt = 0; +- break; ++ switch (AuthMode) { ++ case Ndis802_11AuthModeWPA2: ++ case Ndis802_11AuthModeWPA1WPA2: ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, ++ OUI_WPA2_8021X_AKM, 4); ++ break; + +- } +- } +- else +- { +- switch (AuthMode) +- { +- case Ndis802_11AuthModeWPA: +- case Ndis802_11AuthModeWPA1WPA2: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_8021X_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPAPSK: +- case Ndis802_11AuthModeWPA1PSKWPA2PSK: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_PSK_AKM, 4); +- break; +- +- case Ndis802_11AuthModeWPANone: +- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA_NONE_AKM, 4); +- break; +- default: +- AkmCnt = 0; +- break; +- } ++ case Ndis802_11AuthModeWPA2PSK: ++ case Ndis802_11AuthModeWPA1PSKWPA2PSK: ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, ++ OUI_WPA2_PSK_AKM, 4); ++ break; ++ default: ++ AkmCnt = 0; ++ break; ++ ++ } ++ } else { ++ switch (AuthMode) { ++ case Ndis802_11AuthModeWPA: ++ case Ndis802_11AuthModeWPA1WPA2: ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, ++ OUI_WPA_8021X_AKM, 4); ++ break; ++ ++ case Ndis802_11AuthModeWPAPSK: ++ case Ndis802_11AuthModeWPA1PSKWPA2PSK: ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, ++ OUI_WPA_PSK_AKM, 4); ++ break; ++ ++ case Ndis802_11AuthModeWPANone: ++ NdisMoveMemory(pRsnie_auth->auth[0].oui, ++ OUI_WPA_NONE_AKM, 4); ++ break; ++ default: ++ AkmCnt = 0; ++ break; ++ } + } + + pRsnie_auth->acount = AkmCnt; +@@ -1825,21 +1803,18 @@ static VOID RTMPMakeRsnIeAKM( + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeCap( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, +- OUT UCHAR *rsn_len) ++static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, ++ IN UCHAR ElementID, ++ IN UCHAR apidx, ++ OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) + { +- RSN_CAPABILITIES *pRSN_Cap; ++ RSN_CAPABILITIES *pRSN_Cap; + + // it could be ignored in WPA1 mode + if (ElementID == WpaIe) + return; + +- pRSN_Cap = (RSN_CAPABILITIES*)(pRsnIe + (*rsn_len)); +- ++ pRSN_Cap = (RSN_CAPABILITIES *) (pRsnIe + (*rsn_len)); + + pRSN_Cap->word = cpu2le16(pRSN_Cap->word); + +@@ -1847,7 +1822,6 @@ static VOID RTMPMakeRsnIeCap( + + } + +- + /* + ======================================================================== + +@@ -1866,42 +1840,37 @@ static VOID RTMPMakeRsnIeCap( + + ======================================================================== + */ +-VOID RTMPMakeRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, +- IN UINT WepStatus, +- IN UCHAR apidx) ++VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++ IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx) + { +- PUCHAR pRsnIe = NULL; // primary RSNIE +- UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE +- UCHAR *rsnielen_ex_cur_p = 0; // the length of the secondary RSNIE +- UCHAR PrimaryRsnie; +- BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different +- UCHAR p_offset; +- WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode ++ PUCHAR pRsnIe = NULL; // primary RSNIE ++ UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE ++ UCHAR *rsnielen_ex_cur_p = 0; // the length of the secondary RSNIE ++ UCHAR PrimaryRsnie; ++ BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different ++ UCHAR p_offset; ++ WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode + + rsnielen_cur_p = NULL; + rsnielen_ex_cur_p = NULL; + + { + { +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) +- { ++ if (pAd->StaCfg.WpaSupplicantUP != ++ WPA_SUPPLICANT_DISABLE) { + if (AuthMode < Ndis802_11AuthModeWPA) + return; +- } +- else +- { ++ } else { + // Support WPAPSK or WPA2PSK in STA-Infra mode + // Support WPANone in STA-Adhoc mode + if ((AuthMode != Ndis802_11AuthModeWPAPSK) && +- (AuthMode != Ndis802_11AuthModeWPA2PSK) && +- (AuthMode != Ndis802_11AuthModeWPANone) +- ) ++ (AuthMode != Ndis802_11AuthModeWPA2PSK) && ++ (AuthMode != Ndis802_11AuthModeWPANone) ++ ) + return; + } + +- DBGPRINT(RT_DEBUG_TRACE,("==> RTMPMakeRSNIE(STA)\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPMakeRSNIE(STA)\n")); + + // Zero RSNIE context + pAd->StaCfg.RSNIE_Len = 0; +@@ -1917,10 +1886,10 @@ VOID RTMPMakeRSNIE( + + // indicate primary RSNIE as WPA or WPA2 + if ((AuthMode == Ndis802_11AuthModeWPA) || +- (AuthMode == Ndis802_11AuthModeWPAPSK) || +- (AuthMode == Ndis802_11AuthModeWPANone) || +- (AuthMode == Ndis802_11AuthModeWPA1WPA2) || +- (AuthMode == Ndis802_11AuthModeWPA1PSKWPA2PSK)) ++ (AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (AuthMode == Ndis802_11AuthModeWPANone) || ++ (AuthMode == Ndis802_11AuthModeWPA1WPA2) || ++ (AuthMode == Ndis802_11AuthModeWPA1PSKWPA2PSK)) + PrimaryRsnie = WpaIe; + else + PrimaryRsnie = Wpa2Ie; +@@ -1928,10 +1897,12 @@ VOID RTMPMakeRSNIE( + { + // Build the primary RSNIE + // 1. insert cipher suite +- RTMPMakeRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, FlexibleCipher, pRsnIe, &p_offset); ++ RTMPMakeRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, ++ FlexibleCipher, pRsnIe, &p_offset); + + // 2. insert AKM +- RTMPMakeRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset); ++ RTMPMakeRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, ++ &p_offset); + + // 3. insert capability + RTMPMakeRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset); +@@ -1942,7 +1913,6 @@ VOID RTMPMakeRSNIE( + + hex_dump("The primary RSNIE", pRsnIe, (*rsnielen_cur_p)); + +- + } + + /* +@@ -1962,66 +1932,68 @@ VOID RTMPMakeRSNIE( + FALSE - otherwise + ========================================================================== + */ +-BOOLEAN RTMPCheckWPAframe( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, +- IN UCHAR FromWhichBSSID) ++BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pData, ++ IN ULONG DataByteCount, IN UCHAR FromWhichBSSID) + { +- ULONG Body_len; ++ ULONG Body_len; + BOOLEAN Cancelled; + +- +- if(DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H)) +- return FALSE; +- ++ if (DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H)) ++ return FALSE; + + // Skip LLC header +- if (NdisEqualMemory(SNAP_802_1H, pData, 6) || +- // Cisco 1200 AP may send packet with SNAP_BRIDGE_TUNNEL +- NdisEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)) +- { +- pData += 6; +- } ++ if (NdisEqualMemory(SNAP_802_1H, pData, 6) || ++ // Cisco 1200 AP may send packet with SNAP_BRIDGE_TUNNEL ++ NdisEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)) { ++ pData += 6; ++ } + // Skip 2-bytes EAPoL type +- if (NdisEqualMemory(EAPOL, pData, 2)) +- { +- pData += 2; +- } +- else +- return FALSE; +- +- switch (*(pData+1)) +- { +- case EAPPacket: +- Body_len = (*(pData+2)<<8) | (*(pData+3)); +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAP-Packet frame, TYPE = 0, Length = %ld\n", Body_len)); +- break; +- case EAPOLStart: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL-Start frame, TYPE = 1 \n")); +- if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Cancel the EnqueueEapolStartTimerRunning \n")); +- RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled); +- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE; +- } +- break; +- case EAPOLLogoff: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOLLogoff frame, TYPE = 2 \n")); +- break; +- case EAPOLKey: +- Body_len = (*(pData+2)<<8) | (*(pData+3)); +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOL-Key frame, TYPE = 3, Length = %ld\n", Body_len)); +- break; +- case EAPOLASFAlert: +- DBGPRINT(RT_DEBUG_TRACE, ("Receive EAPOLASFAlert frame, TYPE = 4 \n")); +- break; +- default: +- return FALSE; +- +- } +- return TRUE; ++ if (NdisEqualMemory(EAPOL, pData, 2)) { ++ pData += 2; ++ } else ++ return FALSE; ++ ++ switch (*(pData + 1)) { ++ case EAPPacket: ++ Body_len = (*(pData + 2) << 8) | (*(pData + 3)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAP-Packet frame, TYPE = 0, Length = %ld\n", ++ Body_len)); ++ break; ++ case EAPOLStart: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAPOL-Start frame, TYPE = 1 \n")); ++ if (pEntry->EnqueueEapolStartTimerRunning != ++ EAPOL_START_DISABLE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Cancel the EnqueueEapolStartTimerRunning \n")); ++ RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, ++ &Cancelled); ++ pEntry->EnqueueEapolStartTimerRunning = ++ EAPOL_START_DISABLE; ++ } ++ break; ++ case EAPOLLogoff: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAPOLLogoff frame, TYPE = 2 \n")); ++ break; ++ case EAPOLKey: ++ Body_len = (*(pData + 2) << 8) | (*(pData + 3)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAPOL-Key frame, TYPE = 3, Length = %ld\n", ++ Body_len)); ++ break; ++ case EAPOLASFAlert: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Receive EAPOLASFAlert frame, TYPE = 4 \n")); ++ break; ++ default: ++ return FALSE; ++ ++ } ++ return TRUE; + } + + /* +@@ -2044,23 +2016,22 @@ BOOLEAN RTMPCheckWPAframe( + */ + PSTRING GetEapolMsgType(CHAR msg) + { +- if(msg == EAPOL_PAIR_MSG_1) +- return "Pairwise Message 1"; +- else if(msg == EAPOL_PAIR_MSG_2) +- return "Pairwise Message 2"; +- else if(msg == EAPOL_PAIR_MSG_3) +- return "Pairwise Message 3"; +- else if(msg == EAPOL_PAIR_MSG_4) +- return "Pairwise Message 4"; +- else if(msg == EAPOL_GROUP_MSG_1) +- return "Group Message 1"; +- else if(msg == EAPOL_GROUP_MSG_2) +- return "Group Message 2"; +- else +- return "Invalid Message"; ++ if (msg == EAPOL_PAIR_MSG_1) ++ return "Pairwise Message 1"; ++ else if (msg == EAPOL_PAIR_MSG_2) ++ return "Pairwise Message 2"; ++ else if (msg == EAPOL_PAIR_MSG_3) ++ return "Pairwise Message 3"; ++ else if (msg == EAPOL_PAIR_MSG_4) ++ return "Pairwise Message 4"; ++ else if (msg == EAPOL_GROUP_MSG_1) ++ return "Group Message 1"; ++ else if (msg == EAPOL_GROUP_MSG_2) ++ return "Group Message 2"; ++ else ++ return "Invalid Message"; + } + +- + /* + ======================================================================== + +@@ -2071,64 +2042,62 @@ PSTRING GetEapolMsgType(CHAR msg) + + Return Value: + +- + ======================================================================== + */ +-BOOLEAN RTMPCheckRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- IN MAC_TABLE_ENTRY *pEntry, +- OUT UCHAR *Offset) ++BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN UCHAR DataLen, ++ IN MAC_TABLE_ENTRY * pEntry, OUT UCHAR * Offset) + { +- PUCHAR pVIE; +- UCHAR len; +- PEID_STRUCT pEid; +- BOOLEAN result = FALSE; ++ PUCHAR pVIE; ++ UCHAR len; ++ PEID_STRUCT pEid; ++ BOOLEAN result = FALSE; + + pVIE = pData; +- len = DataLen; ++ len = DataLen; + *Offset = 0; + +- while (len > sizeof(RSNIE2)) +- { ++ while (len > sizeof(RSNIE2)) { + pEid = (PEID_STRUCT) pVIE; + // WPA RSN IE +- if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) +- { +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA || pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) && +- (NdisEqualMemory(pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) && +- (pEntry->RSNIE_Len == (pEid->Len + 2))) +- { +- result = TRUE; ++ if ((pEid->Eid == IE_WPA) ++ && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) { ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA ++ || pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) ++ && ++ (NdisEqualMemory ++ (pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) ++ && (pEntry->RSNIE_Len == (pEid->Len + 2))) { ++ result = TRUE; + } + + *Offset += (pEid->Len + 2); + } + // WPA2 RSN IE +- else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) +- { +- if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 || pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) && +- (pEid->Eid == pEntry->RSN_IE[0]) && +- ((pEid->Len + 2) >= pEntry->RSNIE_Len) && +- (NdisEqualMemory(pEid->Octet, &pEntry->RSN_IE[2], pEntry->RSNIE_Len - 2))) +- { +- +- result = TRUE; ++ else if ((pEid->Eid == IE_RSN) ++ && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) { ++ if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 ++ || pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) ++ && (pEid->Eid == pEntry->RSN_IE[0]) ++ && ((pEid->Len + 2) >= pEntry->RSNIE_Len) ++ && ++ (NdisEqualMemory ++ (pEid->Octet, &pEntry->RSN_IE[2], ++ pEntry->RSNIE_Len - 2))) { ++ ++ result = TRUE; + } + + *Offset += (pEid->Len + 2); +- } +- else +- { ++ } else { + break; + } + + pVIE += (pEid->Len + 2); +- len -= (pEid->Len + 2); ++ len -= (pEid->Len + 2); + } + +- + return result; + + } +@@ -2149,107 +2118,109 @@ BOOLEAN RTMPCheckRSNIE( + + ======================================================================== + */ +-BOOLEAN RTMPParseEapolKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, +- IN BOOLEAN bWPA2, +- IN MAC_TABLE_ENTRY *pEntry) ++BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKeyData, ++ IN UCHAR KeyDataLen, ++ IN UCHAR GroupKeyIndex, ++ IN UCHAR MsgType, ++ IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry) + { +- PKDE_ENCAP pKDE = NULL; +- PUCHAR pMyKeyData = pKeyData; +- UCHAR KeyDataLength = KeyDataLen; +- UCHAR GTKLEN = 0; +- UCHAR DefaultIdx = 0; +- UCHAR skip_offset; ++ PKDE_ENCAP pKDE = NULL; ++ PUCHAR pMyKeyData = pKeyData; ++ UCHAR KeyDataLength = KeyDataLen; ++ UCHAR GTKLEN = 0; ++ UCHAR DefaultIdx = 0; ++ UCHAR skip_offset; + + // Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it +- if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) +- { ++ if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) { + // Check RSN IE whether it is WPA2/WPA2PSK +- if (!RTMPCheckRSNIE(pAd, pKeyData, KeyDataLen, pEntry, &skip_offset)) +- { ++ if (!RTMPCheckRSNIE ++ (pAd, pKeyData, KeyDataLen, pEntry, &skip_offset)) { + // send wireless event - for RSN IE different + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_RSNIE_DIFF_EVENT_FLAG, pEntry->Addr, pEntry->apidx, 0); +- +- DBGPRINT(RT_DEBUG_ERROR, ("RSN_IE Different in msg %d of 4-way handshake!\n", MsgType)); ++ RTMPSendWirelessEvent(pAd, ++ IW_RSNIE_DIFF_EVENT_FLAG, ++ pEntry->Addr, ++ pEntry->apidx, 0); ++ ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RSN_IE Different in msg %d of 4-way handshake!\n", ++ MsgType)); + hex_dump("Receive RSN_IE ", pKeyData, KeyDataLen); +- hex_dump("Desired RSN_IE ", pEntry->RSN_IE, pEntry->RSNIE_Len); ++ hex_dump("Desired RSN_IE ", pEntry->RSN_IE, ++ pEntry->RSNIE_Len); + + return FALSE; +- } +- else +- { +- if (bWPA2 && MsgType == EAPOL_PAIR_MSG_3) +- { ++ } else { ++ if (bWPA2 && MsgType == EAPOL_PAIR_MSG_3) { + WpaShowAllsuite(pMyKeyData, skip_offset); + + // skip RSN IE + pMyKeyData += skip_offset; + KeyDataLength -= skip_offset; +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPParseEapolKeyData ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", skip_offset)); +- } +- else ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPParseEapolKeyData ==> WPA2/WPA2PSK RSN IE matched in Msg 3, Length(%d) \n", ++ skip_offset)); ++ } else + return TRUE; + } + } + +- DBGPRINT(RT_DEBUG_TRACE,("RTMPParseEapolKeyData ==> KeyDataLength %d without RSN_IE \n", KeyDataLength)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPParseEapolKeyData ==> KeyDataLength %d without RSN_IE \n", ++ KeyDataLength)); + //hex_dump("remain data", pMyKeyData, KeyDataLength); + +- + // Parse EKD format in pairwise_msg_3_WPA2 && group_msg_1_WPA2 +- if (bWPA2 && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) +- { ++ if (bWPA2 ++ && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) { + if (KeyDataLength >= 8) // KDE format exclude GTK length +- { +- pKDE = (PKDE_ENCAP) pMyKeyData; +- ++ { ++ pKDE = (PKDE_ENCAP) pMyKeyData; + + DefaultIdx = pKDE->GTKEncap.Kid; + + // Sanity check - KED length +- if (KeyDataLength < (pKDE->Len + 2)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: The len from KDE is too short \n")); +- return FALSE; +- } +- ++ if (KeyDataLength < (pKDE->Len + 2)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR: The len from KDE is too short \n")); ++ return FALSE; ++ } + // Get GTK length - refer to IEEE 802.11i-2004 p.82 +- GTKLEN = pKDE->Len -6; +- if (GTKLEN < LEN_AES_KEY) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN)); +- return FALSE; ++ GTKLEN = pKDE->Len - 6; ++ if (GTKLEN < LEN_AES_KEY) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR: GTK Key length is too short (%d) \n", ++ GTKLEN)); ++ return FALSE; + } + +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: KDE format length is too short \n")); +- return FALSE; +- } ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR: KDE format length is too short \n")); ++ return FALSE; ++ } + +- DBGPRINT(RT_DEBUG_TRACE, ("GTK in KDE format ,DefaultKeyID=%d, KeyLen=%d \n", DefaultIdx, GTKLEN)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("GTK in KDE format ,DefaultKeyID=%d, KeyLen=%d \n", ++ DefaultIdx, GTKLEN)); + // skip it + pMyKeyData += 8; + KeyDataLength -= 8; + +- } +- else if (!bWPA2 && MsgType == EAPOL_GROUP_MSG_1) +- { ++ } else if (!bWPA2 && MsgType == EAPOL_GROUP_MSG_1) { + DefaultIdx = GroupKeyIndex; +- DBGPRINT(RT_DEBUG_TRACE, ("GTK DefaultKeyID=%d \n", DefaultIdx)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("GTK DefaultKeyID=%d \n", DefaultIdx)); + } +- + // Sanity check - shared key index must be 1 ~ 3 +- if (DefaultIdx < 1 || DefaultIdx > 3) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key index(%d) is invalid in %s %s \n", DefaultIdx, ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); +- return FALSE; ++ if (DefaultIdx < 1 || DefaultIdx > 3) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR: GTK Key index(%d) is invalid in %s %s \n", ++ DefaultIdx, ((bWPA2) ? "WPA2" : "WPA"), ++ GetEapolMsgType(MsgType))); ++ return FALSE; + } + + { +@@ -2265,43 +2236,43 @@ BOOLEAN RTMPParseEapolKeyData( + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], ++ LEN_TKIP_TXMICK); + + // Update Shared Key CipherAlg + pSharedKey->CipherAlg = CIPHER_NONE; + if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) + pSharedKey->CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) ++ else if (pAd->StaCfg.GroupCipher == ++ Ndis802_11Encryption3Enabled) + pSharedKey->CipherAlg = CIPHER_AES; + else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) + pSharedKey->CipherAlg = CIPHER_WEP64; +- else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) ++ else if (pAd->StaCfg.GroupCipher == ++ Ndis802_11GroupWEP104Enabled) + pSharedKey->CipherAlg = CIPHER_WEP128; + +- + // Update group key information to ASIC Shared Key Table + AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, pSharedKey->RxMic); + + // Update ASIC WCID attribute table and IVEIV table + RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- NULL); ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, NULL); + } + + return TRUE; + + } + +- + /* + ======================================================================== + +@@ -2339,7 +2310,6 @@ BOOLEAN RTMPParseEapolKeyData( + | Key Data | n octets + +--------------------+ + +- + Arguments: + pAd Pointer to our adapter + +@@ -2350,29 +2320,27 @@ BOOLEAN RTMPParseEapolKeyData( + + ======================================================================== + */ +-VOID ConstructEapolMsg( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *KeyNonce, +- IN UCHAR *TxRSC, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_Len, +- OUT PEAPOL_PACKET pMsg) ++VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR * KeyNonce, ++ IN UCHAR * TxRSC, ++ IN UCHAR * GTK, ++ IN UCHAR * RSNIE, ++ IN UCHAR RSNIE_Len, OUT PEAPOL_PACKET pMsg) + { +- BOOLEAN bWPA2 = FALSE; +- UCHAR KeyDescVer; ++ BOOLEAN bWPA2 = FALSE; ++ UCHAR KeyDescVer; + + // Choose WPA2 or not + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || +- (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2 = TRUE; + +- // Init Packet and Fill header +- pMsg->ProVer = EAPOL_VER; +- pMsg->ProType = EAPOLKey; ++ // Init Packet and Fill header ++ pMsg->ProVer = EAPOL_VER; ++ pMsg->ProType = EAPOLKey; + + // Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field + SET_UINT16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); +@@ -2387,8 +2355,11 @@ VOID ConstructEapolMsg( + { + // Fill in Key information, refer to IEEE Std 802.11i-2004 page 78 + // When either the pairwise or the group cipher is AES, the DESC_TYPE_AES(2) shall be used. +- KeyDescVer = (((pEntry->WepStatus == Ndis802_11Encryption3Enabled) || +- (GroupKeyWepStatus == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP)); ++ KeyDescVer = ++ (((pEntry->WepStatus == Ndis802_11Encryption3Enabled) ++ || (GroupKeyWepStatus == ++ Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) ++ : (DESC_TYPE_TKIP)); + } + + pMsg->KeyDesc.KeyInfo.KeyDescVer = KeyDescVer; +@@ -2396,7 +2367,7 @@ VOID ConstructEapolMsg( + // Specify Key Type as Group(0) or Pairwise(1) + if (MsgType >= EAPOL_GROUP_MSG_1) + pMsg->KeyDesc.KeyInfo.KeyType = GROUPKEY; +- else ++ else + pMsg->KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; + + // Specify Key Index, only group_msg1_WPA1 +@@ -2406,89 +2377,92 @@ VOID ConstructEapolMsg( + if (MsgType == EAPOL_PAIR_MSG_3) + pMsg->KeyDesc.KeyInfo.Install = 1; + +- if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1)) ++ if ((MsgType == EAPOL_PAIR_MSG_1) || (MsgType == EAPOL_PAIR_MSG_3) ++ || (MsgType == EAPOL_GROUP_MSG_1)) + pMsg->KeyDesc.KeyInfo.KeyAck = 1; + + if (MsgType != EAPOL_PAIR_MSG_1) + pMsg->KeyDesc.KeyInfo.KeyMic = 1; + + if ((bWPA2 && (MsgType >= EAPOL_PAIR_MSG_3)) || +- (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1))) +- { +- pMsg->KeyDesc.KeyInfo.Secure = 1; +- } ++ (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1))) { ++ pMsg->KeyDesc.KeyInfo.Secure = 1; ++ } + + if (bWPA2 && ((MsgType == EAPOL_PAIR_MSG_3) || +- (MsgType == EAPOL_GROUP_MSG_1))) +- { +- pMsg->KeyDesc.KeyInfo.EKD_DL = 1; +- } +- ++ (MsgType == EAPOL_GROUP_MSG_1))) { ++ pMsg->KeyDesc.KeyInfo.EKD_DL = 1; ++ } + // key Information element has done. +- *(USHORT *)(&pMsg->KeyDesc.KeyInfo) = cpu2le16(*(USHORT *)(&pMsg->KeyDesc.KeyInfo)); ++ *(USHORT *) (&pMsg->KeyDesc.KeyInfo) = ++ cpu2le16(*(USHORT *) (&pMsg->KeyDesc.KeyInfo)); + + // Fill in Key Length +- { +- if (MsgType >= EAPOL_GROUP_MSG_1) +- { +- // the length of group key cipher +- pMsg->KeyDesc.KeyLength[1] = ((GroupKeyWepStatus == Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : LEN_AES_KEY); +- } +- else + { ++ if (MsgType >= EAPOL_GROUP_MSG_1) { ++ // the length of group key cipher ++ pMsg->KeyDesc.KeyLength[1] = ++ ((GroupKeyWepStatus == ++ Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : ++ LEN_AES_KEY); ++ } else { + // the length of pairwise key cipher +- pMsg->KeyDesc.KeyLength[1] = ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : LEN_AES_KEY); ++ pMsg->KeyDesc.KeyLength[1] = ++ ((pEntry->WepStatus == ++ Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : ++ LEN_AES_KEY); + } + } + + // Fill in replay counter +- NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, LEN_KEY_DESC_REPLAY); ++ NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, ++ LEN_KEY_DESC_REPLAY); + + // Fill Key Nonce field + // ANonce : pairwise_msg1 & pairwise_msg3 + // SNonce : pairwise_msg2 + // GNonce : group_msg1_wpa1 +- if ((MsgType <= EAPOL_PAIR_MSG_3) || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)))) +- NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, LEN_KEY_DESC_NONCE); ++ if ((MsgType <= EAPOL_PAIR_MSG_3) ++ || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)))) ++ NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, ++ LEN_KEY_DESC_NONCE); + + // Fill key IV - WPA2 as 0, WPA1 as random +- if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) +- { ++ if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) { + // Suggest IV be random number plus some number, +- NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], LEN_KEY_DESC_IV); +- pMsg->KeyDesc.KeyIv[15] += 2; +- } +- +- // Fill Key RSC field +- // It contains the RSC for the GTK being installed. +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) || (MsgType == EAPOL_GROUP_MSG_1)) +- { +- NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6); +- } +- ++ NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], ++ LEN_KEY_DESC_IV); ++ pMsg->KeyDesc.KeyIv[15] += 2; ++ } ++ // Fill Key RSC field ++ // It contains the RSC for the GTK being installed. ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) ++ || (MsgType == EAPOL_GROUP_MSG_1)) { ++ NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6); ++ } + // Clear Key MIC field for MIC calculation later +- NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); ++ NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); + + ConstructEapolKeyData(pEntry, +- GroupKeyWepStatus, +- KeyDescVer, +- MsgType, +- DefaultKeyIdx, +- GTK, +- RSNIE, +- RSNIE_Len, +- pMsg); ++ GroupKeyWepStatus, ++ KeyDescVer, ++ MsgType, ++ DefaultKeyIdx, GTK, RSNIE, RSNIE_Len, pMsg); + + // Calculate MIC and fill in KeyMic Field except Pairwise Msg 1. +- if (MsgType != EAPOL_PAIR_MSG_1) +- { ++ if (MsgType != EAPOL_PAIR_MSG_1) { + CalculateMIC(KeyDescVer, pEntry->PTK, pMsg); +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("===> ConstructEapolMsg for %s %s\n", ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); +- DBGPRINT(RT_DEBUG_TRACE, (" Body length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->Body_Len))); +- DBGPRINT(RT_DEBUG_TRACE, (" Key length = %d \n", CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyLength))); ++ } + ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("===> ConstructEapolMsg for %s %s\n", ++ ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" Body length = %d \n", ++ CONV_ARRARY_TO_UINT16(pMsg->Body_Len))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" Key length = %d \n", ++ CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyLength))); + + } + +@@ -2509,38 +2483,35 @@ VOID ConstructEapolMsg( + + ======================================================================== + */ +-VOID ConstructEapolKeyData( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_LEN, +- OUT PEAPOL_PACKET pMsg) ++VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR keyDescVer, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR * GTK, ++ IN UCHAR * RSNIE, ++ IN UCHAR RSNIE_LEN, OUT PEAPOL_PACKET pMsg) + { +- UCHAR *mpool, *Key_Data, *Rc4GTK; +- UCHAR ekey[(LEN_KEY_DESC_IV+LEN_EAP_EK)]; +- ULONG data_offset; +- BOOLEAN bWPA2Capable = FALSE; +- PRTMP_ADAPTER pAd = pEntry->pAd; +- BOOLEAN GTK_Included = FALSE; ++ UCHAR *mpool, *Key_Data, *Rc4GTK; ++ UCHAR ekey[(LEN_KEY_DESC_IV + LEN_EAP_EK)]; ++ ULONG data_offset; ++ BOOLEAN bWPA2Capable = FALSE; ++ PRTMP_ADAPTER pAd = pEntry->pAd; ++ BOOLEAN GTK_Included = FALSE; + + // Choose WPA2 or not + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || +- (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2Capable = TRUE; + + if (MsgType == EAPOL_PAIR_MSG_1 || +- MsgType == EAPOL_PAIR_MSG_4 || +- MsgType == EAPOL_GROUP_MSG_2) ++ MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) + return; + + // allocate memory pool +- os_alloc_mem(NULL, (PUCHAR *)&mpool, 1500); ++ os_alloc_mem(NULL, (PUCHAR *) & mpool, 1500); + +- if (mpool == NULL) ++ if (mpool == NULL) + return; + + /* Rc4GTK Len = 512 */ +@@ -2553,80 +2524,68 @@ VOID ConstructEapolKeyData( + data_offset = 0; + + // Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 +- if (RSNIE_LEN && ((MsgType == EAPOL_PAIR_MSG_2) || (MsgType == EAPOL_PAIR_MSG_3))) +- { +- PUINT8 pmkid_ptr = NULL; +- UINT8 pmkid_len = 0; +- ++ if (RSNIE_LEN ++ && ((MsgType == EAPOL_PAIR_MSG_2) ++ || (MsgType == EAPOL_PAIR_MSG_3))) { ++ PUINT8 pmkid_ptr = NULL; ++ UINT8 pmkid_len = 0; + + RTMPInsertRSNIE(&Key_Data[data_offset], +- &data_offset, +- RSNIE, +- RSNIE_LEN, +- pmkid_ptr, +- pmkid_len); ++ &data_offset, ++ RSNIE, RSNIE_LEN, pmkid_ptr, pmkid_len); + } + +- + // Encapsulate KDE format in pairwise_msg3_WPA2 & group_msg1_WPA2 +- if (bWPA2Capable && ((MsgType == EAPOL_PAIR_MSG_3) || (MsgType == EAPOL_GROUP_MSG_1))) +- { ++ if (bWPA2Capable ++ && ((MsgType == EAPOL_PAIR_MSG_3) ++ || (MsgType == EAPOL_GROUP_MSG_1))) { + // Key Data Encapsulation (KDE) format - 802.11i-2004 Figure-43w and Table-20h +- Key_Data[data_offset + 0] = 0xDD; ++ Key_Data[data_offset + 0] = 0xDD; + +- if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) +- { +- Key_Data[data_offset + 1] = 0x16;// 4+2+16(OUI+DataType+DataField) +- } +- else +- { +- Key_Data[data_offset + 1] = 0x26;// 4+2+32(OUI+DataType+DataField) ++ if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) { ++ Key_Data[data_offset + 1] = 0x16; // 4+2+16(OUI+DataType+DataField) ++ } else { ++ Key_Data[data_offset + 1] = 0x26; // 4+2+32(OUI+DataType+DataField) + } + +- Key_Data[data_offset + 2] = 0x00; +- Key_Data[data_offset + 3] = 0x0F; +- Key_Data[data_offset + 4] = 0xAC; +- Key_Data[data_offset + 5] = 0x01; ++ Key_Data[data_offset + 2] = 0x00; ++ Key_Data[data_offset + 3] = 0x0F; ++ Key_Data[data_offset + 4] = 0xAC; ++ Key_Data[data_offset + 5] = 0x01; + + // GTK KDE format - 802.11i-2004 Figure-43x +- Key_Data[data_offset + 6] = (DefaultKeyIdx & 0x03); +- Key_Data[data_offset + 7] = 0x00; // Reserved Byte ++ Key_Data[data_offset + 6] = (DefaultKeyIdx & 0x03); ++ Key_Data[data_offset + 7] = 0x00; // Reserved Byte + + data_offset += 8; + } + +- + // Encapsulate GTK + // Only for pairwise_msg3_WPA2 and group_msg1 +- if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2Capable) || (MsgType == EAPOL_GROUP_MSG_1)) +- { ++ if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2Capable) ++ || (MsgType == EAPOL_GROUP_MSG_1)) { + // Fill in GTK +- if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) +- { +- NdisMoveMemory(&Key_Data[data_offset], GTK, LEN_AES_KEY); ++ if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) { ++ NdisMoveMemory(&Key_Data[data_offset], GTK, ++ LEN_AES_KEY); + data_offset += LEN_AES_KEY; +- } +- else +- { +- NdisMoveMemory(&Key_Data[data_offset], GTK, TKIP_GTK_LENGTH); ++ } else { ++ NdisMoveMemory(&Key_Data[data_offset], GTK, ++ TKIP_GTK_LENGTH); + data_offset += TKIP_GTK_LENGTH; + } + + GTK_Included = TRUE; + } + +- + // This whole key-data field shall be encrypted if a GTK is included. + // Encrypt the data material in key data field with KEK +- if (GTK_Included) +- { ++ if (GTK_Included) { + //hex_dump("GTK_Included", Key_Data, data_offset); + +- if ( +- (keyDescVer == DESC_TYPE_AES)) +- { +- UCHAR remainder = 0; +- UCHAR pad_len = 0; ++ if ((keyDescVer == DESC_TYPE_AES)) { ++ UCHAR remainder = 0; ++ UCHAR pad_len = 0; + + // Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, + // shall be used to encrypt the Key Data field using the KEK field from +@@ -2636,9 +2595,8 @@ VOID ConstructEapolKeyData( + // shall be padded before encrypting if the key data length is less than 16 + // octets or if it is not a multiple of 8. The padding consists of appending + // a single octet 0xdd followed by zero or more 0x00 octets. +- if ((remainder = data_offset & 0x07) != 0) +- { +- INT i; ++ if ((remainder = data_offset & 0x07) != 0) { ++ INT i; + + pad_len = (8 - remainder); + Key_Data[data_offset] = 0xDD; +@@ -2646,33 +2604,35 @@ VOID ConstructEapolKeyData( + Key_Data[data_offset + i] = 0; + + data_offset += pad_len; +- } ++ } + +- AES_GTK_KEY_WRAP(&pEntry->PTK[16], Key_Data, data_offset, Rc4GTK); +- // AES wrap function will grow 8 bytes in length +- data_offset += 8; +- } +- else +- { +- /* Key Descriptor Version 1: ARC4 is used to encrypt the Key Data field +- using the KEK field from the derived PTK. */ ++ AES_GTK_KEY_WRAP(&pEntry->PTK[16], Key_Data, ++ data_offset, Rc4GTK); ++ // AES wrap function will grow 8 bytes in length ++ data_offset += 8; ++ } else { ++ /* Key Descriptor Version 1: ARC4 is used to encrypt the Key Data field ++ using the KEK field from the derived PTK. */ + + // PREPARE Encrypted "Key DATA" field. (Encrypt GTK with RC4, usinf PTK[16]->[31] as Key, IV-field as IV) + // put TxTsc in Key RSC field +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. + + // ekey is the contanetion of IV-field, and PTK[16]->PTK[31] +- NdisMoveMemory(ekey, pMsg->KeyDesc.KeyIv, LEN_KEY_DESC_IV); +- NdisMoveMemory(&ekey[LEN_KEY_DESC_IV], &pEntry->PTK[16], LEN_EAP_EK); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); //INIT SBOX, KEYLEN+3(IV) +- pAd->PrivateInfo.FCSCRC32 = RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, Key_Data, data_offset); +- WPAARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, Rc4GTK, Key_Data, data_offset); ++ NdisMoveMemory(ekey, pMsg->KeyDesc.KeyIv, ++ LEN_KEY_DESC_IV); ++ NdisMoveMemory(&ekey[LEN_KEY_DESC_IV], &pEntry->PTK[16], ++ LEN_EAP_EK); ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); //INIT SBOX, KEYLEN+3(IV) ++ pAd->PrivateInfo.FCSCRC32 = ++ RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, Key_Data, ++ data_offset); ++ WPAARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, Rc4GTK, ++ Key_Data, data_offset); + } + + NdisMoveMemory(pMsg->KeyDesc.KeyData, Rc4GTK, data_offset); +- } +- else +- { ++ } else { + NdisMoveMemory(pMsg->KeyDesc.KeyData, Key_Data, data_offset); + } + +@@ -2700,41 +2660,36 @@ VOID ConstructEapolKeyData( + + ======================================================================== + */ +-static VOID CalculateMIC( +- IN UCHAR KeyDescVer, +- IN UCHAR *PTK, +- OUT PEAPOL_PACKET pMsg) ++static VOID CalculateMIC(IN UCHAR KeyDescVer, ++ IN UCHAR * PTK, OUT PEAPOL_PACKET pMsg) + { +- UCHAR *OutBuffer; +- ULONG FrameLen = 0; +- UCHAR mic[LEN_KEY_DESC_MIC]; +- UCHAR digest[80]; ++ UCHAR *OutBuffer; ++ ULONG FrameLen = 0; ++ UCHAR mic[LEN_KEY_DESC_MIC]; ++ UCHAR digest[80]; + + // allocate memory for MIC calculation +- os_alloc_mem(NULL, (PUCHAR *)&OutBuffer, 512); ++ os_alloc_mem(NULL, (PUCHAR *) & OutBuffer, 512); + +- if (OutBuffer == NULL) +- { ++ if (OutBuffer == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); + return; +- } +- ++ } + // make a frame for calculating MIC. +- MakeOutgoingFrame(OutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, +- END_OF_ARGS); ++ MakeOutgoingFrame(OutBuffer, &FrameLen, ++ CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, ++ END_OF_ARGS); + + NdisZeroMemory(mic, sizeof(mic)); + + // Calculate MIC +- if (KeyDescVer == DESC_TYPE_AES) +- { +- HMAC_SHA1(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); ++ if (KeyDescVer == DESC_TYPE_AES) { ++ HMAC_SHA1(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, digest, ++ SHA1_DIGEST_SIZE); + NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { +- HMAC_MD5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, mic, MD5_DIGEST_SIZE); ++ } else { ++ HMAC_MD5(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, mic, ++ MD5_DIGEST_SIZE); + } + + // store the calculated MIC +@@ -2759,66 +2714,58 @@ static VOID CalculateMIC( + + ======================================================================== + */ +-NDIS_STATUS RTMPSoftDecryptBroadCastData( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, +- IN PCIPHER_KEY pShard_key) ++NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, ++ IN NDIS_802_11_ENCRYPTION_STATUS ++ GroupCipher, IN PCIPHER_KEY pShard_key) + { +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- +- ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + + // handle WEP decryption +- if (GroupCipher == Ndis802_11Encryption1Enabled) +- { +- if (RTMPSoftDecryptWEP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, pShard_key)) +- { ++ if (GroupCipher == Ndis802_11Encryption1Enabled) { ++ if (RTMPSoftDecryptWEP ++ (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, ++ pShard_key)) { + + //Minus IV[4] & ICV[4] + pRxWI->MPDUtotalByteCount -= 8; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : Software decrypt WEP data fails.\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR : Software decrypt WEP data fails.\n")); + // give up this frame + return NDIS_STATUS_FAILURE; + } + } + // handle TKIP decryption +- else if (GroupCipher == Ndis802_11Encryption2Enabled) +- { +- if (RTMPSoftDecryptTKIP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, pShard_key)) +- { ++ else if (GroupCipher == Ndis802_11Encryption2Enabled) { ++ if (RTMPSoftDecryptTKIP ++ (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, ++ pShard_key)) { + + //Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV + pRxWI->MPDUtotalByteCount -= 20; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptTKIP Failed\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR : RTMPSoftDecryptTKIP Failed\n")); + // give up this frame + return NDIS_STATUS_FAILURE; +- } ++ } + } + // handle AES decryption +- else if (GroupCipher == Ndis802_11Encryption3Enabled) +- { +- if (RTMPSoftDecryptAES(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount , pShard_key)) +- { ++ else if (GroupCipher == Ndis802_11Encryption3Enabled) { ++ if (RTMPSoftDecryptAES ++ (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, ++ pShard_key)) { + + //8 bytes MIC, 8 bytes IV/EIV (CCMP Header) + pRxWI->MPDUtotalByteCount -= 16; +- } +- else +- { +- DBGPRINT(RT_DEBUG_ERROR, ("ERROR : RTMPSoftDecryptAES Failed\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("ERROR : RTMPSoftDecryptAES Failed\n")); + // give up this frame + return NDIS_STATUS_FAILURE; + } +- } +- else +- { ++ } else { + // give up this frame + return NDIS_STATUS_FAILURE; + } +@@ -2827,118 +2774,95 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData( + + } + +- +-PUINT8 GetSuiteFromRSNIE( +- IN PUINT8 rsnie, +- IN UINT rsnie_len, +- IN UINT8 type, +- OUT UINT8 *count) ++PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, ++ IN UINT rsnie_len, IN UINT8 type, OUT UINT8 * count) + { + PEID_STRUCT pEid; +- INT len; +- PUINT8 pBuf; +- INT offset = 0; +- PRSNIE_AUTH pAkm; +- UINT16 acount; +- BOOLEAN isWPA2 = FALSE; +- +- pEid = (PEID_STRUCT)rsnie; ++ INT len; ++ PUINT8 pBuf; ++ INT offset = 0; ++ PRSNIE_AUTH pAkm; ++ UINT16 acount; ++ BOOLEAN isWPA2 = FALSE; ++ ++ pEid = (PEID_STRUCT) rsnie; + len = rsnie_len - 2; // exclude IE and length +- pBuf = (PUINT8)&pEid->Octet[0]; +- +- ++ pBuf = (PUINT8) & pEid->Octet[0]; + + // set default value + *count = 0; + + // Check length +- if ((len <= 0) || (pEid->Len != len)) +- { ++ if ((len <= 0) || (pEid->Len != len)) { + DBGPRINT_ERR(("%s : The length is invalid\n", __func__)); + return NULL; + } +- + // Check WPA or WPA2 +- if (pEid->Eid == IE_WPA) +- { +- PRSNIE pRsnie = (PRSNIE)pBuf; ++ if (pEid->Eid == IE_WPA) { ++ PRSNIE pRsnie = (PRSNIE) pBuf; + UINT16 ucount; + +- if (len < sizeof(RSNIE)) +- { +- DBGPRINT_ERR(("%s : The length is too short for WPA\n", __func__)); ++ if (len < sizeof(RSNIE)) { ++ DBGPRINT_ERR(("%s : The length is too short for WPA\n", ++ __func__)); + return NULL; + } +- + // Get the count of pairwise cipher + ucount = cpu2le16(pRsnie->ucount); +- if (ucount > 2) +- { +- DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", +- __func__, ucount)); ++ if (ucount > 2) { ++ DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", __func__, ucount)); + return NULL; + } +- + // Get the group cipher +- if (type == GROUP_SUITE) +- { ++ if (type == GROUP_SUITE) { + *count = 1; + return pRsnie->mcast; + } + // Get the pairwise cipher suite +- else if (type == PAIRWISE_SUITE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", +- __func__, ucount)); ++ else if (type == PAIRWISE_SUITE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s : The count of pairwise cipher is %d\n", ++ __func__, ucount)); + *count = ucount; + return pRsnie->ucast[0].oui; +- } ++ } + + offset = sizeof(RSNIE) + (4 * (ucount - 1)); + +- } +- else if (pEid->Eid == IE_RSN) +- { +- PRSNIE2 pRsnie = (PRSNIE2)pBuf; ++ } else if (pEid->Eid == IE_RSN) { ++ PRSNIE2 pRsnie = (PRSNIE2) pBuf; + UINT16 ucount; + + isWPA2 = TRUE; + +- if (len < sizeof(RSNIE2)) +- { +- DBGPRINT_ERR(("%s : The length is too short for WPA2\n", __func__)); ++ if (len < sizeof(RSNIE2)) { ++ DBGPRINT_ERR(("%s : The length is too short for WPA2\n", ++ __func__)); + return NULL; + } +- + // Get the count of pairwise cipher + ucount = cpu2le16(pRsnie->ucount); +- if (ucount > 2) +- { +- DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", +- __func__, ucount)); ++ if (ucount > 2) { ++ DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", __func__, ucount)); + return NULL; + } +- + // Get the group cipher +- if (type == GROUP_SUITE) +- { ++ if (type == GROUP_SUITE) { + *count = 1; + return pRsnie->mcast; + } + // Get the pairwise cipher suite +- else if (type == PAIRWISE_SUITE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of pairwise cipher is %d\n", +- __func__, ucount)); ++ else if (type == PAIRWISE_SUITE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s : The count of pairwise cipher is %d\n", ++ __func__, ucount)); + *count = ucount; + return pRsnie->ucast[0].oui; + } + + offset = sizeof(RSNIE2) + (4 * (ucount - 1)); + +- } +- else +- { ++ } else { + DBGPRINT_ERR(("%s : Unknown IE (%d)\n", __func__, pEid->Eid)); + return NULL; + } +@@ -2947,53 +2871,45 @@ PUINT8 GetSuiteFromRSNIE( + pBuf += offset; + len -= offset; + +- if (len < sizeof(RSNIE_AUTH)) +- { +- DBGPRINT_ERR(("%s : The length of RSNIE is too short\n", __func__)); ++ if (len < sizeof(RSNIE_AUTH)) { ++ DBGPRINT_ERR(("%s : The length of RSNIE is too short\n", ++ __func__)); + return NULL; + } +- + // pointer to AKM count +- pAkm = (PRSNIE_AUTH)pBuf; ++ pAkm = (PRSNIE_AUTH) pBuf; + + // Get the count of pairwise cipher + acount = cpu2le16(pAkm->acount); +- if (acount > 2) +- { ++ if (acount > 2) { + DBGPRINT_ERR(("%s : The count(%d) of AKM is invlaid\n", +- __func__, acount)); ++ __func__, acount)); + return NULL; +- } +- ++ } + // Get the AKM suite +- if (type == AKM_SUITE) +- { ++ if (type == AKM_SUITE) { + DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of AKM is %d\n", +- __func__, acount)); ++ __func__, acount)); + *count = acount; + return pAkm->auth[0].oui; +- } ++ } + offset = sizeof(RSNIE_AUTH) + (4 * (acount - 1)); + + pBuf += offset; + len -= offset; + + // The remaining length must larger than (RSN-Capability(2) + PMKID-Count(2) + PMKID(16~)) +- if (len >= (sizeof(RSN_CAPABILITIES) + 2 + LEN_PMKID)) +- { ++ if (len >= (sizeof(RSN_CAPABILITIES) + 2 + LEN_PMKID)) { + // Skip RSN capability and PMKID-Count + pBuf += (sizeof(RSN_CAPABILITIES) + 2); + len -= (sizeof(RSN_CAPABILITIES) + 2); + + // Get PMKID +- if (type == PMKID_LIST) +- { ++ if (type == PMKID_LIST) { + *count = 1; + return pBuf; +- } +- } +- else +- { ++ } ++ } else { + DBGPRINT_ERR(("%s : it can't get any more information beyond AKM \n", __func__)); + return NULL; + } +@@ -3004,9 +2920,7 @@ PUINT8 GetSuiteFromRSNIE( + + } + +-VOID WpaShowAllsuite( +- IN PUINT8 rsnie, +- IN UINT rsnie_len) ++VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len) + { + PUINT8 pSuite = NULL; + UINT8 count; +@@ -3014,99 +2928,89 @@ VOID WpaShowAllsuite( + hex_dump("RSNIE", rsnie, rsnie_len); + + // group cipher +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, &count)) != NULL) +- { +- hex_dump("group cipher", pSuite, 4*count); ++ if ((pSuite = ++ GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, ++ &count)) != NULL) { ++ hex_dump("group cipher", pSuite, 4 * count); + } +- + // pairwise cipher +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, &count)) != NULL) +- { +- hex_dump("pairwise cipher", pSuite, 4*count); ++ if ((pSuite = ++ GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, ++ &count)) != NULL) { ++ hex_dump("pairwise cipher", pSuite, 4 * count); + } +- + // AKM +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) +- { +- hex_dump("AKM suite", pSuite, 4*count); ++ if ((pSuite = ++ GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) { ++ hex_dump("AKM suite", pSuite, 4 * count); + } +- + // PMKID +- if ((pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) +- { ++ if ((pSuite = ++ GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) { + hex_dump("PMKID", pSuite, LEN_PMKID); + } + + } + +-VOID RTMPInsertRSNIE( +- IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, +- IN UINT8 pmkid_len) ++VOID RTMPInsertRSNIE(IN PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PUINT8 rsnie_ptr, ++ IN UINT8 rsnie_len, ++ IN PUINT8 pmkid_ptr, IN UINT8 pmkid_len) + { +- PUCHAR pTmpBuf; +- ULONG TempLen = 0; +- UINT8 extra_len = 0; +- UINT16 pmk_count = 0; +- UCHAR ie_num; +- UINT8 total_len = 0; +- UCHAR WPA2_OUI[3]={0x00,0x0F,0xAC}; ++ PUCHAR pTmpBuf; ++ ULONG TempLen = 0; ++ UINT8 extra_len = 0; ++ UINT16 pmk_count = 0; ++ UCHAR ie_num; ++ UINT8 total_len = 0; ++ UCHAR WPA2_OUI[3] = { 0x00, 0x0F, 0xAC }; + + pTmpBuf = pFrameBuf; + + /* PMKID-List Must larger than 0 and the multiple of 16. */ +- if (pmkid_len > 0 && ((pmkid_len & 0x0f) == 0)) +- { ++ if (pmkid_len > 0 && ((pmkid_len & 0x0f) == 0)) { + extra_len = sizeof(UINT16) + pmkid_len; + + pmk_count = (pmkid_len >> 4); + pmk_count = cpu2le16(pmk_count); +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("%s : The length is PMKID-List is invalid (%d), so don't insert it.\n", +- __func__, pmkid_len)); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("%s : The length is PMKID-List is invalid (%d), so don't insert it.\n", ++ __func__, pmkid_len)); + } + +- if (rsnie_len != 0) +- { ++ if (rsnie_len != 0) { + ie_num = IE_WPA; + total_len = rsnie_len; + +- if (NdisEqualMemory(rsnie_ptr + 2, WPA2_OUI, sizeof(WPA2_OUI))) +- { ++ if (NdisEqualMemory(rsnie_ptr + 2, WPA2_OUI, sizeof(WPA2_OUI))) { + ie_num = IE_RSN; + total_len += extra_len; +- } ++ } + + /* construct RSNIE body */ +- MakeOutgoingFrame(pTmpBuf, &TempLen, +- 1, &ie_num, +- 1, &total_len, +- rsnie_len, rsnie_ptr, +- END_OF_ARGS); ++ MakeOutgoingFrame(pTmpBuf, &TempLen, ++ 1, &ie_num, ++ 1, &total_len, ++ rsnie_len, rsnie_ptr, END_OF_ARGS); + + pTmpBuf += TempLen; + *pFrameLen = *pFrameLen + TempLen; + +- if (ie_num == IE_RSN) +- { ++ if (ie_num == IE_RSN) { + /* Insert PMKID-List field */ +- if (extra_len > 0) +- { +- MakeOutgoingFrame(pTmpBuf, &TempLen, +- 2, &pmk_count, +- pmkid_len, pmkid_ptr, +- END_OF_ARGS); ++ if (extra_len > 0) { ++ MakeOutgoingFrame(pTmpBuf, &TempLen, ++ 2, &pmk_count, ++ pmkid_len, pmkid_ptr, ++ END_OF_ARGS); + + pTmpBuf += TempLen; + *pFrameLen = *pFrameLen + TempLen; ++ } + } + } +- } + + return; + } +diff --git a/drivers/staging/rt2860/common/crypt_hmac.c b/drivers/staging/rt2860/common/crypt_hmac.c +index 02701a5..a50326a 100644 +--- a/drivers/staging/rt2860/common/crypt_hmac.c ++++ b/drivers/staging/rt2860/common/crypt_hmac.c +@@ -26,7 +26,6 @@ + + #include "../crypt_hmac.h" + +- + #ifdef HMAC_SHA1_SUPPORT + /* + ======================================================================== +@@ -47,66 +46,63 @@ Note: + None + ======================================================================== + */ +-VOID HMAC_SHA1 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen) ++VOID HMAC_SHA1(IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen) + { +- SHA1_CTX_STRUC sha_ctx1; +- SHA1_CTX_STRUC sha_ctx2; +- UINT8 K0[SHA1_BLOCK_SIZE]; +- UINT8 Digest[SHA1_DIGEST_SIZE]; +- UINT index; +- +- NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); +- NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); +- /* +- * If the length of K = B(Block size): K0 = K. +- * If the length of K > B: hash K to obtain an L byte string, +- * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). +- * If the length of K < B: append zeros to the end of K to create a B-byte string K0 +- */ +- NdisZeroMemory(K0, SHA1_BLOCK_SIZE); +- if (KeyLen <= SHA1_BLOCK_SIZE) +- NdisMoveMemory(K0, Key, KeyLen); +- else +- RT_SHA1(Key, KeyLen, K0); +- /* End of if */ +- +- /* Exclusive-Or K0 with ipad */ +- /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ +- for (index = 0; index < SHA1_BLOCK_SIZE; index++) +- K0[index] ^= 0x36; +- /* End of for */ +- +- RT_SHA1_Init(&sha_ctx1); +- /* H(K0^ipad) */ +- SHA1_Append(&sha_ctx1, K0, sizeof(K0)); +- /* H((K0^ipad)||text) */ +- SHA1_Append(&sha_ctx1, Message, MessageLen); +- SHA1_End(&sha_ctx1, Digest); +- +- /* Exclusive-Or K0 with opad and remove ipad */ +- /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ +- for (index = 0; index < SHA1_BLOCK_SIZE; index++) +- K0[index] ^= 0x36^0x5c; +- /* End of for */ +- +- RT_SHA1_Init(&sha_ctx2); +- /* H(K0^opad) */ +- SHA1_Append(&sha_ctx2, K0, sizeof(K0)); +- /* H( (K0^opad) || H((K0^ipad)||text) ) */ +- SHA1_Append(&sha_ctx2, Digest, SHA1_DIGEST_SIZE); +- SHA1_End(&sha_ctx2, Digest); +- +- if (MACLen > SHA1_DIGEST_SIZE) +- NdisMoveMemory(MAC, Digest, SHA1_DIGEST_SIZE); +- else +- NdisMoveMemory(MAC, Digest, MACLen); +-} /* End of HMAC_SHA1 */ ++ SHA1_CTX_STRUC sha_ctx1; ++ SHA1_CTX_STRUC sha_ctx2; ++ UINT8 K0[SHA1_BLOCK_SIZE]; ++ UINT8 Digest[SHA1_DIGEST_SIZE]; ++ UINT index; ++ ++ NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); ++ NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); ++ /* ++ * If the length of K = B(Block size): K0 = K. ++ * If the length of K > B: hash K to obtain an L byte string, ++ * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). ++ * If the length of K < B: append zeros to the end of K to create a B-byte string K0 ++ */ ++ NdisZeroMemory(K0, SHA1_BLOCK_SIZE); ++ if (KeyLen <= SHA1_BLOCK_SIZE) ++ NdisMoveMemory(K0, Key, KeyLen); ++ else ++ RT_SHA1(Key, KeyLen, K0); ++ /* End of if */ ++ ++ /* Exclusive-Or K0 with ipad */ ++ /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ ++ for (index = 0; index < SHA1_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36; ++ /* End of for */ ++ ++ RT_SHA1_Init(&sha_ctx1); ++ /* H(K0^ipad) */ ++ SHA1_Append(&sha_ctx1, K0, sizeof(K0)); ++ /* H((K0^ipad)||text) */ ++ SHA1_Append(&sha_ctx1, Message, MessageLen); ++ SHA1_End(&sha_ctx1, Digest); ++ ++ /* Exclusive-Or K0 with opad and remove ipad */ ++ /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ ++ for (index = 0; index < SHA1_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36 ^ 0x5c; ++ /* End of for */ ++ ++ RT_SHA1_Init(&sha_ctx2); ++ /* H(K0^opad) */ ++ SHA1_Append(&sha_ctx2, K0, sizeof(K0)); ++ /* H( (K0^opad) || H((K0^ipad)||text) ) */ ++ SHA1_Append(&sha_ctx2, Digest, SHA1_DIGEST_SIZE); ++ SHA1_End(&sha_ctx2, Digest); ++ ++ if (MACLen > SHA1_DIGEST_SIZE) ++ NdisMoveMemory(MAC, Digest, SHA1_DIGEST_SIZE); ++ else ++ NdisMoveMemory(MAC, Digest, MACLen); ++} /* End of HMAC_SHA1 */ + #endif /* HMAC_SHA1_SUPPORT */ + + #ifdef HMAC_MD5_SUPPORT +@@ -129,66 +125,63 @@ Note: + None + ======================================================================== + */ +-VOID HMAC_MD5( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen) ++VOID HMAC_MD5(IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen) + { +- MD5_CTX_STRUC md5_ctx1; +- MD5_CTX_STRUC md5_ctx2; +- UINT8 K0[MD5_BLOCK_SIZE]; +- UINT8 Digest[MD5_DIGEST_SIZE]; +- UINT index; +- +- NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); +- NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); +- /* +- * If the length of K = B(Block size): K0 = K. +- * If the length of K > B: hash K to obtain an L byte string, +- * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). +- * If the length of K < B: append zeros to the end of K to create a B-byte string K0 +- */ +- NdisZeroMemory(K0, MD5_BLOCK_SIZE); +- if (KeyLen <= MD5_BLOCK_SIZE) { +- NdisMoveMemory(K0, Key, KeyLen); +- } else { +- RT_MD5(Key, KeyLen, K0); +- } +- +- /* Exclusive-Or K0 with ipad */ +- /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ +- for (index = 0; index < MD5_BLOCK_SIZE; index++) +- K0[index] ^= 0x36; +- /* End of for */ +- +- MD5_Init(&md5_ctx1); +- /* H(K0^ipad) */ +- MD5_Append(&md5_ctx1, K0, sizeof(K0)); +- /* H((K0^ipad)||text) */ +- MD5_Append(&md5_ctx1, Message, MessageLen); +- MD5_End(&md5_ctx1, Digest); +- +- /* Exclusive-Or K0 with opad and remove ipad */ +- /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ +- for (index = 0; index < MD5_BLOCK_SIZE; index++) +- K0[index] ^= 0x36^0x5c; +- /* End of for */ +- +- MD5_Init(&md5_ctx2); +- /* H(K0^opad) */ +- MD5_Append(&md5_ctx2, K0, sizeof(K0)); +- /* H( (K0^opad) || H((K0^ipad)||text) ) */ +- MD5_Append(&md5_ctx2, Digest, MD5_DIGEST_SIZE); +- MD5_End(&md5_ctx2, Digest); +- +- if (MACLen > MD5_DIGEST_SIZE) +- NdisMoveMemory(MAC, Digest, MD5_DIGEST_SIZE); +- else +- NdisMoveMemory(MAC, Digest, MACLen); +-} /* End of HMAC_SHA256 */ ++ MD5_CTX_STRUC md5_ctx1; ++ MD5_CTX_STRUC md5_ctx2; ++ UINT8 K0[MD5_BLOCK_SIZE]; ++ UINT8 Digest[MD5_DIGEST_SIZE]; ++ UINT index; ++ ++ NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); ++ NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); ++ /* ++ * If the length of K = B(Block size): K0 = K. ++ * If the length of K > B: hash K to obtain an L byte string, ++ * then append (B-L) zeros to create a B-byte string K0 (i.e., K0 = H(K) || 00...00). ++ * If the length of K < B: append zeros to the end of K to create a B-byte string K0 ++ */ ++ NdisZeroMemory(K0, MD5_BLOCK_SIZE); ++ if (KeyLen <= MD5_BLOCK_SIZE) { ++ NdisMoveMemory(K0, Key, KeyLen); ++ } else { ++ RT_MD5(Key, KeyLen, K0); ++ } ++ ++ /* Exclusive-Or K0 with ipad */ ++ /* ipad: Inner pad; the byte x¡¦36¡¦ repeated B times. */ ++ for (index = 0; index < MD5_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36; ++ /* End of for */ ++ ++ MD5_Init(&md5_ctx1); ++ /* H(K0^ipad) */ ++ MD5_Append(&md5_ctx1, K0, sizeof(K0)); ++ /* H((K0^ipad)||text) */ ++ MD5_Append(&md5_ctx1, Message, MessageLen); ++ MD5_End(&md5_ctx1, Digest); ++ ++ /* Exclusive-Or K0 with opad and remove ipad */ ++ /* opad: Outer pad; the byte x¡¦5c¡¦ repeated B times. */ ++ for (index = 0; index < MD5_BLOCK_SIZE; index++) ++ K0[index] ^= 0x36 ^ 0x5c; ++ /* End of for */ ++ ++ MD5_Init(&md5_ctx2); ++ /* H(K0^opad) */ ++ MD5_Append(&md5_ctx2, K0, sizeof(K0)); ++ /* H( (K0^opad) || H((K0^ipad)||text) ) */ ++ MD5_Append(&md5_ctx2, Digest, MD5_DIGEST_SIZE); ++ MD5_End(&md5_ctx2, Digest); ++ ++ if (MACLen > MD5_DIGEST_SIZE) ++ NdisMoveMemory(MAC, Digest, MD5_DIGEST_SIZE); ++ else ++ NdisMoveMemory(MAC, Digest, MACLen); ++} /* End of HMAC_SHA256 */ + #endif /* HMAC_MD5_SUPPORT */ + + /* End of crypt_hmac.c */ +diff --git a/drivers/staging/rt2860/common/crypt_md5.c b/drivers/staging/rt2860/common/crypt_md5.c +index 7c9ecfa..b3701f2 100644 +--- a/drivers/staging/rt2860/common/crypt_md5.c ++++ b/drivers/staging/rt2860/common/crypt_md5.c +@@ -36,7 +36,7 @@ + #define I(x, y, z) ((y) ^ ((x) | (~z))) + + #define ROTL(x,n,w) ((x << n) | (x >> (w - n))) +-#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ ++#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ + + #define ROUND1(a, b, c, d, x, s, ac) { \ + (a) += F((b),(c),(d)) + (x) + (UINT32)(ac); \ +@@ -59,11 +59,10 @@ + (a) += (b); \ + } + static const UINT32 MD5_DefaultHashValue[4] = { +- 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL ++ 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL + }; + #endif /* MD5_SUPPORT */ + +- + #ifdef MD5_SUPPORT + /* + ======================================================================== +@@ -80,16 +79,14 @@ Note: + None + ======================================================================== + */ +-VOID MD5_Init ( +- IN MD5_CTX_STRUC *pMD5_CTX) ++VOID MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX) + { +- NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, +- sizeof(MD5_DefaultHashValue)); +- NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); +- pMD5_CTX->BlockLen = 0; +- pMD5_CTX->MessageLen = 0; +-} /* End of MD5_Init */ +- ++ NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, ++ sizeof(MD5_DefaultHashValue)); ++ NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ pMD5_CTX->BlockLen = 0; ++ pMD5_CTX->MessageLen = 0; ++} /* End of MD5_Init */ + + /* + ======================================================================== +@@ -106,124 +103,122 @@ Note: + T[i] := floor(abs(sin(i + 1)) * (2 pow 32)), i is number of round + ======================================================================== + */ +-VOID MD5_Hash ( +- IN MD5_CTX_STRUC *pMD5_CTX) ++VOID MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX) + { +- UINT32 X_i; +- UINT32 X[16]; +- UINT32 a,b,c,d; +- +- /* Prepare the message schedule, {X_i} */ +- NdisMoveMemory(X, pMD5_CTX->Block, MD5_BLOCK_SIZE); +- for (X_i = 0; X_i < 16; X_i++) +- X[X_i] = cpu2le32(X[X_i]); /* Endian Swap */ +- /* End of for */ +- +- /* MD5 hash computation */ +- /* Initialize the working variables */ +- a = pMD5_CTX->HashValue[0]; +- b = pMD5_CTX->HashValue[1]; +- c = pMD5_CTX->HashValue[2]; +- d = pMD5_CTX->HashValue[3]; +- +- /* +- * Round 1 +- * Let [abcd k s i] denote the operation +- * a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND1(a, b, c, d, X[ 0], 7, 0xd76aa478); /* 1 */ +- ROUND1(d, a, b, c, X[ 1], 12, 0xe8c7b756); /* 2 */ +- ROUND1(c, d, a, b, X[ 2], 17, 0x242070db); /* 3 */ +- ROUND1(b, c, d, a, X[ 3], 22, 0xc1bdceee); /* 4 */ +- ROUND1(a, b, c, d, X[ 4], 7, 0xf57c0faf); /* 5 */ +- ROUND1(d, a, b, c, X[ 5], 12, 0x4787c62a); /* 6 */ +- ROUND1(c, d, a, b, X[ 6], 17, 0xa8304613); /* 7 */ +- ROUND1(b, c, d, a, X[ 7], 22, 0xfd469501); /* 8 */ +- ROUND1(a, b, c, d, X[ 8], 7, 0x698098d8); /* 9 */ +- ROUND1(d, a, b, c, X[ 9], 12, 0x8b44f7af); /* 10 */ +- ROUND1(c, d, a, b, X[10], 17, 0xffff5bb1); /* 11 */ +- ROUND1(b, c, d, a, X[11], 22, 0x895cd7be); /* 12 */ +- ROUND1(a, b, c, d, X[12], 7, 0x6b901122); /* 13 */ +- ROUND1(d, a, b, c, X[13], 12, 0xfd987193); /* 14 */ +- ROUND1(c, d, a, b, X[14], 17, 0xa679438e); /* 15 */ +- ROUND1(b, c, d, a, X[15], 22, 0x49b40821); /* 16 */ +- +- /* +- * Round 2 +- * Let [abcd k s i] denote the operation +- * a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND2(a, b, c, d, X[ 1], 5, 0xf61e2562); /* 17 */ +- ROUND2(d, a, b, c, X[ 6], 9, 0xc040b340); /* 18 */ +- ROUND2(c, d, a, b, X[11], 14, 0x265e5a51); /* 19 */ +- ROUND2(b, c, d, a, X[ 0], 20, 0xe9b6c7aa); /* 20 */ +- ROUND2(a, b, c, d, X[ 5], 5, 0xd62f105d); /* 21 */ +- ROUND2(d, a, b, c, X[10], 9, 0x2441453); /* 22 */ +- ROUND2(c, d, a, b, X[15], 14, 0xd8a1e681); /* 23 */ +- ROUND2(b, c, d, a, X[ 4], 20, 0xe7d3fbc8); /* 24 */ +- ROUND2(a, b, c, d, X[ 9], 5, 0x21e1cde6); /* 25 */ +- ROUND2(d, a, b, c, X[14], 9, 0xc33707d6); /* 26 */ +- ROUND2(c, d, a, b, X[ 3], 14, 0xf4d50d87); /* 27 */ +- ROUND2(b, c, d, a, X[ 8], 20, 0x455a14ed); /* 28 */ +- ROUND2(a, b, c, d, X[13], 5, 0xa9e3e905); /* 29 */ +- ROUND2(d, a, b, c, X[ 2], 9, 0xfcefa3f8); /* 30 */ +- ROUND2(c, d, a, b, X[ 7], 14, 0x676f02d9); /* 31 */ +- ROUND2(b, c, d, a, X[12], 20, 0x8d2a4c8a); /* 32 */ +- +- /* +- * Round 3 +- * Let [abcd k s t] denote the operation +- * a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND3(a, b, c, d, X[ 5], 4, 0xfffa3942); /* 33 */ +- ROUND3(d, a, b, c, X[ 8], 11, 0x8771f681); /* 34 */ +- ROUND3(c, d, a, b, X[11], 16, 0x6d9d6122); /* 35 */ +- ROUND3(b, c, d, a, X[14], 23, 0xfde5380c); /* 36 */ +- ROUND3(a, b, c, d, X[ 1], 4, 0xa4beea44); /* 37 */ +- ROUND3(d, a, b, c, X[ 4], 11, 0x4bdecfa9); /* 38 */ +- ROUND3(c, d, a, b, X[ 7], 16, 0xf6bb4b60); /* 39 */ +- ROUND3(b, c, d, a, X[10], 23, 0xbebfbc70); /* 40 */ +- ROUND3(a, b, c, d, X[13], 4, 0x289b7ec6); /* 41 */ +- ROUND3(d, a, b, c, X[ 0], 11, 0xeaa127fa); /* 42 */ +- ROUND3(c, d, a, b, X[ 3], 16, 0xd4ef3085); /* 43 */ +- ROUND3(b, c, d, a, X[ 6], 23, 0x4881d05); /* 44 */ +- ROUND3(a, b, c, d, X[ 9], 4, 0xd9d4d039); /* 45 */ +- ROUND3(d, a, b, c, X[12], 11, 0xe6db99e5); /* 46 */ +- ROUND3(c, d, a, b, X[15], 16, 0x1fa27cf8); /* 47 */ +- ROUND3(b, c, d, a, X[ 2], 23, 0xc4ac5665); /* 48 */ +- +- /* +- * Round 4 +- * Let [abcd k s t] denote the operation +- * a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) +- */ +- ROUND4(a, b, c, d, X[ 0], 6, 0xf4292244); /* 49 */ +- ROUND4(d, a, b, c, X[ 7], 10, 0x432aff97); /* 50 */ +- ROUND4(c, d, a, b, X[14], 15, 0xab9423a7); /* 51 */ +- ROUND4(b, c, d, a, X[ 5], 21, 0xfc93a039); /* 52 */ +- ROUND4(a, b, c, d, X[12], 6, 0x655b59c3); /* 53 */ +- ROUND4(d, a, b, c, X[ 3], 10, 0x8f0ccc92); /* 54 */ +- ROUND4(c, d, a, b, X[10], 15, 0xffeff47d); /* 55 */ +- ROUND4(b, c, d, a, X[ 1], 21, 0x85845dd1); /* 56 */ +- ROUND4(a, b, c, d, X[ 8], 6, 0x6fa87e4f); /* 57 */ +- ROUND4(d, a, b, c, X[15], 10, 0xfe2ce6e0); /* 58 */ +- ROUND4(c, d, a, b, X[ 6], 15, 0xa3014314); /* 59 */ +- ROUND4(b, c, d, a, X[13], 21, 0x4e0811a1); /* 60 */ +- ROUND4(a, b, c, d, X[ 4], 6, 0xf7537e82); /* 61 */ +- ROUND4(d, a, b, c, X[11], 10, 0xbd3af235); /* 62 */ +- ROUND4(c, d, a, b, X[ 2], 15, 0x2ad7d2bb); /* 63 */ +- ROUND4(b, c, d, a, X[ 9], 21, 0xeb86d391); /* 64 */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pMD5_CTX->HashValue[0] += a; +- pMD5_CTX->HashValue[1] += b; +- pMD5_CTX->HashValue[2] += c; +- pMD5_CTX->HashValue[3] += d; +- +- NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); +- pMD5_CTX->BlockLen = 0; +-} /* End of MD5_Hash */ +- ++ UINT32 X_i; ++ UINT32 X[16]; ++ UINT32 a, b, c, d; ++ ++ /* Prepare the message schedule, {X_i} */ ++ NdisMoveMemory(X, pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ for (X_i = 0; X_i < 16; X_i++) ++ X[X_i] = cpu2le32(X[X_i]); /* Endian Swap */ ++ /* End of for */ ++ ++ /* MD5 hash computation */ ++ /* Initialize the working variables */ ++ a = pMD5_CTX->HashValue[0]; ++ b = pMD5_CTX->HashValue[1]; ++ c = pMD5_CTX->HashValue[2]; ++ d = pMD5_CTX->HashValue[3]; ++ ++ /* ++ * Round 1 ++ * Let [abcd k s i] denote the operation ++ * a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND1(a, b, c, d, X[0], 7, 0xd76aa478); /* 1 */ ++ ROUND1(d, a, b, c, X[1], 12, 0xe8c7b756); /* 2 */ ++ ROUND1(c, d, a, b, X[2], 17, 0x242070db); /* 3 */ ++ ROUND1(b, c, d, a, X[3], 22, 0xc1bdceee); /* 4 */ ++ ROUND1(a, b, c, d, X[4], 7, 0xf57c0faf); /* 5 */ ++ ROUND1(d, a, b, c, X[5], 12, 0x4787c62a); /* 6 */ ++ ROUND1(c, d, a, b, X[6], 17, 0xa8304613); /* 7 */ ++ ROUND1(b, c, d, a, X[7], 22, 0xfd469501); /* 8 */ ++ ROUND1(a, b, c, d, X[8], 7, 0x698098d8); /* 9 */ ++ ROUND1(d, a, b, c, X[9], 12, 0x8b44f7af); /* 10 */ ++ ROUND1(c, d, a, b, X[10], 17, 0xffff5bb1); /* 11 */ ++ ROUND1(b, c, d, a, X[11], 22, 0x895cd7be); /* 12 */ ++ ROUND1(a, b, c, d, X[12], 7, 0x6b901122); /* 13 */ ++ ROUND1(d, a, b, c, X[13], 12, 0xfd987193); /* 14 */ ++ ROUND1(c, d, a, b, X[14], 17, 0xa679438e); /* 15 */ ++ ROUND1(b, c, d, a, X[15], 22, 0x49b40821); /* 16 */ ++ ++ /* ++ * Round 2 ++ * Let [abcd k s i] denote the operation ++ * a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND2(a, b, c, d, X[1], 5, 0xf61e2562); /* 17 */ ++ ROUND2(d, a, b, c, X[6], 9, 0xc040b340); /* 18 */ ++ ROUND2(c, d, a, b, X[11], 14, 0x265e5a51); /* 19 */ ++ ROUND2(b, c, d, a, X[0], 20, 0xe9b6c7aa); /* 20 */ ++ ROUND2(a, b, c, d, X[5], 5, 0xd62f105d); /* 21 */ ++ ROUND2(d, a, b, c, X[10], 9, 0x2441453); /* 22 */ ++ ROUND2(c, d, a, b, X[15], 14, 0xd8a1e681); /* 23 */ ++ ROUND2(b, c, d, a, X[4], 20, 0xe7d3fbc8); /* 24 */ ++ ROUND2(a, b, c, d, X[9], 5, 0x21e1cde6); /* 25 */ ++ ROUND2(d, a, b, c, X[14], 9, 0xc33707d6); /* 26 */ ++ ROUND2(c, d, a, b, X[3], 14, 0xf4d50d87); /* 27 */ ++ ROUND2(b, c, d, a, X[8], 20, 0x455a14ed); /* 28 */ ++ ROUND2(a, b, c, d, X[13], 5, 0xa9e3e905); /* 29 */ ++ ROUND2(d, a, b, c, X[2], 9, 0xfcefa3f8); /* 30 */ ++ ROUND2(c, d, a, b, X[7], 14, 0x676f02d9); /* 31 */ ++ ROUND2(b, c, d, a, X[12], 20, 0x8d2a4c8a); /* 32 */ ++ ++ /* ++ * Round 3 ++ * Let [abcd k s t] denote the operation ++ * a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND3(a, b, c, d, X[5], 4, 0xfffa3942); /* 33 */ ++ ROUND3(d, a, b, c, X[8], 11, 0x8771f681); /* 34 */ ++ ROUND3(c, d, a, b, X[11], 16, 0x6d9d6122); /* 35 */ ++ ROUND3(b, c, d, a, X[14], 23, 0xfde5380c); /* 36 */ ++ ROUND3(a, b, c, d, X[1], 4, 0xa4beea44); /* 37 */ ++ ROUND3(d, a, b, c, X[4], 11, 0x4bdecfa9); /* 38 */ ++ ROUND3(c, d, a, b, X[7], 16, 0xf6bb4b60); /* 39 */ ++ ROUND3(b, c, d, a, X[10], 23, 0xbebfbc70); /* 40 */ ++ ROUND3(a, b, c, d, X[13], 4, 0x289b7ec6); /* 41 */ ++ ROUND3(d, a, b, c, X[0], 11, 0xeaa127fa); /* 42 */ ++ ROUND3(c, d, a, b, X[3], 16, 0xd4ef3085); /* 43 */ ++ ROUND3(b, c, d, a, X[6], 23, 0x4881d05); /* 44 */ ++ ROUND3(a, b, c, d, X[9], 4, 0xd9d4d039); /* 45 */ ++ ROUND3(d, a, b, c, X[12], 11, 0xe6db99e5); /* 46 */ ++ ROUND3(c, d, a, b, X[15], 16, 0x1fa27cf8); /* 47 */ ++ ROUND3(b, c, d, a, X[2], 23, 0xc4ac5665); /* 48 */ ++ ++ /* ++ * Round 4 ++ * Let [abcd k s t] denote the operation ++ * a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) ++ */ ++ ROUND4(a, b, c, d, X[0], 6, 0xf4292244); /* 49 */ ++ ROUND4(d, a, b, c, X[7], 10, 0x432aff97); /* 50 */ ++ ROUND4(c, d, a, b, X[14], 15, 0xab9423a7); /* 51 */ ++ ROUND4(b, c, d, a, X[5], 21, 0xfc93a039); /* 52 */ ++ ROUND4(a, b, c, d, X[12], 6, 0x655b59c3); /* 53 */ ++ ROUND4(d, a, b, c, X[3], 10, 0x8f0ccc92); /* 54 */ ++ ROUND4(c, d, a, b, X[10], 15, 0xffeff47d); /* 55 */ ++ ROUND4(b, c, d, a, X[1], 21, 0x85845dd1); /* 56 */ ++ ROUND4(a, b, c, d, X[8], 6, 0x6fa87e4f); /* 57 */ ++ ROUND4(d, a, b, c, X[15], 10, 0xfe2ce6e0); /* 58 */ ++ ROUND4(c, d, a, b, X[6], 15, 0xa3014314); /* 59 */ ++ ROUND4(b, c, d, a, X[13], 21, 0x4e0811a1); /* 60 */ ++ ROUND4(a, b, c, d, X[4], 6, 0xf7537e82); /* 61 */ ++ ROUND4(d, a, b, c, X[11], 10, 0xbd3af235); /* 62 */ ++ ROUND4(c, d, a, b, X[2], 15, 0x2ad7d2bb); /* 63 */ ++ ROUND4(b, c, d, a, X[9], 21, 0xeb86d391); /* 64 */ ++ ++ /* Compute the i^th intermediate hash value H^(i) */ ++ pMD5_CTX->HashValue[0] += a; ++ pMD5_CTX->HashValue[1] += b; ++ pMD5_CTX->HashValue[2] += c; ++ pMD5_CTX->HashValue[3] += d; ++ ++ NdisZeroMemory(pMD5_CTX->Block, MD5_BLOCK_SIZE); ++ pMD5_CTX->BlockLen = 0; ++} /* End of MD5_Hash */ + + /* + ======================================================================== +@@ -243,34 +238,30 @@ Note: + None + ======================================================================== + */ +-VOID MD5_Append ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) ++VOID MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++ IN const UINT8 Message[], IN UINT MessageLen) + { +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pMD5_CTX->BlockLen + diffLen) < MD5_BLOCK_SIZE) { +- NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, +- Message + appendLen, diffLen); +- pMD5_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, +- Message + appendLen, MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); +- appendLen += (MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); +- pMD5_CTX->BlockLen = MD5_BLOCK_SIZE; +- MD5_Hash(pMD5_CTX); +- } /* End of if */ +- } /* End of while */ +- pMD5_CTX->MessageLen += MessageLen; +-} /* End of MD5_Append */ +- ++ UINT appendLen = 0; ++ UINT diffLen = 0; ++ ++ while (appendLen != MessageLen) { ++ diffLen = MessageLen - appendLen; ++ if ((pMD5_CTX->BlockLen + diffLen) < MD5_BLOCK_SIZE) { ++ NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, ++ Message + appendLen, diffLen); ++ pMD5_CTX->BlockLen += diffLen; ++ appendLen += diffLen; ++ } else { ++ NdisMoveMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, ++ Message + appendLen, ++ MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); ++ appendLen += (MD5_BLOCK_SIZE - pMD5_CTX->BlockLen); ++ pMD5_CTX->BlockLen = MD5_BLOCK_SIZE; ++ MD5_Hash(pMD5_CTX); ++ } /* End of if */ ++ } /* End of while */ ++ pMD5_CTX->MessageLen += MessageLen; ++} /* End of MD5_Append */ + + /* + ======================================================================== +@@ -289,34 +280,32 @@ Note: + None + ======================================================================== + */ +-VOID MD5_End ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- OUT UINT8 DigestMessage[]) ++VOID MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, OUT UINT8 DigestMessage[]) + { +- UINT index; +- UINT64 message_length_bits; +- +- /* append 1 bits to end of the message */ +- NdisFillMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pMD5_CTX->BlockLen > 55) +- MD5_Hash(pMD5_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pMD5_CTX->MessageLen*8; +- message_length_bits = cpu2le64(message_length_bits); +- NdisMoveMemory(&pMD5_CTX->Block[56], &message_length_bits, 8); +- MD5_Hash(pMD5_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 4;index++) +- pMD5_CTX->HashValue[index] = cpu2le32(pMD5_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pMD5_CTX->HashValue, MD5_DIGEST_SIZE); +-} /* End of MD5_End */ +- ++ UINT index; ++ UINT64 message_length_bits; ++ ++ /* append 1 bits to end of the message */ ++ NdisFillMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, 1, 0x80); ++ ++ /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ ++ if (pMD5_CTX->BlockLen > 55) ++ MD5_Hash(pMD5_CTX); ++ /* End of if */ ++ ++ /* Append the length of message in rightmost 64 bits */ ++ message_length_bits = pMD5_CTX->MessageLen * 8; ++ message_length_bits = cpu2le64(message_length_bits); ++ NdisMoveMemory(&pMD5_CTX->Block[56], &message_length_bits, 8); ++ MD5_Hash(pMD5_CTX); ++ ++ /* Return message digest, transform the UINT32 hash value to bytes */ ++ for (index = 0; index < 4; index++) ++ pMD5_CTX->HashValue[index] = ++ cpu2le32(pMD5_CTX->HashValue[index]); ++ /* End of for */ ++ NdisMoveMemory(DigestMessage, pMD5_CTX->HashValue, MD5_DIGEST_SIZE); ++} /* End of MD5_End */ + + /* + ======================================================================== +@@ -334,18 +323,16 @@ Note: + None + ======================================================================== + */ +-VOID RT_MD5 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) ++VOID RT_MD5(IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 DigestMessage[]) + { +- MD5_CTX_STRUC md5_ctx; ++ MD5_CTX_STRUC md5_ctx; + +- NdisZeroMemory(&md5_ctx, sizeof(MD5_CTX_STRUC)); +- MD5_Init(&md5_ctx); +- MD5_Append(&md5_ctx, Message, MessageLen); +- MD5_End(&md5_ctx, DigestMessage); +-} /* End of RT_MD5 */ ++ NdisZeroMemory(&md5_ctx, sizeof(MD5_CTX_STRUC)); ++ MD5_Init(&md5_ctx); ++ MD5_Append(&md5_ctx, Message, MessageLen); ++ MD5_End(&md5_ctx, DigestMessage); ++} /* End of RT_MD5 */ + + #endif /* MD5_SUPPORT */ + +diff --git a/drivers/staging/rt2860/common/crypt_sha2.c b/drivers/staging/rt2860/common/crypt_sha2.c +index d4b2396..7b1bf8a 100644 +--- a/drivers/staging/rt2860/common/crypt_sha2.c ++++ b/drivers/staging/rt2860/common/crypt_sha2.c +@@ -27,11 +27,11 @@ + #include "../crypt_sha2.h" + + /* Basic operations */ +-#define SHR(x,n) (x >> n) /* SHR(x)^n, right shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTR(x,n,w) ((x >> n) | (x << (w - n))) /* ROTR(x)^n, circular right shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) /* ROTL(x)^n, circular left shift n bits , x is w-bit word, 0 <= n <= w */ +-#define ROTR32(x,n) ROTR(x,n,32) /* 32 bits word */ +-#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ ++#define SHR(x,n) (x >> n) /* SHR(x)^n, right shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTR(x,n,w) ((x >> n) | (x << (w - n))) /* ROTR(x)^n, circular right shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTL(x,n,w) ((x << n) | (x >> (w - n))) /* ROTL(x)^n, circular left shift n bits , x is w-bit word, 0 <= n <= w */ ++#define ROTR32(x,n) ROTR(x,n,32) /* 32 bits word */ ++#define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ + + /* Basic functions */ + #define Ch(x,y,z) ((x & y) ^ ((~x) & z)) +@@ -42,10 +42,11 @@ + /* SHA1 constants */ + #define SHA1_MASK 0x0000000f + static const UINT32 SHA1_K[4] = { +- 0x5a827999UL, 0x6ed9eba1UL, 0x8f1bbcdcUL, 0xca62c1d6UL ++ 0x5a827999UL, 0x6ed9eba1UL, 0x8f1bbcdcUL, 0xca62c1d6UL + }; ++ + static const UINT32 SHA1_DefaultHashValue[5] = { +- 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL ++ 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL + }; + + /* +@@ -63,16 +64,14 @@ Note: + None + ======================================================================== + */ +-VOID RT_SHA1_Init ( +- IN SHA1_CTX_STRUC *pSHA_CTX) ++VOID RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX) + { +- NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, +- sizeof(SHA1_DefaultHashValue)); +- NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- pSHA_CTX->MessageLen = 0; +- pSHA_CTX->BlockLen = 0; +-} /* End of RT_SHA1_Init */ +- ++ NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, ++ sizeof(SHA1_DefaultHashValue)); ++ NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ pSHA_CTX->MessageLen = 0; ++ pSHA_CTX->BlockLen = 0; ++} /* End of RT_SHA1_Init */ + + /* + ======================================================================== +@@ -89,67 +88,67 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_Hash ( +- IN SHA1_CTX_STRUC *pSHA_CTX) ++VOID SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX) + { +- UINT32 W_i,t,s; +- UINT32 W[16]; +- UINT32 a,b,c,d,e,T,f_t = 0; +- +- /* Prepare the message schedule, {W_i}, 0 < t < 15 */ +- NdisMoveMemory(W, pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- for (W_i = 0; W_i < 16; W_i++) +- W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ +- /* End of for */ +- +- /* SHA256 hash computation */ +- /* Initialize the working variables */ +- a = pSHA_CTX->HashValue[0]; +- b = pSHA_CTX->HashValue[1]; +- c = pSHA_CTX->HashValue[2]; +- d = pSHA_CTX->HashValue[3]; +- e = pSHA_CTX->HashValue[4]; +- +- /* 80 rounds */ +- for (t = 0;t < 80;t++) { +- s = t & SHA1_MASK; +- if (t > 15) { /* Prepare the message schedule, {W_i}, 16 < t < 79 */ +- W[s] = (W[(s+13) & SHA1_MASK]) ^ (W[(s+8) & SHA1_MASK]) ^ (W[(s+2) & SHA1_MASK]) ^ W[s]; +- W[s] = ROTL32(W[s],1); +- } /* End of if */ +- switch (t / 20) { +- case 0: +- f_t = Ch(b,c,d); +- break; +- case 1: +- f_t = Parity(b,c,d); +- break; +- case 2: +- f_t = Maj(b,c,d); +- break; +- case 3: +- f_t = Parity(b,c,d); +- break; +- } /* End of switch */ +- T = ROTL32(a,5) + f_t + e + SHA1_K[t / 20] + W[s]; +- e = d; +- d = c; +- c = ROTL32(b,30); +- b = a; +- a = T; +- } /* End of for */ +- +- /* Compute the i^th intermediate hash value H^(i) */ +- pSHA_CTX->HashValue[0] += a; +- pSHA_CTX->HashValue[1] += b; +- pSHA_CTX->HashValue[2] += c; +- pSHA_CTX->HashValue[3] += d; +- pSHA_CTX->HashValue[4] += e; +- +- NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); +- pSHA_CTX->BlockLen = 0; +-} /* End of SHA1_Hash */ +- ++ UINT32 W_i, t, s; ++ UINT32 W[16]; ++ UINT32 a, b, c, d, e, T, f_t = 0; ++ ++ /* Prepare the message schedule, {W_i}, 0 < t < 15 */ ++ NdisMoveMemory(W, pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ for (W_i = 0; W_i < 16; W_i++) ++ W[W_i] = cpu2be32(W[W_i]); /* Endian Swap */ ++ /* End of for */ ++ ++ /* SHA256 hash computation */ ++ /* Initialize the working variables */ ++ a = pSHA_CTX->HashValue[0]; ++ b = pSHA_CTX->HashValue[1]; ++ c = pSHA_CTX->HashValue[2]; ++ d = pSHA_CTX->HashValue[3]; ++ e = pSHA_CTX->HashValue[4]; ++ ++ /* 80 rounds */ ++ for (t = 0; t < 80; t++) { ++ s = t & SHA1_MASK; ++ if (t > 15) { /* Prepare the message schedule, {W_i}, 16 < t < 79 */ ++ W[s] = ++ (W[(s + 13) & SHA1_MASK]) ^ (W[(s + 8) & SHA1_MASK]) ++ ^ (W[(s + 2) & SHA1_MASK]) ^ W[s]; ++ W[s] = ROTL32(W[s], 1); ++ } /* End of if */ ++ switch (t / 20) { ++ case 0: ++ f_t = Ch(b, c, d); ++ break; ++ case 1: ++ f_t = Parity(b, c, d); ++ break; ++ case 2: ++ f_t = Maj(b, c, d); ++ break; ++ case 3: ++ f_t = Parity(b, c, d); ++ break; ++ } /* End of switch */ ++ T = ROTL32(a, 5) + f_t + e + SHA1_K[t / 20] + W[s]; ++ e = d; ++ d = c; ++ c = ROTL32(b, 30); ++ b = a; ++ a = T; ++ } /* End of for */ ++ ++ /* Compute the i^th intermediate hash value H^(i) */ ++ pSHA_CTX->HashValue[0] += a; ++ pSHA_CTX->HashValue[1] += b; ++ pSHA_CTX->HashValue[2] += c; ++ pSHA_CTX->HashValue[3] += d; ++ pSHA_CTX->HashValue[4] += e; ++ ++ NdisZeroMemory(pSHA_CTX->Block, SHA1_BLOCK_SIZE); ++ pSHA_CTX->BlockLen = 0; ++} /* End of SHA1_Hash */ + + /* + ======================================================================== +@@ -169,34 +168,30 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_Append ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen) ++VOID SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++ IN const UINT8 Message[], IN UINT MessageLen) + { +- UINT appendLen = 0; +- UINT diffLen = 0; +- +- while (appendLen != MessageLen) { +- diffLen = MessageLen - appendLen; +- if ((pSHA_CTX->BlockLen + diffLen) < SHA1_BLOCK_SIZE) { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, diffLen); +- pSHA_CTX->BlockLen += diffLen; +- appendLen += diffLen; +- } +- else +- { +- NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, +- Message + appendLen, SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); +- appendLen += (SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); +- pSHA_CTX->BlockLen = SHA1_BLOCK_SIZE; +- SHA1_Hash(pSHA_CTX); +- } /* End of if */ +- } /* End of while */ +- pSHA_CTX->MessageLen += MessageLen; +-} /* End of SHA1_Append */ +- ++ UINT appendLen = 0; ++ UINT diffLen = 0; ++ ++ while (appendLen != MessageLen) { ++ diffLen = MessageLen - appendLen; ++ if ((pSHA_CTX->BlockLen + diffLen) < SHA1_BLOCK_SIZE) { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, diffLen); ++ pSHA_CTX->BlockLen += diffLen; ++ appendLen += diffLen; ++ } else { ++ NdisMoveMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, ++ Message + appendLen, ++ SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ appendLen += (SHA1_BLOCK_SIZE - pSHA_CTX->BlockLen); ++ pSHA_CTX->BlockLen = SHA1_BLOCK_SIZE; ++ SHA1_Hash(pSHA_CTX); ++ } /* End of if */ ++ } /* End of while */ ++ pSHA_CTX->MessageLen += MessageLen; ++} /* End of SHA1_Append */ + + /* + ======================================================================== +@@ -215,34 +210,32 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_End ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]) ++VOID SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, OUT UINT8 DigestMessage[]) + { +- UINT index; +- UINT64 message_length_bits; +- +- /* Append bit 1 to end of the message */ +- NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); +- +- /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ +- if (pSHA_CTX->BlockLen > 55) +- SHA1_Hash(pSHA_CTX); +- /* End of if */ +- +- /* Append the length of message in rightmost 64 bits */ +- message_length_bits = pSHA_CTX->MessageLen*8; +- message_length_bits = cpu2be64(message_length_bits); +- NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); +- SHA1_Hash(pSHA_CTX); +- +- /* Return message digest, transform the UINT32 hash value to bytes */ +- for (index = 0; index < 5;index++) +- pSHA_CTX->HashValue[index] = cpu2be32(pSHA_CTX->HashValue[index]); +- /* End of for */ +- NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA1_DIGEST_SIZE); +-} /* End of SHA1_End */ +- ++ UINT index; ++ UINT64 message_length_bits; ++ ++ /* Append bit 1 to end of the message */ ++ NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); ++ ++ /* 55 = 64 - 8 - 1: append 1 bit(1 byte) and message length (8 bytes) */ ++ if (pSHA_CTX->BlockLen > 55) ++ SHA1_Hash(pSHA_CTX); ++ /* End of if */ ++ ++ /* Append the length of message in rightmost 64 bits */ ++ message_length_bits = pSHA_CTX->MessageLen * 8; ++ message_length_bits = cpu2be64(message_length_bits); ++ NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); ++ SHA1_Hash(pSHA_CTX); ++ ++ /* Return message digest, transform the UINT32 hash value to bytes */ ++ for (index = 0; index < 5; index++) ++ pSHA_CTX->HashValue[index] = ++ cpu2be32(pSHA_CTX->HashValue[index]); ++ /* End of for */ ++ NdisMoveMemory(DigestMessage, pSHA_CTX->HashValue, SHA1_DIGEST_SIZE); ++} /* End of SHA1_End */ + + /* + ======================================================================== +@@ -260,19 +253,17 @@ Note: + None + ======================================================================== + */ +-VOID RT_SHA1 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]) ++VOID RT_SHA1(IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 DigestMessage[]) + { + +- SHA1_CTX_STRUC sha_ctx; ++ SHA1_CTX_STRUC sha_ctx; + +- NdisZeroMemory(&sha_ctx, sizeof(SHA1_CTX_STRUC)); +- RT_SHA1_Init(&sha_ctx); +- SHA1_Append(&sha_ctx, Message, MessageLen); +- SHA1_End(&sha_ctx, DigestMessage); +-} /* End of RT_SHA1 */ ++ NdisZeroMemory(&sha_ctx, sizeof(SHA1_CTX_STRUC)); ++ RT_SHA1_Init(&sha_ctx); ++ SHA1_Append(&sha_ctx, Message, MessageLen); ++ SHA1_End(&sha_ctx, DigestMessage); ++} /* End of RT_SHA1 */ + #endif /* SHA1_SUPPORT */ + + /* End of crypt_sha2.c */ +diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c +index 11b7c19..bfe742d 100644 +--- a/drivers/staging/rt2860/common/dfs.c ++++ b/drivers/staging/rt2860/common/dfs.c +@@ -52,17 +52,13 @@ + + ======================================================================== + */ +-BOOLEAN RadarChannelCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ch) ++BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, IN UCHAR Ch) + { +- INT i; ++ INT i; + BOOLEAN result = FALSE; + +- for (i=0; iChannelListNum; i++) +- { +- if (Ch == pAd->ChannelList[i].Channel) +- { ++ for (i = 0; i < pAd->ChannelListNum; i++) { ++ if (Ch == pAd->ChannelList[i].Channel) { + result = pAd->ChannelList[i].DfsReq; + break; + } +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index 4bff473..8e71add 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -35,37 +35,30 @@ + -------- ---------- ---------------------------------------------- + */ + +- + #include "../rt_config.h" + +- +- + #define EFUSE_USAGE_MAP_START 0x2d0 + #define EFUSE_USAGE_MAP_END 0x2fc + #define EFUSE_USAGE_MAP_SIZE 45 + +- +- + #define EFUSE_EEPROM_DEFULT_FILE "RT30xxEEPROM.bin" + #define MAX_EEPROM_BIN_FILE_SIZE 1024 + +- +- + #define EFUSE_TAG 0x2fe + +-typedef union _EFUSE_CTRL_STRUC { +- struct { +- UINT32 EFSROM_AOUT:6; +- UINT32 EFSROM_MODE:2; +- UINT32 EFSROM_LDO_OFF_TIME:6; +- UINT32 EFSROM_LDO_ON_TIME:2; +- UINT32 EFSROM_AIN:10; +- UINT32 RESERVED:4; +- UINT32 EFSROM_KICK:1; +- UINT32 SEL_EFUSE:1; +- } field; +- UINT32 word; +-} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; ++typedef union _EFUSE_CTRL_STRUC { ++ struct { ++ UINT32 EFSROM_AOUT:6; ++ UINT32 EFSROM_MODE:2; ++ UINT32 EFSROM_LDO_OFF_TIME:6; ++ UINT32 EFSROM_LDO_ON_TIME:2; ++ UINT32 EFSROM_AIN:10; ++ UINT32 RESERVED:4; ++ UINT32 EFSROM_KICK:1; ++ UINT32 SEL_EFUSE:1; ++ } field; ++ UINT32 word; ++} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; + + /* + ======================================================================== +@@ -80,16 +73,13 @@ typedef union _EFUSE_CTRL_STRUC { + + ======================================================================== + */ +-UCHAR eFuseReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) ++UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN USHORT Length, OUT USHORT * pData) + { +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; ++ EFUSE_CTRL_STRUC eFuseCtrlStruc; ++ int i; ++ USHORT efuseDataOffset; ++ UINT32 data; + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +@@ -108,12 +98,10 @@ UCHAR eFuseReadRegisters( + + //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. + i = 0; +- while(i < 500) +- { ++ while (i < 500) { + //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) +- { ++ if (eFuseCtrlStruc.field.EFSROM_KICK == 0) { + break; + } + RTMPusecDelay(2); +@@ -121,28 +109,25 @@ UCHAR eFuseReadRegisters( + } + + //if EFSROM_AOUT is not found in physical address, write 0xffff +- if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f) +- { +- for(i=0; i> (8*(Offset & 0x3)); ++ data = data >> (8 * (Offset & 0x3)); + + NdisMoveMemory(pData, &data, Length); + } +@@ -164,16 +149,14 @@ UCHAR eFuseReadRegisters( + + ======================================================================== + */ +-VOID eFusePhysicalReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData) ++VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, OUT USHORT * pData) + { +- EFUSE_CTRL_STRUC eFuseCtrlStruc; +- int i; +- USHORT efuseDataOffset; +- UINT32 data; ++ EFUSE_CTRL_STRUC eFuseCtrlStruc; ++ int i; ++ USHORT efuseDataOffset; ++ UINT32 data; + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +@@ -192,10 +175,9 @@ VOID eFusePhysicalReadRegisters( + + //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. + i = 0; +- while(i < 500) +- { ++ while (i < 500) { + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +- if(eFuseCtrlStruc.field.EFSROM_KICK == 0) ++ if (eFuseCtrlStruc.field.EFSROM_KICK == 0) + break; + RTMPusecDelay(2); + i++; +@@ -209,11 +191,11 @@ VOID eFusePhysicalReadRegisters( + //594:B A 9 8 + //598:7 6 5 4 + //59C:3 2 1 0 +- efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ; ++ efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC); + + RTMP_IO_READ32(pAd, efuseDataOffset, &data); + +- data = data >> (8*(Offset & 0x3)); ++ data = data >> (8 * (Offset & 0x3)); + + NdisMoveMemory(pData, &data, Length); + +@@ -232,24 +214,20 @@ VOID eFusePhysicalReadRegisters( + + ======================================================================== + */ +-static VOID eFuseReadPhysical( +- IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, +- IN ULONG nOutBufferSize +-) ++static VOID eFuseReadPhysical(IN PRTMP_ADAPTER pAd, ++ IN PUSHORT lpInBuffer, ++ IN ULONG nInBufferSize, ++ OUT PUSHORT lpOutBuffer, IN ULONG nOutBufferSize) + { +- USHORT* pInBuf = (USHORT*)lpInBuffer; +- USHORT* pOutBuf = (USHORT*)lpOutBuffer; ++ USHORT *pInBuf = (USHORT *) lpInBuffer; ++ USHORT *pOutBuf = (USHORT *) lpOutBuffer; + +- USHORT Offset = pInBuf[0]; //addr +- USHORT Length = pInBuf[1]; //length +- int i; ++ USHORT Offset = pInBuf[0]; //addr ++ USHORT Length = pInBuf[1]; //length ++ int i; + +- for(i=0; ibUseEfuse) ++ USHORT LogicalAddress; ++ USHORT efusefreenum = 0; ++ if (!pAd->bUseEfuse) + return FALSE; +- for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) +- { ++ for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i += 2) { + eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- efusefreenum= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); ++ if ((LogicalAddress & 0xff) == 0) { ++ efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END - i + 1); + break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END-i); ++ } else if (((LogicalAddress >> 8) & 0xff) == 0) { ++ efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END - i); + break; + } + +- if(i == EFUSE_USAGE_MAP_END) ++ if (i == EFUSE_USAGE_MAP_END) + efusefreenum = 0; + } +- printk("efuseFreeNumber is %d\n",efusefreenum); ++ printk("efuseFreeNumber is %d\n", efusefreenum); + return TRUE; + } + +- +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) ++INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + { +-USHORT InBuf[3]; +- INT i=0; +- if(!pAd->bUseEfuse) ++ USHORT InBuf[3]; ++ INT i = 0; ++ if (!pAd->bUseEfuse) + return FALSE; +- for(i =0; iEFuseTag = (value & 0xff); + } + return 0; + } + +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, +- PUINT EfuseFreeBlock) ++VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock) + { + USHORT i; +- USHORT LogicalAddress; +- if(!pAd->bUseEfuse) +- { +- DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount Only supports efuse Mode\n")); +- return ; +- } +- for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2) +- { ++ USHORT LogicalAddress; ++ if (!pAd->bUseEfuse) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("eFuseGetFreeBlockCount Only supports efuse Mode\n")); ++ return; ++ } ++ for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i += 2) { + eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); +- if( (LogicalAddress & 0xff) == 0) +- { +- *EfuseFreeBlock= (UCHAR) (EFUSE_USAGE_MAP_END-i+1); ++ if ((LogicalAddress & 0xff) == 0) { ++ *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END - i + 1); + break; +- } +- else if(( (LogicalAddress >> 8) & 0xff) == 0) +- { +- *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END-i); ++ } else if (((LogicalAddress >> 8) & 0xff) == 0) { ++ *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END - i); + break; + } + +- if(i == EFUSE_USAGE_MAP_END) ++ if (i == EFUSE_USAGE_MAP_END) + *EfuseFreeBlock = 0; + } +- DBGPRINT(RT_DEBUG_TRACE,("eFuseGetFreeBlockCount is 0x%x\n",*EfuseFreeBlock)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("eFuseGetFreeBlockCount is 0x%x\n", *EfuseFreeBlock)); + } + +-INT eFuse_init( +- IN PRTMP_ADAPTER pAd) ++INT eFuse_init(IN PRTMP_ADAPTER pAd) + { +- UINT EfuseFreeBlock=0; +- DBGPRINT(RT_DEBUG_ERROR, ("NVM is Efuse and its size =%x[%x-%x] \n",EFUSE_USAGE_MAP_SIZE,EFUSE_USAGE_MAP_START,EFUSE_USAGE_MAP_END)); ++ UINT EfuseFreeBlock = 0; ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("NVM is Efuse and its size =%x[%x-%x] \n", ++ EFUSE_USAGE_MAP_SIZE, EFUSE_USAGE_MAP_START, ++ EFUSE_USAGE_MAP_END)); + eFuseGetFreeBlockCount(pAd, &EfuseFreeBlock); + + return 0; +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +index d600e9b..b5be6f0 100644 +--- a/drivers/staging/rt2860/common/ee_prom.c ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -35,25 +35,18 @@ + -------- ---------- ---------------------------------------------- + */ + +- + #include "../rt_config.h" + +- +- + // IRQL = PASSIVE_LEVEL +-static inline VOID RaiseClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) ++static inline VOID RaiseClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + { + *x = *x | EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition ++ RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition + } + + // IRQL = PASSIVE_LEVEL +-static inline VOID LowerClock( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 *x) ++static inline VOID LowerClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + { + *x = *x & ~EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +@@ -61,67 +54,60 @@ static inline VOID LowerClock( + } + + // IRQL = PASSIVE_LEVEL +-static inline USHORT ShiftInBits( +- IN PRTMP_ADAPTER pAd) ++static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) + { +- UINT32 x,i; +- USHORT data=0; ++ UINT32 x, i; ++ USHORT data = 0; + + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + +- x &= ~( EEDO | EEDI); ++ x &= ~(EEDO | EEDI); + +- for(i=0; i<16; i++) +- { ++ for (i = 0; i < 16; i++) { + data = data << 1; + RaiseClock(pAd, &x); + + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- LowerClock(pAd, &x); //prevent read failed ++ LowerClock(pAd, &x); //prevent read failed + + x &= ~(EEDI); +- if(x & EEDO) +- data |= 1; ++ if (x & EEDO) ++ data |= 1; + } + + return data; + } + +- + // IRQL = PASSIVE_LEVEL +-static inline VOID ShiftOutBits( +- IN PRTMP_ADAPTER pAd, +- IN USHORT data, +- IN USHORT count) ++static inline VOID ShiftOutBits(IN PRTMP_ADAPTER pAd, ++ IN USHORT data, IN USHORT count) + { +- UINT32 x,mask; ++ UINT32 x, mask; + + mask = 0x01 << (count - 1); + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + + x &= ~(EEDO | EEDI); + +- do +- { +- x &= ~EEDI; +- if(data & mask) x |= EEDI; ++ do { ++ x &= ~EEDI; ++ if (data & mask) ++ x |= EEDI; + +- RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); ++ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + +- RaiseClock(pAd, &x); +- LowerClock(pAd, &x); ++ RaiseClock(pAd, &x); ++ LowerClock(pAd, &x); + +- mask = mask >> 1; +- } while(mask); ++ mask = mask >> 1; ++ } while (mask); + + x &= ~EEDI; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + } + +- + // IRQL = PASSIVE_LEVEL +-static inline VOID EEpromCleanup( +- IN PRTMP_ADAPTER pAd) ++static inline VOID EEpromCleanup(IN PRTMP_ADAPTER pAd) + { + UINT32 x; + +@@ -134,11 +120,9 @@ static inline VOID EEpromCleanup( + LowerClock(pAd, &x); + } + +- +-static inline VOID EWEN( +- IN PRTMP_ADAPTER pAd) ++static inline VOID EWEN(IN PRTMP_ADAPTER pAd) + { +- UINT32 x; ++ UINT32 x; + + // reset bits and set EECS + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -157,11 +141,9 @@ static inline VOID EWEN( + EEpromCleanup(pAd); + } + +- +-static inline VOID EWDS( +- IN PRTMP_ADAPTER pAd) ++static inline VOID EWDS(IN PRTMP_ADAPTER pAd) + { +- UINT32 x; ++ UINT32 x; + + // reset bits and set EECS + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -180,16 +162,12 @@ static inline VOID EWDS( + EEpromCleanup(pAd); + } + +- + // IRQL = PASSIVE_LEVEL +-int rtmp_ee_prom_read16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT USHORT *pValue) ++int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT USHORT * pValue) + { +- UINT32 x; +- USHORT data; +- ++ UINT32 x; ++ USHORT data; + + Offset /= 2; + // reset bits and set EECS +@@ -199,13 +177,11 @@ int rtmp_ee_prom_read16( + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + + // patch can not access e-Fuse issue +- if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) +- { ++ if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + // kick a pulse + RaiseClock(pAd, &x); + LowerClock(pAd, &x); + } +- + // output the read_opcode and register number in that order + ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3); + ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); +@@ -215,7 +191,6 @@ int rtmp_ee_prom_read16( + + EEpromCleanup(pAd); + +- + *pValue = data; + + return NDIS_STATUS_SUCCESS; +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index 39276ca..872b47c 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -36,62 +36,56 @@ + */ + #include "../rt_config.h" + +- +-INT RtmpChipOpsEepromHook( +- IN RTMP_ADAPTER *pAd, +- IN INT infType) ++INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +- UINT32 eFuseCtrl, MacCsr0; ++ UINT32 eFuseCtrl, MacCsr0; + int index; + + index = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + pAd->MACVersion = MacCsr0; + +- if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) +- break; ++ if ((pAd->MACVersion != 0x00) ++ && (pAd->MACVersion != 0xFFFFFFFF)) ++ break; + + RTMPusecDelay(10); + } while (index++ < 100); + +- pAd->bUseEfuse=FALSE; ++ pAd->bUseEfuse = FALSE; + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrl); +- pAd->bUseEfuse = ( (eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0; +- if(pAd->bUseEfuse) +- { ++ pAd->bUseEfuse = ((eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0; ++ if (pAd->bUseEfuse) { + pChipOps->eeinit = eFuse_init; + pChipOps->eeread = rtmp_ee_efuse_read16; +- return 0 ; +- } +- else ++ return 0; ++ } else + DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); + #endif // RTMP_EFUSE_SUPPORT // + #endif // RT30xx // + +- switch(infType) +- { ++ switch (infType) { + #ifdef RTMP_PCI_SUPPORT +- case RTMP_DEV_INF_PCI: +- pChipOps->eeinit = NULL; +- pChipOps->eeread = rtmp_ee_prom_read16; +- break; ++ case RTMP_DEV_INF_PCI: ++ pChipOps->eeinit = NULL; ++ pChipOps->eeread = rtmp_ee_prom_read16; ++ break; + #endif // RTMP_PCI_SUPPORT // + #ifdef RTMP_USB_SUPPORT +- case RTMP_DEV_INF_USB: +- pChipOps->eeinit = NULL; +- pChipOps->eeread = RTUSBReadEEPROM16; +- break; ++ case RTMP_DEV_INF_USB: ++ pChipOps->eeinit = NULL; ++ pChipOps->eeread = RTUSBReadEEPROM16; ++ break; + #endif // RTMP_USB_SUPPORT // + +- default: +- DBGPRINT(RT_DEBUG_ERROR, ("RtmpChipOpsEepromHook() failed!\n")); +- break; +- } ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ("RtmpChipOpsEepromHook() failed!\n")); ++ break; ++ } + + return 0; + } +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 9c250c2..1d97b73 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -39,300 +39,309 @@ + #include "../rt_config.h" + #include + +-UCHAR CISCO_OUI[] = {0x00, 0x40, 0x96}; +- +-UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01}; +-UCHAR RSN_OUI[] = {0x00, 0x0f, 0xac}; +-UCHAR WME_INFO_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01}; +-UCHAR WME_PARM_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01}; +-UCHAR Ccx2QosInfo[] = {0x00, 0x40, 0x96, 0x04}; +-UCHAR RALINK_OUI[] = {0x00, 0x0c, 0x43}; +-UCHAR BROADCOM_OUI[] = {0x00, 0x90, 0x4c}; +-UCHAR WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04}; +-UCHAR PRE_N_HT_OUI[] = {0x00, 0x90, 0x4c}; ++UCHAR CISCO_OUI[] = { 0x00, 0x40, 0x96 }; ++ ++UCHAR WPA_OUI[] = { 0x00, 0x50, 0xf2, 0x01 }; ++UCHAR RSN_OUI[] = { 0x00, 0x0f, 0xac }; ++UCHAR WME_INFO_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01 }; ++UCHAR WME_PARM_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01 }; ++UCHAR Ccx2QosInfo[] = { 0x00, 0x40, 0x96, 0x04 }; ++UCHAR RALINK_OUI[] = { 0x00, 0x0c, 0x43 }; ++UCHAR BROADCOM_OUI[] = { 0x00, 0x90, 0x4c }; ++UCHAR WPS_OUI[] = { 0x00, 0x50, 0xf2, 0x04 }; ++UCHAR PRE_N_HT_OUI[] = { 0x00, 0x90, 0x4c }; + + UCHAR RateSwitchTable[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x11, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +- 0x04, 0x21, 0, 30, 50, +- 0x05, 0x21, 1, 20, 50, +- 0x06, 0x21, 2, 20, 50, +- 0x07, 0x21, 3, 15, 50, +- 0x08, 0x21, 4, 15, 30, +- 0x09, 0x21, 5, 10, 25, +- 0x0a, 0x21, 6, 8, 25, +- 0x0b, 0x21, 7, 8, 25, +- 0x0c, 0x20, 12, 15, 30, +- 0x0d, 0x20, 13, 8, 20, +- 0x0e, 0x20, 14, 8, 20, +- 0x0f, 0x20, 15, 8, 25, +- 0x10, 0x22, 15, 8, 25, +- 0x11, 0x00, 0, 0, 0, +- 0x12, 0x00, 0, 0, 0, +- 0x13, 0x00, 0, 0, 0, +- 0x14, 0x00, 0, 0, 0, +- 0x15, 0x00, 0, 0, 0, +- 0x16, 0x00, 0, 0, 0, +- 0x17, 0x00, 0, 0, 0, +- 0x18, 0x00, 0, 0, 0, +- 0x19, 0x00, 0, 0, 0, +- 0x1a, 0x00, 0, 0, 0, +- 0x1b, 0x00, 0, 0, 0, +- 0x1c, 0x00, 0, 0, 0, +- 0x1d, 0x00, 0, 0, 0, +- 0x1e, 0x00, 0, 0, 0, +- 0x1f, 0x00, 0, 0, 0, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x11, 0x00, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 35, 45, ++ 0x03, 0x00, 3, 20, 45, ++ 0x04, 0x21, 0, 30, 50, ++ 0x05, 0x21, 1, 20, 50, ++ 0x06, 0x21, 2, 20, 50, ++ 0x07, 0x21, 3, 15, 50, ++ 0x08, 0x21, 4, 15, 30, ++ 0x09, 0x21, 5, 10, 25, ++ 0x0a, 0x21, 6, 8, 25, ++ 0x0b, 0x21, 7, 8, 25, ++ 0x0c, 0x20, 12, 15, 30, ++ 0x0d, 0x20, 13, 8, 20, ++ 0x0e, 0x20, 14, 8, 20, ++ 0x0f, 0x20, 15, 8, 25, ++ 0x10, 0x22, 15, 8, 25, ++ 0x11, 0x00, 0, 0, 0, ++ 0x12, 0x00, 0, 0, 0, ++ 0x13, 0x00, 0, 0, 0, ++ 0x14, 0x00, 0, 0, 0, ++ 0x15, 0x00, 0, 0, 0, ++ 0x16, 0x00, 0, 0, 0, ++ 0x17, 0x00, 0, 0, 0, ++ 0x18, 0x00, 0, 0, 0, ++ 0x19, 0x00, 0, 0, 0, ++ 0x1a, 0x00, 0, 0, 0, ++ 0x1b, 0x00, 0, 0, 0, ++ 0x1c, 0x00, 0, 0, 0, ++ 0x1d, 0x00, 0, 0, 0, ++ 0x1e, 0x00, 0, 0, 0, ++ 0x1f, 0x00, 0, 0, 0, + }; + + UCHAR RateSwitchTable11B[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x04, 0x03, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x04, 0x03, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 35, 45, ++ 0x03, 0x00, 3, 20, 45, + }; + + UCHAR RateSwitchTable11BG[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 35, 45, +- 0x03, 0x00, 3, 20, 45, +- 0x04, 0x10, 2, 20, 35, +- 0x05, 0x10, 3, 16, 35, +- 0x06, 0x10, 4, 10, 25, +- 0x07, 0x10, 5, 16, 25, +- 0x08, 0x10, 6, 10, 25, +- 0x09, 0x10, 7, 10, 13, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 35, 45, ++ 0x03, 0x00, 3, 20, 45, ++ 0x04, 0x10, 2, 20, 35, ++ 0x05, 0x10, 3, 16, 35, ++ 0x06, 0x10, 4, 10, 25, ++ 0x07, 0x10, 5, 16, 25, ++ 0x08, 0x10, 6, 10, 25, ++ 0x09, 0x10, 7, 10, 13, + }; + + UCHAR RateSwitchTable11G[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x08, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x10, 0, 20, 101, +- 0x01, 0x10, 1, 20, 35, +- 0x02, 0x10, 2, 20, 35, +- 0x03, 0x10, 3, 16, 35, +- 0x04, 0x10, 4, 10, 25, +- 0x05, 0x10, 5, 16, 25, +- 0x06, 0x10, 6, 10, 25, +- 0x07, 0x10, 7, 10, 13, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x08, 0x00, 0, 0, 0, // Initial used item after association ++ 0x00, 0x10, 0, 20, 101, ++ 0x01, 0x10, 1, 20, 35, ++ 0x02, 0x10, 2, 20, 35, ++ 0x03, 0x10, 3, 16, 35, ++ 0x04, 0x10, 4, 10, 25, ++ 0x05, 0x10, 5, 16, 25, ++ 0x06, 0x10, 6, 10, 25, ++ 0x07, 0x10, 7, 10, 13, + }; + + UCHAR RateSwitchTable11N1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x21, 5, 10, 25, +- 0x09, 0x21, 6, 8, 14, +- 0x0a, 0x21, 7, 8, 14, +- 0x0b, 0x23, 7, 8, 14, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0c, 0x0a, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x21, 5, 10, 25, ++ 0x09, 0x21, 6, 8, 14, ++ 0x0a, 0x21, 7, 8, 14, ++ 0x0b, 0x23, 7, 8, 14, + }; + + UCHAR RateSwitchTable11N2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x20, 11, 15, 30, +- 0x09, 0x20, 12, 15, 30, +- 0x0a, 0x20, 13, 8, 20, +- 0x0b, 0x20, 14, 8, 20, +- 0x0c, 0x20, 15, 8, 25, +- 0x0d, 0x22, 15, 8, 15, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x20, 11, 15, 30, ++ 0x09, 0x20, 12, 15, 30, ++ 0x0a, 0x20, 13, 8, 20, ++ 0x0b, 0x20, 14, 8, 20, ++ 0x0c, 0x20, 15, 8, 25, ++ 0x0d, 0x22, 15, 8, 15, + }; + + UCHAR RateSwitchTable11N3S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x00, 0, 0, 0, // 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 11, 15, 30, // Required by System-Alan @ 20080812 +- 0x06, 0x20, 12, 15, 30, // 0x05, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, // 0x06, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, // 0x07, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, // 0x08, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, // 0x09, 0x22, 15, 8, 25, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0b, 0x00, 0, 0, 0, // 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 15, 50, ++ 0x04, 0x21, 4, 15, 30, ++ 0x05, 0x20, 11, 15, 30, // Required by System-Alan @ 20080812 ++ 0x06, 0x20, 12, 15, 30, // 0x05, 0x20, 12, 15, 30, ++ 0x07, 0x20, 13, 8, 20, // 0x06, 0x20, 13, 8, 20, ++ 0x08, 0x20, 14, 8, 20, // 0x07, 0x20, 14, 8, 20, ++ 0x09, 0x20, 15, 8, 25, // 0x08, 0x20, 15, 8, 25, ++ 0x0a, 0x22, 15, 8, 25, // 0x09, 0x22, 15, 8, 25, + }; + + UCHAR RateSwitchTable11N2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0b, 0x09, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 15, 50, ++ 0x04, 0x21, 4, 15, 30, ++ 0x05, 0x21, 5, 15, 30, ++ 0x06, 0x20, 12, 15, 30, ++ 0x07, 0x20, 13, 8, 20, ++ 0x08, 0x20, 14, 8, 20, ++ 0x09, 0x20, 15, 8, 25, ++ 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, ++UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0b, 0x09, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 15, 50, ++ 0x04, 0x21, 4, 15, 30, ++ 0x05, 0x21, 5, 15, 30, ++ 0x06, 0x20, 12, 15, 30, ++ 0x07, 0x20, 13, 8, 20, ++ 0x08, 0x20, 14, 8, 20, ++ 0x09, 0x20, 15, 8, 25, ++ 0x0a, 0x22, 15, 8, 25, + }; + + UCHAR RateSwitchTable11BGN1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x21, 5, 10, 25, +- 0x09, 0x21, 6, 8, 14, +- 0x0a, 0x21, 7, 8, 14, +- 0x0b, 0x23, 7, 8, 14, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0c, 0x0a, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x21, 5, 10, 25, ++ 0x09, 0x21, 6, 8, 14, ++ 0x0a, 0x21, 7, 8, 14, ++ 0x0b, 0x23, 7, 8, 14, + }; + + UCHAR RateSwitchTable11BGN2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association +- 0x00, 0x00, 0, 40, 101, +- 0x01, 0x00, 1, 40, 50, +- 0x02, 0x00, 2, 25, 45, +- 0x03, 0x21, 0, 20, 35, +- 0x04, 0x21, 1, 20, 35, +- 0x05, 0x21, 2, 20, 35, +- 0x06, 0x21, 3, 15, 35, +- 0x07, 0x21, 4, 15, 30, +- 0x08, 0x20, 11, 15, 30, +- 0x09, 0x20, 12, 15, 30, +- 0x0a, 0x20, 13, 8, 20, +- 0x0b, 0x20, 14, 8, 20, +- 0x0c, 0x20, 15, 8, 25, +- 0x0d, 0x22, 15, 8, 15, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++ 0x00, 0x00, 0, 40, 101, ++ 0x01, 0x00, 1, 40, 50, ++ 0x02, 0x00, 2, 25, 45, ++ 0x03, 0x21, 0, 20, 35, ++ 0x04, 0x21, 1, 20, 35, ++ 0x05, 0x21, 2, 20, 35, ++ 0x06, 0x21, 3, 15, 35, ++ 0x07, 0x21, 4, 15, 30, ++ 0x08, 0x20, 11, 15, 30, ++ 0x09, 0x20, 12, 15, 30, ++ 0x0a, 0x20, 13, 8, 20, ++ 0x0b, 0x20, 14, 8, 20, ++ 0x0c, 0x20, 15, 8, 25, ++ 0x0d, 0x22, 15, 8, 15, + }; + +-UCHAR RateSwitchTable11BGN3S[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 20, 50, +- 0x04, 0x21, 4, 15, 50, +- 0x05, 0x20, 20, 15, 30, +- 0x06, 0x20, 21, 8, 20, +- 0x07, 0x20, 22, 8, 20, +- 0x08, 0x20, 23, 8, 25, +- 0x09, 0x22, 23, 8, 25, ++UCHAR RateSwitchTable11BGN3S[] = { // 3*3 ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, //50 ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 20, 50, ++ 0x04, 0x21, 4, 15, 50, ++ 0x05, 0x20, 20, 15, 30, ++ 0x06, 0x20, 21, 8, 20, ++ 0x07, 0x20, 22, 8, 20, ++ 0x08, 0x20, 23, 8, 25, ++ 0x09, 0x22, 23, 8, 25, + }; + + UCHAR RateSwitchTable11BGN2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0b, 0x09, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, //50 ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 15, 50, ++ 0x04, 0x21, 4, 15, 30, ++ 0x05, 0x21, 5, 15, 30, ++ 0x06, 0x20, 12, 15, 30, ++ 0x07, 0x20, 13, 8, 20, ++ 0x08, 0x20, 14, 8, 20, ++ 0x09, 0x20, 15, 8, 25, ++ 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30,101, //50 +- 0x01, 0x21, 1, 20, 50, +- 0x02, 0x21, 2, 20, 50, +- 0x03, 0x21, 3, 15, 50, +- 0x04, 0x21, 4, 15, 30, +- 0x05, 0x21, 5, 15, 30, +- 0x06, 0x21, 12, 15, 30, +- 0x07, 0x20, 20, 15, 30, +- 0x08, 0x20, 21, 8, 20, +- 0x09, 0x20, 22, 8, 20, +- 0x0a, 0x20, 23, 8, 25, +- 0x0b, 0x22, 23, 8, 25, ++UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 ++// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) ++ 0x0c, 0x09, 0, 0, 0, // Initial used item after association ++ 0x00, 0x21, 0, 30, 101, //50 ++ 0x01, 0x21, 1, 20, 50, ++ 0x02, 0x21, 2, 20, 50, ++ 0x03, 0x21, 3, 15, 50, ++ 0x04, 0x21, 4, 15, 30, ++ 0x05, 0x21, 5, 15, 30, ++ 0x06, 0x21, 12, 15, 30, ++ 0x07, 0x20, 20, 15, 30, ++ 0x08, 0x20, 21, 8, 20, ++ 0x09, 0x20, 22, 8, 20, ++ 0x0a, 0x20, 23, 8, 25, ++ 0x0b, 0x22, 23, 8, 25, + }; + +- +-extern UCHAR OfdmRateToRxwiMCS[]; ++extern UCHAR OfdmRateToRxwiMCS[]; + // since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. + // otherwise the WLAN peer may not be able to receive the ACK thus downgrade its data TX rate +-ULONG BasicRateMask[12] = {0xfffff001 /* 1-Mbps */, 0xfffff003 /* 2 Mbps */, 0xfffff007 /* 5.5 */, 0xfffff00f /* 11 */, +- 0xfffff01f /* 6 */ , 0xfffff03f /* 9 */ , 0xfffff07f /* 12 */ , 0xfffff0ff /* 18 */, +- 0xfffff1ff /* 24 */ , 0xfffff3ff /* 36 */ , 0xfffff7ff /* 48 */ , 0xffffffff /* 54 */}; ++ULONG BasicRateMask[12] = ++ { 0xfffff001 /* 1-Mbps */ , 0xfffff003 /* 2 Mbps */ , 0xfffff007 /* 5.5 */ , ++0xfffff00f /* 11 */ , ++ 0xfffff01f /* 6 */ , 0xfffff03f /* 9 */ , 0xfffff07f /* 12 */ , ++ 0xfffff0ff /* 18 */ , ++ 0xfffff1ff /* 24 */ , 0xfffff3ff /* 36 */ , 0xfffff7ff /* 48 */ , ++ 0xffffffff /* 54 */ ++}; + +-UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +-UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; ++UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; ++UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + + // e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than +-// this value, then it's quaranteed capable of operating in 36 mbps TX rate in +-// clean environment. +-// TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 +-CHAR RssiSafeLevelForTxRate[] ={ -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 }; +- +-UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100}; +-USHORT RateIdTo500Kbps[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200}; +- +-UCHAR SsidIe = IE_SSID; +-UCHAR SupRateIe = IE_SUPP_RATES; +-UCHAR ExtRateIe = IE_EXT_SUPP_RATES; +-UCHAR HtCapIe = IE_HT_CAP; +-UCHAR AddHtInfoIe = IE_ADD_HT; +-UCHAR NewExtChanIe = IE_SECONDARY_CH_OFFSET; +-UCHAR ErpIe = IE_ERP; +-UCHAR DsIe = IE_DS_PARM; +-UCHAR TimIe = IE_TIM; +-UCHAR WpaIe = IE_WPA; +-UCHAR Wpa2Ie = IE_WPA2; +-UCHAR IbssIe = IE_IBSS_PARM; +- +-extern UCHAR WPA_OUI[]; +- +-UCHAR SES_OUI[] = {0x00, 0x90, 0x4c}; +- +-UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +- ++// this value, then it's quaranteed capable of operating in 36 mbps TX rate in ++// clean environment. ++// TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 ++CHAR RssiSafeLevelForTxRate[] = ++ { -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 }; ++ ++UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100 }; ++USHORT RateIdTo500Kbps[] = ++ { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200 }; ++ ++UCHAR SsidIe = IE_SSID; ++UCHAR SupRateIe = IE_SUPP_RATES; ++UCHAR ExtRateIe = IE_EXT_SUPP_RATES; ++UCHAR HtCapIe = IE_HT_CAP; ++UCHAR AddHtInfoIe = IE_ADD_HT; ++UCHAR NewExtChanIe = IE_SECONDARY_CH_OFFSET; ++UCHAR ErpIe = IE_ERP; ++UCHAR DsIe = IE_DS_PARM; ++UCHAR TimIe = IE_TIM; ++UCHAR WpaIe = IE_WPA; ++UCHAR Wpa2Ie = IE_WPA2; ++UCHAR IbssIe = IE_IBSS_PARM; ++ ++extern UCHAR WPA_OUI[]; ++ ++UCHAR SES_OUI[] = { 0x00, 0x90, 0x4c }; ++ ++UCHAR ZeroSsid[32] = ++ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00 ++}; + + /* + ========================================================================== +@@ -347,17 +356,15 @@ UCHAR ZeroSsid[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 + + ========================================================================== + */ +-NDIS_STATUS MlmeInit( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + { + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + + DBGPRINT(RT_DEBUG_TRACE, ("--> MLME Initialize\n")); + +- do +- { ++ do { + Status = MlmeQueueInit(&pAd->Mlme.Queue); +- if(Status != NDIS_STATUS_SUCCESS) ++ if (Status != NDIS_STATUS_SUCCESS) + break; + + pAd->Mlme.bRunning = FALSE; +@@ -367,48 +374,60 @@ NDIS_STATUS MlmeInit( + BssTableInit(&pAd->ScanTab); + + // init STA state machines +- AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, pAd->Mlme.AssocFunc); +- AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, pAd->Mlme.AuthFunc); +- AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, pAd->Mlme.AuthRspFunc); +- SyncStateMachineInit(pAd, &pAd->Mlme.SyncMachine, pAd->Mlme.SyncFunc); +- +- +- ++ AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, ++ pAd->Mlme.AssocFunc); ++ AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, ++ pAd->Mlme.AuthFunc); ++ AuthRspStateMachineInit(pAd, &pAd->Mlme.AuthRspMachine, ++ pAd->Mlme.AuthRspFunc); ++ SyncStateMachineInit(pAd, &pAd->Mlme.SyncMachine, ++ pAd->Mlme.SyncFunc); + + // Since we are using switch/case to implement it, the init is different from the above + // state machine init + MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL); + } + ++ WpaStateMachineInit(pAd, &pAd->Mlme.WpaMachine, ++ pAd->Mlme.WpaFunc); + +- WpaStateMachineInit(pAd, &pAd->Mlme.WpaMachine, pAd->Mlme.WpaFunc); +- +- +- ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, pAd->Mlme.ActFunc); ++ ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, ++ pAd->Mlme.ActFunc); + + // Init mlme periodic timer +- RTMPInitTimer(pAd, &pAd->Mlme.PeriodicTimer, GET_TIMER_FUNCTION(MlmePeriodicExec), pAd, TRUE); ++ RTMPInitTimer(pAd, &pAd->Mlme.PeriodicTimer, ++ GET_TIMER_FUNCTION(MlmePeriodicExec), pAd, TRUE); + + // Set mlme periodic timer + RTMPSetTimer(&pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV); + + // software-based RX Antenna diversity +- RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, ++ GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, ++ FALSE); + + { + #ifdef RTMP_PCI_SUPPORT +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- // only PCIe cards need these two timers +- RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, GET_TIMER_FUNCTION(PsPollWakeExec), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->Mlme.RadioOnOffTimer, GET_TIMER_FUNCTION(RadioOnExec), pAd, FALSE); +- } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ // only PCIe cards need these two timers ++ RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, ++ GET_TIMER_FUNCTION ++ (PsPollWakeExec), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->Mlme.RadioOnOffTimer, ++ GET_TIMER_FUNCTION(RadioOnExec), ++ pAd, FALSE); ++ } + #endif // RTMP_PCI_SUPPORT // + +- RTMPInitTimer(pAd, &pAd->Mlme.LinkDownTimer, GET_TIMER_FUNCTION(LinkDownExec), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->Mlme.LinkDownTimer, ++ GET_TIMER_FUNCTION(LinkDownExec), pAd, ++ FALSE); + + #ifdef RTMP_MAC_USB +- RTMPInitTimer(pAd, &pAd->Mlme.AutoWakeupTimer, GET_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->Mlme.AutoWakeupTimer, ++ GET_TIMER_FUNCTION ++ (RtmpUsbStaAsicForceWakeupTimeout), pAd, ++ FALSE); + pAd->Mlme.AutoWakeupTimerRunning = FALSE; + #endif // RTMP_MAC_USB // + } +@@ -434,43 +453,37 @@ NDIS_STATUS MlmeInit( + + ========================================================================== + */ +-VOID MlmeHandler( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + { +- MLME_QUEUE_ELEM *Elem = NULL; ++ MLME_QUEUE_ELEM *Elem = NULL; + + // Only accept MLME and Frame from peer side, no other (control/data) frame should + // get into this state machine + + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- if(pAd->Mlme.bRunning) +- { ++ if (pAd->Mlme.bRunning) { + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); + return; +- } +- else +- { ++ } else { + pAd->Mlme.bRunning = TRUE; + } + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); + +- while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) +- { ++ while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MLME_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Device Halted or Removed or MlmeRest, exit MlmeHandler! (queue num = %ld)\n", pAd->Mlme.Queue.Num)); ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) || ++ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Device Halted or Removed or MlmeRest, exit MlmeHandler! (queue num = %ld)\n", ++ pAd->Mlme.Queue.Num)); + break; + } +- + //From message type, determine which state machine I should drive +- if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) +- { ++ if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) { + #ifdef RTMP_MAC_USB +- if (Elem->MsgType == MT2_RESET_CONF) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("!!! reset MLME state machine !!!\n")); ++ if (Elem->MsgType == MT2_RESET_CONF) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("!!! reset MLME state machine !!!\n")); + MlmeRestartStateMachine(pAd); + Elem->Occupied = FALSE; + Elem->MsgLen = 0; +@@ -479,50 +492,63 @@ VOID MlmeHandler( + #endif // RTMP_MAC_USB // + + // if dequeue success +- switch (Elem->Machine) +- { ++ switch (Elem->Machine) { + // STA state machines +- case ASSOC_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem); +- break; +- case AUTH_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AuthMachine, Elem); +- break; +- case AUTH_RSP_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.AuthRspMachine, Elem); +- break; +- case SYNC_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.SyncMachine, Elem); +- break; +- case MLME_CNTL_STATE_MACHINE: +- MlmeCntlMachinePerformAction(pAd, &pAd->Mlme.CntlMachine, Elem); +- break; +- case WPA_PSK_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem); +- break; +- +- +- +- case ACTION_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.ActMachine, Elem); +- break; ++ case ASSOC_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme. ++ AssocMachine, Elem); ++ break; ++ case AUTH_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme. ++ AuthMachine, Elem); ++ break; ++ case AUTH_RSP_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme. ++ AuthRspMachine, Elem); ++ break; ++ case SYNC_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme. ++ SyncMachine, Elem); ++ break; ++ case MLME_CNTL_STATE_MACHINE: ++ MlmeCntlMachinePerformAction(pAd, ++ &pAd->Mlme. ++ CntlMachine, Elem); ++ break; ++ case WPA_PSK_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme. ++ WpaPskMachine, Elem); ++ break; + +- case WPA_STATE_MACHINE: +- StateMachinePerformAction(pAd, &pAd->Mlme.WpaMachine, Elem); +- break; ++ case ACTION_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme.ActMachine, ++ Elem); ++ break; + ++ case WPA_STATE_MACHINE: ++ StateMachinePerformAction(pAd, ++ &pAd->Mlme.WpaMachine, ++ Elem); ++ break; + +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("ERROR: Illegal machine %ld in MlmeHandler()\n", Elem->Machine)); +- break; +- } // end of switch ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ERROR: Illegal machine %ld in MlmeHandler()\n", ++ Elem->Machine)); ++ break; ++ } // end of switch + + // free MLME element + Elem->Occupied = FALSE; + Elem->MsgLen = 0; + +- } +- else { ++ } else { + DBGPRINT_ERR(("MlmeHandler: MlmeQueue empty\n")); + } + } +@@ -545,74 +571,67 @@ VOID MlmeHandler( + + ========================================================================== + */ +-VOID MlmeHalt( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + { +- BOOLEAN Cancelled; ++ BOOLEAN Cancelled; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeHalt\n")); + +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + // disable BEACON generation and other BEACON related hardware timers + AsicDisableSync(pAd); + } + + { + // Cancel pending timers +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- ++ RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); + + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) +- &&(pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); + } + #endif // RTMP_MAC_PCI // + +- RTMPCancelTimer(&pAd->Mlme.LinkDownTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.LinkDownTimer, &Cancelled); + + #ifdef RTMP_MAC_USB + RTMPCancelTimer(&pAd->Mlme.AutoWakeupTimer, &Cancelled); + #endif // RTMP_MAC_USB // + } + +- RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled); +- ++ RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled); + +- +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + + // Set LED + RTMPSetLED(pAd, LED_HALT); +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. ++ RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. + #ifdef RTMP_MAC_USB +- { +- LED_CFG_STRUC LedCfg; +- RTMP_IO_READ32(pAd, LED_CFG, &LedCfg.word); +- LedCfg.field.LedPolar = 0; +- LedCfg.field.RLedMode = 0; +- LedCfg.field.GLedMode = 0; +- LedCfg.field.YLedMode = 0; +- RTMP_IO_WRITE32(pAd, LED_CFG, LedCfg.word); +- } ++ { ++ LED_CFG_STRUC LedCfg; ++ RTMP_IO_READ32(pAd, LED_CFG, &LedCfg.word); ++ LedCfg.field.LedPolar = 0; ++ LedCfg.field.RLedMode = 0; ++ LedCfg.field.GLedMode = 0; ++ LedCfg.field.YLedMode = 0; ++ RTMP_IO_WRITE32(pAd, LED_CFG, LedCfg.word); ++ } + #endif // RTMP_MAC_USB // + + if (pChipOps->AsicHaltAction) + pChipOps->AsicHaltAction(pAd); + } + +- RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled ++ RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled + + MlmeQueueDestroy(&pAd->Mlme.Queue); + NdisFreeSpinLock(&pAd->Mlme.TaskLock); +@@ -620,10 +639,10 @@ VOID MlmeHalt( + DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeHalt\n")); + } + +-VOID MlmeResetRalinkCounters( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + { +- pAd->RalinkCounters.LastOneSecRxOkDataCnt = pAd->RalinkCounters.OneSecRxOkDataCnt; ++ pAd->RalinkCounters.LastOneSecRxOkDataCnt = ++ pAd->RalinkCounters.OneSecRxOkDataCnt; + // clear all OneSecxxx counters. + pAd->RalinkCounters.OneSecBeaconSentCnt = 0; + pAd->RalinkCounters.OneSecFalseCCACnt = 0; +@@ -653,7 +672,6 @@ VOID MlmeResetRalinkCounters( + return; + } + +- + /* + ========================================================================== + Description: +@@ -670,26 +688,25 @@ VOID MlmeResetRalinkCounters( + + ========================================================================== + */ +-#define ADHOC_BEACON_LOST_TIME (8*OS_HZ) // 8 sec +-VOID MlmePeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++#define ADHOC_BEACON_LOST_TIME (8*OS_HZ) // 8 sec ++VOID MlmePeriodicExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- ULONG TxTotalCnt; +- PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext; ++ ULONG TxTotalCnt; ++ PRTMP_ADAPTER pAd = (RTMP_ADAPTER *) FunctionContext; + + #ifdef RTMP_MAC_PCI + { +- // If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. ++ // If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. + // Move code to here, because following code will return when radio is off +- if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == 0) && (pAd->StaCfg.bHardwareRadio == TRUE) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) +- /*&&(pAd->bPCIclkOff == FALSE)*/) +- { +- UINT32 data = 0; ++ if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == ++ 0) && (pAd->StaCfg.bHardwareRadio == TRUE) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) ++ /*&&(pAd->bPCIclkOff == FALSE) */ ++ ) { ++ UINT32 data = 0; + + // Read GPIO pin2 as Hardware controlled radio state + #ifndef RT3090 +@@ -699,39 +716,34 @@ VOID MlmePeriodicExec( + #ifdef RT3090 + // Read GPIO pin2 as Hardware controlled radio state + // We need to Read GPIO if HW said so no mater what advance power saving +-if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) +- && (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) +- && (pAd->StaCfg.PSControl.field.EnablePSinIdle == TRUE)) +- { +- // Want to make sure device goes to L0 state before reading register. +- RTMPPCIeLinkCtrlValueRestore(pAd, 0); +- RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); +- RTMPPCIeLinkCtrlSetting(pAd, 3); +- } +-else +- RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); ++ if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) ++ && ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) ++ && (pAd->StaCfg.PSControl.field.EnablePSinIdle == ++ TRUE)) { ++ // Want to make sure device goes to L0 state before reading register. ++ RTMPPCIeLinkCtrlValueRestore(pAd, 0); ++ RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); ++ RTMPPCIeLinkCtrlSetting(pAd, 3); ++ } else ++ RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); + #endif // RT3090 // + //KH(PCIE PS):Added based on Jane--> + +- if (data & 0x04) +- { ++ if (data & 0x04) { + pAd->StaCfg.bHwRadio = TRUE; +- } +- else +- { ++ } else { + pAd->StaCfg.bHwRadio = FALSE; + } +- if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) +- { +- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio); +- if (pAd->StaCfg.bRadio == TRUE) +- { ++ if (pAd->StaCfg.bRadio != ++ (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio)) { ++ pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio ++ && pAd->StaCfg.bSwRadio); ++ if (pAd->StaCfg.bRadio == TRUE) { + MlmeRadioOn(pAd); + // Update extra information + pAd->ExtraInfo = EXTRA_INFO_CLEAR; +- } +- else +- { ++ } else { + MlmeRadioOff(pAd); + // Update extra information + pAd->ExtraInfo = HW_RADIO_OFF; +@@ -744,9 +756,9 @@ else + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RADIO_MEASUREMENT | +- fRTMP_ADAPTER_RESET_IN_PROGRESS)))) ++ fRTMP_ADAPTER_RADIO_OFF | ++ fRTMP_ADAPTER_RADIO_MEASUREMENT | ++ fRTMP_ADAPTER_RESET_IN_PROGRESS)))) + return; + + RTMP_MLME_PRE_SANITY_CHECK(pAd); +@@ -756,30 +768,26 @@ else + if (MONITOR_ON(pAd)) + return; + +- if (pAd->Mlme.PeriodicRound & 0x1) +- { ++ if (pAd->Mlme.PeriodicRound & 0x1) { + // This is the fix for wifi 11n extension channel overlapping test case. for 2860D + if (((pAd->MACVersion & 0xffff) == 0x0101) && +- (STA_TGN_WIFI_ON(pAd)) && +- (pAd->CommonCfg.IOTestParm.bToggle == FALSE)) +- +- { +- RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x24Bf); +- pAd->CommonCfg.IOTestParm.bToggle = TRUE; +- } +- else if ((STA_TGN_WIFI_ON(pAd)) && +- ((pAd->MACVersion & 0xffff) == 0x0101)) +- { +- RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x243f); +- pAd->CommonCfg.IOTestParm.bToggle = FALSE; +- } ++ (STA_TGN_WIFI_ON(pAd)) && ++ (pAd->CommonCfg.IOTestParm.bToggle == FALSE)) ++ { ++ RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x24Bf); ++ pAd->CommonCfg.IOTestParm.bToggle = TRUE; ++ } else if ((STA_TGN_WIFI_ON(pAd)) && ++ ((pAd->MACVersion & 0xffff) == 0x0101)) { ++ RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x243f); ++ pAd->CommonCfg.IOTestParm.bToggle = FALSE; ++ } + } + } + + pAd->bUpdateBcnCntDone = FALSE; + +-// RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); +- pAd->Mlme.PeriodicRound ++; ++// RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); ++ pAd->Mlme.PeriodicRound++; + + #ifdef RTMP_MAC_USB + // execute every 100ms, update the Tx FIFO Cnt for update Tx Rate. +@@ -787,40 +795,37 @@ else + #endif // RTMP_MAC_USB // + + // execute every 500ms +- if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd)/*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))*/) ++ if ((pAd->Mlme.PeriodicRound % 5 == 0) ++ && RTMPAutoRateSwitchCheck(pAd) ++ /*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) */ ) + { + // perform dynamic tx rate switching based on past TX history + { +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))) ++ if ((OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) ++ ) ++ && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))) + MlmeDynamicTxRateSwitching(pAd); + } + } +- + // Normal 1 second Mlme PeriodicExec. +- if (pAd->Mlme.PeriodicRound %MLME_TASK_EXEC_MULTIPLE == 0) +- { +- pAd->Mlme.OneSecPeriodicRound ++; +- +- +- ++ if (pAd->Mlme.PeriodicRound % MLME_TASK_EXEC_MULTIPLE == 0) { ++ pAd->Mlme.OneSecPeriodicRound++; + + //ORIBATimerTimeout(pAd); + + // Media status changed, report to NDIS +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) +- { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) { + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- pAd->IndicateMediaState = NdisMediaStateConnected; ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; + RTMP_IndicateMediaState(pAd); + +- } +- else +- { +- pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ } else { ++ pAd->IndicateMediaState = ++ NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); + } + } +@@ -835,42 +840,39 @@ else + RTUSBWatchDog(pAd); + #endif // RTMP_MAC_USB // + +- // Need statistics after read counter. So put after NICUpdateRawCounters ++ // Need statistics after read counter. So put after NICUpdateRawCounters + ORIBATimerTimeout(pAd); + + // if MGMT RING is full more than twice within 1 second, we consider there's + // a hardware problem stucking the TX path. In this case, try a hardware reset + // to recover the system +- // if (pAd->RalinkCounters.MgmtRingFullCount >= 2) +- // RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); +- // else +- // pAd->RalinkCounters.MgmtRingFullCount = 0; ++ // if (pAd->RalinkCounters.MgmtRingFullCount >= 2) ++ // RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); ++ // else ++ // pAd->RalinkCounters.MgmtRingFullCount = 0; + + // The time period for checking antenna is according to traffic + { +- if (pAd->Mlme.bEnableAutoAntennaCheck) +- { +- TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- // dynamic adjust antenna evaluation period according to the traffic +- if (TxTotalCnt > 50) +- { +- if (pAd->Mlme.OneSecPeriodicRound % 10 == 0) +- { +- AsicEvaluateRxAnt(pAd); +- } +- } +- else +- { +- if (pAd->Mlme.OneSecPeriodicRound % 3 == 0) +- { +- AsicEvaluateRxAnt(pAd); ++ if (pAd->Mlme.bEnableAutoAntennaCheck) { ++ TxTotalCnt = ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount + ++ pAd->RalinkCounters.OneSecTxRetryOkCount + ++ pAd->RalinkCounters.OneSecTxFailCount; ++ ++ // dynamic adjust antenna evaluation period according to the traffic ++ if (TxTotalCnt > 50) { ++ if (pAd->Mlme.OneSecPeriodicRound % ++ 10 == 0) { ++ AsicEvaluateRxAnt(pAd); ++ } ++ } else { ++ if (pAd->Mlme.OneSecPeriodicRound % 3 == ++ 0) { ++ AsicEvaluateRxAnt(pAd); ++ } + } + } + } +- } + + STAMlmePeriodicExec(pAd); + +@@ -878,7 +880,8 @@ else + + { + #ifdef RTMP_MAC_PCI +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->bPCIclkOff == FALSE)) ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) ++ && (pAd->bPCIclkOff == FALSE)) + #endif // RTMP_MAC_PCI // + { + // When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock +@@ -888,16 +891,18 @@ else + // 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred. + // 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again. + +- UINT32 MacReg = 0; ++ UINT32 MacReg = 0; + + RTMP_IO_READ32(pAd, 0x10F4, &MacReg); +- if (((MacReg & 0x20000000) && (MacReg & 0x80)) || ((MacReg & 0x20000000) && (MacReg & 0x20))) +- { ++ if (((MacReg & 0x20000000) && (MacReg & 0x80)) ++ || ((MacReg & 0x20000000) ++ && (MacReg & 0x20))) { + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); + RTMPusecDelay(1); + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0xC); + +- DBGPRINT(RT_DEBUG_WARN,("Warning, MAC specific condition occurs \n")); ++ DBGPRINT(RT_DEBUG_WARN, ++ ("Warning, MAC specific condition occurs \n")); + } + } + } +@@ -905,11 +910,9 @@ else + RTMP_MLME_HANDLER(pAd); + } + +- + pAd->bUpdateBcnCntDone = FALSE; + } + +- + /* + ========================================================================== + Validate SSID for connection try and rescan purpose +@@ -918,94 +921,72 @@ else + IRQL = DISPATCH_LEVEL + ========================================================================== + */ +-BOOLEAN MlmeValidateSSID( +- IN PUCHAR pSsid, +- IN UCHAR SsidLen) ++BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen) + { +- int index; ++ int index; + + if (SsidLen > MAX_LEN_OF_SSID) + return (FALSE); + + // Check each character value +- for (index = 0; index < SsidLen; index++) +- { ++ for (index = 0; index < SsidLen; index++) { + if (pSsid[index] < 0x20) + return (FALSE); +- } ++ } + + // All checked + return (TRUE); + } + +-VOID MlmeSelectTxRateTable( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR *ppTable, +- IN PUCHAR pTableSize, +- IN PUCHAR pInitTxRateIdx) ++VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR * ppTable, ++ IN PUCHAR pTableSize, IN PUCHAR pInitTxRateIdx) + { +- do +- { ++ do { + // decide the rate table for tuning +- if (pAd->CommonCfg.TxRateTableSize > 0) +- { ++ if (pAd->CommonCfg.TxRateTableSize > 0) { + *ppTable = RateSwitchTable; + *pTableSize = RateSwitchTable[0]; + *pInitTxRateIdx = RateSwitchTable[1]; + + break; +- } ++ } + +- if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd)) +- { +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +- (pEntry->HTCapability.MCSSet[0] == 0xff) && +- ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- {// 11N 1S Adhoc ++ if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd)) { ++ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) { // 11N 1S Adhoc + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; + *pInitTxRateIdx = RateSwitchTable11N1S[1]; + +- } +- else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && +- (pEntry->HTCapability.MCSSet[0] == 0xff) && +- (pEntry->HTCapability.MCSSet[1] == 0xff) && +- (pAd->Antenna.field.TxPath == 2)) +- {// 11N 2S Adhoc +- if (pAd->LatchRfRegs.Channel <= 14) +- { ++ } else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) { // 11N 2S Adhoc ++ if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } +- else +- { ++ *pInitTxRateIdx = ++ RateSwitchTable11N2S[1]; ++ } else { + *ppTable = RateSwitchTable11N2SForABand; +- *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- } ++ *pTableSize = ++ RateSwitchTable11N2SForABand[0]; ++ *pInitTxRateIdx = ++ RateSwitchTable11N2SForABand[1]; ++ } + +- } +- else +- if ((pEntry->RateLen == 4) +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +- ) +- { ++ } else if ((pEntry->RateLen == 4) ++ && (pEntry->HTCapability.MCSSet[0] == 0) ++ && (pEntry->HTCapability.MCSSet[1] == 0) ++ ) { + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; + *pInitTxRateIdx = RateSwitchTable11B[1]; + +- } +- else if (pAd->LatchRfRegs.Channel <= 14) +- { ++ } else if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11BG; + *pTableSize = RateSwitchTable11BG[0]; + *pInitTxRateIdx = RateSwitchTable11BG[1]; + +- } +- else +- { ++ } else { + *ppTable = RateSwitchTable11G; + *pTableSize = RateSwitchTable11G[0]; + *pInitTxRateIdx = RateSwitchTable11G[1]; +@@ -1013,99 +994,82 @@ VOID MlmeSelectTxRateTable( + } + break; + } +- + //if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && +- ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) +- {// 11BGN 1S AP ++ // ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { // 11BGN 1S AP + *ppTable = RateSwitchTable11BGN1S; + *pTableSize = RateSwitchTable11BGN1S[0]; + *pInitTxRateIdx = RateSwitchTable11BGN1S[1]; + + break; +- } +- ++ } + //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && +- (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) +- {// 11BGN 2S AP +- if (pAd->LatchRfRegs.Channel <= 14) +- { ++ // (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { // 11BGN 2S AP ++ if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11BGN2S; + *pTableSize = RateSwitchTable11BGN2S[0]; + *pInitTxRateIdx = RateSwitchTable11BGN2S[1]; + +- } +- else +- { ++ } else { + *ppTable = RateSwitchTable11BGN2SForABand; + *pTableSize = RateSwitchTable11BGN2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11BGN2SForABand[1]; ++ *pInitTxRateIdx = ++ RateSwitchTable11BGN2SForABand[1]; + + } + break; + } +- + //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) +- {// 11N 1S AP ++ if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { // 11N 1S AP + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; + *pInitTxRateIdx = RateSwitchTable11N1S[1]; + + break; + } +- + //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) +- {// 11N 2S AP +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- *ppTable = RateSwitchTable11N2S; +- *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- } +- else +- { ++ if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { // 11N 2S AP ++ if (pAd->LatchRfRegs.Channel <= 14) { ++ *ppTable = RateSwitchTable11N2S; ++ *pTableSize = RateSwitchTable11N2S[0]; ++ *pInitTxRateIdx = RateSwitchTable11N2S[1]; ++ } else { + *ppTable = RateSwitchTable11N2SForABand; + *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; ++ *pInitTxRateIdx = ++ RateSwitchTable11N2SForABand[1]; + } + + break; + } + //else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->RateLen == 4 || pAd->CommonCfg.PhyMode==PHY_11B) +- //Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode +- /* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)*/ +- ) +- {// B only AP ++ if ((pEntry->RateLen == 4 || pAd->CommonCfg.PhyMode == PHY_11B) ++ //Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode ++ /* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) */ ++ ) { // B only AP + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; + *pInitTxRateIdx = RateSwitchTable11B[1]; + + break; + } +- + //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) + if ((pEntry->RateLen > 8) +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +- ) +- {// B/G mixed AP ++ && (pEntry->HTCapability.MCSSet[0] == 0) ++ && (pEntry->HTCapability.MCSSet[1] == 0) ++ ) { // B/G mixed AP + *ppTable = RateSwitchTable11BG; + *pTableSize = RateSwitchTable11BG[0]; + *pInitTxRateIdx = RateSwitchTable11BG[1]; + + break; + } +- + //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) + if ((pEntry->RateLen == 8) +- && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) +- ) +- {// G only AP ++ && (pEntry->HTCapability.MCSSet[0] == 0) ++ && (pEntry->HTCapability.MCSSet[1] == 0) ++ ) { // G only AP + *ppTable = RateSwitchTable11G; + *pTableSize = RateSwitchTable11G[0]; + *pInitTxRateIdx = RateSwitchTable11G[1]; +@@ -1115,356 +1079,390 @@ VOID MlmeSelectTxRateTable( + + { + //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)) +- { // Legacy mode +- if (pAd->CommonCfg.MaxTxRate <= RATE_11) +- { ++ if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)) { // Legacy mode ++ if (pAd->CommonCfg.MaxTxRate <= RATE_11) { + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; + *pInitTxRateIdx = RateSwitchTable11B[1]; +- } +- else if ((pAd->CommonCfg.MaxTxRate > RATE_11) && (pAd->CommonCfg.MinTxRate > RATE_11)) +- { ++ } else if ((pAd->CommonCfg.MaxTxRate > RATE_11) ++ && (pAd->CommonCfg.MinTxRate > ++ RATE_11)) { + *ppTable = RateSwitchTable11G; + *pTableSize = RateSwitchTable11G[0]; + *pInitTxRateIdx = RateSwitchTable11G[1]; + +- } +- else +- { ++ } else { + *ppTable = RateSwitchTable11BG; + *pTableSize = RateSwitchTable11BG[0]; +- *pInitTxRateIdx = RateSwitchTable11BG[1]; ++ *pInitTxRateIdx = ++ RateSwitchTable11BG[1]; + } + break; + } +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- if (pAd->CommonCfg.TxStream == 1) +- { ++ if (pAd->LatchRfRegs.Channel <= 14) { ++ if (pAd->CommonCfg.TxStream == 1) { + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 1S AP \n")); +- } +- else +- { ++ *pInitTxRateIdx = ++ RateSwitchTable11N1S[1]; ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("DRS: unkown mode,default use 11N 1S AP \n")); ++ } else { + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; +- *pInitTxRateIdx = RateSwitchTable11N2S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n")); ++ *pInitTxRateIdx = ++ RateSwitchTable11N2S[1]; ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("DRS: unkown mode,default use 11N 2S AP \n")); + } +- } +- else +- { +- if (pAd->CommonCfg.TxStream == 1) +- { ++ } else { ++ if (pAd->CommonCfg.TxStream == 1) { + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; +- *pInitTxRateIdx = RateSwitchTable11N1S[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 1S AP \n")); +- } +- else +- { ++ *pInitTxRateIdx = ++ RateSwitchTable11N1S[1]; ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("DRS: unkown mode,default use 11N 1S AP \n")); ++ } else { + *ppTable = RateSwitchTable11N2SForABand; +- *pTableSize = RateSwitchTable11N2SForABand[0]; +- *pInitTxRateIdx = RateSwitchTable11N2SForABand[1]; +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n")); ++ *pTableSize = ++ RateSwitchTable11N2SForABand[0]; ++ *pInitTxRateIdx = ++ RateSwitchTable11N2SForABand[1]; ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("DRS: unkown mode,default use 11N 2S AP \n")); + } + } +- DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode (SupRateLen=%d, ExtRateLen=%d, MCSSet[0]=0x%x, MCSSet[1]=0x%x)\n", +- pAd->StaActive.SupRateLen, pAd->StaActive.ExtRateLen, pAd->StaActive.SupportedPhyInfo.MCSSet[0], pAd->StaActive.SupportedPhyInfo.MCSSet[1])); ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("DRS: unkown mode (SupRateLen=%d, ExtRateLen=%d, MCSSet[0]=0x%x, MCSSet[1]=0x%x)\n", ++ pAd->StaActive.SupRateLen, ++ pAd->StaActive.ExtRateLen, ++ pAd->StaActive.SupportedPhyInfo.MCSSet[0], ++ pAd->StaActive.SupportedPhyInfo. ++ MCSSet[1])); + } +- } while(FALSE); ++ } while (FALSE); + } + +- +-VOID STAMlmePeriodicExec( +- PRTMP_ADAPTER pAd) ++VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + { +- ULONG TxTotalCnt; +- int i; ++ ULONG TxTotalCnt; ++ int i; + + /* +- We return here in ATE mode, because the statistics +- that ATE need are not collected via this routine. +- */ ++ We return here in ATE mode, because the statistics ++ that ATE need are not collected via this routine. ++ */ + #if defined(RT305x)||defined(RT3070) + // request by Gary, if Rssi0 > -42, BBP 82 need to be changed from 0x62 to 0x42, , bbp 67 need to be changed from 0x20 to 0x18 +- if (!pAd->CommonCfg.HighPowerPatchDisabled) +- { ++ if (!pAd->CommonCfg.HighPowerPatchDisabled) { + #ifdef RT3070 +- if ( (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) ++ if ((IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) + #endif // RT3070 // +- { +- if ((pAd->StaCfg.RssiSample.AvgRssi0 != 0) && (pAd->StaCfg.RssiSample.AvgRssi0 > (pAd->BbpRssiToDbmDelta - 35))) +- { +- RT30xxWriteRFRegister(pAd, RF_R27, 0x20); +- } +- else +- { +- RT30xxWriteRFRegister(pAd, RF_R27, 0x23); +- } +- } ++ { ++ if ((pAd->StaCfg.RssiSample.AvgRssi0 != 0) ++ && (pAd->StaCfg.RssiSample.AvgRssi0 > ++ (pAd->BbpRssiToDbmDelta - 35))) { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x20); ++ } else { ++ RT30xxWriteRFRegister(pAd, RF_R27, 0x23); ++ } ++ } + } + #endif + #ifdef PCIE_PS_SUPPORT + // don't perform idle-power-save mechanism within 3 min after driver initialization. + // This can make rebooter test more robust +-if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) +- && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) +- && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s\n", __func__)); +- RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) ++ && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) ++ && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) { ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == ++ TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s\n", __func__)); ++ RT28xxPciAsicRadioOff(pAd, ++ GUI_IDLE_POWER_SAVE, ++ 0); ++ } else { ++ AsicSendCommandToMcu(pAd, 0x30, ++ PowerSafeCID, 0xff, ++ 0x2); ++ // Wait command success ++ AsicCheckCommanOk(pAd, PowerSafeCID); ++ RTMP_SET_FLAG(pAd, ++ fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM - rt30xx Issue Sleep command)\n")); + } +- else +- { +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x2); +- // Wait command success +- AsicCheckCommanOk(pAd, PowerSafeCID); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt30xx Issue Sleep command)\n")); ++ } else if (pAd->Mlme.OneSecPeriodicRound > 180) { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == ++ TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s\n", __func__)); ++ RT28xxPciAsicRadioOff(pAd, ++ GUI_IDLE_POWER_SAVE, ++ 0); ++ } else { ++ AsicSendCommandToMcu(pAd, 0x30, ++ PowerSafeCID, 0xff, ++ 0x02); ++ // Wait command success ++ AsicCheckCommanOk(pAd, PowerSafeCID); ++ RTMP_SET_FLAG(pAd, ++ fRTMP_ADAPTER_IDLE_RADIO_OFF); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM - rt28xx Issue Sleep command)\n")); + } + } +- else if (pAd->Mlme.OneSecPeriodicRound > 180) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s\n", __func__)); +- RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0); +- } +- else +- { +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x02); +- // Wait command success +- AsicCheckCommanOk(pAd, PowerSafeCID); +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - rt28xx Issue Sleep command)\n")); +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("STAMlmePeriodicExec MMCHK - CommonCfg.Ssid[%d]=%c%c%c%c... MlmeAux.Ssid[%d]=%c%c%c%c...\n", +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid[0], pAd->CommonCfg.Ssid[1], pAd->CommonCfg.Ssid[2], pAd->CommonCfg.Ssid[3], +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid[0], pAd->MlmeAux.Ssid[1], pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3])); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STAMlmePeriodicExec MMCHK - CommonCfg.Ssid[%d]=%c%c%c%c... MlmeAux.Ssid[%d]=%c%c%c%c...\n", ++ pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.Ssid[0], ++ pAd->CommonCfg.Ssid[1], ++ pAd->CommonCfg.Ssid[2], ++ pAd->CommonCfg.Ssid[3], pAd->MlmeAux.SsidLen, ++ pAd->MlmeAux.Ssid[0], pAd->MlmeAux.Ssid[1], ++ pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3])); + } + } + #endif // PCIE_PS_SUPPORT // + +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) +- { +- // WPA MIC error should block association attempt for 60 seconds ++ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) { ++ // WPA MIC error should block association attempt for 60 seconds + if (pAd->StaCfg.bBlockAssoc && +- RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastMicErrorTime + (60*OS_HZ))) +- pAd->StaCfg.bBlockAssoc = FALSE; +- } +- +- if ((pAd->PreMediaState != pAd->IndicateMediaState) && (pAd->CommonCfg.bWirelessEvent)) +- { +- if (pAd->IndicateMediaState == NdisMediaStateConnected) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ RTMP_TIME_AFTER(pAd->Mlme.Now32, ++ pAd->StaCfg.LastMicErrorTime + ++ (60 * OS_HZ))) ++ pAd->StaCfg.bBlockAssoc = FALSE; ++ } ++ ++ if ((pAd->PreMediaState != pAd->IndicateMediaState) ++ && (pAd->CommonCfg.bWirelessEvent)) { ++ if (pAd->IndicateMediaState == NdisMediaStateConnected) { ++ RTMPSendWirelessEvent(pAd, IW_STA_LINKUP_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); + } + pAd->PreMediaState = pAd->IndicateMediaState; + } + +- +- +- +- if (pAd->CommonCfg.PSPXlink && ADHOC_ON(pAd)) +- { +- } +- else +- { +- AsicStaBbpTuning(pAd); ++ if (pAd->CommonCfg.PSPXlink && ADHOC_ON(pAd)) { ++ } else { ++ AsicStaBbpTuning(pAd); + } + + TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; ++ pAd->RalinkCounters.OneSecTxRetryOkCount + ++ pAd->RalinkCounters.OneSecTxFailCount; + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + // update channel quality for Roaming and UI LinkQuality display + MlmeCalculateChannelQuality(pAd, NULL, pAd->Mlme.Now32); + } +- + // must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if + // Radio is currently in noisy environment + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- AsicAdjustTxPower(pAd); ++ AsicAdjustTxPower(pAd); + +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + + // Is PSM bit consistent with user power management policy? + // This is the only place that will set PSM bit ON. + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); ++ MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); + + pAd->RalinkCounters.LastOneSecTotalTxCount = TxTotalCnt; + +- if ((RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + (1*OS_HZ))) && +- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) && +- (((TxTotalCnt + pAd->RalinkCounters.OneSecRxOkCnt) < 600))) +- { ++ if ((RTMP_TIME_AFTER ++ (pAd->Mlme.Now32, ++ pAd->StaCfg.LastBeaconRxTime + (1 * OS_HZ))) ++ && ++ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ && ++ (((TxTotalCnt + pAd->RalinkCounters.OneSecRxOkCnt) < ++ 600))) { + RTMPSetAGCInitValue(pAd, BW_20); +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", (0x2E + GET_LNA_GAIN(pAd)))); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", ++ (0x2E + GET_LNA_GAIN(pAd)))); ++ } ++ //if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && ++ // (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) ++ { ++ if (pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm.bAPSDCapable) { ++ // When APSD is enabled, the period changes as 20 sec ++ if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) ++ RTMPSendNullFrame(pAd, ++ pAd->CommonCfg.TxRate, ++ TRUE); ++ } else { ++ // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) ++ if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) { ++ if (pAd->CommonCfg.bWmmCapable) ++ RTMPSendNullFrame(pAd, ++ pAd-> ++ CommonCfg. ++ TxRate, TRUE); ++ else ++ RTMPSendNullFrame(pAd, ++ pAd-> ++ CommonCfg. ++ TxRate, ++ FALSE); ++ } ++ } + } + +- //if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && +- // (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) +- { +- // When APSD is enabled, the period changes as 20 sec +- if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } +- else +- { +- // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) +- if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) +- { +- if (pAd->CommonCfg.bWmmCapable) +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- else +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +- } +- } +- } +- +- if (CQI_IS_DEAD(pAd->Mlme.ChannelQuality)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); ++ if (CQI_IS_DEAD(pAd->Mlme.ChannelQuality)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", ++ pAd->RalinkCounters.BadCQIAutoRecoveryCount)); + + // Lost AP, send disconnect & link down event + LinkDown(pAd, FALSE); + +- +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, ++ 0); + + // RTMPPatchMacBbpBug(pAd); + MlmeAutoReconnectLastSSID(pAd); +- } +- else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) +- { +- pAd->RalinkCounters.BadCQIAutoRecoveryCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Bad CQI. Auto Recovery attempt #%ld\n", pAd->RalinkCounters.BadCQIAutoRecoveryCount)); ++ } else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) { ++ pAd->RalinkCounters.BadCQIAutoRecoveryCount++; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - Bad CQI. Auto Recovery attempt #%ld\n", ++ pAd->RalinkCounters.BadCQIAutoRecoveryCount)); + MlmeAutoReconnectLastSSID(pAd); + } + +- if (pAd->StaCfg.bAutoRoaming) +- { +- BOOLEAN rv = FALSE; +- CHAR dBmToRoam = pAd->StaCfg.dBmToRoam; +- CHAR MaxRssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.LastRssi0, +- pAd->StaCfg.RssiSample.LastRssi1, +- pAd->StaCfg.RssiSample.LastRssi2); ++ if (pAd->StaCfg.bAutoRoaming) { ++ BOOLEAN rv = FALSE; ++ CHAR dBmToRoam = pAd->StaCfg.dBmToRoam; ++ CHAR MaxRssi = RTMPMaxRssi(pAd, ++ pAd->StaCfg.RssiSample. ++ LastRssi0, ++ pAd->StaCfg.RssiSample. ++ LastRssi1, ++ pAd->StaCfg.RssiSample. ++ LastRssi2); + + // Scanning, ignore Roaming +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) && +- (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) && +- (MaxRssi <= dBmToRoam)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, (CHAR)dBmToRoam)); +- ++ if (!RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) ++ && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) ++ && (MaxRssi <= dBmToRoam)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, ++ (CHAR) dBmToRoam)); + + // Add auto seamless roaming + if (rv == FALSE) + rv = MlmeCheckForFastRoaming(pAd); + +- if (rv == FALSE) +- { +- if ((pAd->StaCfg.LastScanTime + 10 * OS_HZ) < pAd->Mlme.Now32) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming, No eligable entry, try new scan!\n")); ++ if (rv == FALSE) { ++ if ((pAd->StaCfg.LastScanTime + ++ 10 * OS_HZ) < pAd->Mlme.Now32) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - Roaming, No eligable entry, try new scan!\n")); + pAd->StaCfg.ScanCnt = 2; +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; ++ pAd->StaCfg.LastScanTime = ++ pAd->Mlme.Now32; + MlmeAutoScan(pAd); ++ } ++ } + } +- } +- } + } +- } +- else if (ADHOC_ON(pAd)) +- { ++ } else if (ADHOC_ON(pAd)) { + // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState + // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can + // join later. +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- MLME_START_REQ_STRUCT StartReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); ++ if (RTMP_TIME_AFTER ++ (pAd->Mlme.Now32, ++ pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) ++ && OPSTATUS_TEST_FLAG(pAd, ++ fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ MLME_START_REQ_STRUCT StartReq; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); + LinkDown(pAd, FALSE); + +- StartParmFill(pAd, &StartReq, (CHAR *)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ StartParmFill(pAd, &StartReq, ++ (CHAR *) pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, ++ sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } + +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { ++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i]; + + if (pEntry->ValidAsCLI == FALSE) + continue; + +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME)) +- MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); ++ if (RTMP_TIME_AFTER ++ (pAd->Mlme.Now32, ++ pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME)) ++ MacTableDeleteEntry(pAd, pEntry->Aid, ++ pEntry->Addr); + } +- } +- else // no INFRA nor ADHOC connection ++ } else // no INFRA nor ADHOC connection + { + + if (pAd->StaCfg.bScanReqIsFromWebUI && +- RTMP_TIME_BEFORE(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (30 * OS_HZ))) ++ RTMP_TIME_BEFORE(pAd->Mlme.Now32, ++ pAd->StaCfg.LastScanTime + (30 * OS_HZ))) + goto SKIP_AUTO_SCAN_CONN; +- else +- pAd->StaCfg.bScanReqIsFromWebUI = FALSE; ++ else ++ pAd->StaCfg.bScanReqIsFromWebUI = FALSE; + + if ((pAd->StaCfg.bAutoReconnect == TRUE) +- && RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP) +- && (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { +- if ((pAd->ScanTab.BssNr==0) && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- if (RTMP_TIME_AFTER(pAd->Mlme.Now32, pAd->StaCfg.LastScanTime + (10 * OS_HZ))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("STAMlmePeriodicExec():CNTL - ScanTab.BssNr==0, start a new ACTIVE scan SSID[%s]\n", pAd->MlmeAux.AutoReconnectSsid)); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; ++ && RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP) ++ && ++ (MlmeValidateSSID ++ (pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) { ++ if ((pAd->ScanTab.BssNr == 0) ++ && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) { ++ MLME_SCAN_REQ_STRUCT ScanReq; ++ ++ if (RTMP_TIME_AFTER ++ (pAd->Mlme.Now32, ++ pAd->StaCfg.LastScanTime + (10 * OS_HZ))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STAMlmePeriodicExec():CNTL - ScanTab.BssNr==0, start a new ACTIVE scan SSID[%s]\n", ++ pAd->MlmeAux. ++ AutoReconnectSsid)); ++ ScanParmFill(pAd, &ScanReq, ++ (PSTRING) pAd->MlmeAux. ++ AutoReconnectSsid, ++ pAd->MlmeAux. ++ AutoReconnectSsidLen, ++ BSS_ANY, SCAN_ACTIVE); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, ++ MT2_MLME_SCAN_REQ, ++ sizeof ++ (MLME_SCAN_REQ_STRUCT), ++ &ScanReq); ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_OID_LIST_SCAN; + // Reset Missed scan number +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room ++ pAd->StaCfg.LastScanTime = ++ pAd->Mlme.Now32; ++ } else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room + MlmeAutoReconnectLastSSID(pAd); +- } +- else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) +- { ++ } else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { ++ if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) { + MlmeAutoScan(pAd); +- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32; +- } +- else +- { +- MlmeAutoReconnectLastSSID(pAd); ++ pAd->StaCfg.LastScanTime = ++ pAd->Mlme.Now32; ++ } else { ++ MlmeAutoReconnectLastSSID(pAd); + } + } + } +@@ -1472,86 +1470,81 @@ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + + SKIP_AUTO_SCAN_CONN: + +- if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE)) +- { ++ if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap != 0) ++ && (pAd->MacTab.fAnyBASession == FALSE)) { + pAd->MacTab.fAnyBASession = TRUE; +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, FALSE, FALSE); +- } +- else if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap ==0) && (pAd->MacTab.fAnyBASession == TRUE)) +- { ++ AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, FALSE, ++ FALSE); ++ } else if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap == 0) ++ && (pAd->MacTab.fAnyBASession == TRUE)) { + pAd->MacTab.fAnyBASession = FALSE; +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); + } + + return; + } + + // Link down report +-VOID LinkDownExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID LinkDownExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- if (pAd != NULL) +- { +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ if (pAd != NULL) { ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; + + if ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) && +- (INFRA_ON(pAd))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("LinkDownExec(): disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ (INFRA_ON(pAd))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("LinkDownExec(): disassociate with current AP...\n")); ++ DisassocParmFill(pAd, &DisassocReq, ++ pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), ++ &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + +- pAd->IndicateMediaState = NdisMediaStateDisconnected; +- RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ RTMP_IndicateMediaState(pAd); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; + } + } + } + + // IRQL = DISPATCH_LEVEL +-VOID MlmeAutoScan( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd) + { + // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { ++ if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { + DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Driver auto scan\n")); + MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID_LIST_SCAN, +- pAd->MlmeAux.AutoReconnectSsidLen, +- pAd->MlmeAux.AutoReconnectSsid); ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID_LIST_SCAN, ++ pAd->MlmeAux.AutoReconnectSsidLen, ++ pAd->MlmeAux.AutoReconnectSsid); + RTMP_MLME_HANDLER(pAd); + } + } + + // IRQL = DISPATCH_LEVEL +-VOID MlmeAutoReconnectLastSSID( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + { +- if (pAd->StaCfg.bAutoConnectByBssid) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_BSSID setting - %02X:%02X:%02X:%02X:%02X:%02X\n", +- pAd->MlmeAux.Bssid[0], +- pAd->MlmeAux.Bssid[1], +- pAd->MlmeAux.Bssid[2], +- pAd->MlmeAux.Bssid[3], +- pAd->MlmeAux.Bssid[4], +- pAd->MlmeAux.Bssid[5])); ++ if (pAd->StaCfg.bAutoConnectByBssid) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Driver auto reconnect to last OID_802_11_BSSID setting - %02X:%02X:%02X:%02X:%02X:%02X\n", ++ pAd->MlmeAux.Bssid[0], pAd->MlmeAux.Bssid[1], ++ pAd->MlmeAux.Bssid[2], pAd->MlmeAux.Bssid[3], ++ pAd->MlmeAux.Bssid[4], pAd->MlmeAux.Bssid[5])); + + pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; + MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_BSSID, +- MAC_ADDR_LEN, +- pAd->MlmeAux.Bssid); ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_BSSID, MAC_ADDR_LEN, pAd->MlmeAux.Bssid); + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +@@ -1559,23 +1552,24 @@ VOID MlmeAutoReconnectLastSSID( + } + // check CntlMachine.CurrState to avoid collision with NDIS SetOID request + else if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && +- (MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) +- { ++ (MlmeValidateSSID ++ (pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) { + NDIS_802_11_SSID OidSsid; + OidSsid.SsidLength = pAd->MlmeAux.AutoReconnectSsidLen; +- NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- +- DBGPRINT(RT_DEBUG_TRACE, ("Driver auto reconnect to last OID_802_11_SSID setting - %s, len - %d\n", pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen)); +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), +- &OidSsid); ++ NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Driver auto reconnect to last OID_802_11_SSID setting - %s, len - %d\n", ++ pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen)); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, OID_802_11_SSID, ++ sizeof(NDIS_802_11_SSID), &OidSsid); + RTMP_MLME_HANDLER(pAd); + } + } + +- + /* + ========================================================================== + Description: +@@ -1588,47 +1582,50 @@ VOID MlmeAutoReconnectLastSSID( + Output: + ========================================================================== + */ +-VOID MlmeCheckForRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32) ++VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + { +- USHORT i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; ++ USHORT i; ++ BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; ++ BSS_ENTRY *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForRoaming\n")); + // put all roaming candidates into RoamTab, and sort in RSSI order + BssTableInit(pRoamTab); +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { ++ for (i = 0; i < pAd->ScanTab.BssNr; i++) { + pBss = &pAd->ScanTab.BssEntry[i]; + +- if ((pBss->LastBeaconRxTime + pAd->StaCfg.BeaconLostTime) < Now32) +- continue; // AP disappear ++ if ((pBss->LastBeaconRxTime + pAd->StaCfg.BeaconLostTime) < ++ Now32) ++ continue; // AP disappear + if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING) +- continue; // RSSI too weak. forget it. ++ continue; // RSSI too weak. forget it. + if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP +- if (pBss->Rssi < (pAd->StaCfg.RssiSample.LastRssi0 + RSSI_DELTA)) +- continue; // only AP with stronger RSSI is eligible for roaming ++ continue; // skip current AP ++ if (pBss->Rssi < ++ (pAd->StaCfg.RssiSample.LastRssi0 + RSSI_DELTA)) ++ continue; // only AP with stronger RSSI is eligible for roaming + + // AP passing all above rules is put into roaming candidate table +- NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, ++ sizeof(BSS_ENTRY)); + pRoamTab->BssNr += 1; + } + +- if (pRoamTab->BssNr > 0) +- { ++ if (pRoamTab->BssNr > 0) { + // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- pAd->RalinkCounters.PoorCQIRoamingCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); ++ if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { ++ pAd->RalinkCounters.PoorCQIRoamingCount++; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - Roaming attempt #%ld\n", ++ pAd->RalinkCounters.PoorCQIRoamingCount)); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_MLME_ROAMING_REQ, 0, NULL); + RTMP_MLME_HANDLER(pAd); + } + } +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForRoaming(# of candidate= %d)\n",pRoamTab->BssNr)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<== MlmeCheckForRoaming(# of candidate= %d)\n", ++ pRoamTab->BssNr)); + } + + /* +@@ -1643,64 +1640,76 @@ VOID MlmeCheckForRoaming( + Output: + ========================================================================== + */ +-BOOLEAN MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd) ++BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + { +- USHORT i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; ++ USHORT i; ++ BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; ++ BSS_ENTRY *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForFastRoaming\n")); + // put all roaming candidates into RoamTab, and sort in RSSI order + BssTableInit(pRoamTab); +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { ++ for (i = 0; i < pAd->ScanTab.BssNr; i++) { + pBss = &pAd->ScanTab.BssEntry[i]; + +- if ((pBss->Rssi <= -50) && (pBss->Channel == pAd->CommonCfg.Channel)) +- continue; // RSSI too weak. forget it. ++ if ((pBss->Rssi <= -50) ++ && (pBss->Channel == pAd->CommonCfg.Channel)) ++ continue; // RSSI too weak. forget it. + if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP +- if (!SSID_EQUAL(pBss->Ssid, pBss->SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)) +- continue; // skip different SSID +- if (pBss->Rssi < (RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2) + RSSI_DELTA)) +- continue; // skip AP without better RSSI +- +- DBGPRINT(RT_DEBUG_TRACE, ("LastRssi0 = %d, pBss->Rssi = %d\n", RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2), pBss->Rssi)); ++ continue; // skip current AP ++ if (!SSID_EQUAL ++ (pBss->Ssid, pBss->SsidLen, pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.SsidLen)) ++ continue; // skip different SSID ++ if (pBss->Rssi < ++ (RTMPMaxRssi ++ (pAd, pAd->StaCfg.RssiSample.LastRssi0, ++ pAd->StaCfg.RssiSample.LastRssi1, ++ pAd->StaCfg.RssiSample.LastRssi2) + RSSI_DELTA)) ++ continue; // skip AP without better RSSI ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("LastRssi0 = %d, pBss->Rssi = %d\n", ++ RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, ++ pAd->StaCfg.RssiSample.LastRssi1, ++ pAd->StaCfg.RssiSample.LastRssi2), ++ pBss->Rssi)); + // AP passing all above rules is put into roaming candidate table +- NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, ++ sizeof(BSS_ENTRY)); + pRoamTab->BssNr += 1; +- } ++ } + +- DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); +- if (pRoamTab->BssNr > 0) +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); ++ if (pRoamTab->BssNr > 0) { + // check CntlMachine.CurrState to avoid collision with NDIS SetOID request +- if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) +- { +- pAd->RalinkCounters.PoorCQIRoamingCount ++; +- DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Roaming attempt #%ld\n", pAd->RalinkCounters.PoorCQIRoamingCount)); +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_MLME_ROAMING_REQ, 0, NULL); ++ if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { ++ pAd->RalinkCounters.PoorCQIRoamingCount++; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MMCHK - Roaming attempt #%ld\n", ++ pAd->RalinkCounters.PoorCQIRoamingCount)); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_MLME_ROAMING_REQ, 0, NULL); + RTMP_MLME_HANDLER(pAd); + return TRUE; +- } +- } ++ } ++ } + + return FALSE; + } + +-VOID MlmeSetTxRate( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PRTMP_TX_RATE_SWITCH pTxRate) ++VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate) + { +- UCHAR MaxMode = MODE_OFDM; ++ UCHAR MaxMode = MODE_OFDM; + + MaxMode = MODE_HTGREENFIELD; + +- if (pTxRate->STBC && (pAd->StaCfg.MaxHTPhyMode.field.STBC) && (pAd->Antenna.field.TxPath == 2)) ++ if (pTxRate->STBC && (pAd->StaCfg.MaxHTPhyMode.field.STBC) ++ && (pAd->Antenna.field.TxPath == 2)) + pAd->StaCfg.HTPhyMode.field.STBC = STBC_USE; +- else ++ else + pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; + + if (pTxRate->CurrMCS < MCS_AUTO) +@@ -1709,86 +1718,109 @@ VOID MlmeSetTxRate( + if (pAd->StaCfg.HTPhyMode.field.MCS > 7) + pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; + +- if (ADHOC_ON(pAd)) +- { ++ if (ADHOC_ON(pAd)) { + // If peer adhoc is b-only mode, we can't send 11g rate. + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- pEntry->HTPhyMode.field.STBC = STBC_NONE; ++ pEntry->HTPhyMode.field.STBC = STBC_NONE; + + // + // For Adhoc MODE_CCK, driver will use AdhocBOnlyJoined flag to roll back to B only if necessary + // +- pEntry->HTPhyMode.field.MODE = pTxRate->Mode; +- pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; ++ pEntry->HTPhyMode.field.MODE = pTxRate->Mode; ++ pEntry->HTPhyMode.field.ShortGI = ++ pAd->StaCfg.HTPhyMode.field.ShortGI; ++ pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + + // Patch speed error in status page + pAd->StaCfg.HTPhyMode.field.MODE = pEntry->HTPhyMode.field.MODE; +- } +- else +- { ++ } else { + if (pTxRate->Mode <= MaxMode) +- pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode; ++ pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode; + +- if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI)) ++ if (pTxRate->ShortGI ++ && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI)) + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_400; + else + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + + // Reexam each bandwidth's SGI support. +- if (pAd->StaCfg.HTPhyMode.field.ShortGI == GI_400) +- { +- if ((pEntry->HTPhyMode.field.BW == BW_20) && (!CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE))) ++ if (pAd->StaCfg.HTPhyMode.field.ShortGI == GI_400) { ++ if ((pEntry->HTPhyMode.field.BW == BW_20) ++ && ++ (!CLIENT_STATUS_TEST_FLAG ++ (pEntry, fCLIENT_STATUS_SGI20_CAPABLE))) + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; +- if ((pEntry->HTPhyMode.field.BW == BW_40) && (!CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE))) ++ if ((pEntry->HTPhyMode.field.BW == BW_40) ++ && ++ (!CLIENT_STATUS_TEST_FLAG ++ (pEntry, fCLIENT_STATUS_SGI40_CAPABLE))) + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + } +- +- // Turn RTS/CTS rate to 6Mbps. +- if ((pEntry->HTPhyMode.field.MCS == 0) && (pAd->StaCfg.HTPhyMode.field.MCS != 0)) +- { +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- if (pAd->MacTab.fAnyBASession) +- { +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- else +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- } +- else if ((pEntry->HTPhyMode.field.MCS == 8) && (pAd->StaCfg.HTPhyMode.field.MCS != 8)) +- { +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- if (pAd->MacTab.fAnyBASession) +- { +- AsicUpdateProtect(pAd, HT_FORCERTSCTS, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } +- else +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- } ++ // Turn RTS/CTS rate to 6Mbps. ++ if ((pEntry->HTPhyMode.field.MCS == 0) ++ && (pAd->StaCfg.HTPhyMode.field.MCS != 0)) { ++ pEntry->HTPhyMode.field.MCS = ++ pAd->StaCfg.HTPhyMode.field.MCS; ++ if (pAd->MacTab.fAnyBASession) { ++ AsicUpdateProtect(pAd, HT_FORCERTSCTS, ++ ALLN_SETPROTECT, TRUE, ++ (BOOLEAN) pAd->MlmeAux. ++ AddHtInfo.AddHtInfo2. ++ NonGfPresent); ++ } else { ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux.AddHtInfo. ++ AddHtInfo2.OperaionMode, ++ ALLN_SETPROTECT, TRUE, ++ (BOOLEAN) pAd->MlmeAux. ++ AddHtInfo.AddHtInfo2. ++ NonGfPresent); + } +- else if ((pEntry->HTPhyMode.field.MCS != 0) && (pAd->StaCfg.HTPhyMode.field.MCS == 0)) +- { +- AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); +- +- } +- else if ((pEntry->HTPhyMode.field.MCS != 8) && (pAd->StaCfg.HTPhyMode.field.MCS == 8)) +- { +- AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent); ++ } else if ((pEntry->HTPhyMode.field.MCS == 8) ++ && (pAd->StaCfg.HTPhyMode.field.MCS != 8)) { ++ pEntry->HTPhyMode.field.MCS = ++ pAd->StaCfg.HTPhyMode.field.MCS; ++ if (pAd->MacTab.fAnyBASession) { ++ AsicUpdateProtect(pAd, HT_FORCERTSCTS, ++ ALLN_SETPROTECT, TRUE, ++ (BOOLEAN) pAd->MlmeAux. ++ AddHtInfo.AddHtInfo2. ++ NonGfPresent); ++ } else { ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux.AddHtInfo. ++ AddHtInfo2.OperaionMode, ++ ALLN_SETPROTECT, TRUE, ++ (BOOLEAN) pAd->MlmeAux. ++ AddHtInfo.AddHtInfo2. ++ NonGfPresent); + } +- +- pEntry->HTPhyMode.field.STBC = pAd->StaCfg.HTPhyMode.field.STBC; +- pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) && +- pAd->WIFItestbed.bGreenField) +- pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; ++ } else if ((pEntry->HTPhyMode.field.MCS != 0) ++ && (pAd->StaCfg.HTPhyMode.field.MCS == 0)) { ++ AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, ++ TRUE, ++ (BOOLEAN) pAd->MlmeAux.AddHtInfo. ++ AddHtInfo2.NonGfPresent); ++ ++ } else if ((pEntry->HTPhyMode.field.MCS != 8) ++ && (pAd->StaCfg.HTPhyMode.field.MCS == 8)) { ++ AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, ++ TRUE, ++ (BOOLEAN) pAd->MlmeAux.AddHtInfo. ++ AddHtInfo2.NonGfPresent); + } + +- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); ++ pEntry->HTPhyMode.field.STBC = pAd->StaCfg.HTPhyMode.field.STBC; ++ pEntry->HTPhyMode.field.ShortGI = ++ pAd->StaCfg.HTPhyMode.field.ShortGI; ++ pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; ++ pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; ++ if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) ++ && pAd->WIFItestbed.bGreenField) ++ pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; ++ } ++ ++ pAd->LastTxRate = (USHORT) (pEntry->HTPhyMode.word); + } + + /* +@@ -1808,42 +1840,37 @@ VOID MlmeSetTxRate( + call this routine every second + ========================================================================== + */ +-VOID MlmeDynamicTxRateSwitching( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + { +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; +- ULONG i, AccuTxTotalCnt = 0, TxTotalCnt; +- ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; +- CHAR Rssi, RssiOffset = 0; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT0_STRUC TxStaCnt0; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; +- RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; +- ++ UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; ++ ULONG i, AccuTxTotalCnt = 0, TxTotalCnt; ++ ULONG TxErrorRatio = 0; ++ BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; ++ PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; ++ PUCHAR pTable; ++ UCHAR TableSize = 0; ++ UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; ++ CHAR Rssi, RssiOffset = 0; ++ TX_STA_CNT1_STRUC StaTx1; ++ TX_STA_CNT0_STRUC TxStaCnt0; ++ ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; ++ MAC_TABLE_ENTRY *pEntry; ++ RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; + + // + // walk through MAC table, see if need to change AP's TX rate toward each entry + // +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { ++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + pEntry = &pAd->MacTab.Content[i]; + +- // check if this entry need to switch rate automatically ++ // check if this entry need to switch rate automatically + if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) + continue; + +- if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls)) +- { ++ if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls)) { + Rssi = RTMPMaxRssi(pAd, +- pRssi->AvgRssi0, +- pRssi->AvgRssi1, +- pRssi->AvgRssi2); ++ pRssi->AvgRssi0, ++ pRssi->AvgRssi1, pRssi->AvgRssi2); + + // Update statistic counter + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +@@ -1854,55 +1881,63 @@ VOID MlmeDynamicTxRateSwitching( + TxFailCount = TxStaCnt0.field.TxFailCount; + TxTotalCnt = TxRetransmit + TxSuccess + TxFailCount; + +- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; ++ pAd->RalinkCounters.OneSecTxRetryOkCount += ++ StaTx1.field.TxRetransmit; ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount += ++ StaTx1.field.TxSuccess; ++ pAd->RalinkCounters.OneSecTxFailCount += ++ TxStaCnt0.field.TxFailCount; ++ pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += ++ StaTx1.field.TxSuccess; ++ pAd->WlanCounters.RetryCount.u.LowPart += ++ StaTx1.field.TxRetransmit; ++ pAd->WlanCounters.FailedCount.u.LowPart += ++ TxStaCnt0.field.TxFailCount; + + // if no traffic in the past 1-sec period, don't change TX rate, + // but clear all bad history. because the bad history may affect the next + // Chariot throughput test +- AccuTxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; ++ AccuTxTotalCnt = ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount + ++ pAd->RalinkCounters.OneSecTxRetryOkCount + ++ pAd->RalinkCounters.OneSecTxFailCount; + + if (TxTotalCnt) +- TxErrorRatio = ((TxRetransmit + TxFailCount) * 100) / TxTotalCnt; +- } +- else +- { ++ TxErrorRatio = ++ ((TxRetransmit + ++ TxFailCount) * 100) / TxTotalCnt; ++ } else { + if (INFRA_ON(pAd) && (i == 1)) + Rssi = RTMPMaxRssi(pAd, +- pRssi->AvgRssi0, +- pRssi->AvgRssi1, +- pRssi->AvgRssi2); ++ pRssi->AvgRssi0, ++ pRssi->AvgRssi1, ++ pRssi->AvgRssi2); + else + Rssi = RTMPMaxRssi(pAd, +- pEntry->RssiSample.AvgRssi0, +- pEntry->RssiSample.AvgRssi1, +- pEntry->RssiSample.AvgRssi2); ++ pEntry->RssiSample.AvgRssi0, ++ pEntry->RssiSample.AvgRssi1, ++ pEntry->RssiSample.AvgRssi2); + + TxTotalCnt = pEntry->OneSecTxNoRetryOkCount + +- pEntry->OneSecTxRetryOkCount + +- pEntry->OneSecTxFailCount; ++ pEntry->OneSecTxRetryOkCount + ++ pEntry->OneSecTxFailCount; + + if (TxTotalCnt) +- TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt; +- } ++ TxErrorRatio = ++ ((pEntry->OneSecTxRetryOkCount + ++ pEntry->OneSecTxFailCount) * 100) / ++ TxTotalCnt; ++ } + +- if (TxTotalCnt) +- { ++ if (TxTotalCnt) { + /* +- Three AdHoc connections can not work normally if one AdHoc connection is disappeared from a heavy traffic environment generated by ping tool +- We force to set LongRtyLimit and ShortRtyLimit to 0 to stop retransmitting packet, after a while, resoring original settings +- */ +- if (TxErrorRatio == 100) +- { +- TX_RTY_CFG_STRUC TxRtyCfg,TxRtyCfgtmp; +- ULONG Index; +- ULONG MACValue; ++ Three AdHoc connections can not work normally if one AdHoc connection is disappeared from a heavy traffic environment generated by ping tool ++ We force to set LongRtyLimit and ShortRtyLimit to 0 to stop retransmitting packet, after a while, resoring original settings ++ */ ++ if (TxErrorRatio == 100) { ++ TX_RTY_CFG_STRUC TxRtyCfg, TxRtyCfgtmp; ++ ULONG Index; ++ ULONG MACValue; + + RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); + TxRtyCfgtmp.word = TxRtyCfg.word; +@@ -1914,42 +1949,49 @@ VOID MlmeDynamicTxRateSwitching( + + Index = 0; + MACValue = 0; +- do +- { +- RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); ++ do { ++ RTMP_IO_READ32(pAd, TXRXQ_PCNT, ++ &MACValue); + if ((MACValue & 0xffffff) == 0) + break; + Index++; + RTMPusecDelay(1000); +- }while((Index < 330)&&(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))); ++ } while ((Index < 330) ++ && ++ (!RTMP_TEST_FLAG ++ (pAd, ++ fRTMP_ADAPTER_HALT_IN_PROGRESS))); + + RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); +- TxRtyCfg.field.LongRtyLimit = TxRtyCfgtmp.field.LongRtyLimit; +- TxRtyCfg.field.ShortRtyLimit = TxRtyCfgtmp.field.ShortRtyLimit; ++ TxRtyCfg.field.LongRtyLimit = ++ TxRtyCfgtmp.field.LongRtyLimit; ++ TxRtyCfg.field.ShortRtyLimit = ++ TxRtyCfgtmp.field.ShortRtyLimit; + RTMP_IO_WRITE32(pAd, TX_RTY_CFG, TxRtyCfg.word); ++ } + } +- } + + CurrRateIdx = pEntry->CurrTxRateIndex; + +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &InitTxRateIdx); ++ MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, ++ &InitTxRateIdx); + +- if (CurrRateIdx >= TableSize) +- { ++ if (CurrRateIdx >= TableSize) { + CurrRateIdx = TableSize - 1; + } +- + // When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex. + // So need to sync here. +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; ++ pCurrTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; + if ((pEntry->HTPhyMode.field.MCS != pCurrTxRate->CurrMCS) +- //&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- ) +- { ++ //&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) ++ ) { + + // Need to sync Real Tx rate and our record. + // Then return for next DRS. +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(InitTxRateIdx+1)*5]; ++ pCurrTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(InitTxRateIdx + 1) ++ * 5]; + pEntry->CurrTxRateIndex = InitTxRateIdx; + MlmeSetTxRate(pAd, pEntry, pCurrTxRate); + +@@ -1957,222 +1999,176 @@ VOID MlmeDynamicTxRateSwitching( + RESET_ONE_SEC_TX_CNT(pEntry); + continue; + } +- + // decide the next upgrade rate and downgrade rate, if any +- if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) +- { ++ if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) { + UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx -1; +- } +- else if (CurrRateIdx == 0) +- { ++ DownRateIdx = CurrRateIdx - 1; ++ } else if (CurrRateIdx == 0) { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx; +- } +- else if (CurrRateIdx == (TableSize - 1)) +- { ++ } else if (CurrRateIdx == (TableSize - 1)) { + UpRateIdx = CurrRateIdx; + DownRateIdx = CurrRateIdx - 1; +- } +- +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; ++ } + +- if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) +- { +- TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1)); +- TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1)); +- } +- else +- { +- TrainUp = pCurrTxRate->TrainUp; +- TrainDown = pCurrTxRate->TrainDown; +- } ++ pCurrTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; ++ ++ if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) { ++ TrainUp = ++ (pCurrTxRate->TrainUp + ++ (pCurrTxRate->TrainUp >> 1)); ++ TrainDown = ++ (pCurrTxRate->TrainDown + ++ (pCurrTxRate->TrainDown >> 1)); ++ } else { ++ TrainUp = pCurrTxRate->TrainUp; ++ TrainDown = pCurrTxRate->TrainDown; ++ } + + //pAd->DrsCounters.LastTimeTxRateChangeAction = pAd->DrsCounters.LastSecTxRateChangeAction; + + // + // Keep the last time TxRateChangeAction status. + // +- pEntry->LastTimeTxRateChangeAction = pEntry->LastSecTxRateChangeAction; +- +- ++ pEntry->LastTimeTxRateChangeAction = ++ pEntry->LastSecTxRateChangeAction; + + // + // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI + // (criteria copied from RT2500 for Netopia case) + // +- if (TxTotalCnt <= 15) +- { +- CHAR idx = 0; +- UCHAR TxRateIdx; +- UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = 0, MCS5 =0, MCS6 = 0, MCS7 = 0; +- UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; +- UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; // 3*3 ++ if (TxTotalCnt <= 15) { ++ CHAR idx = 0; ++ UCHAR TxRateIdx; ++ UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = ++ 0, MCS5 = 0, MCS6 = 0, MCS7 = 0; ++ UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; ++ UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; // 3*3 + + // check the existence and index of each needed MCS +- while (idx < pTable[0]) +- { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(idx+1)*5]; ++ while (idx < pTable[0]) { ++ pCurrTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(idx + 1) * ++ 5]; + +- if (pCurrTxRate->CurrMCS == MCS_0) +- { ++ if (pCurrTxRate->CurrMCS == MCS_0) { + MCS0 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_1) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_1) { + MCS1 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_2) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_2) { + MCS2 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_3) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_3) { + MCS3 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_4) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_4) { + MCS4 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_5) +- { +- MCS5 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_6) +- { +- MCS6 = idx; +- } ++ } else if (pCurrTxRate->CurrMCS == MCS_5) { ++ MCS5 = idx; ++ } else if (pCurrTxRate->CurrMCS == MCS_6) { ++ MCS6 = idx; ++ } + //else if (pCurrTxRate->CurrMCS == MCS_7) + else if ((pCurrTxRate->CurrMCS == MCS_7) && (pCurrTxRate->ShortGI == GI_800)) // prevent the highest MCS using short GI when 1T and low throughput +- { ++ { + MCS7 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_12) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_12) { + MCS12 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_13) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_13) { + MCS13 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_14) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_14) { + MCS14 = idx; +- } +- //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate ++ } ++ //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate + else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) //we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI +- { ++ { + MCS15 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_20) // 3*3 ++ } else if (pCurrTxRate->CurrMCS == MCS_20) // 3*3 + { + MCS20 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_21) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_21) { + MCS21 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_22) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_22) { + MCS22 = idx; +- } +- else if (pCurrTxRate->CurrMCS == MCS_23) +- { ++ } else if (pCurrTxRate->CurrMCS == MCS_23) { + MCS23 = idx; + } +- idx ++; ++ idx++; + } + +- if (pAd->LatchRfRegs.Channel <= 14) +- { +- if (pAd->NicConfig2.field.ExternalLNAForG) +- { ++ if (pAd->LatchRfRegs.Channel <= 14) { ++ if (pAd->NicConfig2.field.ExternalLNAForG) { + RssiOffset = 2; +- } +- else +- { ++ } else { + RssiOffset = 5; + } +- } +- else +- { +- if (pAd->NicConfig2.field.ExternalLNAForA) +- { ++ } else { ++ if (pAd->NicConfig2.field.ExternalLNAForA) { + RssiOffset = 5; +- } +- else +- { ++ } else { + RssiOffset = 8; + } + } + +- /*if (MCS15)*/ +- if ((pTable == RateSwitchTable11BGN3S) || +- (pTable == RateSwitchTable11N3S) || +- (pTable == RateSwitchTable)) +- {// N mode with 3 stream // 3*3 ++ /*if (MCS15) */ ++ if ((pTable == RateSwitchTable11BGN3S) || (pTable == RateSwitchTable11N3S) || (pTable == RateSwitchTable)) { // N mode with 3 stream // 3*3 + if (MCS23 && (Rssi >= -70)) + TxRateIdx = MCS23; + else if (MCS22 && (Rssi >= -72)) + TxRateIdx = MCS22; +- else if (MCS21 && (Rssi >= -76)) ++ else if (MCS21 && (Rssi >= -76)) + TxRateIdx = MCS21; + else if (MCS20 && (Rssi >= -78)) + TxRateIdx = MCS20; +- else if (MCS4 && (Rssi >= -82)) +- TxRateIdx = MCS4; +- else if (MCS3 && (Rssi >= -84)) +- TxRateIdx = MCS3; +- else if (MCS2 && (Rssi >= -86)) +- TxRateIdx = MCS2; +- else if (MCS1 && (Rssi >= -88)) +- TxRateIdx = MCS1; +- else +- TxRateIdx = MCS0; +- } +-// else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) +- else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand)) // 3*3 +- {// N mode with 2 stream +- if (MCS15 && (Rssi >= (-70+RssiOffset))) ++ else if (MCS4 && (Rssi >= -82)) ++ TxRateIdx = MCS4; ++ else if (MCS3 && (Rssi >= -84)) ++ TxRateIdx = MCS3; ++ else if (MCS2 && (Rssi >= -86)) ++ TxRateIdx = MCS2; ++ else if (MCS1 && (Rssi >= -88)) ++ TxRateIdx = MCS1; ++ else ++ TxRateIdx = MCS0; ++ } ++// else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) ++ else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) || (pTable == RateSwitchTable11N2S) || (pTable == RateSwitchTable11N2SForABand)) // 3*3 ++ { // N mode with 2 stream ++ if (MCS15 && (Rssi >= (-70 + RssiOffset))) + TxRateIdx = MCS15; +- else if (MCS14 && (Rssi >= (-72+RssiOffset))) ++ else if (MCS14 && (Rssi >= (-72 + RssiOffset))) + TxRateIdx = MCS14; +- else if (MCS13 && (Rssi >= (-76+RssiOffset))) ++ else if (MCS13 && (Rssi >= (-76 + RssiOffset))) + TxRateIdx = MCS13; +- else if (MCS12 && (Rssi >= (-78+RssiOffset))) ++ else if (MCS12 && (Rssi >= (-78 + RssiOffset))) + TxRateIdx = MCS12; +- else if (MCS4 && (Rssi >= (-82+RssiOffset))) ++ else if (MCS4 && (Rssi >= (-82 + RssiOffset))) + TxRateIdx = MCS4; +- else if (MCS3 && (Rssi >= (-84+RssiOffset))) ++ else if (MCS3 && (Rssi >= (-84 + RssiOffset))) + TxRateIdx = MCS3; +- else if (MCS2 && (Rssi >= (-86+RssiOffset))) ++ else if (MCS2 && (Rssi >= (-86 + RssiOffset))) + TxRateIdx = MCS2; +- else if (MCS1 && (Rssi >= (-88+RssiOffset))) ++ else if (MCS1 && (Rssi >= (-88 + RssiOffset))) + TxRateIdx = MCS1; + else + TxRateIdx = MCS0; +- } +- else if ((pTable == RateSwitchTable11BGN1S) || (pTable == RateSwitchTable11N1S)) +- {// N mode with 1 stream +- if (MCS7 && (Rssi > (-72+RssiOffset))) ++ } else if ((pTable == RateSwitchTable11BGN1S) || (pTable == RateSwitchTable11N1S)) { // N mode with 1 stream ++ if (MCS7 && (Rssi > (-72 + RssiOffset))) + TxRateIdx = MCS7; +- else if (MCS6 && (Rssi > (-74+RssiOffset))) ++ else if (MCS6 && (Rssi > (-74 + RssiOffset))) + TxRateIdx = MCS6; +- else if (MCS5 && (Rssi > (-77+RssiOffset))) ++ else if (MCS5 && (Rssi > (-77 + RssiOffset))) + TxRateIdx = MCS5; +- else if (MCS4 && (Rssi > (-79+RssiOffset))) ++ else if (MCS4 && (Rssi > (-79 + RssiOffset))) + TxRateIdx = MCS4; +- else if (MCS3 && (Rssi > (-81+RssiOffset))) ++ else if (MCS3 && (Rssi > (-81 + RssiOffset))) + TxRateIdx = MCS3; +- else if (MCS2 && (Rssi > (-83+RssiOffset))) ++ else if (MCS2 && (Rssi > (-83 + RssiOffset))) + TxRateIdx = MCS2; +- else if (MCS1 && (Rssi > (-86+RssiOffset))) ++ else if (MCS1 && (Rssi > (-86 + RssiOffset))) + TxRateIdx = MCS1; + else + TxRateIdx = MCS0; +- } +- else +- {// Legacy mode ++ } else { // Legacy mode + if (MCS7 && (Rssi > -70)) + TxRateIdx = MCS7; + else if (MCS6 && (Rssi > -74)) +@@ -2193,15 +2189,21 @@ VOID MlmeDynamicTxRateSwitching( + TxRateIdx = MCS0; + } + +- // if (TxRateIdx != pAd->CommonCfg.TxRateIndex) ++ // if (TxRateIdx != pAd->CommonCfg.TxRateIndex) + { + pEntry->CurrTxRateIndex = TxRateIdx; +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pEntry->CurrTxRateIndex+1)*5]; ++ pNextTxRate = ++ (PRTMP_TX_RATE_SWITCH) & ++ pTable[(pEntry->CurrTxRateIndex + 1) * 5]; + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } + +- NdisZeroMemory(pEntry->TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pEntry->PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pEntry->TxQuality, ++ sizeof(USHORT) * ++ MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pEntry->PER, ++ sizeof(UCHAR) * ++ MAX_STEP_OF_TX_RATE_SWITCH); + pEntry->fLastSecAccordingRSSI = TRUE; + // reset all OneSecTx counters + RESET_ONE_SEC_TX_CNT(pEntry); +@@ -2209,8 +2211,7 @@ VOID MlmeDynamicTxRateSwitching( + continue; + } + +- if (pEntry->fLastSecAccordingRSSI == TRUE) +- { ++ if (pEntry->fLastSecAccordingRSSI == TRUE) { + pEntry->fLastSecAccordingRSSI = FALSE; + pEntry->LastSecTxRateChangeAction = 0; + // reset all OneSecTx counters +@@ -2219,91 +2220,93 @@ VOID MlmeDynamicTxRateSwitching( + continue; + } + +- do +- { +- BOOLEAN bTrainUpDown = FALSE; ++ do { ++ BOOLEAN bTrainUpDown = FALSE; + +- pEntry->CurrTxRateStableTime ++; ++ pEntry->CurrTxRateStableTime++; + + // downgrade TX quality if PER >= Rate-Down threshold +- if (TxErrorRatio >= TrainDown) +- { ++ if (TxErrorRatio >= TrainDown) { + bTrainUpDown = TRUE; +- pEntry->TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; ++ pEntry->TxQuality[CurrRateIdx] = ++ DRS_TX_QUALITY_WORST_BOUND; + } + // upgrade TX quality if PER <= Rate-Up threshold +- else if (TxErrorRatio <= TrainUp) +- { ++ else if (TxErrorRatio <= TrainUp) { + bTrainUpDown = TRUE; + bUpgradeQuality = TRUE; + if (pEntry->TxQuality[CurrRateIdx]) +- pEntry->TxQuality[CurrRateIdx] --; // quality very good in CurrRate ++ pEntry->TxQuality[CurrRateIdx]--; // quality very good in CurrRate + + if (pEntry->TxRateUpPenalty) +- pEntry->TxRateUpPenalty --; ++ pEntry->TxRateUpPenalty--; + else if (pEntry->TxQuality[UpRateIdx]) +- pEntry->TxQuality[UpRateIdx] --; // may improve next UP rate's quality ++ pEntry->TxQuality[UpRateIdx]--; // may improve next UP rate's quality + } + +- pEntry->PER[CurrRateIdx] = (UCHAR)TxErrorRatio; ++ pEntry->PER[CurrRateIdx] = (UCHAR) TxErrorRatio; + +- if (bTrainUpDown) +- { ++ if (bTrainUpDown) { + // perform DRS - consider TxRate Down first, then rate up. +- if ((CurrRateIdx != DownRateIdx) && (pEntry->TxQuality[CurrRateIdx] >= DRS_TX_QUALITY_WORST_BOUND)) +- { ++ if ((CurrRateIdx != DownRateIdx) ++ && (pEntry->TxQuality[CurrRateIdx] >= ++ DRS_TX_QUALITY_WORST_BOUND)) { + pEntry->CurrTxRateIndex = DownRateIdx; +- } +- else if ((CurrRateIdx != UpRateIdx) && (pEntry->TxQuality[UpRateIdx] <= 0)) +- { ++ } else if ((CurrRateIdx != UpRateIdx) ++ && (pEntry->TxQuality[UpRateIdx] <= ++ 0)) { + pEntry->CurrTxRateIndex = UpRateIdx; + } + } + } while (FALSE); + + // if rate-up happen, clear all bad history of all TX rates +- if (pEntry->CurrTxRateIndex > CurrRateIdx) +- { ++ if (pEntry->CurrTxRateIndex > CurrRateIdx) { + pEntry->CurrTxRateStableTime = 0; + pEntry->TxRateUpPenalty = 0; +- pEntry->LastSecTxRateChangeAction = 1; // rate UP +- NdisZeroMemory(pEntry->TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pEntry->PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); ++ pEntry->LastSecTxRateChangeAction = 1; // rate UP ++ NdisZeroMemory(pEntry->TxQuality, ++ sizeof(USHORT) * ++ MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pEntry->PER, ++ sizeof(UCHAR) * ++ MAX_STEP_OF_TX_RATE_SWITCH); + + // + // For TxRate fast train up + // +- if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) +- { +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); ++ if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) { ++ RTMPSetTimer(&pAd->StaCfg. ++ StaQuickResponeForRateUpTimer, ++ 100); + +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE; ++ pAd->StaCfg. ++ StaQuickResponeForRateUpTimerRunning = TRUE; + } + bTxRateChanged = TRUE; + } + // if rate-down happen, only clear DownRate's bad history +- else if (pEntry->CurrTxRateIndex < CurrRateIdx) +- { ++ else if (pEntry->CurrTxRateIndex < CurrRateIdx) { + pEntry->CurrTxRateStableTime = 0; +- pEntry->TxRateUpPenalty = 0; // no penalty +- pEntry->LastSecTxRateChangeAction = 2; // rate DOWN ++ pEntry->TxRateUpPenalty = 0; // no penalty ++ pEntry->LastSecTxRateChangeAction = 2; // rate DOWN + pEntry->TxQuality[pEntry->CurrTxRateIndex] = 0; + pEntry->PER[pEntry->CurrTxRateIndex] = 0; + + // + // For TxRate fast train down + // +- if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) +- { +- RTMPSetTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, 100); ++ if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) { ++ RTMPSetTimer(&pAd->StaCfg. ++ StaQuickResponeForRateUpTimer, ++ 100); + +- pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE; ++ pAd->StaCfg. ++ StaQuickResponeForRateUpTimerRunning = TRUE; + } + bTxRateChanged = TRUE; +- } +- else +- { +- pEntry->LastSecTxRateChangeAction = 0; // rate no change ++ } else { ++ pEntry->LastSecTxRateChangeAction = 0; // rate no change + bTxRateChanged = FALSE; + } + +@@ -2312,21 +2315,28 @@ VOID MlmeDynamicTxRateSwitching( + UCHAR tmpTxRate; + + // to fix tcp ack issue +- if (!bTxRateChanged && (pAd->RalinkCounters.OneSecReceivedByteCount > (pAd->RalinkCounters.OneSecTransmittedByteCount * 5))) +- { ++ if (!bTxRateChanged ++ && (pAd->RalinkCounters.OneSecReceivedByteCount > ++ (pAd->RalinkCounters. ++ OneSecTransmittedByteCount * 5))) { + tmpTxRate = DownRateIdx; +- DBGPRINT_RAW(RT_DEBUG_TRACE,("DRS: Rx(%d) is 5 times larger than Tx(%d), use low rate (curr=%d, tmp=%d)\n", +- pAd->RalinkCounters.OneSecReceivedByteCount, pAd->RalinkCounters.OneSecTransmittedByteCount, pEntry->CurrTxRateIndex, tmpTxRate)); +- } +- else +- { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("DRS: Rx(%d) is 5 times larger than Tx(%d), use low rate (curr=%d, tmp=%d)\n", ++ pAd->RalinkCounters. ++ OneSecReceivedByteCount, ++ pAd->RalinkCounters. ++ OneSecTransmittedByteCount, ++ pEntry->CurrTxRateIndex, ++ tmpTxRate)); ++ } else { + tmpTxRate = pEntry->CurrTxRateIndex; + } + +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(tmpTxRate+1)*5]; ++ pNextTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(tmpTxRate + 1) * ++ 5]; + } +- if (bTxRateChanged && pNextTxRate) +- { ++ if (bTxRateChanged && pNextTxRate) { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } + // reset all OneSecTx counters +@@ -2350,35 +2360,33 @@ VOID MlmeDynamicTxRateSwitching( + + ======================================================================== + */ +-VOID StaQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)FunctionContext; +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; +- ULONG TxTotalCnt; +- ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT0_STRUC TxStaCnt0; +- CHAR Rssi, ratio; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; +- ULONG i; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; ++ UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; ++ ULONG TxTotalCnt; ++ ULONG TxErrorRatio = 0; ++ BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE; ++ PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; ++ PUCHAR pTable; ++ UCHAR TableSize = 0; ++ UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; ++ TX_STA_CNT1_STRUC StaTx1; ++ TX_STA_CNT0_STRUC TxStaCnt0; ++ CHAR Rssi, ratio; ++ ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; ++ MAC_TABLE_ENTRY *pEntry; ++ ULONG i; + + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; + +- // +- // walk through MAC table, see if need to change AP's TX rate toward each entry +- // +- for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) +- { ++ // ++ // walk through MAC table, see if need to change AP's TX rate toward each entry ++ // ++ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + pEntry = &pAd->MacTab.Content[i]; + + // check if this entry need to switch rate automatically +@@ -2387,51 +2395,48 @@ VOID StaQuickResponeForRateUpExec( + + if (INFRA_ON(pAd) && (i == 1)) + Rssi = RTMPMaxRssi(pAd, +- pAd->StaCfg.RssiSample.AvgRssi0, +- pAd->StaCfg.RssiSample.AvgRssi1, +- pAd->StaCfg.RssiSample.AvgRssi2); ++ pAd->StaCfg.RssiSample.AvgRssi0, ++ pAd->StaCfg.RssiSample.AvgRssi1, ++ pAd->StaCfg.RssiSample.AvgRssi2); + else + Rssi = RTMPMaxRssi(pAd, +- pEntry->RssiSample.AvgRssi0, +- pEntry->RssiSample.AvgRssi1, +- pEntry->RssiSample.AvgRssi2); ++ pEntry->RssiSample.AvgRssi0, ++ pEntry->RssiSample.AvgRssi1, ++ pEntry->RssiSample.AvgRssi2); + + CurrRateIdx = pAd->CommonCfg.TxRateIndex; + +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &InitTxRateIdx); ++ MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, ++ &InitTxRateIdx); + + // decide the next upgrade rate and downgrade rate, if any +- if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) +- { ++ if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) { + UpRateIdx = CurrRateIdx + 1; +- DownRateIdx = CurrRateIdx -1; +- } +- else if (CurrRateIdx == 0) +- { ++ DownRateIdx = CurrRateIdx - 1; ++ } else if (CurrRateIdx == 0) { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx; +- } +- else if (CurrRateIdx == (TableSize - 1)) +- { ++ } else if (CurrRateIdx == (TableSize - 1)) { + UpRateIdx = CurrRateIdx; + DownRateIdx = CurrRateIdx - 1; + } + +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5]; +- +- if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) +- { +- TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1)); +- TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1)); +- } +- else +- { +- TrainUp = pCurrTxRate->TrainUp; +- TrainDown = pCurrTxRate->TrainDown; ++ pCurrTxRate = ++ (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; ++ ++ if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) { ++ TrainUp = ++ (pCurrTxRate->TrainUp + ++ (pCurrTxRate->TrainUp >> 1)); ++ TrainDown = ++ (pCurrTxRate->TrainDown + ++ (pCurrTxRate->TrainDown >> 1)); ++ } else { ++ TrainUp = pCurrTxRate->TrainUp; ++ TrainDown = pCurrTxRate->TrainDown; + } + +- if (pAd->MacTab.Size == 1) +- { ++ if (pAd->MacTab.Size == 1) { + // Update statistic counter + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); +@@ -2441,52 +2446,64 @@ VOID StaQuickResponeForRateUpExec( + TxFailCount = TxStaCnt0.field.TxFailCount; + TxTotalCnt = TxRetransmit + TxSuccess + TxFailCount; + +- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; ++ pAd->RalinkCounters.OneSecTxRetryOkCount += ++ StaTx1.field.TxRetransmit; ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount += ++ StaTx1.field.TxSuccess; ++ pAd->RalinkCounters.OneSecTxFailCount += ++ TxStaCnt0.field.TxFailCount; ++ pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += ++ StaTx1.field.TxSuccess; ++ pAd->WlanCounters.RetryCount.u.LowPart += ++ StaTx1.field.TxRetransmit; ++ pAd->WlanCounters.FailedCount.u.LowPart += ++ TxStaCnt0.field.TxFailCount; + + if (TxTotalCnt) +- TxErrorRatio = ((TxRetransmit + TxFailCount) * 100) / TxTotalCnt; +- } +- else +- { ++ TxErrorRatio = ++ ((TxRetransmit + ++ TxFailCount) * 100) / TxTotalCnt; ++ } else { + TxTotalCnt = pEntry->OneSecTxNoRetryOkCount + +- pEntry->OneSecTxRetryOkCount + +- pEntry->OneSecTxFailCount; ++ pEntry->OneSecTxRetryOkCount + ++ pEntry->OneSecTxFailCount; + + if (TxTotalCnt) +- TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt; ++ TxErrorRatio = ++ ((pEntry->OneSecTxRetryOkCount + ++ pEntry->OneSecTxFailCount) * 100) / ++ TxTotalCnt; + } + +- + // + // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI + // (criteria copied from RT2500 for Netopia case) + // +- if (TxTotalCnt <= 12) +- { +- NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); +- +- if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) && (CurrRateIdx != DownRateIdx)) +- { ++ if (TxTotalCnt <= 12) { ++ NdisZeroMemory(pAd->DrsCounters.TxQuality, ++ sizeof(USHORT) * ++ MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pAd->DrsCounters.PER, ++ sizeof(UCHAR) * ++ MAX_STEP_OF_TX_RATE_SWITCH); ++ ++ if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) ++ && (CurrRateIdx != DownRateIdx)) { + pAd->CommonCfg.TxRateIndex = DownRateIdx; +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; +- } +- else if ((pAd->DrsCounters.LastSecTxRateChangeAction == 2) && (CurrRateIdx != UpRateIdx)) +- { ++ pAd->DrsCounters.TxQuality[CurrRateIdx] = ++ DRS_TX_QUALITY_WORST_BOUND; ++ } else ++ if ((pAd->DrsCounters.LastSecTxRateChangeAction == ++ 2) && (CurrRateIdx != UpRateIdx)) { + pAd->CommonCfg.TxRateIndex = UpRateIdx; + } + +- DBGPRINT_RAW(RT_DEBUG_TRACE,("QuickDRS: TxTotalCnt <= 15, train back to original rate \n")); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("QuickDRS: TxTotalCnt <= 15, train back to original rate \n")); + return; + } + +- do +- { ++ do { + ULONG OneSecTxNoRetryOKRationCount; + + if (pAd->DrsCounters.LastTimeTxRateChangeAction == 0) +@@ -2495,65 +2512,72 @@ VOID StaQuickResponeForRateUpExec( + ratio = 4; + + // downgrade TX quality if PER >= Rate-Down threshold +- if (TxErrorRatio >= TrainDown) +- { +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; ++ if (TxErrorRatio >= TrainDown) { ++ pAd->DrsCounters.TxQuality[CurrRateIdx] = ++ DRS_TX_QUALITY_WORST_BOUND; + } + +- pAd->DrsCounters.PER[CurrRateIdx] = (UCHAR)TxErrorRatio; ++ pAd->DrsCounters.PER[CurrRateIdx] = ++ (UCHAR) TxErrorRatio; + + OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); + + // perform DRS - consider TxRate Down first, then rate up. +- if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) && (CurrRateIdx != DownRateIdx)) +- { +- if ((pAd->DrsCounters.LastTxOkCount + 2) >= OneSecTxNoRetryOKRationCount) +- { +- pAd->CommonCfg.TxRateIndex = DownRateIdx; +- pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND; ++ if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) ++ && (CurrRateIdx != DownRateIdx)) { ++ if ((pAd->DrsCounters.LastTxOkCount + 2) >= ++ OneSecTxNoRetryOKRationCount) { ++ pAd->CommonCfg.TxRateIndex = ++ DownRateIdx; ++ pAd->DrsCounters. ++ TxQuality[CurrRateIdx] = ++ DRS_TX_QUALITY_WORST_BOUND; + + } + +- } +- else if ((pAd->DrsCounters.LastSecTxRateChangeAction == 2) && (CurrRateIdx != UpRateIdx)) +- { +- if ((TxErrorRatio >= 50) || (TxErrorRatio >= TrainDown)) +- { ++ } else ++ if ((pAd->DrsCounters.LastSecTxRateChangeAction == ++ 2) && (CurrRateIdx != UpRateIdx)) { ++ if ((TxErrorRatio >= 50) ++ || (TxErrorRatio >= TrainDown)) { + +- } +- else if ((pAd->DrsCounters.LastTxOkCount + 2) >= OneSecTxNoRetryOKRationCount) +- { ++ } else if ((pAd->DrsCounters.LastTxOkCount + 2) ++ >= OneSecTxNoRetryOKRationCount) { + pAd->CommonCfg.TxRateIndex = UpRateIdx; + } + } +- }while (FALSE); ++ } while (FALSE); + + // if rate-up happen, clear all bad history of all TX rates +- if (pAd->CommonCfg.TxRateIndex > CurrRateIdx) +- { ++ if (pAd->CommonCfg.TxRateIndex > CurrRateIdx) { + pAd->DrsCounters.TxRateUpPenalty = 0; +- NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH); +- NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pAd->DrsCounters.TxQuality, ++ sizeof(USHORT) * ++ MAX_STEP_OF_TX_RATE_SWITCH); ++ NdisZeroMemory(pAd->DrsCounters.PER, ++ sizeof(UCHAR) * ++ MAX_STEP_OF_TX_RATE_SWITCH); + bTxRateChanged = TRUE; + } + // if rate-down happen, only clear DownRate's bad history +- else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx) +- { +- DBGPRINT_RAW(RT_DEBUG_TRACE,("QuickDRS: --TX rate from %d to %d \n", CurrRateIdx, pAd->CommonCfg.TxRateIndex)); +- +- pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty +- pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = 0; ++ else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx) { ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("QuickDRS: --TX rate from %d to %d \n", ++ CurrRateIdx, pAd->CommonCfg.TxRateIndex)); ++ ++ pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty ++ pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = ++ 0; + pAd->DrsCounters.PER[pAd->CommonCfg.TxRateIndex] = 0; + bTxRateChanged = TRUE; +- } +- else +- { ++ } else { + bTxRateChanged = FALSE; + } + +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pAd->CommonCfg.TxRateIndex+1)*5]; +- if (bTxRateChanged && pNextTxRate) +- { ++ pNextTxRate = ++ (PRTMP_TX_RATE_SWITCH) & ++ pTable[(pAd->CommonCfg.TxRateIndex + 1) * 5]; ++ if (bTxRateChanged && pNextTxRate) { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } + } +@@ -2578,11 +2602,9 @@ VOID StaQuickResponeForRateUpExec( + + ========================================================================== + */ +-VOID MlmeCheckPsmChange( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32) ++VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + { +- ULONG PowerMode; ++ ULONG PowerMode; + + // condition - + // 1. Psm maybe ON only happen in INFRASTRUCTURE mode +@@ -2590,43 +2612,40 @@ VOID MlmeCheckPsmChange( + // 3. but current psm is not in PWR_SAVE + // 4. CNTL state machine is not doing SCANning + // 5. no TX SUCCESS event for the past 1-sec period +- PowerMode = pAd->StaCfg.WindowsPowerMode; ++ PowerMode = pAd->StaCfg.WindowsPowerMode; + + if (INFRA_ON(pAd) && +- (PowerMode != Ndis802_11PowerModeCAM) && +- (pAd->StaCfg.Psm == PWR_ACTIVE) && +-// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)&& +- RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP) +- /*&& +- (pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && +- (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)*/) +- { +- NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime); +- pAd->RalinkCounters.RxCountSinceLastNULL = 0; ++ (PowerMode != Ndis802_11PowerModeCAM) && ++ (pAd->StaCfg.Psm == PWR_ACTIVE) && ++// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && ++ RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP) ++ /*&& ++ (pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && ++ (pAd->RalinkCounters.OneSecTxRetryOkCount == 0) */ ++ ) { ++ NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime); ++ pAd->RalinkCounters.RxCountSinceLastNULL = 0; + RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- if (!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) +- { +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); +- } +- else +- { +- RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); +- } ++ if (! ++ (pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm.bAPSDCapable)) { ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE); ++ } else { ++ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE); + } ++ } + } + + // IRQL = PASSIVE_LEVEL + // IRQL = DISPATCH_LEVEL +-VOID MlmeSetPsmBit( +- IN PRTMP_ADAPTER pAd, +- IN USHORT psm) ++VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm) + { + AUTO_RSP_CFG_STRUC csr4; + + pAd->StaCfg.Psm = psm; + RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); +- csr4.field.AckCtsPsmBit = (psm == PWR_SAVE)? 1:0; ++ csr4.field.AckCtsPsmBit = (psm == PWR_SAVE) ? 1 : 0; + RTMP_IO_WRITE32(pAd, AUTO_RSP_CFG, csr4.word); + + DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetPsmBit = %d\n", psm)); +@@ -2651,29 +2670,26 @@ VOID MlmeSetPsmBit( + channel quality based on the most up-to-date information + ========================================================================== + */ +-VOID MlmeCalculateChannelQuality( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, +- IN ULONG Now32) ++VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, IN ULONG Now32) + { + ULONG TxOkCnt, TxCnt, TxPER, TxPRR; + ULONG RxCnt, RxPER; + UCHAR NorRssi; +- CHAR MaxRssi; ++ CHAR MaxRssi; + RSSI_SAMPLE *pRssiSample = NULL; + UINT32 OneSecTxNoRetryOkCount = 0; + UINT32 OneSecTxRetryOkCount = 0; + UINT32 OneSecTxFailCount = 0; + UINT32 OneSecRxOkCnt = 0; + UINT32 OneSecRxFcsErrCnt = 0; +- ULONG ChannelQuality = 0; // 0..100, Channel Quality Indication for Roaming ++ ULONG ChannelQuality = 0; // 0..100, Channel Quality Indication for Roaming + ULONG BeaconLostTime = pAd->StaCfg.BeaconLostTime; + +- +- if (pAd->OpMode == OPMODE_STA) +- { ++ if (pAd->OpMode == OPMODE_STA) { + pRssiSample = &pAd->StaCfg.RssiSample; +- OneSecTxNoRetryOkCount = pAd->RalinkCounters.OneSecTxNoRetryOkCount; ++ OneSecTxNoRetryOkCount = ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount; + OneSecTxRetryOkCount = pAd->RalinkCounters.OneSecTxRetryOkCount; + OneSecTxFailCount = pAd->RalinkCounters.OneSecTxFailCount; + OneSecRxOkCnt = pAd->RalinkCounters.OneSecRxOkCnt; +@@ -2681,21 +2697,17 @@ VOID MlmeCalculateChannelQuality( + } + + MaxRssi = RTMPMaxRssi(pAd, pRssiSample->LastRssi0, +- pRssiSample->LastRssi1, +- pRssiSample->LastRssi2); ++ pRssiSample->LastRssi1, pRssiSample->LastRssi2); + + // + // calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics + // + TxOkCnt = OneSecTxNoRetryOkCount + OneSecTxRetryOkCount; + TxCnt = TxOkCnt + OneSecTxFailCount; +- if (TxCnt < 5) +- { ++ if (TxCnt < 5) { + TxPER = 0; + TxPRR = 0; +- } +- else +- { ++ } else { + TxPER = (OneSecTxFailCount * 100) / TxCnt; + TxPRR = ((TxCnt - OneSecTxNoRetryOkCount) * 100) / TxCnt; + } +@@ -2712,16 +2724,13 @@ VOID MlmeCalculateChannelQuality( + // + // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER + // +- if ((pAd->OpMode == OPMODE_STA) && +- INFRA_ON(pAd) && +- (OneSecTxNoRetryOkCount < 2) && // no heavy traffic +- ((pAd->StaCfg.LastBeaconRxTime + BeaconLostTime) < Now32)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", BeaconLostTime, TxOkCnt)); ++ if ((pAd->OpMode == OPMODE_STA) && INFRA_ON(pAd) && (OneSecTxNoRetryOkCount < 2) && // no heavy traffic ++ ((pAd->StaCfg.LastBeaconRxTime + BeaconLostTime) < Now32)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", ++ BeaconLostTime, TxOkCnt)); + ChannelQuality = 0; +- } +- else +- { ++ } else { + // Normalize Rssi + if (MaxRssi > -40) + NorRssi = 100; +@@ -2730,24 +2739,20 @@ VOID MlmeCalculateChannelQuality( + else + NorRssi = (MaxRssi + 90) * 2; + +- // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) ++ // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) + ChannelQuality = (RSSI_WEIGHTING * NorRssi + +- TX_WEIGHTING * (100 - TxPRR) + +- RX_WEIGHTING* (100 - RxPER)) / 100; ++ TX_WEIGHTING * (100 - TxPRR) + ++ RX_WEIGHTING * (100 - RxPER)) / 100; + } + +- + if (pAd->OpMode == OPMODE_STA) +- pAd->Mlme.ChannelQuality = (ChannelQuality > 100) ? 100 : ChannelQuality; +- ++ pAd->Mlme.ChannelQuality = ++ (ChannelQuality > 100) ? 100 : ChannelQuality; + + } + +- + // IRQL = DISPATCH_LEVEL +-VOID MlmeSetTxPreamble( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TxPreamble) ++VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) + { + AUTO_RSP_CFG_STRUC csr4; + +@@ -2758,16 +2763,15 @@ VOID MlmeSetTxPreamble( + //TxPreamble = Rt802_11PreambleLong; + + RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); +- if (TxPreamble == Rt802_11PreambleLong) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetTxPreamble (= LONG PREAMBLE)\n")); ++ if (TxPreamble == Rt802_11PreambleLong) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeSetTxPreamble (= LONG PREAMBLE)\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + csr4.field.AutoResponderPreamble = 0; +- } +- else +- { ++ } else { + // NOTE: 1Mbps should always use long preamble +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetTxPreamble (= SHORT PREAMBLE)\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeSetTxPreamble (= SHORT PREAMBLE)\n")); + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + csr4.field.AutoResponderPreamble = 1; + } +@@ -2782,64 +2786,53 @@ VOID MlmeSetTxPreamble( + ========================================================================== + */ + +-VOID UpdateBasicRateBitmap( +- IN PRTMP_ADAPTER pAdapter) ++VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + { +- INT i, j; +- /* 1 2 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ +- UCHAR rate[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; +- UCHAR *sup_p = pAdapter->CommonCfg.SupRate; +- UCHAR *ext_p = pAdapter->CommonCfg.ExtRate; +- ULONG bitmap = pAdapter->CommonCfg.BasicRateBitmap; +- +- +- /* if A mode, always use fix BasicRateBitMap */ +- //if (pAdapter->CommonCfg.Channel == PHY_11A) ++ INT i, j; ++ /* 1 2 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ ++ UCHAR rate[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; ++ UCHAR *sup_p = pAdapter->CommonCfg.SupRate; ++ UCHAR *ext_p = pAdapter->CommonCfg.ExtRate; ++ ULONG bitmap = pAdapter->CommonCfg.BasicRateBitmap; ++ ++ /* if A mode, always use fix BasicRateBitMap */ ++ //if (pAdapter->CommonCfg.Channel == PHY_11A) + if (pAdapter->CommonCfg.Channel > 14) +- pAdapter->CommonCfg.BasicRateBitmap = 0x150; /* 6, 12, 24M */ +- /* End of if */ +- +- if (pAdapter->CommonCfg.BasicRateBitmap > 4095) +- { +- /* (2 ^ MAX_LEN_OF_SUPPORTED_RATES) -1 */ +- return; +- } /* End of if */ +- +- for(i=0; iCommonCfg.BasicRateBitmap = 0x150; /* 6, 12, 24M */ ++ /* End of if */ ++ ++ if (pAdapter->CommonCfg.BasicRateBitmap > 4095) { ++ /* (2 ^ MAX_LEN_OF_SUPPORTED_RATES) -1 */ ++ return; ++ } ++ /* End of if */ ++ for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) { ++ sup_p[i] &= 0x7f; ++ ext_p[i] &= 0x7f; ++ } /* End of for */ ++ ++ for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) { ++ if (bitmap & (1 << i)) { ++ for (j = 0; j < MAX_LEN_OF_SUPPORTED_RATES; j++) { ++ if (sup_p[j] == rate[i]) ++ sup_p[j] |= 0x80; ++ /* End of if */ ++ } /* End of for */ ++ ++ for (j = 0; j < MAX_LEN_OF_SUPPORTED_RATES; j++) { ++ if (ext_p[j] == rate[i]) ++ ext_p[j] |= 0x80; ++ /* End of if */ ++ } /* End of for */ ++ } /* End of if */ ++ } /* End of for */ ++} /* End of UpdateBasicRateBitmap */ + + // IRQL = PASSIVE_LEVEL + // IRQL = DISPATCH_LEVEL + // bLinkUp is to identify the inital link speed. + // TRUE indicates the rate update at linkup, we should not try to set the rate at 54Mbps. +-VOID MlmeUpdateTxRates( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bLinkUp, +- IN UCHAR apidx) ++VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + { + int i, num; + UCHAR Rate = RATE_6, MaxDesire = RATE_1, MaxSupport = RATE_1; +@@ -2847,52 +2840,86 @@ VOID MlmeUpdateTxRates( + ULONG BasicRateBitmap = 0; + UCHAR CurrBasicRate = RATE_1; + UCHAR *pSupRate, SupRateLen, *pExtRate, ExtRateLen; +- PHTTRANSMIT_SETTING pHtPhy = NULL; +- PHTTRANSMIT_SETTING pMaxHtPhy = NULL; +- PHTTRANSMIT_SETTING pMinHtPhy = NULL; +- BOOLEAN *auto_rate_cur_p; +- UCHAR HtMcs = MCS_AUTO; ++ PHTTRANSMIT_SETTING pHtPhy = NULL; ++ PHTTRANSMIT_SETTING pMaxHtPhy = NULL; ++ PHTTRANSMIT_SETTING pMinHtPhy = NULL; ++ BOOLEAN *auto_rate_cur_p; ++ UCHAR HtMcs = MCS_AUTO; + + // find max desired rate + UpdateBasicRateBitmap(pAd); + + num = 0; + auto_rate_cur_p = NULL; +- for (i=0; iCommonCfg.DesireRate[i] & 0x7f) +- { +- case 2: Rate = RATE_1; num++; break; +- case 4: Rate = RATE_2; num++; break; +- case 11: Rate = RATE_5_5; num++; break; +- case 22: Rate = RATE_11; num++; break; +- case 12: Rate = RATE_6; num++; break; +- case 18: Rate = RATE_9; num++; break; +- case 24: Rate = RATE_12; num++; break; +- case 36: Rate = RATE_18; num++; break; +- case 48: Rate = RATE_24; num++; break; +- case 72: Rate = RATE_36; num++; break; +- case 96: Rate = RATE_48; num++; break; +- case 108: Rate = RATE_54; num++; break; ++ for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) { ++ switch (pAd->CommonCfg.DesireRate[i] & 0x7f) { ++ case 2: ++ Rate = RATE_1; ++ num++; ++ break; ++ case 4: ++ Rate = RATE_2; ++ num++; ++ break; ++ case 11: ++ Rate = RATE_5_5; ++ num++; ++ break; ++ case 22: ++ Rate = RATE_11; ++ num++; ++ break; ++ case 12: ++ Rate = RATE_6; ++ num++; ++ break; ++ case 18: ++ Rate = RATE_9; ++ num++; ++ break; ++ case 24: ++ Rate = RATE_12; ++ num++; ++ break; ++ case 36: ++ Rate = RATE_18; ++ num++; ++ break; ++ case 48: ++ Rate = RATE_24; ++ num++; ++ break; ++ case 72: ++ Rate = RATE_36; ++ num++; ++ break; ++ case 96: ++ Rate = RATE_48; ++ num++; ++ break; ++ case 108: ++ Rate = RATE_54; ++ num++; ++ break; + //default: Rate = RATE_1; break; + } +- if (MaxDesire < Rate) MaxDesire = Rate; ++ if (MaxDesire < Rate) ++ MaxDesire = Rate; + } + + //=========================================================================== + //=========================================================================== + { +- pHtPhy = &pAd->StaCfg.HTPhyMode; +- pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; +- pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; ++ pHtPhy = &pAd->StaCfg.HTPhyMode; ++ pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; ++ pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; + + auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch; +- HtMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS; ++ HtMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS; + + if ((pAd->StaCfg.BssType == BSS_ADHOC) && +- (pAd->CommonCfg.PhyMode == PHY_11B) && +- (MaxDesire > RATE_11)) +- { ++ (pAd->CommonCfg.PhyMode == PHY_11B) && ++ (MaxDesire > RATE_11)) { + MaxDesire = RATE_11; + } + } +@@ -2904,41 +2931,32 @@ VOID MlmeUpdateTxRates( + + // Auto rate switching is enabled only if more than one DESIRED RATES are + // specified; otherwise disabled +- if (num <= 1) +- { ++ if (num <= 1) { + //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; ++ //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; + *auto_rate_cur_p = FALSE; +- } +- else +- { ++ } else { + //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; ++ //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; + *auto_rate_cur_p = TRUE; + } + +- if (HtMcs != MCS_AUTO) +- { ++ if (HtMcs != MCS_AUTO) { + //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; ++ //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; + *auto_rate_cur_p = FALSE; +- } +- else +- { ++ } else { + //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; ++ //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; + *auto_rate_cur_p = TRUE; + } + +- if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) +- { ++ if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) { + pSupRate = &pAd->StaActive.SupRate[0]; + pExtRate = &pAd->StaActive.ExtRate[0]; + SupRateLen = pAd->StaActive.SupRateLen; + ExtRateLen = pAd->StaActive.ExtRateLen; +- } +- else +- { ++ } else { + pSupRate = &pAd->CommonCfg.SupRate[0]; + pExtRate = &pAd->CommonCfg.ExtRate[0]; + SupRateLen = pAd->CommonCfg.SupRateLen; +@@ -2946,50 +2964,144 @@ VOID MlmeUpdateTxRates( + } + + // find max supported rate +- for (i=0; i Rate) MinSupport = Rate; ++ if (MinSupport > Rate) ++ MinSupport = Rate; + } + +- for (i=0; i Rate) MinSupport = Rate; ++ if (MinSupport > Rate) ++ MinSupport = Rate; + } + + RTMP_IO_WRITE32(pAd, LEGACY_BASIC_RATE, BasicRateBitmap); +@@ -2999,14 +3111,15 @@ VOID MlmeUpdateTxRates( + + // calculate the exptected ACK rate for each TX rate. This info is used to caculate + // the DURATION field of outgoing uniicast DATA/MGMT frame +- for (i=0; iCommonCfg.ExpectedACKRate[i] = CurrBasicRate; + } + +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateTxRates[MaxSupport = %d] = MaxDesire %d Mbps\n", RateIdToMbps[MaxSupport], RateIdToMbps[MaxDesire])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeUpdateTxRates[MaxSupport = %d] = MaxDesire %d Mbps\n", ++ RateIdToMbps[MaxSupport], RateIdToMbps[MaxDesire])); + // max tx rate = min {max desire rate, max supported rate} + if (MaxSupport < MaxDesire) + pAd->CommonCfg.MaxTxRate = MaxSupport; +@@ -3017,13 +3130,12 @@ VOID MlmeUpdateTxRates( + // 2003-07-31 john - 2500 doesn't have good sensitivity at high OFDM rates. to increase the success + // ratio of initial DHCP packet exchange, TX rate starts from a lower rate depending + // on average RSSI +- // 1. RSSI >= -70db, start at 54 Mbps (short distance) +- // 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) +- // 3. -75 > RSSI, start at 11 Mbps (long distance) ++ // 1. RSSI >= -70db, start at 54 Mbps (short distance) ++ // 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) ++ // 3. -75 > RSSI, start at 11 Mbps (long distance) + //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)/* && +- // OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)*/) +- if (*auto_rate_cur_p) +- { ++ // OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)*/) ++ if (*auto_rate_cur_p) { + short dbm = 0; + + dbm = pAd->StaCfg.RssiSample.AvgRssi0 - pAd->BbpRssiToDbmDelta; +@@ -3043,113 +3155,132 @@ VOID MlmeUpdateTxRates( + pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; + + pAd->CommonCfg.TxRateIndex = 0; +- } +- else +- { ++ } else { + pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; +- pHtPhy->field.MCS = (pAd->CommonCfg.MaxTxRate > 3) ? (pAd->CommonCfg.MaxTxRate - 4) : pAd->CommonCfg.MaxTxRate; +- pHtPhy->field.MODE = (pAd->CommonCfg.MaxTxRate > 3) ? MODE_OFDM : MODE_CCK; +- +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC = pHtPhy->field.STBC; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI = pHtPhy->field.ShortGI; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS = pHtPhy->field.MCS; +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE = pHtPhy->field.MODE; +- } +- +- if (pAd->CommonCfg.TxRate <= RATE_11) +- { ++ pHtPhy->field.MCS = ++ (pAd->CommonCfg.MaxTxRate > ++ 3) ? (pAd->CommonCfg.MaxTxRate - ++ 4) : pAd->CommonCfg.MaxTxRate; ++ pHtPhy->field.MODE = ++ (pAd->CommonCfg.MaxTxRate > 3) ? MODE_OFDM : MODE_CCK; ++ ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.STBC = ++ pHtPhy->field.STBC; ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.ShortGI = ++ pHtPhy->field.ShortGI; ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MCS = ++ pHtPhy->field.MCS; ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE = ++ pHtPhy->field.MODE; ++ } ++ ++ if (pAd->CommonCfg.TxRate <= RATE_11) { + pMaxHtPhy->field.MODE = MODE_CCK; + pMaxHtPhy->field.MCS = pAd->CommonCfg.TxRate; + pMinHtPhy->field.MCS = pAd->CommonCfg.MinTxRate; +- } +- else +- { ++ } else { + pMaxHtPhy->field.MODE = MODE_OFDM; + pMaxHtPhy->field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.TxRate]; +- if (pAd->CommonCfg.MinTxRate >= RATE_6 && (pAd->CommonCfg.MinTxRate <= RATE_54)) +- {pMinHtPhy->field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MinTxRate];} +- else +- {pMinHtPhy->field.MCS = pAd->CommonCfg.MinTxRate;} ++ if (pAd->CommonCfg.MinTxRate >= RATE_6 ++ && (pAd->CommonCfg.MinTxRate <= RATE_54)) { ++ pMinHtPhy->field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MinTxRate]; ++ } else { ++ pMinHtPhy->field.MCS = pAd->CommonCfg.MinTxRate; ++ } + } + + pHtPhy->word = (pMaxHtPhy->word); +- if (bLinkUp && (pAd->OpMode == OPMODE_STA)) +- { +- pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word = pHtPhy->word; +- pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word = pMaxHtPhy->word; +- pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word = pMinHtPhy->word; +- } +- else +- { +- switch (pAd->CommonCfg.PhyMode) +- { +- case PHY_11BG_MIXED: +- case PHY_11B: +- case PHY_11BGN_MIXED: +- pAd->CommonCfg.MlmeRate = RATE_1; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; ++ if (bLinkUp && (pAd->OpMode == OPMODE_STA)) { ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word = pHtPhy->word; ++ pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word = ++ pMaxHtPhy->word; ++ pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word = ++ pMinHtPhy->word; ++ } else { ++ switch (pAd->CommonCfg.PhyMode) { ++ case PHY_11BG_MIXED: ++ case PHY_11B: ++ case PHY_11BGN_MIXED: ++ pAd->CommonCfg.MlmeRate = RATE_1; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; ++ pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; + +-//#ifdef WIFI_TEST +- pAd->CommonCfg.RtsRate = RATE_11; ++//#ifdef WIFI_TEST ++ pAd->CommonCfg.RtsRate = RATE_11; + //#else +-// pAd->CommonCfg.RtsRate = RATE_1; ++// pAd->CommonCfg.RtsRate = RATE_1; + //#endif +- break; +- case PHY_11G: +- case PHY_11A: +- case PHY_11AGN_MIXED: +- case PHY_11GN_MIXED: +- case PHY_11N_2_4G: +- case PHY_11AN_MIXED: +- case PHY_11N_5G: ++ break; ++ case PHY_11G: ++ case PHY_11A: ++ case PHY_11AGN_MIXED: ++ case PHY_11GN_MIXED: ++ case PHY_11N_2_4G: ++ case PHY_11AN_MIXED: ++ case PHY_11N_5G: ++ pAd->CommonCfg.MlmeRate = RATE_6; ++ pAd->CommonCfg.RtsRate = RATE_6; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; ++ pAd->CommonCfg.MlmeTransmit.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ break; ++ case PHY_11ABG_MIXED: ++ case PHY_11ABGN_MIXED: ++ if (pAd->CommonCfg.Channel <= 14) { ++ pAd->CommonCfg.MlmeRate = RATE_1; ++ pAd->CommonCfg.RtsRate = RATE_1; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = ++ MODE_CCK; ++ pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; ++ } else { + pAd->CommonCfg.MlmeRate = RATE_6; + pAd->CommonCfg.RtsRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- break; +- case PHY_11ABG_MIXED: +- case PHY_11ABGN_MIXED: +- if (pAd->CommonCfg.Channel <= 14) +- { +- pAd->CommonCfg.MlmeRate = RATE_1; +- pAd->CommonCfg.RtsRate = RATE_1; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; +- } +- else +- { +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.RtsRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- break; +- default: // error +- pAd->CommonCfg.MlmeRate = RATE_6; +- pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->CommonCfg.RtsRate = RATE_1; +- break; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = ++ MODE_OFDM; ++ pAd->CommonCfg.MlmeTransmit.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ } ++ break; ++ default: // error ++ pAd->CommonCfg.MlmeRate = RATE_6; ++ pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; ++ pAd->CommonCfg.MlmeTransmit.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ pAd->CommonCfg.RtsRate = RATE_1; ++ break; + } + // + // Keep Basic Mlme Rate. + // +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.word = pAd->CommonCfg.MlmeTransmit.word; ++ pAd->MacTab.Content[MCAST_WCID].HTPhyMode.word = ++ pAd->CommonCfg.MlmeTransmit.word; + if (pAd->CommonCfg.MlmeTransmit.field.MODE == MODE_OFDM) +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[RATE_24]; ++ pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[RATE_24]; + else +- pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = RATE_1; ++ pAd->MacTab.Content[MCAST_WCID].HTPhyMode.field.MCS = ++ RATE_1; + pAd->CommonCfg.BasicMlmeRate = pAd->CommonCfg.MlmeRate; + } + +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, MinRate=%d, Rate Switching =%d)\n", +- RateIdToMbps[MaxDesire], RateIdToMbps[MaxSupport], RateIdToMbps[pAd->CommonCfg.MaxTxRate], RateIdToMbps[pAd->CommonCfg.MinTxRate], +- /*OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)*/*auto_rate_cur_p)); +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04lx)\n", +- RateIdToMbps[pAd->CommonCfg.TxRate], RateIdToMbps[pAd->CommonCfg.RtsRate], BasicRateBitmap)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateTxRates (MlmeTransmit=0x%x, MinHTPhyMode=%x, MaxHTPhyMode=0x%x, HTPhyMode=0x%x)\n", +- pAd->CommonCfg.MlmeTransmit.word, pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word )); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" MlmeUpdateTxRates (MaxDesire=%d, MaxSupport=%d, MaxTxRate=%d, MinRate=%d, Rate Switching =%d)\n", ++ RateIdToMbps[MaxDesire], RateIdToMbps[MaxSupport], ++ RateIdToMbps[pAd->CommonCfg.MaxTxRate], ++ RateIdToMbps[pAd->CommonCfg.MinTxRate], ++ /*OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) */ ++ *auto_rate_cur_p)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" MlmeUpdateTxRates (TxRate=%d, RtsRate=%d, BasicRateBitmap=0x%04lx)\n", ++ RateIdToMbps[pAd->CommonCfg.TxRate], ++ RateIdToMbps[pAd->CommonCfg.RtsRate], BasicRateBitmap)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeUpdateTxRates (MlmeTransmit=0x%x, MinHTPhyMode=%x, MaxHTPhyMode=0x%x, HTPhyMode=0x%x)\n", ++ pAd->CommonCfg.MlmeTransmit.word, ++ pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word, ++ pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word, ++ pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word)); + } + + /* +@@ -3164,59 +3295,60 @@ VOID MlmeUpdateTxRates( + + ========================================================================== + */ +-VOID MlmeUpdateHtTxRates( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx) ++VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + { +- UCHAR StbcMcs; //j, StbcMcs, bitmask; +- CHAR i; // 3*3 +- RT_HT_CAPABILITY *pRtHtCap = NULL; +- RT_HT_PHY_INFO *pActiveHtPhy = NULL; +- ULONG BasicMCS; ++ UCHAR StbcMcs; //j, StbcMcs, bitmask; ++ CHAR i; // 3*3 ++ RT_HT_CAPABILITY *pRtHtCap = NULL; ++ RT_HT_PHY_INFO *pActiveHtPhy = NULL; ++ ULONG BasicMCS; + UCHAR j, bitmask; +- PRT_HT_PHY_INFO pDesireHtPhy = NULL; +- PHTTRANSMIT_SETTING pHtPhy = NULL; +- PHTTRANSMIT_SETTING pMaxHtPhy = NULL; +- PHTTRANSMIT_SETTING pMinHtPhy = NULL; +- BOOLEAN *auto_rate_cur_p; ++ PRT_HT_PHY_INFO pDesireHtPhy = NULL; ++ PHTTRANSMIT_SETTING pHtPhy = NULL; ++ PHTTRANSMIT_SETTING pMaxHtPhy = NULL; ++ PHTTRANSMIT_SETTING pMinHtPhy = NULL; ++ BOOLEAN *auto_rate_cur_p; + +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates===> \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateHtTxRates===> \n")); + + auto_rate_cur_p = NULL; + + { +- pDesireHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; +- pActiveHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; +- pHtPhy = &pAd->StaCfg.HTPhyMode; +- pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; +- pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; ++ pDesireHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; ++ pActiveHtPhy = &pAd->StaCfg.DesiredHtPhyInfo; ++ pHtPhy = &pAd->StaCfg.HTPhyMode; ++ pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; ++ pMinHtPhy = &pAd->StaCfg.MinHTPhyMode; + + auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch; + } + +- if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) +- { ++ if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) { + if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) + return; + + pRtHtCap = &pAd->StaActive.SupportedHtPhy; + pActiveHtPhy = &pAd->StaActive.SupportedPhyInfo; +- StbcMcs = (UCHAR)pAd->MlmeAux.AddHtInfo.AddHtInfo3.StbcMcs; +- BasicMCS =pAd->MlmeAux.AddHtInfo.MCSSet[0]+(pAd->MlmeAux.AddHtInfo.MCSSet[1]<<8)+(StbcMcs<<16); +- if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) && (pAd->Antenna.field.TxPath == 2)) ++ StbcMcs = (UCHAR) pAd->MlmeAux.AddHtInfo.AddHtInfo3.StbcMcs; ++ BasicMCS = ++ pAd->MlmeAux.AddHtInfo.MCSSet[0] + ++ (pAd->MlmeAux.AddHtInfo.MCSSet[1] << 8) + (StbcMcs << 16); ++ if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) ++ && (pAd->Antenna.field.TxPath == 2)) + pMaxHtPhy->field.STBC = STBC_USE; + else + pMaxHtPhy->field.STBC = STBC_NONE; +- } +- else +- { ++ } else { + if (pDesireHtPhy->bHtEnable == FALSE) + return; + + pRtHtCap = &pAd->CommonCfg.DesiredHtPhy; +- StbcMcs = (UCHAR)pAd->CommonCfg.AddHTInfo.AddHtInfo3.StbcMcs; +- BasicMCS = pAd->CommonCfg.AddHTInfo.MCSSet[0]+(pAd->CommonCfg.AddHTInfo.MCSSet[1]<<8)+(StbcMcs<<16); +- if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) && (pAd->Antenna.field.TxPath == 2)) ++ StbcMcs = (UCHAR) pAd->CommonCfg.AddHTInfo.AddHtInfo3.StbcMcs; ++ BasicMCS = ++ pAd->CommonCfg.AddHTInfo.MCSSet[0] + ++ (pAd->CommonCfg.AddHTInfo.MCSSet[1] << 8) + (StbcMcs << 16); ++ if ((pAd->CommonCfg.DesiredHtPhy.TxSTBC) && (pRtHtCap->RxSTBC) ++ && (pAd->Antenna.field.TxPath == 2)) + pMaxHtPhy->field.STBC = STBC_USE; + else + pMaxHtPhy->field.STBC = STBC_NONE; +@@ -3228,33 +3360,37 @@ VOID MlmeUpdateHtTxRates( + else + pMaxHtPhy->field.MODE = MODE_HTMIX; + +- if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && (pRtHtCap->ChannelWidth)) ++ if ((pAd->CommonCfg.DesiredHtPhy.ChannelWidth) ++ && (pRtHtCap->ChannelWidth)) + pMaxHtPhy->field.BW = BW_40; + else + pMaxHtPhy->field.BW = BW_20; + +- if (pMaxHtPhy->field.BW == BW_20) +- pMaxHtPhy->field.ShortGI = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 & pRtHtCap->ShortGIfor20); ++ if (pMaxHtPhy->field.BW == BW_20) ++ pMaxHtPhy->field.ShortGI = ++ (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20 & pRtHtCap-> ++ ShortGIfor20); + else +- pMaxHtPhy->field.ShortGI = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 & pRtHtCap->ShortGIfor40); ++ pMaxHtPhy->field.ShortGI = ++ (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 & pRtHtCap-> ++ ShortGIfor40); + +- if (pDesireHtPhy->MCSSet[4] != 0) +- { ++ if (pDesireHtPhy->MCSSet[4] != 0) { + pMaxHtPhy->field.MCS = 32; + } + +- for (i=23; i>=0; i--) // 3*3 ++ for (i = 23; i >= 0; i--) // 3*3 + { +- j = i/8; +- bitmask = (1<<(i-(j*8))); ++ j = i / 8; ++ bitmask = (1 << (i - (j * 8))); + +- if ((pActiveHtPhy->MCSSet[j] & bitmask) && (pDesireHtPhy->MCSSet[j] & bitmask)) +- { ++ if ((pActiveHtPhy->MCSSet[j] & bitmask) ++ && (pDesireHtPhy->MCSSet[j] & bitmask)) { + pMaxHtPhy->field.MCS = i; + break; +- } ++ } + +- if (i==0) ++ if (i == 0) + break; + } + +@@ -3264,30 +3400,29 @@ VOID MlmeUpdateHtTxRates( + pMinHtPhy->field.STBC = 0; + pMinHtPhy->field.ShortGI = 0; + //If STA assigns fixed rate. update to fixed here. +- if ( (pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff)) +- { +- if (pDesireHtPhy->MCSSet[4] != 0) +- { ++ if ((pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff)) { ++ if (pDesireHtPhy->MCSSet[4] != 0) { + pMaxHtPhy->field.MCS = 32; + pMinHtPhy->field.MCS = 32; +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n",pMinHtPhy->field.MCS)); +- } ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n", ++ pMinHtPhy->field.MCS)); ++ } + +- for (i=23; (CHAR)i >= 0; i--) // 3*3 +- { +- j = i/8; +- bitmask = (1<<(i-(j*8))); +- if ( (pDesireHtPhy->MCSSet[j] & bitmask) && (pActiveHtPhy->MCSSet[j] & bitmask)) ++ for (i = 23; (CHAR) i >= 0; i--) // 3*3 + { ++ j = i / 8; ++ bitmask = (1 << (i - (j * 8))); ++ if ((pDesireHtPhy->MCSSet[j] & bitmask) ++ && (pActiveHtPhy->MCSSet[j] & bitmask)) { + pMaxHtPhy->field.MCS = i; + pMinHtPhy->field.MCS = i; + break; +- } +- if (i==0) ++ } ++ if (i == 0) + break; ++ } + } +- } +- + + // Decide ht rate + pHtPhy->field.STBC = pMaxHtPhy->field.STBC; +@@ -3302,16 +3437,17 @@ VOID MlmeUpdateHtTxRates( + else + *auto_rate_cur_p = TRUE; + +- DBGPRINT(RT_DEBUG_TRACE, (" MlmeUpdateHtTxRates<---.AMsduSize = %d \n", pAd->CommonCfg.DesiredHtPhy.AmsduSize )); +- DBGPRINT(RT_DEBUG_TRACE,("TX: MCS[0] = %x (choose %d), BW = %d, ShortGI = %d, MODE = %d, \n", pActiveHtPhy->MCSSet[0],pHtPhy->field.MCS, +- pHtPhy->field.BW, pHtPhy->field.ShortGI, pHtPhy->field.MODE)); +- DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" MlmeUpdateHtTxRates<---.AMsduSize = %d \n", ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("TX: MCS[0] = %x (choose %d), BW = %d, ShortGI = %d, MODE = %d, \n", ++ pActiveHtPhy->MCSSet[0], pHtPhy->field.MCS, pHtPhy->field.BW, ++ pHtPhy->field.ShortGI, pHtPhy->field.MODE)); ++ DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateHtTxRates<=== \n")); + } + +- +-VOID BATableInit( +- IN PRTMP_ADAPTER pAd, +- IN BA_TABLE *Tab) ++VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) + { + int i; + +@@ -3319,27 +3455,23 @@ VOID BATableInit( + Tab->numAsRecipient = 0; + Tab->numDoneOriginator = 0; + NdisAllocateSpinLock(&pAd->BATabLock); +- for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) +- { ++ for (i = 0; i < MAX_LEN_OF_BA_REC_TABLE; i++) { + Tab->BARecEntry[i].REC_BA_Status = Recipient_NONE; + NdisAllocateSpinLock(&(Tab->BARecEntry[i].RxReRingLock)); + } +- for (i = 0; i < MAX_LEN_OF_BA_ORI_TABLE; i++) +- { ++ for (i = 0; i < MAX_LEN_OF_BA_ORI_TABLE; i++) { + Tab->BAOriEntry[i].ORI_BA_Status = Originator_NONE; + } + } + + // IRQL = DISPATCH_LEVEL +-VOID MlmeRadioOff( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeRadioOff(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_OFF(pAd); + } + + // IRQL = DISPATCH_LEVEL +-VOID MlmeRadioOn( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_ON(pAd); + } +@@ -3348,7 +3480,6 @@ VOID MlmeRadioOn( + // bss_table.c + // =========================================================================================== + +- + /*! \brief initialize BSS table + * \param p_tab pointer to the table + * \return none +@@ -3359,21 +3490,18 @@ VOID MlmeRadioOn( + IRQL = DISPATCH_LEVEL + + */ +-VOID BssTableInit( +- IN BSS_TABLE *Tab) ++VOID BssTableInit(IN BSS_TABLE * Tab) + { + int i; + + Tab->BssNr = 0; +- Tab->BssOverlapNr = 0; +- for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) +- { ++ Tab->BssOverlapNr = 0; ++ for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) { + NdisZeroMemory(&Tab->BssEntry[i], sizeof(BSS_ENTRY)); + Tab->BssEntry[i].Rssi = -127; // initial the rssi as a minimum value + } + } + +- + /*! \brief search the BSS table by SSID + * \param p_tab pointer to the bss table + * \param ssid SSID string +@@ -3385,116 +3513,102 @@ VOID BssTableInit( + IRQL = DISPATCH_LEVEL + + */ +-ULONG BssTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel) ++ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel) + { + UCHAR i; + +- for (i = 0; i < Tab->BssNr; i++) +- { ++ for (i = 0; i < Tab->BssNr; i++) { + // + // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. + // We should distinguish this case. + // + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid)) +- { ++ ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && ++ MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid)) { + return i; + } + } +- return (ULONG)BSS_NOT_FOUND; ++ return (ULONG) BSS_NOT_FOUND; + } + +-ULONG BssSsidTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel) ++ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, ++ IN PUCHAR pBssid, ++ IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel) + { + UCHAR i; + +- for (i = 0; i < Tab->BssNr; i++) +- { ++ for (i = 0; i < Tab->BssNr; i++) { + // + // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. + // We should distinguish this case. + // + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid) && +- SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen)) +- { ++ ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && ++ MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid) && ++ SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, ++ Tab->BssEntry[i].SsidLen)) { + return i; + } + } +- return (ULONG)BSS_NOT_FOUND; ++ return (ULONG) BSS_NOT_FOUND; + } + +-ULONG BssTableSearchWithSSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel) ++ULONG BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++ IN PUCHAR Bssid, ++ IN PUCHAR pSsid, ++ IN UCHAR SsidLen, IN UCHAR Channel) + { + UCHAR i; + +- for (i = 0; i < Tab->BssNr; i++) +- { ++ for (i = 0; i < Tab->BssNr; i++) { + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +- ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && +- MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid) && +- (SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen) || +- (NdisEqualMemory(pSsid, ZeroSsid, SsidLen)) || +- (NdisEqualMemory(Tab->BssEntry[i].Ssid, ZeroSsid, Tab->BssEntry[i].SsidLen)))) +- { ++ ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && ++ MAC_ADDR_EQUAL(&(Tab->BssEntry[i].Bssid), Bssid) && ++ (SSID_EQUAL ++ (pSsid, SsidLen, Tab->BssEntry[i].Ssid, ++ Tab->BssEntry[i].SsidLen) ++ || (NdisEqualMemory(pSsid, ZeroSsid, SsidLen)) ++ || ++ (NdisEqualMemory ++ (Tab->BssEntry[i].Ssid, ZeroSsid, ++ Tab->BssEntry[i].SsidLen)))) { + return i; + } + } +- return (ULONG)BSS_NOT_FOUND; ++ return (ULONG) BSS_NOT_FOUND; + } + +- +-ULONG BssSsidTableSearchBySSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen) ++ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++ IN PUCHAR pSsid, IN UCHAR SsidLen) + { + UCHAR i; + +- for (i = 0; i < Tab->BssNr; i++) +- { +- if (SSID_EQUAL(pSsid, SsidLen, Tab->BssEntry[i].Ssid, Tab->BssEntry[i].SsidLen)) +- { ++ for (i = 0; i < Tab->BssNr; i++) { ++ if (SSID_EQUAL ++ (pSsid, SsidLen, Tab->BssEntry[i].Ssid, ++ Tab->BssEntry[i].SsidLen)) { + return i; ++ } + } +- } +- return (ULONG)BSS_NOT_FOUND; ++ return (ULONG) BSS_NOT_FOUND; + } + +- + // IRQL = DISPATCH_LEVEL +-VOID BssTableDeleteEntry( +- IN OUT BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel) ++VOID BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, ++ IN PUCHAR pBssid, IN UCHAR Channel) + { + UCHAR i, j; + +- for (i = 0; i < Tab->BssNr; i++) +- { ++ for (i = 0; i < Tab->BssNr; i++) { + if ((Tab->BssEntry[i].Channel == Channel) && +- (MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid))) +- { +- for (j = i; j < Tab->BssNr - 1; j++) +- { +- NdisMoveMemory(&(Tab->BssEntry[j]), &(Tab->BssEntry[j + 1]), sizeof(BSS_ENTRY)); ++ (MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid))) { ++ for (j = i; j < Tab->BssNr - 1; j++) { ++ NdisMoveMemory(&(Tab->BssEntry[j]), ++ &(Tab->BssEntry[j + 1]), ++ sizeof(BSS_ENTRY)); + } +- NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr - 1]), sizeof(BSS_ENTRY)); ++ NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr - 1]), ++ sizeof(BSS_ENTRY)); + Tab->BssNr -= 1; + return; + } +@@ -3510,21 +3624,20 @@ VOID BssTableDeleteEntry( + // IRQL = DISPATCH_LEVEL + ======================================================================== + */ +-VOID BATableDeleteORIEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY *pBAORIEntry) ++VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, ++ IN BA_ORI_ENTRY * pBAORIEntry) + { + +- if (pBAORIEntry->ORI_BA_Status != Originator_NONE) +- { ++ if (pBAORIEntry->ORI_BA_Status != Originator_NONE) { + NdisAcquireSpinLock(&pAd->BATabLock); +- if (pBAORIEntry->ORI_BA_Status == Originator_Done) +- { ++ if (pBAORIEntry->ORI_BA_Status == Originator_Done) { + pAd->BATable.numAsOriginator -= 1; +- DBGPRINT(RT_DEBUG_TRACE, ("BATableDeleteORIEntry numAsOriginator= %ld\n", pAd->BATable.numAsRecipient)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("BATableDeleteORIEntry numAsOriginator= %ld\n", ++ pAd->BATable.numAsRecipient)); + // Erase Bitmap flag. + } +- pAd->MacTab.Content[pBAORIEntry->Wcid].TXBAbitmap &= (~(1<<(pBAORIEntry->TID) )); // If STA mode, erase flag here ++ pAd->MacTab.Content[pBAORIEntry->Wcid].TXBAbitmap &= (~(1 << (pBAORIEntry->TID))); // If STA mode, erase flag here + pAd->MacTab.Content[pBAORIEntry->Wcid].BAOriWcidArray[pBAORIEntry->TID] = 0; // If STA mode, erase flag here + pBAORIEntry->ORI_BA_Status = Originator_NONE; + pBAORIEntry->Token = 1; +@@ -3542,69 +3655,45 @@ VOID BATableDeleteORIEntry( + IRQL = DISPATCH_LEVEL + + */ +-VOID BssEntrySet( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_ENTRY *pBss, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN PCF_PARM pCfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE) ++VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM pCfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ IN UCHAR HtCapabilityLen, ++ IN UCHAR AddHtInfoLen, ++ IN UCHAR NewExtChanOffset, ++ IN UCHAR Channel, ++ IN CHAR Rssi, ++ IN LARGE_INTEGER TimeStamp, ++ IN UCHAR CkipFlag, ++ IN PEDCA_PARM pEdcaParm, ++ IN PQOS_CAPABILITY_PARM pQosCapability, ++ IN PQBSS_LOAD_PARM pQbssLoad, ++ IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) + { + COPY_MAC_ADDR(pBss->Bssid, pBssid); + // Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID + pBss->Hidden = 1; +- if (SsidLen > 0) +- { ++ if (SsidLen > 0) { + // For hidden SSID AP, it might send beacon with SSID len equal to 0 + // Or send beacon /probe response with SSID len matching real SSID length, + // but SSID is all zero. such as "00-00-00-00" with length 4. + // We have to prevent this case overwrite correct table +- if (NdisEqualMemory(Ssid, ZeroSsid, SsidLen) == 0) +- { +- NdisZeroMemory(pBss->Ssid, MAX_LEN_OF_SSID); ++ if (NdisEqualMemory(Ssid, ZeroSsid, SsidLen) == 0) { ++ NdisZeroMemory(pBss->Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pBss->Ssid, Ssid, SsidLen); + pBss->SsidLen = SsidLen; + pBss->Hidden = 0; + } +- } +- else ++ } else + pBss->SsidLen = 0; + pBss->BssType = BssType; + pBss->BeaconPeriod = BeaconPeriod; +- if (BssType == BSS_INFRA) +- { +- if (pCfParm->bValid) +- { ++ if (BssType == BSS_INFRA) { ++ if (pCfParm->bValid) { + pBss->CfpCount = pCfParm->CfpCount; + pBss->CfpPeriod = pCfParm->CfpPeriod; + pBss->CfpMaxDuration = pCfParm->CfpMaxDuration; + pBss->CfpDurRemaining = pCfParm->CfpDurRemaining; + } +- } +- else +- { ++ } else { + pBss->AtimWin = AtimWin; + } + +@@ -3616,7 +3705,8 @@ VOID BssEntrySet( + if (SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES) + NdisMoveMemory(pBss->SupRate, SupRate, SupRateLen); + else +- NdisMoveMemory(pBss->SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES); ++ NdisMoveMemory(pBss->SupRate, SupRate, ++ MAX_LEN_OF_SUPPORTED_RATES); + pBss->SupRateLen = SupRateLen; + ASSERT(ExtRateLen <= MAX_LEN_OF_SUPPORTED_RATES); + NdisMoveMemory(pBss->ExtRate, ExtRate, ExtRateLen); +@@ -3634,35 +3724,39 @@ VOID BssEntrySet( + pBss->FixIEs.Capabilities = CapabilityInfo; + + // New for microsoft Variable IEs +- if (LengthVIE != 0) +- { ++ if (LengthVIE != 0) { + pBss->VarIELen = LengthVIE; + NdisMoveMemory(pBss->VarIEs, pVIE, pBss->VarIELen); +- } +- else +- { ++ } else { + pBss->VarIELen = 0; + } + + pBss->AddHtInfoLen = 0; + pBss->HtCapabilityLen = 0; +- if (HtCapabilityLen> 0) +- { ++ if (HtCapabilityLen > 0) { + pBss->HtCapabilityLen = HtCapabilityLen; +- NdisMoveMemory(&pBss->HtCapability, pHtCapability, HtCapabilityLen); +- if (AddHtInfoLen > 0) +- { ++ NdisMoveMemory(&pBss->HtCapability, pHtCapability, ++ HtCapabilityLen); ++ if (AddHtInfoLen > 0) { + pBss->AddHtInfoLen = AddHtInfoLen; +- NdisMoveMemory(&pBss->AddHtInfo, pAddHtInfo, AddHtInfoLen); +- +- if ((pAddHtInfo->ControlChan > 2)&& (pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) +- { +- pBss->CentralChannel = pAddHtInfo->ControlChan - 2; +- } +- else if ((pAddHtInfo->AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (pHtCapability->HtCapInfo.ChannelWidth == BW_40)) +- { +- pBss->CentralChannel = pAddHtInfo->ControlChan + 2; +- } ++ NdisMoveMemory(&pBss->AddHtInfo, pAddHtInfo, ++ AddHtInfoLen); ++ ++ if ((pAddHtInfo->ControlChan > 2) ++ && (pAddHtInfo->AddHtInfo.ExtChanOffset == ++ EXTCHA_BELOW) ++ && (pHtCapability->HtCapInfo.ChannelWidth == ++ BW_40)) { ++ pBss->CentralChannel = ++ pAddHtInfo->ControlChan - 2; ++ } else ++ if ((pAddHtInfo->AddHtInfo.ExtChanOffset == ++ EXTCHA_ABOVE) ++ && (pHtCapability->HtCapInfo.ChannelWidth == ++ BW_40)) { ++ pBss->CentralChannel = ++ pAddHtInfo->ControlChan + 2; ++ } + } + } + +@@ -3674,53 +3768,51 @@ VOID BssEntrySet( + else + pBss->EdcaParm.bValid = FALSE; + if (pQosCapability) +- NdisMoveMemory(&pBss->QosCapability, pQosCapability, sizeof(QOS_CAPABILITY_PARM)); ++ NdisMoveMemory(&pBss->QosCapability, pQosCapability, ++ sizeof(QOS_CAPABILITY_PARM)); + else + pBss->QosCapability.bValid = FALSE; + if (pQbssLoad) +- NdisMoveMemory(&pBss->QbssLoad, pQbssLoad, sizeof(QBSS_LOAD_PARM)); ++ NdisMoveMemory(&pBss->QbssLoad, pQbssLoad, ++ sizeof(QBSS_LOAD_PARM)); + else + pBss->QbssLoad.bValid = FALSE; + + { +- PEID_STRUCT pEid; +- USHORT Length = 0; +- ++ PEID_STRUCT pEid; ++ USHORT Length = 0; + + NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN); + NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN); + pEid = (PEID_STRUCT) pVIE; +- while ((Length + 2 + (USHORT)pEid->Len) <= LengthVIE) +- { +- switch(pEid->Eid) +- { +- case IE_WPA: +- if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- { +- if ((pEid->Len + 2) > MAX_CUSTOM_LEN) +- { +- pBss->WpaIE.IELen = 0; +- break; ++ while ((Length + 2 + (USHORT) pEid->Len) <= LengthVIE) { ++ switch (pEid->Eid) { ++ case IE_WPA: ++ if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { ++ if ((pEid->Len + 2) > MAX_CUSTOM_LEN) { ++ pBss->WpaIE.IELen = 0; ++ break; + } +- pBss->WpaIE.IELen = pEid->Len + 2; +- NdisMoveMemory(pBss->WpaIE.IE, pEid, pBss->WpaIE.IELen); ++ pBss->WpaIE.IELen = pEid->Len + 2; ++ NdisMoveMemory(pBss->WpaIE.IE, pEid, ++ pBss->WpaIE.IELen); + } + break; +- case IE_RSN: +- if (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- { +- if ((pEid->Len + 2) > MAX_CUSTOM_LEN) +- { +- pBss->RsnIE.IELen = 0; +- break; ++ case IE_RSN: ++ if (NdisEqualMemory ++ (pEid->Octet + 2, RSN_OUI, 3)) { ++ if ((pEid->Len + 2) > MAX_CUSTOM_LEN) { ++ pBss->RsnIE.IELen = 0; ++ break; + } +- pBss->RsnIE.IELen = pEid->Len + 2; +- NdisMoveMemory(pBss->RsnIE.IE, pEid, pBss->RsnIE.IELen); ++ pBss->RsnIE.IELen = pEid->Len + 2; ++ NdisMoveMemory(pBss->RsnIE.IE, pEid, ++ pBss->RsnIE.IELen); + } + break; +- } +- Length = Length + 2 + (USHORT)pEid->Len; // Eid[1] + Len[1]+ content[Len] +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); ++ } ++ Length = Length + 2 + (USHORT) pEid->Len; // Eid[1] + Len[1]+ content[Len] ++ pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); + } + } + } +@@ -3748,191 +3840,209 @@ VOID BssEntrySet( + IRQL = DISPATCH_LEVEL + + */ +-ULONG BssTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN CF_PARM *CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR ChannelNo, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE) ++ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ IN UCHAR HtCapabilityLen, ++ IN UCHAR AddHtInfoLen, ++ IN UCHAR NewExtChanOffset, ++ IN UCHAR ChannelNo, ++ IN CHAR Rssi, ++ IN LARGE_INTEGER TimeStamp, ++ IN UCHAR CkipFlag, ++ IN PEDCA_PARM pEdcaParm, ++ IN PQOS_CAPABILITY_PARM pQosCapability, ++ IN PQBSS_LOAD_PARM pQbssLoad, ++ IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) + { +- ULONG Idx; ++ ULONG Idx; + +- Idx = BssTableSearchWithSSID(Tab, pBssid, (UCHAR *)Ssid, SsidLen, ChannelNo); +- if (Idx == BSS_NOT_FOUND) +- { +- if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) +- { ++ Idx = ++ BssTableSearchWithSSID(Tab, pBssid, (UCHAR *) Ssid, SsidLen, ++ ChannelNo); ++ if (Idx == BSS_NOT_FOUND) { ++ if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) { + // + // It may happen when BSS Table was full. + // The desired AP will not be added into BSS Table + // In this case, if we found the desired AP then overwrite BSS Table. + // +- if(!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, pBssid) || +- SSID_EQUAL(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Ssid, SsidLen)) +- { ++ if (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, pBssid) ++ || SSID_EQUAL(pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen, Ssid, ++ SsidLen)) { + Idx = Tab->BssOverlapNr; +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); +- Tab->BssOverlapNr = (Tab->BssOverlapNr++) % MAX_LEN_OF_BSS_TABLE; ++ BssEntrySet(pAd, &Tab->BssEntry[Idx], ++ pBssid, Ssid, SsidLen, ++ BssType, BeaconPeriod, ++ CfParm, AtimWin, ++ CapabilityInfo, SupRate, ++ SupRateLen, ExtRate, ++ ExtRateLen, pHtCapability, ++ pAddHtInfo, HtCapabilityLen, ++ AddHtInfoLen, ++ NewExtChanOffset, ChannelNo, ++ Rssi, TimeStamp, CkipFlag, ++ pEdcaParm, pQosCapability, ++ pQbssLoad, LengthVIE, pVIE); ++ Tab->BssOverlapNr = ++ (Tab->BssOverlapNr++) % ++ MAX_LEN_OF_BSS_TABLE; + } + return Idx; +- } +- else +- { +- return BSS_NOT_FOUND; +- } ++ } else { ++ return BSS_NOT_FOUND; ++ } + } + Idx = Tab->BssNr; +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod, CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); ++ BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, ++ BssType, BeaconPeriod, CfParm, AtimWin, ++ CapabilityInfo, SupRate, SupRateLen, ExtRate, ++ ExtRateLen, pHtCapability, pAddHtInfo, ++ HtCapabilityLen, AddHtInfoLen, NewExtChanOffset, ++ ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, ++ pQosCapability, pQbssLoad, LengthVIE, pVIE); + Tab->BssNr++; +- } +- else +- { ++ } else { + /* avoid Hidden SSID form beacon to overwirite correct SSID from probe response */ +- if ((SSID_EQUAL(Ssid, SsidLen, Tab->BssEntry[Idx].Ssid, Tab->BssEntry[Idx].SsidLen)) || +- (NdisEqualMemory(Tab->BssEntry[Idx].Ssid, ZeroSsid, Tab->BssEntry[Idx].SsidLen))) +- { +- BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod,CfParm, AtimWin, +- CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen, +- NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE); ++ if ((SSID_EQUAL ++ (Ssid, SsidLen, Tab->BssEntry[Idx].Ssid, ++ Tab->BssEntry[Idx].SsidLen)) ++ || ++ (NdisEqualMemory ++ (Tab->BssEntry[Idx].Ssid, ZeroSsid, ++ Tab->BssEntry[Idx].SsidLen))) { ++ BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, ++ SsidLen, BssType, BeaconPeriod, CfParm, ++ AtimWin, CapabilityInfo, SupRate, ++ SupRateLen, ExtRate, ExtRateLen, ++ pHtCapability, pAddHtInfo, HtCapabilityLen, ++ AddHtInfoLen, NewExtChanOffset, ChannelNo, ++ Rssi, TimeStamp, CkipFlag, pEdcaParm, ++ pQosCapability, pQbssLoad, LengthVIE, pVIE); + } + } + + return Idx; + } + +- + // IRQL = DISPATCH_LEVEL +-VOID BssTableSsidSort( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *OutTab, +- IN CHAR Ssid[], +- IN UCHAR SsidLen) ++VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, ++ OUT BSS_TABLE * OutTab, IN CHAR Ssid[], IN UCHAR SsidLen) + { + INT i; + BssTableInit(OutTab); + +- for (i = 0; i < pAd->ScanTab.BssNr; i++) +- { ++ for (i = 0; i < pAd->ScanTab.BssNr; i++) { + BSS_ENTRY *pInBss = &pAd->ScanTab.BssEntry[i]; +- BOOLEAN bIsHiddenApIncluded = FALSE; ++ BOOLEAN bIsHiddenApIncluded = FALSE; + + if (((pAd->CommonCfg.bIEEE80211H == 1) && +- (pAd->MlmeAux.Channel > 14) && +- RadarChannelCheck(pAd, pInBss->Channel)) +- ) +-{ ++ (pAd->MlmeAux.Channel > 14) && ++ RadarChannelCheck(pAd, pInBss->Channel)) ++ ) { + if (pInBss->Hidden) + bIsHiddenApIncluded = TRUE; +-} ++ } + + if ((pInBss->BssType == pAd->StaCfg.BssType) && +- (SSID_EQUAL(Ssid, SsidLen, pInBss->Ssid, pInBss->SsidLen) || bIsHiddenApIncluded)) +- { ++ (SSID_EQUAL(Ssid, SsidLen, pInBss->Ssid, pInBss->SsidLen) ++ || bIsHiddenApIncluded)) { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + +- +- + // 2.4G/5G N only mode + if ((pInBss->HtCapabilityLen == 0) && +- ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); ++ ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) ++ || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; +- } ++ } + // New for WPA2 + // Check the Authmode first +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { + // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode +- if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) && (pAd->StaCfg.AuthMode != pInBss->AuthModeAux)) ++ if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) ++ && (pAd->StaCfg.AuthMode != ++ pInBss->AuthModeAux)) + // None matched + continue; + + // Check cipher suite, AP must have more secured cipher than station setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK)) { + // If it's not mixed mode, we should only let BSS pass with the same encryption + if (pInBss->WPA.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA.GroupCipher) ++ if (pAd->StaCfg.WepStatus != ++ pInBss->WPA.GroupCipher) + continue; + + // check group cipher +- if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && +- (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP40Enabled) && +- (pInBss->WPA.GroupCipher != Ndis802_11GroupWEP104Enabled)) ++ if ((pAd->StaCfg.WepStatus < ++ pInBss->WPA.GroupCipher) ++ && (pInBss->WPA.GroupCipher != ++ Ndis802_11GroupWEP40Enabled) ++ && (pInBss->WPA.GroupCipher != ++ Ndis802_11GroupWEP104Enabled)) + continue; + + // check pairwise cipher, skip if none matched + // If profile set to AES, let it pass without question. + // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipherAux)) ++ if ((pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption2Enabled) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA.PairCipher) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA.PairCipherAux)) + continue; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { ++ } else ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK)) { + // If it's not mixed mode, we should only let BSS pass with the same encryption + if (pInBss->WPA2.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA2.GroupCipher) ++ if (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.GroupCipher) + continue; + + // check group cipher +- if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) && +- (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP40Enabled) && +- (pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP104Enabled)) ++ if ((pAd->StaCfg.WepStatus < ++ pInBss->WPA.GroupCipher) ++ && (pInBss->WPA2.GroupCipher != ++ Ndis802_11GroupWEP40Enabled) ++ && (pInBss->WPA2.GroupCipher != ++ Ndis802_11GroupWEP104Enabled)) + continue; + + // check pairwise cipher, skip if none matched + // If profile set to AES, let it pass without question. + // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipherAux)) ++ if ((pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption2Enabled) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.PairCipher) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.PairCipherAux)) + continue; + } + } + // Bss Type matched, SSID matched. + // We will check wepstatus for qualification Bss +- else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) +- { +- DBGPRINT(RT_DEBUG_TRACE,("StaCfg.WepStatus=%d, while pInBss->WepStatus=%d\n", pAd->StaCfg.WepStatus, pInBss->WepStatus)); ++ else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("StaCfg.WepStatus=%d, while pInBss->WepStatus=%d\n", ++ pAd->StaCfg.WepStatus, ++ pInBss->WepStatus)); + // + // For the SESv2 case, we will not qualify WepStatus. +- // ++ // + if (!pInBss->bSES) + continue; + } +- + // Since the AP is using hidden SSID, and we are trying to connect to ANY + // It definitely will fail. So, skip it. + // CCX also require not even try to connect it!! +@@ -3942,108 +4052,123 @@ VOID BssTableSsidSort( + // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region + // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, + if ((pInBss->CentralChannel != pInBss->Channel) && +- (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ (pAd->CommonCfg.RegTransmitSetting.field.BW == ++ BW_40)) { ++ if (RTMPCheckChannel ++ (pAd, pInBss->CentralChannel, ++ pInBss->Channel) == FALSE) { ++ pAd->CommonCfg.RegTransmitSetting.field. ++ BW = BW_20; + SetCommonHT(pAd); +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } +- else +- { +- if (pAd->CommonCfg.DesiredHtPhy.ChannelWidth == BAND_WIDTH_20) +- { ++ pAd->CommonCfg.RegTransmitSetting.field. ++ BW = BW_40; ++ } else { ++ if (pAd->CommonCfg.DesiredHtPhy. ++ ChannelWidth == BAND_WIDTH_20) { + SetCommonHT(pAd); + } +- } +- } +- ++ } ++ } + // copy matching BSS from InTab to OutTab + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); + + OutTab->BssNr++; +- } +- else if ((pInBss->BssType == pAd->StaCfg.BssType) && (SsidLen == 0)) +- { ++ } else if ((pInBss->BssType == pAd->StaCfg.BssType) ++ && (SsidLen == 0)) { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + +- + // 2.4G/5G N only mode + if ((pInBss->HtCapabilityLen == 0) && +- ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); ++ ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) ++ || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +- + // New for WPA2 + // Check the Authmode first +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { + // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode +- if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) && (pAd->StaCfg.AuthMode != pInBss->AuthModeAux)) ++ if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) ++ && (pAd->StaCfg.AuthMode != ++ pInBss->AuthModeAux)) + // None matched + continue; + + // Check cipher suite, AP must have more secured cipher than station setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK)) { + // If it's not mixed mode, we should only let BSS pass with the same encryption + if (pInBss->WPA.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA.GroupCipher) ++ if (pAd->StaCfg.WepStatus != ++ pInBss->WPA.GroupCipher) + continue; + + // check group cipher +- if (pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) ++ if (pAd->StaCfg.WepStatus < ++ pInBss->WPA.GroupCipher) + continue; + + // check pairwise cipher, skip if none matched + // If profile set to AES, let it pass without question. + // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA.PairCipherAux)) ++ if ((pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption2Enabled) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA.PairCipher) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA.PairCipherAux)) + continue; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { ++ } else ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK)) { + // If it's not mixed mode, we should only let BSS pass with the same encryption + if (pInBss->WPA2.bMixMode == FALSE) +- if (pAd->StaCfg.WepStatus != pInBss->WPA2.GroupCipher) ++ if (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.GroupCipher) + continue; + + // check group cipher +- if (pAd->StaCfg.WepStatus < pInBss->WPA2.GroupCipher) ++ if (pAd->StaCfg.WepStatus < ++ pInBss->WPA2.GroupCipher) + continue; + + // check pairwise cipher, skip if none matched + // If profile set to AES, let it pass without question. + // If profile set to TKIP, we must find one mateched +- if ((pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipher) && +- (pAd->StaCfg.WepStatus != pInBss->WPA2.PairCipherAux)) ++ if ((pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption2Enabled) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.PairCipher) ++ && (pAd->StaCfg.WepStatus != ++ pInBss->WPA2.PairCipherAux)) + continue; + } + } + // Bss Type matched, SSID matched. + // We will check wepstatus for qualification Bss + else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) +- continue; ++ continue; + + // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region + // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, + if ((pInBss->CentralChannel != pInBss->Channel) && +- (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (RTMPCheckChannel(pAd, pInBss->CentralChannel, pInBss->Channel) == FALSE) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; ++ (pAd->CommonCfg.RegTransmitSetting.field.BW == ++ BW_40)) { ++ if (RTMPCheckChannel ++ (pAd, pInBss->CentralChannel, ++ pInBss->Channel) == FALSE) { ++ pAd->CommonCfg.RegTransmitSetting.field. ++ BW = BW_20; + SetCommonHT(pAd); +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40; +- } ++ pAd->CommonCfg.RegTransmitSetting.field. ++ BW = BW_40; + } +- ++ } + // copy matching BSS from InTab to OutTab + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); + +@@ -4051,359 +4176,364 @@ VOID BssTableSsidSort( + } + + if (OutTab->BssNr >= MAX_LEN_OF_BSS_TABLE) +- break; +- } ++ break; ++ } + + BssTableSortByRssi(OutTab); + } + +- + // IRQL = DISPATCH_LEVEL +-VOID BssTableSortByRssi( +- IN OUT BSS_TABLE *OutTab) ++VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) + { +- INT i, j; ++ INT i, j; + BSS_ENTRY TmpBss; + +- for (i = 0; i < OutTab->BssNr - 1; i++) +- { +- for (j = i+1; j < OutTab->BssNr; j++) +- { +- if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi) +- { +- NdisMoveMemory(&TmpBss, &OutTab->BssEntry[j], sizeof(BSS_ENTRY)); +- NdisMoveMemory(&OutTab->BssEntry[j], &OutTab->BssEntry[i], sizeof(BSS_ENTRY)); +- NdisMoveMemory(&OutTab->BssEntry[i], &TmpBss, sizeof(BSS_ENTRY)); +- } +- } +- } ++ for (i = 0; i < OutTab->BssNr - 1; i++) { ++ for (j = i + 1; j < OutTab->BssNr; j++) { ++ if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi) { ++ NdisMoveMemory(&TmpBss, &OutTab->BssEntry[j], ++ sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&OutTab->BssEntry[j], ++ &OutTab->BssEntry[i], ++ sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&OutTab->BssEntry[i], &TmpBss, ++ sizeof(BSS_ENTRY)); ++ } ++ } ++ } + } + +- +-VOID BssCipherParse( +- IN OUT PBSS_ENTRY pBss) ++VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + { +- PEID_STRUCT pEid; +- PUCHAR pTmp; +- PRSN_IE_HEADER_STRUCT pRsnHeader; +- PCIPHER_SUITE_STRUCT pCipher; +- PAKM_SUITE_STRUCT pAKM; +- USHORT Count; +- INT Length; +- NDIS_802_11_ENCRYPTION_STATUS TmpCipher; ++ PEID_STRUCT pEid; ++ PUCHAR pTmp; ++ PRSN_IE_HEADER_STRUCT pRsnHeader; ++ PCIPHER_SUITE_STRUCT pCipher; ++ PAKM_SUITE_STRUCT pAKM; ++ USHORT Count; ++ INT Length; ++ NDIS_802_11_ENCRYPTION_STATUS TmpCipher; + + // + // WepStatus will be reset later, if AP announce TKIP or AES on the beacon frame. + // +- if (pBss->Privacy) +- { +- pBss->WepStatus = Ndis802_11WEPEnabled; +- } +- else +- { +- pBss->WepStatus = Ndis802_11WEPDisabled; +- } ++ if (pBss->Privacy) { ++ pBss->WepStatus = Ndis802_11WEPEnabled; ++ } else { ++ pBss->WepStatus = Ndis802_11WEPDisabled; ++ } + // Set default to disable & open authentication before parsing variable IE +- pBss->AuthMode = Ndis802_11AuthModeOpen; +- pBss->AuthModeAux = Ndis802_11AuthModeOpen; ++ pBss->AuthMode = Ndis802_11AuthModeOpen; ++ pBss->AuthModeAux = Ndis802_11AuthModeOpen; + + // Init WPA setting +- pBss->WPA.PairCipher = Ndis802_11WEPDisabled; ++ pBss->WPA.PairCipher = Ndis802_11WEPDisabled; + pBss->WPA.PairCipherAux = Ndis802_11WEPDisabled; +- pBss->WPA.GroupCipher = Ndis802_11WEPDisabled; ++ pBss->WPA.GroupCipher = Ndis802_11WEPDisabled; + pBss->WPA.RsnCapability = 0; +- pBss->WPA.bMixMode = FALSE; ++ pBss->WPA.bMixMode = FALSE; + + // Init WPA2 setting +- pBss->WPA2.PairCipher = Ndis802_11WEPDisabled; ++ pBss->WPA2.PairCipher = Ndis802_11WEPDisabled; + pBss->WPA2.PairCipherAux = Ndis802_11WEPDisabled; +- pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled; ++ pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled; + pBss->WPA2.RsnCapability = 0; +- pBss->WPA2.bMixMode = FALSE; +- ++ pBss->WPA2.bMixMode = FALSE; + + Length = (INT) pBss->VarIELen; + +- while (Length > 0) +- { ++ while (Length > 0) { + // Parse cipher suite base on WPA1 & WPA2, they should be parsed differently + pTmp = ((PUCHAR) pBss->VarIEs) + pBss->VarIELen - Length; + pEid = (PEID_STRUCT) pTmp; +- switch (pEid->Eid) +- { +- case IE_WPA: +- if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) && (pEid->Len == 7)) +- { +- pBss->bSES = TRUE; ++ switch (pEid->Eid) { ++ case IE_WPA: ++ if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) ++ && (pEid->Len == 7)) { ++ pBss->bSES = TRUE; ++ break; ++ } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4) != ++ 1) { ++ // if unsupported vendor specific IE ++ break; ++ } ++ // Skip OUI, version, and multicast suite ++ // This part should be improved in the future when AP supported multiple cipher suite. ++ // For now, it's OK since almost all APs have fixed cipher suite supported. ++ // pTmp = (PUCHAR) pEid->Octet; ++ pTmp += 11; ++ ++ // Cipher Suite Selectors from Spec P802.11i/D3.2 P26. ++ // Value Meaning ++ // 0 None ++ // 1 WEP-40 ++ // 2 Tkip ++ // 3 WRAP ++ // 4 AES ++ // 5 WEP-104 ++ // Parse group cipher ++ switch (*pTmp) { ++ case 1: ++ pBss->WPA.GroupCipher = ++ Ndis802_11GroupWEP40Enabled; ++ break; ++ case 5: ++ pBss->WPA.GroupCipher = ++ Ndis802_11GroupWEP104Enabled; ++ break; ++ case 2: ++ pBss->WPA.GroupCipher = ++ Ndis802_11Encryption2Enabled; ++ break; ++ case 4: ++ pBss->WPA.GroupCipher = ++ Ndis802_11Encryption3Enabled; ++ break; ++ default: ++ break; ++ } ++ // number of unicast suite ++ pTmp += 1; ++ ++ // skip all unicast cipher suites ++ //Count = *(PUSHORT) pTmp; ++ Count = (pTmp[1] << 8) + pTmp[0]; ++ pTmp += sizeof(USHORT); ++ ++ // Parsing all unicast cipher suite ++ while (Count > 0) { ++ // Skip OUI ++ pTmp += 3; ++ TmpCipher = Ndis802_11WEPDisabled; ++ switch (*pTmp) { ++ case 1: ++ case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway ++ TmpCipher = ++ Ndis802_11Encryption1Enabled; + break; +- } +- else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4) != 1) +- { +- // if unsupported vendor specific IE ++ case 2: ++ TmpCipher = ++ Ndis802_11Encryption2Enabled; ++ break; ++ case 4: ++ TmpCipher = ++ Ndis802_11Encryption3Enabled; ++ break; ++ default: + break; +- } +- // Skip OUI, version, and multicast suite +- // This part should be improved in the future when AP supported multiple cipher suite. +- // For now, it's OK since almost all APs have fixed cipher suite supported. +- // pTmp = (PUCHAR) pEid->Octet; +- pTmp += 11; +- +- // Cipher Suite Selectors from Spec P802.11i/D3.2 P26. +- // Value Meaning +- // 0 None +- // 1 WEP-40 +- // 2 Tkip +- // 3 WRAP +- // 4 AES +- // 5 WEP-104 +- // Parse group cipher +- switch (*pTmp) +- { +- case 1: +- pBss->WPA.GroupCipher = Ndis802_11GroupWEP40Enabled; +- break; +- case 5: +- pBss->WPA.GroupCipher = Ndis802_11GroupWEP104Enabled; +- break; +- case 2: +- pBss->WPA.GroupCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- pBss->WPA.GroupCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; + } +- // number of unicast suite +- pTmp += 1; +- +- // skip all unicast cipher suites +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // Parsing all unicast cipher suite +- while (Count > 0) +- { +- // Skip OUI +- pTmp += 3; +- TmpCipher = Ndis802_11WEPDisabled; +- switch (*pTmp) +- { +- case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway +- TmpCipher = Ndis802_11Encryption1Enabled; +- break; +- case 2: +- TmpCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- TmpCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- if (TmpCipher > pBss->WPA.PairCipher) +- { +- // Move the lower cipher suite to PairCipherAux +- pBss->WPA.PairCipherAux = pBss->WPA.PairCipher; +- pBss->WPA.PairCipher = TmpCipher; +- } +- else +- { +- pBss->WPA.PairCipherAux = TmpCipher; +- } +- pTmp++; +- Count--; +- } +- +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- pTmp += 3; ++ if (TmpCipher > pBss->WPA.PairCipher) { ++ // Move the lower cipher suite to PairCipherAux ++ pBss->WPA.PairCipherAux = ++ pBss->WPA.PairCipher; ++ pBss->WPA.PairCipher = TmpCipher; ++ } else { ++ pBss->WPA.PairCipherAux = TmpCipher; ++ } ++ pTmp++; ++ Count--; ++ } + +- switch (*pTmp) +- { +- case 1: +- // Set AP support WPA-enterprise mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA; +- break; +- case 2: +- // Set AP support WPA-PSK mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPAPSK; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPAPSK; +- break; +- default: +- break; +- } +- pTmp += 1; ++ // 4. get AKM suite counts ++ //Count = *(PUSHORT) pTmp; ++ Count = (pTmp[1] << 8) + pTmp[0]; ++ pTmp += sizeof(USHORT); ++ pTmp += 3; ++ ++ switch (*pTmp) { ++ case 1: ++ // Set AP support WPA-enterprise mode ++ if (pBss->AuthMode == Ndis802_11AuthModeOpen) ++ pBss->AuthMode = Ndis802_11AuthModeWPA; ++ else ++ pBss->AuthModeAux = ++ Ndis802_11AuthModeWPA; ++ break; ++ case 2: ++ // Set AP support WPA-PSK mode ++ if (pBss->AuthMode == Ndis802_11AuthModeOpen) ++ pBss->AuthMode = ++ Ndis802_11AuthModeWPAPSK; ++ else ++ pBss->AuthModeAux = ++ Ndis802_11AuthModeWPAPSK; ++ break; ++ default: ++ break; ++ } ++ pTmp += 1; ++ ++ // Fixed for WPA-None ++ if (pBss->BssType == BSS_ADHOC) { ++ pBss->AuthMode = Ndis802_11AuthModeWPANone; ++ pBss->AuthModeAux = Ndis802_11AuthModeWPANone; ++ pBss->WepStatus = pBss->WPA.GroupCipher; ++ // Patched bugs for old driver ++ if (pBss->WPA.PairCipherAux == ++ Ndis802_11WEPDisabled) ++ pBss->WPA.PairCipherAux = ++ pBss->WPA.GroupCipher; ++ } else ++ pBss->WepStatus = pBss->WPA.PairCipher; ++ ++ // Check the Pair & Group, if different, turn on mixed mode flag ++ if (pBss->WPA.GroupCipher != pBss->WPA.PairCipher) ++ pBss->WPA.bMixMode = TRUE; + +- // Fixed for WPA-None +- if (pBss->BssType == BSS_ADHOC) +- { +- pBss->AuthMode = Ndis802_11AuthModeWPANone; +- pBss->AuthModeAux = Ndis802_11AuthModeWPANone; +- pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } +- else +- pBss->WepStatus = pBss->WPA.PairCipher; ++ break; + +- // Check the Pair & Group, if different, turn on mixed mode flag +- if (pBss->WPA.GroupCipher != pBss->WPA.PairCipher) +- pBss->WPA.bMixMode = TRUE; ++ case IE_RSN: ++ pRsnHeader = (PRSN_IE_HEADER_STRUCT) pTmp; + ++ // 0. Version must be 1 ++ if (le2cpu16(pRsnHeader->Version) != 1) + break; ++ pTmp += sizeof(RSN_IE_HEADER_STRUCT); + +- case IE_RSN: +- pRsnHeader = (PRSN_IE_HEADER_STRUCT) pTmp; +- +- // 0. Version must be 1 +- if (le2cpu16(pRsnHeader->Version) != 1) +- break; +- pTmp += sizeof(RSN_IE_HEADER_STRUCT); ++ // 1. Check group cipher ++ pCipher = (PCIPHER_SUITE_STRUCT) pTmp; ++ if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) ++ break; + +- // 1. Check group cipher ++ // Parse group cipher ++ switch (pCipher->Type) { ++ case 1: ++ pBss->WPA2.GroupCipher = ++ Ndis802_11GroupWEP40Enabled; ++ break; ++ case 5: ++ pBss->WPA2.GroupCipher = ++ Ndis802_11GroupWEP104Enabled; ++ break; ++ case 2: ++ pBss->WPA2.GroupCipher = ++ Ndis802_11Encryption2Enabled; ++ break; ++ case 4: ++ pBss->WPA2.GroupCipher = ++ Ndis802_11Encryption3Enabled; ++ break; ++ default: ++ break; ++ } ++ // set to correct offset for next parsing ++ pTmp += sizeof(CIPHER_SUITE_STRUCT); ++ ++ // 2. Get pairwise cipher counts ++ //Count = *(PUSHORT) pTmp; ++ Count = (pTmp[1] << 8) + pTmp[0]; ++ pTmp += sizeof(USHORT); ++ ++ // 3. Get pairwise cipher ++ // Parsing all unicast cipher suite ++ while (Count > 0) { ++ // Skip OUI + pCipher = (PCIPHER_SUITE_STRUCT) pTmp; +- if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; +- +- // Parse group cipher +- switch (pCipher->Type) +- { +- case 1: +- pBss->WPA2.GroupCipher = Ndis802_11GroupWEP40Enabled; +- break; +- case 5: +- pBss->WPA2.GroupCipher = Ndis802_11GroupWEP104Enabled; +- break; +- case 2: +- pBss->WPA2.GroupCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- pBss->WPA2.GroupCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; ++ TmpCipher = Ndis802_11WEPDisabled; ++ switch (pCipher->Type) { ++ case 1: ++ case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway ++ TmpCipher = ++ Ndis802_11Encryption1Enabled; ++ break; ++ case 2: ++ TmpCipher = ++ Ndis802_11Encryption2Enabled; ++ break; ++ case 4: ++ TmpCipher = ++ Ndis802_11Encryption3Enabled; ++ break; ++ default: ++ break; + } +- // set to correct offset for next parsing +- pTmp += sizeof(CIPHER_SUITE_STRUCT); +- +- // 2. Get pairwise cipher counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); +- +- // 3. Get pairwise cipher +- // Parsing all unicast cipher suite +- while (Count > 0) +- { +- // Skip OUI +- pCipher = (PCIPHER_SUITE_STRUCT) pTmp; +- TmpCipher = Ndis802_11WEPDisabled; +- switch (pCipher->Type) +- { +- case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway +- TmpCipher = Ndis802_11Encryption1Enabled; +- break; +- case 2: +- TmpCipher = Ndis802_11Encryption2Enabled; +- break; +- case 4: +- TmpCipher = Ndis802_11Encryption3Enabled; +- break; +- default: +- break; +- } +- if (TmpCipher > pBss->WPA2.PairCipher) +- { +- // Move the lower cipher suite to PairCipherAux +- pBss->WPA2.PairCipherAux = pBss->WPA2.PairCipher; +- pBss->WPA2.PairCipher = TmpCipher; +- } +- else +- { +- pBss->WPA2.PairCipherAux = TmpCipher; +- } +- pTmp += sizeof(CIPHER_SUITE_STRUCT); +- Count--; +- } ++ if (TmpCipher > pBss->WPA2.PairCipher) { ++ // Move the lower cipher suite to PairCipherAux ++ pBss->WPA2.PairCipherAux = ++ pBss->WPA2.PairCipher; ++ pBss->WPA2.PairCipher = TmpCipher; ++ } else { ++ pBss->WPA2.PairCipherAux = TmpCipher; ++ } ++ pTmp += sizeof(CIPHER_SUITE_STRUCT); ++ Count--; ++ } + +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; +- Count = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ // 4. get AKM suite counts ++ //Count = *(PUSHORT) pTmp; ++ Count = (pTmp[1] << 8) + pTmp[0]; ++ pTmp += sizeof(USHORT); + +- // 5. Get AKM ciphers +- // Parsing all AKM ciphers +- while (Count > 0) +- { +- pAKM = (PAKM_SUITE_STRUCT) pTmp; +- if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +- break; ++ // 5. Get AKM ciphers ++ // Parsing all AKM ciphers ++ while (Count > 0) { ++ pAKM = (PAKM_SUITE_STRUCT) pTmp; ++ if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) ++ break; + +- switch (pAKM->Type) +- { +- case 1: +- // Set AP support WPA-enterprise mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2; +- break; +- case 2: +- // Set AP support WPA-PSK mode +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeWPA2PSK; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeWPA2PSK; +- break; +- default: +- if (pBss->AuthMode == Ndis802_11AuthModeOpen) +- pBss->AuthMode = Ndis802_11AuthModeMax; +- else +- pBss->AuthModeAux = Ndis802_11AuthModeMax; +- break; ++ switch (pAKM->Type) { ++ case 1: ++ // Set AP support WPA-enterprise mode ++ if (pBss->AuthMode == ++ Ndis802_11AuthModeOpen) ++ pBss->AuthMode = ++ Ndis802_11AuthModeWPA2; ++ else ++ pBss->AuthModeAux = ++ Ndis802_11AuthModeWPA2; ++ break; ++ case 2: ++ // Set AP support WPA-PSK mode ++ if (pBss->AuthMode == ++ Ndis802_11AuthModeOpen) ++ pBss->AuthMode = ++ Ndis802_11AuthModeWPA2PSK; ++ else ++ pBss->AuthModeAux = ++ Ndis802_11AuthModeWPA2PSK; ++ break; ++ default: ++ if (pBss->AuthMode == ++ Ndis802_11AuthModeOpen) ++ pBss->AuthMode = ++ Ndis802_11AuthModeMax; ++ else ++ pBss->AuthModeAux = ++ Ndis802_11AuthModeMax; ++ break; + } +- pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); +- Count--; ++ pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); ++ Count--; + } + +- // Fixed for WPA-None +- if (pBss->BssType == BSS_ADHOC) +- { +- pBss->AuthMode = Ndis802_11AuthModeWPANone; +- pBss->AuthModeAux = Ndis802_11AuthModeWPANone; +- pBss->WPA.PairCipherAux = pBss->WPA2.PairCipherAux; +- pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher; +- pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver +- if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled) +- pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher; +- } +- pBss->WepStatus = pBss->WPA2.PairCipher; ++ // Fixed for WPA-None ++ if (pBss->BssType == BSS_ADHOC) { ++ pBss->AuthMode = Ndis802_11AuthModeWPANone; ++ pBss->AuthModeAux = Ndis802_11AuthModeWPANone; ++ pBss->WPA.PairCipherAux = ++ pBss->WPA2.PairCipherAux; ++ pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher; ++ pBss->WepStatus = pBss->WPA.GroupCipher; ++ // Patched bugs for old driver ++ if (pBss->WPA.PairCipherAux == ++ Ndis802_11WEPDisabled) ++ pBss->WPA.PairCipherAux = ++ pBss->WPA.GroupCipher; ++ } ++ pBss->WepStatus = pBss->WPA2.PairCipher; + +- // 6. Get RSN capability +- //pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; +- pBss->WPA2.RsnCapability = (pTmp[1]<<8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ // 6. Get RSN capability ++ //pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; ++ pBss->WPA2.RsnCapability = (pTmp[1] << 8) + pTmp[0]; ++ pTmp += sizeof(USHORT); + +- // Check the Pair & Group, if different, turn on mixed mode flag +- if (pBss->WPA2.GroupCipher != pBss->WPA2.PairCipher) +- pBss->WPA2.bMixMode = TRUE; ++ // Check the Pair & Group, if different, turn on mixed mode flag ++ if (pBss->WPA2.GroupCipher != pBss->WPA2.PairCipher) ++ pBss->WPA2.bMixMode = TRUE; + +- break; +- default: +- break; ++ break; ++ default: ++ break; + } + Length -= (pEid->Len + 2); + } +@@ -4419,18 +4549,15 @@ VOID BssCipherParse( + * \pre + * \post + */ +-VOID MacAddrRandomBssid( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pAddr) ++VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr) + { + INT i; + +- for (i = 0; i < MAC_ADDR_LEN; i++) +- { ++ for (i = 0; i < MAC_ADDR_LEN; i++) { + pAddr[i] = RandomByte(pAd); + } + +- pAddr[0] = (pAddr[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx ++ pAddr[0] = (pAddr[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx + } + + /*! \brief init the management mac frame header +@@ -4448,23 +4575,20 @@ VOID MacAddrRandomBssid( + IRQL = DISPATCH_LEVEL + + */ +-VOID MgtMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid) ++VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PHEADER_802_11 pHdr80211, ++ IN UCHAR SubType, ++ IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid) + { + NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); + + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SubType; +-// if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type +-// pHdr80211->FC.Type = BTYPE_CNTL; ++// if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type ++// pHdr80211->FC.Type = BTYPE_CNTL; + pHdr80211->FC.ToDs = ToDs; + COPY_MAC_ADDR(pHdr80211->Addr1, pDA); +- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); ++ COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); + } + +@@ -4490,31 +4614,27 @@ VOID MgtMacHeaderInit( + IRQL = DISPATCH_LEVEL + + ****************************************************************************/ +-ULONG MakeOutgoingFrame( +- OUT UCHAR *Buffer, +- OUT ULONG *FrameLen, ...) ++ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) + { +- UCHAR *p; +- int leng; +- ULONG TotLeng; ++ UCHAR *p; ++ int leng; ++ ULONG TotLeng; + va_list Args; + + // calculates the total length + TotLeng = 0; + va_start(Args, FrameLen); +- do +- { ++ do { + leng = va_arg(Args, int); +- if (leng == END_OF_ARGS) +- { ++ if (leng == END_OF_ARGS) { + break; +- } ++ } + p = va_arg(Args, PVOID); + NdisMoveMemory(&Buffer[TotLeng], p, leng); + TotLeng = TotLeng + leng; +- } while(TRUE); ++ } while (TRUE); + +- va_end(Args); /* clean up */ ++ va_end(Args); /* clean up */ + *FrameLen = TotLeng; + return TotLeng; + } +@@ -4533,19 +4653,17 @@ ULONG MakeOutgoingFrame( + IRQL = PASSIVE_LEVEL + + */ +-NDIS_STATUS MlmeQueueInit( +- IN MLME_QUEUE *Queue) ++NDIS_STATUS MlmeQueueInit(IN MLME_QUEUE * Queue) + { + INT i; + + NdisAllocateSpinLock(&Queue->Lock); + +- Queue->Num = 0; ++ Queue->Num = 0; + Queue->Head = 0; + Queue->Tail = 0; + +- for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++) +- { ++ for (i = 0; i < MAX_LEN_OF_MLME_QUEUE; i++) { + Queue->Entry[i].Occupied = FALSE; + Queue->Entry[i].MsgLen = 0; + NdisZeroMemory(Queue->Entry[i].Msg, MGMT_DMA_BUFFER_SIZE); +@@ -4569,52 +4687,47 @@ NDIS_STATUS MlmeQueueInit( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeEnqueue( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg) ++BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, ++ IN ULONG Machine, ++ IN ULONG MsgType, IN ULONG MsgLen, IN VOID * Msg) + { + INT Tail; +- MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; ++ MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return FALSE; + + // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { +- DBGPRINT_ERR(("MlmeEnqueue: msg too large, size = %ld \n", MsgLen)); ++ if (MsgLen > MGMT_DMA_BUFFER_SIZE) { ++ DBGPRINT_ERR(("MlmeEnqueue: msg too large, size = %ld \n", ++ MsgLen)); + return FALSE; + } + +- if (MlmeQueueFull(Queue)) +- { ++ if (MlmeQueueFull(Queue)) { + return FALSE; +- } ++ } + + NdisAcquireSpinLock(&(Queue->Lock)); + Tail = Queue->Tail; + Queue->Tail++; + Queue->Num++; +- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { ++ if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) { + Queue->Tail = 0; +- } ++ } + + Queue->Entry[Tail].Wcid = RESERVED_WCID; + Queue->Entry[Tail].Occupied = TRUE; + Queue->Entry[Tail].Machine = Machine; + Queue->Entry[Tail].MsgType = MsgType; +- Queue->Entry[Tail].MsgLen = MsgLen; ++ Queue->Entry[Tail].MsgLen = MsgLen; + +- if (Msg != NULL) +- { ++ if (Msg != NULL) { + NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); +- } ++ } + + NdisReleaseSpinLock(&(Queue->Lock)); + return TRUE; +@@ -4634,77 +4747,68 @@ BOOLEAN MlmeEnqueue( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, +- IN VOID *Msg, +- IN UCHAR Signal) ++BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++ IN ULONG Wcid, ++ IN ULONG TimeStampHigh, ++ IN ULONG TimeStampLow, ++ IN UCHAR Rssi0, ++ IN UCHAR Rssi1, ++ IN UCHAR Rssi2, ++ IN ULONG MsgLen, IN VOID * Msg, IN UCHAR Signal) + { +- INT Tail, Machine; +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- INT MsgType; +- MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue; +- ++ INT Tail, Machine; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ INT MsgType; ++ MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) +- { ++ if (RTMP_TEST_FLAG ++ (pAd, ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) { + DBGPRINT_ERR(("MlmeEnqueueForRecv: fRTMP_ADAPTER_HALT_IN_PROGRESS\n")); + return FALSE; + } +- + // First check the size, it MUST not exceed the mlme queue size +- if (MsgLen > MGMT_DMA_BUFFER_SIZE) +- { ++ if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("MlmeEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); + return FALSE; + } + +- if (MlmeQueueFull(Queue)) +- { ++ if (MlmeQueueFull(Queue)) { + return FALSE; + } + +- { +- if (!MsgTypeSubst(pAd, pFrame, &Machine, &MsgType)) +- { +- DBGPRINT_ERR(("MlmeEnqueueForRecv: un-recongnized mgmt->subtype=%d\n",pFrame->Hdr.FC.SubType)); ++ { ++ if (!MsgTypeSubst(pAd, pFrame, &Machine, &MsgType)) { ++ DBGPRINT_ERR(("MlmeEnqueueForRecv: un-recongnized mgmt->subtype=%d\n", pFrame->Hdr.FC.SubType)); + return FALSE; +- } + } ++ } + + // OK, we got all the informations, it is time to put things into queue + NdisAcquireSpinLock(&(Queue->Lock)); + Tail = Queue->Tail; + Queue->Tail++; + Queue->Num++; +- if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) +- { ++ if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE) { + Queue->Tail = 0; +- } ++ } + Queue->Entry[Tail].Occupied = TRUE; + Queue->Entry[Tail].Machine = Machine; + Queue->Entry[Tail].MsgType = MsgType; +- Queue->Entry[Tail].MsgLen = MsgLen; ++ Queue->Entry[Tail].MsgLen = MsgLen; + Queue->Entry[Tail].TimeStamp.u.LowPart = TimeStampLow; + Queue->Entry[Tail].TimeStamp.u.HighPart = TimeStampHigh; + Queue->Entry[Tail].Rssi0 = Rssi0; + Queue->Entry[Tail].Rssi1 = Rssi1; + Queue->Entry[Tail].Rssi2 = Rssi2; + Queue->Entry[Tail].Signal = Signal; +- Queue->Entry[Tail].Wcid = (UCHAR)Wcid; ++ Queue->Entry[Tail].Wcid = (UCHAR) Wcid; + + Queue->Entry[Tail].Channel = pAd->LatchRfRegs.Channel; + +- if (Msg != NULL) +- { ++ if (Msg != NULL) { + NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen); + } + +@@ -4715,7 +4819,6 @@ BOOLEAN MlmeEnqueueForRecv( + return TRUE; + } + +- + /*! \brief Dequeue a message from the MLME Queue + * \param *Queue The MLME Queue + * \param *Elem The message dequeued from MLME Queue +@@ -4726,16 +4829,13 @@ BOOLEAN MlmeEnqueueForRecv( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeDequeue( +- IN MLME_QUEUE *Queue, +- OUT MLME_QUEUE_ELEM **Elem) ++BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem) + { + NdisAcquireSpinLock(&(Queue->Lock)); + *Elem = &(Queue->Entry[Queue->Head]); + Queue->Num--; + Queue->Head++; +- if (Queue->Head == MAX_LEN_OF_MLME_QUEUE) +- { ++ if (Queue->Head == MAX_LEN_OF_MLME_QUEUE) { + Queue->Head = 0; + } + NdisReleaseSpinLock(&(Queue->Lock)); +@@ -4743,55 +4843,48 @@ BOOLEAN MlmeDequeue( + } + + // IRQL = DISPATCH_LEVEL +-VOID MlmeRestartStateMachine( +- IN PRTMP_ADAPTER pAd) ++VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + { + #ifdef RTMP_MAC_PCI +- MLME_QUEUE_ELEM *Elem = NULL; ++ MLME_QUEUE_ELEM *Elem = NULL; + #endif // RTMP_MAC_PCI // +- BOOLEAN Cancelled; ++ BOOLEAN Cancelled; + + DBGPRINT(RT_DEBUG_TRACE, ("MlmeRestartStateMachine \n")); + + #ifdef RTMP_MAC_PCI + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); +- if(pAd->Mlme.bRunning) +- { ++ if (pAd->Mlme.bRunning) { + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); + return; +- } +- else +- { ++ } else { + pAd->Mlme.bRunning = TRUE; + } + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); + + // Remove all Mlme queues elements +- while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) +- { ++ while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) { + //From message type, determine which state machine I should drive +- if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) +- { ++ if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) { + // free MLME element + Elem->Occupied = FALSE; + Elem->MsgLen = 0; + +- } +- else { ++ } else { + DBGPRINT_ERR(("MlmeRestartStateMachine: MlmeQueue empty\n")); +- } ++ } + } + #endif // RTMP_MAC_PCI // + + { + // Cancel all timer events + // Be careful to cancel new added timer +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); + + } + +@@ -4804,12 +4897,12 @@ VOID MlmeRestartStateMachine( + + { + // Set all state machines back IDLE +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; + pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE; +- pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; +- pAd->Mlme.ActMachine.CurrState = ACT_IDLE; ++ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; ++ pAd->Mlme.ActMachine.CurrState = ACT_IDLE; + } + + #ifdef RTMP_MAC_PCI +@@ -4829,8 +4922,7 @@ VOID MlmeRestartStateMachine( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeQueueEmpty( +- IN MLME_QUEUE *Queue) ++BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue) + { + BOOLEAN Ans; + +@@ -4851,13 +4943,13 @@ BOOLEAN MlmeQueueEmpty( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeQueueFull( +- IN MLME_QUEUE *Queue) ++BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue) + { + BOOLEAN Ans; + + NdisAcquireSpinLock(&(Queue->Lock)); +- Ans = (Queue->Num == MAX_LEN_OF_MLME_QUEUE || Queue->Entry[Queue->Tail].Occupied); ++ Ans = (Queue->Num == MAX_LEN_OF_MLME_QUEUE ++ || Queue->Entry[Queue->Tail].Occupied); + NdisReleaseSpinLock(&(Queue->Lock)); + + return Ans; +@@ -4873,18 +4965,16 @@ BOOLEAN MlmeQueueFull( + IRQL = PASSIVE_LEVEL + + */ +-VOID MlmeQueueDestroy( +- IN MLME_QUEUE *pQueue) ++VOID MlmeQueueDestroy(IN MLME_QUEUE * pQueue) + { + NdisAcquireSpinLock(&(pQueue->Lock)); +- pQueue->Num = 0; ++ pQueue->Num = 0; + pQueue->Head = 0; + pQueue->Tail = 0; + NdisReleaseSpinLock(&(pQueue->Lock)); + NdisFreeSpinLock(&(pQueue->Lock)); + } + +- + /*! \brief To substitute the message type if the message is coming from external + * \param pFrame The frame received + * \param *Machine The state machine +@@ -4896,108 +4986,97 @@ VOID MlmeQueueDestroy( + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType) ++BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, ++ IN PFRAME_802_11 pFrame, ++ OUT INT * Machine, OUT INT * MsgType) + { +- USHORT Seq, Alg; +- UCHAR EAPType; +- PUCHAR pData; ++ USHORT Seq, Alg; ++ UCHAR EAPType; ++ PUCHAR pData; + + // Pointer to start of data frames including SNAP header + pData = (PUCHAR) pFrame + LENGTH_802_11; + + // The only data type will pass to this function is EAPOL frame +- if (pFrame->Hdr.FC.Type == BTYPE_DATA) +- { ++ if (pFrame->Hdr.FC.Type == BTYPE_DATA) { + { +- *Machine = WPA_STATE_MACHINE; +- EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1); +- return (WpaMsgTypeSubst(EAPType, (INT *) MsgType)); ++ *Machine = WPA_STATE_MACHINE; ++ EAPType = ++ *((UCHAR *) pFrame + LENGTH_802_11 + ++ LENGTH_802_1_H + 1); ++ return (WpaMsgTypeSubst(EAPType, (INT *) MsgType)); + } + } + +- switch (pFrame->Hdr.FC.SubType) +- { +- case SUBTYPE_ASSOC_REQ: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_ASSOC_REQ; +- break; +- case SUBTYPE_ASSOC_RSP: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_ASSOC_RSP; +- break; +- case SUBTYPE_REASSOC_REQ: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_REASSOC_REQ; +- break; +- case SUBTYPE_REASSOC_RSP: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_REASSOC_RSP; +- break; +- case SUBTYPE_PROBE_REQ: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_PROBE_REQ; +- break; +- case SUBTYPE_PROBE_RSP: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_PROBE_RSP; +- break; +- case SUBTYPE_BEACON: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_BEACON; +- break; +- case SUBTYPE_ATIM: +- *Machine = SYNC_STATE_MACHINE; +- *MsgType = MT2_PEER_ATIM; +- break; +- case SUBTYPE_DISASSOC: +- *Machine = ASSOC_STATE_MACHINE; +- *MsgType = MT2_PEER_DISASSOC_REQ; +- break; +- case SUBTYPE_AUTH: +- // get the sequence number from payload 24 Mac Header + 2 bytes algorithm +- NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); +- NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); +- if (Seq == 1 || Seq == 3) +- { +- *Machine = AUTH_RSP_STATE_MACHINE; +- *MsgType = MT2_PEER_AUTH_ODD; +- } +- else if (Seq == 2 || Seq == 4) +- { +- if (Alg == AUTH_MODE_OPEN || Alg == AUTH_MODE_KEY) +- { +- *Machine = AUTH_STATE_MACHINE; +- *MsgType = MT2_PEER_AUTH_EVEN; +- } +- } +- else +- { +- return FALSE; +- } +- break; +- case SUBTYPE_DEAUTH: ++ switch (pFrame->Hdr.FC.SubType) { ++ case SUBTYPE_ASSOC_REQ: ++ *Machine = ASSOC_STATE_MACHINE; ++ *MsgType = MT2_PEER_ASSOC_REQ; ++ break; ++ case SUBTYPE_ASSOC_RSP: ++ *Machine = ASSOC_STATE_MACHINE; ++ *MsgType = MT2_PEER_ASSOC_RSP; ++ break; ++ case SUBTYPE_REASSOC_REQ: ++ *Machine = ASSOC_STATE_MACHINE; ++ *MsgType = MT2_PEER_REASSOC_REQ; ++ break; ++ case SUBTYPE_REASSOC_RSP: ++ *Machine = ASSOC_STATE_MACHINE; ++ *MsgType = MT2_PEER_REASSOC_RSP; ++ break; ++ case SUBTYPE_PROBE_REQ: ++ *Machine = SYNC_STATE_MACHINE; ++ *MsgType = MT2_PEER_PROBE_REQ; ++ break; ++ case SUBTYPE_PROBE_RSP: ++ *Machine = SYNC_STATE_MACHINE; ++ *MsgType = MT2_PEER_PROBE_RSP; ++ break; ++ case SUBTYPE_BEACON: ++ *Machine = SYNC_STATE_MACHINE; ++ *MsgType = MT2_PEER_BEACON; ++ break; ++ case SUBTYPE_ATIM: ++ *Machine = SYNC_STATE_MACHINE; ++ *MsgType = MT2_PEER_ATIM; ++ break; ++ case SUBTYPE_DISASSOC: ++ *Machine = ASSOC_STATE_MACHINE; ++ *MsgType = MT2_PEER_DISASSOC_REQ; ++ break; ++ case SUBTYPE_AUTH: ++ // get the sequence number from payload 24 Mac Header + 2 bytes algorithm ++ NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); ++ NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); ++ if (Seq == 1 || Seq == 3) { + *Machine = AUTH_RSP_STATE_MACHINE; +- *MsgType = MT2_PEER_DEAUTH; +- break; +- case SUBTYPE_ACTION: +- *Machine = ACTION_STATE_MACHINE; +- // Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support +- if ((pFrame->Octet[0]&0x7F) > MAX_PEER_CATE_MSG) +- { +- *MsgType = MT2_ACT_INVALID; ++ *MsgType = MT2_PEER_AUTH_ODD; ++ } else if (Seq == 2 || Seq == 4) { ++ if (Alg == AUTH_MODE_OPEN || Alg == AUTH_MODE_KEY) { ++ *Machine = AUTH_STATE_MACHINE; ++ *MsgType = MT2_PEER_AUTH_EVEN; ++ } ++ } else { ++ return FALSE; + } +- else +- { +- *MsgType = (pFrame->Octet[0]&0x7F); ++ break; ++ case SUBTYPE_DEAUTH: ++ *Machine = AUTH_RSP_STATE_MACHINE; ++ *MsgType = MT2_PEER_DEAUTH; ++ break; ++ case SUBTYPE_ACTION: ++ *Machine = ACTION_STATE_MACHINE; ++ // Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support ++ if ((pFrame->Octet[0] & 0x7F) > MAX_PEER_CATE_MSG) { ++ *MsgType = MT2_ACT_INVALID; ++ } else { ++ *MsgType = (pFrame->Octet[0] & 0x7F); + } +- break; +- default: +- return FALSE; +- break; ++ break; ++ default: ++ return FALSE; ++ break; + } + + return TRUE; +@@ -5021,29 +5100,25 @@ BOOLEAN MsgTypeSubst( + IRQL = PASSIVE_LEVEL + + */ +-VOID StateMachineInit( +- IN STATE_MACHINE *S, +- IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, +- IN ULONG Base) ++VOID StateMachineInit(IN STATE_MACHINE * S, ++ IN STATE_MACHINE_FUNC Trans[], ++ IN ULONG StNr, ++ IN ULONG MsgNr, ++ IN STATE_MACHINE_FUNC DefFunc, ++ IN ULONG InitState, IN ULONG Base) + { + ULONG i, j; + + // set number of states and messages + S->NrState = StNr; +- S->NrMsg = MsgNr; +- S->Base = Base; ++ S->NrMsg = MsgNr; ++ S->Base = Base; + +- S->TransFunc = Trans; ++ S->TransFunc = Trans; + + // init all state transition to default function +- for (i = 0; i < StNr; i++) +- { +- for (j = 0; j < MsgNr; j++) +- { ++ for (i = 0; i < StNr; i++) { ++ for (j = 0; j < MsgNr; j++) { + S->TransFunc[i * MsgNr + j] = DefFunc; + } + } +@@ -5063,18 +5138,15 @@ VOID StateMachineInit( + IRQL = PASSIVE_LEVEL + + */ +-VOID StateMachineSetAction( +- IN STATE_MACHINE *S, +- IN ULONG St, +- IN ULONG Msg, +- IN STATE_MACHINE_FUNC Func) ++VOID StateMachineSetAction(IN STATE_MACHINE * S, ++ IN ULONG St, ++ IN ULONG Msg, IN STATE_MACHINE_FUNC Func) + { + ULONG MsgIdx; + + MsgIdx = Msg - S->Base; + +- if (St < S->NrState && MsgIdx < S->NrMsg) +- { ++ if (St < S->NrState && MsgIdx < S->NrMsg) { + // boundary checking before setting the action + S->TransFunc[St * S->NrMsg + MsgIdx] = Func; + } +@@ -5089,12 +5161,11 @@ VOID StateMachineSetAction( + IRQL = DISPATCH_LEVEL + + */ +-VOID StateMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem) ++VOID StateMachinePerformAction(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem) + { +- (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base]))(pAd, Elem); ++ (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base])) ++ (pAd, Elem); + } + + /* +@@ -5105,9 +5176,7 @@ VOID StateMachinePerformAction( + StateMachinePerformAction() + ========================================================================== + */ +-VOID Drop( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +@@ -5123,9 +5192,7 @@ VOID Drop( + + ========================================================================== + */ +-VOID LfsrInit( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Seed) ++VOID LfsrInit(IN PRTMP_ADAPTER pAd, IN ULONG Seed) + { + if (Seed == 0) + pAd->Mlme.ShiftReg = 1; +@@ -5138,8 +5205,7 @@ VOID LfsrInit( + Description: + ========================================================================== + */ +-UCHAR RandomByte( +- IN PRTMP_ADAPTER pAd) ++UCHAR RandomByte(IN PRTMP_ADAPTER pAd) + { + ULONG i; + UCHAR R, Result; +@@ -5147,17 +5213,15 @@ UCHAR RandomByte( + R = 0; + + if (pAd->Mlme.ShiftReg == 0) +- NdisGetSystemUpTime((ULONG *)&pAd->Mlme.ShiftReg); ++ NdisGetSystemUpTime((ULONG *) & pAd->Mlme.ShiftReg); + +- for (i = 0; i < 8; i++) +- { +- if (pAd->Mlme.ShiftReg & 0x00000001) +- { +- pAd->Mlme.ShiftReg = ((pAd->Mlme.ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000; ++ for (i = 0; i < 8; i++) { ++ if (pAd->Mlme.ShiftReg & 0x00000001) { ++ pAd->Mlme.ShiftReg = ++ ((pAd->Mlme. ++ ShiftReg ^ LFSR_MASK) >> 1) | 0x80000000; + Result = 1; +- } +- else +- { ++ } else { + pAd->Mlme.ShiftReg = pAd->Mlme.ShiftReg >> 1; + Result = 0; + } +@@ -5167,7 +5231,6 @@ UCHAR RandomByte( + return R; + } + +- + /* + ======================================================================== + +@@ -5184,13 +5247,11 @@ UCHAR RandomByte( + + ======================================================================== + */ +-VOID RTMPCheckRates( +- IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], +- IN OUT UCHAR *SupRateLen) ++VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++ IN OUT UCHAR SupRate[], IN OUT UCHAR * SupRateLen) + { +- UCHAR RateIdx, i, j; +- UCHAR NewRate[12], NewRateLen; ++ UCHAR RateIdx, i, j; ++ UCHAR NewRate[12], NewRateLen; + + NewRateLen = 0; + +@@ -5209,43 +5270,37 @@ VOID RTMPCheckRates( + NdisMoveMemory(SupRate, NewRate, NewRateLen); + } + +-BOOLEAN RTMPCheckChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, +- IN UCHAR Channel) ++BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, ++ IN UCHAR CentralChannel, IN UCHAR Channel) + { +- UCHAR k; +- UCHAR UpperChannel = 0, LowerChannel = 0; +- UCHAR NoEffectChannelinList = 0; ++ UCHAR k; ++ UCHAR UpperChannel = 0, LowerChannel = 0; ++ UCHAR NoEffectChannelinList = 0; + + // Find upper and lower channel according to 40MHz current operation. +- if (CentralChannel < Channel) +- { ++ if (CentralChannel < Channel) { + UpperChannel = Channel; + if (CentralChannel > 2) + LowerChannel = CentralChannel - 2; + else + return FALSE; +- } +- else if (CentralChannel > Channel) +- { ++ } else if (CentralChannel > Channel) { + UpperChannel = CentralChannel + 2; + LowerChannel = Channel; + } + +- for (k = 0;k < pAd->ChannelListNum;k++) +- { +- if (pAd->ChannelList[k].Channel == UpperChannel) +- { +- NoEffectChannelinList ++; ++ for (k = 0; k < pAd->ChannelListNum; k++) { ++ if (pAd->ChannelList[k].Channel == UpperChannel) { ++ NoEffectChannelinList++; + } +- if (pAd->ChannelList[k].Channel == LowerChannel) +- { +- NoEffectChannelinList ++; ++ if (pAd->ChannelList[k].Channel == LowerChannel) { ++ NoEffectChannelinList++; + } + } + +- DBGPRINT(RT_DEBUG_TRACE,("Total Channel in Channel List = [%d]\n", NoEffectChannelinList)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Total Channel in Channel List = [%d]\n", ++ NoEffectChannelinList)); + if (NoEffectChannelinList == 2) + return TRUE; + else +@@ -5268,88 +5323,114 @@ BOOLEAN RTMPCheckChannel( + + ======================================================================== + */ +-BOOLEAN RTMPCheckHt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo) ++BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, ++ IN HT_CAPABILITY_IE * pHtCapability, ++ IN ADD_HT_INFO_IE * pAddHtInfo) + { + if (Wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; + + // If use AMSDU, set flag. + if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_AMSDU_INUSED); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_AMSDU_INUSED); + // Save Peer Capability + if (pHtCapability->HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_SGI20_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_SGI20_CAPABLE); + if (pHtCapability->HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_SGI40_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_SGI40_CAPABLE); + if (pHtCapability->HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_TxSTBC_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_TxSTBC_CAPABLE); + if (pHtCapability->HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_RxSTBC_CAPABLE); +- if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) +- { +- CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], fCLIENT_STATUS_RDG_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_RxSTBC_CAPABLE); ++ if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) { ++ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], ++ fCLIENT_STATUS_RDG_CAPABLE); + } + +- if (Wcid < MAX_LEN_OF_MAC_TABLE) +- { +- pAd->MacTab.Content[Wcid].MpduDensity = pHtCapability->HtCapParm.MpduDensity; ++ if (Wcid < MAX_LEN_OF_MAC_TABLE) { ++ pAd->MacTab.Content[Wcid].MpduDensity = ++ pHtCapability->HtCapParm.MpduDensity; + } +- + // Will check ChannelWidth for MCSSet[4] below + pAd->MlmeAux.HtCapability.MCSSet[4] = 0x1; +- switch (pAd->CommonCfg.RxStream) +- { +- case 1: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- case 2: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- case 3: +- pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[2] = 0xff; +- pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; +- break; +- } +- +- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy.ChannelWidth; +- +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPCheckHt:: HtCapInfo.ChannelWidth=%d, RecomWidth=%d, DesiredHtPhy.ChannelWidth=%d, BW40MAvailForA/G=%d/%d, PhyMode=%d \n", +- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth, pAddHtInfo->AddHtInfo.RecomWidth, pAd->CommonCfg.DesiredHtPhy.ChannelWidth, +- pAd->NicConfig2.field.BW40MAvailForA, pAd->NicConfig2.field.BW40MAvailForG, pAd->CommonCfg.PhyMode)); +- +- pAd->MlmeAux.HtCapability.HtCapInfo.GF = pHtCapability->HtCapInfo.GF &pAd->CommonCfg.DesiredHtPhy.GF; ++ switch (pAd->CommonCfg.RxStream) { ++ case 1: ++ pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[1] = 0x00; ++ pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; ++ pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; ++ break; ++ case 2: ++ pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[2] = 0x00; ++ pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; ++ break; ++ case 3: ++ pAd->MlmeAux.HtCapability.MCSSet[0] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[1] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[2] = 0xff; ++ pAd->MlmeAux.HtCapability.MCSSet[3] = 0x00; ++ break; ++ } ++ ++ pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = ++ pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy. ++ ChannelWidth; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPCheckHt:: HtCapInfo.ChannelWidth=%d, RecomWidth=%d, DesiredHtPhy.ChannelWidth=%d, BW40MAvailForA/G=%d/%d, PhyMode=%d \n", ++ pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth, ++ pAddHtInfo->AddHtInfo.RecomWidth, ++ pAd->CommonCfg.DesiredHtPhy.ChannelWidth, ++ pAd->NicConfig2.field.BW40MAvailForA, ++ pAd->NicConfig2.field.BW40MAvailForG, ++ pAd->CommonCfg.PhyMode)); ++ ++ pAd->MlmeAux.HtCapability.HtCapInfo.GF = ++ pHtCapability->HtCapInfo.GF & pAd->CommonCfg.DesiredHtPhy.GF; + + // Send Assoc Req with my HT capability. +- pAd->MlmeAux.HtCapability.HtCapInfo.AMsduSize = pAd->CommonCfg.DesiredHtPhy.AmsduSize; +- pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs = pAd->CommonCfg.DesiredHtPhy.MimoPs; +- pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20) & (pHtCapability->HtCapInfo.ShortGIfor20); +- pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40 = (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40) & (pHtCapability->HtCapInfo.ShortGIfor40); +- pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC = (pAd->CommonCfg.DesiredHtPhy.TxSTBC)&(pHtCapability->HtCapInfo.RxSTBC); +- pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC = (pAd->CommonCfg.DesiredHtPhy.RxSTBC)&(pHtCapability->HtCapInfo.TxSTBC); +- pAd->MlmeAux.HtCapability.HtCapParm.MaxRAmpduFactor = pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor; +- pAd->MlmeAux.HtCapability.HtCapParm.MpduDensity = pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity; +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = pHtCapability->ExtHtCapInfo.PlusHTC; +- pAd->MacTab.Content[Wcid].HTCapability.ExtHtCapInfo.PlusHTC = pHtCapability->ExtHtCapInfo.PlusHTC; +- if (pAd->CommonCfg.bRdg) +- { +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.RDGSupport = pHtCapability->ExtHtCapInfo.RDGSupport; +- pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = 1; +- } +- +- if (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_20) +- pAd->MlmeAux.HtCapability.MCSSet[4] = 0x0; // BW20 can't transmit MCS32 ++ pAd->MlmeAux.HtCapability.HtCapInfo.AMsduSize = ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize; ++ pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs = ++ pAd->CommonCfg.DesiredHtPhy.MimoPs; ++ pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20 = ++ (pAd->CommonCfg.DesiredHtPhy.ShortGIfor20) & (pHtCapability-> ++ HtCapInfo. ++ ShortGIfor20); ++ pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40 = ++ (pAd->CommonCfg.DesiredHtPhy.ShortGIfor40) & (pHtCapability-> ++ HtCapInfo. ++ ShortGIfor40); ++ pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC = ++ (pAd->CommonCfg.DesiredHtPhy.TxSTBC) & (pHtCapability->HtCapInfo. ++ RxSTBC); ++ pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC = ++ (pAd->CommonCfg.DesiredHtPhy.RxSTBC) & (pHtCapability->HtCapInfo. ++ TxSTBC); ++ pAd->MlmeAux.HtCapability.HtCapParm.MaxRAmpduFactor = ++ pAd->CommonCfg.DesiredHtPhy.MaxRAmpduFactor; ++ pAd->MlmeAux.HtCapability.HtCapParm.MpduDensity = ++ pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity; ++ pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = ++ pHtCapability->ExtHtCapInfo.PlusHTC; ++ pAd->MacTab.Content[Wcid].HTCapability.ExtHtCapInfo.PlusHTC = ++ pHtCapability->ExtHtCapInfo.PlusHTC; ++ if (pAd->CommonCfg.bRdg) { ++ pAd->MlmeAux.HtCapability.ExtHtCapInfo.RDGSupport = ++ pHtCapability->ExtHtCapInfo.RDGSupport; ++ pAd->MlmeAux.HtCapability.ExtHtCapInfo.PlusHTC = 1; ++ } ++ ++ if (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_20) ++ pAd->MlmeAux.HtCapability.MCSSet[4] = 0x0; // BW20 can't transmit MCS32 + + COPY_AP_HTSETTINGS_FROM_BEACON(pAd, pHtCapability); + return TRUE; +@@ -5371,65 +5452,60 @@ BOOLEAN RTMPCheckHt( + + ======================================================================== + */ +-VOID RTMPUpdateMlmeRate( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + { +- UCHAR MinimumRate; +- UCHAR ProperMlmeRate; //= RATE_54; +- UCHAR i, j, RateIdx = 12; //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +- BOOLEAN bMatch = FALSE; +- +- switch (pAd->CommonCfg.PhyMode) +- { +- case PHY_11B: ++ UCHAR MinimumRate; ++ UCHAR ProperMlmeRate; //= RATE_54; ++ UCHAR i, j, RateIdx = 12; //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ++ BOOLEAN bMatch = FALSE; ++ ++ switch (pAd->CommonCfg.PhyMode) { ++ case PHY_11B: ++ ProperMlmeRate = RATE_11; ++ MinimumRate = RATE_1; ++ break; ++ case PHY_11BG_MIXED: ++ case PHY_11ABGN_MIXED: ++ case PHY_11BGN_MIXED: ++ if ((pAd->MlmeAux.SupRateLen == 4) && ++ (pAd->MlmeAux.ExtRateLen == 0)) ++ // B only AP + ProperMlmeRate = RATE_11; +- MinimumRate = RATE_1; +- break; +- case PHY_11BG_MIXED: +- case PHY_11ABGN_MIXED: +- case PHY_11BGN_MIXED: +- if ((pAd->MlmeAux.SupRateLen == 4) && +- (pAd->MlmeAux.ExtRateLen == 0)) +- // B only AP +- ProperMlmeRate = RATE_11; +- else +- ProperMlmeRate = RATE_24; +- +- if (pAd->MlmeAux.Channel <= 14) +- MinimumRate = RATE_1; +- else +- MinimumRate = RATE_6; +- break; +- case PHY_11A: +- case PHY_11N_2_4G: // rt2860 need to check mlmerate for 802.11n +- case PHY_11GN_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11AN_MIXED: +- case PHY_11N_5G: ++ else + ProperMlmeRate = RATE_24; ++ ++ if (pAd->MlmeAux.Channel <= 14) ++ MinimumRate = RATE_1; ++ else + MinimumRate = RATE_6; +- break; +- case PHY_11ABG_MIXED: +- ProperMlmeRate = RATE_24; +- if (pAd->MlmeAux.Channel <= 14) +- MinimumRate = RATE_1; +- else +- MinimumRate = RATE_6; +- break; +- default: // error +- ProperMlmeRate = RATE_1; ++ break; ++ case PHY_11A: ++ case PHY_11N_2_4G: // rt2860 need to check mlmerate for 802.11n ++ case PHY_11GN_MIXED: ++ case PHY_11AGN_MIXED: ++ case PHY_11AN_MIXED: ++ case PHY_11N_5G: ++ ProperMlmeRate = RATE_24; ++ MinimumRate = RATE_6; ++ break; ++ case PHY_11ABG_MIXED: ++ ProperMlmeRate = RATE_24; ++ if (pAd->MlmeAux.Channel <= 14) + MinimumRate = RATE_1; +- break; +- } +- +- for (i = 0; i < pAd->MlmeAux.SupRateLen; i++) +- { +- for (j = 0; j < RateIdx; j++) +- { +- if ((pAd->MlmeAux.SupRate[i] & 0x7f) == RateIdTo500Kbps[j]) +- { +- if (j == ProperMlmeRate) +- { ++ else ++ MinimumRate = RATE_6; ++ break; ++ default: // error ++ ProperMlmeRate = RATE_1; ++ MinimumRate = RATE_1; ++ break; ++ } ++ ++ for (i = 0; i < pAd->MlmeAux.SupRateLen; i++) { ++ for (j = 0; j < RateIdx; j++) { ++ if ((pAd->MlmeAux.SupRate[i] & 0x7f) == ++ RateIdTo500Kbps[j]) { ++ if (j == ProperMlmeRate) { + bMatch = TRUE; + break; + } +@@ -5440,16 +5516,12 @@ VOID RTMPUpdateMlmeRate( + break; + } + +- if (bMatch == FALSE) +- { +- for (i = 0; i < pAd->MlmeAux.ExtRateLen; i++) +- { +- for (j = 0; j < RateIdx; j++) +- { +- if ((pAd->MlmeAux.ExtRate[i] & 0x7f) == RateIdTo500Kbps[j]) +- { +- if (j == ProperMlmeRate) +- { ++ if (bMatch == FALSE) { ++ for (i = 0; i < pAd->MlmeAux.ExtRateLen; i++) { ++ for (j = 0; j < RateIdx; j++) { ++ if ((pAd->MlmeAux.ExtRate[i] & 0x7f) == ++ RateIdTo500Kbps[j]) { ++ if (j == ProperMlmeRate) { + bMatch = TRUE; + break; + } +@@ -5461,51 +5533,48 @@ VOID RTMPUpdateMlmeRate( + } + } + +- if (bMatch == FALSE) +- { ++ if (bMatch == FALSE) { + ProperMlmeRate = MinimumRate; + } + + pAd->CommonCfg.MlmeRate = MinimumRate; + pAd->CommonCfg.RtsRate = ProperMlmeRate; +- if (pAd->CommonCfg.MlmeRate >= RATE_6) +- { ++ if (pAd->CommonCfg.MlmeRate >= RATE_6) { + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_OFDM; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- else +- { ++ pAd->CommonCfg.MlmeTransmit.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = ++ MODE_OFDM; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ } else { + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; + pAd->CommonCfg.MlmeTransmit.field.MCS = pAd->CommonCfg.MlmeRate; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_CCK; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = pAd->CommonCfg.MlmeRate; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = ++ MODE_CCK; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = ++ pAd->CommonCfg.MlmeRate; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateMlmeRate ==> MlmeTransmit = 0x%x \n" , pAd->CommonCfg.MlmeTransmit.word)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPUpdateMlmeRate ==> MlmeTransmit = 0x%x \n", ++ pAd->CommonCfg.MlmeTransmit.word)); + } + +-CHAR RTMPMaxRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2) ++CHAR RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++ IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2) + { +- CHAR larger = -127; ++ CHAR larger = -127; + +- if ((pAd->Antenna.field.RxPath == 1) && (Rssi0 != 0)) +- { ++ if ((pAd->Antenna.field.RxPath == 1) && (Rssi0 != 0)) { + larger = Rssi0; + } + +- if ((pAd->Antenna.field.RxPath >= 2) && (Rssi1 != 0)) +- { ++ if ((pAd->Antenna.field.RxPath >= 2) && (Rssi1 != 0)) { + larger = max(Rssi0, Rssi1); + } + +- if ((pAd->Antenna.field.RxPath == 3) && (Rssi2 != 0)) +- { ++ if ((pAd->Antenna.field.RxPath == 3) && (Rssi2 != 0)) { + larger = max(larger, Rssi2); + } + +@@ -5515,7 +5584,6 @@ CHAR RTMPMaxRssi( + return larger; + } + +- + /* + ======================================================================== + Routine Description: +@@ -5529,78 +5597,70 @@ CHAR RTMPMaxRssi( + + ======================================================================== + */ +-VOID AsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd) ++VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + { +- UCHAR BBPR3 = 0; ++ UCHAR BBPR3 = 0; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_NIC_NOT_EXIST | +- fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) || +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_RADIO_OFF | ++ fRTMP_ADAPTER_NIC_NOT_EXIST | ++ fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) || ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) + #ifdef RT30xx +- || (pAd->EepromAccess) ++ || (pAd->EepromAccess) + #endif // RT30xx // + #ifdef RT3090 +- || (pAd->bPCIclkOff == TRUE) ++ || (pAd->bPCIclkOff == TRUE) + #endif // RT3090 // +- ) +- return; +- ++ ) ++ return; + + { + //if (pAd->StaCfg.Psm == PWR_SAVE) +- // return; ++ // return; + +- { ++ { + +- if (pAd->StaCfg.Psm == PWR_SAVE) +- return; ++ if (pAd->StaCfg.Psm == PWR_SAVE) ++ return; + +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +- BBPR3 &= (~0x18); +- if(pAd->Antenna.field.RxPath == 3) +- { +- BBPR3 |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { +- BBPR3 |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { +- BBPR3 |= (0x0); +- } +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); ++ BBPR3 &= (~0x18); ++ if (pAd->Antenna.field.RxPath == 3) { ++ BBPR3 |= (0x10); ++ } else if (pAd->Antenna.field.RxPath == 2) { ++ BBPR3 |= (0x8); ++ } else if (pAd->Antenna.field.RxPath == 1) { ++ BBPR3 |= (0x0); ++ } ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); + #ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = BBPR3; ++ pAd->StaCfg.BBPR3 = BBPR3; + #endif // RTMP_MAC_PCI // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- { +- ULONG TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount + +- pAd->RalinkCounters.OneSecTxRetryOkCount + +- pAd->RalinkCounters.OneSecTxFailCount; +- +- // dynamic adjust antenna evaluation period according to the traffic +- if (TxTotalCnt > 50) +- { +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 20); +- pAd->Mlme.bLowThroughput = FALSE; +- } +- else +- { +- RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300); +- pAd->Mlme.bLowThroughput = TRUE; +- } +- } ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) ++ ) { ++ ULONG TxTotalCnt = ++ pAd->RalinkCounters.OneSecTxNoRetryOkCount + ++ pAd->RalinkCounters.OneSecTxRetryOkCount + ++ pAd->RalinkCounters.OneSecTxFailCount; ++ ++ // dynamic adjust antenna evaluation period according to the traffic ++ if (TxTotalCnt > 50) { ++ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, ++ 20); ++ pAd->Mlme.bLowThroughput = FALSE; ++ } else { ++ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, ++ 300); ++ pAd->Mlme.bLowThroughput = TRUE; ++ } ++ } + } + + } + +- + } + + /* +@@ -5616,62 +5676,54 @@ VOID AsicEvaluateRxAnt( + + ======================================================================== + */ +-VOID AsicRxAntEvalTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- UCHAR BBPR3 = 0; +- CHAR larger = -127, rssi0, rssi1, rssi2; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_NIC_NOT_EXIST) || +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ UCHAR BBPR3 = 0; ++ CHAR larger = -127, rssi0, rssi1, rssi2; ++ ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_RADIO_OFF | ++ fRTMP_ADAPTER_NIC_NOT_EXIST) || ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) + #ifdef RT30xx +- || (pAd->EepromAccess) ++ || (pAd->EepromAccess) + #endif // RT30xx // + #ifdef RT3090 +- || (pAd->bPCIclkOff == TRUE) ++ || (pAd->bPCIclkOff == TRUE) + #endif // RT3090 // +- ) ++ ) + return; + + { + //if (pAd->StaCfg.Psm == PWR_SAVE) +- // return; ++ // return; + { + if (pAd->StaCfg.Psm == PWR_SAVE) + return; + + // if the traffic is low, use average rssi as the criteria +- if (pAd->Mlme.bLowThroughput == TRUE) +- { ++ if (pAd->Mlme.bLowThroughput == TRUE) { + rssi0 = pAd->StaCfg.RssiSample.LastRssi0; + rssi1 = pAd->StaCfg.RssiSample.LastRssi1; + rssi2 = pAd->StaCfg.RssiSample.LastRssi2; +- } +- else +- { ++ } else { + rssi0 = pAd->StaCfg.RssiSample.AvgRssi0; + rssi1 = pAd->StaCfg.RssiSample.AvgRssi1; + rssi2 = pAd->StaCfg.RssiSample.AvgRssi2; + } + +- if(pAd->Antenna.field.RxPath == 3) +- { ++ if (pAd->Antenna.field.RxPath == 3) { + larger = max(rssi0, rssi1); + + if (larger > (rssi2 + 20)) + pAd->Mlme.RealRxPath = 2; + else + pAd->Mlme.RealRxPath = 3; +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { ++ } else if (pAd->Antenna.field.RxPath == 2) { + if (rssi0 > (rssi1 + 20)) + pAd->Mlme.RealRxPath = 1; + else +@@ -5680,16 +5732,11 @@ VOID AsicRxAntEvalTimeout( + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); + BBPR3 &= (~0x18); +- if(pAd->Mlme.RealRxPath == 3) +- { ++ if (pAd->Mlme.RealRxPath == 3) { + BBPR3 |= (0x10); +- } +- else if(pAd->Mlme.RealRxPath == 2) +- { ++ } else if (pAd->Mlme.RealRxPath == 2) { + BBPR3 |= (0x8); +- } +- else if(pAd->Mlme.RealRxPath == 1) +- { ++ } else if (pAd->Mlme.RealRxPath == 1) { + BBPR3 |= (0x0); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +@@ -5699,17 +5746,13 @@ VOID AsicRxAntEvalTimeout( + } + } + +- + } + +- +-VOID APSDPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID APSDPeriodicExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) + return; +@@ -5744,11 +5787,9 @@ VOID APSDPeriodicExec( + + ======================================================================== + */ +-VOID RTMPSetPiggyBack( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bPiggyBack) ++VOID RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack) + { +- TX_LINK_CFG_STRUC TxLinkCfg; ++ TX_LINK_CFG_STRUC TxLinkCfg; + + RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); + +@@ -5771,37 +5812,32 @@ VOID RTMPSetPiggyBack( + + ======================================================================== + */ +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry) ++BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry) + { +- BOOLEAN result = TRUE; ++ BOOLEAN result = TRUE; + + { + // only associated STA counts +- if (pEntry && (pEntry->ValidAsCLI) && (pEntry->Sst == SST_ASSOC)) +- { ++ if (pEntry && (pEntry->ValidAsCLI) ++ && (pEntry->Sst == SST_ASSOC)) { + result = pAd->StaCfg.bAutoTxRateSwitch; +- } +- else ++ } else + result = FALSE; + } + + return result; + } + +- +-BOOLEAN RTMPAutoRateSwitchCheck( +- IN PRTMP_ADAPTER pAd) ++BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd) + { + { +- if (pAd->StaCfg.bAutoTxRateSwitch) +- return TRUE; ++ if (pAd->StaCfg.bAutoTxRateSwitch) ++ return TRUE; + } + return FALSE; + } + +- + /* + ======================================================================== + Routine Description: +@@ -5817,14 +5853,14 @@ BOOLEAN RTMPAutoRateSwitchCheck( + + ======================================================================== + */ +-UCHAR RTMPStaFixedTxMode( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry) ++UCHAR RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) + { +- UCHAR tx_mode = FIXED_TXMODE_HT; ++ UCHAR tx_mode = FIXED_TXMODE_HT; + + { +- tx_mode = (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode; ++ tx_mode = ++ (UCHAR) pAd->StaCfg.DesiredTransmitSetting.field. ++ FixedTxMode; + } + + return tx_mode; +@@ -5845,9 +5881,7 @@ UCHAR RTMPStaFixedTxMode( + + ======================================================================== + */ +-VOID RTMPUpdateLegacyTxSetting( +- UCHAR fixed_tx_mode, +- PMAC_TABLE_ENTRY pEntry) ++VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + { + HTTRANSMIT_SETTING TransmitSetting; + +@@ -5859,26 +5893,24 @@ VOID RTMPUpdateLegacyTxSetting( + TransmitSetting.field.MODE = pEntry->HTPhyMode.field.MODE; + TransmitSetting.field.MCS = pEntry->HTPhyMode.field.MCS; + +- if (fixed_tx_mode == FIXED_TXMODE_CCK) +- { ++ if (fixed_tx_mode == FIXED_TXMODE_CCK) { + TransmitSetting.field.MODE = MODE_CCK; + // CCK mode allow MCS 0~3 + if (TransmitSetting.field.MCS > MCS_3) + TransmitSetting.field.MCS = MCS_3; +- } +- else +- { ++ } else { + TransmitSetting.field.MODE = MODE_OFDM; + // OFDM mode allow MCS 0~7 + if (TransmitSetting.field.MCS > MCS_7) + TransmitSetting.field.MCS = MCS_7; + } + +- if (pEntry->HTPhyMode.field.MODE >= TransmitSetting.field.MODE) +- { ++ if (pEntry->HTPhyMode.field.MODE >= TransmitSetting.field.MODE) { + pEntry->HTPhyMode.word = TransmitSetting.word; +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateLegacyTxSetting : wcid-%d, MODE=%s, MCS=%d \n", +- pEntry->Aid, GetPhyMode(pEntry->HTPhyMode.field.MODE), pEntry->HTPhyMode.field.MCS)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPUpdateLegacyTxSetting : wcid-%d, MODE=%s, MCS=%d \n", ++ pEntry->Aid, GetPhyMode(pEntry->HTPhyMode.field.MODE), ++ pEntry->HTPhyMode.field.MCS)); + } + } + +@@ -5892,11 +5924,10 @@ VOID RTMPUpdateLegacyTxSetting( + + ========================================================================== + */ +-VOID AsicStaBbpTuning( +- IN PRTMP_ADAPTER pAd) ++VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + { +- UCHAR OrigR66Value = 0, R66;//, R66UpperBound = 0x30, R66LowerBound = 0x30; +- CHAR Rssi; ++ UCHAR OrigR66Value = 0, R66; //, R66UpperBound = 0x30, R66LowerBound = 0x30; ++ CHAR Rssi; + + // 2860C did not support Fase CCA, therefore can't tune + if (pAd->MACVersion == 0x28600100) +@@ -5905,156 +5936,138 @@ VOID AsicStaBbpTuning( + // + // work as a STA + // +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) // no R66 tuning when SCANNING ++ if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) // no R66 tuning when SCANNING + return; + + if ((pAd->OpMode == OPMODE_STA) +- && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +- ) +- && !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) ++ ) ++ && !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + #ifdef RTMP_MAC_PCI +- && (pAd->bPCIclkOff == FALSE) ++ && (pAd->bPCIclkOff == FALSE) + #endif // RTMP_MAC_PCI // +- ) +- { ++ ) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &OrigR66Value); + R66 = OrigR66Value; + + if (pAd->Antenna.field.RxPath > 1) +- Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1; ++ Rssi = ++ (pAd->StaCfg.RssiSample.AvgRssi0 + ++ pAd->StaCfg.RssiSample.AvgRssi1) >> 1; + else + Rssi = pAd->StaCfg.RssiSample.AvgRssi0; + +- if (pAd->LatchRfRegs.Channel <= 14) +- { //BG band ++ if (pAd->LatchRfRegs.Channel <= 14) { //BG band + #ifdef RT30xx + // RT3070 is a no LNA solution, it should have different control regarding to AGC gain control + // Otherwise, it will have some throughput side effect when low RSSI + +- if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd) + 0x20; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd); +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ if (IS_RT3070(pAd) || IS_RT3090(pAd) || IS_RT3572(pAd) ++ || IS_RT3390(pAd)) { ++ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { ++ R66 = ++ 0x1C + 2 * GET_LNA_GAIN(pAd) + 0x20; ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); ++ } ++ } else { ++ R66 = 0x1C + 2 * GET_LNA_GAIN(pAd); ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); ++ } + } +- } +- } +- else ++ } else + #endif // RT30xx // + { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { ++ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { + R66 = (0x2E + GET_LNA_GAIN(pAd)) + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } +- } +- else +- { ++ } else { + R66 = 0x2E + GET_LNA_GAIN(pAd); +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } + } + } +- } +- else +- { //A band +- if (pAd->CommonCfg.BBPCurrentBW == BW_20) +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x32 + (GET_LNA_GAIN(pAd)*5)/3 + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } else { //A band ++ if (pAd->CommonCfg.BBPCurrentBW == BW_20) { ++ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { ++ R66 = ++ 0x32 + (GET_LNA_GAIN(pAd) * 5) / 3 + ++ 0x10; ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } +- } +- else +- { +- R66 = 0x32 + (GET_LNA_GAIN(pAd)*5)/3; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } else { ++ R66 = ++ 0x32 + (GET_LNA_GAIN(pAd) * 5) / 3; ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } + } +- } +- else +- { +- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) +- { +- R66 = 0x3A + (GET_LNA_GAIN(pAd)*5)/3 + 0x10; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } else { ++ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { ++ R66 = ++ 0x3A + (GET_LNA_GAIN(pAd) * 5) / 3 + ++ 0x10; ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } +- } +- else +- { +- R66 = 0x3A + (GET_LNA_GAIN(pAd)*5)/3; +- if (OrigR66Value != R66) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } else { ++ R66 = ++ 0x3A + (GET_LNA_GAIN(pAd) * 5) / 3; ++ if (OrigR66Value != R66) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R66, R66); + } + } + } + } + +- + } + } + +-VOID RTMPSetAGCInitValue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BandWidth) ++VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth) + { +- UCHAR R66 = 0x30; ++ UCHAR R66 = 0x30; + +- if (pAd->LatchRfRegs.Channel <= 14) +- { // BG band ++ if (pAd->LatchRfRegs.Channel <= 14) { // BG band + #ifdef RT30xx + /* Gary was verified Amazon AP and find that RT307x has BBP_R66 invalid default value */ + +- if (IS_RT3070(pAd)||IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- R66 = 0x1C + 2*GET_LNA_GAIN(pAd); ++ if (IS_RT3070(pAd) || IS_RT3090(pAd) || IS_RT3572(pAd) ++ || IS_RT3390(pAd)) { ++ R66 = 0x1C + 2 * GET_LNA_GAIN(pAd); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- else ++ } else + #endif // RT30xx // + { +- R66 = 0x2E + GET_LNA_GAIN(pAd); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); +- } +- } +- else +- { //A band +- { +- if (BandWidth == BW_20) +- { +- R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3); ++ R66 = 0x2E + GET_LNA_GAIN(pAd); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } +- else ++ } else { //A band + { +- R66 = (UCHAR)(0x3A + (GET_LNA_GAIN(pAd)*5)/3); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ if (BandWidth == BW_20) { ++ R66 = ++ (UCHAR) (0x32 + ++ (GET_LNA_GAIN(pAd) * 5) / 3); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } else { ++ R66 = ++ (UCHAR) (0x3A + ++ (GET_LNA_GAIN(pAd) * 5) / 3); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); ++ } + } + } +- } + + } +- +diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c +index 06b51a0..cc45a08 100644 +--- a/drivers/staging/rt2860/common/rt_channel.c ++++ b/drivers/staging/rt2860/common/rt_channel.c +@@ -26,951 +26,1411 @@ + */ + #include "../rt_config.h" + +- +-CH_FREQ_MAP CH_HZ_ID_MAP[]= +- { +- {1, 2412}, +- {2, 2417}, +- {3, 2422}, +- {4, 2427}, +- {5, 2432}, +- {6, 2437}, +- {7, 2442}, +- {8, 2447}, +- {9, 2452}, +- {10, 2457}, +- {11, 2462}, +- {12, 2467}, +- {13, 2472}, +- {14, 2484}, +- +- /* UNII */ +- {36, 5180}, +- {40, 5200}, +- {44, 5220}, +- {48, 5240}, +- {52, 5260}, +- {56, 5280}, +- {60, 5300}, +- {64, 5320}, +- {149, 5745}, +- {153, 5765}, +- {157, 5785}, +- {161, 5805}, +- {165, 5825}, +- {167, 5835}, +- {169, 5845}, +- {171, 5855}, +- {173, 5865}, +- +- /* HiperLAN2 */ +- {100, 5500}, +- {104, 5520}, +- {108, 5540}, +- {112, 5560}, +- {116, 5580}, +- {120, 5600}, +- {124, 5620}, +- {128, 5640}, +- {132, 5660}, +- {136, 5680}, +- {140, 5700}, +- +- /* Japan MMAC */ +- {34, 5170}, +- {38, 5190}, +- {42, 5210}, +- {46, 5230}, +- +- /* Japan */ +- {184, 4920}, +- {188, 4940}, +- {192, 4960}, +- {196, 4980}, +- +- {208, 5040}, /* Japan, means J08 */ +- {212, 5060}, /* Japan, means J12 */ +- {216, 5080}, /* Japan, means J16 */ ++CH_FREQ_MAP CH_HZ_ID_MAP[] = { ++ {1, 2412} ++ , ++ {2, 2417} ++ , ++ {3, 2422} ++ , ++ {4, 2427} ++ , ++ {5, 2432} ++ , ++ {6, 2437} ++ , ++ {7, 2442} ++ , ++ {8, 2447} ++ , ++ {9, 2452} ++ , ++ {10, 2457} ++ , ++ {11, 2462} ++ , ++ {12, 2467} ++ , ++ {13, 2472} ++ , ++ {14, 2484} ++ , ++ ++ /* UNII */ ++ {36, 5180} ++ , ++ {40, 5200} ++ , ++ {44, 5220} ++ , ++ {48, 5240} ++ , ++ {52, 5260} ++ , ++ {56, 5280} ++ , ++ {60, 5300} ++ , ++ {64, 5320} ++ , ++ {149, 5745} ++ , ++ {153, 5765} ++ , ++ {157, 5785} ++ , ++ {161, 5805} ++ , ++ {165, 5825} ++ , ++ {167, 5835} ++ , ++ {169, 5845} ++ , ++ {171, 5855} ++ , ++ {173, 5865} ++ , ++ ++ /* HiperLAN2 */ ++ {100, 5500} ++ , ++ {104, 5520} ++ , ++ {108, 5540} ++ , ++ {112, 5560} ++ , ++ {116, 5580} ++ , ++ {120, 5600} ++ , ++ {124, 5620} ++ , ++ {128, 5640} ++ , ++ {132, 5660} ++ , ++ {136, 5680} ++ , ++ {140, 5700} ++ , ++ ++ /* Japan MMAC */ ++ {34, 5170} ++ , ++ {38, 5190} ++ , ++ {42, 5210} ++ , ++ {46, 5230} ++ , ++ ++ /* Japan */ ++ {184, 4920} ++ , ++ {188, 4940} ++ , ++ {192, 4960} ++ , ++ {196, 4980} ++ , ++ ++ {208, 5040} ++ , /* Japan, means J08 */ ++ {212, 5060} ++ , /* Japan, means J12 */ ++ {216, 5080} ++ , /* Japan, means J16 */ + }; + +-INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP)/sizeof(CH_FREQ_MAP)); +- +-CH_REGION ChRegion[] = +-{ +- { // Antigua and Berbuda +- "AG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Argentina +- "AR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Aruba +- "AW", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Australia +- "AU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Austria +- "AT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bahamas +- "BS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Barbados +- "BB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Bermuda +- "BM", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Brazil +- "BR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 24, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Belgium +- "BE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 18, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 18, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Bulgaria +- "BG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Canada +- "CA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Cayman IsLands +- "KY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Chile +- "CL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // China +- "CN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Colombia +- "CO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Costa Rica +- "CR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Cyprus +- "CY", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Czech_Republic +- "CZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Denmark +- "DK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Dominican Republic +- "DO", +- CE, +- { +- { 1, 0, 20, BOTH, FALSE}, // 2.4 G, ch 0 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Equador +- "EC", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 100, 11, 27, BOTH, FALSE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // El Salvador +- "SV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 30, BOTH, TRUE}, // 5G, ch 52~64 +- { 149, 4, 36, BOTH, TRUE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Finland +- "FI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // France +- "FR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Germany +- "DE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Greece +- "GR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Guam +- "GU", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Guatemala +- "GT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Haiti +- "HT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Honduras +- "HN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hong Kong +- "HK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Hungary +- "HU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Iceland +- "IS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // India +- "IN", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 24, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Indonesia +- "ID", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Ireland +- "IE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Israel +- "IL", +- CE, +- { +- { 1, 3, 20, IDOR, FALSE}, // 2.4 G, ch 1~3 +- { 4, 6, 20, BOTH, FALSE}, // 2.4 G, ch 4~9 +- { 10, 4, 20, IDOR, FALSE}, // 2.4 G, ch 10~13 +- { 0}, // end +- } +- }, +- +- { // Italy +- "IT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, ODOR, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Japan +- "JP", +- JAP, +- { +- { 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Jordan +- "JO", +- CE, +- { +- { 1, 13, 20, IDOR, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 149, 4, 23, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Latvia +- "LV", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Liechtenstein +- "LI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Lithuania +- "LT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Luxemburg +- "LU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Malaysia +- "MY", +- CE, +- { +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Malta +- "MT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Marocco +- "MA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 0}, // end +- } +- }, +- +- { // Mexico +- "MX", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 5, 30, IDOR, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Netherlands +- "NL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // New Zealand +- "NZ", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Norway +- "NO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 24, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 24, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Peru +- "PE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Portugal +- "PT", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Poland +- "PL", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Romania +- "RO", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Russia +- "RU", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 149, 4, 20, IDOR, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Saudi Arabia +- "SA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 23, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Serbia_and_Montenegro +- "CS", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 0}, // end +- } +- }, +- +- { // Singapore +- "SG", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Slovakia +- "SK", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Slovenia +- "SI", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // South Africa +- "ZA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 4, 30, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // South Korea +- "KR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 8, 20, BOTH, FALSE}, // 5G, ch 100~128 +- { 149, 4, 20, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Spain +- "ES", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Sweden +- "SE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Switzerland +- "CH", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~13 +- { 36, 4, 23, IDOR, TRUE}, // 5G, ch 36~48 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Taiwan +- "TW", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 52, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // Turkey +- "TR", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, BOTH, FALSE}, // 5G, ch 36~48 +- { 52, 4, 23, BOTH, FALSE}, // 5G, ch 52~64 +- { 0}, // end +- } +- }, +- +- { // UK +- "GB", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 23, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 23, IDOR, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 0}, // end +- } +- }, +- +- { // Ukraine +- "UA", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_Arab_Emirates +- "AE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 0}, // end +- } +- }, +- +- { // United_States +- "US", +- CE, +- { +- { 1, 11, 30, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 17, IDOR, FALSE}, // 5G, ch 52~64 +- { 52, 4, 24, BOTH, TRUE}, // 5G, ch 52~64 +- { 100, 11, 30, BOTH, TRUE}, // 5G, ch 100~140 +- { 149, 5, 30, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, +- +- { // Venezuela +- "VE", +- CE, +- { +- { 1, 13, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 149, 4, 27, BOTH, FALSE}, // 5G, ch 149~161 +- { 0}, // end +- } +- }, +- +- { // Default +- "", +- CE, +- { +- { 1, 11, 20, BOTH, FALSE}, // 2.4 G, ch 1~11 +- { 36, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 52, 4, 20, BOTH, FALSE}, // 5G, ch 52~64 +- { 100, 11, 20, BOTH, FALSE}, // 5G, ch 100~140 +- { 149, 5, 20, BOTH, FALSE}, // 5G, ch 149~165 +- { 0}, // end +- } +- }, ++INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(CH_FREQ_MAP)); ++ ++CH_REGION ChRegion[] = { ++ { // Antigua and Berbuda ++ "AG", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Argentina ++ "AR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Aruba ++ "AW", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Australia ++ "AU", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Austria ++ "AT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, TRUE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Bahamas ++ "BS", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Barbados ++ "BB", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Bermuda ++ "BM", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Brazil ++ "BR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 24, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Belgium ++ "BE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 18, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 18, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Bulgaria ++ "BG", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, ODOR, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Canada ++ "CA", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Cayman IsLands ++ "KY", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Chile ++ "CL", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 20, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 20, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 20, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // China ++ "CN", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 27, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Colombia ++ "CO", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 17, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Costa Rica ++ "CR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 17, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Cyprus ++ "CY", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Czech_Republic ++ "CZ", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Denmark ++ "DK", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Dominican Republic ++ "DO", ++ CE, ++ { ++ {1, 0, 20, BOTH, FALSE} ++ , // 2.4 G, ch 0 ++ {149, 4, 20, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Equador ++ "EC", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {100, 11, 27, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // El Salvador ++ "SV", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 30, BOTH, TRUE} ++ , // 5G, ch 52~64 ++ {149, 4, 36, BOTH, TRUE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Finland ++ "FI", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // France ++ "FR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Germany ++ "DE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Greece ++ "GR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, ODOR, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Guam ++ "GU", ++ CE, ++ { ++ {1, 11, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {36, 4, 17, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Guatemala ++ "GT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 17, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Haiti ++ "HT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 17, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Honduras ++ "HN", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 27, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Hong Kong ++ "HK", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Hungary ++ "HU", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Iceland ++ "IS", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // India ++ "IN", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 24, IDOR, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Indonesia ++ "ID", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 27, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Ireland ++ "IE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, ODOR, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Israel ++ "IL", ++ CE, ++ { ++ {1, 3, 20, IDOR, FALSE} ++ , // 2.4 G, ch 1~3 ++ {4, 6, 20, BOTH, FALSE} ++ , // 2.4 G, ch 4~9 ++ {10, 4, 20, IDOR, FALSE} ++ , // 2.4 G, ch 10~13 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Italy ++ "IT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, ODOR, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Japan ++ "JP", ++ JAP, ++ { ++ {1, 14, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~14 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Jordan ++ "JO", ++ CE, ++ { ++ {1, 13, 20, IDOR, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {149, 4, 23, IDOR, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Latvia ++ "LV", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Liechtenstein ++ "LI", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Lithuania ++ "LT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Luxemburg ++ "LU", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Malaysia ++ "MY", ++ CE, ++ { ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 20, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Malta ++ "MT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Marocco ++ "MA", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 24, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Mexico ++ "MX", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 5, 30, IDOR, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Netherlands ++ "NL", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // New Zealand ++ "NZ", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 24, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Norway ++ "NO", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 24, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 24, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Peru ++ "PE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 27, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Portugal ++ "PT", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Poland ++ "PL", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Romania ++ "RO", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Russia ++ "RU", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {149, 4, 20, IDOR, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Saudi Arabia ++ "SA", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 23, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Serbia_and_Montenegro ++ "CS", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Singapore ++ "SG", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {149, 4, 20, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Slovakia ++ "SK", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Slovenia ++ "SI", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // South Africa ++ "ZA", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {149, 4, 30, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // South Korea ++ "KR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 20, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 20, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 8, 20, BOTH, FALSE} ++ , // 5G, ch 100~128 ++ {149, 4, 20, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Spain ++ "ES", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 17, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Sweden ++ "SE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Switzerland ++ "CH", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~13 ++ {36, 4, 23, IDOR, TRUE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Taiwan ++ "TW", ++ CE, ++ { ++ {1, 11, 30, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {52, 4, 23, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Turkey ++ "TR", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {36, 4, 23, BOTH, FALSE} ++ , // 5G, ch 36~48 ++ {52, 4, 23, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // UK ++ "GB", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {36, 4, 23, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {52, 4, 23, IDOR, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Ukraine ++ "UA", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // United_Arab_Emirates ++ "AE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // United_States ++ "US", ++ CE, ++ { ++ {1, 11, 30, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {36, 4, 17, IDOR, FALSE} ++ , // 5G, ch 52~64 ++ {52, 4, 24, BOTH, TRUE} ++ , // 5G, ch 52~64 ++ {100, 11, 30, BOTH, TRUE} ++ , // 5G, ch 100~140 ++ {149, 5, 30, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Venezuela ++ "VE", ++ CE, ++ { ++ {1, 13, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {149, 4, 27, BOTH, FALSE} ++ , // 5G, ch 149~161 ++ {0} ++ , // end ++ } ++ } ++ , ++ ++ { // Default ++ "", ++ CE, ++ { ++ {1, 11, 20, BOTH, FALSE} ++ , // 2.4 G, ch 1~11 ++ {36, 4, 20, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {52, 4, 20, BOTH, FALSE} ++ , // 5G, ch 52~64 ++ {100, 11, 20, BOTH, FALSE} ++ , // 5G, ch 100~140 ++ {149, 5, 20, BOTH, FALSE} ++ , // 5G, ch 149~165 ++ {0} ++ , // end ++ } ++ } ++ , + }; + +- +-static PCH_REGION GetChRegion( +- IN PUCHAR CntryCode) ++static PCH_REGION GetChRegion(IN PUCHAR CntryCode) + { + INT loop = 0; + PCH_REGION pChRegion = NULL; + +- while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0) +- { +- if (strncmp((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, 2) == 0) +- { ++ while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0) { ++ if (strncmp ++ ((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, ++ 2) == 0) { + pChRegion = &ChRegion[loop]; + break; + } +@@ -982,54 +1442,49 @@ static PCH_REGION GetChRegion( + return pChRegion; + } + +-static VOID ChBandCheck( +- IN UCHAR PhyMode, +- OUT PUCHAR pChType) ++static VOID ChBandCheck(IN UCHAR PhyMode, OUT PUCHAR pChType) + { +- switch(PhyMode) +- { +- case PHY_11A: +- case PHY_11AN_MIXED: +- *pChType = BAND_5G; +- break; +- case PHY_11ABG_MIXED: +- case PHY_11AGN_MIXED: +- case PHY_11ABGN_MIXED: +- *pChType = BAND_BOTH; +- break; +- +- default: +- *pChType = BAND_24G; +- break; ++ switch (PhyMode) { ++ case PHY_11A: ++ case PHY_11AN_MIXED: ++ *pChType = BAND_5G; ++ break; ++ case PHY_11ABG_MIXED: ++ case PHY_11AGN_MIXED: ++ case PHY_11ABGN_MIXED: ++ *pChType = BAND_BOTH; ++ break; ++ ++ default: ++ *pChType = BAND_24G; ++ break; + } + } + +-static UCHAR FillChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_DESP pChDesp, +- IN UCHAR Offset, +- IN UCHAR increment) ++static UCHAR FillChList(IN PRTMP_ADAPTER pAd, ++ IN PCH_DESP pChDesp, ++ IN UCHAR Offset, IN UCHAR increment) + { + INT i, j, l; + UCHAR channel; + + j = Offset; +- for (i = 0; i < pChDesp->NumOfCh; i++) +- { ++ for (i = 0; i < pChDesp->NumOfCh; i++) { + channel = pChDesp->FirstChannel + i * increment; +- for (l=0; lTxPower[l].Channel) +- { +- pAd->ChannelList[j].Power = pAd->TxPower[l].Power; +- pAd->ChannelList[j].Power2 = pAd->TxPower[l].Power2; ++ for (l = 0; l < MAX_NUM_OF_CHANNELS; l++) { ++ if (channel == pAd->TxPower[l].Channel) { ++ pAd->ChannelList[j].Power = ++ pAd->TxPower[l].Power; ++ pAd->ChannelList[j].Power2 = ++ pAd->TxPower[l].Power2; + break; + } + } + if (l == MAX_NUM_OF_CHANNELS) + continue; + +- pAd->ChannelList[j].Channel = pChDesp->FirstChannel + i * increment; ++ pAd->ChannelList[j].Channel = ++ pChDesp->FirstChannel + i * increment; + pAd->ChannelList[j].MaxTxPwr = pChDesp->MaxTxPwr; + pAd->ChannelList[j].DfsReq = pChDesp->DfsReq; + j++; +@@ -1039,11 +1494,8 @@ static UCHAR FillChList( + return j; + } + +- +-static inline VOID CreateChList( +- IN PRTMP_ADAPTER pAd, +- IN PCH_REGION pChRegion, +- IN UCHAR Geography) ++static inline VOID CreateChList(IN PRTMP_ADAPTER pAd, ++ IN PCH_REGION pChRegion, IN UCHAR Geography) + { + INT i; + UCHAR offset = 0; +@@ -1056,38 +1508,31 @@ static inline VOID CreateChList( + + ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); + +- for (i=0; i<10; i++) +- { ++ for (i = 0; i < 10; i++) { + pChDesp = &pChRegion->ChDesp[i]; + if (pChDesp->FirstChannel == 0) + break; + +- if (ChType == BAND_5G) +- { ++ if (ChType == BAND_5G) { + if (pChDesp->FirstChannel <= 14) + continue; +- } +- else if (ChType == BAND_24G) +- { ++ } else if (ChType == BAND_24G) { + if (pChDesp->FirstChannel > 14) + continue; + } + + if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == Geography)) +- { ++ || (pChDesp->Geography == Geography)) { + if (pChDesp->FirstChannel > 14) +- increment = 4; +- else +- increment = 1; ++ increment = 4; ++ else ++ increment = 1; + offset = FillChList(pAd, pChDesp, offset, increment); +- } ++ } + } + } + +- +-VOID BuildChannelListEx( +- IN PRTMP_ADAPTER pAd) ++VOID BuildChannelListEx(IN PRTMP_ADAPTER pAd) + { + PCH_REGION pChReg; + +@@ -1095,11 +1540,8 @@ VOID BuildChannelListEx( + CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); + } + +- +-VOID BuildBeaconChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen) ++VOID BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pBuf, OUT PULONG pBufLen) + { + INT i; + ULONG TmpLen; +@@ -1115,46 +1557,35 @@ VOID BuildBeaconChList( + ChBandCheck(pAd->CommonCfg.PhyMode, &ChType); + *pBufLen = 0; + +- for (i=0; i<10; i++) +- { ++ for (i = 0; i < 10; i++) { + pChDesp = &pChRegion->ChDesp[i]; + if (pChDesp->FirstChannel == 0) + break; + +- if (ChType == BAND_5G) +- { ++ if (ChType == BAND_5G) { + if (pChDesp->FirstChannel <= 14) + continue; +- } +- else if (ChType == BAND_24G) +- { ++ } else if (ChType == BAND_24G) { + if (pChDesp->FirstChannel > 14) + continue; + } + + if ((pChDesp->Geography == BOTH) +- || (pChDesp->Geography == pAd->CommonCfg.Geography)) +- { +- MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen, +- 1, &pChDesp->FirstChannel, +- 1, &pChDesp->NumOfCh, +- 1, &pChDesp->MaxTxPwr, +- END_OF_ARGS); ++ || (pChDesp->Geography == pAd->CommonCfg.Geography)) { ++ MakeOutgoingFrame(pBuf + *pBufLen, &TmpLen, ++ 1, &pChDesp->FirstChannel, ++ 1, &pChDesp->NumOfCh, ++ 1, &pChDesp->MaxTxPwr, END_OF_ARGS); + *pBufLen += TmpLen; + } + } + } + +- +-static BOOLEAN IsValidChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel) +- ++static BOOLEAN IsValidChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + { + INT i; + +- for (i = 0; i < pAd->ChannelListNum; i++) +- { ++ for (i = 0; i < pAd->ChannelListNum; i++) { + if (pAd->ChannelList[i].Channel == channel) + break; + } +@@ -1165,10 +1596,7 @@ static BOOLEAN IsValidChannel( + return TRUE; + } + +- +-static UCHAR GetExtCh( +- IN UCHAR Channel, +- IN UCHAR Direction) ++static UCHAR GetExtCh(IN UCHAR Channel, IN UCHAR Direction) + { + CHAR ExtCh; + +@@ -1180,95 +1608,92 @@ static UCHAR GetExtCh( + return ExtCh; + } + +- +-VOID N_ChannelCheck( +- IN PRTMP_ADAPTER pAd) ++VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) + { + //UCHAR ChannelNum = pAd->ChannelListNum; + UCHAR Channel = pAd->CommonCfg.Channel; + +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) +- { +- if (Channel > 14) +- { +- if ((Channel == 36) || (Channel == 44) || (Channel == 52) || (Channel == 60) || (Channel == 100) || (Channel == 108) || +- (Channel == 116) || (Channel == 124) || (Channel == 132) || (Channel == 149) || (Channel == 157)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE; +- } +- else if ((Channel == 40) || (Channel == 48) || (Channel == 56) || (Channel == 64) || (Channel == 104) || (Channel == 112) || +- (Channel == 120) || (Channel == 128) || (Channel == 136) || (Channel == 153) || (Channel == 161)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW; +- } +- else +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } +- } +- else +- { +- do +- { ++ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) ++ && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) { ++ if (Channel > 14) { ++ if ((Channel == 36) || (Channel == 44) ++ || (Channel == 52) || (Channel == 60) ++ || (Channel == 100) || (Channel == 108) ++ || (Channel == 116) || (Channel == 124) ++ || (Channel == 132) || (Channel == 149) ++ || (Channel == 157)) { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = ++ EXTCHA_ABOVE; ++ } else if ((Channel == 40) || (Channel == 48) ++ || (Channel == 56) || (Channel == 64) ++ || (Channel == 104) || (Channel == 112) ++ || (Channel == 120) || (Channel == 128) ++ || (Channel == 136) || (Channel == 153) ++ || (Channel == 161)) { ++ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = ++ EXTCHA_BELOW; ++ } else { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = ++ BW_20; ++ } ++ } else { ++ do { + UCHAR ExtCh; +- UCHAR Dir = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; ++ UCHAR Dir = ++ pAd->CommonCfg.RegTransmitSetting.field. ++ EXTCHA; + ExtCh = GetExtCh(Channel, Dir); + if (IsValidChannel(pAd, ExtCh)) + break; + +- Dir = (Dir == EXTCHA_ABOVE) ? EXTCHA_BELOW : EXTCHA_ABOVE; ++ Dir = ++ (Dir == ++ EXTCHA_ABOVE) ? EXTCHA_BELOW : ++ EXTCHA_ABOVE; + ExtCh = GetExtCh(Channel, Dir); +- if (IsValidChannel(pAd, ExtCh)) +- { +- pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = Dir; ++ if (IsValidChannel(pAd, ExtCh)) { ++ pAd->CommonCfg.RegTransmitSetting.field. ++ EXTCHA = Dir; + break; + } +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- } while(FALSE); ++ pAd->CommonCfg.RegTransmitSetting.field.BW = ++ BW_20; ++ } while (FALSE); + +- if (Channel == 14) +- { +- pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20; +- //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() ++ if (Channel == 14) { ++ pAd->CommonCfg.RegTransmitSetting.field.BW = ++ BW_20; ++ //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() + } + } + } + +- + } + +- +-VOID N_SetCenCh( +- IN PRTMP_ADAPTER pAd) ++VOID N_SetCenCh(IN PRTMP_ADAPTER pAd) + { +- if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) +- { +- if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE) +- { +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; +- } +- else +- { ++ if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) { ++ if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == ++ EXTCHA_ABOVE) { ++ pAd->CommonCfg.CentralChannel = ++ pAd->CommonCfg.Channel + 2; ++ } else { + if (pAd->CommonCfg.Channel == 14) +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 1; ++ pAd->CommonCfg.CentralChannel = ++ pAd->CommonCfg.Channel - 1; + else +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; ++ pAd->CommonCfg.CentralChannel = ++ pAd->CommonCfg.Channel - 2; + } +- } +- else +- { ++ } else { + pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; + } + } + +- +-UINT8 GetCuntryMaxTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 channel) ++UINT8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 channel) + { + int i; +- for (i = 0; i < pAd->ChannelListNum; i++) +- { ++ for (i = 0; i < pAd->ChannelListNum; i++) { + if (pAd->ChannelList[i].Channel == channel) + break; + } +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index e9f9384..b6e47a1 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -35,10 +35,8 @@ + -------- ---------- ---------------------------------------------- + */ + +- + #include "../rt_config.h" + +- + #ifdef RTMP_RF_RW_SUPPORT + /* + ======================================================================== +@@ -55,27 +53,26 @@ + + ======================================================================== + */ +-NDIS_STATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN UCHAR value) ++NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, IN UCHAR value) + { +- RF_CSR_CFG_STRUC rfcsr; +- UINT i = 0; ++ RF_CSR_CFG_STRUC rfcsr; ++ UINT i = 0; + +- do +- { ++ do { + RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); + + if (!rfcsr.field.RF_CSR_KICK) + break; + i++; + } +- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); ++ while ((i < RETRY_LIMIT) ++ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); + +- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n")); ++ if ((i == RETRY_LIMIT) ++ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ++ ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } + +@@ -89,7 +86,6 @@ NDIS_STATUS RT30xxWriteRFRegister( + return NDIS_STATUS_SUCCESS; + } + +- + /* + ======================================================================== + +@@ -105,20 +101,16 @@ NDIS_STATUS RT30xxWriteRFRegister( + + ======================================================================== + */ +-NDIS_STATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN PUCHAR pValue) ++NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, IN PUCHAR pValue) + { +- RF_CSR_CFG_STRUC rfcsr; +- UINT i=0, k=0; ++ RF_CSR_CFG_STRUC rfcsr; ++ UINT i = 0, k = 0; + +- for (i=0; ichipOps.AsicRfInit) + pAd->chipOps.AsicRfInit(pAd); + } + +- +-VOID RtmpChipOpsRFHook( +- IN RTMP_ADAPTER *pAd) ++VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + +@@ -172,27 +158,27 @@ VOID RtmpChipOpsRFHook( + /* We depends on RfICType and MACVersion to assign the corresponding operation callbacks. */ + + #ifdef RT30xx +- if (IS_RT30xx(pAd)) +- { ++ if (IS_RT30xx(pAd)) { + pChipOps->pRFRegTable = RT30xx_RFRegTable; + pChipOps->AsicHaltAction = RT30xxHaltAction; + #ifdef RT3070 +- if((IS_RT3070(pAd) || IS_RT3071(pAd)) && (pAd->infType == RTMP_DEV_INF_USB)) +- { ++ if ((IS_RT3070(pAd) || IS_RT3071(pAd)) ++ && (pAd->infType == RTMP_DEV_INF_USB)) { + pChipOps->AsicRfInit = NICInitRT3070RFRegisters; +- if (IS_RT3071(pAd)) +- { +- pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; +- pChipOps->AsicReverseRfFromSleepMode = RT30xxReverseRFSleepModeSetup; ++ if (IS_RT3071(pAd)) { ++ pChipOps->AsicRfTurnOff = ++ RT30xxLoadRFSleepModeSetup; ++ pChipOps->AsicReverseRfFromSleepMode = ++ RT30xxReverseRFSleepModeSetup; + } + } + #endif // RT3070 // + #ifdef RT3090 +- if (IS_RT3090(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) +- { ++ if (IS_RT3090(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) { + pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; + pChipOps->AsicRfInit = NICInitRT3090RFRegisters; +- pChipOps->AsicReverseRfFromSleepMode = RT30xxReverseRFSleepModeSetup; ++ pChipOps->AsicReverseRfFromSleepMode = ++ RT30xxReverseRFSleepModeSetup; + } + #endif // RT3090 // + } +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 1cc6e44..c169641 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -36,103 +36,103 @@ + */ + #include "../rt_config.h" + +-UCHAR BIT8[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; +-char* CipherName[] = {"none","wep64","wep128","TKIP","AES","CKIP64","CKIP128"}; ++UCHAR BIT8[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; ++char *CipherName[] = ++ { "none", "wep64", "wep128", "TKIP", "AES", "CKIP64", "CKIP128" }; + + // + // BBP register initialization set + // +-REG_PAIR BBPRegTable[] = { +- {BBP_R65, 0x2C}, // fix rssi issue +- {BBP_R66, 0x38}, // Also set this default value to pAd->BbpTuning.R66CurrentValue at initial +- {BBP_R69, 0x12}, +- {BBP_R70, 0xa}, // BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa +- {BBP_R73, 0x10}, +- {BBP_R81, 0x37}, +- {BBP_R82, 0x62}, +- {BBP_R83, 0x6A}, +- {BBP_R84, 0x99}, // 0x19 is for rt2860E and after. This is for extension channel overlapping IOT. 0x99 is for rt2860D and before +- {BBP_R86, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R91, 0x04}, // middle range issue, Rory @2008-01-28 +- {BBP_R92, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528 +- {BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. +- {BBP_R106, 0x35}, // for ShortGI throughput ++REG_PAIR BBPRegTable[] = { ++ {BBP_R65, 0x2C}, // fix rssi issue ++ {BBP_R66, 0x38}, // Also set this default value to pAd->BbpTuning.R66CurrentValue at initial ++ {BBP_R69, 0x12}, ++ {BBP_R70, 0xa}, // BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa ++ {BBP_R73, 0x10}, ++ {BBP_R81, 0x37}, ++ {BBP_R82, 0x62}, ++ {BBP_R83, 0x6A}, ++ {BBP_R84, 0x99}, // 0x19 is for rt2860E and after. This is for extension channel overlapping IOT. 0x99 is for rt2860D and before ++ {BBP_R86, 0x00}, // middle range issue, Rory @2008-01-28 ++ {BBP_R91, 0x04}, // middle range issue, Rory @2008-01-28 ++ {BBP_R92, 0x00}, // middle range issue, Rory @2008-01-28 ++ {BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528 ++ {BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. ++ {BBP_R106, 0x35}, // for ShortGI throughput + }; +-#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) + ++#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) + + // + // ASIC register initialization sets + // + +-RTMP_REG_PAIR MACRegTable[] = { ++RTMP_REG_PAIR MACRegTable[] = { + #if defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x200) +- {BCN_OFFSET0, 0xf8f0e8e0}, /* 0x3800(e0), 0x3A00(e8), 0x3C00(f0), 0x3E00(f8), 512B for each beacon */ +- {BCN_OFFSET1, 0x6f77d0c8}, /* 0x3200(c8), 0x3400(d0), 0x1DC0(77), 0x1BC0(6f), 512B for each beacon */ ++ {BCN_OFFSET0, 0xf8f0e8e0}, /* 0x3800(e0), 0x3A00(e8), 0x3C00(f0), 0x3E00(f8), 512B for each beacon */ ++ {BCN_OFFSET1, 0x6f77d0c8}, /* 0x3200(c8), 0x3400(d0), 0x1DC0(77), 0x1BC0(6f), 512B for each beacon */ + #elif defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x100) +- {BCN_OFFSET0, 0xece8e4e0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ +- {BCN_OFFSET1, 0xfcf8f4f0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ ++ {BCN_OFFSET0, 0xece8e4e0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ ++ {BCN_OFFSET1, 0xfcf8f4f0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ + #else +- #error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]!!! ++#error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]!!! + #endif // HW_BEACON_OFFSET // + +- {LEGACY_BASIC_RATE, 0x0000013f}, // Basic rate set bitmap +- {HT_BASIC_RATE, 0x00008003}, // Basic HT rate set , 20M, MCS=3, MM. Format is the same as in TXWI. +- {MAC_SYS_CTRL, 0x00}, // 0x1004, , default Disable RX +- {RX_FILTR_CFG, 0x17f97}, //0x1400 , RX filter control, +- {BKOFF_SLOT_CFG, 0x209}, // default set short slot time, CC_DELAY_TIME should be 2 +- //{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 +- {TX_SW_CFG0, 0x0}, // Gary,2008-05-21 for CWC test +- {TX_SW_CFG1, 0x80606}, // Gary,2006-08-23 +- {TX_LINK_CFG, 0x1020}, // Gary,2006-08-23 +- //{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT +- {TX_TIMEOUT_CFG, 0x000a2090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 +- {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, // 0x3018, MAX frame length. Max PSDU = 16kbytes. +- {LED_CFG, 0x7f031e46}, // Gary, 2006-08-23 +- +- {PBF_MAX_PCNT, 0x1F3FBF9F}, //0x1F3f7f9f}, //Jan, 2006/04/20 +- +- {TX_RTY_CFG, 0x47d01f0f}, // Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 +- +- {AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder +- {CCK_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. +- {OFDM_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. ++ {LEGACY_BASIC_RATE, 0x0000013f}, // Basic rate set bitmap ++ {HT_BASIC_RATE, 0x00008003}, // Basic HT rate set , 20M, MCS=3, MM. Format is the same as in TXWI. ++ {MAC_SYS_CTRL, 0x00}, // 0x1004, , default Disable RX ++ {RX_FILTR_CFG, 0x17f97}, //0x1400 , RX filter control, ++ {BKOFF_SLOT_CFG, 0x209}, // default set short slot time, CC_DELAY_TIME should be 2 ++ //{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 ++ {TX_SW_CFG0, 0x0}, // Gary,2008-05-21 for CWC test ++ {TX_SW_CFG1, 0x80606}, // Gary,2006-08-23 ++ {TX_LINK_CFG, 0x1020}, // Gary,2006-08-23 ++ //{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT ++ {TX_TIMEOUT_CFG, 0x000a2090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 ++ {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, // 0x3018, MAX frame length. Max PSDU = 16kbytes. ++ {LED_CFG, 0x7f031e46}, // Gary, 2006-08-23 ++ ++ {PBF_MAX_PCNT, 0x1F3FBF9F}, //0x1F3f7f9f}, //Jan, 2006/04/20 ++ ++ {TX_RTY_CFG, 0x47d01f0f}, // Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 ++ ++ {AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder ++ {CCK_PROT_CFG, 0x05740003 /*0x01740003 */ }, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. ++ {OFDM_PROT_CFG, 0x05740003 /*0x01740003 */ }, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. + #ifdef RTMP_MAC_USB +- {PBF_CFG, 0xf40006}, // Only enable Queue 2 +- {MM40_PROT_CFG, 0x3F44084}, // Initial Auto_Responder, because QA will turn off Auto-Responder +- {WPDMA_GLO_CFG, 0x00000030}, ++ {PBF_CFG, 0xf40006}, // Only enable Queue 2 ++ {MM40_PROT_CFG, 0x3F44084}, // Initial Auto_Responder, because QA will turn off Auto-Responder ++ {WPDMA_GLO_CFG, 0x00000030}, + #endif // RTMP_MAC_USB // +- {GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS +- {GF40_PROT_CFG, 0x03F44084}, +- {MM20_PROT_CFG, 0x01744004}, ++ {GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS ++ {GF40_PROT_CFG, 0x03F44084}, ++ {MM20_PROT_CFG, 0x01744004}, + #ifdef RTMP_MAC_PCI +- {MM40_PROT_CFG, 0x03F54084}, ++ {MM40_PROT_CFG, 0x03F54084}, + #endif // RTMP_MAC_PCI // +- {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f*/ /*0x000024bf*/}, //Extension channel backoff. +- {TX_RTS_CFG, 0x00092b20}, +- {EXP_ACK_TIME, 0x002400ca}, // default value ++ {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f *//*0x000024bf */ }, //Extension channel backoff. ++ {TX_RTS_CFG, 0x00092b20}, ++ {EXP_ACK_TIME, 0x002400ca}, // default value + +- {TXOP_HLDR_ET, 0x00000002}, ++ {TXOP_HLDR_ET, 0x00000002}, + + /* Jerry comments 2008/01/16: we use SIFS = 10us in CCK defaultly, but it seems that 10us +- is too small for INTEL 2200bg card, so in MBSS mode, the delta time between beacon0 +- and beacon1 is SIFS (10us), so if INTEL 2200bg card connects to BSS0, the ping +- will always lost. So we change the SIFS of CCK from 10us to 16us. */ +- {XIFS_TIME_CFG, 0x33a41010}, +- {PWR_PIN_CFG, 0x00000003}, // patch for 2880-E ++ is too small for INTEL 2200bg card, so in MBSS mode, the delta time between beacon0 ++ and beacon1 is SIFS (10us), so if INTEL 2200bg card connects to BSS0, the ping ++ will always lost. So we change the SIFS of CCK from 10us to 16us. */ ++ {XIFS_TIME_CFG, 0x33a41010}, ++ {PWR_PIN_CFG, 0x00000003}, // patch for 2880-E + }; + +-RTMP_REG_PAIR STAMACRegTable[] = { +- {WMM_AIFSN_CFG, 0x00002273}, +- {WMM_CWMIN_CFG, 0x00002344}, +- {WMM_CWMAX_CFG, 0x000034aa}, ++RTMP_REG_PAIR STAMACRegTable[] = { ++ {WMM_AIFSN_CFG, 0x00002273}, ++ {WMM_CWMIN_CFG, 0x00002344}, ++ {WMM_CWMAX_CFG, 0x000034aa}, + }; + + #define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(RTMP_REG_PAIR)) + #define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(RTMP_REG_PAIR)) + +- + /* + ======================================================================== + +@@ -152,52 +152,48 @@ RTMP_REG_PAIR STAMACRegTable[] = { + + ======================================================================== + */ +-NDIS_STATUS RTMPAllocAdapterBlock( +- IN PVOID handle, +- OUT PRTMP_ADAPTER *ppAdapter) ++NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, ++ OUT PRTMP_ADAPTER * ppAdapter) + { +- PRTMP_ADAPTER pAd; +- NDIS_STATUS Status; +- INT index; +- UCHAR *pBeaconBuf = NULL; ++ PRTMP_ADAPTER pAd; ++ NDIS_STATUS Status; ++ INT index; ++ UCHAR *pBeaconBuf = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocAdapterBlock\n")); + + *ppAdapter = NULL; + +- do +- { ++ do { + // Allocate RTMP_ADAPTER memory block + pBeaconBuf = kmalloc(MAX_BEACON_SIZE, MEM_ALLOC_FLAG); +- if (pBeaconBuf == NULL) +- { ++ if (pBeaconBuf == NULL) { + Status = NDIS_STATUS_FAILURE; + DBGPRINT_ERR(("Failed to allocate memory - BeaconBuf!\n")); + break; + } + NdisZeroMemory(pBeaconBuf, MAX_BEACON_SIZE); + +- Status = AdapterBlockAllocateMemory(handle, (PVOID *)&pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { ++ Status = AdapterBlockAllocateMemory(handle, (PVOID *) & pAd); ++ if (Status != NDIS_STATUS_SUCCESS) { + DBGPRINT_ERR(("Failed to allocate memory - ADAPTER\n")); + break; + } + pAd->BeaconBuf = pBeaconBuf; +- DBGPRINT(RT_DEBUG_OFF, ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER))); +- ++ DBGPRINT(RT_DEBUG_OFF, ++ ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, ++ (UINT32) sizeof(RTMP_ADAPTER))); + + // Init spin locks + NdisAllocateSpinLock(&pAd->MgmtRingLock); + #ifdef RTMP_MAC_PCI + NdisAllocateSpinLock(&pAd->RxRingLock); + #ifdef RT3090 +- NdisAllocateSpinLock(&pAd->McuCmdLock); ++ NdisAllocateSpinLock(&pAd->McuCmdLock); + #endif // RT3090 // + #endif // RTMP_MAC_PCI // + +- for (index =0 ; index < NUM_OF_TX_RING; index++) +- { ++ for (index = 0; index < NUM_OF_TX_RING; index++) { + NdisAllocateSpinLock(&pAd->TxSwQueueLock[index]); + NdisAllocateSpinLock(&pAd->DeQueueLock[index]); + pAd->DeQueueRunning[index] = FALSE; +@@ -234,14 +230,13 @@ NDIS_STATUS RTMPAllocAdapterBlock( + + ======================================================================== + */ +-VOID RTMPReadTxPwrPerRate( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + { +- ULONG data, Adata, Gdata; +- USHORT i, value, value2; +- INT Apwrdelta, Gpwrdelta; +- UCHAR t1,t2,t3,t4; +- BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; ++ ULONG data, Adata, Gdata; ++ USHORT i, value, value2; ++ INT Apwrdelta, Gpwrdelta; ++ UCHAR t1, t2, t3, t4; ++ BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; + + // + // Get power delta for 20MHz and 40MHz. +@@ -251,178 +246,168 @@ VOID RTMPReadTxPwrPerRate( + Apwrdelta = 0; + Gpwrdelta = 0; + +- if ((value2 & 0xff) != 0xff) +- { ++ if ((value2 & 0xff) != 0xff) { + if ((value2 & 0x80)) +- Gpwrdelta = (value2&0xf); ++ Gpwrdelta = (value2 & 0xf); + + if ((value2 & 0x40)) + bGpwrdeltaMinus = FALSE; + else + bGpwrdeltaMinus = TRUE; + } +- if ((value2 & 0xff00) != 0xff00) +- { ++ if ((value2 & 0xff00) != 0xff00) { + if ((value2 & 0x8000)) +- Apwrdelta = ((value2&0xf00)>>8); ++ Apwrdelta = ((value2 & 0xf00) >> 8); + + if ((value2 & 0x4000)) + bApwrdeltaMinus = FALSE; + else + bApwrdeltaMinus = TRUE; + } +- DBGPRINT(RT_DEBUG_TRACE, ("Gpwrdelta = %x, Apwrdelta = %x .\n", Gpwrdelta, Apwrdelta)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Gpwrdelta = %x, Apwrdelta = %x .\n", Gpwrdelta, Apwrdelta)); + + // + // Get Txpower per MCS for 20MHz in 2.4G. + // +- for (i=0; i<5; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4, value); ++ for (i = 0; i < 5; i++) { ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i * 4, ++ value); + data = value; +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); ++ if (bApwrdeltaMinus == FALSE) { ++ t1 = (value & 0xf) + (Apwrdelta); + if (t1 > 0xf) + t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); ++ t2 = ((value & 0xf0) >> 4) + (Apwrdelta); + if (t2 > 0xf) + t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); ++ t3 = ((value & 0xf00) >> 8) + (Apwrdelta); + if (t3 > 0xf) + t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); ++ t4 = ((value & 0xf000) >> 12) + (Apwrdelta); + if (t4 > 0xf) + t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); ++ } else { ++ if ((value & 0xf) > Apwrdelta) ++ t1 = (value & 0xf) - (Apwrdelta); + else + t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); ++ if (((value & 0xf0) >> 4) > Apwrdelta) ++ t2 = ((value & 0xf0) >> 4) - (Apwrdelta); + else + t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); ++ if (((value & 0xf00) >> 8) > Apwrdelta) ++ t3 = ((value & 0xf00) >> 8) - (Apwrdelta); + else + t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); ++ if (((value & 0xf000) >> 12) > Apwrdelta) ++ t4 = ((value & 0xf000) >> 12) - (Apwrdelta); + else + t4 = 0; + } +- Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); ++ Adata = t1 + (t2 << 4) + (t3 << 8) + (t4 << 12); ++ if (bGpwrdeltaMinus == FALSE) { ++ t1 = (value & 0xf) + (Gpwrdelta); + if (t1 > 0xf) + t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); ++ t2 = ((value & 0xf0) >> 4) + (Gpwrdelta); + if (t2 > 0xf) + t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); ++ t3 = ((value & 0xf00) >> 8) + (Gpwrdelta); + if (t3 > 0xf) + t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); ++ t4 = ((value & 0xf000) >> 12) + (Gpwrdelta); + if (t4 > 0xf) + t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); ++ } else { ++ if ((value & 0xf) > Gpwrdelta) ++ t1 = (value & 0xf) - (Gpwrdelta); + else + t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); ++ if (((value & 0xf0) >> 4) > Gpwrdelta) ++ t2 = ((value & 0xf0) >> 4) - (Gpwrdelta); + else + t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); ++ if (((value & 0xf00) >> 8) > Gpwrdelta) ++ t3 = ((value & 0xf00) >> 8) - (Gpwrdelta); + else + t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); ++ if (((value & 0xf000) >> 12) > Gpwrdelta) ++ t4 = ((value & 0xf000) >> 12) - (Gpwrdelta); + else + t4 = 0; + } +- Gdata = t1 + (t2<<4) + (t3<<8) + (t4<<12); ++ Gdata = t1 + (t2 << 4) + (t3 << 8) + (t4 << 12); + +- RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4 + 2, value); +- if (bApwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Apwrdelta); ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i * 4 + ++ 2, value); ++ if (bApwrdeltaMinus == FALSE) { ++ t1 = (value & 0xf) + (Apwrdelta); + if (t1 > 0xf) + t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Apwrdelta); ++ t2 = ((value & 0xf0) >> 4) + (Apwrdelta); + if (t2 > 0xf) + t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Apwrdelta); ++ t3 = ((value & 0xf00) >> 8) + (Apwrdelta); + if (t3 > 0xf) + t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Apwrdelta); ++ t4 = ((value & 0xf000) >> 12) + (Apwrdelta); + if (t4 > 0xf) + t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Apwrdelta) +- t1 = (value&0xf)-(Apwrdelta); ++ } else { ++ if ((value & 0xf) > Apwrdelta) ++ t1 = (value & 0xf) - (Apwrdelta); + else + t1 = 0; +- if (((value&0xf0)>>4) > Apwrdelta) +- t2 = ((value&0xf0)>>4)-(Apwrdelta); ++ if (((value & 0xf0) >> 4) > Apwrdelta) ++ t2 = ((value & 0xf0) >> 4) - (Apwrdelta); + else + t2 = 0; +- if (((value&0xf00)>>8) > Apwrdelta) +- t3 = ((value&0xf00)>>8)-(Apwrdelta); ++ if (((value & 0xf00) >> 8) > Apwrdelta) ++ t3 = ((value & 0xf00) >> 8) - (Apwrdelta); + else + t3 = 0; +- if (((value&0xf000)>>12) > Apwrdelta) +- t4 = ((value&0xf000)>>12)-(Apwrdelta); ++ if (((value & 0xf000) >> 12) > Apwrdelta) ++ t4 = ((value & 0xf000) >> 12) - (Apwrdelta); + else + t4 = 0; + } +- Adata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- if (bGpwrdeltaMinus == FALSE) +- { +- t1 = (value&0xf)+(Gpwrdelta); ++ Adata |= ((t1 << 16) + (t2 << 20) + (t3 << 24) + (t4 << 28)); ++ if (bGpwrdeltaMinus == FALSE) { ++ t1 = (value & 0xf) + (Gpwrdelta); + if (t1 > 0xf) + t1 = 0xf; +- t2 = ((value&0xf0)>>4)+(Gpwrdelta); ++ t2 = ((value & 0xf0) >> 4) + (Gpwrdelta); + if (t2 > 0xf) + t2 = 0xf; +- t3 = ((value&0xf00)>>8)+(Gpwrdelta); ++ t3 = ((value & 0xf00) >> 8) + (Gpwrdelta); + if (t3 > 0xf) + t3 = 0xf; +- t4 = ((value&0xf000)>>12)+(Gpwrdelta); ++ t4 = ((value & 0xf000) >> 12) + (Gpwrdelta); + if (t4 > 0xf) + t4 = 0xf; +- } +- else +- { +- if ((value&0xf) > Gpwrdelta) +- t1 = (value&0xf)-(Gpwrdelta); ++ } else { ++ if ((value & 0xf) > Gpwrdelta) ++ t1 = (value & 0xf) - (Gpwrdelta); + else + t1 = 0; +- if (((value&0xf0)>>4) > Gpwrdelta) +- t2 = ((value&0xf0)>>4)-(Gpwrdelta); ++ if (((value & 0xf0) >> 4) > Gpwrdelta) ++ t2 = ((value & 0xf0) >> 4) - (Gpwrdelta); + else + t2 = 0; +- if (((value&0xf00)>>8) > Gpwrdelta) +- t3 = ((value&0xf00)>>8)-(Gpwrdelta); ++ if (((value & 0xf00) >> 8) > Gpwrdelta) ++ t3 = ((value & 0xf00) >> 8) - (Gpwrdelta); + else + t3 = 0; +- if (((value&0xf000)>>12) > Gpwrdelta) +- t4 = ((value&0xf000)>>12)-(Gpwrdelta); ++ if (((value & 0xf000) >> 12) > Gpwrdelta) ++ t4 = ((value & 0xf000) >> 12) - (Gpwrdelta); + else + t4 = 0; + } +- Gdata |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); +- data |= (value<<16); ++ Gdata |= ((t1 << 16) + (t2 << 20) + (t3 << 24) + (t4 << 28)); ++ data |= (value << 16); + + /* For 20M/40M Power Delta issue */ + pAd->Tx20MPwrCfgABand[i] = data; +@@ -431,12 +416,13 @@ VOID RTMPReadTxPwrPerRate( + pAd->Tx40MPwrCfgGBand[i] = Gdata; + + if (data != 0xffffffff) +- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, data); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("20MHz BW, 2.4G band-%lx, Adata = %lx, Gdata = %lx \n", data, Adata, Gdata)); ++ RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i * 4, data); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("20MHz BW, 2.4G band-%lx, Adata = %lx, Gdata = %lx \n", ++ data, Adata, Gdata)); + } + } + +- + /* + ======================================================================== + +@@ -455,12 +441,11 @@ VOID RTMPReadTxPwrPerRate( + + ======================================================================== + */ +-VOID RTMPReadChannelPwr( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + { +- UCHAR i, choffset; +- EEPROM_TX_PWR_STRUC Power; +- EEPROM_TX_PWR_STRUC Power2; ++ UCHAR i, choffset; ++ EEPROM_TX_PWR_STRUC Power; ++ EEPROM_TX_PWR_STRUC Power2; + + // Read Tx power value for all channels + // Value from 1 - 0x7f. Default value is 24. +@@ -468,10 +453,11 @@ VOID RTMPReadChannelPwr( + // : 5.5G 0xF9 (-7) ~ 0x0F (15) + + // 0. 11b/g, ch1 - ch 14 +- for (i = 0; i < 7; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX_PWR_OFFSET + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX2_PWR_OFFSET + i * 2, Power2.word); ++ for (i = 0; i < 7; i++) { ++ RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX_PWR_OFFSET + i * 2, ++ Power.word); ++ RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX2_PWR_OFFSET + i * 2, ++ Power2.word); + pAd->TxPower[i * 2].Channel = i * 2 + 1; + pAd->TxPower[i * 2 + 1].Channel = i * 2 + 2; + +@@ -499,131 +485,146 @@ VOID RTMPReadChannelPwr( + // 1. U-NII lower/middle band: 36, 38, 40; 44, 46, 48; 52, 54, 56; 60, 62, 64 (including central frequency in BW 40MHz) + // 1.1 Fill up channel + choffset = 14; +- for (i = 0; i < 4; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ for (i = 0; i < 4; i++) { ++ pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; ++ pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Channel = 36 + i * 8 + 2; ++ pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Channel = 36 + i * 8 + 4; ++ pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; + } + + // 1.2 Fill up power +- for (i = 0; i < 6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + i * 2, Power2.word); ++ for (i = 0; i < 6; i++) { ++ RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, ++ Power.word); ++ RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + i * 2, ++ Power2.word); + + if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power = ++ Power.field.Byte0; + + if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power = ++ Power.field.Byte1; + + if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power2 = ++ Power2.field.Byte0; + + if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power2 = ++ Power2.field.Byte1; + } + + // 2. HipperLAN 2 100, 102 ,104; 108, 110, 112; 116, 118, 120; 124, 126, 128; 132, 134, 136; 140 (including central frequency in BW 40MHz) + // 2.1 Fill up channel + choffset = 14 + 12; +- for (i = 0; i < 5; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ for (i = 0; i < 5; i++) { ++ pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; ++ pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Channel = 100 + i * 8 + 2; ++ pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Channel = 100 + i * 8 + 4; ++ pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; + } +- pAd->TxPower[3 * 5 + choffset + 0].Channel = 140; +- pAd->TxPower[3 * 5 + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 5 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 5 + choffset + 0].Channel = 140; ++ pAd->TxPower[3 * 5 + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 5 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + + // 2.2 Fill up power +- for (i = 0; i < 8; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); ++ for (i = 0; i < 8; i++) { ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + ++ i * 2, Power.word); ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + ++ i * 2, Power2.word); + + if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power = ++ Power.field.Byte0; + + if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power = ++ Power.field.Byte1; + + if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power2 = ++ Power2.field.Byte0; + + if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power2 = ++ Power2.field.Byte1; + } + + // 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165, 167, 169; 171, 173 (including central frequency in BW 40MHz) + // 3.1 Fill up channel + choffset = 14 + 12 + 16; +- /*for (i = 0; i < 2; i++)*/ +- for (i = 0; i < 3; i++) +- { +- pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; +- pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ /*for (i = 0; i < 2; i++) */ ++ for (i = 0; i < 3; i++) { ++ pAd->TxPower[3 * i + choffset + 0].Channel = 149 + i * 8 + 0; ++ pAd->TxPower[3 * i + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; +- pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Channel = 149 + i * 8 + 2; ++ pAd->TxPower[3 * i + choffset + 1].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; +- pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Channel = 149 + i * 8 + 4; ++ pAd->TxPower[3 * i + choffset + 2].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; + } +- pAd->TxPower[3 * 3 + choffset + 0].Channel = 171; +- pAd->TxPower[3 * 3 + choffset + 0].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 3 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 0].Channel = 171; ++ pAd->TxPower[3 * 3 + choffset + 0].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + +- pAd->TxPower[3 * 3 + choffset + 1].Channel = 173; +- pAd->TxPower[3 * 3 + choffset + 1].Power = DEFAULT_RF_TX_POWER; +- pAd->TxPower[3 * 3 + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 1].Channel = 173; ++ pAd->TxPower[3 * 3 + choffset + 1].Power = DEFAULT_RF_TX_POWER; ++ pAd->TxPower[3 * 3 + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + + // 3.2 Fill up power +- /*for (i = 0; i < 4; i++)*/ +- for (i = 0; i < 6; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + i * 2, Power.word); +- RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + i * 2, Power2.word); ++ /*for (i = 0; i < 4; i++) */ ++ for (i = 0; i < 6; i++) { ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + ++ i * 2, Power.word); ++ RT28xx_EEPROM_READ16(pAd, ++ EEPROM_A_TX2_PWR_OFFSET + (choffset - 14) + ++ i * 2, Power2.word); + + if ((Power.field.Byte0 < 16) && (Power.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power = Power.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power = ++ Power.field.Byte0; + + if ((Power.field.Byte1 < 16) && (Power.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power = Power.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power = ++ Power.field.Byte1; + + if ((Power2.field.Byte0 < 16) && (Power2.field.Byte0 >= -7)) +- pAd->TxPower[i * 2 + choffset + 0].Power2 = Power2.field.Byte0; ++ pAd->TxPower[i * 2 + choffset + 0].Power2 = ++ Power2.field.Byte0; + + if ((Power2.field.Byte1 < 16) && (Power2.field.Byte1 >= -7)) +- pAd->TxPower[i * 2 + choffset + 1].Power2 = Power2.field.Byte1; ++ pAd->TxPower[i * 2 + choffset + 1].Power2 = ++ Power2.field.Byte1; + } + + // 4. Print and Debug +- /*choffset = 14 + 12 + 16 + 7;*/ ++ /*choffset = 14 + 12 + 16 + 7; */ + choffset = 14 + 12 + 16 + 11; + +- + } + + /* +@@ -649,17 +650,14 @@ VOID RTMPReadChannelPwr( + + ======================================================================== + */ +-NDIS_STATUS NICReadRegParameters( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext +- ) ++NDIS_STATUS NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++ IN NDIS_HANDLE WrapperConfigurationContext) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + DBGPRINT_S(Status, ("<-- NICReadRegParameters, Status=%x\n", Status)); + return Status; + } + +- + /* + ======================================================================== + +@@ -678,17 +676,15 @@ NDIS_STATUS NICReadRegParameters( + + ======================================================================== + */ +-VOID NICReadEEPROMParameters( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR mac_addr) ++VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + { +- UINT32 data = 0; +- USHORT i, value, value2; +- UCHAR TmpPhy; +- EEPROM_TX_PWR_STRUC Power; +- EEPROM_VERSION_STRUC Version; +- EEPROM_ANTENNA_STRUC Antenna; +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; ++ UINT32 data = 0; ++ USHORT i, value, value2; ++ UCHAR TmpPhy; ++ EEPROM_TX_PWR_STRUC Power; ++ EEPROM_VERSION_STRUC Version; ++ EEPROM_ANTENNA_STRUC Antenna; ++ EEPROM_NIC_CONFIG2_STRUC NicConfig2; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICReadEEPROMParameters\n")); + +@@ -699,70 +695,72 @@ VOID NICReadEEPROMParameters( + RTMP_IO_READ32(pAd, E2PROM_CSR, &data); + DBGPRINT(RT_DEBUG_TRACE, ("--> E2PROM_CSR = 0x%x\n", data)); + +- if((data & 0x30) == 0) +- pAd->EEPROMAddressNum = 6; // 93C46 +- else if((data & 0x30) == 0x10) +- pAd->EEPROMAddressNum = 8; // 93C66 ++ if ((data & 0x30) == 0) ++ pAd->EEPROMAddressNum = 6; // 93C46 ++ else if ((data & 0x30) == 0x10) ++ pAd->EEPROMAddressNum = 8; // 93C66 + else +- pAd->EEPROMAddressNum = 8; // 93C86 +- DBGPRINT(RT_DEBUG_TRACE, ("--> EEPROMAddressNum = %d\n", pAd->EEPROMAddressNum )); ++ pAd->EEPROMAddressNum = 8; // 93C86 ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> EEPROMAddressNum = %d\n", pAd->EEPROMAddressNum)); + + // RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize + // MAC address registers according to E2PROM setting + if (mac_addr == NULL || +- strlen((PSTRING) mac_addr) != 17 || +- mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || +- mac_addr[11] != ':' || mac_addr[14] != ':') +- { +- USHORT Addr01,Addr23,Addr45 ; ++ strlen((PSTRING) mac_addr) != 17 || ++ mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || ++ mac_addr[11] != ':' || mac_addr[14] != ':') { ++ USHORT Addr01, Addr23, Addr45; + + RT28xx_EEPROM_READ16(pAd, 0x04, Addr01); + RT28xx_EEPROM_READ16(pAd, 0x06, Addr23); + RT28xx_EEPROM_READ16(pAd, 0x08, Addr45); + +- pAd->PermanentAddress[0] = (UCHAR)(Addr01 & 0xff); +- pAd->PermanentAddress[1] = (UCHAR)(Addr01 >> 8); +- pAd->PermanentAddress[2] = (UCHAR)(Addr23 & 0xff); +- pAd->PermanentAddress[3] = (UCHAR)(Addr23 >> 8); +- pAd->PermanentAddress[4] = (UCHAR)(Addr45 & 0xff); +- pAd->PermanentAddress[5] = (UCHAR)(Addr45 >> 8); ++ pAd->PermanentAddress[0] = (UCHAR) (Addr01 & 0xff); ++ pAd->PermanentAddress[1] = (UCHAR) (Addr01 >> 8); ++ pAd->PermanentAddress[2] = (UCHAR) (Addr23 & 0xff); ++ pAd->PermanentAddress[3] = (UCHAR) (Addr23 >> 8); ++ pAd->PermanentAddress[4] = (UCHAR) (Addr45 & 0xff); ++ pAd->PermanentAddress[5] = (UCHAR) (Addr45 >> 8); + +- DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from E2PROM \n")); +- } +- else +- { +- INT j; +- PSTRING macptr; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Initialize MAC Address from E2PROM \n")); ++ } else { ++ INT j; ++ PSTRING macptr; + + macptr = (PSTRING) mac_addr; + +- for (j=0; jPermanentAddress[j], 1); +- macptr=macptr+3; ++ macptr = macptr + 3; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("Initialize MAC Address from module parameter \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Initialize MAC Address from module parameter \n")); + } + +- + { + //more conveninet to test mbssid, so ap's bssid &0xf1 + if (pAd->PermanentAddress[0] == 0xff) +- pAd->PermanentAddress[0] = RandomByte(pAd)&0xf8; ++ pAd->PermanentAddress[0] = RandomByte(pAd) & 0xf8; + + //if (pAd->PermanentAddress[5] == 0xff) +- // pAd->PermanentAddress[5] = RandomByte(pAd)&0xf8; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", +- pAd->PermanentAddress[0], pAd->PermanentAddress[1], +- pAd->PermanentAddress[2], pAd->PermanentAddress[3], +- pAd->PermanentAddress[4], pAd->PermanentAddress[5])); +- if (pAd->bLocalAdminMAC == FALSE) +- { ++ // pAd->PermanentAddress[5] = RandomByte(pAd)&0xf8; ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", ++ pAd->PermanentAddress[0], ++ pAd->PermanentAddress[1], ++ pAd->PermanentAddress[2], ++ pAd->PermanentAddress[3], ++ pAd->PermanentAddress[4], ++ pAd->PermanentAddress[5])); ++ if (pAd->bLocalAdminMAC == FALSE) { + MAC_DW0_STRUC csr2; + MAC_DW1_STRUC csr3; +- COPY_MAC_ADDR(pAd->CurrentAddress, pAd->PermanentAddress); ++ COPY_MAC_ADDR(pAd->CurrentAddress, ++ pAd->PermanentAddress); + csr2.field.Byte0 = pAd->CurrentAddress[0]; + csr2.field.Byte1 = pAd->CurrentAddress[1]; + csr2.field.Byte2 = pAd->CurrentAddress[2]; +@@ -773,8 +771,9 @@ VOID NICReadEEPROMParameters( + csr3.field.Byte5 = pAd->CurrentAddress[5]; + csr3.field.U2MeMask = 0xff; + RTMP_IO_WRITE32(pAd, MAC_ADDR_DW1, csr3.word); +- DBGPRINT_RAW(RT_DEBUG_TRACE,("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", +- PRINT_MAC(pAd->PermanentAddress))); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", ++ PRINT_MAC(pAd->PermanentAddress))); + } + } + +@@ -785,31 +784,33 @@ VOID NICReadEEPROMParameters( + // if E2PROM version mismatch with driver's expectation, then skip + // all subsequent E2RPOM retieval and set a system error bit to notify GUI + RT28xx_EEPROM_READ16(pAd, EEPROM_VERSION_OFFSET, Version.word); +- pAd->EepromVersion = Version.field.Version + Version.field.FaeReleaseNumber * 256; +- DBGPRINT(RT_DEBUG_TRACE, ("E2PROM: Version = %d, FAE release #%d\n", Version.field.Version, Version.field.FaeReleaseNumber)); +- +- if (Version.field.Version > VALID_EEPROM_VERSION) +- { +- DBGPRINT_ERR(("E2PROM: WRONG VERSION 0x%x, should be %d\n",Version.field.Version, VALID_EEPROM_VERSION)); ++ pAd->EepromVersion = ++ Version.field.Version + Version.field.FaeReleaseNumber * 256; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("E2PROM: Version = %d, FAE release #%d\n", ++ Version.field.Version, Version.field.FaeReleaseNumber)); ++ ++ if (Version.field.Version > VALID_EEPROM_VERSION) { ++ DBGPRINT_ERR(("E2PROM: WRONG VERSION 0x%x, should be %d\n", ++ Version.field.Version, VALID_EEPROM_VERSION)); + /*pAd->SystemErrorBitmap |= 0x00000001; + +- // hard-code default value when no proper E2PROM installed +- pAd->bAutoTxAgcA = FALSE; +- pAd->bAutoTxAgcG = FALSE; ++ // hard-code default value when no proper E2PROM installed ++ pAd->bAutoTxAgcA = FALSE; ++ pAd->bAutoTxAgcG = FALSE; + +- // Default the channel power +- for (i = 0; i < MAX_NUM_OF_CHANNELS; i++) +- pAd->TxPower[i].Power = DEFAULT_RF_TX_POWER; ++ // Default the channel power ++ for (i = 0; i < MAX_NUM_OF_CHANNELS; i++) ++ pAd->TxPower[i].Power = DEFAULT_RF_TX_POWER; + +- // Default the channel power +- for (i = 0; i < MAX_NUM_OF_11JCHANNELS; i++) +- pAd->TxPower11J[i].Power = DEFAULT_RF_TX_POWER; ++ // Default the channel power ++ for (i = 0; i < MAX_NUM_OF_11JCHANNELS; i++) ++ pAd->TxPower11J[i].Power = DEFAULT_RF_TX_POWER; + +- for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++) +- pAd->EEPROMDefaultValue[i] = 0xffff; +- return; */ ++ for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++) ++ pAd->EEPROMDefaultValue[i] = 0xffff; ++ return; */ + } +- + // Read BBP default value from EEPROM and store to array(EEPROMDefaultValue) in pAd + RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, value); + pAd->EEPROMDefaultValue[0] = value; +@@ -820,10 +821,10 @@ VOID NICReadEEPROMParameters( + RT28xx_EEPROM_READ16(pAd, 0x38, value); // Country Region + pAd->EEPROMDefaultValue[2] = value; + +- for(i = 0; i < 8; i++) +- { +- RT28xx_EEPROM_READ16(pAd, EEPROM_BBP_BASE_OFFSET + i*2, value); +- pAd->EEPROMDefaultValue[i+3] = value; ++ for (i = 0; i < 8; i++) { ++ RT28xx_EEPROM_READ16(pAd, EEPROM_BBP_BASE_OFFSET + i * 2, ++ value); ++ pAd->EEPROMDefaultValue[i + 3] = value; + } + + // We have to parse NIC configuration 0 at here. +@@ -831,61 +832,55 @@ VOID NICReadEEPROMParameters( + // Therefore, we have to read TxAutoAgc control beforehand. + // Read Tx AGC control bit + Antenna.word = pAd->EEPROMDefaultValue[0]; +- if (Antenna.word == 0xFFFF) +- { ++ if (Antenna.word == 0xFFFF) { + #ifdef RT30xx +- if(IS_RT3090(pAd)|| IS_RT3390(pAd)) +- { ++ if (IS_RT3090(pAd) || IS_RT3390(pAd)) { + Antenna.word = 0; + Antenna.field.RfIcType = RFIC_3020; + Antenna.field.TxPath = 1; + Antenna.field.RxPath = 1; +- } +- else ++ } else + #endif // RT30xx // + { + +- Antenna.word = 0; +- Antenna.field.RfIcType = RFIC_2820; +- Antenna.field.TxPath = 1; +- Antenna.field.RxPath = 2; +- DBGPRINT(RT_DEBUG_WARN, ("E2PROM error, hard code as 0x%04x\n", Antenna.word)); ++ Antenna.word = 0; ++ Antenna.field.RfIcType = RFIC_2820; ++ Antenna.field.TxPath = 1; ++ Antenna.field.RxPath = 2; ++ DBGPRINT(RT_DEBUG_WARN, ++ ("E2PROM error, hard code as 0x%04x\n", ++ Antenna.word)); + } + } +- + // Choose the desired Tx&Rx stream. +- if ((pAd->CommonCfg.TxStream == 0) || (pAd->CommonCfg.TxStream > Antenna.field.TxPath)) ++ if ((pAd->CommonCfg.TxStream == 0) ++ || (pAd->CommonCfg.TxStream > Antenna.field.TxPath)) + pAd->CommonCfg.TxStream = Antenna.field.TxPath; + +- if ((pAd->CommonCfg.RxStream == 0) || (pAd->CommonCfg.RxStream > Antenna.field.RxPath)) +- { ++ if ((pAd->CommonCfg.RxStream == 0) ++ || (pAd->CommonCfg.RxStream > Antenna.field.RxPath)) { + pAd->CommonCfg.RxStream = Antenna.field.RxPath; + + if ((pAd->MACVersion < RALINK_2883_VERSION) && +- (pAd->CommonCfg.RxStream > 2)) +- { ++ (pAd->CommonCfg.RxStream > 2)) { + // only 2 Rx streams for RT2860 series + pAd->CommonCfg.RxStream = 2; + } + } +- + // 3*3 + // read value from EEPROM and set them to CSR174 ~ 177 in chain0 ~ chain2 + // yet implement +- for(i=0; i<3; i++) +- { ++ for (i = 0; i < 3; i++) { + } + + NicConfig2.word = pAd->EEPROMDefaultValue[1]; + + { +- if ((NicConfig2.word & 0x00ff) == 0xff) +- { ++ if ((NicConfig2.word & 0x00ff) == 0xff) { + NicConfig2.word &= 0xff00; + } + +- if ((NicConfig2.word >> 8) == 0xff) +- { ++ if ((NicConfig2.word >> 8) == 0xff) { + NicConfig2.word &= 0x00ff; + } + } +@@ -895,7 +890,9 @@ VOID NICReadEEPROMParameters( + else + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; + +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("NICReadEEPROMParameters: RxPath = %d, TxPath = %d\n", Antenna.field.RxPath, Antenna.field.TxPath)); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("NICReadEEPROMParameters: RxPath = %d, TxPath = %d\n", ++ Antenna.field.RxPath, Antenna.field.TxPath)); + + // Save the antenna for future use + pAd->Antenna.word = Antenna.word; +@@ -909,28 +906,25 @@ VOID NICReadEEPROMParameters( + #endif // RTMP_RF_RW_SUPPORT // + + #ifdef RTMP_MAC_PCI +- sprintf((PSTRING) pAd->nickname, "RT2860STA"); ++ sprintf((PSTRING) pAd->nickname, "RT2860STA"); + #endif // RTMP_MAC_PCI // + +- + // + // Reset PhyMode if we don't support 802.11a + // Only RFIC_2850 & RFIC_2750 support 802.11a + // + if ((Antenna.field.RfIcType != RFIC_2850) +- && (Antenna.field.RfIcType != RFIC_2750) +- && (Antenna.field.RfIcType != RFIC_3052)) +- { ++ && (Antenna.field.RfIcType != RFIC_2750) ++ && (Antenna.field.RfIcType != RFIC_3052)) { + if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11A)) ++ (pAd->CommonCfg.PhyMode == PHY_11A)) + pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; +- else if ((pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || +- (pAd->CommonCfg.PhyMode == PHY_11N_5G)) ++ else if ((pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || ++ (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) || ++ (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || ++ (pAd->CommonCfg.PhyMode == PHY_11N_5G)) + pAd->CommonCfg.PhyMode = PHY_11BGN_MIXED; + } +- + // Read TSSI reference and TSSI boundary for temperature compensation. This is ugly + // 0. 11b/g + { +@@ -945,7 +939,7 @@ VOID NICReadEEPROMParameters( + pAd->TssiMinusBoundaryG[2] = Power.field.Byte0; + pAd->TssiMinusBoundaryG[1] = Power.field.Byte1; + RT28xx_EEPROM_READ16(pAd, 0x72, Power.word); +- pAd->TssiRefG = Power.field.Byte0; /* reference value [0] */ ++ pAd->TssiRefG = Power.field.Byte0; /* reference value [0] */ + pAd->TssiPlusBoundaryG[1] = Power.field.Byte1; + RT28xx_EEPROM_READ16(pAd, 0x74, Power.word); + pAd->TssiPlusBoundaryG[2] = Power.field.Byte0; +@@ -955,17 +949,21 @@ VOID NICReadEEPROMParameters( + pAd->TxAgcStepG = Power.field.Byte1; + pAd->TxAgcCompensateG = 0; + pAd->TssiMinusBoundaryG[0] = pAd->TssiRefG; +- pAd->TssiPlusBoundaryG[0] = pAd->TssiRefG; ++ pAd->TssiPlusBoundaryG[0] = pAd->TssiRefG; + + // Disable TxAgc if the based value is not right + if (pAd->TssiRefG == 0xff) + pAd->bAutoTxAgcG = FALSE; + +- DBGPRINT(RT_DEBUG_TRACE,("E2PROM: G Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", +- pAd->TssiMinusBoundaryG[4], pAd->TssiMinusBoundaryG[3], pAd->TssiMinusBoundaryG[2], pAd->TssiMinusBoundaryG[1], +- pAd->TssiRefG, +- pAd->TssiPlusBoundaryG[1], pAd->TssiPlusBoundaryG[2], pAd->TssiPlusBoundaryG[3], pAd->TssiPlusBoundaryG[4], +- pAd->TxAgcStepG, pAd->bAutoTxAgcG)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("E2PROM: G Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", ++ pAd->TssiMinusBoundaryG[4], ++ pAd->TssiMinusBoundaryG[3], ++ pAd->TssiMinusBoundaryG[2], ++ pAd->TssiMinusBoundaryG[1], pAd->TssiRefG, ++ pAd->TssiPlusBoundaryG[1], pAd->TssiPlusBoundaryG[2], ++ pAd->TssiPlusBoundaryG[3], pAd->TssiPlusBoundaryG[4], ++ pAd->TxAgcStepG, pAd->bAutoTxAgcG)); + } + // 1. 11a + { +@@ -976,7 +974,7 @@ VOID NICReadEEPROMParameters( + pAd->TssiMinusBoundaryA[2] = Power.field.Byte0; + pAd->TssiMinusBoundaryA[1] = Power.field.Byte1; + RT28xx_EEPROM_READ16(pAd, 0xD8, Power.word); +- pAd->TssiRefA = Power.field.Byte0; ++ pAd->TssiRefA = Power.field.Byte0; + pAd->TssiPlusBoundaryA[1] = Power.field.Byte1; + RT28xx_EEPROM_READ16(pAd, 0xDA, Power.word); + pAd->TssiPlusBoundaryA[2] = Power.field.Byte0; +@@ -986,17 +984,21 @@ VOID NICReadEEPROMParameters( + pAd->TxAgcStepA = Power.field.Byte1; + pAd->TxAgcCompensateA = 0; + pAd->TssiMinusBoundaryA[0] = pAd->TssiRefA; +- pAd->TssiPlusBoundaryA[0] = pAd->TssiRefA; ++ pAd->TssiPlusBoundaryA[0] = pAd->TssiRefA; + + // Disable TxAgc if the based value is not right + if (pAd->TssiRefA == 0xff) + pAd->bAutoTxAgcA = FALSE; + +- DBGPRINT(RT_DEBUG_TRACE,("E2PROM: A Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", +- pAd->TssiMinusBoundaryA[4], pAd->TssiMinusBoundaryA[3], pAd->TssiMinusBoundaryA[2], pAd->TssiMinusBoundaryA[1], +- pAd->TssiRefA, +- pAd->TssiPlusBoundaryA[1], pAd->TssiPlusBoundaryA[2], pAd->TssiPlusBoundaryA[3], pAd->TssiPlusBoundaryA[4], +- pAd->TxAgcStepA, pAd->bAutoTxAgcA)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("E2PROM: A Tssi[-4 .. +4] = %d %d %d %d - %d -%d %d %d %d, step=%d, tuning=%d\n", ++ pAd->TssiMinusBoundaryA[4], ++ pAd->TssiMinusBoundaryA[3], ++ pAd->TssiMinusBoundaryA[2], ++ pAd->TssiMinusBoundaryA[1], pAd->TssiRefA, ++ pAd->TssiPlusBoundaryA[1], pAd->TssiPlusBoundaryA[2], ++ pAd->TssiPlusBoundaryA[3], pAd->TssiPlusBoundaryA[4], ++ pAd->TxAgcStepA, pAd->bAutoTxAgcA)); + } + pAd->BbpRssiToDbmDelta = 0x0; + +@@ -1006,14 +1008,15 @@ VOID NICReadEEPROMParameters( + pAd->RfFreqOffset = (ULONG) (value & 0x00FF); + else + pAd->RfFreqOffset = 0; +- DBGPRINT(RT_DEBUG_TRACE, ("E2PROM: RF FreqOffset=0x%lx \n", pAd->RfFreqOffset)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("E2PROM: RF FreqOffset=0x%lx \n", pAd->RfFreqOffset)); + + //CountryRegion byte offset (38h) +- value = pAd->EEPROMDefaultValue[2] >> 8; // 2.4G band ++ value = pAd->EEPROMDefaultValue[2] >> 8; // 2.4G band + value2 = pAd->EEPROMDefaultValue[2] & 0x00FF; // 5G band + +- if ((value <= REGION_MAXIMUM_BG_BAND) && (value2 <= REGION_MAXIMUM_A_BAND)) +- { ++ if ((value <= REGION_MAXIMUM_BG_BAND) ++ && (value2 <= REGION_MAXIMUM_A_BAND)) { + pAd->CommonCfg.CountryRegion = ((UCHAR) value) | 0x80; + pAd->CommonCfg.CountryRegionForABand = ((UCHAR) value2) | 0x80; + TmpPhy = pAd->CommonCfg.PhyMode; +@@ -1021,7 +1024,6 @@ VOID NICReadEEPROMParameters( + RTMPSetPhyMode(pAd, TmpPhy); + SetCommonHT(pAd); + } +- + // + // Get RSSI Offset on EEPROM 0x9Ah & 0x9Ch. + // The valid value are (-10 ~ 10) +@@ -1029,7 +1031,7 @@ VOID NICReadEEPROMParameters( + RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, value); + pAd->BGRssiOffset0 = value & 0x00ff; + pAd->BGRssiOffset1 = (value >> 8); +- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET+2, value); ++ RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET + 2, value); + pAd->BGRssiOffset2 = value & 0x00ff; + pAd->ALNAGain1 = (value >> 8); + RT28xx_EEPROM_READ16(pAd, EEPROM_LNA_OFFSET, value); +@@ -1051,13 +1053,13 @@ VOID NICReadEEPROMParameters( + RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_A_OFFSET, value); + pAd->ARssiOffset0 = value & 0x00ff; + pAd->ARssiOffset1 = (value >> 8); +- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_A_OFFSET+2), value); ++ RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_A_OFFSET + 2), value); + pAd->ARssiOffset2 = value & 0x00ff; + pAd->ALNAGain2 = (value >> 8); + +- if (((UCHAR)pAd->ALNAGain1 == 0xFF) || (pAd->ALNAGain1 == 0x00)) ++ if (((UCHAR) pAd->ALNAGain1 == 0xFF) || (pAd->ALNAGain1 == 0x00)) + pAd->ALNAGain1 = pAd->ALNAGain0; +- if (((UCHAR)pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) ++ if (((UCHAR) pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) + pAd->ALNAGain2 = pAd->ALNAGain0; + + // Validate 11a RSSI_0 offset. +@@ -1079,15 +1081,13 @@ VOID NICReadEEPROMParameters( + // Note: RT30xX default value is 0x00 and will program to RF_R17 only when this value is not zero. + // RT359X default value is 0x02 + // +- if (IS_RT30xx(pAd) || IS_RT3572(pAd)) +- { ++ if (IS_RT30xx(pAd) || IS_RT3572(pAd)) { + RT28xx_EEPROM_READ16(pAd, EEPROM_TXMIXER_GAIN_2_4G, value); + pAd->TxMixerGain24G = 0; + value &= 0x00ff; +- if (value != 0xff) +- { ++ if (value != 0xff) { + value &= 0x07; +- pAd->TxMixerGain24G = (UCHAR)value; ++ pAd->TxMixerGain24G = (UCHAR) value; + } + } + #endif // RT30xx // +@@ -1096,7 +1096,7 @@ VOID NICReadEEPROMParameters( + // Get LED Setting. + // + RT28xx_EEPROM_READ16(pAd, 0x3a, value); +- pAd->LedCntl.word = (value>>8); ++ pAd->LedCntl.word = (value >> 8); + RT28xx_EEPROM_READ16(pAd, EEPROM_LED1_OFFSET, value); + pAd->Led1 = value; + RT28xx_EEPROM_READ16(pAd, EEPROM_LED2_OFFSET, value); +@@ -1133,40 +1133,35 @@ VOID NICReadEEPROMParameters( + + ======================================================================== + */ +-VOID NICInitAsicFromEEPROM( +- IN PRTMP_ADAPTER pAd) ++VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + { +- UINT32 data = 0; +- UCHAR BBPR1 = 0; +- USHORT i; +-// EEPROM_ANTENNA_STRUC Antenna; +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; +- UCHAR BBPR3 = 0; ++ UINT32 data = 0; ++ UCHAR BBPR1 = 0; ++ USHORT i; ++// EEPROM_ANTENNA_STRUC Antenna; ++ EEPROM_NIC_CONFIG2_STRUC NicConfig2; ++ UCHAR BBPR3 = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitAsicFromEEPROM\n")); +- for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++) +- { ++ for (i = 3; i < NUM_EEPROM_BBP_PARMS; i++) { + UCHAR BbpRegIdx, BbpValue; + +- if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) && (pAd->EEPROMDefaultValue[i] != 0)) +- { +- BbpRegIdx = (UCHAR)(pAd->EEPROMDefaultValue[i] >> 8); +- BbpValue = (UCHAR)(pAd->EEPROMDefaultValue[i] & 0xff); ++ if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) ++ && (pAd->EEPROMDefaultValue[i] != 0)) { ++ BbpRegIdx = (UCHAR) (pAd->EEPROMDefaultValue[i] >> 8); ++ BbpValue = (UCHAR) (pAd->EEPROMDefaultValue[i] & 0xff); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BbpRegIdx, BbpValue); + } + } + +- + NicConfig2.word = pAd->EEPROMDefaultValue[1]; + + { +- if ((NicConfig2.word & 0x00ff) == 0xff) +- { ++ if ((NicConfig2.word & 0x00ff) == 0xff) { + NicConfig2.word &= 0xff00; + } + +- if ((NicConfig2.word >> 8) == 0xff) +- { ++ if ((NicConfig2.word >> 8) == 0xff) { + NicConfig2.word &= 0x00ff; + } + } +@@ -1183,8 +1178,7 @@ VOID NICInitAsicFromEEPROM( + // + // Send LED Setting to MCU. + // +- if (pAd->LedCntl.word == 0xFF) +- { ++ if (pAd->LedCntl.word == 0xFF) { + pAd->LedCntl.word = 0x01; + pAd->Led1 = 0x5555; + pAd->Led2 = 0x2221; +@@ -1197,49 +1191,48 @@ VOID NICInitAsicFromEEPROM( + #endif // RTMP_MAC_USB // + } + +- AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8)); +- AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR)pAd->Led2, (UCHAR)(pAd->Led2 >> 8)); +- AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR)pAd->Led3, (UCHAR)(pAd->Led3 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR) pAd->Led1, ++ (UCHAR) (pAd->Led1 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR) pAd->Led2, ++ (UCHAR) (pAd->Led2 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR) pAd->Led3, ++ (UCHAR) (pAd->Led3 >> 8)); + AsicSendCommandToMcu(pAd, 0x51, 0xff, 0, pAd->LedCntl.field.Polarity); + + pAd->LedIndicatorStrength = 0xFF; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up ++ RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up + + { + // Read Hardware controlled Radio state enable bit +- if (NicConfig2.field.HardwareRadioControl == 1) +- { ++ if (NicConfig2.field.HardwareRadioControl == 1) { + pAd->StaCfg.bHardwareRadio = TRUE; + + // Read GPIO pin2 as Hardware controlled radio state + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); +- if ((data & 0x04) == 0) +- { ++ if ((data & 0x04) == 0) { + pAd->StaCfg.bHwRadio = FALSE; + pAd->StaCfg.bRadio = FALSE; +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); ++// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + } +- } +- else ++ } else + pAd->StaCfg.bHardwareRadio = FALSE; + +- if (pAd->StaCfg.bRadio == FALSE) +- { ++ if (pAd->StaCfg.bRadio == FALSE) { + RTMPSetLED(pAd, LED_RADIO_OFF); +- } +- else +- { ++ } else { + RTMPSetLED(pAd, LED_RADIO_ON); + #ifdef RTMP_MAC_PCI + #ifdef RT3090 +- AsicSendCommandToMcu(pAd, 0x30, PowerRadioOffCID, 0xff, 0x02); ++ AsicSendCommandToMcu(pAd, 0x30, PowerRadioOffCID, 0xff, ++ 0x02); + AsicCheckCommanOk(pAd, PowerRadioOffCID); + #endif // RT3090 // + #ifndef RT3090 + AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); + #endif // RT3090 // +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00); ++ AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, ++ 0x00); + // 2-1. wait command ok. + AsicCheckCommanOk(pAd, PowerWakeCID); + #endif // RTMP_MAC_PCI // +@@ -1248,32 +1241,29 @@ VOID NICInitAsicFromEEPROM( + + #ifdef RTMP_MAC_PCI + #ifdef RT30xx +- if (IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) +- { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +- if (pChipOps->AsicReverseRfFromSleepMode) +- pChipOps->AsicReverseRfFromSleepMode(pAd); +- } +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. +- +- if ((IS_RT3090(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { +- DBGPRINT(RT_DEBUG_TRACE, +- ("%s, release Mcu Lock\n", __func__)); +- RTMP_SEM_LOCK(&pAd->McuCmdLock); +- pAd->brt30xxBanMcuCmd = FALSE; +- RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- } ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ if (pChipOps->AsicReverseRfFromSleepMode) ++ pChipOps->AsicReverseRfFromSleepMode(pAd); ++ } ++ // 3090 MCU Wakeup command needs more time to be stable. ++ // Before stable, don't issue other MCU command to prevent from firmware error. ++ ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { ++ DBGPRINT(RT_DEBUG_TRACE, ("%s, release Mcu Lock\n", __func__)); ++ RTMP_SEM_LOCK(&pAd->McuCmdLock); ++ pAd->brt30xxBanMcuCmd = FALSE; ++ RTMP_SEM_UNLOCK(&pAd->McuCmdLock); ++ } + #endif // RT30xx // + #endif // RTMP_MAC_PCI // + + // Turn off patching for cardbus controller +- if (NicConfig2.field.CardbusAcceleration == 1) +- { +-// pAd->bTest1 = TRUE; ++ if (NicConfig2.field.CardbusAcceleration == 1) { ++// pAd->bTest1 = TRUE; + } + + if (NicConfig2.field.DynamicTxAgcControl == 1) +@@ -1288,16 +1278,11 @@ VOID NICInitAsicFromEEPROM( + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); + BBPR3 &= (~0x18); +- if(pAd->Antenna.field.RxPath == 3) +- { ++ if (pAd->Antenna.field.RxPath == 3) { + BBPR3 |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { ++ } else if (pAd->Antenna.field.RxPath == 2) { + BBPR3 |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { ++ } else if (pAd->Antenna.field.RxPath == 1) { + BBPR3 |= (0x0); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); +@@ -1305,59 +1290,61 @@ VOID NICInitAsicFromEEPROM( + { + // Handle the difference when 1T + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BBPR1); +- if(pAd->Antenna.field.TxPath == 1) +- { +- BBPR1 &= (~0x18); ++ if (pAd->Antenna.field.TxPath == 1) { ++ BBPR1 &= (~0x18); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BBPR1); + +- DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", +- pAd->CommonCfg.bHardwareRadio, pAd->CommonCfg.bHardwareRadio)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", ++ pAd->CommonCfg.bHardwareRadio, ++ pAd->CommonCfg.bHardwareRadio)); + } + + #ifdef RTMP_MAC_USB + #ifdef RT30xx + // update registers from EEPROM for RT3071 or later(3572/3592). + +- if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { ++ if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { + UCHAR RegIdx, RegValue; + USHORT value; + + // after RT3071, write BBP from EEPROM 0xF0 to 0x102 +- for (i = 0xF0; i <= 0x102; i = i+2) +- { ++ for (i = 0xF0; i <= 0x102; i = i + 2) { + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); +- if ((value != 0xFFFF) && (value != 0)) +- { +- RegIdx = (UCHAR)(value >> 8); +- RegValue = (UCHAR)(value & 0xff); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, RegIdx, RegValue); +- DBGPRINT(RT_DEBUG_TRACE, ("Update BBP Registers from EEPROM(0x%0x), BBP(0x%x) = 0x%x\n", i, RegIdx, RegValue)); ++ if ((value != 0xFFFF) && (value != 0)) { ++ RegIdx = (UCHAR) (value >> 8); ++ RegValue = (UCHAR) (value & 0xff); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, RegIdx, ++ RegValue); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Update BBP Registers from EEPROM(0x%0x), BBP(0x%x) = 0x%x\n", ++ i, RegIdx, RegValue)); + } + } + + // after RT3071, write RF from EEPROM 0x104 to 0x116 +- for (i = 0x104; i <= 0x116; i = i+2) +- { ++ for (i = 0x104; i <= 0x116; i = i + 2) { + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); +- if ((value != 0xFFFF) && (value != 0)) +- { +- RegIdx = (UCHAR)(value >> 8); +- RegValue = (UCHAR)(value & 0xff); ++ if ((value != 0xFFFF) && (value != 0)) { ++ RegIdx = (UCHAR) (value >> 8); ++ RegValue = (UCHAR) (value & 0xff); + RT30xxWriteRFRegister(pAd, RegIdx, RegValue); +- DBGPRINT(RT_DEBUG_TRACE, ("Update RF Registers from EEPROM0x%x), BBP(0x%x) = 0x%x\n", i, RegIdx, RegValue)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Update RF Registers from EEPROM0x%x), BBP(0x%x) = 0x%x\n", ++ i, RegIdx, RegValue)); + } + } + } + #endif // RT30xx // + #endif // RTMP_MAC_USB // + +- DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", +- pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, +- pAd->RfIcType, pAd->LedCntl.word)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", ++ pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, ++ pAd->RfIcType, pAd->LedCntl.word)); + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n")); + } + +@@ -1379,37 +1366,36 @@ VOID NICInitAsicFromEEPROM( + + ======================================================================== + */ +-NDIS_STATUS NICInitializeAdapter( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset) ++NDIS_STATUS NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- WPDMA_GLO_CFG_STRUC GloCfg; ++ NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ WPDMA_GLO_CFG_STRUC GloCfg; + #ifdef RTMP_MAC_PCI +- UINT32 Value; +- DELAY_INT_CFG_STRUC IntCfg; ++ UINT32 Value; ++ DELAY_INT_CFG_STRUC IntCfg; + #endif // RTMP_MAC_PCI // +-// INT_MASK_CSR_STRUC IntMask; +- ULONG i =0, j=0; +- AC_TXOP_CSR0_STRUC csr0; ++// INT_MASK_CSR_STRUC IntMask; ++ ULONG i = 0, j = 0; ++ AC_TXOP_CSR0_STRUC csr0; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n")); + + // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: + retry: + i = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ if ((GloCfg.field.TxDMABusy == 0) ++ && (GloCfg.field.RxDMABusy == 0)) + break; + + RTMPusecDelay(1000); + i++; +- }while ( i<100); +- DBGPRINT(RT_DEBUG_TRACE, ("<== DMA offset 0x208 = 0x%x\n", GloCfg.word)); ++ } while (i < 100); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("<== DMA offset 0x208 = 0x%x\n", GloCfg.word)); + GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; ++ GloCfg.field.EnTXWriteBackDDONE = 1; + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + + // Record HW Beacon offset +@@ -1435,35 +1421,36 @@ retry: + #endif // RTMP_MAC_PCI // + + // Initialze ASIC for TX & Rx operation +- if (NICInitializeAsic(pAd , bHardReset) != NDIS_STATUS_SUCCESS) +- { +- if (j++ == 0) +- { ++ if (NICInitializeAsic(pAd, bHardReset) != NDIS_STATUS_SUCCESS) { ++ if (j++ == 0) { + NICLoadFirmware(pAd); + goto retry; + } + return NDIS_STATUS_FAILURE; + } + +- + #ifdef RTMP_MAC_PCI + // Write AC_BK base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); ++ Value = ++ RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR1 : 0x%x\n", Value)); + + // Write AC_BE base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa); ++ Value = ++ RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR0, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR0 : 0x%x\n", Value)); + + // Write AC_VI base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa); ++ Value = ++ RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR2, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR2 : 0x%x\n", Value)); + + // Write AC_VO base address register +- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa); ++ Value = ++ RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%x\n", Value)); + +@@ -1479,23 +1466,23 @@ retry: + + // Init RX Ring index pointer + pAd->RxRing.RxSwReadIdx = 0; +- pAd->RxRing.RxCpuIdx = RX_RING_SIZE-1; ++ pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; + RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); + + // Init TX rings index pointer + { +- for (i=0; iTxRing[i].TxSwFreeIdx = 0; + pAd->TxRing[i].TxCpuIdx = 0; +- RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TxCpuIdx); ++ RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10), ++ pAd->TxRing[i].TxCpuIdx); + } + } + + // init MGMT ring index pointer + pAd->MgmtRing.TxSwFreeIdx = 0; + pAd->MgmtRing.TxCpuIdx = 0; +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); ++ RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); + + // + // set each Ring's SIZE into ASIC. Descriptor Size is fixed by design. +@@ -1516,45 +1503,39 @@ retry: + RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value); + #endif // RTMP_MAC_PCI // + +- + // WMM parameter + csr0.word = 0; + RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +- if (pAd->CommonCfg.PhyMode == PHY_11B) +- { ++ if (pAd->CommonCfg.PhyMode == PHY_11B) { + csr0.field.Ac0Txop = 192; // AC_VI: 192*32us ~= 6ms + csr0.field.Ac1Txop = 96; // AC_VO: 96*32us ~= 3ms +- } +- else +- { ++ } else { + csr0.field.Ac0Txop = 96; // AC_VI: 96*32us ~= 3ms + csr0.field.Ac1Txop = 48; // AC_VO: 48*32us ~= 1.5ms + } + RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word); + +- + #ifdef RTMP_MAC_PCI + // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: + i = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) ++ if ((GloCfg.field.TxDMABusy == 0) ++ && (GloCfg.field.RxDMABusy == 0)) + break; + + RTMPusecDelay(1000); + i++; +- }while ( i < 100); ++ } while (i < 100); + + GloCfg.word &= 0xff0; +- GloCfg.field.EnTXWriteBackDDONE =1; ++ GloCfg.field.EnTXWriteBackDDONE = 1; + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + + IntCfg.word = 0; + RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word); + #endif // RTMP_MAC_PCI // + +- + // reset action + // Load firmware + // Status = NICLoadFirmware(pAd); +@@ -1581,47 +1562,43 @@ retry: + + ======================================================================== + */ +-NDIS_STATUS NICInitializeAsic( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset) ++NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + { +- ULONG Index = 0; +- UCHAR R0 = 0xff; +- UINT32 MacCsr12 = 0, Counter = 0; ++ ULONG Index = 0; ++ UCHAR R0 = 0xff; ++ UINT32 MacCsr12 = 0, Counter = 0; + #ifdef RTMP_MAC_USB +- UINT32 MacCsr0 = 0; +- NTSTATUS Status; +- UCHAR Value = 0xff; ++ UINT32 MacCsr0 = 0; ++ NTSTATUS Status; ++ UCHAR Value = 0xff; + #endif // RTMP_MAC_USB // + #ifdef RT30xx +- UCHAR bbpreg=0; +- UCHAR RFValue=0; ++ UCHAR bbpreg = 0; ++ UCHAR RFValue = 0; + #endif // RT30xx // +- USHORT KeyIdx; +- INT i,apidx; ++ USHORT KeyIdx; ++ INT i, apidx; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n")); + + #ifdef RTMP_MAC_PCI + RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x3); // To fix driver disable/enable hang issue when radio off +- if (bHardReset == TRUE) +- { ++ if (bHardReset == TRUE) { + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3); +- } +- else ++ } else + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); + // Initialize MAC register to default value +- for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) +- { +- RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value); ++ for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) { ++ RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, ++ MACRegTable[Index].Value); + } + + { +- for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) +- { +- RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, STAMACRegTable[Index].Value); ++ for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) { ++ RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, ++ STAMACRegTable[Index].Value); + } + } + #endif // RTMP_MAC_PCI // +@@ -1633,8 +1610,7 @@ NDIS_STATUS NICInitializeAsic( + + //To avoid hang-on issue when interface up in kernel 2.4, + //we use a local variable "MacCsr0" instead of using "pAd->MACVersion" directly. +- do +- { ++ do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + + if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF)) +@@ -1644,7 +1620,8 @@ NDIS_STATUS NICInitializeAsic( + } while (Index++ < 100); + + pAd->MACVersion = MacCsr0; +- DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); + // turn on bit13 (set to zero) after rt2860D. This is to solve high-current issue. + RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacCsr12); + MacCsr12 &= (~0x2000); +@@ -1657,57 +1634,47 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); + + // Initialize MAC register to default value +- for(Index=0; IndexMACVersion & 0xffff) < 0x0211) +- { +- if (pAd->NicConfig2.field.DACTestBit == 1) +- { ++ if ((pAd->MACVersion & 0xffff) < 0x0211) { ++ if (pAd->NicConfig2.field.DACTestBit == 1) { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically +- } +- else +- { ++ } else { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0F); // To fix throughput drop drastically + } +- } +- else +- { ++ } else { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0); + } +- } +- else if (IS_RT3070(pAd)) +- { +- if (((pAd->MACVersion & 0xffff) < 0x0201)) +- { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); ++ } else if (IS_RT3070(pAd)) { ++ if (((pAd->MACVersion & 0xffff) < 0x0201)) { ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically +- } +- else +- { ++ } else { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0); + } + } +@@ -1717,18 +1684,18 @@ NDIS_STATUS NICInitializeAsic( + // Before program BBP, we need to wait BBP/RF get wake up. + // + Index = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, MAC_STATUS_CFG, &MacCsr12); + + if ((MacCsr12 & 0x03) == 0) // if BB.RF is stable + break; + +- DBGPRINT(RT_DEBUG_TRACE, ("Check MAC_STATUS_CFG = Busy = %x\n", MacCsr12)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Check MAC_STATUS_CFG = Busy = %x\n", MacCsr12)); + RTMPusecDelay(1000); + } while (Index++ < 100); + +- // The commands to firmware should be after these commands, these commands will init firmware ++ // The commands to firmware should be after these commands, these commands will init firmware + // PCI and USB are not the same because PCI driver needs to wait for PCI bus ready + RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0); // initialize BBP R/W access agent + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, 0); +@@ -1741,8 +1708,7 @@ NDIS_STATUS NICInitializeAsic( + + // Read BBP register, make sure BBP is up and running before write new data + Index = 0; +- do +- { ++ do { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R0, &R0); + DBGPRINT(RT_DEBUG_TRACE, ("BBP version = %x\n", R0)); + } while ((++Index < 20) && ((R0 == 0xff) || (R0 == 0x00))); +@@ -1752,15 +1718,14 @@ NDIS_STATUS NICInitializeAsic( + return NDIS_STATUS_FAILURE; + + // Initialize BBP register to default value +- for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value); ++ for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, ++ BBPRegTable[Index].Value); + } + + #ifdef RTMP_MAC_PCI + // TODO: shiang, check MACVersion, currently, rbus-based chip use this. +- if (pAd->MACVersion == 0x28720200) +- { ++ if (pAd->MACVersion == 0x28720200) { + //UCHAR value; + ULONG value2; + +@@ -1770,8 +1735,8 @@ NDIS_STATUS NICInitializeAsic( + + //Maximum PSDU length from 16K to 32K bytes + RTMP_IO_READ32(pAd, MAX_LEN_CFG, &value2); +- value2 &= ~(0x3<<12); +- value2 |= (0x2<<12); ++ value2 &= ~(0x3 << 12); ++ value2 |= (0x2 << 12); + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, value2); + } + #endif // RTMP_MAC_PCI // +@@ -1779,53 +1744,45 @@ NDIS_STATUS NICInitializeAsic( + // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. + // RT3090 should not program BBP R84 to 0x19, otherwise TX will block. + //3070/71/72,3090,3090A( are included in RT30xx),3572,3390 +- if (((pAd->MACVersion & 0xffff) != 0x0101) && !(IS_RT30xx(pAd)|| IS_RT3572(pAd) || IS_RT3390(pAd))) ++ if (((pAd->MACVersion & 0xffff) != 0x0101) ++ && !(IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); + + #ifdef RT30xx + // add by johnli, RF power sequence setup +- if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +- { //update for RT3070/71/72/90/91/92,3572,3390. ++ if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { //update for RT3070/71/72/90/91/92,3572,3390. + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R79, 0x13); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R80, 0x05); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R81, 0x33); + } + +- if (IS_RT3090(pAd)||IS_RT3390(pAd)) // RT309x, RT3071/72 ++ if (IS_RT3090(pAd) || IS_RT3390(pAd)) // RT309x, RT3071/72 + { + // enable DC filter +- if ((pAd->MACVersion & 0xffff) >= 0x0211) +- { ++ if ((pAd->MACVersion & 0xffff) >= 0x0211) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); + } +- + // improve power consumption + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R138, &bbpreg); +- if (pAd->Antenna.field.TxPath == 1) +- { ++ if (pAd->Antenna.field.TxPath == 1) { + // turn off tx DAC_1 + bbpreg = (bbpreg | 0x20); + } + +- if (pAd->Antenna.field.RxPath == 1) +- { ++ if (pAd->Antenna.field.RxPath == 1) { + // turn off tx ADC_1 + bbpreg &= (~0x2); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R138, bbpreg); + + // improve power consumption in RT3071 Ver.E +- if ((pAd->MACVersion & 0xffff) >= 0x0211) +- { ++ if ((pAd->MACVersion & 0xffff) >= 0x0211) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); + bbpreg &= (~0x3); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); + } +- } +- else if (IS_RT3070(pAd)) +- { +- if ((pAd->MACVersion & 0xffff) >= 0x0201) +- { ++ } else if (IS_RT3070(pAd)) { ++ if ((pAd->MACVersion & 0xffff) >= 0x0201) { + // enable DC filter + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); + +@@ -1834,19 +1791,16 @@ NDIS_STATUS NICInitializeAsic( + bbpreg &= (~0x3); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); + } +- + // TX_LO1_en, RF R17 register Bit 3 to 0 + RT30xxReadRFRegister(pAd, RF_R17, &RFValue); + RFValue &= (~0x08); + // to fix rx long range issue +- if (pAd->NicConfig2.field.ExternalLNAForG == 0) +- { ++ if (pAd->NicConfig2.field.ExternalLNAForG == 0) { + RFValue |= 0x20; + } + // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h +- if (pAd->TxMixerGain24G >= 1) +- { +- RFValue &= (~0x7); // clean bit [2:0] ++ if (pAd->TxMixerGain24G >= 1) { ++ RFValue &= (~0x7); // clean bit [2:0] + RFValue |= pAd->TxMixerGain24G; + } + RT30xxWriteRFRegister(pAd, RF_R17, RFValue); +@@ -1854,13 +1808,12 @@ NDIS_STATUS NICInitializeAsic( + // end johnli + #endif // RT30xx // + +- if (pAd->MACVersion == 0x28600100) +- { ++ if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); +- } ++ } + +- if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) // 3*3 ++ if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) // 3*3 + { + // enlarge MAX_LEN_CFG + UINT32 csr; +@@ -1869,25 +1822,25 @@ NDIS_STATUS NICInitializeAsic( + csr |= 0x2000; + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, csr); + } +- + #ifdef RTMP_MAC_USB +-{ +- UCHAR MAC_Value[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0,0}; +- +- //Initialize WCID table +- Value = 0xff; +- for(Index =0 ;Index < 254;Index++) + { +- RTUSBMultiWrite(pAd, (USHORT)(MAC_WCID_BASE + Index * 8), MAC_Value, 8); ++ UCHAR MAC_Value[] = ++ { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0 }; ++ ++ //Initialize WCID table ++ Value = 0xff; ++ for (Index = 0; Index < 254; Index++) { ++ RTUSBMultiWrite(pAd, ++ (USHORT) (MAC_WCID_BASE + Index * 8), ++ MAC_Value, 8); ++ } + } +-} + #endif // RTMP_MAC_USB // + + // Add radio off control + { +- if (pAd->StaCfg.bRadio == FALSE) +- { +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); ++ if (pAd->StaCfg.bRadio == FALSE) { ++// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + DBGPRINT(RT_DEBUG_TRACE, ("Set Radio Off\n")); + } +@@ -1904,35 +1857,33 @@ NDIS_STATUS NICInitializeAsic( + // ASIC will keep garbage value after boot + // Clear all shared key table when initial + // This routine can be ignored in radio-ON/OFF operation. +- if (bHardReset) +- { +- for (KeyIdx = 0; KeyIdx < 4; KeyIdx++) +- { +- RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4*KeyIdx, 0); ++ if (bHardReset) { ++ for (KeyIdx = 0; KeyIdx < 4; KeyIdx++) { ++ RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * KeyIdx, ++ 0); + } + + // Clear all pairwise key table when initial +- for (KeyIdx = 0; KeyIdx < 256; KeyIdx++) +- { +- RTMP_IO_WRITE32(pAd, MAC_WCID_ATTRIBUTE_BASE + (KeyIdx * HW_WCID_ATTRI_SIZE), 1); ++ for (KeyIdx = 0; KeyIdx < 256; KeyIdx++) { ++ RTMP_IO_WRITE32(pAd, ++ MAC_WCID_ATTRIBUTE_BASE + ++ (KeyIdx * HW_WCID_ATTRI_SIZE), 1); + } + } +- + // assert HOST ready bit + // RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark + // RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4); + + // It isn't necessary to clear this space when not hard reset. +- if (bHardReset == TRUE) +- { ++ if (bHardReset == TRUE) { + // clear all on-chip BEACON frame space +- for (apidx = 0; apidx < HW_BEACON_MAX_COUNT; apidx++) +- { +- for (i = 0; i < HW_BEACON_OFFSET>>2; i+=4) +- RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[apidx] + i, 0x00); ++ for (apidx = 0; apidx < HW_BEACON_MAX_COUNT; apidx++) { ++ for (i = 0; i < HW_BEACON_OFFSET >> 2; i += 4) ++ RTMP_IO_WRITE32(pAd, ++ pAd->BeaconOffset[apidx] + i, ++ 0x00); + } + } +- + #ifdef RTMP_MAC_USB + AsicDisableSync(pAd); + // Clear raw counters +@@ -1944,14 +1895,14 @@ NDIS_STATUS NICInitializeAsic( + RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter); + // Default PCI clock cycle per ms is different as default setting, which is based on PCI. + RTMP_IO_READ32(pAd, USB_CYC_CFG, &Counter); +- Counter&=0xffffff00; +- Counter|=0x000001e; ++ Counter &= 0xffffff00; ++ Counter |= 0x000001e; + RTMP_IO_WRITE32(pAd, USB_CYC_CFG, Counter); + #endif // RTMP_MAC_USB // + + { + // for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT. +- if ((pAd->MACVersion&0xffff) != 0x0101) ++ if ((pAd->MACVersion & 0xffff) != 0x0101) + RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x583f); + } + +@@ -1978,10 +1929,9 @@ NDIS_STATUS NICInitializeAsic( + + ======================================================================== + */ +-VOID NICIssueReset( +- IN PRTMP_ADAPTER pAd) ++VOID NICIssueReset(IN PRTMP_ADAPTER pAd) + { +- UINT32 Value = 0; ++ UINT32 Value = 0; + DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); + + // Abort Tx, prevent ASIC from writing to Host memory +@@ -1993,7 +1943,7 @@ VOID NICIssueReset( + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); + + // Issue reset and clear from reset state +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); // 2004-09-17 change from 0x01 ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); // 2004-09-17 change from 0x01 + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x00); + + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICIssueReset\n")); +@@ -2015,132 +1965,115 @@ VOID NICIssueReset( + + ======================================================================== + */ +-BOOLEAN NICCheckForHang( +- IN PRTMP_ADAPTER pAd) ++BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd) + { + return (FALSE); + } + +-VOID NICUpdateFifoStaCounters( +- IN PRTMP_ADAPTER pAd) ++VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + { +- TX_STA_FIFO_STRUC StaFifo; +- MAC_TABLE_ENTRY *pEntry; +- UCHAR i = 0; +- UCHAR pid = 0, wcid = 0; +- CHAR reTry; +- UCHAR succMCS; +- +- do +- { +- RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word); ++ TX_STA_FIFO_STRUC StaFifo; ++ MAC_TABLE_ENTRY *pEntry; ++ UCHAR i = 0; ++ UCHAR pid = 0, wcid = 0; ++ CHAR reTry; ++ UCHAR succMCS; + +- if (StaFifo.field.bValid == 0) +- break; ++ do { ++ RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word); + +- wcid = (UCHAR)StaFifo.field.wcid; ++ if (StaFifo.field.bValid == 0) ++ break; + ++ wcid = (UCHAR) StaFifo.field.wcid; + + /* ignore NoACK and MGMT frame use 0xFF as WCID */ +- if ((StaFifo.field.TxAckRequired == 0) || (wcid >= MAX_LEN_OF_MAC_TABLE)) +- { +- i++; +- continue; +- } +- +- /* PID store Tx MCS Rate */ +- pid = (UCHAR)StaFifo.field.PidType; ++ if ((StaFifo.field.TxAckRequired == 0) ++ || (wcid >= MAX_LEN_OF_MAC_TABLE)) { ++ i++; ++ continue; ++ } + +- pEntry = &pAd->MacTab.Content[wcid]; ++ /* PID store Tx MCS Rate */ ++ pid = (UCHAR) StaFifo.field.PidType; + +- pEntry->DebugFIFOCount++; ++ pEntry = &pAd->MacTab.Content[wcid]; + +- if (StaFifo.field.TxBF) // 3*3 +- pEntry->TxBFCount++; ++ pEntry->DebugFIFOCount++; + +- if (!StaFifo.field.TxSuccess) +- { +- pEntry->FIFOCount++; +- pEntry->OneSecTxFailCount++; ++ if (StaFifo.field.TxBF) // 3*3 ++ pEntry->TxBFCount++; + +- if (pEntry->FIFOCount >= 1) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("#")); +- pEntry->NoBADataCountDown = 64; ++ if (!StaFifo.field.TxSuccess) { ++ pEntry->FIFOCount++; ++ pEntry->OneSecTxFailCount++; + +- if(pEntry->PsMode == PWR_ACTIVE) +- { +- int tid; +- for (tid=0; tidAid, tid, FALSE, FALSE); +- } ++ if (pEntry->FIFOCount >= 1) { ++ DBGPRINT(RT_DEBUG_TRACE, ("#")); ++ pEntry->NoBADataCountDown = 64; + +- // Update the continuous transmission counter except PS mode +- pEntry->ContinueTxFailCnt++; +- } +- else +- { +- // Clear the FIFOCount when sta in Power Save mode. Basically we assume +- // this tx error happened due to sta just go to sleep. +- pEntry->FIFOCount = 0; +- pEntry->ContinueTxFailCnt = 0; ++ if (pEntry->PsMode == PWR_ACTIVE) { ++ int tid; ++ for (tid = 0; tid < NUM_OF_TID; tid++) { ++ BAOriSessionTearDown(pAd, ++ pEntry-> ++ Aid, tid, ++ FALSE, ++ FALSE); + } +- //pEntry->FIFOCount = 0; ++ ++ // Update the continuous transmission counter except PS mode ++ pEntry->ContinueTxFailCnt++; ++ } else { ++ // Clear the FIFOCount when sta in Power Save mode. Basically we assume ++ // this tx error happened due to sta just go to sleep. ++ pEntry->FIFOCount = 0; ++ pEntry->ContinueTxFailCnt = 0; + } +- //pEntry->bSendBAR = TRUE; ++ //pEntry->FIFOCount = 0; + } +- else +- { +- if ((pEntry->PsMode != PWR_SAVE) && (pEntry->NoBADataCountDown > 0)) +- { +- pEntry->NoBADataCountDown--; +- if (pEntry->NoBADataCountDown==0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("@\n")); +- } ++ //pEntry->bSendBAR = TRUE; ++ } else { ++ if ((pEntry->PsMode != PWR_SAVE) ++ && (pEntry->NoBADataCountDown > 0)) { ++ pEntry->NoBADataCountDown--; ++ if (pEntry->NoBADataCountDown == 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ("@\n")); + } +- +- pEntry->FIFOCount = 0; +- pEntry->OneSecTxNoRetryOkCount++; +- // update NoDataIdleCount when sucessful send packet to STA. +- pEntry->NoDataIdleCount = 0; +- pEntry->ContinueTxFailCnt = 0; + } + +- succMCS = StaFifo.field.SuccessRate & 0x7F; ++ pEntry->FIFOCount = 0; ++ pEntry->OneSecTxNoRetryOkCount++; ++ // update NoDataIdleCount when sucessful send packet to STA. ++ pEntry->NoDataIdleCount = 0; ++ pEntry->ContinueTxFailCnt = 0; ++ } + +- reTry = pid - succMCS; ++ succMCS = StaFifo.field.SuccessRate & 0x7F; + +- if (StaFifo.field.TxSuccess) +- { +- pEntry->TXMCSExpected[pid]++; +- if (pid == succMCS) +- { +- pEntry->TXMCSSuccessful[pid]++; +- } +- else +- { +- pEntry->TXMCSAutoFallBack[pid][succMCS]++; +- } +- } +- else +- { +- pEntry->TXMCSFailed[pid]++; ++ reTry = pid - succMCS; ++ ++ if (StaFifo.field.TxSuccess) { ++ pEntry->TXMCSExpected[pid]++; ++ if (pid == succMCS) { ++ pEntry->TXMCSSuccessful[pid]++; ++ } else { ++ pEntry->TXMCSAutoFallBack[pid][succMCS]++; + } ++ } else { ++ pEntry->TXMCSFailed[pid]++; ++ } + +- if (reTry > 0) +- { +- if ((pid >= 12) && succMCS <=7) +- { +- reTry -= 4; +- } +- pEntry->OneSecTxRetryOkCount += reTry; ++ if (reTry > 0) { ++ if ((pid >= 12) && succMCS <= 7) { ++ reTry -= 4; + } ++ pEntry->OneSecTxRetryOkCount += reTry; ++ } + +- i++; +- // ASIC store 16 stack +- } while ( i < (2*TX_RING_SIZE) ); ++ i++; ++ // ASIC store 16 stack ++ } while (i < (2 * TX_RING_SIZE)); + + } + +@@ -2161,29 +2094,27 @@ VOID NICUpdateFifoStaCounters( + + ======================================================================== + */ +-VOID NICUpdateRawCounters( +- IN PRTMP_ADAPTER pAd) ++VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + { +- UINT32 OldValue;//, Value2; +- //ULONG PageSum, OneSecTransmitCount; +- //ULONG TxErrorRatio, Retry, Fail; +- RX_STA_CNT0_STRUC RxStaCnt0; +- RX_STA_CNT1_STRUC RxStaCnt1; +- RX_STA_CNT2_STRUC RxStaCnt2; +- TX_STA_CNT0_STRUC TxStaCnt0; +- TX_STA_CNT1_STRUC StaTx1; +- TX_STA_CNT2_STRUC StaTx2; +- TX_AGG_CNT_STRUC TxAggCnt; +- TX_AGG_CNT0_STRUC TxAggCnt0; +- TX_AGG_CNT1_STRUC TxAggCnt1; +- TX_AGG_CNT2_STRUC TxAggCnt2; +- TX_AGG_CNT3_STRUC TxAggCnt3; +- TX_AGG_CNT4_STRUC TxAggCnt4; +- TX_AGG_CNT5_STRUC TxAggCnt5; +- TX_AGG_CNT6_STRUC TxAggCnt6; +- TX_AGG_CNT7_STRUC TxAggCnt7; +- COUNTER_RALINK *pRalinkCounters; +- ++ UINT32 OldValue; //, Value2; ++ //ULONG PageSum, OneSecTransmitCount; ++ //ULONG TxErrorRatio, Retry, Fail; ++ RX_STA_CNT0_STRUC RxStaCnt0; ++ RX_STA_CNT1_STRUC RxStaCnt1; ++ RX_STA_CNT2_STRUC RxStaCnt2; ++ TX_STA_CNT0_STRUC TxStaCnt0; ++ TX_STA_CNT1_STRUC StaTx1; ++ TX_STA_CNT2_STRUC StaTx2; ++ TX_AGG_CNT_STRUC TxAggCnt; ++ TX_AGG_CNT0_STRUC TxAggCnt0; ++ TX_AGG_CNT1_STRUC TxAggCnt1; ++ TX_AGG_CNT2_STRUC TxAggCnt2; ++ TX_AGG_CNT3_STRUC TxAggCnt3; ++ TX_AGG_CNT4_STRUC TxAggCnt4; ++ TX_AGG_CNT5_STRUC TxAggCnt5; ++ TX_AGG_CNT6_STRUC TxAggCnt6; ++ TX_AGG_CNT7_STRUC TxAggCnt7; ++ COUNTER_RALINK *pRalinkCounters; + + pRalinkCounters = &pAd->RalinkCounters; + +@@ -2192,15 +2123,16 @@ VOID NICUpdateRawCounters( + + { + RTMP_IO_READ32(pAd, RX_STA_CNT1, &RxStaCnt1.word); +- // Update RX PLCP error counter +- pAd->PrivateInfo.PhyRxErrCnt += RxStaCnt1.field.PlcpErr; ++ // Update RX PLCP error counter ++ pAd->PrivateInfo.PhyRxErrCnt += RxStaCnt1.field.PlcpErr; + // Update False CCA counter +- pAd->RalinkCounters.OneSecFalseCCACnt += RxStaCnt1.field.FalseCca; ++ pAd->RalinkCounters.OneSecFalseCCACnt += ++ RxStaCnt1.field.FalseCca; + } + + // Update FCS counters +- OldValue= pAd->WlanCounters.FCSErrorCount.u.LowPart; +- pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); // >> 7); ++ OldValue = pAd->WlanCounters.FCSErrorCount.u.LowPart; ++ pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); // >> 7); + if (pAd->WlanCounters.FCSErrorCount.u.LowPart < OldValue) + pAd->WlanCounters.FCSErrorCount.u.HighPart++; + +@@ -2213,19 +2145,17 @@ VOID NICUpdateRawCounters( + + // Update Duplicate Rcv check + pRalinkCounters->DuplicateRcv += RxStaCnt2.field.RxDupliCount; +- pAd->WlanCounters.FrameDuplicateCount.u.LowPart += RxStaCnt2.field.RxDupliCount; ++ pAd->WlanCounters.FrameDuplicateCount.u.LowPart += ++ RxStaCnt2.field.RxDupliCount; + // Update RX Overflow counter + pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount); + + //pAd->RalinkCounters.RxCount = 0; + #ifdef RTMP_MAC_USB +- if (pRalinkCounters->RxCount != pAd->watchDogRxCnt) +- { ++ if (pRalinkCounters->RxCount != pAd->watchDogRxCnt) { + pAd->watchDogRxCnt = pRalinkCounters->RxCount; + pAd->watchDogRxOverFlowCnt = 0; +- } +- else +- { ++ } else { + if (RxStaCnt2.field.RxFifoOverflowCount) + pAd->watchDogRxOverFlowCnt++; + else +@@ -2233,25 +2163,29 @@ VOID NICUpdateRawCounters( + } + #endif // RTMP_MAC_USB // + +- + //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || +- // (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) +- if (!pAd->bUpdateBcnCntDone) +- { +- // Update BEACON sent count +- RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); +- RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word); +- pRalinkCounters->OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount; +- pRalinkCounters->OneSecTxRetryOkCount += StaTx1.field.TxRetransmit; +- pRalinkCounters->OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess; +- pRalinkCounters->OneSecTxFailCount += TxStaCnt0.field.TxFailCount; +- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess; +- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit; +- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount; ++ // (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) ++ if (!pAd->bUpdateBcnCntDone) { ++ // Update BEACON sent count ++ RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); ++ RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); ++ RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word); ++ pRalinkCounters->OneSecBeaconSentCnt += ++ TxStaCnt0.field.TxBeaconCount; ++ pRalinkCounters->OneSecTxRetryOkCount += ++ StaTx1.field.TxRetransmit; ++ pRalinkCounters->OneSecTxNoRetryOkCount += ++ StaTx1.field.TxSuccess; ++ pRalinkCounters->OneSecTxFailCount += ++ TxStaCnt0.field.TxFailCount; ++ pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += ++ StaTx1.field.TxSuccess; ++ pAd->WlanCounters.RetryCount.u.LowPart += ++ StaTx1.field.TxRetransmit; ++ pAd->WlanCounters.FailedCount.u.LowPart += ++ TxStaCnt0.field.TxFailCount; + } + +- + //if (pAd->bStaFifoTest == TRUE) + { + RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word); +@@ -2265,58 +2199,87 @@ VOID NICUpdateRawCounters( + RTMP_IO_READ32(pAd, TX_AGG_CNT7, &TxAggCnt7.word); + pRalinkCounters->TxAggCount += TxAggCnt.field.AggTxCount; + pRalinkCounters->TxNonAggCount += TxAggCnt.field.NonAggTxCount; +- pRalinkCounters->TxAgg1MPDUCount += TxAggCnt0.field.AggSize1Count; +- pRalinkCounters->TxAgg2MPDUCount += TxAggCnt0.field.AggSize2Count; +- +- pRalinkCounters->TxAgg3MPDUCount += TxAggCnt1.field.AggSize3Count; +- pRalinkCounters->TxAgg4MPDUCount += TxAggCnt1.field.AggSize4Count; +- pRalinkCounters->TxAgg5MPDUCount += TxAggCnt2.field.AggSize5Count; +- pRalinkCounters->TxAgg6MPDUCount += TxAggCnt2.field.AggSize6Count; +- +- pRalinkCounters->TxAgg7MPDUCount += TxAggCnt3.field.AggSize7Count; +- pRalinkCounters->TxAgg8MPDUCount += TxAggCnt3.field.AggSize8Count; +- pRalinkCounters->TxAgg9MPDUCount += TxAggCnt4.field.AggSize9Count; +- pRalinkCounters->TxAgg10MPDUCount += TxAggCnt4.field.AggSize10Count; +- +- pRalinkCounters->TxAgg11MPDUCount += TxAggCnt5.field.AggSize11Count; +- pRalinkCounters->TxAgg12MPDUCount += TxAggCnt5.field.AggSize12Count; +- pRalinkCounters->TxAgg13MPDUCount += TxAggCnt6.field.AggSize13Count; +- pRalinkCounters->TxAgg14MPDUCount += TxAggCnt6.field.AggSize14Count; +- +- pRalinkCounters->TxAgg15MPDUCount += TxAggCnt7.field.AggSize15Count; +- pRalinkCounters->TxAgg16MPDUCount += TxAggCnt7.field.AggSize16Count; ++ pRalinkCounters->TxAgg1MPDUCount += ++ TxAggCnt0.field.AggSize1Count; ++ pRalinkCounters->TxAgg2MPDUCount += ++ TxAggCnt0.field.AggSize2Count; ++ ++ pRalinkCounters->TxAgg3MPDUCount += ++ TxAggCnt1.field.AggSize3Count; ++ pRalinkCounters->TxAgg4MPDUCount += ++ TxAggCnt1.field.AggSize4Count; ++ pRalinkCounters->TxAgg5MPDUCount += ++ TxAggCnt2.field.AggSize5Count; ++ pRalinkCounters->TxAgg6MPDUCount += ++ TxAggCnt2.field.AggSize6Count; ++ ++ pRalinkCounters->TxAgg7MPDUCount += ++ TxAggCnt3.field.AggSize7Count; ++ pRalinkCounters->TxAgg8MPDUCount += ++ TxAggCnt3.field.AggSize8Count; ++ pRalinkCounters->TxAgg9MPDUCount += ++ TxAggCnt4.field.AggSize9Count; ++ pRalinkCounters->TxAgg10MPDUCount += ++ TxAggCnt4.field.AggSize10Count; ++ ++ pRalinkCounters->TxAgg11MPDUCount += ++ TxAggCnt5.field.AggSize11Count; ++ pRalinkCounters->TxAgg12MPDUCount += ++ TxAggCnt5.field.AggSize12Count; ++ pRalinkCounters->TxAgg13MPDUCount += ++ TxAggCnt6.field.AggSize13Count; ++ pRalinkCounters->TxAgg14MPDUCount += ++ TxAggCnt6.field.AggSize14Count; ++ ++ pRalinkCounters->TxAgg15MPDUCount += ++ TxAggCnt7.field.AggSize15Count; ++ pRalinkCounters->TxAgg16MPDUCount += ++ TxAggCnt7.field.AggSize16Count; + + // Calculate the transmitted A-MPDU count +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += TxAggCnt0.field.AggSize1Count; +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt0.field.AggSize2Count / 2); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize3Count / 3); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt1.field.AggSize4Count / 4); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize5Count / 5); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt2.field.AggSize6Count / 6); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize7Count / 7); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt3.field.AggSize8Count / 8); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize9Count / 9); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt4.field.AggSize10Count / 10); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize11Count / 11); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt5.field.AggSize12Count / 12); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize13Count / 13); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt6.field.AggSize14Count / 14); +- +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize15Count / 15); +- pRalinkCounters->TransmittedAMPDUCount.u.LowPart += (TxAggCnt7.field.AggSize16Count / 16); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ TxAggCnt0.field.AggSize1Count; ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt0.field.AggSize2Count / 2); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt1.field.AggSize3Count / 3); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt1.field.AggSize4Count / 4); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt2.field.AggSize5Count / 5); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt2.field.AggSize6Count / 6); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt3.field.AggSize7Count / 7); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt3.field.AggSize8Count / 8); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt4.field.AggSize9Count / 9); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt4.field.AggSize10Count / 10); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt5.field.AggSize11Count / 11); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt5.field.AggSize12Count / 12); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt6.field.AggSize13Count / 13); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt6.field.AggSize14Count / 14); ++ ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt7.field.AggSize15Count / 15); ++ pRalinkCounters->TransmittedAMPDUCount.u.LowPart += ++ (TxAggCnt7.field.AggSize16Count / 16); + } + +- +- + } + +- + /* + ======================================================================== + +@@ -2336,8 +2299,7 @@ VOID NICUpdateRawCounters( + + ======================================================================== + */ +-VOID NICResetFromError( +- IN PRTMP_ADAPTER pAd) ++VOID NICResetFromError(IN PRTMP_ADAPTER pAd) + { + // Reset BBP (according to alex, reset ASIC will force reset BBP + // Therefore, skip the reset BBP +@@ -2355,18 +2317,15 @@ VOID NICResetFromError( + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } + +- +-NDIS_STATUS NICLoadFirmware( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS NICLoadFirmware(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS status = NDIS_STATUS_SUCCESS; ++ NDIS_STATUS status = NDIS_STATUS_SUCCESS; + if (pAd->chipOps.loadFirmware) + status = pAd->chipOps.loadFirmware(pAd); + + return status; + } + +- + /* + ======================================================================== + +@@ -2380,14 +2339,12 @@ NDIS_STATUS NICLoadFirmware( + + ======================================================================== + */ +-VOID NICEraseFirmware( +- IN PRTMP_ADAPTER pAd) ++VOID NICEraseFirmware(IN PRTMP_ADAPTER pAd) + { + if (pAd->chipOps.eraseFirmware) + pAd->chipOps.eraseFirmware(pAd); + +-}/* End of NICEraseFirmware */ +- ++} /* End of NICEraseFirmware */ + + /* + ======================================================================== +@@ -2410,13 +2367,11 @@ VOID NICEraseFirmware( + + ======================================================================== + */ +-NDIS_STATUS NICLoadRateSwitchingParams( +- IN PRTMP_ADAPTER pAd) ++NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd) + { + return NDIS_STATUS_SUCCESS; + } + +- + /* + ======================================================================== + +@@ -2438,20 +2393,16 @@ NDIS_STATUS NICLoadRateSwitchingParams( + + ======================================================================== + */ +-ULONG RTMPCompareMemory( +- IN PVOID pSrc1, +- IN PVOID pSrc2, +- IN ULONG Length) ++ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length) + { +- PUCHAR pMem1; +- PUCHAR pMem2; +- ULONG Index = 0; ++ PUCHAR pMem1; ++ PUCHAR pMem2; ++ ULONG Index = 0; + + pMem1 = (PUCHAR) pSrc1; + pMem2 = (PUCHAR) pSrc2; + +- for (Index = 0; Index < Length; Index++) +- { ++ for (Index = 0; Index < Length; Index++) { + if (pMem1[Index] > pMem2[Index]) + return (1); + else if (pMem1[Index] < pMem2[Index]) +@@ -2482,22 +2433,18 @@ ULONG RTMPCompareMemory( + + ======================================================================== + */ +-VOID RTMPZeroMemory( +- IN PVOID pSrc, +- IN ULONG Length) ++VOID RTMPZeroMemory(IN PVOID pSrc, IN ULONG Length) + { +- PUCHAR pMem; +- ULONG Index = 0; ++ PUCHAR pMem; ++ ULONG Index = 0; + + pMem = (PUCHAR) pSrc; + +- for (Index = 0; Index < Length; Index++) +- { ++ for (Index = 0; Index < Length; Index++) { + pMem[Index] = 0x00; + } + } + +- + /* + ======================================================================== + +@@ -2519,22 +2466,18 @@ VOID RTMPZeroMemory( + + ======================================================================== + */ +-VOID RTMPMoveMemory( +- OUT PVOID pDest, +- IN PVOID pSrc, +- IN ULONG Length) ++VOID RTMPMoveMemory(OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length) + { +- PUCHAR pMem1; +- PUCHAR pMem2; +- UINT Index; ++ PUCHAR pMem1; ++ PUCHAR pMem2; ++ UINT Index; + +- ASSERT((Length==0) || (pDest && pSrc)); ++ ASSERT((Length == 0) || (pDest && pSrc)); + + pMem1 = (PUCHAR) pDest; + pMem2 = (PUCHAR) pSrc; + +- for (Index = 0; Index < Length; Index++) +- { ++ for (Index = 0; Index < Length; Index++) { + pMem1[Index] = pMem2[Index]; + } + } +@@ -2557,10 +2500,9 @@ VOID RTMPMoveMemory( + + ======================================================================== + */ +-VOID UserCfgInit( +- IN PRTMP_ADAPTER pAd) ++VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + { +- UINT key_index, bss_index; ++ UINT key_index, bss_index; + + DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit\n")); + +@@ -2586,19 +2528,19 @@ VOID UserCfgInit( + + pAd->CommonCfg.MaxPktOneTxBulk = 2; + pAd->CommonCfg.TxBulkFactor = 1; +- pAd->CommonCfg.RxBulkFactor =1; ++ pAd->CommonCfg.RxBulkFactor = 1; + +- pAd->CommonCfg.TxPower = 100; //mW ++ pAd->CommonCfg.TxPower = 100; //mW + +- NdisZeroMemory(&pAd->CommonCfg.IOTestParm, sizeof(pAd->CommonCfg.IOTestParm)); ++ NdisZeroMemory(&pAd->CommonCfg.IOTestParm, ++ sizeof(pAd->CommonCfg.IOTestParm)); + #endif // RTMP_MAC_USB // + +- for(key_index=0; key_indexSharedKey[bss_index][key_index].KeyLen = 0; +- pAd->SharedKey[bss_index][key_index].CipherAlg = CIPHER_NONE; ++ pAd->SharedKey[bss_index][key_index].CipherAlg = ++ CIPHER_NONE; + } + } + +@@ -2612,12 +2554,12 @@ VOID UserCfgInit( + pAd->LedIndicatorStrength = 0; + pAd->RLnkCtrlOffset = 0; + pAd->HostLnkCtrlOffset = 0; +- pAd->StaCfg.PSControl.field.EnableNewPS=TRUE; ++ pAd->StaCfg.PSControl.field.EnableNewPS = TRUE; + pAd->CheckDmaBusyCount = 0; + #endif // RTMP_MAC_PCI // + +- pAd->bAutoTxAgcA = FALSE; // Default is OFF +- pAd->bAutoTxAgcG = FALSE; // Default is OFF ++ pAd->bAutoTxAgcA = FALSE; // Default is OFF ++ pAd->bAutoTxAgcG = FALSE; // Default is OFF + pAd->RfIcType = RFIC_2820; + + // Init timer for reset complete event +@@ -2626,25 +2568,22 @@ VOID UserCfgInit( + pAd->bForcePrintRX = FALSE; + pAd->bStaFifoTest = FALSE; + pAd->bProtectionTest = FALSE; +- pAd->CommonCfg.Dsifs = 10; // in units of usec +- pAd->CommonCfg.TxPower = 100; //mW +- pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPowerDefault = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut ++ pAd->CommonCfg.Dsifs = 10; // in units of usec ++ pAd->CommonCfg.TxPower = 100; //mW ++ pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO ++ pAd->CommonCfg.TxPowerDefault = 0xffffffff; // AUTO ++ pAd->CommonCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut + pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; + pAd->CommonCfg.RtsThreshold = 2347; + pAd->CommonCfg.FragmentThreshold = 2346; +- pAd->CommonCfg.UseBGProtection = 0; // 0: AUTO +- pAd->CommonCfg.bEnableTxBurst = TRUE; //0; +- pAd->CommonCfg.PhyMode = 0xff; // unknown ++ pAd->CommonCfg.UseBGProtection = 0; // 0: AUTO ++ pAd->CommonCfg.bEnableTxBurst = TRUE; //0; ++ pAd->CommonCfg.PhyMode = 0xff; // unknown + pAd->CommonCfg.BandState = UNKNOWN_BAND; + pAd->CommonCfg.RadarDetect.CSPeriod = 10; + pAd->CommonCfg.RadarDetect.CSCount = 0; + pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; + +- +- +- + pAd->CommonCfg.RadarDetect.ChMovingTime = 65; + pAd->CommonCfg.RadarDetect.LongPulseRadarTh = 3; + pAd->CommonCfg.bAPSDCapable = FALSE; +@@ -2657,18 +2596,22 @@ VOID UserCfgInit( + + NdisZeroMemory(&pAd->BeaconTxWI, sizeof(pAd->BeaconTxWI)); + +- NdisZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability)); ++ NdisZeroMemory(&pAd->CommonCfg.HtCapability, ++ sizeof(pAd->CommonCfg.HtCapability)); + pAd->HTCEnable = FALSE; + pAd->bBroadComHT = FALSE; + pAd->CommonCfg.bRdg = FALSE; + +- NdisZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo)); ++ NdisZeroMemory(&pAd->CommonCfg.AddHTInfo, ++ sizeof(pAd->CommonCfg.AddHTInfo)); + pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; + pAd->CommonCfg.BACapability.field.MpduDensity = 0; + pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; //32; +- pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; //32; +- DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit. BACapability = 0x%x\n", pAd->CommonCfg.BACapability.word)); ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; //32; ++ pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; //32; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("--> UserCfgInit. BACapability = 0x%x\n", ++ pAd->CommonCfg.BACapability.word)); + + pAd->CommonCfg.BACapability.field.AutoBA = FALSE; + BATableInit(pAd, &pAd->BATable); +@@ -2677,16 +2620,15 @@ VOID UserCfgInit( + pAd->CommonCfg.bHTProtect = 1; + pAd->CommonCfg.bMIMOPSEnable = TRUE; + //2008/11/05:KH add to support Antenna power-saving of AP<-- +- pAd->CommonCfg.bGreenAPEnable=FALSE; ++ pAd->CommonCfg.bGreenAPEnable = FALSE; + //2008/11/05:KH add to support Antenna power-saving of AP--> + pAd->CommonCfg.bBADecline = FALSE; + pAd->CommonCfg.bDisableReordering = FALSE; + +- if (pAd->MACVersion == 0x28720200) +- { +- pAd->CommonCfg.TxBASize = 13; //by Jerry recommend +- }else{ +- pAd->CommonCfg.TxBASize = 7; ++ if (pAd->MACVersion == 0x28720200) { ++ pAd->CommonCfg.TxBASize = 13; //by Jerry recommend ++ } else { ++ pAd->CommonCfg.TxBASize = 7; + } + + pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word; +@@ -2701,7 +2643,7 @@ VOID UserCfgInit( + pAd->CommonCfg.MlmeTransmit.field.BW = BW_20; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + +- pAd->CommonCfg.BeaconPeriod = 100; // in mSec ++ pAd->CommonCfg.BeaconPeriod = 100; // in mSec + + // + // part II. intialize STA specific configuration +@@ -2724,18 +2666,19 @@ VOID UserCfgInit( + pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + pAd->StaCfg.LastMicErrorTime = 0; +- pAd->StaCfg.MicErrCnt = 0; +- pAd->StaCfg.bBlockAssoc = FALSE; +- pAd->StaCfg.WpaState = SS_NOTUSE; ++ pAd->StaCfg.MicErrCnt = 0; ++ pAd->StaCfg.bBlockAssoc = FALSE; ++ pAd->StaCfg.WpaState = SS_NOTUSE; + +- pAd->CommonCfg.NdisRadioStateOff = FALSE; // New to support microsoft disable radio with OID command ++ pAd->CommonCfg.NdisRadioStateOff = FALSE; // New to support microsoft disable radio with OID command + + pAd->StaCfg.RssiTrigger = 0; + NdisZeroMemory(&pAd->StaCfg.RssiSample, sizeof(RSSI_SAMPLE)); +- pAd->StaCfg.RssiTriggerMode = RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; ++ pAd->StaCfg.RssiTriggerMode = ++ RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; + pAd->StaCfg.AtimWin = 0; +- pAd->StaCfg.DefaultListenCount = 3;//default listen count; +- pAd->StaCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_ADHOC or BSS_MONITOR ++ pAd->StaCfg.DefaultListenCount = 3; //default listen count; ++ pAd->StaCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_ADHOC or BSS_MONITOR + pAd->StaCfg.bScanReqIsFromWebUI = FALSE; + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +@@ -2745,12 +2688,12 @@ VOID UserCfgInit( + } + + #ifdef PCIE_PS_SUPPORT +-pAd->brt30xxBanMcuCmd = FALSE; +-pAd->b3090ESpecialChip = FALSE; ++ pAd->brt30xxBanMcuCmd = FALSE; ++ pAd->b3090ESpecialChip = FALSE; + //KH Debug:the following must be removed +-pAd->StaCfg.PSControl.field.rt30xxPowerMode=3; +-pAd->StaCfg.PSControl.field.rt30xxForceASPMTest=0; +-pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; ++ pAd->StaCfg.PSControl.field.rt30xxPowerMode = 3; ++ pAd->StaCfg.PSControl.field.rt30xxForceASPMTest = 0; ++ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM = 1; + #endif // PCIE_PS_SUPPORT // + + // global variables mXXXX used in MAC protocol state machines +@@ -2759,8 +2702,8 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + + // PHY specification +- pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; // default PHY mode +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble ++ pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; // default PHY mode ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble + + { + // user desired power mode +@@ -2768,17 +2711,19 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; + pAd->StaCfg.bWindowsACCAMEnable = FALSE; + +- RTMPInitTimer(pAd, &pAd->StaCfg.StaQuickResponeForRateUpTimer, GET_TIMER_FUNCTION(StaQuickResponeForRateUpExec), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->StaCfg.StaQuickResponeForRateUpTimer, ++ GET_TIMER_FUNCTION(StaQuickResponeForRateUpExec), ++ pAd, FALSE); + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; + + // Patch for Ndtest + pAd->StaCfg.ScanCnt = 0; + +- pAd->StaCfg.bHwRadio = TRUE; // Default Hardware Radio status is On +- pAd->StaCfg.bSwRadio = TRUE; // Default Software Radio status is On +- pAd->StaCfg.bRadio = TRUE; // bHwRadio && bSwRadio +- pAd->StaCfg.bHardwareRadio = FALSE; // Default is OFF +- pAd->StaCfg.bShowHiddenSSID = FALSE; // Default no show ++ pAd->StaCfg.bHwRadio = TRUE; // Default Hardware Radio status is On ++ pAd->StaCfg.bSwRadio = TRUE; // Default Software Radio status is On ++ pAd->StaCfg.bRadio = TRUE; // bHwRadio && bSwRadio ++ pAd->StaCfg.bHardwareRadio = FALSE; // Default is OFF ++ pAd->StaCfg.bShowHiddenSSID = FALSE; // Default no show + + // Nitro mode control + pAd->StaCfg.bAutoReconnect = TRUE; +@@ -2789,14 +2734,16 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + if (pAd->StaCfg.LastScanTime > 10 * OS_HZ) + pAd->StaCfg.LastScanTime -= (10 * OS_HZ); + +- NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE+1); ++ NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE + 1); + #ifdef RTMP_MAC_PCI + sprintf((PSTRING) pAd->nickname, "RT2860STA"); + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +- sprintf((PSTRING) pAd->nickname, "RT2870STA"); ++ sprintf((PSTRING) pAd->nickname, "RT2870STA"); + #endif // RTMP_MAC_USB // +- RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, ++ GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), ++ pAd, FALSE); + pAd->StaCfg.IEEE8021X = FALSE; + pAd->StaCfg.IEEE8021x_required_keys = FALSE; + pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE; +@@ -2805,7 +2752,6 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); + +- + pAd->StaCfg.bAutoConnectByBssid = FALSE; + pAd->StaCfg.BeaconLostTime = BEACON_LOST_TIME; + NdisZeroMemory(pAd->StaCfg.WpaPassPhrase, 64); +@@ -2824,15 +2770,14 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + // part III. AP configurations + // + +- + // + // part IV. others + // + // dynamic BBP R66:sensibity tuning to overcome background noise +- pAd->BbpTuning.bEnable = TRUE; ++ pAd->BbpTuning.bEnable = TRUE; + pAd->BbpTuning.FalseCcaLowerThreshold = 100; + pAd->BbpTuning.FalseCcaUpperThreshold = 512; +- pAd->BbpTuning.R66Delta = 4; ++ pAd->BbpTuning.R66Delta = 4; + pAd->Mlme.bEnableAutoAntennaCheck = TRUE; + + // +@@ -2855,24 +2800,25 @@ pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM=1; + //RTMPInitTimer(pAd, &pAd->RECBATimer, RECBATimerTimeout, pAd, TRUE); + //RTMPSetTimer(&pAd->RECBATimer, REORDER_EXEC_INTV); + +- +- + pAd->CommonCfg.bWiFiTest = FALSE; + #ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; + #endif // RTMP_MAC_PCI // + +-RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); ++ RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n")); + } + + // IRQL = PASSIVE_LEVEL + UCHAR BtoH(STRING ch) + { +- if (ch >= '0' && ch <= '9') return (ch - '0'); // Handle numerals +- if (ch >= 'A' && ch <= 'F') return (ch - 'A' + 0xA); // Handle capitol hex digits +- if (ch >= 'a' && ch <= 'f') return (ch - 'a' + 0xA); // Handle small hex digits +- return(255); ++ if (ch >= '0' && ch <= '9') ++ return (ch - '0'); // Handle numerals ++ if (ch >= 'A' && ch <= 'F') ++ return (ch - 'A' + 0xA); // Handle capitol hex digits ++ if (ch >= 'a' && ch <= 'f') ++ return (ch - 'a' + 0xA); // Handle small hex digits ++ return (255); + } + + // +@@ -2900,19 +2846,16 @@ void AtoH(PSTRING src, PUCHAR dest, int destlen) + srcptr = src; + destTemp = (PUCHAR) dest; + +- while(destlen--) +- { +- *destTemp = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble. +- *destTemp += BtoH(*srcptr++); // Add 2nd ascii byte to above. ++ while (destlen--) { ++ *destTemp = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble. ++ *destTemp += BtoH(*srcptr++); // Add 2nd ascii byte to above. + destTemp++; + } + } + +- + //+++Mark by shiang, not use now, need to remove after confirm + //---Mark by shiang, not use now, need to remove after confirm + +- + /* + ======================================================================== + +@@ -2932,29 +2875,26 @@ void AtoH(PSTRING src, PUCHAR dest, int destlen) + + ======================================================================== + */ +-VOID RTMPInitTimer( +- IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, +- IN PVOID pData, +- IN BOOLEAN Repeat) ++VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, ++ IN PRALINK_TIMER_STRUCT pTimer, ++ IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat) + { + // + // Set Valid to TRUE for later used. + // It will crash if we cancel a timer or set a timer + // that we haven't initialize before. + // +- pTimer->Valid = TRUE; ++ pTimer->Valid = TRUE; + + pTimer->PeriodicType = Repeat; +- pTimer->State = FALSE; ++ pTimer->State = FALSE; + pTimer->cookie = (ULONG) pData; + + #ifdef RTMP_TIMER_TASK_SUPPORT + pTimer->pAd = pAd; + #endif // RTMP_TIMER_TASK_SUPPORT // + +- RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); ++ RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); + } + + /* +@@ -2975,32 +2915,23 @@ VOID RTMPInitTimer( + + ======================================================================== + */ +-VOID RTMPSetTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value) ++VOID RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) + { +- if (pTimer->Valid) +- { ++ if (pTimer->Valid) { + pTimer->TimerValue = Value; +- pTimer->State = FALSE; +- if (pTimer->PeriodicType == TRUE) +- { ++ pTimer->State = FALSE; ++ if (pTimer->PeriodicType == TRUE) { + pTimer->Repeat = TRUE; + RTMP_SetPeriodicTimer(&pTimer->TimerObj, Value); +- } +- else +- { ++ } else { + pTimer->Repeat = FALSE; + RTMP_OS_Add_Timer(&pTimer->TimerObj, Value); + } +- } +- else +- { ++ } else { + DBGPRINT_ERR(("RTMPSetTimer failed, Timer hasn't been initialize!\n")); + } + } + +- + /* + ======================================================================== + +@@ -3019,28 +2950,20 @@ VOID RTMPSetTimer( + + ======================================================================== + */ +-VOID RTMPModTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value) ++VOID RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) + { +- BOOLEAN Cancel; ++ BOOLEAN Cancel; + +- if (pTimer->Valid) +- { ++ if (pTimer->Valid) { + pTimer->TimerValue = Value; +- pTimer->State = FALSE; +- if (pTimer->PeriodicType == TRUE) +- { ++ pTimer->State = FALSE; ++ if (pTimer->PeriodicType == TRUE) { + RTMPCancelTimer(pTimer, &Cancel); + RTMPSetTimer(pTimer, Value); +- } +- else +- { ++ } else { + RTMP_OS_Mod_Timer(&pTimer->TimerObj, Value); + } +- } +- else +- { ++ } else { + DBGPRINT_ERR(("RTMPModTimer failed, Timer hasn't been initialize!\n")); + } + } +@@ -3066,28 +2989,23 @@ VOID RTMPModTimer( + + ======================================================================== + */ +-VOID RTMPCancelTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- OUT BOOLEAN *pCancelled) ++VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + { +- if (pTimer->Valid) +- { ++ if (pTimer->Valid) { + if (pTimer->State == FALSE) + pTimer->Repeat = FALSE; + +- RTMP_OS_Del_Timer(&pTimer->TimerObj, pCancelled); ++ RTMP_OS_Del_Timer(&pTimer->TimerObj, pCancelled); + + if (*pCancelled == TRUE) + pTimer->State = TRUE; + + #ifdef RTMP_TIMER_TASK_SUPPORT + // We need to go-through the TimerQ to findout this timer handler and remove it if +- // it's still waiting for execution. ++ // it's still waiting for execution. + RtmpTimerQRemove(pTimer->pAd, pTimer); + #endif // RTMP_TIMER_TASK_SUPPORT // +- } +- else +- { ++ } else { + DBGPRINT_ERR(("RTMPCancelTimer failed, Timer hasn't been initialize!\n")); + } + } +@@ -3112,64 +3030,64 @@ VOID RTMPCancelTimer( + + ======================================================================== + */ +-VOID RTMPSetLED( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Status) ++VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) + { +- //ULONG data; +- UCHAR HighByte = 0; +- UCHAR LowByte; +- +- LowByte = pAd->LedCntl.field.LedMode&0x7f; +- switch (Status) +- { +- case LED_LINK_DOWN: +- HighByte = 0x20; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- pAd->LedIndicatorStrength = 0; +- break; +- case LED_LINK_UP: +- if (pAd->CommonCfg.Channel > 14) +- HighByte = 0xa0; +- else +- HighByte = 0x60; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_RADIO_ON: +- HighByte = 0x20; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_HALT: +- LowByte = 0; // Driver sets MAC register and MAC controls LED +- case LED_RADIO_OFF: +- HighByte = 0; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_WPS: +- HighByte = 0x10; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_ON_SITE_SURVEY: +- HighByte = 0x08; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- case LED_POWER_UP: +- HighByte = 0x04; +- AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +- break; +- default: +- DBGPRINT(RT_DEBUG_WARN, ("RTMPSetLED::Unknown Status %d\n", Status)); +- break; ++ //ULONG data; ++ UCHAR HighByte = 0; ++ UCHAR LowByte; ++ ++ LowByte = pAd->LedCntl.field.LedMode & 0x7f; ++ switch (Status) { ++ case LED_LINK_DOWN: ++ HighByte = 0x20; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ pAd->LedIndicatorStrength = 0; ++ break; ++ case LED_LINK_UP: ++ if (pAd->CommonCfg.Channel > 14) ++ HighByte = 0xa0; ++ else ++ HighByte = 0x60; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ case LED_RADIO_ON: ++ HighByte = 0x20; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ case LED_HALT: ++ LowByte = 0; // Driver sets MAC register and MAC controls LED ++ case LED_RADIO_OFF: ++ HighByte = 0; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ case LED_WPS: ++ HighByte = 0x10; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ case LED_ON_SITE_SURVEY: ++ HighByte = 0x08; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ case LED_POWER_UP: ++ HighByte = 0x04; ++ AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_WARN, ++ ("RTMPSetLED::Unknown Status %d\n", Status)); ++ break; + } + +- // ++ // + // Keep LED status for LED SiteSurvey mode. + // After SiteSurvey, we will set the LED mode to previous status. + // + if ((Status != LED_ON_SITE_SURVEY) && (Status != LED_POWER_UP)) + pAd->LedStatus = Status; + +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSetLED::Mode=%d,HighByte=0x%02x,LowByte=0x%02x\n", pAd->LedCntl.field.LedMode, HighByte, LowByte)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPSetLED::Mode=%d,HighByte=0x%02x,LowByte=0x%02x\n", ++ pAd->LedCntl.field.LedMode, HighByte, LowByte)); + } + + /* +@@ -3199,35 +3117,32 @@ VOID RTMPSetLED( + > -57 Excellent + ======================================================================== + */ +-VOID RTMPSetSignalLED( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_802_11_RSSI Dbm) ++VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + { +- UCHAR nLed = 0; +- +- if (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH) +- { +- if (Dbm <= -90) +- nLed = 0; +- else if (Dbm <= -81) +- nLed = 1; +- else if (Dbm <= -71) +- nLed = 3; +- else if (Dbm <= -67) +- nLed = 7; +- else if (Dbm <= -57) +- nLed = 15; +- else +- nLed = 31; ++ UCHAR nLed = 0; ++ ++ if (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH) { ++ if (Dbm <= -90) ++ nLed = 0; ++ else if (Dbm <= -81) ++ nLed = 1; ++ else if (Dbm <= -71) ++ nLed = 3; ++ else if (Dbm <= -67) ++ nLed = 7; ++ else if (Dbm <= -57) ++ nLed = 15; ++ else ++ nLed = 31; + +- // +- // Update Signal Stregth to firmware if changed. +- // +- if (pAd->LedIndicatorStrength != nLed) +- { +- AsicSendCommandToMcu(pAd, 0x51, 0xff, nLed, pAd->LedCntl.field.Polarity); +- pAd->LedIndicatorStrength = nLed; +- } ++ // ++ // Update Signal Stregth to firmware if changed. ++ // ++ if (pAd->LedIndicatorStrength != nLed) { ++ AsicSendCommandToMcu(pAd, 0x51, 0xff, nLed, ++ pAd->LedCntl.field.Polarity); ++ pAd->LedIndicatorStrength = nLed; ++ } + } + } + +@@ -3249,11 +3164,10 @@ VOID RTMPSetSignalLED( + Before Enable RX, make sure you have enabled Interrupt. + ======================================================================== + */ +-VOID RTMPEnableRxTx( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) + { +-// WPDMA_GLO_CFG_STRUC GloCfg; +-// ULONG i = 0; ++// WPDMA_GLO_CFG_STRUC GloCfg; ++// ULONG i = 0; + UINT32 rx_filter_flag; + + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n")); +@@ -3262,19 +3176,15 @@ VOID RTMPEnableRxTx( + RT28XXDMAEnable(pAd); + + // enable RX of MAC block +- if (pAd->OpMode == OPMODE_AP) +- { ++ if (pAd->OpMode == OPMODE_AP) { + rx_filter_flag = APNORMAL; + +- +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); // enable RX of DMA block +- } +- else +- { ++ RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); // enable RX of DMA block ++ } else { + if (pAd->CommonCfg.PSPXlink) + rx_filter_flag = PSPXLINK; + else +- rx_filter_flag = STANORMAL; // Staion not drop control frame will fail WiFi Certification. ++ rx_filter_flag = STANORMAL; // Staion not drop control frame will fail WiFi Certification. + RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); + } + +@@ -3282,43 +3192,37 @@ VOID RTMPEnableRxTx( + DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPEnableRxTx\n")); + } + +- + //+++Add by shiang, move from os/linux/rt_main_dev.c + void CfgInitHook(PRTMP_ADAPTER pAd) + { + pAd->bBroadComHT = TRUE; + } + +- +-int rt28xx_init( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, +- IN PSTRING pHostName) ++int rt28xx_init(IN PRTMP_ADAPTER pAd, ++ IN PSTRING pDefaultMac, IN PSTRING pHostName) + { +- UINT index; +- UCHAR TmpPhy; +- NDIS_STATUS Status; +- UINT32 MacCsr0 = 0; +- ++ UINT index; ++ UCHAR TmpPhy; ++ NDIS_STATUS Status; ++ UINT32 MacCsr0 = 0; + + #ifdef RTMP_MAC_PCI + { +- // If dirver doesn't wake up firmware here, +- // NICLoadFirmware will hang forever when interface is up again. +- // RT2860 PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && +- OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ // If dirver doesn't wake up firmware here, ++ // NICLoadFirmware will hang forever when interface is up again. ++ // RT2860 PCI ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && ++ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; + AsicForceWakeup(pAd, TRUE); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- } ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, ++ AutoWakeupCfg.word); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ } + } + #endif // RTMP_MAC_PCI // + +- + // reset Adapter flags + RTMP_CLEAR_FLAGS(pAd); + +@@ -3329,23 +3233,24 @@ int rt28xx_init( + + // Make sure MAC gets ready. + index = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + pAd->MACVersion = MacCsr0; + +- if ((pAd->MACVersion != 0x00) && (pAd->MACVersion != 0xFFFFFFFF)) ++ if ((pAd->MACVersion != 0x00) ++ && (pAd->MACVersion != 0xFFFFFFFF)) + break; + + RTMPusecDelay(10); + } while (index++ < 100); +- DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); + + #ifdef RTMP_MAC_PCI + #ifdef PCIE_PS_SUPPORT + /*Iverson patch PCIE L1 issue to make sure that driver can be read,write ,BBP and RF register at pcie L.1 level */ +- if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))&&OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { ++ if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { + RTMP_IO_READ32(pAd, AUX_CTRL, &MacCsr0); + MacCsr0 |= 0x402; + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacCsr0); +@@ -3360,12 +3265,11 @@ int rt28xx_init( + // Disable DMA + RT28XXDMADisable(pAd); + +- + // Load 8051 firmware + Status = NICLoadFirmware(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", Status)); ++ if (Status != NDIS_STATUS_SUCCESS) { ++ DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", ++ Status)); + goto err1; + } + +@@ -3374,16 +3278,15 @@ int rt28xx_init( + // Disable interrupts here which is as soon as possible + // This statement should never be true. We might consider to remove it later + #ifdef RTMP_MAC_PCI +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) +- { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } + #endif // RTMP_MAC_PCI // + + Status = RTMPAllocTxRxRingMemory(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("RTMPAllocDMAMemory failed, Status[=0x%08x]\n", Status)); ++ if (Status != NDIS_STATUS_SUCCESS) { ++ DBGPRINT_ERR(("RTMPAllocDMAMemory failed, Status[=0x%08x]\n", ++ Status)); + goto err1; + } + +@@ -3397,12 +3300,10 @@ int rt28xx_init( + goto err2; + + Status = MlmeInit(pAd); +- if (Status != NDIS_STATUS_SUCCESS) +- { ++ if (Status != NDIS_STATUS_SUCCESS) { + DBGPRINT_ERR(("MlmeInit failed, Status[=0x%08x]\n", Status)); + goto err2; + } +- + // Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default + // + UserCfgInit(pAd); +@@ -3410,12 +3311,12 @@ int rt28xx_init( + if (Status != NDIS_STATUS_SUCCESS) + goto err3; + +-// COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); +-// pAd->bForcePrintTX = TRUE; ++// COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); ++// pAd->bForcePrintTX = TRUE; + + CfgInitHook(pAd); + +- NdisAllocateSpinLock(&pAd->MacTabLock); ++ NdisAllocateSpinLock(&pAd->MacTabLock); + + MeasureReqTabInit(pAd); + TpcReqTabInit(pAd); +@@ -3424,11 +3325,11 @@ int rt28xx_init( + // Init the hardware, we need to init asic before read registry, otherwise mac register will be reset + // + Status = NICInitializeAdapter(pAd, TRUE); +- if (Status != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", Status)); ++ if (Status != NDIS_STATUS_SUCCESS) { ++ DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", ++ Status)); + if (Status != NDIS_STATUS_SUCCESS) +- goto err3; ++ goto err3; + } + + DBGPRINT(RT_DEBUG_OFF, ("1. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); +@@ -3443,15 +3344,22 @@ int rt28xx_init( + #endif // RTMP_MAC_USB // + + //Init Ba Capability parameters. +-// RT28XX_BA_INIT(pAd); +- pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; +- pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable; +- pAd->CommonCfg.DesiredHtPhy.AmsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.DesiredHtPhy.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; ++// RT28XX_BA_INIT(pAd); ++ pAd->CommonCfg.DesiredHtPhy.MpduDensity = ++ (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ pAd->CommonCfg.DesiredHtPhy.AmsduEnable = ++ (USHORT) pAd->CommonCfg.BACapability.field.AmsduEnable; ++ pAd->CommonCfg.DesiredHtPhy.AmsduSize = ++ (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.DesiredHtPhy.MimoPs = ++ (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; + // UPdata to HT IE +- pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode; +- pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize; +- pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity; ++ pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = ++ (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; ++ pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = ++ (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = ++ (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; + + // after reading Registry, we now know if in AP mode or STA mode + +@@ -3463,11 +3371,11 @@ int rt28xx_init( + DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + + // We should read EEPROM for all cases. rt2860b +- NICReadEEPROMParameters(pAd, (PUCHAR)pDefaultMac); ++ NICReadEEPROMParameters(pAd, (PUCHAR) pDefaultMac); + + DBGPRINT(RT_DEBUG_OFF, ("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + +- NICInitAsicFromEEPROM(pAd); //rt2860b ++ NICInitAsicFromEEPROM(pAd); //rt2860b + + // Set PHY to appropriate mode + TmpPhy = pAd->CommonCfg.PhyMode; +@@ -3476,25 +3384,28 @@ int rt28xx_init( + SetCommonHT(pAd); + + // No valid channels. +- if (pAd->ChannelListNum == 0) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n")); ++ if (pAd->ChannelListNum == 0) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n")); + goto err4; + } + +- DBGPRINT(RT_DEBUG_OFF, ("MCS Set = %02x %02x %02x %02x %02x\n", pAd->CommonCfg.HtCapability.MCSSet[0], +- pAd->CommonCfg.HtCapability.MCSSet[1], pAd->CommonCfg.HtCapability.MCSSet[2], +- pAd->CommonCfg.HtCapability.MCSSet[3], pAd->CommonCfg.HtCapability.MCSSet[4])); ++ DBGPRINT(RT_DEBUG_OFF, ++ ("MCS Set = %02x %02x %02x %02x %02x\n", ++ pAd->CommonCfg.HtCapability.MCSSet[0], ++ pAd->CommonCfg.HtCapability.MCSSet[1], ++ pAd->CommonCfg.HtCapability.MCSSet[2], ++ pAd->CommonCfg.HtCapability.MCSSet[3], ++ pAd->CommonCfg.HtCapability.MCSSet[4])); + + #ifdef RTMP_RF_RW_SUPPORT + //Init RT30xx RFRegisters after read RFIC type from EEPROM + NICInitRFRegisters(pAd); + #endif // RTMP_RF_RW_SUPPORT // + +-// APInitialize(pAd); +- ++// APInitialize(pAd); + +- // ++ // + // Initialize RF register to default value + // + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +@@ -3504,26 +3415,23 @@ int rt28xx_init( + //2008/11/28:KH marked the following codes to patch Frequency offset bug + //AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); + +- if (pAd && (Status != NDIS_STATUS_SUCCESS)) +- { ++ if (pAd && (Status != NDIS_STATUS_SUCCESS)) { + // + // Undo everything if it failed + // +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) +- { +-// NdisMDeregisterInterrupt(&pAd->Interrupt); ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { ++// NdisMDeregisterInterrupt(&pAd->Interrupt); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + } +-// RTMPFreeAdapter(pAd); // we will free it in disconnect() +- } +- else if (pAd) +- { ++// RTMPFreeAdapter(pAd); // we will free it in disconnect() ++ } else if (pAd) { + // Microsoft HCT require driver send a disconnect event after driver initialization. + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +-// pAd->IndicateMediaState = NdisMediaStateDisconnected; ++// pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); + +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n")); + + #ifdef RTMP_MAC_USB + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); +@@ -3533,14 +3441,12 @@ int rt28xx_init( + // Support multiple BulkIn IRP, + // the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1. + // +- for(index=0; indexCommonCfg.NumOfBulkInIRP; index++) +- { ++ for (index = 0; index < pAd->CommonCfg.NumOfBulkInIRP; index++) { + RTUSBBulkReceive(pAd); +- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n" )); ++ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n")); + } + #endif // RTMP_MAC_USB // +- }// end of else +- ++ } // end of else + + // Set up the Mac address + RtmpOSNetDevAddrSet(pAd->net_dev, &pAd->CurrentAddress[0]); +@@ -3549,7 +3455,6 @@ int rt28xx_init( + + return TRUE; + +- + err4: + err3: + MlmeHalt(pAd); +@@ -3557,7 +3462,7 @@ err2: + RTMPFreeTxRxRingMemory(pAd); + err1: + +- os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool ++ os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool + + // shall not set priv to NULL here because the priv didn't been free yet. + //net_dev->ml_priv = 0; +@@ -3568,14 +3473,12 @@ err0: + DBGPRINT(RT_DEBUG_ERROR, ("!!! rt28xx Initialized fail !!!\n")); + return FALSE; + } +-//---Add by shiang, move from os/linux/rt_main_dev.c + ++//---Add by shiang, move from os/linux/rt_main_dev.c + +-static INT RtmpChipOpsRegister( +- IN RTMP_ADAPTER *pAd, +- IN INT infType) ++static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + int status; + + memset(pChipOps, 0, sizeof(RTMP_CHIP_OP)); +@@ -3584,74 +3487,64 @@ static INT RtmpChipOpsRegister( + status = RtmpChipOpsEepromHook(pAd, infType); + + /* set mcu related hook functions */ +- switch(infType) +- { ++ switch (infType) { + #ifdef RTMP_PCI_SUPPORT +- case RTMP_DEV_INF_PCI: +- pChipOps->loadFirmware = RtmpAsicLoadFirmware; +- pChipOps->eraseFirmware = RtmpAsicEraseFirmware; +- pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; +- break; ++ case RTMP_DEV_INF_PCI: ++ pChipOps->loadFirmware = RtmpAsicLoadFirmware; ++ pChipOps->eraseFirmware = RtmpAsicEraseFirmware; ++ pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; ++ break; + #endif // RTMP_PCI_SUPPORT // + #ifdef RTMP_USB_SUPPORT +- case RTMP_DEV_INF_USB: +- pChipOps->loadFirmware = RtmpAsicLoadFirmware; +- pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; +- break; ++ case RTMP_DEV_INF_USB: ++ pChipOps->loadFirmware = RtmpAsicLoadFirmware; ++ pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; ++ break; + #endif // RTMP_USB_SUPPORT // +- default: +- break; ++ default: ++ break; + } + + return status; + } + +- +-INT RtmpRaDevCtrlInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_INF_TYPE infType) ++INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + { +- //VOID *handle; ++ //VOID *handle; + + // Assign the interface type. We need use it when do register/EEPROM access. + pAd->infType = infType; + +- + pAd->OpMode = OPMODE_STA; +- DBGPRINT(RT_DEBUG_TRACE, ("STA Driver version-%s\n", STA_DRIVER_VERSION)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STA Driver version-%s\n", STA_DRIVER_VERSION)); + + #ifdef RTMP_MAC_USB + init_MUTEX(&(pAd->UsbVendorReq_semaphore)); +- os_alloc_mem(pAd, (PUCHAR *)&pAd->UsbVendorReqBuf, ++ os_alloc_mem(pAd, (PUCHAR *) & pAd->UsbVendorReqBuf, + MAX_PARAM_BUFFER_SIZE - 1); +- if (pAd->UsbVendorReqBuf == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("Allocate vendor request temp buffer failed!\n")); ++ if (pAd->UsbVendorReqBuf == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Allocate vendor request temp buffer failed!\n")); + return FALSE; + } + #endif // RTMP_MAC_USB // + + RtmpChipOpsRegister(pAd, infType); + +- + return 0; + } + +- +-BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER *pAd) ++BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) + { + +- + RTMPFreeAdapter(pAd); + + return TRUE; + } + +- + // not yet support MBSS +-PNET_DEV get_netdev_from_bssid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR FromWhichBSSID) ++PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID) + { + PNET_DEV dev_p = NULL; + +@@ -3660,5 +3553,5 @@ PNET_DEV get_netdev_from_bssid( + } + + ASSERT(dev_p); +- return dev_p; /* return one of MBSS */ ++ return dev_p; /* return one of MBSS */ + } +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index e5d1902..d962f02 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -35,7 +35,6 @@ + -------- ---------- ---------------------------------------------- + */ + +- + #include "../rt_config.h" + + #if defined(RT2860) || defined(RT3090) +@@ -83,12 +82,11 @@ + + ======================================================================== + */ +-INT RtmpAsicEraseFirmware( +- IN PRTMP_ADAPTER pAd) ++INT RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) + { + ULONG i; + +- for(i=0; iMACVersion >> 16); ++ UINT32 Version = (pAd->MACVersion >> 16); + #endif + + // New 8k byte firmware size for RT3071/RT3072 +@@ -136,14 +133,13 @@ NDIS_STATUS RtmpAsicLoadFirmware( + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + /* the firmware image consists of two parts */ +- if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) +- { /* use the second part */ ++ if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) { /* use the second part */ + //printk("KH:Use New Version,part2\n"); +- pFirmwareImage = (PUCHAR)&FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; ++ pFirmwareImage = ++ (PUCHAR) & ++ FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; + FileLength = FIRMWAREIMAGEV2_LENGTH; +- } +- else +- { ++ } else { + //printk("KH:Use New Version,part1\n"); + if (Version == 0x3070) + pFirmwareImage = FirmwareImage_3070; +@@ -156,11 +152,9 @@ NDIS_STATUS RtmpAsicLoadFirmware( + + RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); + +- + /* check if MCU is ready */ + Index = 0; +- do +- { ++ do { + RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacReg); + + if (MacReg & 0x80) +@@ -169,138 +163,124 @@ NDIS_STATUS RtmpAsicLoadFirmware( + RTMPusecDelay(1000); + } while (Index++ < 1000); + +- if (Index > 1000) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware: MCU is not ready\n\n\n")); ++ if (Index > 1000) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("NICLoadFirmware: MCU is not ready\n\n\n")); + Status = NDIS_STATUS_FAILURE; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("<=== %s (status=%d)\n", __func__, Status)); ++ DBGPRINT(RT_DEBUG_TRACE, ("<=== %s (status=%d)\n", __func__, Status)); + +- return Status; ++ return Status; + } + +- +-INT RtmpAsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1) ++INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1) + { +- HOST_CMD_CSR_STRUC H2MCmd; +- H2M_MAILBOX_STRUC H2MMailbox; +- ULONG i = 0; ++ HOST_CMD_CSR_STRUC H2MCmd; ++ H2M_MAILBOX_STRUC H2MMailbox; ++ ULONG i = 0; + + #ifdef PCIE_PS_SUPPORT + // 3090F power solution 3 has hw limitation that needs to ban all mcu command + // when firmware is in radio state. For other chip doesn't have this limitation. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) +- { ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)) { + RTMP_SEM_LOCK(&pAd->McuCmdLock); + if ((pAd->brt30xxBanMcuCmd == TRUE) +- && (Command != WAKE_MCU_CMD) && (Command != RFOFF_MCU_CMD)) +- { ++ && (Command != WAKE_MCU_CMD) && (Command != RFOFF_MCU_CMD)) { + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); +- DBGPRINT(RT_DEBUG_TRACE, (" Ban Mcu Cmd %x in sleep mode\n", Command)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ (" Ban Mcu Cmd %x in sleep mode\n", Command)); + return FALSE; +- } +- else if ((Command == SLEEP_MCU_CMD) +- ||(Command == RFOFF_MCU_CMD)) +- { ++ } else if ((Command == SLEEP_MCU_CMD) ++ || (Command == RFOFF_MCU_CMD)) { + pAd->brt30xxBanMcuCmd = TRUE; +- } +- else if (Command != WAKE_MCU_CMD) +- { ++ } else if (Command != WAKE_MCU_CMD) { + pAd->brt30xxBanMcuCmd = FALSE; + } + + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + + } +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- && (Command == WAKE_MCU_CMD)) +- { +- +- do +- { +- RTMP_IO_FORCE_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ && (Command == WAKE_MCU_CMD)) { ++ ++ do { ++ RTMP_IO_FORCE_READ32(pAd, H2M_MAILBOX_CSR, ++ &H2MMailbox.word); + if (H2MMailbox.field.Owner == 0) + break; + + RTMPusecDelay(2); +- DBGPRINT(RT_DEBUG_INFO, ("AsicSendCommanToMcu::Mail box is busy\n")); +- } while(i++ < 100); ++ DBGPRINT(RT_DEBUG_INFO, ++ ("AsicSendCommanToMcu::Mail box is busy\n")); ++ } while (i++ < 100); + +- if (i >= 100) +- { ++ if (i >= 100) { + DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); + return FALSE; + } + +- H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.Owner = 1; // pass ownership to MCU + H2MMailbox.field.CmdToken = Token; + H2MMailbox.field.HighByte = Arg1; +- H2MMailbox.field.LowByte = Arg0; ++ H2MMailbox.field.LowByte = Arg0; + RTMP_IO_FORCE_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); + +- H2MCmd.word = 0; +- H2MCmd.field.HostCommand = Command; ++ H2MCmd.word = 0; ++ H2MCmd.field.HostCommand = Command; + RTMP_IO_FORCE_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); + +- +- } +- else ++ } else + #endif // PCIE_PS_SUPPORT // + { +- do +- { +- RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +- if (H2MMailbox.field.Owner == 0) +- break; ++ do { ++ RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); ++ if (H2MMailbox.field.Owner == 0) ++ break; + +- RTMPusecDelay(2); +- } while(i++ < 100); ++ RTMPusecDelay(2); ++ } while (i++ < 100); + +- if (i > 100) +- { ++ if (i > 100) { + #ifdef RTMP_MAC_PCI + #endif // RTMP_MAC_PCI // +- { +- DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); ++ { ++ DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); ++ } ++ return FALSE; + } +- return FALSE; +- } +- + #ifdef RTMP_MAC_PCI + #endif // RTMP_MAC_PCI // + +- H2MMailbox.field.Owner = 1; // pass ownership to MCU +- H2MMailbox.field.CmdToken = Token; +- H2MMailbox.field.HighByte = Arg1; +- H2MMailbox.field.LowByte = Arg0; +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); ++ H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.CmdToken = Token; ++ H2MMailbox.field.HighByte = Arg1; ++ H2MMailbox.field.LowByte = Arg0; ++ RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, H2MMailbox.word); + +- H2MCmd.word = 0; +- H2MCmd.field.HostCommand = Command; +- RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); ++ H2MCmd.word = 0; ++ H2MCmd.field.HostCommand = Command; ++ RTMP_IO_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); + +- if (Command != 0x80) +- { ++ if (Command != 0x80) { ++ } + } +-} + #ifdef PCIE_PS_SUPPORT + // 3090 MCU Wakeup command needs more time to be stable. + // Before stable, don't issue other MCU command to prevent from firmware error. +- if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) +- && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +- && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) +- && (Command == WAKE_MCU_CMD)) +- { ++ if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) ++ && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) ++ && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) ++ && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) ++ && (Command == WAKE_MCU_CMD)) { + RTMPusecDelay(2000); + //Put this is after RF programming. + //NdisAcquireSpinLock(&pAd->McuCmdLock); +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +index fa77f5d..9abfe63 100644 +--- a/drivers/staging/rt2860/common/rtmp_timer.c ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -40,7 +40,6 @@ + + #include "../rt_config.h" + +- + BUILD_TIMER_FUNCTION(MlmePeriodicExec); + //BUILD_TIMER_FUNCTION(MlmeRssiReportExec); + BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout); +@@ -68,30 +67,25 @@ BUILD_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); + #endif // RTMP_MAC_USB // + + #if defined(AP_LED) || defined(STA_LED) +-extern void LedCtrlMain( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++extern void LedCtrlMain(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + BUILD_TIMER_FUNCTION(LedCtrlMain); + #endif + +- + #ifdef RTMP_TIMER_TASK_SUPPORT +-static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) ++static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) + { + #ifndef KTHREAD_SUPPORT + int status; + #endif +- RALINK_TIMER_STRUCT *pTimer; +- RTMP_TIMER_TASK_ENTRY *pEntry; +- unsigned long irqFlag; ++ RALINK_TIMER_STRUCT *pTimer; ++ RTMP_TIMER_TASK_ENTRY *pEntry; ++ unsigned long irqFlag; + RTMP_OS_TASK *pTask; + +- + pTask = &pAd->timerTask; +- while(!pTask->task_killed) +- { ++ while (!pTask->task_killed) { + pTimer = NULL; + + #ifdef KTHREAD_SUPPORT +@@ -104,12 +98,10 @@ static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) + break; + + // event happened. +- while(pAd->TimerQ.pQHead) +- { ++ while (pAd->TimerQ.pQHead) { + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlag); + pEntry = pAd->TimerQ.pQHead; +- if (pEntry) +- { ++ if (pEntry) { + pTimer = pEntry->pRaTimer; + + // update pQHead +@@ -123,18 +115,21 @@ static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) + } + RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlag); + +- if (pTimer) +- { +- if ((pTimer->handle != NULL) && (!pAd->PM_FlgSuspend)) +- pTimer->handle(NULL, (PVOID) pTimer->cookie, NULL, pTimer); +- if ((pTimer->Repeat) && (pTimer->State == FALSE)) +- RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); ++ if (pTimer) { ++ if ((pTimer->handle != NULL) ++ && (!pAd->PM_FlgSuspend)) ++ pTimer->handle(NULL, ++ (PVOID) pTimer->cookie, ++ NULL, pTimer); ++ if ((pTimer->Repeat) ++ && (pTimer->State == FALSE)) ++ RTMP_OS_Add_Timer(&pTimer->TimerObj, ++ pTimer->TimerValue); + } + } + + #ifndef KTHREAD_SUPPORT +- if (status != 0) +- { ++ if (status != 0) { + pAd->TimerQ.status = RTMP_TASK_STAT_STOPED; + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + break; +@@ -143,22 +138,19 @@ static void RtmpTimerQHandle(RTMP_ADAPTER *pAd) + } + } + +- +-INT RtmpTimerQThread( +- IN OUT PVOID Context) ++INT RtmpTimerQThread(IN OUT PVOID Context) + { +- RTMP_OS_TASK *pTask; +- PRTMP_ADAPTER pAd; +- ++ RTMP_OS_TASK *pTask; ++ PRTMP_ADAPTER pAd; + +- pTask = (RTMP_OS_TASK *)Context; +- pAd = (PRTMP_ADAPTER)pTask->priv; ++ pTask = (RTMP_OS_TASK *) Context; ++ pAd = (PRTMP_ADAPTER) pTask->priv; + + RtmpOSTaskCustomize(pTask); + + RtmpTimerQHandle(pAd); + +- DBGPRINT(RT_DEBUG_TRACE,( "<---%s\n",__func__)); ++ DBGPRINT(RT_DEBUG_TRACE, ("<---%s\n", __func__)); + #ifndef KTHREAD_SUPPORT + pTask->taskPID = THREAD_PID_INIT_VALUE; + #endif +@@ -182,20 +174,16 @@ INT RtmpTimerQThread( + + } + +- +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) ++RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, ++ IN RALINK_TIMER_STRUCT * pTimer) + { + RTMP_TIMER_TASK_ENTRY *pQNode = NULL, *pQTail; + unsigned long irqFlags; +- RTMP_OS_TASK *pTask = &pAd->timerTask; ++ RTMP_OS_TASK *pTask = &pAd->timerTask; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT) +- { +- if(pAd->TimerQ.pQPollFreeList) +- { ++ if (pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT) { ++ if (pAd->TimerQ.pQPollFreeList) { + pQNode = pAd->TimerQ.pQPollFreeList; + pAd->TimerQ.pQPollFreeList = pQNode->pNext; + +@@ -212,8 +200,7 @@ RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( + } + RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); + +- if (pQNode) +- { ++ if (pQNode) { + #ifdef KTHREAD_SUPPORT + WAKE_UP(pTask); + #else +@@ -224,20 +211,15 @@ RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( + return pQNode; + } + +- +-BOOLEAN RtmpTimerQRemove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer) ++BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, IN RALINK_TIMER_STRUCT * pTimer) + { + RTMP_TIMER_TASK_ENTRY *pNode, *pPrev = NULL; + unsigned long irqFlags; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- if (pAd->TimerQ.status >= RTMP_TASK_STAT_INITED) +- { ++ if (pAd->TimerQ.status >= RTMP_TASK_STAT_INITED) { + pNode = pAd->TimerQ.pQHead; +- while (pNode) +- { ++ while (pNode) { + if (pNode->pRaTimer == pTimer) + break; + pPrev = pNode; +@@ -245,8 +227,7 @@ BOOLEAN RtmpTimerQRemove( + } + + // Now move it to freeList queue. +- if (pNode) +- { ++ if (pNode) { + if (pNode == pAd->TimerQ.pQHead) + pAd->TimerQ.pQHead = pNode->pNext; + if (pNode == pAd->TimerQ.pQTail) +@@ -264,15 +245,13 @@ BOOLEAN RtmpTimerQRemove( + return TRUE; + } + +- +-void RtmpTimerQExit(RTMP_ADAPTER *pAd) ++void RtmpTimerQExit(RTMP_ADAPTER * pAd) + { + RTMP_TIMER_TASK_ENTRY *pTimerQ; + unsigned long irqFlags; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- while (pAd->TimerQ.pQHead) +- { ++ while (pAd->TimerQ.pQHead) { + pTimerQ = pAd->TimerQ.pQHead; + pAd->TimerQ.pQHead = pTimerQ->pNext; + // remove the timeQ +@@ -288,10 +267,9 @@ void RtmpTimerQExit(RTMP_ADAPTER *pAd) + + } + +- +-void RtmpTimerQInit(RTMP_ADAPTER *pAd) ++void RtmpTimerQInit(RTMP_ADAPTER * pAd) + { +- int i; ++ int i; + RTMP_TIMER_TASK_ENTRY *pQNode, *pEntry; + unsigned long irqFlags; + +@@ -299,16 +277,17 @@ void RtmpTimerQInit(RTMP_ADAPTER *pAd) + + NdisZeroMemory(&pAd->TimerQ, sizeof(pAd->TimerQ)); + +- os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); +- if (pAd->TimerQ.pTimerQPoll) +- { ++ os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, ++ sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); ++ if (pAd->TimerQ.pTimerQPoll) { + pEntry = NULL; +- pQNode = (RTMP_TIMER_TASK_ENTRY *)pAd->TimerQ.pTimerQPoll; +- NdisZeroMemory(pAd->TimerQ.pTimerQPoll, sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); ++ pQNode = (RTMP_TIMER_TASK_ENTRY *) pAd->TimerQ.pTimerQPoll; ++ NdisZeroMemory(pAd->TimerQ.pTimerQPoll, ++ sizeof(RTMP_TIMER_TASK_ENTRY) * ++ TIMER_QUEUE_SIZE_MAX); + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +- for (i = 0 ;i pNext = pEntry; + pEntry = pQNode; + pQNode++; +diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c +index 7fd715a..9c2df55 100644 +--- a/drivers/staging/rt2860/common/spectrum.c ++++ b/drivers/staging/rt2860/common/spectrum.c +@@ -24,7 +24,6 @@ + * * + ************************************************************************* + +- + Module Name: + action.c + +@@ -40,94 +39,237 @@ + #include "../rt_config.h" + #include "action.h" + +- + /* The regulatory information in the USA (US) */ +-DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = +-{ ++DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invlid entry +- {1, {4, 16, {36, 40, 44, 48}}}, +- {2, {4, 23, {52, 56, 60, 64}}}, +- {3, {4, 29, {149, 153, 157, 161}}}, +- {4, {11, 23, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, +- {5, {5, 30, {149, 153, 157, 161, 165}}}, +- {6, {10, 14, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, +- {7, {10, 27, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}}, +- {8, {5, 17, {11, 13, 15, 17, 19}}}, +- {9, {5, 30, {11, 13, 15, 17, 19}}}, +- {10, {2, 20, {21, 25}}}, +- {11, {2, 33, {21, 25}}}, +- {12, {11, 30, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}}} ++ {0, {0, 0, {0} ++ } ++ } ++ , // Invlid entry ++ {1, {4, 16, {36, 40, 44, 48} ++ } ++ } ++ , ++ {2, {4, 23, {52, 56, 60, 64} ++ } ++ } ++ , ++ {3, {4, 29, {149, 153, 157, 161} ++ } ++ } ++ , ++ {4, {11, 23, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140} ++ } ++ } ++ , ++ {5, {5, 30, {149, 153, 157, 161, 165} ++ } ++ } ++ , ++ {6, {10, 14, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ++ } ++ } ++ , ++ {7, {10, 27, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ++ } ++ } ++ , ++ {8, {5, 17, {11, 13, 15, 17, 19} ++ } ++ } ++ , ++ {9, {5, 30, {11, 13, 15, 17, 19} ++ } ++ } ++ , ++ {10, {2, 20, {21, 25} ++ } ++ } ++ , ++ {11, {2, 33, {21, 25} ++ } ++ } ++ , ++ {12, {11, 30, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} ++ } ++ } + }; +-#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + ++#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + + /* The regulatory information in Europe */ +-DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = +-{ ++DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invalid entry +- {1, {4, 20, {36, 40, 44, 48}}}, +- {2, {4, 20, {52, 56, 60, 64}}}, +- {3, {11, 30, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}}}, +- {4, {13, 20, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}} ++ {0, {0, 0, {0} ++ } ++ } ++ , // Invalid entry ++ {1, {4, 20, {36, 40, 44, 48} ++ } ++ } ++ , ++ {2, {4, 20, {52, 56, 60, 64} ++ } ++ } ++ , ++ {3, {11, 30, {100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140} ++ } ++ } ++ , ++ {4, {13, 20, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} ++ } ++ } + }; +-#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + ++#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + + /* The regulatory information in Japan */ +-DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = +-{ ++DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ +- {0, {0, 0, {0}}}, // Invalid entry +- {1, {4, 22, {34, 38, 42, 46}}}, +- {2, {3, 24, {8, 12, 16}}}, +- {3, {3, 24, {8, 12, 16}}}, +- {4, {3, 24, {8, 12, 16}}}, +- {5, {3, 24, {8, 12, 16}}}, +- {6, {3, 22, {8, 12, 16}}}, +- {7, {4, 24, {184, 188, 192, 196}}}, +- {8, {4, 24, {184, 188, 192, 196}}}, +- {9, {4, 24, {184, 188, 192, 196}}}, +- {10, {4, 24, {184, 188, 192, 196}}}, +- {11, {4, 22, {184, 188, 192, 196}}}, +- {12, {4, 24, {7, 8, 9, 11}}}, +- {13, {4, 24, {7, 8, 9, 11}}}, +- {14, {4, 24, {7, 8, 9, 11}}}, +- {15, {4, 24, {7, 8, 9, 11}}}, +- {16, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {17, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {18, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {19, {6, 24, {183, 184, 185, 187, 188, 189}}}, +- {20, {6, 17, {183, 184, 185, 187, 188, 189}}}, +- {21, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {22, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {23, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {24, {6, 24, {6, 7, 8, 9, 10, 11}}}, +- {25, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {26, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {27, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {28, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {29, {8, 17, {182, 183, 184, 185, 186, 187, 188, 189}}}, +- {30, {13, 23, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}}}, +- {31, {1, 23, {14}}}, +- {32, {4, 22, {52, 56, 60, 64}}} ++ {0, {0, 0, {0} ++ } ++ } ++ , // Invalid entry ++ {1, {4, 22, {34, 38, 42, 46} ++ } ++ } ++ , ++ {2, {3, 24, {8, 12, 16} ++ } ++ } ++ , ++ {3, {3, 24, {8, 12, 16} ++ } ++ } ++ , ++ {4, {3, 24, {8, 12, 16} ++ } ++ } ++ , ++ {5, {3, 24, {8, 12, 16} ++ } ++ } ++ , ++ {6, {3, 22, {8, 12, 16} ++ } ++ } ++ , ++ {7, {4, 24, {184, 188, 192, 196} ++ } ++ } ++ , ++ {8, {4, 24, {184, 188, 192, 196} ++ } ++ } ++ , ++ {9, {4, 24, {184, 188, 192, 196} ++ } ++ } ++ , ++ {10, {4, 24, {184, 188, 192, 196} ++ } ++ } ++ , ++ {11, {4, 22, {184, 188, 192, 196} ++ } ++ } ++ , ++ {12, {4, 24, {7, 8, 9, 11} ++ } ++ } ++ , ++ {13, {4, 24, {7, 8, 9, 11} ++ } ++ } ++ , ++ {14, {4, 24, {7, 8, 9, 11} ++ } ++ } ++ , ++ {15, {4, 24, {7, 8, 9, 11} ++ } ++ } ++ , ++ {16, {6, 24, {183, 184, 185, 187, 188, 189} ++ } ++ } ++ , ++ {17, {6, 24, {183, 184, 185, 187, 188, 189} ++ } ++ } ++ , ++ {18, {6, 24, {183, 184, 185, 187, 188, 189} ++ } ++ } ++ , ++ {19, {6, 24, {183, 184, 185, 187, 188, 189} ++ } ++ } ++ , ++ {20, {6, 17, {183, 184, 185, 187, 188, 189} ++ } ++ } ++ , ++ {21, {6, 24, {6, 7, 8, 9, 10, 11} ++ } ++ } ++ , ++ {22, {6, 24, {6, 7, 8, 9, 10, 11} ++ } ++ } ++ , ++ {23, {6, 24, {6, 7, 8, 9, 10, 11} ++ } ++ } ++ , ++ {24, {6, 24, {6, 7, 8, 9, 10, 11} ++ } ++ } ++ , ++ {25, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189} ++ } ++ } ++ , ++ {26, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189} ++ } ++ } ++ , ++ {27, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189} ++ } ++ } ++ , ++ {28, {8, 24, {182, 183, 184, 185, 186, 187, 188, 189} ++ } ++ } ++ , ++ {29, {8, 17, {182, 183, 184, 185, 186, 187, 188, 189} ++ } ++ } ++ , ++ {30, {13, 23, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} ++ } ++ } ++ , ++ {31, {1, 23, {14} ++ } ++ } ++ , ++ {32, {4, 22, {52, 56, 60, 64} ++ } ++ } + }; +-#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + ++#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + +-CHAR RTMP_GetTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN HTTRANSMIT_SETTING HTTxMode) +-{ +-typedef struct __TX_PWR_CFG ++CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + { +- UINT8 Mode; +- UINT8 MCS; +- UINT16 req; +- UINT8 shift; +- UINT32 BitMask; +-} TX_PWR_CFG; ++ typedef struct __TX_PWR_CFG { ++ UINT8 Mode; ++ UINT8 MCS; ++ UINT16 req; ++ UINT8 shift; ++ UINT32 BitMask; ++ } TX_PWR_CFG; + + UINT32 Value; + INT Idx; +@@ -137,7 +279,6 @@ typedef struct __TX_PWR_CFG + CHAR DaltaPwr; + ULONG TxPwr[5]; + +- + TX_PWR_CFG TxPwrCfg[] = { + {MODE_CCK, 0, 0, 4, 0x000000f0}, + {MODE_CCK, 1, 0, 0, 0x0000000f}, +@@ -152,7 +293,7 @@ typedef struct __TX_PWR_CFG + {MODE_OFDM, 5, 1, 0, 0x0000000f}, + {MODE_OFDM, 6, 1, 12, 0x0000f000}, + {MODE_OFDM, 7, 1, 8, 0x00000f00} +- ,{MODE_HTMIX, 0, 1, 20, 0x00f00000}, ++ , {MODE_HTMIX, 0, 1, 20, 0x00f00000}, + {MODE_HTMIX, 1, 1, 16, 0x000f0000}, + {MODE_HTMIX, 2, 1, 28, 0xf0000000}, + {MODE_HTMIX, 3, 1, 24, 0x0f000000}, +@@ -174,50 +315,40 @@ typedef struct __TX_PWR_CFG + CurTxPwr = 19; + + /* check Tx Power setting from UI. */ +- if (pAd->CommonCfg.TxPowerPercentage > 90) +- ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) /* reduce Pwr for 1 dB. */ ++ if (pAd->CommonCfg.TxPowerPercentage > 90) ; ++ else if (pAd->CommonCfg.TxPowerPercentage > 60) /* reduce Pwr for 1 dB. */ + CurTxPwr -= 1; +- else if (pAd->CommonCfg.TxPowerPercentage > 30) /* reduce Pwr for 3 dB. */ ++ else if (pAd->CommonCfg.TxPowerPercentage > 30) /* reduce Pwr for 3 dB. */ + CurTxPwr -= 3; +- else if (pAd->CommonCfg.TxPowerPercentage > 15) /* reduce Pwr for 6 dB. */ ++ else if (pAd->CommonCfg.TxPowerPercentage > 15) /* reduce Pwr for 6 dB. */ + CurTxPwr -= 6; +- else if (pAd->CommonCfg.TxPowerPercentage > 9) /* reduce Pwr for 9 dB. */ ++ else if (pAd->CommonCfg.TxPowerPercentage > 9) /* reduce Pwr for 9 dB. */ + CurTxPwr -= 9; +- else /* reduce Pwr for 12 dB. */ ++ else /* reduce Pwr for 12 dB. */ + CurTxPwr -= 12; + +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- if (pAd->CommonCfg.CentralChannel > 14) +- { ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) { ++ if (pAd->CommonCfg.CentralChannel > 14) { + TxPwr[0] = pAd->Tx40MPwrCfgABand[0]; + TxPwr[1] = pAd->Tx40MPwrCfgABand[1]; + TxPwr[2] = pAd->Tx40MPwrCfgABand[2]; + TxPwr[3] = pAd->Tx40MPwrCfgABand[3]; + TxPwr[4] = pAd->Tx40MPwrCfgABand[4]; +- } +- else +- { ++ } else { + TxPwr[0] = pAd->Tx40MPwrCfgGBand[0]; + TxPwr[1] = pAd->Tx40MPwrCfgGBand[1]; + TxPwr[2] = pAd->Tx40MPwrCfgGBand[2]; + TxPwr[3] = pAd->Tx40MPwrCfgGBand[3]; + TxPwr[4] = pAd->Tx40MPwrCfgGBand[4]; + } +- } +- else +- { +- if (pAd->CommonCfg.Channel > 14) +- { ++ } else { ++ if (pAd->CommonCfg.Channel > 14) { + TxPwr[0] = pAd->Tx20MPwrCfgABand[0]; + TxPwr[1] = pAd->Tx20MPwrCfgABand[1]; + TxPwr[2] = pAd->Tx20MPwrCfgABand[2]; + TxPwr[3] = pAd->Tx20MPwrCfgABand[3]; + TxPwr[4] = pAd->Tx20MPwrCfgABand[4]; +- } +- else +- { ++ } else { + TxPwr[0] = pAd->Tx20MPwrCfgGBand[0]; + TxPwr[1] = pAd->Tx20MPwrCfgGBand[1]; + TxPwr[2] = pAd->Tx20MPwrCfgGBand[2]; +@@ -226,44 +357,36 @@ typedef struct __TX_PWR_CFG + } + } + ++ switch (HTTxMode.field.MODE) { ++ case MODE_CCK: ++ case MODE_OFDM: ++ Value = TxPwr[1]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; + +- switch(HTTxMode.field.MODE) +- { +- case MODE_CCK: +- case MODE_OFDM: +- Value = TxPwr[1]; +- TxPwrRef = (Value & 0x00000f00) >> 8; ++ break; + +- break; +- +- case MODE_HTMIX: +- case MODE_HTGREENFIELD: +- if (pAd->CommonCfg.TxStream == 1) +- { +- Value = TxPwr[2]; +- TxPwrRef = (Value & 0x00000f00) >> 8; +- } +- else if (pAd->CommonCfg.TxStream == 2) +- { +- Value = TxPwr[3]; +- TxPwrRef = (Value & 0x00000f00) >> 8; +- } +- break; ++ case MODE_HTMIX: ++ case MODE_HTGREENFIELD: ++ if (pAd->CommonCfg.TxStream == 1) { ++ Value = TxPwr[2]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; ++ } else if (pAd->CommonCfg.TxStream == 2) { ++ Value = TxPwr[3]; ++ TxPwrRef = (Value & 0x00000f00) >> 8; ++ } ++ break; + } + +- PhyMode = +- (HTTxMode.field.MODE == MODE_HTGREENFIELD) +- ? MODE_HTMIX : +- HTTxMode.field.MODE; ++ PhyMode = (HTTxMode.field.MODE == MODE_HTGREENFIELD) ++ ? MODE_HTMIX : HTTxMode.field.MODE; + +- for (Idx = 0; Idx < MAX_TXPWR_TAB_SIZE; Idx++) +- { ++ for (Idx = 0; Idx < MAX_TXPWR_TAB_SIZE; Idx++) { + if ((TxPwrCfg[Idx].Mode == PhyMode) +- && (TxPwrCfg[Idx].MCS == HTTxMode.field.MCS)) +- { ++ && (TxPwrCfg[Idx].MCS == HTTxMode.field.MCS)) { + Value = TxPwr[TxPwrCfg[Idx].req]; +- DaltaPwr = TxPwrRef - (CHAR)((Value & TxPwrCfg[Idx].BitMask) +- >> TxPwrCfg[Idx].shift); ++ DaltaPwr = ++ TxPwrRef - (CHAR) ((Value & TxPwrCfg[Idx].BitMask) ++ >> TxPwrCfg[Idx].shift); + CurTxPwr -= DaltaPwr; + break; + } +@@ -272,23 +395,24 @@ typedef struct __TX_PWR_CFG + return CurTxPwr; + } + +- +-VOID MeasureReqTabInit( +- IN PRTMP_ADAPTER pAd) ++VOID MeasureReqTabInit(IN PRTMP_ADAPTER pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + +- pAd->CommonCfg.pMeasureReqTab = kmalloc(sizeof(MEASURE_REQ_TAB), GFP_ATOMIC); ++ pAd->CommonCfg.pMeasureReqTab = ++ kmalloc(sizeof(MEASURE_REQ_TAB), GFP_ATOMIC); + if (pAd->CommonCfg.pMeasureReqTab) +- NdisZeroMemory(pAd->CommonCfg.pMeasureReqTab, sizeof(MEASURE_REQ_TAB)); ++ NdisZeroMemory(pAd->CommonCfg.pMeasureReqTab, ++ sizeof(MEASURE_REQ_TAB)); + else +- DBGPRINT(RT_DEBUG_ERROR, ("%s Fail to alloc memory for pAd->CommonCfg.pMeasureReqTab.\n", __func__)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s Fail to alloc memory for pAd->CommonCfg.pMeasureReqTab.\n", ++ __func__)); + + return; + } + +-VOID MeasureReqTabExit( +- IN PRTMP_ADAPTER pAd) ++VOID MeasureReqTabExit(IN PRTMP_ADAPTER pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + +@@ -299,18 +423,16 @@ VOID MeasureReqTabExit( + return; + } + +-PMEASURE_REQ_ENTRY MeasureReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + UINT HashIdx; + PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; + PMEASURE_REQ_ENTRY pEntry = NULL; + PMEASURE_REQ_ENTRY pPrevEntry = NULL; + +- if (pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pMeasureReqTab doesn't exist.\n", __func__)); + return NULL; + } + +@@ -319,12 +441,10 @@ PMEASURE_REQ_ENTRY MeasureReqLookUp( + HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken); + pEntry = pTab->Hash[HashIdx]; + +- while (pEntry) +- { ++ while (pEntry) { + if (pEntry->DialogToken == DialogToken) + break; +- else +- { ++ else { + pPrevEntry = pEntry; + pEntry = pEntry->pNext; + } +@@ -335,9 +455,7 @@ PMEASURE_REQ_ENTRY MeasureReqLookUp( + return pEntry; + } + +-PMEASURE_REQ_ENTRY MeasureReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + INT i; + ULONG HashIdx; +@@ -345,40 +463,41 @@ PMEASURE_REQ_ENTRY MeasureReqInsert( + PMEASURE_REQ_ENTRY pEntry = NULL, pCurrEntry; + ULONG Now; + +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pMeasureReqTab doesn't exist.\n", __func__)); + return NULL; + } + + pEntry = MeasureReqLookUp(pAd, DialogToken); +- if (pEntry == NULL) +- { ++ if (pEntry == NULL) { + RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +- for (i = 0; i < MAX_MEASURE_REQ_TAB_SIZE; i++) +- { ++ for (i = 0; i < MAX_MEASURE_REQ_TAB_SIZE; i++) { + NdisGetSystemUpTime(&Now); + pEntry = &pTab->Content[i]; + + if ((pEntry->Valid == TRUE) +- && RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->lastTime + MQ_REQ_AGE_OUT))) ++ && RTMP_TIME_AFTER((unsigned long)Now, ++ (unsigned long)(pEntry-> ++ lastTime + ++ MQ_REQ_AGE_OUT))) + { + PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; ++ ULONG HashIdx = ++ MQ_DIALOGTOKEN_HASH_INDEX(pEntry-> ++ DialogToken); ++ PMEASURE_REQ_ENTRY pProbeEntry = ++ pTab->Hash[HashIdx]; + + // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; ++ do { ++ if (pProbeEntry == pEntry) { ++ if (pPrevEntry == NULL) { ++ pTab->Hash[HashIdx] = ++ pEntry->pNext; ++ } else { ++ pPrevEntry->pNext = ++ pEntry->pNext; + } + break; + } +@@ -387,7 +506,8 @@ PMEASURE_REQ_ENTRY MeasureReqInsert( + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- NdisZeroMemory(pEntry, sizeof(MEASURE_REQ_ENTRY)); ++ NdisZeroMemory(pEntry, ++ sizeof(MEASURE_REQ_ENTRY)); + pTab->Size--; + + break; +@@ -397,30 +517,24 @@ PMEASURE_REQ_ENTRY MeasureReqInsert( + break; + } + +- if (i < MAX_MEASURE_REQ_TAB_SIZE) +- { ++ if (i < MAX_MEASURE_REQ_TAB_SIZE) { + NdisGetSystemUpTime(&Now); + pEntry->lastTime = Now; + pEntry->Valid = TRUE; + pEntry->DialogToken = DialogToken; + pTab->Size++; +- } +- else +- { ++ } else { + pEntry = NULL; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab tab full.\n", __func__)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pMeasureReqTab tab full.\n", __func__)); + } + + // add this Neighbor entry into HASH table +- if (pEntry) +- { ++ if (pEntry) { + HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken); +- if (pTab->Hash[HashIdx] == NULL) +- { ++ if (pTab->Hash[HashIdx] == NULL) { + pTab->Hash[HashIdx] = pEntry; +- } +- else +- { ++ } else { + pCurrEntry = pTab->Hash[HashIdx]; + while (pCurrEntry->pNext != NULL) + pCurrEntry = pCurrEntry->pNext; +@@ -434,45 +548,35 @@ PMEASURE_REQ_ENTRY MeasureReqInsert( + return pEntry; + } + +-VOID MeasureReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; + PMEASURE_REQ_ENTRY pEntry = NULL; + +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pMeasureReqTab doesn't exist.\n", __func__)); + return; + } +- + // if empty, return +- if (pTab->Size == 0) +- { ++ if (pTab->Size == 0) { + DBGPRINT(RT_DEBUG_ERROR, ("pMeasureReqTab empty.\n")); + return; + } + + pEntry = MeasureReqLookUp(pAd, DialogToken); +- if (pEntry != NULL) +- { ++ if (pEntry != NULL) { + PMEASURE_REQ_ENTRY pPrevEntry = NULL; + ULONG HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); + PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); + // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { ++ do { ++ if (pProbeEntry == pEntry) { ++ if (pPrevEntry == NULL) { + pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { ++ } else { + pPrevEntry->pNext = pEntry->pNext; + } + break; +@@ -491,8 +595,7 @@ VOID MeasureReqDelete( + return; + } + +-VOID TpcReqTabInit( +- IN PRTMP_ADAPTER pAd) ++VOID TpcReqTabInit(IN PRTMP_ADAPTER pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +@@ -500,13 +603,14 @@ VOID TpcReqTabInit( + if (pAd->CommonCfg.pTpcReqTab) + NdisZeroMemory(pAd->CommonCfg.pTpcReqTab, sizeof(TPC_REQ_TAB)); + else +- DBGPRINT(RT_DEBUG_ERROR, ("%s Fail to alloc memory for pAd->CommonCfg.pTpcReqTab.\n", __func__)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s Fail to alloc memory for pAd->CommonCfg.pTpcReqTab.\n", ++ __func__)); + + return; + } + +-VOID TpcReqTabExit( +- IN PRTMP_ADAPTER pAd) ++VOID TpcReqTabExit(IN PRTMP_ADAPTER pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +@@ -517,18 +621,16 @@ VOID TpcReqTabExit( + return; + } + +-static PTPC_REQ_ENTRY TpcReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + UINT HashIdx; + PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; + PTPC_REQ_ENTRY pEntry = NULL; + PTPC_REQ_ENTRY pPrevEntry = NULL; + +- if (pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pTpcReqTab doesn't exist.\n", __func__)); + return NULL; + } + +@@ -537,12 +639,10 @@ static PTPC_REQ_ENTRY TpcReqLookUp( + HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken); + pEntry = pTab->Hash[HashIdx]; + +- while (pEntry) +- { ++ while (pEntry) { + if (pEntry->DialogToken == DialogToken) + break; +- else +- { ++ else { + pPrevEntry = pEntry; + pEntry = pEntry->pNext; + } +@@ -553,10 +653,7 @@ static PTPC_REQ_ENTRY TpcReqLookUp( + return pEntry; + } + +- +-static PTPC_REQ_ENTRY TpcReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + INT i; + ULONG HashIdx; +@@ -564,40 +661,41 @@ static PTPC_REQ_ENTRY TpcReqInsert( + PTPC_REQ_ENTRY pEntry = NULL, pCurrEntry; + ULONG Now; + +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pTpcReqTab doesn't exist.\n", __func__)); + return NULL; + } + + pEntry = TpcReqLookUp(pAd, DialogToken); +- if (pEntry == NULL) +- { ++ if (pEntry == NULL) { + RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +- for (i = 0; i < MAX_TPC_REQ_TAB_SIZE; i++) +- { ++ for (i = 0; i < MAX_TPC_REQ_TAB_SIZE; i++) { + NdisGetSystemUpTime(&Now); + pEntry = &pTab->Content[i]; + + if ((pEntry->Valid == TRUE) +- && RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->lastTime + TPC_REQ_AGE_OUT))) ++ && RTMP_TIME_AFTER((unsigned long)Now, ++ (unsigned long)(pEntry-> ++ lastTime + ++ TPC_REQ_AGE_OUT))) + { + PTPC_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; ++ ULONG HashIdx = ++ TPC_DIALOGTOKEN_HASH_INDEX(pEntry-> ++ DialogToken); ++ PTPC_REQ_ENTRY pProbeEntry = ++ pTab->Hash[HashIdx]; + + // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { +- pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { +- pPrevEntry->pNext = pEntry->pNext; ++ do { ++ if (pProbeEntry == pEntry) { ++ if (pPrevEntry == NULL) { ++ pTab->Hash[HashIdx] = ++ pEntry->pNext; ++ } else { ++ pPrevEntry->pNext = ++ pEntry->pNext; + } + break; + } +@@ -616,30 +714,24 @@ static PTPC_REQ_ENTRY TpcReqInsert( + break; + } + +- if (i < MAX_TPC_REQ_TAB_SIZE) +- { ++ if (i < MAX_TPC_REQ_TAB_SIZE) { + NdisGetSystemUpTime(&Now); + pEntry->lastTime = Now; + pEntry->Valid = TRUE; + pEntry->DialogToken = DialogToken; + pTab->Size++; +- } +- else +- { ++ } else { + pEntry = NULL; +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab tab full.\n", __func__)); ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pTpcReqTab tab full.\n", __func__)); + } + + // add this Neighbor entry into HASH table +- if (pEntry) +- { ++ if (pEntry) { + HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken); +- if (pTab->Hash[HashIdx] == NULL) +- { ++ if (pTab->Hash[HashIdx] == NULL) { + pTab->Hash[HashIdx] = pEntry; +- } +- else +- { ++ } else { + pCurrEntry = pTab->Hash[HashIdx]; + while (pCurrEntry->pNext != NULL) + pCurrEntry = pCurrEntry->pNext; +@@ -653,45 +745,35 @@ static PTPC_REQ_ENTRY TpcReqInsert( + return pEntry; + } + +-static VOID TpcReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken) ++static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + { + PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; + PTPC_REQ_ENTRY pEntry = NULL; + +- if(pTab == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __func__)); ++ if (pTab == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: pTpcReqTab doesn't exist.\n", __func__)); + return; + } +- + // if empty, return +- if (pTab->Size == 0) +- { ++ if (pTab->Size == 0) { + DBGPRINT(RT_DEBUG_ERROR, ("pTpcReqTab empty.\n")); + return; + } + + pEntry = TpcReqLookUp(pAd, DialogToken); +- if (pEntry != NULL) +- { ++ if (pEntry != NULL) { + PTPC_REQ_ENTRY pPrevEntry = NULL; + ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); + PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); + // update Hash list +- do +- { +- if (pProbeEntry == pEntry) +- { +- if (pPrevEntry == NULL) +- { ++ do { ++ if (pProbeEntry == pEntry) { ++ if (pPrevEntry == NULL) { + pTab->Hash[HashIdx] = pEntry->pNext; +- } +- else +- { ++ } else { + pPrevEntry->pNext = pEntry->pNext; + } + break; +@@ -720,8 +802,7 @@ static VOID TpcReqDelete( + Return : Current Time Stamp. + ========================================================================== + */ +-static UINT64 GetCurrentTimeStamp( +- IN PRTMP_ADAPTER pAd) ++static UINT64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) + { + // get current time stamp. + return 0; +@@ -737,11 +818,9 @@ static UINT64 GetCurrentTimeStamp( + Return : Current Time Stamp. + ========================================================================== + */ +-static UINT8 GetCurTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 Wcid) ++static UINT8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 Wcid) + { +- return 16; /* 16 dBm */ ++ return 16; /* 16 dBm */ + } + + /* +@@ -754,12 +833,10 @@ static UINT8 GetCurTxPwr( + Return : Current Time Stamp. + ========================================================================== + */ +-VOID InsertChannelRepIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, +- IN UINT8 RegulatoryClass) ++VOID InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PSTRING pCountry, IN UINT8 RegulatoryClass) + { + ULONG TempLen; + UINT8 Len; +@@ -767,43 +844,43 @@ VOID InsertChannelRepIE( + PUCHAR pChListPtr = NULL; + + Len = 1; +- if (strncmp(pCountry, "US", 2) == 0) +- { +- if (RegulatoryClass >= USA_REGULATORY_INFO_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: USA Unknow Requlatory class (%d)\n", +- __func__, RegulatoryClass)); ++ if (strncmp(pCountry, "US", 2) == 0) { ++ if (RegulatoryClass >= USA_REGULATORY_INFO_SIZE) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: USA Unknow Requlatory class (%d)\n", ++ __func__, RegulatoryClass)); + return; + } + +- Len += USARegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; +- pChListPtr = USARegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; +- } +- else if (strncmp(pCountry, "JP", 2) == 0) +- { +- if (RegulatoryClass >= JP_REGULATORY_INFO_SIZE) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: JP Unknow Requlatory class (%d)\n", +- __func__, RegulatoryClass)); ++ Len += ++ USARegulatoryInfo[RegulatoryClass].ChannelSet. ++ NumberOfChannels; ++ pChListPtr = ++ USARegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; ++ } else if (strncmp(pCountry, "JP", 2) == 0) { ++ if (RegulatoryClass >= JP_REGULATORY_INFO_SIZE) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: JP Unknow Requlatory class (%d)\n", ++ __func__, RegulatoryClass)); + return; + } + +- Len += JapanRegulatoryInfo[RegulatoryClass].ChannelSet.NumberOfChannels; +- pChListPtr = JapanRegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; +- } +- else +- { ++ Len += ++ JapanRegulatoryInfo[RegulatoryClass].ChannelSet. ++ NumberOfChannels; ++ pChListPtr = ++ JapanRegulatoryInfo[RegulatoryClass].ChannelSet.ChannelList; ++ } else { + DBGPRINT(RT_DEBUG_ERROR, ("%s: Unknow Country (%s)\n", +- __func__, pCountry)); ++ __func__, pCountry)); + return; + } + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &IEId, +- 1, &Len, +- 1, &RegulatoryClass, +- Len -1, pChListPtr, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &IEId, ++ 1, &Len, ++ 1, &RegulatoryClass, ++ Len - 1, pChListPtr, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +@@ -823,16 +900,12 @@ VOID InsertChannelRepIE( + Return : None. + ========================================================================== + */ +-VOID InsertDialogToken( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 DialogToken) ++VOID InsertDialogToken(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, IN UINT8 DialogToken) + { + ULONG TempLen; +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &DialogToken, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, 1, &DialogToken, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +@@ -851,19 +924,15 @@ VOID InsertDialogToken( + Return : None. + ========================================================================== + */ +- static VOID InsertTpcReqIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen) ++static VOID InsertTpcReqIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, OUT PULONG pFrameLen) + { + ULONG TempLen; + ULONG Len = 0; + UINT8 ElementID = IE_TPC_REQUEST; + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &ElementID, 1, &Len, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +@@ -884,12 +953,10 @@ VOID InsertDialogToken( + Return : None. + ========================================================================== + */ +-VOID InsertTpcReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin) ++VOID InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 TxPwr, IN UINT8 LinkMargin) + { + ULONG TempLen; + ULONG Len = sizeof(TPC_REPORT_INFO); +@@ -899,15 +966,12 @@ VOID InsertTpcReportIE( + TpcReportIE.TxPwr = TxPwr; + TpcReportIE.LinkMargin = LinkMargin; + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, &TpcReportIE, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &ElementID, ++ 1, &Len, Len, &TpcReportIE, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +- + return; + } + +@@ -926,13 +990,11 @@ VOID InsertTpcReportIE( + Return : None. + ========================================================================== + */ +-static VOID InsertChSwAnnIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 ChSwMode, +- IN UINT8 NewChannel, +- IN UINT8 ChSwCnt) ++static VOID InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 ChSwMode, ++ IN UINT8 NewChannel, IN UINT8 ChSwCnt) + { + ULONG TempLen; + ULONG Len = sizeof(CH_SW_ANN_INFO); +@@ -943,15 +1005,11 @@ static VOID InsertChSwAnnIE( + ChSwAnnIE.Channel = NewChannel; + ChSwAnnIE.ChSwCnt = ChSwCnt; + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, &ChSwAnnIE, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &ElementID, 1, &Len, Len, &ChSwAnnIE, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +- + return; + } + +@@ -970,25 +1028,21 @@ static VOID InsertChSwAnnIE( + 7. Measure Start time. + 8. Measure Duration. + +- + Return : None. + ========================================================================== + */ +-static VOID InsertMeasureReqIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Len, +- IN PMEASURE_REQ_INFO pMeasureReqIE) ++static VOID InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 Len, IN PMEASURE_REQ_INFO pMeasureReqIE) + { + ULONG TempLen; + UINT8 ElementID = IE_MEASUREMENT_REQUEST; + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- sizeof(MEASURE_REQ_INFO), pMeasureReqIE, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &ElementID, ++ 1, &Len, ++ sizeof(MEASURE_REQ_INFO), pMeasureReqIE, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +@@ -1012,13 +1066,11 @@ static VOID InsertMeasureReqIE( + Return : None. + ========================================================================== + */ +-static VOID InsertMeasureReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PMEASURE_REPORT_INFO pMeasureReportIE, +- IN UINT8 ReportLnfoLen, +- IN PUINT8 pReportInfo) ++static VOID InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PMEASURE_REPORT_INFO pMeasureReportIE, ++ IN UINT8 ReportLnfoLen, IN PUINT8 pReportInfo) + { + ULONG TempLen; + ULONG Len; +@@ -1026,19 +1078,15 @@ static VOID InsertMeasureReportIE( + + Len = sizeof(MEASURE_REPORT_INFO) + ReportLnfoLen; + +- MakeOutgoingFrame(pFrameBuf, &TempLen, +- 1, &ElementID, +- 1, &Len, +- Len, pMeasureReportIE, +- END_OF_ARGS); ++ MakeOutgoingFrame(pFrameBuf, &TempLen, ++ 1, &ElementID, ++ 1, &Len, Len, pMeasureReportIE, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +- if ((ReportLnfoLen > 0) && (pReportInfo != NULL)) +- { +- MakeOutgoingFrame(pFrameBuf + *pFrameLen, &TempLen, +- ReportLnfoLen, pReportInfo, +- END_OF_ARGS); ++ if ((ReportLnfoLen > 0) && (pReportInfo != NULL)) { ++ MakeOutgoingFrame(pFrameBuf + *pFrameLen, &TempLen, ++ ReportLnfoLen, pReportInfo, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + } +@@ -1057,43 +1105,40 @@ static VOID InsertMeasureReportIE( + Return : None. + ========================================================================== + */ +-VOID MakeMeasurementReqFrame( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 NumOfRepetitions) ++VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pOutBuffer, ++ OUT PULONG pFrameLen, ++ IN UINT8 TotalLen, ++ IN UINT8 Category, ++ IN UINT8 Action, ++ IN UINT8 MeasureToken, ++ IN UINT8 MeasureReqMode, ++ IN UINT8 MeasureReqType, IN UINT8 NumOfRepetitions) + { + ULONG TempLen; + MEASURE_REQ_INFO MeasureReqIE; + +- InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, Action); ++ InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, ++ Action); + + // fill Dialog Token +- InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, MeasureToken); ++ InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, ++ MeasureToken); + + /* fill Number of repetitions. */ +- if (Category == CATEGORY_RM) +- { +- MakeOutgoingFrame((pOutBuffer+*pFrameLen), &TempLen, +- 2, &NumOfRepetitions, +- END_OF_ARGS); ++ if (Category == CATEGORY_RM) { ++ MakeOutgoingFrame((pOutBuffer + *pFrameLen), &TempLen, ++ 2, &NumOfRepetitions, END_OF_ARGS); + + *pFrameLen += TempLen; + } +- + // prepare Measurement IE. + NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO)); + MeasureReqIE.Token = MeasureToken; + MeasureReqIE.ReqMode.word = MeasureReqMode; + MeasureReqIE.ReqType = MeasureReqType; +- InsertMeasureReqIE(pAd, (pOutBuffer+*pFrameLen), pFrameLen, +- TotalLen, &MeasureReqIE); ++ InsertMeasureReqIE(pAd, (pOutBuffer + *pFrameLen), pFrameLen, ++ TotalLen, &MeasureReqIE); + + return; + } +@@ -1110,15 +1155,13 @@ VOID MakeMeasurementReqFrame( + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, +- IN PUINT8 pReportInfo) ++VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN UINT8 DialogToken, ++ IN UINT8 MeasureToken, ++ IN UINT8 MeasureReqMode, ++ IN UINT8 MeasureReqType, ++ IN UINT8 ReportInfoLen, IN PUINT8 pReportInfo) + { + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; +@@ -1128,18 +1171,19 @@ VOID EnqueueMeasurementRep( + + // build action frame header. + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); ++ pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_MRP); ++ InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, ++ CATEGORY_SPECTRUM, SPEC_MRP); + + // fill Dialog Token + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); +@@ -1149,7 +1193,8 @@ VOID EnqueueMeasurementRep( + MeasureRepIE.Token = MeasureToken; + MeasureRepIE.ReportMode = MeasureReqMode; + MeasureRepIE.ReportType = MeasureReqType; +- InsertMeasureReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, &MeasureRepIE, ReportInfoLen, pReportInfo); ++ InsertMeasureReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, ++ &MeasureRepIE, ReportInfoLen, pReportInfo); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -1169,10 +1214,7 @@ VOID EnqueueMeasurementRep( + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCReq( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UCHAR DialogToken) ++VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) + { + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; +@@ -1182,18 +1224,19 @@ VOID EnqueueTPCReq( + + // build action frame header. + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); ++ pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_TPCRQ); ++ InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, ++ CATEGORY_SPECTRUM, SPEC_TPCRQ); + + // fill Dialog Token + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); +@@ -1219,12 +1262,9 @@ VOID EnqueueTPCReq( + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin) ++VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN UINT8 DialogToken, IN UINT8 TxPwr, IN UINT8 LinkMargin) + { + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; +@@ -1234,24 +1274,26 @@ VOID EnqueueTPCRep( + + // build action frame header. + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); ++ pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_TPCRP); ++ InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, ++ CATEGORY_SPECTRUM, SPEC_TPCRP); + + // fill Dialog Token + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); + + // Insert TPC Request IE. +- InsertTpcReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, TxPwr, LinkMargin); ++ InsertTpcReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, TxPwr, ++ LinkMargin); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -1273,11 +1315,8 @@ VOID EnqueueTPCRep( + Return : None. + ========================================================================== + */ +-VOID EnqueueChSwAnn( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 ChSwMode, +- IN UINT8 NewCh) ++VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, IN UINT8 ChSwMode, IN UINT8 NewCh) + { + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; +@@ -1287,20 +1326,22 @@ VOID EnqueueChSwAnn( + + // build action frame header. + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +- pAd->CurrentAddress); ++ pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + +- InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, CATEGORY_SPECTRUM, SPEC_CHANNEL_SWITCH); ++ InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, ++ CATEGORY_SPECTRUM, SPEC_CHANNEL_SWITCH); + +- InsertChSwAnnIE(pAd, (pOutBuffer + FrameLen), &FrameLen, ChSwMode, NewCh, 0); ++ InsertChSwAnnIE(pAd, (pOutBuffer + FrameLen), &FrameLen, ChSwMode, ++ NewCh, 0); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -1308,53 +1349,41 @@ VOID EnqueueChSwAnn( + return; + } + +-static BOOLEAN DfsRequirementCheck( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 Channel) ++static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, IN UINT8 Channel) + { + BOOLEAN Result = FALSE; + INT i; + +- do +- { ++ do { + // check DFS procedure is running. + // make sure DFS procedure won't start twice. +- if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +- { ++ if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) { + Result = FALSE; + break; + } +- + // check the new channel carried from Channel Switch Announcemnet is valid. +- for (i=0; iChannelListNum; i++) +- { ++ for (i = 0; i < pAd->ChannelListNum; i++) { + if ((Channel == pAd->ChannelList[i].Channel) +- &&(pAd->ChannelList[i].RemainingTimeForUse == 0)) +- { ++ && (pAd->ChannelList[i].RemainingTimeForUse == 0)) { + // found radar signal in the channel. the channel can't use at least for 30 minutes. +- pAd->ChannelList[i].RemainingTimeForUse = 1800;//30 min = 1800 sec ++ pAd->ChannelList[i].RemainingTimeForUse = 1800; //30 min = 1800 sec + Result = TRUE; + break; + } + } +- } while(FALSE); ++ } while (FALSE); + + return Result; + } + +-VOID NotifyChSwAnnToPeerAPs( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, +- IN UINT8 ChSwMode, +- IN UINT8 Channel) ++VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pRA, ++ IN PUCHAR pTA, IN UINT8 ChSwMode, IN UINT8 Channel) + { + } + +-static VOID StartDFSProcedure( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN UINT8 ChSwMode) ++static VOID StartDFSProcedure(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel, IN UINT8 ChSwMode) + { + // start DFS procedure + pAd->CommonCfg.Channel = Channel; +@@ -1375,7 +1404,6 @@ static VOID StartDFSProcedure( + 2. message length. + 3. Channel switch announcement infomation buffer. + +- + Return : None. + ========================================================================== + */ +@@ -1387,13 +1415,12 @@ static VOID StartDFSProcedure( + +----+-----+-----------+------------+-----------+ + 1 1 1 1 1 + */ +-static BOOLEAN PeerChSwAnnSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PCH_SW_ANN_INFO pChSwAnnInfo) ++static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, ++ OUT PCH_SW_ANN_INFO pChSwAnnInfo) + { +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; + PUCHAR pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +@@ -1408,23 +1435,25 @@ static BOOLEAN PeerChSwAnnSanity( + if (pChSwAnnInfo == NULL) + return result; + +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_CHANNEL_SWITCH_ANNOUNCEMENT: +- NdisMoveMemory(&pChSwAnnInfo->ChSwMode, eid_ptr->Octet, 1); +- NdisMoveMemory(&pChSwAnnInfo->Channel, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pChSwAnnInfo->ChSwCnt, eid_ptr->Octet + 2, 1); +- +- result = TRUE; +- break; ++ eid_ptr = (PEID_STRUCT) pFramePtr; ++ while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < ++ ((PUCHAR) pFramePtr + MsgLen)) { ++ switch (eid_ptr->Eid) { ++ case IE_CHANNEL_SWITCH_ANNOUNCEMENT: ++ NdisMoveMemory(&pChSwAnnInfo->ChSwMode, eid_ptr->Octet, ++ 1); ++ NdisMoveMemory(&pChSwAnnInfo->Channel, ++ eid_ptr->Octet + 1, 1); ++ NdisMoveMemory(&pChSwAnnInfo->ChSwCnt, ++ eid_ptr->Octet + 2, 1); ++ ++ result = TRUE; ++ break; + +- default: +- break; ++ default: ++ break; + } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1443,15 +1472,14 @@ static BOOLEAN PeerChSwAnnSanity( + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerMeasureReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PMEASURE_REQ_INFO pMeasureReqInfo, +- OUT PMEASURE_REQ pMeasureReq) ++static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, ++ OUT PUINT8 pDialogToken, ++ OUT PMEASURE_REQ_INFO pMeasureReqInfo, ++ OUT PMEASURE_REQ pMeasureReq) + { +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; + PUCHAR pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +@@ -1473,29 +1501,32 @@ static BOOLEAN PeerMeasureReqSanity( + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_MEASUREMENT_REQUEST: +- NdisMoveMemory(&pMeasureReqInfo->Token, eid_ptr->Octet, 1); +- NdisMoveMemory(&pMeasureReqInfo->ReqMode.word, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pMeasureReqInfo->ReqType, eid_ptr->Octet + 2, 1); +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pMeasureReq->ChNum, ptr, 1); +- NdisMoveMemory(&MeasureStartTime, ptr + 1, 8); +- pMeasureReq->MeasureStartTime = SWAP64(MeasureStartTime); +- NdisMoveMemory(&MeasureDuration, ptr + 9, 2); +- pMeasureReq->MeasureDuration = SWAP16(MeasureDuration); +- +- result = TRUE; +- break; ++ eid_ptr = (PEID_STRUCT) pFramePtr; ++ while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < ++ ((PUCHAR) pFramePtr + MsgLen)) { ++ switch (eid_ptr->Eid) { ++ case IE_MEASUREMENT_REQUEST: ++ NdisMoveMemory(&pMeasureReqInfo->Token, eid_ptr->Octet, ++ 1); ++ NdisMoveMemory(&pMeasureReqInfo->ReqMode.word, ++ eid_ptr->Octet + 1, 1); ++ NdisMoveMemory(&pMeasureReqInfo->ReqType, ++ eid_ptr->Octet + 2, 1); ++ ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ NdisMoveMemory(&pMeasureReq->ChNum, ptr, 1); ++ NdisMoveMemory(&MeasureStartTime, ptr + 1, 8); ++ pMeasureReq->MeasureStartTime = ++ SWAP64(MeasureStartTime); ++ NdisMoveMemory(&MeasureDuration, ptr + 9, 2); ++ pMeasureReq->MeasureDuration = SWAP16(MeasureDuration); ++ ++ result = TRUE; ++ break; + +- default: +- break; ++ default: ++ break; + } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1535,15 +1566,15 @@ static BOOLEAN PeerMeasureReqSanity( + +-----+---------------+---------------------+-------+------------+----------+ + 0 1 2 3 4 5-7 + */ +-static BOOLEAN PeerMeasureReportSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PMEASURE_REPORT_INFO pMeasureReportInfo, +- OUT PUINT8 pReportBuf) ++static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, ++ OUT PUINT8 pDialogToken, ++ OUT PMEASURE_REPORT_INFO ++ pMeasureReportInfo, ++ OUT PUINT8 pReportBuf) + { +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; + PUCHAR pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +@@ -1563,51 +1594,60 @@ static BOOLEAN PeerMeasureReportSanity( + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_MEASUREMENT_REPORT: +- NdisMoveMemory(&pMeasureReportInfo->Token, eid_ptr->Octet, 1); +- NdisMoveMemory(&pMeasureReportInfo->ReportMode, eid_ptr->Octet + 1, 1); +- NdisMoveMemory(&pMeasureReportInfo->ReportType, eid_ptr->Octet + 2, 1); +- if (pMeasureReportInfo->ReportType == RM_BASIC) +- { +- PMEASURE_BASIC_REPORT pReport = (PMEASURE_BASIC_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->Map, ptr + 11, 1); +- +- } +- else if (pMeasureReportInfo->ReportType == RM_CCA) +- { +- PMEASURE_CCA_REPORT pReport = (PMEASURE_CCA_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->CCA_Busy_Fraction, ptr + 11, 1); +- +- } +- else if (pMeasureReportInfo->ReportType == RM_RPI_HISTOGRAM) +- { +- PMEASURE_RPI_REPORT pReport = (PMEASURE_RPI_REPORT)pReportBuf; +- ptr = (PUCHAR)(eid_ptr->Octet + 3); +- NdisMoveMemory(&pReport->ChNum, ptr, 1); +- NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8); +- NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2); +- NdisMoveMemory(&pReport->RPI_Density, ptr + 11, 8); +- } +- result = TRUE; +- break; ++ eid_ptr = (PEID_STRUCT) pFramePtr; ++ while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < ++ ((PUCHAR) pFramePtr + MsgLen)) { ++ switch (eid_ptr->Eid) { ++ case IE_MEASUREMENT_REPORT: ++ NdisMoveMemory(&pMeasureReportInfo->Token, ++ eid_ptr->Octet, 1); ++ NdisMoveMemory(&pMeasureReportInfo->ReportMode, ++ eid_ptr->Octet + 1, 1); ++ NdisMoveMemory(&pMeasureReportInfo->ReportType, ++ eid_ptr->Octet + 2, 1); ++ if (pMeasureReportInfo->ReportType == RM_BASIC) { ++ PMEASURE_BASIC_REPORT pReport = ++ (PMEASURE_BASIC_REPORT) pReportBuf; ++ ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ NdisMoveMemory(&pReport->ChNum, ptr, 1); ++ NdisMoveMemory(&pReport->MeasureStartTime, ++ ptr + 1, 8); ++ NdisMoveMemory(&pReport->MeasureDuration, ++ ptr + 9, 2); ++ NdisMoveMemory(&pReport->Map, ptr + 11, 1); ++ ++ } else if (pMeasureReportInfo->ReportType == RM_CCA) { ++ PMEASURE_CCA_REPORT pReport = ++ (PMEASURE_CCA_REPORT) pReportBuf; ++ ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ NdisMoveMemory(&pReport->ChNum, ptr, 1); ++ NdisMoveMemory(&pReport->MeasureStartTime, ++ ptr + 1, 8); ++ NdisMoveMemory(&pReport->MeasureDuration, ++ ptr + 9, 2); ++ NdisMoveMemory(&pReport->CCA_Busy_Fraction, ++ ptr + 11, 1); ++ ++ } else if (pMeasureReportInfo->ReportType == ++ RM_RPI_HISTOGRAM) { ++ PMEASURE_RPI_REPORT pReport = ++ (PMEASURE_RPI_REPORT) pReportBuf; ++ ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ NdisMoveMemory(&pReport->ChNum, ptr, 1); ++ NdisMoveMemory(&pReport->MeasureStartTime, ++ ptr + 1, 8); ++ NdisMoveMemory(&pReport->MeasureDuration, ++ ptr + 9, 2); ++ NdisMoveMemory(&pReport->RPI_Density, ptr + 11, ++ 8); ++ } ++ result = TRUE; ++ break; + +- default: +- break; ++ default: ++ break; + } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1626,13 +1666,11 @@ static BOOLEAN PeerMeasureReportSanity( + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerTpcReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken) ++static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, OUT PUINT8 pDialogToken) + { +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; + PUCHAR pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +@@ -1650,19 +1688,18 @@ static BOOLEAN PeerTpcReqSanity( + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_TPC_REQUEST: +- result = TRUE; +- break; ++ eid_ptr = (PEID_STRUCT) pFramePtr; ++ while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < ++ ((PUCHAR) pFramePtr + MsgLen)) { ++ switch (eid_ptr->Eid) { ++ case IE_TPC_REQUEST: ++ result = TRUE; ++ break; + +- default: +- break; ++ default: ++ break; + } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1682,14 +1719,13 @@ static BOOLEAN PeerTpcReqSanity( + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerTpcRepSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, +- OUT PTPC_REPORT_INFO pTpcRepInfo) ++static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, ++ OUT PUINT8 pDialogToken, ++ OUT PTPC_REPORT_INFO pTpcRepInfo) + { +- PFRAME_802_11 Fr = (PFRAME_802_11)pMsg; ++ PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; + PUCHAR pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +@@ -1707,21 +1743,21 @@ static BOOLEAN PeerTpcRepSanity( + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT)pFramePtr; +- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((PUCHAR)pFramePtr + MsgLen)) +- { +- switch(eid_ptr->Eid) +- { +- case IE_TPC_REPORT: +- NdisMoveMemory(&pTpcRepInfo->TxPwr, eid_ptr->Octet, 1); +- NdisMoveMemory(&pTpcRepInfo->LinkMargin, eid_ptr->Octet + 1, 1); +- result = TRUE; +- break; +- +- default: +- break; ++ eid_ptr = (PEID_STRUCT) pFramePtr; ++ while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < ++ ((PUCHAR) pFramePtr + MsgLen)) { ++ switch (eid_ptr->Eid) { ++ case IE_TPC_REPORT: ++ NdisMoveMemory(&pTpcRepInfo->TxPwr, eid_ptr->Octet, 1); ++ NdisMoveMemory(&pTpcRepInfo->LinkMargin, ++ eid_ptr->Octet + 1, 1); ++ result = TRUE; ++ break; ++ ++ default: ++ break; + } +- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1738,64 +1774,69 @@ static BOOLEAN PeerTpcRepSanity( + Return : None. + ========================================================================== + */ +-static VOID PeerChSwAnnAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + CH_SW_ANN_INFO ChSwAnnInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; ++ PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; + UCHAR index = 0, Channel = 0, NewChannel = 0; + ULONG Bssidx = 0; + + NdisZeroMemory(&ChSwAnnInfo, sizeof(CH_SW_ANN_INFO)); +- if (! PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Invalid Channel Switch Action Frame.\n")); ++ if (!PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Invalid Channel Switch Action Frame.\n")); + return; + } + +- if (pAd->OpMode == OPMODE_STA) +- { +- Bssidx = BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, pAd->CommonCfg.Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerChSwAnnAction - Bssidx is not found\n")); ++ if (pAd->OpMode == OPMODE_STA) { ++ Bssidx = ++ BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, ++ pAd->CommonCfg.Channel); ++ if (Bssidx == BSS_NOT_FOUND) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerChSwAnnAction - Bssidx is not found\n")); + return; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("\n****Bssidx is %d, Channel = %d\n", index, pAd->ScanTab.BssEntry[Bssidx].Channel)); +- hex_dump("SSID",pAd->ScanTab.BssEntry[Bssidx].Bssid ,6); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("\n****Bssidx is %d, Channel = %d\n", index, ++ pAd->ScanTab.BssEntry[Bssidx].Channel)); ++ hex_dump("SSID", pAd->ScanTab.BssEntry[Bssidx].Bssid, 6); + + Channel = pAd->CommonCfg.Channel; + NewChannel = ChSwAnnInfo.Channel; + +- if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel)) +- { ++ if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) ++ && (Channel != NewChannel)) { + // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). + // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. + AsicSwitchChannel(pAd, 1, FALSE); + AsicLockChannel(pAd, 1); +- LinkDown(pAd, FALSE); ++ LinkDown(pAd, FALSE); + MlmeQueueInit(&pAd->Mlme.Queue); + BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc ++ RTMPusecDelay(1000000); // use delay to prevent STA do reassoc + + // channel sanity check +- for (index = 0 ; index < pAd->ChannelListNum; index++) +- { +- if (pAd->ChannelList[index].Channel == NewChannel) +- { +- pAd->ScanTab.BssEntry[Bssidx].Channel = NewChannel; ++ for (index = 0; index < pAd->ChannelListNum; index++) { ++ if (pAd->ChannelList[index].Channel == ++ NewChannel) { ++ pAd->ScanTab.BssEntry[Bssidx].Channel = ++ NewChannel; + pAd->CommonCfg.Channel = NewChannel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("&&&&&&&&&&&&&&&&PeerChSwAnnAction - STA receive channel switch announcement IE (New Channel =%d)\n", NewChannel)); ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ Channel, FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("&&&&&&&&&&&&&&&&PeerChSwAnnAction - STA receive channel switch announcement IE (New Channel =%d)\n", ++ NewChannel)); + break; + } + } + +- if (index >= pAd->ChannelListNum) +- { ++ if (index >= pAd->ChannelListNum) { + DBGPRINT_ERR(("&&&&&&&&&&&&&&&&&&&&&&&&&&PeerChSwAnnAction(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum)); + } + } +@@ -1804,7 +1845,6 @@ static VOID PeerChSwAnnAction( + return; + } + +- + /* + ========================================================================== + Description: +@@ -1816,21 +1856,23 @@ static VOID PeerChSwAnnAction( + Return : None. + ========================================================================== + */ +-static VOID PeerMeasureReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem) + { +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; ++ PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; + UINT8 DialogToken; + MEASURE_REQ_INFO MeasureReqInfo; +- MEASURE_REQ MeasureReq; ++ MEASURE_REQ MeasureReq; + MEASURE_REPORT_MODE ReportMode; + +- if(PeerMeasureReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReqInfo, &MeasureReq)) +- { ++ if (PeerMeasureReqSanity ++ (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReqInfo, ++ &MeasureReq)) { + ReportMode.word = 0; + ReportMode.field.Incapable = 1; +- EnqueueMeasurementRep(pAd, pFr->Hdr.Addr2, DialogToken, MeasureReqInfo.Token, ReportMode.word, MeasureReqInfo.ReqType, 0, NULL); ++ EnqueueMeasurementRep(pAd, pFr->Hdr.Addr2, DialogToken, ++ MeasureReqInfo.Token, ReportMode.word, ++ MeasureReqInfo.ReqType, 0, NULL); + } + + return; +@@ -1847,54 +1889,65 @@ static VOID PeerMeasureReqAction( + Return : None. + ========================================================================== + */ +-static VOID PeerMeasureReportAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem) + { + MEASURE_REPORT_INFO MeasureReportInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; ++ PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; + UINT8 DialogToken; + PUINT8 pMeasureReportInfo; + +-// if (pAd->CommonCfg.bIEEE80211H != TRUE) +-// return; ++// if (pAd->CommonCfg.bIEEE80211H != TRUE) ++// return; + +- if ((pMeasureReportInfo = kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for measure report buffer (size=%zu).\n", __func__, sizeof(MEASURE_RPI_REPORT))); ++ if ((pMeasureReportInfo = ++ kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s unable to alloc memory for measure report buffer (size=%zu).\n", ++ __func__, sizeof(MEASURE_RPI_REPORT))); + return; + } + + NdisZeroMemory(&MeasureReportInfo, sizeof(MEASURE_REPORT_INFO)); + NdisZeroMemory(pMeasureReportInfo, sizeof(MEASURE_RPI_REPORT)); +- if (PeerMeasureReportSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReportInfo, pMeasureReportInfo)) +- { ++ if (PeerMeasureReportSanity ++ (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReportInfo, ++ pMeasureReportInfo)) { + do { + PMEASURE_REQ_ENTRY pEntry = NULL; + + // Not a autonomous measure report. + // check the dialog token field. drop it if the dialog token doesn't match. + if ((DialogToken != 0) +- && ((pEntry = MeasureReqLookUp(pAd, DialogToken)) == NULL)) ++ && ((pEntry = MeasureReqLookUp(pAd, DialogToken)) == ++ NULL)) + break; + + if (pEntry != NULL) + MeasureReqDelete(pAd, pEntry->DialogToken); + +- if (MeasureReportInfo.ReportType == RM_BASIC) +- { +- PMEASURE_BASIC_REPORT pBasicReport = (PMEASURE_BASIC_REPORT)pMeasureReportInfo; ++ if (MeasureReportInfo.ReportType == RM_BASIC) { ++ PMEASURE_BASIC_REPORT pBasicReport = ++ (PMEASURE_BASIC_REPORT) pMeasureReportInfo; + if ((pBasicReport->Map.field.Radar) +- && (DfsRequirementCheck(pAd, pBasicReport->ChNum) == TRUE)) +- { +- NotifyChSwAnnToPeerAPs(pAd, pFr->Hdr.Addr1, pFr->Hdr.Addr2, 1, pBasicReport->ChNum); +- StartDFSProcedure(pAd, pBasicReport->ChNum, 1); ++ && ++ (DfsRequirementCheck ++ (pAd, pBasicReport->ChNum) == TRUE)) { ++ NotifyChSwAnnToPeerAPs(pAd, ++ pFr->Hdr.Addr1, ++ pFr->Hdr.Addr2, ++ 1, ++ pBasicReport-> ++ ChNum); ++ StartDFSProcedure(pAd, ++ pBasicReport->ChNum, ++ 1); + } + } + } while (FALSE); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("Invalid Measurement Report Frame.\n")); ++ } else ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Invalid Measurement Report Frame.\n")); + + kfree(pMeasureReportInfo); + +@@ -1912,11 +1965,9 @@ static VOID PeerMeasureReportAction( + Return : None. + ========================================================================== + */ +-static VOID PeerTpcReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg; ++ PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; + PUCHAR pFramePtr = pFr->Octet; + UINT8 DialogToken; + UINT8 TxPwr = GetCurTxPwr(pAd, Elem->Wcid); +@@ -1924,12 +1975,12 @@ static VOID PeerTpcReqAction( + CHAR RealRssi; + + // link margin: Ratio of the received signal power to the minimum desired by the station (STA). The +- // STA may incorporate rate information and channel conditions, including interference, into its computation +- // of link margin. ++ // STA may incorporate rate information and channel conditions, including interference, into its computation ++ // of link margin. + + RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), +- ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), +- ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); ++ ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ++ ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); + + // skip Category and action code. + pFramePtr += 2; +@@ -1939,7 +1990,8 @@ static VOID PeerTpcReqAction( + + LinkMargin = (RealRssi / MIN_RCV_PWR); + if (PeerTpcReqSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken)) +- EnqueueTPCRep(pAd, pFr->Hdr.Addr2, DialogToken, TxPwr, LinkMargin); ++ EnqueueTPCRep(pAd, pFr->Hdr.Addr2, DialogToken, TxPwr, ++ LinkMargin); + + return; + } +@@ -1955,22 +2007,21 @@ static VOID PeerTpcReqAction( + Return : None. + ========================================================================== + */ +-static VOID PeerTpcRepAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++static VOID PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + UINT8 DialogToken; + TPC_REPORT_INFO TpcRepInfo; + PTPC_REQ_ENTRY pEntry = NULL; + + NdisZeroMemory(&TpcRepInfo, sizeof(TPC_REPORT_INFO)); +- if (PeerTpcRepSanity(pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &TpcRepInfo)) +- { +- if ((pEntry = TpcReqLookUp(pAd, DialogToken)) != NULL) +- { ++ if (PeerTpcRepSanity ++ (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &TpcRepInfo)) { ++ if ((pEntry = TpcReqLookUp(pAd, DialogToken)) != NULL) { + TpcReqDelete(pAd, pEntry->DialogToken); +- DBGPRINT(RT_DEBUG_TRACE, ("%s: DialogToken=%x, TxPwr=%d, LinkMargin=%d\n", +- __func__, DialogToken, TpcRepInfo.TxPwr, TpcRepInfo.LinkMargin)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s: DialogToken=%x, TxPwr=%d, LinkMargin=%d\n", ++ __func__, DialogToken, TpcRepInfo.TxPwr, ++ TpcRepInfo.LinkMargin)); + } + } + +@@ -1989,41 +2040,37 @@ static VOID PeerTpcRepAction( + Return : None. + ========================================================================== + */ +-VOID PeerSpectrumAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + +- UCHAR Action = Elem->Msg[LENGTH_802_11+1]; ++ UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; + + if (pAd->CommonCfg.bIEEE80211H != TRUE) + return; + +- switch(Action) +- { +- case SPEC_MRQ: +- // current rt2860 unable do such measure specified in Measurement Request. +- // reject all measurement request. +- PeerMeasureReqAction(pAd, Elem); +- break; ++ switch (Action) { ++ case SPEC_MRQ: ++ // current rt2860 unable do such measure specified in Measurement Request. ++ // reject all measurement request. ++ PeerMeasureReqAction(pAd, Elem); ++ break; + +- case SPEC_MRP: +- PeerMeasureReportAction(pAd, Elem); +- break; ++ case SPEC_MRP: ++ PeerMeasureReportAction(pAd, Elem); ++ break; + +- case SPEC_TPCRQ: +- PeerTpcReqAction(pAd, Elem); +- break; ++ case SPEC_TPCRQ: ++ PeerTpcReqAction(pAd, Elem); ++ break; + +- case SPEC_TPCRP: +- PeerTpcRepAction(pAd, Elem); +- break; ++ case SPEC_TPCRP: ++ PeerTpcRepAction(pAd, Elem); ++ break; + +- case SPEC_CHANNEL_SWITCH: ++ case SPEC_CHANNEL_SWITCH: + +- +- PeerChSwAnnAction(pAd, Elem); +- break; ++ PeerChSwAnnAction(pAd, Elem); ++ break; + } + + return; +@@ -2038,9 +2085,7 @@ VOID PeerSpectrumAction( + Return : None. + ========================================================================== + */ +-INT Set_MeasureReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) ++INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + { + UINT Aid = 1; + UINT ArgIdx; +@@ -2059,42 +2104,43 @@ INT Set_MeasureReq_Proc( + NDIS_STATUS NStatus; + ULONG FrameLen; + +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s() allocate memory failed \n", __func__)); ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s() allocate memory failed \n", __func__)); + goto END_OF_MEASURE_REQ; + } + + ArgIdx = 1; +- while ((thisChar = strsep((char **)&arg, "-")) != NULL) +- { +- switch(ArgIdx) +- { +- case 1: // Aid. +- Aid = (UINT8) simple_strtol(thisChar, 0, 16); +- break; ++ while ((thisChar = strsep((char **)&arg, "-")) != NULL) { ++ switch (ArgIdx) { ++ case 1: // Aid. ++ Aid = (UINT8) simple_strtol(thisChar, 0, 16); ++ break; + +- case 2: // Measurement Request Type. +- MeasureReqType = simple_strtol(thisChar, 0, 16); +- if (MeasureReqType > 3) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow MeasureReqType(%d)\n", __func__, MeasureReqType)); +- goto END_OF_MEASURE_REQ; +- } +- break; ++ case 2: // Measurement Request Type. ++ MeasureReqType = simple_strtol(thisChar, 0, 16); ++ if (MeasureReqType > 3) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: unknow MeasureReqType(%d)\n", ++ __func__, MeasureReqType)); ++ goto END_OF_MEASURE_REQ; ++ } ++ break; + +- case 3: // Measurement channel. +- MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); +- break; ++ case 3: // Measurement channel. ++ MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); ++ break; + } + ArgIdx++; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d, MeasureReqType=%d MeasureCh=%d\n", __func__, Aid, MeasureReqType, MeasureCh)); +- if (!VALID_WCID(Aid)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow sta of Aid(%d)\n", __func__, Aid)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s::Aid = %d, MeasureReqType=%d MeasureCh=%d\n", __func__, ++ Aid, MeasureReqType, MeasureCh)); ++ if (!VALID_WCID(Aid)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: unknow sta of Aid(%d)\n", __func__, Aid)); + goto END_OF_MEASURE_REQ; + } + +@@ -2104,18 +2150,18 @@ INT Set_MeasureReq_Proc( + MeasureReqInsert(pAd, MeasureReqToken); + + // build action frame header. +- MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pAd->MacTab.Content[Aid].Addr, +- pAd->CurrentAddress); ++ MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, ++ pAd->MacTab.Content[Aid].Addr, pAd->CurrentAddress); + +- NdisMoveMemory(pOutBuffer, (PCHAR)&ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + TotalLen = sizeof(MEASURE_REQ_INFO) + sizeof(MEASURE_REQ); + + MakeMeasurementReqFrame(pAd, pOutBuffer, &FrameLen, +- sizeof(MEASURE_REQ_INFO), CATEGORY_RM, RM_BASIC, +- MeasureReqToken, MeasureReqMode.word, +- MeasureReqType, 0); ++ sizeof(MEASURE_REQ_INFO), CATEGORY_RM, RM_BASIC, ++ MeasureReqToken, MeasureReqMode.word, ++ MeasureReqType, 0); + + MeasureReq.ChNum = MeasureCh; + MeasureReq.MeasureStartTime = cpu2le64(MeasureStartTime); +@@ -2123,13 +2169,13 @@ INT Set_MeasureReq_Proc( + + { + ULONG TempLen; +- MakeOutgoingFrame( pOutBuffer+FrameLen, &TempLen, +- sizeof(MEASURE_REQ), &MeasureReq, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &TempLen, ++ sizeof(MEASURE_REQ), &MeasureReq, ++ END_OF_ARGS); + FrameLen += TempLen; + } + +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (UINT)FrameLen); ++ MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (UINT) FrameLen); + + END_OF_MEASURE_REQ: + MlmeFreeMemory(pAd, pOutBuffer); +@@ -2137,9 +2183,7 @@ END_OF_MEASURE_REQ: + return TRUE; + } + +-INT Set_TpcReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg) ++INT Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + { + UINT Aid; + +@@ -2148,9 +2192,9 @@ INT Set_TpcReq_Proc( + Aid = (UINT) simple_strtol(arg, 0, 16); + + DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d\n", __func__, Aid)); +- if (!VALID_WCID(Aid)) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("%s: unknow sta of Aid(%d)\n", __func__, Aid)); ++ if (!VALID_WCID(Aid)) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("%s: unknow sta of Aid(%d)\n", __func__, Aid)); + return TRUE; + } + +@@ -2160,4 +2204,3 @@ INT Set_TpcReq_Proc( + + return TRUE; + } +- +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch b/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch new file mode 100644 index 000000000..6662acab8 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch @@ -0,0 +1,13626 @@ +From 8d4698ccd2f45af1a84920f8ca0ae90e452c1c2d Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:14 -0800 +Subject: [PATCH 20/42] Staging: rt28x0: run sta/*.c files through Lindent + +commit 0f65bec15b2184dcf98dbdbf03187057de842eb5 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/sta/assoc.c | 1579 ++++++++++++---------- + drivers/staging/rt2860/sta/auth.c | 621 +++++---- + drivers/staging/rt2860/sta/auth_rsp.c | 124 +- + drivers/staging/rt2860/sta/connect.c | 2348 +++++++++++++++++--------------- + drivers/staging/rt2860/sta/rtmp_data.c | 2196 +++++++++++++++--------------- + drivers/staging/rt2860/sta/sanity.c | 489 ++++---- + drivers/staging/rt2860/sta/sync.c | 2094 ++++++++++++++++------------- + drivers/staging/rt2860/sta/wpa.c | 272 ++-- + 8 files changed, 5085 insertions(+), 4638 deletions(-) + +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index a67e213..e977416 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -36,31 +36,31 @@ + */ + #include "../rt_config.h" + +-UCHAR CipherWpaTemplate[] = { +- 0xdd, // WPA IE +- 0x16, // Length +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x01 // authentication +- }; +- +-UCHAR CipherWpa2Template[] = { +- 0x30, // RSN IE +- 0x14, // Length +- 0x01, 0x00, // Version +- 0x00, 0x0f, 0xac, 0x02, // group cipher, TKIP +- 0x01, 0x00, // number of pairwise +- 0x00, 0x0f, 0xac, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x0f, 0xac, 0x02, // authentication +- 0x00, 0x00, // RSN capability +- }; +- +-UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02}; ++UCHAR CipherWpaTemplate[] = { ++ 0xdd, // WPA IE ++ 0x16, // Length ++ 0x00, 0x50, 0xf2, 0x01, // oui ++ 0x01, 0x00, // Version ++ 0x00, 0x50, 0xf2, 0x02, // Multicast ++ 0x01, 0x00, // Number of unicast ++ 0x00, 0x50, 0xf2, 0x02, // unicast ++ 0x01, 0x00, // number of authentication method ++ 0x00, 0x50, 0xf2, 0x01 // authentication ++}; ++ ++UCHAR CipherWpa2Template[] = { ++ 0x30, // RSN IE ++ 0x14, // Length ++ 0x01, 0x00, // Version ++ 0x00, 0x0f, 0xac, 0x02, // group cipher, TKIP ++ 0x01, 0x00, // number of pairwise ++ 0x00, 0x0f, 0xac, 0x02, // unicast ++ 0x01, 0x00, // number of authentication method ++ 0x00, 0x0f, 0xac, 0x02, // authentication ++ 0x00, 0x00, // RSN capability ++}; ++ ++UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; + + /* + ========================================================================== +@@ -73,55 +73,84 @@ UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02}; + + ========================================================================== + */ +-VOID AssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) ++VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(S, Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, (STATE_MACHINE_FUNC)Drop, ASSOC_IDLE, ASSOC_MACHINE_BASE); ++ StateMachineInit(S, Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, ++ (STATE_MACHINE_FUNC) Drop, ASSOC_IDLE, ++ ASSOC_MACHINE_BASE); + + // first column +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)MlmeAssocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)MlmeReassocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)MlmeDisassocReqAction); +- StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); ++ StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_ASSOC_REQ, ++ (STATE_MACHINE_FUNC) MlmeAssocReqAction); ++ StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_REASSOC_REQ, ++ (STATE_MACHINE_FUNC) MlmeReassocReqAction); ++ StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) MlmeDisassocReqAction); ++ StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) PeerDisassocAction); + + // second column +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, (STATE_MACHINE_FUNC)PeerAssocRspAction); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenReassoc); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) ++ InvalidStateWhenDisassociate); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) PeerDisassocAction); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, ++ (STATE_MACHINE_FUNC) PeerAssocRspAction); + // + // Patch 3Com AP MOde:3CRWE454G72 + // We send Assoc request frame to this AP, it always send Reassoc Rsp not Associate Rsp. + // +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, (STATE_MACHINE_FUNC)PeerAssocRspAction); +- StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_ASSOC_TIMEOUT, (STATE_MACHINE_FUNC)AssocTimeoutAction); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, ++ (STATE_MACHINE_FUNC) PeerAssocRspAction); ++ StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_ASSOC_TIMEOUT, ++ (STATE_MACHINE_FUNC) AssocTimeoutAction); + + // third column +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, (STATE_MACHINE_FUNC)PeerReassocRspAction); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenReassoc); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) ++ InvalidStateWhenDisassociate); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) PeerDisassocAction); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, ++ (STATE_MACHINE_FUNC) PeerReassocRspAction); + // + // Patch, AP doesn't send Reassociate Rsp frame to Station. + // +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, (STATE_MACHINE_FUNC)PeerReassocRspAction); +- StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_REASSOC_TIMEOUT, (STATE_MACHINE_FUNC)ReassocTimeoutAction); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, ++ (STATE_MACHINE_FUNC) PeerReassocRspAction); ++ StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_REASSOC_TIMEOUT, ++ (STATE_MACHINE_FUNC) ReassocTimeoutAction); + + // fourth column +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAssoc); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenReassoc); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenDisassociate); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, (STATE_MACHINE_FUNC)PeerDisassocAction); +- StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_DISASSOC_TIMEOUT, (STATE_MACHINE_FUNC)DisassocTimeoutAction); ++ StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); ++ StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenReassoc); ++ StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) ++ InvalidStateWhenDisassociate); ++ StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_PEER_DISASSOC_REQ, ++ (STATE_MACHINE_FUNC) PeerDisassocAction); ++ StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_DISASSOC_TIMEOUT, ++ (STATE_MACHINE_FUNC) DisassocTimeoutAction); + + // initialize the timer +- RTMPInitTimer(pAd, &pAd->MlmeAux.AssocTimer, GET_TIMER_FUNCTION(AssocTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.ReassocTimer, GET_TIMER_FUNCTION(ReassocTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.DisassocTimer, GET_TIMER_FUNCTION(DisassocTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->MlmeAux.AssocTimer, ++ GET_TIMER_FUNCTION(AssocTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->MlmeAux.ReassocTimer, ++ GET_TIMER_FUNCTION(ReassocTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->MlmeAux.DisassocTimer, ++ GET_TIMER_FUNCTION(DisassocTimeout), pAd, FALSE); + } + + /* +@@ -137,15 +166,15 @@ VOID AssocStateMachineInit( + ========================================================================== + */ + VOID AssocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_ASSOC_TIMEOUT, 0, NULL); +@@ -165,15 +194,15 @@ VOID AssocTimeout(IN PVOID SystemSpecific1, + ========================================================================== + */ + VOID ReassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_REASSOC_TIMEOUT, 0, NULL); +@@ -193,15 +222,15 @@ VOID ReassocTimeout(IN PVOID SystemSpecific1, + ========================================================================== + */ + VOID DisassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_DISASSOC_TIMEOUT, 0, NULL); +@@ -230,136 +259,145 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID MlmeAssocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR ApAddr[6]; +- HEADER_802_11 AssocHdr; +- UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; +- USHORT ListenIntv; +- ULONG Timeout; +- USHORT CapabilityInfo; +- BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- ULONG tmp; +- USHORT VarIesOffset; +- USHORT Status; ++ UCHAR ApAddr[6]; ++ HEADER_802_11 AssocHdr; ++ UCHAR WmeIe[9] = ++ { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, ++ 0x00 }; ++ USHORT ListenIntv; ++ ULONG Timeout; ++ USHORT CapabilityInfo; ++ BOOLEAN TimerCancelled; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ ULONG tmp; ++ USHORT VarIesOffset; ++ USHORT Status; + + // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Block Assoc request durning WPA block period!\n")); ++ if (pAd->StaCfg.bBlockAssoc == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - Block Assoc request durning WPA block period!\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, ++ &Status); + } + // check sanity first +- else if (MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, &Timeout, &ListenIntv)) +- { ++ else if (MlmeAssocReqSanity ++ (pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, ++ &Timeout, &ListenIntv)) { + RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); + + // Get an unused nonpaged memory + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeAssocReqAction() allocate memory failed \n")); ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - MlmeAssocReqAction() allocate memory failed \n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_ASSOC_CONF, 2, &Status); + return; + } +- + // Add by James 03/06/27 +- pAd->StaCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ pAd->StaCfg.AssocInfo.Length = ++ sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); + // Association don't need to report MAC address + pAd->StaCfg.AssocInfo.AvailableRequestFixedIEs = +- NDIS_802_11_AI_REQFI_CAPABILITIES | NDIS_802_11_AI_REQFI_LISTENINTERVAL; +- pAd->StaCfg.AssocInfo.RequestFixedIEs.Capabilities = CapabilityInfo; +- pAd->StaCfg.AssocInfo.RequestFixedIEs.ListenInterval = ListenIntv; ++ NDIS_802_11_AI_REQFI_CAPABILITIES | ++ NDIS_802_11_AI_REQFI_LISTENINTERVAL; ++ pAd->StaCfg.AssocInfo.RequestFixedIEs.Capabilities = ++ CapabilityInfo; ++ pAd->StaCfg.AssocInfo.RequestFixedIEs.ListenInterval = ++ ListenIntv; + // Only reassociate need this + //COPY_MAC_ADDR(pAd->StaCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, ApAddr); +- pAd->StaCfg.AssocInfo.OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ pAd->StaCfg.AssocInfo.OffsetRequestIEs = ++ sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); + +- NdisZeroMemory(pAd->StaCfg.ReqVarIEs, MAX_VIE_LEN); ++ NdisZeroMemory(pAd->StaCfg.ReqVarIEs, MAX_VIE_LEN); + // First add SSID + VarIesOffset = 0; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SsidIe, 1); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SsidIe, ++ 1); + VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->MlmeAux.SsidLen, 1); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, ++ &pAd->MlmeAux.SsidLen, 1); + VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, ++ pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + VarIesOffset += pAd->MlmeAux.SsidLen; + + // Second add Supported rates +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SupRateIe, 1); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SupRateIe, ++ 1); + VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->MlmeAux.SupRateLen, 1); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, ++ &pAd->MlmeAux.SupRateLen, 1); + VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, ++ pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen); + VarIesOffset += pAd->MlmeAux.SupRateLen; + // End Add by James + +- if ((pAd->CommonCfg.Channel > 14) && +- (pAd->CommonCfg.bIEEE80211H == TRUE)) +- CapabilityInfo |= 0x0100; ++ if ((pAd->CommonCfg.Channel > 14) && ++ (pAd->CommonCfg.bIEEE80211H == TRUE)) ++ CapabilityInfo |= 0x0100; + + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send ASSOC request...\n")); +- MgtMacHeaderInit(pAd, &AssocHdr, SUBTYPE_ASSOC_REQ, 0, ApAddr, ApAddr); ++ MgtMacHeaderInit(pAd, &AssocHdr, SUBTYPE_ASSOC_REQ, 0, ApAddr, ++ ApAddr); + + // Build basic frame first +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AssocHdr, +- 2, &CapabilityInfo, +- 2, &ListenIntv, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &AssocHdr, ++ 2, &CapabilityInfo, ++ 2, &ListenIntv, ++ 1, &SsidIe, ++ 1, &pAd->MlmeAux.SsidLen, ++ pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, ++ 1, &SupRateIe, ++ 1, &pAd->MlmeAux.SupRateLen, ++ pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, ++ END_OF_ARGS); ++ ++ if (pAd->MlmeAux.ExtRateLen != 0) { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 1, &ExtRateIe, ++ 1, &pAd->MlmeAux.ExtRateLen, ++ pAd->MlmeAux.ExtRateLen, ++ pAd->MlmeAux.ExtRate, END_OF_ARGS); + FrameLen += tmp; + } +- + // HT +- if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { ++ if ((pAd->MlmeAux.HtCapabilityLen > 0) ++ && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { + ULONG TmpLen; + UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) +- { ++ UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) { + HtLen = SIZE_HT_CAP_IE + 4; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &pAd->MlmeAux.HtCapabilityLen, +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &WpaIe, 1, &HtLen, ++ 4, &BROADCOM[0], ++ pAd->MlmeAux.HtCapabilityLen, ++ &pAd->MlmeAux.HtCapability, ++ END_OF_ARGS); ++ } else { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &HtCapIe, 1, ++ &pAd->MlmeAux.HtCapabilityLen, ++ pAd->MlmeAux.HtCapabilityLen, ++ &pAd->MlmeAux.HtCapability, ++ END_OF_ARGS); + } + FrameLen += TmpLen; + } +- + // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION + // Case I: (Aggregation + Piggy-Back) + // 1. user enable aggregation, AND +@@ -368,63 +406,60 @@ VOID MlmeAssocReqAction( + // Case II: (Aggregation) + // 1. user enable aggregation, AND + // 2. AP annouces it's AGGREGATION-capable in BEACON +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) +- { ++ if (pAd->CommonCfg.bAggregationCapable) { ++ if ((pAd->CommonCfg.bPiggyBackCapable) ++ && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x03, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, ++ 0x03, 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 9, RalinkIe, ++ END_OF_ARGS); + FrameLen += TmpLen; +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { ++ } else if (pAd->MlmeAux.APRalinkIe & 0x00000001) { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x01, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, ++ 0x01, 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 9, RalinkIe, ++ END_OF_ARGS); + FrameLen += TmpLen; + } +- } +- else +- { ++ } else { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x06, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x06, ++ 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, 9, ++ RalinkIe, END_OF_ARGS); + FrameLen += TmpLen; + } + +- if (pAd->MlmeAux.APEdcaParm.bValid) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->MlmeAux.APEdcaParm.bAPSDCapable) +- { ++ if (pAd->MlmeAux.APEdcaParm.bValid) { ++ if (pAd->CommonCfg.bAPSDCapable ++ && pAd->MlmeAux.APEdcaParm.bAPSDCapable) { + QBSS_STA_INFO_PARM QosInfo; + +- NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM)); ++ NdisZeroMemory(&QosInfo, ++ sizeof(QBSS_STA_INFO_PARM)); + QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; + QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; + QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; + QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; +- QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR)&QosInfo; +- } +- else +- { +- // The Parameter Set Count is set to ¡§0¡¨ in the association request frames +- // WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); ++ QosInfo.MaxSPLength = ++ pAd->CommonCfg.MaxSPLength; ++ WmeIe[8] |= *(PUCHAR) & QosInfo; ++ } else { ++ // The Parameter Set Count is set to ¡§0¡¨ in the association request frames ++ // WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); + } + +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 9, &WmeIe[0], +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 9, &WmeIe[0], END_OF_ARGS); + FrameLen += tmp; + } +- + // + // Let WPA(#221) Element ID on the end of this association frame. + // Otherwise some AP will fail on parsing Element ID and set status fail on Assoc Rsp. +@@ -432,94 +467,107 @@ VOID MlmeAssocReqAction( + // This happens on AP (Model No:Linksys WRK54G) + // + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) +- ) +- ) +- { ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ++ ) ++ ) { + UCHAR RSNIe = IE_WPA; + +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)) +- { ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2)) { + RSNIe = IE_WPA2; + } + +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) && +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); ++ if ((pAd->StaCfg.WpaSupplicantUP != ++ WPA_SUPPLICANT_ENABLE) ++ && (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) ++ RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, ++ pAd->StaCfg.WepStatus, BSS0); + +- // Check for WPA PMK cache list +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) +- { +- INT idx; +- BOOLEAN FoundPMK = FALSE; ++ // Check for WPA PMK cache list ++ if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) { ++ INT idx; ++ BOOLEAN FoundPMK = FALSE; + // Search chched PMKID, append it if existed +- for (idx = 0; idx < PMKID_NO; idx++) +- { +- if (NdisEqualMemory(ApAddr, &pAd->StaCfg.SavedPMK[idx].BSSID, 6)) +- { ++ for (idx = 0; idx < PMKID_NO; idx++) { ++ if (NdisEqualMemory ++ (ApAddr, ++ &pAd->StaCfg.SavedPMK[idx].BSSID, ++ 6)) { + FoundPMK = TRUE; + break; + } + } +- if (FoundPMK) +- { ++ if (FoundPMK) { + // Set PMK number +- *(PUSHORT) &pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len] = 1; +- NdisMoveMemory(&pAd->StaCfg.RSN_IE[pAd->StaCfg.RSNIE_Len + 2], &pAd->StaCfg.SavedPMK[idx].PMKID, 16); +- pAd->StaCfg.RSNIE_Len += 18; ++ *(PUSHORT) & pAd->StaCfg.RSN_IE[pAd-> ++ StaCfg. ++ RSNIE_Len] ++ = 1; ++ NdisMoveMemory(&pAd->StaCfg. ++ RSN_IE[pAd->StaCfg. ++ RSNIE_Len + 2], ++ &pAd->StaCfg. ++ SavedPMK[idx].PMKID, 16); ++ pAd->StaCfg.RSNIE_Len += 18; + } + } + +- if ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) && +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == TRUE)) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); ++ if ((pAd->StaCfg.WpaSupplicantUP == ++ WPA_SUPPLICANT_ENABLE) ++ && (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == ++ TRUE)) { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSN_IE, ++ END_OF_ARGS); ++ } else { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 1, &RSNIe, ++ 1, &pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSN_IE, ++ END_OF_ARGS); + } + + FrameLen += tmp; + +- if ((pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE) || +- (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == FALSE)) +- { +- // Append Variable IE +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1); +- VarIesOffset += 1; +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &pAd->StaCfg.RSNIE_Len, 1); +- VarIesOffset += 1; ++ if ((pAd->StaCfg.WpaSupplicantUP != ++ WPA_SUPPLICANT_ENABLE) ++ || (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == ++ FALSE)) { ++ // Append Variable IE ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + ++ VarIesOffset, &RSNIe, 1); ++ VarIesOffset += 1; ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + ++ VarIesOffset, ++ &pAd->StaCfg.RSNIE_Len, 1); ++ VarIesOffset += 1; + } +- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, pAd->StaCfg.RSN_IE, pAd->StaCfg.RSNIE_Len); ++ NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, ++ pAd->StaCfg.RSN_IE, ++ pAd->StaCfg.RSNIE_Len); + VarIesOffset += pAd->StaCfg.RSNIE_Len; + + // Set Variable IEs Length + pAd->StaCfg.ReqVarIELen = VarIesOffset; + } + +- + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + + RTMPSetTimer(&pAd->MlmeAux.AssocTimer, Timeout); + pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, ++ &Status); + } + + } +@@ -541,121 +589,117 @@ VOID MlmeAssocReqAction( + + ========================================================================== + */ +-VOID MlmeReassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR ApAddr[6]; +- HEADER_802_11 ReassocHdr; +- UCHAR WmeIe[9] = {IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; +- USHORT CapabilityInfo, ListenIntv; +- ULONG Timeout; +- ULONG FrameLen = 0; +- BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- ULONG tmp; +- PUCHAR pOutBuffer = NULL; +- USHORT Status; ++ UCHAR ApAddr[6]; ++ HEADER_802_11 ReassocHdr; ++ UCHAR WmeIe[9] = ++ { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, ++ 0x00 }; ++ USHORT CapabilityInfo, ListenIntv; ++ ULONG Timeout; ++ ULONG FrameLen = 0; ++ BOOLEAN TimerCancelled; ++ NDIS_STATUS NStatus; ++ ULONG tmp; ++ PUCHAR pOutBuffer = NULL; ++ USHORT Status; + + // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Block ReAssoc request durning WPA block period!\n")); ++ if (pAd->StaCfg.bBlockAssoc == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - Block ReAssoc request durning WPA block period!\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, ++ &Status); + } + // the parameters are the same as the association +- else if(MlmeAssocReqSanity(pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, &Timeout, &ListenIntv)) +- { ++ else if (MlmeAssocReqSanity ++ (pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, ++ &Timeout, &ListenIntv)) { + RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeReassocReqAction() allocate memory failed \n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - MlmeReassocReqAction() allocate memory failed \n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_REASSOC_CONF, 2, &Status); + return; + } + + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); + + // make frame, use bssid as the AP address?? +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send RE-ASSOC request...\n")); +- MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, ApAddr, ApAddr); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &ReassocHdr, +- 2, &CapabilityInfo, +- 2, &ListenIntv, +- MAC_ADDR_LEN, ApAddr, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &pAd->MlmeAux.SupRateLen, +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, +- END_OF_ARGS); +- +- if (pAd->MlmeAux.ExtRateLen != 0) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &ExtRateIe, +- 1, &pAd->MlmeAux.ExtRateLen, +- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate, +- END_OF_ARGS); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - Send RE-ASSOC request...\n")); ++ MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, ++ ApAddr, ApAddr); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ &ReassocHdr, 2, &CapabilityInfo, 2, ++ &ListenIntv, MAC_ADDR_LEN, ApAddr, 1, &SsidIe, ++ 1, &pAd->MlmeAux.SsidLen, ++ pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, 1, ++ &SupRateIe, 1, &pAd->MlmeAux.SupRateLen, ++ pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate, ++ END_OF_ARGS); ++ ++ if (pAd->MlmeAux.ExtRateLen != 0) { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 1, &ExtRateIe, ++ 1, &pAd->MlmeAux.ExtRateLen, ++ pAd->MlmeAux.ExtRateLen, ++ pAd->MlmeAux.ExtRate, END_OF_ARGS); + FrameLen += tmp; + } + +- if (pAd->MlmeAux.APEdcaParm.bValid) +- { +- if (pAd->CommonCfg.bAPSDCapable && pAd->MlmeAux.APEdcaParm.bAPSDCapable) +- { ++ if (pAd->MlmeAux.APEdcaParm.bValid) { ++ if (pAd->CommonCfg.bAPSDCapable ++ && pAd->MlmeAux.APEdcaParm.bAPSDCapable) { + QBSS_STA_INFO_PARM QosInfo; + +- NdisZeroMemory(&QosInfo, sizeof(QBSS_STA_INFO_PARM)); ++ NdisZeroMemory(&QosInfo, ++ sizeof(QBSS_STA_INFO_PARM)); + QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; + QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; + QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; + QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; +- QosInfo.MaxSPLength = pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR)&QosInfo; ++ QosInfo.MaxSPLength = ++ pAd->CommonCfg.MaxSPLength; ++ WmeIe[8] |= *(PUCHAR) & QosInfo; + } + +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 9, &WmeIe[0], +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 9, &WmeIe[0], END_OF_ARGS); + FrameLen += tmp; + } +- + // HT +- if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { ++ if ((pAd->MlmeAux.HtCapabilityLen > 0) ++ && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { + ULONG TmpLen; + UCHAR HtLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; +- if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) +- { ++ UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) { + HtLen = SIZE_HT_CAP_IE + 4; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 1, &HtLen, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &pAd->MlmeAux.HtCapabilityLen, +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &WpaIe, 1, &HtLen, ++ 4, &BROADCOM[0], ++ pAd->MlmeAux.HtCapabilityLen, ++ &pAd->MlmeAux.HtCapability, ++ END_OF_ARGS); ++ } else { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &HtCapIe, 1, ++ &pAd->MlmeAux.HtCapabilityLen, ++ pAd->MlmeAux.HtCapabilityLen, ++ &pAd->MlmeAux.HtCapability, ++ END_OF_ARGS); + } + FrameLen += TmpLen; + } +- + // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION + // Case I: (Aggregation + Piggy-Back) + // 1. user enable aggregation, AND +@@ -664,49 +708,49 @@ VOID MlmeReassocReqAction( + // Case II: (Aggregation) + // 1. user enable aggregation, AND + // 2. AP annouces it's AGGREGATION-capable in BEACON +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) +- { ++ if (pAd->CommonCfg.bAggregationCapable) { ++ if ((pAd->CommonCfg.bPiggyBackCapable) ++ && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x03, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, ++ 0x03, 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 9, RalinkIe, ++ END_OF_ARGS); + FrameLen += TmpLen; +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { ++ } else if (pAd->MlmeAux.APRalinkIe & 0x00000001) { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x01, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, ++ 0x01, 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 9, RalinkIe, ++ END_OF_ARGS); + FrameLen += TmpLen; + } +- } +- else +- { ++ } else { + ULONG TmpLen; +- UCHAR RalinkIe[9] = {IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x04, 0x00, 0x00, 0x00}; +- MakeOutgoingFrame(pOutBuffer+FrameLen, &TmpLen, +- 9, RalinkIe, +- END_OF_ARGS); ++ UCHAR RalinkIe[9] = ++ { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x04, ++ 0x00, 0x00, 0x00 }; ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, 9, ++ RalinkIe, END_OF_ARGS); + FrameLen += TmpLen; + } + + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +- RTMPSetTimer(&pAd->MlmeAux.ReassocTimer, Timeout); /* in mSec */ ++ RTMPSetTimer(&pAd->MlmeAux.ReassocTimer, Timeout); /* in mSec */ + pAd->Mlme.AssocMachine.CurrState = REASSOC_WAIT_RSP; +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, ++ &Status); + } + } + +@@ -721,52 +765,50 @@ VOID MlmeReassocReqAction( + + ========================================================================== + */ +-VOID MlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + PMLME_DISASSOC_REQ_STRUCT pDisassocReq; +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; +- BOOLEAN TimerCancelled; +- ULONG Timeout = 500; +- USHORT Status; +- ++ HEADER_802_11 DisassocHdr; ++ PHEADER_802_11 pDisassocHdr; ++ PUCHAR pOutBuffer = NULL; ++ ULONG FrameLen = 0; ++ NDIS_STATUS NStatus; ++ BOOLEAN TimerCancelled; ++ ULONG Timeout = 500; ++ USHORT Status; + + // skip sanity check +- pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT)(Elem->Msg); ++ pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT) (Elem->Msg); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - MlmeDisassocReqAction() allocate memory failed\n")); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - MlmeDisassocReqAction() allocate memory failed\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, ++ &Status); + return; + } + +- +- + RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &TimerCancelled); + +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send DISASSOC request[BSSID::%02x:%02x:%02x:%02x:%02x:%02x (Reason=%d)\n", +- pDisassocReq->Addr[0], pDisassocReq->Addr[1], pDisassocReq->Addr[2], +- pDisassocReq->Addr[3], pDisassocReq->Addr[4], pDisassocReq->Addr[5], pDisassocReq->Reason)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - Send DISASSOC request[BSSID::%02x:%02x:%02x:%02x:%02x:%02x (Reason=%d)\n", ++ pDisassocReq->Addr[0], pDisassocReq->Addr[1], ++ pDisassocReq->Addr[2], pDisassocReq->Addr[3], ++ pDisassocReq->Addr[4], pDisassocReq->Addr[5], ++ pDisassocReq->Reason)); + MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pDisassocReq->Addr, pDisassocReq->Addr); // patch peap ttls switching issue +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DisassocHdr, +- 2, &pDisassocReq->Reason, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &DisassocHdr, ++ 2, &pDisassocReq->Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + + // To patch Instance and Buffalo(N) AP + // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine + // Therefore, we send both of them. +- pDisassocHdr = (PHEADER_802_11)pOutBuffer; ++ pDisassocHdr = (PHEADER_802_11) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +@@ -775,10 +817,9 @@ VOID MlmeDisassocReqAction( + pAd->StaCfg.DisassocReason = REASON_DISASSOC_STA_LEAVING; + COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pDisassocReq->Addr); + +- RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */ ++ RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */ + pAd->Mlme.AssocMachine.CurrState = DISASSOC_WAIT_RSP; + +- + RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); + + } +@@ -794,71 +835,81 @@ VOID MlmeDisassocReqAction( + + ========================================================================== + */ +-VOID PeerAssocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT CapabilityInfo, Status, Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BOOLEAN TimerCancelled; +- UCHAR CkipFlag; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- if (PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, +- &HtCapability,&AddHtInfo, &HtCapabilityLen,&AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) +- { ++ USHORT CapabilityInfo, Status, Aid; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ BOOLEAN TimerCancelled; ++ UCHAR CkipFlag; ++ EDCA_PARM EdcaParm; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR HtCapabilityLen = 0; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChannelOffset = 0xff; ++ ++ if (PeerAssocRspSanity ++ (pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, ++ &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, &HtCapability, ++ &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen, &NewExtChannelOffset, ++ &EdcaParm, &CkipFlag)) { + // The frame is for me ? +- if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status)); +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n",Elem->Wcid, pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); +- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); +- +- +- if(Status == MLME_SUCCESS) +- { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; ++ if (MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", ++ Status)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n", ++ Elem->Wcid, ++ pAd->MacTab.Content[BSSID_WCID].AMsduSize, ++ pAd->MacTab.Content[BSSID_WCID]. ++ ClientStatusFlags)); ++ RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, ++ &TimerCancelled); ++ ++ if (Status == MLME_SUCCESS) { ++ UCHAR MaxSupportedRateIn500Kbps = 0; ++ UCHAR idx; + + // supported rates array may not be sorted. sort it and find the maximum rate +- for (idx=0; idxMacTab.Content[BSSID_WCID], +- MaxSupportedRateIn500Kbps, +- &HtCapability, +- HtCapabilityLen, +- &AddHtInfo, +- AddHtInfoLen, +- CapabilityInfo); ++ &pAd->MacTab. ++ Content[BSSID_WCID], ++ MaxSupportedRateIn500Kbps, ++ &HtCapability, ++ HtCapabilityLen, &AddHtInfo, ++ AddHtInfoLen, ++ CapabilityInfo); + } + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_ASSOC_CONF, 2, &Status); + } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerAssocRspAction() sanity check fail\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - PeerAssocRspAction() sanity check fail\n")); + } + } + +@@ -873,55 +924,62 @@ VOID PeerAssocRspAction( + + ========================================================================== + */ +-VOID PeerReassocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT CapabilityInfo; +- USHORT Status; +- USHORT Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR CkipFlag; +- BOOLEAN TimerCancelled; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- +- if(PeerAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, +- &HtCapability, &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen,&NewExtChannelOffset, &EdcaParm, &CkipFlag)) +- { +- if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) // The frame is for me ? ++ USHORT CapabilityInfo; ++ USHORT Status; ++ USHORT Aid; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ UCHAR CkipFlag; ++ BOOLEAN TimerCancelled; ++ EDCA_PARM EdcaParm; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR HtCapabilityLen; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChannelOffset = 0xff; ++ ++ if (PeerAssocRspSanity ++ (pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, ++ &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, &HtCapability, ++ &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen, &NewExtChannelOffset, ++ &EdcaParm, &CkipFlag)) { ++ if (MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) // The frame is for me ? + { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - receive REASSOC_RSP to me (status=%d)\n", Status)); +- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - receive REASSOC_RSP to me (status=%d)\n", ++ Status)); ++ RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, ++ &TimerCancelled); + +- if(Status == MLME_SUCCESS) +- { ++ if (Status == MLME_SUCCESS) { + // go to procedure listed on page 376 +- AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, +- &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); +- ++ AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, ++ SupRate, SupRateLen, ExtRate, ++ ExtRateLen, &EdcaParm, ++ &HtCapability, HtCapabilityLen, ++ &AddHtInfo); + +- { +- wext_notify_event_assoc(pAd); +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); +- } +- +- } ++ { ++ wext_notify_event_assoc(pAd); ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, ++ -1, ++ &pAd->MlmeAux. ++ Bssid[0], NULL, ++ 0); ++ } + +- // CkipFlag is no use for reassociate +- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); + } ++ // CkipFlag is no use for reassociate ++ pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_REASSOC_CONF, 2, &Status); + } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerReassocRspAction() sanity check fail\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - PeerReassocRspAction() sanity check fail\n")); + } + + } +@@ -936,30 +994,18 @@ VOID PeerReassocRspAction( + + ========================================================================== + */ +-VOID AssocPostProc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN USHORT CapabilityInfo, +- IN USHORT Aid, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN PEDCA_PARM pEdcaParm, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo) // AP might use this additional ht info IE ++VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityInfo, IN USHORT Aid, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) // AP might use this additional ht info IE + { + ULONG Idx; + + pAd->MlmeAux.BssType = BSS_INFRA; + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pAddr2); + pAd->MlmeAux.Aid = Aid; +- pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; ++ pAd->MlmeAux.CapabilityInfo = ++ CapabilityInfo & SUPPORTED_CAPABILITY_INFO; + + // Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on. +- if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE)) +- { ++ if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE)) { + pEdcaParm->bValid = TRUE; + pEdcaParm->Aifsn[0] = 3; + pEdcaParm->Aifsn[1] = 7; +@@ -976,10 +1022,10 @@ VOID AssocPostProc( + pEdcaParm->Cwmax[2] = 4; + pEdcaParm->Cwmax[3] = 3; + +- pEdcaParm->Txop[0] = 0; +- pEdcaParm->Txop[1] = 0; +- pEdcaParm->Txop[2] = 96; +- pEdcaParm->Txop[3] = 48; ++ pEdcaParm->Txop[0] = 0; ++ pEdcaParm->Txop[1] = 0; ++ pEdcaParm->Txop[2] = 96; ++ pEdcaParm->Txop[3] = 48; + + } + +@@ -995,75 +1041,94 @@ VOID AssocPostProc( + NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen); + RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); + +- if (HtCapabilityLen > 0) +- { ++ if (HtCapabilityLen > 0) { + RTMPCheckHt(pAd, BSSID_WCID, pHtCapability, pAddHtInfo); + } +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> AP.AMsduSize = %d. ClientStatusFlags = 0x%lx \n", pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AssocPostProc===> AP.AMsduSize = %d. ClientStatusFlags = 0x%lx \n", ++ pAd->MacTab.Content[BSSID_WCID].AMsduSize, ++ pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> (Mmps=%d, AmsduSize=%d, )\n", +- pAd->MacTab.Content[BSSID_WCID].MmpsMode, pAd->MacTab.Content[BSSID_WCID].AMsduSize)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AssocPostProc===> (Mmps=%d, AmsduSize=%d, )\n", ++ pAd->MacTab.Content[BSSID_WCID].MmpsMode, ++ pAd->MacTab.Content[BSSID_WCID].AMsduSize)); + + // Set New WPA information + Idx = BssTableSearch(&pAd->ScanTab, pAddr2, pAd->MlmeAux.Channel); +- if (Idx == BSS_NOT_FOUND) +- { ++ if (Idx == BSS_NOT_FOUND) { + DBGPRINT_ERR(("ASSOC - Can't find BSS after receiving Assoc response\n")); +- } +- else +- { ++ } else { + // Init variable + pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = 0; +- NdisZeroMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, MAX_LEN_OF_RSNIE); ++ NdisZeroMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, ++ MAX_LEN_OF_RSNIE); + + // Store appropriate RSN_IE for WPA SM negotiation later +- if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) +- { +- PUCHAR pVIE; +- USHORT len; +- PEID_STRUCT pEid; ++ if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) ++ && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) { ++ PUCHAR pVIE; ++ USHORT len; ++ PEID_STRUCT pEid; + + pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; +- len = pAd->ScanTab.BssEntry[Idx].VarIELen; ++ len = pAd->ScanTab.BssEntry[Idx].VarIELen; + //KH need to check again + // Don't allow to go to sleep mode if authmode is WPA-related. + //This can make Authentication process more smoothly. + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + +- while (len > 0) +- { ++ while (len > 0) { + pEid = (PEID_STRUCT) pVIE; + // For WPA/WPAPSK +- if ((pEid->Eid == IE_WPA) && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +- && (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2)); +- pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2); +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA SM negotiation \n")); ++ if ((pEid->Eid == IE_WPA) ++ && ++ (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) ++ && (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA ++ || pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK)) { ++ NdisMoveMemory(pAd->MacTab. ++ Content[BSSID_WCID]. ++ RSN_IE, pVIE, ++ (pEid->Len + 2)); ++ pAd->MacTab.Content[BSSID_WCID]. ++ RSNIE_Len = (pEid->Len + 2); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AssocPostProc===> Store RSN_IE for WPA SM negotiation \n")); + } + // For WPA2/WPA2PSK +- else if ((pEid->Eid == IE_RSN) && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) +- && (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2 || pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- NdisMoveMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, pVIE, (pEid->Len + 2)); +- pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = (pEid->Len + 2); +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> Store RSN_IE for WPA2 SM negotiation \n")); ++ else if ((pEid->Eid == IE_RSN) ++ && ++ (NdisEqualMemory ++ (pEid->Octet + 2, RSN_OUI, 3)) ++ && (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2 ++ || pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK)) { ++ NdisMoveMemory(pAd->MacTab. ++ Content[BSSID_WCID]. ++ RSN_IE, pVIE, ++ (pEid->Len + 2)); ++ pAd->MacTab.Content[BSSID_WCID]. ++ RSNIE_Len = (pEid->Len + 2); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AssocPostProc===> Store RSN_IE for WPA2 SM negotiation \n")); + } + + pVIE += (pEid->Len + 2); +- len -= (pEid->Len + 2); ++ len -= (pEid->Len + 2); + } + +- + } + +- if (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> no RSN_IE \n")); +- } +- else +- { +- hex_dump("RSN_IE", pAd->MacTab.Content[BSSID_WCID].RSN_IE, pAd->MacTab.Content[BSSID_WCID].RSNIE_Len); ++ if (pAd->MacTab.Content[BSSID_WCID].RSNIE_Len == 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AssocPostProc===> no RSN_IE \n")); ++ } else { ++ hex_dump("RSN_IE", ++ pAd->MacTab.Content[BSSID_WCID].RSN_IE, ++ pAd->MacTab.Content[BSSID_WCID].RSNIE_Len); + } + } + } +@@ -1079,36 +1144,36 @@ VOID AssocPostProc( + + ========================================================================== + */ +-VOID PeerDisassocAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ USHORT Reason; + + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction()\n")); +- if(PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() Reason = %d\n", Reason)); +- if (INFRA_ON(pAd) && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, Addr2)) +- { +- +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - PeerDisassocAction() Reason = %d\n", ++ Reason)); ++ if (INFRA_ON(pAd) ++ && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, Addr2)) { ++ ++ if (pAd->CommonCfg.bWirelessEvent) { ++ RTMPSendWirelessEvent(pAd, ++ IW_DISASSOC_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); + } + +- + LinkDown(pAd, TRUE); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + +- +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, ++ 0); + } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction() sanity check fail\n")); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - PeerDisassocAction() sanity check fail\n")); + } + + } +@@ -1124,11 +1189,9 @@ VOID PeerDisassocAction( + + ========================================================================== + */ +-VOID AssocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ USHORT Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -1144,11 +1207,9 @@ VOID AssocTimeoutAction( + + ========================================================================== + */ +-VOID ReassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ USHORT Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -1164,51 +1225,49 @@ VOID ReassocTimeoutAction( + + ========================================================================== + */ +-VOID DisassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ USHORT Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - DisassocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, ++ &Status); + } + +-VOID InvalidStateWhenAssoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenAssoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); ++ USHORT Status; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - InvalidStateWhenAssoc(state=%ld), reset ASSOC state machine\n", ++ pAd->Mlme.AssocMachine.CurrState)); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); + } + +-VOID InvalidStateWhenReassoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenReassoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - InvalidStateWhenReassoc(state=%ld), reset ASSOC state machine\n", ++ pAd->Mlme.AssocMachine.CurrState)); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); + } + +-VOID InvalidStateWhenDisassociate( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - InvalidStateWhenDisassoc(state=%ld), reset ASSOC state machine\n", +- pAd->Mlme.AssocMachine.CurrState)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - InvalidStateWhenDisassoc(state=%ld), reset ASSOC state machine\n", ++ pAd->Mlme.AssocMachine.CurrState)); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DISASSOC_CONF, 2, ++ &Status); + } + + /* +@@ -1224,33 +1283,31 @@ VOID InvalidStateWhenDisassociate( + + ========================================================================== + */ +-VOID Cls3errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr) ++VOID Cls3errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) + { +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; +- USHORT Reason = REASON_CLS3ERR; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ HEADER_802_11 DisassocHdr; ++ PHEADER_802_11 pDisassocHdr; ++ PUCHAR pOutBuffer = NULL; ++ ULONG FrameLen = 0; ++ NDIS_STATUS NStatus; ++ USHORT Reason = REASON_CLS3ERR; ++ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory + if (NStatus != NDIS_STATUS_SUCCESS) + return; + +- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Class 3 Error, Send DISASSOC frame\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ASSOC - Class 3 Error, Send DISASSOC frame\n")); + MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid); // patch peap ttls switching issue +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DisassocHdr, +- 2, &Reason, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &DisassocHdr, ++ 2, &Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + + // To patch Instance and Buffalo(N) AP + // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine + // Therefore, we send both of them. +- pDisassocHdr = (PHEADER_802_11)pOutBuffer; ++ pDisassocHdr = (PHEADER_802_11) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +@@ -1260,206 +1317,248 @@ VOID Cls3errAction( + COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pAddr); + } + +- +-int wext_notify_event_assoc( +- IN RTMP_ADAPTER *pAd) ++int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd) + { +- char custom[IW_CUSTOM_MAX] = {0}; ++ char custom[IW_CUSTOM_MAX] = { 0 }; + +- if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX) +- { +- NdisMoveMemory(custom, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen); +- RtmpOSWrielessEventSend(pAd, IWEVASSOCREQIE, -1, NULL, custom, pAd->StaCfg.ReqVarIELen); +- } +- else +- DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n")); ++ if (pAd->StaCfg.ReqVarIELen <= IW_CUSTOM_MAX) { ++ NdisMoveMemory(custom, pAd->StaCfg.ReqVarIEs, ++ pAd->StaCfg.ReqVarIELen); ++ RtmpOSWrielessEventSend(pAd, IWEVASSOCREQIE, -1, NULL, custom, ++ pAd->StaCfg.ReqVarIELen); ++ } else ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("pAd->StaCfg.ReqVarIELen > MAX_CUSTOM_LEN\n")); + + return 0; + + } + +- +-BOOLEAN StaAddMacTableEntry( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo, +- IN UCHAR AddHtInfoLen, +- IN USHORT CapabilityInfo) ++BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR MaxSupportedRateIn500Kbps, ++ IN HT_CAPABILITY_IE * pHtCapability, ++ IN UCHAR HtCapabilityLen, ++ IN ADD_HT_INFO_IE * pAddHtInfo, ++ IN UCHAR AddHtInfoLen, IN USHORT CapabilityInfo) + { +- UCHAR MaxSupportedRate = RATE_11; ++ UCHAR MaxSupportedRate = RATE_11; + + if (ADHOC_ON(pAd)) + CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); + +- switch (MaxSupportedRateIn500Kbps) +- { +- case 108: MaxSupportedRate = RATE_54; break; +- case 96: MaxSupportedRate = RATE_48; break; +- case 72: MaxSupportedRate = RATE_36; break; +- case 48: MaxSupportedRate = RATE_24; break; +- case 36: MaxSupportedRate = RATE_18; break; +- case 24: MaxSupportedRate = RATE_12; break; +- case 18: MaxSupportedRate = RATE_9; break; +- case 12: MaxSupportedRate = RATE_6; break; +- case 22: MaxSupportedRate = RATE_11; break; +- case 11: MaxSupportedRate = RATE_5_5; break; +- case 4: MaxSupportedRate = RATE_2; break; +- case 2: MaxSupportedRate = RATE_1; break; +- default: MaxSupportedRate = RATE_11; break; +- } +- +- if ((pAd->CommonCfg.PhyMode == PHY_11G) && (MaxSupportedRate < RATE_FIRST_OFDM_RATE)) +- return FALSE; ++ switch (MaxSupportedRateIn500Kbps) { ++ case 108: ++ MaxSupportedRate = RATE_54; ++ break; ++ case 96: ++ MaxSupportedRate = RATE_48; ++ break; ++ case 72: ++ MaxSupportedRate = RATE_36; ++ break; ++ case 48: ++ MaxSupportedRate = RATE_24; ++ break; ++ case 36: ++ MaxSupportedRate = RATE_18; ++ break; ++ case 24: ++ MaxSupportedRate = RATE_12; ++ break; ++ case 18: ++ MaxSupportedRate = RATE_9; ++ break; ++ case 12: ++ MaxSupportedRate = RATE_6; ++ break; ++ case 22: ++ MaxSupportedRate = RATE_11; ++ break; ++ case 11: ++ MaxSupportedRate = RATE_5_5; ++ break; ++ case 4: ++ MaxSupportedRate = RATE_2; ++ break; ++ case 2: ++ MaxSupportedRate = RATE_1; ++ break; ++ default: ++ MaxSupportedRate = RATE_11; ++ break; ++ } ++ ++ if ((pAd->CommonCfg.PhyMode == PHY_11G) ++ && (MaxSupportedRate < RATE_FIRST_OFDM_RATE)) ++ return FALSE; + + // 11n only +- if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))&& (HtCapabilityLen == 0)) ++ if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) ++ || (pAd->CommonCfg.PhyMode == PHY_11N_5G)) ++ && (HtCapabilityLen == 0)) + return FALSE; + + if (!pEntry) +- return FALSE; ++ return FALSE; + + NdisAcquireSpinLock(&pAd->MacTabLock); +- if (pEntry) +- { ++ if (pEntry) { + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + if ((MaxSupportedRate < RATE_FIRST_OFDM_RATE) || +- (pAd->CommonCfg.PhyMode == PHY_11B)) +- { ++ (pAd->CommonCfg.PhyMode == PHY_11B)) { + pEntry->RateLen = 4; + if (MaxSupportedRate >= RATE_FIRST_OFDM_RATE) + MaxSupportedRate = RATE_11; +- } +- else ++ } else + pEntry->RateLen = 12; + + pEntry->MaxHTPhyMode.word = 0; + pEntry->MinHTPhyMode.word = 0; + pEntry->HTPhyMode.word = 0; + pEntry->MaxSupportedRate = MaxSupportedRate; +- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) +- { ++ if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE) { + pEntry->MaxHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate; ++ pEntry->MaxHTPhyMode.field.MCS = ++ pEntry->MaxSupportedRate; + pEntry->MinHTPhyMode.field.MODE = MODE_CCK; +- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate; ++ pEntry->MinHTPhyMode.field.MCS = ++ pEntry->MaxSupportedRate; + pEntry->HTPhyMode.field.MODE = MODE_CCK; + pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate; +- } +- else +- { ++ } else { + pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; ++ pEntry->MaxHTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; + pEntry->MinHTPhyMode.field.MODE = MODE_OFDM; +- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; ++ pEntry->MinHTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; + pEntry->HTPhyMode.field.MODE = MODE_OFDM; +- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; ++ pEntry->HTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[pEntry->MaxSupportedRate]; + } + pEntry->CapabilityInfo = CapabilityInfo; +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); ++ CLIENT_STATUS_CLEAR_FLAG(pEntry, ++ fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ CLIENT_STATUS_CLEAR_FLAG(pEntry, ++ fCLIENT_STATUS_PIGGYBACK_CAPABLE); + } + + NdisZeroMemory(&pEntry->HTCapability, sizeof(pEntry->HTCapability)); + // If this Entry supports 802.11n, upgrade to HT rate. +- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { +- UCHAR j, bitmask; //k,bitmask; +- CHAR i; ++ if ((HtCapabilityLen != 0) ++ && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { ++ UCHAR j, bitmask; //k,bitmask; ++ CHAR i; + + if (ADHOC_ON(pAd)) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +- if ((pHtCapability->HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) +- { ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_WMM_CAPABLE); ++ if ((pHtCapability->HtCapInfo.GF) ++ && (pAd->CommonCfg.DesiredHtPhy.GF)) { + pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD; +- } +- else +- { ++ } else { + pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; + pAd->MacTab.fAnyStationNonGF = TRUE; + pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1; + } + + if ((pHtCapability->HtCapInfo.ChannelWidth) && +- (pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && +- ((pAd->StaCfg.BssType == BSS_INFRA) || ((pAd->StaCfg.BssType == BSS_ADHOC) && (pAddHtInfo->AddHtInfo.ExtChanOffset == pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset)))) +- { +- pEntry->MaxHTPhyMode.field.BW= BW_40; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40)); +- } +- else +- { ++ (pAd->CommonCfg.DesiredHtPhy.ChannelWidth) && ++ ((pAd->StaCfg.BssType == BSS_INFRA) ++ || ((pAd->StaCfg.BssType == BSS_ADHOC) ++ && (pAddHtInfo->AddHtInfo.ExtChanOffset == ++ pAd->CommonCfg.AddHTInfo.AddHtInfo. ++ ExtChanOffset)))) { ++ pEntry->MaxHTPhyMode.field.BW = BW_40; ++ pEntry->MaxHTPhyMode.field.ShortGI = ++ ((pAd->CommonCfg.DesiredHtPhy. ++ ShortGIfor40) & (pHtCapability->HtCapInfo. ++ ShortGIfor40)); ++ } else { + pEntry->MaxHTPhyMode.field.BW = BW_20; +- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(pHtCapability->HtCapInfo.ShortGIfor20)); ++ pEntry->MaxHTPhyMode.field.ShortGI = ++ ((pAd->CommonCfg.DesiredHtPhy. ++ ShortGIfor20) & (pHtCapability->HtCapInfo. ++ ShortGIfor20)); + pAd->MacTab.fAnyStation20Only = TRUE; + } + + // 3*3 +- if (pAd->MACVersion >= RALINK_2883_VERSION && pAd->MACVersion < RALINK_3070_VERSION) +- pEntry->MaxHTPhyMode.field.TxBF = pAd->CommonCfg.RegTransmitSetting.field.TxBF; ++ if (pAd->MACVersion >= RALINK_2883_VERSION ++ && pAd->MACVersion < RALINK_3070_VERSION) ++ pEntry->MaxHTPhyMode.field.TxBF = ++ pAd->CommonCfg.RegTransmitSetting.field.TxBF; + + // find max fixed rate +- for (i=23; i>=0; i--) // 3*3 ++ for (i = 23; i >= 0; i--) // 3*3 + { +- j = i/8; +- bitmask = (1<<(i-(j*8))); +- if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) && (pHtCapability->MCSSet[j] & bitmask)) +- { ++ j = i / 8; ++ bitmask = (1 << (i - (j * 8))); ++ if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) ++ && (pHtCapability->MCSSet[j] & bitmask)) { + pEntry->MaxHTPhyMode.field.MCS = i; + break; + } +- if (i==0) ++ if (i == 0) + break; + } + +- +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) +- { +- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) +- { ++ if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) { ++ if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) { + // Fix MCS as HT Duplicated Mode + pEntry->MaxHTPhyMode.field.BW = 1; + pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; + pEntry->MaxHTPhyMode.field.STBC = 0; + pEntry->MaxHTPhyMode.field.ShortGI = 0; + pEntry->MaxHTPhyMode.field.MCS = 32; +- } +- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS) +- { ++ } else if (pEntry->MaxHTPhyMode.field.MCS > ++ pAd->StaCfg.HTPhyMode.field.MCS) { + // STA supports fixed MCS +- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; ++ pEntry->MaxHTPhyMode.field.MCS = ++ pAd->StaCfg.HTPhyMode.field.MCS; + } + } + +- pEntry->MaxHTPhyMode.field.STBC = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); ++ pEntry->MaxHTPhyMode.field.STBC = ++ (pHtCapability->HtCapInfo. ++ RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); + pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity; +- pEntry->MaxRAmpduFactor = pHtCapability->HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR)pHtCapability->HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR)pHtCapability->HtCapInfo.AMsduSize; ++ pEntry->MaxRAmpduFactor = ++ pHtCapability->HtCapParm.MaxRAmpduFactor; ++ pEntry->MmpsMode = (UCHAR) pHtCapability->HtCapInfo.MimoPs; ++ pEntry->AMsduSize = (UCHAR) pHtCapability->HtCapInfo.AMsduSize; + pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; + +- if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE)) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED); ++ if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable ++ && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE)) ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_AMSDU_INUSED); + if (pHtCapability->HtCapInfo.ShortGIfor20) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_SGI20_CAPABLE); + if (pHtCapability->HtCapInfo.ShortGIfor40) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_SGI40_CAPABLE); + if (pHtCapability->HtCapInfo.TxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_TxSTBC_CAPABLE); + if (pHtCapability->HtCapInfo.RxSTBC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_RxSTBC_CAPABLE); + if (pHtCapability->ExtHtCapInfo.PlusHTC) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); +- if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_HTC_CAPABLE); ++ if (pAd->CommonCfg.bRdg ++ && pHtCapability->ExtHtCapInfo.RDGSupport) ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_RDG_CAPABLE); + if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03) +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); +- NdisMoveMemory(&pEntry->HTCapability, pHtCapability, HtCapabilityLen); +- } +- else +- { ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); ++ NdisMoveMemory(&pEntry->HTCapability, pHtCapability, ++ HtCapabilityLen); ++ } else { + pAd->MacTab.fAnyStationIsLegacy = TRUE; + } + +@@ -1467,22 +1566,22 @@ BOOLEAN StaAddMacTableEntry( + pEntry->CurrTxRate = pEntry->MaxSupportedRate; + + // Set asic auto fall back +- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) +- { +- PUCHAR pTable; +- UCHAR TableSize = 0; ++ if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) { ++ PUCHAR pTable; ++ UCHAR TableSize = 0; + +- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex); ++ MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, ++ &pEntry->CurrTxRateIndex); + pEntry->bAutoTxRateSwitch = TRUE; +- } +- else +- { +- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; +- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; ++ } else { ++ pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE; ++ pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + pEntry->bAutoTxRateSwitch = FALSE; + + // If the legacy mode is set, overwrite the transmit setting of this entry. +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); ++ RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. ++ DesiredTransmitSetting.field. ++ FixedTxMode, pEntry); + } + + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +@@ -1493,14 +1592,14 @@ BOOLEAN StaAddMacTableEntry( + + NdisReleaseSpinLock(&pAd->MacTabLock); + +- { +- union iwreq_data wrqu; +- wext_notify_event_assoc(pAd); ++ { ++ union iwreq_data wrqu; ++ wext_notify_event_assoc(pAd); + +- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); +- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); +- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); ++ memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); ++ memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); ++ wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); + +- } ++ } + return TRUE; + } +diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c +index 7fb0760..8b75b46 100644 +--- a/drivers/staging/rt2860/sta/auth.c ++++ b/drivers/staging/rt2860/sta/auth.c +@@ -55,27 +55,35 @@ + ========================================================================== + */ + +-void AuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]) ++void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(Sm, Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_REQ_IDLE, AUTH_MACHINE_BASE); +- +- // the first column +- StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)MlmeAuthReqAction); +- +- // the second column +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq2Action); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction); +- +- // the third column +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenAuth); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, (STATE_MACHINE_FUNC)PeerAuthRspAtSeq4Action); +- StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, (STATE_MACHINE_FUNC)AuthTimeoutAction); +- +- RTMPInitTimer(pAd, &pAd->MlmeAux.AuthTimer, GET_TIMER_FUNCTION(AuthTimeout), pAd, FALSE); ++ StateMachineInit(Sm, Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, ++ (STATE_MACHINE_FUNC) Drop, AUTH_REQ_IDLE, ++ AUTH_MACHINE_BASE); ++ ++ // the first column ++ StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, ++ (STATE_MACHINE_FUNC) MlmeAuthReqAction); ++ ++ // the second column ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_AUTH_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenAuth); ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, ++ (STATE_MACHINE_FUNC) PeerAuthRspAtSeq2Action); ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, ++ (STATE_MACHINE_FUNC) AuthTimeoutAction); ++ ++ // the third column ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenAuth); ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, ++ (STATE_MACHINE_FUNC) PeerAuthRspAtSeq4Action); ++ StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_AUTH_TIMEOUT, ++ (STATE_MACHINE_FUNC) AuthTimeoutAction); ++ ++ RTMPInitTimer(pAd, &pAd->MlmeAux.AuthTimer, ++ GET_TIMER_FUNCTION(AuthTimeout), pAd, FALSE); + } + + /* +@@ -87,31 +95,28 @@ void AuthStateMachineInit( + + ========================================================================== + */ +-VOID AuthTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID AuthTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- DBGPRINT(RT_DEBUG_TRACE,("AUTH - AuthTimeout\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeout\n")); + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) ++ if (RTMP_TEST_FLAG ++ (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + // send a de-auth to reset AP's state machine (Patch AP-Dir635) + if (pAd->Mlme.AuthMachine.CurrState == AUTH_WAIT_SEQ2) + Cls2errAction(pAd, pAd->MlmeAux.Bssid); + +- +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL); +- RTMP_MLME_HANDLER(pAd); ++ MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_AUTH_TIMEOUT, 0, NULL); ++ RTMP_MLME_HANDLER(pAd); + } + +- + /* + ========================================================================== + Description: +@@ -120,20 +125,19 @@ VOID AuthTimeout( + + ========================================================================== + */ +-VOID MlmeAuthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- if (AUTH_ReqSend(pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) +- pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2; +- else +- { ++ if (AUTH_ReqSend ++ (pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) ++ pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2; ++ else { + USHORT Status; + +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_INVALID_FORMAT; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, ++ &Status); ++ } + } + + /* +@@ -144,101 +148,130 @@ VOID MlmeAuthReqAction( + + ========================================================================== + */ +-VOID PeerAuthRspAtSeq2Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Seq, Status, RemoteStatus, Alg; +- UCHAR ChlgText[CIPHER_TEXT_LEN]; +- UCHAR CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; +- UCHAR Element[2]; +- HEADER_802_11 AuthHdr; +- BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status2; +- +- if (PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, (PCHAR)ChlgText)) +- { +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 2) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", Alg, Status)); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &TimerCancelled); +- +- if (Status == MLME_SUCCESS) +- { +- // Authentication Mode "LEAP" has allow for CCX 1.X +- if (pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) +- { +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- else +- { +- // 2. shared key, need to be challenged +- Seq++; +- RemoteStatus = MLME_SUCCESS; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ USHORT Seq, Status, RemoteStatus, Alg; ++ UCHAR ChlgText[CIPHER_TEXT_LEN]; ++ UCHAR CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; ++ UCHAR Element[2]; ++ HEADER_802_11 AuthHdr; ++ BOOLEAN TimerCancelled; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ USHORT Status2; ++ ++ if (PeerAuthSanity ++ (pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ++ (PCHAR) ChlgText)) { ++ if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 2) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", ++ Alg, Status)); ++ RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, ++ &TimerCancelled); ++ ++ if (Status == MLME_SUCCESS) { ++ // Authentication Mode "LEAP" has allow for CCX 1.X ++ if (pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) { ++ pAd->Mlme.AuthMachine.CurrState = ++ AUTH_REQ_IDLE; ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ MT2_AUTH_CONF, 2, &Status); ++ } else { ++ // 2. shared key, need to be challenged ++ Seq++; ++ RemoteStatus = MLME_SUCCESS; + + // Get an unused nonpaged memory +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthRspAtSeq2Action() allocate memory fail\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status2 = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status2); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Send AUTH request seq#3...\n")); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr2, pAd->MlmeAux.Bssid); +- AuthHdr.FC.Wep = 1; +- // Encrypt challenge text & auth information +- RTMPInitWepEngine( +- pAd, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, +- pAd->StaCfg.DefaultKeyId, +- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen, +- CyperChlgText); +- +- Alg = cpu2le16(*(USHORT *)&Alg); +- Seq = cpu2le16(*(USHORT *)&Seq); +- RemoteStatus= cpu2le16(*(USHORT *)&RemoteStatus); +- +- RTMPEncryptData(pAd, (PUCHAR) &Alg, CyperChlgText + 4, 2); +- RTMPEncryptData(pAd, (PUCHAR) &Seq, CyperChlgText + 6, 2); +- RTMPEncryptData(pAd, (PUCHAR) &RemoteStatus, CyperChlgText + 8, 2); ++ NStatus = ++ MlmeAllocateMemory(pAd, ++ &pOutBuffer); ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - PeerAuthRspAtSeq2Action() allocate memory fail\n")); ++ pAd->Mlme.AuthMachine. ++ CurrState = AUTH_REQ_IDLE; ++ Status2 = MLME_FAIL_NO_RESOURCE; ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ MT2_AUTH_CONF, 2, ++ &Status2); ++ return; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - Send AUTH request seq#3...\n")); ++ MgtMacHeaderInit(pAd, &AuthHdr, ++ SUBTYPE_AUTH, 0, Addr2, ++ pAd->MlmeAux.Bssid); ++ AuthHdr.FC.Wep = 1; ++ // Encrypt challenge text & auth information ++ RTMPInitWepEngine(pAd, ++ pAd-> ++ SharedKey[BSS0][pAd-> ++ StaCfg. ++ DefaultKeyId]. ++ Key, ++ pAd->StaCfg. ++ DefaultKeyId, ++ pAd-> ++ SharedKey[BSS0][pAd-> ++ StaCfg. ++ DefaultKeyId]. ++ KeyLen, ++ CyperChlgText); ++ ++ Alg = cpu2le16(*(USHORT *) & Alg); ++ Seq = cpu2le16(*(USHORT *) & Seq); ++ RemoteStatus = ++ cpu2le16(*(USHORT *) & ++ RemoteStatus); ++ ++ RTMPEncryptData(pAd, (PUCHAR) & Alg, ++ CyperChlgText + 4, 2); ++ RTMPEncryptData(pAd, (PUCHAR) & Seq, ++ CyperChlgText + 6, 2); ++ RTMPEncryptData(pAd, ++ (PUCHAR) & RemoteStatus, ++ CyperChlgText + 8, 2); + Element[0] = 16; + Element[1] = 128; +- RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2); +- RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128); ++ RTMPEncryptData(pAd, Element, ++ CyperChlgText + 10, 2); ++ RTMPEncryptData(pAd, ChlgText, ++ CyperChlgText + 12, ++ 128); + RTMPSetICV(pAd, CyperChlgText + 140); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AuthHdr, +- CIPHER_TEXT_LEN + 16, CyperChlgText, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); +- +- RTMPSetTimer(&pAd->MlmeAux.AuthTimer, AUTH_TIMEOUT); +- pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4; +- } +- } +- else +- { +- pAd->StaCfg.AuthFailReason = Status; +- COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthSanity() sanity check fail\n")); +- } ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), ++ &AuthHdr, ++ CIPHER_TEXT_LEN + 16, ++ CyperChlgText, ++ END_OF_ARGS); ++ MiniportMMRequest(pAd, 0, pOutBuffer, ++ FrameLen); ++ MlmeFreeMemory(pAd, pOutBuffer); ++ ++ RTMPSetTimer(&pAd->MlmeAux.AuthTimer, ++ AUTH_TIMEOUT); ++ pAd->Mlme.AuthMachine.CurrState = ++ AUTH_WAIT_SEQ4; ++ } ++ } else { ++ pAd->StaCfg.AuthFailReason = Status; ++ COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, ++ MT2_AUTH_CONF, 2, &Status); ++ } ++ } ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - PeerAuthSanity() sanity check fail\n")); ++ } + } + + /* +@@ -249,36 +282,35 @@ VOID PeerAuthRspAtSeq2Action( + + ========================================================================== + */ +-VOID PeerAuthRspAtSeq4Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Alg, Seq, Status; +- CHAR ChlgText[CIPHER_TEXT_LEN]; +- BOOLEAN TimerCancelled; +- +- if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ChlgText)) +- { +- if(MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 4) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Receive AUTH_RSP seq#4 to me\n")); +- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &TimerCancelled); +- +- if (Status != MLME_SUCCESS) +- { +- pAd->StaCfg.AuthFailReason = Status; +- COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); +- } +- +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - PeerAuthRspAtSeq4Action() sanity check fail\n")); +- } ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ USHORT Alg, Seq, Status; ++ CHAR ChlgText[CIPHER_TEXT_LEN]; ++ BOOLEAN TimerCancelled; ++ ++ if (PeerAuthSanity ++ (pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, ++ ChlgText)) { ++ if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 4) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - Receive AUTH_RSP seq#4 to me\n")); ++ RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, ++ &TimerCancelled); ++ ++ if (Status != MLME_SUCCESS) { ++ pAd->StaCfg.AuthFailReason = Status; ++ COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2); ++ } ++ ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, ++ 2, &Status); ++ } ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - PeerAuthRspAtSeq4Action() sanity check fail\n")); ++ } + } + + /* +@@ -289,47 +321,49 @@ VOID PeerAuthRspAtSeq4Action( + + ========================================================================== + */ +-VOID MlmeDeauthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MLME_DEAUTH_REQ_STRUCT *pInfo; +- HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status; +- +- pInfo = (MLME_DEAUTH_REQ_STRUCT *)Elem->Msg; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - MlmeDeauthReqAction() allocate memory fail\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); +- return; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Send DE-AUTH request (Reason=%d)...\n", pInfo->Reason)); +- MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pInfo->Addr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DeauthHdr, +- 2, &pInfo->Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); ++ MLME_DEAUTH_REQ_STRUCT *pInfo; ++ HEADER_802_11 DeauthHdr; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ USHORT Status; ++ ++ pInfo = (MLME_DEAUTH_REQ_STRUCT *) Elem->Msg; ++ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - MlmeDeauthReqAction() allocate memory fail\n")); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_FAIL_NO_RESOURCE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, ++ &Status); ++ return; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - Send DE-AUTH request (Reason=%d)...\n", ++ pInfo->Reason)); ++ MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pInfo->Addr, ++ pAd->MlmeAux.Bssid); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ &DeauthHdr, 2, &pInfo->Reason, END_OF_ARGS); ++ MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +- pAd->StaCfg.DeauthReason = pInfo->Reason; +- COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pInfo->Addr); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); ++ pAd->StaCfg.DeauthReason = pInfo->Reason; ++ COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pInfo->Addr); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_SUCCESS; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); + + // send wireless event - for deauthentication + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID].Addr, ++ BSS0, 0); + } + + /* +@@ -340,15 +374,13 @@ VOID MlmeDeauthReqAction( + + ========================================================================== + */ +-VOID AuthTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeoutAction\n")); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_REJ_TIMEOUT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); ++ USHORT Status; ++ DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeoutAction\n")); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_REJ_TIMEOUT; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); + } + + /* +@@ -359,15 +391,15 @@ VOID AuthTimeoutAction( + + ========================================================================== + */ +-VOID InvalidStateWhenAuth( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - InvalidStateWhenAuth (state=%ld), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); ++ USHORT Status; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - InvalidStateWhenAuth (state=%ld), reset AUTH state machine\n", ++ pAd->Mlme.AuthMachine.CurrState)); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_STATE_MACHINE_REJECT; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); + } + + /* +@@ -382,109 +414,104 @@ VOID InvalidStateWhenAuth( + + ========================================================================== + */ +-VOID Cls2errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr) ++VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) + { +- HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Reason = REASON_CLS2ERR; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("AUTH - Class 2 error, Send DEAUTH frame...\n")); +- MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pAddr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&DeauthHdr, +- 2, &Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); ++ HEADER_802_11 DeauthHdr; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ USHORT Reason = REASON_CLS2ERR; ++ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH - Class 2 error, Send DEAUTH frame...\n")); ++ MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pAddr, ++ pAd->MlmeAux.Bssid); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ &DeauthHdr, 2, &Reason, END_OF_ARGS); ++ MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +- pAd->StaCfg.DeauthReason = Reason; +- COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pAddr); ++ pAd->StaCfg.DeauthReason = Reason; ++ COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pAddr); + } + +-BOOLEAN AUTH_ReqSend( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, +- IN ULONG ElementLen) ++BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, ++ IN PMLME_QUEUE_ELEM pElem, ++ IN PRALINK_TIMER_STRUCT pAuthTimer, ++ IN PSTRING pSMName, ++ IN USHORT SeqNo, ++ IN PUCHAR pNewElement, IN ULONG ElementLen) + { +- USHORT Alg, Seq, Status; +- UCHAR Addr[6]; +- ULONG Timeout; +- HEADER_802_11 AuthHdr; +- BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0, tmp = 0; ++ USHORT Alg, Seq, Status; ++ UCHAR Addr[6]; ++ ULONG Timeout; ++ HEADER_802_11 AuthHdr; ++ BOOLEAN TimerCancelled; ++ NDIS_STATUS NStatus; ++ PUCHAR pOutBuffer = NULL; ++ ULONG FrameLen = 0, tmp = 0; + + // Block all authentication request durning WPA block period +- if (pAd->StaCfg.bBlockAssoc == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s - Block Auth request durning WPA block period!\n", pSMName)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_STATE_MACHINE_REJECT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- } +- else if(MlmeAuthReqSanity(pAd, pElem->Msg, pElem->MsgLen, Addr, &Timeout, &Alg)) +- { +- /* reset timer */ ++ if (pAd->StaCfg.bBlockAssoc == TRUE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s - Block Auth request durning WPA block period!\n", ++ pSMName)); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_STATE_MACHINE_REJECT; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, ++ &Status); ++ } else ++ if (MlmeAuthReqSanity ++ (pAd, pElem->Msg, pElem->MsgLen, Addr, &Timeout, &Alg)) { ++ /* reset timer */ + RTMPCancelTimer(pAuthTimer, &TimerCancelled); + +- COPY_MAC_ADDR(pAd->MlmeAux.Bssid, Addr); +- pAd->MlmeAux.Alg = Alg; +- Seq = SeqNo; +- Status = MLME_SUCCESS; +- +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if(NStatus != NDIS_STATUS_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("%s - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", pSMName, Alg)); +- pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +- Status = MLME_FAIL_NO_RESOURCE; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status); +- return FALSE; +- } +- +- DBGPRINT(RT_DEBUG_TRACE, ("%s - Send AUTH request seq#1 (Alg=%d)...\n", pSMName, Alg)); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11),&AuthHdr, +- 2, &Alg, +- 2, &Seq, +- 2, &Status, +- END_OF_ARGS); +- +- if (pNewElement && ElementLen) +- { +- MakeOutgoingFrame(pOutBuffer+FrameLen, &tmp, +- ElementLen, pNewElement, ++ COPY_MAC_ADDR(pAd->MlmeAux.Bssid, Addr); ++ pAd->MlmeAux.Alg = Alg; ++ Seq = SeqNo; ++ Status = MLME_SUCCESS; ++ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NStatus != NDIS_STATUS_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", ++ pSMName, Alg)); ++ pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; ++ Status = MLME_FAIL_NO_RESOURCE; ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, ++ 2, &Status); ++ return FALSE; ++ } ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s - Send AUTH request seq#1 (Alg=%d)...\n", pSMName, ++ Alg)); ++ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, ++ pAd->MlmeAux.Bssid); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ &AuthHdr, 2, &Alg, 2, &Seq, 2, &Status, + END_OF_ARGS); ++ ++ if (pNewElement && ElementLen) { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ ElementLen, pNewElement, END_OF_ARGS); + FrameLen += tmp; + } + +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +- MlmeFreeMemory(pAd, pOutBuffer); ++ MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); ++ MlmeFreeMemory(pAd, pOutBuffer); + + RTMPSetTimer(pAuthTimer, Timeout); + return TRUE; +- } +- else +- { +- DBGPRINT_ERR(("%s - MlmeAuthReqAction() sanity check failed\n", pSMName)); ++ } else { ++ DBGPRINT_ERR(("%s - MlmeAuthReqAction() sanity check failed\n", ++ pSMName)); + return FALSE; +- } ++ } + + return TRUE; + } +- +- +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index 9c2fde4..3f383c5 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -47,18 +47,21 @@ + + ========================================================================== + */ +-VOID AuthRspStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, +- IN STATE_MACHINE_FUNC Trans[]) ++VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN PSTATE_MACHINE Sm, ++ IN STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(Sm, Trans, MAX_AUTH_RSP_STATE, MAX_AUTH_RSP_MSG, (STATE_MACHINE_FUNC)Drop, AUTH_RSP_IDLE, AUTH_RSP_MACHINE_BASE); ++ StateMachineInit(Sm, Trans, MAX_AUTH_RSP_STATE, MAX_AUTH_RSP_MSG, ++ (STATE_MACHINE_FUNC) Drop, AUTH_RSP_IDLE, ++ AUTH_RSP_MACHINE_BASE); + +- // column 1 +- StateMachineSetAction(Sm, AUTH_RSP_IDLE, MT2_PEER_DEAUTH, (STATE_MACHINE_FUNC)PeerDeauthAction); ++ // column 1 ++ StateMachineSetAction(Sm, AUTH_RSP_IDLE, MT2_PEER_DEAUTH, ++ (STATE_MACHINE_FUNC) PeerDeauthAction); + +- // column 2 +- StateMachineSetAction(Sm, AUTH_RSP_WAIT_CHAL, MT2_PEER_DEAUTH, (STATE_MACHINE_FUNC)PeerDeauthAction); ++ // column 2 ++ StateMachineSetAction(Sm, AUTH_RSP_WAIT_CHAL, MT2_PEER_DEAUTH, ++ (STATE_MACHINE_FUNC) PeerDeauthAction); + + } + +@@ -70,39 +73,32 @@ VOID AuthRspStateMachineInit( + + ========================================================================== + */ +-VOID PeerAuthSimpleRspGenAndSend( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, +- IN USHORT Status) ++VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHdr80211, ++ IN USHORT Alg, ++ IN USHORT Seq, ++ IN USHORT Reason, IN USHORT Status) + { +- HEADER_802_11 AuthHdr; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- +- if (Reason != MLME_SUCCESS) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n")); +- return; +- } +- ++ HEADER_802_11 AuthHdr; ++ ULONG FrameLen = 0; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; ++ ++ if (Reason != MLME_SUCCESS) { ++ DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n")); ++ return; ++ } + //Get an unused nonpaged memory +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus != NDIS_STATUS_SUCCESS) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE, ("Send AUTH response (seq#2)...\n")); +- MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, pHdr80211->Addr2, pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AuthHdr, +- 2, &Alg, +- 2, &Seq, +- 2, &Reason, +- END_OF_ARGS); +- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); ++ if (NStatus != NDIS_STATUS_SUCCESS) ++ return; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ("Send AUTH response (seq#2)...\n")); ++ MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, pHdr80211->Addr2, ++ pAd->MlmeAux.Bssid); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ &AuthHdr, 2, &Alg, 2, &Seq, 2, &Reason, END_OF_ARGS); ++ MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } + +@@ -114,35 +110,33 @@ VOID PeerAuthSimpleRspGenAndSend( + + ========================================================================== + */ +-VOID PeerDeauthAction( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM Elem) ++VOID PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; +- +- if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) +- { +- if (INFRA_ON(pAd) +- && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason)); ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ USHORT Reason; + ++ if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) { ++ if (INFRA_ON(pAd) ++ && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid) ++ ) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", ++ Reason)); + +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +- ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, ++ 0); + + // send wireless event - for deauthentication + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- LinkDown(pAd, TRUE); +- } +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - PeerDeauthAction() sanity check fail\n")); +- } ++ RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); ++ ++ LinkDown(pAd, TRUE); ++ } ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AUTH_RSP - PeerDeauthAction() sanity check fail\n")); ++ } + } +- +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 43edd8e..dc8b2d5 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -36,27 +36,31 @@ + */ + #include "../rt_config.h" + +-UCHAR CipherSuiteWpaNoneTkip[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication +- }; +-UCHAR CipherSuiteWpaNoneTkipLen = (sizeof(CipherSuiteWpaNoneTkip) / sizeof(UCHAR)); +- +-UCHAR CipherSuiteWpaNoneAes[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x04, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x04, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication +- }; +-UCHAR CipherSuiteWpaNoneAesLen = (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)); ++UCHAR CipherSuiteWpaNoneTkip[] = { ++ 0x00, 0x50, 0xf2, 0x01, // oui ++ 0x01, 0x00, // Version ++ 0x00, 0x50, 0xf2, 0x02, // Multicast ++ 0x01, 0x00, // Number of unicast ++ 0x00, 0x50, 0xf2, 0x02, // unicast ++ 0x01, 0x00, // number of authentication method ++ 0x00, 0x50, 0xf2, 0x00 // authentication ++}; ++ ++UCHAR CipherSuiteWpaNoneTkipLen = ++ (sizeof(CipherSuiteWpaNoneTkip) / sizeof(UCHAR)); ++ ++UCHAR CipherSuiteWpaNoneAes[] = { ++ 0x00, 0x50, 0xf2, 0x01, // oui ++ 0x01, 0x00, // Version ++ 0x00, 0x50, 0xf2, 0x04, // Multicast ++ 0x01, 0x00, // Number of unicast ++ 0x00, 0x50, 0xf2, 0x04, // unicast ++ 0x01, 0x00, // number of authentication method ++ 0x00, 0x50, 0xf2, 0x00 // authentication ++}; ++ ++UCHAR CipherSuiteWpaNoneAesLen = ++ (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)); + + // The following MACRO is called after 1. starting an new IBSS, 2. succesfully JOIN an IBSS, + // or 3. succesfully ASSOCIATE to a BSS, 4. successfully RE_ASSOCIATE to a BSS +@@ -98,10 +102,8 @@ UCHAR CipherSuiteWpaNoneAesLen = (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)) + + ========================================================================== + */ +-VOID MlmeCntlInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]) ++VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { + // Control state machine differs from other state machines, the interface + // follows the standard interface +@@ -116,22 +118,20 @@ VOID MlmeCntlInit( + + ========================================================================== + */ +-VOID MlmeCntlMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, ++ IN MLME_QUEUE_ELEM * Elem) + { +- switch(pAd->Mlme.CntlMachine.CurrState) +- { +- case CNTL_IDLE: +- CntlIdleProc(pAd, Elem); +- break; +- case CNTL_WAIT_DISASSOC: +- CntlWaitDisassocProc(pAd, Elem); +- break; +- case CNTL_WAIT_JOIN: +- CntlWaitJoinProc(pAd, Elem); +- break; ++ switch (pAd->Mlme.CntlMachine.CurrState) { ++ case CNTL_IDLE: ++ CntlIdleProc(pAd, Elem); ++ break; ++ case CNTL_WAIT_DISASSOC: ++ CntlWaitDisassocProc(pAd, Elem); ++ break; ++ case CNTL_WAIT_JOIN: ++ CntlWaitJoinProc(pAd, Elem); ++ break; + + // CNTL_WAIT_REASSOC is the only state in CNTL machine that does + // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)". +@@ -139,89 +139,87 @@ VOID MlmeCntlMachinePerformAction( + // rule. Which means NDIS may SET OID in the middle of ROAMing attempts. + // Current approach is to block new SET request at RTMPSetInformation() + // when CntlMachine.CurrState is not CNTL_IDLE +- case CNTL_WAIT_REASSOC: +- CntlWaitReassocProc(pAd, Elem); +- break; +- +- case CNTL_WAIT_START: +- CntlWaitStartProc(pAd, Elem); +- break; +- case CNTL_WAIT_AUTH: +- CntlWaitAuthProc(pAd, Elem); +- break; +- case CNTL_WAIT_AUTH2: +- CntlWaitAuthProc2(pAd, Elem); +- break; +- case CNTL_WAIT_ASSOC: +- CntlWaitAssocProc(pAd, Elem); +- break; ++ case CNTL_WAIT_REASSOC: ++ CntlWaitReassocProc(pAd, Elem); ++ break; ++ ++ case CNTL_WAIT_START: ++ CntlWaitStartProc(pAd, Elem); ++ break; ++ case CNTL_WAIT_AUTH: ++ CntlWaitAuthProc(pAd, Elem); ++ break; ++ case CNTL_WAIT_AUTH2: ++ CntlWaitAuthProc2(pAd, Elem); ++ break; ++ case CNTL_WAIT_ASSOC: ++ CntlWaitAssocProc(pAd, Elem); ++ break; ++ ++ case CNTL_WAIT_OID_LIST_SCAN: ++ if (Elem->MsgType == MT2_SCAN_CONF) { ++ // Resume TxRing after SCANING complete. We hope the out-of-service time ++ // won't be too long to let upper layer time-out the waiting frames ++ RTMPResumeMsduTransmission(pAd); + +- case CNTL_WAIT_OID_LIST_SCAN: +- if(Elem->MsgType == MT2_SCAN_CONF) +- { +- // Resume TxRing after SCANING complete. We hope the out-of-service time +- // won't be too long to let upper layer time-out the waiting frames +- RTMPResumeMsduTransmission(pAd); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +- // +- // Set LED status to previous status. +- // +- if (pAd->bLedOnScanning) +- { +- pAd->bLedOnScanning = FALSE; +- RTMPSetLED(pAd, pAd->LedStatus); +- } ++ // ++ // Set LED status to previous status. ++ // ++ if (pAd->bLedOnScanning) { ++ pAd->bLedOnScanning = FALSE; ++ RTMPSetLED(pAd, pAd->LedStatus); + } +- break; ++ } ++ break; + +- case CNTL_WAIT_OID_DISASSOC: +- if (Elem->MsgType == MT2_DISASSOC_CONF) +- { +- LinkDown(pAd, FALSE); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- } +- break; ++ case CNTL_WAIT_OID_DISASSOC: ++ if (Elem->MsgType == MT2_DISASSOC_CONF) { ++ LinkDown(pAd, FALSE); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ } ++ break; + #ifdef RTMP_MAC_USB + // + // This state is for that we want to connect to an AP but + // it didn't find on BSS List table. So we need to scan the air first, + // after that we can try to connect to the desired AP if available. + // +- case CNTL_WAIT_SCAN_FOR_CONNECT: +- if(Elem->MsgType == MT2_SCAN_CONF) +- { +- // Resume TxRing after SCANING complete. We hope the out-of-service time +- // won't be too long to let upper layer time-out the waiting frames +- RTMPResumeMsduTransmission(pAd); ++ case CNTL_WAIT_SCAN_FOR_CONNECT: ++ if (Elem->MsgType == MT2_SCAN_CONF) { ++ // Resume TxRing after SCANING complete. We hope the out-of-service time ++ // won't be too long to let upper layer time-out the waiting frames ++ RTMPResumeMsduTransmission(pAd); + #ifdef CCX_SUPPORT +- if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) +- { +- // Cisco scan request is finished, prepare beacon report +- MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_DONE, 0, NULL); +- } ++ if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) { ++ // Cisco scan request is finished, prepare beacon report ++ MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, ++ MT2_AIRONET_SCAN_DONE, 0, NULL); ++ } + #endif // CCX_SUPPORT // +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +- // +- // Check if we can connect to. +- // +- BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, (CHAR *) pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- if (pAd->MlmeAux.SsidBssTab.BssNr > 0) +- { +- MlmeAutoReconnectLastSSID(pAd); +- } ++ // ++ // Check if we can connect to. ++ // ++ BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, ++ (CHAR *) pAd->MlmeAux. ++ AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen); ++ if (pAd->MlmeAux.SsidBssTab.BssNr > 0) { ++ MlmeAutoReconnectLastSSID(pAd); + } +- break; ++ } ++ break; + #endif // RTMP_MAC_USB // +- default: +- DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", Elem->MsgType)); +- break; ++ default: ++ DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", ++ Elem->MsgType)); ++ break; + } + } + +- + /* + ========================================================================== + Description: +@@ -230,94 +228,95 @@ VOID MlmeCntlMachinePerformAction( + + ========================================================================== + */ +-VOID CntlIdleProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; + +- switch(Elem->MsgType) +- { +- case OID_802_11_SSID: +- CntlOidSsidProc(pAd, Elem); +- break; ++ switch (Elem->MsgType) { ++ case OID_802_11_SSID: ++ CntlOidSsidProc(pAd, Elem); ++ break; + +- case OID_802_11_BSSID: +- CntlOidRTBssidProc(pAd,Elem); +- break; ++ case OID_802_11_BSSID: ++ CntlOidRTBssidProc(pAd, Elem); ++ break; + +- case OID_802_11_BSSID_LIST_SCAN: +- CntlOidScanProc(pAd,Elem); +- break; ++ case OID_802_11_BSSID_LIST_SCAN: ++ CntlOidScanProc(pAd, Elem); ++ break; + +- case OID_802_11_DISASSOCIATE: +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; +- +- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE_WITH_WEB_UI) +- { +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. +- pAd->MlmeAux.AutoReconnectSsidLen= 32; +- NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); +- } +- break; ++ case OID_802_11_DISASSOCIATE: ++ DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; ++ ++ if (pAd->StaCfg.WpaSupplicantUP != ++ WPA_SUPPLICANT_ENABLE_WITH_WEB_UI) { ++ // Set the AutoReconnectSsid to prevent it reconnect to old SSID ++ // Since calling this indicate user don't want to connect to that SSID anymore. ++ pAd->MlmeAux.AutoReconnectSsidLen = 32; ++ NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, ++ pAd->MlmeAux.AutoReconnectSsidLen); ++ } ++ break; + +- case MT2_MLME_ROAMING_REQ: +- CntlMlmeRoamingProc(pAd, Elem); +- break; ++ case MT2_MLME_ROAMING_REQ: ++ CntlMlmeRoamingProc(pAd, Elem); ++ break; + +- case OID_802_11_MIC_FAILURE_REPORT_FRAME: +- WpaMicFailureReportFrame(pAd, Elem); +- break; ++ case OID_802_11_MIC_FAILURE_REPORT_FRAME: ++ WpaMicFailureReportFrame(pAd, Elem); ++ break; + +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Illegal message in CntlIdleProc(MsgType=%ld)\n",Elem->MsgType)); +- break; ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Illegal message in CntlIdleProc(MsgType=%ld)\n", ++ Elem->MsgType)); ++ break; + } + } + +-VOID CntlOidScanProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MLME_SCAN_REQ_STRUCT ScanReq; +- ULONG BssIdx = BSS_NOT_FOUND; +- BSS_ENTRY CurrBss; +- +- ++ MLME_SCAN_REQ_STRUCT ScanReq; ++ ULONG BssIdx = BSS_NOT_FOUND; ++ BSS_ENTRY CurrBss; + + // record current BSS if network is connected. + // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- BssIdx = BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, (PUCHAR)pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->CommonCfg.Channel); +- if (BssIdx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(&CurrBss, &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ BssIdx = ++ BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, ++ (PUCHAR) pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.Channel); ++ if (BssIdx != BSS_NOT_FOUND) { ++ NdisMoveMemory(&CurrBss, &pAd->ScanTab.BssEntry[BssIdx], ++ sizeof(BSS_ENTRY)); + } + } +- + // clean up previous SCAN result, add current BSS back to table if any + BssTableInit(&pAd->ScanTab); +- if (BssIdx != BSS_NOT_FOUND) +- { ++ if (BssIdx != BSS_NOT_FOUND) { + // DDK Note: If the NIC is associated with a particular BSSID and SSID + // that are not contained in the list of BSSIDs generated by this scan, the + // BSSID description of the currently associated BSSID and SSID should be + // appended to the list of BSSIDs in the NIC's database. + // To ensure this, we append this BSS as the first entry in SCAN result +- NdisMoveMemory(&pAd->ScanTab.BssEntry[0], &CurrBss, sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[0], &CurrBss, ++ sizeof(BSS_ENTRY)); + pAd->ScanTab.BssNr = 1; + } + +- ScanParmFill(pAd, &ScanReq, (PSTRING) Elem->Msg, Elem->MsgLen, BSS_ANY, SCAN_ACTIVE); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) Elem->Msg, Elem->MsgLen, BSS_ANY, ++ SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +- sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; + } + +@@ -330,19 +329,16 @@ VOID CntlOidScanProc( + + ========================================================================== + */ +-VOID CntlOidSsidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- PNDIS_802_11_SSID pOidSsid = (NDIS_802_11_SSID *)Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- ULONG Now; +- ++ PNDIS_802_11_SSID pOidSsid = (NDIS_802_11_SSID *) Elem->Msg; ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ ULONG Now; + + // Step 1. record the desired user settings to MlmeAux + NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pOidSsid->Ssid, pOidSsid->SsidLength); +- pAd->MlmeAux.SsidLen = (UCHAR)pOidSsid->SsidLength; ++ pAd->MlmeAux.SsidLen = (UCHAR) pOidSsid->SsidLength; + NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN); + pAd->MlmeAux.BssType = pAd->StaCfg.BssType; + +@@ -352,83 +348,97 @@ VOID CntlOidSsidProc( + // Update Reconnect Ssid, that user desired to connect. + // + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen); + pAd->MlmeAux.AutoReconnectSsidLen = pAd->MlmeAux.SsidLen; + + // step 2. find all matching BSS in the lastest SCAN result (inBssTab) + // & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order +- BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, ++ (PCHAR) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - %d BSS of %d BSS match the desire (%d)SSID - %s\n", +- pAd->MlmeAux.SsidBssTab.BssNr, pAd->ScanTab.BssNr, pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - %d BSS of %d BSS match the desire (%d)SSID - %s\n", ++ pAd->MlmeAux.SsidBssTab.BssNr, pAd->ScanTab.BssNr, ++ pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid)); + NdisGetSystemUpTime(&Now); + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && +- (pAd->CommonCfg.SsidLen == pAd->MlmeAux.SsidBssTab.BssEntry[0].SsidLen) && +- NdisEqualMemory(pAd->CommonCfg.Ssid, pAd->MlmeAux.SsidBssTab.BssEntry[0].Ssid, pAd->CommonCfg.SsidLen) && +- MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, pAd->MlmeAux.SsidBssTab.BssEntry[0].Bssid)) +- { ++ (pAd->CommonCfg.SsidLen == ++ pAd->MlmeAux.SsidBssTab.BssEntry[0].SsidLen) ++ && NdisEqualMemory(pAd->CommonCfg.Ssid, ++ pAd->MlmeAux.SsidBssTab.BssEntry[0].Ssid, ++ pAd->CommonCfg.SsidLen) ++ && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, ++ pAd->MlmeAux.SsidBssTab.BssEntry[0].Bssid)) { + // Case 1. already connected with an AP who has the desired SSID + // with highest RSSI + + // Add checking Mode "LEAP" for CCX 1.0 + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- ) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ++ ) && ++ (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) { + // case 1.1 For WPA, WPA-PSK, if the 1x port is not secured, we have to redo + // connection process +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); ++ DisassocParmFill(pAd, &DisassocReq, ++ pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), ++ &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else if (pAd->bConfigChanged == TRUE) +- { ++ } else if (pAd->bConfigChanged == TRUE) { + // case 1.2 Important Config has changed, we have to reconnect to the same AP +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP Because config changed...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - disassociate with current AP Because config changed...\n")); ++ DisassocParmFill(pAd, &DisassocReq, ++ pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), ++ &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { ++ } else { + // case 1.3. already connected to the SSID with highest RSSI. +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - already with this BSSID. ignore this SET_SSID request\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - already with this BSSID. ignore this SET_SSID request\n")); + // + // (HCT 12.1) 1c_wlan_mediaevents required + // media connect events are indicated when associating with the same AP + // +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + // + // Since MediaState already is NdisMediaStateConnected + // We just indicate the connect event again to meet the WHQL required. + // +- pAd->IndicateMediaState = NdisMediaStateConnected; ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up ++ pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up + } + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, &pAd->MlmeAux.Bssid[0], NULL, 0); ++ RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, ++ &pAd->MlmeAux.Bssid[0], NULL, ++ 0); + } +- } +- else if (INFRA_ON(pAd)) +- { ++ } else if (INFRA_ON(pAd)) { + // + // For RT61 + // [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) + // RT61 may lost SSID, and not connect to NDTEST_WEP_AP2 and will connect to NDTEST_WEP_AP2 by Autoreconnect + // But media status is connected, so the SSID not report correctly. + // +- if (!SSID_EQUAL(pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen)) +- { ++ if (!SSID_EQUAL ++ (pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, ++ pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen)) { + // + // Different SSID means not Roaming case, so we let LinkDown() to Indicate a disconnect event. + // +@@ -440,49 +450,53 @@ VOID CntlOidSsidProc( + // disassociate with the current associated AP, + // then perform a new association with this new SSID, no matter the + // new/old SSID are the same or not. +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); ++ DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { +- if (ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - drop current ADHOC\n")); ++ } else { ++ if (ADHOC_ON(pAd)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - drop current ADHOC\n")); + LinkDown(pAd, FALSE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); ++ OPSTATUS_CLEAR_FLAG(pAd, ++ fOP_STATUS_MEDIA_STATE_CONNECTED); + pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); + } + + if ((pAd->MlmeAux.SsidBssTab.BssNr == 0) && +- (pAd->StaCfg.bAutoReconnect == TRUE) && +- (pAd->MlmeAux.BssType == BSS_INFRA) && +- (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) == TRUE) +- ) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; +- +- DBGPRINT(RT_DEBUG_TRACE, ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; ++ (pAd->StaCfg.bAutoReconnect == TRUE) && ++ (pAd->MlmeAux.BssType == BSS_INFRA) && ++ (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) ++ == TRUE) ++ ) { ++ MLME_SCAN_REQ_STRUCT ScanReq; ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen, BSS_ANY, ++ SCAN_ACTIVE); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, ++ sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_OID_LIST_SCAN; + // Reset Missed scan number + pAd->StaCfg.LastScanTime = Now; +- } +- else +- { ++ } else { + pAd->MlmeAux.BssIdx = 0; + IterateOnBssTab(pAd); + } + } + } + +- + /* + ========================================================================== + Description: +@@ -491,14 +505,12 @@ VOID CntlOidSsidProc( + + ========================================================================== + */ +-VOID CntlOidRTBssidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- ULONG BssIdx; +- PUCHAR pOidBssid = (PUCHAR)Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- MLME_JOIN_REQ_STRUCT JoinReq; ++ ULONG BssIdx; ++ PUCHAR pOidBssid = (PUCHAR) Elem->Msg; ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ MLME_JOIN_REQ_STRUCT JoinReq; + + // record user desired settings + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid); +@@ -506,110 +518,149 @@ VOID CntlOidRTBssidProc( + + // find the desired BSS in the latest SCAN result table + BssIdx = BssTableSearch(&pAd->ScanTab, pOidBssid, pAd->MlmeAux.Channel); +- if (BssIdx == BSS_NOT_FOUND) +- { +- MLME_SCAN_REQ_STRUCT ScanReq; ++ if (BssIdx == BSS_NOT_FOUND) { ++ MLME_SCAN_REQ_STRUCT ScanReq; + +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); + //pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - BSSID not found. start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - BSSID not found. start a new scan\n")); ++ ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, ++ sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; + // Reset Missed scan number + NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); + return; + } +- + // + // Update Reconnect Ssid, that user desired to connect. + // + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); +- pAd->MlmeAux.AutoReconnectSsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; +- NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->ScanTab.BssEntry[BssIdx].SsidLen); ++ pAd->MlmeAux.AutoReconnectSsidLen = ++ pAd->ScanTab.BssEntry[BssIdx].SsidLen; ++ NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, ++ pAd->ScanTab.BssEntry[BssIdx].Ssid, ++ pAd->ScanTab.BssEntry[BssIdx].SsidLen); + + // copy the matched BSS entry from ScanTab to MlmeAux.SsidBssTab. Why? + // Because we need this entry to become the JOIN target in later on SYNC state machine + pAd->MlmeAux.BssIdx = 0; + pAd->MlmeAux.SsidBssTab.BssNr = 1; +- NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); ++ NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], ++ &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); + + // Add SSID into MlmeAux for site surey joining hidden SSID + pAd->MlmeAux.SsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; +- NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->ScanTab.BssEntry[BssIdx].Ssid, pAd->MlmeAux.SsidLen); ++ NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->ScanTab.BssEntry[BssIdx].Ssid, ++ pAd->MlmeAux.SsidLen); + + { +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + // disassoc from current AP first +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - disassociate with current AP ...\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - disassociate with current AP ...\n")); ++ DisassocParmFill(pAd, &DisassocReq, ++ pAd->CommonCfg.Bssid, ++ REASON_DISASSOC_STA_LEAVING); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), ++ &DisassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +- } +- else +- { +- if (ADHOC_ON(pAd)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - drop current ADHOC\n")); ++ } else { ++ if (ADHOC_ON(pAd)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - drop current ADHOC\n")); + LinkDown(pAd, FALSE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +- pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ OPSTATUS_CLEAR_FLAG(pAd, ++ fOP_STATUS_MEDIA_STATE_CONNECTED); ++ pAd->IndicateMediaState = ++ NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); + } +- + // Change the wepstatus to original wepstatus +- pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; ++ pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; ++ pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; + + // Check cipher suite, AP must have more secured cipher than station setting + // Set the Pairwise and Group cipher to match the intended AP setting + // We can only connect to AP with less secured cipher setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipher) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipher; +- else if (pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA.PairCipherAux; ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPAPSK)) { ++ pAd->StaCfg.GroupCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA. ++ GroupCipher; ++ ++ if (pAd->StaCfg.WepStatus == ++ pAd->ScanTab.BssEntry[BssIdx].WPA. ++ PairCipher) ++ pAd->StaCfg.PairCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA. ++ PairCipher; ++ else if (pAd->ScanTab.BssEntry[BssIdx].WPA. ++ PairCipherAux != Ndis802_11WEPDisabled) ++ pAd->StaCfg.PairCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA. ++ PairCipherAux; + else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipher) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipher; +- else if (pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->ScanTab.BssEntry[BssIdx].WPA2.PairCipherAux; ++ pAd->StaCfg.PairCipher = ++ Ndis802_11Encryption2Enabled; ++ } else ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK)) { ++ pAd->StaCfg.GroupCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ GroupCipher; ++ ++ if (pAd->StaCfg.WepStatus == ++ pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ PairCipher) ++ pAd->StaCfg.PairCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ PairCipher; ++ else if (pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ PairCipherAux != Ndis802_11WEPDisabled) ++ pAd->StaCfg.PairCipher = ++ pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ PairCipherAux; + else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; ++ pAd->StaCfg.PairCipher = ++ Ndis802_11Encryption2Enabled; + + // RSN capability +- pAd->StaCfg.RsnCapability = pAd->ScanTab.BssEntry[BssIdx].WPA2.RsnCapability; ++ pAd->StaCfg.RsnCapability = ++ pAd->ScanTab.BssEntry[BssIdx].WPA2. ++ RsnCapability; + } +- + // Set Mix cipher flag +- pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; ++ pAd->StaCfg.bMixCipher = ++ (pAd->StaCfg.PairCipher == ++ pAd->StaCfg.GroupCipher) ? FALSE : TRUE; + /*if (pAd->StaCfg.bMixCipher == TRUE) +- { +- // If mix cipher, re-build RSNIE +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- }*/ ++ { ++ // If mix cipher, re-build RSNIE ++ RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); ++ } */ + // No active association, join the BSS immediately +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pOidBssid[0],pOidBssid[1],pOidBssid[2],pOidBssid[3],pOidBssid[4],pOidBssid[5])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n", ++ pOidBssid[0], pOidBssid[1], pOidBssid[2], ++ pOidBssid[3], pOidBssid[4], pOidBssid[5])); + + JoinParmFill(pAd, &JoinReq, pAd->MlmeAux.BssIdx); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, ++ sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; + } +@@ -624,13 +675,11 @@ VOID CntlOidRTBssidProc( + // or been corrupted by other "SET OID"? + // + // IRQL = DISPATCH_LEVEL +-VOID CntlMlmeRoamingProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + UCHAR BBPValue = 0; + +- DBGPRINT(RT_DEBUG_TRACE,("CNTL - Roaming in MlmeAux.RoamTab...\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Roaming in MlmeAux.RoamTab...\n")); + + { + //Let BBP register at 20MHz to do (fast) roaming. +@@ -638,16 +687,16 @@ VOID CntlMlmeRoamingProc( + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + +- NdisMoveMemory(&pAd->MlmeAux.SsidBssTab, &pAd->MlmeAux.RoamTab, sizeof(pAd->MlmeAux.RoamTab)); +- pAd->MlmeAux.SsidBssTab.BssNr = pAd->MlmeAux.RoamTab.BssNr; ++ NdisMoveMemory(&pAd->MlmeAux.SsidBssTab, &pAd->MlmeAux.RoamTab, ++ sizeof(pAd->MlmeAux.RoamTab)); ++ pAd->MlmeAux.SsidBssTab.BssNr = pAd->MlmeAux.RoamTab.BssNr; + +- BssTableSortByRssi(&pAd->MlmeAux.SsidBssTab); +- pAd->MlmeAux.BssIdx = 0; +- IterateOnBssTab(pAd); ++ BssTableSortByRssi(&pAd->MlmeAux.SsidBssTab); ++ pAd->MlmeAux.BssIdx = 0; ++ IterateOnBssTab(pAd); + } + } + +- + /* + ========================================================================== + Description: +@@ -656,34 +705,35 @@ VOID CntlMlmeRoamingProc( + + ========================================================================== + */ +-VOID CntlWaitDisassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- MLME_START_REQ_STRUCT StartReq; ++ MLME_START_REQ_STRUCT StartReq; + +- if (Elem->MsgType == MT2_DISASSOC_CONF) +- { ++ if (Elem->MsgType == MT2_DISASSOC_CONF) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Dis-associate successful\n")); + +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (pAd->CommonCfg.bWirelessEvent) { ++ RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); + } + + LinkDown(pAd, FALSE); + + // case 1. no matching BSS, and user wants ADHOC, so we just start a new one +- if ((pAd->MlmeAux.SsidBssTab.BssNr==0) && (pAd->StaCfg.BssType == BSS_ADHOC)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ if ((pAd->MlmeAux.SsidBssTab.BssNr == 0) ++ && (pAd->StaCfg.BssType == BSS_ADHOC)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n", ++ pAd->MlmeAux.Ssid)); ++ StartParmFill(pAd, &StartReq, (PCHAR) pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, ++ sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } + // case 2. try each matched BSS +- else +- { ++ else { + pAd->MlmeAux.BssIdx = 0; + + IterateOnBssTab(pAd); +@@ -699,66 +749,74 @@ VOID CntlWaitDisassocProc( + + ========================================================================== + */ +-VOID CntlWaitJoinProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ USHORT Reason; ++ MLME_AUTH_REQ_STRUCT AuthReq; + +- if (Elem->MsgType == MT2_JOIN_CONF) +- { ++ if (Elem->MsgType == MT2_JOIN_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { ++ if (Reason == MLME_SUCCESS) { + // 1. joined an IBSS, we are pretty much done here +- if (pAd->MlmeAux.BssType == BSS_ADHOC) +- { +- // ++ if (pAd->MlmeAux.BssType == BSS_ADHOC) { ++ // + // 5G bands rules of Japan: + // Ad hoc must be disabled in W53(ch52,56,60,64) channels. + // +- if ( (pAd->CommonCfg.bIEEE80211H == 1) && +- RadarChannelCheck(pAd, pAd->CommonCfg.Channel) +- ) +- { +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Join adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel)); ++ if ((pAd->CommonCfg.bIEEE80211H == 1) && ++ RadarChannelCheck(pAd, ++ pAd->CommonCfg.Channel) ++ ) { ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_IDLE; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Channel=%d, Join adhoc on W53(52,56,60,64) Channels are not accepted\n", ++ pAd->CommonCfg.Channel)); + return; + } + + LinkUp(pAd, BSS_ADHOC); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - join the IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pAd->CommonCfg.Bssid[0],pAd->CommonCfg.Bssid[1],pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3],pAd->CommonCfg.Bssid[4],pAd->CommonCfg.Bssid[5])); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - join the IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", ++ pAd->CommonCfg.Bssid[0], ++ pAd->CommonCfg.Bssid[1], ++ pAd->CommonCfg.Bssid[2], ++ pAd->CommonCfg.Bssid[3], ++ pAd->CommonCfg.Bssid[4], ++ pAd->CommonCfg.Bssid[5])); ++ ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; ++ pAd->ExtraInfo = GENERAL_LINK_UP; + } + // 2. joined a new INFRA network, start from authentication +- else +- { ++ else { + { + // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeShared) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeAutoSwitch)) { ++ AuthParmFill(pAd, &AuthReq, ++ pAd->MlmeAux.Bssid, ++ AUTH_MODE_KEY); ++ } else { ++ AuthParmFill(pAd, &AuthReq, ++ pAd->MlmeAux.Bssid, ++ AUTH_MODE_OPEN); + } +- else +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); +- } +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); ++ MlmeEnqueue(pAd, AUTH_STATE_MACHINE, ++ MT2_MLME_AUTH_REQ, ++ sizeof ++ (MLME_AUTH_REQ_STRUCT), ++ &AuthReq); + } + +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH; ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_AUTH; + } +- } +- else +- { ++ } else { + // 3. failed, try next BSS + pAd->MlmeAux.BssIdx++; + IterateOnBssTab(pAd); +@@ -766,7 +824,6 @@ VOID CntlWaitJoinProc( + } + } + +- + /* + ========================================================================== + Description: +@@ -775,73 +832,86 @@ VOID CntlWaitJoinProc( + + ========================================================================== + */ +-VOID CntlWaitStartProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Result; ++ USHORT Result; + +- if (Elem->MsgType == MT2_START_CONF) +- { ++ if (Elem->MsgType == MT2_START_CONF) { + NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); +- if (Result == MLME_SUCCESS) +- { +- // ++ if (Result == MLME_SUCCESS) { ++ // + // 5G bands rules of Japan: + // Ad hoc must be disabled in W53(ch52,56,60,64) channels. + // +- if ( (pAd->CommonCfg.bIEEE80211H == 1) && +- RadarChannelCheck(pAd, pAd->CommonCfg.Channel) +- ) +- { ++ if ((pAd->CommonCfg.bIEEE80211H == 1) && ++ RadarChannelCheck(pAd, pAd->CommonCfg.Channel) ++ ) { + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Start adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Channel=%d, Start adhoc on W53(52,56,60,64) Channels are not accepted\n", ++ pAd->CommonCfg.Channel)); + return; + } +- NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { ++ NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo. ++ MCSSet[0], 16); ++ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { + N_ChannelCheck(pAd); + SetCommonHT(pAd); +- NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &pAd->CommonCfg.AddHTInfo, sizeof(ADD_HT_INFO_IE)); +- RTMPCheckHt(pAd, BSSID_WCID, &pAd->CommonCfg.HtCapability, &pAd->CommonCfg.AddHTInfo); +- pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; +- NdisMoveMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], &pAd->CommonCfg.HtCapability.MCSSet[0], 16); +- COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +- +- if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE)) +- { +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel + 2; ++ NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, ++ &pAd->CommonCfg.AddHTInfo, ++ sizeof(ADD_HT_INFO_IE)); ++ RTMPCheckHt(pAd, BSSID_WCID, ++ &pAd->CommonCfg.HtCapability, ++ &pAd->CommonCfg.AddHTInfo); ++ pAd->StaActive.SupportedPhyInfo.bHtEnable = ++ TRUE; ++ NdisMoveMemory(&pAd->StaActive.SupportedPhyInfo. ++ MCSSet[0], ++ &pAd->CommonCfg.HtCapability. ++ MCSSet[0], 16); ++ COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG ++ (pAd); ++ ++ if ((pAd->CommonCfg.HtCapability.HtCapInfo. ++ ChannelWidth == BW_40) ++ && (pAd->CommonCfg.AddHTInfo.AddHtInfo. ++ ExtChanOffset == EXTCHA_ABOVE)) { ++ pAd->MlmeAux.CentralChannel = ++ pAd->CommonCfg.Channel + 2; ++ } else ++ if ((pAd->CommonCfg.HtCapability.HtCapInfo. ++ ChannelWidth == BW_40) ++ && (pAd->CommonCfg.AddHTInfo.AddHtInfo. ++ ExtChanOffset == EXTCHA_BELOW)) { ++ pAd->MlmeAux.CentralChannel = ++ pAd->CommonCfg.Channel - 2; + } +- else if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) && +- (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW)) +- { +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel - 2; +- } +- } +- else +- { +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; ++ } else { ++ pAd->StaActive.SupportedPhyInfo.bHtEnable = ++ FALSE; + } + LinkUp(pAd, BSS_ADHOC); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + // Before send beacon, driver need do radar detection +- if ((pAd->CommonCfg.Channel > 14 ) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- pAd->CommonCfg.RadarDetect.RDMode = RD_SILENCE_MODE; ++ if ((pAd->CommonCfg.Channel > 14) ++ && (pAd->CommonCfg.bIEEE80211H == 1) ++ && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) { ++ pAd->CommonCfg.RadarDetect.RDMode = ++ RD_SILENCE_MODE; + pAd->CommonCfg.RadarDetect.RDCount = 0; + } + +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - start a new IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", +- pAd->CommonCfg.Bssid[0],pAd->CommonCfg.Bssid[1],pAd->CommonCfg.Bssid[2], +- pAd->CommonCfg.Bssid[3],pAd->CommonCfg.Bssid[4],pAd->CommonCfg.Bssid[5])); +- } +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Start IBSS fail. BUG!!!!!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - start a new IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n", ++ pAd->CommonCfg.Bssid[0], ++ pAd->CommonCfg.Bssid[1], ++ pAd->CommonCfg.Bssid[2], ++ pAd->CommonCfg.Bssid[3], ++ pAd->CommonCfg.Bssid[4], ++ pAd->CommonCfg.Bssid[5])); ++ } else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Start IBSS fail. BUG!!!!!\n")); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + } +@@ -855,50 +925,55 @@ VOID CntlWaitStartProc( + + ========================================================================== + */ +-VOID CntlWaitAuthProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ USHORT Reason; ++ MLME_ASSOC_REQ_STRUCT AssocReq; ++ MLME_AUTH_REQ_STRUCT AuthReq; + +- if (Elem->MsgType == MT2_AUTH_CONF) +- { ++ if (Elem->MsgType == MT2_AUTH_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { ++ if (Reason == MLME_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); +- AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); ++ AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, ++ pAd->MlmeAux.CapabilityInfo, ++ ASSOC_TIMEOUT, ++ pAd->StaCfg.DefaultListenCount); + + { +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_ASSOC_REQ, ++ sizeof(MLME_ASSOC_REQ_STRUCT), ++ &AssocReq); + +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC; ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_ASSOC; + } +- } +- else +- { ++ } else { + // This fail may because of the AP already keep us in its MAC table without + // ageing-out. The previous authentication attempt must have let it remove us. + // so try Authentication again may help. For D-Link DWL-900AP+ compatibility. +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try again...\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - AUTH FAIL, try again...\n")); + + { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch)) +- { ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeShared) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeAutoSwitch)) { + // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_KEY); ++ AuthParmFill(pAd, &AuthReq, ++ pAd->MlmeAux.Bssid, ++ AUTH_MODE_KEY); ++ } else { ++ AuthParmFill(pAd, &AuthReq, ++ pAd->MlmeAux.Bssid, ++ AUTH_MODE_OPEN); + } +- else +- { +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, AUTH_MODE_OPEN); +- } +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); ++ MlmeEnqueue(pAd, AUTH_STATE_MACHINE, ++ MT2_MLME_AUTH_REQ, ++ sizeof(MLME_AUTH_REQ_STRUCT), ++ &AuthReq); + + } + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2; +@@ -914,46 +989,49 @@ VOID CntlWaitAuthProc( + + ========================================================================== + */ +-VOID CntlWaitAuthProc2( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ USHORT Reason; ++ MLME_ASSOC_REQ_STRUCT AssocReq; ++ MLME_AUTH_REQ_STRUCT AuthReq; + +- if (Elem->MsgType == MT2_AUTH_CONF) +- { ++ if (Elem->MsgType == MT2_AUTH_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { ++ if (Reason == MLME_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); +- AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); ++ AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, ++ pAd->MlmeAux.CapabilityInfo, ++ ASSOC_TIMEOUT, ++ pAd->StaCfg.DefaultListenCount); + { +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, ++ MT2_MLME_ASSOC_REQ, ++ sizeof(MLME_ASSOC_REQ_STRUCT), ++ &AssocReq); + +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_ASSOC; +- } +- } +- else +- { +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) && +- (pAd->MlmeAux.Alg == Ndis802_11AuthModeShared)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try OPEN system...\n")); +- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, Ndis802_11AuthModeOpen); +- MlmeEnqueue(pAd, AUTH_STATE_MACHINE, MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), &AuthReq); +- +- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_AUTH2; ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_ASSOC; + } +- else +- { ++ } else { ++ if ((pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeAutoSwitch) ++ && (pAd->MlmeAux.Alg == Ndis802_11AuthModeShared)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - AUTH FAIL, try OPEN system...\n")); ++ AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, ++ Ndis802_11AuthModeOpen); ++ MlmeEnqueue(pAd, AUTH_STATE_MACHINE, ++ MT2_MLME_AUTH_REQ, ++ sizeof(MLME_AUTH_REQ_STRUCT), ++ &AuthReq); ++ ++ pAd->Mlme.CntlMachine.CurrState = ++ CNTL_WAIT_AUTH2; ++ } else { + // not success, try next BSS +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, give up; try next BSS\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; //??????? ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - AUTH FAIL, give up; try next BSS\n")); ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; //??????? + pAd->MlmeAux.BssIdx++; + IterateOnBssTab(pAd); + } +@@ -969,30 +1047,30 @@ VOID CntlWaitAuthProc2( + + ========================================================================== + */ +-VOID CntlWaitAssocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; ++ USHORT Reason; + +- if (Elem->MsgType == MT2_ASSOC_CONF) +- { ++ if (Elem->MsgType == MT2_ASSOC_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); +- if (Reason == MLME_SUCCESS) +- { +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (Reason == MLME_SUCCESS) { ++ if (pAd->CommonCfg.bWirelessEvent) { ++ RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); + } + + LinkUp(pAd, BSS_INFRA); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association successful on BSS #%ld\n",pAd->MlmeAux.BssIdx)); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Association successful on BSS #%ld\n", ++ pAd->MlmeAux.BssIdx)); ++ } else { + // not success, try next BSS +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Association fails on BSS #%ld\n",pAd->MlmeAux.BssIdx)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Association fails on BSS #%ld\n", ++ pAd->MlmeAux.BssIdx)); + pAd->MlmeAux.BssIdx++; + IterateOnBssTab(pAd); + } +@@ -1007,21 +1085,19 @@ VOID CntlWaitAssocProc( + + ========================================================================== + */ +-VOID CntlWaitReassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Result; ++ USHORT Result; + +- if (Elem->MsgType == MT2_REASSOC_CONF) +- { ++ if (Elem->MsgType == MT2_REASSOC_CONF) { + NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); +- if (Result == MLME_SUCCESS) +- { ++ if (Result == MLME_SUCCESS) { + // send wireless event - for association + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- ++ RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); + + // + // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC +@@ -1029,23 +1105,23 @@ VOID CntlWaitReassocProc( + LinkUp(pAd, BSS_INFRA); + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition successful on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Re-assocition successful on BSS #%ld\n", ++ pAd->MlmeAux.RoamIdx)); ++ } else { + // reassoc failed, try to pick next BSS in the BSS Table +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition fails on BSS #%ld\n", pAd->MlmeAux.RoamIdx)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - Re-assocition fails on BSS #%ld\n", ++ pAd->MlmeAux.RoamIdx)); + { +- pAd->MlmeAux.RoamIdx++; +- IterateOnBssTab2(pAd); ++ pAd->MlmeAux.RoamIdx++; ++ IterateOnBssTab2(pAd); ++ } + } + } +- } + } + +- +-VOID AdhocTurnOnQos( +- IN PRTMP_ADAPTER pAd) ++VOID AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) + { + #define AC0_DEF_TXOP 0 + #define AC1_DEF_TXOP 0 +@@ -1053,8 +1129,7 @@ VOID AdhocTurnOnQos( + #define AC3_DEF_TXOP 47 + + // Turn on QOs if use HT rate. +- if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) +- { ++ if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) { + pAd->CommonCfg.APEdcaParm.bValid = TRUE; + pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; + pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; +@@ -1071,10 +1146,10 @@ VOID AdhocTurnOnQos( + pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; + pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; + +- pAd->CommonCfg.APEdcaParm.Txop[0] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[1] = 0; +- pAd->CommonCfg.APEdcaParm.Txop[2] = AC2_DEF_TXOP; +- pAd->CommonCfg.APEdcaParm.Txop[3] = AC3_DEF_TXOP; ++ pAd->CommonCfg.APEdcaParm.Txop[0] = 0; ++ pAd->CommonCfg.APEdcaParm.Txop[1] = 0; ++ pAd->CommonCfg.APEdcaParm.Txop[2] = AC2_DEF_TXOP; ++ pAd->CommonCfg.APEdcaParm.Txop[3] = AC3_DEF_TXOP; + } + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + } +@@ -1087,27 +1162,23 @@ VOID AdhocTurnOnQos( + + ========================================================================== + */ +-VOID LinkUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssType) ++VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + { +- ULONG Now; +- UINT32 Data; +- BOOLEAN Cancelled; +- UCHAR Value = 0, idx = 0, HashIdx = 0; ++ ULONG Now; ++ UINT32 Data; ++ BOOLEAN Cancelled; ++ UCHAR Value = 0, idx = 0, HashIdx = 0; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; + + // Init ChannelQuality to prevent DEAD_CQI at initial LinkUp + pAd->Mlme.ChannelQuality = 50; + + pEntry = MacTableLookup(pAd, pAd->CommonCfg.Bssid); +- if (pEntry) +- { ++ if (pEntry) { + MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr); + pEntry = NULL; + } + +- + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + + // +@@ -1119,7 +1190,7 @@ VOID LinkUp( + // To prevent DisassocTimeoutAction to call Link down after we link up, + // cancel the DisassocTimer no matter what it start or not. + // +- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); ++ RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); + + COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); + +@@ -1129,39 +1200,30 @@ VOID LinkUp( + // Before power save before link up function, We will force use 1R. + // So after link up, check Rx antenna # again. + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- if(pAd->Antenna.field.RxPath == 3) +- { ++ if (pAd->Antenna.field.RxPath == 3) { + Value |= (0x10); +- } +- else if(pAd->Antenna.field.RxPath == 2) +- { ++ } else if (pAd->Antenna.field.RxPath == 2) { + Value |= (0x8); +- } +- else if(pAd->Antenna.field.RxPath == 1) +- { ++ } else if (pAd->Antenna.field.RxPath == 1) { + Value |= (0x0); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + pAd->StaCfg.BBPR3 = Value; + #endif // RTMP_MAC_PCI // + +- if (BssType == BSS_ADHOC) +- { ++ if (BssType == BSS_ADHOC) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + +- + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + AdhocTurnOnQos(pAd); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" )); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n")); ++ } else { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" )); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n")); + } + + // 3*3 +@@ -1172,8 +1234,8 @@ VOID LinkUp( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); + + // Change to AP channel +- if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { ++ if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) { + // Must using 40MHz. + pAd->CommonCfg.BBPCurrentBW = BW_40; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +@@ -1189,29 +1251,30 @@ VOID LinkUp( + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; ++ pAd->StaCfg.BBPR3 = Value; + #endif // RTMP_MAC_PCI // + + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); + Data &= 0xfffffffe; + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); + +- if (pAd->MACVersion == 0x28600100) +- { ++ if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", ++ pAd->CommonCfg.CentralChannel)); ++ } else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) ++ && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == ++ BW_40)) { ++ // Must using 40MHz. + pAd->CommonCfg.BBPCurrentBW = BW_40; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); ++ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); + Value &= (~0x18); +@@ -1223,25 +1286,24 @@ VOID LinkUp( + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data); + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); +- Value |= (0x20); ++ Value |= (0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; ++ pAd->StaCfg.BBPR3 = Value; + #endif // RTMP_MAC_PCI // + +- if (pAd->MACVersion == 0x28600100) +- { ++ if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel )); +- } +- else +- { +- pAd->CommonCfg.BBPCurrentBW = BW_20; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", ++ pAd->CommonCfg.CentralChannel)); ++ } else { ++ pAd->CommonCfg.BBPCurrentBW = BW_20; + pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); +@@ -1258,80 +1320,82 @@ VOID LinkUp( + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI +- pAd->StaCfg.BBPR3 = Value; ++ pAd->StaCfg.BBPR3 = Value; + #endif // RTMP_MAC_PCI // + +- if (pAd->MACVersion == 0x28600100) +- { ++ if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" )); ++ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n" )); +- } ++ DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n")); ++ } + + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); + + // + // Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission + // +- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue); ++ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, ++ &pAd->BbpTuning.R66CurrentValue); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", +- BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", ++ BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Density =%d, )\n", pAd->MacTab.Content[BSSID_WCID].MpduDensity)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! LINK UP !!! (Density =%d, )\n", ++ pAd->MacTab.Content[BSSID_WCID].MpduDensity)); + +- AsicSetBssid(pAd, pAd->CommonCfg.Bssid); ++ AsicSetBssid(pAd, pAd->CommonCfg.Bssid); + + AsicSetSlotTime(pAd, TRUE); + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + + // Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit +- AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, FALSE); ++ AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, ++ FALSE); + +- if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) +- { ++ if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) { + // Update HT protectionfor based on AP's operating mode. +- if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, TRUE); +- } +- else +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); ++ if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) { ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ OperaionMode, ALLN_SETPROTECT, FALSE, ++ TRUE); ++ } else ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ OperaionMode, ALLN_SETPROTECT, FALSE, ++ FALSE); + } + + NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS)); + + NdisGetSystemUpTime(&Now); +- pAd->StaCfg.LastBeaconRxTime = Now; // last RX timestamp ++ pAd->StaCfg.LastBeaconRxTime = Now; // last RX timestamp + + if ((pAd->CommonCfg.TxPreamble != Rt802_11PreambleLong) && +- CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo)) +- { ++ CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo)) { + MlmeSetTxPreamble(pAd, Rt802_11PreambleShort); + } + + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); + +- if (pAd->CommonCfg.RadarDetect.RDMode == RD_SILENCE_MODE) +- { ++ if (pAd->CommonCfg.RadarDetect.RDMode == RD_SILENCE_MODE) { + } + pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; + +- if (BssType == BSS_ADHOC) +- { ++ if (BssType == BSS_ADHOC) { + MakeIbssBeacon(pAd); + if ((pAd->CommonCfg.Channel > 14) +- && (pAd->CommonCfg.bIEEE80211H == 1) +- && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) +- { +- ; //Do nothing +- } +- else +- { ++ && (pAd->CommonCfg.bIEEE80211H == 1) ++ && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) { ++ ; //Do nothing ++ } else { + AsicEnableIbssSync(pAd); + } + +@@ -1343,82 +1407,92 @@ VOID LinkUp( + // If WEP is enabled, add key material and cipherAlg into Asic + // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) + +- if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) +- { +- PUCHAR Key; +- UCHAR CipherAlg; ++ if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) { ++ PUCHAR Key; ++ UCHAR CipherAlg; + +- for (idx=0; idx < SHARE_KEY_NUM; idx++) +- { ++ for (idx = 0; idx < SHARE_KEY_NUM; idx++) { + CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +- Key = pAd->SharedKey[BSS0][idx].Key; ++ Key = pAd->SharedKey[BSS0][idx].Key; + +- if (pAd->SharedKey[BSS0][idx].KeyLen > 0) +- { ++ if (pAd->SharedKey[BSS0][idx].KeyLen > 0) { + // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); ++ AsicAddSharedKeyEntry(pAd, BSS0, idx, ++ CipherAlg, Key, ++ NULL, NULL); + +- if (idx == pAd->StaCfg.DefaultKeyId) +- { ++ if (idx == pAd->StaCfg.DefaultKeyId) { + // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ idx, ++ CipherAlg, ++ NULL); + } + } + +- + } + } + // If WPANone is enabled, add key material and cipherAlg into Asic + // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) +- else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { ++ else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { + pAd->StaCfg.DefaultKeyId = 0; // always be zero + +- NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY)); +- pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pAd->StaCfg.PMK, LEN_TKIP_EK); +- +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +- { +- NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, &pAd->StaCfg.PMK[16], LEN_TKIP_TXMICK); +- } +- ++ NdisZeroMemory(&pAd->SharedKey[BSS0][0], ++ sizeof(CIPHER_KEY)); ++ pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, ++ pAd->StaCfg.PMK, LEN_TKIP_EK); ++ ++ if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption2Enabled) { ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, ++ &pAd->StaCfg.PMK[16], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, ++ &pAd->StaCfg.PMK[16], ++ LEN_TKIP_TXMICK); ++ } + // Decide its ChiperAlg +- if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) ++ if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption2Enabled) + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +- else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) ++ else if (pAd->StaCfg.PairCipher == ++ Ndis802_11Encryption3Enabled) + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- else +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Unknow Cipher (=%d), set Cipher to AES\n", pAd->StaCfg.PairCipher)); ++ else { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Unknow Cipher (=%d), set Cipher to AES\n", ++ pAd->StaCfg.PairCipher)); + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; +- } ++ } + + // Set key material and cipherAlg to Asic + AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pAd->SharedKey[BSS0][0].CipherAlg, +- pAd->SharedKey[BSS0][0].Key, +- pAd->SharedKey[BSS0][0].TxMic, +- pAd->SharedKey[BSS0][0].RxMic); +- +- // Update WCID attribute table and IVEIV table for this group key table +- RTMPAddWcidAttributeEntry(pAd, BSS0, 0, pAd->SharedKey[BSS0][0].CipherAlg, NULL); ++ BSS0, ++ 0, ++ pAd->SharedKey[BSS0][0].CipherAlg, ++ pAd->SharedKey[BSS0][0].Key, ++ pAd->SharedKey[BSS0][0].TxMic, ++ pAd->SharedKey[BSS0][0].RxMic); ++ ++ // Update WCID attribute table and IVEIV table for this group key table ++ RTMPAddWcidAttributeEntry(pAd, BSS0, 0, ++ pAd->SharedKey[BSS0][0]. ++ CipherAlg, NULL); + + } + +- } +- else // BSS_INFRA ++ } else // BSS_INFRA + { + // Check the new SSID with last SSID +- while (Cancelled == TRUE) +- { +- if (pAd->CommonCfg.LastSsidLen == pAd->CommonCfg.SsidLen) +- { +- if (RTMPCompareMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, pAd->CommonCfg.LastSsidLen) == 0) +- { ++ while (Cancelled == TRUE) { ++ if (pAd->CommonCfg.LastSsidLen == ++ pAd->CommonCfg.SsidLen) { ++ if (RTMPCompareMemory ++ (pAd->CommonCfg.LastSsid, ++ pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.LastSsidLen) == 0) { + // Link to the old one no linkdown is required. + break; + } +@@ -1426,8 +1500,9 @@ VOID LinkUp( + // Send link down event before set to link up + pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event AA!\n")); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_DISCONNECT Event AA!\n")); + break; + } + +@@ -1435,15 +1510,15 @@ VOID LinkUp( + // On WPA mode, Remove All Keys if not connect to the last BSSID + // Key will be set after 4-way handshake. + // +- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) +- { +- ULONG IV; ++ if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { ++ ULONG IV; + + // Remove all WPA keys + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + RTMPWPARemoveAllKeys(pAd); + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; ++ pAd->StaCfg.PrivacyFilter = ++ Ndis802_11PrivFilter8021xWEP; + + // Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP + // If IV related values are too large in GroupMsg2, AP would ignore this message. +@@ -1451,7 +1526,6 @@ VOID LinkUp( + IV |= (pAd->StaCfg.DefaultKeyId << 30); + AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0); + } +- + // NOTE: + // the decision of using "short slot time" or not may change dynamically due to + // new STA association to the AP. so we have to decide that upon parsing BEACON, not here +@@ -1463,84 +1537,85 @@ VOID LinkUp( + ComposePsPoll(pAd); + ComposeNullFrame(pAd); + +- AsicEnableBssSync(pAd); ++ AsicEnableBssSync(pAd); + + // Add BSSID to WCID search table + AsicUpdateRxWCIDTable(pAd, BSSID_WCID, pAd->CommonCfg.Bssid); + + // If WEP is enabled, add paiewise and shared key +- if (((pAd->StaCfg.WpaSupplicantUP)&& +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)&& +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) || +- ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)&& +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled))) +- { +- PUCHAR Key; +- UCHAR CipherAlg; +- +- for (idx=0; idx < SHARE_KEY_NUM; idx++) +- { ++ if (((pAd->StaCfg.WpaSupplicantUP) && ++ (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && ++ (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) || ++ ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) && ++ (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled))) { ++ PUCHAR Key; ++ UCHAR CipherAlg; ++ ++ for (idx = 0; idx < SHARE_KEY_NUM; idx++) { + CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +- Key = pAd->SharedKey[BSS0][idx].Key; ++ Key = pAd->SharedKey[BSS0][idx].Key; + +- if (pAd->SharedKey[BSS0][idx].KeyLen > 0) +- { ++ if (pAd->SharedKey[BSS0][idx].KeyLen > 0) { + // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); ++ AsicAddSharedKeyEntry(pAd, BSS0, idx, ++ CipherAlg, Key, ++ NULL, NULL); + +- if (idx == pAd->StaCfg.DefaultKeyId) +- { ++ if (idx == pAd->StaCfg.DefaultKeyId) { + // Assign group key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ idx, ++ CipherAlg, ++ NULL); + + pEntry->Aid = BSSID_WCID; + // Assign pairwise key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, pEntry); ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ idx, ++ CipherAlg, ++ pEntry); + } + } + } + } +- + // only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode + // should wait until at least 2 active nodes in this BSSID. + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); + +- // For GUI ++ +- if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) +- { ++ // For GUI ++ ++ if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) { + pAd->IndicateMediaState = NdisMediaStateConnected; + pAd->ExtraInfo = GENERAL_LINK_UP; + RTMP_IndicateMediaState(pAd); +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) ++ } else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) + { +- if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) +- RTMPSetTimer(&pAd->Mlme.LinkDownTimer, LINK_DOWN_TIMEOUT); ++ if (pAd->StaCfg.WpaSupplicantUP == ++ WPA_SUPPLICANT_DISABLE) ++ RTMPSetTimer(&pAd->Mlme.LinkDownTimer, ++ LINK_DOWN_TIMEOUT); + } +- // -- ++ // -- + + // Add BSSID in my MAC Table. +- NdisAcquireSpinLock(&pAd->MacTabLock); ++ NdisAcquireSpinLock(&pAd->MacTabLock); + // add this MAC entry into HASH table +- if (pEntry) +- { ++ if (pEntry) { + HashIdx = MAC_ADDR_HASH_INDEX(pAd->CommonCfg.Bssid); +- if (pAd->MacTab.Hash[HashIdx] == NULL) +- { ++ if (pAd->MacTab.Hash[HashIdx] == NULL) { + pAd->MacTab.Hash[HashIdx] = pEntry; +- } +- else +- { ++ } else { + pCurrEntry = pAd->MacTab.Hash[HashIdx]; +- while (pCurrEntry->pNext != NULL) +- { ++ while (pCurrEntry->pNext != NULL) { + pCurrEntry = pCurrEntry->pNext; + } + pCurrEntry->pNext = pEntry; + } + } +- RTMPMoveMemory(pEntry->Addr, pAd->CommonCfg.Bssid, MAC_ADDR_LEN); ++ RTMPMoveMemory(pEntry->Addr, pAd->CommonCfg.Bssid, ++ MAC_ADDR_LEN); + pEntry->Aid = BSSID_WCID; + pEntry->pAd = pAd; + pEntry->ValidAsCLI = TRUE; //Although this is bssid..still set ValidAsCl +@@ -1549,130 +1624,132 @@ VOID LinkUp( + pEntry->AuthState = SST_ASSOC; + pEntry->AuthMode = pAd->StaCfg.AuthMode; + pEntry->WepStatus = pAd->StaCfg.WepStatus; +- if (pEntry->AuthMode < Ndis802_11AuthModeWPA) +- { ++ if (pEntry->AuthMode < Ndis802_11AuthModeWPA) { + pEntry->WpaState = AS_NOTUSE; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- } +- else +- { ++ } else { + pEntry->WpaState = AS_PTKSTART; + pEntry->PrivacyFilter = Ndis802_11PrivFilter8021xWEP; + } +- NdisReleaseSpinLock(&pAd->MacTabLock); ++ NdisReleaseSpinLock(&pAd->MacTabLock); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! ClientStatusFlags=%lx)\n", +- pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! LINK UP !!! ClientStatusFlags=%lx)\n", ++ pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + + MlmeUpdateTxRates(pAd, TRUE, BSS0); + MlmeUpdateHtTxRates(pAd, BSS0); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", pAd->StaActive.SupportedPhyInfo.bHtEnable)); +- +- if (pAd->CommonCfg.bAggregationCapable) +- { +- if ((pAd->CommonCfg.bPiggyBackCapable) && (pAd->MlmeAux.APRalinkIe & 0x00000003) == 3) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED); +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); +- RTMPSetPiggyBack(pAd, TRUE); +- DBGPRINT(RT_DEBUG_TRACE, ("Turn on Piggy-Back\n")); +- } +- else if (pAd->MlmeAux.APRalinkIe & 0x00000001) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); +- DBGPRINT(RT_DEBUG_TRACE, ("Ralink Aggregation\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", ++ pAd->StaActive.SupportedPhyInfo.bHtEnable)); ++ ++ if (pAd->CommonCfg.bAggregationCapable) { ++ if ((pAd->CommonCfg.bPiggyBackCapable) ++ && (pAd->MlmeAux.APRalinkIe & 0x00000003) == 3) { ++ OPSTATUS_SET_FLAG(pAd, ++ fOP_STATUS_PIGGYBACK_INUSED); ++ OPSTATUS_SET_FLAG(pAd, ++ fOP_STATUS_AGGREGATION_INUSED); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_PIGGYBACK_CAPABLE); ++ RTMPSetPiggyBack(pAd, TRUE); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Turn on Piggy-Back\n")); ++ } else if (pAd->MlmeAux.APRalinkIe & 0x00000001) { ++ OPSTATUS_SET_FLAG(pAd, ++ fOP_STATUS_AGGREGATION_INUSED); ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_AGGREGATION_CAPABLE); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Ralink Aggregation\n")); + } + } + +- if (pAd->MlmeAux.APRalinkIe != 0x0) +- { +- if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE)) +- { ++ if (pAd->MlmeAux.APRalinkIe != 0x0) { ++ if (CLIENT_STATUS_TEST_FLAG ++ (pEntry, fCLIENT_STATUS_RDG_CAPABLE)) { + AsicEnableRDG(pAd); + } + OPSTATUS_SET_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET); +- } +- else +- { ++ CLIENT_STATUS_SET_FLAG(pEntry, ++ fCLIENT_STATUS_RALINK_CHIPSET); ++ } else { + OPSTATUS_CLEAR_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET); +- CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET); ++ CLIENT_STATUS_CLEAR_FLAG(pEntry, ++ fCLIENT_STATUS_RALINK_CHIPSET); + } + } + +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_CONNECT Event B!.BACapability = %x. ClientStatusFlags = %lx\n", pAd->CommonCfg.BACapability.word, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_CONNECT Event B!.BACapability = %x. ClientStatusFlags = %lx\n", ++ pAd->CommonCfg.BACapability.word, ++ pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + + // Set LED + RTMPSetLED(pAd, LED_LINK_UP); + + pAd->Mlme.PeriodicRound = 0; + pAd->Mlme.OneSecPeriodicRound = 0; +- pAd->bConfigChanged = FALSE; // Reset config flag +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up ++ pAd->bConfigChanged = FALSE; // Reset config flag ++ pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up + + // Set asic auto fall back + { +- PUCHAR pTable; +- UCHAR TableSize = 0; ++ PUCHAR pTable; ++ UCHAR TableSize = 0; + +- MlmeSelectTxRateTable(pAd, &pAd->MacTab.Content[BSSID_WCID], &pTable, &TableSize, &pAd->CommonCfg.TxRateIndex); ++ MlmeSelectTxRateTable(pAd, &pAd->MacTab.Content[BSSID_WCID], ++ &pTable, &TableSize, ++ &pAd->CommonCfg.TxRateIndex); + AsicUpdateAutoFallBackTable(pAd, pTable); + } + + NdisAcquireSpinLock(&pAd->MacTabLock); +- pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word; +- pEntry->MaxHTPhyMode.word = pAd->StaCfg.HTPhyMode.word; +- if (pAd->StaCfg.bAutoTxRateSwitch == FALSE) +- { ++ pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word; ++ pEntry->MaxHTPhyMode.word = pAd->StaCfg.HTPhyMode.word; ++ if (pAd->StaCfg.bAutoTxRateSwitch == FALSE) { + pEntry->bAutoTxRateSwitch = FALSE; + + if (pEntry->HTPhyMode.field.MCS == 32) + pEntry->HTPhyMode.field.ShortGI = GI_800; + +- if ((pEntry->HTPhyMode.field.MCS > MCS_7) || (pEntry->HTPhyMode.field.MCS == 32)) ++ if ((pEntry->HTPhyMode.field.MCS > MCS_7) ++ || (pEntry->HTPhyMode.field.MCS == 32)) + pEntry->HTPhyMode.field.STBC = STBC_NONE; + + // If the legacy mode is set, overwrite the transmit setting of this entry. + if (pEntry->HTPhyMode.field.MODE <= MODE_OFDM) +- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); +- } +- else ++ RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. ++ DesiredTransmitSetting.field. ++ FixedTxMode, pEntry); ++ } else + pEntry->bAutoTxRateSwitch = TRUE; + NdisReleaseSpinLock(&pAd->MacTabLock); + + // Let Link Status Page display first initial rate. +- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word); ++ pAd->LastTxRate = (USHORT) (pEntry->HTPhyMode.word); + // Select DAC according to HT or Legacy +- if (pAd->StaActive.SupportedPhyInfo.MCSSet[0] != 0x00) +- { ++ if (pAd->StaActive.SupportedPhyInfo.MCSSet[0] != 0x00) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); + Value &= (~0x18); +- if (pAd->Antenna.field.TxPath == 2) +- { +- Value |= 0x10; ++ if (pAd->Antenna.field.TxPath == 2) { ++ Value |= 0x10; + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value); +- } +- else +- { ++ } else { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); + Value &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value); + } + +- if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) +- { +- } +- else if (pEntry->MaxRAmpduFactor == 0) +- { +- // If HT AP doesn't support MaxRAmpduFactor = 1, we need to set max PSDU to 0. +- // Because our Init value is 1 at MACRegTable. ++ if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) { ++ } else if (pEntry->MaxRAmpduFactor == 0) { ++ // If HT AP doesn't support MaxRAmpduFactor = 1, we need to set max PSDU to 0. ++ // Because our Init value is 1 at MACRegTable. + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x0fff); + } +- + // Patch for Marvel AP to gain high throughput + // Need to set as following, + // 1. Set txop in register-EDCA_AC0_CFG as 0x60 +@@ -1683,34 +1760,31 @@ VOID LinkUp( + // Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable + // + // if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is. +- if (!((pAd->CommonCfg.RxStream == 1)&&(pAd->CommonCfg.TxStream == 1)) && +- (pAd->StaCfg.bForceTxBurst == FALSE) && +- (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) +- || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))) +- { ++ if (!((pAd->CommonCfg.RxStream == 1) && (pAd->CommonCfg.TxStream == 1)) ++ && (pAd->StaCfg.bForceTxBurst == FALSE) ++ && ++ (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) ++ && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) ++ || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) ++ && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))) { + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; ++ Data &= 0xFFFFFF00; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + + RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3F7F9F); + DBGPRINT(RT_DEBUG_TRACE, ("Txburst 1\n")); +- } +- else +- if (pAd->CommonCfg.bEnableTxBurst) +- { ++ } else if (pAd->CommonCfg.bEnableTxBurst) { + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; +- Data |= 0x60; ++ Data &= 0xFFFFFF00; ++ Data |= 0x60; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = TRUE; + + RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3FBF9F); + DBGPRINT(RT_DEBUG_TRACE, ("Txburst 2\n")); +- } +- else +- { ++ } else { + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); +- Data &= 0xFFFFFF00; ++ Data &= 0xFFFFFF00; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + + RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3F7F9F); +@@ -1718,59 +1792,54 @@ VOID LinkUp( + } + + // Re-check to turn on TX burst or not. +- if ((pAd->CommonCfg.IOTestParm.bLastAtheros == TRUE) && ((STA_WEP_ON(pAd))||(STA_TKIP_ON(pAd)))) +- { ++ if ((pAd->CommonCfg.IOTestParm.bLastAtheros == TRUE) ++ && ((STA_WEP_ON(pAd)) || (STA_TKIP_ON(pAd)))) { + pAd->CommonCfg.IOTestParm.bNextDisableRxBA = TRUE; +- if (pAd->CommonCfg.bEnableTxBurst) +- { +- UINT32 MACValue = 0; ++ if (pAd->CommonCfg.bEnableTxBurst) { ++ UINT32 MACValue = 0; + // Force disable TXOP value in this case. The same action in MLMEUpdateProtect too. + // I didn't change PBF_MAX_PCNT setting. + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &MACValue); +- MACValue &= 0xFFFFFF00; ++ MACValue &= 0xFFFFFF00; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, MACValue); + pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = FALSE; + } +- } +- else +- { ++ } else { + pAd->CommonCfg.IOTestParm.bNextDisableRxBA = FALSE; + } + + pAd->CommonCfg.IOTestParm.bLastAtheros = FALSE; + COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!pAd->bNextDisableRxBA= %d \n", pAd->CommonCfg.IOTestParm.bNextDisableRxBA)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!!pAd->bNextDisableRxBA= %d \n", ++ pAd->CommonCfg.IOTestParm.bNextDisableRxBA)); + // BSSID add in one MAC entry too. Because in Tx, ASIC need to check Cipher and IV/EIV, BAbitmap + // Pther information in MACTab.Content[BSSID_WCID] is not necessary for driver. + // Note: As STA, The MACTab.Content[BSSID_WCID]. PairwiseKey and Shared Key for BSS0 are the same. + +- if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled) +- { ++ if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled) { + if (pAd->StaCfg.WpaSupplicantUP && +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && +- (pAd->StaCfg.IEEE8021X == TRUE)) +- ; +- else +- { +- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll; +- } ++ (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && ++ (pAd->StaCfg.IEEE8021X == TRUE)) ; ++ else { ++ pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ pAd->StaCfg.PrivacyFilter = ++ Ndis802_11PrivFilterAcceptAll; ++ } + } + + NdisAcquireSpinLock(&pAd->MacTabLock); + pEntry->PortSecured = pAd->StaCfg.PortSecured; + NdisReleaseSpinLock(&pAd->MacTabLock); + +- // ++ // + // Patch Atheros AP TX will breakdown issue. + // AP Model: DLink DWL-8200AP + // +- if (INFRA_ON(pAd) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && STA_TKIP_ON(pAd)) +- { ++ if (INFRA_ON(pAd) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) ++ && STA_TKIP_ON(pAd)) { + RTMP_IO_WRITE32(pAd, RX_PARSER_CFG, 0x01); +- } +- else +- { ++ } else { + RTMP_IO_WRITE32(pAd, RX_PARSER_CFG, 0x00); + } + +@@ -1804,11 +1873,9 @@ VOID LinkUp( + + ========================================================================== + */ +-VOID LinkDown( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN IsReqFromAP) ++VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + { +- UCHAR i, ByteValue = 0; ++ UCHAR i, ByteValue = 0; + + // Do nothing if monitor mode is on + if (MONITOR_ON(pAd)) +@@ -1816,45 +1883,43 @@ VOID LinkDown( + + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); + //Comment the codes, beasue the line 2291 call the same function. +- //RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ //RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + // Not allow go to sleep within linkdown function. + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (pAd->CommonCfg.bWirelessEvent) { ++ RTMPSendWirelessEvent(pAd, IW_STA_LINKDOWN_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID].Addr, ++ BSS0, 0); + } + + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); + + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- BOOLEAN Cancelled; +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- } ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { ++ BOOLEAN Cancelled; ++ pAd->Mlme.bPsPollTimerRunning = FALSE; ++ RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); ++ } + + pAd->bPCIclkOff = FALSE; + #endif // RTMP_MAC_PCI // + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) +-|| RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) +- || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ++ || RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) { ++ AUTO_WAKEUP_STRUC AutoWakeupCfg; + AsicForceWakeup(pAd, TRUE); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- } +- ++ AutoWakeupCfg.word = 0; ++ RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); ++ } + #ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; + #endif // RTMP_MAC_PCI // + +- if (ADHOC_ON(pAd)) // Adhoc mode link down ++ if (ADHOC_ON(pAd)) // Adhoc mode link down + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); + +@@ -1862,11 +1927,12 @@ VOID LinkDown( + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); + pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size)); +- } +- else // Infra structure mode ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, ++ pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size)); ++ } else // Infra structure mode + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 2!!!\n")); + +@@ -1875,25 +1941,25 @@ VOID LinkDown( + + // Saved last SSID for linkup comparison + pAd->CommonCfg.LastSsidLen = pAd->CommonCfg.SsidLen; +- NdisMoveMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, pAd->CommonCfg.LastSsidLen); ++ NdisMoveMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.LastSsidLen); + COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid); +- if (pAd->MlmeAux.CurrReqIsFromNdis == TRUE) +- { ++ if (pAd->MlmeAux.CurrReqIsFromNdis == TRUE) { + pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_DOWN; +- DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event A!\n")); ++ pAd->ExtraInfo = GENERAL_LINK_DOWN; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("NDIS_STATUS_MEDIA_DISCONNECT Event A!\n")); + pAd->MlmeAux.CurrReqIsFromNdis = FALSE; +- } +- else +- { +- // ++ } else { ++ // + // If disassociation request is from NDIS, then we don't need to delete BSSID from entry. + // Otherwise lost beacon or receive De-Authentication from AP, + // then we should delete BSSID from BssTable. + // If we don't delete from entry, roaming will fail. + // +- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel); ++ BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, ++ pAd->CommonCfg.Channel); + } + + // restore back to - +@@ -1902,31 +1968,28 @@ VOID LinkDown( + // 3. short preamble + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); + +- + } + +- +- for (i=1; iMacTab.Content[i].ValidAsCLI == TRUE) +- MacTableDeleteEntry(pAd, pAd->MacTab.Content[i].Aid, pAd->MacTab.Content[i].Addr); ++ MacTableDeleteEntry(pAd, pAd->MacTab.Content[i].Aid, ++ pAd->MacTab.Content[i].Addr); + } + +- AsicSetSlotTime(pAd, TRUE); //FALSE); ++ AsicSetSlotTime(pAd, TRUE); //FALSE); + AsicSetEdcaParm(pAd, NULL); + + // Set LED + RTMPSetLED(pAd, LED_LINK_DOWN); +- pAd->LedIndicatorStrength = 0xF0; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. ++ pAd->LedIndicatorStrength = 0xF0; ++ RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. + +- AsicDisableSync(pAd); ++ AsicDisableSync(pAd); + + pAd->Mlme.PeriodicRound = 0; + pAd->Mlme.OneSecPeriodicRound = 0; + +- if (pAd->StaCfg.BssType == BSS_INFRA) +- { ++ if (pAd->StaCfg.BssType == BSS_INFRA) { + // Remove StaCfg Information after link down + NdisZeroMemory(pAd->CommonCfg.Bssid, MAC_ADDR_LEN); + NdisZeroMemory(pAd->CommonCfg.Ssid, MAX_LEN_OF_SSID); +@@ -1939,36 +2002,29 @@ VOID LinkDown( + pAd->MlmeAux.NewExtChannelOffset = 0xff; + + // Reset WPA-PSK state. Only reset when supplicant enabled +- if (pAd->StaCfg.WpaState != SS_NOTUSE) +- { ++ if (pAd->StaCfg.WpaState != SS_NOTUSE) { + pAd->StaCfg.WpaState = SS_START; + // Clear Replay counter + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); + + } +- + // + // if link down come from AP, we need to remove all WPA keys on WPA mode. + // otherwise will cause 4-way handshaking failed, since the WPA key not empty. + // +- if ((IsReqFromAP) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) +- { ++ if ((IsReqFromAP) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) { + // Remove all WPA keys + RTMPWPARemoveAllKeys(pAd); + } +- + // 802.1x port control + + // Prevent clear PortSecured here with static WEP + // NetworkManger set security policy first then set SSID to connect AP. + if (pAd->StaCfg.WpaSupplicantUP && +- (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && +- (pAd->StaCfg.IEEE8021X == FALSE)) +- { ++ (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && ++ (pAd->StaCfg.IEEE8021X == FALSE)) { + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; +- } +- else +- { ++ } else { + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; + } +@@ -1980,19 +2036,21 @@ VOID LinkDown( + + pAd->StaCfg.MicErrCnt = 0; + +- pAd->IndicateMediaState = NdisMediaStateDisconnected; ++ pAd->IndicateMediaState = NdisMediaStateDisconnected; + // Update extra information to link is up + pAd->ExtraInfo = GENERAL_LINK_DOWN; + +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; ++ pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; + + #ifdef RTMP_MAC_USB + pAd->bUsbTxBulkAggre = FALSE; + #endif // RTMP_MAC_USB // + + // Clean association information +- NdisZeroMemory(&pAd->StaCfg.AssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); +- pAd->StaCfg.AssocInfo.Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ NdisZeroMemory(&pAd->StaCfg.AssocInfo, ++ sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); ++ pAd->StaCfg.AssocInfo.Length = ++ sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); + pAd->StaCfg.ReqVarIELen = 0; + pAd->StaCfg.ResVarIELen = 0; + +@@ -2013,30 +2071,29 @@ VOID LinkDown( + // + // After Link down, reset piggy-back setting in ASIC. Disable RDG. + // +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { ++ if (pAd->CommonCfg.BBPCurrentBW == BW_40) { + pAd->CommonCfg.BBPCurrentBW = BW_20; + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &ByteValue); + ByteValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, ByteValue); + } +- + // Reset DAC + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &ByteValue); + ByteValue &= (~0x18); +- if (pAd->Antenna.field.TxPath == 2) +- { ++ if (pAd->Antenna.field.TxPath == 2) { + ByteValue |= 0x10; + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, ByteValue); + +- RTMPSetPiggyBack(pAd,FALSE); ++ RTMPSetPiggyBack(pAd, FALSE); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED); + + pAd->CommonCfg.BACapability.word = pAd->CommonCfg.REGBACapability.word; + + // Restore all settings in the following. +- AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT|CCKSETPROTECT|OFDMSETPROTECT), TRUE, FALSE); ++ AsicUpdateProtect(pAd, 0, ++ (ALLN_SETPROTECT | CCKSETPROTECT | OFDMSETPROTECT), ++ TRUE, FALSE); + AsicDisableRDG(pAd); + pAd->CommonCfg.IOTestParm.bCurrentAtheros = FALSE; + pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = FALSE; +@@ -2050,9 +2107,8 @@ VOID LinkDown( + RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); + + #ifdef RT30xx +- if ((IS_RT30xx(pAd) || IS_RT3090(pAd)||IS_RT3390(pAd)) +- &&(pAd->Antenna.field.RxPath>1||pAd->Antenna.field.TxPath>1)) +- { ++ if ((IS_RT30xx(pAd) || IS_RT3090(pAd) || IS_RT3390(pAd)) ++ && (pAd->Antenna.field.RxPath > 1 || pAd->Antenna.field.TxPath > 1)) { + RTMP_ASIC_MMPS_DISABLE(pAd); + } + #endif // RT30xx // +@@ -2066,78 +2122,104 @@ VOID LinkDown( + + ========================================================================== + */ +-VOID IterateOnBssTab( +- IN PRTMP_ADAPTER pAd) ++VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + { +- MLME_START_REQ_STRUCT StartReq; +- MLME_JOIN_REQ_STRUCT JoinReq; +- ULONG BssIdx; ++ MLME_START_REQ_STRUCT StartReq; ++ MLME_JOIN_REQ_STRUCT JoinReq; ++ ULONG BssIdx; + + // Change the wepstatus to original wepstatus +- pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; +- pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; ++ pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; ++ pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; + + BssIdx = pAd->MlmeAux.BssIdx; +- if (BssIdx < pAd->MlmeAux.SsidBssTab.BssNr) +- { ++ if (BssIdx < pAd->MlmeAux.SsidBssTab.BssNr) { + // Check cipher suite, AP must have more secured cipher than station setting + // Set the Pairwise and Group cipher to match the intended AP setting + // We can only connect to AP with less secured cipher setting +- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipher) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipher; +- else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA.PairCipherAux; ++ if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ++ || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) { ++ pAd->StaCfg.GroupCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA. ++ GroupCipher; ++ ++ if (pAd->StaCfg.WepStatus == ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA. ++ PairCipher) ++ pAd->StaCfg.PairCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. ++ WPA.PairCipher; ++ else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA. ++ PairCipherAux != Ndis802_11WEPDisabled) ++ pAd->StaCfg.PairCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. ++ WPA.PairCipherAux; + else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; +- } +- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)) +- { +- pAd->StaCfg.GroupCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.GroupCipher; +- +- if (pAd->StaCfg.WepStatus == pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipher) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipher; +- else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipherAux != Ndis802_11WEPDisabled) +- pAd->StaCfg.PairCipher = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.PairCipherAux; ++ pAd->StaCfg.PairCipher = ++ Ndis802_11Encryption2Enabled; ++ } else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ++ || (pAd->StaCfg.AuthMode == ++ Ndis802_11AuthModeWPA2PSK)) { ++ pAd->StaCfg.GroupCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2. ++ GroupCipher; ++ ++ if (pAd->StaCfg.WepStatus == ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2. ++ PairCipher) ++ pAd->StaCfg.PairCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. ++ WPA2.PairCipher; ++ else if (pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2. ++ PairCipherAux != Ndis802_11WEPDisabled) ++ pAd->StaCfg.PairCipher = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. ++ WPA2.PairCipherAux; + else // There is no PairCipher Aux, downgrade our capability to TKIP +- pAd->StaCfg.PairCipher = Ndis802_11Encryption2Enabled; ++ pAd->StaCfg.PairCipher = ++ Ndis802_11Encryption2Enabled; + + // RSN capability +- pAd->StaCfg.RsnCapability = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.RsnCapability; ++ pAd->StaCfg.RsnCapability = ++ pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2. ++ RsnCapability; + } +- + // Set Mix cipher flag +- pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE; ++ pAd->StaCfg.bMixCipher = ++ (pAd->StaCfg.PairCipher == ++ pAd->StaCfg.GroupCipher) ? FALSE : TRUE; + /*if (pAd->StaCfg.bMixCipher == TRUE) +- { +- // If mix cipher, re-build RSNIE +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); +- }*/ +- +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - iterate BSS %ld of %d\n", BssIdx, pAd->MlmeAux.SsidBssTab.BssNr)); ++ { ++ // If mix cipher, re-build RSNIE ++ RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); ++ } */ ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - iterate BSS %ld of %d\n", BssIdx, ++ pAd->MlmeAux.SsidBssTab.BssNr)); + JoinParmFill(pAd, &JoinReq, BssIdx); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, sizeof(MLME_JOIN_REQ_STRUCT), +- &JoinReq); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, ++ sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; +- } +- else if (pAd->StaCfg.BssType == BSS_ADHOC) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All BSS fail; start a new ADHOC (Ssid=%s)...\n",pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); +- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ } else if (pAd->StaCfg.BssType == BSS_ADHOC) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - All BSS fail; start a new ADHOC (Ssid=%s)...\n", ++ pAd->MlmeAux.Ssid)); ++ StartParmFill(pAd, &StartReq, (PCHAR) pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen); ++ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, ++ sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } +- else // no more BSS ++ } else // no more BSS + { + + { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n", ++ pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); + } + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +@@ -2146,38 +2228,40 @@ VOID IterateOnBssTab( + + // for re-association only + // IRQL = DISPATCH_LEVEL +-VOID IterateOnBssTab2( +- IN PRTMP_ADAPTER pAd) ++VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + { + MLME_REASSOC_REQ_STRUCT ReassocReq; +- ULONG BssIdx; +- BSS_ENTRY *pBss; ++ ULONG BssIdx; ++ BSS_ENTRY *pBss; + + BssIdx = pAd->MlmeAux.RoamIdx; + pBss = &pAd->MlmeAux.RoamTab.BssEntry[BssIdx]; + +- if (BssIdx < pAd->MlmeAux.RoamTab.BssNr) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - iterate BSS %ld of %d\n", BssIdx, pAd->MlmeAux.RoamTab.BssNr)); ++ if (BssIdx < pAd->MlmeAux.RoamTab.BssNr) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - iterate BSS %ld of %d\n", BssIdx, ++ pAd->MlmeAux.RoamTab.BssNr)); + + AsicSwitchChannel(pAd, pBss->Channel, FALSE); + AsicLockChannel(pAd, pBss->Channel); + + // reassociate message has the same structure as associate message +- AssocParmFill(pAd, &ReassocReq, pBss->Bssid, pBss->CapabilityInfo, +- ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount); ++ AssocParmFill(pAd, &ReassocReq, pBss->Bssid, ++ pBss->CapabilityInfo, ASSOC_TIMEOUT, ++ pAd->StaCfg.DefaultListenCount); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ, +- sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq); ++ sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC; +- } +- else // no more BSS ++ } else // no more BSS + { + + { +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); ++ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); ++ AsicLockChannel(pAd, pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("CNTL - All roaming failed, restore to channel %d, Total BSS[%02d]\n", ++ pAd->CommonCfg.Channel, pAd->ScanTab.BssNr)); + } + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +@@ -2192,10 +2276,8 @@ VOID IterateOnBssTab2( + + ========================================================================== + */ +-VOID JoinParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, +- IN ULONG BssIdx) ++VOID JoinParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, IN ULONG BssIdx) + { + JoinReq->BssIdx = BssIdx; + } +@@ -2208,15 +2290,12 @@ VOID JoinParmFill( + + ========================================================================== + */ +-VOID ScanParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN UCHAR ScanType) ++VOID ScanParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, ++ IN STRING Ssid[], ++ IN UCHAR SsidLen, IN UCHAR BssType, IN UCHAR ScanType) + { +- NdisZeroMemory(ScanReq->Ssid, MAX_LEN_OF_SSID); ++ NdisZeroMemory(ScanReq->Ssid, MAX_LEN_OF_SSID); + ScanReq->SsidLen = SsidLen; + NdisMoveMemory(ScanReq->Ssid, Ssid, SsidLen); + ScanReq->BssType = BssType; +@@ -2231,11 +2310,9 @@ VOID ScanParmFill( + + ========================================================================== + */ +-VOID StartParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT *StartReq, +- IN CHAR Ssid[], +- IN UCHAR SsidLen) ++VOID StartParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_START_REQ_STRUCT * StartReq, ++ IN CHAR Ssid[], IN UCHAR SsidLen) + { + ASSERT(SsidLen <= MAX_LEN_OF_SSID); + NdisMoveMemory(StartReq->Ssid, Ssid, SsidLen); +@@ -2250,11 +2327,9 @@ VOID StartParmFill( + + ========================================================================== + */ +-VOID AuthParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, +- IN PUCHAR pAddr, +- IN USHORT Alg) ++VOID AuthParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, ++ IN PUCHAR pAddr, IN USHORT Alg) + { + COPY_MAC_ADDR(AuthReq->Addr, pAddr); + AuthReq->Alg = Alg; +@@ -2270,8 +2345,7 @@ VOID AuthParmFill( + ========================================================================== + */ + #ifdef RTMP_MAC_PCI +-VOID ComposePsPoll( +- IN PRTMP_ADAPTER pAd) ++VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + { + NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); + pAd->PsPollFrame.FC.Type = BTYPE_CNTL; +@@ -2282,8 +2356,7 @@ VOID ComposePsPoll( + } + + // IRQL = DISPATCH_LEVEL +-VOID ComposeNullFrame( +- IN PRTMP_ADAPTER pAd) ++VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { + NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; +@@ -2295,19 +2368,16 @@ VOID ComposeNullFrame( + } + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +-VOID MlmeCntlConfirm( +- IN PRTMP_ADAPTER pAd, +- IN ULONG MsgType, +- IN USHORT Msg) ++VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg) + { +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), ++ &Msg); + } + +-VOID ComposePsPoll( +- IN PRTMP_ADAPTER pAd) ++VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + { +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; ++ PTXINFO_STRUC pTxInfo; ++ PTXWI_STRUC pTxWI; + + DBGPRINT(RT_DEBUG_TRACE, ("ComposePsPoll\n")); + NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); +@@ -2319,23 +2389,34 @@ VOID ComposePsPoll( + COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid); + COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); + +- RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0], 100); +- pTxInfo = (PTXINFO_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0]; +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(PSPOLL_FRAME)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +- pTxWI = (PTXWI_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE]; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(PSPOLL_FRAME)), +- 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field. ++ WirelessPacket[0], 100); ++ pTxInfo = ++ (PTXINFO_STRUC) & pAd->PsPollContext.TransferBuffer->field. ++ WirelessPacket[0]; ++ RTMPWriteTxInfo(pAd, pTxInfo, ++ (USHORT) (sizeof(PSPOLL_FRAME) + TXWI_SIZE), TRUE, ++ EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ pTxWI = ++ (PTXWI_STRUC) & pAd->PsPollContext.TransferBuffer->field. ++ WirelessPacket[TXINFO_SIZE]; ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, ++ BSSID_WCID, (sizeof(PSPOLL_FRAME)), 0, 0, ++ (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field. ++ WirelessPacket[TXWI_SIZE + TXINFO_SIZE], ++ &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); + // Append 4 extra zero bytes. +- pAd->PsPollContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; ++ pAd->PsPollContext.BulkOutSize = ++ TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; + } + + // IRQL = DISPATCH_LEVEL +-VOID ComposeNullFrame( +- IN PRTMP_ADAPTER pAd) ++VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; ++ PTXINFO_STRUC pTxInfo; ++ PTXWI_STRUC pTxWI; + + NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; +@@ -2344,14 +2425,26 @@ VOID ComposeNullFrame( + COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid); + COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); +- RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[0], 100); +- pTxInfo = (PTXINFO_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[0]; +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); +- pTxWI = (PTXWI_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE]; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), +- 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); +- RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); +- pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; ++ RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field. ++ WirelessPacket[0], 100); ++ pTxInfo = ++ (PTXINFO_STRUC) & pAd->NullContext.TransferBuffer->field. ++ WirelessPacket[0]; ++ RTMPWriteTxInfo(pAd, pTxInfo, ++ (USHORT) (sizeof(HEADER_802_11) + TXWI_SIZE), TRUE, ++ EpToQueue[MGMTPIPEIDX], FALSE, FALSE); ++ pTxWI = ++ (PTXWI_STRUC) & pAd->NullContext.TransferBuffer->field. ++ WirelessPacket[TXINFO_SIZE]; ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, ++ BSSID_WCID, (sizeof(HEADER_802_11)), 0, 0, ++ (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); ++ RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field. ++ WirelessPacket[TXWI_SIZE + TXINFO_SIZE], &pAd->NullFrame, ++ sizeof(HEADER_802_11)); ++ pAd->NullContext.BulkOutSize = ++ TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + } + #endif // RTMP_MAC_USB // + +@@ -2365,45 +2458,42 @@ VOID ComposeNullFrame( + + ========================================================================== + */ +-ULONG MakeIbssBeacon( +- IN PRTMP_ADAPTER pAd) ++ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + { +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = {IE_ERP, 1, 0x04}; ++ UCHAR DsLen = 1, IbssLen = 2; ++ UCHAR LocalErpIe[3] = { IE_ERP, 1, 0x04 }; + HEADER_802_11 BcnHdr; +- USHORT CapabilityInfo; ++ USHORT CapabilityInfo; + LARGE_INTEGER FakeTimestamp; +- ULONG FrameLen = 0; +- PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; +- UCHAR *pBeaconFrame = pAd->BeaconBuf; +- BOOLEAN Privacy; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen = 0; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen = 0; +- UCHAR RSNIe = IE_WPA; +- +- if ((pAd->CommonCfg.PhyMode == PHY_11B) && (pAd->CommonCfg.Channel <= 14)) +- { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps ++ ULONG FrameLen = 0; ++ PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; ++ UCHAR *pBeaconFrame = pAd->BeaconBuf; ++ BOOLEAN Privacy; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen = 0; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR ExtRateLen = 0; ++ UCHAR RSNIe = IE_WPA; ++ ++ if ((pAd->CommonCfg.PhyMode == PHY_11B) ++ && (pAd->CommonCfg.Channel <= 14)) { ++ SupRate[0] = 0x82; // 1 mbps ++ SupRate[1] = 0x84; // 2 mbps ++ SupRate[2] = 0x8b; // 5.5 mbps ++ SupRate[3] = 0x96; // 11 mbps + SupRateLen = 4; + ExtRateLen = 0; +- } +- else if (pAd->CommonCfg.Channel > 14) +- { +- SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- SupRateLen = 8; +- ExtRateLen = 0; ++ } else if (pAd->CommonCfg.Channel > 14) { ++ SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate ++ SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps ++ SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate ++ SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps ++ SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate ++ SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps ++ SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps ++ SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ SupRateLen = 8; ++ ExtRateLen = 0; + + // + // Also Update MlmeRate & RtsRate for G only & A only +@@ -2411,27 +2501,28 @@ ULONG MakeIbssBeacon( + pAd->CommonCfg.MlmeRate = RATE_6; + pAd->CommonCfg.RtsRate = RATE_6; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +- pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = MODE_OFDM; +- pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; +- } +- else +- { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps ++ pAd->CommonCfg.MlmeTransmit.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MODE = ++ MODE_OFDM; ++ pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = ++ OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; ++ } else { ++ SupRate[0] = 0x82; // 1 mbps ++ SupRate[1] = 0x84; // 2 mbps ++ SupRate[2] = 0x8b; // 5.5 mbps ++ SupRate[3] = 0x96; // 11 mbps + SupRateLen = 4; + +- ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps, +- ExtRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- ExtRate[2] = 0x18; // 12 mbps, in units of 0.5 Mbps, +- ExtRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- ExtRate[4] = 0x30; // 24 mbps, in units of 0.5 Mbps, +- ExtRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- ExtRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- ExtRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps +- ExtRateLen = 8; ++ ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps, ++ ExtRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps ++ ExtRate[2] = 0x18; // 12 mbps, in units of 0.5 Mbps, ++ ExtRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps ++ ExtRate[4] = 0x30; // 24 mbps, in units of 0.5 Mbps, ++ ExtRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps ++ ExtRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps ++ ExtRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ ExtRateLen = 8; + } + + pAd->StaActive.SupRateLen = SupRateLen; +@@ -2440,61 +2531,59 @@ ULONG MakeIbssBeacon( + NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, ExtRateLen); + + // compose IBSS beacon frame +- MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, BROADCAST_ADDR, pAd->CommonCfg.Bssid); +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- CapabilityInfo = CAP_GENERATE(0, 1, Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 0, 0); +- +- MakeOutgoingFrame(pBeaconFrame, &FrameLen, +- sizeof(HEADER_802_11), &BcnHdr, +- TIMESTAMP_LEN, &FakeTimestamp, +- 2, &pAd->CommonCfg.BeaconPeriod, +- 2, &CapabilityInfo, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &SupRateLen, +- SupRateLen, SupRate, +- 1, &DsIe, +- 1, &DsLen, +- 1, &pAd->CommonCfg.Channel, +- 1, &IbssIe, +- 1, &IbssLen, +- 2, &pAd->StaActive.AtimWin, +- END_OF_ARGS); ++ MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, BROADCAST_ADDR, ++ pAd->CommonCfg.Bssid); ++ Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) ++ || (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) ++ || (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); ++ CapabilityInfo = ++ CAP_GENERATE(0, 1, Privacy, ++ (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), ++ 0, 0); ++ ++ MakeOutgoingFrame(pBeaconFrame, &FrameLen, ++ sizeof(HEADER_802_11), &BcnHdr, ++ TIMESTAMP_LEN, &FakeTimestamp, ++ 2, &pAd->CommonCfg.BeaconPeriod, ++ 2, &CapabilityInfo, ++ 1, &SsidIe, ++ 1, &pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, ++ 1, &SupRateIe, ++ 1, &SupRateLen, ++ SupRateLen, SupRate, ++ 1, &DsIe, ++ 1, &DsLen, ++ 1, &pAd->CommonCfg.Channel, ++ 1, &IbssIe, ++ 1, &IbssLen, 2, &pAd->StaActive.AtimWin, END_OF_ARGS); + + // add ERP_IE and EXT_RAE IE of in 802.11g +- if (ExtRateLen) +- { +- ULONG tmp; +- +- MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, +- 3, LocalErpIe, +- 1, &ExtRateIe, +- 1, &ExtRateLen, +- ExtRateLen, ExtRate, +- END_OF_ARGS); ++ if (ExtRateLen) { ++ ULONG tmp; ++ ++ MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, ++ 3, LocalErpIe, ++ 1, &ExtRateIe, ++ 1, &ExtRateLen, ++ ExtRateLen, ExtRate, END_OF_ARGS); + FrameLen += tmp; + } +- + // If adhoc secruity is set for WPA-None, append the cipher suite IE +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { ++ if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { + ULONG tmp; +- RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); +- +- MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); ++ RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, ++ BSS0); ++ ++ MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, ++ 1, &RSNIe, ++ 1, &pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, ++ END_OF_ARGS); + FrameLen += tmp; + } + +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) +- { ++ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { + ULONG TmpLen; + UCHAR HtLen, HtLen1; + +@@ -2502,34 +2591,35 @@ ULONG MakeIbssBeacon( + HtLen = sizeof(pAd->CommonCfg.HtCapability); + HtLen1 = sizeof(pAd->CommonCfg.AddHTInfo); + +- MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &HtLen, +- HtLen, &pAd->CommonCfg.HtCapability, +- 1, &AddHtInfoIe, +- 1, &HtLen1, +- HtLen1, &pAd->CommonCfg.AddHTInfo, +- END_OF_ARGS); ++ MakeOutgoingFrame(pBeaconFrame + FrameLen, &TmpLen, ++ 1, &HtCapIe, ++ 1, &HtLen, ++ HtLen, &pAd->CommonCfg.HtCapability, ++ 1, &AddHtInfoIe, ++ 1, &HtLen1, ++ HtLen1, &pAd->CommonCfg.AddHTInfo, ++ END_OF_ARGS); + + FrameLen += TmpLen; + } +- + //beacon use reserved WCID 0xff +- if (pAd->CommonCfg.Channel > 14) +- { +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, 0, 0xff, FrameLen, +- PID_MGMT, PID_BEACON, RATE_1, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); +- } +- else +- { +- // Set to use 1Mbps for Adhoc beacon. ++ if (pAd->CommonCfg.Channel > 14) { ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, ++ TRUE, 0, 0xff, FrameLen, PID_MGMT, PID_BEACON, ++ RATE_1, IFS_HTTXOP, FALSE, ++ &pAd->CommonCfg.MlmeTransmit); ++ } else { ++ // Set to use 1Mbps for Adhoc beacon. + HTTRANSMIT_SETTING Transmit; +- Transmit.word = 0; +- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, 0, 0xff, FrameLen, +- PID_MGMT, PID_BEACON, RATE_1, IFS_HTTXOP, FALSE, &Transmit); +- } ++ Transmit.word = 0; ++ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, ++ TRUE, 0, 0xff, FrameLen, PID_MGMT, PID_BEACON, ++ RATE_1, IFS_HTTXOP, FALSE, &Transmit); ++ } + +- DBGPRINT(RT_DEBUG_TRACE, ("MakeIbssBeacon (len=%ld), SupRateLen=%d, ExtRateLen=%d, Channel=%d, PhyMode=%d\n", +- FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, pAd->CommonCfg.PhyMode)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MakeIbssBeacon (len=%ld), SupRateLen=%d, ExtRateLen=%d, Channel=%d, PhyMode=%d\n", ++ FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, ++ pAd->CommonCfg.PhyMode)); + return FrameLen; + } +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index 0ab3dce..3a93ef6 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -36,107 +36,164 @@ + */ + #include "../rt_config.h" + +- +- +-VOID STARxEAPOLFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- UCHAR *pTmpBuf; ++ PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ UCHAR *pTmpBuf; + +- if (pAd->StaCfg.WpaSupplicantUP) +- { ++ if (pAd->StaCfg.WpaSupplicantUP) { + // All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon) + // TBD : process fragmented EAPol frames + { + // In 802.1x mode, if the received frame is EAP-SUCCESS packet, turn on the PortSecured variable +- if ( pAd->StaCfg.IEEE8021X == TRUE && +- (EAP_CODE_SUCCESS == WpaCheckEapCode(pAd, pRxBlk->pData, pRxBlk->DataSize, LENGTH_802_1_H))) +- { +- PUCHAR Key; +- UCHAR CipherAlg; +- int idx = 0; +- +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("Receive EAP-SUCCESS Packet\n")); ++ if (pAd->StaCfg.IEEE8021X == TRUE && ++ (EAP_CODE_SUCCESS == ++ WpaCheckEapCode(pAd, pRxBlk->pData, ++ pRxBlk->DataSize, ++ LENGTH_802_1_H))) { ++ PUCHAR Key; ++ UCHAR CipherAlg; ++ int idx = 0; ++ ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("Receive EAP-SUCCESS Packet\n")); + //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; + STA_PORT_SECURED(pAd); + +- if (pAd->StaCfg.IEEE8021x_required_keys == FALSE) +- { +- idx = pAd->StaCfg.DesireSharedKeyId; +- CipherAlg = pAd->StaCfg.DesireSharedKey[idx].CipherAlg; +- Key = pAd->StaCfg.DesireSharedKey[idx].Key; +- +- if (pAd->StaCfg.DesireSharedKey[idx].KeyLen > 0) +- { ++ if (pAd->StaCfg.IEEE8021x_required_keys == ++ FALSE) { ++ idx = pAd->StaCfg.DesireSharedKeyId; ++ CipherAlg = ++ pAd->StaCfg.DesireSharedKey[idx]. ++ CipherAlg; ++ Key = ++ pAd->StaCfg.DesireSharedKey[idx]. ++ Key; ++ ++ if (pAd->StaCfg.DesireSharedKey[idx]. ++ KeyLen > 0) { + #ifdef RTMP_MAC_PCI +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ MAC_TABLE_ENTRY *pEntry = ++ &pAd->MacTab. ++ Content[BSSID_WCID]; + + // Set key material and cipherAlg to Asic +- AsicAddSharedKeyEntry(pAd, BSS0, idx, CipherAlg, Key, NULL, NULL); ++ AsicAddSharedKeyEntry(pAd, BSS0, ++ idx, ++ CipherAlg, ++ Key, NULL, ++ NULL); + + // Assign group key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, NULL); ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ idx, ++ CipherAlg, ++ NULL); + + // Assign pairwise key info +- RTMPAddWcidAttributeEntry(pAd, BSS0, idx, CipherAlg, pEntry); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; ++ RTMPAddWcidAttributeEntry(pAd, ++ BSS0, ++ idx, ++ CipherAlg, ++ pEntry); ++ ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; ++ pAd->ExtraInfo = ++ GENERAL_LINK_UP; + #endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +- union +- { +- char buf[sizeof(NDIS_802_11_WEP)+MAX_LEN_OF_KEY- 1]; ++ union { ++ char buf[sizeof ++ (NDIS_802_11_WEP) ++ + ++ MAX_LEN_OF_KEY ++ - 1]; + NDIS_802_11_WEP keyinfo; +- } WepKey; ++ } ++ WepKey; + int len; + +- +- NdisZeroMemory(&WepKey, sizeof(WepKey)); +- len =pAd->StaCfg.DesireSharedKey[idx].KeyLen; +- +- NdisMoveMemory(WepKey.keyinfo.KeyMaterial, +- pAd->StaCfg.DesireSharedKey[idx].Key, +- pAd->StaCfg.DesireSharedKey[idx].KeyLen); +- +- WepKey.keyinfo.KeyIndex = 0x80000000 + idx; ++ NdisZeroMemory(&WepKey, ++ sizeof(WepKey)); ++ len = ++ pAd->StaCfg. ++ DesireSharedKey[idx].KeyLen; ++ ++ NdisMoveMemory(WepKey.keyinfo. ++ KeyMaterial, ++ pAd->StaCfg. ++ DesireSharedKey ++ [idx].Key, ++ pAd->StaCfg. ++ DesireSharedKey ++ [idx].KeyLen); ++ ++ WepKey.keyinfo.KeyIndex = ++ 0x80000000 + idx; + WepKey.keyinfo.KeyLength = len; +- pAd->SharedKey[BSS0][idx].KeyLen =(UCHAR) (len <= 5 ? 5 : 13); +- +- pAd->IndicateMediaState = NdisMediaStateConnected; +- pAd->ExtraInfo = GENERAL_LINK_UP; ++ pAd->SharedKey[BSS0][idx]. ++ KeyLen = ++ (UCHAR) (len <= 5 ? 5 : 13); ++ ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; ++ pAd->ExtraInfo = ++ GENERAL_LINK_UP; + // need to enqueue cmd to thread +- RTUSBEnqueueCmdFromNdis(pAd, OID_802_11_ADD_WEP, TRUE, &WepKey, sizeof(WepKey.keyinfo) + len - 1); ++ RTUSBEnqueueCmdFromNdis(pAd, ++ OID_802_11_ADD_WEP, ++ TRUE, ++ &WepKey, ++ sizeof ++ (WepKey. ++ keyinfo) ++ + len - ++ 1); + #endif // RTMP_MAC_USB // + // For Preventing ShardKey Table is cleared by remove key procedure. +- pAd->SharedKey[BSS0][idx].CipherAlg = CipherAlg; +- pAd->SharedKey[BSS0][idx].KeyLen = pAd->StaCfg.DesireSharedKey[idx].KeyLen; +- NdisMoveMemory(pAd->SharedKey[BSS0][idx].Key, +- pAd->StaCfg.DesireSharedKey[idx].Key, +- pAd->StaCfg.DesireSharedKey[idx].KeyLen); +- } ++ pAd->SharedKey[BSS0][idx]. ++ CipherAlg = CipherAlg; ++ pAd->SharedKey[BSS0][idx]. ++ KeyLen = ++ pAd->StaCfg. ++ DesireSharedKey[idx].KeyLen; ++ NdisMoveMemory(pAd-> ++ SharedKey[BSS0] ++ [idx].Key, ++ pAd->StaCfg. ++ DesireSharedKey ++ [idx].Key, ++ pAd->StaCfg. ++ DesireSharedKey ++ [idx].KeyLen); ++ } + } + } + + Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); + return; + } +- } +- else +- { ++ } else { + // Special DATA frame that has to pass to MLME +- // 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process +- // 2. EAPOL handshaking frames when driver supplicant enabled, pass to MLME for special process ++ // 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process ++ // 2. EAPOL handshaking frames when driver supplicant enabled, pass to MLME for special process + { + pTmpBuf = pRxBlk->pData - LENGTH_802_11; + NdisMoveMemory(pTmpBuf, pRxBlk->pHeader, LENGTH_802_11); +- REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, pTmpBuf, pRxBlk->DataSize + LENGTH_802_11, pRxWI->RSSI0, pRxWI->RSSI1, pRxWI->RSSI2, pRxD->PlcpSignal); +- DBGPRINT_RAW(RT_DEBUG_TRACE, ("!!! report EAPOL/AIRONET DATA to MLME (len=%d) !!!\n", pRxBlk->DataSize)); ++ REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, ++ pTmpBuf, ++ pRxBlk->DataSize + ++ LENGTH_802_11, pRxWI->RSSI0, ++ pRxWI->RSSI1, pRxWI->RSSI2, ++ pRxD->PlcpSignal); ++ DBGPRINT_RAW(RT_DEBUG_TRACE, ++ ("!!! report EAPOL/AIRONET DATA to MLME (len=%d) !!!\n", ++ pRxBlk->DataSize)); + } + } + +@@ -145,126 +202,114 @@ VOID STARxEAPOLFrameIndicate( + + } + +-VOID STARxDataFrameAnnounce( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID) ++VOID STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { + + // non-EAP frame +- if (!RTMPCheckWPAframe(pAd, pEntry, pRxBlk->pData, pRxBlk->DataSize, FromWhichBSSID)) +- { ++ if (!RTMPCheckWPAframe ++ (pAd, pEntry, pRxBlk->pData, pRxBlk->DataSize, FromWhichBSSID)) { + + { + // drop all non-EAP DATA frame before + // this client's Port-Access-Control is secured +- if (pRxBlk->pHeader->FC.Wep) +- { ++ if (pRxBlk->pHeader->FC.Wep) { + // unsupported cipher suite +- if (pAd->StaCfg.WepStatus == Ndis802_11EncryptionDisabled) +- { ++ if (pAd->StaCfg.WepStatus == ++ Ndis802_11EncryptionDisabled) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, ++ pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } +- } +- else +- { ++ } else { + // encryption in-use but receive a non-EAPOL clear text frame, drop it +- if ((pAd->StaCfg.WepStatus != Ndis802_11EncryptionDisabled) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { ++ if ((pAd->StaCfg.WepStatus != ++ Ndis802_11EncryptionDisabled) ++ && (pAd->StaCfg.PortSecured == ++ WPA_802_1X_PORT_NOT_SECURED)) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, ++ pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + } + } + RX_BLK_CLEAR_FLAG(pRxBlk, fRX_EAP); +- if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_ARALINK)) +- { ++ if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_ARALINK)) { + // Normal legacy, AMPDU or AMSDU +- CmmRxnonRalinkFrameIndicate(pAd, pRxBlk, FromWhichBSSID); ++ CmmRxnonRalinkFrameIndicate(pAd, pRxBlk, ++ FromWhichBSSID); + +- } +- else +- { ++ } else { + // ARALINK +- CmmRxRalinkFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID); ++ CmmRxRalinkFrameIndicate(pAd, pEntry, pRxBlk, ++ FromWhichBSSID); + } +- } +- else +- { ++ } else { + RX_BLK_SET_FLAG(pRxBlk, fRX_EAP); + +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0)) +- { ++ if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) ++ && (pAd->CommonCfg.bDisableReordering == 0)) { + Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); +- } +- else +- { ++ } else { + // Determin the destination of the EAP frame + // to WPA state machine or upper layer +- STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID); ++ STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, ++ FromWhichBSSID); + } + } + } + +- + // For TKIP frame, calculate the MIC value +-BOOLEAN STACheckTkipMICValue( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk) ++BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN RX_BLK * pRxBlk) + { +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; +- UCHAR UserPriority = pRxBlk->UserPriority; +- PCIPHER_KEY pWpaKey; +- UCHAR *pDA, *pSA; ++ PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ UCHAR *pData = pRxBlk->pData; ++ USHORT DataSize = pRxBlk->DataSize; ++ UCHAR UserPriority = pRxBlk->UserPriority; ++ PCIPHER_KEY pWpaKey; ++ UCHAR *pDA, *pSA; + + pWpaKey = &pAd->SharedKey[BSS0][pRxBlk->pRxWI->KeyIndex]; + + pDA = pHeader->Addr1; +- if (RX_BLK_TEST_FLAG(pRxBlk, fRX_INFRA)) +- { ++ if (RX_BLK_TEST_FLAG(pRxBlk, fRX_INFRA)) { + pSA = pHeader->Addr3; +- } +- else +- { ++ } else { + pSA = pHeader->Addr2; + } + + if (RTMPTkipCompareMICValue(pAd, +- pData, +- pDA, +- pSA, +- pWpaKey->RxMic, +- UserPriority, +- DataSize) == FALSE) +- { +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error 2\n")); +- +- if (pAd->StaCfg.WpaSupplicantUP) +- { +- WpaSendMicFailureToWpaSupplicant(pAd, (pWpaKey->Type == PAIRWISEKEY) ? TRUE : FALSE); +- } +- else +- { ++ pData, ++ pDA, ++ pSA, ++ pWpaKey->RxMic, ++ UserPriority, DataSize) == FALSE) { ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Rx MIC Value error 2\n")); ++ ++ if (pAd->StaCfg.WpaSupplicantUP) { ++ WpaSendMicFailureToWpaSupplicant(pAd, ++ (pWpaKey->Type == ++ PAIRWISEKEY) ? TRUE : ++ FALSE); ++ } else { + RTMPReportMicError(pAd, pWpaKey); + } + + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, ++ NDIS_STATUS_FAILURE); + return FALSE; + } + + return TRUE; + } + +- + // + // All Rx routines use RX_BLK structure to hande rx events + // It is very important to build pRxBlk attributes +@@ -273,106 +318,112 @@ BOOLEAN STACheckTkipMICValue( + // 3. set payload size including LLC to DataSize + // 4. set some flags with RX_BLK_SET_FLAG() + // +-VOID STAHandleRxDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) ++VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- BOOLEAN bFragment = FALSE; +- MAC_TABLE_ENTRY *pEntry = NULL; +- UCHAR FromWhichBSSID = BSS0; +- UCHAR UserPriority = 0; ++ PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ BOOLEAN bFragment = FALSE; ++ MAC_TABLE_ENTRY *pEntry = NULL; ++ UCHAR FromWhichBSSID = BSS0; ++ UCHAR UserPriority = 0; + + { + // before LINK UP, all DATA frames are rejected +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } +- + // Drop not my BSS frames +- if (pRxD->MyBss == 0) +- { ++ if (pRxD->MyBss == 0) { + { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + } + + pAd->RalinkCounters.RxCountSinceLastNULL++; +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && (pHeader->FC.SubType & 0x08)) +- { ++ if (pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm.bAPSDCapable ++ && (pHeader->FC.SubType & 0x08)) { + UCHAR *pData; +- DBGPRINT(RT_DEBUG_INFO,("bAPSDCapable\n")); ++ DBGPRINT(RT_DEBUG_INFO, ("bAPSDCapable\n")); + + // Qos bit 4 +- pData = (PUCHAR)pHeader + LENGTH_802_11; +- if ((*pData >> 4) & 0x01) +- { +- DBGPRINT(RT_DEBUG_INFO,("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); ++ pData = (PUCHAR) pHeader + LENGTH_802_11; ++ if ((*pData >> 4) & 0x01) { ++ DBGPRINT(RT_DEBUG_INFO, ++ ("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); + pAd->CommonCfg.bInServicePeriod = FALSE; + + // Force driver to fall into sleep mode when rcv EOSP frame +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- USHORT TbttNumToNextWakeUp; +- USHORT NextDtim = pAd->StaCfg.DtimPeriod; +- ULONG Now; ++ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { ++ USHORT TbttNumToNextWakeUp; ++ USHORT NextDtim = ++ pAd->StaCfg.DtimPeriod; ++ ULONG Now; + + NdisGetSystemUpTime(&Now); +- NextDtim -= (USHORT)(Now - pAd->StaCfg.LastBeaconRxTime)/pAd->CommonCfg.BeaconPeriod; +- +- TbttNumToNextWakeUp = pAd->StaCfg.DefaultListenCount; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim)) ++ NextDtim -= ++ (USHORT) (Now - ++ pAd->StaCfg. ++ LastBeaconRxTime) / ++ pAd->CommonCfg.BeaconPeriod; ++ ++ TbttNumToNextWakeUp = ++ pAd->StaCfg.DefaultListenCount; ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_RECEIVE_DTIM) ++ && (TbttNumToNextWakeUp > NextDtim)) + TbttNumToNextWakeUp = NextDtim; + + RTMP_SET_PSM_BIT(pAd, PWR_SAVE); + // if WMM-APSD is failed, try to disable following line +- AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); ++ AsicSleepThenAutoWakeup(pAd, ++ TbttNumToNextWakeUp); + } + } + +- if ((pHeader->FC.MoreData) && (pAd->CommonCfg.bInServicePeriod)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("Sending another trigger frame when More Data bit is set to 1\n")); ++ if ((pHeader->FC.MoreData) ++ && (pAd->CommonCfg.bInServicePeriod)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("Sending another trigger frame when More Data bit is set to 1\n")); + } + } +- + // Drop NULL, CF-ACK(no data), CF-POLL(no data), and CF-ACK+CF-POLL(no data) data frame +- if ((pHeader->FC.SubType & 0x04)) // bit 2 : no DATA ++ if ((pHeader->FC.SubType & 0x04)) // bit 2 : no DATA + { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } ++ // Drop not my BSS frame (we can not only check the MyBss bit in RxD) + +- // Drop not my BSS frame (we can not only check the MyBss bit in RxD) +- +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + // Infrastructure mode, check address 2 for BSSID +- if (!RTMPEqualMemory(&pHeader->Addr2, &pAd->CommonCfg.Bssid, 6)) +- { ++ if (!RTMPEqualMemory ++ (&pHeader->Addr2, &pAd->CommonCfg.Bssid, 6)) { + // Receive frame not my BSSID +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ // release packet ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } +- } +- else // Ad-Hoc mode or Not associated ++ } else // Ad-Hoc mode or Not associated + { + // Ad-Hoc mode, check address 3 for BSSID +- if (!RTMPEqualMemory(&pHeader->Addr3, &pAd->CommonCfg.Bssid, 6)) +- { ++ if (!RTMPEqualMemory ++ (&pHeader->Addr3, &pAd->CommonCfg.Bssid, 6)) { + // Receive frame not my BSSID +- // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ // release packet ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + } +@@ -380,39 +431,35 @@ VOID STAHandleRxDataFrame( + // + // find pEntry + // +- if (pRxWI->WirelessCliID < MAX_LEN_OF_MAC_TABLE) +- { ++ if (pRxWI->WirelessCliID < MAX_LEN_OF_MAC_TABLE) { + pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; +- } +- else +- { ++ } else { + // 1. release packet if infra mode + // 2. new a pEntry if ad-hoc mode +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + + // infra or ad-hoc +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + RX_BLK_SET_FLAG(pRxBlk, fRX_INFRA); + ASSERT(pRxWI->WirelessCliID == BSSID_WCID); + } +- + // check Atheros Client +- if ((pEntry->bIAmBadAtheros == FALSE) && (pRxD->AMPDU == 1) && (pHeader->FC.Retry )) +- { ++ if ((pEntry->bIAmBadAtheros == FALSE) && (pRxD->AMPDU == 1) ++ && (pHeader->FC.Retry)) { + pEntry->bIAmBadAtheros = TRUE; + pAd->CommonCfg.IOTestParm.bCurrentAtheros = TRUE; + pAd->CommonCfg.IOTestParm.bLastAtheros = TRUE; +- if (!STA_AES_ON(pAd)) +- { +- AsicUpdateProtect(pAd, 8, ALLN_SETPROTECT, TRUE, FALSE); ++ if (!STA_AES_ON(pAd)) { ++ AsicUpdateProtect(pAd, 8, ALLN_SETPROTECT, TRUE, ++ FALSE); + } + } + } + +- pRxBlk->pData = (UCHAR *)pHeader; ++ pRxBlk->pData = (UCHAR *) pHeader; + + // + // update RxBlk->pData, DataSize +@@ -426,48 +473,41 @@ VOID STAHandleRxDataFrame( + } + + // 2. QOS +- if (pHeader->FC.SubType & 0x08) +- { ++ if (pHeader->FC.SubType & 0x08) { + RX_BLK_SET_FLAG(pRxBlk, fRX_QOS); + UserPriority = *(pRxBlk->pData) & 0x0f; + // bit 7 in QoS Control field signals the HT A-MSDU format +- if ((*pRxBlk->pData) & 0x80) +- { ++ if ((*pRxBlk->pData) & 0x80) { + RX_BLK_SET_FLAG(pRxBlk, fRX_AMSDU); + } +- + // skip QOS contorl field + pRxBlk->pData += 2; +- pRxBlk->DataSize -=2; ++ pRxBlk->DataSize -= 2; + } + pRxBlk->UserPriority = UserPriority; + + /* check if need to resend PS Poll when received packet with MoreData = 1 */ +- if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) +- { ++ if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) { + if ((((UserPriority == 0) || (UserPriority == 3)) && +- pAd->CommonCfg.bAPSDAC_BE == 0) || +- (((UserPriority == 1) || (UserPriority == 2)) && +- pAd->CommonCfg.bAPSDAC_BK == 0) || +- (((UserPriority == 4) || (UserPriority == 5)) && +- pAd->CommonCfg.bAPSDAC_VI == 0) || +- (((UserPriority == 6) || (UserPriority == 7)) && +- pAd->CommonCfg.bAPSDAC_VO == 0)) +- { ++ pAd->CommonCfg.bAPSDAC_BE == 0) || ++ (((UserPriority == 1) || (UserPriority == 2)) && ++ pAd->CommonCfg.bAPSDAC_BK == 0) || ++ (((UserPriority == 4) || (UserPriority == 5)) && ++ pAd->CommonCfg.bAPSDAC_VI == 0) || ++ (((UserPriority == 6) || (UserPriority == 7)) && ++ pAd->CommonCfg.bAPSDAC_VO == 0)) { + /* non-UAPSD delivery-enabled AC */ + RTMP_PS_POLL_ENQUEUE(pAd); + } + } +- + // 3. Order bit: A-Ralink or HTC+ +- if (pHeader->FC.Order) +- { ++ if (pHeader->FC.Order) { + #ifdef AGGREGATION_SUPPORT +- if ((pRxWI->PHYMODE <= MODE_OFDM) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED))) ++ if ((pRxWI->PHYMODE <= MODE_OFDM) ++ && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED))) + { + RX_BLK_SET_FLAG(pRxBlk, fRX_ARALINK); +- } +- else ++ } else + #endif // AGGREGATION_SUPPORT // + { + RX_BLK_SET_FLAG(pRxBlk, fRX_HTC); +@@ -476,102 +516,93 @@ VOID STAHandleRxDataFrame( + pRxBlk->DataSize -= 4; + } + } +- + // 4. skip HW padding +- if (pRxD->L2PAD) +- { ++ if (pRxD->L2PAD) { + // just move pData pointer + // because DataSize excluding HW padding + RX_BLK_SET_FLAG(pRxBlk, fRX_PAD); + pRxBlk->pData += 2; + } + +- if (pRxD->BA) +- { ++ if (pRxD->BA) { + RX_BLK_SET_FLAG(pRxBlk, fRX_AMPDU); + } +- + // + // Case I Process Broadcast & Multicast data frame + // +- if (pRxD->Bcast || pRxD->Mcast) +- { ++ if (pRxD->Bcast || pRxD->Mcast) { + INC_COUNTER64(pAd->WlanCounters.MulticastReceivedFrameCount); + + // Drop Mcast/Bcast frame with fragment bit on +- if (pHeader->FC.MoreFrag) +- { ++ if (pHeader->FC.MoreFrag) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } +- + // Filter out Bcast frame which AP relayed for us +- if (pHeader->FC.FrDs && MAC_ADDR_EQUAL(pHeader->Addr3, pAd->CurrentAddress)) +- { ++ if (pHeader->FC.FrDs ++ && MAC_ADDR_EQUAL(pHeader->Addr3, pAd->CurrentAddress)) { + // release packet +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + return; + } + + Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); + return; +- } +- else if (pRxD->U2M) +- { +- pAd->LastRxRate = (USHORT)((pRxWI->MCS) + (pRxWI->BW <<7) + (pRxWI->ShortGI <<8)+ (pRxWI->PHYMODE <<14)) ; ++ } else if (pRxD->U2M) { ++ pAd->LastRxRate = ++ (USHORT) ((pRxWI->MCS) + (pRxWI->BW << 7) + ++ (pRxWI->ShortGI << 8) + (pRxWI->PHYMODE << 14)); + +- if (ADHOC_ON(pAd)) +- { ++ if (ADHOC_ON(pAd)) { + pEntry = MacTableLookup(pAd, pHeader->Addr2); + if (pEntry) +- Update_Rssi_Sample(pAd, &pEntry->RssiSample, pRxWI); ++ Update_Rssi_Sample(pAd, &pEntry->RssiSample, ++ pRxWI); + } + +- + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); + +- pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); ++ pAd->StaCfg.LastSNR0 = (UCHAR) (pRxWI->SNR0); ++ pAd->StaCfg.LastSNR1 = (UCHAR) (pRxWI->SNR1); + + pAd->RalinkCounters.OneSecRxOkDataCnt++; + ++ if (!((pHeader->Frag == 0) && (pHeader->FC.MoreFrag == 0))) { ++ // re-assemble the fragmented packets ++ // return complete frame (pRxPacket) or NULL ++ bFragment = TRUE; ++ pRxPacket = RTMPDeFragmentDataFrame(pAd, pRxBlk); ++ } + +- if (!((pHeader->Frag == 0) && (pHeader->FC.MoreFrag == 0))) +- { +- // re-assemble the fragmented packets +- // return complete frame (pRxPacket) or NULL +- bFragment = TRUE; +- pRxPacket = RTMPDeFragmentDataFrame(pAd, pRxBlk); +- } +- +- if (pRxPacket) +- { ++ if (pRxPacket) { + pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; + +- // process complete frame +- if (bFragment && (pRxD->Decrypted) && (pEntry->WepStatus == Ndis802_11Encryption2Enabled)) +- { ++ // process complete frame ++ if (bFragment && (pRxD->Decrypted) ++ && (pEntry->WepStatus == ++ Ndis802_11Encryption2Enabled)) { + // Minus MIC length + pRxBlk->DataSize -= 8; + +- // For TKIP frame, calculate the MIC value +- if (STACheckTkipMICValue(pAd, pEntry, pRxBlk) == FALSE) +- { +- return; +- } +- } ++ // For TKIP frame, calculate the MIC value ++ if (STACheckTkipMICValue(pAd, pEntry, pRxBlk) == ++ FALSE) { ++ return; ++ } ++ } + +- STARxDataFrameAnnounce(pAd, pEntry, pRxBlk, FromWhichBSSID); ++ STARxDataFrameAnnounce(pAd, pEntry, pRxBlk, ++ FromWhichBSSID); ++ return; ++ } else { ++ // just return ++ // because RTMPDeFragmentDataFrame() will release rx packet, ++ // if packet is fragmented + return; +- } +- else +- { +- // just return +- // because RTMPDeFragmentDataFrame() will release rx packet, +- // if packet is fragmented +- return; +- } ++ } + } + + ASSERT(0); +@@ -579,25 +610,20 @@ VOID STAHandleRxDataFrame( + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + } + +-VOID STAHandleRxMgmtFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) ++VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { +- PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- +- do +- { ++ PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; + ++ do { + + /* check if need to resend PS Poll when received packet with MoreData = 1 */ +- if ((pAd->StaCfg.Psm == PWR_SAVE) && (pHeader->FC.MoreData == 1)) +- { ++ if ((pAd->StaCfg.Psm == PWR_SAVE) ++ && (pHeader->FC.MoreData == 1)) { + /* for UAPSD, all management frames will be VO priority */ +- if (pAd->CommonCfg.bAPSDAC_VO == 0) +- { ++ if (pAd->CommonCfg.bAPSDAC_VO == 0) { + /* non-UAPSD delivery-enabled AC */ + RTMP_PS_POLL_ENQUEUE(pAd); + } +@@ -605,57 +631,54 @@ VOID STAHandleRxMgmtFrame( + + /* TODO: if MoreData == 0, station can go to sleep */ + +- + // We should collect RSSI not only U2M data but also my beacon +- if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) +- && (pAd->RxAnt.EvaluatePeriod == 0)) +- { ++ if ((pHeader->FC.SubType == SUBTYPE_BEACON) ++ && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) ++ && (pAd->RxAnt.EvaluatePeriod == 0)) { + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); + +- pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); ++ pAd->StaCfg.LastSNR0 = (UCHAR) (pRxWI->SNR0); ++ pAd->StaCfg.LastSNR1 = (UCHAR) (pRxWI->SNR1); + } + +- + // First check the size, it MUST not exceed the mlme queue size +- if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) +- { ++ if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("STAHandleRxMgmtFrame: frame too large, size = %d \n", pRxWI->MPDUtotalByteCount)); + break; + } + +- REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, pHeader, pRxWI->MPDUtotalByteCount, +- pRxWI->RSSI0, pRxWI->RSSI1, pRxWI->RSSI2, pRxD->PlcpSignal); ++ REPORT_MGMT_FRAME_TO_MLME(pAd, pRxWI->WirelessCliID, pHeader, ++ pRxWI->MPDUtotalByteCount, ++ pRxWI->RSSI0, pRxWI->RSSI1, ++ pRxWI->RSSI2, pRxD->PlcpSignal); + } while (FALSE); + + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); + } + +-VOID STAHandleRxControlFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk) ++VOID STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- +- switch (pHeader->FC.SubType) +- { +- case SUBTYPE_BLOCK_ACK_REQ: +- { +- CntlEnqueueForRecv(pAd, pRxWI->WirelessCliID, (pRxWI->MPDUtotalByteCount), (PFRAME_BA_REQ)pHeader); +- } +- break; +- case SUBTYPE_BLOCK_ACK: +- case SUBTYPE_ACK: +- default: +- break; ++ PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ ++ switch (pHeader->FC.SubType) { ++ case SUBTYPE_BLOCK_ACK_REQ: ++ { ++ CntlEnqueueForRecv(pAd, pRxWI->WirelessCliID, ++ (pRxWI->MPDUtotalByteCount), ++ (PFRAME_BA_REQ) pHeader); ++ } ++ break; ++ case SUBTYPE_BLOCK_ACK: ++ case SUBTYPE_ACK: ++ default: ++ break; + } + + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + } + +- + /* + ======================================================================== + +@@ -675,45 +698,39 @@ VOID STAHandleRxControlFrame( + Need to consider QOS DATA format when converting to 802.3 + ======================================================================== + */ +-BOOLEAN STARxDoneInterruptHandle( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN argc) ++BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + { +- NDIS_STATUS Status; +- UINT32 RxProcessed, RxPending; +- BOOLEAN bReschedule = FALSE; +- RT28XX_RXD_STRUC *pRxD; +- UCHAR *pData; +- PRXWI_STRUC pRxWI; +- PNDIS_PACKET pRxPacket; +- PHEADER_802_11 pHeader; +- RX_BLK RxCell; ++ NDIS_STATUS Status; ++ UINT32 RxProcessed, RxPending; ++ BOOLEAN bReschedule = FALSE; ++ RT28XX_RXD_STRUC *pRxD; ++ UCHAR *pData; ++ PRXWI_STRUC pRxWI; ++ PNDIS_PACKET pRxPacket; ++ PHEADER_802_11 pHeader; ++ RX_BLK RxCell; + + RxProcessed = RxPending = 0; + + // process whole rx ring +- while (1) +- { ++ while (1) { + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF | +- fRTMP_ADAPTER_RESET_IN_PROGRESS | +- fRTMP_ADAPTER_HALT_IN_PROGRESS | +- fRTMP_ADAPTER_NIC_NOT_EXIST) || +- !RTMP_TEST_FLAG(pAd,fRTMP_ADAPTER_START_UP)) +- { ++ fRTMP_ADAPTER_RESET_IN_PROGRESS | ++ fRTMP_ADAPTER_HALT_IN_PROGRESS | ++ fRTMP_ADAPTER_NIC_NOT_EXIST) || ++ !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) { + break; + } +- + #ifdef RTMP_MAC_PCI +- if (RxProcessed++ > MAX_RX_PROCESS_CNT) +- { ++ if (RxProcessed++ > MAX_RX_PROCESS_CNT) { + // need to reschedule rx handle + bReschedule = TRUE; + break; + } + #endif // RTMP_MAC_PCI // + +- RxProcessed ++; // test ++ RxProcessed++; // test + + // 1. allocate a new data packet into rx ring to replace received packet + // then processing the received packet +@@ -722,19 +739,19 @@ BOOLEAN STARxDoneInterruptHandle( + // the rx packet must + // a. be indicated to upper layer or + // b. be released if it is discarded +- pRxPacket = GetPacketFromRxRing(pAd, &(RxCell.RxD), &bReschedule, &RxPending); +- if (pRxPacket == NULL) +- { ++ pRxPacket = ++ GetPacketFromRxRing(pAd, &(RxCell.RxD), &bReschedule, ++ &RxPending); ++ if (pRxPacket == NULL) { + // no more packet to process + break; + } +- + // get rx ring descriptor + pRxD = &(RxCell.RxD); + // get rx data buffer +- pData = GET_OS_PKT_DATAPTR(pRxPacket); +- pRxWI = (PRXWI_STRUC) pData; +- pHeader = (PHEADER_802_11) (pData+RXWI_SIZE) ; ++ pData = GET_OS_PKT_DATAPTR(pRxPacket); ++ pRxWI = (PRXWI_STRUC) pData; ++ pHeader = (PHEADER_802_11) (pData + RXWI_SIZE); + + // build RxCell + RxCell.pRxWI = pRxWI; +@@ -745,18 +762,19 @@ BOOLEAN STARxDoneInterruptHandle( + RxCell.Flags = 0; + + // Increase Total receive byte counter after real data received no mater any error or not +- pAd->RalinkCounters.ReceivedByteCount += pRxWI->MPDUtotalByteCount; +- pAd->RalinkCounters.OneSecReceivedByteCount += pRxWI->MPDUtotalByteCount; +- pAd->RalinkCounters.RxCount ++; ++ pAd->RalinkCounters.ReceivedByteCount += ++ pRxWI->MPDUtotalByteCount; ++ pAd->RalinkCounters.OneSecReceivedByteCount += ++ pRxWI->MPDUtotalByteCount; ++ pAd->RalinkCounters.RxCount++; + + INC_COUNTER64(pAd->WlanCounters.ReceivedFragmentCount); + + if (pRxWI->MPDUtotalByteCount < 14) + Status = NDIS_STATUS_FAILURE; + +- if (MONITOR_ON(pAd)) +- { +- send_monitor_packets(pAd, &RxCell); ++ if (MONITOR_ON(pAd)) { ++ send_monitor_packets(pAd, &RxCell); + break; + } + +@@ -766,40 +784,38 @@ BOOLEAN STARxDoneInterruptHandle( + Status = RTMPCheckRxError(pAd, pHeader, pRxWI, pRxD); + + // Handle the received frame +- if (Status == NDIS_STATUS_SUCCESS) +- { +- switch (pHeader->FC.Type) +- { ++ if (Status == NDIS_STATUS_SUCCESS) { ++ switch (pHeader->FC.Type) { + // CASE I, receive a DATA frame +- case BTYPE_DATA: ++ case BTYPE_DATA: + { + // process DATA frame + STAHandleRxDataFrame(pAd, &RxCell); + } + break; + // CASE II, receive a MGMT frame +- case BTYPE_MGMT: ++ case BTYPE_MGMT: + { + STAHandleRxMgmtFrame(pAd, &RxCell); + } + break; + // CASE III. receive a CNTL frame +- case BTYPE_CNTL: ++ case BTYPE_CNTL: + { + STAHandleRxControlFrame(pAd, &RxCell); + } + break; + // discard other type +- default: +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); +- break; ++ default: ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); ++ break; + } +- } +- else +- { ++ } else { + pAd->Counters8023.RxErrors++; + // discard this frame +- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); ++ RELEASE_NDIS_PACKET(pAd, pRxPacket, ++ NDIS_STATUS_FAILURE); + } + } + +@@ -817,8 +833,7 @@ BOOLEAN STARxDoneInterruptHandle( + + ======================================================================== + */ +-VOID RTMPHandleTwakeupInterrupt( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd) + { + AsicForceWakeup(pAd, FALSE); + } +@@ -841,47 +856,39 @@ Note: + You only can put OS-depened & STA related code in here. + ======================================================================== + */ +-VOID STASendPackets( +- IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, +- IN UINT NumberOfPackets) ++VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, ++ IN PPNDIS_PACKET ppPacketArray, IN UINT NumberOfPackets) + { +- UINT Index; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; +- PNDIS_PACKET pPacket; +- BOOLEAN allowToSend = FALSE; +- ++ UINT Index; ++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; ++ PNDIS_PACKET pPacket; ++ BOOLEAN allowToSend = FALSE; + +- for (Index = 0; Index < NumberOfPackets; Index++) +- { ++ for (Index = 0; Index < NumberOfPackets; Index++) { + pPacket = ppPacketArray[Index]; + +- do +- { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) || +- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- { ++ do { ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ++ || RTMP_TEST_FLAG(pAd, ++ fRTMP_ADAPTER_HALT_IN_PROGRESS) ++ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) { + // Drop send request since hardware is in reset state +- break; +- } +- else if (!INFRA_ON(pAd) && !ADHOC_ON(pAd)) +- { ++ break; ++ } else if (!INFRA_ON(pAd) && !ADHOC_ON(pAd)) { + // Drop send request since there are no physical connection yet +- break; +- } +- else +- { ++ break; ++ } else { + // Record that orignal packet source is from NDIS layer,so that + // later on driver knows how to release this NDIS PACKET +- RTMP_SET_PACKET_WCID(pPacket, 0); // this field is useless when in STA mode ++ RTMP_SET_PACKET_WCID(pPacket, 0); // this field is useless when in STA mode + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +- NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_PENDING); ++ NDIS_SET_PACKET_STATUS(pPacket, ++ NDIS_STATUS_PENDING); + pAd->RalinkCounters.PendingNdisPacketCount++; + + allowToSend = TRUE; + } +- } while(FALSE); ++ } while (FALSE); + + if (allowToSend == TRUE) + STASendPacket(pAd, pPacket); +@@ -894,7 +901,6 @@ VOID STASendPackets( + + } + +- + /* + ======================================================================== + Routine Description: +@@ -914,72 +920,64 @@ Note: + You only can put OS-indepened & STA related code in here. + ======================================================================== + */ +-NDIS_STATUS STASendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- UINT AllowFragSize; +- UCHAR NumberOfFrag; +- UCHAR RTSRequired; +- UCHAR QueIdx, UserPriority; ++ PACKET_INFO PacketInfo; ++ PUCHAR pSrcBufVA; ++ UINT SrcBufLen; ++ UINT AllowFragSize; ++ UCHAR NumberOfFrag; ++ UCHAR RTSRequired; ++ UCHAR QueIdx, UserPriority; + MAC_TABLE_ENTRY *pEntry = NULL; +- unsigned int IrqFlags; +- UCHAR FlgIsIP = 0; +- UCHAR Rate; ++ unsigned int IrqFlags; ++ UCHAR FlgIsIP = 0; ++ UCHAR Rate; + + // Prepare packet information structure for buffer descriptor + // chained within a single NDIS packet. + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +- if (pSrcBufVA == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket --> pSrcBufVA == NULL !!!SrcBufLen=%x\n",SrcBufLen)); ++ if (pSrcBufVA == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("STASendPacket --> pSrcBufVA == NULL !!!SrcBufLen=%x\n", ++ SrcBufLen)); + // Resourece is low, system did not allocate virtual address + // return NDIS_STATUS_FAILURE directly to upper layer + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return NDIS_STATUS_FAILURE; + } + +- +- if (SrcBufLen < 14) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket --> Ndis Packet buffer error !!!\n")); ++ if (SrcBufLen < 14) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("STASendPacket --> Ndis Packet buffer error !!!\n")); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return (NDIS_STATUS_FAILURE); + } +- + // In HT rate adhoc mode, A-MPDU is often used. So need to lookup BA Table and MAC Entry. + // Note multicast packets in adhoc also use BSSID_WCID index. + { +- if(INFRA_ON(pAd)) +- { +- { +- pEntry = &pAd->MacTab.Content[BSSID_WCID]; +- RTMP_SET_PACKET_WCID(pPacket, BSSID_WCID); +- Rate = pAd->CommonCfg.TxRate; +- } +- } +- else if (ADHOC_ON(pAd)) +- { +- if (*pSrcBufVA & 0x01) ++ if (INFRA_ON(pAd)) { + { ++ pEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ RTMP_SET_PACKET_WCID(pPacket, BSSID_WCID); ++ Rate = pAd->CommonCfg.TxRate; ++ } ++ } else if (ADHOC_ON(pAd)) { ++ if (*pSrcBufVA & 0x01) { + RTMP_SET_PACKET_WCID(pPacket, MCAST_WCID); + pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- } +- else +- { ++ } else { + pEntry = MacTableLookup(pAd, pSrcBufVA); + } + Rate = pAd->CommonCfg.TxRate; + } + } + +- if (!pEntry) +- { +- DBGPRINT(RT_DEBUG_ERROR,("STASendPacket->Cannot find pEntry(%2x:%2x:%2x:%2x:%2x:%2x) in MacTab!\n", PRINT_MAC(pSrcBufVA))); ++ if (!pEntry) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("STASendPacket->Cannot find pEntry(%2x:%2x:%2x:%2x:%2x:%2x) in MacTab!\n", ++ PRINT_MAC(pSrcBufVA))); + // Resourece is low, system did not allocate virtual address + // return NDIS_STATUS_FAILURE directly to upper layer + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +@@ -987,44 +985,39 @@ NDIS_STATUS STASendPacket( + } + + if (ADHOC_ON(pAd) +- ) +- { +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid); ++ ) { ++ RTMP_SET_PACKET_WCID(pPacket, (UCHAR) pEntry->Aid); + } +- + // + // Check the Ethernet Frame type of this packet, and set the RTMP_SET_PACKET_SPECIFIC flags. +- // Here we set the PACKET_SPECIFIC flags(LLC, VLAN, DHCP/ARP, EAPOL). ++ // Here we set the PACKET_SPECIFIC flags(LLC, VLAN, DHCP/ARP, EAPOL). + RTMPCheckEtherType(pAd, pPacket); + +- +- + // + // WPA 802.1x secured port control - drop all non-802.1x frame before port secured + // + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- || (pAd->StaCfg.IEEE8021X == TRUE) +- ) +- && ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) || (pAd->StaCfg.MicErrCnt >= 2)) +- && (RTMP_GET_PACKET_EAPOL(pPacket)== FALSE) +- ) +- { +- DBGPRINT(RT_DEBUG_TRACE,("STASendPacket --> Drop packet before port secured !!!\n")); ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ++ || (pAd->StaCfg.IEEE8021X == TRUE) ++ ) ++ && ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) ++ || (pAd->StaCfg.MicErrCnt >= 2)) ++ && (RTMP_GET_PACKET_EAPOL(pPacket) == FALSE) ++ ) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("STASendPacket --> Drop packet before port secured !!!\n")); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + + return (NDIS_STATUS_FAILURE); + } + +- + // STEP 1. Decide number of fragments required to deliver this MSDU. +- // The estimation here is not very accurate because difficult to +- // take encryption overhead into consideration here. The result +- // "NumberOfFrag" is then just used to pre-check if enough free +- // TXD are available to hold this MSDU. +- ++ // The estimation here is not very accurate because difficult to ++ // take encryption overhead into consideration here. The result ++ // "NumberOfFrag" is then just used to pre-check if enough free ++ // TXD are available to hold this MSDU. + + if (*pSrcBufVA & 0x01) // fragmentation not allowed on multicast & broadcast + NumberOfFrag = 1; +@@ -1032,10 +1025,10 @@ NDIS_STATUS STASendPacket( + NumberOfFrag = 1; // Aggregation overwhelms fragmentation + else if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED)) + NumberOfFrag = 1; // Aggregation overwhelms fragmentation +- else if ((pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTMIX) || (pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTGREENFIELD)) ++ else if ((pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTMIX) ++ || (pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTGREENFIELD)) + NumberOfFrag = 1; // MIMO RATE overwhelms fragmentation +- else +- { ++ else { + // The calculated "NumberOfFrag" is a rough estimation because of various + // encryption/encapsulation overhead not taken into consideration. This number is just + // used to make sure enough free TXD are available before fragmentation takes place. +@@ -1045,11 +1038,15 @@ NDIS_STATUS STASendPacket( + // resource, and the NDIS packet will be indicated NDIS_STATUS_FAILURE. This should + // rarely happen and the penalty is just like a TX RETRY fail. Affordable. + +- AllowFragSize = (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC; +- NumberOfFrag = ((PacketInfo.TotalPacketLength - LENGTH_802_3 + LENGTH_802_1_H) / AllowFragSize) + 1; ++ AllowFragSize = ++ (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - ++ LENGTH_CRC; ++ NumberOfFrag = ++ ((PacketInfo.TotalPacketLength - LENGTH_802_3 + ++ LENGTH_802_1_H) / AllowFragSize) + 1; + // To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size +- if (((PacketInfo.TotalPacketLength - LENGTH_802_3 + LENGTH_802_1_H) % AllowFragSize) == 0) +- { ++ if (((PacketInfo.TotalPacketLength - LENGTH_802_3 + ++ LENGTH_802_1_H) % AllowFragSize) == 0) { + NumberOfFrag--; + } + } +@@ -1057,16 +1054,19 @@ NDIS_STATUS STASendPacket( + // Save fragment number to Ndis packet reserved field + RTMP_SET_PACKET_FRAGMENTS(pPacket, NumberOfFrag); + +- + // STEP 2. Check the requirement of RTS: +- // If multiple fragment required, RTS is required only for the first fragment +- // if the fragment size large than RTS threshold ++ // If multiple fragment required, RTS is required only for the first fragment ++ // if the fragment size large than RTS threshold + // For RT28xx, Let ASIC send RTS/CTS +-// RTMP_SET_PACKET_RTS(pPacket, 0); ++// RTMP_SET_PACKET_RTS(pPacket, 0); + if (NumberOfFrag > 1) +- RTSRequired = (pAd->CommonCfg.FragmentThreshold > pAd->CommonCfg.RtsThreshold) ? 1 : 0; ++ RTSRequired = ++ (pAd->CommonCfg.FragmentThreshold > ++ pAd->CommonCfg.RtsThreshold) ? 1 : 0; + else +- RTSRequired = (PacketInfo.TotalPacketLength > pAd->CommonCfg.RtsThreshold) ? 1 : 0; ++ RTSRequired = ++ (PacketInfo.TotalPacketLength > ++ pAd->CommonCfg.RtsThreshold) ? 1 : 0; + + // Save RTS requirement to Ndis packet reserved field + RTMP_SET_PACKET_RTS(pPacket, RTSRequired); +@@ -1076,32 +1076,33 @@ NDIS_STATUS STASendPacket( + // STEP 3. Traffic classification. outcome = + // + UserPriority = 0; +- QueIdx = QID_AC_BE; ++ QueIdx = QID_AC_BE; + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) +- { ++ CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) { + USHORT Protocol; +- UCHAR LlcSnapLen = 0, Byte0, Byte1; +- do +- { ++ UCHAR LlcSnapLen = 0, Byte0, Byte1; ++ do { + // get Ethernet protocol field +- Protocol = (USHORT)((pSrcBufVA[12] << 8) + pSrcBufVA[13]); +- if (Protocol <= 1500) +- { ++ Protocol = ++ (USHORT) ((pSrcBufVA[12] << 8) + pSrcBufVA[13]); ++ if (Protocol <= 1500) { + // get Ethernet protocol field from LLC/SNAP +- if (Sniff2BytesFromNdisBuffer(PacketInfo.pFirstBuffer, LENGTH_802_3 + 6, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) ++ if (Sniff2BytesFromNdisBuffer ++ (PacketInfo.pFirstBuffer, LENGTH_802_3 + 6, ++ &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) + break; + +- Protocol = (USHORT)((Byte0 << 8) + Byte1); ++ Protocol = (USHORT) ((Byte0 << 8) + Byte1); + LlcSnapLen = 8; + } +- + // always AC_BE for non-IP packet + if (Protocol != 0x0800) + break; + + // get IP header +- if (Sniff2BytesFromNdisBuffer(PacketInfo.pFirstBuffer, LENGTH_802_3 + LlcSnapLen, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) ++ if (Sniff2BytesFromNdisBuffer ++ (PacketInfo.pFirstBuffer, LENGTH_802_3 + LlcSnapLen, ++ &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) + break; + + // return AC_BE if packet is not IPv4 +@@ -1115,61 +1116,56 @@ NDIS_STATUS STASendPacket( + // TODO: have to check ACM bit. apply TSPEC if ACM is ON + // TODO: downgrade UP & QueIdx before passing ACM + /* +- Under WMM ACM control, we dont need to check the bit; +- Or when a TSPEC is built for VO but we will change to issue +- BA session for BE here, so we will not use BA to send VO packets. +- */ +- if (pAd->CommonCfg.APEdcaParm.bACM[QueIdx]) +- { ++ Under WMM ACM control, we dont need to check the bit; ++ Or when a TSPEC is built for VO but we will change to issue ++ BA session for BE here, so we will not use BA to send VO packets. ++ */ ++ if (pAd->CommonCfg.APEdcaParm.bACM[QueIdx]) { + UserPriority = 0; +- QueIdx = QID_AC_BE; ++ QueIdx = QID_AC_BE; + } + } while (FALSE); + } + + RTMP_SET_PACKET_UP(pPacket, UserPriority); + +- +- + // Make sure SendTxWait queue resource won't be used by other threads + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE) +- { ++ if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE) { + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + + return NDIS_STATUS_FAILURE; +- } +- else +- { +- InsertTailQueueAc(pAd, pEntry, &pAd->TxSwQueue[QueIdx], PACKET_TO_QUEUE_ENTRY(pPacket)); ++ } else { ++ InsertTailQueueAc(pAd, pEntry, &pAd->TxSwQueue[QueIdx], ++ PACKET_TO_QUEUE_ENTRY(pPacket)); + } + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + +- if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&& +- IS_HT_STA(pEntry)) +- { +- //PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; +- if (((pEntry->TXBAbitmap & (1<BADeclineBitmap & (1<PortSecured == WPA_802_1X_PORT_SECURED) +- // For IOT compatibility, if +- // 1. It is Ralink chip or +- // 2. It is OPEN or AES mode, +- // then BA session can be bulit. +- && ((pEntry->ValidAsCLI && pAd->MlmeAux.APRalinkIe != 0x0) || +- (pEntry->WepStatus != Ndis802_11WEPEnabled && pEntry->WepStatus != Ndis802_11Encryption2Enabled)) +- ) +- { +- BAOriSessionSetUp(pAd, pEntry, UserPriority, 0, 10, FALSE); ++ if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE) && ++ IS_HT_STA(pEntry)) { ++ //PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ if (((pEntry->TXBAbitmap & (1 << UserPriority)) == 0) && ++ ((pEntry->BADeclineBitmap & (1 << UserPriority)) == 0) && ++ (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) ++ // For IOT compatibility, if ++ // 1. It is Ralink chip or ++ // 2. It is OPEN or AES mode, ++ // then BA session can be bulit. ++ && ((pEntry->ValidAsCLI && pAd->MlmeAux.APRalinkIe != 0x0) ++ || (pEntry->WepStatus != Ndis802_11WEPEnabled ++ && pEntry->WepStatus != ++ Ndis802_11Encryption2Enabled)) ++ ) { ++ BAOriSessionSetUp(pAd, pEntry, UserPriority, 0, 10, ++ FALSE); + } + } + +- pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; // TODO: for debug only. to be removed ++ pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; // TODO: for debug only. to be removed + return NDIS_STATUS_SUCCESS; + } + +- + /* + ======================================================================== + +@@ -1193,45 +1189,52 @@ NDIS_STATUS STASendPacket( + ======================================================================== + */ + #ifdef RTMP_MAC_PCI +-NDIS_STATUS RTMPFreeTXDRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN UCHAR NumberRequired, +- IN PUCHAR FreeNumberIs) ++NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs) + { +- ULONG FreeNumber = 0; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- +- switch (QueIdx) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: +- if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx) +- FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1; +- else +- FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx + TX_RING_SIZE - pAd->TxRing[QueIdx].TxCpuIdx - 1; +- +- if (FreeNumber >= NumberRequired) +- Status = NDIS_STATUS_SUCCESS; +- break; +- +- case QID_MGMT: +- if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1; +- else +- FreeNumber = pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - pAd->MgmtRing.TxCpuIdx - 1; +- +- if (FreeNumber >= NumberRequired) +- Status = NDIS_STATUS_SUCCESS; +- break; +- +- default: +- DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); +- break; ++ ULONG FreeNumber = 0; ++ NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ ++ switch (QueIdx) { ++ case QID_AC_BK: ++ case QID_AC_BE: ++ case QID_AC_VI: ++ case QID_AC_VO: ++ if (pAd->TxRing[QueIdx].TxSwFreeIdx > ++ pAd->TxRing[QueIdx].TxCpuIdx) ++ FreeNumber = ++ pAd->TxRing[QueIdx].TxSwFreeIdx - ++ pAd->TxRing[QueIdx].TxCpuIdx - 1; ++ else ++ FreeNumber = ++ pAd->TxRing[QueIdx].TxSwFreeIdx + TX_RING_SIZE - ++ pAd->TxRing[QueIdx].TxCpuIdx - 1; ++ ++ if (FreeNumber >= NumberRequired) ++ Status = NDIS_STATUS_SUCCESS; ++ break; ++ ++ case QID_MGMT: ++ if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) ++ FreeNumber = ++ pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - ++ 1; ++ else ++ FreeNumber = ++ pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - ++ pAd->MgmtRing.TxCpuIdx - 1; ++ ++ if (FreeNumber >= NumberRequired) ++ Status = NDIS_STATUS_SUCCESS; ++ break; ++ ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); ++ break; + } +- *FreeNumberIs = (UCHAR)FreeNumber; ++ *FreeNumberIs = (UCHAR) FreeNumber; + + return (Status); + } +@@ -1241,76 +1244,69 @@ NDIS_STATUS RTMPFreeTXDRequest( + Actually, this function used to check if the TxHardware Queue still has frame need to send. + If no frame need to send, go to sleep, else, still wake up. + */ +-NDIS_STATUS RTMPFreeTXDRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN UCHAR NumberRequired, +- IN PUCHAR FreeNumberIs) ++NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs) + { +- //ULONG FreeNumber = 0; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; +- unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; +- +- switch (QueIdx) +- { +- case QID_AC_BK: +- case QID_AC_BE: +- case QID_AC_VI: +- case QID_AC_VO: +- { +- pHTTXContext = &pAd->TxContext[QueIdx]; +- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- if ((pHTTXContext->CurWritePosition != pHTTXContext->ENextBulkOutPosition) || +- (pHTTXContext->IRPPending == TRUE)) +- { +- Status = NDIS_STATUS_FAILURE; +- } +- else +- { +- Status = NDIS_STATUS_SUCCESS; +- } +- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +- } +- break; +- case QID_MGMT: +- if (pAd->MgmtRing.TxSwFreeIdx != MGMT_RING_SIZE) ++ //ULONG FreeNumber = 0; ++ NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ unsigned long IrqFlags; ++ HT_TX_CONTEXT *pHTTXContext; ++ ++ switch (QueIdx) { ++ case QID_AC_BK: ++ case QID_AC_BE: ++ case QID_AC_VI: ++ case QID_AC_VO: ++ { ++ pHTTXContext = &pAd->TxContext[QueIdx]; ++ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], ++ IrqFlags); ++ if ((pHTTXContext->CurWritePosition != ++ pHTTXContext->ENextBulkOutPosition) ++ || (pHTTXContext->IRPPending == TRUE)) { + Status = NDIS_STATUS_FAILURE; +- else ++ } else { + Status = NDIS_STATUS_SUCCESS; +- break; +- default: +- DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); +- break; ++ } ++ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], ++ IrqFlags); ++ } ++ break; ++ case QID_MGMT: ++ if (pAd->MgmtRing.TxSwFreeIdx != MGMT_RING_SIZE) ++ Status = NDIS_STATUS_FAILURE; ++ else ++ Status = NDIS_STATUS_SUCCESS; ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); ++ break; + } + + return (Status); + } + #endif // RTMP_MAC_USB // + +-VOID RTMPSendDisassociationFrame( +- IN PRTMP_ADAPTER pAd) ++VOID RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd) + { + } + +-VOID RTMPSendNullFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, +- IN BOOLEAN bQosNull) ++VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++ IN UCHAR TxRate, IN BOOLEAN bQosNull) + { +- UCHAR NullFrame[48]; +- ULONG Length; +- PHEADER_802_11 pHeader_802_11; +- +- // WPA 802.1x secured port control +- if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) +- || (pAd->StaCfg.IEEE8021X == TRUE) +- ) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- { ++ UCHAR NullFrame[48]; ++ ULONG Length; ++ PHEADER_802_11 pHeader_802_11; ++ ++ // WPA 802.1x secured port control ++ if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || ++ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ++ || (pAd->StaCfg.IEEE8021X == TRUE) ++ ) && (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) { + return; + } + +@@ -1326,28 +1322,26 @@ VOID RTMPSendNullFrame( + COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid); + +- if (pAd->CommonCfg.bAPSDForcePowerSave) +- { ++ if (pAd->CommonCfg.bAPSDForcePowerSave) { + pHeader_802_11->FC.PwrMgmt = PWR_SAVE; ++ } else { ++ pHeader_802_11->FC.PwrMgmt = ++ (pAd->StaCfg.Psm == PWR_SAVE) ? 1 : 0; + } +- else +- { +- pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE) ? 1: 0; +- } +- pHeader_802_11->Duration = pAd->CommonCfg.Dsifs + RTMPCalcDuration(pAd, TxRate, 14); ++ pHeader_802_11->Duration = ++ pAd->CommonCfg.Dsifs + RTMPCalcDuration(pAd, TxRate, 14); + + pAd->Sequence++; + pHeader_802_11->Sequence = pAd->Sequence; + + // Prepare QosNull function frame +- if (bQosNull) +- { ++ if (bQosNull) { + pHeader_802_11->FC.SubType = SUBTYPE_QOS_NULL; + + // copy QOS control bytes +- NullFrame[Length] = 0; +- NullFrame[Length+1] = 0; +- Length += 2;// if pad with 2 bytes for alignment, APSD will fail ++ NullFrame[Length] = 0; ++ NullFrame[Length + 1] = 0; ++ Length += 2; // if pad with 2 bytes for alignment, APSD will fail + } + + HAL_KickOutNullFrameTx(pAd, 0, NullFrame, Length); +@@ -1355,68 +1349,57 @@ VOID RTMPSendNullFrame( + } + + // IRQL = DISPATCH_LEVEL +-VOID RTMPSendRTSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, +- IN UCHAR QueIdx, +- IN UCHAR FrameGap) ++VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN unsigned int NextMpduSize, ++ IN UCHAR TxRate, ++ IN UCHAR RTSRate, ++ IN USHORT AckDuration, IN UCHAR QueIdx, IN UCHAR FrameGap) + { + } + +- +- + // -------------------------------------------------------- + // FIND ENCRYPT KEY AND DECIDE CIPHER ALGORITHM +-// Find the WPA key, either Group or Pairwise Key +-// LEAP + TKIP also use WPA key. ++// Find the WPA key, either Group or Pairwise Key ++// LEAP + TKIP also use WPA key. + // -------------------------------------------------------- + // Decide WEP bit and cipher suite to be used. Same cipher suite should be used for whole fragment burst + // In Cisco CCX 2.0 Leap Authentication +-// WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey +-// Instead of the SharedKey, SharedKey Length may be Zero. +-VOID STAFindCipherAlgorithm( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++// WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey ++// Instead of the SharedKey, SharedKey Length may be Zero. ++VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- NDIS_802_11_ENCRYPTION_STATUS Cipher; // To indicate cipher used for this packet +- UCHAR CipherAlg = CIPHER_NONE; // cipher alogrithm +- UCHAR KeyIdx = 0xff; +- PUCHAR pSrcBufVA; +- PCIPHER_KEY pKey = NULL; ++ NDIS_802_11_ENCRYPTION_STATUS Cipher; // To indicate cipher used for this packet ++ UCHAR CipherAlg = CIPHER_NONE; // cipher alogrithm ++ UCHAR KeyIdx = 0xff; ++ PUCHAR pSrcBufVA; ++ PCIPHER_KEY pKey = NULL; + + pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket); + + { +- // Select Cipher +- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) +- Cipher = pAd->StaCfg.GroupCipher; // Cipher for Multicast or Broadcast +- else +- Cipher = pAd->StaCfg.PairCipher; // Cipher for Unicast ++ // Select Cipher ++ if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) ++ Cipher = pAd->StaCfg.GroupCipher; // Cipher for Multicast or Broadcast ++ else ++ Cipher = pAd->StaCfg.PairCipher; // Cipher for Unicast + +- if (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) +- { +- ASSERT(pAd->SharedKey[BSS0][0].CipherAlg <= CIPHER_CKIP128); ++ if (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) { ++ ASSERT(pAd->SharedKey[BSS0][0].CipherAlg <= ++ CIPHER_CKIP128); + + // 4-way handshaking frame must be clear +- if (!(TX_BLK_TEST_FLAG(pTxBlk, fTX_bClearEAPFrame)) && (pAd->SharedKey[BSS0][0].CipherAlg) && +- (pAd->SharedKey[BSS0][0].KeyLen)) +- { ++ if (!(TX_BLK_TEST_FLAG(pTxBlk, fTX_bClearEAPFrame)) ++ && (pAd->SharedKey[BSS0][0].CipherAlg) ++ && (pAd->SharedKey[BSS0][0].KeyLen)) { + CipherAlg = pAd->SharedKey[BSS0][0].CipherAlg; + KeyIdx = 0; + } +- } +- else if (Cipher == Ndis802_11Encryption1Enabled) +- { +- KeyIdx = pAd->StaCfg.DefaultKeyId; +- } +- else if ((Cipher == Ndis802_11Encryption2Enabled) || +- (Cipher == Ndis802_11Encryption3Enabled)) +- { +- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) // multicast ++ } else if (Cipher == Ndis802_11Encryption1Enabled) { ++ KeyIdx = pAd->StaCfg.DefaultKeyId; ++ } else if ((Cipher == Ndis802_11Encryption2Enabled) || ++ (Cipher == Ndis802_11Encryption3Enabled)) { ++ if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) // multicast + KeyIdx = pAd->StaCfg.DefaultKeyId; + else if (pAd->SharedKey[BSS0][0].KeyLen) + KeyIdx = 0; +@@ -1426,15 +1409,16 @@ VOID STAFindCipherAlgorithm( + + if (KeyIdx == 0xff) + CipherAlg = CIPHER_NONE; +- else if ((Cipher == Ndis802_11EncryptionDisabled) || (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 0)) ++ else if ((Cipher == Ndis802_11EncryptionDisabled) ++ || (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 0)) + CipherAlg = CIPHER_NONE; +- else if ( pAd->StaCfg.WpaSupplicantUP && +- (Cipher == Ndis802_11Encryption1Enabled) && +- (pAd->StaCfg.IEEE8021X == TRUE) && +- (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) +- CipherAlg = CIPHER_NONE; +- else +- { ++ else if (pAd->StaCfg.WpaSupplicantUP && ++ (Cipher == Ndis802_11Encryption1Enabled) && ++ (pAd->StaCfg.IEEE8021X == TRUE) && ++ (pAd->StaCfg.PortSecured == ++ WPA_802_1X_PORT_NOT_SECURED)) ++ CipherAlg = CIPHER_NONE; ++ else { + //Header_802_11.FC.Wep = 1; + CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; + pKey = &pAd->SharedKey[BSS0][KeyIdx]; +@@ -1445,12 +1429,9 @@ VOID STAFindCipherAlgorithm( + pTxBlk->pKey = pKey; + } + +- +-VOID STABuildCommon802_11Header( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; ++ HEADER_802_11 *pHeader_802_11; + + // + // MAKE A COMMON 802.11 HEADER +@@ -1459,33 +1440,36 @@ VOID STABuildCommon802_11Header( + // normal wlan header size : 24 octets + pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); + +- pHeader_802_11 = (HEADER_802_11 *) &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; ++ pHeader_802_11 = ++ (HEADER_802_11 *) & pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + + NdisZeroMemory(pHeader_802_11, sizeof(HEADER_802_11)); + + pHeader_802_11->FC.FrDs = 0; + pHeader_802_11->FC.Type = BTYPE_DATA; +- pHeader_802_11->FC.SubType = ((TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) ? SUBTYPE_QDATA : SUBTYPE_DATA); +- +- if (pTxBlk->pMacEntry) +- { +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bForceNonQoS)) +- { +- pHeader_802_11->Sequence = pTxBlk->pMacEntry->NonQosDataSeq; +- pTxBlk->pMacEntry->NonQosDataSeq = (pTxBlk->pMacEntry->NonQosDataSeq+1) & MAXSEQ; +- } +- else +- { ++ pHeader_802_11->FC.SubType = ++ ((TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) ? SUBTYPE_QDATA : ++ SUBTYPE_DATA); ++ ++ if (pTxBlk->pMacEntry) { ++ if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bForceNonQoS)) { ++ pHeader_802_11->Sequence = ++ pTxBlk->pMacEntry->NonQosDataSeq; ++ pTxBlk->pMacEntry->NonQosDataSeq = ++ (pTxBlk->pMacEntry->NonQosDataSeq + 1) & MAXSEQ; ++ } else { + { +- pHeader_802_11->Sequence = pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority]; +- pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority] = (pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ; +- } +- } +- } +- else +- { ++ pHeader_802_11->Sequence = ++ pTxBlk->pMacEntry->TxSeq[pTxBlk-> ++ UserPriority]; ++ pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority] = ++ (pTxBlk->pMacEntry-> ++ TxSeq[pTxBlk->UserPriority] + 1) & MAXSEQ; ++ } ++ } ++ } else { + pHeader_802_11->Sequence = pAd->Sequence; +- pAd->Sequence = (pAd->Sequence+1) & MAXSEQ; // next sequence ++ pAd->Sequence = (pAd->Sequence + 1) & MAXSEQ; // next sequence + } + + pHeader_802_11->Frag = 0; +@@ -1493,20 +1477,23 @@ VOID STABuildCommon802_11Header( + pHeader_802_11->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData); + + { +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + { +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pAd->CommonCfg.Bssid); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pTxBlk->pSrcBufHeader); +- pHeader_802_11->FC.ToDs = 1; +- } +- } +- else if (ADHOC_ON(pAd)) +- { +- COPY_MAC_ADDR(pHeader_802_11->Addr1, pTxBlk->pSrcBufHeader); +- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress); +- COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid); ++ COPY_MAC_ADDR(pHeader_802_11->Addr1, ++ pAd->CommonCfg.Bssid); ++ COPY_MAC_ADDR(pHeader_802_11->Addr2, ++ pAd->CurrentAddress); ++ COPY_MAC_ADDR(pHeader_802_11->Addr3, ++ pTxBlk->pSrcBufHeader); ++ pHeader_802_11->FC.ToDs = 1; ++ } ++ } else if (ADHOC_ON(pAd)) { ++ COPY_MAC_ADDR(pHeader_802_11->Addr1, ++ pTxBlk->pSrcBufHeader); ++ COPY_MAC_ADDR(pHeader_802_11->Addr2, ++ pAd->CurrentAddress); ++ COPY_MAC_ADDR(pHeader_802_11->Addr3, ++ pAd->CommonCfg.Bssid); + pHeader_802_11->FC.ToDs = 0; + } + } +@@ -1518,20 +1505,18 @@ VOID STABuildCommon802_11Header( + // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. + // ----------------------------------------------------------------- + if (pAd->CommonCfg.bAPSDForcePowerSave) +- pHeader_802_11->FC.PwrMgmt = PWR_SAVE; ++ pHeader_802_11->FC.PwrMgmt = PWR_SAVE; + else +- pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); ++ pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-VOID STABuildCache802_11Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR *pHeader) ++VOID STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR * pHeader) + { +- MAC_TABLE_ENTRY *pMacEntry; +- PHEADER_802_11 pHeader80211; ++ MAC_TABLE_ENTRY *pMacEntry; ++ PHEADER_802_11 pHeader80211; + +- pHeader80211 = (PHEADER_802_11)pHeader; ++ pHeader80211 = (PHEADER_802_11) pHeader; + pMacEntry = pTxBlk->pMacEntry; + + // +@@ -1546,7 +1531,8 @@ VOID STABuildCache802_11Header( + + // Sequence + pHeader80211->Sequence = pMacEntry->TxSeq[pTxBlk->UserPriority]; +- pMacEntry->TxSeq[pTxBlk->UserPriority] = (pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ; ++ pMacEntry->TxSeq[pTxBlk->UserPriority] = ++ (pMacEntry->TxSeq[pTxBlk->UserPriority] + 1) & MAXSEQ; + + { + // Check if the frame can be sent through DLS direct link interface +@@ -1554,34 +1540,34 @@ VOID STABuildCache802_11Header( + + // The addr3 of normal packet send from DS is Dest Mac address. + if (ADHOC_ON(pAd)) +- COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid); ++ COPY_MAC_ADDR(pHeader80211->Addr3, ++ pAd->CommonCfg.Bssid); + else +- COPY_MAC_ADDR(pHeader80211->Addr3, pTxBlk->pSrcBufHeader); ++ COPY_MAC_ADDR(pHeader80211->Addr3, ++ pTxBlk->pSrcBufHeader); + } + + // ----------------------------------------------------------------- + // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. + // ----------------------------------------------------------------- + if (pAd->CommonCfg.bAPSDForcePowerSave) +- pHeader80211->FC.PwrMgmt = PWR_SAVE; ++ pHeader80211->FC.PwrMgmt = PWR_SAVE; + else +- pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); ++ pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-static inline PUCHAR STA_Build_ARalink_Frame_Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) ++static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, ++ IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; +- HEADER_802_11 *pHeader_802_11; +- PNDIS_PACKET pNextPacket; +- UINT32 nextBufLen; +- PQUEUE_ENTRY pQEntry; ++ PUCHAR pHeaderBufPtr; ++ HEADER_802_11 *pHeader_802_11; ++ PNDIS_PACKET pNextPacket; ++ UINT32 nextBufLen; ++ PQUEUE_ENTRY pQEntry; + + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + +- + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +@@ -1591,22 +1577,20 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header( + // skip common header + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { ++ if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { + // + // build QOS Control bytes + // + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; ++ *(pHeaderBufPtr + 1) = 0; ++ pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- + // padding at front of LLC header. LLC header should at 4-bytes aligment. +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR)ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; ++ pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + // For RA Aggregation, + // put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format +@@ -1616,8 +1600,8 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header( + if (RTMP_GET_PACKET_VLAN(pNextPacket)) + nextBufLen -= LENGTH_802_1Q; + +- *pHeaderBufPtr = (UCHAR)nextBufLen & 0xff; +- *(pHeaderBufPtr+1) = (UCHAR)(nextBufLen >> 8); ++ *pHeaderBufPtr = (UCHAR) nextBufLen & 0xff; ++ *(pHeaderBufPtr + 1) = (UCHAR) (nextBufLen >> 8); + + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; +@@ -1626,13 +1610,11 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header( + + } + +-static inline PUCHAR STA_Build_AMSDU_Frame_Header( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) ++static inline PUCHAR STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, ++ IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr;//, pSaveBufPtr; +- HEADER_802_11 *pHeader_802_11; +- ++ PUCHAR pHeaderBufPtr; //, pSaveBufPtr; ++ HEADER_802_11 *pHeader_802_11; + + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); +@@ -1653,8 +1635,8 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header( + // + *pHeaderBufPtr |= 0x80; + +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; ++ *(pHeaderBufPtr + 1) = 0; ++ pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + + //pSaveBufPtr = pHeaderBufPtr; +@@ -1665,57 +1647,56 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header( + // + // @@@ MpduHeaderLen excluding padding @@@ + // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; ++ pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + return pHeaderBufPtr; + + } + +- +-VOID STA_AMPDU_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- MAC_TABLE_ENTRY *pMacEntry; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ HEADER_802_11 *pHeader_802_11; ++ PUCHAR pHeaderBufPtr; ++ USHORT FreeNumber; ++ MAC_TABLE_ENTRY *pMacEntry; ++ BOOLEAN bVLANPkt; ++ PQUEUE_ENTRY pQEntry; + + ASSERT(pTxBlk); + +- while(pTxBlk->TxPacketList.Head) +- { ++ while (pTxBlk->TxPacketList.Head) { + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if ( RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); ++ if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) { ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, ++ NDIS_STATUS_FAILURE); + continue; + } + +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); ++ bVLANPkt = ++ (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); + + pMacEntry = pTxBlk->pMacEntry; +- if (pMacEntry->isCached) +- { ++ if (pMacEntry->isCached) { + // NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! +- NdisMoveMemory((PUCHAR)&pTxBlk->HeaderBuf[TXINFO_SIZE], (PUCHAR)&pMacEntry->CachedBuf[0], TXWI_SIZE + sizeof(HEADER_802_11)); +- pHeaderBufPtr = (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]); ++ NdisMoveMemory((PUCHAR) & pTxBlk-> ++ HeaderBuf[TXINFO_SIZE], ++ (PUCHAR) & pMacEntry->CachedBuf[0], ++ TXWI_SIZE + sizeof(HEADER_802_11)); ++ pHeaderBufPtr = ++ (PUCHAR) (&pTxBlk-> ++ HeaderBuf[TXINFO_SIZE + TXWI_SIZE]); + STABuildCache802_11Header(pAd, pTxBlk, pHeaderBufPtr); +- } +- else +- { ++ } else { + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + +- pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; ++ pHeaderBufPtr = ++ &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + } + +- + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + + // skip common header +@@ -1725,87 +1706,101 @@ VOID STA_AMPDU_Frame_Tx( + // build QOS Control bytes + // + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; ++ *(pHeaderBufPtr + 1) = 0; ++ pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + + // + // build HTC+ + // HTC control filed following QoS field + // +- if ((pAd->CommonCfg.bRdg == TRUE) && CLIENT_STATUS_TEST_FLAG(pTxBlk->pMacEntry, fCLIENT_STATUS_RDG_CAPABLE)) +- { +- if (pMacEntry->isCached == FALSE) +- { ++ if ((pAd->CommonCfg.bRdg == TRUE) ++ && CLIENT_STATUS_TEST_FLAG(pTxBlk->pMacEntry, ++ fCLIENT_STATUS_RDG_CAPABLE)) { ++ if (pMacEntry->isCached == FALSE) { + // mark HTC bit + pHeader_802_11->FC.Order = 1; + + NdisZeroMemory(pHeaderBufPtr, 4); +- *(pHeaderBufPtr+3) |= 0x80; ++ *(pHeaderBufPtr + 3) |= 0x80; + } + pHeaderBufPtr += 4; + pTxBlk->MpduHeaderLen += 4; + } +- + //pTxBlk->MpduHeaderLen = pHeaderBufPtr - pTxBlk->HeaderBuf - TXWI_SIZE - TXINFO_SIZE; + ASSERT(pTxBlk->MpduHeaderLen >= 24); + + // skip 802.3 header + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; ++ pTxBlk->SrcBufLen -= LENGTH_802_3; + + // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; ++ if (bVLANPkt) { ++ pTxBlk->pSrcBufData += LENGTH_802_1Q; ++ pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } +- + // + // padding at front of LLC header + // LLC header should locate at 4-octets aligment + // + // @@@ MpduHeaderLen excluding padding @@@ + // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; ++ pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + + // + // Insert LLC-SNAP encapsulation - 8 octets + // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); ++ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk-> ++ pSrcBufData - 2, ++ pTxBlk-> ++ pExtraLlcSnapEncap); ++ if (pTxBlk->pExtraLlcSnapEncap) { ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pSrcBufData - 2, 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } + + } + +- if (pMacEntry->isCached) +- { +- RTMPWriteTxWI_Cache(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- } +- else +- { +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- +- NdisZeroMemory((PUCHAR)(&pMacEntry->CachedBuf[0]), sizeof(pMacEntry->CachedBuf)); +- NdisMoveMemory((PUCHAR)(&pMacEntry->CachedBuf[0]), (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), (pHeaderBufPtr - (PUCHAR)(&pTxBlk->HeaderBuf[TXINFO_SIZE]))); ++ if (pMacEntry->isCached) { ++ RTMPWriteTxWI_Cache(pAd, ++ (PTXWI_STRUC) (&pTxBlk-> ++ HeaderBuf ++ [TXINFO_SIZE]), ++ pTxBlk); ++ } else { ++ RTMPWriteTxWI_Data(pAd, ++ (PTXWI_STRUC) (&pTxBlk-> ++ HeaderBuf ++ [TXINFO_SIZE]), ++ pTxBlk); ++ ++ NdisZeroMemory((PUCHAR) (&pMacEntry->CachedBuf[0]), ++ sizeof(pMacEntry->CachedBuf)); ++ NdisMoveMemory((PUCHAR) (&pMacEntry->CachedBuf[0]), ++ (PUCHAR) (&pTxBlk-> ++ HeaderBuf[TXINFO_SIZE]), ++ (pHeaderBufPtr - ++ (PUCHAR) (&pTxBlk-> ++ HeaderBuf[TXINFO_SIZE]))); + pMacEntry->isCached = TRUE; + } + + // calculate Transmitted AMPDU count and ByteCount + { +- pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u.LowPart ++; +- pAd->RalinkCounters.TransmittedOctetsInAMPDUCount.QuadPart += pTxBlk->SrcBufLen; ++ pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u. ++ LowPart++; ++ pAd->RalinkCounters.TransmittedOctetsInAMPDUCount. ++ QuadPart += pTxBlk->SrcBufLen; + } + + //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); +@@ -1824,62 +1819,64 @@ VOID STA_AMPDU_Frame_Tx( + + } + +- +-VOID STA_AMSDU_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT subFramePayloadLen = 0; // AMSDU Subframe length without AMSDU-Header / Padding. +- USHORT totalMPDUSize=0; +- UCHAR *subFrameHeader; +- UCHAR padding = 0; +- USHORT FirstTx = 0, LastTxIdx = 0; +- BOOLEAN bVLANPkt; +- int frameNum = 0; +- PQUEUE_ENTRY pQEntry; +- ++ PUCHAR pHeaderBufPtr; ++ USHORT FreeNumber; ++ USHORT subFramePayloadLen = 0; // AMSDU Subframe length without AMSDU-Header / Padding. ++ USHORT totalMPDUSize = 0; ++ UCHAR *subFrameHeader; ++ UCHAR padding = 0; ++ USHORT FirstTx = 0, LastTxIdx = 0; ++ BOOLEAN bVLANPkt; ++ int frameNum = 0; ++ PQUEUE_ENTRY pQEntry; + + ASSERT(pTxBlk); + + ASSERT((pTxBlk->TxPacketList.Number > 1)); + +- while(pTxBlk->TxPacketList.Head) +- { ++ while (pTxBlk->TxPacketList.Head) { + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); ++ if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) { ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, ++ NDIS_STATUS_FAILURE); + continue; + } + +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); ++ bVLANPkt = ++ (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); + + // skip 802.3 header + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; ++ pTxBlk->SrcBufLen -= LENGTH_802_3; + + // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; ++ if (bVLANPkt) { ++ pTxBlk->pSrcBufData += LENGTH_802_1Q; ++ pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } + +- if (frameNum == 0) +- { +- pHeaderBufPtr = STA_Build_AMSDU_Frame_Header(pAd, pTxBlk); ++ if (frameNum == 0) { ++ pHeaderBufPtr = ++ STA_Build_AMSDU_Frame_Header(pAd, pTxBlk); + + // NOTE: TxWI->MPDUtotalByteCount will be updated after final frame was handled. +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- } +- else +- { ++ RTMPWriteTxWI_Data(pAd, ++ (PTXWI_STRUC) (&pTxBlk-> ++ HeaderBuf ++ [TXINFO_SIZE]), ++ pTxBlk); ++ } else { + pHeaderBufPtr = &pTxBlk->HeaderBuf[0]; +- padding = ROUND_UP(LENGTH_AMSDU_SUBFRAMEHEAD + subFramePayloadLen, 4) - (LENGTH_AMSDU_SUBFRAMEHEAD + subFramePayloadLen); +- NdisZeroMemory(pHeaderBufPtr, padding + LENGTH_AMSDU_SUBFRAMEHEAD); ++ padding = ++ ROUND_UP(LENGTH_AMSDU_SUBFRAMEHEAD + ++ subFramePayloadLen, ++ 4) - (LENGTH_AMSDU_SUBFRAMEHEAD + ++ subFramePayloadLen); ++ NdisZeroMemory(pHeaderBufPtr, ++ padding + LENGTH_AMSDU_SUBFRAMEHEAD); + pHeaderBufPtr += padding; + pTxBlk->MpduHeaderLen = padding; + } +@@ -1893,39 +1890,42 @@ VOID STA_AMSDU_Frame_Tx( + + NdisMoveMemory(subFrameHeader, pTxBlk->pSrcBufHeader, 12); + +- + pHeaderBufPtr += LENGTH_AMSDU_SUBFRAMEHEAD; + pTxBlk->MpduHeaderLen += LENGTH_AMSDU_SUBFRAMEHEAD; + +- + // + // Insert LLC-SNAP encapsulation - 8 octets + // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); ++ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData - 2, ++ pTxBlk->pExtraLlcSnapEncap); + + subFramePayloadLen = pTxBlk->SrcBufLen; + +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); ++ if (pTxBlk->pExtraLlcSnapEncap) { ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); ++ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2, ++ 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + subFramePayloadLen += LENGTH_802_1_H; + } +- + // update subFrame Length field + subFrameHeader[12] = (subFramePayloadLen & 0xFF00) >> 8; + subFrameHeader[13] = subFramePayloadLen & 0xFF; + + totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; + +- if (frameNum ==0) +- FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); ++ if (frameNum == 0) ++ FirstTx = ++ HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, ++ &FreeNumber); + else +- LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); ++ LastTxIdx = ++ HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, ++ &FreeNumber); + + frameNum++; + +@@ -1934,8 +1934,9 @@ VOID STA_AMSDU_Frame_Tx( + + // calculate Transmitted AMSDU Count and ByteCount + { +- pAd->RalinkCounters.TransmittedAMSDUCount.u.LowPart ++; +- pAd->RalinkCounters.TransmittedOctetsInAMSDU.QuadPart += totalMPDUSize; ++ pAd->RalinkCounters.TransmittedAMSDUCount.u.LowPart++; ++ pAd->RalinkCounters.TransmittedOctetsInAMSDU.QuadPart += ++ totalMPDUSize; + } + + } +@@ -1950,29 +1951,24 @@ VOID STA_AMSDU_Frame_Tx( + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +-VOID STA_Legacy_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ HEADER_802_11 *pHeader_802_11; ++ PUCHAR pHeaderBufPtr; ++ USHORT FreeNumber; ++ BOOLEAN bVLANPkt; ++ PQUEUE_ENTRY pQEntry; + + ASSERT(pTxBlk); + +- + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { ++ if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) { + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); + return; + } + +- if (pTxBlk->TxFrameType == TX_MCAST_FRAME) +- { ++ if (pTxBlk->TxFrameType == TX_MCAST_FRAME) { + INC_COUNTER64(pAd->WlanCounters.MulticastTransmittedFrameCount); + } + +@@ -1989,16 +1985,14 @@ VOID STA_Legacy_Frame_Tx( + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + +- + // skip 802.3 header + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; ++ pTxBlk->SrcBufLen -= LENGTH_802_3; + + // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; ++ if (bVLANPkt) { ++ pTxBlk->pSrcBufData += LENGTH_802_1Q; ++ pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +@@ -2007,21 +2001,22 @@ VOID STA_Legacy_Frame_Tx( + // skip common header + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { ++ if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { + // + // build QOS Control bytes + // +- *(pHeaderBufPtr) = ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx]<<5)); +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; ++ *(pHeaderBufPtr) = ++ ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg. ++ AckPolicy[pTxBlk-> ++ QueIdx] << 5)); ++ *(pHeaderBufPtr + 1) = 0; ++ pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- + // The remaining content of MPDU header should locate at 4-octets aligment +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; ++ pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + +@@ -2029,20 +2024,23 @@ VOID STA_Legacy_Frame_Tx( + // Insert LLC-SNAP encapsulation - 8 octets + // + // +- // if original Ethernet frame contains no LLC/SNAP, ++ // if original Ethernet frame contains no LLC/SNAP, + // then an extra LLC/SNAP encap is required + // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { ++ EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, ++ pTxBlk->pExtraLlcSnapEncap); ++ if (pTxBlk->pExtraLlcSnapEncap) { + UCHAR vlan_size; + +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; + // skip vlan tag +- vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; ++ vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2); ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pSrcBufHeader + 12 + vlan_size, ++ 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } +@@ -2054,7 +2052,8 @@ VOID STA_Legacy_Frame_Tx( + // use Wcid as Key Index + // + +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); ++ RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]), ++ pTxBlk); + + //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); + +@@ -2070,87 +2069,88 @@ VOID STA_Legacy_Frame_Tx( + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +- +-VOID STA_ARalink_Frame_Tx( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk) ++VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT totalMPDUSize=0; +- USHORT FirstTx, LastTxIdx; +- int frameNum = 0; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- ++ PUCHAR pHeaderBufPtr; ++ USHORT FreeNumber; ++ USHORT totalMPDUSize = 0; ++ USHORT FirstTx, LastTxIdx; ++ int frameNum = 0; ++ BOOLEAN bVLANPkt; ++ PQUEUE_ENTRY pQEntry; + + ASSERT(pTxBlk); + +- ASSERT((pTxBlk->TxPacketList.Number== 2)); ++ ASSERT((pTxBlk->TxPacketList.Number == 2)); + +- +- FirstTx = LastTxIdx = 0; // Is it ok init they as 0? +- while(pTxBlk->TxPacketList.Head) +- { ++ FirstTx = LastTxIdx = 0; // Is it ok init they as 0? ++ while (pTxBlk->TxPacketList.Head) { + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); + +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { +- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); ++ if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) { ++ RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, ++ NDIS_STATUS_FAILURE); + continue; + } + +- bVLANPkt = (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); ++ bVLANPkt = ++ (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); + + // skip 802.3 header + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; ++ pTxBlk->SrcBufLen -= LENGTH_802_3; + + // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; ++ if (bVLANPkt) { ++ pTxBlk->pSrcBufData += LENGTH_802_1Q; ++ pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } + +- if (frameNum == 0) +- { // For first frame, we need to create the 802.11 header + padding(optional) + RA-AGG-LEN + SNAP Header ++ if (frameNum == 0) { // For first frame, we need to create the 802.11 header + padding(optional) + RA-AGG-LEN + SNAP Header + +- pHeaderBufPtr = STA_Build_ARalink_Frame_Header(pAd, pTxBlk); ++ pHeaderBufPtr = ++ STA_Build_ARalink_Frame_Header(pAd, pTxBlk); + + // It's ok write the TxWI here, because the TxWI->MPDUtotalByteCount +- // will be updated after final frame was handled. +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); +- ++ // will be updated after final frame was handled. ++ RTMPWriteTxWI_Data(pAd, ++ (PTXWI_STRUC) (&pTxBlk-> ++ HeaderBuf ++ [TXINFO_SIZE]), ++ pTxBlk); + + // + // Insert LLC-SNAP encapsulation - 8 octets + // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap); +- +- if (pTxBlk->pExtraLlcSnapEncap) +- { +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); ++ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk-> ++ pSrcBufData - 2, ++ pTxBlk-> ++ pExtraLlcSnapEncap); ++ ++ if (pTxBlk->pExtraLlcSnapEncap) { ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pSrcBufData - 2, 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } +- } +- else +- { // For second aggregated frame, we need create the 802.3 header to headerBuf, because PCI will copy it to SDPtr0. ++ } else { // For second aggregated frame, we need create the 802.3 header to headerBuf, because PCI will copy it to SDPtr0. + + pHeaderBufPtr = &pTxBlk->HeaderBuf[0]; + pTxBlk->MpduHeaderLen = 0; + + // A-Ralink sub-sequent frame header is the same as 802.3 header. + // DA(6)+SA(6)+FrameType(2) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader, 12); ++ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader, ++ 12); + pHeaderBufPtr += 12; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2); ++ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2, ++ 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen = LENGTH_ARALINK_SUBFRAMEHEAD; + } +@@ -2158,10 +2158,14 @@ VOID STA_ARalink_Frame_Tx( + totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; + + //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); +- if (frameNum ==0) +- FirstTx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); ++ if (frameNum == 0) ++ FirstTx = ++ HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, ++ &FreeNumber); + else +- LastTxIdx = HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, &FreeNumber); ++ LastTxIdx = ++ HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, ++ &FreeNumber); + + frameNum++; + +@@ -2182,31 +2186,26 @@ VOID STA_ARalink_Frame_Tx( + + } + +- +-VOID STA_Fragment_Frame_Tx( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk) ++VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- UCHAR fragNum = 0; +- PACKET_INFO PacketInfo; +- USHORT EncryptionOverhead = 0; +- UINT32 FreeMpduSize, SrcRemainingBytes; +- USHORT AckDuration; +- UINT NextMpduSize; +- BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; +- HTTRANSMIT_SETTING *pTransmit; +- ++ HEADER_802_11 *pHeader_802_11; ++ PUCHAR pHeaderBufPtr; ++ USHORT FreeNumber; ++ UCHAR fragNum = 0; ++ PACKET_INFO PacketInfo; ++ USHORT EncryptionOverhead = 0; ++ UINT32 FreeMpduSize, SrcRemainingBytes; ++ USHORT AckDuration; ++ UINT NextMpduSize; ++ BOOLEAN bVLANPkt; ++ PQUEUE_ENTRY pQEntry; ++ HTTRANSMIT_SETTING *pTransmit; + + ASSERT(pTxBlk); + + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) +- { ++ if (RTMP_FillTxBlkInfo(pAd, pTxBlk) != TRUE) { + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE); + return; + } +@@ -2217,104 +2216,100 @@ VOID STA_Fragment_Frame_Tx( + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + +- if (pTxBlk->CipherAlg == CIPHER_TKIP) +- { +- pTxBlk->pPacket = duplicate_pkt_with_TKIP_MIC(pAd, pTxBlk->pPacket); ++ if (pTxBlk->CipherAlg == CIPHER_TKIP) { ++ pTxBlk->pPacket = ++ duplicate_pkt_with_TKIP_MIC(pAd, pTxBlk->pPacket); + if (pTxBlk->pPacket == NULL) + return; +- RTMP_QueryPacketInfo(pTxBlk->pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, &pTxBlk->SrcBufLen); ++ RTMP_QueryPacketInfo(pTxBlk->pPacket, &PacketInfo, ++ &pTxBlk->pSrcBufHeader, ++ &pTxBlk->SrcBufLen); + } +- + // skip 802.3 header + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; +- pTxBlk->SrcBufLen -= LENGTH_802_3; +- ++ pTxBlk->SrcBufLen -= LENGTH_802_3; + + // skip vlan tag +- if (bVLANPkt) +- { +- pTxBlk->pSrcBufData += LENGTH_802_1Q; +- pTxBlk->SrcBufLen -= LENGTH_802_1Q; ++ if (bVLANPkt) { ++ pTxBlk->pSrcBufData += LENGTH_802_1Q; ++ pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *)pHeaderBufPtr; +- ++ pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + + // skip common header + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + +- if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) +- { ++ if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { + // + // build QOS Control bytes + // + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + +- *(pHeaderBufPtr+1) = 0; +- pHeaderBufPtr +=2; ++ *(pHeaderBufPtr + 1) = 0; ++ pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- + // + // padding at front of LLC header + // LLC header should locate at 4-octets aligment + // +- pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr; ++ pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen); +- +- ++ pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + // + // Insert LLC-SNAP encapsulation - 8 octets + // + // +- // if original Ethernet frame contains no LLC/SNAP, ++ // if original Ethernet frame contains no LLC/SNAP, + // then an extra LLC/SNAP encap is required + // +- EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap); +- if (pTxBlk->pExtraLlcSnapEncap) +- { ++ EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, ++ pTxBlk->pExtraLlcSnapEncap); ++ if (pTxBlk->pExtraLlcSnapEncap) { + UCHAR vlan_size; + + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; + // skip vlan tag +- vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; ++ vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; + // get 2 octets (TypeofLen) +- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2); ++ NdisMoveMemory(pHeaderBufPtr, ++ pTxBlk->pSrcBufHeader + 12 + vlan_size, 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } + +- + // If TKIP is used and fragmentation is required. Driver has to +- // append TKIP MIC at tail of the scatter buffer +- // MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC +- if (pTxBlk->CipherAlg == CIPHER_TKIP) +- { +- RTMPCalculateMICValue(pAd, pTxBlk->pPacket, pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey, 0); ++ // append TKIP MIC at tail of the scatter buffer ++ // MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC ++ if (pTxBlk->CipherAlg == CIPHER_TKIP) { ++ RTMPCalculateMICValue(pAd, pTxBlk->pPacket, ++ pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey, ++ 0); + + // NOTE: DON'T refer the skb->len directly after following copy. Becasue the length is not adjust +- // to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. +- NdisMoveMemory(pTxBlk->pSrcBufData + pTxBlk->SrcBufLen, &pAd->PrivateInfo.Tx.MIC[0], 8); ++ // to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. ++ NdisMoveMemory(pTxBlk->pSrcBufData + pTxBlk->SrcBufLen, ++ &pAd->PrivateInfo.Tx.MIC[0], 8); + //skb_put((RTPKT_TO_OSPKT(pTxBlk->pPacket))->tail, 8); + pTxBlk->SrcBufLen += 8; + pTxBlk->TotalFrameLen += 8; + pTxBlk->CipherAlg = CIPHER_TKIP_NO_MIC; + } +- + // + // calcuate the overhead bytes that encryption algorithm may add. This + // affects the calculate of "duration" field + // +- if ((pTxBlk->CipherAlg == CIPHER_WEP64) || (pTxBlk->CipherAlg == CIPHER_WEP128)) +- EncryptionOverhead = 8; //WEP: IV[4] + ICV[4]; ++ if ((pTxBlk->CipherAlg == CIPHER_WEP64) ++ || (pTxBlk->CipherAlg == CIPHER_WEP128)) ++ EncryptionOverhead = 8; //WEP: IV[4] + ICV[4]; + else if (pTxBlk->CipherAlg == CIPHER_TKIP_NO_MIC) +- EncryptionOverhead = 12;//TKIP: IV[4] + EIV[4] + ICV[4], MIC will be added to TotalPacketLength ++ EncryptionOverhead = 12; //TKIP: IV[4] + EIV[4] + ICV[4], MIC will be added to TotalPacketLength + else if (pTxBlk->CipherAlg == CIPHER_TKIP) +- EncryptionOverhead = 20;//TKIP: IV[4] + EIV[4] + ICV[4] + MIC[8] ++ EncryptionOverhead = 20; //TKIP: IV[4] + EIV[4] + ICV[4] + MIC[8] + else if (pTxBlk->CipherAlg == CIPHER_AES) + EncryptionOverhead = 16; // AES: IV[4] + EIV[4] + MIC[8] + else +@@ -2331,7 +2326,11 @@ VOID STA_Fragment_Frame_Tx( + + // decide how much time an ACK/CTS frame will consume in the air + if (pTxBlk->TxRate <= RATE_LAST_OFDM_RATE) +- AckDuration = RTMPCalcDuration(pAd, pAd->CommonCfg.ExpectedACKRate[pTxBlk->TxRate], 14); ++ AckDuration = ++ RTMPCalcDuration(pAd, ++ pAd->CommonCfg.ExpectedACKRate[pTxBlk-> ++ TxRate], ++ 14); + else + AckDuration = RTMPCalcDuration(pAd, RATE_6_5, 14); + +@@ -2346,25 +2345,28 @@ VOID STA_Fragment_Frame_Tx( + + FreeMpduSize -= pTxBlk->MpduHeaderLen; + +- if (SrcRemainingBytes <= FreeMpduSize) +- { // this is the last or only fragment ++ if (SrcRemainingBytes <= FreeMpduSize) { // this is the last or only fragment + + pTxBlk->SrcBufLen = SrcRemainingBytes; + + pHeader_802_11->FC.MoreFrag = 0; +- pHeader_802_11->Duration = pAd->CommonCfg.Dsifs + AckDuration; ++ pHeader_802_11->Duration = ++ pAd->CommonCfg.Dsifs + AckDuration; + + // Indicate the lower layer that this's the last fragment. + pTxBlk->TotalFragNum = fragNum; +- } +- else +- { // more fragment is required ++ } else { // more fragment is required + + pTxBlk->SrcBufLen = FreeMpduSize; + +- NextMpduSize = min(((UINT)SrcRemainingBytes - pTxBlk->SrcBufLen), ((UINT)pAd->CommonCfg.FragmentThreshold)); ++ NextMpduSize = ++ min(((UINT) SrcRemainingBytes - pTxBlk->SrcBufLen), ++ ((UINT) pAd->CommonCfg.FragmentThreshold)); + pHeader_802_11->FC.MoreFrag = 1; +- pHeader_802_11->Duration = (3 * pAd->CommonCfg.Dsifs) + (2 * AckDuration) + RTMPCalcDuration(pAd, pTxBlk->TxRate, NextMpduSize + EncryptionOverhead); ++ pHeader_802_11->Duration = ++ (3 * pAd->CommonCfg.Dsifs) + (2 * AckDuration) + ++ RTMPCalcDuration(pAd, pTxBlk->TxRate, ++ NextMpduSize + EncryptionOverhead); + } + + if (fragNum == 0) +@@ -2372,7 +2374,10 @@ VOID STA_Fragment_Frame_Tx( + else + pTxBlk->FrameGap = IFS_SIFS; + +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk); ++ RTMPWriteTxWI_Data(pAd, ++ (PTXWI_STRUC) (&pTxBlk-> ++ HeaderBuf[TXINFO_SIZE]), ++ pTxBlk); + + HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, &FreeNumber); + +@@ -2389,18 +2394,17 @@ VOID STA_Fragment_Frame_Tx( + SrcRemainingBytes -= pTxBlk->SrcBufLen; + pTxBlk->pSrcBufData += pTxBlk->SrcBufLen; + +- pHeader_802_11->Frag++; // increase Frag # ++ pHeader_802_11->Frag++; // increase Frag # + +- }while(SrcRemainingBytes > 0); ++ } while (SrcRemainingBytes > 0); + + // + // Kick out Tx + // + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) +- HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); ++ HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +- + #define RELEASE_FRAMES_OF_TXBLK(_pAd, _pTxBlk, _pQEntry, _Status) \ + while(_pTxBlk->TxPacketList.Head) \ + { \ +@@ -2408,7 +2412,6 @@ VOID STA_Fragment_Frame_Tx( + RELEASE_NDIS_PACKET(_pAd, QUEUE_ENTRY_TO_PACKET(_pQEntry), _Status); \ + } + +- + /* + ======================================================================== + +@@ -2431,22 +2434,21 @@ VOID STA_Fragment_Frame_Tx( + + ======================================================================== + */ +-NDIS_STATUS STAHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx) ++NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR QueIdx) + { +- NDIS_PACKET *pPacket; +- PQUEUE_ENTRY pQEntry; ++ NDIS_PACKET *pPacket; ++ PQUEUE_ENTRY pQEntry; + + // --------------------------------------------- + // STEP 0. DO SANITY CHECK AND SOME EARLY PREPARATION. + // --------------------------------------------- + // + ASSERT(pTxBlk->TxPacketList.Number); +- if (pTxBlk->TxPacketList.Head == NULL) +- { +- DBGPRINT(RT_DEBUG_ERROR, ("pTxBlk->TotalFrameNum == %ld!\n", pTxBlk->TxPacketList.Number)); ++ if (pTxBlk->TxPacketList.Head == NULL) { ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("pTxBlk->TotalFrameNum == %ld!\n", ++ pTxBlk->TxPacketList.Number)); + return NDIS_STATUS_FAILURE; + } + +@@ -2454,13 +2456,13 @@ NDIS_STATUS STAHardTransmit( + + // ------------------------------------------------------------------ + // STEP 1. WAKE UP PHY +- // outgoing frame always wakeup PHY to prevent frame lost and +- // turn off PSM bit to improve performance ++ // outgoing frame always wakeup PHY to prevent frame lost and ++ // turn off PSM bit to improve performance + // ------------------------------------------------------------------ + // not to change PSM bit, just send this frame out? +- if ((pAd->StaCfg.Psm == PWR_SAVE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT_RAW(RT_DEBUG_INFO, ("AsicForceWakeup At HardTx\n")); ++ if ((pAd->StaCfg.Psm == PWR_SAVE) ++ && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { ++ DBGPRINT_RAW(RT_DEBUG_INFO, ("AsicForceWakeup At HardTx\n")); + #ifdef RTMP_MAC_PCI + AsicForceWakeup(pAd, TRUE); + #endif // RTMP_MAC_PCI // +@@ -2468,85 +2470,81 @@ NDIS_STATUS STAHardTransmit( + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_FORCE_WAKE_UP, NULL, 0); + #endif // RTMP_MAC_USB // + } +- + // It should not change PSM bit, when APSD turn on. +- if ((!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) && (pAd->CommonCfg.bAPSDForcePowerSave == FALSE)) +- || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) +- || (RTMP_GET_PACKET_WAI(pTxBlk->pPacket))) +- { ++ if ((! ++ (pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm.bAPSDCapable) ++ && (pAd->CommonCfg.bAPSDForcePowerSave == FALSE)) ++ || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) ++ || (RTMP_GET_PACKET_WAI(pTxBlk->pPacket))) { + if ((pAd->StaCfg.Psm == PWR_SAVE) && +- (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP)) ++ (pAd->StaCfg.WindowsPowerMode == ++ Ndis802_11PowerModeFast_PSP)) + RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); + } + +- switch (pTxBlk->TxFrameType) +- { +- case TX_AMPDU_FRAME: +- STA_AMPDU_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_AMSDU_FRAME: +- STA_AMSDU_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_LEGACY_FRAME: +- STA_Legacy_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_MCAST_FRAME: +- STA_Legacy_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_RALINK_FRAME: +- STA_ARalink_Frame_Tx(pAd, pTxBlk); +- break; +- case TX_FRAG_FRAME: +- STA_Fragment_Frame_Tx(pAd, pTxBlk); +- break; +- default: +- { +- // It should not happened! +- DBGPRINT(RT_DEBUG_ERROR, ("Send a pacekt was not classified!! It should not happen!\n")); +- while(pTxBlk->TxPacketList.Number) +- { +- pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); +- pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +- if (pPacket) +- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +- } ++ switch (pTxBlk->TxFrameType) { ++ case TX_AMPDU_FRAME: ++ STA_AMPDU_Frame_Tx(pAd, pTxBlk); ++ break; ++ case TX_AMSDU_FRAME: ++ STA_AMSDU_Frame_Tx(pAd, pTxBlk); ++ break; ++ case TX_LEGACY_FRAME: ++ STA_Legacy_Frame_Tx(pAd, pTxBlk); ++ break; ++ case TX_MCAST_FRAME: ++ STA_Legacy_Frame_Tx(pAd, pTxBlk); ++ break; ++ case TX_RALINK_FRAME: ++ STA_ARalink_Frame_Tx(pAd, pTxBlk); ++ break; ++ case TX_FRAG_FRAME: ++ STA_Fragment_Frame_Tx(pAd, pTxBlk); ++ break; ++ default: ++ { ++ // It should not happened! ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("Send a pacekt was not classified!! It should not happen!\n")); ++ while (pTxBlk->TxPacketList.Number) { ++ pQEntry = ++ RemoveHeadQueue(&pTxBlk->TxPacketList); ++ pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); ++ if (pPacket) ++ RELEASE_NDIS_PACKET(pAd, pPacket, ++ NDIS_STATUS_FAILURE); + } +- break; ++ } ++ break; + } + + return (NDIS_STATUS_SUCCESS); + + } + +-ULONG HashBytesPolynomial(UCHAR *value, unsigned int len) ++ULONG HashBytesPolynomial(UCHAR * value, unsigned int len) + { +- unsigned char *word = value; +- unsigned int ret = 0; +- unsigned int i; +- +- for(i=0; i < len; i++) +- { +- int mod = i % 32; +- ret ^=(unsigned int) (word[i]) << mod; +- ret ^=(unsigned int) (word[i]) >> (32 - mod); +- } +- return ret; ++ unsigned char *word = value; ++ unsigned int ret = 0; ++ unsigned int i; ++ ++ for (i = 0; i < len; i++) { ++ int mod = i % 32; ++ ret ^= (unsigned int)(word[i]) << mod; ++ ret ^= (unsigned int)(word[i]) >> (32 - mod); ++ } ++ return ret; + } + +-VOID Sta_Announce_or_Forward_802_3_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID) ++VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN UCHAR FromWhichBSSID) + { +- if (TRUE +- ) +- { ++ if (TRUE) { + announce_802_3_packet(pAd, pPacket); +- } +- else +- { ++ } else { + // release packet + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + } + } +- +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index 292baa8..3986478 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -36,15 +36,15 @@ + */ + #include "../rt_config.h" + +-extern UCHAR CISCO_OUI[]; ++extern UCHAR CISCO_OUI[]; + +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; ++extern UCHAR WPA_OUI[]; ++extern UCHAR RSN_OUI[]; ++extern UCHAR WME_INFO_ELEM[]; ++extern UCHAR WME_PARM_ELEM[]; ++extern UCHAR Ccx2QosInfo[]; ++extern UCHAR RALINK_OUI[]; ++extern UCHAR BROADCOM_OUI[]; + + /* + ========================================================================== +@@ -54,27 +54,25 @@ extern UCHAR BROADCOM_OUI[]; + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeStartReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen) ++BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT CHAR Ssid[], OUT UCHAR * pSsidLen) + { +- MLME_START_REQ_STRUCT *Info; ++ MLME_START_REQ_STRUCT *Info; + +- Info = (MLME_START_REQ_STRUCT *)(Msg); ++ Info = (MLME_START_REQ_STRUCT *) (Msg); + +- if (Info->SsidLen > MAX_LEN_OF_SSID) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqSanity fail - wrong SSID length\n")); +- return FALSE; +- } ++ if (Info->SsidLen > MAX_LEN_OF_SSID) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeStartReqSanity fail - wrong SSID length\n")); ++ return FALSE; ++ } + +- *pSsidLen = Info->SsidLen; +- NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); ++ *pSsidLen = Info->SsidLen; ++ NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); + +- return TRUE; ++ return TRUE; + } + + /* +@@ -88,171 +86,161 @@ BOOLEAN MlmeStartReqSanity( + + ========================================================================== + */ +-BOOLEAN PeerAssocRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT USHORT *pAid, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pAddHtInfoLen, +- OUT UCHAR *pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, +- OUT UCHAR *pCkipFlag) ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ OUT UCHAR * pHtCapabilityLen, ++ OUT UCHAR * pAddHtInfoLen, ++ OUT UCHAR * pNewExtChannelOffset, ++ OUT PEDCA_PARM pEdcaParm, OUT UCHAR * pCkipFlag) + { +- CHAR IeType, *Ptr; +- PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; +- PEID_STRUCT pEid; +- ULONG Length = 0; ++ CHAR IeType, *Ptr; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; ++ PEID_STRUCT pEid; ++ ULONG Length = 0; + + *pNewExtChannelOffset = 0xff; + *pHtCapabilityLen = 0; + *pAddHtInfoLen = 0; +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- Ptr = (PCHAR)pFrame->Octet; +- Length += LENGTH_802_11; +- +- NdisMoveMemory(pCapabilityInfo, &pFrame->Octet[0], 2); +- Length += 2; +- NdisMoveMemory(pStatus, &pFrame->Octet[2], 2); +- Length += 2; +- *pCkipFlag = 0; +- *pExtRateLen = 0; +- pEdcaParm->bValid = FALSE; +- +- if (*pStatus != MLME_SUCCESS) +- return TRUE; +- +- NdisMoveMemory(pAid, &pFrame->Octet[4], 2); +- Length += 2; +- +- // Aid already swaped byte order in RTMPFrameEndianChange() for big endian platform +- *pAid = (*pAid) & 0x3fff; // AID is low 14-bit +- +- // -- get supported rates from payload and advance the pointer +- IeType = pFrame->Octet[6]; +- *pSupRateLen = pFrame->Octet[7]; +- if ((IeType != IE_SUPP_RATES) || (*pSupRateLen > MAX_LEN_OF_SUPPORTED_RATES)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspSanity fail - wrong SupportedRates IE\n")); +- return FALSE; +- } +- else +- NdisMoveMemory(SupRate, &pFrame->Octet[8], *pSupRateLen); +- +- Length = Length + 2 + *pSupRateLen; +- +- // many AP implement proprietary IEs in non-standard order, we'd better +- // tolerate mis-ordered IEs to get best compatibility +- pEid = (PEID_STRUCT) &pFrame->Octet[8 + (*pSupRateLen)]; +- +- // get variable fields from payload and advance the pointer +- while ((Length + 2 + pEid->Len) <= MsgLen) +- { +- switch (pEid->Eid) +- { +- case IE_EXT_SUPP_RATES: +- if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) +- { +- NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); +- *pExtRateLen = pEid->Len; +- } +- break; +- +- case IE_HT_CAP: +- case IE_HT_CAP2: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! ++ COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); ++ Ptr = (PCHAR) pFrame->Octet; ++ Length += LENGTH_802_11; ++ ++ NdisMoveMemory(pCapabilityInfo, &pFrame->Octet[0], 2); ++ Length += 2; ++ NdisMoveMemory(pStatus, &pFrame->Octet[2], 2); ++ Length += 2; ++ *pCkipFlag = 0; ++ *pExtRateLen = 0; ++ pEdcaParm->bValid = FALSE; ++ ++ if (*pStatus != MLME_SUCCESS) ++ return TRUE; ++ ++ NdisMoveMemory(pAid, &pFrame->Octet[4], 2); ++ Length += 2; ++ ++ // Aid already swaped byte order in RTMPFrameEndianChange() for big endian platform ++ *pAid = (*pAid) & 0x3fff; // AID is low 14-bit ++ ++ // -- get supported rates from payload and advance the pointer ++ IeType = pFrame->Octet[6]; ++ *pSupRateLen = pFrame->Octet[7]; ++ if ((IeType != IE_SUPP_RATES) ++ || (*pSupRateLen > MAX_LEN_OF_SUPPORTED_RATES)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAssocRspSanity fail - wrong SupportedRates IE\n")); ++ return FALSE; ++ } else ++ NdisMoveMemory(SupRate, &pFrame->Octet[8], *pSupRateLen); ++ ++ Length = Length + 2 + *pSupRateLen; ++ ++ // many AP implement proprietary IEs in non-standard order, we'd better ++ // tolerate mis-ordered IEs to get best compatibility ++ pEid = (PEID_STRUCT) & pFrame->Octet[8 + (*pSupRateLen)]; ++ ++ // get variable fields from payload and advance the pointer ++ while ((Length + 2 + pEid->Len) <= MsgLen) { ++ switch (pEid->Eid) { ++ case IE_EXT_SUPP_RATES: ++ if (pEid->Len <= MAX_LEN_OF_SUPPORTED_RATES) { ++ NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); ++ *pExtRateLen = pEid->Len; ++ } ++ break; ++ ++ case IE_HT_CAP: ++ case IE_HT_CAP2: ++ if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! + { +- NdisMoveMemory(pHtCapability, pEid->Octet, SIZE_HT_CAP_IE); ++ NdisMoveMemory(pHtCapability, pEid->Octet, ++ SIZE_HT_CAP_IE); + +- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo)); +- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo)); ++ *(USHORT *) (&pHtCapability->HtCapInfo) = ++ cpu2le16(*(USHORT *) ++ (&pHtCapability->HtCapInfo)); ++ *(USHORT *) (&pHtCapability->ExtHtCapInfo) = ++ cpu2le16(*(USHORT *) ++ (&pHtCapability->ExtHtCapInfo)); + + *pHtCapabilityLen = SIZE_HT_CAP_IE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_HT_CAP. \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerAssocRspSanity - wrong IE_HT_CAP. \n")); + } + +- break; +- case IE_ADD_HT: +- case IE_ADD_HT2: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) +- { ++ break; ++ case IE_ADD_HT: ++ case IE_ADD_HT2: ++ if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { + // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only + // copy first sizeof(ADD_HT_INFO_IE) +- NdisMoveMemory(pAddHtInfo, pEid->Octet, sizeof(ADD_HT_INFO_IE)); ++ NdisMoveMemory(pAddHtInfo, pEid->Octet, ++ sizeof(ADD_HT_INFO_IE)); + +- *(USHORT *)(&pAddHtInfo->AddHtInfo2) = cpu2le16(*(USHORT *)(&pAddHtInfo->AddHtInfo2)); +- *(USHORT *)(&pAddHtInfo->AddHtInfo3) = cpu2le16(*(USHORT *)(&pAddHtInfo->AddHtInfo3)); ++ *(USHORT *) (&pAddHtInfo->AddHtInfo2) = ++ cpu2le16(*(USHORT *) ++ (&pAddHtInfo->AddHtInfo2)); ++ *(USHORT *) (&pAddHtInfo->AddHtInfo3) = ++ cpu2le16(*(USHORT *) ++ (&pAddHtInfo->AddHtInfo3)); + + *pAddHtInfoLen = SIZE_ADD_HT_INFO_IE; +- } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_ADD_HT. \n")); ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerAssocRspSanity - wrong IE_ADD_HT. \n")); + } + +- break; +- case IE_SECONDARY_CH_OFFSET: +- if (pEid->Len == 1) +- { ++ break; ++ case IE_SECONDARY_CH_OFFSET: ++ if (pEid->Len == 1) { + *pNewExtChannelOffset = pEid->Octet[0]; ++ } else { ++ DBGPRINT(RT_DEBUG_WARN, ++ ("PeerAssocRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); + } +- else +- { +- DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n")); ++ break; ++ ++ case IE_VENDOR_SPECIFIC: ++ // handle WME PARAMTER ELEMENT ++ if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) ++ && (pEid->Len == 24)) { ++ PUCHAR ptr; ++ int i; ++ ++ // parsing EDCA parameters ++ pEdcaParm->bValid = TRUE; ++ pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; ++ pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; ++ pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; ++ //pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; ++ pEdcaParm->EdcaUpdateCount = ++ pEid->Octet[6] & 0x0f; ++ pEdcaParm->bAPSDCapable = ++ (pEid->Octet[6] & 0x80) ? 1 : 0; ++ ptr = (PUCHAR) & pEid->Octet[8]; ++ for (i = 0; i < 4; i++) { ++ UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX ++ pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM ++ pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN ++ pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; // b0~4 is Cwmin ++ pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; // b5~8 is Cwmax ++ pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); // in unit of 32-us ++ ptr += 4; // point to next AC ++ } + } +- break; +- +- case IE_VENDOR_SPECIFIC: +- // handle WME PARAMTER ELEMENT +- if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) && (pEid->Len == 24)) +- { +- PUCHAR ptr; +- int i; +- +- // parsing EDCA parameters +- pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- //pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; +- pEdcaParm->EdcaUpdateCount = pEid->Octet[6] & 0x0f; +- pEdcaParm->bAPSDCapable = (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = (PUCHAR)&pEid->Octet[8]; +- for (i=0; i<4; i++) +- { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr+1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr+1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr+2) + 256 * (*(ptr+3)); // in unit of 32-us +- ptr += 4; // point to next AC +- } +- } +- break; +- default: +- DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspSanity - ignore unrecognized EID = %d\n", pEid->Eid)); +- break; +- } +- +- Length = Length + 2 + pEid->Len; +- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len); +- } +- +- +- return TRUE; ++ break; ++ default: ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerAssocRspSanity - ignore unrecognized EID = %d\n", ++ pEid->Eid)); ++ break; ++ } ++ ++ Length = Length + 2 + pEid->Len; ++ pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); ++ } ++ ++ return TRUE; + } + + /* +@@ -266,47 +254,46 @@ BOOLEAN PeerAssocRspSanity( + + ========================================================================== + */ +-BOOLEAN PeerProbeReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen) ++BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, ++ OUT CHAR Ssid[], OUT UCHAR * pSsidLen) + { +- UCHAR Idx; +- UCHAR RateLen; +- CHAR IeType; +- PFRAME_802_11 pFrame = (PFRAME_802_11)Msg; +- +- COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- +- if ((pFrame->Octet[0] != IE_SSID) || (pFrame->Octet[1] > MAX_LEN_OF_SSID)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerProbeReqSanity fail - wrong SSID IE(Type=%d,Len=%d)\n",pFrame->Octet[0],pFrame->Octet[1])); +- return FALSE; +- } +- +- *pSsidLen = pFrame->Octet[1]; +- NdisMoveMemory(Ssid, &pFrame->Octet[2], *pSsidLen); +- +- Idx = *pSsidLen + 2; +- +- // -- get supported rates from payload and advance the pointer +- IeType = pFrame->Octet[Idx]; +- RateLen = pFrame->Octet[Idx + 1]; +- if (IeType != IE_SUPP_RATES) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("PeerProbeReqSanity fail - wrong SupportRates IE(Type=%d,Len=%d)\n",pFrame->Octet[Idx],pFrame->Octet[Idx+1])); +- return FALSE; +- } +- else +- { +- if ((pAd->CommonCfg.PhyMode == PHY_11G) && (RateLen < 8)) +- return (FALSE); +- } +- +- return TRUE; ++ UCHAR Idx; ++ UCHAR RateLen; ++ CHAR IeType; ++ PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ ++ COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); ++ ++ if ((pFrame->Octet[0] != IE_SSID) ++ || (pFrame->Octet[1] > MAX_LEN_OF_SSID)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerProbeReqSanity fail - wrong SSID IE(Type=%d,Len=%d)\n", ++ pFrame->Octet[0], pFrame->Octet[1])); ++ return FALSE; ++ } ++ ++ *pSsidLen = pFrame->Octet[1]; ++ NdisMoveMemory(Ssid, &pFrame->Octet[2], *pSsidLen); ++ ++ Idx = *pSsidLen + 2; ++ ++ // -- get supported rates from payload and advance the pointer ++ IeType = pFrame->Octet[Idx]; ++ RateLen = pFrame->Octet[Idx + 1]; ++ if (IeType != IE_SUPP_RATES) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerProbeReqSanity fail - wrong SupportRates IE(Type=%d,Len=%d)\n", ++ pFrame->Octet[Idx], pFrame->Octet[Idx + 1])); ++ return FALSE; ++ } else { ++ if ((pAd->CommonCfg.PhyMode == PHY_11G) && (RateLen < 8)) ++ return (FALSE); ++ } ++ ++ return TRUE; + } + + /* +@@ -317,62 +304,58 @@ BOOLEAN PeerProbeReqSanity( + + ========================================================================== + */ +-BOOLEAN GetTimBit( +- IN CHAR *Ptr, +- IN USHORT Aid, +- OUT UCHAR *TimLen, +- OUT UCHAR *BcastFlag, +- OUT UCHAR *DtimCount, +- OUT UCHAR *DtimPeriod, +- OUT UCHAR *MessageToMe) ++BOOLEAN GetTimBit(IN CHAR * Ptr, ++ IN USHORT Aid, ++ OUT UCHAR * TimLen, ++ OUT UCHAR * BcastFlag, ++ OUT UCHAR * DtimCount, ++ OUT UCHAR * DtimPeriod, OUT UCHAR * MessageToMe) + { +- UCHAR BitCntl, N1, N2, MyByte, MyBit; +- CHAR *IdxPtr; ++ UCHAR BitCntl, N1, N2, MyByte, MyBit; ++ CHAR *IdxPtr; + +- IdxPtr = Ptr; ++ IdxPtr = Ptr; + +- IdxPtr ++; +- *TimLen = *IdxPtr; ++ IdxPtr++; ++ *TimLen = *IdxPtr; + +- // get DTIM Count from TIM element +- IdxPtr ++; +- *DtimCount = *IdxPtr; ++ // get DTIM Count from TIM element ++ IdxPtr++; ++ *DtimCount = *IdxPtr; + +- // get DTIM Period from TIM element +- IdxPtr++; +- *DtimPeriod = *IdxPtr; ++ // get DTIM Period from TIM element ++ IdxPtr++; ++ *DtimPeriod = *IdxPtr; + +- // get Bitmap Control from TIM element +- IdxPtr++; +- BitCntl = *IdxPtr; ++ // get Bitmap Control from TIM element ++ IdxPtr++; ++ BitCntl = *IdxPtr; + +- if ((*DtimCount == 0) && (BitCntl & 0x01)) +- *BcastFlag = TRUE; +- else +- *BcastFlag = FALSE; ++ if ((*DtimCount == 0) && (BitCntl & 0x01)) ++ *BcastFlag = TRUE; ++ else ++ *BcastFlag = FALSE; + +- // Parse Partial Virtual Bitmap from TIM element +- N1 = BitCntl & 0xfe; // N1 is the first bitmap byte# +- N2 = *TimLen - 4 + N1; // N2 is the last bitmap byte# ++ // Parse Partial Virtual Bitmap from TIM element ++ N1 = BitCntl & 0xfe; // N1 is the first bitmap byte# ++ N2 = *TimLen - 4 + N1; // N2 is the last bitmap byte# + +- if ((Aid < (N1 << 3)) || (Aid >= ((N2 + 1) << 3))) +- *MessageToMe = FALSE; +- else +- { +- MyByte = (Aid >> 3) - N1; // my byte position in the bitmap byte-stream +- MyBit = Aid % 16 - ((MyByte & 0x01)? 8:0); ++ if ((Aid < (N1 << 3)) || (Aid >= ((N2 + 1) << 3))) ++ *MessageToMe = FALSE; ++ else { ++ MyByte = (Aid >> 3) - N1; // my byte position in the bitmap byte-stream ++ MyBit = Aid % 16 - ((MyByte & 0x01) ? 8 : 0); + +- IdxPtr += (MyByte + 1); ++ IdxPtr += (MyByte + 1); + +- //if (*IdxPtr) +- // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr)); ++ //if (*IdxPtr) ++ // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr)); + +- if (*IdxPtr & (0x01 << MyBit)) +- *MessageToMe = TRUE; +- else +- *MessageToMe = FALSE; +- } ++ if (*IdxPtr & (0x01 << MyBit)) ++ *MessageToMe = TRUE; ++ else ++ *MessageToMe = FALSE; ++ } + +- return TRUE; ++ return TRUE; + } +- +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index dc71c1d..56bb797 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -37,7 +37,6 @@ + */ + #include "../rt_config.h" + +- + #define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) // 2 sec + + /* +@@ -51,38 +50,56 @@ + + ========================================================================== + */ +-VOID SyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]) ++VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]) + { +- StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, (STATE_MACHINE_FUNC)Drop, SYNC_IDLE, SYNC_MACHINE_BASE); ++ StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, ++ (STATE_MACHINE_FUNC) Drop, SYNC_IDLE, ++ SYNC_MACHINE_BASE); + + // column 1 +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)MlmeScanReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)MlmeJoinReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)MlmeStartReqAction); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeacon); +- StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, (STATE_MACHINE_FUNC)PeerProbeReqAction); ++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_SCAN_REQ, ++ (STATE_MACHINE_FUNC) MlmeScanReqAction); ++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_JOIN_REQ, ++ (STATE_MACHINE_FUNC) MlmeJoinReqAction); ++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_START_REQ, ++ (STATE_MACHINE_FUNC) MlmeStartReqAction); ++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_BEACON, ++ (STATE_MACHINE_FUNC) PeerBeacon); ++ StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, ++ (STATE_MACHINE_FUNC) PeerProbeReqAction); + + //column 2 +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtJoinAction); +- StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_BEACON_TIMEOUT, (STATE_MACHINE_FUNC)BeaconTimeoutAtJoinAction); ++ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenScan); ++ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_JOIN_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenJoin); ++ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_START_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenStart); ++ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_PEER_BEACON, ++ (STATE_MACHINE_FUNC) PeerBeaconAtJoinAction); ++ StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_BEACON_TIMEOUT, ++ (STATE_MACHINE_FUNC) BeaconTimeoutAtJoinAction); + + // column 3 +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_SCAN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenScan); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_JOIN_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenJoin); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_START_REQ, (STATE_MACHINE_FUNC)InvalidStateWhenStart); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_BEACON, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_PROBE_RSP, (STATE_MACHINE_FUNC)PeerBeaconAtScanAction); +- StateMachineSetAction(Sm, SCAN_LISTEN, MT2_SCAN_TIMEOUT, (STATE_MACHINE_FUNC)ScanTimeoutAction); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_SCAN_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenScan); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_JOIN_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenJoin); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_START_REQ, ++ (STATE_MACHINE_FUNC) InvalidStateWhenStart); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_BEACON, ++ (STATE_MACHINE_FUNC) PeerBeaconAtScanAction); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_PEER_PROBE_RSP, ++ (STATE_MACHINE_FUNC) PeerBeaconAtScanAction); ++ StateMachineSetAction(Sm, SCAN_LISTEN, MT2_SCAN_TIMEOUT, ++ (STATE_MACHINE_FUNC) ScanTimeoutAction); + + // timer init +- RTMPInitTimer(pAd, &pAd->MlmeAux.BeaconTimer, GET_TIMER_FUNCTION(BeaconTimeout), pAd, FALSE); +- RTMPInitTimer(pAd, &pAd->MlmeAux.ScanTimer, GET_TIMER_FUNCTION(ScanTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->MlmeAux.BeaconTimer, ++ GET_TIMER_FUNCTION(BeaconTimeout), pAd, FALSE); ++ RTMPInitTimer(pAd, &pAd->MlmeAux.ScanTimer, ++ GET_TIMER_FUNCTION(ScanTimeout), pAd, FALSE); + } + + /* +@@ -94,15 +111,13 @@ VOID SyncStateMachineInit( + + ========================================================================== + */ +-VOID BeaconTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID BeaconTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- DBGPRINT(RT_DEBUG_TRACE,("SYNC - BeaconTimeout\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeout\n")); + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt +@@ -110,16 +125,17 @@ VOID BeaconTimeout( + return; + + if ((pAd->CommonCfg.BBPCurrentBW == BW_40) +- ) +- { +- UCHAR BBPValue = 0; ++ ) { ++ UCHAR BBPValue = 0; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + BBPValue |= 0x10; + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n", ++ pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr)); + } + + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_BEACON_TIMEOUT, 0, NULL); +@@ -135,32 +151,28 @@ VOID BeaconTimeout( + + ========================================================================== + */ +-VOID ScanTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID ScanTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- ++ RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + + // Do nothing if the driver is starting halt state. + // This might happen when timer already been fired before cancel timer with mlmehalt + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) + return; + +- if (MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL)) +- { +- RTMP_MLME_HANDLER(pAd); +-} +- else +- { ++ if (MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL)) { ++ RTMP_MLME_HANDLER(pAd); ++ } else { + // To prevent SyncMachine.CurrState is SCAN_LISTEN forever. + pAd->MlmeAux.Channel = 0; + ScanNextChannel(pAd); +- if (pAd->CommonCfg.bWirelessEvent) +- { +- RTMPSendWirelessEvent(pAd, IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ if (pAd->CommonCfg.bWirelessEvent) { ++ RTMPSendWirelessEvent(pAd, ++ IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG, ++ pAd->MacTab.Content[BSSID_WCID]. ++ Addr, BSS0, 0); + } + } + } +@@ -171,83 +183,78 @@ VOID ScanTimeout( + MLME SCAN req state machine procedure + ========================================================================== + */ +-VOID MlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; +- BOOLEAN TimerCancelled; +- ULONG Now; +- USHORT Status; ++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; ++ BOOLEAN TimerCancelled; ++ ULONG Now; ++ USHORT Status; + PHEADER_802_11 pHdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; ++ PUCHAR pOutBuffer = NULL; ++ NDIS_STATUS NStatus; + + // Check the total scan tries for one single OID command + // If this is the CCX 2.0 Case, skip that! +- if ( !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeScanReqAction before Startup\n")); ++ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - MlmeScanReqAction before Startup\n")); + return; + } +- + // Increase the scan retry counters. + pAd->StaCfg.ScanCnt++; + + #ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && +- (IDLE_ON(pAd)) && +- (pAd->StaCfg.bRadio == TRUE) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) +- { +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); ++ if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && ++ (IDLE_ON(pAd)) && ++ (pAd->StaCfg.bRadio == TRUE) && ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) { ++ if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) { ++ AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, ++ 0x02); + AsicCheckCommanOk(pAd, PowerWakeCID); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- DBGPRINT(RT_DEBUG_TRACE, ("PSM - Issue Wake up command \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PSM - Issue Wake up command \n")); ++ } else { ++ RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } +- else +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- } + } + #endif // RTMP_MAC_PCI // + + // first check the parameter sanity + if (MlmeScanReqSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- &BssType, +- (PCHAR)Ssid, +- &SsidLen, +- &ScanType)) +- { ++ Elem->Msg, ++ Elem->MsgLen, ++ &BssType, (PCHAR) Ssid, &SsidLen, &ScanType)) { + + // Check for channel load and noise hist request + // Suspend MSDU only at scan request, not the last two mentioned +- // Suspend MSDU transmission here +- RTMPSuspendMsduTransmission(pAd); ++ // Suspend MSDU transmission here ++ RTMPSuspendMsduTransmission(pAd); + + // + // To prevent data lost. + // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. + // And should send an NULL data with turned PSM bit off to AP, when scan progress done + // +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd))) +- { +- NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { ++ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) ++ && (INFRA_ON(pAd))) { ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); ++ if (NStatus == NDIS_STATUS_SUCCESS) { + pHdr80211 = (PHEADER_802_11) pOutBuffer; +- MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid); ++ MgtMacHeaderInit(pAd, pHdr80211, ++ SUBTYPE_NULL_FUNC, 1, ++ pAd->CommonCfg.Bssid, ++ pAd->CommonCfg.Bssid); + pHdr80211->Duration = 0; + pHdr80211->FC.Type = BTYPE_DATA; + pHdr80211->FC.PwrMgmt = PWR_SAVE; + + // Send using priority queue +- MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11)); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame for off channel RM\n")); ++ MiniportMMRequest(pAd, 0, pOutBuffer, ++ sizeof(HEADER_802_11)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeScanReqAction -- Send PSM Data frame for off channel RM\n")); + MlmeFreeMemory(pAd, pOutBuffer); + RTMPusecDelay(5000); + } +@@ -263,7 +270,7 @@ VOID MlmeScanReqAction( + pAd->MlmeAux.BssType = BssType; + pAd->MlmeAux.ScanType = ScanType; + pAd->MlmeAux.SsidLen = SsidLen; +- NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); ++ NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); + + // start from the first channel +@@ -275,13 +282,12 @@ VOID MlmeScanReqAction( + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); + ScanNextChannel(pAd); +- } +- else +- { ++ } else { + DBGPRINT_ERR(("SYNC - MlmeScanReqAction() sanity check fail\n")); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, ++ &Status); + } + } + +@@ -291,33 +297,31 @@ VOID MlmeScanReqAction( + MLME JOIN req state machine procedure + ========================================================================== + */ +-VOID MlmeJoinReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR BBPValue = 0; +- BSS_ENTRY *pBss; +- BOOLEAN TimerCancelled; ++ UCHAR BBPValue = 0; ++ BSS_ENTRY *pBss; ++ BOOLEAN TimerCancelled; + HEADER_802_11 Hdr80211; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pSupRate = NULL; +- UCHAR SupRateLen; +- PUCHAR pExtRate = NULL; +- UCHAR ExtRateLen; +- UCHAR ASupRate[] = {0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C}; +- UCHAR ASupRateLen = sizeof(ASupRate)/sizeof(UCHAR); +- MLME_JOIN_REQ_STRUCT *pInfo = (MLME_JOIN_REQ_STRUCT *)(Elem->Msg); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); ++ NDIS_STATUS NStatus; ++ ULONG FrameLen = 0; ++ PUCHAR pOutBuffer = NULL; ++ PUCHAR pSupRate = NULL; ++ UCHAR SupRateLen; ++ PUCHAR pExtRate = NULL; ++ UCHAR ExtRateLen; ++ UCHAR ASupRate[] = { 0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C }; ++ UCHAR ASupRateLen = sizeof(ASupRate) / sizeof(UCHAR); ++ MLME_JOIN_REQ_STRUCT *pInfo = (MLME_JOIN_REQ_STRUCT *) (Elem->Msg); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); + + #ifdef RTMP_MAC_PCI +- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && +- (IDLE_ON(pAd)) && +- (pAd->StaCfg.bRadio == TRUE) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { ++ if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) && ++ (IDLE_ON(pAd)) && ++ (pAd->StaCfg.bRadio == TRUE) && ++ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } + #endif // RTMP_MAC_PCI // +@@ -332,8 +336,7 @@ VOID MlmeJoinReqAction( + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pBss->Bssid); + + // If AP's SSID is not hidden, it is OK for updating ssid to MlmeAux again. +- if (pBss->Hidden == 0) +- { ++ if (pBss->Hidden == 0) { + RTMPZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pBss->Ssid, pBss->SsidLen); + pAd->MlmeAux.SsidLen = pBss->SsidLen; +@@ -343,7 +346,6 @@ VOID MlmeJoinReqAction( + pAd->MlmeAux.Channel = pBss->Channel; + pAd->MlmeAux.CentralChannel = pBss->CentralChannel; + +- + // Let BBP register at 20MHz to do scan + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); +@@ -356,35 +358,28 @@ VOID MlmeJoinReqAction( + AsicLockChannel(pAd, pAd->MlmeAux.Channel); + RTMPSetTimer(&pAd->MlmeAux.BeaconTimer, JOIN_TIMEOUT); + +- do +- { ++ do { + if (((pAd->CommonCfg.bIEEE80211H == 1) && +- (pAd->MlmeAux.Channel > 14) && +- RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) +- ) +- { ++ (pAd->MlmeAux.Channel > 14) && ++ RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) ++ ) { + // + // We can't send any Probe request frame to meet 802.11h. + // + if (pBss->Hidden == 0) + break; + } +- + // + // send probe request + // + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); +- if (NStatus == NDIS_STATUS_SUCCESS) +- { +- if (pAd->MlmeAux.Channel <= 14) +- { ++ if (NStatus == NDIS_STATUS_SUCCESS) { ++ if (pAd->MlmeAux.Channel <= 14) { + pSupRate = pAd->CommonCfg.SupRate; + SupRateLen = pAd->CommonCfg.SupRateLen; + pExtRate = pAd->CommonCfg.ExtRate; + ExtRateLen = pAd->CommonCfg.ExtRateLen; +- } +- else +- { ++ } else { + // + // Overwrite Support Rate, CCK rate are not allowed + // +@@ -394,39 +389,44 @@ VOID MlmeJoinReqAction( + } + + if (pAd->MlmeAux.BssType == BSS_INFRA) +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, pAd->MlmeAux.Bssid, pAd->MlmeAux.Bssid); ++ MgtMacHeaderInit(pAd, &Hdr80211, ++ SUBTYPE_PROBE_REQ, 0, ++ pAd->MlmeAux.Bssid, ++ pAd->MlmeAux.Bssid); + else +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &pAd->MlmeAux.SsidLen, +- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid, +- 1, &SupRateIe, +- 1, &SupRateLen, +- SupRateLen, pSupRate, +- END_OF_ARGS); +- +- if (ExtRateLen) +- { ++ MgtMacHeaderInit(pAd, &Hdr80211, ++ SUBTYPE_PROBE_REQ, 0, ++ BROADCAST_ADDR, ++ BROADCAST_ADDR); ++ ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &Hdr80211, ++ 1, &SsidIe, ++ 1, &pAd->MlmeAux.SsidLen, ++ pAd->MlmeAux.SsidLen, ++ pAd->MlmeAux.Ssid, 1, &SupRateIe, 1, ++ &SupRateLen, SupRateLen, pSupRate, ++ END_OF_ARGS); ++ ++ if (ExtRateLen) { + ULONG Tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, +- 1, &ExtRateIe, +- 1, &ExtRateLen, +- ExtRateLen, pExtRate, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, ++ 1, &ExtRateIe, ++ 1, &ExtRateLen, ++ ExtRateLen, pExtRate, ++ END_OF_ARGS); + FrameLen += Tmp; + } + +- + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } +- } while (FALSE); ++ } while (FALSE); + +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Switch to ch %d, Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x\n", +- pBss->Channel, pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5])); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - Switch to ch %d, Wait BEACON from %02x:%02x:%02x:%02x:%02x:%02x\n", ++ pBss->Channel, pBss->Bssid[0], pBss->Bssid[1], pBss->Bssid[2], ++ pBss->Bssid[3], pBss->Bssid[4], pBss->Bssid[5])); + + pAd->Mlme.SyncMachine.CurrState = JOIN_WAIT_BEACON; + } +@@ -437,28 +437,26 @@ VOID MlmeJoinReqAction( + MLME START Request state machine procedure, starting an IBSS + ========================================================================== + */ +-VOID MlmeStartReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen; +- BOOLEAN TimerCancelled; ++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen; ++ BOOLEAN TimerCancelled; + + // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- LARGE_INTEGER TimeStamp; ++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ LARGE_INTEGER TimeStamp; + BOOLEAN Privacy; + USHORT Status; + + // Init Variable IE structure + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; +- TimeStamp.u.LowPart = 0; ++ TimeStamp.u.LowPart = 0; + TimeStamp.u.HighPart = 0; + +- if (MlmeStartReqSanity(pAd, Elem->Msg, Elem->MsgLen, (PCHAR)Ssid, &SsidLen)) +- { ++ if (MlmeStartReqSanity ++ (pAd, Elem->Msg, Elem->MsgLen, (PCHAR) Ssid, &SsidLen)) { + // reset all the timers + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +@@ -466,67 +464,83 @@ VOID MlmeStartReqAction( + // + // Start a new IBSS. All IBSS parameters are decided now.... + // +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - Start a new IBSS. All IBSS parameters are decided now.... \n")); +- pAd->MlmeAux.BssType = BSS_ADHOC; ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeStartReqAction - Start a new IBSS. All IBSS parameters are decided now.... \n")); ++ pAd->MlmeAux.BssType = BSS_ADHOC; + NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); +- pAd->MlmeAux.SsidLen = SsidLen; ++ pAd->MlmeAux.SsidLen = SsidLen; + + // generate a radom number as BSSID + MacAddrRandomBssid(pAd, pAd->MlmeAux.Bssid); +- DBGPRINT(RT_DEBUG_TRACE, ("MlmeStartReqAction - generate a radom number as BSSID \n")); +- +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- pAd->MlmeAux.CapabilityInfo = CAP_GENERATE(0,1,Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 1, 0); +- pAd->MlmeAux.BeaconPeriod = pAd->CommonCfg.BeaconPeriod; +- pAd->MlmeAux.AtimWin = pAd->StaCfg.AtimWin; +- pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; +- +- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- pAd->MlmeAux.CentralChannel = pAd->CommonCfg.CentralChannel; +- +- pAd->MlmeAux.SupRateLen= pAd->CommonCfg.SupRateLen; +- NdisMoveMemory(pAd->MlmeAux.SupRate, pAd->CommonCfg.SupRate, MAX_LEN_OF_SUPPORTED_RATES); +- RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("MlmeStartReqAction - generate a radom number as BSSID \n")); ++ ++ Privacy = ++ (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) ++ || (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) ++ || (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); ++ pAd->MlmeAux.CapabilityInfo = ++ CAP_GENERATE(0, 1, Privacy, ++ (pAd->CommonCfg.TxPreamble == ++ Rt802_11PreambleShort), 1, 0); ++ pAd->MlmeAux.BeaconPeriod = pAd->CommonCfg.BeaconPeriod; ++ pAd->MlmeAux.AtimWin = pAd->StaCfg.AtimWin; ++ pAd->MlmeAux.Channel = pAd->CommonCfg.Channel; ++ ++ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; ++ pAd->MlmeAux.CentralChannel = pAd->CommonCfg.CentralChannel; ++ ++ pAd->MlmeAux.SupRateLen = pAd->CommonCfg.SupRateLen; ++ NdisMoveMemory(pAd->MlmeAux.SupRate, pAd->CommonCfg.SupRate, ++ MAX_LEN_OF_SUPPORTED_RATES); ++ RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, ++ &pAd->MlmeAux.SupRateLen); + pAd->MlmeAux.ExtRateLen = pAd->CommonCfg.ExtRateLen; +- NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES); +- RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +- +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { +- RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo); ++ NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->CommonCfg.ExtRate, ++ MAX_LEN_OF_SUPPORTED_RATES); ++ RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, ++ &pAd->MlmeAux.ExtRateLen); ++ ++ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { ++ RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, ++ &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], ++ &pAd->MlmeAux.HtCapability, ++ &pAd->MlmeAux.AddHtInfo); + pAd->MlmeAux.HtCapabilityLen = sizeof(HT_CAPABILITY_IE); + // Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here. +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n")); +- } +- else +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n")); ++ } else { + pAd->MlmeAux.HtCapabilityLen = 0; + pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; +- NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16); ++ NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo. ++ MCSSet[0], 16); + } + // temporarily not support QOS in IBSS + NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM)); ++ NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, ++ sizeof(QBSS_LOAD_PARM)); ++ NdisZeroMemory(&pAd->MlmeAux.APQosCapability, ++ sizeof(QOS_CAPABILITY_PARM)); + + AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE); + AsicLockChannel(pAd, pAd->MlmeAux.Channel); + +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n", +- pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n", ++ pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, ++ pAd->MlmeAux.ExtRateLen)); + + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); +- } +- else +- { ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, ++ &Status); ++ } else { + DBGPRINT_ERR(("SYNC - MlmeStartReqAction() sanity check fail.\n")); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_INVALID_FORMAT; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, ++ &Status); + } + } + +@@ -536,35 +550,33 @@ VOID MlmeStartReqAction( + peer sends beacon back when scanning + ========================================================================== + */ +-VOID PeerBeaconAtScanAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, +- SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe; +- CF_PARM CfParm; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; +- PFRAME_802_11 pFrame; +- LARGE_INTEGER TimeStamp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- USHORT LenVIE; +- UCHAR CkipFlag; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; ++ UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, ++ SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe; ++ CF_PARM CfParm; ++ USHORT BeaconPeriod, AtimWin, CapabilityInfo; ++ PFRAME_802_11 pFrame; ++ LARGE_INTEGER TimeStamp; ++ UCHAR Erp; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen, ExtRateLen; ++ USHORT LenVIE; ++ UCHAR CkipFlag; ++ UCHAR AironetCellPowerLimit; ++ EDCA_PARM EdcaParm; ++ QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- ++ ULONG RalinkIe; ++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChannelOffset = 0xff; + + // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); + pFrame = (PFRAME_802_11) Elem->Msg; +@@ -572,49 +584,46 @@ VOID PeerBeaconAtScanAction( + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; + +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); ++ RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); + RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); + + if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- (PCHAR)Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &CfParm, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { ++ Elem->Msg, ++ Elem->MsgLen, ++ Elem->Channel, ++ Addr2, ++ Bssid, ++ (PCHAR) Ssid, ++ &SsidLen, ++ &BssType, ++ &BeaconPeriod, ++ &Channel, ++ &NewChannel, ++ &TimeStamp, ++ &CfParm, ++ &AtimWin, ++ &CapabilityInfo, ++ &Erp, ++ &DtimCount, ++ &DtimPeriod, ++ &BcastFlag, ++ &MessageToMe, ++ SupRate, ++ &SupRateLen, ++ ExtRate, ++ &ExtRateLen, ++ &CkipFlag, ++ &AironetCellPowerLimit, ++ &EdcaParm, ++ &QbssLoad, ++ &QosCapability, ++ &RalinkIe, ++ &HtCapabilityLen, ++ &PreNHtCapabilityLen, ++ &HtCapability, ++ &AddHtInfoLen, ++ &AddHtInfo, ++ &NewExtChannelOffset, &LenVIE, pVIE)) { + ULONG Idx; + CHAR Rssi = 0; + +@@ -622,22 +631,32 @@ VOID PeerBeaconAtScanAction( + if (Idx != BSS_NOT_FOUND) + Rssi = pAd->ScanTab.BssEntry[Idx].Rssi; + +- Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); ++ Rssi = ++ RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ++ ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ++ ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); + + if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) + HtCapabilityLen = SIZE_HT_CAP_IE; + +- Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (PCHAR)Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- +- if (Idx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- } ++ Idx = ++ BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (PCHAR) Ssid, ++ SsidLen, BssType, BeaconPeriod, &CfParm, ++ AtimWin, CapabilityInfo, SupRate, ++ SupRateLen, ExtRate, ExtRateLen, ++ &HtCapability, &AddHtInfo, HtCapabilityLen, ++ AddHtInfoLen, NewExtChannelOffset, Channel, ++ Rssi, TimeStamp, CkipFlag, &EdcaParm, ++ &QosCapability, &QbssLoad, LenVIE, pVIE); ++ ++ if (Idx != BSS_NOT_FOUND) { ++ NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, ++ &Elem->Msg[24], 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], ++ &Elem->TimeStamp.u.LowPart, 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], ++ &Elem->TimeStamp.u.LowPart, 4); ++ } + + } + // sanity check fail, ignored +@@ -649,88 +668,85 @@ VOID PeerBeaconAtScanAction( + When waiting joining the (I)BSS, beacon received from external + ========================================================================== + */ +-VOID PeerBeaconAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, +- DtimCount, DtimPeriod, BcastFlag, NewChannel; ++ UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, ++ DtimCount, DtimPeriod, BcastFlag, NewChannel; + LARGE_INTEGER TimeStamp; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; +- CF_PARM Cf; +- BOOLEAN TimerCancelled; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; ++ USHORT BeaconPeriod, AtimWin, CapabilityInfo; ++ CF_PARM Cf; ++ BOOLEAN TimerCancelled; ++ UCHAR Erp; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen, ExtRateLen; ++ UCHAR CkipFlag; ++ USHORT LenVIE; ++ UCHAR AironetCellPowerLimit; ++ EDCA_PARM EdcaParm; ++ QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- USHORT Status; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- ULONG RalinkIe; +- ULONG Idx; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- UCHAR CentralChannel; +- BOOLEAN bAllowNrate = FALSE; ++ USHORT Status; ++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ ULONG RalinkIe; ++ ULONG Idx; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChannelOffset = 0xff; ++ UCHAR CentralChannel; ++ BOOLEAN bAllowNrate = FALSE; + + // Init Variable IE structure + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); ++ RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); + RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); + +- + if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- (PCHAR)Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &Cf, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { ++ Elem->Msg, ++ Elem->MsgLen, ++ Elem->Channel, ++ Addr2, ++ Bssid, ++ (PCHAR) Ssid, ++ &SsidLen, ++ &BssType, ++ &BeaconPeriod, ++ &Channel, ++ &NewChannel, ++ &TimeStamp, ++ &Cf, ++ &AtimWin, ++ &CapabilityInfo, ++ &Erp, ++ &DtimCount, ++ &DtimPeriod, ++ &BcastFlag, ++ &MessageToMe, ++ SupRate, ++ &SupRateLen, ++ ExtRate, ++ &ExtRateLen, ++ &CkipFlag, ++ &AironetCellPowerLimit, ++ &EdcaParm, ++ &QbssLoad, ++ &QosCapability, ++ &RalinkIe, ++ &HtCapabilityLen, ++ &PreNHtCapabilityLen, ++ &HtCapability, ++ &AddHtInfoLen, ++ &AddHtInfo, ++ &NewExtChannelOffset, &LenVIE, pVIE)) { + // Disqualify 11b only adhoc when we are in 11g only adhoc mode +- if ((BssType == BSS_ADHOC) && (pAd->CommonCfg.PhyMode == PHY_11G) && ((SupRateLen+ExtRateLen)< 12)) ++ if ((BssType == BSS_ADHOC) ++ && (pAd->CommonCfg.PhyMode == PHY_11G) ++ && ((SupRateLen + ExtRateLen) < 12)) + return; + + // BEACON from desired BSS/IBSS found. We should be able to decide most +@@ -739,61 +755,120 @@ VOID PeerBeaconAtJoinAction( + // Do we need to receover back all parameters belonging to previous BSS? + // A. Should be not. There's no back-door recover to previous AP. It still need + // a new JOIN-AUTH-ASSOC sequence. +- if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", Channel)); +- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); ++ if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", ++ Channel)); ++ RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, ++ &TimerCancelled); + + // Update RSSI to prevent No signal display when cards first initialized +- pAd->StaCfg.RssiSample.LastRssi0 = ConvertToRssi(pAd, Elem->Rssi0, RSSI_0); +- pAd->StaCfg.RssiSample.LastRssi1 = ConvertToRssi(pAd, Elem->Rssi1, RSSI_1); +- pAd->StaCfg.RssiSample.LastRssi2 = ConvertToRssi(pAd, Elem->Rssi2, RSSI_2); +- pAd->StaCfg.RssiSample.AvgRssi0 = pAd->StaCfg.RssiSample.LastRssi0; +- pAd->StaCfg.RssiSample.AvgRssi0X8 = pAd->StaCfg.RssiSample.AvgRssi0 << 3; +- pAd->StaCfg.RssiSample.AvgRssi1 = pAd->StaCfg.RssiSample.LastRssi1; +- pAd->StaCfg.RssiSample.AvgRssi1X8 = pAd->StaCfg.RssiSample.AvgRssi1 << 3; +- pAd->StaCfg.RssiSample.AvgRssi2 = pAd->StaCfg.RssiSample.LastRssi2; +- pAd->StaCfg.RssiSample.AvgRssi2X8 = pAd->StaCfg.RssiSample.AvgRssi2 << 3; ++ pAd->StaCfg.RssiSample.LastRssi0 = ++ ConvertToRssi(pAd, Elem->Rssi0, RSSI_0); ++ pAd->StaCfg.RssiSample.LastRssi1 = ++ ConvertToRssi(pAd, Elem->Rssi1, RSSI_1); ++ pAd->StaCfg.RssiSample.LastRssi2 = ++ ConvertToRssi(pAd, Elem->Rssi2, RSSI_2); ++ pAd->StaCfg.RssiSample.AvgRssi0 = ++ pAd->StaCfg.RssiSample.LastRssi0; ++ pAd->StaCfg.RssiSample.AvgRssi0X8 = ++ pAd->StaCfg.RssiSample.AvgRssi0 << 3; ++ pAd->StaCfg.RssiSample.AvgRssi1 = ++ pAd->StaCfg.RssiSample.LastRssi1; ++ pAd->StaCfg.RssiSample.AvgRssi1X8 = ++ pAd->StaCfg.RssiSample.AvgRssi1 << 3; ++ pAd->StaCfg.RssiSample.AvgRssi2 = ++ pAd->StaCfg.RssiSample.LastRssi2; ++ pAd->StaCfg.RssiSample.AvgRssi2X8 = ++ pAd->StaCfg.RssiSample.AvgRssi2 << 3; + + // + // We need to check if SSID only set to any, then we can record the current SSID. + // Otherwise will cause hidden SSID association failed. + // +- if (pAd->MlmeAux.SsidLen == 0) +- { +- NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); ++ if (pAd->MlmeAux.SsidLen == 0) { ++ NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, ++ SsidLen); + pAd->MlmeAux.SsidLen = SsidLen; +- } +- else +- { +- Idx = BssSsidTableSearch(&pAd->ScanTab, Bssid, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen, Channel); +- +- if (Idx == BSS_NOT_FOUND) +- { ++ } else { ++ Idx = ++ BssSsidTableSearch(&pAd->ScanTab, Bssid, ++ pAd->MlmeAux.Ssid, ++ pAd->MlmeAux.SsidLen, ++ Channel); ++ ++ if (Idx == BSS_NOT_FOUND) { + CHAR Rssi = 0; +- Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- Idx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (CHAR *) Ssid, SsidLen, BssType, BeaconPeriod, +- &Cf, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); +- if (Idx != BSS_NOT_FOUND) +- { +- NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Idx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo; ++ Rssi = ++ RTMPMaxRssi(pAd, ++ ConvertToRssi(pAd, ++ Elem-> ++ Rssi0, ++ RSSI_0), ++ ConvertToRssi(pAd, ++ Elem-> ++ Rssi1, ++ RSSI_1), ++ ConvertToRssi(pAd, ++ Elem-> ++ Rssi2, ++ RSSI_2)); ++ Idx = ++ BssTableSetEntry(pAd, &pAd->ScanTab, ++ Bssid, ++ (CHAR *) Ssid, ++ SsidLen, BssType, ++ BeaconPeriod, &Cf, ++ AtimWin, ++ CapabilityInfo, ++ SupRate, ++ SupRateLen, ++ ExtRate, ++ ExtRateLen, ++ &HtCapability, ++ &AddHtInfo, ++ HtCapabilityLen, ++ AddHtInfoLen, ++ NewExtChannelOffset, ++ Channel, Rssi, ++ TimeStamp, ++ CkipFlag, ++ &EdcaParm, ++ &QosCapability, ++ &QbssLoad, LenVIE, ++ pVIE); ++ if (Idx != BSS_NOT_FOUND) { ++ NdisMoveMemory(pAd->ScanTab. ++ BssEntry[Idx]. ++ PTSF, ++ &Elem->Msg[24], ++ 4); ++ NdisMoveMemory(&pAd->ScanTab. ++ BssEntry[Idx]. ++ TTSF[0], ++ &Elem->TimeStamp. ++ u.LowPart, 4); ++ NdisMoveMemory(&pAd->ScanTab. ++ BssEntry[Idx]. ++ TTSF[4], ++ &Elem->TimeStamp. ++ u.LowPart, 4); ++ CapabilityInfo = ++ pAd->ScanTab.BssEntry[Idx]. ++ CapabilityInfo; + } +- } +- else +- { ++ } else { + // + // Multiple SSID case, used correct CapabilityInfo + // +- CapabilityInfo = pAd->ScanTab.BssEntry[Idx].CapabilityInfo; ++ CapabilityInfo = ++ pAd->ScanTab.BssEntry[Idx]. ++ CapabilityInfo; + } + } + NdisMoveMemory(pAd->MlmeAux.Bssid, Bssid, MAC_ADDR_LEN); +- pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; ++ pAd->MlmeAux.CapabilityInfo = ++ CapabilityInfo & SUPPORTED_CAPABILITY_INFO; + pAd->MlmeAux.BssType = BssType; + pAd->MlmeAux.BeaconPeriod = BeaconPeriod; + pAd->MlmeAux.Channel = Channel; +@@ -805,110 +880,152 @@ VOID PeerBeaconAtJoinAction( + // Copy AP's supported rate to MlmeAux for creating assoication request + // Also filter out not supported rate + pAd->MlmeAux.SupRateLen = SupRateLen; +- NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); ++ NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, ++ SupRateLen); ++ RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, ++ &pAd->MlmeAux.SupRateLen); + pAd->MlmeAux.ExtRateLen = ExtRateLen; +- NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen); +- RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +- +- NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16); +- +- +- if (((pAd->StaCfg.WepStatus != Ndis802_11WEPEnabled) && (pAd->StaCfg.WepStatus != Ndis802_11Encryption2Enabled)) +- || (pAd->CommonCfg.HT_DisallowTKIP == FALSE)) +- { ++ NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ++ ExtRateLen); ++ RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, ++ &pAd->MlmeAux.ExtRateLen); ++ ++ NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, ++ 16); ++ ++ if (((pAd->StaCfg.WepStatus != Ndis802_11WEPEnabled) ++ && (pAd->StaCfg.WepStatus != ++ Ndis802_11Encryption2Enabled)) ++ || (pAd->CommonCfg.HT_DisallowTKIP == FALSE)) { + bAllowNrate = TRUE; + } + + pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset; + pAd->MlmeAux.HtCapabilityLen = HtCapabilityLen; + +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); ++ RTMPZeroMemory(&pAd->MlmeAux.HtCapability, ++ SIZE_HT_CAP_IE); + // filter out un-supported ht rates +- if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && +- ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (bAllowNrate))) +- { +- RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, SIZE_ADD_HT_INFO_IE); ++ if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) ++ && ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) ++ && (bAllowNrate))) { ++ RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, ++ &AddHtInfo, SIZE_ADD_HT_INFO_IE); + + // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability +- NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16); +- pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset; ++ NdisMoveMemory(pAd->StaActive.SupportedPhyInfo. ++ MCSSet, HtCapability.MCSSet, 16); ++ pAd->MlmeAux.NewExtChannelOffset = ++ NewExtChannelOffset; + pAd->MlmeAux.HtCapabilityLen = SIZE_HT_CAP_IE; +- pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE; ++ pAd->StaActive.SupportedPhyInfo.bHtEnable = ++ TRUE; + if (PreNHtCapabilityLen > 0) +- pAd->StaActive.SupportedPhyInfo.bPreNHt = TRUE; +- RTMPCheckHt(pAd, BSSID_WCID, &HtCapability, &AddHtInfo); ++ pAd->StaActive.SupportedPhyInfo. ++ bPreNHt = TRUE; ++ RTMPCheckHt(pAd, BSSID_WCID, &HtCapability, ++ &AddHtInfo); + // Copy AP Parameter to StaActive. This is also in LinkUp. +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction! (MpduDensity=%d, MaxRAmpduFactor=%d, BW=%d)\n", +- pAd->StaActive.SupportedHtPhy.MpduDensity, pAd->StaActive.SupportedHtPhy.MaxRAmpduFactor, HtCapability.HtCapInfo.ChannelWidth)); +- +- if (AddHtInfoLen > 0) +- { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAtJoinAction! (MpduDensity=%d, MaxRAmpduFactor=%d, BW=%d)\n", ++ pAd->StaActive.SupportedHtPhy. ++ MpduDensity, ++ pAd->StaActive.SupportedHtPhy. ++ MaxRAmpduFactor, ++ HtCapability.HtCapInfo.ChannelWidth)); ++ ++ if (AddHtInfoLen > 0) { + CentralChannel = AddHtInfo.ControlChan; +- // Check again the Bandwidth capability of this AP. +- if ((AddHtInfo.ControlChan > 2)&& (AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW) && (HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- CentralChannel = AddHtInfo.ControlChan - 2; +- } +- else if ((AddHtInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE) && (HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- CentralChannel = AddHtInfo.ControlChan + 2; +- } +- ++ // Check again the Bandwidth capability of this AP. ++ if ((AddHtInfo.ControlChan > 2) ++ && (AddHtInfo.AddHtInfo. ++ ExtChanOffset == EXTCHA_BELOW) ++ && (HtCapability.HtCapInfo. ++ ChannelWidth == BW_40)) { ++ CentralChannel = ++ AddHtInfo.ControlChan - 2; ++ } else ++ if ((AddHtInfo.AddHtInfo. ++ ExtChanOffset == EXTCHA_ABOVE) ++ && (HtCapability.HtCapInfo. ++ ChannelWidth == BW_40)) { ++ CentralChannel = ++ AddHtInfo.ControlChan + 2; ++ } + // Check Error . +- if (pAd->MlmeAux.CentralChannel != CentralChannel) +- DBGPRINT(RT_DEBUG_ERROR, ("PeerBeaconAtJoinAction HT===>Beacon Central Channel = %d, Control Channel = %d. Mlmeaux CentralChannel = %d\n", CentralChannel, AddHtInfo.ControlChan, pAd->MlmeAux.CentralChannel)); +- +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAtJoinAction HT===>Central Channel = %d, Control Channel = %d, .\n", CentralChannel, AddHtInfo.ControlChan)); ++ if (pAd->MlmeAux.CentralChannel != ++ CentralChannel) ++ DBGPRINT(RT_DEBUG_ERROR, ++ ("PeerBeaconAtJoinAction HT===>Beacon Central Channel = %d, Control Channel = %d. Mlmeaux CentralChannel = %d\n", ++ CentralChannel, ++ AddHtInfo.ControlChan, ++ pAd->MlmeAux. ++ CentralChannel)); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeaconAtJoinAction HT===>Central Channel = %d, Control Channel = %d, .\n", ++ CentralChannel, ++ AddHtInfo.ControlChan)); + + } + +- } +- else +- { +- // To prevent error, let legacy AP must have same CentralChannel and Channel. +- if ((HtCapabilityLen == 0) && (PreNHtCapabilityLen == 0)) +- pAd->MlmeAux.CentralChannel = pAd->MlmeAux.Channel; ++ } else { ++ // To prevent error, let legacy AP must have same CentralChannel and Channel. ++ if ((HtCapabilityLen == 0) ++ && (PreNHtCapabilityLen == 0)) ++ pAd->MlmeAux.CentralChannel = ++ pAd->MlmeAux.Channel; + +- pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; ++ pAd->StaActive.SupportedPhyInfo.bHtEnable = ++ FALSE; + pAd->MlmeAux.NewExtChannelOffset = 0xff; +- RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE); ++ RTMPZeroMemory(&pAd->MlmeAux.HtCapability, ++ SIZE_HT_CAP_IE); + pAd->MlmeAux.HtCapabilityLen = 0; +- RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE); ++ RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, ++ SIZE_ADD_HT_INFO_IE); + } + + RTMPUpdateMlmeRate(pAd); + + // copy QOS related information + if ((pAd->CommonCfg.bWmmCapable) +- || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- ) +- { +- NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, &EdcaParm, sizeof(EDCA_PARM)); +- NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisMoveMemory(&pAd->MlmeAux.APQosCapability, &QosCapability, sizeof(QOS_CAPABILITY_PARM)); +- } +- else +- { +- NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisZeroMemory(&pAd->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM)); ++ || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) ++ ) { ++ NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, ++ &EdcaParm, sizeof(EDCA_PARM)); ++ NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, ++ &QbssLoad, ++ sizeof(QBSS_LOAD_PARM)); ++ NdisMoveMemory(&pAd->MlmeAux.APQosCapability, ++ &QosCapability, ++ sizeof(QOS_CAPABILITY_PARM)); ++ } else { ++ NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, ++ sizeof(EDCA_PARM)); ++ NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, ++ sizeof(QBSS_LOAD_PARM)); ++ NdisZeroMemory(&pAd->MlmeAux.APQosCapability, ++ sizeof(QOS_CAPABILITY_PARM)); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n", +- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n", ++ pAd->MlmeAux.SupRateLen, ++ pAd->MlmeAux.ExtRateLen)); + +- if (AironetCellPowerLimit != 0xFF) +- { ++ if (AironetCellPowerLimit != 0xFF) { + //We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power +- ChangeToCellPowerLimit(pAd, AironetCellPowerLimit); +- } +- else //Used the default TX Power Percentage. +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; ++ ChangeToCellPowerLimit(pAd, ++ AironetCellPowerLimit); ++ } else //Used the default TX Power Percentage. ++ pAd->CommonCfg.TxPowerPercentage = ++ pAd->CommonCfg.TxPowerDefault; + + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_SUCCESS; +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, ++ 2, &Status); + } + // not to me BEACON, ignored + } +@@ -924,98 +1041,99 @@ VOID PeerBeaconAtJoinAction( + + ========================================================================== + */ +-VOID PeerBeacon( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- CF_PARM CfParm; +- UCHAR SsidLen, MessageToMe=0, BssType, Channel, NewChannel, index=0; +- UCHAR DtimCount=0, DtimPeriod=0, BcastFlag=0; +- USHORT CapabilityInfo, AtimWin, BeaconPeriod; ++ UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ CHAR Ssid[MAX_LEN_OF_SSID]; ++ CF_PARM CfParm; ++ UCHAR SsidLen, MessageToMe = 0, BssType, Channel, NewChannel, index = 0; ++ UCHAR DtimCount = 0, DtimPeriod = 0, BcastFlag = 0; ++ USHORT CapabilityInfo, AtimWin, BeaconPeriod; + LARGE_INTEGER TimeStamp; +- USHORT TbttNumToNextWakeUp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; ++ USHORT TbttNumToNextWakeUp; ++ UCHAR Erp; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen, ExtRateLen; ++ UCHAR CkipFlag; ++ USHORT LenVIE; ++ UCHAR AironetCellPowerLimit; ++ EDCA_PARM EdcaParm; ++ QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; ++ ULONG RalinkIe; + // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR HtCapabilityLen, PreNHtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; ++ UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR HtCapabilityLen, PreNHtCapabilityLen; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChannelOffset = 0xff; + + if (!(INFRA_ON(pAd) || ADHOC_ON(pAd) +- )) ++ )) + return; + + // Init Variable IE structure + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; +- RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); ++ RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); + RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); + + if (PeerBeaconAndProbeRspSanity(pAd, +- Elem->Msg, +- Elem->MsgLen, +- Elem->Channel, +- Addr2, +- Bssid, +- Ssid, +- &SsidLen, +- &BssType, +- &BeaconPeriod, +- &Channel, +- &NewChannel, +- &TimeStamp, +- &CfParm, +- &AtimWin, +- &CapabilityInfo, +- &Erp, +- &DtimCount, +- &DtimPeriod, +- &BcastFlag, +- &MessageToMe, +- SupRate, +- &SupRateLen, +- ExtRate, +- &ExtRateLen, +- &CkipFlag, +- &AironetCellPowerLimit, +- &EdcaParm, +- &QbssLoad, +- &QosCapability, +- &RalinkIe, +- &HtCapabilityLen, +- &PreNHtCapabilityLen, +- &HtCapability, +- &AddHtInfoLen, +- &AddHtInfo, +- &NewExtChannelOffset, +- &LenVIE, +- pVIE)) +- { ++ Elem->Msg, ++ Elem->MsgLen, ++ Elem->Channel, ++ Addr2, ++ Bssid, ++ Ssid, ++ &SsidLen, ++ &BssType, ++ &BeaconPeriod, ++ &Channel, ++ &NewChannel, ++ &TimeStamp, ++ &CfParm, ++ &AtimWin, ++ &CapabilityInfo, ++ &Erp, ++ &DtimCount, ++ &DtimPeriod, ++ &BcastFlag, ++ &MessageToMe, ++ SupRate, ++ &SupRateLen, ++ ExtRate, ++ &ExtRateLen, ++ &CkipFlag, ++ &AironetCellPowerLimit, ++ &EdcaParm, ++ &QbssLoad, ++ &QosCapability, ++ &RalinkIe, ++ &HtCapabilityLen, ++ &PreNHtCapabilityLen, ++ &HtCapability, ++ &AddHtInfoLen, ++ &AddHtInfo, ++ &NewExtChannelOffset, &LenVIE, pVIE)) { + BOOLEAN is_my_bssid, is_my_ssid; +- ULONG Bssidx, Now; ++ ULONG Bssidx, Now; + BSS_ENTRY *pBss; +- CHAR RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +- +- is_my_bssid = MAC_ADDR_EQUAL(Bssid, pAd->CommonCfg.Bssid)? TRUE : FALSE; +- is_my_ssid = SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)? TRUE:FALSE; ++ CHAR RealRssi = ++ RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ++ ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ++ ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); + ++ is_my_bssid = ++ MAC_ADDR_EQUAL(Bssid, pAd->CommonCfg.Bssid) ? TRUE : FALSE; ++ is_my_ssid = ++ SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.SsidLen) ? TRUE : FALSE; + + // ignore BEACON not for my SSID +- if ((! is_my_ssid) && (! is_my_bssid)) ++ if ((!is_my_ssid) && (!is_my_bssid)) + return; + + // It means STA waits disassoc completely from this AP, ignores this beacon. +@@ -1033,177 +1151,194 @@ VOID PeerBeacon( + // Housekeeping "SsidBssTab" table for later-on ROAMing usage. + // + Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { ++ if (Bssidx == BSS_NOT_FOUND) { + // discover new AP of this network, create BSS entry +- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, +- &HtCapability, &AddHtInfo,HtCapabilityLen,AddHtInfoLen,NewExtChannelOffset, Channel, +- RealRssi, TimeStamp, CkipFlag, &EdcaParm, &QosCapability, +- &QbssLoad, LenVIE, pVIE); +- if (Bssidx == BSS_NOT_FOUND) // return if BSS table full ++ Bssidx = ++ BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, ++ SsidLen, BssType, BeaconPeriod, ++ &CfParm, AtimWin, CapabilityInfo, ++ SupRate, SupRateLen, ExtRate, ++ ExtRateLen, &HtCapability, ++ &AddHtInfo, HtCapabilityLen, ++ AddHtInfoLen, NewExtChannelOffset, ++ Channel, RealRssi, TimeStamp, ++ CkipFlag, &EdcaParm, ++ &QosCapability, &QbssLoad, LenVIE, ++ pVIE); ++ if (Bssidx == BSS_NOT_FOUND) // return if BSS table full + return; + +- NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4); +- NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4); +- +- ++ NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, ++ &Elem->Msg[24], 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], ++ &Elem->TimeStamp.u.LowPart, 4); ++ NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], ++ &Elem->TimeStamp.u.LowPart, 4); + + } + +- if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel)) +- { ++ if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) ++ && (Channel != NewChannel)) { + // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). + // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. + AsicSwitchChannel(pAd, 1, FALSE); + AsicLockChannel(pAd, 1); +- LinkDown(pAd, FALSE); ++ LinkDown(pAd, FALSE); + MlmeQueueInit(&pAd->Mlme.Queue); + BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc ++ RTMPusecDelay(1000000); // use delay to prevent STA do reassoc + + // channel sanity check +- for (index = 0 ; index < pAd->ChannelListNum; index++) +- { +- if (pAd->ChannelList[index].Channel == NewChannel) +- { +- pAd->ScanTab.BssEntry[Bssidx].Channel = NewChannel; ++ for (index = 0; index < pAd->ChannelListNum; index++) { ++ if (pAd->ChannelList[index].Channel == ++ NewChannel) { ++ pAd->ScanTab.BssEntry[Bssidx].Channel = ++ NewChannel; + pAd->CommonCfg.Channel = NewChannel; +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeacon - STA receive channel switch announcement IE (New Channel =%d)\n", NewChannel)); ++ AsicSwitchChannel(pAd, ++ pAd->CommonCfg. ++ Channel, FALSE); ++ AsicLockChannel(pAd, ++ pAd->CommonCfg.Channel); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("PeerBeacon - STA receive channel switch announcement IE (New Channel =%d)\n", ++ NewChannel)); + break; + } + } + +- if (index >= pAd->ChannelListNum) +- { ++ if (index >= pAd->ChannelListNum) { + DBGPRINT_ERR(("PeerBeacon(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum)); + } + } +- + // if the ssid matched & bssid unmatched, we should select the bssid with large value. + // This might happened when two STA start at the same time +- if ((! is_my_bssid) && ADHOC_ON(pAd)) +- { +- INT i; ++ if ((!is_my_bssid) && ADHOC_ON(pAd)) { ++ INT i; + + // Add the safeguard against the mismatch of adhoc wep status +- if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus) +- { ++ if (pAd->StaCfg.WepStatus != ++ pAd->ScanTab.BssEntry[Bssidx].WepStatus) { + return; + } +- + // collapse into the ADHOC network which has bigger BSSID value. +- for (i = 0; i < 6; i++) +- { +- if (Bssid[i] > pAd->CommonCfg.Bssid[i]) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - merge to the IBSS with bigger BSSID=%02x:%02x:%02x:%02x:%02x:%02x\n", +- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5])); ++ for (i = 0; i < 6; i++) { ++ if (Bssid[i] > pAd->CommonCfg.Bssid[i]) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - merge to the IBSS with bigger BSSID=%02x:%02x:%02x:%02x:%02x:%02x\n", ++ Bssid[0], Bssid[1], Bssid[2], ++ Bssid[3], Bssid[4], ++ Bssid[5])); + AsicDisableSync(pAd); +- COPY_MAC_ADDR(pAd->CommonCfg.Bssid, Bssid); ++ COPY_MAC_ADDR(pAd->CommonCfg.Bssid, ++ Bssid); + AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy BEACON frame to on-chip memory ++ MakeIbssBeacon(pAd); // re-build BEACON frame ++ AsicEnableIbssSync(pAd); // copy BEACON frame to on-chip memory + is_my_bssid = TRUE; + break; +- } +- else if (Bssid[i] < pAd->CommonCfg.Bssid[i]) ++ } else if (Bssid[i] < pAd->CommonCfg.Bssid[i]) + break; + } + } + +- + NdisGetSystemUpTime(&Now); + pBss = &pAd->ScanTab.BssEntry[Bssidx]; +- pBss->Rssi = RealRssi; // lastest RSSI +- pBss->LastBeaconRxTime = Now; // last RX timestamp ++ pBss->Rssi = RealRssi; // lastest RSSI ++ pBss->LastBeaconRxTime = Now; // last RX timestamp + + // + // BEACON from my BSSID - either IBSS or INFRA network + // +- if (is_my_bssid) +- { +- RXWI_STRUC RxWI; ++ if (is_my_bssid) { ++ RXWI_STRUC RxWI; + + pAd->StaCfg.DtimCount = DtimCount; + pAd->StaCfg.DtimPeriod = DtimPeriod; + pAd->StaCfg.LastBeaconRxTime = Now; + +- + RxWI.RSSI0 = Elem->Rssi0; + RxWI.RSSI1 = Elem->Rssi1; + RxWI.RSSI2 = Elem->Rssi2; + + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, &RxWI); +- if (AironetCellPowerLimit != 0xFF) +- { ++ if (AironetCellPowerLimit != 0xFF) { + // + // We get the Cisco (ccx) "TxPower Limit" required + // Changed to appropriate TxPower Limit for Ciso Compatible Extensions + // +- ChangeToCellPowerLimit(pAd, AironetCellPowerLimit); +- } +- else +- { ++ ChangeToCellPowerLimit(pAd, ++ AironetCellPowerLimit); ++ } else { + // + // AironetCellPowerLimit equal to 0xFF means the Cisco (ccx) "TxPower Limit" not exist. + // Used the default TX Power Percentage, that set from UI. + // +- pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; ++ pAd->CommonCfg.TxPowerPercentage = ++ pAd->CommonCfg.TxPowerDefault; + } + +- if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) +- { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; ++ if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) { ++ UCHAR MaxSupportedRateIn500Kbps = 0; ++ UCHAR idx; + MAC_TABLE_ENTRY *pEntry; + + // supported rates array may not be sorted. sort it and find the maximum rate +- for (idx=0; idxWcid == RESERVED_WCID)) || +- (pEntry && ((pEntry->LastBeaconRxTime + ADHOC_ENTRY_BEACON_LOST_TIME) < Now))) +- { ++ if ((ADHOC_ON(pAd) ++ && (Elem->Wcid == RESERVED_WCID)) ++ || (pEntry ++ && ++ ((pEntry->LastBeaconRxTime + ++ ADHOC_ENTRY_BEACON_LOST_TIME) < ++ Now))) { + if (pEntry == NULL) + // Another adhoc joining, add to our MAC table. +- pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE); ++ pEntry = ++ MacTableInsertEntry(pAd, ++ Addr2, ++ BSS0, ++ FALSE); + + if (StaAddMacTableEntry(pAd, +- pEntry, +- MaxSupportedRateIn500Kbps, +- &HtCapability, +- HtCapabilityLen, +- &AddHtInfo, +- AddHtInfoLen, +- CapabilityInfo) == FALSE) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC - Add Entry failed.\n")); ++ pEntry, ++ MaxSupportedRateIn500Kbps, ++ &HtCapability, ++ HtCapabilityLen, ++ &AddHtInfo, ++ AddHtInfoLen, ++ CapabilityInfo) ++ == FALSE) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ADHOC - Add Entry failed.\n")); + return; + } + + if (pEntry && +- (Elem->Wcid == RESERVED_WCID)) +- { ++ (Elem->Wcid == RESERVED_WCID)) { + idx = pAd->StaCfg.DefaultKeyId; +- RTMP_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); ++ RTMP_STA_SECURITY_INFO_ADD(pAd, ++ BSS0, ++ idx, ++ pEntry); + } + } + +@@ -1211,33 +1346,62 @@ VOID PeerBeacon( + pEntry->LastBeaconRxTime = Now; + + // At least another peer in this IBSS, declare MediaState as CONNECTED +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); ++ if (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { ++ OPSTATUS_SET_FLAG(pAd, ++ fOP_STATUS_MEDIA_STATE_CONNECTED); + +- pAd->IndicateMediaState = NdisMediaStateConnected; ++ pAd->IndicateMediaState = ++ NdisMediaStateConnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; ++ pAd->ExtraInfo = GENERAL_LINK_UP; + AsicSetBssid(pAd, pAd->CommonCfg.Bssid); + + // 2003/03/12 - john + // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that + // "site survey" result should always include the current connected network. + // +- Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); +- if (Bssidx == BSS_NOT_FOUND) +- { +- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, +- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, +- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0, +- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); ++ Bssidx = ++ BssTableSearch(&pAd->ScanTab, Bssid, ++ Channel); ++ if (Bssidx == BSS_NOT_FOUND) { ++ Bssidx = ++ BssTableSetEntry(pAd, ++ &pAd-> ++ ScanTab, ++ Bssid, ++ Ssid, ++ SsidLen, ++ BssType, ++ BeaconPeriod, ++ &CfParm, ++ AtimWin, ++ CapabilityInfo, ++ SupRate, ++ SupRateLen, ++ ExtRate, ++ ExtRateLen, ++ &HtCapability, ++ &AddHtInfo, ++ HtCapabilityLen, ++ AddHtInfoLen, ++ NewExtChannelOffset, ++ Channel, ++ RealRssi, ++ TimeStamp, ++ 0, ++ &EdcaParm, ++ &QosCapability, ++ &QbssLoad, ++ LenVIE, ++ pVIE); + } +- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); + } + } + +- if (INFRA_ON(pAd)) +- { ++ if (INFRA_ON(pAd)) { + BOOLEAN bUseShortSlot, bUseBGProtection; + + // decide to use/change to - +@@ -1246,174 +1410,283 @@ VOID PeerBeacon( + // 3. short preamble + + //bUseShortSlot = pAd->CommonCfg.bUseShortSlotTime && CAP_IS_SHORT_SLOT(CapabilityInfo); +- bUseShortSlot = CAP_IS_SHORT_SLOT(CapabilityInfo); +- if (bUseShortSlot != OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)) ++ bUseShortSlot = ++ CAP_IS_SHORT_SLOT(CapabilityInfo); ++ if (bUseShortSlot != ++ OPSTATUS_TEST_FLAG(pAd, ++ fOP_STATUS_SHORT_SLOT_INUSED)) + AsicSetSlotTime(pAd, bUseShortSlot); + +- bUseBGProtection = (pAd->CommonCfg.UseBGProtection == 1) || // always use +- ((pAd->CommonCfg.UseBGProtection == 0) && ERP_IS_USE_PROTECTION(Erp)); ++ bUseBGProtection = (pAd->CommonCfg.UseBGProtection == 1) || // always use ++ ((pAd->CommonCfg.UseBGProtection == 0) ++ && ERP_IS_USE_PROTECTION(Erp)); + +- if (pAd->CommonCfg.Channel > 14) // always no BG protection in A-band. falsely happened when switching A/G band to a dual-band AP ++ if (pAd->CommonCfg.Channel > 14) // always no BG protection in A-band. falsely happened when switching A/G band to a dual-band AP + bUseBGProtection = FALSE; + +- if (bUseBGProtection != OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED)) ++ if (bUseBGProtection != ++ OPSTATUS_TEST_FLAG(pAd, ++ fOP_STATUS_BG_PROTECTION_INUSED)) + { +- if (bUseBGProtection) +- { +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, (OFDMSETPROTECT|CCKSETPROTECT|ALLN_SETPROTECT),FALSE,(pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1)); +- } +- else +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, (OFDMSETPROTECT|CCKSETPROTECT|ALLN_SETPROTECT),TRUE,(pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1)); ++ if (bUseBGProtection) { ++ OPSTATUS_SET_FLAG(pAd, ++ fOP_STATUS_BG_PROTECTION_INUSED); ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ OperaionMode, ++ (OFDMSETPROTECT ++ | ++ CCKSETPROTECT ++ | ++ ALLN_SETPROTECT), ++ FALSE, ++ (pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ NonGfPresent ++ == 1)); ++ } else { ++ OPSTATUS_CLEAR_FLAG(pAd, ++ fOP_STATUS_BG_PROTECTION_INUSED); ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ OperaionMode, ++ (OFDMSETPROTECT ++ | ++ CCKSETPROTECT ++ | ++ ALLN_SETPROTECT), ++ TRUE, ++ (pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ NonGfPresent ++ == 1)); + } + +- DBGPRINT(RT_DEBUG_WARN, ("SYNC - AP changed B/G protection to %d\n", bUseBGProtection)); ++ DBGPRINT(RT_DEBUG_WARN, ++ ("SYNC - AP changed B/G protection to %d\n", ++ bUseBGProtection)); + } +- + // check Ht protection mode. and adhere to the Non-GF device indication by AP. + if ((AddHtInfoLen != 0) && +- ((AddHtInfo.AddHtInfo2.OperaionMode != pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode) || +- (AddHtInfo.AddHtInfo2.NonGfPresent != pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent))) +- { +- pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent = AddHtInfo.AddHtInfo2.NonGfPresent; +- pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode = AddHtInfo.AddHtInfo2.OperaionMode; +- if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) +- { +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, TRUE); +- } +- else +- AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE); +- +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP changed N OperaionMode to %d\n", pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode)); ++ ((AddHtInfo.AddHtInfo2.OperaionMode != ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ OperaionMode) ++ || (AddHtInfo.AddHtInfo2.NonGfPresent != ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ NonGfPresent))) { ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ NonGfPresent = ++ AddHtInfo.AddHtInfo2.NonGfPresent; ++ pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ OperaionMode = ++ AddHtInfo.AddHtInfo2.OperaionMode; ++ if (pAd->MlmeAux.AddHtInfo.AddHtInfo2. ++ NonGfPresent == 1) { ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ OperaionMode, ++ ALLN_SETPROTECT, ++ FALSE, TRUE); ++ } else ++ AsicUpdateProtect(pAd, ++ pAd->MlmeAux. ++ AddHtInfo. ++ AddHtInfo2. ++ OperaionMode, ++ ALLN_SETPROTECT, ++ FALSE, FALSE); ++ ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - AP changed N OperaionMode to %d\n", ++ pAd->MlmeAux.AddHtInfo. ++ AddHtInfo2.OperaionMode)); + } + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED) && +- ERP_IS_USE_BARKER_PREAMBLE(Erp)) +- { +- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong); +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP forced to use LONG preamble\n")); ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED) ++ && ERP_IS_USE_BARKER_PREAMBLE(Erp)) { ++ MlmeSetTxPreamble(pAd, ++ Rt802_11PreambleLong); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - AP forced to use LONG preamble\n")); + } + +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +- (EdcaParm.bValid == TRUE) && +- (EdcaParm.EdcaUpdateCount != pAd->CommonCfg.APEdcaParm.EdcaUpdateCount)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP change EDCA parameters(from %d to %d)\n", +- pAd->CommonCfg.APEdcaParm.EdcaUpdateCount, +- EdcaParm.EdcaUpdateCount)); ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_WMM_INUSED) ++ && (EdcaParm.bValid == TRUE) ++ && (EdcaParm.EdcaUpdateCount != ++ pAd->CommonCfg.APEdcaParm. ++ EdcaUpdateCount)) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("SYNC - AP change EDCA parameters(from %d to %d)\n", ++ pAd->CommonCfg.APEdcaParm. ++ EdcaUpdateCount, ++ EdcaParm.EdcaUpdateCount)); + AsicSetEdcaParm(pAd, &EdcaParm); + } +- + // copy QOS related information +- NdisMoveMemory(&pAd->CommonCfg.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM)); +- NdisMoveMemory(&pAd->CommonCfg.APQosCapability, &QosCapability, sizeof(QOS_CAPABILITY_PARM)); ++ NdisMoveMemory(&pAd->CommonCfg.APQbssLoad, ++ &QbssLoad, ++ sizeof(QBSS_LOAD_PARM)); ++ NdisMoveMemory(&pAd->CommonCfg.APQosCapability, ++ &QosCapability, ++ sizeof(QOS_CAPABILITY_PARM)); + } +- + // only INFRASTRUCTURE mode support power-saving feature +- if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) || (pAd->CommonCfg.bAPSDForcePowerSave)) +- { ++ if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) ++ || (pAd->CommonCfg.bAPSDForcePowerSave)) { + UCHAR FreeNumber; + // 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL + // 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE + // 3. we have outgoing frames in TxRing or MgmtRing, better stay AWAKE + // 4. Psm change to PWR_SAVE, but AP not been informed yet, we better stay AWAKE + // 5. otherwise, put PHY back to sleep to save battery. +- if (MessageToMe) +- { ++ if (MessageToMe) { + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_PCIE_DEVICE)) { + // Restore to correct BBP R3 value +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); ++ if (pAd->Antenna.field.RxPath > ++ 1) ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R3, ++ pAd->StaCfg.BBPR3); + // Turn clk to 80Mhz. + } + #endif // RTMP_MAC_PCI // +- if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && +- pAd->CommonCfg.bAPSDAC_BE && pAd->CommonCfg.bAPSDAC_BK && pAd->CommonCfg.bAPSDAC_VI && pAd->CommonCfg.bAPSDAC_VO) +- { +- pAd->CommonCfg.bNeedSendTriggerFrame = TRUE; +- } +- else ++ if (pAd->CommonCfg.bAPSDCapable ++ && pAd->CommonCfg.APEdcaParm. ++ bAPSDCapable ++ && pAd->CommonCfg.bAPSDAC_BE ++ && pAd->CommonCfg.bAPSDAC_BK ++ && pAd->CommonCfg.bAPSDAC_VI ++ && pAd->CommonCfg.bAPSDAC_VO) { ++ pAd->CommonCfg. ++ bNeedSendTriggerFrame = ++ TRUE; ++ } else + RTMP_PS_POLL_ENQUEUE(pAd); +- } +- else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM)) ++ } else if (BcastFlag && (DtimCount == 0) ++ && OPSTATUS_TEST_FLAG(pAd, ++ fOP_STATUS_RECEIVE_DTIM)) + { + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_PCIE_DEVICE)) { ++ if (pAd->Antenna.field.RxPath > ++ 1) ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R3, ++ pAd->StaCfg.BBPR3); + } + #endif // RTMP_MAC_PCI // +- } +- else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) || +- (pAd->TxSwQueue[QID_AC_BE].Number != 0) || +- (pAd->TxSwQueue[QID_AC_VI].Number != 0) || +- (pAd->TxSwQueue[QID_AC_VO].Number != 0) || +- (RTMPFreeTXDRequest(pAd, QID_AC_BK, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_BE, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_VI, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_AC_VO, TX_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS) || +- (RTMPFreeTXDRequest(pAd, QID_MGMT, MGMT_RING_SIZE - 1, &FreeNumber) != NDIS_STATUS_SUCCESS)) +- { ++ } else ++ if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) ++ || (pAd->TxSwQueue[QID_AC_BE].Number != ++ 0) ++ || (pAd->TxSwQueue[QID_AC_VI].Number != ++ 0) ++ || (pAd->TxSwQueue[QID_AC_VO].Number != ++ 0) ++ || ++ (RTMPFreeTXDRequest ++ (pAd, QID_AC_BK, TX_RING_SIZE - 1, ++ &FreeNumber) != NDIS_STATUS_SUCCESS) ++ || ++ (RTMPFreeTXDRequest ++ (pAd, QID_AC_BE, TX_RING_SIZE - 1, ++ &FreeNumber) != NDIS_STATUS_SUCCESS) ++ || ++ (RTMPFreeTXDRequest ++ (pAd, QID_AC_VI, TX_RING_SIZE - 1, ++ &FreeNumber) != NDIS_STATUS_SUCCESS) ++ || ++ (RTMPFreeTXDRequest ++ (pAd, QID_AC_VO, TX_RING_SIZE - 1, ++ &FreeNumber) != NDIS_STATUS_SUCCESS) ++ || ++ (RTMPFreeTXDRequest ++ (pAd, QID_MGMT, MGMT_RING_SIZE - 1, ++ &FreeNumber) != ++ NDIS_STATUS_SUCCESS)) { + // TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme + // can we cheat here (i.e. just check MGMT & AC_BE) for better performance? + #ifdef RTMP_MAC_PCI +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) +- { +- if (pAd->Antenna.field.RxPath > 1) +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); ++ if (OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_PCIE_DEVICE)) { ++ if (pAd->Antenna.field.RxPath > ++ 1) ++ RTMP_BBP_IO_WRITE8_BY_REG_ID ++ (pAd, BBP_R3, ++ pAd->StaCfg.BBPR3); + } + #endif // RTMP_MAC_PCI // +- } +- else +- { +- if ((pAd->CommonCfg.bACMAPSDTr[QID_AC_VO]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_VI]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_BK]) || +- (pAd->CommonCfg.bACMAPSDTr[QID_AC_BE])) +- { ++ } else { ++ if ((pAd->CommonCfg. ++ bACMAPSDTr[QID_AC_VO]) ++ || (pAd->CommonCfg. ++ bACMAPSDTr[QID_AC_VI]) ++ || (pAd->CommonCfg. ++ bACMAPSDTr[QID_AC_BK]) ++ || (pAd->CommonCfg. ++ bACMAPSDTr[QID_AC_BE])) { + /* +- WMM Spec v1.0 3.6.2.4, +- The WMM STA shall remain awake until it receives a +- QoS Data or Null frame addressed to it, with the +- EOSP subfield in QoS Control field set to 1. +- +- So we can not sleep here or we will suffer a case: +- +- PS Management Frame --> +- Trigger frame --> +- Beacon (TIM=0) (Beacon is closer to Trig frame) --> +- Station goes to sleep --> +- AP delivery queued UAPSD packets --> +- Station can NOT receive the reply +- +- Maybe we need a timeout timer to avoid that we do +- NOT receive the EOSP frame. +- +- We can not use More Data to check if SP is ended +- due to MaxSPLength. +- */ +- } +- else +- { +- USHORT NextDtim = DtimCount; +- +- if (NextDtim == 0) +- NextDtim = DtimPeriod; +- +- TbttNumToNextWakeUp = pAd->StaCfg.DefaultListenCount; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim)) +- TbttNumToNextWakeUp = NextDtim; +- +- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- // Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. +- pAd->ThisTbttNumToNextWakeUp = TbttNumToNextWakeUp; +- AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp); ++ WMM Spec v1.0 3.6.2.4, ++ The WMM STA shall remain awake until it receives a ++ QoS Data or Null frame addressed to it, with the ++ EOSP subfield in QoS Control field set to 1. ++ ++ So we can not sleep here or we will suffer a case: ++ ++ PS Management Frame --> ++ Trigger frame --> ++ Beacon (TIM=0) (Beacon is closer to Trig frame) --> ++ Station goes to sleep --> ++ AP delivery queued UAPSD packets --> ++ Station can NOT receive the reply ++ ++ Maybe we need a timeout timer to avoid that we do ++ NOT receive the EOSP frame. ++ ++ We can not use More Data to check if SP is ended ++ due to MaxSPLength. ++ */ ++ } else { ++ USHORT NextDtim = DtimCount; ++ ++ if (NextDtim == 0) ++ NextDtim = DtimPeriod; ++ ++ TbttNumToNextWakeUp = ++ pAd->StaCfg. ++ DefaultListenCount; ++ if (OPSTATUS_TEST_FLAG ++ (pAd, ++ fOP_STATUS_RECEIVE_DTIM) ++ && (TbttNumToNextWakeUp > ++ NextDtim)) ++ TbttNumToNextWakeUp = ++ NextDtim; ++ ++ if (!OPSTATUS_TEST_FLAG ++ (pAd, fOP_STATUS_DOZE)) { ++ // Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. ++ pAd-> ++ ThisTbttNumToNextWakeUp ++ = ++ TbttNumToNextWakeUp; ++ AsicSleepThenAutoWakeup ++ (pAd, ++ pAd-> ++ ThisTbttNumToNextWakeUp); + } + } + } +@@ -1430,116 +1703,126 @@ VOID PeerBeacon( + Receive PROBE REQ from remote peer when operating in IBSS mode + ========================================================================== + */ +-VOID PeerProbeReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +- UCHAR HtLen, AddHtLen, NewExtLen; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ CHAR Ssid[MAX_LEN_OF_SSID]; ++ UCHAR SsidLen; ++ UCHAR HtLen, AddHtLen, NewExtLen; + HEADER_802_11 ProbeRspHdr; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; ++ NDIS_STATUS NStatus; ++ PUCHAR pOutBuffer = NULL; ++ ULONG FrameLen = 0; + LARGE_INTEGER FakeTimestamp; +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = {IE_ERP, 1, 0}; +- BOOLEAN Privacy; +- USHORT CapabilityInfo; +- UCHAR RSNIe = IE_WPA; ++ UCHAR DsLen = 1, IbssLen = 2; ++ UCHAR LocalErpIe[3] = { IE_ERP, 1, 0 }; ++ BOOLEAN Privacy; ++ USHORT CapabilityInfo; ++ UCHAR RSNIe = IE_WPA; + +- if (! ADHOC_ON(pAd)) ++ if (!ADHOC_ON(pAd)) + return; + +- if (PeerProbeReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, Ssid, &SsidLen)) +- { +- if ((SsidLen == 0) || SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)) +- { ++ if (PeerProbeReqSanity ++ (pAd, Elem->Msg, Elem->MsgLen, Addr2, Ssid, &SsidLen)) { ++ if ((SsidLen == 0) ++ || SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, ++ pAd->CommonCfg.SsidLen)) { + // allocate and send out ProbeRsp frame +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory + if (NStatus != NDIS_STATUS_SUCCESS) + return; + + //pAd->StaCfg.AtimWin = 0; // ?????? + +- Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) || +- (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled); +- CapabilityInfo = CAP_GENERATE(0, 1, Privacy, (pAd->CommonCfg.TxPreamble == Rt802_11PreambleShort), 0, 0); +- +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &ProbeRspHdr, +- TIMESTAMP_LEN, &FakeTimestamp, +- 2, &pAd->CommonCfg.BeaconPeriod, +- 2, &CapabilityInfo, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &pAd->StaActive.SupRateLen, +- pAd->StaActive.SupRateLen, pAd->StaActive.SupRate, +- 1, &DsIe, +- 1, &DsLen, +- 1, &pAd->CommonCfg.Channel, +- 1, &IbssIe, +- 1, &IbssLen, +- 2, &pAd->StaActive.AtimWin, +- END_OF_ARGS); +- +- if (pAd->StaActive.ExtRateLen) +- { ++ Privacy = ++ (pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption1Enabled) ++ || (pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption2Enabled) ++ || (pAd->StaCfg.WepStatus == ++ Ndis802_11Encryption3Enabled); ++ CapabilityInfo = ++ CAP_GENERATE(0, 1, Privacy, ++ (pAd->CommonCfg.TxPreamble == ++ Rt802_11PreambleShort), 0, 0); ++ ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &ProbeRspHdr, ++ TIMESTAMP_LEN, &FakeTimestamp, ++ 2, &pAd->CommonCfg.BeaconPeriod, ++ 2, &CapabilityInfo, ++ 1, &SsidIe, ++ 1, &pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.Ssid, 1, &SupRateIe, 1, ++ &pAd->StaActive.SupRateLen, ++ pAd->StaActive.SupRateLen, ++ pAd->StaActive.SupRate, 1, &DsIe, 1, ++ &DsLen, 1, &pAd->CommonCfg.Channel, 1, ++ &IbssIe, 1, &IbssLen, 2, ++ &pAd->StaActive.AtimWin, END_OF_ARGS); ++ ++ if (pAd->StaActive.ExtRateLen) { + ULONG tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 3, LocalErpIe, +- 1, &ExtRateIe, +- 1, &pAd->StaActive.ExtRateLen, +- pAd->StaActive.ExtRateLen, &pAd->StaActive.ExtRate, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 3, LocalErpIe, ++ 1, &ExtRateIe, ++ 1, &pAd->StaActive.ExtRateLen, ++ pAd->StaActive.ExtRateLen, ++ &pAd->StaActive.ExtRate, ++ END_OF_ARGS); + FrameLen += tmp; + } +- + // If adhoc secruity is set for WPA-None, append the cipher suite IE +- if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) +- { ++ if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { + ULONG tmp; +- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +- 1, &RSNIe, +- 1, &pAd->StaCfg.RSNIE_Len, +- pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, ++ 1, &RSNIe, ++ 1, &pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSNIE_Len, ++ pAd->StaCfg.RSN_IE, ++ END_OF_ARGS); + FrameLen += tmp; + } + +- if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +- { ++ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { + ULONG TmpLen; +- UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33}; ++ UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; + HtLen = sizeof(pAd->CommonCfg.HtCapability); + AddHtLen = sizeof(pAd->CommonCfg.AddHTInfo); + NewExtLen = 1; + //New extension channel offset IE is included in Beacon, Probe Rsp or channel Switch Announcement Frame +- if (pAd->bBroadComHT == TRUE) +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &WpaIe, +- 4, &BROADCOM[0], +- pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability, +- END_OF_ARGS); +- } +- else +- { +- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, +- 1, &HtCapIe, +- 1, &HtLen, +- sizeof(HT_CAPABILITY_IE), &pAd->CommonCfg.HtCapability, +- 1, &AddHtInfoIe, +- 1, &AddHtLen, +- sizeof(ADD_HT_INFO_IE), &pAd->CommonCfg.AddHTInfo, +- 1, &NewExtChanIe, +- 1, &NewExtLen, +- sizeof(NEW_EXT_CHAN_IE), &pAd->CommonCfg.NewExtChanOffset, +- END_OF_ARGS); ++ if (pAd->bBroadComHT == TRUE) { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &WpaIe, 4, ++ &BROADCOM[0], ++ pAd->MlmeAux. ++ HtCapabilityLen, ++ &pAd->MlmeAux. ++ HtCapability, ++ END_OF_ARGS); ++ } else { ++ MakeOutgoingFrame(pOutBuffer + FrameLen, ++ &TmpLen, 1, &HtCapIe, ++ 1, &HtLen, ++ sizeof ++ (HT_CAPABILITY_IE), ++ &pAd->CommonCfg. ++ HtCapability, 1, ++ &AddHtInfoIe, 1, ++ &AddHtLen, ++ sizeof ++ (ADD_HT_INFO_IE), ++ &pAd->CommonCfg. ++ AddHTInfo, 1, ++ &NewExtChanIe, 1, ++ &NewExtLen, ++ sizeof ++ (NEW_EXT_CHAN_IE), ++ &pAd->CommonCfg. ++ NewExtChanOffset, ++ END_OF_ARGS); + } + FrameLen += TmpLen; + } +@@ -1550,9 +1833,7 @@ VOID PeerProbeReqAction( + } + } + +-VOID BeaconTimeoutAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeoutAtJoinAction\n")); +@@ -1567,17 +1848,15 @@ VOID BeaconTimeoutAtJoinAction( + Scan timeout procedure. basically add channel index by 1 and rescan + ========================================================================== + */ +-VOID ScanTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel); + + // Only one channel scanned for CISCO beacon request + if ((pAd->MlmeAux.ScanType == SCAN_CISCO_ACTIVE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_PASSIVE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_NOISE) || +- (pAd->MlmeAux.ScanType == SCAN_CISCO_CHANNEL_LOAD)) ++ (pAd->MlmeAux.ScanType == SCAN_CISCO_PASSIVE) || ++ (pAd->MlmeAux.ScanType == SCAN_CISCO_NOISE) || ++ (pAd->MlmeAux.ScanType == SCAN_CISCO_CHANNEL_LOAD)) + pAd->MlmeAux.Channel = 0; + + // this routine will stop if pAd->MlmeAux.Channel == 0 +@@ -1589,12 +1868,12 @@ VOID ScanTimeoutAction( + Description: + ========================================================================== + */ +-VOID InvalidStateWhenScan( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("AYNC - InvalidStateWhenScan(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("AYNC - InvalidStateWhenScan(state=%ld). Reset SYNC machine\n", ++ pAd->Mlme.SyncMachine.CurrState)); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status); +@@ -1605,12 +1884,12 @@ VOID InvalidStateWhenScan( + Description: + ========================================================================== + */ +-VOID InvalidStateWhenJoin( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenJoin(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("InvalidStateWhenJoin(state=%ld). Reset SYNC machine\n", ++ pAd->Mlme.SyncMachine.CurrState)); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, 2, &Status); +@@ -1621,12 +1900,12 @@ VOID InvalidStateWhenJoin( + Description: + ========================================================================== + */ +-VOID InvalidStateWhenStart( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + USHORT Status; +- DBGPRINT(RT_DEBUG_TRACE, ("InvalidStateWhenStart(state=%ld). Reset SYNC machine\n", pAd->Mlme.SyncMachine.CurrState)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("InvalidStateWhenStart(state=%ld). Reset SYNC machine\n", ++ pAd->Mlme.SyncMachine.CurrState)); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_STATE_MACHINE_REJECT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status); +@@ -1640,56 +1919,51 @@ VOID InvalidStateWhenStart( + + ========================================================================== + */ +-VOID EnqueuePsPoll( +- IN PRTMP_ADAPTER pAd) ++VOID EnqueuePsPoll(IN PRTMP_ADAPTER pAd) + { + +- + if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP) +- pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; +- MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; ++ MiniportMMRequest(pAd, 0, (PUCHAR) & pAd->PsPollFrame, ++ sizeof(PSPOLL_FRAME)); + } + +- + /* + ========================================================================== + Description: + ========================================================================== + */ +-VOID EnqueueProbeRequest( +- IN PRTMP_ADAPTER pAd) ++VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS NState; +- PUCHAR pOutBuffer; +- ULONG FrameLen = 0; +- HEADER_802_11 Hdr80211; ++ NDIS_STATUS NState; ++ PUCHAR pOutBuffer; ++ ULONG FrameLen = 0; ++ HEADER_802_11 Hdr80211; + + DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n")); + +- NState = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory +- if (NState == NDIS_STATUS_SUCCESS) +- { +- MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR); ++ NState = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ if (NState == NDIS_STATUS_SUCCESS) { ++ MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, ++ BROADCAST_ADDR, BROADCAST_ADDR); + + // this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, +- 1, &SsidIe, +- 1, &pAd->CommonCfg.SsidLen, +- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +- 1, &SupRateIe, +- 1, &pAd->StaActive.SupRateLen, +- pAd->StaActive.SupRateLen, pAd->StaActive.SupRate, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ sizeof(HEADER_802_11), &Hdr80211, ++ 1, &SsidIe, ++ 1, &pAd->CommonCfg.SsidLen, ++ pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, ++ 1, &SupRateIe, ++ 1, &pAd->StaActive.SupRateLen, ++ pAd->StaActive.SupRateLen, ++ pAd->StaActive.SupRate, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } + + } + +-BOOLEAN ScanRunning( +- IN PRTMP_ADAPTER pAd) ++BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd) + { + return (pAd->Mlme.SyncMachine.CurrState == SCAN_LISTEN) ? TRUE : FALSE; + } +- +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index c6c3f3b..0a45643 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -37,7 +37,7 @@ + */ + #include "../rt_config.h" + +-void inc_byte_array(UCHAR *counter, int len); ++void inc_byte_array(UCHAR * counter, int len); + + /* + ======================================================================== +@@ -58,33 +58,29 @@ void inc_byte_array(UCHAR *counter, int len); + + ======================================================================== + */ +-VOID RTMPReportMicError( +- IN PRTMP_ADAPTER pAd, +- IN PCIPHER_KEY pWpaKey) ++VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + { +- ULONG Now; +- UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1:0); ++ ULONG Now; ++ UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1 : 0); + + // Record Last MIC error time and count + NdisGetSystemUpTime(&Now); +- if (pAd->StaCfg.MicErrCnt == 0) +- { ++ if (pAd->StaCfg.MicErrCnt == 0) { + pAd->StaCfg.MicErrCnt++; + pAd->StaCfg.LastMicErrorTime = Now; +- NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); +- } +- else if (pAd->StaCfg.MicErrCnt == 1) +- { +- if ((pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ)) < Now) +- { ++ NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); ++ } else if (pAd->StaCfg.MicErrCnt == 1) { ++ if ((pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ)) < Now) { + // Update Last MIC error time, this did not violate two MIC errors within 60 seconds + pAd->StaCfg.LastMicErrorTime = Now; +- } +- else +- { ++ } else { + + if (pAd->CommonCfg.bWirelessEvent) +- RTMPSendWirelessEvent(pAd, IW_COUNTER_MEASURES_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); ++ RTMPSendWirelessEvent(pAd, ++ IW_COUNTER_MEASURES_EVENT_FLAG, ++ pAd->MacTab. ++ Content[BSSID_WCID].Addr, ++ BSS0, 0); + + pAd->StaCfg.LastMicErrorTime = Now; + // Violate MIC error counts, MIC countermeasures kicks in +@@ -101,154 +97,139 @@ VOID RTMPReportMicError( + // RTMPRingCleanUp(pAd, QID_AC_VO); + // RTMPRingCleanUp(pAd, QID_HCCA); + } +- } +- else +- { ++ } else { + // MIC error count >= 2 + // This should not happen + ; + } +- MlmeEnqueue(pAd, +- MLME_CNTL_STATE_MACHINE, +- OID_802_11_MIC_FAILURE_REPORT_FRAME, +- 1, +- &unicastKey); +- +- if (pAd->StaCfg.MicErrCnt == 2) +- { +- RTMPSetTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, 100); +- } ++ MlmeEnqueue(pAd, ++ MLME_CNTL_STATE_MACHINE, ++ OID_802_11_MIC_FAILURE_REPORT_FRAME, 1, &unicastKey); ++ ++ if (pAd->StaCfg.MicErrCnt == 2) { ++ RTMPSetTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, 100); ++ } + } + + #define LENGTH_EAP_H 4 + // If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). +-INT WpaCheckEapCode( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, +- IN USHORT FrameLen, +- IN USHORT OffSet) ++INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet) + { + +- PUCHAR pData; +- INT result = 0; ++ PUCHAR pData; ++ INT result = 0; + +- if( FrameLen < OffSet + LENGTH_EAPOL_H + LENGTH_EAP_H ) ++ if (FrameLen < OffSet + LENGTH_EAPOL_H + LENGTH_EAP_H) + return result; + +- pData = pFrame + OffSet; // skip offset bytes ++ pData = pFrame + OffSet; // skip offset bytes + +- if(*(pData+1) == EAPPacket) // 802.1x header - Packet Type ++ if (*(pData + 1) == EAPPacket) // 802.1x header - Packet Type + { +- result = *(pData+4); // EAP header - Code ++ result = *(pData + 4); // EAP header - Code + } + + return result; + } + +-VOID WpaSendMicFailureToWpaSupplicant( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUnicast) ++VOID WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) + { +- char custom[IW_CUSTOM_MAX] = {0}; ++ char custom[IW_CUSTOM_MAX] = { 0 }; + +- sprintf(custom, "MLME-MICHAELMICFAILURE.indication"); +- if(bUnicast) +- sprintf(custom, "%s unicast", custom); ++ sprintf(custom, "MLME-MICHAELMICFAILURE.indication"); ++ if (bUnicast) ++ sprintf(custom, "%s unicast", custom); + +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (PUCHAR)custom, strlen(custom)); ++ RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (PUCHAR) custom, ++ strlen(custom)); + +- return; ++ return; + } + +-VOID WpaMicFailureReportFrame( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem) ++VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; +- EAPOL_PACKET Packet; +- UCHAR Mic[16]; +- BOOLEAN bUnicast; ++ PUCHAR pOutBuffer = NULL; ++ UCHAR Header802_3[14]; ++ ULONG FrameLen = 0; ++ EAPOL_PACKET Packet; ++ UCHAR Mic[16]; ++ BOOLEAN bUnicast; + + DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame ----->\n")); + +- bUnicast = (Elem->Msg[0] == 1 ? TRUE:FALSE); ++ bUnicast = (Elem->Msg[0] == 1 ? TRUE : FALSE); + pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER); + + // init 802.3 header and Fill Packet +- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL); ++ MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, ++ pAd->CurrentAddress, EAPOL); + + NdisZeroMemory(&Packet, sizeof(Packet)); +- Packet.ProVer = EAPOL_VER; +- Packet.ProType = EAPOLKey; ++ Packet.ProVer = EAPOL_VER; ++ Packet.ProType = EAPOLKey; + + Packet.KeyDesc.Type = WPA1_KEY_DESC; + +- // Request field presented +- Packet.KeyDesc.KeyInfo.Request = 1; ++ // Request field presented ++ Packet.KeyDesc.KeyInfo.Request = 1; + +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { ++ if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { + Packet.KeyDesc.KeyInfo.KeyDescVer = 2; +- } +- else // TKIP ++ } else // TKIP + { + Packet.KeyDesc.KeyInfo.KeyDescVer = 1; + } + +- Packet.KeyDesc.KeyInfo.KeyType = (bUnicast ? PAIRWISEKEY : GROUPKEY); ++ Packet.KeyDesc.KeyInfo.KeyType = (bUnicast ? PAIRWISEKEY : GROUPKEY); + + // KeyMic field presented +- Packet.KeyDesc.KeyInfo.KeyMic = 1; ++ Packet.KeyDesc.KeyInfo.KeyMic = 1; + +- // Error field presented +- Packet.KeyDesc.KeyInfo.Error = 1; ++ // Error field presented ++ Packet.KeyDesc.KeyInfo.Error = 1; + + // Update packet length after decide Key data payload + SET_UINT16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) +- +- // Key Replay Count +- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); +- inc_byte_array(pAd->StaCfg.ReplayCounter, 8); ++ // Key Replay Count ++ NdisMoveMemory(Packet.KeyDesc.ReplayCounter, ++ pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); ++ inc_byte_array(pAd->StaCfg.ReplayCounter, 8); + + // Convert to little-endian format. +- *((USHORT *)&Packet.KeyDesc.KeyInfo) = cpu2le16(*((USHORT *)&Packet.KeyDesc.KeyInfo)); +- ++ *((USHORT *) & Packet.KeyDesc.KeyInfo) = ++ cpu2le16(*((USHORT *) & Packet.KeyDesc.KeyInfo)); + +- MlmeAllocateMemory(pAd, (PUCHAR *)&pOutBuffer); // allocate memory +- if(pOutBuffer == NULL) +- { ++ MlmeAllocateMemory(pAd, (PUCHAR *) & pOutBuffer); // allocate memory ++ if (pOutBuffer == NULL) { + return; + } +- + // Prepare EAPOL frame for MIC calculation + // Be careful, only EAPOL frame is counted for MIC calculation +- MakeOutgoingFrame(pOutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, +- END_OF_ARGS); ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, ++ CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, ++ END_OF_ARGS); + + // Prepare and Fill MIC value + NdisZeroMemory(Mic, sizeof(Mic)); +- if(pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) +- { // AES +- UCHAR digest[20] = {0}; +- HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, digest, SHA1_DIGEST_SIZE); ++ if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { // AES ++ UCHAR digest[20] = { 0 }; ++ HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, ++ digest, SHA1_DIGEST_SIZE); + NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } +- else +- { // TKIP +- HMAC_MD5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic, MD5_DIGEST_SIZE); ++ } else { // TKIP ++ HMAC_MD5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, ++ Mic, MD5_DIGEST_SIZE); + } + NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); + + // copy frame to Tx ring and send MIC failure report frame to authenticator + RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID], +- Header802_3, LENGTH_802_3, +- (PUCHAR)&Packet, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, FALSE); ++ Header802_3, LENGTH_802_3, ++ (PUCHAR) & Packet, ++ CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, FALSE); + +- MlmeFreeMemory(pAd, (PUCHAR)pOutBuffer); ++ MlmeFreeMemory(pAd, (PUCHAR) pOutBuffer); + + DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame <-----\n")); + } +@@ -262,7 +243,7 @@ VOID WpaMicFailureReportFrame( + * rolling over to more significant bytes if the byte was incremented from + * 0xff to 0x00. + */ +-void inc_byte_array(UCHAR *counter, int len) ++void inc_byte_array(UCHAR * counter, int len) + { + int pos = len - 1; + while (pos >= 0) { +@@ -273,26 +254,27 @@ void inc_byte_array(UCHAR *counter, int len) + } + } + +-VOID WpaDisassocApAndBlockAssoc( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (PRTMP_ADAPTER)FunctionContext; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ RTMP_ADAPTER *pAd = (PRTMP_ADAPTER) FunctionContext; ++ MLME_DISASSOC_REQ_STRUCT DisassocReq; + + // disassoc from current AP first +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPReportMicError - disassociate with current AP after sending second continuous EAPOL frame\n")); +- DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_MIC_FAILURE); +- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("RTMPReportMicError - disassociate with current AP after sending second continuous EAPOL frame\n")); ++ DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, ++ REASON_MIC_FAILURE); ++ MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, ++ sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + pAd->StaCfg.bBlockAssoc = TRUE; + } + +-VOID WpaStaPairwiseKeySetting( +- IN PRTMP_ADAPTER pAd) ++VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + { + PCIPHER_KEY pSharedKey; + PMAC_TABLE_ENTRY pEntry; +@@ -307,9 +289,11 @@ VOID WpaStaPairwiseKeySetting( + // Prepare pair-wise key information into shared key table + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; +- NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, ++ &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); + + // Decide its ChiperAlg + if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) +@@ -320,37 +304,35 @@ VOID WpaStaPairwiseKeySetting( + pSharedKey->CipherAlg = CIPHER_NONE; + + // Update these related information to MAC_TABLE_ENTRY +- NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +- NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], LEN_TKIP_RXMICK); +- NdisMoveMemory(pEntry->PairwiseKey.TxMic, &pAd->StaCfg.PTK[48+LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], ++ LEN_TKIP_EK); ++ NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pEntry->PairwiseKey.TxMic, ++ &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); + pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; + + // Update pairwise key information to ASIC Shared Key Table + AsicAddSharedKeyEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); ++ BSS0, ++ 0, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, pSharedKey->RxMic); + + // Update ASIC WCID attribute table and IVEIV table +- RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- 0, +- pSharedKey->CipherAlg, +- pEntry); ++ RTMPAddWcidAttributeEntry(pAd, BSS0, 0, pSharedKey->CipherAlg, pEntry); + STA_PORT_SECURED(pAd); + pAd->IndicateMediaState = NdisMediaStateConnected; + +- DBGPRINT(RT_DEBUG_TRACE, ("%s : AID(%d) port secured\n", __func__, pEntry->Aid)); ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("%s : AID(%d) port secured\n", __func__, pEntry->Aid)); + + } + +-VOID WpaStaGroupKeySetting( +- IN PRTMP_ADAPTER pAd) ++VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + { +- PCIPHER_KEY pSharedKey; ++ PCIPHER_KEY pSharedKey; + + pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; + +@@ -358,8 +340,10 @@ VOID WpaStaGroupKeySetting( + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +- NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], LEN_TKIP_RXMICK); +- NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], LEN_TKIP_TXMICK); ++ NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], ++ LEN_TKIP_RXMICK); ++ NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], ++ LEN_TKIP_TXMICK); + + // Update Shared Key CipherAlg + pSharedKey->CipherAlg = CIPHER_NONE; +@@ -374,18 +358,16 @@ VOID WpaStaGroupKeySetting( + + // Update group key information to ASIC Shared Key Table + AsicAddSharedKeyEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- pSharedKey->Key, +- pSharedKey->TxMic, +- pSharedKey->RxMic); ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, ++ pSharedKey->Key, ++ pSharedKey->TxMic, pSharedKey->RxMic); + + // Update ASIC WCID attribute table and IVEIV table + RTMPAddWcidAttributeEntry(pAd, +- BSS0, +- pAd->StaCfg.DefaultKeyId, +- pSharedKey->CipherAlg, +- NULL); ++ BSS0, ++ pAd->StaCfg.DefaultKeyId, ++ pSharedKey->CipherAlg, NULL); + + } +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch b/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch new file mode 100644 index 000000000..e6b7117a4 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch @@ -0,0 +1,17149 @@ +From 3f9a817a1a682d5dfb5768dc1b509c087def2603 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:14 -0800 +Subject: [PATCH 21/42] Staging: rt28x0: run *.h files through Lindent + +commit 52b81c89e564cdde8f2b4ccd0e314f04f8f23ab9 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/ap.h | 42 +- + drivers/staging/rt2860/chip/mac_pci.h | 149 +- + drivers/staging/rt2860/chip/mac_usb.h | 252 +- + drivers/staging/rt2860/chip/rt2860.h | 6 +- + drivers/staging/rt2860/chip/rt2870.h | 3 +- + drivers/staging/rt2860/chip/rt3070.h | 1 - + drivers/staging/rt2860/chip/rt3090.h | 6 +- + drivers/staging/rt2860/chip/rt30xx.h | 1 - + drivers/staging/rt2860/chip/rtmp_mac.h | 1664 ++++---- + drivers/staging/rt2860/chip/rtmp_phy.h | 46 +- + drivers/staging/rt2860/chlist.h | 39 +- + drivers/staging/rt2860/common/action.h | 27 +- + drivers/staging/rt2860/crypt_hmac.h | 22 +- + drivers/staging/rt2860/crypt_md5.h | 34 +- + drivers/staging/rt2860/crypt_sha2.h | 34 +- + drivers/staging/rt2860/dfs.h | 4 +- + drivers/staging/rt2860/eeprom.h | 25 +- + drivers/staging/rt2860/iface/rtmp_pci.h | 3 - + drivers/staging/rt2860/iface/rtmp_usb.h | 18 +- + drivers/staging/rt2860/mlme.h | 1229 +++--- + drivers/staging/rt2860/oid.h | 871 ++--- + drivers/staging/rt2860/rt_config.h | 3 +- + drivers/staging/rt2860/rt_linux.h | 155 +- + drivers/staging/rt2860/rtmp.h | 6889 +++++++++++++------------------ + drivers/staging/rt2860/rtmp_chip.h | 164 +- + drivers/staging/rt2860/rtmp_ckipmic.h | 43 +- + drivers/staging/rt2860/rtmp_def.h | 358 +- + drivers/staging/rt2860/rtmp_dot11.h | 106 +- + drivers/staging/rt2860/rtmp_iface.h | 47 +- + drivers/staging/rt2860/rtmp_mcu.h | 16 +- + drivers/staging/rt2860/rtmp_os.h | 50 +- + drivers/staging/rt2860/rtmp_timer.h | 63 +- + drivers/staging/rt2860/rtmp_type.h | 123 +- + drivers/staging/rt2860/rtusb_io.h | 52 +- + drivers/staging/rt2860/spectrum.h | 176 +- + drivers/staging/rt2860/spectrum_def.h | 79 +- + drivers/staging/rt2860/wpa.h | 353 +- + 37 files changed, 5734 insertions(+), 7419 deletions(-) + +diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h +index 6c58ce8..97da749 100644 +--- a/drivers/staging/rt2860/ap.h ++++ b/drivers/staging/rt2860/ap.h +@@ -41,40 +41,26 @@ + #define __AP_H__ + + // ap_wpa.c +-VOID WpaStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); ++VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]); + + #ifdef RTMP_MAC_USB +-VOID BeaconUpdateExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID BeaconUpdateExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + #endif // RTMP_MAC_USB // + +-VOID RTMPSetPiggyBack( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bPiggyBack); ++VOID RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack); + +-VOID MacTableReset( +- IN PRTMP_ADAPTER pAd); ++VOID MacTableReset(IN PRTMP_ADAPTER pAd); + +-MAC_TABLE_ENTRY *MacTableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, +- IN BOOLEAN CleanAll); ++MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr, ++ IN UCHAR apidx, IN BOOLEAN CleanAll); + +-BOOLEAN MacTableDeleteEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, +- IN PUCHAR pAddr); ++BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, ++ IN USHORT wcid, IN PUCHAR pAddr); + +-MAC_TABLE_ENTRY *MacTableLookup( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-#endif // __AP_H__ ++MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); + ++#endif // __AP_H__ +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index 61b3f82..b0aa0d3 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -43,7 +43,6 @@ + #include "../rtmp_iface.h" + #include "../rtmp_dot11.h" + +- + // + // Device ID & Vendor ID related definitions, + // NOTE: you should not add the new VendorID/DeviceID here unless you not sure it belongs to what chip. +@@ -61,10 +60,6 @@ + #define PCI_CLASS_BRIDGE_PCI 0x0604 + #endif + +- +- +- +- + #define TXINFO_SIZE 0 + #define RTMP_PKT_TAIL_PADDING 0 + #define fRTMP_ADAPTER_NEED_STOP_TX 0 +@@ -72,86 +67,83 @@ + #define AUX_CTRL 0x10c + + // +-// TX descriptor format, Tx ring, Mgmt Ring ++// TX descriptor format, Tx ring, Mgmt Ring + // +-typedef struct PACKED _TXD_STRUC { +- // Word 0 +- UINT32 SDPtr0; +- // Word 1 +- UINT32 SDLen1:14; +- UINT32 LastSec1:1; +- UINT32 Burst:1; +- UINT32 SDLen0:14; +- UINT32 LastSec0:1; +- UINT32 DMADONE:1; ++typedef struct PACKED _TXD_STRUC { ++ // Word 0 ++ UINT32 SDPtr0; ++ // Word 1 ++ UINT32 SDLen1:14; ++ UINT32 LastSec1:1; ++ UINT32 Burst:1; ++ UINT32 SDLen0:14; ++ UINT32 LastSec0:1; ++ UINT32 DMADONE:1; + //Word2 +- UINT32 SDPtr1; ++ UINT32 SDPtr1; + //Word3 +- UINT32 rsv2:24; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 rsv:2; +- UINT32 TCO:1; // +- UINT32 UCO:1; // +- UINT32 ICO:1; // +-} TXD_STRUC, *PTXD_STRUC; +- ++ UINT32 rsv2:24; ++ UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition ++ UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA ++ UINT32 rsv:2; ++ UINT32 TCO:1; // ++ UINT32 UCO:1; // ++ UINT32 ICO:1; // ++} TXD_STRUC, *PTXD_STRUC; + + // + // Rx descriptor format, Rx Ring + // +-typedef struct PACKED _RXD_STRUC{ +- // Word 0 +- UINT32 SDP0; +- // Word 1 +- UINT32 SDL1:14; +- UINT32 Rsv:2; +- UINT32 SDL0:14; +- UINT32 LS0:1; +- UINT32 DDONE:1; +- // Word 2 +- UINT32 SDP1; +- // Word 3 +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; +- UINT32 Decrypted:1; // this frame is being decrypted. +- UINT32 PlcpSignal:1; // To be moved +- UINT32 PlcpRssil:1;// To be moved +- UINT32 Rsv1:13; +-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; ++typedef struct PACKED _RXD_STRUC { ++ // Word 0 ++ UINT32 SDP0; ++ // Word 1 ++ UINT32 SDL1:14; ++ UINT32 Rsv:2; ++ UINT32 SDL0:14; ++ UINT32 LS0:1; ++ UINT32 DDONE:1; ++ // Word 2 ++ UINT32 SDP1; ++ // Word 3 ++ UINT32 BA:1; ++ UINT32 DATA:1; ++ UINT32 NULLDATA:1; ++ UINT32 FRAG:1; ++ UINT32 U2M:1; // 1: this RX frame is unicast to me ++ UINT32 Mcast:1; // 1: this is a multicast frame ++ UINT32 Bcast:1; // 1: this is a broadcast frame ++ UINT32 MyBss:1; // 1: this frame belongs to the same BSSID ++ UINT32 Crc:1; // 1: CRC error ++ UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid ++ UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. ++ UINT32 HTC:1; ++ UINT32 RSSI:1; ++ UINT32 L2PAD:1; ++ UINT32 AMPDU:1; ++ UINT32 Decrypted:1; // this frame is being decrypted. ++ UINT32 PlcpSignal:1; // To be moved ++ UINT32 PlcpRssil:1; // To be moved ++ UINT32 Rsv1:13; ++} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + typedef union _TX_ATTENUATION_CTRL_STRUC { +- struct +- { +- ULONG RF_ISOLATION_ENABLE:1; +- ULONG Reserve2:7; +- ULONG PCIE_PHY_TX_ATTEN_VALUE:3; +- ULONG PCIE_PHY_TX_ATTEN_EN:1; +- ULONG Reserve1:20; ++ struct { ++ ULONG RF_ISOLATION_ENABLE:1; ++ ULONG Reserve2:7; ++ ULONG PCIE_PHY_TX_ATTEN_VALUE:3; ++ ULONG PCIE_PHY_TX_ATTEN_EN:1; ++ ULONG Reserve1:20; + } field; + +- ULONG word; ++ ULONG word; + } TX_ATTENUATION_CTRL_STRUC, *PTX_ATTENUATION_CTRL_STRUC; + + /* ----------------- EEPROM Related MACRO ----------------- */ + + // 8051 firmware image for RT2860 - base address = 0x4000 + #define FIRMWARE_IMAGE_BASE 0x2000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte +- ++#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte + + /* ----------------- Frimware Related MACRO ----------------- */ + #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ +@@ -175,14 +167,12 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_IO_WRITE32(_pAd, H2M_MAILBOX_CSR, 0); \ + }while(0) + +- + /* ----------------- TX Related MACRO ----------------- */ + #define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) + #define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) + +- + #define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ +- ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ ++ ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ + #define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ + do{}while(0) + +@@ -190,12 +180,11 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) + //(((freeNum) != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 1 /*0*/)) + +- + #define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ + RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) + + #define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ +- /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber)*/ ++ /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) */ + + #define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ + RtmpPCI_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) +@@ -210,7 +199,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RtmpPCI_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) + + #define HAL_LastTxIdx(_pAd, _QueIdx,_LastTxIdx) \ +- /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx)*/ ++ /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx) */ + + #define HAL_KickOutTx(_pAd, _pTxBlk, _QueIdx) \ + RTMP_IO_WRITE32((_pAd), TX_CTX_IDX0+((_QueIdx)*0x10), (_pAd)->TxRing[(_QueIdx)].TxCpuIdx) +@@ -225,17 +214,14 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + : \ + (_pAd->TxRing[_QueIdx].TxSwFreeIdx + TX_RING_SIZE - _pAd->TxRing[_QueIdx].TxCpuIdx - 1); + +- + #define GET_MGMTRING_FREENO(_pAd) \ + (_pAd->MgmtRing.TxSwFreeIdx > _pAd->MgmtRing.TxCpuIdx) ? \ + (_pAd->MgmtRing.TxSwFreeIdx - _pAd->MgmtRing.TxCpuIdx - 1) \ + : \ + (_pAd->MgmtRing.TxSwFreeIdx + MGMT_RING_SIZE - _pAd->MgmtRing.TxCpuIdx - 1); + +- + /* ----------------- RX Related MACRO ----------------- */ + +- + /* ----------------- ASIC Related MACRO ----------------- */ + // reset MAC of a station entry to 0x000000000000 + #define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ +@@ -272,7 +258,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + pAd->SharedKey[apidx][KeyID].CipherAlg, \ + pEntry); } + +- + // Insert the BA bitmap to ASIC for the Wcid entry + #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ + do{ \ +@@ -283,9 +268,8 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_IO_WRITE32((_pAd), _Offset, _Value);\ + }while(0) + +- + // Remove the BA bitmap from ASIC for the Wcid entry +-// bitmap field starts at 0x10000 in ASIC WCID table ++// bitmap field starts at 0x10000 in ASIC WCID table + #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ + do{ \ + UINT32 _Value = 0, _Offset; \ +@@ -295,7 +279,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ + }while(0) + +- + /* ----------------- Interface Related MACRO ----------------- */ + + // +@@ -314,7 +297,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_SET_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ + }while(0) + +- + #define RTMP_IRQ_INIT(pAd) \ + { pAd->int_enable_reg = ((DELAYINTMASK) | \ + (RxINT|TxDataInt|TxMgmtInt)) & ~(0x03); \ +@@ -326,7 +308,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff);\ + RTMP_ASIC_INTERRUPT_ENABLE(pAd); } + +- + /* ----------------- MLME Related MACRO ----------------- */ + #define RTMP_MLME_HANDLER(pAd) MlmeHandler(pAd) + +@@ -344,7 +325,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + /* ----------------- Power Save Related MACRO ----------------- */ + #define RTMP_PS_POLL_ENQUEUE(pAd) EnqueuePsPoll(pAd) + +- + // For RTMPPCIePowerLinkCtrlRestore () function + #define RESTORE_HALT 1 + #define RESTORE_WAKEUP 2 +@@ -358,7 +338,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + #define CID2MASK 0x00ff0000 + #define CID3MASK 0xff000000 + +- + #define RTMP_STA_FORCE_WAKEUP(pAd, bFromTx) \ + RT28xxPciStaAsicForceWakeup(pAd, bFromTx); + +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +index 5a85883..8ce6969 100644 +--- a/drivers/staging/rt2860/chip/mac_usb.h ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -43,13 +43,12 @@ + #include "../rtmp_iface.h" + #include "../rtmp_dot11.h" + +- + #define USB_CYC_CFG 0x02a4 + + #define BEACON_RING_SIZE 2 + #define MGMTPIPEIDX 0 // EP6 is highest priority + +-#define RTMP_PKT_TAIL_PADDING 11 // 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) ++#define RTMP_PKT_TAIL_PADDING 11 // 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) + + #define fRTMP_ADAPTER_NEED_STOP_TX \ + (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS | \ +@@ -62,157 +61,146 @@ + #define RXINFO_SIZE 4 + #define RT2870_RXDMALEN_FIELD_SIZE 4 + +-typedef struct PACKED _RXINFO_STRUC { +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; // To be moved +- UINT32 Decrypted:1; +- UINT32 PlcpRssil:1; +- UINT32 CipherAlg:1; +- UINT32 LastAMSDU:1; +- UINT32 PlcpSignal:12; +-} RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; +- ++typedef struct PACKED _RXINFO_STRUC { ++ UINT32 BA:1; ++ UINT32 DATA:1; ++ UINT32 NULLDATA:1; ++ UINT32 FRAG:1; ++ UINT32 U2M:1; // 1: this RX frame is unicast to me ++ UINT32 Mcast:1; // 1: this is a multicast frame ++ UINT32 Bcast:1; // 1: this is a broadcast frame ++ UINT32 MyBss:1; // 1: this frame belongs to the same BSSID ++ UINT32 Crc:1; // 1: CRC error ++ UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid ++ UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. ++ UINT32 HTC:1; ++ UINT32 RSSI:1; ++ UINT32 L2PAD:1; ++ UINT32 AMPDU:1; // To be moved ++ UINT32 Decrypted:1; ++ UINT32 PlcpRssil:1; ++ UINT32 CipherAlg:1; ++ UINT32 LastAMSDU:1; ++ UINT32 PlcpSignal:12; ++} RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + // + // TXINFO + // + #define TXINFO_SIZE 4 + +-typedef struct _TXINFO_STRUC { +- // Word 0 +- UINT32 USBDMATxPktLen:16; //used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. +- UINT32 rsv:8; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 SwUseLastRound:1; // Software use. +- UINT32 rsv2:2; // Software use. +- UINT32 USBDMANextVLD:1; //used ONLY in USB bulk Aggregation, NextValid +- UINT32 USBDMATxburst:1;//used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint +-} TXINFO_STRUC, *PTXINFO_STRUC; +- ++typedef struct _TXINFO_STRUC { ++ // Word 0 ++ UINT32 USBDMATxPktLen:16; //used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. ++ UINT32 rsv:8; ++ UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition ++ UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA ++ UINT32 SwUseLastRound:1; // Software use. ++ UINT32 rsv2:2; // Software use. ++ UINT32 USBDMANextVLD:1; //used ONLY in USB bulk Aggregation, NextValid ++ UINT32 USBDMATxburst:1; //used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint ++} TXINFO_STRUC, *PTXINFO_STRUC; + + // + // Management ring buffer format + // +-typedef struct _MGMT_STRUC { +- BOOLEAN Valid; +- PUCHAR pBuffer; +- ULONG Length; +-} MGMT_STRUC, *PMGMT_STRUC; +- ++typedef struct _MGMT_STRUC { ++ BOOLEAN Valid; ++ PUCHAR pBuffer; ++ ULONG Length; ++} MGMT_STRUC, *PMGMT_STRUC; + + //////////////////////////////////////////////////////////////////////////// + // The TX_BUFFER structure forms the transmitted USB packet to the device + //////////////////////////////////////////////////////////////////////////// +-typedef struct __TX_BUFFER{ +- union{ +- UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; +- }field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++typedef struct __TX_BUFFER { ++ union { ++ UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; ++ HEADER_802_11 NullFrame; ++ PSPOLL_FRAME PsPollPacket; ++ RTS_FRAME RTSFrame; ++ } field; ++ UCHAR Aggregation[4]; //Buffer for save Aggregation size. + } TX_BUFFER, *PTX_BUFFER; + +-typedef struct __HTTX_BUFFER{ +- union{ +- UCHAR WirelessPacket[MAX_TXBULK_SIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; +- }field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++typedef struct __HTTX_BUFFER { ++ union { ++ UCHAR WirelessPacket[MAX_TXBULK_SIZE]; ++ HEADER_802_11 NullFrame; ++ PSPOLL_FRAME PsPollPacket; ++ RTS_FRAME RTSFrame; ++ } field; ++ UCHAR Aggregation[4]; //Buffer for save Aggregation size. + } HTTX_BUFFER, *PHTTX_BUFFER; + +- + // used to track driver-generated write irps +-typedef struct _TX_CONTEXT +-{ +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize +- ULONG BulkOutSize; +- UCHAR BulkOutPipeId; +- UCHAR SelfIdx; +- BOOLEAN InUse; +- BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime. +- BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout. +- BOOLEAN IRPPending; +- BOOLEAN LastOne; +- BOOLEAN bAggregatible; +- UCHAR Header_802_3[LENGTH_802_3]; +- UCHAR Rsv[2]; +- ULONG DataOffset; +- UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux +- +-} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; +- ++typedef struct _TX_CONTEXT { ++ PVOID pAd; //Initialized in MiniportInitialize ++ PURB pUrb; //Initialized in MiniportInitialize ++ PIRP pIrp; //used to cancel pending bulk out. ++ //Initialized in MiniportInitialize ++ PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize ++ ULONG BulkOutSize; ++ UCHAR BulkOutPipeId; ++ UCHAR SelfIdx; ++ BOOLEAN InUse; ++ BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime. ++ BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout. ++ BOOLEAN IRPPending; ++ BOOLEAN LastOne; ++ BOOLEAN bAggregatible; ++ UCHAR Header_802_3[LENGTH_802_3]; ++ UCHAR Rsv[2]; ++ ULONG DataOffset; ++ UINT TxRate; ++ dma_addr_t data_dma; // urb dma on linux ++ ++} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; + + // used to track driver-generated write irps +-typedef struct _HT_TX_CONTEXT +-{ +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize +- ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission +- UCHAR BulkOutPipeId; +- BOOLEAN IRPPending; +- BOOLEAN LastOne; +- BOOLEAN bCurWriting; +- BOOLEAN bRingEmpty; +- BOOLEAN bCopySavePad; +- UCHAR SavedPad[8]; +- UCHAR Header_802_3[LENGTH_802_3]; +- ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from. +- ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to. +- ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission +- ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission +- UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux +-} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; +- ++typedef struct _HT_TX_CONTEXT { ++ PVOID pAd; //Initialized in MiniportInitialize ++ PURB pUrb; //Initialized in MiniportInitialize ++ PIRP pIrp; //used to cancel pending bulk out. ++ //Initialized in MiniportInitialize ++ PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize ++ ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission ++ UCHAR BulkOutPipeId; ++ BOOLEAN IRPPending; ++ BOOLEAN LastOne; ++ BOOLEAN bCurWriting; ++ BOOLEAN bRingEmpty; ++ BOOLEAN bCopySavePad; ++ UCHAR SavedPad[8]; ++ UCHAR Header_802_3[LENGTH_802_3]; ++ ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from. ++ ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to. ++ ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission ++ ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission ++ UINT TxRate; ++ dma_addr_t data_dma; // urb dma on linux ++} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; + + // + // Structure to keep track of receive packets and buffers to indicate + // receive data to the protocol. + // +-typedef struct _RX_CONTEXT +-{ +- PUCHAR TransferBuffer; +- PVOID pAd; +- PIRP pIrp;//used to cancel pending bulk in. +- PURB pUrb; ++typedef struct _RX_CONTEXT { ++ PUCHAR TransferBuffer; ++ PVOID pAd; ++ PIRP pIrp; //used to cancel pending bulk in. ++ PURB pUrb; + //These 2 Boolean shouldn't both be 1 at the same time. +- ULONG BulkInOffset; // number of packets waiting for reordering . +-// BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication +- BOOLEAN bRxHandling; // Notify this packet is being process now. +- BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet. +- BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet. +- BOOLEAN IRPPending; // TODO: To be removed +- atomic_t IrpLock; +- NDIS_SPIN_LOCK RxContextLock; +- dma_addr_t data_dma; // urb dma on linux +-} RX_CONTEXT, *PRX_CONTEXT; +- +- ++ ULONG BulkInOffset; // number of packets waiting for reordering . ++// BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication ++ BOOLEAN bRxHandling; // Notify this packet is being process now. ++ BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet. ++ BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet. ++ BOOLEAN IRPPending; // TODO: To be removed ++ atomic_t IrpLock; ++ NDIS_SPIN_LOCK RxContextLock; ++ dma_addr_t data_dma; // urb dma on linux ++} RX_CONTEXT, *PRX_CONTEXT; + + /****************************************************************************** + +@@ -221,13 +209,11 @@ typedef struct _RX_CONTEXT + ******************************************************************************/ + // 8051 firmware image for usb - use last-half base address = 0x3000 + #define FIRMWARE_IMAGE_BASE 0x3000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte ++#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte + + #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ + RTUSBFirmwareWrite(_pAd, _pFwImage, _FwLen) + +- +- + /****************************************************************************** + + USB TX Related MACRO +@@ -281,7 +267,7 @@ typedef struct _RX_CONTEXT + RtmpUSB_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) + + #define HAL_LastTxIdx(pAd, QueIdx,TxIdx) \ +- /*RtmpUSBDataLastTxIdx(pAd, QueIdx,TxIdx)*/ ++ /*RtmpUSBDataLastTxIdx(pAd, QueIdx,TxIdx) */ + + #define HAL_KickOutTx(pAd, pTxBlk, QueIdx) \ + RtmpUSBDataKickOut(pAd, pTxBlk, QueIdx) +@@ -292,20 +278,17 @@ typedef struct _RX_CONTEXT + #define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ + RtmpUSBNullFrameKickOut(_pAd, _QueIdx, _pNullFrame, _frameLen) + +-#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx) ++#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx) + #define GET_MGMTRING_FREENO(_pAd) (_pAd->MgmtRing.TxSwFreeIdx) + +- + /* ----------------- RX Related MACRO ----------------- */ + +- + /* + * Device Hardware Interface Related MACRO + */ + #define RTMP_IRQ_INIT(pAd) do{}while(0) + #define RTMP_IRQ_ENABLE(pAd) do{}while(0) + +- + /* + * MLME Related MACRO + */ +@@ -330,7 +313,6 @@ typedef struct _RX_CONTEXT + RTUSBMlmeUp(_pAd); \ + } + +- + /* + * Power Save Related MACRO + */ +diff --git a/drivers/staging/rt2860/chip/rt2860.h b/drivers/staging/rt2860/chip/rt2860.h +index 2989d09..6b976b4 100644 +--- a/drivers/staging/rt2860/chip/rt2860.h ++++ b/drivers/staging/rt2860/chip/rt2860.h +@@ -43,14 +43,12 @@ + // + #define NIC2860_PCI_DEVICE_ID 0x0601 + #define NIC2860_PCIe_DEVICE_ID 0x0681 +-#define NIC2760_PCI_DEVICE_ID 0x0701 // 1T/2R Cardbus ??? +-#define NIC2790_PCIe_DEVICE_ID 0x0781 // 1T/2R miniCard +- ++#define NIC2760_PCI_DEVICE_ID 0x0701 // 1T/2R Cardbus ??? ++#define NIC2790_PCIe_DEVICE_ID 0x0781 // 1T/2R miniCard + + #define VEN_AWT_PCIe_DEVICE_ID 0x1059 + #define VEN_AWT_PCI_VENDOR_ID 0x1A3B + + #define EDIMAX_PCI_VENDOR_ID 0x1432 + +- + #endif //__RT2860_H__ // +diff --git a/drivers/staging/rt2860/chip/rt2870.h b/drivers/staging/rt2860/chip/rt2870.h +index a930925..5115a37 100644 +--- a/drivers/staging/rt2860/chip/rt2870.h ++++ b/drivers/staging/rt2860/chip/rt2870.h +@@ -40,8 +40,7 @@ + #include "../rtmp_type.h" + #include "mac_usb.h" + +- +-//#define RTMP_CHIP_NAME "RT2870" ++//#define RTMP_CHIP_NAME "RT2870" + + #endif // RT2870 // + #endif //__RT2870_H__ // +diff --git a/drivers/staging/rt2860/chip/rt3070.h b/drivers/staging/rt2860/chip/rt3070.h +index 87df99a..3781d9d 100644 +--- a/drivers/staging/rt2860/chip/rt3070.h ++++ b/drivers/staging/rt2860/chip/rt3070.h +@@ -39,7 +39,6 @@ + + #ifdef RT3070 + +- + #ifndef RTMP_USB_SUPPORT + #error "For RT3070, you should define the compile flag -DRTMP_USB_SUPPORT" + #endif +diff --git a/drivers/staging/rt2860/chip/rt3090.h b/drivers/staging/rt2860/chip/rt3090.h +index c2249a4..92481cc 100644 +--- a/drivers/staging/rt2860/chip/rt3090.h ++++ b/drivers/staging/rt2860/chip/rt3090.h +@@ -63,9 +63,9 @@ + // + // Device ID & Vendor ID, these values should match EEPROM value + // +-#define NIC3090_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard +-#define NIC3091_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard +-#define NIC3092_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard ++#define NIC3090_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard ++#define NIC3091_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard ++#define NIC3092_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard + + #endif // RT3090 // + +diff --git a/drivers/staging/rt2860/chip/rt30xx.h b/drivers/staging/rt2860/chip/rt30xx.h +index 70971a0..e6aa175 100644 +--- a/drivers/staging/rt2860/chip/rt30xx.h ++++ b/drivers/staging/rt2860/chip/rt30xx.h +@@ -39,7 +39,6 @@ + + #ifdef RT30xx + +- + extern REG_PAIR RT30xx_RFRegTable[]; + extern UCHAR NUM_RF_REG_PARMS; + +diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h +index 3ddb0bf..06321c0 100644 +--- a/drivers/staging/rt2860/chip/rtmp_mac.h ++++ b/drivers/staging/rt2860/chip/rtmp_mac.h +@@ -38,8 +38,6 @@ + #ifndef __RTMP_MAC_H__ + #define __RTMP_MAC_H__ + +- +- + // ================================================================================= + // TX / RX ring descriptor format + // ================================================================================= +@@ -50,89 +48,85 @@ + #define FIFO_HCCA 1 + #define FIFO_EDCA 2 + +- + // + // TXD Wireless Information format for Tx ring and Mgmt Ring + // + //txop : for txop mode + // 0:txop for the MPDU frame will be handles by ASIC by register + // 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS +-typedef struct PACKED _TXWI_STRUC { +- // Word 0 ++typedef struct PACKED _TXWI_STRUC { ++ // Word 0 + // ex: 00 03 00 40 means txop = 3, PHYMODE = 1 +- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. +- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode +- UINT32 CFACK:1; +- UINT32 TS:1; +- +- UINT32 AMPDU:1; +- UINT32 MpduDensity:3; +- UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. +- UINT32 rsv:6; +- +- UINT32 MCS:7; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE +- UINT32 Ifs:1; // +-// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz +- UINT32 rsv2:1; +- UINT32 TxBF:1; // 3*3 +- UINT32 PHYMODE:2; ++ UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. ++ UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode ++ UINT32 CFACK:1; ++ UINT32 TS:1; ++ ++ UINT32 AMPDU:1; ++ UINT32 MpduDensity:3; ++ UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. ++ UINT32 rsv:6; ++ ++ UINT32 MCS:7; ++ UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz ++ UINT32 ShortGI:1; ++ UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE ++ UINT32 Ifs:1; // ++// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz ++ UINT32 rsv2:1; ++ UINT32 TxBF:1; // 3*3 ++ UINT32 PHYMODE:2; + // Word1 + // ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 +- UINT32 ACK:1; +- UINT32 NSEQ:1; +- UINT32 BAWinSize:6; +- UINT32 WirelessCliID:8; +- UINT32 MPDUtotalByteCount:12; +- UINT32 PacketId:4; ++ UINT32 ACK:1; ++ UINT32 NSEQ:1; ++ UINT32 BAWinSize:6; ++ UINT32 WirelessCliID:8; ++ UINT32 MPDUtotalByteCount:12; ++ UINT32 PacketId:4; + //Word2 +- UINT32 IV; ++ UINT32 IV; + //Word3 +- UINT32 EIV; +-} TXWI_STRUC, *PTXWI_STRUC; +- ++ UINT32 EIV; ++} TXWI_STRUC, *PTXWI_STRUC; + + // + // RXWI wireless information format, in PBF. invisible in driver. + // +-typedef struct PACKED _RXWI_STRUC { +- // Word 0 +- UINT32 WirelessCliID:8; +- UINT32 KeyIndex:2; +- UINT32 BSSID:3; +- UINT32 UDF:3; +- UINT32 MPDUtotalByteCount:12; +- UINT32 TID:4; +- // Word 1 +- UINT32 FRAG:4; +- UINT32 SEQUENCE:12; +- UINT32 MCS:7; +- UINT32 BW:1; +- UINT32 ShortGI:1; +- UINT32 STBC:2; +- UINT32 rsv:3; +- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me ++typedef struct PACKED _RXWI_STRUC { ++ // Word 0 ++ UINT32 WirelessCliID:8; ++ UINT32 KeyIndex:2; ++ UINT32 BSSID:3; ++ UINT32 UDF:3; ++ UINT32 MPDUtotalByteCount:12; ++ UINT32 TID:4; ++ // Word 1 ++ UINT32 FRAG:4; ++ UINT32 SEQUENCE:12; ++ UINT32 MCS:7; ++ UINT32 BW:1; ++ UINT32 ShortGI:1; ++ UINT32 STBC:2; ++ UINT32 rsv:3; ++ UINT32 PHYMODE:2; // 1: this RX frame is unicast to me + //Word2 +- UINT32 RSSI0:8; +- UINT32 RSSI1:8; +- UINT32 RSSI2:8; +- UINT32 rsv1:8; ++ UINT32 RSSI0:8; ++ UINT32 RSSI1:8; ++ UINT32 RSSI2:8; ++ UINT32 rsv1:8; + //Word3 +- UINT32 SNR0:8; +- UINT32 SNR1:8; +- UINT32 FOFFSET:8; // RT35xx +- UINT32 rsv2:8; +- /*UINT32 rsv2:16;*/ +-} RXWI_STRUC, *PRXWI_STRUC; +- ++ UINT32 SNR0:8; ++ UINT32 SNR1:8; ++ UINT32 FOFFSET:8; // RT35xx ++ UINT32 rsv2:8; ++ /*UINT32 rsv2:16; */ ++} RXWI_STRUC, *PRXWI_STRUC; + + // ================================================================================= + // Register format + // ================================================================================= + +- + // + // SCH/DMA registers - base address 0x0200 + // +@@ -140,163 +134,161 @@ typedef struct PACKED _RXWI_STRUC { + // + #define DMA_CSR0 0x200 + #define INT_SOURCE_CSR 0x200 +-typedef union _INT_SOURCE_CSR_STRUC { +- struct { +- UINT32 RxDelayINT:1; +- UINT32 TxDelayINT:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1;//4 +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; // bit7 +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1;//bit 9 +- UINT32 RxTxCoherent:1; +- UINT32 TBTTInt:1; +- UINT32 PreTBTT:1; +- UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c +- UINT32 AutoWakeup:1;//bit14 +- UINT32 GPTimer:1; +- UINT32 RxCoherent:1;//bit16 +- UINT32 TxCoherent:1; +- UINT32 :14; +- } field; +- UINT32 word; ++typedef union _INT_SOURCE_CSR_STRUC { ++ struct { ++ UINT32 RxDelayINT:1; ++ UINT32 TxDelayINT:1; ++ UINT32 RxDone:1; ++ UINT32 Ac0DmaDone:1; //4 ++ UINT32 Ac1DmaDone:1; ++ UINT32 Ac2DmaDone:1; ++ UINT32 Ac3DmaDone:1; ++ UINT32 HccaDmaDone:1; // bit7 ++ UINT32 MgmtDmaDone:1; ++ UINT32 MCUCommandINT:1; //bit 9 ++ UINT32 RxTxCoherent:1; ++ UINT32 TBTTInt:1; ++ UINT32 PreTBTT:1; ++ UINT32 TXFifoStatusInt:1; //FIFO Statistics is full, sw should read 0x171c ++ UINT32 AutoWakeup:1; //bit14 ++ UINT32 GPTimer:1; ++ UINT32 RxCoherent:1; //bit16 ++ UINT32 TxCoherent:1; ++ UINT32:14; ++ } field; ++ UINT32 word; + } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; + + // + // INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF + // + #define INT_MASK_CSR 0x204 +-typedef union _INT_MASK_CSR_STRUC { +- struct { +- UINT32 RXDelay_INT_MSK:1; +- UINT32 TxDelay:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; +- UINT32 :20; +- UINT32 RxCoherent:1; +- UINT32 TxCoherent:1; +- } field; +- UINT32 word; ++typedef union _INT_MASK_CSR_STRUC { ++ struct { ++ UINT32 RXDelay_INT_MSK:1; ++ UINT32 TxDelay:1; ++ UINT32 RxDone:1; ++ UINT32 Ac0DmaDone:1; ++ UINT32 Ac1DmaDone:1; ++ UINT32 Ac2DmaDone:1; ++ UINT32 Ac3DmaDone:1; ++ UINT32 HccaDmaDone:1; ++ UINT32 MgmtDmaDone:1; ++ UINT32 MCUCommandINT:1; ++ UINT32:20; ++ UINT32 RxCoherent:1; ++ UINT32 TxCoherent:1; ++ } field; ++ UINT32 word; + } INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; + + #define WPDMA_GLO_CFG 0x208 +-typedef union _WPDMA_GLO_CFG_STRUC { +- struct { +- UINT32 EnableTxDMA:1; +- UINT32 TxDMABusy:1; +- UINT32 EnableRxDMA:1; +- UINT32 RxDMABusy:1; +- UINT32 WPDMABurstSIZE:2; +- UINT32 EnTXWriteBackDDONE:1; +- UINT32 BigEndian:1; +- UINT32 RXHdrScater:8; +- UINT32 HDR_SEG_LEN:16; +- } field; +- UINT32 word; ++typedef union _WPDMA_GLO_CFG_STRUC { ++ struct { ++ UINT32 EnableTxDMA:1; ++ UINT32 TxDMABusy:1; ++ UINT32 EnableRxDMA:1; ++ UINT32 RxDMABusy:1; ++ UINT32 WPDMABurstSIZE:2; ++ UINT32 EnTXWriteBackDDONE:1; ++ UINT32 BigEndian:1; ++ UINT32 RXHdrScater:8; ++ UINT32 HDR_SEG_LEN:16; ++ } field; ++ UINT32 word; + } WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; + + #define WPDMA_RST_IDX 0x20c +-typedef union _WPDMA_RST_IDX_STRUC { +- struct { +- UINT32 RST_DTX_IDX0:1; +- UINT32 RST_DTX_IDX1:1; +- UINT32 RST_DTX_IDX2:1; +- UINT32 RST_DTX_IDX3:1; +- UINT32 RST_DTX_IDX4:1; +- UINT32 RST_DTX_IDX5:1; +- UINT32 rsv:10; +- UINT32 RST_DRX_IDX0:1; +- UINT32 :15; +- } field; +- UINT32 word; ++typedef union _WPDMA_RST_IDX_STRUC { ++ struct { ++ UINT32 RST_DTX_IDX0:1; ++ UINT32 RST_DTX_IDX1:1; ++ UINT32 RST_DTX_IDX2:1; ++ UINT32 RST_DTX_IDX3:1; ++ UINT32 RST_DTX_IDX4:1; ++ UINT32 RST_DTX_IDX5:1; ++ UINT32 rsv:10; ++ UINT32 RST_DRX_IDX0:1; ++ UINT32:15; ++ } field; ++ UINT32 word; + } WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; + #define DELAY_INT_CFG 0x0210 +-typedef union _DELAY_INT_CFG_STRUC { +- struct { +- UINT32 RXMAX_PTIME:8; +- UINT32 RXMAX_PINT:7; +- UINT32 RXDLY_INT_EN:1; +- UINT32 TXMAX_PTIME:8; +- UINT32 TXMAX_PINT:7; +- UINT32 TXDLY_INT_EN:1; +- } field; +- UINT32 word; ++typedef union _DELAY_INT_CFG_STRUC { ++ struct { ++ UINT32 RXMAX_PTIME:8; ++ UINT32 RXMAX_PINT:7; ++ UINT32 RXDLY_INT_EN:1; ++ UINT32 TXMAX_PTIME:8; ++ UINT32 TXMAX_PINT:7; ++ UINT32 TXDLY_INT_EN:1; ++ } field; ++ UINT32 word; + } DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; + #define WMM_AIFSN_CFG 0x0214 +-typedef union _AIFSN_CSR_STRUC { +- struct { +- UINT32 Aifsn0:4; // for AC_BE +- UINT32 Aifsn1:4; // for AC_BK +- UINT32 Aifsn2:4; // for AC_VI +- UINT32 Aifsn3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; ++typedef union _AIFSN_CSR_STRUC { ++ struct { ++ UINT32 Aifsn0:4; // for AC_BE ++ UINT32 Aifsn1:4; // for AC_BK ++ UINT32 Aifsn2:4; // for AC_VI ++ UINT32 Aifsn3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; + // + // CWMIN_CSR: CWmin for each EDCA AC + // + #define WMM_CWMIN_CFG 0x0218 +-typedef union _CWMIN_CSR_STRUC { +- struct { +- UINT32 Cwmin0:4; // for AC_BE +- UINT32 Cwmin1:4; // for AC_BK +- UINT32 Cwmin2:4; // for AC_VI +- UINT32 Cwmin3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; ++typedef union _CWMIN_CSR_STRUC { ++ struct { ++ UINT32 Cwmin0:4; // for AC_BE ++ UINT32 Cwmin1:4; // for AC_BK ++ UINT32 Cwmin2:4; // for AC_VI ++ UINT32 Cwmin3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; + + // + // CWMAX_CSR: CWmin for each EDCA AC + // + #define WMM_CWMAX_CFG 0x021c +-typedef union _CWMAX_CSR_STRUC { +- struct { +- UINT32 Cwmax0:4; // for AC_BE +- UINT32 Cwmax1:4; // for AC_BK +- UINT32 Cwmax2:4; // for AC_VI +- UINT32 Cwmax3:4; // for AC_VO +- UINT32 Rsv:16; +- } field; +- UINT32 word; +-} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; +- ++typedef union _CWMAX_CSR_STRUC { ++ struct { ++ UINT32 Cwmax0:4; // for AC_BE ++ UINT32 Cwmax1:4; // for AC_BK ++ UINT32 Cwmax2:4; // for AC_VI ++ UINT32 Cwmax3:4; // for AC_VO ++ UINT32 Rsv:16; ++ } field; ++ UINT32 word; ++} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; + + // + // AC_TXOP_CSR0: AC_BK/AC_BE TXOP register + // + #define WMM_TXOP0_CFG 0x0220 +-typedef union _AC_TXOP_CSR0_STRUC { +- struct { +- USHORT Ac0Txop; // for AC_BK, in unit of 32us +- USHORT Ac1Txop; // for AC_BE, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; ++typedef union _AC_TXOP_CSR0_STRUC { ++ struct { ++ USHORT Ac0Txop; // for AC_BK, in unit of 32us ++ USHORT Ac1Txop; // for AC_BE, in unit of 32us ++ } field; ++ UINT32 word; ++} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; + + // + // AC_TXOP_CSR1: AC_VO/AC_VI TXOP register + // + #define WMM_TXOP1_CFG 0x0224 +-typedef union _AC_TXOP_CSR1_STRUC { +- struct { +- USHORT Ac2Txop; // for AC_VI, in unit of 32us +- USHORT Ac3Txop; // for AC_VO, in unit of 32us +- } field; +- UINT32 word; +-} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; +- ++typedef union _AC_TXOP_CSR1_STRUC { ++ struct { ++ USHORT Ac2Txop; // for AC_VI, in unit of 32us ++ USHORT Ac3Txop; // for AC_VO, in unit of 32us ++ } field; ++ UINT32 word; ++} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; + + #define RINGREG_DIFF 0x10 + #define GPIO_CTRL_CFG 0x0228 //MAC_CSR13 +@@ -305,23 +297,23 @@ typedef union _AC_TXOP_CSR1_STRUC { + #define TX_MAX_CNT0 0x0234 + #define TX_CTX_IDX0 0x0238 + #define TX_DTX_IDX0 0x023c +-#define TX_BASE_PTR1 0x0240 //AC_BE base address ++#define TX_BASE_PTR1 0x0240 //AC_BE base address + #define TX_MAX_CNT1 0x0244 + #define TX_CTX_IDX1 0x0248 + #define TX_DTX_IDX1 0x024c +-#define TX_BASE_PTR2 0x0250 //AC_VI base address ++#define TX_BASE_PTR2 0x0250 //AC_VI base address + #define TX_MAX_CNT2 0x0254 + #define TX_CTX_IDX2 0x0258 + #define TX_DTX_IDX2 0x025c +-#define TX_BASE_PTR3 0x0260 //AC_VO base address ++#define TX_BASE_PTR3 0x0260 //AC_VO base address + #define TX_MAX_CNT3 0x0264 + #define TX_CTX_IDX3 0x0268 + #define TX_DTX_IDX3 0x026c +-#define TX_BASE_PTR4 0x0270 //HCCA base address ++#define TX_BASE_PTR4 0x0270 //HCCA base address + #define TX_MAX_CNT4 0x0274 + #define TX_CTX_IDX4 0x0278 + #define TX_DTX_IDX4 0x027c +-#define TX_BASE_PTR5 0x0280 //MGMT base address ++#define TX_BASE_PTR5 0x0280 //MGMT base address + #define TX_MAX_CNT5 0x0284 + #define TX_CTX_IDX5 0x0288 + #define TX_DTX_IDX5 0x028c +@@ -333,26 +325,24 @@ typedef union _AC_TXOP_CSR1_STRUC { + #define RX_CRX_IDX 0x0298 + #define RX_DRX_IDX 0x029c + +- + #define USB_DMA_CFG 0x02a0 +-typedef union _USB_DMA_CFG_STRUC { +- struct { +- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns +- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes +- UINT32 phyclear:1; //phy watch dog enable. write 1 +- UINT32 rsv:2; +- UINT32 TxClear:1; //Clear USB DMA TX path +- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. +- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation +- UINT32 RxBulkEn:1; //Enable USB DMA Rx +- UINT32 TxBulkEn:1; //Enable USB DMA Tx +- UINT32 EpoutValid:6; //OUT endpoint data valid +- UINT32 RxBusy:1; //USB DMA RX FSM busy +- UINT32 TxBusy:1; //USB DMA TX FSM busy +- } field; +- UINT32 word; +-} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; +- ++typedef union _USB_DMA_CFG_STRUC { ++ struct { ++ UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns ++ UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes ++ UINT32 phyclear:1; //phy watch dog enable. write 1 ++ UINT32 rsv:2; ++ UINT32 TxClear:1; //Clear USB DMA TX path ++ UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. ++ UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation ++ UINT32 RxBulkEn:1; //Enable USB DMA Rx ++ UINT32 TxBulkEn:1; //Enable USB DMA Tx ++ UINT32 EpoutValid:6; //OUT endpoint data valid ++ UINT32 RxBusy:1; //USB DMA RX FSM busy ++ UINT32 TxBusy:1; //USB DMA TX FSM busy ++ } field; ++ UINT32 word; ++} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; + + // + // 3 PBF registers +@@ -385,7 +375,6 @@ typedef union _USB_DMA_CFG_STRUC { + #define LDO_CFG0 0x05d4 + #define GPIO_SWITCH 0x05dc + +- + // + // 4 MAC registers + // +@@ -393,143 +382,143 @@ typedef union _USB_DMA_CFG_STRUC { + // 4.1 MAC SYSTEM configuration registers (offset:0x1000) + // + #define MAC_CSR0 0x1000 +-typedef union _ASIC_VER_ID_STRUC { +- struct { +- USHORT ASICRev; // reversion : 0 +- USHORT ASICVer; // version : 2860 +- } field; +- UINT32 word; +-} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; +-#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 +-#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 +-#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 ++typedef union _ASIC_VER_ID_STRUC { ++ struct { ++ USHORT ASICRev; // reversion : 0 ++ USHORT ASICVer; // version : 2860 ++ } field; ++ UINT32 word; ++} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; ++#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 ++#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 ++#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 + // + // MAC_CSR2: STA MAC register 0 + // +-typedef union _MAC_DW0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} MAC_DW0_STRUC, *PMAC_DW0_STRUC; ++typedef union _MAC_DW0_STRUC { ++ struct { ++ UCHAR Byte0; // MAC address byte 0 ++ UCHAR Byte1; // MAC address byte 1 ++ UCHAR Byte2; // MAC address byte 2 ++ UCHAR Byte3; // MAC address byte 3 ++ } field; ++ UINT32 word; ++} MAC_DW0_STRUC, *PMAC_DW0_STRUC; + + // + // MAC_CSR3: STA MAC register 1 + // +-typedef union _MAC_DW1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR U2MeMask; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} MAC_DW1_STRUC, *PMAC_DW1_STRUC; ++typedef union _MAC_DW1_STRUC { ++ struct { ++ UCHAR Byte4; // MAC address byte 4 ++ UCHAR Byte5; // MAC address byte 5 ++ UCHAR U2MeMask; ++ UCHAR Rsvd1; ++ } field; ++ UINT32 word; ++} MAC_DW1_STRUC, *PMAC_DW1_STRUC; + +-#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 +-#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 ++#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 ++#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 + + // + // MAC_CSR5: BSSID register 1 + // +-typedef union _MAC_CSR5_STRUC { +- struct { +- UCHAR Byte4; // BSSID byte 4 +- UCHAR Byte5; // BSSID byte 5 +- USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID +- USHORT MBssBcnNum:3; +- USHORT Rsvd:11; +- } field; +- UINT32 word; +-} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; ++typedef union _MAC_CSR5_STRUC { ++ struct { ++ UCHAR Byte4; // BSSID byte 4 ++ UCHAR Byte5; // BSSID byte 5 ++ USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID ++ USHORT MBssBcnNum:3; ++ USHORT Rsvd:11; ++ } field; ++ UINT32 word; ++} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; + +-#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 +-#define BBP_CSR_CFG 0x101c // ++#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 ++#define BBP_CSR_CFG 0x101c // + // + // BBP_CSR_CFG: BBP serial control register + // +-typedef union _BBP_CSR_CFG_STRUC { +- struct { +- UINT32 Value:8; // Register value to program into BBP +- UINT32 RegNum:8; // Selected BBP register +- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP +- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. +- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles +- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel +- UINT32 :12; +- } field; +- UINT32 word; +-} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; ++typedef union _BBP_CSR_CFG_STRUC { ++ struct { ++ UINT32 Value:8; // Register value to program into BBP ++ UINT32 RegNum:8; // Selected BBP register ++ UINT32 fRead:1; // 0: Write BBP, 1: Read BBP ++ UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. ++ UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles ++ UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel ++ UINT32:12; ++ } field; ++ UINT32 word; ++} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; + #define RF_CSR_CFG0 0x1020 + // + // RF_CSR_CFG: RF control register + // +-typedef union _RF_CSR_CFG0_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 bitwidth:5; // Selected BBP register +- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby +- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate +- UINT32 Busy:1; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; ++typedef union _RF_CSR_CFG0_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 bitwidth:5; // Selected BBP register ++ UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby ++ UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate ++ UINT32 Busy:1; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; + #define RF_CSR_CFG1 0x1024 +-typedef union _RF_CSR_CFG1_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) +- UINT32 rsv:7; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; +-#define RF_CSR_CFG2 0x1028 // +-typedef union _RF_CSR_CFG2_STRUC { +- struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 rsv:8; // 0: idle 1: 8busy +- } field; +- UINT32 word; +-} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; +-#define LED_CFG 0x102c // MAC_CSR14 +-typedef union _LED_CFG_STRUC { +- struct { +- UINT32 OnPeriod:8; // blinking on period unit 1ms +- UINT32 OffPeriod:8; // blinking off period unit 1ms +- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms +- UINT32 rsv:2; +- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on +- UINT32 GLedMode:2; // green Led Mode +- UINT32 YLedMode:2; // yellow Led Mode +- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high +- UINT32 :1; +- } field; +- UINT32 word; +-} LED_CFG_STRUC, *PLED_CFG_STRUC; ++typedef union _RF_CSR_CFG1_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) ++ UINT32 rsv:7; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; ++#define RF_CSR_CFG2 0x1028 // ++typedef union _RF_CSR_CFG2_STRUC { ++ struct { ++ UINT32 RegIdAndContent:24; // Register value to program into BBP ++ UINT32 rsv:8; // 0: idle 1: 8busy ++ } field; ++ UINT32 word; ++} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; ++#define LED_CFG 0x102c // MAC_CSR14 ++typedef union _LED_CFG_STRUC { ++ struct { ++ UINT32 OnPeriod:8; // blinking on period unit 1ms ++ UINT32 OffPeriod:8; // blinking off period unit 1ms ++ UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms ++ UINT32 rsv:2; ++ UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on ++ UINT32 GLedMode:2; // green Led Mode ++ UINT32 YLedMode:2; // yellow Led Mode ++ UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high ++ UINT32:1; ++ } field; ++ UINT32 word; ++} LED_CFG_STRUC, *PLED_CFG_STRUC; + // + // 4.2 MAC TIMING configuration registers (offset:0x1100) + // +-#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 +-typedef union _IFS_SLOT_CFG_STRUC { +- struct { +- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX +- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX +- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND +- UINT32 EIFS:9; // unit 1us +- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer +- UINT32 rsv:2; +- } field; +- UINT32 word; +-} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; +- +-#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits +-#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) +-#define CH_TIME_CFG 0x110C // Count as channel busy +-#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us +-#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 ++#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 ++typedef union _IFS_SLOT_CFG_STRUC { ++ struct { ++ UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX ++ UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX ++ UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND ++ UINT32 EIFS:9; // unit 1us ++ UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer ++ UINT32 rsv:2; ++ } field; ++ UINT32 word; ++} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; ++ ++#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits ++#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) ++#define CH_TIME_CFG 0x110C // Count as channel busy ++#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us ++#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 + + #define BCN_OFFSET0 0x042C + #define BCN_OFFSET1 0x0430 +@@ -537,62 +526,62 @@ typedef union _IFS_SLOT_CFG_STRUC { + // + // BCN_TIME_CFG : Synchronization control register + // +-typedef union _BCN_TIME_CFG_STRUC { +- struct { +- UINT32 BeaconInterval:16; // in unit of 1/16 TU +- UINT32 bTsfTicking:1; // Enable TSF auto counting +- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode +- UINT32 bTBTTEnable:1; +- UINT32 bBeaconGen:1; // Enable beacon generator +- UINT32 :3; +- UINT32 TxTimestampCompensate:8; +- } field; +- UINT32 word; +-} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; +-#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 +-#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only +-#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. +-#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 +-#define INT_TIMER_CFG 0x1128 // +-#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable +-#define CH_IDLE_STA 0x1130 // channel idle time +-#define CH_BUSY_STA 0x1134 // channle busy time ++typedef union _BCN_TIME_CFG_STRUC { ++ struct { ++ UINT32 BeaconInterval:16; // in unit of 1/16 TU ++ UINT32 bTsfTicking:1; // Enable TSF auto counting ++ UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode ++ UINT32 bTBTTEnable:1; ++ UINT32 bBeaconGen:1; // Enable beacon generator ++ UINT32:3; ++ UINT32 TxTimestampCompensate:8; ++ } field; ++ UINT32 word; ++} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; ++#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 ++#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only ++#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. ++#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 ++#define INT_TIMER_CFG 0x1128 // ++#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable ++#define CH_IDLE_STA 0x1130 // channel idle time ++#define CH_BUSY_STA 0x1134 // channle busy time + // + // 4.2 MAC POWER configuration registers (offset:0x1200) + // +-#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 +-#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 +-#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 ++#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 ++#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 ++#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 + // + // AUTO_WAKEUP_CFG: Manual power control / status register + // +-typedef union _AUTO_WAKEUP_STRUC { +- struct { +- UINT32 AutoLeadTime:8; +- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set +- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake +- UINT32 :16; +- } field; +- UINT32 word; +-} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; ++typedef union _AUTO_WAKEUP_STRUC { ++ struct { ++ UINT32 AutoLeadTime:8; ++ UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set ++ UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake ++ UINT32:16; ++ } field; ++ UINT32 word; ++} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; + // + // 4.3 MAC TX configuration registers (offset:0x1300) + // + +-#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 ++#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 + #define EDCA_AC1_CFG 0x1304 + #define EDCA_AC2_CFG 0x1308 + #define EDCA_AC3_CFG 0x130c +-typedef union _EDCA_AC_CFG_STRUC { +- struct { +- UINT32 AcTxop:8; // in unit of 32us +- UINT32 Aifsn:4; // # of slot time +- UINT32 Cwmin:4; // +- UINT32 Cwmax:4; //unit power of 2 +- UINT32 :12; // +- } field; +- UINT32 word; +-} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; ++typedef union _EDCA_AC_CFG_STRUC { ++ struct { ++ UINT32 AcTxop:8; // in unit of 32us ++ UINT32 Aifsn:4; // # of slot time ++ UINT32 Cwmin:4; // ++ UINT32 Cwmax:4; //unit power of 2 ++ UINT32:12; // ++ } field; ++ UINT32 word; ++} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; + + #define EDCA_TID_AC_MAP 0x1310 + #define TX_PWR_CFG_0 0x1314 +@@ -601,7 +590,7 @@ typedef union _EDCA_AC_CFG_STRUC { + #define TX_PWR_CFG_3 0x1320 + #define TX_PWR_CFG_4 0x1324 + #define TX_PIN_CFG 0x1328 +-#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz ++#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz + #define TX_SW_CFG0 0x1330 + #define TX_SW_CFG1 0x1334 + #define TX_SW_CFG2 0x1338 +@@ -609,163 +598,162 @@ typedef union _EDCA_AC_CFG_STRUC { + #define TXOP_CTRL_CFG 0x1340 + #define TX_RTS_CFG 0x1344 + +-typedef union _TX_RTS_CFG_STRUC { +- struct { +- UINT32 AutoRtsRetryLimit:8; +- UINT32 RtsThres:16; // unit:byte +- UINT32 RtsFbkEn:1; // enable rts rate fallback +- UINT32 rsv:7; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; ++typedef union _TX_RTS_CFG_STRUC { ++ struct { ++ UINT32 AutoRtsRetryLimit:8; ++ UINT32 RtsThres:16; // unit:byte ++ UINT32 RtsFbkEn:1; // enable rts rate fallback ++ UINT32 rsv:7; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; + #define TX_TIMEOUT_CFG 0x1348 +-typedef union _TX_TIMEOUT_CFG_STRUC { +- struct { +- UINT32 rsv:4; +- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us +- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure +- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) +- UINT32 rsv2:8; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; ++typedef union _TX_TIMEOUT_CFG_STRUC { ++ struct { ++ UINT32 rsv:4; ++ UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us ++ UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure ++ UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) ++ UINT32 rsv2:8; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; + #define TX_RTY_CFG 0x134c +-typedef union PACKED _TX_RTY_CFG_STRUC { +- struct { +- UINT32 ShortRtyLimit:8; // short retry limit +- UINT32 LongRtyLimit:8; //long retry limit +- UINT32 LongRtyThre:12; // Long retry threshoold +- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable +- UINT32 rsv:1; // 1: HT non-STBC control frame enable +- } field; +- UINT32 word; +-} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; ++typedef union PACKED _TX_RTY_CFG_STRUC { ++ struct { ++ UINT32 ShortRtyLimit:8; // short retry limit ++ UINT32 LongRtyLimit:8; //long retry limit ++ UINT32 LongRtyThre:12; // Long retry threshoold ++ UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer ++ UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer ++ UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable ++ UINT32 rsv:1; // 1: HT non-STBC control frame enable ++ } field; ++ UINT32 word; ++} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; + #define TX_LINK_CFG 0x1350 +-typedef union PACKED _TX_LINK_CFG_STRUC { ++typedef union PACKED _TX_LINK_CFG_STRUC { + struct PACKED { +- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us +- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable +- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) +- UINT32 TxMRQEn:1; // MCS request TX enable +- UINT32 TxRDGEn:1; // RDG TX enable +- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable +- UINT32 rsv:3; // +- UINT32 RemotMFB:8; // remote MCS feedback +- UINT32 RemotMFS:8; //remote MCS feedback sequence number +- } field; +- UINT32 word; +-} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; ++ UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us ++ UINT32 MFBEnable:1; // TX apply remote MFB 1:enable ++ UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) ++ UINT32 TxMRQEn:1; // MCS request TX enable ++ UINT32 TxRDGEn:1; // RDG TX enable ++ UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable ++ UINT32 rsv:3; // ++ UINT32 RemotMFB:8; // remote MCS feedback ++ UINT32 RemotMFS:8; //remote MCS feedback sequence number ++ } field; ++ UINT32 word; ++} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; + #define HT_FBK_CFG0 0x1354 +-typedef union PACKED _HT_FBK_CFG0_STRUC { +- struct { +- UINT32 HTMCS0FBK:4; +- UINT32 HTMCS1FBK:4; +- UINT32 HTMCS2FBK:4; +- UINT32 HTMCS3FBK:4; +- UINT32 HTMCS4FBK:4; +- UINT32 HTMCS5FBK:4; +- UINT32 HTMCS6FBK:4; +- UINT32 HTMCS7FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; ++typedef union PACKED _HT_FBK_CFG0_STRUC { ++ struct { ++ UINT32 HTMCS0FBK:4; ++ UINT32 HTMCS1FBK:4; ++ UINT32 HTMCS2FBK:4; ++ UINT32 HTMCS3FBK:4; ++ UINT32 HTMCS4FBK:4; ++ UINT32 HTMCS5FBK:4; ++ UINT32 HTMCS6FBK:4; ++ UINT32 HTMCS7FBK:4; ++ } field; ++ UINT32 word; ++} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; + #define HT_FBK_CFG1 0x1358 +-typedef union _HT_FBK_CFG1_STRUC { +- struct { +- UINT32 HTMCS8FBK:4; +- UINT32 HTMCS9FBK:4; +- UINT32 HTMCS10FBK:4; +- UINT32 HTMCS11FBK:4; +- UINT32 HTMCS12FBK:4; +- UINT32 HTMCS13FBK:4; +- UINT32 HTMCS14FBK:4; +- UINT32 HTMCS15FBK:4; +- } field; +- UINT32 word; +-} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; ++typedef union _HT_FBK_CFG1_STRUC { ++ struct { ++ UINT32 HTMCS8FBK:4; ++ UINT32 HTMCS9FBK:4; ++ UINT32 HTMCS10FBK:4; ++ UINT32 HTMCS11FBK:4; ++ UINT32 HTMCS12FBK:4; ++ UINT32 HTMCS13FBK:4; ++ UINT32 HTMCS14FBK:4; ++ UINT32 HTMCS15FBK:4; ++ } field; ++ UINT32 word; ++} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; + #define LG_FBK_CFG0 0x135c +-typedef union _LG_FBK_CFG0_STRUC { +- struct { +- UINT32 OFDMMCS0FBK:4; //initial value is 0 +- UINT32 OFDMMCS1FBK:4; //initial value is 0 +- UINT32 OFDMMCS2FBK:4; //initial value is 1 +- UINT32 OFDMMCS3FBK:4; //initial value is 2 +- UINT32 OFDMMCS4FBK:4; //initial value is 3 +- UINT32 OFDMMCS5FBK:4; //initial value is 4 +- UINT32 OFDMMCS6FBK:4; //initial value is 5 +- UINT32 OFDMMCS7FBK:4; //initial value is 6 +- } field; +- UINT32 word; +-} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; ++typedef union _LG_FBK_CFG0_STRUC { ++ struct { ++ UINT32 OFDMMCS0FBK:4; //initial value is 0 ++ UINT32 OFDMMCS1FBK:4; //initial value is 0 ++ UINT32 OFDMMCS2FBK:4; //initial value is 1 ++ UINT32 OFDMMCS3FBK:4; //initial value is 2 ++ UINT32 OFDMMCS4FBK:4; //initial value is 3 ++ UINT32 OFDMMCS5FBK:4; //initial value is 4 ++ UINT32 OFDMMCS6FBK:4; //initial value is 5 ++ UINT32 OFDMMCS7FBK:4; //initial value is 6 ++ } field; ++ UINT32 word; ++} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; + #define LG_FBK_CFG1 0x1360 +-typedef union _LG_FBK_CFG1_STRUC { +- struct { +- UINT32 CCKMCS0FBK:4; //initial value is 0 +- UINT32 CCKMCS1FBK:4; //initial value is 0 +- UINT32 CCKMCS2FBK:4; //initial value is 1 +- UINT32 CCKMCS3FBK:4; //initial value is 2 +- UINT32 rsv:16; +- } field; +- UINT32 word; +-} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; +- ++typedef union _LG_FBK_CFG1_STRUC { ++ struct { ++ UINT32 CCKMCS0FBK:4; //initial value is 0 ++ UINT32 CCKMCS1FBK:4; //initial value is 0 ++ UINT32 CCKMCS2FBK:4; //initial value is 1 ++ UINT32 CCKMCS3FBK:4; //initial value is 2 ++ UINT32 rsv:16; ++ } field; ++ UINT32 word; ++} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; + + //======================================================= + //================ Protection Paramater================================ + //======================================================= +-#define CCK_PROT_CFG 0x1364 //CCK Protection ++#define CCK_PROT_CFG 0x1364 //CCK Protection + #define ASIC_SHORTNAV 1 + #define ASIC_LONGNAV 2 + #define ASIC_RTS 1 + #define ASIC_CTS 2 +-typedef union _PROT_CFG_STRUC { +- struct { +- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). +- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv +- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv +- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. +- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. +- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX +- UINT32 rsv:5; +- } field; +- UINT32 word; +-} PROT_CFG_STRUC, *PPROT_CFG_STRUC; +- +-#define OFDM_PROT_CFG 0x1368 //OFDM Protection +-#define MM20_PROT_CFG 0x136C //MM20 Protection +-#define MM40_PROT_CFG 0x1370 //MM40 Protection +-#define GF20_PROT_CFG 0x1374 //GF20 Protection +-#define GF40_PROT_CFG 0x1378 //GR40 Protection +-#define EXP_CTS_TIME 0x137C // +-#define EXP_ACK_TIME 0x1380 // ++typedef union _PROT_CFG_STRUC { ++ struct { ++ UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). ++ UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv ++ UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv ++ UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. ++ UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. ++ UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. ++ UINT32 RTSThEn:1; //RTS threshold enable on CCK TX ++ UINT32 rsv:5; ++ } field; ++ UINT32 word; ++} PROT_CFG_STRUC, *PPROT_CFG_STRUC; ++ ++#define OFDM_PROT_CFG 0x1368 //OFDM Protection ++#define MM20_PROT_CFG 0x136C //MM20 Protection ++#define MM40_PROT_CFG 0x1370 //MM40 Protection ++#define GF20_PROT_CFG 0x1374 //GF20 Protection ++#define GF40_PROT_CFG 0x1378 //GR40 Protection ++#define EXP_CTS_TIME 0x137C // ++#define EXP_ACK_TIME 0x1380 // + + // + // 4.4 MAC RX configuration registers (offset:0x1400) + // +-#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 +-#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 ++#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 ++#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 + // + // TXRX_CSR4: Auto-Responder/ + // + typedef union _AUTO_RSP_CFG_STRUC { +- struct { +- UINT32 AutoResponderEnable:1; +- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble +- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode +- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode +- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble +- UINT32 rsv:1; // Power bit value in conrtrol frame +- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame +- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame +- UINT32 :24; +- } field; +- UINT32 word; ++ struct { ++ UINT32 AutoResponderEnable:1; ++ UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble ++ UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode ++ UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode ++ UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble ++ UINT32 rsv:1; // Power bit value in conrtrol frame ++ UINT32 DualCTSEn:1; // Power bit value in conrtrol frame ++ UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame ++ UINT32:24; ++ } field; ++ UINT32 word; + } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; + + #define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054 +@@ -777,9 +765,9 @@ typedef union _AUTO_RSP_CFG_STRUC { + // + // 4.5 MAC Security configuration (offset:0x1500) + // +-#define TX_SEC_CNT0 0x1500 // +-#define RX_SEC_CNT0 0x1504 // +-#define CCMP_FC_MUTE 0x1508 // ++#define TX_SEC_CNT0 0x1500 // ++#define RX_SEC_CNT0 0x1504 // ++#define CCMP_FC_MUTE 0x1508 // + // + // 4.6 HCCA/PSMP (offset:0x1600) + // +@@ -792,179 +780,179 @@ typedef union _AUTO_RSP_CFG_STRUC { + // + // 4.7 MAC Statistis registers (offset:0x1700) + // +-#define RX_STA_CNT0 0x1700 // +-#define RX_STA_CNT1 0x1704 // +-#define RX_STA_CNT2 0x1708 // ++#define RX_STA_CNT0 0x1700 // ++#define RX_STA_CNT1 0x1704 // ++#define RX_STA_CNT2 0x1708 // + + // + // RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count + // +-typedef union _RX_STA_CNT0_STRUC { +- struct { +- USHORT CrcErr; +- USHORT PhyErr; +- } field; +- UINT32 word; +-} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; ++typedef union _RX_STA_CNT0_STRUC { ++ struct { ++ USHORT CrcErr; ++ USHORT PhyErr; ++ } field; ++ UINT32 word; ++} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; + + // + // RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count + // +-typedef union _RX_STA_CNT1_STRUC { +- struct { +- USHORT FalseCca; +- USHORT PlcpErr; +- } field; +- UINT32 word; +-} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; ++typedef union _RX_STA_CNT1_STRUC { ++ struct { ++ USHORT FalseCca; ++ USHORT PlcpErr; ++ } field; ++ UINT32 word; ++} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; + + // + // RX_STA_CNT2_STRUC: + // +-typedef union _RX_STA_CNT2_STRUC { +- struct { +- USHORT RxDupliCount; +- USHORT RxFifoOverflowCount; +- } field; +- UINT32 word; +-} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; +-#define TX_STA_CNT0 0x170C // ++typedef union _RX_STA_CNT2_STRUC { ++ struct { ++ USHORT RxDupliCount; ++ USHORT RxFifoOverflowCount; ++ } field; ++ UINT32 word; ++} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; ++#define TX_STA_CNT0 0x170C // + // + // STA_CSR3: TX Beacon count + // +-typedef union _TX_STA_CNT0_STRUC { +- struct { +- USHORT TxFailCount; +- USHORT TxBeaconCount; +- } field; +- UINT32 word; +-} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; +-#define TX_STA_CNT1 0x1710 // ++typedef union _TX_STA_CNT0_STRUC { ++ struct { ++ USHORT TxFailCount; ++ USHORT TxBeaconCount; ++ } field; ++ UINT32 word; ++} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; ++#define TX_STA_CNT1 0x1710 // + // + // TX_STA_CNT1: TX tx count + // +-typedef union _TX_STA_CNT1_STRUC { +- struct { +- USHORT TxSuccess; +- USHORT TxRetransmit; +- } field; +- UINT32 word; +-} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; +-#define TX_STA_CNT2 0x1714 // ++typedef union _TX_STA_CNT1_STRUC { ++ struct { ++ USHORT TxSuccess; ++ USHORT TxRetransmit; ++ } field; ++ UINT32 word; ++} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; ++#define TX_STA_CNT2 0x1714 // + // + // TX_STA_CNT2: TX tx count + // +-typedef union _TX_STA_CNT2_STRUC { +- struct { +- USHORT TxZeroLenCount; +- USHORT TxUnderFlowCount; +- } field; +- UINT32 word; +-} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; +-#define TX_STA_FIFO 0x1718 // ++typedef union _TX_STA_CNT2_STRUC { ++ struct { ++ USHORT TxZeroLenCount; ++ USHORT TxUnderFlowCount; ++ } field; ++ UINT32 word; ++} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; ++#define TX_STA_FIFO 0x1718 // + // + // TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register + // +-typedef union PACKED _TX_STA_FIFO_STRUC { +- struct { +- UINT32 bValid:1; // 1:This register contains a valid TX result +- UINT32 PidType:4; +- UINT32 TxSuccess:1; // Tx No retry success +- UINT32 TxAggre:1; // Tx Retry Success +- UINT32 TxAckRequired:1; // Tx fail +- UINT32 wcid:8; //wireless client index +-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 TxBF:1; +- UINT32 Reserve:2; +- } field; +- UINT32 word; +-} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; ++typedef union PACKED _TX_STA_FIFO_STRUC { ++ struct { ++ UINT32 bValid:1; // 1:This register contains a valid TX result ++ UINT32 PidType:4; ++ UINT32 TxSuccess:1; // Tx No retry success ++ UINT32 TxAggre:1; // Tx Retry Success ++ UINT32 TxAckRequired:1; // Tx fail ++ UINT32 wcid:8; //wireless client index ++// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. ++ UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. ++ UINT32 TxBF:1; ++ UINT32 Reserve:2; ++ } field; ++ UINT32 word; ++} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; + // Debug counter + #define TX_AGG_CNT 0x171c +-typedef union _TX_AGG_CNT_STRUC { +- struct { +- USHORT NonAggTxCount; +- USHORT AggTxCount; +- } field; +- UINT32 word; +-} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; ++typedef union _TX_AGG_CNT_STRUC { ++ struct { ++ USHORT NonAggTxCount; ++ USHORT AggTxCount; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; + // Debug counter + #define TX_AGG_CNT0 0x1720 +-typedef union _TX_AGG_CNT0_STRUC { +- struct { +- USHORT AggSize1Count; +- USHORT AggSize2Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; ++typedef union _TX_AGG_CNT0_STRUC { ++ struct { ++ USHORT AggSize1Count; ++ USHORT AggSize2Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; + // Debug counter + #define TX_AGG_CNT1 0x1724 +-typedef union _TX_AGG_CNT1_STRUC { +- struct { +- USHORT AggSize3Count; +- USHORT AggSize4Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; ++typedef union _TX_AGG_CNT1_STRUC { ++ struct { ++ USHORT AggSize3Count; ++ USHORT AggSize4Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; + #define TX_AGG_CNT2 0x1728 +-typedef union _TX_AGG_CNT2_STRUC { +- struct { +- USHORT AggSize5Count; +- USHORT AggSize6Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; ++typedef union _TX_AGG_CNT2_STRUC { ++ struct { ++ USHORT AggSize5Count; ++ USHORT AggSize6Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; + // Debug counter + #define TX_AGG_CNT3 0x172c +-typedef union _TX_AGG_CNT3_STRUC { +- struct { +- USHORT AggSize7Count; +- USHORT AggSize8Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; ++typedef union _TX_AGG_CNT3_STRUC { ++ struct { ++ USHORT AggSize7Count; ++ USHORT AggSize8Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; + // Debug counter + #define TX_AGG_CNT4 0x1730 +-typedef union _TX_AGG_CNT4_STRUC { +- struct { +- USHORT AggSize9Count; +- USHORT AggSize10Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; ++typedef union _TX_AGG_CNT4_STRUC { ++ struct { ++ USHORT AggSize9Count; ++ USHORT AggSize10Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; + #define TX_AGG_CNT5 0x1734 +-typedef union _TX_AGG_CNT5_STRUC { +- struct { +- USHORT AggSize11Count; +- USHORT AggSize12Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; ++typedef union _TX_AGG_CNT5_STRUC { ++ struct { ++ USHORT AggSize11Count; ++ USHORT AggSize12Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; + #define TX_AGG_CNT6 0x1738 +-typedef union _TX_AGG_CNT6_STRUC { +- struct { +- USHORT AggSize13Count; +- USHORT AggSize14Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; ++typedef union _TX_AGG_CNT6_STRUC { ++ struct { ++ USHORT AggSize13Count; ++ USHORT AggSize14Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; + #define TX_AGG_CNT7 0x173c +-typedef union _TX_AGG_CNT7_STRUC { +- struct { +- USHORT AggSize15Count; +- USHORT AggSize16Count; +- } field; +- UINT32 word; +-} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; ++typedef union _TX_AGG_CNT7_STRUC { ++ struct { ++ USHORT AggSize15Count; ++ USHORT AggSize16Count; ++ } field; ++ UINT32 word; ++} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; + #define MPDU_DENSITY_CNT 0x1740 +-typedef union _MPDU_DEN_CNT_STRUC { +- struct { +- USHORT TXZeroDelCount; //TX zero length delimiter count +- USHORT RXZeroDelCount; //RX zero length delimiter count +- } field; +- UINT32 word; +-} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; ++typedef union _MPDU_DEN_CNT_STRUC { ++ struct { ++ USHORT TXZeroDelCount; //TX zero length delimiter count ++ USHORT RXZeroDelCount; //RX zero length delimiter count ++ } field; ++ UINT32 word; ++} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; + // + // TXRX control registers - base address 0x3000 + // +@@ -974,80 +962,77 @@ typedef union _MPDU_DEN_CNT_STRUC { + // + // Security key table memory, base address = 0x1000 + // +-#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = ++#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = + #define HW_WCID_ENTRY_SIZE 8 +-#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte ++#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte + #define HW_KEY_ENTRY_SIZE 0x20 +-#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte ++#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte ++#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte + #define HW_IVEIV_ENTRY_SIZE 8 +-#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte ++#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte + #define HW_WCID_ATTRI_SIZE 4 + #define WCID_RESERVED 0x6bfc +-#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte +-#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte ++#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte ++#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte + #define HW_SHARED_KEY_MODE_SIZE 4 + #define SHAREDKEYTABLE 0 + #define PAIRWISEKEYTABLE 1 + +- +-typedef union _SHAREDKEY_MODE_STRUC { +- struct { +- UINT32 Bss0Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss0Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss1Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; ++typedef union _SHAREDKEY_MODE_STRUC { ++ struct { ++ UINT32 Bss0Key0CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss0Key1CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss0Key2CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss0Key3CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss1Key0CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss1Key1CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss1Key2CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss1Key3CipherAlg:3; ++ UINT32:1; ++ } field; ++ UINT32 word; ++} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; + // 64-entry for pairwise key table +-typedef struct _HW_WCID_ENTRY { // 8-byte per entry +- UCHAR Address[6]; +- UCHAR Rsv[2]; ++typedef struct _HW_WCID_ENTRY { // 8-byte per entry ++ UCHAR Address[6]; ++ UCHAR Rsv[2]; + } HW_WCID_ENTRY, PHW_WCID_ENTRY; + +- + // ================================================================================= + // WCID format + // ================================================================================= +-//7.1 WCID ENTRY format : 8bytes +-typedef struct _WCID_ENTRY_STRUC { +- UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 +- UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 +- UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table +-} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; +- +-//8.1.1 SECURITY KEY format : 8DW ++//7.1 WCID ENTRY format : 8bytes ++typedef struct _WCID_ENTRY_STRUC { ++ UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 ++ UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 ++ UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table ++} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; ++ ++//8.1.1 SECURITY KEY format : 8DW + // 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table +-typedef struct _HW_KEY_ENTRY { // 32-byte per entry +- UCHAR Key[16]; +- UCHAR TxMic[8]; +- UCHAR RxMic[8]; ++typedef struct _HW_KEY_ENTRY { // 32-byte per entry ++ UCHAR Key[16]; ++ UCHAR TxMic[8]; ++ UCHAR RxMic[8]; + } HW_KEY_ENTRY, *PHW_KEY_ENTRY; + +-//8.1.2 IV/EIV format : 2DW +- +-//8.1.3 RX attribute entry format : 1DW +-typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table +- UINT32 PairKeyMode:3; +- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID +- UINT32 RXWIUDF:3; +- UINT32 rsv:22; +-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; ++//8.1.2 IV/EIV format : 2DW + ++//8.1.3 RX attribute entry format : 1DW ++typedef struct _MAC_ATTRIBUTE_STRUC { ++ UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table ++ UINT32 PairKeyMode:3; ++ UINT32 BSSIDIdx:3; //multipleBSS index for the WCID ++ UINT32 RXWIUDF:3; ++ UINT32 rsv:22; ++} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; + + // ================================================================================= + // HOST-MCU communication data structure +@@ -1056,192 +1041,181 @@ typedef struct _MAC_ATTRIBUTE_STRUC { + // + // H2M_MAILBOX_CSR: Host-to-MCU Mailbox + // +-typedef union _H2M_MAILBOX_STRUC { +- struct { +- UINT32 LowByte:8; +- UINT32 HighByte:8; +- UINT32 CmdToken:8; +- UINT32 Owner:8; +- } field; +- UINT32 word; ++typedef union _H2M_MAILBOX_STRUC { ++ struct { ++ UINT32 LowByte:8; ++ UINT32 HighByte:8; ++ UINT32 CmdToken:8; ++ UINT32 Owner:8; ++ } field; ++ UINT32 word; + } H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; + + // + // M2H_CMD_DONE_CSR: MCU-to-Host command complete indication + // + typedef union _M2H_CMD_DONE_STRUC { +- struct { +- UINT32 CmdToken0; +- UINT32 CmdToken1; +- UINT32 CmdToken2; +- UINT32 CmdToken3; +- } field; +- UINT32 word; ++ struct { ++ UINT32 CmdToken0; ++ UINT32 CmdToken1; ++ UINT32 CmdToken2; ++ UINT32 CmdToken3; ++ } field; ++ UINT32 word; + } M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; + +- + //NAV_TIME_CFG :NAV +-typedef union _NAV_TIME_CFG_STRUC { +- struct { +- UCHAR Sifs; // in unit of 1-us +- UCHAR SlotTime; // in unit of 1-us +- USHORT Eifs:9; // in unit of 1-us +- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable +- USHORT rsv:6; +- } field; +- UINT32 word; +-} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; +- ++typedef union _NAV_TIME_CFG_STRUC { ++ struct { ++ UCHAR Sifs; // in unit of 1-us ++ UCHAR SlotTime; // in unit of 1-us ++ USHORT Eifs:9; // in unit of 1-us ++ USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable ++ USHORT rsv:6; ++ } field; ++ UINT32 word; ++} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; + + // + // RX_FILTR_CFG: /RX configuration register + // +-typedef union _RX_FILTR_CFG_STRUC { +- struct { +- UINT32 DropCRCErr:1; // Drop CRC error +- UINT32 DropPhyErr:1; // Drop physical error +- UINT32 DropNotToMe:1; // Drop not to me unicast frame +- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true +- +- UINT32 DropVerErr:1; // Drop version error frame +- UINT32 DropMcast:1; // Drop multicast frames +- UINT32 DropBcast:1; // Drop broadcast frames +- UINT32 DropDuplicate:1; // Drop duplicate frame ++typedef union _RX_FILTR_CFG_STRUC { ++ struct { ++ UINT32 DropCRCErr:1; // Drop CRC error ++ UINT32 DropPhyErr:1; // Drop physical error ++ UINT32 DropNotToMe:1; // Drop not to me unicast frame ++ UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true + +- UINT32 DropCFEndAck:1; // Drop Ps-Poll +- UINT32 DropCFEnd:1; // Drop Ps-Poll +- UINT32 DropAck:1; // Drop Ps-Poll +- UINT32 DropCts:1; // Drop Ps-Poll +- +- UINT32 DropRts:1; // Drop Ps-Poll +- UINT32 DropPsPoll:1; // Drop Ps-Poll +- UINT32 DropBA:1; // +- UINT32 DropBAR:1; // +- +- UINT32 DropRsvCntlType:1; +- UINT32 :15; +- } field; +- UINT32 word; +-} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; ++ UINT32 DropVerErr:1; // Drop version error frame ++ UINT32 DropMcast:1; // Drop multicast frames ++ UINT32 DropBcast:1; // Drop broadcast frames ++ UINT32 DropDuplicate:1; // Drop duplicate frame + ++ UINT32 DropCFEndAck:1; // Drop Ps-Poll ++ UINT32 DropCFEnd:1; // Drop Ps-Poll ++ UINT32 DropAck:1; // Drop Ps-Poll ++ UINT32 DropCts:1; // Drop Ps-Poll + ++ UINT32 DropRts:1; // Drop Ps-Poll ++ UINT32 DropPsPoll:1; // Drop Ps-Poll ++ UINT32 DropBA:1; // ++ UINT32 DropBAR:1; // + ++ UINT32 DropRsvCntlType:1; ++ UINT32:15; ++ } field; ++ UINT32 word; ++} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; + + // + // PHY_CSR4: RF serial control register + // +-typedef union _PHY_CSR4_STRUC { +- struct { +- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. +- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) +- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program +- UINT32 PLL_LD:1; // RF PLL_LD status +- UINT32 Busy:1; // 1: ASIC is busy execute RF programming. +- } field; +- UINT32 word; +-} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; +- ++typedef union _PHY_CSR4_STRUC { ++ struct { ++ UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. ++ UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) ++ UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program ++ UINT32 PLL_LD:1; // RF PLL_LD status ++ UINT32 Busy:1; // 1: ASIC is busy execute RF programming. ++ } field; ++ UINT32 word; ++} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; + + // + // SEC_CSR5: shared key table security mode register + // +-typedef union _SEC_CSR5_STRUC { +- struct { +- UINT32 Bss2Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss2Key3CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key0CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key1CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key2CipherAlg:3; +- UINT32 :1; +- UINT32 Bss3Key3CipherAlg:3; +- UINT32 :1; +- } field; +- UINT32 word; +-} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; +- ++typedef union _SEC_CSR5_STRUC { ++ struct { ++ UINT32 Bss2Key0CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss2Key1CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss2Key2CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss2Key3CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss3Key0CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss3Key1CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss3Key2CipherAlg:3; ++ UINT32:1; ++ UINT32 Bss3Key3CipherAlg:3; ++ UINT32:1; ++ } field; ++ UINT32 word; ++} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; + + // + // HOST_CMD_CSR: For HOST to interrupt embedded processor + // +-typedef union _HOST_CMD_CSR_STRUC { +- struct { +- UINT32 HostCommand:8; +- UINT32 Rsv:24; +- } field; +- UINT32 word; +-} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; +- ++typedef union _HOST_CMD_CSR_STRUC { ++ struct { ++ UINT32 HostCommand:8; ++ UINT32 Rsv:24; ++ } field; ++ UINT32 word; ++} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; + + // + // AIFSN_CSR: AIFSN for each EDCA AC + // + +- +- + // + // E2PROM_CSR: EEPROM control register + // +-typedef union _E2PROM_CSR_STRUC { +- struct { +- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. +- UINT32 EepromSK:1; +- UINT32 EepromCS:1; +- UINT32 EepromDI:1; +- UINT32 EepromDO:1; +- UINT32 Type:1; // 1: 93C46, 0:93C66 +- UINT32 LoadStatus:1; // 1:loading, 0:done +- UINT32 Rsvd:25; +- } field; +- UINT32 word; +-} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; ++typedef union _E2PROM_CSR_STRUC { ++ struct { ++ UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. ++ UINT32 EepromSK:1; ++ UINT32 EepromCS:1; ++ UINT32 EepromDI:1; ++ UINT32 EepromDO:1; ++ UINT32 Type:1; // 1: 93C46, 0:93C66 ++ UINT32 LoadStatus:1; // 1:loading, 0:done ++ UINT32 Rsvd:25; ++ } field; ++ UINT32 word; ++} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; + + // + // QOS_CSR0: TXOP holder address0 register + // +-typedef union _QOS_CSR0_STRUC { +- struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 +- } field; +- UINT32 word; +-} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; ++typedef union _QOS_CSR0_STRUC { ++ struct { ++ UCHAR Byte0; // MAC address byte 0 ++ UCHAR Byte1; // MAC address byte 1 ++ UCHAR Byte2; // MAC address byte 2 ++ UCHAR Byte3; // MAC address byte 3 ++ } field; ++ UINT32 word; ++} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; + + // + // QOS_CSR1: TXOP holder address1 register + // +-typedef union _QOS_CSR1_STRUC { +- struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 +- UCHAR Rsvd0; +- UCHAR Rsvd1; +- } field; +- UINT32 word; +-} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; ++typedef union _QOS_CSR1_STRUC { ++ struct { ++ UCHAR Byte4; // MAC address byte 4 ++ UCHAR Byte5; // MAC address byte 5 ++ UCHAR Rsvd0; ++ UCHAR Rsvd1; ++ } field; ++ UINT32 word; ++} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; + + #define RF_CSR_CFG 0x500 +-typedef union _RF_CSR_CFG_STRUC { +- struct { +- UINT RF_CSR_DATA:8; // DATA +- UINT TESTCSR_RFACC_REGNUM:5; // RF register ID +- UINT Rsvd2:3; // Reserved +- UINT RF_CSR_WR:1; // 0: read 1: write +- UINT RF_CSR_KICK:1; // kick RF register read/write +- UINT Rsvd1:14; // Reserved +- } field; +- UINT word; +-} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; +- ++typedef union _RF_CSR_CFG_STRUC { ++ struct { ++ UINT RF_CSR_DATA:8; // DATA ++ UINT TESTCSR_RFACC_REGNUM:5; // RF register ID ++ UINT Rsvd2:3; // Reserved ++ UINT RF_CSR_WR:1; // 0: read 1: write ++ UINT RF_CSR_KICK:1; // kick RF register read/write ++ UINT Rsvd1:14; // Reserved ++ } field; ++ UINT word; ++} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; + + // + // Other on-chip shared memory space, base = 0x2000 +@@ -1258,17 +1232,17 @@ typedef union _RF_CSR_CFG_STRUC { + + // 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes + // to save debugging settings +-#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes +-#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes ++#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes ++#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes + + // In order to support maximum 8 MBSS and its maximum length is 512 for each beacon + // Three section discontinue memory segments will be used. + // 1. The original region for BCN 0~3 + // 2. Extract memory from FCE table for BCN 4~5 + // 3. Extract memory from Pair-wise key table for BCN 6~7 +-// It occupied those memory of wcid 238~253 for BCN 6 +-// and wcid 222~237 for BCN 7 +-#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ ++// It occupied those memory of wcid 238~253 for BCN 6 ++// and wcid 222~237 for BCN 7 ++#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ + #define HW_BEACON_BASE0 0x7800 + #define HW_BEACON_BASE1 0x7A00 + #define HW_BEACON_BASE2 0x7C00 +@@ -1290,11 +1264,11 @@ typedef union _RF_CSR_CFG_STRUC { + #define H2M_INT_SRC 0x7024 + #define H2M_BBP_AGENT 0x7028 + #define M2H_CMD_DONE_CSR 0x000c +-#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert +-#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert +-#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware +-#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert +-#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert ++#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert ++#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert ++#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware ++#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert ++#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert + + // + // Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, +@@ -1305,10 +1279,8 @@ typedef union _RF_CSR_CFG_STRUC { + #define E2PROM_CSR 0x0004 + #define IO_CNTL_CSR 0x77d0 + +- +- + // ================================================================ +-// Tx / Rx / Mgmt ring descriptor definition ++// Tx / Rx / Mgmt ring descriptor definition + // ================================================================ + + // the following PID values are used to mark outgoing frame type in TXD->PID so that +@@ -1321,8 +1293,8 @@ typedef union _RF_CSR_CFG_STRUC { + #define PID_DATA_NO_ACK 0x08 + #define PID_DATA_NOT_NORM_ACK 0x03 + // value domain of pTxD->HostQId (4-bit: 0~15) +-#define QID_AC_BK 1 // meet ACI definition in 802.11e +-#define QID_AC_BE 0 // meet ACI definition in 802.11e ++#define QID_AC_BK 1 // meet ACI definition in 802.11e ++#define QID_AC_BE 0 // meet ACI definition in 802.11e + #define QID_AC_VI 2 + #define QID_AC_VO 3 + #define QID_HCCA 4 +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index 36f438b..bbf920d 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -38,7 +38,6 @@ + #ifndef __RTMP_PHY_H__ + #define __RTMP_PHY_H__ + +- + /* + RF sections + */ +@@ -75,31 +74,30 @@ + #define RF_R30 30 + #define RF_R31 31 + +- + // value domain of pAd->RfIcType +-#define RFIC_2820 1 // 2.4G 2T3R +-#define RFIC_2850 2 // 2.4G/5G 2T3R +-#define RFIC_2720 3 // 2.4G 1T2R +-#define RFIC_2750 4 // 2.4G/5G 1T2R +-#define RFIC_3020 5 // 2.4G 1T1R +-#define RFIC_2020 6 // 2.4G B/G +-#define RFIC_3021 7 // 2.4G 1T2R +-#define RFIC_3022 8 // 2.4G 2T2R +-#define RFIC_3052 9 // 2.4G/5G 2T2R ++#define RFIC_2820 1 // 2.4G 2T3R ++#define RFIC_2850 2 // 2.4G/5G 2T3R ++#define RFIC_2720 3 // 2.4G 1T2R ++#define RFIC_2750 4 // 2.4G/5G 1T2R ++#define RFIC_3020 5 // 2.4G 1T1R ++#define RFIC_2020 6 // 2.4G B/G ++#define RFIC_3021 7 // 2.4G 1T2R ++#define RFIC_3022 8 // 2.4G 2T2R ++#define RFIC_3052 9 // 2.4G/5G 2T2R + + /* + BBP sections + */ +-#define BBP_R0 0 // version +-#define BBP_R1 1 // TSSI +-#define BBP_R2 2 // TX configure ++#define BBP_R0 0 // version ++#define BBP_R1 1 // TSSI ++#define BBP_R2 2 // TX configure + #define BBP_R3 3 + #define BBP_R4 4 + #define BBP_R5 5 + #define BBP_R6 6 +-#define BBP_R14 14 // RX configure ++#define BBP_R14 14 // RX configure + #define BBP_R16 16 +-#define BBP_R17 17 // RX sensibility ++#define BBP_R17 17 // RX sensibility + #define BBP_R18 18 + #define BBP_R21 21 + #define BBP_R22 22 +@@ -108,12 +106,12 @@ + #define BBP_R26 26 + #define BBP_R27 27 + #define BBP_R31 31 +-#define BBP_R49 49 //TSSI ++#define BBP_R49 49 //TSSI + #define BBP_R50 50 + #define BBP_R51 51 + #define BBP_R52 52 + #define BBP_R55 55 +-#define BBP_R62 62 // Rx SQ0 Threshold HIGH ++#define BBP_R62 62 // Rx SQ0 Threshold HIGH + #define BBP_R63 63 + #define BBP_R64 64 + #define BBP_R65 65 +@@ -121,7 +119,7 @@ + #define BBP_R67 67 + #define BBP_R68 68 + #define BBP_R69 69 +-#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold ++#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold + #define BBP_R73 73 + #define BBP_R75 75 + #define BBP_R77 77 +@@ -135,7 +133,7 @@ + #define BBP_R86 86 + #define BBP_R91 91 + #define BBP_R92 92 +-#define BBP_R94 94 // Tx Gain Control ++#define BBP_R94 94 // Tx Gain Control + #define BBP_R103 103 + #define BBP_R105 105 + #define BBP_R106 106 +@@ -151,16 +149,16 @@ + #define BBP_R122 122 + #define BBP_R123 123 + #ifdef RT30xx +-#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control ++#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control + #endif // RT30xx // + +-#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db ++#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db + + // + // BBP & RF are using indirect access. Before write any value into it. + // We have to make sure there is no outstanding command pending via checking busy bit. + // +-#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register ++#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register + + //#define PHY_TR_SWITCH_TIME 5 // usec + +@@ -416,7 +414,6 @@ + } \ + }while(0) + +- + /* + This marco used for the BBP write operation which didn't need via MCU. + */ +@@ -539,7 +536,6 @@ + RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ + }while(0) + +- + #define RTMP_ASIC_MMPS_ENABLE(_pAd) \ + do{ \ + UINT32 _macData; \ +diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h +index 9ce9154..e3d55b4 100644 +--- a/drivers/staging/rt2860/chlist.h ++++ b/drivers/staging/rt2860/chlist.h +@@ -41,7 +41,6 @@ + #include "rtmp_type.h" + #include "rtmp_def.h" + +- + #define ODOR 0 + #define IDOR 1 + #define BOTH 2 +@@ -53,28 +52,27 @@ + typedef struct _CH_DESP { + UCHAR FirstChannel; + UCHAR NumOfCh; +- CHAR MaxTxPwr; // dBm +- UCHAR Geography; // 0:out door, 1:in door, 2:both +- BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes. ++ CHAR MaxTxPwr; // dBm ++ UCHAR Geography; // 0:out door, 1:in door, 2:both ++ BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes. + } CH_DESP, *PCH_DESP; + + typedef struct _CH_REGION { + UCHAR CountReg[3]; +- UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 ++ UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 + CH_DESP ChDesp[10]; + } CH_REGION, *PCH_REGION; + + extern CH_REGION ChRegion[]; + +-typedef struct _CH_FREQ_MAP_{ +- UINT16 channel; +- UINT16 freqKHz; +-}CH_FREQ_MAP; ++typedef struct _CH_FREQ_MAP_ { ++ UINT16 channel; ++ UINT16 freqKHz; ++} CH_FREQ_MAP; + + extern CH_FREQ_MAP CH_HZ_ID_MAP[]; + extern int CH_HZ_ID_MAP_NUM; + +- + #define MAP_CHANNEL_ID_TO_KHZ(_ch, _khz) \ + do{ \ + int _chIdx; \ +@@ -105,24 +103,15 @@ extern int CH_HZ_ID_MAP_NUM; + (_ch) = 1; \ + }while(0) + ++VOID BuildChannelListEx(IN PRTMP_ADAPTER pAd); + +-VOID BuildChannelListEx( +- IN PRTMP_ADAPTER pAd); ++VOID BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pBuf, OUT PULONG pBufLen); + +-VOID BuildBeaconChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen); ++VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd); + +-VOID N_ChannelCheck( +- IN PRTMP_ADAPTER pAd); ++VOID N_SetCenCh(IN PRTMP_ADAPTER pAd); + +-VOID N_SetCenCh( +- IN PRTMP_ADAPTER pAd); +- +-UINT8 GetCuntryMaxTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 channel); ++UINT8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 channel); + + #endif // __CHLIST_H__ +- +diff --git a/drivers/staging/rt2860/common/action.h b/drivers/staging/rt2860/common/action.h +index cfc2a5f..2484c2e 100644 +--- a/drivers/staging/rt2860/common/action.h ++++ b/drivers/staging/rt2860/common/action.h +@@ -39,23 +39,18 @@ + #ifndef __ACTION_H__ + #define __ACTION_H__ + +-typedef struct PACKED __HT_INFO_OCTET +-{ +- UCHAR Request:1; +- UCHAR Forty_MHz_Intolerant:1; +- UCHAR STA_Channel_Width:1; +- UCHAR Reserved:5; ++typedef struct PACKED __HT_INFO_OCTET { ++ UCHAR Request:1; ++ UCHAR Forty_MHz_Intolerant:1; ++ UCHAR STA_Channel_Width:1; ++ UCHAR Reserved:5; + } HT_INFORMATION_OCTET; + +- +-typedef struct PACKED __FRAME_HT_INFO +-{ +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- HT_INFORMATION_OCTET HT_Info; +-} FRAME_HT_INFO, *PFRAME_HT_INFO; ++typedef struct PACKED __FRAME_HT_INFO { ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ HT_INFORMATION_OCTET HT_Info; ++} FRAME_HT_INFO, *PFRAME_HT_INFO; + + #endif /* __ACTION_H__ */ +- +- +diff --git a/drivers/staging/rt2860/crypt_hmac.h b/drivers/staging/rt2860/crypt_hmac.h +index 717b8a2..6211640 100644 +--- a/drivers/staging/rt2860/crypt_hmac.h ++++ b/drivers/staging/rt2860/crypt_hmac.h +@@ -48,24 +48,18 @@ + + #ifdef SHA1_SUPPORT + #define HMAC_SHA1_SUPPORT +-VOID HMAC_SHA1 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); ++VOID HMAC_SHA1(IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen); + #endif /* SHA1_SUPPORT */ + + #ifdef MD5_SUPPORT + #define HMAC_MD5_SUPPORT +-VOID HMAC_MD5 ( +- IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 MAC[], +- IN UINT MACLen); ++VOID HMAC_MD5(IN const UINT8 Key[], ++ IN UINT KeyLen, ++ IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen); + #endif /* MD5_SUPPORT */ + + #endif /* __CRYPT_HMAC_H__ */ +diff --git a/drivers/staging/rt2860/crypt_md5.h b/drivers/staging/rt2860/crypt_md5.h +index 66ae424..ecc67e4 100644 +--- a/drivers/staging/rt2860/crypt_md5.h ++++ b/drivers/staging/rt2860/crypt_md5.h +@@ -51,30 +51,22 @@ + #define MD5_SUPPORT + + #ifdef MD5_SUPPORT +-#define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ ++#define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ ++#define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ + typedef struct { +- UINT32 HashValue[4]; +- UINT64 MessageLen; +- UINT8 Block[MD5_BLOCK_SIZE]; +- UINT BlockLen; ++ UINT32 HashValue[4]; ++ UINT64 MessageLen; ++ UINT8 Block[MD5_BLOCK_SIZE]; ++ UINT BlockLen; + } MD5_CTX_STRUC, *PMD5_CTX_STRUC; + +-VOID MD5_Init ( +- IN MD5_CTX_STRUC *pMD5_CTX); +-VOID MD5_Hash ( +- IN MD5_CTX_STRUC *pMD5_CTX); +-VOID MD5_Append ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID MD5_End ( +- IN MD5_CTX_STRUC *pMD5_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_MD5 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); ++VOID MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX); ++VOID MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX); ++VOID MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++ IN const UINT8 Message[], IN UINT MessageLen); ++VOID MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, OUT UINT8 DigestMessage[]); ++VOID RT_MD5(IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 DigestMessage[]); + #endif /* MD5_SUPPORT */ + + #endif /* __CRYPT_MD5_H__ */ +diff --git a/drivers/staging/rt2860/crypt_sha2.h b/drivers/staging/rt2860/crypt_sha2.h +index 5b95965..33d999d 100644 +--- a/drivers/staging/rt2860/crypt_sha2.h ++++ b/drivers/staging/rt2860/crypt_sha2.h +@@ -52,30 +52,22 @@ + #define SHA1_SUPPORT + + #ifdef SHA1_SUPPORT +-#define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ +-#define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ ++#define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ ++#define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ + typedef struct _SHA1_CTX_STRUC { +- UINT32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ +- UINT64 MessageLen; /* total size */ +- UINT8 Block[SHA1_BLOCK_SIZE]; +- UINT BlockLen; ++ UINT32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ ++ UINT64 MessageLen; /* total size */ ++ UINT8 Block[SHA1_BLOCK_SIZE]; ++ UINT BlockLen; + } SHA1_CTX_STRUC, *PSHA1_CTX_STRUC; + +-VOID RT_SHA1_Init ( +- IN SHA1_CTX_STRUC *pSHA_CTX); +-VOID SHA1_Hash ( +- IN SHA1_CTX_STRUC *pSHA_CTX); +-VOID SHA1_Append ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- IN const UINT8 Message[], +- IN UINT MessageLen); +-VOID SHA1_End ( +- IN SHA1_CTX_STRUC *pSHA_CTX, +- OUT UINT8 DigestMessage[]); +-VOID RT_SHA1 ( +- IN const UINT8 Message[], +- IN UINT MessageLen, +- OUT UINT8 DigestMessage[]); ++VOID RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX); ++VOID SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX); ++VOID SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++ IN const UINT8 Message[], IN UINT MessageLen); ++VOID SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, OUT UINT8 DigestMessage[]); ++VOID RT_SHA1(IN const UINT8 Message[], ++ IN UINT MessageLen, OUT UINT8 DigestMessage[]); + #endif /* SHA1_SUPPORT */ + + #endif /* __CRYPT_SHA2_H__ */ +diff --git a/drivers/staging/rt2860/dfs.h b/drivers/staging/rt2860/dfs.h +index 9ab445c..9e5e74d 100644 +--- a/drivers/staging/rt2860/dfs.h ++++ b/drivers/staging/rt2860/dfs.h +@@ -36,6 +36,4 @@ + Fonchi 03-12-2007 created + */ + +-BOOLEAN RadarChannelCheck( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ch); ++BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, IN UCHAR Ch); +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +index 9979fef..56aa583 100644 +--- a/drivers/staging/rt2860/eeprom.h ++++ b/drivers/staging/rt2860/eeprom.h +@@ -24,7 +24,6 @@ + * * + ************************************************************************* + +- + Module Name: + eeprom.h + +@@ -38,41 +37,31 @@ + #ifndef __EEPROM_H__ + #define __EEPROM_H__ + +- +- + #ifdef RTMP_PCI_SUPPORT + /************************************************************************* + * Public function declarations for prom-based chipset + ************************************************************************/ +-int rtmp_ee_prom_read16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT USHORT *pValue); ++int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT USHORT * pValue); + #endif // RTMP_PCI_SUPPORT // + #ifdef RTMP_USB_SUPPORT + /************************************************************************* + * Public function declarations for usb-based prom chipset + ************************************************************************/ +-NTSTATUS RTUSBReadEEPROM16( +- IN PRTMP_ADAPTER pAd, +- IN USHORT offset, +- OUT PUSHORT pData); ++NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++ IN USHORT offset, OUT PUSHORT pData); + #endif // RTMP_USB_SUPPORT // + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +-int rtmp_ee_efuse_read16( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- OUT USHORT *pValue); ++int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, ++ IN USHORT Offset, OUT USHORT * pValue); + #endif // RTMP_EFUSE_SUPPORT // + #endif // RT30xx // + + /************************************************************************* + * Public function declarations for prom operation callback functions setting + ************************************************************************/ +-INT RtmpChipOpsEepromHook( +- IN RTMP_ADAPTER *pAd, +- IN INT infType); ++INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType); + + #endif // __EEPROM_H__ // +diff --git a/drivers/staging/rt2860/iface/rtmp_pci.h b/drivers/staging/rt2860/iface/rtmp_pci.h +index 7d7efbd..4f42158 100644 +--- a/drivers/staging/rt2860/iface/rtmp_pci.h ++++ b/drivers/staging/rt2860/iface/rtmp_pci.h +@@ -31,7 +31,6 @@ + #define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ + ((POS_COOKIE)handle)->pci_dev = dev_p; + +- + #ifdef LINUX + // set driver data + #define RT28XX_DRVDATA_SET(_a) pci_set_drvdata(_a, net_dev); +@@ -64,7 +63,6 @@ + pci_resource_len(dev_p, 0)); } \ + if (net_dev->irq) pci_release_regions(dev_p); } + +- + #define PCI_REG_READ_WORD(pci_dev, offset, Configuration) \ + if (pci_read_config_word(pci_dev, offset, ®16) == 0) \ + Configuration = le2cpu16(reg16); \ +@@ -77,5 +75,4 @@ + + #endif // LINUX // + +- + #endif // __RTMP_PCI_H__ // +diff --git a/drivers/staging/rt2860/iface/rtmp_usb.h b/drivers/staging/rt2860/iface/rtmp_usb.h +index 2e9165e..26591b0 100644 +--- a/drivers/staging/rt2860/iface/rtmp_usb.h ++++ b/drivers/staging/rt2860/iface/rtmp_usb.h +@@ -28,28 +28,24 @@ + #ifndef __RTMP_USB_H__ + #define __RTMP_USB_H__ + +- + #include "../rtusb_io.h" + +- + #ifdef LINUX + #include + +-typedef struct usb_device * PUSB_DEV; ++typedef struct usb_device *PUSB_DEV; + typedef struct urb *purbb_t; + typedef struct usb_ctrlrequest devctrlrequest; + #endif // LINUX // + + extern UCHAR EpToQueue[6]; + +- + #define RXBULKAGGRE_ZISE 12 + #define MAX_TXBULK_LIMIT (LOCAL_TXBUF_SIZE*(BULKAGGRE_ZISE-1)) + #define MAX_TXBULK_SIZE (LOCAL_TXBUF_SIZE*BULKAGGRE_ZISE) + #define MAX_RXBULK_SIZE (LOCAL_TXBUF_SIZE*RXBULKAGGRE_ZISE) + #define MAX_MLME_HANDLER_MEMORY 20 + +- + // Flags for Bulkflags control for bulk out data + // + #define fRTUSB_BULK_OUT_DATA_NULL 0x00000001 +@@ -69,7 +65,6 @@ extern UCHAR EpToQueue[6]; + + // TODO:move to ./ate/include/iface/ate_usb.h + +- + #define FREE_HTTX_RING(_pCookie, _pipeId, _txContext) \ + { \ + if ((_txContext)->ENextBulkOutPosition == (_txContext)->CurWritePosition) \ +@@ -79,8 +74,6 @@ extern UCHAR EpToQueue[6]; + /*NdisInterlockedDecrement(&(_p)->TxCount); */\ + } + +- +- + /****************************************************************************** + + USB Bulk operation related definitions +@@ -100,7 +93,7 @@ extern UCHAR EpToQueue[6]; + // unlink urb + #define RTUSB_UNLINK_URB(pUrb) usb_kill_urb(pUrb) + +-extern void dump_urb(struct urb* purb); ++extern void dump_urb(struct urb *purb); + + #define InterlockedIncrement atomic_inc + #define NdisInterlockedIncrement atomic_inc +@@ -110,12 +103,8 @@ extern void dump_urb(struct urb* purb); + + #endif // LINUX // + +- +- + #define NT_SUCCESS(status) (((status) >=0) ? (TRUE):(FALSE)) + +- +- + #define USBD_TRANSFER_DIRECTION_OUT 0 + #define USBD_TRANSFER_DIRECTION_IN 0 + #define USBD_SHORT_TRANSFER_OK 0 +@@ -131,7 +120,6 @@ extern void dump_urb(struct urb* purb); + #define CONTROL_TIMEOUT_JIFFIES ( (100 * OS_HZ) / 1000) + #define UNLINK_TIMEOUT_MS 3 + +- + VOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); + VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); + VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +@@ -139,7 +127,6 @@ VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); + VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); + VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); + +- + #ifdef KTHREAD_SUPPORT + #define RTUSBMlmeUp(pAd) \ + do{ \ +@@ -196,5 +183,4 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); + #define RTMP_IRQ_REQUEST(net_dev) do{}while(0) + #define RTMP_IRQ_RELEASE(net_dev) do{}while(0) + +- + #endif // __RTMP_USB_H__ // +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index f609ea5..cb3cc9b 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -41,18 +41,16 @@ + + #include "rtmp_dot11.h" + +- +- + // maximum supported capability information - + // ESS, IBSS, Privacy, Short Preamble, Spectrum mgmt, Short Slot + #define SUPPORTED_CAPABILITY_INFO 0x0533 + + #define END_OF_ARGS -1 + #define LFSR_MASK 0x80000057 +-#define MLME_TASK_EXEC_INTV 100/*200*/ // ++#define MLME_TASK_EXEC_INTV 100/*200*/ // + #define LEAD_TIME 5 +-#define MLME_TASK_EXEC_MULTIPLE 10 /*5*/ // MLME_TASK_EXEC_MULTIPLE * MLME_TASK_EXEC_INTV = 1 sec +-#define REORDER_EXEC_INTV 100 // 0.1 sec ++#define MLME_TASK_EXEC_MULTIPLE 10 /*5*/ // MLME_TASK_EXEC_MULTIPLE * MLME_TASK_EXEC_INTV = 1 sec ++#define REORDER_EXEC_INTV 100 // 0.1 sec + + // The definition of Radar detection duration region + #define CE 0 +@@ -62,34 +60,32 @@ + #define JAP_W56 4 + #define MAX_RD_REGION 5 + +-#define BEACON_LOST_TIME 4 * OS_HZ // 2048 msec = 2 sec +- +-#define DLS_TIMEOUT 1200 // unit: msec +-#define AUTH_TIMEOUT 300 // unit: msec +-#define ASSOC_TIMEOUT 300 // unit: msec +-#define JOIN_TIMEOUT 2000 // unit: msec +-#define SHORT_CHANNEL_TIME 90 // unit: msec +-#define MIN_CHANNEL_TIME 110 // unit: msec, for dual band scan +-#define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan +-#define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time +-#define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1 +-#define LINK_DOWN_TIMEOUT 20000 // unit: msec +-#define AUTO_WAKEUP_TIMEOUT 70 //unit: msec ++#define BEACON_LOST_TIME 4 * OS_HZ // 2048 msec = 2 sec + ++#define DLS_TIMEOUT 1200 // unit: msec ++#define AUTH_TIMEOUT 300 // unit: msec ++#define ASSOC_TIMEOUT 300 // unit: msec ++#define JOIN_TIMEOUT 2000 // unit: msec ++#define SHORT_CHANNEL_TIME 90 // unit: msec ++#define MIN_CHANNEL_TIME 110 // unit: msec, for dual band scan ++#define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan ++#define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time ++#define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1 ++#define LINK_DOWN_TIMEOUT 20000 // unit: msec ++#define AUTO_WAKEUP_TIMEOUT 70 //unit: msec + +-#define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1 +- ++#define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1 + + // Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720). + // SHould not refer to this constant anymore + //#define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm +-#define RSSI_FOR_MID_TX_POWER -55 // -55 db is considered mid-distance +-#define RSSI_FOR_LOW_TX_POWER -45 // -45 db is considered very short distance and +- // eligible to use a lower TX power ++#define RSSI_FOR_MID_TX_POWER -55 // -55 db is considered mid-distance ++#define RSSI_FOR_LOW_TX_POWER -45 // -45 db is considered very short distance and ++ // eligible to use a lower TX power + #define RSSI_FOR_LOWEST_TX_POWER -30 + //#define MID_TX_POWER_DELTA 0 // 0 db from full TX power upon mid-distance to AP +-#define LOW_TX_POWER_DELTA 6 // -3 db from full TX power upon very short distance. 1 grade is 0.5 db +-#define LOWEST_TX_POWER_DELTA 16 // -8 db from full TX power upon shortest distance. 1 grade is 0.5 db ++#define LOW_TX_POWER_DELTA 6 // -3 db from full TX power upon very short distance. 1 grade is 0.5 db ++#define LOWEST_TX_POWER_DELTA 16 // -8 db from full TX power upon shortest distance. 1 grade is 0.5 db + + #define RSSI_TRIGGERED_UPON_BELOW_THRESHOLD 0 + #define RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD 1 +@@ -99,7 +95,7 @@ + // Channel Quality Indication + #define CQI_IS_GOOD(cqi) ((cqi) >= 50) + //#define CQI_IS_FAIR(cqi) (((cqi) >= 20) && ((cqi) < 50)) +-#define CQI_IS_POOR(cqi) (cqi < 50) //(((cqi) >= 5) && ((cqi) < 20)) ++#define CQI_IS_POOR(cqi) (cqi < 50) //(((cqi) >= 5) && ((cqi) < 20)) + #define CQI_IS_BAD(cqi) (cqi < 5) + #define CQI_IS_DEAD(cqi) (cqi == 0) + +@@ -110,15 +106,15 @@ + + #define BSS_NOT_FOUND 0xFFFFFFFF + +-#define MAX_LEN_OF_MLME_QUEUE 40 //10 ++#define MAX_LEN_OF_MLME_QUEUE 40 //10 + +-#define SCAN_PASSIVE 18 // scan with no probe request, only wait beacon and probe response +-#define SCAN_ACTIVE 19 // scan with probe request, and wait beacon and probe response +-#define SCAN_CISCO_PASSIVE 20 // Single channel passive scan +-#define SCAN_CISCO_ACTIVE 21 // Single channel active scan +-#define SCAN_CISCO_NOISE 22 // Single channel passive scan for noise histogram collection +-#define SCAN_CISCO_CHANNEL_LOAD 23 // Single channel passive scan for channel load collection +-#define FAST_SCAN_ACTIVE 24 // scan with probe request, and wait beacon and probe response ++#define SCAN_PASSIVE 18 // scan with no probe request, only wait beacon and probe response ++#define SCAN_ACTIVE 19 // scan with probe request, and wait beacon and probe response ++#define SCAN_CISCO_PASSIVE 20 // Single channel passive scan ++#define SCAN_CISCO_ACTIVE 21 // Single channel active scan ++#define SCAN_CISCO_NOISE 22 // Single channel passive scan for noise histogram collection ++#define SCAN_CISCO_CHANNEL_LOAD 23 // Single channel passive scan for channel load collection ++#define FAST_SCAN_ACTIVE 24 // scan with probe request, and wait beacon and probe response + + #define MAC_ADDR_IS_GROUP(Addr) (((Addr[0]) & 0x01)) + #define MAC_ADDR_HASH(Addr) (Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5]) +@@ -141,21 +137,21 @@ + #define CAP_IS_SHORT_PREAMBLE_ON(x) (((x) & 0x0020) != 0) + #define CAP_IS_PBCC_ON(x) (((x) & 0x0040) != 0) + #define CAP_IS_AGILITY_ON(x) (((x) & 0x0080) != 0) +-#define CAP_IS_SPECTRUM_MGMT(x) (((x) & 0x0100) != 0) // 802.11e d9 +-#define CAP_IS_QOS(x) (((x) & 0x0200) != 0) // 802.11e d9 ++#define CAP_IS_SPECTRUM_MGMT(x) (((x) & 0x0100) != 0) // 802.11e d9 ++#define CAP_IS_QOS(x) (((x) & 0x0200) != 0) // 802.11e d9 + #define CAP_IS_SHORT_SLOT(x) (((x) & 0x0400) != 0) +-#define CAP_IS_APSD(x) (((x) & 0x0800) != 0) // 802.11e d9 +-#define CAP_IS_IMMED_BA(x) (((x) & 0x1000) != 0) // 802.11e d9 ++#define CAP_IS_APSD(x) (((x) & 0x0800) != 0) // 802.11e d9 ++#define CAP_IS_IMMED_BA(x) (((x) & 0x1000) != 0) // 802.11e d9 + #define CAP_IS_DSSS_OFDM(x) (((x) & 0x2000) != 0) +-#define CAP_IS_DELAY_BA(x) (((x) & 0x4000) != 0) // 802.11e d9 ++#define CAP_IS_DELAY_BA(x) (((x) & 0x4000) != 0) // 802.11e d9 + + #define CAP_GENERATE(ess,ibss,priv,s_pre,s_slot,spectrum) (((ess) ? 0x0001 : 0x0000) | ((ibss) ? 0x0002 : 0x0000) | ((priv) ? 0x0010 : 0x0000) | ((s_pre) ? 0x0020 : 0x0000) | ((s_slot) ? 0x0400 : 0x0000) | ((spectrum) ? 0x0100 : 0x0000)) + +-#define ERP_IS_NON_ERP_PRESENT(x) (((x) & 0x01) != 0) // 802.11g +-#define ERP_IS_USE_PROTECTION(x) (((x) & 0x02) != 0) // 802.11g +-#define ERP_IS_USE_BARKER_PREAMBLE(x) (((x) & 0x04) != 0) // 802.11g ++#define ERP_IS_NON_ERP_PRESENT(x) (((x) & 0x01) != 0) // 802.11g ++#define ERP_IS_USE_PROTECTION(x) (((x) & 0x02) != 0) // 802.11g ++#define ERP_IS_USE_BARKER_PREAMBLE(x) (((x) & 0x04) != 0) // 802.11g + +-#define DRS_TX_QUALITY_WORST_BOUND 8// 3 // just test by gary ++#define DRS_TX_QUALITY_WORST_BOUND 8 // 3 // just test by gary + #define DRS_PENALTY 8 + + #define BA_NOTUSE 2 +@@ -192,500 +188,485 @@ if (((__pEntry)) != NULL) \ + // + // HT Capability INFO field in HT Cap IE . + typedef struct PACKED { +- USHORT AdvCoding:1; +- USHORT ChannelWidth:1; +- USHORT MimoPs:2;//momi power safe +- USHORT GF:1; //green field +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; +- USHORT DelayedBA:1; //rt2860c not support +- USHORT AMsduSize:1; // only support as zero +- USHORT CCKmodein40:1; +- USHORT PSMP:1; +- USHORT Forty_Mhz_Intolerant:1; +- USHORT LSIGTxopProSup:1; ++ USHORT AdvCoding:1; ++ USHORT ChannelWidth:1; ++ USHORT MimoPs:2; //momi power safe ++ USHORT GF:1; //green field ++ USHORT ShortGIfor20:1; ++ USHORT ShortGIfor40:1; //for40MHz ++ USHORT TxSTBC:1; ++ USHORT RxSTBC:2; ++ USHORT DelayedBA:1; //rt2860c not support ++ USHORT AMsduSize:1; // only support as zero ++ USHORT CCKmodein40:1; ++ USHORT PSMP:1; ++ USHORT Forty_Mhz_Intolerant:1; ++ USHORT LSIGTxopProSup:1; + } HT_CAP_INFO, *PHT_CAP_INFO; + + // HT Capability INFO field in HT Cap IE . + typedef struct PACKED { +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR rsv:3;//momi power safe ++ UCHAR MaxRAmpduFactor:2; ++ UCHAR MpduDensity:3; ++ UCHAR rsv:3; //momi power safe + } HT_CAP_PARM, *PHT_CAP_PARM; + + // HT Capability INFO field in HT Cap IE . + typedef struct PACKED { +- UCHAR MCSSet[10]; +- UCHAR SupRate[2]; // unit : 1Mbps +- UCHAR TxMCSSetDefined:1; +- UCHAR TxRxNotEqual:1; +- UCHAR TxStream:2; +- UCHAR MpduDensity:1; +- UCHAR rsv:3; +- UCHAR rsv3[3]; ++ UCHAR MCSSet[10]; ++ UCHAR SupRate[2]; // unit : 1Mbps ++ UCHAR TxMCSSetDefined:1; ++ UCHAR TxRxNotEqual:1; ++ UCHAR TxStream:2; ++ UCHAR MpduDensity:1; ++ UCHAR rsv:3; ++ UCHAR rsv3[3]; + } HT_MCS_SET, *PHT_MCS_SET; + + // HT Capability INFO field in HT Cap IE . + typedef struct PACKED { +- USHORT Pco:1; +- USHORT TranTime:2; +- USHORT rsv:5;//momi power safe +- USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. +- USHORT PlusHTC:1; //+HTC control field support +- USHORT RDGSupport:1; //reverse Direction Grant support +- USHORT rsv2:4; ++ USHORT Pco:1; ++ USHORT TranTime:2; ++ USHORT rsv:5; //momi power safe ++ USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. ++ USHORT PlusHTC:1; //+HTC control field support ++ USHORT RDGSupport:1; //reverse Direction Grant support ++ USHORT rsv2:4; + } EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO; + + // HT Beamforming field in HT Cap IE . +-typedef struct PACKED _HT_BF_CAP{ +- ULONG TxBFRecCapable:1; +- ULONG RxSoundCapable:1; +- ULONG TxSoundCapable:1; +- ULONG RxNDPCapable:1; +- ULONG TxNDPCapable:1; +- ULONG ImpTxBFCapable:1; +- ULONG Calibration:2; +- ULONG ExpCSICapable:1; +- ULONG ExpNoComSteerCapable:1; +- ULONG ExpComSteerCapable:1; +- ULONG ExpCSIFbk:2; +- ULONG ExpNoComBF:2; +- ULONG ExpComBF:2; +- ULONG MinGrouping:2; +- ULONG CSIBFAntSup:2; +- ULONG NoComSteerBFAntSup:2; +- ULONG ComSteerBFAntSup:2; +- ULONG CSIRowBFSup:2; +- ULONG ChanEstimation:2; +- ULONG rsv:3; ++typedef struct PACKED _HT_BF_CAP { ++ ULONG TxBFRecCapable:1; ++ ULONG RxSoundCapable:1; ++ ULONG TxSoundCapable:1; ++ ULONG RxNDPCapable:1; ++ ULONG TxNDPCapable:1; ++ ULONG ImpTxBFCapable:1; ++ ULONG Calibration:2; ++ ULONG ExpCSICapable:1; ++ ULONG ExpNoComSteerCapable:1; ++ ULONG ExpComSteerCapable:1; ++ ULONG ExpCSIFbk:2; ++ ULONG ExpNoComBF:2; ++ ULONG ExpComBF:2; ++ ULONG MinGrouping:2; ++ ULONG CSIBFAntSup:2; ++ ULONG NoComSteerBFAntSup:2; ++ ULONG ComSteerBFAntSup:2; ++ ULONG CSIRowBFSup:2; ++ ULONG ChanEstimation:2; ++ ULONG rsv:3; + } HT_BF_CAP, *PHT_BF_CAP; + + // HT antenna selection field in HT Cap IE . +-typedef struct PACKED _HT_AS_CAP{ +- UCHAR AntSelect:1; +- UCHAR ExpCSIFbkTxASEL:1; +- UCHAR AntIndFbkTxASEL:1; +- UCHAR ExpCSIFbk:1; +- UCHAR AntIndFbk:1; +- UCHAR RxASel:1; +- UCHAR TxSoundPPDU:1; +- UCHAR rsv:1; ++typedef struct PACKED _HT_AS_CAP { ++ UCHAR AntSelect:1; ++ UCHAR ExpCSIFbkTxASEL:1; ++ UCHAR AntIndFbkTxASEL:1; ++ UCHAR ExpCSIFbk:1; ++ UCHAR AntIndFbk:1; ++ UCHAR RxASel:1; ++ UCHAR TxSoundPPDU:1; ++ UCHAR rsv:1; + } HT_AS_CAP, *PHT_AS_CAP; + + // Draft 1.0 set IE length 26, but is extensible.. + #define SIZE_HT_CAP_IE 26 + // The structure for HT Capability IE. +-typedef struct PACKED _HT_CAPABILITY_IE{ +- HT_CAP_INFO HtCapInfo; +- HT_CAP_PARM HtCapParm; +-// HT_MCS_SET HtMCSSet; +- UCHAR MCSSet[16]; +- EXT_HT_CAP_INFO ExtHtCapInfo; +- HT_BF_CAP TxBFCap; // beamforming cap. rt2860c not support beamforming. +- HT_AS_CAP ASCap; //antenna selection. ++typedef struct PACKED _HT_CAPABILITY_IE { ++ HT_CAP_INFO HtCapInfo; ++ HT_CAP_PARM HtCapParm; ++// HT_MCS_SET HtMCSSet; ++ UCHAR MCSSet[16]; ++ EXT_HT_CAP_INFO ExtHtCapInfo; ++ HT_BF_CAP TxBFCap; // beamforming cap. rt2860c not support beamforming. ++ HT_AS_CAP ASCap; //antenna selection. + } HT_CAPABILITY_IE, *PHT_CAPABILITY_IE; + +- + // 802.11n draft3 related structure definitions. + // 7.3.2.60 + #define dot11OBSSScanPassiveDwell 20 // in TU. min amount of time that the STA continously scans each channel when performing an active OBSS scan. + #define dot11OBSSScanActiveDwell 10 // in TU.min amount of time that the STA continously scans each channel when performing an passive OBSS scan. +-#define dot11BSSWidthTriggerScanInterval 300 // in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. ++#define dot11BSSWidthTriggerScanInterval 300 // in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. + #define dot11OBSSScanPassiveTotalPerChannel 200 // in TU. min total amount of time that the STA scans each channel when performing a passive OBSS scan. + #define dot11OBSSScanActiveTotalPerChannel 20 //in TU. min total amount of time that the STA scans each channel when performing a active OBSS scan + #define dot11BSSWidthChannelTransactionDelayFactor 5 // min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maximum +- // interval between overlapping BSS scan operations. ++ // interval between overlapping BSS scan operations. + #define dot11BSSScanActivityThreshold 25 // in %%, max total time that a STA may be active on the medium during a period of +- // (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without +- // being obligated to perform OBSS Scan operations. default is 25(== 0.25%) +- +-typedef struct PACKED _OVERLAP_BSS_SCAN_IE{ +- USHORT ScanPassiveDwell; +- USHORT ScanActiveDwell; +- USHORT TriggerScanInt; // Trigger scan interval +- USHORT PassiveTalPerChannel; // passive total per channel +- USHORT ActiveTalPerChannel; // active total per channel +- USHORT DelayFactor; // BSS width channel transition delay factor +- USHORT ScanActThre; // Scan Activity threshold +-}OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; +- ++ // (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without ++ // being obligated to perform OBSS Scan operations. default is 25(== 0.25%) ++ ++typedef struct PACKED _OVERLAP_BSS_SCAN_IE { ++ USHORT ScanPassiveDwell; ++ USHORT ScanActiveDwell; ++ USHORT TriggerScanInt; // Trigger scan interval ++ USHORT PassiveTalPerChannel; // passive total per channel ++ USHORT ActiveTalPerChannel; // active total per channel ++ USHORT DelayFactor; // BSS width channel transition delay factor ++ USHORT ScanActThre; // Scan Activity threshold ++} OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; + + // 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST +-typedef union PACKED _BSS_2040_COEXIST_IE{ +- struct PACKED { +- UCHAR InfoReq:1; +- UCHAR Intolerant40:1; // Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. +- UCHAR BSS20WidthReq:1; // Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. +- UCHAR rsv:5; +- } field; +- UCHAR word; ++typedef union PACKED _BSS_2040_COEXIST_IE { ++ struct PACKED { ++ UCHAR InfoReq:1; ++ UCHAR Intolerant40:1; // Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. ++ UCHAR BSS20WidthReq:1; // Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. ++ UCHAR rsv:5; ++ } field; ++ UCHAR word; + } BSS_2040_COEXIST_IE, *PBSS_2040_COEXIST_IE; + +- +-typedef struct _TRIGGER_EVENTA{ +- BOOLEAN bValid; +- UCHAR BSSID[6]; +- UCHAR RegClass; // Regulatory Class +- USHORT Channel; +- ULONG CDCounter; // Maintain a seperate count down counter for each Event A. ++typedef struct _TRIGGER_EVENTA { ++ BOOLEAN bValid; ++ UCHAR BSSID[6]; ++ UCHAR RegClass; // Regulatory Class ++ USHORT Channel; ++ ULONG CDCounter; // Maintain a seperate count down counter for each Event A. + } TRIGGER_EVENTA, *PTRIGGER_EVENTA; + + // 20/40 trigger event table + // If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. + #define MAX_TRIGGER_EVENT 64 +-typedef struct _TRIGGER_EVENT_TAB{ +- UCHAR EventANo; +- TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; +- ULONG EventBCountDown; // Count down counter for Event B. ++typedef struct _TRIGGER_EVENT_TAB { ++ UCHAR EventANo; ++ TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; ++ ULONG EventBCountDown; // Count down counter for Event B. + } TRIGGER_EVENT_TAB, *PTRIGGER_EVENT_TAB; + + // 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). +-// This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 +-typedef struct PACKED _EXT_CAP_INFO_ELEMENT{ +- UCHAR BssCoexistMgmtSupport:1; +- UCHAR rsv:1; +- UCHAR ExtendChannelSwitch:1; +- UCHAR rsv2:5; +-}EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; +- ++// This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 ++typedef struct PACKED _EXT_CAP_INFO_ELEMENT { ++ UCHAR BssCoexistMgmtSupport:1; ++ UCHAR rsv:1; ++ UCHAR ExtendChannelSwitch:1; ++ UCHAR rsv2:5; ++} EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; + + // 802.11n 7.3.2.61 +-typedef struct PACKED _BSS_2040_COEXIST_ELEMENT{ +- UCHAR ElementID; // ID = IE_2040_BSS_COEXIST = 72 +- UCHAR Len; +- BSS_2040_COEXIST_IE BssCoexistIe; +-}BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; +- ++typedef struct PACKED _BSS_2040_COEXIST_ELEMENT { ++ UCHAR ElementID; // ID = IE_2040_BSS_COEXIST = 72 ++ UCHAR Len; ++ BSS_2040_COEXIST_IE BssCoexistIe; ++} BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; + + //802.11n 7.3.2.59 +-typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT{ +- UCHAR ElementID; // ID = IE_2040_BSS_INTOLERANT_REPORT = 73 +- UCHAR Len; +- UCHAR RegulatoryClass; +- UCHAR ChList[0]; +-}BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; +- ++typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT { ++ UCHAR ElementID; // ID = IE_2040_BSS_INTOLERANT_REPORT = 73 ++ UCHAR Len; ++ UCHAR RegulatoryClass; ++ UCHAR ChList[0]; ++} BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; + + // The structure for channel switch annoucement IE. This is in 802.11n D3.03 +-typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE{ +- UCHAR SwitchMode; //channel switch mode +- UCHAR NewChannel; // +- UCHAR SwitchCount; // ++typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE { ++ UCHAR SwitchMode; //channel switch mode ++ UCHAR NewChannel; // ++ UCHAR SwitchCount; // + } CHA_SWITCH_ANNOUNCE_IE, *PCHA_SWITCH_ANNOUNCE_IE; + +- + // The structure for channel switch annoucement IE. This is in 802.11n D3.03 +-typedef struct PACKED _SEC_CHA_OFFSET_IE{ +- UCHAR SecondaryChannelOffset; // 1: Secondary above, 3: Secondary below, 0: no Secondary ++typedef struct PACKED _SEC_CHA_OFFSET_IE { ++ UCHAR SecondaryChannelOffset; // 1: Secondary above, 3: Secondary below, 0: no Secondary + } SEC_CHA_OFFSET_IE, *PSEC_CHA_OFFSET_IE; + +- + // This structure is extracted from struct RT_HT_CAPABILITY + typedef struct { +- BOOLEAN bHtEnable; // If we should use ht rate. +- BOOLEAN bPreNHt; // If we should use ht rate. ++ BOOLEAN bHtEnable; // If we should use ht rate. ++ BOOLEAN bPreNHt; // If we should use ht rate. + //Substract from HT Capability IE +- UCHAR MCSSet[16]; ++ UCHAR MCSSet[16]; + } RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; + + //This structure substracts ralink supports from all 802.11n-related features. + //Features not listed here but contained in 802.11n spec are not supported in rt2860. + typedef struct { +- USHORT ChannelWidth:1; +- USHORT MimoPs:2;//mimo power safe MMPS_ +- USHORT GF:1; //green field +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; // 2 bits +- USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n +- USHORT AmsduSize:1; // Max receiving A-MSDU size +- USHORT rsv:5; ++ USHORT ChannelWidth:1; ++ USHORT MimoPs:2; //mimo power safe MMPS_ ++ USHORT GF:1; //green field ++ USHORT ShortGIfor20:1; ++ USHORT ShortGIfor40:1; //for40MHz ++ USHORT TxSTBC:1; ++ USHORT RxSTBC:2; // 2 bits ++ USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n ++ USHORT AmsduSize:1; // Max receiving A-MSDU size ++ USHORT rsv:5; + + //Substract from Addiont HT INFO IE +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n +- UCHAR RecomWidth:1; ++ UCHAR MaxRAmpduFactor:2; ++ UCHAR MpduDensity:3; ++ UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n ++ UCHAR RecomWidth:1; + +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv3:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; ++ USHORT OperaionMode:2; ++ USHORT NonGfPresent:1; ++ USHORT rsv3:1; ++ USHORT OBSS_NonHTExist:1; ++ USHORT rsv2:11; + + // New Extension Channel Offset IE +- UCHAR NewExtChannelOffset; ++ UCHAR NewExtChannelOffset; + // Extension Capability IE = 127 +- UCHAR BSSCoexist2040; ++ UCHAR BSSCoexist2040; + } RT_HT_CAPABILITY, *PRT_HT_CAPABILITY; + + // field in Addtional HT Information IE . + typedef struct PACKED { +- UCHAR ExtChanOffset:2; +- UCHAR RecomWidth:1; +- UCHAR RifsMode:1; +- UCHAR S_PSMPSup:1; //Indicate support for scheduled PSMP +- UCHAR SerInterGranu:3; //service interval granularity ++ UCHAR ExtChanOffset:2; ++ UCHAR RecomWidth:1; ++ UCHAR RifsMode:1; ++ UCHAR S_PSMPSup:1; //Indicate support for scheduled PSMP ++ UCHAR SerInterGranu:3; //service interval granularity + } ADD_HTINFO, *PADD_HTINFO; + +-typedef struct PACKED{ +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; ++typedef struct PACKED { ++ USHORT OperaionMode:2; ++ USHORT NonGfPresent:1; ++ USHORT rsv:1; ++ USHORT OBSS_NonHTExist:1; ++ USHORT rsv2:11; + } ADD_HTINFO2, *PADD_HTINFO2; + +- + // TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. +-typedef struct PACKED{ +- USHORT StbcMcs:6; +- USHORT DualBeacon:1; +- USHORT DualCTSProtect:1; +- USHORT STBCBeacon:1; +- USHORT LsigTxopProt:1; // L-SIG TXOP protection full support +- USHORT PcoActive:1; +- USHORT PcoPhase:1; +- USHORT rsv:4; ++typedef struct PACKED { ++ USHORT StbcMcs:6; ++ USHORT DualBeacon:1; ++ USHORT DualCTSProtect:1; ++ USHORT STBCBeacon:1; ++ USHORT LsigTxopProt:1; // L-SIG TXOP protection full support ++ USHORT PcoActive:1; ++ USHORT PcoPhase:1; ++ USHORT rsv:4; + } ADD_HTINFO3, *PADD_HTINFO3; + + #define SIZE_ADD_HT_INFO_IE 22 +-typedef struct PACKED{ +- UCHAR ControlChan; +- ADD_HTINFO AddHtInfo; +- ADD_HTINFO2 AddHtInfo2; +- ADD_HTINFO3 AddHtInfo3; +- UCHAR MCSSet[16]; // Basic MCS set ++typedef struct PACKED { ++ UCHAR ControlChan; ++ ADD_HTINFO AddHtInfo; ++ ADD_HTINFO2 AddHtInfo2; ++ ADD_HTINFO3 AddHtInfo3; ++ UCHAR MCSSet[16]; // Basic MCS set + } ADD_HT_INFO_IE, *PADD_HT_INFO_IE; + +-typedef struct PACKED{ +- UCHAR NewExtChanOffset; ++typedef struct PACKED { ++ UCHAR NewExtChanOffset; + } NEW_EXT_CHAN_IE, *PNEW_EXT_CHAN_IE; + + typedef struct PACKED _FRAME_802_11 { +- HEADER_802_11 Hdr; +- UCHAR Octet[1]; +-} FRAME_802_11, *PFRAME_802_11; ++ HEADER_802_11 Hdr; ++ UCHAR Octet[1]; ++} FRAME_802_11, *PFRAME_802_11; + + // QoSNull embedding of management action. When HT Control MA field set to 1. + typedef struct PACKED _MA_BODY { +- UCHAR Category; +- UCHAR Action; +- UCHAR Octet[1]; +-} MA_BODY, *PMA_BODY; +- +-typedef struct PACKED _HEADER_802_3 { +- UCHAR DAAddr1[MAC_ADDR_LEN]; +- UCHAR SAAddr2[MAC_ADDR_LEN]; +- UCHAR Octet[2]; +-} HEADER_802_3, *PHEADER_802_3; ++ UCHAR Category; ++ UCHAR Action; ++ UCHAR Octet[1]; ++} MA_BODY, *PMA_BODY; ++ ++typedef struct PACKED _HEADER_802_3 { ++ UCHAR DAAddr1[MAC_ADDR_LEN]; ++ UCHAR SAAddr2[MAC_ADDR_LEN]; ++ UCHAR Octet[2]; ++} HEADER_802_3, *PHEADER_802_3; + ////Block ACK related format +-// 2-byte BA Parameter field in DELBA frames to terminate an already set up bA +-typedef struct PACKED{ +- USHORT Rsv:11; // always set to 0 +- USHORT Initiator:1; // 1: originator 0:recipient +- USHORT TID:4; // value of TC os TS ++// 2-byte BA Parameter field in DELBA frames to terminate an already set up bA ++typedef struct PACKED { ++ USHORT Rsv:11; // always set to 0 ++ USHORT Initiator:1; // 1: originator 0:recipient ++ USHORT TID:4; // value of TC os TS + } DELBA_PARM, *PDELBA_PARM; + + // 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA + typedef struct PACKED { +- USHORT AMSDUSupported:1; // 0: not permitted 1: permitted +- USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA +- USHORT TID:4; // value of TC os TS +- USHORT BufSize:10; // number of buffe of size 2304 octetsr ++ USHORT AMSDUSupported:1; // 0: not permitted 1: permitted ++ USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA ++ USHORT TID:4; // value of TC os TS ++ USHORT BufSize:10; // number of buffe of size 2304 octetsr + } BA_PARM, *PBA_PARM; + + // 2-byte BA Starting Seq CONTROL field + typedef union PACKED { +- struct PACKED { +- USHORT FragNum:4; // always set to 0 +- USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent +- } field; +- USHORT word; ++ struct PACKED { ++ USHORT FragNum:4; // always set to 0 ++ USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent ++ } field; ++ USHORT word; + } BASEQ_CONTROL, *PBASEQ_CONTROL; + + //BAControl and BARControl are the same + // 2-byte BA CONTROL field in BA frame + typedef struct PACKED { +- USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK +- USHORT MTID:1; //EWC V1.24 +- USHORT Compressed:1; +- USHORT Rsv:9; +- USHORT TID:4; ++ USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK ++ USHORT MTID:1; //EWC V1.24 ++ USHORT Compressed:1; ++ USHORT Rsv:9; ++ USHORT TID:4; + } BA_CONTROL, *PBA_CONTROL; + + // 2-byte BAR CONTROL field in BAR frame + typedef struct PACKED { +- USHORT ACKPolicy:1; // 0:normal ack, 1:no ack. +- USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT TID:4; ++ USHORT ACKPolicy:1; // 0:normal ack, 1:no ack. ++ USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ ++ USHORT Compressed:1; ++ USHORT Rsv1:9; ++ USHORT TID:4; + } BAR_CONTROL, *PBAR_CONTROL; + + // BARControl in MTBAR frame + typedef struct PACKED { +- USHORT ACKPolicy:1; +- USHORT MTID:1; +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT NumTID:4; ++ USHORT ACKPolicy:1; ++ USHORT MTID:1; ++ USHORT Compressed:1; ++ USHORT Rsv1:9; ++ USHORT NumTID:4; + } MTBAR_CONTROL, *PMTBAR_CONTROL; + + typedef struct PACKED { +- USHORT Rsv1:12; +- USHORT TID:4; ++ USHORT Rsv1:12; ++ USHORT TID:4; + } PER_TID_INFO, *PPER_TID_INFO; + + typedef struct { +- PER_TID_INFO PerTID; +- BASEQ_CONTROL BAStartingSeq; ++ PER_TID_INFO PerTID; ++ BASEQ_CONTROL BAStartingSeq; + } EACH_TID, *PEACH_TID; + +- + // BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. + typedef struct PACKED _FRAME_BA_REQ { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BARControl; +- BASEQ_CONTROL BAStartingSeq; +-} FRAME_BA_REQ, *PFRAME_BA_REQ; ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ BAR_CONTROL BARControl; ++ BASEQ_CONTROL BAStartingSeq; ++} FRAME_BA_REQ, *PFRAME_BA_REQ; + + typedef struct PACKED _FRAME_MTBA_REQ { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- MTBAR_CONTROL MTBARControl; +- PER_TID_INFO PerTIDInfo; +- BASEQ_CONTROL BAStartingSeq; +-} FRAME_MTBA_REQ, *PFRAME_MTBA_REQ; ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ MTBAR_CONTROL MTBARControl; ++ PER_TID_INFO PerTIDInfo; ++ BASEQ_CONTROL BAStartingSeq; ++} FRAME_MTBA_REQ, *PFRAME_MTBA_REQ; + + // Compressed format is mandantory in HT STA + typedef struct PACKED _FRAME_MTBA { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BA_CONTROL BAControl; +- BASEQ_CONTROL BAStartingSeq; +- UCHAR BitMap[8]; +-} FRAME_MTBA, *PFRAME_MTBA; ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ BA_CONTROL BAControl; ++ BASEQ_CONTROL BAStartingSeq; ++ UCHAR BitMap[8]; ++} FRAME_MTBA, *PFRAME_MTBA; + + typedef struct PACKED _FRAME_PSMP_ACTION { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Psmp; // 7.3.1.25 +-} FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ UCHAR Psmp; // 7.3.1.25 ++} FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; + + typedef struct PACKED _FRAME_ACTION_HDR { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +-} FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++} FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; + + //Action Frame + //Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 + typedef struct PACKED _CHAN_SWITCH_ANNOUNCE { +- UCHAR ElementID; // ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 +- UCHAR Len; +- CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; +-} CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; +- ++ UCHAR ElementID; // ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 ++ UCHAR Len; ++ CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; ++} CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; + + //802.11n : 7.3.2.20a + typedef struct PACKED _SECOND_CHAN_OFFSET { +- UCHAR ElementID; // ID = IE_SECONDARY_CH_OFFSET = 62 +- UCHAR Len; +- SEC_CHA_OFFSET_IE SecChOffsetIe; +-} SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; +- ++ UCHAR ElementID; // ID = IE_SECONDARY_CH_OFFSET = 62 ++ UCHAR Len; ++ SEC_CHA_OFFSET_IE SecChOffsetIe; ++} SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; + + typedef struct PACKED _FRAME_SPETRUM_CS { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- CHAN_SWITCH_ANNOUNCE CSAnnounce; +- SECOND_CHAN_OFFSET SecondChannel; +-} FRAME_SPETRUM_CS, *PFRAME_SPETRUM_CS; +- ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ CHAN_SWITCH_ANNOUNCE CSAnnounce; ++ SECOND_CHAN_OFFSET SecondChannel; ++} FRAME_SPETRUM_CS, *PFRAME_SPETRUM_CS; + + typedef struct PACKED _FRAME_ADDBA_REQ { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; // 1 +- BA_PARM BaParm; // 2 - 10 +- USHORT TimeOutValue; // 0 - 0 +- BASEQ_CONTROL BaStartSeq; // 0-0 +-} FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ UCHAR Token; // 1 ++ BA_PARM BaParm; // 2 - 10 ++ USHORT TimeOutValue; // 0 - 0 ++ BASEQ_CONTROL BaStartSeq; // 0-0 ++} FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; + + typedef struct PACKED _FRAME_ADDBA_RSP { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT StatusCode; +- BA_PARM BaParm; //0 - 2 +- USHORT TimeOutValue; +-} FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ UCHAR Token; ++ USHORT StatusCode; ++ BA_PARM BaParm; //0 - 2 ++ USHORT TimeOutValue; ++} FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; + + typedef struct PACKED _FRAME_DELBA_REQ { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- DELBA_PARM DelbaParm; +- USHORT ReasonCode; +-} FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; +- ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ DELBA_PARM DelbaParm; ++ USHORT ReasonCode; ++} FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; + + //7.2.1.7 + typedef struct PACKED _FRAME_BAR { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; +- BASEQ_CONTROL StartingSeq; +-} FRAME_BAR, *PFRAME_BAR; ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ BAR_CONTROL BarControl; ++ BASEQ_CONTROL StartingSeq; ++} FRAME_BAR, *PFRAME_BAR; + + //7.2.1.7 + typedef struct PACKED _FRAME_BA { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; +- BASEQ_CONTROL StartingSeq; +- UCHAR bitmask[8]; +-} FRAME_BA, *PFRAME_BA; +- ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ BAR_CONTROL BarControl; ++ BASEQ_CONTROL StartingSeq; ++ UCHAR bitmask[8]; ++} FRAME_BA, *PFRAME_BA; + + // Radio Measuement Request Frame Format + typedef struct PACKED _FRAME_RM_REQ_ACTION { +- HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT Repetition; +- UCHAR data[0]; +-} FRAME_RM_REQ_ACTION, *PFRAME_RM_REQ_ACTION; ++ HEADER_802_11 Hdr; ++ UCHAR Category; ++ UCHAR Action; ++ UCHAR Token; ++ USHORT Repetition; ++ UCHAR data[0]; ++} FRAME_RM_REQ_ACTION, *PFRAME_RM_REQ_ACTION; + + typedef struct PACKED { +- UCHAR ID; +- UCHAR Length; +- UCHAR ChannelSwitchMode; +- UCHAR NewRegClass; +- UCHAR NewChannelNum; +- UCHAR ChannelSwitchCount; +-} HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; +- ++ UCHAR ID; ++ UCHAR Length; ++ UCHAR ChannelSwitchMode; ++ UCHAR NewRegClass; ++ UCHAR NewChannelNum; ++ UCHAR ChannelSwitchCount; ++} HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, ++ *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; + + // + // _Limit must be the 2**n - 1 +@@ -701,183 +682,181 @@ typedef struct PACKED { + // Contention-free parameter (without ID and Length) + // + typedef struct PACKED { +- BOOLEAN bValid; // 1: variable contains valid value +- UCHAR CfpCount; +- UCHAR CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; ++ BOOLEAN bValid; // 1: variable contains valid value ++ UCHAR CfpCount; ++ UCHAR CfpPeriod; ++ USHORT CfpMaxDuration; ++ USHORT CfpDurRemaining; + } CF_PARM, *PCF_PARM; + +-typedef struct _CIPHER_SUITE { +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher 1, this one has more secured cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; // Unicast cipher 2 if AP announce two unicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Group cipher +- USHORT RsnCapability; // RSN capability from beacon +- BOOLEAN bMixMode; // Indicate Pair & Group cipher might be different +-} CIPHER_SUITE, *PCIPHER_SUITE; ++typedef struct _CIPHER_SUITE { ++ NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher 1, this one has more secured cipher suite ++ NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; // Unicast cipher 2 if AP announce two unicast cipher suite ++ NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Group cipher ++ USHORT RsnCapability; // RSN capability from beacon ++ BOOLEAN bMixMode; // Indicate Pair & Group cipher might be different ++} CIPHER_SUITE, *PCIPHER_SUITE; + + // EDCA configuration from AP's BEACON/ProbeRsp + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- BOOLEAN bAdd; // 1: variable contains valid value +- BOOLEAN bQAck; +- BOOLEAN bQueueRequest; +- BOOLEAN bTxopRequest; +- BOOLEAN bAPSDCapable; ++ BOOLEAN bValid; // 1: variable contains valid value ++ BOOLEAN bAdd; // 1: variable contains valid value ++ BOOLEAN bQAck; ++ BOOLEAN bQueueRequest; ++ BOOLEAN bTxopRequest; ++ BOOLEAN bAPSDCapable; + // BOOLEAN bMoreDataAck; +- UCHAR EdcaUpdateCount; +- UCHAR Aifsn[4]; // 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO +- UCHAR Cwmin[4]; +- UCHAR Cwmax[4]; +- USHORT Txop[4]; // in unit of 32-us +- BOOLEAN bACM[4]; // 1: Admission Control of AC_BK is mandattory ++ UCHAR EdcaUpdateCount; ++ UCHAR Aifsn[4]; // 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO ++ UCHAR Cwmin[4]; ++ UCHAR Cwmax[4]; ++ USHORT Txop[4]; // in unit of 32-us ++ BOOLEAN bACM[4]; // 1: Admission Control of AC_BK is mandattory + } EDCA_PARM, *PEDCA_PARM; + + // QBSS LOAD information from QAP's BEACON/ProbeRsp + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- USHORT StaNum; +- UCHAR ChannelUtilization; +- USHORT RemainingAdmissionControl; // in unit of 32-us ++ BOOLEAN bValid; // 1: variable contains valid value ++ USHORT StaNum; ++ UCHAR ChannelUtilization; ++ USHORT RemainingAdmissionControl; // in unit of 32-us + } QBSS_LOAD_PARM, *PQBSS_LOAD_PARM; + + // QBSS Info field in QSTA's assoc req + typedef struct PACKED { +- UCHAR UAPSD_AC_VO:1; +- UCHAR UAPSD_AC_VI:1; +- UCHAR UAPSD_AC_BK:1; +- UCHAR UAPSD_AC_BE:1; +- UCHAR Rsv1:1; +- UCHAR MaxSPLength:2; +- UCHAR Rsv2:1; ++ UCHAR UAPSD_AC_VO:1; ++ UCHAR UAPSD_AC_VI:1; ++ UCHAR UAPSD_AC_BK:1; ++ UCHAR UAPSD_AC_BE:1; ++ UCHAR Rsv1:1; ++ UCHAR MaxSPLength:2; ++ UCHAR Rsv2:1; + } QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM; + + // QBSS Info field in QAP's Beacon/ProbeRsp + typedef struct PACKED { +- UCHAR ParamSetCount:4; +- UCHAR Rsv:3; +- UCHAR UAPSD:1; ++ UCHAR ParamSetCount:4; ++ UCHAR Rsv:3; ++ UCHAR UAPSD:1; + } QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM; + + // QOS Capability reported in QAP's BEACON/ProbeRsp + // QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- BOOLEAN bQAck; +- BOOLEAN bQueueRequest; +- BOOLEAN bTxopRequest; ++ BOOLEAN bValid; // 1: variable contains valid value ++ BOOLEAN bQAck; ++ BOOLEAN bQueueRequest; ++ BOOLEAN bTxopRequest; + // BOOLEAN bMoreDataAck; +- UCHAR EdcaUpdateCount; ++ UCHAR EdcaUpdateCount; + } QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM; + + typedef struct { +- UCHAR IELen; +- UCHAR IE[MAX_CUSTOM_LEN]; ++ UCHAR IELen; ++ UCHAR IE[MAX_CUSTOM_LEN]; + } WPA_IE_; + + typedef struct { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Channel; +- UCHAR CentralChannel; //Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. +- UCHAR BssType; +- USHORT AtimWin; +- USHORT BeaconPeriod; +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ UCHAR Channel; ++ UCHAR CentralChannel; //Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. ++ UCHAR BssType; ++ USHORT AtimWin; ++ USHORT BeaconPeriod; ++ ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR ExtRateLen; + HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; ++ UCHAR HtCapabilityLen; + ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR AddHtInfoLen; +- UCHAR NewExtChanOffset; +- CHAR Rssi; +- UCHAR Privacy; // Indicate security function ON/OFF. Don't mess up with auth mode. +- UCHAR Hidden; ++ UCHAR AddHtInfoLen; ++ UCHAR NewExtChanOffset; ++ CHAR Rssi; ++ UCHAR Privacy; // Indicate security function ON/OFF. Don't mess up with auth mode. ++ UCHAR Hidden; + +- USHORT DtimPeriod; +- USHORT CapabilityInfo; ++ USHORT DtimPeriod; ++ USHORT CapabilityInfo; + +- USHORT CfpCount; +- USHORT CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; ++ USHORT CfpCount; ++ USHORT CfpPeriod; ++ USHORT CfpMaxDuration; ++ USHORT CfpDurRemaining; ++ UCHAR SsidLen; ++ CHAR Ssid[MAX_LEN_OF_SSID]; + +- ULONG LastBeaconRxTime; // OS's timestamp ++ ULONG LastBeaconRxTime; // OS's timestamp + +- BOOLEAN bSES; ++ BOOLEAN bSES; + + // New for WPA2 +- CIPHER_SUITE WPA; // AP announced WPA cipher suite +- CIPHER_SUITE WPA2; // AP announced WPA2 cipher suite ++ CIPHER_SUITE WPA; // AP announced WPA cipher suite ++ CIPHER_SUITE WPA2; // AP announced WPA2 cipher suite + + // New for microsoft WPA support +- NDIS_802_11_FIXED_IEs FixIEs; +- NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; // Addition mode for WPA2 / WPA capable AP +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; +- NDIS_802_11_WEP_STATUS WepStatus; // Unicast Encryption Algorithm extract from VAR_IE +- USHORT VarIELen; // Length of next VIE include EID & Length +- UCHAR VarIEs[MAX_VIE_LEN]; ++ NDIS_802_11_FIXED_IEs FixIEs; ++ NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; // Addition mode for WPA2 / WPA capable AP ++ NDIS_802_11_AUTHENTICATION_MODE AuthMode; ++ NDIS_802_11_WEP_STATUS WepStatus; // Unicast Encryption Algorithm extract from VAR_IE ++ USHORT VarIELen; // Length of next VIE include EID & Length ++ UCHAR VarIEs[MAX_VIE_LEN]; + + // CCX Ckip information +- UCHAR CkipFlag; ++ UCHAR CkipFlag; + + // CCX 2 TSF +- UCHAR PTSF[4]; // Parent TSF +- UCHAR TTSF[8]; // Target TSF ++ UCHAR PTSF[4]; // Parent TSF ++ UCHAR TTSF[8]; // Target TSF + +- // 802.11e d9, and WMM +- EDCA_PARM EdcaParm; ++ // 802.11e d9, and WMM ++ EDCA_PARM EdcaParm; + QOS_CAPABILITY_PARM QosCapability; +- QBSS_LOAD_PARM QbssLoad; +- WPA_IE_ WpaIE; +- WPA_IE_ RsnIE; ++ QBSS_LOAD_PARM QbssLoad; ++ WPA_IE_ WpaIE; ++ WPA_IE_ RsnIE; + } BSS_ENTRY, *PBSS_ENTRY; + + typedef struct { +- UCHAR BssNr; +- UCHAR BssOverlapNr; +- BSS_ENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; ++ UCHAR BssNr; ++ UCHAR BssOverlapNr; ++ BSS_ENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; + } BSS_TABLE, *PBSS_TABLE; + +- + typedef struct _MLME_QUEUE_ELEM { +- ULONG Machine; +- ULONG MsgType; +- ULONG MsgLen; +- UCHAR Msg[MGMT_DMA_BUFFER_SIZE]; +- LARGE_INTEGER TimeStamp; +- UCHAR Rssi0; +- UCHAR Rssi1; +- UCHAR Rssi2; +- UCHAR Signal; +- UCHAR Channel; +- UCHAR Wcid; +- BOOLEAN Occupied; ++ ULONG Machine; ++ ULONG MsgType; ++ ULONG MsgLen; ++ UCHAR Msg[MGMT_DMA_BUFFER_SIZE]; ++ LARGE_INTEGER TimeStamp; ++ UCHAR Rssi0; ++ UCHAR Rssi1; ++ UCHAR Rssi2; ++ UCHAR Signal; ++ UCHAR Channel; ++ UCHAR Wcid; ++ BOOLEAN Occupied; + } MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM; + + typedef struct _MLME_QUEUE { +- ULONG Num; +- ULONG Head; +- ULONG Tail; +- NDIS_SPIN_LOCK Lock; +- MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; ++ ULONG Num; ++ ULONG Head; ++ ULONG Tail; ++ NDIS_SPIN_LOCK Lock; ++ MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; + } MLME_QUEUE, *PMLME_QUEUE; + +-typedef VOID (*STATE_MACHINE_FUNC)(VOID *Adaptor, MLME_QUEUE_ELEM *Elem); ++typedef VOID(*STATE_MACHINE_FUNC) (VOID * Adaptor, MLME_QUEUE_ELEM * Elem); + + typedef struct _STATE_MACHINE { +- ULONG Base; +- ULONG NrState; +- ULONG NrMsg; +- ULONG CurrState; +- STATE_MACHINE_FUNC *TransFunc; ++ ULONG Base; ++ ULONG NrState; ++ ULONG NrMsg; ++ ULONG CurrState; ++ STATE_MACHINE_FUNC *TransFunc; + } STATE_MACHINE, *PSTATE_MACHINE; + +- + // MLME AUX data structure that hold temporarliy settings during a connection attempt. + // Once this attemp succeeds, all settings will be copy to pAd->StaActive. + // A connection attempt (user set OID, roaming, CCX fast roaming,..) consists of +@@ -885,191 +864,189 @@ typedef struct _STATE_MACHINE { + // separate this under-trial settings away from pAd->StaActive so that once + // this new attempt failed, driver can auto-recover back to the active settings. + typedef struct _MLME_AUX { +- UCHAR BssType; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR AutoReconnectSsid[MAX_LEN_OF_SSID]; +- UCHAR AutoReconnectSsidLen; +- USHORT Alg; +- UCHAR ScanType; +- UCHAR Channel; +- UCHAR CentralChannel; +- USHORT Aid; +- USHORT CapabilityInfo; +- USHORT BeaconPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; +- USHORT AtimWin; ++ UCHAR BssType; ++ UCHAR Ssid[MAX_LEN_OF_SSID]; ++ UCHAR SsidLen; ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ UCHAR AutoReconnectSsid[MAX_LEN_OF_SSID]; ++ UCHAR AutoReconnectSsidLen; ++ USHORT Alg; ++ UCHAR ScanType; ++ UCHAR Channel; ++ UCHAR CentralChannel; ++ USHORT Aid; ++ USHORT CapabilityInfo; ++ USHORT BeaconPeriod; ++ USHORT CfpMaxDuration; ++ USHORT CfpPeriod; ++ USHORT AtimWin; + + // Copy supported rate from desired AP's beacon. We are trying to match + // AP's supported and extended rate settings. +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; +- HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE +- UCHAR NewExtChannelOffset; +- //RT_HT_CAPABILITY SupportedHtPhy; +- +- // new for QOS +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP +- +- // new to keep Ralink specific feature +- ULONG APRalinkIe; +- +- BSS_TABLE SsidBssTab; // AP list for the same SSID +- BSS_TABLE RoamTab; // AP list eligible for roaming +- ULONG BssIdx; +- ULONG RoamIdx; +- +- BOOLEAN CurrReqIsFromNdis; +- +- RALINK_TIMER_STRUCT BeaconTimer, ScanTimer; +- RALINK_TIMER_STRUCT AuthTimer; +- RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen; ++ UCHAR ExtRateLen; ++ HT_CAPABILITY_IE HtCapability; ++ UCHAR HtCapabilityLen; ++ ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ UCHAR NewExtChannelOffset; ++ //RT_HT_CAPABILITY SupportedHtPhy; ++ ++ // new for QOS ++ QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP ++ EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP ++ QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP ++ ++ // new to keep Ralink specific feature ++ ULONG APRalinkIe; ++ ++ BSS_TABLE SsidBssTab; // AP list for the same SSID ++ BSS_TABLE RoamTab; // AP list eligible for roaming ++ ULONG BssIdx; ++ ULONG RoamIdx; ++ ++ BOOLEAN CurrReqIsFromNdis; ++ ++ RALINK_TIMER_STRUCT BeaconTimer, ScanTimer; ++ RALINK_TIMER_STRUCT AuthTimer; ++ RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer; + } MLME_AUX, *PMLME_AUX; + +-typedef struct _MLME_ADDBA_REQ_STRUCT{ +- UCHAR Wcid; // +- UCHAR pAddr[MAC_ADDR_LEN]; +- UCHAR BaBufSize; +- USHORT TimeOutValue; +- UCHAR TID; +- UCHAR Token; +- USHORT BaStartSeq; ++typedef struct _MLME_ADDBA_REQ_STRUCT { ++ UCHAR Wcid; // ++ UCHAR pAddr[MAC_ADDR_LEN]; ++ UCHAR BaBufSize; ++ USHORT TimeOutValue; ++ UCHAR TID; ++ UCHAR Token; ++ USHORT BaStartSeq; + } MLME_ADDBA_REQ_STRUCT, *PMLME_ADDBA_REQ_STRUCT; + +- +-typedef struct _MLME_DELBA_REQ_STRUCT{ +- UCHAR Wcid; // +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR TID; +- UCHAR Initiator; ++typedef struct _MLME_DELBA_REQ_STRUCT { ++ UCHAR Wcid; // ++ UCHAR Addr[MAC_ADDR_LEN]; ++ UCHAR TID; ++ UCHAR Initiator; + } MLME_DELBA_REQ_STRUCT, *PMLME_DELBA_REQ_STRUCT; + + // assoc struct is equal to reassoc +-typedef struct _MLME_ASSOC_REQ_STRUCT{ +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT CapabilityInfo; +- USHORT ListenIntv; +- ULONG Timeout; +-} MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, *PMLME_REASSOC_REQ_STRUCT; +- +-typedef struct _MLME_DISASSOC_REQ_STRUCT{ +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; ++typedef struct _MLME_ASSOC_REQ_STRUCT { ++ UCHAR Addr[MAC_ADDR_LEN]; ++ USHORT CapabilityInfo; ++ USHORT ListenIntv; ++ ULONG Timeout; ++} MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, ++ *PMLME_REASSOC_REQ_STRUCT; ++ ++typedef struct _MLME_DISASSOC_REQ_STRUCT { ++ UCHAR Addr[MAC_ADDR_LEN]; ++ USHORT Reason; + } MLME_DISASSOC_REQ_STRUCT, *PMLME_DISASSOC_REQ_STRUCT; + + typedef struct _MLME_AUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Alg; +- ULONG Timeout; ++ UCHAR Addr[MAC_ADDR_LEN]; ++ USHORT Alg; ++ ULONG Timeout; + } MLME_AUTH_REQ_STRUCT, *PMLME_AUTH_REQ_STRUCT; + + typedef struct _MLME_DEAUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; ++ UCHAR Addr[MAC_ADDR_LEN]; ++ USHORT Reason; + } MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT; + + typedef struct { +- ULONG BssIdx; ++ ULONG BssIdx; + } MLME_JOIN_REQ_STRUCT; + + typedef struct _MLME_SCAN_REQ_STRUCT { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR BssType; +- UCHAR ScanType; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ UCHAR BssType; ++ UCHAR ScanType; ++ UCHAR SsidLen; ++ CHAR Ssid[MAX_LEN_OF_SSID]; + } MLME_SCAN_REQ_STRUCT, *PMLME_SCAN_REQ_STRUCT; + + typedef struct _MLME_START_REQ_STRUCT { +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; ++ CHAR Ssid[MAX_LEN_OF_SSID]; ++ UCHAR SsidLen; + } MLME_START_REQ_STRUCT, *PMLME_START_REQ_STRUCT; + + typedef struct PACKED { +- UCHAR Eid; +- UCHAR Len; +- UCHAR Octet[1]; +-} EID_STRUCT,*PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; +- +-typedef struct PACKED _RTMP_TX_RATE_SWITCH +-{ +- UCHAR ItemNo; +- UCHAR STBC:1; +- UCHAR ShortGI:1; +- UCHAR BW:1; +- UCHAR Rsv1:1; +- UCHAR Mode:2; +- UCHAR Rsv2:2; +- UCHAR CurrMCS; +- UCHAR TrainUp; +- UCHAR TrainDown; ++ UCHAR Eid; ++ UCHAR Len; ++ UCHAR Octet[1]; ++} EID_STRUCT, *PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; ++ ++typedef struct PACKED _RTMP_TX_RATE_SWITCH { ++ UCHAR ItemNo; ++ UCHAR STBC:1; ++ UCHAR ShortGI:1; ++ UCHAR BW:1; ++ UCHAR Rsv1:1; ++ UCHAR Mode:2; ++ UCHAR Rsv2:2; ++ UCHAR CurrMCS; ++ UCHAR TrainUp; ++ UCHAR TrainDown; + } RRTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH; + + // ========================== AP mlme.h =============================== +-#define TBTT_PRELOAD_TIME 384 // usec. LomgPreamble + 24-byte at 1Mbps ++#define TBTT_PRELOAD_TIME 384 // usec. LomgPreamble + 24-byte at 1Mbps + #define DEFAULT_DTIM_PERIOD 1 + +-#define MAC_TABLE_AGEOUT_TIME 300 // unit: sec +-#define MAC_TABLE_ASSOC_TIMEOUT 5 // unit: sec ++#define MAC_TABLE_AGEOUT_TIME 300 // unit: sec ++#define MAC_TABLE_ASSOC_TIMEOUT 5 // unit: sec + #define MAC_TABLE_FULL(Tab) ((Tab).size == MAX_LEN_OF_MAC_TABLE) + + // AP shall drop the sta if contine Tx fail count reach it. +-#define MAC_ENTRY_LIFE_CHECK_CNT 20 // packet cnt. ++#define MAC_ENTRY_LIFE_CHECK_CNT 20 // packet cnt. + + // Value domain of pMacEntry->Sst + typedef enum _Sst { +- SST_NOT_AUTH, // 0: equivalent to IEEE 802.11/1999 state 1 +- SST_AUTH, // 1: equivalent to IEEE 802.11/1999 state 2 +- SST_ASSOC // 2: equivalent to IEEE 802.11/1999 state 3 ++ SST_NOT_AUTH, // 0: equivalent to IEEE 802.11/1999 state 1 ++ SST_AUTH, // 1: equivalent to IEEE 802.11/1999 state 2 ++ SST_ASSOC // 2: equivalent to IEEE 802.11/1999 state 3 + } SST; + + // value domain of pMacEntry->AuthState + typedef enum _AuthState { +- AS_NOT_AUTH, +- AS_AUTH_OPEN, // STA has been authenticated using OPEN SYSTEM +- AS_AUTH_KEY, // STA has been authenticated using SHARED KEY +- AS_AUTHENTICATING // STA is waiting for AUTH seq#3 using SHARED KEY ++ AS_NOT_AUTH, ++ AS_AUTH_OPEN, // STA has been authenticated using OPEN SYSTEM ++ AS_AUTH_KEY, // STA has been authenticated using SHARED KEY ++ AS_AUTHENTICATING // STA is waiting for AUTH seq#3 using SHARED KEY + } AUTH_STATE; + + //for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 + typedef enum _ApWpaState { +- AS_NOTUSE, // 0 +- AS_DISCONNECT, // 1 +- AS_DISCONNECTED, // 2 +- AS_INITIALIZE, // 3 +- AS_AUTHENTICATION, // 4 +- AS_AUTHENTICATION2, // 5 +- AS_INITPMK, // 6 +- AS_INITPSK, // 7 +- AS_PTKSTART, // 8 +- AS_PTKINIT_NEGOTIATING, // 9 +- AS_PTKINITDONE, // 10 +- AS_UPDATEKEYS, // 11 +- AS_INTEGRITY_FAILURE, // 12 +- AS_KEYUPDATE, // 13 ++ AS_NOTUSE, // 0 ++ AS_DISCONNECT, // 1 ++ AS_DISCONNECTED, // 2 ++ AS_INITIALIZE, // 3 ++ AS_AUTHENTICATION, // 4 ++ AS_AUTHENTICATION2, // 5 ++ AS_INITPMK, // 6 ++ AS_INITPSK, // 7 ++ AS_PTKSTART, // 8 ++ AS_PTKINIT_NEGOTIATING, // 9 ++ AS_PTKINITDONE, // 10 ++ AS_UPDATEKEYS, // 11 ++ AS_INTEGRITY_FAILURE, // 12 ++ AS_KEYUPDATE, // 13 + } AP_WPA_STATE; + + // for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 + typedef enum _GTKState { +- REKEY_NEGOTIATING, +- REKEY_ESTABLISHED, +- KEYERROR, ++ REKEY_NEGOTIATING, ++ REKEY_ESTABLISHED, ++ KEYERROR, + } GTK_STATE; + + // for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 + typedef enum _WpaGTKState { +- SETKEYS, +- SETKEYS_DONE, ++ SETKEYS, ++ SETKEYS_DONE, + } WPA_GTK_STATE; + // ====================== end of AP mlme.h ============================ + +- +-#endif // MLME_H__ ++#endif // MLME_H__ +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index f3fb5ff..54fac1c 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -48,12 +48,12 @@ + // + // IEEE 802.11 Structures and definitions + // +-#define MAX_TX_POWER_LEVEL 100 /* mW */ +-#define MAX_RSSI_TRIGGER -10 /* dBm */ +-#define MIN_RSSI_TRIGGER -200 /* dBm */ +-#define MAX_FRAG_THRESHOLD 2346 /* byte count */ +-#define MIN_FRAG_THRESHOLD 256 /* byte count */ +-#define MAX_RTS_THRESHOLD 2347 /* byte count */ ++#define MAX_TX_POWER_LEVEL 100 /* mW */ ++#define MAX_RSSI_TRIGGER -10 /* dBm */ ++#define MIN_RSSI_TRIGGER -200 /* dBm */ ++#define MAX_FRAG_THRESHOLD 2346 /* byte count */ ++#define MIN_FRAG_THRESHOLD 256 /* byte count */ ++#define MAX_RTS_THRESHOLD 2347 /* byte count */ + + // new types for Media Specific Indications + // Extension channel offset +@@ -78,15 +78,14 @@ + #define NDIS_802_11_LENGTH_RATES 8 + #define NDIS_802_11_LENGTH_RATES_EX 16 + #define MAC_ADDR_LENGTH 6 +-//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc +-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination +-#define MAX_NUMBER_OF_EVENT 10 // entry # in EVENT table +-#define MAX_NUMBER_OF_MAC 32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 ++//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc ++#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination ++#define MAX_NUMBER_OF_EVENT 10 // entry # in EVENT table ++#define MAX_NUMBER_OF_MAC 32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 + #define MAX_NUMBER_OF_ACL 64 +-#define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ++#define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 + #define MAX_NUMBER_OF_DLS_ENTRY 4 + +- + #define RT_QUERY_SIGNAL_CONTEXT 0x0402 + #define RT_SET_IAPP_PID 0x0404 + #define RT_SET_APD_PID 0x0405 +@@ -129,19 +128,17 @@ + #define RT_OID_DRIVER_DEVICE_NAME 0x0645 + #define RT_OID_QUERY_MULTIPLE_CARD_SUPPORT 0x0647 + +-typedef enum _NDIS_802_11_STATUS_TYPE +-{ +- Ndis802_11StatusType_Authentication, +- Ndis802_11StatusType_MediaStreamMode, +- Ndis802_11StatusType_PMKID_CandidateList, +- Ndis802_11StatusTypeMax // not a real type, defined as an upper bound ++typedef enum _NDIS_802_11_STATUS_TYPE { ++ Ndis802_11StatusType_Authentication, ++ Ndis802_11StatusType_MediaStreamMode, ++ Ndis802_11StatusType_PMKID_CandidateList, ++ Ndis802_11StatusTypeMax // not a real type, defined as an upper bound + } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; + +-typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; ++typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; + +-typedef struct _NDIS_802_11_STATUS_INDICATION +-{ +- NDIS_802_11_STATUS_TYPE StatusType; ++typedef struct _NDIS_802_11_STATUS_INDICATION { ++ NDIS_802_11_STATUS_TYPE StatusType; + } NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; + + // mask for authentication/integrity fields +@@ -152,313 +149,283 @@ typedef struct _NDIS_802_11_STATUS_INDICATION + #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 + #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E + +-typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST +-{ +- ULONG Length; // Length of structure +- NDIS_802_11_MAC_ADDRESS Bssid; +- ULONG Flags; ++typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST { ++ ULONG Length; // Length of structure ++ NDIS_802_11_MAC_ADDRESS Bssid; ++ ULONG Flags; + } NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; + + //Added new types for PMKID Candidate lists. + typedef struct _PMKID_CANDIDATE { +- NDIS_802_11_MAC_ADDRESS BSSID; +- ULONG Flags; ++ NDIS_802_11_MAC_ADDRESS BSSID; ++ ULONG Flags; + } PMKID_CANDIDATE, *PPMKID_CANDIDATE; + +-typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST +-{ +- ULONG Version; // Version of the structure +- ULONG NumCandidates; // No. of pmkid candidates +- PMKID_CANDIDATE CandidateList[1]; ++typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST { ++ ULONG Version; // Version of the structure ++ ULONG NumCandidates; // No. of pmkid candidates ++ PMKID_CANDIDATE CandidateList[1]; + } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; + + //Flags for PMKID Candidate list structure + #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 + + // Added new types for OFDM 5G and 2.4G +-typedef enum _NDIS_802_11_NETWORK_TYPE +-{ +- Ndis802_11FH, +- Ndis802_11DS, +- Ndis802_11OFDM5, +- Ndis802_11OFDM24, +- Ndis802_11Automode, +- Ndis802_11OFDM5_N, +- Ndis802_11OFDM24_N, +- Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound ++typedef enum _NDIS_802_11_NETWORK_TYPE { ++ Ndis802_11FH, ++ Ndis802_11DS, ++ Ndis802_11OFDM5, ++ Ndis802_11OFDM24, ++ Ndis802_11Automode, ++ Ndis802_11OFDM5_N, ++ Ndis802_11OFDM24_N, ++ Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound + } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; + +-typedef struct _NDIS_802_11_NETWORK_TYPE_LIST +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_802_11_NETWORK_TYPE NetworkType [1]; ++typedef struct _NDIS_802_11_NETWORK_TYPE_LIST { ++ UINT NumberOfItems; // in list below, at least 1 ++ NDIS_802_11_NETWORK_TYPE NetworkType[1]; + } NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST; + +-typedef enum _NDIS_802_11_POWER_MODE +-{ +- Ndis802_11PowerModeCAM, +- Ndis802_11PowerModeMAX_PSP, +- Ndis802_11PowerModeFast_PSP, +- Ndis802_11PowerModeLegacy_PSP, +- Ndis802_11PowerModeMax // not a real mode, defined as an upper bound ++typedef enum _NDIS_802_11_POWER_MODE { ++ Ndis802_11PowerModeCAM, ++ Ndis802_11PowerModeMAX_PSP, ++ Ndis802_11PowerModeFast_PSP, ++ Ndis802_11PowerModeLegacy_PSP, ++ Ndis802_11PowerModeMax // not a real mode, defined as an upper bound + } NDIS_802_11_POWER_MODE, *PNDIS_802_11_POWER_MODE; + +-typedef ULONG NDIS_802_11_TX_POWER_LEVEL; // in milliwatts ++typedef ULONG NDIS_802_11_TX_POWER_LEVEL; // in milliwatts + + // + // Received Signal Strength Indication + // +-typedef LONG NDIS_802_11_RSSI; // in dBm +- +-typedef struct _NDIS_802_11_CONFIGURATION_FH +-{ +- ULONG Length; // Length of structure +- ULONG HopPattern; // As defined by 802.11, MSB set +- ULONG HopSet; // to one if non-802.11 +- ULONG DwellTime; // units are Kusec ++typedef LONG NDIS_802_11_RSSI; // in dBm ++ ++typedef struct _NDIS_802_11_CONFIGURATION_FH { ++ ULONG Length; // Length of structure ++ ULONG HopPattern; // As defined by 802.11, MSB set ++ ULONG HopSet; // to one if non-802.11 ++ ULONG DwellTime; // units are Kusec + } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; + +-typedef struct _NDIS_802_11_CONFIGURATION +-{ +- ULONG Length; // Length of structure +- ULONG BeaconPeriod; // units are Kusec +- ULONG ATIMWindow; // units are Kusec +- ULONG DSConfig; // Frequency, units are kHz +- NDIS_802_11_CONFIGURATION_FH FHConfig; ++typedef struct _NDIS_802_11_CONFIGURATION { ++ ULONG Length; // Length of structure ++ ULONG BeaconPeriod; // units are Kusec ++ ULONG ATIMWindow; // units are Kusec ++ ULONG DSConfig; // Frequency, units are kHz ++ NDIS_802_11_CONFIGURATION_FH FHConfig; + } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; + +-typedef struct _NDIS_802_11_STATISTICS +-{ +- ULONG Length; // Length of structure +- LARGE_INTEGER TransmittedFragmentCount; +- LARGE_INTEGER MulticastTransmittedFrameCount; +- LARGE_INTEGER FailedCount; +- LARGE_INTEGER RetryCount; +- LARGE_INTEGER MultipleRetryCount; +- LARGE_INTEGER RTSSuccessCount; +- LARGE_INTEGER RTSFailureCount; +- LARGE_INTEGER ACKFailureCount; +- LARGE_INTEGER FrameDuplicateCount; +- LARGE_INTEGER ReceivedFragmentCount; +- LARGE_INTEGER MulticastReceivedFrameCount; +- LARGE_INTEGER FCSErrorCount; +- LARGE_INTEGER TKIPLocalMICFailures; +- LARGE_INTEGER TKIPRemoteMICErrors; +- LARGE_INTEGER TKIPICVErrors; +- LARGE_INTEGER TKIPCounterMeasuresInvoked; +- LARGE_INTEGER TKIPReplays; +- LARGE_INTEGER CCMPFormatErrors; +- LARGE_INTEGER CCMPReplays; +- LARGE_INTEGER CCMPDecryptErrors; +- LARGE_INTEGER FourWayHandshakeFailures; ++typedef struct _NDIS_802_11_STATISTICS { ++ ULONG Length; // Length of structure ++ LARGE_INTEGER TransmittedFragmentCount; ++ LARGE_INTEGER MulticastTransmittedFrameCount; ++ LARGE_INTEGER FailedCount; ++ LARGE_INTEGER RetryCount; ++ LARGE_INTEGER MultipleRetryCount; ++ LARGE_INTEGER RTSSuccessCount; ++ LARGE_INTEGER RTSFailureCount; ++ LARGE_INTEGER ACKFailureCount; ++ LARGE_INTEGER FrameDuplicateCount; ++ LARGE_INTEGER ReceivedFragmentCount; ++ LARGE_INTEGER MulticastReceivedFrameCount; ++ LARGE_INTEGER FCSErrorCount; ++ LARGE_INTEGER TKIPLocalMICFailures; ++ LARGE_INTEGER TKIPRemoteMICErrors; ++ LARGE_INTEGER TKIPICVErrors; ++ LARGE_INTEGER TKIPCounterMeasuresInvoked; ++ LARGE_INTEGER TKIPReplays; ++ LARGE_INTEGER CCMPFormatErrors; ++ LARGE_INTEGER CCMPReplays; ++ LARGE_INTEGER CCMPDecryptErrors; ++ LARGE_INTEGER FourWayHandshakeFailures; + } NDIS_802_11_STATISTICS, *PNDIS_802_11_STATISTICS; + +-typedef ULONG NDIS_802_11_KEY_INDEX; +-typedef ULONGLONG NDIS_802_11_KEY_RSC; ++typedef ULONG NDIS_802_11_KEY_INDEX; ++typedef ULONGLONG NDIS_802_11_KEY_RSC; + +-#define MAX_RADIUS_SRV_NUM 2 // 802.1x failover number ++#define MAX_RADIUS_SRV_NUM 2 // 802.1x failover number + + typedef struct PACKED _RADIUS_SRV_INFO { +- UINT32 radius_ip; +- UINT32 radius_port; +- UCHAR radius_key[64]; +- UCHAR radius_key_len; ++ UINT32 radius_ip; ++ UINT32 radius_port; ++ UCHAR radius_key[64]; ++ UCHAR radius_key_len; + } RADIUS_SRV_INFO, *PRADIUS_SRV_INFO; + +-typedef struct PACKED _RADIUS_KEY_INFO +-{ +- UCHAR radius_srv_num; +- RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; +- UCHAR ieee8021xWEP; // dynamic WEP +- UCHAR key_index; +- UCHAR key_length; // length of key in bytes +- UCHAR key_material[13]; ++typedef struct PACKED _RADIUS_KEY_INFO { ++ UCHAR radius_srv_num; ++ RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; ++ UCHAR ieee8021xWEP; // dynamic WEP ++ UCHAR key_index; ++ UCHAR key_length; // length of key in bytes ++ UCHAR key_material[13]; + } RADIUS_KEY_INFO, *PRADIUS_KEY_INFO; + + // It's used by 802.1x daemon to require relative configuration +-typedef struct PACKED _RADIUS_CONF +-{ +- UINT32 Length; // Length of this structure +- UCHAR mbss_num; // indicate multiple BSS number +- UINT32 own_ip_addr; +- UINT32 retry_interval; +- UINT32 session_timeout_interval; +- UCHAR EAPifname[8][IFNAMSIZ]; +- UCHAR EAPifname_len[8]; +- UCHAR PreAuthifname[8][IFNAMSIZ]; +- UCHAR PreAuthifname_len[8]; +- RADIUS_KEY_INFO RadiusInfo[8]; ++typedef struct PACKED _RADIUS_CONF { ++ UINT32 Length; // Length of this structure ++ UCHAR mbss_num; // indicate multiple BSS number ++ UINT32 own_ip_addr; ++ UINT32 retry_interval; ++ UINT32 session_timeout_interval; ++ UCHAR EAPifname[8][IFNAMSIZ]; ++ UCHAR EAPifname_len[8]; ++ UCHAR PreAuthifname[8][IFNAMSIZ]; ++ UCHAR PreAuthifname_len[8]; ++ RADIUS_KEY_INFO RadiusInfo[8]; + } RADIUS_CONF, *PRADIUS_CONF; + +- +- + // Key mapping keys require a BSSID +-typedef struct _NDIS_802_11_KEY +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; +- UINT KeyLength; // length of key in bytes +- NDIS_802_11_MAC_ADDRESS BSSID; +- NDIS_802_11_KEY_RSC KeyRSC; +- UCHAR KeyMaterial[1]; // variable length depending on above field ++typedef struct _NDIS_802_11_KEY { ++ UINT Length; // Length of this structure ++ UINT KeyIndex; ++ UINT KeyLength; // length of key in bytes ++ NDIS_802_11_MAC_ADDRESS BSSID; ++ NDIS_802_11_KEY_RSC KeyRSC; ++ UCHAR KeyMaterial[1]; // variable length depending on above field + } NDIS_802_11_KEY, *PNDIS_802_11_KEY; + +-typedef struct _NDIS_802_11_PASSPHRASE +-{ +- UINT KeyLength; // length of key in bytes +- NDIS_802_11_MAC_ADDRESS BSSID; +- UCHAR KeyMaterial[1]; // variable length depending on above field ++typedef struct _NDIS_802_11_PASSPHRASE { ++ UINT KeyLength; // length of key in bytes ++ NDIS_802_11_MAC_ADDRESS BSSID; ++ UCHAR KeyMaterial[1]; // variable length depending on above field + } NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; + +-typedef struct _NDIS_802_11_REMOVE_KEY +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; +- NDIS_802_11_MAC_ADDRESS BSSID; ++typedef struct _NDIS_802_11_REMOVE_KEY { ++ UINT Length; // Length of this structure ++ UINT KeyIndex; ++ NDIS_802_11_MAC_ADDRESS BSSID; + } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; + +-typedef struct _NDIS_802_11_WEP +-{ +- UINT Length; // Length of this structure +- UINT KeyIndex; // 0 is the per-client key, 1-N are the +- // global keys +- UINT KeyLength; // length of key in bytes +- UCHAR KeyMaterial[1];// variable length depending on above field ++typedef struct _NDIS_802_11_WEP { ++ UINT Length; // Length of this structure ++ UINT KeyIndex; // 0 is the per-client key, 1-N are the ++ // global keys ++ UINT KeyLength; // length of key in bytes ++ UCHAR KeyMaterial[1]; // variable length depending on above field + } NDIS_802_11_WEP, *PNDIS_802_11_WEP; + +- +-typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE +-{ +- Ndis802_11IBSS, +- Ndis802_11Infrastructure, +- Ndis802_11AutoUnknown, +- Ndis802_11Monitor, +- Ndis802_11InfrastructureMax // Not a real value, defined as upper bound ++typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { ++ Ndis802_11IBSS, ++ Ndis802_11Infrastructure, ++ Ndis802_11AutoUnknown, ++ Ndis802_11Monitor, ++ Ndis802_11InfrastructureMax // Not a real value, defined as upper bound + } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; + + // Add new authentication modes +-typedef enum _NDIS_802_11_AUTHENTICATION_MODE +-{ +- Ndis802_11AuthModeOpen, +- Ndis802_11AuthModeShared, +- Ndis802_11AuthModeAutoSwitch, +- Ndis802_11AuthModeWPA, +- Ndis802_11AuthModeWPAPSK, +- Ndis802_11AuthModeWPANone, +- Ndis802_11AuthModeWPA2, +- Ndis802_11AuthModeWPA2PSK, +- Ndis802_11AuthModeWPA1WPA2, ++typedef enum _NDIS_802_11_AUTHENTICATION_MODE { ++ Ndis802_11AuthModeOpen, ++ Ndis802_11AuthModeShared, ++ Ndis802_11AuthModeAutoSwitch, ++ Ndis802_11AuthModeWPA, ++ Ndis802_11AuthModeWPAPSK, ++ Ndis802_11AuthModeWPANone, ++ Ndis802_11AuthModeWPA2, ++ Ndis802_11AuthModeWPA2PSK, ++ Ndis802_11AuthModeWPA1WPA2, + Ndis802_11AuthModeWPA1PSKWPA2PSK, +- Ndis802_11AuthModeMax // Not a real mode, defined as upper bound ++ Ndis802_11AuthModeMax // Not a real mode, defined as upper bound + } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; + +-typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates +-typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates ++typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates ++typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates + +-typedef struct PACKED _NDIS_802_11_SSID +-{ +- UINT SsidLength; // length of SSID field below, in bytes; +- // this can be zero. +- UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; // SSID information field ++typedef struct PACKED _NDIS_802_11_SSID { ++ UINT SsidLength; // length of SSID field below, in bytes; ++ // this can be zero. ++ UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; // SSID information field + } NDIS_802_11_SSID, *PNDIS_802_11_SSID; + +- +-typedef struct PACKED _NDIS_WLAN_BSSID +-{ +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID +- UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- ULONG Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal strength in dBm +- NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; +- NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +- NDIS_802_11_RATES SupportedRates; ++typedef struct PACKED _NDIS_WLAN_BSSID { ++ ULONG Length; // Length of this structure ++ NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID ++ UCHAR Reserved[2]; ++ NDIS_802_11_SSID Ssid; // SSID ++ ULONG Privacy; // WEP encryption requirement ++ NDIS_802_11_RSSI Rssi; // receive signal strength in dBm ++ NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; ++ NDIS_802_11_CONFIGURATION Configuration; ++ NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; ++ NDIS_802_11_RATES SupportedRates; + } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; + +-typedef struct PACKED _NDIS_802_11_BSSID_LIST +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_WLAN_BSSID Bssid[1]; ++typedef struct PACKED _NDIS_802_11_BSSID_LIST { ++ UINT NumberOfItems; // in list below, at least 1 ++ NDIS_WLAN_BSSID Bssid[1]; + } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; + + // Added Capabilities, IELength and IEs for each BSSID +-typedef struct PACKED _NDIS_WLAN_BSSID_EX +-{ +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID +- UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- UINT Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal +- // strength in dBm +- NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; +- NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +- NDIS_802_11_RATES_EX SupportedRates; +- ULONG IELength; +- UCHAR IEs[1]; ++typedef struct PACKED _NDIS_WLAN_BSSID_EX { ++ ULONG Length; // Length of this structure ++ NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID ++ UCHAR Reserved[2]; ++ NDIS_802_11_SSID Ssid; // SSID ++ UINT Privacy; // WEP encryption requirement ++ NDIS_802_11_RSSI Rssi; // receive signal ++ // strength in dBm ++ NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; ++ NDIS_802_11_CONFIGURATION Configuration; ++ NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; ++ NDIS_802_11_RATES_EX SupportedRates; ++ ULONG IELength; ++ UCHAR IEs[1]; + } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; + +-typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX +-{ +- UINT NumberOfItems; // in list below, at least 1 +- NDIS_WLAN_BSSID_EX Bssid[1]; ++typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX { ++ UINT NumberOfItems; // in list below, at least 1 ++ NDIS_WLAN_BSSID_EX Bssid[1]; + } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; + +-typedef struct PACKED _NDIS_802_11_FIXED_IEs +-{ +- UCHAR Timestamp[8]; +- USHORT BeaconInterval; +- USHORT Capabilities; ++typedef struct PACKED _NDIS_802_11_FIXED_IEs { ++ UCHAR Timestamp[8]; ++ USHORT BeaconInterval; ++ USHORT Capabilities; + } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; + +-typedef struct _NDIS_802_11_VARIABLE_IEs +-{ +- UCHAR ElementID; +- UCHAR Length; // Number of bytes in data field +- UCHAR data[1]; ++typedef struct _NDIS_802_11_VARIABLE_IEs { ++ UCHAR ElementID; ++ UCHAR Length; // Number of bytes in data field ++ UCHAR data[1]; + } NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; + +-typedef ULONG NDIS_802_11_FRAGMENTATION_THRESHOLD; ++typedef ULONG NDIS_802_11_FRAGMENTATION_THRESHOLD; + +-typedef ULONG NDIS_802_11_RTS_THRESHOLD; ++typedef ULONG NDIS_802_11_RTS_THRESHOLD; + +-typedef ULONG NDIS_802_11_ANTENNA; ++typedef ULONG NDIS_802_11_ANTENNA; + +-typedef enum _NDIS_802_11_PRIVACY_FILTER +-{ +- Ndis802_11PrivFilterAcceptAll, +- Ndis802_11PrivFilter8021xWEP ++typedef enum _NDIS_802_11_PRIVACY_FILTER { ++ Ndis802_11PrivFilterAcceptAll, ++ Ndis802_11PrivFilter8021xWEP + } NDIS_802_11_PRIVACY_FILTER, *PNDIS_802_11_PRIVACY_FILTER; + + // Added new encryption types + // Also aliased typedef to new name +-typedef enum _NDIS_802_11_WEP_STATUS +-{ +- Ndis802_11WEPEnabled, +- Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, +- Ndis802_11WEPDisabled, +- Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, +- Ndis802_11WEPKeyAbsent, +- Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, +- Ndis802_11WEPNotSupported, +- Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, +- Ndis802_11Encryption2Enabled, +- Ndis802_11Encryption2KeyAbsent, +- Ndis802_11Encryption3Enabled, +- Ndis802_11Encryption3KeyAbsent, +- Ndis802_11Encryption4Enabled, // TKIP or AES mix +- Ndis802_11Encryption4KeyAbsent, +- Ndis802_11GroupWEP40Enabled, ++typedef enum _NDIS_802_11_WEP_STATUS { ++ Ndis802_11WEPEnabled, ++ Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, ++ Ndis802_11WEPDisabled, ++ Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, ++ Ndis802_11WEPKeyAbsent, ++ Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, ++ Ndis802_11WEPNotSupported, ++ Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, ++ Ndis802_11Encryption2Enabled, ++ Ndis802_11Encryption2KeyAbsent, ++ Ndis802_11Encryption3Enabled, ++ Ndis802_11Encryption3KeyAbsent, ++ Ndis802_11Encryption4Enabled, // TKIP or AES mix ++ Ndis802_11Encryption4KeyAbsent, ++ Ndis802_11GroupWEP40Enabled, + Ndis802_11GroupWEP104Enabled, + } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, +- NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; ++ NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS; + +-typedef enum _NDIS_802_11_RELOAD_DEFAULTS +-{ +- Ndis802_11ReloadWEPKeys ++typedef enum _NDIS_802_11_RELOAD_DEFAULTS { ++ Ndis802_11ReloadWEPKeys + } NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS; + + #define NDIS_802_11_AI_REQFI_CAPABILITIES 1 +@@ -469,122 +436,110 @@ typedef enum _NDIS_802_11_RELOAD_DEFAULTS + #define NDIS_802_11_AI_RESFI_STATUSCODE 2 + #define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 + +-typedef struct _NDIS_802_11_AI_REQFI +-{ +- USHORT Capabilities; +- USHORT ListenInterval; +- NDIS_802_11_MAC_ADDRESS CurrentAPAddress; ++typedef struct _NDIS_802_11_AI_REQFI { ++ USHORT Capabilities; ++ USHORT ListenInterval; ++ NDIS_802_11_MAC_ADDRESS CurrentAPAddress; + } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; + +-typedef struct _NDIS_802_11_AI_RESFI +-{ +- USHORT Capabilities; +- USHORT StatusCode; +- USHORT AssociationId; ++typedef struct _NDIS_802_11_AI_RESFI { ++ USHORT Capabilities; ++ USHORT StatusCode; ++ USHORT AssociationId; + } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; + +-typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION +-{ +- ULONG Length; +- USHORT AvailableRequestFixedIEs; +- NDIS_802_11_AI_REQFI RequestFixedIEs; +- ULONG RequestIELength; +- ULONG OffsetRequestIEs; +- USHORT AvailableResponseFixedIEs; +- NDIS_802_11_AI_RESFI ResponseFixedIEs; +- ULONG ResponseIELength; +- ULONG OffsetResponseIEs; ++typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION { ++ ULONG Length; ++ USHORT AvailableRequestFixedIEs; ++ NDIS_802_11_AI_REQFI RequestFixedIEs; ++ ULONG RequestIELength; ++ ULONG OffsetRequestIEs; ++ USHORT AvailableResponseFixedIEs; ++ NDIS_802_11_AI_RESFI ResponseFixedIEs; ++ ULONG ResponseIELength; ++ ULONG OffsetResponseIEs; + } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; + +-typedef struct _NDIS_802_11_AUTHENTICATION_EVENT +-{ +- NDIS_802_11_STATUS_INDICATION Status; +- NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; ++typedef struct _NDIS_802_11_AUTHENTICATION_EVENT { ++ NDIS_802_11_STATUS_INDICATION Status; ++ NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; + } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; + + // 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE +-typedef enum _NDIS_802_11_MEDIA_STREAM_MODE +-{ +- Ndis802_11MediaStreamOff, +- Ndis802_11MediaStreamOn, ++typedef enum _NDIS_802_11_MEDIA_STREAM_MODE { ++ Ndis802_11MediaStreamOff, ++ Ndis802_11MediaStreamOn, + } NDIS_802_11_MEDIA_STREAM_MODE, *PNDIS_802_11_MEDIA_STREAM_MODE; + + // PMKID Structures +-typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; ++typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; + +-typedef struct _BSSID_INFO +-{ +- NDIS_802_11_MAC_ADDRESS BSSID; +- NDIS_802_11_PMKID_VALUE PMKID; ++typedef struct _BSSID_INFO { ++ NDIS_802_11_MAC_ADDRESS BSSID; ++ NDIS_802_11_PMKID_VALUE PMKID; + } BSSID_INFO, *PBSSID_INFO; + +-typedef struct _NDIS_802_11_PMKID +-{ +- UINT Length; +- UINT BSSIDInfoCount; +- BSSID_INFO BSSIDInfo[1]; ++typedef struct _NDIS_802_11_PMKID { ++ UINT Length; ++ UINT BSSIDInfoCount; ++ BSSID_INFO BSSIDInfo[1]; + } NDIS_802_11_PMKID, *PNDIS_802_11_PMKID; + +-typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION +-{ +- NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported; +- NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported; +-} NDIS_802_11_AUTHENTICATION_ENCRYPTION, *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; +- +-typedef struct _NDIS_802_11_CAPABILITY +-{ +- ULONG Length; +- ULONG Version; +- ULONG NoOfPMKIDs; +- ULONG NoOfAuthEncryptPairsSupported; +- NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1]; ++typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION { ++ NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported; ++ NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported; ++} NDIS_802_11_AUTHENTICATION_ENCRYPTION, ++ *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; ++ ++typedef struct _NDIS_802_11_CAPABILITY { ++ ULONG Length; ++ ULONG Version; ++ ULONG NoOfPMKIDs; ++ ULONG NoOfAuthEncryptPairsSupported; ++ NDIS_802_11_AUTHENTICATION_ENCRYPTION ++ AuthenticationEncryptionSupported[1]; + } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; + +-#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon ++#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon + #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) + + #define RTPRIV_IOCTL_STATISTICS (SIOCIWFIRSTPRIV + 0x09) + #define RTPRIV_IOCTL_ADD_PMKID_CACHE (SIOCIWFIRSTPRIV + 0x0A) + #define RTPRIV_IOCTL_RADIUS_DATA (SIOCIWFIRSTPRIV + 0x0C) + #define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D) +-#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) ++#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) + #define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) + + #define RTPRIV_IOCTL_SHOW (SIOCIWFIRSTPRIV + 0x11) + enum { +- SHOW_CONN_STATUS = 4, +- SHOW_DRVIER_VERION = 5, +- SHOW_BA_INFO = 6, ++ SHOW_CONN_STATUS = 4, ++ SHOW_DRVIER_VERION = 5, ++ SHOW_BA_INFO = 6, + SHOW_DESC_INFO = 7, + #ifdef RTMP_MAC_USB + SHOW_RXBULK_INFO = 8, + SHOW_TXBULK_INFO = 9, + #endif // RTMP_MAC_USB // +- RAIO_OFF = 10, +- RAIO_ON = 11, ++ RAIO_OFF = 10, ++ RAIO_ON = 11, + SHOW_CFG_VALUE = 20, + SHOW_ADHOC_ENTRY_INFO = 21, + }; + +- +- +- +- +- + #define OID_802_11_BUILD_CHANNEL_EX 0x0714 + #define OID_802_11_GET_CH_LIST 0x0715 + #define OID_802_11_GET_COUNTRY_CODE 0x0716 + #define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717 + +-#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk ++#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk + #define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741 + #define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742 + #define RT_OID_WSC_SET_CONN_BY_PROFILE_INDEX 0x0743 + #define RT_OID_WSC_SET_ACTION 0x0744 + #define RT_OID_WSC_SET_SSID 0x0745 + #define RT_OID_WSC_SET_PIN_CODE 0x0746 +-#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC +-#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar ++#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC ++#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar + #define RT_OID_WSC_SET_PROFILE 0x0749 + #define RT_OID_WSC_CONFIG_STATUS 0x074F + #define RT_OID_802_11_WSC_QUERY_PROFILE 0x0750 +@@ -604,24 +559,24 @@ enum { + #define OID_MH_802_1X_SUPPORTED 0xFFEDC100 + + // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! +-typedef union _HTTRANSMIT_SETTING { +- struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz +- USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +-// USHORT rsv:3; +- USHORT rsv:2; +- USHORT TxBF:1; +- USHORT MODE:2; // Use definition MODE_xxx. +- } field; +- USHORT word; +- } HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING; ++typedef union _HTTRANSMIT_SETTING { ++ struct { ++ USHORT MCS:7; // MCS ++ USHORT BW:1; //channel bandwidth 20MHz or 40 MHz ++ USHORT ShortGI:1; ++ USHORT STBC:2; //SPACE ++// USHORT rsv:3; ++ USHORT rsv:2; ++ USHORT TxBF:1; ++ USHORT MODE:2; // Use definition MODE_xxx. ++ } field; ++ USHORT word; ++} HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING; + + typedef enum _RT_802_11_PREAMBLE { +- Rt802_11PreambleLong, +- Rt802_11PreambleShort, +- Rt802_11PreambleAuto ++ Rt802_11PreambleLong, ++ Rt802_11PreambleShort, ++ Rt802_11PreambleAuto + } RT_802_11_PREAMBLE, *PRT_802_11_PREAMBLE; + + typedef enum _RT_802_11_PHY_MODE { +@@ -631,200 +586,194 @@ typedef enum _RT_802_11_PHY_MODE { + PHY_11ABG_MIXED, + PHY_11G, + PHY_11ABGN_MIXED, // both band 5 +- PHY_11N_2_4G, // 11n-only with 2.4G band 6 +- PHY_11GN_MIXED, // 2.4G band 7 +- PHY_11AN_MIXED, // 5G band 8 ++ PHY_11N_2_4G, // 11n-only with 2.4G band 6 ++ PHY_11GN_MIXED, // 2.4G band 7 ++ PHY_11AN_MIXED, // 5G band 8 + PHY_11BGN_MIXED, // if check 802.11b. 9 + PHY_11AGN_MIXED, // if check 802.11b. 10 +- PHY_11N_5G, // 11n-only with 5G band 11 ++ PHY_11N_5G, // 11n-only with 5G band 11 + } RT_802_11_PHY_MODE; + + // put all proprietery for-query objects here to reduce # of Query_OID + typedef struct _RT_802_11_LINK_STATUS { +- ULONG CurrTxRate; // in units of 0.5Mbps +- ULONG ChannelQuality; // 0..100 % +- ULONG TxByteCount; // both ok and fail +- ULONG RxByteCount; // both ok and fail +- ULONG CentralChannel; // 40MHz central channel number ++ ULONG CurrTxRate; // in units of 0.5Mbps ++ ULONG ChannelQuality; // 0..100 % ++ ULONG TxByteCount; // both ok and fail ++ ULONG RxByteCount; // both ok and fail ++ ULONG CentralChannel; // 40MHz central channel number + } RT_802_11_LINK_STATUS, *PRT_802_11_LINK_STATUS; + + typedef struct _RT_802_11_EVENT_LOG { +- LARGE_INTEGER SystemTime; // timestammp via NdisGetCurrentSystemTime() +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Event; // EVENT_xxx ++ LARGE_INTEGER SystemTime; // timestammp via NdisGetCurrentSystemTime() ++ UCHAR Addr[MAC_ADDR_LENGTH]; ++ USHORT Event; // EVENT_xxx + } RT_802_11_EVENT_LOG, *PRT_802_11_EVENT_LOG; + + typedef struct _RT_802_11_EVENT_TABLE { +- ULONG Num; +- ULONG Rsv; // to align Log[] at LARGE_INEGER boundary +- RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; ++ ULONG Num; ++ ULONG Rsv; // to align Log[] at LARGE_INEGER boundary ++ RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; + } RT_802_11_EVENT_TABLE, PRT_802_11_EVENT_TABLE; + + // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! +-typedef union _MACHTTRANSMIT_SETTING { +- struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz +- USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +- USHORT rsv:3; +- USHORT MODE:2; // Use definition MODE_xxx. +- } field; +- USHORT word; +- } MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; ++typedef union _MACHTTRANSMIT_SETTING { ++ struct { ++ USHORT MCS:7; // MCS ++ USHORT BW:1; //channel bandwidth 20MHz or 40 MHz ++ USHORT ShortGI:1; ++ USHORT STBC:2; //SPACE ++ USHORT rsv:3; ++ USHORT MODE:2; // Use definition MODE_xxx. ++ } field; ++ USHORT word; ++} MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; + + typedef struct _RT_802_11_MAC_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- UCHAR Aid; +- UCHAR Psm; // 0:PWR_ACTIVE, 1:PWR_SAVE +- UCHAR MimoPs; // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- UINT32 ConnectedTime; +- MACHTTRANSMIT_SETTING TxRate; ++ UCHAR Addr[MAC_ADDR_LENGTH]; ++ UCHAR Aid; ++ UCHAR Psm; // 0:PWR_ACTIVE, 1:PWR_SAVE ++ UCHAR MimoPs; // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled ++ CHAR AvgRssi0; ++ CHAR AvgRssi1; ++ CHAR AvgRssi2; ++ UINT32 ConnectedTime; ++ MACHTTRANSMIT_SETTING TxRate; + } RT_802_11_MAC_ENTRY, *PRT_802_11_MAC_ENTRY; + + typedef struct _RT_802_11_MAC_TABLE { +- ULONG Num; +- RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; ++ ULONG Num; ++ RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; + } RT_802_11_MAC_TABLE, *PRT_802_11_MAC_TABLE; + + // structure for query/set hardware register - MAC, BBP, RF register + typedef struct _RT_802_11_HARDWARE_REGISTER { +- ULONG HardwareType; // 0:MAC, 1:BBP, 2:RF register, 3:EEPROM +- ULONG Offset; // Q/S register offset addr +- ULONG Data; // R/W data buffer ++ ULONG HardwareType; // 0:MAC, 1:BBP, 2:RF register, 3:EEPROM ++ ULONG Offset; // Q/S register offset addr ++ ULONG Data; // R/W data buffer + } RT_802_11_HARDWARE_REGISTER, *PRT_802_11_HARDWARE_REGISTER; + + typedef struct _RT_802_11_AP_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG IsolateInterStaTraffic; // 0-disable, 1-enable isolation +- ULONG HideSsid; // 0-disable, 1-enable hiding +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY ++ ULONG EnableTxBurst; // 0-disable, 1-enable ++ ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate ++ ULONG IsolateInterStaTraffic; // 0-disable, 1-enable isolation ++ ULONG HideSsid; // 0-disable, 1-enable hiding ++ ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF ++ ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time ++ ULONG Rsv1; // must be 0 ++ ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY + } RT_802_11_AP_CONFIG, *PRT_802_11_AP_CONFIG; + + // structure to query/set STA_CONFIG + typedef struct _RT_802_11_STA_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time when applicable +- ULONG AdhocMode; // 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only +- ULONG HwRadioStatus; // 0-OFF, 1-ON, default is 1, Read-Only +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY ++ ULONG EnableTxBurst; // 0-disable, 1-enable ++ ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate ++ ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF ++ ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time when applicable ++ ULONG AdhocMode; // 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only ++ ULONG HwRadioStatus; // 0-OFF, 1-ON, default is 1, Read-Only ++ ULONG Rsv1; // must be 0 ++ ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY + } RT_802_11_STA_CONFIG, *PRT_802_11_STA_CONFIG; + + // + // For OID Query or Set about BA structure + // +-typedef struct _OID_BACAP_STRUC { +- UCHAR RxBAWinLimit; +- UCHAR TxBAWinLimit; +- UCHAR Policy; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR MpduDensity; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR AmsduEnable; //Enable AMSDU transmisstion +- UCHAR AmsduSize; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; +- UCHAR MMPSmode; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable +- BOOLEAN AutoBA; // Auto BA will automatically ++typedef struct _OID_BACAP_STRUC { ++ UCHAR RxBAWinLimit; ++ UCHAR TxBAWinLimit; ++ UCHAR Policy; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid ++ UCHAR MpduDensity; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid ++ UCHAR AmsduEnable; //Enable AMSDU transmisstion ++ UCHAR AmsduSize; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; ++ UCHAR MMPSmode; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable ++ BOOLEAN AutoBA; // Auto BA will automatically + } OID_BACAP_STRUC, *POID_BACAP_STRUC; + + typedef struct _RT_802_11_ACL_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Rsv; ++ UCHAR Addr[MAC_ADDR_LENGTH]; ++ USHORT Rsv; + } RT_802_11_ACL_ENTRY, *PRT_802_11_ACL_ENTRY; + + typedef struct PACKED _RT_802_11_ACL { +- ULONG Policy; // 0-disable, 1-positive list, 2-negative list +- ULONG Num; +- RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; ++ ULONG Policy; // 0-disable, 1-positive list, 2-negative list ++ ULONG Num; ++ RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; + } RT_802_11_ACL, *PRT_802_11_ACL; + + typedef struct _RT_802_11_WDS { +- ULONG Num; +- NDIS_802_11_MAC_ADDRESS Entry[24/*MAX_NUM_OF_WDS_LINK*/]; +- ULONG KeyLength; +- UCHAR KeyMaterial[32]; ++ ULONG Num; ++ NDIS_802_11_MAC_ADDRESS Entry[24 /*MAX_NUM_OF_WDS_LINK */ ]; ++ ULONG KeyLength; ++ UCHAR KeyMaterial[32]; + } RT_802_11_WDS, *PRT_802_11_WDS; + + typedef struct _RT_802_11_TX_RATES_ { +- UCHAR SupRateLen; +- UCHAR SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; +- UCHAR ExtRateLen; +- UCHAR ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; ++ UCHAR SupRateLen; ++ UCHAR SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; ++ UCHAR ExtRateLen; ++ UCHAR ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; + } RT_802_11_TX_RATES, *PRT_802_11_TX_RATES; + +- + // Definition of extra information code +-#define GENERAL_LINK_UP 0x0 // Link is Up +-#define GENERAL_LINK_DOWN 0x1 // Link is Down +-#define HW_RADIO_OFF 0x2 // Hardware radio off +-#define SW_RADIO_OFF 0x3 // Software radio off +-#define AUTH_FAIL 0x4 // Open authentication fail +-#define AUTH_FAIL_KEYS 0x5 // Shared authentication fail +-#define ASSOC_FAIL 0x6 // Association failed +-#define EAP_MIC_FAILURE 0x7 // Deauthencation because MIC failure +-#define EAP_4WAY_TIMEOUT 0x8 // Deauthencation on 4-way handshake timeout +-#define EAP_GROUP_KEY_TIMEOUT 0x9 // Deauthencation on group key handshake timeout +-#define EAP_SUCCESS 0xa // EAP succeed +-#define DETECT_RADAR_SIGNAL 0xb // Radar signal occur in current channel +-#define EXTRA_INFO_MAX 0xb // Indicate Last OID ++#define GENERAL_LINK_UP 0x0 // Link is Up ++#define GENERAL_LINK_DOWN 0x1 // Link is Down ++#define HW_RADIO_OFF 0x2 // Hardware radio off ++#define SW_RADIO_OFF 0x3 // Software radio off ++#define AUTH_FAIL 0x4 // Open authentication fail ++#define AUTH_FAIL_KEYS 0x5 // Shared authentication fail ++#define ASSOC_FAIL 0x6 // Association failed ++#define EAP_MIC_FAILURE 0x7 // Deauthencation because MIC failure ++#define EAP_4WAY_TIMEOUT 0x8 // Deauthencation on 4-way handshake timeout ++#define EAP_GROUP_KEY_TIMEOUT 0x9 // Deauthencation on group key handshake timeout ++#define EAP_SUCCESS 0xa // EAP succeed ++#define DETECT_RADAR_SIGNAL 0xb // Radar signal occur in current channel ++#define EXTRA_INFO_MAX 0xb // Indicate Last OID + + #define EXTRA_INFO_CLEAR 0xffffffff + + // This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. + typedef struct { +- RT_802_11_PHY_MODE PhyMode; // +- UCHAR TransmitNo; +- UCHAR HtMode; //HTMODE_GF or HTMODE_MM +- UCHAR ExtOffset; //extension channel above or below +- UCHAR MCS; +- UCHAR BW; +- UCHAR STBC; +- UCHAR SHORTGI; +- UCHAR rsv; ++ RT_802_11_PHY_MODE PhyMode; // ++ UCHAR TransmitNo; ++ UCHAR HtMode; //HTMODE_GF or HTMODE_MM ++ UCHAR ExtOffset; //extension channel above or below ++ UCHAR MCS; ++ UCHAR BW; ++ UCHAR STBC; ++ UCHAR SHORTGI; ++ UCHAR rsv; + } OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE; + + #define MAX_CUSTOM_LEN 128 + +-typedef enum _RT_802_11_D_CLIENT_MODE +-{ +- Rt802_11_D_None, +- Rt802_11_D_Flexible, +- Rt802_11_D_Strict, ++typedef enum _RT_802_11_D_CLIENT_MODE { ++ Rt802_11_D_None, ++ Rt802_11_D_Flexible, ++ Rt802_11_D_Strict, + } RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE; + +-typedef struct _RT_CHANNEL_LIST_INFO +-{ +- UCHAR ChannelList[MAX_NUM_OF_CHS]; // list all supported channels for site survey +- UCHAR ChannelListNum; // number of channel in ChannelList[] ++typedef struct _RT_CHANNEL_LIST_INFO { ++ UCHAR ChannelList[MAX_NUM_OF_CHS]; // list all supported channels for site survey ++ UCHAR ChannelListNum; // number of channel in ChannelList[] + } RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; + + // WSC configured credential +-typedef struct _WSC_CREDENTIAL +-{ +- NDIS_802_11_SSID SSID; // mandatory +- USHORT AuthType; // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk +- USHORT EncrType; // mandatory, 1: none, 2: wep, 4: tkip, 8: aes +- UCHAR Key[64]; // mandatory, Maximum 64 byte +- USHORT KeyLength; +- UCHAR MacAddr[6]; // mandatory, AP MAC address +- UCHAR KeyIndex; // optional, default is 1 +- UCHAR Rsvd[3]; // Make alignment +-} WSC_CREDENTIAL, *PWSC_CREDENTIAL; ++typedef struct _WSC_CREDENTIAL { ++ NDIS_802_11_SSID SSID; // mandatory ++ USHORT AuthType; // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk ++ USHORT EncrType; // mandatory, 1: none, 2: wep, 4: tkip, 8: aes ++ UCHAR Key[64]; // mandatory, Maximum 64 byte ++ USHORT KeyLength; ++ UCHAR MacAddr[6]; // mandatory, AP MAC address ++ UCHAR KeyIndex; // optional, default is 1 ++ UCHAR Rsvd[3]; // Make alignment ++} WSC_CREDENTIAL, *PWSC_CREDENTIAL; + + // WSC configured profiles +-typedef struct _WSC_PROFILE +-{ +- UINT ProfileCnt; +- UINT ApplyProfileIdx; // add by johnli, fix WPS test plan 5.1.1 +- WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles +-} WSC_PROFILE, *PWSC_PROFILE; ++typedef struct _WSC_PROFILE { ++ UINT ProfileCnt; ++ UINT ApplyProfileIdx; // add by johnli, fix WPS test plan 5.1.1 ++ WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles ++} WSC_PROFILE, *PWSC_PROFILE; + + #endif // _OID_H_ +- +diff --git a/drivers/staging/rt2860/rt_config.h b/drivers/staging/rt2860/rt_config.h +index 9e684ae..8fa3f11 100644 +--- a/drivers/staging/rt2860/rt_config.h ++++ b/drivers/staging/rt2860/rt_config.h +@@ -68,5 +68,4 @@ + #include "igmp_snoop.h" + #endif // IGMP_SNOOP_SUPPORT // + +-#endif // __RT_CONFIG_H__ +- ++#endif // __RT_CONFIG_H__ +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index d16bcf3..478c8d0 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -79,7 +79,6 @@ + * Profile related sections + ***********************************************************************************/ + +- + #ifdef RTMP_MAC_PCI + #define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" + #define STA_DRIVER_VERSION "2.1.0.0" +@@ -90,8 +89,7 @@ + // RT3070 version: 2.1.1.0 + #endif // RTMP_MAC_USB // + +-extern const struct iw_handler_def rt28xx_iw_handler_def; +- ++extern const struct iw_handler_def rt28xx_iw_handler_def; + + /*********************************************************************************** + * Compiler related definitions +@@ -103,23 +101,23 @@ extern const struct iw_handler_def rt28xx_iw_handler_def; + #define INOUT + #define NDIS_STATUS INT + +- + /*********************************************************************************** + * OS Specific definitions and data structures + ***********************************************************************************/ +-typedef struct pci_dev * PPCI_DEV; +-typedef struct net_device * PNET_DEV; +-typedef void * PNDIS_PACKET; +-typedef char NDIS_PACKET; +-typedef PNDIS_PACKET * PPNDIS_PACKET; +-typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; +-typedef dma_addr_t * PNDIS_PHYSICAL_ADDRESS; +-typedef void * NDIS_HANDLE; +-typedef char * PNDIS_BUFFER; +-typedef struct pid * RTMP_OS_PID; +-typedef struct semaphore RTMP_OS_SEM; +- +-typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_dev); ++typedef struct pci_dev *PPCI_DEV; ++typedef struct net_device *PNET_DEV; ++typedef void *PNDIS_PACKET; ++typedef char NDIS_PACKET; ++typedef PNDIS_PACKET *PPNDIS_PACKET; ++typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; ++typedef dma_addr_t *PNDIS_PHYSICAL_ADDRESS; ++typedef void *NDIS_HANDLE; ++typedef char *PNDIS_BUFFER; ++typedef struct pid *RTMP_OS_PID; ++typedef struct semaphore RTMP_OS_SEM; ++ ++typedef int (*HARD_START_XMIT_FUNC) (struct sk_buff * skb, ++ struct net_device * net_dev); + + #ifdef RTMP_MAC_PCI + #ifndef PCI_DEVICE +@@ -142,11 +140,8 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_ + #define RTMP_DEC_REF(_A) 0 + #define RTMP_GET_REF(_A) 0 + +- + // This function will be called when query /proc +-struct iw_statistics *rt28xx_get_wireless_stats( +- IN struct net_device *net_dev); +- ++struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev); + + /*********************************************************************************** + * Network related constant definitions +@@ -178,18 +173,16 @@ struct iw_statistics *rt28xx_get_wireless_stats( + #define STATS_INC_RX_DROPPED(_pAd, _dev) + #define STATS_INC_TX_DROPPED(_pAd, _dev) + +- + /*********************************************************************************** + * Ralink Specific network related constant definitions + ***********************************************************************************/ +-#define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f +-#define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30 +-#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70 ++#define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f ++#define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30 ++#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70 + #define MIN_NET_DEVICE_FOR_APCLI 0x20 + #define MIN_NET_DEVICE_FOR_MESH 0x30 + #define MIN_NET_DEVICE_FOR_DLS 0x40 +-#define NET_DEVICE_REAL_IDX_MASK 0x0f // for each operation mode, we maximum support 15 entities. +- ++#define NET_DEVICE_REAL_IDX_MASK 0x0f // for each operation mode, we maximum support 15 entities. + + #define NDIS_PACKET_TYPE_DIRECTED 0 + #define NDIS_PACKET_TYPE_MULTICAST 1 +@@ -197,36 +190,32 @@ struct iw_statistics *rt28xx_get_wireless_stats( + #define NDIS_PACKET_TYPE_ALL_MULTICAST 3 + #define NDIS_PACKET_TYPE_PROMISCUOUS 4 + +- + /*********************************************************************************** + * OS signaling related constant definitions + ***********************************************************************************/ + +- + /*********************************************************************************** + * OS file operation related data structure definitions + ***********************************************************************************/ +-typedef struct file* RTMP_OS_FD; ++typedef struct file *RTMP_OS_FD; + +-typedef struct _RTMP_OS_FS_INFO_ +-{ +- int fsuid; +- int fsgid; +- mm_segment_t fs; +-}RTMP_OS_FS_INFO; ++typedef struct _RTMP_OS_FS_INFO_ { ++ int fsuid; ++ int fsgid; ++ mm_segment_t fs; ++} RTMP_OS_FS_INFO; + + #define IS_FILE_OPEN_ERR(_fd) IS_ERR((_fd)) + +- + /*********************************************************************************** + * OS semaphore related data structure and definitions + ***********************************************************************************/ +-struct os_lock { +- spinlock_t lock; +- unsigned long flags; ++struct os_lock { ++ spinlock_t lock; ++ unsigned long flags; + }; + +-typedef spinlock_t NDIS_SPIN_LOCK; ++typedef spinlock_t NDIS_SPIN_LOCK; + + // + // spin_lock enhanced for Nested spin lock +@@ -239,7 +228,6 @@ typedef spinlock_t NDIS_SPIN_LOCK; + #define NdisFreeSpinLock(lock) \ + do{}while(0) + +- + #define RTMP_SEM_LOCK(__lock) \ + { \ + spin_lock_bh((spinlock_t *)(__lock)); \ +@@ -250,7 +238,6 @@ typedef spinlock_t NDIS_SPIN_LOCK; + spin_unlock_bh((spinlock_t *)(__lock)); \ + } + +- + // sample, use semaphore lock to replace IRQ lock, 2007/11/15 + #define RTMP_IRQ_LOCK(__lock, __irqflags) \ + { \ +@@ -343,7 +330,7 @@ do { \ + /*********************************************************************************** + * OS Memory Access related data structure and definitions + ***********************************************************************************/ +-#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) ++#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) + + #define NdisMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) + #define NdisCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length) +@@ -358,32 +345,29 @@ do { \ + + #define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) + +- + /*********************************************************************************** + * OS task related data structure and definitions + ***********************************************************************************/ + #define RTMP_OS_MGMT_TASK_FLAGS CLONE_VM + +-typedef struct pid * THREAD_PID; ++typedef struct pid *THREAD_PID; + #define THREAD_PID_INIT_VALUE NULL + #define GET_PID(_v) find_get_pid((_v)) + #define GET_PID_NUMBER(_v) pid_nr((_v)) + #define CHECK_PID_LEGALITY(_pid) if (pid_nr((_pid)) > 0) + #define KILL_THREAD_PID(_A, _B, _C) kill_pid((_A), (_B), (_C)) + +-typedef struct tasklet_struct RTMP_NET_TASK_STRUCT; +-typedef struct tasklet_struct *PRTMP_NET_TASK_STRUCT; +- ++typedef struct tasklet_struct RTMP_NET_TASK_STRUCT; ++typedef struct tasklet_struct *PRTMP_NET_TASK_STRUCT; + + /*********************************************************************************** + * Timer related definitions and data structures. + **********************************************************************************/ + #define OS_HZ HZ + +-typedef struct timer_list NDIS_MINIPORT_TIMER; +-typedef struct timer_list RTMP_OS_TIMER; +-typedef void (*TIMER_FUNCTION)(unsigned long); +- ++typedef struct timer_list NDIS_MINIPORT_TIMER; ++typedef struct timer_list RTMP_OS_TIMER; ++typedef void (*TIMER_FUNCTION) (unsigned long); + + #define OS_WAIT(_time) \ + { int _i; \ +@@ -406,26 +390,25 @@ typedef void (*TIMER_FUNCTION)(unsigned long); + + #define ONE_TICK 1 + +-static inline void NdisGetSystemUpTime(ULONG *time) ++static inline void NdisGetSystemUpTime(ULONG * time) + { + *time = jiffies; + } + +- + /*********************************************************************************** + * OS specific cookie data structure binding to RTMP_ADAPTER + ***********************************************************************************/ + + struct os_cookie { + #ifdef RTMP_MAC_PCI +- struct pci_dev *pci_dev; +- struct pci_dev *parent_pci_dev; +- USHORT DeviceID; +- dma_addr_t pAd_pa; +-#endif // RTMP_MAC_PCI // ++ struct pci_dev *pci_dev; ++ struct pci_dev *parent_pci_dev; ++ USHORT DeviceID; ++ dma_addr_t pAd_pa; ++#endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +- struct usb_device *pUsb_Dev; +-#endif // RTMP_MAC_USB // ++ struct usb_device *pUsb_Dev; ++#endif // RTMP_MAC_USB // + + RTMP_NET_TASK_STRUCT rx_done_task; + RTMP_NET_TASK_STRUCT mgmt_dma_done_task; +@@ -436,21 +419,19 @@ struct os_cookie { + RTMP_NET_TASK_STRUCT tbtt_task; + #ifdef RTMP_MAC_PCI + RTMP_NET_TASK_STRUCT fifo_statistic_full_task; +-#endif // RTMP_MAC_PCI // ++#endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB + RTMP_NET_TASK_STRUCT null_frame_complete_task; + RTMP_NET_TASK_STRUCT rts_frame_complete_task; + RTMP_NET_TASK_STRUCT pspoll_frame_complete_task; +-#endif // RTMP_MAC_USB // ++#endif // RTMP_MAC_USB // + +- unsigned long apd_pid; //802.1x daemon pid +- INT ioctl_if_type; +- INT ioctl_if; ++ unsigned long apd_pid; //802.1x daemon pid ++ INT ioctl_if_type; ++ INT ioctl_if; + }; + +-typedef struct os_cookie * POS_COOKIE; +- +- ++typedef struct os_cookie *POS_COOKIE; + + /*********************************************************************************** + * OS debugging and printing related definitions and data structure +@@ -459,7 +440,7 @@ typedef struct os_cookie * POS_COOKIE; + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] + + #ifdef DBG +-extern ULONG RTDebugLevel; ++extern ULONG RTDebugLevel; + + #define DBGPRINT_RAW(Level, Fmt) \ + do{ \ +@@ -471,7 +452,6 @@ do{ \ + + #define DBGPRINT(Level, Fmt) DBGPRINT_RAW(Level, Fmt) + +- + #define DBGPRINT_ERR(Fmt) \ + { \ + printk("ERROR!!! "); \ +@@ -483,7 +463,6 @@ do{ \ + printk Fmt; \ + } + +- + #else + #define DBGPRINT(Level, Fmt) + #define DBGPRINT_RAW(Level, Fmt) +@@ -495,18 +474,18 @@ do{ \ + + void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); + +- + /********************************************************************************************************* + The following code are not revised, temporary put it here. + *********************************************************************************************************/ + +- + /*********************************************************************************** + * Device DMA Access related definitions and data structures. + **********************************************************************************/ + #ifdef RTMP_MAC_PCI +-dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, int sd_idx, int direction); +-void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int direction); ++dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, ++ int sd_idx, int direction); ++void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, ++ int direction); + + #define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ + linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) +@@ -562,8 +541,6 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + + #define NdisMIndicateStatus(_w, _x, _y, _z) + +- +- + /*********************************************************************************** + * Device Register I/O Access related definitions and data structures. + **********************************************************************************/ +@@ -729,7 +706,6 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + #define GET_OS_PKT_NEXT(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->next) + +- + #define OS_PKT_CLONED(_pkt) skb_cloned(RTPKT_TO_OSPKT(_pkt)) + + #define OS_NTOHS(_Val) \ +@@ -783,9 +759,8 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + #define RTMP_SET_PACKET_MOREDATA(_p, _morebit) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7] = _morebit) + #define RTMP_GET_PACKET_MOREDATA(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7]) + +- + // +-// Sepcific Pakcet Type definition ++// Sepcific Pakcet Type definition + // + #define RTMP_PACKET_SPECIFIC_CB_OFFSET 11 + +@@ -863,13 +838,10 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + + #define RTMP_GET_PACKET_IPV4(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_IPV4) + +- + // If this flag is set, it indicates that this EAPoL frame MUST be clear. + #define RTMP_SET_PACKET_CLEAR_EAP_FRAME(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12] = _flg) + #define RTMP_GET_PACKET_CLEAR_EAP_FRAME(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12]) + +- +- + /* use bit3 of cb[CB_OFF+16] */ + + #define RTMP_SET_PACKET_5VT(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+22] = _flg) +@@ -877,12 +849,10 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int + + /* Max skb->cb = 48B = [CB_OFF+38] */ + +- +- + /*********************************************************************************** + * Other function prototypes definitions + ***********************************************************************************/ +-void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time); ++void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time); + int rt28xx_packet_xmit(struct sk_buff *skb); + + #ifdef RTMP_MAC_PCI +@@ -892,13 +862,10 @@ int rt28xx_packet_xmit(struct sk_buff *skb); + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); + #endif // RTMP_MAC_PCI // + +-INT rt28xx_sta_ioctl( +- IN PNET_DEV net_dev, +- IN OUT struct ifreq *rq, +- IN INT cmd); ++INT rt28xx_sta_ioctl(IN PNET_DEV net_dev, IN OUT struct ifreq *rq, IN INT cmd); + +-extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char *buf); +-extern int ra_mtd_read(int num, loff_t from, size_t len, u_char *buf); ++extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char * buf); ++extern int ra_mtd_read(int num, loff_t from, size_t len, u_char * buf); + + #define GET_PAD_FROM_NET_DEV(_pAd, _net_dev) (_pAd) = (PRTMP_ADAPTER)(_net_dev)->ml_priv; + +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 2ca1ca6..f6b8f62 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -44,17 +44,14 @@ + #include "rtmp_dot11.h" + #include "rtmp_chip.h" + +- +-typedef struct _RTMP_ADAPTER RTMP_ADAPTER; +-typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; ++typedef struct _RTMP_ADAPTER RTMP_ADAPTER; ++typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; + + typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; + ++//#define DBG 1 + +-//#define DBG 1 +- +-//#define DBG_DIAGNOSE 1 +- ++//#define DBG_DIAGNOSE 1 + + //+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function + #define MAX_DATAMM_RETRY 3 +@@ -63,17 +60,17 @@ typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; + + #define MAXSEQ (0xFFF) + +-extern unsigned char SNAP_AIRONET[]; +-extern unsigned char CISCO_OUI[]; +-extern UCHAR BaSizeArray[4]; ++extern unsigned char SNAP_AIRONET[]; ++extern unsigned char CISCO_OUI[]; ++extern UCHAR BaSizeArray[4]; + + extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; + extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; + extern ULONG BIT32[32]; + extern UCHAR BIT8[8]; +-extern char* CipherName[]; +-extern char* MCSToMbps[]; +-extern UCHAR RxwiMCSToOfdmRate[12]; ++extern char *CipherName[]; ++extern char *MCSToMbps[]; ++extern UCHAR RxwiMCSToOfdmRate[12]; + extern UCHAR SNAP_802_1H[6]; + extern UCHAR SNAP_BRIDGE_TUNNEL[6]; + extern UCHAR SNAP_AIRONET[8]; +@@ -82,9 +79,9 @@ extern UCHAR EAPOL_LLC_SNAP[8]; + extern UCHAR EAPOL[2]; + extern UCHAR IPX[2]; + extern UCHAR APPLE_TALK[2]; +-extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14 +-extern UCHAR OfdmRateToRxwiMCS[]; +-extern UCHAR OfdmSignalToRateId[16] ; ++extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14 ++extern UCHAR OfdmRateToRxwiMCS[]; ++extern UCHAR OfdmSignalToRateId[16]; + extern UCHAR default_cwmin[4]; + extern UCHAR default_cwmax[4]; + extern UCHAR default_sta_aifsn[4]; +@@ -92,92 +89,88 @@ extern UCHAR MapUserPriorityToAccessCategory[8]; + + extern USHORT RateUpPER[]; + extern USHORT RateDownPER[]; +-extern UCHAR Phy11BNextRateDownward[]; +-extern UCHAR Phy11BNextRateUpward[]; +-extern UCHAR Phy11BGNextRateDownward[]; +-extern UCHAR Phy11BGNextRateUpward[]; +-extern UCHAR Phy11ANextRateDownward[]; +-extern UCHAR Phy11ANextRateUpward[]; +-extern CHAR RssiSafeLevelForTxRate[]; +-extern UCHAR RateIdToMbps[]; ++extern UCHAR Phy11BNextRateDownward[]; ++extern UCHAR Phy11BNextRateUpward[]; ++extern UCHAR Phy11BGNextRateDownward[]; ++extern UCHAR Phy11BGNextRateUpward[]; ++extern UCHAR Phy11ANextRateDownward[]; ++extern UCHAR Phy11ANextRateUpward[]; ++extern CHAR RssiSafeLevelForTxRate[]; ++extern UCHAR RateIdToMbps[]; + extern USHORT RateIdTo500Kbps[]; + +-extern UCHAR CipherSuiteWpaNoneTkip[]; +-extern UCHAR CipherSuiteWpaNoneTkipLen; +- +-extern UCHAR CipherSuiteWpaNoneAes[]; +-extern UCHAR CipherSuiteWpaNoneAesLen; +- +-extern UCHAR SsidIe; +-extern UCHAR SupRateIe; +-extern UCHAR ExtRateIe; +- +-extern UCHAR HtCapIe; +-extern UCHAR AddHtInfoIe; +-extern UCHAR NewExtChanIe; +- +-extern UCHAR ErpIe; +-extern UCHAR DsIe; +-extern UCHAR TimIe; +-extern UCHAR WpaIe; +-extern UCHAR Wpa2Ie; +-extern UCHAR IbssIe; +-extern UCHAR Ccx2Ie; +-extern UCHAR WapiIe; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WAPI_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR Ccx2IeInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR PowerConstraintIE[]; +- +- +-extern UCHAR RateSwitchTable[]; +-extern UCHAR RateSwitchTable11B[]; +-extern UCHAR RateSwitchTable11G[]; +-extern UCHAR RateSwitchTable11BG[]; +- +-extern UCHAR RateSwitchTable11BGN1S[]; +-extern UCHAR RateSwitchTable11BGN2S[]; +-extern UCHAR RateSwitchTable11BGN2SForABand[]; +-extern UCHAR RateSwitchTable11N1S[]; +-extern UCHAR RateSwitchTable11N2S[]; +-extern UCHAR RateSwitchTable11N2SForABand[]; +- +-extern UCHAR PRE_N_HT_OUI[]; +- +- +- +- +-typedef struct _RSSI_SAMPLE { +- CHAR LastRssi0; // last received RSSI +- CHAR LastRssi1; // last received RSSI +- CHAR LastRssi2; // last received RSSI +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- SHORT AvgRssi0X8; +- SHORT AvgRssi1X8; +- SHORT AvgRssi2X8; ++extern UCHAR CipherSuiteWpaNoneTkip[]; ++extern UCHAR CipherSuiteWpaNoneTkipLen; ++ ++extern UCHAR CipherSuiteWpaNoneAes[]; ++extern UCHAR CipherSuiteWpaNoneAesLen; ++ ++extern UCHAR SsidIe; ++extern UCHAR SupRateIe; ++extern UCHAR ExtRateIe; ++ ++extern UCHAR HtCapIe; ++extern UCHAR AddHtInfoIe; ++extern UCHAR NewExtChanIe; ++ ++extern UCHAR ErpIe; ++extern UCHAR DsIe; ++extern UCHAR TimIe; ++extern UCHAR WpaIe; ++extern UCHAR Wpa2Ie; ++extern UCHAR IbssIe; ++extern UCHAR Ccx2Ie; ++extern UCHAR WapiIe; ++ ++extern UCHAR WPA_OUI[]; ++extern UCHAR RSN_OUI[]; ++extern UCHAR WAPI_OUI[]; ++extern UCHAR WME_INFO_ELEM[]; ++extern UCHAR WME_PARM_ELEM[]; ++extern UCHAR Ccx2QosInfo[]; ++extern UCHAR Ccx2IeInfo[]; ++extern UCHAR RALINK_OUI[]; ++extern UCHAR PowerConstraintIE[]; ++ ++extern UCHAR RateSwitchTable[]; ++extern UCHAR RateSwitchTable11B[]; ++extern UCHAR RateSwitchTable11G[]; ++extern UCHAR RateSwitchTable11BG[]; ++ ++extern UCHAR RateSwitchTable11BGN1S[]; ++extern UCHAR RateSwitchTable11BGN2S[]; ++extern UCHAR RateSwitchTable11BGN2SForABand[]; ++extern UCHAR RateSwitchTable11N1S[]; ++extern UCHAR RateSwitchTable11N2S[]; ++extern UCHAR RateSwitchTable11N2SForABand[]; ++ ++extern UCHAR PRE_N_HT_OUI[]; ++ ++typedef struct _RSSI_SAMPLE { ++ CHAR LastRssi0; // last received RSSI ++ CHAR LastRssi1; // last received RSSI ++ CHAR LastRssi2; // last received RSSI ++ CHAR AvgRssi0; ++ CHAR AvgRssi1; ++ CHAR AvgRssi2; ++ SHORT AvgRssi0X8; ++ SHORT AvgRssi1X8; ++ SHORT AvgRssi2X8; + } RSSI_SAMPLE; + + // + // Queue structure and macros + // +-typedef struct _QUEUE_ENTRY { +- struct _QUEUE_ENTRY *Next; +-} QUEUE_ENTRY, *PQUEUE_ENTRY; ++typedef struct _QUEUE_ENTRY { ++ struct _QUEUE_ENTRY *Next; ++} QUEUE_ENTRY, *PQUEUE_ENTRY; + + // Queue structure +-typedef struct _QUEUE_HEADER { +- PQUEUE_ENTRY Head; +- PQUEUE_ENTRY Tail; +- ULONG Number; +-} QUEUE_HEADER, *PQUEUE_HEADER; ++typedef struct _QUEUE_HEADER { ++ PQUEUE_ENTRY Head; ++ PQUEUE_ENTRY Tail; ++ ULONG Number; ++} QUEUE_HEADER, *PQUEUE_HEADER; + + #define InitializeQueueHeader(QueueHeader) \ + { \ +@@ -231,8 +224,6 @@ typedef struct _QUEUE_HEADER { + (QueueHeader)->Number++; \ + } + +- +- + // + // Macros for flag and ref count operations + // +@@ -270,13 +261,11 @@ typedef struct _QUEUE_HEADER { + #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) + #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) + +- + #define INC_RING_INDEX(_idx, _RingSize) \ + { \ + (_idx) = (_idx+1) % (_RingSize); \ + } + +- + // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. + #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ + { \ +@@ -315,7 +304,6 @@ typedef struct _QUEUE_HEADER { + // ULONG Value) + // + +- + // + // Common fragment list structure - Identical to the scatter gather frag list structure + // +@@ -324,16 +312,15 @@ typedef struct _QUEUE_HEADER { + #define NIC_MAX_PHYS_BUF_COUNT 8 + + typedef struct _RTMP_SCATTER_GATHER_ELEMENT { +- PVOID Address; +- ULONG Length; +- PULONG Reserved; ++ PVOID Address; ++ ULONG Length; ++ PULONG Reserved; + } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT; + +- + typedef struct _RTMP_SCATTER_GATHER_LIST { +- ULONG NumberOfElements; +- PULONG Reserved; +- RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; ++ ULONG NumberOfElements; ++ PULONG Reserved; ++ RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; + } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; + + // +@@ -396,7 +383,6 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + } + +- + #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \ + { \ + NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \ +@@ -444,7 +430,6 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + } + +- + // Enqueue this frame to MLME engine + // We need to enqueue the whole frame because MLME need to pass data type + // information from 802.11 header +@@ -487,20 +472,16 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + STA_EXTRA_SETTING(_pAd); \ + } + +- +- + // + // Data buffer for DMA operation, the buffer must be contiguous physical memory + // Both DMA to / from CPU use the same structure. + // +-typedef struct _RTMP_DMABUF +-{ +- ULONG AllocSize; +- PVOID AllocVa; // TxBuf virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address ++typedef struct _RTMP_DMABUF { ++ ULONG AllocSize; ++ PVOID AllocVa; // TxBuf virtual address ++ NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address + } RTMP_DMABUF, *PRTMP_DMABUF; + +- + // + // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be + // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor +@@ -509,206 +490,195 @@ typedef struct _RTMP_DMABUF + // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor + // which driver should ACK upper layer when the tx is physically done or failed. + // +-typedef struct _RTMP_DMACB +-{ +- ULONG AllocSize; // Control block size +- PVOID AllocVa; // Control block virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address ++typedef struct _RTMP_DMACB { ++ ULONG AllocSize; // Control block size ++ PVOID AllocVa; // Control block virtual address ++ NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address + PNDIS_PACKET pNdisPacket; + PNDIS_PACKET pNextNdisPacket; + +- RTMP_DMABUF DmaBuf; // Associated DMA buffer structure ++ RTMP_DMABUF DmaBuf; // Associated DMA buffer structure + } RTMP_DMACB, *PRTMP_DMACB; + +- +-typedef struct _RTMP_TX_RING +-{ +- RTMP_DMACB Cell[TX_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index ++typedef struct _RTMP_TX_RING { ++ RTMP_DMACB Cell[TX_RING_SIZE]; ++ UINT32 TxCpuIdx; ++ UINT32 TxDmaIdx; ++ UINT32 TxSwFreeIdx; // software next free tx index + } RTMP_TX_RING, *PRTMP_TX_RING; + +-typedef struct _RTMP_RX_RING +-{ +- RTMP_DMACB Cell[RX_RING_SIZE]; +- UINT32 RxCpuIdx; +- UINT32 RxDmaIdx; +- INT32 RxSwReadIdx; // software next read index ++typedef struct _RTMP_RX_RING { ++ RTMP_DMACB Cell[RX_RING_SIZE]; ++ UINT32 RxCpuIdx; ++ UINT32 RxDmaIdx; ++ INT32 RxSwReadIdx; // software next read index + } RTMP_RX_RING, *PRTMP_RX_RING; + +-typedef struct _RTMP_MGMT_RING +-{ +- RTMP_DMACB Cell[MGMT_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index ++typedef struct _RTMP_MGMT_RING { ++ RTMP_DMACB Cell[MGMT_RING_SIZE]; ++ UINT32 TxCpuIdx; ++ UINT32 TxDmaIdx; ++ UINT32 TxSwFreeIdx; // software next free tx index + } RTMP_MGMT_RING, *PRTMP_MGMT_RING; + + // + // Statistic counter structure + // +-typedef struct _COUNTER_802_3 +-{ ++typedef struct _COUNTER_802_3 { + // General Stats +- ULONG GoodTransmits; +- ULONG GoodReceives; +- ULONG TxErrors; +- ULONG RxErrors; +- ULONG RxNoBuffer; ++ ULONG GoodTransmits; ++ ULONG GoodReceives; ++ ULONG TxErrors; ++ ULONG RxErrors; ++ ULONG RxNoBuffer; + + // Ethernet Stats +- ULONG RcvAlignmentErrors; +- ULONG OneCollision; +- ULONG MoreCollisions; ++ ULONG RcvAlignmentErrors; ++ ULONG OneCollision; ++ ULONG MoreCollisions; + + } COUNTER_802_3, *PCOUNTER_802_3; + + typedef struct _COUNTER_802_11 { +- ULONG Length; +- LARGE_INTEGER LastTransmittedFragmentCount; +- LARGE_INTEGER TransmittedFragmentCount; +- LARGE_INTEGER MulticastTransmittedFrameCount; +- LARGE_INTEGER FailedCount; +- LARGE_INTEGER RetryCount; +- LARGE_INTEGER MultipleRetryCount; +- LARGE_INTEGER RTSSuccessCount; +- LARGE_INTEGER RTSFailureCount; +- LARGE_INTEGER ACKFailureCount; +- LARGE_INTEGER FrameDuplicateCount; +- LARGE_INTEGER ReceivedFragmentCount; +- LARGE_INTEGER MulticastReceivedFrameCount; +- LARGE_INTEGER FCSErrorCount; ++ ULONG Length; ++ LARGE_INTEGER LastTransmittedFragmentCount; ++ LARGE_INTEGER TransmittedFragmentCount; ++ LARGE_INTEGER MulticastTransmittedFrameCount; ++ LARGE_INTEGER FailedCount; ++ LARGE_INTEGER RetryCount; ++ LARGE_INTEGER MultipleRetryCount; ++ LARGE_INTEGER RTSSuccessCount; ++ LARGE_INTEGER RTSFailureCount; ++ LARGE_INTEGER ACKFailureCount; ++ LARGE_INTEGER FrameDuplicateCount; ++ LARGE_INTEGER ReceivedFragmentCount; ++ LARGE_INTEGER MulticastReceivedFrameCount; ++ LARGE_INTEGER FCSErrorCount; + } COUNTER_802_11, *PCOUNTER_802_11; + + typedef struct _COUNTER_RALINK { +- ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput +- ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput +- ULONG BeenDisassociatedCount; +- ULONG BadCQIAutoRecoveryCount; +- ULONG PoorCQIRoamingCount; +- ULONG MgmtRingFullCount; +- ULONG RxCountSinceLastNULL; +- ULONG RxCount; +- ULONG RxRingErrCount; +- ULONG KickTxCount; +- ULONG TxRingErrCount; +- LARGE_INTEGER RealFcsErrCount; +- ULONG PendingNdisPacketCount; +- +- ULONG OneSecOsTxCount[NUM_OF_TX_RING]; +- ULONG OneSecDmaDoneCount[NUM_OF_TX_RING]; +- UINT32 OneSecTxDoneCount; +- ULONG OneSecRxCount; +- UINT32 OneSecTxAggregationCount; +- UINT32 OneSecRxAggregationCount; +- UINT32 OneSecReceivedByteCount; +- UINT32 OneSecFrameDuplicateCount; +- +- UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter +- UINT32 OneSecRxOkCnt; // RX without error +- UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count +- UINT32 OneSecRxFcsErrCnt; // CRC error +- UINT32 OneSecBeaconSentCnt; +- UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount +- UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt +- ULONG DuplicateRcv; +- ULONG TxAggCount; +- ULONG TxNonAggCount; +- ULONG TxAgg1MPDUCount; +- ULONG TxAgg2MPDUCount; +- ULONG TxAgg3MPDUCount; +- ULONG TxAgg4MPDUCount; +- ULONG TxAgg5MPDUCount; +- ULONG TxAgg6MPDUCount; +- ULONG TxAgg7MPDUCount; +- ULONG TxAgg8MPDUCount; +- ULONG TxAgg9MPDUCount; +- ULONG TxAgg10MPDUCount; +- ULONG TxAgg11MPDUCount; +- ULONG TxAgg12MPDUCount; +- ULONG TxAgg13MPDUCount; +- ULONG TxAgg14MPDUCount; +- ULONG TxAgg15MPDUCount; +- ULONG TxAgg16MPDUCount; +- +- LARGE_INTEGER TransmittedOctetsInAMSDU; +- LARGE_INTEGER TransmittedAMSDUCount; +- LARGE_INTEGER ReceivedOctesInAMSDUCount; +- LARGE_INTEGER ReceivedAMSDUCount; +- LARGE_INTEGER TransmittedAMPDUCount; +- LARGE_INTEGER TransmittedMPDUsInAMPDUCount; +- LARGE_INTEGER TransmittedOctetsInAMPDUCount; +- LARGE_INTEGER MPDUInReceivedAMPDUCount; ++ ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput ++ ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput ++ ULONG BeenDisassociatedCount; ++ ULONG BadCQIAutoRecoveryCount; ++ ULONG PoorCQIRoamingCount; ++ ULONG MgmtRingFullCount; ++ ULONG RxCountSinceLastNULL; ++ ULONG RxCount; ++ ULONG RxRingErrCount; ++ ULONG KickTxCount; ++ ULONG TxRingErrCount; ++ LARGE_INTEGER RealFcsErrCount; ++ ULONG PendingNdisPacketCount; ++ ++ ULONG OneSecOsTxCount[NUM_OF_TX_RING]; ++ ULONG OneSecDmaDoneCount[NUM_OF_TX_RING]; ++ UINT32 OneSecTxDoneCount; ++ ULONG OneSecRxCount; ++ UINT32 OneSecTxAggregationCount; ++ UINT32 OneSecRxAggregationCount; ++ UINT32 OneSecReceivedByteCount; ++ UINT32 OneSecFrameDuplicateCount; ++ ++ UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput ++ UINT32 OneSecTxNoRetryOkCount; ++ UINT32 OneSecTxRetryOkCount; ++ UINT32 OneSecTxFailCount; ++ UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter ++ UINT32 OneSecRxOkCnt; // RX without error ++ UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count ++ UINT32 OneSecRxFcsErrCnt; // CRC error ++ UINT32 OneSecBeaconSentCnt; ++ UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount ++ UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt ++ ULONG DuplicateRcv; ++ ULONG TxAggCount; ++ ULONG TxNonAggCount; ++ ULONG TxAgg1MPDUCount; ++ ULONG TxAgg2MPDUCount; ++ ULONG TxAgg3MPDUCount; ++ ULONG TxAgg4MPDUCount; ++ ULONG TxAgg5MPDUCount; ++ ULONG TxAgg6MPDUCount; ++ ULONG TxAgg7MPDUCount; ++ ULONG TxAgg8MPDUCount; ++ ULONG TxAgg9MPDUCount; ++ ULONG TxAgg10MPDUCount; ++ ULONG TxAgg11MPDUCount; ++ ULONG TxAgg12MPDUCount; ++ ULONG TxAgg13MPDUCount; ++ ULONG TxAgg14MPDUCount; ++ ULONG TxAgg15MPDUCount; ++ ULONG TxAgg16MPDUCount; ++ ++ LARGE_INTEGER TransmittedOctetsInAMSDU; ++ LARGE_INTEGER TransmittedAMSDUCount; ++ LARGE_INTEGER ReceivedOctesInAMSDUCount; ++ LARGE_INTEGER ReceivedAMSDUCount; ++ LARGE_INTEGER TransmittedAMPDUCount; ++ LARGE_INTEGER TransmittedMPDUsInAMPDUCount; ++ LARGE_INTEGER TransmittedOctetsInAMPDUCount; ++ LARGE_INTEGER MPDUInReceivedAMPDUCount; + } COUNTER_RALINK, *PCOUNTER_RALINK; + +- + typedef struct _COUNTER_DRS { + // to record the each TX rate's quality. 0 is best, the bigger the worse. +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +- ULONG CurrTxRateStableTime; // # of second in current TX rate +- BOOLEAN fNoisyEnvironment; +- BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction +- ULONG LastTxOkCount; ++ USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; ++ UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; ++ UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition ++ ULONG CurrTxRateStableTime; // # of second in current TX rate ++ BOOLEAN fNoisyEnvironment; ++ BOOLEAN fLastSecAccordingRSSI; ++ UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down ++ UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction ++ ULONG LastTxOkCount; + } COUNTER_DRS, *PCOUNTER_DRS; + +- +- +- + /*************************************************************************** + * security key related data structure + **************************************************************************/ + typedef struct _CIPHER_KEY { +- UCHAR Key[16]; // right now we implement 4 keys, 128 bits max +- UCHAR RxMic[8]; // make alignment +- UCHAR TxMic[8]; +- UCHAR TxTsc[6]; // 48bit TSC value +- UCHAR RxTsc[6]; // 48bit TSC value +- UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 +- UCHAR KeyLen; +- UCHAR BssId[6]; +- // Key length for each key, 0: entry is invalid +- UCHAR Type; // Indicate Pairwise/Group when reporting MIC error ++ UCHAR Key[16]; // right now we implement 4 keys, 128 bits max ++ UCHAR RxMic[8]; // make alignment ++ UCHAR TxMic[8]; ++ UCHAR TxTsc[6]; // 48bit TSC value ++ UCHAR RxTsc[6]; // 48bit TSC value ++ UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 ++ UCHAR KeyLen; ++ UCHAR BssId[6]; ++ // Key length for each key, 0: entry is invalid ++ UCHAR Type; // Indicate Pairwise/Group when reporting MIC error + } CIPHER_KEY, *PCIPHER_KEY; + +- + // structure to define WPA Group Key Rekey Interval + typedef struct PACKED _RT_802_11_WPA_REKEY { +- ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets +-} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; ++ ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets ++} RT_WPA_REKEY, *PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; + + #ifdef RTMP_MAC_USB + /*************************************************************************** + * RTUSB I/O related data structure + **************************************************************************/ +-typedef struct _RT_SET_ASIC_WCID { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG SetTid; // time-based: seconds, packet-based: kilo-packets +- ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets ++typedef struct _RT_SET_ASIC_WCID { ++ ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG SetTid; // time-based: seconds, packet-based: kilo-packets ++ ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets + UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key +-} RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID; ++} RT_SET_ASIC_WCID, *PRT_SET_ASIC_WCID; + +-typedef struct _RT_SET_ASIC_WCID_ATTRI { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG Cipher; // ASIC Cipher definition +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; +-} RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI; ++typedef struct _RT_SET_ASIC_WCID_ATTRI { ++ ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ++ ULONG Cipher; // ASIC Cipher definition ++ UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; ++} RT_SET_ASIC_WCID_ATTRI, *PRT_SET_ASIC_WCID_ATTRI; + + // for USB interface, avoid in interrupt when write key +-typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { +- UCHAR MacAddr[6]; +- USHORT MacTabMatchWCID; // ASIC +- CIPHER_KEY CipherKey; +-} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY; ++typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { ++ UCHAR MacAddr[6]; ++ USHORT MacTabMatchWCID; // ASIC ++ CIPHER_KEY CipherKey; ++} RT_ADD_PAIRWISE_KEY_ENTRY, *PRT_ADD_PAIRWISE_KEY_ENTRY; + + // Cipher suite type for mixed mode group cipher, P802.11i-2004 + typedef enum _RT_802_11_CIPHER_SUITE_TYPE { +@@ -722,176 +692,168 @@ typedef enum _RT_802_11_CIPHER_SUITE_TYPE { + #endif // RTMP_MAC_USB // + + typedef struct { +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR ErrorCode[2]; //00 01-Invalid authentication type +- //00 02-Authentication timeout +- //00 03-Challenge from AP failed +- //00 04-Challenge to AP failed +- BOOLEAN Reported; ++ UCHAR Addr[MAC_ADDR_LEN]; ++ UCHAR ErrorCode[2]; //00 01-Invalid authentication type ++ //00 02-Authentication timeout ++ //00 03-Challenge from AP failed ++ //00 04-Challenge to AP failed ++ BOOLEAN Reported; + } ROGUEAP_ENTRY, *PROGUEAP_ENTRY; + + typedef struct { +- UCHAR RogueApNr; +- ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; ++ UCHAR RogueApNr; ++ ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; + } ROGUEAP_TABLE, *PROGUEAP_TABLE; + + // + // Cisco IAPP format + // +-typedef struct _CISCO_IAPP_CONTENT_ +-{ +- USHORT Length; //IAPP Length +- UCHAR MessageType; //IAPP type +- UCHAR FunctionCode; //IAPP function type +- UCHAR DestinaionMAC[MAC_ADDR_LEN]; +- UCHAR SourceMAC[MAC_ADDR_LEN]; +- USHORT Tag; //Tag(element IE) - Adjacent AP report +- USHORT TagLength; //Length of element not including 4 byte header +- UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 +- UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point +- USHORT Channel; +- USHORT SsidLen; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT Seconds; //Seconds that the client has been disassociated. ++typedef struct _CISCO_IAPP_CONTENT_ { ++ USHORT Length; //IAPP Length ++ UCHAR MessageType; //IAPP type ++ UCHAR FunctionCode; //IAPP function type ++ UCHAR DestinaionMAC[MAC_ADDR_LEN]; ++ UCHAR SourceMAC[MAC_ADDR_LEN]; ++ USHORT Tag; //Tag(element IE) - Adjacent AP report ++ USHORT TagLength; //Length of element not including 4 byte header ++ UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 ++ UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point ++ USHORT Channel; ++ USHORT SsidLen; ++ UCHAR Ssid[MAX_LEN_OF_SSID]; ++ USHORT Seconds; //Seconds that the client has been disassociated. + } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; + +- + /* + * Fragment Frame structure + */ +-typedef struct _FRAGMENT_FRAME { +- PNDIS_PACKET pFragPacket; +- ULONG RxSize; +- USHORT Sequence; +- USHORT LastFrag; +- ULONG Flags; // Some extra frame information. bit 0: LLC presented ++typedef struct _FRAGMENT_FRAME { ++ PNDIS_PACKET pFragPacket; ++ ULONG RxSize; ++ USHORT Sequence; ++ USHORT LastFrag; ++ ULONG Flags; // Some extra frame information. bit 0: LLC presented + } FRAGMENT_FRAME, *PFRAGMENT_FRAME; + +- + // + // Packet information for NdisQueryPacket + // +-typedef struct _PACKET_INFO { +- UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained +- UINT BufferCount ; // Number of Buffer descriptor chained +- UINT TotalPacketLength ; // Self explained +- PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor ++typedef struct _PACKET_INFO { ++ UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained ++ UINT BufferCount; // Number of Buffer descriptor chained ++ UINT TotalPacketLength; // Self explained ++ PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor + } PACKET_INFO, *PPACKET_INFO; + +- + // + // Arcfour Structure Added by PaulWu + // +-typedef struct _ARCFOUR +-{ +- UINT X; +- UINT Y; +- UCHAR STATE[256]; ++typedef struct _ARCFOUR { ++ UINT X; ++ UINT Y; ++ UCHAR STATE[256]; + } ARCFOURCONTEXT, *PARCFOURCONTEXT; + +- + // + // Tkip Key structure which RC4 key & MIC calculation + // +-typedef struct _TKIP_KEY_INFO { +- UINT nBytesInM; // # bytes in M for MICKEY +- ULONG IV16; +- ULONG IV32; +- ULONG K0; // for MICKEY Low +- ULONG K1; // for MICKEY Hig +- ULONG L; // Current state for MICKEY +- ULONG R; // Current state for MICKEY +- ULONG M; // Message accumulator for MICKEY +- UCHAR RC4KEY[16]; +- UCHAR MIC[8]; ++typedef struct _TKIP_KEY_INFO { ++ UINT nBytesInM; // # bytes in M for MICKEY ++ ULONG IV16; ++ ULONG IV32; ++ ULONG K0; // for MICKEY Low ++ ULONG K1; // for MICKEY Hig ++ ULONG L; // Current state for MICKEY ++ ULONG R; // Current state for MICKEY ++ ULONG M; // Message accumulator for MICKEY ++ UCHAR RC4KEY[16]; ++ UCHAR MIC[8]; + } TKIP_KEY_INFO, *PTKIP_KEY_INFO; + + // + // Private / Misc data, counters for driver internal use + // +-typedef struct __PRIVATE_STRUC { +- UINT SystemResetCnt; // System reset counter +- UINT TxRingFullCnt; // Tx ring full occurrance number +- UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter ++typedef struct __PRIVATE_STRUC { ++ UINT SystemResetCnt; // System reset counter ++ UINT TxRingFullCnt; // Tx ring full occurrance number ++ UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter + // Variables for WEP encryption / decryption in rtmp_wep.c +- UINT FCSCRC32; +- ARCFOURCONTEXT WEPCONTEXT; ++ UINT FCSCRC32; ++ ARCFOURCONTEXT WEPCONTEXT; + // Tkip stuff +- TKIP_KEY_INFO Tx; +- TKIP_KEY_INFO Rx; ++ TKIP_KEY_INFO Tx; ++ TKIP_KEY_INFO Rx; + } PRIVATE_STRUC, *PPRIVATE_STRUC; + +- + /*************************************************************************** + * Channel and BBP related data structures + **************************************************************************/ + // structure to tune BBP R66 (BBP TUNING) + typedef struct _BBP_R66_TUNING { +- BOOLEAN bEnable; +- USHORT FalseCcaLowerThreshold; // default 100 +- USHORT FalseCcaUpperThreshold; // default 512 +- UCHAR R66Delta; +- UCHAR R66CurrentValue; +- BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value. ++ BOOLEAN bEnable; ++ USHORT FalseCcaLowerThreshold; // default 100 ++ USHORT FalseCcaUpperThreshold; // default 512 ++ UCHAR R66Delta; ++ UCHAR R66CurrentValue; ++ BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value. + } BBP_R66_TUNING, *PBBP_R66_TUNING; + + // structure to store channel TX power + typedef struct _CHANNEL_TX_POWER { +- USHORT RemainingTimeForUse; //unit: sec +- UCHAR Channel; +- CHAR Power; +- CHAR Power2; +- UCHAR MaxTxPwr; +- UCHAR DfsReq; ++ USHORT RemainingTimeForUse; //unit: sec ++ UCHAR Channel; ++ CHAR Power; ++ CHAR Power2; ++ UCHAR MaxTxPwr; ++ UCHAR DfsReq; + } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; + + // structure to store 802.11j channel TX power + typedef struct _CHANNEL_11J_TX_POWER { +- UCHAR Channel; +- UCHAR BW; // BW_10 or BW_20 +- CHAR Power; +- CHAR Power2; +- USHORT RemainingTimeForUse; //unit: sec ++ UCHAR Channel; ++ UCHAR BW; // BW_10 or BW_20 ++ CHAR Power; ++ CHAR Power2; ++ USHORT RemainingTimeForUse; //unit: sec + } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; + + typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { +- UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status +- UCHAR EvaluateStableCnt; +- UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 +- SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 +- SHORT Pair1LastAvgRssi; // +- SHORT Pair2LastAvgRssi; // +- ULONG RcvPktNumWhenEvaluate; +- BOOLEAN FirstPktArrivedWhenEvaluate; +- RALINK_TIMER_STRUCT RxAntDiversityTimer; ++ UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status ++ UCHAR EvaluateStableCnt; ++ UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 ++ UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 ++ UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 ++ UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 ++ SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 ++ SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 ++ SHORT Pair1LastAvgRssi; // ++ SHORT Pair2LastAvgRssi; // ++ ULONG RcvPktNumWhenEvaluate; ++ BOOLEAN FirstPktArrivedWhenEvaluate; ++ RALINK_TIMER_STRUCT RxAntDiversityTimer; + } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; + +- + /*************************************************************************** + * structure for radar detection and channel switch + **************************************************************************/ + typedef struct _RADAR_DETECT_STRUCT { +- //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h +- UCHAR CSCount; //Channel switch counter +- UCHAR CSPeriod; //Channel switch period (beacon count) +- UCHAR RDCount; //Radar detection counter +- UCHAR RDMode; //Radar Detection mode +- UCHAR RDDurRegion; //Radar detection duration region +- UCHAR BBPR16; +- UCHAR BBPR17; +- UCHAR BBPR18; +- UCHAR BBPR21; +- UCHAR BBPR22; +- UCHAR BBPR64; +- ULONG InServiceMonitorCount; // unit: sec +- UINT8 DfsSessionTime; +- BOOLEAN bFastDfs; +- UINT8 ChMovingTime; +- UINT8 LongPulseRadarTh; ++ //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h ++ UCHAR CSCount; //Channel switch counter ++ UCHAR CSPeriod; //Channel switch period (beacon count) ++ UCHAR RDCount; //Radar detection counter ++ UCHAR RDMode; //Radar Detection mode ++ UCHAR RDDurRegion; //Radar detection duration region ++ UCHAR BBPR16; ++ UCHAR BBPR17; ++ UCHAR BBPR18; ++ UCHAR BBPR21; ++ UCHAR BBPR22; ++ UCHAR BBPR64; ++ ULONG InServiceMonitorCount; // unit: sec ++ UINT8 DfsSessionTime; ++ BOOLEAN bFastDfs; ++ UINT8 ChMovingTime; ++ UINT8 LongPulseRadarTh; + } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; + + typedef enum _ABGBAND_STATE_ { +@@ -902,17 +864,17 @@ typedef enum _ABGBAND_STATE_ { + + #ifdef RTMP_MAC_PCI + // Power save method control +-typedef union _PS_CONTROL { +- struct { +- ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey, +- ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. +- ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip +- ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip. +- ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. +- ULONG rsv:26; // Radio Measurement Enable +- } field; +- ULONG word; +-} PS_CONTROL, *PPS_CONTROL; ++typedef union _PS_CONTROL { ++ struct { ++ ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey, ++ ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. ++ ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip ++ ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip. ++ ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. ++ ULONG rsv:26; // Radio Measurement Enable ++ } field; ++ ULONG word; ++} PS_CONTROL, *PPS_CONTROL; + #endif // RTMP_MAC_PCI // + + /*************************************************************************** +@@ -920,208 +882,193 @@ typedef union _PS_CONTROL { + **************************************************************************/ + typedef struct _MLME_STRUCT { + // STA state machines +- STATE_MACHINE CntlMachine; +- STATE_MACHINE AssocMachine; +- STATE_MACHINE AuthMachine; +- STATE_MACHINE AuthRspMachine; +- STATE_MACHINE SyncMachine; +- STATE_MACHINE WpaPskMachine; +- STATE_MACHINE LeapMachine; +- STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; +- STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; +- STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; +- STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; +- STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; ++ STATE_MACHINE CntlMachine; ++ STATE_MACHINE AssocMachine; ++ STATE_MACHINE AuthMachine; ++ STATE_MACHINE AuthRspMachine; ++ STATE_MACHINE SyncMachine; ++ STATE_MACHINE WpaPskMachine; ++ STATE_MACHINE LeapMachine; ++ STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; ++ STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; ++ STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; ++ STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; ++ STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; + // Action +- STATE_MACHINE ActMachine; +- +- +- ++ STATE_MACHINE ActMachine; + + // common WPA state machine +- STATE_MACHINE WpaMachine; +- STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; +- +- ++ STATE_MACHINE WpaMachine; ++ STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; + +- ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming +- ULONG Now32; // latch the value of NdisGetSystemUpTime() +- ULONG LastSendNULLpsmTime; ++ ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming ++ ULONG Now32; // latch the value of NdisGetSystemUpTime() ++ ULONG LastSendNULLpsmTime; + +- BOOLEAN bRunning; +- NDIS_SPIN_LOCK TaskLock; +- MLME_QUEUE Queue; ++ BOOLEAN bRunning; ++ NDIS_SPIN_LOCK TaskLock; ++ MLME_QUEUE Queue; + +- UINT ShiftReg; ++ UINT ShiftReg; + +- RALINK_TIMER_STRUCT PeriodicTimer; +- RALINK_TIMER_STRUCT APSDPeriodicTimer; +- RALINK_TIMER_STRUCT LinkDownTimer; +- RALINK_TIMER_STRUCT LinkUpTimer; ++ RALINK_TIMER_STRUCT PeriodicTimer; ++ RALINK_TIMER_STRUCT APSDPeriodicTimer; ++ RALINK_TIMER_STRUCT LinkDownTimer; ++ RALINK_TIMER_STRUCT LinkUpTimer; + #ifdef RTMP_MAC_PCI +- UCHAR bPsPollTimerRunning; +- RALINK_TIMER_STRUCT PsPollTimer; +- RALINK_TIMER_STRUCT RadioOnOffTimer; +-#endif // RTMP_MAC_PCI // +- ULONG PeriodicRound; +- ULONG OneSecPeriodicRound; +- +- UCHAR RealRxPath; +- BOOLEAN bLowThroughput; +- BOOLEAN bEnableAutoAntennaCheck; +- RALINK_TIMER_STRUCT RxAntEvalTimer; ++ UCHAR bPsPollTimerRunning; ++ RALINK_TIMER_STRUCT PsPollTimer; ++ RALINK_TIMER_STRUCT RadioOnOffTimer; ++#endif // RTMP_MAC_PCI // ++ ULONG PeriodicRound; ++ ULONG OneSecPeriodicRound; ++ ++ UCHAR RealRxPath; ++ BOOLEAN bLowThroughput; ++ BOOLEAN bEnableAutoAntennaCheck; ++ RALINK_TIMER_STRUCT RxAntEvalTimer; + + #ifdef RT30xx + UCHAR CaliBW40RfR24; + UCHAR CaliBW20RfR24; +-#endif // RT30xx // ++#endif // RT30xx // + + #ifdef RTMP_MAC_USB +- RALINK_TIMER_STRUCT AutoWakeupTimer; +- BOOLEAN AutoWakeupTimerRunning; +-#endif // RTMP_MAC_USB // ++ RALINK_TIMER_STRUCT AutoWakeupTimer; ++ BOOLEAN AutoWakeupTimerRunning; ++#endif // RTMP_MAC_USB // + } MLME_STRUCT, *PMLME_STRUCT; + +- + /*************************************************************************** + * 802.11 N related data structures + **************************************************************************/ +-struct reordering_mpdu +-{ +- struct reordering_mpdu *next; +- PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ +- int Sequence; /* sequence number of MPDU */ +- BOOLEAN bAMSDU; ++struct reordering_mpdu { ++ struct reordering_mpdu *next; ++ PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ ++ int Sequence; /* sequence number of MPDU */ ++ BOOLEAN bAMSDU; + }; + +-struct reordering_list +-{ ++struct reordering_list { + struct reordering_mpdu *next; +- int qlen; ++ int qlen; + }; + +-struct reordering_mpdu_pool +-{ +- PVOID mem; +- NDIS_SPIN_LOCK lock; +- struct reordering_list freelist; ++struct reordering_mpdu_pool { ++ PVOID mem; ++ NDIS_SPIN_LOCK lock; ++ struct reordering_list freelist; + }; + +-typedef enum _REC_BLOCKACK_STATUS +-{ +- Recipient_NONE=0, ++typedef enum _REC_BLOCKACK_STATUS { ++ Recipient_NONE = 0, + Recipient_USED, + Recipient_HandleRes, +- Recipient_Accept ++ Recipient_Accept + } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS; + +-typedef enum _ORI_BLOCKACK_STATUS +-{ +- Originator_NONE=0, ++typedef enum _ORI_BLOCKACK_STATUS { ++ Originator_NONE = 0, + Originator_USED, +- Originator_WaitRes, +- Originator_Done ++ Originator_WaitRes, ++ Originator_Done + } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS; + +-typedef struct _BA_ORI_ENTRY{ +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; +- UCHAR Token; ++typedef struct _BA_ORI_ENTRY { ++ UCHAR Wcid; ++ UCHAR TID; ++ UCHAR BAWinSize; ++ UCHAR Token; + // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. +- USHORT Sequence; +- USHORT TimeOutValue; +- ORI_BLOCKACK_STATUS ORI_BA_Status; ++ USHORT Sequence; ++ USHORT TimeOutValue; ++ ORI_BLOCKACK_STATUS ORI_BA_Status; + RALINK_TIMER_STRUCT ORIBATimer; +- PVOID pAdapter; ++ PVOID pAdapter; + } BA_ORI_ENTRY, *PBA_ORI_ENTRY; + + typedef struct _BA_REC_ENTRY { +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. +- //UCHAR NumOfRxPkt; ++ UCHAR Wcid; ++ UCHAR TID; ++ UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. ++ //UCHAR NumOfRxPkt; + //UCHAR Curindidx; // the head in the RX reordering buffer +- USHORT LastIndSeq; +-// USHORT LastIndSeqAtTimer; +- USHORT TimeOutValue; ++ USHORT LastIndSeq; ++// USHORT LastIndSeqAtTimer; ++ USHORT TimeOutValue; + RALINK_TIMER_STRUCT RECBATimer; +- ULONG LastIndSeqAtTimer; +- ULONG nDropPacket; +- ULONG rcvSeq; +- REC_BLOCKACK_STATUS REC_BA_Status; +-// UCHAR RxBufIdxUsed; ++ ULONG LastIndSeqAtTimer; ++ ULONG nDropPacket; ++ ULONG rcvSeq; ++ REC_BLOCKACK_STATUS REC_BA_Status; ++// UCHAR RxBufIdxUsed; + // corresponding virtual address for RX reordering packet storage. + //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; +- NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock +-// struct _BA_REC_ENTRY *pNext; +- PVOID pAdapter; +- struct reordering_list list; ++ NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock ++// struct _BA_REC_ENTRY *pNext; ++ PVOID pAdapter; ++ struct reordering_list list; + } BA_REC_ENTRY, *PBA_REC_ENTRY; + +- + typedef struct { +- ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] +- ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] +- ULONG numDoneOriginator; // count Done Originator sessions +- BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; +- BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; ++ ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] ++ ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] ++ ULONG numDoneOriginator; // count Done Originator sessions ++ BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; ++ BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; + } BA_TABLE, *PBA_TABLE; + + //For QureyBATableOID use; +-typedef struct PACKED _OID_BA_REC_ENTRY{ +- UCHAR MACAddr[MAC_ADDR_LEN]; +- UCHAR BaBitmap; // if (BaBitmap&(1<MaxHTPhyMode.field.MODE >= MODE_HTMIX) + +@@ -1131,78 +1078,75 @@ typedef struct { + #define PEER_IS_HT_RATE(_pMacEntry) \ + (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) + +- +- + //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) +-typedef struct _IOT_STRUC { +- UCHAR Threshold[2]; +- UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0] +- UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1] +- ULONG OneSecInWindowCount; +- ULONG OneSecFrameDuplicateCount; +- ULONG OneSecOutWindowCount; +- UCHAR DelOriAct; +- UCHAR DelRecAct; +- UCHAR RTSShortProt; +- UCHAR RTSLongProt; +- BOOLEAN bRTSLongProtOn; +- BOOLEAN bLastAtheros; +- BOOLEAN bCurrentAtheros; +- BOOLEAN bNowAtherosBurstOn; +- BOOLEAN bNextDisableRxBA; +- BOOLEAN bToggle; ++typedef struct _IOT_STRUC { ++ UCHAR Threshold[2]; ++ UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0] ++ UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1] ++ ULONG OneSecInWindowCount; ++ ULONG OneSecFrameDuplicateCount; ++ ULONG OneSecOutWindowCount; ++ UCHAR DelOriAct; ++ UCHAR DelRecAct; ++ UCHAR RTSShortProt; ++ UCHAR RTSLongProt; ++ BOOLEAN bRTSLongProtOn; ++ BOOLEAN bLastAtheros; ++ BOOLEAN bCurrentAtheros; ++ BOOLEAN bNowAtherosBurstOn; ++ BOOLEAN bNextDisableRxBA; ++ BOOLEAN bToggle; + } IOT_STRUC, *PIOT_STRUC; + + // This is the registry setting for 802.11n transmit setting. Used in advanced page. + typedef union _REG_TRANSMIT_SETTING { +- struct { +- //UINT32 PhyMode:4; +- //UINT32 MCS:7; // MCS +- UINT32 rsv0:10; +- UINT32 TxBF:1; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz +- UINT32 ShortGI:1; +- UINT32 STBC:1; //SPACE +- UINT32 TRANSNO:2; +- UINT32 HTMODE:1; +- UINT32 EXTCHA:2; +- UINT32 rsv:13; +- } field; +- UINT32 word; ++ struct { ++ //UINT32 PhyMode:4; ++ //UINT32 MCS:7; // MCS ++ UINT32 rsv0:10; ++ UINT32 TxBF:1; ++ UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz ++ UINT32 ShortGI:1; ++ UINT32 STBC:1; //SPACE ++ UINT32 TRANSNO:2; ++ UINT32 HTMODE:1; ++ UINT32 EXTCHA:2; ++ UINT32 rsv:13; ++ } field; ++ UINT32 word; + } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING; + +-typedef union _DESIRED_TRANSMIT_SETTING { +- struct { +- USHORT MCS:7; // MCS +- USHORT PhyMode:4; +- USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. +- USHORT rsv:3; +- } field; +- USHORT word; +- } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; ++typedef union _DESIRED_TRANSMIT_SETTING { ++ struct { ++ USHORT MCS:7; // MCS ++ USHORT PhyMode:4; ++ USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. ++ USHORT rsv:3; ++ } field; ++ USHORT word; ++} DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; + + #ifdef RTMP_MAC_USB + /*************************************************************************** + * USB-based chip Beacon related data structures + **************************************************************************/ + #define BEACON_BITMAP_MASK 0xff +-typedef struct _BEACON_SYNC_STRUCT_ +-{ +- UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET]; +- UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; +- ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; +- ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT]; +- BOOLEAN EnableBeacon; // trigger to enable beacon transmission. +- UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. +- UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. +-}BEACON_SYNC_STRUCT; ++typedef struct _BEACON_SYNC_STRUCT_ { ++ UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET]; ++ UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; ++ ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; ++ ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT]; ++ BOOLEAN EnableBeacon; // trigger to enable beacon transmission. ++ UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. ++ UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. ++} BEACON_SYNC_STRUCT; + #endif // RTMP_MAC_USB // + + /*************************************************************************** + * Multiple SSID related data structures + **************************************************************************/ +-#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ +-#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ ++#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ ++#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ + + /* clear bcmc TIM bit */ + #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \ +@@ -1224,183 +1168,181 @@ typedef struct _BEACON_SYNC_STRUCT_ + UCHAR bit_offset = wcid & 0x7; \ + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } + +- + // configuration common to OPMODE_AP as well as OPMODE_STA + typedef struct _COMMON_CONFIG { + +- BOOLEAN bCountryFlag; +- UCHAR CountryCode[3]; +- UCHAR Geography; +- UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel +- UCHAR CountryRegionForABand; // Enum of country region for A band +- UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED +- USHORT Dsifs; // in units of usec +- ULONG PacketFilter; // Packet filter for receiving +- UINT8 RegulatoryClass; +- +- CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated +- UCHAR SsidLen; // the actual ssid length in used +- UCHAR LastSsidLen; // the actual ssid length in used +- CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated +- UCHAR LastBssid[MAC_ADDR_LEN]; +- +- UCHAR Bssid[MAC_ADDR_LEN]; +- USHORT BeaconPeriod; +- UCHAR Channel; +- UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel. +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; +- UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES +- UCHAR MaxDesiredRate; +- UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; +- +- ULONG BasicRateBitmap; // backup basic ratebitmap +- +- BOOLEAN bAPSDCapable; +- BOOLEAN bInServicePeriod; +- BOOLEAN bAPSDAC_BE; +- BOOLEAN bAPSDAC_BK; +- BOOLEAN bAPSDAC_VI; +- BOOLEAN bAPSDAC_VO; ++ BOOLEAN bCountryFlag; ++ UCHAR CountryCode[3]; ++ UCHAR Geography; ++ UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel ++ UCHAR CountryRegionForABand; // Enum of country region for A band ++ UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED ++ USHORT Dsifs; // in units of usec ++ ULONG PacketFilter; // Packet filter for receiving ++ UINT8 RegulatoryClass; ++ ++ CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated ++ UCHAR SsidLen; // the actual ssid length in used ++ UCHAR LastSsidLen; // the actual ssid length in used ++ CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated ++ UCHAR LastBssid[MAC_ADDR_LEN]; ++ ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ USHORT BeaconPeriod; ++ UCHAR Channel; ++ UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel. ++ ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR ExtRateLen; ++ UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES ++ UCHAR MaxDesiredRate; ++ UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ ++ ULONG BasicRateBitmap; // backup basic ratebitmap ++ ++ BOOLEAN bAPSDCapable; ++ BOOLEAN bInServicePeriod; ++ BOOLEAN bAPSDAC_BE; ++ BOOLEAN bAPSDAC_BK; ++ BOOLEAN bAPSDAC_VI; ++ BOOLEAN bAPSDAC_VO; + + /* because TSPEC can modify the APSD flag, we need to keep the APSD flag +- requested in association stage from the station; +- we need to recover the APSD flag after the TSPEC is deleted. */ +- BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */ +- BOOLEAN bACMAPSDTr[4]; /* no use */ +- +- BOOLEAN bNeedSendTriggerFrame; +- BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT +- ULONG TriggerTimerCount; +- UCHAR MaxSPLength; +- UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 ++ requested in association stage from the station; ++ we need to recover the APSD flag after the TSPEC is deleted. */ ++ BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */ ++ BOOLEAN bACMAPSDTr[4]; /* no use */ ++ ++ BOOLEAN bNeedSendTriggerFrame; ++ BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT ++ ULONG TriggerTimerCount; ++ UCHAR MaxSPLength; ++ UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 + // move to MULTISSID_STRUCT for MBSS +- //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. ++ //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. ++ REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. + //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode +- UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit +- UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR TxRateIndex; // Tx rate index in RateSwitchTable +- UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable +- //BOOLEAN bAutoTxRateSwitch; +- UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR RtsRate; // RATE_xxx +- HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. +- UCHAR MlmeRate; // RATE_xxx, used to send MLME frames +- UCHAR BasicMlmeRate; // Default Rate for sending MLME frames +- +- USHORT RtsThreshold; // in unit of BYTE +- USHORT FragmentThreshold; // in unit of BYTE +- +- UCHAR TxPower; // in unit of mW +- ULONG TxPowerPercentage; // 0~100 % +- ULONG TxPowerDefault; // keep for TxPowerPercentage +- UINT8 PwrConstraint; +- +- BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +- BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +- +- IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter; +- ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto +- BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable +- ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use +- BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) +- BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST +- BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it +- BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version +- BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. +- ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect +- +- BOOLEAN bRdg; +- +- BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP +- UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx +- BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS ++ UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit ++ UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 ++ UCHAR TxRateIndex; // Tx rate index in RateSwitchTable ++ UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable ++ //BOOLEAN bAutoTxRateSwitch; ++ UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 ++ UCHAR RtsRate; // RATE_xxx ++ HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. ++ UCHAR MlmeRate; // RATE_xxx, used to send MLME frames ++ UCHAR BasicMlmeRate; // Default Rate for sending MLME frames ++ ++ USHORT RtsThreshold; // in unit of BYTE ++ USHORT FragmentThreshold; // in unit of BYTE ++ ++ UCHAR TxPower; // in unit of mW ++ ULONG TxPowerPercentage; // 0~100 % ++ ULONG TxPowerDefault; // keep for TxPowerPercentage ++ UINT8 PwrConstraint; ++ ++ BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 ++ BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 ++ ++ IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter; ++ ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto ++ BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable ++ ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use ++ BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) ++ BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST ++ BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it ++ BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version ++ BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. ++ ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect ++ ++ BOOLEAN bRdg; ++ ++ BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM ++ QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP ++ EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP ++ QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP ++ UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx ++ BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS + // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular + // BOOLEAN control, either ON or OFF. These flags should always be accessed via + // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. + // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition +- ULONG OpStatusFlags; ++ ULONG OpStatusFlags; + +- BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. +- ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode. ++ BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. ++ ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode. + + // IEEE802.11H--DFS. +- RADAR_DETECT_STRUCT RadarDetect; ++ RADAR_DETECT_STRUCT RadarDetect; + + // HT +- UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability +- //RT_HT_CAPABILITY SupportedHtPhy; +- RT_HT_CAPABILITY DesiredHtPhy; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHTInfo; // Useful as AP. ++ UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability ++ //RT_HT_CAPABILITY SupportedHtPhy; ++ RT_HT_CAPABILITY DesiredHtPhy; ++ HT_CAPABILITY_IE HtCapability; ++ ADD_HT_INFO_IE AddHTInfo; // Useful as AP. + //This IE is used with channel switch announcement element when changing to a new 40MHz. + //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. +- NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present ++ NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present + +- BOOLEAN bHTProtect; +- BOOLEAN bMIMOPSEnable; +- BOOLEAN bBADecline; ++ BOOLEAN bHTProtect; ++ BOOLEAN bMIMOPSEnable; ++ BOOLEAN bBADecline; + //2008/11/05: KH add to support Antenna power-saving of AP<-- +- BOOLEAN bGreenAPEnable; ++ BOOLEAN bGreenAPEnable; + //2008/11/05: KH add to support Antenna power-saving of AP--> +- BOOLEAN bDisableReordering; +- BOOLEAN bForty_Mhz_Intolerant; +- BOOLEAN bExtChannelSwitchAnnouncement; +- BOOLEAN bRcvBSSWidthTriggerEvents; +- ULONG LastRcvBSSWidthTriggerEventsTime; ++ BOOLEAN bDisableReordering; ++ BOOLEAN bForty_Mhz_Intolerant; ++ BOOLEAN bExtChannelSwitchAnnouncement; ++ BOOLEAN bRcvBSSWidthTriggerEvents; ++ ULONG LastRcvBSSWidthTriggerEventsTime; + +- UCHAR TxBASize; ++ UCHAR TxBASize; + + // Enable wireless event +- BOOLEAN bWirelessEvent; +- BOOLEAN bWiFiTest; // Enable this parameter for WiFi test ++ BOOLEAN bWirelessEvent; ++ BOOLEAN bWiFiTest; // Enable this parameter for WiFi test + + // Tx & Rx Stream number selection +- UCHAR TxStream; +- UCHAR RxStream; ++ UCHAR TxStream; ++ UCHAR RxStream; + +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled ++ BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled + + #ifdef RTMP_MAC_USB +- BOOLEAN bMultipleIRP; // Multiple Bulk IN flag +- UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 +- RT_HT_CAPABILITY SupportedHtPhy; +- ULONG MaxPktOneTxBulk; +- UCHAR TxBulkFactor; +- UCHAR RxBulkFactor; +- +- BOOLEAN IsUpdateBeacon; +- BEACON_SYNC_STRUCT *pBeaconSync; +- RALINK_TIMER_STRUCT BeaconUpdateTimer; +- UINT32 BeaconAdjust; +- UINT32 BeaconFactor; +- UINT32 BeaconRemain; +-#endif // RTMP_MAC_USB // ++ BOOLEAN bMultipleIRP; // Multiple Bulk IN flag ++ UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 ++ RT_HT_CAPABILITY SupportedHtPhy; ++ ULONG MaxPktOneTxBulk; ++ UCHAR TxBulkFactor; ++ UCHAR RxBulkFactor; ++ ++ BOOLEAN IsUpdateBeacon; ++ BEACON_SYNC_STRUCT *pBeaconSync; ++ RALINK_TIMER_STRUCT BeaconUpdateTimer; ++ UINT32 BeaconAdjust; ++ UINT32 BeaconFactor; ++ UINT32 BeaconRemain; ++#endif // RTMP_MAC_USB // + +- NDIS_SPIN_LOCK MeasureReqTabLock; +- PMEASURE_REQ_TAB pMeasureReqTab; ++ NDIS_SPIN_LOCK MeasureReqTabLock; ++ PMEASURE_REQ_TAB pMeasureReqTab; + +- NDIS_SPIN_LOCK TpcReqTabLock; +- PTPC_REQ_TAB pTpcReqTab; ++ NDIS_SPIN_LOCK TpcReqTabLock; ++ PTPC_REQ_TAB pTpcReqTab; + +- BOOLEAN PSPXlink; // 0: Disable. 1: Enable ++ BOOLEAN PSPXlink; // 0: Disable. 1: Enable + + #if defined(RT305x)||defined(RT30xx) + // request by Gary, for High Power issue +- UCHAR HighPowerPatchDisabled; ++ UCHAR HighPowerPatchDisabled; + #endif + +- BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ ++ BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ + } COMMON_CONFIG, *PCOMMON_CONFIG; + +- + /* Modified by Wu Xi-Kun 4/21/2006 */ + // STA configuration and status + typedef struct _STA_ADMIN_CONFIG { +@@ -1410,165 +1352,161 @@ typedef struct _STA_ADMIN_CONFIG { + // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either + // AP or IBSS holder). + // Once initialized, user configuration can only be changed via OID_xxx +- UCHAR BssType; // BSS_INFRA or BSS_ADHOC +- USHORT AtimWin; // used when starting a new IBSS ++ UCHAR BssType; // BSS_INFRA or BSS_ADHOC ++ USHORT AtimWin; // used when starting a new IBSS + + // GROUP 2 - + // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe + // the user intended configuration, and should be always applied to the final + // settings in ACTIVE BSS without compromising with the BSS holder. + // Once initialized, user configuration can only be changed via OID_xxx +- UCHAR RssiTrigger; +- UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD +- USHORT DefaultListenCount; // default listen count; +- ULONG WindowsPowerMode; // Power mode for AC power +- ULONG WindowsBatteryPowerMode; // Power mode for battery if exists +- BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on +- BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID +- ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP ++ UCHAR RssiTrigger; ++ UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD ++ USHORT DefaultListenCount; // default listen count; ++ ULONG WindowsPowerMode; // Power mode for AC power ++ ULONG WindowsBatteryPowerMode; // Power mode for battery if exists ++ BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on ++ BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID ++ ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP + + // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1) +- USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE) +- USHORT DisassocReason; +- UCHAR DisassocSta[MAC_ADDR_LEN]; +- USHORT DeauthReason; +- UCHAR DeauthSta[MAC_ADDR_LEN]; +- USHORT AuthFailReason; +- UCHAR AuthFailSta[MAC_ADDR_LEN]; +- +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID ++ USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE) ++ USHORT DisassocReason; ++ UCHAR DisassocSta[MAC_ADDR_LEN]; ++ USHORT DeauthReason; ++ UCHAR DeauthSta[MAC_ADDR_LEN]; ++ USHORT AuthFailReason; ++ UCHAR AuthFailSta[MAC_ADDR_LEN]; ++ ++ NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X ++ NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined ++ NDIS_802_11_WEP_STATUS WepStatus; ++ NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID + + // Add to support different cipher suite for WPA2/WPA mode +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite +- BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites +- USHORT RsnCapability; ++ NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite ++ NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite ++ BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites ++ USHORT RsnCapability; + +- NDIS_802_11_WEP_STATUS GroupKeyWepStatus; ++ NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + +- UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase +- UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase +- UCHAR PMK[32]; // WPA PSK mode PMK +- UCHAR PTK[64]; // WPA PSK mode PTK +- UCHAR GTK[32]; // GTK from authenticator +- BSSID_INFO SavedPMK[PMKID_NO]; +- UINT SavedPMKNum; // Saved PMKID number +- +- UCHAR DefaultKeyId; ++ UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase ++ UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase ++ UCHAR PMK[32]; // WPA PSK mode PMK ++ UCHAR PTK[64]; // WPA PSK mode PTK ++ UCHAR GTK[32]; // GTK from authenticator ++ BSSID_INFO SavedPMK[PMKID_NO]; ++ UINT SavedPMKNum; // Saved PMKID number + ++ UCHAR DefaultKeyId; + + // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED +- UCHAR PortSecured; ++ UCHAR PortSecured; + + // For WPA countermeasures +- ULONG LastMicErrorTime; // record last MIC error time +- ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation). +- BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred. ++ ULONG LastMicErrorTime; // record last MIC error time ++ ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation). ++ BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred. + // For WPA-PSK supplicant state +- WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x +- UCHAR ReplayCounter[8]; +- UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator +- UCHAR SNonce[32]; // SNonce for WPA-PSK ++ WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x ++ UCHAR ReplayCounter[8]; ++ UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator ++ UCHAR SNonce[32]; // SNonce for WPA-PSK + +- UCHAR LastSNR0; // last received BEACON's SNR +- UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna ++ UCHAR LastSNR0; // last received BEACON's SNR ++ UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna + RSSI_SAMPLE RssiSample; +- ULONG NumOfAvgRssiSample; ++ ULONG NumOfAvgRssiSample; + +- ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time +- ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time +- ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time +- ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time ++ ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time ++ ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time ++ ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time ++ ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time + +- ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST +- ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request +- BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On +- BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On +- BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled +- BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation ++ ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST ++ ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request ++ BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On ++ BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On ++ BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state ++ BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled ++ BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation + + // New for WPA, windows want us to keep association information and + // Fixed IEs from last association response +- NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; +- USHORT ReqVarIELen; // Length of next VIE include EID & Length +- UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format. +- USHORT ResVarIELen; // Length of next VIE include EID & Length +- UCHAR ResVarIEs[MAX_VIE_LEN]; +- +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. +- +- ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time +- USHORT RPIDensity[8]; // Array for RPI density collection +- +- UCHAR RMReqCnt; // Number of measurement request saved. +- UCHAR CurrentRMReqIdx; // Number of measurement request saved. +- BOOLEAN ParallelReq; // Parallel measurement, only one request performed, +- // It must be the same channel with maximum duration +- USHORT ParallelDuration; // Maximum duration for parallel measurement +- UCHAR ParallelChannel; // Only one channel with parallel measurement +- USHORT IAPPToken; // IAPP dialog token ++ NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; ++ USHORT ReqVarIELen; // Length of next VIE include EID & Length ++ UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format. ++ USHORT ResVarIELen; // Length of next VIE include EID & Length ++ UCHAR ResVarIEs[MAX_VIE_LEN]; ++ ++ UCHAR RSNIE_Len; ++ UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. ++ ++ ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time ++ USHORT RPIDensity[8]; // Array for RPI density collection ++ ++ UCHAR RMReqCnt; // Number of measurement request saved. ++ UCHAR CurrentRMReqIdx; // Number of measurement request saved. ++ BOOLEAN ParallelReq; // Parallel measurement, only one request performed, ++ // It must be the same channel with maximum duration ++ USHORT ParallelDuration; // Maximum duration for parallel measurement ++ UCHAR ParallelChannel; // Only one channel with parallel measurement ++ USHORT IAPPToken; // IAPP dialog token + // Hack for channel load and noise histogram parameters +- UCHAR NHFactor; // Parameter for Noise histogram +- UCHAR CLFactor; // Parameter for channel load ++ UCHAR NHFactor; // Parameter for Noise histogram ++ UCHAR CLFactor; // Parameter for channel load + +- RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; +- BOOLEAN StaQuickResponeForRateUpTimerRunning; ++ RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; ++ BOOLEAN StaQuickResponeForRateUpTimerRunning; + +- UCHAR DtimCount; // 0.. DtimPeriod-1 +- UCHAR DtimPeriod; // default = 3 ++ UCHAR DtimCount; // 0.. DtimPeriod-1 ++ UCHAR DtimPeriod; // default = 3 + + //////////////////////////////////////////////////////////////////////////////////////// + // This is only for WHQL test. +- BOOLEAN WhqlTest; ++ BOOLEAN WhqlTest; + //////////////////////////////////////////////////////////////////////////////////////// + +- RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; +- // Fast Roaming +- BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI +- CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. ++ RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; ++ // Fast Roaming ++ BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI ++ CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. + +- BOOLEAN IEEE8021X; +- BOOLEAN IEEE8021x_required_keys; +- CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys +- UCHAR DesireSharedKeyId; ++ BOOLEAN IEEE8021X; ++ BOOLEAN IEEE8021x_required_keys; ++ CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys ++ UCHAR DesireSharedKeyId; + +- // 0: driver ignores wpa_supplicant +- // 1: wpa_supplicant initiates scanning and AP selection +- // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters +- UCHAR WpaSupplicantUP; +- UCHAR WpaSupplicantScanCount; +- BOOLEAN bRSN_IE_FromWpaSupplicant; ++ // 0: driver ignores wpa_supplicant ++ // 1: wpa_supplicant initiates scanning and AP selection ++ // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters ++ UCHAR WpaSupplicantUP; ++ UCHAR WpaSupplicantScanCount; ++ BOOLEAN bRSN_IE_FromWpaSupplicant; + +- CHAR dev_name[16]; +- USHORT OriDevType; ++ CHAR dev_name[16]; ++ USHORT OriDevType; + +- BOOLEAN bTGnWifiTest; +- BOOLEAN bScanReqIsFromWebUI; ++ BOOLEAN bTGnWifiTest; ++ BOOLEAN bScanReqIsFromWebUI; + +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; +- RT_HT_PHY_INFO DesiredHtPhyInfo; +- BOOLEAN bAutoTxRateSwitch; ++ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; // For transmit phy setting in TXWI. ++ DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; ++ RT_HT_PHY_INFO DesiredHtPhyInfo; ++ BOOLEAN bAutoTxRateSwitch; + + #ifdef RTMP_MAC_PCI +- UCHAR BBPR3; ++ UCHAR BBPR3; + // PS Control has 2 meanings for advanced power save function. + // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. + // 2. EnableNewPS : will save more current in sleep or radio off mode. +- PS_CONTROL PSControl; +-#endif // RTMP_MAC_PCI // +- +- ++ PS_CONTROL PSControl; ++#endif // RTMP_MAC_PCI // + +- +- BOOLEAN bAutoConnectByBssid; +- ULONG BeaconLostTime; // seconds +- BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable ++ BOOLEAN bAutoConnectByBssid; ++ ULONG BeaconLostTime; // seconds ++ BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable + } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; + + // This data structure keep the current active BSS/IBSS's configuration that this STA +@@ -1578,680 +1516,637 @@ typedef struct _STA_ADMIN_CONFIG { + // Normally, after SCAN or failed roaming attempts, we need to recover back to + // the current active settings. + typedef struct _STA_ACTIVE_CONFIG { +- USHORT Aid; +- USHORT AtimWin; // in kusec; IBSS parameter set element +- USHORT CapabilityInfo; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; ++ USHORT Aid; ++ USHORT AtimWin; // in kusec; IBSS parameter set element ++ USHORT CapabilityInfo; ++ USHORT CfpMaxDuration; ++ USHORT CfpPeriod; + + // Copy supported rate from desired AP's beacon. We are trying to match + // AP's supported and extended rate settings. +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; ++ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ UCHAR SupRateLen; ++ UCHAR ExtRateLen; + // Copy supported ht from desired AP's beacon. We are trying to match +- RT_HT_PHY_INFO SupportedPhyInfo; +- RT_HT_CAPABILITY SupportedHtPhy; ++ RT_HT_PHY_INFO SupportedPhyInfo; ++ RT_HT_CAPABILITY SupportedHtPhy; + } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; + +- +- +- +- +- + typedef struct _MAC_TABLE_ENTRY { + //Choose 1 from ValidAsWDS and ValidAsCLI to validize. +- BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too. +- BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode. +- BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions. +- BOOLEAN ValidAsMesh; +- BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode. +- BOOLEAN isCached; +- BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. +- +- UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM ++ BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too. ++ BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode. ++ BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions. ++ BOOLEAN ValidAsMesh; ++ BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode. ++ BOOLEAN isCached; ++ BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. ++ ++ UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM + //jan for wpa + // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB +- UCHAR CMTimerRunning; +- UCHAR apidx; // MBSS number +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; +- UCHAR ANonce[LEN_KEY_DESC_NONCE]; +- UCHAR SNonce[LEN_KEY_DESC_NONCE]; +- UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; +- UCHAR PTK[64]; +- UCHAR ReTryCounter; +- RALINK_TIMER_STRUCT RetryTimer; +- RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined +- NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS GroupKeyWepStatus; +- AP_WPA_STATE WpaState; +- GTK_STATE GTKState; +- USHORT PortSecured; +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X +- CIPHER_KEY PairwiseKey; +- PVOID pAd; +- INT PMKID_CacheIdx; +- UCHAR PMKID[LEN_PMKID]; +- +- +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR PsMode; +- SST Sst; +- AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only +- BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure +- USHORT Aid; +- USHORT CapabilityInfo; +- UCHAR LastRssi; +- ULONG NoDataIdleCount; +- UINT16 StationKeepAliveCount; // unit: second +- ULONG PsQIdleCount; +- QUEUE_HEADER PsQueue; +- +- UINT32 StaConnectTime; // the live time of this station since associated with AP +- +- BOOLEAN bSendBAR; +- USHORT NoBADataCountDown; +- +- UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment +- UINT TxBFCount; // 3*3 +- UINT FIFOCount; +- UINT DebugFIFOCount; +- UINT DebugTxCount; +- BOOLEAN bDlsInit; +- ++ UCHAR CMTimerRunning; ++ UCHAR apidx; // MBSS number ++ UCHAR RSNIE_Len; ++ UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; ++ UCHAR ANonce[LEN_KEY_DESC_NONCE]; ++ UCHAR SNonce[LEN_KEY_DESC_NONCE]; ++ UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; ++ UCHAR PTK[64]; ++ UCHAR ReTryCounter; ++ RALINK_TIMER_STRUCT RetryTimer; ++ RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM ++ NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined ++ NDIS_802_11_WEP_STATUS WepStatus; ++ NDIS_802_11_WEP_STATUS GroupKeyWepStatus; ++ AP_WPA_STATE WpaState; ++ GTK_STATE GTKState; ++ USHORT PortSecured; ++ NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X ++ CIPHER_KEY PairwiseKey; ++ PVOID pAd; ++ INT PMKID_CacheIdx; ++ UCHAR PMKID[LEN_PMKID]; ++ ++ UCHAR Addr[MAC_ADDR_LEN]; ++ UCHAR PsMode; ++ SST Sst; ++ AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only ++ BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure ++ USHORT Aid; ++ USHORT CapabilityInfo; ++ UCHAR LastRssi; ++ ULONG NoDataIdleCount; ++ UINT16 StationKeepAliveCount; // unit: second ++ ULONG PsQIdleCount; ++ QUEUE_HEADER PsQueue; ++ ++ UINT32 StaConnectTime; // the live time of this station since associated with AP ++ ++ BOOLEAN bSendBAR; ++ USHORT NoBADataCountDown; ++ ++ UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment ++ UINT TxBFCount; // 3*3 ++ UINT FIFOCount; ++ UINT DebugFIFOCount; ++ UINT DebugTxCount; ++ BOOLEAN bDlsInit; + + //==================================================== + //WDS entry needs these + // if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab +- UINT MatchWDSTabIdx; +- UCHAR MaxSupportedRate; +- UCHAR CurrTxRate; +- UCHAR CurrTxRateIndex; ++ UINT MatchWDSTabIdx; ++ UCHAR MaxSupportedRate; ++ UCHAR CurrTxRate; ++ UCHAR CurrTxRateIndex; + // to record the each TX rate's quality. 0 is best, the bigger the worse. +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +-// USHORT OneSecTxOkCount; +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 ContinueTxFailCnt; +- UINT32 CurrTxRateStableTime; // # of second in current TX rate +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition ++ USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; ++// USHORT OneSecTxOkCount; ++ UINT32 OneSecTxNoRetryOkCount; ++ UINT32 OneSecTxRetryOkCount; ++ UINT32 OneSecTxFailCount; ++ UINT32 ContinueTxFailCnt; ++ UINT32 CurrTxRateStableTime; // # of second in current TX rate ++ UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition + //==================================================== + +- BOOLEAN fNoisyEnvironment; +- BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction +- ULONG LastTxOkCount; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; ++ BOOLEAN fNoisyEnvironment; ++ BOOLEAN fLastSecAccordingRSSI; ++ UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down ++ CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction ++ ULONG LastTxOkCount; ++ UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; + + // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular + // BOOLEAN control, either ON or OFF. These flags should always be accessed via + // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. + // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED +- ULONG ClientStatusFlags; ++ ULONG ClientStatusFlags; + +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. ++ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; // For transmit phy setting in TXWI. + + // HT EWC MIMO-N used parameters +- USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format +- USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI +- USHORT TXAutoBAbitmap; +- USHORT BADeclineBitmap; +- USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked +- USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked +- USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked ++ USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format ++ USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI ++ USHORT TXAutoBAbitmap; ++ USHORT BADeclineBitmap; ++ USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked ++ USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked ++ USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked + + // 802.11n features. +- UCHAR MpduDensity; +- UCHAR MaxRAmpduFactor; +- UCHAR AMsduSize; +- UCHAR MmpsMode; // MIMO power save more. ++ UCHAR MpduDensity; ++ UCHAR MaxRAmpduFactor; ++ UCHAR AMsduSize; ++ UCHAR MmpsMode; // MIMO power save more. + +- HT_CAPABILITY_IE HTCapability; ++ HT_CAPABILITY_IE HTCapability; + +- BOOLEAN bAutoTxRateSwitch; ++ BOOLEAN bAutoTxRateSwitch; + +- UCHAR RateLen; ++ UCHAR RateLen; + struct _MAC_TABLE_ENTRY *pNext; +- USHORT TxSeq[NUM_OF_TID]; +- USHORT NonQosDataSeq; ++ USHORT TxSeq[NUM_OF_TID]; ++ USHORT NonQosDataSeq; + +- RSSI_SAMPLE RssiSample; ++ RSSI_SAMPLE RssiSample; + +- UINT32 TXMCSExpected[16]; +- UINT32 TXMCSSuccessful[16]; +- UINT32 TXMCSFailed[16]; +- UINT32 TXMCSAutoFallBack[16][16]; ++ UINT32 TXMCSExpected[16]; ++ UINT32 TXMCSSuccessful[16]; ++ UINT32 TXMCSFailed[16]; ++ UINT32 TXMCSAutoFallBack[16][16]; + +- ULONG LastBeaconRxTime; ++ ULONG LastBeaconRxTime; + + ULONG AssocDeadLine; + } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; + + typedef struct _MAC_TABLE { +- USHORT Size; ++ USHORT Size; + MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE]; + MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; +- QUEUE_HEADER McastPsQueue; +- ULONG PsQIdleCount; +- BOOLEAN fAnyStationInPsm; +- BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. +- BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP +- BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset +- BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ +- BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. +- BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. +- BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic +- BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS ++ QUEUE_HEADER McastPsQueue; ++ ULONG PsQIdleCount; ++ BOOLEAN fAnyStationInPsm; ++ BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. ++ BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP ++ BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset ++ BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ ++ BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. ++ BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. ++ BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic ++ BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS + //2008/10/28: KH add to support Antenna power-saving of AP<-- + //2008/10/28: KH add to support Antenna power-saving of AP--> + } MAC_TABLE, *PMAC_TABLE; + +- +- +- +- +- +-struct wificonf +-{ +- BOOLEAN bShortGI; ++struct wificonf { ++ BOOLEAN bShortGI; + BOOLEAN bGreenField; + }; + ++typedef struct _RTMP_DEV_INFO_ { ++ UCHAR chipName[16]; ++ RTMP_INF_TYPE infType; ++} RTMP_DEV_INFO; + +-typedef struct _RTMP_DEV_INFO_ +-{ +- UCHAR chipName[16]; +- RTMP_INF_TYPE infType; +-}RTMP_DEV_INFO; +- +- +- +- +-struct _RTMP_CHIP_OP_ +-{ ++struct _RTMP_CHIP_OP_ { + /* Calibration access related callback functions */ +- int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ +- int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ ++ int (*eeinit) (RTMP_ADAPTER * pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ ++ int (*eeread) (RTMP_ADAPTER * pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ + + /* MCU related callback functions */ +- int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ +- int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ +- int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */ ++ int (*loadFirmware) (RTMP_ADAPTER * pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ ++ int (*eraseFirmware) (RTMP_ADAPTER * pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ ++ int (*sendCommandToMcu) (RTMP_ADAPTER * pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */ + + /* RF access related callback functions */ + REG_PAIR *pRFRegTable; +- void (*AsicRfInit)(RTMP_ADAPTER *pAd); +- void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd); +- void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd); +- void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd); +- void (*AsicHaltAction)(RTMP_ADAPTER *pAd); ++ void (*AsicRfInit) (RTMP_ADAPTER * pAd); ++ void (*AsicRfTurnOn) (RTMP_ADAPTER * pAd); ++ void (*AsicRfTurnOff) (RTMP_ADAPTER * pAd); ++ void (*AsicReverseRfFromSleepMode) (RTMP_ADAPTER * pAd); ++ void (*AsicHaltAction) (RTMP_ADAPTER * pAd); + }; + +- + // + // The miniport adapter structure + // +-struct _RTMP_ADAPTER +-{ +- PVOID OS_Cookie; // save specific structure relative to OS +- PNET_DEV net_dev; +- ULONG VirtualIfCnt; ++struct _RTMP_ADAPTER { ++ PVOID OS_Cookie; // save specific structure relative to OS ++ PNET_DEV net_dev; ++ ULONG VirtualIfCnt; + +- RTMP_CHIP_OP chipOps; +- USHORT ThisTbttNumToNextWakeUp; ++ RTMP_CHIP_OP chipOps; ++ USHORT ThisTbttNumToNextWakeUp; + + #ifdef RTMP_MAC_PCI + /*****************************************************************************************/ + /* PCI related parameters */ + /*****************************************************************************************/ +- PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use +- unsigned int irq_num; +- +- USHORT LnkCtrlBitMask; +- USHORT RLnkCtrlConfiguration; +- USHORT RLnkCtrlOffset; +- USHORT HostLnkCtrlConfiguration; +- USHORT HostLnkCtrlOffset; +- USHORT PCIePowerSaveLevel; +- ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip +- ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip +- USHORT DeviceID; // Read from PCI config +- ULONG AccessBBPFailCount; +- BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. +- BOOLEAN bPCIclkOffDisableTx; // +- +- BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set . +- BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280. +- ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. +- +- UINT int_enable_reg; +- UINT int_disable_mask; +- UINT int_pending; +- +- +- RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD +- RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors +- RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors +- RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA +-#endif // RTMP_MAC_PCI // +- +- +- NDIS_SPIN_LOCK irq_lock; +- UCHAR irq_disabled; ++ PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ unsigned int irq_num; ++ ++ USHORT LnkCtrlBitMask; ++ USHORT RLnkCtrlConfiguration; ++ USHORT RLnkCtrlOffset; ++ USHORT HostLnkCtrlConfiguration; ++ USHORT HostLnkCtrlOffset; ++ USHORT PCIePowerSaveLevel; ++ ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip ++ ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip ++ USHORT DeviceID; // Read from PCI config ++ ULONG AccessBBPFailCount; ++ BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. ++ BOOLEAN bPCIclkOffDisableTx; // ++ ++ BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set . ++ BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280. ++ ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. ++ ++ UINT int_enable_reg; ++ UINT int_disable_mask; ++ UINT int_pending; ++ ++ RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD ++ RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors ++ RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors ++ RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA ++#endif // RTMP_MAC_PCI // ++ ++ NDIS_SPIN_LOCK irq_lock; ++ UCHAR irq_disabled; + + #ifdef RTMP_MAC_USB + /*****************************************************************************************/ + /* USB related parameters */ + /*****************************************************************************************/ +- struct usb_config_descriptor *config; +- UINT BulkInEpAddr; // bulk-in endpoint address +- UINT BulkOutEpAddr[6]; // bulk-out endpoint address ++ struct usb_config_descriptor *config; ++ UINT BulkInEpAddr; // bulk-in endpoint address ++ UINT BulkOutEpAddr[6]; // bulk-out endpoint address + +- UINT NumberOfPipes; +- USHORT BulkOutMaxPacketSize; +- USHORT BulkInMaxPacketSize; ++ UINT NumberOfPipes; ++ USHORT BulkOutMaxPacketSize; ++ USHORT BulkInMaxPacketSize; + + //======Control Flags +- LONG PendingIoCount; +- ULONG BulkFlags; +- BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority ++ LONG PendingIoCount; ++ ULONG BulkFlags; ++ BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority + + //======Cmd Thread +- CmdQ CmdQ; +- NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock +- RTMP_OS_TASK cmdQTask; ++ CmdQ CmdQ; ++ NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock ++ RTMP_OS_TASK cmdQTask; + + //======Semaphores (event) +- RTMP_OS_SEM UsbVendorReq_semaphore; +- PVOID UsbVendorReqBuf; +- wait_queue_head_t *wait; +-#endif // RTMP_MAC_USB // ++ RTMP_OS_SEM UsbVendorReq_semaphore; ++ PVOID UsbVendorReqBuf; ++ wait_queue_head_t *wait; ++#endif // RTMP_MAC_USB // + + /*****************************************************************************************/ + /* RBUS related parameters */ + /*****************************************************************************************/ + +- + /*****************************************************************************************/ + /* Both PCI/USB related parameters */ + /*****************************************************************************************/ +- //RTMP_DEV_INFO chipInfo; +- RTMP_INF_TYPE infType; ++ //RTMP_DEV_INFO chipInfo; ++ RTMP_INF_TYPE infType; + + /*****************************************************************************************/ + /* Driver Mgmt related parameters */ + /*****************************************************************************************/ +- RTMP_OS_TASK mlmeTask; ++ RTMP_OS_TASK mlmeTask; + #ifdef RTMP_TIMER_TASK_SUPPORT + // If you want use timer task to handle the timer related jobs, enable this. +- RTMP_TIMER_TASK_QUEUE TimerQ; +- NDIS_SPIN_LOCK TimerQLock; +- RTMP_OS_TASK timerTask; +-#endif // RTMP_TIMER_TASK_SUPPORT // +- ++ RTMP_TIMER_TASK_QUEUE TimerQ; ++ NDIS_SPIN_LOCK TimerQLock; ++ RTMP_OS_TASK timerTask; ++#endif // RTMP_TIMER_TASK_SUPPORT // + + /*****************************************************************************************/ + /* Tx related parameters */ + /*****************************************************************************************/ +- BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once +- NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; ++ BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once ++ NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; + + #ifdef RTMP_MAC_USB + // Data related context and AC specified, 4 AC supported +- NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs +- NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock ++ NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs ++ NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock + +- HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; +- NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock ++ HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; ++ NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock + + // 4 sets of Bulk Out index and pending flag +- UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe ++ UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe + +- BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe +- UCHAR bulkResetPipeid; +- BOOLEAN MgmtBulkPending; +- ULONG bulkResetReq[6]; +-#endif // RTMP_MAC_USB // ++ BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe ++ UCHAR bulkResetPipeid; ++ BOOLEAN MgmtBulkPending; ++ ULONG bulkResetReq[6]; ++#endif // RTMP_MAC_USB // + + // resource for software backlog queues +- QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA +- NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock +- +- RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors +- RTMP_MGMT_RING MgmtRing; +- NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock ++ QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA ++ NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock + ++ RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors ++ RTMP_MGMT_RING MgmtRing; ++ NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock + + /*****************************************************************************************/ + /* Rx related parameters */ + /*****************************************************************************************/ + + #ifdef RTMP_MAC_PCI +- RTMP_RX_RING RxRing; +- NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock ++ RTMP_RX_RING RxRing; ++ NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock + #ifdef RT3090 +- NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // ++ NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock ++#endif // RT3090 // ++#endif // RTMP_MAC_PCI // + #ifdef RTMP_MAC_USB +- RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. +- NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs +- UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE. +- UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller. +- UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it. +- ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. +- ULONG TransferBufferLength; // current length of the packet buffer +- ULONG ReadPosition; // current read position in a packet buffer +-#endif // RTMP_MAC_USB // ++ RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. ++ NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs ++ UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE. ++ UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller. ++ UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it. ++ ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. ++ ULONG TransferBufferLength; // current length of the packet buffer ++ ULONG ReadPosition; // current read position in a packet buffer ++#endif // RTMP_MAC_USB // + + /*****************************************************************************************/ + /* ASIC related parameters */ + /*****************************************************************************************/ +- UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. ++ UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. + + // --------------------------- + // E2PROM + // --------------------------- +- ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused +- ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. +- USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; +- UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 +- BOOLEAN EepromAccess; +- UCHAR EFuseTag; +- ++ ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused ++ ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. ++ USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; ++ UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 ++ BOOLEAN EepromAccess; ++ UCHAR EFuseTag; + + // --------------------------- + // BBP Control + // --------------------------- +- UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID +- CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power +- BBP_R66_TUNING BbpTuning; ++ UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID ++ CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power ++ BBP_R66_TUNING BbpTuning; + + // ---------------------------- + // RFIC control + // ---------------------------- +- UCHAR RfIcType; // RFIC_xxx +- ULONG RfFreqOffset; // Frequency offset for channel switching +- RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ ++ UCHAR RfIcType; // RFIC_xxx ++ ULONG RfFreqOffset; // Frequency offset for channel switching ++ RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ + +- EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference. +- EEPROM_NIC_CONFIG2_STRUC NicConfig2; ++ EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference. ++ EEPROM_NIC_CONFIG2_STRUC NicConfig2; + + // This soft Rx Antenna Diversity mechanism is used only when user set + // RX Antenna = DIVERSITY ON +- SOFT_RX_ANT_DIVERSITY RxAnt; +- +- UCHAR RFProgSeq; +- CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels. +- CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey +- CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw +- CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey +- +- UCHAR ChannelListNum; // number of channel in ChannelList[] +- UCHAR Bbp94; +- BOOLEAN BbpForCCK; +- ULONG Tx20MPwrCfgABand[5]; +- ULONG Tx20MPwrCfgGBand[5]; +- ULONG Tx40MPwrCfgABand[5]; +- ULONG Tx40MPwrCfgGBand[5]; +- +- BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control +- UCHAR TssiRefA; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1)) +- +- BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control +- UCHAR TssiRefG; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) +- +- CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h +- CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value +- CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value +- +- CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah +- CHAR ARssiOffset1; // Store A RSSI#1 Offset value +- CHAR ARssiOffset2; // Store A RSSI#2 Offset value +- +- CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h +- CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 +- CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 +- CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 ++ SOFT_RX_ANT_DIVERSITY RxAnt; ++ ++ UCHAR RFProgSeq; ++ CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels. ++ CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey ++ CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw ++ CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey ++ ++ UCHAR ChannelListNum; // number of channel in ChannelList[] ++ UCHAR Bbp94; ++ BOOLEAN BbpForCCK; ++ ULONG Tx20MPwrCfgABand[5]; ++ ULONG Tx20MPwrCfgGBand[5]; ++ ULONG Tx40MPwrCfgABand[5]; ++ ULONG Tx40MPwrCfgGBand[5]; ++ ++ BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control ++ UCHAR TssiRefA; // Store Tssi reference value as 25 temperature. ++ UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate. ++ UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate. ++ UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value ++ CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1)) ++ ++ BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control ++ UCHAR TssiRefG; // Store Tssi reference value as 25 temperature. ++ UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate. ++ UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate. ++ UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value ++ CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) ++ ++ CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h ++ CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value ++ CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value ++ ++ CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah ++ CHAR ARssiOffset1; // Store A RSSI#1 Offset value ++ CHAR ARssiOffset2; // Store A RSSI#2 Offset value ++ ++ CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h ++ CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 ++ CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 ++ CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 + #ifdef RT30xx + // for 3572 +- UCHAR Bbp25; +- UCHAR Bbp26; ++ UCHAR Bbp25; ++ UCHAR Bbp26; + +- UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G +- UCHAR TxMixerGain5G; +-#endif // RT30xx // ++ UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G ++ UCHAR TxMixerGain5G; ++#endif // RT30xx // + // ---------------------------- + // LED control + // ---------------------------- +- MCU_LEDCS_STRUC LedCntl; +- USHORT Led1; // read from EEPROM 0x3c +- USHORT Led2; // EEPROM 0x3e +- USHORT Led3; // EEPROM 0x40 +- UCHAR LedIndicatorStrength; +- UCHAR RssiSingalstrengthOffet; +- BOOLEAN bLedOnScanning; +- UCHAR LedStatus; ++ MCU_LEDCS_STRUC LedCntl; ++ USHORT Led1; // read from EEPROM 0x3c ++ USHORT Led2; // EEPROM 0x3e ++ USHORT Led3; // EEPROM 0x40 ++ UCHAR LedIndicatorStrength; ++ UCHAR RssiSingalstrengthOffet; ++ BOOLEAN bLedOnScanning; ++ UCHAR LedStatus; + + /*****************************************************************************************/ + /* 802.11 related parameters */ + /*****************************************************************************************/ + // outgoing BEACON frame buffer and corresponding TXD +- TXWI_STRUC BeaconTxWI; +- PUCHAR BeaconBuf; +- USHORT BeaconOffset[HW_BEACON_MAX_COUNT]; ++ TXWI_STRUC BeaconTxWI; ++ PUCHAR BeaconBuf; ++ USHORT BeaconOffset[HW_BEACON_MAX_COUNT]; + + // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. +- PSPOLL_FRAME PsPollFrame; +- HEADER_802_11 NullFrame; ++ PSPOLL_FRAME PsPollFrame; ++ HEADER_802_11 NullFrame; + + #ifdef RTMP_MAC_USB +- TX_CONTEXT BeaconContext[BEACON_RING_SIZE]; +- TX_CONTEXT NullContext; +- TX_CONTEXT PsPollContext; +- TX_CONTEXT RTSContext; +-#endif // RTMP_MAC_USB // ++ TX_CONTEXT BeaconContext[BEACON_RING_SIZE]; ++ TX_CONTEXT NullContext; ++ TX_CONTEXT PsPollContext; ++ TX_CONTEXT RTSContext; ++#endif // RTMP_MAC_USB // + + //=========AP=========== + +- + //=======STA=========== + // ----------------------------------------------- + // STA specific configuration & operation status + // used only when pAd->OpMode == OPMODE_STA + // ----------------------------------------------- +- STA_ADMIN_CONFIG StaCfg; // user desired settings +- STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) +- CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f +- NDIS_MEDIA_STATE PreMediaState; ++ STA_ADMIN_CONFIG StaCfg; // user desired settings ++ STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) ++ CHAR nickname[IW_ESSID_MAX_SIZE + 1]; // nickname, only used in the iwconfig i/f ++ NDIS_MEDIA_STATE PreMediaState; + + //=======Common=========== + // OP mode: either AP or STA +- UCHAR OpMode; // OPMODE_STA, OPMODE_AP +- +- NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected ++ UCHAR OpMode; // OPMODE_STA, OPMODE_AP + ++ NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected + + /* MAT related parameters */ + + // configuration: read from Registry & E2PROM +- BOOLEAN bLocalAdminMAC; // Use user changed MAC +- UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address +- UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address ++ BOOLEAN bLocalAdminMAC; // Use user changed MAC ++ UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address ++ UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address + + // ------------------------------------------------------ + // common configuration to both OPMODE_STA and OPMODE_AP + // ------------------------------------------------------ +- COMMON_CONFIG CommonCfg; +- MLME_STRUCT Mlme; ++ COMMON_CONFIG CommonCfg; ++ MLME_STRUCT Mlme; + + // AP needs those vaiables for site survey feature. +- MLME_AUX MlmeAux; // temporary settings used during MLME state machine +- BSS_TABLE ScanTab; // store the latest SCAN result ++ MLME_AUX MlmeAux; // temporary settings used during MLME state machine ++ BSS_TABLE ScanTab; // store the latest SCAN result + + //About MacTab, the sta driver will use #0 and #1 for multicast and AP. +- MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. +- NDIS_SPIN_LOCK MacTabLock; ++ MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. ++ NDIS_SPIN_LOCK MacTabLock; + +- BA_TABLE BATable; ++ BA_TABLE BATable; + +- NDIS_SPIN_LOCK BATabLock; ++ NDIS_SPIN_LOCK BATabLock; + RALINK_TIMER_STRUCT RECBATimer; + + // encryption/decryption KEY tables +- CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3] ++ CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3] + +- // RX re-assembly buffer for fragmentation +- FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame ++ // RX re-assembly buffer for fragmentation ++ FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame + + // various Counters +- COUNTER_802_3 Counters8023; // 802.3 counters +- COUNTER_802_11 WlanCounters; // 802.11 MIB counters +- COUNTER_RALINK RalinkCounters; // Ralink propriety counters +- COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching +- PRIVATE_STRUC PrivateInfo; // Private information & counters ++ COUNTER_802_3 Counters8023; // 802.3 counters ++ COUNTER_802_11 WlanCounters; // 802.11 MIB counters ++ COUNTER_RALINK RalinkCounters; // Ralink propriety counters ++ COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching ++ PRIVATE_STRUC PrivateInfo; // Private information & counters + + // flags, see fRTMP_ADAPTER_xxx flags +- ULONG Flags; // Represent current device status +- ULONG PSFlags; // Power Save operation flag. ++ ULONG Flags; // Represent current device status ++ ULONG PSFlags; // Power Save operation flag. + + // current TX sequence # +- USHORT Sequence; ++ USHORT Sequence; + + // Control disconnect / connect event generation + //+++Didn't used anymore +- ULONG LinkDownTime; ++ ULONG LinkDownTime; + //--- +- ULONG LastRxRate; +- ULONG LastTxRate; ++ ULONG LastRxRate; ++ ULONG LastTxRate; + //+++Used only for Station +- BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting ++ BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting + //--- + +- ULONG ExtraInfo; // Extra information for displaying status +- ULONG SystemErrorBitmap; // b0: E2PROM version error ++ ULONG ExtraInfo; // Extra information for displaying status ++ ULONG SystemErrorBitmap; // b0: E2PROM version error + + //+++Didn't used anymore +- ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D ++ ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D + //--- + + // --------------------------- + // System event log + // --------------------------- +- RT_802_11_EVENT_TABLE EventTab; +- ++ RT_802_11_EVENT_TABLE EventTab; + +- BOOLEAN HTCEnable; ++ BOOLEAN HTCEnable; + + /*****************************************************************************************/ + /* Statistic related parameters */ + /*****************************************************************************************/ + #ifdef RTMP_MAC_USB +- ULONG BulkOutDataOneSecCount; +- ULONG BulkInDataOneSecCount; +- ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount +- ULONG watchDogRxCnt; +- ULONG watchDogRxOverFlowCnt; +- ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; +- INT TransferedLength[NUM_OF_TX_RING]; +-#endif // RTMP_MAC_USB // +- +- BOOLEAN bUpdateBcnCntDone; +- ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition ++ ULONG BulkOutDataOneSecCount; ++ ULONG BulkInDataOneSecCount; ++ ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount ++ ULONG watchDogRxCnt; ++ ULONG watchDogRxOverFlowCnt; ++ ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; ++ INT TransferedLength[NUM_OF_TX_RING]; ++#endif // RTMP_MAC_USB // ++ ++ BOOLEAN bUpdateBcnCntDone; ++ ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition + // ---------------------------- + // DEBUG paramerts + // ---------------------------- +- //ULONG DebugSetting[4]; +- BOOLEAN bBanAllBaSetup; +- BOOLEAN bPromiscuous; ++ //ULONG DebugSetting[4]; ++ BOOLEAN bBanAllBaSetup; ++ BOOLEAN bPromiscuous; + + // ---------------------------- + // rt2860c emulation-use Parameters + // ---------------------------- +- //ULONG rtsaccu[30]; +- //ULONG ctsaccu[30]; +- //ULONG cfendaccu[30]; +- //ULONG bacontent[16]; +- //ULONG rxint[RX_RING_SIZE+1]; +- //UCHAR rcvba[60]; +- BOOLEAN bLinkAdapt; +- BOOLEAN bForcePrintTX; +- BOOLEAN bForcePrintRX; +- //BOOLEAN bDisablescanning; //defined in RT2870 USB +- BOOLEAN bStaFifoTest; +- BOOLEAN bProtectionTest; +- BOOLEAN bBroadComHT; ++ //ULONG rtsaccu[30]; ++ //ULONG ctsaccu[30]; ++ //ULONG cfendaccu[30]; ++ //ULONG bacontent[16]; ++ //ULONG rxint[RX_RING_SIZE+1]; ++ //UCHAR rcvba[60]; ++ BOOLEAN bLinkAdapt; ++ BOOLEAN bForcePrintTX; ++ BOOLEAN bForcePrintRX; ++ //BOOLEAN bDisablescanning; //defined in RT2870 USB ++ BOOLEAN bStaFifoTest; ++ BOOLEAN bProtectionTest; ++ BOOLEAN bBroadComHT; + //+++Following add from RT2870 USB. +- ULONG BulkOutReq; +- ULONG BulkOutComplete; +- ULONG BulkOutCompleteOther; +- ULONG BulkOutCompleteCancel; // seems not use now? +- ULONG BulkInReq; +- ULONG BulkInComplete; +- ULONG BulkInCompleteFail; ++ ULONG BulkOutReq; ++ ULONG BulkOutComplete; ++ ULONG BulkOutCompleteOther; ++ ULONG BulkOutCompleteCancel; // seems not use now? ++ ULONG BulkInReq; ++ ULONG BulkInComplete; ++ ULONG BulkInCompleteFail; + //--- + +- struct wificonf WIFItestbed; ++ struct wificonf WIFItestbed; + + struct reordering_mpdu_pool mpdu_blk_pool; + +- ULONG OneSecondnonBEpackets; // record non BE packets per second ++ ULONG OneSecondnonBEpackets; // record non BE packets per second + + #ifdef LINUX +- struct iw_statistics iw_stats; +- +- struct net_device_stats stats; +-#endif // LINUX // +- ++ struct iw_statistics iw_stats; + ++ struct net_device_stats stats; ++#endif // LINUX // + +- +- +- ULONG TbttTickCount; ++ ULONG TbttTickCount; + #ifdef PCI_MSI_SUPPORT +- BOOLEAN HaveMsi; +-#endif // PCI_MSI_SUPPORT // ++ BOOLEAN HaveMsi; ++#endif // PCI_MSI_SUPPORT // + +- +- UCHAR is_on; ++ UCHAR is_on; + + #define TIME_BASE (1000000/OS_HZ) + #define TIME_ONE_SECOND (1000000/TIME_BASE) +- UCHAR flg_be_adjust; +- ULONG be_adjust_last_time; +- ++ UCHAR flg_be_adjust; ++ ULONG be_adjust_last_time; + +- +- +- +- +- +- UINT8 FlgCtsEnabled; +- UINT8 PM_FlgSuspend; ++ UINT8 FlgCtsEnabled; ++ UINT8 PM_FlgSuspend; + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +- BOOLEAN bUseEfuse; +- UCHAR EEPROMImage[1024]; +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++ BOOLEAN bUseEfuse; ++ UCHAR EEPROMImage[1024]; ++#endif // RTMP_EFUSE_SUPPORT // ++#endif // RT30xx // + }; + +- +- + #define DELAYINTMASK 0x0003fffb + #define INTMASK 0x0003fffb + #define IndMask 0x0003fffc +@@ -2262,34 +2157,30 @@ struct _RTMP_ADAPTER + #define RxCoherent 0x00010000 // rx coherent + #define McuCommand 0x00000200 // mcu + #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt +-#define TBTTInt 0x00000800 // TBTT interrupt +-#define GPTimeOutInt 0x00008000 // GPtimeout interrupt +-#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt ++#define TBTTInt 0x00000800 // TBTT interrupt ++#define GPTimeOutInt 0x00008000 // GPtimeout interrupt ++#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt + #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt + +- + /*************************************************************************** + * Rx Path software control block related data structures + **************************************************************************/ +-typedef struct _RX_BLK_ +-{ +-// RXD_STRUC RxD; // sample +- RT28XX_RXD_STRUC RxD; +- PRXWI_STRUC pRxWI; +- PHEADER_802_11 pHeader; +- PNDIS_PACKET pRxPacket; +- UCHAR *pData; +- USHORT DataSize; +- USHORT Flags; +- UCHAR UserPriority; // for calculate TKIP MIC using ++typedef struct _RX_BLK_ { ++// RXD_STRUC RxD; // sample ++ RT28XX_RXD_STRUC RxD; ++ PRXWI_STRUC pRxWI; ++ PHEADER_802_11 pHeader; ++ PNDIS_PACKET pRxPacket; ++ UCHAR *pData; ++ USHORT DataSize; ++ USHORT Flags; ++ UCHAR UserPriority; // for calculate TKIP MIC using + } RX_BLK; + +- + #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) + #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag) + #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag)) + +- + #define fRX_WDS 0x0001 + #define fRX_AMSDU 0x0002 + #define fRX_ARALINK 0x0004 +@@ -2308,7 +2199,6 @@ typedef struct _RX_BLK_ + #define LENGTH_ARALINK_SUBFRAMEHEAD 14 + #define LENGTH_ARALINK_HEADER_FIELD 2 + +- + /*************************************************************************** + * Tx Path software control block related data structures + **************************************************************************/ +@@ -2320,50 +2210,45 @@ typedef struct _RX_BLK_ + #define TX_RALINK_FRAME 0x10 + #define TX_FRAG_FRAME 0x20 + ++// Currently the sizeof(TX_BLK) is 148 bytes. ++typedef struct _TX_BLK_ { ++ UCHAR QueIdx; ++ UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch ++ UCHAR TotalFrameNum; // Total frame number want to send-out in one batch ++ USHORT TotalFragNum; // Total frame fragments required in one batch ++ USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch + +-// Currently the sizeof(TX_BLK) is 148 bytes. +-typedef struct _TX_BLK_ +-{ +- UCHAR QueIdx; +- UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch +- UCHAR TotalFrameNum; // Total frame number want to send-out in one batch +- USHORT TotalFragNum; // Total frame fragments required in one batch +- USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch +- +- QUEUE_HEADER TxPacketList; +- MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address +- HTTRANSMIT_SETTING *pTransmit; ++ QUEUE_HEADER TxPacketList; ++ MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address ++ HTTRANSMIT_SETTING *pTransmit; + + // Following structure used for the characteristics of a specific packet. +- PNDIS_PACKET pPacket; +- PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data +- PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss +- UINT SrcBufLen; // Length of packet payload which not including Layer 2 header +- PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required +- UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP ++ PNDIS_PACKET pPacket; ++ PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data ++ PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss ++ UINT SrcBufLen; // Length of packet payload which not including Layer 2 header ++ PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required ++ UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP + //RT2870 2.1.0.0 uses only 80 bytes + //RT3070 2.1.1.0 uses only 96 bytes + //RT3090 2.1.0.0 uses only 96 bytes +- UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding +- UCHAR HdrPadLen; // recording Header Padding Length; +- UCHAR apidx; // The interface associated to this packet +- UCHAR Wcid; // The MAC entry associated to this packet +- UCHAR UserPriority; // priority class of packet +- UCHAR FrameGap; // what kind of IFS this packet use +- UCHAR MpduReqNum; // number of fragments of this frame +- UCHAR TxRate; // TODO: Obsoleted? Should change to MCS? +- UCHAR CipherAlg; // cipher alogrithm +- PCIPHER_KEY pKey; +- +- +- +- USHORT Flags; //See following definitions for detail. ++ UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding ++ UCHAR HdrPadLen; // recording Header Padding Length; ++ UCHAR apidx; // The interface associated to this packet ++ UCHAR Wcid; // The MAC entry associated to this packet ++ UCHAR UserPriority; // priority class of packet ++ UCHAR FrameGap; // what kind of IFS this packet use ++ UCHAR MpduReqNum; // number of fragments of this frame ++ UCHAR TxRate; // TODO: Obsoleted? Should change to MCS? ++ UCHAR CipherAlg; // cipher alogrithm ++ PCIPHER_KEY pKey; ++ ++ USHORT Flags; //See following definitions for detail. + + //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. +- ULONG Priv; // Hardware specific value saved in here. ++ ULONG Priv; // Hardware specific value saved in here. + } TX_BLK, *PTX_BLK; + +- + #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. + #define fTX_bAckRequired 0x0002 // the packet need ack response + #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not +@@ -2378,18 +2263,12 @@ typedef struct _TX_BLK_ + #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0) + #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag)) + +- +- +- +- +- + /*************************************************************************** + * Other static inline function definitions + **************************************************************************/ +-static inline VOID ConvertMulticastIP2MAC( +- IN PUCHAR pIpAddr, +- IN PUCHAR *ppMacAddr, +- IN UINT16 ProtoType) ++static inline VOID ConvertMulticastIP2MAC(IN PUCHAR pIpAddr, ++ IN PUCHAR * ppMacAddr, ++ IN UINT16 ProtoType) + { + if (pIpAddr == NULL) + return; +@@ -2397,569 +2276,348 @@ static inline VOID ConvertMulticastIP2MAC( + if (ppMacAddr == NULL || *ppMacAddr == NULL) + return; + +- switch (ProtoType) +- { +- case ETH_P_IPV6: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); +- *(*ppMacAddr) = 0x33; +- *(*ppMacAddr + 1) = 0x33; +- *(*ppMacAddr + 2) = pIpAddr[12]; +- *(*ppMacAddr + 3) = pIpAddr[13]; +- *(*ppMacAddr + 4) = pIpAddr[14]; +- *(*ppMacAddr + 5) = pIpAddr[15]; +- break; +- +- case ETH_P_IP: +- default: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); +- *(*ppMacAddr) = 0x01; +- *(*ppMacAddr + 1) = 0x00; +- *(*ppMacAddr + 2) = 0x5e; +- *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f; +- *(*ppMacAddr + 4) = pIpAddr[2]; +- *(*ppMacAddr + 5) = pIpAddr[3]; +- break; ++ switch (ProtoType) { ++ case ETH_P_IPV6: ++// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); ++ *(*ppMacAddr) = 0x33; ++ *(*ppMacAddr + 1) = 0x33; ++ *(*ppMacAddr + 2) = pIpAddr[12]; ++ *(*ppMacAddr + 3) = pIpAddr[13]; ++ *(*ppMacAddr + 4) = pIpAddr[14]; ++ *(*ppMacAddr + 5) = pIpAddr[15]; ++ break; ++ ++ case ETH_P_IP: ++ default: ++// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); ++ *(*ppMacAddr) = 0x01; ++ *(*ppMacAddr + 1) = 0x00; ++ *(*ppMacAddr + 2) = 0x5e; ++ *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f; ++ *(*ppMacAddr + 4) = pIpAddr[2]; ++ *(*ppMacAddr + 5) = pIpAddr[3]; ++ break; + } + + return; + } + +- + char *GetPhyMode(int Mode); +-char* GetBW(int BW); ++char *GetBW(int BW); + + // + // Private routines in rtmp_init.c + // +-NDIS_STATUS RTMPAllocAdapterBlock( +- IN PVOID handle, +- OUT PRTMP_ADAPTER *ppAdapter); ++NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, ++ OUT PRTMP_ADAPTER * ppAdapter); + +-NDIS_STATUS RTMPAllocTxRxRingMemory( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd); + +-VOID RTMPFreeAdapter( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICReadRegParameters( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext); ++NDIS_STATUS NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++ IN NDIS_HANDLE WrapperConfigurationContext); + + #ifdef RTMP_RF_RW_SUPPORT +-VOID NICInitRFRegisters( +- IN PRTMP_ADAPTER pAd); ++VOID NICInitRFRegisters(IN PRTMP_ADAPTER pAd); + +-VOID RtmpChipOpsRFHook( +- IN RTMP_ADAPTER *pAd); ++VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd); + +-NDIS_STATUS RT30xxWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN UCHAR value); ++NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, IN UCHAR value); + +-NDIS_STATUS RT30xxReadRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, +- IN PUCHAR pValue); ++NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR regID, IN PUCHAR pValue); + #endif // RTMP_RF_RW_SUPPORT // + +-VOID NICReadEEPROMParameters( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR mac_addr); ++VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr); + +-VOID NICInitAsicFromEEPROM( +- IN PRTMP_ADAPTER pAd); ++VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd); + ++NDIS_STATUS NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); + +-NDIS_STATUS NICInitializeAdapter( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset); ++NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); + +-NDIS_STATUS NICInitializeAsic( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bHardReset); ++VOID NICIssueReset(IN PRTMP_ADAPTER pAd); + +-VOID NICIssueReset( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType); + +-VOID RTMPRingCleanUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType); ++VOID UserCfgInit(IN PRTMP_ADAPTER pAd); + +-VOID UserCfgInit( +- IN PRTMP_ADAPTER pAd); ++VOID NICResetFromError(IN PRTMP_ADAPTER pAd); + +-VOID NICResetFromError( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS NICLoadFirmware(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICLoadFirmware( +- IN PRTMP_ADAPTER pAd); ++VOID NICEraseFirmware(IN PRTMP_ADAPTER pAd); + +-VOID NICEraseFirmware( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICLoadRateSwitchingParams( +- IN PRTMP_ADAPTER pAd); ++BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd); + +-BOOLEAN NICCheckForHang( +- IN PRTMP_ADAPTER pAd); ++VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd); + +-VOID NICUpdateFifoStaCounters( +- IN PRTMP_ADAPTER pAd); ++VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd); + +-VOID NICUpdateRawCounters( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPZeroMemory(IN PVOID pSrc, IN ULONG Length); + +-VOID RTMPZeroMemory( +- IN PVOID pSrc, +- IN ULONG Length); ++ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length); + +-ULONG RTMPCompareMemory( +- IN PVOID pSrc1, +- IN PVOID pSrc2, +- IN ULONG Length); ++VOID RTMPMoveMemory(OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length); + +-VOID RTMPMoveMemory( +- OUT PVOID pDest, +- IN PVOID pSrc, +- IN ULONG Length); ++VOID AtoH(PSTRING src, PUCHAR dest, int destlen); + +-VOID AtoH( +- PSTRING src, +- PUCHAR dest, +- int destlen); ++UCHAR BtoH(char ch); + +-UCHAR BtoH( +- char ch); ++VOID RTMPPatchMacBbpBug(IN PRTMP_ADAPTER pAd); + +-VOID RTMPPatchMacBbpBug( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, ++ IN PRALINK_TIMER_STRUCT pTimer, ++ IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat); + +-VOID RTMPInitTimer( +- IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, +- IN PVOID pData, +- IN BOOLEAN Repeat); ++VOID RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); + +-VOID RTMPSetTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value); ++VOID RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); + ++VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled); + +-VOID RTMPModTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- IN ULONG Value); ++VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status); + +-VOID RTMPCancelTimer( +- IN PRALINK_TIMER_STRUCT pTimer, +- OUT BOOLEAN *pCancelled); ++VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm); + +-VOID RTMPSetLED( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Status); +- +-VOID RTMPSetSignalLED( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_802_11_RSSI Dbm); +- +-VOID RTMPEnableRxTx( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd); + + // + // prototype in action.c + // +-VOID ActionStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID MlmeADDBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDELBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeDLSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeInvalidAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAddBAReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAddBARspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerDelBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBAAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID SendPSMPAction( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR Psmp); +- +-VOID PeerRMAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPublicAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerHTAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerQOSAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID RECBATimerTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID ORIBATimerTimeout( +- IN PRTMP_ADAPTER pAd); +- +-VOID SendRefreshBAR( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +- +-VOID ActHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, +- IN PUCHAR Addr2, +- IN PUCHAR Addr3); +- +-VOID BarHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, +- IN PUCHAR pDA, +- IN PUCHAR pSA); +- +-VOID InsertActField( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Category, +- IN UINT8 ActCode); +- +-BOOLEAN CntlEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, +- IN PFRAME_BA_REQ pMsg); ++VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, ++ OUT STATE_MACHINE_FUNC Trans[]); ++ ++VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp); ++ ++VOID PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID RECBATimerTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID ORIBATimerTimeout(IN PRTMP_ADAPTER pAd); ++ ++VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++ ++VOID ActHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PHEADER_802_11 pHdr80211, ++ IN PUCHAR Addr1, IN PUCHAR Addr2, IN PUCHAR Addr3); ++ ++VOID BarHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PFRAME_BAR pCntlBar, IN PUCHAR pDA, IN PUCHAR pSA); ++ ++VOID InsertActField(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, IN UINT8 Category, IN UINT8 ActCode); ++ ++BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++ IN ULONG Wcid, ++ IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg); + + // + // Private routines in rtmp_data.c + // +-BOOLEAN RTMPHandleRxDoneInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap); +- +-VOID RTMPHandleMgmtRingDmaDoneInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandleTBTTInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandlePreTBTTInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-void RTMPHandleTwakeupInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPHandleRxCoherentInterrupt( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN TxFrameIsAggregatible( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, +- IN PUCHAR p8023hdr); +- +-BOOLEAN PeerIsAggreOn( +- IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, +- IN PMAC_TABLE_ENTRY pMacEntry); +- +- +-NDIS_STATUS Sniff2BytesFromNdisBuffer( +- IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, +- OUT PUCHAR pByte1); +- +-NDIS_STATUS STASendPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); +- +-VOID STASendPackets( +- IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, +- IN UINT NumberOfPackets); +- +-VOID RTMPDeQueuePacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bIntContext, +- IN UCHAR QueIdx, +- IN UCHAR Max_Tx_Packets); +- +-NDIS_STATUS RTMPHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR QueIdx, +- OUT PULONG pFreeTXDLeft); +- +-NDIS_STATUS STAHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +-VOID STARxEAPOLFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-NDIS_STATUS RTMPFreeTXDRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType, +- IN UCHAR NumberRequired, +- IN PUCHAR FreeNumberIs); +- +-NDIS_STATUS MlmeHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-NDIS_STATUS MlmeHardTransmitMgmtRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); ++BOOLEAN RTMPHandleRxDoneInterrupt(IN PRTMP_ADAPTER pAd); ++ ++BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, ++ IN INT_SOURCE_CSR_STRUC TxRingBitmap); ++ ++VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++ ++void RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd); ++ ++BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pPrevAddr1, IN PUCHAR p8023hdr); ++ ++BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, ++ IN ULONG TxRate, IN PMAC_TABLE_ENTRY pMacEntry); ++ ++NDIS_STATUS Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++ IN UCHAR DesiredOffset, ++ OUT PUCHAR pByte0, OUT PUCHAR pByte1); ++ ++NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++ ++VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, ++ IN PPNDIS_PACKET ppPacketArray, IN UINT NumberOfPackets); ++ ++VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bIntContext, ++ IN UCHAR QueIdx, IN UCHAR Max_Tx_Packets); ++ ++NDIS_STATUS RTMPHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN UCHAR QueIdx, OUT PULONG pFreeTXDLeft); ++ ++NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR QueIdx); ++ ++VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ ++NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR RingType, ++ IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs); ++ ++NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++ ++NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); + + #ifdef RTMP_MAC_PCI +-NDIS_STATUS MlmeHardTransmitTxRing( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-NDIS_STATUS MlmeDataHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket); +- +-VOID RTMPWriteTxDescriptor( +- IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, +- IN UCHAR QSEL); ++NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++ ++NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++ ++VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, ++ IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, IN UCHAR QSEL); + #endif // RTMP_MAC_PCI // + +-USHORT RTMPCalcDuration( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Rate, +- IN ULONG Size); +- +-VOID RTMPWriteTxWI( +- IN PRTMP_ADAPTER pAd, +- IN PTXWI_STRUC pTxWI, +- IN BOOLEAN FRAG, +- IN BOOLEAN CFACK, +- IN BOOLEAN InsTimestamp, +- IN BOOLEAN AMPDU, +- IN BOOLEAN Ack, +- IN BOOLEAN NSeq, // HW new a sequence. +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, +- IN BOOLEAN CfAck, +- IN HTTRANSMIT_SETTING *pTransmit); +- +- +-VOID RTMPWriteTxWI_Data( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk); +- +- +-VOID RTMPWriteTxWI_Cache( +- IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, +- IN TX_BLK *pTxBlk); +- +-VOID RTMPSuspendMsduTransmission( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPResumeMsduTransmission( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS MiniportMMRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN PUCHAR pData, +- IN UINT Length); ++USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size); + +-//+++mark by shiang, now this function merge to MiniportMMRequest() +-//---mark by shiang, now this function merge to MiniportMMRequest() ++VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, // HW new a sequence. ++ IN UCHAR BASize, ++ IN UCHAR WCID, ++ IN ULONG Length, ++ IN UCHAR PID, ++ IN UCHAR TID, ++ IN UCHAR TxRate, ++ IN UCHAR Txopmode, ++ IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit); + +-VOID RTMPSendNullFrame( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, +- IN BOOLEAN bQosNull); ++VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, ++ IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); + +-VOID RTMPSendDisassociationFrame( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, ++ IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); + +-VOID RTMPSendRTSFrame( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, +- IN UCHAR QueIdx, +- IN UCHAR FrameGap); ++VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd); + +-PQUEUE_HEADER RTMPCheckTxSwQueue( +- IN PRTMP_ADAPTER pAd, +- OUT UCHAR *QueIdx); ++VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd); ++ ++NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN PUCHAR pData, IN UINT Length); ++ ++//+++mark by shiang, now this function merge to MiniportMMRequest() ++//---mark by shiang, now this function merge to MiniportMMRequest() + +-VOID RTMPReportMicError( +- IN PRTMP_ADAPTER pAd, +- IN PCIPHER_KEY pWpaKey); ++VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++ IN UCHAR TxRate, IN BOOLEAN bQosNull); + +-VOID WpaMicFailureReportFrame( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd); + +-VOID WpaDisassocApAndBlockAssoc( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN unsigned int NextMpduSize, ++ IN UCHAR TxRate, ++ IN UCHAR RTSRate, ++ IN USHORT AckDuration, ++ IN UCHAR QueIdx, IN UCHAR FrameGap); + +-VOID WpaStaPairwiseKeySetting( +- IN PRTMP_ADAPTER pAd); ++PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT UCHAR * QueIdx); + +-VOID WpaStaGroupKeySetting( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey); + +-NDIS_STATUS RTMPCloneNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET *ppOutPacket); ++VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-NDIS_STATUS RTMPAllocateNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET *pPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, +- IN UINT DataLen); ++VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); + +-VOID RTMPFreeNdisPacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); ++VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd); + +-BOOLEAN RTMPFreeTXDUponTxDmaDone( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx); ++VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd); + +-BOOLEAN RTMPCheckDHCPFrame( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); ++NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN pInsAMSDUHdr, ++ IN PNDIS_PACKET pInPacket, ++ OUT PNDIS_PACKET * ppOutPacket); + ++NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET * pPacket, ++ IN PUCHAR pHeader, ++ IN UINT HeaderLen, ++ IN PUCHAR pData, IN UINT DataLen); + +-BOOLEAN RTMPCheckEtherType( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); ++VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + ++BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx); ++ ++BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++ ++BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + + // + // Private routines in rtmp_wep.c + // +-VOID RTMPInitWepEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN UCHAR KeyLen, +- IN PUCHAR pDest); +- +-VOID RTMPEncryptData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDest, +- IN UINT Len); +- +-BOOLEAN RTMPSoftDecryptWEP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pGroupKey); +- +-VOID RTMPSetICV( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDest); +- +-VOID ARCFOUR_INIT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pKey, +- IN UINT KeyLen); +- +-UCHAR ARCFOUR_BYTE( +- IN PARCFOURCONTEXT Ctx); +- +-VOID ARCFOUR_DECRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-VOID ARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-VOID WPAARCFOUR_ENCRYPT( +- IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, +- IN PUCHAR pSrc, +- IN UINT Len); +- +-UINT RTMP_CALC_FCS32( +- IN UINT Fcs, +- IN PUCHAR Cp, +- IN INT Len); ++VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN UCHAR KeyId, IN UCHAR KeyLen, IN PUCHAR pDest); ++ ++VOID RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, IN PUCHAR pDest, IN UINT Len); ++ ++BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, IN PCIPHER_KEY pGroupKey); ++ ++VOID RTMPSetICV(IN PRTMP_ADAPTER pAd, IN PUCHAR pDest); ++ ++VOID ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, IN PUCHAR pKey, IN UINT KeyLen); ++ ++UCHAR ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx); ++ ++VOID ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++ ++VOID ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++ ++VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++ ++UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len); + + // + // MLME routines +@@ -2967,515 +2625,312 @@ UINT RTMP_CALC_FCS32( + + // Asic/RF/BBP related functions + +-VOID AsicAdjustTxPower( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateProtect( +- IN PRTMP_ADAPTER pAd, +- IN USHORT OperaionMode, +- IN UCHAR SetMask, +- IN BOOLEAN bDisableBGProtect, +- IN BOOLEAN bNonGFExist); +- +-VOID AsicSwitchChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, +- IN BOOLEAN bScan); +- +-VOID AsicLockChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel) ; +- +-VOID AsicRfTuningExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID AsicResetBBPAgent( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- +-VOID AsicForceSleep( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx); +- +-VOID AsicSetBssid( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pBssid); +- +-VOID AsicSetMcastWC( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicDelWcidTab( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid); +- +-VOID AsicEnableRDG( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicDisableRDG( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicDisableSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicEnableBssSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicEnableIbssSync( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicSetEdcaParm( +- IN PRTMP_ADAPTER pAd, +- IN PEDCA_PARM pEdcaParm); +- +-VOID AsicSetSlotTime( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUseShortSlotTime); +- +-VOID AsicAddSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, +- IN PUCHAR pTxMic, +- IN PUCHAR pRxMic); +- +-VOID AsicRemoveSharedKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx); +- +-VOID AsicUpdateWCIDAttribute( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR CipherAlg, +- IN BOOLEAN bUsePairewiseKeyTable); +- +-VOID AsicUpdateWCIDIVEIV( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN ULONG uIV, +- IN ULONG uEIV); +- +-VOID AsicUpdateRxWCIDTable( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN PUCHAR pAddr); +- +-VOID AsicAddKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN PCIPHER_KEY pCipherKey, +- IN BOOLEAN bUsePairewiseKeyTable, +- IN BOOLEAN bTxKey); +- +-VOID AsicAddPairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, +- IN CIPHER_KEY *pCipherKey); +- +-VOID AsicRemovePairwiseKeyEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR Wcid); +- +-BOOLEAN AsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1); ++VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++ IN USHORT OperaionMode, ++ IN UCHAR SetMask, ++ IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist); ++ ++VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Channel, IN BOOLEAN bScan); ++ ++VOID AsicLockChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); ++ ++VOID AsicRfTuningExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp); ++ ++VOID AsicForceSleep(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++ ++VOID AsicSetBssid(IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid); ++ ++VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicDelWcidTab(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid); + ++VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicDisableSync(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm); ++ ++VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime); ++ ++VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIndex, ++ IN UCHAR KeyIdx, ++ IN UCHAR CipherAlg, ++ IN PUCHAR pKey, IN PUCHAR pTxMic, IN PUCHAR pRxMic); ++ ++VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIndex, IN UCHAR KeyIdx); ++ ++VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, ++ IN USHORT WCID, ++ IN UCHAR BssIndex, ++ IN UCHAR CipherAlg, ++ IN BOOLEAN bUsePairewiseKeyTable); ++ ++VOID AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, ++ IN USHORT WCID, IN ULONG uIV, IN ULONG uEIV); ++ ++VOID AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, ++ IN USHORT WCID, IN PUCHAR pAddr); ++ ++VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN USHORT WCID, ++ IN UCHAR BssIndex, ++ IN UCHAR KeyIdx, ++ IN PCIPHER_KEY pCipherKey, ++ IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey); ++ ++VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr, ++ IN UCHAR WCID, IN CIPHER_KEY * pCipherKey); ++ ++VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIdx, IN UCHAR Wcid); ++ ++BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1); + + #ifdef RTMP_MAC_PCI +-BOOLEAN AsicCheckCommanOk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command); ++BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command); + #endif // RTMP_MAC_PCI // + +-VOID MacAddrRandomBssid( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pAddr); +- +-VOID MgtMacHeaderInit( +- IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, +- IN PUCHAR pDA, +- IN PUCHAR pBssid); +- +-VOID MlmeRadioOff( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +- +-VOID BssTableInit( +- IN BSS_TABLE *Tab); +- +-VOID BATableInit( +- IN PRTMP_ADAPTER pAd, +- IN BA_TABLE *Tab); +- +-ULONG BssTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN UCHAR Channel); +- +-ULONG BssSsidTableSearch( +- IN BSS_TABLE *Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel); +- +-ULONG BssTableSearchWithSSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, +- IN UCHAR Channel); +- +-ULONG BssSsidTableSearchBySSID( +- IN BSS_TABLE *Tab, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen); +- +-VOID BssTableDeleteEntry( +- IN OUT PBSS_TABLE pTab, +- IN PUCHAR pBssid, +- IN UCHAR Channel); +- +-VOID BATableDeleteORIEntry( +- IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY *pBAORIEntry); +- +-VOID BssEntrySet( +- IN PRTMP_ADAPTER pAd, +- OUT PBSS_ENTRY pBss, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN PCF_PARM CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE); +- +-ULONG BssTableSetEntry( +- IN PRTMP_ADAPTER pAd, +- OUT PBSS_TABLE pTab, +- IN PUCHAR pBssid, +- IN CHAR Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN USHORT BeaconPeriod, +- IN CF_PARM *CfParm, +- IN USHORT AtimWin, +- IN USHORT CapabilityInfo, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, +- IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, +- IN PNDIS_802_11_VARIABLE_IEs pVIE); +- +-VOID BATableInsertEntry( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Aid, +- IN USHORT TimeOutValue, +- IN USHORT StartingSeq, +- IN UCHAR TID, +- IN UCHAR BAWinSize, +- IN UCHAR OriginatorStatus, +- IN BOOLEAN IsRecipient); +- +-VOID BssTableSsidSort( +- IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE *OutTab, +- IN CHAR Ssid[], +- IN UCHAR SsidLen); +- +-VOID BssTableSortByRssi( +- IN OUT BSS_TABLE *OutTab); +- +-VOID BssCipherParse( +- IN OUT PBSS_ENTRY pBss); +- +-NDIS_STATUS MlmeQueueInit( +- IN MLME_QUEUE *Queue); +- +-VOID MlmeQueueDestroy( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MlmeEnqueue( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, +- IN ULONG MsgLen, +- IN VOID *Msg); +- +-BOOLEAN MlmeEnqueueForRecv( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, +- IN PVOID Msg, +- IN UCHAR Signal); +- +- +-BOOLEAN MlmeDequeue( +- IN MLME_QUEUE *Queue, +- OUT MLME_QUEUE_ELEM **Elem); +- +-VOID MlmeRestartStateMachine( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeQueueEmpty( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MlmeQueueFull( +- IN MLME_QUEUE *Queue); +- +-BOOLEAN MsgTypeSubst( +- IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, +- OUT INT *Machine, +- OUT INT *MsgType); +- +-VOID StateMachineInit( +- IN STATE_MACHINE *Sm, +- IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, +- IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, +- IN ULONG Base); +- +-VOID StateMachineSetAction( +- IN STATE_MACHINE *S, +- IN ULONG St, +- ULONG Msg, +- IN STATE_MACHINE_FUNC F); +- +-VOID StateMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Drop( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID AssocStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID ReassocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID AssocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID DisassocTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr); ++ ++VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PHEADER_802_11 pHdr80211, ++ IN UCHAR SubType, ++ IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid); ++ ++VOID MlmeRadioOff(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd); ++ ++VOID BssTableInit(IN BSS_TABLE * Tab); ++ ++VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab); ++ ++ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel); ++ ++ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, ++ IN PUCHAR pBssid, ++ IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel); ++ ++ULONG BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++ IN PUCHAR Bssid, ++ IN PUCHAR pSsid, ++ IN UCHAR SsidLen, IN UCHAR Channel); ++ ++ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++ IN PUCHAR pSsid, IN UCHAR SsidLen); ++ ++VOID BssTableDeleteEntry(IN OUT PBSS_TABLE pTab, ++ IN PUCHAR pBssid, IN UCHAR Channel); ++ ++VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, ++ IN BA_ORI_ENTRY * pBAORIEntry); ++ ++VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ IN UCHAR HtCapabilityLen, ++ IN UCHAR AddHtInfoLen, ++ IN UCHAR NewExtChanOffset, ++ IN UCHAR Channel, ++ IN CHAR Rssi, ++ IN LARGE_INTEGER TimeStamp, ++ IN UCHAR CkipFlag, ++ IN PEDCA_PARM pEdcaParm, ++ IN PQOS_CAPABILITY_PARM pQosCapability, ++ IN PQBSS_LOAD_PARM pQbssLoad, ++ IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ ++ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ IN UCHAR HtCapabilityLen, ++ IN UCHAR AddHtInfoLen, ++ IN UCHAR NewExtChanOffset, ++ IN UCHAR Channel, ++ IN CHAR Rssi, ++ IN LARGE_INTEGER TimeStamp, ++ IN UCHAR CkipFlag, ++ IN PEDCA_PARM pEdcaParm, ++ IN PQOS_CAPABILITY_PARM pQosCapability, ++ IN PQBSS_LOAD_PARM pQbssLoad, ++ IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ ++VOID BATableInsertEntry(IN PRTMP_ADAPTER pAd, ++ IN USHORT Aid, ++ IN USHORT TimeOutValue, ++ IN USHORT StartingSeq, ++ IN UCHAR TID, ++ IN UCHAR BAWinSize, ++ IN UCHAR OriginatorStatus, IN BOOLEAN IsRecipient); ++ ++VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, ++ OUT BSS_TABLE * OutTab, IN CHAR Ssid[], IN UCHAR SsidLen); ++ ++VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab); ++ ++VOID BssCipherParse(IN OUT PBSS_ENTRY pBss); ++ ++NDIS_STATUS MlmeQueueInit(IN MLME_QUEUE * Queue); ++ ++VOID MlmeQueueDestroy(IN MLME_QUEUE * Queue); ++ ++BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, ++ IN ULONG Machine, ++ IN ULONG MsgType, IN ULONG MsgLen, IN VOID * Msg); ++ ++BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++ IN ULONG Wcid, ++ IN ULONG TimeStampHigh, ++ IN ULONG TimeStampLow, ++ IN UCHAR Rssi0, ++ IN UCHAR Rssi1, ++ IN UCHAR Rssi2, ++ IN ULONG MsgLen, IN PVOID Msg, IN UCHAR Signal); ++ ++BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem); ++ ++VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd); ++ ++BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue); ++ ++BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue); ++ ++BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, ++ IN PFRAME_802_11 pFrame, ++ OUT INT * Machine, OUT INT * MsgType); ++ ++VOID StateMachineInit(IN STATE_MACHINE * Sm, ++ IN STATE_MACHINE_FUNC Trans[], ++ IN ULONG StNr, ++ IN ULONG MsgNr, ++ IN STATE_MACHINE_FUNC DefFunc, ++ IN ULONG InitState, IN ULONG Base); ++ ++VOID StateMachineSetAction(IN STATE_MACHINE * S, ++ IN ULONG St, ULONG Msg, IN STATE_MACHINE_FUNC F); ++ ++VOID StateMachinePerformAction(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * Sm, ++ OUT STATE_MACHINE_FUNC Trans[]); ++ ++VOID ReassocTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID AssocTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID DisassocTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + + //---------------------------------------------- +-VOID MlmeAssocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeReassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeDisassocReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAssocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerReassocRspAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerDisassocAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID DisassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID AssocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID ReassocTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID Cls3errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); ++VOID Cls3errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); + +-VOID InvalidStateWhenAssoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenReassoc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenDisassociate( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, ++ IN MLME_QUEUE_ELEM * Elem); + + #ifdef RTMP_MAC_USB +-VOID MlmeCntlConfirm( +- IN PRTMP_ADAPTER pAd, +- IN ULONG MsgType, +- IN USHORT Msg); ++VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg); + #endif // RTMP_MAC_USB // + +-VOID ComposePsPoll( +- IN PRTMP_ADAPTER pAd); +- +-VOID ComposeNullFrame( +- IN PRTMP_ADAPTER pAd); +- +-VOID AssocPostProc( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN USHORT CapabilityInfo, +- IN USHORT Aid, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, +- IN PEDCA_PARM pEdcaParm, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID AuthStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE sm, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID AuthTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID MlmeAuthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAuthRspAtSeq2Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerAuthRspAtSeq4Action( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID AuthTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID Cls2errAction( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr); +- +-VOID MlmeDeauthReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID InvalidStateWhenAuth( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID ComposePsPoll(IN PRTMP_ADAPTER pAd); ++ ++VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd); ++ ++VOID AssocPostProc(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pAddr2, ++ IN USHORT CapabilityInfo, ++ IN USHORT Aid, ++ IN UCHAR SupRate[], ++ IN UCHAR SupRateLen, ++ IN UCHAR ExtRate[], ++ IN UCHAR ExtRateLen, ++ IN PEDCA_PARM pEdcaParm, ++ IN HT_CAPABILITY_IE * pHtCapability, ++ IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo); ++ ++VOID AuthStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN PSTATE_MACHINE sm, OUT STATE_MACHINE_FUNC Trans[]); ++ ++VOID AuthTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); ++ ++VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + //============================================= + +-VOID AuthRspStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, +- IN STATE_MACHINE_FUNC Trans[]); ++VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN PSTATE_MACHINE Sm, ++ IN STATE_MACHINE_FUNC Trans[]); + +-VOID PeerDeauthAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAuthSimpleRspGenAndSend( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, +- IN USHORT Status); ++VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHdr80211, ++ IN USHORT Alg, ++ IN USHORT Seq, ++ IN USHORT Reason, IN USHORT Status); + + // + // Private routines in dls.c +@@ -3483,1185 +2938,778 @@ VOID PeerAuthSimpleRspGenAndSend( + + //======================================== + +-VOID SyncStateMachineInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *Sm, +- OUT STATE_MACHINE_FUNC Trans[]); ++VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * Sm, ++ OUT STATE_MACHINE_FUNC Trans[]); + +-VOID BeaconTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID BeaconTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + +-VOID ScanTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID ScanTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + +-VOID InvalidStateWhenScan( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenJoin( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenStart( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID EnqueueProbeRequest( +- IN PRTMP_ADAPTER pAd); ++VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd); + +-BOOLEAN ScanRunning( +- IN PRTMP_ADAPTER pAd); ++BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd); + //========================================= + +-VOID MlmeCntlInit( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- OUT STATE_MACHINE_FUNC Trans[]); +- +-VOID MlmeCntlMachinePerformAction( +- IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE *S, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlIdleProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlOidScanProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlOidSsidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlOidRTBssidProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlMlmeRoamingProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); +- +-VOID CntlWaitDisassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitJoinProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitReassocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitStartProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAuthProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAuthProc2( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID CntlWaitAssocProc( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID LinkUp( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssType); +- +-VOID LinkDown( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN IsReqFromAP); +- +-VOID IterateOnBssTab( +- IN PRTMP_ADAPTER pAd); +- +-VOID IterateOnBssTab2( +- IN PRTMP_ADAPTER pAd);; +- +-VOID JoinParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, +- IN ULONG BssIdx); +- +-VOID AssocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, +- IN USHORT ListenIntv); +- +-VOID ScanParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, +- IN UCHAR BssType, +- IN UCHAR ScanType); +- +-VOID DisassocParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, +- IN PUCHAR pAddr, +- IN USHORT Reason); +- +-VOID StartParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT *StartReq, +- IN CHAR Ssid[], +- IN UCHAR SsidLen); +- +-VOID AuthParmFill( +- IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, +- IN PUCHAR pAddr, +- IN USHORT Alg); +- +-VOID EnqueuePsPoll( +- IN PRTMP_ADAPTER pAd); +- +-VOID EnqueueBeaconFrame( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeJoinReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeScanReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID MlmeStartReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ScanTimeoutAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID BeaconTimeoutAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeaconAtScanAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeaconAtJoinAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerBeacon( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerProbeReqAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID ScanNextChannel( +- IN PRTMP_ADAPTER pAd); +- +-ULONG MakeIbssBeacon( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeScanReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT UCHAR *BssType, +- OUT CHAR ssid[], +- OUT UCHAR *SsidLen, +- OUT UCHAR *ScanType); +- +-BOOLEAN PeerBeaconAndProbeRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- IN UCHAR MsgChannel, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen, +- OUT UCHAR *pBssType, +- OUT USHORT *pBeaconPeriod, +- OUT UCHAR *pChannel, +- OUT UCHAR *pNewChannel, +- OUT LARGE_INTEGER *pTimestamp, +- OUT CF_PARM *pCfParm, +- OUT USHORT *pAtimWin, +- OUT USHORT *pCapabilityInfo, +- OUT UCHAR *pErp, +- OUT UCHAR *pDtimCount, +- OUT UCHAR *pDtimPeriod, +- OUT UCHAR *pBcastFlag, +- OUT UCHAR *pMessageToMe, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT UCHAR *pCkipFlag, +- OUT UCHAR *pAironetCellPowerLimit, +- OUT PEDCA_PARM pEdcaParm, +- OUT PQBSS_LOAD_PARM pQbssLoad, +- OUT PQOS_CAPABILITY_PARM pQosCapability, +- OUT ULONG *pRalinkIe, +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pPreNHtCapabilityLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT UCHAR *AddHtInfoLen, +- OUT ADD_HT_INFO_IE *AddHtInfo, +- OUT UCHAR *NewExtChannel, +- OUT USHORT *LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE); +- +-BOOLEAN PeerAddBAReqActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2); +- +-BOOLEAN PeerAddBARspActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen); +- +-BOOLEAN PeerDelBAActionSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN VOID *pMsg, +- IN ULONG MsgLen); +- +-BOOLEAN MlmeAssocReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT *CapabilityInfo, +- OUT ULONG *Timeout, +- OUT USHORT *ListenIntv); +- +-BOOLEAN MlmeAuthReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG *Timeout, +- OUT USHORT *Alg); +- +-BOOLEAN MlmeStartReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], +- OUT UCHAR *Ssidlen); +- +-BOOLEAN PeerAuthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT *Alg, +- OUT USHORT *Seq, +- OUT USHORT *Status, +- OUT CHAR ChlgText[]); +- +-BOOLEAN PeerAssocRspSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *pMsg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *pCapabilityInfo, +- OUT USHORT *pStatus, +- OUT USHORT *pAid, +- OUT UCHAR SupRate[], +- OUT UCHAR *pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR *pExtRateLen, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE +- OUT UCHAR *pHtCapabilityLen, +- OUT UCHAR *pAddHtInfoLen, +- OUT UCHAR *pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, +- OUT UCHAR *pCkipFlag); +- +-BOOLEAN PeerDisassocSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN PeerWpaMessageSanity( +- IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, +- IN MAC_TABLE_ENTRY *pEntry); +- +-BOOLEAN PeerDeauthSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT USHORT *Reason); +- +-BOOLEAN PeerProbeReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], +- OUT UCHAR *pSsidLen); +- +-BOOLEAN GetTimBit( +- IN CHAR *Ptr, +- IN USHORT Aid, +- OUT UCHAR *TimLen, +- OUT UCHAR *BcastFlag, +- OUT UCHAR *DtimCount, +- OUT UCHAR *DtimPeriod, +- OUT UCHAR *MessageToMe); +- +-UCHAR ChannelSanity( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel); +- +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( +- IN PBSS_ENTRY pBss); +- +-BOOLEAN MlmeDelBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen); +- +-BOOLEAN MlmeAddBAReqSanity( +- IN PRTMP_ADAPTER pAd, +- IN VOID *Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2); +- +-ULONG MakeOutgoingFrame( +- OUT UCHAR *Buffer, +- OUT ULONG *Length, ...); +- +-VOID LfsrInit( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Seed); +- +-UCHAR RandomByte( +- IN PRTMP_ADAPTER pAd); +- +-VOID AsicUpdateAutoFallBackTable( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pTxRate); +- +-VOID MlmePeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID LinkDownExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID STAMlmePeriodicExec( +- PRTMP_ADAPTER pAd); +- +-VOID MlmeAutoScan( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeAutoReconnectLastSSID( +- IN PRTMP_ADAPTER pAd); +- +-BOOLEAN MlmeValidateSSID( +- IN PUCHAR pSsid, +- IN UCHAR SsidLen); +- +-VOID MlmeCheckForRoaming( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32); +- +-BOOLEAN MlmeCheckForFastRoaming( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeDynamicTxRateSwitching( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeSetTxRate( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PRTMP_TX_RATE_SWITCH pTxRate); +- +-VOID MlmeSelectTxRateTable( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR *ppTable, +- IN PUCHAR pTableSize, +- IN PUCHAR pInitTxRateIdx); +- +-VOID MlmeCalculateChannelQuality( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, +- IN ULONG Now); +- +-VOID MlmeCheckPsmChange( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Now32); +- +-VOID MlmeSetPsmBit( +- IN PRTMP_ADAPTER pAd, +- IN USHORT psm); +- +-VOID MlmeSetTxPreamble( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TxPreamble); +- +-VOID UpdateBasicRateBitmap( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeUpdateTxRates( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bLinkUp, +- IN UCHAR apidx); +- +-VOID MlmeUpdateHtTxRates( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx); +- +-VOID RTMPCheckRates( +- IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], +- IN OUT UCHAR *SupRateLen); +- +-BOOLEAN RTMPCheckChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, +- IN UCHAR Channel); +- +-BOOLEAN RTMPCheckHt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN OUT HT_CAPABILITY_IE *pHtCapability, +- IN OUT ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID StaQuickResponeForRateUpExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RTMPUpdateMlmeRate( +- IN PRTMP_ADAPTER pAd); +- +-CHAR RTMPMaxRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, +- IN CHAR Rssi1, +- IN CHAR Rssi2); ++VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]); ++ ++VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, ++ IN STATE_MACHINE * S, ++ IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType); ++ ++VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP); ++ ++VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd); ++ ++VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd);; ++ ++VOID JoinParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, IN ULONG BssIdx); ++ ++VOID AssocParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, ++ IN PUCHAR pAddr, ++ IN USHORT CapabilityInfo, ++ IN ULONG Timeout, IN USHORT ListenIntv); ++ ++VOID ScanParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, ++ IN STRING Ssid[], ++ IN UCHAR SsidLen, IN UCHAR BssType, IN UCHAR ScanType); ++ ++VOID DisassocParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, ++ IN PUCHAR pAddr, IN USHORT Reason); ++ ++VOID StartParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_START_REQ_STRUCT * StartReq, ++ IN CHAR Ssid[], IN UCHAR SsidLen); ++ ++VOID AuthParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, ++ IN PUCHAR pAddr, IN USHORT Alg); ++ ++VOID EnqueuePsPoll(IN PRTMP_ADAPTER pAd); ++ ++VOID EnqueueBeaconFrame(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID ScanNextChannel(IN PRTMP_ADAPTER pAd); ++ ++ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd); ++ ++BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT UCHAR * BssType, ++ OUT CHAR ssid[], ++ OUT UCHAR * SsidLen, OUT UCHAR * ScanType); ++ ++BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ IN UCHAR MsgChannel, ++ OUT PUCHAR pAddr2, ++ OUT PUCHAR pBssid, ++ OUT CHAR Ssid[], ++ OUT UCHAR * pSsidLen, ++ OUT UCHAR * pBssType, ++ OUT USHORT * pBeaconPeriod, ++ OUT UCHAR * pChannel, ++ OUT UCHAR * pNewChannel, ++ OUT LARGE_INTEGER * pTimestamp, ++ OUT CF_PARM * pCfParm, ++ OUT USHORT * pAtimWin, ++ OUT USHORT * pCapabilityInfo, ++ OUT UCHAR * pErp, ++ OUT UCHAR * pDtimCount, ++ OUT UCHAR * pDtimPeriod, ++ OUT UCHAR * pBcastFlag, ++ OUT UCHAR * pMessageToMe, ++ OUT UCHAR SupRate[], ++ OUT UCHAR * pSupRateLen, ++ OUT UCHAR ExtRate[], ++ OUT UCHAR * pExtRateLen, ++ OUT UCHAR * pCkipFlag, ++ OUT UCHAR * pAironetCellPowerLimit, ++ OUT PEDCA_PARM pEdcaParm, ++ OUT PQBSS_LOAD_PARM pQbssLoad, ++ OUT PQOS_CAPABILITY_PARM pQosCapability, ++ OUT ULONG * pRalinkIe, ++ OUT UCHAR * pHtCapabilityLen, ++ OUT UCHAR * pPreNHtCapabilityLen, ++ OUT HT_CAPABILITY_IE * pHtCapability, ++ OUT UCHAR * AddHtInfoLen, ++ OUT ADD_HT_INFO_IE * AddHtInfo, ++ OUT UCHAR * NewExtChannel, ++ OUT USHORT * LengthVIE, ++ OUT PNDIS_802_11_VARIABLE_IEs pVIE); ++ ++BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, ++ IN ULONG MsgLen, OUT PUCHAR pAddr2); ++ ++BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * pMsg, IN ULONG MsgLen); ++ ++BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, IN VOID * pMsg, IN ULONG MsgLen); ++ ++BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pApAddr, ++ OUT USHORT * CapabilityInfo, ++ OUT ULONG * Timeout, OUT USHORT * ListenIntv); ++ ++BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr, ++ OUT ULONG * Timeout, OUT USHORT * Alg); ++ ++BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT CHAR Ssid[], OUT UCHAR * Ssidlen); ++ ++BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr, ++ OUT USHORT * Alg, ++ OUT USHORT * Seq, ++ OUT USHORT * Status, OUT CHAR ChlgText[]); ++ ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ OUT UCHAR * pHtCapabilityLen, ++ OUT UCHAR * pAddHtInfoLen, ++ OUT UCHAR * pNewExtChannelOffset, ++ OUT PEDCA_PARM pEdcaParm, OUT UCHAR * pCkipFlag); ++ ++BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, OUT USHORT * Reason); ++ ++BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, ++ IN PEAPOL_PACKET pMsg, ++ IN ULONG MsgLen, ++ IN UCHAR MsgType, IN MAC_TABLE_ENTRY * pEntry); ++ ++BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, OUT USHORT * Reason); ++ ++BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, ++ IN ULONG MsgLen, ++ OUT PUCHAR pAddr2, ++ OUT CHAR Ssid[], OUT UCHAR * pSsidLen); ++ ++BOOLEAN GetTimBit(IN CHAR * Ptr, ++ IN USHORT Aid, ++ OUT UCHAR * TimLen, ++ OUT UCHAR * BcastFlag, ++ OUT UCHAR * DtimCount, ++ OUT UCHAR * DtimPeriod, OUT UCHAR * MessageToMe); ++ ++UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel); ++ ++NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss); ++ ++BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, IN ULONG MsgLen); ++ ++BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, ++ IN VOID * Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2); ++ ++ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * Length, ...); ++ ++VOID LfsrInit(IN PRTMP_ADAPTER pAd, IN ULONG Seed); ++ ++UCHAR RandomByte(IN PRTMP_ADAPTER pAd); ++ ++VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pTxRate); ++ ++VOID MlmePeriodicExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID LinkDownExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd); ++ ++VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd); ++ ++BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen); ++ ++VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32); ++ ++BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate); ++ ++VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR * ppTable, ++ IN PUCHAR pTableSize, IN PUCHAR pInitTxRateIdx); ++ ++VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, IN ULONG Now); ++ ++VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32); ++ ++VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm); ++ ++VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble); ++ ++VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAd); ++ ++VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bLinkUp, IN UCHAR apidx); ++ ++VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx); ++ ++VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++ IN OUT UCHAR SupRate[], IN OUT UCHAR * SupRateLen); ++ ++BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, ++ IN UCHAR CentralChannel, IN UCHAR Channel); ++ ++BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, ++ IN OUT HT_CAPABILITY_IE * pHtCapability, ++ IN OUT ADD_HT_INFO_IE * pAddHtInfo); ++ ++VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); ++ ++VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd); ++ ++CHAR RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++ IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2); + + #ifdef RT30xx +-VOID AsicSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant); ++VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); + +-VOID RTMPFilterCalibration( +- IN PRTMP_ADAPTER pAd); ++VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd); + + #ifdef RTMP_EFUSE_SUPPORT + //2008/09/11:KH add to support efuse<-- +-INT set_eFuseGetFreeBlockCount_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); ++INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + +-INT set_eFusedump_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); ++INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + +-VOID eFusePhysicalReadRegisters( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, +- OUT USHORT* pData); ++VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, ++ IN USHORT Length, OUT USHORT * pData); + +-int RtmpEfuseSupportCheck( +- IN RTMP_ADAPTER *pAd); ++int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd); + +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, +- PUINT EfuseFreeBlock); ++VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock); + +-INT eFuse_init( +- IN PRTMP_ADAPTER pAd); ++INT eFuse_init(IN PRTMP_ADAPTER pAd); + //2008/09/11:KH add to support efuse--> + #endif // RTMP_EFUSE_SUPPORT // + + // add by johnli, RF power sequence setup +-VOID RT30xxLoadRFNormalModeSetup( +- IN PRTMP_ADAPTER pAd); ++VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxLoadRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); ++VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxReverseRFSleepModeSetup( +- IN PRTMP_ADAPTER pAd); ++VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd); + // end johnli + + #ifdef RT3070 +-VOID NICInitRT3070RFRegisters( +- IN RTMP_ADAPTER *pAd); ++VOID NICInitRT3070RFRegisters(IN RTMP_ADAPTER * pAd); + #endif // RT3070 // + #ifdef RT3090 +-VOID NICInitRT3090RFRegisters( +- IN RTMP_ADAPTER *pAd); ++VOID NICInitRT3090RFRegisters(IN RTMP_ADAPTER * pAd); + #endif // RT3090 // + +-VOID RT30xxHaltAction( +- IN PRTMP_ADAPTER pAd); ++VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxSetRxAnt( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Ant); ++VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); + #endif // RT30xx // + +-VOID AsicEvaluateRxAnt( +- IN PRTMP_ADAPTER pAd); ++VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd); + +-VOID AsicRxAntEvalTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + +-VOID APSDPeriodicExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++VOID APSDPeriodicExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry); ++BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry); + +-UCHAR RTMPStaFixedTxMode( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry); ++UCHAR RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); + +-VOID RTMPUpdateLegacyTxSetting( +- UCHAR fixed_tx_mode, +- PMAC_TABLE_ENTRY pEntry); ++VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry); + +-BOOLEAN RTMPAutoRateSwitchCheck( +- IN PRTMP_ADAPTER pAd); ++BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS MlmeInit( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd); + +-VOID MlmeHandler( +- IN PRTMP_ADAPTER pAd); ++VOID MlmeHandler(IN PRTMP_ADAPTER pAd); + +-VOID MlmeHalt( +- IN PRTMP_ADAPTER pAd); ++VOID MlmeHalt(IN PRTMP_ADAPTER pAd); + +-VOID MlmeResetRalinkCounters( +- IN PRTMP_ADAPTER pAd); ++VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd); + +-VOID BuildChannelList( +- IN PRTMP_ADAPTER pAd); ++VOID BuildChannelList(IN PRTMP_ADAPTER pAd); + +-UCHAR FirstChannel( +- IN PRTMP_ADAPTER pAd); ++UCHAR FirstChannel(IN PRTMP_ADAPTER pAd); + +-UCHAR NextChannel( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR channel); ++UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel); + +-VOID ChangeToCellPowerLimit( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit); ++VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++ IN UCHAR AironetCellPowerLimit); + + // + // Prototypes of function definition in rtmp_tkip.c + // +-VOID RTMPInitTkipEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pTKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, +- OUT PULONG pIV16, +- OUT PULONG pIV32); +- +-VOID RTMPInitMICEngine( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN UCHAR UserPriority, +- IN PUCHAR pMICKey); +- +-BOOLEAN RTMPTkipCompareMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, +- IN UINT Len); +- +-VOID RTMPCalculateMICValue( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, +- IN UCHAR apidx); +- +-VOID RTMPTkipAppendByte( +- IN PTKIP_KEY_INFO pTkip, +- IN UCHAR uChar); +- +-VOID RTMPTkipAppend( +- IN PTKIP_KEY_INFO pTkip, +- IN PUCHAR pSrc, +- IN UINT nBytes); +- +-VOID RTMPTkipGetMIC( +- IN PTKIP_KEY_INFO pTkip); +- +-BOOLEAN RTMPSoftDecryptTKIP( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, +- IN PCIPHER_KEY pWpaKey); +- +-BOOLEAN RTMPSoftDecryptAES( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN PCIPHER_KEY pWpaKey); ++VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pTKey, ++ IN UCHAR KeyId, ++ IN PUCHAR pTA, ++ IN PUCHAR pMICKey, ++ IN PUCHAR pTSC, OUT PULONG pIV16, OUT PULONG pIV32); ++ ++VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKey, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, IN UCHAR UserPriority, IN PUCHAR pMICKey); ++ ++BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pSrc, ++ IN PUCHAR pDA, ++ IN PUCHAR pSA, ++ IN PUCHAR pMICKey, ++ IN UCHAR UserPriority, IN UINT Len); ++ ++VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pEncap, ++ IN PCIPHER_KEY pKey, IN UCHAR apidx); ++ ++VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar); ++ ++VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes); ++ ++VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip); + ++BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, ++ IN UCHAR UserPriority, IN PCIPHER_KEY pWpaKey); + ++BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pData, ++ IN ULONG DataByteCnt, IN PCIPHER_KEY pWpaKey); + + // + // Prototypes of function definition in cmm_info.c + // +-INT RT_CfgSetCountryRegion( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg, +- IN INT band); ++INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band); + +-INT RT_CfgSetWirelessMode( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); ++INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + +-INT RT_CfgSetShortSlot( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT RT_CfgSetWepKey( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY *pSharedKey, +- IN INT keyIdx); +- +-INT RT_CfgSetWPAPSKKey( +- IN RTMP_ADAPTER *pAd, +- IN PSTRING keyString, +- IN UCHAR *pHashStr, +- IN INT hashStrLen, +- OUT PUCHAR pPMKBuf); ++INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + ++INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++ IN PSTRING keyString, ++ IN CIPHER_KEY * pSharedKey, IN INT keyIdx); + ++INT RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++ IN PSTRING keyString, ++ IN UCHAR * pHashStr, ++ IN INT hashStrLen, OUT PUCHAR pPMKBuf); + + // + // Prototypes of function definition in cmm_info.c + // +-VOID RTMPWPARemoveAllKeys( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPSetPhyMode( +- IN PRTMP_ADAPTER pAd, +- IN ULONG phymode); +- +-VOID RTMPUpdateHTIE( +- IN RT_HT_CAPABILITY *pRtHt, +- IN UCHAR *pMcsSet, +- OUT HT_CAPABILITY_IE *pHtCapability, +- OUT ADD_HT_INFO_IE *pAddHtInfo); +- +-VOID RTMPAddWcidAttributeEntry( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN MAC_TABLE_ENTRY *pEntry); +- +-PSTRING GetEncryptType( +- CHAR enc); +- +-PSTRING GetAuthMode( +- CHAR auth); +- +-VOID RTMPSetHT( +- IN PRTMP_ADAPTER pAd, +- IN OID_SET_HT_PHYMODE *pHTPhyMode); +- +-VOID RTMPSetIndividualHT( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx); +- +-VOID RTMPSendWirelessEvent( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Event_flag, +- IN PUCHAR pAddr, +- IN UCHAR BssIdx, +- IN CHAR Rssi); +- +-CHAR ConvertToRssi( +- IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi, +- IN UCHAR RssiNumber); ++VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode); ++ ++VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++ IN UCHAR * pMcsSet, ++ OUT HT_CAPABILITY_IE * pHtCapability, ++ OUT ADD_HT_INFO_IE * pAddHtInfo); ++ ++VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BssIdx, ++ IN UCHAR KeyIdx, ++ IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY * pEntry); ++ ++PSTRING GetEncryptType(CHAR enc); ++ ++PSTRING GetAuthMode(CHAR auth); ++ ++VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode); ++ ++VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx); ++ ++VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, ++ IN USHORT Event_flag, ++ IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi); ++ ++CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber); + + /*=================================== + Function prototype in cmm_wpa.c + =================================== */ +-VOID RTMPToWirelessSta( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, +- IN BOOLEAN bClearFrame); +- +-VOID WpaDerivePTK( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *PMK, +- IN UCHAR *ANonce, +- IN UCHAR *AA, +- IN UCHAR *SNonce, +- IN UCHAR *SA, +- OUT UCHAR *output, +- IN UINT len); +- +-VOID GenRandom( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR *macAddr, +- OUT UCHAR *random); +- +-BOOLEAN RTMPCheckWPAframe( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, +- IN UCHAR FromWhichBSSID); +- +-VOID AES_GTK_KEY_UNWRAP( +- IN UCHAR *key, +- OUT UCHAR *plaintext, +- IN UINT32 c_len, +- IN UCHAR *ciphertext); +- +-BOOLEAN RTMPParseEapolKeyData( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, +- IN BOOLEAN bWPA2, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID ConstructEapolMsg( +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR *KeyNonce, +- IN UCHAR *TxRSC, +- IN UCHAR *GTK, +- IN UCHAR *RSNIE, +- IN UCHAR RSNIE_Len, +- OUT PEAPOL_PACKET pMsg); +- +-NDIS_STATUS RTMPSoftDecryptBroadCastData( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher, +- IN PCIPHER_KEY pShard_key); +- +-VOID RTMPMakeRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, +- IN UINT WepStatus, +- IN UCHAR apidx); ++VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN UINT DataLen, IN BOOLEAN bClearFrame); ++ ++VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++ IN UCHAR * PMK, ++ IN UCHAR * ANonce, ++ IN UCHAR * AA, ++ IN UCHAR * SNonce, ++ IN UCHAR * SA, OUT UCHAR * output, IN UINT len); ++ ++VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random); ++ ++BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pData, ++ IN ULONG DataByteCount, IN UCHAR FromWhichBSSID); ++ ++VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, ++ OUT UCHAR * plaintext, ++ IN UINT32 c_len, IN UCHAR * ciphertext); ++ ++BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pKeyData, ++ IN UCHAR KeyDataLen, ++ IN UCHAR GroupKeyIndex, ++ IN UCHAR MsgType, ++ IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry); ++ ++VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR GroupKeyWepStatus, ++ IN UCHAR MsgType, ++ IN UCHAR DefaultKeyIdx, ++ IN UCHAR * KeyNonce, ++ IN UCHAR * TxRSC, ++ IN UCHAR * GTK, ++ IN UCHAR * RSNIE, ++ IN UCHAR RSNIE_Len, OUT PEAPOL_PACKET pMsg); ++ ++NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, ++ IN NDIS_802_11_ENCRYPTION_STATUS ++ GroupCipher, ++ IN PCIPHER_KEY pShard_key); ++ ++VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++ IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx); + + // + // function prototype in ap_wpa.c + // +-VOID RTMPGetTxTscFromAsic( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx, +- OUT PUCHAR pTxTsc); +- +-VOID APInstallPairwiseKey( +- PRTMP_ADAPTER pAd, +- PMAC_TABLE_ENTRY pEntry); +- +-UINT APValidateRSNIE( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pRsnIe, +- IN UCHAR rsnie_len); +- +-VOID HandleCounterMeasure( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID WPAStart4WayHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN ULONG TimeInterval); +- +-VOID WPAStart2WayGroupHS( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry); +- +-VOID PeerPairMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg3Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerPairMsg4Action( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerGroupMsg1Action( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN MLME_QUEUE_ELEM *Elem); +- +-VOID PeerGroupMsg2Action( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN VOID *Msg, +- IN UINT MsgLen); +- +-VOID WpaDeriveGTK( +- IN UCHAR *PMK, +- IN UCHAR *GNonce, +- IN UCHAR *AA, +- OUT UCHAR *output, +- IN UINT len); +- +-VOID AES_GTK_KEY_WRAP( +- IN UCHAR *key, +- IN UCHAR *plaintext, +- IN UINT32 p_len, +- OUT UCHAR *ciphertext); ++VOID RTMPGetTxTscFromAsic(IN PRTMP_ADAPTER pAd, ++ IN UCHAR apidx, OUT PUCHAR pTxTsc); + +-//typedef void (*TIMER_FUNCTION)(unsigned long); ++VOID APInstallPairwiseKey(PRTMP_ADAPTER pAd, PMAC_TABLE_ENTRY pEntry); ++ ++UINT APValidateRSNIE(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN PUCHAR pRsnIe, IN UCHAR rsnie_len); ++ ++VOID HandleCounterMeasure(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++ ++VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN ULONG TimeInterval); + ++VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++ ++VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, IN MLME_QUEUE_ELEM * Elem); ++ ++VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN VOID * Msg, IN UINT MsgLen); ++ ++VOID WpaDeriveGTK(IN UCHAR * PMK, ++ IN UCHAR * GNonce, ++ IN UCHAR * AA, OUT UCHAR * output, IN UINT len); ++ ++VOID AES_GTK_KEY_WRAP(IN UCHAR * key, ++ IN UCHAR * plaintext, ++ IN UINT32 p_len, OUT UCHAR * ciphertext); ++ ++//typedef void (*TIMER_FUNCTION)(unsigned long); + + /* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +-VOID RTMP_OS_Init_Timer( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN TIMER_FUNCTION function, +- IN PVOID data); +- +-VOID RTMP_OS_Add_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +-VOID RTMP_OS_Mod_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- IN unsigned long timeout); +- +- +-VOID RTMP_OS_Del_Timer( +- IN NDIS_MINIPORT_TIMER *pTimer, +- OUT BOOLEAN *pCancelled); +- +- +-VOID RTMP_OS_Release_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PQUEUE_ENTRY pEntry); +- +-VOID RTMPusecDelay( +- IN ULONG usec); +- +-NDIS_STATUS os_alloc_mem( +- IN RTMP_ADAPTER *pAd, +- OUT UCHAR **mem, +- IN ULONG size); +- +-NDIS_STATUS os_free_mem( +- IN PRTMP_ADAPTER pAd, +- IN PVOID mem); +- +- +-void RTMP_AllocateSharedMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-VOID RTMPFreeTxRxRingMemory( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS AdapterBlockAllocateMemory( +- IN PVOID handle, +- OUT PVOID *ppAd); +- +-void RTMP_AllocateTxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_FreeFirstTxBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateMgmtDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_AllocateRxDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-void RTMP_FreeDescMemory( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-PNDIS_PACKET RtmpOSNetPktAlloc( +- IN RTMP_ADAPTER *pAd, +- IN int size); +- +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); +- +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN BOOLEAN Cached, +- OUT PVOID *VirtualAddress); +- +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer( +- IN PRTMP_ADAPTER pAd, +- IN ULONG Length); +- +-void RTMP_QueryPacketInfo( +- IN PNDIS_PACKET pPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen); +- +-void RTMP_QueryNextPacketInfo( +- IN PNDIS_PACKET *ppPacket, +- OUT PACKET_INFO *pPacketInfo, +- OUT PUCHAR *pSrcBufVA, +- OUT UINT *pSrcBufLen); +- +- +-BOOLEAN RTMP_FillTxBlkInfo( +- IN RTMP_ADAPTER *pAd, +- IN TX_BLK *pTxBlk); ++VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout); + ++VOID RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++ IN NDIS_MINIPORT_TIMER * pTimer, ++ IN TIMER_FUNCTION function, IN PVOID data); + +-PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg); ++VOID RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout); + ++VOID RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ IN unsigned long timeout); + +- void announce_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); ++VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++ OUT BOOLEAN * pCancelled); + ++VOID RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry); + +-UINT BA_Reorder_AMSDU_Annnounce( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket); ++VOID RTMPusecDelay(IN ULONG usec); + +-PNET_DEV get_netdev_from_bssid( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR FromWhichBSSID); ++NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, ++ OUT UCHAR ** mem, IN ULONG size); + ++NDIS_STATUS os_free_mem(IN PRTMP_ADAPTER pAd, IN PVOID mem); + +-PNDIS_PACKET duplicate_pkt( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- IN UCHAR FromWhichBSSID); ++void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + ++VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd); + +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pOldPkt); ++NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd); + +-void ba_flush_reordering_timeout_mpdus( +- IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32); ++void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + ++void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++ IN UINT Index, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + +-VOID BAOriSessionSetUp( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, +- IN BOOLEAN isForced); ++void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); + +-VOID BASessionTearDownALL( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid); ++void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + +-BOOLEAN OS_Need_Clone_Packet(void); ++void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ ++void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN PVOID VirtualAddress, ++ IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ ++PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size); ++ ++PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress, ++ OUT PNDIS_PHYSICAL_ADDRESS ++ PhysicalAddress); + ++PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length, ++ IN BOOLEAN Cached, ++ OUT PVOID * VirtualAddress); + +-VOID build_tx_packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, +- IN ULONG FrameLen); ++PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++ IN ULONG Length); ++ ++void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, ++ OUT PACKET_INFO * pPacketInfo, ++ OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen); ++ ++void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, ++ OUT PACKET_INFO * pPacketInfo, ++ OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen); ++ ++BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk); ++ ++PRTMP_SCATTER_GATHER_LIST ++rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST * sg); ++ ++void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++ ++UINT BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++ ++PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID); ++ ++PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN ULONG DataSize, IN UCHAR FromWhichBSSID); ++ ++PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pOldPkt); ++ ++void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, ++ IN PBA_REC_ENTRY pBAEntry, ++ IN ULONG Now32); ++ ++VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN UCHAR TID, ++ IN USHORT TimeOut, ++ IN ULONG DelayTime, IN BOOLEAN isForced); ++ ++VOID BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid); ++ ++BOOLEAN OS_Need_Clone_Packet(void); + ++VOID build_tx_packet(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pFrame, IN ULONG FrameLen); + +-VOID BAOriSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive, +- IN BOOLEAN bForceSend); ++VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, ++ IN UCHAR TID, ++ IN BOOLEAN bPassive, IN BOOLEAN bForceSend); + +-VOID BARecSessionTearDown( +- IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, +- IN BOOLEAN bPassive); ++VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive); + + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); + void ba_reordering_resource_release(PRTMP_ADAPTER pAd); + +-PSTRING rstrtok( +- IN PSTRING s, +- IN const PSTRING ct); ++PSTRING rstrtok(IN PSTRING s, IN const PSTRING ct); + + ////////// common ioctl functions ////////// +-INT SetCommonHT( +- IN PRTMP_ADAPTER pAd); ++INT SetCommonHT(IN PRTMP_ADAPTER pAd); + +-INT WpaCheckEapCode( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, +- IN USHORT FrameLen, +- IN USHORT OffSet); ++INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet); + +-VOID WpaSendMicFailureToWpaSupplicant( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bUnicast); ++VOID WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bUnicast); + +-int wext_notify_event_assoc( +- IN RTMP_ADAPTER *pAd); ++int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd); + +-BOOLEAN STARxDoneInterruptHandle( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN argc); ++BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc); + + // AMPDU packet indication +-VOID Indicate_AMPDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); ++VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + + // AMSDU packet indication +-VOID Indicate_AMSDU_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); ++VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + + // Normal legacy Rx packet indication +-VOID Indicate_Legacy_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID Indicate_EAPOL_Packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-void update_os_packet_info( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-void wlan_802_11_to_802_3_packet( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID); ++VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ ++VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ ++void update_os_packet_info(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ ++void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, ++ IN PUCHAR pHeader802_3, ++ IN UCHAR FromWhichBSSID); + + // remove LLC and get 802_3 Header + #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ +@@ -4694,138 +3742,122 @@ void wlan_802_11_to_802_3_packet( + _pRxBlk->DataSize, _pRemovedLLCSNAP); \ + } + +-VOID Sta_Announce_or_Forward_802_3_Packet( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); ++VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN UCHAR FromWhichBSSID); + + #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ + Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); + //announce_802_3_packet(_pAd, _pPacket); + +-PNDIS_PACKET DuplicatePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); ++PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID); ++ ++PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pData, IN ULONG DataSize); + ++// Normal, AMPDU or AMSDU ++VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + +-PNDIS_PACKET ClonePacket( +- IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize); ++VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, ++ IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + ++VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, ++ IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI); + +-// Normal, AMPDU or AMSDU +-VOID CmmRxnonRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID CmmRxRalinkFrameIndicate( +- IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY *pEntry, +- IN RX_BLK *pRxBlk, +- IN UCHAR FromWhichBSSID); +- +-VOID Update_Rssi_Sample( +- IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE *pRssi, +- IN PRXWI_STRUC pRxWI); +- +-PNDIS_PACKET GetPacketFromRxRing( +- IN PRTMP_ADAPTER pAd, +- OUT PRT28XX_RXD_STRUC pSaveRxD, +- OUT BOOLEAN *pbReschedule, +- IN OUT UINT32 *pRxPending); +- +-PNDIS_PACKET RTMPDeFragmentDataFrame( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk); ++PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++ OUT PRT28XX_RXD_STRUC pSaveRxD, ++ OUT BOOLEAN * pbReschedule, ++ IN OUT UINT32 * pRxPending); ++ ++PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); + + enum { +- DIDmsg_lnxind_wlansniffrm = 0x00000044, +- DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, +- DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044, +- DIDmsg_lnxind_wlansniffrm_channel = 0x00030044, +- DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044, +- DIDmsg_lnxind_wlansniffrm_sq = 0x00050044, +- DIDmsg_lnxind_wlansniffrm_signal = 0x00060044, +- DIDmsg_lnxind_wlansniffrm_noise = 0x00070044, +- DIDmsg_lnxind_wlansniffrm_rate = 0x00080044, +- DIDmsg_lnxind_wlansniffrm_istx = 0x00090044, +- DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044 ++ DIDmsg_lnxind_wlansniffrm = 0x00000044, ++ DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, ++ DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044, ++ DIDmsg_lnxind_wlansniffrm_channel = 0x00030044, ++ DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044, ++ DIDmsg_lnxind_wlansniffrm_sq = 0x00050044, ++ DIDmsg_lnxind_wlansniffrm_signal = 0x00060044, ++ DIDmsg_lnxind_wlansniffrm_noise = 0x00070044, ++ DIDmsg_lnxind_wlansniffrm_rate = 0x00080044, ++ DIDmsg_lnxind_wlansniffrm_istx = 0x00090044, ++ DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044 + }; + enum { +- P80211ENUM_msgitem_status_no_value = 0x00 ++ P80211ENUM_msgitem_status_no_value = 0x00 + }; + enum { +- P80211ENUM_truth_false = 0x00, +- P80211ENUM_truth_true = 0x01 ++ P80211ENUM_truth_false = 0x00, ++ P80211ENUM_truth_true = 0x01 + }; + + /* Definition from madwifi */ + typedef struct { +- UINT32 did; +- UINT16 status; +- UINT16 len; +- UINT32 data; ++ UINT32 did; ++ UINT16 status; ++ UINT16 len; ++ UINT32 data; + } p80211item_uint32_t; + + typedef struct { +- UINT32 msgcode; +- UINT32 msglen; ++ UINT32 msgcode; ++ UINT32 msglen; + #define WLAN_DEVNAMELEN_MAX 16 +- UINT8 devname[WLAN_DEVNAMELEN_MAX]; +- p80211item_uint32_t hosttime; +- p80211item_uint32_t mactime; +- p80211item_uint32_t channel; +- p80211item_uint32_t rssi; +- p80211item_uint32_t sq; +- p80211item_uint32_t signal; +- p80211item_uint32_t noise; +- p80211item_uint32_t rate; +- p80211item_uint32_t istx; +- p80211item_uint32_t frmlen; ++ UINT8 devname[WLAN_DEVNAMELEN_MAX]; ++ p80211item_uint32_t hosttime; ++ p80211item_uint32_t mactime; ++ p80211item_uint32_t channel; ++ p80211item_uint32_t rssi; ++ p80211item_uint32_t sq; ++ p80211item_uint32_t signal; ++ p80211item_uint32_t noise; ++ p80211item_uint32_t rate; ++ p80211item_uint32_t istx; ++ p80211item_uint32_t frmlen; + } wlan_ng_prism2_header; + + /* The radio capture header precedes the 802.11 header. */ + typedef struct PACKED _ieee80211_radiotap_header { +- UINT8 it_version; /* Version 0. Only increases ++ UINT8 it_version; /* Version 0. Only increases + * for drastic changes, + * introduction of compatible + * new fields does not count. + */ +- UINT8 it_pad; +- UINT16 it_len; /* length of the whole ++ UINT8 it_pad; ++ UINT16 it_len; /* length of the whole + * header in bytes, including + * it_version, it_pad, + * it_len, and data fields. + */ +- UINT32 it_present; /* A bitmap telling which +- * fields are present. Set bit 31 +- * (0x80000000) to extend the +- * bitmap by another 32 bits. +- * Additional extensions are made +- * by setting bit 31. +- */ +-}ieee80211_radiotap_header ; ++ UINT32 it_present; /* A bitmap telling which ++ * fields are present. Set bit 31 ++ * (0x80000000) to extend the ++ * bitmap by another 32 bits. ++ * Additional extensions are made ++ * by setting bit 31. ++ */ ++} ieee80211_radiotap_header; + + enum ieee80211_radiotap_type { +- IEEE80211_RADIOTAP_TSFT = 0, +- IEEE80211_RADIOTAP_FLAGS = 1, +- IEEE80211_RADIOTAP_RATE = 2, +- IEEE80211_RADIOTAP_CHANNEL = 3, +- IEEE80211_RADIOTAP_FHSS = 4, +- IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, +- IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, +- IEEE80211_RADIOTAP_LOCK_QUALITY = 7, +- IEEE80211_RADIOTAP_TX_ATTENUATION = 8, +- IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, +- IEEE80211_RADIOTAP_DBM_TX_POWER = 10, +- IEEE80211_RADIOTAP_ANTENNA = 11, +- IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, +- IEEE80211_RADIOTAP_DB_ANTNOISE = 13 ++ IEEE80211_RADIOTAP_TSFT = 0, ++ IEEE80211_RADIOTAP_FLAGS = 1, ++ IEEE80211_RADIOTAP_RATE = 2, ++ IEEE80211_RADIOTAP_CHANNEL = 3, ++ IEEE80211_RADIOTAP_FHSS = 4, ++ IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5, ++ IEEE80211_RADIOTAP_DBM_ANTNOISE = 6, ++ IEEE80211_RADIOTAP_LOCK_QUALITY = 7, ++ IEEE80211_RADIOTAP_TX_ATTENUATION = 8, ++ IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9, ++ IEEE80211_RADIOTAP_DBM_TX_POWER = 10, ++ IEEE80211_RADIOTAP_ANTENNA = 11, ++ IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12, ++ IEEE80211_RADIOTAP_DB_ANTNOISE = 13 + }; + + #define WLAN_RADIOTAP_PRESENT ( \ +@@ -4842,623 +3874,411 @@ typedef struct _wlan_radiotap_header { + } wlan_radiotap_header; + /* Definition from madwifi */ + +-void send_monitor_packets( +- IN PRTMP_ADAPTER pAd, +- IN RX_BLK *pRxBlk); ++void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); + ++VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates); + +-VOID RTMPSetDesiredRates( +- IN PRTMP_ADAPTER pAdapter, +- IN LONG Rates); ++INT Set_FixedTxMode_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + +-INT Set_FixedTxMode_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); ++BOOLEAN RT28XXChipsetCheck(IN void *_dev_p); + +-BOOLEAN RT28XXChipsetCheck( +- IN void *_dev_p); ++VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd); + ++VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd); + +-VOID RT28XXDMADisable( +- IN RTMP_ADAPTER *pAd); ++VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ IN INT apidx, ++ IN ULONG BeaconLen, IN ULONG UpdatePos); + +-VOID RT28XXDMAEnable( +- IN RTMP_ADAPTER *pAd); ++int rt28xx_init(IN PRTMP_ADAPTER pAd, ++ IN PSTRING pDefaultMac, IN PSTRING pHostName); + +-VOID RT28xx_UpdateBeaconToAsic( +- IN RTMP_ADAPTER * pAd, +- IN INT apidx, +- IN ULONG BeaconLen, +- IN ULONG UpdatePos); ++NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd); + +-int rt28xx_init( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, +- IN PSTRING pHostName); ++VOID RtmpNetTaskExit(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RtmpNetTaskInit( +- IN RTMP_ADAPTER *pAd); ++NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd); + +-VOID RtmpNetTaskExit( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RtmpMgmtTaskInit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RtmpMgmtTaskExit( +- IN RTMP_ADAPTER *pAd); ++VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd); + + void tbtt_tasklet(unsigned long data); + ++PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, ++ IN RTMP_OS_NETDEV_OP_HOOK * pNetHook); + +-PNET_DEV RtmpPhyNetDevInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_OS_NETDEV_OP_HOOK *pNetHook); +- +-BOOLEAN RtmpPhyNetDevExit( +- IN RTMP_ADAPTER *pAd, +- IN PNET_DEV net_dev); +- +-INT RtmpRaDevCtrlInit( +- IN RTMP_ADAPTER *pAd, +- IN RTMP_INF_TYPE infType); ++BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev); + +-BOOLEAN RtmpRaDevCtrlExit( +- IN RTMP_ADAPTER *pAd); ++INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); + ++BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd); + + #ifdef RTMP_MAC_PCI + // + // Function Prototype in cmm_data_pci.c + // +-USHORT RtmpPCI_WriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpPCI_WriteSubTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-VOID RtmpPCI_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx); +- +-VOID RtmpPCIDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT LastTxIdx); +- +-VOID RtmpPCIDataKickOut( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +- +-int RtmpPCIMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen); +- +- +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD); +- +-BOOLEAN RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp); +- +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-VOID RTMPInitPCIeLinkCtrlValue( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPFindHostPCIDev( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPPCIeLinkCtrlValueRestore( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level); +- +-VOID RTMPPCIeLinkCtrlSetting( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Max); +- +-VOID RTMPrt3xSetPCIePowerLinkCtrl( +- IN PRTMP_ADAPTER pAd); +- +-VOID PsPollWakeExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RadioOnExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx); +- +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- +- +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd); ++USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ ++USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT * FreeNumber); ++ ++USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR frameNum, OUT USHORT * FreeNumber); ++ ++USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR fragNum, OUT USHORT * FreeNumber); ++ ++USHORT RtmpPCI_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ ++VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN USHORT totalMPDUSize, ++ IN USHORT FirstTxIdx); ++ ++VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN USHORT LastTxIdx); ++ ++VOID RtmpPCIDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR QueIdx); ++ ++int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, IN UINT SrcBufLen); ++ ++NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD); ++ ++BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Level, IN USHORT TbttNumToNextWakeUp); ++ ++BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level); ++ ++VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd); ++ ++VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level); ++ ++VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max); ++ ++VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd); ++ ++VOID PsPollWakeExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID RadioOnExec(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++ ++VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++ ++VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp); ++ ++VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++ ++VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd); + #endif // RTMP_MAC_PCI // + + #ifdef RTMP_MAC_USB + // + // Function Prototype in rtusb_bulk.c + // +-VOID RTUSBInitTxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PTX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN usb_complete_t Func); ++VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, ++ IN PTX_CONTEXT pTxContext, ++ IN UCHAR BulkOutPipeId, IN usb_complete_t Func); + +-VOID RTUSBInitHTTxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PHT_TX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN ULONG BulkOutSize, +- IN usb_complete_t Func); ++VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, ++ IN PHT_TX_CONTEXT pTxContext, ++ IN UCHAR BulkOutPipeId, ++ IN ULONG BulkOutSize, IN usb_complete_t Func); + +-VOID RTUSBInitRxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PRX_CONTEXT pRxContext); ++VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); + +-VOID RTUSBCleanUpDataBulkOutQueue( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingBulkOutIRP( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutDataPacket( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UCHAR Index); ++VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BulkOutPipeId, IN UCHAR Index); + +-VOID RTUSBBulkOutNullFrame( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutRTSFrame( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBBulkOutRTSFrame(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingBulkInIRP( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingIRPs( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutMLMEPacket( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Index); ++VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index); + +-VOID RTUSBBulkOutPsPoll( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCleanUpMLMEBulkOutQueue( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBKickBulkOut( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkReceive( +- IN PRTMP_ADAPTER pAd); ++VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd); + +-VOID DoBulkIn( +- IN RTMP_ADAPTER *pAd); ++VOID DoBulkIn(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBInitRxDesc( +- IN PRTMP_ADAPTER pAd, +- IN PRX_CONTEXT pRxContext); ++VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); + +-VOID RTUSBBulkRxHandle( +- IN unsigned long data); ++VOID RTUSBBulkRxHandle(IN unsigned long data); + + // + // Function Prototype in rtusb_io.c + // +-NTSTATUS RTUSBMultiRead( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT length); +- +-NTSTATUS RTUSBMultiWrite( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length); +- +-NTSTATUS RTUSBMultiWrite_OneByte( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData); +- +-NTSTATUS RTUSBReadBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN PUCHAR pValue); +- +-NTSTATUS RTUSBWriteBBPRegister( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, +- IN UCHAR Value); +- +-NTSTATUS RTUSBWriteRFRegister( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 Value); +- +-NTSTATUS RTUSB_VendorRequest( +- IN PRTMP_ADAPTER pAd, +- IN UINT32 TransferFlags, +- IN UCHAR ReservedBits, +- IN UCHAR Request, +- IN USHORT Value, +- IN USHORT Index, +- IN PVOID TransferBuffer, +- IN UINT32 TransferBufferLength); +- +-NTSTATUS RTUSBReadEEPROM( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUCHAR pData, +- IN USHORT length); +- +-NTSTATUS RTUSBWriteEEPROM( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN PUCHAR pData, +- IN USHORT length); +- +-VOID RTUSBPutToSleep( +- IN PRTMP_ADAPTER pAd); +- +-NTSTATUS RTUSBWakeUp( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTUSBInitializeCmdQ( +- IN PCmdQ cmdq); +- +-NDIS_STATUS RTUSBEnqueueCmdFromNdis( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_OID Oid, +- IN BOOLEAN SetInformation, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength); +- +-NDIS_STATUS RTUSBEnqueueInternalCmd( +- IN PRTMP_ADAPTER pAd, +- IN NDIS_OID Oid, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength); +- +-VOID RTUSBDequeueCmd( +- IN PCmdQ cmdq, +- OUT PCmdQElmt *pcmdqelmt); +- +-INT RTUSBCmdThread( +- IN OUT PVOID Context); +- +-VOID RTUSBBssBeaconExit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RTUSBBssBeaconStop( +- IN RTMP_ADAPTER *pAd); +- +-VOID RTUSBBssBeaconStart( +- IN RTMP_ADAPTER * pAd); +- +-VOID RTUSBBssBeaconInit( +- IN RTMP_ADAPTER *pAd); +- +-VOID RTUSBWatchDog( +- IN RTMP_ADAPTER *pAd); +- +-NTSTATUS RTUSBWriteMACRegister( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN UINT32 Value); +- +-NTSTATUS RTUSBReadMACRegister( +- IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- OUT PUINT32 pValue); +- +-NTSTATUS RTUSBSingleWrite( +- IN RTMP_ADAPTER *pAd, +- IN USHORT Offset, +- IN USHORT Value); +- +-NTSTATUS RTUSBFirmwareWrite( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFwImage, +- IN ULONG FwLen); +- +-NTSTATUS RTUSBVenderReset( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RTUSBSetHardWareRegister( +- IN PRTMP_ADAPTER pAdapter, +- IN PVOID pBuf); +- +-NDIS_STATUS RTUSBQueryHardWareRegister( +- IN PRTMP_ADAPTER pAdapter, +- IN PVOID pBuf); +- +-VOID CMDHandler( +- IN PRTMP_ADAPTER pAd); +- +-NDIS_STATUS RTUSBWriteHWMACAddress( +- IN PRTMP_ADAPTER pAdapter); +- +-VOID MacTableInitialize( +- IN PRTMP_ADAPTER pAd); +- +-VOID MlmeSetPsm( +- IN PRTMP_ADAPTER pAd, +- IN USHORT psm); ++NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); ++ ++NTSTATUS RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData, IN USHORT length); ++ ++NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData); ++ ++NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Id, IN PUCHAR pValue); ++ ++NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Id, IN UCHAR Value); ++ ++NTSTATUS RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, IN UINT32 Value); ++ ++NTSTATUS RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++ IN UINT32 TransferFlags, ++ IN UCHAR ReservedBits, ++ IN UCHAR Request, ++ IN USHORT Value, ++ IN USHORT Index, ++ IN PVOID TransferBuffer, ++ IN UINT32 TransferBufferLength); ++ ++NTSTATUS RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); ++ ++NTSTATUS RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN PUCHAR pData, IN USHORT length); ++ ++VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd); ++ ++NTSTATUS RTUSBWakeUp(IN PRTMP_ADAPTER pAd); ++ ++VOID RTUSBInitializeCmdQ(IN PCmdQ cmdq); ++ ++NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++ IN NDIS_OID Oid, ++ IN BOOLEAN SetInformation, ++ IN PVOID pInformationBuffer, ++ IN UINT32 InformationBufferLength); ++ ++NDIS_STATUS RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++ IN NDIS_OID Oid, ++ IN PVOID pInformationBuffer, ++ IN UINT32 InformationBufferLength); ++ ++VOID RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt); ++ ++INT RTUSBCmdThread(IN OUT PVOID Context); ++ ++VOID RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd); ++ ++VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd); ++ ++VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd); ++ ++VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd); ++ ++VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd); ++ ++NTSTATUS RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, IN UINT32 Value); ++ ++NTSTATUS RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++ IN USHORT Offset, OUT PUINT32 pValue); ++ ++NTSTATUS RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++ IN USHORT Offset, IN USHORT Value); ++ ++NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pFwImage, IN ULONG FwLen); ++ ++NTSTATUS RTUSBVenderReset(IN PRTMP_ADAPTER pAd); ++ ++NDIS_STATUS RTUSBSetHardWareRegister(IN PRTMP_ADAPTER pAdapter, IN PVOID pBuf); + +-NDIS_STATUS RTMPWPAAddKeyProc( +- IN PRTMP_ADAPTER pAd, +- IN PVOID pBuf); ++NDIS_STATUS RTUSBQueryHardWareRegister(IN PRTMP_ADAPTER pAdapter, ++ IN PVOID pBuf); + +-VOID AsicRxAntEvalAction( +- IN PRTMP_ADAPTER pAd); +- +-void append_pkt( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, +- OUT PNDIS_PACKET *ppPacket); ++VOID CMDHandler(IN PRTMP_ADAPTER pAd); + +-UINT deaggregate_AMSDU_announce( +- IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, +- IN PUCHAR pData, +- IN ULONG DataSize); ++NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAdapter); + +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxINFO); ++VOID MacTableInitialize(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBMlmeHardTransmit( +- IN PRTMP_ADAPTER pAd, +- IN PMGMT_STRUC pMgmt); ++VOID MlmeSetPsm(IN PRTMP_ADAPTER pAd, IN USHORT psm); + +-INT MlmeThread( +- IN PVOID Context); ++NDIS_STATUS RTMPWPAAddKeyProc(IN PRTMP_ADAPTER pAd, IN PVOID pBuf); ++ ++VOID AsicRxAntEvalAction(IN PRTMP_ADAPTER pAd); ++ ++void append_pkt(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pHeader802_3, ++ IN UINT HdrLen, ++ IN PUCHAR pData, ++ IN ULONG DataSize, OUT PNDIS_PACKET * ppPacket); ++ ++UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++ PNDIS_PACKET pPacket, ++ IN PUCHAR pData, IN ULONG DataSize); ++ ++NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++ IN PHEADER_802_11 pHeader, ++ IN PRXWI_STRUC pRxWI, ++ IN PRT28XX_RXD_STRUC pRxINFO); ++ ++VOID RTUSBMlmeHardTransmit(IN PRTMP_ADAPTER pAd, IN PMGMT_STRUC pMgmt); ++ ++INT MlmeThread(IN PVOID Context); + + // + // Function Prototype in rtusb_data.c + // +-NDIS_STATUS RTUSBFreeDescriptorRequest( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UINT32 NumberRequired); +- +- +-BOOLEAN RTUSBNeedQueueBackForAgg( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR BulkOutPipeId); ++NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++ IN UCHAR BulkOutPipeId, ++ IN UINT32 NumberRequired); + ++BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId); + +-VOID RTMPWriteTxInfo( +- IN PRTMP_ADAPTER pAd, +- IN PTXINFO_STRUC pTxInfo, +- IN USHORT USBDMApktLen, +- IN BOOLEAN bWiv, +- IN UCHAR QueueSel, +- IN UCHAR NextValid, +- IN UCHAR TxBurst); ++VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, ++ IN PTXINFO_STRUC pTxInfo, ++ IN USHORT USBDMApktLen, ++ IN BOOLEAN bWiv, ++ IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst); + + // + // Function Prototype in cmm_data_usb.c + // +-USHORT RtmpUSB_WriteSubTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpUSB_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpUSB_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber); +- +-USHORT RtmpUSB_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber); +- +-VOID RtmpUSB_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT TxIdx); +- +-VOID RtmpUSBDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT TxIdx); +- +-VOID RtmpUSBDataKickOut( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR QueIdx); +- +- +-int RtmpUSBMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen); +- +-VOID RtmpUSBNullFrameKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN UCHAR *pNullFrame, +- IN UINT32 frameLen); +- +-VOID RtmpUsbStaAsicForceWakeupTimeout( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); +- +-VOID RT28xxUsbStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bFromTx); +- +-VOID RT28xxUsbStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); +- +-VOID RT28xxUsbMlmeRadioOn( +- IN PRTMP_ADAPTER pAd); +- +-VOID RT28xxUsbMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd); +-#endif // RTMP_MAC_USB // ++USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ ++USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN BOOLEAN bIsLast, ++ OUT USHORT * FreeNumber); ++ ++USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR fragNum, OUT USHORT * FreeNumber); ++ ++USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN UCHAR frameNum, OUT USHORT * FreeNumber); ++ ++VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, ++ IN USHORT totalMPDUSize, IN USHORT TxIdx); ++ ++VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ IN UCHAR QueIdx, IN USHORT TxIdx); ++ ++VOID RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, IN UCHAR QueIdx); + +-VOID AsicTurnOffRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); ++int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN PNDIS_PACKET pPacket, ++ IN PUCHAR pSrcBufVA, IN UINT SrcBufLen); + +-VOID AsicTurnOnRFClk( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel); ++VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++ IN UCHAR QueIdx, ++ IN UCHAR * pNullFrame, IN UINT32 frameLen); + ++VOID RtmpUsbStaAsicForceWakeupTimeout(IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); + ++VOID RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++ ++VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ IN USHORT TbttNumToNextWakeUp); ++ ++VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++ ++VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd); ++#endif // RTMP_MAC_USB // ++ ++VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); ++ ++VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); + + #ifdef RTMP_TIMER_TASK_SUPPORT +-INT RtmpTimerQThread( +- IN OUT PVOID Context); ++INT RtmpTimerQThread(IN OUT PVOID Context); + +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); ++RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, ++ IN RALINK_TIMER_STRUCT * pTimer); + +-BOOLEAN RtmpTimerQRemove( +- IN RTMP_ADAPTER *pAd, +- IN RALINK_TIMER_STRUCT *pTimer); ++BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, ++ IN RALINK_TIMER_STRUCT * pTimer); + +-void RtmpTimerQExit( +- IN RTMP_ADAPTER *pAd); ++void RtmpTimerQExit(IN RTMP_ADAPTER * pAd); + +-void RtmpTimerQInit( +- IN RTMP_ADAPTER *pAd); ++void RtmpTimerQInit(IN RTMP_ADAPTER * pAd); + #endif // RTMP_TIMER_TASK_SUPPORT // + +-VOID AsicStaBbpTuning( +- IN PRTMP_ADAPTER pAd); ++VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd); + +-BOOLEAN StaAddMacTableEntry( +- IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE *pHtCapability, +- IN UCHAR HtCapabilityLen, +- IN ADD_HT_INFO_IE *pAddHtInfo, +- IN UCHAR AddHtInfoLen, +- IN USHORT CapabilityInfo); ++BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pEntry, ++ IN UCHAR MaxSupportedRateIn500Kbps, ++ IN HT_CAPABILITY_IE * pHtCapability, ++ IN UCHAR HtCapabilityLen, ++ IN ADD_HT_INFO_IE * pAddHtInfo, ++ IN UCHAR AddHtInfoLen, IN USHORT CapabilityInfo); + ++BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, ++ IN PMLME_QUEUE_ELEM pElem, ++ IN PRALINK_TIMER_STRUCT pAuthTimer, ++ IN PSTRING pSMName, ++ IN USHORT SeqNo, ++ IN PUCHAR pNewElement, IN ULONG ElementLen); + +-BOOLEAN AUTH_ReqSend( +- IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, +- IN ULONG ElementLen); ++void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd); + +-void RTMP_IndicateMediaState( +- IN PRTMP_ADAPTER pAd); ++VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd); + +-VOID ReSyncBeaconTime( +- IN PRTMP_ADAPTER pAd); +- +-VOID RTMPSetAGCInitValue( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR BandWidth); ++VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth); + + int rt28xx_close(IN PNET_DEV dev); + int rt28xx_open(IN PNET_DEV dev); + +- + #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) + #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) + #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) + +- + #ifdef LINUX + __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) + { +- if (VIRTUAL_IF_NUM(pAd) == 0) +- { +- if (rt28xx_open(pAd->net_dev) != 0) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n")); ++ if (VIRTUAL_IF_NUM(pAd) == 0) { ++ if (rt28xx_open(pAd->net_dev) != 0) { ++ DBGPRINT(RT_DEBUG_TRACE, ++ ("rt28xx_open return fail!\n")); + return -1; +- } +- } +- else +- { ++ } ++ } else { + } + VIRTUAL_IF_INC(pAd); + return 0; +@@ -5473,101 +4293,64 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + } + #endif // LINUX // + +- + /* + OS Related funciton prototype definitions. + TODO: Maybe we need to move these function prototypes to other proper place. + */ +-int RtmpOSWrielessEventSend( +- IN RTMP_ADAPTER *pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, +- IN UINT32 dataLen); ++int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, ++ IN UINT32 eventType, ++ IN INT flags, ++ IN PUCHAR pSrcMac, ++ IN PUCHAR pData, IN UINT32 dataLen); + +-int RtmpOSNetDevAddrSet( +- IN PNET_DEV pNetDev, +- IN PUCHAR pMacAddr); ++int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr); + +-int RtmpOSNetDevAttach( +- IN PNET_DEV pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook); ++int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, ++ IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook); + +-void RtmpOSNetDevClose( +- IN PNET_DEV pNetDev); ++void RtmpOSNetDevClose(IN PNET_DEV pNetDev); + +-void RtmpOSNetDevDetach( +- IN PNET_DEV pNetDev); ++void RtmpOSNetDevDetach(IN PNET_DEV pNetDev); + +-INT RtmpOSNetDevAlloc( +- IN PNET_DEV *pNewNetDev, +- IN UINT32 privDataSize); ++INT RtmpOSNetDevAlloc(IN PNET_DEV * pNewNetDev, IN UINT32 privDataSize); + +-void RtmpOSNetDevFree( +- IN PNET_DEV pNetDev); ++void RtmpOSNetDevFree(IN PNET_DEV pNetDev); + +-PNET_DEV RtmpOSNetDevGetByName( +- IN PNET_DEV pNetDev, +- IN PSTRING pDevName); ++PNET_DEV RtmpOSNetDevGetByName(IN PNET_DEV pNetDev, IN PSTRING pDevName); + +-void RtmpOSNetDeviceRefPut( +- IN PNET_DEV pNetDev); ++void RtmpOSNetDeviceRefPut(IN PNET_DEV pNetDev); + +-PNET_DEV RtmpOSNetDevCreate( +- IN RTMP_ADAPTER *pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, +- IN PSTRING pNamePrefix); ++PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++ IN INT devType, ++ IN INT devNum, ++ IN INT privMemSize, IN PSTRING pNamePrefix); + + /* + Task operation related function prototypes + */ +-void RtmpOSTaskCustomize( +- IN RTMP_OS_TASK *pTask); +- +-INT RtmpOSTaskNotifyToExit( +- IN RTMP_OS_TASK *pTask); ++void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask); + +-NDIS_STATUS RtmpOSTaskKill( +- IN RTMP_OS_TASK *pTask); ++INT RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask); + +-NDIS_STATUS RtmpOSTaskInit( +- IN RTMP_OS_TASK *pTask, +- PSTRING pTaskName, +- VOID *pPriv); ++NDIS_STATUS RtmpOSTaskKill(IN RTMP_OS_TASK * pTask); + +-NDIS_STATUS RtmpOSTaskAttach( +- IN RTMP_OS_TASK *pTask, +- IN int (*fn)(void *), +- IN void *arg); ++NDIS_STATUS RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++ PSTRING pTaskName, VOID * pPriv); + ++NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++ IN int (*fn) (void *), IN void *arg); + + /* + File operation related function prototypes + */ +-RTMP_OS_FD RtmpOSFileOpen( +- IN char *pPath, +- IN int flag, +- IN int mode); +- +-int RtmpOSFileClose( +- IN RTMP_OS_FD osfd); ++RTMP_OS_FD RtmpOSFileOpen(IN char *pPath, IN int flag, IN int mode); + +-void RtmpOSFileSeek( +- IN RTMP_OS_FD osfd, +- IN int offset); ++int RtmpOSFileClose(IN RTMP_OS_FD osfd); + +-int RtmpOSFileRead( +- IN RTMP_OS_FD osfd, +- IN char *pDataPtr, +- IN int readLen); ++void RtmpOSFileSeek(IN RTMP_OS_FD osfd, IN int offset); + +-int RtmpOSFileWrite( +- IN RTMP_OS_FD osfd, +- IN char *pDataPtr, +- IN int writeLen); ++int RtmpOSFileRead(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int readLen); + +-#endif // __RTMP_H__ ++int RtmpOSFileWrite(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int writeLen); + ++#endif // __RTMP_H__ +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index 1098a85..7fa73e6 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -73,7 +73,7 @@ + #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27)) + + #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000||IS_RT3090A(_pAd)) +-//#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) ++//#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) + + /* RT3572, 3592, 3562, 3062 share the same MAC version */ + #define IS_RT3572(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x35720000) +@@ -103,15 +103,12 @@ + + #define RETRY_LIMIT 10 + +- +- + // ------------------------------------------------------ +-// BBP & RF definition ++// BBP & RF definition + // ------------------------------------------------------ + #define BUSY 1 + #define IDLE 0 + +- + //------------------------------------------------------------------------- + // EEPROM definition + //------------------------------------------------------------------------- +@@ -126,11 +123,11 @@ + #define EEPROM_EWDS_OPCODE 0x10 + #define EEPROM_EWEN_OPCODE 0x13 + +-#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs ++#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs + #define NUM_EEPROM_TX_G_PARMS 7 +-#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID + #define EEPROM_G_TX_PWR_OFFSET 0x52 + #define EEPROM_G_TX2_PWR_OFFSET 0x60 + #define EEPROM_LED1_OFFSET 0x3c +@@ -150,24 +147,22 @@ + #define EEPROM_A_TX2_PWR_OFFSET 0xa6 + //#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j + //#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe +-//#define EEPROM_TSSI_REF_OFFSET 0x54 +-//#define EEPROM_TSSI_DELTA_OFFSET 0x24 ++//#define EEPROM_TSSI_REF_OFFSET 0x54 ++//#define EEPROM_TSSI_DELTA_OFFSET 0x24 + //#define EEPROM_CCK_TX_PWR_OFFSET 0x62 +-//#define EEPROM_CALIBRATE_OFFSET 0x7c ++//#define EEPROM_CALIBRATE_OFFSET 0x7c + #define EEPROM_VERSION_OFFSET 0x02 + #define EEPROM_FREQ_OFFSET 0x3a + #define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power. + #define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. + #define VALID_EEPROM_VERSION 1 + +- + /* + * EEPROM operation related marcos + */ + #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ + (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) + +- + // ------------------------------------------------------------------- + // E2PROM data layout + // ------------------------------------------------------------------- +@@ -175,90 +170,89 @@ + // + // MCU_LEDCS: MCU LED Control Setting. + // +-typedef union _MCU_LEDCS_STRUC { +- struct { +- UCHAR LedMode:7; +- UCHAR Polarity:1; ++typedef union _MCU_LEDCS_STRUC { ++ struct { ++ UCHAR LedMode:7; ++ UCHAR Polarity:1; + } field; +- UCHAR word; ++ UCHAR word; + } MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; + +- + // + // EEPROM antenna select format + // +-typedef union _EEPROM_ANTENNA_STRUC { +- struct { +- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R +- USHORT TxPath:4; // 1: 1T, 2: 2T +- USHORT RfIcType:4; // see E2PROM document +- USHORT Rsv:4; +- } field; +- USHORT word; +-} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; ++typedef union _EEPROM_ANTENNA_STRUC { ++ struct { ++ USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R ++ USHORT TxPath:4; // 1: 1T, 2: 2T ++ USHORT RfIcType:4; // see E2PROM document ++ USHORT Rsv:4; ++ } field; ++ USHORT word; ++} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; + +-typedef union _EEPROM_NIC_CINFIG2_STRUC { ++typedef union _EEPROM_NIC_CINFIG2_STRUC { + struct { +- USHORT HardwareRadioControl:1; // 1:enable, 0:disable +- USHORT DynamicTxAgcControl:1; // +- USHORT ExternalLNAForG:1; // +- USHORT ExternalLNAForA:1; // external LNA enable for 2.4G +- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable +- USHORT BW40MSidebandForG:1; +- USHORT BW40MSidebandForA:1; +- USHORT EnableWPSPBC:1; // WPS PBC Control bit +- USHORT BW40MAvailForG:1; // 0:enable, 1:disable +- USHORT BW40MAvailForA:1; // 0:enable, 1:disable +- USHORT Rsv1:1; // must be 0 +- USHORT AntDiversity:1; // Antenna diversity +- USHORT Rsv2:3; // must be 0 +- USHORT DACTestBit:1; // control if driver should patch the DAC issue +- } field; +- USHORT word; +-} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; ++ USHORT HardwareRadioControl:1; // 1:enable, 0:disable ++ USHORT DynamicTxAgcControl:1; // ++ USHORT ExternalLNAForG:1; // ++ USHORT ExternalLNAForA:1; // external LNA enable for 2.4G ++ USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable ++ USHORT BW40MSidebandForG:1; ++ USHORT BW40MSidebandForA:1; ++ USHORT EnableWPSPBC:1; // WPS PBC Control bit ++ USHORT BW40MAvailForG:1; // 0:enable, 1:disable ++ USHORT BW40MAvailForA:1; // 0:enable, 1:disable ++ USHORT Rsv1:1; // must be 0 ++ USHORT AntDiversity:1; // Antenna diversity ++ USHORT Rsv2:3; // must be 0 ++ USHORT DACTestBit:1; // control if driver should patch the DAC issue ++ } field; ++ USHORT word; ++} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; + + // + // TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) + // +-typedef union _EEPROM_TX_PWR_STRUC { +- struct { +- CHAR Byte0; // Low Byte +- CHAR Byte1; // High Byte +- } field; +- USHORT word; +-} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; ++typedef union _EEPROM_TX_PWR_STRUC { ++ struct { ++ CHAR Byte0; // Low Byte ++ CHAR Byte1; // High Byte ++ } field; ++ USHORT word; ++} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; + +-typedef union _EEPROM_VERSION_STRUC { +- struct { +- UCHAR FaeReleaseNumber; // Low Byte +- UCHAR Version; // High Byte +- } field; +- USHORT word; +-} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; ++typedef union _EEPROM_VERSION_STRUC { ++ struct { ++ UCHAR FaeReleaseNumber; // Low Byte ++ UCHAR Version; // High Byte ++ } field; ++ USHORT word; ++} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; + +-typedef union _EEPROM_LED_STRUC { +- struct { +- USHORT PolarityRDY_G:1; // Polarity RDY_G setting. +- USHORT PolarityRDY_A:1; // Polarity RDY_A setting. +- USHORT PolarityACT:1; // Polarity ACT setting. +- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. +- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. +- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. +- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. +- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. +- USHORT LedMode:5; // Led mode. +- USHORT Rsvd:3; // Reserved +- } field; +- USHORT word; +-} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; ++typedef union _EEPROM_LED_STRUC { ++ struct { ++ USHORT PolarityRDY_G:1; // Polarity RDY_G setting. ++ USHORT PolarityRDY_A:1; // Polarity RDY_A setting. ++ USHORT PolarityACT:1; // Polarity ACT setting. ++ USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. ++ USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. ++ USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. ++ USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. ++ USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. ++ USHORT LedMode:5; // Led mode. ++ USHORT Rsvd:3; // Reserved ++ } field; ++ USHORT word; ++} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; + +-typedef union _EEPROM_TXPOWER_DELTA_STRUC { +- struct { +- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) +- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value +- UCHAR TxPowerEnable:1;// Enable +- } field; +- UCHAR value; +-} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; ++typedef union _EEPROM_TXPOWER_DELTA_STRUC { ++ struct { ++ UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) ++ UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value ++ UCHAR TxPowerEnable:1; // Enable ++ } field; ++ UCHAR value; ++} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; + +-#endif // __RTMP_CHIP_H__ // ++#endif // __RTMP_CHIP_H__ // +diff --git a/drivers/staging/rt2860/rtmp_ckipmic.h b/drivers/staging/rt2860/rtmp_ckipmic.h +index 39955b9..ad35dca 100644 +--- a/drivers/staging/rt2860/rtmp_ckipmic.h ++++ b/drivers/staging/rt2860/rtmp_ckipmic.h +@@ -37,42 +37,27 @@ + #ifndef __RTMP_CKIPMIC_H__ + #define __RTMP_CKIPMIC_H__ + +-typedef struct _MIC_CONTEXT { ++typedef struct _MIC_CONTEXT { + /* --- MMH context */ +- UCHAR CK[16]; /* the key */ +- UCHAR coefficient[16]; /* current aes counter mode coefficients */ +- ULONGLONG accum; /* accumulated mic, reduced to u32 in final() */ +- UINT position; /* current position (byte offset) in message */ +- UCHAR part[4]; /* for conversion of message to u32 for mmh */ +-} MIC_CONTEXT, *PMIC_CONTEXT; ++ UCHAR CK[16]; /* the key */ ++ UCHAR coefficient[16]; /* current aes counter mode coefficients */ ++ ULONGLONG accum; /* accumulated mic, reduced to u32 in final() */ ++ UINT position; /* current position (byte offset) in message */ ++ UCHAR part[4]; /* for conversion of message to u32 for mmh */ ++} MIC_CONTEXT, *PMIC_CONTEXT; + +-VOID xor_128( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out); ++VOID xor_128(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out); + +-UCHAR RTMPCkipSbox( +- IN UCHAR a); ++UCHAR RTMPCkipSbox(IN UCHAR a); + +-VOID xor_32( +- IN PUCHAR a, +- IN PUCHAR b, +- OUT PUCHAR out); ++VOID xor_32(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out); + +-VOID next_key( +- IN PUCHAR key, +- IN INT round); ++VOID next_key(IN PUCHAR key, IN INT round); + +-VOID byte_sub( +- IN PUCHAR in, +- OUT PUCHAR out); ++VOID byte_sub(IN PUCHAR in, OUT PUCHAR out); + +-VOID shift_row( +- IN PUCHAR in, +- OUT PUCHAR out); ++VOID shift_row(IN PUCHAR in, OUT PUCHAR out); + +-VOID mix_column( +- IN PUCHAR in, +- OUT PUCHAR out); ++VOID mix_column(IN PUCHAR in, OUT PUCHAR out); + + #endif //__RTMP_CKIPMIC_H__ +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index 816ae62..31b52d6 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -55,9 +55,9 @@ + #define NIC_DBG_STRING ("**RT28xx**") + + #ifdef RTMP_MAC_USB +-#define TX_RING_SIZE 8 // 1 ++#define TX_RING_SIZE 8 // 1 + #define PRIO_RING_SIZE 8 +-#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE ++#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE + #define RX_RING_SIZE 8 + #define MAX_TX_PROCESS 4 + #define LOCAL_TXBUF_SIZE 2048 +@@ -76,29 +76,29 @@ + // + + #ifdef RTMP_MAC_PCI +-#define TX_RING_SIZE 64 //64 ++#define TX_RING_SIZE 64 //64 + #define MGMT_RING_SIZE 128 +-#define RX_RING_SIZE 128 //64 +-#define MAX_TX_PROCESS TX_RING_SIZE //8 ++#define RX_RING_SIZE 128 //64 ++#define MAX_TX_PROCESS TX_RING_SIZE //8 + #define MAX_DMA_DONE_PROCESS TX_RING_SIZE +-#define MAX_TX_DONE_PROCESS TX_RING_SIZE //8 ++#define MAX_TX_DONE_PROCESS TX_RING_SIZE //8 + #define LOCAL_TXBUF_SIZE 2 + #endif // RTMP_MAC_PCI // + +-#define MAX_RX_PROCESS 128 //64 //32 ++#define MAX_RX_PROCESS 128 //64 //32 + #define NUM_OF_LOCAL_TXBUF 2 + #define TXD_SIZE 16 + #define TXWI_SIZE 16 + #define RXD_SIZE 16 + #define RXWI_SIZE 16 + // TXINFO_SIZE + TXWI_SIZE + 802.11 Header Size + AMSDU sub frame header +-#define TX_DMA_1ST_BUFFER_SIZE 96 // only the 1st physical buffer is pre-allocated +-#define MGMT_DMA_BUFFER_SIZE 1536 //2048 +-#define RX_BUFFER_AGGRESIZE 3840 //3904 //3968 //4096 //2048 //4096 +-#define RX_BUFFER_NORMSIZE 3840 //3904 //3968 //4096 //2048 //4096 ++#define TX_DMA_1ST_BUFFER_SIZE 96 // only the 1st physical buffer is pre-allocated ++#define MGMT_DMA_BUFFER_SIZE 1536 //2048 ++#define RX_BUFFER_AGGRESIZE 3840 //3904 //3968 //4096 //2048 //4096 ++#define RX_BUFFER_NORMSIZE 3840 //3904 //3968 //4096 //2048 //4096 + #define TX_BUFFER_NORMSIZE RX_BUFFER_NORMSIZE +-#define MAX_FRAME_SIZE 2346 // Maximum 802.11 frame size +-#define MAX_AGGREGATION_SIZE 3840 //3904 //3968 //4096 ++#define MAX_FRAME_SIZE 2346 // Maximum 802.11 frame size ++#define MAX_AGGREGATION_SIZE 3840 //3904 //3968 //4096 + #define MAX_NUM_OF_TUPLE_CACHE 2 + #define MAX_MCAST_LIST_SIZE 32 + #define MAX_LEN_OF_VENDOR_DESC 64 +@@ -107,7 +107,6 @@ + + #define MAX_RX_PROCESS_CNT (RX_RING_SIZE) + +- + /* + WMM Note: If memory of your system is not much, please reduce the definition; + or when you do WMM test, the queue for low priority AC will be full, i.e. +@@ -127,12 +126,11 @@ + clConfig.clNum = RX_RING_SIZE * 4; + */ + // TODO: For VxWorks the size is 256. Shall we cahnge the value as 256 for all OS????? +-#define MAX_PACKETS_IN_QUEUE (512) //(512) // to pass WMM A5-WPAPSK ++#define MAX_PACKETS_IN_QUEUE (512) //(512) // to pass WMM A5-WPAPSK + + #define MAX_PACKETS_IN_MCAST_PS_QUEUE 32 + #define MAX_PACKETS_IN_PS_QUEUE 128 //32 +-#define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */ +- ++#define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */ + + #ifdef RTMP_EFUSE_SUPPORT + //2008/09/11:KH add to support efuse<-- +@@ -189,8 +187,8 @@ + #define fOP_STATUS_MEDIA_STATE_CONNECTED 0x00000080 + #define fOP_STATUS_WMM_INUSED 0x00000100 + #define fOP_STATUS_AGGREGATION_INUSED 0x00000200 +-#define fOP_STATUS_DOZE 0x00000400 // debug purpose +-#define fOP_STATUS_PIGGYBACK_INUSED 0x00000800 // piggy-back, and aggregation ++#define fOP_STATUS_DOZE 0x00000400 // debug purpose ++#define fOP_STATUS_PIGGYBACK_INUSED 0x00000800 // piggy-back, and aggregation + #define fOP_STATUS_APSD_INUSED 0x00001000 + #define fOP_STATUS_TX_AMSDU_INUSED 0x00002000 + #define fOP_STATUS_MAX_RETRY_ENABLED 0x00004000 +@@ -229,9 +227,9 @@ + // + // AP's client table operation status flags + // +-#define fCLIENT_STATUS_WMM_CAPABLE 0x00000001 // CLIENT can parse QOS DATA frame +-#define fCLIENT_STATUS_AGGREGATION_CAPABLE 0x00000002 // CLIENT can receive Ralink's proprietary TX aggregation frame +-#define fCLIENT_STATUS_PIGGYBACK_CAPABLE 0x00000004 // CLIENT support piggy-back ++#define fCLIENT_STATUS_WMM_CAPABLE 0x00000001 // CLIENT can parse QOS DATA frame ++#define fCLIENT_STATUS_AGGREGATION_CAPABLE 0x00000002 // CLIENT can receive Ralink's proprietary TX aggregation frame ++#define fCLIENT_STATUS_PIGGYBACK_CAPABLE 0x00000004 // CLIENT support piggy-back + #define fCLIENT_STATUS_AMSDU_INUSED 0x00000008 + #define fCLIENT_STATUS_SGI20_CAPABLE 0x00000010 + #define fCLIENT_STATUS_SGI40_CAPABLE 0x00000020 +@@ -240,7 +238,7 @@ + #define fCLIENT_STATUS_HTC_CAPABLE 0x00000100 + #define fCLIENT_STATUS_RDG_CAPABLE 0x00000200 + #define fCLIENT_STATUS_MCSFEEDBACK_CAPABLE 0x00000400 +-#define fCLIENT_STATUS_APSD_CAPABLE 0x00000800 /* UAPSD STATION */ ++#define fCLIENT_STATUS_APSD_CAPABLE 0x00000800 /* UAPSD STATION */ + + #define fCLIENT_STATUS_RALINK_CHIPSET 0x00100000 + // +@@ -303,10 +301,9 @@ + #define ERRLOG_NO_INTERRUPT_RESOURCE 0x00000604L + #define ERRLOG_NO_MEMORY_RESOURCE 0x00000605L + +- + // WDS definition + #define MAX_WDS_ENTRY 4 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table ++#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table + + #define WDS_DISABLE_MODE 0 + #define WDS_RESTRICT_MODE 1 +@@ -314,7 +311,6 @@ + #define WDS_REPEATER_MODE 3 + #define WDS_LAZY_MODE 4 + +- + #define MAX_MESH_NUM 0 + + #define MAX_APCLI_NUM 0 +@@ -336,12 +332,11 @@ + #define MAIN_MBSSID 0 + #define FIRST_MBSSID 1 + +- + #define MAX_BEACON_SIZE 512 + // If the MAX_MBSSID_NUM is larger than 6, + // it shall reserve some WCID space(wcid 222~253) for beacon frames. +-// - these wcid 238~253 are reserved for beacon#6(ra6). +-// - these wcid 222~237 are reserved for beacon#7(ra7). ++// - these wcid 238~253 are reserved for beacon#6(ra6). ++// - these wcid 222~237 are reserved for beacon#7(ra7). + #if defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 8) + #define HW_RESERVED_WCID 222 + #elif defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 7) +@@ -368,7 +363,6 @@ + + #define IsGroupKeyWCID(__wcid) (((__wcid) < LAST_SPECIFIC_WCID) && ((__wcid) >= (LAST_SPECIFIC_WCID - (MAX_MBSSID_NUM)))) + +- + // definition to support multiple BSSID + #define BSS0 0 + #define BSS1 1 +@@ -379,20 +373,19 @@ + #define BSS6 6 + #define BSS7 7 + +- + //============================================================ + // Length definitions + #define PEER_KEY_NO 2 + #define MAC_ADDR_LEN 6 + #define TIMESTAMP_LEN 8 +-#define MAX_LEN_OF_SUPPORTED_RATES MAX_LENGTH_OF_SUPPORT_RATES // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +-#define MAX_LEN_OF_KEY 32 // 32 octets == 256 bits, Redefine for WPA +-#define MAX_NUM_OF_CHANNELS MAX_NUM_OF_CHS // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination +-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination ++#define MAX_LEN_OF_SUPPORTED_RATES MAX_LENGTH_OF_SUPPORT_RATES // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ++#define MAX_LEN_OF_KEY 32 // 32 octets == 256 bits, Redefine for WPA ++#define MAX_NUM_OF_CHANNELS MAX_NUM_OF_CHS // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination ++#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination + #define MAX_LEN_OF_SSID 32 + #define CIPHER_TEXT_LEN 128 + #define HASH_TABLE_SIZE 256 +-#define MAX_VIE_LEN 1024 // New for WPA cipher suite variable IE sizes. ++#define MAX_VIE_LEN 1024 // New for WPA cipher suite variable IE sizes. + #define MAX_SUPPORT_MCS 32 + #define MAX_NUM_OF_BBP_LATCH 140 + +@@ -413,7 +406,7 @@ + + #define MAX_NUM_OF_ACL_LIST MAX_NUMBER_OF_ACL + +-#define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 ++#define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 + + #if MAX_LEN_OF_MAC_TABLE>MAX_AVAILABLE_CLIENT_WCID + #error MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID!!!! +@@ -426,37 +419,36 @@ + + #define NUM_OF_TID 8 + #define MAX_AID_BA 4 +-#define MAX_LEN_OF_BA_REC_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2)// (NUM_OF_TID*MAX_AID_BA + 32) //Block ACK recipient +-#define MAX_LEN_OF_BA_ORI_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2)// (NUM_OF_TID*MAX_AID_BA + 32) // Block ACK originator ++#define MAX_LEN_OF_BA_REC_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) // (NUM_OF_TID*MAX_AID_BA + 32) //Block ACK recipient ++#define MAX_LEN_OF_BA_ORI_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) // (NUM_OF_TID*MAX_AID_BA + 32) // Block ACK originator + #define MAX_LEN_OF_BSS_TABLE 64 + #define MAX_REORDERING_MPDU_NUM 512 + + // key related definitions + #define SHARE_KEY_NUM 4 +-#define MAX_LEN_OF_SHARE_KEY 16 // byte count +-#define MAX_LEN_OF_PEER_KEY 16 // byte count +-#define PAIRWISE_KEY_NUM 64 // in MAC ASIC pairwise key table ++#define MAX_LEN_OF_SHARE_KEY 16 // byte count ++#define MAX_LEN_OF_PEER_KEY 16 // byte count ++#define PAIRWISE_KEY_NUM 64 // in MAC ASIC pairwise key table + #define GROUP_KEY_NUM 4 + #define PMK_LEN 32 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table +-#define PMKID_NO 4 // Number of PMKID saved supported ++#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table ++#define PMKID_NO 4 // Number of PMKID saved supported + #define MAX_LEN_OF_MLME_BUFFER 2048 + + // power status related definitions + #define PWR_ACTIVE 0 + #define PWR_SAVE 1 +-#define PWR_MMPS 2 //MIMO power save ++#define PWR_MMPS 2 //MIMO power save + + // Auth and Assoc mode related definitions + #define AUTH_MODE_OPEN 0x00 + #define AUTH_MODE_KEY 0x01 + + // BSS Type definitions +-#define BSS_ADHOC 0 // = Ndis802_11IBSS +-#define BSS_INFRA 1 // = Ndis802_11Infrastructure +-#define BSS_ANY 2 // = Ndis802_11AutoUnknown +-#define BSS_MONITOR 3 // = Ndis802_11Monitor +- ++#define BSS_ADHOC 0 // = Ndis802_11IBSS ++#define BSS_INFRA 1 // = Ndis802_11Infrastructure ++#define BSS_ANY 2 // = Ndis802_11AutoUnknown ++#define BSS_MONITOR 3 // = Ndis802_11Monitor + + // Reason code definitions + #define REASON_RESERVED 0 +@@ -533,65 +525,63 @@ + #define IE_CF_PARM 4 + #define IE_TIM 5 + #define IE_IBSS_PARM 6 +-#define IE_COUNTRY 7 // 802.11d +-#define IE_802_11D_REQUEST 10 // 802.11d +-#define IE_QBSS_LOAD 11 // 802.11e d9 +-#define IE_EDCA_PARAMETER 12 // 802.11e d9 +-#define IE_TSPEC 13 // 802.11e d9 +-#define IE_TCLAS 14 // 802.11e d9 +-#define IE_SCHEDULE 15 // 802.11e d9 ++#define IE_COUNTRY 7 // 802.11d ++#define IE_802_11D_REQUEST 10 // 802.11d ++#define IE_QBSS_LOAD 11 // 802.11e d9 ++#define IE_EDCA_PARAMETER 12 // 802.11e d9 ++#define IE_TSPEC 13 // 802.11e d9 ++#define IE_TCLAS 14 // 802.11e d9 ++#define IE_SCHEDULE 15 // 802.11e d9 + #define IE_CHALLENGE_TEXT 16 +-#define IE_POWER_CONSTRAINT 32 // 802.11h d3.3 +-#define IE_POWER_CAPABILITY 33 // 802.11h d3.3 +-#define IE_TPC_REQUEST 34 // 802.11h d3.3 +-#define IE_TPC_REPORT 35 // 802.11h d3.3 +-#define IE_SUPP_CHANNELS 36 // 802.11h d3.3 +-#define IE_CHANNEL_SWITCH_ANNOUNCEMENT 37 // 802.11h d3.3 +-#define IE_MEASUREMENT_REQUEST 38 // 802.11h d3.3 +-#define IE_MEASUREMENT_REPORT 39 // 802.11h d3.3 +-#define IE_QUIET 40 // 802.11h d3.3 +-#define IE_IBSS_DFS 41 // 802.11h d3.3 +-#define IE_ERP 42 // 802.11g +-#define IE_TS_DELAY 43 // 802.11e d9 +-#define IE_TCLAS_PROCESSING 44 // 802.11e d9 +-#define IE_QOS_CAPABILITY 46 // 802.11e d6 +-#define IE_HT_CAP 45 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_AP_CHANNEL_REPORT 51 // 802.11k d6 +-#define IE_HT_CAP2 52 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_RSN 48 // 802.11i d3.0 +-#define IE_WPA2 48 // WPA2 +-#define IE_EXT_SUPP_RATES 50 // 802.11g +-#define IE_SUPP_REG_CLASS 59 // 802.11y. Supported regulatory classes. ++#define IE_POWER_CONSTRAINT 32 // 802.11h d3.3 ++#define IE_POWER_CAPABILITY 33 // 802.11h d3.3 ++#define IE_TPC_REQUEST 34 // 802.11h d3.3 ++#define IE_TPC_REPORT 35 // 802.11h d3.3 ++#define IE_SUPP_CHANNELS 36 // 802.11h d3.3 ++#define IE_CHANNEL_SWITCH_ANNOUNCEMENT 37 // 802.11h d3.3 ++#define IE_MEASUREMENT_REQUEST 38 // 802.11h d3.3 ++#define IE_MEASUREMENT_REPORT 39 // 802.11h d3.3 ++#define IE_QUIET 40 // 802.11h d3.3 ++#define IE_IBSS_DFS 41 // 802.11h d3.3 ++#define IE_ERP 42 // 802.11g ++#define IE_TS_DELAY 43 // 802.11e d9 ++#define IE_TCLAS_PROCESSING 44 // 802.11e d9 ++#define IE_QOS_CAPABILITY 46 // 802.11e d6 ++#define IE_HT_CAP 45 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD ++#define IE_AP_CHANNEL_REPORT 51 // 802.11k d6 ++#define IE_HT_CAP2 52 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD ++#define IE_RSN 48 // 802.11i d3.0 ++#define IE_WPA2 48 // WPA2 ++#define IE_EXT_SUPP_RATES 50 // 802.11g ++#define IE_SUPP_REG_CLASS 59 // 802.11y. Supported regulatory classes. + #define IE_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 60 // 802.11n +-#define IE_ADD_HT 61 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +-#define IE_ADD_HT2 53 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +- ++#define IE_ADD_HT 61 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD ++#define IE_ADD_HT2 53 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD + + // For 802.11n D3.03 + //#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet +-#define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element +-#define IE_WAPI 68 // WAPI information element +-#define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3 +-#define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03 +-#define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03 +-#define IE_EXT_CAPABILITY 127 // 802.11n D3.03 +- ++#define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element ++#define IE_WAPI 68 // WAPI information element ++#define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3 ++#define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03 ++#define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03 ++#define IE_EXT_CAPABILITY 127 // 802.11n D3.03 + +-#define IE_WPA 221 // WPA +-#define IE_VENDOR_SPECIFIC 221 // Wifi WMM (WME) ++#define IE_WPA 221 // WPA ++#define IE_VENDOR_SPECIFIC 221 // Wifi WMM (WME) + +-#define OUI_BROADCOM_HT 51 // +-#define OUI_BROADCOM_HTADD 52 // +-#define OUI_PREN_HT_CAP 51 // +-#define OUI_PREN_ADD_HT 52 // ++#define OUI_BROADCOM_HT 51 // ++#define OUI_BROADCOM_HTADD 52 // ++#define OUI_PREN_HT_CAP 51 // ++#define OUI_PREN_ADD_HT 52 // + + // CCX information +-#define IE_AIRONET_CKIP 133 // CCX1.0 ID 85H for CKIP +-#define IE_AP_TX_POWER 150 // CCX 2.0 for AP transmit power +-#define IE_MEASUREMENT_CAPABILITY 221 // CCX 2.0 ++#define IE_AIRONET_CKIP 133 // CCX1.0 ID 85H for CKIP ++#define IE_AP_TX_POWER 150 // CCX 2.0 for AP transmit power ++#define IE_MEASUREMENT_CAPABILITY 221 // CCX 2.0 + #define IE_CCX_V2 221 +-#define IE_AIRONET_IPADDRESS 149 // CCX ID 95H for IP Address +-#define IE_AIRONET_CCKMREASSOC 156 // CCX ID 9CH for CCKM Reassociation Request element ++#define IE_AIRONET_IPADDRESS 149 // CCX ID 95H for IP Address ++#define IE_AIRONET_CCKMREASSOC 156 // CCX ID 9CH for CCKM Reassociation Request element + #define CKIP_NEGOTIATION_LENGTH 30 + #define AIRONET_IPADDRESS_LENGTH 10 + #define AIRONET_CCKMREASSOC_LENGTH 24 +@@ -619,11 +609,8 @@ + #define WSC_STATE_MACHINE 17 + #define WSC_UPNP_STATE_MACHINE 18 + +- + #define WPA_STATE_MACHINE 23 + +- +- + // + // STA's CONTROL/CONNECT state machine: states, events, total function # + // +@@ -700,10 +687,9 @@ + #define MT2_PEER_PUBLIC_CATE 4 + #define MT2_PEER_RM_CATE 5 + /* "FT_CATEGORY_BSS_TRANSITION equal to 6" is defined file of "dot11r_ft.h" */ +-#define MT2_PEER_HT_CATE 7 // 7.4.7 ++#define MT2_PEER_HT_CATE 7 // 7.4.7 + #define MAX_PEER_CATE_MSG 7 + +- + #define MT2_MLME_ADD_BA_CATE 8 + #define MT2_MLME_ORI_DELBA_CATE 9 + #define MT2_MLME_REC_DELBA_CATE 10 +@@ -721,7 +707,6 @@ + #define CATEGORY_RM 5 + #define CATEGORY_HT 7 + +- + // DLS Action frame definition + #define ACTION_DLS_REQUEST 0 + #define ACTION_DLS_RESPONSE 1 +@@ -734,7 +719,6 @@ + #define SPEC_TPCRP 3 + #define SPEC_CHANNEL_SWITCH 4 + +- + //BA Action field value + #define ADDBA_REQ 0 + #define ADDBA_RESP 1 +@@ -748,10 +732,9 @@ + #define ACTION_EXT_CH_SWITCH_ANNOUNCE 4 // 11y D9.0 + #define ACTION_DSE_MEASUREMENT_REQ 5 // 11y D9.0 + #define ACTION_DSE_MEASUREMENT_REPORT 6 // 11y D9.0 +-#define ACTION_MEASUREMENT_PILOT_ACTION 7 // 11y D9.0 ++#define ACTION_MEASUREMENT_PILOT_ACTION 7 // 11y D9.0 + #define ACTION_DSE_POWER_CONSTRAINT 8 // 11y D9.0 + +- + //HT Action field value + #define NOTIFY_BW_ACTION 0 + #define SMPS_ACTION 1 +@@ -798,7 +781,7 @@ + // + // STA's SYNC state machine: states, events, total function # + // +-#define SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state ++#define SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state + #define JOIN_WAIT_BEACON 1 + #define SCAN_LISTEN 2 + #define MAX_SYNC_STATE 3 +@@ -907,8 +890,6 @@ + + #define WPA_FUNC_SIZE (MAX_WPA_PTK_STATE * MAX_WPA_MSG) + +- +- + // ============================================================================= + + // value domain of 802.11 header FC.Tyte, which is b3..b2 of the 1st-byte of MAC header +@@ -961,10 +942,10 @@ + #define SUBTYPE_QOS_CFACK_CFPOLL 15 + + // ACK policy of QOS Control field bit 6:5 +-#define NORMAL_ACK 0x00 // b6:5 = 00 +-#define NO_ACK 0x20 // b6:5 = 01 +-#define NO_EXPLICIT_ACK 0x40 // b6:5 = 10 +-#define BLOCK_ACK 0x60 // b6:5 = 11 ++#define NORMAL_ACK 0x00 // b6:5 = 00 ++#define NO_ACK 0x20 // b6:5 = 01 ++#define NO_EXPLICIT_ACK 0x40 // b6:5 = 10 ++#define BLOCK_ACK 0x60 // b6:5 = 11 + + // + // rtmp_data.c use these definition +@@ -982,7 +963,7 @@ + #define LENGTH_CRC 4 + #define MAX_SEQ_NUMBER 0x0fff + #define LENGTH_802_3_NO_TYPE 12 +-#define LENGTH_802_1Q 4 /* VLAN related */ ++#define LENGTH_802_1Q 4 /* VLAN related */ + + // STA_CSR4.field.TxResult + #define TX_RESULT_SUCCESS 0 +@@ -999,23 +980,23 @@ + #define MODE_HTGREENFIELD 3 + + // MCS for CCK. BW.SGI.STBC are reserved +-#define MCS_LONGP_RATE_1 0 // long preamble CCK 1Mbps ++#define MCS_LONGP_RATE_1 0 // long preamble CCK 1Mbps + #define MCS_LONGP_RATE_2 1 // long preamble CCK 1Mbps + #define MCS_LONGP_RATE_5_5 2 + #define MCS_LONGP_RATE_11 3 +-#define MCS_SHORTP_RATE_1 4 // long preamble CCK 1Mbps. short is forbidden in 1Mbps ++#define MCS_SHORTP_RATE_1 4 // long preamble CCK 1Mbps. short is forbidden in 1Mbps + #define MCS_SHORTP_RATE_2 5 // short preamble CCK 2Mbps + #define MCS_SHORTP_RATE_5_5 6 + #define MCS_SHORTP_RATE_11 7 + // To send duplicate legacy OFDM. set BW=BW_40. SGI.STBC are reserved +-#define MCS_RATE_6 0 // legacy OFDM +-#define MCS_RATE_9 1 // OFDM +-#define MCS_RATE_12 2 // OFDM +-#define MCS_RATE_18 3 // OFDM +-#define MCS_RATE_24 4 // OFDM +-#define MCS_RATE_36 5 // OFDM +-#define MCS_RATE_48 6 // OFDM +-#define MCS_RATE_54 7 // OFDM ++#define MCS_RATE_6 0 // legacy OFDM ++#define MCS_RATE_9 1 // OFDM ++#define MCS_RATE_12 2 // OFDM ++#define MCS_RATE_18 3 // OFDM ++#define MCS_RATE_24 4 // OFDM ++#define MCS_RATE_36 5 // OFDM ++#define MCS_RATE_48 6 // OFDM ++#define MCS_RATE_54 7 // OFDM + // HT + #define MCS_0 0 // 1S + #define MCS_1 1 +@@ -1070,7 +1051,7 @@ + #define RXSTBC_TWO 2 // rx support of 1 and 2 spatial stream + #define RXSTBC_THR 3 // rx support of 1~3 spatial stream + // MCS FEEDBACK +-#define MCSFBK_NONE 0 // not support mcs feedback / ++#define MCSFBK_NONE 0 // not support mcs feedback / + #define MCSFBK_RSV 1 // reserved + #define MCSFBK_UNSOLICIT 2 // only support unsolict mcs feedback + #define MCSFBK_MRQ 3 // response to both MRQ and unsolict mcs feedback +@@ -1081,7 +1062,6 @@ + #define MMPS_RSV 2 + #define MMPS_ENABLE 3 + +- + // A-MSDU size + #define AMSDU_0 0 + #define AMSDU_1 1 +@@ -1094,28 +1074,28 @@ + #define RATE_2 1 + #define RATE_5_5 2 + #define RATE_11 3 +-#define RATE_6 4 // OFDM +-#define RATE_9 5 // OFDM +-#define RATE_12 6 // OFDM +-#define RATE_18 7 // OFDM +-#define RATE_24 8 // OFDM +-#define RATE_36 9 // OFDM +-#define RATE_48 10 // OFDM +-#define RATE_54 11 // OFDM ++#define RATE_6 4 // OFDM ++#define RATE_9 5 // OFDM ++#define RATE_12 6 // OFDM ++#define RATE_18 7 // OFDM ++#define RATE_24 8 // OFDM ++#define RATE_36 9 // OFDM ++#define RATE_48 10 // OFDM ++#define RATE_54 11 // OFDM + #define RATE_FIRST_OFDM_RATE RATE_6 + #define RATE_LAST_OFDM_RATE RATE_54 +-#define RATE_6_5 12 // HT mix +-#define RATE_13 13 // HT mix +-#define RATE_19_5 14 // HT mix +-#define RATE_26 15 // HT mix +-#define RATE_39 16 // HT mix +-#define RATE_52 17 // HT mix +-#define RATE_58_5 18 // HT mix +-#define RATE_65 19 // HT mix +-#define RATE_78 20 // HT mix +-#define RATE_104 21 // HT mix +-#define RATE_117 22 // HT mix +-#define RATE_130 23 // HT mix ++#define RATE_6_5 12 // HT mix ++#define RATE_13 13 // HT mix ++#define RATE_19_5 14 // HT mix ++#define RATE_26 15 // HT mix ++#define RATE_39 16 // HT mix ++#define RATE_52 17 // HT mix ++#define RATE_58_5 18 // HT mix ++#define RATE_65 19 // HT mix ++#define RATE_78 20 // HT mix ++#define RATE_104 21 // HT mix ++#define RATE_117 22 // HT mix ++#define RATE_130 23 // HT mix + //#define RATE_AUTO_SWITCH 255 // for StaCfg.FixedTxRate only + #define HTRATE_0 12 + #define RATE_FIRST_MM_RATE HTRATE_0 +@@ -1134,34 +1114,34 @@ + + // Country Region definition + #define REGION_MINIMUM_BG_BAND 0 +-#define REGION_0_BG_BAND 0 // 1-11 +-#define REGION_1_BG_BAND 1 // 1-13 +-#define REGION_2_BG_BAND 2 // 10-11 +-#define REGION_3_BG_BAND 3 // 10-13 +-#define REGION_4_BG_BAND 4 // 14 +-#define REGION_5_BG_BAND 5 // 1-14 +-#define REGION_6_BG_BAND 6 // 3-9 +-#define REGION_7_BG_BAND 7 // 5-13 +-#define REGION_31_BG_BAND 31 // 5-13 ++#define REGION_0_BG_BAND 0 // 1-11 ++#define REGION_1_BG_BAND 1 // 1-13 ++#define REGION_2_BG_BAND 2 // 10-11 ++#define REGION_3_BG_BAND 3 // 10-13 ++#define REGION_4_BG_BAND 4 // 14 ++#define REGION_5_BG_BAND 5 // 1-14 ++#define REGION_6_BG_BAND 6 // 3-9 ++#define REGION_7_BG_BAND 7 // 5-13 ++#define REGION_31_BG_BAND 31 // 5-13 + #define REGION_MAXIMUM_BG_BAND 7 + + #define REGION_MINIMUM_A_BAND 0 +-#define REGION_0_A_BAND 0 // 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 +-#define REGION_1_A_BAND 1 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_2_A_BAND 2 // 36, 40, 44, 48, 52, 56, 60, 64 +-#define REGION_3_A_BAND 3 // 52, 56, 60, 64, 149, 153, 157, 161 +-#define REGION_4_A_BAND 4 // 149, 153, 157, 161, 165 +-#define REGION_5_A_BAND 5 // 149, 153, 157, 161 +-#define REGION_6_A_BAND 6 // 36, 40, 44, 48 +-#define REGION_7_A_BAND 7 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 +-#define REGION_8_A_BAND 8 // 52, 56, 60, 64 +-#define REGION_9_A_BAND 9 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_10_A_BAND 10 // 36, 40, 44, 48, 149, 153, 157, 161, 165 +-#define REGION_11_A_BAND 11 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 +-#define REGION_12_A_BAND 12 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_13_A_BAND 13 // 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 +-#define REGION_14_A_BAND 14 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_15_A_BAND 15 // 149, 153, 157, 161, 165, 169, 173 ++#define REGION_0_A_BAND 0 // 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 ++#define REGION_1_A_BAND 1 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 ++#define REGION_2_A_BAND 2 // 36, 40, 44, 48, 52, 56, 60, 64 ++#define REGION_3_A_BAND 3 // 52, 56, 60, 64, 149, 153, 157, 161 ++#define REGION_4_A_BAND 4 // 149, 153, 157, 161, 165 ++#define REGION_5_A_BAND 5 // 149, 153, 157, 161 ++#define REGION_6_A_BAND 6 // 36, 40, 44, 48 ++#define REGION_7_A_BAND 7 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 ++#define REGION_8_A_BAND 8 // 52, 56, 60, 64 ++#define REGION_9_A_BAND 9 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 ++#define REGION_10_A_BAND 10 // 36, 40, 44, 48, 149, 153, 157, 161, 165 ++#define REGION_11_A_BAND 11 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 ++#define REGION_12_A_BAND 12 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 ++#define REGION_13_A_BAND 13 // 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 ++#define REGION_14_A_BAND 14 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 ++#define REGION_15_A_BAND 15 // 149, 153, 157, 161, 165, 169, 173 + #define REGION_MAXIMUM_A_BAND 15 + + // pTxD->CipherAlg +@@ -1172,10 +1152,9 @@ + #define CIPHER_AES 4 + #define CIPHER_CKIP64 5 + #define CIPHER_CKIP128 6 +-#define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table ++#define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table + #define CIPHER_SMS4 8 + +- + // LED Status. + #define LED_LINK_DOWN 0 + #define LED_LINK_UP 1 +@@ -1189,11 +1168,11 @@ + // value domain of pAd->LedCntl.LedMode and E2PROM + #define LED_MODE_DEFAULT 0 + #define LED_MODE_TWO_LED 1 +-//#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 +-#define LED_MODE_SIGNAL_STREGTH 0x40 // EEPROM define = 64 ++//#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 ++#define LED_MODE_SIGNAL_STREGTH 0x40 // EEPROM define = 64 + + // RC4 init value, used fro WEP & TKIP +-#define PPPINITFCS32 0xffffffff /* Initial FCS value */ ++#define PPPINITFCS32 0xffffffff /* Initial FCS value */ + + // value domain of pAd->StaCfg.PortSecured. 802.1X controlled port definition + #define WPA_802_1X_PORT_SECURED 1 +@@ -1205,7 +1184,6 @@ + //definition of DRS + #define MAX_STEP_OF_TX_RATE_SWITCH 32 + +- + // pre-allocated free NDIS PACKET/BUFFER poll for internal usage + #define MAX_NUM_OF_FREE_NDIS_PACKET 128 + +@@ -1223,7 +1201,7 @@ + #define DEFAULT_RF_TX_POWER 5 + + #define MAX_INI_BUFFER_SIZE 4096 +-#define MAX_PARAM_BUFFER_SIZE (2048) // enough for ACL (18*64) ++#define MAX_PARAM_BUFFER_SIZE (2048) // enough for ACL (18*64) + //18 : the length of Mac address acceptable format "01:02:03:04:05:06;") + //64 : MAX_NUM_OF_ACL_LIST + // definition of pAd->OpMode +@@ -1233,10 +1211,10 @@ + + // ========================= AP rtmp_def.h =========================== + // value domain for pAd->EventTab.Log[].Event +-#define EVENT_RESET_ACCESS_POINT 0 // Log = "hh:mm:ss Restart Access Point" +-#define EVENT_ASSOCIATED 1 // Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" +-#define EVENT_DISASSOCIATED 2 // Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" +-#define EVENT_AGED_OUT 3 // Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" ++#define EVENT_RESET_ACCESS_POINT 0 // Log = "hh:mm:ss Restart Access Point" ++#define EVENT_ASSOCIATED 1 // Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" ++#define EVENT_DISASSOCIATED 2 // Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" ++#define EVENT_AGED_OUT 3 // Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" + #define EVENT_COUNTER_M 4 + #define EVENT_INVALID_PSK 5 + #define EVENT_MAX_EVENT_TYPE 6 +@@ -1262,7 +1240,6 @@ + // MBSSID definition + #define ENTRY_NOT_FOUND 0xFF + +- + /* After Linux 2.6.9, + * VLAN module use Private (from user) interface flags (netdevice->priv_flags). + * #define IFF_802_1Q_VLAN 0x1 -- 802.1Q VLAN device. in if.h +@@ -1282,13 +1259,10 @@ + #define INF_APCLI_DEV_NAME "apcli" + #define INF_MESH_DEV_NAME "mesh" + +- + // WEP Key TYPE + #define WEP_HEXADECIMAL_TYPE 0 + #define WEP_ASCII_TYPE 1 + +- +- + // WIRELESS EVENTS definition + /* Max number of char in custom event, refer to wireless_tools.28/wireless.20.h */ + #define IW_CUSTOM_MAX_LEN 255 /* In bytes */ +@@ -1375,7 +1349,6 @@ + #define GUI_IDLE_POWER_SAVE 3 + // -- + +- + // definition for WpaSupport flag + #define WPA_SUPPLICANT_DISABLE 0 + #define WPA_SUPPLICANT_ENABLE 1 +@@ -1418,10 +1391,8 @@ + #define cpu2be16(x) SWAP16((x)) + #define be2cpu16(x) SWAP16((x)) + +- + #define ABS(_x, _y) ((_x) > (_y)) ? ((_x) -(_y)) : ((_y) -(_x)) + +- + #define A2Dec(_X, _p) \ + { \ + UCHAR *p; \ +@@ -1435,7 +1406,6 @@ + } \ + } + +- + #define A2Hex(_X, _p) \ + do{ \ + char *__p; \ +@@ -1453,6 +1423,4 @@ do{ \ + } \ + }while(0) + +-#endif // __RTMP_DEF_H__ +- +- ++#endif // __RTMP_DEF_H__ +diff --git a/drivers/staging/rt2860/rtmp_dot11.h b/drivers/staging/rt2860/rtmp_dot11.h +index f6887a8..051840f 100644 +--- a/drivers/staging/rt2860/rtmp_dot11.h ++++ b/drivers/staging/rt2860/rtmp_dot11.h +@@ -30,73 +30,71 @@ + + #include "rtmp_type.h" + +- + // 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. + typedef struct PACKED { +- UINT32 MA:1; //management action payload exist in (QoS Null+HTC) +- UINT32 TRQ:1; //sounding request +- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback +- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. +- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. +- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available +- UINT32 CalPos:2; // calibration position +- UINT32 CalSeq:2; //calibration sequence +- UINT32 FBKReq:2; //feedback request +- UINT32 CSISTEERING:2; //CSI/ STEERING +- UINT32 ZLFAnnouce:1; // ZLF announcement +- UINT32 rsv:5; //calibration sequence +- UINT32 ACConstraint:1; //feedback request +- UINT32 RDG:1; //RDG / More PPDU ++ UINT32 MA:1; //management action payload exist in (QoS Null+HTC) ++ UINT32 TRQ:1; //sounding request ++ UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback ++ UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. ++ UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. ++ UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available ++ UINT32 CalPos:2; // calibration position ++ UINT32 CalSeq:2; //calibration sequence ++ UINT32 FBKReq:2; //feedback request ++ UINT32 CSISTEERING:2; //CSI/ STEERING ++ UINT32 ZLFAnnouce:1; // ZLF announcement ++ UINT32 rsv:5; //calibration sequence ++ UINT32 ACConstraint:1; //feedback request ++ UINT32 RDG:1; //RDG / More PPDU + } HT_CONTROL, *PHT_CONTROL; + + // 2-byte QOS CONTROL field + typedef struct PACKED { +- USHORT TID:4; +- USHORT EOSP:1; +- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA +- USHORT AMsduPresent:1; +- USHORT Txop_QueueSize:8; ++ USHORT TID:4; ++ USHORT EOSP:1; ++ USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA ++ USHORT AMsduPresent:1; ++ USHORT Txop_QueueSize:8; + } QOS_CONTROL, *PQOS_CONTROL; + +- + // 2-byte Frame control field +-typedef struct PACKED { +- USHORT Ver:2; // Protocol version +- USHORT Type:2; // MSDU type +- USHORT SubType:4; // MSDU subtype +- USHORT ToDs:1; // To DS indication +- USHORT FrDs:1; // From DS indication +- USHORT MoreFrag:1; // More fragment bit +- USHORT Retry:1; // Retry status bit +- USHORT PwrMgmt:1; // Power management bit +- USHORT MoreData:1; // More data bit +- USHORT Wep:1; // Wep data +- USHORT Order:1; // Strict order expected ++typedef struct PACKED { ++ USHORT Ver:2; // Protocol version ++ USHORT Type:2; // MSDU type ++ USHORT SubType:4; // MSDU subtype ++ USHORT ToDs:1; // To DS indication ++ USHORT FrDs:1; // From DS indication ++ USHORT MoreFrag:1; // More fragment bit ++ USHORT Retry:1; // Retry status bit ++ USHORT PwrMgmt:1; // Power management bit ++ USHORT MoreData:1; // More data bit ++ USHORT Wep:1; // Wep data ++ USHORT Order:1; // Strict order expected + } FRAME_CONTROL, *PFRAME_CONTROL; + +-typedef struct PACKED _HEADER_802_11 { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR Addr3[MAC_ADDR_LEN]; +- USHORT Frag:4; +- USHORT Sequence:12; +- UCHAR Octet[0]; +-} HEADER_802_11, *PHEADER_802_11; ++typedef struct PACKED _HEADER_802_11 { ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++ UCHAR Addr3[MAC_ADDR_LEN]; ++ USHORT Frag:4; ++ USHORT Sequence:12; ++ UCHAR Octet[0]; ++} HEADER_802_11, *PHEADER_802_11; + + typedef struct PACKED _PSPOLL_FRAME { +- FRAME_CONTROL FC; +- USHORT Aid; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Ta[MAC_ADDR_LEN]; +-} PSPOLL_FRAME, *PPSPOLL_FRAME; ++ FRAME_CONTROL FC; ++ USHORT Aid; ++ UCHAR Bssid[MAC_ADDR_LEN]; ++ UCHAR Ta[MAC_ADDR_LEN]; ++} PSPOLL_FRAME, *PPSPOLL_FRAME; + +-typedef struct PACKED _RTS_FRAME { +- FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +-}RTS_FRAME, *PRTS_FRAME; ++typedef struct PACKED _RTS_FRAME { ++ FRAME_CONTROL FC; ++ USHORT Duration; ++ UCHAR Addr1[MAC_ADDR_LEN]; ++ UCHAR Addr2[MAC_ADDR_LEN]; ++} RTS_FRAME, *PRTS_FRAME; + + #endif // __DOT11_BASE_H__ // +diff --git a/drivers/staging/rt2860/rtmp_iface.h b/drivers/staging/rt2860/rtmp_iface.h +index c24ece5..eee17d4 100644 +--- a/drivers/staging/rt2860/rtmp_iface.h ++++ b/drivers/staging/rt2860/rtmp_iface.h +@@ -37,7 +37,6 @@ + #ifndef __RTMP_IFACE_H__ + #define __RTMP_IFACE_H__ + +- + #ifdef RTMP_PCI_SUPPORT + #include "iface/rtmp_pci.h" + #endif // RTMP_PCI_SUPPORT // +@@ -45,40 +44,32 @@ + #include "iface/rtmp_usb.h" + #endif // RTMP_USB_SUPPORT // + +-typedef struct _INF_PCI_CONFIG_ +-{ +- unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use +- unsigned int irq_num; +-}INF_PCI_CONFIG; +- +- +-typedef struct _INF_USB_CONFIG_ +-{ +- UINT8 BulkInEpAddr; // bulk-in endpoint address +- UINT8 BulkOutEpAddr[6]; // bulk-out endpoint address +-}INF_USB_CONFIG; ++typedef struct _INF_PCI_CONFIG_ { ++ unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ unsigned int irq_num; ++} INF_PCI_CONFIG; + ++typedef struct _INF_USB_CONFIG_ { ++ UINT8 BulkInEpAddr; // bulk-in endpoint address ++ UINT8 BulkOutEpAddr[6]; // bulk-out endpoint address ++} INF_USB_CONFIG; + +-typedef struct _INF_RBUS_CONFIG_ +-{ +- unsigned long csr_addr; +- unsigned int irq; +-}INF_RBUS_CONFIG; ++typedef struct _INF_RBUS_CONFIG_ { ++ unsigned long csr_addr; ++ unsigned int irq; ++} INF_RBUS_CONFIG; + +- +-typedef enum _RTMP_INF_TYPE_ +-{ ++typedef enum _RTMP_INF_TYPE_ { + RTMP_DEV_INF_UNKNOWN = 0, + RTMP_DEV_INF_PCI = 1, + RTMP_DEV_INF_USB = 2, + RTMP_DEV_INF_RBUS = 4, +-}RTMP_INF_TYPE; +- ++} RTMP_INF_TYPE; + +-typedef union _RTMP_INF_CONFIG_{ +- struct _INF_PCI_CONFIG_ pciConfig; +- struct _INF_USB_CONFIG_ usbConfig; +- struct _INF_RBUS_CONFIG_ rbusConfig; +-}RTMP_INF_CONFIG; ++typedef union _RTMP_INF_CONFIG_ { ++ struct _INF_PCI_CONFIG_ pciConfig; ++ struct _INF_USB_CONFIG_ usbConfig; ++ struct _INF_RBUS_CONFIG_ rbusConfig; ++} RTMP_INF_CONFIG; + + #endif // __RTMP_IFACE_H__ // +diff --git a/drivers/staging/rt2860/rtmp_mcu.h b/drivers/staging/rt2860/rtmp_mcu.h +index e1b2fee..98dea1b 100644 +--- a/drivers/staging/rt2860/rtmp_mcu.h ++++ b/drivers/staging/rt2860/rtmp_mcu.h +@@ -38,18 +38,12 @@ + #ifndef __RTMP_MCU_H__ + #define __RTMP_MCU_H__ + ++INT RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd); + +-INT RtmpAsicEraseFirmware( +- IN PRTMP_ADAPTER pAd); ++NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RtmpAsicLoadFirmware( +- IN PRTMP_ADAPTER pAd); +- +-INT RtmpAsicSendCommandToMcu( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, +- IN UCHAR Arg0, +- IN UCHAR Arg1); ++INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++ IN UCHAR Command, ++ IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1); + + #endif // __RTMP_MCU_H__ // +diff --git a/drivers/staging/rt2860/rtmp_os.h b/drivers/staging/rt2860/rtmp_os.h +index 350621d..82b60fc 100644 +--- a/drivers/staging/rt2860/rtmp_os.h ++++ b/drivers/staging/rt2860/rtmp_os.h +@@ -34,7 +34,6 @@ + --------- ---------- ---------------------------------------------- + */ + +- + #ifndef __RTMP_OS_H__ + #define __RTMP_OS_H__ + +@@ -42,8 +41,6 @@ + #include "rt_linux.h" + #endif // LINUX // + +- +- + /* + This data structure mainly strip some callback function defined in + "struct net_device" in kernel source "include/linux/netdevice.h". +@@ -51,46 +48,41 @@ + The definition of this data structure may various depends on different + OS. Use it carefully. + */ +-typedef struct _RTMP_OS_NETDEV_OP_HOOK_ +-{ ++typedef struct _RTMP_OS_NETDEV_OP_HOOK_ { + const struct net_device_ops *netdev_ops; +- void *priv; +- int priv_flags; ++ void *priv; ++ int priv_flags; + unsigned char devAddr[6]; +- unsigned char devName[16]; +- unsigned char needProtcted; +-}RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK; ++ unsigned char devName[16]; ++ unsigned char needProtcted; ++} RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK; + +- +-typedef enum _RTMP_TASK_STATUS_ +-{ ++typedef enum _RTMP_TASK_STATUS_ { + RTMP_TASK_STAT_UNKNOWN = 0, + RTMP_TASK_STAT_INITED = 1, + RTMP_TASK_STAT_RUNNING = 2, + RTMP_TASK_STAT_STOPED = 4, +-}RTMP_TASK_STATUS; ++} RTMP_TASK_STATUS; + #define RTMP_TASK_CAN_DO_INSERT (RTMP_TASK_STAT_INITED |RTMP_TASK_STAT_RUNNING) + + #define RTMP_OS_TASK_NAME_LEN 16 +-typedef struct _RTMP_OS_TASK_ +-{ +- char taskName[RTMP_OS_TASK_NAME_LEN]; +- void *priv; +- //unsigned long taskFlags; +- RTMP_TASK_STATUS taskStatus; ++typedef struct _RTMP_OS_TASK_ { ++ char taskName[RTMP_OS_TASK_NAME_LEN]; ++ void *priv; ++ //unsigned long taskFlags; ++ RTMP_TASK_STATUS taskStatus; + #ifndef KTHREAD_SUPPORT +- RTMP_OS_SEM taskSema; +- RTMP_OS_PID taskPID; +- struct completion taskComplete; ++ RTMP_OS_SEM taskSema; ++ RTMP_OS_PID taskPID; ++ struct completion taskComplete; + #endif +- unsigned char task_killed; ++ unsigned char task_killed; + #ifdef KTHREAD_SUPPORT +- struct task_struct *kthread_task; +- wait_queue_head_t kthread_q; +- BOOLEAN kthread_running; ++ struct task_struct *kthread_task; ++ wait_queue_head_t kthread_q; ++ BOOLEAN kthread_running; + #endif +-}RTMP_OS_TASK; +- ++} RTMP_OS_TASK; + + int RtmpOSIRQRequest(IN PNET_DEV pNetDev); + int RtmpOSIRQRelease(IN PNET_DEV pNetDev); +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +index 5f6e3ce..9f77197 100644 +--- a/drivers/staging/rt2860/rtmp_timer.h ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -43,59 +43,52 @@ + + #include "rtmp_os.h" + +- + #define DECLARE_TIMER_FUNCTION(_func) \ + void rtmp_timer_##_func(unsigned long data) + + #define GET_TIMER_FUNCTION(_func) \ + rtmp_timer_##_func + +- + /* ----------------- Timer Related MARCO ---------------*/ + // In some os or chipset, we have a lot of timer functions and will read/write register, + // it's not allowed in Linux USB sub-system to do it ( because of sleep issue when + // submit to ctrl pipe). So we need a wrapper function to take care it. + + #ifdef RTMP_TIMER_TASK_SUPPORT +-typedef VOID (*RTMP_TIMER_TASK_HANDLE)( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++typedef VOID(*RTMP_TIMER_TASK_HANDLE) (IN PVOID SystemSpecific1, ++ IN PVOID FunctionContext, ++ IN PVOID SystemSpecific2, ++ IN PVOID SystemSpecific3); + #endif // RTMP_TIMER_TASK_SUPPORT // + +-typedef struct _RALINK_TIMER_STRUCT { +- RTMP_OS_TIMER TimerObj; // Ndis Timer object +- BOOLEAN Valid; // Set to True when call RTMPInitTimer +- BOOLEAN State; // True if timer cancelled +- BOOLEAN PeriodicType; // True if timer is periodic timer +- BOOLEAN Repeat; // True if periodic timer +- ULONG TimerValue; // Timer value in milliseconds +- ULONG cookie; // os specific object ++typedef struct _RALINK_TIMER_STRUCT { ++ RTMP_OS_TIMER TimerObj; // Ndis Timer object ++ BOOLEAN Valid; // Set to True when call RTMPInitTimer ++ BOOLEAN State; // True if timer cancelled ++ BOOLEAN PeriodicType; // True if timer is periodic timer ++ BOOLEAN Repeat; // True if periodic timer ++ ULONG TimerValue; // Timer value in milliseconds ++ ULONG cookie; // os specific object + #ifdef RTMP_TIMER_TASK_SUPPORT +- RTMP_TIMER_TASK_HANDLE handle; +- void *pAd; +-#endif // RTMP_TIMER_TASK_SUPPORT // +-}RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; +- ++ RTMP_TIMER_TASK_HANDLE handle; ++ void *pAd; ++#endif // RTMP_TIMER_TASK_SUPPORT // ++} RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; + + #ifdef RTMP_TIMER_TASK_SUPPORT +-typedef struct _RTMP_TIMER_TASK_ENTRY_ +-{ +- RALINK_TIMER_STRUCT *pRaTimer; +- struct _RTMP_TIMER_TASK_ENTRY_ *pNext; +-}RTMP_TIMER_TASK_ENTRY; +- ++typedef struct _RTMP_TIMER_TASK_ENTRY_ { ++ RALINK_TIMER_STRUCT *pRaTimer; ++ struct _RTMP_TIMER_TASK_ENTRY_ *pNext; ++} RTMP_TIMER_TASK_ENTRY; + + #define TIMER_QUEUE_SIZE_MAX 128 +-typedef struct _RTMP_TIMER_TASK_QUEUE_ +-{ +- unsigned int status; +- unsigned char *pTimerQPoll; +- RTMP_TIMER_TASK_ENTRY *pQPollFreeList; +- RTMP_TIMER_TASK_ENTRY *pQHead; +- RTMP_TIMER_TASK_ENTRY *pQTail; +-}RTMP_TIMER_TASK_QUEUE; ++typedef struct _RTMP_TIMER_TASK_QUEUE_ { ++ unsigned int status; ++ unsigned char *pTimerQPoll; ++ RTMP_TIMER_TASK_ENTRY *pQPollFreeList; ++ RTMP_TIMER_TASK_ENTRY *pQHead; ++ RTMP_TIMER_TASK_ENTRY *pQTail; ++} RTMP_TIMER_TASK_QUEUE; + + #define BUILD_TIMER_FUNCTION(_func) \ + void rtmp_timer_##_func(unsigned long data) \ +@@ -122,7 +115,6 @@ void rtmp_timer_##_func(unsigned long data) \ + } + #endif // RTMP_TIMER_TASK_SUPPORT // + +- + DECLARE_TIMER_FUNCTION(MlmePeriodicExec); + DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); + DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); +@@ -152,5 +144,4 @@ DECLARE_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); + DECLARE_TIMER_FUNCTION(LedCtrlMain); + #endif + +- + #endif // __RTMP_TIMER_H__ // +diff --git a/drivers/staging/rt2860/rtmp_type.h b/drivers/staging/rt2860/rtmp_type.h +index f99cd2b..4900f9f 100644 +--- a/drivers/staging/rt2860/rtmp_type.h ++++ b/drivers/staging/rt2860/rtmp_type.h +@@ -38,110 +38,101 @@ + #ifndef __RTMP_TYPE_H__ + #define __RTMP_TYPE_H__ + +- + #define PACKED __attribute__ ((packed)) + + #ifdef LINUX + // Put platform dependent declaration here + // For example, linux type definition +-typedef unsigned char UINT8; +-typedef unsigned short UINT16; +-typedef unsigned int UINT32; +-typedef unsigned long long UINT64; +-typedef int INT32; +-typedef long long INT64; ++typedef unsigned char UINT8; ++typedef unsigned short UINT16; ++typedef unsigned int UINT32; ++typedef unsigned long long UINT64; ++typedef int INT32; ++typedef long long INT64; + #endif // LINUX // + +-typedef unsigned char * PUINT8; +-typedef unsigned short * PUINT16; +-typedef unsigned int * PUINT32; +-typedef unsigned long long * PUINT64; +-typedef int * PINT32; +-typedef long long * PINT64; ++typedef unsigned char *PUINT8; ++typedef unsigned short *PUINT16; ++typedef unsigned int *PUINT32; ++typedef unsigned long long *PUINT64; ++typedef int *PINT32; ++typedef long long *PINT64; + + // modified for fixing compile warning on Sigma 8634 platform +-typedef char STRING; +-typedef signed char CHAR; +- +-typedef signed short SHORT; +-typedef signed int INT; +-typedef signed long LONG; +-typedef signed long long LONGLONG; ++typedef char STRING; ++typedef signed char CHAR; + ++typedef signed short SHORT; ++typedef signed int INT; ++typedef signed long LONG; ++typedef signed long long LONGLONG; + + #ifdef LINUX +-typedef unsigned char UCHAR; +-typedef unsigned short USHORT; +-typedef unsigned int UINT; +-typedef unsigned long ULONG; ++typedef unsigned char UCHAR; ++typedef unsigned short USHORT; ++typedef unsigned int UINT; ++typedef unsigned long ULONG; + #endif // LINUX // +-typedef unsigned long long ULONGLONG; ++typedef unsigned long long ULONGLONG; + +-typedef unsigned char BOOLEAN; ++typedef unsigned char BOOLEAN; + #ifdef LINUX +-typedef void VOID; ++typedef void VOID; + #endif // LINUX // + +-typedef char * PSTRING; +-typedef VOID * PVOID; +-typedef CHAR * PCHAR; +-typedef UCHAR * PUCHAR; +-typedef USHORT * PUSHORT; +-typedef LONG * PLONG; +-typedef ULONG * PULONG; +-typedef UINT * PUINT; ++typedef char *PSTRING; ++typedef VOID *PVOID; ++typedef CHAR *PCHAR; ++typedef UCHAR *PUCHAR; ++typedef USHORT *PUSHORT; ++typedef LONG *PLONG; ++typedef ULONG *PULONG; ++typedef UINT *PUINT; + +-typedef unsigned int NDIS_MEDIA_STATE; ++typedef unsigned int NDIS_MEDIA_STATE; + + typedef union _LARGE_INTEGER { +- struct { +- UINT LowPart; +- INT32 HighPart; +- } u; +- INT64 QuadPart; ++ struct { ++ UINT LowPart; ++ INT32 HighPart; ++ } u; ++ INT64 QuadPart; + } LARGE_INTEGER; + +- + // + // Register set pair for initialzation register set definition + // +-typedef struct _RTMP_REG_PAIR +-{ +- ULONG Register; +- ULONG Value; ++typedef struct _RTMP_REG_PAIR { ++ ULONG Register; ++ ULONG Value; + } RTMP_REG_PAIR, *PRTMP_REG_PAIR; + +-typedef struct _REG_PAIR +-{ +- UCHAR Register; +- UCHAR Value; ++typedef struct _REG_PAIR { ++ UCHAR Register; ++ UCHAR Value; + } REG_PAIR, *PREG_PAIR; + + // + // Register set pair for initialzation register set definition + // +-typedef struct _RTMP_RF_REGS +-{ +- UCHAR Channel; +- ULONG R1; +- ULONG R2; +- ULONG R3; +- ULONG R4; ++typedef struct _RTMP_RF_REGS { ++ UCHAR Channel; ++ ULONG R1; ++ ULONG R2; ++ ULONG R3; ++ ULONG R4; + } RTMP_RF_REGS, *PRTMP_RF_REGS; + + typedef struct _FREQUENCY_ITEM { +- UCHAR Channel; +- UCHAR N; +- UCHAR R; +- UCHAR K; ++ UCHAR Channel; ++ UCHAR N; ++ UCHAR R; ++ UCHAR K; + } FREQUENCY_ITEM, *PFREQUENCY_ITEM; + +- +-typedef int NTSTATUS; +- ++typedef int NTSTATUS; + + #define STATUS_SUCCESS 0x00 + #define STATUS_UNSUCCESSFUL 0x01 + +-#endif // __RTMP_TYPE_H__ // +- ++#endif // __RTMP_TYPE_H__ // +diff --git a/drivers/staging/rt2860/rtusb_io.h b/drivers/staging/rt2860/rtusb_io.h +index 055e4ef..6217dd2 100644 +--- a/drivers/staging/rt2860/rtusb_io.h ++++ b/drivers/staging/rt2860/rtusb_io.h +@@ -25,7 +25,6 @@ + ************************************************************************* + */ + +- + #ifndef __RTUSB_IO_H__ + #define __RTUSB_IO_H__ + +@@ -60,8 +59,8 @@ + #define CMDTHREAD_SET_ASIC_WCID 0x0D730226 // cmd + #define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 // cmd + #define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D // cmd +-#define RT_CMD_SET_KEY_TABLE 0x0D730228 // cmd +-#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 // cmd ++#define RT_CMD_SET_KEY_TABLE 0x0D730228 // cmd ++#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 // cmd + #define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E // cmd + #define CMDTHREAD_SET_GROUP_KEY 0x0D73023F // cmd + #define CMDTHREAD_SET_PAIRWISE_KEY 0x0D730240 // cmd +@@ -75,34 +74,31 @@ + #define CMDTHREAD_UPDATE_PROTECT 0x0D790103 // cmd + // end johnli + +- + //CMDTHREAD_MULTI_READ_MAC + //CMDTHREAD_MULTI_WRITE_MAC + //CMDTHREAD_VENDOR_EEPROM_READ + //CMDTHREAD_VENDOR_EEPROM_WRITE +-typedef struct _CMDHandler_TLV { +- USHORT Offset; +- USHORT Length; +- UCHAR DataFirst; +-} CMDHandler_TLV, *PCMDHandler_TLV; +- +- +-typedef struct _CmdQElmt { +- UINT command; +- PVOID buffer; +- ULONG bufferlength; +- BOOLEAN CmdFromNdis; +- BOOLEAN SetOperation; +- struct _CmdQElmt *next; +-} CmdQElmt, *PCmdQElmt; +- +-typedef struct _CmdQ { +- UINT size; +- CmdQElmt *head; +- CmdQElmt *tail; +- UINT32 CmdQState; +-}CmdQ, *PCmdQ; +- ++typedef struct _CMDHandler_TLV { ++ USHORT Offset; ++ USHORT Length; ++ UCHAR DataFirst; ++} CMDHandler_TLV, *PCMDHandler_TLV; ++ ++typedef struct _CmdQElmt { ++ UINT command; ++ PVOID buffer; ++ ULONG bufferlength; ++ BOOLEAN CmdFromNdis; ++ BOOLEAN SetOperation; ++ struct _CmdQElmt *next; ++} CmdQElmt, *PCmdQElmt; ++ ++typedef struct _CmdQ { ++ UINT size; ++ CmdQElmt *head; ++ CmdQElmt *tail; ++ UINT32 CmdQState; ++} CmdQ, *PCmdQ; + + #define EnqueueCmd(cmdq, cmdqelmt) \ + { \ +@@ -115,7 +111,6 @@ typedef struct _CmdQ { + cmdq->size++; \ + } + +- + /****************************************************************************** + + USB Cmd to ASIC Related MACRO +@@ -185,5 +180,4 @@ typedef struct _CmdQ { + RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ + }while(0) + +- + #endif // __RTUSB_IO_H__ // +diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h +index b9fc676..64154e9 100644 +--- a/drivers/staging/rt2860/spectrum.h ++++ b/drivers/staging/rt2860/spectrum.h +@@ -31,10 +31,7 @@ + #include "rtmp_type.h" + #include "spectrum_def.h" + +- +-CHAR RTMP_GetTxPwr( +- IN PRTMP_ADAPTER pAd, +- IN HTTRANSMIT_SETTING HTTxMode); ++CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); + + /* + ========================================================================== +@@ -48,17 +45,16 @@ CHAR RTMP_GetTxPwr( + Return : None. + ========================================================================== + */ +-VOID MakeMeasurementReqFrame( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 NumOfRepetitions); ++VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pOutBuffer, ++ OUT PULONG pFrameLen, ++ IN UINT8 TotalLen, ++ IN UINT8 Category, ++ IN UINT8 Action, ++ IN UINT8 MeasureToken, ++ IN UINT8 MeasureReqMode, ++ IN UINT8 MeasureReqType, ++ IN UINT8 NumOfRepetitions); + + /* + ========================================================================== +@@ -72,15 +68,13 @@ VOID MakeMeasurementReqFrame( + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, +- IN PUINT8 pReportInfo); ++VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN UINT8 DialogToken, ++ IN UINT8 MeasureToken, ++ IN UINT8 MeasureReqMode, ++ IN UINT8 MeasureReqType, ++ IN UINT8 ReportInfoLen, IN PUINT8 pReportInfo); + + /* + ========================================================================== +@@ -94,10 +88,7 @@ VOID EnqueueMeasurementRep( + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCReq( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UCHAR DialogToken); ++VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken); + + /* + ========================================================================== +@@ -111,12 +102,9 @@ VOID EnqueueTPCReq( + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCRep( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin); ++VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, ++ IN UINT8 DialogToken, IN UINT8 TxPwr, IN UINT8 LinkMargin); + + /* + ========================================================================== +@@ -132,11 +120,8 @@ VOID EnqueueTPCRep( + Return : None. + ========================================================================== + */ +-VOID EnqueueChSwAnn( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 ChSwMode, +- IN UINT8 NewCh); ++VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pDA, IN UINT8 ChSwMode, IN UINT8 NewCh); + + /* + ========================================================================== +@@ -150,9 +135,7 @@ VOID EnqueueChSwAnn( + Return : None. + ========================================================================== + */ +-VOID PeerSpectrumAction( +- IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM *Elem); ++VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -163,73 +146,44 @@ VOID PeerSpectrumAction( + Return : None. + ========================================================================== + */ +-INT Set_MeasureReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_TpcReq_Proc( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +-INT Set_PwrConstraint( +- IN PRTMP_ADAPTER pAd, +- IN PSTRING arg); +- +- +-VOID MeasureReqTabInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID MeasureReqTabExit( +- IN PRTMP_ADAPTER pAd); +- +-PMEASURE_REQ_ENTRY MeasureReqLookUp( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-PMEASURE_REQ_ENTRY MeasureReqInsert( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-VOID MeasureReqDelete( +- IN PRTMP_ADAPTER pAd, +- IN UINT8 DialogToken); +- +-VOID InsertChannelRepIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, +- IN UINT8 RegulatoryClass); +- +-VOID InsertTpcReportIE( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, +- IN UINT8 LinkMargin); +- +-VOID InsertDialogToken( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 DialogToken); +- +-VOID TpcReqTabInit( +- IN PRTMP_ADAPTER pAd); +- +-VOID TpcReqTabExit( +- IN PRTMP_ADAPTER pAd); +- +-VOID NotifyChSwAnnToPeerAPs( +- IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, +- IN UINT8 ChSwMode, +- IN UINT8 Channel); +- +-VOID RguClass_BuildBcnChList( +- IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, +- OUT PULONG pBufLen); +-#endif // __SPECTRUM_H__ // ++INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++ ++INT Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++ ++INT Set_PwrConstraint(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++ ++VOID MeasureReqTabInit(IN PRTMP_ADAPTER pAd); ++ ++VOID MeasureReqTabExit(IN PRTMP_ADAPTER pAd); ++ ++PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); ++ ++PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); + ++VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); ++ ++VOID InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PSTRING pCountry, IN UINT8 RegulatoryClass); ++ ++VOID InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN UINT8 TxPwr, IN UINT8 LinkMargin); ++ ++VOID InsertDialogToken(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, IN UINT8 DialogToken); ++ ++VOID TpcReqTabInit(IN PRTMP_ADAPTER pAd); ++ ++VOID TpcReqTabExit(IN PRTMP_ADAPTER pAd); ++ ++VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++ IN PUCHAR pRA, ++ IN PUCHAR pTA, IN UINT8 ChSwMode, IN UINT8 Channel); ++ ++VOID RguClass_BuildBcnChList(IN PRTMP_ADAPTER pAd, ++ OUT PUCHAR pBuf, OUT PULONG pBufLen); ++#endif // __SPECTRUM_H__ // +diff --git a/drivers/staging/rt2860/spectrum_def.h b/drivers/staging/rt2860/spectrum_def.h +index ae67014..4ebe5f5 100644 +--- a/drivers/staging/rt2860/spectrum_def.h ++++ b/drivers/staging/rt2860/spectrum_def.h +@@ -39,69 +39,59 @@ + #ifndef __SPECTRUM_DEF_H__ + #define __SPECTRUM_DEF_H__ + +- + #define MAX_MEASURE_REQ_TAB_SIZE 32 + #define MAX_HASH_MEASURE_REQ_TAB_SIZE MAX_MEASURE_REQ_TAB_SIZE + + #define MAX_TPC_REQ_TAB_SIZE 32 + #define MAX_HASH_TPC_REQ_TAB_SIZE MAX_TPC_REQ_TAB_SIZE + +-#define MIN_RCV_PWR 100 /* Negative value ((dBm) */ ++#define MIN_RCV_PWR 100 /* Negative value ((dBm) */ + +-#define TPC_REQ_AGE_OUT 500 /* ms */ +-#define MQ_REQ_AGE_OUT 500 /* ms */ ++#define TPC_REQ_AGE_OUT 500 /* ms */ ++#define MQ_REQ_AGE_OUT 500 /* ms */ + + #define TPC_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_HASH_TPC_REQ_TAB_SIZE) + #define MQ_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_MEASURE_REQ_TAB_SIZE) + +-typedef struct _MEASURE_REQ_ENTRY +-{ ++typedef struct _MEASURE_REQ_ENTRY { + struct _MEASURE_REQ_ENTRY *pNext; + ULONG lastTime; +- BOOLEAN Valid; ++ BOOLEAN Valid; + UINT8 DialogToken; + UINT8 MeasureDialogToken[3]; // 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. + } MEASURE_REQ_ENTRY, *PMEASURE_REQ_ENTRY; + +-typedef struct _MEASURE_REQ_TAB +-{ ++typedef struct _MEASURE_REQ_TAB { + UCHAR Size; + PMEASURE_REQ_ENTRY Hash[MAX_HASH_MEASURE_REQ_TAB_SIZE]; + MEASURE_REQ_ENTRY Content[MAX_MEASURE_REQ_TAB_SIZE]; + } MEASURE_REQ_TAB, *PMEASURE_REQ_TAB; + +-typedef struct _TPC_REQ_ENTRY +-{ ++typedef struct _TPC_REQ_ENTRY { + struct _TPC_REQ_ENTRY *pNext; + ULONG lastTime; + BOOLEAN Valid; + UINT8 DialogToken; + } TPC_REQ_ENTRY, *PTPC_REQ_ENTRY; + +-typedef struct _TPC_REQ_TAB +-{ ++typedef struct _TPC_REQ_TAB { + UCHAR Size; + PTPC_REQ_ENTRY Hash[MAX_HASH_TPC_REQ_TAB_SIZE]; + TPC_REQ_ENTRY Content[MAX_TPC_REQ_TAB_SIZE]; + } TPC_REQ_TAB, *PTPC_REQ_TAB; + +- + /* The regulatory information */ +-typedef struct _DOT11_CHANNEL_SET +-{ ++typedef struct _DOT11_CHANNEL_SET { + UCHAR NumberOfChannels; + UINT8 MaxTxPwr; + UCHAR ChannelList[16]; + } DOT11_CHANNEL_SET, *PDOT11_CHANNEL_SET; + +-typedef struct _DOT11_REGULATORY_INFORMATION +-{ ++typedef struct _DOT11_REGULATORY_INFORMATION { + UCHAR RegulatoryClass; + DOT11_CHANNEL_SET ChannelSet; + } DOT11_REGULATORY_INFORMATION, *PDOT11_REGULATORY_INFORMATION; + +- +- + #define RM_TPC_REQ 0 + #define RM_MEASURE_REQ 1 + +@@ -111,53 +101,44 @@ typedef struct _DOT11_REGULATORY_INFORMATION + #define RM_CH_LOAD 3 + #define RM_NOISE_HISTOGRAM 4 + +- +-typedef struct PACKED _TPC_REPORT_INFO +-{ ++typedef struct PACKED _TPC_REPORT_INFO { + UINT8 TxPwr; + UINT8 LinkMargin; + } TPC_REPORT_INFO, *PTPC_REPORT_INFO; + +-typedef struct PACKED _CH_SW_ANN_INFO +-{ ++typedef struct PACKED _CH_SW_ANN_INFO { + UINT8 ChSwMode; + UINT8 Channel; + UINT8 ChSwCnt; + } CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; + +-typedef union PACKED _MEASURE_REQ_MODE +-{ +- struct PACKED +- { ++typedef union PACKED _MEASURE_REQ_MODE { ++ struct PACKED { + UINT8 Parallel:1; + UINT8 Enable:1; + UINT8 Request:1; + UINT8 Report:1; + UINT8 DurationMandatory:1; +- UINT8 :3; ++ UINT8:3; + } field; + UINT8 word; + } MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; + +-typedef struct PACKED _MEASURE_REQ +-{ ++typedef struct PACKED _MEASURE_REQ { + UINT8 ChNum; + UINT64 MeasureStartTime; + UINT16 MeasureDuration; + } MEASURE_REQ, *PMEASURE_REQ; + +-typedef struct PACKED _MEASURE_REQ_INFO +-{ ++typedef struct PACKED _MEASURE_REQ_INFO { + UINT8 Token; + MEASURE_REQ_MODE ReqMode; + UINT8 ReqType; + UINT8 Oct[0]; + } MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; + +-typedef union PACKED _MEASURE_BASIC_REPORT_MAP +-{ +- struct PACKED +- { ++typedef union PACKED _MEASURE_BASIC_REPORT_MAP { ++ struct PACKED { + UINT8 BSS:1; + + UINT8 OfdmPreamble:1; +@@ -169,34 +150,29 @@ typedef union PACKED _MEASURE_BASIC_REPORT_MAP + UINT8 word; + } MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; + +-typedef struct PACKED _MEASURE_BASIC_REPORT +-{ ++typedef struct PACKED _MEASURE_BASIC_REPORT { + UINT8 ChNum; + UINT64 MeasureStartTime; + UINT16 MeasureDuration; + MEASURE_BASIC_REPORT_MAP Map; + } MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; + +-typedef struct PACKED _MEASURE_CCA_REPORT +-{ ++typedef struct PACKED _MEASURE_CCA_REPORT { + UINT8 ChNum; + UINT64 MeasureStartTime; + UINT16 MeasureDuration; + UINT8 CCA_Busy_Fraction; + } MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; + +-typedef struct PACKED _MEASURE_RPI_REPORT +-{ ++typedef struct PACKED _MEASURE_RPI_REPORT { + UINT8 ChNum; + UINT64 MeasureStartTime; + UINT16 MeasureDuration; + UINT8 RPI_Density[8]; + } MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; + +-typedef union PACKED _MEASURE_REPORT_MODE +-{ +- struct PACKED +- { ++typedef union PACKED _MEASURE_REPORT_MODE { ++ struct PACKED { + UINT8 Late:1; + UINT8 Incapable:1; + UINT8 Refused:1; +@@ -205,16 +181,14 @@ typedef union PACKED _MEASURE_REPORT_MODE + UINT8 word; + } MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; + +-typedef struct PACKED _MEASURE_REPORT_INFO +-{ ++typedef struct PACKED _MEASURE_REPORT_INFO { + UINT8 Token; + UINT8 ReportMode; + UINT8 ReportType; + UINT8 Octect[0]; + } MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; + +-typedef struct PACKED _QUIET_INFO +-{ ++typedef struct PACKED _QUIET_INFO { + UINT8 QuietCnt; + UINT8 QuietPeriod; + UINT16 QuietDuration; +@@ -222,4 +196,3 @@ typedef struct PACKED _QUIET_INFO + } QUIET_INFO, *PQUIET_INFO; + + #endif // __SPECTRUM_DEF_H__ // +- +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index 27e5aab..fb5843c 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -126,12 +126,12 @@ + + //#ifdef CONFIG_AP_SUPPORT + // WPA mechanism retry timer interval +-#define PEER_MSG1_RETRY_EXEC_INTV 1000 // 1 sec +-#define PEER_MSG3_RETRY_EXEC_INTV 3000 // 3 sec +-#define GROUP_KEY_UPDATE_EXEC_INTV 1000 // 1 sec +-#define PEER_GROUP_KEY_UPDATE_INIV 2000 // 2 sec ++#define PEER_MSG1_RETRY_EXEC_INTV 1000 // 1 sec ++#define PEER_MSG3_RETRY_EXEC_INTV 3000 // 3 sec ++#define GROUP_KEY_UPDATE_EXEC_INTV 1000 // 1 sec ++#define PEER_GROUP_KEY_UPDATE_INIV 2000 // 2 sec + +-#define ENQUEUE_EAPOL_START_TIMER 200 // 200 ms ++#define ENQUEUE_EAPOL_START_TIMER 200 // 200 ms + + // group rekey interval + #define TIME_REKEY 0 +@@ -147,7 +147,6 @@ + #define AKM_SUITE 2 + #define PMKID_LIST 3 + +- + #define EAPOL_START_DISABLE 0 + #define EAPOL_START_PSK 1 + #define EAPOL_START_1X 2 +@@ -181,7 +180,6 @@ + + #define CONV_ARRARY_TO_UINT16(_V) ((_V[0]<<8) | (_V[1])) + +- + #define ADD_ONE_To_64BIT_VAR(_V) \ + { \ + UCHAR cnt = LEN_KEY_DESC_REPLAY; \ +@@ -197,224 +195,199 @@ + #define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) + + // EAPOL Key Information definition within Key descriptor format +-typedef struct PACKED _KEY_INFO +-{ +- UCHAR KeyMic:1; +- UCHAR Secure:1; +- UCHAR Error:1; +- UCHAR Request:1; +- UCHAR EKD_DL:1; // EKD for AP; DL for STA +- UCHAR Rsvd:3; +- UCHAR KeyDescVer:3; +- UCHAR KeyType:1; +- UCHAR KeyIndex:2; +- UCHAR Install:1; +- UCHAR KeyAck:1; +-} KEY_INFO, *PKEY_INFO; ++typedef struct PACKED _KEY_INFO { ++ UCHAR KeyMic:1; ++ UCHAR Secure:1; ++ UCHAR Error:1; ++ UCHAR Request:1; ++ UCHAR EKD_DL:1; // EKD for AP; DL for STA ++ UCHAR Rsvd:3; ++ UCHAR KeyDescVer:3; ++ UCHAR KeyType:1; ++ UCHAR KeyIndex:2; ++ UCHAR Install:1; ++ UCHAR KeyAck:1; ++} KEY_INFO, *PKEY_INFO; + + // EAPOL Key descriptor format +-typedef struct PACKED _KEY_DESCRIPTER +-{ +- UCHAR Type; +- KEY_INFO KeyInfo; +- UCHAR KeyLength[2]; +- UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; +- UCHAR KeyNonce[LEN_KEY_DESC_NONCE]; +- UCHAR KeyIv[LEN_KEY_DESC_IV]; +- UCHAR KeyRsc[LEN_KEY_DESC_RSC]; +- UCHAR KeyId[LEN_KEY_DESC_ID]; +- UCHAR KeyMic[LEN_KEY_DESC_MIC]; +- UCHAR KeyDataLen[2]; +- UCHAR KeyData[MAX_LEN_OF_RSNIE]; +-} KEY_DESCRIPTER, *PKEY_DESCRIPTER; +- +-typedef struct PACKED _EAPOL_PACKET +-{ +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; +- KEY_DESCRIPTER KeyDesc; +-} EAPOL_PACKET, *PEAPOL_PACKET; ++typedef struct PACKED _KEY_DESCRIPTER { ++ UCHAR Type; ++ KEY_INFO KeyInfo; ++ UCHAR KeyLength[2]; ++ UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; ++ UCHAR KeyNonce[LEN_KEY_DESC_NONCE]; ++ UCHAR KeyIv[LEN_KEY_DESC_IV]; ++ UCHAR KeyRsc[LEN_KEY_DESC_RSC]; ++ UCHAR KeyId[LEN_KEY_DESC_ID]; ++ UCHAR KeyMic[LEN_KEY_DESC_MIC]; ++ UCHAR KeyDataLen[2]; ++ UCHAR KeyData[MAX_LEN_OF_RSNIE]; ++} KEY_DESCRIPTER, *PKEY_DESCRIPTER; ++ ++typedef struct PACKED _EAPOL_PACKET { ++ UCHAR ProVer; ++ UCHAR ProType; ++ UCHAR Body_Len[2]; ++ KEY_DESCRIPTER KeyDesc; ++} EAPOL_PACKET, *PEAPOL_PACKET; + + //802.11i D10 page 83 +-typedef struct PACKED _GTK_ENCAP +-{ +- UCHAR Kid:2; +- UCHAR tx:1; +- UCHAR rsv:5; +- UCHAR rsv1; +- UCHAR GTK[TKIP_GTK_LENGTH]; +-} GTK_ENCAP, *PGTK_ENCAP; +- +-typedef struct PACKED _KDE_ENCAP +-{ +- UCHAR Type; +- UCHAR Len; +- UCHAR OUI[3]; +- UCHAR DataType; +- GTK_ENCAP GTKEncap; +-} KDE_ENCAP, *PKDE_ENCAP; ++typedef struct PACKED _GTK_ENCAP { ++ UCHAR Kid:2; ++ UCHAR tx:1; ++ UCHAR rsv:5; ++ UCHAR rsv1; ++ UCHAR GTK[TKIP_GTK_LENGTH]; ++} GTK_ENCAP, *PGTK_ENCAP; ++ ++typedef struct PACKED _KDE_ENCAP { ++ UCHAR Type; ++ UCHAR Len; ++ UCHAR OUI[3]; ++ UCHAR DataType; ++ GTK_ENCAP GTKEncap; ++} KDE_ENCAP, *PKDE_ENCAP; + + // For WPA1 + typedef struct PACKED _RSNIE { +- UCHAR oui[4]; +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; +- struct PACKED { +- UCHAR oui[4]; +- }ucast[1]; ++ UCHAR oui[4]; ++ USHORT version; ++ UCHAR mcast[4]; ++ USHORT ucount; ++ struct PACKED { ++ UCHAR oui[4]; ++ } ucast[1]; + } RSNIE, *PRSNIE; + + // For WPA2 + typedef struct PACKED _RSNIE2 { +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; +- struct PACKED { +- UCHAR oui[4]; +- }ucast[1]; ++ USHORT version; ++ UCHAR mcast[4]; ++ USHORT ucount; ++ struct PACKED { ++ UCHAR oui[4]; ++ } ucast[1]; + } RSNIE2, *PRSNIE2; + + // AKM Suite + typedef struct PACKED _RSNIE_AUTH { +- USHORT acount; +- struct PACKED { +- UCHAR oui[4]; +- }auth[1]; +-} RSNIE_AUTH,*PRSNIE_AUTH; +- +-typedef union PACKED _RSN_CAPABILITIES { +- struct PACKED { +- USHORT PreAuth:1; +- USHORT No_Pairwise:1; +- USHORT PTKSA_R_Counter:2; +- USHORT GTKSA_R_Counter:2; +- USHORT Rsvd:10; +- } field; +- USHORT word; +-} RSN_CAPABILITIES, *PRSN_CAPABILITIES; ++ USHORT acount; ++ struct PACKED { ++ UCHAR oui[4]; ++ } auth[1]; ++} RSNIE_AUTH, *PRSNIE_AUTH; ++ ++typedef union PACKED _RSN_CAPABILITIES { ++ struct PACKED { ++ USHORT PreAuth:1; ++ USHORT No_Pairwise:1; ++ USHORT PTKSA_R_Counter:2; ++ USHORT GTKSA_R_Counter:2; ++ USHORT Rsvd:10; ++ } field; ++ USHORT word; ++} RSN_CAPABILITIES, *PRSN_CAPABILITIES; + + typedef struct PACKED _EAP_HDR { +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; +- UCHAR code; +- UCHAR identifier; +- UCHAR length[2]; // including code and identifier, followed by length-2 octets of data ++ UCHAR ProVer; ++ UCHAR ProType; ++ UCHAR Body_Len[2]; ++ UCHAR code; ++ UCHAR identifier; ++ UCHAR length[2]; // including code and identifier, followed by length-2 octets of data + } EAP_HDR, *PEAP_HDR; + + // For supplicant state machine states. 802.11i Draft 4.1, p. 97 + // We simplified it +-typedef enum _WpaState +-{ +- SS_NOTUSE, // 0 +- SS_START, // 1 +- SS_WAIT_MSG_3, // 2 +- SS_WAIT_GROUP, // 3 +- SS_FINISH, // 4 +- SS_KEYUPDATE, // 5 +-} WPA_STATE; ++typedef enum _WpaState { ++ SS_NOTUSE, // 0 ++ SS_START, // 1 ++ SS_WAIT_MSG_3, // 2 ++ SS_WAIT_GROUP, // 3 ++ SS_FINISH, // 4 ++ SS_KEYUPDATE, // 5 ++} WPA_STATE; + + // +-// The definition of the cipher combination ++// The definition of the cipher combination + // +-// bit3 bit2 bit1 bit0 +-// +------------+------------+ +-// | WPA | WPA2 | +-// +------+-----+------+-----+ +-// | TKIP | AES | TKIP | AES | +-// | 0 | 1 | 1 | 0 | -> 0x06 +-// | 0 | 1 | 1 | 1 | -> 0x07 +-// | 1 | 0 | 0 | 1 | -> 0x09 +-// | 1 | 0 | 1 | 1 | -> 0x0B +-// | 1 | 1 | 0 | 1 | -> 0x0D +-// | 1 | 1 | 1 | 0 | -> 0x0E +-// | 1 | 1 | 1 | 1 | -> 0x0F +-// +------+-----+------+-----+ ++// bit3 bit2 bit1 bit0 ++// +------------+------------+ ++// | WPA | WPA2 | ++// +------+-----+------+-----+ ++// | TKIP | AES | TKIP | AES | ++// | 0 | 1 | 1 | 0 | -> 0x06 ++// | 0 | 1 | 1 | 1 | -> 0x07 ++// | 1 | 0 | 0 | 1 | -> 0x09 ++// | 1 | 0 | 1 | 1 | -> 0x0B ++// | 1 | 1 | 0 | 1 | -> 0x0D ++// | 1 | 1 | 1 | 0 | -> 0x0E ++// | 1 | 1 | 1 | 1 | -> 0x0F ++// +------+-----+------+-----+ + // +-typedef enum _WpaMixPairCipher +-{ +- MIX_CIPHER_NOTUSE = 0x00, +- WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES +- WPA_AES_WPA2_TKIP = 0x06, +- WPA_AES_WPA2_TKIPAES = 0x07, +- WPA_TKIP_WPA2_AES = 0x09, +- WPA_TKIP_WPA2_TKIPAES = 0x0B, +- WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES +- WPA_TKIPAES_WPA2_AES = 0x0D, +- WPA_TKIPAES_WPA2_TKIP = 0x0E, +- WPA_TKIPAES_WPA2_TKIPAES = 0x0F, +-} WPA_MIX_PAIR_CIPHER; +- +-typedef struct PACKED _RSN_IE_HEADER_STRUCT { +- UCHAR Eid; +- UCHAR Length; +- USHORT Version; // Little endian format +-} RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; ++typedef enum _WpaMixPairCipher { ++ MIX_CIPHER_NOTUSE = 0x00, ++ WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES ++ WPA_AES_WPA2_TKIP = 0x06, ++ WPA_AES_WPA2_TKIPAES = 0x07, ++ WPA_TKIP_WPA2_AES = 0x09, ++ WPA_TKIP_WPA2_TKIPAES = 0x0B, ++ WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES ++ WPA_TKIPAES_WPA2_AES = 0x0D, ++ WPA_TKIPAES_WPA2_TKIP = 0x0E, ++ WPA_TKIPAES_WPA2_TKIPAES = 0x0F, ++} WPA_MIX_PAIR_CIPHER; ++ ++typedef struct PACKED _RSN_IE_HEADER_STRUCT { ++ UCHAR Eid; ++ UCHAR Length; ++ USHORT Version; // Little endian format ++} RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; + + // Cipher suite selector types +-typedef struct PACKED _CIPHER_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; +-} CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; ++typedef struct PACKED _CIPHER_SUITE_STRUCT { ++ UCHAR Oui[3]; ++ UCHAR Type; ++} CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; + + // Authentication and Key Management suite selector +-typedef struct PACKED _AKM_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; +-} AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; ++typedef struct PACKED _AKM_SUITE_STRUCT { ++ UCHAR Oui[3]; ++ UCHAR Type; ++} AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; + + // RSN capability +-typedef struct PACKED _RSN_CAPABILITY { +- USHORT Rsv:10; +- USHORT GTKSAReplayCnt:2; +- USHORT PTKSAReplayCnt:2; +- USHORT NoPairwise:1; +- USHORT PreAuth:1; +-} RSN_CAPABILITY, *PRSN_CAPABILITY; +- ++typedef struct PACKED _RSN_CAPABILITY { ++ USHORT Rsv:10; ++ USHORT GTKSAReplayCnt:2; ++ USHORT PTKSAReplayCnt:2; ++ USHORT NoPairwise:1; ++ USHORT PreAuth:1; ++} RSN_CAPABILITY, *PRSN_CAPABILITY; + + /*======================================== + The prototype is defined in cmm_wpa.c + ========================================*/ +-BOOLEAN WpaMsgTypeSubst( +- IN UCHAR EAPType, +- OUT INT *MsgType); +- +-VOID PRF( +- IN UCHAR *key, +- IN INT key_len, +- IN UCHAR *prefix, +- IN INT prefix_len, +- IN UCHAR *data, +- IN INT data_len, +- OUT UCHAR *output, +- IN INT len); +- +-int PasswordHash( +- char *password, +- unsigned char *ssid, +- int ssidlength, +- unsigned char *output); +- +-PUINT8 GetSuiteFromRSNIE( +- IN PUINT8 rsnie, +- IN UINT rsnie_len, +- IN UINT8 type, +- OUT UINT8 *count); +- +-VOID WpaShowAllsuite( +- IN PUINT8 rsnie, +- IN UINT rsnie_len); +- +-VOID RTMPInsertRSNIE( +- IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, +- IN UINT8 pmkid_len); ++BOOLEAN WpaMsgTypeSubst(IN UCHAR EAPType, OUT INT * MsgType); ++ ++VOID PRF(IN UCHAR * key, ++ IN INT key_len, ++ IN UCHAR * prefix, ++ IN INT prefix_len, ++ IN UCHAR * data, IN INT data_len, OUT UCHAR * output, IN INT len); ++ ++int PasswordHash(char *password, ++ unsigned char *ssid, int ssidlength, unsigned char *output); ++ ++PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, ++ IN UINT rsnie_len, IN UINT8 type, OUT UINT8 * count); ++ ++VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len); + ++VOID RTMPInsertRSNIE(IN PUCHAR pFrameBuf, ++ OUT PULONG pFrameLen, ++ IN PUINT8 rsnie_ptr, ++ IN UINT8 rsnie_len, ++ IN PUINT8 pmkid_ptr, IN UINT8 pmkid_len); + + #endif +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch b/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch new file mode 100644 index 000000000..4309627b4 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch @@ -0,0 +1,5538 @@ +From c8fe57a6e02a30d2e837161df818866cc2a60be5 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:14 -0800 +Subject: [PATCH 22/42] Staging: rt28x0: fix comments in *.c files + +commit 9f548a2a3dd8feca99f7301df474f983c1e815f3 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chips/rt3070.c | 68 +++--- + drivers/staging/rt2860/chips/rt3090.c | 34 ++-- + drivers/staging/rt2860/chips/rt30xx.c | 146 ++++++------ + drivers/staging/rt2860/pci_main_dev.c | 290 +++++++++++----------- + drivers/staging/rt2860/rt_linux.c | 110 ++++---- + drivers/staging/rt2860/rt_main_dev.c | 168 +++++++------- + drivers/staging/rt2860/rt_pci_rbus.c | 166 +++++++------- + drivers/staging/rt2860/rt_usb.c | 106 ++++---- + drivers/staging/rt2860/sta_ioctl.c | 368 ++++++++++++++-------------- + drivers/staging/rt2860/usb_main_dev.c | 76 +++--- + drivers/staging/rt2870/common/rtusb_bulk.c | 170 +++++++------- + drivers/staging/rt2870/common/rtusb_data.c | 10 +- + drivers/staging/rt2870/common/rtusb_io.c | 162 ++++++------ + 13 files changed, 937 insertions(+), 937 deletions(-) + +diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c +index eb3b214..4a62087 100644 +--- a/drivers/staging/rt2860/chips/rt3070.c ++++ b/drivers/staging/rt2860/chips/rt3070.c +@@ -41,18 +41,18 @@ + + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + + VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + { + INT i; + UCHAR RFValue; + +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value ++ /* Driver must read EEPROM to get RfIcType before initial RF registers */ ++ /* Initialize RF register to default value */ + if (IS_RT3070(pAd) || IS_RT3071(pAd)) { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers ++ /* Init RF calibration */ ++ /* Driver should toggle RF R30 bit7 before init RF registers */ + UINT32 RfReg = 0; + UINT32 data; + +@@ -63,38 +63,38 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + RfReg &= 0x7F; + RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + +- // Initialize RF register to default value ++ /* Initialize RF register to default value */ + for (i = 0; i < NUM_RF_REG_PARMS; i++) { + RT30xxWriteRFRegister(pAd, + RT30xx_RFRegTable[i].Register, + RT30xx_RFRegTable[i].Value); + } + +- // add by johnli ++ /* add by johnli */ + if (IS_RT3070(pAd)) { +- // +- // The DAC issue(LDO_CFG0) has been fixed in RT3070(F). +- // The voltage raising patch is no longer needed for RT3070(F) +- // ++ /* */ ++ /* The DAC issue(LDO_CFG0) has been fixed in RT3070(F). */ ++ /* The voltage raising patch is no longer needed for RT3070(F) */ ++ /* */ + if ((pAd->MACVersion & 0xffff) < 0x0201) { +- // Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate ++ /* Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate */ + RTUSBReadMACRegister(pAd, LDO_CFG0, &data); + data = ((data & 0xF0FFFFFF) | 0x0D000000); + RTUSBWriteMACRegister(pAd, LDO_CFG0, data); + } + } else if (IS_RT3071(pAd)) { +- // Driver should set RF R6 bit6 on before init RF registers ++ /* Driver should set RF R6 bit6 on before init RF registers */ + RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); + RfReg |= 0x40; + RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); + +- // init R31 ++ /* init R31 */ + RT30xxWriteRFRegister(pAd, RF_R31, 0x14); + +- // RT3071 version E has fixed this issue ++ /* RT3071 version E has fixed this issue */ + if ((pAd->NicConfig2.field.DACTestBit == 1) + && ((pAd->MACVersion & 0xffff) < 0x0211)) { +- // patch tx EVM issue temporarily ++ /* patch tx EVM issue temporarily */ + RTUSBReadMACRegister(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x0D000000); + RTUSBWriteMACRegister(pAd, LDO_CFG0, data); +@@ -104,35 +104,35 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); + } + +- // patch LNA_PE_G1 failed issue ++ /* patch LNA_PE_G1 failed issue */ + RTUSBReadMACRegister(pAd, GPIO_SWITCH, &data); + data &= ~(0x20); + RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data); + } +- //For RF filter Calibration ++ /*For RF filter Calibration */ + RTMPFilterCalibration(pAd); + +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() +- // +- // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +- // Raising RF voltage is no longer needed for RT3070(F) +- // ++ /* Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() */ ++ /* */ ++ /* TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). */ ++ /* Raising RF voltage is no longer needed for RT3070(F) */ ++ /* */ + if ((IS_RT3070(pAd)) && ((pAd->MACVersion & 0xffff) < 0x0201)) { + RT30xxWriteRFRegister(pAd, RF_R27, 0x3); + } else if ((IS_RT3071(pAd)) + && ((pAd->MACVersion & 0xffff) < 0x0211)) { + RT30xxWriteRFRegister(pAd, RF_R27, 0x3); + } +- // set led open drain enable ++ /* set led open drain enable */ + RTUSBReadMACRegister(pAd, OPT_14, &data); + data |= 0x01; + RTUSBWriteMACRegister(pAd, OPT_14, data); + +- // move from RT30xxLoadRFNormalModeSetup because it's needed for both RT3070 and RT3071 +- // TX_LO1_en, RF R17 register Bit 3 to 0 ++ /* move from RT30xxLoadRFNormalModeSetup because it's needed for both RT3070 and RT3071 */ ++ /* TX_LO1_en, RF R17 register Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R17, &RFValue); + RFValue &= (~0x08); +- // to fix rx long range issue ++ /* to fix rx long range issue */ + if (pAd->NicConfig2.field.ExternalLNAForG == 0) { + if ((IS_RT3071(pAd) + && ((pAd->MACVersion & 0xffff) >= 0x0211)) +@@ -140,22 +140,22 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + RFValue |= 0x20; + } + } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ /* set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h */ + if (pAd->TxMixerGain24G >= 1) { +- RFValue &= (~0x7); // clean bit [2:0] ++ RFValue &= (~0x7); /* clean bit [2:0] */ + RFValue |= pAd->TxMixerGain24G; + } + RT30xxWriteRFRegister(pAd, RF_R17, RFValue); + + if (IS_RT3071(pAd)) { +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + RT30xxLoadRFNormalModeSetup(pAd); + } else if (IS_RT3070(pAd)) { + /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */ +- // LDORF_VC, RF R27 register Bit 2 to 0 ++ /* LDORF_VC, RF R27 register Bit 2 to 0 */ + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +- // Raising RF voltage is no longer needed for RT3070(F) ++ /* TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). */ ++ /* Raising RF voltage is no longer needed for RT3070(F) */ + if ((pAd->MACVersion & 0xffff) < 0x0201) + RFValue = (RFValue & (~0x77)) | 0x3; + else +@@ -166,4 +166,4 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + } + + } +-#endif // RT3070 // ++#endif /* RT3070 // */ +diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c +index 1435294..cedacfb 100644 +--- a/drivers/staging/rt2860/chips/rt3090.c ++++ b/drivers/staging/rt2860/chips/rt3090.c +@@ -41,16 +41,16 @@ + + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + + VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + { + INT i; +- // Driver must read EEPROM to get RfIcType before initial RF registers +- // Initialize RF register to default value ++ /* Driver must read EEPROM to get RfIcType before initial RF registers */ ++ /* Initialize RF register to default value */ + if (IS_RT3090(pAd)) { +- // Init RF calibration +- // Driver should toggle RF R30 bit7 before init RF registers ++ /* Init RF calibration */ ++ /* Driver should toggle RF R30 bit7 before init RF registers */ + UINT32 RfReg = 0, data; + + RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg); +@@ -60,14 +60,14 @@ VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + RfReg &= 0x7F; + RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); + +- // init R24, R31 ++ /* init R24, R31 */ + RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); + RT30xxWriteRFRegister(pAd, RF_R31, 0x0F); + +- // RT309x version E has fixed this issue ++ /* RT309x version E has fixed this issue */ + if ((pAd->NicConfig2.field.DACTestBit == 1) + && ((pAd->MACVersion & 0xffff) < 0x0211)) { +- // patch tx EVM issue temporarily ++ /* patch tx EVM issue temporarily */ + RTMP_IO_READ32(pAd, LDO_CFG0, &data); + data = ((data & 0xE0FFFFFF) | 0x0D000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); +@@ -77,43 +77,43 @@ VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, LDO_CFG0, data); + } + +- // patch LNA_PE_G1 failed issue ++ /* patch LNA_PE_G1 failed issue */ + RTMP_IO_READ32(pAd, GPIO_SWITCH, &data); + data &= ~(0x20); + RTMP_IO_WRITE32(pAd, GPIO_SWITCH, data); + +- // Initialize RF register to default value ++ /* Initialize RF register to default value */ + for (i = 0; i < NUM_RF_REG_PARMS; i++) { + RT30xxWriteRFRegister(pAd, + RT30xx_RFRegTable[i].Register, + RT30xx_RFRegTable[i].Value); + } + +- // Driver should set RF R6 bit6 on before calibration ++ /* Driver should set RF R6 bit6 on before calibration */ + RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); + RfReg |= 0x40; + RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); + +- //For RF filter Calibration ++ /*For RF filter Calibration */ + RTMPFilterCalibration(pAd); + +- // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() ++ /* Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration() */ + if ((pAd->MACVersion & 0xffff) < 0x0211) + RT30xxWriteRFRegister(pAd, RF_R27, 0x3); + +- // set led open drain enable ++ /* set led open drain enable */ + RTMP_IO_READ32(pAd, OPT_14, &data); + data |= 0x01; + RTMP_IO_WRITE32(pAd, OPT_14, data); + +- // set default antenna as main ++ /* set default antenna as main */ + if (pAd->RfIcType == RFIC_3020) + AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); + +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + RT30xxLoadRFNormalModeSetup(pAd); + } + + } + +-#endif // RT3090 // ++#endif /* RT3090 // */ +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index 940f731..b03d94d 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -39,13 +39,13 @@ + + #ifndef RTMP_RF_RW_SUPPORT + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + + #include "../rt_config.h" + +-// +-// RF register initialization set +-// ++/* */ ++/* RF register initialization set */ ++/* */ + REG_PAIR RT30xx_RFRegTable[] = { + {RF_R04, 0x40} + , +@@ -89,12 +89,12 @@ REG_PAIR RT30xx_RFRegTable[] = { + + UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); + +-// Antenna divesity use GPIO3 and EESK pin for control +-// Antenna and EEPROM access are both using EESK pin, +-// Therefor we should avoid accessing EESK at the same time +-// Then restore antenna after EEPROM access +-// The original name of this function is AsicSetRxAnt(), now change to +-//VOID AsicSetRxAnt( ++/* Antenna divesity use GPIO3 and EESK pin for control */ ++/* Antenna and EEPROM access are both using EESK pin, */ ++/* Therefor we should avoid accessing EESK at the same time */ ++/* Then restore antenna after EEPROM access */ ++/* The original name of this function is AsicSetRxAnt(), now change to */ ++/*VOID AsicSetRxAnt( */ + VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + { + UINT32 Value; +@@ -109,16 +109,16 @@ VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { + return; + } +- // the antenna selection is through firmware and MAC register(GPIO3) ++ /* the antenna selection is through firmware and MAC register(GPIO3) */ + if (Ant == 0) { +- // Main antenna ++ /* Main antenna */ + #ifdef RTMP_MAC_PCI + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + x |= (EESK); + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + #else + AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x1, 0x0); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); + Value &= ~(0x0808); +@@ -126,14 +126,14 @@ VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("AsicSetRxAnt, switch to main antenna\n")); + } else { +- // Aux antenna ++ /* Aux antenna */ + #ifdef RTMP_MAC_PCI + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + x &= ~(EESK); + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + #else + AsicSendCommandToMcu(pAd, 0x73, 0xFF, 0x0, 0x0); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value); + Value &= ~(0x0808); + Value |= 0x08; +@@ -165,14 +165,14 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; + UCHAR RF_R24_Value = 0; + +- // Give bbp filter initial value ++ /* Give bbp filter initial value */ + pAd->Mlme.CaliBW20RfR24 = 0x1F; +- pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40 ++ pAd->Mlme.CaliBW40RfR24 = 0x2F; /*Bit[5] must be 1 for BW 40 */ + + do { +- if (loop == 1) //BandWidth = 40 MHz ++ if (loop == 1) /*BandWidth = 40 MHz */ + { +- // Write 0x27 to RF_R24 to program filter ++ /* Write 0x27 to RF_R24 to program filter */ + RF_R24_Value = 0x27; + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +@@ -180,19 +180,19 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + else + FilterTarget = 0x19; + +- // when calibrate BW40, BBP mask must set to BW40. ++ /* when calibrate BW40, BBP mask must set to BW40. */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + BBPValue |= (0x10); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + +- // set to BW40 ++ /* set to BW40 */ + RT30xxReadRFRegister(pAd, RF_R31, &value); + value |= 0x20; + RT30xxWriteRFRegister(pAd, RF_R31, value); +- } else //BandWidth = 20 MHz ++ } else /*BandWidth = 20 MHz */ + { +- // Write 0x07 to RF_R24 to program filter ++ /* Write 0x07 to RF_R24 to program filter */ + RF_R24_Value = 0x07; + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +@@ -200,39 +200,39 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + else + FilterTarget = 0x16; + +- // set to BW20 ++ /* set to BW20 */ + RT30xxReadRFRegister(pAd, RF_R31, &value); + value &= (~0x20); + RT30xxWriteRFRegister(pAd, RF_R31, value); + } + +- // Write 0x01 to RF_R22 to enable baseband loopback mode ++ /* Write 0x01 to RF_R22 to enable baseband loopback mode */ + RT30xxReadRFRegister(pAd, RF_R22, &value); + value |= 0x01; + RT30xxWriteRFRegister(pAd, RF_R22, value); + +- // Write 0x00 to BBP_R24 to set power & frequency of passband test tone ++ /* Write 0x00 to BBP_R24 to set power & frequency of passband test tone */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); + + do { +- // Write 0x90 to BBP_R25 to transmit test tone ++ /* Write 0x90 to BBP_R25 to transmit test tone */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); + + RTMPusecDelay(1000); +- // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] ++ /* Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0] */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); + R55x = value & 0xFF; + + } while ((ReTry++ < 100) && (R55x == 0)); + +- // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone ++ /* Write 0x06 to BBP_R24 to set power & frequency of stopband test tone */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06); + + while (TRUE) { +- // Write 0x90 to BBP_R25 to transmit test tone ++ /* Write 0x90 to BBP_R25 to transmit test tone */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90); + +- //We need to wait for calibration ++ /*We need to wait for calibration */ + RTMPusecDelay(1000); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value); + value &= 0xFF; +@@ -245,27 +245,27 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + break; + } + +- // prevent infinite loop cause driver hang. ++ /* prevent infinite loop cause driver hang. */ + if (loopcnt++ > 100) { + DBGPRINT(RT_DEBUG_ERROR, + ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", + loopcnt)); + break; + } +- // Write RF_R24 to program filter ++ /* Write RF_R24 to program filter */ + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + } + + if (count > 0) { + RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0)); + } +- // Store for future usage ++ /* Store for future usage */ + if (loopcnt < 100) { + if (loop++ == 0) { +- //BandWidth = 20 MHz ++ /*BandWidth = 20 MHz */ + pAd->Mlme.CaliBW20RfR24 = (UCHAR) RF_R24_Value; + } else { +- //BandWidth = 40 MHz ++ /*BandWidth = 40 MHz */ + pAd->Mlme.CaliBW40RfR24 = (UCHAR) RF_R24_Value; + break; + } +@@ -274,20 +274,20 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + + RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); + +- // reset count ++ /* reset count */ + count = 0; + } while (TRUE); + +- // +- // Set back to initial state +- // ++ /* */ ++ /* Set back to initial state */ ++ /* */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0); + + RT30xxReadRFRegister(pAd, RF_R22, &value); + value &= ~(0x01); + RT30xxWriteRFRegister(pAd, RF_R22, value); + +- // set BBP back to BW20 ++ /* set BBP back to BW20 */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +@@ -297,7 +297,7 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24)); + } + +-// add by johnli, RF power sequence setup ++/* add by johnli, RF power sequence setup */ + /* + ========================================================================== + Description: +@@ -310,12 +310,12 @@ VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + { + UCHAR RFValue; + +- // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 ++ /* RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 */ + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); + RFValue = (RFValue & (~0x0C)) | 0x31; + RT30xxWriteRFRegister(pAd, RF_R01, RFValue); + +- // TX_LO2_en, RF R15 register Bit 3 to 0 ++ /* TX_LO2_en, RF R15 register Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R15, &RFValue); + RFValue &= (~0x08); + RT30xxWriteRFRegister(pAd, RF_R15, RFValue); +@@ -338,22 +338,22 @@ VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + RT30xxWriteRFRegister(pAd, RF_R17, RFValue); + */ + +- // RX_LO1_en, RF R20 register Bit 3 to 0 ++ /* RX_LO1_en, RF R20 register Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R20, &RFValue); + RFValue &= (~0x08); + RT30xxWriteRFRegister(pAd, RF_R20, RFValue); + +- // RX_LO2_en, RF R21 register Bit 3 to 0 ++ /* RX_LO2_en, RF R21 register Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R21, &RFValue); + RFValue &= (~0x08); + RT30xxWriteRFRegister(pAd, RF_R21, RFValue); + + /* add by johnli, reset RF_R27 when interface down & up to fix throughput problem */ +- // LDORF_VC, RF R27 register Bit 2 to 0 ++ /* LDORF_VC, RF R27 register Bit 2 to 0 */ + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); +- // TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). +- // Raising RF voltage is no longer needed for RT3070(F) +- if (IS_RT3090(pAd)) // RT309x and RT3071/72 ++ /* TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). */ ++ /* Raising RF voltage is no longer needed for RT3070(F) */ ++ if (IS_RT3090(pAd)) /* RT309x and RT3071/72 */ + { + if ((pAd->MACVersion & 0xffff) < 0x0211) + RFValue = (RFValue & (~0x77)) | 0x3; +@@ -379,35 +379,35 @@ VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + { +- // RF_BLOCK_en. RF R1 register Bit 0 to 0 ++ /* RF_BLOCK_en. RF R1 register Bit 0 to 0 */ + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); + RFValue &= (~0x01); + RT30xxWriteRFRegister(pAd, RF_R01, RFValue); + +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 ++ /* VCO_IC, RF R7 register Bit 4 & Bit 5 to 0 */ + RT30xxReadRFRegister(pAd, RF_R07, &RFValue); + RFValue &= (~0x30); + RT30xxWriteRFRegister(pAd, RF_R07, RFValue); + +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 ++ /* Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R09, &RFValue); + RFValue &= (~0x0E); + RT30xxWriteRFRegister(pAd, RF_R09, RFValue); + +- // RX_CTB_en, RF R21 register Bit 7 to 0 ++ /* RX_CTB_en, RF R21 register Bit 7 to 0 */ + RT30xxReadRFRegister(pAd, RF_R21, &RFValue); + RFValue &= (~0x80); + RT30xxWriteRFRegister(pAd, RF_R21, RFValue); + } + +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 ++ if (IS_RT3090(pAd) || /* IS_RT3090 including RT309x and RT3071/72 */ + IS_RT3572(pAd) || + (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) { + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + { + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); + RFValue |= 0x77; +@@ -435,36 +435,36 @@ VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + { +- // RF_BLOCK_en, RF R1 register Bit 0 to 1 ++ /* RF_BLOCK_en, RF R1 register Bit 0 to 1 */ + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); + RFValue |= 0x01; + RT30xxWriteRFRegister(pAd, RF_R01, RFValue); + +- // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 ++ /* VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 */ + RT30xxReadRFRegister(pAd, RF_R07, &RFValue); + RFValue |= 0x30; + RT30xxWriteRFRegister(pAd, RF_R07, RFValue); + +- // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 ++ /* Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 */ + RT30xxReadRFRegister(pAd, RF_R09, &RFValue); + RFValue |= 0x0E; + RT30xxWriteRFRegister(pAd, RF_R09, RFValue); + +- // RX_CTB_en, RF R21 register Bit 7 to 1 ++ /* RX_CTB_en, RF R21 register Bit 7 to 1 */ + RT30xxReadRFRegister(pAd, RF_R21, &RFValue); + RFValue |= 0x80; + RT30xxWriteRFRegister(pAd, RF_R21, RFValue); + } + +- if (IS_RT3090(pAd) || // IS_RT3090 including RT309x and RT3071/72 ++ if (IS_RT3090(pAd) || /* IS_RT3090 including RT309x and RT3071/72 */ + IS_RT3572(pAd) || + IS_RT3390(pAd) || + (IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) { + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + { + RT30xxReadRFRegister(pAd, RF_R27, &RFValue); + if ((pAd->MACVersion & 0xffff) < 0x0211) +@@ -473,10 +473,10 @@ VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + RFValue = (RFValue & (~0x77)); + RT30xxWriteRFRegister(pAd, RF_R27, RFValue); + } +- // RT3071 version E has fixed this issue ++ /* RT3071 version E has fixed this issue */ + if ((pAd->NicConfig2.field.DACTestBit == 1) + && ((pAd->MACVersion & 0xffff) < 0x0211)) { +- // patch tx EVM issue temporarily ++ /* patch tx EVM issue temporarily */ + RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue); + MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000); + RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue); +@@ -491,22 +491,22 @@ VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + RT30xxWriteRFRegister(pAd, RF_R08, 0x80); + } + +-// end johnli ++/* end johnli */ + + VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd) + { + UINT32 TxPinCfg = 0x00050F0F; + +- // +- // Turn off LNA_PE or TRSW_POL +- // ++ /* */ ++ /* Turn off LNA_PE or TRSW_POL */ ++ /* */ + if (IS_RT3070(pAd) || IS_RT3071(pAd) || IS_RT3572(pAd)) { + if ((IS_RT3071(pAd) || IS_RT3572(pAd)) + #ifdef RTMP_EFUSE_SUPPORT + && (pAd->bUseEfuse) +-#endif // RTMP_EFUSE_SUPPORT // ++#endif /* RTMP_EFUSE_SUPPORT // */ + ) { +- TxPinCfg &= 0xFFFBF0F0; // bit18 off ++ TxPinCfg &= 0xFFFBF0F0; /* bit18 off */ + } else { + TxPinCfg &= 0xFFFFF0F0; + } +@@ -515,4 +515,4 @@ VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd) + } + } + +-#endif // RT30xx // ++#endif /* RT30xx // */ +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 2a22e45..76c71f1 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -38,17 +38,17 @@ + #include "rt_config.h" + #include + +-// Following information will be show when you run 'modinfo' +-// *** If you have a solution for the bug in current version of driver, please mail to me. +-// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** ++/* Following information will be show when you run 'modinfo' */ ++/* *** If you have a solution for the bug in current version of driver, please mail to me. */ ++/* Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** */ + MODULE_AUTHOR("Jett Chen "); + MODULE_DESCRIPTION("RT2860/RT3090 Wireless Lan Linux Driver"); + MODULE_LICENSE("GPL"); + MODULE_ALIAS("rt3090sta"); + +-// +-// Function declarations +-// ++/* */ ++/* Function declarations */ ++/* */ + extern int rt28xx_close(IN struct net_device *net_dev); + extern int rt28xx_open(struct net_device *net_dev); + +@@ -64,14 +64,14 @@ static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, + #ifdef CONFIG_PM + static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); + static int rt2860_resume(struct pci_dev *pci_dev); +-#endif // CONFIG_PM // ++#endif /* CONFIG_PM // */ + +-// +-// Ralink PCI device table, include all supported chipsets +-// ++/* */ ++/* Ralink PCI device table, include all supported chipsets */ ++/* */ + static struct pci_device_id rt2860_pci_tbl[] __devinitdata = { + #ifdef RT2860 +- {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, //RT28602.4G ++ {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCI_DEVICE_ID)}, /*RT28602.4G */ + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2860_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2760_PCI_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC2790_PCIe_DEVICE_ID)}, +@@ -88,13 +88,13 @@ static struct pci_device_id rt2860_pci_tbl[] __devinitdata = { + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3090_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3091_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3092_PCIe_DEVICE_ID)}, +-#endif // RT3090 // ++#endif /* RT3090 // */ + #ifdef RT3390 + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3390_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3391_PCIe_DEVICE_ID)}, + {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC3392_PCIe_DEVICE_ID)}, +-#endif // RT3390 // +- {0,} // terminate list ++#endif /* RT3390 // */ ++ {0,} /* terminate list */ + }; + + MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); +@@ -102,9 +102,9 @@ MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl); + MODULE_VERSION(STA_DRIVER_VERSION); + #endif + +-// +-// Our PCI driver structure +-// ++/* */ ++/* Our PCI driver structure */ ++/* */ + static struct pci_driver rt2860_driver = { + name: "rt2860", + id_table:rt2860_pci_tbl, +@@ -125,8 +125,8 @@ resume:rt2860_resume, + + VOID RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { +- // clear PS packets +- // clear TxSw packets ++ /* clear PS packets */ ++ /* clear TxSw packets */ + } + + static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) +@@ -146,33 +146,33 @@ static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + /* and 1 suspend/resume function for 1 module, not for each interface */ + /* so Linux will call suspend/resume function once */ + if (VIRTUAL_IF_NUM(pAd) > 0) { +- // avoid users do suspend after interface is down ++ /* avoid users do suspend after interface is down */ + +- // stop interface ++ /* stop interface */ + netif_carrier_off(net_dev); + netif_stop_queue(net_dev); + +- // mark device as removed from system and therefore no longer available ++ /* mark device as removed from system and therefore no longer available */ + netif_device_detach(net_dev); + +- // mark halt flag ++ /* mark halt flag */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +- // take down the device ++ /* take down the device */ + rt28xx_close((PNET_DEV) net_dev); + + RT_MOD_DEC_USE_COUNT(); + } + } + +- // reference to http://vovo2000.com/type-lab/linux/kernel-api/linux-kernel-api.html +- // enable device to generate PME# when suspended +- // pci_choose_state(): Choose the power state of a PCI device to be suspended ++ /* reference to http://vovo2000.com/type-lab/linux/kernel-api/linux-kernel-api.html */ ++ /* enable device to generate PME# when suspended */ ++ /* pci_choose_state(): Choose the power state of a PCI device to be suspended */ + retval = pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), 1); +- // save the PCI configuration space of a device before suspending ++ /* save the PCI configuration space of a device before suspending */ + pci_save_state(pci_dev); +- // disable PCI device after use ++ /* disable PCI device after use */ + pci_disable_device(pci_dev); + + retval = pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); +@@ -187,22 +187,22 @@ static int rt2860_resume(struct pci_dev *pci_dev) + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; + INT32 retval; + +- // set the power state of a PCI device +- // PCI has 4 power states, DO (normal) ~ D3(less power) +- // in include/linux/pci.h, you can find that +- // #define PCI_D0 ((pci_power_t __force) 0) +- // #define PCI_D1 ((pci_power_t __force) 1) +- // #define PCI_D2 ((pci_power_t __force) 2) +- // #define PCI_D3hot ((pci_power_t __force) 3) +- // #define PCI_D3cold ((pci_power_t __force) 4) +- // #define PCI_UNKNOWN ((pci_power_t __force) 5) +- // #define PCI_POWER_ERROR ((pci_power_t __force) -1) ++ /* set the power state of a PCI device */ ++ /* PCI has 4 power states, DO (normal) ~ D3(less power) */ ++ /* in include/linux/pci.h, you can find that */ ++ /* #define PCI_D0 ((pci_power_t __force) 0) */ ++ /* #define PCI_D1 ((pci_power_t __force) 1) */ ++ /* #define PCI_D2 ((pci_power_t __force) 2) */ ++ /* #define PCI_D3hot ((pci_power_t __force) 3) */ ++ /* #define PCI_D3cold ((pci_power_t __force) 4) */ ++ /* #define PCI_UNKNOWN ((pci_power_t __force) 5) */ ++ /* #define PCI_POWER_ERROR ((pci_power_t __force) -1) */ + retval = pci_set_power_state(pci_dev, PCI_D0); + +- // restore the saved state of a PCI device ++ /* restore the saved state of a PCI device */ + pci_restore_state(pci_dev); + +- // initialize device before it's used by a driver ++ /* initialize device before it's used by a driver */ + if (pci_enable_device(pci_dev)) { + printk("pci enable fail!\n"); + return 0; +@@ -220,16 +220,16 @@ static int rt2860_resume(struct pci_dev *pci_dev) + /* and 1 suspend/resume function for 1 module, not for each interface */ + /* so Linux will call suspend/resume function once */ + if (VIRTUAL_IF_NUM(pAd) > 0) { +- // mark device as attached from system and restart if needed ++ /* mark device as attached from system and restart if needed */ + netif_device_attach(net_dev); + + if (rt28xx_open((PNET_DEV) net_dev) != 0) { +- // open fail ++ /* open fail */ + DBGPRINT(RT_DEBUG_TRACE, + ("<=== rt2860_resume()\n")); + return 0; + } +- // increase MODULE use count ++ /* increase MODULE use count */ + RT_MOD_INC_USE_COUNT(); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +@@ -244,16 +244,16 @@ static int rt2860_resume(struct pci_dev *pci_dev) + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_resume()\n")); + return 0; + } +-#endif // CONFIG_PM // ++#endif /* CONFIG_PM // */ + + static INT __init rt2860_init_module(VOID) + { + return pci_register_driver(&rt2860_driver); + } + +-// +-// Driver module unload function +-// ++/* */ ++/* Driver module unload function */ ++/* */ + static VOID __exit rt2860_cleanup_module(VOID) + { + pci_unregister_driver(&rt2860_driver); +@@ -262,9 +262,9 @@ static VOID __exit rt2860_cleanup_module(VOID) + module_init(rt2860_init_module); + module_exit(rt2860_cleanup_module); + +-// +-// PCI device probe & initialization function +-// ++/* */ ++/* PCI device probe & initialization function */ ++/* */ + static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + IN const struct pci_device_id *pci_id) + { +@@ -278,8 +278,8 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); + +-//PCIDevInit============================================== +- // wake up and enable device ++/*PCIDevInit============================================== */ ++ /* wake up and enable device */ + if ((rv = pci_enable_device(pci_dev)) != 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("Enable PCI device failed, errno=%d!\n", rv)); +@@ -293,7 +293,7 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + ("Request PCI resource failed, errno=%d!\n", rv)); + goto err_out; + } +- // map physical address to virtual address for accessing register ++ /* map physical address to virtual address for accessing register */ + csr_addr = + (unsigned long)ioremap(pci_resource_start(pci_dev, 0), + pci_resource_len(pci_dev, 0)); +@@ -310,11 +310,11 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + (ULONG) csr_addr, pci_dev->irq)); + } + +- // Set DMA master ++ /* Set DMA master */ + pci_set_master(pci_dev); + +-//RtmpDevInit============================================== +- // Allocate RTMP_ADAPTER adapter structure ++/*RtmpDevInit============================================== */ ++ /* Allocate RTMP_ADAPTER adapter structure */ + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); + if (handle == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -325,25 +325,25 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + + ((POS_COOKIE) handle)->pci_dev = pci_dev; + +- rv = RTMPAllocAdapterBlock(handle, &pAd); //shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" ++ rv = RTMPAllocAdapterBlock(handle, &pAd); /*shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" */ + if (rv != NDIS_STATUS_SUCCESS) + goto err_out_iounmap; +- // Here are the RTMP_ADAPTER structure with pci-bus specific parameters. ++ /* Here are the RTMP_ADAPTER structure with pci-bus specific parameters. */ + pAd->CSRBaseAddress = (PUCHAR) csr_addr; + DBGPRINT(RT_DEBUG_ERROR, + ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", + (ULONG) pAd->CSRBaseAddress, csr_addr)); + RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_PCI); + +-//NetDevInit============================================== ++/*NetDevInit============================================== */ + net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); + if (net_dev == NULL) + goto err_out_free_radev; + +- // Here are the net_device structure with pci-bus specific parameters. +- net_dev->irq = pci_dev->irq; // Interrupt IRQ number +- net_dev->base_addr = csr_addr; // Save CSR virtual address and irq to device structure +- pci_set_drvdata(pci_dev, net_dev); // Set driver data ++ /* Here are the net_device structure with pci-bus specific parameters. */ ++ net_dev->irq = pci_dev->irq; /* Interrupt IRQ number */ ++ net_dev->base_addr = csr_addr; /* Save CSR virtual address and irq to device structure */ ++ pci_set_drvdata(pci_dev, net_dev); /* Set driver data */ + + /* for supporting Network Manager */ + /* Set the sysfs physical device reference for the network logical device +@@ -351,8 +351,8 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + */ + SET_NETDEV_DEV(net_dev, &(pci_dev->dev)); + +-//All done, it's time to register the net device to linux kernel. +- // Register this device ++/*All done, it's time to register the net device to linux kernel. */ ++ /* Register this device */ + rv = RtmpOSNetDevAttach(net_dev, &netDevHook); + if (rv) + goto err_out_free_netdev; +@@ -362,7 +362,7 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2860_probe\n")); + +- return 0; // probe ok ++ return 0; /* probe ok */ + + /* --------------------------- ERROR HANDLE --------------------------- */ + err_out_free_netdev: +@@ -393,39 +393,39 @@ static VOID __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + { + PNET_DEV net_dev = pci_get_drvdata(pci_dev); + RTMP_ADAPTER *pAd = NULL; +- ULONG csr_addr = net_dev->base_addr; // pAd->CSRBaseAddress; ++ ULONG csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_remove_one\n")); + + if (pAd != NULL) { +- // Unregister/Free all allocated net_device. ++ /* Unregister/Free all allocated net_device. */ + RtmpPhyNetDevExit(pAd, net_dev); + +- // Unmap CSR base address ++ /* Unmap CSR base address */ + iounmap((char *)(csr_addr)); + +- // release memory region ++ /* release memory region */ + release_mem_region(pci_resource_start(pci_dev, 0), + pci_resource_len(pci_dev, 0)); + +- // Free RTMP_ADAPTER related structures. ++ /* Free RTMP_ADAPTER related structures. */ + RtmpRaDevCtrlExit(pAd); + + } else { +- // Unregister network device ++ /* Unregister network device */ + RtmpOSNetDevDetach(net_dev); + +- // Unmap CSR base address ++ /* Unmap CSR base address */ + iounmap((char *)(net_dev->base_addr)); + +- // release memory region ++ /* release memory region */ + release_mem_region(pci_resource_start(pci_dev, 0), + pci_resource_len(pci_dev, 0)); + } + +- // Free the root net_device ++ /* Free the root net_device */ + RtmpOSNetDevFree(net_dev); + + } +@@ -475,7 +475,7 @@ static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + (device_id == NIC3090_PCIe_DEVICE_ID) || + (device_id == NIC3091_PCIe_DEVICE_ID) || + (device_id == NIC3092_PCIe_DEVICE_ID) || +-#endif // RT3090 // ++#endif /* RT3090 // */ + 0) { + UINT32 MacCsr0 = 0, Index = 0; + do { +@@ -487,8 +487,8 @@ static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + RTMPusecDelay(10); + } while (Index++ < 100); + +- // Support advanced power save after 2892/2790. +- // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). ++ /* Support advanced power save after 2892/2790. */ ++ /* MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). */ + if ((MacCsr0 & 0xffff0000) != 0x28600000) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); + } +@@ -509,7 +509,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + return; + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); +- // Init EEPROM, and save settings ++ /* Init EEPROM, and save settings */ + if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); + pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff; +@@ -541,16 +541,16 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + PCIePowerSaveLevel &= 0xff; + PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; + switch (PCIePowerSaveLevel) { +- case 0: // Only support L0 ++ case 0: /* Only support L0 */ + pAd->LnkCtrlBitMask = 0; + break; +- case 1: // Only enable L0s ++ case 1: /* Only enable L0s */ + pAd->LnkCtrlBitMask = 1; + break; +- case 2: // enable L1, L0s ++ case 2: /* enable L1, L0s */ + pAd->LnkCtrlBitMask = 3; + break; +- case 3: // sync with host clk and enable L1, L0s ++ case 3: /* sync with host clk and enable L1, L0s */ + pAd->LnkCtrlBitMask = 0x103; + break; + } +@@ -580,7 +580,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + } else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { + UCHAR LinkCtrlSetting = 0; + +- // Check 3090E special setting chip. ++ /* Check 3090E special setting chip. */ + RT28xx_EEPROM_READ16(pAd, 0x24, data2); + if ((data2 == 0x9280) && ((pAd->MACVersion & 0xffff) == 0x0211)) { + pAd->b3090ESpecialChip = TRUE; +@@ -588,37 +588,37 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + } + + RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); +- //enable WAKE_PCIE function, which forces to enable PCIE clock when mpu interrupt asserting. +- //Force PCIE 125MHz CLK to toggle ++ /*enable WAKE_PCIE function, which forces to enable PCIE clock when mpu interrupt asserting. */ ++ /*Force PCIE 125MHz CLK to toggle */ + MacValue |= 0x402; + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); + DBGPRINT_RAW(RT_DEBUG_ERROR, + (" AUX_CTRL = 0x%32x\n", MacValue)); + +- // for RT30xx F and after, PCIe infterface, and for power solution 3 ++ /* for RT30xx F and after, PCIe infterface, and for power solution 3 */ + if ((IS_VERSION_AFTER_F(pAd)) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode >= 2) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode <= 3)) { + RTMP_IO_READ32(pAd, AUX_CTRL, &MacValue); + DBGPRINT_RAW(RT_DEBUG_ERROR, + (" Read AUX_CTRL = 0x%x\n", MacValue)); +- // turn on bit 12. +- //enable 32KHz clock mode for power saving ++ /* turn on bit 12. */ ++ /*enable 32KHz clock mode for power saving */ + MacValue |= 0x1000; + if (MacValue != 0xffffffff) { + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacValue); + DBGPRINT_RAW(RT_DEBUG_ERROR, + (" Write AUX_CTRL = 0x%x\n", + MacValue)); +- // 1. if use PCIePowerSetting is 2 or 3, need to program OSC_CTRL to 0x3ff11. ++ /* 1. if use PCIePowerSetting is 2 or 3, need to program OSC_CTRL to 0x3ff11. */ + MacValue = 0x3ff11; + RTMP_IO_WRITE32(pAd, OSC_CTRL, MacValue); + DBGPRINT_RAW(RT_DEBUG_ERROR, + (" OSC_CTRL = 0x%x\n", MacValue)); +- // 2. Write PCI register Clk ref bit ++ /* 2. Write PCI register Clk ref bit */ + RTMPrt3xSetPCIePowerLinkCtrl(pAd); + } else { +- // Error read Aux_Ctrl value. Force to use solution 1 ++ /* Error read Aux_Ctrl value. Force to use solution 1 */ + DBGPRINT(RT_DEBUG_ERROR, + (" Error Value in AUX_CTRL = 0x%x\n", + MacValue)); +@@ -627,20 +627,20 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + (" Force to use power solution1 \n")); + } + } +- // 1. read setting from inf file. ++ /* 1. read setting from inf file. */ + + PCIePowerSaveLevel = + (USHORT) pAd->StaCfg.PSControl.field.rt30xxPowerMode; + DBGPRINT(RT_DEBUG_ERROR, + ("====> rt30xx Read PowerLevelMode = 0x%x.\n", + PCIePowerSaveLevel)); +- // 2. Check EnableNewPS. ++ /* 2. Check EnableNewPS. */ + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + PCIePowerSaveLevel = 1; + + if (IS_VERSION_BEFORE_F(pAd) + && (pAd->b3090ESpecialChip == FALSE)) { +- // Chip Version E only allow 1, So force set 1. ++ /* Chip Version E only allow 1, So force set 1. */ + PCIePowerSaveLevel &= 0x1; + pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; + DBGPRINT(RT_DEBUG_TRACE, +@@ -650,7 +650,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x83, 0xff, + (UCHAR) PCIePowerSaveLevel, 0x00); + } else { +- // Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. ++ /* Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. */ + if (! + ((PCIePowerSaveLevel == 1) + || (PCIePowerSaveLevel == 3))) +@@ -659,8 +659,8 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + ("====> rt30xx F Write 0x83 Command = 0x%x.\n", + PCIePowerSaveLevel)); + pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; +- // for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in +- // PCI Configuration Space. Because firmware can't read PCI Configuration Space ++ /* for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in */ ++ /* PCI Configuration Space. Because firmware can't read PCI Configuration Space */ + if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) + && (pAd->Rt3xxHostLinkCtrl & 0x2)) { + LinkCtrlSetting = 1; +@@ -673,11 +673,11 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + LinkCtrlSetting); + } + } +- // Find Ralink PCIe Device's Express Capability Offset ++ /* Find Ralink PCIe Device's Express Capability Offset */ + pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); + + if (pos != 0) { +- // Ralink PCIe Device's Link Control Register Offset ++ /* Ralink PCIe Device's Link Control Register Offset */ + pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, + ®16); +@@ -698,7 +698,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n", + pos + PCI_EXP_LNKCTL, Configuration)); + } +-#endif // RT2860 // ++#endif /* RT2860 // */ + + RTMPFindHostPCIDev(pAd); + if (pObj->parent_pci_dev) { +@@ -711,14 +711,14 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + bFindIntel = TRUE; + RTMP_SET_PSFLAG(pAd, fRTMP_PS_TOGGLE_L1); + } +- // Find PCI-to-PCI Bridge Express Capability Offset ++ /* Find PCI-to-PCI Bridge Express Capability Offset */ + pos = + pci_find_capability(pObj->parent_pci_dev, + PCI_CAP_ID_EXP); + + if (pos != 0) { + BOOLEAN bChange = FALSE; +- // PCI-to-PCI Bridge Link Control Register Offset ++ /* PCI-to-PCI Bridge Link Control Register Offset */ + pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + pci_read_config_word(pObj->parent_pci_dev, + pAd->HostLnkCtrlOffset, +@@ -739,7 +739,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + case NIC2790_PCIe_DEVICE_ID: + bChange = TRUE; + break; +-#endif // RT2860 // ++#endif /* RT2860 // */ + #ifdef RT3090 + case NIC3090_PCIe_DEVICE_ID: + case NIC3091_PCIe_DEVICE_ID: +@@ -747,7 +747,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + if (bFindIntel == FALSE) + bChange = TRUE; + break; +-#endif // RT3090 // ++#endif /* RT3090 // */ + default: + break; + } +@@ -782,14 +782,14 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + if (bFindIntel == FALSE) { + DBGPRINT(RT_DEBUG_TRACE, + ("Doesn't find Intel PCI host controller. \n")); +- // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff ++ /* Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff */ + pAd->PCIePowerSaveLevel = 0xff; + if ((pAd->RLnkCtrlOffset != 0) + #ifdef RT3090 + && ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) +-#endif // RT3090 // ++#endif /* RT3090 // */ + ) { + pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, + ®16); +@@ -871,20 +871,20 @@ VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; +-#endif // RT2860 // +- // Check PSControl Configuration ++#endif /* RT2860 // */ ++ /* Check PSControl Configuration */ + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + return; + +- //3090 will not execute the following codes. +- // Check interface : If not PCIe interface, return. ++ /*3090 will not execute the following codes. */ ++ /* Check interface : If not PCIe interface, return. */ + + #ifdef RT3090 + if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) + return; +-#endif // RT3090 // ++#endif /* RT3090 // */ + + DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __func__)); + PCIePowerSaveLevel = pAd->PCIePowerSaveLevel; +@@ -898,7 +898,7 @@ VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + Configuration); + if ((Configuration != 0) && (Configuration != 0xFFFF)) { + Configuration &= 0xfefc; +- // If call from interface down, restore to orginial setting. ++ /* If call from interface down, restore to orginial setting. */ + if (Level == RESTORE_CLOSE) { + Configuration |= pAd->HostLnkCtrlConfiguration; + } else +@@ -920,7 +920,7 @@ VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + Configuration); + if ((Configuration != 0) && (Configuration != 0xFFFF)) { + Configuration &= 0xfefc; +- // If call from interface down, restore to orginial setting. ++ /* If call from interface down, restore to orginial setting. */ + if (Level == RESTORE_CLOSE) + Configuration |= pAd->RLnkCtrlConfiguration; + else +@@ -965,20 +965,20 @@ VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + if (!((pObj->DeviceID == NIC2860_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC2790_PCIe_DEVICE_ID))) + return; +-#endif // RT2860 // +- // Check PSControl Configuration ++#endif /* RT2860 // */ ++ /* Check PSControl Configuration */ + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + return; + +- // Check interface : If not PCIe interface, return. +- //Block 3090 to enter the following function ++ /* Check interface : If not PCIe interface, return. */ ++ /*Block 3090 to enter the following function */ + + #ifdef RT3090 + if ((pObj->DeviceID == NIC3090_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3091_PCIe_DEVICE_ID) + || (pObj->DeviceID == NIC3092_PCIe_DEVICE_ID)) + return; +-#endif // RT3090 // ++#endif /* RT3090 // */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP)) { + DBGPRINT(RT_DEBUG_INFO, + ("RTMPPCIePowerLinkCtrl return on fRTMP_PS_CAN_GO_SLEEP flag\n")); +@@ -993,27 +993,27 @@ VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + } + PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; + +- // Skip non-exist deice right away ++ /* Skip non-exist deice right away */ + if (pObj->parent_pci_dev && (pAd->HostLnkCtrlOffset != 0)) { + PCI_REG_READ_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, + Configuration); + switch (PCIePowerSaveLevel) { + case 0: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 */ + Configuration &= 0xfefc; + break; + case 1: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 */ + Configuration &= 0xfefc; + Configuration |= 0x1; + break; + case 2: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 */ + Configuration &= 0xfefc; + Configuration |= 0x3; + break; + case 3: +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 */ + Configuration &= 0xfefc; + Configuration |= 0x103; + break; +@@ -1026,7 +1026,7 @@ VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + } + + if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0)) { +- // first 2892 chip not allow to frequently set mode 3. will cause hang problem. ++ /* first 2892 chip not allow to frequently set mode 3. will cause hang problem. */ + if (PCIePowerSaveLevel > Max) + PCIePowerSaveLevel = Max; + +@@ -1034,25 +1034,25 @@ VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + Configuration); + switch (PCIePowerSaveLevel) { + case 0: +- // No PCI power safe +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . ++ /* No PCI power safe */ ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 . */ + Configuration &= 0xfefc; + break; + case 1: +- // L0 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . ++ /* L0 */ ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 . */ + Configuration &= 0xfefc; + Configuration |= 0x1; + break; + case 2: +- // L0 and L1 +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 ++ /* L0 and L1 */ ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 */ + Configuration &= 0xfefc; + Configuration |= 0x3; + break; + case 3: +- // L0 , L1 and clock management. +- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 ++ /* L0 , L1 and clock management. */ ++ /* Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1 */ + Configuration &= 0xfefc; + Configuration |= 0x103; + pAd->bPCIclkOff = TRUE; +@@ -1091,35 +1091,35 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + ("RTMPrt3xSetPCIePowerLinkCtrl.===> %lx\n", + pAd->StaCfg.PSControl.word)); + +- // Check PSControl Configuration ++ /* Check PSControl Configuration */ + if (pAd->StaCfg.PSControl.field.EnableNewPS == FALSE) + return; + RTMPFindHostPCIDev(pAd); + if (pObj->parent_pci_dev) { +- // Find PCI-to-PCI Bridge Express Capability Offset ++ /* Find PCI-to-PCI Bridge Express Capability Offset */ + pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); + + if (pos != 0) { + pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + } +- // If configurared to turn on L1. ++ /* If configurared to turn on L1. */ + HostConfiguration = 0; + if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) { + DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); + +- // Skip non-exist deice right away ++ /* Skip non-exist deice right away */ + if ((pAd->HostLnkCtrlOffset != 0)) { + PCI_REG_READ_WORD(pObj->parent_pci_dev, + pAd->HostLnkCtrlOffset, + HostConfiguration); +- // Prepare Configuration to write to Host ++ /* Prepare Configuration to write to Host */ + HostConfiguration |= 0x3; + PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, + pAd->HostLnkCtrlOffset, + HostConfiguration); + pAd->Rt3xxHostLinkCtrl = HostConfiguration; +- // Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. +- // Fix HostConfiguration bit0:1 = 0x3 for later use. ++ /* Because in rt30xxForceASPMTest Mode, Force turn on L0s, L1. */ ++ /* Fix HostConfiguration bit0:1 = 0x3 for later use. */ + HostConfiguration = 0x3; + DBGPRINT(RT_DEBUG_TRACE, + ("PSM : Force ASPM : " +@@ -1129,7 +1129,7 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + } else if (pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM == + 1) { + +- // Skip non-exist deice right away ++ /* Skip non-exist deice right away */ + if ((pAd->HostLnkCtrlOffset != 0)) { + PCI_REG_READ_WORD(pObj->parent_pci_dev, + pAd->HostLnkCtrlOffset, +@@ -1143,12 +1143,12 @@ VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + } + } + } +- // Prepare to write Ralink setting. +- // Find Ralink PCIe Device's Express Capability Offset ++ /* Prepare to write Ralink setting. */ ++ /* Find Ralink PCIe Device's Express Capability Offset */ + pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP); + + if (pos != 0) { +- // Ralink PCIe Device's Link Control Register Offset ++ /* Ralink PCIe Device's Link Control Register Offset */ + pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL; + pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, + ®16); +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index fd577e0..8413998 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -30,9 +30,9 @@ + + ULONG RTDebugLevel = RT_DEBUG_ERROR; + +-// for wireless system event message ++/* for wireless system event message */ + char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { +- // system status event ++ /* system status event */ + "had associated successfully", /* IW_ASSOC_EVENT_FLAG */ + "had disassociated", /* IW_DISASSOC_EVENT_FLAG */ + "had deauthenticated", /* IW_DEAUTH_EVENT_FLAG */ +@@ -54,7 +54,7 @@ char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { + "scan terminate!! Busy!! Enqueue fail!!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ + }; + +-// for wireless IDS_spoof_attack event message ++/* for wireless IDS_spoof_attack event message */ + char const *pWirelessSpoofEventText[IW_SPOOF_EVENT_TYPE_NUM] = { + "detected conflict SSID", /* IW_CONFLICT_SSID_EVENT_FLAG */ + "detected spoofed association response", /* IW_SPOOF_ASSOC_RESP_EVENT_FLAG */ +@@ -68,7 +68,7 @@ char const *pWirelessSpoofEventText[IW_SPOOF_EVENT_TYPE_NUM] = { + "detected replay attack" /* IW_REPLAY_ATTACK_EVENT_FLAG */ + }; + +-// for wireless IDS_flooding_attack event message ++/* for wireless IDS_flooding_attack event message */ + char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { + "detected authentication flooding", /* IW_FLOOD_AUTH_EVENT_FLAG */ + "detected association request flooding", /* IW_FLOOD_ASSOC_REQ_EVENT_FLAG */ +@@ -129,10 +129,10 @@ VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + + VOID RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry) + { +- //RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); ++ /*RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); */ + } + +-// Unify all delay routine by using udelay ++/* Unify all delay routine by using udelay */ + VOID RTMPusecDelay(IN ULONG usec) + { + ULONG i; +@@ -149,7 +149,7 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time) + time->u.LowPart = jiffies; + } + +-// pAd MUST allow to be NULL ++/* pAd MUST allow to be NULL */ + NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, OUT UCHAR ** mem, IN ULONG size) + { + *mem = (PUCHAR) kmalloc(size, GFP_ATOMIC); +@@ -159,7 +159,7 @@ NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, OUT UCHAR ** mem, IN ULONG size) + return (NDIS_STATUS_FAILURE); + } + +-// pAd MUST allow to be NULL ++/* pAd MUST allow to be NULL */ + NDIS_STATUS os_free_mem(IN PRTMP_ADAPTER pAd, IN PVOID mem) + { + +@@ -249,8 +249,8 @@ VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + NdisFreeSpinLock(&pAd->RxRingLock); + #ifdef RT3090 + NdisFreeSpinLock(&pAd->McuCmdLock); +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // ++#endif /* RT3090 // */ ++#endif /* RTMP_MAC_PCI // */ + + for (index = 0; index < NUM_OF_TX_RING; index++) { + NdisFreeSpinLock(&pAd->TxSwQueueLock[index]); +@@ -260,7 +260,7 @@ VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + + NdisFreeSpinLock(&pAd->irq_lock); + +- vfree(pAd); // pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); ++ vfree(pAd); /* pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); */ + if (os_cookie) + kfree(os_cookie); + } +@@ -303,7 +303,7 @@ NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + ASSERT(pInPacket); + ASSERT(ppOutPacket); + +- // 1. Allocate a packet ++ /* 1. Allocate a packet */ + pkt = dev_alloc_skb(2048); + + if (pkt == NULL) { +@@ -322,7 +322,7 @@ NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + return NDIS_STATUS_SUCCESS; + } + +-// the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() ++/* the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() */ + NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + OUT PNDIS_PACKET * ppPacket, + IN PUCHAR pHeader, +@@ -333,7 +333,7 @@ NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + ASSERT(pData); + ASSERT(DataLen); + +- // 1. Allocate a packet ++ /* 1. Allocate a packet */ + pPacket = + (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + + RTMP_PKT_TAIL_PADDING); +@@ -344,18 +344,18 @@ NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + #endif + return NDIS_STATUS_FAILURE; + } +- // 2. clone the frame content ++ /* 2. clone the frame content */ + if (HeaderLen > 0) + NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket), pHeader, HeaderLen); + if (DataLen > 0) + NdisMoveMemory(GET_OS_PKT_DATAPTR(pPacket) + HeaderLen, pData, + DataLen); + +- // 3. update length of packet ++ /* 3. update length of packet */ + skb_put(GET_OS_PKT_TYPE(pPacket), HeaderLen + DataLen); + + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); +-// printk("%s : pPacket = %p, len = %d\n", __func__, pPacket, GET_OS_PKT_LEN(pPacket)); ++/* printk("%s : pPacket = %p, len = %d\n", __func__, pPacket, GET_OS_PKT_LEN(pPacket)); */ + *ppPacket = pPacket; + return NDIS_STATUS_SUCCESS; + } +@@ -372,9 +372,9 @@ VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); + } + +-// IRQL = DISPATCH_LEVEL +-// NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same +-// scatter gather buffer ++/* IRQL = DISPATCH_LEVEL */ ++/* NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same */ ++/* scatter gather buffer */ + NDIS_STATUS Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, + IN UCHAR DesiredOffset, + OUT PUCHAR pByte0, OUT PUCHAR pByte1) +@@ -481,7 +481,7 @@ PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, + + skb = RTPKT_TO_OSPKT(pPacket); + if (skb_tailroom(skb) < TKIP_TX_MIC_SIZE) { +- // alloc a new skb and copy the packet ++ /* alloc a new skb and copy the packet */ + newskb = + skb_copy_expand(skb, skb_headroom(skb), TKIP_TX_MIC_SIZE, + GFP_ATOMIC); +@@ -507,11 +507,11 @@ PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + ASSERT(pPacket); + pRxPkt = RTPKT_TO_OSPKT(pPacket); + +- // clone the packet ++ /* clone the packet */ + pClonedPkt = skb_clone(pRxPkt, MEM_ALLOC_FLAG); + + if (pClonedPkt) { +- // set the correct dataptr and data len ++ /* set the correct dataptr and data len */ + pClonedPkt->dev = pRxPkt->dev; + pClonedPkt->data = pData; + pClonedPkt->len = DataSize; +@@ -521,9 +521,9 @@ PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + return pClonedPkt; + } + +-// +-// change OS packet DataPtr and DataLen +-// ++/* */ ++/* change OS packet DataPtr and DataLen */ ++/* */ + void update_os_packet_info(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +@@ -555,10 +555,10 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + pOSPkt->len = pRxBlk->DataSize; + pOSPkt->tail = pOSPkt->data + pOSPkt->len; + +- // +- // copy 802.3 header +- // +- // ++ /* */ ++ /* copy 802.3 header */ ++ /* */ ++ /* */ + + NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, + LENGTH_802_3); +@@ -633,7 +633,7 @@ VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, + IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi) + { + +- //union iwreq_data wrqu; ++ /*union iwreq_data wrqu; */ + PSTRING pBuf = NULL, pBufPtr = NULL; + USHORT event, type, BufLen; + UCHAR event_table_len = 0; +@@ -668,9 +668,9 @@ VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, + event)); + return; + } +- //Allocate memory and copy the msg. ++ /*Allocate memory and copy the msg. */ + if ((pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC)) != NULL) { +- //Prepare the payload ++ /*Prepare the payload */ + memset(pBuf, 0, IW_CUSTOM_MAX_LEN); + + pBufPtr = pBuf; +@@ -706,7 +706,7 @@ VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, + + RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, + (PUCHAR) pBuf, BufLen); +- //DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __func__, pBuf)); ++ /*DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __func__, pBuf)); */ + + kfree(pBuf); + } else +@@ -723,7 +723,7 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + USHORT header_len = 0; + UCHAR temp_header[40] = { 0 }; + +- u_int32_t ralinkrate[256] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 109, 110, 111, 112, 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, 27, 54, 81, 108, 162, 216, 243, 270, // Last 38 ++ u_int32_t ralinkrate[256] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 109, 110, 111, 112, 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, 27, 54, 81, 108, 162, 216, 243, 270, /* Last 38 */ + 54, 108, 162, 216, 324, 432, 486, 540, 14, 29, 43, 57, 87, 115, + 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, 30, 60, 90, + 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, +@@ -761,39 +761,39 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + else + header_len = LENGTH_802_11; + +- // QOS ++ /* QOS */ + if (pRxBlk->pHeader->FC.SubType & 0x08) { + header_len += 2; +- // Data skip QOS contorl field ++ /* Data skip QOS contorl field */ + pRxBlk->DataSize -= 2; + } +- // Order bit: A-Ralink or HTC+ ++ /* Order bit: A-Ralink or HTC+ */ + if (pRxBlk->pHeader->FC.Order) { + header_len += 4; +- // Data skip HTC contorl field ++ /* Data skip HTC contorl field */ + pRxBlk->DataSize -= 4; + } +- // Copy Header ++ /* Copy Header */ + if (header_len <= 40) + NdisMoveMemory(temp_header, pRxBlk->pData, header_len); + +- // skip HW padding ++ /* skip HW padding */ + if (pRxBlk->RxD.L2PAD) + pRxBlk->pData += (header_len + 2); + else + pRxBlk->pData += header_len; +- } //end if ++ } /*end if */ + + if (pRxBlk->DataSize < pOSPkt->len) { + skb_trim(pOSPkt, pRxBlk->DataSize); + } else { + skb_put(pOSPkt, (pRxBlk->DataSize - pOSPkt->len)); +- } //end if ++ } /*end if */ + + if ((pRxBlk->pData - pOSPkt->data) > 0) { + skb_put(pOSPkt, (pRxBlk->pData - pOSPkt->data)); + skb_pull(pOSPkt, (pRxBlk->pData - pOSPkt->data)); +- } //end if ++ } /*end if */ + + if (skb_headroom(pOSPkt) < (sizeof(wlan_ng_prism2_header) + header_len)) { + if (pskb_expand_head +@@ -803,8 +803,8 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + ("%s : Reallocate header size of sk_buff fail!\n", + __func__)); + goto err_free_sk_buff; +- } //end if +- } //end if ++ } /*end if */ ++ } /*end if */ + + if (header_len > 0) + NdisMoveMemory(skb_push(pOSPkt, header_len), temp_header, +@@ -856,7 +856,7 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + ph->signal.did = DIDmsg_lnxind_wlansniffrm_signal; + ph->signal.status = 0; + ph->signal.len = 4; +- ph->signal.data = 0; //rssi + noise; ++ ph->signal.data = 0; /*rssi + noise; */ + + ph->noise.did = DIDmsg_lnxind_wlansniffrm_noise; + ph->noise.status = 0; +@@ -948,7 +948,7 @@ int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + free_irq(pObj->pci_dev->irq, (net_dev)); + RTMP_MSI_DISABLE(pAd); + } +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + + return 0; + } +@@ -985,7 +985,7 @@ void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) + + int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) + { +- // The object must have a read method ++ /* The object must have a read method */ + if (osfd->f_op && osfd->f_op->read) { + return osfd->f_op->read(osfd, pDataPtr, readLen, &osfd->f_pos); + } else { +@@ -1090,7 +1090,7 @@ NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + } else { + pTask->taskPID = GET_PID(pid_number); + +- // Wait for the thread to start ++ /* Wait for the thread to start */ + wait_for_completion(&pTask->taskComplete); + status = NDIS_STATUS_SUCCESS; + } +@@ -1172,7 +1172,7 @@ int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr) + net_dev = pNetDev; + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- // work-around for the SuSE due to it has it's own interface name management system. ++ /* work-around for the SuSE due to it has it's own interface name management system. */ + { + NdisZeroMemory(pAd->StaCfg.dev_name, 16); + NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, +@@ -1245,7 +1245,7 @@ void RtmpOSNetDevFree(PNET_DEV pNetDev) + + INT RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, IN UINT32 privDataSize) + { +- // assign it as null first. ++ /* assign it as null first. */ + *new_dev_p = NULL; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1281,7 +1281,7 @@ void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) + INT RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) + { + +- // TODO: Need to fix this ++ /* TODO: Need to fix this */ + printk("WARNING: This function(%s) not implement yet!!!\n", __func__); + return 0; + } +@@ -1297,7 +1297,7 @@ int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, + int ret, rtnl_locked = FALSE; + + DBGPRINT(RT_DEBUG_TRACE, ("RtmpOSNetDevAttach()--->\n")); +- // If we need hook some callback function to the net device structrue, now do it. ++ /* If we need hook some callback function to the net device structrue, now do it. */ + if (pDevOpHook) { + PRTMP_ADAPTER pAd = NULL; + +@@ -1312,7 +1312,7 @@ int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, + pNetDev->wireless_handlers = &rt28xx_iw_handler_def; + } + +- // copy the net device mac address to the net_device structure. ++ /* copy the net device mac address to the net_device structure. */ + NdisMoveMemory(pNetDev->dev_addr, &pDevOpHook->devAddr[0], + MAC_ADDR_LEN); + +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 8f65e46..84be9d0 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -41,8 +41,8 @@ + /* Private Variables Used */ + /*---------------------------------------------------------------------*/ + +-PSTRING mac = ""; // default 00:00:00:00:00:00 +-PSTRING hostname = ""; // default CMPC ++PSTRING mac = ""; /* default 00:00:00:00:00:00 */ ++PSTRING hostname = ""; /* default CMPC */ + module_param(mac, charp, 0); + MODULE_PARM_DESC(mac, "rt28xx: wireless mac addr"); + +@@ -50,11 +50,11 @@ MODULE_PARM_DESC(mac, "rt28xx: wireless mac addr"); + /* Prototypes of Functions Used */ + /*---------------------------------------------------------------------*/ + +-// public function prototype ++/* public function prototype */ + int rt28xx_close(IN struct net_device *net_dev); + int rt28xx_open(struct net_device *net_dev); + +-// private function prototype ++/* private function prototype */ + static INT rt28xx_send_packets(IN struct sk_buff *skb_p, + IN struct net_device *net_dev); + +@@ -87,9 +87,9 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- // Sanity check for pAd ++ /* Sanity check for pAd */ + if (pAd == NULL) +- return 0; // close ok ++ return 0; /* close ok */ + + netif_carrier_off(pAd->net_dev); + netif_stop_queue(pAd->net_dev); +@@ -117,7 +117,7 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + sizeof + (MLME_DISASSOC_REQ_STRUCT)); + +- // Prevent to connect AP again in STAMlmePeriodicExec ++ /* Prevent to connect AP again in STAMlmePeriodicExec */ + pAd->MlmeAux.AutoReconnectSsidLen = 32; + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, + pAd->MlmeAux. +@@ -142,7 +142,7 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + + RT_MOD_DEC_USE_COUNT(); + +- return 0; // close ok ++ return 0; /* close ok */ + } + + /* +@@ -171,14 +171,14 @@ int MainVirtualIF_open(IN struct net_device *net_dev) + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- // Sanity check for pAd ++ /* Sanity check for pAd */ + if (pAd == NULL) +- return 0; // close ok ++ return 0; /* close ok */ + + if (VIRTUAL_IF_UP(pAd) != 0) + return -1; + +- // increase MODULE use count ++ /* increase MODULE use count */ + RT_MOD_INC_USE_COUNT(); + + netif_start_queue(net_dev); +@@ -218,35 +218,35 @@ int rt28xx_close(IN PNET_DEV dev) + #ifdef RTMP_MAC_USB + DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); + DECLARE_WAITQUEUE(wait, current); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n")); + + Cancelled = FALSE; +- // Sanity check for pAd ++ /* Sanity check for pAd */ + if (pAd == NULL) +- return 0; // close ok ++ return 0; /* close ok */ + + { + #ifdef RTMP_MAC_PCI + RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_CLOSE); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // If dirver doesn't wake up firmware here, +- // NICLoadFirmware will hang forever when interface is up again. ++ /* If dirver doesn't wake up firmware here, */ ++ /* NICLoadFirmware will hang forever when interface is up again. */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { + AsicForceWakeup(pAd, TRUE); + } + #ifdef RTMP_MAC_USB + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + MlmeRadioOff(pAd); + #ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); +@@ -261,13 +261,13 @@ int rt28xx_close(IN PNET_DEV dev) + } + + #ifdef RTMP_MAC_USB +- // ensure there are no more active urbs. ++ /* ensure there are no more active urbs. */ + add_wait_queue(&unlink_wakeup, &wait); + pAd->wait = &unlink_wakeup; + +- // maybe wait for deletions to finish. ++ /* maybe wait for deletions to finish. */ + i = 0; +- //while((i < 25) && atomic_read(&pAd->PendingRx) > 0) ++ /*while((i < 25) && atomic_read(&pAd->PendingRx) > 0) */ + while (i < 25) { + unsigned long IrqFlags; + +@@ -278,17 +278,17 @@ int rt28xx_close(IN PNET_DEV dev) + } + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +- msleep(UNLINK_TIMEOUT_MS); //Time in millisecond ++ msleep(UNLINK_TIMEOUT_MS); /*Time in millisecond */ + i++; + } + pAd->wait = NULL; + remove_wait_queue(&unlink_wakeup, &wait); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // Stop Mlme state machine ++ /* Stop Mlme state machine */ + MlmeHalt(pAd); + +- // Close net tasklets ++ /* Close net tasklets */ + RtmpNetTaskExit(pAd); + + { +@@ -298,25 +298,25 @@ int rt28xx_close(IN PNET_DEV dev) + MeasureReqTabExit(pAd); + TpcReqTabExit(pAd); + +- // Close kernel threads ++ /* Close kernel threads */ + RtmpMgmtTaskExit(pAd); + + #ifdef RTMP_MAC_PCI + { + BOOLEAN brc; +- // ULONG Value; ++ /* ULONG Value; */ + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } +- // Receive packets to clear DMA index after disable interrupt. +- //RTMPHandleRxDoneInterrupt(pAd); +- // put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all +- // register access before Radio off. ++ /* Receive packets to clear DMA index after disable interrupt. */ ++ /*RTMPHandleRxDoneInterrupt(pAd); */ ++ /* put to radio off to save power when driver unload. After radiooff, can't write /read register. So need to finish all */ ++ /* register access before Radio off. */ + + brc = RT28xxPciAsicRadioOff(pAd, RTMP_HALT, 0); + +-//In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff ++/*In solution 3 of 3090F, the bPCIclkOff will be set to TRUE after calling RT28xxPciAsicRadioOff */ + pAd->bPCIclkOff = FALSE; + + if (brc == FALSE) { +@@ -335,22 +335,22 @@ int rt28xx_close(IN PNET_DEV dev) + // Disable Rx, register value supposed will remain after reset + NICIssueReset(pAd); + */ +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // Free IRQ ++ /* Free IRQ */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + #ifdef RTMP_MAC_PCI +- // Deregister interrupt function ++ /* Deregister interrupt function */ + RtmpOSIRQRelease(net_dev); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + } +- // Free Ring or USB buffers ++ /* Free Ring or USB buffers */ + RTMPFreeTxRxRingMemory(pAd); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); + +- // Free BA reorder resource ++ /* Free BA reorder resource */ + ba_reordering_resource_release(pAd); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP); +@@ -360,7 +360,7 @@ int rt28xx_close(IN PNET_DEV dev) + } + + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt28xx_close\n")); +- return 0; // close ok ++ return 0; /* close ok */ + } /* End of rt28xx_close */ + + /* +@@ -383,11 +383,11 @@ int rt28xx_open(IN PNET_DEV dev) + struct net_device *net_dev = (struct net_device *)dev; + PRTMP_ADAPTER pAd = NULL; + int retval = 0; +- //POS_COOKIE pObj; ++ /*POS_COOKIE pObj; */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- // Sanity check for pAd ++ /* Sanity check for pAd */ + if (pAd == NULL) { + /* if 1st open fail, pAd will be free; + So the net_dev->ml_priv will be NULL in 2rd open */ +@@ -399,52 +399,52 @@ int rt28xx_open(IN PNET_DEV dev) + net_dev->wireless_handlers = + (struct iw_handler_def *)&rt28xx_iw_handler_def; + } +- // Request interrupt service routine for PCI device +- // register the interrupt routine with the os ++ /* Request interrupt service routine for PCI device */ ++ /* register the interrupt routine with the os */ + RtmpOSIRQRequest(net_dev); + +- // Init IRQ parameters stored in pAd ++ /* Init IRQ parameters stored in pAd */ + RTMP_IRQ_INIT(pAd); + +- // Chip & other init ++ /* Chip & other init */ + if (rt28xx_init(pAd, mac, hostname) == FALSE) + goto err; + +- // Enable Interrupt ++ /* Enable Interrupt */ + RTMP_IRQ_ENABLE(pAd); + +- // Now Enable RxTx ++ /* Now Enable RxTx */ + RTMPEnableRxTx(pAd); + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP); + + { + UINT32 reg = 0; +- RTMP_IO_READ32(pAd, 0x1300, ®); // clear garbage interrupts ++ RTMP_IO_READ32(pAd, 0x1300, ®); /* clear garbage interrupts */ + printk("0x1300 = %08x\n", reg); + } + + { +-// u32 reg; +-// UINT8 byte; +-// u16 tmp; ++/* u32 reg; */ ++/* UINT8 byte; */ ++/* u16 tmp; */ + +-// RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); ++/* RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); */ + +-// tmp = 0x0805; +-// reg = (reg & 0xffff0000) | tmp; +-// RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); ++/* tmp = 0x0805; */ ++/* reg = (reg & 0xffff0000) | tmp; */ ++/* RTMP_IO_WRITE32(pAd, XIFS_TIME_CFG, reg); */ + + } + #ifdef RTMP_MAC_PCI + RTMPInitPCIeLinkCtrlValue(pAd); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + return (retval); + + err: +-//+++Add by shiang, move from rt28xx_init() to here. ++/*+++Add by shiang, move from rt28xx_init() to here. */ + RtmpOSIRQRelease(net_dev); +-//---Add by shiang, move from rt28xx_init() to here. ++/*---Add by shiang, move from rt28xx_init() to here. */ + return (-1); + } /* End of rt28xx_open */ + +@@ -463,7 +463,7 @@ PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook) + { + struct net_device *net_dev = NULL; +-// NDIS_STATUS Status; ++/* NDIS_STATUS Status; */ + + net_dev = + RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), +@@ -518,16 +518,16 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + /* RT2870STA does this in RTMPSendPackets() */ + + { +- // Drop send request since we are in monitor mode ++ /* Drop send request since we are in monitor mode */ + if (MONITOR_ON(pAd)) { + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + goto done; + } + } + +- // EapolStart size is 18 ++ /* EapolStart size is 18 */ + if (skb->len < 14) { +- //printk("bad packet size: %d\n", pkt->len); ++ /*printk("bad packet size: %d\n", pkt->len); */ + hex_dump("bad packet", skb->data, skb->len); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + goto done; +@@ -577,7 +577,7 @@ static int rt28xx_send_packets(IN struct sk_buff *skb_p, + return rt28xx_packet_xmit(skb_p); + } + +-// This function will be called when query /proc ++/* This function will be called when query /proc */ + struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + { + PRTMP_ADAPTER pAd = NULL; +@@ -586,9 +586,9 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + + DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_get_wireless_stats --->\n")); + +- pAd->iw_stats.status = 0; // Status - device dependent for now ++ pAd->iw_stats.status = 0; /* Status - device dependent for now */ + +- // link quality ++ /* link quality */ + if (pAd->OpMode == OPMODE_STA) + pAd->iw_stats.qual.qual = + ((pAd->Mlme.ChannelQuality * 12) / 10 + 10); +@@ -603,16 +603,16 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + pAd->StaCfg.RssiSample.LastRssi2); + } + +- pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm) ++ pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; /* noise level (dBm) */ + + pAd->iw_stats.qual.noise += 256 - 143; +- pAd->iw_stats.qual.updated = 1; // Flags to know if updated ++ pAd->iw_stats.qual.updated = 1; /* Flags to know if updated */ + #ifdef IW_QUAL_DBM +- pAd->iw_stats.qual.updated |= IW_QUAL_DBM; // Level + Noise are dBm +-#endif // IW_QUAL_DBM // ++ pAd->iw_stats.qual.updated |= IW_QUAL_DBM; /* Level + Noise are dBm */ ++#endif /* IW_QUAL_DBM // */ + +- pAd->iw_stats.discard.nwid = 0; // Rx : Wrong nwid/essid +- pAd->iw_stats.miss.beacon = 0; // Missed beacons/superframe ++ pAd->iw_stats.discard.nwid = 0; /* Rx : Wrong nwid/essid */ ++ pAd->iw_stats.miss.beacon = 0; /* Missed beacons/superframe */ + + DBGPRINT(RT_DEBUG_TRACE, ("<--- rt28xx_get_wireless_stats\n")); + return &pAd->iw_stats; +@@ -620,7 +620,7 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + + void tbtt_tasklet(unsigned long data) + { +-//#define MAX_TX_IN_TBTT (16) ++/*#define MAX_TX_IN_TBTT (16) */ + + } + +@@ -664,24 +664,24 @@ static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device + pAd->stats.rx_dropped = 0; + pAd->stats.tx_dropped = 0; + +- pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; // multicast packets received +- pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; // Collision packets ++ pAd->stats.multicast = pAd->WlanCounters.MulticastReceivedFrameCount.QuadPart; /* multicast packets received */ ++ pAd->stats.collisions = pAd->Counters8023.OneCollision + pAd->Counters8023.MoreCollisions; /* Collision packets */ + + pAd->stats.rx_length_errors = 0; +- pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; // receiver ring buff overflow +- pAd->stats.rx_crc_errors = 0; //pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error +- pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; // recv'd frame alignment error +- pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; // recv'r fifo overrun +- pAd->stats.rx_missed_errors = 0; // receiver missed packet ++ pAd->stats.rx_over_errors = pAd->Counters8023.RxNoBuffer; /* receiver ring buff overflow */ ++ pAd->stats.rx_crc_errors = 0; /*pAd->WlanCounters.FCSErrorCount; // recved pkt with crc error */ ++ pAd->stats.rx_frame_errors = pAd->Counters8023.RcvAlignmentErrors; /* recv'd frame alignment error */ ++ pAd->stats.rx_fifo_errors = pAd->Counters8023.RxNoBuffer; /* recv'r fifo overrun */ ++ pAd->stats.rx_missed_errors = 0; /* receiver missed packet */ + +- // detailed tx_errors ++ /* detailed tx_errors */ + pAd->stats.tx_aborted_errors = 0; + pAd->stats.tx_carrier_errors = 0; + pAd->stats.tx_fifo_errors = 0; + pAd->stats.tx_heartbeat_errors = 0; + pAd->stats.tx_window_errors = 0; + +- // for cslip etc ++ /* for cslip etc */ + pAd->stats.rx_compressed = 0; + pAd->stats.tx_compressed = 0; + +@@ -693,7 +693,7 @@ static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device + BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev) + { + +- // Unregister network device ++ /* Unregister network device */ + if (net_dev != NULL) { + printk + ("RtmpOSNetDevDetach(): RtmpOSNetDeviceDetach(), dev->name=%s!\n", +@@ -724,7 +724,7 @@ Note: + NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd) + { + +- *ppAd = (PVOID) vmalloc(sizeof(RTMP_ADAPTER)); //pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); ++ *ppAd = (PVOID) vmalloc(sizeof(RTMP_ADAPTER)); /*pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); */ + + if (*ppAd) { + NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index 8ae0e3e..0f75c3f 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -51,23 +51,23 @@ static void fifo_statistic_full_tasklet(unsigned long data); + /*---------------------------------------------------------------------*/ + /* Symbol & Macro Definitions */ + /*---------------------------------------------------------------------*/ +-#define RT2860_INT_RX_DLY (1<<0) // bit 0 +-#define RT2860_INT_TX_DLY (1<<1) // bit 1 +-#define RT2860_INT_RX_DONE (1<<2) // bit 2 +-#define RT2860_INT_AC0_DMA_DONE (1<<3) // bit 3 +-#define RT2860_INT_AC1_DMA_DONE (1<<4) // bit 4 +-#define RT2860_INT_AC2_DMA_DONE (1<<5) // bit 5 +-#define RT2860_INT_AC3_DMA_DONE (1<<6) // bit 6 +-#define RT2860_INT_HCCA_DMA_DONE (1<<7) // bit 7 +-#define RT2860_INT_MGMT_DONE (1<<8) // bit 8 ++#define RT2860_INT_RX_DLY (1<<0) /* bit 0 */ ++#define RT2860_INT_TX_DLY (1<<1) /* bit 1 */ ++#define RT2860_INT_RX_DONE (1<<2) /* bit 2 */ ++#define RT2860_INT_AC0_DMA_DONE (1<<3) /* bit 3 */ ++#define RT2860_INT_AC1_DMA_DONE (1<<4) /* bit 4 */ ++#define RT2860_INT_AC2_DMA_DONE (1<<5) /* bit 5 */ ++#define RT2860_INT_AC3_DMA_DONE (1<<6) /* bit 6 */ ++#define RT2860_INT_HCCA_DMA_DONE (1<<7) /* bit 7 */ ++#define RT2860_INT_MGMT_DONE (1<<8) /* bit 8 */ + + #define INT_RX RT2860_INT_RX_DONE + +-#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) //| RT2860_INT_TX_DLY) +-#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) //| RT2860_INT_TX_DLY) ++#define INT_AC0_DLY (RT2860_INT_AC0_DMA_DONE) /*| RT2860_INT_TX_DLY) */ ++#define INT_AC1_DLY (RT2860_INT_AC1_DMA_DONE) /*| RT2860_INT_TX_DLY) */ ++#define INT_AC2_DLY (RT2860_INT_AC2_DMA_DONE) /*| RT2860_INT_TX_DLY) */ ++#define INT_AC3_DLY (RT2860_INT_AC3_DMA_DONE) /*| RT2860_INT_TX_DLY) */ ++#define INT_HCCA_DLY (RT2860_INT_HCCA_DMA_DONE) /*| RT2860_INT_TX_DLY) */ + #define INT_MGMT_DLY RT2860_INT_MGMT_DONE + + /*************************************************************************** +@@ -76,7 +76,7 @@ static void fifo_statistic_full_tasklet(unsigned long data); + * Mainly for Hardware TxDesc/RxDesc/MgmtDesc, DMA Memory for TxData/RxData, etc., + * + **************************************************************************/ +-// Function for TxDesc Memory allocation. ++/* Function for TxDesc Memory allocation. */ + void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, + IN UINT Index, + IN ULONG Length, +@@ -92,7 +92,7 @@ void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, + + } + +-// Function for MgmtDesc Memory allocation. ++/* Function for MgmtDesc Memory allocation. */ + void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, + IN ULONG Length, + IN BOOLEAN Cached, +@@ -107,7 +107,7 @@ void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, + + } + +-// Function for RxDesc Memory allocation. ++/* Function for RxDesc Memory allocation. */ + void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + IN ULONG Length, + IN BOOLEAN Cached, +@@ -122,7 +122,7 @@ void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + + } + +-// Function for free allocated Desc Memory. ++/* Function for free allocated Desc Memory. */ + void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + IN ULONG Length, + IN PVOID VirtualAddress, +@@ -134,7 +134,7 @@ void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + PhysicalAddress); + } + +-// Function for TxData DMA Memory allocation. ++/* Function for TxData DMA Memory allocation. */ + void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, + IN UINT Index, + IN ULONG Length, +@@ -305,12 +305,12 @@ static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) + + pAd->int_disable_mask &= ~(mode); + regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++ /*if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) */ + { +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 1:enable ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); /* 1:enable */ + } +- //else +- // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); ++ /*else */ ++ /* DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n")); */ + + if (regValue != 0) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +@@ -322,7 +322,7 @@ static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) + + pAd->int_disable_mask |= mode; + regValue = pAd->int_enable_reg & ~(pAd->int_disable_mask); +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); // 0: disable ++ RTMP_IO_WRITE32(pAd, INT_MASK_CSR, regValue); /* 0: disable */ + + if (regValue == 0) { + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); +@@ -341,23 +341,23 @@ static void mgmt_dma_done_tasklet(unsigned long data) + INT_SOURCE_CSR_STRUC IntSource; + POS_COOKIE pObj; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("mgmt_dma_done_process\n"); ++/* printk("mgmt_dma_done_process\n"); */ + IntSource.word = 0; + IntSource.field.MgmtDmaDone = 1; + pAd->int_pending &= ~INT_MGMT_DLY; + + RTMPHandleMgmtRingDmaDoneInterrupt(pAd); + +- // if you use RTMP_SEM_LOCK, sometimes kernel will hang up, no any +- // bug report output ++ /* if you use RTMP_SEM_LOCK, sometimes kernel will hang up, no any */ ++ /* bug report output */ + RTMP_INT_LOCK(&pAd->irq_lock, flags); + /* + * double check to avoid lose of interrupts +@@ -380,8 +380,8 @@ static void rx_done_tasklet(unsigned long data) + BOOLEAN bReschedule = 0; + POS_COOKIE pObj; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -413,8 +413,8 @@ void fifo_statistic_full_tasklet(unsigned long data) + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + POS_COOKIE pObj; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -449,15 +449,15 @@ static void ac3_dma_done_tasklet(unsigned long data) + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++/* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; + IntSource.field.Ac3DmaDone = 1; + pAd->int_pending &= ~INT_AC3_DLY; +@@ -487,8 +487,8 @@ static void ac2_dma_done_tasklet(unsigned long data) + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -525,15 +525,15 @@ static void ac1_dma_done_tasklet(unsigned long data) + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++/* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; + IntSource.field.Ac1DmaDone = 1; + pAd->int_pending &= ~INT_AC1_DLY; +@@ -563,20 +563,20 @@ static void ac0_dma_done_tasklet(unsigned long data) + POS_COOKIE pObj; + BOOLEAN bReschedule = 0; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +-// printk("ac0_dma_done_process\n"); ++/* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; + IntSource.field.Ac0DmaDone = 1; + pAd->int_pending &= ~INT_AC0_DLY; + +-// RTMPHandleMgmtRingDmaDoneInterrupt(pAd); ++/* RTMPHandleMgmtRingDmaDoneInterrupt(pAd); */ + bReschedule = RTMPHandleTxRingDmaDoneInterrupt(pAd, IntSource); + + RTMP_INT_LOCK(&pAd->irq_lock, flags); +@@ -617,52 +617,52 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); + Or kernel will panic after ifconfig ra0 down sometimes */ + +- // +- // Inital the Interrupt source. +- // ++ /* */ ++ /* Inital the Interrupt source. */ ++ /* */ + IntSource.word = 0x00000000L; +-// McuIntSource.word = 0x00000000L; +- +- // +- // Get the interrupt sources & saved to local variable +- // +- //RTMP_IO_READ32(pAd, where, &McuIntSource.word); +- //RTMP_IO_WRITE32(pAd, , McuIntSource.word); +- +- // +- // Flag fOP_STATUS_DOZE On, means ASIC put to sleep, elase means ASICK WakeUp +- // And at the same time, clock maybe turned off that say there is no DMA service. +- // when ASIC get to sleep. +- // To prevent system hang on power saving. +- // We need to check it before handle the INT_SOURCE_CSR, ASIC must be wake up. +- // +- // RT2661 => when ASIC is sleeping, MAC register cannot be read and written. +- // RT2860 => when ASIC is sleeping, MAC register can be read and written. +-// if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) ++/* McuIntSource.word = 0x00000000L; */ ++ ++ /* */ ++ /* Get the interrupt sources & saved to local variable */ ++ /* */ ++ /*RTMP_IO_READ32(pAd, where, &McuIntSource.word); */ ++ /*RTMP_IO_WRITE32(pAd, , McuIntSource.word); */ ++ ++ /* */ ++ /* Flag fOP_STATUS_DOZE On, means ASIC put to sleep, elase means ASICK WakeUp */ ++ /* And at the same time, clock maybe turned off that say there is no DMA service. */ ++ /* when ASIC get to sleep. */ ++ /* To prevent system hang on power saving. */ ++ /* We need to check it before handle the INT_SOURCE_CSR, ASIC must be wake up. */ ++ /* */ ++ /* RT2661 => when ASIC is sleeping, MAC register cannot be read and written. */ ++ /* RT2860 => when ASIC is sleeping, MAC register can be read and written. */ ++/* if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) */ + { + RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); // write 1 to clear ++ RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, IntSource.word); /* write 1 to clear */ + } +-// else +-// DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); ++/* else */ ++/* DBGPRINT(RT_DEBUG_TRACE, (">>>fOP_STATUS_DOZE<<<\n")); */ + +-// RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); +-// RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); +-// DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", +-// IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); ++/* RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IsrAfterClear); */ ++/* RTMP_IO_READ32(pAd, MCU_INT_SOURCE_CSR, &McuIsrAfterClear); */ ++/* DBGPRINT(RT_DEBUG_INFO, ("====> RTMPHandleInterrupt(ISR=%08x,Mcu ISR=%08x, After clear ISR=%08x, MCU ISR=%08x)\n", */ ++/* IntSource.word, McuIntSource.word, IsrAfterClear, McuIsrAfterClear)); */ + +- // Do nothing if Reset in progress ++ /* Do nothing if Reset in progress */ + if (RTMP_TEST_FLAG + (pAd, + (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS))) { + return IRQ_HANDLED; + } +- // +- // Handle interrupt, walk through all bits +- // Should start from highest priority interrupt +- // The priority can be adjust by altering processing if statement +- // ++ /* */ ++ /* Handle interrupt, walk through all bits */ ++ /* Should start from highest priority interrupt */ ++ /* The priority can be adjust by altering processing if statement */ ++ /* */ + + #ifdef DBG + +@@ -670,11 +670,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + + pAd->bPCIclkOff = FALSE; + +- // If required spinlock, each interrupt service routine has to acquire +- // and release itself. +- // ++ /* If required spinlock, each interrupt service routine has to acquire */ ++ /* and release itself. */ ++ /* */ + +- // Do nothing if NIC doesn't exist ++ /* Do nothing if NIC doesn't exist */ + if (IntSource.word == 0xffffffff) { + RTMP_SET_FLAG(pAd, + (fRTMP_ADAPTER_NIC_NOT_EXIST | +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +index 30fc4bb..e4668dc 100644 +--- a/drivers/staging/rt2860/rt_usb.c ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -138,15 +138,15 @@ VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + INT ret; + RTMP_OS_TASK *pTask; + +- // Sleep 50 milliseconds so pending io might finish normally ++ /* Sleep 50 milliseconds so pending io might finish normally */ + RTMPusecDelay(50000); + +- // We want to wait until all pending receives and sends to the +- // device object. We cancel any +- // irps. Wait until sends and receives have stopped. ++ /* We want to wait until all pending receives and sends to the */ ++ /* device object. We cancel any */ ++ /* irps. Wait until sends and receives have stopped. */ + RTUSBCancelPendingIRPs(pAd); + +- // We need clear timerQ related structure before exits of the timer thread. ++ /* We need clear timerQ related structure before exits of the timer thread. */ + RtmpTimerQExit(pAd); + + /* Terminate Mlme Thread */ +@@ -172,7 +172,7 @@ VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; + NdisReleaseSpinLock(&pAd->CmdQLock); + mb(); +- //RTUSBCMDUp(pAd); ++ /*RTUSBCMDUp(pAd); */ + ret = RtmpOSTaskKill(pTask); + if (ret == NDIS_STATUS_FAILURE) { + DBGPRINT(RT_DEBUG_ERROR, ("%s: kill task(%s) failed!\n", +@@ -211,12 +211,12 @@ static void rtusb_dataout_complete(unsigned long data) + pObj = (POS_COOKIE) pAd->OS_Cookie; + Status = pUrb->status; + +- // Store BulkOut PipeId ++ /* Store BulkOut PipeId */ + BulkOutPipeId = pHTTXContext->BulkOutPipeId; + pAd->BulkOutDataOneSecCount++; + +- //DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition, +- // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ /*DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition, */ ++ /* pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); */ + + RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; +@@ -229,11 +229,11 @@ static void rtusb_dataout_complete(unsigned long data) + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + + pAd->Counters8023.GoodTransmits++; +- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ /*RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); */ + FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext); +- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ /*RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); */ + +- } else // STATUS_OTHER ++ } else /* STATUS_OTHER */ + { + PUCHAR pBuf; + +@@ -264,15 +264,15 @@ static void rtusb_dataout_complete(unsigned long data) + ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", + pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], + pBuf[5], pBuf[6], pBuf[7])); +- //DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther)); ++ /*DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther)); */ + + } + +- // +- // bInUse = TRUE, means some process are filling TX data, after that must turn on bWaitingBulkOut +- // bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out. +- // +- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ /* */ ++ /* bInUse = TRUE, means some process are filling TX data, after that must turn on bWaitingBulkOut */ ++ /* bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out. */ ++ /* */ ++ /*RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); */ + if ((pHTTXContext->ENextBulkOutPosition != + pHTTXContext->CurWritePosition) + && (pHTTXContext->ENextBulkOutPosition != +@@ -280,15 +280,15 @@ static void rtusb_dataout_complete(unsigned long data) + && !RTUSB_TEST_BULK_FLAG(pAd, + (fRTUSB_BULK_OUT_DATA_FRAG << + BulkOutPipeId))) { +- // Indicate There is data avaliable ++ /* Indicate There is data avaliable */ + RTUSB_SET_BULK_FLAG(pAd, + (fRTUSB_BULK_OUT_DATA_NORMAL << + BulkOutPipeId)); + } +- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); ++ /*RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); */ + +- // Always call Bulk routine, even reset bulk. +- // The protection of rest bulk should be in BulkOut routine ++ /* Always call Bulk routine, even reset bulk. */ ++ /* The protection of rest bulk should be in BulkOut routine */ + RTUSBKickBulkOut(pAd); + } + +@@ -305,7 +305,7 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + pAd = pNullContext->pAd; + Status = pUrb->status; + +- // Reset Null frame context flags ++ /* Reset Null frame context flags */ + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); + pNullContext->IRPPending = FALSE; + pNullContext->InUse = FALSE; +@@ -316,7 +316,7 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } else // STATUS_OTHER ++ } else /* STATUS_OTHER */ + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +@@ -336,8 +336,8 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + } + } + +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine ++ /* Always call Bulk routine, even reset bulk. */ ++ /* The protectioon of rest bulk should be in BulkOut routine */ + RTUSBKickBulkOut(pAd); + } + +@@ -354,7 +354,7 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + pAd = pRTSContext->pAd; + Status = pUrb->status; + +- // Reset RTS frame context flags ++ /* Reset RTS frame context flags */ + RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag); + pRTSContext->IRPPending = FALSE; + pRTSContext->InUse = FALSE; +@@ -362,7 +362,7 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + if (Status == USB_ST_NOERROR) { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } else // STATUS_OTHER ++ } else /* STATUS_OTHER */ + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +@@ -385,8 +385,8 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + pAd->BulkOutPending[pRTSContext->BulkOutPipeId] = FALSE; + RTMP_SEM_UNLOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]); + +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine ++ /* Always call Bulk routine, even reset bulk. */ ++ /* The protectioon of rest bulk should be in BulkOut routine */ + RTUSBKickBulkOut(pAd); + + } +@@ -403,14 +403,14 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + pAd = pPsPollContext->pAd; + Status = pUrb->status; + +- // Reset PsPoll context flags ++ /* Reset PsPoll context flags */ + pPsPollContext->IRPPending = FALSE; + pPsPollContext->InUse = FALSE; + pAd->watchDogTxPendingCnt[0] = 0; + + if (Status == USB_ST_NOERROR) { + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); +- } else // STATUS_OTHER ++ } else /* STATUS_OTHER */ + { + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && +@@ -430,8 +430,8 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + pAd->BulkOutPending[0] = FALSE; + RTMP_SEM_UNLOCK(&pAd->BulkOutLock[0]); + +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine ++ /* Always call Bulk routine, even reset bulk. */ ++ /* The protectioon of rest bulk should be in BulkOut routine */ + RTUSBKickBulkOut(pAd); + + } +@@ -467,26 +467,26 @@ static void rx_done_tasklet(unsigned long data) + pRxContext->InUse = FALSE; + pRxContext->IRPPending = FALSE; + pRxContext->BulkInOffset += pUrb->actual_length; +- //NdisInterlockedDecrement(&pAd->PendingRx); ++ /*NdisInterlockedDecrement(&pAd->PendingRx); */ + pAd->PendingRx--; + + if (Status == USB_ST_NOERROR) { + pAd->BulkInComplete++; + pAd->NextRxBulkInPosition = 0; +- if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero. ++ if (pRxContext->BulkInOffset) /* As jan's comment, it may bulk-in success but size is zero. */ + { + pRxContext->Readable = TRUE; + INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE); + } + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); +- } else // STATUS_OTHER ++ } else /* STATUS_OTHER */ + { + pAd->BulkInCompleteFail++; +- // Still read this packet although it may comtain wrong bytes. ++ /* Still read this packet although it may comtain wrong bytes. */ + pRxContext->Readable = FALSE; + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +- // Parsing all packets. because after reset, the index will reset to all zero. ++ /* Parsing all packets. because after reset, the index will reset to all zero. */ + if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_BULKIN_RESET | + fRTMP_ADAPTER_HALT_IN_PROGRESS | +@@ -533,7 +533,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + + if (Status != USB_ST_NOERROR) { +- //Bulk-Out fail status handle ++ /*Bulk-Out fail status handle */ + if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && +@@ -541,7 +541,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + DBGPRINT_RAW(RT_DEBUG_ERROR, + ("Bulk Out MLME Failed, Status=%d!\n", + Status)); +- // TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt? ++ /* TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt? */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET); + pAd->bulkResetPipeid = + (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG); +@@ -552,7 +552,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + + RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags); +- // Reset MLME context flags ++ /* Reset MLME context flags */ + pMLMEContext->IRPPending = FALSE; + pMLMEContext->InUse = FALSE; + pMLMEContext->bWaitingBulkOut = FALSE; +@@ -561,27 +561,27 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + pPacket = pAd->MgmtRing.Cell[index].pNdisPacket; + pAd->MgmtRing.Cell[index].pNdisPacket = NULL; + +- // Increase MgmtRing Index ++ /* Increase MgmtRing Index */ + INC_RING_INDEX(pAd->MgmtRing.TxDmaIdx, MGMT_RING_SIZE); + pAd->MgmtRing.TxSwFreeIdx++; + RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); + +- // No-matter success or fail, we free the mgmt packet. ++ /* No-matter success or fail, we free the mgmt packet. */ + if (pPacket) + RTMPFreeNdisPacket(pAd, pPacket); + + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) { +- // do nothing and return directly. ++ /* do nothing and return directly. */ + } else { +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) { // For Mgmt Bulk-Out failed, ignore it now. ++ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) && ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)) { /* For Mgmt Bulk-Out failed, ignore it now. */ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, + NULL, 0); + } else { + +- // Always call Bulk routine, even reset bulk. +- // The protectioon of rest bulk should be in BulkOut routine ++ /* Always call Bulk routine, even reset bulk. */ ++ /* The protectioon of rest bulk should be in BulkOut routine */ + if (pAd->MgmtRing.TxSwFreeIdx < + MGMT_RING_SIZE + /* pMLMEContext->bWaitingBulkOut == TRUE */ ) { +@@ -609,7 +609,7 @@ static void rtusb_ac3_dma_done_tasklet(unsigned long data) + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) { +- // do nothing and return directly. ++ /* do nothing and return directly. */ + } else { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, +@@ -649,7 +649,7 @@ static void rtusb_ac2_dma_done_tasklet(unsigned long data) + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) { +- // do nothing and return directly. ++ /* do nothing and return directly. */ + } else { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, +@@ -689,7 +689,7 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data) + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) { +- // do nothing and return directly. ++ /* do nothing and return directly. */ + } else { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, +@@ -729,7 +729,7 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_NIC_NOT_EXIST)))) { +- // do nothing and return directly. ++ /* do nothing and return directly. */ + } else { + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)) { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, +@@ -757,7 +757,7 @@ NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + +- // Create receive tasklet ++ /* Create receive tasklet */ + tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG) pAd); + tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, + (unsigned long)pAd); +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index dc1f600..d92a41e 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -61,15 +61,15 @@ typedef struct PACKED _RT_VERSION_INFO { + UINT DriverBuildDay; + } RT_VERSION_INFO, *PRT_VERSION_INFO; + +-static __s32 ralinkrate[] = { 2, 4, 11, 22, // CCK +- 12, 18, 24, 36, 48, 72, 96, 108, // OFDM +- 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15 +- 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23 +- 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15 +- 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23 +- 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15 +- 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23 +- 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15 ++static __s32 ralinkrate[] = { 2, 4, 11, 22, /* CCK */ ++ 12, 18, 24, 36, 48, 72, 96, 108, /* OFDM */ ++ 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, /* 20MHz, 800ns GI, MCS: 0 ~ 15 */ ++ 39, 78, 117, 156, 234, 312, 351, 390, /* 20MHz, 800ns GI, MCS: 16 ~ 23 */ ++ 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, /* 40MHz, 800ns GI, MCS: 0 ~ 15 */ ++ 81, 162, 243, 324, 486, 648, 729, 810, /* 40MHz, 800ns GI, MCS: 16 ~ 23 */ ++ 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, /* 20MHz, 400ns GI, MCS: 0 ~ 15 */ ++ 43, 87, 130, 173, 260, 317, 390, 433, /* 20MHz, 400ns GI, MCS: 16 ~ 23 */ ++ 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, /* 40MHz, 400ns GI, MCS: 0 ~ 15 */ + 90, 180, 270, 360, 540, 720, 810, 900 + }; + +@@ -93,7 +93,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pKey->KeyLength); + goto end; + } +- // Update PTK ++ /* Update PTK */ + NdisZeroMemory(&pAd->SharedKey[BSS0][0], + sizeof(CIPHER_KEY)); + pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; +@@ -119,7 +119,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + LEN_TKIP_RXMICK); + } + +- // Decide its ChiperAlg ++ /* Decide its ChiperAlg */ + if (pAd->StaCfg.PairCipher == + Ndis802_11Encryption2Enabled) + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +@@ -129,7 +129,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + else + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; + +- // Update these related information to MAC_TABLE_ENTRY ++ /* Update these related information to MAC_TABLE_ENTRY */ + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + NdisMoveMemory(pEntry->PairwiseKey.Key, + pAd->SharedKey[BSS0][0].Key, +@@ -143,7 +143,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pEntry->PairwiseKey.CipherAlg = + pAd->SharedKey[BSS0][0].CipherAlg; + +- // Update pairwise key information to ASIC Shared Key Table ++ /* Update pairwise key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + 0, +@@ -152,7 +152,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pAd->SharedKey[BSS0][0].TxMic, + pAd->SharedKey[BSS0][0].RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + 0, +@@ -160,16 +160,16 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + CipherAlg, pEntry); + + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2) { +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /* set 802.1x port control */ ++ /*pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAd); + +- // Indicate Connected for GUI ++ /* Indicate Connected for GUI */ + pAd->IndicateMediaState = + NdisMediaStateConnected; + } + } else { +- // Update GTK ++ /* Update GTK */ + pAd->StaCfg.DefaultKeyId = (pKey->KeyIndex & 0xFF); + NdisZeroMemory(&pAd-> + SharedKey[BSS0][pAd->StaCfg. +@@ -213,7 +213,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + LEN_TKIP_RXMICK); + } + +- // Update Shared Key CipherAlg ++ /* Update Shared Key CipherAlg */ + pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]. + CipherAlg = CIPHER_NONE; + if (pAd->StaCfg.GroupCipher == +@@ -225,7 +225,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]. + CipherAlg = CIPHER_AES; + +- // Update group key information to ASIC Shared Key Table ++ /* Update group key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +@@ -242,7 +242,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + DefaultKeyId]. + RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +@@ -251,14 +251,14 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + DefaultKeyId]. + CipherAlg, NULL); + +- // set 802.1x port control +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /* set 802.1x port control */ ++ /*pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAd); + +- // Indicate Connected for GUI ++ /* Indicate Connected for GUI */ + pAd->IndicateMediaState = NdisMediaStateConnected; + } +- } else // dynamic WEP from wpa_supplicant ++ } else /* dynamic WEP from wpa_supplicant */ + { + UCHAR CipherAlg; + PUCHAR Key; +@@ -269,7 +269,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + KeyIdx = pKey->KeyIndex & 0x0fffffff; + + if (KeyIdx < 4) { +- // it is a default shared key, for Pairwise key setting ++ /* it is a default shared key, for Pairwise key setting */ + if (pKey->KeyIndex & 0x80000000) { + pEntry = MacTableLookup(pAd, pKey->BSSID); + +@@ -277,14 +277,14 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPAddKey: Set Pair-wise Key\n")); + +- // set key material and key length ++ /* set key material and key length */ + pEntry->PairwiseKey.KeyLen = + (UCHAR) pKey->KeyLength; + NdisMoveMemory(pEntry->PairwiseKey.Key, + &pKey->KeyMaterial, + pKey->KeyLength); + +- // set Cipher type ++ /* set Cipher type */ + if (pKey->KeyLength == 5) + pEntry->PairwiseKey.CipherAlg = + CIPHER_WEP64; +@@ -292,7 +292,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pEntry->PairwiseKey.CipherAlg = + CIPHER_WEP128; + +- // Add Pair-wise key to Asic ++ /* Add Pair-wise key to Asic */ + AsicAddPairwiseKeyEntry(pAd, + pEntry->Addr, + (UCHAR) pEntry-> +@@ -300,8 +300,8 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + &pEntry-> + PairwiseKey); + +- // update WCID attribute table and IVEIV table for this entry +- RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, // The value may be not zero ++ /* update WCID attribute table and IVEIV table for this entry */ ++ RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, /* The value may be not zero */ + pEntry-> + PairwiseKey. + CipherAlg, +@@ -309,17 +309,17 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + + } + } else { +- // Default key for tx (shared key) ++ /* Default key for tx (shared key) */ + pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; + +- // set key material and key length ++ /* set key material and key length */ + pAd->SharedKey[BSS0][KeyIdx].KeyLen = + (UCHAR) pKey->KeyLength; + NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, + &pKey->KeyMaterial, + pKey->KeyLength); + +- // Set Ciper type ++ /* Set Ciper type */ + if (pKey->KeyLength == 5) + pAd->SharedKey[BSS0][KeyIdx].CipherAlg = + CIPHER_WEP64; +@@ -331,12 +331,12 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + pAd->SharedKey[BSS0][KeyIdx].CipherAlg; + Key = pAd->SharedKey[BSS0][KeyIdx].Key; + +- // Set Group key material to Asic ++ /* Set Group key material to Asic */ + AsicAddSharedKeyEntry(pAd, BSS0, KeyIdx, + CipherAlg, Key, NULL, + NULL); + +- // Update WCID attribute table and IVEIV table for this group key table ++ /* Update WCID attribute table and IVEIV table for this group key table */ + RTMPAddWcidAttributeEntry(pAd, BSS0, KeyIdx, + CipherAlg, NULL); + +@@ -364,8 +364,8 @@ rt_ioctl_giwname(struct net_device *dev, + struct iw_request_info *info, char *name, char *extra) + { + strncpy(name, "Ralink STA", IFNAMSIZ); +- // RT2870 2.1.0.0 uses "RT2870 Wireless" +- // RT3090 2.1.0.0 uses "RT2860 Wireless" ++ /* RT2870 2.1.0.0 uses "RT2870 Wireless" */ ++ /* RT3090 2.1.0.0 uses "RT2860 Wireless" */ + return 0; + } + +@@ -378,7 +378,7 @@ int rt_ioctl_siwfreq(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -388,9 +388,9 @@ int rt_ioctl_siwfreq(struct net_device *dev, + return -EINVAL; + + if ((freq->e == 0) && (freq->m <= 1000)) +- chan = freq->m; // Setting by channel number ++ chan = freq->m; /* Setting by channel number */ + else +- MAP_KHZ_TO_CHANNEL_ID((freq->m / 100), chan); // Setting by frequency - search the table , like 2.412G, 2.422G, ++ MAP_KHZ_TO_CHANNEL_ID((freq->m / 100), chan); /* Setting by frequency - search the table , like 2.412G, 2.422G, */ + + if (ChannelSanity(pAdapter, chan) == TRUE) { + pAdapter->CommonCfg.Channel = chan; +@@ -430,7 +430,7 @@ int rt_ioctl_siwmode(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -453,7 +453,7 @@ int rt_ioctl_siwmode(struct net_device *dev, + return -EINVAL; + } + +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key ++ /* Reset Ralink supplicant to not use, it will be set to start when UI set PMK key */ + pAdapter->StaCfg.WpaState = SS_NOTUSE; + + return 0; +@@ -486,7 +486,7 @@ int rt_ioctl_siwsens(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -591,7 +591,7 @@ int rt_ioctl_siwap(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -602,10 +602,10 @@ int rt_ioctl_siwap(struct net_device *dev, + DBGPRINT(RT_DEBUG_TRACE, + ("!!! MLME busy, reset MLME state machine !!!\n")); + } +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. ++ /* tell CNTL state machine to call NdisMSetInformationComplete() after completing */ ++ /* this request, because this request is initiated by NDIS. */ + pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Prevent to connect AP again in STAMlmePeriodicExec ++ /* Prevent to connect AP again in STAMlmePeriodicExec */ + pAdapter->MlmeAux.AutoReconnectSsidLen = 32; + + memset(Bssid, 0, MAC_ADDR_LEN); +@@ -634,7 +634,7 @@ int rt_ioctl_giwap(struct net_device *dev, + ap_addr->sa_family = ARPHRD_ETHER; + memcpy(ap_addr->sa_data, &pAdapter->CommonCfg.Bssid, ETH_ALEN); + } +- // Add for RT2870 ++ /* Add for RT2870 */ + else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) { + ap_addr->sa_family = ARPHRD_ETHER; + memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN); +@@ -667,12 +667,12 @@ static void set_quality(PRTMP_ADAPTER pAdapter, + { + __u8 ChannelQuality; + +- // Normalize Rssi ++ /* Normalize Rssi */ + if (rssi >= -50) + ChannelQuality = 100; +- else if (rssi >= -80) // between -50 ~ -80dbm ++ else if (rssi >= -80) /* between -50 ~ -80dbm */ + ChannelQuality = (__u8) (24 + ((rssi + 80) * 26) / 10); +- else if (rssi >= -90) // between -80 ~ -90dbm ++ else if (rssi >= -90) /* between -80 ~ -90dbm */ + ChannelQuality = (__u8) ((rssi + 90) * 26) / 10; + else + ChannelQuality = 0; +@@ -680,7 +680,7 @@ static void set_quality(PRTMP_ADAPTER pAdapter, + iq->qual = (__u8) ChannelQuality; + + iq->level = (__u8) (rssi); +- iq->noise = (pAdapter->BbpWriteLatch[66] > pAdapter->BbpTuning.FalseCcaUpperThreshold) ? ((__u8) pAdapter->BbpTuning.FalseCcaUpperThreshold) : ((__u8) pAdapter->BbpWriteLatch[66]); // noise level (dBm) ++ iq->noise = (pAdapter->BbpWriteLatch[66] > pAdapter->BbpTuning.FalseCcaUpperThreshold) ? ((__u8) pAdapter->BbpTuning.FalseCcaUpperThreshold) : ((__u8) pAdapter->BbpWriteLatch[66]); /* noise level (dBm) */ + iq->noise += 256 - 143; + iq->updated = pAdapter->iw_stats.qual.updated; + } +@@ -697,12 +697,12 @@ int rt_ioctl_iwaplist(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + data->length = 0; + return 0; +- //return -ENETDOWN; ++ /*return -ENETDOWN; */ + } + + for (i = 0; i < IW_MAX_AP; i++) { +@@ -733,7 +733,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -781,10 +781,10 @@ int rt_ioctl_siwscan(struct net_device *dev, + DBGPRINT(RT_DEBUG_TRACE, + ("!!! MLME busy, reset MLME state machine !!!\n")); + } +- // tell CNTL state machine to call NdisMSetInformationComplete() after completing +- // this request, because this request is initiated by NDIS. ++ /* tell CNTL state machine to call NdisMSetInformationComplete() after completing */ ++ /* this request, because this request is initiated by NDIS. */ + pAdapter->MlmeAux.CurrReqIsFromNdis = FALSE; +- // Reset allowed scan retries ++ /* Reset allowed scan retries */ + pAdapter->StaCfg.ScanCnt = 0; + pAdapter->StaCfg.LastScanTime = Now; + +@@ -837,8 +837,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev >= end_buf) { + return -E2BIG; + } +- //MAC address +- //================================ ++ /*MAC address */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWAP; + iwe.u.ap_addr.sa_family = ARPHRD_ETHER; +@@ -935,8 +935,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //ESSID +- //================================ ++ /*ESSID */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWESSID; + iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].SsidLen; +@@ -950,8 +950,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //Network Type +- //================================ ++ /*Network Type */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWMODE; + if (pAdapter->ScanTab.BssEntry[i].BssType == Ndis802_11IBSS) { +@@ -971,8 +971,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //Channel and Frequency +- //================================ ++ /*Channel and Frequency */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWFREQ; + if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) +@@ -989,8 +989,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //Add quality statistics +- //================================ ++ /*Add quality statistics */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = IWEVQUAL; + iwe.u.qual.level = 0; +@@ -1003,8 +1003,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //Encyption key +- //================================ ++ /*Encyption key */ ++ /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWENCODE; + if (CAP_IS_PRIVACY_ON +@@ -1024,8 +1024,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + +- //Bit Rate +- //================================ ++ /*Bit Rate */ ++ /*================================ */ + if (pAdapter->ScanTab.BssEntry[i].SupRateLen) { + UCHAR tmpRate = + pAdapter->ScanTab.BssEntry[i].SupRate[pAdapter-> +@@ -1083,7 +1083,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + else + return -E2BIG; + } +- //WPA IE ++ /*WPA IE */ + if (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen > 0) { + memset(&iwe, 0, sizeof(iwe)); + memset(&custom[0], 0, MAX_CUSTOM_LEN); +@@ -1099,7 +1099,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + if (current_ev == previous_ev) + return -E2BIG; + } +- //WPA2 IE ++ /*WPA2 IE */ + if (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen > 0) { + memset(&iwe, 0, sizeof(iwe)); + memset(&custom[0], 0, MAX_CUSTOM_LEN); +@@ -1133,7 +1133,7 @@ int rt_ioctl_siwessid(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1142,7 +1142,7 @@ int rt_ioctl_siwessid(struct net_device *dev, + if (data->flags) { + PSTRING pSsidString = NULL; + +- // Includes null character. ++ /* Includes null character. */ + if (data->length > (IW_ESSID_MAX_SIZE + 1)) + return -E2BIG; + +@@ -1155,7 +1155,7 @@ int rt_ioctl_siwessid(struct net_device *dev, + } else + return -ENOMEM; + } else { +- // ANY ssid ++ /* ANY ssid */ + if (Set_SSID_Proc(pAdapter, "") == FALSE) + return -EINVAL; + } +@@ -1183,14 +1183,14 @@ int rt_ioctl_giwessid(struct net_device *dev, + pAdapter->CommonCfg.SsidLen); + } + #ifdef RTMP_MAC_USB +- // Add for RT2870 ++ /* Add for RT2870 */ + else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) { + data->length = pAdapter->CommonCfg.SsidLen; + memcpy(essid, pAdapter->CommonCfg.Ssid, + pAdapter->CommonCfg.SsidLen); + } +-#endif // RTMP_MAC_USB // +- else { //the ANY ssid was specified ++#endif /* RTMP_MAC_USB // */ ++ else { /*the ANY ssid was specified */ + data->length = 0; + DBGPRINT(RT_DEBUG_TRACE, + ("MediaState is not connected, ess\n")); +@@ -1208,7 +1208,7 @@ int rt_ioctl_siwnickn(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1249,7 +1249,7 @@ int rt_ioctl_siwrts(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1278,7 +1278,7 @@ int rt_ioctl_giwrts(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1300,7 +1300,7 @@ int rt_ioctl_siwfrag(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1328,7 +1328,7 @@ int rt_ioctl_giwfrag(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1351,7 +1351,7 @@ int rt_ioctl_siwencode(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1366,7 +1366,7 @@ int rt_ioctl_siwencode(struct net_device *dev, + goto done; + } else if (erq->flags & IW_ENCODE_RESTRICTED + || erq->flags & IW_ENCODE_OPEN) { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled; + pAdapter->StaCfg.GroupCipher = Ndis802_11WEPEnabled; +@@ -1390,7 +1390,7 @@ int rt_ioctl_siwencode(struct net_device *dev, + ("==>rt_ioctl_siwencode::Wrong keyIdx=%d! Using default key instead (%d)\n", + keyIdx, pAdapter->StaCfg.DefaultKeyId)); + +- //Using default key ++ /*Using default key */ + keyIdx = pAdapter->StaCfg.DefaultKeyId; + } else + pAdapter->StaCfg.DefaultKeyId = keyIdx; +@@ -1455,7 +1455,7 @@ rt_ioctl_giwencode(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1469,14 +1469,14 @@ rt_ioctl_giwencode(struct net_device *dev, + erq->length = 0; + erq->flags = IW_ENCODE_DISABLED; + } else if ((kid > 0) && (kid <= 4)) { +- // copy wep key ++ /* copy wep key */ + erq->flags = kid; /* NB: base 1 */ + if (erq->length > pAdapter->SharedKey[BSS0][kid - 1].KeyLen) + erq->length = pAdapter->SharedKey[BSS0][kid - 1].KeyLen; + memcpy(key, pAdapter->SharedKey[BSS0][kid - 1].Key, + erq->length); +- //if ((kid == pAdapter->PortCfg.DefaultKeyId)) +- //erq->flags |= IW_ENCODE_ENABLED; /* XXX */ ++ /*if ((kid == pAdapter->PortCfg.DefaultKeyId)) */ ++ /*erq->flags |= IW_ENCODE_ENABLED; */ /* XXX */ + if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) + erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ + else +@@ -1493,7 +1493,7 @@ rt_ioctl_giwencode(struct net_device *dev, + memcpy(key, + pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId]. + Key, erq->length); +- // copy default key ID ++ /* copy default key ID */ + if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeShared) + erq->flags |= IW_ENCODE_RESTRICTED; /* XXX */ + else +@@ -1595,7 +1595,7 @@ int rt_ioctl_siwmlme(struct net_device *dev, + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + } + break; +-#endif // IW_MLME_DEAUTH // ++#endif /* IW_MLME_DEAUTH // */ + #ifdef IW_MLME_DISASSOC + case IW_MLME_DISASSOC: + DBGPRINT(RT_DEBUG_TRACE, +@@ -1612,7 +1612,7 @@ int rt_ioctl_siwmlme(struct net_device *dev, + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; + MlmeDisassocReqAction(pAd, &MsgElem); + break; +-#endif // IW_MLME_DISASSOC // ++#endif /* IW_MLME_DISASSOC // */ + default: + DBGPRINT(RT_DEBUG_TRACE, + ("====> %s - Unknow Command\n", __func__)); +@@ -1631,7 +1631,7 @@ int rt_ioctl_siwauth(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1712,10 +1712,10 @@ int rt_ioctl_siwauth(struct net_device *dev, + Ndis802_11AuthModeWPA2; + pAdapter->StaCfg.IEEE8021X = FALSE; + } else +- // WEP 1x ++ /* WEP 1x */ + pAdapter->StaCfg.IEEE8021X = TRUE; + } else if (param->value == 0) { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + } + DBGPRINT(RT_DEBUG_TRACE, +@@ -1742,7 +1742,7 @@ int rt_ioctl_siwauth(struct net_device *dev, + pAdapter->StaCfg.PortSecured = + WPA_802_1X_PORT_NOT_SECURED; + else { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + } + DBGPRINT(RT_DEBUG_TRACE, +@@ -1781,7 +1781,7 @@ int rt_ioctl_giwauth(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1831,7 +1831,7 @@ void fnSetCipherKey(IN PRTMP_ADAPTER pAdapter, + LEN_TKIP_RXMICK); + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CipherAlg; + +- // Update group key information to ASIC Shared Key Table ++ /* Update group key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAdapter, + BSS0, + keyIdx, +@@ -1841,14 +1841,14 @@ void fnSetCipherKey(IN PRTMP_ADAPTER pAdapter, + pAdapter->SharedKey[BSS0][keyIdx].RxMic); + + if (bGTK) +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAdapter, + BSS0, + keyIdx, + pAdapter->SharedKey[BSS0][keyIdx]. + CipherAlg, NULL); + else +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAdapter, + BSS0, + keyIdx, +@@ -1869,7 +1869,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -1877,7 +1877,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + + if (encoding->flags & IW_ENCODE_DISABLED) { + keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; +- // set BSSID wcid entry of the Pair-wise Key table as no-security mode ++ /* set BSSID wcid entry of the Pair-wise Key table as no-security mode */ + AsicRemovePairwiseKeyEntry(pAdapter, BSS0, BSSID_WCID); + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_NONE; +@@ -1888,7 +1888,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + ("%s::Remove all keys!(encoding->flags = %x)\n", + __func__, encoding->flags)); + } else { +- // Get Key Index and convet to our own defined key index ++ /* Get Key Index and convet to our own defined key index */ + keyIdx = (encoding->flags & IW_ENCODE_INDEX) - 1; + if ((keyIdx < 0) || (keyIdx >= NR_WEP_KEYS)) + return -EINVAL; +@@ -1930,7 +1930,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + Ndis802_11GroupWEP40Enabled + || pAdapter->StaCfg.GroupCipher == + Ndis802_11GroupWEP104Enabled) { +- // Set Group key material to Asic ++ /* Set Group key material to Asic */ + AsicAddSharedKeyEntry(pAdapter, BSS0, keyIdx, + pAdapter-> + SharedKey[BSS0][keyIdx]. +@@ -1939,7 +1939,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + SharedKey[BSS0][keyIdx]. + Key, NULL, NULL); + +- // Update WCID attribute table and IVEIV table for this group key table ++ /* Update WCID attribute table and IVEIV table for this group key table */ + RTMPAddWcidAttributeEntry(pAdapter, BSS0, + keyIdx, + pAdapter-> +@@ -1949,7 +1949,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + + STA_PORT_SECURED(pAdapter); + +- // Indicate Connected for GUI ++ /* Indicate Connected for GUI */ + pAdapter->IndicateMediaState = + NdisMediaStateConnected; + } +@@ -1964,7 +1964,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + CIPHER_TKIP, FALSE, ext); + if (pAdapter->StaCfg.AuthMode >= + Ndis802_11AuthModeWPA2) { +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + pAdapter->IndicateMediaState = + NdisMediaStateConnected; +@@ -1975,8 +1975,8 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + fnSetCipherKey(pAdapter, keyIdx, + CIPHER_TKIP, TRUE, ext); + +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /* set 802.1x port control */ ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + pAdapter->IndicateMediaState = + NdisMediaStateConnected; +@@ -1990,7 +1990,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + FALSE, ext); + if (pAdapter->StaCfg.AuthMode >= + Ndis802_11AuthModeWPA2) +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + pAdapter->IndicateMediaState = + NdisMediaStateConnected; +@@ -1998,8 +1998,8 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + fnSetCipherKey(pAdapter, keyIdx, CIPHER_AES, + TRUE, ext); + +- // set 802.1x port control +- //pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /* set 802.1x port control */ ++ /*pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAdapter); + pAdapter->IndicateMediaState = + NdisMediaStateConnected; +@@ -2142,7 +2142,7 @@ int rt_ioctl_giwgenie(struct net_device *dev, + } else { + UCHAR RSNIe = IE_WPA; + +- if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) // ID, Len ++ if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) /* ID, Len */ + return -E2BIG; + wrqu->data.length = pAd->StaCfg.RSNIE_Len + 2; + +@@ -2183,7 +2183,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + case IW_PMKSA_REMOVE: + for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; + CachedIdx++) { +- // compare the BSSID ++ /* compare the BSSID */ + if (NdisEqualMemory + (pPmksa->bssid.sa_data, + pAd->StaCfg.SavedPMK[CachedIdx].BSSID, +@@ -2219,7 +2219,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + case IW_PMKSA_ADD: + for (CachedIdx = 0; CachedIdx < pAd->StaCfg.SavedPMKNum; + CachedIdx++) { +- // compare the BSSID ++ /* compare the BSSID */ + if (NdisEqualMemory + (pPmksa->bssid.sa_data, + pAd->StaCfg.SavedPMK[CachedIdx].BSSID, +@@ -2227,7 +2227,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + break; + } + +- // Found, replace it ++ /* Found, replace it */ + if (CachedIdx < PMKID_NO) { + DBGPRINT(RT_DEBUG_OFF, + ("Update PMKID, idx = %d\n", CachedIdx)); +@@ -2238,9 +2238,9 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + PMKID[0], pPmksa->pmkid, 16); + pAd->StaCfg.SavedPMKNum++; + } +- // Not found, replace the last one ++ /* Not found, replace the last one */ + else { +- // Randomly replace one ++ /* Randomly replace one */ + CachedIdx = (pPmksa->bssid.sa_data[5] % PMKID_NO); + DBGPRINT(RT_DEBUG_OFF, + ("Update PMKID, idx = %d\n", CachedIdx)); +@@ -2272,7 +2272,7 @@ int rt_ioctl_siwrate(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAd, dev); + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, + ("rt_ioctl_siwrate::Network is down!\n")); +@@ -2285,7 +2285,7 @@ int rt_ioctl_siwrate(struct net_device *dev, + rate = X, fixed = 1 => (fixed rate X) + */ + if (rate == -1) { +- //Auto Rate ++ /*Auto Rate */ + pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO; + pAd->StaCfg.bAutoTxRateSwitch = TRUE; + if ((pAd->CommonCfg.PhyMode <= PHY_11G) || +@@ -2311,7 +2311,7 @@ int rt_ioctl_siwrate(struct net_device *dev, + pAd->StaCfg.DesiredTransmitSetting.field. + MCS)); + } else { +- // TODO: rate = X, fixed = 0 => (rates <= X) ++ /* TODO: rate = X, fixed = 0 => (rates <= X) */ + return -EOPNOTSUPP; + } + } +@@ -2342,7 +2342,7 @@ int rt_ioctl_giwrate(struct net_device *dev, + GET_PAD_FROM_NET_DEV(pAd, dev); + + rate_count = sizeof(ralinkrate) / sizeof(__s32); +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); + return -ENETDOWN; +@@ -2359,7 +2359,7 @@ int rt_ioctl_giwrate(struct net_device *dev, + pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; + + if (ht_setting.field.MODE >= MODE_HTMIX) { +-// rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); ++/* rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); */ + rate_index = + 12 + ((UCHAR) ht_setting.field.BW * 24) + + ((UCHAR) ht_setting.field.ShortGI * 48) + +@@ -2460,7 +2460,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- //check if the interface is down ++ /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { + { + DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); +@@ -2468,7 +2468,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + } + } + +- { // determine this ioctl command is comming from which interface. ++ { /* determine this ioctl command is comming from which interface. */ + pObj->ioctl_if_type = INT_MAIN; + pObj->ioctl_if = MAIN_MBSSID; + } +@@ -2484,41 +2484,41 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + rt_ioctl_giwname(net_dev, NULL, name, NULL); + break; + } +- case SIOCGIWESSID: //Get ESSID ++ case SIOCGIWESSID: /*Get ESSID */ + { + struct iw_point *essid = &wrq->u.essid; + rt_ioctl_giwessid(net_dev, NULL, essid, essid->pointer); + break; + } +- case SIOCSIWESSID: //Set ESSID ++ case SIOCSIWESSID: /*Set ESSID */ + { + struct iw_point *essid = &wrq->u.essid; + rt_ioctl_siwessid(net_dev, NULL, essid, essid->pointer); + break; + } +- case SIOCSIWNWID: // set network id (the cell) +- case SIOCGIWNWID: // get network id ++ case SIOCSIWNWID: /* set network id (the cell) */ ++ case SIOCGIWNWID: /* get network id */ + Status = -EOPNOTSUPP; + break; +- case SIOCSIWFREQ: //set channel/frequency (Hz) ++ case SIOCSIWFREQ: /*set channel/frequency (Hz) */ + { + struct iw_freq *freq = &wrq->u.freq; + rt_ioctl_siwfreq(net_dev, NULL, freq, NULL); + break; + } +- case SIOCGIWFREQ: // get channel/frequency (Hz) ++ case SIOCGIWFREQ: /* get channel/frequency (Hz) */ + { + struct iw_freq *freq = &wrq->u.freq; + rt_ioctl_giwfreq(net_dev, NULL, freq, NULL); + break; + } +- case SIOCSIWNICKN: //set node name/nickname ++ case SIOCSIWNICKN: /*set node name/nickname */ + { +- //struct iw_point *data=&wrq->u.data; +- //rt_ioctl_siwnickn(net_dev, NULL, data, NULL); ++ /*struct iw_point *data=&wrq->u.data; */ ++ /*rt_ioctl_siwnickn(net_dev, NULL, data, NULL); */ + break; + } +- case SIOCGIWNICKN: //get node name/nickname ++ case SIOCGIWNICKN: /*get node name/nickname */ + { + struct iw_point *erq = NULL; + erq = &wrq->u.data; +@@ -2528,37 +2528,37 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + erq->length); + break; + } +- case SIOCGIWRATE: //get default bit rate (bps) ++ case SIOCGIWRATE: /*get default bit rate (bps) */ + rt_ioctl_giwrate(net_dev, NULL, &wrq->u, NULL); + break; +- case SIOCSIWRATE: //set default bit rate (bps) ++ case SIOCSIWRATE: /*set default bit rate (bps) */ + rt_ioctl_siwrate(net_dev, NULL, &wrq->u, NULL); + break; +- case SIOCGIWRTS: // get RTS/CTS threshold (bytes) ++ case SIOCGIWRTS: /* get RTS/CTS threshold (bytes) */ + { + struct iw_param *rts = &wrq->u.rts; + rt_ioctl_giwrts(net_dev, NULL, rts, NULL); + break; + } +- case SIOCSIWRTS: //set RTS/CTS threshold (bytes) ++ case SIOCSIWRTS: /*set RTS/CTS threshold (bytes) */ + { + struct iw_param *rts = &wrq->u.rts; + rt_ioctl_siwrts(net_dev, NULL, rts, NULL); + break; + } +- case SIOCGIWFRAG: //get fragmentation thr (bytes) ++ case SIOCGIWFRAG: /*get fragmentation thr (bytes) */ + { + struct iw_param *frag = &wrq->u.frag; + rt_ioctl_giwfrag(net_dev, NULL, frag, NULL); + break; + } +- case SIOCSIWFRAG: //set fragmentation thr (bytes) ++ case SIOCSIWFRAG: /*set fragmentation thr (bytes) */ + { + struct iw_param *frag = &wrq->u.frag; + rt_ioctl_siwfrag(net_dev, NULL, frag, NULL); + break; + } +- case SIOCGIWENCODE: //get encoding token & mode ++ case SIOCGIWENCODE: /*get encoding token & mode */ + { + struct iw_point *erq = &wrq->u.encoding; + if (erq) +@@ -2566,7 +2566,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + erq->pointer); + break; + } +- case SIOCSIWENCODE: //set encoding token & mode ++ case SIOCSIWENCODE: /*set encoding token & mode */ + { + struct iw_point *erq = &wrq->u.encoding; + if (erq) +@@ -2574,41 +2574,41 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + erq->pointer); + break; + } +- case SIOCGIWAP: //get access point MAC addresses ++ case SIOCGIWAP: /*get access point MAC addresses */ + { + struct sockaddr *ap_addr = &wrq->u.ap_addr; + rt_ioctl_giwap(net_dev, NULL, ap_addr, + ap_addr->sa_data); + break; + } +- case SIOCSIWAP: //set access point MAC addresses ++ case SIOCSIWAP: /*set access point MAC addresses */ + { + struct sockaddr *ap_addr = &wrq->u.ap_addr; + rt_ioctl_siwap(net_dev, NULL, ap_addr, + ap_addr->sa_data); + break; + } +- case SIOCGIWMODE: //get operation mode ++ case SIOCGIWMODE: /*get operation mode */ + { + __u32 *mode = &wrq->u.mode; + rt_ioctl_giwmode(net_dev, NULL, mode, NULL); + break; + } +- case SIOCSIWMODE: //set operation mode ++ case SIOCSIWMODE: /*set operation mode */ + { + __u32 *mode = &wrq->u.mode; + rt_ioctl_siwmode(net_dev, NULL, mode, NULL); + break; + } +- case SIOCGIWSENS: //get sensitivity (dBm) +- case SIOCSIWSENS: //set sensitivity (dBm) +- case SIOCGIWPOWER: //get Power Management settings +- case SIOCSIWPOWER: //set Power Management settings +- case SIOCGIWTXPOW: //get transmit power (dBm) +- case SIOCSIWTXPOW: //set transmit power (dBm) +- case SIOCGIWRANGE: //Get range of parameters +- case SIOCGIWRETRY: //get retry limits and lifetime +- case SIOCSIWRETRY: //set retry limits and lifetime ++ case SIOCGIWSENS: /*get sensitivity (dBm) */ ++ case SIOCSIWSENS: /*set sensitivity (dBm) */ ++ case SIOCGIWPOWER: /*get Power Management settings */ ++ case SIOCSIWPOWER: /*set Power Management settings */ ++ case SIOCGIWTXPOW: /*get transmit power (dBm) */ ++ case SIOCSIWTXPOW: /*set transmit power (dBm) */ ++ case SIOCGIWRANGE: /*Get range of parameters */ ++ case SIOCGIWRETRY: /*get retry limits and lifetime */ ++ case SIOCSIWRETRY: /*set retry limits and lifetime */ + case RT_PRIV_IOCTL: + case RT_PRIV_IOCTL_EXT: + case RTPRIV_IOCTL_SET: +@@ -2625,7 +2625,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + break; + } + +- if (StateMachineTouched) // Upper layer sent a MLME-related operations ++ if (StateMachineTouched) /* Upper layer sent a MLME-related operations */ + RTMP_MLME_HANDLER(pAd); + + return Status; +@@ -2650,7 +2650,7 @@ INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + if (strlen(arg) != 0) { + NdisMoveMemory(Ssid.Ssid, arg, strlen(arg)); + Ssid.SsidLength = strlen(arg); +- } else //ANY ssid ++ } else /*ANY ssid */ + { + Ssid.SsidLength = 0; + memcpy(Ssid.Ssid, "", 0); +@@ -2704,7 +2704,7 @@ INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + } else + success = FALSE; + +- if (StateMachineTouched) // Upper layer sent a MLME-related operations ++ if (StateMachineTouched) /* Upper layer sent a MLME-related operations */ + RTMP_MLME_HANDLER(pAdapter); + + return success; +@@ -2724,7 +2724,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + + if (strcmp(arg, "Adhoc") == 0) { + if (pAdapter->StaCfg.BssType != BSS_ADHOC) { +- // Config has changed ++ /* Config has changed */ + pAdapter->bConfigChanged = TRUE; + if (MONITOR_ON(pAdapter)) { + RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, +@@ -2738,9 +2738,9 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + LinkDown(pAdapter, FALSE); + } + if (INFRA_ON(pAdapter)) { +- //BOOLEAN Cancelled; +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. ++ /*BOOLEAN Cancelled; */ ++ /* Set the AutoReconnectSsid to prevent it reconnect to old SSID */ ++ /* Since calling this indicate user don't want to connect to that SSID anymore. */ + pAdapter->MlmeAux.AutoReconnectSsidLen = 32; + NdisZeroMemory(pAdapter->MlmeAux. + AutoReconnectSsid, +@@ -2759,7 +2759,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + ("===>Set_NetworkType_Proc::(AD-HOC)\n")); + } else if (strcmp(arg, "Infra") == 0) { + if (pAdapter->StaCfg.BssType != BSS_INFRA) { +- // Config has changed ++ /* Config has changed */ + pAdapter->bConfigChanged = TRUE; + if (MONITOR_ON(pAdapter)) { + RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, +@@ -2773,8 +2773,8 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + LinkDown(pAdapter, FALSE); + } + if (ADHOC_ON(pAdapter)) { +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. ++ /* Set the AutoReconnectSsid to prevent it reconnect to old SSID */ ++ /* Since calling this indicate user don't want to connect to that SSID anymore. */ + pAdapter->MlmeAux.AutoReconnectSsidLen = 32; + NdisZeroMemory(pAdapter->MlmeAux. + AutoReconnectSsid, +@@ -2794,9 +2794,9 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_ADHOC_ON); + OPSTATUS_SET_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED); +- // disable all periodic state machine ++ /* disable all periodic state machine */ + pAdapter->StaCfg.bAutoReconnect = FALSE; +- // reset all mlme state machine ++ /* reset all mlme state machine */ + RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, + ("fOP_STATUS_MEDIA_STATE_CONNECTED \n")); +@@ -2812,7 +2812,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 && + pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == + EXTCHA_ABOVE) { +- // 40MHz ,control channel at lower ++ /* 40MHz ,control channel at lower */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, + &bbpValue); + bbpValue &= (~0x18); +@@ -2820,7 +2820,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, + bbpValue); + pAdapter->CommonCfg.BBPCurrentBW = BW_40; +- // RX : control channel at lower ++ /* RX : control channel at lower */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R3, + &bbpValue); + bbpValue &= (~0x20); +@@ -2846,7 +2846,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + BW_40 + && pAdapter->CommonCfg.RegTransmitSetting.field. + EXTCHA == EXTCHA_BELOW) { +- // 40MHz ,control channel at upper ++ /* 40MHz ,control channel at upper */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, + &bbpValue); + bbpValue &= (~0x18); +@@ -2875,7 +2875,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + pAdapter->CommonCfg.Channel, + pAdapter->CommonCfg.CentralChannel)); + } else { +- // 20MHz ++ /* 20MHz */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, + &bbpValue); + bbpValue &= (~0x18); +@@ -2889,13 +2889,13 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + ("BW_20, Channel(%d)\n", + pAdapter->CommonCfg.Channel)); + } +- // Enable Rx with promiscuous reception ++ /* Enable Rx with promiscuous reception */ + RTMP_IO_WRITE32(pAdapter, RX_FILTR_CFG, 0x3); +- // ASIC supporsts sniffer function with replacing RSSI with timestamp. +- //RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); +- //Value |= (0x80); +- //RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); +- // disable sync ++ /* ASIC supporsts sniffer function with replacing RSSI with timestamp. */ ++ /*RTMP_IO_READ32(pAdapter, MAC_SYS_CTRL, &Value); */ ++ /*Value |= (0x80); */ ++ /*RTMP_IO_WRITE32(pAdapter, MAC_SYS_CTRL, Value); */ ++ /* disable sync */ + RTMP_IO_READ32(pAdapter, BCN_TIME_CFG, &csr.word); + csr.field.bBeaconGen = 0; + csr.field.bTBTTEnable = 0; +@@ -2903,11 +2903,11 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + RTMP_IO_WRITE32(pAdapter, BCN_TIME_CFG, csr.word); + + pAdapter->StaCfg.BssType = BSS_MONITOR; +- pAdapter->net_dev->type = ARPHRD_IEEE80211_PRISM; //ARPHRD_IEEE80211; // IEEE80211 ++ pAdapter->net_dev->type = ARPHRD_IEEE80211_PRISM; /*ARPHRD_IEEE80211; // IEEE80211 */ + DBGPRINT(RT_DEBUG_TRACE, + ("===>Set_NetworkType_Proc::(MONITOR)\n")); + } +- // Reset Ralink supplicant to not use, it will be set to start when UI set PMK key ++ /* Reset Ralink supplicant to not use, it will be set to start when UI set PMK key */ + pAdapter->StaCfg.WpaState = SS_NOTUSE; + + DBGPRINT(RT_DEBUG_TRACE, +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index ebc2261..74529d1 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -26,9 +26,9 @@ + + #include "rt_config.h" + +-// Following information will be show when you run 'modinfo' +-// *** If you have a solution for the bug in current version of driver, please mail to me. +-// Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** ++/* Following information will be show when you run 'modinfo' */ ++/* *** If you have a solution for the bug in current version of driver, please mail to me. */ ++/* Otherwise post to forum in ralinktech's web site(www.ralinktech.com) and let all users help you. *** */ + MODULE_AUTHOR("Paul Lin "); + MODULE_DESCRIPTION("RT2870/RT3070 Wireless Lan Linux Driver"); + MODULE_LICENSE("GPL"); +@@ -101,7 +101,7 @@ struct usb_device_id rtusb_usb_id[] = { + {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */ + {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */ + {USB_DEVICE(0x050d, 0x815c)}, /* Belkin F5D8053 */ +-#endif // RT2870 // ++#endif /* RT2870 // */ + #ifdef RT3070 + {USB_DEVICE(0x148F, 0x3070)}, /* Ralink 3070 */ + {USB_DEVICE(0x148F, 0x3071)}, /* Ralink 3071 */ +@@ -134,7 +134,7 @@ struct usb_device_id rtusb_usb_id[] = { + {USB_DEVICE(0x5A57, 0x0283)}, /* Zinwell 3072 */ + {USB_DEVICE(0x04BB, 0x0945)}, /* I-O DATA 3072 */ + {USB_DEVICE(0x203D, 0x1480)}, /* Encore 3070 */ +-#endif // RT3070 // ++#endif /* RT3070 // */ + {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom WL-608 */ + {USB_DEVICE(0x1737, 0x0077)}, /* Linksys WUSB54GC-EU v3 */ + {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */ +@@ -207,14 +207,14 @@ BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + + /**************************************************************************/ + /**************************************************************************/ +-//tested for kernel 2.6series ++/*tested for kernel 2.6series */ + /**************************************************************************/ + /**************************************************************************/ + + #ifdef CONFIG_PM + static int rt2870_suspend(struct usb_interface *intf, pm_message_t state); + static int rt2870_resume(struct usb_interface *intf); +-#endif // CONFIG_PM // ++#endif /* CONFIG_PM // */ + + static int rtusb_probe(struct usb_interface *intf, + const struct usb_device_id *id); +@@ -264,8 +264,8 @@ static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + ((iface_desc->endpoint[i].desc. + bEndpointAddress & USB_ENDPOINT_DIR_MASK) == + USB_DIR_OUT)) { +- // there are 6 bulk out EP. EP6 highest priority. +- // EP1-4 is EDCA. EP5 is HCCA. ++ /* there are 6 bulk out EP. EP6 highest priority. */ ++ /* EP1-4 is EDCA. EP5 is HCCA. */ + pAd->BulkOutEpAddr[BulkOutIdx++] = + iface_desc->endpoint[i].desc.bEndpointAddress; + pAd->BulkOutMaxPacketSize = +@@ -340,8 +340,8 @@ resume:rt2870_resume, + + VOID RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { +- // clear PS packets +- // clear TxSw packets ++ /* clear PS packets */ ++ /* clear TxSw packets */ + } + + static int rt2870_suspend(struct usb_interface *intf, pm_message_t state) +@@ -379,16 +379,16 @@ static int rt2870_resume(struct usb_interface *intf) + DBGPRINT(RT_DEBUG_TRACE, ("<=== rt2870_resume()\n")); + return 0; + } +-#endif // CONFIG_PM // ++#endif /* CONFIG_PM // */ + +-// Init driver module ++/* Init driver module */ + INT __init rtusb_init(void) + { + printk("rtusb init --->\n"); + return usb_register(&rtusb_driver); + } + +-// Deinit driver module ++/* Deinit driver module */ + VOID __exit rtusb_exit(void) + { + usb_deregister(&rtusb_driver); +@@ -442,7 +442,7 @@ INT MlmeThread(IN void *Context) + #endif + + /* lock the device pointers , need to check if required */ +- //down(&(pAd->usbdev_semaphore)); ++ /*down(&(pAd->usbdev_semaphore)); */ + + if (!pAd->PM_FlgSuspend) + MlmeHandler(pAd); +@@ -521,7 +521,7 @@ INT RTUSBCmdThread(IN void *Context) + CMDHandler(pAd); + } + +- if (pAd && !pAd->PM_FlgSuspend) { // Clear the CmdQElements. ++ if (pAd && !pAd->PM_FlgSuspend) { /* Clear the CmdQElements. */ + CmdQElmt *pCmdQElmt = NULL; + + NdisAcquireSpinLock(&pAd->CmdQLock); +@@ -633,10 +633,10 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + fRTMP_ADAPTER_NIC_NOT_EXIST | + fRTMP_ADAPTER_BULKOUT_RESET))) + ) { +- // FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! ++ /* FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! */ + pHTTXContext = + (PHT_TX_CONTEXT) (&pAd->TxContext[idx]); +- if (pHTTXContext->IRPPending) { // Check TxContext. ++ if (pHTTXContext->IRPPending) { /* Check TxContext. */ + pUrb = pHTTXContext->pUrb; + + actual_length = pUrb->actual_length; +@@ -647,7 +647,7 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + PTX_CONTEXT pMLMEContext, pNULLContext, + pPsPollContext; + +- //Check MgmtContext. ++ /*Check MgmtContext. */ + pMLMEContext = + (PTX_CONTEXT) (pAd->MgmtRing. + Cell[pAd->MgmtRing. +@@ -688,7 +688,7 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + && pAd->TransferedLength[idx] < + transfer_buffer_length + && actual_length != 0 +-// && TxRxQ_Pcnt==0 ++/* && TxRxQ_Pcnt==0 */ + && pAd->watchDogTxPendingCnt[idx] > + 3) + || isDataPacket == FALSE +@@ -699,10 +699,10 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + idx)); + DBGPRINT(RT_DEBUG_TRACE, + ("Unlink the pending URB!\n")); +- // unlink it now ++ /* unlink it now */ + RTUSB_UNLINK_URB(pUrb); +- // Sleep 200 microseconds to give cancellation time to work +- //RTMPusecDelay(200); ++ /* Sleep 200 microseconds to give cancellation time to work */ ++ /*RTMPusecDelay(200); */ + needDumpSeq = TRUE; + } + } else { +@@ -721,7 +721,7 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + } + } + +- // For Sigma debug, dump the ba_reordering sequence. ++ /* For Sigma debug, dump the ba_reordering sequence. */ + if ((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) { + USHORT Idx; + PBA_REC_ENTRY pBAEntry = NULL; +@@ -780,22 +780,22 @@ static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) + } + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST); + +- // for debug, wait to show some messages to /proc system ++ /* for debug, wait to show some messages to /proc system */ + udelay(1); + + RtmpPhyNetDevExit(pAd, pAd->net_dev); + +- // FIXME: Shall we need following delay and flush the schedule?? ++ /* FIXME: Shall we need following delay and flush the schedule?? */ + udelay(1); + flush_scheduled_work(); + udelay(1); + +- // free the root net_device ++ /* free the root net_device */ + RtmpOSNetDevFree(pAd->net_dev); + + RtmpRaDevCtrlExit(pAd); + +- // release a use of the usb device structure ++ /* release a use of the usb device structure */ + usb_put_dev(dev); + udelay(1); + +@@ -815,12 +815,12 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + + DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n")); + +- // Check chipset vendor/product ID +- //if (RT28XXChipsetCheck(_dev_p) == FALSE) +- // goto err_out; ++ /* Check chipset vendor/product ID */ ++ /*if (RT28XXChipsetCheck(_dev_p) == FALSE) */ ++ /* goto err_out; */ + +-//RtmpDevInit============================================= +- // Allocate RTMP_ADAPTER adapter structure ++/*RtmpDevInit============================================= */ ++ /* Allocate RTMP_ADAPTER adapter structure */ + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); + if (handle == NULL) { + printk +@@ -834,18 +834,18 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + kfree(handle); + goto err_out; + } +-//USBDevInit============================================== ++/*USBDevInit============================================== */ + if (USBDevConfigInit(usb_dev, intf, pAd) == FALSE) + goto err_out_free_radev; + + RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_USB); + +-//NetDevInit============================================== ++/*NetDevInit============================================== */ + net_dev = RtmpPhyNetDevInit(pAd, &netDevHook); + if (net_dev == NULL) + goto err_out_free_radev; + +- // Here are the net_device structure with usb specific parameters. ++ /* Here are the net_device structure with usb specific parameters. */ + /* for supporting Network Manager. + * Set the sysfs physical device reference for the network logical device if set prior to registration will + * cause a symlink during initialization. +@@ -854,8 +854,8 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + + pAd->StaCfg.OriDevType = net_dev->type; + +-//All done, it's time to register the net device to linux kernel. +- // Register this device ++/*All done, it's time to register the net device to linux kernel. */ ++ /* Register this device */ + status = RtmpOSNetDevAttach(net_dev, &netDevHook); + if (status != 0) + goto err_out_free_netdev; +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index 269dedc..a45f648 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -40,11 +40,11 @@ + #ifdef RTMP_MAC_USB + + #include "../rt_config.h" +-// Match total 6 bulkout endpoint to corresponding queue. ++/* Match total 6 bulkout endpoint to corresponding queue. */ + UCHAR EpToQueue[6] = + { FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT }; + +-//static BOOLEAN SingleBulkOut = FALSE; ++/*static BOOLEAN SingleBulkOut = FALSE; */ + + void RTUSB_FILL_BULK_URB(struct urb *pUrb, + struct usb_device *pUsb_Dev, +@@ -69,7 +69,7 @@ VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + pUrb = pTxContext->pUrb; + ASSERT(pUrb); + +- // Store BulkOut PipeId ++ /* Store BulkOut PipeId */ + pTxContext->BulkOutPipeId = BulkOutPipeId; + + if (pTxContext->bAggregatible) { +@@ -79,7 +79,7 @@ VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + (PUCHAR) pTxContext->TransferBuffer->field.WirelessPacket; + } + +- //Initialize a tx bulk urb ++ /*Initialize a tx bulk urb */ + RTUSB_FILL_BULK_URB(pUrb, + pObj->pUsb_Dev, + usb_sndbulkpipe(pObj->pUsb_Dev, +@@ -108,14 +108,14 @@ VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + pUrb = pTxContext->pUrb; + ASSERT(pUrb); + +- // Store BulkOut PipeId ++ /* Store BulkOut PipeId */ + pTxContext->BulkOutPipeId = BulkOutPipeId; + + pSrc = + &pTxContext->TransferBuffer->field.WirelessPacket[pTxContext-> + NextBulkOutPosition]; + +- //Initialize a tx bulk urb ++ /*Initialize a tx bulk urb */ + RTUSB_FILL_BULK_URB(pUrb, + pObj->pUsb_Dev, + usb_sndbulkpipe(pObj->pUsb_Dev, +@@ -142,7 +142,7 @@ VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + else + RX_bulk_size = MAX_RXBULK_SIZE; + +- //Initialize a rx bulk urb ++ /*Initialize a rx bulk urb */ + RTUSB_FILL_BULK_URB(pUrb, + pObj->pUsb_Dev, + usb_rcvbulkpipe(pObj->pUsb_Dev, pAd->BulkInEpAddr), +@@ -223,7 +223,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + pAd->BulkOutPending[BulkOutPipeId] = FALSE; + +- // Clear Data flag ++ /* Clear Data flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, + (fRTUSB_BULK_OUT_DATA_FRAG << + BulkOutPipeId)); +@@ -234,15 +234,15 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + return; + } +- // Clear Data flag ++ /* Clear Data flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, + (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)); + RTUSB_CLEAR_BULK_FLAG(pAd, + (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId)); + +- //DBGPRINT(RT_DEBUG_TRACE,("BulkOut-B:I=0x%lx, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", in_interrupt(), +- // pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, +- // pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); ++ /*DBGPRINT(RT_DEBUG_TRACE,("BulkOut-B:I=0x%lx, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", in_interrupt(), */ ++ /* pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, */ ++ /* pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); */ + pHTTXContext->NextBulkOutPosition = pHTTXContext->ENextBulkOutPosition; + ThisBulkSize = 0; + TmpBulkEndPos = pHTTXContext->NextBulkOutPosition; +@@ -282,12 +282,12 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + ("RTUSBBulkOutDataPacket AMPDU = %d.\n", + pTxWI->AMPDU)); + +- // add by Iverson, limit BulkOut size to 4k to pass WMM b mode 2T1R test items +- //if ((ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) ++ /* add by Iverson, limit BulkOut size to 4k to pass WMM b mode 2T1R test items */ ++ /*if ((ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ + if ((ThisBulkSize != 0) && (pTxWI->PHYMODE == MODE_CCK)) { + if (((ThisBulkSize & 0xffff8000) != 0) + || ((ThisBulkSize & 0x1000) == 0x1000)) { +- // Limit BulkOut size to about 4k bytes. ++ /* Limit BulkOut size to about 4k bytes. */ + pHTTXContext->ENextBulkOutPosition = + TmpBulkEndPos; + break; +@@ -297,21 +297,21 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + 0)) + /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ + ) { +- // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. +- // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. ++ /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */ ++ /* For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. */ + pHTTXContext->ENextBulkOutPosition = + TmpBulkEndPos; + break; + } + } +- // end Iverson ++ /* end Iverson */ + else { +- if (((ThisBulkSize & 0xffff8000) != 0) || ((ThisBulkSize & 0x6000) == 0x6000)) { // Limit BulkOut size to about 24k bytes. ++ if (((ThisBulkSize & 0xffff8000) != 0) || ((ThisBulkSize & 0x6000) == 0x6000)) { /* Limit BulkOut size to about 24k bytes. */ + pHTTXContext->ENextBulkOutPosition = + TmpBulkEndPos; + break; +- } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ) { // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. +- // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. ++ } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ) { /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */ ++ /* For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. */ + pHTTXContext->ENextBulkOutPosition = + TmpBulkEndPos; + break; +@@ -368,10 +368,10 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + pAd->BulkOutPending[BulkOutPipeId] = FALSE; + BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], + IrqFlags); +- //DBGPRINT(RT_DEBUG_LOUD,("Out:pTxInfo->USBDMATxPktLen=%d!\n", pTxInfo->USBDMATxPktLen)); ++ /*DBGPRINT(RT_DEBUG_LOUD,("Out:pTxInfo->USBDMATxPktLen=%d!\n", pTxInfo->USBDMATxPktLen)); */ + return; + } +- // Increase Total transmit byte counter ++ /* Increase Total transmit byte counter */ + pAd->RalinkCounters.OneSecTransmittedByteCount += + pTxWI->MPDUtotalByteCount; + pAd->RalinkCounters.TransmittedByteCount += +@@ -379,7 +379,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + + pLastTxInfo = pTxInfo; + +- // Make sure we use EDCA QUEUE. ++ /* Make sure we use EDCA QUEUE. */ + pTxInfo->QSEL = FIFO_EDCA; + ThisBulkSize += (pTxInfo->USBDMATxPktLen + 4); + TmpBulkEndPos += (pTxInfo->USBDMATxPktLen + 4); +@@ -400,7 +400,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + + } while (TRUE); + +- // adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. ++ /* adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. */ + if (pLastTxInfo) { + pLastTxInfo->USBDMANextVLD = 0; + } +@@ -446,7 +446,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + pBuf[0], pBuf[1], pBuf[2], pBuf[3], + pBuf[4], pBuf[5], pBuf[6], pBuf[7])); + } +- //DBGPRINT(RT_DEBUG_LOUD,("ENPos==CWPos=%ld, CWRPos=%ld, bCSPad=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->bCopySavePad)); ++ /*DBGPRINT(RT_DEBUG_LOUD,("ENPos==CWPos=%ld, CWRPos=%ld, bCSPad=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->bCopySavePad)); */ + } + + if (pAd->bForcePrintTX == TRUE) +@@ -456,9 +456,9 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + pHTTXContext->NextBulkOutPosition, + pHTTXContext->ENextBulkOutPosition, + pHTTXContext->bCopySavePad)); +- //DBGPRINT(RT_DEBUG_LOUD,("BulkOut-A:Size=%ld, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, bLRound=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, bTxQLastRound)); ++ /*DBGPRINT(RT_DEBUG_LOUD,("BulkOut-A:Size=%ld, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, bLRound=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, bTxQLastRound)); */ + +- // USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize. ++ /* USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize. */ + pAppendant = &pWirelessPkt[TmpBulkEndPos]; + NdisZeroMemory(pAppendant, 8); + ThisBulkSize += 4; +@@ -470,7 +470,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + pAd->watchDogTxPendingCnt[BulkOutPipeId] = 1; + BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2); + +- // Init Tx context descriptor ++ /* Init Tx context descriptor */ + RTUSBInitHTTxDesc(pAd, pHTTXContext, BulkOutPipeId, ThisBulkSize, + (usb_complete_t) RTUSBBulkOutDataPacketComplete); + +@@ -506,7 +506,7 @@ VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + pAd = pHTTXContext->pAd; + pObj = (POS_COOKIE) pAd->OS_Cookie; + +- // Store BulkOut PipeId ++ /* Store BulkOut PipeId */ + BulkOutPipeId = pHTTXContext->BulkOutPipeId; + pAd->BulkOutDataOneSecCount++; + +@@ -562,13 +562,13 @@ VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + pNullContext->IRPPending = TRUE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + +- // Increase Total transmit byte counter ++ /* Increase Total transmit byte counter */ + pAd->RalinkCounters.TransmittedByteCount += pNullContext->BulkOutSize; + +- // Clear Null frame bulk flag ++ /* Clear Null frame bulk flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); + +- // Init Tx context descriptor ++ /* Init Tx context descriptor */ + RTUSBInitTxDesc(pAd, pNullContext, 0, + (usb_complete_t) RTUSBBulkOutNullFrameComplete); + +@@ -588,7 +588,7 @@ VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + + } + +-// NULL frame use BulkOutPipeId = 0 ++/* NULL frame use BulkOutPipeId = 0 */ + VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; +@@ -633,7 +633,7 @@ VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) + (pMLMEContext->InUse == FALSE) || + (pMLMEContext->bWaitingBulkOut == FALSE)) { + +- // Clear MLME bulk flag ++ /* Clear MLME bulk flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); + + return; +@@ -652,17 +652,17 @@ VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) + pMLMEContext->bWaitingBulkOut = FALSE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags); + +- // Increase Total transmit byte counter ++ /* Increase Total transmit byte counter */ + pAd->RalinkCounters.TransmittedByteCount += pMLMEContext->BulkOutSize; + +- // Clear MLME bulk flag ++ /* Clear MLME bulk flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); + +- // Init Tx context descriptor ++ /* Init Tx context descriptor */ + RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX, + (usb_complete_t) RTUSBBulkOutMLMEPacketComplete); + +- //For mgmt urb buffer, because we use sk_buff, so we need to notify the USB controller do dma mapping. ++ /*For mgmt urb buffer, because we use sk_buff, so we need to notify the USB controller do dma mapping. */ + pUrb->transfer_dma = 0; + pUrb->transfer_flags &= (~URB_NO_TRANSFER_DMA_MAP); + +@@ -680,8 +680,8 @@ VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) + + return; + } +- //DBGPRINT_RAW(RT_DEBUG_INFO, ("<---RTUSBBulkOutMLMEPacket \n")); +-// printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); ++ /*DBGPRINT_RAW(RT_DEBUG_INFO, ("<---RTUSBBulkOutMLMEPacket \n")); */ ++/* printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); */ + } + + VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) +@@ -692,7 +692,7 @@ VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + POS_COOKIE pObj; + int index; + +- //DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); ++ /*DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); */ + pMLMEContext = (PTX_CONTEXT) pUrb->context; + pAd = pMLMEContext->pAd; + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -734,10 +734,10 @@ VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + pPsPollContext->IRPPending = TRUE; + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); + +- // Clear PS-Poll bulk flag ++ /* Clear PS-Poll bulk flag */ + RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL); + +- // Init Tx context descriptor ++ /* Init Tx context descriptor */ + RTUSBInitTxDesc(pAd, pPsPollContext, MGMTPIPEIDX, + (usb_complete_t) RTUSBBulkOutPsPollComplete); + +@@ -757,7 +757,7 @@ VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + + } + +-// PS-Poll frame use BulkOutPipeId = 0 ++/* PS-Poll frame use BulkOutPipeId = 0 */ + VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; +@@ -794,12 +794,12 @@ VOID DoBulkIn(IN RTMP_ADAPTER * pAd) + pAd->BulkInReq++; + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +- // Init Rx context descriptor ++ /* Init Rx context descriptor */ + NdisZeroMemory(pRxContext->TransferBuffer, pRxContext->BulkInOffset); + RTUSBInitRxDesc(pAd, pRxContext); + + pUrb = pRxContext->pUrb; +- if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { // fail ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */ + + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext->InUse = FALSE; +@@ -809,9 +809,9 @@ VOID DoBulkIn(IN RTMP_ADAPTER * pAd) + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + DBGPRINT(RT_DEBUG_ERROR, + ("RTUSBBulkReceive: Submit Rx URB failed %d\n", ret)); +- } else { // success ++ } else { /* success */ + ASSERT((pRxContext->InUse == pRxContext->IRPPending)); +- //printk("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex); ++ /*printk("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex); */ + } + } + +@@ -864,10 +864,10 @@ VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + pRxContext->bRxHandling = TRUE; + RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); + +- // read RxContext, Since not ++ /* read RxContext, Since not */ + STARxDoneInterruptHandle(pAd, TRUE); + +- // Finish to handle this bulkIn buffer. ++ /* Finish to handle this bulkIn buffer. */ + RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); + pRxContext->BulkInOffset = 0; + pRxContext->Readable = FALSE; +@@ -914,9 +914,9 @@ VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + */ + VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + { +- // use a receive tasklet to handle received packets; +- // or sometimes hardware IRQ will be disabled here, so we can not +- // use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< ++ /* use a receive tasklet to handle received packets; */ ++ /* or sometimes hardware IRQ will be disabled here, so we can not */ ++ /* use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< */ + PRX_CONTEXT pRxContext; + PRTMP_ADAPTER pAd; + POS_COOKIE pObj; +@@ -945,19 +945,19 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + */ + VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + { +- // BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. ++ /* BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX) + ) { +- // 2. PS-Poll frame is next ++ /* 2. PS-Poll frame is next */ + if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) { + RTUSBBulkOutPsPoll(pAd); + } +- // 5. Mlme frame is next ++ /* 5. Mlme frame is next */ + else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) || + (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) { + RTUSBBulkOutMLMEPacket(pAd, pAd->MgmtRing.TxDmaIdx); + } +- // 6. Data frame normal is next ++ /* 6. Data frame normal is next */ + if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL)) { + if (((!RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +@@ -1006,14 +1006,14 @@ VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + NextBulkOutIndex[3]); + } + } +- // 7. Null frame is the last ++ /* 7. Null frame is the last */ + else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL)) { + if (!RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) { + RTUSBBulkOutNullFrame(pAd); + } + } +- // 8. No data avaliable ++ /* 8. No data avaliable */ + else { + + } +@@ -1116,8 +1116,8 @@ VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) + RTUSB_UNLINK_URB(pRxContext->pUrb); + pRxContext->IRPPending = FALSE; + pRxContext->InUse = FALSE; +- //NdisInterlockedDecrement(&pAd->PendingRx); +- //pAd->PendingRx--; ++ /*NdisInterlockedDecrement(&pAd->PendingRx); */ ++ /*pAd->PendingRx--; */ + } + } + DBGPRINT_RAW(RT_DEBUG_TRACE, ("<---RTUSBCancelPendingBulkInIRP\n")); +@@ -1145,65 +1145,65 @@ VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pPsPollContext; + PTX_CONTEXT pRTSContext; + UINT i, Idx; +-// unsigned int IrqFlags; +-// NDIS_SPIN_LOCK *pLock; +-// BOOLEAN *pPending; ++/* unsigned int IrqFlags; */ ++/* NDIS_SPIN_LOCK *pLock; */ ++/* BOOLEAN *pPending; */ + +-// pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; +-// pPending = &pAd->BulkOutPending[MGMTPIPEIDX]; ++/* pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; */ ++/* pPending = &pAd->BulkOutPending[MGMTPIPEIDX]; */ + + for (Idx = 0; Idx < 4; Idx++) { + pHTTXContext = &(pAd->TxContext[Idx]); + + if (pHTTXContext->IRPPending == TRUE) { + +- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself +- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop +- // ++ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */ ++ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */ ++ /* when the last IRP on the list has been cancelled; that's how we exit this loop */ ++ /* */ + + RTUSB_UNLINK_URB(pHTTXContext->pUrb); + +- // Sleep 200 microseconds to give cancellation time to work ++ /* Sleep 200 microseconds to give cancellation time to work */ + RTMPusecDelay(200); + } + + pAd->BulkOutPending[Idx] = FALSE; + } + +- //RTMP_IRQ_LOCK(pLock, IrqFlags); ++ /*RTMP_IRQ_LOCK(pLock, IrqFlags); */ + for (i = 0; i < MGMT_RING_SIZE; i++) { + pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; + if (pMLMEContext && (pMLMEContext->IRPPending == TRUE)) { + +- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself +- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop +- // ++ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */ ++ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */ ++ /* when the last IRP on the list has been cancelled; that's how we exit this loop */ ++ /* */ + + RTUSB_UNLINK_URB(pMLMEContext->pUrb); + pMLMEContext->IRPPending = FALSE; + +- // Sleep 200 microsecs to give cancellation time to work ++ /* Sleep 200 microsecs to give cancellation time to work */ + RTMPusecDelay(200); + } + } + pAd->BulkOutPending[MGMTPIPEIDX] = FALSE; +- //RTMP_IRQ_UNLOCK(pLock, IrqFlags); ++ /*RTMP_IRQ_UNLOCK(pLock, IrqFlags); */ + + for (i = 0; i < BEACON_RING_SIZE; i++) { + pBeaconContext = &(pAd->BeaconContext[i]); + + if (pBeaconContext->IRPPending == TRUE) { + +- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself +- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList +- // when the last IRP on the list has been cancelled; that's how we exit this loop +- // ++ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */ ++ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */ ++ /* when the last IRP on the list has been cancelled; that's how we exit this loop */ ++ /* */ + + RTUSB_UNLINK_URB(pBeaconContext->pUrb); + +- // Sleep 200 microsecs to give cancellation time to work ++ /* Sleep 200 microsecs to give cancellation time to work */ + RTMPusecDelay(200); + } + } +@@ -1227,4 +1227,4 @@ VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + } + } + +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index d662f7f..e6b0afc 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -41,7 +41,7 @@ + + #include "../rt_config.h" + +-extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c ++extern UCHAR Phy11BGNextRateUpward[]; /* defined in mlme.c */ + extern UCHAR EpToQueue[]; + + VOID REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, +@@ -89,8 +89,8 @@ NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, + IN UCHAR BulkOutPipeId, + IN UINT32 NumberRequired) + { +-// UCHAR FreeNumber = 0; +-// UINT Index; ++/* UCHAR FreeNumber = 0; */ ++/* UINT Index; */ + NDIS_STATUS Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; +@@ -251,7 +251,7 @@ VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + if (QueueSel != FIFO_EDCA) + DBGPRINT(RT_DEBUG_TRACE, + ("====> QueueSel != FIFO_EDCA<============\n")); +- pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this. ++ pTxInfo->USBDMANextVLD = FALSE; /*NextValid; // Need to check with Jan about this. */ + pTxInfo->USBDMATxburst = TxBurst; + pTxInfo->WIV = bWiv; + pTxInfo->SwUseLastRound = 0; +@@ -259,4 +259,4 @@ VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + pTxInfo->rsv2 = 0; + } + +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index 9a32bc8..dd2e0d0 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -88,7 +88,7 @@ NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, + { + UINT32 MacReg; + NTSTATUS Status; +-// ULONG i; ++/* ULONG i; */ + USHORT writeLen; + + Status = RTUSBReadMACRegister(pAd, MAC_CSR0, &MacReg); +@@ -100,11 +100,11 @@ NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, + Status = RTUSBWriteMACRegister(pAd, 0x701c, 0xffffffff); + Status = RTUSBFirmwareRun(pAd); + +- //2008/11/28:KH add to fix the dead rf frequency offset bug<-- ++ /*2008/11/28:KH add to fix the dead rf frequency offset bug<-- */ + RTMPusecDelay(10000); + RTUSBWriteMACRegister(pAd, H2M_MAILBOX_CSR, 0); +- AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); //reset rf by MCU supported by new firmware +- //2008/11/28:KH add to fix the dead rf frequency offset bug--> ++ AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); /*reset rf by MCU supported by new firmware */ ++ /*2008/11/28:KH add to fix the dead rf frequency offset bug--> */ + + return Status; + } +@@ -171,7 +171,7 @@ NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, + { + NTSTATUS Status; + +- // TODO: In 2870, use this funciton carefully cause it's not stable. ++ /* TODO: In 2870, use this funciton carefully cause it's not stable. */ + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, + DEVICE_VENDOR_REQUEST_OUT, +@@ -304,7 +304,7 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + UINT i = 0; + NTSTATUS status; + +- // Verify the busy condition ++ /* Verify the busy condition */ + do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); + if (status >= 0) { +@@ -320,16 +320,16 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + + if ((i == RETRY_LIMIT) + || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { +- // +- // Read failed then Return Default value. +- // ++ /* */ ++ /* Read failed then Return Default value. */ ++ /* */ + *pValue = pAd->BbpWriteLatch[Id]; + + DBGPRINT_RAW(RT_DEBUG_ERROR, + ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } +- // Prepare for write material ++ /* Prepare for write material */ + BbpCsr.word = 0; + BbpCsr.field.fRead = 1; + BbpCsr.field.Busy = 1; +@@ -337,7 +337,7 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word); + + i = 0; +- // Verify the busy condition ++ /* Verify the busy condition */ + do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); + if (status >= 0) { +@@ -355,9 +355,9 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + + if ((i == RETRY_LIMIT) + || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { +- // +- // Read failed then Return Default value. +- // ++ /* */ ++ /* Read failed then Return Default value. */ ++ /* */ + *pValue = pAd->BbpWriteLatch[Id]; + + DBGPRINT_RAW(RT_DEBUG_ERROR, +@@ -389,7 +389,7 @@ NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, + BBP_CSR_CFG_STRUC BbpCsr; + UINT i = 0; + NTSTATUS status; +- // Verify the busy condition ++ /* Verify the busy condition */ + do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); + if (status >= 0) { +@@ -410,7 +410,7 @@ NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, + ("Retry count exhausted or device removed!!!\n")); + return STATUS_UNSUCCESSFUL; + } +- // Prepare for write material ++ /* Prepare for write material */ + BbpCsr.word = 0; + BbpCsr.field.fRead = 0; + BbpCsr.field.Value = Value; +@@ -561,11 +561,11 @@ VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) + { + UINT32 value; + +- // Timeout 0x40 x 50us ++ /* Timeout 0x40 x 50us */ + value = (SLEEPCID << 16) + (OWNERMCU << 24) + (0x40 << 8) + 1; + RTUSBWriteMACRegister(pAd, 0x7010, value); + RTUSBWriteMACRegister(pAd, 0x404, 0x30); +- //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); ++ /*RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); */ + DBGPRINT_RAW(RT_DEBUG_ERROR, ("Sleep Mailbox testvalue %x\n", value)); + + } +@@ -959,7 +959,7 @@ NTSTATUS RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) + NTSTATUS Status = TRUE; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->USB_ResetDevice\n")); +- //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); ++ /*RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); */ + return Status; + } + +@@ -968,9 +968,9 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + PCmdQElmt cmdqelmt; + PUCHAR pData; + NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS; +-// ULONG Now = 0; ++/* ULONG Now = 0; */ + NTSTATUS ntStatus; +-// unsigned long IrqFlags; ++/* unsigned long IrqFlags; */ + + while (pAd && pAd->CmdQ.size > 0) { + NdisStatus = NDIS_STATUS_SUCCESS; +@@ -993,7 +993,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + UINT32 data; + + { +- // Read GPIO pin2 as Hardware controlled radio state ++ /* Read GPIO pin2 as Hardware controlled radio state */ + + RTUSBReadMACRegister(pAd, + GPIO_CTRL_CFG, +@@ -1023,7 +1023,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + MlmeRadioOn + (pAd); +- // Update extra information ++ /* Update extra information */ + pAd->ExtraInfo = + EXTRA_INFO_CLEAR; + } else { +@@ -1033,7 +1033,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + MlmeRadioOff + (pAd); +- // Update extra information ++ /* Update extra information */ + pAd->ExtraInfo = + HW_RADIO_OFF; + } +@@ -1056,15 +1056,15 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + UCHAR Index; + int ret = 0; + PHT_TX_CONTEXT pHTTXContext; +-// RTMP_TX_RING *pTxRing; ++/* RTMP_TX_RING *pTxRing; */ + unsigned long IrqFlags; + + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("CmdThread : CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n", + pAd->bulkResetPipeid)); +- // All transfers must be aborted or cancelled before attempting to reset the pipe. +- //RTUSBCancelPendingBulkOutIRP(pAd); +- // Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007 ++ /* All transfers must be aborted or cancelled before attempting to reset the pipe. */ ++ /*RTUSBCancelPendingBulkOutIRP(pAd); */ ++ /* Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007 */ + Index = 0; + do { + RTUSBReadMACRegister(pAd, +@@ -1079,12 +1079,12 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + MACValue = 0; + RTUSBReadMACRegister(pAd, USB_DMA_CFG, + &MACValue); +- // To prevent Read Register error, we 2nd check the validity. ++ /* To prevent Read Register error, we 2nd check the validity. */ + if ((MACValue & 0xc00000) == 0) + RTUSBReadMACRegister(pAd, + USB_DMA_CFG, + &MACValue); +- // To prevent Read Register error, we 3rd check the validity. ++ /* To prevent Read Register error, we 3rd check the validity. */ + if ((MACValue & 0xc00000) == 0) + RTUSBReadMACRegister(pAd, + USB_DMA_CFG, +@@ -1093,7 +1093,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + RTUSBWriteMACRegister(pAd, USB_DMA_CFG, + MACValue); + +- // Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 ++ /* Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 */ + RTMPusecDelay(1000); + + MACValue &= (~0x80000); +@@ -1102,8 +1102,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("\tSet 0x2a0 bit19. Clear USB DMA TX path\n")); + +- // Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 +- //RTMPusecDelay(5000); ++ /* Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 */ ++ /*RTMPusecDelay(5000); */ + + if ((pAd-> + bulkResetPipeid & +@@ -1127,7 +1127,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + &(pAd-> + TxContext[pAd-> + bulkResetPipeid]); +- //NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); ++ /*NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */ + RTMP_INT_LOCK(&pAd-> + BulkOutLock[pAd-> + bulkResetPipeid], +@@ -1148,11 +1148,11 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + bulkResetPipeid] = + 1; + +- // no matter what, clean the flag ++ /* no matter what, clean the flag */ + RTMP_CLEAR_FLAG(pAd, + fRTMP_ADAPTER_BULKOUT_RESET); + +- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); ++ /*NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */ + RTMP_INT_UNLOCK(&pAd-> + BulkOutLock + [pAd-> +@@ -1259,8 +1259,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + } + } else { +- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); +- //RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); ++ /*NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */ ++ /*RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); */ + + DBGPRINT_RAW + (RT_DEBUG_ERROR, +@@ -1338,7 +1338,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + ("\tTX Occupied by %d!\n", + pendingContext)); + } +- // no matter what, clean the flag ++ /* no matter what, clean the flag */ + RTMP_CLEAR_FLAG(pAd, + fRTMP_ADAPTER_BULKOUT_RESET); + +@@ -1358,7 +1358,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + RTMPDeQueuePacket(pAd, FALSE, + NUM_OF_TX_RING, + MAX_TX_PROCESS); +- //RTUSBKickBulkOut(pAd); ++ /*RTUSBKickBulkOut(pAd); */ + } + + } +@@ -1403,12 +1403,12 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n")); + +- // All transfers must be aborted or cancelled before attempting to reset the pipe. ++ /* All transfers must be aborted or cancelled before attempting to reset the pipe. */ + { + UINT32 MACValue; + + { +- //while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) ++ /*while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) */ + if ((pAd->PendingRx > 0) + && + (!RTMP_TEST_FLAG +@@ -1425,7 +1425,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + } + +- // Wait 10ms before reading register. ++ /* Wait 10ms before reading register. */ + RTMPusecDelay(10000); + ntStatus = + RTUSBReadMACRegister(pAd, MAC_CSR0, +@@ -1505,7 +1505,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + i < + pAd->CommonCfg. + NumOfBulkInIRP; i++) { +- //RTUSBBulkReceive(pAd); ++ /*RTUSBBulkReceive(pAd); */ + PRX_CONTEXT pRxContext; + PURB pUrb; + int ret = 0; +@@ -1541,11 +1541,11 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + BulkInLock, + IrqFlags); + +- // Init Rx context descriptor ++ /* Init Rx context descriptor */ + RTUSBInitRxDesc(pAd, + pRxContext); + pUrb = pRxContext->pUrb; +- if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { // fail ++ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */ + + RTMP_IRQ_LOCK + (&pAd-> +@@ -1571,9 +1571,9 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + ret, + pUrb-> + status)); +- } else { // success +- //DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", +- // pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); ++ } else { /* success */ ++ /*DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", */ ++ /* pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); */ + DBGPRINT_RAW + (RT_DEBUG_TRACE, + ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n", +@@ -1584,7 +1584,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + + } else { +- // Card must be removed ++ /* Card must be removed */ + if (NT_SUCCESS(ntStatus) != + TRUE) { + RTMP_SET_FLAG(pAd, +@@ -1643,7 +1643,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + MACValue)); + RTUSBWriteMACRegister(pAd, offset, + MACValue); +- // Read bitmask ++ /* Read bitmask */ + RTUSBReadMACRegister(pAd, offset + 4, + &MACRValue); + if (SetAsicWcid.DeleteTid != 0xffffffff) +@@ -1693,7 +1693,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + ("Cmd : CMDTHREAD_SET_ASIC_WCID_CIPHER : WCID = %ld, Cipher = %lx.\n", + SetAsicWcidAttri.WCID, + SetAsicWcidAttri.Cipher)); +- // Read bitmask ++ /* Read bitmask */ + RTUSBReadMACRegister(pAd, offset, + &MACRValue); + MACRValue = 0; +@@ -1725,10 +1725,10 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + ("2-offset = %x , MACValue= %x,\n", + offset, MACRValue)); + +- // +- // Update cipher algorithm. WSTA always use BSS0 +- // +- // for adhoc mode only ,because wep status slow than add key, when use zero config ++ /* */ ++ /* Update cipher algorithm. WSTA always use BSS0 */ ++ /* */ ++ /* for adhoc mode only ,because wep status slow than add key, when use zero config */ + if (pAd->StaCfg.BssType == BSS_ADHOC) { + offset = + MAC_WCID_ATTRIBUTE_BASE; +@@ -1745,7 +1745,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + offset, + MACRValue); + +- //Update group key cipher,,because wep status slow than add key, when use zero config ++ /*Update group key cipher,,because wep status slow than add key, when use zero config */ + RTUSBReadMACRegister(pAd, + SHARED_KEY_MODE_BASE + + +@@ -1770,8 +1770,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + break; + +-//Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> +- case RT_CMD_SET_KEY_TABLE: //General call for AsicAddPairwiseKeyEntry() ++/*Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> */ ++ case RT_CMD_SET_KEY_TABLE: /*General call for AsicAddPairwiseKeyEntry() */ + { + RT_ADD_PAIRWISE_KEY_ENTRY KeyInfo; + KeyInfo = +@@ -1786,7 +1786,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + break; + +- case RT_CMD_SET_RX_WCID_TABLE: //General call for RTMPAddWcidAttributeEntry() ++ case RT_CMD_SET_RX_WCID_TABLE: /*General call for RTMPAddWcidAttributeEntry() */ + { + PMAC_TABLE_ENTRY pEntry; + UCHAR KeyIdx = 0; +@@ -1802,7 +1802,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + pEntry); + } + break; +-//Benson modified for USB interface, avoid in interrupt when write key, 20080724 <-- ++/*Benson modified for USB interface, avoid in interrupt when write key, 20080724 <-- */ + + case CMDTHREAD_SET_CLIENT_MAC_ENTRY: + { +@@ -1865,17 +1865,17 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + DefaultKeyId]. + CipherAlg, FALSE); + } else { +- // +- // Other case, disable engine. +- // Don't worry WPA key, we will add WPA Key after 4-Way handshaking. +- // ++ /* */ ++ /* Other case, disable engine. */ ++ /* Don't worry WPA key, we will add WPA Key after 4-Way handshaking. */ ++ /* */ + USHORT offset; + offset = + MAC_WCID_ATTRIBUTE_BASE + + + (pEntry->Aid * + HW_WCID_ATTRI_SIZE); +- // RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0 ++ /* RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0 */ + RTUSBWriteMACRegister + (pAd, offset, 0); + } +@@ -1894,7 +1894,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } + break; + +-// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ + case CMDTHREAD_UPDATE_PROTECT: + { + AsicUpdateProtect(pAd, 0, +@@ -1902,7 +1902,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + TRUE, 0); + } + break; +-// end johnli ++/* end johnli */ + + case OID_802_11_ADD_WEP: + { +@@ -1916,7 +1916,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + pWepKey = (PNDIS_802_11_WEP) pData; + KeyIdx = pWepKey->KeyIndex & 0x0fffffff; + +- // it is a shared key ++ /* it is a shared key */ + if ((KeyIdx >= 4) + || ((pWepKey->KeyLength != 5) + && (pWepKey->KeyLength != +@@ -1944,10 +1944,10 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + 5) ? CIPHER_WEP64 : + CIPHER_WEP128; + +- // +- // Change the WEP cipher to CKIP cipher if CKIP KP on. +- // Funk UI or Meetinghouse UI will add ckip key from this path. +- // ++ /* */ ++ /* Change the WEP cipher to CKIP cipher if CKIP KP on. */ ++ /* Funk UI or Meetinghouse UI will add ckip key from this path. */ ++ /* */ + + if (pAd->OpMode == OPMODE_STA) { + pAd->MacTab. +@@ -1968,7 +1968,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + CipherAlg = CipherAlg; + if (pWepKey-> + KeyIndex & 0x80000000) { +- // Default key for tx (shared key) ++ /* Default key for tx (shared key) */ + UCHAR IVEIV[8]; + UINT32 WCIDAttri, Value; + USHORT offset, offset2; +@@ -1977,8 +1977,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + pAd->StaCfg. + DefaultKeyId = + (UCHAR) KeyIdx; +- // Add BSSID to WCTable. because this is Tx wep key. +- // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 ++ /* Add BSSID to WCTable. because this is Tx wep key. */ ++ /* WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 */ + WCIDAttri = + (CipherAlg << 1) | + SHAREDKEYTABLE; +@@ -1991,9 +1991,9 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + RTUSBWriteMACRegister + (pAd, offset, + WCIDAttri); +- // 1. IV/EIV +- // Specify key index to find shared key. +- IVEIV[3] = (UCHAR) (KeyIdx << 6); //WEP Eiv bit off. groupkey index is not 0 ++ /* 1. IV/EIV */ ++ /* Specify key index to find shared key. */ ++ IVEIV[3] = (UCHAR) (KeyIdx << 6); /*WEP Eiv bit off. groupkey index is not 0 */ + offset = + PAIRWISE_IVEIV_TABLE_BASE + + +@@ -2030,7 +2030,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + i += 4; + } + +- // 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0 ++ /* 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0 */ + WCIDAttri = + (pAd-> + SharedKey[BSS0] +@@ -2109,4 +2109,4 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } /* end of while */ + } + +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch b/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch new file mode 100644 index 000000000..1bc72fdce --- /dev/null +++ b/debian/patches/features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch @@ -0,0 +1,19769 @@ +From 49b65765aca2696d20ba76ebde49f27c6ba3518e Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:15 -0800 +Subject: [PATCH 23/42] Staging: rt28x0: fix comments in common/*.c files + +commit ec278fa259e48c89b206ccd9e1bee06277077263 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/action.c | 68 +- + drivers/staging/rt2860/common/ba_action.c | 340 ++++---- + drivers/staging/rt2860/common/cmm_aes.c | 66 +- + drivers/staging/rt2860/common/cmm_asic.c | 700 ++++++++-------- + drivers/staging/rt2860/common/cmm_cfg.c | 20 +- + drivers/staging/rt2860/common/cmm_data.c | 581 +++++++------- + drivers/staging/rt2860/common/cmm_data_pci.c | 302 ++++---- + drivers/staging/rt2860/common/cmm_data_usb.c | 270 +++--- + drivers/staging/rt2860/common/cmm_info.c | 314 ++++---- + drivers/staging/rt2860/common/cmm_mac_pci.c | 378 +++++----- + drivers/staging/rt2860/common/cmm_mac_usb.c | 252 +++--- + drivers/staging/rt2860/common/cmm_sanity.c | 278 +++--- + drivers/staging/rt2860/common/cmm_sync.c | 90 +- + drivers/staging/rt2860/common/cmm_tkip.c | 96 ++-- + drivers/staging/rt2860/common/cmm_wep.c | 26 +- + drivers/staging/rt2860/common/cmm_wpa.c | 608 +++++++------- + drivers/staging/rt2860/common/ee_efuse.c | 68 +- + drivers/staging/rt2860/common/ee_prom.c | 38 +- + drivers/staging/rt2860/common/eeprom.c | 8 +- + drivers/staging/rt2860/common/mlme.c | 1169 +++++++++++++------------- + drivers/staging/rt2860/common/rt_channel.c | 828 +++++++++--------- + drivers/staging/rt2860/common/rt_rf.c | 8 +- + drivers/staging/rt2860/common/rtmp_init.c | 1032 ++++++++++++------------ + drivers/staging/rt2860/common/rtmp_mcu.c | 52 +- + drivers/staging/rt2860/common/rtmp_timer.c | 22 +- + drivers/staging/rt2860/common/spectrum.c | 124 ++-- + 26 files changed, 3866 insertions(+), 3872 deletions(-) + +diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c +index f6efdb6..f69681d 100644 +--- a/drivers/staging/rt2860/common/action.c ++++ b/drivers/staging/rt2860/common/action.c +@@ -113,13 +113,13 @@ VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + NdisZeroMemory(&Frame, sizeof(FRAME_ADDBA_REQ)); + + if (MlmeAddBAReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr)) { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("BA - MlmeADDBAAction() allocate memory failed \n")); + return; + } +- // 1. find entry ++ /* 1. find entry */ + Idx = + pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; + if (Idx == 0) { +@@ -200,27 +200,27 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FRAME_BAR FrameBar; + + pInfo = (MLME_DELBA_REQ_STRUCT *) Elem->Msg; +- // must send back DELBA ++ /* must send back DELBA */ + NdisZeroMemory(&Frame, sizeof(FRAME_DELBA_REQ)); + DBGPRINT(RT_DEBUG_TRACE, + ("==> MlmeDELBAAction(), Initiator(%d) \n", pInfo->Initiator)); + + if (MlmeDelBAReqSanity(pAd, Elem->Msg, Elem->MsgLen)) { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_ERROR, + ("BA - MlmeDELBAAction() allocate memory failed 1. \n")); + return; + } + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + MlmeFreeMemory(pAd, pOutBuffer); + DBGPRINT(RT_DEBUG_ERROR, + ("BA - MlmeDELBAAction() allocate memory failed 2. \n")); + return; + } +- // SEND BAR (Send BAR to refresh peer reordering buffer.) ++ /* SEND BAR (Send BAR to refresh peer reordering buffer.) */ + Idx = + pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID]; + +@@ -228,12 +228,12 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MacTab.Content[pInfo->Wcid].Addr, + pAd->CurrentAddress); + +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL funciton. +- FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pInfo->TID; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.ACKPolicy = IMMED_BA; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.Compressed = 1; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.MTID = 0; // make sure sequence not clear in DEL funciton. ++ FrameBar.StartingSeq.field.FragNum = 0; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.TID = pInfo->TID; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.ACKPolicy = IMMED_BA; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.Compressed = 1; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.MTID = 0; /* make sure sequence not clear in DEL funciton. */ + + MakeOutgoingFrame(pOutBuffer2, &FrameLen, + sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); +@@ -242,7 +242,7 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("BA - MlmeDELBAAction() . Send BAR to refresh peer reordering buffer \n")); + +- // SEND DELBA FRAME ++ /* SEND DELBA FRAME */ + FrameLen = 0; + + { +@@ -263,7 +263,7 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Frame.Action = DELBA; + Frame.DelbaParm.Initiator = pInfo->Initiator; + Frame.DelbaParm.TID = pInfo->TID; +- Frame.ReasonCode = 39; // Time Out ++ Frame.ReasonCode = 39; /* Time Out */ + *(USHORT *) (&Frame.DelbaParm) = + cpu2le16(*(USHORT *) (&Frame.DelbaParm)); + Frame.ReasonCode = cpu2le16(Frame.ReasonCode); +@@ -288,8 +288,8 @@ VOID MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + VOID MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //PUCHAR pOutBuffer = NULL; +- //Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 ++ /*PUCHAR pOutBuffer = NULL; */ ++ /*Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 */ + } + + VOID PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) +@@ -347,20 +347,20 @@ static VOID respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, + FRAME_HT_INFO HTINFOframe, *pFrame; + UCHAR *pAddr; + +- // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ /* 2. Always send back ADDBA Response */ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("ACTION - respond_ht_information_exchange_action() allocate memory failed \n")); + return; + } +- // get RA ++ /* get RA */ + pFrame = (FRAME_HT_INFO *) & Elem->Msg[0]; + pAddr = pFrame->Hdr.Addr2; + + NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO)); +- // 2-1. Prepare ADDBA Response frame. ++ /* 2-1. Prepare ADDBA Response frame. */ + { + if (ADHOC_ON(pAd)) + ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, +@@ -400,21 +400,21 @@ VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("ACTION - HT Notify Channel bandwidth action----> \n")); + + if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) { +- // Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps +- // sending BW_Notify Action frame, and cause us to linkup and linkdown. +- // In legacy mode, don't need to parse HT action frame. ++ /* Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps */ ++ /* sending BW_Notify Action frame, and cause us to linkup and linkdown. */ ++ /* In legacy mode, don't need to parse HT action frame. */ + DBGPRINT(RT_DEBUG_TRACE, + ("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n", + Elem->Msg[LENGTH_802_11 + 2])); + break; + } + +- if (Elem->Msg[LENGTH_802_11 + 2] == 0) // 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. ++ if (Elem->Msg[LENGTH_802_11 + 2] == 0) /* 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. */ + pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0; + + break; + case SMPS_ACTION: +- // 7.3.1.25 ++ /* 7.3.1.25 */ + DBGPRINT(RT_DEBUG_TRACE, ("ACTION - SMPS action----> \n")); + if (((Elem->Msg[LENGTH_802_11 + 2] & 0x1) == 0)) { + pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_ENABLE; +@@ -427,7 +427,7 @@ VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("Aid(%d) MIMO PS = %d\n", Elem->Wcid, + pAd->MacTab.Content[Elem->Wcid].MmpsMode)); +- // rt2860c : add something for smps change. ++ /* rt2860c : add something for smps change. */ + break; + + case SETPCO_ACTION: +@@ -441,7 +441,7 @@ VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pHT_info = + (HT_INFORMATION_OCTET *) & Elem->Msg[LENGTH_802_11 + + 2]; +- // 7.4.8.10 ++ /* 7.4.8.10 */ + DBGPRINT(RT_DEBUG_TRACE, + ("ACTION - HT Information Exchange action----> \n")); + if (pHT_info->Request) { +@@ -512,7 +512,7 @@ VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + + ASSERT(pBAEntry->Wcid < MAX_LEN_OF_MAC_TABLE); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_ERROR, + ("BA - MlmeADDBAAction() allocate memory failed \n")); +@@ -524,17 +524,17 @@ VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + BarHeaderInit(pAd, &FrameBar, pEntry->Addr, + pAd->CurrentAddress); + +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = TID; // make sure sequence not clear in DEL funciton. ++ FrameBar.StartingSeq.field.FragNum = 0; /* make sure sequence not clear in DEL function. */ ++ FrameBar.StartingSeq.field.StartSeq = Sequence; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.TID = TID; /* make sure sequence not clear in DEL funciton. */ + + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(FRAME_BAR), &FrameBar, + END_OF_ARGS); +- //if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) +- if (1) // Now we always send BAR. ++ /*if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) */ ++ if (1) /* Now we always send BAR. */ + { +- //MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen); ++ /*MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen); */ + MiniportMMRequest(pAd, + (MGMT_USE_QUEUE_FLAG | + MapUserPriorityToAccessCategory +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index dedbe52..97cb40a 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -27,14 +27,14 @@ + + #include "../rt_config.h" + +-#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) //1 // inital sequence number of BA session ++#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) /*1 // inital sequence number of BA session */ + + #define ORI_SESSION_MAX_RETRY 8 +-#define ORI_BA_SESSION_TIMEOUT (2000) // ms +-#define REC_BA_SESSION_IDLE_TIMEOUT (1000) // ms ++#define ORI_BA_SESSION_TIMEOUT (2000) /* ms */ ++#define REC_BA_SESSION_IDLE_TIMEOUT (1000) /* ms */ + +-#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms +-#define MAX_REORDERING_PACKET_TIMEOUT ((3000 * OS_HZ)/1000) // system ticks -- 100 ms ++#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) /* system ticks -- 100 ms */ ++#define MAX_REORDERING_PACKET_TIMEOUT ((3000 * OS_HZ)/1000) /* system ticks -- 100 ms */ + + #define RESET_RCV_SEQ (0xFFFF) + +@@ -66,20 +66,20 @@ VOID BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, + { + UCHAR MaxSize; + +- if (pAd->MACVersion >= RALINK_2883_VERSION) // 3*3 ++ if (pAd->MACVersion >= RALINK_2883_VERSION) /* 3*3 */ + { + if (pAd->MACVersion >= RALINK_3070_VERSION) { + if (pEntryPeer->WepStatus != + Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode ++ MaxSize = 7; /* for non-open mode */ + else + MaxSize = 13; + } else + MaxSize = 31; +- } else if (pAd->MACVersion >= RALINK_2880E_VERSION) // 2880 e ++ } else if (pAd->MACVersion >= RALINK_2880E_VERSION) /* 2880 e */ + { + if (pEntryPeer->WepStatus != Ndis802_11EncryptionDisabled) +- MaxSize = 7; // for non-open mode ++ MaxSize = 7; /* for non-open mode */ + else + MaxSize = 13; + } else +@@ -108,9 +108,9 @@ void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, + ASSERT(0); + BA_Reorder_AMSDU_Annnounce(pAd, pPacket); + } else { +- // +- // pass this 802.3 packet to upper layer or forward this packet to WM directly +- // ++ /* */ ++ /* pass this 802.3 packet to upper layer or forward this packet to WM directly */ ++ /* */ + + ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, + RTMP_GET_PACKET_IF(pPacket)); +@@ -275,7 +275,7 @@ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + return (TRUE); + } + +-//static int blk_count=0; // sample take off, no use ++/*static int blk_count=0; // sample take off, no use */ + + static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd) + { +@@ -284,7 +284,7 @@ static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd) + NdisAcquireSpinLock(&pAd->mpdu_blk_pool.lock); + mpdu_blk = ba_dequeue(&pAd->mpdu_blk_pool.freelist); + if (mpdu_blk) { +-// blk_count++; ++/* blk_count++; */ + /* reset mpdu_blk */ + NdisZeroMemory(mpdu_blk, sizeof(struct reordering_mpdu)); + } +@@ -298,7 +298,7 @@ static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, + ASSERT(mpdu_blk); + + NdisAcquireSpinLock(&pAd->mpdu_blk_pool.lock); +-// blk_count--; ++/* blk_count--; */ + ba_enqueue(&pAd->mpdu_blk_pool.freelist, mpdu_blk); + NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); + } +@@ -380,17 +380,17 @@ static void ba_refresh_reordering_mpdus(IN PRTMP_ADAPTER pAd, + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } + +-//static ++/*static */ + void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, + IN ULONG Now32) + { + USHORT Sequence; + +-// if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && +-// (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| +-// (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(10*REORDERING_PACKET_TIMEOUT))) && +-// (pBAEntry->list.qlen > (pBAEntry->BAWinSize/8))) ++/* if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && */ ++/* (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| */ ++/* (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(10*REORDERING_PACKET_TIMEOUT))) && */ ++/* (pBAEntry->list.qlen > (pBAEntry->BAWinSize/8))) */ + if (RTMP_TIME_AFTER + ((unsigned long)Now32, + (unsigned long)(pBAEntry->LastIndSeqAtTimer + +@@ -413,16 +413,16 @@ void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + (REORDERING_PACKET_TIMEOUT))) + && (pBAEntry->list.qlen > 0) + ) { +- // +- // force LastIndSeq to shift to LastIndSeq+1 +- // ++ /* */ ++ /* force LastIndSeq to shift to LastIndSeq+1 */ ++ /* */ + Sequence = (pBAEntry->LastIndSeq + 1) & MAXSEQ; + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); + pBAEntry->LastIndSeqAtTimer = Now32; + pBAEntry->LastIndSeq = Sequence; +- // +- // indicate in-order mpdus +- // ++ /* */ ++ /* indicate in-order mpdus */ ++ /* */ + Sequence = + ba_indicate_reordering_mpdus_in_order(pAd, pBAEntry, + Sequence); +@@ -446,7 +446,7 @@ VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + IN USHORT TimeOut, + IN ULONG DelayTime, IN BOOLEAN isForced) + { +- //MLME_ADDBA_REQ_STRUCT AddbaReq; ++ /*MLME_ADDBA_REQ_STRUCT AddbaReq; */ + BA_ORI_ENTRY *pBAEntry = NULL; + USHORT Idx; + BOOLEAN Cancelled; +@@ -455,20 +455,20 @@ VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + && (isForced == FALSE)) + return; + +- // if this entry is limited to use legacy tx mode, it doesn't generate BA. ++ /* if this entry is limited to use legacy tx mode, it doesn't generate BA. */ + if (RTMPStaFixedTxMode(pAd, pEntry) != FIXED_TXMODE_HT) + return; + + if ((pEntry->BADeclineBitmap & (1 << TID)) && (isForced == FALSE)) { +- // try again after 3 secs ++ /* try again after 3 secs */ + DelayTime = 3000; +-// DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n")); +-// return; ++/* DBGPRINT(RT_DEBUG_TRACE, ("DeCline BA from Peer\n")); */ ++/* return; */ + } + + Idx = pEntry->BAOriWcidArray[TID]; + if (Idx == 0) { +- // allocate a BA session ++ /* allocate a BA session */ + pBAEntry = BATableAllocOriEntry(pAd, &Idx); + if (pBAEntry == NULL) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -485,12 +485,12 @@ VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + + pEntry->BAOriWcidArray[TID] = Idx; + +- // Initialize BA session ++ /* Initialize BA session */ + pBAEntry->ORI_BA_Status = Originator_WaitRes; + pBAEntry->Wcid = pEntry->Aid; + pBAEntry->BAWinSize = pAd->CommonCfg.BACapability.field.RxBAWinLimit; + pBAEntry->Sequence = BA_ORI_INIT_SEQ; +- pBAEntry->Token = 1; // (2008-01-21) Jan Lee recommends it - this token can't be 0 ++ pBAEntry->Token = 1; /* (2008-01-21) Jan Lee recommends it - this token can't be 0 */ + pBAEntry->TID = TID; + pBAEntry->TimeOutValue = TimeOut; + pBAEntry->pAdapter = pAd; +@@ -502,7 +502,7 @@ VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + } else + RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + +- // set timer to send ADDBA request ++ /* set timer to send ADDBA request */ + RTMPSetTimer(&pBAEntry->ORIBATimer, DelayTime); + } + +@@ -522,7 +522,7 @@ VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + Idx = pEntry->BAOriWcidArray[TID]; + pBAEntry = &pAd->BATable.BAOriEntry[Idx]; + +- // Start fill in parameters. ++ /* Start fill in parameters. */ + if ((Idx != 0) && (pBAEntry->TID == TID) + && (pBAEntry->ORI_BA_Status == Originator_WaitRes)) { + pBAEntry->BAWinSize = +@@ -533,21 +533,21 @@ VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + pBAEntry->ORI_BA_Status = Originator_Done; + pAd->BATable.numDoneOriginator++; + +- // reset sequence number ++ /* reset sequence number */ + pBAEntry->Sequence = BA_ORI_INIT_SEQ; +- // Set Bitmap flag. ++ /* Set Bitmap flag. */ + pEntry->TXBAbitmap |= (1 << TID); + RTMPCancelTimer(&pBAEntry->ORIBATimer, &Cancelled); + +- pBAEntry->ORIBATimer.TimerValue = 0; //pFrame->TimeOutValue; ++ pBAEntry->ORIBATimer.TimerValue = 0; /*pFrame->TimeOutValue; */ + + DBGPRINT(RT_DEBUG_TRACE, + ("%s : TXBAbitmap = %x, BAWinSize = %d, TimeOut = %ld\n", + __func__, pEntry->TXBAbitmap, pBAEntry->BAWinSize, + pBAEntry->ORIBATimer.TimerValue)); + +- // SEND BAR ; +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); //Get an unused nonpaged memory ++ /* SEND BAR ; */ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer2); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("BA - BAOriSessionAdd() allocate memory failed \n")); +@@ -558,16 +558,16 @@ VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + pAd->MacTab.Content[pBAEntry->Wcid].Addr, + pAd->CurrentAddress); + +- FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function. +- FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; // make sure sequence not clear in DEL funciton. +- FrameBar.BarControl.TID = pBAEntry->TID; // make sure sequence not clear in DEL funciton. ++ FrameBar.StartingSeq.field.FragNum = 0; /* make sure sequence not clear in DEL function. */ ++ FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; /* make sure sequence not clear in DEL funciton. */ ++ FrameBar.BarControl.TID = pBAEntry->TID; /* make sure sequence not clear in DEL funciton. */ + MakeOutgoingFrame(pOutBuffer2, &FrameLen, + sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer2); + + if (pBAEntry->ORIBATimer.TimerValue) +- RTMPSetTimer(&pBAEntry->ORIBATimer, pBAEntry->ORIBATimer.TimerValue); // in mSec ++ RTMPSetTimer(&pBAEntry->ORIBATimer, pBAEntry->ORIBATimer.TimerValue); /* in mSec */ + } + } + +@@ -580,19 +580,19 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + USHORT Idx; + UCHAR TID; + UCHAR BAWinSize; +- //UINT32 Value; +- //UINT offset; ++ /*UINT32 Value; */ ++ /*UINT offset; */ + + ASSERT(pEntry); + +- // find TID ++ /* find TID */ + TID = pFrame->BaParm.TID; + + BAWinSize = + min(((UCHAR) pFrame->BaParm.BufSize), + (UCHAR) pAd->CommonCfg.BACapability.field.RxBAWinLimit); + +- // Intel patch ++ /* Intel patch */ + if (BAWinSize == 0) { + BAWinSize = 64; + } +@@ -603,7 +603,7 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + pBAEntry = BATableAllocRecEntry(pAd, &Idx); + } else { + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- // flush all pending reordering mpdus ++ /* flush all pending reordering mpdus */ + ba_refresh_reordering_mpdus(pAd, pBAEntry); + } + +@@ -612,7 +612,7 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + pAd->BATable.numAsRecipient, Idx, pFrame->BaParm.BufSize, + BAWinSize)); + +- // Start fill in parameters. ++ /* Start fill in parameters. */ + if (pBAEntry != NULL) { + ASSERT(pBAEntry->list.qlen == 0); + +@@ -622,8 +622,8 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + pBAEntry->TID = TID; + pBAEntry->TimeOutValue = pFrame->TimeOutValue; + pBAEntry->REC_BA_Status = Recipient_Accept; +- // initial sequence number +- pBAEntry->LastIndSeq = RESET_RCV_SEQ; //pFrame->BaStartSeq.field.StartSeq; ++ /* initial sequence number */ ++ pBAEntry->LastIndSeq = RESET_RCV_SEQ; /*pFrame->BaStartSeq.field.StartSeq; */ + + DBGPRINT(RT_DEBUG_OFF, + ("Start Seq = %08x\n", +@@ -638,13 +638,13 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + TRUE); + } + +- // Set Bitmap flag. ++ /* Set Bitmap flag. */ + pEntry->RXBAbitmap |= (1 << TID); + pEntry->BARecWcidArray[TID] = Idx; + + pEntry->BADeclineBitmap &= ~(1 << TID); + +- // Set BA session mask in WCID table. ++ /* Set BA session mask in WCID table. */ + RTMP_ADD_BA_SESSION_TO_ASIC(pAd, pEntry->Aid, TID); + + DBGPRINT(RT_DEBUG_TRACE, +@@ -673,11 +673,11 @@ BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) + MAX_BARECI_SESSION)); + goto done; + } +- // reserve idx 0 to identify BAWcidArray[TID] as empty ++ /* reserve idx 0 to identify BAWcidArray[TID] as empty */ + for (i = 1; i < MAX_LEN_OF_BA_REC_TABLE; i++) { + pBAEntry = &pAd->BATable.BARecEntry[i]; + if ((pBAEntry->REC_BA_Status == Recipient_NONE)) { +- // get one ++ /* get one */ + pAd->BATable.numAsRecipient++; + pBAEntry->REC_BA_Status = Recipient_USED; + *Idx = i; +@@ -700,11 +700,11 @@ BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) + if (pAd->BATable.numAsOriginator >= (MAX_LEN_OF_BA_ORI_TABLE)) { + goto done; + } +- // reserve idx 0 to identify BAWcidArray[TID] as empty ++ /* reserve idx 0 to identify BAWcidArray[TID] as empty */ + for (i = 1; i < MAX_LEN_OF_BA_ORI_TABLE; i++) { + pBAEntry = &pAd->BATable.BAOriEntry[i]; + if ((pBAEntry->ORI_BA_Status == Originator_NONE)) { +- // get one ++ /* get one */ + pAd->BATable.numAsOriginator++; + pBAEntry->ORI_BA_Status = Originator_USED; + pBAEntry->pAdapter = pAd; +@@ -739,7 +739,7 @@ VOID BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) + DBGPRINT(RT_DEBUG_TRACE, + ("BATableFreeOriEntry numAsOriginator= %ld\n", + pAd->BATable.numAsRecipient)); +- // Erase Bitmap flag. ++ /* Erase Bitmap flag. */ + } + + ASSERT(pAd->BATable.numAsOriginator != 0); +@@ -789,13 +789,13 @@ VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + if (Wcid >= MAX_LEN_OF_MAC_TABLE) { + return; + } +- // +- // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). +- // ++ /* */ ++ /* Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). */ ++ /* */ + Idx = pAd->MacTab.Content[Wcid].BAOriWcidArray[TID]; + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) { + if (bForceSend == TRUE) { +- // force send specified TID DelBA ++ /* force send specified TID DelBA */ + MLME_DELBA_REQ_STRUCT DelbaReq; + MLME_QUEUE_ELEM *Elem = + (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), +@@ -831,9 +831,9 @@ VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("\t===>Idx = %ld, Wcid=%d.TID=%d, ORI_BA_Status = %d \n", Idx, + Wcid, TID, pBAEntry->ORI_BA_Status)); +- // +- // Prepare DelBA action frame and send to the peer. +- // ++ /* */ ++ /* Prepare DelBA action frame and send to the peer. */ ++ /* */ + if ((bPassive == FALSE) && (TID == pBAEntry->TID) + && (pBAEntry->ORI_BA_Status == Originator_Done)) { + MLME_DELBA_REQ_STRUCT DelbaReq; +@@ -863,7 +863,7 @@ VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + BATableFreeOriEntry(pAd, Idx); + + if (bPassive) { +- //BAOriSessionSetUp(pAd, &pAd->MacTab.Content[Wcid], TID, 0, 10000, TRUE); ++ /*BAOriSessionSetUp(pAd, &pAd->MacTab.Content[Wcid], TID, 0, 10000, TRUE); */ + } + } + +@@ -876,9 +876,9 @@ VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + if (Wcid >= MAX_LEN_OF_MAC_TABLE) { + return; + } +- // +- // Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). +- // ++ /* */ ++ /* Locate corresponding BA Originator Entry in BA Table with the (pAddr,TID). */ ++ /* */ + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; + if (Idx == 0) + return; +@@ -890,21 +890,21 @@ VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("\t===>Idx = %ld, Wcid=%d.TID=%d, REC_BA_Status = %d \n", Idx, + Wcid, TID, pBAEntry->REC_BA_Status)); +- // +- // Prepare DelBA action frame and send to the peer. +- // ++ /* */ ++ /* Prepare DelBA action frame and send to the peer. */ ++ /* */ + if ((TID == pBAEntry->TID) + && (pBAEntry->REC_BA_Status == Recipient_Accept)) { + MLME_DELBA_REQ_STRUCT DelbaReq; + BOOLEAN Cancelled; +- //ULONG offset; +- //UINT32 VALUE; ++ /*ULONG offset; */ ++ /*UINT32 VALUE; */ + + RTMPCancelTimer(&pBAEntry->RECBATimer, &Cancelled); + +- // +- // 1. Send DELBA Action Frame +- // ++ /* */ ++ /* 1. Send DELBA Action Frame */ ++ /* */ + if (bPassive == FALSE) { + MLME_QUEUE_ELEM *Elem = + (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), +@@ -931,18 +931,18 @@ VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + } + } + +- // +- // 2. Free resource of BA session +- // +- // flush all pending reordering mpdus ++ /* */ ++ /* 2. Free resource of BA session */ ++ /* */ ++ /* flush all pending reordering mpdus */ + ba_refresh_reordering_mpdus(pAd, pBAEntry); + + NdisAcquireSpinLock(&pAd->BATabLock); + +- // Erase Bitmap flag. ++ /* Erase Bitmap flag. */ + pBAEntry->LastIndSeq = RESET_RCV_SEQ; + pBAEntry->BAWinSize = 0; +- // Erase Bitmap flag at software mactable ++ /* Erase Bitmap flag at software mactable */ + pAd->MacTab.Content[Wcid].RXBAbitmap &= + (~(1 << (pBAEntry->TID))); + pAd->MacTab.Content[Wcid].BARecWcidArray[TID] = 0; +@@ -995,7 +995,7 @@ VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, + pAd = pBAEntry->pAdapter; + + { +- // Do nothing if monitor mode is on ++ /* Do nothing if monitor mode is on */ + if (MONITOR_ON(pAd)) + return; + } +@@ -1062,7 +1062,7 @@ VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, + (unsigned long)(pBAEntry->LastIndSeqAtTimer + + REC_BA_SESSION_IDLE_TIMEOUT))) { + pAd = pBAEntry->pAdapter; +- // flush all pending reordering mpdus ++ /* flush all pending reordering mpdus */ + ba_refresh_reordering_mpdus(pAd, pBAEntry); + DBGPRINT(RT_DEBUG_OFF, + ("%ld: REC BA session Timeout\n", Now32)); +@@ -1072,15 +1072,15 @@ VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, + + VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- // 7.4.4.1 +- //ULONG Idx; ++ /* 7.4.4.1 */ ++ /*ULONG Idx; */ + UCHAR Status = 1; + UCHAR pAddr[6]; + FRAME_ADDBA_RSP ADDframe; + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; + PFRAME_ADDBA_REQ pAddreqFrame = NULL; +- //UCHAR BufSize; ++ /*UCHAR BufSize; */ + ULONG FrameLen; + PULONG ptemp; + PMAC_TABLE_ENTRY pMacEntry; +@@ -1088,16 +1088,16 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("%s ==> (Wcid = %d)\n", __func__, Elem->Wcid)); + +- //hex_dump("AddBAReq", Elem->Msg, Elem->MsgLen); ++ /*hex_dump("AddBAReq", Elem->Msg, Elem->MsgLen); */ + +- //ADDBA Request from unknown peer, ignore this. ++ /*ADDBA Request from unknown peer, ignore this. */ + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + + pMacEntry = &pAd->MacTab.Content[Elem->Wcid]; + DBGPRINT(RT_DEBUG_TRACE, ("BA - PeerAddBAReqAction----> \n")); + ptemp = (PULONG) Elem->Msg; +- //DBGPRINT_RAW(RT_DEBUG_EMU, ("%08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x\n", *(ptemp), *(ptemp+1), *(ptemp+2), *(ptemp+3), *(ptemp+4), *(ptemp+5), *(ptemp+6), *(ptemp+7), *(ptemp+8))); ++ /*DBGPRINT_RAW(RT_DEBUG_EMU, ("%08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x\n", *(ptemp), *(ptemp+1), *(ptemp+2), *(ptemp+3), *(ptemp+4), *(ptemp+5), *(ptemp+6), *(ptemp+7), *(ptemp+8))); */ + + if (PeerAddBAReqActionSanity(pAd, Elem->Msg, Elem->MsgLen, pAddr)) { + +@@ -1111,9 +1111,9 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAddreqFrame)) + Status = 0; + else +- Status = 38; // more parameters have invalid values ++ Status = 38; /* more parameters have invalid values */ + } else { +- Status = 37; // the request has been declined. ++ Status = 37; /* the request has been declined. */ + } + } + +@@ -1121,8 +1121,8 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ASSERT(pAd->MacTab.Content[Elem->Wcid].Sst == SST_ASSOC); + + pAddreqFrame = (PFRAME_ADDBA_REQ) (&Elem->Msg[0]); +- // 2. Always send back ADDBA Response +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ /* 2. Always send back ADDBA Response */ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("ACTION - PeerBAAction() allocate memory failed \n")); +@@ -1131,7 +1131,7 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + NdisZeroMemory(&ADDframe, sizeof(FRAME_ADDBA_RSP)); + +- // 2-1. Prepare ADDBA Response frame. ++ /* 2-1. Prepare ADDBA Response frame. */ + { + if (ADHOC_ON(pAd)) + ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, +@@ -1145,7 +1145,7 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADDframe.Category = CATEGORY_BA; + ADDframe.Action = ADDBA_RESP; + ADDframe.Token = pAddreqFrame->Token; +- // What is the Status code?? need to check. ++ /* What is the Status code?? need to check. */ + ADDframe.StatusCode = Status; + ADDframe.BaParm.BAPolicy = IMMED_BA; + ADDframe.BaParm.AMSDUSupported = 0; +@@ -1156,7 +1156,7 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (ADDframe.BaParm.BufSize == 0) { + ADDframe.BaParm.BufSize = 64; + } +- ADDframe.TimeOutValue = 0; //pAddreqFrame->TimeOutValue; ++ ADDframe.TimeOutValue = 0; /*pAddreqFrame->TimeOutValue; */ + + *(USHORT *) (&ADDframe.BaParm) = + cpu2le16(*(USHORT *) (&ADDframe.BaParm)); +@@ -1175,18 +1175,18 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //UCHAR Idx, i; +- //PUCHAR pOutBuffer = NULL; ++ /*UCHAR Idx, i; */ ++ /*PUCHAR pOutBuffer = NULL; */ + PFRAME_ADDBA_RSP pFrame = NULL; +- //PBA_ORI_ENTRY pBAEntry; ++ /*PBA_ORI_ENTRY pBAEntry; */ + +- //ADDBA Response from unknown peer, ignore this. ++ /*ADDBA Response from unknown peer, ignore this. */ + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + + DBGPRINT(RT_DEBUG_TRACE, ("%s ==> Wcid(%d)\n", __func__, Elem->Wcid)); + +- //hex_dump("PeerAddBARspAction()", Elem->Msg, Elem->MsgLen); ++ /*hex_dump("PeerAddBARspAction()", Elem->Msg, Elem->MsgLen); */ + + if (PeerAddBARspActionSanity(pAd, Elem->Msg, Elem->MsgLen)) { + pFrame = (PFRAME_ADDBA_RSP) (&Elem->Msg[0]); +@@ -1195,17 +1195,17 @@ VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("\t\t StatusCode = %d\n", pFrame->StatusCode)); + switch (pFrame->StatusCode) { + case 0: +- // I want a BAsession with this peer as an originator. ++ /* I want a BAsession with this peer as an originator. */ + BAOriSessionAdd(pAd, &pAd->MacTab.Content[Elem->Wcid], + pFrame); + break; + default: +- // check status == USED ??? ++ /* check status == USED ??? */ + BAOriSessionTearDown(pAd, Elem->Wcid, + pFrame->BaParm.TID, TRUE, FALSE); + break; + } +- // Rcv Decline StatusCode ++ /* Rcv Decline StatusCode */ + if ((pFrame->StatusCode == 37) + || ((pAd->OpMode == OPMODE_STA) && STA_TGN_WIFI_ON(pAd) + && (pFrame->StatusCode != 0)) +@@ -1218,12 +1218,12 @@ VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- //UCHAR Idx; +- //PUCHAR pOutBuffer = NULL; ++ /*UCHAR Idx; */ ++ /*PUCHAR pOutBuffer = NULL; */ + PFRAME_DELBA_REQ pDelFrame = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("%s ==>\n", __func__)); +- //DELBA Request from unknown peer, ignore this. ++ /*DELBA Request from unknown peer, ignore this. */ + if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) { + pDelFrame = (PFRAME_DELBA_REQ) (&Elem->Msg[0]); + if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) { +@@ -1235,7 +1235,7 @@ VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("BA - PeerDelBAAction----> RECIPIENT, Reason = %d\n", + pDelFrame->ReasonCode)); +- //hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen); ++ /*hex_dump("DelBA Frame", pDelFrame, Elem->MsgLen); */ + BAOriSessionTearDown(pAd, Elem->Wcid, + pDelFrame->DelbaParm.TID, TRUE, + FALSE); +@@ -1248,26 +1248,26 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg) + { + PFRAME_BA_REQ pFrame = pMsg; +- //PRTMP_REORDERBUF pBuffer; +- //PRTMP_REORDERBUF pDmaBuf; ++ /*PRTMP_REORDERBUF pBuffer; */ ++ /*PRTMP_REORDERBUF pDmaBuf; */ + PBA_REC_ENTRY pBAEntry; +- //BOOLEAN Result; ++ /*BOOLEAN Result; */ + ULONG Idx; +- //UCHAR NumRxPkt; +- UCHAR TID; //, i; ++ /*UCHAR NumRxPkt; */ ++ UCHAR TID; /*, i; */ + + TID = (UCHAR) pFrame->BARControl.TID; + + DBGPRINT(RT_DEBUG_TRACE, + ("%s(): BAR-Wcid(%ld), Tid (%d)\n", __func__, Wcid, TID)); +- //hex_dump("BAR", (PCHAR) pFrame, MsgLen); +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /*hex_dump("BAR", (PCHAR) pFrame, MsgLen); */ ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return FALSE; + +- // First check the size, it MUST not exceed the mlme queue size ++ /* First check the size, it MUST not exceed the mlme queue size */ + if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("CntlEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); + return FALSE; +@@ -1280,7 +1280,7 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + } + + if ((Wcid < MAX_LEN_OF_MAC_TABLE) && (TID < 8)) { +- // if this receiving packet is from SA that is in our OriEntry. Since WCID <9 has direct mapping. no need search. ++ /* if this receiving packet is from SA that is in our OriEntry. Since WCID <9 has direct mapping. no need search. */ + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; + pBAEntry = &pAd->BATable.BARecEntry[Idx]; + } else { +@@ -1294,7 +1294,7 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + if (SEQ_SMALLER + (pBAEntry->LastIndSeq, pFrame->BAStartingSeq.field.StartSeq, + MAXSEQ)) { +- //DBGPRINT(RT_DEBUG_TRACE, ("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); ++ /*DBGPRINT(RT_DEBUG_TRACE, ("BAR Seq = %x, LastIndSeq = %x\n", pFrame->BAStartingSeq.field.StartSeq, pBAEntry->LastIndSeq)); */ + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, + pFrame->BAStartingSeq.field. + StartSeq); +@@ -1302,7 +1302,7 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + (pFrame->BAStartingSeq.field.StartSeq == + 0) ? MAXSEQ : (pFrame->BAStartingSeq.field.StartSeq - 1); + } +- //ba_refresh_reordering_mpdus(pAd, pBAEntry); ++ /*ba_refresh_reordering_mpdus(pAd, pBAEntry); */ + return TRUE; + } + +@@ -1313,11 +1313,11 @@ VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) + { + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; +- //ULONG Idx; ++ /*ULONG Idx; */ + FRAME_PSMP_ACTION Frame; + ULONG FrameLen; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_ERROR, + ("BA - MlmeADDBAAction() allocate memory failed \n")); +@@ -1337,7 +1337,7 @@ VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) + || pAd->Antenna.field.TxPath > 1)) { + RTMP_ASIC_MMPS_DISABLE(pAd); + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + Frame.Psmp = 0; + break; + case MMPS_DYNAMIC: +@@ -1350,7 +1350,7 @@ VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) + || pAd->Antenna.field.TxPath > 1)) { + RTMP_ASIC_MMPS_ENABLE(pAd); + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + Frame.Psmp = 1; + break; + } +@@ -1372,7 +1372,7 @@ typedef struct PACKED { + UCHAR BSSID[MAC_ADDR_LEN]; + UCHAR ReportingCondition; + UCHAR Threshold; +- UCHAR SSIDIE[2]; // 2 byte ++ UCHAR SSIDIE[2]; /* 2 byte */ + } BEACON_REQUEST; + + typedef struct PACKED { +@@ -1391,10 +1391,10 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + PNDIS_PACKET pRxPkt; + UCHAR Header802_3[LENGTH_802_3]; + +- // 1. get 802.3 Header +- // 2. remove LLC +- // a. pointer pRxBlk->pData to payload +- // b. modify pRxBlk->DataSize ++ /* 1. get 802.3 Header */ ++ /* 2. remove LLC */ ++ /* a. pointer pRxBlk->pData to payload */ ++ /* b. modify pRxBlk->DataSize */ + + RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); + +@@ -1406,9 +1406,9 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + SET_OS_PKT_LEN(pRxPkt, pRxBlk->DataSize); + SET_OS_PKT_DATATAIL(pRxPkt, pRxBlk->pData, pRxBlk->DataSize); + +- // +- // copy 802.3 header, if necessary +- // ++ /* */ ++ /* copy 802.3 header, if necessary */ ++ /* */ + if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) { + { + #ifdef LINUX +@@ -1446,7 +1446,7 @@ static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + + mpdu_blk = ba_mpdu_blk_alloc(pAd); + if ((mpdu_blk != NULL) && (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) { +- // Write RxD buffer address & allocated buffer length ++ /* Write RxD buffer address & allocated buffer length */ + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + + mpdu_blk->Sequence = Sequence; +@@ -1459,18 +1459,18 @@ static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + + STATS_INC_RX_PACKETS(pAd, FromWhichBSSID); + +- // +- // it is necessary for reordering packet to record +- // which BSS it come from +- // ++ /* */ ++ /* it is necessary for reordering packet to record */ ++ /* which BSS it come from */ ++ /* */ + RTMP_SET_PACKET_IF(pRxBlk->pRxPacket, FromWhichBSSID); + + mpdu_blk->pPacket = pRxBlk->pRxPacket; + + if (ba_reordering_mpdu_insertsorted(&pBAEntry->list, mpdu_blk) + == FALSE) { +- // had been already within reordering list +- // don't indicate ++ /* had been already within reordering list */ ++ /* don't indicate */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_SUCCESS); + ba_mpdu_blk_free(pAd, mpdu_blk); +@@ -1489,7 +1489,7 @@ static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + * and receving mpdu to upper layer + * make tcp/ip to take care reordering mechanism + */ +- //ba_refresh_reordering_mpdus(pAd, pBAEntry); ++ /*ba_refresh_reordering_mpdus(pAd, pBAEntry); */ + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, Sequence); + + pBAEntry->LastIndSeq = Sequence; +@@ -1527,7 +1527,7 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + + if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) + && (pRxBlk->DataSize > MAX_RX_PKT_LEN)) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; +@@ -1542,9 +1542,9 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + } + pBAEntry = &pAd->BATable.BARecEntry[Idx]; + } else { +- // impossible !!! ++ /* impossible !!! */ + ASSERT(0); +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; +@@ -1552,7 +1552,7 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + + ASSERT(pBAEntry); + +- // update last rx time ++ /* update last rx time */ + NdisGetSystemUpTime(&Now32); + + pBAEntry->rcvSeq = Sequence; +@@ -1560,23 +1560,23 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32); + pBAEntry->LastIndSeqAtTimer = Now32; + +- // +- // Reset Last Indicate Sequence +- // ++ /* */ ++ /* Reset Last Indicate Sequence */ ++ /* */ + if (pBAEntry->LastIndSeq == RESET_RCV_SEQ) { + ASSERT((pBAEntry->list.qlen == 0) + && (pBAEntry->list.next == NULL)); + +- // reset rcv sequence of BA session ++ /* reset rcv sequence of BA session */ + pBAEntry->LastIndSeq = Sequence; + pBAEntry->LastIndSeqAtTimer = Now32; + INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); + return; + } + +- // +- // I. Check if in order. +- // ++ /* */ ++ /* I. Check if in order. */ ++ /* */ + if (SEQ_STEPONE(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) { + USHORT LastIndSeq; + +@@ -1590,29 +1590,29 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + } + pBAEntry->LastIndSeqAtTimer = Now32; + } +- // +- // II. Drop Duplicated Packet +- // ++ /* */ ++ /* II. Drop Duplicated Packet */ ++ /* */ + else if (Sequence == pBAEntry->LastIndSeq) { + +- // drop and release packet ++ /* drop and release packet */ + pBAEntry->nDropPacket++; + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + } +- // +- // III. Drop Old Received Packet +- // ++ /* */ ++ /* III. Drop Old Received Packet */ ++ /* */ + else if (SEQ_SMALLER(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) { + +- // drop and release packet ++ /* drop and release packet */ + pBAEntry->nDropPacket++; + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + } +- // +- // IV. Receive Sequence within Window Size +- // ++ /* */ ++ /* IV. Receive Sequence within Window Size */ ++ /* */ + else if (SEQ_SMALLER + (Sequence, + (((pBAEntry->LastIndSeq + pBAEntry->BAWinSize + 1)) & MAXSEQ), +@@ -1620,9 +1620,9 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + ba_enqueue_reordering_packet(pAd, pBAEntry, pRxBlk, + FromWhichBSSID); + } +- // +- // V. Receive seq surpasses Win(lastseq + nMSDU). So refresh all reorder buffer +- // ++ /* */ ++ /* V. Receive seq surpasses Win(lastseq + nMSDU). So refresh all reorder buffer */ ++ /* */ + else { + LONG WinStartSeq, TmpSeq; + +@@ -1632,7 +1632,7 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + } + WinStartSeq = (TmpSeq + 1) & MAXSEQ; + ba_indicate_reordering_mpdus_le_seq(pAd, pBAEntry, WinStartSeq); +- pBAEntry->LastIndSeq = WinStartSeq; //TmpSeq; ++ pBAEntry->LastIndSeq = WinStartSeq; /*TmpSeq; */ + + pBAEntry->LastIndSeqAtTimer = Now32; + +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +index a3758b0..030678c 100644 +--- a/drivers/staging/rt2860/common/cmm_aes.c ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -277,7 +277,7 @@ void construct_mic_header2(unsigned char *mic_header2, + mic_header2[4] = mpdu[20]; + mic_header2[5] = mpdu[21]; + +- // In Sequence Control field, mute sequence numer bits (12-bit) ++ /* In Sequence Control field, mute sequence numer bits (12-bit) */ + mic_header2[6] = mpdu[22] & 0x0f; /* SC */ + mic_header2[7] = 0x00; /* mpdu[23]; */ + +@@ -403,7 +403,7 @@ void construct_ctr_preload(unsigned char *ctr_preload, + for (i = 8; i < 14; i++) + ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */ + #endif +- ctr_preload[14] = (unsigned char)(c / 256); // Ctr ++ ctr_preload[14] = (unsigned char)(c / 256); /* Ctr */ + ctr_preload[15] = (unsigned char)(c % 256); + + } +@@ -477,12 +477,12 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + PN[4] = *(pData + HeaderLen + 6); + PN[5] = *(pData + HeaderLen + 7); + +- payload_len = DataByteCnt - HeaderLen - 8 - 8; // 8 bytes for CCMP header , 8 bytes for MIC ++ payload_len = DataByteCnt - HeaderLen - 8 - 8; /* 8 bytes for CCMP header , 8 bytes for MIC */ + payload_remainder = (payload_len) % 16; + num_blocks = (payload_len) / 16; + +- // Find start of payload +- payload_index = HeaderLen + 8; //IV+EIV ++ /* Find start of payload */ ++ payload_index = HeaderLen + 8; /*IV+EIV */ + + for (i = 0; i < num_blocks; i++) { + construct_ctr_preload(ctr_preload, +@@ -495,10 +495,10 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + payload_index += 16; + } + +- // +- // If there is a short final block, then pad it +- // encrypt it and copy the unpadded part back +- // ++ /* */ ++ /* If there is a short final block, then pad it */ ++ /* encrypt it and copy the unpadded part back */ ++ /* */ + if (payload_remainder > 0) { + construct_ctr_preload(ctr_preload, + a4_exists, +@@ -515,9 +515,9 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + payload_remainder); + payload_index += payload_remainder; + } +- // +- // Descrypt the MIC +- // ++ /* */ ++ /* Descrypt the MIC */ ++ /* */ + construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pData, PN, 0); + NdisZeroMemory(padded_buffer, 16); + NdisMoveMemory(padded_buffer, pData + payload_index, 8); +@@ -528,15 +528,15 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + + NdisMoveMemory(TrailMIC, chain_buffer, 8); + +- // +- // Calculate MIC +- // ++ /* */ ++ /* Calculate MIC */ ++ /* */ + +- //Force the protected frame bit on ++ /*Force the protected frame bit on */ + *(pData + 1) = *(pData + 1) | 0x40; + +- // Find start of payload +- // Because the CCMP header has been removed ++ /* Find start of payload */ ++ /* Because the CCMP header has been removed */ + payload_index = HeaderLen; + + construct_mic_iv(mic_iv, qc_exists, a4_exists, pData, payload_len, PN); +@@ -551,14 +551,14 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + bitwise_xor(aes_out, mic_header2, chain_buffer); + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + +- // iterate through each 16 byte payload block ++ /* iterate through each 16 byte payload block */ + for (i = 0; i < num_blocks; i++) { + bitwise_xor(aes_out, pData + payload_index, chain_buffer); + payload_index += 16; + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + } + +- // Add on the final payload block if it needs padding ++ /* Add on the final payload block if it needs padding */ + if (payload_remainder > 0) { + NdisZeroMemory(padded_buffer, 16); + NdisMoveMemory(padded_buffer, pData + payload_index, +@@ -567,13 +567,13 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + bitwise_xor(aes_out, padded_buffer, chain_buffer); + aes128k128d(pWpaKey[KeyID].Key, chain_buffer, aes_out); + } +- // aes_out contains padded mic, discard most significant +- // 8 bytes to generate 64 bit MIC ++ /* aes_out contains padded mic, discard most significant */ ++ /* 8 bytes to generate 64 bit MIC */ + for (i = 0; i < 8; i++) + MIC[i] = aes_out[i]; + + if (!NdisEqualMemory(MIC, TrailMIC, 8)) { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); //MIC error. ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptAES, MIC Error !\n")); /*MIC error. */ + return FALSE; + } + +@@ -1208,27 +1208,27 @@ VOID AES_GTK_KEY_WRAP(IN UCHAR * key, + { + UCHAR A[8], BIN[16], BOUT[16]; + UCHAR R[512]; +- INT num_blocks = p_len / 8; // unit:64bits ++ INT num_blocks = p_len / 8; /* unit:64bits */ + INT i, j; + aes_context aesctx; + UCHAR xor; + + rt_aes_set_key(&aesctx, key, 128); + +- // Init IA ++ /* Init IA */ + for (i = 0; i < 8; i++) + A[i] = 0xa6; + +- //Input plaintext ++ /*Input plaintext */ + for (i = 0; i < num_blocks; i++) { + for (j = 0; j < 8; j++) + R[8 * (i + 1) + j] = plaintext[8 * i + j]; + } + +- // Key Mix ++ /* Key Mix */ + for (j = 0; j < 6; j++) { + for (i = 1; i <= num_blocks; i++) { +- //phase 1 ++ /*phase 1 */ + NdisMoveMemory(BIN, A, 8); + NdisMoveMemory(&BIN[8], &R[8 * i], 8); + rt_aes_encrypt(&aesctx, BIN, BOUT); +@@ -1240,7 +1240,7 @@ VOID AES_GTK_KEY_WRAP(IN UCHAR * key, + } + } + +- // Output ciphertext ++ /* Output ciphertext */ + NdisMoveMemory(ciphertext, A, 8); + + for (i = 1; i <= num_blocks; i++) { +@@ -1273,7 +1273,7 @@ VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, + INT i, j; + aes_context aesctx; + UCHAR *R; +- INT num_blocks = c_len / 8; // unit:64bits ++ INT num_blocks = c_len / 8; /* unit:64bits */ + + os_alloc_mem(NULL, (PUCHAR *) & R, 512); + +@@ -1283,9 +1283,9 @@ VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, + return; + } + /* End of if */ +- // Initialize ++ /* Initialize */ + NdisMoveMemory(A, ciphertext, 8); +- //Input plaintext ++ /*Input plaintext */ + for (i = 0; i < (c_len - 8); i++) { + R[i] = ciphertext[i + 8]; + } +@@ -1304,7 +1304,7 @@ VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, + } + } + +- // OUTPUT ++ /* OUTPUT */ + for (i = 0; i < c_len; i++) { + plaintext[i] = R[i]; + } +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index 7205b36..468aba5 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -37,9 +37,9 @@ + + #include "../rt_config.h" + +-// Reset the RFIC setting to new series ++/* Reset the RFIC setting to new series */ + RTMP_RF_REGS RF2850RegTable[] = { +-// ch R1 R2 R3(TX0~4=0) R4 ++/* ch R1 R2 R3(TX0~4=0) R4 */ + {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b} + , + {2, 0x98402ecc, 0x984c0786, 0x98168a55, 0x9800519f} +@@ -69,7 +69,7 @@ RTMP_RF_REGS RF2850RegTable[] = { + {14, 0x98402ecc, 0x984c07a2, 0x98168a55, 0x98005193} + , + +- // 802.11 UNI / HyperLan 2 ++ /* 802.11 UNI / HyperLan 2 */ + {36, 0x98402ecc, 0x984c099a, 0x98158a55, 0x980ed1a3} + , + {38, 0x98402ecc, 0x984c099e, 0x98158a55, 0x980ed193} +@@ -93,15 +93,15 @@ RTMP_RF_REGS RF2850RegTable[] = { + {62, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed193} + , + {64, 0x98402ec8, 0x984c0692, 0x98158a55, 0x980ed1a3} +- , // Plugfest#4, Day4, change RFR3 left4th 9->5. ++ , /* Plugfest#4, Day4, change RFR3 left4th 9->5. */ + +- // 802.11 HyperLan 2 ++ /* 802.11 HyperLan 2 */ + {100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783} + , + +- // 2008.04.30 modified +- // The system team has AN to improve the EVM value +- // for channel 102 to 108 for the RT2850/RT2750 dual band solution. ++ /* 2008.04.30 modified */ ++ /* The system team has AN to improve the EVM value */ ++ /* for channel 102 to 108 for the RT2850/RT2750 dual band solution. */ + {102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793} + , + {104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3} +@@ -122,7 +122,7 @@ RTMP_RF_REGS RF2850RegTable[] = { + {124, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed193} + , + {126, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed15b} +- , // 0x980ed1bb->0x980ed15b required by Rory 20070927 ++ , /* 0x980ed1bb->0x980ed15b required by Rory 20070927 */ + {128, 0x98402ec4, 0x984c0382, 0x98178a55, 0x980ed1a3} + , + {132, 0x98402ec4, 0x984c0386, 0x98178a55, 0x980ed18b} +@@ -134,7 +134,7 @@ RTMP_RF_REGS RF2850RegTable[] = { + {140, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed183} + , + +- // 802.11 UNII ++ /* 802.11 UNII */ + {149, 0x98402ec4, 0x984c038a, 0x98178a55, 0x980ed1a7} + , + {151, 0x98402ec4, 0x984c038e, 0x98178a55, 0x980ed187} +@@ -158,7 +158,7 @@ RTMP_RF_REGS RF2850RegTable[] = { + {173, 0x98402ec4, 0x984c03d6, 0x98179855, 0x9815530f} + , + +- // Japan ++ /* Japan */ + {184, 0x95002ccc, 0x9500491e, 0x9509be55, 0x950c0a0b} + , + {188, 0x95002ccc, 0x95004922, 0x9509be55, 0x950c0a13} +@@ -174,18 +174,18 @@ RTMP_RF_REGS RF2850RegTable[] = { + {216, 0x95002ccc, 0x95004982, 0x9509be55, 0x950c0a23} + , + +- // still lack of MMAC(Japan) ch 34,38,42,46 ++ /* still lack of MMAC(Japan) ch 34,38,42,46 */ + }; + + UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); + + FREQUENCY_ITEM FreqItems3020[] = { + /**************************************************/ +- // ISM : 2.4 to 2.483 GHz // ++ /* ISM : 2.4 to 2.483 GHz // */ + /**************************************************/ +- // 11g ++ /* 11g */ + /**************************************************/ +- //-CH---N-------R---K----------- ++ /*-CH---N-------R---K----------- */ + {1, 241, 2, 2} + , + {2, 241, 2, 7} +@@ -227,7 +227,7 @@ VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + LG_FBK_CFG1_STRUC LgCfg1; + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; + +- // set to initial value ++ /* set to initial value */ + HtCfg0.word = 0x65432100; + HtCfg1.word = 0xedcba988; + LgCfg0.word = 0xedcba988; +@@ -237,9 +237,9 @@ VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + for (i = 1; i < *((PUCHAR) pRateTable); i++) { + pCurrTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1 + i; + switch (pCurrTxRate->Mode) { +- case 0: //CCK ++ case 0: /*CCK */ + break; +- case 1: //OFDM ++ case 1: /*OFDM */ + { + switch (pCurrTxRate->CurrMCS) { + case 0: +@@ -309,8 +309,8 @@ VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + } + } + break; +- case 2: //HT-MIX +- case 3: //HT-GF ++ case 2: /*HT-MIX */ ++ case 3: /*HT-GF */ + { + if ((pNextTxRate->Mode >= MODE_HTMIX) + && (pCurrTxRate->CurrMCS != +@@ -433,16 +433,16 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + } + + if (pAd->BATable.numDoneOriginator) { +- // +- // enable the RTS/CTS to avoid channel collision +- // ++ /* */ ++ /* enable the RTS/CTS to avoid channel collision */ ++ /* */ + SetMask = ALLN_SETPROTECT; + OperationMode = 8; + } +- // Config ASIC RTS threshold register ++ /* Config ASIC RTS threshold register */ + RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg); + MacReg &= 0xFF0000FF; +- // If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 ++ /* If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096 */ + if (((pAd->CommonCfg.BACapability.field.AmsduEnable) || + (pAd->CommonCfg.bAggregationCapable == TRUE)) + && pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD) { +@@ -453,7 +453,7 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + + RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg); + +- // Initial common protection settings ++ /* Initial common protection settings */ + RTMPZeroMemory(Protect, sizeof(Protect)); + ProtCfg4.word = 0; + ProtCfg.word = 0; +@@ -466,72 +466,72 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + ProtCfg.field.RTSThEn = 1; + ProtCfg.field.ProtectNav = ASIC_SHORTNAV; + +- // update PHY mode and rate ++ /* update PHY mode and rate */ + if (pAd->CommonCfg.Channel > 14) + ProtCfg.field.ProtectRate = 0x4000; + ProtCfg.field.ProtectRate |= pAd->CommonCfg.RtsRate; + +- // Handle legacy(B/G) protection ++ /* Handle legacy(B/G) protection */ + if (bDisableBGProtect) { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; ++ /*ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; */ + ProtCfg.field.ProtectCtrl = 0; + Protect[0] = ProtCfg.word; + Protect[1] = ProtCfg.word; + pAd->FlgCtsEnabled = 0; /* CTS-self is not used */ + } else { +- //ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; +- ProtCfg.field.ProtectCtrl = 0; // CCK do not need to be protected ++ /*ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate; */ ++ ProtCfg.field.ProtectCtrl = 0; /* CCK do not need to be protected */ + Protect[0] = ProtCfg.word; +- ProtCfg.field.ProtectCtrl = ASIC_CTS; // OFDM needs using CCK to protect ++ ProtCfg.field.ProtectCtrl = ASIC_CTS; /* OFDM needs using CCK to protect */ + Protect[1] = ProtCfg.word; + pAd->FlgCtsEnabled = 1; /* CTS-self is used */ + } + +- // Decide HT frame protection. ++ /* Decide HT frame protection. */ + if ((SetMask & ALLN_SETPROTECT) != 0) { + switch (OperationMode) { + case 0x0: +- // NO PROTECT +- // 1.All STAs in the BSS are 20/40 MHz HT +- // 2. in ai 20/40MHz BSS +- // 3. all STAs are 20MHz in a 20MHz BSS +- // Pure HT. no protection. +- +- // MM20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ /* NO PROTECT */ ++ /* 1.All STAs in the BSS are 20/40 MHz HT */ ++ /* 2. in ai 20/40MHz BSS */ ++ /* 3. all STAs are 20MHz in a 20MHz BSS */ ++ /* Pure HT. no protection. */ ++ ++ /* MM20_PROT_CFG */ ++ /* Reserved (31:27) */ ++ /* PROT_TXOP(25:20) -- 010111 */ ++ /* PROT_NAV(19:18) -- 01 (Short NAV protection) */ ++ /* PROT_CTRL(17:16) -- 00 (None) */ ++ /* PROT_RATE(15:0) -- 0x4004 (OFDM 24M) */ + Protect[2] = 0x01744004; + +- // MM40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ /* MM40_PROT_CFG */ ++ /* Reserved (31:27) */ ++ /* PROT_TXOP(25:20) -- 111111 */ ++ /* PROT_NAV(19:18) -- 01 (Short NAV protection) */ ++ /* PROT_CTRL(17:16) -- 00 (None) */ ++ /* PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) */ + Protect[3] = 0x03f44084; + +- // CF20_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 010111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M) ++ /* CF20_PROT_CFG */ ++ /* Reserved (31:27) */ ++ /* PROT_TXOP(25:20) -- 010111 */ ++ /* PROT_NAV(19:18) -- 01 (Short NAV protection) */ ++ /* PROT_CTRL(17:16) -- 00 (None) */ ++ /* PROT_RATE(15:0) -- 0x4004 (OFDM 24M) */ + Protect[4] = 0x01744004; + +- // CF40_PROT_CFG +- // Reserved (31:27) +- // PROT_TXOP(25:20) -- 111111 +- // PROT_NAV(19:18) -- 01 (Short NAV protection) +- // PROT_CTRL(17:16) -- 00 (None) +- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) ++ /* CF40_PROT_CFG */ ++ /* Reserved (31:27) */ ++ /* PROT_TXOP(25:20) -- 111111 */ ++ /* PROT_NAV(19:18) -- 01 (Short NAV protection) */ ++ /* PROT_CTRL(17:16) -- 00 (None) */ ++ /* PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M) */ + Protect[5] = 0x03f44084; + + if (bNonGFExist) { +- // PROT_NAV(19:18) -- 01 (Short NAV protectiion) +- // PROT_CTRL(17:16) -- 01 (RTS/CTS) ++ /* PROT_NAV(19:18) -- 01 (Short NAV protectiion) */ ++ /* PROT_CTRL(17:16) -- 01 (RTS/CTS) */ + Protect[4] = 0x01754004; + Protect[5] = 0x03f54084; + } +@@ -539,16 +539,16 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + break; + + case 1: +- // This is "HT non-member protection mode." +- // If there may be non-HT STAs my BSS +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ /* This is "HT non-member protection mode." */ ++ /* If there may be non-HT STAs my BSS */ ++ ProtCfg.word = 0x01744004; /* PROT_CTRL(17:16) : 0 (None) */ ++ ProtCfg4.word = 0x03f44084; /* duplicaet legacy 24M. BW set 1. */ + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_BG_PROTECTION_INUSED)) { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083; ++ ProtCfg.word = 0x01740003; /*ERP use Protection bit is set, use protection rate at Clause 18.. */ ++ ProtCfg4.word = 0x03f40003; /* Don't duplicate RTS/CTS in CCK mode. 0x03f40083; */ + } +- //Assign Protection method for 20&40 MHz packets ++ /*Assign Protection method for 20&40 MHz packets */ + ProtCfg.field.ProtectCtrl = ASIC_RTS; + ProtCfg.field.ProtectNav = ASIC_SHORTNAV; + ProtCfg4.field.ProtectCtrl = ASIC_RTS; +@@ -561,11 +561,11 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + break; + + case 2: +- // If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets +- ProtCfg.word = 0x01744004; // PROT_CTRL(17:16) : 0 (None) +- ProtCfg4.word = 0x03f44084; // duplicaet legacy 24M. BW set 1. ++ /* If only HT STAs are in BSS. at least one is 20MHz. Only protect 40MHz packets */ ++ ProtCfg.word = 0x01744004; /* PROT_CTRL(17:16) : 0 (None) */ ++ ProtCfg4.word = 0x03f44084; /* duplicaet legacy 24M. BW set 1. */ + +- //Assign Protection method for 40MHz packets ++ /*Assign Protection method for 40MHz packets */ + ProtCfg4.field.ProtectCtrl = ASIC_RTS; + ProtCfg4.field.ProtectNav = ASIC_SHORTNAV; + Protect[2] = ProtCfg.word; +@@ -581,17 +581,17 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + break; + + case 3: +- // HT mixed mode. PROTECT ALL! +- // Assign Rate +- ProtCfg.word = 0x01744004; //duplicaet legacy 24M. BW set 1. ++ /* HT mixed mode. PROTECT ALL! */ ++ /* Assign Rate */ ++ ProtCfg.word = 0x01744004; /*duplicaet legacy 24M. BW set 1. */ + ProtCfg4.word = 0x03f44084; +- // both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the ++ /* both 20MHz and 40MHz are protected. Whether use RTS or CTS-to-self depends on the */ + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_BG_PROTECTION_INUSED)) { +- ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18.. +- ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083 ++ ProtCfg.word = 0x01740003; /*ERP use Protection bit is set, use protection rate at Clause 18.. */ ++ ProtCfg4.word = 0x03f40003; /* Don't duplicate RTS/CTS in CCK mode. 0x03f40083 */ + } +- //Assign Protection method for 20&40 MHz packets ++ /*Assign Protection method for 20&40 MHz packets */ + ProtCfg.field.ProtectCtrl = ASIC_RTS; + ProtCfg.field.ProtectNav = ASIC_SHORTNAV; + ProtCfg4.field.ProtectCtrl = ASIC_RTS; +@@ -604,7 +604,7 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + break; + + case 8: +- // Special on for Atheros problem n chip. ++ /* Special on for Atheros problem n chip. */ + Protect[2] = 0x01754004; + Protect[3] = 0x03f54084; + Protect[4] = 0x01754004; +@@ -634,17 +634,17 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + { + ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; +- CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; //Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; ++ CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; /*Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; */ + UCHAR index; +- UINT32 Value = 0; //BbpReg, Value; ++ UINT32 Value = 0; /*BbpReg, Value; */ + RTMP_RF_REGS *RFRegTable; + UCHAR RFValue; + + RFValue = 0; +- // Search Tx power value +- // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list +- // in ChannelList, so use TxPower array instead. +- // ++ /* Search Tx power value */ ++ /* We can't use ChannelList to search channel, since some central channl's txpowr doesn't list */ ++ /* in ChannelList, so use TxPower array instead. */ ++ /* */ + for (index = 0; index < MAX_NUM_OF_CHANNELS; index++) { + if (Channel == pAd->TxPower[index].Channel) { + TxPwer = pAd->TxPower[index].Power; +@@ -659,7 +659,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + Channel)); + } + #ifdef RT30xx +- // The RF programming sequence is difference between 3xxx and 2xxx ++ /* The RF programming sequence is difference between 3xxx and 2xxx */ + if ((IS_RT3070(pAd) || IS_RT3090(pAd) || IS_RT3390(pAd)) + && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) + || (pAd->RfIcType == RFIC_3021) +@@ -668,7 +668,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + + for (index = 0; index < NUM_OF_3020_CHNL; index++) { + if (Channel == FreqItems3020[index].Channel) { +- // Programming channel parameters ++ /* Programming channel parameters */ + RT30xxWriteRFRegister(pAd, RF_R02, + FreqItems3020[index].N); + RT30xxWriteRFRegister(pAd, RF_R03, +@@ -678,21 +678,21 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + (RFValue & 0xFC) | FreqItems3020[index].R; + RT30xxWriteRFRegister(pAd, RF_R06, RFValue); + +- // Set Tx0 Power ++ /* Set Tx0 Power */ + RT30xxReadRFRegister(pAd, RF_R12, &RFValue); + RFValue = (RFValue & 0xE0) | TxPwer; + RT30xxWriteRFRegister(pAd, RF_R12, RFValue); + +- // Set Tx1 Power ++ /* Set Tx1 Power */ + RT30xxReadRFRegister(pAd, RF_R13, &RFValue); + RFValue = (RFValue & 0xE0) | TxPwer2; + RT30xxWriteRFRegister(pAd, RF_R13, RFValue); + +- // Tx/Rx Stream setting ++ /* Tx/Rx Stream setting */ + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +- //if (IS_RT3090(pAd)) +- // RFValue |= 0x01; // Enable RF block. +- RFValue &= 0x03; //clear bit[7~2] ++ /*if (IS_RT3090(pAd)) */ ++ /* RFValue |= 0x01; // Enable RF block. */ ++ RFValue &= 0x03; /*clear bit[7~2] */ + if (pAd->Antenna.field.TxPath == 1) + RFValue |= 0xA0; + else if (pAd->Antenna.field.TxPath == 2) +@@ -703,28 +703,28 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + RFValue |= 0x40; + RT30xxWriteRFRegister(pAd, RF_R01, RFValue); + +- // Set RF offset ++ /* Set RF offset */ + RT30xxReadRFRegister(pAd, RF_R23, &RFValue); + RFValue = (RFValue & 0x80) | pAd->RfFreqOffset; + RT30xxWriteRFRegister(pAd, RF_R23, RFValue); + +- // Set BW ++ /* Set BW */ + if (!bScan + && (pAd->CommonCfg.BBPCurrentBW == BW_40)) { + RFValue = pAd->Mlme.CaliBW40RfR24; +- //DISABLE_11N_CHECK(pAd); ++ /*DISABLE_11N_CHECK(pAd); */ + } else { + RFValue = pAd->Mlme.CaliBW20RfR24; + } + RT30xxWriteRFRegister(pAd, RF_R24, RFValue); + RT30xxWriteRFRegister(pAd, RF_R31, RFValue); + +- // Enable RF tuning ++ /* Enable RF tuning */ + RT30xxReadRFRegister(pAd, RF_R07, &RFValue); + RFValue = RFValue | 0x1; + RT30xxWriteRFRegister(pAd, RF_R07, RFValue); + +- // latch channel for future usage. ++ /* latch channel for future usage. */ + pAd->LatchRfRegs.Channel = Channel; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -739,7 +739,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + } + } + } else +-#endif // RT30xx // ++#endif /* RT30xx // */ + { + RFRegTable = RF2850RegTable; + switch (pAd->RfIcType) { +@@ -752,26 +752,26 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + if (Channel == RFRegTable[index].Channel) { + R2 = RFRegTable[index].R2; + if (pAd->Antenna.field.TxPath == 1) { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ R2 |= 0x4000; /* If TXpath is 1, bit 14 = 1; */ + } + + if (pAd->Antenna.field.RxPath == 2) { +- R2 |= 0x40; // write 1 to off Rxpath. ++ R2 |= 0x40; /* write 1 to off Rxpath. */ + } else if (pAd->Antenna.field.RxPath == + 1) { +- R2 |= 0x20040; // write 1 to off RxPath ++ R2 |= 0x20040; /* write 1 to off RxPath */ + } + + if (Channel > 14) { +- // initialize R3, R4 ++ /* initialize R3, R4 */ + R3 = (RFRegTable[index]. + R3 & 0xffffc1ff); + R4 = (RFRegTable[index]. + R4 & (~0x001f87c0)) | + (pAd->RfFreqOffset << 15); + +- // 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB +- // R3 ++ /* 5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB */ ++ /* R3 */ + if ((TxPwer >= -7) + && (TxPwer < 0)) { + TxPwer = (7 + TxPwer); +@@ -794,7 +794,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + 9); + } + +- // R4 ++ /* R4 */ + if ((TxPwer2 >= -7) + && (TxPwer2 < 0)) { + TxPwer2 = (7 + TxPwer2); +@@ -817,17 +817,17 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + 6); + } + } else { +- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0 +- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 << 6); // Set freq Offset & TxPwr1 ++ R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); /* set TX power0 */ ++ R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->RfFreqOffset << 15) | (TxPwer2 << 6); /* Set freq Offset & TxPwr1 */ + } + +- // Based on BBP current mode before changing RF channel. ++ /* Based on BBP current mode before changing RF channel. */ + if (!bScan + && (pAd->CommonCfg.BBPCurrentBW == + BW_40)) { + R4 |= 0x200000; + } +- // Update variables ++ /* Update variables */ + pAd->LatchRfRegs.Channel = Channel; + pAd->LatchRfRegs.R1 = + RFRegTable[index].R1; +@@ -835,7 +835,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + pAd->LatchRfRegs.R3 = R3; + pAd->LatchRfRegs.R4 = R4; + +- // Set RF value 1's set R3[bit2] = [0] ++ /* Set RF value 1's set R3[bit2] = [0] */ + RTMP_RF_IO_WRITE32(pAd, + pAd->LatchRfRegs.R1); + RTMP_RF_IO_WRITE32(pAd, +@@ -848,7 +848,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + + RTMPusecDelay(200); + +- // Set RF value 2's set R3[bit2] = [1] ++ /* Set RF value 2's set R3[bit2] = [1] */ + RTMP_RF_IO_WRITE32(pAd, + pAd->LatchRfRegs.R1); + RTMP_RF_IO_WRITE32(pAd, +@@ -861,7 +861,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + + RTMPusecDelay(200); + +- // Set RF value 3's set R3[bit2] = [0] ++ /* Set RF value 3's set R3[bit2] = [0] */ + RTMP_RF_IO_WRITE32(pAd, + pAd->LatchRfRegs.R1); + RTMP_RF_IO_WRITE32(pAd, +@@ -889,9 +889,9 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + pAd->LatchRfRegs.R3, pAd->LatchRfRegs.R4)); + } + +- // Change BBP setting during siwtch from a->g, g->a ++ /* Change BBP setting during siwtch from a->g, g->a */ + if (Channel <= 14) { +- ULONG TxPinCfg = 0x00050F0A; //Gary 2007/08/09 0x050A0A ++ ULONG TxPinCfg = 0x00050F0A; /*Gary 2007/08/09 0x050A0A */ + + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, + (0x37 - GET_LNA_GAIN(pAd))); +@@ -899,10 +899,10 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + (0x37 - GET_LNA_GAIN(pAd))); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, + (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); //(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); /*(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. */ ++ /*RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); */ + +- // Rx High power VGA offset for LNA select ++ /* Rx High power VGA offset for LNA select */ + if (pAd->NicConfig2.field.ExternalLNAForG) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); +@@ -911,13 +911,13 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); + } + +- // 5G band selection PIN, bit1 and bit2 are complement ++ /* 5G band selection PIN, bit1 and bit2 are complement */ + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); + Value &= (~0x6); + Value |= (0x04); + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + +- // Turn off unused PA or LNA when only 1T or 1R ++ /* Turn off unused PA or LNA when only 1T or 1R */ + if (pAd->Antenna.field.TxPath == 1) { + TxPinCfg &= 0xFFFFFFF3; + } +@@ -928,7 +928,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg); + + #if defined(RT3090) || defined(RT3390) +- // PCIe PHY Transmit attenuation adjustment ++ /* PCIe PHY Transmit attenuation adjustment */ + if (IS_RT3090A(pAd) || IS_RT3390(pAd)) { + TX_ATTENUATION_CTRL_STRUC TxAttenuationCtrl = { + .word = 0}; +@@ -936,14 +936,14 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + RTMP_IO_READ32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, + &TxAttenuationCtrl.word); + +- if (Channel == 14) // Channel #14 ++ if (Channel == 14) /* Channel #14 */ + { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; // Enable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; // 9/16 full drive level +- } else // Channel #1~#13 ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 1; /* Enable PCIe PHY Tx attenuation */ ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 4; /* 9/16 full drive level */ ++ } else /* Channel #1~#13 */ + { +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; // Disable PCIe PHY Tx attenuation +- TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; // n/a ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_EN = 0; /* Disable PCIe PHY Tx attenuation */ ++ TxAttenuationCtrl.field.PCIE_PHY_TX_ATTEN_VALUE = 0; /* n/a */ + } + + RTMP_IO_WRITE32(pAd, PCIE_PHY_TX_ATTENUATION_CTRL, +@@ -951,7 +951,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + } + #endif + } else { +- ULONG TxPinCfg = 0x00050F05; //Gary 2007/8/9 0x050505 ++ ULONG TxPinCfg = 0x00050F05; /*Gary 2007/8/9 0x050505 */ + + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, + (0x37 - GET_LNA_GAIN(pAd))); +@@ -959,23 +959,23 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + (0x37 - GET_LNA_GAIN(pAd))); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, + (0x37 - GET_LNA_GAIN(pAd))); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); //(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. ++ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0); /*(0x44 - GET_LNA_GAIN(pAd))); // According the Rory's suggestion to solve the middle range issue. */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2); + +- // Rx High power VGA offset for LNA select ++ /* Rx High power VGA offset for LNA select */ + if (pAd->NicConfig2.field.ExternalLNAForA) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x46); + } else { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R75, 0x50); + } + +- // 5G band selection PIN, bit1 and bit2 are complement ++ /* 5G band selection PIN, bit1 and bit2 are complement */ + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); + Value &= (~0x6); + Value |= (0x02); + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + +- // Turn off unused PA or LNA when only 1T or 1R ++ /* Turn off unused PA or LNA when only 1T or 1R */ + if (pAd->Antenna.field.TxPath == 1) { + TxPinCfg &= 0xFFFFFFF3; + } +@@ -987,18 +987,18 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + + } + +- // R66 should be set according to Channel and use 20MHz when scanning +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd))); ++ /* R66 should be set according to Channel and use 20MHz when scanning */ ++ /*RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd))); */ + if (bScan) + RTMPSetAGCInitValue(pAd, BW_20); + else + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); + +- // +- // On 11A, We should delay and wait RF/BBP to be stable +- // and the appropriate time should be 1000 micro seconds +- // 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. +- // ++ /* */ ++ /* On 11A, We should delay and wait RF/BBP to be stable */ ++ /* and the appropriate time should be 1000 micro seconds */ ++ /* 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL. */ ++ /* */ + RTMPusecDelay(1000); + } + +@@ -1006,7 +1006,7 @@ VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) + { + BBP_CSR_CFG_STRUC BbpCsr; + DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); +- // Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. ++ /* Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. */ + RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word); + BbpCsr.field.Busy = 0; + RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, BbpCsr.word); +@@ -1067,7 +1067,7 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || + #ifdef RTMP_MAC_PCI + (pAd->bPCIclkOff == TRUE) || +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF) || + RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + return; +@@ -1107,7 +1107,7 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + } + } + +- // TX power compensation for temperature variation based on TSSI. try every 4 second ++ /* TX power compensation for temperature variation based on TSSI. try every 4 second */ + if (pAd->Mlme.OneSecPeriodicRound % 4 == 0) { + if (pAd->CommonCfg.Channel <= 14) { + /* bg channel */ +@@ -1145,30 +1145,30 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + /* if value is 0xa5, tx power will be -= TxAgcStep*(2-1) */ + + if (BbpR49 > pTssiMinusBoundary[1]) { +- // Reading is larger than the reference value +- // check for how large we need to decrease the Tx power ++ /* Reading is larger than the reference value */ ++ /* check for how large we need to decrease the Tx power */ + for (idx = 1; idx < 5; idx++) { +- if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range ++ if (BbpR49 <= pTssiMinusBoundary[idx]) /* Found the range */ + break; + } +- // The index is the step we should decrease, idx = 0 means there is nothing to compensate +-// if (R3 > (ULONG) (TxAgcStep * (idx-1))) ++ /* The index is the step we should decrease, idx = 0 means there is nothing to compensate */ ++/* if (R3 > (ULONG) (TxAgcStep * (idx-1))) */ + *pTxAgcCompensate = -(TxAgcStep * (idx - 1)); +-// else +-// *pTxAgcCompensate = -((UCHAR)R3); ++/* else */ ++/* *pTxAgcCompensate = -((UCHAR)R3); */ + + DeltaPwr += (*pTxAgcCompensate); + DBGPRINT(RT_DEBUG_TRACE, + ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n", + BbpR49, TssiRef, TxAgcStep, idx - 1)); + } else if (BbpR49 < pTssiPlusBoundary[1]) { +- // Reading is smaller than the reference value +- // check for how large we need to increase the Tx power ++ /* Reading is smaller than the reference value */ ++ /* check for how large we need to increase the Tx power */ + for (idx = 1; idx < 5; idx++) { +- if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range ++ if (BbpR49 >= pTssiPlusBoundary[idx]) /* Found the range */ + break; + } +- // The index is the step we should increase, idx = 0 means there is nothing to compensate ++ /* The index is the step we should increase, idx = 0 means there is nothing to compensate */ + *pTxAgcCompensate = TxAgcStep * (idx - 1); + DeltaPwr += (*pTxAgcCompensate); + DBGPRINT(RT_DEBUG_TRACE, +@@ -1198,34 +1198,34 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + BbpR1 &= 0xFC; + + /* calculate delta power based on the percentage specified from UI */ +- // E2PROM setting is calibrated for maximum TX power (i.e. 100%) +- // We lower TX power here according to the percentage specified from UI +- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control ++ /* E2PROM setting is calibrated for maximum TX power (i.e. 100%) */ ++ /* We lower TX power here according to the percentage specified from UI */ ++ if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) /* AUTO TX POWER control */ + { + { +- // to patch high power issue with some APs, like Belkin N1. ++ /* to patch high power issue with some APs, like Belkin N1. */ + if (Rssi > -35) { +- BbpR1 |= 0x02; // DeltaPwr -= 12; ++ BbpR1 |= 0x02; /* DeltaPwr -= 12; */ + } else if (Rssi > -40) { +- BbpR1 |= 0x01; // DeltaPwr -= 6; ++ BbpR1 |= 0x01; /* DeltaPwr -= 6; */ + } else; + } +- } else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW ++ } else if (pAd->CommonCfg.TxPowerPercentage > 90) /* 91 ~ 100% & AUTO, treat as 100% in terms of mW */ + ; +- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; ++ else if (pAd->CommonCfg.TxPowerPercentage > 60) /* 61 ~ 90%, treat as 75% in terms of mW // DeltaPwr -= 1; */ + { + DeltaPwr -= 1; +- } else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 30) /* 31 ~ 60%, treat as 50% in terms of mW // DeltaPwr -= 3; */ + { + DeltaPwr -= 3; +- } else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 15) /* 16 ~ 30%, treat as 25% in terms of mW // DeltaPwr -= 6; */ + { + BbpR1 |= 0x01; +- } else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; ++ } else if (pAd->CommonCfg.TxPowerPercentage > 9) /* 10 ~ 15%, treat as 12.5% in terms of mW // DeltaPwr -= 9; */ + { + BbpR1 |= 0x01; + DeltaPwr -= 3; +- } else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; ++ } else /* 0 ~ 9 %, treat as MIN(~3%) in terms of mW // DeltaPwr -= 12; */ + { + BbpR1 |= 0x02; + } +@@ -1334,7 +1334,7 @@ VOID AsicSetBssid(IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid) + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); + + Addr4 = 0; +- // always one BSSID in STA mode ++ /* always one BSSID in STA mode */ + Addr4 = (ULONG) (pBssid[4]) | (ULONG) (pBssid[5] << 8); + + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); +@@ -1346,7 +1346,7 @@ VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd) + USHORT offset; + + pEntry->Sst = SST_ASSOC; +- pEntry->Aid = MCAST_WCID; // Softap supports 1 BSSID and use WCID=0 as multicast Wcid index ++ pEntry->Aid = MCAST_WCID; /* Softap supports 1 BSSID and use WCID=0 as multicast Wcid index */ + pEntry->PsMode = PWR_ACTIVE; + pEntry->CurrTxRate = pAd->CommonCfg.MlmeRate; + offset = MAC_WCID_BASE + BSS0Mcast_WCID * HW_WCID_ENTRY_SIZE; +@@ -1394,7 +1394,7 @@ VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd) + Data |= 0x80; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data); + +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); ++ /*OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); */ + } + + /* +@@ -1417,15 +1417,15 @@ VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd) + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); + + Data &= 0xFFFFFF00; +- //Data |= 0x20; ++ /*Data |= 0x20; */ + #ifndef WIFI_TEST +- //if ( pAd->CommonCfg.bEnableTxBurst ) +- // Data |= 0x60; // for performance issue not set the TXOP to 0 ++ /*if ( pAd->CommonCfg.bEnableTxBurst ) */ ++ /* Data |= 0x60; // for performance issue not set the TXOP to 0 */ + #endif + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) + && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE) + ) { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode ++ /* For CWC test, change txop from 0x30 to 0x20 in TxBurst mode */ + if (pAd->CommonCfg.bEnableTxBurst) + Data |= 0x20; + } +@@ -1447,9 +1447,9 @@ VOID AsicDisableSync(IN PRTMP_ADAPTER pAd) + + DBGPRINT(RT_DEBUG_TRACE, ("--->Disable TSF synchronization\n")); + +- // 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect +- // that NIC will never wakes up because TSF stops and no more +- // TBTT interrupts ++ /* 2003-12-20 disable TSF and TBTT while NIC in power-saving have side effect */ ++ /* that NIC will never wakes up because TSF stops and no more */ ++ /* TBTT interrupts */ + pAd->TbttTickCount = 0; + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); + csr.field.bBeaconGen = 0; +@@ -1475,12 +1475,12 @@ VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n")); + + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +-// RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); ++/* RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, 0x00000000); */ + { +- csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; /* ASIC register in units of 1/16 TU */ + csr.field.bTsfTicking = 1; +- csr.field.TsfSyncMode = 1; // sync TSF in INFRASTRUCTURE mode +- csr.field.bBeaconGen = 0; // do NOT generate BEACON ++ csr.field.TsfSyncMode = 1; /* sync TSF in INFRASTRUCTURE mode */ ++ csr.field.bBeaconGen = 0; /* do NOT generate BEACON */ + csr.field.bTBTTEnable = 1; + } + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); +@@ -1515,9 +1515,9 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); + + #ifdef RTMP_MAC_PCI +- // move BEACON TXD and frame content to on-chip memory ++ /* move BEACON TXD and frame content to on-chip memory */ + ptr = (PUCHAR) & pAd->BeaconTxWI; +- for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field ++ for (i = 0; i < TXWI_SIZE; i += 4) /* 16-byte TXWI field */ + { + UINT32 longptr = + *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + +@@ -1526,7 +1526,7 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + ptr += 4; + } + +- // start right after the 16-byte TXWI field ++ /* start right after the 16-byte TXWI field */ + ptr = pAd->BeaconBuf; + for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 4) { + UINT32 longptr = +@@ -1535,38 +1535,38 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); + ptr += 4; + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- // move BEACON TXD and frame content to on-chip memory ++ /* move BEACON TXD and frame content to on-chip memory */ + ptr = (PUCHAR) & pAd->BeaconTxWI; +- for (i = 0; i < TXWI_SIZE; i += 2) // 16-byte TXWI field ++ for (i = 0; i < TXWI_SIZE; i += 2) /* 16-byte TXWI field */ + { +- //UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- //RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); ++ /*UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ ++ /*RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); */ + RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + i, ptr, 2); + ptr += 2; + } + +- // start right after the 16-byte TXWI field ++ /* start right after the 16-byte TXWI field */ + ptr = pAd->BeaconBuf; + for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 2) { +- //UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); +- //RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); ++ /*UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ ++ /*RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); */ + RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2); + ptr += 2; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // +- // For Wi-Fi faily generated beacons between participating stations. +- // Set TBTT phase adaptive adjustment step to 8us (default 16us) +- // don't change settings 2006-5- by Jerry +- //RTMP_IO_WRITE32(pAd, TBTT_SYNC_CFG, 0x00001010); ++ /* */ ++ /* For Wi-Fi faily generated beacons between participating stations. */ ++ /* Set TBTT phase adaptive adjustment step to 8us (default 16us) */ ++ /* don't change settings 2006-5- by Jerry */ ++ /*RTMP_IO_WRITE32(pAd, TBTT_SYNC_CFG, 0x00001010); */ + +- // start sending BEACON +- csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU ++ /* start sending BEACON */ ++ csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; /* ASIC register in units of 1/16 TU */ + csr9.field.bTsfTicking = 1; +- csr9.field.TsfSyncMode = 2; // sync TSF in IBSS mode ++ csr9.field.TsfSyncMode = 2; /* sync TSF in IBSS mode */ + csr9.field.bTBTTEnable = 1; + csr9.field.bBeaconGen = 1; + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word); +@@ -1606,35 +1606,35 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + fCLIENT_STATUS_WMM_CAPABLE); + } + +- //======================================================== +- // MAC Register has a copy . +- //======================================================== +-//#ifndef WIFI_TEST ++ /*======================================================== */ ++ /* MAC Register has a copy . */ ++ /*======================================================== */ ++/*#ifndef WIFI_TEST */ + if (pAd->CommonCfg.bEnableTxBurst) { +- // For CWC test, change txop from 0x30 to 0x20 in TxBurst mode +- Ac0Cfg.field.AcTxop = 0x20; // Suggest by John for TxBurst in HT Mode ++ /* For CWC test, change txop from 0x30 to 0x20 in TxBurst mode */ ++ Ac0Cfg.field.AcTxop = 0x20; /* Suggest by John for TxBurst in HT Mode */ + } else +- Ac0Cfg.field.AcTxop = 0; // QID_AC_BE +-//#else +-// Ac0Cfg.field.AcTxop = 0; // QID_AC_BE +-//#endif ++ Ac0Cfg.field.AcTxop = 0; /* QID_AC_BE */ ++/*#else */ ++/* Ac0Cfg.field.AcTxop = 0; // QID_AC_BE */ ++/*#endif */ + Ac0Cfg.field.Cwmin = CW_MIN_IN_BITS; + Ac0Cfg.field.Cwmax = CW_MAX_IN_BITS; + Ac0Cfg.field.Aifsn = 2; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); + +- Ac1Cfg.field.AcTxop = 0; // QID_AC_BK ++ Ac1Cfg.field.AcTxop = 0; /* QID_AC_BK */ + Ac1Cfg.field.Cwmin = CW_MIN_IN_BITS; + Ac1Cfg.field.Cwmax = CW_MAX_IN_BITS; + Ac1Cfg.field.Aifsn = 2; + RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); + + if (pAd->CommonCfg.PhyMode == PHY_11B) { +- Ac2Cfg.field.AcTxop = 192; // AC_VI: 192*32us ~= 6ms +- Ac3Cfg.field.AcTxop = 96; // AC_VO: 96*32us ~= 3ms ++ Ac2Cfg.field.AcTxop = 192; /* AC_VI: 192*32us ~= 6ms */ ++ Ac3Cfg.field.AcTxop = 96; /* AC_VO: 96*32us ~= 3ms */ + } else { +- Ac2Cfg.field.AcTxop = 96; // AC_VI: 96*32us ~= 3ms +- Ac3Cfg.field.AcTxop = 48; // AC_VO: 48*32us ~= 1.5ms ++ Ac2Cfg.field.AcTxop = 96; /* AC_VI: 96*32us ~= 3ms */ ++ Ac3Cfg.field.AcTxop = 48; /* AC_VO: 48*32us ~= 1.5ms */ + } + Ac2Cfg.field.Cwmin = CW_MIN_IN_BITS; + Ac2Cfg.field.Cwmax = CW_MAX_IN_BITS; +@@ -1645,18 +1645,18 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + Ac3Cfg.field.Aifsn = 2; + RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); + +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== +- csr0.field.Ac0Txop = 0; // QID_AC_BE +- csr0.field.Ac1Txop = 0; // QID_AC_BK ++ /*======================================================== */ ++ /* DMA Register has a copy too. */ ++ /*======================================================== */ ++ csr0.field.Ac0Txop = 0; /* QID_AC_BE */ ++ csr0.field.Ac1Txop = 0; /* QID_AC_BK */ + RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); + if (pAd->CommonCfg.PhyMode == PHY_11B) { +- csr1.field.Ac2Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr1.field.Ac3Txop = 96; // AC_VO: 96*32us ~= 3ms ++ csr1.field.Ac2Txop = 192; /* AC_VI: 192*32us ~= 6ms */ ++ csr1.field.Ac3Txop = 96; /* AC_VO: 96*32us ~= 3ms */ + } else { +- csr1.field.Ac2Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr1.field.Ac3Txop = 48; // AC_VO: 48*32us ~= 1.5ms ++ csr1.field.Ac2Txop = 96; /* AC_VI: 96*32us ~= 3ms */ ++ csr1.field.Ac3Txop = 48; /* AC_VO: 48*32us ~= 1.5ms */ + } + RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word); + +@@ -1679,24 +1679,24 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); + } else { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); +- //======================================================== +- // MAC Register has a copy. +- //======================================================== +- // +- // Modify Cwmin/Cwmax/Txop on queue[QID_AC_VI], Recommend by Jerry 2005/07/27 +- // To degrade our VIDO Queue's throughput for WiFi WMM S3T07 Issue. +- // +- //pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this ++ /*======================================================== */ ++ /* MAC Register has a copy. */ ++ /*======================================================== */ ++ /* */ ++ /* Modify Cwmin/Cwmax/Txop on queue[QID_AC_VI], Recommend by Jerry 2005/07/27 */ ++ /* To degrade our VIDO Queue's throughput for WiFi WMM S3T07 Issue. */ ++ /* */ ++ /*pEdcaParm->Txop[QID_AC_VI] = pEdcaParm->Txop[QID_AC_VI] * 7 / 10; // rt2860c need this */ + + Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE]; + Ac0Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BE]; + Ac0Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BE]; +- Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; //+1; ++ Ac0Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BE]; /*+1; */ + + Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK]; +- Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; //+2; ++ Ac1Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_BK]; /*+2; */ + Ac1Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_BK]; +- Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; //+1; ++ Ac1Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_BK]; /*+1; */ + + Ac2Cfg.field.AcTxop = (pEdcaParm->Txop[QID_AC_VI] * 6) / 10; + if (pAd->Antenna.field.TxPath == 1) { +@@ -1709,16 +1709,16 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 1; + #ifdef RTMP_MAC_USB + Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI] + 3; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + { +- // Tuning for Wi-Fi WMM S06 ++ /* Tuning for Wi-Fi WMM S06 */ + if (pAd->CommonCfg.bWiFiTest && + pEdcaParm->Aifsn[QID_AC_VI] == 10) + Ac2Cfg.field.Aifsn -= 1; + +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta ++ /* Tuning for TGn Wi-Fi 5.2.32 */ ++ /* STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta */ + if (STA_TGN_WIFI_ON(pAd) && + pEdcaParm->Aifsn[QID_AC_VI] == 10) { + Ac0Cfg.field.Aifsn = 3; +@@ -1727,10 +1727,10 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + #ifdef RT30xx + if (pAd->RfIcType == RFIC_3020 + || pAd->RfIcType == RFIC_2020) { +- // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. ++ /* Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta. */ + Ac2Cfg.field.Aifsn = 5; + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + } + + Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO]; +@@ -1738,7 +1738,7 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + Ac3Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VO]; + Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO]; + +-//#ifdef WIFI_TEST ++/*#ifdef WIFI_TEST */ + if (pAd->CommonCfg.bWiFiTest) { + if (Ac3Cfg.field.AcTxop == 102) { + Ac0Cfg.field.AcTxop = +@@ -1753,16 +1753,16 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + pEdcaParm->Txop[QID_AC_VI]; + } /* End of if */ + } +-//#endif // WIFI_TEST // ++/*#endif // WIFI_TEST // */ + + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word); + RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word); + RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word); + RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word); + +- //======================================================== +- // DMA Register has a copy too. +- //======================================================== ++ /*======================================================== */ ++ /* DMA Register has a copy too. */ ++ /*======================================================== */ + csr0.field.Ac0Txop = Ac0Cfg.field.AcTxop; + csr0.field.Ac1Txop = Ac1Cfg.field.AcTxop; + RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); +@@ -1775,7 +1775,7 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE]; + CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK]; + CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI]; +- CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test ++ CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; /*for TGn wifi test */ + RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word); + + CwmaxCsr.word = 0; +@@ -1786,18 +1786,18 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word); + + AifsnCsr.word = 0; +- AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE]; +- AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK]; +- AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI]; ++ AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; /*pEdcaParm->Aifsn[QID_AC_BE]; */ ++ AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; /*pEdcaParm->Aifsn[QID_AC_BK]; */ ++ AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; /*pEdcaParm->Aifsn[QID_AC_VI]; */ + + { +- // Tuning for Wi-Fi WMM S06 ++ /* Tuning for Wi-Fi WMM S06 */ + if (pAd->CommonCfg.bWiFiTest && + pEdcaParm->Aifsn[QID_AC_VI] == 10) + AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4; + +- // Tuning for TGn Wi-Fi 5.2.32 +- // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta ++ /* Tuning for TGn Wi-Fi 5.2.32 */ ++ /* STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta */ + if (STA_TGN_WIFI_ON(pAd) && + pEdcaParm->Aifsn[QID_AC_VI] == 10) { + AifsnCsr.field.Aifsn0 = 3; +@@ -1811,14 +1811,14 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + } + + { +- AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test ++ AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; /*pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test */ + #ifdef RT30xx +- // TODO: Shiang, this modification also suitable for RT3052/RT3050 ??? ++ /* TODO: Shiang, this modification also suitable for RT3052/RT3050 ??? */ + if (pAd->RfIcType == RFIC_3020 + || pAd->RfIcType == RFIC_2020) { +- AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. ++ AifsnCsr.field.Aifsn2 = 0x2; /*pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04. */ + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + } + RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); + +@@ -1885,26 +1885,26 @@ VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) + SlotTime = (bUseShortSlotTime) ? 9 : 20; + + { +- // force using short SLOT time for FAE to demo performance when TxBurst is ON ++ /* force using short SLOT time for FAE to demo performance when TxBurst is ON */ + if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) + && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) + || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) + && (pAd->CommonCfg.BACapability.field.Policy == + BA_NOTUSE)) + ) { +- // In this case, we will think it is doing Wi-Fi test +- // And we will not set to short slot when bEnableTxBurst is TRUE. ++ /* In this case, we will think it is doing Wi-Fi test */ ++ /* And we will not set to short slot when bEnableTxBurst is TRUE. */ + } else if (pAd->CommonCfg.bEnableTxBurst) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); + SlotTime = 9; + } + } + +- // +- // For some reasons, always set it to short slot time. +- // +- // ToDo: Should consider capability with 11B +- // ++ /* */ ++ /* For some reasons, always set it to short slot time. */ ++ /* */ ++ /* ToDo: Should consider capability with 11B */ ++ /* */ + { + if (pAd->StaCfg.BssType == BSS_ADHOC) { + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED); +@@ -1936,16 +1936,16 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + IN UCHAR CipherAlg, + IN PUCHAR pKey, IN PUCHAR pTxMic, IN PUCHAR pRxMic) + { +- ULONG offset; //, csr0; ++ ULONG offset; /*, csr0; */ + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI + INT i; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + DBGPRINT(RT_DEBUG_TRACE, + ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex, + KeyIdx)); +-//============================================================================================ ++/*============================================================================================ */ + + DBGPRINT(RT_DEBUG_TRACE, + ("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], +@@ -1968,10 +1968,10 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + pTxMic[0], pTxMic[1], pTxMic[2], pTxMic[3], + pTxMic[4], pTxMic[5], pTxMic[6], pTxMic[7])); + } +-//============================================================================================ +- // +- // fill key material - key + TX MIC + RX MIC +- // ++/*============================================================================================ */ ++ /* */ ++ /* fill key material - key + TX MIC + RX MIC */ ++ /* */ + #ifdef RTMP_MAC_PCI + offset = + SHARED_KEY_TABLE_BASE + (4 * BssIndex + KeyIdx) * HW_KEY_ENTRY_SIZE; +@@ -1992,7 +1992,7 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + { + offset = +@@ -2010,11 +2010,11 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + RTUSBMultiWrite(pAd, offset, pRxMic, 8); + } + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // +- // Update cipher algorithm. WSTA always use BSS0 +- // ++ /* */ ++ /* Update cipher algorithm. WSTA always use BSS0 */ ++ /* */ + RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), + &csr1.word); + DBGPRINT(RT_DEBUG_TRACE, +@@ -2047,11 +2047,11 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, + IN UCHAR BssIndex, IN UCHAR KeyIdx) + { +- //ULONG SecCsr0; ++ /*ULONG SecCsr0; */ + SHAREDKEY_MODE_STRUC csr1; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -2096,10 +2096,10 @@ VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, + { + ULONG WCIDAttri = 0, offset; + +- // +- // Update WCID attribute. +- // Only TxKey could update WCID attribute. +- // ++ /* */ ++ /* Update WCID attribute. */ ++ /* Only TxKey could update WCID attribute. */ ++ /* */ + offset = MAC_WCID_ATTRIBUTE_BASE + (WCID * HW_WCID_ATTRI_SIZE); + WCIDAttri = + (BssIndex << 4) | (CipherAlg << 1) | (bUsePairewiseKeyTable); +@@ -2171,10 +2171,10 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey) + { + ULONG offset; +-// ULONG WCIDAttri = 0; ++/* ULONG WCIDAttri = 0; */ + UCHAR IV4 = 0; + PUCHAR pKey = pCipherKey->Key; +-// ULONG KeyLen = pCipherKey->KeyLen; ++/* ULONG KeyLen = pCipherKey->KeyLen; */ + PUCHAR pTxMic = pCipherKey->TxMic; + PUCHAR pRxMic = pCipherKey->RxMic; + PUCHAR pTxtsc = pCipherKey->TxTsc; +@@ -2182,14 +2182,14 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI + UCHAR i; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +-// ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); ++/* ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); */ + + DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n")); +- // +- // 1.) decide key table offset +- // ++ /* */ ++ /* 1.) decide key table offset */ ++ /* */ + if (bUsePairewiseKeyTable) + offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); + else +@@ -2197,19 +2197,19 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + SHARED_KEY_TABLE_BASE + (4 * BssIndex + + KeyIdx) * HW_KEY_ENTRY_SIZE; + +- // +- // 2.) Set Key to Asic +- // +- //for (i = 0; i < KeyLen; i++) ++ /* */ ++ /* 2.) Set Key to Asic */ ++ /* */ ++ /*for (i = 0; i < KeyLen; i++) */ + #ifdef RTMP_MAC_PCI + for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); + } + offset += MAX_LEN_OF_PEER_KEY; + +- // +- // 3.) Set MIC key if available +- // ++ /* */ ++ /* 3.) Set MIC key if available */ ++ /* */ + if (pTxMic) { + for (i = 0; i < 8; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); +@@ -2222,14 +2222,14 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_PEER_KEY); + offset += MAX_LEN_OF_PEER_KEY; + +- // +- // 3.) Set MIC key if available +- // ++ /* */ ++ /* 3.) Set MIC key if available */ ++ /* */ + if (pTxMic) { + RTUSBMultiWrite(pAd, offset, pTxMic, 8); + } +@@ -2238,18 +2238,18 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + if (pRxMic) { + RTUSBMultiWrite(pAd, offset, pRxMic, 8); + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // +- // 4.) Modify IV/EIV if needs +- // This will force Asic to use this key ID by setting IV. +- // ++ /* */ ++ /* 4.) Modify IV/EIV if needs */ ++ /* This will force Asic to use this key ID by setting IV. */ ++ /* */ + if (bTxKey) { + #ifdef RTMP_MAC_PCI + offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); +- // +- // Write IV +- // ++ /* */ ++ /* Write IV */ ++ /* */ + RTMP_IO_WRITE8(pAd, offset, pTxtsc[1]); + RTMP_IO_WRITE8(pAd, offset + 1, ((pTxtsc[1] | 0x20) & 0x7f)); + RTMP_IO_WRITE8(pAd, offset + 2, pTxtsc[0]); +@@ -2258,50 +2258,50 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + if ((CipherAlg == CIPHER_TKIP) + || (CipherAlg == CIPHER_TKIP_NO_MIC) + || (CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence ++ IV4 |= 0x20; /* turn on extension bit means EIV existence */ + + RTMP_IO_WRITE8(pAd, offset + 3, IV4); + +- // +- // Write EIV +- // ++ /* */ ++ /* Write EIV */ ++ /* */ + offset += 4; + for (i = 0; i < 4; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + UINT32 tmpVal; + +- // +- // Write IV +- // ++ /* */ ++ /* Write IV */ ++ /* */ + IV4 = (KeyIdx << 6); + if ((CipherAlg == CIPHER_TKIP) + || (CipherAlg == CIPHER_TKIP_NO_MIC) + || (CipherAlg == CIPHER_AES)) +- IV4 |= 0x20; // turn on extension bit means EIV existence ++ IV4 |= 0x20; /* turn on extension bit means EIV existence */ + + tmpVal = + pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + + (pTxtsc[0] << 16) + (IV4 << 24); + RTMP_IO_WRITE32(pAd, offset, tmpVal); + +- // +- // Write EIV +- // ++ /* */ ++ /* Write EIV */ ++ /* */ + offset += 4; + RTMP_IO_WRITE32(pAd, offset, *(PUINT32) & pCipherKey->TxTsc[2]); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, + bUsePairewiseKeyTable); + } + + if (!bUsePairewiseKeyTable) { +- // +- // Only update the shared key security mode +- // ++ /* */ ++ /* Only update the shared key security mode */ ++ /* */ + RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE + 4 * (BssIndex / 2), + &csr1.word); + if ((BssIndex % 2) == 0) { +@@ -2350,18 +2350,18 @@ VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + PUCHAR pRxMic = pCipherKey->RxMic; + #ifdef DBG + UCHAR CipherAlg = pCipherKey->CipherAlg; +-#endif // DBG // ++#endif /* DBG // */ + +- // EKEY ++ /* EKEY */ + offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE); + #ifdef RTMP_MAC_PCI + for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pKey[i]); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBMultiWrite(pAd, offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + for (i = 0; i < MAX_LEN_OF_PEER_KEY; i += 4) { + UINT32 Value; + RTMP_IO_READ32(pAd, offset + i, &Value); +@@ -2369,16 +2369,16 @@ VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + + offset += MAX_LEN_OF_PEER_KEY; + +- // MIC KEY ++ /* MIC KEY */ + if (pTxMic) { + #ifdef RTMP_MAC_PCI + for (i = 0; i < 8; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBMultiWrite(pAd, offset, &pCipherKey->TxMic[0], 8); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + offset += 8; + if (pRxMic) { +@@ -2386,10 +2386,10 @@ VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + for (i = 0; i < 8; i++) { + RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBMultiWrite(pAd, offset, &pCipherKey->RxMic[0], 8); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + DBGPRINT(RT_DEBUG_TRACE, +@@ -2428,7 +2428,7 @@ VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + ULONG WCIDAttri; + USHORT offset; + +- // re-set the entry's WCID attribute as OPEN-NONE. ++ /* re-set the entry's WCID attribute as OPEN-NONE. */ + offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); + WCIDAttri = (BssIdx << 4) | PAIRWISEKEYTABLE; + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); +@@ -2450,7 +2450,7 @@ VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + #ifdef RT30xx + /* RT3572 ATE need not to do this. */ + RT30xxSetRxAnt(pAd, Ant); +-#endif // RT30xx // ++#endif /* RT30xx // */ + } + + VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) +@@ -2458,7 +2458,7 @@ VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + if (pAd->chipOps.AsicRfTurnOff) { + pAd->chipOps.AsicRfTurnOff(pAd); + } else { +- // RF R2 bit 18 = 0 ++ /* RF R2 bit 18 = 0 */ + UINT32 R1 = 0, R2 = 0, R3 = 0; + UCHAR index; + RTMP_RF_REGS *RFRegTable; +@@ -2480,9 +2480,9 @@ VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + RTMP_RF_IO_WRITE32(pAd, R1); + RTMP_RF_IO_WRITE32(pAd, R2); + +- // Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. +- // Set RF R2 bit18=0, R3 bit[18:19]=0 +- //if (pAd->StaCfg.bRadio == FALSE) ++ /* Program R1b13 to 1, R3/b18,19 to 0, R2b18 to 0. */ ++ /* Set RF R2 bit18=0, R3 bit[18:19]=0 */ ++ /*if (pAd->StaCfg.bRadio == FALSE) */ + if (1) { + RTMP_RF_IO_WRITE32(pAd, R3); + +@@ -2509,17 +2509,17 @@ VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + + VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + { +- // RF R2 bit 18 = 0 ++ /* RF R2 bit 18 = 0 */ + UINT32 R1 = 0, R2 = 0, R3 = 0; + UCHAR index; + RTMP_RF_REGS *RFRegTable; + + #ifdef PCIE_PS_SUPPORT +- // The RF programming sequence is difference between 3xxx and 2xxx ++ /* The RF programming sequence is difference between 3xxx and 2xxx */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + return; + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + + RFRegTable = RF2850RegTable; + +@@ -2541,13 +2541,13 @@ VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + + R2 = RFRegTable[index].R2; + if (pAd->Antenna.field.TxPath == 1) { +- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1; ++ R2 |= 0x4000; /* If TXpath is 1, bit 14 = 1; */ + } + + if (pAd->Antenna.field.RxPath == 2) { +- R2 |= 0x40; // write 1 to off Rxpath. ++ R2 |= 0x40; /* write 1 to off Rxpath. */ + } else if (pAd->Antenna.field.RxPath == 1) { +- R2 |= 0x20040; // write 1 to off RxPath ++ R2 |= 0x20040; /* write 1 to off RxPath */ + } + RTMP_RF_IO_WRITE32(pAd, R2); + +diff --git a/drivers/staging/rt2860/common/cmm_cfg.c b/drivers/staging/rt2860/common/cmm_cfg.c +index 9f33717..7dbcb23 100644 +--- a/drivers/staging/rt2860/common/cmm_cfg.c ++++ b/drivers/staging/rt2860/common/cmm_cfg.c +@@ -95,8 +95,8 @@ INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band) + regionMax = REGION_MAXIMUM_A_BAND; + } + +- // TODO: Is it neccesay for following check??? +- // Country can be set only when EEPROM not programmed ++ /* TODO: Is it neccesay for following check??? */ ++ /* Country can be set only when EEPROM not programmed */ + if (*pCountryRegion & 0x80) { + DBGPRINT(RT_DEBUG_ERROR, + ("CfgSetCountryRegion():CountryRegion in eeprom was programmed\n")); +@@ -154,7 +154,7 @@ INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + else if (ShortSlot == 0) + pAd->CommonCfg.bUseShortSlotTime = FALSE; + else +- return FALSE; //Invalid argument ++ return FALSE; /*Invalid argument */ + + return TRUE; + } +@@ -176,29 +176,29 @@ INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, + UCHAR CipherAlg = CIPHER_NONE; + BOOLEAN bKeyIsHex = FALSE; + +- // TODO: Shall we do memset for the original key info?? ++ /* TODO: Shall we do memset for the original key info?? */ + memset(pSharedKey, 0, sizeof(CIPHER_KEY)); + KeyLen = strlen(keyString); + switch (KeyLen) { +- case 5: //wep 40 Ascii type +- case 13: //wep 104 Ascii type ++ case 5: /*wep 40 Ascii type */ ++ case 13: /*wep 104 Ascii type */ + bKeyIsHex = FALSE; + pSharedKey->KeyLen = KeyLen; + NdisMoveMemory(pSharedKey->Key, keyString, KeyLen); + break; + +- case 10: //wep 40 Hex type +- case 26: //wep 104 Hex type ++ case 10: /*wep 40 Hex type */ ++ case 26: /*wep 104 Hex type */ + for (i = 0; i < KeyLen; i++) { + if (!isxdigit(*(keyString + i))) +- return FALSE; //Not Hex value; ++ return FALSE; /*Not Hex value; */ + } + bKeyIsHex = TRUE; + pSharedKey->KeyLen = KeyLen / 2; + AtoH(keyString, pSharedKey->Key, pSharedKey->KeyLen); + break; + +- default: //Invalid argument ++ default: /*Invalid argument */ + DBGPRINT(RT_DEBUG_TRACE, + ("RT_CfgSetWepKey(keyIdx=%d):Invalid argument (arg=%s)\n", + keyIdx, keyString)); +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 033a4ea..81766db 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -30,7 +30,7 @@ + UCHAR SNAP_802_1H[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; + UCHAR SNAP_BRIDGE_TUNNEL[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; + +-// Add Cisco Aironet SNAP heade for CCX2 support ++/* Add Cisco Aironet SNAP heade for CCX2 support */ + UCHAR SNAP_AIRONET[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00 }; + UCHAR CKIP_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02 }; + UCHAR EAPOL_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e }; +@@ -41,28 +41,28 @@ UCHAR IPX[] = { 0x81, 0x37 }; + UCHAR APPLE_TALK[] = { 0x80, 0xf3 }; + + UCHAR RateIdToPlcpSignal[12] = { +- 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 */// see BBP spec +- 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 */// see IEEE802.11a-1999 p.14 ++ 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 *//* see BBP spec */ ++ 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 *//* see IEEE802.11a-1999 p.14 */ + 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ +-}; // see IEEE802.11a-1999 p.14 ++}; /* see IEEE802.11a-1999 p.14 */ + + UCHAR OfdmSignalToRateId[16] = { +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 0, 1, 2, 3 respectively +- RATE_54, RATE_54, RATE_54, RATE_54, // OFDM PLCP Signal = 4, 5, 6, 7 respectively +- RATE_48, RATE_24, RATE_12, RATE_6, // OFDM PLCP Signal = 8, 9, 10, 11 respectively +- RATE_54, RATE_36, RATE_18, RATE_9, // OFDM PLCP Signal = 12, 13, 14, 15 respectively ++ RATE_54, RATE_54, RATE_54, RATE_54, /* OFDM PLCP Signal = 0, 1, 2, 3 respectively */ ++ RATE_54, RATE_54, RATE_54, RATE_54, /* OFDM PLCP Signal = 4, 5, 6, 7 respectively */ ++ RATE_48, RATE_24, RATE_12, RATE_6, /* OFDM PLCP Signal = 8, 9, 10, 11 respectively */ ++ RATE_54, RATE_36, RATE_18, RATE_9, /* OFDM PLCP Signal = 12, 13, 14, 15 respectively */ + }; + + UCHAR OfdmRateToRxwiMCS[12] = { + 0, 0, 0, 0, +- 0, 1, 2, 3, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 ++ 0, 1, 2, 3, /* OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 */ ++ 4, 5, 6, 7, /* OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 */ + }; + + UCHAR RxwiMCSToOfdmRate[12] = { + RATE_6, RATE_9, RATE_12, RATE_18, +- RATE_24, RATE_36, RATE_48, RATE_54, // OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 +- 4, 5, 6, 7, // OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 ++ RATE_24, RATE_36, RATE_48, RATE_54, /* OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 */ ++ 4, 5, 6, 7, /* OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 */ + }; + + char *MCSToMbps[] = +@@ -73,7 +73,7 @@ char *MCSToMbps[] = + + UCHAR default_cwmin[] = + { CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS - 1, CW_MIN_IN_BITS - 2 }; +-//UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; ++/*UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; */ + UCHAR default_sta_aifsn[] = { 3, 7, 2, 2 }; + + UCHAR MapUserPriorityToAccessCategory[8] = +@@ -110,11 +110,11 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + PNDIS_PACKET pPacket; + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + ULONG FreeNum; +- UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN]; ++ UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; /*RTMP_HW_HDR_LEN]; */ + #ifdef RTMP_MAC_PCI + unsigned long IrqFlags = 0; + UCHAR IrqState; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + BOOLEAN bUseDataQ = FALSE; + int retryCnt = 0; + +@@ -125,7 +125,7 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + QueIdx &= (~MGMT_USE_QUEUE_FLAG); + } + #ifdef RTMP_MAC_PCI +- // 2860C use Tx Ring ++ /* 2860C use Tx Ring */ + IrqState = pAd->irq_disabled; + if (pAd->MACVersion == 0x28600100) { + QueIdx = (bUseDataQ == TRUE ? QueIdx : 3); +@@ -133,10 +133,10 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + } + if (bUseDataQ && (!IrqState)) + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + do { +- // Reset is in progress, stop immediately ++ /* Reset is in progress, stop immediately */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) || + RTMP_TEST_FLAG(pAd, + fRTMP_ADAPTER_HALT_IN_PROGRESS | +@@ -145,22 +145,22 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + Status = NDIS_STATUS_FAILURE; + break; + } +- // Check Free priority queue +- // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. ++ /* Check Free priority queue */ ++ /* Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing. */ + #ifdef RTMP_MAC_PCI + if (bUseDataQ) { + retryCnt = MAX_DATAMM_RETRY; +- // free Tx(QueIdx) resources ++ /* free Tx(QueIdx) resources */ + RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); + FreeNum = GET_TXRING_FREENO(pAd, QueIdx); + } else +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + { + FreeNum = GET_MGMTRING_FREENO(pAd); + } + + if ((FreeNum > 0)) { +- // We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870 ++ /* We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870 */ + NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE)); + Status = + RTMPAllocateNdisPacket(pAd, &pPacket, +@@ -172,8 +172,8 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n")); + break; + } +- //pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; +- //pAd->CommonCfg.MlmeRate = RATE_2; ++ /*pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; */ ++ /*pAd->CommonCfg.MlmeRate = RATE_2; */ + + #ifdef RTMP_MAC_PCI + if (bUseDataQ) { +@@ -181,7 +181,7 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + MlmeDataHardTransmit(pAd, QueIdx, pPacket); + retryCnt--; + } else +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + Status = MlmeHardTransmit(pAd, QueIdx, pPacket); + if (Status == NDIS_STATUS_SUCCESS) + retryCnt = 0; +@@ -202,7 +202,7 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + MgmtRingFullCount)); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + DBGPRINT(RT_DEBUG_ERROR, + ("Qidx(%d), not enough space in MgmtRing, MgmtRingFullCount=%ld!\n", + QueIdx, +@@ -213,7 +213,7 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + #ifdef RTMP_MAC_PCI + if (bUseDataQ && (!IrqState)) + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + return Status; + } +@@ -265,7 +265,7 @@ NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, + if (pAd->MACVersion == 0x28600100) + return MlmeHardTransmitTxRing(pAd, QueIdx, pPacket); + else +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + return MlmeHardTransmitMgmtRing(pAd, QueIdx, pPacket); + + } +@@ -285,22 +285,22 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +- // Make sure MGMT ring resource won't be used by other threads ++ /* Make sure MGMT ring resource won't be used by other threads */ + RTMP_SEM_LOCK(&pAd->MgmtRingLock); + if (pSrcBufVA == NULL) { +- // The buffer shouldn't be NULL ++ /* The buffer shouldn't be NULL */ + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_FAILURE; + } + + { +- // outgoing frame always wakeup PHY to prevent frame lost ++ /* outgoing frame always wakeup PHY to prevent frame lost */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + AsicForceWakeup(pAd, TRUE); + } + + pFirstTxWI = (PTXWI_STRUC) (pSrcBufVA + TXINFO_SIZE); +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE); ++ pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); /*TXWI_SIZE); */ + + if (pHeader_802_11->Addr1[0] & 0x01) { + MlmeRate = pAd->CommonCfg.BasicMlmeRate; +@@ -308,8 +308,8 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + MlmeRate = pAd->CommonCfg.MlmeRate; + } + +- // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band ++ /* Verify Mlme rate for a / g bands. */ ++ if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) /* 11A band */ + MlmeRate = RATE_6; + + if ((pHeader_802_11->FC.Type == BTYPE_DATA) && +@@ -318,7 +318,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + } + + { +- // Fixed W52 with Activity scan issue in ABG_MIXED and ABGN_MIXED mode. ++ /* Fixed W52 with Activity scan issue in ABG_MIXED and ABGN_MIXED mode. */ + if (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED + || pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) { + if (pAd->LatchRfRegs.Channel > 14) +@@ -328,17 +328,17 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + } + } + +- // +- // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) +- // Snice it's been set to 0 while on MgtMacHeaderInit +- // By the way this will cause frame to be send on PWR_SAVE failed. +- // +- pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; // (pAd->StaCfg.Psm == PWR_SAVE); +- +- // +- // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD +-// if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) ++ /* */ ++ /* Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) */ ++ /* Snice it's been set to 0 while on MgtMacHeaderInit */ ++ /* By the way this will cause frame to be send on PWR_SAVE failed. */ ++ /* */ ++ pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE; /* (pAd->StaCfg.Psm == PWR_SAVE); */ ++ ++ /* */ ++ /* In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame */ ++ /* Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD */ ++/* if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) */ + { + if ((pHeader_802_11->FC.SubType == SUBTYPE_ACTION) || + ((pHeader_802_11->FC.Type == BTYPE_DATA) && +@@ -353,20 +353,20 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + } + + bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL ++ if (pHeader_802_11->FC.Type == BTYPE_CNTL) /* must be PS-POLL */ + { +- //Set PM bit in ps-poll, to fix WLK 1.2 PowerSaveMode_ext failure issue. ++ /*Set PM bit in ps-poll, to fix WLK 1.2 PowerSaveMode_ext failure issue. */ + if ((pAd->OpMode == OPMODE_STA) + && (pHeader_802_11->FC.SubType == SUBTYPE_PS_POLL)) { + pHeader_802_11->FC.PwrMgmt = PWR_SAVE; + } + bAckRequired = FALSE; +- } else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) ++ } else /* BTYPE_MGMT or BTYPE_DATA(must be NULL frame) */ + { +- //pAd->Sequence++; +- //pHeader_802_11->Sequence = pAd->Sequence; ++ /*pAd->Sequence++; */ ++ /*pHeader_802_11->Sequence = pAd->Sequence; */ + +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST ++ if (pHeader_802_11->Addr1[0] & 0x01) /* MULTICAST, BROADCAST */ + { + bAckRequired = FALSE; + pHeader_802_11->Duration = 0; +@@ -377,12 +377,12 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_RSP) + && (pHeader_802_11->FC.Type == BTYPE_MGMT)) { + bInsertTimestamp = TRUE; +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Response ++ bAckRequired = FALSE; /* Disable ACK to prevent retry 0x1f for Probe Response */ + } else + if ((pHeader_802_11->FC.SubType == + SUBTYPE_PROBE_REQ) + && (pHeader_802_11->FC.Type == BTYPE_MGMT)) { +- bAckRequired = FALSE; // Disable ACK to prevent retry 0x1f for Probe Request ++ bAckRequired = FALSE; /* Disable ACK to prevent retry 0x1f for Probe Request */ + } + } + } +@@ -391,30 +391,30 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + if (pAd->Sequence > 0xfff) + pAd->Sequence = 0; + +- // Before radar detection done, mgmt frame can not be sent but probe req +- // Because we need to use probe req to trigger driver to send probe req in passive scan ++ /* Before radar detection done, mgmt frame can not be sent but probe req */ ++ /* Because we need to use probe req to trigger driver to send probe req in passive scan */ + if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) + && (pAd->CommonCfg.bIEEE80211H == 1) + && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { + DBGPRINT(RT_DEBUG_ERROR, + ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +-// if (!IrqState) ++/* if (!IrqState) */ + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return (NDIS_STATUS_FAILURE); + } + +- // +- // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one physical buffer, and the whole frame size equals +- // to the first scatter buffer size +- // ++ /* */ ++ /* fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET */ ++ /* should always has only one physical buffer, and the whole frame size equals */ ++ /* to the first scatter buffer size */ ++ /* */ + +- // Initialize TX Descriptor +- // For inter-frame gap, the number is for this frame and next frame +- // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; ++ /* Initialize TX Descriptor */ ++ /* For inter-frame gap, the number is for this frame and next frame */ ++ /* For MLME rate, we will fix as 2Mb to match other vendor's implement */ ++/* pAd->CommonCfg.MlmeTransmit.field.MODE = 1; */ + +-// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. ++/* management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. */ + PID = PID_MGMT; + + if (pMacEntry == NULL) { +@@ -434,11 +434,11 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); + } + +- // Now do hardware-depened kick out. ++ /* Now do hardware-depened kick out. */ + HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen); + +- // Make sure to release MGMT ring resource +-// if (!IrqState) ++ /* Make sure to release MGMT ring resource */ ++/* if (!IrqState) */ + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return NDIS_STATUS_SUCCESS; + } +@@ -514,17 +514,17 @@ static UCHAR TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) + BOOLEAN bHTRate = FALSE; + + Wcid = RTMP_GET_PACKET_WCID(pPacket); +- if (Wcid == MCAST_WCID) { // Handle for RA is Broadcast/Multicast Address. ++ if (Wcid == MCAST_WCID) { /* Handle for RA is Broadcast/Multicast Address. */ + return TX_MCAST_FRAME; + } +- // Handle for unicast packets ++ /* Handle for unicast packets */ + pMacEntry = &pAd->MacTab.Content[Wcid]; +- if (RTMP_GET_PACKET_LOWRATE(pPacket)) { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame ++ if (RTMP_GET_PACKET_LOWRATE(pPacket)) { /* It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame */ + TxFrameType = TX_LEGACY_FRAME; +- } else if (IS_HT_RATE(pMacEntry)) { // it's a 11n capable packet ++ } else if (IS_HT_RATE(pMacEntry)) { /* it's a 11n capable packet */ + +- // Depends on HTPhyMode to check if the peer support the HTRate transmission. +- // Currently didn't support A-MSDU embedded in A-MPDU ++ /* Depends on HTPhyMode to check if the peer support the HTRate transmission. */ ++ /* Currently didn't support A-MSDU embedded in A-MPDU */ + bHTRate = TRUE; + if (RTMP_GET_PACKET_MOREDATA(pPacket) + || (pMacEntry->PsMode == PWR_SAVE)) +@@ -538,15 +538,15 @@ static UCHAR TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) + return TX_AMSDU_FRAME; + else + TxFrameType = TX_LEGACY_FRAME; +- } else { // it's a legacy b/g packet. +- if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) && (RTMP_GET_PACKET_TXRATE(pPacket) >= RATE_6) && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { // if peer support Ralink Aggregation, we use it. ++ } else { /* it's a legacy b/g packet. */ ++ if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) && (RTMP_GET_PACKET_TXRATE(pPacket) >= RATE_6) && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { /* if peer support Ralink Aggregation, we use it. */ + TxFrameType = TX_RALINK_FRAME; + } else { + TxFrameType = TX_LEGACY_FRAME; + } + } + +- // Currently, our fragment only support when a unicast packet send as NOT-ARALINK, NOT-AMSDU and NOT-AMPDU. ++ /* Currently, our fragment only support when a unicast packet send as NOT-ARALINK, NOT-AMSDU and NOT-AMPDU. */ + if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) + && (TxFrameType == TX_LEGACY_FRAME)) + TxFrameType = TX_FRAG_FRAME; +@@ -567,14 +567,14 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pTxBlk->Wcid = RTMP_GET_PACKET_WCID(pPacket); + pTxBlk->apidx = RTMP_GET_PACKET_IF(pPacket); + pTxBlk->UserPriority = RTMP_GET_PACKET_UP(pPacket); +- pTxBlk->FrameGap = IFS_HTTXOP; // ASIC determine Frame Gap ++ pTxBlk->FrameGap = IFS_HTTXOP; /* ASIC determine Frame Gap */ + + if (RTMP_GET_PACKET_CLEAR_EAP_FRAME(pTxBlk->pPacket)) + TX_BLK_SET_FLAG(pTxBlk, fTX_bClearEAPFrame); + else + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bClearEAPFrame); + +- // Default to clear this flag ++ /* Default to clear this flag */ + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bForceNonQoS); + + if (pTxBlk->Wcid == MCAST_WCID) { +@@ -584,8 +584,8 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; + } + +- TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); // AckRequired = FALSE, when broadcast packet in Adhoc mode. +- //TX_BLK_SET_FLAG(pTxBlk, fTX_bForceLowRate); ++ TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); /* AckRequired = FALSE, when broadcast packet in Adhoc mode. */ ++ /*TX_BLK_SET_FLAG(pTxBlk, fTX_bForceLowRate); */ + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAllowFrag); + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM); + if (RTMP_GET_PACKET_MOREDATA(pPacket)) { +@@ -598,7 +598,7 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + pMacEntry = pTxBlk->pMacEntry; + +- // For all unicast packets, need Ack unless the Ack Policy is not set as NORMAL_ACK. ++ /* For all unicast packets, need Ack unless the Ack Policy is not set as NORMAL_ACK. */ + if (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx] != NORMAL_ACK) + TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); + else +@@ -614,24 +614,24 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + { + { + +- // If support WMM, enable it. ++ /* If support WMM, enable it. */ + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_WMM_INUSED) + && CLIENT_STATUS_TEST_FLAG(pMacEntry, + fCLIENT_STATUS_WMM_CAPABLE)) + TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM); + +-// if (pAd->StaCfg.bAutoTxRateSwitch) +-// TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); ++/* if (pAd->StaCfg.bAutoTxRateSwitch) */ ++/* TX_BLK_SET_FLAG(pTxBlk, fTX_AutoRateSwitch); */ + } + } + + if (pTxBlk->TxFrameType == TX_LEGACY_FRAME) { +- if ((RTMP_GET_PACKET_LOWRATE(pPacket)) || ((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1))) { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate. ++ if ((RTMP_GET_PACKET_LOWRATE(pPacket)) || ((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1))) { /* Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate. */ + pTxBlk->pTransmit = + &pAd->MacTab.Content[MCAST_WCID].HTPhyMode; + +- // Modify the WMM bit for ICV issue. If we have a packet with EOSP field need to set as 1, how to handle it??? ++ /* Modify the WMM bit for ICV issue. If we have a packet with EOSP field need to set as 1, how to handle it??? */ + if (IS_HT_STA(pTxBlk->pMacEntry) && + (CLIENT_STATUS_TEST_FLAG + (pMacEntry, fCLIENT_STATUS_RALINK_CHIPSET)) +@@ -645,7 +645,7 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + } + } + +- if ((IS_HT_RATE(pMacEntry) == FALSE) && (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE))) { // Currently piggy-back only support when peer is operate in b/g mode. ++ if ((IS_HT_RATE(pMacEntry) == FALSE) && (CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE))) { /* Currently piggy-back only support when peer is operate in b/g mode. */ + TX_BLK_SET_FLAG(pTxBlk, fTX_bPiggyBack); + } + +@@ -666,7 +666,7 @@ BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, + IN NDIS_PACKET * pPacket, IN TX_BLK * pTxBlk) + { + +- //DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); ++ /*DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); */ + + if (RTMP_GET_PACKET_WCID(pPacket) == MCAST_WCID) + return FALSE; +@@ -675,15 +675,15 @@ BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, + RTMP_GET_PACKET_EAPOL(pPacket) || RTMP_GET_PACKET_WAI(pPacket)) + return FALSE; + +- if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) && ((pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket)) > (RX_BUFFER_AGGRESIZE - 100))) { // For AMSDU, allow the packets with total length < max-amsdu size ++ if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) && ((pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket)) > (RX_BUFFER_AGGRESIZE - 100))) { /* For AMSDU, allow the packets with total length < max-amsdu size */ + return FALSE; + } + +- if ((pTxBlk->TxFrameType == TX_RALINK_FRAME) && (pTxBlk->TxPacketList.Number == 2)) { // For RALINK-Aggregation, allow two frames in one batch. ++ if ((pTxBlk->TxFrameType == TX_RALINK_FRAME) && (pTxBlk->TxPacketList.Number == 2)) { /* For RALINK-Aggregation, allow two frames in one batch. */ + return FALSE; + } + +- if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) // must be unicast to AP ++ if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) /* must be unicast to AP */ + return TRUE; + else + return FALSE; +@@ -729,7 +729,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + + if (QIdx == NUM_OF_TX_RING) { + sQIdx = 0; +- eQIdx = 3; // 4 ACs, start from 0. ++ eQIdx = 3; /* 4 ACs, start from 0. */ + } else { + sQIdx = eQIdx = QIdx; + } +@@ -764,14 +764,14 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx); + + if (FreeNumber[QueIdx] <= 5) { +- // free Tx(QueIdx) resources ++ /* free Tx(QueIdx) resources */ + RTMPFreeTXDUponTxDmaDone(pAd, QueIdx); + FreeNumber[QueIdx] = + GET_TXRING_FREENO(pAd, QueIdx); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // probe the Queue Head ++ /* probe the Queue Head */ + pQueue = &pAd->TxSwQueue[QueIdx]; + if ((pEntry = pQueue->Head) == NULL) { + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, +@@ -781,12 +781,12 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + + pTxBlk = &TxBlk; + NdisZeroMemory((PUCHAR) pTxBlk, sizeof(TX_BLK)); +- //InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. ++ /*InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. */ + pTxBlk->QueIdx = QueIdx; + + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + +- // Early check to make sure we have enoguh Tx Resource. ++ /* Early check to make sure we have enoguh Tx Resource. */ + hasTxDesc = + RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, + FreeNumber[QueIdx], +@@ -803,7 +803,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + pTxBlk->TxFrameType = TxPktClassification(pAd, pPacket); + pEntry = RemoveHeadQueue(pQueue); + pTxBlk->TotalFrameNum++; +- pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary ++ pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); /* The real fragment number maybe vary */ + pTxBlk->TotalFrameLen += GET_OS_PKT_LEN(pPacket); + pTxBlk->pPacket = pPacket; + InsertTailQueue(&pTxBlk->TxPacketList, +@@ -811,7 +811,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + + if (pTxBlk->TxFrameType == TX_RALINK_FRAME + || pTxBlk->TxFrameType == TX_AMSDU_FRAME) { +- // Enhance SW Aggregation Mechanism ++ /* Enhance SW Aggregation Mechanism */ + if (NEED_QUEUE_BACK_FOR_AGG + (pAd, QueIdx, FreeNumber[QueIdx], + pTxBlk->TxFrameType)) { +@@ -827,7 +827,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + if ((pEntry = pQueue->Head) == NULL) + break; + +- // For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. ++ /* For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. */ + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + FreeNumber[QueIdx] = + GET_TXRING_FREENO(pAd, QueIdx); +@@ -843,12 +843,12 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + (pAd, pPacket, pTxBlk) == FALSE)) + break; + +- //Remove the packet from the TxSwQueue and insert into pTxBlk ++ /*Remove the packet from the TxSwQueue and insert into pTxBlk */ + pEntry = RemoveHeadQueue(pQueue); + ASSERT(pEntry); + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + pTxBlk->TotalFrameNum++; +- pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); // The real fragment number maybe vary ++ pTxBlk->TotalFragNum += RTMP_GET_PACKET_FRAGMENTS(pPacket); /* The real fragment number maybe vary */ + pTxBlk->TotalFrameLen += + GET_OS_PKT_LEN(pPacket); + InsertTailQueue(&pTxBlk->TxPacketList, +@@ -861,18 +861,18 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + } + #ifdef RTMP_MAC_USB + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + Count += pTxBlk->TxPacketList.Number; + +- // Do HardTransmit now. ++ /* Do HardTransmit now. */ + Status = STAHardTransmit(pAd, pTxBlk, QueIdx); + + #ifdef RTMP_MAC_PCI + DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); +- // static rate also need NICUpdateFifoStaCounters() function. +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) ++ /* static rate also need NICUpdateFifoStaCounters() function. */ ++ /*if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) */ + NICUpdateFifoStaCounters(pAd); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + } + +@@ -881,7 +881,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + #ifdef RTMP_MAC_USB + if (!hasTxDesc) + RTUSBKickBulkOut(pAd); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + } +@@ -912,28 +912,28 @@ USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + { + ULONG Duration = 0; + +- if (Rate < RATE_FIRST_OFDM_RATE) // CCK ++ if (Rate < RATE_FIRST_OFDM_RATE) /* CCK */ + { + if ((Rate > RATE_1) + && OPSTATUS_TEST_FLAG(pAd, + fOP_STATUS_SHORT_PREAMBLE_INUSED)) +- Duration = 96; // 72+24 preamble+plcp ++ Duration = 96; /* 72+24 preamble+plcp */ + else +- Duration = 192; // 144+48 preamble+plcp ++ Duration = 192; /* 144+48 preamble+plcp */ + + Duration += (USHORT) ((Size << 4) / RateIdTo500Kbps[Rate]); + if ((Size << 4) % RateIdTo500Kbps[Rate]) + Duration++; +- } else if (Rate <= RATE_LAST_OFDM_RATE) // OFDM rates ++ } else if (Rate <= RATE_LAST_OFDM_RATE) /* OFDM rates */ + { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension ++ Duration = 20 + 6; /* 16+4 preamble+plcp + Signal Extension */ + Duration += + 4 * (USHORT) ((11 + Size * 4) / RateIdTo500Kbps[Rate]); + if ((11 + Size * 4) % RateIdTo500Kbps[Rate]) + Duration += 4; +- } else //mimo rate ++ } else /*mimo rate */ + { +- Duration = 20 + 6; // 16+4 preamble+plcp + Signal Extension ++ Duration = 20 + 6; /* 16+4 preamble+plcp + Signal Extension */ + } + + return (USHORT) Duration; +@@ -968,7 +968,7 @@ USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + + ======================================================================== + */ +-VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, // HW new a sequence. ++VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ + IN UCHAR BASize, + IN UCHAR WCID, + IN ULONG Length, +@@ -985,10 +985,10 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + if (WCID < MAX_LEN_OF_MAC_TABLE) + pMac = &pAd->MacTab.Content[WCID]; + +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // ++ /* */ ++ /* Always use Long preamble before verifiation short preamble functionality works well. */ ++ /* Todo: remove the following line if short preamble functionality works */ ++ /* */ + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + NdisZeroMemory(&TxWI, TXWI_SIZE); + pTxWI = &TxWI; +@@ -1002,7 +1002,7 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + pTxWI->txop = Txopmode; + + pTxWI->NSEQ = NSeq; +- // John tune the performace with Intel Client in 20 MHz performance ++ /* John tune the performace with Intel Client in 20 MHz performance */ + BASize = pAd->CommonCfg.TxBASize; + if (pAd->MACVersion == 0x28720200) { + if (BASize > 13) +@@ -1019,7 +1019,7 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + pTxWI->MPDUtotalByteCount = Length; + pTxWI->PacketId = PID; + +- // If CCK or OFDM, BW must be 20 ++ /* If CCK or OFDM, BW must be 20 */ + pTxWI->BW = + (pTransmit->field.MODE <= + MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +@@ -1032,10 +1032,10 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + if (pAd->CommonCfg.bMIMOPSEnable) { + if ((pMac->MmpsMode == MMPS_DYNAMIC) + && (pTransmit->field.MCS > 7)) { +- // Dynamic MIMO Power Save Mode ++ /* Dynamic MIMO Power Save Mode */ + pTxWI->MIMOps = 1; + } else if (pMac->MmpsMode == MMPS_STATIC) { +- // Static MIMO Power Save Mode ++ /* Static MIMO Power Save Mode */ + if (pTransmit->field.MODE >= MODE_HTMIX + && pTransmit->field.MCS > 7) { + pTxWI->MCS = 7; +@@ -1043,7 +1043,7 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + } + } + } +- //pTxWI->MIMOps = (pMac->PsMode == PWR_MMPS)? 1:0; ++ /*pTxWI->MIMOps = (pMac->PsMode == PWR_MMPS)? 1:0; */ + if (pMac->bIAmBadAtheros + && (pMac->WepStatus != Ndis802_11WEPDisabled)) { + pTxWI->MpduDensity = 7; +@@ -1068,10 +1068,10 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + pTransmit = pTxBlk->pTransmit; + pMacEntry = pTxBlk->pMacEntry; + +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // ++ /* */ ++ /* Always use Long preamble before verifiation short preamble functionality works well. */ ++ /* Todo: remove the following line if short preamble functionality works */ ++ /* */ + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + NdisZeroMemory(pTxWI, TXWI_SIZE); + +@@ -1084,16 +1084,16 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; + pTxWI->CFACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bPiggyBack); + +- // If CCK or OFDM, BW must be 20 ++ /* If CCK or OFDM, BW must be 20 */ + pTxWI->BW = + (pTransmit->field.MODE <= + MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); + pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE); + +- // John tune the performace with Intel Client in 20 MHz performance ++ /* John tune the performace with Intel Client in 20 MHz performance */ + BASize = pAd->CommonCfg.TxBASize; + if ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry)) { +- UCHAR RABAOriIdx = 0; //The RA's BA Originator table index. ++ UCHAR RABAOriIdx = 0; /*The RA's BA Originator table index. */ + + RABAOriIdx = + pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority]; +@@ -1111,10 +1111,10 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + if (pMacEntry) { + if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) + && (pTransmit->field.MCS > 7)) { +- // Dynamic MIMO Power Save Mode ++ /* Dynamic MIMO Power Save Mode */ + pTxWI->MIMOps = 1; + } else if (pMacEntry->MmpsMode == MMPS_STATIC) { +- // Static MIMO Power Save Mode ++ /* Static MIMO Power Save Mode */ + if (pTransmit->field.MODE >= MODE_HTMIX + && pTransmit->field.MCS > 7) { + pTxWI->MCS = 7; +@@ -1130,7 +1130,7 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + } + } + +- // for rate adapation ++ /* for rate adapation */ + pTxWI->PacketId = pTxWI->MCS; + } + +@@ -1140,19 +1140,19 @@ VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + PHTTRANSMIT_SETTING /*pTxHTPhyMode, */ pTransmit; + PMAC_TABLE_ENTRY pMacEntry; + +- // +- // update TXWI +- // ++ /* */ ++ /* update TXWI */ ++ /* */ + pMacEntry = pTxBlk->pMacEntry; + pTransmit = pTxBlk->pTransmit; + +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) +- //if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pMacEntry)) +- //if (TX_BLK_TEST_FLAG(pTxBlk, fTX_AutoRateSwitch)) ++ /*if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) */ ++ /*if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pMacEntry)) */ ++ /*if (TX_BLK_TEST_FLAG(pTxBlk, fTX_AutoRateSwitch)) */ + if (pMacEntry->bAutoTxRateSwitch) { + pTxWI->txop = IFS_HTTXOP; + +- // If CCK or OFDM, BW must be 20 ++ /* If CCK or OFDM, BW must be 20 */ + pTxWI->BW = + (pTransmit->field.MODE <= + MODE_OFDM) ? (BW_20) : (pTransmit->field.BW); +@@ -1162,7 +1162,7 @@ VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + pTxWI->MCS = pTransmit->field.MCS; + pTxWI->PHYMODE = pTransmit->field.MODE; + +- // set PID for TxRateSwitching ++ /* set PID for TxRateSwitching */ + pTxWI->PacketId = pTransmit->field.MCS; + } + +@@ -1170,13 +1170,13 @@ VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + pTxWI->MIMOps = 0; + + if (pAd->CommonCfg.bMIMOPSEnable) { +- // MIMO Power Save Mode ++ /* MIMO Power Save Mode */ + if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) + && (pTransmit->field.MCS > 7)) { +- // Dynamic MIMO Power Save Mode ++ /* Dynamic MIMO Power Save Mode */ + pTxWI->MIMOps = 1; + } else if (pMacEntry->MmpsMode == MMPS_STATIC) { +- // Static MIMO Power Save Mode ++ /* Static MIMO Power Save Mode */ + if ((pTransmit->field.MODE >= MODE_HTMIX) + && (pTransmit->field.MCS > 7)) { + pTxWI->MCS = 7; +@@ -1189,26 +1189,26 @@ VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + + } + +-// should be called only when - +-// 1. MEADIA_CONNECTED +-// 2. AGGREGATION_IN_USED +-// 3. Fragmentation not in used +-// 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible ++/* should be called only when - */ ++/* 1. MEADIA_CONNECTED */ ++/* 2. AGGREGATION_IN_USED */ ++/* 3. Fragmentation not in used */ ++/* 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible */ + BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, + IN PUCHAR pPrevAddr1, IN PUCHAR p8023hdr) + { + +- // can't aggregate EAPOL (802.1x) frame ++ /* can't aggregate EAPOL (802.1x) frame */ + if ((p8023hdr[12] == 0x88) && (p8023hdr[13] == 0x8e)) + return FALSE; + +- // can't aggregate multicast/broadcast frame ++ /* can't aggregate multicast/broadcast frame */ + if (p8023hdr[0] & 0x01) + return FALSE; + +- if (INFRA_ON(pAd)) // must be unicast to AP ++ if (INFRA_ON(pAd)) /* must be unicast to AP */ + return TRUE; +- else if ((pPrevAddr1 == NULL) || MAC_ADDR_EQUAL(pPrevAddr1, p8023hdr)) // unicast to same STA ++ else if ((pPrevAddr1 == NULL) || MAC_ADDR_EQUAL(pPrevAddr1, p8023hdr)) /* unicast to same STA */ + return TRUE; + else + return FALSE; +@@ -1241,10 +1241,10 @@ BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, + return TRUE; + } + #ifdef AGGREGATION_SUPPORT +- if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { // legacy Ralink Aggregation support ++ if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE)))) { /* legacy Ralink Aggregation support */ + return TRUE; + } +-#endif // AGGREGATION_SUPPORT // ++#endif /* AGGREGATION_SUPPORT // */ + } + + return FALSE; +@@ -1273,9 +1273,9 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT PUCHAR pQueIdx) + { + + ULONG Number; +- // 2004-11-15 to be removed. test aggregation only +-// if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) +-// return NULL; ++ /* 2004-11-15 to be removed. test aggregation only */ ++/* if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) */ ++/* return NULL; */ + + Number = pAd->TxSwQueue[QID_AC_BK].Number + + pAd->TxSwQueue[QID_AC_BE].Number +@@ -1295,7 +1295,7 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT PUCHAR pQueIdx) + *pQueIdx = QID_AC_BK; + return (&pAd->TxSwQueue[QID_AC_BK]); + } +- // No packet pending in Tx Sw queue ++ /* No packet pending in Tx Sw queue */ + *pQueIdx = QID_AC_BK; + + return (NULL); +@@ -1321,19 +1321,19 @@ VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("SCANNING, suspend MSDU transmission ...\n")); + +- // +- // Before BSS_SCAN_IN_PROGRESS, we need to keep Current R66 value and +- // use Lowbound as R66 value on ScanNextChannel(...) +- // ++ /* */ ++ /* Before BSS_SCAN_IN_PROGRESS, we need to keep Current R66 value and */ ++ /* use Lowbound as R66 value on ScanNextChannel(...) */ ++ /* */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, + &pAd->BbpTuning.R66CurrentValue); + +- // set BBP_R66 to 0x30/0x40 when scanning (AsicSwitchChannel will set R66 according to channel when scanning) +- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x26 + GET_LNA_GAIN(pAd))); ++ /* set BBP_R66 to 0x30/0x40 when scanning (AsicSwitchChannel will set R66 according to channel when scanning) */ ++ /*RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x26 + GET_LNA_GAIN(pAd))); */ + RTMPSetAGCInitValue(pAd, BW_20); + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings ++ /*RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x000f0000); // abort all TX rings */ + } + + /* +@@ -1356,12 +1356,12 @@ VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + */ + VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + { +-// UCHAR IrqState; ++/* UCHAR IrqState; */ + + DBGPRINT(RT_DEBUG_TRACE, ("SCAN done, resume MSDU transmission ...\n")); + +- // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value +- // R66 should not be 0 ++ /* After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value */ ++ /* R66 should not be 0 */ + if (pAd->BbpTuning.R66CurrentValue == 0) { + pAd->BbpTuning.R66CurrentValue = 0x38; + DBGPRINT_ERR(("RTMPResumeMsduTransmission, R66CurrentValue=0...\n")); +@@ -1371,11 +1371,11 @@ VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + pAd->BbpTuning.R66CurrentValue); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +-// sample, for IRQ LOCK to SEM LOCK +-// IrqState = pAd->irq_disabled; +-// if (IrqState) +-// RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); +-// else ++/* sample, for IRQ LOCK to SEM LOCK */ ++/* IrqState = pAd->irq_disabled; */ ++/* if (IrqState) */ ++/* RTMPDeQueuePacket(pAd, TRUE, NUM_OF_TX_RING, MAX_TX_PROCESS); */ ++/* else */ + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + } + +@@ -1398,9 +1398,9 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + + nMSDU++; + +- //hex_dump("subheader", pData, 64); ++ /*hex_dump("subheader", pData, 64); */ + pAMSDUsubheader = (PHEADER_802_3) pData; +- //pData += LENGTH_802_3; ++ /*pData += LENGTH_802_3; */ + PayloadSize = + pAMSDUsubheader->Octet[1] + + (pAMSDUsubheader->Octet[0] << 8); +@@ -1409,13 +1409,13 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + if ((DataSize < SubFrameSize) || (PayloadSize > 1518)) { + break; + } +- //DBGPRINT(RT_DEBUG_TRACE,("%d subframe: Size = %d\n", nMSDU, PayloadSize)); ++ /*DBGPRINT(RT_DEBUG_TRACE,("%d subframe: Size = %d\n", nMSDU, PayloadSize)); */ + + pPayload = pData + LENGTH_802_3; + pDA = pData; + pSA = pData + MAC_ADDR_LEN; + +- // convert to 802.3 header ++ /* convert to 802.3 header */ + CONVERT_TO_802_3(Header802_3, pDA, pSA, pPayload, PayloadSize, + pRemovedLLCSNAP); + +@@ -1431,7 +1431,7 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + Elem->MsgLen = + LENGTH_802_11 + LENGTH_802_1_H + + PayloadSize; +- //WpaEAPOLKeyAction(pAd, Elem); ++ /*WpaEAPOLKeyAction(pAd, Elem); */ + REPORT_MGMT_FRAME_TO_MLME(pAd, BSSID_WCID, + Elem->Msg, + Elem->MsgLen, 0, 0, 0, +@@ -1456,8 +1456,8 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + (pPacket)); + } + +- // A-MSDU has padding to multiple of 4 including subframe header. +- // align SubFrameSize up to multiple of 4 ++ /* A-MSDU has padding to multiple of 4 including subframe header. */ ++ /* align SubFrameSize up to multiple of 4 */ + SubFrameSize = (SubFrameSize + 3) & (~0x3); + + if (SubFrameSize > 1528 || SubFrameSize < 32) { +@@ -1468,12 +1468,12 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + pData += SubFrameSize; + DataSize -= SubFrameSize; + } else { +- // end of A-MSDU ++ /* end of A-MSDU */ + DataSize = 0; + } + } + +- // finally release original rx packet ++ /* finally release original rx packet */ + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS); + + return nMSDU; +@@ -1528,10 +1528,10 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + UCHAR HashIdx; + int i, FirstWcid; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; +-// USHORT offset; +-// ULONG addr; ++/* USHORT offset; */ ++/* ULONG addr; */ + +- // if FULL, return ++ /* if FULL, return */ + if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) + return NULL; + +@@ -1540,11 +1540,11 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + if (pAd->StaCfg.BssType == BSS_INFRA) + FirstWcid = 2; + +- // allocate one MAC entry ++ /* allocate one MAC entry */ + NdisAcquireSpinLock(&pAd->MacTabLock); +- for (i = FirstWcid; i < MAX_LEN_OF_MAC_TABLE; i++) // skip entry#0 so that "entry index == AID" for fast lookup ++ for (i = FirstWcid; i < MAX_LEN_OF_MAC_TABLE; i++) /* skip entry#0 so that "entry index == AID" for fast lookup */ + { +- // pick up the first available vacancy ++ /* pick up the first available vacancy */ + if ((pAd->MacTab.Content[i].ValidAsCLI == FALSE) && + (pAd->MacTab.Content[i].ValidAsWDS == FALSE) && + (pAd->MacTab.Content[i].ValidAsApCli == FALSE) && +@@ -1602,7 +1602,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + pEntry-> + apidx, + (UCHAR) i); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } + } + +@@ -1615,7 +1615,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + COPY_MAC_ADDR(pEntry->Addr, pAddr); + pEntry->Sst = SST_NOT_AUTH; + pEntry->AuthState = AS_NOT_AUTH; +- pEntry->Aid = (USHORT) i; //0; ++ pEntry->Aid = (USHORT) i; /*0; */ + pEntry->CapabilityInfo = 0; + pEntry->PsMode = PWR_ACTIVE; + pEntry->PsQIdleCount = 0; +@@ -1625,7 +1625,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + InitializeQueueHeader(&pEntry->PsQueue); + + pAd->MacTab.Size++; +- // Add this entry into ASIC RX WCID search table ++ /* Add this entry into ASIC RX WCID search table */ + RTMP_STA_ENTRY_ADD(pAd, pEntry); + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1635,7 +1635,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + } + } + +- // add this MAC entry into HASH table ++ /* add this MAC entry into HASH table */ + if (pEntry) { + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); + if (pAd->MacTab.Hash[HashIdx] == NULL) { +@@ -1664,8 +1664,8 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + USHORT HashIdx; + MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; + BOOLEAN Cancelled; +- //USHORT offset; // unused variable +- //UCHAR j; // unused variable ++ /*USHORT offset; // unused variable */ ++ /*UCHAR j; // unused variable */ + + if (wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; +@@ -1673,7 +1673,7 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + NdisAcquireSpinLock(&pAd->MacTabLock); + + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +- //pEntry = pAd->MacTab.Hash[HashIdx]; ++ /*pEntry = pAd->MacTab.Hash[HashIdx]; */ + pEntry = &pAd->MacTab.Content[wcid]; + + if (pEntry +@@ -1681,17 +1681,17 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + || pEntry->ValidAsMesh)) { + if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr)) { + +- // Delete this entry from ASIC on-chip WCID Table ++ /* Delete this entry from ASIC on-chip WCID Table */ + RTMP_STA_ENTRY_MAC_RESET(pAd, wcid); + +- // free resources of BA ++ /* free resources of BA */ + BASessionTearDownALL(pAd, pEntry->Aid); + + pPrevEntry = NULL; + pProbeEntry = pAd->MacTab.Hash[HashIdx]; + ASSERT(pProbeEntry); + +- // update Hash list ++ /* update Hash list */ + do { + if (pProbeEntry == pEntry) { + if (pPrevEntry == NULL) { +@@ -1708,7 +1708,7 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- // not found !!! ++ /* not found !!! */ + ASSERT(pProbeEntry != NULL); + + RTMP_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); +@@ -1736,11 +1736,10 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + + NdisReleaseSpinLock(&pAd->MacTabLock); + +- //Reset operating mode when no Sta. ++ /*Reset operating mode when no Sta. */ + if (pAd->MacTab.Size == 0) { + pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0; +- //AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/); +- RTMP_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet ++ RTMP_UPDATE_PROTECT(pAd); /* edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ + } + + return TRUE; +@@ -1758,15 +1757,15 @@ VOID MacTableReset(IN PRTMP_ADAPTER pAd) + int i; + + DBGPRINT(RT_DEBUG_TRACE, ("MacTableReset\n")); +- //NdisAcquireSpinLock(&pAd->MacTabLock); ++ /*NdisAcquireSpinLock(&pAd->MacTabLock); */ + + for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + #ifdef RTMP_MAC_PCI + RTMP_STA_ENTRY_MAC_RESET(pAd, i); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + if (pAd->MacTab.Content[i].ValidAsCLI == TRUE) { + +- // free resources of BA ++ /* free resources of BA */ + BASessionTearDownALL(pAd, i); + + pAd->MacTab.Content[i].ValidAsCLI = FALSE; +@@ -1774,9 +1773,9 @@ VOID MacTableReset(IN PRTMP_ADAPTER pAd) + #ifdef RTMP_MAC_USB + NdisZeroMemory(pAd->MacTab.Content[i].Addr, 6); + RTMP_STA_ENTRY_MAC_RESET(pAd, i); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- //AsicDelWcidTab(pAd, i); ++ /*AsicDelWcidTab(pAd, i); */ + } + } + +@@ -1798,8 +1797,8 @@ VOID AssocParmFill(IN PRTMP_ADAPTER pAd, + IN ULONG Timeout, IN USHORT ListenIntv) + { + COPY_MAC_ADDR(AssocReq->Addr, pAddr); +- // Add mask to support 802.11b mode only +- AssocReq->CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; // not cf-pollable, not cf-poll-request ++ /* Add mask to support 802.11b mode only */ ++ AssocReq->CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO; /* not cf-pollable, not cf-poll-request */ + AssocReq->Timeout = Timeout; + AssocReq->ListenIntv = ListenIntv; + } +@@ -1874,9 +1873,9 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + pSrc = (PUCHAR) pVirtualAddress; + Protocol = *(pSrc + 12) * 256 + *(pSrc + 13); + +- // +- // Check DHCP & BOOTP protocol +- // ++ /* */ ++ /* Check DHCP & BOOTP protocol */ ++ /* */ + while (NumberOfBytesRead <= PacketInfo.TotalPacketLength) { + if ((NumberOfBytesRead >= 35) && (ReadFirstParm == TRUE)) { + CurrentOffset = +@@ -1889,19 +1888,19 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + CurrentOffset = + 37 - (NumberOfBytesRead - NdisBufferLength); + ByteOffset38 = *(pSrc + CurrentOffset); +- //End of Read ++ /*End of Read */ + break; + } + return FALSE; + } + +- // Check for DHCP & BOOTP protocol ++ /* Check for DHCP & BOOTP protocol */ + if ((ByteOffset36 != 0x44) || (ByteOffset38 != 0x43)) { +- // +- // 2054 (hex 0806) for ARP datagrams +- // if this packet is not ARP datagrams, then do nothing +- // ARP datagrams will also be duplicate at 1mb broadcast frames +- // ++ /* */ ++ /* 2054 (hex 0806) for ARP datagrams */ ++ /* if this packet is not ARP datagrams, then do nothing */ ++ /* ARP datagrams will also be duplicate at 1mb broadcast frames */ ++ /* */ + if (Protocol != 0x0806) + return FALSE; + } +@@ -1925,12 +1924,12 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + RTMP_SET_PACKET_SPECIFIC(pPacket, 0); + +- // get Ethernet protocol field ++ /* get Ethernet protocol field */ + TypeLen = (pSrcBuf[12] << 8) | pSrcBuf[13]; + +- pSrcBuf += LENGTH_802_3; // Skip the Ethernet Header. ++ pSrcBuf += LENGTH_802_3; /* Skip the Ethernet Header. */ + +- if (TypeLen <= 1500) { // 802.3, 802.3 LLC ++ if (TypeLen <= 1500) { /* 802.3, 802.3 LLC */ + /* + DestMAC(6) + SrcMAC(6) + Lenght(2) + + DSAP(1) + SSAP(1) + Control(1) + +@@ -1943,12 +1942,12 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + &Byte0, &Byte1); + RTMP_SET_PACKET_LLCSNAP(pPacket, 1); + TypeLen = (USHORT) ((Byte0 << 8) + Byte1); +- pSrcBuf += 8; // Skip this LLC/SNAP header ++ pSrcBuf += 8; /* Skip this LLC/SNAP header */ + } else { +- //It just has 3-byte LLC header, maybe a legacy ether type frame. we didn't handle it. ++ /*It just has 3-byte LLC header, maybe a legacy ether type frame. we didn't handle it. */ + } + } +- // If it's a VLAN packet, get the real Type/Length field. ++ /* If it's a VLAN packet, get the real Type/Length field. */ + if (TypeLen == 0x8100) { + /* 0x8100 means VLAN packets */ + +@@ -1966,17 +1965,17 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + &Byte1); + TypeLen = (USHORT) ((Byte0 << 8) + Byte1); + +- pSrcBuf += 4; // Skip the VLAN Header. ++ pSrcBuf += 4; /* Skip the VLAN Header. */ + } + + switch (TypeLen) { + case 0x0800: + { + ASSERT((pktLen > 34)); +- if (*(pSrcBuf + 9) == 0x11) { // udp packet +- ASSERT((pktLen > 34)); // 14 for ethernet header, 20 for IP header ++ if (*(pSrcBuf + 9) == 0x11) { /* udp packet */ ++ ASSERT((pktLen > 34)); /* 14 for ethernet header, 20 for IP header */ + +- pSrcBuf += 20; // Skip the IP header ++ pSrcBuf += 20; /* Skip the IP header */ + srcPort = + OS_NTOHS(get_unaligned + ((PUINT16) (pSrcBuf))); +@@ -1984,7 +1983,7 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + OS_NTOHS(get_unaligned + ((PUINT16) (pSrcBuf + 2))); + +- if ((srcPort == 0x44 && dstPort == 0x43) || (srcPort == 0x43 && dstPort == 0x44)) { //It's a BOOTP/DHCP packet ++ if ((srcPort == 0x44 && dstPort == 0x43) || (srcPort == 0x43 && dstPort == 0x44)) { /*It's a BOOTP/DHCP packet */ + RTMP_SET_PACKET_DHCP(pPacket, 1); + } + } +@@ -1992,13 +1991,13 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + break; + case 0x0806: + { +- //ARP Packet. ++ /*ARP Packet. */ + RTMP_SET_PACKET_DHCP(pPacket, 1); + } + break; + case 0x888e: + { +- // EAPOL Packet. ++ /* EAPOL Packet. */ + RTMP_SET_PACKET_EAPOL(pPacket, 1); + } + break; +@@ -2040,22 +2039,22 @@ VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + } + } + +-// Normal legacy Rx packet indication ++/* Normal legacy Rx packet indication */ + VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { + PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; + UCHAR Header802_3[LENGTH_802_3]; + +- // 1. get 802.3 Header +- // 2. remove LLC +- // a. pointer pRxBlk->pData to payload +- // b. modify pRxBlk->DataSize ++ /* 1. get 802.3 Header */ ++ /* 2. remove LLC */ ++ /* a. pointer pRxBlk->pData to payload */ ++ /* b. modify pRxBlk->DataSize */ + RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); + + if (pRxBlk->DataSize > MAX_RX_PKT_LEN) { + +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + return; + } +@@ -2070,13 +2069,13 @@ VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + UCHAR TID = pRxBlk->pRxWI->TID; + USHORT Idx; + +-#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) // system ticks -- 100 ms ++#define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) /* system ticks -- 100 ms */ + + if (Wcid < MAX_LEN_OF_MAC_TABLE) { + Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID]; + if (Idx != 0) { + pBAEntry = &pAd->BATable.BARecEntry[Idx]; +- // update last rx time ++ /* update last rx time */ + NdisGetSystemUpTime(&Now32); + if ((pBAEntry->list.qlen > 0) && + RTMP_TIME_AFTER((unsigned long)Now32, +@@ -2101,17 +2100,17 @@ VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + } + } + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); + +- // +- // pass this 802.3 packet to upper layer or forward this packet to WM directly +- // ++ /* */ ++ /* pass this 802.3 packet to upper layer or forward this packet to WM directly */ ++ /* */ + ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxPacket, FromWhichBSSID); + } + +-// Normal, AMPDU or AMSDU ++/* Normal, AMPDU or AMSDU */ + VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { +@@ -2120,7 +2119,7 @@ VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); + } else { + if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU)) { +- // handle A-MSDU ++ /* handle A-MSDU */ + Indicate_AMSDU_Packet(pAd, pRxBlk, FromWhichBSSID); + } else { + Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID); +@@ -2145,18 +2144,18 @@ VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + pRxBlk->pData += 2; + pRxBlk->DataSize -= 2; + } else { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; + } + +- // get 802.3 Header and remove LLC ++ /* get 802.3 Header and remove LLC */ + RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3); + + ASSERT(pRxBlk->pRxPacket); + +- // Ralink Aggregation frame ++ /* Ralink Aggregation frame */ + pAd->RalinkCounters.OneSecRxAggregationCount++; + Payload1Size = pRxBlk->DataSize - Msdu2Size; + Payload2Size = Msdu2Size - LENGTH_802_3; +@@ -2168,12 +2167,12 @@ VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + Payload2Size, FromWhichBSSID); + + if (!pPacket2) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; + } +- // update payload size of 1st packet ++ /* update payload size of 1st packet */ + pRxBlk->DataSize = Payload1Size; + wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID); + +@@ -2208,10 +2207,10 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + HeaderRoom = pData - (UCHAR *) pHeader; + +- // Re-assemble the fragmented packets +- if (pHeader->Frag == 0) // Frag. Number is 0 : First frag or only one pkt ++ /* Re-assemble the fragmented packets */ ++ if (pHeader->Frag == 0) /* Frag. Number is 0 : First frag or only one pkt */ + { +- // the first pkt of fragment, record it. ++ /* the first pkt of fragment, record it. */ + if (pHeader->FC.MoreFrag) { + ASSERT(pAd->FragFrame.pFragPacket); + pFragBuffer = +@@ -2220,67 +2219,67 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + NdisMoveMemory(pFragBuffer, pHeader, + pAd->FragFrame.RxSize); + pAd->FragFrame.Sequence = pHeader->Sequence; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Should be 0 ++ pAd->FragFrame.LastFrag = pHeader->Frag; /* Should be 0 */ + ASSERT(pAd->FragFrame.LastFrag == 0); +- goto done; // end of processing this frame ++ goto done; /* end of processing this frame */ + } +- } else //Middle & End of fragment ++ } else /*Middle & End of fragment */ + { + if ((pHeader->Sequence != pAd->FragFrame.Sequence) || + (pHeader->Frag != (pAd->FragFrame.LastFrag + 1))) { +- // Fragment is not the same sequence or out of fragment number order +- // Reset Fragment control blk ++ /* Fragment is not the same sequence or out of fragment number order */ ++ /* Reset Fragment control blk */ + RESET_FRAGFRAME(pAd->FragFrame); + DBGPRINT(RT_DEBUG_ERROR, + ("Fragment is not the same sequence or out of fragment number order.\n")); +- goto done; // give up this frame ++ goto done; /* give up this frame */ + } else if ((pAd->FragFrame.RxSize + DataSize) > MAX_FRAME_SIZE) { +- // Fragment frame is too large, it exeeds the maximum frame size. +- // Reset Fragment control blk ++ /* Fragment frame is too large, it exeeds the maximum frame size. */ ++ /* Reset Fragment control blk */ + RESET_FRAGFRAME(pAd->FragFrame); + DBGPRINT(RT_DEBUG_ERROR, + ("Fragment frame is too large, it exeeds the maximum frame size.\n")); +- goto done; // give up this frame ++ goto done; /* give up this frame */ + } +- // +- // Broadcom AP(BCM94704AGR) will send out LLC in fragment's packet, LLC only can accpet at first fragment. +- // In this case, we will dropt it. +- // ++ /* */ ++ /* Broadcom AP(BCM94704AGR) will send out LLC in fragment's packet, LLC only can accpet at first fragment. */ ++ /* In this case, we will dropt it. */ ++ /* */ + if (NdisEqualMemory(pData, SNAP_802_1H, sizeof(SNAP_802_1H))) { + DBGPRINT(RT_DEBUG_ERROR, + ("Find another LLC at Middle or End fragment(SN=%d, Frag=%d)\n", + pHeader->Sequence, pHeader->Frag)); +- goto done; // give up this frame ++ goto done; /* give up this frame */ + } + + pFragBuffer = GET_OS_PKT_DATAPTR(pAd->FragFrame.pFragPacket); + +- // concatenate this fragment into the re-assembly buffer ++ /* concatenate this fragment into the re-assembly buffer */ + NdisMoveMemory((pFragBuffer + pAd->FragFrame.RxSize), pData, + DataSize); + pAd->FragFrame.RxSize += DataSize; +- pAd->FragFrame.LastFrag = pHeader->Frag; // Update fragment number ++ pAd->FragFrame.LastFrag = pHeader->Frag; /* Update fragment number */ + +- // Last fragment ++ /* Last fragment */ + if (pHeader->FC.MoreFrag == FALSE) { + bReassDone = TRUE; + } + } + + done: +- // always release rx fragmented packet ++ /* always release rx fragmented packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + +- // return defragmented packet if packet is reassembled completely +- // otherwise return NULL ++ /* return defragmented packet if packet is reassembled completely */ ++ /* otherwise return NULL */ + if (bReassDone) { + PNDIS_PACKET pNewFragPacket; + +- // allocate a new packet buffer for fragment ++ /* allocate a new packet buffer for fragment */ + pNewFragPacket = + RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); + if (pNewFragPacket) { +- // update RxBlk ++ /* update RxBlk */ + pRetPacket = pAd->FragFrame.pFragPacket; + pAd->FragFrame.pFragPacket = pNewFragPacket; + pRxBlk->pHeader = +@@ -2322,14 +2321,14 @@ VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, + if (pEntry == NULL) { + DBGPRINT(RT_DEBUG_WARN, + ("Indicate_EAPOL_Packet: drop and release the invalid packet.\n")); +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; + } + } + +-#define BCN_TBTT_OFFSET 64 //defer 64 us ++#define BCN_TBTT_OFFSET 64 /*defer 64 us */ + VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) + { + +@@ -2339,21 +2338,21 @@ VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) + + pAd->TbttTickCount++; + +- // +- // The updated BeaconInterval Value will affect Beacon Interval after two TBTT +- // beacasue the original BeaconInterval had been loaded into next TBTT_TIMER +- // ++ /* */ ++ /* The updated BeaconInterval Value will affect Beacon Interval after two TBTT */ ++ /* beacasue the original BeaconInterval had been loaded into next TBTT_TIMER */ ++ /* */ + if (Offset == (BCN_TBTT_OFFSET - 2)) { + BCN_TIME_CFG_STRUC csr; + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod << 4) - 1; // ASIC register in units of 1/16 TU = 64us ++ csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod << 4) - 1; /* ASIC register in units of 1/16 TU = 64us */ + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); + } else { + if (Offset == (BCN_TBTT_OFFSET - 1)) { + BCN_TIME_CFG_STRUC csr; + + RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word); +- csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod) << 4; // ASIC register in units of 1/16 TU ++ csr.field.BeaconInterval = (pAd->CommonCfg.BeaconPeriod) << 4; /* ASIC register in units of 1/16 TU */ + RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word); + } + } +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index f98f1a8..157ebc6 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -44,23 +44,23 @@ USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + PRTMP_TX_RING pTxRing; + USHORT hwHeaderLen; + +- // +- // get Tx Ring Resource +- // ++ /* */ ++ /* get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ /* copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer */ + if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) { +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ /*hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; */ + hwHeaderLen = + pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; + } else { +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /*hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + } + NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, +@@ -69,15 +69,15 @@ USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; + +- // +- // build Tx Descriptor +- // ++ /* */ ++ /* build Tx Descriptor */ ++ /* */ + + pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; /* include padding */ + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -86,9 +86,9 @@ USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); + + RetTxIdx = TxIdx; +- // +- // Update Tx index +- // ++ /* */ ++ /* Update Tx index */ ++ /* */ + INC_RING_INDEX(TxIdx, TX_RING_SIZE); + pTxRing->TxCpuIdx = TxIdx; + +@@ -110,17 +110,17 @@ USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + PRTMP_TX_RING pTxRing; + USHORT hwHeaderLen; + +- // +- // get Tx Ring Resource +- // ++ /* */ ++ /* get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /* copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer */ ++ /*hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + + NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, +@@ -129,14 +129,14 @@ USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; + +- // +- // build Tx Descriptor +- // ++ /* */ ++ /* build Tx Descriptor */ ++ /* */ + pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding ++ pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; /* include padding */ + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -145,9 +145,9 @@ USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); + + RetTxIdx = TxIdx; +- // +- // Update Tx index +- // ++ /* */ ++ /* Update Tx index */ ++ /* */ + INC_RING_INDEX(TxIdx, TX_RING_SIZE); + pTxRing->TxCpuIdx = TxIdx; + +@@ -171,9 +171,9 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + + bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); + +- // +- // get Tx Ring Resource +- // ++ /* */ ++ /* get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +@@ -181,20 +181,20 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + + if (frameNum == 0) { +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer ++ /* copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer */ + if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; */ + hwHdrLen = + pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; + else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; */ + hwHdrLen = + pTxBlk->MpduHeaderLen - + LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + + LENGTH_ARALINK_HEADER_FIELD; + else +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + + firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; +@@ -207,14 +207,14 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; + pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; + +- // +- // build Tx Descriptor +- // ++ /* */ ++ /* build Tx Descriptor */ ++ /* */ + pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDLen0 = firstDMALen; /* include padding */ + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -223,9 +223,9 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); + + RetTxIdx = TxIdx; +- // +- // Update Tx index +- // ++ /* */ ++ /* Update Tx index */ ++ /* */ + INC_RING_INDEX(TxIdx, TX_RING_SIZE); + pTxRing->TxCpuIdx = TxIdx; + +@@ -243,9 +243,9 @@ VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + PTXWI_STRUC pTxWI; + PRTMP_TX_RING pTxRing; + +- // +- // get Tx Ring Resource +- // ++ /* */ ++ /* get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; + pTxWI->MPDUtotalByteCount = totalMPDUSize; +@@ -258,14 +258,14 @@ VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, + PTXD_STRUC pTxD; + PRTMP_TX_RING pTxRing; + +- // +- // get Tx Ring Resource +- // ++ /* */ ++ /* get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[QueIdx]; + +- // +- // build Tx Descriptor +- // ++ /* */ ++ /* build Tx Descriptor */ ++ /* */ + pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; + + pTxD->LastSec1 = 1; +@@ -284,27 +284,27 @@ USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + USHORT hwHeaderLen; + UINT32 firstDMALen; + +- // +- // Get Tx Ring Resource +- // ++ /* */ ++ /* Get Tx Ring Resource */ ++ /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; + pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +- // +- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- // +- //hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /* */ ++ /* Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer */ ++ /* */ ++ /*hwHeaderLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + + firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; + NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); + +- // +- // Build Tx Descriptor +- // ++ /* */ ++ /* Build Tx Descriptor */ ++ /* */ + pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + +@@ -314,7 +314,7 @@ USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + } + + pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding ++ pTxD->SDLen0 = firstDMALen; /* include padding */ + pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); + pTxD->SDLen1 = pTxBlk->SrcBufLen; + pTxD->LastSec0 = 0; +@@ -325,9 +325,9 @@ USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + RetTxIdx = TxIdx; + pTxBlk->Priv += pTxBlk->SrcBufLen; + +- // +- // Update Tx index +- // ++ /* */ ++ /* Update Tx index */ ++ /* */ + INC_RING_INDEX(TxIdx, TX_RING_SIZE); + pTxRing->TxCpuIdx = TxIdx; + +@@ -363,7 +363,7 @@ int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); + pTxD->SDLen0 = SrcBufLen; + +-//================================================================== ++/*================================================================== */ + /* DBGPRINT_RAW(RT_DEBUG_TRACE, ("MLMEHardTransmit\n")); + for (i = 0; i < (TXWI_SIZE+24); i++) + { +@@ -375,12 +375,12 @@ int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n ")); + } + DBGPRINT_RAW(RT_DEBUG_TRACE, ("\n "));*/ +-//======================================================================= ++/*======================================================================= */ + + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + +- // Increase TX_CTX_IDX, but write to register later. ++ /* Increase TX_CTX_IDX, but write to register later. */ + INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); + + RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +@@ -412,9 +412,9 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + PCIPHER_KEY pWpaKey; + INT dBm; + +- // Phy errors & CRC errors ++ /* Phy errors & CRC errors */ + if ( /*(pRxD->PhyErr) || */ (pRxD->Crc)) { +- // Check RSSI for Noise Hist statistic collection. ++ /* Check RSSI for Noise Hist statistic collection. */ + dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) + pAd->StaCfg.RPIDensity[0] += 1; +@@ -435,21 +435,21 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + + return (NDIS_STATUS_FAILURE); + } +- // Add Rx size to channel load counter, we should ignore error counts ++ /* Add Rx size to channel load counter, we should ignore error counts */ + pAd->StaCfg.CLBusyBytes += (pRxD->SDL0 + 14); + +- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics ++ /* Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics */ + if (pHeader != NULL) { + if (pHeader->FC.ToDs) { + return (NDIS_STATUS_FAILURE); + } + } +- // Drop not U2M frames, cant's drop here because we will drop beacon in this case +- // I am kind of doubting the U2M bit operation +- // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); ++ /* Drop not U2M frames, cant's drop here because we will drop beacon in this case */ ++ /* I am kind of doubting the U2M bit operation */ ++ /* if (pRxD->U2M == 0) */ ++ /* return(NDIS_STATUS_FAILURE); */ + +- // drop decyption fail frame ++ /* drop decyption fail frame */ + if (pRxD->CipherErr) { + if (pRxD->CipherErr == 2) { + DBGPRINT_RAW(RT_DEBUG_TRACE, +@@ -471,12 +471,12 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + pRxD->CipherErr, pRxD->SDL0, + pRxD->Mcast | pRxD->Bcast, pRxD->MyBss, + pRxWI->WirelessCliID, +-// CipherName[pRxD->CipherAlg], ++/* CipherName[pRxD->CipherAlg], */ + pRxWI->KeyIndex)); + +- // +- // MIC Error +- // ++ /* */ ++ /* MIC Error */ ++ /* */ + if (pRxD->CipherErr == 2) { + pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; + if (pAd->StaCfg.WpaSupplicantUP) +@@ -523,7 +523,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + PNDIS_PACKET pPacket; + UCHAR FREE = 0; + TXD_STRUC TxD, *pOriTxD; +- //ULONG IrqFlags; ++ /*ULONG IrqFlags; */ + BOOLEAN bReschedule = FALSE; + + ASSERT(QueIdx < NUM_OF_TX_RING); +@@ -532,10 +532,10 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, + &pTxRing->TxDmaIdx); + while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx) { +-// RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); ++/* RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); */ + +- // static rate also need NICUpdateFifoStaCounters() function. +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) ++ /* static rate also need NICUpdateFifoStaCounters() function. */ ++ /*if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) */ + NICUpdateFifoStaCounters(pAd); + + /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ +@@ -558,7 +558,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_SUCCESS); + } +- //Always assign pNdisPacket as NULL after clear ++ /*Always assign pNdisPacket as NULL after clear */ + pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket = NULL; + + pPacket = +@@ -572,7 +572,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_SUCCESS); + } +- //Always assign pNextNdisPacket as NULL after clear ++ /*Always assign pNextNdisPacket as NULL after clear */ + pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = + NULL; + } +@@ -586,7 +586,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + &pTxRing->TxDmaIdx); + NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); + +-// RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); ++/* RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); */ + } + + return bReschedule; +@@ -612,12 +612,12 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, + IN INT_SOURCE_CSR_STRUC TxRingBitmap) + { +-// UCHAR Count = 0; ++/* UCHAR Count = 0; */ + unsigned long IrqFlags; + BOOLEAN bReschedule = FALSE; + +- // Make sure Tx ring resource won't be used by other threads +- //NdisAcquireSpinLock(&pAd->TxRingLock); ++ /* Make sure Tx ring resource won't be used by other threads */ ++ /*NdisAcquireSpinLock(&pAd->TxRingLock); */ + + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); + +@@ -633,11 +633,11 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, + if (TxRingBitmap.field.Ac1DmaDone) + bReschedule |= RTMPFreeTXDUponTxDmaDone(pAd, QID_AC_BK); + +- // Make sure to release Tx ring resource +- //NdisReleaseSpinLock(&pAd->TxRingLock); ++ /* Make sure to release Tx ring resource */ ++ /*NdisReleaseSpinLock(&pAd->TxRingLock); */ + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + +- // Dequeue outgoing frames from TxSwQueue[] and process it ++ /* Dequeue outgoing frames from TxSwQueue[] and process it */ + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + + return bReschedule; +@@ -665,7 +665,7 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + { + PTXD_STRUC pTxD; + PNDIS_PACKET pPacket; +-// int i; ++/* int i; */ + UCHAR FREE = 0; + PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; + +@@ -789,15 +789,15 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + RTMP_SEM_LOCK(&pAd->RxRingLock); + + if (*pRxPending == 0) { +- // Get how may packets had been received ++ /* Get how may packets had been received */ + RTMP_IO_READ32(pAd, RX_DRX_IDX, &pAd->RxRing.RxDmaIdx); + + if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx) { +- // no more rx packets ++ /* no more rx packets */ + bReschedule = FALSE; + goto done; + } +- // get rx pending count ++ /* get rx pending count */ + if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx) + *pRxPending = + pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx; +@@ -810,17 +810,17 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + + pRxCell = &pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx]; + +- // Point to Rx indexed rx ring descriptor ++ /* Point to Rx indexed rx ring descriptor */ + pRxD = (PRXD_STRUC) pRxCell->AllocVa; + + if (pRxD->DDONE == 0) { + *pRxPending = 0; +- // DMAIndx had done but DDONE bit not ready ++ /* DMAIndx had done but DDONE bit not ready */ + bReschedule = TRUE; + goto done; + } + +- // return rx descriptor ++ /* return rx descriptor */ + NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE); + + pNewPacket = +@@ -828,7 +828,7 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + &AllocVa, &AllocPa); + + if (pNewPacket) { +- // unmap the rx buffer ++ /* unmap the rx buffer */ + PCI_UNMAP_SINGLE(pAd, pRxCell->DmaBuf.AllocPa, + pRxCell->DmaBuf.AllocSize, PCI_DMA_FROMDEVICE); + pRxPacket = pRxCell->pNdisPacket; +@@ -840,17 +840,17 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + /* update SDP0 to new buffer of rx packet */ + pRxD->SDP0 = AllocPa; + } else { +- //DBGPRINT(RT_DEBUG_TRACE,("No Rx Buffer\n")); ++ /*DBGPRINT(RT_DEBUG_TRACE,("No Rx Buffer\n")); */ + pRxPacket = NULL; + bReschedule = TRUE; + } + + pRxD->DDONE = 0; + +- // had handled one rx packet ++ /* had handled one rx packet */ + *pRxPending = *pRxPending - 1; + +- // update rx descriptor and kick rx ++ /* update rx descriptor and kick rx */ + INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE); + + pAd->RxRing.RxCpuIdx = +@@ -874,28 +874,28 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + PHEADER_802_11 pHeader_802_11; + BOOLEAN bAckRequired, bInsertTimestamp; + ULONG SrcBufPA; +- //UCHAR TxBufIdx; ++ /*UCHAR TxBufIdx; */ + UCHAR MlmeRate; + ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; + PTXWI_STRUC pFirstTxWI; +- //ULONG i; +- //HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. ++ /*ULONG i; */ ++ /*HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. */ + ULONG FreeNum; + MAC_TABLE_ENTRY *pMacEntry = NULL; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + + if (pSrcBufVA == NULL) { +- // The buffer shouldn't be NULL ++ /* The buffer shouldn't be NULL */ + return NDIS_STATUS_FAILURE; + } +- // Make sure MGMT ring resource won't be used by other threads +- //NdisAcquireSpinLock(&pAd->TxRingLock); ++ /* Make sure MGMT ring resource won't be used by other threads */ ++ /*NdisAcquireSpinLock(&pAd->TxRingLock); */ + + FreeNum = GET_TXRING_FREENO(pAd, QueIdx); + + if (FreeNum == 0) { +- //NdisReleaseSpinLock(&pAd->TxRingLock); ++ /*NdisReleaseSpinLock(&pAd->TxRingLock); */ + return NDIS_STATUS_FAILURE; + } + +@@ -905,13 +905,13 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + + if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) { + DBGPRINT(RT_DEBUG_OFF, ("MlmeHardTransmit Error\n")); +- //NdisReleaseSpinLock(&pAd->TxRingLock); ++ /*NdisReleaseSpinLock(&pAd->TxRingLock); */ + return NDIS_STATUS_FAILURE; + } + + { +- // outgoing frame always wakeup PHY to prevent frame lost +- // if (pAd->StaCfg.Psm == PWR_SAVE) ++ /* outgoing frame always wakeup PHY to prevent frame lost */ ++ /* if (pAd->StaCfg.Psm == PWR_SAVE) */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + AsicForceWakeup(pAd, TRUE); + } +@@ -928,18 +928,18 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL)) { + pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1); + } +- // Verify Mlme rate for a / g bands. +- if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band ++ /* Verify Mlme rate for a / g bands. */ ++ if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) /* 11A band */ + MlmeRate = RATE_6; + +- // +- // Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) +- // Snice it's been set to 0 while on MgtMacHeaderInit +- // By the way this will cause frame to be send on PWR_SAVE failed. +- // +- // +- // In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame +- // Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD ++ /* */ ++ /* Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE) */ ++ /* Snice it's been set to 0 while on MgtMacHeaderInit */ ++ /* By the way this will cause frame to be send on PWR_SAVE failed. */ ++ /* */ ++ /* */ ++ /* In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame */ ++ /* Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD */ + if (pHeader_802_11->FC.Type != BTYPE_DATA) { + if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) + || !(pAd->CommonCfg.bAPSDCapable +@@ -952,12 +952,12 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + } + + bInsertTimestamp = FALSE; +- if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL ++ if (pHeader_802_11->FC.Type == BTYPE_CNTL) /* must be PS-POLL */ + { + bAckRequired = FALSE; +- } else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame) ++ } else /* BTYPE_MGMT or BTYPE_DATA(must be NULL frame) */ + { +- if (pHeader_802_11->Addr1[0] & 0x01) // MULTICAST, BROADCAST ++ if (pHeader_802_11->Addr1[0] & 0x01) /* MULTICAST, BROADCAST */ + { + bAckRequired = FALSE; + pHeader_802_11->Duration = 0; +@@ -973,29 +973,29 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + pHeader_802_11->Sequence = pAd->Sequence++; + if (pAd->Sequence > 0xfff) + pAd->Sequence = 0; +- // Before radar detection done, mgmt frame can not be sent but probe req +- // Because we need to use probe req to trigger driver to send probe req in passive scan ++ /* Before radar detection done, mgmt frame can not be sent but probe req */ ++ /* Because we need to use probe req to trigger driver to send probe req in passive scan */ + if ((pHeader_802_11->FC.SubType != SUBTYPE_PROBE_REQ) + && (pAd->CommonCfg.bIEEE80211H == 1) + && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { + DBGPRINT(RT_DEBUG_ERROR, + ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); +- //NdisReleaseSpinLock(&pAd->TxRingLock); ++ /*NdisReleaseSpinLock(&pAd->TxRingLock); */ + return (NDIS_STATUS_FAILURE); + } +- // +- // fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET +- // should always has only one ohysical buffer, and the whole frame size equals +- // to the first scatter buffer size +- // +- +- // Initialize TX Descriptor +- // For inter-frame gap, the number is for this frame and next frame +- // For MLME rate, we will fix as 2Mb to match other vendor's implement +-// pAd->CommonCfg.MlmeTransmit.field.MODE = 1; +- +-// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. +- // Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. ++ /* */ ++ /* fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET */ ++ /* should always has only one ohysical buffer, and the whole frame size equals */ ++ /* to the first scatter buffer size */ ++ /* */ ++ ++ /* Initialize TX Descriptor */ ++ /* For inter-frame gap, the number is for this frame and next frame */ ++ /* For MLME rate, we will fix as 2Mb to match other vendor's implement */ ++/* pAd->CommonCfg.MlmeTransmit.field.MODE = 1; */ ++ ++/* management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not. */ ++ /* Only beacon use Nseq=TRUE. So here we use Nseq=FALSE. */ + if (pMacEntry == NULL) { + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, + FALSE, bAckRequired, FALSE, 0, RESERVED_WCID, +@@ -1013,7 +1013,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + + pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket; + pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL; +-// pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; ++/* pFirstTxWI->MPDUtotalByteCount = SrcBufLen - TXWI_SIZE; */ + SrcBufPA = + PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE); + +@@ -1028,14 +1028,14 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + +- // Increase TX_CTX_IDX, but write to register later. ++ /* Increase TX_CTX_IDX, but write to register later. */ + INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE); + + RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx * 0x10, + pAd->TxRing[QueIdx].TxCpuIdx); + +- // Make sure to release MGMT ring resource +-// NdisReleaseSpinLock(&pAd->TxRingLock); ++ /* Make sure to release MGMT ring resource */ ++/* NdisReleaseSpinLock(&pAd->TxRingLock); */ + + return NDIS_STATUS_SUCCESS; + } +@@ -1082,15 +1082,15 @@ VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, + IN PTXD_STRUC pTxD, + IN BOOLEAN bWIV, IN UCHAR QueueSEL) + { +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // ++ /* */ ++ /* Always use Long preamble before verifiation short preamble functionality works well. */ ++ /* Todo: remove the following line if short preamble functionality works */ ++ /* */ + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + + pTxD->WIV = (bWIV) ? 1 : 0; + pTxD->QSEL = (QueueSEL); +- //RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan +- //pTxD->QSEL= FIFO_EDCA; ++ /*RT2860c?? fixed using EDCA queue for test... We doubt Queue1 has problem. 2006-09-26 Jan */ ++ /*pTxD->QSEL= FIFO_EDCA; */ + pTxD->DMADONE = 0; + } +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +index fbcb3a3..da79fc0 100644 +--- a/drivers/staging/rt2860/common/cmm_data_usb.c ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -73,7 +73,7 @@ USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bIsLast, OUT USHORT * FreeNumber) + { + +- // Dummy function. Should be removed in the future. ++ /* Dummy function. Should be removed in the future. */ + return 0; + + } +@@ -83,7 +83,7 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + IN UCHAR fragNum, OUT USHORT * FreeNumber) + { + HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ USHORT hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ + UINT32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +@@ -94,9 +94,9 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + UINT32 USBDMApktLen = 0, DMAHdrLen, padding; + BOOLEAN TxQLastRound = FALSE; + +- // +- // get Tx Ring Resource & Dma Buffer address +- // ++ /* */ ++ /* get Tx Ring Resource & Dma Buffer address */ ++ /* */ + QueIdx = pTxBlk->QueIdx; + pHTTXContext = &pAd->TxContext[QueIdx]; + +@@ -106,12 +106,12 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + fillOffset = pHTTXContext->CurWritePosition; + + if (fragNum == 0) { +- // Check if we have enough space for this bulk-out batch. ++ /* Check if we have enough space for this bulk-out batch. */ + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); + if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + +- // Reserve space for 8 bytes padding. ++ /* Reserve space for 8 bytes padding. */ + if ((pHTTXContext->ENextBulkOutPosition == + pHTTXContext->CurWritePosition)) { + pHTTXContext->ENextBulkOutPosition += 8; +@@ -130,7 +130,7 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + return (Status); + } + } else { +- // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. ++ /* For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. */ + Status = + ((pHTTXContext->bCurWriting == + TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); +@@ -153,19 +153,19 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + pWirelessPacket = + &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; + +- // copy TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /* copy TXWI + WLAN Header + LLC into DMA Header Buffer */ ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + +- // Build our URB for USBD ++ /* Build our URB for USBD */ + DMAHdrLen = TXWI_SIZE + hwHdrLen; + USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; /* round up to 4 byte alignment */ + USBDMApktLen += padding; + + pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen); + +- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload ++ /* For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload */ + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, FIFO_EDCA, + FALSE /*NextValid */ , FALSE); + +@@ -189,25 +189,25 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + + NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); + +- // Zero the last padding. ++ /* Zero the last padding. */ + pWirelessPacket += pTxBlk->SrcBufLen; + NdisZeroMemory(pWirelessPacket, padding + 8); + + if (fragNum == pTxBlk->TotalFragNum) { + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- // Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame. ++ /* Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame. */ + pHTTXContext->CurWritePosition += pTxBlk->Priv; + if (TxQLastRound == TRUE) + pHTTXContext->CurWritePosition = 8; + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- // Finally, set bCurWriting as FALSE ++ /* Finally, set bCurWriting as FALSE */ + pHTTXContext->bCurWriting = FALSE; + + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- // succeed and release the skb buffer ++ /* succeed and release the skb buffer */ + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + } + +@@ -232,19 +232,19 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + UINT32 USBDMApktLen = 0, DMAHdrLen, padding; + BOOLEAN bTxQLastRound = FALSE; + +- // For USB, didn't need PCI_MAP_SINGLE() +- //SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE); ++ /* For USB, didn't need PCI_MAP_SINGLE() */ ++ /*SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE); */ + +- // +- // get Tx Ring Resource & Dma Buffer address +- // ++ /* */ ++ /* get Tx Ring Resource & Dma Buffer address */ ++ /* */ + QueIdx = pTxBlk->QueIdx; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + pHTTXContext = &pAd->TxContext[QueIdx]; + fillOffset = pHTTXContext->CurWritePosition; + +- // Check ring full. ++ /* Check ring full. */ + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); + if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; +@@ -252,7 +252,7 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); + pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + +- // Reserve space for 8 bytes padding. ++ /* Reserve space for 8 bytes padding. */ + if ((pHTTXContext->ENextBulkOutPosition == + pHTTXContext->CurWritePosition)) { + pHTTXContext->ENextBulkOutPosition += 8; +@@ -265,19 +265,19 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + &pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset]; + +- // copy TXWI + WLAN Header + LLC into DMA Header Buffer +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /* copy TXWI + WLAN Header + LLC into DMA Header Buffer */ ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + +- // Build our URB for USBD ++ /* Build our URB for USBD */ + DMAHdrLen = TXWI_SIZE + hwHdrLen; + USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; /* round up to 4 byte alignment */ + USBDMApktLen += padding; + + pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen); + +- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload ++ /* For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload */ + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, + FIFO_EDCA, FALSE /*NextValid */ , FALSE); + +@@ -290,16 +290,16 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + +- // We unlock it here to prevent the first 8 bytes maybe over-writed issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. +- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. ++ /* We unlock it here to prevent the first 8 bytes maybe over-writed issue. */ ++ /* 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext. */ ++ /* 2. An interrupt break our routine and handle bulk-out complete. */ ++ /* 3. In the bulk-out compllete, it need to do another bulk-out, */ ++ /* if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, */ ++ /* but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. */ ++ /* 4. Interrupt complete. */ ++ /* 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. */ ++ /* 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. */ ++ /* and the packet will wrong. */ + pHTTXContext->CurWriteRealPos += + (TXINFO_SIZE + TXWI_SIZE + hwHdrLen); + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); +@@ -321,7 +321,7 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + +- // succeed and release the skb buffer ++ /* succeed and release the skb buffer */ + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + + return (Status); +@@ -333,7 +333,7 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + IN UCHAR frameNum, OUT USHORT * FreeNumber) + { + HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length. ++ USHORT hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ + UINT32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +@@ -341,18 +341,18 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + UCHAR QueIdx; + NDIS_STATUS Status; + unsigned long IrqFlags; +- //UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ /*UINT32 USBDMApktLen = 0, DMAHdrLen, padding; */ + +- // +- // get Tx Ring Resource & Dma Buffer address +- // ++ /* */ ++ /* get Tx Ring Resource & Dma Buffer address */ ++ /* */ + QueIdx = pTxBlk->QueIdx; + pHTTXContext = &pAd->TxContext[QueIdx]; + + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + + if (frameNum == 0) { +- // Check if we have enough space for this bulk-out batch. ++ /* Check if we have enough space for this bulk-out batch. */ + Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext); + if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; +@@ -360,7 +360,7 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); + pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + +- // Reserve space for 8 bytes padding. ++ /* Reserve space for 8 bytes padding. */ + if ((pHTTXContext->ENextBulkOutPosition == + pHTTXContext->CurWritePosition)) { + +@@ -375,43 +375,43 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + &pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset]; + +- // +- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- // ++ /* */ ++ /* Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer */ ++ /* */ + if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; */ + hwHdrLen = + pTxBlk->MpduHeaderLen - + LENGTH_AMSDU_SUBFRAMEHEAD + + pTxBlk->HdrPadLen + + LENGTH_AMSDU_SUBFRAMEHEAD; + else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; */ + hwHdrLen = + pTxBlk->MpduHeaderLen - + LENGTH_ARALINK_HEADER_FIELD + + pTxBlk->HdrPadLen + + LENGTH_ARALINK_HEADER_FIELD; + else +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); ++ /*hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); */ + hwHdrLen = + pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; + +- // Update the pTxBlk->Priv. ++ /* Update the pTxBlk->Priv. */ + pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; + +- // pTxInfo->USBDMApktLen now just a temp value and will to correct latter. ++ /* pTxInfo->USBDMApktLen now just a temp value and will to correct latter. */ + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (pTxBlk->Priv), + FALSE, FIFO_EDCA, FALSE /*NextValid */ , + FALSE); + +- // Copy it. ++ /* Copy it. */ + NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, + pTxBlk->Priv); + pHTTXContext->CurWriteRealPos += pTxBlk->Priv; + pWirelessPacket += pTxBlk->Priv; + } +- } else { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. ++ } else { /* For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer. */ + + Status = + ((pHTTXContext->bCurWriting == +@@ -423,28 +423,28 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + &pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset]; + +- //hwHdrLen = pTxBlk->MpduHeaderLen; ++ /*hwHdrLen = pTxBlk->MpduHeaderLen; */ + NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, + pTxBlk->MpduHeaderLen); + pWirelessPacket += (pTxBlk->MpduHeaderLen); + pTxBlk->Priv += pTxBlk->MpduHeaderLen; +- } else { // It should not happened now unless we are going to shutdown. ++ } else { /* It should not happened now unless we are going to shutdown. */ + DBGPRINT(RT_DEBUG_ERROR, + ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n")); + Status = NDIS_STATUS_FAILURE; + } + } + +- // We unlock it here to prevent the first 8 bytes maybe over-write issue. +- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. +- // 2. An interrupt break our routine and handle bulk-out complete. +- // 3. In the bulk-out compllete, it need to do another bulk-out, +- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, +- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. +- // 4. Interrupt complete. +- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. +- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. +- // and the packet will wrong. ++ /* We unlock it here to prevent the first 8 bytes maybe over-write issue. */ ++ /* 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext. */ ++ /* 2. An interrupt break our routine and handle bulk-out complete. */ ++ /* 3. In the bulk-out compllete, it need to do another bulk-out, */ ++ /* if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition, */ ++ /* but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE. */ ++ /* 4. Interrupt complete. */ ++ /* 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext. */ ++ /* 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition. */ ++ /* and the packet will wrong. */ + RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); + + if (Status != NDIS_STATUS_SUCCESS) { +@@ -454,13 +454,13 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + pHTTXContext->NextBulkOutPosition)); + goto done; + } +- // Copy the frame content into DMA buffer and update the pTxBlk->Priv ++ /* Copy the frame content into DMA buffer and update the pTxBlk->Priv */ + NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen); + pWirelessPacket += pTxBlk->SrcBufLen; + pTxBlk->Priv += pTxBlk->SrcBufLen; + + done: +- // Release the skb buffer here ++ /* Release the skb buffer here */ + RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS); + + return (Status); +@@ -498,47 +498,47 @@ VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + (PUCHAR) (&pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset]); + +- // +- // Update TxInfo->USBDMApktLen , +- // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding +- // ++ /* */ ++ /* Update TxInfo->USBDMApktLen , */ ++ /* the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding */ ++ /* */ + pTxInfo = (PTXINFO_STRUC) (pWirelessPacket); + +- // Calculate the bulk-out padding ++ /* Calculate the bulk-out padding */ + USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE; +- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment ++ padding = (4 - (USBDMApktLen % 4)) & 0x03; /* round up to 4 byte alignment */ + USBDMApktLen += padding; + + pTxInfo->USBDMATxPktLen = USBDMApktLen; + +- // +- // Update TXWI->MPDUtotalByteCount , +- // the length = 802.11 header + payload_of_all_batch_frames ++ /* */ ++ /* Update TXWI->MPDUtotalByteCount , */ ++ /* the length = 802.11 header + payload_of_all_batch_frames */ + pTxWI = (PTXWI_STRUC) (pWirelessPacket + TXINFO_SIZE); + pTxWI->MPDUtotalByteCount = totalMPDUSize; + +- // +- // Update the pHTTXContext->CurWritePosition +- // ++ /* */ ++ /* Update the pHTTXContext->CurWritePosition */ ++ /* */ + pHTTXContext->CurWritePosition += (TXINFO_SIZE + USBDMApktLen); +- if ((pHTTXContext->CurWritePosition + 3906) > MAX_TXBULK_LIMIT) { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. ++ if ((pHTTXContext->CurWritePosition + 3906) > MAX_TXBULK_LIMIT) { /* Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame. */ + pHTTXContext->CurWritePosition = 8; + pTxInfo->SwUseLastRound = 1; + } + pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition; + +- // +- // Zero the last padding. +- // ++ /* */ ++ /* Zero the last padding. */ ++ /* */ + pWirelessPacket = + (&pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset + pTxBlk->Priv]); + NdisZeroMemory(pWirelessPacket, padding + 8); + +- // Finally, set bCurWriting as FALSE ++ /* Finally, set bCurWriting as FALSE */ + pHTTXContext->bCurWriting = FALSE; + +- } else { // It should not happened now unless we are going to shutdown. ++ } else { /* It should not happened now unless we are going to shutdown. */ + DBGPRINT(RT_DEBUG_ERROR, + ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n")); + } +@@ -550,7 +550,7 @@ VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, + IN UCHAR QueIdx, IN USHORT TxIdx) + { +- // DO nothing for USB. ++ /* DO nothing for USB. */ + } + + /* +@@ -589,22 +589,22 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + + pTxInfo = (PTXINFO_STRUC) (pSrcBufVA); + +- // Build our URB for USBD ++ /* Build our URB for USBD */ + BulkOutSize = SrcBufLen; + BulkOutSize = (BulkOutSize + 3) & (~3); + RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (BulkOutSize - TXINFO_SIZE), + TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + +- BulkOutSize += 4; // Always add 4 extra bytes at every packet. ++ BulkOutSize += 4; /* Always add 4 extra bytes at every packet. */ + +- // If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again. ++ /* If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again. */ + if ((BulkOutSize % pAd->BulkOutMaxPacketSize) == 0) + BulkOutSize += 4; + + padLen = BulkOutSize - SrcBufLen; + ASSERT((padLen <= RTMP_PKT_TAIL_PADDING)); + +- // Now memzero all extra padding bytes. ++ /* Now memzero all extra padding bytes. */ + pDest = (PUCHAR) (pSrcBufVA + SrcBufLen); + skb_put(GET_OS_PKT_TYPE(pPacket), padLen); + NdisZeroMemory(pDest, padLen); +@@ -615,28 +615,28 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + pMLMEContext->TransferBuffer = + (PTX_BUFFER) (GET_OS_PKT_DATAPTR(pPacket)); + +- // Length in TxInfo should be 8 less than bulkout size. ++ /* Length in TxInfo should be 8 less than bulkout size. */ + pMLMEContext->BulkOutSize = BulkOutSize; + pMLMEContext->InUse = TRUE; + pMLMEContext->bWaitingBulkOut = TRUE; + +- //for debug +- //hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize)); ++ /*for debug */ ++ /*hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize)); */ + +- //pAd->RalinkCounters.KickTxCount++; +- //pAd->RalinkCounters.OneSecTxDoneCount++; ++ /*pAd->RalinkCounters.KickTxCount++; */ ++ /*pAd->RalinkCounters.OneSecTxDoneCount++; */ + +- //if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE) +- // needKickOut = TRUE; ++ /*if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE) */ ++ /* needKickOut = TRUE; */ + +- // Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX ++ /* Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX */ + pAd->MgmtRing.TxSwFreeIdx--; + INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); + + RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags); + + RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); +- //if (needKickOut) ++ /*if (needKickOut) */ + RTUSBKickBulkOut(pAd); + + return 0; +@@ -654,7 +654,7 @@ VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, + + pNullContext = &(pAd->NullContext); + +- // Set the in use bit ++ /* Set the in use bit */ + pNullContext->InUse = TRUE; + pWirelessPkt = + (PUCHAR) & pNullContext->TransferBuffer->field. +@@ -677,14 +677,14 @@ VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, + pAd->NullContext.BulkOutSize = + TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + +- // Fill out frame length information for global Bulk out arbitor +- //pNullContext->BulkOutSize = TransferBufferLength; ++ /* Fill out frame length information for global Bulk out arbitor */ ++ /*pNullContext->BulkOutSize = TransferBufferLength; */ + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - send NULL Frame @%d Mbps...\n", + RateIdToMbps[pAd->CommonCfg.TxRate])); + RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL); + +- // Kick bulk out ++ /* Kick bulk out */ + RTUSBKickBulkOut(pAd); + } + +@@ -731,7 +731,7 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + } + + pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */ +- // The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding) ++ /* The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding) */ + ThisFrameLen = *pData + (*(pData + 1) << 8); + if (ThisFrameLen == 0) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -748,7 +748,7 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + goto label_null; + } + +- if ((ThisFrameLen + 8) > RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) ++ if ((ThisFrameLen + 8) > RxBufferLength) /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) */ + { + DBGPRINT(RT_DEBUG_TRACE, + ("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", +@@ -756,10 +756,10 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + pRxContext->BulkInOffset, RxBufferLength, + pAd->ReadPosition)); + +- // error frame. finish this loop ++ /* error frame. finish this loop */ + goto label_null; + } +- // skip USB frame length field ++ /* skip USB frame length field */ + pData += RT2870_RXDMALEN_FIELD_SIZE; + pRxWI = (PRXWI_STRUC) pData; + if (pRxWI->MPDUtotalByteCount > ThisFrameLen) { +@@ -769,7 +769,7 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + ThisFrameLen)); + goto label_null; + } +- // allocate a rx packet ++ /* allocate a rx packet */ + pSkb = dev_alloc_skb(ThisFrameLen); + if (pSkb == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -777,16 +777,16 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + __FUNCTION__)); + goto label_null; + } +- // copy the rx packet ++ /* copy the rx packet */ + memcpy(skb_put(pSkb, ThisFrameLen), pData, ThisFrameLen); + RTPKT_TO_OSPKT(pSkb)->dev = get_netdev_from_bssid(pAd, BSS0); + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS); + +- // copy RxD ++ /* copy RxD */ + *pSaveRxD = *(PRXINFO_STRUC) (pData + ThisFrameLen); + +- // update next packet read position. +- pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) ++ /* update next packet read position. */ ++ pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) */ + + return pSkb; + +@@ -824,9 +824,9 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + if (pRxINFO == NULL) + return (NDIS_STATUS_FAILURE); + +- // Phy errors & CRC errors ++ /* Phy errors & CRC errors */ + if (pRxINFO->Crc) { +- // Check RSSI for Noise Hist statistic collection. ++ /* Check RSSI for Noise Hist statistic collection. */ + dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) + pAd->StaCfg.RPIDensity[0] += 1; +@@ -847,25 +847,25 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + + return (NDIS_STATUS_FAILURE); + } +- // Add Rx size to channel load counter, we should ignore error counts ++ /* Add Rx size to channel load counter, we should ignore error counts */ + pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount + 14); + +- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics ++ /* Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics */ + if (pHeader->FC.ToDs) { + DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n")); + return NDIS_STATUS_FAILURE; + } +- // Paul 04-03 for OFDM Rx length issue ++ /* Paul 04-03 for OFDM Rx length issue */ + if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE) { + DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n")); + return NDIS_STATUS_FAILURE; + } +- // Drop not U2M frames, cant's drop here because we will drop beacon in this case +- // I am kind of doubting the U2M bit operation +- // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); ++ /* Drop not U2M frames, cant's drop here because we will drop beacon in this case */ ++ /* I am kind of doubting the U2M bit operation */ ++ /* if (pRxD->U2M == 0) */ ++ /* return(NDIS_STATUS_FAILURE); */ + +- // drop decyption fail frame ++ /* drop decyption fail frame */ + if (pRxINFO->Decrypted && pRxINFO->CipherErr) { + + if (((pRxINFO->CipherErr & 1) == 1) +@@ -879,9 +879,9 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, + pAd->MacTab.Content[BSSID_WCID]. + Addr, BSS0, 0); +- // +- // MIC Error +- // ++ /* */ ++ /* MIC Error */ ++ /* */ + if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss) { + pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; + RTMPReportMicError(pAd, pWpaKey); +@@ -892,9 +892,9 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == + CIPHER_AES) + && (pHeader->Sequence == pAd->FragFrame.Sequence)) { +- // +- // Acceptable since the First FragFrame no CipherErr problem. +- // ++ /* */ ++ /* Acceptable since the First FragFrame no CipherErr problem. */ ++ /* */ + return (NDIS_STATUS_SUCCESS); + } + +@@ -935,17 +935,17 @@ VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + IN USHORT TbttNumToNextWakeUp) + { + +- // we have decided to SLEEP, so at least do it for a BEACON period. ++ /* we have decided to SLEEP, so at least do it for a BEACON period. */ + if (TbttNumToNextWakeUp == 0) + TbttNumToNextWakeUp = 1; + + RTMPSetTimer(&pAd->Mlme.AutoWakeupTimer, AUTO_WAKEUP_TIMEOUT); + pAd->Mlme.AutoWakeupTimerRunning = TRUE; + +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us. ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); /* send POWER-SAVE command to MCU. Timeout 40us. */ + + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); + + } + +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index be01b07..610eb75 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -53,144 +53,144 @@ VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates) + + memset(&aryRates, 0x00, sizeof(NDIS_802_11_RATES)); + switch (pAdapter->CommonCfg.PhyMode) { +- case PHY_11A: // A only ++ case PHY_11A: /* A only */ + switch (Rates) { +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M ++ case 6000000: /*6M */ ++ aryRates[0] = 0x0c; /* 6M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_0; + break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M ++ case 9000000: /*9M */ ++ aryRates[0] = 0x12; /* 9M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_1; + break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M ++ case 12000000: /*12M */ ++ aryRates[0] = 0x18; /* 12M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_2; + break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M ++ case 18000000: /*18M */ ++ aryRates[0] = 0x24; /* 18M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_3; + break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M ++ case 24000000: /*24M */ ++ aryRates[0] = 0x30; /* 24M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_4; + break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M ++ case 36000000: /*36M */ ++ aryRates[0] = 0x48; /* 36M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_5; + break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M ++ case 48000000: /*48M */ ++ aryRates[0] = 0x60; /* 48M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_6; + break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M ++ case 54000000: /*54M */ ++ aryRates[0] = 0x6c; /* 54M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_7; + break; +- case -1: //Auto ++ case -1: /*Auto */ + default: +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x24; // 18M +- aryRates[5] = 0x18; // 12M +- aryRates[6] = 0x12; // 9M +- aryRates[7] = 0x0c; // 6M ++ aryRates[0] = 0x6c; /* 54Mbps */ ++ aryRates[1] = 0x60; /* 48Mbps */ ++ aryRates[2] = 0x48; /* 36Mbps */ ++ aryRates[3] = 0x30; /* 24Mbps */ ++ aryRates[4] = 0x24; /* 18M */ ++ aryRates[5] = 0x18; /* 12M */ ++ aryRates[6] = 0x12; /* 9M */ ++ aryRates[7] = 0x0c; /* 6M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_AUTO; + break; + } + break; +- case PHY_11BG_MIXED: // B/G Mixed +- case PHY_11B: // B only +- case PHY_11ABG_MIXED: // A/B/G Mixed ++ case PHY_11BG_MIXED: /* B/G Mixed */ ++ case PHY_11B: /* B only */ ++ case PHY_11ABG_MIXED: /* A/B/G Mixed */ + default: + switch (Rates) { +- case 1000000: //1M ++ case 1000000: /*1M */ + aryRates[0] = 0x02; + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_0; + break; +- case 2000000: //2M ++ case 2000000: /*2M */ + aryRates[0] = 0x04; + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_1; + break; +- case 5000000: //5.5M +- aryRates[0] = 0x0b; // 5.5M ++ case 5000000: /*5.5M */ ++ aryRates[0] = 0x0b; /* 5.5M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_2; + break; +- case 11000000: //11M +- aryRates[0] = 0x16; // 11M ++ case 11000000: /*11M */ ++ aryRates[0] = 0x16; /* 11M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_3; + break; +- case 6000000: //6M +- aryRates[0] = 0x0c; // 6M ++ case 6000000: /*6M */ ++ aryRates[0] = 0x0c; /* 6M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_0; + break; +- case 9000000: //9M +- aryRates[0] = 0x12; // 9M ++ case 9000000: /*9M */ ++ aryRates[0] = 0x12; /* 9M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_1; + break; +- case 12000000: //12M +- aryRates[0] = 0x18; // 12M ++ case 12000000: /*12M */ ++ aryRates[0] = 0x18; /* 12M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_2; + break; +- case 18000000: //18M +- aryRates[0] = 0x24; // 18M ++ case 18000000: /*18M */ ++ aryRates[0] = 0x24; /* 18M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_3; + break; +- case 24000000: //24M +- aryRates[0] = 0x30; // 24M ++ case 24000000: /*24M */ ++ aryRates[0] = 0x30; /* 24M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_4; + break; +- case 36000000: //36M +- aryRates[0] = 0x48; // 36M ++ case 36000000: /*36M */ ++ aryRates[0] = 0x48; /* 36M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_5; + break; +- case 48000000: //48M +- aryRates[0] = 0x60; // 48M ++ case 48000000: /*48M */ ++ aryRates[0] = 0x60; /* 48M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_6; + break; +- case 54000000: //54M +- aryRates[0] = 0x6c; // 54M ++ case 54000000: /*54M */ ++ aryRates[0] = 0x6c; /* 54M */ + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_7; + break; +- case -1: //Auto ++ case -1: /*Auto */ + default: +- if (pAdapter->CommonCfg.PhyMode == PHY_11B) { //B Only +- aryRates[0] = 0x16; // 11Mbps +- aryRates[1] = 0x0b; // 5.5Mbps +- aryRates[2] = 0x04; // 2Mbps +- aryRates[3] = 0x02; // 1Mbps +- } else { //(B/G) Mixed or (A/B/G) Mixed +- aryRates[0] = 0x6c; // 54Mbps +- aryRates[1] = 0x60; // 48Mbps +- aryRates[2] = 0x48; // 36Mbps +- aryRates[3] = 0x30; // 24Mbps +- aryRates[4] = 0x16; // 11Mbps +- aryRates[5] = 0x0b; // 5.5Mbps +- aryRates[6] = 0x04; // 2Mbps +- aryRates[7] = 0x02; // 1Mbps ++ if (pAdapter->CommonCfg.PhyMode == PHY_11B) { /*B Only */ ++ aryRates[0] = 0x16; /* 11Mbps */ ++ aryRates[1] = 0x0b; /* 5.5Mbps */ ++ aryRates[2] = 0x04; /* 2Mbps */ ++ aryRates[3] = 0x02; /* 1Mbps */ ++ } else { /*(B/G) Mixed or (A/B/G) Mixed */ ++ aryRates[0] = 0x6c; /* 54Mbps */ ++ aryRates[1] = 0x60; /* 48Mbps */ ++ aryRates[2] = 0x48; /* 36Mbps */ ++ aryRates[3] = 0x30; /* 24Mbps */ ++ aryRates[4] = 0x16; /* 11Mbps */ ++ aryRates[5] = 0x0b; /* 5.5Mbps */ ++ aryRates[6] = 0x04; /* 2Mbps */ ++ aryRates[7] = 0x02; /* 1Mbps */ + } + pAdapter->StaCfg.DesiredTransmitSetting.field.MCS = + MCS_AUTO; +@@ -213,7 +213,7 @@ VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates) + pAdapter->CommonCfg.DesireRate[5], + pAdapter->CommonCfg.DesireRate[6], + pAdapter->CommonCfg.DesireRate[7])); +- // Changing DesiredRate may affect the MAX TX rate we used to TX frames out ++ /* Changing DesiredRate may affect the MAX TX rate we used to TX frames out */ + MlmeUpdateTxRates(pAdapter, FALSE, 0); + } + +@@ -244,20 +244,20 @@ VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + ("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", + pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus)); + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +- // For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after +- // Link up. And it will be replaced if user changed it. ++ /* For WEP/CKIP, there is no need to remove it, since WinXP won't set it again after */ ++ /* Link up. And it will be replaced if user changed it. */ + if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) + return; + +- // For WPA-None, there is no need to remove it, since WinXP won't set it again after +- // Link up. And it will be replaced if user changed it. ++ /* For WPA-None, there is no need to remove it, since WinXP won't set it again after */ ++ /* Link up. And it will be replaced if user changed it. */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) + return; + +- // set BSSID wcid entry of the Pair-wise Key table as no-security mode ++ /* set BSSID wcid entry of the Pair-wise Key table as no-security mode */ + AsicRemovePairwiseKeyEntry(pAd, BSS0, BSSID_WCID); + +- // set all shared key mode as no-security. ++ /* set all shared key mode as no-security. */ + for (i = 0; i < SHARE_KEY_NUM; i++) { + DBGPRINT(RT_DEBUG_TRACE, + ("remove %s key #%d\n", +@@ -310,9 +310,9 @@ VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + { + INT i; +- // the selected phymode must be supported by the RF IC encoded in E2PROM ++ /* the selected phymode must be supported by the RF IC encoded in E2PROM */ + +- // if no change, do nothing ++ /* if no change, do nothing */ + /* bug fix + if (pAd->CommonCfg.PhyMode == phymode) + return; +@@ -325,7 +325,7 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + + BuildChannelList(pAd); + +- // sanity check user setting ++ /* sanity check user setting */ + for (i = 0; i < pAd->ChannelListNum; i++) { + if (pAd->CommonCfg.Channel == pAd->ChannelList[i].Channel) + break; +@@ -343,17 +343,17 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + NdisZeroMemory(pAd->CommonCfg.DesireRate, MAX_LEN_OF_SUPPORTED_RATES); + switch (phymode) { + case PHY_11B: +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate ++ pAd->CommonCfg.SupRate[0] = 0x82; /* 1 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[1] = 0x84; /* 2 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[2] = 0x8B; /* 5.5 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[3] = 0x96; /* 11 mbps, in units of 0.5 Mbps, basic rate */ + pAd->CommonCfg.SupRateLen = 4; + pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use ++ pAd->CommonCfg.DesireRate[0] = 2; /* 1 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[1] = 4; /* 2 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[2] = 11; /* 5.5 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[3] = 22; /* 11 mbps, in units of 0.5 Mbps */ ++ /*pAd->CommonCfg.HTPhyMode.field.MODE = MODE_CCK; // This MODE is only FYI. not use */ + break; + + case PHY_11G: +@@ -363,57 +363,57 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + case PHY_11ABGN_MIXED: + case PHY_11BGN_MIXED: + case PHY_11GN_MIXED: +- pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x96; // 11 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[4] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[5] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[0] = 0x82; /* 1 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[1] = 0x84; /* 2 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[2] = 0x8B; /* 5.5 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[3] = 0x96; /* 11 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[4] = 0x12; /* 9 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[5] = 0x24; /* 18 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[6] = 0x48; /* 36 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[7] = 0x6c; /* 54 mbps, in units of 0.5 Mbps */ + pAd->CommonCfg.SupRateLen = 8; +- pAd->CommonCfg.ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[1] = 0x18; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[2] = 0x30; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.ExtRate[3] = 0x60; // 48 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.ExtRate[0] = 0x0C; /* 6 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.ExtRate[1] = 0x18; /* 12 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.ExtRate[2] = 0x30; /* 24 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.ExtRate[3] = 0x60; /* 48 mbps, in units of 0.5 Mbps */ + pAd->CommonCfg.ExtRateLen = 4; +- pAd->CommonCfg.DesireRate[0] = 2; // 1 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 4; // 2 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 11; // 5.5 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 22; // 11 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[8] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[9] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[10] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[11] = 108; // 54 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.DesireRate[0] = 2; /* 1 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[1] = 4; /* 2 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[2] = 11; /* 5.5 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[3] = 22; /* 11 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[4] = 12; /* 6 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[5] = 18; /* 9 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[6] = 24; /* 12 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[7] = 36; /* 18 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[8] = 48; /* 24 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[9] = 72; /* 36 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[10] = 96; /* 48 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[11] = 108; /* 54 mbps, in units of 0.5 Mbps */ + break; + + case PHY_11A: + case PHY_11AN_MIXED: + case PHY_11AGN_MIXED: + case PHY_11N_5G: +- pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- pAd->CommonCfg.SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ pAd->CommonCfg.SupRate[0] = 0x8C; /* 6 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[1] = 0x12; /* 9 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[2] = 0x98; /* 12 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[3] = 0x24; /* 18 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[4] = 0xb0; /* 24 mbps, in units of 0.5 Mbps, basic rate */ ++ pAd->CommonCfg.SupRate[5] = 0x48; /* 36 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[6] = 0x60; /* 48 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.SupRate[7] = 0x6c; /* 54 mbps, in units of 0.5 Mbps */ + pAd->CommonCfg.SupRateLen = 8; + pAd->CommonCfg.ExtRateLen = 0; +- pAd->CommonCfg.DesireRate[0] = 12; // 6 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[1] = 18; // 9 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[2] = 24; // 12 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[3] = 36; // 18 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[4] = 48; // 24 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[5] = 72; // 36 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[6] = 96; // 48 mbps, in units of 0.5 Mbps +- pAd->CommonCfg.DesireRate[7] = 108; // 54 mbps, in units of 0.5 Mbps +- //pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use ++ pAd->CommonCfg.DesireRate[0] = 12; /* 6 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[1] = 18; /* 9 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[2] = 24; /* 12 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[3] = 36; /* 18 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[4] = 48; /* 24 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[5] = 72; /* 36 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[6] = 96; /* 48 mbps, in units of 0.5 Mbps */ ++ pAd->CommonCfg.DesireRate[7] = 108; /* 54 mbps, in units of 0.5 Mbps */ ++ /*pAd->CommonCfg.HTPhyMode.field.MODE = MODE_OFDM; // This MODE is only FYI. not use */ + break; + + default: +@@ -437,7 +437,7 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + */ + VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + { +- //ULONG *pmcs; ++ /*ULONG *pmcs; */ + UINT32 Value = 0; + UCHAR BBPValue = 0; + UCHAR BBP3Value = 0; +@@ -448,7 +448,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + pHTPhyMode->HtMode, pHTPhyMode->ExtOffset, pHTPhyMode->MCS, + pHTPhyMode->BW, pHTPhyMode->STBC, pHTPhyMode->SHORTGI)); + +- // Don't zero supportedHyPhy structure. ++ /* Don't zero supportedHyPhy structure. */ + RTMPZeroMemory(&pAd->CommonCfg.HtCapability, + sizeof(pAd->CommonCfg.HtCapability)); + RTMPZeroMemory(&pAd->CommonCfg.AddHTInfo, +@@ -473,7 +473,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + ("RTMPSetHT : RxBAWinLimit = %d\n", + pAd->CommonCfg.BACapability.field.RxBAWinLimit)); + +- // Mimo power save, A-MSDU size, ++ /* Mimo power save, A-MSDU size, */ + pAd->CommonCfg.DesiredHtPhy.AmsduEnable = + (USHORT) pAd->CommonCfg.BACapability.field.AmsduEnable; + pAd->CommonCfg.DesiredHtPhy.AmsduSize = +@@ -503,7 +503,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + } else + pAd->CommonCfg.DesiredHtPhy.GF = 0; + +- // Decide Rx MCSSet ++ /* Decide Rx MCSSet */ + switch (RxStream) { + case 1: + pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; +@@ -515,7 +515,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; + break; + +- case 3: // 3*3 ++ case 3: /* 3*3 */ + pAd->CommonCfg.HtCapability.MCSSet[0] = 0xff; + pAd->CommonCfg.HtCapability.MCSSet[1] = 0xff; + pAd->CommonCfg.HtCapability.MCSSet[2] = 0xff; +@@ -529,7 +529,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + } + + if (pHTPhyMode->BW == BW_40) { +- pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; // MCS 32 ++ pAd->CommonCfg.HtCapability.MCSSet[4] = 0x1; /* MCS 32 */ + pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth = 1; + if (pAd->CommonCfg.Channel <= 14) + pAd->CommonCfg.HtCapability.HtCapInfo.CCKmodein40 = 1; +@@ -539,7 +539,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = + (pHTPhyMode->ExtOffset == + EXTCHA_BELOW) ? (EXTCHA_BELOW) : EXTCHA_ABOVE; +- // Set Regsiter for extension channel position. ++ /* Set Regsiter for extension channel position. */ + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBP3Value); + if ((pHTPhyMode->ExtOffset == EXTCHA_BELOW)) { +@@ -551,8 +551,8 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + BBP3Value &= (~0x20); + RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value); + } +- // Turn on BBP 40MHz mode now only as AP . +- // Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection. ++ /* Turn on BBP 40MHz mode now only as AP . */ ++ /* Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection. */ + if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd) + ) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +@@ -569,7 +569,7 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0; + pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = EXTCHA_NONE; + pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel; +- // Turn on BBP 20MHz mode by request here. ++ /* Turn on BBP 20MHz mode by request here. */ + { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); +@@ -600,12 +600,12 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + pAd->CommonCfg.DesiredHtPhy.ShortGIfor40 = 0; + } + +- // We support link adaptation for unsolicit MCS feedback, set to 2. +- pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT; ++ /* We support link adaptation for unsolicit MCS feedback, set to 2. */ ++ pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; /*MCSFBK_UNSOLICIT; */ + pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel; +- // 1, the extension channel above the control channel. ++ /* 1, the extension channel above the control channel. */ + +- // EDCA parameters used for AP's own transmission ++ /* EDCA parameters used for AP's own transmission */ + if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) { + pAd->CommonCfg.APEdcaParm.bValid = TRUE; + pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; +@@ -659,7 +659,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo; + DesiredMcs = + pAd->StaCfg.DesiredTransmitSetting.field.MCS; +- //pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; ++ /*pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE; */ + break; + } + } while (FALSE); +@@ -673,7 +673,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs)); +- // Check the validity of MCS ++ /* Check the validity of MCS */ + if ((TxStream == 1) + && ((DesiredMcs >= MCS_8) && (DesiredMcs <= MCS_15))) { + DBGPRINT(RT_DEBUG_WARN, +@@ -691,7 +691,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + + pDesired_ht_phy->bHtEnable = TRUE; + +- // Decide desired Tx MCS ++ /* Decide desired Tx MCS */ + switch (TxStream) { + case 1: + if (DesiredMcs == MCS_AUTO) { +@@ -717,7 +717,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + } + break; + +- case 3: // 3*3 ++ case 3: /* 3*3 */ + if (DesiredMcs == MCS_AUTO) { + /* MCS0 ~ MCS23, 3 bytes */ + pDesired_ht_phy->MCSSet[0] = 0xff; +@@ -738,7 +738,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + if (DesiredMcs == MCS_AUTO || DesiredMcs == MCS_32) + pDesired_ht_phy->MCSSet[4] = 0x1; + } +- // update HT Rate setting ++ /* update HT Rate setting */ + if (pAd->OpMode == OPMODE_STA) + MlmeUpdateHtTxRates(pAd, BSS0); + else +@@ -778,7 +778,7 @@ VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, + pAddHtInfo->AddHtInfo.RecomWidth = pRtHt->RecomWidth; + pAddHtInfo->AddHtInfo2.OperaionMode = pRtHt->OperaionMode; + pAddHtInfo->AddHtInfo2.NonGfPresent = pRtHt->NonGfPresent; +- RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet */ pMcsSet, 4); // rt2860 only support MCS max=32, no need to copy all 16 uchar. ++ RTMPMoveMemory(pAddHtInfo->MCSSet, /*pRtHt->MCSSet */ pMcsSet, 4); /* rt2860 only support MCS max=32, no need to copy all 16 uchar. */ + + DBGPRINT(RT_DEBUG_TRACE, ("RTMPUpdateHTIE <== \n")); + } +@@ -808,9 +808,9 @@ VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, + BssIdx)); + return; + } +- // 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. +- // 2. In Infra mode, the AID:1 MUST be wcid of infra STA. +- // the AID:2~ assign to mesh link entry. ++ /* 1. In ADHOC mode, the AID is wcid number. And NO mesh link exists. */ ++ /* 2. In Infra mode, the AID:1 MUST be wcid of infra STA. */ ++ /* the AID:2~ assign to mesh link entry. */ + if (pEntry) + Wcid = pEntry->Aid; + else +@@ -818,7 +818,7 @@ VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, + } + } + +- // Update WCID attribute table ++ /* Update WCID attribute table */ + offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); + + { +@@ -830,26 +830,26 @@ VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, + + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); + +- // Update IV/EIV table ++ /* Update IV/EIV table */ + offset = MAC_IVEIV_TABLE_BASE + (Wcid * HW_IVEIV_ENTRY_SIZE); + +- // WPA mode ++ /* WPA mode */ + if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) + || (CipherAlg == CIPHER_AES)) { +- // Eiv bit on. keyid always is 0 for pairwise key ++ /* Eiv bit on. keyid always is 0 for pairwise key */ + IVEIV = (KeyIdx << 6) | 0x20; + } else { +- // WEP KeyIdx is default tx key. ++ /* WEP KeyIdx is default tx key. */ + IVEIV = (KeyIdx << 6); + } + +- // For key index and ext IV bit, so only need to update the position(offset+3). ++ /* For key index and ext IV bit, so only need to update the position(offset+3). */ + #ifdef RTMP_MAC_PCI + RTMP_IO_WRITE8(pAd, offset + 3, IVEIV); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBMultiWrite_OneByte(pAd, offset + 3, &IVEIV); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n", +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index c920925..3b6f577 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -61,23 +61,23 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + PRTMP_TX_RING pTxRing; + PRTMP_DMABUF pDmaBuf; + PNDIS_PACKET pPacket; +-// PRTMP_REORDERBUF pReorderBuf; ++/* PRTMP_REORDERBUF pReorderBuf; */ + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); + do { +- // +- // Allocate all ring descriptors, include TxD, RxD, MgmtD. +- // Although each size is different, to prevent cacheline and alignment +- // issue, I intentional set them all to 64 bytes. +- // ++ /* */ ++ /* Allocate all ring descriptors, include TxD, RxD, MgmtD. */ ++ /* Although each size is different, to prevent cacheline and alignment */ ++ /* issue, I intentional set them all to 64 bytes. */ ++ /* */ + for (num = 0; num < NUM_OF_TX_RING; num++) { + ULONG BufBasePaHigh; + ULONG BufBasePaLow; + PVOID BufBaseVa; + +- // +- // Allocate Tx ring descriptor's memory (5 TX rings = 4 ACs + 1 HCCA) +- // ++ /* */ ++ /* Allocate Tx ring descriptor's memory (5 TX rings = 4 ACs + 1 HCCA) */ ++ /* */ + pAd->TxDescRing[num].AllocSize = + TX_RING_SIZE * TXD_SIZE; + RTMP_AllocateTxDescMemory(pAd, num, +@@ -93,11 +93,11 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Status = NDIS_STATUS_RESOURCES; + break; + } +- // Zero init this memory block ++ /* Zero init this memory block */ + NdisZeroMemory(pAd->TxDescRing[num].AllocVa, + pAd->TxDescRing[num].AllocSize); + +- // Save PA & VA for further operation ++ /* Save PA & VA for further operation */ + RingBasePaHigh = + RTMP_GetPhysicalAddressHigh(pAd->TxDescRing[num]. + AllocPa); +@@ -106,9 +106,9 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + AllocPa); + RingBaseVa = pAd->TxDescRing[num].AllocVa; + +- // +- // Allocate all 1st TXBuf's memory for this TxRing +- // ++ /* */ ++ /* Allocate all 1st TXBuf's memory for this TxRing */ ++ /* */ + pAd->TxBufSpace[num].AllocSize = + TX_RING_SIZE * TX_DMA_1ST_BUFFER_SIZE; + RTMP_AllocateFirstTxBuffer(pAd, num, +@@ -125,11 +125,11 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Status = NDIS_STATUS_RESOURCES; + break; + } +- // Zero init this memory block ++ /* Zero init this memory block */ + NdisZeroMemory(pAd->TxBufSpace[num].AllocVa, + pAd->TxBufSpace[num].AllocSize); + +- // Save PA & VA for further operation ++ /* Save PA & VA for further operation */ + BufBasePaHigh = + RTMP_GetPhysicalAddressHigh(pAd->TxBufSpace[num]. + AllocPa); +@@ -138,14 +138,14 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + AllocPa); + BufBaseVa = pAd->TxBufSpace[num].AllocVa; + +- // +- // Initialize Tx Ring Descriptor and associated buffer memory +- // ++ /* */ ++ /* Initialize Tx Ring Descriptor and associated buffer memory */ ++ /* */ + pTxRing = &pAd->TxRing[num]; + for (index = 0; index < TX_RING_SIZE; index++) { + pTxRing->Cell[index].pNdisPacket = NULL; + pTxRing->Cell[index].pNextNdisPacket = NULL; +- // Init Tx Ring Size, Va, Pa variables ++ /* Init Tx Ring Size, Va, Pa variables */ + pTxRing->Cell[index].AllocSize = TXD_SIZE; + pTxRing->Cell[index].AllocVa = RingBaseVa; + RTMP_SetPhysicalAddressHigh(pTxRing-> +@@ -155,7 +155,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + AllocPa, + RingBasePaLow); + +- // Setup Tx Buffer size & address. only 802.11 header will store in this space ++ /* Setup Tx Buffer size & address. only 802.11 header will store in this space */ + pDmaBuf = &pTxRing->Cell[index].DmaBuf; + pDmaBuf->AllocSize = TX_DMA_1ST_BUFFER_SIZE; + pDmaBuf->AllocVa = BufBaseVa; +@@ -164,16 +164,16 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RTMP_SetPhysicalAddressLow(pDmaBuf->AllocPa, + BufBasePaLow); + +- // link the pre-allocated TxBuf to TXD ++ /* link the pre-allocated TxBuf to TXD */ + pTxD = + (PTXD_STRUC) pTxRing->Cell[index].AllocVa; + pTxD->SDPtr0 = BufBasePaLow; +- // advance to next ring descriptor address ++ /* advance to next ring descriptor address */ + pTxD->DMADONE = 1; + RingBasePaLow += TXD_SIZE; + RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; + +- // advance to next TxBuf address ++ /* advance to next TxBuf address */ + BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; + BufBaseVa = + (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; +@@ -185,9 +185,9 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + if (Status == NDIS_STATUS_RESOURCES) + break; + +- // +- // Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler +- // ++ /* */ ++ /* Allocate MGMT ring descriptor's memory except Tx ring which allocated eariler */ ++ /* */ + pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * TXD_SIZE; + RTMP_AllocateMgmtDescMemory(pAd, + pAd->MgmtDescRing.AllocSize, +@@ -201,24 +201,24 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Status = NDIS_STATUS_RESOURCES; + break; + } +- // Zero init this memory block ++ /* Zero init this memory block */ + NdisZeroMemory(pAd->MgmtDescRing.AllocVa, + pAd->MgmtDescRing.AllocSize); + +- // Save PA & VA for further operation ++ /* Save PA & VA for further operation */ + RingBasePaHigh = + RTMP_GetPhysicalAddressHigh(pAd->MgmtDescRing.AllocPa); + RingBasePaLow = + RTMP_GetPhysicalAddressLow(pAd->MgmtDescRing.AllocPa); + RingBaseVa = pAd->MgmtDescRing.AllocVa; + +- // +- // Initialize MGMT Ring and associated buffer memory +- // ++ /* */ ++ /* Initialize MGMT Ring and associated buffer memory */ ++ /* */ + for (index = 0; index < MGMT_RING_SIZE; index++) { + pAd->MgmtRing.Cell[index].pNdisPacket = NULL; + pAd->MgmtRing.Cell[index].pNextNdisPacket = NULL; +- // Init MGMT Ring Size, Va, Pa variables ++ /* Init MGMT Ring Size, Va, Pa variables */ + pAd->MgmtRing.Cell[index].AllocSize = TXD_SIZE; + pAd->MgmtRing.Cell[index].AllocVa = RingBaseVa; + RTMP_SetPhysicalAddressHigh(pAd->MgmtRing.Cell[index]. +@@ -226,22 +226,22 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RTMP_SetPhysicalAddressLow(pAd->MgmtRing.Cell[index]. + AllocPa, RingBasePaLow); + +- // Offset to next ring descriptor address ++ /* Offset to next ring descriptor address */ + RingBasePaLow += TXD_SIZE; + RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; + +- // link the pre-allocated TxBuf to TXD ++ /* link the pre-allocated TxBuf to TXD */ + pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; + pTxD->DMADONE = 1; + +- // no pre-allocated buffer required in MgmtRing for scatter-gather case ++ /* no pre-allocated buffer required in MgmtRing for scatter-gather case */ + } + DBGPRINT(RT_DEBUG_TRACE, + ("MGMT Ring: total %d entry allocated\n", index)); + +- // +- // Allocate RX ring descriptor's memory except Tx ring which allocated eariler +- // ++ /* */ ++ /* Allocate RX ring descriptor's memory except Tx ring which allocated eariler */ ++ /* */ + pAd->RxDescRing.AllocSize = RX_RING_SIZE * RXD_SIZE; + RTMP_AllocateRxDescMemory(pAd, + pAd->RxDescRing.AllocSize, +@@ -255,7 +255,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Status = NDIS_STATUS_RESOURCES; + break; + } +- // Zero init this memory block ++ /* Zero init this memory block */ + NdisZeroMemory(pAd->RxDescRing.AllocVa, + pAd->RxDescRing.AllocSize); + +@@ -263,18 +263,18 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + ("RX DESC %p size = %ld\n", pAd->RxDescRing.AllocVa, + pAd->RxDescRing.AllocSize)); + +- // Save PA & VA for further operation ++ /* Save PA & VA for further operation */ + RingBasePaHigh = + RTMP_GetPhysicalAddressHigh(pAd->RxDescRing.AllocPa); + RingBasePaLow = + RTMP_GetPhysicalAddressLow(pAd->RxDescRing.AllocPa); + RingBaseVa = pAd->RxDescRing.AllocVa; + +- // +- // Initialize Rx Ring and associated buffer memory +- // ++ /* */ ++ /* Initialize Rx Ring and associated buffer memory */ ++ /* */ + for (index = 0; index < RX_RING_SIZE; index++) { +- // Init RX Ring Size, Va, Pa variables ++ /* Init RX Ring Size, Va, Pa variables */ + pAd->RxRing.Cell[index].AllocSize = RXD_SIZE; + pAd->RxRing.Cell[index].AllocVa = RingBaseVa; + RTMP_SetPhysicalAddressHigh(pAd->RxRing.Cell[index]. +@@ -282,13 +282,13 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RTMP_SetPhysicalAddressLow(pAd->RxRing.Cell[index]. + AllocPa, RingBasePaLow); + +- //NdisZeroMemory(RingBaseVa, RXD_SIZE); ++ /*NdisZeroMemory(RingBaseVa, RXD_SIZE); */ + +- // Offset to next ring descriptor address ++ /* Offset to next ring descriptor address */ + RingBasePaLow += RXD_SIZE; + RingBaseVa = (PUCHAR) RingBaseVa + RXD_SIZE; + +- // Setup Rx associated Buffer size & allocate share memory ++ /* Setup Rx associated Buffer size & allocate share memory */ + pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; + pDmaBuf->AllocSize = RX_BUFFER_AGGRESIZE; + pPacket = RTMP_AllocateRxPacketBuffer(pAd, +@@ -301,17 +301,17 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + /* keep allocated rx packet */ + pAd->RxRing.Cell[index].pNdisPacket = pPacket; + +- // Error handling ++ /* Error handling */ + if (pDmaBuf->AllocVa == NULL) { + ErrorValue = ERRLOG_OUT_OF_SHARED_MEMORY; + DBGPRINT_ERR(("Failed to allocate RxRing's 1st buffer\n")); + Status = NDIS_STATUS_RESOURCES; + break; + } +- // Zero init this memory block ++ /* Zero init this memory block */ + NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); + +- // Write RxD buffer address & allocated buffer length ++ /* Write RxD buffer address & allocated buffer length */ + pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; + pRxD->SDP0 = + RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); +@@ -333,12 +333,12 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + } + + if (Status != NDIS_STATUS_SUCCESS) { +- // Log error inforamtion ++ /* Log error inforamtion */ + NdisWriteErrorLogEntry(pAd->AdapterHandle, + NDIS_ERROR_CODE_OUT_OF_RESOURCES, + 1, ErrorValue); + } +- // Following code segment get from original func:NICInitTxRxRingAndBacklogQueue(), now should integrate it to here. ++ /* Following code segment get from original func:NICInitTxRxRingAndBacklogQueue(), now should integrate it to here. */ + { + DBGPRINT(RT_DEBUG_TRACE, + ("--> NICInitTxRxRingAndBacklogQueue\n")); +@@ -351,21 +351,21 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + */ + +- // Initialize all transmit related software queues ++ /* Initialize all transmit related software queues */ + for (index = 0; index < NUM_OF_TX_RING; index++) { + InitializeQueueHeader(&pAd->TxSwQueue[index]); +- // Init TX rings index pointer ++ /* Init TX rings index pointer */ + pAd->TxRing[index].TxSwFreeIdx = 0; + pAd->TxRing[index].TxCpuIdx = 0; +- //RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TX_CTX_IDX); ++ /*RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TX_CTX_IDX); */ + } + +- // Init RX Ring index pointer ++ /* Init RX Ring index pointer */ + pAd->RxRing.RxSwReadIdx = 0; + pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; +- //RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RX_CRX_IDX0); ++ /*RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RX_CRX_IDX0); */ + +- // init MGMT ring index pointer ++ /* init MGMT ring index pointer */ + pAd->MgmtRing.TxSwFreeIdx = 0; + pAd->MgmtRing.TxCpuIdx = 0; + +@@ -409,7 +409,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + int i; + PRTMP_TX_RING pTxRing; + unsigned long IrqFlags; +- //UINT32 RxSwReadIdx; ++ /*UINT32 RxSwReadIdx; */ + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, +@@ -423,13 +423,13 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + pTxRing = &pAd->TxRing[RingType]; + + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +- // We have to clean all descriptors in case some error happened with reset +- for (i = 0; i < TX_RING_SIZE; i++) // We have to scan all TX ring ++ /* We have to clean all descriptors in case some error happened with reset */ ++ for (i = 0; i < TX_RING_SIZE; i++) /* We have to scan all TX ring */ + { + pTxD = (PTXD_STRUC) pTxRing->Cell[i].AllocVa; + + pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; +- // release scatter-and-gather NDIS_PACKET ++ /* release scatter-and-gather NDIS_PACKET */ + if (pPacket) { + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_FAILURE); +@@ -438,7 +438,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + + pPacket = + (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET ++ /* release scatter-and-gather NDIS_PACKET */ + if (pPacket) { + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_FAILURE); +@@ -467,7 +467,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + break; + + case QID_MGMT: +- // We have to clean all descriptors in case some error happened with reset ++ /* We have to clean all descriptors in case some error happened with reset */ + NdisAcquireSpinLock(&pAd->MgmtRingLock); + + for (i = 0; i < MGMT_RING_SIZE; i++) { +@@ -475,7 +475,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + + pPacket = + (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; +- // rlease scatter-and-gather NDIS_PACKET ++ /* rlease scatter-and-gather NDIS_PACKET */ + if (pPacket) { + PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, + pTxD->SDLen0, +@@ -488,7 +488,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + pPacket = + (PNDIS_PACKET) pAd->MgmtRing.Cell[i]. + pNextNdisPacket; +- // release scatter-and-gather NDIS_PACKET ++ /* release scatter-and-gather NDIS_PACKET */ + if (pPacket) { + PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, + pTxD->SDLen1, +@@ -510,7 +510,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + break; + + case QID_RX: +- // We have to clean all descriptors in case some error happened with reset ++ /* We have to clean all descriptors in case some error happened with reset */ + NdisAcquireSpinLock(&pAd->RxRingLock); + + for (i = 0; i < RX_RING_SIZE; i++) { +@@ -541,11 +541,11 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + PNDIS_PACKET pPacket; + unsigned int IrqFlags; + +- //POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; ++ /*POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; */ + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); + +- // Free TxSwQueue Packet ++ /* Free TxSwQueue Packet */ + for (index = 0; index < NUM_OF_TX_RING; index++) { + PQUEUE_ENTRY pEntry; + PNDIS_PACKET pPacket; +@@ -561,7 +561,7 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); + } + +- // Free Tx Ring Packet ++ /* Free Tx Ring Packet */ + for (index = 0; index < NUM_OF_TX_RING; index++) { + pTxRing = &pAd->TxRing[index]; + +@@ -576,7 +576,7 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_SUCCESS); + } +- //Always assign pNdisPacket as NULL after clear ++ /*Always assign pNdisPacket as NULL after clear */ + pTxRing->Cell[j].pNdisPacket = NULL; + + pPacket = pTxRing->Cell[j].pNextNdisPacket; +@@ -588,7 +588,7 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_SUCCESS); + } +- //Always assign pNextNdisPacket as NULL after clear ++ /*Always assign pNextNdisPacket as NULL after clear */ + pTxRing->Cell[pTxRing->TxSwFreeIdx].pNextNdisPacket = + NULL; + +@@ -729,7 +729,7 @@ BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command) + i = 0; + do { + RTMP_IO_READ32(pAd, H2M_MAILBOX_CID, &CID); +- // Find where the command is. Because this is randomly specified by firmware. ++ /* Find where the command is. Because this is randomly specified by firmware. */ + if ((CID & CID0MASK) == Command) { + ThisCIDMask = CID0MASK; + break; +@@ -748,12 +748,12 @@ BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command) + i++; + } while (i < 200); + +- // Get CommandStatus Value ++ /* Get CommandStatus Value */ + RTMP_IO_READ32(pAd, H2M_MAILBOX_STATUS, &CmdStatus); + +- // This command's status is at the same position as command. So AND command position's bitmask to read status. ++ /* This command's status is at the same position as command. So AND command position's bitmask to read status. */ + if (i < 200) { +- // If Status is 1, the comamnd is success. ++ /* If Status is 1, the comamnd is success. */ + if (((CmdStatus & ThisCIDMask) == 0x1) + || ((CmdStatus & ThisCIDMask) == 0x100) + || ((CmdStatus & ThisCIDMask) == 0x10000) +@@ -773,7 +773,7 @@ BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command) + ("--> AsicCheckCommanFail2 Timeout Command = %d, CmdStatus= 0x%x \n", + Command, CmdStatus)); + } +- // Clear Command and Status. ++ /* Clear Command and Status. */ + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); + +@@ -810,10 +810,10 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + return; + } + +- //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) +- // || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) +- // || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) ++ /*if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) */ ++ /* || ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) */ ++ /* || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) */ ++ /* ) */ + if (bBcnReq == FALSE) { + /* when the ra interface is down, do not send its beacon frame */ + /* clear all zero */ +@@ -822,7 +822,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + 0x00); + } else { + ptr = (PUCHAR) & pAd->BeaconTxWI; +- for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field ++ for (i = 0; i < TXWI_SIZE; i += 4) /* 16-byte TXWI field */ + { + UINT32 longptr = + *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + +@@ -832,7 +832,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + ptr += 4; + } + +- // Update CapabilityInfo in Beacon ++ /* Update CapabilityInfo in Beacon */ + for (i = CapInfoPos; i < (CapInfoPos + 2); i++) { + RTMP_IO_WRITE8(pAd, + pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + +@@ -871,7 +871,7 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { +- // Support PCIe Advance Power Save ++ /* Support PCIe Advance Power Save */ + if (bFromTx == TRUE && (pAd->Mlme.bPsPollTimerRunning == TRUE)) { + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +@@ -885,7 +885,7 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + + if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) { + #ifdef PCIE_PS_SUPPORT +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +@@ -894,16 +894,16 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + pChipOps-> + AsicReverseRfFromSleepMode(pAd); + } else +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + { +- // end johnli +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ /* end johnli */ ++ /* In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. */ + if (INFRA_ON(pAd) + && (pAd->CommonCfg.CentralChannel != + pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo. + ChannelWidth == BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + AsicSwitchChannel(pAd, + pAd->CommonCfg. + CentralChannel, +@@ -912,7 +912,7 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + pAd->CommonCfg. + CentralChannel); + } else { +- // Must using 20MHz. ++ /* Must using 20MHz. */ + AsicSwitchChannel(pAd, + pAd->CommonCfg. + Channel, FALSE); +@@ -922,8 +922,8 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + } + } + #ifdef PCIE_PS_SUPPORT +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. ++ /* 3090 MCU Wakeup command needs more time to be stable. */ ++ /* Before stable, don't issue other MCU command to prevent from firmware error. */ + if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +@@ -934,9 +934,9 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + pAd->brt30xxBanMcuCmd = FALSE; + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + } else { +- // PCI, 2860-PCIe ++ /* PCI, 2860-PCIe */ + DBGPRINT(RT_DEBUG_TRACE, + ("<==RT28xxPciStaAsicForceWakeup::Original PCI Power Saving\n")); + AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +@@ -968,8 +968,8 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + } + + NdisGetSystemUpTime(&Now); +- // If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. +- // Because Some AP can't queuing outgoing frames immediately. ++ /* If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. */ ++ /* Because Some AP can't queuing outgoing frames immediately. */ + if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) + && (pAd->Mlme.LastSendNULLpsmTime <= Now)) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -995,11 +995,11 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); + } else { + AUTO_WAKEUP_STRUC AutoWakeupCfg; +- // we have decided to SLEEP, so at least do it for a BEACON period. ++ /* we have decided to SLEEP, so at least do it for a BEACON period. */ + if (TbttNumToNextWakeUp == 0) + TbttNumToNextWakeUp = 1; + +- //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); ++ /*RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); */ + + AutoWakeupCfg.word = 0; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +@@ -1007,7 +1007,7 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + AutoWakeupCfg.field.EnableAutoWakeup = 1; + AutoWakeupCfg.field.AutoLeadTime = 5; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. ++ AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); /* send POWER-SAVE command to MCU. Timeout 40us. */ + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); + DBGPRINT(RT_DEBUG_TRACE, + ("<-- %s, TbttNumToNextWakeUp=%d \n", __func__, +@@ -1031,8 +1031,8 @@ VOID PsPollWakeExec(IN PVOID SystemSpecific1, + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + #ifdef PCIE_PS_SUPPORT +- // For rt30xx power solution 3, Use software timer to wake up in psm. So call +- // AsicForceWakeup here instead of handling twakeup interrupt. ++ /* For rt30xx power solution 3, Use software timer to wake up in psm. So call */ ++ /* AsicForceWakeup here instead of handling twakeup interrupt. */ + if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +@@ -1041,7 +1041,7 @@ VOID PsPollWakeExec(IN PVOID SystemSpecific1, + ("<--PsPollWakeExec::3090 calls AsicForceWakeup(pAd, DOT11POWERSAVE) in advance \n")); + AsicForceWakeup(pAd, DOT11POWERSAVE); + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + } + + VOID RadioOnExec(IN PVOID SystemSpecific1, +@@ -1056,12 +1056,12 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { + DBGPRINT(RT_DEBUG_TRACE, + ("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); +-//KH Debug: Add the compile flag "RT2860 and condition ++/*KH Debug: Add the compile flag "RT2860 and condition */ + #ifdef RTMP_PCI_SUPPORT + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + return; + } + +@@ -1072,17 +1072,17 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + return; + } +-//KH Debug: need to check. I add the compile flag "CONFIG_STA_SUPPORT" to enclose the following codes. ++/*KH Debug: need to check. I add the compile flag "CONFIG_STA_SUPPORT" to enclose the following codes. */ + #ifdef RTMP_PCI_SUPPORT + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { + pAd->Mlme.bPsPollTimerRunning = FALSE; + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + } +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + if (pAd->StaCfg.bRadio == TRUE) { + pAd->bPCIclkOff = FALSE; + RTMPRingCleanUp(pAd, QID_AC_BK); +@@ -1092,42 +1092,42 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + RTMPRingCleanUp(pAd, QID_MGMT); + RTMPRingCleanUp(pAd, QID_RX); + +- // 2. Send wake up command. ++ /* 2. Send wake up command. */ + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- // 2-1. wait command ok. ++ /* 2-1. wait command ok. */ + AsicCheckCommanOk(pAd, PowerWakeCID); + +- // When PCI clock is off, don't want to service interrupt. So when back to clock on, enable interrupt. +- //RTMP_IO_WRITE32(pAd, INT_MASK_CSR, (DELAYINTMASK|RxINT)); ++ /* When PCI clock is off, don't want to service interrupt. So when back to clock on, enable interrupt. */ ++ /*RTMP_IO_WRITE32(pAd, INT_MASK_CSR, (DELAYINTMASK|RxINT)); */ + RTMP_ASIC_INTERRUPT_ENABLE(pAd); + +- // 3. Enable Tx DMA. ++ /* 3. Enable Tx DMA. */ + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); + DmaCfg.field.EnableTxDMA = 1; + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); + +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ /* In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. */ + if (INFRA_ON(pAd) + && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == + BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, + FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } else { +- // Must using 20MHz. ++ /* Must using 20MHz. */ + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); + } + +-//KH Debug:The following codes should be enclosed by RT3090 compile flag ++/*KH Debug:The following codes should be enclosed by RT3090 compile flag */ + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); + + #ifdef PCIE_PS_SUPPORT +-// 3090 MCU Wakeup command needs more time to be stable. +-// Before stable, don't issue other MCU command to prevent from firmware error. ++/* 3090 MCU Wakeup command needs more time to be stable. */ ++/* Before stable, don't issue other MCU command to prevent from firmware error. */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +@@ -1136,12 +1136,12 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + pAd->brt30xxBanMcuCmd = FALSE; + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + +- // Clear Radio off flag ++ /* Clear Radio off flag */ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_RADIO_ON); + + if (pAd->StaCfg.Psm == PWR_ACTIVE) { +@@ -1166,9 +1166,9 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + */ + BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + { +- //WPDMA_GLO_CFG_STRUC DmaCfg; ++ /*WPDMA_GLO_CFG_STRUC DmaCfg; */ + BOOLEAN Cancelled; +- //UINT32 MACValue; ++ /*UINT32 MACValue; */ + + if (pAd->OpMode == OPMODE_AP && Level == DOT11POWERSAVE) + return FALSE; +@@ -1181,8 +1181,8 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + if ((pAd->StaCfg.PSControl.field.EnableNewPS == TRUE && + (Level == GUIRADIO_OFF || Level == GUI_IDLE_POWER_SAVE)) || + RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) { +- // Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore +- // return condition here. ++ /* Some chips don't need to delay 6ms, so copy RTMPPCIePowerLinkCtrlRestore */ ++ /* return condition here. */ + /* + if (((pAd->MACVersion&0xffff0000) != 0x28600000) + && ((pAd->DeviceID == NIC2860_PCIe_DEVICE_ID) +@@ -1191,7 +1191,7 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + { + DBGPRINT(RT_DEBUG_TRACE, + ("RT28xxPciAsicRadioOn ()\n")); +- // 1. Set PCI Link Control in Configuration Space. ++ /* 1. Set PCI Link Control in Configuration Space. */ + RTMPPCIeLinkCtrlValueRestore(pAd, + RESTORE_WAKEUP); + RTMPusecDelay(6000); +@@ -1204,16 +1204,16 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) + && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE)))) +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + { + pAd->bPCIclkOff = FALSE; + DBGPRINT(RT_DEBUG_TRACE, + ("PSM :309xbPCIclkOff == %d\n", pAd->bPCIclkOff)); + } +- // 2. Send wake up command. ++ /* 2. Send wake up command. */ + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); + pAd->bPCIclkOff = FALSE; +- // 2-1. wait command ok. ++ /* 2-1. wait command ok. */ + AsicCheckCommanOk(pAd, PowerWakeCID); + RTMP_ASIC_INTERRUPT_ENABLE(pAd); + +@@ -1221,14 +1221,14 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + if (Level == GUI_IDLE_POWER_SAVE) { + #ifdef PCIE_PS_SUPPORT + +- // add by johnli, RF power sequence setup, load RF normal operation-mode setup ++ /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. ++ /* 3090 MCU Wakeup command needs more time to be stable. */ ++ /* Before stable, don't issue other MCU command to prevent from firmware error. */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == +@@ -1240,17 +1240,17 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + } + } else +- // end johnli +-#endif // PCIE_PS_SUPPORT // ++ /* end johnli */ ++#endif /* PCIE_PS_SUPPORT // */ + { +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ /* In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. */ + { + if (INFRA_ON(pAd) + && (pAd->CommonCfg.CentralChannel != + pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo. + ChannelWidth == BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + AsicSwitchChannel(pAd, + pAd->CommonCfg. + CentralChannel, +@@ -1259,7 +1259,7 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + pAd->CommonCfg. + CentralChannel); + } else { +- // Must using 20MHz. ++ /* Must using 20MHz. */ + AsicSwitchChannel(pAd, + pAd->CommonCfg. + Channel, FALSE); +@@ -1304,7 +1304,7 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + if (pAd->OpMode == OPMODE_AP && Level == DOT11POWERSAVE) + return FALSE; + +- // Check Rx DMA busy status, if more than half is occupied, give up this radio off. ++ /* Check Rx DMA busy status, if more than half is occupied, give up this radio off. */ + RTMP_IO_READ32(pAd, RX_DRX_IDX, &RxDmaIdx); + RTMP_IO_READ32(pAd, RX_CRX_IDX, &RxCpuIdx); + if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE / 3)) { +@@ -1319,8 +1319,8 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + RxCpuIdx, RxDmaIdx)); + return FALSE; + } +- // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. +- //pAd->bPCIclkOffDisableTx = TRUE; ++ /* Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. */ ++ /*pAd->bPCIclkOffDisableTx = TRUE; */ + RTMP_SET_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->OpMode == OPMODE_STA +@@ -1331,15 +1331,15 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + if (Level == DOT11POWERSAVE) { + RTMP_IO_READ32(pAd, TBTT_TIMER, &TbTTTime); + TbTTTime &= 0x1ffff; +- // 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. +- // TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms ++ /* 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. */ ++ /* TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms */ + if (((64 * TbTTTime) < ((LEAD_TIME * 1024) + 40000)) + && (TbttNumToNextWakeUp == 0)) { + DBGPRINT(RT_DEBUG_TRACE, + ("TbTTTime = 0x%x , give up this sleep. \n", + TbTTTime)); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- //pAd->bPCIclkOffDisableTx = FALSE; ++ /*pAd->bPCIclkOffDisableTx = FALSE; */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return FALSE; + } else { +@@ -1355,7 +1355,7 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + EnableNewPS == TRUE)) { + PsPollTime -= 5; + } else +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + PsPollTime -= 3; + + BeaconPeriodTime = +@@ -1379,52 +1379,52 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + +- // Set to 1R. ++ /* Set to 1R. */ + if (pAd->Antenna.field.RxPath > 1 && pAd->OpMode == OPMODE_STA) { + tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, tempBBP_R3); + } +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. ++ /* In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. */ + if ((INFRA_ON(pAd) || pAd->OpMode == OPMODE_AP) + && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); + } else { +- // Must using 20MHz. ++ /* Must using 20MHz. */ + AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); + } + + if (Level != RTMP_HALT) { +- // Change Interrupt bitmask. +- // When PCI clock is off, don't want to service interrupt. ++ /* Change Interrupt bitmask. */ ++ /* When PCI clock is off, don't want to service interrupt. */ + RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); + } else { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } + + RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- // 2. Send Sleep command ++ /* 2. Send Sleep command */ + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- // send POWER-SAVE command to MCU. high-byte = 1 save power as much as possible. high byte = 0 save less power ++ /* send POWER-SAVE command to MCU. high-byte = 1 save power as much as possible. high byte = 0 save less power */ + AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x1); +- // 2-1. Wait command success +- // Status = 1 : success, Status = 2, already sleep, Status = 3, Maybe MAC is busy so can't finish this task. ++ /* 2-1. Wait command success */ ++ /* Status = 1 : success, Status = 2, already sleep, Status = 3, Maybe MAC is busy so can't finish this task. */ + brc = AsicCheckCommanOk(pAd, PowerSafeCID); + +- // 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. +- // If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. ++ /* 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. */ ++ /* If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. */ + if ((Level == DOT11POWERSAVE) && (brc == TRUE)) { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success ++ AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); /* lowbyte = 0 means to do power safe, NOT turn off radio. */ ++ /* 3-1. Wait command success */ + AsicCheckCommanOk(pAd, PowerRadioOffCID); + } else if (brc == TRUE) { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success ++ AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); /* lowbyte = 0 means to do power safe, NOT turn off radio. */ ++ /* 3-1. Wait command success */ + AsicCheckCommanOk(pAd, PowerRadioOffCID); + } +- // 1. Wait DMA not busy ++ /* 1. Wait DMA not busy */ + i = 0; + do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +@@ -1446,10 +1446,10 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + pAd->CheckDmaBusyCount = 0; + } + */ +-//KH Debug:My original codes have the follwoing codes, but currecnt codes do not have it. +-// Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment. ++/*KH Debug:My original codes have the follwoing codes, but currecnt codes do not have it. */ ++/* Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment. */ + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280); +-//OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ); ++/*OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ); */ + + #ifdef PCIE_PS_SUPPORT + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) +@@ -1460,39 +1460,39 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + ("RT28xxPciAsicRadioOff::3090 return to skip the following TbttNumToNextWakeUp setting for 279x\n")); + pAd->bPCIclkOff = TRUE; + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- // For this case, doesn't need to below actions, so return here. ++ /* For this case, doesn't need to below actions, so return here. */ + return brc; + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + + if (Level == DOT11POWERSAVE) { + AUTO_WAKEUP_STRUC AutoWakeupCfg; +- //RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); ++ /*RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); */ + +- // we have decided to SLEEP, so at least do it for a BEACON period. ++ /* we have decided to SLEEP, so at least do it for a BEACON period. */ + if (TbttNumToNextWakeUp == 0) + TbttNumToNextWakeUp = 1; + + AutoWakeupCfg.word = 0; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + +- // 1. Set auto wake up timer. ++ /* 1. Set auto wake up timer. */ + AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; + AutoWakeupCfg.field.EnableAutoWakeup = 1; + AutoWakeupCfg.field.AutoLeadTime = LEAD_TIME; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + } +- // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. ++ /* 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. */ + if (Level == RTMP_HALT && pAd->OpMode == OPMODE_STA) { + if ((brc == TRUE) && (i < 50)) + RTMPPCIeLinkCtrlSetting(pAd, 1); + } +- // 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function ++ /* 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function */ + else if (pAd->OpMode == OPMODE_STA) { + if ((brc == TRUE) && (i < 50)) + RTMPPCIeLinkCtrlSetting(pAd, 3); + } +- //pAd->bPCIclkOffDisableTx = FALSE; ++ /*pAd->bPCIclkOffDisableTx = FALSE; */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); + return TRUE; + } +@@ -1511,7 +1511,7 @@ VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + || pAd->StaCfg.PSControl.field. + EnableNewPS == FALSE))) { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- //NICResetFromError(pAd); ++ /*NICResetFromError(pAd); */ + + RTMPRingCleanUp(pAd, QID_AC_BK); + RTMPRingCleanUp(pAd, QID_AC_BE); +@@ -1520,15 +1520,15 @@ VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + RTMPRingCleanUp(pAd, QID_MGMT); + RTMPRingCleanUp(pAd, QID_RX); + +- // Enable Tx/Rx ++ /* Enable Tx/Rx */ + RTMPEnableRxTx(pAd); + +- // Clear Radio off flag ++ /* Clear Radio off flag */ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_RADIO_ON); + } + +@@ -1553,7 +1553,7 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; + +- // Link down first if any association exists ++ /* Link down first if any association exists */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { + MLME_DISASSOC_REQ_STRUCT DisReq; +@@ -1584,7 +1584,7 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + + DBGPRINT(RT_DEBUG_TRACE, ("%s===>\n", __func__)); + +- // Set Radio off flag ++ /* Set Radio off flag */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + { +@@ -1597,13 +1597,13 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + RTMP_CLEAR_FLAG(pAd, + fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + } +- // If during power safe mode. ++ /* If during power safe mode. */ + if (pAd->StaCfg.bRadio == TRUE) { + DBGPRINT(RT_DEBUG_TRACE, + ("-->MlmeRadioOff() return on bRadio == TRUE; \n")); + return; + } +- // Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). ++ /* Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). */ + if (IDLE_ON(pAd) && + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) + { +@@ -1618,12 +1618,12 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + &Cancelled); + } + } +- // Link down first if any association exists ++ /* Link down first if any association exists */ + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) + LinkDown(pAd, FALSE); + RTMPusecDelay(10000); +- //========================================== +- // Clean up old bss table ++ /*========================================== */ ++ /* Clean up old bss table */ + BssTableInit(&pAd->ScanTab); + + /* +@@ -1635,12 +1635,12 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + */ + } + +- // Set LED.Move to here for fixing LED bug. This flag must be called after LinkDown ++ /* Set LED.Move to here for fixing LED bug. This flag must be called after LinkDown */ + RTMPSetLED(pAd, LED_RADIO_OFF); + +-//KH Debug:All PCIe devices need to use timer to execute radio off function, or the PCIe&&EnableNewPS needs. +-//KH Ans:It is right, because only when the PCIe and EnableNewPs is true, we need to delay the RadioOffTimer +-//to avoid the deadlock with PCIe Power saving function. ++/*KH Debug:All PCIe devices need to use timer to execute radio off function, or the PCIe&&EnableNewPS needs. */ ++/*KH Ans:It is right, because only when the PCIe and EnableNewPs is true, we need to delay the RadioOffTimer */ ++/*to avoid the deadlock with PCIe Power saving function. */ + if (pAd->OpMode == OPMODE_STA && + OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) && + pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { +@@ -1658,4 +1658,4 @@ VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + */ + } + +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index e537455..70e47db 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -57,22 +57,22 @@ NDIS_STATUS NICInitRecv(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); + pObj = pObj; + +- //InterlockedExchange(&pAd->PendingRx, 0); ++ /*InterlockedExchange(&pAd->PendingRx, 0); */ + pAd->PendingRx = 0; +- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index +- pAd->NextRxBulkInIndex = 0; //RX_RING_SIZE -1; // Rx Bulk pointer ++ pAd->NextRxBulkInReadIndex = 0; /* Next Rx Read index */ ++ pAd->NextRxBulkInIndex = 0; /*RX_RING_SIZE -1; // Rx Bulk pointer */ + pAd->NextRxBulkInPosition = 0; + + for (i = 0; i < (RX_RING_SIZE); i++) { + PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); + +- //Allocate URB ++ /*Allocate URB */ + pRxContext->pUrb = RTUSB_ALLOC_URB(0); + if (pRxContext->pUrb == NULL) { + Status = NDIS_STATUS_RESOURCES; + goto out1; + } +- // Allocate transfer buffer ++ /* Allocate transfer buffer */ + pRxContext->TransferBuffer = + RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, + &pRxContext->data_dma); +@@ -88,7 +88,7 @@ NDIS_STATUS NICInitRecv(IN PRTMP_ADAPTER pAd) + pRxContext->InUse = FALSE; + pRxContext->IRPPending = FALSE; + pRxContext->Readable = FALSE; +- //pRxContext->ReorderInUse = FALSE; ++ /*pRxContext->ReorderInUse = FALSE; */ + pRxContext->bRxHandling = FALSE; + pRxContext->BulkInOffset = 0; + } +@@ -165,44 +165,44 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); + PTX_CONTEXT pRTSContext = &(pAd->RTSContext); + PTX_CONTEXT pMLMEContext = NULL; +-// PHT_TX_CONTEXT pHTTXContext = NULL; ++/* PHT_TX_CONTEXT pHTTXContext = NULL; */ + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + PVOID RingBaseVa; +-// RTMP_TX_RING *pTxRing; ++/* RTMP_TX_RING *pTxRing; */ + RTMP_MGMT_RING *pMgmtRing; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n")); + pObj = pObj; + +- // Init 4 set of Tx parameters ++ /* Init 4 set of Tx parameters */ + for (acidx = 0; acidx < NUM_OF_TX_RING; acidx++) { +- // Initialize all Transmit releated queues ++ /* Initialize all Transmit releated queues */ + InitializeQueueHeader(&pAd->TxSwQueue[acidx]); + +- // Next Local tx ring pointer waiting for buck out ++ /* Next Local tx ring pointer waiting for buck out */ + pAd->NextBulkOutIndex[acidx] = acidx; +- pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag +- //pAd->DataBulkDoneIdx[acidx] = 0; ++ pAd->BulkOutPending[acidx] = FALSE; /* Buck Out control flag */ ++ /*pAd->DataBulkDoneIdx[acidx] = 0; */ + } + +- //pAd->NextMLMEIndex = 0; +- //pAd->PushMgmtIndex = 0; +- //pAd->PopMgmtIndex = 0; +- //InterlockedExchange(&pAd->MgmtQueueSize, 0); +- //InterlockedExchange(&pAd->TxCount, 0); ++ /*pAd->NextMLMEIndex = 0; */ ++ /*pAd->PushMgmtIndex = 0; */ ++ /*pAd->PopMgmtIndex = 0; */ ++ /*InterlockedExchange(&pAd->MgmtQueueSize, 0); */ ++ /*InterlockedExchange(&pAd->TxCount, 0); */ + +- //pAd->PrioRingFirstIndex = 0; +- //pAd->PrioRingTxCnt = 0; ++ /*pAd->PrioRingFirstIndex = 0; */ ++ /*pAd->PrioRingTxCnt = 0; */ + + do { +- // +- // TX_RING_SIZE, 4 ACs +- // ++ /* */ ++ /* TX_RING_SIZE, 4 ACs */ ++ /* */ + for (acidx = 0; acidx < 4; acidx++) { + PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); + + NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT)); +- //Allocate URB ++ /*Allocate URB */ + LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, + sizeof(HTTX_BUFFER), Status, + ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", +@@ -226,11 +226,11 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pAd->BulkOutPending[acidx] = FALSE; + } + +- // +- // MGMT_RING_SIZE +- // ++ /* */ ++ /* MGMT_RING_SIZE */ ++ /* */ + +- // Allocate MGMT ring descriptor's memory ++ /* Allocate MGMT ring descriptor's memory */ + pAd->MgmtDescRing.AllocSize = + MGMT_RING_SIZE * sizeof(TX_CONTEXT); + os_alloc_mem(pAd, (PUCHAR *) (&pAd->MgmtDescRing.AllocVa), +@@ -244,16 +244,16 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pAd->MgmtDescRing.AllocSize); + RingBaseVa = pAd->MgmtDescRing.AllocVa; + +- // Initialize MGMT Ring and associated buffer memory ++ /* Initialize MGMT Ring and associated buffer memory */ + pMgmtRing = &pAd->MgmtRing; + for (i = 0; i < MGMT_RING_SIZE; i++) { +- // link the pre-allocated Mgmt buffer to MgmtRing.Cell ++ /* link the pre-allocated Mgmt buffer to MgmtRing.Cell */ + pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT); + pMgmtRing->Cell[i].AllocVa = RingBaseVa; + pMgmtRing->Cell[i].pNdisPacket = NULL; + pMgmtRing->Cell[i].pNextNdisPacket = NULL; + +- //Allocate URB for MLMEContext ++ /*Allocate URB for MLMEContext */ + pMLMEContext = + (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; + pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); +@@ -273,27 +273,27 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pMLMEContext->BulkOutSize = 0; + pMLMEContext->SelfIdx = i; + +- // Offset to next ring descriptor address ++ /* Offset to next ring descriptor address */ + RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT); + } + DBGPRINT(RT_DEBUG_TRACE, + ("MGMT Ring: total %d entry allocated\n", i)); + +- //pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1); ++ /*pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1); */ + pAd->MgmtRing.TxSwFreeIdx = MGMT_RING_SIZE; + pAd->MgmtRing.TxCpuIdx = 0; + pAd->MgmtRing.TxDmaIdx = 0; + +- // +- // BEACON_RING_SIZE +- // +- for (i = 0; i < BEACON_RING_SIZE; i++) // 2 ++ /* */ ++ /* BEACON_RING_SIZE */ ++ /* */ ++ for (i = 0; i < BEACON_RING_SIZE; i++) /* 2 */ + { + PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); + + NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT)); + +- //Allocate URB ++ /*Allocate URB */ + LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, + sizeof(TX_BUFFER), Status, + ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", +@@ -307,12 +307,12 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pBeaconContext->IRPPending = FALSE; + } + +- // +- // NullContext +- // ++ /* */ ++ /* NullContext */ ++ /* */ + NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT)); + +- //Allocate URB ++ /*Allocate URB */ + LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), + Status, + ("<-- ERROR in Alloc TX NullContext urb!! \n"), +@@ -325,12 +325,12 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pNullContext->InUse = FALSE; + pNullContext->IRPPending = FALSE; + +- // +- // RTSContext +- // ++ /* */ ++ /* RTSContext */ ++ /* */ + NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT)); + +- //Allocate URB ++ /*Allocate URB */ + LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), + Status, + ("<-- ERROR in Alloc TX RTSContext urb!! \n"), +@@ -343,11 +343,11 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pRTSContext->InUse = FALSE; + pRTSContext->IRPPending = FALSE; + +- // +- // PsPollContext +- // +- //NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); +- //Allocate URB ++ /* */ ++ /* PsPollContext */ ++ /* */ ++ /*NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); */ ++ /*Allocate URB */ + LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, + sizeof(TX_BUFFER), Status, + ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), +@@ -407,7 +407,7 @@ out1: + LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER)); + } + +- // Here we didn't have any pre-allocated memory need to free. ++ /* Here we didn't have any pre-allocated memory need to free. */ + + return Status; + } +@@ -430,21 +430,21 @@ Note: + */ + NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { +-// COUNTER_802_11 pCounter = &pAd->WlanCounters; ++/* COUNTER_802_11 pCounter = &pAd->WlanCounters; */ + NDIS_STATUS Status; + INT num; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); + + do { +- // Init the CmdQ and CmdQLock ++ /* Init the CmdQ and CmdQLock */ + NdisAllocateSpinLock(&pAd->CmdQLock); + NdisAcquireSpinLock(&pAd->CmdQLock); + RTUSBInitializeCmdQ(&pAd->CmdQ); + NdisReleaseSpinLock(&pAd->CmdQLock); + + NdisAllocateSpinLock(&pAd->MLMEBulkOutLock); +- //NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock); ++ /*NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock); */ + NdisAllocateSpinLock(&pAd->BulkOutLock[0]); + NdisAllocateSpinLock(&pAd->BulkOutLock[1]); + NdisAllocateSpinLock(&pAd->BulkOutLock[2]); +@@ -457,31 +457,31 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + NdisAllocateSpinLock(&pAd->TxContextQueueLock[num]); + } + +-// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX ++/* NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX */ + +-// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() +-// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() ++/* NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit() */ ++/* NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit() */ + +-// for(num=0; numBATable.BARecEntry[num].RxReRingLock); +-// } ++/* for(num=0; numBATable.BARecEntry[num].RxReRingLock); */ ++/* } */ + +- // +- // Init Mac Table +- // +-// MacTableInitialize(pAd); ++ /* */ ++ /* Init Mac Table */ ++ /* */ ++/* MacTableInitialize(pAd); */ + +- // +- // Init send data structures and related parameters +- // ++ /* */ ++ /* Init send data structures and related parameters */ ++ /* */ + Status = NICInitTransmit(pAd); + if (Status != NDIS_STATUS_SUCCESS) + break; + +- // +- // Init receive data structures and related parameters +- // ++ /* */ ++ /* Init receive data structures and related parameters */ ++ /* */ + Status = NICInitRecv(pAd); + if (Status != NDIS_STATUS_SUCCESS) + break; +@@ -536,42 +536,42 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pNullContext = &pAd->NullContext; + PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; + PTX_CONTEXT pRTSContext = &pAd->RTSContext; +-// PHT_TX_CONTEXT pHTTXContext; +- //PRTMP_REORDERBUF pReorderBuf; ++/* PHT_TX_CONTEXT pHTTXContext; */ ++ /*PRTMP_REORDERBUF pReorderBuf; */ + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +-// RTMP_TX_RING *pTxRing; ++/* RTMP_TX_RING *pTxRing; */ + + DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); + pObj = pObj; + +- // Free all resources for the RECEIVE buffer queue. ++ /* Free all resources for the RECEIVE buffer queue. */ + for (i = 0; i < (RX_RING_SIZE); i++) { + PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); + if (pRxContext) + LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE); + } + +- // Free PsPoll frame resource ++ /* Free PsPoll frame resource */ + LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); + +- // Free NULL frame resource ++ /* Free NULL frame resource */ + LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); + +- // Free RTS frame resource ++ /* Free RTS frame resource */ + LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); + +- // Free beacon frame resource ++ /* Free beacon frame resource */ + for (i = 0; i < BEACON_RING_SIZE; i++) { + PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); + if (pBeaconContext) + LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); + } + +- // Free mgmt frame resource ++ /* Free mgmt frame resource */ + for (i = 0; i < MGMT_RING_SIZE; i++) { + PTX_CONTEXT pMLMEContext = + (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; +- //LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); ++ /*LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); */ + if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) { + RTMPFreeNdisPacket(pAd, + pAd->MgmtRing.Cell[i].pNdisPacket); +@@ -590,7 +590,7 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + if (pAd->MgmtDescRing.AllocVa) + os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); + +- // Free Tx frame resource ++ /* Free Tx frame resource */ + for (acidx = 0; acidx < 4; acidx++) { + PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); + if (pHTTXContext) +@@ -609,15 +609,15 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + NdisFreeSpinLock(&pAd->MLMEBulkOutLock); + + NdisFreeSpinLock(&pAd->CmdQLock); +- // Clear all pending bulk-out request flags. ++ /* Clear all pending bulk-out request flags. */ + RTUSB_CLEAR_BULK_FLAG(pAd, 0xffffffff); + +-// NdisFreeSpinLock(&pAd->MacTabLock); ++/* NdisFreeSpinLock(&pAd->MacTabLock); */ + +-// for(i=0; iBATable.BARecEntry[i].RxReRingLock); +-// } ++/* for(i=0; iBATable.BARecEntry[i].RxReRingLock); */ ++/* } */ + + DBGPRINT(RT_DEBUG_ERROR, ("<--- RTMPFreeTxRxRingMemory\n")); + } +@@ -643,7 +643,7 @@ NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) + NDIS_STATUS Status = NDIS_STATUS_SUCCESS; + LARGE_INTEGER NOW; + +- // initialize the random number generator ++ /* initialize the random number generator */ + RTMP_GetCurrentSystemTime(&NOW); + + if (pAd->bLocalAdminMAC != TRUE) { +@@ -654,7 +654,7 @@ NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) + pAd->CurrentAddress[4] = pAd->PermanentAddress[4]; + pAd->CurrentAddress[5] = pAd->PermanentAddress[5]; + } +- // Write New MAC address to MAC_CSR2 & MAC_CSR3 & let ASIC know our new MAC ++ /* Write New MAC address to MAC_CSR2 & MAC_CSR3 & let ASIC know our new MAC */ + StaMacReg0.field.Byte0 = pAd->CurrentAddress[0]; + StaMacReg0.field.Byte1 = pAd->CurrentAddress[1]; + StaMacReg0.field.Byte2 = pAd->CurrentAddress[2]; +@@ -689,7 +689,7 @@ Note: + */ + VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd) + { +- // no use ++ /* no use */ + } + + /* +@@ -776,7 +776,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + UINT i, padding; + BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; + UINT32 longValue; +-// USHORT shortValue; ++/* USHORT shortValue; */ + BOOLEAN bBcnReq = FALSE; + UCHAR bcn_idx = 0; + +@@ -789,9 +789,9 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + DBGPRINT(RT_DEBUG_ERROR, ("pBeaconSync is NULL!\n")); + return; + } +- //if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) || +- // ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) +- // ) ++ /*if ((pAd->WdsTab.Mode == WDS_BRIDGE_MODE) || */ ++ /* ((pAd->ApCfg.MBSSID[apidx].MSSIDDev == NULL) || !(pAd->ApCfg.MBSSID[apidx].MSSIDDev->flags & IFF_UP)) */ ++ /* ) */ + if (bBcnReq == FALSE) { + /* when the ra interface is down, do not send its beacon frame */ + /* clear all zero */ +@@ -804,7 +804,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + NdisZeroMemory(pBeaconSync->BeaconTxWI[bcn_idx], TXWI_SIZE); + } else { + ptr = (PUCHAR) & pAd->BeaconTxWI; +- if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) { // If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. ++ if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) { /* If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. */ + pBeaconSync->BeaconBitMap &= + (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); + NdisMoveMemory(pBeaconSync->BeaconTxWI[bcn_idx], +@@ -813,7 +813,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + if ((pBeaconSync->BeaconBitMap & (1 << bcn_idx)) != + (1 << bcn_idx)) { +- for (i = 0; i < TXWI_SIZE; i += 4) // 16-byte TXWI field ++ for (i = 0; i < TXWI_SIZE; i += 4) /* 16-byte TXWI field */ + { + longValue = + *ptr + (*(ptr + 1) << 8) + +@@ -832,8 +832,8 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + for (i = 0; i < FrameLen /*HW_BEACON_OFFSET */ ; i += 2) { + if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) { + NdisMoveMemory(ptr, pBeaconFrame, 2); +- //shortValue = *ptr + (*(ptr+1)<<8); +- //RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, shortValue); ++ /*shortValue = *ptr + (*(ptr+1)<<8); */ ++ /*RTMP_IO_WRITE8(pAd, pAd->BeaconOffset[bcn_idx] + TXWI_SIZE + i, shortValue); */ + RTUSBMultiWrite(pAd, + pAd->BeaconOffset[bcn_idx] + + TXWI_SIZE + i, ptr, 2); +@@ -844,7 +844,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + pBeaconSync->BeaconBitMap |= (1 << bcn_idx); + +- // For AP interface, set the DtimBitOn so that we can send Bcast/Mcast frame out after this beacon frame. ++ /* For AP interface, set the DtimBitOn so that we can send Bcast/Mcast frame out after this beacon frame. */ + } + + } +@@ -887,7 +887,7 @@ VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + { + int apidx; + BEACON_SYNC_STRUCT *pBeaconSync; +-// LARGE_INTEGER tsfTime, deltaTime; ++/* LARGE_INTEGER tsfTime, deltaTime; */ + + pBeaconSync = pAd->CommonCfg.pBeaconSync; + if (pBeaconSync && pBeaconSync->EnableBeacon) { +@@ -936,7 +936,7 @@ VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + + os_alloc_mem(pAd, (PUCHAR *) (&pAd->CommonCfg.pBeaconSync), + sizeof(BEACON_SYNC_STRUCT)); +- //NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); ++ /*NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); */ + if (pAd->CommonCfg.pBeaconSync) { + pBeaconSync = pAd->CommonCfg.pBeaconSync; + NdisZeroMemory(pBeaconSync, sizeof(BEACON_SYNC_STRUCT)); +@@ -949,7 +949,7 @@ VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + } + pBeaconSync->BeaconBitMap = 0; + +- //RTMPInitTimer(pAd, &pAd->CommonCfg.BeaconUpdateTimer, GET_TIMER_FUNCTION(BeaconUpdateExec), pAd, TRUE); ++ /*RTMPInitTimer(pAd, &pAd->CommonCfg.BeaconUpdateTimer, GET_TIMER_FUNCTION(BeaconUpdateExec), pAd, TRUE); */ + pBeaconSync->EnableBeacon = TRUE; + } + } +@@ -1002,9 +1002,9 @@ VOID BeaconUpdateExec(IN PVOID SystemSpecific1, + IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) + { + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; +- LARGE_INTEGER tsfTime_a; //, tsfTime_b, deltaTime_exp, deltaTime_ab; ++ LARGE_INTEGER tsfTime_a; /*, tsfTime_b, deltaTime_exp, deltaTime_ab; */ + UINT32 delta, delta2MS, period2US, remain, remain_low, remain_high; +-// BOOLEAN positive; ++/* BOOLEAN positive; */ + + if (pAd->CommonCfg.IsUpdateBeacon == TRUE) { + ReSyncBeaconTime(pAd); +@@ -1014,7 +1014,7 @@ VOID BeaconUpdateExec(IN PVOID SystemSpecific1, + RTMP_IO_READ32(pAd, TSF_TIMER_DW0, &tsfTime_a.u.LowPart); + RTMP_IO_READ32(pAd, TSF_TIMER_DW1, &tsfTime_a.u.HighPart); + +- //positive=getDeltaTime(tsfTime_a, expectedTime, &deltaTime_exp); ++ /*positive=getDeltaTime(tsfTime_a, expectedTime, &deltaTime_exp); */ + period2US = (pAd->CommonCfg.BeaconPeriod << 10); + remain_high = pAd->CommonCfg.BeaconRemain * tsfTime_a.u.HighPart; + remain_low = tsfTime_a.u.LowPart % (pAd->CommonCfg.BeaconPeriod << 10); +@@ -1051,20 +1051,20 @@ VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); + RTMPusecDelay(10000); + } +- //NICResetFromError(pAd); ++ /*NICResetFromError(pAd); */ + +- // Enable Tx/Rx ++ /* Enable Tx/Rx */ + RTMPEnableRxTx(pAd); + + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); + +- // Clear Radio off flag ++ /* Clear Radio off flag */ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + RTUSBBulkReceive(pAd); + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_RADIO_ON); + } + +@@ -1078,11 +1078,11 @@ VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; + +- // Clear PMKID cache. ++ /* Clear PMKID cache. */ + pAd->StaCfg.SavedPMKNum = 0; + RTMPZeroMemory(pAd->StaCfg.SavedPMK, (PMKID_NO * sizeof(BSSID_INFO))); + +- // Link down first if any association exists ++ /* Link down first if any association exists */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { + MLME_DISASSOC_REQ_STRUCT DisReq; +@@ -1110,38 +1110,38 @@ VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + } + } + } +- // Set Radio off flag ++ /* Set Radio off flag */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + { +- // Link down first if any association exists ++ /* Link down first if any association exists */ + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) + LinkDown(pAd, FALSE); + RTMPusecDelay(10000); + +- //========================================== +- // Clean up old bss table ++ /*========================================== */ ++ /* Clean up old bss table */ + BssTableInit(&pAd->ScanTab); + } + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_RADIO_OFF); + + if (pAd->CommonCfg.BBPCurrentBW == BW_40) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); + } else { +- // Must using 20MHz. ++ /* Must using 20MHz. */ + AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); + } + +- // Disable Tx/Rx DMA +- RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA ++ /* Disable Tx/Rx DMA */ ++ RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); /* disable DMA */ + GloCfg.field.EnableTxDMA = 0; + GloCfg.field.EnableRxDMA = 0; +- RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings ++ RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); /* abort all TX rings */ + +- // Waiting for DMA idle ++ /* Waiting for DMA idle */ + i = 0; + do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +@@ -1152,7 +1152,7 @@ VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + RTMPusecDelay(1000); + } while (i++ < 100); + +- // Disable MAC Tx/Rx ++ /* Disable MAC Tx/Rx */ + RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); + Value &= (0xfffffff3); + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); +@@ -1162,4 +1162,4 @@ VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + } + } + +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index 92c44c7..bd12025 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -144,7 +144,7 @@ BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, + MsgLen)); + return FALSE; + } +- // we support immediate BA. ++ /* we support immediate BA. */ + *(USHORT *) (&pAddFrame->BaParm) = + cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); + pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); +@@ -160,7 +160,7 @@ BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, + pAddFrame->BaParm.AMSDUSupported)); + return FALSE; + } +- // we support immediate BA. ++ /* we support immediate BA. */ + if (pAddFrame->BaParm.TID & 0xfff0) { + DBGPRINT(RT_DEBUG_ERROR, + ("PeerAddBAReqActionSanity: ADDBA Request incorrect TID = %d\n", +@@ -183,7 +183,7 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + MsgLen)); + return FALSE; + } +- // we support immediate BA. ++ /* we support immediate BA. */ + *(USHORT *) (&pAddFrame->BaParm) = + cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); + pAddFrame->StatusCode = cpu2le16(pAddFrame->StatusCode); +@@ -195,7 +195,7 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + pAddFrame->BaParm.BAPolicy)); + return FALSE; + } +- // we support immediate BA. ++ /* we support immediate BA. */ + if (pAddFrame->BaParm.TID & 0xfff0) { + DBGPRINT(RT_DEBUG_ERROR, + ("PeerAddBARspActionSanity: ADDBA Response incorrect TID = %d\n", +@@ -209,7 +209,7 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, + IN UCHAR Wcid, IN VOID * pMsg, IN ULONG MsgLen) + { +- //PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; ++ /*PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; */ + PFRAME_DELBA_REQ pDelFrame; + if (MsgLen != (sizeof(FRAME_DELBA_REQ))) + return FALSE; +@@ -240,7 +240,7 @@ BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT PUCHAR pAddr2, OUT PUCHAR pBssid, OUT CHAR Ssid[], OUT UCHAR * pSsidLen, OUT UCHAR * pBssType, OUT USHORT * pBeaconPeriod, OUT UCHAR * pChannel, OUT UCHAR * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, OUT USHORT * pAtimWin, OUT USHORT * pCapabilityInfo, OUT UCHAR * pErp, OUT UCHAR * pDtimCount, OUT UCHAR * pDtimPeriod, OUT UCHAR * pBcastFlag, OUT UCHAR * pMessageToMe, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT UCHAR * pCkipFlag, OUT UCHAR * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, OUT ULONG * pRalinkIe, OUT UCHAR * pHtCapabilityLen, OUT UCHAR * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT UCHAR * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, OUT UCHAR * NewExtChannelOffset, // Ht extension channel offset(above or below) ++BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT PUCHAR pAddr2, OUT PUCHAR pBssid, OUT CHAR Ssid[], OUT UCHAR * pSsidLen, OUT UCHAR * pBssType, OUT USHORT * pBeaconPeriod, OUT UCHAR * pChannel, OUT UCHAR * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, OUT USHORT * pAtimWin, OUT USHORT * pCapabilityInfo, OUT UCHAR * pErp, OUT UCHAR * pDtimCount, OUT UCHAR * pDtimPeriod, OUT UCHAR * pBcastFlag, OUT UCHAR * pMessageToMe, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT UCHAR * pCkipFlag, OUT UCHAR * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, OUT ULONG * pRalinkIe, OUT UCHAR * pHtCapabilityLen, OUT UCHAR * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT UCHAR * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, OUT UCHAR * NewExtChannelOffset, /* Ht extension channel offset(above or below) */ + OUT USHORT * LengthVIE, + OUT PNDIS_802_11_VARIABLE_IEs pVIE) + { +@@ -250,16 +250,16 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + PEID_STRUCT pEid; + UCHAR SubType; + UCHAR Sanity; +- //UCHAR ECWMin, ECWMax; +- //MAC_CSR9_STRUC Csr9; ++ /*UCHAR ECWMin, ECWMax; */ ++ /*MAC_CSR9_STRUC Csr9; */ + ULONG Length = 0; + +- // For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel +- // 1. If the AP is 11n enabled, then check the control channel. +- // 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) ++ /* For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel */ ++ /* 1. If the AP is 11n enabled, then check the control channel. */ ++ /* 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) */ + UCHAR CtrlChannel = 0; + +- // Add for 3 necessary EID field check ++ /* Add for 3 necessary EID field check */ + Sanity = 0; + + *pAtimWin = 0; +@@ -269,34 +269,34 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + *pBcastFlag = 0; + *pMessageToMe = 0; + *pExtRateLen = 0; +- *pCkipFlag = 0; // Default of CkipFlag is 0 +- *pAironetCellPowerLimit = 0xFF; // Default of AironetCellPowerLimit is 0xFF +- *LengthVIE = 0; // Set the length of VIE to init value 0 +- *pHtCapabilityLen = 0; // Set the length of VIE to init value 0 ++ *pCkipFlag = 0; /* Default of CkipFlag is 0 */ ++ *pAironetCellPowerLimit = 0xFF; /* Default of AironetCellPowerLimit is 0xFF */ ++ *LengthVIE = 0; /* Set the length of VIE to init value 0 */ ++ *pHtCapabilityLen = 0; /* Set the length of VIE to init value 0 */ + if (pAd->OpMode == OPMODE_STA) +- *pPreNHtCapabilityLen = 0; // Set the length of VIE to init value 0 +- *AddHtInfoLen = 0; // Set the length of VIE to init value 0 ++ *pPreNHtCapabilityLen = 0; /* Set the length of VIE to init value 0 */ ++ *AddHtInfoLen = 0; /* Set the length of VIE to init value 0 */ + *pRalinkIe = 0; + *pNewChannel = 0; +- *NewExtChannelOffset = 0xff; //Default 0xff means no such IE +- pCfParm->bValid = FALSE; // default: no IE_CF found +- pQbssLoad->bValid = FALSE; // default: no IE_QBSS_LOAD found +- pEdcaParm->bValid = FALSE; // default: no IE_EDCA_PARAMETER found +- pQosCapability->bValid = FALSE; // default: no IE_QOS_CAPABILITY found ++ *NewExtChannelOffset = 0xff; /*Default 0xff means no such IE */ ++ pCfParm->bValid = FALSE; /* default: no IE_CF found */ ++ pQbssLoad->bValid = FALSE; /* default: no IE_QBSS_LOAD found */ ++ pEdcaParm->bValid = FALSE; /* default: no IE_EDCA_PARAMETER found */ ++ pQosCapability->bValid = FALSE; /* default: no IE_QOS_CAPABILITY found */ + + pFrame = (PFRAME_802_11) Msg; + +- // get subtype from header ++ /* get subtype from header */ + SubType = (UCHAR) pFrame->Hdr.FC.SubType; + +- // get Addr2 and BSSID from header ++ /* get Addr2 and BSSID from header */ + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); + COPY_MAC_ADDR(pBssid, pFrame->Hdr.Addr3); + + Ptr = pFrame->Octet; + Length += LENGTH_802_11; + +- // get timestamp from payload and advance the pointer ++ /* get timestamp from payload and advance the pointer */ + NdisMoveMemory(pTimestamp, Ptr, TIMESTAMP_LEN); + + pTimestamp->u.LowPart = cpu2le32(pTimestamp->u.LowPart); +@@ -305,12 +305,12 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + Ptr += TIMESTAMP_LEN; + Length += TIMESTAMP_LEN; + +- // get beacon interval from payload and advance the pointer ++ /* get beacon interval from payload and advance the pointer */ + NdisMoveMemory(pBeaconPeriod, Ptr, 2); + Ptr += 2; + Length += 2; + +- // get capability info from payload and advance the pointer ++ /* get capability info from payload and advance the pointer */ + NdisMoveMemory(pCapabilityInfo, Ptr, 2); + Ptr += 2; + Length += 2; +@@ -322,11 +322,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + + pEid = (PEID_STRUCT) Ptr; + +- // get variable fields from payload and advance the pointer ++ /* get variable fields from payload and advance the pointer */ + while ((Length + 2 + pEid->Len) <= MsgLen) { +- // +- // Secure copy VIE to VarIE[MAX_VIE_LEN] didn't overflow. +- // ++ /* */ ++ /* Secure copy VIE to VarIE[MAX_VIE_LEN] didn't overflow. */ ++ /* */ + if ((*LengthVIE + pEid->Len + 2) >= MAX_VIE_LEN) { + DBGPRINT(RT_DEBUG_WARN, + ("PeerBeaconAndProbeRspSanity - Variable IEs out of resource [len(=%d) > MAX_VIE_LEN(=%d)]\n", +@@ -336,7 +336,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + + switch (pEid->Eid) { + case IE_SSID: +- // Already has one SSID EID in this beacon, ignore the second one ++ /* Already has one SSID EID in this beacon, ignore the second one */ + if (Sanity & 0x1) + break; + if (pEid->Len <= MAX_LEN_OF_SSID) { +@@ -357,11 +357,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + NdisMoveMemory(SupRate, pEid->Octet, pEid->Len); + *pSupRateLen = pEid->Len; + +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, SupRate, pSupRateLen); ++ /* TODO: 2004-09-14 not a good design here, cause it exclude extra rates */ ++ /* from ScanTab. We should report as is. And filter out unsupported */ ++ /* rates in MlmeAux. */ ++ /* Check against the supported rates */ ++ /* RTMPCheckRates(pAd, SupRate, pSupRateLen); */ + } else { + DBGPRINT(RT_DEBUG_TRACE, + ("PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n", +@@ -371,11 +371,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + break; + + case IE_HT_CAP: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! ++ if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension.!! */ + { + NdisMoveMemory(pHtCapability, pEid->Octet, + sizeof(HT_CAPABILITY_IE)); +- *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. ++ *pHtCapabilityLen = SIZE_HT_CAP_IE; /* Nnow we only support 26 bytes. */ + + *(USHORT *) (&pHtCapability->HtCapInfo) = + cpu2le16(*(USHORT *) +@@ -385,7 +385,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + (&pHtCapability->ExtHtCapInfo)); + + { +- *pPreNHtCapabilityLen = 0; // Nnow we only support 26 bytes. ++ *pPreNHtCapabilityLen = 0; /* Nnow we only support 26 bytes. */ + + Ptr = (PUCHAR) pVIE; + NdisMoveMemory(Ptr + *LengthVIE, +@@ -402,8 +402,8 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + break; + case IE_ADD_HT: + if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { +- // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only +- // copy first sizeof(ADD_HT_INFO_IE) ++ /* This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only */ ++ /* copy first sizeof(ADD_HT_INFO_IE) */ + NdisMoveMemory(AddHtInfo, pEid->Octet, + sizeof(ADD_HT_INFO_IE)); + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; +@@ -500,17 +500,17 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + break; + case IE_CHANNEL_SWITCH_ANNOUNCEMENT: + if (pEid->Len == 3) { +- *pNewChannel = pEid->Octet[1]; //extract new channel number ++ *pNewChannel = pEid->Octet[1]; /*extract new channel number */ + } + break; + +- // New for WPA +- // CCX v2 has the same IE, we need to parse that too +- // Wifi WMM use the same IE vale, need to parse that too +- // case IE_WPA: ++ /* New for WPA */ ++ /* CCX v2 has the same IE, we need to parse that too */ ++ /* Wifi WMM use the same IE vale, need to parse that too */ ++ /* case IE_WPA: */ + case IE_VENDOR_SPECIFIC: +- // Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. ++ /* Check Broadcom/Atheros 802.11n OUI version, for HT Capability IE. */ ++ /* This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. */ + /*if (NdisEqualMemory(pEid->Octet, BROADCOM_OUI, 3) && (pEid->Len >= 4)) + { + if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) +@@ -529,19 +529,19 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + } + } + */ +- // Check the OUI version, filter out non-standard usage ++ /* Check the OUI version, filter out non-standard usage */ + if (NdisEqualMemory(pEid->Octet, RALINK_OUI, 3) + && (pEid->Len == 7)) { +- //*pRalinkIe = pEid->Octet[3]; ++ /**pRalinkIe = pEid->Octet[3]; */ + if (pEid->Octet[3] != 0) + *pRalinkIe = pEid->Octet[3]; + else +- *pRalinkIe = 0xf0000000; // Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag. ++ *pRalinkIe = 0xf0000000; /* Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag. */ + } +- // This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. ++ /* This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan. */ + +- // Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP, +- // Check broadcom-defiend pre-802.11nD1.0 OUI for HT related IE, including HT Capatilities IE and HT Information IE ++ /* Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP, */ ++ /* Check broadcom-defiend pre-802.11nD1.0 OUI for HT related IE, including HT Capatilities IE and HT Information IE */ + else if ((*pHtCapabilityLen == 0) + && NdisEqualMemory(pEid->Octet, PRE_N_HT_OUI, + 3) && (pEid->Len >= 4) +@@ -564,7 +564,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; + } + } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { +- // Copy to pVIE which will report to microsoft bssid list. ++ /* Copy to pVIE which will report to microsoft bssid list. */ + Ptr = (PUCHAR) pVIE; + NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, + pEid->Len + 2); +@@ -575,39 +575,39 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + PUCHAR ptr; + int i; + +- // parsing EDCA parameters ++ /* parsing EDCA parameters */ + pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; ++ pEdcaParm->bQAck = FALSE; /* pEid->Octet[0] & 0x10; */ ++ pEdcaParm->bQueueRequest = FALSE; /* pEid->Octet[0] & 0x20; */ ++ pEdcaParm->bTxopRequest = FALSE; /* pEid->Octet[0] & 0x40; */ + pEdcaParm->EdcaUpdateCount = + pEid->Octet[6] & 0x0f; + pEdcaParm->bAPSDCapable = + (pEid->Octet[6] & 0x80) ? 1 : 0; + ptr = &pEid->Octet[8]; + for (i = 0; i < 4; i++) { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); // in unit of 32-us +- ptr += 4; // point to next AC ++ UCHAR aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ ++ pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); /* b5 is ACM */ ++ pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; /* b0~3 is AIFSN */ ++ pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; /* b0~4 is Cwmin */ ++ pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; /* b5~8 is Cwmax */ ++ pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); /* in unit of 32-us */ ++ ptr += 4; /* point to next AC */ + } + } else + if (NdisEqualMemory(pEid->Octet, WME_INFO_ELEM, 6) + && (pEid->Len == 7)) { +- // parsing EDCA parameters ++ /* parsing EDCA parameters */ + pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; ++ pEdcaParm->bQAck = FALSE; /* pEid->Octet[0] & 0x10; */ ++ pEdcaParm->bQueueRequest = FALSE; /* pEid->Octet[0] & 0x20; */ ++ pEdcaParm->bTxopRequest = FALSE; /* pEid->Octet[0] & 0x40; */ + pEdcaParm->EdcaUpdateCount = + pEid->Octet[6] & 0x0f; + pEdcaParm->bAPSDCapable = + (pEid->Octet[6] & 0x80) ? 1 : 0; + +- // use default EDCA parameter ++ /* use default EDCA parameter */ + pEdcaParm->bACM[QID_AC_BE] = 0; + pEdcaParm->Aifsn[QID_AC_BE] = 3; + pEdcaParm->Cwmin[QID_AC_BE] = CW_MIN_IN_BITS; +@@ -625,7 +625,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + pEdcaParm->Cwmin[QID_AC_VI] = + CW_MIN_IN_BITS - 1; + pEdcaParm->Cwmax[QID_AC_VI] = CW_MAX_IN_BITS; +- pEdcaParm->Txop[QID_AC_VI] = 96; // AC_VI: 96*32us ~= 3ms ++ pEdcaParm->Txop[QID_AC_VI] = 96; /* AC_VI: 96*32us ~= 3ms */ + + pEdcaParm->bACM[QID_AC_VO] = 0; + pEdcaParm->Aifsn[QID_AC_VO] = 2; +@@ -633,7 +633,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + CW_MIN_IN_BITS - 2; + pEdcaParm->Cwmax[QID_AC_VO] = + CW_MAX_IN_BITS - 1; +- pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms ++ pEdcaParm->Txop[QID_AC_VO] = 48; /* AC_VO: 48*32us ~= 1.5ms */ + } + + break; +@@ -643,11 +643,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + NdisMoveMemory(ExtRate, pEid->Octet, pEid->Len); + *pExtRateLen = pEid->Len; + +- // TODO: 2004-09-14 not a good design here, cause it exclude extra rates +- // from ScanTab. We should report as is. And filter out unsupported +- // rates in MlmeAux. +- // Check against the supported rates +- // RTMPCheckRates(pAd, ExtRate, pExtRateLen); ++ /* TODO: 2004-09-14 not a good design here, cause it exclude extra rates */ ++ /* from ScanTab. We should report as is. And filter out unsupported */ ++ /* rates in MlmeAux. */ ++ /* Check against the supported rates */ ++ /* RTMPCheckRates(pAd, ExtRate, pExtRateLen); */ + } + break; + +@@ -658,32 +658,32 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + break; + + case IE_AIRONET_CKIP: +- // 0. Check Aironet IE length, it must be larger or equal to 28 +- // Cisco AP350 used length as 28 +- // Cisco AP12XX used length as 30 ++ /* 0. Check Aironet IE length, it must be larger or equal to 28 */ ++ /* Cisco AP350 used length as 28 */ ++ /* Cisco AP12XX used length as 30 */ + if (pEid->Len < (CKIP_NEGOTIATION_LENGTH - 2)) + break; + +- // 1. Copy CKIP flag byte to buffer for process ++ /* 1. Copy CKIP flag byte to buffer for process */ + *pCkipFlag = *(pEid->Octet + 8); + break; + + case IE_AP_TX_POWER: +- // AP Control of Client Transmit Power +- //0. Check Aironet IE length, it must be 6 ++ /* AP Control of Client Transmit Power */ ++ /*0. Check Aironet IE length, it must be 6 */ + if (pEid->Len != 0x06) + break; + +- // Get cell power limit in dBm ++ /* Get cell power limit in dBm */ + if (NdisEqualMemory(pEid->Octet, CISCO_OUI, 3) == 1) + *pAironetCellPowerLimit = *(pEid->Octet + 4); + break; + +- // WPA2 & 802.11i RSN ++ /* WPA2 & 802.11i RSN */ + case IE_RSN: +- // There is no OUI for version anymore, check the group cipher OUI before copying ++ /* There is no OUI for version anymore, check the group cipher OUI before copying */ + if (RTMPEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) { +- // Copy to pVIE which will report to microsoft bssid list. ++ /* Copy to pVIE which will report to microsoft bssid list. */ + Ptr = (PUCHAR) pVIE; + NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, + pEid->Len + 2); +@@ -695,11 +695,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + break; + } + +- Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len] ++ Length = Length + 2 + pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ + pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); + } + +- // For some 11a AP. it did not have the channel EID, patch here ++ /* For some 11a AP. it did not have the channel EID, patch here */ + { + UCHAR LatchRfChannel = MsgChannel; + if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0)) { +@@ -756,7 +756,7 @@ BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, + } + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + { + int i; +@@ -897,9 +897,9 @@ BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, + MLME_ASSOC_REQ_STRUCT *pInfo; + + pInfo = (MLME_ASSOC_REQ_STRUCT *) Msg; +- *pTimeout = pInfo->Timeout; // timeout +- COPY_MAC_ADDR(pApAddr, pInfo->Addr); // AP address +- *pCapabilityInfo = pInfo->CapabilityInfo; // capability info ++ *pTimeout = pInfo->Timeout; /* timeout */ ++ COPY_MAC_ADDR(pApAddr, pInfo->Addr); /* AP address */ ++ *pCapabilityInfo = pInfo->CapabilityInfo; /* capability info */ + *pListenIntv = pInfo->ListenIntv; + + return TRUE; +@@ -954,36 +954,36 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) + NetWorkType = Ndis802_11DS; + + if (pBss->Channel <= 14) { +- // +- // First check support Rate. +- // ++ /* */ ++ /* First check support Rate. */ ++ /* */ + for (i = 0; i < pBss->SupRateLen; i++) { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit ++ rate = pBss->SupRate[i] & 0x7f; /* Mask out basic rate set bit */ + if ((rate == 2) || (rate == 4) || (rate == 11) + || (rate == 22)) { + continue; + } else { +- // +- // Otherwise (even rate > 108) means Ndis802_11OFDM24 +- // ++ /* */ ++ /* Otherwise (even rate > 108) means Ndis802_11OFDM24 */ ++ /* */ + NetWorkType = Ndis802_11OFDM24; + break; + } + } + +- // +- // Second check Extend Rate. +- // ++ /* */ ++ /* Second check Extend Rate. */ ++ /* */ + if (NetWorkType != Ndis802_11OFDM24) { + for (i = 0; i < pBss->ExtRateLen; i++) { +- rate = pBss->SupRate[i] & 0x7f; // Mask out basic rate set bit ++ rate = pBss->SupRate[i] & 0x7f; /* Mask out basic rate set bit */ + if ((rate == 2) || (rate == 4) || (rate == 11) + || (rate == 22)) { + continue; + } else { +- // +- // Otherwise (even rate > 108) means Ndis802_11OFDM24 +- // ++ /* */ ++ /* Otherwise (even rate > 108) means Ndis802_11OFDM24 */ ++ /* */ + NetWorkType = Ndis802_11OFDM24; + break; + } +@@ -1033,22 +1033,22 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + + *((USHORT *) & EapolKeyInfo) = cpu2le16(*((USHORT *) & EapolKeyInfo)); + +- // Choose WPA2 or not ++ /* Choose WPA2 or not */ + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) + || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2 = TRUE; + +- // 0. Check MsgType ++ /* 0. Check MsgType */ + if ((MsgType > EAPOL_GROUP_MSG_2) || (MsgType < EAPOL_PAIR_MSG_1)) { + DBGPRINT(RT_DEBUG_ERROR, + ("The message type is invalid(%d)! \n", MsgType)); + return FALSE; + } +- // 1. Replay counter check +- if (MsgType == EAPOL_PAIR_MSG_1 || MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1) // For supplicant ++ /* 1. Replay counter check */ ++ if (MsgType == EAPOL_PAIR_MSG_1 || MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1) /* For supplicant */ + { +- // First validate replay counter, only accept message with larger replay counter. +- // Let equal pass, some AP start with all zero replay counter ++ /* First validate replay counter, only accept message with larger replay counter. */ ++ /* Let equal pass, some AP start with all zero replay counter */ + UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; + + NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); +@@ -1061,18 +1061,18 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + LEN_KEY_DESC_REPLAY) != 0)) { + bReplayDiff = TRUE; + } +- } else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) // For authenticator ++ } else if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) /* For authenticator */ + { +- // check Replay Counter coresponds to MSG from authenticator, otherwise discard ++ /* check Replay Counter coresponds to MSG from authenticator, otherwise discard */ + if (!NdisEqualMemory + (pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, + LEN_KEY_DESC_REPLAY)) { + bReplayDiff = TRUE; + } + } +- // Replay Counter different condition ++ /* Replay Counter different condition */ + if (bReplayDiff) { +- // send wireless event - for replay counter different ++ /* send wireless event - for replay counter different */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_REPLAY_COUNTER_DIFF_EVENT_FLAG, +@@ -1094,20 +1094,20 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + LEN_KEY_DESC_REPLAY); + return FALSE; + } +- // 2. Verify MIC except Pairwise Msg1 ++ /* 2. Verify MIC except Pairwise Msg1 */ + if (MsgType != EAPOL_PAIR_MSG_1) { + UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; + +- // Record the received MIC for check later ++ /* Record the received MIC for check later */ + NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, + LEN_KEY_DESC_MIC); + NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); + +- if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) // TKIP ++ if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) /* TKIP */ + { + HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, + MsgLen, mic, MD5_DIGEST_SIZE); +- } else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) // AES ++ } else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) /* AES */ + { + HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, + MsgLen, digest, SHA1_DIGEST_SIZE); +@@ -1115,7 +1115,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + } + + if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC)) { +- // send wireless event - for MIC different ++ /* send wireless event - for MIC different */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_MIC_DIFF_EVENT_FLAG, +@@ -1138,16 +1138,16 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + return FALSE; + } + } +- // 1. Decrypt the Key Data field if GTK is included. +- // 2. Extract the context of the Key Data field if it exist. +- // The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. +- // The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. ++ /* 1. Decrypt the Key Data field if GTK is included. */ ++ /* 2. Extract the context of the Key Data field if it exist. */ ++ /* The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. */ ++ /* The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. */ + if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) { +- // Decrypt this field ++ /* Decrypt this field */ + if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) + || (MsgType == EAPOL_GROUP_MSG_1)) { + if ((EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) { +- // AES ++ /* AES */ + AES_GTK_KEY_UNWRAP(&pEntry->PTK[16], KEYDATA, + CONV_ARRARY_TO_UINT16(pMsg-> + KeyDesc. +@@ -1156,17 +1156,17 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + } else { + INT i; + UCHAR Key[32]; +- // Decrypt TKIP GTK +- // Construct 32 bytes RC4 Key ++ /* Decrypt TKIP GTK */ ++ /* Construct 32 bytes RC4 Key */ + NdisMoveMemory(Key, pMsg->KeyDesc.KeyIv, 16); + NdisMoveMemory(&Key[16], &pEntry->PTK[16], 16); + ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, Key, + 32); +- //discard first 256 bytes ++ /*discard first 256 bytes */ + for (i = 0; i < 256; i++) + ARCFOUR_BYTE(&pAd->PrivateInfo. + WEPCONTEXT); +- // Decrypt GTK. Becareful, there is no ICV to check the result is correct or not ++ /* Decrypt GTK. Becareful, there is no ICV to check the result is correct or not */ + ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, + KEYDATA, pMsg->KeyDesc.KeyData, + CONV_ARRARY_TO_UINT16(pMsg-> +@@ -1187,10 +1187,10 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +- // Parse Key Data field to +- // 1. verify RSN IE for pairwise_msg_2_WPA1(WPA2) ,pairwise_msg_3_WPA1(WPA2) +- // 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 +- // 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) ++ /* Parse Key Data field to */ ++ /* 1. verify RSN IE for pairwise_msg_2_WPA1(WPA2) ,pairwise_msg_3_WPA1(WPA2) */ ++ /* 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 */ ++ /* 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) */ + if (!RTMPParseEapolKeyData(pAd, KEYDATA, + CONV_ARRARY_TO_UINT16(pMsg->KeyDesc. + KeyDataLen), +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index 9934a1b..c29e087 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -36,27 +36,27 @@ + */ + #include "../rt_config.h" + +-// 2.4 Ghz channel plan index in the TxPower arrays. +-#define BG_BAND_REGION_0_START 0 // 1,2,3,4,5,6,7,8,9,10,11 ++/* 2.4 Ghz channel plan index in the TxPower arrays. */ ++#define BG_BAND_REGION_0_START 0 /* 1,2,3,4,5,6,7,8,9,10,11 */ + #define BG_BAND_REGION_0_SIZE 11 +-#define BG_BAND_REGION_1_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13 ++#define BG_BAND_REGION_1_START 0 /* 1,2,3,4,5,6,7,8,9,10,11,12,13 */ + #define BG_BAND_REGION_1_SIZE 13 +-#define BG_BAND_REGION_2_START 9 // 10,11 ++#define BG_BAND_REGION_2_START 9 /* 10,11 */ + #define BG_BAND_REGION_2_SIZE 2 +-#define BG_BAND_REGION_3_START 9 // 10,11,12,13 ++#define BG_BAND_REGION_3_START 9 /* 10,11,12,13 */ + #define BG_BAND_REGION_3_SIZE 4 +-#define BG_BAND_REGION_4_START 13 // 14 ++#define BG_BAND_REGION_4_START 13 /* 14 */ + #define BG_BAND_REGION_4_SIZE 1 +-#define BG_BAND_REGION_5_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 ++#define BG_BAND_REGION_5_START 0 /* 1,2,3,4,5,6,7,8,9,10,11,12,13,14 */ + #define BG_BAND_REGION_5_SIZE 14 +-#define BG_BAND_REGION_6_START 2 // 3,4,5,6,7,8,9 ++#define BG_BAND_REGION_6_START 2 /* 3,4,5,6,7,8,9 */ + #define BG_BAND_REGION_6_SIZE 7 +-#define BG_BAND_REGION_7_START 4 // 5,6,7,8,9,10,11,12,13 ++#define BG_BAND_REGION_7_START 4 /* 5,6,7,8,9,10,11,12,13 */ + #define BG_BAND_REGION_7_SIZE 9 +-#define BG_BAND_REGION_31_START 0 // 1,2,3,4,5,6,7,8,9,10,11,12,13,14 ++#define BG_BAND_REGION_31_START 0 /* 1,2,3,4,5,6,7,8,9,10,11,12,13,14 */ + #define BG_BAND_REGION_31_SIZE 14 + +-// 5 Ghz channel plan index in the TxPower arrays. ++/* 5 Ghz channel plan index in the TxPower arrays. */ + UCHAR A_BAND_REGION_0_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 }; + UCHAR A_BAND_REGION_1_CHANNEL_LIST[] = +@@ -90,7 +90,7 @@ UCHAR A_BAND_REGION_14_CHANNEL_LIST[] = + 153, 157, 161, 165 }; + UCHAR A_BAND_REGION_15_CHANNEL_LIST[] = { 149, 153, 157, 161, 165, 169, 173 }; + +-//BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. ++/*BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. */ + UCHAR BaSizeArray[4] = { 8, 16, 32, 64 }; + + /* +@@ -113,76 +113,76 @@ VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + NdisZeroMemory(pAd->ChannelList, + MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); + +- // if not 11a-only mode, channel list starts from 2.4Ghz band ++ /* if not 11a-only mode, channel list starts from 2.4Ghz band */ + if ((pAd->CommonCfg.PhyMode != PHY_11A) + && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) + && (pAd->CommonCfg.PhyMode != PHY_11N_5G) + ) { + switch (pAd->CommonCfg.CountryRegion & 0x7f) { +- case REGION_0_BG_BAND: // 1 -11 ++ case REGION_0_BG_BAND: /* 1 -11 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_0_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_0_SIZE); + index += BG_BAND_REGION_0_SIZE; + break; +- case REGION_1_BG_BAND: // 1 - 13 ++ case REGION_1_BG_BAND: /* 1 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_1_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_1_SIZE); + index += BG_BAND_REGION_1_SIZE; + break; +- case REGION_2_BG_BAND: // 10 - 11 ++ case REGION_2_BG_BAND: /* 10 - 11 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_2_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_2_SIZE); + index += BG_BAND_REGION_2_SIZE; + break; +- case REGION_3_BG_BAND: // 10 - 13 ++ case REGION_3_BG_BAND: /* 10 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_3_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_3_SIZE); + index += BG_BAND_REGION_3_SIZE; + break; +- case REGION_4_BG_BAND: // 14 ++ case REGION_4_BG_BAND: /* 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_4_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_4_SIZE); + index += BG_BAND_REGION_4_SIZE; + break; +- case REGION_5_BG_BAND: // 1 - 14 ++ case REGION_5_BG_BAND: /* 1 - 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_5_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_5_SIZE); + index += BG_BAND_REGION_5_SIZE; + break; +- case REGION_6_BG_BAND: // 3 - 9 ++ case REGION_6_BG_BAND: /* 3 - 9 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_6_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_6_SIZE); + index += BG_BAND_REGION_6_SIZE; + break; +- case REGION_7_BG_BAND: // 5 - 13 ++ case REGION_7_BG_BAND: /* 5 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_7_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_7_SIZE); + index += BG_BAND_REGION_7_SIZE; + break; +- case REGION_31_BG_BAND: // 1 - 14 ++ case REGION_31_BG_BAND: /* 1 - 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_31_START], + sizeof(CHANNEL_TX_POWER) * + BG_BAND_REGION_31_SIZE); + index += BG_BAND_REGION_31_SIZE; + break; +- default: // Error. should never happen ++ default: /* Error. should never happen */ + break; + } + for (i = 0; i < index; i++) +@@ -295,7 +295,7 @@ VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + sizeof(UCHAR); + pChannelList = A_BAND_REGION_15_CHANNEL_LIST; + break; +- default: // Error. should never happen ++ default: /* Error. should never happen */ + DBGPRINT(RT_DEBUG_WARN, + ("countryregion=%d not support", + pAd->CommonCfg.CountryRegionForABand)); +@@ -411,12 +411,12 @@ UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, + IN UCHAR AironetCellPowerLimit) + { +- //valud 0xFF means that hasn't found power limit information +- //from the AP's Beacon/Probe response. ++ /*valud 0xFF means that hasn't found power limit information */ ++ /*from the AP's Beacon/Probe response. */ + if (AironetCellPowerLimit == 0xFF) + return; + +- if (AironetCellPowerLimit < 6) //Used Lowest Power Percentage. ++ if (AironetCellPowerLimit < 6) /*Used Lowest Power Percentage. */ + pAd->CommonCfg.TxPowerPercentage = 6; + else if (AironetCellPowerLimit < 9) + pAd->CommonCfg.TxPowerPercentage = 10; +@@ -427,7 +427,7 @@ VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, + else if (AironetCellPowerLimit < 15) + pAd->CommonCfg.TxPowerPercentage = 75; + else +- pAd->CommonCfg.TxPowerPercentage = 100; //else used maximum ++ pAd->CommonCfg.TxPowerPercentage = 100; /*else used maximum */ + + if (pAd->CommonCfg.TxPowerPercentage > pAd->CommonCfg.TxPowerDefault) + pAd->CommonCfg.TxPowerPercentage = +@@ -439,7 +439,7 @@ CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber) + { + UCHAR RssiOffset, LNAGain; + +- // Rssi equals to zero should be an invalid value ++ /* Rssi equals to zero should be an invalid value */ + if (Rssi == 0) + return -99; + +@@ -510,11 +510,11 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + } + + { +- // +- // To prevent data lost. +- // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +- // Now, we need to send an NULL data with turned PSM bit off to AP, when scan progress done +- // ++ /* */ ++ /* To prevent data lost. */ ++ /* Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. */ ++ /* Now, we need to send an NULL data with turned PSM bit off to AP, when scan progress done */ ++ /* */ + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + && (INFRA_ON(pAd))) { +@@ -532,7 +532,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + pHdr80211->FC.PwrMgmt = + (pAd->StaCfg.Psm == PWR_SAVE); + +- // Send using priority queue ++ /* Send using priority queue */ + MiniportMMRequest(pAd, 0, pOutBuffer, + sizeof + (HEADER_802_11)); +@@ -557,14 +557,14 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE); + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + else { + { +- // BBP and RF are not accessible in PS mode, we has to wake them up first ++ /* BBP and RF are not accessible in PS mode, we has to wake them up first */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + AsicForceWakeup(pAd, TRUE); + +- // leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON ++ /* leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON */ + if (pAd->StaCfg.Psm == PWR_SAVE) + RTMP_SET_PSM_BIT(pAd, PWR_ACTIVE); + } +@@ -584,18 +584,18 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + } + } + +- //Global country domain(ch1-11:active scan, ch12-14 passive scan) ++ /*Global country domain(ch1-11:active scan, ch12-14 passive scan) */ + if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) + && ((pAd->CommonCfg.CountryRegion & 0x7f) == + REGION_31_BG_BAND)) { + ScanType = SCAN_PASSIVE; + } +- // We need to shorten active scan time in order for WZC connect issue +- // Chnage the channel scan time for CISCO stuff based on its IAPP announcement ++ /* We need to shorten active scan time in order for WZC connect issue */ ++ /* Chnage the channel scan time for CISCO stuff based on its IAPP announcement */ + if (ScanType == FAST_SCAN_ACTIVE) + RTMPSetTimer(&pAd->MlmeAux.ScanTimer, + FAST_ACTIVE_SCAN_TIME); +- else // must be SCAN_PASSIVE or SCAN_ACTIVE ++ else /* must be SCAN_PASSIVE or SCAN_ACTIVE */ + { + if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) + || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) +@@ -615,7 +615,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + if ((ScanType == SCAN_ACTIVE) + || (ScanType == FAST_SCAN_ACTIVE) + ) { +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - ScanNextChannel() allocate memory fail\n")); +@@ -631,7 +631,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + + return; + } +- // There is no need to send broadcast probe request if active scan is in effect. ++ /* There is no need to send broadcast probe request if active scan is in effect. */ + if ((ScanType == SCAN_ACTIVE) + || (ScanType == FAST_SCAN_ACTIVE) + ) +@@ -694,7 +694,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } +- // For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse ++ /* For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse */ + + pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN; + } +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index b93c3fa..97f0543 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -37,7 +37,7 @@ + + #include "../rt_config.h" + +-// Rotation functions on 32 bit values ++/* Rotation functions on 32 bit values */ + #define ROL32( A, n ) \ + ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) + #define ROR32( A, n ) ROL32( (A), 32-(n) ) +@@ -112,9 +112,9 @@ UINT Tkip_Sbox_Upper[256] = { + 0x82, 0x29, 0x5A, 0x1E, 0x7B, 0xA8, 0x6D, 0x2C + }; + +-// +-// Expanded IV for TKIP function. +-// ++/* */ ++/* Expanded IV for TKIP function. */ ++/* */ + typedef struct PACKED _IV_CONTROL_ { + union PACKED { + struct PACKED { +@@ -216,10 +216,10 @@ VOID RTMPTkipPutUInt32(IN OUT PUCHAR pDst, IN ULONG val) + */ + VOID RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pMICKey) + { +- // Set the key ++ /* Set the key */ + pTkip->K0 = RTMPTkipGetUInt32(pMICKey); + pTkip->K1 = RTMPTkipGetUInt32(pMICKey + 4); +- // and reset the message ++ /* and reset the message */ + pTkip->L = pTkip->K0; + pTkip->R = pTkip->K1; + pTkip->nBytesInM = 0; +@@ -247,10 +247,10 @@ VOID RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pMICKey) + */ + VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) + { +- // Append the byte to our word-sized buffer ++ /* Append the byte to our word-sized buffer */ + pTkip->M |= (uChar << (8 * pTkip->nBytesInM)); + pTkip->nBytesInM++; +- // Process the word if it is full. ++ /* Process the word if it is full. */ + if (pTkip->nBytesInM >= 4) { + pTkip->L ^= pTkip->M; + pTkip->R ^= ROL32(pTkip->L, 17); +@@ -263,7 +263,7 @@ VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) + pTkip->L += pTkip->R; + pTkip->R ^= ROR32(pTkip->L, 2); + pTkip->L += pTkip->R; +- // Clear the buffer ++ /* Clear the buffer */ + pTkip->M = 0; + pTkip->nBytesInM = 0; + } +@@ -291,7 +291,7 @@ VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) + */ + VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes) + { +- // This is simple ++ /* This is simple */ + while (nBytes > 0) { + RTMPTkipAppendByte(pTkip, *pSrc++); + nBytes--; +@@ -318,17 +318,17 @@ VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes) + */ + VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) + { +- // Append the minimum padding ++ /* Append the minimum padding */ + RTMPTkipAppendByte(pTkip, 0x5a); + RTMPTkipAppendByte(pTkip, 0); + RTMPTkipAppendByte(pTkip, 0); + RTMPTkipAppendByte(pTkip, 0); + RTMPTkipAppendByte(pTkip, 0); +- // and then zeroes until the length is a multiple of 4 ++ /* and then zeroes until the length is a multiple of 4 */ + while (pTkip->nBytesInM != 0) { + RTMPTkipAppendByte(pTkip, 0); + } +- // The appendByte function has already computed the result. ++ /* The appendByte function has already computed the result. */ + RTMPTkipPutUInt32(pTkip->MIC, pTkip->L); + RTMPTkipPutUInt32(pTkip->MIC + 4, pTkip->R); + } +@@ -364,15 +364,15 @@ VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, + { + TKIP_IV tkipIv; + +- // Prepare 8 bytes TKIP encapsulation for MPDU ++ /* Prepare 8 bytes TKIP encapsulation for MPDU */ + NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); + tkipIv.IV16.field.rc0 = *(pTSC + 1); + tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; + tkipIv.IV16.field.rc2 = *pTSC; +- tkipIv.IV16.field.CONTROL.field.ExtIV = 1; // 0: non-extended IV, 1: an extended IV ++ tkipIv.IV16.field.CONTROL.field.ExtIV = 1; /* 0: non-extended IV, 1: an extended IV */ + tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; +-// tkipIv.IV32 = *(PULONG)(pTSC + 2); +- NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); // Copy IV ++/* tkipIv.IV32 = *(PULONG)(pTSC + 2); */ ++ NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); /* Copy IV */ + + *pIV16 = tkipIv.IV16.word; + *pIV32 = tkipIv.IV32; +@@ -406,13 +406,13 @@ VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, + { + ULONG Priority = UserPriority; + +- // Init MIC value calculation ++ /* Init MIC value calculation */ + RTMPTkipSetMICKey(&pAd->PrivateInfo.Tx, pMICKey); +- // DA ++ /* DA */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pDA, MAC_ADDR_LEN); +- // SA ++ /* SA */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 ++ /* Priority + 3 bytes of 0 */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR) & Priority, 4); + } + +@@ -450,28 +450,28 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + UCHAR OldMic[8]; + ULONG Priority = UserPriority; + +- // Init MIC value calculation ++ /* Init MIC value calculation */ + RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +- // DA ++ /* DA */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pDA, MAC_ADDR_LEN); +- // SA ++ /* SA */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); +- // Priority + 3 bytes of 0 ++ /* Priority + 3 bytes of 0 */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR) & Priority, 4); + +- // Calculate MIC value from plain text data ++ /* Calculate MIC value from plain text data */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); + +- // Get MIC valude from received frame ++ /* Get MIC valude from received frame */ + NdisMoveMemory(OldMic, pSrc + Len, 8); + +- // Get MIC value from decrypted plain data ++ /* Get MIC value from decrypted plain data */ + RTMPTkipGetMIC(&pAd->PrivateInfo.Rx); + +- // Move MIC value from MSDU, this steps should move to data path. +- // Since the MIC value might cross MPDUs. ++ /* Move MIC value from MSDU, this steps should move to data path. */ ++ /* Since the MIC value might cross MPDUs. */ + if (!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8)) { +- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error. ++ DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); /*MIC error. */ + + return (FALSE); + } +@@ -517,7 +517,7 @@ VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + UserPriority = RTMP_GET_PACKET_UP(pPacket); + pSrc = pSrcBufVA; + +- // determine if this is a vlan packet ++ /* determine if this is a vlan packet */ + if (((*(pSrc + 12) << 8) + *(pSrc + 13)) == 0x8100) + vlan_offset = 4; + +@@ -528,9 +528,9 @@ VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + } + + if (pEncap != NULL) { +- // LLC encapsulation ++ /* LLC encapsulation */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pEncap, 6); +- // Protocol Type ++ /* Protocol Type */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc + 12 + vlan_offset, + 2); + } +@@ -541,11 +541,11 @@ VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen); + } + +- break; // No need handle next packet ++ break; /* No need handle next packet */ + +- } while (TRUE); // End of copying payload ++ } while (TRUE); /* End of copying payload */ + +- // Compute the final MIC Value ++ /* Compute the final MIC Value */ + RTMPTkipGetMIC(&pAd->PrivateInfo.Tx); + } + +@@ -694,10 +694,10 @@ VOID RTMPTkipMixKey(UCHAR * key, UCHAR * ta, ULONG pnl, /* Least significant 16 + rc4key[15] = (ppk5 >> 8) % 256; + } + +-// +-// TRUE: Success! +-// FALSE: Decrypt Error! +-// ++/* */ ++/* TRUE: Success! */ ++/* FALSE: Decrypt Error! */ ++/* */ + BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + IN PUCHAR pData, + IN ULONG DataByteCnt, +@@ -721,7 +721,7 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + UCHAR DA[MAC_ADDR_LEN]; + UCHAR SA[MAC_ADDR_LEN]; + UCHAR RC4Key[16]; +- UINT p1k[5]; //for mix_key; ++ UINT p1k[5]; /*for mix_key; */ + ULONG pnl; /* Least significant 16 bits of PN */ + ULONG pnh; /* Most significant 32 bits of PN */ + UINT num_blocks; +@@ -778,7 +778,7 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + if (to_ds == 0 && from_ds == 1) { + NdisMoveMemory(DA, pData + 4, MAC_ADDR_LEN); + NdisMoveMemory(SA, pData + 16, MAC_ADDR_LEN); +- NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); //BSSID ++ NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); /*BSSID */ + } else if (to_ds == 0 && from_ds == 0) { + NdisMoveMemory(TA, pData + 10, MAC_ADDR_LEN); + NdisMoveMemory(DA, pData + 4, MAC_ADDR_LEN); +@@ -806,11 +806,11 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + ARCFOUR_DECRYPT(&ArcFourContext, pData + HeaderLen, + pData + HeaderLen + 8, DataByteCnt - HeaderLen - 8); + NdisMoveMemory(&trailfcs, pData + DataByteCnt - 8 - 4, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); //Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pData + HeaderLen, DataByteCnt - HeaderLen - 8 - 4); /*Skip IV+EIV 8 bytes & Skip last 4 bytes(FCS). */ + crc32 ^= 0xffffffff; /* complement */ + + if (crc32 != cpu2le32(trailfcs)) { +- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); //ICV error. ++ DBGPRINT(RT_DEBUG_TRACE, ("RTMPSoftDecryptTKIP, WEP Data ICV Error !\n")); /*ICV error. */ + + return (FALSE); + } +@@ -824,10 +824,10 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(MIC, pAd->PrivateInfo.Tx.MIC, 8); + + if (!NdisEqualMemory(MIC, TrailMIC, 8)) { +- DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); //MIC error. +- //RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 ++ DBGPRINT(RT_DEBUG_ERROR, ("RTMPSoftDecryptTKIP, WEP Data MIC Error !\n")); /*MIC error. */ ++ /*RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 */ + return (FALSE); + } +- //DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); ++ /*DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); */ + return TRUE; + } +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +index 4f407e9..db40139 100644 +--- a/drivers/staging/rt2860/common/cmm_wep.c ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -141,25 +141,25 @@ VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, + { + UINT i; + UCHAR WEPKEY[] = { +- //IV ++ /*IV */ + 0x00, 0x11, 0x22, +- //WEP KEY ++ /*WEP KEY */ + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, + 0xAA, 0xBB, 0xCC + }; + +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; /*Init crc32. */ + + { + NdisMoveMemory(WEPKEY + 3, pKey, KeyLen); + + for (i = 0; i < 3; i++) +- WEPKEY[i] = RandomByte(pAd); //Call mlme RandomByte() function. +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); //INIT SBOX, KEYLEN+3(IV) ++ WEPKEY[i] = RandomByte(pAd); /*Call mlme RandomByte() function. */ ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, WEPKEY, KeyLen + 3); /*INIT SBOX, KEYLEN+3(IV) */ + +- NdisMoveMemory(pDest, WEPKEY, 3); //Append Init Vector ++ NdisMoveMemory(pDest, WEPKEY, 3); /*Append Init Vector */ + } +- *(pDest + 3) = (KeyId << 6); //Append KEYID ++ *(pDest + 3) = (KeyId << 6); /*Append KEYID */ + + } + +@@ -219,16 +219,16 @@ BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, + UINT crc32; + UCHAR KeyIdx; + UCHAR WEPKEY[] = { +- //IV ++ /*IV */ + 0x00, 0x11, 0x22, +- //WEP KEY ++ /*WEP KEY */ + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, + 0xAA, 0xBB, 0xCC + }; + UCHAR *pPayload = (UCHAR *) pData + LENGTH_802_11; + ULONG payload_len = DataByteCnt - LENGTH_802_11; + +- NdisMoveMemory(WEPKEY, pPayload, 3); //Get WEP IV ++ NdisMoveMemory(WEPKEY, pPayload, 3); /*Get WEP IV */ + + KeyIdx = (*(pPayload + 3) & 0xc0) >> 6; + if (pGroupKey[KeyIdx].KeyLen == 0) +@@ -241,11 +241,11 @@ BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, + ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, pPayload, pPayload + 4, + payload_len - 4); + NdisMoveMemory(&trailfcs, pPayload + payload_len - 8, 4); +- crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); //Skip last 4 bytes(FCS). ++ crc32 = RTMP_CALC_FCS32(PPPINITFCS32, pPayload, payload_len - 8); /*Skip last 4 bytes(FCS). */ + crc32 ^= 0xffffffff; /* complement */ + + if (crc32 != cpu2le32(trailfcs)) { +- DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); //CRC error. ++ DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); /*CRC error. */ + return (FALSE); + } + return (TRUE); +@@ -411,7 +411,7 @@ VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) + { + UINT i; +- //discard first 256 bytes ++ /*discard first 256 bytes */ + for (i = 0; i < 256; i++) + ARCFOUR_BYTE(Ctx); + +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 4d070af..6940d77 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -36,7 +36,7 @@ + Paul Lin 03-11-28 Modify for supplicant + */ + #include "../rt_config.h" +-// WPA OUI ++/* WPA OUI */ + UCHAR OUI_WPA_NONE_AKM[4] = { 0x00, 0x50, 0xF2, 0x00 }; + UCHAR OUI_WPA_VERSION[4] = { 0x00, 0x50, 0xF2, 0x01 }; + UCHAR OUI_WPA_WEP40[4] = { 0x00, 0x50, 0xF2, 0x01 }; +@@ -46,7 +46,7 @@ UCHAR OUI_WPA_WEP104[4] = { 0x00, 0x50, 0xF2, 0x05 }; + UCHAR OUI_WPA_8021X_AKM[4] = { 0x00, 0x50, 0xF2, 0x01 }; + UCHAR OUI_WPA_PSK_AKM[4] = { 0x00, 0x50, 0xF2, 0x02 }; + +-// WPA2 OUI ++/* WPA2 OUI */ + UCHAR OUI_WPA2_WEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 }; + UCHAR OUI_WPA2_TKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 }; + UCHAR OUI_WPA2_CCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 }; +@@ -143,7 +143,7 @@ VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + pHeader = (PHEADER_802_11) Elem->Msg; + +- //For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. ++ /*For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. */ + if (Elem->MsgLen == 6) + pEntry = MacTableLookup(pAd, Elem->Msg); + else { +@@ -232,41 +232,41 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("Key descripter does not match with WPA rule\n")); + break; + } +- // The value 1 shall be used for all EAPOL-Key frames to and from a STA when +- // neither the group nor pairwise ciphers are CCMP for Key Descriptor 1. ++ /* The value 1 shall be used for all EAPOL-Key frames to and from a STA when */ ++ /* neither the group nor pairwise ciphers are CCMP for Key Descriptor 1. */ + if ((pEntry->WepStatus == Ndis802_11Encryption2Enabled) + && (peerKeyInfo.KeyDescVer != DESC_TYPE_TKIP)) { + DBGPRINT(RT_DEBUG_ERROR, + ("Key descripter version not match(TKIP) \n")); + break; + } +- // The value 2 shall be used for all EAPOL-Key frames to and from a STA when +- // either the pairwise or the group cipher is AES-CCMP for Key Descriptor 2. ++ /* The value 2 shall be used for all EAPOL-Key frames to and from a STA when */ ++ /* either the pairwise or the group cipher is AES-CCMP for Key Descriptor 2. */ + else if ((pEntry->WepStatus == Ndis802_11Encryption3Enabled) + && (peerKeyInfo.KeyDescVer != DESC_TYPE_AES)) { + DBGPRINT(RT_DEBUG_ERROR, + ("Key descripter version not match(AES) \n")); + break; + } +- // Check if this STA is in class 3 state and the WPA state is started ++ /* Check if this STA is in class 3 state and the WPA state is started */ + if ((pEntry->Sst == SST_ASSOC) + && (pEntry->WpaState >= AS_INITPSK)) { +- // Check the Key Ack (bit 7) of the Key Information to determine the Authenticator +- // or not. +- // An EAPOL-Key frame that is sent by the Supplicant in response to an EAPOL- +- // Key frame from the Authenticator must not have the Ack bit set. ++ /* Check the Key Ack (bit 7) of the Key Information to determine the Authenticator */ ++ /* or not. */ ++ /* An EAPOL-Key frame that is sent by the Supplicant in response to an EAPOL- */ ++ /* Key frame from the Authenticator must not have the Ack bit set. */ + if (peerKeyInfo.KeyAck == 1) { +- // The frame is snet by Authenticator. +- // So the Supplicant side shall handle this. ++ /* The frame is snet by Authenticator. */ ++ /* So the Supplicant side shall handle this. */ + + if ((peerKeyInfo.Secure == 0) + && (peerKeyInfo.Request == 0) + && (peerKeyInfo.Error == 0) + && (peerKeyInfo.KeyType == PAIRWISEKEY)) { +- // Process 1. the message 1 of 4-way HS in WPA or WPA2 +- // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) +- // 2. the message 3 of 4-way HS in WPA +- // EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) ++ /* Process 1. the message 1 of 4-way HS in WPA or WPA2 */ ++ /* EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) */ ++ /* 2. the message 3 of 4-way HS in WPA */ ++ /* EAPOL-Key(0,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) */ + if (peerKeyInfo.KeyMic == 0) + PeerPairMsg1Action(pAd, pEntry, + Elem); +@@ -277,10 +277,10 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + && (peerKeyInfo.KeyMic == 1) + && (peerKeyInfo.Request == 0) + && (peerKeyInfo.Error == 0)) { +- // Process 1. the message 3 of 4-way HS in WPA2 +- // EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) +- // 2. the message 1 of group KS in WPA or WPA2 +- // EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) ++ /* Process 1. the message 3 of 4-way HS in WPA2 */ ++ /* EAPOL-Key(1,1,1,1,P,0,KeyRSC,ANonce,MIC,DataKD_M3) */ ++ /* 2. the message 1 of group KS in WPA or WPA2 */ ++ /* EAPOL-Key(1,1,1,0,G,0,Key RSC,0, MIC,GTK[N]) */ + if (peerKeyInfo.KeyType == PAIRWISEKEY) + PeerPairMsg3Action(pAd, pEntry, + Elem); +@@ -289,17 +289,17 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Elem); + } + } else { +- // The frame is snet by Supplicant. +- // So the Authenticator side shall handle this. ++ /* The frame is snet by Supplicant. */ ++ /* So the Authenticator side shall handle this. */ + if ((peerKeyInfo.Request == 0) && + (peerKeyInfo.Error == 0) && + (peerKeyInfo.KeyMic == 1)) { + if (peerKeyInfo.Secure == 0 + && peerKeyInfo.KeyType == + PAIRWISEKEY) { +- // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) +- // Process 1. message 2 of 4-way HS in WPA or WPA2 +- // 2. message 4 of 4-way HS in WPA ++ /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) */ ++ /* Process 1. message 2 of 4-way HS in WPA or WPA2 */ ++ /* 2. message 4 of 4-way HS in WPA */ + if (CONV_ARRARY_TO_UINT16 + (pEapol_packet->KeyDesc. + KeyDataLen) == 0) { +@@ -314,15 +314,15 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } else if (peerKeyInfo.Secure == 1 + && peerKeyInfo.KeyType == + PAIRWISEKEY) { +- // EAPOL-Key(1,1,0,0,P,0,0,0,MIC,0) +- // Process message 4 of 4-way HS in WPA2 ++ /* EAPOL-Key(1,1,0,0,P,0,0,0,MIC,0) */ ++ /* Process message 4 of 4-way HS in WPA2 */ + PeerPairMsg4Action(pAd, pEntry, + Elem); + } else if (peerKeyInfo.Secure == 1 + && peerKeyInfo.KeyType == + GROUPKEY) { +- // EAPOL-Key(1,1,0,0,G,0,0,0,MIC,0) +- // Process message 2 of Group key HS in WPA or WPA2 ++ /* EAPOL-Key(1,1,0,0,G,0,0,0,MIC,0) */ ++ /* Process message 2 of Group key HS in WPA or WPA2 */ + PeerGroupMsg2Action(pAd, pEntry, + &Elem-> + Msg +@@ -370,7 +370,7 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + return; + + do { +- // build a NDIS packet ++ /* build a NDIS packet */ + Status = + RTMPAllocateNdisPacket(pAd, &pPacket, pHeader802_3, HdrLen, + pData, DataLen); +@@ -384,7 +384,7 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + { + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); + +- RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, MAIN_MBSSID); // set a default value ++ RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, MAIN_MBSSID); /* set a default value */ + if (pEntry->apidx != 0) + RTMP_SET_PACKET_NET_DEVICE_MBSSID(pPacket, + pEntry-> +@@ -395,16 +395,16 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + } + + { +- // send out the packet ++ /* send out the packet */ + Status = STASendPacket(pAd, pPacket); + if (Status == NDIS_STATUS_SUCCESS) { + UCHAR Index; + +- // Dequeue one frame from TxSwQueue0..3 queue and process it +- // There are three place calling dequeue for TX ring. +- // 1. Here, right after queueing the frame. +- // 2. At the end of TxRingTxDone service routine. +- // 3. Upon NDIS call RTMPSendPackets ++ /* Dequeue one frame from TxSwQueue0..3 queue and process it */ ++ /* There are three place calling dequeue for TX ring. */ ++ /* 1. Here, right after queueing the frame. */ ++ /* 2. At the end of TxRingTxDone service routine. */ ++ /* 3. Upon NDIS call RTMPSendPackets */ + if ((!RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + && +@@ -457,30 +457,30 @@ VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + ("[ERROR]WPAStart4WayHS : No corresponding Authenticator.\n")); + return; + } +- // Check the status ++ /* Check the status */ + if ((pEntry->WpaState > AS_PTKSTART) || (pEntry->WpaState < AS_INITPMK)) { + DBGPRINT(RT_DEBUG_ERROR, + ("[ERROR]WPAStart4WayHS : Not expect calling\n")); + return; + } + +- // Increment replay counter by 1 ++ /* Increment replay counter by 1 */ + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + +- // Randomly generate ANonce ++ /* Randomly generate ANonce */ + GenRandom(pAd, (UCHAR *) pBssid, pEntry->ANonce); + +- // Construct EAPoL message - Pairwise Msg 1 +- // EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) ++ /* Construct EAPoL message - Pairwise Msg 1 */ ++ /* EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_1, 0, // Default key index +- pEntry->ANonce, NULL, // TxRSC +- NULL, // GTK +- NULL, // RSNIE +- 0, // RSNIE length ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_1, 0, /* Default key index */ ++ pEntry->ANonce, NULL, /* TxRSC */ ++ NULL, /* GTK */ ++ NULL, /* RSNIE */ ++ 0, /* RSNIE length */ + &EAPOLPKT); + +- // Make outgoing frame ++ /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, Header802_3, + LENGTH_802_3, (PUCHAR) & EAPOLPKT, +@@ -488,10 +488,10 @@ VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + (pEntry->PortSecured == + WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); + +- // Trigger Retry Timer ++ /* Trigger Retry Timer */ + RTMPModTimer(&pEntry->RetryTimer, TimeInterval); + +- // Update State ++ /* Update State */ + pEntry->WpaState = AS_PTKSTART; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -548,50 +548,50 @@ VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + rsnie_len = pAd->StaCfg.RSNIE_Len; + } + +- // Store the received frame ++ /* Store the received frame */ + pMsg1 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Sanity Check peer Pairwise message 1 - Replay Counter ++ /* Sanity Check peer Pairwise message 1 - Replay Counter */ + if (PeerWpaMessageSanity(pAd, pMsg1, MsgLen, EAPOL_PAIR_MSG_1, pEntry) + == FALSE) + return; + +- // Store Replay counter, it will use to verify message 3 and construct message 2 ++ /* Store Replay counter, it will use to verify message 3 and construct message 2 */ + NdisMoveMemory(pEntry->R_Counter, pMsg1->KeyDesc.ReplayCounter, + LEN_KEY_DESC_REPLAY); + +- // Store ANonce ++ /* Store ANonce */ + NdisMoveMemory(pEntry->ANonce, pMsg1->KeyDesc.KeyNonce, + LEN_KEY_DESC_NONCE); + +- // Generate random SNonce ++ /* Generate random SNonce */ + GenRandom(pAd, (UCHAR *) pCurrentAddr, pEntry->SNonce); + + { +- // Calculate PTK(ANonce, SNonce) ++ /* Calculate PTK(ANonce, SNonce) */ + WpaDerivePTK(pAd, + pmk_ptr, + pEntry->ANonce, + pEntry->Addr, + pEntry->SNonce, pCurrentAddr, PTK, LEN_PTK); + +- // Save key to PTK entry ++ /* Save key to PTK entry */ + NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); + } + +- // Update WpaState ++ /* Update WpaState */ + pEntry->WpaState = AS_PTKINIT_NEGOTIATING; + +- // Construct EAPoL message - Pairwise Msg 2 +- // EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) ++ /* Construct EAPoL message - Pairwise Msg 2 */ ++ /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, // DefaultKeyIdx +- pEntry->SNonce, NULL, // TxRsc +- NULL, // GTK ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, /* DefaultKeyIdx */ ++ pEntry->SNonce, NULL, /* TxRsc */ ++ NULL, /* GTK */ + (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); + +- // Make outgoing frame ++ /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + + RTMPToWirelessSta(pAd, pEntry, +@@ -638,46 +638,46 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) + return; + +- // check Entry in valid State ++ /* check Entry in valid State */ + if (pEntry->WpaState < AS_PTKSTART) + return; + +- // pointer to 802.11 header ++ /* pointer to 802.11 header */ + pHeader = (PHEADER_802_11) Elem->Msg; + +- // skip 802.11_header(24-byte) and LLC_header(8) ++ /* skip 802.11_header(24-byte) and LLC_header(8) */ + pMsg2 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Store SNonce ++ /* Store SNonce */ + NdisMoveMemory(pEntry->SNonce, pMsg2->KeyDesc.KeyNonce, + LEN_KEY_DESC_NONCE); + + { +- // Derive PTK +- WpaDerivePTK(pAd, (UCHAR *) pmk_ptr, pEntry->ANonce, // ANONCE +- (UCHAR *) pBssid, pEntry->SNonce, // SNONCE ++ /* Derive PTK */ ++ WpaDerivePTK(pAd, (UCHAR *) pmk_ptr, pEntry->ANonce, /* ANONCE */ ++ (UCHAR *) pBssid, pEntry->SNonce, /* SNONCE */ + pEntry->Addr, PTK, LEN_PTK); + + NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); + } + +- // Sanity Check peer Pairwise message 2 - Replay Counter, MIC, RSNIE ++ /* Sanity Check peer Pairwise message 2 - Replay Counter, MIC, RSNIE */ + if (PeerWpaMessageSanity(pAd, pMsg2, MsgLen, EAPOL_PAIR_MSG_2, pEntry) + == FALSE) + return; + + do { +- // delete retry timer ++ /* delete retry timer */ + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + +- // Change state ++ /* Change state */ + pEntry->WpaState = AS_PTKINIT_NEGOTIATING; + +- // Increment replay counter by 1 ++ /* Increment replay counter by 1 */ + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + +- // Construct EAPoL message - Pairwise Msg 3 ++ /* Construct EAPoL message - Pairwise Msg 3 */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); + ConstructEapolMsg(pEntry, + group_cipher, +@@ -688,7 +688,7 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + (UCHAR *) gtk_ptr, + (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); + +- // Make outgoing frame ++ /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, + (PUCHAR) & EAPOLPKT, +@@ -699,7 +699,7 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + pEntry->ReTryCounter = PEER_MSG3_RETRY_TIMER_CTR; + RTMPSetTimer(&pEntry->RetryTimer, PEER_MSG3_RETRY_EXEC_INTV); + +- // Update State ++ /* Update State */ + pEntry->WpaState = AS_PTKINIT_NEGOTIATING; + } while (FALSE); + +@@ -751,38 +751,38 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + + } + +- // Record 802.11 header & the received EAPOL packet Msg3 ++ /* Record 802.11 header & the received EAPOL packet Msg3 */ + pHeader = (PHEADER_802_11) Elem->Msg; + pMsg3 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE ++ /* Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE */ + if (PeerWpaMessageSanity(pAd, pMsg3, MsgLen, EAPOL_PAIR_MSG_3, pEntry) + == FALSE) + return; + +- // Save Replay counter, it will use construct message 4 ++ /* Save Replay counter, it will use construct message 4 */ + NdisMoveMemory(pEntry->R_Counter, pMsg3->KeyDesc.ReplayCounter, + LEN_KEY_DESC_REPLAY); + +- // Double check ANonce ++ /* Double check ANonce */ + if (!NdisEqualMemory + (pEntry->ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE)) { + return; + } +- // Construct EAPoL message - Pairwise Msg 4 ++ /* Construct EAPoL message - Pairwise Msg 4 */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_4, 0, // group key index not used in message 4 +- NULL, // Nonce not used in message 4 +- NULL, // TxRSC not used in message 4 +- NULL, // GTK not used in message 4 +- NULL, // RSN IE not used in message 4 ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_4, 0, /* group key index not used in message 4 */ ++ NULL, /* Nonce not used in message 4 */ ++ NULL, /* TxRSC not used in message 4 */ ++ NULL, /* GTK not used in message 4 */ ++ NULL, /* RSN IE not used in message 4 */ + 0, &EAPOLPKT); + +- // Update WpaState ++ /* Update WpaState */ + pEntry->WpaState = AS_PTKINITDONE; + +- // Update pairwise key ++ /* Update pairwise key */ + { + PCIPHER_KEY pSharedKey; + +@@ -790,7 +790,7 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + + NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); + +- // Prepare pair-wise key information into shared key table ++ /* Prepare pair-wise key information into shared key table */ + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], +@@ -801,7 +801,7 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], + LEN_TKIP_TXMICK); + +- // Decide its ChiperAlg ++ /* Decide its ChiperAlg */ + if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) + pSharedKey->CipherAlg = CIPHER_TKIP; + else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +@@ -809,7 +809,7 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + else + pSharedKey->CipherAlg = CIPHER_NONE; + +- // Update these related information to MAC_TABLE_ENTRY ++ /* Update these related information to MAC_TABLE_ENTRY */ + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], + LEN_TKIP_EK); +@@ -820,7 +820,7 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + LEN_TKIP_TXMICK); + pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; + +- // Update pairwise key information to ASIC Shared Key Table ++ /* Update pairwise key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + 0, +@@ -828,21 +828,21 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + pSharedKey->Key, + pSharedKey->TxMic, pSharedKey->RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + 0, pSharedKey->CipherAlg, pEntry); + + } + +- // open 802.1x port control and privacy filter ++ /* open 802.1x port control and privacy filter */ + if (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK || + pEntry->AuthMode == Ndis802_11AuthModeWPA2) { + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + + STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI ++ /* Indicate Connected for GUI */ + pAd->IndicateMediaState = NdisMediaStateConnected; + DBGPRINT(RT_DEBUG_TRACE, + ("PeerPairMsg3Action: AuthMode(%s) PairwiseCipher(%s) GroupCipher(%s) \n", +@@ -852,7 +852,7 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + } else { + } + +- // Init 802.3 header and send out ++ /* Init 802.3 header and send out */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, sizeof(Header802_3), +@@ -894,23 +894,23 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) + break; + +- // pointer to 802.11 header ++ /* pointer to 802.11 header */ + pHeader = (PHEADER_802_11) Elem->Msg; + +- // skip 802.11_header(24-byte) and LLC_header(8) ++ /* skip 802.11_header(24-byte) and LLC_header(8) */ + pMsg4 = + (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Sanity Check peer Pairwise message 4 - Replay Counter, MIC ++ /* Sanity Check peer Pairwise message 4 - Replay Counter, MIC */ + if (PeerWpaMessageSanity + (pAd, pMsg4, MsgLen, EAPOL_PAIR_MSG_4, pEntry) == FALSE) + break; + +- // 3. uses the MLME.SETKEYS.request to configure PTK into MAC ++ /* 3. uses the MLME.SETKEYS.request to configure PTK into MAC */ + NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); + +- // reset IVEIV in Asic ++ /* reset IVEIV in Asic */ + AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, 1, 0); + + pEntry->PairwiseKey.KeyLen = LEN_TKIP_EK; +@@ -923,7 +923,7 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + &pEntry->PTK[TKIP_AP_TXMICK_OFFSET], + LEN_TKIP_TXMICK); + +- // Set pairwise key to Asic ++ /* Set pairwise key to Asic */ + { + pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; + if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) +@@ -932,13 +932,13 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + Ndis802_11Encryption3Enabled) + pEntry->PairwiseKey.CipherAlg = CIPHER_AES; + +- // Add Pair-wise key to Asic ++ /* Add Pair-wise key to Asic */ + AsicAddPairwiseKeyEntry(pAd, + pEntry->Addr, + (UCHAR) pEntry->Aid, + &pEntry->PairwiseKey); + +- // update WCID attribute table and IVEIV table for this entry ++ /* update WCID attribute table and IVEIV table for this entry */ + RTMPAddWcidAttributeEntry(pAd, + pEntry->apidx, + 0, +@@ -946,7 +946,7 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + pEntry); + } + +- // 4. upgrade state ++ /* 4. upgrade state */ + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + pEntry->WpaState = AS_PTKINITDONE; + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; +@@ -956,7 +956,7 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + pEntry->GTKState = REKEY_ESTABLISHED; + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + +- // send wireless event - for set key done WPA2 ++ /* send wireless event - for set key done WPA2 */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_SET_KEY_DONE_WPA2_EVENT_FLAG, +@@ -971,7 +971,7 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + GetEncryptType(pEntry->WepStatus), + group_cipher, GetEncryptType(group_cipher))); + } else { +- // 5. init Group 2-way handshake if necessary. ++ /* 5. init Group 2-way handshake if necessary. */ + WPAStart2WayGroupHS(pAd, pEntry); + + pEntry->ReTryCounter = GROUP_MSG1_RETRY_TIMER_CTR; +@@ -1007,10 +1007,10 @@ VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + return; + + do { +- // Increment replay counter by 1 ++ /* Increment replay counter by 1 */ + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + +- // Construct EAPoL message - Group Msg 1 ++ /* Construct EAPoL message - Group Msg 1 */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); + ConstructEapolMsg(pEntry, + group_cipher, +@@ -1019,7 +1019,7 @@ VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + (UCHAR *) gnonce_ptr, + TxTsc, (UCHAR *) gtk_ptr, NULL, 0, &EAPOLPKT); + +- // Make outgoing frame ++ /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, LENGTH_802_3, +@@ -1075,36 +1075,36 @@ VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + default_key = pAd->StaCfg.DefaultKeyId; + } + +- // Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) ++ /* Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) */ + pGroup = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + +- // Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE ++ /* Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE */ + if (PeerWpaMessageSanity(pAd, pGroup, MsgLen, EAPOL_GROUP_MSG_1, pEntry) + == FALSE) + return; + +- // delete retry timer ++ /* delete retry timer */ + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + +- // Save Replay counter, it will use to construct message 2 ++ /* Save Replay counter, it will use to construct message 2 */ + NdisMoveMemory(pEntry->R_Counter, pGroup->KeyDesc.ReplayCounter, + LEN_KEY_DESC_REPLAY); + +- // Construct EAPoL message - Group Msg 2 ++ /* Construct EAPoL message - Group Msg 2 */ + NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); +- ConstructEapolMsg(pEntry, group_cipher, EAPOL_GROUP_MSG_2, default_key, NULL, // Nonce not used +- NULL, // TxRSC not used +- NULL, // GTK not used +- NULL, // RSN IE not used ++ ConstructEapolMsg(pEntry, group_cipher, EAPOL_GROUP_MSG_2, default_key, NULL, /* Nonce not used */ ++ NULL, /* TxRSC not used */ ++ NULL, /* GTK not used */ ++ NULL, /* RSN IE not used */ + 0, &EAPOLPKT); + +- // open 802.1x port control and privacy filter ++ /* open 802.1x port control and privacy filter */ + pEntry->PortSecured = WPA_802_1X_PORT_SECURED; + pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll; + + STA_PORT_SECURED(pAd); +- // Indicate Connected for GUI ++ /* Indicate Connected for GUI */ + pAd->IndicateMediaState = NdisMediaStateConnected; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1113,7 +1113,7 @@ VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + GetEncryptType(pEntry->WepStatus), + GetEncryptType(group_cipher))); + +- // init header and Fill Packet and send Msg 2 to authenticator ++ /* init header and Fill Packet and send Msg 2 to authenticator */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, sizeof(Header802_3), +@@ -1159,19 +1159,19 @@ VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); + Len = MsgLen - LENGTH_802_1_H; + +- // Sanity Check peer group message 2 - Replay Counter, MIC ++ /* Sanity Check peer group message 2 - Replay Counter, MIC */ + if (PeerWpaMessageSanity + (pAd, pMsg2, Len, EAPOL_GROUP_MSG_2, pEntry) == FALSE) + break; + +- // 3. upgrade state ++ /* 3. upgrade state */ + + RTMPCancelTimer(&pEntry->RetryTimer, &Cancelled); + pEntry->GTKState = REKEY_ESTABLISHED; + + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) + || (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) { +- // send wireless event - for set key done WPA2 ++ /* send wireless event - for set key done WPA2 */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_SET_KEY_DONE_WPA2_EVENT_FLAG, +@@ -1186,7 +1186,7 @@ VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + GetEncryptType(pEntry->WepStatus), + group_cipher, GetEncryptType(group_cipher))); + } else { +- // send wireless event - for set key done WPA ++ /* send wireless event - for set key done WPA */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_SET_KEY_DONE_WPA1_EVENT_FLAG, +@@ -1288,36 +1288,36 @@ VOID PRF(IN UCHAR * key, + INT currentindex = 0; + INT total_len; + +- // Allocate memory for input ++ /* Allocate memory for input */ + os_alloc_mem(NULL, (PUCHAR *) & input, 1024); + + if (input == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); + return; + } +- // Generate concatenation input ++ /* Generate concatenation input */ + NdisMoveMemory(input, prefix, prefix_len); + +- // Concatenate a single octet containing 0 ++ /* Concatenate a single octet containing 0 */ + input[prefix_len] = 0; + +- // Concatenate specific data ++ /* Concatenate specific data */ + NdisMoveMemory(&input[prefix_len + 1], data, data_len); + total_len = prefix_len + 1 + data_len; + +- // Concatenate a single octet containing 0 +- // This octet shall be update later ++ /* Concatenate a single octet containing 0 */ ++ /* This octet shall be update later */ + input[total_len] = 0; + total_len++; + +- // Iterate to calculate the result by hmac-sha-1 +- // Then concatenate to last result ++ /* Iterate to calculate the result by hmac-sha-1 */ ++ /* Then concatenate to last result */ + for (i = 0; i < (len + 19) / 20; i++) { + HMAC_SHA1(key, key_len, input, total_len, &output[currentindex], + SHA1_DIGEST_SIZE); + currentindex += 20; + +- // update the last octet ++ /* update the last octet */ + input[total_len - 1]++; + } + os_free_mem(NULL, input); +@@ -1342,14 +1342,14 @@ static void F(char *password, unsigned char *ssid, int ssidlength, + digest[ssidlength + 1] = (unsigned char)((count >> 16) & 0xff); + digest[ssidlength + 2] = (unsigned char)((count >> 8) & 0xff); + digest[ssidlength + 3] = (unsigned char)(count & 0xff); +- HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest, ssidlength + 4, digest1, SHA1_DIGEST_SIZE); // for WPA update ++ HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest, ssidlength + 4, digest1, SHA1_DIGEST_SIZE); /* for WPA update */ + + /* output = U1 */ + memcpy(output, digest1, SHA1_DIGEST_SIZE); + + for (i = 1; i < iterations; i++) { + /* Un = PRF(P, Un-1) */ +- HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); // for WPA update ++ HMAC_SHA1((unsigned char *)password, (int)strlen(password), digest1, SHA1_DIGEST_SIZE, digest, SHA1_DIGEST_SIZE); /* for WPA update */ + memcpy(digest1, digest, SHA1_DIGEST_SIZE); + + /* output = output xor Un */ +@@ -1414,40 +1414,40 @@ VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, + 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n' + }; + +- // initiate the concatenation input ++ /* initiate the concatenation input */ + NdisZeroMemory(temp, sizeof(temp)); + NdisZeroMemory(concatenation, 76); + +- // Get smaller address ++ /* Get smaller address */ + if (RTMPCompareMemory(SA, AA, 6) == 1) + NdisMoveMemory(concatenation, AA, 6); + else + NdisMoveMemory(concatenation, SA, 6); + CurrPos += 6; + +- // Get larger address ++ /* Get larger address */ + if (RTMPCompareMemory(SA, AA, 6) == 1) + NdisMoveMemory(&concatenation[CurrPos], SA, 6); + else + NdisMoveMemory(&concatenation[CurrPos], AA, 6); + +- // store the larger mac address for backward compatible of +- // ralink proprietary STA-key issue ++ /* store the larger mac address for backward compatible of */ ++ /* ralink proprietary STA-key issue */ + NdisMoveMemory(temp, &concatenation[CurrPos], MAC_ADDR_LEN); + CurrPos += 6; + +- // Get smaller Nonce ++ /* Get smaller Nonce */ + if (RTMPCompareMemory(ANonce, SNonce, 32) == 0) +- NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue ++ NdisMoveMemory(&concatenation[CurrPos], temp, 32); /* patch for ralink proprietary STA-key issue */ + else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1) + NdisMoveMemory(&concatenation[CurrPos], SNonce, 32); + else + NdisMoveMemory(&concatenation[CurrPos], ANonce, 32); + CurrPos += 32; + +- // Get larger Nonce ++ /* Get larger Nonce */ + if (RTMPCompareMemory(ANonce, SNonce, 32) == 0) +- NdisMoveMemory(&concatenation[CurrPos], temp, 32); // patch for ralink proprietary STA-key issue ++ NdisMoveMemory(&concatenation[CurrPos], temp, 32); /* patch for ralink proprietary STA-key issue */ + else if (RTMPCompareMemory(ANonce, SNonce, 32) == 1) + NdisMoveMemory(&concatenation[CurrPos], ANonce, 32); + else +@@ -1456,7 +1456,7 @@ VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, + + hex_dump("concatenation=", concatenation, 76); + +- // Use PRF to generate PTK ++ /* Use PRF to generate PTK */ + PRF(PMK, LEN_MASTER_KEY, Prefix, 22, concatenation, 76, output, len); + + } +@@ -1487,30 +1487,30 @@ VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random) + UCHAR prefix[] = + { 'I', 'n', 'i', 't', ' ', 'C', 'o', 'u', 'n', 't', 'e', 'r' }; + +- // Zero the related information ++ /* Zero the related information */ + NdisZeroMemory(result, 80); + NdisZeroMemory(local, 80); + NdisZeroMemory(KeyCounter, 32); + + for (i = 0; i < 32; i++) { +- // copy the local MAC address ++ /* copy the local MAC address */ + COPY_MAC_ADDR(local, macAddr); + curr = MAC_ADDR_LEN; + +- // concatenate the current time ++ /* concatenate the current time */ + NdisGetSystemUpTime(&CurrentTime); + NdisMoveMemory(&local[curr], &CurrentTime, sizeof(CurrentTime)); + curr += sizeof(CurrentTime); + +- // concatenate the last result ++ /* concatenate the last result */ + NdisMoveMemory(&local[curr], result, 32); + curr += 32; + +- // concatenate a variable ++ /* concatenate a variable */ + NdisMoveMemory(&local[curr], &i, 2); + curr += 2; + +- // calculate the result ++ /* calculate the result */ + PRF(KeyCounter, 32, prefix, 12, local, curr, result, 32); + } + +@@ -1548,15 +1548,15 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + + *rsn_len = 0; + +- // decide WPA2 or WPA1 ++ /* decide WPA2 or WPA1 */ + if (ElementID == Wpa2Ie) { + RSNIE2 *pRsnie_cipher = (RSNIE2 *) pRsnIe; + +- // Assign the verson as 1 ++ /* Assign the verson as 1 */ + pRsnie_cipher->version = 1; + + switch (WepStatus) { +- // TKIP mode ++ /* TKIP mode */ + case Ndis802_11Encryption2Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); + pRsnie_cipher->ucount = 1; +@@ -1565,7 +1565,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + *rsn_len = sizeof(RSNIE2); + break; + +- // AES mode ++ /* AES mode */ + case Ndis802_11Encryption3Enabled: + if (bMixCipher) + NdisMoveMemory(pRsnie_cipher->mcast, +@@ -1579,16 +1579,16 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + *rsn_len = sizeof(RSNIE2); + break; + +- // TKIP-AES mix mode ++ /* TKIP-AES mix mode */ + case Ndis802_11Encryption4Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4); + + PairwiseCnt = 1; +- // Insert WPA2 TKIP as the first pairwise cipher ++ /* Insert WPA2 TKIP as the first pairwise cipher */ + if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher)) { + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA2_TKIP, 4); +- // Insert WPA2 AES as the secondary pairwise cipher ++ /* Insert WPA2 AES as the secondary pairwise cipher */ + if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher)) { + NdisMoveMemory(pRsnie_cipher->ucast[0]. + oui + 4, OUI_WPA2_CCMP, +@@ -1596,7 +1596,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + PairwiseCnt = 2; + } + } else { +- // Insert WPA2 AES as the first pairwise cipher ++ /* Insert WPA2 AES as the first pairwise cipher */ + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA2_CCMP, 4); + } +@@ -1621,18 +1621,18 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + break; + } + } +- // swap for big-endian platform ++ /* swap for big-endian platform */ + pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); + pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); + } else { + RSNIE *pRsnie_cipher = (RSNIE *) pRsnIe; + +- // Assign OUI and version ++ /* Assign OUI and version */ + NdisMoveMemory(pRsnie_cipher->oui, OUI_WPA_VERSION, 4); + pRsnie_cipher->version = 1; + + switch (WepStatus) { +- // TKIP mode ++ /* TKIP mode */ + case Ndis802_11Encryption2Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); + pRsnie_cipher->ucount = 1; +@@ -1641,7 +1641,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + *rsn_len = sizeof(RSNIE); + break; + +- // AES mode ++ /* AES mode */ + case Ndis802_11Encryption3Enabled: + if (bMixCipher) + NdisMoveMemory(pRsnie_cipher->mcast, +@@ -1655,16 +1655,16 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + *rsn_len = sizeof(RSNIE); + break; + +- // TKIP-AES mix mode ++ /* TKIP-AES mix mode */ + case Ndis802_11Encryption4Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4); + + PairwiseCnt = 1; +- // Insert WPA TKIP as the first pairwise cipher ++ /* Insert WPA TKIP as the first pairwise cipher */ + if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher)) { + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA_TKIP, 4); +- // Insert WPA AES as the secondary pairwise cipher ++ /* Insert WPA AES as the secondary pairwise cipher */ + if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher)) { + NdisMoveMemory(pRsnie_cipher->ucast[0]. + oui + 4, OUI_WPA_CCMP, +@@ -1672,7 +1672,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + PairwiseCnt = 2; + } + } else { +- // Insert WPA AES as the first pairwise cipher ++ /* Insert WPA AES as the first pairwise cipher */ + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA_CCMP, 4); + } +@@ -1697,7 +1697,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + break; + } + } +- // swap for big-endian platform ++ /* swap for big-endian platform */ + pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); + pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); + } +@@ -1729,11 +1729,11 @@ static VOID RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, + OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) + { + RSNIE_AUTH *pRsnie_auth; +- UCHAR AkmCnt = 1; // default as 1 ++ UCHAR AkmCnt = 1; /* default as 1 */ + + pRsnie_auth = (RSNIE_AUTH *) (pRsnIe + (*rsn_len)); + +- // decide WPA2 or WPA1 ++ /* decide WPA2 or WPA1 */ + if (ElementID == Wpa2Ie) { + + switch (AuthMode) { +@@ -1780,7 +1780,7 @@ static VOID RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, + pRsnie_auth->acount = AkmCnt; + pRsnie_auth->acount = cpu2le16(pRsnie_auth->acount); + +- // update current RSNIE length ++ /* update current RSNIE length */ + (*rsn_len) += (sizeof(RSNIE_AUTH) + (4 * (AkmCnt - 1))); + + } +@@ -1810,7 +1810,7 @@ static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, + { + RSN_CAPABILITIES *pRSN_Cap; + +- // it could be ignored in WPA1 mode ++ /* it could be ignored in WPA1 mode */ + if (ElementID == WpaIe) + return; + +@@ -1818,7 +1818,7 @@ static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, + + pRSN_Cap->word = cpu2le16(pRSN_Cap->word); + +- (*rsn_len) += sizeof(RSN_CAPABILITIES); // update current RSNIE length ++ (*rsn_len) += sizeof(RSN_CAPABILITIES); /* update current RSNIE length */ + + } + +@@ -1843,13 +1843,13 @@ static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, + VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx) + { +- PUCHAR pRsnIe = NULL; // primary RSNIE +- UCHAR *rsnielen_cur_p = 0; // the length of the primary RSNIE +- UCHAR *rsnielen_ex_cur_p = 0; // the length of the secondary RSNIE ++ PUCHAR pRsnIe = NULL; /* primary RSNIE */ ++ UCHAR *rsnielen_cur_p = 0; /* the length of the primary RSNIE */ ++ UCHAR *rsnielen_ex_cur_p = 0; /* the length of the secondary RSNIE */ + UCHAR PrimaryRsnie; +- BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different ++ BOOLEAN bMixCipher = FALSE; /* indicate the pairwise and group cipher are different */ + UCHAR p_offset; +- WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode ++ WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; /* it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode */ + + rsnielen_cur_p = NULL; + rsnielen_ex_cur_p = NULL; +@@ -1861,8 +1861,8 @@ VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + if (AuthMode < Ndis802_11AuthModeWPA) + return; + } else { +- // Support WPAPSK or WPA2PSK in STA-Infra mode +- // Support WPANone in STA-Adhoc mode ++ /* Support WPAPSK or WPA2PSK in STA-Infra mode */ ++ /* Support WPANone in STA-Adhoc mode */ + if ((AuthMode != Ndis802_11AuthModeWPAPSK) && + (AuthMode != Ndis802_11AuthModeWPA2PSK) && + (AuthMode != Ndis802_11AuthModeWPANone) +@@ -1872,11 +1872,11 @@ VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPMakeRSNIE(STA)\n")); + +- // Zero RSNIE context ++ /* Zero RSNIE context */ + pAd->StaCfg.RSNIE_Len = 0; + NdisZeroMemory(pAd->StaCfg.RSN_IE, MAX_LEN_OF_RSNIE); + +- // Pointer to RSNIE ++ /* Pointer to RSNIE */ + rsnielen_cur_p = &pAd->StaCfg.RSNIE_Len; + pRsnIe = pAd->StaCfg.RSN_IE; + +@@ -1884,7 +1884,7 @@ VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + } + } + +- // indicate primary RSNIE as WPA or WPA2 ++ /* indicate primary RSNIE as WPA or WPA2 */ + if ((AuthMode == Ndis802_11AuthModeWPA) || + (AuthMode == Ndis802_11AuthModeWPAPSK) || + (AuthMode == Ndis802_11AuthModeWPANone) || +@@ -1895,20 +1895,20 @@ VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + PrimaryRsnie = Wpa2Ie; + + { +- // Build the primary RSNIE +- // 1. insert cipher suite ++ /* Build the primary RSNIE */ ++ /* 1. insert cipher suite */ + RTMPMakeRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, + FlexibleCipher, pRsnIe, &p_offset); + +- // 2. insert AKM ++ /* 2. insert AKM */ + RTMPMakeRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, + &p_offset); + +- // 3. insert capability ++ /* 3. insert capability */ + RTMPMakeRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset); + } + +- // 4. update the RSNIE length ++ /* 4. update the RSNIE length */ + *rsnielen_cur_p = p_offset; + + hex_dump("The primary RSNIE", pRsnIe, (*rsnielen_cur_p)); +@@ -1943,13 +1943,13 @@ BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, + if (DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H)) + return FALSE; + +- // Skip LLC header ++ /* Skip LLC header */ + if (NdisEqualMemory(SNAP_802_1H, pData, 6) || +- // Cisco 1200 AP may send packet with SNAP_BRIDGE_TUNNEL ++ /* Cisco 1200 AP may send packet with SNAP_BRIDGE_TUNNEL */ + NdisEqualMemory(SNAP_BRIDGE_TUNNEL, pData, 6)) { + pData += 6; + } +- // Skip 2-bytes EAPoL type ++ /* Skip 2-bytes EAPoL type */ + if (NdisEqualMemory(EAPOL, pData, 2)) { + pData += 2; + } else +@@ -2060,7 +2060,7 @@ BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, + + while (len > sizeof(RSNIE2)) { + pEid = (PEID_STRUCT) pVIE; +- // WPA RSN IE ++ /* WPA RSN IE */ + if ((pEid->Eid == IE_WPA) + && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) { + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA +@@ -2074,7 +2074,7 @@ BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, + + *Offset += (pEid->Len + 2); + } +- // WPA2 RSN IE ++ /* WPA2 RSN IE */ + else if ((pEid->Eid == IE_RSN) + && (NdisEqualMemory(pEid->Octet + 2, RSN_OUI, 3))) { + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 +@@ -2132,12 +2132,12 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + UCHAR DefaultIdx = 0; + UCHAR skip_offset; + +- // Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it ++ /* Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it */ + if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) { +- // Check RSN IE whether it is WPA2/WPA2PSK ++ /* Check RSN IE whether it is WPA2/WPA2PSK */ + if (!RTMPCheckRSNIE + (pAd, pKeyData, KeyDataLen, pEntry, &skip_offset)) { +- // send wireless event - for RSN IE different ++ /* send wireless event - for RSN IE different */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, + IW_RSNIE_DIFF_EVENT_FLAG, +@@ -2156,7 +2156,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + if (bWPA2 && MsgType == EAPOL_PAIR_MSG_3) { + WpaShowAllsuite(pMyKeyData, skip_offset); + +- // skip RSN IE ++ /* skip RSN IE */ + pMyKeyData += skip_offset; + KeyDataLength -= skip_offset; + DBGPRINT(RT_DEBUG_TRACE, +@@ -2170,24 +2170,24 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPParseEapolKeyData ==> KeyDataLength %d without RSN_IE \n", + KeyDataLength)); +- //hex_dump("remain data", pMyKeyData, KeyDataLength); ++ /*hex_dump("remain data", pMyKeyData, KeyDataLength); */ + +- // Parse EKD format in pairwise_msg_3_WPA2 && group_msg_1_WPA2 ++ /* Parse EKD format in pairwise_msg_3_WPA2 && group_msg_1_WPA2 */ + if (bWPA2 + && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) { +- if (KeyDataLength >= 8) // KDE format exclude GTK length ++ if (KeyDataLength >= 8) /* KDE format exclude GTK length */ + { + pKDE = (PKDE_ENCAP) pMyKeyData; + + DefaultIdx = pKDE->GTKEncap.Kid; + +- // Sanity check - KED length ++ /* Sanity check - KED length */ + if (KeyDataLength < (pKDE->Len + 2)) { + DBGPRINT(RT_DEBUG_ERROR, + ("ERROR: The len from KDE is too short \n")); + return FALSE; + } +- // Get GTK length - refer to IEEE 802.11i-2004 p.82 ++ /* Get GTK length - refer to IEEE 802.11i-2004 p.82 */ + GTKLEN = pKDE->Len - 6; + if (GTKLEN < LEN_AES_KEY) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -2205,7 +2205,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("GTK in KDE format ,DefaultKeyID=%d, KeyLen=%d \n", + DefaultIdx, GTKLEN)); +- // skip it ++ /* skip it */ + pMyKeyData += 8; + KeyDataLength -= 8; + +@@ -2214,7 +2214,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("GTK DefaultKeyID=%d \n", DefaultIdx)); + } +- // Sanity check - shared key index must be 1 ~ 3 ++ /* Sanity check - shared key index must be 1 ~ 3 */ + if (DefaultIdx < 1 || DefaultIdx > 3) { + DBGPRINT(RT_DEBUG_ERROR, + ("ERROR: GTK Key index(%d) is invalid in %s %s \n", +@@ -2226,13 +2226,13 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + { + PCIPHER_KEY pSharedKey; + +- // set key material, TxMic and RxMic ++ /* set key material, TxMic and RxMic */ + NdisMoveMemory(pAd->StaCfg.GTK, pMyKeyData, 32); + pAd->StaCfg.DefaultKeyId = DefaultIdx; + + pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; + +- // Prepare pair-wise key information into shared key table ++ /* Prepare pair-wise key information into shared key table */ + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +@@ -2241,7 +2241,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], + LEN_TKIP_TXMICK); + +- // Update Shared Key CipherAlg ++ /* Update Shared Key CipherAlg */ + pSharedKey->CipherAlg = CIPHER_NONE; + if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) + pSharedKey->CipherAlg = CIPHER_TKIP; +@@ -2254,7 +2254,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + Ndis802_11GroupWEP104Enabled) + pSharedKey->CipherAlg = CIPHER_WEP128; + +- // Update group key information to ASIC Shared Key Table ++ /* Update group key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +@@ -2262,7 +2262,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + pSharedKey->Key, + pSharedKey->TxMic, pSharedKey->RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +@@ -2333,28 +2333,28 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + BOOLEAN bWPA2 = FALSE; + UCHAR KeyDescVer; + +- // Choose WPA2 or not ++ /* Choose WPA2 or not */ + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || + (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2 = TRUE; + +- // Init Packet and Fill header ++ /* Init Packet and Fill header */ + pMsg->ProVer = EAPOL_VER; + pMsg->ProType = EAPOLKey; + +- // Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field ++ /* Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field */ + SET_UINT16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); + +- // Fill in EAPoL descriptor ++ /* Fill in EAPoL descriptor */ + if (bWPA2) + pMsg->KeyDesc.Type = WPA2_KEY_DESC; + else + pMsg->KeyDesc.Type = WPA1_KEY_DESC; + +- // Key Descriptor Version (bits 0-2) specifies the key descriptor version type ++ /* Key Descriptor Version (bits 0-2) specifies the key descriptor version type */ + { +- // Fill in Key information, refer to IEEE Std 802.11i-2004 page 78 +- // When either the pairwise or the group cipher is AES, the DESC_TYPE_AES(2) shall be used. ++ /* Fill in Key information, refer to IEEE Std 802.11i-2004 page 78 */ ++ /* When either the pairwise or the group cipher is AES, the DESC_TYPE_AES(2) shall be used. */ + KeyDescVer = + (((pEntry->WepStatus == Ndis802_11Encryption3Enabled) + || (GroupKeyWepStatus == +@@ -2364,13 +2364,13 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + + pMsg->KeyDesc.KeyInfo.KeyDescVer = KeyDescVer; + +- // Specify Key Type as Group(0) or Pairwise(1) ++ /* Specify Key Type as Group(0) or Pairwise(1) */ + if (MsgType >= EAPOL_GROUP_MSG_1) + pMsg->KeyDesc.KeyInfo.KeyType = GROUPKEY; + else + pMsg->KeyDesc.KeyInfo.KeyType = PAIRWISEKEY; + +- // Specify Key Index, only group_msg1_WPA1 ++ /* Specify Key Index, only group_msg1_WPA1 */ + if (!bWPA2 && (MsgType >= EAPOL_GROUP_MSG_1)) + pMsg->KeyDesc.KeyInfo.KeyIndex = DefaultKeyIdx; + +@@ -2393,20 +2393,20 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + (MsgType == EAPOL_GROUP_MSG_1))) { + pMsg->KeyDesc.KeyInfo.EKD_DL = 1; + } +- // key Information element has done. ++ /* key Information element has done. */ + *(USHORT *) (&pMsg->KeyDesc.KeyInfo) = + cpu2le16(*(USHORT *) (&pMsg->KeyDesc.KeyInfo)); + +- // Fill in Key Length ++ /* Fill in Key Length */ + { + if (MsgType >= EAPOL_GROUP_MSG_1) { +- // the length of group key cipher ++ /* the length of group key cipher */ + pMsg->KeyDesc.KeyLength[1] = + ((GroupKeyWepStatus == + Ndis802_11Encryption2Enabled) ? TKIP_GTK_LENGTH : + LEN_AES_KEY); + } else { +- // the length of pairwise key cipher ++ /* the length of pairwise key cipher */ + pMsg->KeyDesc.KeyLength[1] = + ((pEntry->WepStatus == + Ndis802_11Encryption2Enabled) ? LEN_TKIP_KEY : +@@ -2414,33 +2414,33 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + } + } + +- // Fill in replay counter ++ /* Fill in replay counter */ + NdisMoveMemory(pMsg->KeyDesc.ReplayCounter, pEntry->R_Counter, + LEN_KEY_DESC_REPLAY); + +- // Fill Key Nonce field +- // ANonce : pairwise_msg1 & pairwise_msg3 +- // SNonce : pairwise_msg2 +- // GNonce : group_msg1_wpa1 ++ /* Fill Key Nonce field */ ++ /* ANonce : pairwise_msg1 & pairwise_msg3 */ ++ /* SNonce : pairwise_msg2 */ ++ /* GNonce : group_msg1_wpa1 */ + if ((MsgType <= EAPOL_PAIR_MSG_3) + || ((!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)))) + NdisMoveMemory(pMsg->KeyDesc.KeyNonce, KeyNonce, + LEN_KEY_DESC_NONCE); + +- // Fill key IV - WPA2 as 0, WPA1 as random ++ /* Fill key IV - WPA2 as 0, WPA1 as random */ + if (!bWPA2 && (MsgType == EAPOL_GROUP_MSG_1)) { +- // Suggest IV be random number plus some number, ++ /* Suggest IV be random number plus some number, */ + NdisMoveMemory(pMsg->KeyDesc.KeyIv, &KeyNonce[16], + LEN_KEY_DESC_IV); + pMsg->KeyDesc.KeyIv[15] += 2; + } +- // Fill Key RSC field +- // It contains the RSC for the GTK being installed. ++ /* Fill Key RSC field */ ++ /* It contains the RSC for the GTK being installed. */ + if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) + || (MsgType == EAPOL_GROUP_MSG_1)) { + NdisMoveMemory(pMsg->KeyDesc.KeyRsc, TxRSC, 6); + } +- // Clear Key MIC field for MIC calculation later ++ /* Clear Key MIC field for MIC calculation later */ + NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC); + + ConstructEapolKeyData(pEntry, +@@ -2449,7 +2449,7 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + MsgType, + DefaultKeyIdx, GTK, RSNIE, RSNIE_Len, pMsg); + +- // Calculate MIC and fill in KeyMic Field except Pairwise Msg 1. ++ /* Calculate MIC and fill in KeyMic Field except Pairwise Msg 1. */ + if (MsgType != EAPOL_PAIR_MSG_1) { + CalculateMIC(KeyDescVer, pEntry->PTK, pMsg); + } +@@ -2499,7 +2499,7 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + PRTMP_ADAPTER pAd = pEntry->pAd; + BOOLEAN GTK_Included = FALSE; + +- // Choose WPA2 or not ++ /* Choose WPA2 or not */ + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || + (pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK)) + bWPA2Capable = TRUE; +@@ -2508,7 +2508,7 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + MsgType == EAPOL_PAIR_MSG_4 || MsgType == EAPOL_GROUP_MSG_2) + return; + +- // allocate memory pool ++ /* allocate memory pool */ + os_alloc_mem(NULL, (PUCHAR *) & mpool, 1500); + + if (mpool == NULL) +@@ -2523,7 +2523,7 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, 0); + data_offset = 0; + +- // Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 ++ /* Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 */ + if (RSNIE_LEN + && ((MsgType == EAPOL_PAIR_MSG_2) + || (MsgType == EAPOL_PAIR_MSG_3))) { +@@ -2535,17 +2535,17 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + RSNIE, RSNIE_LEN, pmkid_ptr, pmkid_len); + } + +- // Encapsulate KDE format in pairwise_msg3_WPA2 & group_msg1_WPA2 ++ /* Encapsulate KDE format in pairwise_msg3_WPA2 & group_msg1_WPA2 */ + if (bWPA2Capable + && ((MsgType == EAPOL_PAIR_MSG_3) + || (MsgType == EAPOL_GROUP_MSG_1))) { +- // Key Data Encapsulation (KDE) format - 802.11i-2004 Figure-43w and Table-20h ++ /* Key Data Encapsulation (KDE) format - 802.11i-2004 Figure-43w and Table-20h */ + Key_Data[data_offset + 0] = 0xDD; + + if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) { +- Key_Data[data_offset + 1] = 0x16; // 4+2+16(OUI+DataType+DataField) ++ Key_Data[data_offset + 1] = 0x16; /* 4+2+16(OUI+DataType+DataField) */ + } else { +- Key_Data[data_offset + 1] = 0x26; // 4+2+32(OUI+DataType+DataField) ++ Key_Data[data_offset + 1] = 0x26; /* 4+2+32(OUI+DataType+DataField) */ + } + + Key_Data[data_offset + 2] = 0x00; +@@ -2553,18 +2553,18 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + Key_Data[data_offset + 4] = 0xAC; + Key_Data[data_offset + 5] = 0x01; + +- // GTK KDE format - 802.11i-2004 Figure-43x ++ /* GTK KDE format - 802.11i-2004 Figure-43x */ + Key_Data[data_offset + 6] = (DefaultKeyIdx & 0x03); +- Key_Data[data_offset + 7] = 0x00; // Reserved Byte ++ Key_Data[data_offset + 7] = 0x00; /* Reserved Byte */ + + data_offset += 8; + } + +- // Encapsulate GTK +- // Only for pairwise_msg3_WPA2 and group_msg1 ++ /* Encapsulate GTK */ ++ /* Only for pairwise_msg3_WPA2 and group_msg1 */ + if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2Capable) + || (MsgType == EAPOL_GROUP_MSG_1)) { +- // Fill in GTK ++ /* Fill in GTK */ + if (GroupKeyWepStatus == Ndis802_11Encryption3Enabled) { + NdisMoveMemory(&Key_Data[data_offset], GTK, + LEN_AES_KEY); +@@ -2578,23 +2578,23 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + GTK_Included = TRUE; + } + +- // This whole key-data field shall be encrypted if a GTK is included. +- // Encrypt the data material in key data field with KEK ++ /* This whole key-data field shall be encrypted if a GTK is included. */ ++ /* Encrypt the data material in key data field with KEK */ + if (GTK_Included) { +- //hex_dump("GTK_Included", Key_Data, data_offset); ++ /*hex_dump("GTK_Included", Key_Data, data_offset); */ + + if ((keyDescVer == DESC_TYPE_AES)) { + UCHAR remainder = 0; + UCHAR pad_len = 0; + +- // Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, +- // shall be used to encrypt the Key Data field using the KEK field from +- // the derived PTK. ++ /* Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, */ ++ /* shall be used to encrypt the Key Data field using the KEK field from */ ++ /* the derived PTK. */ + +- // If the Key Data field uses the NIST AES key wrap, then the Key Data field +- // shall be padded before encrypting if the key data length is less than 16 +- // octets or if it is not a multiple of 8. The padding consists of appending +- // a single octet 0xdd followed by zero or more 0x00 octets. ++ /* If the Key Data field uses the NIST AES key wrap, then the Key Data field */ ++ /* shall be padded before encrypting if the key data length is less than 16 */ ++ /* octets or if it is not a multiple of 8. The padding consists of appending */ ++ /* a single octet 0xdd followed by zero or more 0x00 octets. */ + if ((remainder = data_offset & 0x07) != 0) { + INT i; + +@@ -2608,22 +2608,22 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + + AES_GTK_KEY_WRAP(&pEntry->PTK[16], Key_Data, + data_offset, Rc4GTK); +- // AES wrap function will grow 8 bytes in length ++ /* AES wrap function will grow 8 bytes in length */ + data_offset += 8; + } else { + /* Key Descriptor Version 1: ARC4 is used to encrypt the Key Data field + using the KEK field from the derived PTK. */ + +- // PREPARE Encrypted "Key DATA" field. (Encrypt GTK with RC4, usinf PTK[16]->[31] as Key, IV-field as IV) +- // put TxTsc in Key RSC field +- pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32. ++ /* PREPARE Encrypted "Key DATA" field. (Encrypt GTK with RC4, usinf PTK[16]->[31] as Key, IV-field as IV) */ ++ /* put TxTsc in Key RSC field */ ++ pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; /*Init crc32. */ + +- // ekey is the contanetion of IV-field, and PTK[16]->PTK[31] ++ /* ekey is the contanetion of IV-field, and PTK[16]->PTK[31] */ + NdisMoveMemory(ekey, pMsg->KeyDesc.KeyIv, + LEN_KEY_DESC_IV); + NdisMoveMemory(&ekey[LEN_KEY_DESC_IV], &pEntry->PTK[16], + LEN_EAP_EK); +- ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); //INIT SBOX, KEYLEN+3(IV) ++ ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, ekey, sizeof(ekey)); /*INIT SBOX, KEYLEN+3(IV) */ + pAd->PrivateInfo.FCSCRC32 = + RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, Key_Data, + data_offset); +@@ -2636,7 +2636,7 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + NdisMoveMemory(pMsg->KeyDesc.KeyData, Key_Data, data_offset); + } + +- // Update key data length field and total body length ++ /* Update key data length field and total body length */ + SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, data_offset); + INC_UINT16_TO_ARRARY(pMsg->Body_Len, data_offset); + +@@ -2668,21 +2668,21 @@ static VOID CalculateMIC(IN UCHAR KeyDescVer, + UCHAR mic[LEN_KEY_DESC_MIC]; + UCHAR digest[80]; + +- // allocate memory for MIC calculation ++ /* allocate memory for MIC calculation */ + os_alloc_mem(NULL, (PUCHAR *) & OutBuffer, 512); + + if (OutBuffer == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); + return; + } +- // make a frame for calculating MIC. ++ /* make a frame for calculating MIC. */ + MakeOutgoingFrame(OutBuffer, &FrameLen, + CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, + END_OF_ARGS); + + NdisZeroMemory(mic, sizeof(mic)); + +- // Calculate MIC ++ /* Calculate MIC */ + if (KeyDescVer == DESC_TYPE_AES) { + HMAC_SHA1(PTK, LEN_EAP_MICK, OutBuffer, FrameLen, digest, + SHA1_DIGEST_SIZE); +@@ -2692,7 +2692,7 @@ static VOID CalculateMIC(IN UCHAR KeyDescVer, + MD5_DIGEST_SIZE); + } + +- // store the calculated MIC ++ /* store the calculated MIC */ + NdisMoveMemory(pMsg->KeyDesc.KeyMic, mic, LEN_KEY_DESC_MIC); + + os_free_mem(NULL, OutBuffer); +@@ -2721,52 +2721,52 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + { + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + +- // handle WEP decryption ++ /* handle WEP decryption */ + if (GroupCipher == Ndis802_11Encryption1Enabled) { + if (RTMPSoftDecryptWEP + (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, + pShard_key)) { + +- //Minus IV[4] & ICV[4] ++ /*Minus IV[4] & ICV[4] */ + pRxWI->MPDUtotalByteCount -= 8; + } else { + DBGPRINT(RT_DEBUG_ERROR, + ("ERROR : Software decrypt WEP data fails.\n")); +- // give up this frame ++ /* give up this frame */ + return NDIS_STATUS_FAILURE; + } + } +- // handle TKIP decryption ++ /* handle TKIP decryption */ + else if (GroupCipher == Ndis802_11Encryption2Enabled) { + if (RTMPSoftDecryptTKIP + (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, + pShard_key)) { + +- //Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV ++ /*Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV */ + pRxWI->MPDUtotalByteCount -= 20; + } else { + DBGPRINT(RT_DEBUG_ERROR, + ("ERROR : RTMPSoftDecryptTKIP Failed\n")); +- // give up this frame ++ /* give up this frame */ + return NDIS_STATUS_FAILURE; + } + } +- // handle AES decryption ++ /* handle AES decryption */ + else if (GroupCipher == Ndis802_11Encryption3Enabled) { + if (RTMPSoftDecryptAES + (pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, + pShard_key)) { + +- //8 bytes MIC, 8 bytes IV/EIV (CCMP Header) ++ /*8 bytes MIC, 8 bytes IV/EIV (CCMP Header) */ + pRxWI->MPDUtotalByteCount -= 16; + } else { + DBGPRINT(RT_DEBUG_ERROR, + ("ERROR : RTMPSoftDecryptAES Failed\n")); +- // give up this frame ++ /* give up this frame */ + return NDIS_STATUS_FAILURE; + } + } else { +- // give up this frame ++ /* give up this frame */ + return NDIS_STATUS_FAILURE; + } + +@@ -2786,18 +2786,18 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + BOOLEAN isWPA2 = FALSE; + + pEid = (PEID_STRUCT) rsnie; +- len = rsnie_len - 2; // exclude IE and length ++ len = rsnie_len - 2; /* exclude IE and length */ + pBuf = (PUINT8) & pEid->Octet[0]; + +- // set default value ++ /* set default value */ + *count = 0; + +- // Check length ++ /* Check length */ + if ((len <= 0) || (pEid->Len != len)) { + DBGPRINT_ERR(("%s : The length is invalid\n", __func__)); + return NULL; + } +- // Check WPA or WPA2 ++ /* Check WPA or WPA2 */ + if (pEid->Eid == IE_WPA) { + PRSNIE pRsnie = (PRSNIE) pBuf; + UINT16 ucount; +@@ -2807,18 +2807,18 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + __func__)); + return NULL; + } +- // Get the count of pairwise cipher ++ /* Get the count of pairwise cipher */ + ucount = cpu2le16(pRsnie->ucount); + if (ucount > 2) { + DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", __func__, ucount)); + return NULL; + } +- // Get the group cipher ++ /* Get the group cipher */ + if (type == GROUP_SUITE) { + *count = 1; + return pRsnie->mcast; + } +- // Get the pairwise cipher suite ++ /* Get the pairwise cipher suite */ + else if (type == PAIRWISE_SUITE) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s : The count of pairwise cipher is %d\n", +@@ -2840,18 +2840,18 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + __func__)); + return NULL; + } +- // Get the count of pairwise cipher ++ /* Get the count of pairwise cipher */ + ucount = cpu2le16(pRsnie->ucount); + if (ucount > 2) { + DBGPRINT_ERR(("%s : The count(%d) of pairwise cipher is invlaid\n", __func__, ucount)); + return NULL; + } +- // Get the group cipher ++ /* Get the group cipher */ + if (type == GROUP_SUITE) { + *count = 1; + return pRsnie->mcast; + } +- // Get the pairwise cipher suite ++ /* Get the pairwise cipher suite */ + else if (type == PAIRWISE_SUITE) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s : The count of pairwise cipher is %d\n", +@@ -2867,7 +2867,7 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + return NULL; + } + +- // skip group cipher and pairwise cipher suite ++ /* skip group cipher and pairwise cipher suite */ + pBuf += offset; + len -= offset; + +@@ -2876,17 +2876,17 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + __func__)); + return NULL; + } +- // pointer to AKM count ++ /* pointer to AKM count */ + pAkm = (PRSNIE_AUTH) pBuf; + +- // Get the count of pairwise cipher ++ /* Get the count of pairwise cipher */ + acount = cpu2le16(pAkm->acount); + if (acount > 2) { + DBGPRINT_ERR(("%s : The count(%d) of AKM is invlaid\n", + __func__, acount)); + return NULL; + } +- // Get the AKM suite ++ /* Get the AKM suite */ + if (type == AKM_SUITE) { + DBGPRINT(RT_DEBUG_TRACE, ("%s : The count of AKM is %d\n", + __func__, acount)); +@@ -2898,13 +2898,13 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + pBuf += offset; + len -= offset; + +- // The remaining length must larger than (RSN-Capability(2) + PMKID-Count(2) + PMKID(16~)) ++ /* The remaining length must larger than (RSN-Capability(2) + PMKID-Count(2) + PMKID(16~)) */ + if (len >= (sizeof(RSN_CAPABILITIES) + 2 + LEN_PMKID)) { +- // Skip RSN capability and PMKID-Count ++ /* Skip RSN capability and PMKID-Count */ + pBuf += (sizeof(RSN_CAPABILITIES) + 2); + len -= (sizeof(RSN_CAPABILITIES) + 2); + +- // Get PMKID ++ /* Get PMKID */ + if (type == PMKID_LIST) { + *count = 1; + return pBuf; +@@ -2915,7 +2915,7 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + } + + *count = 0; +- //DBGPRINT_ERR(("%s : The type(%d) doesn't support \n", __func__, type)); ++ /*DBGPRINT_ERR(("%s : The type(%d) doesn't support \n", __func__, type)); */ + return NULL; + + } +@@ -2927,24 +2927,24 @@ VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len) + + hex_dump("RSNIE", rsnie, rsnie_len); + +- // group cipher ++ /* group cipher */ + if ((pSuite = + GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, + &count)) != NULL) { + hex_dump("group cipher", pSuite, 4 * count); + } +- // pairwise cipher ++ /* pairwise cipher */ + if ((pSuite = + GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, + &count)) != NULL) { + hex_dump("pairwise cipher", pSuite, 4 * count); + } +- // AKM ++ /* AKM */ + if ((pSuite = + GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) { + hex_dump("AKM suite", pSuite, 4 * count); + } +- // PMKID ++ /* PMKID */ + if ((pSuite = + GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) { + hex_dump("PMKID", pSuite, LEN_PMKID); +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index 8e71add..8e49cd7 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -83,23 +83,23 @@ UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. +- //Use the eeprom logical address and covert to address to block number ++ /*Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. */ ++ /*Use the eeprom logical address and covert to address to block number */ + eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; + +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0. ++ /*Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0. */ + eFuseCtrlStruc.field.EFSROM_MODE = 0; + +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. ++ /*Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. */ + eFuseCtrlStruc.field.EFSROM_KICK = 1; + + NdisMoveMemory(&data, &eFuseCtrlStruc, 4); + RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); + +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. ++ /*Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. */ + i = 0; + while (i < 500) { +- //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); ++ /*rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4); */ + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + if (eFuseCtrlStruc.field.EFSROM_KICK == 0) { + break; +@@ -108,25 +108,25 @@ UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, + i++; + } + +- //if EFSROM_AOUT is not found in physical address, write 0xffff ++ /*if EFSROM_AOUT is not found in physical address, write 0xffff */ + if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f) { + for (i = 0; i < Length / 2; i++) + *(pData + 2 * i) = 0xffff; + } else { +- //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x590-0x59C) ++ /*Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x590-0x59C) */ + efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC); +- //data hold 4 bytes data. +- //In RTMP_IO_READ32 will automatically execute 32-bytes swapping ++ /*data hold 4 bytes data. */ ++ /*In RTMP_IO_READ32 will automatically execute 32-bytes swapping */ + RTMP_IO_READ32(pAd, efuseDataOffset, &data); +- //Decide the upper 2 bytes or the bottom 2 bytes. +- // Little-endian S | S Big-endian +- // addr 3 2 1 0 | 0 1 2 3 +- // Ori-V D C B A | A B C D +- //After swapping +- // D C B A | D C B A +- //Return 2-bytes +- //The return byte statrs from S. Therefore, the little-endian will return BA, the Big-endian will return DC. +- //For returning the bottom 2 bytes, the Big-endian should shift right 2-bytes. ++ /*Decide the upper 2 bytes or the bottom 2 bytes. */ ++ /* Little-endian S | S Big-endian */ ++ /* addr 3 2 1 0 | 0 1 2 3 */ ++ /* Ori-V D C B A | A B C D */ ++ /*After swapping */ ++ /* D C B A | D C B A */ ++ /*Return 2-bytes */ ++ /*The return byte statrs from S. Therefore, the little-endian will return BA, the Big-endian will return DC. */ ++ /*For returning the bottom 2 bytes, the Big-endian should shift right 2-bytes. */ + data = data >> (8 * (Offset & 0x3)); + + NdisMoveMemory(pData, &data, Length); +@@ -160,20 +160,20 @@ VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +- //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. ++ /*Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment. */ + eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0; + +- //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. +- //Read in physical view ++ /*Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1. */ ++ /*Read in physical view */ + eFuseCtrlStruc.field.EFSROM_MODE = 1; + +- //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. ++ /*Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure. */ + eFuseCtrlStruc.field.EFSROM_KICK = 1; + + NdisMoveMemory(&data, &eFuseCtrlStruc, 4); + RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data); + +- //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. ++ /*Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. */ + i = 0; + while (i < 500) { + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); +@@ -183,14 +183,14 @@ VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, + i++; + } + +- //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) +- //Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits. +- //The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes +- //Decide which EFUSE_DATA to read +- //590:F E D C +- //594:B A 9 8 +- //598:7 6 5 4 +- //59C:3 2 1 0 ++ /*Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590) */ ++ /*Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits. */ ++ /*The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes */ ++ /*Decide which EFUSE_DATA to read */ ++ /*590:F E D C */ ++ /*594:B A 9 8 */ ++ /*598:7 6 5 4 */ ++ /*59C:3 2 1 0 */ + efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC); + + RTMP_IO_READ32(pAd, efuseDataOffset, &data); +@@ -222,8 +222,8 @@ static VOID eFuseReadPhysical(IN PRTMP_ADAPTER pAd, + USHORT *pInBuf = (USHORT *) lpInBuffer; + USHORT *pOutBuf = (USHORT *) lpOutBuffer; + +- USHORT Offset = pInBuf[0]; //addr +- USHORT Length = pInBuf[1]; //length ++ USHORT Offset = pInBuf[0]; /*addr */ ++ USHORT Length = pInBuf[1]; /*length */ + int i; + + for (i = 0; i < Length; i += 2) { +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +index b5be6f0..fa3f231 100644 +--- a/drivers/staging/rt2860/common/ee_prom.c ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -37,15 +37,15 @@ + + #include "../rt_config.h" + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + static inline VOID RaiseClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + { + *x = *x | EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +- RTMPusecDelay(1); // Max frequency = 1MHz in Spec. definition ++ RTMPusecDelay(1); /* Max frequency = 1MHz in Spec. definition */ + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + static inline VOID LowerClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + { + *x = *x & ~EESK; +@@ -53,7 +53,7 @@ static inline VOID LowerClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + RTMPusecDelay(1); + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) + { + UINT32 x, i; +@@ -68,7 +68,7 @@ static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) + RaiseClock(pAd, &x); + + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +- LowerClock(pAd, &x); //prevent read failed ++ LowerClock(pAd, &x); /*prevent read failed */ + + x &= ~(EEDI); + if (x & EEDO) +@@ -78,7 +78,7 @@ static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) + return data; + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + static inline VOID ShiftOutBits(IN PRTMP_ADAPTER pAd, + IN USHORT data, IN USHORT count) + { +@@ -106,7 +106,7 @@ static inline VOID ShiftOutBits(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + static inline VOID EEpromCleanup(IN PRTMP_ADAPTER pAd) + { + UINT32 x; +@@ -124,17 +124,17 @@ static inline VOID EWEN(IN PRTMP_ADAPTER pAd) + { + UINT32 x; + +- // reset bits and set EECS ++ /* reset bits and set EECS */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + x &= ~(EEDI | EEDO | EESK); + x |= EECS; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + +- // kick a pulse ++ /* kick a pulse */ + RaiseClock(pAd, &x); + LowerClock(pAd, &x); + +- // output the read_opcode and six pulse in that order ++ /* output the read_opcode and six pulse in that order */ + ShiftOutBits(pAd, EEPROM_EWEN_OPCODE, 5); + ShiftOutBits(pAd, 0, 6); + +@@ -145,24 +145,24 @@ static inline VOID EWDS(IN PRTMP_ADAPTER pAd) + { + UINT32 x; + +- // reset bits and set EECS ++ /* reset bits and set EECS */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + x &= ~(EEDI | EEDO | EESK); + x |= EECS; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + +- // kick a pulse ++ /* kick a pulse */ + RaiseClock(pAd, &x); + LowerClock(pAd, &x); + +- // output the read_opcode and six pulse in that order ++ /* output the read_opcode and six pulse in that order */ + ShiftOutBits(pAd, EEPROM_EWDS_OPCODE, 5); + ShiftOutBits(pAd, 0, 6); + + EEpromCleanup(pAd); + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, + IN USHORT Offset, OUT USHORT * pValue) + { +@@ -170,23 +170,23 @@ int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, + USHORT data; + + Offset /= 2; +- // reset bits and set EECS ++ /* reset bits and set EECS */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + x &= ~(EEDI | EEDO | EESK); + x |= EECS; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, x); + +- // patch can not access e-Fuse issue ++ /* patch can not access e-Fuse issue */ + if (!(IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { +- // kick a pulse ++ /* kick a pulse */ + RaiseClock(pAd, &x); + LowerClock(pAd, &x); + } +- // output the read_opcode and register number in that order ++ /* output the read_opcode and register number in that order */ + ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3); + ShiftOutBits(pAd, Offset, pAd->EEPROMAddressNum); + +- // Now read the data (16 bits) in from the selected EEPROM word ++ /* Now read the data (16 bits) in from the selected EEPROM word */ + data = ShiftInBits(pAd); + + EEpromCleanup(pAd); +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index 872b47c..202d313 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -65,8 +65,8 @@ INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType) + return 0; + } else + DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n")); +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++#endif /* RTMP_EFUSE_SUPPORT // */ ++#endif /* RT30xx // */ + + switch (infType) { + #ifdef RTMP_PCI_SUPPORT +@@ -74,13 +74,13 @@ INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType) + pChipOps->eeinit = NULL; + pChipOps->eeread = rtmp_ee_prom_read16; + break; +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + case RTMP_DEV_INF_USB: + pChipOps->eeinit = NULL; + pChipOps->eeread = RTUSBReadEEPROM16; + break; +-#endif // RTMP_USB_SUPPORT // ++#endif /* RTMP_USB_SUPPORT // */ + + default: + DBGPRINT(RT_DEBUG_ERROR, ("RtmpChipOpsEepromHook() failed!\n")); +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 1d97b73..e047b89 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -52,8 +52,8 @@ UCHAR WPS_OUI[] = { 0x00, 0x50, 0xf2, 0x04 }; + UCHAR PRE_N_HT_OUI[] = { 0x00, 0x90, 0x4c }; + + UCHAR RateSwitchTable[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x11, 0x00, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x11, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 35, 45, +@@ -89,8 +89,8 @@ UCHAR RateSwitchTable[] = { + }; + + UCHAR RateSwitchTable11B[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x04, 0x03, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x04, 0x03, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 35, 45, +@@ -98,8 +98,8 @@ UCHAR RateSwitchTable11B[] = { + }; + + UCHAR RateSwitchTable11BG[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0a, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 35, 45, +@@ -113,8 +113,8 @@ UCHAR RateSwitchTable11BG[] = { + }; + + UCHAR RateSwitchTable11G[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x08, 0x00, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x08, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x10, 0, 20, 101, + 0x01, 0x10, 1, 20, 35, + 0x02, 0x10, 2, 20, 35, +@@ -126,8 +126,8 @@ UCHAR RateSwitchTable11G[] = { + }; + + UCHAR RateSwitchTable11N1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0c, 0x0a, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 25, 45, +@@ -143,8 +143,8 @@ UCHAR RateSwitchTable11N1S[] = { + }; + + UCHAR RateSwitchTable11N2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0e, 0x0c, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 25, 45, +@@ -162,24 +162,24 @@ UCHAR RateSwitchTable11N2S[] = { + }; + + UCHAR RateSwitchTable11N3S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x00, 0, 0, 0, // 0x0a, 0x00, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0b, 0x00, 0, 0, 0, /* 0x0a, 0x00, 0, 0, 0, // Initial used item after association */ + 0x00, 0x21, 0, 30, 101, + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, + 0x03, 0x21, 3, 15, 50, + 0x04, 0x21, 4, 15, 30, +- 0x05, 0x20, 11, 15, 30, // Required by System-Alan @ 20080812 +- 0x06, 0x20, 12, 15, 30, // 0x05, 0x20, 12, 15, 30, +- 0x07, 0x20, 13, 8, 20, // 0x06, 0x20, 13, 8, 20, +- 0x08, 0x20, 14, 8, 20, // 0x07, 0x20, 14, 8, 20, +- 0x09, 0x20, 15, 8, 25, // 0x08, 0x20, 15, 8, 25, +- 0x0a, 0x22, 15, 8, 25, // 0x09, 0x22, 15, 8, 25, ++ 0x05, 0x20, 11, 15, 30, /* Required by System-Alan @ 20080812 */ ++ 0x06, 0x20, 12, 15, 30, /* 0x05, 0x20, 12, 15, 30, */ ++ 0x07, 0x20, 13, 8, 20, /* 0x06, 0x20, 13, 8, 20, */ ++ 0x08, 0x20, 14, 8, 20, /* 0x07, 0x20, 14, 8, 20, */ ++ 0x09, 0x20, 15, 8, 25, /* 0x08, 0x20, 15, 8, 25, */ ++ 0x0a, 0x22, 15, 8, 25, /* 0x09, 0x22, 15, 8, 25, */ + }; + + UCHAR RateSwitchTable11N2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, +@@ -193,9 +193,9 @@ UCHAR RateSwitchTable11N2SForABand[] = { + 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association ++UCHAR RateSwitchTable11N3SForABand[] = { /* 3*3 */ ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, +@@ -210,8 +210,8 @@ UCHAR RateSwitchTable11N3SForABand[] = { // 3*3 + }; + + UCHAR RateSwitchTable11BGN1S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x0a, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0c, 0x0a, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 25, 45, +@@ -227,8 +227,8 @@ UCHAR RateSwitchTable11BGN1S[] = { + }; + + UCHAR RateSwitchTable11BGN2S[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0e, 0x0c, 0, 0, 0, // Initial used item after association ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0e, 0x0c, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, + 0x01, 0x00, 1, 40, 50, + 0x02, 0x00, 2, 25, 45, +@@ -245,10 +245,10 @@ UCHAR RateSwitchTable11BGN2S[] = { + 0x0d, 0x22, 15, 8, 15, + }; + +-UCHAR RateSwitchTable11BGN3S[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0a, 0x00, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, //50 ++UCHAR RateSwitchTable11BGN3S[] = { /* 3*3 */ ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0a, 0x00, 0, 0, 0, /* Initial used item after association */ ++ 0x00, 0x21, 0, 30, 101, /*50 */ + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, + 0x03, 0x21, 3, 20, 50, +@@ -261,9 +261,9 @@ UCHAR RateSwitchTable11BGN3S[] = { // 3*3 + }; + + UCHAR RateSwitchTable11BGN2SForABand[] = { +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0b, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, //50 ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ ++ 0x00, 0x21, 0, 30, 101, /*50 */ + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, + 0x03, 0x21, 3, 15, 50, +@@ -276,10 +276,10 @@ UCHAR RateSwitchTable11BGN2SForABand[] = { + 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 +-// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) +- 0x0c, 0x09, 0, 0, 0, // Initial used item after association +- 0x00, 0x21, 0, 30, 101, //50 ++UCHAR RateSwitchTable11BGN3SForABand[] = { /* 3*3 */ ++/* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ ++ 0x0c, 0x09, 0, 0, 0, /* Initial used item after association */ ++ 0x00, 0x21, 0, 30, 101, /*50 */ + 0x01, 0x21, 1, 20, 50, + 0x02, 0x21, 2, 20, 50, + 0x03, 0x21, 3, 15, 50, +@@ -294,8 +294,8 @@ UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3 + }; + + extern UCHAR OfdmRateToRxwiMCS[]; +-// since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. +-// otherwise the WLAN peer may not be able to receive the ACK thus downgrade its data TX rate ++/* since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. */ ++/* otherwise the WLAN peer may not be able to receive the ACK thus downgrade its data TX rate */ + ULONG BasicRateMask[12] = + { 0xfffff001 /* 1-Mbps */ , 0xfffff003 /* 2 Mbps */ , 0xfffff007 /* 5.5 */ , + 0xfffff00f /* 11 */ , +@@ -308,10 +308,10 @@ ULONG BasicRateMask[12] = + UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +-// e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than +-// this value, then it's quaranteed capable of operating in 36 mbps TX rate in +-// clean environment. +-// TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 ++/* e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than */ ++/* this value, then it's quaranteed capable of operating in 36 mbps TX rate in */ ++/* clean environment. */ ++/* TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 */ + CHAR RssiSafeLevelForTxRate[] = + { -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 }; + +@@ -373,7 +373,7 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + { + BssTableInit(&pAd->ScanTab); + +- // init STA state machines ++ /* init STA state machines */ + AssocStateMachineInit(pAd, &pAd->Mlme.AssocMachine, + pAd->Mlme.AssocFunc); + AuthStateMachineInit(pAd, &pAd->Mlme.AuthMachine, +@@ -383,8 +383,8 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + SyncStateMachineInit(pAd, &pAd->Mlme.SyncMachine, + pAd->Mlme.SyncFunc); + +- // Since we are using switch/case to implement it, the init is different from the above +- // state machine init ++ /* Since we are using switch/case to implement it, the init is different from the above */ ++ /* state machine init */ + MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL); + } + +@@ -394,14 +394,14 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, + pAd->Mlme.ActFunc); + +- // Init mlme periodic timer ++ /* Init mlme periodic timer */ + RTMPInitTimer(pAd, &pAd->Mlme.PeriodicTimer, + GET_TIMER_FUNCTION(MlmePeriodicExec), pAd, TRUE); + +- // Set mlme periodic timer ++ /* Set mlme periodic timer */ + RTMPSetTimer(&pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV); + +- // software-based RX Antenna diversity ++ /* software-based RX Antenna diversity */ + RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, + GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, + FALSE); +@@ -409,7 +409,7 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + { + #ifdef RTMP_PCI_SUPPORT + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { +- // only PCIe cards need these two timers ++ /* only PCIe cards need these two timers */ + RTMPInitTimer(pAd, &pAd->Mlme.PsPollTimer, + GET_TIMER_FUNCTION + (PsPollWakeExec), pAd, FALSE); +@@ -417,7 +417,7 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + GET_TIMER_FUNCTION(RadioOnExec), + pAd, FALSE); + } +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + + RTMPInitTimer(pAd, &pAd->Mlme.LinkDownTimer, + GET_TIMER_FUNCTION(LinkDownExec), pAd, +@@ -429,7 +429,7 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + (RtmpUsbStaAsicForceWakeupTimeout), pAd, + FALSE); + pAd->Mlme.AutoWakeupTimerRunning = FALSE; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + } while (FALSE); +@@ -457,8 +457,8 @@ VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + { + MLME_QUEUE_ELEM *Elem = NULL; + +- // Only accept MLME and Frame from peer side, no other (control/data) frame should +- // get into this state machine ++ /* Only accept MLME and Frame from peer side, no other (control/data) frame should */ ++ /* get into this state machine */ + + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); + if (pAd->Mlme.bRunning) { +@@ -478,7 +478,7 @@ VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + pAd->Mlme.Queue.Num)); + break; + } +- //From message type, determine which state machine I should drive ++ /*From message type, determine which state machine I should drive */ + if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) { + #ifdef RTMP_MAC_USB + if (Elem->MsgType == MT2_RESET_CONF) { +@@ -489,11 +489,11 @@ VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + Elem->MsgLen = 0; + continue; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // if dequeue success ++ /* if dequeue success */ + switch (Elem->Machine) { +- // STA state machines ++ /* STA state machines */ + case ASSOC_STATE_MACHINE: + StateMachinePerformAction(pAd, + &pAd->Mlme. +@@ -542,9 +542,9 @@ VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + ("ERROR: Illegal machine %ld in MlmeHandler()\n", + Elem->Machine)); + break; +- } // end of switch ++ } /* end of switch */ + +- // free MLME element ++ /* free MLME element */ + Elem->Occupied = FALSE; + Elem->MsgLen = 0; + +@@ -578,12 +578,12 @@ VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeHalt\n")); + + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { +- // disable BEACON generation and other BEACON related hardware timers ++ /* disable BEACON generation and other BEACON related hardware timers */ + AsicDisableSync(pAd); + } + + { +- // Cancel pending timers ++ /* Cancel pending timers */ + RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +@@ -597,13 +597,13 @@ VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); + RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + RTMPCancelTimer(&pAd->Mlme.LinkDownTimer, &Cancelled); + + #ifdef RTMP_MAC_USB + RTMPCancelTimer(&pAd->Mlme.AutoWakeupTimer, &Cancelled); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled); +@@ -612,9 +612,9 @@ VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_HALT); +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. ++ RTMPSetSignalLED(pAd, -100); /* Force signal strength Led to be turned off, firmware is not done it. */ + #ifdef RTMP_MAC_USB + { + LED_CFG_STRUC LedCfg; +@@ -625,13 +625,13 @@ VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + LedCfg.field.YLedMode = 0; + RTMP_IO_WRITE32(pAd, LED_CFG, LedCfg.word); + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + if (pChipOps->AsicHaltAction) + pChipOps->AsicHaltAction(pAd); + } + +- RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled ++ RTMPusecDelay(5000); /* 5 msec to gurantee Ant Diversity timer canceled */ + + MlmeQueueDestroy(&pAd->Mlme.Queue); + NdisFreeSpinLock(&pAd->Mlme.TaskLock); +@@ -643,7 +643,7 @@ VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + { + pAd->RalinkCounters.LastOneSecRxOkDataCnt = + pAd->RalinkCounters.OneSecRxOkDataCnt; +- // clear all OneSecxxx counters. ++ /* clear all OneSecxxx counters. */ + pAd->RalinkCounters.OneSecBeaconSentCnt = 0; + pAd->RalinkCounters.OneSecFalseCCACnt = 0; + pAd->RalinkCounters.OneSecRxFcsErrCnt = 0; +@@ -655,7 +655,7 @@ VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + pAd->RalinkCounters.OneSecReceivedByteCount = 0; + pAd->RalinkCounters.OneSecTransmittedByteCount = 0; + +- // TODO: for debug only. to be removed ++ /* TODO: for debug only. to be removed */ + pAd->RalinkCounters.OneSecOsTxCount[QID_AC_BE] = 0; + pAd->RalinkCounters.OneSecOsTxCount[QID_AC_BK] = 0; + pAd->RalinkCounters.OneSecOsTxCount[QID_AC_VI] = 0; +@@ -688,7 +688,7 @@ VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-#define ADHOC_BEACON_LOST_TIME (8*OS_HZ) // 8 sec ++#define ADHOC_BEACON_LOST_TIME (8*OS_HZ) /* 8 sec */ + VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) +@@ -698,8 +698,8 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + + #ifdef RTMP_MAC_PCI + { +- // If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. +- // Move code to here, because following code will return when radio is off ++ /* If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second. */ ++ /* Move code to here, because following code will return when radio is off */ + if ((pAd->Mlme.PeriodicRound % (MLME_TASK_EXEC_MULTIPLE * 2) == + 0) && (pAd->StaCfg.bHardwareRadio == TRUE) + && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) +@@ -708,27 +708,27 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + ) { + UINT32 data = 0; + +- // Read GPIO pin2 as Hardware controlled radio state ++ /* Read GPIO pin2 as Hardware controlled radio state */ + #ifndef RT3090 + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); +-#endif // RT3090 // +-//KH(PCIE PS):Added based on Jane<-- ++#endif /* RT3090 // */ ++/*KH(PCIE PS):Added based on Jane<-- */ + #ifdef RT3090 +-// Read GPIO pin2 as Hardware controlled radio state +-// We need to Read GPIO if HW said so no mater what advance power saving ++/* Read GPIO pin2 as Hardware controlled radio state */ ++/* We need to Read GPIO if HW said so no mater what advance power saving */ + if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) + && + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)) + && (pAd->StaCfg.PSControl.field.EnablePSinIdle == + TRUE)) { +- // Want to make sure device goes to L0 state before reading register. ++ /* Want to make sure device goes to L0 state before reading register. */ + RTMPPCIeLinkCtrlValueRestore(pAd, 0); + RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); + RTMPPCIeLinkCtrlSetting(pAd, 3); + } else + RTMP_IO_FORCE_READ32(pAd, GPIO_CTRL_CFG, &data); +-#endif // RT3090 // +-//KH(PCIE PS):Added based on Jane--> ++#endif /* RT3090 // */ ++/*KH(PCIE PS):Added based on Jane--> */ + + if (data & 0x04) { + pAd->StaCfg.bHwRadio = TRUE; +@@ -741,20 +741,20 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + && pAd->StaCfg.bSwRadio); + if (pAd->StaCfg.bRadio == TRUE) { + MlmeRadioOn(pAd); +- // Update extra information ++ /* Update extra information */ + pAd->ExtraInfo = EXTRA_INFO_CLEAR; + } else { + MlmeRadioOff(pAd); +- // Update extra information ++ /* Update extra information */ + pAd->ExtraInfo = HW_RADIO_OFF; + } + } + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_HALT_IN_PROGRESS | + fRTMP_ADAPTER_RADIO_OFF | + fRTMP_ADAPTER_RADIO_MEASUREMENT | +@@ -764,12 +764,12 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + RTMP_MLME_PRE_SANITY_CHECK(pAd); + + { +- // Do nothing if monitor mode is on ++ /* Do nothing if monitor mode is on */ + if (MONITOR_ON(pAd)) + return; + + if (pAd->Mlme.PeriodicRound & 0x1) { +- // This is the fix for wifi 11n extension channel overlapping test case. for 2860D ++ /* This is the fix for wifi 11n extension channel overlapping test case. for 2860D */ + if (((pAd->MACVersion & 0xffff) == 0x0101) && + (STA_TGN_WIFI_ON(pAd)) && + (pAd->CommonCfg.IOTestParm.bToggle == FALSE)) +@@ -786,20 +786,20 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + + pAd->bUpdateBcnCntDone = FALSE; + +-// RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); ++/* RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3); */ + pAd->Mlme.PeriodicRound++; + + #ifdef RTMP_MAC_USB +- // execute every 100ms, update the Tx FIFO Cnt for update Tx Rate. ++ /* execute every 100ms, update the Tx FIFO Cnt for update Tx Rate. */ + NICUpdateFifoStaCounters(pAd); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // execute every 500ms ++ /* execute every 500ms */ + if ((pAd->Mlme.PeriodicRound % 5 == 0) + && RTMPAutoRateSwitchCheck(pAd) + /*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)) */ ) + { +- // perform dynamic tx rate switching based on past TX history ++ /* perform dynamic tx rate switching based on past TX history */ + { + if ((OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) +@@ -808,13 +808,13 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + MlmeDynamicTxRateSwitching(pAd); + } + } +- // Normal 1 second Mlme PeriodicExec. ++ /* Normal 1 second Mlme PeriodicExec. */ + if (pAd->Mlme.PeriodicRound % MLME_TASK_EXEC_MULTIPLE == 0) { + pAd->Mlme.OneSecPeriodicRound++; + +- //ORIBATimerTimeout(pAd); ++ /*ORIBATimerTimeout(pAd); */ + +- // Media status changed, report to NDIS ++ /* Media status changed, report to NDIS */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE)) { + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); + if (OPSTATUS_TEST_FLAG +@@ -832,26 +832,26 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + + NdisGetSystemUpTime(&pAd->Mlme.Now32); + +- // add the most up-to-date h/w raw counters into software variable, so that +- // the dynamic tuning mechanism below are based on most up-to-date information ++ /* add the most up-to-date h/w raw counters into software variable, so that */ ++ /* the dynamic tuning mechanism below are based on most up-to-date information */ + NICUpdateRawCounters(pAd); + + #ifdef RTMP_MAC_USB + RTUSBWatchDog(pAd); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // Need statistics after read counter. So put after NICUpdateRawCounters ++ /* Need statistics after read counter. So put after NICUpdateRawCounters */ + ORIBATimerTimeout(pAd); + +- // if MGMT RING is full more than twice within 1 second, we consider there's +- // a hardware problem stucking the TX path. In this case, try a hardware reset +- // to recover the system +- // if (pAd->RalinkCounters.MgmtRingFullCount >= 2) +- // RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); +- // else +- // pAd->RalinkCounters.MgmtRingFullCount = 0; ++ /* if MGMT RING is full more than twice within 1 second, we consider there's */ ++ /* a hardware problem stucking the TX path. In this case, try a hardware reset */ ++ /* to recover the system */ ++ /* if (pAd->RalinkCounters.MgmtRingFullCount >= 2) */ ++ /* RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HARDWARE_ERROR); */ ++ /* else */ ++ /* pAd->RalinkCounters.MgmtRingFullCount = 0; */ + +- // The time period for checking antenna is according to traffic ++ /* The time period for checking antenna is according to traffic */ + { + if (pAd->Mlme.bEnableAutoAntennaCheck) { + TxTotalCnt = +@@ -859,7 +859,7 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + pAd->RalinkCounters.OneSecTxRetryOkCount + + pAd->RalinkCounters.OneSecTxFailCount; + +- // dynamic adjust antenna evaluation period according to the traffic ++ /* dynamic adjust antenna evaluation period according to the traffic */ + if (TxTotalCnt > 50) { + if (pAd->Mlme.OneSecPeriodicRound % + 10 == 0) { +@@ -882,14 +882,14 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + #ifdef RTMP_MAC_PCI + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) + && (pAd->bPCIclkOff == FALSE)) +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + { +- // When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock +- // and sending CTS-to-self over and over. +- // Software Patch Solution: +- // 1. Polling debug state register 0x10F4 every one second. +- // 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred. +- // 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again. ++ /* When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock */ ++ /* and sending CTS-to-self over and over. */ ++ /* Software Patch Solution: */ ++ /* 1. Polling debug state register 0x10F4 every one second. */ ++ /* 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred. */ ++ /* 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again. */ + + UINT32 MacReg = 0; + +@@ -928,13 +928,13 @@ BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen) + if (SsidLen > MAX_LEN_OF_SSID) + return (FALSE); + +- // Check each character value ++ /* Check each character value */ + for (index = 0; index < SsidLen; index++) { + if (pSsid[index] < 0x20) + return (FALSE); + } + +- // All checked ++ /* All checked */ + return (TRUE); + } + +@@ -944,7 +944,7 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + IN PUCHAR pTableSize, IN PUCHAR pInitTxRateIdx) + { + do { +- // decide the rate table for tuning ++ /* decide the rate table for tuning */ + if (pAd->CommonCfg.TxRateTableSize > 0) { + *ppTable = RateSwitchTable; + *pTableSize = RateSwitchTable[0]; +@@ -954,12 +954,12 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } + + if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd)) { +- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) { // 11N 1S Adhoc ++ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) { /* 11N 1S Adhoc */ + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; + *pInitTxRateIdx = RateSwitchTable11N1S[1]; + +- } else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) { // 11N 2S Adhoc ++ } else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) { /* 11N 2S Adhoc */ + if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; +@@ -994,18 +994,18 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } + break; + } +- //if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { // 11BGN 1S AP ++ /*if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && */ ++ /* ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) */ ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { /* 11BGN 1S AP */ + *ppTable = RateSwitchTable11BGN1S; + *pTableSize = RateSwitchTable11BGN1S[0]; + *pInitTxRateIdx = RateSwitchTable11BGN1S[1]; + + break; + } +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && +- // (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { // 11BGN 2S AP ++ /*else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 12) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && */ ++ /* (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) */ ++ if (((pEntry->RateLen == 12) || (pAd->OpMode == OPMODE_STA)) && (pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { /* 11BGN 2S AP */ + if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11BGN2S; + *pTableSize = RateSwitchTable11BGN2S[0]; +@@ -1020,16 +1020,16 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } + break; + } +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { // 11N 1S AP ++ /*else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1))) */ ++ if ((pEntry->HTCapability.MCSSet[0] == 0xff) && ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1))) { /* 11N 1S AP */ + *ppTable = RateSwitchTable11N1S; + *pTableSize = RateSwitchTable11N1S[0]; + *pInitTxRateIdx = RateSwitchTable11N1S[1]; + + break; + } +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) +- if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { // 11N 2S AP ++ /*else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) && (pAd->Antenna.field.TxPath == 2)) */ ++ if ((pEntry->HTCapability.MCSSet[0] == 0xff) && (pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2)) { /* 11N 2S AP */ + if (pAd->LatchRfRegs.Channel <= 14) { + *ppTable = RateSwitchTable11N2S; + *pTableSize = RateSwitchTable11N2S[0]; +@@ -1043,33 +1043,33 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + + break; + } +- //else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) ++ /*else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) */ + if ((pEntry->RateLen == 4 || pAd->CommonCfg.PhyMode == PHY_11B) +- //Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode ++ /*Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode */ + /* && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0) */ +- ) { // B only AP ++ ) { /* B only AP */ + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; + *pInitTxRateIdx = RateSwitchTable11B[1]; + + break; + } +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) ++ /*else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) */ + if ((pEntry->RateLen > 8) + && (pEntry->HTCapability.MCSSet[0] == 0) + && (pEntry->HTCapability.MCSSet[1] == 0) +- ) { // B/G mixed AP ++ ) { /* B/G mixed AP */ + *ppTable = RateSwitchTable11BG; + *pTableSize = RateSwitchTable11BG[0]; + *pInitTxRateIdx = RateSwitchTable11BG[1]; + + break; + } +- //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) ++ /*else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) */ + if ((pEntry->RateLen == 8) + && (pEntry->HTCapability.MCSSet[0] == 0) + && (pEntry->HTCapability.MCSSet[1] == 0) +- ) { // G only AP ++ ) { /* G only AP */ + *ppTable = RateSwitchTable11G; + *pTableSize = RateSwitchTable11G[0]; + *pInitTxRateIdx = RateSwitchTable11G[1]; +@@ -1078,8 +1078,8 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } + + { +- //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) +- if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)) { // Legacy mode ++ /*else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0)) */ ++ if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)) { /* Legacy mode */ + if (pAd->CommonCfg.MaxTxRate <= RATE_11) { + *ppTable = RateSwitchTable11B; + *pTableSize = RateSwitchTable11B[0]; +@@ -1154,11 +1154,11 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + that ATE need are not collected via this routine. + */ + #if defined(RT305x)||defined(RT3070) +- // request by Gary, if Rssi0 > -42, BBP 82 need to be changed from 0x62 to 0x42, , bbp 67 need to be changed from 0x20 to 0x18 ++ /* request by Gary, if Rssi0 > -42, BBP 82 need to be changed from 0x62 to 0x42, , bbp 67 need to be changed from 0x20 to 0x18 */ + if (!pAd->CommonCfg.HighPowerPatchDisabled) { + #ifdef RT3070 + if ((IS_RT3070(pAd) && ((pAd->MACVersion & 0xffff) < 0x0201))) +-#endif // RT3070 // ++#endif /* RT3070 // */ + { + if ((pAd->StaCfg.RssiSample.AvgRssi0 != 0) + && (pAd->StaCfg.RssiSample.AvgRssi0 > +@@ -1171,8 +1171,8 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + } + #endif + #ifdef PCIE_PS_SUPPORT +-// don't perform idle-power-save mechanism within 3 min after driver initialization. +-// This can make rebooter test more robust ++/* don't perform idle-power-save mechanism within 3 min after driver initialization. */ ++/* This can make rebooter test more robust */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { + if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) + && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) +@@ -1190,7 +1190,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x30, + PowerSafeCID, 0xff, + 0x2); +- // Wait command success ++ /* Wait command success */ + AsicCheckCommanOk(pAd, PowerSafeCID); + RTMP_SET_FLAG(pAd, + fRTMP_ADAPTER_IDLE_RADIO_OFF); +@@ -1209,7 +1209,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x30, + PowerSafeCID, 0xff, + 0x02); +- // Wait command success ++ /* Wait command success */ + AsicCheckCommanOk(pAd, PowerSafeCID); + RTMP_SET_FLAG(pAd, + fRTMP_ADAPTER_IDLE_RADIO_OFF); +@@ -1229,10 +1229,10 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3])); + } + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + + if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) { +- // WPA MIC error should block association attempt for 60 seconds ++ /* WPA MIC error should block association attempt for 60 seconds */ + if (pAd->StaCfg.bBlockAssoc && + RTMP_TIME_AFTER(pAd->Mlme.Now32, + pAd->StaCfg.LastMicErrorTime + +@@ -1260,18 +1260,18 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->RalinkCounters.OneSecTxFailCount; + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { +- // update channel quality for Roaming and UI LinkQuality display ++ /* update channel quality for Roaming and UI LinkQuality display */ + MlmeCalculateChannelQuality(pAd, NULL, pAd->Mlme.Now32); + } +- // must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if +- // Radio is currently in noisy environment ++ /* must be AFTER MlmeDynamicTxRateSwitching() because it needs to know if */ ++ /* Radio is currently in noisy environment */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) + AsicAdjustTxPower(pAd); + + if (INFRA_ON(pAd)) { + +- // Is PSM bit consistent with user power management policy? +- // This is the only place that will set PSM bit ON. ++ /* Is PSM bit consistent with user power management policy? */ ++ /* This is the only place that will set PSM bit ON. */ + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + MlmeCheckPsmChange(pAd, pAd->Mlme.Now32); + +@@ -1290,18 +1290,18 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + ("MMCHK - No BEACON. restore R66 to the low bound(%d) \n", + (0x2E + GET_LNA_GAIN(pAd)))); + } +- //if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && +- // (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) ++ /*if ((pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) && */ ++ /* (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)) */ + { + if (pAd->CommonCfg.bAPSDCapable + && pAd->CommonCfg.APEdcaParm.bAPSDCapable) { +- // When APSD is enabled, the period changes as 20 sec ++ /* When APSD is enabled, the period changes as 20 sec */ + if ((pAd->Mlme.OneSecPeriodicRound % 20) == 8) + RTMPSendNullFrame(pAd, + pAd->CommonCfg.TxRate, + TRUE); + } else { +- // Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) ++ /* Send out a NULL frame every 10 sec to inform AP that STA is still alive (Avoid being age out) */ + if ((pAd->Mlme.OneSecPeriodicRound % 10) == 8) { + if (pAd->CommonCfg.bWmmCapable) + RTMPSendNullFrame(pAd, +@@ -1323,13 +1323,13 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + ("MMCHK - No BEACON. Dead CQI. Auto Recovery attempt #%ld\n", + pAd->RalinkCounters.BadCQIAutoRecoveryCount)); + +- // Lost AP, send disconnect & link down event ++ /* Lost AP, send disconnect & link down event */ + LinkDown(pAd, FALSE); + + RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, + 0); + +- // RTMPPatchMacBbpBug(pAd); ++ /* RTMPPatchMacBbpBug(pAd); */ + MlmeAutoReconnectLastSSID(pAd); + } else if (CQI_IS_BAD(pAd->Mlme.ChannelQuality)) { + pAd->RalinkCounters.BadCQIAutoRecoveryCount++; +@@ -1350,7 +1350,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->StaCfg.RssiSample. + LastRssi2); + +- // Scanning, ignore Roaming ++ /* Scanning, ignore Roaming */ + if (!RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) + && (pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) +@@ -1359,7 +1359,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, + (CHAR) dBmToRoam)); + +- // Add auto seamless roaming ++ /* Add auto seamless roaming */ + if (rv == FALSE) + rv = MlmeCheckForFastRoaming(pAd); + +@@ -1377,9 +1377,9 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + } + } + } else if (ADHOC_ON(pAd)) { +- // If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState +- // to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can +- // join later. ++ /* If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState */ ++ /* to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can */ ++ /* join later. */ + if (RTMP_TIME_AFTER + (pAd->Mlme.Now32, + pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) +@@ -1411,7 +1411,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + MacTableDeleteEntry(pAd, pEntry->Aid, + pEntry->Addr); + } +- } else // no INFRA nor ADHOC connection ++ } else /* no INFRA nor ADHOC connection */ + { + + if (pAd->StaCfg.bScanReqIsFromWebUI && +@@ -1451,10 +1451,10 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + &ScanReq); + pAd->Mlme.CntlMachine.CurrState = + CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number ++ /* Reset Missed scan number */ + pAd->StaCfg.LastScanTime = + pAd->Mlme.Now32; +- } else if (pAd->StaCfg.BssType == BSS_ADHOC) // Quit the forever scan when in a very clean room ++ } else if (pAd->StaCfg.BssType == BSS_ADHOC) /* Quit the forever scan when in a very clean room */ + MlmeAutoReconnectLastSSID(pAd); + } else if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { + if ((pAd->Mlme.OneSecPeriodicRound % 7) == 0) { +@@ -1486,7 +1486,7 @@ SKIP_AUTO_SCAN_CONN: + return; + } + +-// Link down report ++/* Link down report */ + VOID LinkDownExec(IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) +@@ -1516,10 +1516,10 @@ VOID LinkDownExec(IN PVOID SystemSpecific1, + } + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd) + { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { + DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - Driver auto scan\n")); + MlmeEnqueue(pAd, +@@ -1531,7 +1531,7 @@ VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd) + } + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + { + if (pAd->StaCfg.bAutoConnectByBssid) { +@@ -1550,7 +1550,7 @@ VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + + RTMP_MLME_HANDLER(pAd); + } +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + else if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && + (MlmeValidateSSID + (pAd->MlmeAux.AutoReconnectSsid, +@@ -1589,30 +1589,30 @@ VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + BSS_ENTRY *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForRoaming\n")); +- // put all roaming candidates into RoamTab, and sort in RSSI order ++ /* put all roaming candidates into RoamTab, and sort in RSSI order */ + BssTableInit(pRoamTab); + for (i = 0; i < pAd->ScanTab.BssNr; i++) { + pBss = &pAd->ScanTab.BssEntry[i]; + + if ((pBss->LastBeaconRxTime + pAd->StaCfg.BeaconLostTime) < + Now32) +- continue; // AP disappear ++ continue; /* AP disappear */ + if (pBss->Rssi <= RSSI_THRESHOLD_FOR_ROAMING) +- continue; // RSSI too weak. forget it. ++ continue; /* RSSI too weak. forget it. */ + if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP ++ continue; /* skip current AP */ + if (pBss->Rssi < + (pAd->StaCfg.RssiSample.LastRssi0 + RSSI_DELTA)) +- continue; // only AP with stronger RSSI is eligible for roaming ++ continue; /* only AP with stronger RSSI is eligible for roaming */ + +- // AP passing all above rules is put into roaming candidate table ++ /* AP passing all above rules is put into roaming candidate table */ + NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, + sizeof(BSS_ENTRY)); + pRoamTab->BssNr += 1; + } + + if (pRoamTab->BssNr > 0) { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { + pAd->RalinkCounters.PoorCQIRoamingCount++; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1647,26 +1647,26 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + BSS_ENTRY *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForFastRoaming\n")); +- // put all roaming candidates into RoamTab, and sort in RSSI order ++ /* put all roaming candidates into RoamTab, and sort in RSSI order */ + BssTableInit(pRoamTab); + for (i = 0; i < pAd->ScanTab.BssNr; i++) { + pBss = &pAd->ScanTab.BssEntry[i]; + + if ((pBss->Rssi <= -50) + && (pBss->Channel == pAd->CommonCfg.Channel)) +- continue; // RSSI too weak. forget it. ++ continue; /* RSSI too weak. forget it. */ + if (MAC_ADDR_EQUAL(pBss->Bssid, pAd->CommonCfg.Bssid)) +- continue; // skip current AP ++ continue; /* skip current AP */ + if (!SSID_EQUAL + (pBss->Ssid, pBss->SsidLen, pAd->CommonCfg.Ssid, + pAd->CommonCfg.SsidLen)) +- continue; // skip different SSID ++ continue; /* skip different SSID */ + if (pBss->Rssi < + (RTMPMaxRssi + (pAd, pAd->StaCfg.RssiSample.LastRssi0, + pAd->StaCfg.RssiSample.LastRssi1, + pAd->StaCfg.RssiSample.LastRssi2) + RSSI_DELTA)) +- continue; // skip AP without better RSSI ++ continue; /* skip AP without better RSSI */ + + DBGPRINT(RT_DEBUG_TRACE, + ("LastRssi0 = %d, pBss->Rssi = %d\n", +@@ -1674,7 +1674,7 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.RssiSample.LastRssi1, + pAd->StaCfg.RssiSample.LastRssi2), + pBss->Rssi)); +- // AP passing all above rules is put into roaming candidate table ++ /* AP passing all above rules is put into roaming candidate table */ + NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, + sizeof(BSS_ENTRY)); + pRoamTab->BssNr += 1; +@@ -1683,7 +1683,7 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, + ("<== MlmeCheckForFastRoaming (BssNr=%d)\n", pRoamTab->BssNr)); + if (pRoamTab->BssNr > 0) { +- // check CntlMachine.CurrState to avoid collision with NDIS SetOID request ++ /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { + pAd->RalinkCounters.PoorCQIRoamingCount++; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1719,19 +1719,19 @@ VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE; + + if (ADHOC_ON(pAd)) { +- // If peer adhoc is b-only mode, we can't send 11g rate. ++ /* If peer adhoc is b-only mode, we can't send 11g rate. */ + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + pEntry->HTPhyMode.field.STBC = STBC_NONE; + +- // +- // For Adhoc MODE_CCK, driver will use AdhocBOnlyJoined flag to roll back to B only if necessary +- // ++ /* */ ++ /* For Adhoc MODE_CCK, driver will use AdhocBOnlyJoined flag to roll back to B only if necessary */ ++ /* */ + pEntry->HTPhyMode.field.MODE = pTxRate->Mode; + pEntry->HTPhyMode.field.ShortGI = + pAd->StaCfg.HTPhyMode.field.ShortGI; + pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + +- // Patch speed error in status page ++ /* Patch speed error in status page */ + pAd->StaCfg.HTPhyMode.field.MODE = pEntry->HTPhyMode.field.MODE; + } else { + if (pTxRate->Mode <= MaxMode) +@@ -1743,7 +1743,7 @@ VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + else + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + +- // Reexam each bandwidth's SGI support. ++ /* Reexam each bandwidth's SGI support. */ + if (pAd->StaCfg.HTPhyMode.field.ShortGI == GI_400) { + if ((pEntry->HTPhyMode.field.BW == BW_20) + && +@@ -1756,7 +1756,7 @@ VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + (pEntry, fCLIENT_STATUS_SGI40_CAPABLE))) + pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800; + } +- // Turn RTS/CTS rate to 6Mbps. ++ /* Turn RTS/CTS rate to 6Mbps. */ + if ((pEntry->HTPhyMode.field.MCS == 0) + && (pAd->StaCfg.HTPhyMode.field.MCS != 0)) { + pEntry->HTPhyMode.field.MCS = +@@ -1857,13 +1857,13 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + MAC_TABLE_ENTRY *pEntry; + RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; + +- // +- // walk through MAC table, see if need to change AP's TX rate toward each entry +- // ++ /* */ ++ /* walk through MAC table, see if need to change AP's TX rate toward each entry */ ++ /* */ + for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + pEntry = &pAd->MacTab.Content[i]; + +- // check if this entry need to switch rate automatically ++ /* check if this entry need to switch rate automatically */ + if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) + continue; + +@@ -1872,7 +1872,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + pRssi->AvgRssi0, + pRssi->AvgRssi1, pRssi->AvgRssi2); + +- // Update statistic counter ++ /* Update statistic counter */ + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); + pAd->bUpdateBcnCntDone = TRUE; +@@ -1894,9 +1894,9 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + pAd->WlanCounters.FailedCount.u.LowPart += + TxStaCnt0.field.TxFailCount; + +- // if no traffic in the past 1-sec period, don't change TX rate, +- // but clear all bad history. because the bad history may affect the next +- // Chariot throughput test ++ /* if no traffic in the past 1-sec period, don't change TX rate, */ ++ /* but clear all bad history. because the bad history may affect the next */ ++ /* Chariot throughput test */ + AccuTxTotalCnt = + pAd->RalinkCounters.OneSecTxNoRetryOkCount + + pAd->RalinkCounters.OneSecTxRetryOkCount + +@@ -1979,27 +1979,27 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + if (CurrRateIdx >= TableSize) { + CurrRateIdx = TableSize - 1; + } +- // When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex. +- // So need to sync here. ++ /* When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex. */ ++ /* So need to sync here. */ + pCurrTxRate = + (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; + if ((pEntry->HTPhyMode.field.MCS != pCurrTxRate->CurrMCS) +- //&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) ++ /*&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) */ + ) { + +- // Need to sync Real Tx rate and our record. +- // Then return for next DRS. ++ /* Need to sync Real Tx rate and our record. */ ++ /* Then return for next DRS. */ + pCurrTxRate = + (PRTMP_TX_RATE_SWITCH) & pTable[(InitTxRateIdx + 1) + * 5]; + pEntry->CurrTxRateIndex = InitTxRateIdx; + MlmeSetTxRate(pAd, pEntry, pCurrTxRate); + +- // reset all OneSecTx counters ++ /* reset all OneSecTx counters */ + RESET_ONE_SEC_TX_CNT(pEntry); + continue; + } +- // decide the next upgrade rate and downgrade rate, if any ++ /* decide the next upgrade rate and downgrade rate, if any */ + if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx - 1; +@@ -2026,27 +2026,27 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TrainDown = pCurrTxRate->TrainDown; + } + +- //pAd->DrsCounters.LastTimeTxRateChangeAction = pAd->DrsCounters.LastSecTxRateChangeAction; ++ /*pAd->DrsCounters.LastTimeTxRateChangeAction = pAd->DrsCounters.LastSecTxRateChangeAction; */ + +- // +- // Keep the last time TxRateChangeAction status. +- // ++ /* */ ++ /* Keep the last time TxRateChangeAction status. */ ++ /* */ + pEntry->LastTimeTxRateChangeAction = + pEntry->LastSecTxRateChangeAction; + +- // +- // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI +- // (criteria copied from RT2500 for Netopia case) +- // ++ /* */ ++ /* CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI */ ++ /* (criteria copied from RT2500 for Netopia case) */ ++ /* */ + if (TxTotalCnt <= 15) { + CHAR idx = 0; + UCHAR TxRateIdx; + UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = + 0, MCS5 = 0, MCS6 = 0, MCS7 = 0; + UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; +- UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; // 3*3 ++ UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; /* 3*3 */ + +- // check the existence and index of each needed MCS ++ /* check the existence and index of each needed MCS */ + while (idx < pTable[0]) { + pCurrTxRate = + (PRTMP_TX_RATE_SWITCH) & pTable[(idx + 1) * +@@ -2067,8 +2067,8 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } else if (pCurrTxRate->CurrMCS == MCS_6) { + MCS6 = idx; + } +- //else if (pCurrTxRate->CurrMCS == MCS_7) +- else if ((pCurrTxRate->CurrMCS == MCS_7) && (pCurrTxRate->ShortGI == GI_800)) // prevent the highest MCS using short GI when 1T and low throughput ++ /*else if (pCurrTxRate->CurrMCS == MCS_7) */ ++ else if ((pCurrTxRate->CurrMCS == MCS_7) && (pCurrTxRate->ShortGI == GI_800)) /* prevent the highest MCS using short GI when 1T and low throughput */ + { + MCS7 = idx; + } else if (pCurrTxRate->CurrMCS == MCS_12) { +@@ -2078,11 +2078,10 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } else if (pCurrTxRate->CurrMCS == MCS_14) { + MCS14 = idx; + } +- //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate +- else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) //we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI ++ else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) /*we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI */ + { + MCS15 = idx; +- } else if (pCurrTxRate->CurrMCS == MCS_20) // 3*3 ++ } else if (pCurrTxRate->CurrMCS == MCS_20) /* 3*3 */ + { + MCS20 = idx; + } else if (pCurrTxRate->CurrMCS == MCS_21) { +@@ -2110,7 +2109,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + + /*if (MCS15) */ +- if ((pTable == RateSwitchTable11BGN3S) || (pTable == RateSwitchTable11N3S) || (pTable == RateSwitchTable)) { // N mode with 3 stream // 3*3 ++ if ((pTable == RateSwitchTable11BGN3S) || (pTable == RateSwitchTable11N3S) || (pTable == RateSwitchTable)) { /* N mode with 3 stream // 3*3 */ + if (MCS23 && (Rssi >= -70)) + TxRateIdx = MCS23; + else if (MCS22 && (Rssi >= -72)) +@@ -2130,9 +2129,9 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + else + TxRateIdx = MCS0; + } +-// else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) +- else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) || (pTable == RateSwitchTable11N2S) || (pTable == RateSwitchTable11N2SForABand)) // 3*3 +- { // N mode with 2 stream ++/* else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) ||(pTable == RateSwitchTable11N2S) ||(pTable == RateSwitchTable11N2SForABand) || (pTable == RateSwitchTable)) */ ++ else if ((pTable == RateSwitchTable11BGN2S) || (pTable == RateSwitchTable11BGN2SForABand) || (pTable == RateSwitchTable11N2S) || (pTable == RateSwitchTable11N2SForABand)) /* 3*3 */ ++ { /* N mode with 2 stream */ + if (MCS15 && (Rssi >= (-70 + RssiOffset))) + TxRateIdx = MCS15; + else if (MCS14 && (Rssi >= (-72 + RssiOffset))) +@@ -2151,7 +2150,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TxRateIdx = MCS1; + else + TxRateIdx = MCS0; +- } else if ((pTable == RateSwitchTable11BGN1S) || (pTable == RateSwitchTable11N1S)) { // N mode with 1 stream ++ } else if ((pTable == RateSwitchTable11BGN1S) || (pTable == RateSwitchTable11N1S)) { /* N mode with 1 stream */ + if (MCS7 && (Rssi > (-72 + RssiOffset))) + TxRateIdx = MCS7; + else if (MCS6 && (Rssi > (-74 + RssiOffset))) +@@ -2168,7 +2167,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TxRateIdx = MCS1; + else + TxRateIdx = MCS0; +- } else { // Legacy mode ++ } else { /* Legacy mode */ + if (MCS7 && (Rssi > -70)) + TxRateIdx = MCS7; + else if (MCS6 && (Rssi > -74)) +@@ -2177,7 +2176,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TxRateIdx = MCS5; + else if (MCS4 && (Rssi > -82)) + TxRateIdx = MCS4; +- else if (MCS4 == 0) // for B-only mode ++ else if (MCS4 == 0) /* for B-only mode */ + TxRateIdx = MCS3; + else if (MCS3 && (Rssi > -85)) + TxRateIdx = MCS3; +@@ -2189,7 +2188,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TxRateIdx = MCS0; + } + +- // if (TxRateIdx != pAd->CommonCfg.TxRateIndex) ++ /* if (TxRateIdx != pAd->CommonCfg.TxRateIndex) */ + { + pEntry->CurrTxRateIndex = TxRateIdx; + pNextTxRate = +@@ -2205,7 +2204,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + sizeof(UCHAR) * + MAX_STEP_OF_TX_RATE_SWITCH); + pEntry->fLastSecAccordingRSSI = TRUE; +- // reset all OneSecTx counters ++ /* reset all OneSecTx counters */ + RESET_ONE_SEC_TX_CNT(pEntry); + + continue; +@@ -2214,7 +2213,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + if (pEntry->fLastSecAccordingRSSI == TRUE) { + pEntry->fLastSecAccordingRSSI = FALSE; + pEntry->LastSecTxRateChangeAction = 0; +- // reset all OneSecTx counters ++ /* reset all OneSecTx counters */ + RESET_ONE_SEC_TX_CNT(pEntry); + + continue; +@@ -2225,29 +2224,29 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + + pEntry->CurrTxRateStableTime++; + +- // downgrade TX quality if PER >= Rate-Down threshold ++ /* downgrade TX quality if PER >= Rate-Down threshold */ + if (TxErrorRatio >= TrainDown) { + bTrainUpDown = TRUE; + pEntry->TxQuality[CurrRateIdx] = + DRS_TX_QUALITY_WORST_BOUND; + } +- // upgrade TX quality if PER <= Rate-Up threshold ++ /* upgrade TX quality if PER <= Rate-Up threshold */ + else if (TxErrorRatio <= TrainUp) { + bTrainUpDown = TRUE; + bUpgradeQuality = TRUE; + if (pEntry->TxQuality[CurrRateIdx]) +- pEntry->TxQuality[CurrRateIdx]--; // quality very good in CurrRate ++ pEntry->TxQuality[CurrRateIdx]--; /* quality very good in CurrRate */ + + if (pEntry->TxRateUpPenalty) + pEntry->TxRateUpPenalty--; + else if (pEntry->TxQuality[UpRateIdx]) +- pEntry->TxQuality[UpRateIdx]--; // may improve next UP rate's quality ++ pEntry->TxQuality[UpRateIdx]--; /* may improve next UP rate's quality */ + } + + pEntry->PER[CurrRateIdx] = (UCHAR) TxErrorRatio; + + if (bTrainUpDown) { +- // perform DRS - consider TxRate Down first, then rate up. ++ /* perform DRS - consider TxRate Down first, then rate up. */ + if ((CurrRateIdx != DownRateIdx) + && (pEntry->TxQuality[CurrRateIdx] >= + DRS_TX_QUALITY_WORST_BOUND)) { +@@ -2260,11 +2259,11 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + } while (FALSE); + +- // if rate-up happen, clear all bad history of all TX rates ++ /* if rate-up happen, clear all bad history of all TX rates */ + if (pEntry->CurrTxRateIndex > CurrRateIdx) { + pEntry->CurrTxRateStableTime = 0; + pEntry->TxRateUpPenalty = 0; +- pEntry->LastSecTxRateChangeAction = 1; // rate UP ++ pEntry->LastSecTxRateChangeAction = 1; /* rate UP */ + NdisZeroMemory(pEntry->TxQuality, + sizeof(USHORT) * + MAX_STEP_OF_TX_RATE_SWITCH); +@@ -2272,9 +2271,9 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + sizeof(UCHAR) * + MAX_STEP_OF_TX_RATE_SWITCH); + +- // +- // For TxRate fast train up +- // ++ /* */ ++ /* For TxRate fast train up */ ++ /* */ + if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) { + RTMPSetTimer(&pAd->StaCfg. + StaQuickResponeForRateUpTimer, +@@ -2285,17 +2284,17 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + bTxRateChanged = TRUE; + } +- // if rate-down happen, only clear DownRate's bad history ++ /* if rate-down happen, only clear DownRate's bad history */ + else if (pEntry->CurrTxRateIndex < CurrRateIdx) { + pEntry->CurrTxRateStableTime = 0; +- pEntry->TxRateUpPenalty = 0; // no penalty +- pEntry->LastSecTxRateChangeAction = 2; // rate DOWN ++ pEntry->TxRateUpPenalty = 0; /* no penalty */ ++ pEntry->LastSecTxRateChangeAction = 2; /* rate DOWN */ + pEntry->TxQuality[pEntry->CurrTxRateIndex] = 0; + pEntry->PER[pEntry->CurrTxRateIndex] = 0; + +- // +- // For TxRate fast train down +- // ++ /* */ ++ /* For TxRate fast train down */ ++ /* */ + if (!pAd->StaCfg.StaQuickResponeForRateUpTimerRunning) { + RTMPSetTimer(&pAd->StaCfg. + StaQuickResponeForRateUpTimer, +@@ -2306,7 +2305,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + bTxRateChanged = TRUE; + } else { +- pEntry->LastSecTxRateChangeAction = 0; // rate no change ++ pEntry->LastSecTxRateChangeAction = 0; /* rate no change */ + bTxRateChanged = FALSE; + } + +@@ -2314,7 +2313,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + { + UCHAR tmpTxRate; + +- // to fix tcp ack issue ++ /* to fix tcp ack issue */ + if (!bTxRateChanged + && (pAd->RalinkCounters.OneSecReceivedByteCount > + (pAd->RalinkCounters. +@@ -2339,7 +2338,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + if (bTxRateChanged && pNextTxRate) { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } +- // reset all OneSecTx counters ++ /* reset all OneSecTx counters */ + RESET_ONE_SEC_TX_CNT(pEntry); + } + } +@@ -2369,7 +2368,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; + ULONG TxTotalCnt; + ULONG TxErrorRatio = 0; +- BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE; ++ BOOLEAN bTxRateChanged; /*, bUpgradeQuality = FALSE; */ + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; + PUCHAR pTable; + UCHAR TableSize = 0; +@@ -2383,13 +2382,13 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; + +- // +- // walk through MAC table, see if need to change AP's TX rate toward each entry +- // ++ /* */ ++ /* walk through MAC table, see if need to change AP's TX rate toward each entry */ ++ /* */ + for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { + pEntry = &pAd->MacTab.Content[i]; + +- // check if this entry need to switch rate automatically ++ /* check if this entry need to switch rate automatically */ + if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE) + continue; + +@@ -2409,7 +2408,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, + &InitTxRateIdx); + +- // decide the next upgrade rate and downgrade rate, if any ++ /* decide the next upgrade rate and downgrade rate, if any */ + if ((CurrRateIdx > 0) && (CurrRateIdx < (TableSize - 1))) { + UpRateIdx = CurrRateIdx + 1; + DownRateIdx = CurrRateIdx - 1; +@@ -2437,7 +2436,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + } + + if (pAd->MacTab.Size == 1) { +- // Update statistic counter ++ /* Update statistic counter */ + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); + +@@ -2475,10 +2474,10 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + TxTotalCnt; + } + +- // +- // CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI +- // (criteria copied from RT2500 for Netopia case) +- // ++ /* */ ++ /* CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI */ ++ /* (criteria copied from RT2500 for Netopia case) */ ++ /* */ + if (TxTotalCnt <= 12) { + NdisZeroMemory(pAd->DrsCounters.TxQuality, + sizeof(USHORT) * +@@ -2511,7 +2510,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + else + ratio = 4; + +- // downgrade TX quality if PER >= Rate-Down threshold ++ /* downgrade TX quality if PER >= Rate-Down threshold */ + if (TxErrorRatio >= TrainDown) { + pAd->DrsCounters.TxQuality[CurrRateIdx] = + DRS_TX_QUALITY_WORST_BOUND; +@@ -2522,7 +2521,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + + OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); + +- // perform DRS - consider TxRate Down first, then rate up. ++ /* perform DRS - consider TxRate Down first, then rate up. */ + if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) + && (CurrRateIdx != DownRateIdx)) { + if ((pAd->DrsCounters.LastTxOkCount + 2) >= +@@ -2548,7 +2547,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + } + } while (FALSE); + +- // if rate-up happen, clear all bad history of all TX rates ++ /* if rate-up happen, clear all bad history of all TX rates */ + if (pAd->CommonCfg.TxRateIndex > CurrRateIdx) { + pAd->DrsCounters.TxRateUpPenalty = 0; + NdisZeroMemory(pAd->DrsCounters.TxQuality, +@@ -2559,13 +2558,13 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + MAX_STEP_OF_TX_RATE_SWITCH); + bTxRateChanged = TRUE; + } +- // if rate-down happen, only clear DownRate's bad history ++ /* if rate-down happen, only clear DownRate's bad history */ + else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx) { + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("QuickDRS: --TX rate from %d to %d \n", + CurrRateIdx, pAd->CommonCfg.TxRateIndex)); + +- pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty ++ pAd->DrsCounters.TxRateUpPenalty = 0; /* no penalty */ + pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = + 0; + pAd->DrsCounters.PER[pAd->CommonCfg.TxRateIndex] = 0; +@@ -2606,18 +2605,18 @@ VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + { + ULONG PowerMode; + +- // condition - +- // 1. Psm maybe ON only happen in INFRASTRUCTURE mode +- // 2. user wants either MAX_PSP or FAST_PSP +- // 3. but current psm is not in PWR_SAVE +- // 4. CNTL state machine is not doing SCANning +- // 5. no TX SUCCESS event for the past 1-sec period ++ /* condition - */ ++ /* 1. Psm maybe ON only happen in INFRASTRUCTURE mode */ ++ /* 2. user wants either MAX_PSP or FAST_PSP */ ++ /* 3. but current psm is not in PWR_SAVE */ ++ /* 4. CNTL state machine is not doing SCANning */ ++ /* 5. no TX SUCCESS event for the past 1-sec period */ + PowerMode = pAd->StaCfg.WindowsPowerMode; + + if (INFRA_ON(pAd) && + (PowerMode != Ndis802_11PowerModeCAM) && + (pAd->StaCfg.Psm == PWR_ACTIVE) && +-// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ++/* (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) */ + (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) && + RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP) + /*&& +@@ -2637,8 +2636,8 @@ VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + } + } + +-// IRQL = PASSIVE_LEVEL +-// IRQL = DISPATCH_LEVEL ++/* IRQL = PASSIVE_LEVEL */ ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm) + { + AUTO_RSP_CFG_STRUC csr4; +@@ -2683,7 +2682,7 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + UINT32 OneSecTxFailCount = 0; + UINT32 OneSecRxOkCnt = 0; + UINT32 OneSecRxFcsErrCnt = 0; +- ULONG ChannelQuality = 0; // 0..100, Channel Quality Indication for Roaming ++ ULONG ChannelQuality = 0; /* 0..100, Channel Quality Indication for Roaming */ + ULONG BeaconLostTime = pAd->StaCfg.BeaconLostTime; + + if (pAd->OpMode == OPMODE_STA) { +@@ -2699,9 +2698,9 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + MaxRssi = RTMPMaxRssi(pAd, pRssiSample->LastRssi0, + pRssiSample->LastRssi1, pRssiSample->LastRssi2); + +- // +- // calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics +- // ++ /* */ ++ /* calculate TX packet error ratio and TX retry ratio - if too few TX samples, skip TX related statistics */ ++ /* */ + TxOkCnt = OneSecTxNoRetryOkCount + OneSecTxRetryOkCount; + TxCnt = TxOkCnt + OneSecTxFailCount; + if (TxCnt < 5) { +@@ -2712,26 +2711,26 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + TxPRR = ((TxCnt - OneSecTxNoRetryOkCount) * 100) / TxCnt; + } + +- // +- // calculate RX PER - don't take RxPER into consideration if too few sample +- // ++ /* */ ++ /* calculate RX PER - don't take RxPER into consideration if too few sample */ ++ /* */ + RxCnt = OneSecRxOkCnt + OneSecRxFcsErrCnt; + if (RxCnt < 5) + RxPER = 0; + else + RxPER = (OneSecRxFcsErrCnt * 100) / RxCnt; + +- // +- // decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER +- // +- if ((pAd->OpMode == OPMODE_STA) && INFRA_ON(pAd) && (OneSecTxNoRetryOkCount < 2) && // no heavy traffic ++ /* */ ++ /* decide ChannelQuality based on: 1)last BEACON received time, 2)last RSSI, 3)TxPER, and 4)RxPER */ ++ /* */ ++ if ((pAd->OpMode == OPMODE_STA) && INFRA_ON(pAd) && (OneSecTxNoRetryOkCount < 2) && /* no heavy traffic */ + ((pAd->StaCfg.LastBeaconRxTime + BeaconLostTime) < Now32)) { + DBGPRINT(RT_DEBUG_TRACE, + ("BEACON lost > %ld msec with TxOkCnt=%ld -> CQI=0\n", + BeaconLostTime, TxOkCnt)); + ChannelQuality = 0; + } else { +- // Normalize Rssi ++ /* Normalize Rssi */ + if (MaxRssi > -40) + NorRssi = 100; + else if (MaxRssi < -90) +@@ -2739,7 +2738,7 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + else + NorRssi = (MaxRssi + 90) * 2; + +- // ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) ++ /* ChannelQuality = W1*RSSI + W2*TxPRR + W3*RxPER (RSSI 0..100), (TxPER 100..0), (RxPER 100..0) */ + ChannelQuality = (RSSI_WEIGHTING * NorRssi + + TX_WEIGHTING * (100 - TxPRR) + + RX_WEIGHTING * (100 - RxPER)) / 100; +@@ -2751,16 +2750,16 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) + { + AUTO_RSP_CFG_STRUC csr4; + +- // +- // Always use Long preamble before verifiation short preamble functionality works well. +- // Todo: remove the following line if short preamble functionality works +- // +- //TxPreamble = Rt802_11PreambleLong; ++ /* */ ++ /* Always use Long preamble before verifiation short preamble functionality works well. */ ++ /* Todo: remove the following line if short preamble functionality works */ ++ /* */ ++ /*TxPreamble = Rt802_11PreambleLong; */ + + RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); + if (TxPreamble == Rt802_11PreambleLong) { +@@ -2769,7 +2768,7 @@ VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + csr4.field.AutoResponderPreamble = 0; + } else { +- // NOTE: 1Mbps should always use long preamble ++ /* NOTE: 1Mbps should always use long preamble */ + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeSetTxPreamble (= SHORT PREAMBLE)\n")); + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); +@@ -2796,7 +2795,7 @@ VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + ULONG bitmap = pAdapter->CommonCfg.BasicRateBitmap; + + /* if A mode, always use fix BasicRateBitMap */ +- //if (pAdapter->CommonCfg.Channel == PHY_11A) ++ /*if (pAdapter->CommonCfg.Channel == PHY_11A) */ + if (pAdapter->CommonCfg.Channel > 14) + pAdapter->CommonCfg.BasicRateBitmap = 0x150; /* 6, 12, 24M */ + /* End of if */ +@@ -2828,10 +2827,10 @@ VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + } /* End of for */ + } /* End of UpdateBasicRateBitmap */ + +-// IRQL = PASSIVE_LEVEL +-// IRQL = DISPATCH_LEVEL +-// bLinkUp is to identify the inital link speed. +-// TRUE indicates the rate update at linkup, we should not try to set the rate at 54Mbps. ++/* IRQL = PASSIVE_LEVEL */ ++/* IRQL = DISPATCH_LEVEL */ ++/* bLinkUp is to identify the inital link speed. */ ++/* TRUE indicates the rate update at linkup, we should not try to set the rate at 54Mbps. */ + VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + { + int i, num; +@@ -2846,7 +2845,7 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + BOOLEAN *auto_rate_cur_p; + UCHAR HtMcs = MCS_AUTO; + +- // find max desired rate ++ /* find max desired rate */ + UpdateBasicRateBitmap(pAd); + + num = 0; +@@ -2901,14 +2900,14 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + Rate = RATE_54; + num++; + break; +- //default: Rate = RATE_1; break; ++ /*default: Rate = RATE_1; break; */ + } + if (MaxDesire < Rate) + MaxDesire = Rate; + } + +-//=========================================================================== +-//=========================================================================== ++/*=========================================================================== */ ++/*=========================================================================== */ + { + pHtPhy = &pAd->StaCfg.HTPhyMode; + pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode; +@@ -2929,25 +2928,25 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + pMaxHtPhy->word = 0; + pHtPhy->word = 0; + +- // Auto rate switching is enabled only if more than one DESIRED RATES are +- // specified; otherwise disabled ++ /* Auto rate switching is enabled only if more than one DESIRED RATES are */ ++ /* specified; otherwise disabled */ + if (num <= 1) { +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; ++ /*OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); */ ++ /*pAd->CommonCfg.bAutoTxRateSwitch = FALSE; */ + *auto_rate_cur_p = FALSE; + } else { +- //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; ++ /*OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); */ ++ /*pAd->CommonCfg.bAutoTxRateSwitch = TRUE; */ + *auto_rate_cur_p = TRUE; + } + + if (HtMcs != MCS_AUTO) { +- //OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = FALSE; ++ /*OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); */ ++ /*pAd->CommonCfg.bAutoTxRateSwitch = FALSE; */ + *auto_rate_cur_p = FALSE; + } else { +- //OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); +- //pAd->CommonCfg.bAutoTxRateSwitch = TRUE; ++ /*OPSTATUS_SET_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED); */ ++ /*pAd->CommonCfg.bAutoTxRateSwitch = TRUE; */ + *auto_rate_cur_p = TRUE; + } + +@@ -2963,7 +2962,7 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + ExtRateLen = pAd->CommonCfg.ExtRateLen; + } + +- // find max supported rate ++ /* find max supported rate */ + for (i = 0; i < SupRateLen; i++) { + switch (pSupRate[i] & 0x7f) { + case 2: +@@ -3106,11 +3105,11 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + + RTMP_IO_WRITE32(pAd, LEGACY_BASIC_RATE, BasicRateBitmap); + +- // bug fix +- // pAd->CommonCfg.BasicRateBitmap = BasicRateBitmap; ++ /* bug fix */ ++ /* pAd->CommonCfg.BasicRateBitmap = BasicRateBitmap; */ + +- // calculate the exptected ACK rate for each TX rate. This info is used to caculate +- // the DURATION field of outgoing uniicast DATA/MGMT frame ++ /* calculate the exptected ACK rate for each TX rate. This info is used to caculate */ ++ /* the DURATION field of outgoing uniicast DATA/MGMT frame */ + for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) { + if (BasicRateBitmap & (0x01 << i)) + CurrBasicRate = (UCHAR) i; +@@ -3120,21 +3119,19 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeUpdateTxRates[MaxSupport = %d] = MaxDesire %d Mbps\n", + RateIdToMbps[MaxSupport], RateIdToMbps[MaxDesire])); +- // max tx rate = min {max desire rate, max supported rate} ++ /* max tx rate = min {max desire rate, max supported rate} */ + if (MaxSupport < MaxDesire) + pAd->CommonCfg.MaxTxRate = MaxSupport; + else + pAd->CommonCfg.MaxTxRate = MaxDesire; + + pAd->CommonCfg.MinTxRate = MinSupport; +- // 2003-07-31 john - 2500 doesn't have good sensitivity at high OFDM rates. to increase the success +- // ratio of initial DHCP packet exchange, TX rate starts from a lower rate depending +- // on average RSSI +- // 1. RSSI >= -70db, start at 54 Mbps (short distance) +- // 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) +- // 3. -75 > RSSI, start at 11 Mbps (long distance) +- //if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)/* && +- // OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)*/) ++ /* 2003-07-31 john - 2500 doesn't have good sensitivity at high OFDM rates. to increase the success */ ++ /* ratio of initial DHCP packet exchange, TX rate starts from a lower rate depending */ ++ /* on average RSSI */ ++ /* 1. RSSI >= -70db, start at 54 Mbps (short distance) */ ++ /* 2. -70 > RSSI >= -75, start at 24 Mbps (mid distance) */ ++ /* 3. -75 > RSSI, start at 11 Mbps (long distance) */ + if (*auto_rate_cur_p) { + short dbm = 0; + +@@ -3150,7 +3147,7 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + else if (dbm < -70) + pAd->CommonCfg.TxRate = RATE_24; + +- // should never exceed MaxTxRate (consider 11B-only mode) ++ /* should never exceed MaxTxRate (consider 11B-only mode) */ + if (pAd->CommonCfg.TxRate > pAd->CommonCfg.MaxTxRate) + pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate; + +@@ -3206,11 +3203,11 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK; + pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1; + +-//#ifdef WIFI_TEST ++/*#ifdef WIFI_TEST */ + pAd->CommonCfg.RtsRate = RATE_11; +-//#else +-// pAd->CommonCfg.RtsRate = RATE_1; +-//#endif ++/*#else */ ++/* pAd->CommonCfg.RtsRate = RATE_1; */ ++/*#endif */ + break; + case PHY_11G: + case PHY_11A: +@@ -3242,7 +3239,7 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; + } + break; +- default: // error ++ default: /* error */ + pAd->CommonCfg.MlmeRate = RATE_6; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + pAd->CommonCfg.MlmeTransmit.field.MCS = +@@ -3250,9 +3247,9 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + pAd->CommonCfg.RtsRate = RATE_1; + break; + } +- // +- // Keep Basic Mlme Rate. +- // ++ /* */ ++ /* Keep Basic Mlme Rate. */ ++ /* */ + pAd->MacTab.Content[MCAST_WCID].HTPhyMode.word = + pAd->CommonCfg.MlmeTransmit.word; + if (pAd->CommonCfg.MlmeTransmit.field.MODE == MODE_OFDM) +@@ -3297,8 +3294,8 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + */ + VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + { +- UCHAR StbcMcs; //j, StbcMcs, bitmask; +- CHAR i; // 3*3 ++ UCHAR StbcMcs; /*j, StbcMcs, bitmask; */ ++ CHAR i; /* 3*3 */ + RT_HT_CAPABILITY *pRtHtCap = NULL; + RT_HT_PHY_INFO *pActiveHtPhy = NULL; + ULONG BasicMCS; +@@ -3354,7 +3351,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pMaxHtPhy->field.STBC = STBC_NONE; + } + +- // Decide MAX ht rate. ++ /* Decide MAX ht rate. */ + if ((pRtHtCap->GF) && (pAd->CommonCfg.DesiredHtPhy.GF)) + pMaxHtPhy->field.MODE = MODE_HTGREENFIELD; + else +@@ -3379,7 +3376,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pMaxHtPhy->field.MCS = 32; + } + +- for (i = 23; i >= 0; i--) // 3*3 ++ for (i = 23; i >= 0; i--) /* 3*3 */ + { + j = i / 8; + bitmask = (1 << (i - (j * 8))); +@@ -3394,12 +3391,12 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + break; + } + +- // Copy MIN ht rate. rt2860??? ++ /* Copy MIN ht rate. rt2860??? */ + pMinHtPhy->field.BW = BW_20; + pMinHtPhy->field.MCS = 0; + pMinHtPhy->field.STBC = 0; + pMinHtPhy->field.ShortGI = 0; +- //If STA assigns fixed rate. update to fixed here. ++ /*If STA assigns fixed rate. update to fixed here. */ + if ((pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff)) { + if (pDesireHtPhy->MCSSet[4] != 0) { + pMaxHtPhy->field.MCS = 32; +@@ -3409,7 +3406,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pMinHtPhy->field.MCS)); + } + +- for (i = 23; (CHAR) i >= 0; i--) // 3*3 ++ for (i = 23; (CHAR) i >= 0; i--) /* 3*3 */ + { + j = i / 8; + bitmask = (1 << (i - (j * 8))); +@@ -3424,14 +3421,14 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + } + } + +- // Decide ht rate ++ /* Decide ht rate */ + pHtPhy->field.STBC = pMaxHtPhy->field.STBC; + pHtPhy->field.BW = pMaxHtPhy->field.BW; + pHtPhy->field.MODE = pMaxHtPhy->field.MODE; + pHtPhy->field.MCS = pMaxHtPhy->field.MCS; + pHtPhy->field.ShortGI = pMaxHtPhy->field.ShortGI; + +- // use default now. rt2860 ++ /* use default now. rt2860 */ + if (pDesireHtPhy->MCSSet[0] != 0xff) + *auto_rate_cur_p = FALSE; + else +@@ -3464,21 +3461,21 @@ VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) + } + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeRadioOff(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_OFF(pAd); + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_ON(pAd); + } + +-// =========================================================================================== +-// bss_table.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* bss_table.c */ ++/* =========================================================================================== */ + + /*! \brief initialize BSS table + * \param p_tab pointer to the table +@@ -3498,7 +3495,7 @@ VOID BssTableInit(IN BSS_TABLE * Tab) + Tab->BssOverlapNr = 0; + for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) { + NdisZeroMemory(&Tab->BssEntry[i], sizeof(BSS_ENTRY)); +- Tab->BssEntry[i].Rssi = -127; // initial the rssi as a minimum value ++ Tab->BssEntry[i].Rssi = -127; /* initial the rssi as a minimum value */ + } + } + +@@ -3518,10 +3515,10 @@ ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel) + UCHAR i; + + for (i = 0; i < Tab->BssNr; i++) { +- // +- // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. +- // We should distinguish this case. +- // ++ /* */ ++ /* Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. */ ++ /* We should distinguish this case. */ ++ /* */ + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || + ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && + MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid)) { +@@ -3538,10 +3535,10 @@ ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, + UCHAR i; + + for (i = 0; i < Tab->BssNr; i++) { +- // +- // Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. +- // We should distinguish this case. +- // ++ /* */ ++ /* Some AP that support A/B/G mode that may used the same BSSID on 11A and 11B/G. */ ++ /* We should distinguish this case. */ ++ /* */ + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || + ((Tab->BssEntry[i].Channel > 14) && (Channel > 14))) && + MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid) && +@@ -3593,7 +3590,7 @@ ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, + return (ULONG) BSS_NOT_FOUND; + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, + IN PUCHAR pBssid, IN UCHAR Channel) + { +@@ -3635,13 +3632,13 @@ VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, + ("BATableDeleteORIEntry numAsOriginator= %ld\n", + pAd->BATable.numAsRecipient)); +- // Erase Bitmap flag. ++ /* Erase Bitmap flag. */ + } +- pAd->MacTab.Content[pBAORIEntry->Wcid].TXBAbitmap &= (~(1 << (pBAORIEntry->TID))); // If STA mode, erase flag here +- pAd->MacTab.Content[pBAORIEntry->Wcid].BAOriWcidArray[pBAORIEntry->TID] = 0; // If STA mode, erase flag here ++ pAd->MacTab.Content[pBAORIEntry->Wcid].TXBAbitmap &= (~(1 << (pBAORIEntry->TID))); /* If STA mode, erase flag here */ ++ pAd->MacTab.Content[pBAORIEntry->Wcid].BAOriWcidArray[pBAORIEntry->TID] = 0; /* If STA mode, erase flag here */ + pBAORIEntry->ORI_BA_Status = Originator_NONE; + pBAORIEntry->Token = 1; +- // Not clear Sequence here. ++ /* Not clear Sequence here. */ + NdisReleaseSpinLock(&pAd->BATabLock); + } + } +@@ -3655,7 +3652,7 @@ VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + */ +-VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM pCfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM pCfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + IN UCHAR HtCapabilityLen, + IN UCHAR AddHtInfoLen, + IN UCHAR NewExtChanOffset, +@@ -3669,13 +3666,13 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) + { + COPY_MAC_ADDR(pBss->Bssid, pBssid); +- // Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID ++ /* Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID */ + pBss->Hidden = 1; + if (SsidLen > 0) { +- // For hidden SSID AP, it might send beacon with SSID len equal to 0 +- // Or send beacon /probe response with SSID len matching real SSID length, +- // but SSID is all zero. such as "00-00-00-00" with length 4. +- // We have to prevent this case overwrite correct table ++ /* For hidden SSID AP, it might send beacon with SSID len equal to 0 */ ++ /* Or send beacon /probe response with SSID len matching real SSID length, */ ++ /* but SSID is all zero. such as "00-00-00-00" with length 4. */ ++ /* We have to prevent this case overwrite correct table */ + if (NdisEqualMemory(Ssid, ZeroSsid, SsidLen) == 0) { + NdisZeroMemory(pBss->Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pBss->Ssid, Ssid, SsidLen); +@@ -3698,8 +3695,8 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + } + + pBss->CapabilityInfo = CapabilityInfo; +- // The privacy bit indicate security is ON, it maight be WEP, TKIP or AES +- // Combine with AuthMode, they will decide the connection methods. ++ /* The privacy bit indicate security is ON, it maight be WEP, TKIP or AES */ ++ /* Combine with AuthMode, they will decide the connection methods. */ + pBss->Privacy = CAP_IS_PRIVACY_ON(pBss->CapabilityInfo); + ASSERT(SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES); + if (SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES) +@@ -3715,15 +3712,15 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + pBss->Channel = Channel; + pBss->CentralChannel = Channel; + pBss->Rssi = Rssi; +- // Update CkipFlag. if not exists, the value is 0x0 ++ /* Update CkipFlag. if not exists, the value is 0x0 */ + pBss->CkipFlag = CkipFlag; + +- // New for microsoft Fixed IEs ++ /* New for microsoft Fixed IEs */ + NdisMoveMemory(pBss->FixIEs.Timestamp, &TimeStamp, 8); + pBss->FixIEs.BeaconInterval = BeaconPeriod; + pBss->FixIEs.Capabilities = CapabilityInfo; + +- // New for microsoft Variable IEs ++ /* New for microsoft Variable IEs */ + if (LengthVIE != 0) { + pBss->VarIELen = LengthVIE; + NdisMoveMemory(pBss->VarIEs, pVIE, pBss->VarIELen); +@@ -3762,7 +3759,7 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + + BssCipherParse(pBss); + +- // new for QOS ++ /* new for QOS */ + if (pEdcaParm) + NdisMoveMemory(&pBss->EdcaParm, pEdcaParm, sizeof(EDCA_PARM)); + else +@@ -3811,7 +3808,7 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + } + break; + } +- Length = Length + 2 + (USHORT) pEid->Len; // Eid[1] + Len[1]+ content[Len] ++ Length = Length + 2 + (USHORT) pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ + pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); + } + } +@@ -3840,7 +3837,7 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + IRQL = DISPATCH_LEVEL + + */ +-ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + IN UCHAR HtCapabilityLen, + IN UCHAR AddHtInfoLen, + IN UCHAR NewExtChanOffset, +@@ -3860,11 +3857,11 @@ ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBss + ChannelNo); + if (Idx == BSS_NOT_FOUND) { + if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) { +- // +- // It may happen when BSS Table was full. +- // The desired AP will not be added into BSS Table +- // In this case, if we found the desired AP then overwrite BSS Table. +- // ++ /* */ ++ /* It may happen when BSS Table was full. */ ++ /* The desired AP will not be added into BSS Table */ ++ /* In this case, if we found the desired AP then overwrite BSS Table. */ ++ /* */ + if (!OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, pBssid) +@@ -3926,7 +3923,7 @@ ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBss + return Idx; + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + OUT BSS_TABLE * OutTab, IN CHAR Ssid[], IN UCHAR SsidLen) + { +@@ -3950,7 +3947,7 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + || bIsHiddenApIncluded)) { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + +- // 2.4G/5G N only mode ++ /* 2.4G/5G N only mode */ + if ((pInBss->HtCapabilityLen == 0) && + ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) + || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) { +@@ -3958,28 +3955,28 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + ("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +- // New for WPA2 +- // Check the Authmode first ++ /* New for WPA2 */ ++ /* Check the Authmode first */ + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { +- // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode ++ /* Check AuthMode and AuthModeAux for matching, in case AP support dual-mode */ + if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) + && (pAd->StaCfg.AuthMode != + pInBss->AuthModeAux)) +- // None matched ++ /* None matched */ + continue; + +- // Check cipher suite, AP must have more secured cipher than station setting ++ /* Check cipher suite, AP must have more secured cipher than station setting */ + if ((pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPA) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPAPSK)) { +- // If it's not mixed mode, we should only let BSS pass with the same encryption ++ /* If it's not mixed mode, we should only let BSS pass with the same encryption */ + if (pInBss->WPA.bMixMode == FALSE) + if (pAd->StaCfg.WepStatus != + pInBss->WPA.GroupCipher) + continue; + +- // check group cipher ++ /* check group cipher */ + if ((pAd->StaCfg.WepStatus < + pInBss->WPA.GroupCipher) + && (pInBss->WPA.GroupCipher != +@@ -3988,9 +3985,9 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + Ndis802_11GroupWEP104Enabled)) + continue; + +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched ++ /* check pairwise cipher, skip if none matched */ ++ /* If profile set to AES, let it pass without question. */ ++ /* If profile set to TKIP, we must find one mateched */ + if ((pAd->StaCfg.WepStatus == + Ndis802_11Encryption2Enabled) + && (pAd->StaCfg.WepStatus != +@@ -4003,13 +4000,13 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + Ndis802_11AuthModeWPA2) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPA2PSK)) { +- // If it's not mixed mode, we should only let BSS pass with the same encryption ++ /* If it's not mixed mode, we should only let BSS pass with the same encryption */ + if (pInBss->WPA2.bMixMode == FALSE) + if (pAd->StaCfg.WepStatus != + pInBss->WPA2.GroupCipher) + continue; + +- // check group cipher ++ /* check group cipher */ + if ((pAd->StaCfg.WepStatus < + pInBss->WPA.GroupCipher) + && (pInBss->WPA2.GroupCipher != +@@ -4018,9 +4015,9 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + Ndis802_11GroupWEP104Enabled)) + continue; + +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched ++ /* check pairwise cipher, skip if none matched */ ++ /* If profile set to AES, let it pass without question. */ ++ /* If profile set to TKIP, we must find one mateched */ + if ((pAd->StaCfg.WepStatus == + Ndis802_11Encryption2Enabled) + && (pAd->StaCfg.WepStatus != +@@ -4030,27 +4027,27 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + continue; + } + } +- // Bss Type matched, SSID matched. +- // We will check wepstatus for qualification Bss ++ /* Bss Type matched, SSID matched. */ ++ /* We will check wepstatus for qualification Bss */ + else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) { + DBGPRINT(RT_DEBUG_TRACE, + ("StaCfg.WepStatus=%d, while pInBss->WepStatus=%d\n", + pAd->StaCfg.WepStatus, + pInBss->WepStatus)); +- // +- // For the SESv2 case, we will not qualify WepStatus. +- // ++ /* */ ++ /* For the SESv2 case, we will not qualify WepStatus. */ ++ /* */ + if (!pInBss->bSES) + continue; + } +- // Since the AP is using hidden SSID, and we are trying to connect to ANY +- // It definitely will fail. So, skip it. +- // CCX also require not even try to connect it!! ++ /* Since the AP is using hidden SSID, and we are trying to connect to ANY */ ++ /* It definitely will fail. So, skip it. */ ++ /* CCX also require not even try to connect it!! */ + if (SsidLen == 0) + continue; + +- // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region +- // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, ++ /* If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region */ ++ /* If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, */ + if ((pInBss->CentralChannel != pInBss->Channel) && + (pAd->CommonCfg.RegTransmitSetting.field.BW == + BW_40)) { +@@ -4069,7 +4066,7 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + } + } + } +- // copy matching BSS from InTab to OutTab ++ /* copy matching BSS from InTab to OutTab */ + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); + + OutTab->BssNr++; +@@ -4077,7 +4074,7 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + && (SsidLen == 0)) { + BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + +- // 2.4G/5G N only mode ++ /* 2.4G/5G N only mode */ + if ((pInBss->HtCapabilityLen == 0) && + ((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) + || (pAd->CommonCfg.PhyMode == PHY_11N_5G))) { +@@ -4085,35 +4082,35 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + ("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n")); + continue; + } +- // New for WPA2 +- // Check the Authmode first ++ /* New for WPA2 */ ++ /* Check the Authmode first */ + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { +- // Check AuthMode and AuthModeAux for matching, in case AP support dual-mode ++ /* Check AuthMode and AuthModeAux for matching, in case AP support dual-mode */ + if ((pAd->StaCfg.AuthMode != pInBss->AuthMode) + && (pAd->StaCfg.AuthMode != + pInBss->AuthModeAux)) +- // None matched ++ /* None matched */ + continue; + +- // Check cipher suite, AP must have more secured cipher than station setting ++ /* Check cipher suite, AP must have more secured cipher than station setting */ + if ((pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPA) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPAPSK)) { +- // If it's not mixed mode, we should only let BSS pass with the same encryption ++ /* If it's not mixed mode, we should only let BSS pass with the same encryption */ + if (pInBss->WPA.bMixMode == FALSE) + if (pAd->StaCfg.WepStatus != + pInBss->WPA.GroupCipher) + continue; + +- // check group cipher ++ /* check group cipher */ + if (pAd->StaCfg.WepStatus < + pInBss->WPA.GroupCipher) + continue; + +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched ++ /* check pairwise cipher, skip if none matched */ ++ /* If profile set to AES, let it pass without question. */ ++ /* If profile set to TKIP, we must find one mateched */ + if ((pAd->StaCfg.WepStatus == + Ndis802_11Encryption2Enabled) + && (pAd->StaCfg.WepStatus != +@@ -4126,20 +4123,20 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + Ndis802_11AuthModeWPA2) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPA2PSK)) { +- // If it's not mixed mode, we should only let BSS pass with the same encryption ++ /* If it's not mixed mode, we should only let BSS pass with the same encryption */ + if (pInBss->WPA2.bMixMode == FALSE) + if (pAd->StaCfg.WepStatus != + pInBss->WPA2.GroupCipher) + continue; + +- // check group cipher ++ /* check group cipher */ + if (pAd->StaCfg.WepStatus < + pInBss->WPA2.GroupCipher) + continue; + +- // check pairwise cipher, skip if none matched +- // If profile set to AES, let it pass without question. +- // If profile set to TKIP, we must find one mateched ++ /* check pairwise cipher, skip if none matched */ ++ /* If profile set to AES, let it pass without question. */ ++ /* If profile set to TKIP, we must find one mateched */ + if ((pAd->StaCfg.WepStatus == + Ndis802_11Encryption2Enabled) + && (pAd->StaCfg.WepStatus != +@@ -4149,13 +4146,13 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + continue; + } + } +- // Bss Type matched, SSID matched. +- // We will check wepstatus for qualification Bss ++ /* Bss Type matched, SSID matched. */ ++ /* We will check wepstatus for qualification Bss */ + else if (pAd->StaCfg.WepStatus != pInBss->WepStatus) + continue; + +- // If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region +- // If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, ++ /* If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region */ ++ /* If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead, */ + if ((pInBss->CentralChannel != pInBss->Channel) && + (pAd->CommonCfg.RegTransmitSetting.field.BW == + BW_40)) { +@@ -4169,7 +4166,7 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + BW = BW_40; + } + } +- // copy matching BSS from InTab to OutTab ++ /* copy matching BSS from InTab to OutTab */ + NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); + + OutTab->BssNr++; +@@ -4182,7 +4179,7 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + BssTableSortByRssi(OutTab); + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) + { + INT i, j; +@@ -4214,26 +4211,26 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + INT Length; + NDIS_802_11_ENCRYPTION_STATUS TmpCipher; + +- // +- // WepStatus will be reset later, if AP announce TKIP or AES on the beacon frame. +- // ++ /* */ ++ /* WepStatus will be reset later, if AP announce TKIP or AES on the beacon frame. */ ++ /* */ + if (pBss->Privacy) { + pBss->WepStatus = Ndis802_11WEPEnabled; + } else { + pBss->WepStatus = Ndis802_11WEPDisabled; + } +- // Set default to disable & open authentication before parsing variable IE ++ /* Set default to disable & open authentication before parsing variable IE */ + pBss->AuthMode = Ndis802_11AuthModeOpen; + pBss->AuthModeAux = Ndis802_11AuthModeOpen; + +- // Init WPA setting ++ /* Init WPA setting */ + pBss->WPA.PairCipher = Ndis802_11WEPDisabled; + pBss->WPA.PairCipherAux = Ndis802_11WEPDisabled; + pBss->WPA.GroupCipher = Ndis802_11WEPDisabled; + pBss->WPA.RsnCapability = 0; + pBss->WPA.bMixMode = FALSE; + +- // Init WPA2 setting ++ /* Init WPA2 setting */ + pBss->WPA2.PairCipher = Ndis802_11WEPDisabled; + pBss->WPA2.PairCipherAux = Ndis802_11WEPDisabled; + pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled; +@@ -4243,7 +4240,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Length = (INT) pBss->VarIELen; + + while (Length > 0) { +- // Parse cipher suite base on WPA1 & WPA2, they should be parsed differently ++ /* Parse cipher suite base on WPA1 & WPA2, they should be parsed differently */ + pTmp = ((PUCHAR) pBss->VarIEs) + pBss->VarIELen - Length; + pEid = (PEID_STRUCT) pTmp; + switch (pEid->Eid) { +@@ -4254,24 +4251,24 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + break; + } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4) != + 1) { +- // if unsupported vendor specific IE ++ /* if unsupported vendor specific IE */ + break; + } +- // Skip OUI, version, and multicast suite +- // This part should be improved in the future when AP supported multiple cipher suite. +- // For now, it's OK since almost all APs have fixed cipher suite supported. +- // pTmp = (PUCHAR) pEid->Octet; ++ /* Skip OUI, version, and multicast suite */ ++ /* This part should be improved in the future when AP supported multiple cipher suite. */ ++ /* For now, it's OK since almost all APs have fixed cipher suite supported. */ ++ /* pTmp = (PUCHAR) pEid->Octet; */ + pTmp += 11; + +- // Cipher Suite Selectors from Spec P802.11i/D3.2 P26. +- // Value Meaning +- // 0 None +- // 1 WEP-40 +- // 2 Tkip +- // 3 WRAP +- // 4 AES +- // 5 WEP-104 +- // Parse group cipher ++ /* Cipher Suite Selectors from Spec P802.11i/D3.2 P26. */ ++ /* Value Meaning */ ++ /* 0 None */ ++ /* 1 WEP-40 */ ++ /* 2 Tkip */ ++ /* 3 WRAP */ ++ /* 4 AES */ ++ /* 5 WEP-104 */ ++ /* Parse group cipher */ + switch (*pTmp) { + case 1: + pBss->WPA.GroupCipher = +@@ -4292,22 +4289,22 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + default: + break; + } +- // number of unicast suite ++ /* number of unicast suite */ + pTmp += 1; + +- // skip all unicast cipher suites +- //Count = *(PUSHORT) pTmp; ++ /* skip all unicast cipher suites */ ++ /*Count = *(PUSHORT) pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; + pTmp += sizeof(USHORT); + +- // Parsing all unicast cipher suite ++ /* Parsing all unicast cipher suite */ + while (Count > 0) { +- // Skip OUI ++ /* Skip OUI */ + pTmp += 3; + TmpCipher = Ndis802_11WEPDisabled; + switch (*pTmp) { + case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway ++ case 5: /* Although WEP is not allowed in WPA related auth mode, we parse it anyway */ + TmpCipher = + Ndis802_11Encryption1Enabled; + break; +@@ -4323,7 +4320,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + break; + } + if (TmpCipher > pBss->WPA.PairCipher) { +- // Move the lower cipher suite to PairCipherAux ++ /* Move the lower cipher suite to PairCipherAux */ + pBss->WPA.PairCipherAux = + pBss->WPA.PairCipher; + pBss->WPA.PairCipher = TmpCipher; +@@ -4334,15 +4331,15 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Count--; + } + +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; ++ /* 4. get AKM suite counts */ ++ /*Count = *(PUSHORT) pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; + pTmp += sizeof(USHORT); + pTmp += 3; + + switch (*pTmp) { + case 1: +- // Set AP support WPA-enterprise mode ++ /* Set AP support WPA-enterprise mode */ + if (pBss->AuthMode == Ndis802_11AuthModeOpen) + pBss->AuthMode = Ndis802_11AuthModeWPA; + else +@@ -4350,7 +4347,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Ndis802_11AuthModeWPA; + break; + case 2: +- // Set AP support WPA-PSK mode ++ /* Set AP support WPA-PSK mode */ + if (pBss->AuthMode == Ndis802_11AuthModeOpen) + pBss->AuthMode = + Ndis802_11AuthModeWPAPSK; +@@ -4363,12 +4360,12 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } + pTmp += 1; + +- // Fixed for WPA-None ++ /* Fixed for WPA-None */ + if (pBss->BssType == BSS_ADHOC) { + pBss->AuthMode = Ndis802_11AuthModeWPANone; + pBss->AuthModeAux = Ndis802_11AuthModeWPANone; + pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver ++ /* Patched bugs for old driver */ + if (pBss->WPA.PairCipherAux == + Ndis802_11WEPDisabled) + pBss->WPA.PairCipherAux = +@@ -4376,7 +4373,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } else + pBss->WepStatus = pBss->WPA.PairCipher; + +- // Check the Pair & Group, if different, turn on mixed mode flag ++ /* Check the Pair & Group, if different, turn on mixed mode flag */ + if (pBss->WPA.GroupCipher != pBss->WPA.PairCipher) + pBss->WPA.bMixMode = TRUE; + +@@ -4385,17 +4382,17 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + case IE_RSN: + pRsnHeader = (PRSN_IE_HEADER_STRUCT) pTmp; + +- // 0. Version must be 1 ++ /* 0. Version must be 1 */ + if (le2cpu16(pRsnHeader->Version) != 1) + break; + pTmp += sizeof(RSN_IE_HEADER_STRUCT); + +- // 1. Check group cipher ++ /* 1. Check group cipher */ + pCipher = (PCIPHER_SUITE_STRUCT) pTmp; + if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) + break; + +- // Parse group cipher ++ /* Parse group cipher */ + switch (pCipher->Type) { + case 1: + pBss->WPA2.GroupCipher = +@@ -4416,23 +4413,23 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + default: + break; + } +- // set to correct offset for next parsing ++ /* set to correct offset for next parsing */ + pTmp += sizeof(CIPHER_SUITE_STRUCT); + +- // 2. Get pairwise cipher counts +- //Count = *(PUSHORT) pTmp; ++ /* 2. Get pairwise cipher counts */ ++ /*Count = *(PUSHORT) pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; + pTmp += sizeof(USHORT); + +- // 3. Get pairwise cipher +- // Parsing all unicast cipher suite ++ /* 3. Get pairwise cipher */ ++ /* Parsing all unicast cipher suite */ + while (Count > 0) { +- // Skip OUI ++ /* Skip OUI */ + pCipher = (PCIPHER_SUITE_STRUCT) pTmp; + TmpCipher = Ndis802_11WEPDisabled; + switch (pCipher->Type) { + case 1: +- case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway ++ case 5: /* Although WEP is not allowed in WPA related auth mode, we parse it anyway */ + TmpCipher = + Ndis802_11Encryption1Enabled; + break; +@@ -4448,7 +4445,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + break; + } + if (TmpCipher > pBss->WPA2.PairCipher) { +- // Move the lower cipher suite to PairCipherAux ++ /* Move the lower cipher suite to PairCipherAux */ + pBss->WPA2.PairCipherAux = + pBss->WPA2.PairCipher; + pBss->WPA2.PairCipher = TmpCipher; +@@ -4459,13 +4456,13 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Count--; + } + +- // 4. get AKM suite counts +- //Count = *(PUSHORT) pTmp; ++ /* 4. get AKM suite counts */ ++ /*Count = *(PUSHORT) pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; + pTmp += sizeof(USHORT); + +- // 5. Get AKM ciphers +- // Parsing all AKM ciphers ++ /* 5. Get AKM ciphers */ ++ /* Parsing all AKM ciphers */ + while (Count > 0) { + pAKM = (PAKM_SUITE_STRUCT) pTmp; + if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) +@@ -4473,7 +4470,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + + switch (pAKM->Type) { + case 1: +- // Set AP support WPA-enterprise mode ++ /* Set AP support WPA-enterprise mode */ + if (pBss->AuthMode == + Ndis802_11AuthModeOpen) + pBss->AuthMode = +@@ -4483,7 +4480,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Ndis802_11AuthModeWPA2; + break; + case 2: +- // Set AP support WPA-PSK mode ++ /* Set AP support WPA-PSK mode */ + if (pBss->AuthMode == + Ndis802_11AuthModeOpen) + pBss->AuthMode = +@@ -4506,7 +4503,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + Count--; + } + +- // Fixed for WPA-None ++ /* Fixed for WPA-None */ + if (pBss->BssType == BSS_ADHOC) { + pBss->AuthMode = Ndis802_11AuthModeWPANone; + pBss->AuthModeAux = Ndis802_11AuthModeWPANone; +@@ -4514,7 +4511,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + pBss->WPA2.PairCipherAux; + pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher; + pBss->WepStatus = pBss->WPA.GroupCipher; +- // Patched bugs for old driver ++ /* Patched bugs for old driver */ + if (pBss->WPA.PairCipherAux == + Ndis802_11WEPDisabled) + pBss->WPA.PairCipherAux = +@@ -4522,12 +4519,12 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } + pBss->WepStatus = pBss->WPA2.PairCipher; + +- // 6. Get RSN capability +- //pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; ++ /* 6. Get RSN capability */ ++ /*pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; */ + pBss->WPA2.RsnCapability = (pTmp[1] << 8) + pTmp[0]; + pTmp += sizeof(USHORT); + +- // Check the Pair & Group, if different, turn on mixed mode flag ++ /* Check the Pair & Group, if different, turn on mixed mode flag */ + if (pBss->WPA2.GroupCipher != pBss->WPA2.PairCipher) + pBss->WPA2.bMixMode = TRUE; + +@@ -4539,9 +4536,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } + } + +-// =========================================================================================== +-// mac_table.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* mac_table.c */ ++/* =========================================================================================== */ + + /*! \brief generates a random mac address value for IBSS BSSID + * \param Addr the bssid location +@@ -4557,7 +4554,7 @@ VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr) + pAddr[i] = RandomByte(pAd); + } + +- pAddr[0] = (pAddr[0] & 0xfe) | 0x02; // the first 2 bits must be 01xxxxxxxx ++ pAddr[0] = (pAddr[0] & 0xfe) | 0x02; /* the first 2 bits must be 01xxxxxxxx */ + } + + /*! \brief init the management mac frame header +@@ -4584,17 +4581,17 @@ VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, + + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SubType; +-// if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type +-// pHdr80211->FC.Type = BTYPE_CNTL; ++/* if (SubType == SUBTYPE_ACK) // sample, no use, it will conflict with ACTION frame sub type */ ++/* pHdr80211->FC.Type = BTYPE_CNTL; */ + pHdr80211->FC.ToDs = ToDs; + COPY_MAC_ADDR(pHdr80211->Addr1, pDA); + COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pHdr80211->Addr3, pBssid); + } + +-// =========================================================================================== +-// mem_mgmt.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* mem_mgmt.c */ ++/* =========================================================================================== */ + + /*!*************************************************************************** + * This routine build an outgoing frame, and fill all information specified +@@ -4621,7 +4618,7 @@ ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) + ULONG TotLeng; + va_list Args; + +- // calculates the total length ++ /* calculates the total length */ + TotLeng = 0; + va_start(Args, FrameLen); + do { +@@ -4639,9 +4636,9 @@ ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) + return TotLeng; + } + +-// =========================================================================================== +-// mlme_queue.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* mlme_queue.c */ ++/* =========================================================================================== */ + + /*! \brief Initialize The MLME Queue, used by MLME Functions + * \param *Queue The MLME Queue +@@ -4694,13 +4691,13 @@ BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, + INT Tail; + MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return FALSE; + +- // First check the size, it MUST not exceed the mlme queue size ++ /* First check the size, it MUST not exceed the mlme queue size */ + if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("MlmeEnqueue: msg too large, size = %ld \n", + MsgLen)); +@@ -4761,15 +4758,15 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + INT MsgType; + MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, + fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) { + DBGPRINT_ERR(("MlmeEnqueueForRecv: fRTMP_ADAPTER_HALT_IN_PROGRESS\n")); + return FALSE; + } +- // First check the size, it MUST not exceed the mlme queue size ++ /* First check the size, it MUST not exceed the mlme queue size */ + if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("MlmeEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); + return FALSE; +@@ -4786,7 +4783,7 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + } + } + +- // OK, we got all the informations, it is time to put things into queue ++ /* OK, we got all the informations, it is time to put things into queue */ + NdisAcquireSpinLock(&(Queue->Lock)); + Tail = Queue->Tail; + Queue->Tail++; +@@ -4842,12 +4839,12 @@ BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem) + return TRUE; + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + { + #ifdef RTMP_MAC_PCI + MLME_QUEUE_ELEM *Elem = NULL; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + BOOLEAN Cancelled; + + DBGPRINT(RT_DEBUG_TRACE, ("MlmeRestartStateMachine \n")); +@@ -4862,11 +4859,11 @@ VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + } + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); + +- // Remove all Mlme queues elements ++ /* Remove all Mlme queues elements */ + while (!MlmeQueueEmpty(&pAd->Mlme.Queue)) { +- //From message type, determine which state machine I should drive ++ /*From message type, determine which state machine I should drive */ + if (MlmeDequeue(&pAd->Mlme.Queue, &Elem)) { +- // free MLME element ++ /* free MLME element */ + Elem->Occupied = FALSE; + Elem->MsgLen = 0; + +@@ -4874,11 +4871,11 @@ VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + DBGPRINT_ERR(("MlmeRestartStateMachine: MlmeQueue empty\n")); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + { +- // Cancel all timer events +- // Be careful to cancel new added timer ++ /* Cancel all timer events */ ++ /* Be careful to cancel new added timer */ + RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled); + RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); +@@ -4888,15 +4885,15 @@ VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + + } + +- // Change back to original channel in case of doing scan ++ /* Change back to original channel in case of doing scan */ + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); + +- // Resume MSDU which is turned off durning scan ++ /* Resume MSDU which is turned off durning scan */ + RTMPResumeMsduTransmission(pAd); + + { +- // Set all state machines back IDLE ++ /* Set all state machines back IDLE */ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; +@@ -4906,11 +4903,11 @@ VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + } + + #ifdef RTMP_MAC_PCI +- // Remove running state ++ /* Remove running state */ + NdisAcquireSpinLock(&pAd->Mlme.TaskLock); + pAd->Mlme.bRunning = FALSE; + NdisReleaseSpinLock(&pAd->Mlme.TaskLock); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } + + /*! \brief test if the MLME Queue is empty +@@ -4994,10 +4991,10 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + UCHAR EAPType; + PUCHAR pData; + +- // Pointer to start of data frames including SNAP header ++ /* Pointer to start of data frames including SNAP header */ + pData = (PUCHAR) pFrame + LENGTH_802_11; + +- // The only data type will pass to this function is EAPOL frame ++ /* The only data type will pass to this function is EAPOL frame */ + if (pFrame->Hdr.FC.Type == BTYPE_DATA) { + { + *Machine = WPA_STATE_MACHINE; +@@ -5046,7 +5043,7 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + *MsgType = MT2_PEER_DISASSOC_REQ; + break; + case SUBTYPE_AUTH: +- // get the sequence number from payload 24 Mac Header + 2 bytes algorithm ++ /* get the sequence number from payload 24 Mac Header + 2 bytes algorithm */ + NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); + NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); + if (Seq == 1 || Seq == 3) { +@@ -5067,7 +5064,7 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + break; + case SUBTYPE_ACTION: + *Machine = ACTION_STATE_MACHINE; +- // Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support ++ /* Sometimes Sta will return with category bytes with MSB = 1, if they receive catogory out of their support */ + if ((pFrame->Octet[0] & 0x7F) > MAX_PEER_CATE_MSG) { + *MsgType = MT2_ACT_INVALID; + } else { +@@ -5082,9 +5079,9 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-// =========================================================================================== +-// state_machine.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* state_machine.c */ ++/* =========================================================================================== */ + + /*! \brief Initialize the state machine. + * \param *S pointer to the state machine +@@ -5109,21 +5106,21 @@ VOID StateMachineInit(IN STATE_MACHINE * S, + { + ULONG i, j; + +- // set number of states and messages ++ /* set number of states and messages */ + S->NrState = StNr; + S->NrMsg = MsgNr; + S->Base = Base; + + S->TransFunc = Trans; + +- // init all state transition to default function ++ /* init all state transition to default function */ + for (i = 0; i < StNr; i++) { + for (j = 0; j < MsgNr; j++) { + S->TransFunc[i * MsgNr + j] = DefFunc; + } + } + +- // set the starting state ++ /* set the starting state */ + S->CurrState = InitState; + } + +@@ -5147,7 +5144,7 @@ VOID StateMachineSetAction(IN STATE_MACHINE * S, + MsgIdx = Msg - S->Base; + + if (St < S->NrState && MsgIdx < S->NrMsg) { +- // boundary checking before setting the action ++ /* boundary checking before setting the action */ + S->TransFunc[St * S->NrMsg + MsgIdx] = Func; + } + } +@@ -5180,9 +5177,9 @@ VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-// =========================================================================================== +-// lfsr.c +-// =========================================================================================== ++/* =========================================================================================== */ ++/* lfsr.c */ ++/* =========================================================================================== */ + + /* + ========================================================================== +@@ -5260,7 +5257,7 @@ VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, + else + RateIdx = 12; + +- // Check for support rates exclude basic rate bit ++ /* Check for support rates exclude basic rate bit */ + for (i = 0; i < *SupRateLen; i++) + for (j = 0; j < RateIdx; j++) + if ((SupRate[i] & 0x7f) == RateIdTo500Kbps[j]) +@@ -5277,7 +5274,7 @@ BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, + UCHAR UpperChannel = 0, LowerChannel = 0; + UCHAR NoEffectChannelinList = 0; + +- // Find upper and lower channel according to 40MHz current operation. ++ /* Find upper and lower channel according to 40MHz current operation. */ + if (CentralChannel < Channel) { + UpperChannel = Channel; + if (CentralChannel > 2) +@@ -5331,11 +5328,11 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + if (Wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; + +- // If use AMSDU, set flag. ++ /* If use AMSDU, set flag. */ + if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable) + CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], + fCLIENT_STATUS_AMSDU_INUSED); +- // Save Peer Capability ++ /* Save Peer Capability */ + if (pHtCapability->HtCapInfo.ShortGIfor20) + CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[Wcid], + fCLIENT_STATUS_SGI20_CAPABLE); +@@ -5357,7 +5354,7 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + pAd->MacTab.Content[Wcid].MpduDensity = + pHtCapability->HtCapParm.MpduDensity; + } +- // Will check ChannelWidth for MCSSet[4] below ++ /* Will check ChannelWidth for MCSSet[4] below */ + pAd->MlmeAux.HtCapability.MCSSet[4] = 0x1; + switch (pAd->CommonCfg.RxStream) { + case 1: +@@ -5396,7 +5393,7 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + pAd->MlmeAux.HtCapability.HtCapInfo.GF = + pHtCapability->HtCapInfo.GF & pAd->CommonCfg.DesiredHtPhy.GF; + +- // Send Assoc Req with my HT capability. ++ /* Send Assoc Req with my HT capability. */ + pAd->MlmeAux.HtCapability.HtCapInfo.AMsduSize = + pAd->CommonCfg.DesiredHtPhy.AmsduSize; + pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs = +@@ -5430,7 +5427,7 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + } + + if (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_20) +- pAd->MlmeAux.HtCapability.MCSSet[4] = 0x0; // BW20 can't transmit MCS32 ++ pAd->MlmeAux.HtCapability.MCSSet[4] = 0x0; /* BW20 can't transmit MCS32 */ + + COPY_AP_HTSETTINGS_FROM_BEACON(pAd, pHtCapability); + return TRUE; +@@ -5455,8 +5452,8 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + { + UCHAR MinimumRate; +- UCHAR ProperMlmeRate; //= RATE_54; +- UCHAR i, j, RateIdx = 12; //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ++ UCHAR ProperMlmeRate; /*= RATE_54; */ ++ UCHAR i, j, RateIdx = 12; /*1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ + BOOLEAN bMatch = FALSE; + + switch (pAd->CommonCfg.PhyMode) { +@@ -5469,7 +5466,7 @@ VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + case PHY_11BGN_MIXED: + if ((pAd->MlmeAux.SupRateLen == 4) && + (pAd->MlmeAux.ExtRateLen == 0)) +- // B only AP ++ /* B only AP */ + ProperMlmeRate = RATE_11; + else + ProperMlmeRate = RATE_24; +@@ -5480,7 +5477,7 @@ VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + MinimumRate = RATE_6; + break; + case PHY_11A: +- case PHY_11N_2_4G: // rt2860 need to check mlmerate for 802.11n ++ case PHY_11N_2_4G: /* rt2860 need to check mlmerate for 802.11n */ + case PHY_11GN_MIXED: + case PHY_11AGN_MIXED: + case PHY_11AN_MIXED: +@@ -5495,7 +5492,7 @@ VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + else + MinimumRate = RATE_6; + break; +- default: // error ++ default: /* error */ + ProperMlmeRate = RATE_1; + MinimumRate = RATE_1; + break; +@@ -5609,16 +5606,16 @@ VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) + #ifdef RT30xx + || (pAd->EepromAccess) +-#endif // RT30xx // ++#endif /* RT30xx // */ + #ifdef RT3090 + || (pAd->bPCIclkOff == TRUE) +-#endif // RT3090 // ++#endif /* RT3090 // */ + ) + return; + + { +- //if (pAd->StaCfg.Psm == PWR_SAVE) +- // return; ++ /*if (pAd->StaCfg.Psm == PWR_SAVE) */ ++ /* return; */ + + { + +@@ -5637,7 +5634,7 @@ VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); + #ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = BBPR3; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + ) { +@@ -5646,7 +5643,7 @@ VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + pAd->RalinkCounters.OneSecTxRetryOkCount + + pAd->RalinkCounters.OneSecTxFailCount; + +- // dynamic adjust antenna evaluation period according to the traffic ++ /* dynamic adjust antenna evaluation period according to the traffic */ + if (TxTotalCnt > 50) { + RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, + 20); +@@ -5691,21 +5688,21 @@ VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, + OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) + #ifdef RT30xx + || (pAd->EepromAccess) +-#endif // RT30xx // ++#endif /* RT30xx // */ + #ifdef RT3090 + || (pAd->bPCIclkOff == TRUE) +-#endif // RT3090 // ++#endif /* RT3090 // */ + ) + return; + + { +- //if (pAd->StaCfg.Psm == PWR_SAVE) +- // return; ++ /*if (pAd->StaCfg.Psm == PWR_SAVE) */ ++ /* return; */ + { + if (pAd->StaCfg.Psm == PWR_SAVE) + return; + +- // if the traffic is low, use average rssi as the criteria ++ /* if the traffic is low, use average rssi as the criteria */ + if (pAd->Mlme.bLowThroughput == TRUE) { + rssi0 = pAd->StaCfg.RssiSample.LastRssi0; + rssi1 = pAd->StaCfg.RssiSample.LastRssi1; +@@ -5742,7 +5739,7 @@ VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); + #ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = BBPR3; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } + } + +@@ -5759,7 +5756,7 @@ VOID APSDPeriodicExec(IN PVOID SystemSpecific1, + + pAd->CommonCfg.TriggerTimerCount++; + +-// Driver should not send trigger frame, it should be send by application layer ++/* Driver should not send trigger frame, it should be send by application layer */ + /* + if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable + && (pAd->CommonCfg.bNeedSendTriggerFrame || +@@ -5818,7 +5815,7 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, + BOOLEAN result = TRUE; + + { +- // only associated STA counts ++ /* only associated STA counts */ + if (pEntry && (pEntry->ValidAsCLI) + && (pEntry->Sst == SST_ASSOC)) { + result = pAd->StaCfg.bAutoTxRateSwitch; +@@ -5895,12 +5892,12 @@ VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + + if (fixed_tx_mode == FIXED_TXMODE_CCK) { + TransmitSetting.field.MODE = MODE_CCK; +- // CCK mode allow MCS 0~3 ++ /* CCK mode allow MCS 0~3 */ + if (TransmitSetting.field.MCS > MCS_3) + TransmitSetting.field.MCS = MCS_3; + } else { + TransmitSetting.field.MODE = MODE_OFDM; +- // OFDM mode allow MCS 0~7 ++ /* OFDM mode allow MCS 0~7 */ + if (TransmitSetting.field.MCS > MCS_7) + TransmitSetting.field.MCS = MCS_7; + } +@@ -5926,17 +5923,17 @@ VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + */ + VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + { +- UCHAR OrigR66Value = 0, R66; //, R66UpperBound = 0x30, R66LowerBound = 0x30; ++ UCHAR OrigR66Value = 0, R66; /*, R66UpperBound = 0x30, R66LowerBound = 0x30; */ + CHAR Rssi; + +- // 2860C did not support Fase CCA, therefore can't tune ++ /* 2860C did not support Fase CCA, therefore can't tune */ + if (pAd->MACVersion == 0x28600100) + return; + +- // +- // work as a STA +- // +- if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) // no R66 tuning when SCANNING ++ /* */ ++ /* work as a STA */ ++ /* */ ++ if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE) /* no R66 tuning when SCANNING */ + return; + + if ((pAd->OpMode == OPMODE_STA) +@@ -5945,7 +5942,7 @@ VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + && !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + #ifdef RTMP_MAC_PCI + && (pAd->bPCIclkOff == FALSE) +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + ) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &OrigR66Value); + R66 = OrigR66Value; +@@ -5957,10 +5954,10 @@ VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + else + Rssi = pAd->StaCfg.RssiSample.AvgRssi0; + +- if (pAd->LatchRfRegs.Channel <= 14) { //BG band ++ if (pAd->LatchRfRegs.Channel <= 14) { /*BG band */ + #ifdef RT30xx +- // RT3070 is a no LNA solution, it should have different control regarding to AGC gain control +- // Otherwise, it will have some throughput side effect when low RSSI ++ /* RT3070 is a no LNA solution, it should have different control regarding to AGC gain control */ ++ /* Otherwise, it will have some throughput side effect when low RSSI */ + + if (IS_RT3070(pAd) || IS_RT3090(pAd) || IS_RT3572(pAd) + || IS_RT3390(pAd)) { +@@ -5979,7 +5976,7 @@ VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + } + } + } else +-#endif // RT30xx // ++#endif /* RT30xx // */ + { + if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { + R66 = (0x2E + GET_LNA_GAIN(pAd)) + 0x10; +@@ -5995,7 +5992,7 @@ VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + } + } + } +- } else { //A band ++ } else { /*A band */ + if (pAd->CommonCfg.BBPCurrentBW == BW_20) { + if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY) { + R66 = +@@ -6040,7 +6037,7 @@ VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth) + { + UCHAR R66 = 0x30; + +- if (pAd->LatchRfRegs.Channel <= 14) { // BG band ++ if (pAd->LatchRfRegs.Channel <= 14) { /* BG band */ + #ifdef RT30xx + /* Gary was verified Amazon AP and find that RT307x has BBP_R66 invalid default value */ + +@@ -6049,12 +6046,12 @@ VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth) + R66 = 0x1C + 2 * GET_LNA_GAIN(pAd); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } else +-#endif // RT30xx // ++#endif /* RT30xx // */ + { + R66 = 0x2E + GET_LNA_GAIN(pAd); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } +- } else { //A band ++ } else { /*A band */ + { + if (BandWidth == BW_20) { + R66 = +diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c +index cc45a08..0af7e6b 100644 +--- a/drivers/staging/rt2860/common/rt_channel.c ++++ b/drivers/staging/rt2860/common/rt_channel.c +@@ -147,1276 +147,1276 @@ CH_FREQ_MAP CH_HZ_ID_MAP[] = { + INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(CH_FREQ_MAP)); + + CH_REGION ChRegion[] = { +- { // Antigua and Berbuda ++ { /* Antigua and Berbuda */ + "AG", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Argentina ++ { /* Argentina */ + "AR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Aruba ++ { /* Aruba */ + "AW", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Australia ++ { /* Australia */ + "AU", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Austria ++ { /* Austria */ + "AT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, TRUE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Bahamas ++ { /* Bahamas */ + "BS", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Barbados ++ { /* Barbados */ + "BB", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Bermuda ++ { /* Bermuda */ + "BM", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Brazil ++ { /* Brazil */ + "BR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 24, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Belgium ++ { /* Belgium */ + "BE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 18, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 18, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Bulgaria ++ { /* Bulgaria */ + "BG", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, ODOR, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Canada ++ { /* Canada */ + "CA", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Cayman IsLands ++ { /* Cayman IsLands */ + "KY", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Chile ++ { /* Chile */ + "CL", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 20, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 20, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 20, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // China ++ { /* China */ + "CN", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 27, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Colombia ++ { /* Colombia */ + "CO", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 17, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Costa Rica ++ { /* Costa Rica */ + "CR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 17, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Cyprus ++ { /* Cyprus */ + "CY", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Czech_Republic ++ { /* Czech_Republic */ + "CZ", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Denmark ++ { /* Denmark */ + "DK", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Dominican Republic ++ { /* Dominican Republic */ + "DO", + CE, + { + {1, 0, 20, BOTH, FALSE} +- , // 2.4 G, ch 0 ++ , /* 2.4 G, ch 0 */ + {149, 4, 20, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Equador ++ { /* Equador */ + "EC", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {100, 11, 27, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // El Salvador ++ { /* El Salvador */ + "SV", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 30, BOTH, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 36, BOTH, TRUE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Finland ++ { /* Finland */ + "FI", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // France ++ { /* France */ + "FR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Germany ++ { /* Germany */ + "DE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Greece ++ { /* Greece */ + "GR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, ODOR, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Guam ++ { /* Guam */ + "GU", + CE, + { + {1, 11, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {36, 4, 17, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Guatemala ++ { /* Guatemala */ + "GT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 17, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Haiti ++ { /* Haiti */ + "HT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 17, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Honduras ++ { /* Honduras */ + "HN", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 27, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Hong Kong ++ { /* Hong Kong */ + "HK", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Hungary ++ { /* Hungary */ + "HU", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Iceland ++ { /* Iceland */ + "IS", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // India ++ { /* India */ + "IN", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 24, IDOR, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Indonesia ++ { /* Indonesia */ + "ID", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 27, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Ireland ++ { /* Ireland */ + "IE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, ODOR, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Israel ++ { /* Israel */ + "IL", + CE, + { + {1, 3, 20, IDOR, FALSE} +- , // 2.4 G, ch 1~3 ++ , /* 2.4 G, ch 1~3 */ + {4, 6, 20, BOTH, FALSE} +- , // 2.4 G, ch 4~9 ++ , /* 2.4 G, ch 4~9 */ + {10, 4, 20, IDOR, FALSE} +- , // 2.4 G, ch 10~13 ++ , /* 2.4 G, ch 10~13 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Italy ++ { /* Italy */ + "IT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, ODOR, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Japan ++ { /* Japan */ + "JP", + JAP, + { + {1, 14, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~14 ++ , /* 2.4 G, ch 1~14 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Jordan ++ { /* Jordan */ + "JO", + CE, + { + {1, 13, 20, IDOR, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {149, 4, 23, IDOR, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Latvia ++ { /* Latvia */ + "LV", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Liechtenstein ++ { /* Liechtenstein */ + "LI", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Lithuania ++ { /* Lithuania */ + "LT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Luxemburg ++ { /* Luxemburg */ + "LU", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Malaysia ++ { /* Malaysia */ + "MY", + CE, + { + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 20, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Malta ++ { /* Malta */ + "MT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Marocco ++ { /* Marocco */ + "MA", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 24, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Mexico ++ { /* Mexico */ + "MX", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 5, 30, IDOR, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Netherlands ++ { /* Netherlands */ + "NL", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // New Zealand ++ { /* New Zealand */ + "NZ", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 24, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Norway ++ { /* Norway */ + "NO", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 24, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 24, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Peru ++ { /* Peru */ + "PE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 27, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Portugal ++ { /* Portugal */ + "PT", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Poland ++ { /* Poland */ + "PL", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Romania ++ { /* Romania */ + "RO", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Russia ++ { /* Russia */ + "RU", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {149, 4, 20, IDOR, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Saudi Arabia ++ { /* Saudi Arabia */ + "SA", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 23, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Serbia_and_Montenegro ++ { /* Serbia_and_Montenegro */ + "CS", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Singapore ++ { /* Singapore */ + "SG", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {149, 4, 20, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Slovakia ++ { /* Slovakia */ + "SK", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Slovenia ++ { /* Slovenia */ + "SI", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // South Africa ++ { /* South Africa */ + "ZA", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 4, 30, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // South Korea ++ { /* South Korea */ + "KR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 20, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 20, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 8, 20, BOTH, FALSE} +- , // 5G, ch 100~128 ++ , /* 5G, ch 100~128 */ + {149, 4, 20, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Spain ++ { /* Spain */ + "ES", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 17, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Sweden ++ { /* Sweden */ + "SE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Switzerland ++ { /* Switzerland */ + "CH", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~13 ++ , /* 2.4 G, ch 1~13 */ + {36, 4, 23, IDOR, TRUE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Taiwan ++ { /* Taiwan */ + "TW", + CE, + { + {1, 11, 30, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {52, 4, 23, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Turkey ++ { /* Turkey */ + "TR", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {36, 4, 23, BOTH, FALSE} +- , // 5G, ch 36~48 ++ , /* 5G, ch 36~48 */ + {52, 4, 23, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // UK ++ { /* UK */ + "GB", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {36, 4, 23, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {52, 4, 23, IDOR, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Ukraine ++ { /* Ukraine */ + "UA", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // United_Arab_Emirates ++ { /* United_Arab_Emirates */ + "AE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // United_States ++ { /* United_States */ + "US", + CE, + { + {1, 11, 30, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {36, 4, 17, IDOR, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {52, 4, 24, BOTH, TRUE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 30, BOTH, TRUE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 5, 30, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Venezuela ++ { /* Venezuela */ + "VE", + CE, + { + {1, 13, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {149, 4, 27, BOTH, FALSE} +- , // 5G, ch 149~161 ++ , /* 5G, ch 149~161 */ + {0} +- , // end ++ , /* end */ + } + } + , + +- { // Default ++ { /* Default */ + "", + CE, + { + {1, 11, 20, BOTH, FALSE} +- , // 2.4 G, ch 1~11 ++ , /* 2.4 G, ch 1~11 */ + {36, 4, 20, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {52, 4, 20, BOTH, FALSE} +- , // 5G, ch 52~64 ++ , /* 5G, ch 52~64 */ + {100, 11, 20, BOTH, FALSE} +- , // 5G, ch 100~140 ++ , /* 5G, ch 100~140 */ + {149, 5, 20, BOTH, FALSE} +- , // 5G, ch 149~165 ++ , /* 5G, ch 149~165 */ + {0} +- , // end ++ , /* end */ + } + } + , +@@ -1610,7 +1610,7 @@ static UCHAR GetExtCh(IN UCHAR Channel, IN UCHAR Direction) + + VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) + { +- //UCHAR ChannelNum = pAd->ChannelListNum; ++ /*UCHAR ChannelNum = pAd->ChannelListNum; */ + UCHAR Channel = pAd->CommonCfg.Channel; + + if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) +@@ -1663,7 +1663,7 @@ VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) + if (Channel == 14) { + pAd->CommonCfg.RegTransmitSetting.field.BW = + BW_20; +- //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() ++ /*pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT() */ + } + } + } +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index b6e47a1..8b5be17 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -172,7 +172,7 @@ VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) + RT30xxReverseRFSleepModeSetup; + } + } +-#endif // RT3070 // ++#endif /* RT3070 // */ + #ifdef RT3090 + if (IS_RT3090(pAd) && (pAd->infType == RTMP_DEV_INF_PCI)) { + pChipOps->AsicRfTurnOff = RT30xxLoadRFSleepModeSetup; +@@ -180,9 +180,9 @@ VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) + pChipOps->AsicReverseRfFromSleepMode = + RT30xxReverseRFSleepModeSetup; + } +-#endif // RT3090 // ++#endif /* RT3090 // */ + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + } + +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index c169641..0a95870 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -40,32 +40,32 @@ UCHAR BIT8[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + char *CipherName[] = + { "none", "wep64", "wep128", "TKIP", "AES", "CKIP64", "CKIP128" }; + +-// +-// BBP register initialization set +-// ++/* */ ++/* BBP register initialization set */ ++/* */ + REG_PAIR BBPRegTable[] = { +- {BBP_R65, 0x2C}, // fix rssi issue +- {BBP_R66, 0x38}, // Also set this default value to pAd->BbpTuning.R66CurrentValue at initial ++ {BBP_R65, 0x2C}, /* fix rssi issue */ ++ {BBP_R66, 0x38}, /* Also set this default value to pAd->BbpTuning.R66CurrentValue at initial */ + {BBP_R69, 0x12}, +- {BBP_R70, 0xa}, // BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa ++ {BBP_R70, 0xa}, /* BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa */ + {BBP_R73, 0x10}, + {BBP_R81, 0x37}, + {BBP_R82, 0x62}, + {BBP_R83, 0x6A}, +- {BBP_R84, 0x99}, // 0x19 is for rt2860E and after. This is for extension channel overlapping IOT. 0x99 is for rt2860D and before +- {BBP_R86, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R91, 0x04}, // middle range issue, Rory @2008-01-28 +- {BBP_R92, 0x00}, // middle range issue, Rory @2008-01-28 +- {BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528 +- {BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. +- {BBP_R106, 0x35}, // for ShortGI throughput ++ {BBP_R84, 0x99}, /* 0x19 is for rt2860E and after. This is for extension channel overlapping IOT. 0x99 is for rt2860D and before */ ++ {BBP_R86, 0x00}, /* middle range issue, Rory @2008-01-28 */ ++ {BBP_R91, 0x04}, /* middle range issue, Rory @2008-01-28 */ ++ {BBP_R92, 0x00}, /* middle range issue, Rory @2008-01-28 */ ++ {BBP_R103, 0x00}, /* near range high-power issue, requested from Gary @2008-0528 */ ++ {BBP_R105, 0x05}, /* 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before. */ ++ {BBP_R106, 0x35}, /* for ShortGI throughput */ + }; + + #define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) + +-// +-// ASIC register initialization sets +-// ++/* */ ++/* ASIC register initialization sets */ ++/* */ + + RTMP_REG_PAIR MACRegTable[] = { + #if defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x200) +@@ -76,43 +76,43 @@ RTMP_REG_PAIR MACRegTable[] = { + {BCN_OFFSET1, 0xfcf8f4f0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ + #else + #error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]!!! +-#endif // HW_BEACON_OFFSET // +- +- {LEGACY_BASIC_RATE, 0x0000013f}, // Basic rate set bitmap +- {HT_BASIC_RATE, 0x00008003}, // Basic HT rate set , 20M, MCS=3, MM. Format is the same as in TXWI. +- {MAC_SYS_CTRL, 0x00}, // 0x1004, , default Disable RX +- {RX_FILTR_CFG, 0x17f97}, //0x1400 , RX filter control, +- {BKOFF_SLOT_CFG, 0x209}, // default set short slot time, CC_DELAY_TIME should be 2 +- //{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 +- {TX_SW_CFG0, 0x0}, // Gary,2008-05-21 for CWC test +- {TX_SW_CFG1, 0x80606}, // Gary,2006-08-23 +- {TX_LINK_CFG, 0x1020}, // Gary,2006-08-23 +- //{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT +- {TX_TIMEOUT_CFG, 0x000a2090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 +- {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, // 0x3018, MAX frame length. Max PSDU = 16kbytes. +- {LED_CFG, 0x7f031e46}, // Gary, 2006-08-23 +- +- {PBF_MAX_PCNT, 0x1F3FBF9F}, //0x1F3f7f9f}, //Jan, 2006/04/20 +- +- {TX_RTY_CFG, 0x47d01f0f}, // Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 +- +- {AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder +- {CCK_PROT_CFG, 0x05740003 /*0x01740003 */ }, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. +- {OFDM_PROT_CFG, 0x05740003 /*0x01740003 */ }, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. ++#endif /* HW_BEACON_OFFSET // */ ++ ++ {LEGACY_BASIC_RATE, 0x0000013f}, /* Basic rate set bitmap */ ++ {HT_BASIC_RATE, 0x00008003}, /* Basic HT rate set , 20M, MCS=3, MM. Format is the same as in TXWI. */ ++ {MAC_SYS_CTRL, 0x00}, /* 0x1004, , default Disable RX */ ++ {RX_FILTR_CFG, 0x17f97}, /*0x1400 , RX filter control, */ ++ {BKOFF_SLOT_CFG, 0x209}, /* default set short slot time, CC_DELAY_TIME should be 2 */ ++ /*{TX_SW_CFG0, 0x40a06}, // Gary,2006-08-23 */ ++ {TX_SW_CFG0, 0x0}, /* Gary,2008-05-21 for CWC test */ ++ {TX_SW_CFG1, 0x80606}, /* Gary,2006-08-23 */ ++ {TX_LINK_CFG, 0x1020}, /* Gary,2006-08-23 */ ++ /*{TX_TIMEOUT_CFG, 0x00182090}, // CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT */ ++ {TX_TIMEOUT_CFG, 0x000a2090}, /* CCK has some problem. So increase timieout value. 2006-10-09// MArvek RT , Modify for 2860E ,2007-08-01 */ ++ {MAX_LEN_CFG, MAX_AGGREGATION_SIZE | 0x00001000}, /* 0x3018, MAX frame length. Max PSDU = 16kbytes. */ ++ {LED_CFG, 0x7f031e46}, /* Gary, 2006-08-23 */ ++ ++ {PBF_MAX_PCNT, 0x1F3FBF9F}, /*0x1F3f7f9f}, //Jan, 2006/04/20 */ ++ ++ {TX_RTY_CFG, 0x47d01f0f}, /* Jan, 2006/11/16, Set TxWI->ACK =0 in Probe Rsp Modify for 2860E ,2007-08-03 */ ++ ++ {AUTO_RSP_CFG, 0x00000013}, /* Initial Auto_Responder, because QA will turn off Auto-Responder */ ++ {CCK_PROT_CFG, 0x05740003 /*0x01740003 */ }, /* Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. */ ++ {OFDM_PROT_CFG, 0x05740003 /*0x01740003 */ }, /* Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled. */ + #ifdef RTMP_MAC_USB +- {PBF_CFG, 0xf40006}, // Only enable Queue 2 +- {MM40_PROT_CFG, 0x3F44084}, // Initial Auto_Responder, because QA will turn off Auto-Responder ++ {PBF_CFG, 0xf40006}, /* Only enable Queue 2 */ ++ {MM40_PROT_CFG, 0x3F44084}, /* Initial Auto_Responder, because QA will turn off Auto-Responder */ + {WPDMA_GLO_CFG, 0x00000030}, +-#endif // RTMP_MAC_USB // +- {GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS ++#endif /* RTMP_MAC_USB // */ ++ {GF20_PROT_CFG, 0x01744004}, /* set 19:18 --> Short NAV for MIMO PS */ + {GF40_PROT_CFG, 0x03F44084}, + {MM20_PROT_CFG, 0x01744004}, + #ifdef RTMP_MAC_PCI + {MM40_PROT_CFG, 0x03F54084}, +-#endif // RTMP_MAC_PCI // +- {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f *//*0x000024bf */ }, //Extension channel backoff. ++#endif /* RTMP_MAC_PCI // */ ++ {TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f *//*0x000024bf */ }, /*Extension channel backoff. */ + {TX_RTS_CFG, 0x00092b20}, +- {EXP_ACK_TIME, 0x002400ca}, // default value ++ {EXP_ACK_TIME, 0x002400ca}, /* default value */ + + {TXOP_HLDR_ET, 0x00000002}, + +@@ -121,7 +121,7 @@ RTMP_REG_PAIR MACRegTable[] = { + and beacon1 is SIFS (10us), so if INTEL 2200bg card connects to BSS0, the ping + will always lost. So we change the SIFS of CCK from 10us to 16us. */ + {XIFS_TIME_CFG, 0x33a41010}, +- {PWR_PIN_CFG, 0x00000003}, // patch for 2880-E ++ {PWR_PIN_CFG, 0x00000003}, /* patch for 2880-E */ + }; + + RTMP_REG_PAIR STAMACRegTable[] = { +@@ -165,7 +165,7 @@ NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + *ppAdapter = NULL; + + do { +- // Allocate RTMP_ADAPTER memory block ++ /* Allocate RTMP_ADAPTER memory block */ + pBeaconBuf = kmalloc(MAX_BEACON_SIZE, MEM_ALLOC_FLAG); + if (pBeaconBuf == NULL) { + Status = NDIS_STATUS_FAILURE; +@@ -184,14 +184,14 @@ NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, + (UINT32) sizeof(RTMP_ADAPTER))); + +- // Init spin locks ++ /* Init spin locks */ + NdisAllocateSpinLock(&pAd->MgmtRingLock); + #ifdef RTMP_MAC_PCI + NdisAllocateSpinLock(&pAd->RxRingLock); + #ifdef RT3090 + NdisAllocateSpinLock(&pAd->McuCmdLock); +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // ++#endif /* RT3090 // */ ++#endif /* RTMP_MAC_PCI // */ + + for (index = 0; index < NUM_OF_TX_RING; index++) { + NdisAllocateSpinLock(&pAd->TxSwQueueLock[index]); +@@ -238,9 +238,9 @@ VOID RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + UCHAR t1, t2, t3, t4; + BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; + +- // +- // Get power delta for 20MHz and 40MHz. +- // ++ /* */ ++ /* Get power delta for 20MHz and 40MHz. */ ++ /* */ + DBGPRINT(RT_DEBUG_TRACE, ("Txpower per Rate\n")); + RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_DELTA, value2); + Apwrdelta = 0; +@@ -267,9 +267,9 @@ VOID RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, + ("Gpwrdelta = %x, Apwrdelta = %x .\n", Gpwrdelta, Apwrdelta)); + +- // +- // Get Txpower per MCS for 20MHz in 2.4G. +- // ++ /* */ ++ /* Get Txpower per MCS for 20MHz in 2.4G. */ ++ /* */ + for (i = 0; i < 5; i++) { + RT28xx_EEPROM_READ16(pAd, + EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i * 4, +@@ -447,12 +447,12 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + EEPROM_TX_PWR_STRUC Power; + EEPROM_TX_PWR_STRUC Power2; + +- // Read Tx power value for all channels +- // Value from 1 - 0x7f. Default value is 24. +- // Power value : 2.4G 0x00 (0) ~ 0x1F (31) +- // : 5.5G 0xF9 (-7) ~ 0x0F (15) ++ /* Read Tx power value for all channels */ ++ /* Value from 1 - 0x7f. Default value is 24. */ ++ /* Power value : 2.4G 0x00 (0) ~ 0x1F (31) */ ++ /* : 5.5G 0xF9 (-7) ~ 0x0F (15) */ + +- // 0. 11b/g, ch1 - ch 14 ++ /* 0. 11b/g, ch1 - ch 14 */ + for (i = 0; i < 7; i++) { + RT28xx_EEPROM_READ16(pAd, EEPROM_G_TX_PWR_OFFSET + i * 2, + Power.word); +@@ -482,8 +482,8 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + pAd->TxPower[i * 2 + 1].Power2 = Power2.field.Byte1; + } + +- // 1. U-NII lower/middle band: 36, 38, 40; 44, 46, 48; 52, 54, 56; 60, 62, 64 (including central frequency in BW 40MHz) +- // 1.1 Fill up channel ++ /* 1. U-NII lower/middle band: 36, 38, 40; 44, 46, 48; 52, 54, 56; 60, 62, 64 (including central frequency in BW 40MHz) */ ++ /* 1.1 Fill up channel */ + choffset = 14; + for (i = 0; i < 4; i++) { + pAd->TxPower[3 * i + choffset + 0].Channel = 36 + i * 8 + 0; +@@ -499,7 +499,7 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + pAd->TxPower[3 * i + choffset + 2].Power2 = DEFAULT_RF_TX_POWER; + } + +- // 1.2 Fill up power ++ /* 1.2 Fill up power */ + for (i = 0; i < 6; i++) { + RT28xx_EEPROM_READ16(pAd, EEPROM_A_TX_PWR_OFFSET + i * 2, + Power.word); +@@ -523,8 +523,8 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + Power2.field.Byte1; + } + +- // 2. HipperLAN 2 100, 102 ,104; 108, 110, 112; 116, 118, 120; 124, 126, 128; 132, 134, 136; 140 (including central frequency in BW 40MHz) +- // 2.1 Fill up channel ++ /* 2. HipperLAN 2 100, 102 ,104; 108, 110, 112; 116, 118, 120; 124, 126, 128; 132, 134, 136; 140 (including central frequency in BW 40MHz) */ ++ /* 2.1 Fill up channel */ + choffset = 14 + 12; + for (i = 0; i < 5; i++) { + pAd->TxPower[3 * i + choffset + 0].Channel = 100 + i * 8 + 0; +@@ -543,7 +543,7 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + pAd->TxPower[3 * 5 + choffset + 0].Power = DEFAULT_RF_TX_POWER; + pAd->TxPower[3 * 5 + choffset + 0].Power2 = DEFAULT_RF_TX_POWER; + +- // 2.2 Fill up power ++ /* 2.2 Fill up power */ + for (i = 0; i < 8; i++) { + RT28xx_EEPROM_READ16(pAd, + EEPROM_A_TX_PWR_OFFSET + (choffset - 14) + +@@ -569,8 +569,8 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + Power2.field.Byte1; + } + +- // 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165, 167, 169; 171, 173 (including central frequency in BW 40MHz) +- // 3.1 Fill up channel ++ /* 3. U-NII upper band: 149, 151, 153; 157, 159, 161; 165, 167, 169; 171, 173 (including central frequency in BW 40MHz) */ ++ /* 3.1 Fill up channel */ + choffset = 14 + 12 + 16; + /*for (i = 0; i < 2; i++) */ + for (i = 0; i < 3; i++) { +@@ -594,7 +594,7 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + pAd->TxPower[3 * 3 + choffset + 1].Power = DEFAULT_RF_TX_POWER; + pAd->TxPower[3 * 3 + choffset + 1].Power2 = DEFAULT_RF_TX_POWER; + +- // 3.2 Fill up power ++ /* 3.2 Fill up power */ + /*for (i = 0; i < 4; i++) */ + for (i = 0; i < 6; i++) { + RT28xx_EEPROM_READ16(pAd, +@@ -621,7 +621,7 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + Power2.field.Byte1; + } + +- // 4. Print and Debug ++ /* 4. Print and Debug */ + /*choffset = 14 + 12 + 16 + 7; */ + choffset = 14 + 12 + 16 + 11; + +@@ -691,21 +691,21 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + if (pAd->chipOps.eeinit) + pAd->chipOps.eeinit(pAd); + +- // Init EEPROM Address Number, before access EEPROM; if 93c46, EEPROMAddressNum=6, else if 93c66, EEPROMAddressNum=8 ++ /* Init EEPROM Address Number, before access EEPROM; if 93c46, EEPROMAddressNum=6, else if 93c66, EEPROMAddressNum=8 */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &data); + DBGPRINT(RT_DEBUG_TRACE, ("--> E2PROM_CSR = 0x%x\n", data)); + + if ((data & 0x30) == 0) +- pAd->EEPROMAddressNum = 6; // 93C46 ++ pAd->EEPROMAddressNum = 6; /* 93C46 */ + else if ((data & 0x30) == 0x10) +- pAd->EEPROMAddressNum = 8; // 93C66 ++ pAd->EEPROMAddressNum = 8; /* 93C66 */ + else +- pAd->EEPROMAddressNum = 8; // 93C86 ++ pAd->EEPROMAddressNum = 8; /* 93C86 */ + DBGPRINT(RT_DEBUG_TRACE, + ("--> EEPROMAddressNum = %d\n", pAd->EEPROMAddressNum)); + +- // RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize +- // MAC address registers according to E2PROM setting ++ /* RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize */ ++ /* MAC address registers according to E2PROM setting */ + if (mac_addr == NULL || + strlen((PSTRING) mac_addr) != 17 || + mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || +@@ -741,12 +741,12 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + } + + { +- //more conveninet to test mbssid, so ap's bssid &0xf1 ++ /*more conveninet to test mbssid, so ap's bssid &0xf1 */ + if (pAd->PermanentAddress[0] == 0xff) + pAd->PermanentAddress[0] = RandomByte(pAd) & 0xf8; + +- //if (pAd->PermanentAddress[5] == 0xff) +- // pAd->PermanentAddress[5] = RandomByte(pAd)&0xf8; ++ /*if (pAd->PermanentAddress[5] == 0xff) */ ++ /* pAd->PermanentAddress[5] = RandomByte(pAd)&0xf8; */ + + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("E2PROM MAC: =%02x:%02x:%02x:%02x:%02x:%02x\n", +@@ -777,12 +777,12 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + } + } + +- // if not return early. cause fail at emulation. +- // Init the channel number for TX channel power ++ /* if not return early. cause fail at emulation. */ ++ /* Init the channel number for TX channel power */ + RTMPReadChannelPwr(pAd); + +- // if E2PROM version mismatch with driver's expectation, then skip +- // all subsequent E2RPOM retieval and set a system error bit to notify GUI ++ /* if E2PROM version mismatch with driver's expectation, then skip */ ++ /* all subsequent E2RPOM retieval and set a system error bit to notify GUI */ + RT28xx_EEPROM_READ16(pAd, EEPROM_VERSION_OFFSET, Version.word); + pAd->EepromVersion = + Version.field.Version + Version.field.FaeReleaseNumber * 256; +@@ -811,14 +811,14 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->EEPROMDefaultValue[i] = 0xffff; + return; */ + } +- // Read BBP default value from EEPROM and store to array(EEPROMDefaultValue) in pAd ++ /* Read BBP default value from EEPROM and store to array(EEPROMDefaultValue) in pAd */ + RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, value); + pAd->EEPROMDefaultValue[0] = value; + + RT28xx_EEPROM_READ16(pAd, EEPROM_NIC2_OFFSET, value); + pAd->EEPROMDefaultValue[1] = value; + +- RT28xx_EEPROM_READ16(pAd, 0x38, value); // Country Region ++ RT28xx_EEPROM_READ16(pAd, 0x38, value); /* Country Region */ + pAd->EEPROMDefaultValue[2] = value; + + for (i = 0; i < 8; i++) { +@@ -827,10 +827,10 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->EEPROMDefaultValue[i + 3] = value; + } + +- // We have to parse NIC configuration 0 at here. +- // If TSSI did not have preloaded value, it should reset the TxAutoAgc to false +- // Therefore, we have to read TxAutoAgc control beforehand. +- // Read Tx AGC control bit ++ /* We have to parse NIC configuration 0 at here. */ ++ /* If TSSI did not have preloaded value, it should reset the TxAutoAgc to false */ ++ /* Therefore, we have to read TxAutoAgc control beforehand. */ ++ /* Read Tx AGC control bit */ + Antenna.word = pAd->EEPROMDefaultValue[0]; + if (Antenna.word == 0xFFFF) { + #ifdef RT30xx +@@ -840,7 +840,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + Antenna.field.TxPath = 1; + Antenna.field.RxPath = 1; + } else +-#endif // RT30xx // ++#endif /* RT30xx // */ + { + + Antenna.word = 0; +@@ -852,7 +852,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + Antenna.word)); + } + } +- // Choose the desired Tx&Rx stream. ++ /* Choose the desired Tx&Rx stream. */ + if ((pAd->CommonCfg.TxStream == 0) + || (pAd->CommonCfg.TxStream > Antenna.field.TxPath)) + pAd->CommonCfg.TxStream = Antenna.field.TxPath; +@@ -863,13 +863,13 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + + if ((pAd->MACVersion < RALINK_2883_VERSION) && + (pAd->CommonCfg.RxStream > 2)) { +- // only 2 Rx streams for RT2860 series ++ /* only 2 Rx streams for RT2860 series */ + pAd->CommonCfg.RxStream = 2; + } + } +- // 3*3 +- // read value from EEPROM and set them to CSR174 ~ 177 in chain0 ~ chain2 +- // yet implement ++ /* 3*3 */ ++ /* read value from EEPROM and set them to CSR174 ~ 177 in chain0 ~ chain2 */ ++ /* yet implement */ + for (i = 0; i < 3; i++) { + } + +@@ -894,25 +894,25 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + ("NICReadEEPROMParameters: RxPath = %d, TxPath = %d\n", + Antenna.field.RxPath, Antenna.field.TxPath)); + +- // Save the antenna for future use ++ /* Save the antenna for future use */ + pAd->Antenna.word = Antenna.word; + +- // Set the RfICType here, then we can initialize RFIC related operation callbacks ++ /* Set the RfICType here, then we can initialize RFIC related operation callbacks */ + pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; + pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; + + #ifdef RTMP_RF_RW_SUPPORT + RtmpChipOpsRFHook(pAd); +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + + #ifdef RTMP_MAC_PCI + sprintf((PSTRING) pAd->nickname, "RT2860STA"); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // +- // Reset PhyMode if we don't support 802.11a +- // Only RFIC_2850 & RFIC_2750 support 802.11a +- // ++ /* */ ++ /* Reset PhyMode if we don't support 802.11a */ ++ /* Only RFIC_2850 & RFIC_2750 support 802.11a */ ++ /* */ + if ((Antenna.field.RfIcType != RFIC_2850) + && (Antenna.field.RfIcType != RFIC_2750) + && (Antenna.field.RfIcType != RFIC_3052)) { +@@ -925,8 +925,8 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + (pAd->CommonCfg.PhyMode == PHY_11N_5G)) + pAd->CommonCfg.PhyMode = PHY_11BGN_MIXED; + } +- // Read TSSI reference and TSSI boundary for temperature compensation. This is ugly +- // 0. 11b/g ++ /* Read TSSI reference and TSSI boundary for temperature compensation. This is ugly */ ++ /* 0. 11b/g */ + { + /* these are tempature reference value (0x00 ~ 0xFE) + ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0 +@@ -951,7 +951,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->TssiMinusBoundaryG[0] = pAd->TssiRefG; + pAd->TssiPlusBoundaryG[0] = pAd->TssiRefG; + +- // Disable TxAgc if the based value is not right ++ /* Disable TxAgc if the based value is not right */ + if (pAd->TssiRefG == 0xff) + pAd->bAutoTxAgcG = FALSE; + +@@ -965,7 +965,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->TssiPlusBoundaryG[3], pAd->TssiPlusBoundaryG[4], + pAd->TxAgcStepG, pAd->bAutoTxAgcG)); + } +- // 1. 11a ++ /* 1. 11a */ + { + RT28xx_EEPROM_READ16(pAd, 0xD4, Power.word); + pAd->TssiMinusBoundaryA[4] = Power.field.Byte0; +@@ -986,7 +986,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->TssiMinusBoundaryA[0] = pAd->TssiRefA; + pAd->TssiPlusBoundaryA[0] = pAd->TssiRefA; + +- // Disable TxAgc if the based value is not right ++ /* Disable TxAgc if the based value is not right */ + if (pAd->TssiRefA == 0xff) + pAd->bAutoTxAgcA = FALSE; + +@@ -1002,7 +1002,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + } + pAd->BbpRssiToDbmDelta = 0x0; + +- // Read frequency offset setting for RF ++ /* Read frequency offset setting for RF */ + RT28xx_EEPROM_READ16(pAd, EEPROM_FREQ_OFFSET, value); + if ((value & 0x00FF) != 0x00FF) + pAd->RfFreqOffset = (ULONG) (value & 0x00FF); +@@ -1011,9 +1011,9 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + DBGPRINT(RT_DEBUG_TRACE, + ("E2PROM: RF FreqOffset=0x%lx \n", pAd->RfFreqOffset)); + +- //CountryRegion byte offset (38h) +- value = pAd->EEPROMDefaultValue[2] >> 8; // 2.4G band +- value2 = pAd->EEPROMDefaultValue[2] & 0x00FF; // 5G band ++ /*CountryRegion byte offset (38h) */ ++ value = pAd->EEPROMDefaultValue[2] >> 8; /* 2.4G band */ ++ value2 = pAd->EEPROMDefaultValue[2] & 0x00FF; /* 5G band */ + + if ((value <= REGION_MAXIMUM_BG_BAND) + && (value2 <= REGION_MAXIMUM_A_BAND)) { +@@ -1024,10 +1024,10 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + RTMPSetPhyMode(pAd, TmpPhy); + SetCommonHT(pAd); + } +- // +- // Get RSSI Offset on EEPROM 0x9Ah & 0x9Ch. +- // The valid value are (-10 ~ 10) +- // ++ /* */ ++ /* Get RSSI Offset on EEPROM 0x9Ah & 0x9Ch. */ ++ /* The valid value are (-10 ~ 10) */ ++ /* */ + RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, value); + pAd->BGRssiOffset0 = value & 0x00ff; + pAd->BGRssiOffset1 = (value >> 8); +@@ -1038,15 +1038,15 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->BLNAGain = value & 0x00ff; + pAd->ALNAGain0 = (value >> 8); + +- // Validate 11b/g RSSI_0 offset. ++ /* Validate 11b/g RSSI_0 offset. */ + if ((pAd->BGRssiOffset0 < -10) || (pAd->BGRssiOffset0 > 10)) + pAd->BGRssiOffset0 = 0; + +- // Validate 11b/g RSSI_1 offset. ++ /* Validate 11b/g RSSI_1 offset. */ + if ((pAd->BGRssiOffset1 < -10) || (pAd->BGRssiOffset1 > 10)) + pAd->BGRssiOffset1 = 0; + +- // Validate 11b/g RSSI_2 offset. ++ /* Validate 11b/g RSSI_2 offset. */ + if ((pAd->BGRssiOffset2 < -10) || (pAd->BGRssiOffset2 > 10)) + pAd->BGRssiOffset2 = 0; + +@@ -1062,25 +1062,25 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + if (((UCHAR) pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) + pAd->ALNAGain2 = pAd->ALNAGain0; + +- // Validate 11a RSSI_0 offset. ++ /* Validate 11a RSSI_0 offset. */ + if ((pAd->ARssiOffset0 < -10) || (pAd->ARssiOffset0 > 10)) + pAd->ARssiOffset0 = 0; + +- // Validate 11a RSSI_1 offset. ++ /* Validate 11a RSSI_1 offset. */ + if ((pAd->ARssiOffset1 < -10) || (pAd->ARssiOffset1 > 10)) + pAd->ARssiOffset1 = 0; + +- //Validate 11a RSSI_2 offset. ++ /*Validate 11a RSSI_2 offset. */ + if ((pAd->ARssiOffset2 < -10) || (pAd->ARssiOffset2 > 10)) + pAd->ARssiOffset2 = 0; + + #ifdef RT30xx +- // +- // Get TX mixer gain setting +- // 0xff are invalid value +- // Note: RT30xX default value is 0x00 and will program to RF_R17 only when this value is not zero. +- // RT359X default value is 0x02 +- // ++ /* */ ++ /* Get TX mixer gain setting */ ++ /* 0xff are invalid value */ ++ /* Note: RT30xX default value is 0x00 and will program to RF_R17 only when this value is not zero. */ ++ /* RT359X default value is 0x02 */ ++ /* */ + if (IS_RT30xx(pAd) || IS_RT3572(pAd)) { + RT28xx_EEPROM_READ16(pAd, EEPROM_TXMIXER_GAIN_2_4G, value); + pAd->TxMixerGain24G = 0; +@@ -1090,11 +1090,11 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->TxMixerGain24G = (UCHAR) value; + } + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + +- // +- // Get LED Setting. +- // ++ /* */ ++ /* Get LED Setting. */ ++ /* */ + RT28xx_EEPROM_READ16(pAd, 0x3a, value); + pAd->LedCntl.word = (value >> 8); + RT28xx_EEPROM_READ16(pAd, EEPROM_LED1_OFFSET, value); +@@ -1109,8 +1109,8 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + RtmpEfuseSupportCheck(pAd); +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++#endif /* RTMP_EFUSE_SUPPORT // */ ++#endif /* RT30xx // */ + + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n")); + } +@@ -1138,7 +1138,7 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + UINT32 data = 0; + UCHAR BBPR1 = 0; + USHORT i; +-// EEPROM_ANTENNA_STRUC Antenna; ++/* EEPROM_ANTENNA_STRUC Antenna; */ + EEPROM_NIC_CONFIG2_STRUC NicConfig2; + UCHAR BBPR3 = 0; + +@@ -1166,18 +1166,18 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + } + } + +- // Save the antenna for future use ++ /* Save the antenna for future use */ + pAd->NicConfig2.word = NicConfig2.word; + + #ifdef RT30xx +- // set default antenna as main ++ /* set default antenna as main */ + if (pAd->RfIcType == RFIC_3020) + AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt); +-#endif // RT30xx // ++#endif /* RT30xx // */ + +- // +- // Send LED Setting to MCU. +- // ++ /* */ ++ /* Send LED Setting to MCU. */ ++ /* */ + if (pAd->LedCntl.word == 0xFF) { + pAd->LedCntl.word = 0x01; + pAd->Led1 = 0x5555; +@@ -1185,10 +1185,10 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + + #ifdef RTMP_MAC_PCI + pAd->Led3 = 0xA9F8; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + pAd->Led3 = 0x5627; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR) pAd->Led1, +@@ -1200,19 +1200,19 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x51, 0xff, 0, pAd->LedCntl.field.Polarity); + + pAd->LedIndicatorStrength = 0xFF; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up ++ RTMPSetSignalLED(pAd, -100); /* Force signal strength Led to be turned off, before link up */ + + { +- // Read Hardware controlled Radio state enable bit ++ /* Read Hardware controlled Radio state enable bit */ + if (NicConfig2.field.HardwareRadioControl == 1) { + pAd->StaCfg.bHardwareRadio = TRUE; + +- // Read GPIO pin2 as Hardware controlled radio state ++ /* Read GPIO pin2 as Hardware controlled radio state */ + RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); + if ((data & 0x04) == 0) { + pAd->StaCfg.bHwRadio = FALSE; + pAd->StaCfg.bRadio = FALSE; +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); ++/* RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + } + } else +@@ -1227,15 +1227,15 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + AsicSendCommandToMcu(pAd, 0x30, PowerRadioOffCID, 0xff, + 0x02); + AsicCheckCommanOk(pAd, PowerRadioOffCID); +-#endif // RT3090 // ++#endif /* RT3090 // */ + #ifndef RT3090 + AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); +-#endif // RT3090 // ++#endif /* RT3090 // */ + AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, + 0x00); +- // 2-1. wait command ok. ++ /* 2-1. wait command ok. */ + AsicCheckCommanOk(pAd, PowerWakeCID); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } + } + +@@ -1246,8 +1246,8 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); + } +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. ++ /* 3090 MCU Wakeup command needs more time to be stable. */ ++ /* Before stable, don't issue other MCU command to prevent from firmware error. */ + + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd) +@@ -1258,22 +1258,22 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + pAd->brt30xxBanMcuCmd = FALSE; + RTMP_SEM_UNLOCK(&pAd->McuCmdLock); + } +-#endif // RT30xx // +-#endif // RTMP_MAC_PCI // ++#endif /* RT30xx // */ ++#endif /* RTMP_MAC_PCI // */ + +- // Turn off patching for cardbus controller ++ /* Turn off patching for cardbus controller */ + if (NicConfig2.field.CardbusAcceleration == 1) { +-// pAd->bTest1 = TRUE; ++/* pAd->bTest1 = TRUE; */ + } + + if (NicConfig2.field.DynamicTxAgcControl == 1) + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE; + else + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; +- // +- // Since BBP has been progamed, to make sure BBP setting will be +- // upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! +- // ++ /* */ ++ /* Since BBP has been progamed, to make sure BBP setting will be */ ++ /* upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! */ ++ /* */ + pAd->CommonCfg.BandState = UNKNOWN_BAND; + + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); +@@ -1288,7 +1288,7 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3); + + { +- // Handle the difference when 1T ++ /* Handle the difference when 1T */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BBPR1); + if (pAd->Antenna.field.TxPath == 1) { + BBPR1 &= (~0x18); +@@ -1303,13 +1303,13 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + + #ifdef RTMP_MAC_USB + #ifdef RT30xx +- // update registers from EEPROM for RT3071 or later(3572/3592). ++ /* update registers from EEPROM for RT3071 or later(3572/3592). */ + + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { + UCHAR RegIdx, RegValue; + USHORT value; + +- // after RT3071, write BBP from EEPROM 0xF0 to 0x102 ++ /* after RT3071, write BBP from EEPROM 0xF0 to 0x102 */ + for (i = 0xF0; i <= 0x102; i = i + 2) { + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); +@@ -1324,7 +1324,7 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + } + } + +- // after RT3071, write RF from EEPROM 0x104 to 0x116 ++ /* after RT3071, write RF from EEPROM 0x104 to 0x116 */ + for (i = 0x104; i <= 0x116; i = i + 2) { + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); +@@ -1338,8 +1338,8 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + } + } + } +-#endif // RT30xx // +-#endif // RTMP_MAC_USB // ++#endif /* RT30xx // */ ++#endif /* RTMP_MAC_USB // */ + + DBGPRINT(RT_DEBUG_TRACE, + ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", +@@ -1373,14 +1373,14 @@ NDIS_STATUS NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + #ifdef RTMP_MAC_PCI + UINT32 Value; + DELAY_INT_CFG_STRUC IntCfg; +-#endif // RTMP_MAC_PCI // +-// INT_MASK_CSR_STRUC IntMask; ++#endif /* RTMP_MAC_PCI // */ ++/* INT_MASK_CSR_STRUC IntMask; */ + ULONG i = 0, j = 0; + AC_TXOP_CSR0_STRUC csr0; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n")); + +- // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: ++ /* 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: */ + retry: + i = 0; + do { +@@ -1398,7 +1398,7 @@ retry: + GloCfg.field.EnTXWriteBackDDONE = 1; + RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); + +- // Record HW Beacon offset ++ /* Record HW Beacon offset */ + pAd->BeaconOffset[0] = HW_BEACON_BASE0; + pAd->BeaconOffset[1] = HW_BEACON_BASE1; + pAd->BeaconOffset[2] = HW_BEACON_BASE2; +@@ -1408,19 +1408,19 @@ retry: + pAd->BeaconOffset[6] = HW_BEACON_BASE6; + pAd->BeaconOffset[7] = HW_BEACON_BASE7; + +- // +- // write all shared Ring's base address into ASIC +- // ++ /* */ ++ /* write all shared Ring's base address into ASIC */ ++ /* */ + +- // asic simulation sequence put this ahead before loading firmware. +- // pbf hardware reset ++ /* asic simulation sequence put this ahead before loading firmware. */ ++ /* pbf hardware reset */ + #ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); // 0x10000 for reset rx, 0x3f resets all 6 tx rings. ++ RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); /* 0x10000 for reset rx, 0x3f resets all 6 tx rings. */ + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f); + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // Initialze ASIC for TX & Rx operation ++ /* Initialze ASIC for TX & Rx operation */ + if (NICInitializeAsic(pAd, bHardReset) != NDIS_STATUS_SUCCESS) { + if (j++ == 0) { + NICLoadFirmware(pAd); +@@ -1430,46 +1430,46 @@ retry: + } + + #ifdef RTMP_MAC_PCI +- // Write AC_BK base address register ++ /* Write AC_BK base address register */ + Value = + RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR1 : 0x%x\n", Value)); + +- // Write AC_BE base address register ++ /* Write AC_BE base address register */ + Value = + RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR0, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR0 : 0x%x\n", Value)); + +- // Write AC_VI base address register ++ /* Write AC_VI base address register */ + Value = + RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR2, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR2 : 0x%x\n", Value)); + +- // Write AC_VO base address register ++ /* Write AC_VO base address register */ + Value = + RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%x\n", Value)); + +- // Write MGMT_BASE_CSR register ++ /* Write MGMT_BASE_CSR register */ + Value = RTMP_GetPhysicalAddressLow(pAd->MgmtRing.Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, TX_BASE_PTR5, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR5 : 0x%x\n", Value)); + +- // Write RX_BASE_CSR register ++ /* Write RX_BASE_CSR register */ + Value = RTMP_GetPhysicalAddressLow(pAd->RxRing.Cell[0].AllocPa); + RTMP_IO_WRITE32(pAd, RX_BASE_PTR, Value); + DBGPRINT(RT_DEBUG_TRACE, ("--> RX_BASE_PTR : 0x%x\n", Value)); + +- // Init RX Ring index pointer ++ /* Init RX Ring index pointer */ + pAd->RxRing.RxSwReadIdx = 0; + pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1; + RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); + +- // Init TX rings index pointer ++ /* Init TX rings index pointer */ + { + for (i = 0; i < NUM_OF_TX_RING; i++) { + pAd->TxRing[i].TxSwFreeIdx = 0; +@@ -1479,16 +1479,16 @@ retry: + } + } + +- // init MGMT ring index pointer ++ /* init MGMT ring index pointer */ + pAd->MgmtRing.TxSwFreeIdx = 0; + pAd->MgmtRing.TxCpuIdx = 0; + RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); + +- // +- // set each Ring's SIZE into ASIC. Descriptor Size is fixed by design. +- // ++ /* */ ++ /* set each Ring's SIZE into ASIC. Descriptor Size is fixed by design. */ ++ /* */ + +- // Write TX_RING_CSR0 register ++ /* Write TX_RING_CSR0 register */ + Value = TX_RING_SIZE; + RTMP_IO_WRITE32(pAd, TX_MAX_CNT0, Value); + RTMP_IO_WRITE32(pAd, TX_MAX_CNT1, Value); +@@ -1498,25 +1498,25 @@ retry: + Value = MGMT_RING_SIZE; + RTMP_IO_WRITE32(pAd, TX_MGMTMAX_CNT, Value); + +- // Write RX_RING_CSR register ++ /* Write RX_RING_CSR register */ + Value = RX_RING_SIZE; + RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // WMM parameter ++ /* WMM parameter */ + csr0.word = 0; + RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); + if (pAd->CommonCfg.PhyMode == PHY_11B) { +- csr0.field.Ac0Txop = 192; // AC_VI: 192*32us ~= 6ms +- csr0.field.Ac1Txop = 96; // AC_VO: 96*32us ~= 3ms ++ csr0.field.Ac0Txop = 192; /* AC_VI: 192*32us ~= 6ms */ ++ csr0.field.Ac1Txop = 96; /* AC_VO: 96*32us ~= 3ms */ + } else { +- csr0.field.Ac0Txop = 96; // AC_VI: 96*32us ~= 3ms +- csr0.field.Ac1Txop = 48; // AC_VO: 48*32us ~= 1.5ms ++ csr0.field.Ac0Txop = 96; /* AC_VI: 96*32us ~= 3ms */ ++ csr0.field.Ac1Txop = 48; /* AC_VO: 48*32us ~= 1.5ms */ + } + RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word); + + #ifdef RTMP_MAC_PCI +- // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: ++ /* 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: */ + i = 0; + do { + RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +@@ -1534,11 +1534,11 @@ retry: + + IntCfg.word = 0; + RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // reset action +- // Load firmware +- // Status = NICLoadFirmware(pAd); ++ /* reset action */ ++ /* Load firmware */ ++ /* Status = NICLoadFirmware(pAd); */ + + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAdapter\n")); + return Status; +@@ -1571,25 +1571,25 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + UINT32 MacCsr0 = 0; + NTSTATUS Status; + UCHAR Value = 0xff; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + #ifdef RT30xx + UCHAR bbpreg = 0; + UCHAR RFValue = 0; +-#endif // RT30xx // ++#endif /* RT30xx // */ + USHORT KeyIdx; + INT i, apidx; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n")); + + #ifdef RTMP_MAC_PCI +- RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x3); // To fix driver disable/enable hang issue when radio off ++ RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x3); /* To fix driver disable/enable hang issue when radio off */ + if (bHardReset == TRUE) { + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3); + } else + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); +- // Initialize MAC register to default value ++ /* Initialize MAC register to default value */ + for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) { + RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, + MACRegTable[Index].Value); +@@ -1601,15 +1601,15 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + STAMACRegTable[Index].Value); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- // +- // Make sure MAC gets ready after NICLoadFirmware(). +- // ++ /* */ ++ /* Make sure MAC gets ready after NICLoadFirmware(). */ ++ /* */ + Index = 0; + +- //To avoid hang-on issue when interface up in kernel 2.4, +- //we use a local variable "MacCsr0" instead of using "pAd->MACVersion" directly. ++ /*To avoid hang-on issue when interface up in kernel 2.4, */ ++ /*we use a local variable "MacCsr0" instead of using "pAd->MACVersion" directly. */ + do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + +@@ -1622,7 +1622,7 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + pAd->MACVersion = MacCsr0; + DBGPRINT(RT_DEBUG_TRACE, + ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion)); +- // turn on bit13 (set to zero) after rt2860D. This is to solve high-current issue. ++ /* turn on bit13 (set to zero) after rt2860D. This is to solve high-current issue. */ + RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacCsr12); + MacCsr12 &= (~0x2000); + RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, MacCsr12); +@@ -1633,7 +1633,7 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); + +- // Initialize MAC register to default value ++ /* Initialize MAC register to default value */ + for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++) { + #ifdef RT30xx + if ((MACRegTable[Index].Register == TX_SW_CFG0) +@@ -1641,7 +1641,7 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + || IS_RT3090(pAd) || IS_RT3390(pAd))) { + MACRegTable[Index].Value = 0x00000400; + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + RTMP_IO_WRITE32(pAd, (USHORT) MACRegTable[Index].Register, + MACRegTable[Index].Value); + } +@@ -1653,19 +1653,19 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + STAMACRegTable[Index].Value); + } + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #ifdef RT30xx +- // Initialize RT3070 serial MAC registers which is different from RT2870 serial ++ /* Initialize RT3070 serial MAC registers which is different from RT2870 serial */ + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { + RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); + +- // RT3071 version E has fixed this issue ++ /* RT3071 version E has fixed this issue */ + if ((pAd->MACVersion & 0xffff) < 0x0211) { + if (pAd->NicConfig2.field.DACTestBit == 1) { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); /* To fix throughput drop drastically */ + } else { +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0F); // To fix throughput drop drastically ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0F); /* To fix throughput drop drastically */ + } + } else { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0); +@@ -1673,21 +1673,21 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + } else if (IS_RT3070(pAd)) { + if (((pAd->MACVersion & 0xffff) < 0x0201)) { + RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0); +- RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); // To fix throughput drop drastically ++ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x2C); /* To fix throughput drop drastically */ + } else { + RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0); + } + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + +- // +- // Before program BBP, we need to wait BBP/RF get wake up. +- // ++ /* */ ++ /* Before program BBP, we need to wait BBP/RF get wake up. */ ++ /* */ + Index = 0; + do { + RTMP_IO_READ32(pAd, MAC_STATUS_CFG, &MacCsr12); + +- if ((MacCsr12 & 0x03) == 0) // if BB.RF is stable ++ if ((MacCsr12 & 0x03) == 0) /* if BB.RF is stable */ + break; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1695,87 +1695,87 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + RTMPusecDelay(1000); + } while (Index++ < 100); + +- // The commands to firmware should be after these commands, these commands will init firmware +- // PCI and USB are not the same because PCI driver needs to wait for PCI bus ready +- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0); // initialize BBP R/W access agent ++ /* The commands to firmware should be after these commands, these commands will init firmware */ ++ /* PCI and USB are not the same because PCI driver needs to wait for PCI bus ready */ ++ RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0); /* initialize BBP R/W access agent */ + RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, 0); + #ifdef RT3090 +- //2008/11/28:KH add to fix the dead rf frequency offset bug<-- ++ /*2008/11/28:KH add to fix the dead rf frequency offset bug<-- */ + AsicSendCommandToMcu(pAd, 0x72, 0, 0, 0); +- //2008/11/28:KH add to fix the dead rf frequency offset bug--> +-#endif // RT3090 // ++ /*2008/11/28:KH add to fix the dead rf frequency offset bug--> */ ++#endif /* RT3090 // */ + RTMPusecDelay(1000); + +- // Read BBP register, make sure BBP is up and running before write new data ++ /* Read BBP register, make sure BBP is up and running before write new data */ + Index = 0; + do { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R0, &R0); + DBGPRINT(RT_DEBUG_TRACE, ("BBP version = %x\n", R0)); + } while ((++Index < 20) && ((R0 == 0xff) || (R0 == 0x00))); +- //ASSERT(Index < 20); //this will cause BSOD on Check-build driver ++ /*ASSERT(Index < 20); //this will cause BSOD on Check-build driver */ + + if ((R0 == 0xff) || (R0 == 0x00)) + return NDIS_STATUS_FAILURE; + +- // Initialize BBP register to default value ++ /* Initialize BBP register to default value */ + for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, + BBPRegTable[Index].Value); + } + + #ifdef RTMP_MAC_PCI +- // TODO: shiang, check MACVersion, currently, rbus-based chip use this. ++ /* TODO: shiang, check MACVersion, currently, rbus-based chip use this. */ + if (pAd->MACVersion == 0x28720200) { +- //UCHAR value; ++ /*UCHAR value; */ + ULONG value2; + +- //disable MLD by Bruce 20080704 +- //BBP_IO_READ8_BY_REG_ID(pAd, BBP_R105, &value); +- //BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R105, value | 4); ++ /*disable MLD by Bruce 20080704 */ ++ /*BBP_IO_READ8_BY_REG_ID(pAd, BBP_R105, &value); */ ++ /*BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R105, value | 4); */ + +- //Maximum PSDU length from 16K to 32K bytes ++ /*Maximum PSDU length from 16K to 32K bytes */ + RTMP_IO_READ32(pAd, MAX_LEN_CFG, &value2); + value2 &= ~(0x3 << 12); + value2 |= (0x2 << 12); + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, value2); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. +- // RT3090 should not program BBP R84 to 0x19, otherwise TX will block. +- //3070/71/72,3090,3090A( are included in RT30xx),3572,3390 ++ /* for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT. */ ++ /* RT3090 should not program BBP R84 to 0x19, otherwise TX will block. */ ++ /*3070/71/72,3090,3090A( are included in RT30xx),3572,3390 */ + if (((pAd->MACVersion & 0xffff) != 0x0101) + && !(IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19); + + #ifdef RT30xx +-// add by johnli, RF power sequence setup +- if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { //update for RT3070/71/72/90/91/92,3572,3390. ++/* add by johnli, RF power sequence setup */ ++ if (IS_RT30xx(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { /*update for RT3070/71/72/90/91/92,3572,3390. */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R79, 0x13); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R80, 0x05); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R81, 0x33); + } + +- if (IS_RT3090(pAd) || IS_RT3390(pAd)) // RT309x, RT3071/72 ++ if (IS_RT3090(pAd) || IS_RT3390(pAd)) /* RT309x, RT3071/72 */ + { +- // enable DC filter ++ /* enable DC filter */ + if ((pAd->MACVersion & 0xffff) >= 0x0211) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); + } +- // improve power consumption ++ /* improve power consumption */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R138, &bbpreg); + if (pAd->Antenna.field.TxPath == 1) { +- // turn off tx DAC_1 ++ /* turn off tx DAC_1 */ + bbpreg = (bbpreg | 0x20); + } + + if (pAd->Antenna.field.RxPath == 1) { +- // turn off tx ADC_1 ++ /* turn off tx ADC_1 */ + bbpreg &= (~0x2); + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R138, bbpreg); + +- // improve power consumption in RT3071 Ver.E ++ /* improve power consumption in RT3071 Ver.E */ + if ((pAd->MACVersion & 0xffff) >= 0x0211) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); + bbpreg &= (~0x3); +@@ -1783,39 +1783,39 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + } + } else if (IS_RT3070(pAd)) { + if ((pAd->MACVersion & 0xffff) >= 0x0201) { +- // enable DC filter ++ /* enable DC filter */ + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0); + +- // improve power consumption in RT3070 Ver.F ++ /* improve power consumption in RT3070 Ver.F */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg); + bbpreg &= (~0x3); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg); + } +- // TX_LO1_en, RF R17 register Bit 3 to 0 ++ /* TX_LO1_en, RF R17 register Bit 3 to 0 */ + RT30xxReadRFRegister(pAd, RF_R17, &RFValue); + RFValue &= (~0x08); +- // to fix rx long range issue ++ /* to fix rx long range issue */ + if (pAd->NicConfig2.field.ExternalLNAForG == 0) { + RFValue |= 0x20; + } +- // set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h ++ /* set RF_R17_bit[2:0] equal to EEPROM setting at 0x48h */ + if (pAd->TxMixerGain24G >= 1) { +- RFValue &= (~0x7); // clean bit [2:0] ++ RFValue &= (~0x7); /* clean bit [2:0] */ + RFValue |= pAd->TxMixerGain24G; + } + RT30xxWriteRFRegister(pAd, RF_R17, RFValue); + } +-// end johnli +-#endif // RT30xx // ++/* end johnli */ ++#endif /* RT30xx // */ + + if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12); + } + +- if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) // 3*3 ++ if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) /* 3*3 */ + { +- // enlarge MAX_LEN_CFG ++ /* enlarge MAX_LEN_CFG */ + UINT32 csr; + RTMP_IO_READ32(pAd, MAX_LEN_CFG, &csr); + csr &= 0xFFF; +@@ -1827,7 +1827,7 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + UCHAR MAC_Value[] = + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0 }; + +- //Initialize WCID table ++ /*Initialize WCID table */ + Value = 0xff; + for (Index = 0; Index < 254; Index++) { + RTUSBMultiWrite(pAd, +@@ -1835,18 +1835,18 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + MAC_Value, 8); + } + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // Add radio off control ++ /* Add radio off control */ + { + if (pAd->StaCfg.bRadio == FALSE) { +-// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); ++/* RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + DBGPRINT(RT_DEBUG_TRACE, ("Set Radio Off\n")); + } + } + +- // Clear raw counters ++ /* Clear raw counters */ + RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter); + RTMP_IO_READ32(pAd, RX_STA_CNT1, &Counter); + RTMP_IO_READ32(pAd, RX_STA_CNT2, &Counter); +@@ -1854,29 +1854,29 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + RTMP_IO_READ32(pAd, TX_STA_CNT1, &Counter); + RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter); + +- // ASIC will keep garbage value after boot +- // Clear all shared key table when initial +- // This routine can be ignored in radio-ON/OFF operation. ++ /* ASIC will keep garbage value after boot */ ++ /* Clear all shared key table when initial */ ++ /* This routine can be ignored in radio-ON/OFF operation. */ + if (bHardReset) { + for (KeyIdx = 0; KeyIdx < 4; KeyIdx++) { + RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4 * KeyIdx, + 0); + } + +- // Clear all pairwise key table when initial ++ /* Clear all pairwise key table when initial */ + for (KeyIdx = 0; KeyIdx < 256; KeyIdx++) { + RTMP_IO_WRITE32(pAd, + MAC_WCID_ATTRIBUTE_BASE + + (KeyIdx * HW_WCID_ATTRI_SIZE), 1); + } + } +- // assert HOST ready bit +-// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark +-// RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4); ++ /* assert HOST ready bit */ ++/* RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x0); // 2004-09-14 asked by Mark */ ++/* RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x4); */ + +- // It isn't necessary to clear this space when not hard reset. ++ /* It isn't necessary to clear this space when not hard reset. */ + if (bHardReset == TRUE) { +- // clear all on-chip BEACON frame space ++ /* clear all on-chip BEACON frame space */ + for (apidx = 0; apidx < HW_BEACON_MAX_COUNT; apidx++) { + for (i = 0; i < HW_BEACON_OFFSET >> 2; i += 4) + RTMP_IO_WRITE32(pAd, +@@ -1886,22 +1886,22 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + } + #ifdef RTMP_MAC_USB + AsicDisableSync(pAd); +- // Clear raw counters ++ /* Clear raw counters */ + RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter); + RTMP_IO_READ32(pAd, RX_STA_CNT1, &Counter); + RTMP_IO_READ32(pAd, RX_STA_CNT2, &Counter); + RTMP_IO_READ32(pAd, TX_STA_CNT0, &Counter); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &Counter); + RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter); +- // Default PCI clock cycle per ms is different as default setting, which is based on PCI. ++ /* Default PCI clock cycle per ms is different as default setting, which is based on PCI. */ + RTMP_IO_READ32(pAd, USB_CYC_CFG, &Counter); + Counter &= 0xffffff00; + Counter |= 0x000001e; + RTMP_IO_WRITE32(pAd, USB_CYC_CFG, Counter); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + { +- // for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT. ++ /* for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT. */ + if ((pAd->MACVersion & 0xffff) != 0x0101) + RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x583f); + } +@@ -1934,16 +1934,16 @@ VOID NICIssueReset(IN PRTMP_ADAPTER pAd) + UINT32 Value = 0; + DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); + +- // Abort Tx, prevent ASIC from writing to Host memory +- //RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x001f0000); ++ /* Abort Tx, prevent ASIC from writing to Host memory */ ++ /*RTMP_IO_WRITE32(pAd, TX_CNTL_CSR, 0x001f0000); */ + +- // Disable Rx, register value supposed will remain after reset ++ /* Disable Rx, register value supposed will remain after reset */ + RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); + Value &= (0xfffffff3); + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); + +- // Issue reset and clear from reset state +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); // 2004-09-17 change from 0x01 ++ /* Issue reset and clear from reset state */ ++ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x03); /* 2004-09-17 change from 0x01 */ + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x00); + + DBGPRINT(RT_DEBUG_TRACE, ("<-- NICIssueReset\n")); +@@ -2001,7 +2001,7 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + + pEntry->DebugFIFOCount++; + +- if (StaFifo.field.TxBF) // 3*3 ++ if (StaFifo.field.TxBF) /* 3*3 */ + pEntry->TxBFCount++; + + if (!StaFifo.field.TxSuccess) { +@@ -2022,17 +2022,17 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + FALSE); + } + +- // Update the continuous transmission counter except PS mode ++ /* Update the continuous transmission counter except PS mode */ + pEntry->ContinueTxFailCnt++; + } else { +- // Clear the FIFOCount when sta in Power Save mode. Basically we assume +- // this tx error happened due to sta just go to sleep. ++ /* Clear the FIFOCount when sta in Power Save mode. Basically we assume */ ++ /* this tx error happened due to sta just go to sleep. */ + pEntry->FIFOCount = 0; + pEntry->ContinueTxFailCnt = 0; + } +- //pEntry->FIFOCount = 0; ++ /*pEntry->FIFOCount = 0; */ + } +- //pEntry->bSendBAR = TRUE; ++ /*pEntry->bSendBAR = TRUE; */ + } else { + if ((pEntry->PsMode != PWR_SAVE) + && (pEntry->NoBADataCountDown > 0)) { +@@ -2044,7 +2044,7 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + + pEntry->FIFOCount = 0; + pEntry->OneSecTxNoRetryOkCount++; +- // update NoDataIdleCount when sucessful send packet to STA. ++ /* update NoDataIdleCount when sucessful send packet to STA. */ + pEntry->NoDataIdleCount = 0; + pEntry->ContinueTxFailCnt = 0; + } +@@ -2072,7 +2072,7 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + } + + i++; +- // ASIC store 16 stack ++ /* ASIC store 16 stack */ + } while (i < (2 * TX_RING_SIZE)); + + } +@@ -2096,9 +2096,9 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + */ + VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + { +- UINT32 OldValue; //, Value2; +- //ULONG PageSum, OneSecTransmitCount; +- //ULONG TxErrorRatio, Retry, Fail; ++ UINT32 OldValue; /*, Value2; */ ++ /*ULONG PageSum, OneSecTransmitCount; */ ++ /*ULONG TxErrorRatio, Retry, Fail; */ + RX_STA_CNT0_STRUC RxStaCnt0; + RX_STA_CNT1_STRUC RxStaCnt1; + RX_STA_CNT2_STRUC RxStaCnt2; +@@ -2123,34 +2123,34 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + + { + RTMP_IO_READ32(pAd, RX_STA_CNT1, &RxStaCnt1.word); +- // Update RX PLCP error counter ++ /* Update RX PLCP error counter */ + pAd->PrivateInfo.PhyRxErrCnt += RxStaCnt1.field.PlcpErr; +- // Update False CCA counter ++ /* Update False CCA counter */ + pAd->RalinkCounters.OneSecFalseCCACnt += + RxStaCnt1.field.FalseCca; + } + +- // Update FCS counters ++ /* Update FCS counters */ + OldValue = pAd->WlanCounters.FCSErrorCount.u.LowPart; +- pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); // >> 7); ++ pAd->WlanCounters.FCSErrorCount.u.LowPart += (RxStaCnt0.field.CrcErr); /* >> 7); */ + if (pAd->WlanCounters.FCSErrorCount.u.LowPart < OldValue) + pAd->WlanCounters.FCSErrorCount.u.HighPart++; + +- // Add FCS error count to private counters ++ /* Add FCS error count to private counters */ + pRalinkCounters->OneSecRxFcsErrCnt += RxStaCnt0.field.CrcErr; + OldValue = pRalinkCounters->RealFcsErrCount.u.LowPart; + pRalinkCounters->RealFcsErrCount.u.LowPart += RxStaCnt0.field.CrcErr; + if (pRalinkCounters->RealFcsErrCount.u.LowPart < OldValue) + pRalinkCounters->RealFcsErrCount.u.HighPart++; + +- // Update Duplicate Rcv check ++ /* Update Duplicate Rcv check */ + pRalinkCounters->DuplicateRcv += RxStaCnt2.field.RxDupliCount; + pAd->WlanCounters.FrameDuplicateCount.u.LowPart += + RxStaCnt2.field.RxDupliCount; +- // Update RX Overflow counter ++ /* Update RX Overflow counter */ + pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount); + +- //pAd->RalinkCounters.RxCount = 0; ++ /*pAd->RalinkCounters.RxCount = 0; */ + #ifdef RTMP_MAC_USB + if (pRalinkCounters->RxCount != pAd->watchDogRxCnt) { + pAd->watchDogRxCnt = pRalinkCounters->RxCount; +@@ -2161,12 +2161,12 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + else + pAd->watchDogRxOverFlowCnt = 0; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || +- // (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) ++ /*if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) || */ ++ /* (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED) && (pAd->MacTab.Size != 1))) */ + if (!pAd->bUpdateBcnCntDone) { +- // Update BEACON sent count ++ /* Update BEACON sent count */ + RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word); + RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word); + RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word); +@@ -2186,7 +2186,7 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + TxStaCnt0.field.TxFailCount; + } + +- //if (pAd->bStaFifoTest == TRUE) ++ /*if (pAd->bStaFifoTest == TRUE) */ + { + RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word); + RTMP_IO_READ32(pAd, TX_AGG_CNT0, &TxAggCnt0.word); +@@ -2236,7 +2236,7 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + pRalinkCounters->TxAgg16MPDUCount += + TxAggCnt7.field.AggSize16Count; + +- // Calculate the transmitted A-MPDU count ++ /* Calculate the transmitted A-MPDU count */ + pRalinkCounters->TransmittedAMPDUCount.u.LowPart += + TxAggCnt0.field.AggSize1Count; + pRalinkCounters->TransmittedAMPDUCount.u.LowPart += +@@ -2301,18 +2301,18 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + */ + VOID NICResetFromError(IN PRTMP_ADAPTER pAd) + { +- // Reset BBP (according to alex, reset ASIC will force reset BBP +- // Therefore, skip the reset BBP +- // RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x2); ++ /* Reset BBP (according to alex, reset ASIC will force reset BBP */ ++ /* Therefore, skip the reset BBP */ ++ /* RTMP_IO_WRITE32(pAd, MAC_CSR1, 0x2); */ + + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1); +- // Remove ASIC from reset state ++ /* Remove ASIC from reset state */ + RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0); + + NICInitializeAdapter(pAd, FALSE); + NICInitAsicFromEEPROM(pAd); + +- // Switch to current channel, since during reset process, the connection should remains on. ++ /* Switch to current channel, since during reset process, the connection should remains on. */ + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } +@@ -2409,7 +2409,7 @@ ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length) + return (2); + } + +- // Equal ++ /* Equal */ + return (0); + } + +@@ -2506,9 +2506,9 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + + DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit\n")); + +- // +- // part I. intialize common configuration +- // ++ /* */ ++ /* part I. intialize common configuration */ ++ /* */ + #ifdef RTMP_MAC_USB + pAd->BulkOutReq = 0; + +@@ -2519,22 +2519,22 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->BulkInComplete = 0; + pAd->BulkInCompleteFail = 0; + +- //pAd->QuickTimerP = 100; +- //pAd->TurnAggrBulkInCount = 0; ++ /*pAd->QuickTimerP = 100; */ ++ /*pAd->TurnAggrBulkInCount = 0; */ + pAd->bUsbTxBulkAggre = 0; + +- // init as unsed value to ensure driver will set to MCU once. ++ /* init as unsed value to ensure driver will set to MCU once. */ + pAd->LedIndicatorStrength = 0xFF; + + pAd->CommonCfg.MaxPktOneTxBulk = 2; + pAd->CommonCfg.TxBulkFactor = 1; + pAd->CommonCfg.RxBulkFactor = 1; + +- pAd->CommonCfg.TxPower = 100; //mW ++ pAd->CommonCfg.TxPower = 100; /*mW */ + + NdisZeroMemory(&pAd->CommonCfg.IOTestParm, + sizeof(pAd->CommonCfg.IOTestParm)); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + for (key_index = 0; key_index < SHARE_KEY_NUM; key_index++) { + for (bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++) { +@@ -2556,29 +2556,29 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->HostLnkCtrlOffset = 0; + pAd->StaCfg.PSControl.field.EnableNewPS = TRUE; + pAd->CheckDmaBusyCount = 0; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- pAd->bAutoTxAgcA = FALSE; // Default is OFF +- pAd->bAutoTxAgcG = FALSE; // Default is OFF ++ pAd->bAutoTxAgcA = FALSE; /* Default is OFF */ ++ pAd->bAutoTxAgcG = FALSE; /* Default is OFF */ + pAd->RfIcType = RFIC_2820; + +- // Init timer for reset complete event ++ /* Init timer for reset complete event */ + pAd->CommonCfg.CentralChannel = 1; + pAd->bForcePrintTX = FALSE; + pAd->bForcePrintRX = FALSE; + pAd->bStaFifoTest = FALSE; + pAd->bProtectionTest = FALSE; +- pAd->CommonCfg.Dsifs = 10; // in units of usec +- pAd->CommonCfg.TxPower = 100; //mW +- pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPowerDefault = 0xffffffff; // AUTO +- pAd->CommonCfg.TxPreamble = Rt802_11PreambleAuto; // use Long preamble on TX by defaut ++ pAd->CommonCfg.Dsifs = 10; /* in units of usec */ ++ pAd->CommonCfg.TxPower = 100; /*mW */ ++ pAd->CommonCfg.TxPowerPercentage = 0xffffffff; /* AUTO */ ++ pAd->CommonCfg.TxPowerDefault = 0xffffffff; /* AUTO */ ++ pAd->CommonCfg.TxPreamble = Rt802_11PreambleAuto; /* use Long preamble on TX by defaut */ + pAd->CommonCfg.bUseZeroToDisableFragment = FALSE; + pAd->CommonCfg.RtsThreshold = 2347; + pAd->CommonCfg.FragmentThreshold = 2346; +- pAd->CommonCfg.UseBGProtection = 0; // 0: AUTO +- pAd->CommonCfg.bEnableTxBurst = TRUE; //0; +- pAd->CommonCfg.PhyMode = 0xff; // unknown ++ pAd->CommonCfg.UseBGProtection = 0; /* 0: AUTO */ ++ pAd->CommonCfg.bEnableTxBurst = TRUE; /*0; */ ++ pAd->CommonCfg.PhyMode = 0xff; /* unknown */ + pAd->CommonCfg.BandState = UNKNOWN_BAND; + pAd->CommonCfg.RadarDetect.CSPeriod = 10; + pAd->CommonCfg.RadarDetect.CSCount = 0; +@@ -2607,8 +2607,8 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE; + pAd->CommonCfg.BACapability.field.MpduDensity = 0; + pAd->CommonCfg.BACapability.field.Policy = IMMED_BA; +- pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; //32; +- pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; //32; ++ pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; /*32; */ ++ pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; /*32; */ + DBGPRINT(RT_DEBUG_TRACE, + ("--> UserCfgInit. BACapability = 0x%x\n", + pAd->CommonCfg.BACapability.word)); +@@ -2619,35 +2619,35 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.bExtChannelSwitchAnnouncement = 1; + pAd->CommonCfg.bHTProtect = 1; + pAd->CommonCfg.bMIMOPSEnable = TRUE; +- //2008/11/05:KH add to support Antenna power-saving of AP<-- ++ /*2008/11/05:KH add to support Antenna power-saving of AP<-- */ + pAd->CommonCfg.bGreenAPEnable = FALSE; +- //2008/11/05:KH add to support Antenna power-saving of AP--> ++ /*2008/11/05:KH add to support Antenna power-saving of AP--> */ + pAd->CommonCfg.bBADecline = FALSE; + pAd->CommonCfg.bDisableReordering = FALSE; + + if (pAd->MACVersion == 0x28720200) { +- pAd->CommonCfg.TxBASize = 13; //by Jerry recommend ++ pAd->CommonCfg.TxBASize = 13; /*by Jerry recommend */ + } else { + pAd->CommonCfg.TxBASize = 7; + } + + pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word; + +- //pAd->CommonCfg.HTPhyMode.field.BW = BW_20; +- //pAd->CommonCfg.HTPhyMode.field.MCS = MCS_AUTO; +- //pAd->CommonCfg.HTPhyMode.field.ShortGI = GI_800; +- //pAd->CommonCfg.HTPhyMode.field.STBC = STBC_NONE; ++ /*pAd->CommonCfg.HTPhyMode.field.BW = BW_20; */ ++ /*pAd->CommonCfg.HTPhyMode.field.MCS = MCS_AUTO; */ ++ /*pAd->CommonCfg.HTPhyMode.field.ShortGI = GI_800; */ ++ /*pAd->CommonCfg.HTPhyMode.field.STBC = STBC_NONE; */ + pAd->CommonCfg.TxRate = RATE_6; + + pAd->CommonCfg.MlmeTransmit.field.MCS = MCS_RATE_6; + pAd->CommonCfg.MlmeTransmit.field.BW = BW_20; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; + +- pAd->CommonCfg.BeaconPeriod = 100; // in mSec ++ pAd->CommonCfg.BeaconPeriod = 100; /* in mSec */ + +- // +- // part II. intialize STA specific configuration +- // ++ /* */ ++ /* part II. intialize STA specific configuration */ ++ /* */ + { + RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_DIRECT); + RX_FILTER_CLEAR_FLAG(pAd, fRX_FILTER_ACCEPT_MULTICAST); +@@ -2662,7 +2662,7 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.bMixCipher = FALSE; + pAd->StaCfg.DefaultKeyId = 0; + +- // 802.1x port control ++ /* 802.1x port control */ + pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP; + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + pAd->StaCfg.LastMicErrorTime = 0; +@@ -2670,15 +2670,15 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.bBlockAssoc = FALSE; + pAd->StaCfg.WpaState = SS_NOTUSE; + +- pAd->CommonCfg.NdisRadioStateOff = FALSE; // New to support microsoft disable radio with OID command ++ pAd->CommonCfg.NdisRadioStateOff = FALSE; /* New to support microsoft disable radio with OID command */ + + pAd->StaCfg.RssiTrigger = 0; + NdisZeroMemory(&pAd->StaCfg.RssiSample, sizeof(RSSI_SAMPLE)); + pAd->StaCfg.RssiTriggerMode = + RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; + pAd->StaCfg.AtimWin = 0; +- pAd->StaCfg.DefaultListenCount = 3; //default listen count; +- pAd->StaCfg.BssType = BSS_INFRA; // BSS_INFRA or BSS_ADHOC or BSS_MONITOR ++ pAd->StaCfg.DefaultListenCount = 3; /*default listen count; */ ++ pAd->StaCfg.BssType = BSS_INFRA; /* BSS_INFRA or BSS_ADHOC or BSS_MONITOR */ + pAd->StaCfg.bScanReqIsFromWebUI = FALSE; + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +@@ -2690,23 +2690,23 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + #ifdef PCIE_PS_SUPPORT + pAd->brt30xxBanMcuCmd = FALSE; + pAd->b3090ESpecialChip = FALSE; +-//KH Debug:the following must be removed ++/*KH Debug:the following must be removed */ + pAd->StaCfg.PSControl.field.rt30xxPowerMode = 3; + pAd->StaCfg.PSControl.field.rt30xxForceASPMTest = 0; + pAd->StaCfg.PSControl.field.rt30xxFollowHostASPM = 1; +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + +- // global variables mXXXX used in MAC protocol state machines ++ /* global variables mXXXX used in MAC protocol state machines */ + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + +- // PHY specification +- pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; // default PHY mode +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble ++ /* PHY specification */ ++ pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; /* default PHY mode */ ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); /* CCK use LONG preamble */ + + { +- // user desired power mode ++ /* user desired power mode */ + pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM; + pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM; + pAd->StaCfg.bWindowsACCAMEnable = FALSE; +@@ -2716,20 +2716,20 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd, FALSE); + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; + +- // Patch for Ndtest ++ /* Patch for Ndtest */ + pAd->StaCfg.ScanCnt = 0; + +- pAd->StaCfg.bHwRadio = TRUE; // Default Hardware Radio status is On +- pAd->StaCfg.bSwRadio = TRUE; // Default Software Radio status is On +- pAd->StaCfg.bRadio = TRUE; // bHwRadio && bSwRadio +- pAd->StaCfg.bHardwareRadio = FALSE; // Default is OFF +- pAd->StaCfg.bShowHiddenSSID = FALSE; // Default no show ++ pAd->StaCfg.bHwRadio = TRUE; /* Default Hardware Radio status is On */ ++ pAd->StaCfg.bSwRadio = TRUE; /* Default Software Radio status is On */ ++ pAd->StaCfg.bRadio = TRUE; /* bHwRadio && bSwRadio */ ++ pAd->StaCfg.bHardwareRadio = FALSE; /* Default is OFF */ ++ pAd->StaCfg.bShowHiddenSSID = FALSE; /* Default no show */ + +- // Nitro mode control ++ /* Nitro mode control */ + pAd->StaCfg.bAutoReconnect = TRUE; + +- // Save the init time as last scan time, the system should do scan after 2 seconds. +- // This patch is for driver wake up from standby mode, system will do scan right away. ++ /* Save the init time as last scan time, the system should do scan after 2 seconds. */ ++ /* This patch is for driver wake up from standby mode, system will do scan right away. */ + NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); + if (pAd->StaCfg.LastScanTime > 10 * OS_HZ) + pAd->StaCfg.LastScanTime -= (10 * OS_HZ); +@@ -2737,10 +2737,10 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE + 1); + #ifdef RTMP_MAC_PCI + sprintf((PSTRING) pAd->nickname, "RT2860STA"); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + sprintf((PSTRING) pAd->nickname, "RT2870STA"); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, + GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), + pAd, FALSE); +@@ -2760,83 +2760,83 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.bForceTxBurst = FALSE; + } + +- // Default for extra information is not valid ++ /* Default for extra information is not valid */ + pAd->ExtraInfo = EXTRA_INFO_CLEAR; + +- // Default Config change flag ++ /* Default Config change flag */ + pAd->bConfigChanged = FALSE; + +- // +- // part III. AP configurations +- // ++ /* */ ++ /* part III. AP configurations */ ++ /* */ + +- // +- // part IV. others +- // +- // dynamic BBP R66:sensibity tuning to overcome background noise ++ /* */ ++ /* part IV. others */ ++ /* */ ++ /* dynamic BBP R66:sensibity tuning to overcome background noise */ + pAd->BbpTuning.bEnable = TRUE; + pAd->BbpTuning.FalseCcaLowerThreshold = 100; + pAd->BbpTuning.FalseCcaUpperThreshold = 512; + pAd->BbpTuning.R66Delta = 4; + pAd->Mlme.bEnableAutoAntennaCheck = TRUE; + +- // +- // Also initial R66CurrentValue, RTUSBResumeMsduTransmission might use this value. +- // if not initial this value, the default value will be 0. +- // ++ /* */ ++ /* Also initial R66CurrentValue, RTUSBResumeMsduTransmission might use this value. */ ++ /* if not initial this value, the default value will be 0. */ ++ /* */ + pAd->BbpTuning.R66CurrentValue = 0x38; + + pAd->Bbp94 = BBPR94_DEFAULT; + pAd->BbpForCCK = FALSE; + +- // Default is FALSE for test bit 1 +- //pAd->bTest1 = FALSE; ++ /* Default is FALSE for test bit 1 */ ++ /*pAd->bTest1 = FALSE; */ + +- // initialize MAC table and allocate spin lock ++ /* initialize MAC table and allocate spin lock */ + NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); + InitializeQueueHeader(&pAd->MacTab.McastPsQueue); + NdisAllocateSpinLock(&pAd->MacTabLock); + +- //RTMPInitTimer(pAd, &pAd->RECBATimer, RECBATimerTimeout, pAd, TRUE); +- //RTMPSetTimer(&pAd->RECBATimer, REORDER_EXEC_INTV); ++ /*RTMPInitTimer(pAd, &pAd->RECBATimer, RECBATimerTimeout, pAd, TRUE); */ ++ /*RTMPSetTimer(&pAd->RECBATimer, REORDER_EXEC_INTV); */ + + pAd->CommonCfg.bWiFiTest = FALSE; + #ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n")); + } + +-// IRQL = PASSIVE_LEVEL ++/* IRQL = PASSIVE_LEVEL */ + UCHAR BtoH(STRING ch) + { + if (ch >= '0' && ch <= '9') +- return (ch - '0'); // Handle numerals ++ return (ch - '0'); /* Handle numerals */ + if (ch >= 'A' && ch <= 'F') +- return (ch - 'A' + 0xA); // Handle capitol hex digits ++ return (ch - 'A' + 0xA); /* Handle capitol hex digits */ + if (ch >= 'a' && ch <= 'f') +- return (ch - 'a' + 0xA); // Handle small hex digits ++ return (ch - 'a' + 0xA); /* Handle small hex digits */ + return (255); + } + +-// +-// FUNCTION: AtoH(char *, UCHAR *, int) +-// +-// PURPOSE: Converts ascii string to network order hex +-// +-// PARAMETERS: +-// src - pointer to input ascii string +-// dest - pointer to output hex +-// destlen - size of dest +-// +-// COMMENTS: +-// +-// 2 ascii bytes make a hex byte so must put 1st ascii byte of pair +-// into upper nibble and 2nd ascii byte of pair into lower nibble. +-// +-// IRQL = PASSIVE_LEVEL ++/* */ ++/* FUNCTION: AtoH(char *, UCHAR *, int) */ ++/* */ ++/* PURPOSE: Converts ascii string to network order hex */ ++/* */ ++/* PARAMETERS: */ ++/* src - pointer to input ascii string */ ++/* dest - pointer to output hex */ ++/* destlen - size of dest */ ++/* */ ++/* COMMENTS: */ ++/* */ ++/* 2 ascii bytes make a hex byte so must put 1st ascii byte of pair */ ++/* into upper nibble and 2nd ascii byte of pair into lower nibble. */ ++/* */ ++/* IRQL = PASSIVE_LEVEL */ + + void AtoH(PSTRING src, PUCHAR dest, int destlen) + { +@@ -2847,14 +2847,14 @@ void AtoH(PSTRING src, PUCHAR dest, int destlen) + destTemp = (PUCHAR) dest; + + while (destlen--) { +- *destTemp = BtoH(*srcptr++) << 4; // Put 1st ascii byte in upper nibble. +- *destTemp += BtoH(*srcptr++); // Add 2nd ascii byte to above. ++ *destTemp = BtoH(*srcptr++) << 4; /* Put 1st ascii byte in upper nibble. */ ++ *destTemp += BtoH(*srcptr++); /* Add 2nd ascii byte to above. */ + destTemp++; + } + } + +-//+++Mark by shiang, not use now, need to remove after confirm +-//---Mark by shiang, not use now, need to remove after confirm ++/*+++Mark by shiang, not use now, need to remove after confirm */ ++/*---Mark by shiang, not use now, need to remove after confirm */ + + /* + ======================================================================== +@@ -2879,11 +2879,11 @@ VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, + IN PRALINK_TIMER_STRUCT pTimer, + IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat) + { +- // +- // Set Valid to TRUE for later used. +- // It will crash if we cancel a timer or set a timer +- // that we haven't initialize before. +- // ++ /* */ ++ /* Set Valid to TRUE for later used. */ ++ /* It will crash if we cancel a timer or set a timer */ ++ /* that we haven't initialize before. */ ++ /* */ + pTimer->Valid = TRUE; + + pTimer->PeriodicType = Repeat; +@@ -2892,7 +2892,7 @@ VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, + + #ifdef RTMP_TIMER_TASK_SUPPORT + pTimer->pAd = pAd; +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + + RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); + } +@@ -3001,10 +3001,10 @@ VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + pTimer->State = TRUE; + + #ifdef RTMP_TIMER_TASK_SUPPORT +- // We need to go-through the TimerQ to findout this timer handler and remove it if +- // it's still waiting for execution. ++ /* We need to go-through the TimerQ to findout this timer handler and remove it if */ ++ /* it's still waiting for execution. */ + RtmpTimerQRemove(pTimer->pAd, pTimer); +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + } else { + DBGPRINT_ERR(("RTMPCancelTimer failed, Timer hasn't been initialize!\n")); + } +@@ -3032,7 +3032,7 @@ VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + */ + VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) + { +- //ULONG data; ++ /*ULONG data; */ + UCHAR HighByte = 0; + UCHAR LowByte; + +@@ -3055,7 +3055,7 @@ VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) + AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); + break; + case LED_HALT: +- LowByte = 0; // Driver sets MAC register and MAC controls LED ++ LowByte = 0; /* Driver sets MAC register and MAC controls LED */ + case LED_RADIO_OFF: + HighByte = 0; + AsicSendCommandToMcu(pAd, 0x50, 0xff, LowByte, HighByte); +@@ -3078,10 +3078,10 @@ VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) + break; + } + +- // +- // Keep LED status for LED SiteSurvey mode. +- // After SiteSurvey, we will set the LED mode to previous status. +- // ++ /* */ ++ /* Keep LED status for LED SiteSurvey mode. */ ++ /* After SiteSurvey, we will set the LED mode to previous status. */ ++ /* */ + if ((Status != LED_ON_SITE_SURVEY) && (Status != LED_POWER_UP)) + pAd->LedStatus = Status; + +@@ -3135,9 +3135,9 @@ VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + else + nLed = 31; + +- // +- // Update Signal Stregth to firmware if changed. +- // ++ /* */ ++ /* Update Signal Stregth to firmware if changed. */ ++ /* */ + if (pAd->LedIndicatorStrength != nLed) { + AsicSendCommandToMcu(pAd, 0x51, 0xff, nLed, + pAd->LedCntl.field.Polarity); +@@ -3166,25 +3166,25 @@ VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + */ + VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) + { +-// WPDMA_GLO_CFG_STRUC GloCfg; +-// ULONG i = 0; ++/* WPDMA_GLO_CFG_STRUC GloCfg; */ ++/* ULONG i = 0; */ + UINT32 rx_filter_flag; + + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n")); + +- // Enable Rx DMA. ++ /* Enable Rx DMA. */ + RT28XXDMAEnable(pAd); + +- // enable RX of MAC block ++ /* enable RX of MAC block */ + if (pAd->OpMode == OPMODE_AP) { + rx_filter_flag = APNORMAL; + +- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); // enable RX of DMA block ++ RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); /* enable RX of DMA block */ + } else { + if (pAd->CommonCfg.PSPXlink) + rx_filter_flag = PSPXLINK; + else +- rx_filter_flag = STANORMAL; // Staion not drop control frame will fail WiFi Certification. ++ rx_filter_flag = STANORMAL; /* Staion not drop control frame will fail WiFi Certification. */ + RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, rx_filter_flag); + } + +@@ -3192,7 +3192,7 @@ VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPEnableRxTx\n")); + } + +-//+++Add by shiang, move from os/linux/rt_main_dev.c ++/*+++Add by shiang, move from os/linux/rt_main_dev.c */ + void CfgInitHook(PRTMP_ADAPTER pAd) + { + pAd->bBroadComHT = TRUE; +@@ -3208,9 +3208,9 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + + #ifdef RTMP_MAC_PCI + { +- // If dirver doesn't wake up firmware here, +- // NICLoadFirmware will hang forever when interface is up again. +- // RT2860 PCI ++ /* If dirver doesn't wake up firmware here, */ ++ /* NICLoadFirmware will hang forever when interface is up again. */ ++ /* RT2860 PCI */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) && + OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) { + AUTO_WAKEUP_STRUC AutoWakeupCfg; +@@ -3221,17 +3221,17 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // reset Adapter flags ++ /* reset Adapter flags */ + RTMP_CLEAR_FLAGS(pAd); + +- // Init BssTab & ChannelInfo tabbles for auto channel select. ++ /* Init BssTab & ChannelInfo tabbles for auto channel select. */ + +- // Allocate BA Reordering memory ++ /* Allocate BA Reordering memory */ + ba_reordering_resource_init(pAd, MAX_REORDERING_MPDU_NUM); + +- // Make sure MAC gets ready. ++ /* Make sure MAC gets ready. */ + index = 0; + do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); +@@ -3256,16 +3256,16 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, AUX_CTRL, MacCsr0); + DBGPRINT(RT_DEBUG_TRACE, ("AUX_CTRL = 0x%x\n", MacCsr0)); + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + +- // To fix driver disable/enable hang issue when radio off ++ /* To fix driver disable/enable hang issue when radio off */ + RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x2); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // Disable DMA ++ /* Disable DMA */ + RT28XXDMADisable(pAd); + +- // Load 8051 firmware ++ /* Load 8051 firmware */ + Status = NICLoadFirmware(pAd); + if (Status != NDIS_STATUS_SUCCESS) { + DBGPRINT_ERR(("NICLoadFirmware failed, Status[=0x%08x]\n", +@@ -3275,13 +3275,13 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + + NICLoadRateSwitchingParams(pAd); + +- // Disable interrupts here which is as soon as possible +- // This statement should never be true. We might consider to remove it later ++ /* Disable interrupts here which is as soon as possible */ ++ /* This statement should never be true. We might consider to remove it later */ + #ifdef RTMP_MAC_PCI + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + Status = RTMPAllocTxRxRingMemory(pAd); + if (Status != NDIS_STATUS_SUCCESS) { +@@ -3292,8 +3292,8 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + +- // initialize MLME +- // ++ /* initialize MLME */ ++ /* */ + + Status = RtmpMgmtTaskInit(pAd); + if (Status != NDIS_STATUS_SUCCESS) +@@ -3304,15 +3304,15 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + DBGPRINT_ERR(("MlmeInit failed, Status[=0x%08x]\n", Status)); + goto err2; + } +- // Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default +- // ++ /* Initialize pAd->StaCfg, pAd->ApCfg, pAd->CommonCfg to manufacture default */ ++ /* */ + UserCfgInit(pAd); + Status = RtmpNetTaskInit(pAd); + if (Status != NDIS_STATUS_SUCCESS) + goto err3; + +-// COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); +-// pAd->bForcePrintTX = TRUE; ++/* COPY_MAC_ADDR(pAd->ApCfg.MBSSID[apidx].Bssid, netif->hwaddr); */ ++/* pAd->bForcePrintTX = TRUE; */ + + CfgInitHook(pAd); + +@@ -3321,9 +3321,9 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + MeasureReqTabInit(pAd); + TpcReqTabInit(pAd); + +- // +- // Init the hardware, we need to init asic before read registry, otherwise mac register will be reset +- // ++ /* */ ++ /* Init the hardware, we need to init asic before read registry, otherwise mac register will be reset */ ++ /* */ + Status = NICInitializeAdapter(pAd, TRUE); + if (Status != NDIS_STATUS_SUCCESS) { + DBGPRINT_ERR(("NICInitializeAdapter failed, Status[=0x%08x]\n", +@@ -3341,10 +3341,10 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + pAd->CommonCfg.NumOfBulkInIRP = RX_RING_SIZE; + else + pAd->CommonCfg.NumOfBulkInIRP = 1; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- //Init Ba Capability parameters. +-// RT28XX_BA_INIT(pAd); ++ /*Init Ba Capability parameters. */ ++/* RT28XX_BA_INIT(pAd); */ + pAd->CommonCfg.DesiredHtPhy.MpduDensity = + (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; + pAd->CommonCfg.DesiredHtPhy.AmsduEnable = +@@ -3353,7 +3353,7 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; + pAd->CommonCfg.DesiredHtPhy.MimoPs = + (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; +- // UPdata to HT IE ++ /* UPdata to HT IE */ + pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = + (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; + pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = +@@ -3361,29 +3361,29 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = + (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; + +- // after reading Registry, we now know if in AP mode or STA mode ++ /* after reading Registry, we now know if in AP mode or STA mode */ + +- // Load 8051 firmware; crash when FW image not existent +- // Status = NICLoadFirmware(pAd); +- // if (Status != NDIS_STATUS_SUCCESS) +- // break; ++ /* Load 8051 firmware; crash when FW image not existent */ ++ /* Status = NICLoadFirmware(pAd); */ ++ /* if (Status != NDIS_STATUS_SUCCESS) */ ++ /* break; */ + + DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + +- // We should read EEPROM for all cases. rt2860b ++ /* We should read EEPROM for all cases. rt2860b */ + NICReadEEPROMParameters(pAd, (PUCHAR) pDefaultMac); + + DBGPRINT(RT_DEBUG_OFF, ("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + +- NICInitAsicFromEEPROM(pAd); //rt2860b ++ NICInitAsicFromEEPROM(pAd); /*rt2860b */ + +- // Set PHY to appropriate mode ++ /* Set PHY to appropriate mode */ + TmpPhy = pAd->CommonCfg.PhyMode; + pAd->CommonCfg.PhyMode = 0xff; + RTMPSetPhyMode(pAd, TmpPhy); + SetCommonHT(pAd); + +- // No valid channels. ++ /* No valid channels. */ + if (pAd->ChannelListNum == 0) { + DBGPRINT(RT_DEBUG_ERROR, + ("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n")); +@@ -3399,35 +3399,35 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + pAd->CommonCfg.HtCapability.MCSSet[4])); + + #ifdef RTMP_RF_RW_SUPPORT +- //Init RT30xx RFRegisters after read RFIC type from EEPROM ++ /*Init RT30xx RFRegisters after read RFIC type from EEPROM */ + NICInitRFRegisters(pAd); +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + +-// APInitialize(pAd); ++/* APInitialize(pAd); */ + +- // +- // Initialize RF register to default value +- // ++ /* */ ++ /* Initialize RF register to default value */ ++ /* */ + AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.Channel); + +- // 8051 firmware require the signal during booting time. +- //2008/11/28:KH marked the following codes to patch Frequency offset bug +- //AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); ++ /* 8051 firmware require the signal during booting time. */ ++ /*2008/11/28:KH marked the following codes to patch Frequency offset bug */ ++ /*AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00); */ + + if (pAd && (Status != NDIS_STATUS_SUCCESS)) { +- // +- // Undo everything if it failed +- // ++ /* */ ++ /* Undo everything if it failed */ ++ /* */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { +-// NdisMDeregisterInterrupt(&pAd->Interrupt); ++/* NdisMDeregisterInterrupt(&pAd->Interrupt); */ + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE); + } +-// RTMPFreeAdapter(pAd); // we will free it in disconnect() ++/* RTMPFreeAdapter(pAd); // we will free it in disconnect() */ + } else if (pAd) { +- // Microsoft HCT require driver send a disconnect event after driver initialization. ++ /* Microsoft HCT require driver send a disconnect event after driver initialization. */ + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +-// pAd->IndicateMediaState = NdisMediaStateDisconnected; ++/* pAd->IndicateMediaState = NdisMediaStateDisconnected; */ + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE); + + DBGPRINT(RT_DEBUG_TRACE, +@@ -3437,18 +3437,18 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); + +- // +- // Support multiple BulkIn IRP, +- // the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1. +- // ++ /* */ ++ /* Support multiple BulkIn IRP, */ ++ /* the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1. */ ++ /* */ + for (index = 0; index < pAd->CommonCfg.NumOfBulkInIRP; index++) { + RTUSBBulkReceive(pAd); + DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n")); + } +-#endif // RTMP_MAC_USB // +- } // end of else ++#endif /* RTMP_MAC_USB // */ ++ } /* end of else */ + +- // Set up the Mac address ++ /* Set up the Mac address */ + RtmpOSNetDevAddrSet(pAd->net_dev, &pAd->CurrentAddress[0]); + + DBGPRINT_S(Status, ("<==== rt28xx_init, Status=%x\n", Status)); +@@ -3462,19 +3462,19 @@ err2: + RTMPFreeTxRxRingMemory(pAd); + err1: + +- os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool ++ os_free_mem(pAd, pAd->mpdu_blk_pool.mem); /* free BA pool */ + +- // shall not set priv to NULL here because the priv didn't been free yet. +- //net_dev->ml_priv = 0; ++ /* shall not set priv to NULL here because the priv didn't been free yet. */ ++ /*net_dev->ml_priv = 0; */ + #ifdef ST + err0: +-#endif // ST // ++#endif /* ST // */ + + DBGPRINT(RT_DEBUG_ERROR, ("!!! rt28xx Initialized fail !!!\n")); + return FALSE; + } + +-//---Add by shiang, move from os/linux/rt_main_dev.c ++/*---Add by shiang, move from os/linux/rt_main_dev.c */ + + static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) + { +@@ -3494,13 +3494,13 @@ static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) + pChipOps->eraseFirmware = RtmpAsicEraseFirmware; + pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; + break; +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + case RTMP_DEV_INF_USB: + pChipOps->loadFirmware = RtmpAsicLoadFirmware; + pChipOps->sendCommandToMcu = RtmpAsicSendCommandToMcu; + break; +-#endif // RTMP_USB_SUPPORT // ++#endif /* RTMP_USB_SUPPORT // */ + default: + break; + } +@@ -3510,9 +3510,9 @@ static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) + + INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + { +- //VOID *handle; ++ /*VOID *handle; */ + +- // Assign the interface type. We need use it when do register/EEPROM access. ++ /* Assign the interface type. We need use it when do register/EEPROM access. */ + pAd->infType = infType; + + pAd->OpMode = OPMODE_STA; +@@ -3528,7 +3528,7 @@ INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + ("Allocate vendor request temp buffer failed!\n")); + return FALSE; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + RtmpChipOpsRegister(pAd, infType); + +@@ -3543,7 +3543,7 @@ BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) + return TRUE; + } + +-// not yet support MBSS ++/* not yet support MBSS */ + PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID) + { + PNET_DEV dev_p = NULL; +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index d962f02..09d46f7 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -48,16 +48,14 @@ + + #include + +-//#define BIN_IN_FILE /* use *.bin firmware */ +- + #ifdef RTMP_MAC_USB +-// +-// RT2870 Firmware Spec only used 1 oct for version expression +-// ++/* */ ++/* RT2870 Firmware Spec only used 1 oct for version expression */ ++/* */ + #define FIRMWARE_MINOR_VERSION 7 +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +-// New 8k byte firmware size for RT3071/RT3072 ++/* New 8k byte firmware size for RT3071/RT3072 */ + #define FIRMWAREIMAGE_MAX_LENGTH 0x2000 + #define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR)) + #define FIRMWARE_MAJOR_VERSION 0 +@@ -67,7 +65,7 @@ + + #ifdef RTMP_MAC_PCI + #define FIRMWARE_MINOR_VERSION 2 +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + /* + ======================================================================== +@@ -120,7 +118,7 @@ NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + UINT32 Version = (pAd->MACVersion >> 16); + #endif + +- // New 8k byte firmware size for RT3071/RT3072 ++ /* New 8k byte firmware size for RT3071/RT3072 */ + { + #ifdef RTMP_MAC_PCI + if (IS_RT3090(pAd) || IS_RT3390(pAd)) { +@@ -130,24 +128,24 @@ NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + pFirmwareImage = FirmwareImage_2860; + FileLength = FIRMWAREIMAGE_MAX_LENGTH; + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + /* the firmware image consists of two parts */ + if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) { /* use the second part */ +- //printk("KH:Use New Version,part2\n"); ++ /*printk("KH:Use New Version,part2\n"); */ + pFirmwareImage = + (PUCHAR) & + FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; + FileLength = FIRMWAREIMAGEV2_LENGTH; + } else { +- //printk("KH:Use New Version,part1\n"); ++ /*printk("KH:Use New Version,part1\n"); */ + if (Version == 0x3070) + pFirmwareImage = FirmwareImage_3070; + else + pFirmwareImage = FirmwareImage_2870; + FileLength = FIRMWAREIMAGEV1_LENGTH; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } + + RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); +@@ -183,8 +181,8 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + ULONG i = 0; + + #ifdef PCIE_PS_SUPPORT +- // 3090F power solution 3 has hw limitation that needs to ban all mcu command +- // when firmware is in radio state. For other chip doesn't have this limitation. ++ /* 3090F power solution 3 has hw limitation that needs to ban all mcu command */ ++ /* when firmware is in radio state. For other chip doesn't have this limitation. */ + if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) +@@ -228,7 +226,7 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + return FALSE; + } + +- H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.Owner = 1; /* pass ownership to MCU */ + H2MMailbox.field.CmdToken = Token; + H2MMailbox.field.HighByte = Arg1; + H2MMailbox.field.LowByte = Arg0; +@@ -239,7 +237,7 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + RTMP_IO_FORCE_WRITE32(pAd, HOST_CMD_CSR, H2MCmd.word); + + } else +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + { + do { + RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word); +@@ -251,16 +249,16 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + + if (i > 100) { + #ifdef RTMP_MAC_PCI +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + { + DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); + } + return FALSE; + } + #ifdef RTMP_MAC_PCI +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- H2MMailbox.field.Owner = 1; // pass ownership to MCU ++ H2MMailbox.field.Owner = 1; /* pass ownership to MCU */ + H2MMailbox.field.CmdToken = Token; + H2MMailbox.field.HighByte = Arg1; + H2MMailbox.field.LowByte = Arg0; +@@ -274,20 +272,20 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + } + } + #ifdef PCIE_PS_SUPPORT +- // 3090 MCU Wakeup command needs more time to be stable. +- // Before stable, don't issue other MCU command to prevent from firmware error. ++ /* 3090 MCU Wakeup command needs more time to be stable. */ ++ /* Before stable, don't issue other MCU command to prevent from firmware error. */ + if (((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) && IS_VERSION_AFTER_F(pAd) + && (pAd->StaCfg.PSControl.field.rt30xxPowerMode == 3) + && (pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) + && (Command == WAKE_MCU_CMD)) { + RTMPusecDelay(2000); +- //Put this is after RF programming. +- //NdisAcquireSpinLock(&pAd->McuCmdLock); +- //pAd->brt30xxBanMcuCmd = FALSE; +- //NdisReleaseSpinLock(&pAd->McuCmdLock); ++ /*Put this is after RF programming. */ ++ /*NdisAcquireSpinLock(&pAd->McuCmdLock); */ ++ /*pAd->brt30xxBanMcuCmd = FALSE; */ ++ /*NdisReleaseSpinLock(&pAd->McuCmdLock); */ + } +-#endif // PCIE_PS_SUPPORT // ++#endif /* PCIE_PS_SUPPORT // */ + + return TRUE; + } +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +index 9abfe63..d29e6e8 100644 +--- a/drivers/staging/rt2860/common/rtmp_timer.c ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -41,13 +41,13 @@ + #include "../rt_config.h" + + BUILD_TIMER_FUNCTION(MlmePeriodicExec); +-//BUILD_TIMER_FUNCTION(MlmeRssiReportExec); ++/*BUILD_TIMER_FUNCTION(MlmeRssiReportExec); */ + BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout); + BUILD_TIMER_FUNCTION(APSDPeriodicExec); + BUILD_TIMER_FUNCTION(AsicRfTuningExec); + #ifdef RTMP_MAC_USB + BUILD_TIMER_FUNCTION(BeaconUpdateExec); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + BUILD_TIMER_FUNCTION(BeaconTimeout); + BUILD_TIMER_FUNCTION(ScanTimeout); +@@ -61,10 +61,10 @@ BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc); + #ifdef RTMP_MAC_PCI + BUILD_TIMER_FUNCTION(PsPollWakeExec); + BUILD_TIMER_FUNCTION(RadioOnExec); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + BUILD_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #if defined(AP_LED) || defined(STA_LED) + extern void LedCtrlMain(IN PVOID SystemSpecific1, +@@ -97,19 +97,19 @@ static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) + if (pAd->TimerQ.status == RTMP_TASK_STAT_STOPED) + break; + +- // event happened. ++ /* event happened. */ + while (pAd->TimerQ.pQHead) { + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlag); + pEntry = pAd->TimerQ.pQHead; + if (pEntry) { + pTimer = pEntry->pRaTimer; + +- // update pQHead ++ /* update pQHead */ + pAd->TimerQ.pQHead = pEntry->pNext; + if (pEntry == pAd->TimerQ.pQTail) + pAd->TimerQ.pQTail = NULL; + +- // return this queue entry to timerQFreeList. ++ /* return this queue entry to timerQFreeList. */ + pEntry->pNext = pAd->TimerQ.pQPollFreeList; + pAd->TimerQ.pQPollFreeList = pEntry; + } +@@ -226,7 +226,7 @@ BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, IN RALINK_TIMER_STRUCT * pTimer) + pNode = pNode->pNext; + } + +- // Now move it to freeList queue. ++ /* Now move it to freeList queue. */ + if (pNode) { + if (pNode == pAd->TimerQ.pQHead) + pAd->TimerQ.pQHead = pNode->pNext; +@@ -235,7 +235,7 @@ BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, IN RALINK_TIMER_STRUCT * pTimer) + if (pPrev != NULL) + pPrev->pNext = pNode->pNext; + +- // return this queue entry to timerQFreeList. ++ /* return this queue entry to timerQFreeList. */ + pNode->pNext = pAd->TimerQ.pQPollFreeList; + pAd->TimerQ.pQPollFreeList = pNode; + } +@@ -254,7 +254,7 @@ void RtmpTimerQExit(RTMP_ADAPTER * pAd) + while (pAd->TimerQ.pQHead) { + pTimerQ = pAd->TimerQ.pQHead; + pAd->TimerQ.pQHead = pTimerQ->pNext; +- // remove the timeQ ++ /* remove the timeQ */ + } + pAd->TimerQ.pQPollFreeList = NULL; + os_free_mem(pAd, pAd->TimerQ.pTimerQPoll); +@@ -299,4 +299,4 @@ void RtmpTimerQInit(RTMP_ADAPTER * pAd) + RTMP_INT_UNLOCK(&pAd->TimerQLock, irqFlags); + } + } +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ +diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c +index 9c2df55..2cc73de 100644 +--- a/drivers/staging/rt2860/common/spectrum.c ++++ b/drivers/staging/rt2860/common/spectrum.c +@@ -45,7 +45,7 @@ DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = { + {0, {0, 0, {0} + } + } +- , // Invlid entry ++ , /* Invlid entry */ + {1, {4, 16, {36, 40, 44, 48} + } + } +@@ -103,7 +103,7 @@ DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = { + {0, {0, 0, {0} + } + } +- , // Invalid entry ++ , /* Invalid entry */ + {1, {4, 20, {36, 40, 44, 48} + } + } +@@ -129,7 +129,7 @@ DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = { + {0, {0, 0, {0} + } + } +- , // Invalid entry ++ , /* Invalid entry */ + {1, {4, 22, {34, 38, 42, 46} + } + } +@@ -489,7 +489,7 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + PMEASURE_REQ_ENTRY pProbeEntry = + pTab->Hash[HashIdx]; + +- // update Hash list ++ /* update Hash list */ + do { + if (pProbeEntry == pEntry) { + if (pPrevEntry == NULL) { +@@ -529,7 +529,7 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + ("%s: pMeasureReqTab tab full.\n", __func__)); + } + +- // add this Neighbor entry into HASH table ++ /* add this Neighbor entry into HASH table */ + if (pEntry) { + HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken); + if (pTab->Hash[HashIdx] == NULL) { +@@ -558,7 +558,7 @@ VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + ("%s: pMeasureReqTab doesn't exist.\n", __func__)); + return; + } +- // if empty, return ++ /* if empty, return */ + if (pTab->Size == 0) { + DBGPRINT(RT_DEBUG_ERROR, ("pMeasureReqTab empty.\n")); + return; +@@ -571,7 +571,7 @@ VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +- // update Hash list ++ /* update Hash list */ + do { + if (pProbeEntry == pEntry) { + if (pPrevEntry == NULL) { +@@ -687,7 +687,7 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + PTPC_REQ_ENTRY pProbeEntry = + pTab->Hash[HashIdx]; + +- // update Hash list ++ /* update Hash list */ + do { + if (pProbeEntry == pEntry) { + if (pPrevEntry == NULL) { +@@ -726,7 +726,7 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + ("%s: pTpcReqTab tab full.\n", __func__)); + } + +- // add this Neighbor entry into HASH table ++ /* add this Neighbor entry into HASH table */ + if (pEntry) { + HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(DialogToken); + if (pTab->Hash[HashIdx] == NULL) { +@@ -755,7 +755,7 @@ static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + ("%s: pTpcReqTab doesn't exist.\n", __func__)); + return; + } +- // if empty, return ++ /* if empty, return */ + if (pTab->Size == 0) { + DBGPRINT(RT_DEBUG_ERROR, ("pTpcReqTab empty.\n")); + return; +@@ -768,7 +768,7 @@ static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +- // update Hash list ++ /* update Hash list */ + do { + if (pProbeEntry == pEntry) { + if (pPrevEntry == NULL) { +@@ -804,7 +804,7 @@ static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + */ + static UINT64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) + { +- // get current time stamp. ++ /* get current time stamp. */ + return 0; + } + +@@ -1121,7 +1121,7 @@ VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, + Action); + +- // fill Dialog Token ++ /* fill Dialog Token */ + InsertDialogToken(pAd, (pOutBuffer + *pFrameLen), pFrameLen, + MeasureToken); + +@@ -1132,7 +1132,7 @@ VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + + *pFrameLen += TempLen; + } +- // prepare Measurement IE. ++ /* prepare Measurement IE. */ + NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO)); + MeasureReqIE.Token = MeasureToken; + MeasureReqIE.ReqMode.word = MeasureReqMode; +@@ -1169,11 +1169,11 @@ VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + HEADER_802_11 ActHdr; + MEASURE_REPORT_INFO MeasureRepIE; + +- // build action frame header. ++ /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -1185,10 +1185,10 @@ VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_MRP); + +- // fill Dialog Token ++ /* fill Dialog Token */ + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); + +- // prepare Measurement IE. ++ /* prepare Measurement IE. */ + NdisZeroMemory(&MeasureRepIE, sizeof(MEASURE_REPORT_INFO)); + MeasureRepIE.Token = MeasureToken; + MeasureRepIE.ReportMode = MeasureReqMode; +@@ -1222,11 +1222,11 @@ VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) + + HEADER_802_11 ActHdr; + +- // build action frame header. ++ /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -1238,10 +1238,10 @@ VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_TPCRQ); + +- // fill Dialog Token ++ /* fill Dialog Token */ + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); + +- // Insert TPC Request IE. ++ /* Insert TPC Request IE. */ + InsertTpcReqIE(pAd, (pOutBuffer + FrameLen), &FrameLen); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); +@@ -1272,11 +1272,11 @@ VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + + HEADER_802_11 ActHdr; + +- // build action frame header. ++ /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -1288,10 +1288,10 @@ VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_TPCRP); + +- // fill Dialog Token ++ /* fill Dialog Token */ + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); + +- // Insert TPC Request IE. ++ /* Insert TPC Request IE. */ + InsertTpcReportIE(pAd, (pOutBuffer + FrameLen), &FrameLen, TxPwr, + LinkMargin); + +@@ -1324,11 +1324,11 @@ VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + + HEADER_802_11 ActHdr; + +- // build action frame header. ++ /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -1355,18 +1355,18 @@ static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, IN UINT8 Channel) + INT i; + + do { +- // check DFS procedure is running. +- // make sure DFS procedure won't start twice. ++ /* check DFS procedure is running. */ ++ /* make sure DFS procedure won't start twice. */ + if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) { + Result = FALSE; + break; + } +- // check the new channel carried from Channel Switch Announcemnet is valid. ++ /* check the new channel carried from Channel Switch Announcemnet is valid. */ + for (i = 0; i < pAd->ChannelListNum; i++) { + if ((Channel == pAd->ChannelList[i].Channel) + && (pAd->ChannelList[i].RemainingTimeForUse == 0)) { +- // found radar signal in the channel. the channel can't use at least for 30 minutes. +- pAd->ChannelList[i].RemainingTimeForUse = 1800; //30 min = 1800 sec ++ /* found radar signal in the channel. the channel can't use at least for 30 minutes. */ ++ pAd->ChannelList[i].RemainingTimeForUse = 1800; /*30 min = 1800 sec */ + Result = TRUE; + break; + } +@@ -1385,7 +1385,7 @@ VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, + static VOID StartDFSProcedure(IN PRTMP_ADAPTER pAd, + IN UCHAR Channel, IN UINT8 ChSwMode) + { +- // start DFS procedure ++ /* start DFS procedure */ + pAd->CommonCfg.Channel = Channel; + + N_ChannelCheck(pAd); +@@ -1425,10 +1425,10 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; + +- // skip 802.11 header. ++ /* skip 802.11 header. */ + MsgLen -= sizeof(HEADER_802_11); + +- // skip category and action code. ++ /* skip category and action code. */ + pFramePtr += 2; + MsgLen -= 2; + +@@ -1487,10 +1487,10 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + UINT64 MeasureStartTime; + UINT16 MeasureDuration; + +- // skip 802.11 header. ++ /* skip 802.11 header. */ + MsgLen -= sizeof(HEADER_802_11); + +- // skip category and action code. ++ /* skip category and action code. */ + pFramePtr += 2; + MsgLen -= 2; + +@@ -1580,10 +1580,10 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + PEID_STRUCT eid_ptr; + PUCHAR ptr; + +- // skip 802.11 header. ++ /* skip 802.11 header. */ + MsgLen -= sizeof(HEADER_802_11); + +- // skip category and action code. ++ /* skip category and action code. */ + pFramePtr += 2; + MsgLen -= 2; + +@@ -1677,7 +1677,7 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + + MsgLen -= sizeof(HEADER_802_11); + +- // skip category and action code. ++ /* skip category and action code. */ + pFramePtr += 2; + MsgLen -= 2; + +@@ -1732,7 +1732,7 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + + MsgLen -= sizeof(HEADER_802_11); + +- // skip category and action code. ++ /* skip category and action code. */ + pFramePtr += 2; + MsgLen -= 2; + +@@ -1808,16 +1808,16 @@ static VOID PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) + && (Channel != NewChannel)) { +- // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). +- // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. ++ /* Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). */ ++ /* In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. */ + AsicSwitchChannel(pAd, 1, FALSE); + AsicLockChannel(pAd, 1); + LinkDown(pAd, FALSE); + MlmeQueueInit(&pAd->Mlme.Queue); + BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc ++ RTMPusecDelay(1000000); /* use delay to prevent STA do reassoc */ + +- // channel sanity check ++ /* channel sanity check */ + for (index = 0; index < pAd->ChannelListNum; index++) { + if (pAd->ChannelList[index].Channel == + NewChannel) { +@@ -1897,8 +1897,8 @@ static VOID PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + UINT8 DialogToken; + PUINT8 pMeasureReportInfo; + +-// if (pAd->CommonCfg.bIEEE80211H != TRUE) +-// return; ++/* if (pAd->CommonCfg.bIEEE80211H != TRUE) */ ++/* return; */ + + if ((pMeasureReportInfo = + kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL) { +@@ -1916,8 +1916,8 @@ static VOID PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + do { + PMEASURE_REQ_ENTRY pEntry = NULL; + +- // Not a autonomous measure report. +- // check the dialog token field. drop it if the dialog token doesn't match. ++ /* Not a autonomous measure report. */ ++ /* check the dialog token field. drop it if the dialog token doesn't match. */ + if ((DialogToken != 0) + && ((pEntry = MeasureReqLookUp(pAd, DialogToken)) == + NULL)) +@@ -1974,18 +1974,18 @@ static VOID PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + UINT8 LinkMargin = 0; + CHAR RealRssi; + +- // link margin: Ratio of the received signal power to the minimum desired by the station (STA). The +- // STA may incorporate rate information and channel conditions, including interference, into its computation +- // of link margin. ++ /* link margin: Ratio of the received signal power to the minimum desired by the station (STA). The */ ++ /* STA may incorporate rate information and channel conditions, including interference, into its computation */ ++ /* of link margin. */ + + RealRssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), + ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), + ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); + +- // skip Category and action code. ++ /* skip Category and action code. */ + pFramePtr += 2; + +- // Dialog token. ++ /* Dialog token. */ + NdisMoveMemory(&DialogToken, pFramePtr, 1); + + LinkMargin = (RealRssi / MIN_RCV_PWR); +@@ -2050,8 +2050,8 @@ VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + switch (Action) { + case SPEC_MRQ: +- // current rt2860 unable do such measure specified in Measurement Request. +- // reject all measurement request. ++ /* current rt2860 unable do such measure specified in Measurement Request. */ ++ /* reject all measurement request. */ + PeerMeasureReqAction(pAd, Elem); + break; + +@@ -2104,7 +2104,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + NDIS_STATUS NStatus; + ULONG FrameLen; + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -2114,11 +2114,11 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + ArgIdx = 1; + while ((thisChar = strsep((char **)&arg, "-")) != NULL) { + switch (ArgIdx) { +- case 1: // Aid. ++ case 1: /* Aid. */ + Aid = (UINT8) simple_strtol(thisChar, 0, 16); + break; + +- case 2: // Measurement Request Type. ++ case 2: /* Measurement Request Type. */ + MeasureReqType = simple_strtol(thisChar, 0, 16); + if (MeasureReqType > 3) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -2128,7 +2128,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + } + break; + +- case 3: // Measurement channel. ++ case 3: /* Measurement channel. */ + MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); + break; + } +@@ -2149,7 +2149,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + + MeasureReqInsert(pAd, MeasureReqToken); + +- // build action frame header. ++ /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, + pAd->MacTab.Content[Aid].Addr, pAd->CurrentAddress); + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch b/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch new file mode 100644 index 000000000..40d80bbda --- /dev/null +++ b/debian/patches/features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch @@ -0,0 +1,5809 @@ +From 05bf57c2de80a8c11de7eca3465040fe85489291 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:15 -0800 +Subject: [PATCH 24/42] Staging: rt28x0: fix comments in sta/*.c files + +commit 8281958ba7c8f4cb8695113a221e1f508f4feea6 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/sta/assoc.c | 246 +++++----- + drivers/staging/rt2860/sta/auth.c | 30 +- + drivers/staging/rt2860/sta/auth_rsp.c | 8 +- + drivers/staging/rt2860/sta/connect.c | 694 ++++++++++++++-------------- + drivers/staging/rt2860/sta/rtmp_data.c | 786 ++++++++++++++++---------------- + drivers/staging/rt2860/sta/sanity.c | 66 ++-- + drivers/staging/rt2860/sta/sync.c | 336 +++++++------- + drivers/staging/rt2860/sta/wpa.c | 92 ++-- + 8 files changed, 1129 insertions(+), 1129 deletions(-) + +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index e977416..c5a1738 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -37,27 +37,27 @@ + #include "../rt_config.h" + + UCHAR CipherWpaTemplate[] = { +- 0xdd, // WPA IE +- 0x16, // Length +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x01 // authentication ++ 0xdd, /* WPA IE */ ++ 0x16, /* Length */ ++ 0x00, 0x50, 0xf2, 0x01, /* oui */ ++ 0x01, 0x00, /* Version */ ++ 0x00, 0x50, 0xf2, 0x02, /* Multicast */ ++ 0x01, 0x00, /* Number of unicast */ ++ 0x00, 0x50, 0xf2, 0x02, /* unicast */ ++ 0x01, 0x00, /* number of authentication method */ ++ 0x00, 0x50, 0xf2, 0x01 /* authentication */ + }; + + UCHAR CipherWpa2Template[] = { +- 0x30, // RSN IE +- 0x14, // Length +- 0x01, 0x00, // Version +- 0x00, 0x0f, 0xac, 0x02, // group cipher, TKIP +- 0x01, 0x00, // number of pairwise +- 0x00, 0x0f, 0xac, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x0f, 0xac, 0x02, // authentication +- 0x00, 0x00, // RSN capability ++ 0x30, /* RSN IE */ ++ 0x14, /* Length */ ++ 0x01, 0x00, /* Version */ ++ 0x00, 0x0f, 0xac, 0x02, /* group cipher, TKIP */ ++ 0x01, 0x00, /* number of pairwise */ ++ 0x00, 0x0f, 0xac, 0x02, /* unicast */ ++ 0x01, 0x00, /* number of authentication method */ ++ 0x00, 0x0f, 0xac, 0x02, /* authentication */ ++ 0x00, 0x00, /* RSN capability */ + }; + + UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; +@@ -80,7 +80,7 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) Drop, ASSOC_IDLE, + ASSOC_MACHINE_BASE); + +- // first column ++ /* first column */ + StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_ASSOC_REQ, + (STATE_MACHINE_FUNC) MlmeAssocReqAction); + StateMachineSetAction(S, ASSOC_IDLE, MT2_MLME_REASSOC_REQ, +@@ -90,7 +90,7 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(S, ASSOC_IDLE, MT2_PEER_DISASSOC_REQ, + (STATE_MACHINE_FUNC) PeerDisassocAction); + +- // second column ++ /* second column */ + StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); + StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, +@@ -102,16 +102,16 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) PeerDisassocAction); + StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, + (STATE_MACHINE_FUNC) PeerAssocRspAction); +- // +- // Patch 3Com AP MOde:3CRWE454G72 +- // We send Assoc request frame to this AP, it always send Reassoc Rsp not Associate Rsp. +- // ++ /* */ ++ /* Patch 3Com AP MOde:3CRWE454G72 */ ++ /* We send Assoc request frame to this AP, it always send Reassoc Rsp not Associate Rsp. */ ++ /* */ + StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, + (STATE_MACHINE_FUNC) PeerAssocRspAction); + StateMachineSetAction(S, ASSOC_WAIT_RSP, MT2_ASSOC_TIMEOUT, + (STATE_MACHINE_FUNC) AssocTimeoutAction); + +- // third column ++ /* third column */ + StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); + StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, +@@ -123,15 +123,15 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) PeerDisassocAction); + StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_REASSOC_RSP, + (STATE_MACHINE_FUNC) PeerReassocRspAction); +- // +- // Patch, AP doesn't send Reassociate Rsp frame to Station. +- // ++ /* */ ++ /* Patch, AP doesn't send Reassociate Rsp frame to Station. */ ++ /* */ + StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_PEER_ASSOC_RSP, + (STATE_MACHINE_FUNC) PeerReassocRspAction); + StateMachineSetAction(S, REASSOC_WAIT_RSP, MT2_REASSOC_TIMEOUT, + (STATE_MACHINE_FUNC) ReassocTimeoutAction); + +- // fourth column ++ /* fourth column */ + StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_ASSOC_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenAssoc); + StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_MLME_REASSOC_REQ, +@@ -144,7 +144,7 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(S, DISASSOC_WAIT_RSP, MT2_DISASSOC_TIMEOUT, + (STATE_MACHINE_FUNC) DisassocTimeoutAction); + +- // initialize the timer ++ /* initialize the timer */ + RTMPInitTimer(pAd, &pAd->MlmeAux.AssocTimer, + GET_TIMER_FUNCTION(AssocTimeout), pAd, FALSE); + RTMPInitTimer(pAd, &pAd->MlmeAux.ReassocTimer, +@@ -171,8 +171,8 @@ VOID AssocTimeout(IN PVOID SystemSpecific1, + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -199,8 +199,8 @@ VOID ReassocTimeout(IN PVOID SystemSpecific1, + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -227,8 +227,8 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1, + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; +@@ -277,7 +277,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + USHORT VarIesOffset; + USHORT Status; + +- // Block all authentication request durning WPA block period ++ /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - Block Assoc request durning WPA block period!\n")); +@@ -286,14 +286,14 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, + &Status); + } +- // check sanity first ++ /* check sanity first */ + else if (MlmeAssocReqSanity + (pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, + &Timeout, &ListenIntv)) { + RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); + +- // Get an unused nonpaged memory ++ /* Get an unused nonpaged memory */ + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -304,10 +304,10 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MT2_ASSOC_CONF, 2, &Status); + return; + } +- // Add by James 03/06/27 ++ /* Add by James 03/06/27 */ + pAd->StaCfg.AssocInfo.Length = + sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); +- // Association don't need to report MAC address ++ /* Association don't need to report MAC address */ + pAd->StaCfg.AssocInfo.AvailableRequestFixedIEs = + NDIS_802_11_AI_REQFI_CAPABILITIES | + NDIS_802_11_AI_REQFI_LISTENINTERVAL; +@@ -315,13 +315,13 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CapabilityInfo; + pAd->StaCfg.AssocInfo.RequestFixedIEs.ListenInterval = + ListenIntv; +- // Only reassociate need this +- //COPY_MAC_ADDR(pAd->StaCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, ApAddr); ++ /* Only reassociate need this */ ++ /*COPY_MAC_ADDR(pAd->StaCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, ApAddr); */ + pAd->StaCfg.AssocInfo.OffsetRequestIEs = + sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); + + NdisZeroMemory(pAd->StaCfg.ReqVarIEs, MAX_VIE_LEN); +- // First add SSID ++ /* First add SSID */ + VarIesOffset = 0; + NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SsidIe, + 1); +@@ -333,7 +333,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + VarIesOffset += pAd->MlmeAux.SsidLen; + +- // Second add Supported rates ++ /* Second add Supported rates */ + NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &SupRateIe, + 1); + VarIesOffset += 1; +@@ -343,7 +343,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, + pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen); + VarIesOffset += pAd->MlmeAux.SupRateLen; +- // End Add by James ++ /* End Add by James */ + + if ((pAd->CommonCfg.Channel > 14) && + (pAd->CommonCfg.bIEEE80211H == TRUE)) +@@ -353,7 +353,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MgtMacHeaderInit(pAd, &AssocHdr, SUBTYPE_ASSOC_REQ, 0, ApAddr, + ApAddr); + +- // Build basic frame first ++ /* Build basic frame first */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(HEADER_802_11), &AssocHdr, + 2, &CapabilityInfo, +@@ -374,7 +374,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.ExtRate, END_OF_ARGS); + FrameLen += tmp; + } +- // HT ++ /* HT */ + if ((pAd->MlmeAux.HtCapabilityLen > 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { + ULONG TmpLen; +@@ -398,14 +398,14 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + FrameLen += TmpLen; + } +- // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION +- // Case I: (Aggregation + Piggy-Back) +- // 1. user enable aggregation, AND +- // 2. Mac support piggy-back +- // 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON +- // Case II: (Aggregation) +- // 1. user enable aggregation, AND +- // 2. AP annouces it's AGGREGATION-capable in BEACON ++ /* add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION */ ++ /* Case I: (Aggregation + Piggy-Back) */ ++ /* 1. user enable aggregation, AND */ ++ /* 2. Mac support piggy-back */ ++ /* 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON */ ++ /* Case II: (Aggregation) */ ++ /* 1. user enable aggregation, AND */ ++ /* 2. AP annouces it's AGGREGATION-capable in BEACON */ + if (pAd->CommonCfg.bAggregationCapable) { + if ((pAd->CommonCfg.bPiggyBackCapable) + && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { +@@ -452,20 +452,20 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->CommonCfg.MaxSPLength; + WmeIe[8] |= *(PUCHAR) & QosInfo; + } else { +- // The Parameter Set Count is set to ¡§0¡¨ in the association request frames +- // WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); ++ /* The Parameter Set Count is set to ¡§0¡¨ in the association request frames */ ++ /* WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); */ + } + + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, + 9, &WmeIe[0], END_OF_ARGS); + FrameLen += tmp; + } +- // +- // Let WPA(#221) Element ID on the end of this association frame. +- // Otherwise some AP will fail on parsing Element ID and set status fail on Assoc Rsp. +- // For example: Put Vendor Specific IE on the front of WPA IE. +- // This happens on AP (Model No:Linksys WRK54G) +- // ++ /* */ ++ /* Let WPA(#221) Element ID on the end of this association frame. */ ++ /* Otherwise some AP will fail on parsing Element ID and set status fail on Assoc Rsp. */ ++ /* For example: Put Vendor Specific IE on the front of WPA IE. */ ++ /* This happens on AP (Model No:Linksys WRK54G) */ ++ /* */ + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +@@ -486,11 +486,11 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, + pAd->StaCfg.WepStatus, BSS0); + +- // Check for WPA PMK cache list ++ /* Check for WPA PMK cache list */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) { + INT idx; + BOOLEAN FoundPMK = FALSE; +- // Search chched PMKID, append it if existed ++ /* Search chched PMKID, append it if existed */ + for (idx = 0; idx < PMKID_NO; idx++) { + if (NdisEqualMemory + (ApAddr, +@@ -501,7 +501,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + if (FoundPMK) { +- // Set PMK number ++ /* Set PMK number */ + *(PUSHORT) & pAd->StaCfg.RSN_IE[pAd-> + StaCfg. + RSNIE_Len] +@@ -538,7 +538,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + WPA_SUPPLICANT_ENABLE) + || (pAd->StaCfg.bRSN_IE_FromWpaSupplicant == + FALSE)) { +- // Append Variable IE ++ /* Append Variable IE */ + NdisMoveMemory(pAd->StaCfg.ReqVarIEs + + VarIesOffset, &RSNIe, 1); + VarIesOffset += 1; +@@ -552,7 +552,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->StaCfg.RSNIE_Len); + VarIesOffset += pAd->StaCfg.RSNIE_Len; + +- // Set Variable IEs Length ++ /* Set Variable IEs Length */ + pAd->StaCfg.ReqVarIELen = VarIesOffset; + } + +@@ -605,7 +605,7 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + PUCHAR pOutBuffer = NULL; + USHORT Status; + +- // Block all authentication request durning WPA block period ++ /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - Block ReAssoc request durning WPA block period!\n")); +@@ -614,13 +614,13 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, + &Status); + } +- // the parameters are the same as the association ++ /* the parameters are the same as the association */ + else if (MlmeAssocReqSanity + (pAd, Elem->Msg, Elem->MsgLen, ApAddr, &CapabilityInfo, + &Timeout, &ListenIntv)) { + RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &TimerCancelled); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - MlmeReassocReqAction() allocate memory failed \n")); +@@ -633,7 +633,7 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, ApAddr); + +- // make frame, use bssid as the AP address?? ++ /* make frame, use bssid as the AP address?? */ + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - Send RE-ASSOC request...\n")); + MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, +@@ -676,7 +676,7 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + 9, &WmeIe[0], END_OF_ARGS); + FrameLen += tmp; + } +- // HT ++ /* HT */ + if ((pAd->MlmeAux.HtCapabilityLen > 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { + ULONG TmpLen; +@@ -700,14 +700,14 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + FrameLen += TmpLen; + } +- // add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION +- // Case I: (Aggregation + Piggy-Back) +- // 1. user enable aggregation, AND +- // 2. Mac support piggy-back +- // 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON +- // Case II: (Aggregation) +- // 1. user enable aggregation, AND +- // 2. AP annouces it's AGGREGATION-capable in BEACON ++ /* add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION */ ++ /* Case I: (Aggregation + Piggy-Back) */ ++ /* 1. user enable aggregation, AND */ ++ /* 2. Mac support piggy-back */ ++ /* 3. AP annouces it's PIGGY-BACK+AGGREGATION-capable in BEACON */ ++ /* Case II: (Aggregation) */ ++ /* 1. user enable aggregation, AND */ ++ /* 2. AP annouces it's AGGREGATION-capable in BEACON */ + if (pAd->CommonCfg.bAggregationCapable) { + if ((pAd->CommonCfg.bPiggyBackCapable) + && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { +@@ -777,10 +777,10 @@ VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ULONG Timeout = 500; + USHORT Status; + +- // skip sanity check ++ /* skip sanity check */ + pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT) (Elem->Msg); + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - MlmeDisassocReqAction() allocate memory failed\n")); +@@ -799,15 +799,15 @@ VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pDisassocReq->Addr[2], pDisassocReq->Addr[3], + pDisassocReq->Addr[4], pDisassocReq->Addr[5], + pDisassocReq->Reason)); +- MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pDisassocReq->Addr, pDisassocReq->Addr); // patch peap ttls switching issue ++ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pDisassocReq->Addr, pDisassocReq->Addr); /* patch peap ttls switching issue */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(HEADER_802_11), &DisassocHdr, + 2, &pDisassocReq->Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +- // To patch Instance and Buffalo(N) AP +- // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine +- // Therefore, we send both of them. ++ /* To patch Instance and Buffalo(N) AP */ ++ /* Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine */ ++ /* Therefore, we send both of them. */ + pDisassocHdr = (PHEADER_802_11) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +@@ -845,7 +845,7 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + UCHAR CkipFlag; + EDCA_PARM EdcaParm; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR HtCapabilityLen = 0; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; +@@ -855,7 +855,7 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, &HtCapability, + &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen, &NewExtChannelOffset, + &EdcaParm, &CkipFlag)) { +- // The frame is for me ? ++ /* The frame is for me ? */ + if (MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) { + DBGPRINT(RT_DEBUG_TRACE, + ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", +@@ -873,7 +873,7 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + UCHAR MaxSupportedRateIn500Kbps = 0; + UCHAR idx; + +- // supported rates array may not be sorted. sort it and find the maximum rate ++ /* supported rates array may not be sorted. sort it and find the maximum rate */ + for (idx = 0; idx < SupRateLen; idx++) { + if (MaxSupportedRateIn500Kbps < + (SupRate[idx] & 0x7f)) +@@ -887,7 +887,7 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MaxSupportedRateIn500Kbps = + ExtRate[idx] & 0x7f; + } +- // go to procedure listed on page 376 ++ /* go to procedure listed on page 376 */ + AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, + SupRate, SupRateLen, ExtRate, + ExtRateLen, &EdcaParm, +@@ -936,7 +936,7 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + BOOLEAN TimerCancelled; + EDCA_PARM EdcaParm; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR HtCapabilityLen; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; +@@ -946,7 +946,7 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &Aid, SupRate, &SupRateLen, ExtRate, &ExtRateLen, &HtCapability, + &AddHtInfo, &HtCapabilityLen, &AddHtInfoLen, &NewExtChannelOffset, + &EdcaParm, &CkipFlag)) { +- if (MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) // The frame is for me ? ++ if (MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid)) /* The frame is for me ? */ + { + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - receive REASSOC_RSP to me (status=%d)\n", +@@ -955,7 +955,7 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &TimerCancelled); + + if (Status == MLME_SUCCESS) { +- // go to procedure listed on page 376 ++ /* go to procedure listed on page 376 */ + AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, + SupRate, SupRateLen, ExtRate, + ExtRateLen, &EdcaParm, +@@ -972,7 +972,7 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + } +- // CkipFlag is no use for reassociate ++ /* CkipFlag is no use for reassociate */ + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, + MT2_REASSOC_CONF, 2, &Status); +@@ -994,7 +994,7 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityInfo, IN USHORT Aid, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) // AP might use this additional ht info IE ++VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityInfo, IN USHORT Aid, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) /* AP might use this additional ht info IE */ + { + ULONG Idx; + +@@ -1004,7 +1004,7 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + pAd->MlmeAux.CapabilityInfo = + CapabilityInfo & SUPPORTED_CAPABILITY_INFO; + +- // Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on. ++ /* Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on. */ + if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE)) { + pEdcaParm->bValid = TRUE; + pEdcaParm->Aifsn[0] = 3; +@@ -1031,12 +1031,12 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + + NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); + +- // filter out un-supported rates ++ /* filter out un-supported rates */ + pAd->MlmeAux.SupRateLen = SupRateLen; + NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, SupRateLen); + RTMPCheckRates(pAd, pAd->MlmeAux.SupRate, &pAd->MlmeAux.SupRateLen); + +- // filter out un-supported rates ++ /* filter out un-supported rates */ + pAd->MlmeAux.ExtRateLen = ExtRateLen; + NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen); + RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen); +@@ -1054,17 +1054,17 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + pAd->MacTab.Content[BSSID_WCID].MmpsMode, + pAd->MacTab.Content[BSSID_WCID].AMsduSize)); + +- // Set New WPA information ++ /* Set New WPA information */ + Idx = BssTableSearch(&pAd->ScanTab, pAddr2, pAd->MlmeAux.Channel); + if (Idx == BSS_NOT_FOUND) { + DBGPRINT_ERR(("ASSOC - Can't find BSS after receiving Assoc response\n")); + } else { +- // Init variable ++ /* Init variable */ + pAd->MacTab.Content[BSSID_WCID].RSNIE_Len = 0; + NdisZeroMemory(pAd->MacTab.Content[BSSID_WCID].RSN_IE, + MAX_LEN_OF_RSNIE); + +- // Store appropriate RSN_IE for WPA SM negotiation later ++ /* Store appropriate RSN_IE for WPA SM negotiation later */ + if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) + && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) { + PUCHAR pVIE; +@@ -1073,14 +1073,14 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + + pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; + len = pAd->ScanTab.BssEntry[Idx].VarIELen; +- //KH need to check again +- // Don't allow to go to sleep mode if authmode is WPA-related. +- //This can make Authentication process more smoothly. ++ /*KH need to check again */ ++ /* Don't allow to go to sleep mode if authmode is WPA-related. */ ++ /*This can make Authentication process more smoothly. */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + + while (len > 0) { + pEid = (PEID_STRUCT) pVIE; +- // For WPA/WPAPSK ++ /* For WPA/WPAPSK */ + if ((pEid->Eid == IE_WPA) + && + (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) +@@ -1097,7 +1097,7 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + DBGPRINT(RT_DEBUG_TRACE, + ("AssocPostProc===> Store RSN_IE for WPA SM negotiation \n")); + } +- // For WPA2/WPA2PSK ++ /* For WPA2/WPA2PSK */ + else if ((pEid->Eid == IE_RSN) + && + (NdisEqualMemory +@@ -1292,21 +1292,21 @@ VOID Cls3errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) + NDIS_STATUS NStatus; + USHORT Reason = REASON_CLS3ERR; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) + return; + + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - Class 3 Error, Send DISASSOC frame\n")); +- MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid); // patch peap ttls switching issue ++ MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid); /* patch peap ttls switching issue */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(HEADER_802_11), &DisassocHdr, + 2, &Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +- // To patch Instance and Buffalo(N) AP +- // Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine +- // Therefore, we send both of them. ++ /* To patch Instance and Buffalo(N) AP */ ++ /* Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine */ ++ /* Therefore, we send both of them. */ + pDisassocHdr = (PHEADER_802_11) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); +@@ -1393,7 +1393,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + && (MaxSupportedRate < RATE_FIRST_OFDM_RATE)) + return FALSE; + +- // 11n only ++ /* 11n only */ + if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) + || (pAd->CommonCfg.PhyMode == PHY_11N_5G)) + && (HtCapabilityLen == 0)) +@@ -1445,10 +1445,10 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + } + + NdisZeroMemory(&pEntry->HTCapability, sizeof(pEntry->HTCapability)); +- // If this Entry supports 802.11n, upgrade to HT rate. ++ /* If this Entry supports 802.11n, upgrade to HT rate. */ + if ((HtCapabilityLen != 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { +- UCHAR j, bitmask; //k,bitmask; ++ UCHAR j, bitmask; /*k,bitmask; */ + CHAR i; + + if (ADHOC_ON(pAd)) +@@ -1484,14 +1484,14 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pAd->MacTab.fAnyStation20Only = TRUE; + } + +- // 3*3 ++ /* 3*3 */ + if (pAd->MACVersion >= RALINK_2883_VERSION + && pAd->MACVersion < RALINK_3070_VERSION) + pEntry->MaxHTPhyMode.field.TxBF = + pAd->CommonCfg.RegTransmitSetting.field.TxBF; + +- // find max fixed rate +- for (i = 23; i >= 0; i--) // 3*3 ++ /* find max fixed rate */ ++ for (i = 23; i >= 0; i--) /* 3*3 */ + { + j = i / 8; + bitmask = (1 << (i - (j * 8))); +@@ -1506,7 +1506,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + + if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO) { + if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32) { +- // Fix MCS as HT Duplicated Mode ++ /* Fix MCS as HT Duplicated Mode */ + pEntry->MaxHTPhyMode.field.BW = 1; + pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX; + pEntry->MaxHTPhyMode.field.STBC = 0; +@@ -1514,7 +1514,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pEntry->MaxHTPhyMode.field.MCS = 32; + } else if (pEntry->MaxHTPhyMode.field.MCS > + pAd->StaCfg.HTPhyMode.field.MCS) { +- // STA supports fixed MCS ++ /* STA supports fixed MCS */ + pEntry->MaxHTPhyMode.field.MCS = + pAd->StaCfg.HTPhyMode.field.MCS; + } +@@ -1565,7 +1565,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; + pEntry->CurrTxRate = pEntry->MaxSupportedRate; + +- // Set asic auto fall back ++ /* Set asic auto fall back */ + if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) { + PUCHAR pTable; + UCHAR TableSize = 0; +@@ -1578,7 +1578,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS; + pEntry->bAutoTxRateSwitch = FALSE; + +- // If the legacy mode is set, overwrite the transmit setting of this entry. ++ /* If the legacy mode is set, overwrite the transmit setting of this entry. */ + RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. + DesiredTransmitSetting.field. + FixedTxMode, pEntry); +diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c +index 8b75b46..a69b6a7 100644 +--- a/drivers/staging/rt2860/sta/auth.c ++++ b/drivers/staging/rt2860/sta/auth.c +@@ -62,11 +62,11 @@ void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) Drop, AUTH_REQ_IDLE, + AUTH_MACHINE_BASE); + +- // the first column ++ /* the first column */ + StateMachineSetAction(Sm, AUTH_REQ_IDLE, MT2_MLME_AUTH_REQ, + (STATE_MACHINE_FUNC) MlmeAuthReqAction); + +- // the second column ++ /* the second column */ + StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_MLME_AUTH_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenAuth); + StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_PEER_AUTH_EVEN, +@@ -74,7 +74,7 @@ void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(Sm, AUTH_WAIT_SEQ2, MT2_AUTH_TIMEOUT, + (STATE_MACHINE_FUNC) AuthTimeoutAction); + +- // the third column ++ /* the third column */ + StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_MLME_AUTH_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenAuth); + StateMachineSetAction(Sm, AUTH_WAIT_SEQ4, MT2_PEER_AUTH_EVEN, +@@ -103,13 +103,13 @@ VOID AuthTimeout(IN PVOID SystemSpecific1, + + DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeout\n")); + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- // send a de-auth to reset AP's state machine (Patch AP-Dir635) ++ /* send a de-auth to reset AP's state machine (Patch AP-Dir635) */ + if (pAd->Mlme.AuthMachine.CurrState == AUTH_WAIT_SEQ2) + Cls2errAction(pAd, pAd->MlmeAux.Bssid); + +@@ -173,7 +173,7 @@ VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &TimerCancelled); + + if (Status == MLME_SUCCESS) { +- // Authentication Mode "LEAP" has allow for CCX 1.X ++ /* Authentication Mode "LEAP" has allow for CCX 1.X */ + if (pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen) { + pAd->Mlme.AuthMachine.CurrState = + AUTH_REQ_IDLE; +@@ -181,11 +181,11 @@ VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME_CNTL_STATE_MACHINE, + MT2_AUTH_CONF, 2, &Status); + } else { +- // 2. shared key, need to be challenged ++ /* 2. shared key, need to be challenged */ + Seq++; + RemoteStatus = MLME_SUCCESS; + +- // Get an unused nonpaged memory ++ /* Get an unused nonpaged memory */ + NStatus = + MlmeAllocateMemory(pAd, + &pOutBuffer); +@@ -208,7 +208,7 @@ VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + SUBTYPE_AUTH, 0, Addr2, + pAd->MlmeAux.Bssid); + AuthHdr.FC.Wep = 1; +- // Encrypt challenge text & auth information ++ /* Encrypt challenge text & auth information */ + RTMPInitWepEngine(pAd, + pAd-> + SharedKey[BSS0][pAd-> +@@ -332,7 +332,7 @@ VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + pInfo = (MLME_DEAUTH_REQ_STRUCT *) Elem->Msg; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("AUTH - MlmeDeauthReqAction() allocate memory fail\n")); +@@ -359,7 +359,7 @@ VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Status = MLME_SUCCESS; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_DEAUTH_CONF, 2, &Status); + +- // send wireless event - for deauthentication ++ /* send wireless event - for deauthentication */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, + pAd->MacTab.Content[BSSID_WCID].Addr, +@@ -422,7 +422,7 @@ VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) + ULONG FrameLen = 0; + USHORT Reason = REASON_CLS2ERR; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) + return; + +@@ -455,7 +455,7 @@ BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + PUCHAR pOutBuffer = NULL; + ULONG FrameLen = 0, tmp = 0; + +- // Block all authentication request durning WPA block period ++ /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s - Block Auth request durning WPA block period!\n", +@@ -475,7 +475,7 @@ BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + Seq = SeqNo; + Status = MLME_SUCCESS; + +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s - MlmeAuthReqAction(Alg:%d) allocate memory failed\n", +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index 3f383c5..e3c07a4 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -55,11 +55,11 @@ VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) Drop, AUTH_RSP_IDLE, + AUTH_RSP_MACHINE_BASE); + +- // column 1 ++ /* column 1 */ + StateMachineSetAction(Sm, AUTH_RSP_IDLE, MT2_PEER_DEAUTH, + (STATE_MACHINE_FUNC) PeerDeauthAction); + +- // column 2 ++ /* column 2 */ + StateMachineSetAction(Sm, AUTH_RSP_WAIT_CHAL, MT2_PEER_DEAUTH, + (STATE_MACHINE_FUNC) PeerDeauthAction); + +@@ -88,7 +88,7 @@ VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n")); + return; + } +- //Get an unused nonpaged memory ++ /*Get an unused nonpaged memory */ + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); + if (NStatus != NDIS_STATUS_SUCCESS) + return; +@@ -126,7 +126,7 @@ VOID PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) + RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, + 0); + +- // send wireless event - for deauthentication ++ /* send wireless event - for deauthentication */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, + pAd->MacTab. +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index dc8b2d5..29906be 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -37,35 +37,35 @@ + #include "../rt_config.h" + + UCHAR CipherSuiteWpaNoneTkip[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x02, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x02, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication ++ 0x00, 0x50, 0xf2, 0x01, /* oui */ ++ 0x01, 0x00, /* Version */ ++ 0x00, 0x50, 0xf2, 0x02, /* Multicast */ ++ 0x01, 0x00, /* Number of unicast */ ++ 0x00, 0x50, 0xf2, 0x02, /* unicast */ ++ 0x01, 0x00, /* number of authentication method */ ++ 0x00, 0x50, 0xf2, 0x00 /* authentication */ + }; + + UCHAR CipherSuiteWpaNoneTkipLen = + (sizeof(CipherSuiteWpaNoneTkip) / sizeof(UCHAR)); + + UCHAR CipherSuiteWpaNoneAes[] = { +- 0x00, 0x50, 0xf2, 0x01, // oui +- 0x01, 0x00, // Version +- 0x00, 0x50, 0xf2, 0x04, // Multicast +- 0x01, 0x00, // Number of unicast +- 0x00, 0x50, 0xf2, 0x04, // unicast +- 0x01, 0x00, // number of authentication method +- 0x00, 0x50, 0xf2, 0x00 // authentication ++ 0x00, 0x50, 0xf2, 0x01, /* oui */ ++ 0x01, 0x00, /* Version */ ++ 0x00, 0x50, 0xf2, 0x04, /* Multicast */ ++ 0x01, 0x00, /* Number of unicast */ ++ 0x00, 0x50, 0xf2, 0x04, /* unicast */ ++ 0x01, 0x00, /* number of authentication method */ ++ 0x00, 0x50, 0xf2, 0x00 /* authentication */ + }; + + UCHAR CipherSuiteWpaNoneAesLen = + (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)); + +-// The following MACRO is called after 1. starting an new IBSS, 2. succesfully JOIN an IBSS, +-// or 3. succesfully ASSOCIATE to a BSS, 4. successfully RE_ASSOCIATE to a BSS +-// All settings successfuly negotiated furing MLME state machines become final settings +-// and are copied to pAd->StaActive ++/* The following MACRO is called after 1. starting an new IBSS, 2. succesfully JOIN an IBSS, */ ++/* or 3. succesfully ASSOCIATE to a BSS, 4. successfully RE_ASSOCIATE to a BSS */ ++/* All settings successfuly negotiated furing MLME state machines become final settings */ ++/* and are copied to pAd->StaActive */ + #define COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ + { \ + NdisZeroMemory((_pAd)->CommonCfg.Ssid, MAX_LEN_OF_SSID); \ +@@ -105,8 +105,8 @@ UCHAR CipherSuiteWpaNoneAesLen = + VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { +- // Control state machine differs from other state machines, the interface +- // follows the standard interface ++ /* Control state machine differs from other state machines, the interface */ ++ /* follows the standard interface */ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + +@@ -133,12 +133,12 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + CntlWaitJoinProc(pAd, Elem); + break; + +- // CNTL_WAIT_REASSOC is the only state in CNTL machine that does +- // not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)". +- // Therefore not protected by NDIS's "only one outstanding OID request" +- // rule. Which means NDIS may SET OID in the middle of ROAMing attempts. +- // Current approach is to block new SET request at RTMPSetInformation() +- // when CntlMachine.CurrState is not CNTL_IDLE ++ /* CNTL_WAIT_REASSOC is the only state in CNTL machine that does */ ++ /* not triggered directly or indirectly by "RTMPSetInformation(OID_xxx)". */ ++ /* Therefore not protected by NDIS's "only one outstanding OID request" */ ++ /* rule. Which means NDIS may SET OID in the middle of ROAMing attempts. */ ++ /* Current approach is to block new SET request at RTMPSetInformation() */ ++ /* when CntlMachine.CurrState is not CNTL_IDLE */ + case CNTL_WAIT_REASSOC: + CntlWaitReassocProc(pAd, Elem); + break; +@@ -158,15 +158,15 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + + case CNTL_WAIT_OID_LIST_SCAN: + if (Elem->MsgType == MT2_SCAN_CONF) { +- // Resume TxRing after SCANING complete. We hope the out-of-service time +- // won't be too long to let upper layer time-out the waiting frames ++ /* Resume TxRing after SCANING complete. We hope the out-of-service time */ ++ /* won't be too long to let upper layer time-out the waiting frames */ + RTMPResumeMsduTransmission(pAd); + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +- // +- // Set LED status to previous status. +- // ++ /* */ ++ /* Set LED status to previous status. */ ++ /* */ + if (pAd->bLedOnScanning) { + pAd->bLedOnScanning = FALSE; + RTMPSetLED(pAd, pAd->LedStatus); +@@ -181,28 +181,28 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + } + break; + #ifdef RTMP_MAC_USB +- // +- // This state is for that we want to connect to an AP but +- // it didn't find on BSS List table. So we need to scan the air first, +- // after that we can try to connect to the desired AP if available. +- // ++ /* */ ++ /* This state is for that we want to connect to an AP but */ ++ /* it didn't find on BSS List table. So we need to scan the air first, */ ++ /* after that we can try to connect to the desired AP if available. */ ++ /* */ + case CNTL_WAIT_SCAN_FOR_CONNECT: + if (Elem->MsgType == MT2_SCAN_CONF) { +- // Resume TxRing after SCANING complete. We hope the out-of-service time +- // won't be too long to let upper layer time-out the waiting frames ++ /* Resume TxRing after SCANING complete. We hope the out-of-service time */ ++ /* won't be too long to let upper layer time-out the waiting frames */ + RTMPResumeMsduTransmission(pAd); + #ifdef CCX_SUPPORT + if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) { +- // Cisco scan request is finished, prepare beacon report ++ /* Cisco scan request is finished, prepare beacon report */ + MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, + MT2_AIRONET_SCAN_DONE, 0, NULL); + } +-#endif // CCX_SUPPORT // ++#endif /* CCX_SUPPORT // */ + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + +- // +- // Check if we can connect to. +- // ++ /* */ ++ /* Check if we can connect to. */ ++ /* */ + BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, + (CHAR *) pAd->MlmeAux. + AutoReconnectSsid, +@@ -212,7 +212,7 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + } + } + break; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + default: + DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", + Elem->MsgType)); +@@ -257,8 +257,8 @@ VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if (pAd->StaCfg.WpaSupplicantUP != + WPA_SUPPLICANT_ENABLE_WITH_WEB_UI) { +- // Set the AutoReconnectSsid to prevent it reconnect to old SSID +- // Since calling this indicate user don't want to connect to that SSID anymore. ++ /* Set the AutoReconnectSsid to prevent it reconnect to old SSID */ ++ /* Since calling this indicate user don't want to connect to that SSID anymore. */ + pAd->MlmeAux.AutoReconnectSsidLen = 32; + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, + pAd->MlmeAux.AutoReconnectSsidLen); +@@ -287,8 +287,8 @@ VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ULONG BssIdx = BSS_NOT_FOUND; + BSS_ENTRY CurrBss; + +- // record current BSS if network is connected. +- // 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. ++ /* record current BSS if network is connected. */ ++ /* 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + BssIdx = + BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, +@@ -300,14 +300,14 @@ VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + sizeof(BSS_ENTRY)); + } + } +- // clean up previous SCAN result, add current BSS back to table if any ++ /* clean up previous SCAN result, add current BSS back to table if any */ + BssTableInit(&pAd->ScanTab); + if (BssIdx != BSS_NOT_FOUND) { +- // DDK Note: If the NIC is associated with a particular BSSID and SSID +- // that are not contained in the list of BSSIDs generated by this scan, the +- // BSSID description of the currently associated BSSID and SSID should be +- // appended to the list of BSSIDs in the NIC's database. +- // To ensure this, we append this BSS as the first entry in SCAN result ++ /* DDK Note: If the NIC is associated with a particular BSSID and SSID */ ++ /* that are not contained in the list of BSSIDs generated by this scan, the */ ++ /* BSSID description of the currently associated BSSID and SSID should be */ ++ /* appended to the list of BSSIDs in the NIC's database. */ ++ /* To ensure this, we append this BSS as the first entry in SCAN result */ + NdisMoveMemory(&pAd->ScanTab.BssEntry[0], &CurrBss, + sizeof(BSS_ENTRY)); + pAd->ScanTab.BssNr = 1; +@@ -335,7 +335,7 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME_DISASSOC_REQ_STRUCT DisassocReq; + ULONG Now; + +- // Step 1. record the desired user settings to MlmeAux ++ /* Step 1. record the desired user settings to MlmeAux */ + NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pOidSsid->Ssid, pOidSsid->SsidLength); + pAd->MlmeAux.SsidLen = (UCHAR) pOidSsid->SsidLength; +@@ -344,16 +344,16 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + pAd->StaCfg.bAutoConnectByBssid = FALSE; + +- // +- // Update Reconnect Ssid, that user desired to connect. +- // ++ /* */ ++ /* Update Reconnect Ssid, that user desired to connect. */ ++ /* */ + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + pAd->MlmeAux.AutoReconnectSsidLen = pAd->MlmeAux.SsidLen; + +- // step 2. find all matching BSS in the lastest SCAN result (inBssTab) +- // & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order ++ /* step 2. find all matching BSS in the lastest SCAN result (inBssTab) */ ++ /* & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order */ + BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, + (PCHAR) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + +@@ -371,18 +371,18 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->CommonCfg.SsidLen) + && MAC_ADDR_EQUAL(pAd->CommonCfg.Bssid, + pAd->MlmeAux.SsidBssTab.BssEntry[0].Bssid)) { +- // Case 1. already connected with an AP who has the desired SSID +- // with highest RSSI ++ /* Case 1. already connected with an AP who has the desired SSID */ ++ /* with highest RSSI */ + +- // Add checking Mode "LEAP" for CCX 1.0 ++ /* Add checking Mode "LEAP" for CCX 1.0 */ + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) + ) && + (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)) { +- // case 1.1 For WPA, WPA-PSK, if the 1x port is not secured, we have to redo +- // connection process ++ /* case 1.1 For WPA, WPA-PSK, if the 1x port is not secured, we have to redo */ ++ /* connection process */ + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); + DisassocParmFill(pAd, &DisassocReq, +@@ -394,7 +394,7 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + } else if (pAd->bConfigChanged == TRUE) { +- // case 1.2 Important Config has changed, we have to reconnect to the same AP ++ /* case 1.2 Important Config has changed, we have to reconnect to the same AP */ + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - disassociate with current AP Because config changed...\n")); + DisassocParmFill(pAd, &DisassocReq, +@@ -406,22 +406,22 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + } else { +- // case 1.3. already connected to the SSID with highest RSSI. ++ /* case 1.3. already connected to the SSID with highest RSSI. */ + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - already with this BSSID. ignore this SET_SSID request\n")); +- // +- // (HCT 12.1) 1c_wlan_mediaevents required +- // media connect events are indicated when associating with the same AP +- // ++ /* */ ++ /* (HCT 12.1) 1c_wlan_mediaevents required */ ++ /* media connect events are indicated when associating with the same AP */ ++ /* */ + if (INFRA_ON(pAd)) { +- // +- // Since MediaState already is NdisMediaStateConnected +- // We just indicate the connect event again to meet the WHQL required. +- // ++ /* */ ++ /* Since MediaState already is NdisMediaStateConnected */ ++ /* We just indicate the connect event again to meet the WHQL required. */ ++ /* */ + pAd->IndicateMediaState = + NdisMediaStateConnected; + RTMP_IndicateMediaState(pAd); +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up ++ pAd->ExtraInfo = GENERAL_LINK_UP; /* Update extra information to link is up */ + } + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +@@ -430,26 +430,26 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + 0); + } + } else if (INFRA_ON(pAd)) { +- // +- // For RT61 +- // [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) +- // RT61 may lost SSID, and not connect to NDTEST_WEP_AP2 and will connect to NDTEST_WEP_AP2 by Autoreconnect +- // But media status is connected, so the SSID not report correctly. +- // ++ /* */ ++ /* For RT61 */ ++ /* [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) */ ++ /* RT61 may lost SSID, and not connect to NDTEST_WEP_AP2 and will connect to NDTEST_WEP_AP2 by Autoreconnect */ ++ /* But media status is connected, so the SSID not report correctly. */ ++ /* */ + if (!SSID_EQUAL + (pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen, + pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen)) { +- // +- // Different SSID means not Roaming case, so we let LinkDown() to Indicate a disconnect event. +- // ++ /* */ ++ /* Different SSID means not Roaming case, so we let LinkDown() to Indicate a disconnect event. */ ++ /* */ + pAd->MlmeAux.CurrReqIsFromNdis = TRUE; + } +- // case 2. active INFRA association existent +- // roaming is done within miniport driver, nothing to do with configuration +- // utility. so upon a new SET(OID_802_11_SSID) is received, we just +- // disassociate with the current associated AP, +- // then perform a new association with this new SSID, no matter the +- // new/old SSID are the same or not. ++ /* case 2. active INFRA association existent */ ++ /* roaming is done within miniport driver, nothing to do with configuration */ ++ /* utility. so upon a new SET(OID_802_11_SSID) is received, we just */ ++ /* disassociate with the current associated AP, */ ++ /* then perform a new association with this new SSID, no matter the */ ++ /* new/old SSID are the same or not. */ + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - disassociate with current AP...\n")); + DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, +@@ -488,7 +488,7 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = + CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number ++ /* Reset Missed scan number */ + pAd->StaCfg.LastScanTime = Now; + } else { + pAd->MlmeAux.BssIdx = 0; +@@ -512,18 +512,18 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME_DISASSOC_REQ_STRUCT DisassocReq; + MLME_JOIN_REQ_STRUCT JoinReq; + +- // record user desired settings ++ /* record user desired settings */ + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid); + pAd->MlmeAux.BssType = pAd->StaCfg.BssType; + +- // find the desired BSS in the latest SCAN result table ++ /* find the desired BSS in the latest SCAN result table */ + BssIdx = BssTableSearch(&pAd->ScanTab, pOidBssid, pAd->MlmeAux.Channel); + if (BssIdx == BSS_NOT_FOUND) { + MLME_SCAN_REQ_STRUCT ScanReq; + + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); +- //pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; ++ /*pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; */ + + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - BSSID not found. start a new scan\n")); +@@ -532,13 +532,13 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, + sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; +- // Reset Missed scan number ++ /* Reset Missed scan number */ + NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); + return; + } +- // +- // Update Reconnect Ssid, that user desired to connect. +- // ++ /* */ ++ /* Update Reconnect Ssid, that user desired to connect. */ ++ /* */ + NdisZeroMemory(pAd->MlmeAux.AutoReconnectSsid, MAX_LEN_OF_SSID); + pAd->MlmeAux.AutoReconnectSsidLen = + pAd->ScanTab.BssEntry[BssIdx].SsidLen; +@@ -546,21 +546,21 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->ScanTab.BssEntry[BssIdx].Ssid, + pAd->ScanTab.BssEntry[BssIdx].SsidLen); + +- // copy the matched BSS entry from ScanTab to MlmeAux.SsidBssTab. Why? +- // Because we need this entry to become the JOIN target in later on SYNC state machine ++ /* copy the matched BSS entry from ScanTab to MlmeAux.SsidBssTab. Why? */ ++ /* Because we need this entry to become the JOIN target in later on SYNC state machine */ + pAd->MlmeAux.BssIdx = 0; + pAd->MlmeAux.SsidBssTab.BssNr = 1; + NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], + &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); + +- // Add SSID into MlmeAux for site surey joining hidden SSID ++ /* Add SSID into MlmeAux for site surey joining hidden SSID */ + pAd->MlmeAux.SsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; + NdisMoveMemory(pAd->MlmeAux.Ssid, pAd->ScanTab.BssEntry[BssIdx].Ssid, + pAd->MlmeAux.SsidLen); + + { + if (INFRA_ON(pAd)) { +- // disassoc from current AP first ++ /* disassoc from current AP first */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - disassociate with current AP ...\n")); + DisassocParmFill(pAd, &DisassocReq, +@@ -586,14 +586,14 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("NDIS_STATUS_MEDIA_DISCONNECT Event C!\n")); + } +- // Change the wepstatus to original wepstatus ++ /* Change the wepstatus to original wepstatus */ + pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; + +- // Check cipher suite, AP must have more secured cipher than station setting +- // Set the Pairwise and Group cipher to match the intended AP setting +- // We can only connect to AP with less secured cipher setting ++ /* Check cipher suite, AP must have more secured cipher than station setting */ ++ /* Set the Pairwise and Group cipher to match the intended AP setting */ ++ /* We can only connect to AP with less secured cipher setting */ + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeWPAPSK)) { +@@ -612,7 +612,7 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->StaCfg.PairCipher = + pAd->ScanTab.BssEntry[BssIdx].WPA. + PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP ++ else /* There is no PairCipher Aux, downgrade our capability to TKIP */ + pAd->StaCfg.PairCipher = + Ndis802_11Encryption2Enabled; + } else +@@ -634,16 +634,16 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->StaCfg.PairCipher = + pAd->ScanTab.BssEntry[BssIdx].WPA2. + PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP ++ else /* There is no PairCipher Aux, downgrade our capability to TKIP */ + pAd->StaCfg.PairCipher = + Ndis802_11Encryption2Enabled; + +- // RSN capability ++ /* RSN capability */ + pAd->StaCfg.RsnCapability = + pAd->ScanTab.BssEntry[BssIdx].WPA2. + RsnCapability; + } +- // Set Mix cipher flag ++ /* Set Mix cipher flag */ + pAd->StaCfg.bMixCipher = + (pAd->StaCfg.PairCipher == + pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +@@ -652,7 +652,7 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + // If mix cipher, re-build RSNIE + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, 0); + } */ +- // No active association, join the BSS immediately ++ /* No active association, join the BSS immediately */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - joining %02x:%02x:%02x:%02x:%02x:%02x ...\n", + pOidBssid[0], pOidBssid[1], pOidBssid[2], +@@ -667,14 +667,14 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-// Roaming is the only external request triggering CNTL state machine +-// despite of other "SET OID" operation. All "SET OID" related oerations +-// happen in sequence, because no other SET OID will be sent to this device +-// until the the previous SET operation is complete (successful o failed). +-// So, how do we quarantee this ROAMING request won't corrupt other "SET OID"? +-// or been corrupted by other "SET OID"? +-// +-// IRQL = DISPATCH_LEVEL ++/* Roaming is the only external request triggering CNTL state machine */ ++/* despite of other "SET OID" operation. All "SET OID" related oerations */ ++/* happen in sequence, because no other SET OID will be sent to this device */ ++/* until the the previous SET operation is complete (successful o failed). */ ++/* So, how do we quarantee this ROAMING request won't corrupt other "SET OID"? */ ++/* or been corrupted by other "SET OID"? */ ++/* */ ++/* IRQL = DISPATCH_LEVEL */ + VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + UCHAR BBPValue = 0; +@@ -682,7 +682,7 @@ VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Roaming in MlmeAux.RoamTab...\n")); + + { +- //Let BBP register at 20MHz to do (fast) roaming. ++ /*Let BBP register at 20MHz to do (fast) roaming. */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +@@ -720,7 +720,7 @@ VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + LinkDown(pAd, FALSE); + +- // case 1. no matching BSS, and user wants ADHOC, so we just start a new one ++ /* case 1. no matching BSS, and user wants ADHOC, so we just start a new one */ + if ((pAd->MlmeAux.SsidBssTab.BssNr == 0) + && (pAd->StaCfg.BssType == BSS_ADHOC)) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -732,7 +732,7 @@ VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } +- // case 2. try each matched BSS ++ /* case 2. try each matched BSS */ + else { + pAd->MlmeAux.BssIdx = 0; + +@@ -757,12 +757,12 @@ VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (Elem->MsgType == MT2_JOIN_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); + if (Reason == MLME_SUCCESS) { +- // 1. joined an IBSS, we are pretty much done here ++ /* 1. joined an IBSS, we are pretty much done here */ + if (pAd->MlmeAux.BssType == BSS_ADHOC) { +- // +- // 5G bands rules of Japan: +- // Ad hoc must be disabled in W53(ch52,56,60,64) channels. +- // ++ /* */ ++ /* 5G bands rules of Japan: */ ++ /* Ad hoc must be disabled in W53(ch52,56,60,64) channels. */ ++ /* */ + if ((pAd->CommonCfg.bIEEE80211H == 1) && + RadarChannelCheck(pAd, + pAd->CommonCfg.Channel) +@@ -790,10 +790,10 @@ VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + NdisMediaStateConnected; + pAd->ExtraInfo = GENERAL_LINK_UP; + } +- // 2. joined a new INFRA network, start from authentication ++ /* 2. joined a new INFRA network, start from authentication */ + else { + { +- // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first ++ /* either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first */ + if ((pAd->StaCfg.AuthMode == + Ndis802_11AuthModeShared) + || (pAd->StaCfg.AuthMode == +@@ -817,7 +817,7 @@ VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CNTL_WAIT_AUTH; + } + } else { +- // 3. failed, try next BSS ++ /* 3. failed, try next BSS */ + pAd->MlmeAux.BssIdx++; + IterateOnBssTab(pAd); + } +@@ -839,10 +839,10 @@ VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (Elem->MsgType == MT2_START_CONF) { + NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); + if (Result == MLME_SUCCESS) { +- // +- // 5G bands rules of Japan: +- // Ad hoc must be disabled in W53(ch52,56,60,64) channels. +- // ++ /* */ ++ /* 5G bands rules of Japan: */ ++ /* Ad hoc must be disabled in W53(ch52,56,60,64) channels. */ ++ /* */ + if ((pAd->CommonCfg.bIEEE80211H == 1) && + RadarChannelCheck(pAd, pAd->CommonCfg.Channel) + ) { +@@ -892,7 +892,7 @@ VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + LinkUp(pAd, BSS_ADHOC); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +- // Before send beacon, driver need do radar detection ++ /* Before send beacon, driver need do radar detection */ + if ((pAd->CommonCfg.Channel > 14) + && (pAd->CommonCfg.bIEEE80211H == 1) + && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) { +@@ -950,9 +950,9 @@ VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CNTL_WAIT_ASSOC; + } + } else { +- // This fail may because of the AP already keep us in its MAC table without +- // ageing-out. The previous authentication attempt must have let it remove us. +- // so try Authentication again may help. For D-Link DWL-900AP+ compatibility. ++ /* This fail may because of the AP already keep us in its MAC table without */ ++ /* ageing-out. The previous authentication attempt must have let it remove us. */ ++ /* so try Authentication again may help. For D-Link DWL-900AP+ compatibility. */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - AUTH FAIL, try again...\n")); + +@@ -961,7 +961,7 @@ VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Ndis802_11AuthModeShared) + || (pAd->StaCfg.AuthMode == + Ndis802_11AuthModeAutoSwitch)) { +- // either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first ++ /* either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first */ + AuthParmFill(pAd, &AuthReq, + pAd->MlmeAux.Bssid, + AUTH_MODE_KEY); +@@ -1028,10 +1028,10 @@ VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->Mlme.CntlMachine.CurrState = + CNTL_WAIT_AUTH2; + } else { +- // not success, try next BSS ++ /* not success, try next BSS */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - AUTH FAIL, give up; try next BSS\n")); +- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; //??????? ++ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; /*??????? */ + pAd->MlmeAux.BssIdx++; + IterateOnBssTab(pAd); + } +@@ -1067,7 +1067,7 @@ VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("CNTL - Association successful on BSS #%ld\n", + pAd->MlmeAux.BssIdx)); + } else { +- // not success, try next BSS ++ /* not success, try next BSS */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - Association fails on BSS #%ld\n", + pAd->MlmeAux.BssIdx)); +@@ -1092,16 +1092,16 @@ VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (Elem->MsgType == MT2_REASSOC_CONF) { + NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); + if (Result == MLME_SUCCESS) { +- // send wireless event - for association ++ /* send wireless event - for association */ + if (pAd->CommonCfg.bWirelessEvent) + RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, + pAd->MacTab. + Content[BSSID_WCID].Addr, + BSS0, 0); + +- // +- // NDIS requires a new Link UP indication but no Link Down for RE-ASSOC +- // ++ /* */ ++ /* NDIS requires a new Link UP indication but no Link Down for RE-ASSOC */ ++ /* */ + LinkUp(pAd, BSS_INFRA); + + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; +@@ -1109,7 +1109,7 @@ VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("CNTL - Re-assocition successful on BSS #%ld\n", + pAd->MlmeAux.RoamIdx)); + } else { +- // reassoc failed, try to pick next BSS in the BSS Table ++ /* reassoc failed, try to pick next BSS in the BSS Table */ + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - Re-assocition fails on BSS #%ld\n", + pAd->MlmeAux.RoamIdx)); +@@ -1128,7 +1128,7 @@ VOID AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) + #define AC2_DEF_TXOP 94 + #define AC3_DEF_TXOP 47 + +- // Turn on QOs if use HT rate. ++ /* Turn on QOs if use HT rate. */ + if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) { + pAd->CommonCfg.APEdcaParm.bValid = TRUE; + pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; +@@ -1170,7 +1170,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + UCHAR Value = 0, idx = 0, HashIdx = 0; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; + +- // Init ChannelQuality to prevent DEAD_CQI at initial LinkUp ++ /* Init ChannelQuality to prevent DEAD_CQI at initial LinkUp */ + pAd->Mlme.ChannelQuality = 50; + + pEntry = MacTableLookup(pAd, pAd->CommonCfg.Bssid); +@@ -1181,15 +1181,15 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + +- // +- // ASSOC - DisassocTimeoutAction +- // CNTL - Dis-associate successful +- // !!! LINK DOWN !!! +- // [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) +- // +- // To prevent DisassocTimeoutAction to call Link down after we link up, +- // cancel the DisassocTimer no matter what it start or not. +- // ++ /* */ ++ /* ASSOC - DisassocTimeoutAction */ ++ /* CNTL - Dis-associate successful */ ++ /* !!! LINK DOWN !!! */ ++ /* [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) */ ++ /* */ ++ /* To prevent DisassocTimeoutAction to call Link down after we link up, */ ++ /* cancel the DisassocTimer no matter what it start or not. */ ++ /* */ + RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled); + + COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); +@@ -1197,8 +1197,8 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd); + + #ifdef RTMP_MAC_PCI +- // Before power save before link up function, We will force use 1R. +- // So after link up, check Rx antenna # again. ++ /* Before power save before link up function, We will force use 1R. */ ++ /* So after link up, check Rx antenna # again. */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + if (pAd->Antenna.field.RxPath == 3) { + Value |= (0x10); +@@ -1209,7 +1209,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + } + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + if (BssType == BSS_ADHOC) { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); +@@ -1226,17 +1226,17 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n")); + } + +- // 3*3 +- // reset Tx beamforming bit ++ /* 3*3 */ ++ /* reset Tx beamforming bit */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value); + Value &= (~0x01); + Value |= pAd->CommonCfg.RegTransmitSetting.field.TxBF; + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); + +- // Change to AP channel ++ /* Change to AP channel */ + if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + pAd->CommonCfg.BBPCurrentBW = BW_40; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +@@ -1246,13 +1246,13 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + Value |= 0x10; + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value); + +- // RX : control channel at lower ++ /* RX : control channel at lower */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); + Value &= (~0x20); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); + Data &= 0xfffffffe; +@@ -1271,7 +1271,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + } else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == + BW_40)) { +- // Must using 40MHz. ++ /* Must using 40MHz. */ + pAd->CommonCfg.BBPCurrentBW = BW_40; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +@@ -1290,7 +1290,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); +@@ -1321,7 +1321,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); + #ifdef RTMP_MAC_PCI + pAd->StaCfg.BBPR3 = Value; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + if (pAd->MACVersion == 0x28600100) { + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); +@@ -1335,9 +1335,9 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); + +- // +- // Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission +- // ++ /* */ ++ /* Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission */ ++ /* */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, + &pAd->BbpTuning.R66CurrentValue); + +@@ -1355,12 +1355,12 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + AsicSetSlotTime(pAd, TRUE); + AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); + +- // Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit ++ /* Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit */ + AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, + FALSE); + + if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) { +- // Update HT protectionfor based on AP's operating mode. ++ /* Update HT protectionfor based on AP's operating mode. */ + if (pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent == 1) { + AsicUpdateProtect(pAd, + pAd->MlmeAux.AddHtInfo.AddHtInfo2. +@@ -1376,7 +1376,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS)); + + NdisGetSystemUpTime(&Now); +- pAd->StaCfg.LastBeaconRxTime = Now; // last RX timestamp ++ pAd->StaCfg.LastBeaconRxTime = Now; /* last RX timestamp */ + + if ((pAd->CommonCfg.TxPreamble != Rt802_11PreambleLong) && + CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo)) { +@@ -1394,18 +1394,18 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + if ((pAd->CommonCfg.Channel > 14) + && (pAd->CommonCfg.bIEEE80211H == 1) + && RadarChannelCheck(pAd, pAd->CommonCfg.Channel)) { +- ; //Do nothing ++ ; /*Do nothing */ + } else { + AsicEnableIbssSync(pAd); + } + +- // In ad hoc mode, use MAC table from index 1. +- // p.s ASIC use all 0xff as termination of WCID table search.To prevent it's 0xff-ff-ff-ff-ff-ff, Write 0 here. ++ /* In ad hoc mode, use MAC table from index 1. */ ++ /* p.s ASIC use all 0xff as termination of WCID table search.To prevent it's 0xff-ff-ff-ff-ff-ff, Write 0 here. */ + RTMP_IO_WRITE32(pAd, MAC_WCID_BASE, 0x00); + RTMP_IO_WRITE32(pAd, 0x1808, 0x00); + +- // If WEP is enabled, add key material and cipherAlg into Asic +- // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) ++ /* If WEP is enabled, add key material and cipherAlg into Asic */ ++ /* Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) */ + + if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) { + PUCHAR Key; +@@ -1416,13 +1416,13 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + Key = pAd->SharedKey[BSS0][idx].Key; + + if (pAd->SharedKey[BSS0][idx].KeyLen > 0) { +- // Set key material and cipherAlg to Asic ++ /* Set key material and cipherAlg to Asic */ + AsicAddSharedKeyEntry(pAd, BSS0, idx, + CipherAlg, Key, + NULL, NULL); + + if (idx == pAd->StaCfg.DefaultKeyId) { +- // Update WCID attribute table and IVEIV table for this group key table ++ /* Update WCID attribute table and IVEIV table for this group key table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + idx, +@@ -1433,10 +1433,10 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + } + } +- // If WPANone is enabled, add key material and cipherAlg into Asic +- // Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) ++ /* If WPANone is enabled, add key material and cipherAlg into Asic */ ++ /* Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) */ + else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { +- pAd->StaCfg.DefaultKeyId = 0; // always be zero ++ pAd->StaCfg.DefaultKeyId = 0; /* always be zero */ + + NdisZeroMemory(&pAd->SharedKey[BSS0][0], + sizeof(CIPHER_KEY)); +@@ -1453,7 +1453,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + &pAd->StaCfg.PMK[16], + LEN_TKIP_TXMICK); + } +- // Decide its ChiperAlg ++ /* Decide its ChiperAlg */ + if (pAd->StaCfg.PairCipher == + Ndis802_11Encryption2Enabled) + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_TKIP; +@@ -1467,7 +1467,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_AES; + } + +- // Set key material and cipherAlg to Asic ++ /* Set key material and cipherAlg to Asic */ + AsicAddSharedKeyEntry(pAd, + BSS0, + 0, +@@ -1476,16 +1476,16 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + pAd->SharedKey[BSS0][0].TxMic, + pAd->SharedKey[BSS0][0].RxMic); + +- // Update WCID attribute table and IVEIV table for this group key table ++ /* Update WCID attribute table and IVEIV table for this group key table */ + RTMPAddWcidAttributeEntry(pAd, BSS0, 0, + pAd->SharedKey[BSS0][0]. + CipherAlg, NULL); + + } + +- } else // BSS_INFRA ++ } else /* BSS_INFRA */ + { +- // Check the new SSID with last SSID ++ /* Check the new SSID with last SSID */ + while (Cancelled == TRUE) { + if (pAd->CommonCfg.LastSsidLen == + pAd->CommonCfg.SsidLen) { +@@ -1493,11 +1493,11 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + (pAd->CommonCfg.LastSsid, + pAd->CommonCfg.Ssid, + pAd->CommonCfg.LastSsidLen) == 0) { +- // Link to the old one no linkdown is required. ++ /* Link to the old one no linkdown is required. */ + break; + } + } +- // Send link down event before set to link up ++ /* Send link down event before set to link up */ + pAd->IndicateMediaState = NdisMediaStateDisconnected; + RTMP_IndicateMediaState(pAd); + pAd->ExtraInfo = GENERAL_LINK_DOWN; +@@ -1506,43 +1506,43 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + break; + } + +- // +- // On WPA mode, Remove All Keys if not connect to the last BSSID +- // Key will be set after 4-way handshake. +- // ++ /* */ ++ /* On WPA mode, Remove All Keys if not connect to the last BSSID */ ++ /* Key will be set after 4-way handshake. */ ++ /* */ + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { + ULONG IV; + +- // Remove all WPA keys ++ /* Remove all WPA keys */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + RTMPWPARemoveAllKeys(pAd); + pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED; + pAd->StaCfg.PrivacyFilter = + Ndis802_11PrivFilter8021xWEP; + +- // Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP +- // If IV related values are too large in GroupMsg2, AP would ignore this message. ++ /* Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP */ ++ /* If IV related values are too large in GroupMsg2, AP would ignore this message. */ + IV = 1; + IV |= (pAd->StaCfg.DefaultKeyId << 30); + AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0); + } +- // NOTE: +- // the decision of using "short slot time" or not may change dynamically due to +- // new STA association to the AP. so we have to decide that upon parsing BEACON, not here ++ /* NOTE: */ ++ /* the decision of using "short slot time" or not may change dynamically due to */ ++ /* new STA association to the AP. so we have to decide that upon parsing BEACON, not here */ + +- // NOTE: +- // the decision to use "RTC/CTS" or "CTS-to-self" protection or not may change dynamically +- // due to new STA association to the AP. so we have to decide that upon parsing BEACON, not here ++ /* NOTE: */ ++ /* the decision to use "RTC/CTS" or "CTS-to-self" protection or not may change dynamically */ ++ /* due to new STA association to the AP. so we have to decide that upon parsing BEACON, not here */ + + ComposePsPoll(pAd); + ComposeNullFrame(pAd); + + AsicEnableBssSync(pAd); + +- // Add BSSID to WCID search table ++ /* Add BSSID to WCID search table */ + AsicUpdateRxWCIDTable(pAd, BSSID_WCID, pAd->CommonCfg.Bssid); + +- // If WEP is enabled, add paiewise and shared key ++ /* If WEP is enabled, add paiewise and shared key */ + if (((pAd->StaCfg.WpaSupplicantUP) && + (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && + (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) || +@@ -1556,13 +1556,13 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + Key = pAd->SharedKey[BSS0][idx].Key; + + if (pAd->SharedKey[BSS0][idx].KeyLen > 0) { +- // Set key material and cipherAlg to Asic ++ /* Set key material and cipherAlg to Asic */ + AsicAddSharedKeyEntry(pAd, BSS0, idx, + CipherAlg, Key, + NULL, NULL); + + if (idx == pAd->StaCfg.DefaultKeyId) { +- // Assign group key info ++ /* Assign group key info */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + idx, +@@ -1570,7 +1570,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + NULL); + + pEntry->Aid = BSSID_WCID; +- // Assign pairwise key info ++ /* Assign pairwise key info */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + idx, +@@ -1580,11 +1580,11 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + } + } + } +- // only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode +- // should wait until at least 2 active nodes in this BSSID. ++ /* only INFRASTRUCTURE mode need to indicate connectivity immediately; ADHOC mode */ ++ /* should wait until at least 2 active nodes in this BSSID. */ + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); + +- // For GUI ++ ++ /* For GUI ++ */ + if (pAd->StaCfg.AuthMode < Ndis802_11AuthModeWPA) { + pAd->IndicateMediaState = NdisMediaStateConnected; + pAd->ExtraInfo = GENERAL_LINK_UP; +@@ -1597,11 +1597,11 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + RTMPSetTimer(&pAd->Mlme.LinkDownTimer, + LINK_DOWN_TIMEOUT); + } +- // -- ++ /* -- */ + +- // Add BSSID in my MAC Table. ++ /* Add BSSID in my MAC Table. */ + NdisAcquireSpinLock(&pAd->MacTabLock); +- // add this MAC entry into HASH table ++ /* add this MAC entry into HASH table */ + if (pEntry) { + HashIdx = MAC_ADDR_HASH_INDEX(pAd->CommonCfg.Bssid); + if (pAd->MacTab.Hash[HashIdx] == NULL) { +@@ -1618,8 +1618,8 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + MAC_ADDR_LEN); + pEntry->Aid = BSSID_WCID; + pEntry->pAd = pAd; +- pEntry->ValidAsCLI = TRUE; //Although this is bssid..still set ValidAsCl +- pAd->MacTab.Size = 1; // infra mode always set MACtab size =1. ++ pEntry->ValidAsCLI = TRUE; /*Although this is bssid..still set ValidAsCl */ ++ pAd->MacTab.Size = 1; /* infra mode always set MACtab size =1. */ + pEntry->Sst = SST_ASSOC; + pEntry->AuthState = SST_ASSOC; + pEntry->AuthMode = pAd->StaCfg.AuthMode; +@@ -1687,15 +1687,15 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + pAd->CommonCfg.BACapability.word, + pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_LINK_UP); + + pAd->Mlme.PeriodicRound = 0; + pAd->Mlme.OneSecPeriodicRound = 0; +- pAd->bConfigChanged = FALSE; // Reset config flag +- pAd->ExtraInfo = GENERAL_LINK_UP; // Update extra information to link is up ++ pAd->bConfigChanged = FALSE; /* Reset config flag */ ++ pAd->ExtraInfo = GENERAL_LINK_UP; /* Update extra information to link is up */ + +- // Set asic auto fall back ++ /* Set asic auto fall back */ + { + PUCHAR pTable; + UCHAR TableSize = 0; +@@ -1719,7 +1719,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + || (pEntry->HTPhyMode.field.MCS == 32)) + pEntry->HTPhyMode.field.STBC = STBC_NONE; + +- // If the legacy mode is set, overwrite the transmit setting of this entry. ++ /* If the legacy mode is set, overwrite the transmit setting of this entry. */ + if (pEntry->HTPhyMode.field.MODE <= MODE_OFDM) + RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. + DesiredTransmitSetting.field. +@@ -1728,9 +1728,9 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + pEntry->bAutoTxRateSwitch = TRUE; + NdisReleaseSpinLock(&pAd->MacTabLock); + +- // Let Link Status Page display first initial rate. ++ /* Let Link Status Page display first initial rate. */ + pAd->LastTxRate = (USHORT) (pEntry->HTPhyMode.word); +- // Select DAC according to HT or Legacy ++ /* Select DAC according to HT or Legacy */ + if (pAd->StaActive.SupportedPhyInfo.MCSSet[0] != 0x00) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); + Value &= (~0x18); +@@ -1746,20 +1746,20 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) { + } else if (pEntry->MaxRAmpduFactor == 0) { +- // If HT AP doesn't support MaxRAmpduFactor = 1, we need to set max PSDU to 0. +- // Because our Init value is 1 at MACRegTable. ++ /* If HT AP doesn't support MaxRAmpduFactor = 1, we need to set max PSDU to 0. */ ++ /* Because our Init value is 1 at MACRegTable. */ + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x0fff); + } +- // Patch for Marvel AP to gain high throughput +- // Need to set as following, +- // 1. Set txop in register-EDCA_AC0_CFG as 0x60 +- // 2. Set EnTXWriteBackDDONE in register-WPDMA_GLO_CFG as zero +- // 3. PBF_MAX_PCNT as 0x1F3FBF9F +- // 4. kick per two packets when dequeue +- // +- // Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable +- // +- // if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is. ++ /* Patch for Marvel AP to gain high throughput */ ++ /* Need to set as following, */ ++ /* 1. Set txop in register-EDCA_AC0_CFG as 0x60 */ ++ /* 2. Set EnTXWriteBackDDONE in register-WPDMA_GLO_CFG as zero */ ++ /* 3. PBF_MAX_PCNT as 0x1F3FBF9F */ ++ /* 4. kick per two packets when dequeue */ ++ /* */ ++ /* Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable */ ++ /* */ ++ /* if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is. */ + if (!((pAd->CommonCfg.RxStream == 1) && (pAd->CommonCfg.TxStream == 1)) + && (pAd->StaCfg.bForceTxBurst == FALSE) + && +@@ -1791,14 +1791,14 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + DBGPRINT(RT_DEBUG_TRACE, ("Txburst 3\n")); + } + +- // Re-check to turn on TX burst or not. ++ /* Re-check to turn on TX burst or not. */ + if ((pAd->CommonCfg.IOTestParm.bLastAtheros == TRUE) + && ((STA_WEP_ON(pAd)) || (STA_TKIP_ON(pAd)))) { + pAd->CommonCfg.IOTestParm.bNextDisableRxBA = TRUE; + if (pAd->CommonCfg.bEnableTxBurst) { + UINT32 MACValue = 0; +- // Force disable TXOP value in this case. The same action in MLMEUpdateProtect too. +- // I didn't change PBF_MAX_PCNT setting. ++ /* Force disable TXOP value in this case. The same action in MLMEUpdateProtect too. */ ++ /* I didn't change PBF_MAX_PCNT setting. */ + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &MACValue); + MACValue &= 0xFFFFFF00; + RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, MACValue); +@@ -1813,9 +1813,9 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + DBGPRINT(RT_DEBUG_TRACE, + ("!!!pAd->bNextDisableRxBA= %d \n", + pAd->CommonCfg.IOTestParm.bNextDisableRxBA)); +- // BSSID add in one MAC entry too. Because in Tx, ASIC need to check Cipher and IV/EIV, BAbitmap +- // Pther information in MACTab.Content[BSSID_WCID] is not necessary for driver. +- // Note: As STA, The MACTab.Content[BSSID_WCID]. PairwiseKey and Shared Key for BSS0 are the same. ++ /* BSSID add in one MAC entry too. Because in Tx, ASIC need to check Cipher and IV/EIV, BAbitmap */ ++ /* Pther information in MACTab.Content[BSSID_WCID] is not necessary for driver. */ ++ /* Note: As STA, The MACTab.Content[BSSID_WCID]. PairwiseKey and Shared Key for BSS0 are the same. */ + + if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled) { + if (pAd->StaCfg.WpaSupplicantUP && +@@ -1832,10 +1832,10 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + pEntry->PortSecured = pAd->StaCfg.PortSecured; + NdisReleaseSpinLock(&pAd->MacTabLock); + +- // +- // Patch Atheros AP TX will breakdown issue. +- // AP Model: DLink DWL-8200AP +- // ++ /* */ ++ /* Patch Atheros AP TX will breakdown issue. */ ++ /* AP Model: DLink DWL-8200AP */ ++ /* */ + if (INFRA_ON(pAd) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) + && STA_TKIP_ON(pAd)) { + RTMP_IO_WRITE32(pAd, RX_PARSER_CFG, 0x01); +@@ -1877,14 +1877,14 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + { + UCHAR i, ByteValue = 0; + +- // Do nothing if monitor mode is on ++ /* Do nothing if monitor mode is on */ + if (MONITOR_ON(pAd)) + return; + + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- //Comment the codes, beasue the line 2291 call the same function. +- //RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- // Not allow go to sleep within linkdown function. ++ /*Comment the codes, beasue the line 2291 call the same function. */ ++ /*RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); */ ++ /* Not allow go to sleep within linkdown function. */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + + if (pAd->CommonCfg.bWirelessEvent) { +@@ -1904,7 +1904,7 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + } + + pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) + || RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) +@@ -1917,9 +1917,9 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + } + #ifdef RTMP_MAC_PCI + pAd->bPCIclkOff = FALSE; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- if (ADHOC_ON(pAd)) // Adhoc mode link down ++ if (ADHOC_ON(pAd)) /* Adhoc mode link down */ + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); + +@@ -1932,14 +1932,14 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->CommonCfg.Channel); + DBGPRINT(RT_DEBUG_TRACE, + ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size)); +- } else // Infra structure mode ++ } else /* Infra structure mode */ + { + DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 2!!!\n")); + + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); + +- // Saved last SSID for linkup comparison ++ /* Saved last SSID for linkup comparison */ + pAd->CommonCfg.LastSsidLen = pAd->CommonCfg.SsidLen; + NdisMoveMemory(pAd->CommonCfg.LastSsid, pAd->CommonCfg.Ssid, + pAd->CommonCfg.LastSsidLen); +@@ -1952,20 +1952,20 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + ("NDIS_STATUS_MEDIA_DISCONNECT Event A!\n")); + pAd->MlmeAux.CurrReqIsFromNdis = FALSE; + } else { +- // +- // If disassociation request is from NDIS, then we don't need to delete BSSID from entry. +- // Otherwise lost beacon or receive De-Authentication from AP, +- // then we should delete BSSID from BssTable. +- // If we don't delete from entry, roaming will fail. +- // ++ /* */ ++ /* If disassociation request is from NDIS, then we don't need to delete BSSID from entry. */ ++ /* Otherwise lost beacon or receive De-Authentication from AP, */ ++ /* then we should delete BSSID from BssTable. */ ++ /* If we don't delete from entry, roaming will fail. */ ++ /* */ + BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, + pAd->CommonCfg.Channel); + } + +- // restore back to - +- // 1. long slot (20 us) or short slot (9 us) time +- // 2. turn on/off RTS/CTS and/or CTS-to-self protection +- // 3. short preamble ++ /* restore back to - */ ++ /* 1. long slot (20 us) or short slot (9 us) time */ ++ /* 2. turn on/off RTS/CTS and/or CTS-to-self protection */ ++ /* 3. short preamble */ + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED); + + } +@@ -1976,13 +1976,13 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->MacTab.Content[i].Addr); + } + +- AsicSetSlotTime(pAd, TRUE); //FALSE); ++ AsicSetSlotTime(pAd, TRUE); /*FALSE); */ + AsicSetEdcaParm(pAd, NULL); + +- // Set LED ++ /* Set LED */ + RTMPSetLED(pAd, LED_LINK_DOWN); + pAd->LedIndicatorStrength = 0xF0; +- RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it. ++ RTMPSetSignalLED(pAd, -100); /* Force signal strength Led to be turned off, firmware is not done it. */ + + AsicDisableSync(pAd); + +@@ -1990,7 +1990,7 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->Mlme.OneSecPeriodicRound = 0; + + if (pAd->StaCfg.BssType == BSS_INFRA) { +- // Remove StaCfg Information after link down ++ /* Remove StaCfg Information after link down */ + NdisZeroMemory(pAd->CommonCfg.Bssid, MAC_ADDR_LEN); + NdisZeroMemory(pAd->CommonCfg.Ssid, MAX_LEN_OF_SSID); + pAd->CommonCfg.SsidLen = 0; +@@ -2001,25 +2001,25 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->MlmeAux.HtCapabilityLen = 0; + pAd->MlmeAux.NewExtChannelOffset = 0xff; + +- // Reset WPA-PSK state. Only reset when supplicant enabled ++ /* Reset WPA-PSK state. Only reset when supplicant enabled */ + if (pAd->StaCfg.WpaState != SS_NOTUSE) { + pAd->StaCfg.WpaState = SS_START; +- // Clear Replay counter ++ /* Clear Replay counter */ + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); + + } +- // +- // if link down come from AP, we need to remove all WPA keys on WPA mode. +- // otherwise will cause 4-way handshaking failed, since the WPA key not empty. +- // ++ /* */ ++ /* if link down come from AP, we need to remove all WPA keys on WPA mode. */ ++ /* otherwise will cause 4-way handshaking failed, since the WPA key not empty. */ ++ /* */ + if ((IsReqFromAP) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)) { +- // Remove all WPA keys ++ /* Remove all WPA keys */ + RTMPWPARemoveAllKeys(pAd); + } +- // 802.1x port control ++ /* 802.1x port control */ + +- // Prevent clear PortSecured here with static WEP +- // NetworkManger set security policy first then set SSID to connect AP. ++ /* Prevent clear PortSecured here with static WEP */ ++ /* NetworkManger set security policy first then set SSID to connect AP. */ + if (pAd->StaCfg.WpaSupplicantUP && + (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) && + (pAd->StaCfg.IEEE8021X == FALSE)) { +@@ -2037,16 +2037,16 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->StaCfg.MicErrCnt = 0; + + pAd->IndicateMediaState = NdisMediaStateDisconnected; +- // Update extra information to link is up ++ /* Update extra information to link is up */ + pAd->ExtraInfo = GENERAL_LINK_DOWN; + + pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; + + #ifdef RTMP_MAC_USB + pAd->bUsbTxBulkAggre = FALSE; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // Clean association information ++ /* Clean association information */ + NdisZeroMemory(&pAd->StaCfg.AssocInfo, + sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); + pAd->StaCfg.AssocInfo.Length = +@@ -2054,9 +2054,9 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->StaCfg.ReqVarIELen = 0; + pAd->StaCfg.ResVarIELen = 0; + +- // +- // Reset RSSI value after link down +- // ++ /* */ ++ /* Reset RSSI value after link down */ ++ /* */ + pAd->StaCfg.RssiSample.AvgRssi0 = 0; + pAd->StaCfg.RssiSample.AvgRssi0X8 = 0; + pAd->StaCfg.RssiSample.AvgRssi1 = 0; +@@ -2064,20 +2064,20 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->StaCfg.RssiSample.AvgRssi2 = 0; + pAd->StaCfg.RssiSample.AvgRssi2X8 = 0; + +- // Restore MlmeRate ++ /* Restore MlmeRate */ + pAd->CommonCfg.MlmeRate = pAd->CommonCfg.BasicMlmeRate; + pAd->CommonCfg.RtsRate = pAd->CommonCfg.BasicMlmeRate; + +- // +- // After Link down, reset piggy-back setting in ASIC. Disable RDG. +- // ++ /* */ ++ /* After Link down, reset piggy-back setting in ASIC. Disable RDG. */ ++ /* */ + if (pAd->CommonCfg.BBPCurrentBW == BW_40) { + pAd->CommonCfg.BBPCurrentBW = BW_20; + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &ByteValue); + ByteValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, ByteValue); + } +- // Reset DAC ++ /* Reset DAC */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &ByteValue); + ByteValue &= (~0x18); + if (pAd->Antenna.field.TxPath == 2) { +@@ -2090,7 +2090,7 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + + pAd->CommonCfg.BACapability.word = pAd->CommonCfg.REGBACapability.word; + +- // Restore all settings in the following. ++ /* Restore all settings in the following. */ + AsicUpdateProtect(pAd, 0, + (ALLN_SETPROTECT | CCKSETPROTECT | OFDMSETPROTECT), + TRUE, FALSE); +@@ -2101,7 +2101,7 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x1fff); + RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); + +-// Allow go to sleep after linkdown steps. ++/* Allow go to sleep after linkdown steps. */ + RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + + RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL, 0); +@@ -2111,7 +2111,7 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + && (pAd->Antenna.field.RxPath > 1 || pAd->Antenna.field.TxPath > 1)) { + RTMP_ASIC_MMPS_DISABLE(pAd); + } +-#endif // RT30xx // ++#endif /* RT30xx // */ + } + + /* +@@ -2128,16 +2128,16 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + MLME_JOIN_REQ_STRUCT JoinReq; + ULONG BssIdx; + +- // Change the wepstatus to original wepstatus ++ /* Change the wepstatus to original wepstatus */ + pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.PairCipher = pAd->StaCfg.OrigWepStatus; + pAd->StaCfg.GroupCipher = pAd->StaCfg.OrigWepStatus; + + BssIdx = pAd->MlmeAux.BssIdx; + if (BssIdx < pAd->MlmeAux.SsidBssTab.BssNr) { +- // Check cipher suite, AP must have more secured cipher than station setting +- // Set the Pairwise and Group cipher to match the intended AP setting +- // We can only connect to AP with less secured cipher setting ++ /* Check cipher suite, AP must have more secured cipher than station setting */ ++ /* Set the Pairwise and Group cipher to match the intended AP setting */ ++ /* We can only connect to AP with less secured cipher setting */ + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) + || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)) { + pAd->StaCfg.GroupCipher = +@@ -2155,7 +2155,7 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.PairCipher = + pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. + WPA.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP ++ else /* There is no PairCipher Aux, downgrade our capability to TKIP */ + pAd->StaCfg.PairCipher = + Ndis802_11Encryption2Enabled; + } else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) +@@ -2176,16 +2176,16 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + pAd->StaCfg.PairCipher = + pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx]. + WPA2.PairCipherAux; +- else // There is no PairCipher Aux, downgrade our capability to TKIP ++ else /* There is no PairCipher Aux, downgrade our capability to TKIP */ + pAd->StaCfg.PairCipher = + Ndis802_11Encryption2Enabled; + +- // RSN capability ++ /* RSN capability */ + pAd->StaCfg.RsnCapability = + pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2. + RsnCapability; + } +- // Set Mix cipher flag ++ /* Set Mix cipher flag */ + pAd->StaCfg.bMixCipher = + (pAd->StaCfg.PairCipher == + pAd->StaCfg.GroupCipher) ? FALSE : TRUE; +@@ -2211,7 +2211,7 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, + sizeof(MLME_START_REQ_STRUCT), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; +- } else // no more BSS ++ } else /* no more BSS */ + { + + { +@@ -2226,8 +2226,8 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + } + } + +-// for re-association only +-// IRQL = DISPATCH_LEVEL ++/* for re-association only */ ++/* IRQL = DISPATCH_LEVEL */ + VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + { + MLME_REASSOC_REQ_STRUCT ReassocReq; +@@ -2245,7 +2245,7 @@ VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + AsicSwitchChannel(pAd, pBss->Channel, FALSE); + AsicLockChannel(pAd, pBss->Channel); + +- // reassociate message has the same structure as associate message ++ /* reassociate message has the same structure as associate message */ + AssocParmFill(pAd, &ReassocReq, pBss->Bssid, + pBss->CapabilityInfo, ASSOC_TIMEOUT, + pAd->StaCfg.DefaultListenCount); +@@ -2253,7 +2253,7 @@ VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC; +- } else // no more BSS ++ } else /* no more BSS */ + { + + { +@@ -2355,7 +2355,7 @@ VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { + NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); +@@ -2366,7 +2366,7 @@ VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); + COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg) + { +@@ -2407,12 +2407,12 @@ VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[TXWI_SIZE + TXINFO_SIZE], + &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); +- // Append 4 extra zero bytes. ++ /* Append 4 extra zero bytes. */ + pAd->PsPollContext.BulkOutSize = + TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { + PTXINFO_STRUC pTxInfo; +@@ -2446,7 +2446,7 @@ VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + pAd->NullContext.BulkOutSize = + TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + /* + ========================================================================== +@@ -2477,27 +2477,27 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + + if ((pAd->CommonCfg.PhyMode == PHY_11B) + && (pAd->CommonCfg.Channel <= 14)) { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps ++ SupRate[0] = 0x82; /* 1 mbps */ ++ SupRate[1] = 0x84; /* 2 mbps */ ++ SupRate[2] = 0x8b; /* 5.5 mbps */ ++ SupRate[3] = 0x96; /* 11 mbps */ + SupRateLen = 4; + ExtRateLen = 0; + } else if (pAd->CommonCfg.Channel > 14) { +- SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate +- SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate +- SupRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- SupRate[4] = 0xb0; // 24 mbps, in units of 0.5 Mbps, basic rate +- SupRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- SupRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- SupRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ SupRate[0] = 0x8C; /* 6 mbps, in units of 0.5 Mbps, basic rate */ ++ SupRate[1] = 0x12; /* 9 mbps, in units of 0.5 Mbps */ ++ SupRate[2] = 0x98; /* 12 mbps, in units of 0.5 Mbps, basic rate */ ++ SupRate[3] = 0x24; /* 18 mbps, in units of 0.5 Mbps */ ++ SupRate[4] = 0xb0; /* 24 mbps, in units of 0.5 Mbps, basic rate */ ++ SupRate[5] = 0x48; /* 36 mbps, in units of 0.5 Mbps */ ++ SupRate[6] = 0x60; /* 48 mbps, in units of 0.5 Mbps */ ++ SupRate[7] = 0x6c; /* 54 mbps, in units of 0.5 Mbps */ + SupRateLen = 8; + ExtRateLen = 0; + +- // +- // Also Update MlmeRate & RtsRate for G only & A only +- // ++ /* */ ++ /* Also Update MlmeRate & RtsRate for G only & A only */ ++ /* */ + pAd->CommonCfg.MlmeRate = RATE_6; + pAd->CommonCfg.RtsRate = RATE_6; + pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM; +@@ -2508,20 +2508,20 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + pAd->MacTab.Content[BSS0Mcast_WCID].HTPhyMode.field.MCS = + OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate]; + } else { +- SupRate[0] = 0x82; // 1 mbps +- SupRate[1] = 0x84; // 2 mbps +- SupRate[2] = 0x8b; // 5.5 mbps +- SupRate[3] = 0x96; // 11 mbps ++ SupRate[0] = 0x82; /* 1 mbps */ ++ SupRate[1] = 0x84; /* 2 mbps */ ++ SupRate[2] = 0x8b; /* 5.5 mbps */ ++ SupRate[3] = 0x96; /* 11 mbps */ + SupRateLen = 4; + +- ExtRate[0] = 0x0C; // 6 mbps, in units of 0.5 Mbps, +- ExtRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps +- ExtRate[2] = 0x18; // 12 mbps, in units of 0.5 Mbps, +- ExtRate[3] = 0x24; // 18 mbps, in units of 0.5 Mbps +- ExtRate[4] = 0x30; // 24 mbps, in units of 0.5 Mbps, +- ExtRate[5] = 0x48; // 36 mbps, in units of 0.5 Mbps +- ExtRate[6] = 0x60; // 48 mbps, in units of 0.5 Mbps +- ExtRate[7] = 0x6c; // 54 mbps, in units of 0.5 Mbps ++ ExtRate[0] = 0x0C; /* 6 mbps, in units of 0.5 Mbps, */ ++ ExtRate[1] = 0x12; /* 9 mbps, in units of 0.5 Mbps */ ++ ExtRate[2] = 0x18; /* 12 mbps, in units of 0.5 Mbps, */ ++ ExtRate[3] = 0x24; /* 18 mbps, in units of 0.5 Mbps */ ++ ExtRate[4] = 0x30; /* 24 mbps, in units of 0.5 Mbps, */ ++ ExtRate[5] = 0x48; /* 36 mbps, in units of 0.5 Mbps */ ++ ExtRate[6] = 0x60; /* 48 mbps, in units of 0.5 Mbps */ ++ ExtRate[7] = 0x6c; /* 54 mbps, in units of 0.5 Mbps */ + ExtRateLen = 8; + } + +@@ -2530,7 +2530,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + pAd->StaActive.ExtRateLen = ExtRateLen; + NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, ExtRateLen); + +- // compose IBSS beacon frame ++ /* compose IBSS beacon frame */ + MgtMacHeaderInit(pAd, &BcnHdr, SUBTYPE_BEACON, 0, BROADCAST_ADDR, + pAd->CommonCfg.Bssid); + Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) +@@ -2558,7 +2558,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + 1, &IbssIe, + 1, &IbssLen, 2, &pAd->StaActive.AtimWin, END_OF_ARGS); + +- // add ERP_IE and EXT_RAE IE of in 802.11g ++ /* add ERP_IE and EXT_RAE IE of in 802.11g */ + if (ExtRateLen) { + ULONG tmp; + +@@ -2569,7 +2569,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + ExtRateLen, ExtRate, END_OF_ARGS); + FrameLen += tmp; + } +- // If adhoc secruity is set for WPA-None, append the cipher suite IE ++ /* If adhoc secruity is set for WPA-None, append the cipher suite IE */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { + ULONG tmp; + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, +@@ -2587,7 +2587,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + ULONG TmpLen; + UCHAR HtLen, HtLen1; + +- // add HT Capability IE ++ /* add HT Capability IE */ + HtLen = sizeof(pAd->CommonCfg.HtCapability); + HtLen1 = sizeof(pAd->CommonCfg.AddHTInfo); + +@@ -2602,14 +2602,14 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + + FrameLen += TmpLen; + } +- //beacon use reserved WCID 0xff ++ /*beacon use reserved WCID 0xff */ + if (pAd->CommonCfg.Channel > 14) { + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, + TRUE, 0, 0xff, FrameLen, PID_MGMT, PID_BEACON, + RATE_1, IFS_HTTXOP, FALSE, + &pAd->CommonCfg.MlmeTransmit); + } else { +- // Set to use 1Mbps for Adhoc beacon. ++ /* Set to use 1Mbps for Adhoc beacon. */ + HTTRANSMIT_SETTING Transmit; + Transmit.word = 0; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, TRUE, FALSE, FALSE, +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index 3a93ef6..db65188 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -45,10 +45,10 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + UCHAR *pTmpBuf; + + if (pAd->StaCfg.WpaSupplicantUP) { +- // All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon) +- // TBD : process fragmented EAPol frames ++ /* All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon) */ ++ /* TBD : process fragmented EAPol frames */ + { +- // In 802.1x mode, if the received frame is EAP-SUCCESS packet, turn on the PortSecured variable ++ /* In 802.1x mode, if the received frame is EAP-SUCCESS packet, turn on the PortSecured variable */ + if (pAd->StaCfg.IEEE8021X == TRUE && + (EAP_CODE_SUCCESS == + WpaCheckEapCode(pAd, pRxBlk->pData, +@@ -60,7 +60,7 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + + DBGPRINT_RAW(RT_DEBUG_TRACE, + ("Receive EAP-SUCCESS Packet\n")); +- //pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; ++ /*pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; */ + STA_PORT_SECURED(pAd); + + if (pAd->StaCfg.IEEE8021x_required_keys == +@@ -80,21 +80,21 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + &pAd->MacTab. + Content[BSSID_WCID]; + +- // Set key material and cipherAlg to Asic ++ /* Set key material and cipherAlg to Asic */ + AsicAddSharedKeyEntry(pAd, BSS0, + idx, + CipherAlg, + Key, NULL, + NULL); + +- // Assign group key info ++ /* Assign group key info */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + idx, + CipherAlg, + NULL); + +- // Assign pairwise key info ++ /* Assign pairwise key info */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + idx, +@@ -105,7 +105,7 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + NdisMediaStateConnected; + pAd->ExtraInfo = + GENERAL_LINK_UP; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + union { + char buf[sizeof +@@ -144,7 +144,7 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + NdisMediaStateConnected; + pAd->ExtraInfo = + GENERAL_LINK_UP; +- // need to enqueue cmd to thread ++ /* need to enqueue cmd to thread */ + RTUSBEnqueueCmdFromNdis(pAd, + OID_802_11_ADD_WEP, + TRUE, +@@ -154,8 +154,8 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + keyinfo) + + len - + 1); +-#endif // RTMP_MAC_USB // +- // For Preventing ShardKey Table is cleared by remove key procedure. ++#endif /* RTMP_MAC_USB // */ ++ /* For Preventing ShardKey Table is cleared by remove key procedure. */ + pAd->SharedKey[BSS0][idx]. + CipherAlg = CipherAlg; + pAd->SharedKey[BSS0][idx]. +@@ -179,9 +179,9 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + return; + } + } else { +- // Special DATA frame that has to pass to MLME +- // 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process +- // 2. EAPOL handshaking frames when driver supplicant enabled, pass to MLME for special process ++ /* Special DATA frame that has to pass to MLME */ ++ /* 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process */ ++ /* 2. EAPOL handshaking frames when driver supplicant enabled, pass to MLME for special process */ + { + pTmpBuf = pRxBlk->pData - LENGTH_802_11; + NdisMoveMemory(pTmpBuf, pRxBlk->pHeader, LENGTH_802_11); +@@ -207,30 +207,30 @@ VOID STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) + { + +- // non-EAP frame ++ /* non-EAP frame */ + if (!RTMPCheckWPAframe + (pAd, pEntry, pRxBlk->pData, pRxBlk->DataSize, FromWhichBSSID)) { + + { +- // drop all non-EAP DATA frame before +- // this client's Port-Access-Control is secured ++ /* drop all non-EAP DATA frame before */ ++ /* this client's Port-Access-Control is secured */ + if (pRxBlk->pHeader->FC.Wep) { +- // unsupported cipher suite ++ /* unsupported cipher suite */ + if (pAd->StaCfg.WepStatus == + Ndis802_11EncryptionDisabled) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, + pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return; + } + } else { +- // encryption in-use but receive a non-EAPOL clear text frame, drop it ++ /* encryption in-use but receive a non-EAPOL clear text frame, drop it */ + if ((pAd->StaCfg.WepStatus != + Ndis802_11EncryptionDisabled) + && (pAd->StaCfg.PortSecured == + WPA_802_1X_PORT_NOT_SECURED)) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, + pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); +@@ -240,12 +240,12 @@ VOID STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, + } + RX_BLK_CLEAR_FLAG(pRxBlk, fRX_EAP); + if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_ARALINK)) { +- // Normal legacy, AMPDU or AMSDU ++ /* Normal legacy, AMPDU or AMSDU */ + CmmRxnonRalinkFrameIndicate(pAd, pRxBlk, + FromWhichBSSID); + + } else { +- // ARALINK ++ /* ARALINK */ + CmmRxRalinkFrameIndicate(pAd, pEntry, pRxBlk, + FromWhichBSSID); + } +@@ -256,15 +256,15 @@ VOID STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, + && (pAd->CommonCfg.bDisableReordering == 0)) { + Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID); + } else { +- // Determin the destination of the EAP frame +- // to WPA state machine or upper layer ++ /* Determin the destination of the EAP frame */ ++ /* to WPA state machine or upper layer */ + STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, + FromWhichBSSID); + } + } + } + +-// For TKIP frame, calculate the MIC value ++/* For TKIP frame, calculate the MIC value */ + BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN RX_BLK * pRxBlk) + { +@@ -301,7 +301,7 @@ BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + RTMPReportMicError(pAd, pWpaKey); + } + +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, + NDIS_STATUS_FAILURE); + return FALSE; +@@ -310,14 +310,14 @@ BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-// +-// All Rx routines use RX_BLK structure to hande rx events +-// It is very important to build pRxBlk attributes +-// 1. pHeader pointer to 802.11 Header +-// 2. pData pointer to payload including LLC (just skip Header) +-// 3. set payload size including LLC to DataSize +-// 4. set some flags with RX_BLK_SET_FLAG() +-// ++/* */ ++/* All Rx routines use RX_BLK structure to hande rx events */ ++/* It is very important to build pRxBlk attributes */ ++/* 1. pHeader pointer to 802.11 Header */ ++/* 2. pData pointer to payload including LLC (just skip Header) */ ++/* 3. set payload size including LLC to DataSize */ ++/* 4. set some flags with RX_BLK_SET_FLAG() */ ++/* */ + VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +@@ -330,17 +330,17 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + UCHAR UserPriority = 0; + + { +- // before LINK UP, all DATA frames are rejected ++ /* before LINK UP, all DATA frames are rejected */ + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } +- // Drop not my BSS frames ++ /* Drop not my BSS frames */ + if (pRxD->MyBss == 0) { + { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; +@@ -354,14 +354,14 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + UCHAR *pData; + DBGPRINT(RT_DEBUG_INFO, ("bAPSDCapable\n")); + +- // Qos bit 4 ++ /* Qos bit 4 */ + pData = (PUCHAR) pHeader + LENGTH_802_11; + if ((*pData >> 4) & 0x01) { + DBGPRINT(RT_DEBUG_INFO, + ("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); + pAd->CommonCfg.bInServicePeriod = FALSE; + +- // Force driver to fall into sleep mode when rcv EOSP frame ++ /* Force driver to fall into sleep mode when rcv EOSP frame */ + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { + USHORT TbttNumToNextWakeUp; + USHORT NextDtim = +@@ -383,7 +383,7 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + TbttNumToNextWakeUp = NextDtim; + + RTMP_SET_PSM_BIT(pAd, PWR_SAVE); +- // if WMM-APSD is failed, try to disable following line ++ /* if WMM-APSD is failed, try to disable following line */ + AsicSleepThenAutoWakeup(pAd, + TbttNumToNextWakeUp); + } +@@ -395,58 +395,58 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + ("Sending another trigger frame when More Data bit is set to 1\n")); + } + } +- // Drop NULL, CF-ACK(no data), CF-POLL(no data), and CF-ACK+CF-POLL(no data) data frame +- if ((pHeader->FC.SubType & 0x04)) // bit 2 : no DATA ++ /* Drop NULL, CF-ACK(no data), CF-POLL(no data), and CF-ACK+CF-POLL(no data) data frame */ ++ if ((pHeader->FC.SubType & 0x04)) /* bit 2 : no DATA */ + { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } +- // Drop not my BSS frame (we can not only check the MyBss bit in RxD) ++ /* Drop not my BSS frame (we can not only check the MyBss bit in RxD) */ + + if (INFRA_ON(pAd)) { +- // Infrastructure mode, check address 2 for BSSID ++ /* Infrastructure mode, check address 2 for BSSID */ + if (!RTMPEqualMemory + (&pHeader->Addr2, &pAd->CommonCfg.Bssid, 6)) { +- // Receive frame not my BSSID +- // release packet ++ /* Receive frame not my BSSID */ ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } +- } else // Ad-Hoc mode or Not associated ++ } else /* Ad-Hoc mode or Not associated */ + { +- // Ad-Hoc mode, check address 3 for BSSID ++ /* Ad-Hoc mode, check address 3 for BSSID */ + if (!RTMPEqualMemory + (&pHeader->Addr3, &pAd->CommonCfg.Bssid, 6)) { +- // Receive frame not my BSSID +- // release packet ++ /* Receive frame not my BSSID */ ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } + } + +- // +- // find pEntry +- // ++ /* */ ++ /* find pEntry */ ++ /* */ + if (pRxWI->WirelessCliID < MAX_LEN_OF_MAC_TABLE) { + pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; + } else { +- // 1. release packet if infra mode +- // 2. new a pEntry if ad-hoc mode ++ /* 1. release packet if infra mode */ ++ /* 2. new a pEntry if ad-hoc mode */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } + +- // infra or ad-hoc ++ /* infra or ad-hoc */ + if (INFRA_ON(pAd)) { + RX_BLK_SET_FLAG(pRxBlk, fRX_INFRA); + ASSERT(pRxWI->WirelessCliID == BSSID_WCID); + } +- // check Atheros Client ++ /* check Atheros Client */ + if ((pEntry->bIAmBadAtheros == FALSE) && (pRxD->AMPDU == 1) + && (pHeader->FC.Retry)) { + pEntry->bIAmBadAtheros = TRUE; +@@ -461,26 +461,26 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + pRxBlk->pData = (UCHAR *) pHeader; + +- // +- // update RxBlk->pData, DataSize +- // 802.11 Header, QOS, HTC, Hw Padding +- // ++ /* */ ++ /* update RxBlk->pData, DataSize */ ++ /* 802.11 Header, QOS, HTC, Hw Padding */ ++ /* */ + +- // 1. skip 802.11 HEADER ++ /* 1. skip 802.11 HEADER */ + { + pRxBlk->pData += LENGTH_802_11; + pRxBlk->DataSize -= LENGTH_802_11; + } + +- // 2. QOS ++ /* 2. QOS */ + if (pHeader->FC.SubType & 0x08) { + RX_BLK_SET_FLAG(pRxBlk, fRX_QOS); + UserPriority = *(pRxBlk->pData) & 0x0f; +- // bit 7 in QoS Control field signals the HT A-MSDU format ++ /* bit 7 in QoS Control field signals the HT A-MSDU format */ + if ((*pRxBlk->pData) & 0x80) { + RX_BLK_SET_FLAG(pRxBlk, fRX_AMSDU); + } +- // skip QOS contorl field ++ /* skip QOS contorl field */ + pRxBlk->pData += 2; + pRxBlk->DataSize -= 2; + } +@@ -500,7 +500,7 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + RTMP_PS_POLL_ENQUEUE(pAd); + } + } +- // 3. Order bit: A-Ralink or HTC+ ++ /* 3. Order bit: A-Ralink or HTC+ */ + if (pHeader->FC.Order) { + #ifdef AGGREGATION_SUPPORT + if ((pRxWI->PHYMODE <= MODE_OFDM) +@@ -508,18 +508,18 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + RX_BLK_SET_FLAG(pRxBlk, fRX_ARALINK); + } else +-#endif // AGGREGATION_SUPPORT // ++#endif /* AGGREGATION_SUPPORT // */ + { + RX_BLK_SET_FLAG(pRxBlk, fRX_HTC); +- // skip HTC contorl field ++ /* skip HTC contorl field */ + pRxBlk->pData += 4; + pRxBlk->DataSize -= 4; + } + } +- // 4. skip HW padding ++ /* 4. skip HW padding */ + if (pRxD->L2PAD) { +- // just move pData pointer +- // because DataSize excluding HW padding ++ /* just move pData pointer */ ++ /* because DataSize excluding HW padding */ + RX_BLK_SET_FLAG(pRxBlk, fRX_PAD); + pRxBlk->pData += 2; + } +@@ -527,23 +527,23 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + if (pRxD->BA) { + RX_BLK_SET_FLAG(pRxBlk, fRX_AMPDU); + } +- // +- // Case I Process Broadcast & Multicast data frame +- // ++ /* */ ++ /* Case I Process Broadcast & Multicast data frame */ ++ /* */ + if (pRxD->Bcast || pRxD->Mcast) { + INC_COUNTER64(pAd->WlanCounters.MulticastReceivedFrameCount); + +- // Drop Mcast/Bcast frame with fragment bit on ++ /* Drop Mcast/Bcast frame with fragment bit on */ + if (pHeader->FC.MoreFrag) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; + } +- // Filter out Bcast frame which AP relayed for us ++ /* Filter out Bcast frame which AP relayed for us */ + if (pHeader->FC.FrDs + && MAC_ADDR_EQUAL(pHeader->Addr3, pAd->CurrentAddress)) { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + return; +@@ -571,8 +571,8 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + pAd->RalinkCounters.OneSecRxOkDataCnt++; + + if (!((pHeader->Frag == 0) && (pHeader->FC.MoreFrag == 0))) { +- // re-assemble the fragmented packets +- // return complete frame (pRxPacket) or NULL ++ /* re-assemble the fragmented packets */ ++ /* return complete frame (pRxPacket) or NULL */ + bFragment = TRUE; + pRxPacket = RTMPDeFragmentDataFrame(pAd, pRxBlk); + } +@@ -580,14 +580,14 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + if (pRxPacket) { + pEntry = &pAd->MacTab.Content[pRxWI->WirelessCliID]; + +- // process complete frame ++ /* process complete frame */ + if (bFragment && (pRxD->Decrypted) + && (pEntry->WepStatus == + Ndis802_11Encryption2Enabled)) { +- // Minus MIC length ++ /* Minus MIC length */ + pRxBlk->DataSize -= 8; + +- // For TKIP frame, calculate the MIC value ++ /* For TKIP frame, calculate the MIC value */ + if (STACheckTkipMICValue(pAd, pEntry, pRxBlk) == + FALSE) { + return; +@@ -598,15 +598,15 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + FromWhichBSSID); + return; + } else { +- // just return +- // because RTMPDeFragmentDataFrame() will release rx packet, +- // if packet is fragmented ++ /* just return */ ++ /* because RTMPDeFragmentDataFrame() will release rx packet, */ ++ /* if packet is fragmented */ + return; + } + } + + ASSERT(0); +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + } + +@@ -631,7 +631,7 @@ VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + /* TODO: if MoreData == 0, station can go to sleep */ + +- // We should collect RSSI not only U2M data but also my beacon ++ /* We should collect RSSI not only U2M data but also my beacon */ + if ((pHeader->FC.SubType == SUBTYPE_BEACON) + && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) + && (pAd->RxAnt.EvaluatePeriod == 0)) { +@@ -641,7 +641,7 @@ VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + pAd->StaCfg.LastSNR1 = (UCHAR) (pRxWI->SNR1); + } + +- // First check the size, it MUST not exceed the mlme queue size ++ /* First check the size, it MUST not exceed the mlme queue size */ + if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("STAHandleRxMgmtFrame: frame too large, size = %d \n", pRxWI->MPDUtotalByteCount)); + break; +@@ -712,7 +712,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + + RxProcessed = RxPending = 0; + +- // process whole rx ring ++ /* process whole rx ring */ + while (1) { + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF | +@@ -724,36 +724,36 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + } + #ifdef RTMP_MAC_PCI + if (RxProcessed++ > MAX_RX_PROCESS_CNT) { +- // need to reschedule rx handle ++ /* need to reschedule rx handle */ + bReschedule = TRUE; + break; + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- RxProcessed++; // test ++ RxProcessed++; /* test */ + +- // 1. allocate a new data packet into rx ring to replace received packet +- // then processing the received packet +- // 2. the callee must take charge of release of packet +- // 3. As far as driver is concerned , +- // the rx packet must +- // a. be indicated to upper layer or +- // b. be released if it is discarded ++ /* 1. allocate a new data packet into rx ring to replace received packet */ ++ /* then processing the received packet */ ++ /* 2. the callee must take charge of release of packet */ ++ /* 3. As far as driver is concerned , */ ++ /* the rx packet must */ ++ /* a. be indicated to upper layer or */ ++ /* b. be released if it is discarded */ + pRxPacket = + GetPacketFromRxRing(pAd, &(RxCell.RxD), &bReschedule, + &RxPending); + if (pRxPacket == NULL) { +- // no more packet to process ++ /* no more packet to process */ + break; + } +- // get rx ring descriptor ++ /* get rx ring descriptor */ + pRxD = &(RxCell.RxD); +- // get rx data buffer ++ /* get rx data buffer */ + pData = GET_OS_PKT_DATAPTR(pRxPacket); + pRxWI = (PRXWI_STRUC) pData; + pHeader = (PHEADER_802_11) (pData + RXWI_SIZE); + +- // build RxCell ++ /* build RxCell */ + RxCell.pRxWI = pRxWI; + RxCell.pHeader = pHeader; + RxCell.pRxPacket = pRxPacket; +@@ -761,7 +761,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + RxCell.DataSize = pRxWI->MPDUtotalByteCount; + RxCell.Flags = 0; + +- // Increase Total receive byte counter after real data received no mater any error or not ++ /* Increase Total receive byte counter after real data received no mater any error or not */ + pAd->RalinkCounters.ReceivedByteCount += + pRxWI->MPDUtotalByteCount; + pAd->RalinkCounters.OneSecReceivedByteCount += +@@ -780,32 +780,32 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + + /* STARxDoneInterruptHandle() is called in rtusb_bulk.c */ + +- // Check for all RxD errors ++ /* Check for all RxD errors */ + Status = RTMPCheckRxError(pAd, pHeader, pRxWI, pRxD); + +- // Handle the received frame ++ /* Handle the received frame */ + if (Status == NDIS_STATUS_SUCCESS) { + switch (pHeader->FC.Type) { +- // CASE I, receive a DATA frame ++ /* CASE I, receive a DATA frame */ + case BTYPE_DATA: + { +- // process DATA frame ++ /* process DATA frame */ + STAHandleRxDataFrame(pAd, &RxCell); + } + break; +- // CASE II, receive a MGMT frame ++ /* CASE II, receive a MGMT frame */ + case BTYPE_MGMT: + { + STAHandleRxMgmtFrame(pAd, &RxCell); + } + break; +- // CASE III. receive a CNTL frame ++ /* CASE III. receive a CNTL frame */ + case BTYPE_CNTL: + { + STAHandleRxControlFrame(pAd, &RxCell); + } + break; +- // discard other type ++ /* discard other type */ + default: + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); +@@ -813,7 +813,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + } + } else { + pAd->Counters8023.RxErrors++; +- // discard this frame ++ /* discard this frame */ + RELEASE_NDIS_PACKET(pAd, pRxPacket, + NDIS_STATUS_FAILURE); + } +@@ -872,15 +872,15 @@ VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, + || RTMP_TEST_FLAG(pAd, + fRTMP_ADAPTER_HALT_IN_PROGRESS) + || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) { +- // Drop send request since hardware is in reset state ++ /* Drop send request since hardware is in reset state */ + break; + } else if (!INFRA_ON(pAd) && !ADHOC_ON(pAd)) { +- // Drop send request since there are no physical connection yet ++ /* Drop send request since there are no physical connection yet */ + break; + } else { +- // Record that orignal packet source is from NDIS layer,so that +- // later on driver knows how to release this NDIS PACKET +- RTMP_SET_PACKET_WCID(pPacket, 0); // this field is useless when in STA mode ++ /* Record that orignal packet source is from NDIS layer,so that */ ++ /* later on driver knows how to release this NDIS PACKET */ ++ RTMP_SET_PACKET_WCID(pPacket, 0); /* this field is useless when in STA mode */ + RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS); + NDIS_SET_PACKET_STATUS(pPacket, + NDIS_STATUS_PENDING); +@@ -896,7 +896,7 @@ VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + } + +- // Dequeue outgoing frames from TxSwQueue[] and process it ++ /* Dequeue outgoing frames from TxSwQueue[] and process it */ + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + + } +@@ -934,16 +934,16 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + UCHAR FlgIsIP = 0; + UCHAR Rate; + +- // Prepare packet information structure for buffer descriptor +- // chained within a single NDIS packet. ++ /* Prepare packet information structure for buffer descriptor */ ++ /* chained within a single NDIS packet. */ + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + + if (pSrcBufVA == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("STASendPacket --> pSrcBufVA == NULL !!!SrcBufLen=%x\n", + SrcBufLen)); +- // Resourece is low, system did not allocate virtual address +- // return NDIS_STATUS_FAILURE directly to upper layer ++ /* Resourece is low, system did not allocate virtual address */ ++ /* return NDIS_STATUS_FAILURE directly to upper layer */ + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return NDIS_STATUS_FAILURE; + } +@@ -954,8 +954,8 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return (NDIS_STATUS_FAILURE); + } +- // In HT rate adhoc mode, A-MPDU is often used. So need to lookup BA Table and MAC Entry. +- // Note multicast packets in adhoc also use BSSID_WCID index. ++ /* In HT rate adhoc mode, A-MPDU is often used. So need to lookup BA Table and MAC Entry. */ ++ /* Note multicast packets in adhoc also use BSSID_WCID index. */ + { + if (INFRA_ON(pAd)) { + { +@@ -978,8 +978,8 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + DBGPRINT(RT_DEBUG_ERROR, + ("STASendPacket->Cannot find pEntry(%2x:%2x:%2x:%2x:%2x:%2x) in MacTab!\n", + PRINT_MAC(pSrcBufVA))); +- // Resourece is low, system did not allocate virtual address +- // return NDIS_STATUS_FAILURE directly to upper layer ++ /* Resourece is low, system did not allocate virtual address */ ++ /* return NDIS_STATUS_FAILURE directly to upper layer */ + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return NDIS_STATUS_FAILURE; + } +@@ -988,14 +988,14 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + ) { + RTMP_SET_PACKET_WCID(pPacket, (UCHAR) pEntry->Aid); + } +- // +- // Check the Ethernet Frame type of this packet, and set the RTMP_SET_PACKET_SPECIFIC flags. +- // Here we set the PACKET_SPECIFIC flags(LLC, VLAN, DHCP/ARP, EAPOL). ++ /* */ ++ /* Check the Ethernet Frame type of this packet, and set the RTMP_SET_PACKET_SPECIFIC flags. */ ++ /* Here we set the PACKET_SPECIFIC flags(LLC, VLAN, DHCP/ARP, EAPOL). */ + RTMPCheckEtherType(pAd, pPacket); + +- // +- // WPA 802.1x secured port control - drop all non-802.1x frame before port secured +- // ++ /* */ ++ /* WPA 802.1x secured port control - drop all non-802.1x frame before port secured */ ++ /* */ + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +@@ -1013,30 +1013,30 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + return (NDIS_STATUS_FAILURE); + } + +- // STEP 1. Decide number of fragments required to deliver this MSDU. +- // The estimation here is not very accurate because difficult to +- // take encryption overhead into consideration here. The result +- // "NumberOfFrag" is then just used to pre-check if enough free +- // TXD are available to hold this MSDU. ++ /* STEP 1. Decide number of fragments required to deliver this MSDU. */ ++ /* The estimation here is not very accurate because difficult to */ ++ /* take encryption overhead into consideration here. The result */ ++ /* "NumberOfFrag" is then just used to pre-check if enough free */ ++ /* TXD are available to hold this MSDU. */ + +- if (*pSrcBufVA & 0x01) // fragmentation not allowed on multicast & broadcast ++ if (*pSrcBufVA & 0x01) /* fragmentation not allowed on multicast & broadcast */ + NumberOfFrag = 1; + else if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) +- NumberOfFrag = 1; // Aggregation overwhelms fragmentation ++ NumberOfFrag = 1; /* Aggregation overwhelms fragmentation */ + else if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED)) +- NumberOfFrag = 1; // Aggregation overwhelms fragmentation ++ NumberOfFrag = 1; /* Aggregation overwhelms fragmentation */ + else if ((pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTMIX) + || (pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTGREENFIELD)) +- NumberOfFrag = 1; // MIMO RATE overwhelms fragmentation ++ NumberOfFrag = 1; /* MIMO RATE overwhelms fragmentation */ + else { +- // The calculated "NumberOfFrag" is a rough estimation because of various +- // encryption/encapsulation overhead not taken into consideration. This number is just +- // used to make sure enough free TXD are available before fragmentation takes place. +- // In case the actual required number of fragments of an NDIS packet +- // excceeds "NumberOfFrag"caculated here and not enough free TXD available, the +- // last fragment (i.e. last MPDU) will be dropped in RTMPHardTransmit() due to out of +- // resource, and the NDIS packet will be indicated NDIS_STATUS_FAILURE. This should +- // rarely happen and the penalty is just like a TX RETRY fail. Affordable. ++ /* The calculated "NumberOfFrag" is a rough estimation because of various */ ++ /* encryption/encapsulation overhead not taken into consideration. This number is just */ ++ /* used to make sure enough free TXD are available before fragmentation takes place. */ ++ /* In case the actual required number of fragments of an NDIS packet */ ++ /* excceeds "NumberOfFrag"caculated here and not enough free TXD available, the */ ++ /* last fragment (i.e. last MPDU) will be dropped in RTMPHardTransmit() due to out of */ ++ /* resource, and the NDIS packet will be indicated NDIS_STATUS_FAILURE. This should */ ++ /* rarely happen and the penalty is just like a TX RETRY fail. Affordable. */ + + AllowFragSize = + (pAd->CommonCfg.FragmentThreshold) - LENGTH_802_11 - +@@ -1044,21 +1044,21 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + NumberOfFrag = + ((PacketInfo.TotalPacketLength - LENGTH_802_3 + + LENGTH_802_1_H) / AllowFragSize) + 1; +- // To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size ++ /* To get accurate number of fragmentation, Minus 1 if the size just match to allowable fragment size */ + if (((PacketInfo.TotalPacketLength - LENGTH_802_3 + + LENGTH_802_1_H) % AllowFragSize) == 0) { + NumberOfFrag--; + } + } + +- // Save fragment number to Ndis packet reserved field ++ /* Save fragment number to Ndis packet reserved field */ + RTMP_SET_PACKET_FRAGMENTS(pPacket, NumberOfFrag); + +- // STEP 2. Check the requirement of RTS: +- // If multiple fragment required, RTS is required only for the first fragment +- // if the fragment size large than RTS threshold +- // For RT28xx, Let ASIC send RTS/CTS +-// RTMP_SET_PACKET_RTS(pPacket, 0); ++ /* STEP 2. Check the requirement of RTS: */ ++ /* If multiple fragment required, RTS is required only for the first fragment */ ++ /* if the fragment size large than RTS threshold */ ++ /* For RT28xx, Let ASIC send RTS/CTS */ ++/* RTMP_SET_PACKET_RTS(pPacket, 0); */ + if (NumberOfFrag > 1) + RTSRequired = + (pAd->CommonCfg.FragmentThreshold > +@@ -1068,13 +1068,13 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + (PacketInfo.TotalPacketLength > + pAd->CommonCfg.RtsThreshold) ? 1 : 0; + +- // Save RTS requirement to Ndis packet reserved field ++ /* Save RTS requirement to Ndis packet reserved field */ + RTMP_SET_PACKET_RTS(pPacket, RTSRequired); + RTMP_SET_PACKET_TXRATE(pPacket, pAd->CommonCfg.TxRate); + +- // +- // STEP 3. Traffic classification. outcome = +- // ++ /* */ ++ /* STEP 3. Traffic classification. outcome = */ ++ /* */ + UserPriority = 0; + QueIdx = QID_AC_BE; + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && +@@ -1082,11 +1082,11 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + USHORT Protocol; + UCHAR LlcSnapLen = 0, Byte0, Byte1; + do { +- // get Ethernet protocol field ++ /* get Ethernet protocol field */ + Protocol = + (USHORT) ((pSrcBufVA[12] << 8) + pSrcBufVA[13]); + if (Protocol <= 1500) { +- // get Ethernet protocol field from LLC/SNAP ++ /* get Ethernet protocol field from LLC/SNAP */ + if (Sniff2BytesFromNdisBuffer + (PacketInfo.pFirstBuffer, LENGTH_802_3 + 6, + &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) +@@ -1095,17 +1095,17 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + Protocol = (USHORT) ((Byte0 << 8) + Byte1); + LlcSnapLen = 8; + } +- // always AC_BE for non-IP packet ++ /* always AC_BE for non-IP packet */ + if (Protocol != 0x0800) + break; + +- // get IP header ++ /* get IP header */ + if (Sniff2BytesFromNdisBuffer + (PacketInfo.pFirstBuffer, LENGTH_802_3 + LlcSnapLen, + &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) + break; + +- // return AC_BE if packet is not IPv4 ++ /* return AC_BE if packet is not IPv4 */ + if ((Byte0 & 0xf0) != 0x40) + break; + +@@ -1113,8 +1113,8 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + UserPriority = (Byte1 & 0xe0) >> 5; + QueIdx = MapUserPriorityToAccessCategory[UserPriority]; + +- // TODO: have to check ACM bit. apply TSPEC if ACM is ON +- // TODO: downgrade UP & QueIdx before passing ACM ++ /* TODO: have to check ACM bit. apply TSPEC if ACM is ON */ ++ /* TODO: downgrade UP & QueIdx before passing ACM */ + /* + Under WMM ACM control, we dont need to check the bit; + Or when a TSPEC is built for VO but we will change to issue +@@ -1129,7 +1129,7 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + RTMP_SET_PACKET_UP(pPacket, UserPriority); + +- // Make sure SendTxWait queue resource won't be used by other threads ++ /* Make sure SendTxWait queue resource won't be used by other threads */ + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); + if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE) { + RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); +@@ -1144,14 +1144,14 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE) && + IS_HT_STA(pEntry)) { +- //PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; ++ /*PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; */ + if (((pEntry->TXBAbitmap & (1 << UserPriority)) == 0) && + ((pEntry->BADeclineBitmap & (1 << UserPriority)) == 0) && + (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) +- // For IOT compatibility, if +- // 1. It is Ralink chip or +- // 2. It is OPEN or AES mode, +- // then BA session can be bulit. ++ /* For IOT compatibility, if */ ++ /* 1. It is Ralink chip or */ ++ /* 2. It is OPEN or AES mode, */ ++ /* then BA session can be bulit. */ + && ((pEntry->ValidAsCLI && pAd->MlmeAux.APRalinkIe != 0x0) + || (pEntry->WepStatus != Ndis802_11WEPEnabled + && pEntry->WepStatus != +@@ -1162,7 +1162,7 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + } + } + +- pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; // TODO: for debug only. to be removed ++ pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; /* TODO: for debug only. to be removed */ + return NDIS_STATUS_SUCCESS; + } + +@@ -1238,7 +1238,7 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + + return (Status); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + /* + Actually, this function used to check if the TxHardware Queue still has frame need to send. +@@ -1248,7 +1248,7 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + IN UCHAR QueIdx, + IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs) + { +- //ULONG FreeNumber = 0; ++ /*ULONG FreeNumber = 0; */ + NDIS_STATUS Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; +@@ -1287,7 +1287,7 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + + return (Status); + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + VOID RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd) + { +@@ -1300,7 +1300,7 @@ VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + ULONG Length; + PHEADER_802_11 pHeader_802_11; + +- // WPA 802.1x secured port control ++ /* WPA 802.1x secured port control */ + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) || + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || +@@ -1334,21 +1334,21 @@ VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + pAd->Sequence++; + pHeader_802_11->Sequence = pAd->Sequence; + +- // Prepare QosNull function frame ++ /* Prepare QosNull function frame */ + if (bQosNull) { + pHeader_802_11->FC.SubType = SUBTYPE_QOS_NULL; + +- // copy QOS control bytes ++ /* copy QOS control bytes */ + NullFrame[Length] = 0; + NullFrame[Length + 1] = 0; +- Length += 2; // if pad with 2 bytes for alignment, APSD will fail ++ Length += 2; /* if pad with 2 bytes for alignment, APSD will fail */ + } + + HAL_KickOutNullFrameTx(pAd, 0, NullFrame, Length); + + } + +-// IRQL = DISPATCH_LEVEL ++/* IRQL = DISPATCH_LEVEL */ + VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, + IN PUCHAR pDA, + IN unsigned int NextMpduSize, +@@ -1358,19 +1358,19 @@ VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, + { + } + +-// -------------------------------------------------------- +-// FIND ENCRYPT KEY AND DECIDE CIPHER ALGORITHM +-// Find the WPA key, either Group or Pairwise Key +-// LEAP + TKIP also use WPA key. +-// -------------------------------------------------------- +-// Decide WEP bit and cipher suite to be used. Same cipher suite should be used for whole fragment burst +-// In Cisco CCX 2.0 Leap Authentication +-// WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey +-// Instead of the SharedKey, SharedKey Length may be Zero. ++/* -------------------------------------------------------- */ ++/* FIND ENCRYPT KEY AND DECIDE CIPHER ALGORITHM */ ++/* Find the WPA key, either Group or Pairwise Key */ ++/* LEAP + TKIP also use WPA key. */ ++/* -------------------------------------------------------- */ ++/* Decide WEP bit and cipher suite to be used. Same cipher suite should be used for whole fragment burst */ ++/* In Cisco CCX 2.0 Leap Authentication */ ++/* WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey */ ++/* Instead of the SharedKey, SharedKey Length may be Zero. */ + VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- NDIS_802_11_ENCRYPTION_STATUS Cipher; // To indicate cipher used for this packet +- UCHAR CipherAlg = CIPHER_NONE; // cipher alogrithm ++ NDIS_802_11_ENCRYPTION_STATUS Cipher; /* To indicate cipher used for this packet */ ++ UCHAR CipherAlg = CIPHER_NONE; /* cipher alogrithm */ + UCHAR KeyIdx = 0xff; + PUCHAR pSrcBufVA; + PCIPHER_KEY pKey = NULL; +@@ -1378,17 +1378,17 @@ VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket); + + { +- // Select Cipher ++ /* Select Cipher */ + if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) +- Cipher = pAd->StaCfg.GroupCipher; // Cipher for Multicast or Broadcast ++ Cipher = pAd->StaCfg.GroupCipher; /* Cipher for Multicast or Broadcast */ + else +- Cipher = pAd->StaCfg.PairCipher; // Cipher for Unicast ++ Cipher = pAd->StaCfg.PairCipher; /* Cipher for Unicast */ + + if (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)) { + ASSERT(pAd->SharedKey[BSS0][0].CipherAlg <= + CIPHER_CKIP128); + +- // 4-way handshaking frame must be clear ++ /* 4-way handshaking frame must be clear */ + if (!(TX_BLK_TEST_FLAG(pTxBlk, fTX_bClearEAPFrame)) + && (pAd->SharedKey[BSS0][0].CipherAlg) + && (pAd->SharedKey[BSS0][0].KeyLen)) { +@@ -1399,7 +1399,7 @@ VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + KeyIdx = pAd->StaCfg.DefaultKeyId; + } else if ((Cipher == Ndis802_11Encryption2Enabled) || + (Cipher == Ndis802_11Encryption3Enabled)) { +- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) // multicast ++ if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))) /* multicast */ + KeyIdx = pAd->StaCfg.DefaultKeyId; + else if (pAd->SharedKey[BSS0][0].KeyLen) + KeyIdx = 0; +@@ -1419,7 +1419,7 @@ VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + WPA_802_1X_PORT_NOT_SECURED)) + CipherAlg = CIPHER_NONE; + else { +- //Header_802_11.FC.Wep = 1; ++ /*Header_802_11.FC.Wep = 1; */ + CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg; + pKey = &pAd->SharedKey[BSS0][KeyIdx]; + } +@@ -1433,11 +1433,11 @@ VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + HEADER_802_11 *pHeader_802_11; + +- // +- // MAKE A COMMON 802.11 HEADER +- // ++ /* */ ++ /* MAKE A COMMON 802.11 HEADER */ ++ /* */ + +- // normal wlan header size : 24 octets ++ /* normal wlan header size : 24 octets */ + pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); + + pHeader_802_11 = +@@ -1469,7 +1469,7 @@ VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + } + } else { + pHeader_802_11->Sequence = pAd->Sequence; +- pAd->Sequence = (pAd->Sequence + 1) & MAXSEQ; // next sequence ++ pAd->Sequence = (pAd->Sequence + 1) & MAXSEQ; /* next sequence */ + } + + pHeader_802_11->Frag = 0; +@@ -1501,9 +1501,9 @@ VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + if (pTxBlk->CipherAlg != CIPHER_NONE) + pHeader_802_11->FC.Wep = 1; + +- // ----------------------------------------------------------------- +- // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. +- // ----------------------------------------------------------------- ++ /* ----------------------------------------------------------------- */ ++ /* STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. */ ++ /* ----------------------------------------------------------------- */ + if (pAd->CommonCfg.bAPSDForcePowerSave) + pHeader_802_11->FC.PwrMgmt = PWR_SAVE; + else +@@ -1519,26 +1519,26 @@ VOID STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, + pHeader80211 = (PHEADER_802_11) pHeader; + pMacEntry = pTxBlk->pMacEntry; + +- // +- // Update the cached 802.11 HEADER +- // ++ /* */ ++ /* Update the cached 802.11 HEADER */ ++ /* */ + +- // normal wlan header size : 24 octets ++ /* normal wlan header size : 24 octets */ + pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); + +- // More Bit ++ /* More Bit */ + pHeader80211->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData); + +- // Sequence ++ /* Sequence */ + pHeader80211->Sequence = pMacEntry->TxSeq[pTxBlk->UserPriority]; + pMacEntry->TxSeq[pTxBlk->UserPriority] = + (pMacEntry->TxSeq[pTxBlk->UserPriority] + 1) & MAXSEQ; + + { +- // Check if the frame can be sent through DLS direct link interface +- // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability) ++ /* Check if the frame can be sent through DLS direct link interface */ ++ /* If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability) */ + +- // The addr3 of normal packet send from DS is Dest Mac address. ++ /* The addr3 of normal packet send from DS is Dest Mac address. */ + if (ADHOC_ON(pAd)) + COPY_MAC_ADDR(pHeader80211->Addr3, + pAd->CommonCfg.Bssid); +@@ -1547,9 +1547,9 @@ VOID STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, + pTxBlk->pSrcBufHeader); + } + +- // ----------------------------------------------------------------- +- // STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. +- // ----------------------------------------------------------------- ++ /* ----------------------------------------------------------------- */ ++ /* STEP 2. MAKE A COMMON 802.11 HEADER SHARED BY ENTIRE FRAGMENT BURST. Fill sequence later. */ ++ /* ----------------------------------------------------------------- */ + if (pAd->CommonCfg.bAPSDForcePowerSave) + pHeader80211->FC.PwrMgmt = PWR_SAVE; + else +@@ -1571,29 +1571,29 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +- // steal "order" bit to mark "aggregation" ++ /* steal "order" bit to mark "aggregation" */ + pHeader_802_11->FC.Order = 1; + +- // skip common header ++ /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + + if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { +- // +- // build QOS Control bytes +- // ++ /* */ ++ /* build QOS Control bytes */ ++ /* */ + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + + *(pHeaderBufPtr + 1) = 0; + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- // padding at front of LLC header. LLC header should at 4-bytes aligment. ++ /* padding at front of LLC header. LLC header should at 4-bytes aligment. */ + pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + +- // For RA Aggregation, +- // put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format ++ /* For RA Aggregation, */ ++ /* put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format */ + pQEntry = pTxBlk->TxPacketList.Head; + pNextPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); + nextBufLen = GET_OS_PKT_LEN(pNextPacket); +@@ -1613,7 +1613,7 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + static inline PUCHAR STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, + IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; //, pSaveBufPtr; ++ PUCHAR pHeaderBufPtr; /*, pSaveBufPtr; */ + HEADER_802_11 *pHeader_802_11; + + STAFindCipherAlgorithm(pAd, pTxBlk); +@@ -1622,31 +1622,31 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +- // skip common header ++ /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + +- // +- // build QOS Control bytes +- // ++ /* */ ++ /* build QOS Control bytes */ ++ /* */ + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + +- // +- // A-MSDU packet +- // ++ /* */ ++ /* A-MSDU packet */ ++ /* */ + *pHeaderBufPtr |= 0x80; + + *(pHeaderBufPtr + 1) = 0; + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + +- //pSaveBufPtr = pHeaderBufPtr; ++ /*pSaveBufPtr = pHeaderBufPtr; */ + +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // +- // @@@ MpduHeaderLen excluding padding @@@ +- // ++ /* */ ++ /* padding at front of LLC header */ ++ /* LLC header should locate at 4-octets aligment */ ++ /* */ ++ /* @@@ MpduHeaderLen excluding padding @@@ */ ++ /* */ + pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); +@@ -1680,7 +1680,7 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + pMacEntry = pTxBlk->pMacEntry; + if (pMacEntry->isCached) { +- // NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! ++ /* NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! */ + NdisMoveMemory((PUCHAR) & pTxBlk-> + HeaderBuf[TXINFO_SIZE], + (PUCHAR) & pMacEntry->CachedBuf[0], +@@ -1699,26 +1699,26 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +- // skip common header ++ /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + +- // +- // build QOS Control bytes +- // ++ /* */ ++ /* build QOS Control bytes */ ++ /* */ + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + *(pHeaderBufPtr + 1) = 0; + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + +- // +- // build HTC+ +- // HTC control filed following QoS field +- // ++ /* */ ++ /* build HTC+ */ ++ /* HTC control filed following QoS field */ ++ /* */ + if ((pAd->CommonCfg.bRdg == TRUE) + && CLIENT_STATUS_TEST_FLAG(pTxBlk->pMacEntry, + fCLIENT_STATUS_RDG_CAPABLE)) { + if (pMacEntry->isCached == FALSE) { +- // mark HTC bit ++ /* mark HTC bit */ + pHeader_802_11->FC.Order = 1; + + NdisZeroMemory(pHeaderBufPtr, 4); +@@ -1727,33 +1727,33 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr += 4; + pTxBlk->MpduHeaderLen += 4; + } +- //pTxBlk->MpduHeaderLen = pHeaderBufPtr - pTxBlk->HeaderBuf - TXWI_SIZE - TXINFO_SIZE; ++ /*pTxBlk->MpduHeaderLen = pHeaderBufPtr - pTxBlk->HeaderBuf - TXWI_SIZE - TXINFO_SIZE; */ + ASSERT(pTxBlk->MpduHeaderLen >= 24); + +- // skip 802.3 header ++ /* skip 802.3 header */ + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; + pTxBlk->SrcBufLen -= LENGTH_802_3; + +- // skip vlan tag ++ /* skip vlan tag */ + if (bVLANPkt) { + pTxBlk->pSrcBufData += LENGTH_802_1Q; + pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // +- // @@@ MpduHeaderLen excluding padding @@@ +- // ++ /* */ ++ /* padding at front of LLC header */ ++ /* LLC header should locate at 4-octets aligment */ ++ /* */ ++ /* @@@ MpduHeaderLen excluding padding @@@ */ ++ /* */ + pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // ++ /* */ ++ /* Insert LLC-SNAP encapsulation - 8 octets */ ++ /* */ + EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk-> + pSrcBufData - 2, + pTxBlk-> +@@ -1762,7 +1762,7 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pSrcBufData - 2, 2); + pHeaderBufPtr += 2; +@@ -1795,7 +1795,7 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pMacEntry->isCached = TRUE; + } + +- // calculate Transmitted AMPDU count and ByteCount ++ /* calculate Transmitted AMPDU count and ByteCount */ + { + pAd->RalinkCounters.TransmittedMPDUsInAMPDUCount.u. + LowPart++; +@@ -1803,13 +1803,13 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + QuadPart += pTxBlk->SrcBufLen; + } + +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); ++ /*FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); */ + + HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber); + +- // +- // Kick out Tx +- // ++ /* */ ++ /* Kick out Tx */ ++ /* */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + +@@ -1823,7 +1823,7 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + PUCHAR pHeaderBufPtr; + USHORT FreeNumber; +- USHORT subFramePayloadLen = 0; // AMSDU Subframe length without AMSDU-Header / Padding. ++ USHORT subFramePayloadLen = 0; /* AMSDU Subframe length without AMSDU-Header / Padding. */ + USHORT totalMPDUSize = 0; + UCHAR *subFrameHeader; + UCHAR padding = 0; +@@ -1848,11 +1848,11 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + bVLANPkt = + (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); + +- // skip 802.3 header ++ /* skip 802.3 header */ + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; + pTxBlk->SrcBufLen -= LENGTH_802_3; + +- // skip vlan tag ++ /* skip vlan tag */ + if (bVLANPkt) { + pTxBlk->pSrcBufData += LENGTH_802_1Q; + pTxBlk->SrcBufLen -= LENGTH_802_1Q; +@@ -1862,7 +1862,7 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr = + STA_Build_AMSDU_Frame_Header(pAd, pTxBlk); + +- // NOTE: TxWI->MPDUtotalByteCount will be updated after final frame was handled. ++ /* NOTE: TxWI->MPDUtotalByteCount will be updated after final frame was handled. */ + RTMPWriteTxWI_Data(pAd, + (PTXWI_STRUC) (&pTxBlk-> + HeaderBuf +@@ -1881,10 +1881,10 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pTxBlk->MpduHeaderLen = padding; + } + +- // +- // A-MSDU subframe +- // DA(6)+SA(6)+Length(2) + LLC/SNAP Encap +- // ++ /* */ ++ /* A-MSDU subframe */ ++ /* DA(6)+SA(6)+Length(2) + LLC/SNAP Encap */ ++ /* */ + subFrameHeader = pHeaderBufPtr; + subFramePayloadLen = pTxBlk->SrcBufLen; + +@@ -1893,9 +1893,9 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr += LENGTH_AMSDU_SUBFRAMEHEAD; + pTxBlk->MpduHeaderLen += LENGTH_AMSDU_SUBFRAMEHEAD; + +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // ++ /* */ ++ /* Insert LLC-SNAP encapsulation - 8 octets */ ++ /* */ + EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData - 2, + pTxBlk->pExtraLlcSnapEncap); + +@@ -1905,14 +1905,14 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2, + 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + subFramePayloadLen += LENGTH_802_1_H; + } +- // update subFrame Length field ++ /* update subFrame Length field */ + subFrameHeader[12] = (subFramePayloadLen & 0xFF00) >> 8; + subFrameHeader[13] = subFramePayloadLen & 0xFF; + +@@ -1932,7 +1932,7 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + +- // calculate Transmitted AMSDU Count and ByteCount ++ /* calculate Transmitted AMSDU Count and ByteCount */ + { + pAd->RalinkCounters.TransmittedAMSDUCount.u.LowPart++; + pAd->RalinkCounters.TransmittedOctetsInAMSDU.QuadPart += +@@ -1944,9 +1944,9 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx); + HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx); + +- // +- // Kick out Tx +- // ++ /* */ ++ /* Kick out Tx */ ++ /* */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } +@@ -1985,11 +1985,11 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + +- // skip 802.3 header ++ /* skip 802.3 header */ + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; + pTxBlk->SrcBufLen -= LENGTH_802_3; + +- // skip vlan tag ++ /* skip vlan tag */ + if (bVLANPkt) { + pTxBlk->pSrcBufData += LENGTH_802_1Q; + pTxBlk->SrcBufLen -= LENGTH_802_1Q; +@@ -1998,13 +1998,13 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +- // skip common header ++ /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + + if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { +- // +- // build QOS Control bytes +- // ++ /* */ ++ /* build QOS Control bytes */ ++ /* */ + *(pHeaderBufPtr) = + ((pTxBlk->UserPriority & 0x0F) | (pAd->CommonCfg. + AckPolicy[pTxBlk-> +@@ -2013,20 +2013,20 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- // The remaining content of MPDU header should locate at 4-octets aligment ++ /* The remaining content of MPDU header should locate at 4-octets aligment */ + pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- // +- // if original Ethernet frame contains no LLC/SNAP, +- // then an extra LLC/SNAP encap is required +- // ++ /* */ ++ /* Insert LLC-SNAP encapsulation - 8 octets */ ++ /* */ ++ /* */ ++ /* if original Ethernet frame contains no LLC/SNAP, */ ++ /* then an extra LLC/SNAP encap is required */ ++ /* */ + EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, + pTxBlk->pExtraLlcSnapEncap); + if (pTxBlk->pExtraLlcSnapEncap) { +@@ -2035,9 +2035,9 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +- // skip vlan tag ++ /* skip vlan tag */ + vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pSrcBufHeader + 12 + vlan_size, + 2); +@@ -2047,24 +2047,24 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + } + +- // +- // prepare for TXWI +- // use Wcid as Key Index +- // ++ /* */ ++ /* prepare for TXWI */ ++ /* use Wcid as Key Index */ ++ /* */ + + RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]), + pTxBlk); + +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); ++ /*FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); */ + + HAL_WriteTxResource(pAd, pTxBlk, TRUE, &FreeNumber); + + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + +- // +- // Kick out Tx +- // ++ /* */ ++ /* Kick out Tx */ ++ /* */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } +@@ -2083,7 +2083,7 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + ASSERT((pTxBlk->TxPacketList.Number == 2)); + +- FirstTx = LastTxIdx = 0; // Is it ok init they as 0? ++ FirstTx = LastTxIdx = 0; /* Is it ok init they as 0? */ + while (pTxBlk->TxPacketList.Head) { + pQEntry = RemoveHeadQueue(&pTxBlk->TxPacketList); + pTxBlk->pPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); +@@ -2097,32 +2097,32 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + bVLANPkt = + (RTMP_GET_PACKET_VLAN(pTxBlk->pPacket) ? TRUE : FALSE); + +- // skip 802.3 header ++ /* skip 802.3 header */ + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; + pTxBlk->SrcBufLen -= LENGTH_802_3; + +- // skip vlan tag ++ /* skip vlan tag */ + if (bVLANPkt) { + pTxBlk->pSrcBufData += LENGTH_802_1Q; + pTxBlk->SrcBufLen -= LENGTH_802_1Q; + } + +- if (frameNum == 0) { // For first frame, we need to create the 802.11 header + padding(optional) + RA-AGG-LEN + SNAP Header ++ if (frameNum == 0) { /* For first frame, we need to create the 802.11 header + padding(optional) + RA-AGG-LEN + SNAP Header */ + + pHeaderBufPtr = + STA_Build_ARalink_Frame_Header(pAd, pTxBlk); + +- // It's ok write the TxWI here, because the TxWI->MPDUtotalByteCount +- // will be updated after final frame was handled. ++ /* It's ok write the TxWI here, because the TxWI->MPDUtotalByteCount */ ++ /* will be updated after final frame was handled. */ + RTMPWriteTxWI_Data(pAd, + (PTXWI_STRUC) (&pTxBlk-> + HeaderBuf + [TXINFO_SIZE]), + pTxBlk); + +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // ++ /* */ ++ /* Insert LLC-SNAP encapsulation - 8 octets */ ++ /* */ + EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk-> + pSrcBufData - 2, + pTxBlk-> +@@ -2132,23 +2132,23 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pSrcBufData - 2, 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } +- } else { // For second aggregated frame, we need create the 802.3 header to headerBuf, because PCI will copy it to SDPtr0. ++ } else { /* For second aggregated frame, we need create the 802.3 header to headerBuf, because PCI will copy it to SDPtr0. */ + + pHeaderBufPtr = &pTxBlk->HeaderBuf[0]; + pTxBlk->MpduHeaderLen = 0; + +- // A-Ralink sub-sequent frame header is the same as 802.3 header. +- // DA(6)+SA(6)+FrameType(2) ++ /* A-Ralink sub-sequent frame header is the same as 802.3 header. */ ++ /* DA(6)+SA(6)+FrameType(2) */ + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader, + 12); + pHeaderBufPtr += 12; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData - 2, + 2); + pHeaderBufPtr += 2; +@@ -2157,7 +2157,7 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + totalMPDUSize += pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen; + +- //FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); ++ /*FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); */ + if (frameNum == 0) + FirstTx = + HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, +@@ -2178,9 +2178,9 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, FirstTx); + HAL_LastTxIdx(pAd, pTxBlk->QueIdx, LastTxIdx); + +- // +- // Kick out Tx +- // ++ /* */ ++ /* Kick out Tx */ ++ /* */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + +@@ -2225,11 +2225,11 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + &pTxBlk->pSrcBufHeader, + &pTxBlk->SrcBufLen); + } +- // skip 802.3 header ++ /* skip 802.3 header */ + pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3; + pTxBlk->SrcBufLen -= LENGTH_802_3; + +- // skip vlan tag ++ /* skip vlan tag */ + if (bVLANPkt) { + pTxBlk->pSrcBufData += LENGTH_802_1Q; + pTxBlk->SrcBufLen -= LENGTH_802_1Q; +@@ -2238,34 +2238,34 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; + +- // skip common header ++ /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; + + if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) { +- // +- // build QOS Control bytes +- // ++ /* */ ++ /* build QOS Control bytes */ ++ /* */ + *pHeaderBufPtr = (pTxBlk->UserPriority & 0x0F); + + *(pHeaderBufPtr + 1) = 0; + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; + } +- // +- // padding at front of LLC header +- // LLC header should locate at 4-octets aligment +- // ++ /* */ ++ /* padding at front of LLC header */ ++ /* LLC header should locate at 4-octets aligment */ ++ /* */ + pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; + pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); + pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); + +- // +- // Insert LLC-SNAP encapsulation - 8 octets +- // +- // +- // if original Ethernet frame contains no LLC/SNAP, +- // then an extra LLC/SNAP encap is required +- // ++ /* */ ++ /* Insert LLC-SNAP encapsulation - 8 octets */ ++ /* */ ++ /* */ ++ /* if original Ethernet frame contains no LLC/SNAP, */ ++ /* then an extra LLC/SNAP encap is required */ ++ /* */ + EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, + pTxBlk->pExtraLlcSnapEncap); + if (pTxBlk->pExtraLlcSnapEncap) { +@@ -2273,50 +2273,50 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +- // skip vlan tag ++ /* skip vlan tag */ + vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0; +- // get 2 octets (TypeofLen) ++ /* get 2 octets (TypeofLen) */ + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pSrcBufHeader + 12 + vlan_size, 2); + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += LENGTH_802_1_H; + } + +- // If TKIP is used and fragmentation is required. Driver has to +- // append TKIP MIC at tail of the scatter buffer +- // MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC ++ /* If TKIP is used and fragmentation is required. Driver has to */ ++ /* append TKIP MIC at tail of the scatter buffer */ ++ /* MAC ASIC will only perform IV/EIV/ICV insertion but no TKIP MIC */ + if (pTxBlk->CipherAlg == CIPHER_TKIP) { + RTMPCalculateMICValue(pAd, pTxBlk->pPacket, + pTxBlk->pExtraLlcSnapEncap, pTxBlk->pKey, + 0); + +- // NOTE: DON'T refer the skb->len directly after following copy. Becasue the length is not adjust +- // to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. ++ /* NOTE: DON'T refer the skb->len directly after following copy. Becasue the length is not adjust */ ++ /* to correct lenght, refer to pTxBlk->SrcBufLen for the packet length in following progress. */ + NdisMoveMemory(pTxBlk->pSrcBufData + pTxBlk->SrcBufLen, + &pAd->PrivateInfo.Tx.MIC[0], 8); +- //skb_put((RTPKT_TO_OSPKT(pTxBlk->pPacket))->tail, 8); ++ /*skb_put((RTPKT_TO_OSPKT(pTxBlk->pPacket))->tail, 8); */ + pTxBlk->SrcBufLen += 8; + pTxBlk->TotalFrameLen += 8; + pTxBlk->CipherAlg = CIPHER_TKIP_NO_MIC; + } +- // +- // calcuate the overhead bytes that encryption algorithm may add. This +- // affects the calculate of "duration" field +- // ++ /* */ ++ /* calcuate the overhead bytes that encryption algorithm may add. This */ ++ /* affects the calculate of "duration" field */ ++ /* */ + if ((pTxBlk->CipherAlg == CIPHER_WEP64) + || (pTxBlk->CipherAlg == CIPHER_WEP128)) +- EncryptionOverhead = 8; //WEP: IV[4] + ICV[4]; ++ EncryptionOverhead = 8; /*WEP: IV[4] + ICV[4]; */ + else if (pTxBlk->CipherAlg == CIPHER_TKIP_NO_MIC) +- EncryptionOverhead = 12; //TKIP: IV[4] + EIV[4] + ICV[4], MIC will be added to TotalPacketLength ++ EncryptionOverhead = 12; /*TKIP: IV[4] + EIV[4] + ICV[4], MIC will be added to TotalPacketLength */ + else if (pTxBlk->CipherAlg == CIPHER_TKIP) +- EncryptionOverhead = 20; //TKIP: IV[4] + EIV[4] + ICV[4] + MIC[8] ++ EncryptionOverhead = 20; /*TKIP: IV[4] + EIV[4] + ICV[4] + MIC[8] */ + else if (pTxBlk->CipherAlg == CIPHER_AES) +- EncryptionOverhead = 16; // AES: IV[4] + EIV[4] + MIC[8] ++ EncryptionOverhead = 16; /* AES: IV[4] + EIV[4] + MIC[8] */ + else + EncryptionOverhead = 0; + + pTransmit = pTxBlk->pTransmit; +- // Decide the TX rate ++ /* Decide the TX rate */ + if (pTransmit->field.MODE == MODE_CCK) + pTxBlk->TxRate = pTransmit->field.MCS; + else if (pTransmit->field.MODE == MODE_OFDM) +@@ -2324,7 +2324,7 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + else + pTxBlk->TxRate = RATE_6_5; + +- // decide how much time an ACK/CTS frame will consume in the air ++ /* decide how much time an ACK/CTS frame will consume in the air */ + if (pTxBlk->TxRate <= RATE_LAST_OFDM_RATE) + AckDuration = + RTMPCalcDuration(pAd, +@@ -2334,7 +2334,7 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + else + AckDuration = RTMPCalcDuration(pAd, RATE_6_5, 14); + +- // Init the total payload length of this frame. ++ /* Init the total payload length of this frame. */ + SrcRemainingBytes = pTxBlk->SrcBufLen; + + pTxBlk->TotalFragNum = 0xff; +@@ -2345,7 +2345,7 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + FreeMpduSize -= pTxBlk->MpduHeaderLen; + +- if (SrcRemainingBytes <= FreeMpduSize) { // this is the last or only fragment ++ if (SrcRemainingBytes <= FreeMpduSize) { /* this is the last or only fragment */ + + pTxBlk->SrcBufLen = SrcRemainingBytes; + +@@ -2353,9 +2353,9 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pHeader_802_11->Duration = + pAd->CommonCfg.Dsifs + AckDuration; + +- // Indicate the lower layer that this's the last fragment. ++ /* Indicate the lower layer that this's the last fragment. */ + pTxBlk->TotalFragNum = fragNum; +- } else { // more fragment is required ++ } else { /* more fragment is required */ + + pTxBlk->SrcBufLen = FreeMpduSize; + +@@ -2384,9 +2384,9 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pAd->RalinkCounters.KickTxCount++; + pAd->RalinkCounters.OneSecTxDoneCount++; + +- // Update the frame number, remaining size of the NDIS packet payload. ++ /* Update the frame number, remaining size of the NDIS packet payload. */ + +- // space for 802.11 header. ++ /* space for 802.11 header. */ + if (fragNum == 0 && pTxBlk->pExtraLlcSnapEncap) + pTxBlk->MpduHeaderLen -= LENGTH_802_1_H; + +@@ -2394,13 +2394,13 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + SrcRemainingBytes -= pTxBlk->SrcBufLen; + pTxBlk->pSrcBufData += pTxBlk->SrcBufLen; + +- pHeader_802_11->Frag++; // increase Frag # ++ pHeader_802_11->Frag++; /* increase Frag # */ + + } while (SrcRemainingBytes > 0); + +- // +- // Kick out Tx +- // ++ /* */ ++ /* Kick out Tx */ ++ /* */ + if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } +@@ -2440,10 +2440,10 @@ NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, + NDIS_PACKET *pPacket; + PQUEUE_ENTRY pQEntry; + +- // --------------------------------------------- +- // STEP 0. DO SANITY CHECK AND SOME EARLY PREPARATION. +- // --------------------------------------------- +- // ++ /* --------------------------------------------- */ ++ /* STEP 0. DO SANITY CHECK AND SOME EARLY PREPARATION. */ ++ /* --------------------------------------------- */ ++ /* */ + ASSERT(pTxBlk->TxPacketList.Number); + if (pTxBlk->TxPacketList.Head == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -2454,23 +2454,23 @@ NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, + + pPacket = QUEUE_ENTRY_TO_PACKET(pTxBlk->TxPacketList.Head); + +- // ------------------------------------------------------------------ +- // STEP 1. WAKE UP PHY +- // outgoing frame always wakeup PHY to prevent frame lost and +- // turn off PSM bit to improve performance +- // ------------------------------------------------------------------ +- // not to change PSM bit, just send this frame out? ++ /* ------------------------------------------------------------------ */ ++ /* STEP 1. WAKE UP PHY */ ++ /* outgoing frame always wakeup PHY to prevent frame lost and */ ++ /* turn off PSM bit to improve performance */ ++ /* ------------------------------------------------------------------ */ ++ /* not to change PSM bit, just send this frame out? */ + if ((pAd->StaCfg.Psm == PWR_SAVE) + && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { + DBGPRINT_RAW(RT_DEBUG_INFO, ("AsicForceWakeup At HardTx\n")); + #ifdef RTMP_MAC_PCI + AsicForceWakeup(pAd, TRUE); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_FORCE_WAKE_UP, NULL, 0); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } +- // It should not change PSM bit, when APSD turn on. ++ /* It should not change PSM bit, when APSD turn on. */ + if ((! + (pAd->CommonCfg.bAPSDCapable + && pAd->CommonCfg.APEdcaParm.bAPSDCapable) +@@ -2504,7 +2504,7 @@ NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, + break; + default: + { +- // It should not happened! ++ /* It should not happened! */ + DBGPRINT(RT_DEBUG_ERROR, + ("Send a pacekt was not classified!! It should not happen!\n")); + while (pTxBlk->TxPacketList.Number) { +@@ -2544,7 +2544,7 @@ VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, + if (TRUE) { + announce_802_3_packet(pAd, pPacket); + } else { +- // release packet ++ /* release packet */ + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + } + } +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index 3986478..ba6eaf6 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -86,7 +86,7 @@ BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + OUT UCHAR * pHtCapabilityLen, + OUT UCHAR * pAddHtInfoLen, + OUT UCHAR * pNewExtChannelOffset, +@@ -118,10 +118,10 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + NdisMoveMemory(pAid, &pFrame->Octet[4], 2); + Length += 2; + +- // Aid already swaped byte order in RTMPFrameEndianChange() for big endian platform +- *pAid = (*pAid) & 0x3fff; // AID is low 14-bit ++ /* Aid already swaped byte order in RTMPFrameEndianChange() for big endian platform */ ++ *pAid = (*pAid) & 0x3fff; /* AID is low 14-bit */ + +- // -- get supported rates from payload and advance the pointer ++ /* -- get supported rates from payload and advance the pointer */ + IeType = pFrame->Octet[6]; + *pSupRateLen = pFrame->Octet[7]; + if ((IeType != IE_SUPP_RATES) +@@ -134,11 +134,11 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + + Length = Length + 2 + *pSupRateLen; + +- // many AP implement proprietary IEs in non-standard order, we'd better +- // tolerate mis-ordered IEs to get best compatibility ++ /* many AP implement proprietary IEs in non-standard order, we'd better */ ++ /* tolerate mis-ordered IEs to get best compatibility */ + pEid = (PEID_STRUCT) & pFrame->Octet[8 + (*pSupRateLen)]; + +- // get variable fields from payload and advance the pointer ++ /* get variable fields from payload and advance the pointer */ + while ((Length + 2 + pEid->Len) <= MsgLen) { + switch (pEid->Eid) { + case IE_EXT_SUPP_RATES: +@@ -150,7 +150,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + + case IE_HT_CAP: + case IE_HT_CAP2: +- if (pEid->Len >= SIZE_HT_CAP_IE) //Note: allow extension.!! ++ if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension.!! */ + { + NdisMoveMemory(pHtCapability, pEid->Octet, + SIZE_HT_CAP_IE); +@@ -172,8 +172,8 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + case IE_ADD_HT: + case IE_ADD_HT2: + if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { +- // This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only +- // copy first sizeof(ADD_HT_INFO_IE) ++ /* This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only */ ++ /* copy first sizeof(ADD_HT_INFO_IE) */ + NdisMoveMemory(pAddHtInfo, pEid->Octet, + sizeof(ADD_HT_INFO_IE)); + +@@ -201,31 +201,31 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + break; + + case IE_VENDOR_SPECIFIC: +- // handle WME PARAMTER ELEMENT ++ /* handle WME PARAMTER ELEMENT */ + if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) + && (pEid->Len == 24)) { + PUCHAR ptr; + int i; + +- // parsing EDCA parameters ++ /* parsing EDCA parameters */ + pEdcaParm->bValid = TRUE; +- pEdcaParm->bQAck = FALSE; // pEid->Octet[0] & 0x10; +- pEdcaParm->bQueueRequest = FALSE; // pEid->Octet[0] & 0x20; +- pEdcaParm->bTxopRequest = FALSE; // pEid->Octet[0] & 0x40; +- //pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; ++ pEdcaParm->bQAck = FALSE; /* pEid->Octet[0] & 0x10; */ ++ pEdcaParm->bQueueRequest = FALSE; /* pEid->Octet[0] & 0x20; */ ++ pEdcaParm->bTxopRequest = FALSE; /* pEid->Octet[0] & 0x40; */ ++ /*pEdcaParm->bMoreDataAck = FALSE; // pEid->Octet[0] & 0x80; */ + pEdcaParm->EdcaUpdateCount = + pEid->Octet[6] & 0x0f; + pEdcaParm->bAPSDCapable = + (pEid->Octet[6] & 0x80) ? 1 : 0; + ptr = (PUCHAR) & pEid->Octet[8]; + for (i = 0; i < 4; i++) { +- UCHAR aci = (*ptr & 0x60) >> 5; // b5~6 is AC INDEX +- pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); // b5 is ACM +- pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; // b0~3 is AIFSN +- pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; // b0~4 is Cwmin +- pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; // b5~8 is Cwmax +- pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); // in unit of 32-us +- ptr += 4; // point to next AC ++ UCHAR aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ ++ pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); /* b5 is ACM */ ++ pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; /* b0~3 is AIFSN */ ++ pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; /* b0~4 is Cwmin */ ++ pEdcaParm->Cwmax[aci] = *(ptr + 1) >> 4; /* b5~8 is Cwmax */ ++ pEdcaParm->Txop[aci] = *(ptr + 2) + 256 * (*(ptr + 3)); /* in unit of 32-us */ ++ ptr += 4; /* point to next AC */ + } + } + break; +@@ -280,7 +280,7 @@ BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, + + Idx = *pSsidLen + 2; + +- // -- get supported rates from payload and advance the pointer ++ /* -- get supported rates from payload and advance the pointer */ + IeType = pFrame->Octet[Idx]; + RateLen = pFrame->Octet[Idx + 1]; + if (IeType != IE_SUPP_RATES) { +@@ -319,15 +319,15 @@ BOOLEAN GetTimBit(IN CHAR * Ptr, + IdxPtr++; + *TimLen = *IdxPtr; + +- // get DTIM Count from TIM element ++ /* get DTIM Count from TIM element */ + IdxPtr++; + *DtimCount = *IdxPtr; + +- // get DTIM Period from TIM element ++ /* get DTIM Period from TIM element */ + IdxPtr++; + *DtimPeriod = *IdxPtr; + +- // get Bitmap Control from TIM element ++ /* get Bitmap Control from TIM element */ + IdxPtr++; + BitCntl = *IdxPtr; + +@@ -336,20 +336,20 @@ BOOLEAN GetTimBit(IN CHAR * Ptr, + else + *BcastFlag = FALSE; + +- // Parse Partial Virtual Bitmap from TIM element +- N1 = BitCntl & 0xfe; // N1 is the first bitmap byte# +- N2 = *TimLen - 4 + N1; // N2 is the last bitmap byte# ++ /* Parse Partial Virtual Bitmap from TIM element */ ++ N1 = BitCntl & 0xfe; /* N1 is the first bitmap byte# */ ++ N2 = *TimLen - 4 + N1; /* N2 is the last bitmap byte# */ + + if ((Aid < (N1 << 3)) || (Aid >= ((N2 + 1) << 3))) + *MessageToMe = FALSE; + else { +- MyByte = (Aid >> 3) - N1; // my byte position in the bitmap byte-stream ++ MyByte = (Aid >> 3) - N1; /* my byte position in the bitmap byte-stream */ + MyBit = Aid % 16 - ((MyByte & 0x01) ? 8 : 0); + + IdxPtr += (MyByte + 1); + +- //if (*IdxPtr) +- // DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr)); ++ /*if (*IdxPtr) */ ++ /* DBGPRINT(RT_DEBUG_WARN, ("TIM bitmap = 0x%02x\n", *IdxPtr)); */ + + if (*IdxPtr & (0x01 << MyBit)) + *MessageToMe = TRUE; +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index 56bb797..12ab2d4 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -37,7 +37,7 @@ + */ + #include "../rt_config.h" + +-#define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) // 2 sec ++#define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) /* 2 sec */ + + /* + ========================================================================== +@@ -57,7 +57,7 @@ VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) Drop, SYNC_IDLE, + SYNC_MACHINE_BASE); + +- // column 1 ++ /* column 1 */ + StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_SCAN_REQ, + (STATE_MACHINE_FUNC) MlmeScanReqAction); + StateMachineSetAction(Sm, SYNC_IDLE, MT2_MLME_JOIN_REQ, +@@ -69,7 +69,7 @@ VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(Sm, SYNC_IDLE, MT2_PEER_PROBE_REQ, + (STATE_MACHINE_FUNC) PeerProbeReqAction); + +- //column 2 ++ /*column 2 */ + StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_SCAN_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenScan); + StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_MLME_JOIN_REQ, +@@ -81,7 +81,7 @@ VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(Sm, JOIN_WAIT_BEACON, MT2_BEACON_TIMEOUT, + (STATE_MACHINE_FUNC) BeaconTimeoutAtJoinAction); + +- // column 3 ++ /* column 3 */ + StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_SCAN_REQ, + (STATE_MACHINE_FUNC) InvalidStateWhenScan); + StateMachineSetAction(Sm, SCAN_LISTEN, MT2_MLME_JOIN_REQ, +@@ -95,7 +95,7 @@ VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + StateMachineSetAction(Sm, SCAN_LISTEN, MT2_SCAN_TIMEOUT, + (STATE_MACHINE_FUNC) ScanTimeoutAction); + +- // timer init ++ /* timer init */ + RTMPInitTimer(pAd, &pAd->MlmeAux.BeaconTimer, + GET_TIMER_FUNCTION(BeaconTimeout), pAd, FALSE); + RTMPInitTimer(pAd, &pAd->MlmeAux.ScanTimer, +@@ -119,8 +119,8 @@ VOID BeaconTimeout(IN PVOID SystemSpecific1, + + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeout\n")); + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) + return; + +@@ -157,15 +157,15 @@ VOID ScanTimeout(IN PVOID SystemSpecific1, + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +- // Do nothing if the driver is starting halt state. +- // This might happen when timer already been fired before cancel timer with mlmehalt ++ /* Do nothing if the driver is starting halt state. */ ++ /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) + return; + + if (MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_SCAN_TIMEOUT, 0, NULL)) { + RTMP_MLME_HANDLER(pAd); + } else { +- // To prevent SyncMachine.CurrState is SCAN_LISTEN forever. ++ /* To prevent SyncMachine.CurrState is SCAN_LISTEN forever. */ + pAd->MlmeAux.Channel = 0; + ScanNextChannel(pAd); + if (pAd->CommonCfg.bWirelessEvent) { +@@ -193,14 +193,14 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + PUCHAR pOutBuffer = NULL; + NDIS_STATUS NStatus; + +- // Check the total scan tries for one single OID command +- // If this is the CCX 2.0 Case, skip that! ++ /* Check the total scan tries for one single OID command */ ++ /* If this is the CCX 2.0 Case, skip that! */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP)) { + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - MlmeScanReqAction before Startup\n")); + return; + } +- // Increase the scan retry counters. ++ /* Increase the scan retry counters. */ + pAd->StaCfg.ScanCnt++; + + #ifdef RTMP_MAC_PCI +@@ -219,24 +219,24 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // first check the parameter sanity ++ /* first check the parameter sanity */ + if (MlmeScanReqSanity(pAd, + Elem->Msg, + Elem->MsgLen, + &BssType, (PCHAR) Ssid, &SsidLen, &ScanType)) { + +- // Check for channel load and noise hist request +- // Suspend MSDU only at scan request, not the last two mentioned +- // Suspend MSDU transmission here ++ /* Check for channel load and noise hist request */ ++ /* Suspend MSDU only at scan request, not the last two mentioned */ ++ /* Suspend MSDU transmission here */ + RTMPSuspendMsduTransmission(pAd); + +- // +- // To prevent data lost. +- // Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. +- // And should send an NULL data with turned PSM bit off to AP, when scan progress done +- // ++ /* */ ++ /* To prevent data lost. */ ++ /* Send an NULL data with turned PSM bit on to current associated AP before SCAN progress. */ ++ /* And should send an NULL data with turned PSM bit off to AP, when scan progress done */ ++ /* */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + && (INFRA_ON(pAd))) { + NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); +@@ -250,7 +250,7 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pHdr80211->FC.Type = BTYPE_DATA; + pHdr80211->FC.PwrMgmt = PWR_SAVE; + +- // Send using priority queue ++ /* Send using priority queue */ + MiniportMMRequest(pAd, 0, pOutBuffer, + sizeof(HEADER_802_11)); + DBGPRINT(RT_DEBUG_TRACE, +@@ -262,21 +262,21 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + NdisGetSystemUpTime(&Now); + pAd->StaCfg.LastScanTime = Now; +- // reset all the timers ++ /* reset all the timers */ + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); + +- // record desired BSS parameters ++ /* record desired BSS parameters */ + pAd->MlmeAux.BssType = BssType; + pAd->MlmeAux.ScanType = ScanType; + pAd->MlmeAux.SsidLen = SsidLen; + NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); + +- // start from the first channel ++ /* start from the first channel */ + pAd->MlmeAux.Channel = FirstChannel(pAd); + +- // Let BBP register at 20MHz to do scan ++ /* Let BBP register at 20MHz to do scan */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); +@@ -324,18 +324,18 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) { + RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +- // reset all the timers ++ /* reset all the timers */ + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); + + pBss = &pAd->MlmeAux.SsidBssTab.BssEntry[pInfo->BssIdx]; + +- // record the desired SSID & BSSID we're waiting for ++ /* record the desired SSID & BSSID we're waiting for */ + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pBss->Bssid); + +- // If AP's SSID is not hidden, it is OK for updating ssid to MlmeAux again. ++ /* If AP's SSID is not hidden, it is OK for updating ssid to MlmeAux again. */ + if (pBss->Hidden == 0) { + RTMPZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pBss->Ssid, pBss->SsidLen); +@@ -346,14 +346,14 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.Channel = pBss->Channel; + pAd->MlmeAux.CentralChannel = pBss->CentralChannel; + +- // Let BBP register at 20MHz to do scan ++ /* Let BBP register at 20MHz to do scan */ + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); + BBPValue &= (~0x18); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue); + + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BBP R4 to 20MHz.l\n")); + +- // switch channel and waiting for beacon timer ++ /* switch channel and waiting for beacon timer */ + AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE); + AsicLockChannel(pAd, pAd->MlmeAux.Channel); + RTMPSetTimer(&pAd->MlmeAux.BeaconTimer, JOIN_TIMEOUT); +@@ -363,15 +363,15 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (pAd->MlmeAux.Channel > 14) && + RadarChannelCheck(pAd, pAd->MlmeAux.Channel)) + ) { +- // +- // We can't send any Probe request frame to meet 802.11h. +- // ++ /* */ ++ /* We can't send any Probe request frame to meet 802.11h. */ ++ /* */ + if (pBss->Hidden == 0) + break; + } +- // +- // send probe request +- // ++ /* */ ++ /* send probe request */ ++ /* */ + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); + if (NStatus == NDIS_STATUS_SUCCESS) { + if (pAd->MlmeAux.Channel <= 14) { +@@ -380,9 +380,9 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pExtRate = pAd->CommonCfg.ExtRate; + ExtRateLen = pAd->CommonCfg.ExtRateLen; + } else { +- // +- // Overwrite Support Rate, CCK rate are not allowed +- // ++ /* */ ++ /* Overwrite Support Rate, CCK rate are not allowed */ ++ /* */ + pSupRate = ASupRate; + SupRateLen = ASupRateLen; + ExtRateLen = 0; +@@ -442,14 +442,14 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen; + BOOLEAN TimerCancelled; + +- // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ /* New for WPA security suites */ ++ UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + LARGE_INTEGER TimeStamp; + BOOLEAN Privacy; + USHORT Status; + +- // Init Variable IE structure ++ /* Init Variable IE structure */ + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; + TimeStamp.u.LowPart = 0; +@@ -457,20 +457,20 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if (MlmeStartReqSanity + (pAd, Elem->Msg, Elem->MsgLen, (PCHAR) Ssid, &SsidLen)) { +- // reset all the timers ++ /* reset all the timers */ + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); + +- // +- // Start a new IBSS. All IBSS parameters are decided now.... +- // ++ /* */ ++ /* Start a new IBSS. All IBSS parameters are decided now.... */ ++ /* */ + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeStartReqAction - Start a new IBSS. All IBSS parameters are decided now.... \n")); + pAd->MlmeAux.BssType = BSS_ADHOC; + NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, SsidLen); + pAd->MlmeAux.SsidLen = SsidLen; + +- // generate a radom number as BSSID ++ /* generate a radom number as BSSID */ + MacAddrRandomBssid(pAd, pAd->MlmeAux.Bssid); + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeStartReqAction - generate a radom number as BSSID \n")); +@@ -507,7 +507,7 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &pAd->MlmeAux.HtCapability, + &pAd->MlmeAux.AddHtInfo); + pAd->MlmeAux.HtCapabilityLen = sizeof(HT_CAPABILITY_IE); +- // Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here. ++ /* Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here. */ + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n")); + } else { +@@ -516,7 +516,7 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo. + MCSSet[0], 16); + } +- // temporarily not support QOS in IBSS ++ /* temporarily not support QOS in IBSS */ + NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); + NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, + sizeof(QBSS_LOAD_PARM)); +@@ -570,17 +570,17 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; + ULONG RalinkIe; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; + +- // NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); ++ /* NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); */ + pFrame = (PFRAME_802_11) Elem->Msg; +- // Init Variable IE structure ++ /* Init Variable IE structure */ + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; + +@@ -659,7 +659,7 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + } +- // sanity check fail, ignored ++ /* sanity check fail, ignored */ + } + + /* +@@ -688,19 +688,19 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; + USHORT Status; +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + ULONG RalinkIe; + ULONG Idx; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; + UCHAR CentralChannel; + BOOLEAN bAllowNrate = FALSE; + +- // Init Variable IE structure ++ /* Init Variable IE structure */ + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; + RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +@@ -743,18 +743,18 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &AddHtInfoLen, + &AddHtInfo, + &NewExtChannelOffset, &LenVIE, pVIE)) { +- // Disqualify 11b only adhoc when we are in 11g only adhoc mode ++ /* Disqualify 11b only adhoc when we are in 11g only adhoc mode */ + if ((BssType == BSS_ADHOC) + && (pAd->CommonCfg.PhyMode == PHY_11G) + && ((SupRateLen + ExtRateLen) < 12)) + return; + +- // BEACON from desired BSS/IBSS found. We should be able to decide most +- // BSS parameters here. +- // Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION? +- // Do we need to receover back all parameters belonging to previous BSS? +- // A. Should be not. There's no back-door recover to previous AP. It still need +- // a new JOIN-AUTH-ASSOC sequence. ++ /* BEACON from desired BSS/IBSS found. We should be able to decide most */ ++ /* BSS parameters here. */ ++ /* Q. But what happen if this JOIN doesn't conclude a successful ASSOCIATEION? */ ++ /* Do we need to receover back all parameters belonging to previous BSS? */ ++ /* A. Should be not. There's no back-door recover to previous AP. It still need */ ++ /* a new JOIN-AUTH-ASSOC sequence. */ + if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Bssid)) { + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - receive desired BEACON at JoinWaitBeacon... Channel = %d\n", +@@ -762,7 +762,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, + &TimerCancelled); + +- // Update RSSI to prevent No signal display when cards first initialized ++ /* Update RSSI to prevent No signal display when cards first initialized */ + pAd->StaCfg.RssiSample.LastRssi0 = + ConvertToRssi(pAd, Elem->Rssi0, RSSI_0); + pAd->StaCfg.RssiSample.LastRssi1 = +@@ -782,10 +782,10 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->StaCfg.RssiSample.AvgRssi2X8 = + pAd->StaCfg.RssiSample.AvgRssi2 << 3; + +- // +- // We need to check if SSID only set to any, then we can record the current SSID. +- // Otherwise will cause hidden SSID association failed. +- // ++ /* */ ++ /* We need to check if SSID only set to any, then we can record the current SSID. */ ++ /* Otherwise will cause hidden SSID association failed. */ ++ /* */ + if (pAd->MlmeAux.SsidLen == 0) { + NdisMoveMemory(pAd->MlmeAux.Ssid, Ssid, + SsidLen); +@@ -858,9 +858,9 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CapabilityInfo; + } + } else { +- // +- // Multiple SSID case, used correct CapabilityInfo +- // ++ /* */ ++ /* Multiple SSID case, used correct CapabilityInfo */ ++ /* */ + CapabilityInfo = + pAd->ScanTab.BssEntry[Idx]. + CapabilityInfo; +@@ -877,8 +877,8 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.CfpMaxDuration = Cf.CfpMaxDuration; + pAd->MlmeAux.APRalinkIe = RalinkIe; + +- // Copy AP's supported rate to MlmeAux for creating assoication request +- // Also filter out not supported rate ++ /* Copy AP's supported rate to MlmeAux for creating assoication request */ ++ /* Also filter out not supported rate */ + pAd->MlmeAux.SupRateLen = SupRateLen; + NdisMoveMemory(pAd->MlmeAux.SupRate, SupRate, + SupRateLen); +@@ -905,14 +905,14 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + RTMPZeroMemory(&pAd->MlmeAux.HtCapability, + SIZE_HT_CAP_IE); +- // filter out un-supported ht rates ++ /* filter out un-supported ht rates */ + if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) + && ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + && (bAllowNrate))) { + RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, + &AddHtInfo, SIZE_ADD_HT_INFO_IE); + +- // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability ++ /* StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability */ + NdisMoveMemory(pAd->StaActive.SupportedPhyInfo. + MCSSet, HtCapability.MCSSet, 16); + pAd->MlmeAux.NewExtChannelOffset = +@@ -925,7 +925,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + bPreNHt = TRUE; + RTMPCheckHt(pAd, BSSID_WCID, &HtCapability, + &AddHtInfo); +- // Copy AP Parameter to StaActive. This is also in LinkUp. ++ /* Copy AP Parameter to StaActive. This is also in LinkUp. */ + DBGPRINT(RT_DEBUG_TRACE, + ("PeerBeaconAtJoinAction! (MpduDensity=%d, MaxRAmpduFactor=%d, BW=%d)\n", + pAd->StaActive.SupportedHtPhy. +@@ -936,7 +936,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if (AddHtInfoLen > 0) { + CentralChannel = AddHtInfo.ControlChan; +- // Check again the Bandwidth capability of this AP. ++ /* Check again the Bandwidth capability of this AP. */ + if ((AddHtInfo.ControlChan > 2) + && (AddHtInfo.AddHtInfo. + ExtChanOffset == EXTCHA_BELOW) +@@ -952,7 +952,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CentralChannel = + AddHtInfo.ControlChan + 2; + } +- // Check Error . ++ /* Check Error . */ + if (pAd->MlmeAux.CentralChannel != + CentralChannel) + DBGPRINT(RT_DEBUG_ERROR, +@@ -970,7 +970,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + } else { +- // To prevent error, let legacy AP must have same CentralChannel and Channel. ++ /* To prevent error, let legacy AP must have same CentralChannel and Channel. */ + if ((HtCapabilityLen == 0) + && (PreNHtCapabilityLen == 0)) + pAd->MlmeAux.CentralChannel = +@@ -988,7 +988,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + RTMPUpdateMlmeRate(pAd); + +- // copy QOS related information ++ /* copy QOS related information */ + if ((pAd->CommonCfg.bWmmCapable) + || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + ) { +@@ -1015,10 +1015,10 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.ExtRateLen)); + + if (AironetCellPowerLimit != 0xFF) { +- //We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power ++ /*We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power */ + ChangeToCellPowerLimit(pAd, + AironetCellPowerLimit); +- } else //Used the default TX Power Percentage. ++ } else /*Used the default TX Power Percentage. */ + pAd->CommonCfg.TxPowerPercentage = + pAd->CommonCfg.TxPowerDefault; + +@@ -1027,9 +1027,9 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_JOIN_CONF, + 2, &Status); + } +- // not to me BEACON, ignored ++ /* not to me BEACON, ignored */ + } +- // sanity check fail, ignore this frame ++ /* sanity check fail, ignore this frame */ + } + + /* +@@ -1062,11 +1062,11 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; + ULONG RalinkIe; +- // New for WPA security suites +- UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5 ++ /* New for WPA security suites */ ++ UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR HtCapabilityLen, PreNHtCapabilityLen; + UCHAR AddHtInfoLen; + UCHAR NewExtChannelOffset = 0xff; +@@ -1075,7 +1075,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + )) + return; + +- // Init Variable IE structure ++ /* Init Variable IE structure */ + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; + pVIE->Length = 0; + RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +@@ -1132,27 +1132,27 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, + pAd->CommonCfg.SsidLen) ? TRUE : FALSE; + +- // ignore BEACON not for my SSID ++ /* ignore BEACON not for my SSID */ + if ((!is_my_ssid) && (!is_my_bssid)) + return; + +- // It means STA waits disassoc completely from this AP, ignores this beacon. ++ /* It means STA waits disassoc completely from this AP, ignores this beacon. */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_WAIT_DISASSOC) + return; + +- // Copy Control channel for this BSSID. ++ /* Copy Control channel for this BSSID. */ + if (AddHtInfoLen != 0) + Channel = AddHtInfo.ControlChan; + + if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) + HtCapabilityLen = SIZE_HT_CAP_IE; + +- // +- // Housekeeping "SsidBssTab" table for later-on ROAMing usage. +- // ++ /* */ ++ /* Housekeeping "SsidBssTab" table for later-on ROAMing usage. */ ++ /* */ + Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); + if (Bssidx == BSS_NOT_FOUND) { +- // discover new AP of this network, create BSS entry ++ /* discover new AP of this network, create BSS entry */ + Bssidx = + BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, + SsidLen, BssType, BeaconPeriod, +@@ -1165,7 +1165,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + CkipFlag, &EdcaParm, + &QosCapability, &QbssLoad, LenVIE, + pVIE); +- if (Bssidx == BSS_NOT_FOUND) // return if BSS table full ++ if (Bssidx == BSS_NOT_FOUND) /* return if BSS table full */ + return; + + NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, +@@ -1179,16 +1179,16 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) + && (Channel != NewChannel)) { +- // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). +- // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. ++ /* Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection). */ ++ /* In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results. */ + AsicSwitchChannel(pAd, 1, FALSE); + AsicLockChannel(pAd, 1); + LinkDown(pAd, FALSE); + MlmeQueueInit(&pAd->Mlme.Queue); + BssTableInit(&pAd->ScanTab); +- RTMPusecDelay(1000000); // use delay to prevent STA do reassoc ++ RTMPusecDelay(1000000); /* use delay to prevent STA do reassoc */ + +- // channel sanity check ++ /* channel sanity check */ + for (index = 0; index < pAd->ChannelListNum; index++) { + if (pAd->ChannelList[index].Channel == + NewChannel) { +@@ -1211,17 +1211,17 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT_ERR(("PeerBeacon(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum)); + } + } +- // if the ssid matched & bssid unmatched, we should select the bssid with large value. +- // This might happened when two STA start at the same time ++ /* if the ssid matched & bssid unmatched, we should select the bssid with large value. */ ++ /* This might happened when two STA start at the same time */ + if ((!is_my_bssid) && ADHOC_ON(pAd)) { + INT i; + +- // Add the safeguard against the mismatch of adhoc wep status ++ /* Add the safeguard against the mismatch of adhoc wep status */ + if (pAd->StaCfg.WepStatus != + pAd->ScanTab.BssEntry[Bssidx].WepStatus) { + return; + } +- // collapse into the ADHOC network which has bigger BSSID value. ++ /* collapse into the ADHOC network which has bigger BSSID value. */ + for (i = 0; i < 6; i++) { + if (Bssid[i] > pAd->CommonCfg.Bssid[i]) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -1233,8 +1233,8 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + COPY_MAC_ADDR(pAd->CommonCfg.Bssid, + Bssid); + AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +- MakeIbssBeacon(pAd); // re-build BEACON frame +- AsicEnableIbssSync(pAd); // copy BEACON frame to on-chip memory ++ MakeIbssBeacon(pAd); /* re-build BEACON frame */ ++ AsicEnableIbssSync(pAd); /* copy BEACON frame to on-chip memory */ + is_my_bssid = TRUE; + break; + } else if (Bssid[i] < pAd->CommonCfg.Bssid[i]) +@@ -1244,12 +1244,12 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + NdisGetSystemUpTime(&Now); + pBss = &pAd->ScanTab.BssEntry[Bssidx]; +- pBss->Rssi = RealRssi; // lastest RSSI +- pBss->LastBeaconRxTime = Now; // last RX timestamp ++ pBss->Rssi = RealRssi; /* lastest RSSI */ ++ pBss->LastBeaconRxTime = Now; /* last RX timestamp */ + +- // +- // BEACON from my BSSID - either IBSS or INFRA network +- // ++ /* */ ++ /* BEACON from my BSSID - either IBSS or INFRA network */ ++ /* */ + if (is_my_bssid) { + RXWI_STRUC RxWI; + +@@ -1263,17 +1263,17 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, &RxWI); + if (AironetCellPowerLimit != 0xFF) { +- // +- // We get the Cisco (ccx) "TxPower Limit" required +- // Changed to appropriate TxPower Limit for Ciso Compatible Extensions +- // ++ /* */ ++ /* We get the Cisco (ccx) "TxPower Limit" required */ ++ /* Changed to appropriate TxPower Limit for Ciso Compatible Extensions */ ++ /* */ + ChangeToCellPowerLimit(pAd, + AironetCellPowerLimit); + } else { +- // +- // AironetCellPowerLimit equal to 0xFF means the Cisco (ccx) "TxPower Limit" not exist. +- // Used the default TX Power Percentage, that set from UI. +- // ++ /* */ ++ /* AironetCellPowerLimit equal to 0xFF means the Cisco (ccx) "TxPower Limit" not exist. */ ++ /* Used the default TX Power Percentage, that set from UI. */ ++ /* */ + pAd->CommonCfg.TxPowerPercentage = + pAd->CommonCfg.TxPowerDefault; + } +@@ -1283,7 +1283,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + UCHAR idx; + MAC_TABLE_ENTRY *pEntry; + +- // supported rates array may not be sorted. sort it and find the maximum rate ++ /* supported rates array may not be sorted. sort it and find the maximum rate */ + for (idx = 0; idx < SupRateLen; idx++) { + if (MaxSupportedRateIn500Kbps < + (SupRate[idx] & 0x7f)) +@@ -1298,11 +1298,11 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ExtRate[idx] & 0x7f; + } + +- // look up the existing table ++ /* look up the existing table */ + pEntry = MacTableLookup(pAd, Addr2); + +- // Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon. +- // To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station. ++ /* Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon. */ ++ /* To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station. */ + if ((ADHOC_ON(pAd) + && (Elem->Wcid == RESERVED_WCID)) + || (pEntry +@@ -1311,7 +1311,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADHOC_ENTRY_BEACON_LOST_TIME) < + Now))) { + if (pEntry == NULL) +- // Another adhoc joining, add to our MAC table. ++ /* Another adhoc joining, add to our MAC table. */ + pEntry = + MacTableInsertEntry(pAd, + Addr2, +@@ -1345,7 +1345,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pEntry && pEntry->ValidAsCLI) + pEntry->LastBeaconRxTime = Now; + +- // At least another peer in this IBSS, declare MediaState as CONNECTED ++ /* At least another peer in this IBSS, declare MediaState as CONNECTED */ + if (!OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + OPSTATUS_SET_FLAG(pAd, +@@ -1357,10 +1357,10 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->ExtraInfo = GENERAL_LINK_UP; + AsicSetBssid(pAd, pAd->CommonCfg.Bssid); + +- // 2003/03/12 - john +- // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that +- // "site survey" result should always include the current connected network. +- // ++ /* 2003/03/12 - john */ ++ /* Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that */ ++ /* "site survey" result should always include the current connected network. */ ++ /* */ + Bssidx = + BssTableSearch(&pAd->ScanTab, Bssid, + Channel); +@@ -1404,12 +1404,12 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (INFRA_ON(pAd)) { + BOOLEAN bUseShortSlot, bUseBGProtection; + +- // decide to use/change to - +- // 1. long slot (20 us) or short slot (9 us) time +- // 2. turn on/off RTS/CTS and/or CTS-to-self protection +- // 3. short preamble ++ /* decide to use/change to - */ ++ /* 1. long slot (20 us) or short slot (9 us) time */ ++ /* 2. turn on/off RTS/CTS and/or CTS-to-self protection */ ++ /* 3. short preamble */ + +- //bUseShortSlot = pAd->CommonCfg.bUseShortSlotTime && CAP_IS_SHORT_SLOT(CapabilityInfo); ++ /*bUseShortSlot = pAd->CommonCfg.bUseShortSlotTime && CAP_IS_SHORT_SLOT(CapabilityInfo); */ + bUseShortSlot = + CAP_IS_SHORT_SLOT(CapabilityInfo); + if (bUseShortSlot != +@@ -1417,11 +1417,11 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + fOP_STATUS_SHORT_SLOT_INUSED)) + AsicSetSlotTime(pAd, bUseShortSlot); + +- bUseBGProtection = (pAd->CommonCfg.UseBGProtection == 1) || // always use ++ bUseBGProtection = (pAd->CommonCfg.UseBGProtection == 1) || /* always use */ + ((pAd->CommonCfg.UseBGProtection == 0) + && ERP_IS_USE_PROTECTION(Erp)); + +- if (pAd->CommonCfg.Channel > 14) // always no BG protection in A-band. falsely happened when switching A/G band to a dual-band AP ++ if (pAd->CommonCfg.Channel > 14) /* always no BG protection in A-band. falsely happened when switching A/G band to a dual-band AP */ + bUseBGProtection = FALSE; + + if (bUseBGProtection != +@@ -1472,7 +1472,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("SYNC - AP changed B/G protection to %d\n", + bUseBGProtection)); + } +- // check Ht protection mode. and adhere to the Non-GF device indication by AP. ++ /* check Ht protection mode. and adhere to the Non-GF device indication by AP. */ + if ((AddHtInfoLen != 0) && + ((AddHtInfo.AddHtInfo2.OperaionMode != + pAd->MlmeAux.AddHtInfo.AddHtInfo2. +@@ -1532,7 +1532,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + EdcaParm.EdcaUpdateCount)); + AsicSetEdcaParm(pAd, &EdcaParm); + } +- // copy QOS related information ++ /* copy QOS related information */ + NdisMoveMemory(&pAd->CommonCfg.APQbssLoad, + &QbssLoad, + sizeof(QBSS_LOAD_PARM)); +@@ -1540,28 +1540,28 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &QosCapability, + sizeof(QOS_CAPABILITY_PARM)); + } +- // only INFRASTRUCTURE mode support power-saving feature ++ /* only INFRASTRUCTURE mode support power-saving feature */ + if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) + || (pAd->CommonCfg.bAPSDForcePowerSave)) { + UCHAR FreeNumber; +- // 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL +- // 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE +- // 3. we have outgoing frames in TxRing or MgmtRing, better stay AWAKE +- // 4. Psm change to PWR_SAVE, but AP not been informed yet, we better stay AWAKE +- // 5. otherwise, put PHY back to sleep to save battery. ++ /* 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL */ ++ /* 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE */ ++ /* 3. we have outgoing frames in TxRing or MgmtRing, better stay AWAKE */ ++ /* 4. Psm change to PWR_SAVE, but AP not been informed yet, we better stay AWAKE */ ++ /* 5. otherwise, put PHY back to sleep to save battery. */ + if (MessageToMe) { + #ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_PCIE_DEVICE)) { +- // Restore to correct BBP R3 value ++ /* Restore to correct BBP R3 value */ + if (pAd->Antenna.field.RxPath > + 1) + RTMP_BBP_IO_WRITE8_BY_REG_ID + (pAd, BBP_R3, + pAd->StaCfg.BBPR3); +- // Turn clk to 80Mhz. ++ /* Turn clk to 80Mhz. */ + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + if (pAd->CommonCfg.bAPSDCapable + && pAd->CommonCfg.APEdcaParm. + bAPSDCapable +@@ -1587,7 +1587,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (pAd, BBP_R3, + pAd->StaCfg.BBPR3); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } else + if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) + || (pAd->TxSwQueue[QID_AC_BE].Number != +@@ -1617,8 +1617,8 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (pAd, QID_MGMT, MGMT_RING_SIZE - 1, + &FreeNumber) != + NDIS_STATUS_SUCCESS)) { +- // TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme +- // can we cheat here (i.e. just check MGMT & AC_BE) for better performance? ++ /* TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme */ ++ /* can we cheat here (i.e. just check MGMT & AC_BE) for better performance? */ + #ifdef RTMP_MAC_PCI + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_PCIE_DEVICE)) { +@@ -1628,7 +1628,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (pAd, BBP_R3, + pAd->StaCfg.BBPR3); + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + } else { + if ((pAd->CommonCfg. + bACMAPSDTr[QID_AC_VO]) +@@ -1678,7 +1678,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if (!OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_DOZE)) { +- // Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. ++ /* Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode. */ + pAd-> + ThisTbttNumToNextWakeUp + = +@@ -1692,9 +1692,9 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + } +- // not my BSSID, ignore it ++ /* not my BSSID, ignore it */ + } +- // sanity check fail, ignore this frame ++ /* sanity check fail, ignore this frame */ + } + + /* +@@ -1728,12 +1728,12 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if ((SsidLen == 0) + || SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, + pAd->CommonCfg.SsidLen)) { +- // allocate and send out ProbeRsp frame +- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ /* allocate and send out ProbeRsp frame */ ++ NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) + return; + +- //pAd->StaCfg.AtimWin = 0; // ?????? ++ /*pAd->StaCfg.AtimWin = 0; // ?????? */ + + Privacy = + (pAd->StaCfg.WepStatus == +@@ -1774,7 +1774,7 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + END_OF_ARGS); + FrameLen += tmp; + } +- // If adhoc secruity is set for WPA-None, append the cipher suite IE ++ /* If adhoc secruity is set for WPA-None, append the cipher suite IE */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { + ULONG tmp; + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +@@ -1792,7 +1792,7 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + HtLen = sizeof(pAd->CommonCfg.HtCapability); + AddHtLen = sizeof(pAd->CommonCfg.AddHTInfo); + NewExtLen = 1; +- //New extension channel offset IE is included in Beacon, Probe Rsp or channel Switch Announcement Frame ++ /*New extension channel offset IE is included in Beacon, Probe Rsp or channel Switch Announcement Frame */ + if (pAd->bBroadComHT == TRUE) { + MakeOutgoingFrame(pOutBuffer + FrameLen, + &TmpLen, 1, &WpaIe, 4, +@@ -1852,14 +1852,14 @@ VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel); + +- // Only one channel scanned for CISCO beacon request ++ /* Only one channel scanned for CISCO beacon request */ + if ((pAd->MlmeAux.ScanType == SCAN_CISCO_ACTIVE) || + (pAd->MlmeAux.ScanType == SCAN_CISCO_PASSIVE) || + (pAd->MlmeAux.ScanType == SCAN_CISCO_NOISE) || + (pAd->MlmeAux.ScanType == SCAN_CISCO_CHANNEL_LOAD)) + pAd->MlmeAux.Channel = 0; + +- // this routine will stop if pAd->MlmeAux.Channel == 0 ++ /* this routine will stop if pAd->MlmeAux.Channel == 0 */ + ScanNextChannel(pAd); + } + +@@ -1942,12 +1942,12 @@ VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) + + DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n")); + +- NState = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory ++ NState = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NState == NDIS_STATUS_SUCCESS) { + MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, + BROADCAST_ADDR, BROADCAST_ADDR); + +- // this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse ++ /* this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, + sizeof(HEADER_802_11), &Hdr80211, + 1, &SsidIe, +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index 0a45643..15ed01e 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -63,7 +63,7 @@ VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + ULONG Now; + UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1 : 0); + +- // Record Last MIC error time and count ++ /* Record Last MIC error time and count */ + NdisGetSystemUpTime(&Now); + if (pAd->StaCfg.MicErrCnt == 0) { + pAd->StaCfg.MicErrCnt++; +@@ -71,7 +71,7 @@ VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8); + } else if (pAd->StaCfg.MicErrCnt == 1) { + if ((pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ)) < Now) { +- // Update Last MIC error time, this did not violate two MIC errors within 60 seconds ++ /* Update Last MIC error time, this did not violate two MIC errors within 60 seconds */ + pAd->StaCfg.LastMicErrorTime = Now; + } else { + +@@ -83,23 +83,23 @@ VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + BSS0, 0); + + pAd->StaCfg.LastMicErrorTime = Now; +- // Violate MIC error counts, MIC countermeasures kicks in ++ /* Violate MIC error counts, MIC countermeasures kicks in */ + pAd->StaCfg.MicErrCnt++; +- // We shall block all reception +- // We shall clean all Tx ring and disassoicate from AP after next EAPOL frame +- // +- // No necessary to clean all Tx ring, on RTMPHardTransmit will stop sending non-802.1X EAPOL packets +- // if pAd->StaCfg.MicErrCnt greater than 2. +- // +- // RTMPRingCleanUp(pAd, QID_AC_BK); +- // RTMPRingCleanUp(pAd, QID_AC_BE); +- // RTMPRingCleanUp(pAd, QID_AC_VI); +- // RTMPRingCleanUp(pAd, QID_AC_VO); +- // RTMPRingCleanUp(pAd, QID_HCCA); ++ /* We shall block all reception */ ++ /* We shall clean all Tx ring and disassoicate from AP after next EAPOL frame */ ++ /* */ ++ /* No necessary to clean all Tx ring, on RTMPHardTransmit will stop sending non-802.1X EAPOL packets */ ++ /* if pAd->StaCfg.MicErrCnt greater than 2. */ ++ /* */ ++ /* RTMPRingCleanUp(pAd, QID_AC_BK); */ ++ /* RTMPRingCleanUp(pAd, QID_AC_BE); */ ++ /* RTMPRingCleanUp(pAd, QID_AC_VI); */ ++ /* RTMPRingCleanUp(pAd, QID_AC_VO); */ ++ /* RTMPRingCleanUp(pAd, QID_HCCA); */ + } + } else { +- // MIC error count >= 2 +- // This should not happen ++ /* MIC error count >= 2 */ ++ /* This should not happen */ + ; + } + MlmeEnqueue(pAd, +@@ -112,7 +112,7 @@ VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + } + + #define LENGTH_EAP_H 4 +-// If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). ++/* If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). */ + INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, + IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet) + { +@@ -123,11 +123,11 @@ INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, + if (FrameLen < OffSet + LENGTH_EAPOL_H + LENGTH_EAP_H) + return result; + +- pData = pFrame + OffSet; // skip offset bytes ++ pData = pFrame + OffSet; /* skip offset bytes */ + +- if (*(pData + 1) == EAPPacket) // 802.1x header - Packet Type ++ if (*(pData + 1) == EAPPacket) /* 802.1x header - Packet Type */ + { +- result = *(pData + 4); // EAP header - Code ++ result = *(pData + 4); /* EAP header - Code */ + } + + return result; +@@ -161,7 +161,7 @@ VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + bUnicast = (Elem->Msg[0] == 1 ? TRUE : FALSE); + pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER); + +- // init 802.3 header and Fill Packet ++ /* init 802.3 header and Fill Packet */ + MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, + pAd->CurrentAddress, EAPOL); + +@@ -171,59 +171,59 @@ VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + Packet.KeyDesc.Type = WPA1_KEY_DESC; + +- // Request field presented ++ /* Request field presented */ + Packet.KeyDesc.KeyInfo.Request = 1; + + if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { + Packet.KeyDesc.KeyInfo.KeyDescVer = 2; +- } else // TKIP ++ } else /* TKIP */ + { + Packet.KeyDesc.KeyInfo.KeyDescVer = 1; + } + + Packet.KeyDesc.KeyInfo.KeyType = (bUnicast ? PAIRWISEKEY : GROUPKEY); + +- // KeyMic field presented ++ /* KeyMic field presented */ + Packet.KeyDesc.KeyInfo.KeyMic = 1; + +- // Error field presented ++ /* Error field presented */ + Packet.KeyDesc.KeyInfo.Error = 1; + +- // Update packet length after decide Key data payload ++ /* Update packet length after decide Key data payload */ + SET_UINT16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) +- // Key Replay Count ++ /* Key Replay Count */ + NdisMoveMemory(Packet.KeyDesc.ReplayCounter, + pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); + inc_byte_array(pAd->StaCfg.ReplayCounter, 8); + +- // Convert to little-endian format. ++ /* Convert to little-endian format. */ + *((USHORT *) & Packet.KeyDesc.KeyInfo) = + cpu2le16(*((USHORT *) & Packet.KeyDesc.KeyInfo)); + +- MlmeAllocateMemory(pAd, (PUCHAR *) & pOutBuffer); // allocate memory ++ MlmeAllocateMemory(pAd, (PUCHAR *) & pOutBuffer); /* allocate memory */ + if (pOutBuffer == NULL) { + return; + } +- // Prepare EAPOL frame for MIC calculation +- // Be careful, only EAPOL frame is counted for MIC calculation ++ /* Prepare EAPOL frame for MIC calculation */ ++ /* Be careful, only EAPOL frame is counted for MIC calculation */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, + CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, + END_OF_ARGS); + +- // Prepare and Fill MIC value ++ /* Prepare and Fill MIC value */ + NdisZeroMemory(Mic, sizeof(Mic)); +- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { // AES ++ if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { /* AES */ + UCHAR digest[20] = { 0 }; + HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, + digest, SHA1_DIGEST_SIZE); + NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +- } else { // TKIP ++ } else { /* TKIP */ + HMAC_MD5(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, + Mic, MD5_DIGEST_SIZE); + } + NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC); + +- // copy frame to Tx ring and send MIC failure report frame to authenticator ++ /* copy frame to Tx ring and send MIC failure report frame to authenticator */ + RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID], + Header802_3, LENGTH_802_3, + (PUCHAR) & Packet, +@@ -262,7 +262,7 @@ VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, + RTMP_ADAPTER *pAd = (PRTMP_ADAPTER) FunctionContext; + MLME_DISASSOC_REQ_STRUCT DisassocReq; + +- // disassoc from current AP first ++ /* disassoc from current AP first */ + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPReportMicError - disassociate with current AP after sending second continuous EAPOL frame\n")); + DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, +@@ -281,12 +281,12 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + +- // Pairwise key shall use key#0 ++ /* Pairwise key shall use key#0 */ + pSharedKey = &pAd->SharedKey[BSS0][0]; + + NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); + +- // Prepare pair-wise key information into shared key table ++ /* Prepare pair-wise key information into shared key table */ + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); +@@ -295,7 +295,7 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + NdisMoveMemory(pSharedKey->TxMic, + &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); + +- // Decide its ChiperAlg ++ /* Decide its ChiperAlg */ + if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled) + pSharedKey->CipherAlg = CIPHER_TKIP; + else if (pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) +@@ -303,7 +303,7 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + else + pSharedKey->CipherAlg = CIPHER_NONE; + +- // Update these related information to MAC_TABLE_ENTRY ++ /* Update these related information to MAC_TABLE_ENTRY */ + NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], + LEN_TKIP_EK); + NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], +@@ -312,7 +312,7 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + &pAd->StaCfg.PTK[48 + LEN_TKIP_RXMICK], LEN_TKIP_TXMICK); + pEntry->PairwiseKey.CipherAlg = pSharedKey->CipherAlg; + +- // Update pairwise key information to ASIC Shared Key Table ++ /* Update pairwise key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + 0, +@@ -320,7 +320,7 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + pSharedKey->Key, + pSharedKey->TxMic, pSharedKey->RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, BSS0, 0, pSharedKey->CipherAlg, pEntry); + STA_PORT_SECURED(pAd); + pAd->IndicateMediaState = NdisMediaStateConnected; +@@ -336,7 +336,7 @@ VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + + pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; + +- // Prepare pair-wise key information into shared key table ++ /* Prepare pair-wise key information into shared key table */ + NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); +@@ -345,7 +345,7 @@ VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + NdisMoveMemory(pSharedKey->TxMic, &pAd->StaCfg.GTK[24], + LEN_TKIP_TXMICK); + +- // Update Shared Key CipherAlg ++ /* Update Shared Key CipherAlg */ + pSharedKey->CipherAlg = CIPHER_NONE; + if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled) + pSharedKey->CipherAlg = CIPHER_TKIP; +@@ -356,7 +356,7 @@ VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) + pSharedKey->CipherAlg = CIPHER_WEP128; + +- // Update group key information to ASIC Shared Key Table ++ /* Update group key information to ASIC Shared Key Table */ + AsicAddSharedKeyEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +@@ -364,7 +364,7 @@ VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + pSharedKey->Key, + pSharedKey->TxMic, pSharedKey->RxMic); + +- // Update ASIC WCID attribute table and IVEIV table ++ /* Update ASIC WCID attribute table and IVEIV table */ + RTMPAddWcidAttributeEntry(pAd, + BSS0, + pAd->StaCfg.DefaultKeyId, +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch b/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch new file mode 100644 index 000000000..ff72de621 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch @@ -0,0 +1,9877 @@ +From a28512b5e5b41d2c250646afb4f28da0273a3a9d Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:15 -0800 +Subject: [PATCH 25/42] Staging: rt28x0: fix comments in *.h files + +commit cc27706961cbe2de1b2b1d1b498efa7b6f04a822 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/ap.h | 6 +- + drivers/staging/rt2860/chip/mac_pci.h | 1 - + drivers/staging/rt2860/chip/mac_usb.h | 140 ++-- + drivers/staging/rt2860/chip/rt2860.h | 12 +- + drivers/staging/rt2860/chip/rt2870.h | 6 +- + drivers/staging/rt2860/chip/rt3070.h | 10 +- + drivers/staging/rt2860/chip/rt3090.h | 16 +- + drivers/staging/rt2860/chip/rt30xx.h | 4 +- + drivers/staging/rt2860/chip/rtmp_mac.h | 996 ++++++++++---------- + drivers/staging/rt2860/chip/rtmp_phy.h | 80 +- + drivers/staging/rt2860/chlist.h | 10 +- + drivers/staging/rt2860/eeprom.h | 10 +- + drivers/staging/rt2860/mlme.h | 562 ++++++------ + drivers/staging/rt2860/oid.h | 380 ++++---- + drivers/staging/rt2860/rt_config.h | 4 +- + drivers/staging/rt2860/rt_linux.h | 108 ++-- + drivers/staging/rt2860/rtmp.h | 1630 ++++++++++++++++---------------- + drivers/staging/rt2860/rtmp_chip.h | 194 ++-- + drivers/staging/rt2860/rtmp_ckipmic.h | 2 +- + drivers/staging/rt2860/rtmp_def.h | 792 ++++++++-------- + drivers/staging/rt2860/rtmp_dot11.h | 60 +- + drivers/staging/rt2860/rtmp_iface.h | 12 +- + drivers/staging/rt2860/rtmp_mcu.h | 2 +- + drivers/staging/rt2860/rtmp_os.h | 6 +- + drivers/staging/rt2860/rtmp_timer.h | 32 +- + drivers/staging/rt2860/rtmp_type.h | 26 +- + drivers/staging/rt2860/rtusb_io.h | 118 ++-- + drivers/staging/rt2860/spectrum.h | 2 +- + drivers/staging/rt2860/spectrum_def.h | 4 +- + drivers/staging/rt2860/wpa.h | 120 ++-- + 30 files changed, 2672 insertions(+), 2673 deletions(-) + +diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h +index 97da749..c7ff694 100644 +--- a/drivers/staging/rt2860/ap.h ++++ b/drivers/staging/rt2860/ap.h +@@ -40,7 +40,7 @@ + #ifndef __AP_H__ + #define __AP_H__ + +-// ap_wpa.c ++/* ap_wpa.c */ + VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]); + +@@ -48,7 +48,7 @@ VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + VOID BeaconUpdateExec(IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + VOID RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack); + +@@ -63,4 +63,4 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + + MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); + +-#endif // __AP_H__ ++#endif /* __AP_H__ */ +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index b0aa0d3..34f7b9a 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -178,7 +178,6 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + + #define NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, freeNum, _TxFrameType) \ + (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) +- //(((freeNum) != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 1 /*0*/)) + + #define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ + RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +index 8ce6969..fe7ba28 100644 +--- a/drivers/staging/rt2860/chip/mac_usb.h ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -46,18 +46,18 @@ + #define USB_CYC_CFG 0x02a4 + + #define BEACON_RING_SIZE 2 +-#define MGMTPIPEIDX 0 // EP6 is highest priority ++#define MGMTPIPEIDX 0 /* EP6 is highest priority */ + +-#define RTMP_PKT_TAIL_PADDING 11 // 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) ++#define RTMP_PKT_TAIL_PADDING 11 /* 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) */ + + #define fRTMP_ADAPTER_NEED_STOP_TX \ + (fRTMP_ADAPTER_NIC_NOT_EXIST | fRTMP_ADAPTER_HALT_IN_PROGRESS | \ + fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_BULKOUT_RESET | \ + fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_REMOVE_IN_PROGRESS) + +-// +-// RXINFO appends at the end of each rx packet. +-// ++/* */ ++/* RXINFO appends at the end of each rx packet. */ ++/* */ + #define RXINFO_SIZE 4 + #define RT2870_RXDMALEN_FIELD_SIZE 4 + +@@ -66,17 +66,17 @@ typedef struct PACKED _RXINFO_STRUC { + UINT32 DATA:1; + UINT32 NULLDATA:1; + UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. ++ UINT32 U2M:1; /* 1: this RX frame is unicast to me */ ++ UINT32 Mcast:1; /* 1: this is a multicast frame */ ++ UINT32 Bcast:1; /* 1: this is a broadcast frame */ ++ UINT32 MyBss:1; /* 1: this frame belongs to the same BSSID */ ++ UINT32 Crc:1; /* 1: CRC error */ ++ UINT32 CipherErr:2; /* 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid */ ++ UINT32 AMSDU:1; /* rx with 802.3 header, not 802.11 header. */ + UINT32 HTC:1; + UINT32 RSSI:1; + UINT32 L2PAD:1; +- UINT32 AMPDU:1; // To be moved ++ UINT32 AMPDU:1; /* To be moved */ + UINT32 Decrypted:1; + UINT32 PlcpRssil:1; + UINT32 CipherAlg:1; +@@ -84,35 +84,35 @@ typedef struct PACKED _RXINFO_STRUC { + UINT32 PlcpSignal:12; + } RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + +-// +-// TXINFO +-// ++/* */ ++/* TXINFO */ ++/* */ + #define TXINFO_SIZE 4 + + typedef struct _TXINFO_STRUC { +- // Word 0 +- UINT32 USBDMATxPktLen:16; //used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. ++ /* Word 0 */ ++ UINT32 USBDMATxPktLen:16; /*used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. */ + UINT32 rsv:8; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 SwUseLastRound:1; // Software use. +- UINT32 rsv2:2; // Software use. +- UINT32 USBDMANextVLD:1; //used ONLY in USB bulk Aggregation, NextValid +- UINT32 USBDMATxburst:1; //used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint ++ UINT32 WIV:1; /* Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition */ ++ UINT32 QSEL:2; /* select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA */ ++ UINT32 SwUseLastRound:1; /* Software use. */ ++ UINT32 rsv2:2; /* Software use. */ ++ UINT32 USBDMANextVLD:1; /*used ONLY in USB bulk Aggregation, NextValid */ ++ UINT32 USBDMATxburst:1; /*used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint */ + } TXINFO_STRUC, *PTXINFO_STRUC; + +-// +-// Management ring buffer format +-// ++/* */ ++/* Management ring buffer format */ ++/* */ + typedef struct _MGMT_STRUC { + BOOLEAN Valid; + PUCHAR pBuffer; + ULONG Length; + } MGMT_STRUC, *PMGMT_STRUC; + +-//////////////////////////////////////////////////////////////////////////// +-// The TX_BUFFER structure forms the transmitted USB packet to the device +-//////////////////////////////////////////////////////////////////////////// ++/*////////////////////////////////////////////////////////////////////////// */ ++/* The TX_BUFFER structure forms the transmitted USB packet to the device */ ++/*////////////////////////////////////////////////////////////////////////// */ + typedef struct __TX_BUFFER { + union { + UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; +@@ -120,7 +120,7 @@ typedef struct __TX_BUFFER { + PSPOLL_FRAME PsPollPacket; + RTS_FRAME RTSFrame; + } field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++ UCHAR Aggregation[4]; /*Buffer for save Aggregation size. */ + } TX_BUFFER, *PTX_BUFFER; + + typedef struct __HTTX_BUFFER { +@@ -130,22 +130,22 @@ typedef struct __HTTX_BUFFER { + PSPOLL_FRAME PsPollPacket; + RTS_FRAME RTSFrame; + } field; +- UCHAR Aggregation[4]; //Buffer for save Aggregation size. ++ UCHAR Aggregation[4]; /*Buffer for save Aggregation size. */ + } HTTX_BUFFER, *PHTTX_BUFFER; + +-// used to track driver-generated write irps ++/* used to track driver-generated write irps */ + typedef struct _TX_CONTEXT { +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize ++ PVOID pAd; /*Initialized in MiniportInitialize */ ++ PURB pUrb; /*Initialized in MiniportInitialize */ ++ PIRP pIrp; /*used to cancel pending bulk out. */ ++ /*Initialized in MiniportInitialize */ ++ PTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ + ULONG BulkOutSize; + UCHAR BulkOutPipeId; + UCHAR SelfIdx; + BOOLEAN InUse; +- BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime. +- BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout. ++ BOOLEAN bWaitingBulkOut; /* at least one packet is in this TxContext, ready for making IRP anytime. */ ++ BOOLEAN bFullForBulkOut; /* all tx buffer are full , so waiting for tx bulkout. */ + BOOLEAN IRPPending; + BOOLEAN LastOne; + BOOLEAN bAggregatible; +@@ -153,18 +153,18 @@ typedef struct _TX_CONTEXT { + UCHAR Rsv[2]; + ULONG DataOffset; + UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux ++ dma_addr_t data_dma; /* urb dma on linux */ + + } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; + +-// used to track driver-generated write irps ++/* used to track driver-generated write irps */ + typedef struct _HT_TX_CONTEXT { +- PVOID pAd; //Initialized in MiniportInitialize +- PURB pUrb; //Initialized in MiniportInitialize +- PIRP pIrp; //used to cancel pending bulk out. +- //Initialized in MiniportInitialize +- PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize +- ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission ++ PVOID pAd; /*Initialized in MiniportInitialize */ ++ PURB pUrb; /*Initialized in MiniportInitialize */ ++ PIRP pIrp; /*used to cancel pending bulk out. */ ++ /*Initialized in MiniportInitialize */ ++ PHTTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ ++ ULONG BulkOutSize; /* Indicate the total bulk-out size in bytes in one bulk-transmission */ + UCHAR BulkOutPipeId; + BOOLEAN IRPPending; + BOOLEAN LastOne; +@@ -173,33 +173,33 @@ typedef struct _HT_TX_CONTEXT { + BOOLEAN bCopySavePad; + UCHAR SavedPad[8]; + UCHAR Header_802_3[LENGTH_802_3]; +- ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from. +- ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to. +- ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission +- ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission ++ ULONG CurWritePosition; /* Indicate the buffer offset which packet will be inserted start from. */ ++ ULONG CurWriteRealPos; /* Indicate the buffer offset which packet now are writing to. */ ++ ULONG NextBulkOutPosition; /* Indicate the buffer start offset of a bulk-transmission */ ++ ULONG ENextBulkOutPosition; /* Indicate the buffer end offset of a bulk-transmission */ + UINT TxRate; +- dma_addr_t data_dma; // urb dma on linux ++ dma_addr_t data_dma; /* urb dma on linux */ + } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; + +-// +-// Structure to keep track of receive packets and buffers to indicate +-// receive data to the protocol. +-// ++/* */ ++/* Structure to keep track of receive packets and buffers to indicate */ ++/* receive data to the protocol. */ ++/* */ + typedef struct _RX_CONTEXT { + PUCHAR TransferBuffer; + PVOID pAd; +- PIRP pIrp; //used to cancel pending bulk in. ++ PIRP pIrp; /*used to cancel pending bulk in. */ + PURB pUrb; +- //These 2 Boolean shouldn't both be 1 at the same time. +- ULONG BulkInOffset; // number of packets waiting for reordering . +-// BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication +- BOOLEAN bRxHandling; // Notify this packet is being process now. +- BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet. +- BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet. +- BOOLEAN IRPPending; // TODO: To be removed ++ /*These 2 Boolean shouldn't both be 1 at the same time. */ ++ ULONG BulkInOffset; /* number of packets waiting for reordering . */ ++/* BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication */ ++ BOOLEAN bRxHandling; /* Notify this packet is being process now. */ ++ BOOLEAN InUse; /* USB Hardware Occupied. Wait for USB HW to put packet. */ ++ BOOLEAN Readable; /* Receive Complete back. OK for driver to indicate receiving packet. */ ++ BOOLEAN IRPPending; /* TODO: To be removed */ + atomic_t IrpLock; + NDIS_SPIN_LOCK RxContextLock; +- dma_addr_t data_dma; // urb dma on linux ++ dma_addr_t data_dma; /* urb dma on linux */ + } RX_CONTEXT, *PRX_CONTEXT; + + /****************************************************************************** +@@ -207,9 +207,9 @@ typedef struct _RX_CONTEXT { + USB Frimware Related MACRO + + ******************************************************************************/ +-// 8051 firmware image for usb - use last-half base address = 0x3000 ++/* 8051 firmware image for usb - use last-half base address = 0x3000 */ + #define FIRMWARE_IMAGE_BASE 0x3000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte ++#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 /* 4kbyte */ + + #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ + RTUSBFirmwareWrite(_pAd, _pFwImage, _FwLen) +@@ -278,7 +278,7 @@ typedef struct _RX_CONTEXT { + #define HAL_KickOutNullFrameTx(_pAd, _QueIdx, _pNullFrame, _frameLen) \ + RtmpUSBNullFrameKickOut(_pAd, _QueIdx, _pNullFrame, _frameLen) + +-#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx) ++#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) /*(_pAd->TxRing[_QueIdx].TxSwFreeIdx) */ + #define GET_MGMTRING_FREENO(_pAd) (_pAd->MgmtRing.TxSwFreeIdx) + + /* ----------------- RX Related MACRO ----------------- */ +@@ -344,4 +344,4 @@ typedef struct _RX_CONTEXT { + #define RTMP_MLME_RADIO_OFF(pAd) \ + RT28xxUsbMlmeRadioOFF(pAd); + +-#endif //__MAC_USB_H__ // ++#endif /*__MAC_USB_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rt2860.h b/drivers/staging/rt2860/chip/rt2860.h +index 6b976b4..f30b808 100644 +--- a/drivers/staging/rt2860/chip/rt2860.h ++++ b/drivers/staging/rt2860/chip/rt2860.h +@@ -38,17 +38,17 @@ + #error "For RT2880, you should define the compile flag -DRTMP_MAC_PCI" + #endif + +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// ++/* */ ++/* Device ID & Vendor ID, these values should match EEPROM value */ ++/* */ + #define NIC2860_PCI_DEVICE_ID 0x0601 + #define NIC2860_PCIe_DEVICE_ID 0x0681 +-#define NIC2760_PCI_DEVICE_ID 0x0701 // 1T/2R Cardbus ??? +-#define NIC2790_PCIe_DEVICE_ID 0x0781 // 1T/2R miniCard ++#define NIC2760_PCI_DEVICE_ID 0x0701 /* 1T/2R Cardbus ??? */ ++#define NIC2790_PCIe_DEVICE_ID 0x0781 /* 1T/2R miniCard */ + + #define VEN_AWT_PCIe_DEVICE_ID 0x1059 + #define VEN_AWT_PCI_VENDOR_ID 0x1A3B + + #define EDIMAX_PCI_VENDOR_ID 0x1432 + +-#endif //__RT2860_H__ // ++#endif /*__RT2860_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rt2870.h b/drivers/staging/rt2860/chip/rt2870.h +index 5115a37..8263f1b 100644 +--- a/drivers/staging/rt2860/chip/rt2870.h ++++ b/drivers/staging/rt2860/chip/rt2870.h +@@ -40,7 +40,7 @@ + #include "../rtmp_type.h" + #include "mac_usb.h" + +-//#define RTMP_CHIP_NAME "RT2870" ++/*#define RTMP_CHIP_NAME "RT2870" */ + +-#endif // RT2870 // +-#endif //__RT2870_H__ // ++#endif /* RT2870 // */ ++#endif /*__RT2870_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rt3070.h b/drivers/staging/rt2860/chip/rt3070.h +index 3781d9d..172ce70 100644 +--- a/drivers/staging/rt2860/chip/rt3070.h ++++ b/drivers/staging/rt2860/chip/rt3070.h +@@ -58,10 +58,10 @@ + #include "mac_usb.h" + #include "rt30xx.h" + +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// ++/* */ ++/* Device ID & Vendor ID, these values should match EEPROM value */ ++/* */ + +-#endif // RT3070 // ++#endif /* RT3070 // */ + +-#endif //__RT3070_H__ // ++#endif /*__RT3070_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rt3090.h b/drivers/staging/rt2860/chip/rt3090.h +index 92481cc..102b938 100644 +--- a/drivers/staging/rt2860/chip/rt3090.h ++++ b/drivers/staging/rt2860/chip/rt3090.h +@@ -60,13 +60,13 @@ + #include "mac_pci.h" + #include "rt30xx.h" + +-// +-// Device ID & Vendor ID, these values should match EEPROM value +-// +-#define NIC3090_PCIe_DEVICE_ID 0x3090 // 1T/1R miniCard +-#define NIC3091_PCIe_DEVICE_ID 0x3091 // 1T/2R miniCard +-#define NIC3092_PCIe_DEVICE_ID 0x3092 // 2T/2R miniCard ++/* */ ++/* Device ID & Vendor ID, these values should match EEPROM value */ ++/* */ ++#define NIC3090_PCIe_DEVICE_ID 0x3090 /* 1T/1R miniCard */ ++#define NIC3091_PCIe_DEVICE_ID 0x3091 /* 1T/2R miniCard */ ++#define NIC3092_PCIe_DEVICE_ID 0x3092 /* 2T/2R miniCard */ + +-#endif // RT3090 // ++#endif /* RT3090 // */ + +-#endif //__RT3090_H__ // ++#endif /*__RT3090_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rt30xx.h b/drivers/staging/rt2860/chip/rt30xx.h +index e6aa175..477a205 100644 +--- a/drivers/staging/rt2860/chip/rt30xx.h ++++ b/drivers/staging/rt2860/chip/rt30xx.h +@@ -42,6 +42,6 @@ + extern REG_PAIR RT30xx_RFRegTable[]; + extern UCHAR NUM_RF_REG_PARMS; + +-#endif // RT30xx // ++#endif /* RT30xx // */ + +-#endif //__RT30XX_H__ // ++#endif /*__RT30XX_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h +index 06321c0..dac1577 100644 +--- a/drivers/staging/rt2860/chip/rtmp_mac.h ++++ b/drivers/staging/rt2860/chip/rtmp_mac.h +@@ -38,70 +38,70 @@ + #ifndef __RTMP_MAC_H__ + #define __RTMP_MAC_H__ + +-// ================================================================================= +-// TX / RX ring descriptor format +-// ================================================================================= ++/* ================================================================================= */ ++/* TX / RX ring descriptor format */ ++/* ================================================================================= */ + +-// the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO. +-// MAC block use this TXINFO to control the transmission behavior of this frame. ++/* the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO. */ ++/* MAC block use this TXINFO to control the transmission behavior of this frame. */ + #define FIFO_MGMT 0 + #define FIFO_HCCA 1 + #define FIFO_EDCA 2 + +-// +-// TXD Wireless Information format for Tx ring and Mgmt Ring +-// +-//txop : for txop mode +-// 0:txop for the MPDU frame will be handles by ASIC by register +-// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS ++/* */ ++/* TXD Wireless Information format for Tx ring and Mgmt Ring */ ++/* */ ++/*txop : for txop mode */ ++/* 0:txop for the MPDU frame will be handles by ASIC by register */ ++/* 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS */ + typedef struct PACKED _TXWI_STRUC { +- // Word 0 +- // ex: 00 03 00 40 means txop = 3, PHYMODE = 1 +- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment. +- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode ++ /* Word 0 */ ++ /* ex: 00 03 00 40 means txop = 3, PHYMODE = 1 */ ++ UINT32 FRAG:1; /* 1 to inform TKIP engine this is a fragment. */ ++ UINT32 MIMOps:1; /* the remote peer is in dynamic MIMO-PS mode */ + UINT32 CFACK:1; + UINT32 TS:1; + + UINT32 AMPDU:1; + UINT32 MpduDensity:3; +- UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. ++ UINT32 txop:2; /*FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. */ + UINT32 rsv:6; + + UINT32 MCS:7; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz ++ UINT32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ + UINT32 ShortGI:1; +- UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE +- UINT32 Ifs:1; // +-// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz ++ UINT32 STBC:2; /* 1: STBC support MCS =0-7, 2,3 : RESERVE */ ++ UINT32 Ifs:1; /* */ ++/* UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz */ + UINT32 rsv2:1; +- UINT32 TxBF:1; // 3*3 ++ UINT32 TxBF:1; /* 3*3 */ + UINT32 PHYMODE:2; +- // Word1 +- // ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 ++ /* Word1 */ ++ /* ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 */ + UINT32 ACK:1; + UINT32 NSEQ:1; + UINT32 BAWinSize:6; + UINT32 WirelessCliID:8; + UINT32 MPDUtotalByteCount:12; + UINT32 PacketId:4; +- //Word2 ++ /*Word2 */ + UINT32 IV; +- //Word3 ++ /*Word3 */ + UINT32 EIV; + } TXWI_STRUC, *PTXWI_STRUC; + +-// +-// RXWI wireless information format, in PBF. invisible in driver. +-// ++/* */ ++/* RXWI wireless information format, in PBF. invisible in driver. */ ++/* */ + typedef struct PACKED _RXWI_STRUC { +- // Word 0 ++ /* Word 0 */ + UINT32 WirelessCliID:8; + UINT32 KeyIndex:2; + UINT32 BSSID:3; + UINT32 UDF:3; + UINT32 MPDUtotalByteCount:12; + UINT32 TID:4; +- // Word 1 ++ /* Word 1 */ + UINT32 FRAG:4; + UINT32 SEQUENCE:12; + UINT32 MCS:7; +@@ -109,29 +109,29 @@ typedef struct PACKED _RXWI_STRUC { + UINT32 ShortGI:1; + UINT32 STBC:2; + UINT32 rsv:3; +- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me +- //Word2 ++ UINT32 PHYMODE:2; /* 1: this RX frame is unicast to me */ ++ /*Word2 */ + UINT32 RSSI0:8; + UINT32 RSSI1:8; + UINT32 RSSI2:8; + UINT32 rsv1:8; +- //Word3 ++ /*Word3 */ + UINT32 SNR0:8; + UINT32 SNR1:8; +- UINT32 FOFFSET:8; // RT35xx ++ UINT32 FOFFSET:8; /* RT35xx */ + UINT32 rsv2:8; + /*UINT32 rsv2:16; */ + } RXWI_STRUC, *PRXWI_STRUC; + +-// ================================================================================= +-// Register format +-// ================================================================================= ++/* ================================================================================= */ ++/* Register format */ ++/* ================================================================================= */ + +-// +-// SCH/DMA registers - base address 0x0200 +-// +-// INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit +-// ++/* */ ++/* SCH/DMA registers - base address 0x0200 */ ++/* */ ++/* INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit */ ++/* */ + #define DMA_CSR0 0x200 + #define INT_SOURCE_CSR 0x200 + typedef union _INT_SOURCE_CSR_STRUC { +@@ -139,29 +139,29 @@ typedef union _INT_SOURCE_CSR_STRUC { + UINT32 RxDelayINT:1; + UINT32 TxDelayINT:1; + UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; //4 ++ UINT32 Ac0DmaDone:1; /*4 */ + UINT32 Ac1DmaDone:1; + UINT32 Ac2DmaDone:1; + UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; // bit7 ++ UINT32 HccaDmaDone:1; /* bit7 */ + UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; //bit 9 ++ UINT32 MCUCommandINT:1; /*bit 9 */ + UINT32 RxTxCoherent:1; + UINT32 TBTTInt:1; + UINT32 PreTBTT:1; +- UINT32 TXFifoStatusInt:1; //FIFO Statistics is full, sw should read 0x171c +- UINT32 AutoWakeup:1; //bit14 ++ UINT32 TXFifoStatusInt:1; /*FIFO Statistics is full, sw should read 0x171c */ ++ UINT32 AutoWakeup:1; /*bit14 */ + UINT32 GPTimer:1; +- UINT32 RxCoherent:1; //bit16 ++ UINT32 RxCoherent:1; /*bit16 */ + UINT32 TxCoherent:1; + UINT32:14; + } field; + UINT32 word; + } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; + +-// +-// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF +-// ++/* */ ++/* INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF */ ++/* */ + #define INT_MASK_CSR 0x204 + typedef union _INT_MASK_CSR_STRUC { + struct { +@@ -228,99 +228,99 @@ typedef union _DELAY_INT_CFG_STRUC { + #define WMM_AIFSN_CFG 0x0214 + typedef union _AIFSN_CSR_STRUC { + struct { +- UINT32 Aifsn0:4; // for AC_BE +- UINT32 Aifsn1:4; // for AC_BK +- UINT32 Aifsn2:4; // for AC_VI +- UINT32 Aifsn3:4; // for AC_VO ++ UINT32 Aifsn0:4; /* for AC_BE */ ++ UINT32 Aifsn1:4; /* for AC_BK */ ++ UINT32 Aifsn2:4; /* for AC_VI */ ++ UINT32 Aifsn3:4; /* for AC_VO */ + UINT32 Rsv:16; + } field; + UINT32 word; + } AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; +-// +-// CWMIN_CSR: CWmin for each EDCA AC +-// ++/* */ ++/* CWMIN_CSR: CWmin for each EDCA AC */ ++/* */ + #define WMM_CWMIN_CFG 0x0218 + typedef union _CWMIN_CSR_STRUC { + struct { +- UINT32 Cwmin0:4; // for AC_BE +- UINT32 Cwmin1:4; // for AC_BK +- UINT32 Cwmin2:4; // for AC_VI +- UINT32 Cwmin3:4; // for AC_VO ++ UINT32 Cwmin0:4; /* for AC_BE */ ++ UINT32 Cwmin1:4; /* for AC_BK */ ++ UINT32 Cwmin2:4; /* for AC_VI */ ++ UINT32 Cwmin3:4; /* for AC_VO */ + UINT32 Rsv:16; + } field; + UINT32 word; + } CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; + +-// +-// CWMAX_CSR: CWmin for each EDCA AC +-// ++/* */ ++/* CWMAX_CSR: CWmin for each EDCA AC */ ++/* */ + #define WMM_CWMAX_CFG 0x021c + typedef union _CWMAX_CSR_STRUC { + struct { +- UINT32 Cwmax0:4; // for AC_BE +- UINT32 Cwmax1:4; // for AC_BK +- UINT32 Cwmax2:4; // for AC_VI +- UINT32 Cwmax3:4; // for AC_VO ++ UINT32 Cwmax0:4; /* for AC_BE */ ++ UINT32 Cwmax1:4; /* for AC_BK */ ++ UINT32 Cwmax2:4; /* for AC_VI */ ++ UINT32 Cwmax3:4; /* for AC_VO */ + UINT32 Rsv:16; + } field; + UINT32 word; + } CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; + +-// +-// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register +-// ++/* */ ++/* AC_TXOP_CSR0: AC_BK/AC_BE TXOP register */ ++/* */ + #define WMM_TXOP0_CFG 0x0220 + typedef union _AC_TXOP_CSR0_STRUC { + struct { +- USHORT Ac0Txop; // for AC_BK, in unit of 32us +- USHORT Ac1Txop; // for AC_BE, in unit of 32us ++ USHORT Ac0Txop; /* for AC_BK, in unit of 32us */ ++ USHORT Ac1Txop; /* for AC_BE, in unit of 32us */ + } field; + UINT32 word; + } AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; + +-// +-// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register +-// ++/* */ ++/* AC_TXOP_CSR1: AC_VO/AC_VI TXOP register */ ++/* */ + #define WMM_TXOP1_CFG 0x0224 + typedef union _AC_TXOP_CSR1_STRUC { + struct { +- USHORT Ac2Txop; // for AC_VI, in unit of 32us +- USHORT Ac3Txop; // for AC_VO, in unit of 32us ++ USHORT Ac2Txop; /* for AC_VI, in unit of 32us */ ++ USHORT Ac3Txop; /* for AC_VO, in unit of 32us */ + } field; + UINT32 word; + } AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; + + #define RINGREG_DIFF 0x10 +-#define GPIO_CTRL_CFG 0x0228 //MAC_CSR13 ++#define GPIO_CTRL_CFG 0x0228 /*MAC_CSR13 */ + #define MCU_CMD_CFG 0x022c +-#define TX_BASE_PTR0 0x0230 //AC_BK base address ++#define TX_BASE_PTR0 0x0230 /*AC_BK base address */ + #define TX_MAX_CNT0 0x0234 + #define TX_CTX_IDX0 0x0238 + #define TX_DTX_IDX0 0x023c +-#define TX_BASE_PTR1 0x0240 //AC_BE base address ++#define TX_BASE_PTR1 0x0240 /*AC_BE base address */ + #define TX_MAX_CNT1 0x0244 + #define TX_CTX_IDX1 0x0248 + #define TX_DTX_IDX1 0x024c +-#define TX_BASE_PTR2 0x0250 //AC_VI base address ++#define TX_BASE_PTR2 0x0250 /*AC_VI base address */ + #define TX_MAX_CNT2 0x0254 + #define TX_CTX_IDX2 0x0258 + #define TX_DTX_IDX2 0x025c +-#define TX_BASE_PTR3 0x0260 //AC_VO base address ++#define TX_BASE_PTR3 0x0260 /*AC_VO base address */ + #define TX_MAX_CNT3 0x0264 + #define TX_CTX_IDX3 0x0268 + #define TX_DTX_IDX3 0x026c +-#define TX_BASE_PTR4 0x0270 //HCCA base address ++#define TX_BASE_PTR4 0x0270 /*HCCA base address */ + #define TX_MAX_CNT4 0x0274 + #define TX_CTX_IDX4 0x0278 + #define TX_DTX_IDX4 0x027c +-#define TX_BASE_PTR5 0x0280 //MGMT base address ++#define TX_BASE_PTR5 0x0280 /*MGMT base address */ + #define TX_MAX_CNT5 0x0284 + #define TX_CTX_IDX5 0x0288 + #define TX_DTX_IDX5 0x028c + #define TX_MGMTMAX_CNT TX_MAX_CNT5 + #define TX_MGMTCTX_IDX TX_CTX_IDX5 + #define TX_MGMTDTX_IDX TX_DTX_IDX5 +-#define RX_BASE_PTR 0x0290 //RX base address ++#define RX_BASE_PTR 0x0290 /*RX base address */ + #define RX_MAX_CNT 0x0294 + #define RX_CRX_IDX 0x0298 + #define RX_DRX_IDX 0x029c +@@ -328,27 +328,27 @@ typedef union _AC_TXOP_CSR1_STRUC { + #define USB_DMA_CFG 0x02a0 + typedef union _USB_DMA_CFG_STRUC { + struct { +- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns +- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes +- UINT32 phyclear:1; //phy watch dog enable. write 1 ++ UINT32 RxBulkAggTOut:8; /*Rx Bulk Aggregation TimeOut in unit of 33ns */ ++ UINT32 RxBulkAggLmt:8; /*Rx Bulk Aggregation Limit in unit of 256 bytes */ ++ UINT32 phyclear:1; /*phy watch dog enable. write 1 */ + UINT32 rsv:2; +- UINT32 TxClear:1; //Clear USB DMA TX path +- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full. +- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation +- UINT32 RxBulkEn:1; //Enable USB DMA Rx +- UINT32 TxBulkEn:1; //Enable USB DMA Tx +- UINT32 EpoutValid:6; //OUT endpoint data valid +- UINT32 RxBusy:1; //USB DMA RX FSM busy +- UINT32 TxBusy:1; //USB DMA TX FSM busy ++ UINT32 TxClear:1; /*Clear USB DMA TX path */ ++ UINT32 TxopHalt:1; /*Halt TXOP count down when TX buffer is full. */ ++ UINT32 RxBulkAggEn:1; /*Enable Rx Bulk Aggregation */ ++ UINT32 RxBulkEn:1; /*Enable USB DMA Rx */ ++ UINT32 TxBulkEn:1; /*Enable USB DMA Tx */ ++ UINT32 EpoutValid:6; /*OUT endpoint data valid */ ++ UINT32 RxBusy:1; /*USB DMA RX FSM busy */ ++ UINT32 TxBusy:1; /*USB DMA TX FSM busy */ + } field; + UINT32 word; + } USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; + +-// +-// 3 PBF registers +-// +-// +-// Most are for debug. Driver doesn't touch PBF register. ++/* */ ++/* 3 PBF registers */ ++/* */ ++/* */ ++/* Most are for debug. Driver doesn't touch PBF register. */ + #define PBF_SYS_CTRL 0x0400 + #define PBF_CFG 0x0408 + #define PBF_MAX_PCNT 0x040C +@@ -361,224 +361,224 @@ typedef union _USB_DMA_CFG_STRUC { + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +-// eFuse registers ++/* eFuse registers */ + #define EFUSE_CTRL 0x0580 + #define EFUSE_DATA0 0x0590 + #define EFUSE_DATA1 0x0594 + #define EFUSE_DATA2 0x0598 + #define EFUSE_DATA3 0x059c +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++#endif /* RTMP_EFUSE_SUPPORT // */ ++#endif /* RT30xx // */ + + #define OSC_CTRL 0x5a4 + #define PCIE_PHY_TX_ATTENUATION_CTRL 0x05C8 + #define LDO_CFG0 0x05d4 + #define GPIO_SWITCH 0x05dc + +-// +-// 4 MAC registers +-// +-// +-// 4.1 MAC SYSTEM configuration registers (offset:0x1000) +-// ++/* */ ++/* 4 MAC registers */ ++/* */ ++/* */ ++/* 4.1 MAC SYSTEM configuration registers (offset:0x1000) */ ++/* */ + #define MAC_CSR0 0x1000 + typedef union _ASIC_VER_ID_STRUC { + struct { +- USHORT ASICRev; // reversion : 0 +- USHORT ASICVer; // version : 2860 ++ USHORT ASICRev; /* reversion : 0 */ ++ USHORT ASICVer; /* version : 2860 */ + } field; + UINT32 word; + } ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; +-#define MAC_SYS_CTRL 0x1004 //MAC_CSR1 +-#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0 +-#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1 +-// +-// MAC_CSR2: STA MAC register 0 +-// ++#define MAC_SYS_CTRL 0x1004 /*MAC_CSR1 */ ++#define MAC_ADDR_DW0 0x1008 /* MAC ADDR DW0 */ ++#define MAC_ADDR_DW1 0x100c /* MAC ADDR DW1 */ ++/* */ ++/* MAC_CSR2: STA MAC register 0 */ ++/* */ + typedef union _MAC_DW0_STRUC { + struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 ++ UCHAR Byte0; /* MAC address byte 0 */ ++ UCHAR Byte1; /* MAC address byte 1 */ ++ UCHAR Byte2; /* MAC address byte 2 */ ++ UCHAR Byte3; /* MAC address byte 3 */ + } field; + UINT32 word; + } MAC_DW0_STRUC, *PMAC_DW0_STRUC; + +-// +-// MAC_CSR3: STA MAC register 1 +-// ++/* */ ++/* MAC_CSR3: STA MAC register 1 */ ++/* */ + typedef union _MAC_DW1_STRUC { + struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 ++ UCHAR Byte4; /* MAC address byte 4 */ ++ UCHAR Byte5; /* MAC address byte 5 */ + UCHAR U2MeMask; + UCHAR Rsvd1; + } field; + UINT32 word; + } MAC_DW1_STRUC, *PMAC_DW1_STRUC; + +-#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0 +-#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1 ++#define MAC_BSSID_DW0 0x1010 /* MAC BSSID DW0 */ ++#define MAC_BSSID_DW1 0x1014 /* MAC BSSID DW1 */ + +-// +-// MAC_CSR5: BSSID register 1 +-// ++/* */ ++/* MAC_CSR5: BSSID register 1 */ ++/* */ + typedef union _MAC_CSR5_STRUC { + struct { +- UCHAR Byte4; // BSSID byte 4 +- UCHAR Byte5; // BSSID byte 5 +- USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID ++ UCHAR Byte4; /* BSSID byte 4 */ ++ UCHAR Byte5; /* BSSID byte 5 */ ++ USHORT BssIdMask:2; /* 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID */ + USHORT MBssBcnNum:3; + USHORT Rsvd:11; + } field; + UINT32 word; + } MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; + +-#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 +-#define BBP_CSR_CFG 0x101c // +-// +-// BBP_CSR_CFG: BBP serial control register +-// ++#define MAX_LEN_CFG 0x1018 /* rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 */ ++#define BBP_CSR_CFG 0x101c /* */ ++/* */ ++/* BBP_CSR_CFG: BBP serial control register */ ++/* */ + typedef union _BBP_CSR_CFG_STRUC { + struct { +- UINT32 Value:8; // Register value to program into BBP +- UINT32 RegNum:8; // Selected BBP register +- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP +- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming. +- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles +- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel ++ UINT32 Value:8; /* Register value to program into BBP */ ++ UINT32 RegNum:8; /* Selected BBP register */ ++ UINT32 fRead:1; /* 0: Write BBP, 1: Read BBP */ ++ UINT32 Busy:1; /* 1: ASIC is busy execute BBP programming. */ ++ UINT32 BBP_PAR_DUR:1; /* 0: 4 MAC clock cycles 1: 8 MAC clock cycles */ ++ UINT32 BBP_RW_MODE:1; /* 0: use serial mode 1:parallel */ + UINT32:12; + } field; + UINT32 word; + } BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; + #define RF_CSR_CFG0 0x1020 +-// +-// RF_CSR_CFG: RF control register +-// ++/* */ ++/* RF_CSR_CFG: RF control register */ ++/* */ + typedef union _RF_CSR_CFG0_STRUC { + struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 bitwidth:5; // Selected BBP register +- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby +- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate +- UINT32 Busy:1; // 0: idle 1: 8busy ++ UINT32 RegIdAndContent:24; /* Register value to program into BBP */ ++ UINT32 bitwidth:5; /* Selected BBP register */ ++ UINT32 StandbyMode:1; /* 0: high when stand by 1: low when standby */ ++ UINT32 Sel:1; /* 0:RF_LE0 activate 1:RF_LE1 activate */ ++ UINT32 Busy:1; /* 0: idle 1: 8busy */ + } field; + UINT32 word; + } RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; + #define RF_CSR_CFG1 0x1024 + typedef union _RF_CSR_CFG1_STRUC { + struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) +- UINT32 rsv:7; // 0: idle 1: 8busy ++ UINT32 RegIdAndContent:24; /* Register value to program into BBP */ ++ UINT32 RFGap:5; /* Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) */ ++ UINT32 rsv:7; /* 0: idle 1: 8busy */ + } field; + UINT32 word; + } RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; +-#define RF_CSR_CFG2 0x1028 // ++#define RF_CSR_CFG2 0x1028 /* */ + typedef union _RF_CSR_CFG2_STRUC { + struct { +- UINT32 RegIdAndContent:24; // Register value to program into BBP +- UINT32 rsv:8; // 0: idle 1: 8busy ++ UINT32 RegIdAndContent:24; /* Register value to program into BBP */ ++ UINT32 rsv:8; /* 0: idle 1: 8busy */ + } field; + UINT32 word; + } RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; +-#define LED_CFG 0x102c // MAC_CSR14 ++#define LED_CFG 0x102c /* MAC_CSR14 */ + typedef union _LED_CFG_STRUC { + struct { +- UINT32 OnPeriod:8; // blinking on period unit 1ms +- UINT32 OffPeriod:8; // blinking off period unit 1ms +- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms ++ UINT32 OnPeriod:8; /* blinking on period unit 1ms */ ++ UINT32 OffPeriod:8; /* blinking off period unit 1ms */ ++ UINT32 SlowBlinkPeriod:6; /* slow blinking period. unit:1ms */ + UINT32 rsv:2; +- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on +- UINT32 GLedMode:2; // green Led Mode +- UINT32 YLedMode:2; // yellow Led Mode +- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high ++ UINT32 RLedMode:2; /* red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on */ ++ UINT32 GLedMode:2; /* green Led Mode */ ++ UINT32 YLedMode:2; /* yellow Led Mode */ ++ UINT32 LedPolar:1; /* Led Polarity. 0: active low1: active high */ + UINT32:1; + } field; + UINT32 word; + } LED_CFG_STRUC, *PLED_CFG_STRUC; +-// +-// 4.2 MAC TIMING configuration registers (offset:0x1100) +-// +-#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9 ++/* */ ++/* 4.2 MAC TIMING configuration registers (offset:0x1100) */ ++/* */ ++#define XIFS_TIME_CFG 0x1100 /* MAC_CSR8 MAC_CSR9 */ + typedef union _IFS_SLOT_CFG_STRUC { + struct { +- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX +- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX +- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND +- UINT32 EIFS:9; // unit 1us +- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer ++ UINT32 CckmSifsTime:8; /* unit 1us. Applied after CCK RX/TX */ ++ UINT32 OfdmSifsTime:8; /* unit 1us. Applied after OFDM RX/TX */ ++ UINT32 OfdmXifsTime:4; /*OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND */ ++ UINT32 EIFS:9; /* unit 1us */ ++ UINT32 BBRxendEnable:1; /* reference RXEND signal to begin XIFS defer */ + UINT32 rsv:2; + } field; + UINT32 word; + } IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; + +-#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits +-#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15) +-#define CH_TIME_CFG 0x110C // Count as channel busy +-#define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us +-#define BCN_TIME_CFG 0x1114 // TXRX_CSR9 ++#define BKOFF_SLOT_CFG 0x1104 /* mac_csr9 last 8 bits */ ++#define NAV_TIME_CFG 0x1108 /* NAV (MAC_CSR15) */ ++#define CH_TIME_CFG 0x110C /* Count as channel busy */ ++#define PBF_LIFE_TIMER 0x1110 /*TX/RX MPDU timestamp timer (free run)Unit: 1us */ ++#define BCN_TIME_CFG 0x1114 /* TXRX_CSR9 */ + + #define BCN_OFFSET0 0x042C + #define BCN_OFFSET1 0x0430 + +-// +-// BCN_TIME_CFG : Synchronization control register +-// ++/* */ ++/* BCN_TIME_CFG : Synchronization control register */ ++/* */ + typedef union _BCN_TIME_CFG_STRUC { + struct { +- UINT32 BeaconInterval:16; // in unit of 1/16 TU +- UINT32 bTsfTicking:1; // Enable TSF auto counting +- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode ++ UINT32 BeaconInterval:16; /* in unit of 1/16 TU */ ++ UINT32 bTsfTicking:1; /* Enable TSF auto counting */ ++ UINT32 TsfSyncMode:2; /* Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode */ + UINT32 bTBTTEnable:1; +- UINT32 bBeaconGen:1; // Enable beacon generator ++ UINT32 bBeaconGen:1; /* Enable beacon generator */ + UINT32:3; + UINT32 TxTimestampCompensate:8; + } field; + UINT32 word; + } BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; +-#define TBTT_SYNC_CFG 0x1118 // txrx_csr10 +-#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only +-#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only. +-#define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14 +-#define INT_TIMER_CFG 0x1128 // +-#define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable +-#define CH_IDLE_STA 0x1130 // channel idle time +-#define CH_BUSY_STA 0x1134 // channle busy time +-// +-// 4.2 MAC POWER configuration registers (offset:0x1200) +-// +-#define MAC_STATUS_CFG 0x1200 // old MAC_CSR12 +-#define PWR_PIN_CFG 0x1204 // old MAC_CSR12 +-#define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10 +-// +-// AUTO_WAKEUP_CFG: Manual power control / status register +-// ++#define TBTT_SYNC_CFG 0x1118 /* txrx_csr10 */ ++#define TSF_TIMER_DW0 0x111C /* Local TSF timer lsb 32 bits. Read-only */ ++#define TSF_TIMER_DW1 0x1120 /* msb 32 bits. Read-only. */ ++#define TBTT_TIMER 0x1124 /* TImer remains till next TBTT. Read-only. TXRX_CSR14 */ ++#define INT_TIMER_CFG 0x1128 /* */ ++#define INT_TIMER_EN 0x112c /* GP-timer and pre-tbtt Int enable */ ++#define CH_IDLE_STA 0x1130 /* channel idle time */ ++#define CH_BUSY_STA 0x1134 /* channle busy time */ ++/* */ ++/* 4.2 MAC POWER configuration registers (offset:0x1200) */ ++/* */ ++#define MAC_STATUS_CFG 0x1200 /* old MAC_CSR12 */ ++#define PWR_PIN_CFG 0x1204 /* old MAC_CSR12 */ ++#define AUTO_WAKEUP_CFG 0x1208 /* old MAC_CSR10 */ ++/* */ ++/* AUTO_WAKEUP_CFG: Manual power control / status register */ ++/* */ + typedef union _AUTO_WAKEUP_STRUC { + struct { + UINT32 AutoLeadTime:8; +- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set +- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake ++ UINT32 NumofSleepingTbtt:7; /* ForceWake has high privilege than PutToSleep when both set */ ++ UINT32 EnableAutoWakeup:1; /* 0:sleep, 1:awake */ + UINT32:16; + } field; + UINT32 word; + } AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; +-// +-// 4.3 MAC TX configuration registers (offset:0x1300) +-// ++/* */ ++/* 4.3 MAC TX configuration registers (offset:0x1300) */ ++/* */ + +-#define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474 ++#define EDCA_AC0_CFG 0x1300 /*AC_TXOP_CSR0 0x3474 */ + #define EDCA_AC1_CFG 0x1304 + #define EDCA_AC2_CFG 0x1308 + #define EDCA_AC3_CFG 0x130c + typedef union _EDCA_AC_CFG_STRUC { + struct { +- UINT32 AcTxop:8; // in unit of 32us +- UINT32 Aifsn:4; // # of slot time +- UINT32 Cwmin:4; // +- UINT32 Cwmax:4; //unit power of 2 +- UINT32:12; // ++ UINT32 AcTxop:8; /* in unit of 32us */ ++ UINT32 Aifsn:4; /* # of slot time */ ++ UINT32 Cwmin:4; /* */ ++ UINT32 Cwmax:4; /*unit power of 2 */ ++ UINT32:12; /* */ + } field; + UINT32 word; + } EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; +@@ -590,7 +590,7 @@ typedef union _EDCA_AC_CFG_STRUC { + #define TX_PWR_CFG_3 0x1320 + #define TX_PWR_CFG_4 0x1324 + #define TX_PIN_CFG 0x1328 +-#define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz ++#define TX_BAND_CFG 0x132c /* 0x1 use upper 20MHz. 0 juse lower 20MHz */ + #define TX_SW_CFG0 0x1330 + #define TX_SW_CFG1 0x1334 + #define TX_SW_CFG2 0x1338 +@@ -601,9 +601,9 @@ typedef union _EDCA_AC_CFG_STRUC { + typedef union _TX_RTS_CFG_STRUC { + struct { + UINT32 AutoRtsRetryLimit:8; +- UINT32 RtsThres:16; // unit:byte +- UINT32 RtsFbkEn:1; // enable rts rate fallback +- UINT32 rsv:7; // 1: HT non-STBC control frame enable ++ UINT32 RtsThres:16; /* unit:byte */ ++ UINT32 RtsFbkEn:1; /* enable rts rate fallback */ ++ UINT32 rsv:7; /* 1: HT non-STBC control frame enable */ + } field; + UINT32 word; + } TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; +@@ -611,38 +611,38 @@ typedef union _TX_RTS_CFG_STRUC { + typedef union _TX_TIMEOUT_CFG_STRUC { + struct { + UINT32 rsv:4; +- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us +- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure +- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) +- UINT32 rsv2:8; // 1: HT non-STBC control frame enable ++ UINT32 MpduLifeTime:4; /* expiration time = 2^(9+MPDU LIFE TIME) us */ ++ UINT32 RxAckTimeout:8; /* unit:slot. Used for TX precedure */ ++ UINT32 TxopTimeout:8; /*TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) */ ++ UINT32 rsv2:8; /* 1: HT non-STBC control frame enable */ + } field; + UINT32 word; + } TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; + #define TX_RTY_CFG 0x134c + typedef union PACKED _TX_RTY_CFG_STRUC { + struct { +- UINT32 ShortRtyLimit:8; // short retry limit +- UINT32 LongRtyLimit:8; //long retry limit +- UINT32 LongRtyThre:12; // Long retry threshoold +- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer +- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable +- UINT32 rsv:1; // 1: HT non-STBC control frame enable ++ UINT32 ShortRtyLimit:8; /* short retry limit */ ++ UINT32 LongRtyLimit:8; /*long retry limit */ ++ UINT32 LongRtyThre:12; /* Long retry threshoold */ ++ UINT32 NonAggRtyMode:1; /* Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ ++ UINT32 AggRtyMode:1; /* Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ ++ UINT32 TxautoFBEnable:1; /* Tx retry PHY rate auto fallback enable */ ++ UINT32 rsv:1; /* 1: HT non-STBC control frame enable */ + } field; + UINT32 word; + } TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; + #define TX_LINK_CFG 0x1350 + typedef union PACKED _TX_LINK_CFG_STRUC { + struct PACKED { +- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us +- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable +- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) +- UINT32 TxMRQEn:1; // MCS request TX enable +- UINT32 TxRDGEn:1; // RDG TX enable +- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable +- UINT32 rsv:3; // +- UINT32 RemotMFB:8; // remote MCS feedback +- UINT32 RemotMFS:8; //remote MCS feedback sequence number ++ UINT32 RemoteMFBLifeTime:8; /*remote MFB life time. unit : 32us */ ++ UINT32 MFBEnable:1; /* TX apply remote MFB 1:enable */ ++ UINT32 RemoteUMFSEnable:1; /* remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) */ ++ UINT32 TxMRQEn:1; /* MCS request TX enable */ ++ UINT32 TxRDGEn:1; /* RDG TX enable */ ++ UINT32 TxCFAckEn:1; /* Piggyback CF-ACK enable */ ++ UINT32 rsv:3; /* */ ++ UINT32 RemotMFB:8; /* remote MCS feedback */ ++ UINT32 RemotMFS:8; /*remote MCS feedback sequence number */ + } field; + UINT32 word; + } TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; +@@ -677,116 +677,116 @@ typedef union _HT_FBK_CFG1_STRUC { + #define LG_FBK_CFG0 0x135c + typedef union _LG_FBK_CFG0_STRUC { + struct { +- UINT32 OFDMMCS0FBK:4; //initial value is 0 +- UINT32 OFDMMCS1FBK:4; //initial value is 0 +- UINT32 OFDMMCS2FBK:4; //initial value is 1 +- UINT32 OFDMMCS3FBK:4; //initial value is 2 +- UINT32 OFDMMCS4FBK:4; //initial value is 3 +- UINT32 OFDMMCS5FBK:4; //initial value is 4 +- UINT32 OFDMMCS6FBK:4; //initial value is 5 +- UINT32 OFDMMCS7FBK:4; //initial value is 6 ++ UINT32 OFDMMCS0FBK:4; /*initial value is 0 */ ++ UINT32 OFDMMCS1FBK:4; /*initial value is 0 */ ++ UINT32 OFDMMCS2FBK:4; /*initial value is 1 */ ++ UINT32 OFDMMCS3FBK:4; /*initial value is 2 */ ++ UINT32 OFDMMCS4FBK:4; /*initial value is 3 */ ++ UINT32 OFDMMCS5FBK:4; /*initial value is 4 */ ++ UINT32 OFDMMCS6FBK:4; /*initial value is 5 */ ++ UINT32 OFDMMCS7FBK:4; /*initial value is 6 */ + } field; + UINT32 word; + } LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; + #define LG_FBK_CFG1 0x1360 + typedef union _LG_FBK_CFG1_STRUC { + struct { +- UINT32 CCKMCS0FBK:4; //initial value is 0 +- UINT32 CCKMCS1FBK:4; //initial value is 0 +- UINT32 CCKMCS2FBK:4; //initial value is 1 +- UINT32 CCKMCS3FBK:4; //initial value is 2 ++ UINT32 CCKMCS0FBK:4; /*initial value is 0 */ ++ UINT32 CCKMCS1FBK:4; /*initial value is 0 */ ++ UINT32 CCKMCS2FBK:4; /*initial value is 1 */ ++ UINT32 CCKMCS3FBK:4; /*initial value is 2 */ + UINT32 rsv:16; + } field; + UINT32 word; + } LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; + +-//======================================================= +-//================ Protection Paramater================================ +-//======================================================= +-#define CCK_PROT_CFG 0x1364 //CCK Protection ++/*======================================================= */ ++/*================ Protection Paramater================================ */ ++/*======================================================= */ ++#define CCK_PROT_CFG 0x1364 /*CCK Protection */ + #define ASIC_SHORTNAV 1 + #define ASIC_LONGNAV 2 + #define ASIC_RTS 1 + #define ASIC_CTS 2 + typedef union _PROT_CFG_STRUC { + struct { +- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd). +- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv +- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv +- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow. +- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow. +- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow. +- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX ++ UINT32 ProtectRate:16; /*Protection control frame rate for CCK TX(RTS/CTS/CFEnd). */ ++ UINT32 ProtectCtrl:2; /*Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv */ ++ UINT32 ProtectNav:2; /*TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv */ ++ UINT32 TxopAllowCck:1; /*CCK TXOP allowance.0:disallow. */ ++ UINT32 TxopAllowOfdm:1; /*CCK TXOP allowance.0:disallow. */ ++ UINT32 TxopAllowMM20:1; /*CCK TXOP allowance. 0:disallow. */ ++ UINT32 TxopAllowMM40:1; /*CCK TXOP allowance.0:disallow. */ ++ UINT32 TxopAllowGF20:1; /*CCK TXOP allowance.0:disallow. */ ++ UINT32 TxopAllowGF40:1; /*CCK TXOP allowance.0:disallow. */ ++ UINT32 RTSThEn:1; /*RTS threshold enable on CCK TX */ + UINT32 rsv:5; + } field; + UINT32 word; + } PROT_CFG_STRUC, *PPROT_CFG_STRUC; + +-#define OFDM_PROT_CFG 0x1368 //OFDM Protection +-#define MM20_PROT_CFG 0x136C //MM20 Protection +-#define MM40_PROT_CFG 0x1370 //MM40 Protection +-#define GF20_PROT_CFG 0x1374 //GF20 Protection +-#define GF40_PROT_CFG 0x1378 //GR40 Protection +-#define EXP_CTS_TIME 0x137C // +-#define EXP_ACK_TIME 0x1380 // +- +-// +-// 4.4 MAC RX configuration registers (offset:0x1400) +-// +-#define RX_FILTR_CFG 0x1400 //TXRX_CSR0 +-#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4 +-// +-// TXRX_CSR4: Auto-Responder/ +-// ++#define OFDM_PROT_CFG 0x1368 /*OFDM Protection */ ++#define MM20_PROT_CFG 0x136C /*MM20 Protection */ ++#define MM40_PROT_CFG 0x1370 /*MM40 Protection */ ++#define GF20_PROT_CFG 0x1374 /*GF20 Protection */ ++#define GF40_PROT_CFG 0x1378 /*GR40 Protection */ ++#define EXP_CTS_TIME 0x137C /* */ ++#define EXP_ACK_TIME 0x1380 /* */ ++ ++/* */ ++/* 4.4 MAC RX configuration registers (offset:0x1400) */ ++/* */ ++#define RX_FILTR_CFG 0x1400 /*TXRX_CSR0 */ ++#define AUTO_RSP_CFG 0x1404 /*TXRX_CSR4 */ ++/* */ ++/* TXRX_CSR4: Auto-Responder/ */ ++/* */ + typedef union _AUTO_RSP_CFG_STRUC { + struct { + UINT32 AutoResponderEnable:1; +- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble +- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode +- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode +- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble +- UINT32 rsv:1; // Power bit value in conrtrol frame +- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame +- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame ++ UINT32 BACAckPolicyEnable:1; /* 0:long, 1:short preamble */ ++ UINT32 CTS40MMode:1; /* Response CTS 40MHz duplicate mode */ ++ UINT32 CTS40MRef:1; /* Response CTS 40MHz duplicate mode */ ++ UINT32 AutoResponderPreamble:1; /* 0:long, 1:short preamble */ ++ UINT32 rsv:1; /* Power bit value in conrtrol frame */ ++ UINT32 DualCTSEn:1; /* Power bit value in conrtrol frame */ ++ UINT32 AckCtsPsmBit:1; /* Power bit value in conrtrol frame */ + UINT32:24; + } field; + UINT32 word; + } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; + +-#define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054 ++#define LEGACY_BASIC_RATE 0x1408 /* TXRX_CSR5 0x3054 */ + #define HT_BASIC_RATE 0x140c + #define HT_CTRL_CFG 0x1410 + #define SIFS_COST_CFG 0x1414 +-#define RX_PARSER_CFG 0x1418 //Set NAV for all received frames +- +-// +-// 4.5 MAC Security configuration (offset:0x1500) +-// +-#define TX_SEC_CNT0 0x1500 // +-#define RX_SEC_CNT0 0x1504 // +-#define CCMP_FC_MUTE 0x1508 // +-// +-// 4.6 HCCA/PSMP (offset:0x1600) +-// ++#define RX_PARSER_CFG 0x1418 /*Set NAV for all received frames */ ++ ++/* */ ++/* 4.5 MAC Security configuration (offset:0x1500) */ ++/* */ ++#define TX_SEC_CNT0 0x1500 /* */ ++#define RX_SEC_CNT0 0x1504 /* */ ++#define CCMP_FC_MUTE 0x1508 /* */ ++/* */ ++/* 4.6 HCCA/PSMP (offset:0x1600) */ ++/* */ + #define TXOP_HLDR_ADDR0 0x1600 + #define TXOP_HLDR_ADDR1 0x1604 + #define TXOP_HLDR_ET 0x1608 + #define QOS_CFPOLL_RA_DW0 0x160c + #define QOS_CFPOLL_A1_DW1 0x1610 + #define QOS_CFPOLL_QC 0x1614 +-// +-// 4.7 MAC Statistis registers (offset:0x1700) +-// +-#define RX_STA_CNT0 0x1700 // +-#define RX_STA_CNT1 0x1704 // +-#define RX_STA_CNT2 0x1708 // +- +-// +-// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count +-// ++/* */ ++/* 4.7 MAC Statistis registers (offset:0x1700) */ ++/* */ ++#define RX_STA_CNT0 0x1700 /* */ ++#define RX_STA_CNT1 0x1704 /* */ ++#define RX_STA_CNT2 0x1708 /* */ ++ ++/* */ ++/* RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count */ ++/* */ + typedef union _RX_STA_CNT0_STRUC { + struct { + USHORT CrcErr; +@@ -795,9 +795,9 @@ typedef union _RX_STA_CNT0_STRUC { + UINT32 word; + } RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; + +-// +-// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count +-// ++/* */ ++/* RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count */ ++/* */ + typedef union _RX_STA_CNT1_STRUC { + struct { + USHORT FalseCca; +@@ -806,9 +806,9 @@ typedef union _RX_STA_CNT1_STRUC { + UINT32 word; + } RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; + +-// +-// RX_STA_CNT2_STRUC: +-// ++/* */ ++/* RX_STA_CNT2_STRUC: */ ++/* */ + typedef union _RX_STA_CNT2_STRUC { + struct { + USHORT RxDupliCount; +@@ -816,10 +816,10 @@ typedef union _RX_STA_CNT2_STRUC { + } field; + UINT32 word; + } RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; +-#define TX_STA_CNT0 0x170C // +-// +-// STA_CSR3: TX Beacon count +-// ++#define TX_STA_CNT0 0x170C /* */ ++/* */ ++/* STA_CSR3: TX Beacon count */ ++/* */ + typedef union _TX_STA_CNT0_STRUC { + struct { + USHORT TxFailCount; +@@ -827,10 +827,10 @@ typedef union _TX_STA_CNT0_STRUC { + } field; + UINT32 word; + } TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; +-#define TX_STA_CNT1 0x1710 // +-// +-// TX_STA_CNT1: TX tx count +-// ++#define TX_STA_CNT1 0x1710 /* */ ++/* */ ++/* TX_STA_CNT1: TX tx count */ ++/* */ + typedef union _TX_STA_CNT1_STRUC { + struct { + USHORT TxSuccess; +@@ -838,10 +838,10 @@ typedef union _TX_STA_CNT1_STRUC { + } field; + UINT32 word; + } TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; +-#define TX_STA_CNT2 0x1714 // +-// +-// TX_STA_CNT2: TX tx count +-// ++#define TX_STA_CNT2 0x1714 /* */ ++/* */ ++/* TX_STA_CNT2: TX tx count */ ++/* */ + typedef union _TX_STA_CNT2_STRUC { + struct { + USHORT TxZeroLenCount; +@@ -849,26 +849,26 @@ typedef union _TX_STA_CNT2_STRUC { + } field; + UINT32 word; + } TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; +-#define TX_STA_FIFO 0x1718 // +-// +-// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register +-// ++#define TX_STA_FIFO 0x1718 /* */ ++/* */ ++/* TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register */ ++/* */ + typedef union PACKED _TX_STA_FIFO_STRUC { + struct { +- UINT32 bValid:1; // 1:This register contains a valid TX result ++ UINT32 bValid:1; /* 1:This register contains a valid TX result */ + UINT32 PidType:4; +- UINT32 TxSuccess:1; // Tx No retry success +- UINT32 TxAggre:1; // Tx Retry Success +- UINT32 TxAckRequired:1; // Tx fail +- UINT32 wcid:8; //wireless client index +-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. +- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. ++ UINT32 TxSuccess:1; /* Tx No retry success */ ++ UINT32 TxAggre:1; /* Tx Retry Success */ ++ UINT32 TxAckRequired:1; /* Tx fail */ ++ UINT32 wcid:8; /*wireless client index */ ++/* UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ ++ UINT32 SuccessRate:13; /*include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ + UINT32 TxBF:1; + UINT32 Reserve:2; + } field; + UINT32 word; + } TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; +-// Debug counter ++/* Debug counter */ + #define TX_AGG_CNT 0x171c + typedef union _TX_AGG_CNT_STRUC { + struct { +@@ -877,7 +877,7 @@ typedef union _TX_AGG_CNT_STRUC { + } field; + UINT32 word; + } TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; +-// Debug counter ++/* Debug counter */ + #define TX_AGG_CNT0 0x1720 + typedef union _TX_AGG_CNT0_STRUC { + struct { +@@ -886,7 +886,7 @@ typedef union _TX_AGG_CNT0_STRUC { + } field; + UINT32 word; + } TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; +-// Debug counter ++/* Debug counter */ + #define TX_AGG_CNT1 0x1724 + typedef union _TX_AGG_CNT1_STRUC { + struct { +@@ -903,7 +903,7 @@ typedef union _TX_AGG_CNT2_STRUC { + } field; + UINT32 word; + } TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; +-// Debug counter ++/* Debug counter */ + #define TX_AGG_CNT3 0x172c + typedef union _TX_AGG_CNT3_STRUC { + struct { +@@ -912,7 +912,7 @@ typedef union _TX_AGG_CNT3_STRUC { + } field; + UINT32 word; + } TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; +-// Debug counter ++/* Debug counter */ + #define TX_AGG_CNT4 0x1730 + typedef union _TX_AGG_CNT4_STRUC { + struct { +@@ -948,32 +948,32 @@ typedef union _TX_AGG_CNT7_STRUC { + #define MPDU_DENSITY_CNT 0x1740 + typedef union _MPDU_DEN_CNT_STRUC { + struct { +- USHORT TXZeroDelCount; //TX zero length delimiter count +- USHORT RXZeroDelCount; //RX zero length delimiter count ++ USHORT TXZeroDelCount; /*TX zero length delimiter count */ ++ USHORT RXZeroDelCount; /*RX zero length delimiter count */ + } field; + UINT32 word; + } MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; +-// +-// TXRX control registers - base address 0x3000 +-// +-// rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first.. ++/* */ ++/* TXRX control registers - base address 0x3000 */ ++/* */ ++/* rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first.. */ + #define TXRX_CSR1 0x77d0 + +-// +-// Security key table memory, base address = 0x1000 +-// +-#define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry = ++/* */ ++/* Security key table memory, base address = 0x1000 */ ++/* */ ++#define MAC_WCID_BASE 0x1800 /*8-bytes(use only 6-bytes) * 256 entry = */ + #define HW_WCID_ENTRY_SIZE 8 +-#define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte ++#define PAIRWISE_KEY_TABLE_BASE 0x4000 /* 32-byte * 256-entry = -byte */ + #define HW_KEY_ENTRY_SIZE 0x20 +-#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte +-#define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte ++#define PAIRWISE_IVEIV_TABLE_BASE 0x6000 /* 8-byte * 256-entry = -byte */ ++#define MAC_IVEIV_TABLE_BASE 0x6000 /* 8-byte * 256-entry = -byte */ + #define HW_IVEIV_ENTRY_SIZE 8 +-#define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte ++#define MAC_WCID_ATTRIBUTE_BASE 0x6800 /* 4-byte * 256-entry = -byte */ + #define HW_WCID_ATTRI_SIZE 4 + #define WCID_RESERVED 0x6bfc +-#define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte +-#define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte ++#define SHARED_KEY_TABLE_BASE 0x6c00 /* 32-byte * 16-entry = 512-byte */ ++#define SHARED_KEY_MODE_BASE 0x7000 /* 32-byte * 16-entry = 512-byte */ + #define HW_SHARED_KEY_MODE_SIZE 4 + #define SHAREDKEYTABLE 0 + #define PAIRWISEKEYTABLE 1 +@@ -999,48 +999,48 @@ typedef union _SHAREDKEY_MODE_STRUC { + } field; + UINT32 word; + } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; +-// 64-entry for pairwise key table +-typedef struct _HW_WCID_ENTRY { // 8-byte per entry ++/* 64-entry for pairwise key table */ ++typedef struct _HW_WCID_ENTRY { /* 8-byte per entry */ + UCHAR Address[6]; + UCHAR Rsv[2]; + } HW_WCID_ENTRY, PHW_WCID_ENTRY; + +-// ================================================================================= +-// WCID format +-// ================================================================================= +-//7.1 WCID ENTRY format : 8bytes ++/* ================================================================================= */ ++/* WCID format */ ++/* ================================================================================= */ ++/*7.1 WCID ENTRY format : 8bytes */ + typedef struct _WCID_ENTRY_STRUC { +- UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15 +- UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7 +- UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table ++ UCHAR RXBABitmap7; /* bit0 for TID8, bit7 for TID 15 */ ++ UCHAR RXBABitmap0; /* bit0 for TID0, bit7 for TID 7 */ ++ UCHAR MAC[6]; /* 0 for shared key table. 1 for pairwise key table */ + } WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; + +-//8.1.1 SECURITY KEY format : 8DW +-// 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table +-typedef struct _HW_KEY_ENTRY { // 32-byte per entry ++/*8.1.1 SECURITY KEY format : 8DW */ ++/* 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table */ ++typedef struct _HW_KEY_ENTRY { /* 32-byte per entry */ + UCHAR Key[16]; + UCHAR TxMic[8]; + UCHAR RxMic[8]; + } HW_KEY_ENTRY, *PHW_KEY_ENTRY; + +-//8.1.2 IV/EIV format : 2DW ++/*8.1.2 IV/EIV format : 2DW */ + +-//8.1.3 RX attribute entry format : 1DW ++/*8.1.3 RX attribute entry format : 1DW */ + typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table ++ UINT32 KeyTab:1; /* 0 for shared key table. 1 for pairwise key table */ + UINT32 PairKeyMode:3; +- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID ++ UINT32 BSSIDIdx:3; /*multipleBSS index for the WCID */ + UINT32 RXWIUDF:3; + UINT32 rsv:22; + } MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; + +-// ================================================================================= +-// HOST-MCU communication data structure +-// ================================================================================= ++/* ================================================================================= */ ++/* HOST-MCU communication data structure */ ++/* ================================================================================= */ + +-// +-// H2M_MAILBOX_CSR: Host-to-MCU Mailbox +-// ++/* */ ++/* H2M_MAILBOX_CSR: Host-to-MCU Mailbox */ ++/* */ + typedef union _H2M_MAILBOX_STRUC { + struct { + UINT32 LowByte:8; +@@ -1051,9 +1051,9 @@ typedef union _H2M_MAILBOX_STRUC { + UINT32 word; + } H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; + +-// +-// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication +-// ++/* */ ++/* M2H_CMD_DONE_CSR: MCU-to-Host command complete indication */ ++/* */ + typedef union _M2H_CMD_DONE_STRUC { + struct { + UINT32 CmdToken0; +@@ -1064,42 +1064,42 @@ typedef union _M2H_CMD_DONE_STRUC { + UINT32 word; + } M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; + +-//NAV_TIME_CFG :NAV ++/*NAV_TIME_CFG :NAV */ + typedef union _NAV_TIME_CFG_STRUC { + struct { +- UCHAR Sifs; // in unit of 1-us +- UCHAR SlotTime; // in unit of 1-us +- USHORT Eifs:9; // in unit of 1-us +- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable ++ UCHAR Sifs; /* in unit of 1-us */ ++ UCHAR SlotTime; /* in unit of 1-us */ ++ USHORT Eifs:9; /* in unit of 1-us */ ++ USHORT ZeroSifs:1; /* Applied zero SIFS timer after OFDM RX 0: disable */ + USHORT rsv:6; + } field; + UINT32 word; + } NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; + +-// +-// RX_FILTR_CFG: /RX configuration register +-// ++/* */ ++/* RX_FILTR_CFG: /RX configuration register */ ++/* */ + typedef union _RX_FILTR_CFG_STRUC { + struct { +- UINT32 DropCRCErr:1; // Drop CRC error +- UINT32 DropPhyErr:1; // Drop physical error +- UINT32 DropNotToMe:1; // Drop not to me unicast frame +- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true +- +- UINT32 DropVerErr:1; // Drop version error frame +- UINT32 DropMcast:1; // Drop multicast frames +- UINT32 DropBcast:1; // Drop broadcast frames +- UINT32 DropDuplicate:1; // Drop duplicate frame +- +- UINT32 DropCFEndAck:1; // Drop Ps-Poll +- UINT32 DropCFEnd:1; // Drop Ps-Poll +- UINT32 DropAck:1; // Drop Ps-Poll +- UINT32 DropCts:1; // Drop Ps-Poll +- +- UINT32 DropRts:1; // Drop Ps-Poll +- UINT32 DropPsPoll:1; // Drop Ps-Poll +- UINT32 DropBA:1; // +- UINT32 DropBAR:1; // ++ UINT32 DropCRCErr:1; /* Drop CRC error */ ++ UINT32 DropPhyErr:1; /* Drop physical error */ ++ UINT32 DropNotToMe:1; /* Drop not to me unicast frame */ ++ UINT32 DropNotMyBSSID:1; /* Drop fram ToDs bit is true */ ++ ++ UINT32 DropVerErr:1; /* Drop version error frame */ ++ UINT32 DropMcast:1; /* Drop multicast frames */ ++ UINT32 DropBcast:1; /* Drop broadcast frames */ ++ UINT32 DropDuplicate:1; /* Drop duplicate frame */ ++ ++ UINT32 DropCFEndAck:1; /* Drop Ps-Poll */ ++ UINT32 DropCFEnd:1; /* Drop Ps-Poll */ ++ UINT32 DropAck:1; /* Drop Ps-Poll */ ++ UINT32 DropCts:1; /* Drop Ps-Poll */ ++ ++ UINT32 DropRts:1; /* Drop Ps-Poll */ ++ UINT32 DropPsPoll:1; /* Drop Ps-Poll */ ++ UINT32 DropBA:1; /* */ ++ UINT32 DropBAR:1; /* */ + + UINT32 DropRsvCntlType:1; + UINT32:15; +@@ -1107,23 +1107,23 @@ typedef union _RX_FILTR_CFG_STRUC { + UINT32 word; + } RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; + +-// +-// PHY_CSR4: RF serial control register +-// ++/* */ ++/* PHY_CSR4: RF serial control register */ ++/* */ + typedef union _PHY_CSR4_STRUC { + struct { +- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip. +- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22) +- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program +- UINT32 PLL_LD:1; // RF PLL_LD status +- UINT32 Busy:1; // 1: ASIC is busy execute RF programming. ++ UINT32 RFRegValue:24; /* Register value (include register id) serial out to RF/IF chip. */ ++ UINT32 NumberOfBits:5; /* Number of bits used in RFRegValue (I:20, RFMD:22) */ ++ UINT32 IFSelect:1; /* 1: select IF to program, 0: select RF to program */ ++ UINT32 PLL_LD:1; /* RF PLL_LD status */ ++ UINT32 Busy:1; /* 1: ASIC is busy execute RF programming. */ + } field; + UINT32 word; + } PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; + +-// +-// SEC_CSR5: shared key table security mode register +-// ++/* */ ++/* SEC_CSR5: shared key table security mode register */ ++/* */ + typedef union _SEC_CSR5_STRUC { + struct { + UINT32 Bss2Key0CipherAlg:3; +@@ -1146,9 +1146,9 @@ typedef union _SEC_CSR5_STRUC { + UINT32 word; + } SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; + +-// +-// HOST_CMD_CSR: For HOST to interrupt embedded processor +-// ++/* */ ++/* HOST_CMD_CSR: For HOST to interrupt embedded processor */ ++/* */ + typedef union _HOST_CMD_CSR_STRUC { + struct { + UINT32 HostCommand:8; +@@ -1157,47 +1157,47 @@ typedef union _HOST_CMD_CSR_STRUC { + UINT32 word; + } HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; + +-// +-// AIFSN_CSR: AIFSN for each EDCA AC +-// ++/* */ ++/* AIFSN_CSR: AIFSN for each EDCA AC */ ++/* */ + +-// +-// E2PROM_CSR: EEPROM control register +-// ++/* */ ++/* E2PROM_CSR: EEPROM control register */ ++/* */ + typedef union _E2PROM_CSR_STRUC { + struct { +- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared. ++ UINT32 Reload:1; /* Reload EEPROM content, write one to reload, self-cleared. */ + UINT32 EepromSK:1; + UINT32 EepromCS:1; + UINT32 EepromDI:1; + UINT32 EepromDO:1; +- UINT32 Type:1; // 1: 93C46, 0:93C66 +- UINT32 LoadStatus:1; // 1:loading, 0:done ++ UINT32 Type:1; /* 1: 93C46, 0:93C66 */ ++ UINT32 LoadStatus:1; /* 1:loading, 0:done */ + UINT32 Rsvd:25; + } field; + UINT32 word; + } E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; + +-// +-// QOS_CSR0: TXOP holder address0 register +-// ++/* */ ++/* QOS_CSR0: TXOP holder address0 register */ ++/* */ + typedef union _QOS_CSR0_STRUC { + struct { +- UCHAR Byte0; // MAC address byte 0 +- UCHAR Byte1; // MAC address byte 1 +- UCHAR Byte2; // MAC address byte 2 +- UCHAR Byte3; // MAC address byte 3 ++ UCHAR Byte0; /* MAC address byte 0 */ ++ UCHAR Byte1; /* MAC address byte 1 */ ++ UCHAR Byte2; /* MAC address byte 2 */ ++ UCHAR Byte3; /* MAC address byte 3 */ + } field; + UINT32 word; + } QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; + +-// +-// QOS_CSR1: TXOP holder address1 register +-// ++/* */ ++/* QOS_CSR1: TXOP holder address1 register */ ++/* */ + typedef union _QOS_CSR1_STRUC { + struct { +- UCHAR Byte4; // MAC address byte 4 +- UCHAR Byte5; // MAC address byte 5 ++ UCHAR Byte4; /* MAC address byte 4 */ ++ UCHAR Byte5; /* MAC address byte 5 */ + UCHAR Rsvd0; + UCHAR Rsvd1; + } field; +@@ -1207,41 +1207,41 @@ typedef union _QOS_CSR1_STRUC { + #define RF_CSR_CFG 0x500 + typedef union _RF_CSR_CFG_STRUC { + struct { +- UINT RF_CSR_DATA:8; // DATA +- UINT TESTCSR_RFACC_REGNUM:5; // RF register ID +- UINT Rsvd2:3; // Reserved +- UINT RF_CSR_WR:1; // 0: read 1: write +- UINT RF_CSR_KICK:1; // kick RF register read/write +- UINT Rsvd1:14; // Reserved ++ UINT RF_CSR_DATA:8; /* DATA */ ++ UINT TESTCSR_RFACC_REGNUM:5; /* RF register ID */ ++ UINT Rsvd2:3; /* Reserved */ ++ UINT RF_CSR_WR:1; /* 0: read 1: write */ ++ UINT RF_CSR_KICK:1; /* kick RF register read/write */ ++ UINT Rsvd1:14; /* Reserved */ + } field; + UINT word; + } RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; + +-// +-// Other on-chip shared memory space, base = 0x2000 +-// ++/* */ ++/* Other on-chip shared memory space, base = 0x2000 */ ++/* */ + +-// CIS space - base address = 0x2000 ++/* CIS space - base address = 0x2000 */ + #define HW_CIS_BASE 0x2000 + +-// Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function. ++/* Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function. */ + #define HW_CS_CTS_BASE 0x7700 +-// DFS CTS frame base address. It's where mac stores CTS frame for DFS. ++/* DFS CTS frame base address. It's where mac stores CTS frame for DFS. */ + #define HW_DFS_CTS_BASE 0x7780 + #define HW_CTS_FRAME_SIZE 0x80 + +-// 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes +-// to save debugging settings +-#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes +-#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes +- +-// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon +-// Three section discontinue memory segments will be used. +-// 1. The original region for BCN 0~3 +-// 2. Extract memory from FCE table for BCN 4~5 +-// 3. Extract memory from Pair-wise key table for BCN 6~7 +-// It occupied those memory of wcid 238~253 for BCN 6 +-// and wcid 222~237 for BCN 7 ++/* 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes */ ++/* to save debugging settings */ ++#define HW_DEBUG_SETTING_BASE 0x77f0 /* 0x77f0~0x77ff total 16 bytes */ ++#define HW_DEBUG_SETTING_BASE2 0x7770 /* 0x77f0~0x77ff total 16 bytes */ ++ ++/* In order to support maximum 8 MBSS and its maximum length is 512 for each beacon */ ++/* Three section discontinue memory segments will be used. */ ++/* 1. The original region for BCN 0~3 */ ++/* 2. Extract memory from FCE table for BCN 4~5 */ ++/* 3. Extract memory from Pair-wise key table for BCN 6~7 */ ++/* It occupied those memory of wcid 238~253 for BCN 6 */ ++/* and wcid 222~237 for BCN 7 */ + #define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */ + #define HW_BEACON_BASE0 0x7800 + #define HW_BEACON_BASE1 0x7A00 +@@ -1256,7 +1256,7 @@ typedef union _RF_CSR_CFG_STRUC { + #define HW_BEACON_OFFSET 0x0200 + #define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE) + +-// HOST-MCU shared memory - base address = 0x2100 ++/* HOST-MCU shared memory - base address = 0x2100 */ + #define HOST_CMD_CSR 0x404 + #define H2M_MAILBOX_CSR 0x7010 + #define H2M_MAILBOX_CID 0x7014 +@@ -1264,37 +1264,37 @@ typedef union _RF_CSR_CFG_STRUC { + #define H2M_INT_SRC 0x7024 + #define H2M_BBP_AGENT 0x7028 + #define M2H_CMD_DONE_CSR 0x000c +-#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert +-#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert +-#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware +-#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert +-#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert +- +-// +-// Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, +-// +-// +-// DMA RING DESCRIPTOR +-// ++#define MCU_TXOP_ARRAY_BASE 0x000c /* TODO: to be provided by Albert */ ++#define MCU_TXOP_ENTRY_SIZE 32 /* TODO: to be provided by Albert */ ++#define MAX_NUM_OF_TXOP_ENTRY 16 /* TODO: must be same with 8051 firmware */ ++#define MCU_MBOX_VERSION 0x01 /* TODO: to be confirmed by Albert */ ++#define MCU_MBOX_VERSION_OFFSET 5 /* TODO: to be provided by Albert */ ++ ++/* */ ++/* Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT, */ ++/* */ ++/* */ ++/* DMA RING DESCRIPTOR */ ++/* */ + #define E2PROM_CSR 0x0004 + #define IO_CNTL_CSR 0x77d0 + +-// ================================================================ +-// Tx / Rx / Mgmt ring descriptor definition +-// ================================================================ ++/* ================================================================ */ ++/* Tx / Rx / Mgmt ring descriptor definition */ ++/* ================================================================ */ + +-// the following PID values are used to mark outgoing frame type in TXD->PID so that +-// proper TX statistics can be collected based on these categories +-// b3-2 of PID field - ++/* the following PID values are used to mark outgoing frame type in TXD->PID so that */ ++/* proper TX statistics can be collected based on these categories */ ++/* b3-2 of PID field - */ + #define PID_MGMT 0x05 + #define PID_BEACON 0x0c + #define PID_DATA_NORMALUCAST 0x02 + #define PID_DATA_AMPDU 0x04 + #define PID_DATA_NO_ACK 0x08 + #define PID_DATA_NOT_NORM_ACK 0x03 +-// value domain of pTxD->HostQId (4-bit: 0~15) +-#define QID_AC_BK 1 // meet ACI definition in 802.11e +-#define QID_AC_BE 0 // meet ACI definition in 802.11e ++/* value domain of pTxD->HostQId (4-bit: 0~15) */ ++#define QID_AC_BK 1 /* meet ACI definition in 802.11e */ ++#define QID_AC_BE 0 /* meet ACI definition in 802.11e */ + #define QID_AC_VI 2 + #define QID_AC_VO 3 + #define QID_HCCA 4 +@@ -1303,4 +1303,4 @@ typedef union _RF_CSR_CFG_STRUC { + #define QID_RX 14 + #define QID_OTHER 15 + +-#endif // __RTMP_MAC_H__ // ++#endif /* __RTMP_MAC_H__ // */ +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index bbf920d..fd1a989 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -74,30 +74,30 @@ + #define RF_R30 30 + #define RF_R31 31 + +-// value domain of pAd->RfIcType +-#define RFIC_2820 1 // 2.4G 2T3R +-#define RFIC_2850 2 // 2.4G/5G 2T3R +-#define RFIC_2720 3 // 2.4G 1T2R +-#define RFIC_2750 4 // 2.4G/5G 1T2R +-#define RFIC_3020 5 // 2.4G 1T1R +-#define RFIC_2020 6 // 2.4G B/G +-#define RFIC_3021 7 // 2.4G 1T2R +-#define RFIC_3022 8 // 2.4G 2T2R +-#define RFIC_3052 9 // 2.4G/5G 2T2R ++/* value domain of pAd->RfIcType */ ++#define RFIC_2820 1 /* 2.4G 2T3R */ ++#define RFIC_2850 2 /* 2.4G/5G 2T3R */ ++#define RFIC_2720 3 /* 2.4G 1T2R */ ++#define RFIC_2750 4 /* 2.4G/5G 1T2R */ ++#define RFIC_3020 5 /* 2.4G 1T1R */ ++#define RFIC_2020 6 /* 2.4G B/G */ ++#define RFIC_3021 7 /* 2.4G 1T2R */ ++#define RFIC_3022 8 /* 2.4G 2T2R */ ++#define RFIC_3052 9 /* 2.4G/5G 2T2R */ + + /* + BBP sections + */ +-#define BBP_R0 0 // version +-#define BBP_R1 1 // TSSI +-#define BBP_R2 2 // TX configure ++#define BBP_R0 0 /* version */ ++#define BBP_R1 1 /* TSSI */ ++#define BBP_R2 2 /* TX configure */ + #define BBP_R3 3 + #define BBP_R4 4 + #define BBP_R5 5 + #define BBP_R6 6 +-#define BBP_R14 14 // RX configure ++#define BBP_R14 14 /* RX configure */ + #define BBP_R16 16 +-#define BBP_R17 17 // RX sensibility ++#define BBP_R17 17 /* RX sensibility */ + #define BBP_R18 18 + #define BBP_R21 21 + #define BBP_R22 22 +@@ -106,12 +106,12 @@ + #define BBP_R26 26 + #define BBP_R27 27 + #define BBP_R31 31 +-#define BBP_R49 49 //TSSI ++#define BBP_R49 49 /*TSSI */ + #define BBP_R50 50 + #define BBP_R51 51 + #define BBP_R52 52 + #define BBP_R55 55 +-#define BBP_R62 62 // Rx SQ0 Threshold HIGH ++#define BBP_R62 62 /* Rx SQ0 Threshold HIGH */ + #define BBP_R63 63 + #define BBP_R64 64 + #define BBP_R65 65 +@@ -119,7 +119,7 @@ + #define BBP_R67 67 + #define BBP_R68 68 + #define BBP_R69 69 +-#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold ++#define BBP_R70 70 /* Rx AGC SQ CCK Xcorr threshold */ + #define BBP_R73 73 + #define BBP_R75 75 + #define BBP_R77 77 +@@ -133,7 +133,7 @@ + #define BBP_R86 86 + #define BBP_R91 91 + #define BBP_R92 92 +-#define BBP_R94 94 // Tx Gain Control ++#define BBP_R94 94 /* Tx Gain Control */ + #define BBP_R103 103 + #define BBP_R105 105 + #define BBP_R106 106 +@@ -149,22 +149,22 @@ + #define BBP_R122 122 + #define BBP_R123 123 + #ifdef RT30xx +-#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control +-#endif // RT30xx // ++#define BBP_R138 138 /* add by johnli, RF power sequence setup, ADC dynamic on/off control */ ++#endif /* RT30xx // */ + +-#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db ++#define BBPR94_DEFAULT 0x06 /* Add 1 value will gain 1db */ + +-// +-// BBP & RF are using indirect access. Before write any value into it. +-// We have to make sure there is no outstanding command pending via checking busy bit. +-// +-#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register ++/* */ ++/* BBP & RF are using indirect access. Before write any value into it. */ ++/* We have to make sure there is no outstanding command pending via checking busy bit. */ ++/* */ ++#define MAX_BUSY_COUNT 100 /* Number of retry before failing access BBP & RF indirect register */ + +-//#define PHY_TR_SWITCH_TIME 5 // usec ++/*#define PHY_TR_SWITCH_TIME 5 // usec */ + +-//#define BBP_R17_LOW_SENSIBILITY 0x50 +-//#define BBP_R17_MID_SENSIBILITY 0x41 +-//#define BBP_R17_DYNAMIC_UP_BOUND 0x40 ++/*#define BBP_R17_LOW_SENSIBILITY 0x50 */ ++/*#define BBP_R17_MID_SENSIBILITY 0x41 */ ++/*#define BBP_R17_DYNAMIC_UP_BOUND 0x40 */ + + #define RSSI_FOR_VERY_LOW_SENSIBILITY -35 + #define RSSI_FOR_LOW_SENSIBILITY -58 +@@ -194,15 +194,15 @@ + } \ + } \ + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #ifdef RT30xx + #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV) + #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V) +-#endif // RT30xx // ++#endif /* RT30xx // */ + + /***************************************************************************** + BBP register Read/Write marco definitions. +@@ -276,7 +276,7 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ +-// Read BBP register by register's ID. Generate PER to test BA ++/* Read BBP register by register's ID. Generate PER to test BA */ + #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \ + { \ + BBP_CSR_CFG_STRUC BbpCsr; \ +@@ -425,7 +425,7 @@ + But for some chipset which didn't have mcu (e.g., RBUS based chipset), we + will use this function too and didn't access the bbp register via the MCU. + */ +-// Write BBP register by register's ID & value ++/* Write BBP register by register's ID & value */ + #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ + { \ + BBP_CSR_CFG_STRUC BbpCsr; \ +@@ -510,7 +510,7 @@ + DBGPRINT_ERR(("****** BBP_Write_Latch Buffer exceeds max boundry ****** \n")); \ + } \ + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + #ifdef RTMP_MAC_USB + #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) +@@ -518,7 +518,7 @@ + + #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V) + #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #ifdef RT30xx + #define RTMP_ASIC_MMPS_DISABLE(_pAd) \ +@@ -551,6 +551,6 @@ + RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ + }while(0) + +-#endif // RT30xx // ++#endif /* RT30xx // */ + +-#endif // __RTMP_PHY_H__ // ++#endif /* __RTMP_PHY_H__ // */ +diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h +index e3d55b4..af8b5ca 100644 +--- a/drivers/staging/rt2860/chlist.h ++++ b/drivers/staging/rt2860/chlist.h +@@ -52,14 +52,14 @@ + typedef struct _CH_DESP { + UCHAR FirstChannel; + UCHAR NumOfCh; +- CHAR MaxTxPwr; // dBm +- UCHAR Geography; // 0:out door, 1:in door, 2:both +- BOOLEAN DfsReq; // Dfs require, 0: No, 1: yes. ++ CHAR MaxTxPwr; /* dBm */ ++ UCHAR Geography; /* 0:out door, 1:in door, 2:both */ ++ BOOLEAN DfsReq; /* Dfs require, 0: No, 1: yes. */ + } CH_DESP, *PCH_DESP; + + typedef struct _CH_REGION { + UCHAR CountReg[3]; +- UCHAR DfsType; // 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 ++ UCHAR DfsType; /* 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 */ + CH_DESP ChDesp[10]; + } CH_REGION, *PCH_REGION; + +@@ -114,4 +114,4 @@ VOID N_SetCenCh(IN PRTMP_ADAPTER pAd); + + UINT8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 channel); + +-#endif // __CHLIST_H__ ++#endif /* __CHLIST_H__ */ +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +index 56aa583..4d8e8bf 100644 +--- a/drivers/staging/rt2860/eeprom.h ++++ b/drivers/staging/rt2860/eeprom.h +@@ -43,25 +43,25 @@ + ************************************************************************/ + int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, + IN USHORT Offset, OUT USHORT * pValue); +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + /************************************************************************* + * Public function declarations for usb-based prom chipset + ************************************************************************/ + NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, + IN USHORT offset, OUT PUSHORT pData); +-#endif // RTMP_USB_SUPPORT // ++#endif /* RTMP_USB_SUPPORT // */ + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, + IN USHORT Offset, OUT USHORT * pValue); +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++#endif /* RTMP_EFUSE_SUPPORT // */ ++#endif /* RT30xx // */ + + /************************************************************************* + * Public function declarations for prom operation callback functions setting + ************************************************************************/ + INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType); + +-#endif // __EEPROM_H__ // ++#endif /* __EEPROM_H__ // */ +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index cb3cc9b..8585a4d 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -41,18 +41,18 @@ + + #include "rtmp_dot11.h" + +-// maximum supported capability information - +-// ESS, IBSS, Privacy, Short Preamble, Spectrum mgmt, Short Slot ++/* maximum supported capability information - */ ++/* ESS, IBSS, Privacy, Short Preamble, Spectrum mgmt, Short Slot */ + #define SUPPORTED_CAPABILITY_INFO 0x0533 + + #define END_OF_ARGS -1 + #define LFSR_MASK 0x80000057 +-#define MLME_TASK_EXEC_INTV 100/*200*/ // ++#define MLME_TASK_EXEC_INTV 100/*200*/ /* */ + #define LEAD_TIME 5 +-#define MLME_TASK_EXEC_MULTIPLE 10 /*5*/ // MLME_TASK_EXEC_MULTIPLE * MLME_TASK_EXEC_INTV = 1 sec +-#define REORDER_EXEC_INTV 100 // 0.1 sec ++#define MLME_TASK_EXEC_MULTIPLE 10 /*5*/ /* MLME_TASK_EXEC_MULTIPLE * MLME_TASK_EXEC_INTV = 1 sec */ ++#define REORDER_EXEC_INTV 100 /* 0.1 sec */ + +-// The definition of Radar detection duration region ++/* The definition of Radar detection duration region */ + #define CE 0 + #define FCC 1 + #define JAP 2 +@@ -60,61 +60,61 @@ + #define JAP_W56 4 + #define MAX_RD_REGION 5 + +-#define BEACON_LOST_TIME 4 * OS_HZ // 2048 msec = 2 sec +- +-#define DLS_TIMEOUT 1200 // unit: msec +-#define AUTH_TIMEOUT 300 // unit: msec +-#define ASSOC_TIMEOUT 300 // unit: msec +-#define JOIN_TIMEOUT 2000 // unit: msec +-#define SHORT_CHANNEL_TIME 90 // unit: msec +-#define MIN_CHANNEL_TIME 110 // unit: msec, for dual band scan +-#define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan +-#define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time +-#define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1 +-#define LINK_DOWN_TIMEOUT 20000 // unit: msec +-#define AUTO_WAKEUP_TIMEOUT 70 //unit: msec +- +-#define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1 +- +-// Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720). +-// SHould not refer to this constant anymore +-//#define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm +-#define RSSI_FOR_MID_TX_POWER -55 // -55 db is considered mid-distance +-#define RSSI_FOR_LOW_TX_POWER -45 // -45 db is considered very short distance and +- // eligible to use a lower TX power ++#define BEACON_LOST_TIME 4 * OS_HZ /* 2048 msec = 2 sec */ ++ ++#define DLS_TIMEOUT 1200 /* unit: msec */ ++#define AUTH_TIMEOUT 300 /* unit: msec */ ++#define ASSOC_TIMEOUT 300 /* unit: msec */ ++#define JOIN_TIMEOUT 2000 /* unit: msec */ ++#define SHORT_CHANNEL_TIME 90 /* unit: msec */ ++#define MIN_CHANNEL_TIME 110 /* unit: msec, for dual band scan */ ++#define MAX_CHANNEL_TIME 140 /* unit: msec, for single band scan */ ++#define FAST_ACTIVE_SCAN_TIME 30 /* Active scan waiting for probe response time */ ++#define CW_MIN_IN_BITS 4 /* actual CwMin = 2^CW_MIN_IN_BITS - 1 */ ++#define LINK_DOWN_TIMEOUT 20000 /* unit: msec */ ++#define AUTO_WAKEUP_TIMEOUT 70 /*unit: msec */ ++ ++#define CW_MAX_IN_BITS 10 /* actual CwMax = 2^CW_MAX_IN_BITS - 1 */ ++ ++/* Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720). */ ++/* SHould not refer to this constant anymore */ ++/*#define RSSI_TO_DBM_OFFSET 120 // for RT2530 RSSI-115 = dBm */ ++#define RSSI_FOR_MID_TX_POWER -55 /* -55 db is considered mid-distance */ ++#define RSSI_FOR_LOW_TX_POWER -45 /* -45 db is considered very short distance and */ ++ /* eligible to use a lower TX power */ + #define RSSI_FOR_LOWEST_TX_POWER -30 +-//#define MID_TX_POWER_DELTA 0 // 0 db from full TX power upon mid-distance to AP +-#define LOW_TX_POWER_DELTA 6 // -3 db from full TX power upon very short distance. 1 grade is 0.5 db +-#define LOWEST_TX_POWER_DELTA 16 // -8 db from full TX power upon shortest distance. 1 grade is 0.5 db ++/*#define MID_TX_POWER_DELTA 0 // 0 db from full TX power upon mid-distance to AP */ ++#define LOW_TX_POWER_DELTA 6 /* -3 db from full TX power upon very short distance. 1 grade is 0.5 db */ ++#define LOWEST_TX_POWER_DELTA 16 /* -8 db from full TX power upon shortest distance. 1 grade is 0.5 db */ + + #define RSSI_TRIGGERED_UPON_BELOW_THRESHOLD 0 + #define RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD 1 + #define RSSI_THRESHOLD_FOR_ROAMING 25 + #define RSSI_DELTA 5 + +-// Channel Quality Indication ++/* Channel Quality Indication */ + #define CQI_IS_GOOD(cqi) ((cqi) >= 50) +-//#define CQI_IS_FAIR(cqi) (((cqi) >= 20) && ((cqi) < 50)) +-#define CQI_IS_POOR(cqi) (cqi < 50) //(((cqi) >= 5) && ((cqi) < 20)) ++/*#define CQI_IS_FAIR(cqi) (((cqi) >= 20) && ((cqi) < 50)) */ ++#define CQI_IS_POOR(cqi) (cqi < 50) /*(((cqi) >= 5) && ((cqi) < 20)) */ + #define CQI_IS_BAD(cqi) (cqi < 5) + #define CQI_IS_DEAD(cqi) (cqi == 0) + +-// weighting factor to calculate Channel quality, total should be 100% ++/* weighting factor to calculate Channel quality, total should be 100% */ + #define RSSI_WEIGHTING 50 + #define TX_WEIGHTING 30 + #define RX_WEIGHTING 20 + + #define BSS_NOT_FOUND 0xFFFFFFFF + +-#define MAX_LEN_OF_MLME_QUEUE 40 //10 ++#define MAX_LEN_OF_MLME_QUEUE 40 /*10 */ + +-#define SCAN_PASSIVE 18 // scan with no probe request, only wait beacon and probe response +-#define SCAN_ACTIVE 19 // scan with probe request, and wait beacon and probe response +-#define SCAN_CISCO_PASSIVE 20 // Single channel passive scan +-#define SCAN_CISCO_ACTIVE 21 // Single channel active scan +-#define SCAN_CISCO_NOISE 22 // Single channel passive scan for noise histogram collection +-#define SCAN_CISCO_CHANNEL_LOAD 23 // Single channel passive scan for channel load collection +-#define FAST_SCAN_ACTIVE 24 // scan with probe request, and wait beacon and probe response ++#define SCAN_PASSIVE 18 /* scan with no probe request, only wait beacon and probe response */ ++#define SCAN_ACTIVE 19 /* scan with probe request, and wait beacon and probe response */ ++#define SCAN_CISCO_PASSIVE 20 /* Single channel passive scan */ ++#define SCAN_CISCO_ACTIVE 21 /* Single channel active scan */ ++#define SCAN_CISCO_NOISE 22 /* Single channel passive scan for noise histogram collection */ ++#define SCAN_CISCO_CHANNEL_LOAD 23 /* Single channel passive scan for channel load collection */ ++#define FAST_SCAN_ACTIVE 24 /* scan with probe request, and wait beacon and probe response */ + + #define MAC_ADDR_IS_GROUP(Addr) (((Addr[0]) & 0x01)) + #define MAC_ADDR_HASH(Addr) (Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5]) +@@ -122,13 +122,13 @@ + #define TID_MAC_HASH(Addr,TID) (TID^Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5]) + #define TID_MAC_HASH_INDEX(Addr,TID) (TID_MAC_HASH(Addr,TID) % HASH_TABLE_SIZE) + +-// LED Control +-// assoiation ON. one LED ON. another blinking when TX, OFF when idle +-// no association, both LED off ++/* LED Control */ ++/* assoiation ON. one LED ON. another blinking when TX, OFF when idle */ ++/* no association, both LED off */ + #define ASIC_LED_ACT_ON(pAd) RTMP_IO_WRITE32(pAd, MAC_CSR14, 0x00031e46) + #define ASIC_LED_ACT_OFF(pAd) RTMP_IO_WRITE32(pAd, MAC_CSR14, 0x00001e46) + +-// bit definition of the 2-byte pBEACON->Capability field ++/* bit definition of the 2-byte pBEACON->Capability field */ + #define CAP_IS_ESS_ON(x) (((x) & 0x0001) != 0) + #define CAP_IS_IBSS_ON(x) (((x) & 0x0002) != 0) + #define CAP_IS_CF_POLLABLE_ON(x) (((x) & 0x0004) != 0) +@@ -137,44 +137,44 @@ + #define CAP_IS_SHORT_PREAMBLE_ON(x) (((x) & 0x0020) != 0) + #define CAP_IS_PBCC_ON(x) (((x) & 0x0040) != 0) + #define CAP_IS_AGILITY_ON(x) (((x) & 0x0080) != 0) +-#define CAP_IS_SPECTRUM_MGMT(x) (((x) & 0x0100) != 0) // 802.11e d9 +-#define CAP_IS_QOS(x) (((x) & 0x0200) != 0) // 802.11e d9 ++#define CAP_IS_SPECTRUM_MGMT(x) (((x) & 0x0100) != 0) /* 802.11e d9 */ ++#define CAP_IS_QOS(x) (((x) & 0x0200) != 0) /* 802.11e d9 */ + #define CAP_IS_SHORT_SLOT(x) (((x) & 0x0400) != 0) +-#define CAP_IS_APSD(x) (((x) & 0x0800) != 0) // 802.11e d9 +-#define CAP_IS_IMMED_BA(x) (((x) & 0x1000) != 0) // 802.11e d9 ++#define CAP_IS_APSD(x) (((x) & 0x0800) != 0) /* 802.11e d9 */ ++#define CAP_IS_IMMED_BA(x) (((x) & 0x1000) != 0) /* 802.11e d9 */ + #define CAP_IS_DSSS_OFDM(x) (((x) & 0x2000) != 0) +-#define CAP_IS_DELAY_BA(x) (((x) & 0x4000) != 0) // 802.11e d9 ++#define CAP_IS_DELAY_BA(x) (((x) & 0x4000) != 0) /* 802.11e d9 */ + + #define CAP_GENERATE(ess,ibss,priv,s_pre,s_slot,spectrum) (((ess) ? 0x0001 : 0x0000) | ((ibss) ? 0x0002 : 0x0000) | ((priv) ? 0x0010 : 0x0000) | ((s_pre) ? 0x0020 : 0x0000) | ((s_slot) ? 0x0400 : 0x0000) | ((spectrum) ? 0x0100 : 0x0000)) + +-#define ERP_IS_NON_ERP_PRESENT(x) (((x) & 0x01) != 0) // 802.11g +-#define ERP_IS_USE_PROTECTION(x) (((x) & 0x02) != 0) // 802.11g +-#define ERP_IS_USE_BARKER_PREAMBLE(x) (((x) & 0x04) != 0) // 802.11g ++#define ERP_IS_NON_ERP_PRESENT(x) (((x) & 0x01) != 0) /* 802.11g */ ++#define ERP_IS_USE_PROTECTION(x) (((x) & 0x02) != 0) /* 802.11g */ ++#define ERP_IS_USE_BARKER_PREAMBLE(x) (((x) & 0x04) != 0) /* 802.11g */ + +-#define DRS_TX_QUALITY_WORST_BOUND 8 // 3 // just test by gary ++#define DRS_TX_QUALITY_WORST_BOUND 8 /* 3 // just test by gary */ + #define DRS_PENALTY 8 + + #define BA_NOTUSE 2 +-//BA Policy subfiled value in ADDBA frame ++/*BA Policy subfiled value in ADDBA frame */ + #define IMMED_BA 1 + #define DELAY_BA 0 + +-// BA Initiator subfield in DELBA frame ++/* BA Initiator subfield in DELBA frame */ + #define ORIGINATOR 1 + #define RECIPIENT 0 + +-// ADDBA Status Code ++/* ADDBA Status Code */ + #define ADDBA_RESULTCODE_SUCCESS 0 + #define ADDBA_RESULTCODE_REFUSED 37 + #define ADDBA_RESULTCODE_INVALID_PARAMETERS 38 + +-// DELBA Reason Code ++/* DELBA Reason Code */ + #define DELBA_REASONCODE_QSTA_LEAVING 36 + #define DELBA_REASONCODE_END_BA 37 + #define DELBA_REASONCODE_UNKNOWN_BA 38 + #define DELBA_REASONCODE_TIMEOUT 39 + +-// reset all OneSecTx counters ++/* reset all OneSecTx counters */ + #define RESET_ONE_SEC_TX_CNT(__pEntry) \ + if (((__pEntry)) != NULL) \ + { \ +@@ -183,38 +183,38 @@ if (((__pEntry)) != NULL) \ + (__pEntry)->OneSecTxNoRetryOkCount = 0; \ + } + +-// +-// 802.11 frame formats +-// +-// HT Capability INFO field in HT Cap IE . ++/* */ ++/* 802.11 frame formats */ ++/* */ ++/* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { + USHORT AdvCoding:1; + USHORT ChannelWidth:1; +- USHORT MimoPs:2; //momi power safe +- USHORT GF:1; //green field ++ USHORT MimoPs:2; /*momi power safe */ ++ USHORT GF:1; /*green field */ + USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz ++ USHORT ShortGIfor40:1; /*for40MHz */ + USHORT TxSTBC:1; + USHORT RxSTBC:2; +- USHORT DelayedBA:1; //rt2860c not support +- USHORT AMsduSize:1; // only support as zero ++ USHORT DelayedBA:1; /*rt2860c not support */ ++ USHORT AMsduSize:1; /* only support as zero */ + USHORT CCKmodein40:1; + USHORT PSMP:1; + USHORT Forty_Mhz_Intolerant:1; + USHORT LSIGTxopProSup:1; + } HT_CAP_INFO, *PHT_CAP_INFO; + +-// HT Capability INFO field in HT Cap IE . ++/* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { + UCHAR MaxRAmpduFactor:2; + UCHAR MpduDensity:3; +- UCHAR rsv:3; //momi power safe ++ UCHAR rsv:3; /*momi power safe */ + } HT_CAP_PARM, *PHT_CAP_PARM; + +-// HT Capability INFO field in HT Cap IE . ++/* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { + UCHAR MCSSet[10]; +- UCHAR SupRate[2]; // unit : 1Mbps ++ UCHAR SupRate[2]; /* unit : 1Mbps */ + UCHAR TxMCSSetDefined:1; + UCHAR TxRxNotEqual:1; + UCHAR TxStream:2; +@@ -223,18 +223,18 @@ typedef struct PACKED { + UCHAR rsv3[3]; + } HT_MCS_SET, *PHT_MCS_SET; + +-// HT Capability INFO field in HT Cap IE . ++/* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { + USHORT Pco:1; + USHORT TranTime:2; +- USHORT rsv:5; //momi power safe +- USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. +- USHORT PlusHTC:1; //+HTC control field support +- USHORT RDGSupport:1; //reverse Direction Grant support ++ USHORT rsv:5; /*momi power safe */ ++ USHORT MCSFeedback:2; /*0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. */ ++ USHORT PlusHTC:1; /*+HTC control field support */ ++ USHORT RDGSupport:1; /*reverse Direction Grant support */ + USHORT rsv2:4; + } EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO; + +-// HT Beamforming field in HT Cap IE . ++/* HT Beamforming field in HT Cap IE . */ + typedef struct PACKED _HT_BF_CAP { + ULONG TxBFRecCapable:1; + ULONG RxSoundCapable:1; +@@ -258,7 +258,7 @@ typedef struct PACKED _HT_BF_CAP { + ULONG rsv:3; + } HT_BF_CAP, *PHT_BF_CAP; + +-// HT antenna selection field in HT Cap IE . ++/* HT antenna selection field in HT Cap IE . */ + typedef struct PACKED _HT_AS_CAP { + UCHAR AntSelect:1; + UCHAR ExpCSIFbkTxASEL:1; +@@ -270,48 +270,48 @@ typedef struct PACKED _HT_AS_CAP { + UCHAR rsv:1; + } HT_AS_CAP, *PHT_AS_CAP; + +-// Draft 1.0 set IE length 26, but is extensible.. ++/* Draft 1.0 set IE length 26, but is extensible.. */ + #define SIZE_HT_CAP_IE 26 +-// The structure for HT Capability IE. ++/* The structure for HT Capability IE. */ + typedef struct PACKED _HT_CAPABILITY_IE { + HT_CAP_INFO HtCapInfo; + HT_CAP_PARM HtCapParm; +-// HT_MCS_SET HtMCSSet; ++/* HT_MCS_SET HtMCSSet; */ + UCHAR MCSSet[16]; + EXT_HT_CAP_INFO ExtHtCapInfo; +- HT_BF_CAP TxBFCap; // beamforming cap. rt2860c not support beamforming. +- HT_AS_CAP ASCap; //antenna selection. ++ HT_BF_CAP TxBFCap; /* beamforming cap. rt2860c not support beamforming. */ ++ HT_AS_CAP ASCap; /*antenna selection. */ + } HT_CAPABILITY_IE, *PHT_CAPABILITY_IE; + +-// 802.11n draft3 related structure definitions. +-// 7.3.2.60 +-#define dot11OBSSScanPassiveDwell 20 // in TU. min amount of time that the STA continously scans each channel when performing an active OBSS scan. +-#define dot11OBSSScanActiveDwell 10 // in TU.min amount of time that the STA continously scans each channel when performing an passive OBSS scan. +-#define dot11BSSWidthTriggerScanInterval 300 // in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. +-#define dot11OBSSScanPassiveTotalPerChannel 200 // in TU. min total amount of time that the STA scans each channel when performing a passive OBSS scan. +-#define dot11OBSSScanActiveTotalPerChannel 20 //in TU. min total amount of time that the STA scans each channel when performing a active OBSS scan +-#define dot11BSSWidthChannelTransactionDelayFactor 5 // min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maximum +- // interval between overlapping BSS scan operations. +-#define dot11BSSScanActivityThreshold 25 // in %%, max total time that a STA may be active on the medium during a period of +- // (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without +- // being obligated to perform OBSS Scan operations. default is 25(== 0.25%) ++/* 802.11n draft3 related structure definitions. */ ++/* 7.3.2.60 */ ++#define dot11OBSSScanPassiveDwell 20 /* in TU. min amount of time that the STA continously scans each channel when performing an active OBSS scan. */ ++#define dot11OBSSScanActiveDwell 10 /* in TU.min amount of time that the STA continously scans each channel when performing an passive OBSS scan. */ ++#define dot11BSSWidthTriggerScanInterval 300 /* in sec. max interval between scan operations to be performed to detect BSS channel width trigger events. */ ++#define dot11OBSSScanPassiveTotalPerChannel 200 /* in TU. min total amount of time that the STA scans each channel when performing a passive OBSS scan. */ ++#define dot11OBSSScanActiveTotalPerChannel 20 /*in TU. min total amount of time that the STA scans each channel when performing a active OBSS scan */ ++#define dot11BSSWidthChannelTransactionDelayFactor 5 /* min ratio between the delay time in performing a switch from 20MHz BSS to 20/40 BSS operation and the maximum */ ++ /* interval between overlapping BSS scan operations. */ ++#define dot11BSSScanActivityThreshold 25 /* in %%, max total time that a STA may be active on the medium during a period of */ ++ /* (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without */ ++ /* being obligated to perform OBSS Scan operations. default is 25(== 0.25%) */ + + typedef struct PACKED _OVERLAP_BSS_SCAN_IE { + USHORT ScanPassiveDwell; + USHORT ScanActiveDwell; +- USHORT TriggerScanInt; // Trigger scan interval +- USHORT PassiveTalPerChannel; // passive total per channel +- USHORT ActiveTalPerChannel; // active total per channel +- USHORT DelayFactor; // BSS width channel transition delay factor +- USHORT ScanActThre; // Scan Activity threshold ++ USHORT TriggerScanInt; /* Trigger scan interval */ ++ USHORT PassiveTalPerChannel; /* passive total per channel */ ++ USHORT ActiveTalPerChannel; /* active total per channel */ ++ USHORT DelayFactor; /* BSS width channel transition delay factor */ ++ USHORT ScanActThre; /* Scan Activity threshold */ + } OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; + +-// 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST ++/* 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST */ + typedef union PACKED _BSS_2040_COEXIST_IE { + struct PACKED { + UCHAR InfoReq:1; +- UCHAR Intolerant40:1; // Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. +- UCHAR BSS20WidthReq:1; // Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. ++ UCHAR Intolerant40:1; /* Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. */ ++ UCHAR BSS20WidthReq:1; /* Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. */ + UCHAR rsv:5; + } field; + UCHAR word; +@@ -320,22 +320,22 @@ typedef union PACKED _BSS_2040_COEXIST_IE { + typedef struct _TRIGGER_EVENTA { + BOOLEAN bValid; + UCHAR BSSID[6]; +- UCHAR RegClass; // Regulatory Class ++ UCHAR RegClass; /* Regulatory Class */ + USHORT Channel; +- ULONG CDCounter; // Maintain a seperate count down counter for each Event A. ++ ULONG CDCounter; /* Maintain a seperate count down counter for each Event A. */ + } TRIGGER_EVENTA, *PTRIGGER_EVENTA; + +-// 20/40 trigger event table +-// If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. ++/* 20/40 trigger event table */ ++/* If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. */ + #define MAX_TRIGGER_EVENT 64 + typedef struct _TRIGGER_EVENT_TAB { + UCHAR EventANo; + TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; +- ULONG EventBCountDown; // Count down counter for Event B. ++ ULONG EventBCountDown; /* Count down counter for Event B. */ + } TRIGGER_EVENT_TAB, *PTRIGGER_EVENT_TAB; + +-// 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). +-// This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 ++/* 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). */ ++/* This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 */ + typedef struct PACKED _EXT_CAP_INFO_ELEMENT { + UCHAR BssCoexistMgmtSupport:1; + UCHAR rsv:1; +@@ -343,59 +343,59 @@ typedef struct PACKED _EXT_CAP_INFO_ELEMENT { + UCHAR rsv2:5; + } EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; + +-// 802.11n 7.3.2.61 ++/* 802.11n 7.3.2.61 */ + typedef struct PACKED _BSS_2040_COEXIST_ELEMENT { +- UCHAR ElementID; // ID = IE_2040_BSS_COEXIST = 72 ++ UCHAR ElementID; /* ID = IE_2040_BSS_COEXIST = 72 */ + UCHAR Len; + BSS_2040_COEXIST_IE BssCoexistIe; + } BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; + +-//802.11n 7.3.2.59 ++/*802.11n 7.3.2.59 */ + typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT { +- UCHAR ElementID; // ID = IE_2040_BSS_INTOLERANT_REPORT = 73 ++ UCHAR ElementID; /* ID = IE_2040_BSS_INTOLERANT_REPORT = 73 */ + UCHAR Len; + UCHAR RegulatoryClass; + UCHAR ChList[0]; + } BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; + +-// The structure for channel switch annoucement IE. This is in 802.11n D3.03 ++/* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ + typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE { +- UCHAR SwitchMode; //channel switch mode +- UCHAR NewChannel; // +- UCHAR SwitchCount; // ++ UCHAR SwitchMode; /*channel switch mode */ ++ UCHAR NewChannel; /* */ ++ UCHAR SwitchCount; /* */ + } CHA_SWITCH_ANNOUNCE_IE, *PCHA_SWITCH_ANNOUNCE_IE; + +-// The structure for channel switch annoucement IE. This is in 802.11n D3.03 ++/* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ + typedef struct PACKED _SEC_CHA_OFFSET_IE { +- UCHAR SecondaryChannelOffset; // 1: Secondary above, 3: Secondary below, 0: no Secondary ++ UCHAR SecondaryChannelOffset; /* 1: Secondary above, 3: Secondary below, 0: no Secondary */ + } SEC_CHA_OFFSET_IE, *PSEC_CHA_OFFSET_IE; + +-// This structure is extracted from struct RT_HT_CAPABILITY ++/* This structure is extracted from struct RT_HT_CAPABILITY */ + typedef struct { +- BOOLEAN bHtEnable; // If we should use ht rate. +- BOOLEAN bPreNHt; // If we should use ht rate. +- //Substract from HT Capability IE ++ BOOLEAN bHtEnable; /* If we should use ht rate. */ ++ BOOLEAN bPreNHt; /* If we should use ht rate. */ ++ /*Substract from HT Capability IE */ + UCHAR MCSSet[16]; + } RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; + +-//This structure substracts ralink supports from all 802.11n-related features. +-//Features not listed here but contained in 802.11n spec are not supported in rt2860. ++/*This structure substracts ralink supports from all 802.11n-related features. */ ++/*Features not listed here but contained in 802.11n spec are not supported in rt2860. */ + typedef struct { + USHORT ChannelWidth:1; +- USHORT MimoPs:2; //mimo power safe MMPS_ +- USHORT GF:1; //green field ++ USHORT MimoPs:2; /*mimo power safe MMPS_ */ ++ USHORT GF:1; /*green field */ + USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; //for40MHz ++ USHORT ShortGIfor40:1; /*for40MHz */ + USHORT TxSTBC:1; +- USHORT RxSTBC:2; // 2 bits +- USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n +- USHORT AmsduSize:1; // Max receiving A-MSDU size ++ USHORT RxSTBC:2; /* 2 bits */ ++ USHORT AmsduEnable:1; /* Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n */ ++ USHORT AmsduSize:1; /* Max receiving A-MSDU size */ + USHORT rsv:5; + +- //Substract from Addiont HT INFO IE ++ /*Substract from Addiont HT INFO IE */ + UCHAR MaxRAmpduFactor:2; + UCHAR MpduDensity:3; +- UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n ++ UCHAR ExtChanOffset:2; /* Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n */ + UCHAR RecomWidth:1; + + USHORT OperaionMode:2; +@@ -404,19 +404,19 @@ typedef struct { + USHORT OBSS_NonHTExist:1; + USHORT rsv2:11; + +- // New Extension Channel Offset IE ++ /* New Extension Channel Offset IE */ + UCHAR NewExtChannelOffset; +- // Extension Capability IE = 127 ++ /* Extension Capability IE = 127 */ + UCHAR BSSCoexist2040; + } RT_HT_CAPABILITY, *PRT_HT_CAPABILITY; + +-// field in Addtional HT Information IE . ++/* field in Addtional HT Information IE . */ + typedef struct PACKED { + UCHAR ExtChanOffset:2; + UCHAR RecomWidth:1; + UCHAR RifsMode:1; +- UCHAR S_PSMPSup:1; //Indicate support for scheduled PSMP +- UCHAR SerInterGranu:3; //service interval granularity ++ UCHAR S_PSMPSup:1; /*Indicate support for scheduled PSMP */ ++ UCHAR SerInterGranu:3; /*service interval granularity */ + } ADD_HTINFO, *PADD_HTINFO; + + typedef struct PACKED { +@@ -427,13 +427,13 @@ typedef struct PACKED { + USHORT rsv2:11; + } ADD_HTINFO2, *PADD_HTINFO2; + +-// TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. ++/* TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. */ + typedef struct PACKED { + USHORT StbcMcs:6; + USHORT DualBeacon:1; + USHORT DualCTSProtect:1; + USHORT STBCBeacon:1; +- USHORT LsigTxopProt:1; // L-SIG TXOP protection full support ++ USHORT LsigTxopProt:1; /* L-SIG TXOP protection full support */ + USHORT PcoActive:1; + USHORT PcoPhase:1; + USHORT rsv:4; +@@ -445,7 +445,7 @@ typedef struct PACKED { + ADD_HTINFO AddHtInfo; + ADD_HTINFO2 AddHtInfo2; + ADD_HTINFO3 AddHtInfo3; +- UCHAR MCSSet[16]; // Basic MCS set ++ UCHAR MCSSet[16]; /* Basic MCS set */ + } ADD_HT_INFO_IE, *PADD_HT_INFO_IE; + + typedef struct PACKED { +@@ -457,7 +457,7 @@ typedef struct PACKED _FRAME_802_11 { + UCHAR Octet[1]; + } FRAME_802_11, *PFRAME_802_11; + +-// QoSNull embedding of management action. When HT Control MA field set to 1. ++/* QoSNull embedding of management action. When HT Control MA field set to 1. */ + typedef struct PACKED _MA_BODY { + UCHAR Category; + UCHAR Action; +@@ -469,51 +469,51 @@ typedef struct PACKED _HEADER_802_3 { + UCHAR SAAddr2[MAC_ADDR_LEN]; + UCHAR Octet[2]; + } HEADER_802_3, *PHEADER_802_3; +-////Block ACK related format +-// 2-byte BA Parameter field in DELBA frames to terminate an already set up bA ++/*//Block ACK related format */ ++/* 2-byte BA Parameter field in DELBA frames to terminate an already set up bA */ + typedef struct PACKED { +- USHORT Rsv:11; // always set to 0 +- USHORT Initiator:1; // 1: originator 0:recipient +- USHORT TID:4; // value of TC os TS ++ USHORT Rsv:11; /* always set to 0 */ ++ USHORT Initiator:1; /* 1: originator 0:recipient */ ++ USHORT TID:4; /* value of TC os TS */ + } DELBA_PARM, *PDELBA_PARM; + +-// 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA ++/* 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA */ + typedef struct PACKED { +- USHORT AMSDUSupported:1; // 0: not permitted 1: permitted +- USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA +- USHORT TID:4; // value of TC os TS +- USHORT BufSize:10; // number of buffe of size 2304 octetsr ++ USHORT AMSDUSupported:1; /* 0: not permitted 1: permitted */ ++ USHORT BAPolicy:1; /* 1: immediately BA 0:delayed BA */ ++ USHORT TID:4; /* value of TC os TS */ ++ USHORT BufSize:10; /* number of buffe of size 2304 octetsr */ + } BA_PARM, *PBA_PARM; + +-// 2-byte BA Starting Seq CONTROL field ++/* 2-byte BA Starting Seq CONTROL field */ + typedef union PACKED { + struct PACKED { +- USHORT FragNum:4; // always set to 0 +- USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent ++ USHORT FragNum:4; /* always set to 0 */ ++ USHORT StartSeq:12; /* sequence number of the 1st MSDU for which this BAR is sent */ + } field; + USHORT word; + } BASEQ_CONTROL, *PBASEQ_CONTROL; + +-//BAControl and BARControl are the same +-// 2-byte BA CONTROL field in BA frame ++/*BAControl and BARControl are the same */ ++/* 2-byte BA CONTROL field in BA frame */ + typedef struct PACKED { +- USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK +- USHORT MTID:1; //EWC V1.24 ++ USHORT ACKPolicy:1; /* only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK */ ++ USHORT MTID:1; /*EWC V1.24 */ + USHORT Compressed:1; + USHORT Rsv:9; + USHORT TID:4; + } BA_CONTROL, *PBA_CONTROL; + +-// 2-byte BAR CONTROL field in BAR frame ++/* 2-byte BAR CONTROL field in BAR frame */ + typedef struct PACKED { +- USHORT ACKPolicy:1; // 0:normal ack, 1:no ack. +- USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ ++ USHORT ACKPolicy:1; /* 0:normal ack, 1:no ack. */ ++ USHORT MTID:1; /*if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ */ + USHORT Compressed:1; + USHORT Rsv1:9; + USHORT TID:4; + } BAR_CONTROL, *PBAR_CONTROL; + +-// BARControl in MTBAR frame ++/* BARControl in MTBAR frame */ + typedef struct PACKED { + USHORT ACKPolicy:1; + USHORT MTID:1; +@@ -532,7 +532,7 @@ typedef struct { + BASEQ_CONTROL BAStartingSeq; + } EACH_TID, *PEACH_TID; + +-// BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. ++/* BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. */ + typedef struct PACKED _FRAME_BA_REQ { + FRAME_CONTROL FC; + USHORT Duration; +@@ -552,7 +552,7 @@ typedef struct PACKED _FRAME_MTBA_REQ { + BASEQ_CONTROL BAStartingSeq; + } FRAME_MTBA_REQ, *PFRAME_MTBA_REQ; + +-// Compressed format is mandantory in HT STA ++/* Compressed format is mandantory in HT STA */ + typedef struct PACKED _FRAME_MTBA { + FRAME_CONTROL FC; + USHORT Duration; +@@ -567,7 +567,7 @@ typedef struct PACKED _FRAME_PSMP_ACTION { + HEADER_802_11 Hdr; + UCHAR Category; + UCHAR Action; +- UCHAR Psmp; // 7.3.1.25 ++ UCHAR Psmp; /* 7.3.1.25 */ + } FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; + + typedef struct PACKED _FRAME_ACTION_HDR { +@@ -576,17 +576,17 @@ typedef struct PACKED _FRAME_ACTION_HDR { + UCHAR Action; + } FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; + +-//Action Frame +-//Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 ++/*Action Frame */ ++/*Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 */ + typedef struct PACKED _CHAN_SWITCH_ANNOUNCE { +- UCHAR ElementID; // ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 ++ UCHAR ElementID; /* ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 */ + UCHAR Len; + CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; + } CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; + +-//802.11n : 7.3.2.20a ++/*802.11n : 7.3.2.20a */ + typedef struct PACKED _SECOND_CHAN_OFFSET { +- UCHAR ElementID; // ID = IE_SECONDARY_CH_OFFSET = 62 ++ UCHAR ElementID; /* ID = IE_SECONDARY_CH_OFFSET = 62 */ + UCHAR Len; + SEC_CHA_OFFSET_IE SecChOffsetIe; + } SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; +@@ -603,10 +603,10 @@ typedef struct PACKED _FRAME_ADDBA_REQ { + HEADER_802_11 Hdr; + UCHAR Category; + UCHAR Action; +- UCHAR Token; // 1 +- BA_PARM BaParm; // 2 - 10 +- USHORT TimeOutValue; // 0 - 0 +- BASEQ_CONTROL BaStartSeq; // 0-0 ++ UCHAR Token; /* 1 */ ++ BA_PARM BaParm; /* 2 - 10 */ ++ USHORT TimeOutValue; /* 0 - 0 */ ++ BASEQ_CONTROL BaStartSeq; /* 0-0 */ + } FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; + + typedef struct PACKED _FRAME_ADDBA_RSP { +@@ -615,7 +615,7 @@ typedef struct PACKED _FRAME_ADDBA_RSP { + UCHAR Action; + UCHAR Token; + USHORT StatusCode; +- BA_PARM BaParm; //0 - 2 ++ BA_PARM BaParm; /*0 - 2 */ + USHORT TimeOutValue; + } FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; + +@@ -627,7 +627,7 @@ typedef struct PACKED _FRAME_DELBA_REQ { + USHORT ReasonCode; + } FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; + +-//7.2.1.7 ++/*7.2.1.7 */ + typedef struct PACKED _FRAME_BAR { + FRAME_CONTROL FC; + USHORT Duration; +@@ -637,7 +637,7 @@ typedef struct PACKED _FRAME_BAR { + BASEQ_CONTROL StartingSeq; + } FRAME_BAR, *PFRAME_BAR; + +-//7.2.1.7 ++/*7.2.1.7 */ + typedef struct PACKED _FRAME_BA { + FRAME_CONTROL FC; + USHORT Duration; +@@ -648,7 +648,7 @@ typedef struct PACKED _FRAME_BA { + UCHAR bitmask[8]; + } FRAME_BA, *PFRAME_BA; + +-// Radio Measuement Request Frame Format ++/* Radio Measuement Request Frame Format */ + typedef struct PACKED _FRAME_RM_REQ_ACTION { + HEADER_802_11 Hdr; + UCHAR Category; +@@ -668,21 +668,21 @@ typedef struct PACKED { + } HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, + *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; + +-// +-// _Limit must be the 2**n - 1 +-// _SEQ1 , _SEQ2 must be within 0 ~ _Limit +-// ++/* */ ++/* _Limit must be the 2**n - 1 */ ++/* _SEQ1 , _SEQ2 must be within 0 ~ _Limit */ ++/* */ + #define SEQ_STEPONE(_SEQ1, _SEQ2, _Limit) ((_SEQ1 == ((_SEQ2+1) & _Limit))) + #define SEQ_SMALLER(_SEQ1, _SEQ2, _Limit) (((_SEQ1-_SEQ2) & ((_Limit+1)>>1))) + #define SEQ_LARGER(_SEQ1, _SEQ2, _Limit) ((_SEQ1 != _SEQ2) && !(((_SEQ1-_SEQ2) & ((_Limit+1)>>1)))) + #define SEQ_WITHIN_WIN(_SEQ1, _SEQ2, _WIN, _Limit) (SEQ_LARGER(_SEQ1, _SEQ2, _Limit) && \ + SEQ_SMALLER(_SEQ1, ((_SEQ2+_WIN+1)&_Limit), _Limit)) + +-// +-// Contention-free parameter (without ID and Length) +-// ++/* */ ++/* Contention-free parameter (without ID and Length) */ ++/* */ + typedef struct PACKED { +- BOOLEAN bValid; // 1: variable contains valid value ++ BOOLEAN bValid; /* 1: variable contains valid value */ + UCHAR CfpCount; + UCHAR CfpPeriod; + USHORT CfpMaxDuration; +@@ -690,39 +690,39 @@ typedef struct PACKED { + } CF_PARM, *PCF_PARM; + + typedef struct _CIPHER_SUITE { +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher 1, this one has more secured cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; // Unicast cipher 2 if AP announce two unicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Group cipher +- USHORT RsnCapability; // RSN capability from beacon +- BOOLEAN bMixMode; // Indicate Pair & Group cipher might be different ++ NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher 1, this one has more secured cipher suite */ ++ NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; /* Unicast cipher 2 if AP announce two unicast cipher suite */ ++ NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Group cipher */ ++ USHORT RsnCapability; /* RSN capability from beacon */ ++ BOOLEAN bMixMode; /* Indicate Pair & Group cipher might be different */ + } CIPHER_SUITE, *PCIPHER_SUITE; + +-// EDCA configuration from AP's BEACON/ProbeRsp ++/* EDCA configuration from AP's BEACON/ProbeRsp */ + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value +- BOOLEAN bAdd; // 1: variable contains valid value ++ BOOLEAN bValid; /* 1: variable contains valid value */ ++ BOOLEAN bAdd; /* 1: variable contains valid value */ + BOOLEAN bQAck; + BOOLEAN bQueueRequest; + BOOLEAN bTxopRequest; + BOOLEAN bAPSDCapable; +-// BOOLEAN bMoreDataAck; ++/* BOOLEAN bMoreDataAck; */ + UCHAR EdcaUpdateCount; +- UCHAR Aifsn[4]; // 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO ++ UCHAR Aifsn[4]; /* 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO */ + UCHAR Cwmin[4]; + UCHAR Cwmax[4]; +- USHORT Txop[4]; // in unit of 32-us +- BOOLEAN bACM[4]; // 1: Admission Control of AC_BK is mandattory ++ USHORT Txop[4]; /* in unit of 32-us */ ++ BOOLEAN bACM[4]; /* 1: Admission Control of AC_BK is mandattory */ + } EDCA_PARM, *PEDCA_PARM; + +-// QBSS LOAD information from QAP's BEACON/ProbeRsp ++/* QBSS LOAD information from QAP's BEACON/ProbeRsp */ + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value ++ BOOLEAN bValid; /* 1: variable contains valid value */ + USHORT StaNum; + UCHAR ChannelUtilization; +- USHORT RemainingAdmissionControl; // in unit of 32-us ++ USHORT RemainingAdmissionControl; /* in unit of 32-us */ + } QBSS_LOAD_PARM, *PQBSS_LOAD_PARM; + +-// QBSS Info field in QSTA's assoc req ++/* QBSS Info field in QSTA's assoc req */ + typedef struct PACKED { + UCHAR UAPSD_AC_VO:1; + UCHAR UAPSD_AC_VI:1; +@@ -733,21 +733,21 @@ typedef struct PACKED { + UCHAR Rsv2:1; + } QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM; + +-// QBSS Info field in QAP's Beacon/ProbeRsp ++/* QBSS Info field in QAP's Beacon/ProbeRsp */ + typedef struct PACKED { + UCHAR ParamSetCount:4; + UCHAR Rsv:3; + UCHAR UAPSD:1; + } QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM; + +-// QOS Capability reported in QAP's BEACON/ProbeRsp +-// QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq ++/* QOS Capability reported in QAP's BEACON/ProbeRsp */ ++/* QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq */ + typedef struct { +- BOOLEAN bValid; // 1: variable contains valid value ++ BOOLEAN bValid; /* 1: variable contains valid value */ + BOOLEAN bQAck; + BOOLEAN bQueueRequest; + BOOLEAN bTxopRequest; +-// BOOLEAN bMoreDataAck; ++/* BOOLEAN bMoreDataAck; */ + UCHAR EdcaUpdateCount; + } QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM; + +@@ -759,7 +759,7 @@ typedef struct { + typedef struct { + UCHAR Bssid[MAC_ADDR_LEN]; + UCHAR Channel; +- UCHAR CentralChannel; //Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. ++ UCHAR CentralChannel; /*Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. */ + UCHAR BssType; + USHORT AtimWin; + USHORT BeaconPeriod; +@@ -770,11 +770,11 @@ typedef struct { + UCHAR ExtRateLen; + HT_CAPABILITY_IE HtCapability; + UCHAR HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR AddHtInfoLen; + UCHAR NewExtChanOffset; + CHAR Rssi; +- UCHAR Privacy; // Indicate security function ON/OFF. Don't mess up with auth mode. ++ UCHAR Privacy; /* Indicate security function ON/OFF. Don't mess up with auth mode. */ + UCHAR Hidden; + + USHORT DtimPeriod; +@@ -787,30 +787,30 @@ typedef struct { + UCHAR SsidLen; + CHAR Ssid[MAX_LEN_OF_SSID]; + +- ULONG LastBeaconRxTime; // OS's timestamp ++ ULONG LastBeaconRxTime; /* OS's timestamp */ + + BOOLEAN bSES; + +- // New for WPA2 +- CIPHER_SUITE WPA; // AP announced WPA cipher suite +- CIPHER_SUITE WPA2; // AP announced WPA2 cipher suite ++ /* New for WPA2 */ ++ CIPHER_SUITE WPA; /* AP announced WPA cipher suite */ ++ CIPHER_SUITE WPA2; /* AP announced WPA2 cipher suite */ + +- // New for microsoft WPA support ++ /* New for microsoft WPA support */ + NDIS_802_11_FIXED_IEs FixIEs; +- NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; // Addition mode for WPA2 / WPA capable AP ++ NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; /* Addition mode for WPA2 / WPA capable AP */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; +- NDIS_802_11_WEP_STATUS WepStatus; // Unicast Encryption Algorithm extract from VAR_IE +- USHORT VarIELen; // Length of next VIE include EID & Length ++ NDIS_802_11_WEP_STATUS WepStatus; /* Unicast Encryption Algorithm extract from VAR_IE */ ++ USHORT VarIELen; /* Length of next VIE include EID & Length */ + UCHAR VarIEs[MAX_VIE_LEN]; + +- // CCX Ckip information ++ /* CCX Ckip information */ + UCHAR CkipFlag; + +- // CCX 2 TSF +- UCHAR PTSF[4]; // Parent TSF +- UCHAR TTSF[8]; // Target TSF ++ /* CCX 2 TSF */ ++ UCHAR PTSF[4]; /* Parent TSF */ ++ UCHAR TTSF[8]; /* Target TSF */ + +- // 802.11e d9, and WMM ++ /* 802.11e d9, and WMM */ + EDCA_PARM EdcaParm; + QOS_CAPABILITY_PARM QosCapability; + QBSS_LOAD_PARM QbssLoad; +@@ -857,12 +857,12 @@ typedef struct _STATE_MACHINE { + STATE_MACHINE_FUNC *TransFunc; + } STATE_MACHINE, *PSTATE_MACHINE; + +-// MLME AUX data structure that hold temporarliy settings during a connection attempt. +-// Once this attemp succeeds, all settings will be copy to pAd->StaActive. +-// A connection attempt (user set OID, roaming, CCX fast roaming,..) consists of +-// several steps (JOIN, AUTH, ASSOC or REASSOC) and may fail at any step. We purposely +-// separate this under-trial settings away from pAd->StaActive so that once +-// this new attempt failed, driver can auto-recover back to the active settings. ++/* MLME AUX data structure that hold temporarliy settings during a connection attempt. */ ++/* Once this attemp succeeds, all settings will be copy to pAd->StaActive. */ ++/* A connection attempt (user set OID, roaming, CCX fast roaming,..) consists of */ ++/* several steps (JOIN, AUTH, ASSOC or REASSOC) and may fail at any step. We purposely */ ++/* separate this under-trial settings away from pAd->StaActive so that once */ ++/* this new attempt failed, driver can auto-recover back to the active settings. */ + typedef struct _MLME_AUX { + UCHAR BssType; + UCHAR Ssid[MAX_LEN_OF_SSID]; +@@ -881,28 +881,28 @@ typedef struct _MLME_AUX { + USHORT CfpPeriod; + USHORT AtimWin; + +- // Copy supported rate from desired AP's beacon. We are trying to match +- // AP's supported and extended rate settings. ++ /* Copy supported rate from desired AP's beacon. We are trying to match */ ++ /* AP's supported and extended rate settings. */ + UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR SupRateLen; + UCHAR ExtRateLen; + HT_CAPABILITY_IE HtCapability; + UCHAR HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE ++ ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ + UCHAR NewExtChannelOffset; +- //RT_HT_CAPABILITY SupportedHtPhy; ++ /*RT_HT_CAPABILITY SupportedHtPhy; */ + +- // new for QOS +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP ++ /* new for QOS */ ++ QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ ++ EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ ++ QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ + +- // new to keep Ralink specific feature ++ /* new to keep Ralink specific feature */ + ULONG APRalinkIe; + +- BSS_TABLE SsidBssTab; // AP list for the same SSID +- BSS_TABLE RoamTab; // AP list eligible for roaming ++ BSS_TABLE SsidBssTab; /* AP list for the same SSID */ ++ BSS_TABLE RoamTab; /* AP list eligible for roaming */ + ULONG BssIdx; + ULONG RoamIdx; + +@@ -914,7 +914,7 @@ typedef struct _MLME_AUX { + } MLME_AUX, *PMLME_AUX; + + typedef struct _MLME_ADDBA_REQ_STRUCT { +- UCHAR Wcid; // ++ UCHAR Wcid; /* */ + UCHAR pAddr[MAC_ADDR_LEN]; + UCHAR BaBufSize; + USHORT TimeOutValue; +@@ -924,13 +924,13 @@ typedef struct _MLME_ADDBA_REQ_STRUCT { + } MLME_ADDBA_REQ_STRUCT, *PMLME_ADDBA_REQ_STRUCT; + + typedef struct _MLME_DELBA_REQ_STRUCT { +- UCHAR Wcid; // ++ UCHAR Wcid; /* */ + UCHAR Addr[MAC_ADDR_LEN]; + UCHAR TID; + UCHAR Initiator; + } MLME_DELBA_REQ_STRUCT, *PMLME_DELBA_REQ_STRUCT; + +-// assoc struct is equal to reassoc ++/* assoc struct is equal to reassoc */ + typedef struct _MLME_ASSOC_REQ_STRUCT { + UCHAR Addr[MAC_ADDR_LEN]; + USHORT CapabilityInfo; +@@ -991,62 +991,62 @@ typedef struct PACKED _RTMP_TX_RATE_SWITCH { + UCHAR TrainDown; + } RRTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH; + +-// ========================== AP mlme.h =============================== +-#define TBTT_PRELOAD_TIME 384 // usec. LomgPreamble + 24-byte at 1Mbps ++/* ========================== AP mlme.h =============================== */ ++#define TBTT_PRELOAD_TIME 384 /* usec. LomgPreamble + 24-byte at 1Mbps */ + #define DEFAULT_DTIM_PERIOD 1 + +-#define MAC_TABLE_AGEOUT_TIME 300 // unit: sec +-#define MAC_TABLE_ASSOC_TIMEOUT 5 // unit: sec ++#define MAC_TABLE_AGEOUT_TIME 300 /* unit: sec */ ++#define MAC_TABLE_ASSOC_TIMEOUT 5 /* unit: sec */ + #define MAC_TABLE_FULL(Tab) ((Tab).size == MAX_LEN_OF_MAC_TABLE) + +-// AP shall drop the sta if contine Tx fail count reach it. +-#define MAC_ENTRY_LIFE_CHECK_CNT 20 // packet cnt. ++/* AP shall drop the sta if contine Tx fail count reach it. */ ++#define MAC_ENTRY_LIFE_CHECK_CNT 20 /* packet cnt. */ + +-// Value domain of pMacEntry->Sst ++/* Value domain of pMacEntry->Sst */ + typedef enum _Sst { +- SST_NOT_AUTH, // 0: equivalent to IEEE 802.11/1999 state 1 +- SST_AUTH, // 1: equivalent to IEEE 802.11/1999 state 2 +- SST_ASSOC // 2: equivalent to IEEE 802.11/1999 state 3 ++ SST_NOT_AUTH, /* 0: equivalent to IEEE 802.11/1999 state 1 */ ++ SST_AUTH, /* 1: equivalent to IEEE 802.11/1999 state 2 */ ++ SST_ASSOC /* 2: equivalent to IEEE 802.11/1999 state 3 */ + } SST; + +-// value domain of pMacEntry->AuthState ++/* value domain of pMacEntry->AuthState */ + typedef enum _AuthState { + AS_NOT_AUTH, +- AS_AUTH_OPEN, // STA has been authenticated using OPEN SYSTEM +- AS_AUTH_KEY, // STA has been authenticated using SHARED KEY +- AS_AUTHENTICATING // STA is waiting for AUTH seq#3 using SHARED KEY ++ AS_AUTH_OPEN, /* STA has been authenticated using OPEN SYSTEM */ ++ AS_AUTH_KEY, /* STA has been authenticated using SHARED KEY */ ++ AS_AUTHENTICATING /* STA is waiting for AUTH seq#3 using SHARED KEY */ + } AUTH_STATE; + +-//for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 ++/*for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 */ + typedef enum _ApWpaState { +- AS_NOTUSE, // 0 +- AS_DISCONNECT, // 1 +- AS_DISCONNECTED, // 2 +- AS_INITIALIZE, // 3 +- AS_AUTHENTICATION, // 4 +- AS_AUTHENTICATION2, // 5 +- AS_INITPMK, // 6 +- AS_INITPSK, // 7 +- AS_PTKSTART, // 8 +- AS_PTKINIT_NEGOTIATING, // 9 +- AS_PTKINITDONE, // 10 +- AS_UPDATEKEYS, // 11 +- AS_INTEGRITY_FAILURE, // 12 +- AS_KEYUPDATE, // 13 ++ AS_NOTUSE, /* 0 */ ++ AS_DISCONNECT, /* 1 */ ++ AS_DISCONNECTED, /* 2 */ ++ AS_INITIALIZE, /* 3 */ ++ AS_AUTHENTICATION, /* 4 */ ++ AS_AUTHENTICATION2, /* 5 */ ++ AS_INITPMK, /* 6 */ ++ AS_INITPSK, /* 7 */ ++ AS_PTKSTART, /* 8 */ ++ AS_PTKINIT_NEGOTIATING, /* 9 */ ++ AS_PTKINITDONE, /* 10 */ ++ AS_UPDATEKEYS, /* 11 */ ++ AS_INTEGRITY_FAILURE, /* 12 */ ++ AS_KEYUPDATE, /* 13 */ + } AP_WPA_STATE; + +-// for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 ++/* for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 */ + typedef enum _GTKState { + REKEY_NEGOTIATING, + REKEY_ESTABLISHED, + KEYERROR, + } GTK_STATE; + +-// for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 ++/* for-wpa value domain of pMacEntry->WpaState 802.1i D3 p.114 */ + typedef enum _WpaGTKState { + SETKEYS, + SETKEYS_DONE, + } WPA_GTK_STATE; +-// ====================== end of AP mlme.h ============================ ++/* ====================== end of AP mlme.h ============================ */ + +-#endif // MLME_H__ ++#endif /* MLME_H__ */ +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index 54fac1c..ba72141 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -37,7 +37,7 @@ + #ifndef _OID_H_ + #define _OID_H_ + +-//#include ++/*#include */ + + #ifndef TRUE + #define TRUE 1 +@@ -45,9 +45,9 @@ + #ifndef FALSE + #define FALSE 0 + #endif +-// +-// IEEE 802.11 Structures and definitions +-// ++/* */ ++/* IEEE 802.11 Structures and definitions */ ++/* */ + #define MAX_TX_POWER_LEVEL 100 /* mW */ + #define MAX_RSSI_TRIGGER -10 /* dBm */ + #define MIN_RSSI_TRIGGER -200 /* dBm */ +@@ -55,19 +55,19 @@ + #define MIN_FRAG_THRESHOLD 256 /* byte count */ + #define MAX_RTS_THRESHOLD 2347 /* byte count */ + +-// new types for Media Specific Indications +-// Extension channel offset ++/* new types for Media Specific Indications */ ++/* Extension channel offset */ + #define EXTCHA_NONE 0 + #define EXTCHA_ABOVE 0x1 + #define EXTCHA_BELOW 0x3 + +-// BW ++/* BW */ + #define BAND_WIDTH_20 0 + #define BAND_WIDTH_40 1 + #define BAND_WIDTH_BOTH 2 +-#define BAND_WIDTH_10 3 // 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. +-// SHORTGI +-#define GAP_INTERVAL_400 1 // only support in HT mode ++#define BAND_WIDTH_10 3 /* 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. */ ++/* SHORTGI */ ++#define GAP_INTERVAL_400 1 /* only support in HT mode */ + #define GAP_INTERVAL_800 0 + #define GAP_INTERVAL_BOTH 2 + +@@ -78,12 +78,12 @@ + #define NDIS_802_11_LENGTH_RATES 8 + #define NDIS_802_11_LENGTH_RATES_EX 16 + #define MAC_ADDR_LENGTH 6 +-//#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc +-#define MAX_NUM_OF_CHS 54 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination +-#define MAX_NUMBER_OF_EVENT 10 // entry # in EVENT table +-#define MAX_NUMBER_OF_MAC 32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 ++/*#define MAX_NUM_OF_CHS 49 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL terminationc */ ++#define MAX_NUM_OF_CHS 54 /* 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0 @Japan + 1 as NULL termination */ ++#define MAX_NUMBER_OF_EVENT 10 /* entry # in EVENT table */ ++#define MAX_NUMBER_OF_MAC 32 /* if MAX_MBSSID_NUM is 8, this value can't be larger than 211 */ + #define MAX_NUMBER_OF_ACL 64 +-#define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 ++#define MAX_LENGTH_OF_SUPPORT_RATES 12 /* 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ + #define MAX_NUMBER_OF_DLS_ENTRY 4 + + #define RT_QUERY_SIGNAL_CONTEXT 0x0402 +@@ -91,9 +91,9 @@ + #define RT_SET_APD_PID 0x0405 + #define RT_SET_DEL_MAC_ENTRY 0x0406 + #define RT_QUERY_EVENT_TABLE 0x0407 +-// +-// IEEE 802.11 OIDs +-// ++/* */ ++/* IEEE 802.11 OIDs */ ++/* */ + #define OID_GET_SET_TOGGLE 0x8000 + #define OID_GET_SET_FROM_UI 0x4000 + +@@ -119,7 +119,7 @@ + #define RT_OID_802_11_QUERY_LAST_RX_RATE 0x0613 + #define RT_OID_802_11_TX_POWER_LEVEL_1 0x0614 + #define RT_OID_802_11_QUERY_PIDVID 0x0615 +-//for WPA_SUPPLICANT_SUPPORT ++/*for WPA_SUPPLICANT_SUPPORT */ + #define OID_SET_COUNTERMEASURES 0x0616 + #define RT_OID_WPA_SUPPLICANT_SUPPORT 0x0621 + #define RT_OID_WE_VERSION_COMPILED 0x0622 +@@ -132,7 +132,7 @@ typedef enum _NDIS_802_11_STATUS_TYPE { + Ndis802_11StatusType_Authentication, + Ndis802_11StatusType_MediaStreamMode, + Ndis802_11StatusType_PMKID_CandidateList, +- Ndis802_11StatusTypeMax // not a real type, defined as an upper bound ++ Ndis802_11StatusTypeMax /* not a real type, defined as an upper bound */ + } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; + + typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; +@@ -141,7 +141,7 @@ typedef struct _NDIS_802_11_STATUS_INDICATION { + NDIS_802_11_STATUS_TYPE StatusType; + } NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; + +-// mask for authentication/integrity fields ++/* mask for authentication/integrity fields */ + #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f + + #define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01 +@@ -150,27 +150,27 @@ typedef struct _NDIS_802_11_STATUS_INDICATION { + #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E + + typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST { +- ULONG Length; // Length of structure ++ ULONG Length; /* Length of structure */ + NDIS_802_11_MAC_ADDRESS Bssid; + ULONG Flags; + } NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; + +-//Added new types for PMKID Candidate lists. ++/*Added new types for PMKID Candidate lists. */ + typedef struct _PMKID_CANDIDATE { + NDIS_802_11_MAC_ADDRESS BSSID; + ULONG Flags; + } PMKID_CANDIDATE, *PPMKID_CANDIDATE; + + typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST { +- ULONG Version; // Version of the structure +- ULONG NumCandidates; // No. of pmkid candidates ++ ULONG Version; /* Version of the structure */ ++ ULONG NumCandidates; /* No. of pmkid candidates */ + PMKID_CANDIDATE CandidateList[1]; + } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; + +-//Flags for PMKID Candidate list structure ++/*Flags for PMKID Candidate list structure */ + #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 + +-// Added new types for OFDM 5G and 2.4G ++/* Added new types for OFDM 5G and 2.4G */ + typedef enum _NDIS_802_11_NETWORK_TYPE { + Ndis802_11FH, + Ndis802_11DS, +@@ -179,11 +179,11 @@ typedef enum _NDIS_802_11_NETWORK_TYPE { + Ndis802_11Automode, + Ndis802_11OFDM5_N, + Ndis802_11OFDM24_N, +- Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound ++ Ndis802_11NetworkTypeMax /* not a real type, defined as an upper bound */ + } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; + + typedef struct _NDIS_802_11_NETWORK_TYPE_LIST { +- UINT NumberOfItems; // in list below, at least 1 ++ UINT NumberOfItems; /* in list below, at least 1 */ + NDIS_802_11_NETWORK_TYPE NetworkType[1]; + } NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST; + +@@ -192,33 +192,33 @@ typedef enum _NDIS_802_11_POWER_MODE { + Ndis802_11PowerModeMAX_PSP, + Ndis802_11PowerModeFast_PSP, + Ndis802_11PowerModeLegacy_PSP, +- Ndis802_11PowerModeMax // not a real mode, defined as an upper bound ++ Ndis802_11PowerModeMax /* not a real mode, defined as an upper bound */ + } NDIS_802_11_POWER_MODE, *PNDIS_802_11_POWER_MODE; + +-typedef ULONG NDIS_802_11_TX_POWER_LEVEL; // in milliwatts ++typedef ULONG NDIS_802_11_TX_POWER_LEVEL; /* in milliwatts */ + +-// +-// Received Signal Strength Indication +-// +-typedef LONG NDIS_802_11_RSSI; // in dBm ++/* */ ++/* Received Signal Strength Indication */ ++/* */ ++typedef LONG NDIS_802_11_RSSI; /* in dBm */ + + typedef struct _NDIS_802_11_CONFIGURATION_FH { +- ULONG Length; // Length of structure +- ULONG HopPattern; // As defined by 802.11, MSB set +- ULONG HopSet; // to one if non-802.11 +- ULONG DwellTime; // units are Kusec ++ ULONG Length; /* Length of structure */ ++ ULONG HopPattern; /* As defined by 802.11, MSB set */ ++ ULONG HopSet; /* to one if non-802.11 */ ++ ULONG DwellTime; /* units are Kusec */ + } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; + + typedef struct _NDIS_802_11_CONFIGURATION { +- ULONG Length; // Length of structure +- ULONG BeaconPeriod; // units are Kusec +- ULONG ATIMWindow; // units are Kusec +- ULONG DSConfig; // Frequency, units are kHz ++ ULONG Length; /* Length of structure */ ++ ULONG BeaconPeriod; /* units are Kusec */ ++ ULONG ATIMWindow; /* units are Kusec */ ++ ULONG DSConfig; /* Frequency, units are kHz */ + NDIS_802_11_CONFIGURATION_FH FHConfig; + } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; + + typedef struct _NDIS_802_11_STATISTICS { +- ULONG Length; // Length of structure ++ ULONG Length; /* Length of structure */ + LARGE_INTEGER TransmittedFragmentCount; + LARGE_INTEGER MulticastTransmittedFrameCount; + LARGE_INTEGER FailedCount; +@@ -245,7 +245,7 @@ typedef struct _NDIS_802_11_STATISTICS { + typedef ULONG NDIS_802_11_KEY_INDEX; + typedef ULONGLONG NDIS_802_11_KEY_RSC; + +-#define MAX_RADIUS_SRV_NUM 2 // 802.1x failover number ++#define MAX_RADIUS_SRV_NUM 2 /* 802.1x failover number */ + + typedef struct PACKED _RADIUS_SRV_INFO { + UINT32 radius_ip; +@@ -257,16 +257,16 @@ typedef struct PACKED _RADIUS_SRV_INFO { + typedef struct PACKED _RADIUS_KEY_INFO { + UCHAR radius_srv_num; + RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; +- UCHAR ieee8021xWEP; // dynamic WEP ++ UCHAR ieee8021xWEP; /* dynamic WEP */ + UCHAR key_index; +- UCHAR key_length; // length of key in bytes ++ UCHAR key_length; /* length of key in bytes */ + UCHAR key_material[13]; + } RADIUS_KEY_INFO, *PRADIUS_KEY_INFO; + +-// It's used by 802.1x daemon to require relative configuration ++/* It's used by 802.1x daemon to require relative configuration */ + typedef struct PACKED _RADIUS_CONF { +- UINT32 Length; // Length of this structure +- UCHAR mbss_num; // indicate multiple BSS number ++ UINT32 Length; /* Length of this structure */ ++ UCHAR mbss_num; /* indicate multiple BSS number */ + UINT32 own_ip_addr; + UINT32 retry_interval; + UINT32 session_timeout_interval; +@@ -277,34 +277,34 @@ typedef struct PACKED _RADIUS_CONF { + RADIUS_KEY_INFO RadiusInfo[8]; + } RADIUS_CONF, *PRADIUS_CONF; + +-// Key mapping keys require a BSSID ++/* Key mapping keys require a BSSID */ + typedef struct _NDIS_802_11_KEY { +- UINT Length; // Length of this structure ++ UINT Length; /* Length of this structure */ + UINT KeyIndex; +- UINT KeyLength; // length of key in bytes ++ UINT KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; + NDIS_802_11_KEY_RSC KeyRSC; +- UCHAR KeyMaterial[1]; // variable length depending on above field ++ UCHAR KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_KEY, *PNDIS_802_11_KEY; + + typedef struct _NDIS_802_11_PASSPHRASE { +- UINT KeyLength; // length of key in bytes ++ UINT KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; +- UCHAR KeyMaterial[1]; // variable length depending on above field ++ UCHAR KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; + + typedef struct _NDIS_802_11_REMOVE_KEY { +- UINT Length; // Length of this structure ++ UINT Length; /* Length of this structure */ + UINT KeyIndex; + NDIS_802_11_MAC_ADDRESS BSSID; + } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; + + typedef struct _NDIS_802_11_WEP { +- UINT Length; // Length of this structure +- UINT KeyIndex; // 0 is the per-client key, 1-N are the +- // global keys +- UINT KeyLength; // length of key in bytes +- UCHAR KeyMaterial[1]; // variable length depending on above field ++ UINT Length; /* Length of this structure */ ++ UINT KeyIndex; /* 0 is the per-client key, 1-N are the */ ++ /* global keys */ ++ UINT KeyLength; /* length of key in bytes */ ++ UCHAR KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_WEP, *PNDIS_802_11_WEP; + + typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { +@@ -312,10 +312,10 @@ typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { + Ndis802_11Infrastructure, + Ndis802_11AutoUnknown, + Ndis802_11Monitor, +- Ndis802_11InfrastructureMax // Not a real value, defined as upper bound ++ Ndis802_11InfrastructureMax /* Not a real value, defined as upper bound */ + } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE; + +-// Add new authentication modes ++/* Add new authentication modes */ + typedef enum _NDIS_802_11_AUTHENTICATION_MODE { + Ndis802_11AuthModeOpen, + Ndis802_11AuthModeShared, +@@ -327,25 +327,25 @@ typedef enum _NDIS_802_11_AUTHENTICATION_MODE { + Ndis802_11AuthModeWPA2PSK, + Ndis802_11AuthModeWPA1WPA2, + Ndis802_11AuthModeWPA1PSKWPA2PSK, +- Ndis802_11AuthModeMax // Not a real mode, defined as upper bound ++ Ndis802_11AuthModeMax /* Not a real mode, defined as upper bound */ + } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; + +-typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates +-typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates ++typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; /* Set of 8 data rates */ ++typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; /* Set of 16 data rates */ + + typedef struct PACKED _NDIS_802_11_SSID { +- UINT SsidLength; // length of SSID field below, in bytes; +- // this can be zero. +- UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; // SSID information field ++ UINT SsidLength; /* length of SSID field below, in bytes; */ ++ /* this can be zero. */ ++ UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; /* SSID information field */ + } NDIS_802_11_SSID, *PNDIS_802_11_SSID; + + typedef struct PACKED _NDIS_WLAN_BSSID { +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID ++ ULONG Length; /* Length of this structure */ ++ NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ + UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- ULONG Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal strength in dBm ++ NDIS_802_11_SSID Ssid; /* SSID */ ++ ULONG Privacy; /* WEP encryption requirement */ ++ NDIS_802_11_RSSI Rssi; /* receive signal strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; + NDIS_802_11_CONFIGURATION Configuration; + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +@@ -353,19 +353,19 @@ typedef struct PACKED _NDIS_WLAN_BSSID { + } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; + + typedef struct PACKED _NDIS_802_11_BSSID_LIST { +- UINT NumberOfItems; // in list below, at least 1 ++ UINT NumberOfItems; /* in list below, at least 1 */ + NDIS_WLAN_BSSID Bssid[1]; + } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; + +-// Added Capabilities, IELength and IEs for each BSSID ++/* Added Capabilities, IELength and IEs for each BSSID */ + typedef struct PACKED _NDIS_WLAN_BSSID_EX { +- ULONG Length; // Length of this structure +- NDIS_802_11_MAC_ADDRESS MacAddress; // BSSID ++ ULONG Length; /* Length of this structure */ ++ NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ + UCHAR Reserved[2]; +- NDIS_802_11_SSID Ssid; // SSID +- UINT Privacy; // WEP encryption requirement +- NDIS_802_11_RSSI Rssi; // receive signal +- // strength in dBm ++ NDIS_802_11_SSID Ssid; /* SSID */ ++ UINT Privacy; /* WEP encryption requirement */ ++ NDIS_802_11_RSSI Rssi; /* receive signal */ ++ /* strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; + NDIS_802_11_CONFIGURATION Configuration; + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; +@@ -375,7 +375,7 @@ typedef struct PACKED _NDIS_WLAN_BSSID_EX { + } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; + + typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX { +- UINT NumberOfItems; // in list below, at least 1 ++ UINT NumberOfItems; /* in list below, at least 1 */ + NDIS_WLAN_BSSID_EX Bssid[1]; + } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; + +@@ -387,7 +387,7 @@ typedef struct PACKED _NDIS_802_11_FIXED_IEs { + + typedef struct _NDIS_802_11_VARIABLE_IEs { + UCHAR ElementID; +- UCHAR Length; // Number of bytes in data field ++ UCHAR Length; /* Number of bytes in data field */ + UCHAR data[1]; + } NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; + +@@ -402,8 +402,8 @@ typedef enum _NDIS_802_11_PRIVACY_FILTER { + Ndis802_11PrivFilter8021xWEP + } NDIS_802_11_PRIVACY_FILTER, *PNDIS_802_11_PRIVACY_FILTER; + +-// Added new encryption types +-// Also aliased typedef to new name ++/* Added new encryption types */ ++/* Also aliased typedef to new name */ + typedef enum _NDIS_802_11_WEP_STATUS { + Ndis802_11WEPEnabled, + Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, +@@ -417,7 +417,7 @@ typedef enum _NDIS_802_11_WEP_STATUS { + Ndis802_11Encryption2KeyAbsent, + Ndis802_11Encryption3Enabled, + Ndis802_11Encryption3KeyAbsent, +- Ndis802_11Encryption4Enabled, // TKIP or AES mix ++ Ndis802_11Encryption4Enabled, /* TKIP or AES mix */ + Ndis802_11Encryption4KeyAbsent, + Ndis802_11GroupWEP40Enabled, + Ndis802_11GroupWEP104Enabled, +@@ -465,13 +465,13 @@ typedef struct _NDIS_802_11_AUTHENTICATION_EVENT { + NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; + } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; + +-// 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE ++/* 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE */ + typedef enum _NDIS_802_11_MEDIA_STREAM_MODE { + Ndis802_11MediaStreamOff, + Ndis802_11MediaStreamOn, + } NDIS_802_11_MEDIA_STREAM_MODE, *PNDIS_802_11_MEDIA_STREAM_MODE; + +-// PMKID Structures ++/* PMKID Structures */ + typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; + + typedef struct _BSSID_INFO { +@@ -500,14 +500,14 @@ typedef struct _NDIS_802_11_CAPABILITY { + AuthenticationEncryptionSupported[1]; + } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; + +-#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon ++#define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) /* Sync. with AP for wsc upnp daemon */ + #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) + + #define RTPRIV_IOCTL_STATISTICS (SIOCIWFIRSTPRIV + 0x09) + #define RTPRIV_IOCTL_ADD_PMKID_CACHE (SIOCIWFIRSTPRIV + 0x0A) + #define RTPRIV_IOCTL_RADIUS_DATA (SIOCIWFIRSTPRIV + 0x0C) + #define RTPRIV_IOCTL_GSITESURVEY (SIOCIWFIRSTPRIV + 0x0D) +-#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) // Sync. with RT61 (for wpa_supplicant) ++#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x0E) /* Sync. with RT61 (for wpa_supplicant) */ + #define RTPRIV_IOCTL_GET_MAC_TABLE (SIOCIWFIRSTPRIV + 0x0F) + + #define RTPRIV_IOCTL_SHOW (SIOCIWFIRSTPRIV + 0x11) +@@ -519,7 +519,7 @@ enum { + #ifdef RTMP_MAC_USB + SHOW_RXBULK_INFO = 8, + SHOW_TXBULK_INFO = 9, +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + RAIO_OFF = 10, + RAIO_ON = 11, + SHOW_CFG_VALUE = 20, +@@ -531,19 +531,19 @@ enum { + #define OID_802_11_GET_COUNTRY_CODE 0x0716 + #define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717 + +-#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk ++#define RT_OID_WSC_SET_PASSPHRASE 0x0740 /* passphrase for wpa(2)-psk */ + #define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741 + #define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742 + #define RT_OID_WSC_SET_CONN_BY_PROFILE_INDEX 0x0743 + #define RT_OID_WSC_SET_ACTION 0x0744 + #define RT_OID_WSC_SET_SSID 0x0745 + #define RT_OID_WSC_SET_PIN_CODE 0x0746 +-#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC +-#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar ++#define RT_OID_WSC_SET_MODE 0x0747 /* PIN or PBC */ ++#define RT_OID_WSC_SET_CONF_MODE 0x0748 /* Enrollee or Registrar */ + #define RT_OID_WSC_SET_PROFILE 0x0749 + #define RT_OID_WSC_CONFIG_STATUS 0x074F + #define RT_OID_802_11_WSC_QUERY_PROFILE 0x0750 +-// for consistency with RT61 ++/* for consistency with RT61 */ + #define RT_OID_WSC_QUERY_STATUS 0x0751 + #define RT_OID_WSC_PIN_CODE 0x0752 + #define RT_OID_WSC_UUID 0x0753 +@@ -555,20 +555,20 @@ enum { + #define RT_OID_WSC_SERIAL_NO 0x0759 + #define RT_OID_WSC_MAC_ADDRESS 0x0760 + +-// New for MeetingHouse Api support ++/* New for MeetingHouse Api support */ + #define OID_MH_802_1X_SUPPORTED 0xFFEDC100 + +-// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! ++/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ + typedef union _HTTRANSMIT_SETTING { + struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz ++ USHORT MCS:7; /* MCS */ ++ USHORT BW:1; /*channel bandwidth 20MHz or 40 MHz */ + USHORT ShortGI:1; +- USHORT STBC:2; //SPACE +-// USHORT rsv:3; ++ USHORT STBC:2; /*SPACE */ ++/* USHORT rsv:3; */ + USHORT rsv:2; + USHORT TxBF:1; +- USHORT MODE:2; // Use definition MODE_xxx. ++ USHORT MODE:2; /* Use definition MODE_xxx. */ + } field; + USHORT word; + } HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING; +@@ -585,45 +585,45 @@ typedef enum _RT_802_11_PHY_MODE { + PHY_11A, + PHY_11ABG_MIXED, + PHY_11G, +- PHY_11ABGN_MIXED, // both band 5 +- PHY_11N_2_4G, // 11n-only with 2.4G band 6 +- PHY_11GN_MIXED, // 2.4G band 7 +- PHY_11AN_MIXED, // 5G band 8 +- PHY_11BGN_MIXED, // if check 802.11b. 9 +- PHY_11AGN_MIXED, // if check 802.11b. 10 +- PHY_11N_5G, // 11n-only with 5G band 11 ++ PHY_11ABGN_MIXED, /* both band 5 */ ++ PHY_11N_2_4G, /* 11n-only with 2.4G band 6 */ ++ PHY_11GN_MIXED, /* 2.4G band 7 */ ++ PHY_11AN_MIXED, /* 5G band 8 */ ++ PHY_11BGN_MIXED, /* if check 802.11b. 9 */ ++ PHY_11AGN_MIXED, /* if check 802.11b. 10 */ ++ PHY_11N_5G, /* 11n-only with 5G band 11 */ + } RT_802_11_PHY_MODE; + +-// put all proprietery for-query objects here to reduce # of Query_OID ++/* put all proprietery for-query objects here to reduce # of Query_OID */ + typedef struct _RT_802_11_LINK_STATUS { +- ULONG CurrTxRate; // in units of 0.5Mbps +- ULONG ChannelQuality; // 0..100 % +- ULONG TxByteCount; // both ok and fail +- ULONG RxByteCount; // both ok and fail +- ULONG CentralChannel; // 40MHz central channel number ++ ULONG CurrTxRate; /* in units of 0.5Mbps */ ++ ULONG ChannelQuality; /* 0..100 % */ ++ ULONG TxByteCount; /* both ok and fail */ ++ ULONG RxByteCount; /* both ok and fail */ ++ ULONG CentralChannel; /* 40MHz central channel number */ + } RT_802_11_LINK_STATUS, *PRT_802_11_LINK_STATUS; + + typedef struct _RT_802_11_EVENT_LOG { +- LARGE_INTEGER SystemTime; // timestammp via NdisGetCurrentSystemTime() ++ LARGE_INTEGER SystemTime; /* timestammp via NdisGetCurrentSystemTime() */ + UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Event; // EVENT_xxx ++ USHORT Event; /* EVENT_xxx */ + } RT_802_11_EVENT_LOG, *PRT_802_11_EVENT_LOG; + + typedef struct _RT_802_11_EVENT_TABLE { + ULONG Num; +- ULONG Rsv; // to align Log[] at LARGE_INEGER boundary ++ ULONG Rsv; /* to align Log[] at LARGE_INEGER boundary */ + RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; + } RT_802_11_EVENT_TABLE, PRT_802_11_EVENT_TABLE; + +-// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! ++/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ + typedef union _MACHTTRANSMIT_SETTING { + struct { +- USHORT MCS:7; // MCS +- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz ++ USHORT MCS:7; /* MCS */ ++ USHORT BW:1; /*channel bandwidth 20MHz or 40 MHz */ + USHORT ShortGI:1; +- USHORT STBC:2; //SPACE ++ USHORT STBC:2; /*SPACE */ + USHORT rsv:3; +- USHORT MODE:2; // Use definition MODE_xxx. ++ USHORT MODE:2; /* Use definition MODE_xxx. */ + } field; + USHORT word; + } MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; +@@ -631,8 +631,8 @@ typedef union _MACHTTRANSMIT_SETTING { + typedef struct _RT_802_11_MAC_ENTRY { + UCHAR Addr[MAC_ADDR_LENGTH]; + UCHAR Aid; +- UCHAR Psm; // 0:PWR_ACTIVE, 1:PWR_SAVE +- UCHAR MimoPs; // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled ++ UCHAR Psm; /* 0:PWR_ACTIVE, 1:PWR_SAVE */ ++ UCHAR MimoPs; /* 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled */ + CHAR AvgRssi0; + CHAR AvgRssi1; + CHAR AvgRssi2; +@@ -645,48 +645,48 @@ typedef struct _RT_802_11_MAC_TABLE { + RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; + } RT_802_11_MAC_TABLE, *PRT_802_11_MAC_TABLE; + +-// structure for query/set hardware register - MAC, BBP, RF register ++/* structure for query/set hardware register - MAC, BBP, RF register */ + typedef struct _RT_802_11_HARDWARE_REGISTER { +- ULONG HardwareType; // 0:MAC, 1:BBP, 2:RF register, 3:EEPROM +- ULONG Offset; // Q/S register offset addr +- ULONG Data; // R/W data buffer ++ ULONG HardwareType; /* 0:MAC, 1:BBP, 2:RF register, 3:EEPROM */ ++ ULONG Offset; /* Q/S register offset addr */ ++ ULONG Data; /* R/W data buffer */ + } RT_802_11_HARDWARE_REGISTER, *PRT_802_11_HARDWARE_REGISTER; + + typedef struct _RT_802_11_AP_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG IsolateInterStaTraffic; // 0-disable, 1-enable isolation +- ULONG HideSsid; // 0-disable, 1-enable hiding +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY ++ ULONG EnableTxBurst; /* 0-disable, 1-enable */ ++ ULONG EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ ++ ULONG IsolateInterStaTraffic; /* 0-disable, 1-enable isolation */ ++ ULONG HideSsid; /* 0-disable, 1-enable hiding */ ++ ULONG UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ ++ ULONG UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time */ ++ ULONG Rsv1; /* must be 0 */ ++ ULONG SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ + } RT_802_11_AP_CONFIG, *PRT_802_11_AP_CONFIG; + +-// structure to query/set STA_CONFIG ++/* structure to query/set STA_CONFIG */ + typedef struct _RT_802_11_STA_CONFIG { +- ULONG EnableTxBurst; // 0-disable, 1-enable +- ULONG EnableTurboRate; // 0-disable, 1-enable 72/100mbps turbo rate +- ULONG UseBGProtection; // 0-AUTO, 1-always ON, 2-always OFF +- ULONG UseShortSlotTime; // 0-no use, 1-use 9-us short slot time when applicable +- ULONG AdhocMode; // 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only +- ULONG HwRadioStatus; // 0-OFF, 1-ON, default is 1, Read-Only +- ULONG Rsv1; // must be 0 +- ULONG SystemErrorBitmap; // ignore upon SET, return system error upon QUERY ++ ULONG EnableTxBurst; /* 0-disable, 1-enable */ ++ ULONG EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ ++ ULONG UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ ++ ULONG UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time when applicable */ ++ ULONG AdhocMode; /* 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only */ ++ ULONG HwRadioStatus; /* 0-OFF, 1-ON, default is 1, Read-Only */ ++ ULONG Rsv1; /* must be 0 */ ++ ULONG SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ + } RT_802_11_STA_CONFIG, *PRT_802_11_STA_CONFIG; + +-// +-// For OID Query or Set about BA structure +-// ++/* */ ++/* For OID Query or Set about BA structure */ ++/* */ + typedef struct _OID_BACAP_STRUC { + UCHAR RxBAWinLimit; + UCHAR TxBAWinLimit; +- UCHAR Policy; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR MpduDensity; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid +- UCHAR AmsduEnable; //Enable AMSDU transmisstion +- UCHAR AmsduSize; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; +- UCHAR MMPSmode; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable +- BOOLEAN AutoBA; // Auto BA will automatically ++ UCHAR Policy; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ ++ UCHAR MpduDensity; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ ++ UCHAR AmsduEnable; /*Enable AMSDU transmisstion */ ++ UCHAR AmsduSize; /* 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; */ ++ UCHAR MMPSmode; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */ ++ BOOLEAN AutoBA; /* Auto BA will automatically */ + } OID_BACAP_STRUC, *POID_BACAP_STRUC; + + typedef struct _RT_802_11_ACL_ENTRY { +@@ -695,7 +695,7 @@ typedef struct _RT_802_11_ACL_ENTRY { + } RT_802_11_ACL_ENTRY, *PRT_802_11_ACL_ENTRY; + + typedef struct PACKED _RT_802_11_ACL { +- ULONG Policy; // 0-disable, 1-positive list, 2-negative list ++ ULONG Policy; /* 0-disable, 1-positive list, 2-negative list */ + ULONG Num; + RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; + } RT_802_11_ACL, *PRT_802_11_ACL; +@@ -714,29 +714,29 @@ typedef struct _RT_802_11_TX_RATES_ { + UCHAR ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; + } RT_802_11_TX_RATES, *PRT_802_11_TX_RATES; + +-// Definition of extra information code +-#define GENERAL_LINK_UP 0x0 // Link is Up +-#define GENERAL_LINK_DOWN 0x1 // Link is Down +-#define HW_RADIO_OFF 0x2 // Hardware radio off +-#define SW_RADIO_OFF 0x3 // Software radio off +-#define AUTH_FAIL 0x4 // Open authentication fail +-#define AUTH_FAIL_KEYS 0x5 // Shared authentication fail +-#define ASSOC_FAIL 0x6 // Association failed +-#define EAP_MIC_FAILURE 0x7 // Deauthencation because MIC failure +-#define EAP_4WAY_TIMEOUT 0x8 // Deauthencation on 4-way handshake timeout +-#define EAP_GROUP_KEY_TIMEOUT 0x9 // Deauthencation on group key handshake timeout +-#define EAP_SUCCESS 0xa // EAP succeed +-#define DETECT_RADAR_SIGNAL 0xb // Radar signal occur in current channel +-#define EXTRA_INFO_MAX 0xb // Indicate Last OID ++/* Definition of extra information code */ ++#define GENERAL_LINK_UP 0x0 /* Link is Up */ ++#define GENERAL_LINK_DOWN 0x1 /* Link is Down */ ++#define HW_RADIO_OFF 0x2 /* Hardware radio off */ ++#define SW_RADIO_OFF 0x3 /* Software radio off */ ++#define AUTH_FAIL 0x4 /* Open authentication fail */ ++#define AUTH_FAIL_KEYS 0x5 /* Shared authentication fail */ ++#define ASSOC_FAIL 0x6 /* Association failed */ ++#define EAP_MIC_FAILURE 0x7 /* Deauthencation because MIC failure */ ++#define EAP_4WAY_TIMEOUT 0x8 /* Deauthencation on 4-way handshake timeout */ ++#define EAP_GROUP_KEY_TIMEOUT 0x9 /* Deauthencation on group key handshake timeout */ ++#define EAP_SUCCESS 0xa /* EAP succeed */ ++#define DETECT_RADAR_SIGNAL 0xb /* Radar signal occur in current channel */ ++#define EXTRA_INFO_MAX 0xb /* Indicate Last OID */ + + #define EXTRA_INFO_CLEAR 0xffffffff + +-// This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. ++/* This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. */ + typedef struct { +- RT_802_11_PHY_MODE PhyMode; // ++ RT_802_11_PHY_MODE PhyMode; /* */ + UCHAR TransmitNo; +- UCHAR HtMode; //HTMODE_GF or HTMODE_MM +- UCHAR ExtOffset; //extension channel above or below ++ UCHAR HtMode; /*HTMODE_GF or HTMODE_MM */ ++ UCHAR ExtOffset; /*extension channel above or below */ + UCHAR MCS; + UCHAR BW; + UCHAR STBC; +@@ -753,27 +753,27 @@ typedef enum _RT_802_11_D_CLIENT_MODE { + } RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE; + + typedef struct _RT_CHANNEL_LIST_INFO { +- UCHAR ChannelList[MAX_NUM_OF_CHS]; // list all supported channels for site survey +- UCHAR ChannelListNum; // number of channel in ChannelList[] ++ UCHAR ChannelList[MAX_NUM_OF_CHS]; /* list all supported channels for site survey */ ++ UCHAR ChannelListNum; /* number of channel in ChannelList[] */ + } RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; + +-// WSC configured credential ++/* WSC configured credential */ + typedef struct _WSC_CREDENTIAL { +- NDIS_802_11_SSID SSID; // mandatory +- USHORT AuthType; // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk +- USHORT EncrType; // mandatory, 1: none, 2: wep, 4: tkip, 8: aes +- UCHAR Key[64]; // mandatory, Maximum 64 byte ++ NDIS_802_11_SSID SSID; /* mandatory */ ++ USHORT AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */ ++ USHORT EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */ ++ UCHAR Key[64]; /* mandatory, Maximum 64 byte */ + USHORT KeyLength; +- UCHAR MacAddr[6]; // mandatory, AP MAC address +- UCHAR KeyIndex; // optional, default is 1 +- UCHAR Rsvd[3]; // Make alignment ++ UCHAR MacAddr[6]; /* mandatory, AP MAC address */ ++ UCHAR KeyIndex; /* optional, default is 1 */ ++ UCHAR Rsvd[3]; /* Make alignment */ + } WSC_CREDENTIAL, *PWSC_CREDENTIAL; + +-// WSC configured profiles ++/* WSC configured profiles */ + typedef struct _WSC_PROFILE { + UINT ProfileCnt; +- UINT ApplyProfileIdx; // add by johnli, fix WPS test plan 5.1.1 +- WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles ++ UINT ApplyProfileIdx; /* add by johnli, fix WPS test plan 5.1.1 */ ++ WSC_CREDENTIAL Profile[8]; /* Support up to 8 profiles */ + } WSC_PROFILE, *PWSC_PROFILE; + +-#endif // _OID_H_ ++#endif /* _OID_H_ */ +diff --git a/drivers/staging/rt2860/rt_config.h b/drivers/staging/rt2860/rt_config.h +index 8fa3f11..d1adef8 100644 +--- a/drivers/staging/rt2860/rt_config.h ++++ b/drivers/staging/rt2860/rt_config.h +@@ -66,6 +66,6 @@ + + #ifdef IGMP_SNOOP_SUPPORT + #include "igmp_snoop.h" +-#endif // IGMP_SNOOP_SUPPORT // ++#endif /* IGMP_SNOOP_SUPPORT // */ + +-#endif // __RT_CONFIG_H__ ++#endif /* __RT_CONFIG_H__ */ +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index 478c8d0..1e27c66 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -60,20 +60,20 @@ + + #include + +-// load firmware ++/* load firmware */ + #define __KERNEL_SYSCALLS__ + #include + #include + #include +-#include // for get_unaligned() ++#include /* for get_unaligned() */ + + #define KTHREAD_SUPPORT 1 +-// RT2870 2.1.0.0 has it disabled ++/* RT2870 2.1.0.0 has it disabled */ + + #ifdef KTHREAD_SUPPORT + #include + #include +-#endif // KTHREAD_SUPPORT // ++#endif /* KTHREAD_SUPPORT // */ + + /*********************************************************************************** + * Profile related sections +@@ -82,12 +82,12 @@ + #ifdef RTMP_MAC_PCI + #define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" + #define STA_DRIVER_VERSION "2.1.0.0" +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + #define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" + #define STA_DRIVER_VERSION "2.1.0.0" +-// RT3070 version: 2.1.1.0 +-#endif // RTMP_MAC_USB // ++/* RT3070 version: 2.1.1.0 */ ++#endif /* RTMP_MAC_USB // */ + + extern const struct iw_handler_def rt28xx_iw_handler_def; + +@@ -124,8 +124,8 @@ typedef int (*HARD_START_XMIT_FUNC) (struct sk_buff * skb, + #define PCI_DEVICE(vend,dev) \ + .vendor = (vend), .device = (dev), \ + .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID +-#endif // PCI_DEVICE // +-#endif // RTMP_MAC_PCI // ++#endif /* PCI_DEVICE // */ ++#endif /* RTMP_MAC_PCI // */ + + #define RT_MOD_INC_USE_COUNT() \ + if (!try_module_get(THIS_MODULE)) \ +@@ -140,7 +140,7 @@ typedef int (*HARD_START_XMIT_FUNC) (struct sk_buff * skb, + #define RTMP_DEC_REF(_A) 0 + #define RTMP_GET_REF(_A) 0 + +-// This function will be called when query /proc ++/* This function will be called when query /proc */ + struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev); + + /*********************************************************************************** +@@ -176,13 +176,13 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev); + /*********************************************************************************** + * Ralink Specific network related constant definitions + ***********************************************************************************/ +-#define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f +-#define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30 +-#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70 ++#define MIN_NET_DEVICE_FOR_AID 0x00 /*0x00~0x3f */ ++#define MIN_NET_DEVICE_FOR_MBSSID 0x00 /*0x00,0x10,0x20,0x30 */ ++#define MIN_NET_DEVICE_FOR_WDS 0x10 /*0x40,0x50,0x60,0x70 */ + #define MIN_NET_DEVICE_FOR_APCLI 0x20 + #define MIN_NET_DEVICE_FOR_MESH 0x30 + #define MIN_NET_DEVICE_FOR_DLS 0x40 +-#define NET_DEVICE_REAL_IDX_MASK 0x0f // for each operation mode, we maximum support 15 entities. ++#define NET_DEVICE_REAL_IDX_MASK 0x0f /* for each operation mode, we maximum support 15 entities. */ + + #define NDIS_PACKET_TYPE_DIRECTED 0 + #define NDIS_PACKET_TYPE_MULTICAST 1 +@@ -217,9 +217,9 @@ struct os_lock { + + typedef spinlock_t NDIS_SPIN_LOCK; + +-// +-// spin_lock enhanced for Nested spin lock +-// ++/* */ ++/* spin_lock enhanced for Nested spin lock */ ++/* */ + #define NdisAllocateSpinLock(__lock) \ + { \ + spin_lock_init((spinlock_t *)(__lock)); \ +@@ -238,7 +238,7 @@ typedef spinlock_t NDIS_SPIN_LOCK; + spin_unlock_bh((spinlock_t *)(__lock)); \ + } + +-// sample, use semaphore lock to replace IRQ lock, 2007/11/15 ++/* sample, use semaphore lock to replace IRQ lock, 2007/11/15 */ + #define RTMP_IRQ_LOCK(__lock, __irqflags) \ + { \ + __irqflags = 0; \ +@@ -330,7 +330,7 @@ do { \ + /*********************************************************************************** + * OS Memory Access related data structure and definitions + ***********************************************************************************/ +-#define MEM_ALLOC_FLAG (GFP_ATOMIC) //(GFP_DMA | GFP_ATOMIC) ++#define MEM_ALLOC_FLAG (GFP_ATOMIC) /*(GFP_DMA | GFP_ATOMIC) */ + + #define NdisMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length) + #define NdisCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length) +@@ -405,10 +405,10 @@ struct os_cookie { + struct pci_dev *parent_pci_dev; + USHORT DeviceID; + dma_addr_t pAd_pa; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + struct usb_device *pUsb_Dev; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + RTMP_NET_TASK_STRUCT rx_done_task; + RTMP_NET_TASK_STRUCT mgmt_dma_done_task; +@@ -419,14 +419,14 @@ struct os_cookie { + RTMP_NET_TASK_STRUCT tbtt_task; + #ifdef RTMP_MAC_PCI + RTMP_NET_TASK_STRUCT fifo_statistic_full_task; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RTMP_NET_TASK_STRUCT null_frame_complete_task; + RTMP_NET_TASK_STRUCT rts_frame_complete_task; + RTMP_NET_TASK_STRUCT pspoll_frame_complete_task; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- unsigned long apd_pid; //802.1x daemon pid ++ unsigned long apd_pid; /*802.1x daemon pid */ + INT ioctl_if_type; + INT ioctl_if; + }; +@@ -501,12 +501,12 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define DEV_ALLOC_SKB(_length) \ + dev_alloc_skb(_length) +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + #define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0 + + #define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + /* + * ULONG +@@ -545,7 +545,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + * Device Register I/O Access related definitions and data structures. + **********************************************************************************/ + #ifdef RTMP_MAC_PCI +-//Patch for ASIC turst read/write bug, needs to remove after metel fix ++/*Patch for ASIC turst read/write bug, needs to remove after metel fix */ + #define RTMP_IO_READ32(_A, _R, _pV) \ + { \ + if ((_A)->bPCIclkOff == FALSE) \ +@@ -603,7 +603,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writeb((_V), (PUCHAR)((_A)->CSRBaseAddress + (_R))); \ + } +-#endif // #if defined(BRCM_6358) || defined(RALINK_2880) // ++#endif /* #if defined(BRCM_6358) || defined(RALINK_2880) // */ + + #define RTMP_IO_WRITE16(_A, _R, _V) \ + { \ +@@ -611,9 +611,9 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +-//Patch for ASIC turst read/write bug, needs to remove after metel fix ++/*Patch for ASIC turst read/write bug, needs to remove after metel fix */ + #define RTMP_IO_READ32(_A, _R, _pV) \ + RTUSBReadMACRegister((_A), (_R), (PUINT32) (_pV)) + +@@ -634,7 +634,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + { \ + RTUSBSingleWrite((_A), (_R), (USHORT) (_V)); \ + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + /*********************************************************************************** + * Network Related data structure and marco definitions +@@ -719,34 +719,34 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define CB_OFF 10 + +-// User Priority ++/* User Priority */ + #define RTMP_SET_PACKET_UP(_p, _prio) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0] = _prio) + #define RTMP_GET_PACKET_UP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+0]) + +-// Fragment # ++/* Fragment # */ + #define RTMP_SET_PACKET_FRAGMENTS(_p, _num) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+1] = _num) + #define RTMP_GET_PACKET_FRAGMENTS(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+1]) + +-// 0x0 ~0x7f: TX to AP's own BSS which has the specified AID. if AID>127, set bit 7 in RTMP_SET_PACKET_EMACTAB too. +-//(this value also as MAC(on-chip WCID) table index) +-// 0x80~0xff: TX to a WDS link. b0~6: WDS index ++/* 0x0 ~0x7f: TX to AP's own BSS which has the specified AID. if AID>127, set bit 7 in RTMP_SET_PACKET_EMACTAB too. */ ++/*(this value also as MAC(on-chip WCID) table index) */ ++/* 0x80~0xff: TX to a WDS link. b0~6: WDS index */ + #define RTMP_SET_PACKET_WCID(_p, _wdsidx) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2] = _wdsidx) + #define RTMP_GET_PACKET_WCID(_p) ((UCHAR)(RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2])) + +-// 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet ++/* 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet */ + #define RTMP_SET_PACKET_SOURCE(_p, _pktsrc) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+3] = _pktsrc) + #define RTMP_GET_PACKET_SOURCE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+3]) + +-// RTS/CTS-to-self protection method ++/* RTS/CTS-to-self protection method */ + #define RTMP_SET_PACKET_RTS(_p, _num) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+4] = _num) + #define RTMP_GET_PACKET_RTS(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+4]) +-// see RTMP_S(G)ET_PACKET_EMACTAB ++/* see RTMP_S(G)ET_PACKET_EMACTAB */ + +-// TX rate index ++/* TX rate index */ + #define RTMP_SET_PACKET_TXRATE(_p, _rate) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+5] = _rate) + #define RTMP_GET_PACKET_TXRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+5]) + +-// From which Interface ++/* From which Interface */ + #define RTMP_SET_PACKET_IF(_p, _ifdx) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+6] = _ifdx) + #define RTMP_GET_PACKET_IF(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+6]) + #define RTMP_SET_PACKET_NET_DEVICE_MBSSID(_p, _bss) RTMP_SET_PACKET_IF((_p), (_bss)) +@@ -759,9 +759,9 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + #define RTMP_SET_PACKET_MOREDATA(_p, _morebit) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7] = _morebit) + #define RTMP_GET_PACKET_MOREDATA(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7]) + +-// +-// Sepcific Pakcet Type definition +-// ++/* */ ++/* Sepcific Pakcet Type definition */ ++/* */ + #define RTMP_PACKET_SPECIFIC_CB_OFFSET 11 + + #define RTMP_PACKET_SPECIFIC_DHCP 0x01 +@@ -771,10 +771,10 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + #define RTMP_PACKET_SPECIFIC_VLAN 0x10 + #define RTMP_PACKET_SPECIFIC_LLCSNAP 0x20 + +-//Specific ++/*Specific */ + #define RTMP_SET_PACKET_SPECIFIC(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] = _flg) + +-//DHCP ++/*DHCP */ + #define RTMP_SET_PACKET_DHCP(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -784,7 +784,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + }while(0) + #define RTMP_GET_PACKET_DHCP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_DHCP) + +-//EAPOL ++/*EAPOL */ + #define RTMP_SET_PACKET_EAPOL(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -794,7 +794,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + }while(0) + #define RTMP_GET_PACKET_EAPOL(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_EAPOL) + +-//WAI ++/*WAI */ + #define RTMP_SET_PACKET_WAI(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -806,7 +806,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define RTMP_GET_PACKET_LOWRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & (RTMP_PACKET_SPECIFIC_EAPOL | RTMP_PACKET_SPECIFIC_DHCP | RTMP_PACKET_SPECIFIC_WAI)) + +-//VLAN ++/*VLAN */ + #define RTMP_SET_PACKET_VLAN(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -816,7 +816,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + }while(0) + #define RTMP_GET_PACKET_VLAN(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_VLAN) + +-//LLC/SNAP ++/*LLC/SNAP */ + #define RTMP_SET_PACKET_LLCSNAP(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -827,7 +827,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define RTMP_GET_PACKET_LLCSNAP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_LLCSNAP) + +-// IP ++/* IP */ + #define RTMP_SET_PACKET_IPV4(_p, _flg) \ + do{ \ + if (_flg) \ +@@ -838,7 +838,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define RTMP_GET_PACKET_IPV4(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_IPV4) + +-// If this flag is set, it indicates that this EAPoL frame MUST be clear. ++/* If this flag is set, it indicates that this EAPoL frame MUST be clear. */ + #define RTMP_SET_PACKET_CLEAR_EAP_FRAME(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12] = _flg) + #define RTMP_GET_PACKET_CLEAR_EAP_FRAME(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12]) + +@@ -860,7 +860,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb); + #define IRQ_HANDLE_TYPE irqreturn_t + + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + INT rt28xx_sta_ioctl(IN PNET_DEV net_dev, IN OUT struct ifreq *rq, IN INT cmd); + +@@ -869,4 +869,4 @@ extern int ra_mtd_read(int num, loff_t from, size_t len, u_char * buf); + + #define GET_PAD_FROM_NET_DEV(_pAd, _net_dev) (_pAd) = (PRTMP_ADAPTER)(_net_dev)->ml_priv; + +-#endif // __RT_LINUX_H__ // ++#endif /* __RT_LINUX_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index f6b8f62..2ac9663 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -49,14 +49,14 @@ typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; + + typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; + +-//#define DBG 1 ++/*#define DBG 1 */ + +-//#define DBG_DIAGNOSE 1 ++/*#define DBG_DIAGNOSE 1 */ + +-//+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function ++/*+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function */ + #define MAX_DATAMM_RETRY 3 + #define MGMT_USE_QUEUE_FLAG 0x80 +-//---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function ++/*---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function */ + + #define MAXSEQ (0xFFF) + +@@ -79,7 +79,7 @@ extern UCHAR EAPOL_LLC_SNAP[8]; + extern UCHAR EAPOL[2]; + extern UCHAR IPX[2]; + extern UCHAR APPLE_TALK[2]; +-extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14 ++extern UCHAR RateIdToPlcpSignal[12]; /* see IEEE802.11a-1999 p.14 */ + extern UCHAR OfdmRateToRxwiMCS[]; + extern UCHAR OfdmSignalToRateId[16]; + extern UCHAR default_cwmin[4]; +@@ -147,9 +147,9 @@ extern UCHAR RateSwitchTable11N2SForABand[]; + extern UCHAR PRE_N_HT_OUI[]; + + typedef struct _RSSI_SAMPLE { +- CHAR LastRssi0; // last received RSSI +- CHAR LastRssi1; // last received RSSI +- CHAR LastRssi2; // last received RSSI ++ CHAR LastRssi0; /* last received RSSI */ ++ CHAR LastRssi1; /* last received RSSI */ ++ CHAR LastRssi2; /* last received RSSI */ + CHAR AvgRssi0; + CHAR AvgRssi1; + CHAR AvgRssi2; +@@ -158,14 +158,14 @@ typedef struct _RSSI_SAMPLE { + SHORT AvgRssi2X8; + } RSSI_SAMPLE; + +-// +-// Queue structure and macros +-// ++/* */ ++/* Queue structure and macros */ ++/* */ + typedef struct _QUEUE_ENTRY { + struct _QUEUE_ENTRY *Next; + } QUEUE_ENTRY, *PQUEUE_ENTRY; + +-// Queue structure ++/* Queue structure */ + typedef struct _QUEUE_HEADER { + PQUEUE_ENTRY Head; + PQUEUE_ENTRY Tail; +@@ -224,15 +224,15 @@ typedef struct _QUEUE_HEADER { + (QueueHeader)->Number++; \ + } + +-// +-// Macros for flag and ref count operations +-// ++/* */ ++/* Macros for flag and ref count operations */ ++/* */ + #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) + #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) + #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0) + #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0) + #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) +-// Macro for power save flag. ++/* Macro for power save flag. */ + #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F)) + #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F)) + #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0) +@@ -266,7 +266,7 @@ typedef struct _QUEUE_HEADER { + (_idx) = (_idx+1) % (_RingSize); \ + } + +-// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. ++/* StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. */ + #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ + { \ + _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \ +@@ -290,25 +290,25 @@ typedef struct _QUEUE_HEADER { + _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ + } + +-// +-// MACRO for 32-bit PCI register read / write +-// +-// Usage : RTMP_IO_READ32( +-// PRTMP_ADAPTER pAd, +-// ULONG Register_Offset, +-// PULONG pValue) +-// +-// RTMP_IO_WRITE32( +-// PRTMP_ADAPTER pAd, +-// ULONG Register_Offset, +-// ULONG Value) +-// +- +-// +-// Common fragment list structure - Identical to the scatter gather frag list structure +-// +-//#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT +-//#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT ++/* */ ++/* MACRO for 32-bit PCI register read / write */ ++/* */ ++/* Usage : RTMP_IO_READ32( */ ++/* PRTMP_ADAPTER pAd, */ ++/* ULONG Register_Offset, */ ++/* PULONG pValue) */ ++/* */ ++/* RTMP_IO_WRITE32( */ ++/* PRTMP_ADAPTER pAd, */ ++/* ULONG Register_Offset, */ ++/* ULONG Value) */ ++/* */ ++ ++/* */ ++/* Common fragment list structure - Identical to the scatter gather frag list structure */ ++/* */ ++/*#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT */ ++/*#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT */ + #define NIC_MAX_PHYS_BUF_COUNT 8 + + typedef struct _RTMP_SCATTER_GATHER_ELEMENT { +@@ -323,9 +323,9 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; + } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; + +-// +-// Some utility macros +-// ++/* */ ++/* Some utility macros */ ++/* */ + #ifndef min + #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) + #endif +@@ -343,11 +343,11 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR) + #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p)) + +-// Check LEAP & CCKM flags ++/* Check LEAP & CCKM flags */ + #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) + #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE)) + +-// if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required ++/* if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required */ + #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \ + { \ + if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \ +@@ -365,7 +365,7 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + } + +-// New Define for new Tx Path. ++/* New Define for new Tx Path. */ + #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \ + { \ + if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \ +@@ -390,13 +390,13 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \ + } + +-// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way. +-// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field +-// else remove the LLC/SNAP field from the result Ethernet frame +-// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload +-// Note: +-// _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO +-// _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed ++/* if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way. */ ++/* else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field */ ++/* else remove the LLC/SNAP field from the result Ethernet frame */ ++/* Patch for WHQL only, which did not turn on Netbios but use IPX within its payload */ ++/* Note: */ ++/* _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO */ ++/* _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed */ + #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \ + { \ + char LLC_Len[2]; \ +@@ -430,9 +430,9 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + } + +-// Enqueue this frame to MLME engine +-// We need to enqueue the whole frame because MLME need to pass data type +-// information from 802.11 header ++/* Enqueue this frame to MLME engine */ ++/* We need to enqueue the whole frame because MLME need to pass data type */ ++/* information from 802.11 header */ + #ifdef RTMP_MAC_PCI + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ +@@ -441,21 +441,21 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ + } +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ + UINT32 High32TSF=0, Low32TSF=0; \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ + } +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) + #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) + +-// +-// Check if it is Japan W53(ch52,56,60,64) channel. +-// ++/* */ ++/* Check if it is Japan W53(ch52,56,60,64) channel. */ ++/* */ + #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64)) + + #define STA_EXTRA_SETTING(_pAd) +@@ -472,67 +472,67 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + STA_EXTRA_SETTING(_pAd); \ + } + +-// +-// Data buffer for DMA operation, the buffer must be contiguous physical memory +-// Both DMA to / from CPU use the same structure. +-// ++/* */ ++/* Data buffer for DMA operation, the buffer must be contiguous physical memory */ ++/* Both DMA to / from CPU use the same structure. */ ++/* */ + typedef struct _RTMP_DMABUF { + ULONG AllocSize; +- PVOID AllocVa; // TxBuf virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address ++ PVOID AllocVa; /* TxBuf virtual address */ ++ NDIS_PHYSICAL_ADDRESS AllocPa; /* TxBuf physical address */ + } RTMP_DMABUF, *PRTMP_DMABUF; + +-// +-// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be +-// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor +-// which won't be released, driver has to wait until upper layer return the packet +-// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair +-// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor +-// which driver should ACK upper layer when the tx is physically done or failed. +-// ++/* */ ++/* Control block (Descriptor) for all ring descriptor DMA operation, buffer must be */ ++/* contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor */ ++/* which won't be released, driver has to wait until upper layer return the packet */ ++/* before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair */ ++/* to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor */ ++/* which driver should ACK upper layer when the tx is physically done or failed. */ ++/* */ + typedef struct _RTMP_DMACB { +- ULONG AllocSize; // Control block size +- PVOID AllocVa; // Control block virtual address +- NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address ++ ULONG AllocSize; /* Control block size */ ++ PVOID AllocVa; /* Control block virtual address */ ++ NDIS_PHYSICAL_ADDRESS AllocPa; /* Control block physical address */ + PNDIS_PACKET pNdisPacket; + PNDIS_PACKET pNextNdisPacket; + +- RTMP_DMABUF DmaBuf; // Associated DMA buffer structure ++ RTMP_DMABUF DmaBuf; /* Associated DMA buffer structure */ + } RTMP_DMACB, *PRTMP_DMACB; + + typedef struct _RTMP_TX_RING { + RTMP_DMACB Cell[TX_RING_SIZE]; + UINT32 TxCpuIdx; + UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index ++ UINT32 TxSwFreeIdx; /* software next free tx index */ + } RTMP_TX_RING, *PRTMP_TX_RING; + + typedef struct _RTMP_RX_RING { + RTMP_DMACB Cell[RX_RING_SIZE]; + UINT32 RxCpuIdx; + UINT32 RxDmaIdx; +- INT32 RxSwReadIdx; // software next read index ++ INT32 RxSwReadIdx; /* software next read index */ + } RTMP_RX_RING, *PRTMP_RX_RING; + + typedef struct _RTMP_MGMT_RING { + RTMP_DMACB Cell[MGMT_RING_SIZE]; + UINT32 TxCpuIdx; + UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; // software next free tx index ++ UINT32 TxSwFreeIdx; /* software next free tx index */ + } RTMP_MGMT_RING, *PRTMP_MGMT_RING; + +-// +-// Statistic counter structure +-// ++/* */ ++/* Statistic counter structure */ ++/* */ + typedef struct _COUNTER_802_3 { +- // General Stats ++ /* General Stats */ + ULONG GoodTransmits; + ULONG GoodReceives; + ULONG TxErrors; + ULONG RxErrors; + ULONG RxNoBuffer; + +- // Ethernet Stats ++ /* Ethernet Stats */ + ULONG RcvAlignmentErrors; + ULONG OneCollision; + ULONG MoreCollisions; +@@ -557,8 +557,8 @@ typedef struct _COUNTER_802_11 { + } COUNTER_802_11, *PCOUNTER_802_11; + + typedef struct _COUNTER_RALINK { +- ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput +- ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput ++ ULONG TransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ ++ ULONG ReceivedByteCount; /* both CRC okay and CRC error, used to calculate RX throughput */ + ULONG BeenDisassociatedCount; + ULONG BadCQIAutoRecoveryCount; + ULONG PoorCQIRoamingCount; +@@ -580,17 +580,17 @@ typedef struct _COUNTER_RALINK { + UINT32 OneSecReceivedByteCount; + UINT32 OneSecFrameDuplicateCount; + +- UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput ++ UINT32 OneSecTransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ + UINT32 OneSecTxNoRetryOkCount; + UINT32 OneSecTxRetryOkCount; + UINT32 OneSecTxFailCount; +- UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter +- UINT32 OneSecRxOkCnt; // RX without error +- UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count +- UINT32 OneSecRxFcsErrCnt; // CRC error ++ UINT32 OneSecFalseCCACnt; /* CCA error count, for debug purpose, might move to global counter */ ++ UINT32 OneSecRxOkCnt; /* RX without error */ ++ UINT32 OneSecRxOkDataCnt; /* unicast-to-me DATA frame count */ ++ UINT32 OneSecRxFcsErrCnt; /* CRC error */ + UINT32 OneSecBeaconSentCnt; +- UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount +- UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt ++ UINT32 LastOneSecTotalTxCount; /* OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount */ ++ UINT32 LastOneSecRxOkDataCnt; /* OneSecRxOkDataCnt */ + ULONG DuplicateRcv; + ULONG TxAggCount; + ULONG TxNonAggCount; +@@ -622,15 +622,15 @@ typedef struct _COUNTER_RALINK { + } COUNTER_RALINK, *PCOUNTER_RALINK; + + typedef struct _COUNTER_DRS { +- // to record the each TX rate's quality. 0 is best, the bigger the worse. ++ /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ + USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; + UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +- ULONG CurrTxRateStableTime; // # of second in current TX rate ++ UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ ++ ULONG CurrTxRateStableTime; /* # of second in current TX rate */ + BOOLEAN fNoisyEnvironment; + BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction ++ UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ ++ UCHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ + ULONG LastTxOkCount; + } COUNTER_DRS, *PCOUNTER_DRS; + +@@ -638,22 +638,22 @@ typedef struct _COUNTER_DRS { + * security key related data structure + **************************************************************************/ + typedef struct _CIPHER_KEY { +- UCHAR Key[16]; // right now we implement 4 keys, 128 bits max +- UCHAR RxMic[8]; // make alignment ++ UCHAR Key[16]; /* right now we implement 4 keys, 128 bits max */ ++ UCHAR RxMic[8]; /* make alignment */ + UCHAR TxMic[8]; +- UCHAR TxTsc[6]; // 48bit TSC value +- UCHAR RxTsc[6]; // 48bit TSC value +- UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 ++ UCHAR TxTsc[6]; /* 48bit TSC value */ ++ UCHAR RxTsc[6]; /* 48bit TSC value */ ++ UCHAR CipherAlg; /* 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 */ + UCHAR KeyLen; + UCHAR BssId[6]; +- // Key length for each key, 0: entry is invalid +- UCHAR Type; // Indicate Pairwise/Group when reporting MIC error ++ /* Key length for each key, 0: entry is invalid */ ++ UCHAR Type; /* Indicate Pairwise/Group when reporting MIC error */ + } CIPHER_KEY, *PCIPHER_KEY; + +-// structure to define WPA Group Key Rekey Interval ++/* structure to define WPA Group Key Rekey Interval */ + typedef struct PACKED _RT_802_11_WPA_REKEY { +- ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets ++ ULONG ReKeyMethod; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ ULONG ReKeyInterval; /* time-based: seconds, packet-based: kilo-packets */ + } RT_WPA_REKEY, *PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; + + #ifdef RTMP_MAC_USB +@@ -661,26 +661,26 @@ typedef struct PACKED _RT_802_11_WPA_REKEY { + * RTUSB I/O related data structure + **************************************************************************/ + typedef struct _RT_SET_ASIC_WCID { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG SetTid; // time-based: seconds, packet-based: kilo-packets +- ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets +- UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key ++ ULONG WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ ULONG SetTid; /* time-based: seconds, packet-based: kilo-packets */ ++ ULONG DeleteTid; /* time-based: seconds, packet-based: kilo-packets */ ++ UCHAR Addr[MAC_ADDR_LEN]; /* avoid in interrupt when write key */ + } RT_SET_ASIC_WCID, *PRT_SET_ASIC_WCID; + + typedef struct _RT_SET_ASIC_WCID_ATTRI { +- ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based +- ULONG Cipher; // ASIC Cipher definition ++ ULONG WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ ULONG Cipher; /* ASIC Cipher definition */ + UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; + } RT_SET_ASIC_WCID_ATTRI, *PRT_SET_ASIC_WCID_ATTRI; + +-// for USB interface, avoid in interrupt when write key ++/* for USB interface, avoid in interrupt when write key */ + typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { + UCHAR MacAddr[6]; +- USHORT MacTabMatchWCID; // ASIC ++ USHORT MacTabMatchWCID; /* ASIC */ + CIPHER_KEY CipherKey; + } RT_ADD_PAIRWISE_KEY_ENTRY, *PRT_ADD_PAIRWISE_KEY_ENTRY; + +-// Cipher suite type for mixed mode group cipher, P802.11i-2004 ++/* Cipher suite type for mixed mode group cipher, P802.11i-2004 */ + typedef enum _RT_802_11_CIPHER_SUITE_TYPE { + Cipher_Type_NONE, + Cipher_Type_WEP40, +@@ -689,14 +689,14 @@ typedef enum _RT_802_11_CIPHER_SUITE_TYPE { + Cipher_Type_CCMP, + Cipher_Type_WEP104 + } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + typedef struct { + UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR ErrorCode[2]; //00 01-Invalid authentication type +- //00 02-Authentication timeout +- //00 03-Challenge from AP failed +- //00 04-Challenge to AP failed ++ UCHAR ErrorCode[2]; /*00 01-Invalid authentication type */ ++ /*00 02-Authentication timeout */ ++ /*00 03-Challenge from AP failed */ ++ /*00 04-Challenge to AP failed */ + BOOLEAN Reported; + } ROGUEAP_ENTRY, *PROGUEAP_ENTRY; + +@@ -705,23 +705,23 @@ typedef struct { + ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; + } ROGUEAP_TABLE, *PROGUEAP_TABLE; + +-// +-// Cisco IAPP format +-// ++/* */ ++/* Cisco IAPP format */ ++/* */ + typedef struct _CISCO_IAPP_CONTENT_ { +- USHORT Length; //IAPP Length +- UCHAR MessageType; //IAPP type +- UCHAR FunctionCode; //IAPP function type ++ USHORT Length; /*IAPP Length */ ++ UCHAR MessageType; /*IAPP type */ ++ UCHAR FunctionCode; /*IAPP function type */ + UCHAR DestinaionMAC[MAC_ADDR_LEN]; + UCHAR SourceMAC[MAC_ADDR_LEN]; +- USHORT Tag; //Tag(element IE) - Adjacent AP report +- USHORT TagLength; //Length of element not including 4 byte header +- UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00 +- UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point ++ USHORT Tag; /*Tag(element IE) - Adjacent AP report */ ++ USHORT TagLength; /*Length of element not including 4 byte header */ ++ UCHAR OUI[4]; /*0x00, 0x40, 0x96, 0x00 */ ++ UCHAR PreviousAP[MAC_ADDR_LEN]; /*MAC Address of access point */ + USHORT Channel; + USHORT SsidLen; + UCHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT Seconds; //Seconds that the client has been disassociated. ++ USHORT Seconds; /*Seconds that the client has been disassociated. */ + } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; + + /* +@@ -732,55 +732,55 @@ typedef struct _FRAGMENT_FRAME { + ULONG RxSize; + USHORT Sequence; + USHORT LastFrag; +- ULONG Flags; // Some extra frame information. bit 0: LLC presented ++ ULONG Flags; /* Some extra frame information. bit 0: LLC presented */ + } FRAGMENT_FRAME, *PFRAGMENT_FRAME; + +-// +-// Packet information for NdisQueryPacket +-// ++/* */ ++/* Packet information for NdisQueryPacket */ ++/* */ + typedef struct _PACKET_INFO { +- UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained +- UINT BufferCount; // Number of Buffer descriptor chained +- UINT TotalPacketLength; // Self explained +- PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor ++ UINT PhysicalBufferCount; /* Physical breaks of buffer descripor chained */ ++ UINT BufferCount; /* Number of Buffer descriptor chained */ ++ UINT TotalPacketLength; /* Self explained */ ++ PNDIS_BUFFER pFirstBuffer; /* Pointer to first buffer descriptor */ + } PACKET_INFO, *PPACKET_INFO; + +-// +-// Arcfour Structure Added by PaulWu +-// ++/* */ ++/* Arcfour Structure Added by PaulWu */ ++/* */ + typedef struct _ARCFOUR { + UINT X; + UINT Y; + UCHAR STATE[256]; + } ARCFOURCONTEXT, *PARCFOURCONTEXT; + +-// +-// Tkip Key structure which RC4 key & MIC calculation +-// ++/* */ ++/* Tkip Key structure which RC4 key & MIC calculation */ ++/* */ + typedef struct _TKIP_KEY_INFO { +- UINT nBytesInM; // # bytes in M for MICKEY ++ UINT nBytesInM; /* # bytes in M for MICKEY */ + ULONG IV16; + ULONG IV32; +- ULONG K0; // for MICKEY Low +- ULONG K1; // for MICKEY Hig +- ULONG L; // Current state for MICKEY +- ULONG R; // Current state for MICKEY +- ULONG M; // Message accumulator for MICKEY ++ ULONG K0; /* for MICKEY Low */ ++ ULONG K1; /* for MICKEY Hig */ ++ ULONG L; /* Current state for MICKEY */ ++ ULONG R; /* Current state for MICKEY */ ++ ULONG M; /* Message accumulator for MICKEY */ + UCHAR RC4KEY[16]; + UCHAR MIC[8]; + } TKIP_KEY_INFO, *PTKIP_KEY_INFO; + +-// +-// Private / Misc data, counters for driver internal use +-// ++/* */ ++/* Private / Misc data, counters for driver internal use */ ++/* */ + typedef struct __PRIVATE_STRUC { +- UINT SystemResetCnt; // System reset counter +- UINT TxRingFullCnt; // Tx ring full occurrance number +- UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter +- // Variables for WEP encryption / decryption in rtmp_wep.c ++ UINT SystemResetCnt; /* System reset counter */ ++ UINT TxRingFullCnt; /* Tx ring full occurrance number */ ++ UINT PhyRxErrCnt; /* PHY Rx error count, for debug purpose, might move to global counter */ ++ /* Variables for WEP encryption / decryption in rtmp_wep.c */ + UINT FCSCRC32; + ARCFOURCONTEXT WEPCONTEXT; +- // Tkip stuff ++ /* Tkip stuff */ + TKIP_KEY_INFO Tx; + TKIP_KEY_INFO Rx; + } PRIVATE_STRUC, *PPRIVATE_STRUC; +@@ -788,19 +788,19 @@ typedef struct __PRIVATE_STRUC { + /*************************************************************************** + * Channel and BBP related data structures + **************************************************************************/ +-// structure to tune BBP R66 (BBP TUNING) ++/* structure to tune BBP R66 (BBP TUNING) */ + typedef struct _BBP_R66_TUNING { + BOOLEAN bEnable; +- USHORT FalseCcaLowerThreshold; // default 100 +- USHORT FalseCcaUpperThreshold; // default 512 ++ USHORT FalseCcaLowerThreshold; /* default 100 */ ++ USHORT FalseCcaUpperThreshold; /* default 512 */ + UCHAR R66Delta; + UCHAR R66CurrentValue; +- BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value. ++ BOOLEAN R66LowerUpperSelect; /*Before LinkUp, Used LowerBound or UpperBound as R66 value. */ + } BBP_R66_TUNING, *PBBP_R66_TUNING; + +-// structure to store channel TX power ++/* structure to store channel TX power */ + typedef struct _CHANNEL_TX_POWER { +- USHORT RemainingTimeForUse; //unit: sec ++ USHORT RemainingTimeForUse; /*unit: sec */ + UCHAR Channel; + CHAR Power; + CHAR Power2; +@@ -808,26 +808,26 @@ typedef struct _CHANNEL_TX_POWER { + UCHAR DfsReq; + } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; + +-// structure to store 802.11j channel TX power ++/* structure to store 802.11j channel TX power */ + typedef struct _CHANNEL_11J_TX_POWER { + UCHAR Channel; +- UCHAR BW; // BW_10 or BW_20 ++ UCHAR BW; /* BW_10 or BW_20 */ + CHAR Power; + CHAR Power2; +- USHORT RemainingTimeForUse; //unit: sec ++ USHORT RemainingTimeForUse; /*unit: sec */ + } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; + + typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { +- UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status ++ UCHAR EvaluatePeriod; /* 0:not evalute status, 1: evaluate status, 2: switching status */ + UCHAR EvaluateStableCnt; +- UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2 +- UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4 +- SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2 +- SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4 +- SHORT Pair1LastAvgRssi; // +- SHORT Pair2LastAvgRssi; // ++ UCHAR Pair1PrimaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ ++ UCHAR Pair1SecondaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ ++ UCHAR Pair2PrimaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ ++ UCHAR Pair2SecondaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ ++ SHORT Pair1AvgRssi[2]; /* AvgRssi[0]:E1, AvgRssi[1]:E2 */ ++ SHORT Pair2AvgRssi[2]; /* AvgRssi[0]:E3, AvgRssi[1]:E4 */ ++ SHORT Pair1LastAvgRssi; /* */ ++ SHORT Pair2LastAvgRssi; /* */ + ULONG RcvPktNumWhenEvaluate; + BOOLEAN FirstPktArrivedWhenEvaluate; + RALINK_TIMER_STRUCT RxAntDiversityTimer; +@@ -837,19 +837,19 @@ typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { + * structure for radar detection and channel switch + **************************************************************************/ + typedef struct _RADAR_DETECT_STRUCT { +- //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h +- UCHAR CSCount; //Channel switch counter +- UCHAR CSPeriod; //Channel switch period (beacon count) +- UCHAR RDCount; //Radar detection counter +- UCHAR RDMode; //Radar Detection mode +- UCHAR RDDurRegion; //Radar detection duration region ++ /*BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h */ ++ UCHAR CSCount; /*Channel switch counter */ ++ UCHAR CSPeriod; /*Channel switch period (beacon count) */ ++ UCHAR RDCount; /*Radar detection counter */ ++ UCHAR RDMode; /*Radar Detection mode */ ++ UCHAR RDDurRegion; /*Radar detection duration region */ + UCHAR BBPR16; + UCHAR BBPR17; + UCHAR BBPR18; + UCHAR BBPR21; + UCHAR BBPR22; + UCHAR BBPR64; +- ULONG InServiceMonitorCount; // unit: sec ++ ULONG InServiceMonitorCount; /* unit: sec */ + UINT8 DfsSessionTime; + BOOLEAN bFastDfs; + UINT8 ChMovingTime; +@@ -863,25 +863,25 @@ typedef enum _ABGBAND_STATE_ { + } ABGBAND_STATE; + + #ifdef RTMP_MAC_PCI +-// Power save method control ++/* Power save method control */ + typedef union _PS_CONTROL { + struct { +- ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey, +- ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. +- ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip +- ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip. +- ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. +- ULONG rsv:26; // Radio Measurement Enable ++ ULONG EnablePSinIdle:1; /* Enable radio off when not connect to AP. radio on only when sitesurvey, */ ++ ULONG EnableNewPS:1; /* Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. */ ++ ULONG rt30xxPowerMode:2; /* Power Level Mode for rt30xx chip */ ++ ULONG rt30xxFollowHostASPM:1; /* Card Follows Host's setting for rt30xx chip. */ ++ ULONG rt30xxForceASPMTest:1; /* Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. */ ++ ULONG rsv:26; /* Radio Measurement Enable */ + } field; + ULONG word; + } PS_CONTROL, *PPS_CONTROL; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + /*************************************************************************** + * structure for MLME state machine + **************************************************************************/ + typedef struct _MLME_STRUCT { +- // STA state machines ++ /* STA state machines */ + STATE_MACHINE CntlMachine; + STATE_MACHINE AssocMachine; + STATE_MACHINE AuthMachine; +@@ -894,15 +894,15 @@ typedef struct _MLME_STRUCT { + STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; + STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; + STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; +- // Action ++ /* Action */ + STATE_MACHINE ActMachine; + +- // common WPA state machine ++ /* common WPA state machine */ + STATE_MACHINE WpaMachine; + STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; + +- ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming +- ULONG Now32; // latch the value of NdisGetSystemUpTime() ++ ULONG ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ ++ ULONG Now32; /* latch the value of NdisGetSystemUpTime() */ + ULONG LastSendNULLpsmTime; + + BOOLEAN bRunning; +@@ -919,7 +919,7 @@ typedef struct _MLME_STRUCT { + UCHAR bPsPollTimerRunning; + RALINK_TIMER_STRUCT PsPollTimer; + RALINK_TIMER_STRUCT RadioOnOffTimer; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + ULONG PeriodicRound; + ULONG OneSecPeriodicRound; + +@@ -931,12 +931,12 @@ typedef struct _MLME_STRUCT { + #ifdef RT30xx + UCHAR CaliBW40RfR24; + UCHAR CaliBW20RfR24; +-#endif // RT30xx // ++#endif /* RT30xx // */ + + #ifdef RTMP_MAC_USB + RALINK_TIMER_STRUCT AutoWakeupTimer; + BOOLEAN AutoWakeupTimerRunning; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + } MLME_STRUCT, *PMLME_STRUCT; + + /*************************************************************************** +@@ -979,7 +979,7 @@ typedef struct _BA_ORI_ENTRY { + UCHAR TID; + UCHAR BAWinSize; + UCHAR Token; +-// Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. ++/* Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. */ + USHORT Sequence; + USHORT TimeOutValue; + ORI_BLOCKACK_STATUS ORI_BA_Status; +@@ -990,47 +990,47 @@ typedef struct _BA_ORI_ENTRY { + typedef struct _BA_REC_ENTRY { + UCHAR Wcid; + UCHAR TID; +- UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. +- //UCHAR NumOfRxPkt; +- //UCHAR Curindidx; // the head in the RX reordering buffer ++ UCHAR BAWinSize; /* 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. */ ++ /*UCHAR NumOfRxPkt; */ ++ /*UCHAR Curindidx; // the head in the RX reordering buffer */ + USHORT LastIndSeq; +-// USHORT LastIndSeqAtTimer; ++/* USHORT LastIndSeqAtTimer; */ + USHORT TimeOutValue; + RALINK_TIMER_STRUCT RECBATimer; + ULONG LastIndSeqAtTimer; + ULONG nDropPacket; + ULONG rcvSeq; + REC_BLOCKACK_STATUS REC_BA_Status; +-// UCHAR RxBufIdxUsed; +- // corresponding virtual address for RX reordering packet storage. +- //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; +- NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock +-// struct _BA_REC_ENTRY *pNext; ++/* UCHAR RxBufIdxUsed; */ ++ /* corresponding virtual address for RX reordering packet storage. */ ++ /*RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; */ ++ NDIS_SPIN_LOCK RxReRingLock; /* Rx Ring spinlock */ ++/* struct _BA_REC_ENTRY *pNext; */ + PVOID pAdapter; + struct reordering_list list; + } BA_REC_ENTRY, *PBA_REC_ENTRY; + + typedef struct { +- ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] +- ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] +- ULONG numDoneOriginator; // count Done Originator sessions ++ ULONG numAsRecipient; /* I am recipient of numAsRecipient clients. These client are in the BARecEntry[] */ ++ ULONG numAsOriginator; /* I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] */ ++ ULONG numDoneOriginator; /* count Done Originator sessions */ + BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; + BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; + } BA_TABLE, *PBA_TABLE; + +-//For QureyBATableOID use; ++/*For QureyBATableOID use; */ + typedef struct PACKED _OID_BA_REC_ENTRY { + UCHAR MACAddr[MAC_ADDR_LEN]; +- UCHAR BaBitmap; // if (BaBitmap&(1<HTPhyMode.field.MODE >= MODE_HTMIX) + +-//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) ++/*This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) */ + typedef struct _IOT_STRUC { + UCHAR Threshold[2]; +- UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0] +- UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1] ++ UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; /* compare with threshold[0] */ ++ UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; /* compare with threshold[1] */ + ULONG OneSecInWindowCount; + ULONG OneSecFrameDuplicateCount; + ULONG OneSecOutWindowCount; +@@ -1098,16 +1098,16 @@ typedef struct _IOT_STRUC { + BOOLEAN bToggle; + } IOT_STRUC, *PIOT_STRUC; + +-// This is the registry setting for 802.11n transmit setting. Used in advanced page. ++/* This is the registry setting for 802.11n transmit setting. Used in advanced page. */ + typedef union _REG_TRANSMIT_SETTING { + struct { +- //UINT32 PhyMode:4; +- //UINT32 MCS:7; // MCS ++ /*UINT32 PhyMode:4; */ ++ /*UINT32 MCS:7; // MCS */ + UINT32 rsv0:10; + UINT32 TxBF:1; +- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz ++ UINT32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ + UINT32 ShortGI:1; +- UINT32 STBC:1; //SPACE ++ UINT32 STBC:1; /*SPACE */ + UINT32 TRANSNO:2; + UINT32 HTMODE:1; + UINT32 EXTCHA:2; +@@ -1118,9 +1118,9 @@ typedef union _REG_TRANSMIT_SETTING { + + typedef union _DESIRED_TRANSMIT_SETTING { + struct { +- USHORT MCS:7; // MCS ++ USHORT MCS:7; /* MCS */ + USHORT PhyMode:4; +- USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. ++ USHORT FixedTxMode:2; /* If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. */ + USHORT rsv:3; + } field; + USHORT word; +@@ -1136,11 +1136,11 @@ typedef struct _BEACON_SYNC_STRUCT_ { + UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; + ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; + ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT]; +- BOOLEAN EnableBeacon; // trigger to enable beacon transmission. +- UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. +- UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. ++ BOOLEAN EnableBeacon; /* trigger to enable beacon transmission. */ ++ UCHAR BeaconBitMap; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ ++ UCHAR DtimBitOn; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ + } BEACON_SYNC_STRUCT; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + /*************************************************************************** + * Multiple SSID related data structures +@@ -1168,39 +1168,39 @@ typedef struct _BEACON_SYNC_STRUCT_ { + UCHAR bit_offset = wcid & 0x7; \ + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } + +-// configuration common to OPMODE_AP as well as OPMODE_STA ++/* configuration common to OPMODE_AP as well as OPMODE_STA */ + typedef struct _COMMON_CONFIG { + + BOOLEAN bCountryFlag; + UCHAR CountryCode[3]; + UCHAR Geography; +- UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel +- UCHAR CountryRegionForABand; // Enum of country region for A band +- UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED +- USHORT Dsifs; // in units of usec +- ULONG PacketFilter; // Packet filter for receiving ++ UCHAR CountryRegion; /* Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel */ ++ UCHAR CountryRegionForABand; /* Enum of country region for A band */ ++ UCHAR PhyMode; /* PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED */ ++ USHORT Dsifs; /* in units of usec */ ++ ULONG PacketFilter; /* Packet filter for receiving */ + UINT8 RegulatoryClass; + +- CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated +- UCHAR SsidLen; // the actual ssid length in used +- UCHAR LastSsidLen; // the actual ssid length in used +- CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated ++ CHAR Ssid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ ++ UCHAR SsidLen; /* the actual ssid length in used */ ++ UCHAR LastSsidLen; /* the actual ssid length in used */ ++ CHAR LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ + UCHAR LastBssid[MAC_ADDR_LEN]; + + UCHAR Bssid[MAC_ADDR_LEN]; + USHORT BeaconPeriod; + UCHAR Channel; +- UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel. ++ UCHAR CentralChannel; /* Central Channel when using 40MHz is indicating. not real channel. */ + + UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR SupRateLen; + UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR ExtRateLen; +- UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES ++ UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; /* OID_802_11_DESIRED_RATES */ + UCHAR MaxDesiredRate; + UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; + +- ULONG BasicRateBitmap; // backup basic ratebitmap ++ ULONG BasicRateBitmap; /* backup basic ratebitmap */ + + BOOLEAN bAPSDCapable; + BOOLEAN bInServicePeriod; +@@ -1216,83 +1216,83 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bACMAPSDTr[4]; /* no use */ + + BOOLEAN bNeedSendTriggerFrame; +- BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT ++ BOOLEAN bAPSDForcePowerSave; /* Force power save mode, should only use in APSD-STAUT */ + ULONG TriggerTimerCount; + UCHAR MaxSPLength; +- UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 +- // move to MULTISSID_STRUCT for MBSS +- //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. +- REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. +- //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode +- UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit +- UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR TxRateIndex; // Tx rate index in RateSwitchTable +- UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable +- //BOOLEAN bAutoTxRateSwitch; +- UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 +- UCHAR RtsRate; // RATE_xxx +- HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. +- UCHAR MlmeRate; // RATE_xxx, used to send MLME frames +- UCHAR BasicMlmeRate; // Default Rate for sending MLME frames +- +- USHORT RtsThreshold; // in unit of BYTE +- USHORT FragmentThreshold; // in unit of BYTE +- +- UCHAR TxPower; // in unit of mW +- ULONG TxPowerPercentage; // 0~100 % +- ULONG TxPowerDefault; // keep for TxPowerPercentage ++ UCHAR BBPCurrentBW; /* BW_10, BW_20, BW_40 */ ++ /* move to MULTISSID_STRUCT for MBSS */ ++ /*HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. */ ++ REG_TRANSMIT_SETTING RegTransmitSetting; /*registry transmit setting. this is for reading registry setting only. not useful. */ ++ /*UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode */ ++ UCHAR TxRate; /* Same value to fill in TXD. TxRate is 6-bit */ ++ UCHAR MaxTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ ++ UCHAR TxRateIndex; /* Tx rate index in RateSwitchTable */ ++ UCHAR TxRateTableSize; /* Valid Tx rate table size in RateSwitchTable */ ++ /*BOOLEAN bAutoTxRateSwitch; */ ++ UCHAR MinTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ ++ UCHAR RtsRate; /* RATE_xxx */ ++ HTTRANSMIT_SETTING MlmeTransmit; /* MGMT frame PHY rate setting when operatin at Ht rate. */ ++ UCHAR MlmeRate; /* RATE_xxx, used to send MLME frames */ ++ UCHAR BasicMlmeRate; /* Default Rate for sending MLME frames */ ++ ++ USHORT RtsThreshold; /* in unit of BYTE */ ++ USHORT FragmentThreshold; /* in unit of BYTE */ ++ ++ UCHAR TxPower; /* in unit of mW */ ++ ULONG TxPowerPercentage; /* 0~100 % */ ++ ULONG TxPowerDefault; /* keep for TxPowerPercentage */ + UINT8 PwrConstraint; + +- BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 +- BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 ++ BACAP_STRUC BACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ ++ BACAP_STRUC REGBACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ + +- IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter; +- ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto +- BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable +- ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use +- BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) +- BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST +- BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it +- BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version +- BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. +- ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect ++ IOT_STRUC IOTestParm; /* 802.11n InterOpbility Test Parameter; */ ++ ULONG TxPreamble; /* Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto */ ++ BOOLEAN bUseZeroToDisableFragment; /* Microsoft use 0 as disable */ ++ ULONG UseBGProtection; /* 0: auto, 1: always use, 2: always not use */ ++ BOOLEAN bUseShortSlotTime; /* 0: disable, 1 - use short slot (9us) */ ++ BOOLEAN bEnableTxBurst; /* 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST */ ++ BOOLEAN bAggregationCapable; /* 1: enable TX aggregation when the peer supports it */ ++ BOOLEAN bPiggyBackCapable; /* 1: enable TX piggy-back according MAC's version */ ++ BOOLEAN bIEEE80211H; /* 1: enable IEEE802.11h spec. */ ++ ULONG DisableOLBCDetect; /* 0: enable OLBC detect; 1 disable OLBC detect */ + + BOOLEAN bRdg; + +- BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM +- QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP +- EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP +- QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP +- UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx +- BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS +- // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular +- // BOOLEAN control, either ON or OFF. These flags should always be accessed via +- // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. +- // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition ++ BOOLEAN bWmmCapable; /* 0:disable WMM, 1:enable WMM */ ++ QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ ++ EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ ++ QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ ++ UCHAR AckPolicy[4]; /* ACK policy of the specified AC. see ACK_xxx */ ++ BOOLEAN bDLSCapable; /* 0:disable DLS, 1:enable DLS */ ++ /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ ++ /* BOOLEAN control, either ON or OFF. These flags should always be accessed via */ ++ /* OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. */ ++ /* see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition */ + ULONG OpStatusFlags; + +- BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. +- ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode. ++ BOOLEAN NdisRadioStateOff; /*For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. */ ++ ABGBAND_STATE BandState; /* For setting BBP used on B/G or A mode. */ + +- // IEEE802.11H--DFS. ++ /* IEEE802.11H--DFS. */ + RADAR_DETECT_STRUCT RadarDetect; + +- // HT +- UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability +- //RT_HT_CAPABILITY SupportedHtPhy; ++ /* HT */ ++ UCHAR BASize; /* USer desired BAWindowSize. Should not exceed our max capability */ ++ /*RT_HT_CAPABILITY SupportedHtPhy; */ + RT_HT_CAPABILITY DesiredHtPhy; + HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHTInfo; // Useful as AP. +- //This IE is used with channel switch announcement element when changing to a new 40MHz. +- //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. +- NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present ++ ADD_HT_INFO_IE AddHTInfo; /* Useful as AP. */ ++ /*This IE is used with channel switch announcement element when changing to a new 40MHz. */ ++ /*This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. */ ++ NEW_EXT_CHAN_IE NewExtChanOffset; /*7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present */ + + BOOLEAN bHTProtect; + BOOLEAN bMIMOPSEnable; + BOOLEAN bBADecline; +-//2008/11/05: KH add to support Antenna power-saving of AP<-- ++/*2008/11/05: KH add to support Antenna power-saving of AP<-- */ + BOOLEAN bGreenAPEnable; +-//2008/11/05: KH add to support Antenna power-saving of AP--> ++/*2008/11/05: KH add to support Antenna power-saving of AP--> */ + BOOLEAN bDisableReordering; + BOOLEAN bForty_Mhz_Intolerant; + BOOLEAN bExtChannelSwitchAnnouncement; +@@ -1301,19 +1301,19 @@ typedef struct _COMMON_CONFIG { + + UCHAR TxBASize; + +- // Enable wireless event ++ /* Enable wireless event */ + BOOLEAN bWirelessEvent; +- BOOLEAN bWiFiTest; // Enable this parameter for WiFi test ++ BOOLEAN bWiFiTest; /* Enable this parameter for WiFi test */ + +- // Tx & Rx Stream number selection ++ /* Tx & Rx Stream number selection */ + UCHAR TxStream; + UCHAR RxStream; + +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled ++ BOOLEAN bHardwareRadio; /* Hardware controlled Radio enabled */ + + #ifdef RTMP_MAC_USB +- BOOLEAN bMultipleIRP; // Multiple Bulk IN flag +- UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 ++ BOOLEAN bMultipleIRP; /* Multiple Bulk IN flag */ ++ UCHAR NumOfBulkInIRP; /* if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 */ + RT_HT_CAPABILITY SupportedHtPhy; + ULONG MaxPktOneTxBulk; + UCHAR TxBulkFactor; +@@ -1325,7 +1325,7 @@ typedef struct _COMMON_CONFIG { + UINT32 BeaconAdjust; + UINT32 BeaconFactor; + UINT32 BeaconRemain; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + NDIS_SPIN_LOCK MeasureReqTabLock; + PMEASURE_REQ_TAB pMeasureReqTab; +@@ -1333,10 +1333,10 @@ typedef struct _COMMON_CONFIG { + NDIS_SPIN_LOCK TpcReqTabLock; + PTPC_REQ_TAB pTpcReqTab; + +- BOOLEAN PSPXlink; // 0: Disable. 1: Enable ++ BOOLEAN PSPXlink; /* 0: Disable. 1: Enable */ + + #if defined(RT305x)||defined(RT30xx) +- // request by Gary, for High Power issue ++ /* request by Gary, for High Power issue */ + UCHAR HighPowerPatchDisabled; + #endif + +@@ -1344,33 +1344,33 @@ typedef struct _COMMON_CONFIG { + } COMMON_CONFIG, *PCOMMON_CONFIG; + + /* Modified by Wu Xi-Kun 4/21/2006 */ +-// STA configuration and status ++/* STA configuration and status */ + typedef struct _STA_ADMIN_CONFIG { +- // GROUP 1 - +- // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe +- // the user intended configuration, but not necessary fully equal to the final +- // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either +- // AP or IBSS holder). +- // Once initialized, user configuration can only be changed via OID_xxx +- UCHAR BssType; // BSS_INFRA or BSS_ADHOC +- USHORT AtimWin; // used when starting a new IBSS +- +- // GROUP 2 - +- // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe +- // the user intended configuration, and should be always applied to the final +- // settings in ACTIVE BSS without compromising with the BSS holder. +- // Once initialized, user configuration can only be changed via OID_xxx ++ /* GROUP 1 - */ ++ /* User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe */ ++ /* the user intended configuration, but not necessary fully equal to the final */ ++ /* settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either */ ++ /* AP or IBSS holder). */ ++ /* Once initialized, user configuration can only be changed via OID_xxx */ ++ UCHAR BssType; /* BSS_INFRA or BSS_ADHOC */ ++ USHORT AtimWin; /* used when starting a new IBSS */ ++ ++ /* GROUP 2 - */ ++ /* User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe */ ++ /* the user intended configuration, and should be always applied to the final */ ++ /* settings in ACTIVE BSS without compromising with the BSS holder. */ ++ /* Once initialized, user configuration can only be changed via OID_xxx */ + UCHAR RssiTrigger; +- UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD +- USHORT DefaultListenCount; // default listen count; +- ULONG WindowsPowerMode; // Power mode for AC power +- ULONG WindowsBatteryPowerMode; // Power mode for battery if exists +- BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on +- BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID +- ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP +- +- // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1) +- USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE) ++ UCHAR RssiTriggerMode; /* RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD */ ++ USHORT DefaultListenCount; /* default listen count; */ ++ ULONG WindowsPowerMode; /* Power mode for AC power */ ++ ULONG WindowsBatteryPowerMode; /* Power mode for battery if exists */ ++ BOOLEAN bWindowsACCAMEnable; /* Enable CAM power mode when AC on */ ++ BOOLEAN bAutoReconnect; /* Set to TRUE when setting OID_802_11_SSID with no matching BSSID */ ++ ULONG WindowsPowerProfile; /* Windows power profile, for NDIS5.1 PnP */ ++ ++ /* MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1) */ ++ USHORT Psm; /* power management mode (PWR_ACTIVE|PWR_SAVE) */ + USHORT DisassocReason; + UCHAR DisassocSta[MAC_ADDR_LEN]; + USHORT DeauthReason; +@@ -1378,109 +1378,109 @@ typedef struct _STA_ADMIN_CONFIG { + USHORT AuthFailReason; + UCHAR AuthFailSta[MAC_ADDR_LEN]; + +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined ++ NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ ++ NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ + NDIS_802_11_WEP_STATUS WepStatus; +- NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID ++ NDIS_802_11_WEP_STATUS OrigWepStatus; /* Original wep status set from OID */ + +- // Add to support different cipher suite for WPA2/WPA mode +- NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite +- NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite +- BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites ++ /* Add to support different cipher suite for WPA2/WPA mode */ ++ NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Multicast cipher suite */ ++ NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher suite */ ++ BOOLEAN bMixCipher; /* Indicate current Pair & Group use different cipher suites */ + USHORT RsnCapability; + + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + +- UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase +- UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase +- UCHAR PMK[32]; // WPA PSK mode PMK +- UCHAR PTK[64]; // WPA PSK mode PTK +- UCHAR GTK[32]; // GTK from authenticator ++ UCHAR WpaPassPhrase[64]; /* WPA PSK pass phrase */ ++ UINT WpaPassPhraseLen; /* the length of WPA PSK pass phrase */ ++ UCHAR PMK[32]; /* WPA PSK mode PMK */ ++ UCHAR PTK[64]; /* WPA PSK mode PTK */ ++ UCHAR GTK[32]; /* GTK from authenticator */ + BSSID_INFO SavedPMK[PMKID_NO]; +- UINT SavedPMKNum; // Saved PMKID number ++ UINT SavedPMKNum; /* Saved PMKID number */ + + UCHAR DefaultKeyId; + +- // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED ++ /* WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED */ + UCHAR PortSecured; + +- // For WPA countermeasures +- ULONG LastMicErrorTime; // record last MIC error time +- ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation). +- BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred. +- // For WPA-PSK supplicant state +- WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x ++ /* For WPA countermeasures */ ++ ULONG LastMicErrorTime; /* record last MIC error time */ ++ ULONG MicErrCnt; /* Should be 0, 1, 2, then reset to zero (after disassoiciation). */ ++ BOOLEAN bBlockAssoc; /* Block associate attempt for 60 seconds after counter measure occurred. */ ++ /* For WPA-PSK supplicant state */ ++ WPA_STATE WpaState; /* Default is SS_NOTUSE and handled by microsoft 802.1x */ + UCHAR ReplayCounter[8]; +- UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator +- UCHAR SNonce[32]; // SNonce for WPA-PSK ++ UCHAR ANonce[32]; /* ANonce for WPA-PSK from aurhenticator */ ++ UCHAR SNonce[32]; /* SNonce for WPA-PSK */ + +- UCHAR LastSNR0; // last received BEACON's SNR +- UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna ++ UCHAR LastSNR0; /* last received BEACON's SNR */ ++ UCHAR LastSNR1; /* last received BEACON's SNR for 2nd antenna */ + RSSI_SAMPLE RssiSample; + ULONG NumOfAvgRssiSample; + +- ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time +- ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time +- ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time +- ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time +- +- ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST +- ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request +- BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On +- BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On +- BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state +- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled +- BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation +- +- // New for WPA, windows want us to keep association information and +- // Fixed IEs from last association response ++ ULONG LastBeaconRxTime; /* OS's timestamp of the last BEACON RX time */ ++ ULONG Last11bBeaconRxTime; /* OS's timestamp of the last 11B BEACON RX time */ ++ ULONG Last11gBeaconRxTime; /* OS's timestamp of the last 11G BEACON RX time */ ++ ULONG Last20NBeaconRxTime; /* OS's timestamp of the last 20MHz N BEACON RX time */ ++ ++ ULONG LastScanTime; /* Record last scan time for issue BSSID_SCAN_LIST */ ++ ULONG ScanCnt; /* Scan counts since most recent SSID, BSSID, SCAN OID request */ ++ BOOLEAN bSwRadio; /* Software controlled Radio On/Off, TRUE: On */ ++ BOOLEAN bHwRadio; /* Hardware controlled Radio On/Off, TRUE: On */ ++ BOOLEAN bRadio; /* Radio state, And of Sw & Hw radio state */ ++ BOOLEAN bHardwareRadio; /* Hardware controlled Radio enabled */ ++ BOOLEAN bShowHiddenSSID; /* Show all known SSID in SSID list get operation */ ++ ++ /* New for WPA, windows want us to keep association information and */ ++ /* Fixed IEs from last association response */ + NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; +- USHORT ReqVarIELen; // Length of next VIE include EID & Length +- UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format. +- USHORT ResVarIELen; // Length of next VIE include EID & Length ++ USHORT ReqVarIELen; /* Length of next VIE include EID & Length */ ++ UCHAR ReqVarIEs[MAX_VIE_LEN]; /* The content saved here should be little-endian format. */ ++ USHORT ResVarIELen; /* Length of next VIE include EID & Length */ + UCHAR ResVarIEs[MAX_VIE_LEN]; + + UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. +- +- ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time +- USHORT RPIDensity[8]; // Array for RPI density collection +- +- UCHAR RMReqCnt; // Number of measurement request saved. +- UCHAR CurrentRMReqIdx; // Number of measurement request saved. +- BOOLEAN ParallelReq; // Parallel measurement, only one request performed, +- // It must be the same channel with maximum duration +- USHORT ParallelDuration; // Maximum duration for parallel measurement +- UCHAR ParallelChannel; // Only one channel with parallel measurement +- USHORT IAPPToken; // IAPP dialog token +- // Hack for channel load and noise histogram parameters +- UCHAR NHFactor; // Parameter for Noise histogram +- UCHAR CLFactor; // Parameter for channel load ++ UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; /* The content saved here should be little-endian format. */ ++ ++ ULONG CLBusyBytes; /* Save the total bytes received durning channel load scan time */ ++ USHORT RPIDensity[8]; /* Array for RPI density collection */ ++ ++ UCHAR RMReqCnt; /* Number of measurement request saved. */ ++ UCHAR CurrentRMReqIdx; /* Number of measurement request saved. */ ++ BOOLEAN ParallelReq; /* Parallel measurement, only one request performed, */ ++ /* It must be the same channel with maximum duration */ ++ USHORT ParallelDuration; /* Maximum duration for parallel measurement */ ++ UCHAR ParallelChannel; /* Only one channel with parallel measurement */ ++ USHORT IAPPToken; /* IAPP dialog token */ ++ /* Hack for channel load and noise histogram parameters */ ++ UCHAR NHFactor; /* Parameter for Noise histogram */ ++ UCHAR CLFactor; /* Parameter for channel load */ + + RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; + BOOLEAN StaQuickResponeForRateUpTimerRunning; + +- UCHAR DtimCount; // 0.. DtimPeriod-1 +- UCHAR DtimPeriod; // default = 3 ++ UCHAR DtimCount; /* 0.. DtimPeriod-1 */ ++ UCHAR DtimPeriod; /* default = 3 */ + +- //////////////////////////////////////////////////////////////////////////////////////// +- // This is only for WHQL test. ++ /*////////////////////////////////////////////////////////////////////////////////////// */ ++ /* This is only for WHQL test. */ + BOOLEAN WhqlTest; +- //////////////////////////////////////////////////////////////////////////////////////// ++ /*////////////////////////////////////////////////////////////////////////////////////// */ + + RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; +- // Fast Roaming +- BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI +- CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. ++ /* Fast Roaming */ ++ BOOLEAN bAutoRoaming; /* 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI */ ++ CHAR dBmToRoam; /* the condition to roam when receiving Rssi less than this value. It's negative value. */ + + BOOLEAN IEEE8021X; + BOOLEAN IEEE8021x_required_keys; +- CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys ++ CIPHER_KEY DesireSharedKey[4]; /* Record user desired WEP keys */ + UCHAR DesireSharedKeyId; + +- // 0: driver ignores wpa_supplicant +- // 1: wpa_supplicant initiates scanning and AP selection +- // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters ++ /* 0: driver ignores wpa_supplicant */ ++ /* 1: wpa_supplicant initiates scanning and AP selection */ ++ /* 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters */ + UCHAR WpaSupplicantUP; + UCHAR WpaSupplicantScanCount; + BOOLEAN bRSN_IE_FromWpaSupplicant; +@@ -1491,63 +1491,63 @@ typedef struct _STA_ADMIN_CONFIG { + BOOLEAN bTGnWifiTest; + BOOLEAN bScanReqIsFromWebUI; + +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; // For transmit phy setting in TXWI. ++ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ + DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; + RT_HT_PHY_INFO DesiredHtPhyInfo; + BOOLEAN bAutoTxRateSwitch; + + #ifdef RTMP_MAC_PCI + UCHAR BBPR3; +- // PS Control has 2 meanings for advanced power save function. +- // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. +- // 2. EnableNewPS : will save more current in sleep or radio off mode. ++ /* PS Control has 2 meanings for advanced power save function. */ ++ /* 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. */ ++ /* 2. EnableNewPS : will save more current in sleep or radio off mode. */ + PS_CONTROL PSControl; +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + BOOLEAN bAutoConnectByBssid; +- ULONG BeaconLostTime; // seconds +- BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable ++ ULONG BeaconLostTime; /* seconds */ ++ BOOLEAN bForceTxBurst; /* 1: force enble TX PACKET BURST, 0: disable */ + } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; + +-// This data structure keep the current active BSS/IBSS's configuration that this STA +-// had agreed upon joining the network. Which means these parameters are usually decided +-// by the BSS/IBSS creator instead of user configuration. Data in this data structurre +-// is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE. +-// Normally, after SCAN or failed roaming attempts, we need to recover back to +-// the current active settings. ++/* This data structure keep the current active BSS/IBSS's configuration that this STA */ ++/* had agreed upon joining the network. Which means these parameters are usually decided */ ++/* by the BSS/IBSS creator instead of user configuration. Data in this data structurre */ ++/* is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE. */ ++/* Normally, after SCAN or failed roaming attempts, we need to recover back to */ ++/* the current active settings. */ + typedef struct _STA_ACTIVE_CONFIG { + USHORT Aid; +- USHORT AtimWin; // in kusec; IBSS parameter set element ++ USHORT AtimWin; /* in kusec; IBSS parameter set element */ + USHORT CapabilityInfo; + USHORT CfpMaxDuration; + USHORT CfpPeriod; + +- // Copy supported rate from desired AP's beacon. We are trying to match +- // AP's supported and extended rate settings. ++ /* Copy supported rate from desired AP's beacon. We are trying to match */ ++ /* AP's supported and extended rate settings. */ + UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; + UCHAR SupRateLen; + UCHAR ExtRateLen; +- // Copy supported ht from desired AP's beacon. We are trying to match ++ /* Copy supported ht from desired AP's beacon. We are trying to match */ + RT_HT_PHY_INFO SupportedPhyInfo; + RT_HT_CAPABILITY SupportedHtPhy; + } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; + + typedef struct _MAC_TABLE_ENTRY { +- //Choose 1 from ValidAsWDS and ValidAsCLI to validize. +- BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too. +- BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode. +- BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions. ++ /*Choose 1 from ValidAsWDS and ValidAsCLI to validize. */ ++ BOOLEAN ValidAsCLI; /* Sta mode, set this TRUE after Linkup,too. */ ++ BOOLEAN ValidAsWDS; /* This is WDS Entry. only for AP mode. */ ++ BOOLEAN ValidAsApCli; /*This is a AP-Client entry, only for AP mode which enable AP-Client functions. */ + BOOLEAN ValidAsMesh; +- BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode. ++ BOOLEAN ValidAsDls; /* This is DLS Entry. only for STA mode. */ + BOOLEAN isCached; +- BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. ++ BOOLEAN bIAmBadAtheros; /* Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. */ + +- UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM +- //jan for wpa +- // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB ++ UCHAR EnqueueEapolStartTimerRunning; /* Enqueue EAPoL-Start for triggering EAP SM */ ++ /*jan for wpa */ ++ /* record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB */ + UCHAR CMTimerRunning; +- UCHAR apidx; // MBSS number ++ UCHAR apidx; /* MBSS number */ + UCHAR RSNIE_Len; + UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; + UCHAR ANonce[LEN_KEY_DESC_NONCE]; +@@ -1556,14 +1556,14 @@ typedef struct _MAC_TABLE_ENTRY { + UCHAR PTK[64]; + UCHAR ReTryCounter; + RALINK_TIMER_STRUCT RetryTimer; +- RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM +- NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined ++ RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; /* A timer which enqueue EAPoL-Start for triggering PSK SM */ ++ NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ + NDIS_802_11_WEP_STATUS WepStatus; + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + AP_WPA_STATE WpaState; + GTK_STATE GTKState; + USHORT PortSecured; +- NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X ++ NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ + CIPHER_KEY PairwiseKey; + PVOID pAd; + INT PMKID_CacheIdx; +@@ -1572,75 +1572,75 @@ typedef struct _MAC_TABLE_ENTRY { + UCHAR Addr[MAC_ADDR_LEN]; + UCHAR PsMode; + SST Sst; +- AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only +- BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure ++ AUTH_STATE AuthState; /* for SHARED KEY authentication state machine used only */ ++ BOOLEAN IsReassocSta; /* Indicate whether this is a reassociation procedure */ + USHORT Aid; + USHORT CapabilityInfo; + UCHAR LastRssi; + ULONG NoDataIdleCount; +- UINT16 StationKeepAliveCount; // unit: second ++ UINT16 StationKeepAliveCount; /* unit: second */ + ULONG PsQIdleCount; + QUEUE_HEADER PsQueue; + +- UINT32 StaConnectTime; // the live time of this station since associated with AP ++ UINT32 StaConnectTime; /* the live time of this station since associated with AP */ + + BOOLEAN bSendBAR; + USHORT NoBADataCountDown; + +- UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment +- UINT TxBFCount; // 3*3 ++ UINT32 CachedBuf[16]; /* UINT (4 bytes) for alignment */ ++ UINT TxBFCount; /* 3*3 */ + UINT FIFOCount; + UINT DebugFIFOCount; + UINT DebugTxCount; + BOOLEAN bDlsInit; + +-//==================================================== +-//WDS entry needs these +-// if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab ++/*==================================================== */ ++/*WDS entry needs these */ ++/* if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab */ + UINT MatchWDSTabIdx; + UCHAR MaxSupportedRate; + UCHAR CurrTxRate; + UCHAR CurrTxRateIndex; +- // to record the each TX rate's quality. 0 is best, the bigger the worse. ++ /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ + USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +-// USHORT OneSecTxOkCount; ++/* USHORT OneSecTxOkCount; */ + UINT32 OneSecTxNoRetryOkCount; + UINT32 OneSecTxRetryOkCount; + UINT32 OneSecTxFailCount; + UINT32 ContinueTxFailCnt; +- UINT32 CurrTxRateStableTime; // # of second in current TX rate +- UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition +-//==================================================== ++ UINT32 CurrTxRateStableTime; /* # of second in current TX rate */ ++ UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ ++/*==================================================== */ + + BOOLEAN fNoisyEnvironment; + BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down +- CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction ++ UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ ++ CHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ + ULONG LastTxOkCount; + UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; + +- // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular +- // BOOLEAN control, either ON or OFF. These flags should always be accessed via +- // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. +- // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED ++ /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ ++ /* BOOLEAN control, either ON or OFF. These flags should always be accessed via */ ++ /* CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. */ ++ /* see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED */ + ULONG ClientStatusFlags; + +- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; // For transmit phy setting in TXWI. ++ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ + +- // HT EWC MIMO-N used parameters +- USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format +- USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI ++ /* HT EWC MIMO-N used parameters */ ++ USHORT RXBAbitmap; /* fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format */ ++ USHORT TXBAbitmap; /* This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI */ + USHORT TXAutoBAbitmap; + USHORT BADeclineBitmap; +- USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked +- USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked +- USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked ++ USHORT BARecWcidArray[NUM_OF_TID]; /* The mapping wcid of recipient session. if RXBAbitmap bit is masked */ ++ USHORT BAOriWcidArray[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ ++ USHORT BAOriSequence[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ + +- // 802.11n features. ++ /* 802.11n features. */ + UCHAR MpduDensity; + UCHAR MaxRAmpduFactor; + UCHAR AMsduSize; +- UCHAR MmpsMode; // MIMO power save more. ++ UCHAR MmpsMode; /* MIMO power save more. */ + + HT_CAPABILITY_IE HTCapability; + +@@ -1670,16 +1670,16 @@ typedef struct _MAC_TABLE { + QUEUE_HEADER McastPsQueue; + ULONG PsQIdleCount; + BOOLEAN fAnyStationInPsm; +- BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. +- BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP +- BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset +- BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ +- BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. +- BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. +- BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic +- BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS +-//2008/10/28: KH add to support Antenna power-saving of AP<-- +-//2008/10/28: KH add to support Antenna power-saving of AP--> ++ BOOLEAN fAnyStationBadAtheros; /* Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. */ ++ BOOLEAN fAnyTxOPForceDisable; /* Check if it is necessary to disable BE TxOP */ ++ BOOLEAN fAllStationAsRalink; /* Check if all stations are ralink-chipset */ ++ BOOLEAN fAnyStationIsLegacy; /* Check if I use legacy rate to transmit to my BSS Station/ */ ++ BOOLEAN fAnyStationNonGF; /* Check if any Station can't support GF. */ ++ BOOLEAN fAnyStation20Only; /* Check if any Station can't support GF. */ ++ BOOLEAN fAnyStationMIMOPSDynamic; /* Check if any Station is MIMO Dynamic */ ++ BOOLEAN fAnyBASession; /* Check if there is BA session. Force turn on RTS/CTS */ ++/*2008/10/28: KH add to support Antenna power-saving of AP<-- */ ++/*2008/10/28: KH add to support Antenna power-saving of AP--> */ + } MAC_TABLE, *PMAC_TABLE; + + struct wificonf { +@@ -1711,11 +1711,11 @@ struct _RTMP_CHIP_OP_ { + void (*AsicHaltAction) (RTMP_ADAPTER * pAd); + }; + +-// +-// The miniport adapter structure +-// ++/* */ ++/* The miniport adapter structure */ ++/* */ + struct _RTMP_ADAPTER { +- PVOID OS_Cookie; // save specific structure relative to OS ++ PVOID OS_Cookie; /* save specific structure relative to OS */ + PNET_DEV net_dev; + ULONG VirtualIfCnt; + +@@ -1726,7 +1726,7 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + /* PCI related parameters */ + /*****************************************************************************************/ +- PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ PUCHAR CSRBaseAddress; /* PCI MMIO Base Address, all access will use */ + unsigned int irq_num; + + USHORT LnkCtrlBitMask; +@@ -1735,26 +1735,26 @@ struct _RTMP_ADAPTER { + USHORT HostLnkCtrlConfiguration; + USHORT HostLnkCtrlOffset; + USHORT PCIePowerSaveLevel; +- ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip +- ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip +- USHORT DeviceID; // Read from PCI config ++ ULONG Rt3xxHostLinkCtrl; /* USed for 3090F chip */ ++ ULONG Rt3xxRalinkLinkCtrl; /* USed for 3090F chip */ ++ USHORT DeviceID; /* Read from PCI config */ + ULONG AccessBBPFailCount; +- BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. +- BOOLEAN bPCIclkOffDisableTx; // ++ BOOLEAN bPCIclkOff; /* flag that indicate if the PICE power status in Configuration SPace.. */ ++ BOOLEAN bPCIclkOffDisableTx; /* */ + +- BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set . +- BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280. +- ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. ++ BOOLEAN brt30xxBanMcuCmd; /*when = 0xff means all commands are ok to set . */ ++ BOOLEAN b3090ESpecialChip; /*3090E special chip that write EEPROM 0x24=0x9280. */ ++ ULONG CheckDmaBusyCount; /* Check Interrupt Status Register Count. */ + + UINT int_enable_reg; + UINT int_disable_mask; + UINT int_pending; + +- RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD +- RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors +- RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors +- RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA +-#endif // RTMP_MAC_PCI // ++ RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; /* Shared memory of all 1st pre-allocated TxBuf associated with each TXD */ ++ RTMP_DMABUF RxDescRing; /* Shared memory for RX descriptors */ ++ RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; /* Shared memory for Tx descriptors */ ++ RTMP_TX_RING TxRing[NUM_OF_TX_RING]; /* AC0~4 + HCCA */ ++#endif /* RTMP_MAC_PCI // */ + + NDIS_SPIN_LOCK irq_lock; + UCHAR irq_disabled; +@@ -1764,28 +1764,28 @@ struct _RTMP_ADAPTER { + /* USB related parameters */ + /*****************************************************************************************/ + struct usb_config_descriptor *config; +- UINT BulkInEpAddr; // bulk-in endpoint address +- UINT BulkOutEpAddr[6]; // bulk-out endpoint address ++ UINT BulkInEpAddr; /* bulk-in endpoint address */ ++ UINT BulkOutEpAddr[6]; /* bulk-out endpoint address */ + + UINT NumberOfPipes; + USHORT BulkOutMaxPacketSize; + USHORT BulkInMaxPacketSize; + +- //======Control Flags ++ /*======Control Flags */ + LONG PendingIoCount; + ULONG BulkFlags; +- BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority ++ BOOLEAN bUsbTxBulkAggre; /* Flags for bulk out data priority */ + +- //======Cmd Thread ++ /*======Cmd Thread */ + CmdQ CmdQ; +- NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock ++ NDIS_SPIN_LOCK CmdQLock; /* CmdQLock spinlock */ + RTMP_OS_TASK cmdQTask; + +- //======Semaphores (event) ++ /*======Semaphores (event) */ + RTMP_OS_SEM UsbVendorReq_semaphore; + PVOID UsbVendorReqBuf; + wait_queue_head_t *wait; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + /*****************************************************************************************/ + /* RBUS related parameters */ +@@ -1794,7 +1794,7 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + /* Both PCI/USB related parameters */ + /*****************************************************************************************/ +- //RTMP_DEV_INFO chipInfo; ++ /*RTMP_DEV_INFO chipInfo; */ + RTMP_INF_TYPE infType; + + /*****************************************************************************************/ +@@ -1802,42 +1802,42 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + RTMP_OS_TASK mlmeTask; + #ifdef RTMP_TIMER_TASK_SUPPORT +- // If you want use timer task to handle the timer related jobs, enable this. ++ /* If you want use timer task to handle the timer related jobs, enable this. */ + RTMP_TIMER_TASK_QUEUE TimerQ; + NDIS_SPIN_LOCK TimerQLock; + RTMP_OS_TASK timerTask; +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + + /*****************************************************************************************/ + /* Tx related parameters */ + /*****************************************************************************************/ +- BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once ++ BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; /* for ensuring RTUSBDeQueuePacket get call once */ + NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; + + #ifdef RTMP_MAC_USB +- // Data related context and AC specified, 4 AC supported +- NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs +- NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock ++ /* Data related context and AC specified, 4 AC supported */ ++ NDIS_SPIN_LOCK BulkOutLock[6]; /* BulkOut spinlock for 4 ACs */ ++ NDIS_SPIN_LOCK MLMEBulkOutLock; /* MLME BulkOut lock */ + + HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; +- NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock ++ NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ + +- // 4 sets of Bulk Out index and pending flag +- UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe ++ /* 4 sets of Bulk Out index and pending flag */ ++ UCHAR NextBulkOutIndex[4]; /* only used for 4 EDCA bulkout pipe */ + +- BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe ++ BOOLEAN BulkOutPending[6]; /* used for total 6 bulkout pipe */ + UCHAR bulkResetPipeid; + BOOLEAN MgmtBulkPending; + ULONG bulkResetReq[6]; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +- // resource for software backlog queues +- QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA +- NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock ++ /* resource for software backlog queues */ ++ QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; /* 4 AC + 1 HCCA */ ++ NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; /* TxSwQueue spinlock */ + +- RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors ++ RTMP_DMABUF MgmtDescRing; /* Shared memory for MGMT descriptors */ + RTMP_MGMT_RING MgmtRing; +- NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock ++ NDIS_SPIN_LOCK MgmtRingLock; /* Prio Ring spinlock */ + + /*****************************************************************************************/ + /* Rx related parameters */ +@@ -1845,65 +1845,65 @@ struct _RTMP_ADAPTER { + + #ifdef RTMP_MAC_PCI + RTMP_RX_RING RxRing; +- NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock ++ NDIS_SPIN_LOCK RxRingLock; /* Rx Ring spinlock */ + #ifdef RT3090 +- NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock +-#endif // RT3090 // +-#endif // RTMP_MAC_PCI // ++ NDIS_SPIN_LOCK McuCmdLock; /*MCU Command Queue spinlock */ ++#endif /* RT3090 // */ ++#endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. +- NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs +- UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE. +- UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller. +- UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it. +- ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. +- ULONG TransferBufferLength; // current length of the packet buffer +- ULONG ReadPosition; // current read position in a packet buffer +-#endif // RTMP_MAC_USB // ++ RX_CONTEXT RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ ++ NDIS_SPIN_LOCK BulkInLock; /* BulkIn spinlock for 4 ACs */ ++ UCHAR PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ ++ UCHAR NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ ++ UCHAR NextRxBulkInReadIndex; /* Indicate the current RxContext Index which driver can read & process it. */ ++ ULONG NextRxBulkInPosition; /* Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. */ ++ ULONG TransferBufferLength; /* current length of the packet buffer */ ++ ULONG ReadPosition; /* current read position in a packet buffer */ ++#endif /* RTMP_MAC_USB // */ + + /*****************************************************************************************/ + /* ASIC related parameters */ + /*****************************************************************************************/ +- UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. ++ UINT32 MACVersion; /* MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. */ + +- // --------------------------- +- // E2PROM +- // --------------------------- +- ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused +- ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. ++ /* --------------------------- */ ++ /* E2PROM */ ++ /* --------------------------- */ ++ ULONG EepromVersion; /* byte 0: version, byte 1: revision, byte 2~3: unused */ ++ ULONG FirmwareVersion; /* byte 0: Minor version, byte 1: Major version, otherwise unused. */ + USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; +- UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 ++ UCHAR EEPROMAddressNum; /* 93c46=6 93c66=8 */ + BOOLEAN EepromAccess; + UCHAR EFuseTag; + +- // --------------------------- +- // BBP Control +- // --------------------------- +- UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID +- CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power ++ /* --------------------------- */ ++ /* BBP Control */ ++ /* --------------------------- */ ++ UCHAR BbpWriteLatch[140]; /* record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID */ ++ CHAR BbpRssiToDbmDelta; /* change from UCHAR to CHAR for high power */ + BBP_R66_TUNING BbpTuning; + +- // ---------------------------- +- // RFIC control +- // ---------------------------- +- UCHAR RfIcType; // RFIC_xxx +- ULONG RfFreqOffset; // Frequency offset for channel switching +- RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ ++ /* ---------------------------- */ ++ /* RFIC control */ ++ /* ---------------------------- */ ++ UCHAR RfIcType; /* RFIC_xxx */ ++ ULONG RfFreqOffset; /* Frequency offset for channel switching */ ++ RTMP_RF_REGS LatchRfRegs; /* latch th latest RF programming value since RF IC doesn't support READ */ + +- EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference. ++ EEPROM_ANTENNA_STRUC Antenna; /* Since ANtenna definition is different for a & g. We need to save it for future reference. */ + EEPROM_NIC_CONFIG2_STRUC NicConfig2; + +- // This soft Rx Antenna Diversity mechanism is used only when user set +- // RX Antenna = DIVERSITY ON ++ /* This soft Rx Antenna Diversity mechanism is used only when user set */ ++ /* RX Antenna = DIVERSITY ON */ + SOFT_RX_ANT_DIVERSITY RxAnt; + + UCHAR RFProgSeq; +- CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels. +- CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey +- CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw +- CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey ++ CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; /* Store Tx power value for all channels. */ ++ CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; /* list all supported channels for site survey */ ++ CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; /* 802.11j channel and bw */ ++ CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; /* list all supported channels for site survey */ + +- UCHAR ChannelListNum; // number of channel in ChannelList[] ++ UCHAR ChannelListNum; /* number of channel in ChannelList[] */ + UCHAR Bbp94; + BOOLEAN BbpForCCK; + ULONG Tx20MPwrCfgABand[5]; +@@ -1911,47 +1911,47 @@ struct _RTMP_ADAPTER { + ULONG Tx40MPwrCfgABand[5]; + ULONG Tx40MPwrCfgGBand[5]; + +- BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control +- UCHAR TssiRefA; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1)) +- +- BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control +- UCHAR TssiRefG; // Store Tssi reference value as 25 temperature. +- UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate. +- UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate. +- UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value +- CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) +- +- CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h +- CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value +- CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value +- +- CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah +- CHAR ARssiOffset1; // Store A RSSI#1 Offset value +- CHAR ARssiOffset2; // Store A RSSI#2 Offset value +- +- CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h +- CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 +- CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 +- CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 ++ BOOLEAN bAutoTxAgcA; /* Enable driver auto Tx Agc control */ ++ UCHAR TssiRefA; /* Store Tssi reference value as 25 temperature. */ ++ UCHAR TssiPlusBoundaryA[5]; /* Tssi boundary for increase Tx power to compensate. */ ++ UCHAR TssiMinusBoundaryA[5]; /* Tssi boundary for decrease Tx power to compensate. */ ++ UCHAR TxAgcStepA; /* Store Tx TSSI delta increment / decrement value */ ++ CHAR TxAgcCompensateA; /* Store the compensation (TxAgcStep * (idx-1)) */ ++ ++ BOOLEAN bAutoTxAgcG; /* Enable driver auto Tx Agc control */ ++ UCHAR TssiRefG; /* Store Tssi reference value as 25 temperature. */ ++ UCHAR TssiPlusBoundaryG[5]; /* Tssi boundary for increase Tx power to compensate. */ ++ UCHAR TssiMinusBoundaryG[5]; /* Tssi boundary for decrease Tx power to compensate. */ ++ UCHAR TxAgcStepG; /* Store Tx TSSI delta increment / decrement value */ ++ CHAR TxAgcCompensateG; /* Store the compensation (TxAgcStep * (idx-1)) */ ++ ++ CHAR BGRssiOffset0; /* Store B/G RSSI#0 Offset value on EEPROM 0x46h */ ++ CHAR BGRssiOffset1; /* Store B/G RSSI#1 Offset value */ ++ CHAR BGRssiOffset2; /* Store B/G RSSI#2 Offset value */ ++ ++ CHAR ARssiOffset0; /* Store A RSSI#0 Offset value on EEPROM 0x4Ah */ ++ CHAR ARssiOffset1; /* Store A RSSI#1 Offset value */ ++ CHAR ARssiOffset2; /* Store A RSSI#2 Offset value */ ++ ++ CHAR BLNAGain; /* Store B/G external LNA#0 value on EEPROM 0x44h */ ++ CHAR ALNAGain0; /* Store A external LNA#0 value for ch36~64 */ ++ CHAR ALNAGain1; /* Store A external LNA#1 value for ch100~128 */ ++ CHAR ALNAGain2; /* Store A external LNA#2 value for ch132~165 */ + #ifdef RT30xx +- // for 3572 ++ /* for 3572 */ + UCHAR Bbp25; + UCHAR Bbp26; + +- UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G ++ UCHAR TxMixerGain24G; /* Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G */ + UCHAR TxMixerGain5G; +-#endif // RT30xx // +- // ---------------------------- +- // LED control +- // ---------------------------- ++#endif /* RT30xx // */ ++ /* ---------------------------- */ ++ /* LED control */ ++ /* ---------------------------- */ + MCU_LEDCS_STRUC LedCntl; +- USHORT Led1; // read from EEPROM 0x3c +- USHORT Led2; // EEPROM 0x3e +- USHORT Led3; // EEPROM 0x40 ++ USHORT Led1; /* read from EEPROM 0x3c */ ++ USHORT Led2; /* EEPROM 0x3e */ ++ USHORT Led3; /* EEPROM 0x40 */ + UCHAR LedIndicatorStrength; + UCHAR RssiSingalstrengthOffet; + BOOLEAN bLedOnScanning; +@@ -1960,12 +1960,12 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + /* 802.11 related parameters */ + /*****************************************************************************************/ +- // outgoing BEACON frame buffer and corresponding TXD ++ /* outgoing BEACON frame buffer and corresponding TXD */ + TXWI_STRUC BeaconTxWI; + PUCHAR BeaconBuf; + USHORT BeaconOffset[HW_BEACON_MAX_COUNT]; + +- // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. ++ /* pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. */ + PSPOLL_FRAME PsPollFrame; + HEADER_802_11 NullFrame; + +@@ -1974,45 +1974,45 @@ struct _RTMP_ADAPTER { + TX_CONTEXT NullContext; + TX_CONTEXT PsPollContext; + TX_CONTEXT RTSContext; +-#endif // RTMP_MAC_USB // +- +-//=========AP=========== +- +-//=======STA=========== +- // ----------------------------------------------- +- // STA specific configuration & operation status +- // used only when pAd->OpMode == OPMODE_STA +- // ----------------------------------------------- +- STA_ADMIN_CONFIG StaCfg; // user desired settings +- STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) +- CHAR nickname[IW_ESSID_MAX_SIZE + 1]; // nickname, only used in the iwconfig i/f ++#endif /* RTMP_MAC_USB // */ ++ ++/*=========AP=========== */ ++ ++/*=======STA=========== */ ++ /* ----------------------------------------------- */ ++ /* STA specific configuration & operation status */ ++ /* used only when pAd->OpMode == OPMODE_STA */ ++ /* ----------------------------------------------- */ ++ STA_ADMIN_CONFIG StaCfg; /* user desired settings */ ++ STA_ACTIVE_CONFIG StaActive; /* valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) */ ++ CHAR nickname[IW_ESSID_MAX_SIZE + 1]; /* nickname, only used in the iwconfig i/f */ + NDIS_MEDIA_STATE PreMediaState; + +-//=======Common=========== +- // OP mode: either AP or STA +- UCHAR OpMode; // OPMODE_STA, OPMODE_AP ++/*=======Common=========== */ ++ /* OP mode: either AP or STA */ ++ UCHAR OpMode; /* OPMODE_STA, OPMODE_AP */ + +- NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected ++ NDIS_MEDIA_STATE IndicateMediaState; /* Base on Indication state, default is NdisMediaStateDisConnected */ + + /* MAT related parameters */ + +- // configuration: read from Registry & E2PROM +- BOOLEAN bLocalAdminMAC; // Use user changed MAC +- UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address +- UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address ++ /* configuration: read from Registry & E2PROM */ ++ BOOLEAN bLocalAdminMAC; /* Use user changed MAC */ ++ UCHAR PermanentAddress[MAC_ADDR_LEN]; /* Factory default MAC address */ ++ UCHAR CurrentAddress[MAC_ADDR_LEN]; /* User changed MAC address */ + +- // ------------------------------------------------------ +- // common configuration to both OPMODE_STA and OPMODE_AP +- // ------------------------------------------------------ ++ /* ------------------------------------------------------ */ ++ /* common configuration to both OPMODE_STA and OPMODE_AP */ ++ /* ------------------------------------------------------ */ + COMMON_CONFIG CommonCfg; + MLME_STRUCT Mlme; + +- // AP needs those vaiables for site survey feature. +- MLME_AUX MlmeAux; // temporary settings used during MLME state machine +- BSS_TABLE ScanTab; // store the latest SCAN result ++ /* AP needs those vaiables for site survey feature. */ ++ MLME_AUX MlmeAux; /* temporary settings used during MLME state machine */ ++ BSS_TABLE ScanTab; /* store the latest SCAN result */ + +- //About MacTab, the sta driver will use #0 and #1 for multicast and AP. +- MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. ++ /*About MacTab, the sta driver will use #0 and #1 for multicast and AP. */ ++ MAC_TABLE MacTab; /* ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. */ + NDIS_SPIN_LOCK MacTabLock; + + BA_TABLE BATable; +@@ -2020,46 +2020,46 @@ struct _RTMP_ADAPTER { + NDIS_SPIN_LOCK BATabLock; + RALINK_TIMER_STRUCT RECBATimer; + +- // encryption/decryption KEY tables +- CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3] ++ /* encryption/decryption KEY tables */ ++ CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; /* STA always use SharedKey[BSS0][0..3] */ + +- // RX re-assembly buffer for fragmentation +- FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame ++ /* RX re-assembly buffer for fragmentation */ ++ FRAGMENT_FRAME FragFrame; /* Frame storage for fragment frame */ + +- // various Counters +- COUNTER_802_3 Counters8023; // 802.3 counters +- COUNTER_802_11 WlanCounters; // 802.11 MIB counters +- COUNTER_RALINK RalinkCounters; // Ralink propriety counters +- COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching +- PRIVATE_STRUC PrivateInfo; // Private information & counters ++ /* various Counters */ ++ COUNTER_802_3 Counters8023; /* 802.3 counters */ ++ COUNTER_802_11 WlanCounters; /* 802.11 MIB counters */ ++ COUNTER_RALINK RalinkCounters; /* Ralink propriety counters */ ++ COUNTER_DRS DrsCounters; /* counters for Dynamic TX Rate Switching */ ++ PRIVATE_STRUC PrivateInfo; /* Private information & counters */ + +- // flags, see fRTMP_ADAPTER_xxx flags +- ULONG Flags; // Represent current device status +- ULONG PSFlags; // Power Save operation flag. ++ /* flags, see fRTMP_ADAPTER_xxx flags */ ++ ULONG Flags; /* Represent current device status */ ++ ULONG PSFlags; /* Power Save operation flag. */ + +- // current TX sequence # ++ /* current TX sequence # */ + USHORT Sequence; + +- // Control disconnect / connect event generation +- //+++Didn't used anymore ++ /* Control disconnect / connect event generation */ ++ /*+++Didn't used anymore */ + ULONG LinkDownTime; +- //--- ++ /*--- */ + ULONG LastRxRate; + ULONG LastTxRate; +- //+++Used only for Station +- BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting +- //--- ++ /*+++Used only for Station */ ++ BOOLEAN bConfigChanged; /* Config Change flag for the same SSID setting */ ++ /*--- */ + +- ULONG ExtraInfo; // Extra information for displaying status +- ULONG SystemErrorBitmap; // b0: E2PROM version error ++ ULONG ExtraInfo; /* Extra information for displaying status */ ++ ULONG SystemErrorBitmap; /* b0: E2PROM version error */ + +- //+++Didn't used anymore +- ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D +- //--- ++ /*+++Didn't used anymore */ ++ ULONG MacIcVersion; /* MAC/BBP serial interface issue solved after ver.D */ ++ /*--- */ + +- // --------------------------- +- // System event log +- // --------------------------- ++ /* --------------------------- */ ++ /* System event log */ ++ /* --------------------------- */ + RT_802_11_EVENT_TABLE EventTab; + + BOOLEAN HTCEnable; +@@ -2070,64 +2070,64 @@ struct _RTMP_ADAPTER { + #ifdef RTMP_MAC_USB + ULONG BulkOutDataOneSecCount; + ULONG BulkInDataOneSecCount; +- ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount ++ ULONG BulkLastOneSecCount; /* BulkOutDataOneSecCount + BulkInDataOneSecCount */ + ULONG watchDogRxCnt; + ULONG watchDogRxOverFlowCnt; + ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; + INT TransferedLength[NUM_OF_TX_RING]; +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + BOOLEAN bUpdateBcnCntDone; +- ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition +- // ---------------------------- +- // DEBUG paramerts +- // ---------------------------- +- //ULONG DebugSetting[4]; ++ ULONG watchDogMacDeadlock; /* prevent MAC/BBP into deadlock condition */ ++ /* ---------------------------- */ ++ /* DEBUG paramerts */ ++ /* ---------------------------- */ ++ /*ULONG DebugSetting[4]; */ + BOOLEAN bBanAllBaSetup; + BOOLEAN bPromiscuous; + +- // ---------------------------- +- // rt2860c emulation-use Parameters +- // ---------------------------- +- //ULONG rtsaccu[30]; +- //ULONG ctsaccu[30]; +- //ULONG cfendaccu[30]; +- //ULONG bacontent[16]; +- //ULONG rxint[RX_RING_SIZE+1]; +- //UCHAR rcvba[60]; ++ /* ---------------------------- */ ++ /* rt2860c emulation-use Parameters */ ++ /* ---------------------------- */ ++ /*ULONG rtsaccu[30]; */ ++ /*ULONG ctsaccu[30]; */ ++ /*ULONG cfendaccu[30]; */ ++ /*ULONG bacontent[16]; */ ++ /*ULONG rxint[RX_RING_SIZE+1]; */ ++ /*UCHAR rcvba[60]; */ + BOOLEAN bLinkAdapt; + BOOLEAN bForcePrintTX; + BOOLEAN bForcePrintRX; +- //BOOLEAN bDisablescanning; //defined in RT2870 USB ++ /*BOOLEAN bDisablescanning; //defined in RT2870 USB */ + BOOLEAN bStaFifoTest; + BOOLEAN bProtectionTest; + BOOLEAN bBroadComHT; +- //+++Following add from RT2870 USB. ++ /*+++Following add from RT2870 USB. */ + ULONG BulkOutReq; + ULONG BulkOutComplete; + ULONG BulkOutCompleteOther; +- ULONG BulkOutCompleteCancel; // seems not use now? ++ ULONG BulkOutCompleteCancel; /* seems not use now? */ + ULONG BulkInReq; + ULONG BulkInComplete; + ULONG BulkInCompleteFail; +- //--- ++ /*--- */ + + struct wificonf WIFItestbed; + + struct reordering_mpdu_pool mpdu_blk_pool; + +- ULONG OneSecondnonBEpackets; // record non BE packets per second ++ ULONG OneSecondnonBEpackets; /* record non BE packets per second */ + + #ifdef LINUX + struct iw_statistics iw_stats; + + struct net_device_stats stats; +-#endif // LINUX // ++#endif /* LINUX // */ + + ULONG TbttTickCount; + #ifdef PCI_MSI_SUPPORT + BOOLEAN HaveMsi; +-#endif // PCI_MSI_SUPPORT // ++#endif /* PCI_MSI_SUPPORT // */ + + UCHAR is_on; + +@@ -2143,30 +2143,30 @@ struct _RTMP_ADAPTER { + #ifdef RTMP_EFUSE_SUPPORT + BOOLEAN bUseEfuse; + UCHAR EEPROMImage[1024]; +-#endif // RTMP_EFUSE_SUPPORT // +-#endif // RT30xx // ++#endif /* RTMP_EFUSE_SUPPORT // */ ++#endif /* RT30xx // */ + }; + + #define DELAYINTMASK 0x0003fffb + #define INTMASK 0x0003fffb + #define IndMask 0x0003fffc +-#define RxINT 0x00000005 // Delayed Rx or indivi rx +-#define TxDataInt 0x000000fa // Delayed Tx or indivi tx +-#define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx +-#define TxCoherent 0x00020000 // tx coherent +-#define RxCoherent 0x00010000 // rx coherent +-#define McuCommand 0x00000200 // mcu +-#define PreTBTTInt 0x00001000 // Pre-TBTT interrupt +-#define TBTTInt 0x00000800 // TBTT interrupt +-#define GPTimeOutInt 0x00008000 // GPtimeout interrupt +-#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt +-#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt ++#define RxINT 0x00000005 /* Delayed Rx or indivi rx */ ++#define TxDataInt 0x000000fa /* Delayed Tx or indivi tx */ ++#define TxMgmtInt 0x00000102 /* Delayed Tx or indivi tx */ ++#define TxCoherent 0x00020000 /* tx coherent */ ++#define RxCoherent 0x00010000 /* rx coherent */ ++#define McuCommand 0x00000200 /* mcu */ ++#define PreTBTTInt 0x00001000 /* Pre-TBTT interrupt */ ++#define TBTTInt 0x00000800 /* TBTT interrupt */ ++#define GPTimeOutInt 0x00008000 /* GPtimeout interrupt */ ++#define AutoWakeupInt 0x00004000 /* AutoWakeupInt interrupt */ ++#define FifoStaFullInt 0x00002000 /* fifo statistics full interrupt */ + + /*************************************************************************** + * Rx Path software control block related data structures + **************************************************************************/ + typedef struct _RX_BLK_ { +-// RXD_STRUC RxD; // sample ++/* RXD_STRUC RxD; // sample */ + RT28XX_RXD_STRUC RxD; + PRXWI_STRUC pRxWI; + PHEADER_802_11 pHeader; +@@ -2174,7 +2174,7 @@ typedef struct _RX_BLK_ { + UCHAR *pData; + USHORT DataSize; + USHORT Flags; +- UCHAR UserPriority; // for calculate TKIP MIC using ++ UCHAR UserPriority; /* for calculate TKIP MIC using */ + } RX_BLK; + + #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) +@@ -2210,53 +2210,53 @@ typedef struct _RX_BLK_ { + #define TX_RALINK_FRAME 0x10 + #define TX_FRAG_FRAME 0x20 + +-// Currently the sizeof(TX_BLK) is 148 bytes. ++/* Currently the sizeof(TX_BLK) is 148 bytes. */ + typedef struct _TX_BLK_ { + UCHAR QueIdx; +- UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch +- UCHAR TotalFrameNum; // Total frame number want to send-out in one batch +- USHORT TotalFragNum; // Total frame fragments required in one batch +- USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch ++ UCHAR TxFrameType; /* Indicate the Transmission type of the all frames in one batch */ ++ UCHAR TotalFrameNum; /* Total frame number want to send-out in one batch */ ++ USHORT TotalFragNum; /* Total frame fragments required in one batch */ ++ USHORT TotalFrameLen; /* Total length of all frames want to send-out in one batch */ + + QUEUE_HEADER TxPacketList; +- MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address ++ MAC_TABLE_ENTRY *pMacEntry; /* NULL: packet with 802.11 RA field is multicast/broadcast address */ + HTTRANSMIT_SETTING *pTransmit; + +- // Following structure used for the characteristics of a specific packet. ++ /* Following structure used for the characteristics of a specific packet. */ + PNDIS_PACKET pPacket; +- PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data +- PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss +- UINT SrcBufLen; // Length of packet payload which not including Layer 2 header +- PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required +- UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP +- //RT2870 2.1.0.0 uses only 80 bytes +- //RT3070 2.1.1.0 uses only 96 bytes +- //RT3090 2.1.0.0 uses only 96 bytes +- UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding +- UCHAR HdrPadLen; // recording Header Padding Length; +- UCHAR apidx; // The interface associated to this packet +- UCHAR Wcid; // The MAC entry associated to this packet +- UCHAR UserPriority; // priority class of packet +- UCHAR FrameGap; // what kind of IFS this packet use +- UCHAR MpduReqNum; // number of fragments of this frame +- UCHAR TxRate; // TODO: Obsoleted? Should change to MCS? +- UCHAR CipherAlg; // cipher alogrithm ++ PUCHAR pSrcBufHeader; /* Reference to the head of sk_buff->data */ ++ PUCHAR pSrcBufData; /* Reference to the sk_buff->data, will changed depends on hanlding progresss */ ++ UINT SrcBufLen; /* Length of packet payload which not including Layer 2 header */ ++ PUCHAR pExtraLlcSnapEncap; /* NULL means no extra LLC/SNAP is required */ ++ UCHAR HeaderBuf[128]; /* TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP */ ++ /*RT2870 2.1.0.0 uses only 80 bytes */ ++ /*RT3070 2.1.1.0 uses only 96 bytes */ ++ /*RT3090 2.1.0.0 uses only 96 bytes */ ++ UCHAR MpduHeaderLen; /* 802.11 header length NOT including the padding */ ++ UCHAR HdrPadLen; /* recording Header Padding Length; */ ++ UCHAR apidx; /* The interface associated to this packet */ ++ UCHAR Wcid; /* The MAC entry associated to this packet */ ++ UCHAR UserPriority; /* priority class of packet */ ++ UCHAR FrameGap; /* what kind of IFS this packet use */ ++ UCHAR MpduReqNum; /* number of fragments of this frame */ ++ UCHAR TxRate; /* TODO: Obsoleted? Should change to MCS? */ ++ UCHAR CipherAlg; /* cipher alogrithm */ + PCIPHER_KEY pKey; + +- USHORT Flags; //See following definitions for detail. ++ USHORT Flags; /*See following definitions for detail. */ + +- //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. +- ULONG Priv; // Hardware specific value saved in here. ++ /*YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. */ ++ ULONG Priv; /* Hardware specific value saved in here. */ + } TX_BLK, *PTX_BLK; + +-#define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. +-#define fTX_bAckRequired 0x0002 // the packet need ack response +-#define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not +-#define fTX_bHTRate 0x0008 // allow to use HT rate +-#define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode +-#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment +-#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue +-#define fTX_bWMM 0x0080 // QOS Data ++#define fTX_bRtsRequired 0x0001 /* Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. */ ++#define fTX_bAckRequired 0x0002 /* the packet need ack response */ ++#define fTX_bPiggyBack 0x0004 /* Legacy device use Piggback or not */ ++#define fTX_bHTRate 0x0008 /* allow to use HT rate */ ++#define fTX_bForceNonQoS 0x0010 /* force to transmit frame without WMM-QoS in HT mode */ ++#define fTX_bAllowFrag 0x0020 /* allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment */ ++#define fTX_bMoreData 0x0040 /* there are more data packets in PowerSave Queue */ ++#define fTX_bWMM 0x0080 /* QOS Data */ + #define fTX_bClearEAPFrame 0x0100 + + #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag) +@@ -2278,7 +2278,7 @@ static inline VOID ConvertMulticastIP2MAC(IN PUCHAR pIpAddr, + + switch (ProtoType) { + case ETH_P_IPV6: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); ++/* memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); */ + *(*ppMacAddr) = 0x33; + *(*ppMacAddr + 1) = 0x33; + *(*ppMacAddr + 2) = pIpAddr[12]; +@@ -2289,7 +2289,7 @@ static inline VOID ConvertMulticastIP2MAC(IN PUCHAR pIpAddr, + + case ETH_P_IP: + default: +-// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); ++/* memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); */ + *(*ppMacAddr) = 0x01; + *(*ppMacAddr + 1) = 0x00; + *(*ppMacAddr + 2) = 0x5e; +@@ -2305,9 +2305,9 @@ static inline VOID ConvertMulticastIP2MAC(IN PUCHAR pIpAddr, + char *GetPhyMode(int Mode); + char *GetBW(int BW); + +-// +-// Private routines in rtmp_init.c +-// ++/* */ ++/* Private routines in rtmp_init.c */ ++/* */ + NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + OUT PRTMP_ADAPTER * ppAdapter); + +@@ -2328,7 +2328,7 @@ NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, + + NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, + IN UCHAR regID, IN PUCHAR pValue); +-#endif // RTMP_RF_RW_SUPPORT // ++#endif /* RTMP_RF_RW_SUPPORT // */ + + VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr); + +@@ -2386,9 +2386,9 @@ VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm); + + VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd); + +-// +-// prototype in action.c +-// ++/* */ ++/* prototype in action.c */ ++/* */ + VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, + OUT STATE_MACHINE_FUNC Trans[]); +@@ -2444,9 +2444,9 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + IN ULONG Wcid, + IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg); + +-// +-// Private routines in rtmp_data.c +-// ++/* */ ++/* Private routines in rtmp_data.c */ ++/* */ + BOOLEAN RTMPHandleRxDoneInterrupt(IN PRTMP_ADAPTER pAd); + + BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, +@@ -2511,11 +2511,11 @@ NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, + + VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, + IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, IN UCHAR QSEL); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size); + +-VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, // HW new a sequence. ++VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ + IN UCHAR BASize, + IN UCHAR WCID, + IN ULONG Length, +@@ -2538,8 +2538,8 @@ VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd); + NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + IN UCHAR QueIdx, IN PUCHAR pData, IN UINT Length); + +-//+++mark by shiang, now this function merge to MiniportMMRequest() +-//---mark by shiang, now this function merge to MiniportMMRequest() ++/*+++mark by shiang, now this function merge to MiniportMMRequest() */ ++/*---mark by shiang, now this function merge to MiniportMMRequest() */ + + VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + IN UCHAR TxRate, IN BOOLEAN bQosNull); +@@ -2588,9 +2588,9 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + + BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +-// +-// Private routines in rtmp_wep.c +-// ++/* */ ++/* Private routines in rtmp_wep.c */ ++/* */ + VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, + IN PUCHAR pKey, + IN UCHAR KeyId, IN UCHAR KeyLen, IN PUCHAR pDest); +@@ -2619,11 +2619,11 @@ VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + + UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len); + +-// +-// MLME routines +-// ++/* */ ++/* MLME routines */ ++/* */ + +-// Asic/RF/BBP related functions ++/* Asic/RF/BBP related functions */ + + VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd); + +@@ -2711,7 +2711,7 @@ BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + + #ifdef RTMP_MAC_PCI + BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr); + +@@ -2748,7 +2748,7 @@ VOID BssTableDeleteEntry(IN OUT PBSS_TABLE pTab, + VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IN BA_ORI_ENTRY * pBAORIEntry); + +-VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + IN UCHAR HtCapabilityLen, + IN UCHAR AddHtInfoLen, + IN UCHAR NewExtChanOffset, +@@ -2761,7 +2761,7 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, IN PUCHAR pBssid, IN + IN PQBSS_LOAD_PARM pQbssLoad, + IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); + +-ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + IN UCHAR HtCapabilityLen, + IN UCHAR AddHtInfoLen, + IN UCHAR NewExtChanOffset, +@@ -2849,7 +2849,7 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); + +-//---------------------------------------------- ++/*---------------------------------------------- */ + VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); +@@ -2879,7 +2879,7 @@ VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, + + #ifdef RTMP_MAC_USB + VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + VOID ComposePsPoll(IN PRTMP_ADAPTER pAd); + +@@ -2918,7 +2918,7 @@ VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-//============================================= ++/*============================================= */ + + VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + IN PSTATE_MACHINE Sm, +@@ -2932,11 +2932,11 @@ VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + IN USHORT Seq, + IN USHORT Reason, IN USHORT Status); + +-// +-// Private routines in dls.c +-// ++/* */ ++/* Private routines in dls.c */ ++/* */ + +-//======================================== ++/*======================================== */ + + VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, +@@ -2959,7 +2959,7 @@ VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd); + + BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd); +-//========================================= ++/*========================================= */ + + VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]); +@@ -3135,7 +3135,7 @@ BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, + OUT USHORT * Seq, + OUT USHORT * Status, OUT CHAR ChlgText[]); + +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, // AP might use this additional ht info IE ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ + OUT UCHAR * pHtCapabilityLen, + OUT UCHAR * pAddHtInfoLen, + OUT UCHAR * pNewExtChannelOffset, +@@ -3260,7 +3260,7 @@ VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); + VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd); + + #ifdef RTMP_EFUSE_SUPPORT +-//2008/09/11:KH add to support efuse<-- ++/*2008/09/11:KH add to support efuse<-- */ + INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); + + INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); +@@ -3274,28 +3274,28 @@ int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd); + VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock); + + INT eFuse_init(IN PRTMP_ADAPTER pAd); +-//2008/09/11:KH add to support efuse--> +-#endif // RTMP_EFUSE_SUPPORT // ++/*2008/09/11:KH add to support efuse--> */ ++#endif /* RTMP_EFUSE_SUPPORT // */ + +-// add by johnli, RF power sequence setup ++/* add by johnli, RF power sequence setup */ + VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd); + + VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd); + + VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd); +-// end johnli ++/* end johnli */ + + #ifdef RT3070 + VOID NICInitRT3070RFRegisters(IN RTMP_ADAPTER * pAd); +-#endif // RT3070 // ++#endif /* RT3070 // */ + #ifdef RT3090 + VOID NICInitRT3090RFRegisters(IN RTMP_ADAPTER * pAd); +-#endif // RT3090 // ++#endif /* RT3090 // */ + + VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd); + + VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); +-#endif // RT30xx // ++#endif /* RT30xx // */ + + VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd); + +@@ -3333,9 +3333,9 @@ UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel); + VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, + IN UCHAR AironetCellPowerLimit); + +-// +-// Prototypes of function definition in rtmp_tkip.c +-// ++/* */ ++/* Prototypes of function definition in rtmp_tkip.c */ ++/* */ + VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, + IN PUCHAR pTKey, + IN UCHAR KeyId, +@@ -3375,9 +3375,9 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + IN PUCHAR pData, + IN ULONG DataByteCnt, IN PCIPHER_KEY pWpaKey); + +-// +-// Prototypes of function definition in cmm_info.c +-// ++/* */ ++/* Prototypes of function definition in cmm_info.c */ ++/* */ + INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band); + + INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg); +@@ -3393,9 +3393,9 @@ INT RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, + IN UCHAR * pHashStr, + IN INT hashStrLen, OUT PUCHAR pPMKBuf); + +-// +-// Prototypes of function definition in cmm_info.c +-// ++/* */ ++/* Prototypes of function definition in cmm_info.c */ ++/* */ + VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd); + + VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode); +@@ -3478,9 +3478,9 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx); + +-// +-// function prototype in ap_wpa.c +-// ++/* */ ++/* function prototype in ap_wpa.c */ ++/* */ + VOID RTMPGetTxTscFromAsic(IN PRTMP_ADAPTER pAd, + IN UCHAR apidx, OUT PUCHAR pTxTsc); + +@@ -3524,7 +3524,7 @@ VOID AES_GTK_KEY_WRAP(IN UCHAR * key, + IN UCHAR * plaintext, + IN UINT32 p_len, OUT UCHAR * ciphertext); + +-//typedef void (*TIMER_FUNCTION)(unsigned long); ++/*typedef void (*TIMER_FUNCTION)(unsigned long); */ + + /* timeout -- ms */ + VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, +@@ -3675,7 +3675,7 @@ void ba_reordering_resource_release(PRTMP_ADAPTER pAd); + + PSTRING rstrtok(IN PSTRING s, IN const PSTRING ct); + +-////////// common ioctl functions ////////// ++/*//////// common ioctl functions ////////// */ + INT SetCommonHT(IN PRTMP_ADAPTER pAd); + + INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, +@@ -3688,15 +3688,15 @@ int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd); + + BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc); + +-// AMPDU packet indication ++/* AMPDU packet indication */ + VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + +-// AMSDU packet indication ++/* AMSDU packet indication */ + VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + +-// Normal legacy Rx packet indication ++/* Normal legacy Rx packet indication */ + VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + +@@ -3711,7 +3711,7 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + IN PUCHAR pHeader802_3, + IN UCHAR FromWhichBSSID); + +-// remove LLC and get 802_3 Header ++/* remove LLC and get 802_3 Header */ + #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ + { \ + PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \ +@@ -3748,7 +3748,7 @@ VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, + + #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ + Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); +- //announce_802_3_packet(_pAd, _pPacket); ++ /*announce_802_3_packet(_pAd, _pPacket); */ + + PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID); +@@ -3757,7 +3757,7 @@ PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, + IN PUCHAR pData, IN ULONG DataSize); + +-// Normal, AMPDU or AMSDU ++/* Normal, AMPDU or AMSDU */ + VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); + +@@ -3913,9 +3913,9 @@ INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); + BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd); + + #ifdef RTMP_MAC_PCI +-// +-// Function Prototype in cmm_data_pci.c +-// ++/* */ ++/* Function Prototype in cmm_data_pci.c */ ++/* */ + USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); +@@ -3988,12 +3988,12 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd); + + VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd); +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + + #ifdef RTMP_MAC_USB +-// +-// Function Prototype in rtusb_bulk.c +-// ++/* */ ++/* Function Prototype in rtusb_bulk.c */ ++/* */ + VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + IN PTX_CONTEXT pTxContext, + IN UCHAR BulkOutPipeId, IN usb_complete_t Func); +@@ -4036,9 +4036,9 @@ VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); + + VOID RTUSBBulkRxHandle(IN unsigned long data); + +-// +-// Function Prototype in rtusb_io.c +-// ++/* */ ++/* Function Prototype in rtusb_io.c */ ++/* */ + NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, + IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); + +@@ -4152,9 +4152,9 @@ VOID RTUSBMlmeHardTransmit(IN PRTMP_ADAPTER pAd, IN PMGMT_STRUC pMgmt); + + INT MlmeThread(IN PVOID Context); + +-// +-// Function Prototype in rtusb_data.c +-// ++/* */ ++/* Function Prototype in rtusb_data.c */ ++/* */ + NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, + IN UCHAR BulkOutPipeId, + IN UINT32 NumberRequired); +@@ -4167,9 +4167,9 @@ VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bWiv, + IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst); + +-// +-// Function Prototype in cmm_data_usb.c +-// ++/* */ ++/* Function Prototype in cmm_data_usb.c */ ++/* */ + USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); +@@ -4219,7 +4219,7 @@ VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd); + + VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); + +@@ -4237,7 +4237,7 @@ BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, + void RtmpTimerQExit(IN RTMP_ADAPTER * pAd); + + void RtmpTimerQInit(IN RTMP_ADAPTER * pAd); +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + + VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd); + +@@ -4291,7 +4291,7 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + rt28xx_close(pAd->net_dev); + return; + } +-#endif // LINUX // ++#endif /* LINUX // */ + + /* + OS Related funciton prototype definitions. +@@ -4353,4 +4353,4 @@ int RtmpOSFileRead(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int readLen); + + int RtmpOSFileWrite(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int writeLen); + +-#endif // __RTMP_H__ ++#endif /* __RTMP_H__ */ +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index 7fa73e6..ea8d2ed 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -42,30 +42,30 @@ + + #ifdef RT2860 + #include "chip/rt2860.h" +-#endif // RT2860 // ++#endif /* RT2860 // */ + #ifdef RT2870 + #include "chip/rt2870.h" +-#endif // RT2870 // ++#endif /* RT2870 // */ + #ifdef RT3070 + #include "chip/rt3070.h" +-#endif // RT3070 // ++#endif /* RT3070 // */ + #ifdef RT3090 + #include "chip/rt3090.h" +-#endif // RT3090 // ++#endif /* RT3090 // */ + +-// We will have a cost down version which mac version is 0x3090xxxx +-// +-// RT3090A facts +-// +-// a) 2.4 GHz +-// b) Replacement for RT3090 +-// c) Internal LNA +-// d) Interference over channel #14 +-// e) New BBP features (e.g., SIG re-modulation) +-// ++/* We will have a cost down version which mac version is 0x3090xxxx */ ++/* */ ++/* RT3090A facts */ ++/* */ ++/* a) 2.4 GHz */ ++/* b) Replacement for RT3090 */ ++/* c) Internal LNA */ ++/* d) Interference over channel #14 */ ++/* e) New BBP features (e.g., SIG re-modulation) */ ++/* */ + #define IS_RT3090A(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30900000)) + +-// We will have a cost down version which mac version is 0x3090xxxx ++/* We will have a cost down version which mac version is 0x3090xxxx */ + #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (IS_RT3090A(_pAd))) + + #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000) +@@ -73,28 +73,28 @@ + #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27)) + + #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000||IS_RT3090A(_pAd)) +-//#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) ++/*#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200) */ + + /* RT3572, 3592, 3562, 3062 share the same MAC version */ + #define IS_RT3572(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x35720000) + #define IS_VERSION_BEFORE_F(_pAd) (((_pAd)->MACVersion&0xffff) <= 0x0211) +-// F version is 0x0212, E version is 0x0211. 309x can save more power after F version. ++/* F version is 0x0212, E version is 0x0211. 309x can save more power after F version. */ + #define IS_VERSION_AFTER_F(_pAd) ((((_pAd)->MACVersion&0xffff) >= 0x0212) || (((_pAd)->b3090ESpecialChip == TRUE))) +-// +-// RT3390 facts +-// +-// a) Base on RT3090 (RF IC: RT3020) +-// b) 2.4 GHz +-// c) 1x1 +-// d) Single chip +-// e) Internal components: PA and LNA +-// +-//RT3390,RT3370 ++/* */ ++/* RT3390 facts */ ++/* */ ++/* a) Base on RT3090 (RF IC: RT3020) */ ++/* b) 2.4 GHz */ ++/* c) 1x1 */ ++/* d) Single chip */ ++/* e) Internal components: PA and LNA */ ++/* */ ++/*RT3390,RT3370 */ + #define IS_RT3390(_pAd) (((_pAd)->MACVersion & 0xFFFF0000) == 0x33900000) + +-// ------------------------------------------------------ +-// PCI registers - base address 0x0000 +-// ------------------------------------------------------ ++/* ------------------------------------------------------ */ ++/* PCI registers - base address 0x0000 */ ++/* ------------------------------------------------------ */ + #define CHIP_PCI_CFG 0x0000 + #define CHIP_PCI_EECTRL 0x0004 + #define CHIP_PCI_MCUCTRL 0x0008 +@@ -103,15 +103,15 @@ + + #define RETRY_LIMIT 10 + +-// ------------------------------------------------------ +-// BBP & RF definition +-// ------------------------------------------------------ ++/* ------------------------------------------------------ */ ++/* BBP & RF definition */ ++/* ------------------------------------------------------ */ + #define BUSY 1 + #define IDLE 0 + +-//------------------------------------------------------------------------- +-// EEPROM definition +-//------------------------------------------------------------------------- ++/*------------------------------------------------------------------------- */ ++/* EEPROM definition */ ++/*------------------------------------------------------------------------- */ + #define EEDO 0x08 + #define EEDI 0x04 + #define EECS 0x02 +@@ -123,11 +123,11 @@ + #define EEPROM_EWDS_OPCODE 0x10 + #define EEPROM_EWEN_OPCODE 0x13 + +-#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs ++#define NUM_EEPROM_BBP_PARMS 19 /* Include NIC Config 0, 1, CR, TX ALC step, BBPs */ + #define NUM_EEPROM_TX_G_PARMS 7 +-#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID +-#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID ++#define EEPROM_NIC1_OFFSET 0x34 /* The address is from NIC config 0, not BBP register ID */ ++#define EEPROM_NIC2_OFFSET 0x36 /* The address is from NIC config 0, not BBP register ID */ ++#define EEPROM_BBP_BASE_OFFSET 0xf0 /* The address is from NIC config 0, not BBP register ID */ + #define EEPROM_G_TX_PWR_OFFSET 0x52 + #define EEPROM_G_TX2_PWR_OFFSET 0x60 + #define EEPROM_LED1_OFFSET 0x3c +@@ -139,22 +139,22 @@ + #define EEPROM_RSSI_A_OFFSET 0x4a + #define EEPROM_TXMIXER_GAIN_5G 0x4c + #define EEPROM_DEFINE_MAX_TXPWR 0x4e +-#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power. +-#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power. +-#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power. ++#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde /* 20MHZ 2.4G tx power. */ ++#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee /* 40MHZ 2.4G tx power. */ ++#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa /* 20MHZ 5G tx power. */ ++#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a /* 40MHZ 5G tx power. */ + #define EEPROM_A_TX_PWR_OFFSET 0x78 + #define EEPROM_A_TX2_PWR_OFFSET 0xa6 +-//#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j +-//#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe +-//#define EEPROM_TSSI_REF_OFFSET 0x54 +-//#define EEPROM_TSSI_DELTA_OFFSET 0x24 +-//#define EEPROM_CCK_TX_PWR_OFFSET 0x62 +-//#define EEPROM_CALIBRATE_OFFSET 0x7c ++/*#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j */ ++/*#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe */ ++/*#define EEPROM_TSSI_REF_OFFSET 0x54 */ ++/*#define EEPROM_TSSI_DELTA_OFFSET 0x24 */ ++/*#define EEPROM_CCK_TX_PWR_OFFSET 0x62 */ ++/*#define EEPROM_CALIBRATE_OFFSET 0x7c */ + #define EEPROM_VERSION_OFFSET 0x02 + #define EEPROM_FREQ_OFFSET 0x3a +-#define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power. +-#define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. ++#define EEPROM_TXPOWER_BYRATE 0xde /* 20MHZ power. */ ++#define EEPROM_TXPOWER_DELTA 0x50 /* 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ. */ + #define VALID_EEPROM_VERSION 1 + + /* +@@ -163,13 +163,13 @@ + #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ + (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) + +-// ------------------------------------------------------------------- +-// E2PROM data layout +-// ------------------------------------------------------------------- ++/* ------------------------------------------------------------------- */ ++/* E2PROM data layout */ ++/* ------------------------------------------------------------------- */ + +-// +-// MCU_LEDCS: MCU LED Control Setting. +-// ++/* */ ++/* MCU_LEDCS: MCU LED Control Setting. */ ++/* */ + typedef union _MCU_LEDCS_STRUC { + struct { + UCHAR LedMode:7; +@@ -178,14 +178,14 @@ typedef union _MCU_LEDCS_STRUC { + UCHAR word; + } MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; + +-// +-// EEPROM antenna select format +-// ++/* */ ++/* EEPROM antenna select format */ ++/* */ + typedef union _EEPROM_ANTENNA_STRUC { + struct { +- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R +- USHORT TxPath:4; // 1: 1T, 2: 2T +- USHORT RfIcType:4; // see E2PROM document ++ USHORT RxPath:4; /* 1: 1R, 2: 2R, 3: 3R */ ++ USHORT TxPath:4; /* 1: 1T, 2: 2T */ ++ USHORT RfIcType:4; /* see E2PROM document */ + USHORT Rsv:4; + } field; + USHORT word; +@@ -193,66 +193,66 @@ typedef union _EEPROM_ANTENNA_STRUC { + + typedef union _EEPROM_NIC_CINFIG2_STRUC { + struct { +- USHORT HardwareRadioControl:1; // 1:enable, 0:disable +- USHORT DynamicTxAgcControl:1; // +- USHORT ExternalLNAForG:1; // +- USHORT ExternalLNAForA:1; // external LNA enable for 2.4G +- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable ++ USHORT HardwareRadioControl:1; /* 1:enable, 0:disable */ ++ USHORT DynamicTxAgcControl:1; /* */ ++ USHORT ExternalLNAForG:1; /* */ ++ USHORT ExternalLNAForA:1; /* external LNA enable for 2.4G */ ++ USHORT CardbusAcceleration:1; /* !!! NOTE: 0 - enable, 1 - disable */ + USHORT BW40MSidebandForG:1; + USHORT BW40MSidebandForA:1; +- USHORT EnableWPSPBC:1; // WPS PBC Control bit +- USHORT BW40MAvailForG:1; // 0:enable, 1:disable +- USHORT BW40MAvailForA:1; // 0:enable, 1:disable +- USHORT Rsv1:1; // must be 0 +- USHORT AntDiversity:1; // Antenna diversity +- USHORT Rsv2:3; // must be 0 +- USHORT DACTestBit:1; // control if driver should patch the DAC issue ++ USHORT EnableWPSPBC:1; /* WPS PBC Control bit */ ++ USHORT BW40MAvailForG:1; /* 0:enable, 1:disable */ ++ USHORT BW40MAvailForA:1; /* 0:enable, 1:disable */ ++ USHORT Rsv1:1; /* must be 0 */ ++ USHORT AntDiversity:1; /* Antenna diversity */ ++ USHORT Rsv2:3; /* must be 0 */ ++ USHORT DACTestBit:1; /* control if driver should patch the DAC issue */ + } field; + USHORT word; + } EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; + +-// +-// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) +-// ++/* */ ++/* TX_PWR Value valid range 0xFA(-6) ~ 0x24(36) */ ++/* */ + typedef union _EEPROM_TX_PWR_STRUC { + struct { +- CHAR Byte0; // Low Byte +- CHAR Byte1; // High Byte ++ CHAR Byte0; /* Low Byte */ ++ CHAR Byte1; /* High Byte */ + } field; + USHORT word; + } EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; + + typedef union _EEPROM_VERSION_STRUC { + struct { +- UCHAR FaeReleaseNumber; // Low Byte +- UCHAR Version; // High Byte ++ UCHAR FaeReleaseNumber; /* Low Byte */ ++ UCHAR Version; /* High Byte */ + } field; + USHORT word; + } EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; + + typedef union _EEPROM_LED_STRUC { + struct { +- USHORT PolarityRDY_G:1; // Polarity RDY_G setting. +- USHORT PolarityRDY_A:1; // Polarity RDY_A setting. +- USHORT PolarityACT:1; // Polarity ACT setting. +- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting. +- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting. +- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting. +- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting. +- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting. +- USHORT LedMode:5; // Led mode. +- USHORT Rsvd:3; // Reserved ++ USHORT PolarityRDY_G:1; /* Polarity RDY_G setting. */ ++ USHORT PolarityRDY_A:1; /* Polarity RDY_A setting. */ ++ USHORT PolarityACT:1; /* Polarity ACT setting. */ ++ USHORT PolarityGPIO_0:1; /* Polarity GPIO#0 setting. */ ++ USHORT PolarityGPIO_1:1; /* Polarity GPIO#1 setting. */ ++ USHORT PolarityGPIO_2:1; /* Polarity GPIO#2 setting. */ ++ USHORT PolarityGPIO_3:1; /* Polarity GPIO#3 setting. */ ++ USHORT PolarityGPIO_4:1; /* Polarity GPIO#4 setting. */ ++ USHORT LedMode:5; /* Led mode. */ ++ USHORT Rsvd:3; /* Reserved */ + } field; + USHORT word; + } EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; + + typedef union _EEPROM_TXPOWER_DELTA_STRUC { + struct { +- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4) +- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value +- UCHAR TxPowerEnable:1; // Enable ++ UCHAR DeltaValue:6; /* Tx Power dalta value (MAX=4) */ ++ UCHAR Type:1; /* 1: plus the delta value, 0: minus the delta value */ ++ UCHAR TxPowerEnable:1; /* Enable */ + } field; + UCHAR value; + } EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; + +-#endif // __RTMP_CHIP_H__ // ++#endif /* __RTMP_CHIP_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_ckipmic.h b/drivers/staging/rt2860/rtmp_ckipmic.h +index ad35dca..a8108f7 100644 +--- a/drivers/staging/rt2860/rtmp_ckipmic.h ++++ b/drivers/staging/rt2860/rtmp_ckipmic.h +@@ -60,4 +60,4 @@ VOID shift_row(IN PUCHAR in, OUT PUCHAR out); + + VOID mix_column(IN PUCHAR in, OUT PUCHAR out); + +-#endif //__RTMP_CKIPMIC_H__ ++#endif /*__RTMP_CKIPMIC_H__ */ +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index 31b52d6..39c27f9 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -41,9 +41,9 @@ + + #include "oid.h" + +-// +-// Debug information verbosity: lower values indicate higher urgency +-// ++/* */ ++/* Debug information verbosity: lower values indicate higher urgency */ ++/* */ + #define RT_DEBUG_OFF 0 + #define RT_DEBUG_ERROR 1 + #define RT_DEBUG_WARN 2 +@@ -55,15 +55,15 @@ + #define NIC_DBG_STRING ("**RT28xx**") + + #ifdef RTMP_MAC_USB +-#define TX_RING_SIZE 8 // 1 ++#define TX_RING_SIZE 8 /* 1 */ + #define PRIO_RING_SIZE 8 +-#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE ++#define MGMT_RING_SIZE 32 /* PRIO_RING_SIZE */ + #define RX_RING_SIZE 8 + #define MAX_TX_PROCESS 4 + #define LOCAL_TXBUF_SIZE 2048 +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + +-//#define PACKED ++/*#define PACKED */ + + #define RALINK_2883_VERSION ((UINT32)0x28830300) + #define RALINK_2880E_VERSION ((UINT32)0x28720200) +@@ -71,38 +71,38 @@ + + #define MAX_RX_PKT_LEN 1520 + +-// +-// Entry number for each DMA descriptor ring +-// ++/* */ ++/* Entry number for each DMA descriptor ring */ ++/* */ + + #ifdef RTMP_MAC_PCI +-#define TX_RING_SIZE 64 //64 ++#define TX_RING_SIZE 64 /*64 */ + #define MGMT_RING_SIZE 128 +-#define RX_RING_SIZE 128 //64 +-#define MAX_TX_PROCESS TX_RING_SIZE //8 ++#define RX_RING_SIZE 128 /*64 */ ++#define MAX_TX_PROCESS TX_RING_SIZE /*8 */ + #define MAX_DMA_DONE_PROCESS TX_RING_SIZE +-#define MAX_TX_DONE_PROCESS TX_RING_SIZE //8 ++#define MAX_TX_DONE_PROCESS TX_RING_SIZE /*8 */ + #define LOCAL_TXBUF_SIZE 2 +-#endif // RTMP_MAC_PCI // ++#endif /* RTMP_MAC_PCI // */ + +-#define MAX_RX_PROCESS 128 //64 //32 ++#define MAX_RX_PROCESS 128 /*64 //32 */ + #define NUM_OF_LOCAL_TXBUF 2 + #define TXD_SIZE 16 + #define TXWI_SIZE 16 + #define RXD_SIZE 16 + #define RXWI_SIZE 16 +-// TXINFO_SIZE + TXWI_SIZE + 802.11 Header Size + AMSDU sub frame header +-#define TX_DMA_1ST_BUFFER_SIZE 96 // only the 1st physical buffer is pre-allocated +-#define MGMT_DMA_BUFFER_SIZE 1536 //2048 +-#define RX_BUFFER_AGGRESIZE 3840 //3904 //3968 //4096 //2048 //4096 +-#define RX_BUFFER_NORMSIZE 3840 //3904 //3968 //4096 //2048 //4096 ++/* TXINFO_SIZE + TXWI_SIZE + 802.11 Header Size + AMSDU sub frame header */ ++#define TX_DMA_1ST_BUFFER_SIZE 96 /* only the 1st physical buffer is pre-allocated */ ++#define MGMT_DMA_BUFFER_SIZE 1536 /*2048 */ ++#define RX_BUFFER_AGGRESIZE 3840 /*3904 //3968 //4096 //2048 //4096 */ ++#define RX_BUFFER_NORMSIZE 3840 /*3904 //3968 //4096 //2048 //4096 */ + #define TX_BUFFER_NORMSIZE RX_BUFFER_NORMSIZE +-#define MAX_FRAME_SIZE 2346 // Maximum 802.11 frame size +-#define MAX_AGGREGATION_SIZE 3840 //3904 //3968 //4096 ++#define MAX_FRAME_SIZE 2346 /* Maximum 802.11 frame size */ ++#define MAX_AGGREGATION_SIZE 3840 /*3904 //3968 //4096 */ + #define MAX_NUM_OF_TUPLE_CACHE 2 + #define MAX_MCAST_LIST_SIZE 32 + #define MAX_LEN_OF_VENDOR_DESC 64 +-//#define MAX_SIZE_OF_MCAST_PSQ (NUM_OF_LOCAL_TXBUF >> 2) // AP won't spend more than 1/4 of total buffers on M/BCAST PSQ ++/*#define MAX_SIZE_OF_MCAST_PSQ (NUM_OF_LOCAL_TXBUF >> 2) // AP won't spend more than 1/4 of total buffers on M/BCAST PSQ */ + #define MAX_SIZE_OF_MCAST_PSQ 32 + + #define MAX_RX_PROCESS_CNT (RX_RING_SIZE) +@@ -125,27 +125,27 @@ + And in rt_main_end.c, clConfig.clNum = RX_RING_SIZE * 3; is changed to + clConfig.clNum = RX_RING_SIZE * 4; + */ +-// TODO: For VxWorks the size is 256. Shall we cahnge the value as 256 for all OS????? +-#define MAX_PACKETS_IN_QUEUE (512) //(512) // to pass WMM A5-WPAPSK ++/* TODO: For VxWorks the size is 256. Shall we cahnge the value as 256 for all OS????? */ ++#define MAX_PACKETS_IN_QUEUE (512) /*(512) // to pass WMM A5-WPAPSK */ + + #define MAX_PACKETS_IN_MCAST_PS_QUEUE 32 +-#define MAX_PACKETS_IN_PS_QUEUE 128 //32 ++#define MAX_PACKETS_IN_PS_QUEUE 128 /*32 */ + #define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */ + + #ifdef RTMP_EFUSE_SUPPORT +-//2008/09/11:KH add to support efuse<-- ++/*2008/09/11:KH add to support efuse<-- */ + #define MAX_EEPROM_BIN_FILE_SIZE 1024 + #define EFUSE_BUFFER_PATH "/tmp/RT30xxEEPROM.bin" +-//2008/09/11:KH add to support efuse--> +-#endif // RTMP_EFUSE_SUPPORT // ++/*2008/09/11:KH add to support efuse--> */ ++#endif /* RTMP_EFUSE_SUPPORT // */ + +-// RxFilter ++/* RxFilter */ + #define STANORMAL 0x17f97 + #define APNORMAL 0x15f97 + #define PSPXLINK 0x17f93 +-// +-// RTMP_ADAPTER flags +-// ++/* */ ++/* RTMP_ADAPTER flags */ ++/* */ + #define fRTMP_ADAPTER_MAP_REGISTER 0x00000001 + #define fRTMP_ADAPTER_INTERRUPT_IN_USE 0x00000002 + #define fRTMP_ADAPTER_HARDWARE_ERROR 0x00000004 +@@ -171,13 +171,13 @@ + #define fRTMP_ADAPTER_SCAN_2040 0x04000000 + #define fRTMP_ADAPTER_RADIO_MEASUREMENT 0x08000000 + +-#define fRTMP_ADAPTER_START_UP 0x10000000 //Devive already initialized and enabled Tx/Rx. ++#define fRTMP_ADAPTER_START_UP 0x10000000 /*Devive already initialized and enabled Tx/Rx. */ + #define fRTMP_ADAPTER_MEDIA_STATE_CHANGE 0x20000000 + #define fRTMP_ADAPTER_IDLE_RADIO_OFF 0x40000000 + +-// +-// STA operation status flags +-// ++/* */ ++/* STA operation status flags */ ++/* */ + #define fOP_STATUS_INFRA_ON 0x00000001 + #define fOP_STATUS_ADHOC_ON 0x00000002 + #define fOP_STATUS_BG_PROTECTION_INUSED 0x00000004 +@@ -187,8 +187,8 @@ + #define fOP_STATUS_MEDIA_STATE_CONNECTED 0x00000080 + #define fOP_STATUS_WMM_INUSED 0x00000100 + #define fOP_STATUS_AGGREGATION_INUSED 0x00000200 +-#define fOP_STATUS_DOZE 0x00000400 // debug purpose +-#define fOP_STATUS_PIGGYBACK_INUSED 0x00000800 // piggy-back, and aggregation ++#define fOP_STATUS_DOZE 0x00000400 /* debug purpose */ ++#define fOP_STATUS_PIGGYBACK_INUSED 0x00000800 /* piggy-back, and aggregation */ + #define fOP_STATUS_APSD_INUSED 0x00001000 + #define fOP_STATUS_TX_AMSDU_INUSED 0x00002000 + #define fOP_STATUS_MAX_RETRY_ENABLED 0x00004000 +@@ -196,25 +196,25 @@ + #define fOP_STATUS_PCIE_DEVICE 0x00020000 + #define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE fOP_STATUS_PCIE_DEVICE + +-// +-// RTMP_ADAPTER PSFlags : related to advanced power save. +-// +-// Indicate whether driver can go to sleep mode from now. This flag is useful AFTER link up ++/* */ ++/* RTMP_ADAPTER PSFlags : related to advanced power save. */ ++/* */ ++/* Indicate whether driver can go to sleep mode from now. This flag is useful AFTER link up */ + #define fRTMP_PS_CAN_GO_SLEEP 0x00000001 +-// Indicate whether driver has issue a LinkControl command to PCIe L1 ++/* Indicate whether driver has issue a LinkControl command to PCIe L1 */ + #define fRTMP_PS_SET_PCI_CLK_OFF_COMMAND 0x00000002 +-// Indicate driver should disable kick off hardware to send packets from now. ++/* Indicate driver should disable kick off hardware to send packets from now. */ + #define fRTMP_PS_DISABLE_TX 0x00000004 +-// Indicate driver should IMMEDIATELY fo to sleep after receiving AP's beacon in which doesn't indicate unicate nor multicast packets for me +-//. This flag is used ONLY in RTMPHandleRxDoneInterrupt routine. ++/* Indicate driver should IMMEDIATELY fo to sleep after receiving AP's beacon in which doesn't indicate unicate nor multicast packets for me */ ++/*. This flag is used ONLY in RTMPHandleRxDoneInterrupt routine. */ + #define fRTMP_PS_GO_TO_SLEEP_NOW 0x00000008 +-#define fRTMP_PS_TOGGLE_L1 0x00000010 // Use Toggle L1 mechanism for rt28xx PCIe ++#define fRTMP_PS_TOGGLE_L1 0x00000010 /* Use Toggle L1 mechanism for rt28xx PCIe */ + + #ifdef RT3090 + #define WAKE_MCU_CMD 0x31 + #define SLEEP_MCU_CMD 0x30 + #define RFOFF_MCU_CMD 0x35 +-#endif // RT3090 // ++#endif /* RT3090 // */ + + #define CCKSETPROTECT 0x1 + #define OFDMSETPROTECT 0x2 +@@ -224,12 +224,12 @@ + #define GR40SETPROTECT 0x20 + #define ALLN_SETPROTECT (GR40SETPROTECT | GF20SETPROTECT | MM40SETPROTECT | MM20SETPROTECT) + +-// +-// AP's client table operation status flags +-// +-#define fCLIENT_STATUS_WMM_CAPABLE 0x00000001 // CLIENT can parse QOS DATA frame +-#define fCLIENT_STATUS_AGGREGATION_CAPABLE 0x00000002 // CLIENT can receive Ralink's proprietary TX aggregation frame +-#define fCLIENT_STATUS_PIGGYBACK_CAPABLE 0x00000004 // CLIENT support piggy-back ++/* */ ++/* AP's client table operation status flags */ ++/* */ ++#define fCLIENT_STATUS_WMM_CAPABLE 0x00000001 /* CLIENT can parse QOS DATA frame */ ++#define fCLIENT_STATUS_AGGREGATION_CAPABLE 0x00000002 /* CLIENT can receive Ralink's proprietary TX aggregation frame */ ++#define fCLIENT_STATUS_PIGGYBACK_CAPABLE 0x00000004 /* CLIENT support piggy-back */ + #define fCLIENT_STATUS_AMSDU_INUSED 0x00000008 + #define fCLIENT_STATUS_SGI20_CAPABLE 0x00000010 + #define fCLIENT_STATUS_SGI40_CAPABLE 0x00000020 +@@ -241,45 +241,45 @@ + #define fCLIENT_STATUS_APSD_CAPABLE 0x00000800 /* UAPSD STATION */ + + #define fCLIENT_STATUS_RALINK_CHIPSET 0x00100000 +-// +-// STA configuration flags +-// ++/* */ ++/* STA configuration flags */ ++/* */ + +-// 802.11n Operating Mode Definition. 0-3 also used in ASICUPdateProtect switch case ++/* 802.11n Operating Mode Definition. 0-3 also used in ASICUPdateProtect switch case */ + #define HT_NO_PROTECT 0 + #define HT_LEGACY_PROTECT 1 + #define HT_40_PROTECT 2 + #define HT_2040_PROTECT 3 + #define HT_RTSCTS_6M 7 +-//following is our own definition in order to turn on our ASIC protection register in INFRASTRUCTURE. +-#define HT_ATHEROS 8 // rt2860c has problem with atheros chip. we need to turn on RTS/CTS . +-#define HT_FORCERTSCTS 9 // Force turn on RTS/CTS first. then go to evaluate if this force RTS is necessary. ++/*following is our own definition in order to turn on our ASIC protection register in INFRASTRUCTURE. */ ++#define HT_ATHEROS 8 /* rt2860c has problem with atheros chip. we need to turn on RTS/CTS . */ ++#define HT_FORCERTSCTS 9 /* Force turn on RTS/CTS first. then go to evaluate if this force RTS is necessary. */ + +-// +-// RX Packet Filter control flags. Apply on pAd->PacketFilter +-// ++/* */ ++/* RX Packet Filter control flags. Apply on pAd->PacketFilter */ ++/* */ + #define fRX_FILTER_ACCEPT_DIRECT NDIS_PACKET_TYPE_DIRECTED + #define fRX_FILTER_ACCEPT_MULTICAST NDIS_PACKET_TYPE_MULTICAST + #define fRX_FILTER_ACCEPT_BROADCAST NDIS_PACKET_TYPE_BROADCAST + #define fRX_FILTER_ACCEPT_ALL_MULTICAST NDIS_PACKET_TYPE_ALL_MULTICAST + #define fRX_FILTER_ACCEPT_PROMISCUOUS NDIS_PACKET_TYPE_PROMISCUOUS + +-// +-// Error code section +-// +-// NDIS_ERROR_CODE_ADAPTER_NOT_FOUND ++/* */ ++/* Error code section */ ++/* */ ++/* NDIS_ERROR_CODE_ADAPTER_NOT_FOUND */ + #define ERRLOG_READ_PCI_SLOT_FAILED 0x00000101L + #define ERRLOG_WRITE_PCI_SLOT_FAILED 0x00000102L + #define ERRLOG_VENDOR_DEVICE_NOMATCH 0x00000103L + +-// NDIS_ERROR_CODE_ADAPTER_DISABLED ++/* NDIS_ERROR_CODE_ADAPTER_DISABLED */ + #define ERRLOG_BUS_MASTER_DISABLED 0x00000201L + +-// NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION ++/* NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION */ + #define ERRLOG_INVALID_SPEED_DUPLEX 0x00000301L + #define ERRLOG_SET_SECONDARY_FAILED 0x00000302L + +-// NDIS_ERROR_CODE_OUT_OF_RESOURCES ++/* NDIS_ERROR_CODE_OUT_OF_RESOURCES */ + #define ERRLOG_OUT_OF_MEMORY 0x00000401L + #define ERRLOG_OUT_OF_SHARED_MEMORY 0x00000402L + #define ERRLOG_OUT_OF_MAP_REGISTERS 0x00000403L +@@ -289,21 +289,21 @@ + #define ERRLOG_OUT_OF_NDIS_PACKET 0x00000407L + #define ERRLOG_OUT_OF_LOOKASIDE_MEMORY 0x00000408L + +-// NDIS_ERROR_CODE_HARDWARE_FAILURE ++/* NDIS_ERROR_CODE_HARDWARE_FAILURE */ + #define ERRLOG_SELFTEST_FAILED 0x00000501L + #define ERRLOG_INITIALIZE_ADAPTER 0x00000502L + #define ERRLOG_REMOVE_MINIPORT 0x00000503L + +-// NDIS_ERROR_CODE_RESOURCE_CONFLICT ++/* NDIS_ERROR_CODE_RESOURCE_CONFLICT */ + #define ERRLOG_MAP_IO_SPACE 0x00000601L + #define ERRLOG_QUERY_ADAPTER_RESOURCES 0x00000602L + #define ERRLOG_NO_IO_RESOURCE 0x00000603L + #define ERRLOG_NO_INTERRUPT_RESOURCE 0x00000604L + #define ERRLOG_NO_MEMORY_RESOURCE 0x00000605L + +-// WDS definition ++/* WDS definition */ + #define MAX_WDS_ENTRY 4 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table ++#define WDS_PAIRWISE_KEY_OFFSET 60 /* WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table */ + + #define WDS_DISABLE_MODE 0 + #define WDS_RESTRICT_MODE 1 +@@ -319,7 +319,7 @@ + #ifdef MBSS_SUPPORT + #undef MAX_MBSSID_NUM + #define MAX_MBSSID_NUM (8 - MAX_MESH_NUM - MAX_APCLI_NUM) +-#endif // MBSS_SUPPORT // ++#endif /* MBSS_SUPPORT // */ + + /* sanity check for apidx */ + #define MBSS_MR_APIDX_SANITY_CHECK(apidx) \ +@@ -333,10 +333,10 @@ + #define FIRST_MBSSID 1 + + #define MAX_BEACON_SIZE 512 +-// If the MAX_MBSSID_NUM is larger than 6, +-// it shall reserve some WCID space(wcid 222~253) for beacon frames. +-// - these wcid 238~253 are reserved for beacon#6(ra6). +-// - these wcid 222~237 are reserved for beacon#7(ra7). ++/* If the MAX_MBSSID_NUM is larger than 6, */ ++/* it shall reserve some WCID space(wcid 222~253) for beacon frames. */ ++/* - these wcid 238~253 are reserved for beacon#6(ra6). */ ++/* - these wcid 222~237 are reserved for beacon#7(ra7). */ + #if defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 8) + #define HW_RESERVED_WCID 222 + #elif defined(MAX_MBSSID_NUM) && (MAX_MBSSID_NUM == 7) +@@ -345,17 +345,17 @@ + #define HW_RESERVED_WCID 255 + #endif + +-// Then dedicate wcid of DFS and Carrier-Sense. ++/* Then dedicate wcid of DFS and Carrier-Sense. */ + #define DFS_CTS_WCID (HW_RESERVED_WCID - 1) + #define CS_CTS_WCID (HW_RESERVED_WCID - 2) + #define LAST_SPECIFIC_WCID (HW_RESERVED_WCID - 2) + +-// If MAX_MBSSID_NUM is 8, the maximum available wcid for the associated STA is 211. +-// If MAX_MBSSID_NUM is 7, the maximum available wcid for the associated STA is 228. ++/* If MAX_MBSSID_NUM is 8, the maximum available wcid for the associated STA is 211. */ ++/* If MAX_MBSSID_NUM is 7, the maximum available wcid for the associated STA is 228. */ + #define MAX_AVAILABLE_CLIENT_WCID (LAST_SPECIFIC_WCID - MAX_MBSSID_NUM - 1) + +-// TX need WCID to find Cipher Key +-// these wcid 212 ~ 219 are reserved for bc/mc packets if MAX_MBSSID_NUM is 8. ++/* TX need WCID to find Cipher Key */ ++/* these wcid 212 ~ 219 are reserved for bc/mc packets if MAX_MBSSID_NUM is 8. */ + #define GET_GroupKey_WCID(__wcid, __bssidx) \ + { \ + __wcid = LAST_SPECIFIC_WCID - (MAX_MBSSID_NUM) + __bssidx; \ +@@ -363,7 +363,7 @@ + + #define IsGroupKeyWCID(__wcid) (((__wcid) < LAST_SPECIFIC_WCID) && ((__wcid) >= (LAST_SPECIFIC_WCID - (MAX_MBSSID_NUM)))) + +-// definition to support multiple BSSID ++/* definition to support multiple BSSID */ + #define BSS0 0 + #define BSS1 1 + #define BSS2 2 +@@ -373,26 +373,26 @@ + #define BSS6 6 + #define BSS7 7 + +-//============================================================ +-// Length definitions ++/*============================================================ */ ++/* Length definitions */ + #define PEER_KEY_NO 2 + #define MAC_ADDR_LEN 6 + #define TIMESTAMP_LEN 8 +-#define MAX_LEN_OF_SUPPORTED_RATES MAX_LENGTH_OF_SUPPORT_RATES // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 +-#define MAX_LEN_OF_KEY 32 // 32 octets == 256 bits, Redefine for WPA +-#define MAX_NUM_OF_CHANNELS MAX_NUM_OF_CHS // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination +-#define MAX_NUM_OF_11JCHANNELS 20 // 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination ++#define MAX_LEN_OF_SUPPORTED_RATES MAX_LENGTH_OF_SUPPORT_RATES /* 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ ++#define MAX_LEN_OF_KEY 32 /* 32 octets == 256 bits, Redefine for WPA */ ++#define MAX_NUM_OF_CHANNELS MAX_NUM_OF_CHS /* 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination */ ++#define MAX_NUM_OF_11JCHANNELS 20 /* 14 channels @2.4G + 12@UNII + 4 @MMAC + 11 @HiperLAN2 + 7 @Japan + 1 as NULL termination */ + #define MAX_LEN_OF_SSID 32 + #define CIPHER_TEXT_LEN 128 + #define HASH_TABLE_SIZE 256 +-#define MAX_VIE_LEN 1024 // New for WPA cipher suite variable IE sizes. ++#define MAX_VIE_LEN 1024 /* New for WPA cipher suite variable IE sizes. */ + #define MAX_SUPPORT_MCS 32 + #define MAX_NUM_OF_BBP_LATCH 140 + +-//============================================================ +-// ASIC WCID Table definition. +-//============================================================ +-#define BSSID_WCID 1 // in infra mode, always put bssid with this WCID ++/*============================================================ */ ++/* ASIC WCID Table definition. */ ++/*============================================================ */ ++#define BSSID_WCID 1 /* in infra mode, always put bssid with this WCID */ + #define MCAST_WCID 0x0 + #define BSS0Mcast_WCID 0x0 + #define BSS1Mcast_WCID 0xf8 +@@ -406,7 +406,7 @@ + + #define MAX_NUM_OF_ACL_LIST MAX_NUMBER_OF_ACL + +-#define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC // if MAX_MBSSID_NUM is 8, this value can't be larger than 211 ++#define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC /* if MAX_MBSSID_NUM is 8, this value can't be larger than 211 */ + + #if MAX_LEN_OF_MAC_TABLE>MAX_AVAILABLE_CLIENT_WCID + #error MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID!!!! +@@ -419,38 +419,38 @@ + + #define NUM_OF_TID 8 + #define MAX_AID_BA 4 +-#define MAX_LEN_OF_BA_REC_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) // (NUM_OF_TID*MAX_AID_BA + 32) //Block ACK recipient +-#define MAX_LEN_OF_BA_ORI_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) // (NUM_OF_TID*MAX_AID_BA + 32) // Block ACK originator ++#define MAX_LEN_OF_BA_REC_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) /* (NUM_OF_TID*MAX_AID_BA + 32) //Block ACK recipient */ ++#define MAX_LEN_OF_BA_ORI_TABLE ((NUM_OF_TID * MAX_LEN_OF_MAC_TABLE)/2) /* (NUM_OF_TID*MAX_AID_BA + 32) // Block ACK originator */ + #define MAX_LEN_OF_BSS_TABLE 64 + #define MAX_REORDERING_MPDU_NUM 512 + +-// key related definitions ++/* key related definitions */ + #define SHARE_KEY_NUM 4 +-#define MAX_LEN_OF_SHARE_KEY 16 // byte count +-#define MAX_LEN_OF_PEER_KEY 16 // byte count +-#define PAIRWISE_KEY_NUM 64 // in MAC ASIC pairwise key table ++#define MAX_LEN_OF_SHARE_KEY 16 /* byte count */ ++#define MAX_LEN_OF_PEER_KEY 16 /* byte count */ ++#define PAIRWISE_KEY_NUM 64 /* in MAC ASIC pairwise key table */ + #define GROUP_KEY_NUM 4 + #define PMK_LEN 32 +-#define WDS_PAIRWISE_KEY_OFFSET 60 // WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table +-#define PMKID_NO 4 // Number of PMKID saved supported ++#define WDS_PAIRWISE_KEY_OFFSET 60 /* WDS links uses pairwise key#60 ~ 63 in ASIC pairwise key table */ ++#define PMKID_NO 4 /* Number of PMKID saved supported */ + #define MAX_LEN_OF_MLME_BUFFER 2048 + +-// power status related definitions ++/* power status related definitions */ + #define PWR_ACTIVE 0 + #define PWR_SAVE 1 +-#define PWR_MMPS 2 //MIMO power save ++#define PWR_MMPS 2 /*MIMO power save */ + +-// Auth and Assoc mode related definitions ++/* Auth and Assoc mode related definitions */ + #define AUTH_MODE_OPEN 0x00 + #define AUTH_MODE_KEY 0x01 + +-// BSS Type definitions +-#define BSS_ADHOC 0 // = Ndis802_11IBSS +-#define BSS_INFRA 1 // = Ndis802_11Infrastructure +-#define BSS_ANY 2 // = Ndis802_11AutoUnknown +-#define BSS_MONITOR 3 // = Ndis802_11Monitor ++/* BSS Type definitions */ ++#define BSS_ADHOC 0 /* = Ndis802_11IBSS */ ++#define BSS_INFRA 1 /* = Ndis802_11Infrastructure */ ++#define BSS_ANY 2 /* = Ndis802_11AutoUnknown */ ++#define BSS_MONITOR 3 /* = Ndis802_11Monitor */ + +-// Reason code definitions ++/* Reason code definitions */ + #define REASON_RESERVED 0 + #define REASON_UNSPECIFY 1 + #define REASON_NO_LONGER_VALID 2 +@@ -485,7 +485,7 @@ + #define REASON_QOS_REQUEST_TIMEOUT 39 + #define REASON_QOS_CIPHER_NOT_SUPPORT 45 + +-// Status code definitions ++/* Status code definitions */ + #define MLME_SUCCESS 0 + #define MLME_UNSPECIFY_FAIL 1 + #define MLME_CANNOT_SUPPORT_CAP 10 +@@ -517,7 +517,7 @@ + #define MLME_STATE_MACHINE_REJECT 0x53 + #define MLME_MAC_TABLE_FAIL 0x54 + +-// IE code ++/* IE code */ + #define IE_SSID 0 + #define IE_SUPP_RATES 1 + #define IE_FH_PARM 2 +@@ -525,83 +525,83 @@ + #define IE_CF_PARM 4 + #define IE_TIM 5 + #define IE_IBSS_PARM 6 +-#define IE_COUNTRY 7 // 802.11d +-#define IE_802_11D_REQUEST 10 // 802.11d +-#define IE_QBSS_LOAD 11 // 802.11e d9 +-#define IE_EDCA_PARAMETER 12 // 802.11e d9 +-#define IE_TSPEC 13 // 802.11e d9 +-#define IE_TCLAS 14 // 802.11e d9 +-#define IE_SCHEDULE 15 // 802.11e d9 ++#define IE_COUNTRY 7 /* 802.11d */ ++#define IE_802_11D_REQUEST 10 /* 802.11d */ ++#define IE_QBSS_LOAD 11 /* 802.11e d9 */ ++#define IE_EDCA_PARAMETER 12 /* 802.11e d9 */ ++#define IE_TSPEC 13 /* 802.11e d9 */ ++#define IE_TCLAS 14 /* 802.11e d9 */ ++#define IE_SCHEDULE 15 /* 802.11e d9 */ + #define IE_CHALLENGE_TEXT 16 +-#define IE_POWER_CONSTRAINT 32 // 802.11h d3.3 +-#define IE_POWER_CAPABILITY 33 // 802.11h d3.3 +-#define IE_TPC_REQUEST 34 // 802.11h d3.3 +-#define IE_TPC_REPORT 35 // 802.11h d3.3 +-#define IE_SUPP_CHANNELS 36 // 802.11h d3.3 +-#define IE_CHANNEL_SWITCH_ANNOUNCEMENT 37 // 802.11h d3.3 +-#define IE_MEASUREMENT_REQUEST 38 // 802.11h d3.3 +-#define IE_MEASUREMENT_REPORT 39 // 802.11h d3.3 +-#define IE_QUIET 40 // 802.11h d3.3 +-#define IE_IBSS_DFS 41 // 802.11h d3.3 +-#define IE_ERP 42 // 802.11g +-#define IE_TS_DELAY 43 // 802.11e d9 +-#define IE_TCLAS_PROCESSING 44 // 802.11e d9 +-#define IE_QOS_CAPABILITY 46 // 802.11e d6 +-#define IE_HT_CAP 45 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_AP_CHANNEL_REPORT 51 // 802.11k d6 +-#define IE_HT_CAP2 52 // 802.11n d1. HT CAPABILITY. ELEMENT ID TBD +-#define IE_RSN 48 // 802.11i d3.0 +-#define IE_WPA2 48 // WPA2 +-#define IE_EXT_SUPP_RATES 50 // 802.11g +-#define IE_SUPP_REG_CLASS 59 // 802.11y. Supported regulatory classes. +-#define IE_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 60 // 802.11n +-#define IE_ADD_HT 61 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +-#define IE_ADD_HT2 53 // 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD +- +-// For 802.11n D3.03 +-//#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet +-#define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element +-#define IE_WAPI 68 // WAPI information element +-#define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3 +-#define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03 +-#define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03 +-#define IE_EXT_CAPABILITY 127 // 802.11n D3.03 +- +-#define IE_WPA 221 // WPA +-#define IE_VENDOR_SPECIFIC 221 // Wifi WMM (WME) +- +-#define OUI_BROADCOM_HT 51 // +-#define OUI_BROADCOM_HTADD 52 // +-#define OUI_PREN_HT_CAP 51 // +-#define OUI_PREN_ADD_HT 52 // +- +-// CCX information +-#define IE_AIRONET_CKIP 133 // CCX1.0 ID 85H for CKIP +-#define IE_AP_TX_POWER 150 // CCX 2.0 for AP transmit power +-#define IE_MEASUREMENT_CAPABILITY 221 // CCX 2.0 ++#define IE_POWER_CONSTRAINT 32 /* 802.11h d3.3 */ ++#define IE_POWER_CAPABILITY 33 /* 802.11h d3.3 */ ++#define IE_TPC_REQUEST 34 /* 802.11h d3.3 */ ++#define IE_TPC_REPORT 35 /* 802.11h d3.3 */ ++#define IE_SUPP_CHANNELS 36 /* 802.11h d3.3 */ ++#define IE_CHANNEL_SWITCH_ANNOUNCEMENT 37 /* 802.11h d3.3 */ ++#define IE_MEASUREMENT_REQUEST 38 /* 802.11h d3.3 */ ++#define IE_MEASUREMENT_REPORT 39 /* 802.11h d3.3 */ ++#define IE_QUIET 40 /* 802.11h d3.3 */ ++#define IE_IBSS_DFS 41 /* 802.11h d3.3 */ ++#define IE_ERP 42 /* 802.11g */ ++#define IE_TS_DELAY 43 /* 802.11e d9 */ ++#define IE_TCLAS_PROCESSING 44 /* 802.11e d9 */ ++#define IE_QOS_CAPABILITY 46 /* 802.11e d6 */ ++#define IE_HT_CAP 45 /* 802.11n d1. HT CAPABILITY. ELEMENT ID TBD */ ++#define IE_AP_CHANNEL_REPORT 51 /* 802.11k d6 */ ++#define IE_HT_CAP2 52 /* 802.11n d1. HT CAPABILITY. ELEMENT ID TBD */ ++#define IE_RSN 48 /* 802.11i d3.0 */ ++#define IE_WPA2 48 /* WPA2 */ ++#define IE_EXT_SUPP_RATES 50 /* 802.11g */ ++#define IE_SUPP_REG_CLASS 59 /* 802.11y. Supported regulatory classes. */ ++#define IE_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 60 /* 802.11n */ ++#define IE_ADD_HT 61 /* 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD */ ++#define IE_ADD_HT2 53 /* 802.11n d1. ADDITIONAL HT CAPABILITY. ELEMENT ID TBD */ ++ ++/* For 802.11n D3.03 */ ++/*#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet */ ++#define IE_SECONDARY_CH_OFFSET 62 /* 802.11n D3.03 Secondary Channel Offset element */ ++#define IE_WAPI 68 /* WAPI information element */ ++#define IE_2040_BSS_COEXIST 72 /* 802.11n D3.0.3 */ ++#define IE_2040_BSS_INTOLERANT_REPORT 73 /* 802.11n D3.03 */ ++#define IE_OVERLAPBSS_SCAN_PARM 74 /* 802.11n D3.03 */ ++#define IE_EXT_CAPABILITY 127 /* 802.11n D3.03 */ ++ ++#define IE_WPA 221 /* WPA */ ++#define IE_VENDOR_SPECIFIC 221 /* Wifi WMM (WME) */ ++ ++#define OUI_BROADCOM_HT 51 /* */ ++#define OUI_BROADCOM_HTADD 52 /* */ ++#define OUI_PREN_HT_CAP 51 /* */ ++#define OUI_PREN_ADD_HT 52 /* */ ++ ++/* CCX information */ ++#define IE_AIRONET_CKIP 133 /* CCX1.0 ID 85H for CKIP */ ++#define IE_AP_TX_POWER 150 /* CCX 2.0 for AP transmit power */ ++#define IE_MEASUREMENT_CAPABILITY 221 /* CCX 2.0 */ + #define IE_CCX_V2 221 +-#define IE_AIRONET_IPADDRESS 149 // CCX ID 95H for IP Address +-#define IE_AIRONET_CCKMREASSOC 156 // CCX ID 9CH for CCKM Reassociation Request element ++#define IE_AIRONET_IPADDRESS 149 /* CCX ID 95H for IP Address */ ++#define IE_AIRONET_CCKMREASSOC 156 /* CCX ID 9CH for CCKM Reassociation Request element */ + #define CKIP_NEGOTIATION_LENGTH 30 + #define AIRONET_IPADDRESS_LENGTH 10 + #define AIRONET_CCKMREASSOC_LENGTH 24 + +-// ======================================================== +-// MLME state machine definition +-// ======================================================== ++/* ======================================================== */ ++/* MLME state machine definition */ ++/* ======================================================== */ + +-// STA MLME state mahcines ++/* STA MLME state mahcines */ + #define ASSOC_STATE_MACHINE 1 + #define AUTH_STATE_MACHINE 2 + #define AUTH_RSP_STATE_MACHINE 3 + #define SYNC_STATE_MACHINE 4 + #define MLME_CNTL_STATE_MACHINE 5 + #define WPA_PSK_STATE_MACHINE 6 +-//#define LEAP_STATE_MACHINE 7 ++/*#define LEAP_STATE_MACHINE 7 */ + #define AIRONET_STATE_MACHINE 8 + #define ACTION_STATE_MACHINE 9 + +-// AP MLME state machines ++/* AP MLME state machines */ + #define AP_ASSOC_STATE_MACHINE 11 + #define AP_AUTH_STATE_MACHINE 12 + #define AP_SYNC_STATE_MACHINE 14 +@@ -611,9 +611,9 @@ + + #define WPA_STATE_MACHINE 23 + +-// +-// STA's CONTROL/CONNECT state machine: states, events, total function # +-// ++/* */ ++/* STA's CONTROL/CONNECT state machine: states, events, total function # */ ++/* */ + #define CNTL_IDLE 0 + #define CNTL_WAIT_DISASSOC 1 + #define CNTL_WAIT_JOIN 2 +@@ -626,7 +626,7 @@ + #define CNTL_WAIT_OID_DISASSOC 9 + #ifdef RTMP_MAC_USB + #define CNTL_WAIT_SCAN_FOR_CONNECT 10 +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #define MT2_ASSOC_CONF 34 + #define MT2_AUTH_CONF 35 +@@ -645,9 +645,9 @@ + + #define CNTL_FUNC_SIZE 1 + +-// +-// STA's ASSOC state machine: states, events, total function # +-// ++/* */ ++/* STA's ASSOC state machine: states, events, total function # */ ++/* */ + #define ASSOC_IDLE 0 + #define ASSOC_WAIT_RSP 1 + #define REASSOC_WAIT_RSP 2 +@@ -670,16 +670,16 @@ + + #define ASSOC_FUNC_SIZE (MAX_ASSOC_STATE * MAX_ASSOC_MSG) + +-// +-// ACT state machine: states, events, total function # +-// ++/* */ ++/* ACT state machine: states, events, total function # */ ++/* */ + #define ACT_IDLE 0 + #define MAX_ACT_STATE 1 + + #define ACT_MACHINE_BASE 0 + +-//Those PEER_xx_CATE number is based on real Categary value in IEEE spec. Please don'es modify it by your self. +-//Category ++/*Those PEER_xx_CATE number is based on real Categary value in IEEE spec. Please don'es modify it by your self. */ ++/*Category */ + #define MT2_PEER_SPECTRUM_CATE 0 + #define MT2_PEER_QOS_CATE 1 + #define MT2_PEER_DLS_CATE 2 +@@ -687,7 +687,7 @@ + #define MT2_PEER_PUBLIC_CATE 4 + #define MT2_PEER_RM_CATE 5 + /* "FT_CATEGORY_BSS_TRANSITION equal to 6" is defined file of "dot11r_ft.h" */ +-#define MT2_PEER_HT_CATE 7 // 7.4.7 ++#define MT2_PEER_HT_CATE 7 /* 7.4.7 */ + #define MAX_PEER_CATE_MSG 7 + + #define MT2_MLME_ADD_BA_CATE 8 +@@ -698,7 +698,7 @@ + #define MT2_ACT_INVALID 13 + #define MAX_ACT_MSG 14 + +-//Category field ++/*Category field */ + #define CATEGORY_SPECTRUM 0 + #define CATEGORY_QOS 1 + #define CATEGORY_DLS 2 +@@ -707,35 +707,35 @@ + #define CATEGORY_RM 5 + #define CATEGORY_HT 7 + +-// DLS Action frame definition ++/* DLS Action frame definition */ + #define ACTION_DLS_REQUEST 0 + #define ACTION_DLS_RESPONSE 1 + #define ACTION_DLS_TEARDOWN 2 + +-//Spectrum Action field value 802.11h 7.4.1 +-#define SPEC_MRQ 0 // Request +-#define SPEC_MRP 1 //Report ++/*Spectrum Action field value 802.11h 7.4.1 */ ++#define SPEC_MRQ 0 /* Request */ ++#define SPEC_MRP 1 /*Report */ + #define SPEC_TPCRQ 2 + #define SPEC_TPCRP 3 + #define SPEC_CHANNEL_SWITCH 4 + +-//BA Action field value ++/*BA Action field value */ + #define ADDBA_REQ 0 + #define ADDBA_RESP 1 + #define DELBA 2 + +-//Public's Action field value in Public Category. Some in 802.11y and some in 11n +-#define ACTION_BSS_2040_COEXIST 0 // 11n +-#define ACTION_DSE_ENABLEMENT 1 // 11y D9.0 +-#define ACTION_DSE_DEENABLEMENT 2 // 11y D9.0 +-#define ACTION_DSE_REG_LOCATION_ANNOUNCE 3 // 11y D9.0 +-#define ACTION_EXT_CH_SWITCH_ANNOUNCE 4 // 11y D9.0 +-#define ACTION_DSE_MEASUREMENT_REQ 5 // 11y D9.0 +-#define ACTION_DSE_MEASUREMENT_REPORT 6 // 11y D9.0 +-#define ACTION_MEASUREMENT_PILOT_ACTION 7 // 11y D9.0 +-#define ACTION_DSE_POWER_CONSTRAINT 8 // 11y D9.0 +- +-//HT Action field value ++/*Public's Action field value in Public Category. Some in 802.11y and some in 11n */ ++#define ACTION_BSS_2040_COEXIST 0 /* 11n */ ++#define ACTION_DSE_ENABLEMENT 1 /* 11y D9.0 */ ++#define ACTION_DSE_DEENABLEMENT 2 /* 11y D9.0 */ ++#define ACTION_DSE_REG_LOCATION_ANNOUNCE 3 /* 11y D9.0 */ ++#define ACTION_EXT_CH_SWITCH_ANNOUNCE 4 /* 11y D9.0 */ ++#define ACTION_DSE_MEASUREMENT_REQ 5 /* 11y D9.0 */ ++#define ACTION_DSE_MEASUREMENT_REPORT 6 /* 11y D9.0 */ ++#define ACTION_MEASUREMENT_PILOT_ACTION 7 /* 11y D9.0 */ ++#define ACTION_DSE_POWER_CONSTRAINT 8 /* 11y D9.0 */ ++ ++/*HT Action field value */ + #define NOTIFY_BW_ACTION 0 + #define SMPS_ACTION 1 + #define PSMP_ACTION 2 +@@ -747,9 +747,9 @@ + #define HT_INFO_EXCHANGE 8 + + #define ACT_FUNC_SIZE (MAX_ACT_STATE * MAX_ACT_MSG) +-// +-// STA's AUTHENTICATION state machine: states, evvents, total function # +-// ++/* */ ++/* STA's AUTHENTICATION state machine: states, evvents, total function # */ ++/* */ + #define AUTH_REQ_IDLE 0 + #define AUTH_WAIT_SEQ2 1 + #define AUTH_WAIT_SEQ4 2 +@@ -763,9 +763,9 @@ + + #define AUTH_FUNC_SIZE (MAX_AUTH_STATE * MAX_AUTH_MSG) + +-// +-// STA's AUTH_RSP state machine: states, events, total function # +-// ++/* */ ++/* STA's AUTH_RSP state machine: states, events, total function # */ ++/* */ + #define AUTH_RSP_IDLE 0 + #define AUTH_RSP_WAIT_CHAL 1 + #define MAX_AUTH_RSP_STATE 2 +@@ -778,10 +778,10 @@ + + #define AUTH_RSP_FUNC_SIZE (MAX_AUTH_RSP_STATE * MAX_AUTH_RSP_MSG) + +-// +-// STA's SYNC state machine: states, events, total function # +-// +-#define SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state ++/* */ ++/* STA's SYNC state machine: states, events, total function # */ ++/* */ ++#define SYNC_IDLE 0 /* merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state */ + #define JOIN_WAIT_BEACON 1 + #define SCAN_LISTEN 2 + #define MAX_SYNC_STATE 3 +@@ -801,7 +801,7 @@ + + #define SYNC_FUNC_SIZE (MAX_SYNC_STATE * MAX_SYNC_MSG) + +-//Messages for the DLS state machine ++/*Messages for the DLS state machine */ + #define DLS_IDLE 0 + #define MAX_DLS_STATE 1 + +@@ -815,18 +815,18 @@ + + #define DLS_FUNC_SIZE (MAX_DLS_STATE * MAX_DLS_MSG) + +-// +-// WSC State machine: states, events, total function # +-// ++/* */ ++/* WSC State machine: states, events, total function # */ ++/* */ + +-// +-// AP's CONTROL/CONNECT state machine: states, events, total function # +-// ++/* */ ++/* AP's CONTROL/CONNECT state machine: states, events, total function # */ ++/* */ + #define AP_CNTL_FUNC_SIZE 1 + +-// +-// AP's ASSOC state machine: states, events, total function # +-// ++/* */ ++/* AP's ASSOC state machine: states, events, total function # */ ++/* */ + #define AP_ASSOC_IDLE 0 + #define AP_MAX_ASSOC_STATE 1 + +@@ -840,9 +840,9 @@ + + #define AP_ASSOC_FUNC_SIZE (AP_MAX_ASSOC_STATE * AP_MAX_ASSOC_MSG) + +-// +-// AP's AUTHENTICATION state machine: states, events, total function # +-// ++/* */ ++/* AP's AUTHENTICATION state machine: states, events, total function # */ ++/* */ + #define AP_AUTH_REQ_IDLE 0 + #define AP_MAX_AUTH_STATE 1 + +@@ -856,9 +856,9 @@ + + #define AP_AUTH_FUNC_SIZE (AP_MAX_AUTH_STATE * AP_MAX_AUTH_MSG) + +-// +-// AP's SYNC state machine: states, events, total function # +-// ++/* */ ++/* AP's SYNC state machine: states, events, total function # */ ++/* */ + #define AP_SYNC_IDLE 0 + #define AP_SCAN_LISTEN 1 + #define AP_MAX_SYNC_STATE 2 +@@ -874,9 +874,9 @@ + + #define AP_SYNC_FUNC_SIZE (AP_MAX_SYNC_STATE * AP_MAX_SYNC_MSG) + +-// +-// Common WPA state machine: states, events, total function # +-// ++/* */ ++/* Common WPA state machine: states, events, total function # */ ++/* */ + #define WPA_PTK 0 + #define MAX_WPA_PTK_STATE 1 + +@@ -890,14 +890,14 @@ + + #define WPA_FUNC_SIZE (MAX_WPA_PTK_STATE * MAX_WPA_MSG) + +-// ============================================================================= ++/* ============================================================================= */ + +-// value domain of 802.11 header FC.Tyte, which is b3..b2 of the 1st-byte of MAC header ++/* value domain of 802.11 header FC.Tyte, which is b3..b2 of the 1st-byte of MAC header */ + #define BTYPE_MGMT 0 + #define BTYPE_CNTL 1 + #define BTYPE_DATA 2 + +-// value domain of 802.11 MGMT frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header ++/* value domain of 802.11 MGMT frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header */ + #define SUBTYPE_ASSOC_REQ 0 + #define SUBTYPE_ASSOC_RSP 1 + #define SUBTYPE_REASSOC_REQ 2 +@@ -912,7 +912,7 @@ + #define SUBTYPE_ACTION 13 + #define SUBTYPE_ACTION_NO_ACK 14 + +-// value domain of 802.11 CNTL frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header ++/* value domain of 802.11 CNTL frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header */ + #define SUBTYPE_WRAPPER 7 + #define SUBTYPE_BLOCK_ACK_REQ 8 + #define SUBTYPE_BLOCK_ACK 9 +@@ -923,7 +923,7 @@ + #define SUBTYPE_CFEND 14 + #define SUBTYPE_CFEND_CFACK 15 + +-// value domain of 802.11 DATA frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header ++/* value domain of 802.11 DATA frame's FC.subtype, which is b7..4 of the 1st-byte of MAC header */ + #define SUBTYPE_DATA 0 + #define SUBTYPE_DATA_CFACK 1 + #define SUBTYPE_DATA_CFPOLL 2 +@@ -941,15 +941,15 @@ + #define SUBTYPE_QOS_CFPOLL 14 + #define SUBTYPE_QOS_CFACK_CFPOLL 15 + +-// ACK policy of QOS Control field bit 6:5 +-#define NORMAL_ACK 0x00 // b6:5 = 00 +-#define NO_ACK 0x20 // b6:5 = 01 +-#define NO_EXPLICIT_ACK 0x40 // b6:5 = 10 +-#define BLOCK_ACK 0x60 // b6:5 = 11 ++/* ACK policy of QOS Control field bit 6:5 */ ++#define NORMAL_ACK 0x00 /* b6:5 = 00 */ ++#define NO_ACK 0x20 /* b6:5 = 01 */ ++#define NO_EXPLICIT_ACK 0x40 /* b6:5 = 10 */ ++#define BLOCK_ACK 0x60 /* b6:5 = 11 */ + +-// +-// rtmp_data.c use these definition +-// ++/* */ ++/* rtmp_data.c use these definition */ ++/* */ + #define LENGTH_802_11 24 + #define LENGTH_802_11_AND_H 30 + #define LENGTH_802_11_CRC_H 34 +@@ -965,40 +965,40 @@ + #define LENGTH_802_3_NO_TYPE 12 + #define LENGTH_802_1Q 4 /* VLAN related */ + +-// STA_CSR4.field.TxResult ++/* STA_CSR4.field.TxResult */ + #define TX_RESULT_SUCCESS 0 + #define TX_RESULT_ZERO_LENGTH 1 + #define TX_RESULT_UNDER_RUN 2 + #define TX_RESULT_OHY_ERROR 4 + #define TX_RESULT_RETRY_FAIL 6 + +-// All PHY rate summary in TXD +-// Preamble MODE in TxD ++/* All PHY rate summary in TXD */ ++/* Preamble MODE in TxD */ + #define MODE_CCK 0 + #define MODE_OFDM 1 + #define MODE_HTMIX 2 + #define MODE_HTGREENFIELD 3 + +-// MCS for CCK. BW.SGI.STBC are reserved +-#define MCS_LONGP_RATE_1 0 // long preamble CCK 1Mbps +-#define MCS_LONGP_RATE_2 1 // long preamble CCK 1Mbps ++/* MCS for CCK. BW.SGI.STBC are reserved */ ++#define MCS_LONGP_RATE_1 0 /* long preamble CCK 1Mbps */ ++#define MCS_LONGP_RATE_2 1 /* long preamble CCK 1Mbps */ + #define MCS_LONGP_RATE_5_5 2 + #define MCS_LONGP_RATE_11 3 +-#define MCS_SHORTP_RATE_1 4 // long preamble CCK 1Mbps. short is forbidden in 1Mbps +-#define MCS_SHORTP_RATE_2 5 // short preamble CCK 2Mbps ++#define MCS_SHORTP_RATE_1 4 /* long preamble CCK 1Mbps. short is forbidden in 1Mbps */ ++#define MCS_SHORTP_RATE_2 5 /* short preamble CCK 2Mbps */ + #define MCS_SHORTP_RATE_5_5 6 + #define MCS_SHORTP_RATE_11 7 +-// To send duplicate legacy OFDM. set BW=BW_40. SGI.STBC are reserved +-#define MCS_RATE_6 0 // legacy OFDM +-#define MCS_RATE_9 1 // OFDM +-#define MCS_RATE_12 2 // OFDM +-#define MCS_RATE_18 3 // OFDM +-#define MCS_RATE_24 4 // OFDM +-#define MCS_RATE_36 5 // OFDM +-#define MCS_RATE_48 6 // OFDM +-#define MCS_RATE_54 7 // OFDM +-// HT +-#define MCS_0 0 // 1S ++/* To send duplicate legacy OFDM. set BW=BW_40. SGI.STBC are reserved */ ++#define MCS_RATE_6 0 /* legacy OFDM */ ++#define MCS_RATE_9 1 /* OFDM */ ++#define MCS_RATE_12 2 /* OFDM */ ++#define MCS_RATE_18 3 /* OFDM */ ++#define MCS_RATE_24 4 /* OFDM */ ++#define MCS_RATE_36 5 /* OFDM */ ++#define MCS_RATE_48 6 /* OFDM */ ++#define MCS_RATE_54 7 /* OFDM */ ++/* HT */ ++#define MCS_0 0 /* 1S */ + #define MCS_1 1 + #define MCS_2 2 + #define MCS_3 3 +@@ -1006,7 +1006,7 @@ + #define MCS_5 5 + #define MCS_6 6 + #define MCS_7 7 +-#define MCS_8 8 // 2S ++#define MCS_8 8 /* 2S */ + #define MCS_9 9 + #define MCS_10 10 + #define MCS_11 11 +@@ -1014,7 +1014,7 @@ + #define MCS_13 13 + #define MCS_14 14 + #define MCS_15 15 +-#define MCS_16 16 // 3*3 ++#define MCS_16 16 /* 3*3 */ + #define MCS_17 17 + #define MCS_18 18 + #define MCS_19 19 +@@ -1025,48 +1025,48 @@ + #define MCS_32 32 + #define MCS_AUTO 33 + +-// OID_HTPHYMODE +-// MODE ++/* OID_HTPHYMODE */ ++/* MODE */ + #define HTMODE_MM 0 + #define HTMODE_GF 1 + +-// Fixed Tx MODE - HT, CCK or OFDM ++/* Fixed Tx MODE - HT, CCK or OFDM */ + #define FIXED_TXMODE_HT 0 + #define FIXED_TXMODE_CCK 1 + #define FIXED_TXMODE_OFDM 2 +-// BW ++/* BW */ + #define BW_20 BAND_WIDTH_20 + #define BW_40 BAND_WIDTH_40 + #define BW_BOTH BAND_WIDTH_BOTH +-#define BW_10 BAND_WIDTH_10 // 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. ++#define BW_10 BAND_WIDTH_10 /* 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field. */ + +-// SHORTGI +-#define GI_400 GAP_INTERVAL_400 // only support in HT mode ++/* SHORTGI */ ++#define GI_400 GAP_INTERVAL_400 /* only support in HT mode */ + #define GI_BOTH GAP_INTERVAL_BOTH + #define GI_800 GAP_INTERVAL_800 +-// STBC ++/* STBC */ + #define STBC_NONE 0 +-#define STBC_USE 1 // limited use in rt2860b phy +-#define RXSTBC_ONE 1 // rx support of one spatial stream +-#define RXSTBC_TWO 2 // rx support of 1 and 2 spatial stream +-#define RXSTBC_THR 3 // rx support of 1~3 spatial stream +-// MCS FEEDBACK +-#define MCSFBK_NONE 0 // not support mcs feedback / +-#define MCSFBK_RSV 1 // reserved +-#define MCSFBK_UNSOLICIT 2 // only support unsolict mcs feedback +-#define MCSFBK_MRQ 3 // response to both MRQ and unsolict mcs feedback +- +-// MIMO power safe ++#define STBC_USE 1 /* limited use in rt2860b phy */ ++#define RXSTBC_ONE 1 /* rx support of one spatial stream */ ++#define RXSTBC_TWO 2 /* rx support of 1 and 2 spatial stream */ ++#define RXSTBC_THR 3 /* rx support of 1~3 spatial stream */ ++/* MCS FEEDBACK */ ++#define MCSFBK_NONE 0 /* not support mcs feedback / */ ++#define MCSFBK_RSV 1 /* reserved */ ++#define MCSFBK_UNSOLICIT 2 /* only support unsolict mcs feedback */ ++#define MCSFBK_MRQ 3 /* response to both MRQ and unsolict mcs feedback */ ++ ++/* MIMO power safe */ + #define MMPS_STATIC 0 + #define MMPS_DYNAMIC 1 + #define MMPS_RSV 2 + #define MMPS_ENABLE 3 + +-// A-MSDU size ++/* A-MSDU size */ + #define AMSDU_0 0 + #define AMSDU_1 1 + +-// MCS use 7 bits ++/* MCS use 7 bits */ + #define TXRATEMIMO 0x80 + #define TXRATEMCS 0x7F + #define TXRATEOFDM 0x7F +@@ -1074,77 +1074,77 @@ + #define RATE_2 1 + #define RATE_5_5 2 + #define RATE_11 3 +-#define RATE_6 4 // OFDM +-#define RATE_9 5 // OFDM +-#define RATE_12 6 // OFDM +-#define RATE_18 7 // OFDM +-#define RATE_24 8 // OFDM +-#define RATE_36 9 // OFDM +-#define RATE_48 10 // OFDM +-#define RATE_54 11 // OFDM ++#define RATE_6 4 /* OFDM */ ++#define RATE_9 5 /* OFDM */ ++#define RATE_12 6 /* OFDM */ ++#define RATE_18 7 /* OFDM */ ++#define RATE_24 8 /* OFDM */ ++#define RATE_36 9 /* OFDM */ ++#define RATE_48 10 /* OFDM */ ++#define RATE_54 11 /* OFDM */ + #define RATE_FIRST_OFDM_RATE RATE_6 + #define RATE_LAST_OFDM_RATE RATE_54 +-#define RATE_6_5 12 // HT mix +-#define RATE_13 13 // HT mix +-#define RATE_19_5 14 // HT mix +-#define RATE_26 15 // HT mix +-#define RATE_39 16 // HT mix +-#define RATE_52 17 // HT mix +-#define RATE_58_5 18 // HT mix +-#define RATE_65 19 // HT mix +-#define RATE_78 20 // HT mix +-#define RATE_104 21 // HT mix +-#define RATE_117 22 // HT mix +-#define RATE_130 23 // HT mix +-//#define RATE_AUTO_SWITCH 255 // for StaCfg.FixedTxRate only ++#define RATE_6_5 12 /* HT mix */ ++#define RATE_13 13 /* HT mix */ ++#define RATE_19_5 14 /* HT mix */ ++#define RATE_26 15 /* HT mix */ ++#define RATE_39 16 /* HT mix */ ++#define RATE_52 17 /* HT mix */ ++#define RATE_58_5 18 /* HT mix */ ++#define RATE_65 19 /* HT mix */ ++#define RATE_78 20 /* HT mix */ ++#define RATE_104 21 /* HT mix */ ++#define RATE_117 22 /* HT mix */ ++#define RATE_130 23 /* HT mix */ ++/*#define RATE_AUTO_SWITCH 255 // for StaCfg.FixedTxRate only */ + #define HTRATE_0 12 + #define RATE_FIRST_MM_RATE HTRATE_0 + #define RATE_FIRST_HT_RATE HTRATE_0 + #define RATE_LAST_HT_RATE HTRATE_0 + +-// pTxWI->txop +-#define IFS_HTTXOP 0 // The txop will be handles by ASIC. ++/* pTxWI->txop */ ++#define IFS_HTTXOP 0 /* The txop will be handles by ASIC. */ + #define IFS_PIFS 1 + #define IFS_SIFS 2 + #define IFS_BACKOFF 3 + +-// pTxD->RetryMode ++/* pTxD->RetryMode */ + #define LONG_RETRY 1 + #define SHORT_RETRY 0 + +-// Country Region definition ++/* Country Region definition */ + #define REGION_MINIMUM_BG_BAND 0 +-#define REGION_0_BG_BAND 0 // 1-11 +-#define REGION_1_BG_BAND 1 // 1-13 +-#define REGION_2_BG_BAND 2 // 10-11 +-#define REGION_3_BG_BAND 3 // 10-13 +-#define REGION_4_BG_BAND 4 // 14 +-#define REGION_5_BG_BAND 5 // 1-14 +-#define REGION_6_BG_BAND 6 // 3-9 +-#define REGION_7_BG_BAND 7 // 5-13 +-#define REGION_31_BG_BAND 31 // 5-13 ++#define REGION_0_BG_BAND 0 /* 1-11 */ ++#define REGION_1_BG_BAND 1 /* 1-13 */ ++#define REGION_2_BG_BAND 2 /* 10-11 */ ++#define REGION_3_BG_BAND 3 /* 10-13 */ ++#define REGION_4_BG_BAND 4 /* 14 */ ++#define REGION_5_BG_BAND 5 /* 1-14 */ ++#define REGION_6_BG_BAND 6 /* 3-9 */ ++#define REGION_7_BG_BAND 7 /* 5-13 */ ++#define REGION_31_BG_BAND 31 /* 5-13 */ + #define REGION_MAXIMUM_BG_BAND 7 + + #define REGION_MINIMUM_A_BAND 0 +-#define REGION_0_A_BAND 0 // 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 +-#define REGION_1_A_BAND 1 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_2_A_BAND 2 // 36, 40, 44, 48, 52, 56, 60, 64 +-#define REGION_3_A_BAND 3 // 52, 56, 60, 64, 149, 153, 157, 161 +-#define REGION_4_A_BAND 4 // 149, 153, 157, 161, 165 +-#define REGION_5_A_BAND 5 // 149, 153, 157, 161 +-#define REGION_6_A_BAND 6 // 36, 40, 44, 48 +-#define REGION_7_A_BAND 7 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 +-#define REGION_8_A_BAND 8 // 52, 56, 60, 64 +-#define REGION_9_A_BAND 9 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_10_A_BAND 10 // 36, 40, 44, 48, 149, 153, 157, 161, 165 +-#define REGION_11_A_BAND 11 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 +-#define REGION_12_A_BAND 12 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 +-#define REGION_13_A_BAND 13 // 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 +-#define REGION_14_A_BAND 14 // 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 +-#define REGION_15_A_BAND 15 // 149, 153, 157, 161, 165, 169, 173 ++#define REGION_0_A_BAND 0 /* 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 */ ++#define REGION_1_A_BAND 1 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 */ ++#define REGION_2_A_BAND 2 /* 36, 40, 44, 48, 52, 56, 60, 64 */ ++#define REGION_3_A_BAND 3 /* 52, 56, 60, 64, 149, 153, 157, 161 */ ++#define REGION_4_A_BAND 4 /* 149, 153, 157, 161, 165 */ ++#define REGION_5_A_BAND 5 /* 149, 153, 157, 161 */ ++#define REGION_6_A_BAND 6 /* 36, 40, 44, 48 */ ++#define REGION_7_A_BAND 7 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 */ ++#define REGION_8_A_BAND 8 /* 52, 56, 60, 64 */ ++#define REGION_9_A_BAND 9 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165 */ ++#define REGION_10_A_BAND 10 /* 36, 40, 44, 48, 149, 153, 157, 161, 165 */ ++#define REGION_11_A_BAND 11 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161 */ ++#define REGION_12_A_BAND 12 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 */ ++#define REGION_13_A_BAND 13 /* 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161 */ ++#define REGION_14_A_BAND 14 /* 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165 */ ++#define REGION_15_A_BAND 15 /* 149, 153, 157, 161, 165, 169, 173 */ + #define REGION_MAXIMUM_A_BAND 15 + +-// pTxD->CipherAlg ++/* pTxD->CipherAlg */ + #define CIPHER_NONE 0 + #define CIPHER_WEP64 1 + #define CIPHER_WEP128 2 +@@ -1152,10 +1152,10 @@ + #define CIPHER_AES 4 + #define CIPHER_CKIP64 5 + #define CIPHER_CKIP128 6 +-#define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table ++#define CIPHER_TKIP_NO_MIC 7 /* MIC appended by driver: not a valid value in hardware key table */ + #define CIPHER_SMS4 8 + +-// LED Status. ++/* LED Status. */ + #define LED_LINK_DOWN 0 + #define LED_LINK_UP 1 + #define LED_RADIO_OFF 2 +@@ -1165,35 +1165,35 @@ + #define LED_ON_SITE_SURVEY 6 + #define LED_POWER_UP 7 + +-// value domain of pAd->LedCntl.LedMode and E2PROM ++/* value domain of pAd->LedCntl.LedMode and E2PROM */ + #define LED_MODE_DEFAULT 0 + #define LED_MODE_TWO_LED 1 +-//#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 +-#define LED_MODE_SIGNAL_STREGTH 0x40 // EEPROM define = 64 ++/*#define LED_MODE_SIGNAL_STREGTH 8 // EEPROM define =8 */ ++#define LED_MODE_SIGNAL_STREGTH 0x40 /* EEPROM define = 64 */ + +-// RC4 init value, used fro WEP & TKIP ++/* RC4 init value, used fro WEP & TKIP */ + #define PPPINITFCS32 0xffffffff /* Initial FCS value */ + +-// value domain of pAd->StaCfg.PortSecured. 802.1X controlled port definition ++/* value domain of pAd->StaCfg.PortSecured. 802.1X controlled port definition */ + #define WPA_802_1X_PORT_SECURED 1 + #define WPA_802_1X_PORT_NOT_SECURED 2 + + #define PAIRWISE_KEY 1 + #define GROUP_KEY 2 + +-//definition of DRS ++/*definition of DRS */ + #define MAX_STEP_OF_TX_RATE_SWITCH 32 + +-// pre-allocated free NDIS PACKET/BUFFER poll for internal usage ++/* pre-allocated free NDIS PACKET/BUFFER poll for internal usage */ + #define MAX_NUM_OF_FREE_NDIS_PACKET 128 + +-//Block ACK ++/*Block ACK */ + #define MAX_TX_REORDERBUF 64 + #define MAX_RX_REORDERBUF 64 + #define DEFAULT_TX_TIMEOUT 30 + #define DEFAULT_RX_TIMEOUT 30 + +-// definition of Recipient or Originator ++/* definition of Recipient or Originator */ + #define I_RECIPIENT TRUE + #define I_ORIGINATOR FALSE + +@@ -1201,43 +1201,43 @@ + #define DEFAULT_RF_TX_POWER 5 + + #define MAX_INI_BUFFER_SIZE 4096 +-#define MAX_PARAM_BUFFER_SIZE (2048) // enough for ACL (18*64) +- //18 : the length of Mac address acceptable format "01:02:03:04:05:06;") +- //64 : MAX_NUM_OF_ACL_LIST +-// definition of pAd->OpMode ++#define MAX_PARAM_BUFFER_SIZE (2048) /* enough for ACL (18*64) */ ++ /*18 : the length of Mac address acceptable format "01:02:03:04:05:06;") */ ++ /*64 : MAX_NUM_OF_ACL_LIST */ ++/* definition of pAd->OpMode */ + #define OPMODE_STA 0 + #define OPMODE_AP 1 +-//#define OPMODE_L3_BRG 2 // as AP and STA at the same time +- +-// ========================= AP rtmp_def.h =========================== +-// value domain for pAd->EventTab.Log[].Event +-#define EVENT_RESET_ACCESS_POINT 0 // Log = "hh:mm:ss Restart Access Point" +-#define EVENT_ASSOCIATED 1 // Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" +-#define EVENT_DISASSOCIATED 2 // Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" +-#define EVENT_AGED_OUT 3 // Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" ++/*#define OPMODE_L3_BRG 2 // as AP and STA at the same time */ ++ ++/* ========================= AP rtmp_def.h =========================== */ ++/* value domain for pAd->EventTab.Log[].Event */ ++#define EVENT_RESET_ACCESS_POINT 0 /* Log = "hh:mm:ss Restart Access Point" */ ++#define EVENT_ASSOCIATED 1 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" */ ++#define EVENT_DISASSOCIATED 2 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" */ ++#define EVENT_AGED_OUT 3 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" */ + #define EVENT_COUNTER_M 4 + #define EVENT_INVALID_PSK 5 + #define EVENT_MAX_EVENT_TYPE 6 +-// ==== end of AP rtmp_def.h ============ ++/* ==== end of AP rtmp_def.h ============ */ + +-// definition RSSI Number ++/* definition RSSI Number */ + #define RSSI_0 0 + #define RSSI_1 1 + #define RSSI_2 2 + +-// definition of radar detection +-#define RD_NORMAL_MODE 0 // Not found radar signal +-#define RD_SWITCHING_MODE 1 // Found radar signal, and doing channel switch +-#define RD_SILENCE_MODE 2 // After channel switch, need to be silence a while to ensure radar not found ++/* definition of radar detection */ ++#define RD_NORMAL_MODE 0 /* Not found radar signal */ ++#define RD_SWITCHING_MODE 1 /* Found radar signal, and doing channel switch */ ++#define RD_SILENCE_MODE 2 /* After channel switch, need to be silence a while to ensure radar not found */ + +-//Driver defined cid for mapping status and command. ++/*Driver defined cid for mapping status and command. */ + #define SLEEPCID 0x11 + #define WAKECID 0x22 + #define QUERYPOWERCID 0x33 + #define OWNERMCU 0x1 + #define OWNERCPU 0x0 + +-// MBSSID definition ++/* MBSSID definition */ + #define ENTRY_NOT_FOUND 0xFF + + /* After Linux 2.6.9, +@@ -1259,15 +1259,15 @@ + #define INF_APCLI_DEV_NAME "apcli" + #define INF_MESH_DEV_NAME "mesh" + +-// WEP Key TYPE ++/* WEP Key TYPE */ + #define WEP_HEXADECIMAL_TYPE 0 + #define WEP_ASCII_TYPE 1 + +-// WIRELESS EVENTS definition ++/* WIRELESS EVENTS definition */ + /* Max number of char in custom event, refer to wireless_tools.28/wireless.20.h */ + #define IW_CUSTOM_MAX_LEN 255 /* In bytes */ + +-// For system event - start ++/* For system event - start */ + #define IW_SYS_EVENT_FLAG_START 0x0200 + #define IW_ASSOC_EVENT_FLAG 0x0200 + #define IW_DISASSOC_EVENT_FLAG 0x0201 +@@ -1288,12 +1288,12 @@ + #define IW_STA_LINKDOWN_EVENT_FLAG 0x0210 + #define IW_SCAN_COMPLETED_EVENT_FLAG 0x0211 + #define IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG 0x0212 +-// if add new system event flag, please upadte the IW_SYS_EVENT_FLAG_END ++/* if add new system event flag, please upadte the IW_SYS_EVENT_FLAG_END */ + #define IW_SYS_EVENT_FLAG_END 0x0212 + #define IW_SYS_EVENT_TYPE_NUM (IW_SYS_EVENT_FLAG_END - IW_SYS_EVENT_FLAG_START + 1) +-// For system event - end ++/* For system event - end */ + +-// For spoof attack event - start ++/* For spoof attack event - start */ + #define IW_SPOOF_EVENT_FLAG_START 0x0300 + #define IW_CONFLICT_SSID_EVENT_FLAG 0x0300 + #define IW_SPOOF_ASSOC_RESP_EVENT_FLAG 0x0301 +@@ -1305,12 +1305,12 @@ + #define IW_SPOOF_DEAUTH_EVENT_FLAG 0x0307 + #define IW_SPOOF_UNKNOWN_MGMT_EVENT_FLAG 0x0308 + #define IW_REPLAY_ATTACK_EVENT_FLAG 0x0309 +-// if add new spoof attack event flag, please upadte the IW_SPOOF_EVENT_FLAG_END ++/* if add new spoof attack event flag, please upadte the IW_SPOOF_EVENT_FLAG_END */ + #define IW_SPOOF_EVENT_FLAG_END 0x0309 + #define IW_SPOOF_EVENT_TYPE_NUM (IW_SPOOF_EVENT_FLAG_END - IW_SPOOF_EVENT_FLAG_START + 1) +-// For spoof attack event - end ++/* For spoof attack event - end */ + +-// For flooding attack event - start ++/* For flooding attack event - start */ + #define IW_FLOOD_EVENT_FLAG_START 0x0400 + #define IW_FLOOD_AUTH_EVENT_FLAG 0x0400 + #define IW_FLOOD_ASSOC_REQ_EVENT_FLAG 0x0401 +@@ -1319,18 +1319,18 @@ + #define IW_FLOOD_DISASSOC_EVENT_FLAG 0x0404 + #define IW_FLOOD_DEAUTH_EVENT_FLAG 0x0405 + #define IW_FLOOD_EAP_REQ_EVENT_FLAG 0x0406 +-// if add new flooding attack event flag, please upadte the IW_FLOOD_EVENT_FLAG_END ++/* if add new flooding attack event flag, please upadte the IW_FLOOD_EVENT_FLAG_END */ + #define IW_FLOOD_EVENT_FLAG_END 0x0406 + #define IW_FLOOD_EVENT_TYPE_NUM (IW_FLOOD_EVENT_FLAG_END - IW_FLOOD_EVENT_FLAG_START + 1) +-// For flooding attack - end ++/* For flooding attack - end */ + +-// End - WIRELESS EVENTS definition ++/* End - WIRELESS EVENTS definition */ + +-// definition for DLS, kathy ++/* definition for DLS, kathy */ + #define MAX_NUM_OF_INIT_DLS_ENTRY 1 + #define MAX_NUM_OF_DLS_ENTRY MAX_NUMBER_OF_DLS_ENTRY + +-//Block ACK, kathy ++/*Block ACK, kathy */ + #define MAX_TX_REORDERBUF 64 + #define MAX_RX_REORDERBUF 64 + #define DEFAULT_TX_TIMEOUT 30 +@@ -1342,19 +1342,19 @@ + #define IW_ESSID_MAX_SIZE 32 + #endif + +-// For AsicRadioOff/AsicRadioOn function ++/* For AsicRadioOff/AsicRadioOn function */ + #define DOT11POWERSAVE 0 + #define GUIRADIO_OFF 1 + #define RTMP_HALT 2 + #define GUI_IDLE_POWER_SAVE 3 +-// -- ++/* -- */ + +-// definition for WpaSupport flag ++/* definition for WpaSupport flag */ + #define WPA_SUPPLICANT_DISABLE 0 + #define WPA_SUPPLICANT_ENABLE 1 + #define WPA_SUPPLICANT_ENABLE_WITH_WEB_UI 2 + +-// Endian byte swapping codes ++/* Endian byte swapping codes */ + #define SWAP16(x) \ + ((UINT16)( \ + (((UINT16)(x) & (UINT16) 0x00ffU) << 8) | \ +@@ -1423,4 +1423,4 @@ do{ \ + } \ + }while(0) + +-#endif // __RTMP_DEF_H__ ++#endif /* __RTMP_DEF_H__ */ +diff --git a/drivers/staging/rt2860/rtmp_dot11.h b/drivers/staging/rt2860/rtmp_dot11.h +index 051840f..fd9c720 100644 +--- a/drivers/staging/rt2860/rtmp_dot11.h ++++ b/drivers/staging/rt2860/rtmp_dot11.h +@@ -30,46 +30,46 @@ + + #include "rtmp_type.h" + +-// 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. ++/* 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. */ + typedef struct PACKED { +- UINT32 MA:1; //management action payload exist in (QoS Null+HTC) +- UINT32 TRQ:1; //sounding request +- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback +- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. +- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB. +- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available +- UINT32 CalPos:2; // calibration position +- UINT32 CalSeq:2; //calibration sequence +- UINT32 FBKReq:2; //feedback request +- UINT32 CSISTEERING:2; //CSI/ STEERING +- UINT32 ZLFAnnouce:1; // ZLF announcement +- UINT32 rsv:5; //calibration sequence +- UINT32 ACConstraint:1; //feedback request +- UINT32 RDG:1; //RDG / More PPDU ++ UINT32 MA:1; /*management action payload exist in (QoS Null+HTC) */ ++ UINT32 TRQ:1; /*sounding request */ ++ UINT32 MRQ:1; /*MCS feedback. Request for a MCS feedback */ ++ UINT32 MRSorASI:3; /* MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. */ ++ UINT32 MFS:3; /*SET to the received value of MRS. 0x111 for unsolicited MFB. */ ++ UINT32 MFBorASC:7; /*Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available */ ++ UINT32 CalPos:2; /* calibration position */ ++ UINT32 CalSeq:2; /*calibration sequence */ ++ UINT32 FBKReq:2; /*feedback request */ ++ UINT32 CSISTEERING:2; /*CSI/ STEERING */ ++ UINT32 ZLFAnnouce:1; /* ZLF announcement */ ++ UINT32 rsv:5; /*calibration sequence */ ++ UINT32 ACConstraint:1; /*feedback request */ ++ UINT32 RDG:1; /*RDG / More PPDU */ + } HT_CONTROL, *PHT_CONTROL; + +-// 2-byte QOS CONTROL field ++/* 2-byte QOS CONTROL field */ + typedef struct PACKED { + USHORT TID:4; + USHORT EOSP:1; +- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA ++ USHORT AckPolicy:2; /*0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA */ + USHORT AMsduPresent:1; + USHORT Txop_QueueSize:8; + } QOS_CONTROL, *PQOS_CONTROL; + +-// 2-byte Frame control field ++/* 2-byte Frame control field */ + typedef struct PACKED { +- USHORT Ver:2; // Protocol version +- USHORT Type:2; // MSDU type +- USHORT SubType:4; // MSDU subtype +- USHORT ToDs:1; // To DS indication +- USHORT FrDs:1; // From DS indication +- USHORT MoreFrag:1; // More fragment bit +- USHORT Retry:1; // Retry status bit +- USHORT PwrMgmt:1; // Power management bit +- USHORT MoreData:1; // More data bit +- USHORT Wep:1; // Wep data +- USHORT Order:1; // Strict order expected ++ USHORT Ver:2; /* Protocol version */ ++ USHORT Type:2; /* MSDU type */ ++ USHORT SubType:4; /* MSDU subtype */ ++ USHORT ToDs:1; /* To DS indication */ ++ USHORT FrDs:1; /* From DS indication */ ++ USHORT MoreFrag:1; /* More fragment bit */ ++ USHORT Retry:1; /* Retry status bit */ ++ USHORT PwrMgmt:1; /* Power management bit */ ++ USHORT MoreData:1; /* More data bit */ ++ USHORT Wep:1; /* Wep data */ ++ USHORT Order:1; /* Strict order expected */ + } FRAME_CONTROL, *PFRAME_CONTROL; + + typedef struct PACKED _HEADER_802_11 { +@@ -97,4 +97,4 @@ typedef struct PACKED _RTS_FRAME { + UCHAR Addr2[MAC_ADDR_LEN]; + } RTS_FRAME, *PRTS_FRAME; + +-#endif // __DOT11_BASE_H__ // ++#endif /* __DOT11_BASE_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_iface.h b/drivers/staging/rt2860/rtmp_iface.h +index eee17d4..84b08a0 100644 +--- a/drivers/staging/rt2860/rtmp_iface.h ++++ b/drivers/staging/rt2860/rtmp_iface.h +@@ -39,19 +39,19 @@ + + #ifdef RTMP_PCI_SUPPORT + #include "iface/rtmp_pci.h" +-#endif // RTMP_PCI_SUPPORT // ++#endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + #include "iface/rtmp_usb.h" +-#endif // RTMP_USB_SUPPORT // ++#endif /* RTMP_USB_SUPPORT // */ + + typedef struct _INF_PCI_CONFIG_ { +- unsigned long CSRBaseAddress; // PCI MMIO Base Address, all access will use ++ unsigned long CSRBaseAddress; /* PCI MMIO Base Address, all access will use */ + unsigned int irq_num; + } INF_PCI_CONFIG; + + typedef struct _INF_USB_CONFIG_ { +- UINT8 BulkInEpAddr; // bulk-in endpoint address +- UINT8 BulkOutEpAddr[6]; // bulk-out endpoint address ++ UINT8 BulkInEpAddr; /* bulk-in endpoint address */ ++ UINT8 BulkOutEpAddr[6]; /* bulk-out endpoint address */ + } INF_USB_CONFIG; + + typedef struct _INF_RBUS_CONFIG_ { +@@ -72,4 +72,4 @@ typedef union _RTMP_INF_CONFIG_ { + struct _INF_RBUS_CONFIG_ rbusConfig; + } RTMP_INF_CONFIG; + +-#endif // __RTMP_IFACE_H__ // ++#endif /* __RTMP_IFACE_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_mcu.h b/drivers/staging/rt2860/rtmp_mcu.h +index 98dea1b..1c31700 100644 +--- a/drivers/staging/rt2860/rtmp_mcu.h ++++ b/drivers/staging/rt2860/rtmp_mcu.h +@@ -46,4 +46,4 @@ INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + IN UCHAR Command, + IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1); + +-#endif // __RTMP_MCU_H__ // ++#endif /* __RTMP_MCU_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_os.h b/drivers/staging/rt2860/rtmp_os.h +index 82b60fc..eb79e6f 100644 +--- a/drivers/staging/rt2860/rtmp_os.h ++++ b/drivers/staging/rt2860/rtmp_os.h +@@ -39,7 +39,7 @@ + + #ifdef LINUX + #include "rt_linux.h" +-#endif // LINUX // ++#endif /* LINUX // */ + + /* + This data structure mainly strip some callback function defined in +@@ -69,7 +69,7 @@ typedef enum _RTMP_TASK_STATUS_ { + typedef struct _RTMP_OS_TASK_ { + char taskName[RTMP_OS_TASK_NAME_LEN]; + void *priv; +- //unsigned long taskFlags; ++ /*unsigned long taskFlags; */ + RTMP_TASK_STATUS taskStatus; + #ifndef KTHREAD_SUPPORT + RTMP_OS_SEM taskSema; +@@ -87,4 +87,4 @@ typedef struct _RTMP_OS_TASK_ { + int RtmpOSIRQRequest(IN PNET_DEV pNetDev); + int RtmpOSIRQRelease(IN PNET_DEV pNetDev); + +-#endif // __RMTP_OS_H__ // ++#endif /* __RMTP_OS_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +index 9f77197..e136576 100644 +--- a/drivers/staging/rt2860/rtmp_timer.h ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -50,29 +50,29 @@ + rtmp_timer_##_func + + /* ----------------- Timer Related MARCO ---------------*/ +-// In some os or chipset, we have a lot of timer functions and will read/write register, +-// it's not allowed in Linux USB sub-system to do it ( because of sleep issue when +-// submit to ctrl pipe). So we need a wrapper function to take care it. ++/* In some os or chipset, we have a lot of timer functions and will read/write register, */ ++/* it's not allowed in Linux USB sub-system to do it ( because of sleep issue when */ ++/* submit to ctrl pipe). So we need a wrapper function to take care it. */ + + #ifdef RTMP_TIMER_TASK_SUPPORT + typedef VOID(*RTMP_TIMER_TASK_HANDLE) (IN PVOID SystemSpecific1, + IN PVOID FunctionContext, + IN PVOID SystemSpecific2, + IN PVOID SystemSpecific3); +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + + typedef struct _RALINK_TIMER_STRUCT { +- RTMP_OS_TIMER TimerObj; // Ndis Timer object +- BOOLEAN Valid; // Set to True when call RTMPInitTimer +- BOOLEAN State; // True if timer cancelled +- BOOLEAN PeriodicType; // True if timer is periodic timer +- BOOLEAN Repeat; // True if periodic timer +- ULONG TimerValue; // Timer value in milliseconds +- ULONG cookie; // os specific object ++ RTMP_OS_TIMER TimerObj; /* Ndis Timer object */ ++ BOOLEAN Valid; /* Set to True when call RTMPInitTimer */ ++ BOOLEAN State; /* True if timer cancelled */ ++ BOOLEAN PeriodicType; /* True if timer is periodic timer */ ++ BOOLEAN Repeat; /* True if periodic timer */ ++ ULONG TimerValue; /* Timer value in milliseconds */ ++ ULONG cookie; /* os specific object */ + #ifdef RTMP_TIMER_TASK_SUPPORT + RTMP_TIMER_TASK_HANDLE handle; + void *pAd; +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + } RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; + + #ifdef RTMP_TIMER_TASK_SUPPORT +@@ -113,7 +113,7 @@ void rtmp_timer_##_func(unsigned long data) \ + if (pTimer->Repeat) \ + RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ + } +-#endif // RTMP_TIMER_TASK_SUPPORT // ++#endif /* RTMP_TIMER_TASK_SUPPORT // */ + + DECLARE_TIMER_FUNCTION(MlmePeriodicExec); + DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); +@@ -122,7 +122,7 @@ DECLARE_TIMER_FUNCTION(APSDPeriodicExec); + DECLARE_TIMER_FUNCTION(AsicRfTuningExec); + #ifdef RTMP_MAC_USB + DECLARE_TIMER_FUNCTION(BeaconUpdateExec); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + DECLARE_TIMER_FUNCTION(BeaconTimeout); + DECLARE_TIMER_FUNCTION(ScanTimeout); +@@ -138,10 +138,10 @@ DECLARE_TIMER_FUNCTION(RadioOnExec); + + #ifdef RTMP_MAC_USB + DECLARE_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); +-#endif // RTMP_MAC_USB // ++#endif /* RTMP_MAC_USB // */ + + #if defined(AP_LED) || defined(STA_LED) + DECLARE_TIMER_FUNCTION(LedCtrlMain); + #endif + +-#endif // __RTMP_TIMER_H__ // ++#endif /* __RTMP_TIMER_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_type.h b/drivers/staging/rt2860/rtmp_type.h +index 4900f9f..11e3591 100644 +--- a/drivers/staging/rt2860/rtmp_type.h ++++ b/drivers/staging/rt2860/rtmp_type.h +@@ -41,15 +41,15 @@ + #define PACKED __attribute__ ((packed)) + + #ifdef LINUX +-// Put platform dependent declaration here +-// For example, linux type definition ++/* Put platform dependent declaration here */ ++/* For example, linux type definition */ + typedef unsigned char UINT8; + typedef unsigned short UINT16; + typedef unsigned int UINT32; + typedef unsigned long long UINT64; + typedef int INT32; + typedef long long INT64; +-#endif // LINUX // ++#endif /* LINUX // */ + + typedef unsigned char *PUINT8; + typedef unsigned short *PUINT16; +@@ -58,7 +58,7 @@ typedef unsigned long long *PUINT64; + typedef int *PINT32; + typedef long long *PINT64; + +-// modified for fixing compile warning on Sigma 8634 platform ++/* modified for fixing compile warning on Sigma 8634 platform */ + typedef char STRING; + typedef signed char CHAR; + +@@ -72,13 +72,13 @@ typedef unsigned char UCHAR; + typedef unsigned short USHORT; + typedef unsigned int UINT; + typedef unsigned long ULONG; +-#endif // LINUX // ++#endif /* LINUX // */ + typedef unsigned long long ULONGLONG; + + typedef unsigned char BOOLEAN; + #ifdef LINUX + typedef void VOID; +-#endif // LINUX // ++#endif /* LINUX // */ + + typedef char *PSTRING; + typedef VOID *PVOID; +@@ -99,9 +99,9 @@ typedef union _LARGE_INTEGER { + INT64 QuadPart; + } LARGE_INTEGER; + +-// +-// Register set pair for initialzation register set definition +-// ++/* */ ++/* Register set pair for initialzation register set definition */ ++/* */ + typedef struct _RTMP_REG_PAIR { + ULONG Register; + ULONG Value; +@@ -112,9 +112,9 @@ typedef struct _REG_PAIR { + UCHAR Value; + } REG_PAIR, *PREG_PAIR; + +-// +-// Register set pair for initialzation register set definition +-// ++/* */ ++/* Register set pair for initialzation register set definition */ ++/* */ + typedef struct _RTMP_RF_REGS { + UCHAR Channel; + ULONG R1; +@@ -135,4 +135,4 @@ typedef int NTSTATUS; + #define STATUS_SUCCESS 0x00 + #define STATUS_UNSUCCESSFUL 0x01 + +-#endif // __RTMP_TYPE_H__ // ++#endif /* __RTMP_TYPE_H__ // */ +diff --git a/drivers/staging/rt2860/rtusb_io.h b/drivers/staging/rt2860/rtusb_io.h +index 6217dd2..ec1ffba 100644 +--- a/drivers/staging/rt2860/rtusb_io.h ++++ b/drivers/staging/rt2860/rtusb_io.h +@@ -30,54 +30,54 @@ + + #include "rtmp_type.h" + +-// New for MeetingHouse Api support +-#define CMDTHREAD_VENDOR_RESET 0x0D730101 // cmd +-#define CMDTHREAD_VENDOR_UNPLUG 0x0D730102 // cmd +-#define CMDTHREAD_VENDOR_SWITCH_FUNCTION 0x0D730103 // cmd +-#define CMDTHREAD_MULTI_WRITE_MAC 0x0D730107 // cmd +-#define CMDTHREAD_MULTI_READ_MAC 0x0D730108 // cmd +-#define CMDTHREAD_VENDOR_EEPROM_WRITE 0x0D73010A // cmd +-#define CMDTHREAD_VENDOR_EEPROM_READ 0x0D73010B // cmd +-#define CMDTHREAD_VENDOR_ENTER_TESTMODE 0x0D73010C // cmd +-#define CMDTHREAD_VENDOR_EXIT_TESTMODE 0x0D73010D // cmd +-#define CMDTHREAD_VENDOR_WRITE_BBP 0x0D730119 // cmd +-#define CMDTHREAD_VENDOR_READ_BBP 0x0D730118 // cmd +-#define CMDTHREAD_VENDOR_WRITE_RF 0x0D73011A // cmd +-#define CMDTHREAD_VENDOR_FLIP_IQ 0x0D73011D // cmd +-#define CMDTHREAD_RESET_BULK_OUT 0x0D730210 // cmd +-#define CMDTHREAD_RESET_BULK_IN 0x0D730211 // cmd +-#define CMDTHREAD_SET_PSM_BIT 0x0D730212 // cmd +-#define CMDTHREAD_SET_RADIO 0x0D730214 // cmd +-#define CMDTHREAD_UPDATE_TX_RATE 0x0D730216 // cmd +-#define CMDTHREAD_802_11_ADD_KEY_WEP 0x0D730218 // cmd +-#define CMDTHREAD_RESET_FROM_ERROR 0x0D73021A // cmd +-#define CMDTHREAD_LINK_DOWN 0x0D73021B // cmd +-#define CMDTHREAD_RESET_FROM_NDIS 0x0D73021C // cmd +-#define CMDTHREAD_CHECK_GPIO 0x0D730215 // cmd +-#define CMDTHREAD_FORCE_WAKE_UP 0x0D730222 // cmd +-#define CMDTHREAD_SET_BW 0x0D730225 // cmd +-#define CMDTHREAD_SET_ASIC_WCID 0x0D730226 // cmd +-#define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 // cmd +-#define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D // cmd +-#define RT_CMD_SET_KEY_TABLE 0x0D730228 // cmd +-#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 // cmd +-#define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E // cmd +-#define CMDTHREAD_SET_GROUP_KEY 0x0D73023F // cmd +-#define CMDTHREAD_SET_PAIRWISE_KEY 0x0D730240 // cmd +- +-#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER 0x0D710105 // cmd +-#define CMDTHREAD_802_11_SET_PHY_MODE 0x0D79010C // cmd +-#define CMDTHREAD_802_11_SET_STA_CONFIG 0x0D790111 // cmd +-#define CMDTHREAD_802_11_SET_PREAMBLE 0x0D790101 // cmd +-#define CMDTHREAD_802_11_COUNTER_MEASURE 0x0D790102 // cmd +-// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +-#define CMDTHREAD_UPDATE_PROTECT 0x0D790103 // cmd +-// end johnli +- +-//CMDTHREAD_MULTI_READ_MAC +-//CMDTHREAD_MULTI_WRITE_MAC +-//CMDTHREAD_VENDOR_EEPROM_READ +-//CMDTHREAD_VENDOR_EEPROM_WRITE ++/* New for MeetingHouse Api support */ ++#define CMDTHREAD_VENDOR_RESET 0x0D730101 /* cmd */ ++#define CMDTHREAD_VENDOR_UNPLUG 0x0D730102 /* cmd */ ++#define CMDTHREAD_VENDOR_SWITCH_FUNCTION 0x0D730103 /* cmd */ ++#define CMDTHREAD_MULTI_WRITE_MAC 0x0D730107 /* cmd */ ++#define CMDTHREAD_MULTI_READ_MAC 0x0D730108 /* cmd */ ++#define CMDTHREAD_VENDOR_EEPROM_WRITE 0x0D73010A /* cmd */ ++#define CMDTHREAD_VENDOR_EEPROM_READ 0x0D73010B /* cmd */ ++#define CMDTHREAD_VENDOR_ENTER_TESTMODE 0x0D73010C /* cmd */ ++#define CMDTHREAD_VENDOR_EXIT_TESTMODE 0x0D73010D /* cmd */ ++#define CMDTHREAD_VENDOR_WRITE_BBP 0x0D730119 /* cmd */ ++#define CMDTHREAD_VENDOR_READ_BBP 0x0D730118 /* cmd */ ++#define CMDTHREAD_VENDOR_WRITE_RF 0x0D73011A /* cmd */ ++#define CMDTHREAD_VENDOR_FLIP_IQ 0x0D73011D /* cmd */ ++#define CMDTHREAD_RESET_BULK_OUT 0x0D730210 /* cmd */ ++#define CMDTHREAD_RESET_BULK_IN 0x0D730211 /* cmd */ ++#define CMDTHREAD_SET_PSM_BIT 0x0D730212 /* cmd */ ++#define CMDTHREAD_SET_RADIO 0x0D730214 /* cmd */ ++#define CMDTHREAD_UPDATE_TX_RATE 0x0D730216 /* cmd */ ++#define CMDTHREAD_802_11_ADD_KEY_WEP 0x0D730218 /* cmd */ ++#define CMDTHREAD_RESET_FROM_ERROR 0x0D73021A /* cmd */ ++#define CMDTHREAD_LINK_DOWN 0x0D73021B /* cmd */ ++#define CMDTHREAD_RESET_FROM_NDIS 0x0D73021C /* cmd */ ++#define CMDTHREAD_CHECK_GPIO 0x0D730215 /* cmd */ ++#define CMDTHREAD_FORCE_WAKE_UP 0x0D730222 /* cmd */ ++#define CMDTHREAD_SET_BW 0x0D730225 /* cmd */ ++#define CMDTHREAD_SET_ASIC_WCID 0x0D730226 /* cmd */ ++#define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 /* cmd */ ++#define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D /* cmd */ ++#define RT_CMD_SET_KEY_TABLE 0x0D730228 /* cmd */ ++#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 /* cmd */ ++#define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E /* cmd */ ++#define CMDTHREAD_SET_GROUP_KEY 0x0D73023F /* cmd */ ++#define CMDTHREAD_SET_PAIRWISE_KEY 0x0D730240 /* cmd */ ++ ++#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER 0x0D710105 /* cmd */ ++#define CMDTHREAD_802_11_SET_PHY_MODE 0x0D79010C /* cmd */ ++#define CMDTHREAD_802_11_SET_STA_CONFIG 0x0D790111 /* cmd */ ++#define CMDTHREAD_802_11_SET_PREAMBLE 0x0D790101 /* cmd */ ++#define CMDTHREAD_802_11_COUNTER_MEASURE 0x0D790102 /* cmd */ ++/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ ++#define CMDTHREAD_UPDATE_PROTECT 0x0D790103 /* cmd */ ++/* end johnli */ ++ ++/*CMDTHREAD_MULTI_READ_MAC */ ++/*CMDTHREAD_MULTI_WRITE_MAC */ ++/*CMDTHREAD_VENDOR_EEPROM_READ */ ++/*CMDTHREAD_VENDOR_EEPROM_WRITE */ + typedef struct _CMDHandler_TLV { + USHORT Offset; + USHORT Length; +@@ -116,7 +116,7 @@ typedef struct _CmdQ { + USB Cmd to ASIC Related MACRO + + ******************************************************************************/ +-// reset MAC of a station entry to 0xFFFFFFFFFFFF ++/* reset MAC of a station entry to 0xFFFFFFFFFFFF */ + #define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ + { RT_SET_ASIC_WCID SetAsicWcid; \ + SetAsicWcid.WCID = Wcid; \ +@@ -125,22 +125,22 @@ typedef struct _CmdQ { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID, \ + &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); } + +-// add this entry into ASIC RX WCID search table ++/* add this entry into ASIC RX WCID search table */ + #define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY, \ + pEntry, sizeof(MAC_TABLE_ENTRY)); + +-// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +-// Set MAC register value according operation mode ++/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ ++/* Set MAC register value according operation mode */ + #define RTMP_UPDATE_PROTECT(pAd) \ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_UPDATE_PROTECT, NULL, 0); +-// end johnli ++/* end johnli */ + +-// remove Pair-wise key material from ASIC +-// yet implement ++/* remove Pair-wise key material from ASIC */ ++/* yet implement */ + #define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) + +-// add Client security information into ASIC WCID table and IVEIV table ++/* add Client security information into ASIC WCID table and IVEIV table */ + #define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ + { RTMP_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid); \ + if (pEntry->Aid >= 1) { \ +@@ -160,7 +160,7 @@ typedef struct _CmdQ { + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER, \ + &SetAsicWcidAttri, sizeof(RT_SET_ASIC_WCID_ATTRI)); } } + +-// Insert the BA bitmap to ASIC for the Wcid entry ++/* Insert the BA bitmap to ASIC for the Wcid entry */ + #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ + do{ \ + RT_SET_ASIC_WCID SetAsicWcid; \ +@@ -170,7 +170,7 @@ typedef struct _CmdQ { + RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ + }while(0) + +-// Remove the BA bitmap from ASIC for the Wcid entry ++/* Remove the BA bitmap from ASIC for the Wcid entry */ + #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ + do{ \ + RT_SET_ASIC_WCID SetAsicWcid; \ +@@ -180,4 +180,4 @@ typedef struct _CmdQ { + RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ + }while(0) + +-#endif // __RTUSB_IO_H__ // ++#endif /* __RTUSB_IO_H__ // */ +diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h +index 64154e9..b1e3ba0 100644 +--- a/drivers/staging/rt2860/spectrum.h ++++ b/drivers/staging/rt2860/spectrum.h +@@ -186,4 +186,4 @@ VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, + + VOID RguClass_BuildBcnChList(IN PRTMP_ADAPTER pAd, + OUT PUCHAR pBuf, OUT PULONG pBufLen); +-#endif // __SPECTRUM_H__ // ++#endif /* __SPECTRUM_H__ // */ +diff --git a/drivers/staging/rt2860/spectrum_def.h b/drivers/staging/rt2860/spectrum_def.h +index 4ebe5f5..d100c31 100644 +--- a/drivers/staging/rt2860/spectrum_def.h ++++ b/drivers/staging/rt2860/spectrum_def.h +@@ -58,7 +58,7 @@ typedef struct _MEASURE_REQ_ENTRY { + ULONG lastTime; + BOOLEAN Valid; + UINT8 DialogToken; +- UINT8 MeasureDialogToken[3]; // 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. ++ UINT8 MeasureDialogToken[3]; /* 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. */ + } MEASURE_REQ_ENTRY, *PMEASURE_REQ_ENTRY; + + typedef struct _MEASURE_REQ_TAB { +@@ -195,4 +195,4 @@ typedef struct PACKED _QUIET_INFO { + UINT16 QuietOffset; + } QUIET_INFO, *PQUIET_INFO; + +-#endif // __SPECTRUM_DEF_H__ // ++#endif /* __SPECTRUM_DEF_H__ // */ +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index fb5843c..5f998c7 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -38,7 +38,7 @@ + #ifndef __WPA_H__ + #define __WPA_H__ + +-// EAPOL Key descripter frame format related length ++/* EAPOL Key descripter frame format related length */ + #define LEN_KEY_DESC_NONCE 32 + #define LEN_KEY_DESC_IV 16 + #define LEN_KEY_DESC_RSC 8 +@@ -46,25 +46,25 @@ + #define LEN_KEY_DESC_REPLAY 8 + #define LEN_KEY_DESC_MIC 16 + +-// The length is the EAPoL-Key frame except key data field. +-// Please refer to 802.11i-2004 ,Figure 43u in p.78 ++/* The length is the EAPoL-Key frame except key data field. */ ++/* Please refer to 802.11i-2004 ,Figure 43u in p.78 */ + #define LEN_EAPOL_KEY_MSG (sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE) + +-// EAP Code Type. ++/* EAP Code Type. */ + #define EAP_CODE_REQUEST 1 + #define EAP_CODE_RESPONSE 2 + #define EAP_CODE_SUCCESS 3 + #define EAP_CODE_FAILURE 4 + +-// EAPOL frame Protocol Version ++/* EAPOL frame Protocol Version */ + #define EAPOL_VER 1 + #define EAPOL_VER2 2 + +-// EAPOL-KEY Descriptor Type ++/* EAPOL-KEY Descriptor Type */ + #define WPA1_KEY_DESC 0xfe + #define WPA2_KEY_DESC 0x02 + +-// Key Descriptor Version of Key Information ++/* Key Descriptor Version of Key Information */ + #define DESC_TYPE_TKIP 1 + #define DESC_TYPE_AES 2 + +@@ -73,11 +73,11 @@ + + #define LEN_MASTER_KEY 32 + +-// EAPOL EK, MK ++/* EAPOL EK, MK */ + #define LEN_EAP_EK 16 + #define LEN_EAP_MICK 16 + #define LEN_EAP_KEY ((LEN_EAP_EK)+(LEN_EAP_MICK)) +-// TKIP key related ++/* TKIP key related */ + #define LEN_PMKID 16 + #define LEN_TKIP_EK 16 + #define LEN_TKIP_RXMICK 8 +@@ -94,13 +94,13 @@ + #define LEN_PMK_NAME 16 + #define LEN_NONCE 32 + +-// RSN IE Length definition ++/* RSN IE Length definition */ + #define MAX_LEN_OF_RSNIE 255 + #define MIN_LEN_OF_RSNIE 8 + + #define KEY_LIFETIME 3600 + +-//EAP Packet Type ++/*EAP Packet Type */ + #define EAPPacket 0 + #define EAPOLStart 1 + #define EAPOLLogoff 2 +@@ -119,28 +119,28 @@ + #define PAIRWISEKEY 1 + #define GROUPKEY 0 + +-// Retry timer counter initial value ++/* Retry timer counter initial value */ + #define PEER_MSG1_RETRY_TIMER_CTR 0 + #define PEER_MSG3_RETRY_TIMER_CTR 10 + #define GROUP_MSG1_RETRY_TIMER_CTR 20 + +-//#ifdef CONFIG_AP_SUPPORT +-// WPA mechanism retry timer interval +-#define PEER_MSG1_RETRY_EXEC_INTV 1000 // 1 sec +-#define PEER_MSG3_RETRY_EXEC_INTV 3000 // 3 sec +-#define GROUP_KEY_UPDATE_EXEC_INTV 1000 // 1 sec +-#define PEER_GROUP_KEY_UPDATE_INIV 2000 // 2 sec ++/*#ifdef CONFIG_AP_SUPPORT */ ++/* WPA mechanism retry timer interval */ ++#define PEER_MSG1_RETRY_EXEC_INTV 1000 /* 1 sec */ ++#define PEER_MSG3_RETRY_EXEC_INTV 3000 /* 3 sec */ ++#define GROUP_KEY_UPDATE_EXEC_INTV 1000 /* 1 sec */ ++#define PEER_GROUP_KEY_UPDATE_INIV 2000 /* 2 sec */ + +-#define ENQUEUE_EAPOL_START_TIMER 200 // 200 ms ++#define ENQUEUE_EAPOL_START_TIMER 200 /* 200 ms */ + +-// group rekey interval ++/* group rekey interval */ + #define TIME_REKEY 0 + #define PKT_REKEY 1 + #define DISABLE_REKEY 2 + #define MAX_REKEY 2 + + #define MAX_REKEY_INTER 0x3ffffff +-//#endif // CONFIG_AP_SUPPORT // ++/*#endif // CONFIG_AP_SUPPORT // */ + + #define GROUP_SUITE 0 + #define PAIRWISE_SUITE 1 +@@ -194,13 +194,13 @@ + + #define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) + +-// EAPOL Key Information definition within Key descriptor format ++/* EAPOL Key Information definition within Key descriptor format */ + typedef struct PACKED _KEY_INFO { + UCHAR KeyMic:1; + UCHAR Secure:1; + UCHAR Error:1; + UCHAR Request:1; +- UCHAR EKD_DL:1; // EKD for AP; DL for STA ++ UCHAR EKD_DL:1; /* EKD for AP; DL for STA */ + UCHAR Rsvd:3; + UCHAR KeyDescVer:3; + UCHAR KeyType:1; +@@ -209,7 +209,7 @@ typedef struct PACKED _KEY_INFO { + UCHAR KeyAck:1; + } KEY_INFO, *PKEY_INFO; + +-// EAPOL Key descriptor format ++/* EAPOL Key descriptor format */ + typedef struct PACKED _KEY_DESCRIPTER { + UCHAR Type; + KEY_INFO KeyInfo; +@@ -231,7 +231,7 @@ typedef struct PACKED _EAPOL_PACKET { + KEY_DESCRIPTER KeyDesc; + } EAPOL_PACKET, *PEAPOL_PACKET; + +-//802.11i D10 page 83 ++/*802.11i D10 page 83 */ + typedef struct PACKED _GTK_ENCAP { + UCHAR Kid:2; + UCHAR tx:1; +@@ -248,7 +248,7 @@ typedef struct PACKED _KDE_ENCAP { + GTK_ENCAP GTKEncap; + } KDE_ENCAP, *PKDE_ENCAP; + +-// For WPA1 ++/* For WPA1 */ + typedef struct PACKED _RSNIE { + UCHAR oui[4]; + USHORT version; +@@ -259,7 +259,7 @@ typedef struct PACKED _RSNIE { + } ucast[1]; + } RSNIE, *PRSNIE; + +-// For WPA2 ++/* For WPA2 */ + typedef struct PACKED _RSNIE2 { + USHORT version; + UCHAR mcast[4]; +@@ -269,7 +269,7 @@ typedef struct PACKED _RSNIE2 { + } ucast[1]; + } RSNIE2, *PRSNIE2; + +-// AKM Suite ++/* AKM Suite */ + typedef struct PACKED _RSNIE_AUTH { + USHORT acount; + struct PACKED { +@@ -294,45 +294,45 @@ typedef struct PACKED _EAP_HDR { + UCHAR Body_Len[2]; + UCHAR code; + UCHAR identifier; +- UCHAR length[2]; // including code and identifier, followed by length-2 octets of data ++ UCHAR length[2]; /* including code and identifier, followed by length-2 octets of data */ + } EAP_HDR, *PEAP_HDR; + +-// For supplicant state machine states. 802.11i Draft 4.1, p. 97 +-// We simplified it ++/* For supplicant state machine states. 802.11i Draft 4.1, p. 97 */ ++/* We simplified it */ + typedef enum _WpaState { +- SS_NOTUSE, // 0 +- SS_START, // 1 +- SS_WAIT_MSG_3, // 2 +- SS_WAIT_GROUP, // 3 +- SS_FINISH, // 4 +- SS_KEYUPDATE, // 5 ++ SS_NOTUSE, /* 0 */ ++ SS_START, /* 1 */ ++ SS_WAIT_MSG_3, /* 2 */ ++ SS_WAIT_GROUP, /* 3 */ ++ SS_FINISH, /* 4 */ ++ SS_KEYUPDATE, /* 5 */ + } WPA_STATE; + +-// +-// The definition of the cipher combination +-// +-// bit3 bit2 bit1 bit0 +-// +------------+------------+ +-// | WPA | WPA2 | +-// +------+-----+------+-----+ +-// | TKIP | AES | TKIP | AES | +-// | 0 | 1 | 1 | 0 | -> 0x06 +-// | 0 | 1 | 1 | 1 | -> 0x07 +-// | 1 | 0 | 0 | 1 | -> 0x09 +-// | 1 | 0 | 1 | 1 | -> 0x0B +-// | 1 | 1 | 0 | 1 | -> 0x0D +-// | 1 | 1 | 1 | 0 | -> 0x0E +-// | 1 | 1 | 1 | 1 | -> 0x0F +-// +------+-----+------+-----+ +-// ++/* */ ++/* The definition of the cipher combination */ ++/* */ ++/* bit3 bit2 bit1 bit0 */ ++/* +------------+------------+ */ ++/* | WPA | WPA2 | */ ++/* +------+-----+------+-----+ */ ++/* | TKIP | AES | TKIP | AES | */ ++/* | 0 | 1 | 1 | 0 | -> 0x06 */ ++/* | 0 | 1 | 1 | 1 | -> 0x07 */ ++/* | 1 | 0 | 0 | 1 | -> 0x09 */ ++/* | 1 | 0 | 1 | 1 | -> 0x0B */ ++/* | 1 | 1 | 0 | 1 | -> 0x0D */ ++/* | 1 | 1 | 1 | 0 | -> 0x0E */ ++/* | 1 | 1 | 1 | 1 | -> 0x0F */ ++/* +------+-----+------+-----+ */ ++/* */ + typedef enum _WpaMixPairCipher { + MIX_CIPHER_NOTUSE = 0x00, +- WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES ++ WPA_NONE_WPA2_TKIPAES = 0x03, /* WPA2-TKIPAES */ + WPA_AES_WPA2_TKIP = 0x06, + WPA_AES_WPA2_TKIPAES = 0x07, + WPA_TKIP_WPA2_AES = 0x09, + WPA_TKIP_WPA2_TKIPAES = 0x0B, +- WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES ++ WPA_TKIPAES_WPA2_NONE = 0x0C, /* WPA-TKIPAES */ + WPA_TKIPAES_WPA2_AES = 0x0D, + WPA_TKIPAES_WPA2_TKIP = 0x0E, + WPA_TKIPAES_WPA2_TKIPAES = 0x0F, +@@ -341,22 +341,22 @@ typedef enum _WpaMixPairCipher { + typedef struct PACKED _RSN_IE_HEADER_STRUCT { + UCHAR Eid; + UCHAR Length; +- USHORT Version; // Little endian format ++ USHORT Version; /* Little endian format */ + } RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; + +-// Cipher suite selector types ++/* Cipher suite selector types */ + typedef struct PACKED _CIPHER_SUITE_STRUCT { + UCHAR Oui[3]; + UCHAR Type; + } CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; + +-// Authentication and Key Management suite selector ++/* Authentication and Key Management suite selector */ + typedef struct PACKED _AKM_SUITE_STRUCT { + UCHAR Oui[3]; + UCHAR Type; + } AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; + +-// RSN capability ++/* RSN capability */ + typedef struct PACKED _RSN_CAPABILITY { + USHORT Rsv:10; + USHORT GTKSAReplayCnt:2; +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch b/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch new file mode 100644 index 000000000..4f4a5f207 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch @@ -0,0 +1,28225 @@ +From d81787c21388dc5e81c8a28a4e1a7884031092a4 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:15 -0800 +Subject: [PATCH 26/42] Staging: rt28x0: remove typedefs (part one) + +commit 51126deb201c59cc8cdc4873e3d130d6bc60513d upstream. + +Remove typedefs from rtmp_type.h. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/ap.h | 20 +- + drivers/staging/rt2860/chip/mac_pci.h | 104 +- + drivers/staging/rt2860/chip/mac_usb.h | 114 +- + drivers/staging/rt2860/chip/rt30xx.h | 2 +- + drivers/staging/rt2860/chip/rtmp_mac.h | 980 ++++---- + drivers/staging/rt2860/chip/rtmp_phy.h | 18 +- + drivers/staging/rt2860/chips/rt3070.c | 20 +- + drivers/staging/rt2860/chips/rt3090.c | 16 +- + drivers/staging/rt2860/chips/rt30xx.c | 42 +- + drivers/staging/rt2860/chlist.h | 28 +- + drivers/staging/rt2860/common/action.c | 108 +- + drivers/staging/rt2860/common/action.h | 12 +- + drivers/staging/rt2860/common/ba_action.c | 250 +- + drivers/staging/rt2860/common/cmm_aes.c | 142 +- + drivers/staging/rt2860/common/cmm_asic.c | 264 +- + drivers/staging/rt2860/common/cmm_cfg.c | 42 +- + drivers/staging/rt2860/common/cmm_data.c | 316 ++-- + drivers/staging/rt2860/common/cmm_data_pci.c | 136 +- + drivers/staging/rt2860/common/cmm_data_usb.c | 148 +- + drivers/staging/rt2860/common/cmm_info.c | 88 +- + drivers/staging/rt2860/common/cmm_mac_pci.c | 102 +- + drivers/staging/rt2860/common/cmm_mac_usb.c | 90 +- + drivers/staging/rt2860/common/cmm_sanity.c | 192 +- + drivers/staging/rt2860/common/cmm_sync.c | 118 +- + drivers/staging/rt2860/common/cmm_tkip.c | 224 +- + drivers/staging/rt2860/common/cmm_wep.c | 86 +- + drivers/staging/rt2860/common/cmm_wpa.c | 554 +++--- + drivers/staging/rt2860/common/crypt_hmac.c | 28 +- + drivers/staging/rt2860/common/crypt_md5.c | 40 +- + drivers/staging/rt2860/common/crypt_sha2.c | 34 +- + drivers/staging/rt2860/common/dfs.c | 4 +- + drivers/staging/rt2860/common/ee_efuse.c | 90 +- + drivers/staging/rt2860/common/ee_prom.c | 34 +- + drivers/staging/rt2860/common/eeprom.c | 4 +- + drivers/staging/rt2860/common/mlme.c | 646 +++--- + drivers/staging/rt2860/common/rt_channel.c | 66 +- + drivers/staging/rt2860/common/rt_rf.c | 18 +- + drivers/staging/rt2860/common/rtmp_init.c | 322 ++-- + drivers/staging/rt2860/common/rtmp_mcu.c | 28 +- + drivers/staging/rt2860/common/rtmp_timer.c | 10 +- + drivers/staging/rt2860/common/spectrum.c | 430 ++-- + drivers/staging/rt2860/crypt_hmac.h | 16 +- + drivers/staging/rt2860/crypt_md5.h | 22 +- + drivers/staging/rt2860/crypt_sha2.h | 22 +- + drivers/staging/rt2860/dfs.h | 2 +- + drivers/staging/rt2860/eeprom.h | 10 +- + drivers/staging/rt2860/iface/rtmp_usb.h | 18 +- + drivers/staging/rt2860/mlme.h | 732 +++--- + drivers/staging/rt2860/oid.h | 364 ++-- + drivers/staging/rt2860/pci_main_dev.c | 106 +- + drivers/staging/rt2860/rt_linux.c | 168 +- + drivers/staging/rt2860/rt_linux.h | 59 +- + drivers/staging/rt2860/rt_main_dev.c | 24 +- + drivers/staging/rt2860/rt_pci_rbus.c | 64 +- + drivers/staging/rt2860/rt_usb.c | 36 +- + drivers/staging/rt2860/rtmp.h | 3446 +++++++++++++------------- + drivers/staging/rt2860/rtmp_chip.h | 90 +- + drivers/staging/rt2860/rtmp_ckipmic.h | 24 +- + drivers/staging/rt2860/rtmp_def.h | 76 +- + drivers/staging/rt2860/rtmp_dot11.h | 86 +- + drivers/staging/rt2860/rtmp_iface.h | 4 +- + drivers/staging/rt2860/rtmp_mcu.h | 10 +- + drivers/staging/rt2860/rtmp_timer.h | 14 +- + drivers/staging/rt2860/rtmp_type.h | 85 +- + drivers/staging/rt2860/rtusb_io.h | 16 +- + drivers/staging/rt2860/spectrum.h | 102 +- + drivers/staging/rt2860/spectrum_def.h | 120 +- + drivers/staging/rt2860/sta/assoc.c | 242 +- + drivers/staging/rt2860/sta/auth.c | 98 +- + drivers/staging/rt2860/sta/auth_rsp.c | 22 +- + drivers/staging/rt2860/sta/connect.c | 202 +- + drivers/staging/rt2860/sta/rtmp_data.c | 290 ++-- + drivers/staging/rt2860/sta/sanity.c | 92 +- + drivers/staging/rt2860/sta/sync.c | 260 +- + drivers/staging/rt2860/sta/wpa.c | 62 +- + drivers/staging/rt2860/sta_ioctl.c | 128 +- + drivers/staging/rt2860/usb_main_dev.c | 40 +- + drivers/staging/rt2860/wpa.h | 176 +- + drivers/staging/rt2870/common/rtusb_bulk.c | 82 +- + drivers/staging/rt2870/common/rtusb_data.c | 38 +- + drivers/staging/rt2870/common/rtusb_io.c | 262 +- + drivers/staging/rt3070/md4.h | 12 +- + 82 files changed, 6821 insertions(+), 6871 deletions(-) + +diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h +index c7ff694..fb6ab69 100644 +--- a/drivers/staging/rt2860/ap.h ++++ b/drivers/staging/rt2860/ap.h +@@ -41,26 +41,26 @@ + #define __AP_H__ + + /* ap_wpa.c */ +-VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, ++void WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]); + + #ifdef RTMP_MAC_USB +-VOID BeaconUpdateExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void BeaconUpdateExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + #endif /* RTMP_MAC_USB // */ + +-VOID RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack); ++void RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack); + +-VOID MacTableReset(IN PRTMP_ADAPTER pAd); ++void MacTableReset(IN PRTMP_ADAPTER pAd); + + MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, IN BOOLEAN CleanAll); ++ u8 *pAddr, ++ u8 apidx, IN BOOLEAN CleanAll); + + BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, IN PUCHAR pAddr); ++ u16 wcid, u8 *pAddr); + +-MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); ++MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, u8 *pAddr); + + #endif /* __AP_H__ */ +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index 34f7b9a..2d55327 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -71,24 +71,24 @@ + // + typedef struct PACKED _TXD_STRUC { + // Word 0 +- UINT32 SDPtr0; ++ u32 SDPtr0; + // Word 1 +- UINT32 SDLen1:14; +- UINT32 LastSec1:1; +- UINT32 Burst:1; +- UINT32 SDLen0:14; +- UINT32 LastSec0:1; +- UINT32 DMADONE:1; ++ u32 SDLen1:14; ++ u32 LastSec1:1; ++ u32 Burst:1; ++ u32 SDLen0:14; ++ u32 LastSec0:1; ++ u32 DMADONE:1; + //Word2 +- UINT32 SDPtr1; ++ u32 SDPtr1; + //Word3 +- UINT32 rsv2:24; +- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition +- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA +- UINT32 rsv:2; +- UINT32 TCO:1; // +- UINT32 UCO:1; // +- UINT32 ICO:1; // ++ u32 rsv2:24; ++ u32 WIV:1; /* Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition */ ++ u32 QSEL:2; /* select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA */ ++ u32 rsv:2; ++ u32 TCO:1; /* */ ++ u32 UCO:1; /* */ ++ u32 ICO:1; /* */ + } TXD_STRUC, *PTXD_STRUC; + + // +@@ -96,47 +96,47 @@ typedef struct PACKED _TXD_STRUC { + // + typedef struct PACKED _RXD_STRUC { + // Word 0 +- UINT32 SDP0; ++ u32 SDP0; + // Word 1 +- UINT32 SDL1:14; +- UINT32 Rsv:2; +- UINT32 SDL0:14; +- UINT32 LS0:1; +- UINT32 DDONE:1; ++ u32 SDL1:14; ++ u32 Rsv:2; ++ u32 SDL0:14; ++ u32 LS0:1; ++ u32 DDONE:1; + // Word 2 +- UINT32 SDP1; ++ u32 SDP1; + // Word 3 +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; // 1: this RX frame is unicast to me +- UINT32 Mcast:1; // 1: this is a multicast frame +- UINT32 Bcast:1; // 1: this is a broadcast frame +- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID +- UINT32 Crc:1; // 1: CRC error +- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid +- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; +- UINT32 Decrypted:1; // this frame is being decrypted. +- UINT32 PlcpSignal:1; // To be moved +- UINT32 PlcpRssil:1; // To be moved +- UINT32 Rsv1:13; ++ u32 BA:1; ++ u32 DATA:1; ++ u32 NULLDATA:1; ++ u32 FRAG:1; ++ u32 U2M:1; /* 1: this RX frame is unicast to me */ ++ u32 Mcast:1; /* 1: this is a multicast frame */ ++ u32 Bcast:1; /* 1: this is a broadcast frame */ ++ u32 MyBss:1; /* 1: this frame belongs to the same BSSID */ ++ u32 Crc:1; /* 1: CRC error */ ++ u32 CipherErr:2; /* 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid */ ++ u32 AMSDU:1; /* rx with 802.3 header, not 802.11 header. */ ++ u32 HTC:1; ++ u32 RSSI:1; ++ u32 L2PAD:1; ++ u32 AMPDU:1; ++ u32 Decrypted:1; /* this frame is being decrypted. */ ++ u32 PlcpSignal:1; /* To be moved */ ++ u32 PlcpRssil:1; /* To be moved */ ++ u32 Rsv1:13; + } RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + typedef union _TX_ATTENUATION_CTRL_STRUC { + struct { +- ULONG RF_ISOLATION_ENABLE:1; +- ULONG Reserve2:7; +- ULONG PCIE_PHY_TX_ATTEN_VALUE:3; +- ULONG PCIE_PHY_TX_ATTEN_EN:1; +- ULONG Reserve1:20; ++ unsigned long RF_ISOLATION_ENABLE:1; ++ unsigned long Reserve2:7; ++ unsigned long PCIE_PHY_TX_ATTEN_VALUE:3; ++ unsigned long PCIE_PHY_TX_ATTEN_EN:1; ++ unsigned long Reserve1:20; + } field; + +- ULONG word; ++ unsigned long word; + } TX_ATTENUATION_CTRL_STRUC, *PTX_ATTENUATION_CTRL_STRUC; + + /* ----------------- EEPROM Related MACRO ----------------- */ +@@ -148,7 +148,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + /* ----------------- Frimware Related MACRO ----------------- */ + #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ + do{ \ +- ULONG _i, _firm; \ ++ unsigned long _i, _firm; \ + RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x10000); \ + \ + for(_i=0; _i<_FwLen; _i+=4) \ +@@ -172,7 +172,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + #define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) + + #define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ +- ((freeNum) >= (ULONG)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ ++ ((freeNum) >= (unsigned long)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ + #define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ + do{}while(0) + +@@ -238,7 +238,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + + // remove Pair-wise key material from ASIC + #define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) \ +- AsicRemovePairwiseKeyEntry(pAd, BssIdx, (UCHAR)Wcid); ++ AsicRemovePairwiseKeyEntry(pAd, BssIdx, (u8)Wcid); + + // add Client security information into ASIC WCID table and IVEIV table + #define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ +@@ -260,7 +260,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + // Insert the BA bitmap to ASIC for the Wcid entry + #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ + do{ \ +- UINT32 _Value = 0, _Offset; \ ++ u32 _Value = 0, _Offset; \ + _Offset = MAC_WCID_BASE + (_Aid) * HW_WCID_ENTRY_SIZE + 4; \ + RTMP_IO_READ32((_pAd), _Offset, &_Value);\ + _Value |= (0x10000<<(_TID)); \ +@@ -271,7 +271,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + // bitmap field starts at 0x10000 in ASIC WCID table + #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ + do{ \ +- UINT32 _Value = 0, _Offset; \ ++ u32 _Value = 0, _Offset; \ + _Offset = MAC_WCID_BASE + (_Wcid) * HW_WCID_ENTRY_SIZE + 4; \ + RTMP_IO_READ32((_pAd), _Offset, &_Value); \ + _Value &= (~(0x10000 << (_TID))); \ +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +index fe7ba28..b902074 100644 +--- a/drivers/staging/rt2860/chip/mac_usb.h ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -62,26 +62,26 @@ + #define RT2870_RXDMALEN_FIELD_SIZE 4 + + typedef struct PACKED _RXINFO_STRUC { +- UINT32 BA:1; +- UINT32 DATA:1; +- UINT32 NULLDATA:1; +- UINT32 FRAG:1; +- UINT32 U2M:1; /* 1: this RX frame is unicast to me */ +- UINT32 Mcast:1; /* 1: this is a multicast frame */ +- UINT32 Bcast:1; /* 1: this is a broadcast frame */ +- UINT32 MyBss:1; /* 1: this frame belongs to the same BSSID */ +- UINT32 Crc:1; /* 1: CRC error */ +- UINT32 CipherErr:2; /* 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid */ +- UINT32 AMSDU:1; /* rx with 802.3 header, not 802.11 header. */ +- UINT32 HTC:1; +- UINT32 RSSI:1; +- UINT32 L2PAD:1; +- UINT32 AMPDU:1; /* To be moved */ +- UINT32 Decrypted:1; +- UINT32 PlcpRssil:1; +- UINT32 CipherAlg:1; +- UINT32 LastAMSDU:1; +- UINT32 PlcpSignal:12; ++ u32 BA:1; ++ u32 DATA:1; ++ u32 NULLDATA:1; ++ u32 FRAG:1; ++ u32 U2M:1; /* 1: this RX frame is unicast to me */ ++ u32 Mcast:1; /* 1: this is a multicast frame */ ++ u32 Bcast:1; /* 1: this is a broadcast frame */ ++ u32 MyBss:1; /* 1: this frame belongs to the same BSSID */ ++ u32 Crc:1; /* 1: CRC error */ ++ u32 CipherErr:2; /* 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid */ ++ u32 AMSDU:1; /* rx with 802.3 header, not 802.11 header. */ ++ u32 HTC:1; ++ u32 RSSI:1; ++ u32 L2PAD:1; ++ u32 AMPDU:1; /* To be moved */ ++ u32 Decrypted:1; ++ u32 PlcpRssil:1; ++ u32 CipherAlg:1; ++ u32 LastAMSDU:1; ++ u32 PlcpSignal:12; + } RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + /* */ +@@ -91,14 +91,14 @@ typedef struct PACKED _RXINFO_STRUC { + + typedef struct _TXINFO_STRUC { + /* Word 0 */ +- UINT32 USBDMATxPktLen:16; /*used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. */ +- UINT32 rsv:8; +- UINT32 WIV:1; /* Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition */ +- UINT32 QSEL:2; /* select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA */ +- UINT32 SwUseLastRound:1; /* Software use. */ +- UINT32 rsv2:2; /* Software use. */ +- UINT32 USBDMANextVLD:1; /*used ONLY in USB bulk Aggregation, NextValid */ +- UINT32 USBDMATxburst:1; /*used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint */ ++ u32 USBDMATxPktLen:16; /*used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. */ ++ u32 rsv:8; ++ u32 WIV:1; /* Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition */ ++ u32 QSEL:2; /* select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA */ ++ u32 SwUseLastRound:1; /* Software use. */ ++ u32 rsv2:2; /* Software use. */ ++ u32 USBDMANextVLD:1; /*used ONLY in USB bulk Aggregation, NextValid */ ++ u32 USBDMATxburst:1; /*used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint */ + } TXINFO_STRUC, *PTXINFO_STRUC; + + /* */ +@@ -106,8 +106,8 @@ typedef struct _TXINFO_STRUC { + /* */ + typedef struct _MGMT_STRUC { + BOOLEAN Valid; +- PUCHAR pBuffer; +- ULONG Length; ++ u8 *pBuffer; ++ unsigned long Length; + } MGMT_STRUC, *PMGMT_STRUC; + + /*////////////////////////////////////////////////////////////////////////// */ +@@ -115,69 +115,69 @@ typedef struct _MGMT_STRUC { + /*////////////////////////////////////////////////////////////////////////// */ + typedef struct __TX_BUFFER { + union { +- UCHAR WirelessPacket[TX_BUFFER_NORMSIZE]; ++ u8 WirelessPacket[TX_BUFFER_NORMSIZE]; + HEADER_802_11 NullFrame; + PSPOLL_FRAME PsPollPacket; + RTS_FRAME RTSFrame; + } field; +- UCHAR Aggregation[4]; /*Buffer for save Aggregation size. */ ++ u8 Aggregation[4]; /*Buffer for save Aggregation size. */ + } TX_BUFFER, *PTX_BUFFER; + + typedef struct __HTTX_BUFFER { + union { +- UCHAR WirelessPacket[MAX_TXBULK_SIZE]; ++ u8 WirelessPacket[MAX_TXBULK_SIZE]; + HEADER_802_11 NullFrame; + PSPOLL_FRAME PsPollPacket; + RTS_FRAME RTSFrame; + } field; +- UCHAR Aggregation[4]; /*Buffer for save Aggregation size. */ ++ u8 Aggregation[4]; /*Buffer for save Aggregation size. */ + } HTTX_BUFFER, *PHTTX_BUFFER; + + /* used to track driver-generated write irps */ + typedef struct _TX_CONTEXT { +- PVOID pAd; /*Initialized in MiniportInitialize */ ++ void *pAd; /*Initialized in MiniportInitialize */ + PURB pUrb; /*Initialized in MiniportInitialize */ + PIRP pIrp; /*used to cancel pending bulk out. */ + /*Initialized in MiniportInitialize */ + PTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ +- ULONG BulkOutSize; +- UCHAR BulkOutPipeId; +- UCHAR SelfIdx; ++ unsigned long BulkOutSize; ++ u8 BulkOutPipeId; ++ u8 SelfIdx; + BOOLEAN InUse; + BOOLEAN bWaitingBulkOut; /* at least one packet is in this TxContext, ready for making IRP anytime. */ + BOOLEAN bFullForBulkOut; /* all tx buffer are full , so waiting for tx bulkout. */ + BOOLEAN IRPPending; + BOOLEAN LastOne; + BOOLEAN bAggregatible; +- UCHAR Header_802_3[LENGTH_802_3]; +- UCHAR Rsv[2]; +- ULONG DataOffset; +- UINT TxRate; ++ u8 Header_802_3[LENGTH_802_3]; ++ u8 Rsv[2]; ++ unsigned long DataOffset; ++ u32 TxRate; + dma_addr_t data_dma; /* urb dma on linux */ + + } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; + + /* used to track driver-generated write irps */ + typedef struct _HT_TX_CONTEXT { +- PVOID pAd; /*Initialized in MiniportInitialize */ ++ void *pAd; /*Initialized in MiniportInitialize */ + PURB pUrb; /*Initialized in MiniportInitialize */ + PIRP pIrp; /*used to cancel pending bulk out. */ + /*Initialized in MiniportInitialize */ + PHTTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ +- ULONG BulkOutSize; /* Indicate the total bulk-out size in bytes in one bulk-transmission */ +- UCHAR BulkOutPipeId; ++ unsigned long BulkOutSize; /* Indicate the total bulk-out size in bytes in one bulk-transmission */ ++ u8 BulkOutPipeId; + BOOLEAN IRPPending; + BOOLEAN LastOne; + BOOLEAN bCurWriting; + BOOLEAN bRingEmpty; + BOOLEAN bCopySavePad; +- UCHAR SavedPad[8]; +- UCHAR Header_802_3[LENGTH_802_3]; +- ULONG CurWritePosition; /* Indicate the buffer offset which packet will be inserted start from. */ +- ULONG CurWriteRealPos; /* Indicate the buffer offset which packet now are writing to. */ +- ULONG NextBulkOutPosition; /* Indicate the buffer start offset of a bulk-transmission */ +- ULONG ENextBulkOutPosition; /* Indicate the buffer end offset of a bulk-transmission */ +- UINT TxRate; ++ u8 SavedPad[8]; ++ u8 Header_802_3[LENGTH_802_3]; ++ unsigned long CurWritePosition; /* Indicate the buffer offset which packet will be inserted start from. */ ++ unsigned long CurWriteRealPos; /* Indicate the buffer offset which packet now are writing to. */ ++ unsigned long NextBulkOutPosition; /* Indicate the buffer start offset of a bulk-transmission */ ++ unsigned long ENextBulkOutPosition; /* Indicate the buffer end offset of a bulk-transmission */ ++ u32 TxRate; + dma_addr_t data_dma; /* urb dma on linux */ + } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; + +@@ -186,12 +186,12 @@ typedef struct _HT_TX_CONTEXT { + /* receive data to the protocol. */ + /* */ + typedef struct _RX_CONTEXT { +- PUCHAR TransferBuffer; +- PVOID pAd; ++ u8 *TransferBuffer; ++ void *pAd; + PIRP pIrp; /*used to cancel pending bulk in. */ + PURB pUrb; + /*These 2 Boolean shouldn't both be 1 at the same time. */ +- ULONG BulkInOffset; /* number of packets waiting for reordering . */ ++ unsigned long BulkInOffset; /* number of packets waiting for reordering . */ + /* BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication */ + BOOLEAN bRxHandling; /* Notify this packet is being process now. */ + BOOLEAN InUse; /* USB Hardware Occupied. Wait for USB HW to put packet. */ +@@ -332,9 +332,9 @@ typedef struct _RX_CONTEXT { + MlmeSetPsmBit(_pAd, _val);\ + else \ + { \ +- USHORT _psm_val; \ ++ u16 _psm_val; \ + _psm_val = _val; \ +- RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_SET_PSM_BIT, &(_psm_val), sizeof(USHORT)); \ ++ RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_SET_PSM_BIT, &(_psm_val), sizeof(u16)); \ + }\ + } + +diff --git a/drivers/staging/rt2860/chip/rt30xx.h b/drivers/staging/rt2860/chip/rt30xx.h +index 477a205..04c92ab 100644 +--- a/drivers/staging/rt2860/chip/rt30xx.h ++++ b/drivers/staging/rt2860/chip/rt30xx.h +@@ -40,7 +40,7 @@ + #ifdef RT30xx + + extern REG_PAIR RT30xx_RFRegTable[]; +-extern UCHAR NUM_RF_REG_PARMS; ++extern u8 NUM_RF_REG_PARMS; + + #endif /* RT30xx // */ + +diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h +index dac1577..5efe501 100644 +--- a/drivers/staging/rt2860/chip/rtmp_mac.h ++++ b/drivers/staging/rt2860/chip/rtmp_mac.h +@@ -57,37 +57,37 @@ + typedef struct PACKED _TXWI_STRUC { + /* Word 0 */ + /* ex: 00 03 00 40 means txop = 3, PHYMODE = 1 */ +- UINT32 FRAG:1; /* 1 to inform TKIP engine this is a fragment. */ +- UINT32 MIMOps:1; /* the remote peer is in dynamic MIMO-PS mode */ +- UINT32 CFACK:1; +- UINT32 TS:1; +- +- UINT32 AMPDU:1; +- UINT32 MpduDensity:3; +- UINT32 txop:2; /*FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. */ +- UINT32 rsv:6; +- +- UINT32 MCS:7; +- UINT32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ +- UINT32 ShortGI:1; +- UINT32 STBC:2; /* 1: STBC support MCS =0-7, 2,3 : RESERVE */ +- UINT32 Ifs:1; /* */ +-/* UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz */ +- UINT32 rsv2:1; +- UINT32 TxBF:1; /* 3*3 */ +- UINT32 PHYMODE:2; ++ u32 FRAG:1; /* 1 to inform TKIP engine this is a fragment. */ ++ u32 MIMOps:1; /* the remote peer is in dynamic MIMO-PS mode */ ++ u32 CFACK:1; ++ u32 TS:1; ++ ++ u32 AMPDU:1; ++ u32 MpduDensity:3; ++ u32 txop:2; /*FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful. */ ++ u32 rsv:6; ++ ++ u32 MCS:7; ++ u32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ ++ u32 ShortGI:1; ++ u32 STBC:2; /* 1: STBC support MCS =0-7, 2,3 : RESERVE */ ++ u32 Ifs:1; /* */ ++/* u32 rsv2:2; //channel bandwidth 20MHz or 40 MHz */ ++ u32 rsv2:1; ++ u32 TxBF:1; /* 3*3 */ ++ u32 PHYMODE:2; + /* Word1 */ + /* ex: 1c ff 38 00 means ACK=0, BAWinSize=7, MPDUtotalByteCount = 0x38 */ +- UINT32 ACK:1; +- UINT32 NSEQ:1; +- UINT32 BAWinSize:6; +- UINT32 WirelessCliID:8; +- UINT32 MPDUtotalByteCount:12; +- UINT32 PacketId:4; ++ u32 ACK:1; ++ u32 NSEQ:1; ++ u32 BAWinSize:6; ++ u32 WirelessCliID:8; ++ u32 MPDUtotalByteCount:12; ++ u32 PacketId:4; + /*Word2 */ +- UINT32 IV; ++ u32 IV; + /*Word3 */ +- UINT32 EIV; ++ u32 EIV; + } TXWI_STRUC, *PTXWI_STRUC; + + /* */ +@@ -95,32 +95,32 @@ typedef struct PACKED _TXWI_STRUC { + /* */ + typedef struct PACKED _RXWI_STRUC { + /* Word 0 */ +- UINT32 WirelessCliID:8; +- UINT32 KeyIndex:2; +- UINT32 BSSID:3; +- UINT32 UDF:3; +- UINT32 MPDUtotalByteCount:12; +- UINT32 TID:4; ++ u32 WirelessCliID:8; ++ u32 KeyIndex:2; ++ u32 BSSID:3; ++ u32 UDF:3; ++ u32 MPDUtotalByteCount:12; ++ u32 TID:4; + /* Word 1 */ +- UINT32 FRAG:4; +- UINT32 SEQUENCE:12; +- UINT32 MCS:7; +- UINT32 BW:1; +- UINT32 ShortGI:1; +- UINT32 STBC:2; +- UINT32 rsv:3; +- UINT32 PHYMODE:2; /* 1: this RX frame is unicast to me */ ++ u32 FRAG:4; ++ u32 SEQUENCE:12; ++ u32 MCS:7; ++ u32 BW:1; ++ u32 ShortGI:1; ++ u32 STBC:2; ++ u32 rsv:3; ++ u32 PHYMODE:2; /* 1: this RX frame is unicast to me */ + /*Word2 */ +- UINT32 RSSI0:8; +- UINT32 RSSI1:8; +- UINT32 RSSI2:8; +- UINT32 rsv1:8; ++ u32 RSSI0:8; ++ u32 RSSI1:8; ++ u32 RSSI2:8; ++ u32 rsv1:8; + /*Word3 */ +- UINT32 SNR0:8; +- UINT32 SNR1:8; +- UINT32 FOFFSET:8; /* RT35xx */ +- UINT32 rsv2:8; +- /*UINT32 rsv2:16; */ ++ u32 SNR0:8; ++ u32 SNR1:8; ++ u32 FOFFSET:8; /* RT35xx */ ++ u32 rsv2:8; ++ /*u32 rsv2:16; */ + } RXWI_STRUC, *PRXWI_STRUC; + + /* ================================================================================= */ +@@ -136,27 +136,27 @@ typedef struct PACKED _RXWI_STRUC { + #define INT_SOURCE_CSR 0x200 + typedef union _INT_SOURCE_CSR_STRUC { + struct { +- UINT32 RxDelayINT:1; +- UINT32 TxDelayINT:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; /*4 */ +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; /* bit7 */ +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; /*bit 9 */ +- UINT32 RxTxCoherent:1; +- UINT32 TBTTInt:1; +- UINT32 PreTBTT:1; +- UINT32 TXFifoStatusInt:1; /*FIFO Statistics is full, sw should read 0x171c */ +- UINT32 AutoWakeup:1; /*bit14 */ +- UINT32 GPTimer:1; +- UINT32 RxCoherent:1; /*bit16 */ +- UINT32 TxCoherent:1; +- UINT32:14; ++ u32 RxDelayINT:1; ++ u32 TxDelayINT:1; ++ u32 RxDone:1; ++ u32 Ac0DmaDone:1; /*4 */ ++ u32 Ac1DmaDone:1; ++ u32 Ac2DmaDone:1; ++ u32 Ac3DmaDone:1; ++ u32 HccaDmaDone:1; /* bit7 */ ++ u32 MgmtDmaDone:1; ++ u32 MCUCommandINT:1; /*bit 9 */ ++ u32 RxTxCoherent:1; ++ u32 TBTTInt:1; ++ u32 PreTBTT:1; ++ u32 TXFifoStatusInt:1; /*FIFO Statistics is full, sw should read 0x171c */ ++ u32 AutoWakeup:1; /*bit14 */ ++ u32 GPTimer:1; ++ u32 RxCoherent:1; /*bit16 */ ++ u32 TxCoherent:1; ++ u32 : 14; + } field; +- UINT32 word; ++ u32 word; + } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; + + /* */ +@@ -165,76 +165,76 @@ typedef union _INT_SOURCE_CSR_STRUC { + #define INT_MASK_CSR 0x204 + typedef union _INT_MASK_CSR_STRUC { + struct { +- UINT32 RXDelay_INT_MSK:1; +- UINT32 TxDelay:1; +- UINT32 RxDone:1; +- UINT32 Ac0DmaDone:1; +- UINT32 Ac1DmaDone:1; +- UINT32 Ac2DmaDone:1; +- UINT32 Ac3DmaDone:1; +- UINT32 HccaDmaDone:1; +- UINT32 MgmtDmaDone:1; +- UINT32 MCUCommandINT:1; +- UINT32:20; +- UINT32 RxCoherent:1; +- UINT32 TxCoherent:1; ++ u32 RXDelay_INT_MSK:1; ++ u32 TxDelay:1; ++ u32 RxDone:1; ++ u32 Ac0DmaDone:1; ++ u32 Ac1DmaDone:1; ++ u32 Ac2DmaDone:1; ++ u32 Ac3DmaDone:1; ++ u32 HccaDmaDone:1; ++ u32 MgmtDmaDone:1; ++ u32 MCUCommandINT:1; ++ u32 : 20; ++ u32 RxCoherent:1; ++ u32 TxCoherent:1; + } field; +- UINT32 word; ++ u32 word; + } INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC; + + #define WPDMA_GLO_CFG 0x208 + typedef union _WPDMA_GLO_CFG_STRUC { + struct { +- UINT32 EnableTxDMA:1; +- UINT32 TxDMABusy:1; +- UINT32 EnableRxDMA:1; +- UINT32 RxDMABusy:1; +- UINT32 WPDMABurstSIZE:2; +- UINT32 EnTXWriteBackDDONE:1; +- UINT32 BigEndian:1; +- UINT32 RXHdrScater:8; +- UINT32 HDR_SEG_LEN:16; ++ u32 EnableTxDMA:1; ++ u32 TxDMABusy:1; ++ u32 EnableRxDMA:1; ++ u32 RxDMABusy:1; ++ u32 WPDMABurstSIZE:2; ++ u32 EnTXWriteBackDDONE:1; ++ u32 BigEndian:1; ++ u32 RXHdrScater:8; ++ u32 HDR_SEG_LEN:16; + } field; +- UINT32 word; ++ u32 word; + } WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC; + + #define WPDMA_RST_IDX 0x20c + typedef union _WPDMA_RST_IDX_STRUC { + struct { +- UINT32 RST_DTX_IDX0:1; +- UINT32 RST_DTX_IDX1:1; +- UINT32 RST_DTX_IDX2:1; +- UINT32 RST_DTX_IDX3:1; +- UINT32 RST_DTX_IDX4:1; +- UINT32 RST_DTX_IDX5:1; +- UINT32 rsv:10; +- UINT32 RST_DRX_IDX0:1; +- UINT32:15; ++ u32 RST_DTX_IDX0:1; ++ u32 RST_DTX_IDX1:1; ++ u32 RST_DTX_IDX2:1; ++ u32 RST_DTX_IDX3:1; ++ u32 RST_DTX_IDX4:1; ++ u32 RST_DTX_IDX5:1; ++ u32 rsv:10; ++ u32 RST_DRX_IDX0:1; ++ u32 : 15; + } field; +- UINT32 word; ++ u32 word; + } WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; + #define DELAY_INT_CFG 0x0210 + typedef union _DELAY_INT_CFG_STRUC { + struct { +- UINT32 RXMAX_PTIME:8; +- UINT32 RXMAX_PINT:7; +- UINT32 RXDLY_INT_EN:1; +- UINT32 TXMAX_PTIME:8; +- UINT32 TXMAX_PINT:7; +- UINT32 TXDLY_INT_EN:1; ++ u32 RXMAX_PTIME:8; ++ u32 RXMAX_PINT:7; ++ u32 RXDLY_INT_EN:1; ++ u32 TXMAX_PTIME:8; ++ u32 TXMAX_PINT:7; ++ u32 TXDLY_INT_EN:1; + } field; +- UINT32 word; ++ u32 word; + } DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC; + #define WMM_AIFSN_CFG 0x0214 + typedef union _AIFSN_CSR_STRUC { + struct { +- UINT32 Aifsn0:4; /* for AC_BE */ +- UINT32 Aifsn1:4; /* for AC_BK */ +- UINT32 Aifsn2:4; /* for AC_VI */ +- UINT32 Aifsn3:4; /* for AC_VO */ +- UINT32 Rsv:16; ++ u32 Aifsn0:4; /* for AC_BE */ ++ u32 Aifsn1:4; /* for AC_BK */ ++ u32 Aifsn2:4; /* for AC_VI */ ++ u32 Aifsn3:4; /* for AC_VO */ ++ u32 Rsv:16; + } field; +- UINT32 word; ++ u32 word; + } AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC; + /* */ + /* CWMIN_CSR: CWmin for each EDCA AC */ +@@ -242,13 +242,13 @@ typedef union _AIFSN_CSR_STRUC { + #define WMM_CWMIN_CFG 0x0218 + typedef union _CWMIN_CSR_STRUC { + struct { +- UINT32 Cwmin0:4; /* for AC_BE */ +- UINT32 Cwmin1:4; /* for AC_BK */ +- UINT32 Cwmin2:4; /* for AC_VI */ +- UINT32 Cwmin3:4; /* for AC_VO */ +- UINT32 Rsv:16; ++ u32 Cwmin0:4; /* for AC_BE */ ++ u32 Cwmin1:4; /* for AC_BK */ ++ u32 Cwmin2:4; /* for AC_VI */ ++ u32 Cwmin3:4; /* for AC_VO */ ++ u32 Rsv:16; + } field; +- UINT32 word; ++ u32 word; + } CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC; + + /* */ +@@ -257,13 +257,13 @@ typedef union _CWMIN_CSR_STRUC { + #define WMM_CWMAX_CFG 0x021c + typedef union _CWMAX_CSR_STRUC { + struct { +- UINT32 Cwmax0:4; /* for AC_BE */ +- UINT32 Cwmax1:4; /* for AC_BK */ +- UINT32 Cwmax2:4; /* for AC_VI */ +- UINT32 Cwmax3:4; /* for AC_VO */ +- UINT32 Rsv:16; ++ u32 Cwmax0:4; /* for AC_BE */ ++ u32 Cwmax1:4; /* for AC_BK */ ++ u32 Cwmax2:4; /* for AC_VI */ ++ u32 Cwmax3:4; /* for AC_VO */ ++ u32 Rsv:16; + } field; +- UINT32 word; ++ u32 word; + } CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC; + + /* */ +@@ -272,10 +272,10 @@ typedef union _CWMAX_CSR_STRUC { + #define WMM_TXOP0_CFG 0x0220 + typedef union _AC_TXOP_CSR0_STRUC { + struct { +- USHORT Ac0Txop; /* for AC_BK, in unit of 32us */ +- USHORT Ac1Txop; /* for AC_BE, in unit of 32us */ ++ u16 Ac0Txop; /* for AC_BK, in unit of 32us */ ++ u16 Ac1Txop; /* for AC_BE, in unit of 32us */ + } field; +- UINT32 word; ++ u32 word; + } AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC; + + /* */ +@@ -284,10 +284,10 @@ typedef union _AC_TXOP_CSR0_STRUC { + #define WMM_TXOP1_CFG 0x0224 + typedef union _AC_TXOP_CSR1_STRUC { + struct { +- USHORT Ac2Txop; /* for AC_VI, in unit of 32us */ +- USHORT Ac3Txop; /* for AC_VO, in unit of 32us */ ++ u16 Ac2Txop; /* for AC_VI, in unit of 32us */ ++ u16 Ac3Txop; /* for AC_VO, in unit of 32us */ + } field; +- UINT32 word; ++ u32 word; + } AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC; + + #define RINGREG_DIFF 0x10 +@@ -328,20 +328,20 @@ typedef union _AC_TXOP_CSR1_STRUC { + #define USB_DMA_CFG 0x02a0 + typedef union _USB_DMA_CFG_STRUC { + struct { +- UINT32 RxBulkAggTOut:8; /*Rx Bulk Aggregation TimeOut in unit of 33ns */ +- UINT32 RxBulkAggLmt:8; /*Rx Bulk Aggregation Limit in unit of 256 bytes */ +- UINT32 phyclear:1; /*phy watch dog enable. write 1 */ +- UINT32 rsv:2; +- UINT32 TxClear:1; /*Clear USB DMA TX path */ +- UINT32 TxopHalt:1; /*Halt TXOP count down when TX buffer is full. */ +- UINT32 RxBulkAggEn:1; /*Enable Rx Bulk Aggregation */ +- UINT32 RxBulkEn:1; /*Enable USB DMA Rx */ +- UINT32 TxBulkEn:1; /*Enable USB DMA Tx */ +- UINT32 EpoutValid:6; /*OUT endpoint data valid */ +- UINT32 RxBusy:1; /*USB DMA RX FSM busy */ +- UINT32 TxBusy:1; /*USB DMA TX FSM busy */ ++ u32 RxBulkAggTOut:8; /*Rx Bulk Aggregation TimeOut in unit of 33ns */ ++ u32 RxBulkAggLmt:8; /*Rx Bulk Aggregation Limit in unit of 256 bytes */ ++ u32 phyclear:1; /*phy watch dog enable. write 1 */ ++ u32 rsv:2; ++ u32 TxClear:1; /*Clear USB DMA TX path */ ++ u32 TxopHalt:1; /*Halt TXOP count down when TX buffer is full. */ ++ u32 RxBulkAggEn:1; /*Enable Rx Bulk Aggregation */ ++ u32 RxBulkEn:1; /*Enable USB DMA Rx */ ++ u32 TxBulkEn:1; /*Enable USB DMA Tx */ ++ u32 EpoutValid:6; /*OUT endpoint data valid */ ++ u32 RxBusy:1; /*USB DMA RX FSM busy */ ++ u32 TxBusy:1; /*USB DMA TX FSM busy */ + } field; +- UINT32 word; ++ u32 word; + } USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC; + + /* */ +@@ -384,10 +384,10 @@ typedef union _USB_DMA_CFG_STRUC { + #define MAC_CSR0 0x1000 + typedef union _ASIC_VER_ID_STRUC { + struct { +- USHORT ASICRev; /* reversion : 0 */ +- USHORT ASICVer; /* version : 2860 */ ++ u16 ASICRev; /* reversion : 0 */ ++ u16 ASICVer; /* version : 2860 */ + } field; +- UINT32 word; ++ u32 word; + } ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC; + #define MAC_SYS_CTRL 0x1004 /*MAC_CSR1 */ + #define MAC_ADDR_DW0 0x1008 /* MAC ADDR DW0 */ +@@ -397,12 +397,12 @@ typedef union _ASIC_VER_ID_STRUC { + /* */ + typedef union _MAC_DW0_STRUC { + struct { +- UCHAR Byte0; /* MAC address byte 0 */ +- UCHAR Byte1; /* MAC address byte 1 */ +- UCHAR Byte2; /* MAC address byte 2 */ +- UCHAR Byte3; /* MAC address byte 3 */ ++ u8 Byte0; /* MAC address byte 0 */ ++ u8 Byte1; /* MAC address byte 1 */ ++ u8 Byte2; /* MAC address byte 2 */ ++ u8 Byte3; /* MAC address byte 3 */ + } field; +- UINT32 word; ++ u32 word; + } MAC_DW0_STRUC, *PMAC_DW0_STRUC; + + /* */ +@@ -410,12 +410,12 @@ typedef union _MAC_DW0_STRUC { + /* */ + typedef union _MAC_DW1_STRUC { + struct { +- UCHAR Byte4; /* MAC address byte 4 */ +- UCHAR Byte5; /* MAC address byte 5 */ +- UCHAR U2MeMask; +- UCHAR Rsvd1; ++ u8 Byte4; /* MAC address byte 4 */ ++ u8 Byte5; /* MAC address byte 5 */ ++ u8 U2MeMask; ++ u8 Rsvd1; + } field; +- UINT32 word; ++ u32 word; + } MAC_DW1_STRUC, *PMAC_DW1_STRUC; + + #define MAC_BSSID_DW0 0x1010 /* MAC BSSID DW0 */ +@@ -426,13 +426,13 @@ typedef union _MAC_DW1_STRUC { + /* */ + typedef union _MAC_CSR5_STRUC { + struct { +- UCHAR Byte4; /* BSSID byte 4 */ +- UCHAR Byte5; /* BSSID byte 5 */ +- USHORT BssIdMask:2; /* 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID */ +- USHORT MBssBcnNum:3; +- USHORT Rsvd:11; ++ u8 Byte4; /* BSSID byte 4 */ ++ u8 Byte5; /* BSSID byte 5 */ ++ u16 BssIdMask:2; /* 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID */ ++ u16 MBssBcnNum:3; ++ u16 Rsvd:11; + } field; +- UINT32 word; ++ u32 word; + } MAC_CSR5_STRUC, *PMAC_CSR5_STRUC; + + #define MAX_LEN_CFG 0x1018 /* rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16 */ +@@ -442,15 +442,15 @@ typedef union _MAC_CSR5_STRUC { + /* */ + typedef union _BBP_CSR_CFG_STRUC { + struct { +- UINT32 Value:8; /* Register value to program into BBP */ +- UINT32 RegNum:8; /* Selected BBP register */ +- UINT32 fRead:1; /* 0: Write BBP, 1: Read BBP */ +- UINT32 Busy:1; /* 1: ASIC is busy execute BBP programming. */ +- UINT32 BBP_PAR_DUR:1; /* 0: 4 MAC clock cycles 1: 8 MAC clock cycles */ +- UINT32 BBP_RW_MODE:1; /* 0: use serial mode 1:parallel */ +- UINT32:12; ++ u32 Value:8; /* Register value to program into BBP */ ++ u32 RegNum:8; /* Selected BBP register */ ++ u32 fRead:1; /* 0: Write BBP, 1: Read BBP */ ++ u32 Busy:1; /* 1: ASIC is busy execute BBP programming. */ ++ u32 BBP_PAR_DUR:1; /* 0: 4 MAC clock cycles 1: 8 MAC clock cycles */ ++ u32 BBP_RW_MODE:1; /* 0: use serial mode 1:parallel */ ++ u32 : 12; + } field; +- UINT32 word; ++ u32 word; + } BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; + #define RF_CSR_CFG0 0x1020 + /* */ +@@ -458,45 +458,45 @@ typedef union _BBP_CSR_CFG_STRUC { + /* */ + typedef union _RF_CSR_CFG0_STRUC { + struct { +- UINT32 RegIdAndContent:24; /* Register value to program into BBP */ +- UINT32 bitwidth:5; /* Selected BBP register */ +- UINT32 StandbyMode:1; /* 0: high when stand by 1: low when standby */ +- UINT32 Sel:1; /* 0:RF_LE0 activate 1:RF_LE1 activate */ +- UINT32 Busy:1; /* 0: idle 1: 8busy */ ++ u32 RegIdAndContent:24; /* Register value to program into BBP */ ++ u32 bitwidth:5; /* Selected BBP register */ ++ u32 StandbyMode:1; /* 0: high when stand by 1: low when standby */ ++ u32 Sel:1; /* 0:RF_LE0 activate 1:RF_LE1 activate */ ++ u32 Busy:1; /* 0: idle 1: 8busy */ + } field; +- UINT32 word; ++ u32 word; + } RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC; + #define RF_CSR_CFG1 0x1024 + typedef union _RF_CSR_CFG1_STRUC { + struct { +- UINT32 RegIdAndContent:24; /* Register value to program into BBP */ +- UINT32 RFGap:5; /* Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) */ +- UINT32 rsv:7; /* 0: idle 1: 8busy */ ++ u32 RegIdAndContent:24; /* Register value to program into BBP */ ++ u32 RFGap:5; /* Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec) */ ++ u32 rsv:7; /* 0: idle 1: 8busy */ + } field; +- UINT32 word; ++ u32 word; + } RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC; + #define RF_CSR_CFG2 0x1028 /* */ + typedef union _RF_CSR_CFG2_STRUC { + struct { +- UINT32 RegIdAndContent:24; /* Register value to program into BBP */ +- UINT32 rsv:8; /* 0: idle 1: 8busy */ ++ u32 RegIdAndContent:24; /* Register value to program into BBP */ ++ u32 rsv:8; /* 0: idle 1: 8busy */ + } field; +- UINT32 word; ++ u32 word; + } RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC; + #define LED_CFG 0x102c /* MAC_CSR14 */ + typedef union _LED_CFG_STRUC { + struct { +- UINT32 OnPeriod:8; /* blinking on period unit 1ms */ +- UINT32 OffPeriod:8; /* blinking off period unit 1ms */ +- UINT32 SlowBlinkPeriod:6; /* slow blinking period. unit:1ms */ +- UINT32 rsv:2; +- UINT32 RLedMode:2; /* red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on */ +- UINT32 GLedMode:2; /* green Led Mode */ +- UINT32 YLedMode:2; /* yellow Led Mode */ +- UINT32 LedPolar:1; /* Led Polarity. 0: active low1: active high */ +- UINT32:1; ++ u32 OnPeriod:8; /* blinking on period unit 1ms */ ++ u32 OffPeriod:8; /* blinking off period unit 1ms */ ++ u32 SlowBlinkPeriod:6; /* slow blinking period. unit:1ms */ ++ u32 rsv:2; ++ u32 RLedMode:2; /* red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on */ ++ u32 GLedMode:2; /* green Led Mode */ ++ u32 YLedMode:2; /* yellow Led Mode */ ++ u32 LedPolar:1; /* Led Polarity. 0: active low1: active high */ ++ u32 : 1; + } field; +- UINT32 word; ++ u32 word; + } LED_CFG_STRUC, *PLED_CFG_STRUC; + /* */ + /* 4.2 MAC TIMING configuration registers (offset:0x1100) */ +@@ -504,14 +504,14 @@ typedef union _LED_CFG_STRUC { + #define XIFS_TIME_CFG 0x1100 /* MAC_CSR8 MAC_CSR9 */ + typedef union _IFS_SLOT_CFG_STRUC { + struct { +- UINT32 CckmSifsTime:8; /* unit 1us. Applied after CCK RX/TX */ +- UINT32 OfdmSifsTime:8; /* unit 1us. Applied after OFDM RX/TX */ +- UINT32 OfdmXifsTime:4; /*OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND */ +- UINT32 EIFS:9; /* unit 1us */ +- UINT32 BBRxendEnable:1; /* reference RXEND signal to begin XIFS defer */ +- UINT32 rsv:2; ++ u32 CckmSifsTime:8; /* unit 1us. Applied after CCK RX/TX */ ++ u32 OfdmSifsTime:8; /* unit 1us. Applied after OFDM RX/TX */ ++ u32 OfdmXifsTime:4; /*OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND */ ++ u32 EIFS:9; /* unit 1us */ ++ u32 BBRxendEnable:1; /* reference RXEND signal to begin XIFS defer */ ++ u32 rsv:2; + } field; +- UINT32 word; ++ u32 word; + } IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC; + + #define BKOFF_SLOT_CFG 0x1104 /* mac_csr9 last 8 bits */ +@@ -528,15 +528,15 @@ typedef union _IFS_SLOT_CFG_STRUC { + /* */ + typedef union _BCN_TIME_CFG_STRUC { + struct { +- UINT32 BeaconInterval:16; /* in unit of 1/16 TU */ +- UINT32 bTsfTicking:1; /* Enable TSF auto counting */ +- UINT32 TsfSyncMode:2; /* Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode */ +- UINT32 bTBTTEnable:1; +- UINT32 bBeaconGen:1; /* Enable beacon generator */ +- UINT32:3; +- UINT32 TxTimestampCompensate:8; ++ u32 BeaconInterval:16; /* in unit of 1/16 TU */ ++ u32 bTsfTicking:1; /* Enable TSF auto counting */ ++ u32 TsfSyncMode:2; /* Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode */ ++ u32 bTBTTEnable:1; ++ u32 bBeaconGen:1; /* Enable beacon generator */ ++ u32 : 3; ++ u32 TxTimestampCompensate:8; + } field; +- UINT32 word; ++ u32 word; + } BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC; + #define TBTT_SYNC_CFG 0x1118 /* txrx_csr10 */ + #define TSF_TIMER_DW0 0x111C /* Local TSF timer lsb 32 bits. Read-only */ +@@ -557,12 +557,12 @@ typedef union _BCN_TIME_CFG_STRUC { + /* */ + typedef union _AUTO_WAKEUP_STRUC { + struct { +- UINT32 AutoLeadTime:8; +- UINT32 NumofSleepingTbtt:7; /* ForceWake has high privilege than PutToSleep when both set */ +- UINT32 EnableAutoWakeup:1; /* 0:sleep, 1:awake */ +- UINT32:16; ++ u32 AutoLeadTime:8; ++ u32 NumofSleepingTbtt:7; /* ForceWake has high privilege than PutToSleep when both set */ ++ u32 EnableAutoWakeup:1; /* 0:sleep, 1:awake */ ++ u32 : 16; + } field; +- UINT32 word; ++ u32 word; + } AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; + /* */ + /* 4.3 MAC TX configuration registers (offset:0x1300) */ +@@ -574,13 +574,13 @@ typedef union _AUTO_WAKEUP_STRUC { + #define EDCA_AC3_CFG 0x130c + typedef union _EDCA_AC_CFG_STRUC { + struct { +- UINT32 AcTxop:8; /* in unit of 32us */ +- UINT32 Aifsn:4; /* # of slot time */ +- UINT32 Cwmin:4; /* */ +- UINT32 Cwmax:4; /*unit power of 2 */ +- UINT32:12; /* */ ++ u32 AcTxop:8; /* in unit of 32us */ ++ u32 Aifsn:4; /* # of slot time */ ++ u32 Cwmin:4; /* */ ++ u32 Cwmax:4; /*unit power of 2 */ ++ u32 : 12; /* */ + } field; +- UINT32 word; ++ u32 word; + } EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; + + #define EDCA_TID_AC_MAP 0x1310 +@@ -600,104 +600,104 @@ typedef union _EDCA_AC_CFG_STRUC { + + typedef union _TX_RTS_CFG_STRUC { + struct { +- UINT32 AutoRtsRetryLimit:8; +- UINT32 RtsThres:16; /* unit:byte */ +- UINT32 RtsFbkEn:1; /* enable rts rate fallback */ +- UINT32 rsv:7; /* 1: HT non-STBC control frame enable */ ++ u32 AutoRtsRetryLimit:8; ++ u32 RtsThres:16; /* unit:byte */ ++ u32 RtsFbkEn:1; /* enable rts rate fallback */ ++ u32 rsv:7; /* 1: HT non-STBC control frame enable */ + } field; +- UINT32 word; ++ u32 word; + } TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC; + #define TX_TIMEOUT_CFG 0x1348 + typedef union _TX_TIMEOUT_CFG_STRUC { + struct { +- UINT32 rsv:4; +- UINT32 MpduLifeTime:4; /* expiration time = 2^(9+MPDU LIFE TIME) us */ +- UINT32 RxAckTimeout:8; /* unit:slot. Used for TX precedure */ +- UINT32 TxopTimeout:8; /*TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) */ +- UINT32 rsv2:8; /* 1: HT non-STBC control frame enable */ ++ u32 rsv:4; ++ u32 MpduLifeTime:4; /* expiration time = 2^(9+MPDU LIFE TIME) us */ ++ u32 RxAckTimeout:8; /* unit:slot. Used for TX precedure */ ++ u32 TxopTimeout:8; /*TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT) */ ++ u32 rsv2:8; /* 1: HT non-STBC control frame enable */ + } field; +- UINT32 word; ++ u32 word; + } TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC; + #define TX_RTY_CFG 0x134c + typedef union PACKED _TX_RTY_CFG_STRUC { + struct { +- UINT32 ShortRtyLimit:8; /* short retry limit */ +- UINT32 LongRtyLimit:8; /*long retry limit */ +- UINT32 LongRtyThre:12; /* Long retry threshoold */ +- UINT32 NonAggRtyMode:1; /* Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ +- UINT32 AggRtyMode:1; /* Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ +- UINT32 TxautoFBEnable:1; /* Tx retry PHY rate auto fallback enable */ +- UINT32 rsv:1; /* 1: HT non-STBC control frame enable */ ++ u32 ShortRtyLimit:8; /* short retry limit */ ++ u32 LongRtyLimit:8; /*long retry limit */ ++ u32 LongRtyThre:12; /* Long retry threshoold */ ++ u32 NonAggRtyMode:1; /* Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ ++ u32 AggRtyMode:1; /* Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer */ ++ u32 TxautoFBEnable:1; /* Tx retry PHY rate auto fallback enable */ ++ u32 rsv:1; /* 1: HT non-STBC control frame enable */ + } field; +- UINT32 word; ++ u32 word; + } TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC; + #define TX_LINK_CFG 0x1350 + typedef union PACKED _TX_LINK_CFG_STRUC { + struct PACKED { +- UINT32 RemoteMFBLifeTime:8; /*remote MFB life time. unit : 32us */ +- UINT32 MFBEnable:1; /* TX apply remote MFB 1:enable */ +- UINT32 RemoteUMFSEnable:1; /* remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) */ +- UINT32 TxMRQEn:1; /* MCS request TX enable */ +- UINT32 TxRDGEn:1; /* RDG TX enable */ +- UINT32 TxCFAckEn:1; /* Piggyback CF-ACK enable */ +- UINT32 rsv:3; /* */ +- UINT32 RemotMFB:8; /* remote MCS feedback */ +- UINT32 RemotMFS:8; /*remote MCS feedback sequence number */ ++ u32 RemoteMFBLifeTime:8; /*remote MFB life time. unit : 32us */ ++ u32 MFBEnable:1; /* TX apply remote MFB 1:enable */ ++ u32 RemoteUMFSEnable:1; /* remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7) */ ++ u32 TxMRQEn:1; /* MCS request TX enable */ ++ u32 TxRDGEn:1; /* RDG TX enable */ ++ u32 TxCFAckEn:1; /* Piggyback CF-ACK enable */ ++ u32 rsv:3; /* */ ++ u32 RemotMFB:8; /* remote MCS feedback */ ++ u32 RemotMFS:8; /*remote MCS feedback sequence number */ + } field; +- UINT32 word; ++ u32 word; + } TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC; + #define HT_FBK_CFG0 0x1354 + typedef union PACKED _HT_FBK_CFG0_STRUC { + struct { +- UINT32 HTMCS0FBK:4; +- UINT32 HTMCS1FBK:4; +- UINT32 HTMCS2FBK:4; +- UINT32 HTMCS3FBK:4; +- UINT32 HTMCS4FBK:4; +- UINT32 HTMCS5FBK:4; +- UINT32 HTMCS6FBK:4; +- UINT32 HTMCS7FBK:4; ++ u32 HTMCS0FBK:4; ++ u32 HTMCS1FBK:4; ++ u32 HTMCS2FBK:4; ++ u32 HTMCS3FBK:4; ++ u32 HTMCS4FBK:4; ++ u32 HTMCS5FBK:4; ++ u32 HTMCS6FBK:4; ++ u32 HTMCS7FBK:4; + } field; +- UINT32 word; ++ u32 word; + } HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC; + #define HT_FBK_CFG1 0x1358 + typedef union _HT_FBK_CFG1_STRUC { + struct { +- UINT32 HTMCS8FBK:4; +- UINT32 HTMCS9FBK:4; +- UINT32 HTMCS10FBK:4; +- UINT32 HTMCS11FBK:4; +- UINT32 HTMCS12FBK:4; +- UINT32 HTMCS13FBK:4; +- UINT32 HTMCS14FBK:4; +- UINT32 HTMCS15FBK:4; ++ u32 HTMCS8FBK:4; ++ u32 HTMCS9FBK:4; ++ u32 HTMCS10FBK:4; ++ u32 HTMCS11FBK:4; ++ u32 HTMCS12FBK:4; ++ u32 HTMCS13FBK:4; ++ u32 HTMCS14FBK:4; ++ u32 HTMCS15FBK:4; + } field; +- UINT32 word; ++ u32 word; + } HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC; + #define LG_FBK_CFG0 0x135c + typedef union _LG_FBK_CFG0_STRUC { + struct { +- UINT32 OFDMMCS0FBK:4; /*initial value is 0 */ +- UINT32 OFDMMCS1FBK:4; /*initial value is 0 */ +- UINT32 OFDMMCS2FBK:4; /*initial value is 1 */ +- UINT32 OFDMMCS3FBK:4; /*initial value is 2 */ +- UINT32 OFDMMCS4FBK:4; /*initial value is 3 */ +- UINT32 OFDMMCS5FBK:4; /*initial value is 4 */ +- UINT32 OFDMMCS6FBK:4; /*initial value is 5 */ +- UINT32 OFDMMCS7FBK:4; /*initial value is 6 */ ++ u32 OFDMMCS0FBK:4; /*initial value is 0 */ ++ u32 OFDMMCS1FBK:4; /*initial value is 0 */ ++ u32 OFDMMCS2FBK:4; /*initial value is 1 */ ++ u32 OFDMMCS3FBK:4; /*initial value is 2 */ ++ u32 OFDMMCS4FBK:4; /*initial value is 3 */ ++ u32 OFDMMCS5FBK:4; /*initial value is 4 */ ++ u32 OFDMMCS6FBK:4; /*initial value is 5 */ ++ u32 OFDMMCS7FBK:4; /*initial value is 6 */ + } field; +- UINT32 word; ++ u32 word; + } LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC; + #define LG_FBK_CFG1 0x1360 + typedef union _LG_FBK_CFG1_STRUC { + struct { +- UINT32 CCKMCS0FBK:4; /*initial value is 0 */ +- UINT32 CCKMCS1FBK:4; /*initial value is 0 */ +- UINT32 CCKMCS2FBK:4; /*initial value is 1 */ +- UINT32 CCKMCS3FBK:4; /*initial value is 2 */ +- UINT32 rsv:16; ++ u32 CCKMCS0FBK:4; /*initial value is 0 */ ++ u32 CCKMCS1FBK:4; /*initial value is 0 */ ++ u32 CCKMCS2FBK:4; /*initial value is 1 */ ++ u32 CCKMCS3FBK:4; /*initial value is 2 */ ++ u32 rsv:16; + } field; +- UINT32 word; ++ u32 word; + } LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC; + + /*======================================================= */ +@@ -705,24 +705,24 @@ typedef union _LG_FBK_CFG1_STRUC { + /*======================================================= */ + #define CCK_PROT_CFG 0x1364 /*CCK Protection */ + #define ASIC_SHORTNAV 1 +-#define ASIC_LONGNAV 2 ++#define ASIC_longNAV 2 + #define ASIC_RTS 1 + #define ASIC_CTS 2 + typedef union _PROT_CFG_STRUC { + struct { +- UINT32 ProtectRate:16; /*Protection control frame rate for CCK TX(RTS/CTS/CFEnd). */ +- UINT32 ProtectCtrl:2; /*Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv */ +- UINT32 ProtectNav:2; /*TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv */ +- UINT32 TxopAllowCck:1; /*CCK TXOP allowance.0:disallow. */ +- UINT32 TxopAllowOfdm:1; /*CCK TXOP allowance.0:disallow. */ +- UINT32 TxopAllowMM20:1; /*CCK TXOP allowance. 0:disallow. */ +- UINT32 TxopAllowMM40:1; /*CCK TXOP allowance.0:disallow. */ +- UINT32 TxopAllowGF20:1; /*CCK TXOP allowance.0:disallow. */ +- UINT32 TxopAllowGF40:1; /*CCK TXOP allowance.0:disallow. */ +- UINT32 RTSThEn:1; /*RTS threshold enable on CCK TX */ +- UINT32 rsv:5; ++ u32 ProtectRate:16; /*Protection control frame rate for CCK TX(RTS/CTS/CFEnd). */ ++ u32 ProtectCtrl:2; /*Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv */ ++ u32 ProtectNav:2; /*TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv */ ++ u32 TxopAllowCck:1; /*CCK TXOP allowance.0:disallow. */ ++ u32 TxopAllowOfdm:1; /*CCK TXOP allowance.0:disallow. */ ++ u32 TxopAllowMM20:1; /*CCK TXOP allowance. 0:disallow. */ ++ u32 TxopAllowMM40:1; /*CCK TXOP allowance.0:disallow. */ ++ u32 TxopAllowGF20:1; /*CCK TXOP allowance.0:disallow. */ ++ u32 TxopAllowGF40:1; /*CCK TXOP allowance.0:disallow. */ ++ u32 RTSThEn:1; /*RTS threshold enable on CCK TX */ ++ u32 rsv:5; + } field; +- UINT32 word; ++ u32 word; + } PROT_CFG_STRUC, *PPROT_CFG_STRUC; + + #define OFDM_PROT_CFG 0x1368 /*OFDM Protection */ +@@ -743,17 +743,17 @@ typedef union _PROT_CFG_STRUC { + /* */ + typedef union _AUTO_RSP_CFG_STRUC { + struct { +- UINT32 AutoResponderEnable:1; +- UINT32 BACAckPolicyEnable:1; /* 0:long, 1:short preamble */ +- UINT32 CTS40MMode:1; /* Response CTS 40MHz duplicate mode */ +- UINT32 CTS40MRef:1; /* Response CTS 40MHz duplicate mode */ +- UINT32 AutoResponderPreamble:1; /* 0:long, 1:short preamble */ +- UINT32 rsv:1; /* Power bit value in conrtrol frame */ +- UINT32 DualCTSEn:1; /* Power bit value in conrtrol frame */ +- UINT32 AckCtsPsmBit:1; /* Power bit value in conrtrol frame */ +- UINT32:24; ++ u32 AutoResponderEnable:1; ++ u32 BACAckPolicyEnable:1; /* 0:long, 1:short preamble */ ++ u32 CTS40MMode:1; /* Response CTS 40MHz duplicate mode */ ++ u32 CTS40MRef:1; /* Response CTS 40MHz duplicate mode */ ++ u32 AutoResponderPreamble:1; /* 0:long, 1:short preamble */ ++ u32 rsv:1; /* Power bit value in conrtrol frame */ ++ u32 DualCTSEn:1; /* Power bit value in conrtrol frame */ ++ u32 AckCtsPsmBit:1; /* Power bit value in conrtrol frame */ ++ u32 : 24; + } field; +- UINT32 word; ++ u32 word; + } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; + + #define LEGACY_BASIC_RATE 0x1408 /* TXRX_CSR5 0x3054 */ +@@ -789,21 +789,21 @@ typedef union _AUTO_RSP_CFG_STRUC { + /* */ + typedef union _RX_STA_CNT0_STRUC { + struct { +- USHORT CrcErr; +- USHORT PhyErr; ++ u16 CrcErr; ++ u16 PhyErr; + } field; +- UINT32 word; ++ u32 word; + } RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC; + + /* */ +-/* RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count */ ++/* RX_STA_CNT1_STRUC: RX False CCA count & RX long frame count */ + /* */ + typedef union _RX_STA_CNT1_STRUC { + struct { +- USHORT FalseCca; +- USHORT PlcpErr; ++ u16 FalseCca; ++ u16 PlcpErr; + } field; +- UINT32 word; ++ u32 word; + } RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC; + + /* */ +@@ -811,10 +811,10 @@ typedef union _RX_STA_CNT1_STRUC { + /* */ + typedef union _RX_STA_CNT2_STRUC { + struct { +- USHORT RxDupliCount; +- USHORT RxFifoOverflowCount; ++ u16 RxDupliCount; ++ u16 RxFifoOverflowCount; + } field; +- UINT32 word; ++ u32 word; + } RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC; + #define TX_STA_CNT0 0x170C /* */ + /* */ +@@ -822,10 +822,10 @@ typedef union _RX_STA_CNT2_STRUC { + /* */ + typedef union _TX_STA_CNT0_STRUC { + struct { +- USHORT TxFailCount; +- USHORT TxBeaconCount; ++ u16 TxFailCount; ++ u16 TxBeaconCount; + } field; +- UINT32 word; ++ u32 word; + } TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC; + #define TX_STA_CNT1 0x1710 /* */ + /* */ +@@ -833,10 +833,10 @@ typedef union _TX_STA_CNT0_STRUC { + /* */ + typedef union _TX_STA_CNT1_STRUC { + struct { +- USHORT TxSuccess; +- USHORT TxRetransmit; ++ u16 TxSuccess; ++ u16 TxRetransmit; + } field; +- UINT32 word; ++ u32 word; + } TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC; + #define TX_STA_CNT2 0x1714 /* */ + /* */ +@@ -844,10 +844,10 @@ typedef union _TX_STA_CNT1_STRUC { + /* */ + typedef union _TX_STA_CNT2_STRUC { + struct { +- USHORT TxZeroLenCount; +- USHORT TxUnderFlowCount; ++ u16 TxZeroLenCount; ++ u16 TxUnderFlowCount; + } field; +- UINT32 word; ++ u32 word; + } TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC; + #define TX_STA_FIFO 0x1718 /* */ + /* */ +@@ -855,103 +855,103 @@ typedef union _TX_STA_CNT2_STRUC { + /* */ + typedef union PACKED _TX_STA_FIFO_STRUC { + struct { +- UINT32 bValid:1; /* 1:This register contains a valid TX result */ +- UINT32 PidType:4; +- UINT32 TxSuccess:1; /* Tx No retry success */ +- UINT32 TxAggre:1; /* Tx Retry Success */ +- UINT32 TxAckRequired:1; /* Tx fail */ +- UINT32 wcid:8; /*wireless client index */ +-/* UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ +- UINT32 SuccessRate:13; /*include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ +- UINT32 TxBF:1; +- UINT32 Reserve:2; ++ u32 bValid:1; /* 1:This register contains a valid TX result */ ++ u32 PidType:4; ++ u32 TxSuccess:1; /* Tx No retry success */ ++ u32 TxAggre:1; /* Tx Retry Success */ ++ u32 TxAckRequired:1; /* Tx fail */ ++ u32 wcid:8; /*wireless client index */ ++/* u32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ ++ u32 SuccessRate:13; /*include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16. */ ++ u32 TxBF:1; ++ u32 Reserve:2; + } field; +- UINT32 word; ++ u32 word; + } TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC; + /* Debug counter */ + #define TX_AGG_CNT 0x171c + typedef union _TX_AGG_CNT_STRUC { + struct { +- USHORT NonAggTxCount; +- USHORT AggTxCount; ++ u16 NonAggTxCount; ++ u16 AggTxCount; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC; + /* Debug counter */ + #define TX_AGG_CNT0 0x1720 + typedef union _TX_AGG_CNT0_STRUC { + struct { +- USHORT AggSize1Count; +- USHORT AggSize2Count; ++ u16 AggSize1Count; ++ u16 AggSize2Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC; + /* Debug counter */ + #define TX_AGG_CNT1 0x1724 + typedef union _TX_AGG_CNT1_STRUC { + struct { +- USHORT AggSize3Count; +- USHORT AggSize4Count; ++ u16 AggSize3Count; ++ u16 AggSize4Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC; + #define TX_AGG_CNT2 0x1728 + typedef union _TX_AGG_CNT2_STRUC { + struct { +- USHORT AggSize5Count; +- USHORT AggSize6Count; ++ u16 AggSize5Count; ++ u16 AggSize6Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC; + /* Debug counter */ + #define TX_AGG_CNT3 0x172c + typedef union _TX_AGG_CNT3_STRUC { + struct { +- USHORT AggSize7Count; +- USHORT AggSize8Count; ++ u16 AggSize7Count; ++ u16 AggSize8Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC; + /* Debug counter */ + #define TX_AGG_CNT4 0x1730 + typedef union _TX_AGG_CNT4_STRUC { + struct { +- USHORT AggSize9Count; +- USHORT AggSize10Count; ++ u16 AggSize9Count; ++ u16 AggSize10Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC; + #define TX_AGG_CNT5 0x1734 + typedef union _TX_AGG_CNT5_STRUC { + struct { +- USHORT AggSize11Count; +- USHORT AggSize12Count; ++ u16 AggSize11Count; ++ u16 AggSize12Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC; + #define TX_AGG_CNT6 0x1738 + typedef union _TX_AGG_CNT6_STRUC { + struct { +- USHORT AggSize13Count; +- USHORT AggSize14Count; ++ u16 AggSize13Count; ++ u16 AggSize14Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC; + #define TX_AGG_CNT7 0x173c + typedef union _TX_AGG_CNT7_STRUC { + struct { +- USHORT AggSize15Count; +- USHORT AggSize16Count; ++ u16 AggSize15Count; ++ u16 AggSize16Count; + } field; +- UINT32 word; ++ u32 word; + } TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC; + #define MPDU_DENSITY_CNT 0x1740 + typedef union _MPDU_DEN_CNT_STRUC { + struct { +- USHORT TXZeroDelCount; /*TX zero length delimiter count */ +- USHORT RXZeroDelCount; /*RX zero length delimiter count */ ++ u16 TXZeroDelCount; /*TX zero length delimiter count */ ++ u16 RXZeroDelCount; /*RX zero length delimiter count */ + } field; +- UINT32 word; ++ u32 word; + } MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC; + /* */ + /* TXRX control registers - base address 0x3000 */ +@@ -980,29 +980,29 @@ typedef union _MPDU_DEN_CNT_STRUC { + + typedef union _SHAREDKEY_MODE_STRUC { + struct { +- UINT32 Bss0Key0CipherAlg:3; +- UINT32:1; +- UINT32 Bss0Key1CipherAlg:3; +- UINT32:1; +- UINT32 Bss0Key2CipherAlg:3; +- UINT32:1; +- UINT32 Bss0Key3CipherAlg:3; +- UINT32:1; +- UINT32 Bss1Key0CipherAlg:3; +- UINT32:1; +- UINT32 Bss1Key1CipherAlg:3; +- UINT32:1; +- UINT32 Bss1Key2CipherAlg:3; +- UINT32:1; +- UINT32 Bss1Key3CipherAlg:3; +- UINT32:1; ++ u32 Bss0Key0CipherAlg:3; ++ u32 : 1; ++ u32 Bss0Key1CipherAlg:3; ++ u32 : 1; ++ u32 Bss0Key2CipherAlg:3; ++ u32 : 1; ++ u32 Bss0Key3CipherAlg:3; ++ u32 : 1; ++ u32 Bss1Key0CipherAlg:3; ++ u32 : 1; ++ u32 Bss1Key1CipherAlg:3; ++ u32 : 1; ++ u32 Bss1Key2CipherAlg:3; ++ u32 : 1; ++ u32 Bss1Key3CipherAlg:3; ++ u32 : 1; + } field; +- UINT32 word; ++ u32 word; + } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; + /* 64-entry for pairwise key table */ + typedef struct _HW_WCID_ENTRY { /* 8-byte per entry */ +- UCHAR Address[6]; +- UCHAR Rsv[2]; ++ u8 Address[6]; ++ u8 Rsv[2]; + } HW_WCID_ENTRY, PHW_WCID_ENTRY; + + /* ================================================================================= */ +@@ -1010,28 +1010,28 @@ typedef struct _HW_WCID_ENTRY { /* 8-byte per entry */ + /* ================================================================================= */ + /*7.1 WCID ENTRY format : 8bytes */ + typedef struct _WCID_ENTRY_STRUC { +- UCHAR RXBABitmap7; /* bit0 for TID8, bit7 for TID 15 */ +- UCHAR RXBABitmap0; /* bit0 for TID0, bit7 for TID 7 */ +- UCHAR MAC[6]; /* 0 for shared key table. 1 for pairwise key table */ ++ u8 RXBABitmap7; /* bit0 for TID8, bit7 for TID 15 */ ++ u8 RXBABitmap0; /* bit0 for TID0, bit7 for TID 7 */ ++ u8 MAC[6]; /* 0 for shared key table. 1 for pairwise key table */ + } WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; + + /*8.1.1 SECURITY KEY format : 8DW */ + /* 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table */ + typedef struct _HW_KEY_ENTRY { /* 32-byte per entry */ +- UCHAR Key[16]; +- UCHAR TxMic[8]; +- UCHAR RxMic[8]; ++ u8 Key[16]; ++ u8 TxMic[8]; ++ u8 RxMic[8]; + } HW_KEY_ENTRY, *PHW_KEY_ENTRY; + + /*8.1.2 IV/EIV format : 2DW */ + + /*8.1.3 RX attribute entry format : 1DW */ + typedef struct _MAC_ATTRIBUTE_STRUC { +- UINT32 KeyTab:1; /* 0 for shared key table. 1 for pairwise key table */ +- UINT32 PairKeyMode:3; +- UINT32 BSSIDIdx:3; /*multipleBSS index for the WCID */ +- UINT32 RXWIUDF:3; +- UINT32 rsv:22; ++ u32 KeyTab:1; /* 0 for shared key table. 1 for pairwise key table */ ++ u32 PairKeyMode:3; ++ u32 BSSIDIdx:3; /*multipleBSS index for the WCID */ ++ u32 RXWIUDF:3; ++ u32 rsv:22; + } MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; + + /* ================================================================================= */ +@@ -1043,12 +1043,12 @@ typedef struct _MAC_ATTRIBUTE_STRUC { + /* */ + typedef union _H2M_MAILBOX_STRUC { + struct { +- UINT32 LowByte:8; +- UINT32 HighByte:8; +- UINT32 CmdToken:8; +- UINT32 Owner:8; ++ u32 LowByte:8; ++ u32 HighByte:8; ++ u32 CmdToken:8; ++ u32 Owner:8; + } field; +- UINT32 word; ++ u32 word; + } H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC; + + /* */ +@@ -1056,24 +1056,24 @@ typedef union _H2M_MAILBOX_STRUC { + /* */ + typedef union _M2H_CMD_DONE_STRUC { + struct { +- UINT32 CmdToken0; +- UINT32 CmdToken1; +- UINT32 CmdToken2; +- UINT32 CmdToken3; ++ u32 CmdToken0; ++ u32 CmdToken1; ++ u32 CmdToken2; ++ u32 CmdToken3; + } field; +- UINT32 word; ++ u32 word; + } M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC; + + /*NAV_TIME_CFG :NAV */ + typedef union _NAV_TIME_CFG_STRUC { + struct { +- UCHAR Sifs; /* in unit of 1-us */ +- UCHAR SlotTime; /* in unit of 1-us */ +- USHORT Eifs:9; /* in unit of 1-us */ +- USHORT ZeroSifs:1; /* Applied zero SIFS timer after OFDM RX 0: disable */ +- USHORT rsv:6; ++ u8 Sifs; /* in unit of 1-us */ ++ u8 SlotTime; /* in unit of 1-us */ ++ u16 Eifs:9; /* in unit of 1-us */ ++ u16 ZeroSifs:1; /* Applied zero SIFS timer after OFDM RX 0: disable */ ++ u16 rsv:6; + } field; +- UINT32 word; ++ u32 word; + } NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC; + + /* */ +@@ -1081,30 +1081,30 @@ typedef union _NAV_TIME_CFG_STRUC { + /* */ + typedef union _RX_FILTR_CFG_STRUC { + struct { +- UINT32 DropCRCErr:1; /* Drop CRC error */ +- UINT32 DropPhyErr:1; /* Drop physical error */ +- UINT32 DropNotToMe:1; /* Drop not to me unicast frame */ +- UINT32 DropNotMyBSSID:1; /* Drop fram ToDs bit is true */ +- +- UINT32 DropVerErr:1; /* Drop version error frame */ +- UINT32 DropMcast:1; /* Drop multicast frames */ +- UINT32 DropBcast:1; /* Drop broadcast frames */ +- UINT32 DropDuplicate:1; /* Drop duplicate frame */ +- +- UINT32 DropCFEndAck:1; /* Drop Ps-Poll */ +- UINT32 DropCFEnd:1; /* Drop Ps-Poll */ +- UINT32 DropAck:1; /* Drop Ps-Poll */ +- UINT32 DropCts:1; /* Drop Ps-Poll */ +- +- UINT32 DropRts:1; /* Drop Ps-Poll */ +- UINT32 DropPsPoll:1; /* Drop Ps-Poll */ +- UINT32 DropBA:1; /* */ +- UINT32 DropBAR:1; /* */ +- +- UINT32 DropRsvCntlType:1; +- UINT32:15; ++ u32 DropCRCErr:1; /* Drop CRC error */ ++ u32 DropPhyErr:1; /* Drop physical error */ ++ u32 DropNotToMe:1; /* Drop not to me unicast frame */ ++ u32 DropNotMyBSSID:1; /* Drop fram ToDs bit is true */ ++ ++ u32 DropVerErr:1; /* Drop version error frame */ ++ u32 DropMcast:1; /* Drop multicast frames */ ++ u32 DropBcast:1; /* Drop broadcast frames */ ++ u32 DropDuplicate:1; /* Drop duplicate frame */ ++ ++ u32 DropCFEndAck:1; /* Drop Ps-Poll */ ++ u32 DropCFEnd:1; /* Drop Ps-Poll */ ++ u32 DropAck:1; /* Drop Ps-Poll */ ++ u32 DropCts:1; /* Drop Ps-Poll */ ++ ++ u32 DropRts:1; /* Drop Ps-Poll */ ++ u32 DropPsPoll:1; /* Drop Ps-Poll */ ++ u32 DropBA:1; /* */ ++ u32 DropBAR:1; /* */ ++ ++ u32 DropRsvCntlType:1; ++ u32 : 15; + } field; +- UINT32 word; ++ u32 word; + } RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; + + /* */ +@@ -1112,13 +1112,13 @@ typedef union _RX_FILTR_CFG_STRUC { + /* */ + typedef union _PHY_CSR4_STRUC { + struct { +- UINT32 RFRegValue:24; /* Register value (include register id) serial out to RF/IF chip. */ +- UINT32 NumberOfBits:5; /* Number of bits used in RFRegValue (I:20, RFMD:22) */ +- UINT32 IFSelect:1; /* 1: select IF to program, 0: select RF to program */ +- UINT32 PLL_LD:1; /* RF PLL_LD status */ +- UINT32 Busy:1; /* 1: ASIC is busy execute RF programming. */ ++ u32 RFRegValue:24; /* Register value (include register id) serial out to RF/IF chip. */ ++ u32 NumberOfBits:5; /* Number of bits used in RFRegValue (I:20, RFMD:22) */ ++ u32 IFSelect:1; /* 1: select IF to program, 0: select RF to program */ ++ u32 PLL_LD:1; /* RF PLL_LD status */ ++ u32 Busy:1; /* 1: ASIC is busy execute RF programming. */ + } field; +- UINT32 word; ++ u32 word; + } PHY_CSR4_STRUC, *PPHY_CSR4_STRUC; + + /* */ +@@ -1126,24 +1126,24 @@ typedef union _PHY_CSR4_STRUC { + /* */ + typedef union _SEC_CSR5_STRUC { + struct { +- UINT32 Bss2Key0CipherAlg:3; +- UINT32:1; +- UINT32 Bss2Key1CipherAlg:3; +- UINT32:1; +- UINT32 Bss2Key2CipherAlg:3; +- UINT32:1; +- UINT32 Bss2Key3CipherAlg:3; +- UINT32:1; +- UINT32 Bss3Key0CipherAlg:3; +- UINT32:1; +- UINT32 Bss3Key1CipherAlg:3; +- UINT32:1; +- UINT32 Bss3Key2CipherAlg:3; +- UINT32:1; +- UINT32 Bss3Key3CipherAlg:3; +- UINT32:1; ++ u32 Bss2Key0CipherAlg:3; ++ u32 : 1; ++ u32 Bss2Key1CipherAlg:3; ++ u32 : 1; ++ u32 Bss2Key2CipherAlg:3; ++ u32 : 1; ++ u32 Bss2Key3CipherAlg:3; ++ u32 : 1; ++ u32 Bss3Key0CipherAlg:3; ++ u32 : 1; ++ u32 Bss3Key1CipherAlg:3; ++ u32 : 1; ++ u32 Bss3Key2CipherAlg:3; ++ u32 : 1; ++ u32 Bss3Key3CipherAlg:3; ++ u32 : 1; + } field; +- UINT32 word; ++ u32 word; + } SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; + + /* */ +@@ -1151,10 +1151,10 @@ typedef union _SEC_CSR5_STRUC { + /* */ + typedef union _HOST_CMD_CSR_STRUC { + struct { +- UINT32 HostCommand:8; +- UINT32 Rsv:24; ++ u32 HostCommand:8; ++ u32 Rsv:24; + } field; +- UINT32 word; ++ u32 word; + } HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC; + + /* */ +@@ -1166,16 +1166,16 @@ typedef union _HOST_CMD_CSR_STRUC { + /* */ + typedef union _E2PROM_CSR_STRUC { + struct { +- UINT32 Reload:1; /* Reload EEPROM content, write one to reload, self-cleared. */ +- UINT32 EepromSK:1; +- UINT32 EepromCS:1; +- UINT32 EepromDI:1; +- UINT32 EepromDO:1; +- UINT32 Type:1; /* 1: 93C46, 0:93C66 */ +- UINT32 LoadStatus:1; /* 1:loading, 0:done */ +- UINT32 Rsvd:25; ++ u32 Reload:1; /* Reload EEPROM content, write one to reload, self-cleared. */ ++ u32 EepromSK:1; ++ u32 EepromCS:1; ++ u32 EepromDI:1; ++ u32 EepromDO:1; ++ u32 Type:1; /* 1: 93C46, 0:93C66 */ ++ u32 LoadStatus:1; /* 1:loading, 0:done */ ++ u32 Rsvd:25; + } field; +- UINT32 word; ++ u32 word; + } E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC; + + /* */ +@@ -1183,12 +1183,12 @@ typedef union _E2PROM_CSR_STRUC { + /* */ + typedef union _QOS_CSR0_STRUC { + struct { +- UCHAR Byte0; /* MAC address byte 0 */ +- UCHAR Byte1; /* MAC address byte 1 */ +- UCHAR Byte2; /* MAC address byte 2 */ +- UCHAR Byte3; /* MAC address byte 3 */ ++ u8 Byte0; /* MAC address byte 0 */ ++ u8 Byte1; /* MAC address byte 1 */ ++ u8 Byte2; /* MAC address byte 2 */ ++ u8 Byte3; /* MAC address byte 3 */ + } field; +- UINT32 word; ++ u32 word; + } QOS_CSR0_STRUC, *PQOS_CSR0_STRUC; + + /* */ +@@ -1196,25 +1196,25 @@ typedef union _QOS_CSR0_STRUC { + /* */ + typedef union _QOS_CSR1_STRUC { + struct { +- UCHAR Byte4; /* MAC address byte 4 */ +- UCHAR Byte5; /* MAC address byte 5 */ +- UCHAR Rsvd0; +- UCHAR Rsvd1; ++ u8 Byte4; /* MAC address byte 4 */ ++ u8 Byte5; /* MAC address byte 5 */ ++ u8 Rsvd0; ++ u8 Rsvd1; + } field; +- UINT32 word; ++ u32 word; + } QOS_CSR1_STRUC, *PQOS_CSR1_STRUC; + + #define RF_CSR_CFG 0x500 + typedef union _RF_CSR_CFG_STRUC { + struct { +- UINT RF_CSR_DATA:8; /* DATA */ +- UINT TESTCSR_RFACC_REGNUM:5; /* RF register ID */ +- UINT Rsvd2:3; /* Reserved */ +- UINT RF_CSR_WR:1; /* 0: read 1: write */ +- UINT RF_CSR_KICK:1; /* kick RF register read/write */ +- UINT Rsvd1:14; /* Reserved */ ++ u32 RF_CSR_DATA:8; /* DATA */ ++ u32 TESTCSR_RFACC_REGNUM:5; /* RF register ID */ ++ u32 Rsvd2:3; /* Reserved */ ++ u32 RF_CSR_WR:1; /* 0: read 1: write */ ++ u32 RF_CSR_KICK:1; /* kick RF register read/write */ ++ u32 Rsvd1:14; /* Reserved */ + } field; +- UINT word; ++ u32 word; + } RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC; + + /* */ +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index fd1a989..48d1860 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -180,7 +180,7 @@ + if ((_A)->bPCIclkOff == FALSE) \ + { \ + PHY_CSR4_STRUC _value; \ +- ULONG _busyCnt = 0; \ ++ unsigned long _busyCnt = 0; \ + \ + do { \ + RTMP_IO_READ32((_A), RF_CSR_CFG0, &_value.word); \ +@@ -248,7 +248,7 @@ + if ((BbpCsr.field.Busy == IDLE) && \ + (BbpCsr.field.RegNum == _bbpID)) \ + { \ +- *(_pV) = (UCHAR)BbpCsr.field.Value; \ ++ *(_pV) = (u8)BbpCsr.field.Value; \ + break; \ + } \ + } \ +@@ -313,7 +313,7 @@ + if ((BbpCsr.field.Busy == IDLE) && \ + (BbpCsr.field.RegNum == _I)) \ + { \ +- *(_pV) = (UCHAR)BbpCsr.field.Value; \ ++ *(_pV) = (u8)BbpCsr.field.Value; \ + break; \ + } \ + } \ +@@ -351,7 +351,7 @@ + if ((BbpCsr.field.Busy == IDLE) && \ + (BbpCsr.field.RegNum == _I)) \ + { \ +- *(_pV) = (UCHAR)BbpCsr.field.Value; \ ++ *(_pV) = (u8)BbpCsr.field.Value; \ + break; \ + } \ + } \ +@@ -429,7 +429,7 @@ + #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ + { \ + BBP_CSR_CFG_STRUC BbpCsr; \ +- INT BusyCnt = 0; \ ++ int BusyCnt = 0; \ + BOOLEAN brc; \ + if (_I < MAX_NUM_OF_BBP_LATCH) \ + { \ +@@ -523,8 +523,8 @@ + #ifdef RT30xx + #define RTMP_ASIC_MMPS_DISABLE(_pAd) \ + do{ \ +- UINT32 _macData; \ +- UCHAR _bbpData = 0; \ ++ u32 _macData; \ ++ u8 _bbpData = 0; \ + /* disable MMPS BBP control register */ \ + RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ + _bbpData &= ~(0x04); /*bit 2*/ \ +@@ -538,8 +538,8 @@ + + #define RTMP_ASIC_MMPS_ENABLE(_pAd) \ + do{ \ +- UINT32 _macData; \ +- UCHAR _bbpData = 0; \ ++ u32 _macData; \ ++ u8 _bbpData = 0; \ + /* enable MMPS BBP control register */ \ + RTMP_BBP_IO_READ8_BY_REG_ID(_pAd, BBP_R3, &_bbpData); \ + _bbpData |= (0x04); /*bit 2*/ \ +diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c +index 4a62087..beaaafa 100644 +--- a/drivers/staging/rt2860/chips/rt3070.c ++++ b/drivers/staging/rt2860/chips/rt3070.c +@@ -43,25 +43,25 @@ + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif /* RTMP_RF_RW_SUPPORT // */ + +-VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) ++void NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + { +- INT i; +- UCHAR RFValue; ++ int i; ++ u8 RFValue; + + /* Driver must read EEPROM to get RfIcType before initial RF registers */ + /* Initialize RF register to default value */ + if (IS_RT3070(pAd) || IS_RT3071(pAd)) { + /* Init RF calibration */ + /* Driver should toggle RF R30 bit7 before init RF registers */ +- UINT32 RfReg = 0; +- UINT32 data; ++ u32 RfReg = 0; ++ u32 data; + +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg); ++ RT30xxReadRFRegister(pAd, RF_R30, (u8 *)& RfReg); + RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); + RTMPusecDelay(1000); + RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); + + /* Initialize RF register to default value */ + for (i = 0; i < NUM_RF_REG_PARMS; i++) { +@@ -84,9 +84,9 @@ VOID NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) + } + } else if (IS_RT3071(pAd)) { + /* Driver should set RF R6 bit6 on before init RF registers */ +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); ++ RT30xxReadRFRegister(pAd, RF_R06, (u8 *)& RfReg); + RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R06, (u8)RfReg); + + /* init R31 */ + RT30xxWriteRFRegister(pAd, RF_R31, 0x14); +diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c +index cedacfb..b80928c 100644 +--- a/drivers/staging/rt2860/chips/rt3090.c ++++ b/drivers/staging/rt2860/chips/rt3090.c +@@ -43,22 +43,22 @@ + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif /* RTMP_RF_RW_SUPPORT // */ + +-VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) ++void NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + { +- INT i; ++ int i; + /* Driver must read EEPROM to get RfIcType before initial RF registers */ + /* Initialize RF register to default value */ + if (IS_RT3090(pAd)) { + /* Init RF calibration */ + /* Driver should toggle RF R30 bit7 before init RF registers */ +- UINT32 RfReg = 0, data; ++ u32 RfReg = 0, data; + +- RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR) & RfReg); ++ RT30xxReadRFRegister(pAd, RF_R30, (u8 *)& RfReg); + RfReg |= 0x80; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); + RTMPusecDelay(1000); + RfReg &= 0x7F; +- RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); + + /* init R24, R31 */ + RT30xxWriteRFRegister(pAd, RF_R24, 0x0F); +@@ -90,9 +90,9 @@ VOID NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) + } + + /* Driver should set RF R6 bit6 on before calibration */ +- RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR) & RfReg); ++ RT30xxReadRFRegister(pAd, RF_R06, (u8 *)& RfReg); + RfReg |= 0x40; +- RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR) RfReg); ++ RT30xxWriteRFRegister(pAd, RF_R06, (u8)RfReg); + + /*For RF filter Calibration */ + RTMPFilterCalibration(pAd); +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index b03d94d..39b483c 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -87,19 +87,19 @@ REG_PAIR RT30xx_RFRegTable[] = { + , + }; + +-UCHAR NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); ++u8 NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); + + /* Antenna divesity use GPIO3 and EESK pin for control */ + /* Antenna and EEPROM access are both using EESK pin, */ + /* Therefor we should avoid accessing EESK at the same time */ + /* Then restore antenna after EEPROM access */ + /* The original name of this function is AsicSetRxAnt(), now change to */ +-/*VOID AsicSetRxAnt( */ +-VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) ++/*void AsicSetRxAnt( */ ++void RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) + { +- UINT32 Value; ++ u32 Value; + #ifdef RTMP_MAC_PCI +- UINT32 x; ++ u32 x; + #endif + + if ((pAd->EepromAccess) || +@@ -159,11 +159,11 @@ VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + + ======================================================================== + */ +-VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) ++void RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + { +- UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue = 0; +- UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0; +- UCHAR RF_R24_Value = 0; ++ u8 R55x = 0, value, FilterTarget = 0x1E, BBPValue = 0; ++ u32 loop = 0, count = 0, loopcnt = 0, ReTry = 0; ++ u8 RF_R24_Value = 0; + + /* Give bbp filter initial value */ + pAd->Mlme.CaliBW20RfR24 = 0x1F; +@@ -263,10 +263,10 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + if (loopcnt < 100) { + if (loop++ == 0) { + /*BandWidth = 20 MHz */ +- pAd->Mlme.CaliBW20RfR24 = (UCHAR) RF_R24_Value; ++ pAd->Mlme.CaliBW20RfR24 = (u8)RF_R24_Value; + } else { + /*BandWidth = 40 MHz */ +- pAd->Mlme.CaliBW40RfR24 = (UCHAR) RF_R24_Value; ++ pAd->Mlme.CaliBW40RfR24 = (u8)RF_R24_Value; + break; + } + } else +@@ -306,9 +306,9 @@ VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + { +- UCHAR RFValue; ++ u8 RFValue; + + /* RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1 */ + RT30xxReadRFRegister(pAd, RF_R01, &RFValue); +@@ -372,10 +372,10 @@ VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + { +- UCHAR RFValue; +- UINT32 MACValue; ++ u8 RFValue; ++ u32 MACValue; + + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +@@ -428,10 +428,10 @@ VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + { +- UCHAR RFValue; +- UINT32 MACValue; ++ u8 RFValue; ++ u32 MACValue; + + #ifdef RTMP_MAC_USB + if (!IS_RT3572(pAd)) +@@ -493,9 +493,9 @@ VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + /* end johnli */ + +-VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd) ++void RT30xxHaltAction(IN PRTMP_ADAPTER pAd) + { +- UINT32 TxPinCfg = 0x00050F0F; ++ u32 TxPinCfg = 0x00050F0F; + + /* */ + /* Turn off LNA_PE or TRSW_POL */ +diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h +index af8b5ca..4183c8b 100644 +--- a/drivers/staging/rt2860/chlist.h ++++ b/drivers/staging/rt2860/chlist.h +@@ -50,24 +50,24 @@ + #define BAND_BOTH 2 + + typedef struct _CH_DESP { +- UCHAR FirstChannel; +- UCHAR NumOfCh; +- CHAR MaxTxPwr; /* dBm */ +- UCHAR Geography; /* 0:out door, 1:in door, 2:both */ ++ u8 FirstChannel; ++ u8 NumOfCh; ++ char MaxTxPwr; /* dBm */ ++ u8 Geography; /* 0:out door, 1:in door, 2:both */ + BOOLEAN DfsReq; /* Dfs require, 0: No, 1: yes. */ + } CH_DESP, *PCH_DESP; + + typedef struct _CH_REGION { +- UCHAR CountReg[3]; +- UCHAR DfsType; /* 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 */ ++ u8 CountReg[3]; ++ u8 DfsType; /* 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 */ + CH_DESP ChDesp[10]; + } CH_REGION, *PCH_REGION; + + extern CH_REGION ChRegion[]; + + typedef struct _CH_FREQ_MAP_ { +- UINT16 channel; +- UINT16 freqKHz; ++ u16 channel; ++ u16 freqKHz; + } CH_FREQ_MAP; + + extern CH_FREQ_MAP CH_HZ_ID_MAP[]; +@@ -103,15 +103,15 @@ extern int CH_HZ_ID_MAP_NUM; + (_ch) = 1; \ + }while(0) + +-VOID BuildChannelListEx(IN PRTMP_ADAPTER pAd); ++void BuildChannelListEx(IN PRTMP_ADAPTER pAd); + +-VOID BuildBeaconChList(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, OUT PULONG pBufLen); ++void BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++ u8 *pBuf, unsigned long *pBufLen); + +-VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd); ++void N_ChannelCheck(IN PRTMP_ADAPTER pAd); + +-VOID N_SetCenCh(IN PRTMP_ADAPTER pAd); ++void N_SetCenCh(IN PRTMP_ADAPTER pAd); + +-UINT8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 channel); ++u8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, u8 channel); + + #endif /* __CHLIST_H__ */ +diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c +index f69681d..8928ee7 100644 +--- a/drivers/staging/rt2860/common/action.c ++++ b/drivers/staging/rt2860/common/action.c +@@ -39,7 +39,7 @@ + #include "../rt_config.h" + #include "action.h" + +-static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -58,7 +58,7 @@ static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + MT2_CLS3ERR cls3err_action + ========================================================================== + */ +-VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, ++void ActionStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, + OUT STATE_MACHINE_FUNC Trans[]) + { +@@ -98,15 +98,15 @@ VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) MlmeInvalidAction); + } + +-VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_ADDBA_REQ_STRUCT *pInfo; +- UCHAR Addr[6]; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; ++ u8 Addr[6]; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long Idx; + FRAME_ADDBA_REQ Frame; +- ULONG FrameLen; ++ unsigned long FrameLen; + BA_ORI_ENTRY *pBAEntry = NULL; + + pInfo = (MLME_ADDBA_REQ_STRUCT *) Elem->Msg; +@@ -155,8 +155,8 @@ VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Frame.BaStartSeq.field.StartSeq = + pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; + +- *(USHORT *) (&Frame.BaParm) = +- cpu2le16(*(USHORT *) (&Frame.BaParm)); ++ *(u16 *) (&Frame.BaParm) = ++ cpu2le16(*(u16 *) (&Frame.BaParm)); + Frame.TimeOutValue = cpu2le16(Frame.TimeOutValue); + Frame.BaStartSeq.word = cpu2le16(Frame.BaStartSeq.word); + +@@ -188,15 +188,15 @@ VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_DELBA_REQ_STRUCT *pInfo; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG Idx; ++ u8 *pOutBuffer = NULL; ++ u8 *pOutBuffer2 = NULL; ++ int NStatus; ++ unsigned long Idx; + FRAME_DELBA_REQ Frame; +- ULONG FrameLen; ++ unsigned long FrameLen; + FRAME_BAR FrameBar; + + pInfo = (MLME_DELBA_REQ_STRUCT *) Elem->Msg; +@@ -264,8 +264,8 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Frame.DelbaParm.Initiator = pInfo->Initiator; + Frame.DelbaParm.TID = pInfo->TID; + Frame.ReasonCode = 39; /* Time Out */ +- *(USHORT *) (&Frame.DelbaParm) = +- cpu2le16(*(USHORT *) (&Frame.DelbaParm)); ++ *(u16 *) (&Frame.DelbaParm) = ++ cpu2le16(*(u16 *) (&Frame.DelbaParm)); + Frame.ReasonCode = cpu2le16(Frame.ReasonCode); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +@@ -278,27 +278,27 @@ VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- /*PUCHAR pOutBuffer = NULL; */ ++ /*u8 * pOutBuffer = NULL; */ + /*Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 */ + } + +-VOID PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; ++ u8 Action = Elem->Msg[LENGTH_802_11 + 1]; + + switch (Action) { + case ADDBA_REQ: +@@ -313,15 +313,15 @@ VOID PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + } + +-static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Category; ++ u8 Category; + + if (Elem->MsgLen <= LENGTH_802_11) { + return; +@@ -333,19 +333,19 @@ static VOID ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + hex_dump("Reserved Action Frame", &Elem->Msg[0], Elem->MsgLen); + } + +-VOID PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + return; + } + +-static VOID respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, ++static void respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + FRAME_HT_INFO HTINFOframe, *pFrame; +- UCHAR *pAddr; ++ u8 *pAddr; + + /* 2. Always send back ADDBA Response */ + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ +@@ -387,9 +387,9 @@ static VOID respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, + MlmeFreeMemory(pAd, pOutBuffer); + } + +-VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; ++ u8 Action = Elem->Msg[LENGTH_802_11 + 1]; + + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; +@@ -467,11 +467,11 @@ VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-VOID ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) ++void ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) + { + MAC_TABLE_ENTRY *pEntry; +- INT i, total; +- UCHAR TID; ++ int i, total; ++ u8 TID; + + total = pAd->MacTab.Size * NUM_OF_TID; + +@@ -489,15 +489,15 @@ VOID ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) + } + } + +-VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) ++void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + { + FRAME_BAR FrameBar; +- ULONG FrameLen; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- USHORT Sequence; +- UCHAR i, TID; +- USHORT idx; ++ unsigned long FrameLen; ++ int NStatus; ++ u8 *pOutBuffer = NULL; ++ u16 Sequence; ++ u8 i, TID; ++ u16 idx; + BA_ORI_ENTRY *pBAEntry; + + for (i = 0; i < NUM_OF_TID; i++) { +@@ -547,9 +547,9 @@ VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + } + } + +-VOID ActHeaderInit(IN PRTMP_ADAPTER pAd, ++void ActHeaderInit(IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, IN PUCHAR Addr2, IN PUCHAR Addr3) ++ u8 *Addr1, u8 *Addr2, u8 *Addr3) + { + NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); + pHdr80211->FC.Type = BTYPE_MGMT; +@@ -560,8 +560,8 @@ VOID ActHeaderInit(IN PRTMP_ADAPTER pAd, + COPY_MAC_ADDR(pHdr80211->Addr3, Addr3); + } + +-VOID BarHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, IN PUCHAR pDA, IN PUCHAR pSA) ++void BarHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PFRAME_BAR pCntlBar, u8 *pDA, u8 *pSA) + { + NdisZeroMemory(pCntlBar, sizeof(FRAME_BAR)); + pCntlBar->FC.Type = BTYPE_CNTL; +@@ -591,11 +591,11 @@ VOID BarHeaderInit(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID InsertActField(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, IN UINT8 Category, IN UINT8 ActCode) ++void InsertActField(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, u8 Category, u8 ActCode) + { +- ULONG TempLen; ++ unsigned long TempLen; + + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &Category, 1, &ActCode, END_OF_ARGS); +diff --git a/drivers/staging/rt2860/common/action.h b/drivers/staging/rt2860/common/action.h +index 2484c2e..f1d1ac7 100644 +--- a/drivers/staging/rt2860/common/action.h ++++ b/drivers/staging/rt2860/common/action.h +@@ -40,16 +40,16 @@ + #define __ACTION_H__ + + typedef struct PACKED __HT_INFO_OCTET { +- UCHAR Request:1; +- UCHAR Forty_MHz_Intolerant:1; +- UCHAR STA_Channel_Width:1; +- UCHAR Reserved:5; ++ u8 Request:1; ++ u8 Forty_MHz_Intolerant:1; ++ u8 STA_Channel_Width:1; ++ u8 Reserved:5; + } HT_INFORMATION_OCTET; + + typedef struct PACKED __FRAME_HT_INFO { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; ++ u8 Category; ++ u8 Action; + HT_INFORMATION_OCTET HT_Info; + } FRAME_HT_INFO, *PFRAME_HT_INFO; + +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index 97cb40a..1ffa176 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -41,19 +41,19 @@ + static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, + struct reordering_mpdu *mpdu_blk); + +-BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx); ++BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, u16 * Idx); + +-BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx); ++BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, u16 * Idx); + +-VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++void BAOriSessionSetupTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + +-VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++void BARecSessionIdleTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + + BUILD_TIMER_FUNCTION(BAOriSessionSetupTimeout); + BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); +@@ -61,10 +61,10 @@ BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); + #define ANNOUNCE_REORDERING_PACKET(_pAd, _mpdu_blk) \ + Announce_Reordering_Packet(_pAd, _mpdu_blk); + +-VOID BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntryPeer, OUT UCHAR * pWinSize) ++void BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntryPeer, u8 * pWinSize) + { +- UCHAR MaxSize; ++ u8 MaxSize; + + if (pAd->MACVersion >= RALINK_2883_VERSION) /* 3*3 */ + { +@@ -232,7 +232,7 @@ void ba_reordering_resource_release(PRTMP_ADAPTER pAd) + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + { + int i; +- PUCHAR mem; ++ u8 *mem; + struct reordering_mpdu *mpdu_blk; + struct reordering_list *freelist; + +@@ -246,10 +246,10 @@ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + + DBGPRINT(RT_DEBUG_TRACE, + ("Allocate %d memory for BA reordering\n", +- (UINT32) (num * sizeof(struct reordering_mpdu)))); ++ (u32)(num * sizeof(struct reordering_mpdu)))); + + /* allocate number of mpdu_blk memory */ +- os_alloc_mem(pAd, (PUCHAR *) & mem, ++ os_alloc_mem(pAd, (u8 **) & mem, + (num * sizeof(struct reordering_mpdu))); + + pAd->mpdu_blk_pool.mem = mem; +@@ -303,12 +303,12 @@ static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, + NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); + } + +-static USHORT ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, ++static u16 ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, +- IN USHORT StartSeq) ++ u16 StartSeq) + { + struct reordering_mpdu *mpdu_blk; +- USHORT LastIndSeq = RESET_RCV_SEQ; ++ u16 LastIndSeq = RESET_RCV_SEQ; + + NdisAcquireSpinLock(&pBAEntry->RxReRingLock); + +@@ -336,7 +336,7 @@ static USHORT ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, + + static void ba_indicate_reordering_mpdus_le_seq(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, +- IN USHORT Sequence) ++ u16 Sequence) + { + struct reordering_mpdu *mpdu_blk; + +@@ -383,9 +383,9 @@ static void ba_refresh_reordering_mpdus(IN PRTMP_ADAPTER pAd, + /*static */ + void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32) ++ unsigned long Now32) + { +- USHORT Sequence; ++ u16 Sequence; + + /* if ((RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+REORDERING_PACKET_TIMEOUT)) && */ + /* (pBAEntry->list.qlen > ((pBAEntry->BAWinSize*7)/8))) //|| */ +@@ -440,15 +440,15 @@ void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + * generate ADDBA request to + * set up BA agreement + */ +-VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, ++void BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, IN BOOLEAN isForced) ++ u8 TID, ++ u16 TimeOut, ++ unsigned long DelayTime, IN BOOLEAN isForced) + { + /*MLME_ADDBA_REQ_STRUCT AddbaReq; */ + BA_ORI_ENTRY *pBAEntry = NULL; +- USHORT Idx; ++ u16 Idx; + BOOLEAN Cancelled; + + if ((pAd->CommonCfg.BACapability.field.AutoBA != TRUE) +@@ -506,16 +506,16 @@ VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + RTMPSetTimer(&pBAEntry->ORIBATimer, DelayTime); + } + +-VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, ++void BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN PFRAME_ADDBA_RSP pFrame) + { + BA_ORI_ENTRY *pBAEntry = NULL; + BOOLEAN Cancelled; +- UCHAR TID; +- USHORT Idx; +- PUCHAR pOutBuffer2 = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 TID; ++ u16 Idx; ++ u8 *pOutBuffer2 = NULL; ++ int NStatus; ++ unsigned long FrameLen; + FRAME_BAR FrameBar; + + TID = pFrame->BaParm.TID; +@@ -526,7 +526,7 @@ VOID BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + if ((Idx != 0) && (pBAEntry->TID == TID) + && (pBAEntry->ORI_BA_Status == Originator_WaitRes)) { + pBAEntry->BAWinSize = +- min(pBAEntry->BAWinSize, ((UCHAR) pFrame->BaParm.BufSize)); ++ min(pBAEntry->BAWinSize, ((u8)pFrame->BaParm.BufSize)); + BA_MaxWinSizeReasign(pAd, pEntry, &pBAEntry->BAWinSize); + + pBAEntry->TimeOutValue = pFrame->TimeOutValue; +@@ -577,11 +577,11 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + BA_REC_ENTRY *pBAEntry = NULL; + BOOLEAN Status = TRUE; + BOOLEAN Cancelled; +- USHORT Idx; +- UCHAR TID; +- UCHAR BAWinSize; +- /*UINT32 Value; */ +- /*UINT offset; */ ++ u16 Idx; ++ u8 TID; ++ u8 BAWinSize; ++ /*u32 Value; */ ++ /*u32 offset; */ + + ASSERT(pEntry); + +@@ -589,8 +589,8 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + TID = pFrame->BaParm.TID; + + BAWinSize = +- min(((UCHAR) pFrame->BaParm.BufSize), +- (UCHAR) pAd->CommonCfg.BACapability.field.RxBAWinLimit); ++ min(((u8)pFrame->BaParm.BufSize), ++ (u8)pAd->CommonCfg.BACapability.field.RxBAWinLimit); + + /* Intel patch */ + if (BAWinSize == 0) { +@@ -660,7 +660,7 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + return (Status); + } + +-BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) ++BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, u16 * Idx) + { + int i; + BA_REC_ENTRY *pBAEntry = NULL; +@@ -690,7 +690,7 @@ done: + return pBAEntry; + } + +-BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, OUT USHORT * Idx) ++BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, u16 * Idx) + { + int i; + BA_ORI_ENTRY *pBAEntry = NULL; +@@ -718,7 +718,7 @@ done: + return pBAEntry; + } + +-VOID BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) ++void BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) + { + BA_ORI_ENTRY *pBAEntry = NULL; + MAC_TABLE_ENTRY *pEntry; +@@ -752,7 +752,7 @@ VOID BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) + } + } + +-VOID BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) ++void BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) + { + BA_REC_ENTRY *pBAEntry = NULL; + MAC_TABLE_ENTRY *pEntry; +@@ -777,12 +777,12 @@ VOID BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, IN ULONG Idx) + } + } + +-VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, ++void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ u8 Wcid, ++ u8 TID, + IN BOOLEAN bPassive, IN BOOLEAN bForceSend) + { +- ULONG Idx = 0; ++ unsigned long Idx = 0; + BA_ORI_ENTRY *pBAEntry; + BOOLEAN Cancelled; + +@@ -867,10 +867,10 @@ VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + } + } + +-VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive) ++void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ u8 Wcid, u8 TID, IN BOOLEAN bPassive) + { +- ULONG Idx = 0; ++ unsigned long Idx = 0; + BA_REC_ENTRY *pBAEntry; + + if (Wcid >= MAX_LEN_OF_MAC_TABLE) { +@@ -897,8 +897,8 @@ VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + && (pBAEntry->REC_BA_Status == Recipient_Accept)) { + MLME_DELBA_REQ_STRUCT DelbaReq; + BOOLEAN Cancelled; +- /*ULONG offset; */ +- /*UINT32 VALUE; */ ++ /*unsigned long offset; */ ++ /*u32 VALUE; */ + + RTMPCancelTimer(&pBAEntry->RECBATimer, &Cancelled); + +@@ -956,7 +956,7 @@ VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + BATableFreeRecEntry(pAd, Idx); + } + +-VOID BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid) ++void BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, u8 Wcid) + { + int i; + +@@ -980,10 +980,10 @@ VOID BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid) + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++void BAOriSessionSetupTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3) + { + BA_ORI_ENTRY *pBAEntry = (BA_ORI_ENTRY *) FunctionContext; + MAC_TABLE_ENTRY *pEntry; +@@ -1008,14 +1008,14 @@ VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, + + NdisZeroMemory(&AddbaReq, sizeof(AddbaReq)); + COPY_MAC_ADDR(AddbaReq.pAddr, pEntry->Addr); +- AddbaReq.Wcid = (UCHAR) (pEntry->Aid); ++ AddbaReq.Wcid = (u8)(pEntry->Aid); + AddbaReq.TID = pBAEntry->TID; + AddbaReq.BaBufSize = + pAd->CommonCfg.BACapability.field.RxBAWinLimit; + AddbaReq.TimeOutValue = 0; + AddbaReq.Token = pBAEntry->Token; + MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, +- sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID) & AddbaReq); ++ sizeof(MLME_ADDBA_REQ_STRUCT), (void *)& AddbaReq); + RTMP_MLME_HANDLER(pAd); + DBGPRINT(RT_DEBUG_TRACE, + ("BA Ori Session Timeout(%d) : Send ADD BA again\n", +@@ -1042,14 +1042,14 @@ VOID BAOriSessionSetupTimeout(IN PVOID SystemSpecific1, + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void BARecSessionIdleTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + + BA_REC_ENTRY *pBAEntry = (BA_REC_ENTRY *) FunctionContext; + PRTMP_ADAPTER pAd; +- ULONG Now32; ++ unsigned long Now32; + + if (pBAEntry == NULL) + return; +@@ -1070,19 +1070,19 @@ VOID BARecSessionIdleTimeout(IN PVOID SystemSpecific1, + } + } + +-VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + /* 7.4.4.1 */ +- /*ULONG Idx; */ +- UCHAR Status = 1; +- UCHAR pAddr[6]; ++ /*unsigned long Idx; */ ++ u8 Status = 1; ++ u8 pAddr[6]; + FRAME_ADDBA_RSP ADDframe; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; ++ u8 *pOutBuffer = NULL; ++ int NStatus; + PFRAME_ADDBA_REQ pAddreqFrame = NULL; +- /*UCHAR BufSize; */ +- ULONG FrameLen; +- PULONG ptemp; ++ /*u8 BufSize; */ ++ unsigned long FrameLen; ++ unsigned long *ptemp; + PMAC_TABLE_ENTRY pMacEntry; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1096,7 +1096,7 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + pMacEntry = &pAd->MacTab.Content[Elem->Wcid]; + DBGPRINT(RT_DEBUG_TRACE, ("BA - PeerAddBAReqAction----> \n")); +- ptemp = (PULONG) Elem->Msg; ++ ptemp = (unsigned long *)Elem->Msg; + /*DBGPRINT_RAW(RT_DEBUG_EMU, ("%08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x:: %08x\n", *(ptemp), *(ptemp+1), *(ptemp+2), *(ptemp+3), *(ptemp+4), *(ptemp+5), *(ptemp+6), *(ptemp+7), *(ptemp+8))); */ + + if (PeerAddBAReqActionSanity(pAd, Elem->Msg, Elem->MsgLen, pAddr)) { +@@ -1151,15 +1151,15 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADDframe.BaParm.AMSDUSupported = 0; + ADDframe.BaParm.TID = pAddreqFrame->BaParm.TID; + ADDframe.BaParm.BufSize = +- min(((UCHAR) pAddreqFrame->BaParm.BufSize), +- (UCHAR) pAd->CommonCfg.BACapability.field.RxBAWinLimit); ++ min(((u8)pAddreqFrame->BaParm.BufSize), ++ (u8)pAd->CommonCfg.BACapability.field.RxBAWinLimit); + if (ADDframe.BaParm.BufSize == 0) { + ADDframe.BaParm.BufSize = 64; + } + ADDframe.TimeOutValue = 0; /*pAddreqFrame->TimeOutValue; */ + +- *(USHORT *) (&ADDframe.BaParm) = +- cpu2le16(*(USHORT *) (&ADDframe.BaParm)); ++ *(u16 *) (&ADDframe.BaParm) = ++ cpu2le16(*(u16 *) (&ADDframe.BaParm)); + ADDframe.StatusCode = cpu2le16(ADDframe.StatusCode); + ADDframe.TimeOutValue = cpu2le16(ADDframe.TimeOutValue); + +@@ -1173,10 +1173,10 @@ VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADDframe.BaParm.TID, ADDframe.BaParm.BufSize)); + } + +-VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- /*UCHAR Idx, i; */ +- /*PUCHAR pOutBuffer = NULL; */ ++ /*u8 Idx, i; */ ++ /*u8 * pOutBuffer = NULL; */ + PFRAME_ADDBA_RSP pFrame = NULL; + /*PBA_ORI_ENTRY pBAEntry; */ + +@@ -1216,10 +1216,10 @@ VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- /*UCHAR Idx; */ +- /*PUCHAR pOutBuffer = NULL; */ ++ /*u8 Idx; */ ++ /*u8 * pOutBuffer = NULL; */ + PFRAME_DELBA_REQ pDelFrame = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("%s ==>\n", __func__)); +@@ -1244,23 +1244,23 @@ VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg) ++ unsigned long Wcid, ++ unsigned long MsgLen, IN PFRAME_BA_REQ pMsg) + { + PFRAME_BA_REQ pFrame = pMsg; + /*PRTMP_REORDERBUF pBuffer; */ + /*PRTMP_REORDERBUF pDmaBuf; */ + PBA_REC_ENTRY pBAEntry; + /*BOOLEAN Result; */ +- ULONG Idx; +- /*UCHAR NumRxPkt; */ +- UCHAR TID; /*, i; */ ++ unsigned long Idx; ++ /*u8 NumRxPkt; */ ++ u8 TID; /*, i; */ + +- TID = (UCHAR) pFrame->BARControl.TID; ++ TID = (u8)pFrame->BARControl.TID; + + DBGPRINT(RT_DEBUG_TRACE, + ("%s(): BAR-Wcid(%ld), Tid (%d)\n", __func__, Wcid, TID)); +- /*hex_dump("BAR", (PCHAR) pFrame, MsgLen); */ ++ /*hex_dump("BAR", (char *)pFrame, MsgLen); */ + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ + if (RTMP_TEST_FLAG +@@ -1309,13 +1309,13 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + /* + Description : Send PSMP Action frame If PSMP mode switches. + */ +-VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) ++void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- /*ULONG Idx; */ ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ /*unsigned long Idx; */ + FRAME_PSMP_ACTION Frame; +- ULONG FrameLen; ++ unsigned long FrameLen; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { +@@ -1364,32 +1364,32 @@ VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp) + #define RADIO_MEASUREMENT_REQUEST_ACTION 0 + + typedef struct PACKED { +- UCHAR RegulatoryClass; +- UCHAR ChannelNumber; +- USHORT RandomInterval; +- USHORT MeasurementDuration; +- UCHAR MeasurementMode; +- UCHAR BSSID[MAC_ADDR_LEN]; +- UCHAR ReportingCondition; +- UCHAR Threshold; +- UCHAR SSIDIE[2]; /* 2 byte */ ++ u8 RegulatoryClass; ++ u8 ChannelNumber; ++ u16 RandomInterval; ++ u16 MeasurementDuration; ++ u8 MeasurementMode; ++ u8 BSSID[MAC_ADDR_LEN]; ++ u8 ReportingCondition; ++ u8 Threshold; ++ u8 SSIDIE[2]; /* 2 byte */ + } BEACON_REQUEST; + + typedef struct PACKED { +- UCHAR ID; +- UCHAR Length; +- UCHAR Token; +- UCHAR RequestMode; +- UCHAR Type; ++ u8 ID; ++ u8 Length; ++ u8 Token; ++ u8 RequestMode; ++ u8 Type; + } MEASUREMENT_REQ; + + void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, +- IN UCHAR ++ u8 + FromWhichBSSID) + { + PNDIS_PACKET pRxPkt; +- UCHAR Header802_3[LENGTH_802_3]; ++ u8 Header802_3[LENGTH_802_3]; + + /* 1. get 802.3 Header */ + /* 2. remove LLC */ +@@ -1436,13 +1436,13 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + } \ + } while (0); + +-static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, ++static void ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, + IN RX_BLK * pRxBlk, +- IN UCHAR FromWhichBSSID) ++ u8 FromWhichBSSID) + { + struct reordering_mpdu *mpdu_blk; +- UINT16 Sequence = (UINT16) pRxBlk->pHeader->Sequence; ++ u16 Sequence = (u16)pRxBlk->pHeader->Sequence; + + mpdu_blk = ba_mpdu_blk_alloc(pAd); + if ((mpdu_blk != NULL) && (!RX_BLK_TEST_FLAG(pRxBlk, fRX_EAP))) { +@@ -1515,15 +1515,15 @@ static VOID ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + +-VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++void Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { +- USHORT Idx; ++ u16 Idx; + PBA_REC_ENTRY pBAEntry = NULL; +- UINT16 Sequence = pRxBlk->pHeader->Sequence; +- ULONG Now32; +- UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; +- UCHAR TID = pRxBlk->pRxWI->TID; ++ u16 Sequence = pRxBlk->pHeader->Sequence; ++ unsigned long Now32; ++ u8 Wcid = pRxBlk->pRxWI->WirelessCliID; ++ u8 TID = pRxBlk->pRxWI->TID; + + if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) + && (pRxBlk->DataSize > MAX_RX_PKT_LEN)) { +@@ -1578,7 +1578,7 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + /* I. Check if in order. */ + /* */ + if (SEQ_STEPONE(Sequence, pBAEntry->LastIndSeq, MAXSEQ)) { +- USHORT LastIndSeq; ++ u16 LastIndSeq; + + pBAEntry->LastIndSeq = Sequence; + INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID); +@@ -1624,7 +1624,7 @@ VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, + /* V. Receive seq surpasses Win(lastseq + nMSDU). So refresh all reorder buffer */ + /* */ + else { +- LONG WinStartSeq, TmpSeq; ++ long WinStartSeq, TmpSeq; + + TmpSeq = Sequence - (pBAEntry->BAWinSize) - 1; + if (TmpSeq < 0) { +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +index 030678c..99b0b1b 100644 +--- a/drivers/staging/rt2860/common/cmm_aes.c ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -38,8 +38,8 @@ + #include "../rt_config.h" + + typedef struct { +- UINT32 erk[64]; /* encryption round keys */ +- UINT32 drk[64]; /* decryption round keys */ ++ u32 erk[64]; /* encryption round keys */ ++ u32 drk[64]; /* decryption round keys */ + int nr; /* number of rounds */ + } aes_context; + +@@ -47,7 +47,7 @@ typedef struct { + /******** SBOX Table *********/ + /*****************************/ + +-UCHAR SboxTable[256] = { ++u8 SboxTable[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, +@@ -82,34 +82,34 @@ UCHAR SboxTable[256] = { + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 + }; + +-VOID xor_32(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out) ++void xor_32(u8 *a, u8 *b, u8 *out) + { +- INT i; ++ int i; + + for (i = 0; i < 4; i++) { + out[i] = a[i] ^ b[i]; + } + } + +-VOID xor_128(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out) ++void xor_128(u8 *a, u8 *b, u8 *out) + { +- INT i; ++ int i; + + for (i = 0; i < 16; i++) { + out[i] = a[i] ^ b[i]; + } + } + +-UCHAR RTMPCkipSbox(IN UCHAR a) ++u8 RTMPCkipSbox(u8 a) + { + return SboxTable[(int)a]; + } + +-VOID next_key(IN PUCHAR key, IN INT round) ++void next_key(u8 *key, int round) + { +- UCHAR rcon; +- UCHAR sbox_key[4]; +- UCHAR rcon_table[12] = { ++ u8 rcon; ++ u8 sbox_key[4]; ++ u8 rcon_table[12] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, + 0x1b, 0x36, 0x36, 0x36 + }; +@@ -129,9 +129,9 @@ VOID next_key(IN PUCHAR key, IN INT round) + xor_32(&key[12], &key[8], &key[12]); + } + +-VOID byte_sub(IN PUCHAR in, OUT PUCHAR out) ++void byte_sub(u8 *in, u8 *out) + { +- INT i; ++ int i; + + for (i = 0; i < 16; i++) { + out[i] = RTMPCkipSbox(in[i]); +@@ -151,7 +151,7 @@ void bitwise_xor(unsigned char *ina, unsigned char *inb, unsigned char *out) + } + } + +-VOID shift_row(IN PUCHAR in, OUT PUCHAR out) ++void shift_row(u8 *in, u8 *out) + { + out[0] = in[0]; + out[1] = in[5]; +@@ -171,17 +171,17 @@ VOID shift_row(IN PUCHAR in, OUT PUCHAR out) + out[15] = in[11]; + } + +-VOID mix_column(IN PUCHAR in, OUT PUCHAR out) ++void mix_column(u8 *in, u8 *out) + { +- INT i; +- UCHAR add1b[4]; +- UCHAR add1bf7[4]; +- UCHAR rotl[4]; +- UCHAR swap_halfs[4]; +- UCHAR andf7[4]; +- UCHAR rotr[4]; +- UCHAR temp[4]; +- UCHAR tempb[4]; ++ int i; ++ u8 add1b[4]; ++ u8 add1bf7[4]; ++ u8 rotl[4]; ++ u8 swap_halfs[4]; ++ u8 andf7[4]; ++ u8 rotr[4]; ++ u8 temp[4]; ++ u8 tempb[4]; + + for (i = 0; i < 4; i++) { + if ((in[i] & 0x80) == 0x80) +@@ -409,40 +409,40 @@ void construct_ctr_preload(unsigned char *ctr_preload, + } + + BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, IN PCIPHER_KEY pWpaKey) ++ u8 *pData, ++ unsigned long DataByteCnt, IN PCIPHER_KEY pWpaKey) + { +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR PN[6]; +- UINT payload_len; +- UINT num_blocks; +- UINT payload_remainder; +- USHORT fc; +- UCHAR fc0; +- UCHAR fc1; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- UCHAR aes_out[16]; ++ u8 KeyID; ++ u32 HeaderLen; ++ u8 PN[6]; ++ u32 payload_len; ++ u32 num_blocks; ++ u32 payload_remainder; ++ u16 fc; ++ u8 fc0; ++ u8 fc1; ++ u32 frame_type; ++ u32 frame_subtype; ++ u32 from_ds; ++ u32 to_ds; ++ int a4_exists; ++ int qc_exists; ++ u8 aes_out[16]; + int payload_index; +- UINT i; +- UCHAR ctr_preload[16]; +- UCHAR chain_buffer[16]; +- UCHAR padded_buffer[16]; +- UCHAR mic_iv[16]; +- UCHAR mic_header1[16]; +- UCHAR mic_header2[16]; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; ++ u32 i; ++ u8 ctr_preload[16]; ++ u8 chain_buffer[16]; ++ u8 padded_buffer[16]; ++ u8 mic_iv[16]; ++ u8 mic_header1[16]; ++ u8 mic_header2[16]; ++ u8 MIC[8]; ++ u8 TrailMIC[8]; + + fc0 = *pData; + fc1 = *(pData + 1); + +- fc = *((PUSHORT) pData); ++ fc = *((u16 *)pData); + + frame_type = ((fc0 >> 2) & 0x03); + frame_subtype = ((fc0 >> 4) & 0x0f); +@@ -460,7 +460,7 @@ BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, + if (a4_exists) + HeaderLen += 6; + +- KeyID = *((PUCHAR) (pData + HeaderLen + 3)); ++ KeyID = *((u8 *)(pData + HeaderLen + 3)); + KeyID = KeyID >> 6; + + if (pWpaKey[KeyID].KeyLen == 0) { +@@ -1202,16 +1202,16 @@ void rt_aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) + Return: + ========================================================================== + */ +-VOID AES_GTK_KEY_WRAP(IN UCHAR * key, +- IN UCHAR * plaintext, +- IN UINT32 p_len, OUT UCHAR * ciphertext) ++void AES_GTK_KEY_WRAP(u8 * key, ++ u8 * plaintext, ++ u32 p_len, u8 * ciphertext) + { +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR R[512]; +- INT num_blocks = p_len / 8; /* unit:64bits */ +- INT i, j; ++ u8 A[8], BIN[16], BOUT[16]; ++ u8 R[512]; ++ int num_blocks = p_len / 8; /* unit:64bits */ ++ int i, j; + aes_context aesctx; +- UCHAR xor; ++ u8 xor; + + rt_aes_set_key(&aesctx, key, 128); + +@@ -1264,18 +1264,18 @@ VOID AES_GTK_KEY_WRAP(IN UCHAR * key, + + ======================================================================== + */ +-VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, +- OUT UCHAR * plaintext, +- IN UINT32 c_len, IN UCHAR * ciphertext) ++void AES_GTK_KEY_UNWRAP(u8 * key, ++ u8 * plaintext, ++ u32 c_len, u8 * ciphertext) + { +- UCHAR A[8], BIN[16], BOUT[16]; +- UCHAR xor; +- INT i, j; ++ u8 A[8], BIN[16], BOUT[16]; ++ u8 xor; ++ int i, j; + aes_context aesctx; +- UCHAR *R; +- INT num_blocks = c_len / 8; /* unit:64bits */ ++ u8 *R; ++ int num_blocks = c_len / 8; /* unit:64bits */ + +- os_alloc_mem(NULL, (PUCHAR *) & R, 512); ++ os_alloc_mem(NULL, (u8 **) & R, 512); + + if (R == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index 468aba5..ef7d2a6 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -177,7 +177,7 @@ RTMP_RF_REGS RF2850RegTable[] = { + /* still lack of MMAC(Japan) ch 34,38,42,46 */ + }; + +-UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); ++u8 NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); + + FREQUENCY_ITEM FreqItems3020[] = { + /**************************************************/ +@@ -216,11 +216,11 @@ FREQUENCY_ITEM FreqItems3020[] = { + , + }; + +-UCHAR NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); ++u8 NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); + +-VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) ++void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pRateTable) + { +- UCHAR i; ++ u8 i; + HT_FBK_CFG0_STRUC HtCfg0; + HT_FBK_CFG1_STRUC HtCfg1; + LG_FBK_CFG0_STRUC LgCfg0; +@@ -234,7 +234,7 @@ VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + LgCfg1.word = 0x00002100; + + pNextTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1; +- for (i = 1; i < *((PUCHAR) pRateTable); i++) { ++ for (i = 1; i < *((u8 *)pRateTable); i++) { + pCurrTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1 + i; + switch (pCurrTxRate->Mode) { + case 0: /*CCK */ +@@ -417,16 +417,16 @@ VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pRateTable) + we should choose not to use GF. But still set correct ASIC registers. + ======================================================================== + */ +-VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, +- IN USHORT OperationMode, +- IN UCHAR SetMask, ++void AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++ u16 OperationMode, ++ u8 SetMask, + IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist) + { + PROT_CFG_STRUC ProtCfg, ProtCfg4; +- UINT32 Protect[6]; +- USHORT offset; +- UCHAR i; +- UINT32 MacReg = 0; ++ u32 Protect[6]; ++ u16 offset; ++ u8 i; ++ u32 MacReg = 0; + + if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8)) { + return; +@@ -631,14 +631,14 @@ VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) ++void AsicSwitchChannel(IN PRTMP_ADAPTER pAd, u8 Channel, IN BOOLEAN bScan) + { +- ULONG R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; +- CHAR TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; /*Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; */ +- UCHAR index; +- UINT32 Value = 0; /*BbpReg, Value; */ ++ unsigned long R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; ++ char TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; /*Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; */ ++ u8 index; ++ u32 Value = 0; /*BbpReg, Value; */ + RTMP_RF_REGS *RFRegTable; +- UCHAR RFValue; ++ u8 RFValue; + + RFValue = 0; + /* Search Tx power value */ +@@ -891,7 +891,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + + /* Change BBP setting during siwtch from a->g, g->a */ + if (Channel <= 14) { +- ULONG TxPinCfg = 0x00050F0A; /*Gary 2007/08/09 0x050A0A */ ++ unsigned long TxPinCfg = 0x00050F0A; /*Gary 2007/08/09 0x050A0A */ + + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, + (0x37 - GET_LNA_GAIN(pAd))); +@@ -951,7 +951,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + } + #endif + } else { +- ULONG TxPinCfg = 0x00050F05; /*Gary 2007/8/9 0x050505 */ ++ unsigned long TxPinCfg = 0x00050F05; /*Gary 2007/8/9 0x050505 */ + + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, + (0x37 - GET_LNA_GAIN(pAd))); +@@ -1002,7 +1002,7 @@ VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan) + RTMPusecDelay(1000); + } + +-VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) ++void AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) + { + BBP_CSR_CFG_STRUC BbpCsr; + DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); +@@ -1025,13 +1025,13 @@ VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicLockChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) ++void AsicLockChannel(IN PRTMP_ADAPTER pAd, u8 Channel) + { + } + +-VOID AsicRfTuningExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void AsicRfTuningExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + } + +@@ -1052,17 +1052,17 @@ VOID AsicRfTuningExec(IN PVOID SystemSpecific1, + it should be called AFTER MlmeDynamicTxRatSwitching() + ========================================================================== + */ +-VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) ++void AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + { +- INT i, j; +- CHAR DeltaPwr = 0; ++ int i, j; ++ char DeltaPwr = 0; + BOOLEAN bAutoTxAgc = FALSE; +- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; +- UCHAR BbpR1 = 0, BbpR49 = 0, idx; +- PCHAR pTxAgcCompensate; +- ULONG TxPwr[5]; +- CHAR Value; +- CHAR Rssi = -127; ++ u8 TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep; ++ u8 BbpR1 = 0, BbpR49 = 0, idx; ++ char *pTxAgcCompensate; ++ unsigned long TxPwr[5]; ++ char Value; ++ char Rssi = -127; + + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) || + #ifdef RTMP_MAC_PCI +@@ -1152,10 +1152,10 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + break; + } + /* The index is the step we should decrease, idx = 0 means there is nothing to compensate */ +-/* if (R3 > (ULONG) (TxAgcStep * (idx-1))) */ ++/* if (R3 > (unsigned long)(TxAgcStep * (idx-1))) */ + *pTxAgcCompensate = -(TxAgcStep * (idx - 1)); + /* else */ +-/* *pTxAgcCompensate = -((UCHAR)R3); */ ++/* *pTxAgcCompensate = -((u8)R3); */ + + DeltaPwr += (*pTxAgcCompensate); + DBGPRINT(RT_DEBUG_TRACE, +@@ -1236,7 +1236,7 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + for (i = 0; i < 5; i++) { + if (TxPwr[i] != 0xffffffff) { + for (j = 0; j < 8; j++) { +- Value = (CHAR) ((TxPwr[i] >> j * 4) & 0x0F); /* 0 ~ 15 */ ++ Value = (char)((TxPwr[i] >> j * 4) & 0x0F); /* 0 ~ 15 */ + + if ((Value + DeltaPwr) < 0) { + Value = 0; /* min */ +@@ -1277,8 +1277,8 @@ VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++void AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp) + { + RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); + } +@@ -1291,7 +1291,7 @@ VOID AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. + ========================================================================== + */ +-VOID AsicForceSleep(IN PRTMP_ADAPTER pAd) ++void AsicForceSleep(IN PRTMP_ADAPTER pAd) + { + + } +@@ -1306,7 +1306,7 @@ VOID AsicForceSleep(IN PRTMP_ADAPTER pAd) + IRQL = DISPATCH_LEVEL + ========================================================================== + */ +-VOID AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { + DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); + RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); +@@ -1321,29 +1321,29 @@ VOID AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + + ========================================================================== + */ +-VOID AsicSetBssid(IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid) ++void AsicSetBssid(IN PRTMP_ADAPTER pAd, u8 *pBssid) + { +- ULONG Addr4; ++ unsigned long Addr4; + DBGPRINT(RT_DEBUG_TRACE, + ("==============> AsicSetBssid %x:%x:%x:%x:%x:%x\n", pBssid[0], + pBssid[1], pBssid[2], pBssid[3], pBssid[4], pBssid[5])); + +- Addr4 = (ULONG) (pBssid[0]) | +- (ULONG) (pBssid[1] << 8) | +- (ULONG) (pBssid[2] << 16) | (ULONG) (pBssid[3] << 24); ++ Addr4 = (unsigned long)(pBssid[0]) | ++ (unsigned long)(pBssid[1] << 8) | ++ (unsigned long)(pBssid[2] << 16) | (unsigned long)(pBssid[3] << 24); + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW0, Addr4); + + Addr4 = 0; + /* always one BSSID in STA mode */ +- Addr4 = (ULONG) (pBssid[4]) | (ULONG) (pBssid[5] << 8); ++ Addr4 = (unsigned long)(pBssid[4]) | (unsigned long)(pBssid[5] << 8); + + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); + } + +-VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd) ++void AsicSetMcastWC(IN PRTMP_ADAPTER pAd) + { + MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; +- USHORT offset; ++ u16 offset; + + pEntry->Sst = SST_ASSOC; + pEntry->Aid = MCAST_WCID; /* Softap supports 1 BSSID and use WCID=0 as multicast Wcid index */ +@@ -1360,10 +1360,10 @@ VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicDelWcidTab(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid) ++void AsicDelWcidTab(IN PRTMP_ADAPTER pAd, u8 Wcid) + { +- ULONG Addr0 = 0x0, Addr1 = 0x0; +- ULONG offset; ++ unsigned long Addr0 = 0x0, Addr1 = 0x0; ++ unsigned long offset; + + DBGPRINT(RT_DEBUG_TRACE, ("AsicDelWcidTab==>Wcid = 0x%x\n", Wcid)); + offset = MAC_WCID_BASE + Wcid * HW_WCID_ENTRY_SIZE; +@@ -1380,10 +1380,10 @@ VOID AsicDelWcidTab(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid) + + ========================================================================== + */ +-VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd) ++void AsicEnableRDG(IN PRTMP_ADAPTER pAd) + { + TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; ++ u32 Data = 0; + + RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); + TxLinkCfg.field.TxRDGEn = 1; +@@ -1405,10 +1405,10 @@ VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd) ++void AsicDisableRDG(IN PRTMP_ADAPTER pAd) + { + TX_LINK_CFG_STRUC TxLinkCfg; +- UINT32 Data = 0; ++ u32 Data = 0; + + RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word); + TxLinkCfg.field.TxRDGEn = 0; +@@ -1441,7 +1441,7 @@ VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicDisableSync(IN PRTMP_ADAPTER pAd) ++void AsicDisableSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr; + +@@ -1468,7 +1468,7 @@ VOID AsicDisableSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd) ++void AsicEnableBssSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr; + +@@ -1498,11 +1498,11 @@ VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) ++void AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + { + BCN_TIME_CFG_STRUC csr9; +- PUCHAR ptr; +- UINT i; ++ u8 *ptr; ++ u32 i; + + DBGPRINT(RT_DEBUG_TRACE, + ("--->AsicEnableIbssSync(ADHOC mode. MPDUtotalByteCount = %d)\n", +@@ -1516,10 +1516,10 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + + #ifdef RTMP_MAC_PCI + /* move BEACON TXD and frame content to on-chip memory */ +- ptr = (PUCHAR) & pAd->BeaconTxWI; ++ ptr = (u8 *)& pAd->BeaconTxWI; + for (i = 0; i < TXWI_SIZE; i += 4) /* 16-byte TXWI field */ + { +- UINT32 longptr = ++ u32 longptr = + *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + + (*(ptr + 3) << 24); + RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); +@@ -1529,7 +1529,7 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + /* start right after the 16-byte TXWI field */ + ptr = pAd->BeaconBuf; + for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 4) { +- UINT32 longptr = ++ u32 longptr = + *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + + (*(ptr + 3) << 24); + RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); +@@ -1538,10 +1538,10 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + /* move BEACON TXD and frame content to on-chip memory */ +- ptr = (PUCHAR) & pAd->BeaconTxWI; ++ ptr = (u8 *)& pAd->BeaconTxWI; + for (i = 0; i < TXWI_SIZE; i += 2) /* 16-byte TXWI field */ + { +- /*UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ ++ /*u32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ + /*RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + i, longptr); */ + RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + i, ptr, 2); + ptr += 2; +@@ -1550,7 +1550,7 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + /* start right after the 16-byte TXWI field */ + ptr = pAd->BeaconBuf; + for (i = 0; i < pAd->BeaconTxWI.MPDUtotalByteCount; i += 2) { +- /*UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ ++ /*u32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24); */ + /*RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr); */ + RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2); + ptr += 2; +@@ -1581,7 +1581,7 @@ VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) ++void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + { + EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; + AC_TXOP_CSR0_STRUC csr0; +@@ -1862,10 +1862,10 @@ VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + + ========================================================================== + */ +-VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) ++void AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) + { +- ULONG SlotTime; +- UINT32 RegValue = 0; ++ unsigned long SlotTime; ++ u32 RegValue = 0; + + if (pAd->CommonCfg.Channel > 14) + bUseShortSlotTime = TRUE; +@@ -1930,16 +1930,16 @@ VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) + Return: + ======================================================================== + */ +-VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, IN PUCHAR pTxMic, IN PUCHAR pRxMic) ++void AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIndex, ++ u8 KeyIdx, ++ u8 CipherAlg, ++ u8 *pKey, u8 *pTxMic, u8 *pRxMic) + { +- ULONG offset; /*, csr0; */ ++ unsigned long offset; /*, csr0; */ + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI +- INT i; ++ int i; + #endif /* RTMP_MAC_PCI // */ + + DBGPRINT(RT_DEBUG_TRACE, +@@ -2048,10 +2048,10 @@ VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, IN UCHAR KeyIdx) ++void AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIndex, u8 KeyIdx) + { +- /*ULONG SecCsr0; */ ++ /*unsigned long SecCsr0; */ + SHAREDKEY_MODE_STRUC csr1; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -2088,13 +2088,13 @@ VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, + + } + +-VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR CipherAlg, ++void AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, ++ u16 WCID, ++ u8 BssIndex, ++ u8 CipherAlg, + IN BOOLEAN bUsePairewiseKeyTable) + { +- ULONG WCIDAttri = 0, offset; ++ unsigned long WCIDAttri = 0, offset; + + /* */ + /* Update WCID attribute. */ +@@ -2106,10 +2106,10 @@ VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); + } + +-VOID AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, IN ULONG uIV, IN ULONG uEIV) ++void AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, ++ u16 WCID, unsigned long uIV, unsigned long uEIV) + { +- ULONG offset; ++ unsigned long offset; + + offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE); + +@@ -2117,11 +2117,11 @@ VOID AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, offset + 4, uEIV); + } + +-VOID AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, IN PUCHAR pAddr) ++void AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, ++ u16 WCID, u8 *pAddr) + { +- ULONG offset; +- ULONG Addr; ++ unsigned long offset; ++ unsigned long Addr; + + offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE); + Addr = pAddr[0] + (pAddr[1] << 8) + (pAddr[2] << 16) + (pAddr[3] << 24); +@@ -2163,25 +2163,25 @@ VOID AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, + For AP mode bTxKey must be always set to TRUE. + ======================================================================== + */ +-VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, ++void AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, ++ u16 WCID, ++ u8 BssIndex, ++ u8 KeyIdx, + IN PCIPHER_KEY pCipherKey, + IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey) + { +- ULONG offset; +-/* ULONG WCIDAttri = 0; */ +- UCHAR IV4 = 0; +- PUCHAR pKey = pCipherKey->Key; +-/* ULONG KeyLen = pCipherKey->KeyLen; */ +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; +- PUCHAR pTxtsc = pCipherKey->TxTsc; +- UCHAR CipherAlg = pCipherKey->CipherAlg; ++ unsigned long offset; ++/* unsigned long WCIDAttri = 0; */ ++ u8 IV4 = 0; ++ u8 *pKey = pCipherKey->Key; ++/* unsigned long KeyLen = pCipherKey->KeyLen; */ ++ u8 *pTxMic = pCipherKey->TxMic; ++ u8 *pRxMic = pCipherKey->RxMic; ++ u8 *pTxtsc = pCipherKey->TxTsc; ++ u8 CipherAlg = pCipherKey->CipherAlg; + SHAREDKEY_MODE_STRUC csr1; + #ifdef RTMP_MAC_PCI +- UCHAR i; ++ u8 i; + #endif /* RTMP_MAC_PCI // */ + + /* ASSERT(KeyLen <= MAX_LEN_OF_PEER_KEY); */ +@@ -2271,7 +2271,7 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + } + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- UINT32 tmpVal; ++ u32 tmpVal; + + /* */ + /* Write IV */ +@@ -2291,7 +2291,7 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + /* Write EIV */ + /* */ + offset += 4; +- RTMP_IO_WRITE32(pAd, offset, *(PUINT32) & pCipherKey->TxTsc[2]); ++ RTMP_IO_WRITE32(pAd, offset, *(u32 *)& pCipherKey->TxTsc[2]); + #endif /* RTMP_MAC_USB // */ + + AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, +@@ -2339,17 +2339,17 @@ VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + Return: + ======================================================================== + */ +-VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, IN CIPHER_KEY * pCipherKey) ++void AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 *pAddr, ++ u8 WCID, IN CIPHER_KEY * pCipherKey) + { +- INT i; +- ULONG offset; +- PUCHAR pKey = pCipherKey->Key; +- PUCHAR pTxMic = pCipherKey->TxMic; +- PUCHAR pRxMic = pCipherKey->RxMic; ++ int i; ++ unsigned long offset; ++ u8 *pKey = pCipherKey->Key; ++ u8 *pTxMic = pCipherKey->TxMic; ++ u8 *pRxMic = pCipherKey->RxMic; + #ifdef DBG +- UCHAR CipherAlg = pCipherKey->CipherAlg; ++ u8 CipherAlg = pCipherKey->CipherAlg; + #endif /* DBG // */ + + /* EKEY */ +@@ -2363,7 +2363,7 @@ VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + RTUSBMultiWrite(pAd, offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY); + #endif /* RTMP_MAC_USB // */ + for (i = 0; i < MAX_LEN_OF_PEER_KEY; i += 4) { +- UINT32 Value; ++ u32 Value; + RTMP_IO_READ32(pAd, offset + i, &Value); + } + +@@ -2422,11 +2422,11 @@ VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + Return: + ======================================================================== + */ +-VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, IN UCHAR Wcid) ++void AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIdx, u8 Wcid) + { +- ULONG WCIDAttri; +- USHORT offset; ++ unsigned long WCIDAttri; ++ u16 offset; + + /* re-set the entry's WCID attribute as OPEN-NONE. */ + offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE); +@@ -2435,8 +2435,8 @@ VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + } + + BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1) ++ u8 Command, ++ u8 Token, u8 Arg0, u8 Arg1) + { + + if (pAd->chipOps.sendCommandToMcu) +@@ -2445,7 +2445,7 @@ BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) ++void AsicSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) + { + #ifdef RT30xx + /* RT3572 ATE need not to do this. */ +@@ -2453,14 +2453,14 @@ VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant) + #endif /* RT30xx // */ + } + +-VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) ++void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) + { + if (pAd->chipOps.AsicRfTurnOff) { + pAd->chipOps.AsicRfTurnOff(pAd); + } else { + /* RF R2 bit 18 = 0 */ +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; ++ u32 R1 = 0, R2 = 0, R3 = 0; ++ u8 index; + RTMP_RF_REGS *RFRegTable; + + RFRegTable = RF2850RegTable; +@@ -2507,11 +2507,11 @@ VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) + } + } + +-VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel) ++void AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) + { + /* RF R2 bit 18 = 0 */ +- UINT32 R1 = 0, R2 = 0, R3 = 0; +- UCHAR index; ++ u32 R1 = 0, R2 = 0, R3 = 0; ++ u8 index; + RTMP_RF_REGS *RFRegTable; + + #ifdef PCIE_PS_SUPPORT +diff --git a/drivers/staging/rt2860/common/cmm_cfg.c b/drivers/staging/rt2860/common/cmm_cfg.c +index 7dbcb23..9c6b7ca 100644 +--- a/drivers/staging/rt2860/common/cmm_cfg.c ++++ b/drivers/staging/rt2860/common/cmm_cfg.c +@@ -80,10 +80,10 @@ char *GetBW(int BW) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band) ++int RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, char *arg, int band) + { +- LONG region, regionMax; +- UCHAR *pCountryRegion; ++ long region, regionMax; ++ u8 *pCountryRegion; + + region = simple_strtol(arg, 0, 10); + +@@ -104,9 +104,9 @@ INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band) + } + + if ((region >= 0) && (region <= REGION_MAXIMUM_BG_BAND)) { +- *pCountryRegion = (UCHAR) region; ++ *pCountryRegion = (u8)region; + } else if ((region == REGION_31_BG_BAND) && (band == BAND_24G)) { +- *pCountryRegion = (UCHAR) region; ++ *pCountryRegion = (u8)region; + } else { + DBGPRINT(RT_DEBUG_ERROR, + ("CfgSetCountryRegion():region(%ld) out of range!\n", +@@ -126,10 +126,10 @@ INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, char *arg) + { +- INT MaxPhyMode = PHY_11G; +- LONG WirelessMode; ++ int MaxPhyMode = PHY_11G; ++ long WirelessMode; + + MaxPhyMode = PHY_11N_5G; + +@@ -143,9 +143,9 @@ INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + + } + +-INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, char *arg) + { +- LONG ShortSlot; ++ long ShortSlot; + + ShortSlot = simple_strtol(arg, 0, 10); + +@@ -167,13 +167,13 @@ INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY * pSharedKey, IN INT keyIdx) ++int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++ char *keyString, ++ IN CIPHER_KEY * pSharedKey, int keyIdx) + { +- INT KeyLen; +- INT i; +- UCHAR CipherAlg = CIPHER_NONE; ++ int KeyLen; ++ int i; ++ u8 CipherAlg = CIPHER_NONE; + BOOLEAN bKeyIsHex = FALSE; + + /* TODO: Shall we do memset for the original key info?? */ +@@ -230,13 +230,13 @@ INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, +- IN PSTRING keyString, +- IN UCHAR * pHashStr, +- IN INT hashStrLen, OUT PUCHAR pPMKBuf) ++int RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++ char *keyString, ++ u8 * pHashStr, ++ int hashStrLen, u8 *pPMKBuf) + { + int keyLen; +- UCHAR keyMaterial[40]; ++ u8 keyMaterial[40]; + + keyLen = strlen(keyString); + if ((keyLen < 8) || (keyLen > 64)) { +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 81766db..cd000fb 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -27,39 +27,39 @@ + + #include "../rt_config.h" + +-UCHAR SNAP_802_1H[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; +-UCHAR SNAP_BRIDGE_TUNNEL[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; ++u8 SNAP_802_1H[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; ++u8 SNAP_BRIDGE_TUNNEL[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; + + /* Add Cisco Aironet SNAP heade for CCX2 support */ +-UCHAR SNAP_AIRONET[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00 }; +-UCHAR CKIP_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02 }; +-UCHAR EAPOL_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e }; +-UCHAR EAPOL[] = { 0x88, 0x8e }; +-UCHAR TPID[] = { 0x81, 0x00 }; /* VLAN related */ ++u8 SNAP_AIRONET[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00 }; ++u8 CKIP_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02 }; ++u8 EAPOL_LLC_SNAP[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e }; ++u8 EAPOL[] = { 0x88, 0x8e }; ++u8 TPID[] = { 0x81, 0x00 }; /* VLAN related */ + +-UCHAR IPX[] = { 0x81, 0x37 }; +-UCHAR APPLE_TALK[] = { 0x80, 0xf3 }; ++u8 IPX[] = { 0x81, 0x37 }; ++u8 APPLE_TALK[] = { 0x80, 0xf3 }; + +-UCHAR RateIdToPlcpSignal[12] = { ++u8 RateIdToPlcpSignal[12] = { + 0, /* RATE_1 */ 1, /* RATE_2 */ 2, /* RATE_5_5 */ 3, /* RATE_11 *//* see BBP spec */ + 11, /* RATE_6 */ 15, /* RATE_9 */ 10, /* RATE_12 */ 14, /* RATE_18 *//* see IEEE802.11a-1999 p.14 */ + 9, /* RATE_24 */ 13, /* RATE_36 */ 8, /* RATE_48 */ 12 /* RATE_54 */ + }; /* see IEEE802.11a-1999 p.14 */ + +-UCHAR OfdmSignalToRateId[16] = { ++u8 OfdmSignalToRateId[16] = { + RATE_54, RATE_54, RATE_54, RATE_54, /* OFDM PLCP Signal = 0, 1, 2, 3 respectively */ + RATE_54, RATE_54, RATE_54, RATE_54, /* OFDM PLCP Signal = 4, 5, 6, 7 respectively */ + RATE_48, RATE_24, RATE_12, RATE_6, /* OFDM PLCP Signal = 8, 9, 10, 11 respectively */ + RATE_54, RATE_36, RATE_18, RATE_9, /* OFDM PLCP Signal = 12, 13, 14, 15 respectively */ + }; + +-UCHAR OfdmRateToRxwiMCS[12] = { ++u8 OfdmRateToRxwiMCS[12] = { + 0, 0, 0, 0, + 0, 1, 2, 3, /* OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 */ + 4, 5, 6, 7, /* OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 */ + }; + +-UCHAR RxwiMCSToOfdmRate[12] = { ++u8 RxwiMCSToOfdmRate[12] = { + RATE_6, RATE_9, RATE_12, RATE_18, + RATE_24, RATE_36, RATE_48, RATE_54, /* OFDM rate 6,9,12,18 = rxwi mcs 0,1,2,3 */ + 4, 5, 6, 7, /* OFDM rate 24,36,48,54 = rxwi mcs 4,5,6,7 */ +@@ -71,12 +71,12 @@ char *MCSToMbps[] = + "MM-4", "MM-5", "MM-6", "MM-7", "MM-8", "MM-9", "MM-10", "MM-11", "MM-12", "MM-13", + "MM-14", "MM-15", "MM-32", "ee1", "ee2", "ee3" }; + +-UCHAR default_cwmin[] = ++u8 default_cwmin[] = + { CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS - 1, CW_MIN_IN_BITS - 2 }; +-/*UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; */ +-UCHAR default_sta_aifsn[] = { 3, 7, 2, 2 }; ++/*u8 default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1}; */ ++u8 default_sta_aifsn[] = { 3, 7, 2, 2 }; + +-UCHAR MapUserPriorityToAccessCategory[8] = ++u8 MapUserPriorityToAccessCategory[8] = + { QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, + QID_AC_VO, QID_AC_VO }; + +@@ -104,16 +104,16 @@ QID_AC_VO, QID_AC_VO }; + + ======================================================================== + */ +-NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PUCHAR pData, IN UINT Length) ++int MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u8 *pData, u32 Length) + { + PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG FreeNum; +- UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; /*RTMP_HW_HDR_LEN]; */ ++ int Status = NDIS_STATUS_SUCCESS; ++ unsigned long FreeNum; ++ u8 rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; /*RTMP_HW_HDR_LEN]; */ + #ifdef RTMP_MAC_PCI + unsigned long IrqFlags = 0; +- UCHAR IrqState; ++ u8 IrqState; + #endif /* RTMP_MAC_PCI // */ + BOOLEAN bUseDataQ = FALSE; + int retryCnt = 0; +@@ -164,7 +164,7 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE)); + Status = + RTMPAllocateNdisPacket(pAd, &pPacket, +- (PUCHAR) & rtmpHwHdr, ++ (u8 *)& rtmpHwHdr, + (TXINFO_SIZE + TXWI_SIZE), + pData, Length); + if (Status != NDIS_STATUS_SUCCESS) { +@@ -242,12 +242,12 @@ NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) ++int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket) + { + PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; ++ u8 *pSrcBufVA; ++ u32 SrcBufLen; + PHEADER_802_11 pHeader_802_11; + + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +@@ -270,18 +270,18 @@ NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, + + } + +-NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) ++int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket) + { + PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; ++ u8 *pSrcBufVA; ++ u32 SrcBufLen; + PHEADER_802_11 pHeader_802_11; + BOOLEAN bAckRequired, bInsertTimestamp; +- UCHAR MlmeRate; ++ u8 MlmeRate; + PTXWI_STRUC pFirstTxWI; + MAC_TABLE_ENTRY *pMacEntry = NULL; +- UCHAR PID; ++ u8 PID; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +@@ -421,7 +421,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, + FALSE, bAckRequired, FALSE, 0, RESERVED_WCID, + (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID, 0, +- (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + } else { + /* dont use low rate to send QoS Null data frame */ +@@ -430,7 +430,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + 0, pMacEntry->Aid, + (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), + pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR) pMacEntry->MaxHTPhyMode.field.MCS, ++ (u8)pMacEntry->MaxHTPhyMode.field.MCS, + IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); + } + +@@ -506,10 +506,10 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + (2).Normal + ======================================================================== + */ +-static UCHAR TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) ++static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) + { +- UCHAR TxFrameType = TX_UNKOWN_FRAME; +- UCHAR Wcid; ++ u8 TxFrameType = TX_UNKOWN_FRAME; ++ u8 Wcid; + MAC_TABLE_ENTRY *pMacEntry = NULL; + BOOLEAN bHTRate = FALSE; + +@@ -712,16 +712,16 @@ BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QIdx, /* BulkOutPipeId */ +- IN UCHAR Max_Tx_Packets) ++void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, u8 QIdx, /* BulkOutPipeId */ ++ u8 Max_Tx_Packets) + { + PQUEUE_ENTRY pEntry = NULL; + PNDIS_PACKET pPacket; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- UCHAR Count = 0; ++ int Status = NDIS_STATUS_SUCCESS; ++ u8 Count = 0; + PQUEUE_HEADER pQueue; +- ULONG FreeNumber[NUM_OF_TX_RING]; +- UCHAR QueIdx, sQIdx, eQIdx; ++ unsigned long FreeNumber[NUM_OF_TX_RING]; ++ u8 QueIdx, sQIdx, eQIdx; + unsigned long IrqFlags = 0; + BOOLEAN hasTxDesc = FALSE; + TX_BLK TxBlk; +@@ -780,7 +780,7 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + } + + pTxBlk = &TxBlk; +- NdisZeroMemory((PUCHAR) pTxBlk, sizeof(TX_BLK)); ++ NdisZeroMemory((u8 *)pTxBlk, sizeof(TX_BLK)); + /*InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. */ + pTxBlk->QueIdx = QueIdx; + +@@ -908,9 +908,9 @@ VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, IN UCHAR QI + + ======================================================================== + */ +-USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) ++u16 RTMPCalcDuration(IN PRTMP_ADAPTER pAd, u8 Rate, unsigned long Size) + { +- ULONG Duration = 0; ++ unsigned long Duration = 0; + + if (Rate < RATE_FIRST_OFDM_RATE) /* CCK */ + { +@@ -921,14 +921,14 @@ USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + else + Duration = 192; /* 144+48 preamble+plcp */ + +- Duration += (USHORT) ((Size << 4) / RateIdTo500Kbps[Rate]); ++ Duration += (u16)((Size << 4) / RateIdTo500Kbps[Rate]); + if ((Size << 4) % RateIdTo500Kbps[Rate]) + Duration++; + } else if (Rate <= RATE_LAST_OFDM_RATE) /* OFDM rates */ + { + Duration = 20 + 6; /* 16+4 preamble+plcp + Signal Extension */ + Duration += +- 4 * (USHORT) ((11 + Size * 4) / RateIdTo500Kbps[Rate]); ++ 4 * (u16)((11 + Size * 4) / RateIdTo500Kbps[Rate]); + if ((11 + Size * 4) % RateIdTo500Kbps[Rate]) + Duration += 4; + } else /*mimo rate */ +@@ -936,7 +936,7 @@ USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + Duration = 20 + 6; /* 16+4 preamble+plcp + Signal Extension */ + } + +- return (USHORT) Duration; ++ return (u16)Duration; + } + + /* +@@ -968,14 +968,14 @@ USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size) + + ======================================================================== + */ +-VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, ++void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ ++ u8 BASize, ++ u8 WCID, ++ unsigned long Length, ++ u8 PID, ++ u8 TID, ++ u8 TxRate, ++ u8 Txopmode, + IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit) + { + PMAC_TABLE_ENTRY pMac = NULL; +@@ -1056,12 +1056,12 @@ VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC)); + } + +-VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) + { + HTTRANSMIT_SETTING *pTransmit; + PMAC_TABLE_ENTRY pMacEntry; +- UCHAR BASize; ++ u8 BASize; + + ASSERT(pTxWI); + +@@ -1093,7 +1093,7 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + /* John tune the performace with Intel Client in 20 MHz performance */ + BASize = pAd->CommonCfg.TxBASize; + if ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry)) { +- UCHAR RABAOriIdx = 0; /*The RA's BA Originator table index. */ ++ u8 RABAOriIdx = 0; /*The RA's BA Originator table index. */ + + RABAOriIdx = + pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority]; +@@ -1134,7 +1134,7 @@ VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + pTxWI->PacketId = pTxWI->MCS; + } + +-VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) + { + PHTTRANSMIT_SETTING /*pTxHTPhyMode, */ pTransmit; +@@ -1195,7 +1195,7 @@ VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + /* 3. Fragmentation not in used */ + /* 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible */ + BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, IN PUCHAR p8023hdr) ++ u8 *pPrevAddr1, u8 *p8023hdr) + { + + /* can't aggregate EAPOL (802.1x) frame */ +@@ -1231,9 +1231,9 @@ BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, IN PMAC_TABLE_ENTRY pMacEntry) ++ unsigned long TxRate, IN PMAC_TABLE_ENTRY pMacEntry) + { +- ULONG AFlags = ++ unsigned long AFlags = + (fCLIENT_STATUS_AMSDU_INUSED | fCLIENT_STATUS_AGGREGATION_CAPABLE); + + if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags)) { +@@ -1269,10 +1269,10 @@ BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT PUCHAR pQueIdx) ++PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, u8 *pQueIdx) + { + +- ULONG Number; ++ unsigned long Number; + /* 2004-11-15 to be removed. test aggregation only */ + /* if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)) && (*pNumber < 2)) */ + /* return NULL; */ +@@ -1317,7 +1317,7 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT PUCHAR pQueIdx) + + ======================================================================== + */ +-VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) ++void RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("SCANNING, suspend MSDU transmission ...\n")); + +@@ -1354,9 +1354,9 @@ VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) ++void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + { +-/* UCHAR IrqState; */ ++/* u8 IrqState; */ + + DBGPRINT(RT_DEBUG_TRACE, ("SCAN done, resume MSDU transmission ...\n")); + +@@ -1379,17 +1379,17 @@ VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + } + +-UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + PNDIS_PACKET pPacket, +- IN PUCHAR pData, IN ULONG DataSize) ++ u8 *pData, unsigned long DataSize) + { +- USHORT PayloadSize; +- USHORT SubFrameSize; ++ u16 PayloadSize; ++ u16 SubFrameSize; + PHEADER_802_3 pAMSDUsubheader; +- UINT nMSDU; +- UCHAR Header802_3[14]; ++ u32 nMSDU; ++ u8 Header802_3[14]; + +- PUCHAR pPayload, pDA, pSA, pRemovedLLCSNAP; ++ u8 *pPayload, *pDA, *pSA, *pRemovedLLCSNAP; + PNDIS_PACKET pClonePacket; + + nMSDU = 0; +@@ -1479,14 +1479,14 @@ UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + return nMSDU; + } + +-UINT BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- PUCHAR pData; +- USHORT DataSize; +- UINT nMSDU = 0; ++ u8 *pData; ++ u16 DataSize; ++ u32 nMSDU = 0; + +- pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); +- DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); ++ pData = (u8 *)GET_OS_PKT_DATAPTR(pPacket); ++ DataSize = (u16)GET_OS_PKT_LEN(pPacket); + + nMSDU = deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize); + +@@ -1501,9 +1501,9 @@ UINT BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + pEntry - pointer to the MAC entry; NULL is not found + ========================================================================== + */ +-MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, PUCHAR pAddr) ++MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, u8 *pAddr) + { +- ULONG HashIdx; ++ unsigned long HashIdx; + MAC_TABLE_ENTRY *pEntry = NULL; + + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); +@@ -1522,14 +1522,14 @@ MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, PUCHAR pAddr) + } + + MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR apidx, IN BOOLEAN CleanAll) ++ u8 *pAddr, ++ u8 apidx, IN BOOLEAN CleanAll) + { +- UCHAR HashIdx; ++ u8 HashIdx; + int i, FirstWcid; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; +-/* USHORT offset; */ +-/* ULONG addr; */ ++/* u16 offset; */ ++/* unsigned long addr; */ + + /* if FULL, return */ + if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE) +@@ -1601,7 +1601,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + AsicRemovePairwiseKeyEntry(pAd, + pEntry-> + apidx, +- (UCHAR) i); ++ (u8)i); + #endif /* RTMP_MAC_PCI // */ + } + } +@@ -1615,7 +1615,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + COPY_MAC_ADDR(pEntry->Addr, pAddr); + pEntry->Sst = SST_NOT_AUTH; + pEntry->AuthState = AS_NOT_AUTH; +- pEntry->Aid = (USHORT) i; /*0; */ ++ pEntry->Aid = (u16)i; /*0; */ + pEntry->CapabilityInfo = 0; + pEntry->PsMode = PWR_ACTIVE; + pEntry->PsQIdleCount = 0; +@@ -1659,13 +1659,13 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, +- IN USHORT wcid, IN PUCHAR pAddr) ++ u16 wcid, u8 *pAddr) + { +- USHORT HashIdx; ++ u16 HashIdx; + MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; + BOOLEAN Cancelled; +- /*USHORT offset; // unused variable */ +- /*UCHAR j; // unused variable */ ++ /*u16 offset; // unused variable */ ++ /*u8 j; // unused variable */ + + if (wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; +@@ -1752,7 +1752,7 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + the power-saving queues are freed here. + ========================================================================== + */ +-VOID MacTableReset(IN PRTMP_ADAPTER pAd) ++void MacTableReset(IN PRTMP_ADAPTER pAd) + { + int i; + +@@ -1790,11 +1790,11 @@ VOID MacTableReset(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID AssocParmFill(IN PRTMP_ADAPTER pAd, ++void AssocParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, IN USHORT ListenIntv) ++ u8 *pAddr, ++ u16 CapabilityInfo, ++ unsigned long Timeout, u16 ListenIntv) + { + COPY_MAC_ADDR(AssocReq->Addr, pAddr); + /* Add mask to support 802.11b mode only */ +@@ -1811,9 +1811,9 @@ VOID AssocParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID DisassocParmFill(IN PRTMP_ADAPTER pAd, ++void DisassocParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, +- IN PUCHAR pAddr, IN USHORT Reason) ++ u8 *pAddr, u16 Reason) + { + COPY_MAC_ADDR(DisassocReq->Addr, pAddr); + DisassocReq->Reason = Reason; +@@ -1856,21 +1856,21 @@ VOID DisassocParmFill(IN PRTMP_ADAPTER pAd, + BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { + PACKET_INFO PacketInfo; +- ULONG NumberOfBytesRead = 0; +- ULONG CurrentOffset = 0; +- PVOID pVirtualAddress = NULL; +- UINT NdisBufferLength; +- PUCHAR pSrc; +- USHORT Protocol; +- UCHAR ByteOffset36 = 0; +- UCHAR ByteOffset38 = 0; ++ unsigned long NumberOfBytesRead = 0; ++ unsigned long CurrentOffset = 0; ++ void *pVirtualAddress = NULL; ++ u32 NdisBufferLength; ++ u8 *pSrc; ++ u16 Protocol; ++ u8 ByteOffset36 = 0; ++ u8 ByteOffset38 = 0; + BOOLEAN ReadFirstParm = TRUE; + +- RTMP_QueryPacketInfo(pPacket, &PacketInfo, (PUCHAR *) & pVirtualAddress, ++ RTMP_QueryPacketInfo(pPacket, &PacketInfo, (u8 **) & pVirtualAddress, + &NdisBufferLength); + + NumberOfBytesRead += NdisBufferLength; +- pSrc = (PUCHAR) pVirtualAddress; ++ pSrc = (u8 *)pVirtualAddress; + Protocol = *(pSrc + 12) * 256 + *(pSrc + 13); + + /* */ +@@ -1910,11 +1910,11 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { +- USHORT TypeLen; +- UCHAR Byte0, Byte1; +- PUCHAR pSrcBuf; +- UINT32 pktLen; +- UINT16 srcPort, dstPort; ++ u16 TypeLen; ++ u8 Byte0, Byte1; ++ u8 *pSrcBuf; ++ u32 pktLen; ++ u16 srcPort, dstPort; + BOOLEAN status = TRUE; + + pSrcBuf = GET_OS_PKT_DATAPTR(pPacket); +@@ -1941,7 +1941,7 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 6, + &Byte0, &Byte1); + RTMP_SET_PACKET_LLCSNAP(pPacket, 1); +- TypeLen = (USHORT) ((Byte0 << 8) + Byte1); ++ TypeLen = (u16)((Byte0 << 8) + Byte1); + pSrcBuf += 8; /* Skip this LLC/SNAP header */ + } else { + /*It just has 3-byte LLC header, maybe a legacy ether type frame. we didn't handle it. */ +@@ -1963,7 +1963,7 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + RTMP_SET_PACKET_VLAN(pPacket, 1); + Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 2, &Byte0, + &Byte1); +- TypeLen = (USHORT) ((Byte0 << 8) + Byte1); ++ TypeLen = (u16)((Byte0 << 8) + Byte1); + + pSrcBuf += 4; /* Skip the VLAN Header. */ + } +@@ -1978,10 +1978,10 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + pSrcBuf += 20; /* Skip the IP header */ + srcPort = + OS_NTOHS(get_unaligned +- ((PUINT16) (pSrcBuf))); ++ ((u16 *)(pSrcBuf))); + dstPort = + OS_NTOHS(get_unaligned +- ((PUINT16) (pSrcBuf + 2))); ++ ((u16 *)(pSrcBuf + 2))); + + if ((srcPort == 0x44 && dstPort == 0x43) || (srcPort == 0x43 && dstPort == 0x44)) { /*It's a BOOTP/DHCP packet */ + RTMP_SET_PACKET_DHCP(pPacket, 1); +@@ -2010,29 +2010,29 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + } + +-VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, ++void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI) + { +- CHAR rssi0 = pRxWI->RSSI0; +- CHAR rssi1 = pRxWI->RSSI1; +- CHAR rssi2 = pRxWI->RSSI2; ++ char rssi0 = pRxWI->RSSI0; ++ char rssi1 = pRxWI->RSSI1; ++ char rssi2 = pRxWI->RSSI2; + + if (rssi0 != 0) { +- pRssi->LastRssi0 = ConvertToRssi(pAd, (CHAR) rssi0, RSSI_0); ++ pRssi->LastRssi0 = ConvertToRssi(pAd, (char)rssi0, RSSI_0); + pRssi->AvgRssi0X8 = + (pRssi->AvgRssi0X8 - pRssi->AvgRssi0) + pRssi->LastRssi0; + pRssi->AvgRssi0 = pRssi->AvgRssi0X8 >> 3; + } + + if (rssi1 != 0) { +- pRssi->LastRssi1 = ConvertToRssi(pAd, (CHAR) rssi1, RSSI_1); ++ pRssi->LastRssi1 = ConvertToRssi(pAd, (char)rssi1, RSSI_1); + pRssi->AvgRssi1X8 = + (pRssi->AvgRssi1X8 - pRssi->AvgRssi1) + pRssi->LastRssi1; + pRssi->AvgRssi1 = pRssi->AvgRssi1X8 >> 3; + } + + if (rssi2 != 0) { +- pRssi->LastRssi2 = ConvertToRssi(pAd, (CHAR) rssi2, RSSI_2); ++ pRssi->LastRssi2 = ConvertToRssi(pAd, (char)rssi2, RSSI_2); + pRssi->AvgRssi2X8 = + (pRssi->AvgRssi2X8 - pRssi->AvgRssi2) + pRssi->LastRssi2; + pRssi->AvgRssi2 = pRssi->AvgRssi2X8 >> 3; +@@ -2040,11 +2040,11 @@ VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + } + + /* Normal legacy Rx packet indication */ +-VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR Header802_3[LENGTH_802_3]; ++ u8 Header802_3[LENGTH_802_3]; + + /* 1. get 802.3 Header */ + /* 2. remove LLC */ +@@ -2064,10 +2064,10 @@ VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + #ifdef RTMP_MAC_USB + if (pAd->CommonCfg.bDisableReordering == 0) { + PBA_REC_ENTRY pBAEntry; +- ULONG Now32; +- UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID; +- UCHAR TID = pRxBlk->pRxWI->TID; +- USHORT Idx; ++ unsigned long Now32; ++ u8 Wcid = pRxBlk->pRxWI->WirelessCliID; ++ u8 TID = pRxBlk->pRxWI->TID; ++ u16 Idx; + + #define REORDERING_PACKET_TIMEOUT ((100 * OS_HZ)/1000) /* system ticks -- 100 ms */ + +@@ -2111,8 +2111,8 @@ VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + } + + /* Normal, AMPDU or AMSDU */ +-VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++void CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) + && (pAd->CommonCfg.bDisableReordering == 0)) { +@@ -2127,14 +2127,14 @@ VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + } + } + +-VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { +- UCHAR Header802_3[LENGTH_802_3]; +- UINT16 Msdu2Size; +- UINT16 Payload1Size, Payload2Size; +- PUCHAR pData2; ++ u8 Header802_3[LENGTH_802_3]; ++ u16 Msdu2Size; ++ u16 Payload1Size, Payload2Size; ++ u8 *pData2; + PNDIS_PACKET pPacket2 = NULL; + + Msdu2Size = *(pRxBlk->pData) + (*(pRxBlk->pData + 1) << 8); +@@ -2196,16 +2196,16 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PHEADER_802_11 pHeader = pRxBlk->pHeader; + PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; ++ u8 *pData = pRxBlk->pData; ++ u16 DataSize = pRxBlk->DataSize; + PNDIS_PACKET pRetPacket = NULL; +- UCHAR *pFragBuffer = NULL; ++ u8 *pFragBuffer = NULL; + BOOLEAN bReassDone = FALSE; +- UCHAR HeaderRoom = 0; ++ u8 HeaderRoom = 0; + + ASSERT(pHeader); + +- HeaderRoom = pData - (UCHAR *) pHeader; ++ HeaderRoom = pData - (u8 *) pHeader; + + /* Re-assemble the fragmented packets */ + if (pHeader->Frag == 0) /* Frag. Number is 0 : First frag or only one pkt */ +@@ -2284,7 +2284,7 @@ done: + pAd->FragFrame.pFragPacket = pNewFragPacket; + pRxBlk->pHeader = + (PHEADER_802_11) GET_OS_PKT_DATAPTR(pRetPacket); +- pRxBlk->pData = (UCHAR *) pRxBlk->pHeader + HeaderRoom; ++ pRxBlk->pData = (u8 *) pRxBlk->pHeader + HeaderRoom; + pRxBlk->DataSize = pAd->FragFrame.RxSize - HeaderRoom; + pRxBlk->pRxPacket = pRetPacket; + } else { +@@ -2295,10 +2295,10 @@ done: + return pRetPacket; + } + +-VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++void Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { +- UINT nMSDU; ++ u32 nMSDU; + + update_os_packet_info(pAd, pRxBlk, FromWhichBSSID); + RTMP_SET_PACKET_IF(pRxBlk->pRxPacket, FromWhichBSSID); +@@ -2307,8 +2307,8 @@ VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, + pRxBlk->DataSize); + } + +-VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++void Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + MAC_TABLE_ENTRY *pEntry = NULL; + +@@ -2329,10 +2329,10 @@ VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, + } + + #define BCN_TBTT_OFFSET 64 /*defer 64 us */ +-VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) ++void ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) + { + +- UINT32 Offset; ++ u32 Offset; + + Offset = (pAd->TbttTickCount) % (BCN_TBTT_OFFSET); + +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index 157ebc6..19eb928 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -32,24 +32,24 @@ + */ + #include "../rt_config.h" + +-USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN BOOLEAN bIsLast, OUT USHORT * FreeNumber) ++ IN BOOLEAN bIsLast, u16 * FreeNumber) + { + +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; ++ u8 *pDMAHeaderBufVA; ++ u16 TxIdx, RetTxIdx; + PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; ++ u32 BufBasePaLow; + PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; ++ u16 hwHeaderLen; + + /* */ + /* get Tx Ring Resource */ + /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ pDMAHeaderBufVA = (u8 *)pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +@@ -97,25 +97,25 @@ USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + return RetTxIdx; + } + +-USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, +- OUT USHORT * FreeNumber) ++ u16 * FreeNumber) + { + +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; ++ u8 *pDMAHeaderBufVA; ++ u16 TxIdx, RetTxIdx; + PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; ++ u32 BufBasePaLow; + PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; ++ u16 hwHeaderLen; + + /* */ + /* get Tx Ring Resource */ + /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ pDMAHeaderBufVA = (u8 *)pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +@@ -156,18 +156,18 @@ USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + return RetTxIdx; + } + +-USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR frameNum, OUT USHORT * FreeNumber) ++ u8 frameNum, u16 * FreeNumber) + { + BOOLEAN bIsLast; +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; ++ u8 *pDMAHeaderBufVA; ++ u16 TxIdx, RetTxIdx; + PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; ++ u32 BufBasePaLow; + PRTMP_TX_RING pTxRing; +- USHORT hwHdrLen; +- UINT32 firstDMALen; ++ u16 hwHdrLen; ++ u32 firstDMALen; + + bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); + +@@ -176,7 +176,7 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ pDMAHeaderBufVA = (u8 *)pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +@@ -235,9 +235,9 @@ USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + + } + +-VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++void RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN USHORT totalMPDUSize, IN USHORT FirstTxIdx) ++ u16 totalMPDUSize, u16 FirstTxIdx) + { + + PTXWI_STRUC pTxWI; +@@ -252,8 +252,8 @@ VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + + } + +-VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN USHORT LastTxIdx) ++void RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u16 LastTxIdx) + { + PTXD_STRUC pTxD; + PRTMP_TX_RING pTxRing; +@@ -272,24 +272,24 @@ VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, + + } + +-USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR fragNum, OUT USHORT * FreeNumber) ++ u8 fragNum, u16 * FreeNumber) + { +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; ++ u8 *pDMAHeaderBufVA; ++ u16 TxIdx, RetTxIdx; + PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; ++ u32 BufBasePaLow; + PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- UINT32 firstDMALen; ++ u16 hwHeaderLen; ++ u32 firstDMALen; + + /* */ + /* Get Tx Ring Resource */ + /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; + TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; ++ pDMAHeaderBufVA = (u8 *)pTxRing->Cell[TxIdx].DmaBuf.AllocVa; + BufBasePaLow = + RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); + +@@ -342,12 +342,12 @@ USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + This function handle PCI specific TxDesc and cpu index update and kick the packet out. + */ + int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, ++ u8 QueIdx, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, IN UINT SrcBufLen) ++ u8 *pSrcBufVA, u32 SrcBufLen) + { + PTXD_STRUC pTxD; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ unsigned long SwIdx = pAd->MgmtRing.TxCpuIdx; + + pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; + +@@ -405,17 +405,17 @@ int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHeader, + IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD) + { + PCIPHER_KEY pWpaKey; +- INT dBm; ++ int dBm; + + /* Phy errors & CRC errors */ + if ( /*(pRxD->PhyErr) || */ (pRxD->Crc)) { + /* Check RSSI for Noise Hist statistic collection. */ +- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; ++ dBm = (int)(pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) + pAd->StaCfg.RPIDensity[0] += 1; + else if (dBm <= -82) +@@ -516,14 +516,14 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + return (NDIS_STATUS_SUCCESS); + } + +-BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) ++BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) + { + PRTMP_TX_RING pTxRing; + PTXD_STRUC pTxD; + PNDIS_PACKET pPacket; +- UCHAR FREE = 0; ++ u8 FREE = 0; + TXD_STRUC TxD, *pOriTxD; +- /*ULONG IrqFlags; */ ++ /*unsigned long IrqFlags; */ + BOOLEAN bReschedule = FALSE; + + ASSERT(QueIdx < NUM_OF_TX_RING); +@@ -610,9 +610,9 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx) + ======================================================================== + */ + BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap) ++ INT_SOURCE_CSR_STRUC TxRingBitmap) + { +-/* UCHAR Count = 0; */ ++/* u8 Count = 0; */ + unsigned long IrqFlags; + BOOLEAN bReschedule = FALSE; + +@@ -661,12 +661,12 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + { + PTXD_STRUC pTxD; + PNDIS_PACKET pPacket; + /* int i; */ +- UCHAR FREE = 0; ++ u8 FREE = 0; + PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; + + NdisAcquireSpinLock(&pAd->MgmtRingLock); +@@ -713,7 +713,7 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) + { + { + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { +@@ -732,7 +732,7 @@ VOID RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) + { + { + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { +@@ -743,7 +743,7 @@ VOID RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) + + } + +-VOID RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + +@@ -776,12 +776,12 @@ VOID RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) + PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, +- IN OUT UINT32 * pRxPending) ++ IN u32 * pRxPending) + { + PRXD_STRUC pRxD; + PNDIS_PACKET pRxPacket = NULL; + PNDIS_PACKET pNewPacket; +- PVOID AllocVa; ++ void *AllocVa; + NDIS_PHYSICAL_ADDRESS AllocPa; + BOOLEAN bReschedule = FALSE; + RTMP_DMACB *pRxCell; +@@ -864,23 +864,23 @@ done: + return pRxPacket; + } + +-NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) ++int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket) + { + PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; ++ u8 *pSrcBufVA; ++ u32 SrcBufLen; + PTXD_STRUC pTxD; + PHEADER_802_11 pHeader_802_11; + BOOLEAN bAckRequired, bInsertTimestamp; +- ULONG SrcBufPA; +- /*UCHAR TxBufIdx; */ +- UCHAR MlmeRate; +- ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; ++ unsigned long SrcBufPA; ++ /*u8 TxBufIdx; */ ++ u8 MlmeRate; ++ unsigned long SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; + PTXWI_STRUC pFirstTxWI; +- /*ULONG i; */ ++ /*unsigned long i; */ + /*HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. */ +- ULONG FreeNum; ++ unsigned long FreeNum; + MAC_TABLE_ENTRY *pMacEntry = NULL; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +@@ -1000,14 +1000,14 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, + FALSE, bAckRequired, FALSE, 0, RESERVED_WCID, + (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, +- (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + } else { + RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, + bInsertTimestamp, FALSE, bAckRequired, FALSE, + 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE), + pMacEntry->MaxHTPhyMode.field.MCS, 0, +- (UCHAR) pMacEntry->MaxHTPhyMode.field.MCS, ++ (u8)pMacEntry->MaxHTPhyMode.field.MCS, + IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode); + } + +@@ -1040,8 +1040,8 @@ NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + return NDIS_STATUS_SUCCESS; + } + +-NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) ++int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket) + { + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) + ) { +@@ -1078,9 +1078,9 @@ NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, + IN PTXD_STRUC pTxD, +- IN BOOLEAN bWIV, IN UCHAR QueueSEL) ++ IN BOOLEAN bWIV, u8 QueueSEL) + { + /* */ + /* Always use Long preamble before verifiation short preamble functionality works well. */ +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +index da79fc0..7906756 100644 +--- a/drivers/staging/rt2860/common/cmm_data_usb.c ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -41,11 +41,11 @@ + => + => + */ +-static inline NDIS_STATUS RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, ++static inline int RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, ++ u8 QueIdx, + IN HT_TX_CONTEXT * pHTTXContext) + { +- NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES; ++ int canWrite = NDIS_STATUS_RESOURCES; + + if (((pHTTXContext->CurWritePosition) < + pHTTXContext->NextBulkOutPosition) +@@ -68,9 +68,9 @@ static inline NDIS_STATUS RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, + return canWrite; + } + +-USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN BOOLEAN bIsLast, OUT USHORT * FreeNumber) ++ IN BOOLEAN bIsLast, u16 * FreeNumber) + { + + /* Dummy function. Should be removed in the future. */ +@@ -78,20 +78,20 @@ USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + + } + +-USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR fragNum, OUT USHORT * FreeNumber) ++ u8 fragNum, u16 * FreeNumber) + { + HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ +- UINT32 fillOffset; ++ u16 hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ ++ u32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; ++ u8 *pWirelessPacket = NULL; ++ u8 QueIdx; ++ int Status; + unsigned long IrqFlags; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ u32 USBDMApktLen = 0, DMAHdrLen, padding; + BOOLEAN TxQLastRound = FALSE; + + /* */ +@@ -146,7 +146,7 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + } + } + +- NdisZeroMemory((PUCHAR) (&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); ++ NdisZeroMemory((u8 *)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); + pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); + pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + +@@ -166,7 +166,7 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen); + + /* For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload */ +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, FIFO_EDCA, ++ RTMPWriteTxInfo(pAd, pTxInfo, (u16)(USBDMApktLen), FALSE, FIFO_EDCA, + FALSE /*NextValid */ , FALSE); + + if (fragNum == pTxBlk->TotalFragNum) { +@@ -215,21 +215,21 @@ USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + + } + +-USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, +- OUT USHORT * FreeNumber) ++ u16 * FreeNumber) + { + HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; +- UINT32 fillOffset; ++ u16 hwHdrLen; ++ u32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket; +- UCHAR QueIdx; ++ u8 *pWirelessPacket; ++ u8 QueIdx; + unsigned long IrqFlags; +- NDIS_STATUS Status; +- UINT32 USBDMApktLen = 0, DMAHdrLen, padding; ++ int Status; ++ u32 USBDMApktLen = 0, DMAHdrLen, padding; + BOOLEAN bTxQLastRound = FALSE; + + /* For USB, didn't need PCI_MAP_SINGLE() */ +@@ -278,7 +278,7 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen); + + /* For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload */ +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (USBDMApktLen), FALSE, ++ RTMPWriteTxInfo(pAd, pTxInfo, (u16)(USBDMApktLen), FALSE, + FIFO_EDCA, FALSE /*NextValid */ , FALSE); + + if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > +@@ -328,20 +328,20 @@ USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + + } + +-USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR frameNum, OUT USHORT * FreeNumber) ++ u8 frameNum, u16 * FreeNumber) + { + HT_TX_CONTEXT *pHTTXContext; +- USHORT hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ +- UINT32 fillOffset; ++ u16 hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ ++ u32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +- PUCHAR pWirelessPacket = NULL; +- UCHAR QueIdx; +- NDIS_STATUS Status; ++ u8 *pWirelessPacket = NULL; ++ u8 QueIdx; ++ int Status; + unsigned long IrqFlags; +- /*UINT32 USBDMApktLen = 0, DMAHdrLen, padding; */ ++ /*u32 USBDMApktLen = 0, DMAHdrLen, padding; */ + + /* */ + /* get Tx Ring Resource & Dma Buffer address */ +@@ -401,7 +401,7 @@ USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; + + /* pTxInfo->USBDMApktLen now just a temp value and will to correct latter. */ +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (pTxBlk->Priv), ++ RTMPWriteTxInfo(pAd, pTxInfo, (u16)(pTxBlk->Priv), + FALSE, FIFO_EDCA, FALSE /*NextValid */ , + FALSE); + +@@ -467,18 +467,18 @@ done: + + } + +-VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN USHORT totalMPDUSize, IN USHORT TxIdx) ++ u16 totalMPDUSize, u16 TxIdx) + { +- UCHAR QueIdx; ++ u8 QueIdx; + HT_TX_CONTEXT *pHTTXContext; +- UINT32 fillOffset; ++ u32 fillOffset; + TXINFO_STRUC *pTxInfo; + TXWI_STRUC *pTxWI; +- UINT32 USBDMApktLen, padding; ++ u32 USBDMApktLen, padding; + unsigned long IrqFlags; +- PUCHAR pWirelessPacket; ++ u8 *pWirelessPacket; + + QueIdx = pTxBlk->QueIdx; + pHTTXContext = &pAd->TxContext[QueIdx]; +@@ -492,10 +492,10 @@ VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + || ((pHTTXContext->ENextBulkOutPosition - 8) == + pHTTXContext->CurWritePosition)) + && (pHTTXContext->bCopySavePad == TRUE)) +- pWirelessPacket = (PUCHAR) (&pHTTXContext->SavedPad[0]); ++ pWirelessPacket = (u8 *)(&pHTTXContext->SavedPad[0]); + else + pWirelessPacket = +- (PUCHAR) (&pHTTXContext->TransferBuffer->field. ++ (u8 *)(&pHTTXContext->TransferBuffer->field. + WirelessPacket[fillOffset]); + + /* */ +@@ -547,8 +547,8 @@ VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + + } + +-VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN USHORT TxIdx) ++void RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u16 TxIdx) + { + /* DO nothing for USB. */ + } +@@ -561,8 +561,8 @@ VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, + Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out. + + */ +-VOID RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, IN UCHAR QueIdx) ++void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, u8 QueIdx) + { + RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); + RTUSBKickBulkOut(pAd); +@@ -574,15 +574,15 @@ VOID RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, + This function handle RT2870 specific TxDesc and cpu index update and kick the packet out. + */ + int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, ++ u8 QueIdx, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, IN UINT SrcBufLen) ++ u8 *pSrcBufVA, u32 SrcBufLen) + { + PTXINFO_STRUC pTxInfo; +- ULONG BulkOutSize; +- UCHAR padLen; +- PUCHAR pDest; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; ++ unsigned long BulkOutSize; ++ u8 padLen; ++ u8 *pDest; ++ unsigned long SwIdx = pAd->MgmtRing.TxCpuIdx; + PTX_CONTEXT pMLMEContext = + (PTX_CONTEXT) pAd->MgmtRing.Cell[SwIdx].AllocVa; + unsigned long IrqFlags; +@@ -592,7 +592,7 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + /* Build our URB for USBD */ + BulkOutSize = SrcBufLen; + BulkOutSize = (BulkOutSize + 3) & (~3); +- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT) (BulkOutSize - TXINFO_SIZE), ++ RTMPWriteTxInfo(pAd, pTxInfo, (u16)(BulkOutSize - TXINFO_SIZE), + TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + + BulkOutSize += 4; /* Always add 4 extra bytes at every packet. */ +@@ -605,7 +605,7 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + ASSERT((padLen <= RTMP_PKT_TAIL_PADDING)); + + /* Now memzero all extra padding bytes. */ +- pDest = (PUCHAR) (pSrcBufVA + SrcBufLen); ++ pDest = (u8 *)(pSrcBufVA + SrcBufLen); + skb_put(GET_OS_PKT_TYPE(pPacket), padLen); + NdisZeroMemory(pDest, padLen); + +@@ -642,34 +642,34 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + return 0; + } + +-VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, +- IN UCHAR * pNullFrame, IN UINT32 frameLen) ++void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++ u8 QueIdx, ++ u8 * pNullFrame, u32 frameLen) + { + if (pAd->NullContext.InUse == FALSE) { + PTX_CONTEXT pNullContext; + PTXINFO_STRUC pTxInfo; + PTXWI_STRUC pTxWI; +- PUCHAR pWirelessPkt; ++ u8 *pWirelessPkt; + + pNullContext = &(pAd->NullContext); + + /* Set the in use bit */ + pNullContext->InUse = TRUE; + pWirelessPkt = +- (PUCHAR) & pNullContext->TransferBuffer->field. ++ (u8 *)& pNullContext->TransferBuffer->field. + WirelessPacket[0]; + + RTMPZeroMemory(&pWirelessPkt[0], 100); + pTxInfo = (PTXINFO_STRUC) & pWirelessPkt[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (USHORT) (sizeof(HEADER_802_11) + TXWI_SIZE), ++ (u16)(sizeof(HEADER_802_11) + TXWI_SIZE), + TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxInfo->QSEL = FIFO_EDCA; + pTxWI = (PTXWI_STRUC) & pWirelessPkt[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, + FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), 0, +- 0, (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ 0, (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); + + RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE + TXINFO_SIZE], +@@ -710,13 +710,13 @@ Note: + PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, +- IN OUT UINT32 * pRxPending) ++ IN u32 * pRxPending) + { + PRX_CONTEXT pRxContext; + PNDIS_PACKET pSkb; +- PUCHAR pData; +- ULONG ThisFrameLen; +- ULONG RxBufferLength; ++ u8 *pData; ++ unsigned long ThisFrameLen; ++ unsigned long RxBufferLength; + PRXWI_STRUC pRxWI; + + pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex]; +@@ -812,12 +812,12 @@ label_null: + + ======================================================================== + */ +-NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHeader, + IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxINFO) + { + PCIPHER_KEY pWpaKey; +- INT dBm; ++ int dBm; + + if (pAd->bPromiscuous == TRUE) + return (NDIS_STATUS_SUCCESS); +@@ -827,7 +827,7 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + /* Phy errors & CRC errors */ + if (pRxINFO->Crc) { + /* Check RSSI for Noise Hist statistic collection. */ +- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; ++ dBm = (int)(pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; + if (dBm <= -87) + pAd->StaCfg.RPIDensity[0] += 1; + else if (dBm <= -82) +@@ -904,10 +904,10 @@ NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + return (NDIS_STATUS_SUCCESS); + } + +-VOID RtmpUsbStaAsicForceWakeupTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -919,7 +919,7 @@ VOID RtmpUsbStaAsicForceWakeupTimeout(IN PVOID SystemSpecific1, + } + } + +-VOID RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { + BOOLEAN Canceled; + +@@ -931,8 +931,8 @@ VOID RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + +-VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++void RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp) + { + + /* we have decided to SLEEP, so at least do it for a BEACON period. */ +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 610eb75..2178057 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -47,7 +47,7 @@ + + ======================================================================== + */ +-VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates) ++void RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, long Rates) + { + NDIS_802_11_RATES aryRates; + +@@ -235,10 +235,10 @@ VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates) + + ======================================================================== + */ +-VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) ++void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + { + +- UCHAR i; ++ u8 i; + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPWPARemoveAllKeys(AuthMode=%d, WepStatus=%d)\n", +@@ -307,9 +307,9 @@ VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) ++void RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, unsigned long phymode) + { +- INT i; ++ int i; + /* the selected phymode must be supported by the RF IC encoded in E2PROM */ + + /* if no change, do nothing */ +@@ -317,7 +317,7 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + if (pAd->CommonCfg.PhyMode == phymode) + return; + */ +- pAd->CommonCfg.PhyMode = (UCHAR) phymode; ++ pAd->CommonCfg.PhyMode = (u8)phymode; + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", +@@ -435,13 +435,13 @@ VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode) + + ======================================================================== + */ +-VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) ++void RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + { +- /*ULONG *pmcs; */ +- UINT32 Value = 0; +- UCHAR BBPValue = 0; +- UCHAR BBP3Value = 0; +- UCHAR RxStream = pAd->CommonCfg.RxStream; ++ /*unsigned long *pmcs; */ ++ u32 Value = 0; ++ u8 BBPValue = 0; ++ u8 BBP3Value = 0; ++ u8 RxStream = pAd->CommonCfg.RxStream; + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPSetHT : HT_mode(%d), ExtOffset(%d), MCS(%d), BW(%d), STBC(%d), SHORTGI(%d)\n", +@@ -475,20 +475,20 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + + /* Mimo power save, A-MSDU size, */ + pAd->CommonCfg.DesiredHtPhy.AmsduEnable = +- (USHORT) pAd->CommonCfg.BACapability.field.AmsduEnable; ++ (u16)pAd->CommonCfg.BACapability.field.AmsduEnable; + pAd->CommonCfg.DesiredHtPhy.AmsduSize = +- (UCHAR) pAd->CommonCfg.BACapability.field.AmsduSize; ++ (u8)pAd->CommonCfg.BACapability.field.AmsduSize; + pAd->CommonCfg.DesiredHtPhy.MimoPs = +- (UCHAR) pAd->CommonCfg.BACapability.field.MMPSmode; ++ (u8)pAd->CommonCfg.BACapability.field.MMPSmode; + pAd->CommonCfg.DesiredHtPhy.MpduDensity = +- (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ (u8)pAd->CommonCfg.BACapability.field.MpduDensity; + + pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = +- (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ (u16)pAd->CommonCfg.BACapability.field.AmsduSize; + pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = +- (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; ++ (u16)pAd->CommonCfg.BACapability.field.MMPSmode; + pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = +- (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ (u8)pAd->CommonCfg.BACapability.field.MpduDensity; + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPSetHT : AMsduSize = %d, MimoPs = %d, MpduDensity = %d, MaxRAmpduFactor = %d\n", +@@ -648,11 +648,11 @@ VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + + ======================================================================== + */ +-VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) ++void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx) + { + PRT_HT_PHY_INFO pDesired_ht_phy = NULL; +- UCHAR TxStream = pAd->CommonCfg.TxStream; +- UCHAR DesiredMcs = MCS_AUTO; ++ u8 TxStream = pAd->CommonCfg.TxStream; ++ u8 DesiredMcs = MCS_AUTO; + + do { + { +@@ -708,7 +708,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pDesired_ht_phy->MCSSet[0] = 0xff; + pDesired_ht_phy->MCSSet[1] = 0xff; + } else if (DesiredMcs <= MCS_15) { +- ULONG mode; ++ unsigned long mode; + + mode = DesiredMcs / 8; + if (mode < 2) +@@ -724,7 +724,7 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pDesired_ht_phy->MCSSet[1] = 0xff; + pDesired_ht_phy->MCSSet[2] = 0xff; + } else if (DesiredMcs <= MCS_23) { +- ULONG mode; ++ unsigned long mode; + + mode = DesiredMcs / 8; + if (mode < 3) +@@ -755,8 +755,8 @@ VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + + ======================================================================== + */ +-VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, +- IN UCHAR * pMcsSet, ++void RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++ u8 * pMcsSet, + OUT HT_CAPABILITY_IE * pHtCapability, + OUT ADD_HT_INFO_IE * pAddHtInfo) + { +@@ -790,15 +790,15 @@ VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, + Return: + ======================================================================== + */ +-VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY * pEntry) ++void RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIdx, ++ u8 KeyIdx, ++ u8 CipherAlg, IN MAC_TABLE_ENTRY * pEntry) + { +- UINT32 WCIDAttri = 0; +- USHORT offset; +- UCHAR IVEIV = 0; +- USHORT Wcid = 0; ++ u32 WCIDAttri = 0; ++ u16 offset; ++ u8 IVEIV = 0; ++ u16 Wcid = 0; + + { + { +@@ -872,7 +872,7 @@ Arguments: + Note: + ========================================================================== + */ +-PSTRING GetEncryptType(CHAR enc) ++char *GetEncryptType(char enc) + { + if (enc == Ndis802_11WEPDisabled) + return "NONE"; +@@ -888,7 +888,7 @@ PSTRING GetEncryptType(CHAR enc) + return "UNKNOW"; + } + +-PSTRING GetAuthMode(CHAR auth) ++char *GetAuthMode(char auth) + { + if (auth == Ndis802_11AuthModeOpen) + return "OPEN"; +@@ -914,7 +914,7 @@ PSTRING GetAuthMode(CHAR auth) + return "UNKNOW"; + } + +-INT SetCommonHT(IN PRTMP_ADAPTER pAd) ++int SetCommonHT(IN PRTMP_ADAPTER pAd) + { + OID_SET_HT_PHYMODE SetHT; + +@@ -922,21 +922,21 @@ INT SetCommonHT(IN PRTMP_ADAPTER pAd) + return FALSE; + + SetHT.PhyMode = pAd->CommonCfg.PhyMode; +- SetHT.TransmitNo = ((UCHAR) pAd->Antenna.field.TxPath); +- SetHT.HtMode = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.HTMODE; ++ SetHT.TransmitNo = ((u8)pAd->Antenna.field.TxPath); ++ SetHT.HtMode = (u8)pAd->CommonCfg.RegTransmitSetting.field.HTMODE; + SetHT.ExtOffset = +- (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; ++ (u8)pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; + SetHT.MCS = MCS_AUTO; +- SetHT.BW = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.BW; +- SetHT.STBC = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.STBC; +- SetHT.SHORTGI = (UCHAR) pAd->CommonCfg.RegTransmitSetting.field.ShortGI; ++ SetHT.BW = (u8)pAd->CommonCfg.RegTransmitSetting.field.BW; ++ SetHT.STBC = (u8)pAd->CommonCfg.RegTransmitSetting.field.STBC; ++ SetHT.SHORTGI = (u8)pAd->CommonCfg.RegTransmitSetting.field.ShortGI; + + RTMPSetHT(pAd, &SetHT); + + return TRUE; + } + +-PSTRING RTMPGetRalinkEncryModeStr(IN USHORT encryMode) ++char *RTMPGetRalinkEncryModeStr(u16 encryMode) + { + switch (encryMode) { + case Ndis802_11WEPDisabled: +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index 3b6f577..c7f4be1 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -48,16 +48,16 @@ + + ======================================================================== + */ +-NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- ULONG RingBasePaHigh; +- ULONG RingBasePaLow; +- PVOID RingBaseVa; +- INT index, num; ++ int Status = NDIS_STATUS_SUCCESS; ++ unsigned long RingBasePaHigh; ++ unsigned long RingBasePaLow; ++ void *RingBaseVa; ++ int index, num; + PTXD_STRUC pTxD; + PRXD_STRUC pRxD; +- ULONG ErrorValue = 0; ++ unsigned long ErrorValue = 0; + PRTMP_TX_RING pTxRing; + PRTMP_DMABUF pDmaBuf; + PNDIS_PACKET pPacket; +@@ -71,9 +71,9 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + /* issue, I intentional set them all to 64 bytes. */ + /* */ + for (num = 0; num < NUM_OF_TX_RING; num++) { +- ULONG BufBasePaHigh; +- ULONG BufBasePaLow; +- PVOID BufBaseVa; ++ unsigned long BufBasePaHigh; ++ unsigned long BufBasePaLow; ++ void *BufBaseVa; + + /* */ + /* Allocate Tx ring descriptor's memory (5 TX rings = 4 ACs + 1 HCCA) */ +@@ -171,12 +171,12 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + /* advance to next ring descriptor address */ + pTxD->DMADONE = 1; + RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; ++ RingBaseVa = (u8 *)RingBaseVa + TXD_SIZE; + + /* advance to next TxBuf address */ + BufBasePaLow += TX_DMA_1ST_BUFFER_SIZE; + BufBaseVa = +- (PUCHAR) BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; ++ (u8 *)BufBaseVa + TX_DMA_1ST_BUFFER_SIZE; + } + DBGPRINT(RT_DEBUG_TRACE, + ("TxRing[%d]: total %d entry allocated\n", num, +@@ -228,7 +228,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + /* Offset to next ring descriptor address */ + RingBasePaLow += TXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE; ++ RingBaseVa = (u8 *)RingBaseVa + TXD_SIZE; + + /* link the pre-allocated TxBuf to TXD */ + pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; +@@ -286,7 +286,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + /* Offset to next ring descriptor address */ + RingBasePaLow += RXD_SIZE; +- RingBaseVa = (PUCHAR) RingBaseVa + RXD_SIZE; ++ RingBaseVa = (u8 *)RingBaseVa + RXD_SIZE; + + /* Setup Rx associated Buffer size & allocate share memory */ + pDmaBuf = &pAd->RxRing.Cell[index].DmaBuf; +@@ -400,7 +400,7 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) ++void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + { + PTXD_STRUC pTxD; + PRXD_STRUC pRxD; +@@ -409,7 +409,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + int i; + PRTMP_TX_RING pTxRing; + unsigned long IrqFlags; +- /*UINT32 RxSwReadIdx; */ ++ /*u32 RxSwReadIdx; */ + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, +@@ -533,7 +533,7 @@ VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType) + } + } + +-VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { + int index, num, j; + PRTMP_TX_RING pTxRing; +@@ -667,7 +667,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMADisable(IN RTMP_ADAPTER * pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + +@@ -691,7 +691,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + int i = 0; +@@ -721,10 +721,10 @@ VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + + } + +-BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command) ++BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, u8 Command) + { +- UINT32 CmdStatus = 0, CID = 0, i; +- UINT32 ThisCIDMask = 0; ++ u32 CmdStatus = 0, CID = 0, i; ++ u32 ThisCIDMask = 0; + + i = 0; + do { +@@ -794,15 +794,15 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, +- IN INT apidx, +- IN ULONG FrameLen, IN ULONG UpdatePos) ++void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ int apidx, ++ unsigned long FrameLen, unsigned long UpdatePos) + { +- ULONG CapInfoPos = 0; +- UCHAR *ptr, *ptr_update, *ptr_capinfo; +- UINT i; ++ unsigned long CapInfoPos = 0; ++ u8 *ptr, *ptr_update, *ptr_capinfo; ++ u32 i; + BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; ++ u8 bcn_idx = 0; + + { + DBGPRINT(RT_DEBUG_ERROR, +@@ -821,10 +821,10 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, + 0x00); + } else { +- ptr = (PUCHAR) & pAd->BeaconTxWI; ++ ptr = (u8 *)& pAd->BeaconTxWI; + for (i = 0; i < TXWI_SIZE; i += 4) /* 16-byte TXWI field */ + { +- UINT32 longptr = ++ u32 longptr = + *ptr + (*(ptr + 1) << 8) + (*(ptr + 2) << 16) + + (*(ptr + 3) << 24); + RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[bcn_idx] + i, +@@ -853,7 +853,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + } + +-VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + { + AUTO_WAKEUP_STRUC AutoWakeupCfg; + +@@ -949,8 +949,8 @@ VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); + } + +-VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) ++void RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp) + { + BOOLEAN brc; + +@@ -960,7 +960,7 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + } + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE) + && pAd->StaCfg.PSControl.field.EnableNewPS == TRUE) { +- ULONG Now = 0; ++ unsigned long Now = 0; + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) { + DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +@@ -1016,9 +1016,9 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + + } + +-VOID PsPollWakeExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void PsPollWakeExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + unsigned long flags; +@@ -1044,9 +1044,9 @@ VOID PsPollWakeExec(IN PVOID SystemSpecific1, + #endif /* PCIE_PS_SUPPORT // */ + } + +-VOID RadioOnExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void RadioOnExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; +@@ -1164,11 +1164,11 @@ VOID RadioOnExec(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) ++BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level) + { + /*WPDMA_GLO_CFG_STRUC DmaCfg; */ + BOOLEAN Cancelled; +- /*UINT32 MACValue; */ ++ /*u32 MACValue; */ + + if (pAd->OpMode == OPMODE_AP && Level == DOT11POWERSAVE) + return FALSE; +@@ -1287,15 +1287,15 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + ========================================================================== + */ + BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, IN USHORT TbttNumToNextWakeUp) ++ u8 Level, u16 TbttNumToNextWakeUp) + { + WPDMA_GLO_CFG_STRUC DmaCfg; +- UCHAR i, tempBBP_R3 = 0; ++ u8 i, tempBBP_R3 = 0; + BOOLEAN brc = FALSE, Cancelled; +- UINT32 TbTTTime = 0; +- UINT32 PsPollTime = 0 /*, MACValue */ ; +- ULONG BeaconPeriodTime; +- UINT32 RxDmaIdx, RxCpuIdx; ++ u32 TbTTTime = 0; ++ u32 PsPollTime = 0 /*, MACValue */ ; ++ unsigned long BeaconPeriodTime; ++ u32 RxDmaIdx, RxCpuIdx; + DBGPRINT(RT_DEBUG_TRACE, + ("AsicRadioOff ===> Lv= %d, TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", + Level, pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, +@@ -1497,7 +1497,7 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; +@@ -1546,7 +1546,7 @@ VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + } + } + +-VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) ++void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + { + BOOLEAN brc = TRUE; + +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index 70e47db..d5bc37d 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -48,10 +48,10 @@ Note: + NDIS packet descriptor. + ======================================================================== + */ +-NDIS_STATUS NICInitRecv(IN PRTMP_ADAPTER pAd) ++int NICInitRecv(IN PRTMP_ADAPTER pAd) + { +- UCHAR i; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ u8 i; ++ int Status = NDIS_STATUS_SUCCESS; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); +@@ -132,7 +132,7 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) ++int NICInitTransmit(IN PRTMP_ADAPTER pAd) + { + #define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \ + Context->pUrb = RTUSB_ALLOC_URB(0); \ +@@ -159,15 +159,15 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + Context->data_dma); \ + Context->TransferBuffer = NULL; } + +- UCHAR i, acidx; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ u8 i, acidx; ++ int Status = NDIS_STATUS_SUCCESS; + PTX_CONTEXT pNullContext = &(pAd->NullContext); + PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); + PTX_CONTEXT pRTSContext = &(pAd->RTSContext); + PTX_CONTEXT pMLMEContext = NULL; + /* PHT_TX_CONTEXT pHTTXContext = NULL; */ + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- PVOID RingBaseVa; ++ void *RingBaseVa; + /* RTMP_TX_RING *pTxRing; */ + RTMP_MGMT_RING *pMgmtRing; + +@@ -233,7 +233,7 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* Allocate MGMT ring descriptor's memory */ + pAd->MgmtDescRing.AllocSize = + MGMT_RING_SIZE * sizeof(TX_CONTEXT); +- os_alloc_mem(pAd, (PUCHAR *) (&pAd->MgmtDescRing.AllocVa), ++ os_alloc_mem(pAd, (u8 **) (&pAd->MgmtDescRing.AllocVa), + pAd->MgmtDescRing.AllocSize); + if (pAd->MgmtDescRing.AllocVa == NULL) { + DBGPRINT_ERR(("Failed to allocate a big buffer for MgmtDescRing!\n")); +@@ -274,7 +274,7 @@ NDIS_STATUS NICInitTransmit(IN PRTMP_ADAPTER pAd) + pMLMEContext->SelfIdx = i; + + /* Offset to next ring descriptor address */ +- RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT); ++ RingBaseVa = (u8 *)RingBaseVa + sizeof(TX_CONTEXT); + } + DBGPRINT(RT_DEBUG_TRACE, + ("MGMT Ring: total %d entry allocated\n", i)); +@@ -428,11 +428,11 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { + /* COUNTER_802_11 pCounter = &pAd->WlanCounters; */ +- NDIS_STATUS Status; +- INT num; ++ int Status; ++ int num; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); + +@@ -519,7 +519,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + { + #define LM_URB_FREE(pObj, Context, BufferSize) \ + if (NULL != Context->pUrb) { \ +@@ -532,7 +532,7 @@ VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Context->data_dma); \ + Context->TransferBuffer = NULL; } + +- UINT i, acidx; ++ u32 i, acidx; + PTX_CONTEXT pNullContext = &pAd->NullContext; + PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; + PTX_CONTEXT pRTSContext = &pAd->RTSContext; +@@ -636,11 +636,11 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) ++int RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) + { + MAC_DW0_STRUC StaMacReg0; + MAC_DW1_STRUC StaMacReg1; +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ int Status = NDIS_STATUS_SUCCESS; + LARGE_INTEGER NOW; + + /* initialize the random number generator */ +@@ -687,7 +687,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMADisable(IN RTMP_ADAPTER * pAd) + { + /* no use */ + } +@@ -706,7 +706,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + USB_DMA_CFG_STRUC UsbCfg; +@@ -767,18 +767,18 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, +- IN INT apidx, +- IN ULONG FrameLen, IN ULONG UpdatePos) ++void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ int apidx, ++ unsigned long FrameLen, unsigned long UpdatePos) + { +- PUCHAR pBeaconFrame = NULL; +- UCHAR *ptr; +- UINT i, padding; ++ u8 *pBeaconFrame = NULL; ++ u8 *ptr; ++ u32 i, padding; + BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; +- UINT32 longValue; +-/* USHORT shortValue; */ ++ u32 longValue; ++/* u16 shortValue; */ + BOOLEAN bBcnReq = FALSE; +- UCHAR bcn_idx = 0; ++ u8 bcn_idx = 0; + + if (pBeaconFrame == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("pBeaconFrame is NULL!\n")); +@@ -803,7 +803,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); + NdisZeroMemory(pBeaconSync->BeaconTxWI[bcn_idx], TXWI_SIZE); + } else { +- ptr = (PUCHAR) & pAd->BeaconTxWI; ++ ptr = (u8 *)& pAd->BeaconTxWI; + if (NdisEqualMemory(pBeaconSync->BeaconTxWI[bcn_idx], &pAd->BeaconTxWI, TXWI_SIZE) == FALSE) { /* If BeaconTxWI changed, we need to rewrite the TxWI for the Beacon frames. */ + pBeaconSync->BeaconBitMap &= + (~(BEACON_BITMAP_MASK & (1 << bcn_idx))); +@@ -827,7 +827,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + ptr = pBeaconSync->BeaconBuf[bcn_idx]; + padding = (FrameLen & 0x01); +- NdisZeroMemory((PUCHAR) (pBeaconFrame + FrameLen), padding); ++ NdisZeroMemory((u8 *)(pBeaconFrame + FrameLen), padding); + FrameLen += padding; + for (i = 0; i < FrameLen /*HW_BEACON_OFFSET */ ; i += 2) { + if (NdisEqualMemory(ptr, pBeaconFrame, 2) == FALSE) { +@@ -849,7 +849,7 @@ VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + } + +-VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) + { + BEACON_SYNC_STRUCT *pBeaconSync; + int i, offset; +@@ -857,7 +857,7 @@ VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) + + pBeaconSync = pAd->CommonCfg.pBeaconSync; + if (pBeaconSync && pBeaconSync->EnableBeacon) { +- INT NumOfBcn; ++ int NumOfBcn; + + { + NumOfBcn = MAX_MESH_NUM; +@@ -883,7 +883,7 @@ VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) + } + } + +-VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + { + int apidx; + BEACON_SYNC_STRUCT *pBeaconSync; +@@ -891,15 +891,15 @@ VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + + pBeaconSync = pAd->CommonCfg.pBeaconSync; + if (pBeaconSync && pBeaconSync->EnableBeacon) { +- INT NumOfBcn; ++ int NumOfBcn; + + { + NumOfBcn = MAX_MESH_NUM; + } + + for (apidx = 0; apidx < NumOfBcn; apidx++) { +- UCHAR CapabilityInfoLocationInBeacon = 0; +- UCHAR TimIELocationInBeacon = 0; ++ u8 CapabilityInfoLocationInBeacon = 0; ++ u8 TimIELocationInBeacon = 0; + + NdisZeroMemory(pBeaconSync->BeaconBuf[apidx], + HW_BEACON_OFFSET); +@@ -929,12 +929,12 @@ VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + } + } + +-VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + { + BEACON_SYNC_STRUCT *pBeaconSync; + int i; + +- os_alloc_mem(pAd, (PUCHAR *) (&pAd->CommonCfg.pBeaconSync), ++ os_alloc_mem(pAd, (u8 **) (&pAd->CommonCfg.pBeaconSync), + sizeof(BEACON_SYNC_STRUCT)); + /*NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); */ + if (pAd->CommonCfg.pBeaconSync) { +@@ -954,7 +954,7 @@ VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + } + } + +-VOID RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd) + { + BEACON_SYNC_STRUCT *pBeaconSync; + BOOLEAN Cancelled = TRUE; +@@ -997,13 +997,13 @@ VOID RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd) + + ======================================================================== + */ +-VOID BeaconUpdateExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void BeaconUpdateExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; + LARGE_INTEGER tsfTime_a; /*, tsfTime_b, deltaTime_exp, deltaTime_ab; */ +- UINT32 delta, delta2MS, period2US, remain, remain_low, remain_high; ++ u32 delta, delta2MS, period2US, remain, remain_low, remain_high; + /* BOOLEAN positive; */ + + if (pAd->CommonCfg.IsUpdateBeacon == TRUE) { +@@ -1038,7 +1038,7 @@ VOID BeaconUpdateExec(IN PVOID SystemSpecific1, + * 2870 Radio on/off Related functions. + * + ********************************************************************/ +-VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + +@@ -1068,10 +1068,10 @@ VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) + RTMPSetLED(pAd, LED_RADIO_ON); + } + +-VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) ++void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; +- UINT32 Value, i; ++ u32 Value, i; + + DBGPRINT(RT_DEBUG_TRACE, ("RT28xxUsbMlmeRadioOFF()\n")); + +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index bd12025..16cc31a 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -36,16 +36,16 @@ + */ + #include "../rt_config.h" + +-extern UCHAR CISCO_OUI[]; ++extern u8 CISCO_OUI[]; + +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; +-extern UCHAR WPS_OUI[]; ++extern u8 WPA_OUI[]; ++extern u8 RSN_OUI[]; ++extern u8 WME_INFO_ELEM[]; ++extern u8 WME_PARM_ELEM[]; ++extern u8 Ccx2QosInfo[]; ++extern u8 RALINK_OUI[]; ++extern u8 BROADCOM_OUI[]; ++extern u8 WPS_OUI[]; + + /* + ========================================================================== +@@ -59,7 +59,7 @@ extern UCHAR WPS_OUI[]; + ========================================================================== + */ + BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2) ++ void * Msg, unsigned long MsgLen, u8 *pAddr2) + { + PMLME_ADDBA_REQ_STRUCT pInfo; + +@@ -97,7 +97,7 @@ BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen) ++BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned long MsgLen) + { + MLME_DELBA_REQ_STRUCT *pInfo; + pInfo = (MLME_DELBA_REQ_STRUCT *) Msg; +@@ -132,8 +132,8 @@ BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen) + } + + BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, OUT PUCHAR pAddr2) ++ void * pMsg, ++ unsigned long MsgLen, u8 *pAddr2) + { + PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; + PFRAME_ADDBA_REQ pAddFrame; +@@ -145,8 +145,8 @@ BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, + return FALSE; + } + /* we support immediate BA. */ +- *(USHORT *) (&pAddFrame->BaParm) = +- cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); ++ *(u16 *) (&pAddFrame->BaParm) = ++ cpu2le16(*(u16 *) (&pAddFrame->BaParm)); + pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); + pAddFrame->BaStartSeq.word = cpu2le16(pAddFrame->BaStartSeq.word); + +@@ -172,7 +172,7 @@ BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, + } + + BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, IN ULONG MsgLen) ++ void * pMsg, unsigned long MsgLen) + { + PFRAME_ADDBA_RSP pAddFrame; + +@@ -184,8 +184,8 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + return FALSE; + } + /* we support immediate BA. */ +- *(USHORT *) (&pAddFrame->BaParm) = +- cpu2le16(*(USHORT *) (&pAddFrame->BaParm)); ++ *(u16 *) (&pAddFrame->BaParm) = ++ cpu2le16(*(u16 *) (&pAddFrame->BaParm)); + pAddFrame->StatusCode = cpu2le16(pAddFrame->StatusCode); + pAddFrame->TimeOutValue = cpu2le16(pAddFrame->TimeOutValue); + +@@ -207,7 +207,7 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + } + + BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, IN VOID * pMsg, IN ULONG MsgLen) ++ u8 Wcid, void * pMsg, unsigned long MsgLen) + { + /*PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; */ + PFRAME_DELBA_REQ pDelFrame; +@@ -219,8 +219,8 @@ BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, + + pDelFrame = (PFRAME_DELBA_REQ) (pMsg); + +- *(USHORT *) (&pDelFrame->DelbaParm) = +- cpu2le16(*(USHORT *) (&pDelFrame->DelbaParm)); ++ *(u16 *) (&pDelFrame->DelbaParm) = ++ cpu2le16(*(u16 *) (&pDelFrame->DelbaParm)); + pDelFrame->ReasonCode = cpu2le16(pDelFrame->ReasonCode); + + if (pDelFrame->DelbaParm.TID & 0xfff0) +@@ -240,24 +240,24 @@ BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT PUCHAR pAddr2, OUT PUCHAR pBssid, OUT CHAR Ssid[], OUT UCHAR * pSsidLen, OUT UCHAR * pBssType, OUT USHORT * pBeaconPeriod, OUT UCHAR * pChannel, OUT UCHAR * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, OUT USHORT * pAtimWin, OUT USHORT * pCapabilityInfo, OUT UCHAR * pErp, OUT UCHAR * pDtimCount, OUT UCHAR * pDtimPeriod, OUT UCHAR * pBcastFlag, OUT UCHAR * pMessageToMe, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT UCHAR * pCkipFlag, OUT UCHAR * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, OUT ULONG * pRalinkIe, OUT UCHAR * pHtCapabilityLen, OUT UCHAR * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT UCHAR * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, OUT UCHAR * NewExtChannelOffset, /* Ht extension channel offset(above or below) */ +- OUT USHORT * LengthVIE, ++BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned long MsgLen, u8 MsgChannel, u8 *pAddr2, u8 *pBssid, char Ssid[], u8 * pSsidLen, u8 * pBssType, u16 * pBeaconPeriod, u8 * pChannel, u8 * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, u16 * pAtimWin, u16 * pCapabilityInfo, u8 * pErp, u8 * pDtimCount, u8 * pDtimPeriod, u8 * pBcastFlag, u8 * pMessageToMe, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, u8 * pCkipFlag, u8 * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, unsigned long * pRalinkIe, u8 * pHtCapabilityLen, u8 * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, u8 * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, u8 * NewExtChannelOffset, /* Ht extension channel offset(above or below) */ ++ u16 * LengthVIE, + OUT PNDIS_802_11_VARIABLE_IEs pVIE) + { +- UCHAR *Ptr; +- UCHAR TimLen; ++ u8 *Ptr; ++ u8 TimLen; + PFRAME_802_11 pFrame; + PEID_STRUCT pEid; +- UCHAR SubType; +- UCHAR Sanity; +- /*UCHAR ECWMin, ECWMax; */ ++ u8 SubType; ++ u8 Sanity; ++ /*u8 ECWMin, ECWMax; */ + /*MAC_CSR9_STRUC Csr9; */ +- ULONG Length = 0; ++ unsigned long Length = 0; + + /* For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel */ + /* 1. If the AP is 11n enabled, then check the control channel. */ + /* 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) */ +- UCHAR CtrlChannel = 0; ++ u8 CtrlChannel = 0; + + /* Add for 3 necessary EID field check */ + Sanity = 0; +@@ -287,7 +287,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + pFrame = (PFRAME_802_11) Msg; + + /* get subtype from header */ +- SubType = (UCHAR) pFrame->Hdr.FC.SubType; ++ SubType = (u8)pFrame->Hdr.FC.SubType; + + /* get Addr2 and BSSID from header */ + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +@@ -377,17 +377,17 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + sizeof(HT_CAPABILITY_IE)); + *pHtCapabilityLen = SIZE_HT_CAP_IE; /* Nnow we only support 26 bytes. */ + +- *(USHORT *) (&pHtCapability->HtCapInfo) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pHtCapability->HtCapInfo) = ++ cpu2le16(*(u16 *) + (&pHtCapability->HtCapInfo)); +- *(USHORT *) (&pHtCapability->ExtHtCapInfo) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pHtCapability->ExtHtCapInfo) = ++ cpu2le16(*(u16 *) + (&pHtCapability->ExtHtCapInfo)); + + { + *pPreNHtCapabilityLen = 0; /* Nnow we only support 26 bytes. */ + +- Ptr = (PUCHAR) pVIE; ++ Ptr = (u8 *)pVIE; + NdisMoveMemory(Ptr + *LengthVIE, + &pEid->Eid, + pEid->Len + 2); +@@ -410,15 +410,15 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + + CtrlChannel = AddHtInfo->ControlChan; + +- *(USHORT *) (&AddHtInfo->AddHtInfo2) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&AddHtInfo->AddHtInfo2) = ++ cpu2le16(*(u16 *) + (&AddHtInfo->AddHtInfo2)); +- *(USHORT *) (&AddHtInfo->AddHtInfo3) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&AddHtInfo->AddHtInfo3) = ++ cpu2le16(*(u16 *) + (&AddHtInfo->AddHtInfo3)); + + { +- Ptr = (PUCHAR) pVIE; ++ Ptr = (u8 *)pVIE; + NdisMoveMemory(Ptr + *LengthVIE, + &pEid->Eid, + pEid->Len + 2); +@@ -493,7 +493,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + + case IE_TIM: + if (INFRA_ON(pAd) && SubType == SUBTYPE_BEACON) { +- GetTimBit((PCHAR) pEid, pAd->StaActive.Aid, ++ GetTimBit((char *)pEid, pAd->StaActive.Aid, + &TimLen, pBcastFlag, pDtimCount, + pDtimPeriod, pMessageToMe); + } +@@ -565,14 +565,14 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + } + } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { + /* Copy to pVIE which will report to microsoft bssid list. */ +- Ptr = (PUCHAR) pVIE; ++ Ptr = (u8 *)pVIE; + NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, + pEid->Len + 2); + *LengthVIE += (pEid->Len + 2); + } else + if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) + && (pEid->Len == 24)) { +- PUCHAR ptr; ++ u8 *ptr; + int i; + + /* parsing EDCA parameters */ +@@ -586,7 +586,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + (pEid->Octet[6] & 0x80) ? 1 : 0; + ptr = &pEid->Octet[8]; + for (i = 0; i < 4; i++) { +- UCHAR aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ ++ u8 aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ + pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); /* b5 is ACM */ + pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; /* b0~3 is AIFSN */ + pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; /* b0~4 is Cwmin */ +@@ -653,7 +653,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + + case IE_ERP: + if (pEid->Len == 1) { +- *pErp = (UCHAR) pEid->Octet[0]; ++ *pErp = (u8)pEid->Octet[0]; + } + break; + +@@ -684,7 +684,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + /* There is no OUI for version anymore, check the group cipher OUI before copying */ + if (RTMPEqualMemory(pEid->Octet + 2, RSN_OUI, 3)) { + /* Copy to pVIE which will report to microsoft bssid list. */ +- Ptr = (PUCHAR) pVIE; ++ Ptr = (u8 *)pVIE; + NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, + pEid->Len + 2); + *LengthVIE += (pEid->Len + 2); +@@ -696,12 +696,12 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + } + + Length = Length + 2 + pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ +- pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); ++ pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); + } + + /* For some 11a AP. it did not have the channel EID, patch here */ + { +- UCHAR LatchRfChannel = MsgChannel; ++ u8 LatchRfChannel = MsgChannel; + if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0)) { + if (CtrlChannel != 0) + *pChannel = CtrlChannel; +@@ -731,11 +731,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * Msg, IN ULON + ========================================================================== + */ + BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT UCHAR * pBssType, +- OUT CHAR Ssid[], +- OUT UCHAR * pSsidLen, OUT UCHAR * pScanType) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 * pBssType, ++ char Ssid[], ++ u8 * pSsidLen, u8 * pScanType) + { + MLME_SCAN_REQ_STRUCT *Info; + +@@ -757,7 +757,7 @@ BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel) ++u8 ChannelSanity(IN PRTMP_ADAPTER pAd, u8 channel) + { + int i; + +@@ -780,9 +780,9 @@ UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + ========================================================================== + */ + BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, OUT USHORT * pReason) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, u16 * pReason) + { + PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + +@@ -804,12 +804,12 @@ BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT * pAlg, +- OUT USHORT * pSeq, +- OUT USHORT * pStatus, CHAR * pChlgText) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr, ++ u16 * pAlg, ++ u16 * pSeq, ++ u16 * pStatus, char * pChlgText) + { + PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + +@@ -854,10 +854,10 @@ BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG * pTimeout, OUT USHORT * pAlg) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr, ++ unsigned long * pTimeout, u16 * pAlg) + { + MLME_AUTH_REQ_STRUCT *pInfo; + +@@ -888,11 +888,11 @@ BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT * pCapabilityInfo, +- OUT ULONG * pTimeout, OUT USHORT * pListenIntv) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pApAddr, ++ u16 * pCapabilityInfo, ++ unsigned long * pTimeout, u16 * pListenIntv) + { + MLME_ASSOC_REQ_STRUCT *pInfo; + +@@ -917,9 +917,9 @@ BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, OUT USHORT * pReason) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, u16 * pReason) + { + PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + +@@ -949,7 +949,7 @@ BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, + NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) + { + NDIS_802_11_NETWORK_TYPE NetWorkType; +- UCHAR rate, i; ++ u8 rate, i; + + NetWorkType = Ndis802_11DS; + +@@ -1014,24 +1014,24 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) + */ + BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, IN MAC_TABLE_ENTRY * pEntry) ++ unsigned long MsgLen, ++ u8 MsgType, IN MAC_TABLE_ENTRY * pEntry) + { +- UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; ++ u8 mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; + BOOLEAN bReplayDiff = FALSE; + BOOLEAN bWPA2 = FALSE; + KEY_INFO EapolKeyInfo; +- UCHAR GroupKeyIndex = 0; ++ u8 GroupKeyIndex = 0; + + NdisZeroMemory(mic, sizeof(mic)); + NdisZeroMemory(digest, sizeof(digest)); + NdisZeroMemory(KEYDATA, sizeof(KEYDATA)); +- NdisZeroMemory((PUCHAR) & EapolKeyInfo, sizeof(EapolKeyInfo)); ++ NdisZeroMemory((u8 *)& EapolKeyInfo, sizeof(EapolKeyInfo)); + +- NdisMoveMemory((PUCHAR) & EapolKeyInfo, +- (PUCHAR) & pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ NdisMoveMemory((u8 *)& EapolKeyInfo, ++ (u8 *)& pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); + +- *((USHORT *) & EapolKeyInfo) = cpu2le16(*((USHORT *) & EapolKeyInfo)); ++ *((u16 *) & EapolKeyInfo) = cpu2le16(*((u16 *) & EapolKeyInfo)); + + /* Choose WPA2 or not */ + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) +@@ -1049,7 +1049,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + { + /* First validate replay counter, only accept message with larger replay counter. */ + /* Let equal pass, some AP start with all zero replay counter */ +- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY]; ++ u8 ZeroReplay[LEN_KEY_DESC_REPLAY]; + + NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY); + if ((RTMPCompareMemory +@@ -1096,7 +1096,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + } + /* 2. Verify MIC except Pairwise Msg1 */ + if (MsgType != EAPOL_PAIR_MSG_1) { +- UCHAR rcvd_mic[LEN_KEY_DESC_MIC]; ++ u8 rcvd_mic[LEN_KEY_DESC_MIC]; + + /* Record the received MIC for check later */ + NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, +@@ -1105,11 +1105,11 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + + if (EapolKeyInfo.KeyDescVer == DESC_TYPE_TKIP) /* TKIP */ + { +- HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, ++ HMAC_MD5(pEntry->PTK, LEN_EAP_MICK, (u8 *)pMsg, + MsgLen, mic, MD5_DIGEST_SIZE); + } else if (EapolKeyInfo.KeyDescVer == DESC_TYPE_AES) /* AES */ + { +- HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (PUCHAR) pMsg, ++ HMAC_SHA1(pEntry->PTK, LEN_EAP_MICK, (u8 *)pMsg, + MsgLen, digest, SHA1_DIGEST_SIZE); + NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC); + } +@@ -1142,20 +1142,20 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + /* 2. Extract the context of the Key Data field if it exist. */ + /* The field in pairwise_msg_2_WPA1(WPA2) & pairwise_msg_3_WPA1 is clear. */ + /* The field in group_msg_1_WPA1(WPA2) & pairwise_msg_3_WPA2 is encrypted. */ +- if (CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyDataLen) > 0) { ++ if (CONV_ARRARY_TO_u16(pMsg->KeyDesc.KeyDataLen) > 0) { + /* Decrypt this field */ + if ((MsgType == EAPOL_PAIR_MSG_3 && bWPA2) + || (MsgType == EAPOL_GROUP_MSG_1)) { + if ((EapolKeyInfo.KeyDescVer == DESC_TYPE_AES)) { + /* AES */ + AES_GTK_KEY_UNWRAP(&pEntry->PTK[16], KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg-> ++ CONV_ARRARY_TO_u16(pMsg-> + KeyDesc. + KeyDataLen), + pMsg->KeyDesc.KeyData); + } else { +- INT i; +- UCHAR Key[32]; ++ int i; ++ u8 Key[32]; + /* Decrypt TKIP GTK */ + /* Construct 32 bytes RC4 Key */ + NdisMoveMemory(Key, pMsg->KeyDesc.KeyIv, 16); +@@ -1169,7 +1169,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + /* Decrypt GTK. Becareful, there is no ICV to check the result is correct or not */ + ARCFOUR_DECRYPT(&pAd->PrivateInfo.WEPCONTEXT, + KEYDATA, pMsg->KeyDesc.KeyData, +- CONV_ARRARY_TO_UINT16(pMsg-> ++ CONV_ARRARY_TO_u16(pMsg-> + KeyDesc. + KeyDataLen)); + } +@@ -1180,7 +1180,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + } else if ((MsgType == EAPOL_PAIR_MSG_2) + || (MsgType == EAPOL_PAIR_MSG_3 && !bWPA2)) { + NdisMoveMemory(KEYDATA, pMsg->KeyDesc.KeyData, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc. ++ CONV_ARRARY_TO_u16(pMsg->KeyDesc. + KeyDataLen)); + } else { + +@@ -1192,7 +1192,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + /* 2. verify KDE format for pairwise_msg_3_WPA2, group_msg_1_WPA2 */ + /* 3. update shared key for pairwise_msg_3_WPA2, group_msg_1_WPA1(WPA2) */ + if (!RTMPParseEapolKeyData(pAd, KEYDATA, +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc. ++ CONV_ARRARY_TO_u16(pMsg->KeyDesc. + KeyDataLen), + GroupKeyIndex, MsgType, bWPA2, + pEntry)) { +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index c29e087..2d7f36a 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -57,41 +57,41 @@ + #define BG_BAND_REGION_31_SIZE 14 + + /* 5 Ghz channel plan index in the TxPower arrays. */ +-UCHAR A_BAND_REGION_0_CHANNEL_LIST[] = ++u8 A_BAND_REGION_0_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165 }; +-UCHAR A_BAND_REGION_1_CHANNEL_LIST[] = ++u8 A_BAND_REGION_1_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, + 132, 136, 140 }; +-UCHAR A_BAND_REGION_2_CHANNEL_LIST[] = { 36, 40, 44, 48, 52, 56, 60, 64 }; +-UCHAR A_BAND_REGION_3_CHANNEL_LIST[] = { 52, 56, 60, 64, 149, 153, 157, 161 }; +-UCHAR A_BAND_REGION_4_CHANNEL_LIST[] = { 149, 153, 157, 161, 165 }; +-UCHAR A_BAND_REGION_5_CHANNEL_LIST[] = { 149, 153, 157, 161 }; +-UCHAR A_BAND_REGION_6_CHANNEL_LIST[] = { 36, 40, 44, 48 }; +-UCHAR A_BAND_REGION_7_CHANNEL_LIST[] = ++u8 A_BAND_REGION_2_CHANNEL_LIST[] = { 36, 40, 44, 48, 52, 56, 60, 64 }; ++u8 A_BAND_REGION_3_CHANNEL_LIST[] = { 52, 56, 60, 64, 149, 153, 157, 161 }; ++u8 A_BAND_REGION_4_CHANNEL_LIST[] = { 149, 153, 157, 161, 165 }; ++u8 A_BAND_REGION_5_CHANNEL_LIST[] = { 149, 153, 157, 161 }; ++u8 A_BAND_REGION_6_CHANNEL_LIST[] = { 36, 40, 44, 48 }; ++u8 A_BAND_REGION_7_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, + 132, 136, 140, 149, 153, 157, 161, 165, 169, 173 }; +-UCHAR A_BAND_REGION_8_CHANNEL_LIST[] = { 52, 56, 60, 64 }; +-UCHAR A_BAND_REGION_9_CHANNEL_LIST[] = ++u8 A_BAND_REGION_8_CHANNEL_LIST[] = { 52, 56, 60, 64 }; ++u8 A_BAND_REGION_9_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, + 149, 153, 157, 161, 165 }; +-UCHAR A_BAND_REGION_10_CHANNEL_LIST[] = ++u8 A_BAND_REGION_10_CHANNEL_LIST[] = + { 36, 40, 44, 48, 149, 153, 157, 161, 165 }; +-UCHAR A_BAND_REGION_11_CHANNEL_LIST[] = ++u8 A_BAND_REGION_11_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, + 157, 161 }; +-UCHAR A_BAND_REGION_12_CHANNEL_LIST[] = ++u8 A_BAND_REGION_12_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, + 132, 136, 140 }; +-UCHAR A_BAND_REGION_13_CHANNEL_LIST[] = ++u8 A_BAND_REGION_13_CHANNEL_LIST[] = + { 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, + 149, 153, 157, 161 }; +-UCHAR A_BAND_REGION_14_CHANNEL_LIST[] = ++u8 A_BAND_REGION_14_CHANNEL_LIST[] = + { 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, + 153, 157, 161, 165 }; +-UCHAR A_BAND_REGION_15_CHANNEL_LIST[] = { 149, 153, 157, 161, 165, 169, 173 }; ++u8 A_BAND_REGION_15_CHANNEL_LIST[] = { 149, 153, 157, 161, 165, 169, 173 }; + + /*BaSizeArray follows the 802.11n definition as MaxRxFactor. 2^(13+factor) bytes. When factor =0, it's about Ba buffer size =8. */ +-UCHAR BaSizeArray[4] = { 8, 16, 32, 64 }; ++u8 BaSizeArray[4] = { 8, 16, 32, 64 }; + + /* + ========================================================================== +@@ -105,10 +105,10 @@ UCHAR BaSizeArray[4] = { 8, 16, 32, 64 }; + + ========================================================================== + */ +-VOID BuildChannelList(IN PRTMP_ADAPTER pAd) ++void BuildChannelList(IN PRTMP_ADAPTER pAd) + { +- UCHAR i, j, index = 0, num = 0; +- PUCHAR pChannelList = NULL; ++ u8 i, j, index = 0, num = 0; ++ u8 *pChannelList = NULL; + + NdisZeroMemory(pAd->ChannelList, + MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); +@@ -200,99 +200,99 @@ VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + case REGION_0_A_BAND: + num = + sizeof(A_BAND_REGION_0_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_0_CHANNEL_LIST; + break; + case REGION_1_A_BAND: + num = + sizeof(A_BAND_REGION_1_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_1_CHANNEL_LIST; + break; + case REGION_2_A_BAND: + num = + sizeof(A_BAND_REGION_2_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_2_CHANNEL_LIST; + break; + case REGION_3_A_BAND: + num = + sizeof(A_BAND_REGION_3_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_3_CHANNEL_LIST; + break; + case REGION_4_A_BAND: + num = + sizeof(A_BAND_REGION_4_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_4_CHANNEL_LIST; + break; + case REGION_5_A_BAND: + num = + sizeof(A_BAND_REGION_5_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_5_CHANNEL_LIST; + break; + case REGION_6_A_BAND: + num = + sizeof(A_BAND_REGION_6_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_6_CHANNEL_LIST; + break; + case REGION_7_A_BAND: + num = + sizeof(A_BAND_REGION_7_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_7_CHANNEL_LIST; + break; + case REGION_8_A_BAND: + num = + sizeof(A_BAND_REGION_8_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_8_CHANNEL_LIST; + break; + case REGION_9_A_BAND: + num = + sizeof(A_BAND_REGION_9_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_9_CHANNEL_LIST; + break; + + case REGION_10_A_BAND: + num = + sizeof(A_BAND_REGION_10_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_10_CHANNEL_LIST; + break; + + case REGION_11_A_BAND: + num = + sizeof(A_BAND_REGION_11_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_11_CHANNEL_LIST; + break; + case REGION_12_A_BAND: + num = + sizeof(A_BAND_REGION_12_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_12_CHANNEL_LIST; + break; + case REGION_13_A_BAND: + num = + sizeof(A_BAND_REGION_13_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_13_CHANNEL_LIST; + break; + case REGION_14_A_BAND: + num = + sizeof(A_BAND_REGION_14_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_14_CHANNEL_LIST; + break; + case REGION_15_A_BAND: + num = + sizeof(A_BAND_REGION_15_CHANNEL_LIST) / +- sizeof(UCHAR); ++ sizeof(u8); + pChannelList = A_BAND_REGION_15_CHANNEL_LIST; + break; + default: /* Error. should never happen */ +@@ -303,7 +303,7 @@ VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + } + + if (num != 0) { +- UCHAR RadarCh[15] = ++ u8 RadarCh[15] = + { 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, + 128, 132, 136, 140 }; + for (i = 0; i < num; i++) { +@@ -359,7 +359,7 @@ VOID BuildChannelList(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-UCHAR FirstChannel(IN PRTMP_ADAPTER pAd) ++u8 FirstChannel(IN PRTMP_ADAPTER pAd) + { + return pAd->ChannelList[0].Channel; + } +@@ -375,10 +375,10 @@ UCHAR FirstChannel(IN PRTMP_ADAPTER pAd) + return 0 if no more next channel + ========================================================================== + */ +-UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) ++u8 NextChannel(IN PRTMP_ADAPTER pAd, u8 channel) + { + int i; +- UCHAR next_channel = 0; ++ u8 next_channel = 0; + + for (i = 0; i < (pAd->ChannelListNum - 1); i++) + if (channel == pAd->ChannelList[i].Channel) { +@@ -408,8 +408,8 @@ UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + the minimum value or next lower value. + ========================================================================== + */ +-VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit) ++void ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++ u8 AironetCellPowerLimit) + { + /*valud 0xFF means that hasn't found power limit information */ + /*from the AP's Beacon/Probe response. */ +@@ -435,9 +435,9 @@ VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, + + } + +-CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber) ++char ConvertToRssi(IN PRTMP_ADAPTER pAd, char Rssi, u8 RssiNumber) + { +- UCHAR RssiOffset, LNAGain; ++ u8 RssiOffset, LNAGain; + + /* Rssi equals to zero should be an invalid value */ + if (Rssi == 0) +@@ -469,16 +469,16 @@ CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber) + Scan next channel + ========================================================================== + */ +-VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) ++void ScanNextChannel(IN PRTMP_ADAPTER pAd) + { + HEADER_802_11 Hdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; +- USHORT Status; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen = 0; ++ u8 SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; ++ u16 Status; + PHEADER_802_11 pHdr80211; +- UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; ++ u32 ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; + + { + if (MONITOR_ON(pAd)) +@@ -520,7 +520,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + && (INFRA_ON(pAd))) { + NStatus = + MlmeAllocateMemory(pAd, +- (PVOID) & pOutBuffer); ++ (void *)& pOutBuffer); + if (NStatus == NDIS_STATUS_SUCCESS) { + pHdr80211 = (PHEADER_802_11) pOutBuffer; + MgtMacHeaderInit(pAd, pHdr80211, +@@ -650,7 +650,7 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.SupRate, END_OF_ARGS); + + if (pAd->CommonCfg.ExtRateLen) { +- ULONG Tmp; ++ unsigned long Tmp; + MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, + 1, &ExtRateIe, + 1, &pAd->CommonCfg.ExtRateLen, +@@ -661,9 +661,9 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + } + + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { +- ULONG Tmp; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ unsigned long Tmp; ++ u8 HtLen; ++ u8 BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; + + if (pAd->bBroadComHT == TRUE) { + HtLen = +@@ -700,10 +700,10 @@ VOID ScanNextChannel(IN PRTMP_ADAPTER pAd) + } + } + +-VOID MgtProbReqMacHeaderInit(IN PRTMP_ADAPTER pAd, ++void MgtProbReqMacHeaderInit(IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid) ++ u8 SubType, ++ u8 ToDs, u8 *pDA, u8 *pBssid) + { + NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); + +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index 97f0543..ab00a0c 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -42,7 +42,7 @@ + ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) + #define ROR32( A, n ) ROL32( (A), 32-(n) ) + +-UINT Tkip_Sbox_Lower[256] = { ++u32 Tkip_Sbox_Lower[256] = { + 0xA5, 0x84, 0x99, 0x8D, 0x0D, 0xBD, 0xB1, 0x54, + 0x50, 0x03, 0xA9, 0x7D, 0x19, 0x62, 0xE6, 0x9A, + 0x45, 0x9D, 0x40, 0x87, 0x15, 0xEB, 0xC9, 0x0B, +@@ -77,7 +77,7 @@ UINT Tkip_Sbox_Lower[256] = { + 0xC3, 0xB0, 0x77, 0x11, 0xCB, 0xFC, 0xD6, 0x3A + }; + +-UINT Tkip_Sbox_Upper[256] = { ++u32 Tkip_Sbox_Upper[256] = { + 0xC6, 0xF8, 0xEE, 0xF6, 0xFF, 0xD6, 0xDE, 0x91, + 0x60, 0x02, 0xCE, 0x56, 0xE7, 0xB5, 0x4D, 0xEC, + 0x8F, 0x1F, 0x89, 0xFA, 0xEF, 0xB2, 0x8E, 0xFB, +@@ -118,31 +118,31 @@ UINT Tkip_Sbox_Upper[256] = { + typedef struct PACKED _IV_CONTROL_ { + union PACKED { + struct PACKED { +- UCHAR rc0; +- UCHAR rc1; +- UCHAR rc2; ++ u8 rc0; ++ u8 rc1; ++ u8 rc2; + + union PACKED { + struct PACKED { +- UCHAR Rsvd:5; +- UCHAR ExtIV:1; +- UCHAR KeyID:2; ++ u8 Rsvd:5; ++ u8 ExtIV:1; ++ u8 KeyID:2; + } field; +- UCHAR Byte; ++ u8 Byte; + } CONTROL; + } field; + +- ULONG word; ++ unsigned long word; + } IV16; + +- ULONG IV32; ++ unsigned long IV32; + } TKIP_IV, *PTKIP_IV; + + /* + ======================================================================== + + Routine Description: +- Convert from UCHAR[] to ULONG in a portable way ++ Convert from u8[] to unsigned long in a portable way + + Arguments: + pMICKey pointer to MIC Key +@@ -154,10 +154,10 @@ typedef struct PACKED _IV_CONTROL_ { + + ======================================================================== + */ +-ULONG RTMPTkipGetUInt32(IN PUCHAR pMICKey) ++unsigned long RTMPTkipGetUInt32(u8 *pMICKey) + { +- ULONG res = 0; +- INT i; ++ unsigned long res = 0; ++ int i; + + for (i = 0; i < 4; i++) { + res |= (*pMICKey++) << (8 * i); +@@ -170,10 +170,10 @@ ULONG RTMPTkipGetUInt32(IN PUCHAR pMICKey) + ======================================================================== + + Routine Description: +- Convert from ULONG to UCHAR[] in a portable way ++ Convert from unsigned long to u8[] in a portable way + + Arguments: +- pDst pointer to destination for convert ULONG to UCHAR[] ++ pDst pointer to destination for convert unsigned long to u8[] + val the value for convert + + Return Value: +@@ -185,12 +185,12 @@ ULONG RTMPTkipGetUInt32(IN PUCHAR pMICKey) + + ======================================================================== + */ +-VOID RTMPTkipPutUInt32(IN OUT PUCHAR pDst, IN ULONG val) ++void RTMPTkipPutUInt32(IN u8 *pDst, unsigned long val) + { +- INT i; ++ int i; + + for (i = 0; i < 4; i++) { +- *pDst++ = (UCHAR) (val & 0xff); ++ *pDst++ = (u8)(val & 0xff); + val >>= 8; + } + } +@@ -214,7 +214,7 @@ VOID RTMPTkipPutUInt32(IN OUT PUCHAR pDst, IN ULONG val) + + ======================================================================== + */ +-VOID RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pMICKey) ++void RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, u8 *pMICKey) + { + /* Set the key */ + pTkip->K0 = RTMPTkipGetUInt32(pMICKey); +@@ -245,7 +245,7 @@ VOID RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pMICKey) + + ======================================================================== + */ +-VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) ++void RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, u8 uChar) + { + /* Append the byte to our word-sized buffer */ + pTkip->M |= (uChar << (8 * pTkip->nBytesInM)); +@@ -289,7 +289,7 @@ VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar) + + ======================================================================== + */ +-VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes) ++void RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, u8 *pSrc, u32 nBytes) + { + /* This is simple */ + while (nBytes > 0) { +@@ -316,7 +316,7 @@ VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes) + the MIC Value is store in pAd->PrivateInfo.MIC + ======================================================================== + */ +-VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) ++void RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) + { + /* Append the minimum padding */ + RTMPTkipAppendByte(pTkip, 0x5a); +@@ -355,12 +355,12 @@ VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) + + ======================================================================== + */ +-VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, OUT PULONG pIV16, OUT PULONG pIV32) ++void RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pKey, ++ u8 KeyId, ++ u8 *pTA, ++ u8 *pMICKey, ++ u8 *pTSC, unsigned long *pIV16, unsigned long *pIV32) + { + TKIP_IV tkipIv; + +@@ -371,7 +371,7 @@ VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, + tkipIv.IV16.field.rc2 = *pTSC; + tkipIv.IV16.field.CONTROL.field.ExtIV = 1; /* 0: non-extended IV, 1: an extended IV */ + tkipIv.IV16.field.CONTROL.field.KeyID = KeyId; +-/* tkipIv.IV32 = *(PULONG)(pTSC + 2); */ ++/* tkipIv.IV32 = *(unsigned long *)(pTSC + 2); */ + NdisMoveMemory(&tkipIv.IV32, (pTSC + 2), 4); /* Copy IV */ + + *pIV16 = tkipIv.IV16.word; +@@ -399,12 +399,12 @@ VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, IN UCHAR UserPriority, IN PUCHAR pMICKey) ++void RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pKey, ++ u8 *pDA, ++ u8 *pSA, u8 UserPriority, u8 *pMICKey) + { +- ULONG Priority = UserPriority; ++ unsigned long Priority = UserPriority; + + /* Init MIC value calculation */ + RTMPTkipSetMICKey(&pAd->PrivateInfo.Tx, pMICKey); +@@ -413,7 +413,7 @@ VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, + /* SA */ + RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSA, MAC_ADDR_LEN); + /* Priority + 3 bytes of 0 */ +- RTMPTkipAppend(&pAd->PrivateInfo.Tx, (PUCHAR) & Priority, 4); ++ RTMPTkipAppend(&pAd->PrivateInfo.Tx, (u8 *)& Priority, 4); + } + + /* +@@ -441,14 +441,14 @@ VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, IN UINT Len) ++ u8 *pSrc, ++ u8 *pDA, ++ u8 *pSA, ++ u8 *pMICKey, ++ u8 UserPriority, u32 Len) + { +- UCHAR OldMic[8]; +- ULONG Priority = UserPriority; ++ u8 OldMic[8]; ++ unsigned long Priority = UserPriority; + + /* Init MIC value calculation */ + RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey); +@@ -457,7 +457,7 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + /* SA */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSA, MAC_ADDR_LEN); + /* Priority + 3 bytes of 0 */ +- RTMPTkipAppend(&pAd->PrivateInfo.Rx, (PUCHAR) & Priority, 4); ++ RTMPTkipAppend(&pAd->PrivateInfo.Rx, (u8 *)& Priority, 4); + + /* Calculate MIC value from plain text data */ + RTMPTkipAppend(&pAd->PrivateInfo.Rx, pSrc, Len); +@@ -500,17 +500,17 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, IN UCHAR apidx) ++ u8 *pEncap, ++ IN PCIPHER_KEY pKey, u8 apidx) + { + PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- PUCHAR pSrc; +- UCHAR UserPriority; +- UCHAR vlan_offset = 0; ++ u8 *pSrcBufVA; ++ u32 SrcBufLen; ++ u8 *pSrc; ++ u8 UserPriority; ++ u8 vlan_offset = 0; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +@@ -555,11 +555,11 @@ VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + /* is synthesized from two 256 entry byte wide tables. */ + /************************************************************/ + +-UINT tkip_sbox(UINT index) ++u32 tkip_sbox(u32 index) + { +- UINT index_low; +- UINT index_high; +- UINT left, right; ++ u32 index_low; ++ u32 index_high; ++ u32 left, right; + + index_low = (index % 256); + index_high = ((index >> 8) % 256); +@@ -571,7 +571,7 @@ UINT tkip_sbox(UINT index) + return (left ^ right); + } + +-UINT rotr1(UINT a) ++u32 rotr1(u32 a) + { + unsigned int b; + +@@ -584,24 +584,24 @@ UINT rotr1(UINT a) + return b; + } + +-VOID RTMPTkipMixKey(UCHAR * key, UCHAR * ta, ULONG pnl, /* Least significant 16 bits of PN */ +- ULONG pnh, /* Most significant 32 bits of PN */ +- UCHAR * rc4key, UINT * p1k) ++void RTMPTkipMixKey(u8 * key, u8 * ta, unsigned long pnl, /* Least significant 16 bits of PN */ ++ unsigned long pnh, /* Most significant 32 bits of PN */ ++ u8 * rc4key, u32 * p1k) + { + +- UINT tsc0; +- UINT tsc1; +- UINT tsc2; ++ u32 tsc0; ++ u32 tsc1; ++ u32 tsc2; + +- UINT ppk0; +- UINT ppk1; +- UINT ppk2; +- UINT ppk3; +- UINT ppk4; +- UINT ppk5; ++ u32 ppk0; ++ u32 ppk1; ++ u32 ppk2; ++ u32 ppk3; ++ u32 ppk4; ++ u32 ppk5; + +- INT i; +- INT j; ++ int i; ++ int j; + + tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */ + tsc1 = (unsigned int)(pnh % 65536); +@@ -610,9 +610,9 @@ VOID RTMPTkipMixKey(UCHAR * key, UCHAR * ta, ULONG pnl, /* Least significant 16 + /* Phase 1, step 1 */ + p1k[0] = tsc1; + p1k[1] = tsc0; +- p1k[2] = (UINT) (ta[0] + (ta[1] * 256)); +- p1k[3] = (UINT) (ta[2] + (ta[3] * 256)); +- p1k[4] = (UINT) (ta[4] + (ta[5] * 256)); ++ p1k[2] = (u32)(ta[0] + (ta[1] * 256)); ++ p1k[3] = (u32)(ta[2] + (ta[3] * 256)); ++ p1k[4] = (u32)(ta[4] + (ta[5] * 256)); + + /* Phase 1, step 2 */ + for (i = 0; i < 8; i++) { +@@ -699,43 +699,43 @@ VOID RTMPTkipMixKey(UCHAR * key, UCHAR * ta, ULONG pnl, /* Least significant 16 + /* FALSE: Decrypt Error! */ + /* */ + BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, IN PCIPHER_KEY pWpaKey) ++ u8 *pData, ++ unsigned long DataByteCnt, ++ u8 UserPriority, IN PCIPHER_KEY pWpaKey) + { +- UCHAR KeyID; +- UINT HeaderLen; +- UCHAR fc0; +- UCHAR fc1; +- USHORT fc; +- UINT frame_type; +- UINT frame_subtype; +- UINT from_ds; +- UINT to_ds; +- INT a4_exists; +- INT qc_exists; +- USHORT duration; +- USHORT seq_control; +- USHORT qos_control; +- UCHAR TA[MAC_ADDR_LEN]; +- UCHAR DA[MAC_ADDR_LEN]; +- UCHAR SA[MAC_ADDR_LEN]; +- UCHAR RC4Key[16]; +- UINT p1k[5]; /*for mix_key; */ +- ULONG pnl; /* Least significant 16 bits of PN */ +- ULONG pnh; /* Most significant 32 bits of PN */ +- UINT num_blocks; +- UINT payload_remainder; ++ u8 KeyID; ++ u32 HeaderLen; ++ u8 fc0; ++ u8 fc1; ++ u16 fc; ++ u32 frame_type; ++ u32 frame_subtype; ++ u32 from_ds; ++ u32 to_ds; ++ int a4_exists; ++ int qc_exists; ++ u16 duration; ++ u16 seq_control; ++ u16 qos_control; ++ u8 TA[MAC_ADDR_LEN]; ++ u8 DA[MAC_ADDR_LEN]; ++ u8 SA[MAC_ADDR_LEN]; ++ u8 RC4Key[16]; ++ u32 p1k[5]; /*for mix_key; */ ++ unsigned long pnl; /* Least significant 16 bits of PN */ ++ unsigned long pnh; /* Most significant 32 bits of PN */ ++ u32 num_blocks; ++ u32 payload_remainder; + ARCFOURCONTEXT ArcFourContext; +- UINT crc32 = 0; +- UINT trailfcs = 0; +- UCHAR MIC[8]; +- UCHAR TrailMIC[8]; ++ u32 crc32 = 0; ++ u32 trailfcs = 0; ++ u8 MIC[8]; ++ u8 TrailMIC[8]; + + fc0 = *pData; + fc1 = *(pData + 1); + +- fc = *((PUSHORT) pData); ++ fc = *((u16 *)pData); + + frame_type = ((fc0 >> 2) & 0x03); + frame_subtype = ((fc0 >> 4) & 0x0f); +@@ -753,7 +753,7 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + if (a4_exists) + HeaderLen += 6; + +- KeyID = *((PUCHAR) (pData + HeaderLen + 3)); ++ KeyID = *((u8 *)(pData + HeaderLen + 3)); + KeyID = KeyID >> 6; + + if (pWpaKey[KeyID].KeyLen == 0) { +@@ -763,15 +763,15 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + return FALSE; + } + +- duration = *((PUSHORT) (pData + 2)); ++ duration = *((u16 *)(pData + 2)); + +- seq_control = *((PUSHORT) (pData + 22)); ++ seq_control = *((u16 *)(pData + 22)); + + if (qc_exists) { + if (a4_exists) { +- qos_control = *((PUSHORT) (pData + 30)); ++ qos_control = *((u16 *)(pData + 30)); + } else { +- qos_control = *((PUSHORT) (pData + 24)); ++ qos_control = *((u16 *)(pData + 24)); + } + } + +@@ -797,7 +797,7 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + payload_remainder = (DataByteCnt - 16) % 16; + + pnl = (*(pData + HeaderLen)) * 256 + *(pData + HeaderLen + 2); +- pnh = *((PULONG) (pData + HeaderLen + 4)); ++ pnh = *((unsigned long *)(pData + HeaderLen + 4)); + pnh = cpu2le32(pnh); + RTMPTkipMixKey(pWpaKey[KeyID].Key, TA, pnl, pnh, RC4Key, p1k); + +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +index db40139..05a9214 100644 +--- a/drivers/staging/rt2860/common/cmm_wep.c ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -37,7 +37,7 @@ + + #include "../rt_config.h" + +-UINT FCSTAB_32[256] = { ++u32 FCSTAB_32[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, +@@ -105,7 +105,7 @@ UINT FCSTAB_32[256] = { + }; + + /* +-UCHAR WEPKEY[] = { ++u8 WEPKEY[] = { + //IV + 0x00, 0x11, 0x22, + //WEP KEY +@@ -135,12 +135,12 @@ UCHAR WEPKEY[] = { + + ======================================================================== + */ +-VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, IN UCHAR KeyLen, IN OUT PUCHAR pDest) ++void RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pKey, ++ u8 KeyId, u8 KeyLen, IN u8 *pDest) + { +- UINT i; +- UCHAR WEPKEY[] = { ++ u32 i; ++ u8 WEPKEY[] = { + /*IV */ + 0x00, 0x11, 0x22, + /*WEP KEY */ +@@ -184,8 +184,8 @@ VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPEncryptData(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, IN PUCHAR pDest, IN UINT Len) ++void RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++ u8 *pSrc, u8 *pDest, u32 Len) + { + pAd->PrivateInfo.FCSCRC32 = + RTMP_CALC_FCS32(pAd->PrivateInfo.FCSCRC32, pSrc, Len); +@@ -212,21 +212,21 @@ VOID RTMPEncryptData(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, IN PCIPHER_KEY pGroupKey) ++ u8 *pData, ++ unsigned long DataByteCnt, IN PCIPHER_KEY pGroupKey) + { +- UINT trailfcs; +- UINT crc32; +- UCHAR KeyIdx; +- UCHAR WEPKEY[] = { ++ u32 trailfcs; ++ u32 crc32; ++ u8 KeyIdx; ++ u8 WEPKEY[] = { + /*IV */ + 0x00, 0x11, 0x22, + /*WEP KEY */ + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, + 0xAA, 0xBB, 0xCC + }; +- UCHAR *pPayload = (UCHAR *) pData + LENGTH_802_11; +- ULONG payload_len = DataByteCnt - LENGTH_802_11; ++ u8 *pPayload = (u8 *) pData + LENGTH_802_11; ++ unsigned long payload_len = DataByteCnt - LENGTH_802_11; + + NdisMoveMemory(WEPKEY, pPayload, 3); /*Get WEP IV */ + +@@ -271,19 +271,19 @@ BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, IN PUCHAR pKey, IN UINT KeyLen) ++void ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, u8 *pKey, u32 KeyLen) + { +- UCHAR t, u; +- UINT keyindex; +- UINT stateindex; +- PUCHAR state; +- UINT counter; ++ u8 t, u; ++ u32 keyindex; ++ u32 stateindex; ++ u8 *state; ++ u32 counter; + + state = Ctx->STATE; + Ctx->X = 0; + Ctx->Y = 0; + for (counter = 0; counter < 256; counter++) +- state[counter] = (UCHAR) counter; ++ state[counter] = (u8)counter; + keyindex = 0; + stateindex = 0; + for (counter = 0; counter < 256; counter++) { +@@ -307,18 +307,18 @@ VOID ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, IN PUCHAR pKey, IN UINT KeyLen) + Ctx Pointer to ARCFOUR CONTEXT (SBOX) + + Return Value: +- UCHAR - the value of the ARCFOUR CONTEXT (S-BOX) ++ u8 - the value of the ARCFOUR CONTEXT (S-BOX) + + Note: + + ======================================================================== + */ +-UCHAR ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) ++u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) + { +- UINT x; +- UINT y; +- UCHAR sx, sy; +- PUCHAR state; ++ u32 x; ++ u32 y; ++ u8 sx, sy; ++ u8 *state; + + state = Ctx->STATE; + x = (Ctx->X + 1) & 0xff; +@@ -353,10 +353,10 @@ UCHAR ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) + + ======================================================================== + */ +-VOID ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) ++void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len) + { +- UINT i; ++ u32 i; + + for (i = 0; i < Len; i++) + pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +@@ -383,10 +383,10 @@ VOID ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, + + ======================================================================== + */ +-VOID ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) ++void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len) + { +- UINT i; ++ u32 i; + + for (i = 0; i < Len; i++) + pDest[i] = pSrc[i] ^ ARCFOUR_BYTE(Ctx); +@@ -407,10 +407,10 @@ VOID ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + ======================================================================== + */ + +-VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len) ++void WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len) + { +- UINT i; ++ u32 i; + /*discard first 256 bytes */ + for (i = 0; i < 256; i++) + ARCFOUR_BYTE(Ctx); +@@ -431,7 +431,7 @@ VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + Len the length of the data + + Return Value: +- UINT - FCS 32 bits ++ u32 - FCS 32 bits + + IRQL = DISPATCH_LEVEL + +@@ -439,7 +439,7 @@ VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + + ======================================================================== + */ +-UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len) ++u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len) + { + while (Len--) + Fcs = (((Fcs) >> 8) ^ FCSTAB_32[((Fcs) ^ (*Cp++)) & 0xff]); +@@ -463,11 +463,11 @@ UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len) + + ======================================================================== + */ +-VOID RTMPSetICV(IN PRTMP_ADAPTER pAd, IN PUCHAR pDest) ++void RTMPSetICV(IN PRTMP_ADAPTER pAd, u8 *pDest) + { + pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ + pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); + + ARCFOUR_ENCRYPT(&pAd->PrivateInfo.WEPCONTEXT, pDest, +- (PUCHAR) & pAd->PrivateInfo.FCSCRC32, 4); ++ (u8 *)& pAd->PrivateInfo.FCSCRC32, 4); + } +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 6940d77..3fce5a7 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -37,47 +37,47 @@ + */ + #include "../rt_config.h" + /* WPA OUI */ +-UCHAR OUI_WPA_NONE_AKM[4] = { 0x00, 0x50, 0xF2, 0x00 }; +-UCHAR OUI_WPA_VERSION[4] = { 0x00, 0x50, 0xF2, 0x01 }; +-UCHAR OUI_WPA_WEP40[4] = { 0x00, 0x50, 0xF2, 0x01 }; +-UCHAR OUI_WPA_TKIP[4] = { 0x00, 0x50, 0xF2, 0x02 }; +-UCHAR OUI_WPA_CCMP[4] = { 0x00, 0x50, 0xF2, 0x04 }; +-UCHAR OUI_WPA_WEP104[4] = { 0x00, 0x50, 0xF2, 0x05 }; +-UCHAR OUI_WPA_8021X_AKM[4] = { 0x00, 0x50, 0xF2, 0x01 }; +-UCHAR OUI_WPA_PSK_AKM[4] = { 0x00, 0x50, 0xF2, 0x02 }; ++u8 OUI_WPA_NONE_AKM[4] = { 0x00, 0x50, 0xF2, 0x00 }; ++u8 OUI_WPA_VERSION[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++u8 OUI_WPA_WEP40[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++u8 OUI_WPA_TKIP[4] = { 0x00, 0x50, 0xF2, 0x02 }; ++u8 OUI_WPA_CCMP[4] = { 0x00, 0x50, 0xF2, 0x04 }; ++u8 OUI_WPA_WEP104[4] = { 0x00, 0x50, 0xF2, 0x05 }; ++u8 OUI_WPA_8021X_AKM[4] = { 0x00, 0x50, 0xF2, 0x01 }; ++u8 OUI_WPA_PSK_AKM[4] = { 0x00, 0x50, 0xF2, 0x02 }; + + /* WPA2 OUI */ +-UCHAR OUI_WPA2_WEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 }; +-UCHAR OUI_WPA2_TKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 }; +-UCHAR OUI_WPA2_CCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 }; +-UCHAR OUI_WPA2_8021X_AKM[4] = { 0x00, 0x0F, 0xAC, 0x01 }; +-UCHAR OUI_WPA2_PSK_AKM[4] = { 0x00, 0x0F, 0xAC, 0x02 }; +-UCHAR OUI_WPA2_WEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 }; +- +-static VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR * GTK, +- IN UCHAR * RSNIE, +- IN UCHAR RSNIE_LEN, OUT PEAPOL_PACKET pMsg); +- +-static VOID CalculateMIC(IN UCHAR KeyDescVer, +- IN UCHAR * PTK, OUT PEAPOL_PACKET pMsg); +- +-static VOID WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); +- +-static VOID WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, ++u8 OUI_WPA2_WEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 }; ++u8 OUI_WPA2_TKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 }; ++u8 OUI_WPA2_CCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 }; ++u8 OUI_WPA2_8021X_AKM[4] = { 0x00, 0x0F, 0xAC, 0x01 }; ++u8 OUI_WPA2_PSK_AKM[4] = { 0x00, 0x0F, 0xAC, 0x02 }; ++u8 OUI_WPA2_WEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 }; ++ ++static void ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++ u8 GroupKeyWepStatus, ++ u8 keyDescVer, ++ u8 MsgType, ++ u8 DefaultKeyIdx, ++ u8 * GTK, ++ u8 * RSNIE, ++ u8 RSNIE_LEN, OUT PEAPOL_PACKET pMsg); ++ ++static void CalculateMIC(u8 KeyDescVer, ++ u8 * PTK, OUT PEAPOL_PACKET pMsg); ++ ++static void WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++ ++static void WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem); + +-static VOID WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, ++static void WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem); + +-static VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, ++static void WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem); + +-static VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -87,7 +87,7 @@ static VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + S - pointer to the association state machine + ========================================================================== + */ +-VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, ++void WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(S, (STATE_MACHINE_FUNC *) Trans, MAX_WPA_PTK_STATE, +@@ -115,15 +115,15 @@ VOID WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-VOID WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +-VOID WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +@@ -134,7 +134,7 @@ VOID WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return: + ========================================================================== + */ +-VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MAC_TABLE_ENTRY *pEntry; + PHEADER_802_11 pHeader; +@@ -187,7 +187,7 @@ VOID WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return: + ========================================================================== + */ +-VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MAC_TABLE_ENTRY *pEntry; + PHEADER_802_11 pHeader; +@@ -200,15 +200,15 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pEapol_packet = + (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + +- NdisZeroMemory((PUCHAR) & peerKeyInfo, sizeof(peerKeyInfo)); +- NdisMoveMemory((PUCHAR) & peerKeyInfo, +- (PUCHAR) & pEapol_packet->KeyDesc.KeyInfo, ++ NdisZeroMemory((u8 *)& peerKeyInfo, sizeof(peerKeyInfo)); ++ NdisMoveMemory((u8 *)& peerKeyInfo, ++ (u8 *)& pEapol_packet->KeyDesc.KeyInfo, + sizeof(KEY_INFO)); + + hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, + (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); + +- *((USHORT *) & peerKeyInfo) = cpu2le16(*((USHORT *) & peerKeyInfo)); ++ *((u16 *) & peerKeyInfo) = cpu2le16(*((u16 *) & peerKeyInfo)); + + do { + pEntry = MacTableLookup(pAd, pHeader->Addr2); +@@ -300,7 +300,7 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,Data) */ + /* Process 1. message 2 of 4-way HS in WPA or WPA2 */ + /* 2. message 4 of 4-way HS in WPA */ +- if (CONV_ARRARY_TO_UINT16 ++ if (CONV_ARRARY_TO_u16 + (pEapol_packet->KeyDesc. + KeyDataLen) == 0) { + PeerPairMsg4Action(pAd, +@@ -357,14 +357,14 @@ VOID WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ======================================================================== + */ +-VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, ++void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, IN UINT DataLen, IN BOOLEAN bClearFrame) ++ u8 *pHeader802_3, ++ u32 HdrLen, ++ u8 *pData, u32 DataLen, IN BOOLEAN bClearFrame) + { + PNDIS_PACKET pPacket; +- NDIS_STATUS Status; ++ int Status; + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) + return; +@@ -390,7 +390,7 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + pEntry-> + apidx); + +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR) pEntry->Aid); ++ RTMP_SET_PACKET_WCID(pPacket, (u8)pEntry->Aid); + RTMP_SET_PACKET_MOREDATA(pPacket, FALSE); + } + +@@ -398,7 +398,7 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + /* send out the packet */ + Status = STASendPacket(pAd, pPacket); + if (Status == NDIS_STATUS_SUCCESS) { +- UCHAR Index; ++ u8 Index; + + /* Dequeue one frame from TxSwQueue0..3 queue and process it */ + /* There are three place calling dequeue for TX ring. */ +@@ -433,13 +433,13 @@ VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN ULONG TimeInterval) ++void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, unsigned long TimeInterval) + { +- UCHAR Header802_3[14]; ++ u8 Header802_3[14]; + EAPOL_PACKET EAPOLPKT; +- PUINT8 pBssid = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ u8 *pBssid = NULL; ++ u8 group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart4WayHS\n")); + +@@ -468,7 +468,7 @@ VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + + /* Randomly generate ANonce */ +- GenRandom(pAd, (UCHAR *) pBssid, pEntry->ANonce); ++ GenRandom(pAd, (u8 *) pBssid, pEntry->ANonce); + + /* Construct EAPoL message - Pairwise Msg 1 */ + /* EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) */ +@@ -483,8 +483,8 @@ VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, Header802_3, +- LENGTH_802_3, (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ LENGTH_802_3, (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, + (pEntry->PortSecured == + WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); + +@@ -516,19 +516,19 @@ VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR PTK[80]; +- UCHAR Header802_3[14]; ++ u8 PTK[80]; ++ u8 Header802_3[14]; + PEAPOL_PACKET pMsg1; +- UINT MsgLen; ++ u32 MsgLen; + EAPOL_PACKET EAPOLPKT; +- PUINT8 pCurrentAddr = NULL; +- PUINT8 pmk_ptr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; ++ u8 *pCurrentAddr = NULL; ++ u8 *pmk_ptr = NULL; ++ u8 group_cipher = Ndis802_11WEPDisabled; ++ u8 *rsnie_ptr = NULL; ++ u8 rsnie_len = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg1Action \n")); + +@@ -566,7 +566,7 @@ VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + LEN_KEY_DESC_NONCE); + + /* Generate random SNonce */ +- GenRandom(pAd, (UCHAR *) pCurrentAddr, pEntry->SNonce); ++ GenRandom(pAd, (u8 *) pCurrentAddr, pEntry->SNonce); + + { + /* Calculate PTK(ANonce, SNonce) */ +@@ -589,14 +589,14 @@ VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, /* DefaultKeyIdx */ + pEntry->SNonce, NULL, /* TxRsc */ + NULL, /* GTK */ +- (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); ++ (u8 *) rsnie_ptr, rsnie_len, &EAPOLPKT); + + /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + + RTMPToWirelessSta(pAd, pEntry, +- Header802_3, sizeof(Header802_3), (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ Header802_3, sizeof(Header802_3), (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, TRUE); + + DBGPRINT(RT_DEBUG_TRACE, + ("<=== PeerPairMsg1Action: send Msg2 of 4-way \n")); +@@ -609,24 +609,24 @@ VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR PTK[80]; ++ u8 PTK[80]; + BOOLEAN Cancelled; + PHEADER_802_11 pHeader; + EAPOL_PACKET EAPOLPKT; + PEAPOL_PACKET pMsg2; +- UINT MsgLen; +- UCHAR Header802_3[LENGTH_802_3]; +- UCHAR TxTsc[6]; +- PUINT8 pBssid = NULL; +- PUINT8 pmk_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 rsnie_ptr = NULL; +- UCHAR rsnie_len = 0; ++ u32 MsgLen; ++ u8 Header802_3[LENGTH_802_3]; ++ u8 TxTsc[6]; ++ u8 *pBssid = NULL; ++ u8 *pmk_ptr = NULL; ++ u8 *gtk_ptr = NULL; ++ u8 default_key = 0; ++ u8 group_cipher = Ndis802_11WEPDisabled; ++ u8 *rsnie_ptr = NULL; ++ u8 rsnie_len = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg2Action \n")); + +@@ -655,8 +655,8 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + + { + /* Derive PTK */ +- WpaDerivePTK(pAd, (UCHAR *) pmk_ptr, pEntry->ANonce, /* ANONCE */ +- (UCHAR *) pBssid, pEntry->SNonce, /* SNONCE */ ++ WpaDerivePTK(pAd, (u8 *) pmk_ptr, pEntry->ANonce, /* ANONCE */ ++ (u8 *) pBssid, pEntry->SNonce, /* SNONCE */ + pEntry->Addr, PTK, LEN_PTK); + + NdisMoveMemory(pEntry->PTK, PTK, LEN_PTK); +@@ -685,14 +685,14 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + default_key, + pEntry->ANonce, + TxTsc, +- (UCHAR *) gtk_ptr, +- (UCHAR *) rsnie_ptr, rsnie_len, &EAPOLPKT); ++ (u8 *) gtk_ptr, ++ (u8 *) rsnie_ptr, rsnie_len, &EAPOLPKT); + + /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, Header802_3, LENGTH_802_3, +- (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, + (pEntry->PortSecured == + WPA_802_1X_PORT_SECURED) ? FALSE : TRUE); + +@@ -724,16 +724,16 @@ VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { + PHEADER_802_11 pHeader; +- UCHAR Header802_3[14]; ++ u8 Header802_3[14]; + EAPOL_PACKET EAPOLPKT; + PEAPOL_PACKET pMsg3; +- UINT MsgLen; +- PUINT8 pCurrentAddr = NULL; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ u32 MsgLen; ++ u8 *pCurrentAddr = NULL; ++ u8 group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg3Action \n")); + +@@ -856,8 +856,8 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, sizeof(Header802_3), +- (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, TRUE); ++ (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, TRUE); + + DBGPRINT(RT_DEBUG_TRACE, + ("<=== PeerPairMsg3Action: send Msg4 of 4-way \n")); +@@ -871,14 +871,14 @@ VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { + PEAPOL_PACKET pMsg4; + PHEADER_802_11 pHeader; +- UINT MsgLen; ++ u32 MsgLen; + BOOLEAN Cancelled; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ u8 group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerPairMsg4Action\n")); + +@@ -935,7 +935,7 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + /* Add Pair-wise key to Asic */ + AsicAddPairwiseKeyEntry(pAd, + pEntry->Addr, +- (UCHAR) pEntry->Aid, ++ (u8)pEntry->Aid, + &pEntry->PairwiseKey); + + /* update WCID attribute table and IVEIV table for this entry */ +@@ -990,16 +990,16 @@ VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) ++void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + { +- UCHAR Header802_3[14]; +- UCHAR TxTsc[6]; ++ u8 Header802_3[14]; ++ u8 TxTsc[6]; + EAPOL_PACKET EAPOLPKT; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- UCHAR default_key = 0; +- PUINT8 gnonce_ptr = NULL; +- PUINT8 gtk_ptr = NULL; +- PUINT8 pBssid = NULL; ++ u8 group_cipher = Ndis802_11WEPDisabled; ++ u8 default_key = 0; ++ u8 *gnonce_ptr = NULL; ++ u8 *gtk_ptr = NULL; ++ u8 *pBssid = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("===> WPAStart2WayGroupHS\n")); + +@@ -1016,15 +1016,15 @@ VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + group_cipher, + EAPOL_GROUP_MSG_1, + default_key, +- (UCHAR *) gnonce_ptr, +- TxTsc, (UCHAR *) gtk_ptr, NULL, 0, &EAPOLPKT); ++ (u8 *) gnonce_ptr, ++ TxTsc, (u8 *) gtk_ptr, NULL, 0, &EAPOLPKT); + + /* Make outgoing frame */ + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pBssid, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, LENGTH_802_3, +- (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, ++ (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, + FALSE); + + } while (FALSE); +@@ -1052,17 +1052,17 @@ VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + + ======================================================================== + */ +-VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, ++void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Header802_3[14]; ++ u8 Header802_3[14]; + EAPOL_PACKET EAPOLPKT; + PEAPOL_PACKET pGroup; +- UINT MsgLen; ++ u32 MsgLen; + BOOLEAN Cancelled; +- UCHAR default_key = 0; +- UCHAR group_cipher = Ndis802_11WEPDisabled; +- PUINT8 pCurrentAddr = NULL; ++ u8 default_key = 0; ++ u8 group_cipher = Ndis802_11WEPDisabled; ++ u8 *pCurrentAddr = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg1Action \n")); + +@@ -1117,8 +1117,8 @@ VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + MAKE_802_3_HEADER(Header802_3, pEntry->Addr, pCurrentAddr, EAPOL); + RTMPToWirelessSta(pAd, pEntry, + Header802_3, sizeof(Header802_3), +- (PUCHAR) & EAPOLPKT, +- CONV_ARRARY_TO_UINT16(EAPOLPKT.Body_Len) + 4, FALSE); ++ (u8 *)& EAPOLPKT, ++ CONV_ARRARY_TO_u16(EAPOLPKT.Body_Len) + 4, FALSE); + + DBGPRINT(RT_DEBUG_TRACE, + ("<=== PeerGroupMsg1Action: sned group message 2\n")); +@@ -1131,15 +1131,15 @@ VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, ++void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN VOID * Msg, IN UINT MsgLen) ++ void * Msg, u32 MsgLen) + { +- UINT Len; +- PUCHAR pData; ++ u32 Len; ++ u8 *pData; + BOOLEAN Cancelled; + PEAPOL_PACKET pMsg2; +- UCHAR group_cipher = Ndis802_11WEPDisabled; ++ u8 group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg2Action \n")); + +@@ -1155,7 +1155,7 @@ VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + if (pEntry->WpaState != AS_PTKINITDONE) + break; + +- pData = (PUCHAR) Msg; ++ pData = (u8 *)Msg; + pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); + Len = MsgLen - LENGTH_802_1_H; + +@@ -1226,7 +1226,7 @@ VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN WpaMsgTypeSubst(IN UCHAR EAPType, OUT INT * MsgType) ++BOOLEAN WpaMsgTypeSubst(u8 EAPType, int * MsgType) + { + switch (EAPType) { + case EAPPacket: +@@ -1261,35 +1261,35 @@ BOOLEAN WpaMsgTypeSubst(IN UCHAR EAPType, OUT INT * MsgType) + It is used to generate PTK, GTK or some specific random value. + + Arguments: +- UCHAR *key, - the key material for HMAC_SHA1 use +- INT key_len - the length of key +- UCHAR *prefix - a prefix label +- INT prefix_len - the length of the label +- UCHAR *data - a specific data with variable length +- INT data_len - the length of a specific data +- INT len - the output lenght ++ u8 *key, - the key material for HMAC_SHA1 use ++ int key_len - the length of key ++ u8 *prefix - a prefix label ++ int prefix_len - the length of the label ++ u8 *data - a specific data with variable length ++ int data_len - the length of a specific data ++ int len - the output lenght + + Return Value: +- UCHAR *output - the calculated result ++ u8 *output - the calculated result + + Note: + 802.11i-2004 Annex H.3 + + ======================================================================== + */ +-VOID PRF(IN UCHAR * key, +- IN INT key_len, +- IN UCHAR * prefix, +- IN INT prefix_len, +- IN UCHAR * data, IN INT data_len, OUT UCHAR * output, IN INT len) ++void PRF(u8 * key, ++ int key_len, ++ u8 * prefix, ++ int prefix_len, ++ u8 * data, int data_len, u8 * output, int len) + { +- INT i; +- UCHAR *input; +- INT currentindex = 0; +- INT total_len; ++ int i; ++ u8 *input; ++ int currentindex = 0; ++ int total_len; + + /* Allocate memory for input */ +- os_alloc_mem(NULL, (PUCHAR *) & input, 1024); ++ os_alloc_mem(NULL, (u8 **) & input, 1024); + + if (input == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); +@@ -1365,7 +1365,7 @@ static void F(char *password, unsigned char *ssid, int ssidlength, + * ssidlength - length of ssid in octets + * output must be 40 octets in length and outputs 256 bits of key + */ +-int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) ++int PasswordHash(char *password, u8 *ssid, int ssidlength, u8 *output) + { + if ((strlen(password) > 63) || (ssidlength > 32)) + return 0; +@@ -1399,17 +1399,17 @@ int PasswordHash(PSTRING password, PUCHAR ssid, INT ssidlength, PUCHAR output) + + ======================================================================== + */ +-VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, +- IN UCHAR * PMK, +- IN UCHAR * ANonce, +- IN UCHAR * AA, +- IN UCHAR * SNonce, +- IN UCHAR * SA, OUT UCHAR * output, IN UINT len) ++void WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++ u8 * PMK, ++ u8 * ANonce, ++ u8 * AA, ++ u8 * SNonce, ++ u8 * SA, u8 * output, u32 len) + { +- UCHAR concatenation[76]; +- UINT CurrPos = 0; +- UCHAR temp[32]; +- UCHAR Prefix[] = ++ u8 concatenation[76]; ++ u32 CurrPos = 0; ++ u8 temp[32]; ++ u8 Prefix[] = + { 'P', 'a', 'i', 'r', 'w', 'i', 's', 'e', ' ', 'k', 'e', 'y', ' ', + 'e', 'x', 'p', 'a', 'n', 's', 'i', 'o', 'n' + }; +@@ -1478,13 +1478,13 @@ VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random) ++void GenRandom(IN PRTMP_ADAPTER pAd, u8 * macAddr, u8 * random) + { +- INT i, curr; +- UCHAR local[80], KeyCounter[32]; +- UCHAR result[80]; +- ULONG CurrentTime; +- UCHAR prefix[] = ++ int i, curr; ++ u8 local[80], KeyCounter[32]; ++ u8 result[80]; ++ unsigned long CurrentTime; ++ u8 prefix[] = + { 'I', 'n', 'i', 't', ' ', 'C', 'o', 'u', 'n', 't', 'e', 'r' }; + + /* Zero the related information */ +@@ -1537,14 +1537,14 @@ VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random) + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT WepStatus, ++static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, ++ u8 ElementID, ++ u32 WepStatus, + IN BOOLEAN bMixCipher, +- IN UCHAR FlexibleCipher, +- OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) ++ u8 FlexibleCipher, ++ u8 *pRsnIe, u8 * rsn_len) + { +- UCHAR PairwiseCnt; ++ u8 PairwiseCnt; + + *rsn_len = 0; + +@@ -1609,7 +1609,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + if ((pAd->OpMode == OPMODE_STA) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ u32 GroupCipher = pAd->StaCfg.GroupCipher; + switch (GroupCipher) { + case Ndis802_11GroupWEP40Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, +@@ -1685,7 +1685,7 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + if ((pAd->OpMode == OPMODE_STA) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) && + (pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled)) { +- UINT GroupCipher = pAd->StaCfg.GroupCipher; ++ u32 GroupCipher = pAd->StaCfg.GroupCipher; + switch (GroupCipher) { + case Ndis802_11GroupWEP40Enabled: + NdisMoveMemory(pRsnie_cipher->mcast, +@@ -1722,14 +1722,14 @@ static VOID RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UINT AuthMode, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) ++static void RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, ++ u8 ElementID, ++ u32 AuthMode, ++ u8 apidx, ++ u8 *pRsnIe, u8 * rsn_len) + { + RSNIE_AUTH *pRsnie_auth; +- UCHAR AkmCnt = 1; /* default as 1 */ ++ u8 AkmCnt = 1; /* default as 1 */ + + pRsnie_auth = (RSNIE_AUTH *) (pRsnIe + (*rsn_len)); + +@@ -1803,10 +1803,10 @@ static VOID RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, +- IN UCHAR ElementID, +- IN UCHAR apidx, +- OUT PUCHAR pRsnIe, OUT UCHAR * rsn_len) ++static void RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, ++ u8 ElementID, ++ u8 apidx, ++ u8 *pRsnIe, u8 * rsn_len) + { + RSN_CAPABILITIES *pRSN_Cap; + +@@ -1840,15 +1840,15 @@ static VOID RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx) ++void RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++ u32 AuthMode, u32 WepStatus, u8 apidx) + { +- PUCHAR pRsnIe = NULL; /* primary RSNIE */ +- UCHAR *rsnielen_cur_p = 0; /* the length of the primary RSNIE */ +- UCHAR *rsnielen_ex_cur_p = 0; /* the length of the secondary RSNIE */ +- UCHAR PrimaryRsnie; ++ u8 *pRsnIe = NULL; /* primary RSNIE */ ++ u8 *rsnielen_cur_p = 0; /* the length of the primary RSNIE */ ++ u8 *rsnielen_ex_cur_p = 0; /* the length of the secondary RSNIE */ ++ u8 PrimaryRsnie; + BOOLEAN bMixCipher = FALSE; /* indicate the pairwise and group cipher are different */ +- UCHAR p_offset; ++ u8 p_offset; + WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; /* it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode */ + + rsnielen_cur_p = NULL; +@@ -1934,10 +1934,10 @@ VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + */ + BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, IN UCHAR FromWhichBSSID) ++ u8 *pData, ++ unsigned long DataByteCount, u8 FromWhichBSSID) + { +- ULONG Body_len; ++ unsigned long Body_len; + BOOLEAN Cancelled; + + if (DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H)) +@@ -2014,7 +2014,7 @@ BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-PSTRING GetEapolMsgType(CHAR msg) ++char *GetEapolMsgType(char msg) + { + if (msg == EAPOL_PAIR_MSG_1) + return "Pairwise Message 1"; +@@ -2045,12 +2045,12 @@ PSTRING GetEapolMsgType(CHAR msg) + ======================================================================== + */ + BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN UCHAR DataLen, +- IN MAC_TABLE_ENTRY * pEntry, OUT UCHAR * Offset) ++ u8 *pData, ++ u8 DataLen, ++ IN MAC_TABLE_ENTRY * pEntry, u8 * Offset) + { +- PUCHAR pVIE; +- UCHAR len; ++ u8 *pVIE; ++ u8 len; + PEID_STRUCT pEid; + BOOLEAN result = FALSE; + +@@ -2119,18 +2119,18 @@ BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, ++ u8 *pKeyData, ++ u8 KeyDataLen, ++ u8 GroupKeyIndex, ++ u8 MsgType, + IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry) + { + PKDE_ENCAP pKDE = NULL; +- PUCHAR pMyKeyData = pKeyData; +- UCHAR KeyDataLength = KeyDataLen; +- UCHAR GTKLEN = 0; +- UCHAR DefaultIdx = 0; +- UCHAR skip_offset; ++ u8 *pMyKeyData = pKeyData; ++ u8 KeyDataLength = KeyDataLen; ++ u8 GTKLEN = 0; ++ u8 DefaultIdx = 0; ++ u8 skip_offset; + + /* Verify The RSN IE contained in pairewise_msg_2 && pairewise_msg_3 and skip it */ + if (MsgType == EAPOL_PAIR_MSG_2 || MsgType == EAPOL_PAIR_MSG_3) { +@@ -2320,18 +2320,18 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR * KeyNonce, +- IN UCHAR * TxRSC, +- IN UCHAR * GTK, +- IN UCHAR * RSNIE, +- IN UCHAR RSNIE_Len, OUT PEAPOL_PACKET pMsg) ++void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++ u8 GroupKeyWepStatus, ++ u8 MsgType, ++ u8 DefaultKeyIdx, ++ u8 * KeyNonce, ++ u8 * TxRSC, ++ u8 * GTK, ++ u8 * RSNIE, ++ u8 RSNIE_Len, OUT PEAPOL_PACKET pMsg) + { + BOOLEAN bWPA2 = FALSE; +- UCHAR KeyDescVer; ++ u8 KeyDescVer; + + /* Choose WPA2 or not */ + if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2) || +@@ -2343,7 +2343,7 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + pMsg->ProType = EAPOLKey; + + /* Default 95 bytes, the EAPoL-Key descriptor exclude Key-data field */ +- SET_UINT16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); ++ SET_u16_TO_ARRARY(pMsg->Body_Len, LEN_EAPOL_KEY_MSG); + + /* Fill in EAPoL descriptor */ + if (bWPA2) +@@ -2394,8 +2394,8 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + pMsg->KeyDesc.KeyInfo.EKD_DL = 1; + } + /* key Information element has done. */ +- *(USHORT *) (&pMsg->KeyDesc.KeyInfo) = +- cpu2le16(*(USHORT *) (&pMsg->KeyDesc.KeyInfo)); ++ *(u16 *) (&pMsg->KeyDesc.KeyInfo) = ++ cpu2le16(*(u16 *) (&pMsg->KeyDesc.KeyInfo)); + + /* Fill in Key Length */ + { +@@ -2459,10 +2459,10 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + ((bWPA2) ? "WPA2" : "WPA"), GetEapolMsgType(MsgType))); + DBGPRINT(RT_DEBUG_TRACE, + (" Body length = %d \n", +- CONV_ARRARY_TO_UINT16(pMsg->Body_Len))); ++ CONV_ARRARY_TO_u16(pMsg->Body_Len))); + DBGPRINT(RT_DEBUG_TRACE, + (" Key length = %d \n", +- CONV_ARRARY_TO_UINT16(pMsg->KeyDesc.KeyLength))); ++ CONV_ARRARY_TO_u16(pMsg->KeyDesc.KeyLength))); + + } + +@@ -2483,18 +2483,18 @@ VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + + ======================================================================== + */ +-VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR keyDescVer, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR * GTK, +- IN UCHAR * RSNIE, +- IN UCHAR RSNIE_LEN, OUT PEAPOL_PACKET pMsg) ++void ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++ u8 GroupKeyWepStatus, ++ u8 keyDescVer, ++ u8 MsgType, ++ u8 DefaultKeyIdx, ++ u8 * GTK, ++ u8 * RSNIE, ++ u8 RSNIE_LEN, OUT PEAPOL_PACKET pMsg) + { +- UCHAR *mpool, *Key_Data, *Rc4GTK; +- UCHAR ekey[(LEN_KEY_DESC_IV + LEN_EAP_EK)]; +- ULONG data_offset; ++ u8 *mpool, *Key_Data, *Rc4GTK; ++ u8 ekey[(LEN_KEY_DESC_IV + LEN_EAP_EK)]; ++ unsigned long data_offset; + BOOLEAN bWPA2Capable = FALSE; + PRTMP_ADAPTER pAd = pEntry->pAd; + BOOLEAN GTK_Included = FALSE; +@@ -2509,26 +2509,26 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + return; + + /* allocate memory pool */ +- os_alloc_mem(NULL, (PUCHAR *) & mpool, 1500); ++ os_alloc_mem(NULL, (u8 **) & mpool, 1500); + + if (mpool == NULL) + return; + + /* Rc4GTK Len = 512 */ +- Rc4GTK = (UCHAR *) ROUND_UP(mpool, 4); ++ Rc4GTK = (u8 *) ROUND_UP(mpool, 4); + /* Key_Data Len = 512 */ +- Key_Data = (UCHAR *) ROUND_UP(Rc4GTK + 512, 4); ++ Key_Data = (u8 *) ROUND_UP(Rc4GTK + 512, 4); + + NdisZeroMemory(Key_Data, 512); +- SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, 0); ++ SET_u16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, 0); + data_offset = 0; + + /* Encapsulate RSNIE in pairwise_msg2 & pairwise_msg3 */ + if (RSNIE_LEN + && ((MsgType == EAPOL_PAIR_MSG_2) + || (MsgType == EAPOL_PAIR_MSG_3))) { +- PUINT8 pmkid_ptr = NULL; +- UINT8 pmkid_len = 0; ++ u8 *pmkid_ptr = NULL; ++ u8 pmkid_len = 0; + + RTMPInsertRSNIE(&Key_Data[data_offset], + &data_offset, +@@ -2584,8 +2584,8 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + /*hex_dump("GTK_Included", Key_Data, data_offset); */ + + if ((keyDescVer == DESC_TYPE_AES)) { +- UCHAR remainder = 0; +- UCHAR pad_len = 0; ++ u8 remainder = 0; ++ u8 pad_len = 0; + + /* Key Descriptor Version 2 or 3: AES key wrap, defined in IETF RFC 3394, */ + /* shall be used to encrypt the Key Data field using the KEK field from */ +@@ -2596,7 +2596,7 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + /* octets or if it is not a multiple of 8. The padding consists of appending */ + /* a single octet 0xdd followed by zero or more 0x00 octets. */ + if ((remainder = data_offset & 0x07) != 0) { +- INT i; ++ int i; + + pad_len = (8 - remainder); + Key_Data[data_offset] = 0xDD; +@@ -2637,8 +2637,8 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + } + + /* Update key data length field and total body length */ +- SET_UINT16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, data_offset); +- INC_UINT16_TO_ARRARY(pMsg->Body_Len, data_offset); ++ SET_u16_TO_ARRARY(pMsg->KeyDesc.KeyDataLen, data_offset); ++ INC_u16_TO_ARRARY(pMsg->Body_Len, data_offset); + + os_free_mem(NULL, mpool); + +@@ -2660,16 +2660,16 @@ VOID ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + + ======================================================================== + */ +-static VOID CalculateMIC(IN UCHAR KeyDescVer, +- IN UCHAR * PTK, OUT PEAPOL_PACKET pMsg) ++static void CalculateMIC(u8 KeyDescVer, ++ u8 * PTK, OUT PEAPOL_PACKET pMsg) + { +- UCHAR *OutBuffer; +- ULONG FrameLen = 0; +- UCHAR mic[LEN_KEY_DESC_MIC]; +- UCHAR digest[80]; ++ u8 *OutBuffer; ++ unsigned long FrameLen = 0; ++ u8 mic[LEN_KEY_DESC_MIC]; ++ u8 digest[80]; + + /* allocate memory for MIC calculation */ +- os_alloc_mem(NULL, (PUCHAR *) & OutBuffer, 512); ++ os_alloc_mem(NULL, (u8 **) & OutBuffer, 512); + + if (OutBuffer == NULL) { + DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); +@@ -2677,7 +2677,7 @@ static VOID CalculateMIC(IN UCHAR KeyDescVer, + } + /* make a frame for calculating MIC. */ + MakeOutgoingFrame(OutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(pMsg->Body_Len) + 4, pMsg, ++ CONV_ARRARY_TO_u16(pMsg->Body_Len) + 4, pMsg, + END_OF_ARGS); + + NdisZeroMemory(mic, sizeof(mic)); +@@ -2714,7 +2714,7 @@ static VOID CalculateMIC(IN UCHAR KeyDescVer, + + ======================================================================== + */ +-NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, ++int RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, + IN NDIS_802_11_ENCRYPTION_STATUS + GroupCipher, IN PCIPHER_KEY pShard_key) +@@ -2774,20 +2774,20 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + + } + +-PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, +- IN UINT rsnie_len, IN UINT8 type, OUT UINT8 * count) ++u8 *GetSuiteFromRSNIE(u8 *rsnie, ++ u32 rsnie_len, u8 type, u8 * count) + { + PEID_STRUCT pEid; +- INT len; +- PUINT8 pBuf; +- INT offset = 0; ++ int len; ++ u8 *pBuf; ++ int offset = 0; + PRSNIE_AUTH pAkm; +- UINT16 acount; ++ u16 acount; + BOOLEAN isWPA2 = FALSE; + + pEid = (PEID_STRUCT) rsnie; + len = rsnie_len - 2; /* exclude IE and length */ +- pBuf = (PUINT8) & pEid->Octet[0]; ++ pBuf = (u8 *)& pEid->Octet[0]; + + /* set default value */ + *count = 0; +@@ -2800,7 +2800,7 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + /* Check WPA or WPA2 */ + if (pEid->Eid == IE_WPA) { + PRSNIE pRsnie = (PRSNIE) pBuf; +- UINT16 ucount; ++ u16 ucount; + + if (len < sizeof(RSNIE)) { + DBGPRINT_ERR(("%s : The length is too short for WPA\n", +@@ -2831,7 +2831,7 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + + } else if (pEid->Eid == IE_RSN) { + PRSNIE2 pRsnie = (PRSNIE2) pBuf; +- UINT16 ucount; ++ u16 ucount; + + isWPA2 = TRUE; + +@@ -2920,10 +2920,10 @@ PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, + + } + +-VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len) ++void WpaShowAllsuite(u8 *rsnie, u32 rsnie_len) + { +- PUINT8 pSuite = NULL; +- UINT8 count; ++ u8 *pSuite = NULL; ++ u8 count; + + hex_dump("RSNIE", rsnie, rsnie_len); + +@@ -2952,25 +2952,25 @@ VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len) + + } + +-VOID RTMPInsertRSNIE(IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, IN UINT8 pmkid_len) ++void RTMPInsertRSNIE(u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 *rsnie_ptr, ++ u8 rsnie_len, ++ u8 *pmkid_ptr, u8 pmkid_len) + { +- PUCHAR pTmpBuf; +- ULONG TempLen = 0; +- UINT8 extra_len = 0; +- UINT16 pmk_count = 0; +- UCHAR ie_num; +- UINT8 total_len = 0; +- UCHAR WPA2_OUI[3] = { 0x00, 0x0F, 0xAC }; ++ u8 *pTmpBuf; ++ unsigned long TempLen = 0; ++ u8 extra_len = 0; ++ u16 pmk_count = 0; ++ u8 ie_num; ++ u8 total_len = 0; ++ u8 WPA2_OUI[3] = { 0x00, 0x0F, 0xAC }; + + pTmpBuf = pFrameBuf; + + /* PMKID-List Must larger than 0 and the multiple of 16. */ + if (pmkid_len > 0 && ((pmkid_len & 0x0f) == 0)) { +- extra_len = sizeof(UINT16) + pmkid_len; ++ extra_len = sizeof(u16)+ pmkid_len; + + pmk_count = (pmkid_len >> 4); + pmk_count = cpu2le16(pmk_count); +diff --git a/drivers/staging/rt2860/common/crypt_hmac.c b/drivers/staging/rt2860/common/crypt_hmac.c +index a50326a..6a086f9 100644 +--- a/drivers/staging/rt2860/common/crypt_hmac.c ++++ b/drivers/staging/rt2860/common/crypt_hmac.c +@@ -46,16 +46,16 @@ Note: + None + ======================================================================== + */ +-VOID HMAC_SHA1(IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen) ++void HMAC_SHA1(IN const u8 Key[], ++ u32 KeyLen, ++ IN const u8 Message[], ++ u32 MessageLen, u8 MAC[], u32 MACLen) + { + SHA1_CTX_STRUC sha_ctx1; + SHA1_CTX_STRUC sha_ctx2; +- UINT8 K0[SHA1_BLOCK_SIZE]; +- UINT8 Digest[SHA1_DIGEST_SIZE]; +- UINT index; ++ u8 K0[SHA1_BLOCK_SIZE]; ++ u8 Digest[SHA1_DIGEST_SIZE]; ++ u32 index; + + NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); + NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); +@@ -125,16 +125,16 @@ Note: + None + ======================================================================== + */ +-VOID HMAC_MD5(IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen) ++void HMAC_MD5(IN const u8 Key[], ++ u32 KeyLen, ++ IN const u8 Message[], ++ u32 MessageLen, u8 MAC[], u32 MACLen) + { + MD5_CTX_STRUC md5_ctx1; + MD5_CTX_STRUC md5_ctx2; +- UINT8 K0[MD5_BLOCK_SIZE]; +- UINT8 Digest[MD5_DIGEST_SIZE]; +- UINT index; ++ u8 K0[MD5_BLOCK_SIZE]; ++ u8 Digest[MD5_DIGEST_SIZE]; ++ u32 index; + + NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); + NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); +diff --git a/drivers/staging/rt2860/common/crypt_md5.c b/drivers/staging/rt2860/common/crypt_md5.c +index b3701f2..433aaf2 100644 +--- a/drivers/staging/rt2860/common/crypt_md5.c ++++ b/drivers/staging/rt2860/common/crypt_md5.c +@@ -39,26 +39,26 @@ + #define ROTL32(x,n) ROTL(x,n,32) /* 32 bits word */ + + #define ROUND1(a, b, c, d, x, s, ac) { \ +- (a) += F((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) += F((b),(c),(d)) + (x) + (u32)(ac); \ + (a) = ROTL32((a),(s)); \ + (a) += (b); \ + } + #define ROUND2(a, b, c, d, x, s, ac) { \ +- (a) += G((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) += G((b),(c),(d)) + (x) + (u32)(ac); \ + (a) = ROTL32((a),(s)); \ + (a) += (b); \ + } + #define ROUND3(a, b, c, d, x, s, ac) { \ +- (a) += H((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) += H((b),(c),(d)) + (x) + (u32)(ac); \ + (a) = ROTL32((a),(s)); \ + (a) += (b); \ + } + #define ROUND4(a, b, c, d, x, s, ac) { \ +- (a) += I((b),(c),(d)) + (x) + (UINT32)(ac); \ ++ (a) += I((b),(c),(d)) + (x) + (u32)(ac); \ + (a) = ROTL32((a),(s)); \ + (a) += (b); \ + } +-static const UINT32 MD5_DefaultHashValue[4] = { ++static const u32 MD5_DefaultHashValue[4] = { + 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL + }; + #endif /* MD5_SUPPORT */ +@@ -79,7 +79,7 @@ Note: + None + ======================================================================== + */ +-VOID MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX) ++void MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX) + { + NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, + sizeof(MD5_DefaultHashValue)); +@@ -103,11 +103,11 @@ Note: + T[i] := floor(abs(sin(i + 1)) * (2 pow 32)), i is number of round + ======================================================================== + */ +-VOID MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX) ++void MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX) + { +- UINT32 X_i; +- UINT32 X[16]; +- UINT32 a, b, c, d; ++ u32 X_i; ++ u32 X[16]; ++ u32 a, b, c, d; + + /* Prepare the message schedule, {X_i} */ + NdisMoveMemory(X, pMD5_CTX->Block, MD5_BLOCK_SIZE); +@@ -238,11 +238,11 @@ Note: + None + ======================================================================== + */ +-VOID MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, +- IN const UINT8 Message[], IN UINT MessageLen) ++void MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++ IN const u8 Message[], u32 MessageLen) + { +- UINT appendLen = 0; +- UINT diffLen = 0; ++ u32 appendLen = 0; ++ u32 diffLen = 0; + + while (appendLen != MessageLen) { + diffLen = MessageLen - appendLen; +@@ -280,10 +280,10 @@ Note: + None + ======================================================================== + */ +-VOID MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, OUT UINT8 DigestMessage[]) ++void MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, u8 DigestMessage[]) + { +- UINT index; +- UINT64 message_length_bits; ++ u32 index; ++ u64 message_length_bits; + + /* append 1 bits to end of the message */ + NdisFillMemory(pMD5_CTX->Block + pMD5_CTX->BlockLen, 1, 0x80); +@@ -299,7 +299,7 @@ VOID MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, OUT UINT8 DigestMessage[]) + NdisMoveMemory(&pMD5_CTX->Block[56], &message_length_bits, 8); + MD5_Hash(pMD5_CTX); + +- /* Return message digest, transform the UINT32 hash value to bytes */ ++ /* Return message digest, transform the u32 hash value to bytes */ + for (index = 0; index < 4; index++) + pMD5_CTX->HashValue[index] = + cpu2le32(pMD5_CTX->HashValue[index]); +@@ -323,8 +323,8 @@ Note: + None + ======================================================================== + */ +-VOID RT_MD5(IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 DigestMessage[]) ++void RT_MD5(IN const u8 Message[], ++ u32 MessageLen, u8 DigestMessage[]) + { + MD5_CTX_STRUC md5_ctx; + +diff --git a/drivers/staging/rt2860/common/crypt_sha2.c b/drivers/staging/rt2860/common/crypt_sha2.c +index 7b1bf8a..9166ea0 100644 +--- a/drivers/staging/rt2860/common/crypt_sha2.c ++++ b/drivers/staging/rt2860/common/crypt_sha2.c +@@ -41,11 +41,11 @@ + #ifdef SHA1_SUPPORT + /* SHA1 constants */ + #define SHA1_MASK 0x0000000f +-static const UINT32 SHA1_K[4] = { ++static const u32 SHA1_K[4] = { + 0x5a827999UL, 0x6ed9eba1UL, 0x8f1bbcdcUL, 0xca62c1d6UL + }; + +-static const UINT32 SHA1_DefaultHashValue[5] = { ++static const u32 SHA1_DefaultHashValue[5] = { + 0x67452301UL, 0xefcdab89UL, 0x98badcfeUL, 0x10325476UL, 0xc3d2e1f0UL + }; + +@@ -64,7 +64,7 @@ Note: + None + ======================================================================== + */ +-VOID RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX) ++void RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX) + { + NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, + sizeof(SHA1_DefaultHashValue)); +@@ -88,11 +88,11 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX) ++void SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX) + { +- UINT32 W_i, t, s; +- UINT32 W[16]; +- UINT32 a, b, c, d, e, T, f_t = 0; ++ u32 W_i, t, s; ++ u32 W[16]; ++ u32 a, b, c, d, e, T, f_t = 0; + + /* Prepare the message schedule, {W_i}, 0 < t < 15 */ + NdisMoveMemory(W, pSHA_CTX->Block, SHA1_BLOCK_SIZE); +@@ -168,11 +168,11 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, +- IN const UINT8 Message[], IN UINT MessageLen) ++void SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++ IN const u8 Message[], u32 MessageLen) + { +- UINT appendLen = 0; +- UINT diffLen = 0; ++ u32 appendLen = 0; ++ u32 diffLen = 0; + + while (appendLen != MessageLen) { + diffLen = MessageLen - appendLen; +@@ -210,10 +210,10 @@ Note: + None + ======================================================================== + */ +-VOID SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, OUT UINT8 DigestMessage[]) ++void SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, u8 DigestMessage[]) + { +- UINT index; +- UINT64 message_length_bits; ++ u32 index; ++ u64 message_length_bits; + + /* Append bit 1 to end of the message */ + NdisFillMemory(pSHA_CTX->Block + pSHA_CTX->BlockLen, 1, 0x80); +@@ -229,7 +229,7 @@ VOID SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, OUT UINT8 DigestMessage[]) + NdisMoveMemory(&pSHA_CTX->Block[56], &message_length_bits, 8); + SHA1_Hash(pSHA_CTX); + +- /* Return message digest, transform the UINT32 hash value to bytes */ ++ /* Return message digest, transform the u32 hash value to bytes */ + for (index = 0; index < 5; index++) + pSHA_CTX->HashValue[index] = + cpu2be32(pSHA_CTX->HashValue[index]); +@@ -253,8 +253,8 @@ Note: + None + ======================================================================== + */ +-VOID RT_SHA1(IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 DigestMessage[]) ++void RT_SHA1(IN const u8 Message[], ++ u32 MessageLen, u8 DigestMessage[]) + { + + SHA1_CTX_STRUC sha_ctx; +diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c +index bfe742d..8bee5cf 100644 +--- a/drivers/staging/rt2860/common/dfs.c ++++ b/drivers/staging/rt2860/common/dfs.c +@@ -52,9 +52,9 @@ + + ======================================================================== + */ +-BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, IN UCHAR Ch) ++BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, u8 Ch) + { +- INT i; ++ int i; + BOOLEAN result = FALSE; + + for (i = 0; i < pAd->ChannelListNum; i++) { +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index 8e49cd7..b997151 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -48,16 +48,16 @@ + + typedef union _EFUSE_CTRL_STRUC { + struct { +- UINT32 EFSROM_AOUT:6; +- UINT32 EFSROM_MODE:2; +- UINT32 EFSROM_LDO_OFF_TIME:6; +- UINT32 EFSROM_LDO_ON_TIME:2; +- UINT32 EFSROM_AIN:10; +- UINT32 RESERVED:4; +- UINT32 EFSROM_KICK:1; +- UINT32 SEL_EFUSE:1; ++ u32 EFSROM_AOUT:6; ++ u32 EFSROM_MODE:2; ++ u32 EFSROM_LDO_OFF_TIME:6; ++ u32 EFSROM_LDO_ON_TIME:2; ++ u32 EFSROM_AIN:10; ++ u32 RESERVED:4; ++ u32 EFSROM_KICK:1; ++ u32 SEL_EFUSE:1; + } field; +- UINT32 word; ++ u32 word; + } EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC; + + /* +@@ -73,13 +73,13 @@ typedef union _EFUSE_CTRL_STRUC { + + ======================================================================== + */ +-UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN USHORT Length, OUT USHORT * pData) ++u8 eFuseReadRegisters(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u16 Length, u16 * pData) + { + EFUSE_CTRL_STRUC eFuseCtrlStruc; + int i; +- USHORT efuseDataOffset; +- UINT32 data; ++ u16 efuseDataOffset; ++ u32 data; + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +@@ -132,7 +132,7 @@ UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(pData, &data, Length); + } + +- return (UCHAR) eFuseCtrlStruc.field.EFSROM_AOUT; ++ return (u8)eFuseCtrlStruc.field.EFSROM_AOUT; + + } + +@@ -149,14 +149,14 @@ UCHAR eFuseReadRegisters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, OUT USHORT * pData) ++void eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++ u16 Offset, ++ u16 Length, u16 * pData) + { + EFUSE_CTRL_STRUC eFuseCtrlStruc; + int i; +- USHORT efuseDataOffset; +- UINT32 data; ++ u16 efuseDataOffset; ++ u32 data; + + RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrlStruc.word); + +@@ -214,16 +214,16 @@ VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static VOID eFuseReadPhysical(IN PRTMP_ADAPTER pAd, +- IN PUSHORT lpInBuffer, +- IN ULONG nInBufferSize, +- OUT PUSHORT lpOutBuffer, IN ULONG nOutBufferSize) ++static void eFuseReadPhysical(IN PRTMP_ADAPTER pAd, ++ u16 *lpInBuffer, ++ unsigned long nInBufferSize, ++ u16 *lpOutBuffer, unsigned long nOutBufferSize) + { +- USHORT *pInBuf = (USHORT *) lpInBuffer; +- USHORT *pOutBuf = (USHORT *) lpOutBuffer; ++ u16 *pInBuf = (u16 *) lpInBuffer; ++ u16 *pOutBuf = (u16 *) lpOutBuffer; + +- USHORT Offset = pInBuf[0]; /*addr */ +- USHORT Length = pInBuf[1]; /*length */ ++ u16 Offset = pInBuf[0]; /*addr */ ++ u16 Length = pInBuf[1]; /*length */ + int i; + + for (i = 0; i < Length; i += 2) { +@@ -244,20 +244,20 @@ static VOID eFuseReadPhysical(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, char *arg) + { +- USHORT i; +- USHORT LogicalAddress; +- USHORT efusefreenum = 0; ++ u16 i; ++ u16 LogicalAddress; ++ u16 efusefreenum = 0; + if (!pAd->bUseEfuse) + return FALSE; + for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i += 2) { + eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); + if ((LogicalAddress & 0xff) == 0) { +- efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END - i + 1); ++ efusefreenum = (u8)(EFUSE_USAGE_MAP_END - i + 1); + break; + } else if (((LogicalAddress >> 8) & 0xff) == 0) { +- efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END - i); ++ efusefreenum = (u8)(EFUSE_USAGE_MAP_END - i); + break; + } + +@@ -268,10 +268,10 @@ INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + return TRUE; + } + +-INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, char *arg) + { +- USHORT InBuf[3]; +- INT i = 0; ++ u16 InBuf[3]; ++ int i = 0; + if (!pAd->bUseEfuse) + return FALSE; + for (i = 0; i < EFUSE_USAGE_MAP_END / 2; i++) { +@@ -288,7 +288,7 @@ INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + } + + int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, +- IN USHORT Offset, OUT USHORT * pValue) ++ u16 Offset, u16 * pValue) + { + eFuseReadRegisters(pAd, Offset, 2, pValue); + return (*pValue); +@@ -296,7 +296,7 @@ int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, + + int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd) + { +- USHORT value; ++ u16 value; + + if (IS_RT30xx(pAd)) { + eFusePhysicalReadRegisters(pAd, EFUSE_TAG, 2, &value); +@@ -305,10 +305,10 @@ int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd) + return 0; + } + +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock) ++void eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, u32 *EfuseFreeBlock) + { +- USHORT i; +- USHORT LogicalAddress; ++ u16 i; ++ u16 LogicalAddress; + if (!pAd->bUseEfuse) { + DBGPRINT(RT_DEBUG_TRACE, + ("eFuseGetFreeBlockCount Only supports efuse Mode\n")); +@@ -317,10 +317,10 @@ VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock) + for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i += 2) { + eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress); + if ((LogicalAddress & 0xff) == 0) { +- *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END - i + 1); ++ *EfuseFreeBlock = (u8)(EFUSE_USAGE_MAP_END - i + 1); + break; + } else if (((LogicalAddress >> 8) & 0xff) == 0) { +- *EfuseFreeBlock = (UCHAR) (EFUSE_USAGE_MAP_END - i); ++ *EfuseFreeBlock = (u8)(EFUSE_USAGE_MAP_END - i); + break; + } + +@@ -331,9 +331,9 @@ VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock) + ("eFuseGetFreeBlockCount is 0x%x\n", *EfuseFreeBlock)); + } + +-INT eFuse_init(IN PRTMP_ADAPTER pAd) ++int eFuse_init(IN PRTMP_ADAPTER pAd) + { +- UINT EfuseFreeBlock = 0; ++ u32 EfuseFreeBlock = 0; + DBGPRINT(RT_DEBUG_ERROR, + ("NVM is Efuse and its size =%x[%x-%x] \n", + EFUSE_USAGE_MAP_SIZE, EFUSE_USAGE_MAP_START, +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +index fa3f231..8cd654c 100644 +--- a/drivers/staging/rt2860/common/ee_prom.c ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -38,7 +38,7 @@ + #include "../rt_config.h" + + /* IRQL = PASSIVE_LEVEL */ +-static inline VOID RaiseClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) ++static inline void RaiseClock(IN PRTMP_ADAPTER pAd, u32 * x) + { + *x = *x | EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +@@ -46,7 +46,7 @@ static inline VOID RaiseClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline VOID LowerClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) ++static inline void LowerClock(IN PRTMP_ADAPTER pAd, u32 * x) + { + *x = *x & ~EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +@@ -54,10 +54,10 @@ static inline VOID LowerClock(IN PRTMP_ADAPTER pAd, IN UINT32 * x) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) ++static inline u16 ShiftInBits(IN PRTMP_ADAPTER pAd) + { +- UINT32 x, i; +- USHORT data = 0; ++ u32 x, i; ++ u16 data = 0; + + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + +@@ -79,10 +79,10 @@ static inline USHORT ShiftInBits(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline VOID ShiftOutBits(IN PRTMP_ADAPTER pAd, +- IN USHORT data, IN USHORT count) ++static inline void ShiftOutBits(IN PRTMP_ADAPTER pAd, ++ u16 data, u16 count) + { +- UINT32 x, mask; ++ u32 x, mask; + + mask = 0x01 << (count - 1); + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -107,9 +107,9 @@ static inline VOID ShiftOutBits(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline VOID EEpromCleanup(IN PRTMP_ADAPTER pAd) ++static inline void EEpromCleanup(IN PRTMP_ADAPTER pAd) + { +- UINT32 x; ++ u32 x; + + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); + +@@ -120,9 +120,9 @@ static inline VOID EEpromCleanup(IN PRTMP_ADAPTER pAd) + LowerClock(pAd, &x); + } + +-static inline VOID EWEN(IN PRTMP_ADAPTER pAd) ++static inline void EWEN(IN PRTMP_ADAPTER pAd) + { +- UINT32 x; ++ u32 x; + + /* reset bits and set EECS */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -141,9 +141,9 @@ static inline VOID EWEN(IN PRTMP_ADAPTER pAd) + EEpromCleanup(pAd); + } + +-static inline VOID EWDS(IN PRTMP_ADAPTER pAd) ++static inline void EWDS(IN PRTMP_ADAPTER pAd) + { +- UINT32 x; ++ u32 x; + + /* reset bits and set EECS */ + RTMP_IO_READ32(pAd, E2PROM_CSR, &x); +@@ -164,10 +164,10 @@ static inline VOID EWDS(IN PRTMP_ADAPTER pAd) + + /* IRQL = PASSIVE_LEVEL */ + int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT USHORT * pValue) ++ u16 Offset, u16 * pValue) + { +- UINT32 x; +- USHORT data; ++ u32 x; ++ u16 data; + + Offset /= 2; + /* reset bits and set EECS */ +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index 202d313..764de3a 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -36,12 +36,12 @@ + */ + #include "../rt_config.h" + +-INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType) ++int RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, int infType) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +- UINT32 eFuseCtrl, MacCsr0; ++ u32 eFuseCtrl, MacCsr0; + int index; + + index = 0; +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index e047b89..fcf030b 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -39,19 +39,19 @@ + #include "../rt_config.h" + #include + +-UCHAR CISCO_OUI[] = { 0x00, 0x40, 0x96 }; +- +-UCHAR WPA_OUI[] = { 0x00, 0x50, 0xf2, 0x01 }; +-UCHAR RSN_OUI[] = { 0x00, 0x0f, 0xac }; +-UCHAR WME_INFO_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01 }; +-UCHAR WME_PARM_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01 }; +-UCHAR Ccx2QosInfo[] = { 0x00, 0x40, 0x96, 0x04 }; +-UCHAR RALINK_OUI[] = { 0x00, 0x0c, 0x43 }; +-UCHAR BROADCOM_OUI[] = { 0x00, 0x90, 0x4c }; +-UCHAR WPS_OUI[] = { 0x00, 0x50, 0xf2, 0x04 }; +-UCHAR PRE_N_HT_OUI[] = { 0x00, 0x90, 0x4c }; +- +-UCHAR RateSwitchTable[] = { ++u8 CISCO_OUI[] = { 0x00, 0x40, 0x96 }; ++ ++u8 WPA_OUI[] = { 0x00, 0x50, 0xf2, 0x01 }; ++u8 RSN_OUI[] = { 0x00, 0x0f, 0xac }; ++u8 WME_INFO_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01 }; ++u8 WME_PARM_ELEM[] = { 0x00, 0x50, 0xf2, 0x02, 0x01, 0x01 }; ++u8 Ccx2QosInfo[] = { 0x00, 0x40, 0x96, 0x04 }; ++u8 RALINK_OUI[] = { 0x00, 0x0c, 0x43 }; ++u8 BROADCOM_OUI[] = { 0x00, 0x90, 0x4c }; ++u8 WPS_OUI[] = { 0x00, 0x50, 0xf2, 0x04 }; ++u8 PRE_N_HT_OUI[] = { 0x00, 0x90, 0x4c }; ++ ++u8 RateSwitchTable[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x11, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -88,7 +88,7 @@ UCHAR RateSwitchTable[] = { + 0x1f, 0x00, 0, 0, 0, + }; + +-UCHAR RateSwitchTable11B[] = { ++u8 RateSwitchTable11B[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x04, 0x03, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -97,7 +97,7 @@ UCHAR RateSwitchTable11B[] = { + 0x03, 0x00, 3, 20, 45, + }; + +-UCHAR RateSwitchTable11BG[] = { ++u8 RateSwitchTable11BG[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0a, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -112,7 +112,7 @@ UCHAR RateSwitchTable11BG[] = { + 0x09, 0x10, 7, 10, 13, + }; + +-UCHAR RateSwitchTable11G[] = { ++u8 RateSwitchTable11G[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x08, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x10, 0, 20, 101, +@@ -125,7 +125,7 @@ UCHAR RateSwitchTable11G[] = { + 0x07, 0x10, 7, 10, 13, + }; + +-UCHAR RateSwitchTable11N1S[] = { ++u8 RateSwitchTable11N1S[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0c, 0x0a, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -142,7 +142,7 @@ UCHAR RateSwitchTable11N1S[] = { + 0x0b, 0x23, 7, 8, 14, + }; + +-UCHAR RateSwitchTable11N2S[] = { ++u8 RateSwitchTable11N2S[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0e, 0x0c, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -161,7 +161,7 @@ UCHAR RateSwitchTable11N2S[] = { + 0x0d, 0x22, 15, 8, 15, + }; + +-UCHAR RateSwitchTable11N3S[] = { ++u8 RateSwitchTable11N3S[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0b, 0x00, 0, 0, 0, /* 0x0a, 0x00, 0, 0, 0, // Initial used item after association */ + 0x00, 0x21, 0, 30, 101, +@@ -177,7 +177,7 @@ UCHAR RateSwitchTable11N3S[] = { + 0x0a, 0x22, 15, 8, 25, /* 0x09, 0x22, 15, 8, 25, */ + }; + +-UCHAR RateSwitchTable11N2SForABand[] = { ++u8 RateSwitchTable11N2SForABand[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, +@@ -193,7 +193,7 @@ UCHAR RateSwitchTable11N2SForABand[] = { + 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11N3SForABand[] = { /* 3*3 */ ++u8 RateSwitchTable11N3SForABand[] = { /* 3*3 */ + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, +@@ -209,7 +209,7 @@ UCHAR RateSwitchTable11N3SForABand[] = { /* 3*3 */ + 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11BGN1S[] = { ++u8 RateSwitchTable11BGN1S[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0c, 0x0a, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -226,7 +226,7 @@ UCHAR RateSwitchTable11BGN1S[] = { + 0x0b, 0x23, 7, 8, 14, + }; + +-UCHAR RateSwitchTable11BGN2S[] = { ++u8 RateSwitchTable11BGN2S[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0e, 0x0c, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x00, 0, 40, 101, +@@ -245,7 +245,7 @@ UCHAR RateSwitchTable11BGN2S[] = { + 0x0d, 0x22, 15, 8, 15, + }; + +-UCHAR RateSwitchTable11BGN3S[] = { /* 3*3 */ ++u8 RateSwitchTable11BGN3S[] = { /* 3*3 */ + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0a, 0x00, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, /*50 */ +@@ -260,7 +260,7 @@ UCHAR RateSwitchTable11BGN3S[] = { /* 3*3 */ + 0x09, 0x22, 23, 8, 25, + }; + +-UCHAR RateSwitchTable11BGN2SForABand[] = { ++u8 RateSwitchTable11BGN2SForABand[] = { + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0b, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, /*50 */ +@@ -276,7 +276,7 @@ UCHAR RateSwitchTable11BGN2SForABand[] = { + 0x0a, 0x22, 15, 8, 25, + }; + +-UCHAR RateSwitchTable11BGN3SForABand[] = { /* 3*3 */ ++u8 RateSwitchTable11BGN3SForABand[] = { /* 3*3 */ + /* Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF) */ + 0x0c, 0x09, 0, 0, 0, /* Initial used item after association */ + 0x00, 0x21, 0, 30, 101, /*50 */ +@@ -293,10 +293,10 @@ UCHAR RateSwitchTable11BGN3SForABand[] = { /* 3*3 */ + 0x0b, 0x22, 23, 8, 25, + }; + +-extern UCHAR OfdmRateToRxwiMCS[]; ++extern u8 OfdmRateToRxwiMCS[]; + /* since RT61 has better RX sensibility, we have to limit TX ACK rate not to exceed our normal data TX rate. */ + /* otherwise the WLAN peer may not be able to receive the ACK thus downgrade its data TX rate */ +-ULONG BasicRateMask[12] = ++unsigned long BasicRateMask[12] = + { 0xfffff001 /* 1-Mbps */ , 0xfffff003 /* 2 Mbps */ , 0xfffff007 /* 5.5 */ , + 0xfffff00f /* 11 */ , + 0xfffff01f /* 6 */ , 0xfffff03f /* 9 */ , 0xfffff07f /* 12 */ , +@@ -305,38 +305,38 @@ ULONG BasicRateMask[12] = + 0xffffffff /* 54 */ + }; + +-UCHAR BROADCAST_ADDR[MAC_ADDR_LEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; +-UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; ++u8 BROADCAST_ADDR[MAC_ADDR_LEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; ++u8 ZERO_MAC_ADDR[MAC_ADDR_LEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + + /* e.g. RssiSafeLevelForTxRate[RATE_36]" means if the current RSSI is greater than */ + /* this value, then it's quaranteed capable of operating in 36 mbps TX rate in */ + /* clean environment. */ + /* TxRate: 1 2 5.5 11 6 9 12 18 24 36 48 54 72 100 */ +-CHAR RssiSafeLevelForTxRate[] = ++char RssiSafeLevelForTxRate[] = + { -92, -91, -90, -87, -88, -86, -85, -83, -81, -78, -72, -71, -40, -40 }; + +-UCHAR RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100 }; +-USHORT RateIdTo500Kbps[] = ++u8 RateIdToMbps[] = { 1, 2, 5, 11, 6, 9, 12, 18, 24, 36, 48, 54, 72, 100 }; ++u16 RateIdTo500Kbps[] = + { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144, 200 }; + +-UCHAR SsidIe = IE_SSID; +-UCHAR SupRateIe = IE_SUPP_RATES; +-UCHAR ExtRateIe = IE_EXT_SUPP_RATES; +-UCHAR HtCapIe = IE_HT_CAP; +-UCHAR AddHtInfoIe = IE_ADD_HT; +-UCHAR NewExtChanIe = IE_SECONDARY_CH_OFFSET; +-UCHAR ErpIe = IE_ERP; +-UCHAR DsIe = IE_DS_PARM; +-UCHAR TimIe = IE_TIM; +-UCHAR WpaIe = IE_WPA; +-UCHAR Wpa2Ie = IE_WPA2; +-UCHAR IbssIe = IE_IBSS_PARM; ++u8 SsidIe = IE_SSID; ++u8 SupRateIe = IE_SUPP_RATES; ++u8 ExtRateIe = IE_EXT_SUPP_RATES; ++u8 HtCapIe = IE_HT_CAP; ++u8 AddHtInfoIe = IE_ADD_HT; ++u8 NewExtChanIe = IE_SECONDARY_CH_OFFSET; ++u8 ErpIe = IE_ERP; ++u8 DsIe = IE_DS_PARM; ++u8 TimIe = IE_TIM; ++u8 WpaIe = IE_WPA; ++u8 Wpa2Ie = IE_WPA2; ++u8 IbssIe = IE_IBSS_PARM; + +-extern UCHAR WPA_OUI[]; ++extern u8 WPA_OUI[]; + +-UCHAR SES_OUI[] = { 0x00, 0x90, 0x4c }; ++u8 SES_OUI[] = { 0x00, 0x90, 0x4c }; + +-UCHAR ZeroSsid[32] = ++u8 ZeroSsid[32] = + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +@@ -356,9 +356,9 @@ UCHAR ZeroSsid[32] = + + ========================================================================== + */ +-NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) ++int MlmeInit(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ int Status = NDIS_STATUS_SUCCESS; + + DBGPRINT(RT_DEBUG_TRACE, ("--> MLME Initialize\n")); + +@@ -453,7 +453,7 @@ NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID MlmeHandler(IN PRTMP_ADAPTER pAd) ++void MlmeHandler(IN PRTMP_ADAPTER pAd) + { + MLME_QUEUE_ELEM *Elem = NULL; + +@@ -571,7 +571,7 @@ VOID MlmeHandler(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID MlmeHalt(IN PRTMP_ADAPTER pAd) ++void MlmeHalt(IN PRTMP_ADAPTER pAd) + { + BOOLEAN Cancelled; + +@@ -639,7 +639,7 @@ VOID MlmeHalt(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeHalt\n")); + } + +-VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) ++void MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + { + pAd->RalinkCounters.LastOneSecRxOkDataCnt = + pAd->RalinkCounters.OneSecRxOkDataCnt; +@@ -689,11 +689,11 @@ VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) + ========================================================================== + */ + #define ADHOC_BEACON_LOST_TIME (8*OS_HZ) /* 8 sec */ +-VOID MlmePeriodicExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void MlmePeriodicExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { +- ULONG TxTotalCnt; ++ unsigned long TxTotalCnt; + PRTMP_ADAPTER pAd = (RTMP_ADAPTER *) FunctionContext; + + #ifdef RTMP_MAC_PCI +@@ -706,7 +706,7 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) + /*&&(pAd->bPCIclkOff == FALSE) */ + ) { +- UINT32 data = 0; ++ u32 data = 0; + + /* Read GPIO pin2 as Hardware controlled radio state */ + #ifndef RT3090 +@@ -891,7 +891,7 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + /* 2. If in 0x10F4 the ((bit29==1) && (bit7==1)) OR ((bit29==1) && (bit5==1)), it means the deadlock has occurred. */ + /* 3. If the deadlock occurred, reset MAC/BBP by setting 0x1004 to 0x0001 for a while then setting it back to 0x000C again. */ + +- UINT32 MacReg = 0; ++ u32 MacReg = 0; + + RTMP_IO_READ32(pAd, 0x10F4, &MacReg); + if (((MacReg & 0x20000000) && (MacReg & 0x80)) +@@ -921,7 +921,7 @@ VOID MlmePeriodicExec(IN PVOID SystemSpecific1, + IRQL = DISPATCH_LEVEL + ========================================================================== + */ +-BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen) ++BOOLEAN MlmeValidateSSID(u8 *pSsid, u8 SsidLen) + { + int index; + +@@ -938,10 +938,10 @@ BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen) + return (TRUE); + } + +-VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, ++void MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR * ppTable, +- IN PUCHAR pTableSize, IN PUCHAR pInitTxRateIdx) ++ u8 ** ppTable, ++ u8 *pTableSize, u8 *pInitTxRateIdx) + { + do { + /* decide the rate table for tuning */ +@@ -1144,9 +1144,9 @@ VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } while (FALSE); + } + +-VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) ++void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + { +- ULONG TxTotalCnt; ++ unsigned long TxTotalCnt; + int i; + + /* +@@ -1341,8 +1341,8 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + + if (pAd->StaCfg.bAutoRoaming) { + BOOLEAN rv = FALSE; +- CHAR dBmToRoam = pAd->StaCfg.dBmToRoam; +- CHAR MaxRssi = RTMPMaxRssi(pAd, ++ char dBmToRoam = pAd->StaCfg.dBmToRoam; ++ char MaxRssi = RTMPMaxRssi(pAd, + pAd->StaCfg.RssiSample. + LastRssi0, + pAd->StaCfg.RssiSample. +@@ -1357,7 +1357,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + && (MaxRssi <= dBmToRoam)) { + DBGPRINT(RT_DEBUG_TRACE, + ("Rssi=%d, dBmToRoam=%d\n", MaxRssi, +- (CHAR) dBmToRoam)); ++ (char)dBmToRoam)); + + /* Add auto seamless roaming */ + if (rv == FALSE) +@@ -1392,7 +1392,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + LinkDown(pAd, FALSE); + + StartParmFill(pAd, &StartReq, +- (CHAR *) pAd->MlmeAux.Ssid, ++ (char *) pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, + sizeof(MLME_START_REQ_STRUCT), &StartReq); +@@ -1439,7 +1439,7 @@ VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->MlmeAux. + AutoReconnectSsid)); + ScanParmFill(pAd, &ScanReq, +- (PSTRING) pAd->MlmeAux. ++ (char *)pAd->MlmeAux. + AutoReconnectSsid, + pAd->MlmeAux. + AutoReconnectSsidLen, +@@ -1487,9 +1487,9 @@ SKIP_AUTO_SCAN_CONN: + } + + /* Link down report */ +-VOID LinkDownExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void LinkDownExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -1517,7 +1517,7 @@ VOID LinkDownExec(IN PVOID SystemSpecific1, + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd) ++void MlmeAutoScan(IN PRTMP_ADAPTER pAd) + { + /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { +@@ -1532,7 +1532,7 @@ VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) ++void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + { + if (pAd->StaCfg.bAutoConnectByBssid) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -1582,9 +1582,9 @@ VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + Output: + ========================================================================== + */ +-VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32) ++void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32) + { +- USHORT i; ++ u16 i; + BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; + BSS_ENTRY *pBss; + +@@ -1642,7 +1642,7 @@ VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + */ + BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + { +- USHORT i; ++ u16 i; + BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; + BSS_ENTRY *pBss; + +@@ -1699,10 +1699,10 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + return FALSE; + } + +-VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, ++void MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate) + { +- UCHAR MaxMode = MODE_OFDM; ++ u8 MaxMode = MODE_OFDM; + + MaxMode = MODE_HTGREENFIELD; + +@@ -1820,7 +1820,7 @@ VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD; + } + +- pAd->LastTxRate = (USHORT) (pEntry->HTPhyMode.word); ++ pAd->LastTxRate = (u16)(pEntry->HTPhyMode.word); + } + + /* +@@ -1840,20 +1840,20 @@ VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + call this routine every second + ========================================================================== + */ +-VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) ++void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + { +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; +- ULONG i, AccuTxTotalCnt = 0, TxTotalCnt; +- ULONG TxErrorRatio = 0; ++ u8 UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; ++ unsigned long i, AccuTxTotalCnt = 0, TxTotalCnt; ++ unsigned long TxErrorRatio = 0; + BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; +- CHAR Rssi, RssiOffset = 0; ++ u8 *pTable; ++ u8 TableSize = 0; ++ u8 InitTxRateIdx = 0, TrainUp, TrainDown; ++ char Rssi, RssiOffset = 0; + TX_STA_CNT1_STRUC StaTx1; + TX_STA_CNT0_STRUC TxStaCnt0; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; ++ unsigned long TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; + MAC_TABLE_ENTRY *pEntry; + RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; + +@@ -1936,8 +1936,8 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + */ + if (TxErrorRatio == 100) { + TX_RTY_CFG_STRUC TxRtyCfg, TxRtyCfgtmp; +- ULONG Index; +- ULONG MACValue; ++ unsigned long Index; ++ unsigned long MACValue; + + RTMP_IO_READ32(pAd, TX_RTY_CFG, &TxRtyCfg.word); + TxRtyCfgtmp.word = TxRtyCfg.word; +@@ -2039,12 +2039,12 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + /* (criteria copied from RT2500 for Netopia case) */ + /* */ + if (TxTotalCnt <= 15) { +- CHAR idx = 0; +- UCHAR TxRateIdx; +- UCHAR MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = ++ char idx = 0; ++ u8 TxRateIdx; ++ u8 MCS0 = 0, MCS1 = 0, MCS2 = 0, MCS3 = 0, MCS4 = + 0, MCS5 = 0, MCS6 = 0, MCS7 = 0; +- UCHAR MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; +- UCHAR MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; /* 3*3 */ ++ u8 MCS12 = 0, MCS13 = 0, MCS14 = 0, MCS15 = 0; ++ u8 MCS20 = 0, MCS21 = 0, MCS22 = 0, MCS23 = 0; /* 3*3 */ + + /* check the existence and index of each needed MCS */ + while (idx < pTable[0]) { +@@ -2198,10 +2198,10 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + + NdisZeroMemory(pEntry->TxQuality, +- sizeof(USHORT) * ++ sizeof(u16)* + MAX_STEP_OF_TX_RATE_SWITCH); + NdisZeroMemory(pEntry->PER, +- sizeof(UCHAR) * ++ sizeof(u8)* + MAX_STEP_OF_TX_RATE_SWITCH); + pEntry->fLastSecAccordingRSSI = TRUE; + /* reset all OneSecTx counters */ +@@ -2243,7 +2243,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + pEntry->TxQuality[UpRateIdx]--; /* may improve next UP rate's quality */ + } + +- pEntry->PER[CurrRateIdx] = (UCHAR) TxErrorRatio; ++ pEntry->PER[CurrRateIdx] = (u8)TxErrorRatio; + + if (bTrainUpDown) { + /* perform DRS - consider TxRate Down first, then rate up. */ +@@ -2265,10 +2265,10 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + pEntry->TxRateUpPenalty = 0; + pEntry->LastSecTxRateChangeAction = 1; /* rate UP */ + NdisZeroMemory(pEntry->TxQuality, +- sizeof(USHORT) * ++ sizeof(u16)* + MAX_STEP_OF_TX_RATE_SWITCH); + NdisZeroMemory(pEntry->PER, +- sizeof(UCHAR) * ++ sizeof(u8)* + MAX_STEP_OF_TX_RATE_SWITCH); + + /* */ +@@ -2311,7 +2311,7 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + + pEntry->LastTxOkCount = TxSuccess; + { +- UCHAR tmpTxRate; ++ u8 tmpTxRate; + + /* to fix tcp ack issue */ + if (!bTxRateChanged +@@ -2359,26 +2359,26 @@ VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++void StaQuickResponeForRateUpExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3) + { + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; +- UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; +- ULONG TxTotalCnt; +- ULONG TxErrorRatio = 0; ++ u8 UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; ++ unsigned long TxTotalCnt; ++ unsigned long TxErrorRatio = 0; + BOOLEAN bTxRateChanged; /*, bUpgradeQuality = FALSE; */ + PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; +- PUCHAR pTable; +- UCHAR TableSize = 0; +- UCHAR InitTxRateIdx = 0, TrainUp, TrainDown; ++ u8 *pTable; ++ u8 TableSize = 0; ++ u8 InitTxRateIdx = 0, TrainUp, TrainDown; + TX_STA_CNT1_STRUC StaTx1; + TX_STA_CNT0_STRUC TxStaCnt0; +- CHAR Rssi, ratio; +- ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; ++ char Rssi, ratio; ++ unsigned long TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; + MAC_TABLE_ENTRY *pEntry; +- ULONG i; ++ unsigned long i; + + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; + +@@ -2480,10 +2480,10 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + /* */ + if (TxTotalCnt <= 12) { + NdisZeroMemory(pAd->DrsCounters.TxQuality, +- sizeof(USHORT) * ++ sizeof(u16)* + MAX_STEP_OF_TX_RATE_SWITCH); + NdisZeroMemory(pAd->DrsCounters.PER, +- sizeof(UCHAR) * ++ sizeof(u8)* + MAX_STEP_OF_TX_RATE_SWITCH); + + if ((pAd->DrsCounters.LastSecTxRateChangeAction == 1) +@@ -2503,7 +2503,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + } + + do { +- ULONG OneSecTxNoRetryOKRationCount; ++ unsigned long OneSecTxNoRetryOKRationCount; + + if (pAd->DrsCounters.LastTimeTxRateChangeAction == 0) + ratio = 5; +@@ -2517,7 +2517,7 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + } + + pAd->DrsCounters.PER[CurrRateIdx] = +- (UCHAR) TxErrorRatio; ++ (u8)TxErrorRatio; + + OneSecTxNoRetryOKRationCount = (TxSuccess * ratio); + +@@ -2551,10 +2551,10 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + if (pAd->CommonCfg.TxRateIndex > CurrRateIdx) { + pAd->DrsCounters.TxRateUpPenalty = 0; + NdisZeroMemory(pAd->DrsCounters.TxQuality, +- sizeof(USHORT) * ++ sizeof(u16)* + MAX_STEP_OF_TX_RATE_SWITCH); + NdisZeroMemory(pAd->DrsCounters.PER, +- sizeof(UCHAR) * ++ sizeof(u8)* + MAX_STEP_OF_TX_RATE_SWITCH); + bTxRateChanged = TRUE; + } +@@ -2601,9 +2601,9 @@ VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32) ++void MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, unsigned long Now32) + { +- ULONG PowerMode; ++ unsigned long PowerMode; + + /* condition - */ + /* 1. Psm maybe ON only happen in INFRASTRUCTURE mode */ +@@ -2638,7 +2638,7 @@ VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32) + + /* IRQL = PASSIVE_LEVEL */ + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm) ++void MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, u16 psm) + { + AUTO_RSP_CFG_STRUC csr4; + +@@ -2669,21 +2669,21 @@ VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm) + channel quality based on the most up-to-date information + ========================================================================== + */ +-VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, IN ULONG Now32) ++void MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, unsigned long Now32) + { +- ULONG TxOkCnt, TxCnt, TxPER, TxPRR; +- ULONG RxCnt, RxPER; +- UCHAR NorRssi; +- CHAR MaxRssi; ++ unsigned long TxOkCnt, TxCnt, TxPER, TxPRR; ++ unsigned long RxCnt, RxPER; ++ u8 NorRssi; ++ char MaxRssi; + RSSI_SAMPLE *pRssiSample = NULL; +- UINT32 OneSecTxNoRetryOkCount = 0; +- UINT32 OneSecTxRetryOkCount = 0; +- UINT32 OneSecTxFailCount = 0; +- UINT32 OneSecRxOkCnt = 0; +- UINT32 OneSecRxFcsErrCnt = 0; +- ULONG ChannelQuality = 0; /* 0..100, Channel Quality Indication for Roaming */ +- ULONG BeaconLostTime = pAd->StaCfg.BeaconLostTime; ++ u32 OneSecTxNoRetryOkCount = 0; ++ u32 OneSecTxRetryOkCount = 0; ++ u32 OneSecTxFailCount = 0; ++ u32 OneSecRxOkCnt = 0; ++ u32 OneSecRxFcsErrCnt = 0; ++ unsigned long ChannelQuality = 0; /* 0..100, Channel Quality Indication for Roaming */ ++ unsigned long BeaconLostTime = pAd->StaCfg.BeaconLostTime; + + if (pAd->OpMode == OPMODE_STA) { + pRssiSample = &pAd->StaCfg.RssiSample; +@@ -2751,7 +2751,7 @@ VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) ++void MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, u16 TxPreamble) + { + AUTO_RSP_CFG_STRUC csr4; + +@@ -2764,13 +2764,13 @@ VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) + RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word); + if (TxPreamble == Rt802_11PreambleLong) { + DBGPRINT(RT_DEBUG_TRACE, +- ("MlmeSetTxPreamble (= LONG PREAMBLE)\n")); ++ ("MlmeSetTxPreamble (= long PREAMBLE)\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + csr4.field.AutoResponderPreamble = 0; + } else { + /* NOTE: 1Mbps should always use long preamble */ + DBGPRINT(RT_DEBUG_TRACE, +- ("MlmeSetTxPreamble (= SHORT PREAMBLE)\n")); ++ ("MlmeSetTxPreamble (= short PREAMBLE)\n")); + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); + csr4.field.AutoResponderPreamble = 1; + } +@@ -2785,14 +2785,14 @@ VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble) + ========================================================================== + */ + +-VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) ++void UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + { +- INT i, j; ++ int i, j; + /* 1 2 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ +- UCHAR rate[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; +- UCHAR *sup_p = pAdapter->CommonCfg.SupRate; +- UCHAR *ext_p = pAdapter->CommonCfg.ExtRate; +- ULONG bitmap = pAdapter->CommonCfg.BasicRateBitmap; ++ u8 rate[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; ++ u8 *sup_p = pAdapter->CommonCfg.SupRate; ++ u8 *ext_p = pAdapter->CommonCfg.ExtRate; ++ unsigned long bitmap = pAdapter->CommonCfg.BasicRateBitmap; + + /* if A mode, always use fix BasicRateBitMap */ + /*if (pAdapter->CommonCfg.Channel == PHY_11A) */ +@@ -2831,19 +2831,19 @@ VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + /* IRQL = DISPATCH_LEVEL */ + /* bLinkUp is to identify the inital link speed. */ + /* TRUE indicates the rate update at linkup, we should not try to set the rate at 54Mbps. */ +-VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) ++void MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, u8 apidx) + { + int i, num; +- UCHAR Rate = RATE_6, MaxDesire = RATE_1, MaxSupport = RATE_1; +- UCHAR MinSupport = RATE_54; +- ULONG BasicRateBitmap = 0; +- UCHAR CurrBasicRate = RATE_1; +- UCHAR *pSupRate, SupRateLen, *pExtRate, ExtRateLen; ++ u8 Rate = RATE_6, MaxDesire = RATE_1, MaxSupport = RATE_1; ++ u8 MinSupport = RATE_54; ++ unsigned long BasicRateBitmap = 0; ++ u8 CurrBasicRate = RATE_1; ++ u8 *pSupRate, SupRateLen, *pExtRate, ExtRateLen; + PHTTRANSMIT_SETTING pHtPhy = NULL; + PHTTRANSMIT_SETTING pMaxHtPhy = NULL; + PHTTRANSMIT_SETTING pMinHtPhy = NULL; + BOOLEAN *auto_rate_cur_p; +- UCHAR HtMcs = MCS_AUTO; ++ u8 HtMcs = MCS_AUTO; + + /* find max desired rate */ + UpdateBasicRateBitmap(pAd); +@@ -3112,7 +3112,7 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + /* the DURATION field of outgoing uniicast DATA/MGMT frame */ + for (i = 0; i < MAX_LEN_OF_SUPPORTED_RATES; i++) { + if (BasicRateBitmap & (0x01 << i)) +- CurrBasicRate = (UCHAR) i; ++ CurrBasicRate = (u8)i; + pAd->CommonCfg.ExpectedACKRate[i] = CurrBasicRate; + } + +@@ -3292,14 +3292,14 @@ VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx) + + ========================================================================== + */ +-VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) ++void MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, u8 apidx) + { +- UCHAR StbcMcs; /*j, StbcMcs, bitmask; */ +- CHAR i; /* 3*3 */ ++ u8 StbcMcs; /*j, StbcMcs, bitmask; */ ++ char i; /* 3*3 */ + RT_HT_CAPABILITY *pRtHtCap = NULL; + RT_HT_PHY_INFO *pActiveHtPhy = NULL; +- ULONG BasicMCS; +- UCHAR j, bitmask; ++ unsigned long BasicMCS; ++ u8 j, bitmask; + PRT_HT_PHY_INFO pDesireHtPhy = NULL; + PHTTRANSMIT_SETTING pHtPhy = NULL; + PHTTRANSMIT_SETTING pMaxHtPhy = NULL; +@@ -3326,7 +3326,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + + pRtHtCap = &pAd->StaActive.SupportedHtPhy; + pActiveHtPhy = &pAd->StaActive.SupportedPhyInfo; +- StbcMcs = (UCHAR) pAd->MlmeAux.AddHtInfo.AddHtInfo3.StbcMcs; ++ StbcMcs = (u8)pAd->MlmeAux.AddHtInfo.AddHtInfo3.StbcMcs; + BasicMCS = + pAd->MlmeAux.AddHtInfo.MCSSet[0] + + (pAd->MlmeAux.AddHtInfo.MCSSet[1] << 8) + (StbcMcs << 16); +@@ -3340,7 +3340,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + return; + + pRtHtCap = &pAd->CommonCfg.DesiredHtPhy; +- StbcMcs = (UCHAR) pAd->CommonCfg.AddHTInfo.AddHtInfo3.StbcMcs; ++ StbcMcs = (u8)pAd->CommonCfg.AddHTInfo.AddHtInfo3.StbcMcs; + BasicMCS = + pAd->CommonCfg.AddHTInfo.MCSSet[0] + + (pAd->CommonCfg.AddHTInfo.MCSSet[1] << 8) + (StbcMcs << 16); +@@ -3406,7 +3406,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + pMinHtPhy->field.MCS)); + } + +- for (i = 23; (CHAR) i >= 0; i--) /* 3*3 */ ++ for (i = 23; (char)i >= 0; i--) /* 3*3 */ + { + j = i / 8; + bitmask = (1 << (i - (j * 8))); +@@ -3444,7 +3444,7 @@ VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx) + DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateHtTxRates<=== \n")); + } + +-VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) ++void BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) + { + int i; + +@@ -3462,13 +3462,13 @@ VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeRadioOff(IN PRTMP_ADAPTER pAd) ++void MlmeRadioOff(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_OFF(pAd); + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void MlmeRadioOn(IN PRTMP_ADAPTER pAd) + { + RTMP_MLME_RADIO_ON(pAd); + } +@@ -3487,7 +3487,7 @@ VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd) + IRQL = DISPATCH_LEVEL + + */ +-VOID BssTableInit(IN BSS_TABLE * Tab) ++void BssTableInit(IN BSS_TABLE * Tab) + { + int i; + +@@ -3510,9 +3510,9 @@ VOID BssTableInit(IN BSS_TABLE * Tab) + IRQL = DISPATCH_LEVEL + + */ +-ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel) ++unsigned long BssTableSearch(IN BSS_TABLE * Tab, u8 *pBssid, u8 Channel) + { +- UCHAR i; ++ u8 i; + + for (i = 0; i < Tab->BssNr; i++) { + /* */ +@@ -3525,14 +3525,14 @@ ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel) + return i; + } + } +- return (ULONG) BSS_NOT_FOUND; ++ return (unsigned long)BSS_NOT_FOUND; + } + +-ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel) ++unsigned long BssSsidTableSearch(IN BSS_TABLE * Tab, ++ u8 *pBssid, ++ u8 *pSsid, u8 SsidLen, u8 Channel) + { +- UCHAR i; ++ u8 i; + + for (i = 0; i < Tab->BssNr; i++) { + /* */ +@@ -3547,15 +3547,15 @@ ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, + return i; + } + } +- return (ULONG) BSS_NOT_FOUND; ++ return (unsigned long)BSS_NOT_FOUND; + } + +-ULONG BssTableSearchWithSSID(IN BSS_TABLE * Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, IN UCHAR Channel) ++unsigned long BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++ u8 *Bssid, ++ u8 *pSsid, ++ u8 SsidLen, u8 Channel) + { +- UCHAR i; ++ u8 i; + + for (i = 0; i < Tab->BssNr; i++) { + if ((((Tab->BssEntry[i].Channel <= 14) && (Channel <= 14)) || +@@ -3572,13 +3572,13 @@ ULONG BssTableSearchWithSSID(IN BSS_TABLE * Tab, + return i; + } + } +- return (ULONG) BSS_NOT_FOUND; ++ return (unsigned long)BSS_NOT_FOUND; + } + +-ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, +- IN PUCHAR pSsid, IN UCHAR SsidLen) ++unsigned long BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++ u8 *pSsid, u8 SsidLen) + { +- UCHAR i; ++ u8 i; + + for (i = 0; i < Tab->BssNr; i++) { + if (SSID_EQUAL +@@ -3587,14 +3587,14 @@ ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, + return i; + } + } +- return (ULONG) BSS_NOT_FOUND; ++ return (unsigned long)BSS_NOT_FOUND; + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, +- IN PUCHAR pBssid, IN UCHAR Channel) ++void BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, ++ u8 *pBssid, u8 Channel) + { +- UCHAR i, j; ++ u8 i, j; + + for (i = 0; i < Tab->BssNr; i++) { + if ((Tab->BssEntry[i].Channel == Channel) && +@@ -3621,7 +3621,7 @@ VOID BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, + // IRQL = DISPATCH_LEVEL + ======================================================================== + */ +-VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, ++void BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IN BA_ORI_ENTRY * pBAORIEntry) + { + +@@ -3652,18 +3652,18 @@ VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + */ +-VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM pCfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, ++void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN PCF_PARM pCfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 HtCapabilityLen, ++ u8 AddHtInfoLen, ++ u8 NewExtChanOffset, ++ u8 Channel, ++ char Rssi, + IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, ++ u8 CkipFlag, + IN PEDCA_PARM pEdcaParm, + IN PQOS_CAPABILITY_PARM pQosCapability, + IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) ++ u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) + { + COPY_MAC_ADDR(pBss->Bssid, pBssid); + /* Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID */ +@@ -3777,12 +3777,12 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + + { + PEID_STRUCT pEid; +- USHORT Length = 0; ++ u16 Length = 0; + + NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN); + NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN); + pEid = (PEID_STRUCT) pVIE; +- while ((Length + 2 + (USHORT) pEid->Len) <= LengthVIE) { ++ while ((Length + 2 + (u16)pEid->Len) <= LengthVIE) { + switch (pEid->Eid) { + case IE_WPA: + if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { +@@ -3808,8 +3808,8 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + } + break; + } +- Length = Length + 2 + (USHORT) pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ +- pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); ++ Length = Length + 2 + (u16)pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ ++ pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); + } + } + } +@@ -3837,23 +3837,23 @@ VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, IN PUCHAR pBssid, I + IRQL = DISPATCH_LEVEL + + */ +-ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR ChannelNo, +- IN CHAR Rssi, ++unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN CF_PARM * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 HtCapabilityLen, ++ u8 AddHtInfoLen, ++ u8 NewExtChanOffset, ++ u8 ChannelNo, ++ char Rssi, + IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, ++ u8 CkipFlag, + IN PEDCA_PARM pEdcaParm, + IN PQOS_CAPABILITY_PARM pQosCapability, + IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) ++ u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) + { +- ULONG Idx; ++ unsigned long Idx; + + Idx = +- BssTableSearchWithSSID(Tab, pBssid, (UCHAR *) Ssid, SsidLen, ++ BssTableSearchWithSSID(Tab, pBssid, (u8 *) Ssid, SsidLen, + ChannelNo); + if (Idx == BSS_NOT_FOUND) { + if (Tab->BssNr >= MAX_LEN_OF_BSS_TABLE) { +@@ -3924,10 +3924,10 @@ ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, IN PUCHAR pBss + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE * OutTab, IN CHAR Ssid[], IN UCHAR SsidLen) ++void BssTableSsidSort(IN PRTMP_ADAPTER pAd, ++ OUT BSS_TABLE * OutTab, char Ssid[], u8 SsidLen) + { +- INT i; ++ int i; + BssTableInit(OutTab); + + for (i = 0; i < pAd->ScanTab.BssNr; i++) { +@@ -4180,9 +4180,9 @@ VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) ++void BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) + { +- INT i, j; ++ int i, j; + BSS_ENTRY TmpBss; + + for (i = 0; i < OutTab->BssNr - 1; i++) { +@@ -4200,15 +4200,15 @@ VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) + } + } + +-VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) ++void BssCipherParse(IN OUT PBSS_ENTRY pBss) + { + PEID_STRUCT pEid; +- PUCHAR pTmp; ++ u8 *pTmp; + PRSN_IE_HEADER_STRUCT pRsnHeader; + PCIPHER_SUITE_STRUCT pCipher; + PAKM_SUITE_STRUCT pAKM; +- USHORT Count; +- INT Length; ++ u16 Count; ++ int Length; + NDIS_802_11_ENCRYPTION_STATUS TmpCipher; + + /* */ +@@ -4237,11 +4237,11 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + pBss->WPA2.RsnCapability = 0; + pBss->WPA2.bMixMode = FALSE; + +- Length = (INT) pBss->VarIELen; ++ Length = (int)pBss->VarIELen; + + while (Length > 0) { + /* Parse cipher suite base on WPA1 & WPA2, they should be parsed differently */ +- pTmp = ((PUCHAR) pBss->VarIEs) + pBss->VarIELen - Length; ++ pTmp = ((u8 *)pBss->VarIEs) + pBss->VarIELen - Length; + pEid = (PEID_STRUCT) pTmp; + switch (pEid->Eid) { + case IE_WPA: +@@ -4257,7 +4257,7 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + /* Skip OUI, version, and multicast suite */ + /* This part should be improved in the future when AP supported multiple cipher suite. */ + /* For now, it's OK since almost all APs have fixed cipher suite supported. */ +- /* pTmp = (PUCHAR) pEid->Octet; */ ++ /* pTmp = (u8 *)pEid->Octet; */ + pTmp += 11; + + /* Cipher Suite Selectors from Spec P802.11i/D3.2 P26. */ +@@ -4293,9 +4293,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + pTmp += 1; + + /* skip all unicast cipher suites */ +- /*Count = *(PUSHORT) pTmp; */ ++ /*Count = *(u16 *)pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ pTmp += sizeof(u16); + + /* Parsing all unicast cipher suite */ + while (Count > 0) { +@@ -4332,9 +4332,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } + + /* 4. get AKM suite counts */ +- /*Count = *(PUSHORT) pTmp; */ ++ /*Count = *(u16 *)pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ pTmp += sizeof(u16); + pTmp += 3; + + switch (*pTmp) { +@@ -4417,9 +4417,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + pTmp += sizeof(CIPHER_SUITE_STRUCT); + + /* 2. Get pairwise cipher counts */ +- /*Count = *(PUSHORT) pTmp; */ ++ /*Count = *(u16 *)pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ pTmp += sizeof(u16); + + /* 3. Get pairwise cipher */ + /* Parsing all unicast cipher suite */ +@@ -4457,9 +4457,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + } + + /* 4. get AKM suite counts */ +- /*Count = *(PUSHORT) pTmp; */ ++ /*Count = *(u16 *)pTmp; */ + Count = (pTmp[1] << 8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ pTmp += sizeof(u16); + + /* 5. Get AKM ciphers */ + /* Parsing all AKM ciphers */ +@@ -4520,9 +4520,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + pBss->WepStatus = pBss->WPA2.PairCipher; + + /* 6. Get RSN capability */ +- /*pBss->WPA2.RsnCapability = *(PUSHORT) pTmp; */ ++ /*pBss->WPA2.RsnCapability = *(u16 *)pTmp; */ + pBss->WPA2.RsnCapability = (pTmp[1] << 8) + pTmp[0]; +- pTmp += sizeof(USHORT); ++ pTmp += sizeof(u16); + + /* Check the Pair & Group, if different, turn on mixed mode flag */ + if (pBss->WPA2.GroupCipher != pBss->WPA2.PairCipher) +@@ -4546,9 +4546,9 @@ VOID BssCipherParse(IN OUT PBSS_ENTRY pBss) + * \pre + * \post + */ +-VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr) ++void MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, u8 *pAddr) + { +- INT i; ++ int i; + + for (i = 0; i < MAC_ADDR_LEN; i++) { + pAddr[i] = RandomByte(pAd); +@@ -4572,10 +4572,10 @@ VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr) + IRQL = DISPATCH_LEVEL + + */ +-VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, ++void MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid) ++ u8 SubType, ++ u8 ToDs, u8 *pDA, u8 *pBssid) + { + NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); + +@@ -4611,11 +4611,11 @@ VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + ****************************************************************************/ +-ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) ++unsigned long MakeOutgoingFrame(u8 * Buffer, unsigned long * FrameLen, ...) + { +- UCHAR *p; ++ u8 *p; + int leng; +- ULONG TotLeng; ++ unsigned long TotLeng; + va_list Args; + + /* calculates the total length */ +@@ -4626,7 +4626,7 @@ ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) + if (leng == END_OF_ARGS) { + break; + } +- p = va_arg(Args, PVOID); ++ p = va_arg(Args, void *); + NdisMoveMemory(&Buffer[TotLeng], p, leng); + TotLeng = TotLeng + leng; + } while (TRUE); +@@ -4650,9 +4650,9 @@ ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * FrameLen, ...) + IRQL = PASSIVE_LEVEL + + */ +-NDIS_STATUS MlmeQueueInit(IN MLME_QUEUE * Queue) ++int MlmeQueueInit(IN MLME_QUEUE * Queue) + { +- INT i; ++ int i; + + NdisAllocateSpinLock(&Queue->Lock); + +@@ -4685,10 +4685,10 @@ NDIS_STATUS MlmeQueueInit(IN MLME_QUEUE * Queue) + + */ + BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, IN ULONG MsgLen, IN VOID * Msg) ++ unsigned long Machine, ++ unsigned long MsgType, unsigned long MsgLen, void * Msg) + { +- INT Tail; ++ int Tail; + MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + + /* Do nothing if the driver is starting halt state. */ +@@ -4745,17 +4745,17 @@ BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, + + */ + BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, IN VOID * Msg, IN UCHAR Signal) ++ unsigned long Wcid, ++ unsigned long TimeStampHigh, ++ unsigned long TimeStampLow, ++ u8 Rssi0, ++ u8 Rssi1, ++ u8 Rssi2, ++ unsigned long MsgLen, void * Msg, u8 Signal) + { +- INT Tail, Machine; ++ int Tail, Machine; + PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; +- INT MsgType; ++ int MsgType; + MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; + + /* Do nothing if the driver is starting halt state. */ +@@ -4801,7 +4801,7 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + Queue->Entry[Tail].Rssi1 = Rssi1; + Queue->Entry[Tail].Rssi2 = Rssi2; + Queue->Entry[Tail].Signal = Signal; +- Queue->Entry[Tail].Wcid = (UCHAR) Wcid; ++ Queue->Entry[Tail].Wcid = (u8)Wcid; + + Queue->Entry[Tail].Channel = pAd->LatchRfRegs.Channel; + +@@ -4840,7 +4840,7 @@ BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem) + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) ++void MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + { + #ifdef RTMP_MAC_PCI + MLME_QUEUE_ELEM *Elem = NULL; +@@ -4962,7 +4962,7 @@ BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue) + IRQL = PASSIVE_LEVEL + + */ +-VOID MlmeQueueDestroy(IN MLME_QUEUE * pQueue) ++void MlmeQueueDestroy(IN MLME_QUEUE * pQueue) + { + NdisAcquireSpinLock(&(pQueue->Lock)); + pQueue->Num = 0; +@@ -4985,23 +4985,23 @@ VOID MlmeQueueDestroy(IN MLME_QUEUE * pQueue) + */ + BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + IN PFRAME_802_11 pFrame, +- OUT INT * Machine, OUT INT * MsgType) ++ int * Machine, int * MsgType) + { +- USHORT Seq, Alg; +- UCHAR EAPType; +- PUCHAR pData; ++ u16 Seq, Alg; ++ u8 EAPType; ++ u8 *pData; + + /* Pointer to start of data frames including SNAP header */ +- pData = (PUCHAR) pFrame + LENGTH_802_11; ++ pData = (u8 *)pFrame + LENGTH_802_11; + + /* The only data type will pass to this function is EAPOL frame */ + if (pFrame->Hdr.FC.Type == BTYPE_DATA) { + { + *Machine = WPA_STATE_MACHINE; + EAPType = +- *((UCHAR *) pFrame + LENGTH_802_11 + ++ *((u8 *) pFrame + LENGTH_802_11 + + LENGTH_802_1_H + 1); +- return (WpaMsgTypeSubst(EAPType, (INT *) MsgType)); ++ return (WpaMsgTypeSubst(EAPType, (int *) MsgType)); + } + } + +@@ -5044,8 +5044,8 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + break; + case SUBTYPE_AUTH: + /* get the sequence number from payload 24 Mac Header + 2 bytes algorithm */ +- NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(USHORT)); +- NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(USHORT)); ++ NdisMoveMemory(&Seq, &pFrame->Octet[2], sizeof(u16)); ++ NdisMoveMemory(&Alg, &pFrame->Octet[0], sizeof(u16)); + if (Seq == 1 || Seq == 3) { + *Machine = AUTH_RSP_STATE_MACHINE; + *MsgType = MT2_PEER_AUTH_ODD; +@@ -5097,14 +5097,14 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + IRQL = PASSIVE_LEVEL + + */ +-VOID StateMachineInit(IN STATE_MACHINE * S, ++void StateMachineInit(IN STATE_MACHINE * S, + IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, ++ unsigned long StNr, ++ unsigned long MsgNr, + IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, IN ULONG Base) ++ unsigned long InitState, unsigned long Base) + { +- ULONG i, j; ++ unsigned long i, j; + + /* set number of states and messages */ + S->NrState = StNr; +@@ -5135,11 +5135,11 @@ VOID StateMachineInit(IN STATE_MACHINE * S, + IRQL = PASSIVE_LEVEL + + */ +-VOID StateMachineSetAction(IN STATE_MACHINE * S, +- IN ULONG St, +- IN ULONG Msg, IN STATE_MACHINE_FUNC Func) ++void StateMachineSetAction(IN STATE_MACHINE * S, ++ unsigned long St, ++ unsigned long Msg, IN STATE_MACHINE_FUNC Func) + { +- ULONG MsgIdx; ++ unsigned long MsgIdx; + + MsgIdx = Msg - S->Base; + +@@ -5158,7 +5158,7 @@ VOID StateMachineSetAction(IN STATE_MACHINE * S, + IRQL = DISPATCH_LEVEL + + */ +-VOID StateMachinePerformAction(IN PRTMP_ADAPTER pAd, ++void StateMachinePerformAction(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem) + { + (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base])) +@@ -5173,7 +5173,7 @@ VOID StateMachinePerformAction(IN PRTMP_ADAPTER pAd, + StateMachinePerformAction() + ========================================================================== + */ +-VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + } + +@@ -5189,7 +5189,7 @@ VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID LfsrInit(IN PRTMP_ADAPTER pAd, IN ULONG Seed) ++void LfsrInit(IN PRTMP_ADAPTER pAd, unsigned long Seed) + { + if (Seed == 0) + pAd->Mlme.ShiftReg = 1; +@@ -5202,15 +5202,15 @@ VOID LfsrInit(IN PRTMP_ADAPTER pAd, IN ULONG Seed) + Description: + ========================================================================== + */ +-UCHAR RandomByte(IN PRTMP_ADAPTER pAd) ++u8 RandomByte(IN PRTMP_ADAPTER pAd) + { +- ULONG i; +- UCHAR R, Result; ++ unsigned long i; ++ u8 R, Result; + + R = 0; + + if (pAd->Mlme.ShiftReg == 0) +- NdisGetSystemUpTime((ULONG *) & pAd->Mlme.ShiftReg); ++ NdisGetSystemUpTime((unsigned long *) & pAd->Mlme.ShiftReg); + + for (i = 0; i < 8; i++) { + if (pAd->Mlme.ShiftReg & 0x00000001) { +@@ -5244,11 +5244,11 @@ UCHAR RandomByte(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], IN OUT UCHAR * SupRateLen) ++void RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++ IN u8 SupRate[], IN u8 * SupRateLen) + { +- UCHAR RateIdx, i, j; +- UCHAR NewRate[12], NewRateLen; ++ u8 RateIdx, i, j; ++ u8 NewRate[12], NewRateLen; + + NewRateLen = 0; + +@@ -5268,11 +5268,11 @@ VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, + } + + BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, IN UCHAR Channel) ++ u8 CentralChannel, u8 Channel) + { +- UCHAR k; +- UCHAR UpperChannel = 0, LowerChannel = 0; +- UCHAR NoEffectChannelinList = 0; ++ u8 k; ++ u8 UpperChannel = 0, LowerChannel = 0; ++ u8 NoEffectChannelinList = 0; + + /* Find upper and lower channel according to 40MHz current operation. */ + if (CentralChannel < Channel) { +@@ -5321,7 +5321,7 @@ BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, ++ u8 Wcid, + IN HT_CAPABILITY_IE * pHtCapability, + IN ADD_HT_INFO_IE * pAddHtInfo) + { +@@ -5449,11 +5449,11 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) ++void RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + { +- UCHAR MinimumRate; +- UCHAR ProperMlmeRate; /*= RATE_54; */ +- UCHAR i, j, RateIdx = 12; /*1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ ++ u8 MinimumRate; ++ u8 ProperMlmeRate; /*= RATE_54; */ ++ u8 i, j, RateIdx = 12; /*1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ + BOOLEAN bMatch = FALSE; + + switch (pAd->CommonCfg.PhyMode) { +@@ -5558,10 +5558,10 @@ VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.MlmeTransmit.word)); + } + +-CHAR RTMPMaxRssi(IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2) ++char RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++ char Rssi0, char Rssi1, char Rssi2) + { +- CHAR larger = -127; ++ char larger = -127; + + if ((pAd->Antenna.field.RxPath == 1) && (Rssi0 != 0)) { + larger = Rssi0; +@@ -5594,9 +5594,9 @@ CHAR RTMPMaxRssi(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) ++void AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + { +- UCHAR BBPR3 = 0; ++ u8 BBPR3 = 0; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | +@@ -5638,7 +5638,7 @@ VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + if (OPSTATUS_TEST_FLAG + (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + ) { +- ULONG TxTotalCnt = ++ unsigned long TxTotalCnt = + pAd->RalinkCounters.OneSecTxNoRetryOkCount + + pAd->RalinkCounters.OneSecTxRetryOkCount + + pAd->RalinkCounters.OneSecTxFailCount; +@@ -5673,13 +5673,13 @@ VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void AsicRxAntEvalTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; +- UCHAR BBPR3 = 0; +- CHAR larger = -127, rssi0, rssi1, rssi2; ++ u8 BBPR3 = 0; ++ char larger = -127, rssi0, rssi1, rssi2; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS | + fRTMP_ADAPTER_HALT_IN_PROGRESS | +@@ -5745,9 +5745,9 @@ VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, + + } + +-VOID APSDPeriodicExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void APSDPeriodicExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -5784,7 +5784,7 @@ VOID APSDPeriodicExec(IN PVOID SystemSpecific1, + + ======================================================================== + */ +-VOID RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack) ++void RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack) + { + TX_LINK_CFG_STRUC TxLinkCfg; + +@@ -5850,13 +5850,13 @@ BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-UCHAR RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) ++u8 RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) + { +- UCHAR tx_mode = FIXED_TXMODE_HT; ++ u8 tx_mode = FIXED_TXMODE_HT; + + { + tx_mode = +- (UCHAR) pAd->StaCfg.DesiredTransmitSetting.field. ++ (u8)pAd->StaCfg.DesiredTransmitSetting.field. + FixedTxMode; + } + +@@ -5878,7 +5878,7 @@ UCHAR RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) + + ======================================================================== + */ +-VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) ++void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + { + HTTRANSMIT_SETTING TransmitSetting; + +@@ -5921,10 +5921,10 @@ VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + + ========================================================================== + */ +-VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) ++void AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + { +- UCHAR OrigR66Value = 0, R66; /*, R66UpperBound = 0x30, R66LowerBound = 0x30; */ +- CHAR Rssi; ++ u8 OrigR66Value = 0, R66; /*, R66UpperBound = 0x30, R66LowerBound = 0x30; */ ++ char Rssi; + + /* 2860C did not support Fase CCA, therefore can't tune */ + if (pAd->MACVersion == 0x28600100) +@@ -6033,9 +6033,9 @@ VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + } + } + +-VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth) ++void RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, u8 BandWidth) + { +- UCHAR R66 = 0x30; ++ u8 R66 = 0x30; + + if (pAd->LatchRfRegs.Channel <= 14) { /* BG band */ + #ifdef RT30xx +@@ -6055,12 +6055,12 @@ VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth) + { + if (BandWidth == BW_20) { + R66 = +- (UCHAR) (0x32 + ++ (u8)(0x32 + + (GET_LNA_GAIN(pAd) * 5) / 3); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } else { + R66 = +- (UCHAR) (0x3A + ++ (u8)(0x3A + + (GET_LNA_GAIN(pAd) * 5) / 3); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66); + } +diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c +index 0af7e6b..3fe5d97 100644 +--- a/drivers/staging/rt2860/common/rt_channel.c ++++ b/drivers/staging/rt2860/common/rt_channel.c +@@ -144,7 +144,7 @@ CH_FREQ_MAP CH_HZ_ID_MAP[] = { + , /* Japan, means J16 */ + }; + +-INT CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(CH_FREQ_MAP)); ++int CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(CH_FREQ_MAP)); + + CH_REGION ChRegion[] = { + { /* Antigua and Berbuda */ +@@ -1422,14 +1422,14 @@ CH_REGION ChRegion[] = { + , + }; + +-static PCH_REGION GetChRegion(IN PUCHAR CntryCode) ++static PCH_REGION GetChRegion(u8 *CntryCode) + { +- INT loop = 0; ++ int loop = 0; + PCH_REGION pChRegion = NULL; + +- while (strcmp((PSTRING) ChRegion[loop].CountReg, "") != 0) { ++ while (strcmp((char *)ChRegion[loop].CountReg, "") != 0) { + if (strncmp +- ((PSTRING) ChRegion[loop].CountReg, (PSTRING) CntryCode, ++ ((char *)ChRegion[loop].CountReg, (char *)CntryCode, + 2) == 0) { + pChRegion = &ChRegion[loop]; + break; +@@ -1442,7 +1442,7 @@ static PCH_REGION GetChRegion(IN PUCHAR CntryCode) + return pChRegion; + } + +-static VOID ChBandCheck(IN UCHAR PhyMode, OUT PUCHAR pChType) ++static void ChBandCheck(u8 PhyMode, u8 *pChType) + { + switch (PhyMode) { + case PHY_11A: +@@ -1461,12 +1461,12 @@ static VOID ChBandCheck(IN UCHAR PhyMode, OUT PUCHAR pChType) + } + } + +-static UCHAR FillChList(IN PRTMP_ADAPTER pAd, ++static u8 FillChList(IN PRTMP_ADAPTER pAd, + IN PCH_DESP pChDesp, +- IN UCHAR Offset, IN UCHAR increment) ++ u8 Offset, u8 increment) + { +- INT i, j, l; +- UCHAR channel; ++ int i, j, l; ++ u8 channel; + + j = Offset; + for (i = 0; i < pChDesp->NumOfCh; i++) { +@@ -1494,14 +1494,14 @@ static UCHAR FillChList(IN PRTMP_ADAPTER pAd, + return j; + } + +-static inline VOID CreateChList(IN PRTMP_ADAPTER pAd, +- IN PCH_REGION pChRegion, IN UCHAR Geography) ++static inline void CreateChList(IN PRTMP_ADAPTER pAd, ++ IN PCH_REGION pChRegion, u8 Geography) + { +- INT i; +- UCHAR offset = 0; ++ int i; ++ u8 offset = 0; + PCH_DESP pChDesp; +- UCHAR ChType; +- UCHAR increment; ++ u8 ChType; ++ u8 increment; + + if (pChRegion == NULL) + return; +@@ -1532,7 +1532,7 @@ static inline VOID CreateChList(IN PRTMP_ADAPTER pAd, + } + } + +-VOID BuildChannelListEx(IN PRTMP_ADAPTER pAd) ++void BuildChannelListEx(IN PRTMP_ADAPTER pAd) + { + PCH_REGION pChReg; + +@@ -1540,14 +1540,14 @@ VOID BuildChannelListEx(IN PRTMP_ADAPTER pAd) + CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); + } + +-VOID BuildBeaconChList(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, OUT PULONG pBufLen) ++void BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++ u8 *pBuf, unsigned long *pBufLen) + { +- INT i; +- ULONG TmpLen; ++ int i; ++ unsigned long TmpLen; + PCH_REGION pChRegion; + PCH_DESP pChDesp; +- UCHAR ChType; ++ u8 ChType; + + pChRegion = GetChRegion(pAd->CommonCfg.CountryCode); + +@@ -1581,9 +1581,9 @@ VOID BuildBeaconChList(IN PRTMP_ADAPTER pAd, + } + } + +-static BOOLEAN IsValidChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) ++static BOOLEAN IsValidChannel(IN PRTMP_ADAPTER pAd, u8 channel) + { +- INT i; ++ int i; + + for (i = 0; i < pAd->ChannelListNum; i++) { + if (pAd->ChannelList[i].Channel == channel) +@@ -1596,9 +1596,9 @@ static BOOLEAN IsValidChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel) + return TRUE; + } + +-static UCHAR GetExtCh(IN UCHAR Channel, IN UCHAR Direction) ++static u8 GetExtCh(u8 Channel, u8 Direction) + { +- CHAR ExtCh; ++ char ExtCh; + + if (Direction == EXTCHA_ABOVE) + ExtCh = Channel + 4; +@@ -1608,10 +1608,10 @@ static UCHAR GetExtCh(IN UCHAR Channel, IN UCHAR Direction) + return ExtCh; + } + +-VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) ++void N_ChannelCheck(IN PRTMP_ADAPTER pAd) + { +- /*UCHAR ChannelNum = pAd->ChannelListNum; */ +- UCHAR Channel = pAd->CommonCfg.Channel; ++ /*u8 ChannelNum = pAd->ChannelListNum; */ ++ u8 Channel = pAd->CommonCfg.Channel; + + if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + && (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)) { +@@ -1638,8 +1638,8 @@ VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) + } + } else { + do { +- UCHAR ExtCh; +- UCHAR Dir = ++ u8 ExtCh; ++ u8 Dir = + pAd->CommonCfg.RegTransmitSetting.field. + EXTCHA; + ExtCh = GetExtCh(Channel, Dir); +@@ -1670,7 +1670,7 @@ VOID N_ChannelCheck(IN PRTMP_ADAPTER pAd) + + } + +-VOID N_SetCenCh(IN PRTMP_ADAPTER pAd) ++void N_SetCenCh(IN PRTMP_ADAPTER pAd) + { + if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) { + if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == +@@ -1690,7 +1690,7 @@ VOID N_SetCenCh(IN PRTMP_ADAPTER pAd) + } + } + +-UINT8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 channel) ++u8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, u8 channel) + { + int i; + for (i = 0; i < pAd->ChannelListNum; i++) { +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index 8b5be17..6d6ca32 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -53,11 +53,11 @@ + + ======================================================================== + */ +-NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, IN UCHAR value) ++int RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++ u8 regID, u8 value) + { + RF_CSR_CFG_STRUC rfcsr; +- UINT i = 0; ++ u32 i = 0; + + do { + RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); +@@ -101,11 +101,11 @@ NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, IN PUCHAR pValue) ++int RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++ u8 regID, u8 *pValue) + { + RF_CSR_CFG_STRUC rfcsr; +- UINT i = 0, k = 0; ++ u32 i = 0, k = 0; + + for (i = 0; i < MAX_BUSY_COUNT; i++) { + RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word); +@@ -126,7 +126,7 @@ NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, + } + if ((rfcsr.field.RF_CSR_KICK == IDLE) && + (rfcsr.field.TESTCSR_RFACC_REGNUM == regID)) { +- *pValue = (UCHAR) rfcsr.field.RF_CSR_DATA; ++ *pValue = (u8)rfcsr.field.RF_CSR_DATA; + break; + } + } +@@ -139,13 +139,13 @@ NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, + return STATUS_SUCCESS; + } + +-VOID NICInitRFRegisters(IN RTMP_ADAPTER * pAd) ++void NICInitRFRegisters(IN RTMP_ADAPTER * pAd) + { + if (pAd->chipOps.AsicRfInit) + pAd->chipOps.AsicRfInit(pAd); + } + +-VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) ++void RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 0a95870..5735dd7 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -36,7 +36,7 @@ + */ + #include "../rt_config.h" + +-UCHAR BIT8[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; ++u8 BIT8[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; + char *CipherName[] = + { "none", "wep64", "wep128", "TKIP", "AES", "CKIP64", "CKIP128" }; + +@@ -152,13 +152,13 @@ RTMP_REG_PAIR STAMACRegTable[] = { + + ======================================================================== + */ +-NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, ++int RTMPAllocAdapterBlock(void *handle, + OUT PRTMP_ADAPTER * ppAdapter) + { + PRTMP_ADAPTER pAd; +- NDIS_STATUS Status; +- INT index; +- UCHAR *pBeaconBuf = NULL; ++ int Status; ++ int index; ++ u8 *pBeaconBuf = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocAdapterBlock\n")); + +@@ -174,7 +174,7 @@ NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + } + NdisZeroMemory(pBeaconBuf, MAX_BEACON_SIZE); + +- Status = AdapterBlockAllocateMemory(handle, (PVOID *) & pAd); ++ Status = AdapterBlockAllocateMemory(handle, (void **) & pAd); + if (Status != NDIS_STATUS_SUCCESS) { + DBGPRINT_ERR(("Failed to allocate memory - ADAPTER\n")); + break; +@@ -182,7 +182,7 @@ NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + pAd->BeaconBuf = pBeaconBuf; + DBGPRINT(RT_DEBUG_OFF, + ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, +- (UINT32) sizeof(RTMP_ADAPTER))); ++ (u32)sizeof(RTMP_ADAPTER))); + + /* Init spin locks */ + NdisAllocateSpinLock(&pAd->MgmtRingLock); +@@ -230,12 +230,12 @@ NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, + + ======================================================================== + */ +-VOID RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) ++void RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + { +- ULONG data, Adata, Gdata; +- USHORT i, value, value2; +- INT Apwrdelta, Gpwrdelta; +- UCHAR t1, t2, t3, t4; ++ unsigned long data, Adata, Gdata; ++ u16 i, value, value2; ++ int Apwrdelta, Gpwrdelta; ++ u8 t1, t2, t3, t4; + BOOLEAN bApwrdeltaMinus = TRUE, bGpwrdeltaMinus = TRUE; + + /* */ +@@ -441,9 +441,9 @@ VOID RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) ++void RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + { +- UCHAR i, choffset; ++ u8 i, choffset; + EEPROM_TX_PWR_STRUC Power; + EEPROM_TX_PWR_STRUC Power2; + +@@ -650,10 +650,10 @@ VOID RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NDIS_STATUS NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++int NICReadRegParameters(IN PRTMP_ADAPTER pAd, + IN NDIS_HANDLE WrapperConfigurationContext) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ int Status = NDIS_STATUS_SUCCESS; + DBGPRINT_S(Status, ("<-- NICReadRegParameters, Status=%x\n", Status)); + return Status; + } +@@ -676,11 +676,11 @@ NDIS_STATUS NICReadRegParameters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) ++void NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, u8 *mac_addr) + { +- UINT32 data = 0; +- USHORT i, value, value2; +- UCHAR TmpPhy; ++ u32 data = 0; ++ u16 i, value, value2; ++ u8 TmpPhy; + EEPROM_TX_PWR_STRUC Power; + EEPROM_VERSION_STRUC Version; + EEPROM_ANTENNA_STRUC Antenna; +@@ -707,29 +707,29 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + /* RT2860 MAC no longer auto load MAC address from E2PROM. Driver has to intialize */ + /* MAC address registers according to E2PROM setting */ + if (mac_addr == NULL || +- strlen((PSTRING) mac_addr) != 17 || ++ strlen((char *)mac_addr) != 17 || + mac_addr[2] != ':' || mac_addr[5] != ':' || mac_addr[8] != ':' || + mac_addr[11] != ':' || mac_addr[14] != ':') { +- USHORT Addr01, Addr23, Addr45; ++ u16 Addr01, Addr23, Addr45; + + RT28xx_EEPROM_READ16(pAd, 0x04, Addr01); + RT28xx_EEPROM_READ16(pAd, 0x06, Addr23); + RT28xx_EEPROM_READ16(pAd, 0x08, Addr45); + +- pAd->PermanentAddress[0] = (UCHAR) (Addr01 & 0xff); +- pAd->PermanentAddress[1] = (UCHAR) (Addr01 >> 8); +- pAd->PermanentAddress[2] = (UCHAR) (Addr23 & 0xff); +- pAd->PermanentAddress[3] = (UCHAR) (Addr23 >> 8); +- pAd->PermanentAddress[4] = (UCHAR) (Addr45 & 0xff); +- pAd->PermanentAddress[5] = (UCHAR) (Addr45 >> 8); ++ pAd->PermanentAddress[0] = (u8)(Addr01 & 0xff); ++ pAd->PermanentAddress[1] = (u8)(Addr01 >> 8); ++ pAd->PermanentAddress[2] = (u8)(Addr23 & 0xff); ++ pAd->PermanentAddress[3] = (u8)(Addr23 >> 8); ++ pAd->PermanentAddress[4] = (u8)(Addr45 & 0xff); ++ pAd->PermanentAddress[5] = (u8)(Addr45 >> 8); + + DBGPRINT(RT_DEBUG_TRACE, + ("Initialize MAC Address from E2PROM \n")); + } else { +- INT j; +- PSTRING macptr; ++ int j; ++ char *macptr; + +- macptr = (PSTRING) mac_addr; ++ macptr = (char *)mac_addr; + + for (j = 0; j < MAC_ADDR_LEN; j++) { + AtoH(macptr, &pAd->PermanentAddress[j], 1); +@@ -898,15 +898,15 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->Antenna.word = Antenna.word; + + /* Set the RfICType here, then we can initialize RFIC related operation callbacks */ +- pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; +- pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; ++ pAd->Mlme.RealRxPath = (u8)Antenna.field.RxPath; ++ pAd->RfIcType = (u8)Antenna.field.RfIcType; + + #ifdef RTMP_RF_RW_SUPPORT + RtmpChipOpsRFHook(pAd); + #endif /* RTMP_RF_RW_SUPPORT // */ + + #ifdef RTMP_MAC_PCI +- sprintf((PSTRING) pAd->nickname, "RT2860STA"); ++ sprintf((char *)pAd->nickname, "RT2860STA"); + #endif /* RTMP_MAC_PCI // */ + + /* */ +@@ -1005,7 +1005,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + /* Read frequency offset setting for RF */ + RT28xx_EEPROM_READ16(pAd, EEPROM_FREQ_OFFSET, value); + if ((value & 0x00FF) != 0x00FF) +- pAd->RfFreqOffset = (ULONG) (value & 0x00FF); ++ pAd->RfFreqOffset = (unsigned long)(value & 0x00FF); + else + pAd->RfFreqOffset = 0; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1017,8 +1017,8 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + + if ((value <= REGION_MAXIMUM_BG_BAND) + && (value2 <= REGION_MAXIMUM_A_BAND)) { +- pAd->CommonCfg.CountryRegion = ((UCHAR) value) | 0x80; +- pAd->CommonCfg.CountryRegionForABand = ((UCHAR) value2) | 0x80; ++ pAd->CommonCfg.CountryRegion = ((u8)value) | 0x80; ++ pAd->CommonCfg.CountryRegionForABand = ((u8)value2) | 0x80; + TmpPhy = pAd->CommonCfg.PhyMode; + pAd->CommonCfg.PhyMode = 0xff; + RTMPSetPhyMode(pAd, TmpPhy); +@@ -1057,9 +1057,9 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + pAd->ARssiOffset2 = value & 0x00ff; + pAd->ALNAGain2 = (value >> 8); + +- if (((UCHAR) pAd->ALNAGain1 == 0xFF) || (pAd->ALNAGain1 == 0x00)) ++ if (((u8)pAd->ALNAGain1 == 0xFF) || (pAd->ALNAGain1 == 0x00)) + pAd->ALNAGain1 = pAd->ALNAGain0; +- if (((UCHAR) pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) ++ if (((u8)pAd->ALNAGain2 == 0xFF) || (pAd->ALNAGain2 == 0x00)) + pAd->ALNAGain2 = pAd->ALNAGain0; + + /* Validate 11a RSSI_0 offset. */ +@@ -1087,7 +1087,7 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + value &= 0x00ff; + if (value != 0xff) { + value &= 0x07; +- pAd->TxMixerGain24G = (UCHAR) value; ++ pAd->TxMixerGain24G = (u8)value; + } + } + #endif /* RT30xx // */ +@@ -1133,23 +1133,23 @@ VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr) + + ======================================================================== + */ +-VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) ++void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + { +- UINT32 data = 0; +- UCHAR BBPR1 = 0; +- USHORT i; ++ u32 data = 0; ++ u8 BBPR1 = 0; ++ u16 i; + /* EEPROM_ANTENNA_STRUC Antenna; */ + EEPROM_NIC_CONFIG2_STRUC NicConfig2; +- UCHAR BBPR3 = 0; ++ u8 BBPR3 = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitAsicFromEEPROM\n")); + for (i = 3; i < NUM_EEPROM_BBP_PARMS; i++) { +- UCHAR BbpRegIdx, BbpValue; ++ u8 BbpRegIdx, BbpValue; + + if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) + && (pAd->EEPROMDefaultValue[i] != 0)) { +- BbpRegIdx = (UCHAR) (pAd->EEPROMDefaultValue[i] >> 8); +- BbpValue = (UCHAR) (pAd->EEPROMDefaultValue[i] & 0xff); ++ BbpRegIdx = (u8)(pAd->EEPROMDefaultValue[i] >> 8); ++ BbpValue = (u8)(pAd->EEPROMDefaultValue[i] & 0xff); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BbpRegIdx, BbpValue); + } + } +@@ -1191,12 +1191,12 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + #endif /* RTMP_MAC_USB // */ + } + +- AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR) pAd->Led1, +- (UCHAR) (pAd->Led1 >> 8)); +- AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR) pAd->Led2, +- (UCHAR) (pAd->Led2 >> 8)); +- AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR) pAd->Led3, +- (UCHAR) (pAd->Led3 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x52, 0xff, (u8)pAd->Led1, ++ (u8)(pAd->Led1 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x53, 0xff, (u8)pAd->Led2, ++ (u8)(pAd->Led2 >> 8)); ++ AsicSendCommandToMcu(pAd, 0x54, 0xff, (u8)pAd->Led3, ++ (u8)(pAd->Led3 >> 8)); + AsicSendCommandToMcu(pAd, 0x51, 0xff, 0, pAd->LedCntl.field.Polarity); + + pAd->LedIndicatorStrength = 0xFF; +@@ -1306,16 +1306,16 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + /* update registers from EEPROM for RT3071 or later(3572/3592). */ + + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { +- UCHAR RegIdx, RegValue; +- USHORT value; ++ u8 RegIdx, RegValue; ++ u16 value; + + /* after RT3071, write BBP from EEPROM 0xF0 to 0x102 */ + for (i = 0xF0; i <= 0x102; i = i + 2) { + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); + if ((value != 0xFFFF) && (value != 0)) { +- RegIdx = (UCHAR) (value >> 8); +- RegValue = (UCHAR) (value & 0xff); ++ RegIdx = (u8)(value >> 8); ++ RegValue = (u8)(value & 0xff); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, RegIdx, + RegValue); + DBGPRINT(RT_DEBUG_TRACE, +@@ -1329,8 +1329,8 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + value = 0xFFFF; + RT28xx_EEPROM_READ16(pAd, i, value); + if ((value != 0xFFFF) && (value != 0)) { +- RegIdx = (UCHAR) (value >> 8); +- RegValue = (UCHAR) (value & 0xff); ++ RegIdx = (u8)(value >> 8); ++ RegValue = (u8)(value & 0xff); + RT30xxWriteRFRegister(pAd, RegIdx, RegValue); + DBGPRINT(RT_DEBUG_TRACE, + ("Update RF Registers from EEPROM0x%x), BBP(0x%x) = 0x%x\n", +@@ -1366,16 +1366,16 @@ VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NDIS_STATUS NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) ++int NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + { +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; ++ int Status = NDIS_STATUS_SUCCESS; + WPDMA_GLO_CFG_STRUC GloCfg; + #ifdef RTMP_MAC_PCI +- UINT32 Value; ++ u32 Value; + DELAY_INT_CFG_STRUC IntCfg; + #endif /* RTMP_MAC_PCI // */ + /* INT_MASK_CSR_STRUC IntMask; */ +- ULONG i = 0, j = 0; ++ unsigned long i = 0, j = 0; + AC_TXOP_CSR0_STRUC csr0; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n")); +@@ -1562,22 +1562,22 @@ retry: + + ======================================================================== + */ +-NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) ++int NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + { +- ULONG Index = 0; +- UCHAR R0 = 0xff; +- UINT32 MacCsr12 = 0, Counter = 0; ++ unsigned long Index = 0; ++ u8 R0 = 0xff; ++ u32 MacCsr12 = 0, Counter = 0; + #ifdef RTMP_MAC_USB +- UINT32 MacCsr0 = 0; +- NTSTATUS Status; +- UCHAR Value = 0xff; ++ u32 MacCsr0 = 0; ++ int Status; ++ u8 Value = 0xff; + #endif /* RTMP_MAC_USB // */ + #ifdef RT30xx +- UCHAR bbpreg = 0; +- UCHAR RFValue = 0; ++ u8 bbpreg = 0; ++ u8 RFValue = 0; + #endif /* RT30xx // */ +- USHORT KeyIdx; +- INT i, apidx; ++ u16 KeyIdx; ++ int i, apidx; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n")); + +@@ -1642,14 +1642,14 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + MACRegTable[Index].Value = 0x00000400; + } + #endif /* RT30xx // */ +- RTMP_IO_WRITE32(pAd, (USHORT) MACRegTable[Index].Register, ++ RTMP_IO_WRITE32(pAd, (u16)MACRegTable[Index].Register, + MACRegTable[Index].Value); + } + + { + for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++) { + RTMP_IO_WRITE32(pAd, +- (USHORT) STAMACRegTable[Index].Register, ++ (u16)STAMACRegTable[Index].Register, + STAMACRegTable[Index].Value); + } + } +@@ -1726,8 +1726,8 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + #ifdef RTMP_MAC_PCI + /* TODO: shiang, check MACVersion, currently, rbus-based chip use this. */ + if (pAd->MACVersion == 0x28720200) { +- /*UCHAR value; */ +- ULONG value2; ++ /*u8 value; */ ++ unsigned long value2; + + /*disable MLD by Bruce 20080704 */ + /*BBP_IO_READ8_BY_REG_ID(pAd, BBP_R105, &value); */ +@@ -1816,7 +1816,7 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) /* 3*3 */ + { + /* enlarge MAX_LEN_CFG */ +- UINT32 csr; ++ u32 csr; + RTMP_IO_READ32(pAd, MAX_LEN_CFG, &csr); + csr &= 0xFFF; + csr |= 0x2000; +@@ -1824,14 +1824,14 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + } + #ifdef RTMP_MAC_USB + { +- UCHAR MAC_Value[] = ++ u8 MAC_Value[] = + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0 }; + + /*Initialize WCID table */ + Value = 0xff; + for (Index = 0; Index < 254; Index++) { + RTUSBMultiWrite(pAd, +- (USHORT) (MAC_WCID_BASE + Index * 8), ++ (u16)(MAC_WCID_BASE + Index * 8), + MAC_Value, 8); + } + } +@@ -1929,9 +1929,9 @@ NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + + ======================================================================== + */ +-VOID NICIssueReset(IN PRTMP_ADAPTER pAd) ++void NICIssueReset(IN PRTMP_ADAPTER pAd) + { +- UINT32 Value = 0; ++ u32 Value = 0; + DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); + + /* Abort Tx, prevent ASIC from writing to Host memory */ +@@ -1970,14 +1970,14 @@ BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd) + return (FALSE); + } + +-VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) ++void NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + { + TX_STA_FIFO_STRUC StaFifo; + MAC_TABLE_ENTRY *pEntry; +- UCHAR i = 0; +- UCHAR pid = 0, wcid = 0; +- CHAR reTry; +- UCHAR succMCS; ++ u8 i = 0; ++ u8 pid = 0, wcid = 0; ++ char reTry; ++ u8 succMCS; + + do { + RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word); +@@ -1985,7 +1985,7 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + if (StaFifo.field.bValid == 0) + break; + +- wcid = (UCHAR) StaFifo.field.wcid; ++ wcid = (u8)StaFifo.field.wcid; + + /* ignore NoACK and MGMT frame use 0xFF as WCID */ + if ((StaFifo.field.TxAckRequired == 0) +@@ -1995,7 +1995,7 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + } + + /* PID store Tx MCS Rate */ +- pid = (UCHAR) StaFifo.field.PidType; ++ pid = (u8)StaFifo.field.PidType; + + pEntry = &pAd->MacTab.Content[wcid]; + +@@ -2094,11 +2094,11 @@ VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) ++void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + { +- UINT32 OldValue; /*, Value2; */ +- /*ULONG PageSum, OneSecTransmitCount; */ +- /*ULONG TxErrorRatio, Retry, Fail; */ ++ u32 OldValue; /*, Value2; */ ++ /*unsigned long PageSum, OneSecTransmitCount; */ ++ /*unsigned long TxErrorRatio, Retry, Fail; */ + RX_STA_CNT0_STRUC RxStaCnt0; + RX_STA_CNT1_STRUC RxStaCnt1; + RX_STA_CNT2_STRUC RxStaCnt2; +@@ -2299,7 +2299,7 @@ VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID NICResetFromError(IN PRTMP_ADAPTER pAd) ++void NICResetFromError(IN PRTMP_ADAPTER pAd) + { + /* Reset BBP (according to alex, reset ASIC will force reset BBP */ + /* Therefore, skip the reset BBP */ +@@ -2317,9 +2317,9 @@ VOID NICResetFromError(IN PRTMP_ADAPTER pAd) + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } + +-NDIS_STATUS NICLoadFirmware(IN PRTMP_ADAPTER pAd) ++int NICLoadFirmware(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS status = NDIS_STATUS_SUCCESS; ++ int status = NDIS_STATUS_SUCCESS; + if (pAd->chipOps.loadFirmware) + status = pAd->chipOps.loadFirmware(pAd); + +@@ -2339,7 +2339,7 @@ NDIS_STATUS NICLoadFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID NICEraseFirmware(IN PRTMP_ADAPTER pAd) ++void NICEraseFirmware(IN PRTMP_ADAPTER pAd) + { + if (pAd->chipOps.eraseFirmware) + pAd->chipOps.eraseFirmware(pAd); +@@ -2367,7 +2367,7 @@ VOID NICEraseFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd) ++int NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd) + { + return NDIS_STATUS_SUCCESS; + } +@@ -2393,14 +2393,14 @@ NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length) ++unsigned long RTMPCompareMemory(void *pSrc1, void *pSrc2, unsigned long Length) + { +- PUCHAR pMem1; +- PUCHAR pMem2; +- ULONG Index = 0; ++ u8 *pMem1; ++ u8 *pMem2; ++ unsigned long Index = 0; + +- pMem1 = (PUCHAR) pSrc1; +- pMem2 = (PUCHAR) pSrc2; ++ pMem1 = (u8 *)pSrc1; ++ pMem2 = (u8 *)pSrc2; + + for (Index = 0; Index < Length; Index++) { + if (pMem1[Index] > pMem2[Index]) +@@ -2433,12 +2433,12 @@ ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length) + + ======================================================================== + */ +-VOID RTMPZeroMemory(IN PVOID pSrc, IN ULONG Length) ++void RTMPZeroMemory(void *pSrc, unsigned long Length) + { +- PUCHAR pMem; +- ULONG Index = 0; ++ u8 *pMem; ++ unsigned long Index = 0; + +- pMem = (PUCHAR) pSrc; ++ pMem = (u8 *)pSrc; + + for (Index = 0; Index < Length; Index++) { + pMem[Index] = 0x00; +@@ -2466,16 +2466,16 @@ VOID RTMPZeroMemory(IN PVOID pSrc, IN ULONG Length) + + ======================================================================== + */ +-VOID RTMPMoveMemory(OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length) ++void RTMPMoveMemory(void *pDest, void *pSrc, unsigned long Length) + { +- PUCHAR pMem1; +- PUCHAR pMem2; +- UINT Index; ++ u8 *pMem1; ++ u8 *pMem2; ++ u32 Index; + + ASSERT((Length == 0) || (pDest && pSrc)); + +- pMem1 = (PUCHAR) pDest; +- pMem2 = (PUCHAR) pSrc; ++ pMem1 = (u8 *)pDest; ++ pMem2 = (u8 *)pSrc; + + for (Index = 0; Index < Length; Index++) { + pMem1[Index] = pMem2[Index]; +@@ -2500,9 +2500,9 @@ VOID RTMPMoveMemory(OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length) + + ======================================================================== + */ +-VOID UserCfgInit(IN PRTMP_ADAPTER pAd) ++void UserCfgInit(IN PRTMP_ADAPTER pAd) + { +- UINT key_index, bss_index; ++ u32 key_index, bss_index; + + DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit\n")); + +@@ -2703,7 +2703,7 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + + /* PHY specification */ + pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; /* default PHY mode */ +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); /* CCK use LONG preamble */ ++ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); /* CCK use long preamble */ + + { + /* user desired power mode */ +@@ -2736,10 +2736,10 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + + NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE + 1); + #ifdef RTMP_MAC_PCI +- sprintf((PSTRING) pAd->nickname, "RT2860STA"); ++ sprintf((char *)pAd->nickname, "RT2860STA"); + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- sprintf((PSTRING) pAd->nickname, "RT2870STA"); ++ sprintf((char *)pAd->nickname, "RT2870STA"); + #endif /* RTMP_MAC_USB // */ + RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, + GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), +@@ -2810,7 +2810,7 @@ VOID UserCfgInit(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = PASSIVE_LEVEL */ +-UCHAR BtoH(STRING ch) ++u8 BtoH(char ch) + { + if (ch >= '0' && ch <= '9') + return (ch - '0'); /* Handle numerals */ +@@ -2822,7 +2822,7 @@ UCHAR BtoH(STRING ch) + } + + /* */ +-/* FUNCTION: AtoH(char *, UCHAR *, int) */ ++/* FUNCTION: AtoH(char *, u8 *, int) */ + /* */ + /* PURPOSE: Converts ascii string to network order hex */ + /* */ +@@ -2838,13 +2838,13 @@ UCHAR BtoH(STRING ch) + /* */ + /* IRQL = PASSIVE_LEVEL */ + +-void AtoH(PSTRING src, PUCHAR dest, int destlen) ++void AtoH(char *src, u8 *dest, int destlen) + { +- PSTRING srcptr; +- PUCHAR destTemp; ++ char *srcptr; ++ u8 *destTemp; + + srcptr = src; +- destTemp = (PUCHAR) dest; ++ destTemp = (u8 *)dest; + + while (destlen--) { + *destTemp = BtoH(*srcptr++) << 4; /* Put 1st ascii byte in upper nibble. */ +@@ -2875,9 +2875,9 @@ void AtoH(PSTRING src, PUCHAR dest, int destlen) + + ======================================================================== + */ +-VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, ++void RTMPInitTimer(IN PRTMP_ADAPTER pAd, + IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat) ++ void *pTimerFunc, void *pData, IN BOOLEAN Repeat) + { + /* */ + /* Set Valid to TRUE for later used. */ +@@ -2888,13 +2888,13 @@ VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, + + pTimer->PeriodicType = Repeat; + pTimer->State = FALSE; +- pTimer->cookie = (ULONG) pData; ++ pTimer->cookie = (unsigned long)pData; + + #ifdef RTMP_TIMER_TASK_SUPPORT + pTimer->pAd = pAd; + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + +- RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer); ++ RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (void *)pTimer); + } + + /* +@@ -2915,7 +2915,7 @@ VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) ++void RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) + { + if (pTimer->Valid) { + pTimer->TimerValue = Value; +@@ -2950,7 +2950,7 @@ VOID RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) + + ======================================================================== + */ +-VOID RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) ++void RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) + { + BOOLEAN Cancel; + +@@ -2989,7 +2989,7 @@ VOID RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value) + + ======================================================================== + */ +-VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) ++void RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + { + if (pTimer->Valid) { + if (pTimer->State == FALSE) +@@ -3030,11 +3030,11 @@ VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + + ======================================================================== + */ +-VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) ++void RTMPSetLED(IN PRTMP_ADAPTER pAd, u8 Status) + { +- /*ULONG data; */ +- UCHAR HighByte = 0; +- UCHAR LowByte; ++ /*unsigned long data; */ ++ u8 HighByte = 0; ++ u8 LowByte; + + LowByte = pAd->LedCntl.field.LedMode & 0x7f; + switch (Status) { +@@ -3117,9 +3117,9 @@ VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status) + > -57 Excellent + ======================================================================== + */ +-VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) ++void RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + { +- UCHAR nLed = 0; ++ u8 nLed = 0; + + if (pAd->LedCntl.field.LedMode == LED_MODE_SIGNAL_STREGTH) { + if (Dbm <= -90) +@@ -3164,11 +3164,11 @@ VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + Before Enable RX, make sure you have enabled Interrupt. + ======================================================================== + */ +-VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) ++void RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) + { + /* WPDMA_GLO_CFG_STRUC GloCfg; */ +-/* ULONG i = 0; */ +- UINT32 rx_filter_flag; ++/* unsigned long i = 0; */ ++ u32 rx_filter_flag; + + DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n")); + +@@ -3199,12 +3199,12 @@ void CfgInitHook(PRTMP_ADAPTER pAd) + } + + int rt28xx_init(IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, IN PSTRING pHostName) ++ char *pDefaultMac, char *pHostName) + { +- UINT index; +- UCHAR TmpPhy; +- NDIS_STATUS Status; +- UINT32 MacCsr0 = 0; ++ u32 index; ++ u8 TmpPhy; ++ int Status; ++ u32 MacCsr0 = 0; + + #ifdef RTMP_MAC_PCI + { +@@ -3346,20 +3346,20 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + /*Init Ba Capability parameters. */ + /* RT28XX_BA_INIT(pAd); */ + pAd->CommonCfg.DesiredHtPhy.MpduDensity = +- (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ (u8)pAd->CommonCfg.BACapability.field.MpduDensity; + pAd->CommonCfg.DesiredHtPhy.AmsduEnable = +- (USHORT) pAd->CommonCfg.BACapability.field.AmsduEnable; ++ (u16)pAd->CommonCfg.BACapability.field.AmsduEnable; + pAd->CommonCfg.DesiredHtPhy.AmsduSize = +- (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ (u16)pAd->CommonCfg.BACapability.field.AmsduSize; + pAd->CommonCfg.DesiredHtPhy.MimoPs = +- (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; ++ (u16)pAd->CommonCfg.BACapability.field.MMPSmode; + /* UPdata to HT IE */ + pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = +- (USHORT) pAd->CommonCfg.BACapability.field.MMPSmode; ++ (u16)pAd->CommonCfg.BACapability.field.MMPSmode; + pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = +- (USHORT) pAd->CommonCfg.BACapability.field.AmsduSize; ++ (u16)pAd->CommonCfg.BACapability.field.AmsduSize; + pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = +- (UCHAR) pAd->CommonCfg.BACapability.field.MpduDensity; ++ (u8)pAd->CommonCfg.BACapability.field.MpduDensity; + + /* after reading Registry, we now know if in AP mode or STA mode */ + +@@ -3371,7 +3371,7 @@ int rt28xx_init(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_OFF, ("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + + /* We should read EEPROM for all cases. rt2860b */ +- NICReadEEPROMParameters(pAd, (PUCHAR) pDefaultMac); ++ NICReadEEPROMParameters(pAd, (u8 *)pDefaultMac); + + DBGPRINT(RT_DEBUG_OFF, ("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode)); + +@@ -3476,7 +3476,7 @@ err0: + + /*---Add by shiang, move from os/linux/rt_main_dev.c */ + +-static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) ++static int RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, int infType) + { + RTMP_CHIP_OP *pChipOps = &pAd->chipOps; + int status; +@@ -3508,9 +3508,9 @@ static INT RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, IN INT infType) + return status; + } + +-INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) ++int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + { +- /*VOID *handle; */ ++ /*void *handle; */ + + /* Assign the interface type. We need use it when do register/EEPROM access. */ + pAd->infType = infType; +@@ -3521,7 +3521,7 @@ INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + + #ifdef RTMP_MAC_USB + init_MUTEX(&(pAd->UsbVendorReq_semaphore)); +- os_alloc_mem(pAd, (PUCHAR *) & pAd->UsbVendorReqBuf, ++ os_alloc_mem(pAd, (u8 **) & pAd->UsbVendorReqBuf, + MAX_PARAM_BUFFER_SIZE - 1); + if (pAd->UsbVendorReqBuf == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -3544,7 +3544,7 @@ BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) + } + + /* not yet support MBSS */ +-PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID) ++PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID) + { + PNET_DEV dev_p = NULL; + +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 09d46f7..3d69527 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -57,7 +57,7 @@ + + /* New 8k byte firmware size for RT3071/RT3072 */ + #define FIRMWAREIMAGE_MAX_LENGTH 0x2000 +-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR)) ++#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(u8)) + #define FIRMWARE_MAJOR_VERSION 0 + + #define FIRMWAREIMAGEV1_LENGTH 0x1000 +@@ -80,9 +80,9 @@ + + ======================================================================== + */ +-INT RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) ++int RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) + { +- ULONG i; ++ unsigned long i; + + for (i = 0; i < MAX_FIRMWARE_IMAGE_SIZE; i += 4) + RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, 0); +@@ -107,15 +107,15 @@ INT RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) ++int RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + { + +- NDIS_STATUS Status = NDIS_STATUS_SUCCESS; +- PUCHAR pFirmwareImage = NULL; +- ULONG FileLength, Index; +- UINT32 MacReg = 0; ++ int Status = NDIS_STATUS_SUCCESS; ++ u8 *pFirmwareImage = NULL; ++ unsigned long FileLength, Index; ++ u32 MacReg = 0; + #ifdef RTMP_MAC_USB +- UINT32 Version = (pAd->MACVersion >> 16); ++ u32 Version = (pAd->MACVersion >> 16); + #endif + + /* New 8k byte firmware size for RT3071/RT3072 */ +@@ -134,7 +134,7 @@ NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) { /* use the second part */ + /*printk("KH:Use New Version,part2\n"); */ + pFirmwareImage = +- (PUCHAR) & ++ (u8 *)& + FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; + FileLength = FIRMWAREIMAGEV2_LENGTH; + } else { +@@ -172,13 +172,13 @@ NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + return Status; + } + +-INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1) ++int RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++ u8 Command, ++ u8 Token, u8 Arg0, u8 Arg1) + { + HOST_CMD_CSR_STRUC H2MCmd; + H2M_MAILBOX_STRUC H2MMailbox; +- ULONG i = 0; ++ unsigned long i = 0; + + #ifdef PCIE_PS_SUPPORT + /* 3090F power solution 3 has hw limitation that needs to ban all mcu command */ +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +index d29e6e8..d5648d8 100644 +--- a/drivers/staging/rt2860/common/rtmp_timer.c ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -67,9 +67,9 @@ BUILD_TIMER_FUNCTION(RtmpUsbStaAsicForceWakeupTimeout); + #endif /* RTMP_MAC_USB // */ + + #if defined(AP_LED) || defined(STA_LED) +-extern void LedCtrlMain(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++extern void LedCtrlMain(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + BUILD_TIMER_FUNCTION(LedCtrlMain); + #endif + +@@ -119,7 +119,7 @@ static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) + if ((pTimer->handle != NULL) + && (!pAd->PM_FlgSuspend)) + pTimer->handle(NULL, +- (PVOID) pTimer->cookie, ++ (void *)pTimer->cookie, + NULL, pTimer); + if ((pTimer->Repeat) + && (pTimer->State == FALSE)) +@@ -138,7 +138,7 @@ static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) + } + } + +-INT RtmpTimerQThread(IN OUT PVOID Context) ++int RtmpTimerQThread(IN void *Context) + { + RTMP_OS_TASK *pTask; + PRTMP_ADAPTER pAd; +diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c +index 2cc73de..b89ad5f 100644 +--- a/drivers/staging/rt2860/common/spectrum.c ++++ b/drivers/staging/rt2860/common/spectrum.c +@@ -261,23 +261,23 @@ DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = { + + #define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) + +-CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) ++char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + { + typedef struct __TX_PWR_CFG { +- UINT8 Mode; +- UINT8 MCS; +- UINT16 req; +- UINT8 shift; +- UINT32 BitMask; ++ u8 Mode; ++ u8 MCS; ++ u16 req; ++ u8 shift; ++ u32 BitMask; + } TX_PWR_CFG; + +- UINT32 Value; +- INT Idx; +- UINT8 PhyMode; +- CHAR CurTxPwr; +- UINT8 TxPwrRef = 0; +- CHAR DaltaPwr; +- ULONG TxPwr[5]; ++ u32 Value; ++ int Idx; ++ u8 PhyMode; ++ char CurTxPwr; ++ u8 TxPwrRef = 0; ++ char DaltaPwr; ++ unsigned long TxPwr[5]; + + TX_PWR_CFG TxPwrCfg[] = { + {MODE_CCK, 0, 0, 4, 0x000000f0}, +@@ -385,7 +385,7 @@ CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + && (TxPwrCfg[Idx].MCS == HTTxMode.field.MCS)) { + Value = TxPwr[TxPwrCfg[Idx].req]; + DaltaPwr = +- TxPwrRef - (CHAR) ((Value & TxPwrCfg[Idx].BitMask) ++ TxPwrRef - (char)((Value & TxPwrCfg[Idx].BitMask) + >> TxPwrCfg[Idx].shift); + CurTxPwr -= DaltaPwr; + break; +@@ -395,7 +395,7 @@ CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + return CurTxPwr; + } + +-VOID MeasureReqTabInit(IN PRTMP_ADAPTER pAd) ++void MeasureReqTabInit(IN PRTMP_ADAPTER pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + +@@ -412,7 +412,7 @@ VOID MeasureReqTabInit(IN PRTMP_ADAPTER pAd) + return; + } + +-VOID MeasureReqTabExit(IN PRTMP_ADAPTER pAd) ++void MeasureReqTabExit(IN PRTMP_ADAPTER pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + +@@ -423,9 +423,9 @@ VOID MeasureReqTabExit(IN PRTMP_ADAPTER pAd) + return; + } + +-PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { +- UINT HashIdx; ++ u32 HashIdx; + PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; + PMEASURE_REQ_ENTRY pEntry = NULL; + PMEASURE_REQ_ENTRY pPrevEntry = NULL; +@@ -455,13 +455,13 @@ PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + return pEntry; + } + +-PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { +- INT i; +- ULONG HashIdx; ++ int i; ++ unsigned long HashIdx; + PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; + PMEASURE_REQ_ENTRY pEntry = NULL, pCurrEntry; +- ULONG Now; ++ unsigned long Now; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -483,7 +483,7 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + MQ_REQ_AGE_OUT))) + { + PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = ++ unsigned long HashIdx = + MQ_DIALOGTOKEN_HASH_INDEX(pEntry-> + DialogToken); + PMEASURE_REQ_ENTRY pProbeEntry = +@@ -548,7 +548,7 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + return pEntry; + } + +-VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { + PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; + PMEASURE_REQ_ENTRY pEntry = NULL; +@@ -567,7 +567,7 @@ VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + pEntry = MeasureReqLookUp(pAd, DialogToken); + if (pEntry != NULL) { + PMEASURE_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); ++ unsigned long HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); + PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); +@@ -595,7 +595,7 @@ VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + return; + } + +-VOID TpcReqTabInit(IN PRTMP_ADAPTER pAd) ++void TpcReqTabInit(IN PRTMP_ADAPTER pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +@@ -610,7 +610,7 @@ VOID TpcReqTabInit(IN PRTMP_ADAPTER pAd) + return; + } + +-VOID TpcReqTabExit(IN PRTMP_ADAPTER pAd) ++void TpcReqTabExit(IN PRTMP_ADAPTER pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +@@ -621,9 +621,9 @@ VOID TpcReqTabExit(IN PRTMP_ADAPTER pAd) + return; + } + +-static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { +- UINT HashIdx; ++ u32 HashIdx; + PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; + PTPC_REQ_ENTRY pEntry = NULL; + PTPC_REQ_ENTRY pPrevEntry = NULL; +@@ -653,13 +653,13 @@ static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + return pEntry; + } + +-static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { +- INT i; +- ULONG HashIdx; ++ int i; ++ unsigned long HashIdx; + PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; + PTPC_REQ_ENTRY pEntry = NULL, pCurrEntry; +- ULONG Now; ++ unsigned long Now; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -681,7 +681,7 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + TPC_REQ_AGE_OUT))) + { + PTPC_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = ++ unsigned long HashIdx = + TPC_DIALOGTOKEN_HASH_INDEX(pEntry-> + DialogToken); + PTPC_REQ_ENTRY pProbeEntry = +@@ -745,7 +745,7 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + return pEntry; + } + +-static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) ++static void TpcReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + { + PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; + PTPC_REQ_ENTRY pEntry = NULL; +@@ -764,7 +764,7 @@ static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + pEntry = TpcReqLookUp(pAd, DialogToken); + if (pEntry != NULL) { + PTPC_REQ_ENTRY pPrevEntry = NULL; +- ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); ++ unsigned long HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); + PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); +@@ -802,7 +802,7 @@ static VOID TpcReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken) + Return : Current Time Stamp. + ========================================================================== + */ +-static UINT64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) ++static u64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) + { + /* get current time stamp. */ + return 0; +@@ -818,7 +818,7 @@ static UINT64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) + Return : Current Time Stamp. + ========================================================================== + */ +-static UINT8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 Wcid) ++static u8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, u8 Wcid) + { + return 16; /* 16 dBm */ + } +@@ -833,15 +833,15 @@ static UINT8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, IN UINT8 Wcid) + Return : Current Time Stamp. + ========================================================================== + */ +-VOID InsertChannelRepIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, IN UINT8 RegulatoryClass) ++void InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ char *pCountry, u8 RegulatoryClass) + { +- ULONG TempLen; +- UINT8 Len; +- UINT8 IEId = IE_AP_CHANNEL_REPORT; +- PUCHAR pChListPtr = NULL; ++ unsigned long TempLen; ++ u8 Len; ++ u8 IEId = IE_AP_CHANNEL_REPORT; ++ u8 *pChListPtr = NULL; + + Len = 1; + if (strncmp(pCountry, "US", 2) == 0) { +@@ -900,11 +900,11 @@ VOID InsertChannelRepIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID InsertDialogToken(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, IN UINT8 DialogToken) ++void InsertDialogToken(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, u8 DialogToken) + { +- ULONG TempLen; ++ unsigned long TempLen; + MakeOutgoingFrame(pFrameBuf, &TempLen, 1, &DialogToken, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; +@@ -924,12 +924,12 @@ VOID InsertDialogToken(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID InsertTpcReqIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, OUT PULONG pFrameLen) ++static void InsertTpcReqIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, unsigned long *pFrameLen) + { +- ULONG TempLen; +- ULONG Len = 0; +- UINT8 ElementID = IE_TPC_REQUEST; ++ unsigned long TempLen; ++ unsigned long Len = 0; ++ u8 ElementID = IE_TPC_REQUEST; + + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &ElementID, 1, &Len, END_OF_ARGS); +@@ -953,14 +953,14 @@ static VOID InsertTpcReqIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID InsertTpcReportIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, IN UINT8 LinkMargin) ++void InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 TxPwr, u8 LinkMargin) + { +- ULONG TempLen; +- ULONG Len = sizeof(TPC_REPORT_INFO); +- UINT8 ElementID = IE_TPC_REPORT; ++ unsigned long TempLen; ++ unsigned long Len = sizeof(TPC_REPORT_INFO); ++ u8 ElementID = IE_TPC_REPORT; + TPC_REPORT_INFO TpcReportIE; + + TpcReportIE.TxPwr = TxPwr; +@@ -990,15 +990,15 @@ VOID InsertTpcReportIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 ChSwMode, +- IN UINT8 NewChannel, IN UINT8 ChSwCnt) ++static void InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 ChSwMode, ++ u8 NewChannel, u8 ChSwCnt) + { +- ULONG TempLen; +- ULONG Len = sizeof(CH_SW_ANN_INFO); +- UINT8 ElementID = IE_CHANNEL_SWITCH_ANNOUNCEMENT; ++ unsigned long TempLen; ++ unsigned long Len = sizeof(CH_SW_ANN_INFO); ++ u8 ElementID = IE_CHANNEL_SWITCH_ANNOUNCEMENT; + CH_SW_ANN_INFO ChSwAnnIE; + + ChSwAnnIE.ChSwMode = ChSwMode; +@@ -1031,13 +1031,13 @@ static VOID InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 Len, IN PMEASURE_REQ_INFO pMeasureReqIE) ++static void InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 Len, IN PMEASURE_REQ_INFO pMeasureReqIE) + { +- ULONG TempLen; +- UINT8 ElementID = IE_MEASUREMENT_REQUEST; ++ unsigned long TempLen; ++ u8 ElementID = IE_MEASUREMENT_REQUEST; + + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &ElementID, +@@ -1066,15 +1066,15 @@ static VOID InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, ++static void InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, + IN PMEASURE_REPORT_INFO pMeasureReportIE, +- IN UINT8 ReportLnfoLen, IN PUINT8 pReportInfo) ++ u8 ReportLnfoLen, u8 *pReportInfo) + { +- ULONG TempLen; +- ULONG Len; +- UINT8 ElementID = IE_MEASUREMENT_REPORT; ++ unsigned long TempLen; ++ unsigned long Len; ++ u8 ElementID = IE_MEASUREMENT_REPORT; + + Len = sizeof(MEASURE_REPORT_INFO) + ReportLnfoLen; + +@@ -1105,17 +1105,17 @@ static VOID InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, IN UINT8 NumOfRepetitions) ++void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++ u8 *pOutBuffer, ++ unsigned long *pFrameLen, ++ u8 TotalLen, ++ u8 Category, ++ u8 Action, ++ u8 MeasureToken, ++ u8 MeasureReqMode, ++ u8 MeasureReqType, u8 NumOfRepetitions) + { +- ULONG TempLen; ++ unsigned long TempLen; + MEASURE_REQ_INFO MeasureReqIE; + + InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, +@@ -1155,17 +1155,17 @@ VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, IN PUINT8 pReportInfo) ++void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, ++ u8 DialogToken, ++ u8 MeasureToken, ++ u8 MeasureReqMode, ++ u8 MeasureReqType, ++ u8 ReportInfoLen, u8 *pReportInfo) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + HEADER_802_11 ActHdr; + MEASURE_REPORT_INFO MeasureRepIE; + +@@ -1173,13 +1173,13 @@ VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, +@@ -1214,11 +1214,11 @@ VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) ++void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + + HEADER_802_11 ActHdr; + +@@ -1226,13 +1226,13 @@ VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, +@@ -1262,13 +1262,13 @@ VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken) + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, IN UINT8 TxPwr, IN UINT8 LinkMargin) ++void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, ++ u8 DialogToken, u8 TxPwr, u8 LinkMargin) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + + HEADER_802_11 ActHdr; + +@@ -1276,13 +1276,13 @@ VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, +@@ -1315,12 +1315,12 @@ VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, IN UINT8 ChSwMode, IN UINT8 NewCh) ++void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, u8 ChSwMode, u8 NewCh) + { +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + + HEADER_802_11 ActHdr; + +@@ -1328,13 +1328,13 @@ VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, + pAd->CurrentAddress); + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, +@@ -1349,10 +1349,10 @@ VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + return; + } + +-static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, IN UINT8 Channel) ++static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, u8 Channel) + { + BOOLEAN Result = FALSE; +- INT i; ++ int i; + + do { + /* check DFS procedure is running. */ +@@ -1376,14 +1376,14 @@ static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, IN UINT8 Channel) + return Result; + } + +-VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, IN UINT8 ChSwMode, IN UINT8 Channel) ++void NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++ u8 *pRA, ++ u8 *pTA, u8 ChSwMode, u8 Channel) + { + } + +-static VOID StartDFSProcedure(IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, IN UINT8 ChSwMode) ++static void StartDFSProcedure(IN PRTMP_ADAPTER pAd, ++ u8 Channel, u8 ChSwMode) + { + /* start DFS procedure */ + pAd->CommonCfg.Channel = Channel; +@@ -1416,12 +1416,12 @@ static VOID StartDFSProcedure(IN PRTMP_ADAPTER pAd, + 1 1 1 1 1 + */ + static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, ++ void * pMsg, ++ unsigned long MsgLen, + OUT PCH_SW_ANN_INFO pChSwAnnInfo) + { + PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; +- PUCHAR pFramePtr = Fr->Octet; ++ u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; + +@@ -1436,8 +1436,8 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + return result; + + eid_ptr = (PEID_STRUCT) pFramePtr; +- while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < +- ((PUCHAR) pFramePtr + MsgLen)) { ++ while (((u8 *) eid_ptr + eid_ptr->Len + 1) < ++ ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { + case IE_CHANNEL_SWITCH_ANNOUNCEMENT: + NdisMoveMemory(&pChSwAnnInfo->ChSwMode, eid_ptr->Octet, +@@ -1453,7 +1453,7 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1473,19 +1473,19 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, ++ void * pMsg, ++ unsigned long MsgLen, ++ u8 *pDialogToken, + OUT PMEASURE_REQ_INFO pMeasureReqInfo, + OUT PMEASURE_REQ pMeasureReq) + { + PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; +- PUCHAR pFramePtr = Fr->Octet; ++ u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +- PUCHAR ptr; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; ++ u8 *ptr; ++ u64 MeasureStartTime; ++ u16 MeasureDuration; + + /* skip 802.11 header. */ + MsgLen -= sizeof(HEADER_802_11); +@@ -1502,8 +1502,8 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + MsgLen -= 1; + + eid_ptr = (PEID_STRUCT) pFramePtr; +- while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < +- ((PUCHAR) pFramePtr + MsgLen)) { ++ while (((u8 *) eid_ptr + eid_ptr->Len + 1) < ++ ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { + case IE_MEASUREMENT_REQUEST: + NdisMoveMemory(&pMeasureReqInfo->Token, eid_ptr->Octet, +@@ -1512,7 +1512,7 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + eid_ptr->Octet + 1, 1); + NdisMoveMemory(&pMeasureReqInfo->ReqType, + eid_ptr->Octet + 2, 1); +- ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pMeasureReq->ChNum, ptr, 1); + NdisMoveMemory(&MeasureStartTime, ptr + 1, 8); + pMeasureReq->MeasureStartTime = +@@ -1526,7 +1526,7 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1567,18 +1567,18 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + 0 1 2 3 4 5-7 + */ + static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, ++ void * pMsg, ++ unsigned long MsgLen, ++ u8 *pDialogToken, + OUT PMEASURE_REPORT_INFO + pMeasureReportInfo, +- OUT PUINT8 pReportBuf) ++ u8 *pReportBuf) + { + PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; +- PUCHAR pFramePtr = Fr->Octet; ++ u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; +- PUCHAR ptr; ++ u8 *ptr; + + /* skip 802.11 header. */ + MsgLen -= sizeof(HEADER_802_11); +@@ -1595,8 +1595,8 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + MsgLen -= 1; + + eid_ptr = (PEID_STRUCT) pFramePtr; +- while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < +- ((PUCHAR) pFramePtr + MsgLen)) { ++ while (((u8 *) eid_ptr + eid_ptr->Len + 1) < ++ ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { + case IE_MEASUREMENT_REPORT: + NdisMoveMemory(&pMeasureReportInfo->Token, +@@ -1608,7 +1608,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + if (pMeasureReportInfo->ReportType == RM_BASIC) { + PMEASURE_BASIC_REPORT pReport = + (PMEASURE_BASIC_REPORT) pReportBuf; +- ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, + ptr + 1, 8); +@@ -1619,7 +1619,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + } else if (pMeasureReportInfo->ReportType == RM_CCA) { + PMEASURE_CCA_REPORT pReport = + (PMEASURE_CCA_REPORT) pReportBuf; +- ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, + ptr + 1, 8); +@@ -1632,7 +1632,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + RM_RPI_HISTOGRAM) { + PMEASURE_RPI_REPORT pReport = + (PMEASURE_RPI_REPORT) pReportBuf; +- ptr = (PUCHAR) (eid_ptr->Octet + 3); ++ ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, + ptr + 1, 8); +@@ -1647,7 +1647,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1667,11 +1667,11 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, OUT PUINT8 pDialogToken) ++ void * pMsg, ++ unsigned long MsgLen, u8 *pDialogToken) + { + PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; +- PUCHAR pFramePtr = Fr->Octet; ++ u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; + +@@ -1689,8 +1689,8 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + MsgLen -= 1; + + eid_ptr = (PEID_STRUCT) pFramePtr; +- while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < +- ((PUCHAR) pFramePtr + MsgLen)) { ++ while (((u8 *) eid_ptr + eid_ptr->Len + 1) < ++ ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { + case IE_TPC_REQUEST: + result = TRUE; +@@ -1699,7 +1699,7 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1720,13 +1720,13 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, +- OUT PUINT8 pDialogToken, ++ void * pMsg, ++ unsigned long MsgLen, ++ u8 *pDialogToken, + OUT PTPC_REPORT_INFO pTpcRepInfo) + { + PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; +- PUCHAR pFramePtr = Fr->Octet; ++ u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; + PEID_STRUCT eid_ptr; + +@@ -1744,8 +1744,8 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + MsgLen -= 1; + + eid_ptr = (PEID_STRUCT) pFramePtr; +- while (((UCHAR *) eid_ptr + eid_ptr->Len + 1) < +- ((PUCHAR) pFramePtr + MsgLen)) { ++ while (((u8 *) eid_ptr + eid_ptr->Len + 1) < ++ ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { + case IE_TPC_REPORT: + NdisMoveMemory(&pTpcRepInfo->TxPwr, eid_ptr->Octet, 1); +@@ -1757,7 +1757,7 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((UCHAR *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1774,12 +1774,12 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + CH_SW_ANN_INFO ChSwAnnInfo; + PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; +- UCHAR index = 0, Channel = 0, NewChannel = 0; +- ULONG Bssidx = 0; ++ u8 index = 0, Channel = 0, NewChannel = 0; ++ unsigned long Bssidx = 0; + + NdisZeroMemory(&ChSwAnnInfo, sizeof(CH_SW_ANN_INFO)); + if (!PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo)) { +@@ -1856,11 +1856,11 @@ static VOID PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-static VOID PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, ++static void PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem) + { + PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; +- UINT8 DialogToken; ++ u8 DialogToken; + MEASURE_REQ_INFO MeasureReqInfo; + MEASURE_REQ MeasureReq; + MEASURE_REPORT_MODE ReportMode; +@@ -1889,13 +1889,13 @@ static VOID PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, ++static void PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem) + { + MEASURE_REPORT_INFO MeasureReportInfo; + PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; +- UINT8 DialogToken; +- PUINT8 pMeasureReportInfo; ++ u8 DialogToken; ++ u8 *pMeasureReportInfo; + + /* if (pAd->CommonCfg.bIEEE80211H != TRUE) */ + /* return; */ +@@ -1965,14 +1965,14 @@ static VOID PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static VOID PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; +- PUCHAR pFramePtr = pFr->Octet; +- UINT8 DialogToken; +- UINT8 TxPwr = GetCurTxPwr(pAd, Elem->Wcid); +- UINT8 LinkMargin = 0; +- CHAR RealRssi; ++ u8 *pFramePtr = pFr->Octet; ++ u8 DialogToken; ++ u8 TxPwr = GetCurTxPwr(pAd, Elem->Wcid); ++ u8 LinkMargin = 0; ++ char RealRssi; + + /* link margin: Ratio of the received signal power to the minimum desired by the station (STA). The */ + /* STA may incorporate rate information and channel conditions, including interference, into its computation */ +@@ -2007,9 +2007,9 @@ static VOID PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-static VOID PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UINT8 DialogToken; ++ u8 DialogToken; + TPC_REPORT_INFO TpcRepInfo; + PTPC_REQ_ENTRY pEntry = NULL; + +@@ -2040,10 +2040,10 @@ static VOID PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + +- UCHAR Action = Elem->Msg[LENGTH_802_11 + 1]; ++ u8 Action = Elem->Msg[LENGTH_802_11 + 1]; + + if (pAd->CommonCfg.bIEEE80211H != TRUE) + return; +@@ -2085,26 +2085,26 @@ VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) + { +- UINT Aid = 1; +- UINT ArgIdx; +- PSTRING thisChar; ++ u32 Aid = 1; ++ u32 ArgIdx; ++ char *thisChar; + + MEASURE_REQ_MODE MeasureReqMode; +- UINT8 MeasureReqToken = RandomByte(pAd); +- UINT8 MeasureReqType = RM_BASIC; +- UINT8 MeasureCh = 1; +- UINT64 MeasureStartTime = GetCurrentTimeStamp(pAd); ++ u8 MeasureReqToken = RandomByte(pAd); ++ u8 MeasureReqType = RM_BASIC; ++ u8 MeasureCh = 1; ++ u64 MeasureStartTime = GetCurrentTimeStamp(pAd); + MEASURE_REQ MeasureReq; +- UINT8 TotalLen; ++ u8 TotalLen; + + HEADER_802_11 ActHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen; + +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); /*Get an unused nonpaged memory */ ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, + ("%s() allocate memory failed \n", __func__)); +@@ -2115,7 +2115,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + while ((thisChar = strsep((char **)&arg, "-")) != NULL) { + switch (ArgIdx) { + case 1: /* Aid. */ +- Aid = (UINT8) simple_strtol(thisChar, 0, 16); ++ Aid = (u8)simple_strtol(thisChar, 0, 16); + break; + + case 2: /* Measurement Request Type. */ +@@ -2129,7 +2129,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + break; + + case 3: /* Measurement channel. */ +- MeasureCh = (UINT8) simple_strtol(thisChar, 0, 16); ++ MeasureCh = (u8)simple_strtol(thisChar, 0, 16); + break; + } + ArgIdx++; +@@ -2153,7 +2153,7 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, + pAd->MacTab.Content[Aid].Addr, pAd->CurrentAddress); + +- NdisMoveMemory(pOutBuffer, (PCHAR) & ActHdr, sizeof(HEADER_802_11)); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); + FrameLen = sizeof(HEADER_802_11); + + TotalLen = sizeof(MEASURE_REQ_INFO) + sizeof(MEASURE_REQ); +@@ -2168,14 +2168,14 @@ INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) + MeasureReq.MeasureDuration = cpu2le16(2000); + + { +- ULONG TempLen; ++ unsigned long TempLen; + MakeOutgoingFrame(pOutBuffer + FrameLen, &TempLen, + sizeof(MEASURE_REQ), &MeasureReq, + END_OF_ARGS); + FrameLen += TempLen; + } + +- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (UINT) FrameLen); ++ MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, (u32)FrameLen); + + END_OF_MEASURE_REQ: + MlmeFreeMemory(pAd, pOutBuffer); +@@ -2183,13 +2183,13 @@ END_OF_MEASURE_REQ: + return TRUE; + } + +-INT Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg) ++int Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) + { +- UINT Aid; ++ u32 Aid; + +- UINT8 TpcReqToken = RandomByte(pAd); ++ u8 TpcReqToken = RandomByte(pAd); + +- Aid = (UINT) simple_strtol(arg, 0, 16); ++ Aid = (u32)simple_strtol(arg, 0, 16); + + DBGPRINT(RT_DEBUG_TRACE, ("%s::Aid = %d\n", __func__, Aid)); + if (!VALID_WCID(Aid)) { +diff --git a/drivers/staging/rt2860/crypt_hmac.h b/drivers/staging/rt2860/crypt_hmac.h +index 6211640..7a56515 100644 +--- a/drivers/staging/rt2860/crypt_hmac.h ++++ b/drivers/staging/rt2860/crypt_hmac.h +@@ -48,18 +48,18 @@ + + #ifdef SHA1_SUPPORT + #define HMAC_SHA1_SUPPORT +-VOID HMAC_SHA1(IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen); ++void HMAC_SHA1(IN const u8 Key[], ++ u32 KeyLen, ++ IN const u8 Message[], ++ u32 MessageLen, u8 MAC[], u32 MACLen); + #endif /* SHA1_SUPPORT */ + + #ifdef MD5_SUPPORT + #define HMAC_MD5_SUPPORT +-VOID HMAC_MD5(IN const UINT8 Key[], +- IN UINT KeyLen, +- IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 MAC[], IN UINT MACLen); ++void HMAC_MD5(IN const u8 Key[], ++ u32 KeyLen, ++ IN const u8 Message[], ++ u32 MessageLen, u8 MAC[], u32 MACLen); + #endif /* MD5_SUPPORT */ + + #endif /* __CRYPT_HMAC_H__ */ +diff --git a/drivers/staging/rt2860/crypt_md5.h b/drivers/staging/rt2860/crypt_md5.h +index ecc67e4..bbabf12 100644 +--- a/drivers/staging/rt2860/crypt_md5.h ++++ b/drivers/staging/rt2860/crypt_md5.h +@@ -54,19 +54,19 @@ + #define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ + #define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ + typedef struct { +- UINT32 HashValue[4]; +- UINT64 MessageLen; +- UINT8 Block[MD5_BLOCK_SIZE]; +- UINT BlockLen; ++ u32 HashValue[4]; ++ u64 MessageLen; ++ u8 Block[MD5_BLOCK_SIZE]; ++ u32 BlockLen; + } MD5_CTX_STRUC, *PMD5_CTX_STRUC; + +-VOID MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX); +-VOID MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX); +-VOID MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, +- IN const UINT8 Message[], IN UINT MessageLen); +-VOID MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, OUT UINT8 DigestMessage[]); +-VOID RT_MD5(IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 DigestMessage[]); ++void MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX); ++void MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX); ++void MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++ IN const u8 Message[], u32 MessageLen); ++void MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, u8 DigestMessage[]); ++void RT_MD5(IN const u8 Message[], ++ u32 MessageLen, u8 DigestMessage[]); + #endif /* MD5_SUPPORT */ + + #endif /* __CRYPT_MD5_H__ */ +diff --git a/drivers/staging/rt2860/crypt_sha2.h b/drivers/staging/rt2860/crypt_sha2.h +index 33d999d..bfd88bc 100644 +--- a/drivers/staging/rt2860/crypt_sha2.h ++++ b/drivers/staging/rt2860/crypt_sha2.h +@@ -55,19 +55,19 @@ + #define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ + #define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ + typedef struct _SHA1_CTX_STRUC { +- UINT32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ +- UINT64 MessageLen; /* total size */ +- UINT8 Block[SHA1_BLOCK_SIZE]; +- UINT BlockLen; ++ u32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ ++ u64 MessageLen; /* total size */ ++ u8 Block[SHA1_BLOCK_SIZE]; ++ u32 BlockLen; + } SHA1_CTX_STRUC, *PSHA1_CTX_STRUC; + +-VOID RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX); +-VOID SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX); +-VOID SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, +- IN const UINT8 Message[], IN UINT MessageLen); +-VOID SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, OUT UINT8 DigestMessage[]); +-VOID RT_SHA1(IN const UINT8 Message[], +- IN UINT MessageLen, OUT UINT8 DigestMessage[]); ++void RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX); ++void SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX); ++void SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++ IN const u8 Message[], u32 MessageLen); ++void SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, u8 DigestMessage[]); ++void RT_SHA1(IN const u8 Message[], ++ u32 MessageLen, u8 DigestMessage[]); + #endif /* SHA1_SUPPORT */ + + #endif /* __CRYPT_SHA2_H__ */ +diff --git a/drivers/staging/rt2860/dfs.h b/drivers/staging/rt2860/dfs.h +index 9e5e74d..d094490 100644 +--- a/drivers/staging/rt2860/dfs.h ++++ b/drivers/staging/rt2860/dfs.h +@@ -36,4 +36,4 @@ + Fonchi 03-12-2007 created + */ + +-BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, IN UCHAR Ch); ++BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, u8 Ch); +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +index 4d8e8bf..50df5a2 100644 +--- a/drivers/staging/rt2860/eeprom.h ++++ b/drivers/staging/rt2860/eeprom.h +@@ -42,26 +42,26 @@ + * Public function declarations for prom-based chipset + ************************************************************************/ + int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT USHORT * pValue); ++ u16 Offset, u16 * pValue); + #endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + /************************************************************************* + * Public function declarations for usb-based prom chipset + ************************************************************************/ +-NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, +- IN USHORT offset, OUT PUSHORT pData); ++int RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++ u16 offset, u16 *pData); + #endif /* RTMP_USB_SUPPORT // */ + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, +- IN USHORT Offset, OUT USHORT * pValue); ++ u16 Offset, u16 * pValue); + #endif /* RTMP_EFUSE_SUPPORT // */ + #endif /* RT30xx // */ + + /************************************************************************* + * Public function declarations for prom operation callback functions setting + ************************************************************************/ +-INT RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, IN INT infType); ++int RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, int infType); + + #endif /* __EEPROM_H__ // */ +diff --git a/drivers/staging/rt2860/iface/rtmp_usb.h b/drivers/staging/rt2860/iface/rtmp_usb.h +index 26591b0..40d7d01 100644 +--- a/drivers/staging/rt2860/iface/rtmp_usb.h ++++ b/drivers/staging/rt2860/iface/rtmp_usb.h +@@ -38,7 +38,7 @@ typedef struct urb *purbb_t; + typedef struct usb_ctrlrequest devctrlrequest; + #endif // LINUX // + +-extern UCHAR EpToQueue[6]; ++extern u8 EpToQueue[6]; + + #define RXBULKAGGRE_ZISE 12 + #define MAX_TXBULK_LIMIT (LOCAL_TXBUF_SIZE*(BULKAGGRE_ZISE-1)) +@@ -110,8 +110,8 @@ extern void dump_urb(struct urb *purb); + #define USBD_SHORT_TRANSFER_OK 0 + #define PURB purbb_t + +-#define PIRP PVOID +-#define NDIS_OID UINT ++#define PIRP void * ++#define NDIS_OID u32 + #ifndef USB_ST_NOERROR + #define USB_ST_NOERROR 0 + #endif +@@ -120,12 +120,12 @@ extern void dump_urb(struct urb *purb); + #define CONTROL_TIMEOUT_JIFFIES ( (100 * OS_HZ) / 1000) + #define UNLINK_TIMEOUT_MS 3 + +-VOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); ++void RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); + + #ifdef KTHREAD_SUPPORT + #define RTUSBMlmeUp(pAd) \ +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index 8585a4d..3be1bc8 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -188,86 +188,86 @@ if (((__pEntry)) != NULL) \ + /* */ + /* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { +- USHORT AdvCoding:1; +- USHORT ChannelWidth:1; +- USHORT MimoPs:2; /*momi power safe */ +- USHORT GF:1; /*green field */ +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; /*for40MHz */ +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; +- USHORT DelayedBA:1; /*rt2860c not support */ +- USHORT AMsduSize:1; /* only support as zero */ +- USHORT CCKmodein40:1; +- USHORT PSMP:1; +- USHORT Forty_Mhz_Intolerant:1; +- USHORT LSIGTxopProSup:1; ++ u16 AdvCoding:1; ++ u16 ChannelWidth:1; ++ u16 MimoPs:2; /*momi power safe */ ++ u16 GF:1; /*green field */ ++ u16 ShortGIfor20:1; ++ u16 ShortGIfor40:1; /*for40MHz */ ++ u16 TxSTBC:1; ++ u16 RxSTBC:2; ++ u16 DelayedBA:1; /*rt2860c not support */ ++ u16 AMsduSize:1; /* only support as zero */ ++ u16 CCKmodein40:1; ++ u16 PSMP:1; ++ u16 Forty_Mhz_Intolerant:1; ++ u16 LSIGTxopProSup:1; + } HT_CAP_INFO, *PHT_CAP_INFO; + + /* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR rsv:3; /*momi power safe */ ++ u8 MaxRAmpduFactor:2; ++ u8 MpduDensity:3; ++ u8 rsv:3; /*momi power safe */ + } HT_CAP_PARM, *PHT_CAP_PARM; + + /* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { +- UCHAR MCSSet[10]; +- UCHAR SupRate[2]; /* unit : 1Mbps */ +- UCHAR TxMCSSetDefined:1; +- UCHAR TxRxNotEqual:1; +- UCHAR TxStream:2; +- UCHAR MpduDensity:1; +- UCHAR rsv:3; +- UCHAR rsv3[3]; ++ u8 MCSSet[10]; ++ u8 SupRate[2]; /* unit : 1Mbps */ ++ u8 TxMCSSetDefined:1; ++ u8 TxRxNotEqual:1; ++ u8 TxStream:2; ++ u8 MpduDensity:1; ++ u8 rsv:3; ++ u8 rsv3[3]; + } HT_MCS_SET, *PHT_MCS_SET; + + /* HT Capability INFO field in HT Cap IE . */ + typedef struct PACKED { +- USHORT Pco:1; +- USHORT TranTime:2; +- USHORT rsv:5; /*momi power safe */ +- USHORT MCSFeedback:2; /*0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. */ +- USHORT PlusHTC:1; /*+HTC control field support */ +- USHORT RDGSupport:1; /*reverse Direction Grant support */ +- USHORT rsv2:4; ++ u16 Pco:1; ++ u16 TranTime:2; ++ u16 rsv:5; /*momi power safe */ ++ u16 MCSFeedback:2; /*0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv. */ ++ u16 PlusHTC:1; /*+HTC control field support */ ++ u16 RDGSupport:1; /*reverse Direction Grant support */ ++ u16 rsv2:4; + } EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO; + + /* HT Beamforming field in HT Cap IE . */ + typedef struct PACKED _HT_BF_CAP { +- ULONG TxBFRecCapable:1; +- ULONG RxSoundCapable:1; +- ULONG TxSoundCapable:1; +- ULONG RxNDPCapable:1; +- ULONG TxNDPCapable:1; +- ULONG ImpTxBFCapable:1; +- ULONG Calibration:2; +- ULONG ExpCSICapable:1; +- ULONG ExpNoComSteerCapable:1; +- ULONG ExpComSteerCapable:1; +- ULONG ExpCSIFbk:2; +- ULONG ExpNoComBF:2; +- ULONG ExpComBF:2; +- ULONG MinGrouping:2; +- ULONG CSIBFAntSup:2; +- ULONG NoComSteerBFAntSup:2; +- ULONG ComSteerBFAntSup:2; +- ULONG CSIRowBFSup:2; +- ULONG ChanEstimation:2; +- ULONG rsv:3; ++ unsigned long TxBFRecCapable:1; ++ unsigned long RxSoundCapable:1; ++ unsigned long TxSoundCapable:1; ++ unsigned long RxNDPCapable:1; ++ unsigned long TxNDPCapable:1; ++ unsigned long ImpTxBFCapable:1; ++ unsigned long Calibration:2; ++ unsigned long ExpCSICapable:1; ++ unsigned long ExpNoComSteerCapable:1; ++ unsigned long ExpComSteerCapable:1; ++ unsigned long ExpCSIFbk:2; ++ unsigned long ExpNoComBF:2; ++ unsigned long ExpComBF:2; ++ unsigned long MinGrouping:2; ++ unsigned long CSIBFAntSup:2; ++ unsigned long NoComSteerBFAntSup:2; ++ unsigned long ComSteerBFAntSup:2; ++ unsigned long CSIRowBFSup:2; ++ unsigned long ChanEstimation:2; ++ unsigned long rsv:3; + } HT_BF_CAP, *PHT_BF_CAP; + + /* HT antenna selection field in HT Cap IE . */ + typedef struct PACKED _HT_AS_CAP { +- UCHAR AntSelect:1; +- UCHAR ExpCSIFbkTxASEL:1; +- UCHAR AntIndFbkTxASEL:1; +- UCHAR ExpCSIFbk:1; +- UCHAR AntIndFbk:1; +- UCHAR RxASel:1; +- UCHAR TxSoundPPDU:1; +- UCHAR rsv:1; ++ u8 AntSelect:1; ++ u8 ExpCSIFbkTxASEL:1; ++ u8 AntIndFbkTxASEL:1; ++ u8 ExpCSIFbk:1; ++ u8 AntIndFbk:1; ++ u8 RxASel:1; ++ u8 TxSoundPPDU:1; ++ u8 rsv:1; + } HT_AS_CAP, *PHT_AS_CAP; + + /* Draft 1.0 set IE length 26, but is extensible.. */ +@@ -277,7 +277,7 @@ typedef struct PACKED _HT_CAPABILITY_IE { + HT_CAP_INFO HtCapInfo; + HT_CAP_PARM HtCapParm; + /* HT_MCS_SET HtMCSSet; */ +- UCHAR MCSSet[16]; ++ u8 MCSSet[16]; + EXT_HT_CAP_INFO ExtHtCapInfo; + HT_BF_CAP TxBFCap; /* beamforming cap. rt2860c not support beamforming. */ + HT_AS_CAP ASCap; /*antenna selection. */ +@@ -297,77 +297,77 @@ typedef struct PACKED _HT_CAPABILITY_IE { + /* being obligated to perform OBSS Scan operations. default is 25(== 0.25%) */ + + typedef struct PACKED _OVERLAP_BSS_SCAN_IE { +- USHORT ScanPassiveDwell; +- USHORT ScanActiveDwell; +- USHORT TriggerScanInt; /* Trigger scan interval */ +- USHORT PassiveTalPerChannel; /* passive total per channel */ +- USHORT ActiveTalPerChannel; /* active total per channel */ +- USHORT DelayFactor; /* BSS width channel transition delay factor */ +- USHORT ScanActThre; /* Scan Activity threshold */ ++ u16 ScanPassiveDwell; ++ u16 ScanActiveDwell; ++ u16 TriggerScanInt; /* Trigger scan interval */ ++ u16 PassiveTalPerChannel; /* passive total per channel */ ++ u16 ActiveTalPerChannel; /* active total per channel */ ++ u16 DelayFactor; /* BSS width channel transition delay factor */ ++ u16 ScanActThre; /* Scan Activity threshold */ + } OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; + + /* 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST */ + typedef union PACKED _BSS_2040_COEXIST_IE { + struct PACKED { +- UCHAR InfoReq:1; +- UCHAR Intolerant40:1; /* Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. */ +- UCHAR BSS20WidthReq:1; /* Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. */ +- UCHAR rsv:5; ++ u8 InfoReq:1; ++ u8 Intolerant40:1; /* Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS. */ ++ u8 BSS20WidthReq:1; /* Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS. */ ++ u8 rsv:5; + } field; +- UCHAR word; ++ u8 word; + } BSS_2040_COEXIST_IE, *PBSS_2040_COEXIST_IE; + + typedef struct _TRIGGER_EVENTA { + BOOLEAN bValid; +- UCHAR BSSID[6]; +- UCHAR RegClass; /* Regulatory Class */ +- USHORT Channel; +- ULONG CDCounter; /* Maintain a seperate count down counter for each Event A. */ ++ u8 BSSID[6]; ++ u8 RegClass; /* Regulatory Class */ ++ u16 Channel; ++ unsigned long CDCounter; /* Maintain a seperate count down counter for each Event A. */ + } TRIGGER_EVENTA, *PTRIGGER_EVENTA; + + /* 20/40 trigger event table */ + /* If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. */ + #define MAX_TRIGGER_EVENT 64 + typedef struct _TRIGGER_EVENT_TAB { +- UCHAR EventANo; ++ u8 EventANo; + TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; +- ULONG EventBCountDown; /* Count down counter for Event B. */ ++ unsigned long EventBCountDown; /* Count down counter for Event B. */ + } TRIGGER_EVENT_TAB, *PTRIGGER_EVENT_TAB; + + /* 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). */ + /* This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 */ + typedef struct PACKED _EXT_CAP_INFO_ELEMENT { +- UCHAR BssCoexistMgmtSupport:1; +- UCHAR rsv:1; +- UCHAR ExtendChannelSwitch:1; +- UCHAR rsv2:5; ++ u8 BssCoexistMgmtSupport:1; ++ u8 rsv:1; ++ u8 ExtendChannelSwitch:1; ++ u8 rsv2:5; + } EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; + + /* 802.11n 7.3.2.61 */ + typedef struct PACKED _BSS_2040_COEXIST_ELEMENT { +- UCHAR ElementID; /* ID = IE_2040_BSS_COEXIST = 72 */ +- UCHAR Len; ++ u8 ElementID; /* ID = IE_2040_BSS_COEXIST = 72 */ ++ u8 Len; + BSS_2040_COEXIST_IE BssCoexistIe; + } BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; + + /*802.11n 7.3.2.59 */ + typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT { +- UCHAR ElementID; /* ID = IE_2040_BSS_INTOLERANT_REPORT = 73 */ +- UCHAR Len; +- UCHAR RegulatoryClass; +- UCHAR ChList[0]; ++ u8 ElementID; /* ID = IE_2040_BSS_INTOLERANT_REPORT = 73 */ ++ u8 Len; ++ u8 RegulatoryClass; ++ u8 ChList[0]; + } BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; + + /* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ + typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE { +- UCHAR SwitchMode; /*channel switch mode */ +- UCHAR NewChannel; /* */ +- UCHAR SwitchCount; /* */ ++ u8 SwitchMode; /*channel switch mode */ ++ u8 NewChannel; /* */ ++ u8 SwitchCount; /* */ + } CHA_SWITCH_ANNOUNCE_IE, *PCHA_SWITCH_ANNOUNCE_IE; + + /* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ + typedef struct PACKED _SEC_CHA_OFFSET_IE { +- UCHAR SecondaryChannelOffset; /* 1: Secondary above, 3: Secondary below, 0: no Secondary */ ++ u8 SecondaryChannelOffset; /* 1: Secondary above, 3: Secondary below, 0: no Secondary */ + } SEC_CHA_OFFSET_IE, *PSEC_CHA_OFFSET_IE; + + /* This structure is extracted from struct RT_HT_CAPABILITY */ +@@ -375,156 +375,156 @@ typedef struct { + BOOLEAN bHtEnable; /* If we should use ht rate. */ + BOOLEAN bPreNHt; /* If we should use ht rate. */ + /*Substract from HT Capability IE */ +- UCHAR MCSSet[16]; ++ u8 MCSSet[16]; + } RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; + + /*This structure substracts ralink supports from all 802.11n-related features. */ + /*Features not listed here but contained in 802.11n spec are not supported in rt2860. */ + typedef struct { +- USHORT ChannelWidth:1; +- USHORT MimoPs:2; /*mimo power safe MMPS_ */ +- USHORT GF:1; /*green field */ +- USHORT ShortGIfor20:1; +- USHORT ShortGIfor40:1; /*for40MHz */ +- USHORT TxSTBC:1; +- USHORT RxSTBC:2; /* 2 bits */ +- USHORT AmsduEnable:1; /* Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n */ +- USHORT AmsduSize:1; /* Max receiving A-MSDU size */ +- USHORT rsv:5; ++ u16 ChannelWidth:1; ++ u16 MimoPs:2; /*mimo power safe MMPS_ */ ++ u16 GF:1; /*green field */ ++ u16 ShortGIfor20:1; ++ u16 ShortGIfor40:1; /*for40MHz */ ++ u16 TxSTBC:1; ++ u16 RxSTBC:2; /* 2 bits */ ++ u16 AmsduEnable:1; /* Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n */ ++ u16 AmsduSize:1; /* Max receiving A-MSDU size */ ++ u16 rsv:5; + + /*Substract from Addiont HT INFO IE */ +- UCHAR MaxRAmpduFactor:2; +- UCHAR MpduDensity:3; +- UCHAR ExtChanOffset:2; /* Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n */ +- UCHAR RecomWidth:1; ++ u8 MaxRAmpduFactor:2; ++ u8 MpduDensity:3; ++ u8 ExtChanOffset:2; /* Please not the difference with following u8 NewExtChannelOffset; from 802.11n */ ++ u8 RecomWidth:1; + +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv3:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; ++ u16 OperaionMode:2; ++ u16 NonGfPresent:1; ++ u16 rsv3:1; ++ u16 OBSS_NonHTExist:1; ++ u16 rsv2:11; + + /* New Extension Channel Offset IE */ +- UCHAR NewExtChannelOffset; ++ u8 NewExtChannelOffset; + /* Extension Capability IE = 127 */ +- UCHAR BSSCoexist2040; ++ u8 BSSCoexist2040; + } RT_HT_CAPABILITY, *PRT_HT_CAPABILITY; + + /* field in Addtional HT Information IE . */ + typedef struct PACKED { +- UCHAR ExtChanOffset:2; +- UCHAR RecomWidth:1; +- UCHAR RifsMode:1; +- UCHAR S_PSMPSup:1; /*Indicate support for scheduled PSMP */ +- UCHAR SerInterGranu:3; /*service interval granularity */ ++ u8 ExtChanOffset:2; ++ u8 RecomWidth:1; ++ u8 RifsMode:1; ++ u8 S_PSMPSup:1; /*Indicate support for scheduled PSMP */ ++ u8 SerInterGranu:3; /*service interval granularity */ + } ADD_HTINFO, *PADD_HTINFO; + + typedef struct PACKED { +- USHORT OperaionMode:2; +- USHORT NonGfPresent:1; +- USHORT rsv:1; +- USHORT OBSS_NonHTExist:1; +- USHORT rsv2:11; ++ u16 OperaionMode:2; ++ u16 NonGfPresent:1; ++ u16 rsv:1; ++ u16 OBSS_NonHTExist:1; ++ u16 rsv2:11; + } ADD_HTINFO2, *PADD_HTINFO2; + + /* TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. */ + typedef struct PACKED { +- USHORT StbcMcs:6; +- USHORT DualBeacon:1; +- USHORT DualCTSProtect:1; +- USHORT STBCBeacon:1; +- USHORT LsigTxopProt:1; /* L-SIG TXOP protection full support */ +- USHORT PcoActive:1; +- USHORT PcoPhase:1; +- USHORT rsv:4; ++ u16 StbcMcs:6; ++ u16 DualBeacon:1; ++ u16 DualCTSProtect:1; ++ u16 STBCBeacon:1; ++ u16 LsigTxopProt:1; /* L-SIG TXOP protection full support */ ++ u16 PcoActive:1; ++ u16 PcoPhase:1; ++ u16 rsv:4; + } ADD_HTINFO3, *PADD_HTINFO3; + + #define SIZE_ADD_HT_INFO_IE 22 + typedef struct PACKED { +- UCHAR ControlChan; ++ u8 ControlChan; + ADD_HTINFO AddHtInfo; + ADD_HTINFO2 AddHtInfo2; + ADD_HTINFO3 AddHtInfo3; +- UCHAR MCSSet[16]; /* Basic MCS set */ ++ u8 MCSSet[16]; /* Basic MCS set */ + } ADD_HT_INFO_IE, *PADD_HT_INFO_IE; + + typedef struct PACKED { +- UCHAR NewExtChanOffset; ++ u8 NewExtChanOffset; + } NEW_EXT_CHAN_IE, *PNEW_EXT_CHAN_IE; + + typedef struct PACKED _FRAME_802_11 { + HEADER_802_11 Hdr; +- UCHAR Octet[1]; ++ u8 Octet[1]; + } FRAME_802_11, *PFRAME_802_11; + + /* QoSNull embedding of management action. When HT Control MA field set to 1. */ + typedef struct PACKED _MA_BODY { +- UCHAR Category; +- UCHAR Action; +- UCHAR Octet[1]; ++ u8 Category; ++ u8 Action; ++ u8 Octet[1]; + } MA_BODY, *PMA_BODY; + + typedef struct PACKED _HEADER_802_3 { +- UCHAR DAAddr1[MAC_ADDR_LEN]; +- UCHAR SAAddr2[MAC_ADDR_LEN]; +- UCHAR Octet[2]; ++ u8 DAAddr1[MAC_ADDR_LEN]; ++ u8 SAAddr2[MAC_ADDR_LEN]; ++ u8 Octet[2]; + } HEADER_802_3, *PHEADER_802_3; + /*//Block ACK related format */ + /* 2-byte BA Parameter field in DELBA frames to terminate an already set up bA */ + typedef struct PACKED { +- USHORT Rsv:11; /* always set to 0 */ +- USHORT Initiator:1; /* 1: originator 0:recipient */ +- USHORT TID:4; /* value of TC os TS */ ++ u16 Rsv:11; /* always set to 0 */ ++ u16 Initiator:1; /* 1: originator 0:recipient */ ++ u16 TID:4; /* value of TC os TS */ + } DELBA_PARM, *PDELBA_PARM; + + /* 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA */ + typedef struct PACKED { +- USHORT AMSDUSupported:1; /* 0: not permitted 1: permitted */ +- USHORT BAPolicy:1; /* 1: immediately BA 0:delayed BA */ +- USHORT TID:4; /* value of TC os TS */ +- USHORT BufSize:10; /* number of buffe of size 2304 octetsr */ ++ u16 AMSDUSupported:1; /* 0: not permitted 1: permitted */ ++ u16 BAPolicy:1; /* 1: immediately BA 0:delayed BA */ ++ u16 TID:4; /* value of TC os TS */ ++ u16 BufSize:10; /* number of buffe of size 2304 octetsr */ + } BA_PARM, *PBA_PARM; + + /* 2-byte BA Starting Seq CONTROL field */ + typedef union PACKED { + struct PACKED { +- USHORT FragNum:4; /* always set to 0 */ +- USHORT StartSeq:12; /* sequence number of the 1st MSDU for which this BAR is sent */ ++ u16 FragNum:4; /* always set to 0 */ ++ u16 StartSeq:12; /* sequence number of the 1st MSDU for which this BAR is sent */ + } field; +- USHORT word; ++ u16 word; + } BASEQ_CONTROL, *PBASEQ_CONTROL; + + /*BAControl and BARControl are the same */ + /* 2-byte BA CONTROL field in BA frame */ + typedef struct PACKED { +- USHORT ACKPolicy:1; /* only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK */ +- USHORT MTID:1; /*EWC V1.24 */ +- USHORT Compressed:1; +- USHORT Rsv:9; +- USHORT TID:4; ++ u16 ACKPolicy:1; /* only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK */ ++ u16 MTID:1; /*EWC V1.24 */ ++ u16 Compressed:1; ++ u16 Rsv:9; ++ u16 TID:4; + } BA_CONTROL, *PBA_CONTROL; + + /* 2-byte BAR CONTROL field in BAR frame */ + typedef struct PACKED { +- USHORT ACKPolicy:1; /* 0:normal ack, 1:no ack. */ +- USHORT MTID:1; /*if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ */ +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT TID:4; ++ u16 ACKPolicy:1; /* 0:normal ack, 1:no ack. */ ++ u16 MTID:1; /*if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ */ ++ u16 Compressed:1; ++ u16 Rsv1:9; ++ u16 TID:4; + } BAR_CONTROL, *PBAR_CONTROL; + + /* BARControl in MTBAR frame */ + typedef struct PACKED { +- USHORT ACKPolicy:1; +- USHORT MTID:1; +- USHORT Compressed:1; +- USHORT Rsv1:9; +- USHORT NumTID:4; ++ u16 ACKPolicy:1; ++ u16 MTID:1; ++ u16 Compressed:1; ++ u16 Rsv1:9; ++ u16 NumTID:4; + } MTBAR_CONTROL, *PMTBAR_CONTROL; + + typedef struct PACKED { +- USHORT Rsv1:12; +- USHORT TID:4; ++ u16 Rsv1:12; ++ u16 TID:4; + } PER_TID_INFO, *PPER_TID_INFO; + + typedef struct { +@@ -535,18 +535,18 @@ typedef struct { + /* BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. */ + typedef struct PACKED _FRAME_BA_REQ { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + BAR_CONTROL BARControl; + BASEQ_CONTROL BAStartingSeq; + } FRAME_BA_REQ, *PFRAME_BA_REQ; + + typedef struct PACKED _FRAME_MTBA_REQ { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + MTBAR_CONTROL MTBARControl; + PER_TID_INFO PerTIDInfo; + BASEQ_CONTROL BAStartingSeq; +@@ -555,84 +555,84 @@ typedef struct PACKED _FRAME_MTBA_REQ { + /* Compressed format is mandantory in HT STA */ + typedef struct PACKED _FRAME_MTBA { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + BA_CONTROL BAControl; + BASEQ_CONTROL BAStartingSeq; +- UCHAR BitMap[8]; ++ u8 BitMap[8]; + } FRAME_MTBA, *PFRAME_MTBA; + + typedef struct PACKED _FRAME_PSMP_ACTION { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Psmp; /* 7.3.1.25 */ ++ u8 Category; ++ u8 Action; ++ u8 Psmp; /* 7.3.1.25 */ + } FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; + + typedef struct PACKED _FRAME_ACTION_HDR { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; ++ u8 Category; ++ u8 Action; + } FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; + + /*Action Frame */ + /*Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 */ + typedef struct PACKED _CHAN_SWITCH_ANNOUNCE { +- UCHAR ElementID; /* ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 */ +- UCHAR Len; ++ u8 ElementID; /* ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 */ ++ u8 Len; + CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; + } CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; + + /*802.11n : 7.3.2.20a */ + typedef struct PACKED _SECOND_CHAN_OFFSET { +- UCHAR ElementID; /* ID = IE_SECONDARY_CH_OFFSET = 62 */ +- UCHAR Len; ++ u8 ElementID; /* ID = IE_SECONDARY_CH_OFFSET = 62 */ ++ u8 Len; + SEC_CHA_OFFSET_IE SecChOffsetIe; + } SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; + + typedef struct PACKED _FRAME_SPETRUM_CS { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; ++ u8 Category; ++ u8 Action; + CHAN_SWITCH_ANNOUNCE CSAnnounce; + SECOND_CHAN_OFFSET SecondChannel; + } FRAME_SPETRUM_CS, *PFRAME_SPETRUM_CS; + + typedef struct PACKED _FRAME_ADDBA_REQ { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; /* 1 */ ++ u8 Category; ++ u8 Action; ++ u8 Token; /* 1 */ + BA_PARM BaParm; /* 2 - 10 */ +- USHORT TimeOutValue; /* 0 - 0 */ ++ u16 TimeOutValue; /* 0 - 0 */ + BASEQ_CONTROL BaStartSeq; /* 0-0 */ + } FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; + + typedef struct PACKED _FRAME_ADDBA_RSP { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT StatusCode; ++ u8 Category; ++ u8 Action; ++ u8 Token; ++ u16 StatusCode; + BA_PARM BaParm; /*0 - 2 */ +- USHORT TimeOutValue; ++ u16 TimeOutValue; + } FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; + + typedef struct PACKED _FRAME_DELBA_REQ { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; ++ u8 Category; ++ u8 Action; + DELBA_PARM DelbaParm; +- USHORT ReasonCode; ++ u16 ReasonCode; + } FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; + + /*7.2.1.7 */ + typedef struct PACKED _FRAME_BAR { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + BAR_CONTROL BarControl; + BASEQ_CONTROL StartingSeq; + } FRAME_BAR, *PFRAME_BAR; +@@ -640,31 +640,31 @@ typedef struct PACKED _FRAME_BAR { + /*7.2.1.7 */ + typedef struct PACKED _FRAME_BA { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + BAR_CONTROL BarControl; + BASEQ_CONTROL StartingSeq; +- UCHAR bitmask[8]; ++ u8 bitmask[8]; + } FRAME_BA, *PFRAME_BA; + + /* Radio Measuement Request Frame Format */ + typedef struct PACKED _FRAME_RM_REQ_ACTION { + HEADER_802_11 Hdr; +- UCHAR Category; +- UCHAR Action; +- UCHAR Token; +- USHORT Repetition; +- UCHAR data[0]; ++ u8 Category; ++ u8 Action; ++ u8 Token; ++ u16 Repetition; ++ u8 data[0]; + } FRAME_RM_REQ_ACTION, *PFRAME_RM_REQ_ACTION; + + typedef struct PACKED { +- UCHAR ID; +- UCHAR Length; +- UCHAR ChannelSwitchMode; +- UCHAR NewRegClass; +- UCHAR NewChannelNum; +- UCHAR ChannelSwitchCount; ++ u8 ID; ++ u8 Length; ++ u8 ChannelSwitchMode; ++ u8 NewRegClass; ++ u8 NewChannelNum; ++ u8 ChannelSwitchCount; + } HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, + *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; + +@@ -683,17 +683,17 @@ typedef struct PACKED { + /* */ + typedef struct PACKED { + BOOLEAN bValid; /* 1: variable contains valid value */ +- UCHAR CfpCount; +- UCHAR CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; ++ u8 CfpCount; ++ u8 CfpPeriod; ++ u16 CfpMaxDuration; ++ u16 CfpDurRemaining; + } CF_PARM, *PCF_PARM; + + typedef struct _CIPHER_SUITE { + NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher 1, this one has more secured cipher suite */ + NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; /* Unicast cipher 2 if AP announce two unicast cipher suite */ + NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Group cipher */ +- USHORT RsnCapability; /* RSN capability from beacon */ ++ u16 RsnCapability; /* RSN capability from beacon */ + BOOLEAN bMixMode; /* Indicate Pair & Group cipher might be different */ + } CIPHER_SUITE, *PCIPHER_SUITE; + +@@ -706,38 +706,38 @@ typedef struct { + BOOLEAN bTxopRequest; + BOOLEAN bAPSDCapable; + /* BOOLEAN bMoreDataAck; */ +- UCHAR EdcaUpdateCount; +- UCHAR Aifsn[4]; /* 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO */ +- UCHAR Cwmin[4]; +- UCHAR Cwmax[4]; +- USHORT Txop[4]; /* in unit of 32-us */ ++ u8 EdcaUpdateCount; ++ u8 Aifsn[4]; /* 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO */ ++ u8 Cwmin[4]; ++ u8 Cwmax[4]; ++ u16 Txop[4]; /* in unit of 32-us */ + BOOLEAN bACM[4]; /* 1: Admission Control of AC_BK is mandattory */ + } EDCA_PARM, *PEDCA_PARM; + + /* QBSS LOAD information from QAP's BEACON/ProbeRsp */ + typedef struct { + BOOLEAN bValid; /* 1: variable contains valid value */ +- USHORT StaNum; +- UCHAR ChannelUtilization; +- USHORT RemainingAdmissionControl; /* in unit of 32-us */ ++ u16 StaNum; ++ u8 ChannelUtilization; ++ u16 RemainingAdmissionControl; /* in unit of 32-us */ + } QBSS_LOAD_PARM, *PQBSS_LOAD_PARM; + + /* QBSS Info field in QSTA's assoc req */ + typedef struct PACKED { +- UCHAR UAPSD_AC_VO:1; +- UCHAR UAPSD_AC_VI:1; +- UCHAR UAPSD_AC_BK:1; +- UCHAR UAPSD_AC_BE:1; +- UCHAR Rsv1:1; +- UCHAR MaxSPLength:2; +- UCHAR Rsv2:1; ++ u8 UAPSD_AC_VO:1; ++ u8 UAPSD_AC_VI:1; ++ u8 UAPSD_AC_BK:1; ++ u8 UAPSD_AC_BE:1; ++ u8 Rsv1:1; ++ u8 MaxSPLength:2; ++ u8 Rsv2:1; + } QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM; + + /* QBSS Info field in QAP's Beacon/ProbeRsp */ + typedef struct PACKED { +- UCHAR ParamSetCount:4; +- UCHAR Rsv:3; +- UCHAR UAPSD:1; ++ u8 ParamSetCount:4; ++ u8 Rsv:3; ++ u8 UAPSD:1; + } QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM; + + /* QOS Capability reported in QAP's BEACON/ProbeRsp */ +@@ -748,46 +748,46 @@ typedef struct { + BOOLEAN bQueueRequest; + BOOLEAN bTxopRequest; + /* BOOLEAN bMoreDataAck; */ +- UCHAR EdcaUpdateCount; ++ u8 EdcaUpdateCount; + } QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM; + + typedef struct { +- UCHAR IELen; +- UCHAR IE[MAX_CUSTOM_LEN]; ++ u8 IELen; ++ u8 IE[MAX_CUSTOM_LEN]; + } WPA_IE_; + + typedef struct { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Channel; +- UCHAR CentralChannel; /*Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. */ +- UCHAR BssType; +- USHORT AtimWin; +- USHORT BeaconPeriod; +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; ++ u8 Bssid[MAC_ADDR_LEN]; ++ u8 Channel; ++ u8 CentralChannel; /*Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. */ ++ u8 BssType; ++ u16 AtimWin; ++ u16 BeaconPeriod; ++ ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 SupRateLen; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 ExtRateLen; + HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; ++ u8 HtCapabilityLen; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR AddHtInfoLen; +- UCHAR NewExtChanOffset; +- CHAR Rssi; +- UCHAR Privacy; /* Indicate security function ON/OFF. Don't mess up with auth mode. */ +- UCHAR Hidden; ++ u8 AddHtInfoLen; ++ u8 NewExtChanOffset; ++ char Rssi; ++ u8 Privacy; /* Indicate security function ON/OFF. Don't mess up with auth mode. */ ++ u8 Hidden; + +- USHORT DtimPeriod; +- USHORT CapabilityInfo; ++ u16 DtimPeriod; ++ u16 CapabilityInfo; + +- USHORT CfpCount; +- USHORT CfpPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpDurRemaining; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; ++ u16 CfpCount; ++ u16 CfpPeriod; ++ u16 CfpMaxDuration; ++ u16 CfpDurRemaining; ++ u8 SsidLen; ++ char Ssid[MAX_LEN_OF_SSID]; + +- ULONG LastBeaconRxTime; /* OS's timestamp */ ++ unsigned long LastBeaconRxTime; /* OS's timestamp */ + + BOOLEAN bSES; + +@@ -800,15 +800,15 @@ typedef struct { + NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; /* Addition mode for WPA2 / WPA capable AP */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; + NDIS_802_11_WEP_STATUS WepStatus; /* Unicast Encryption Algorithm extract from VAR_IE */ +- USHORT VarIELen; /* Length of next VIE include EID & Length */ +- UCHAR VarIEs[MAX_VIE_LEN]; ++ u16 VarIELen; /* Length of next VIE include EID & Length */ ++ u8 VarIEs[MAX_VIE_LEN]; + + /* CCX Ckip information */ +- UCHAR CkipFlag; ++ u8 CkipFlag; + + /* CCX 2 TSF */ +- UCHAR PTSF[4]; /* Parent TSF */ +- UCHAR TTSF[8]; /* Target TSF */ ++ u8 PTSF[4]; /* Parent TSF */ ++ u8 TTSF[8]; /* Target TSF */ + + /* 802.11e d9, and WMM */ + EDCA_PARM EdcaParm; +@@ -819,41 +819,41 @@ typedef struct { + } BSS_ENTRY, *PBSS_ENTRY; + + typedef struct { +- UCHAR BssNr; +- UCHAR BssOverlapNr; ++ u8 BssNr; ++ u8 BssOverlapNr; + BSS_ENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; + } BSS_TABLE, *PBSS_TABLE; + + typedef struct _MLME_QUEUE_ELEM { +- ULONG Machine; +- ULONG MsgType; +- ULONG MsgLen; +- UCHAR Msg[MGMT_DMA_BUFFER_SIZE]; ++ unsigned long Machine; ++ unsigned long MsgType; ++ unsigned long MsgLen; ++ u8 Msg[MGMT_DMA_BUFFER_SIZE]; + LARGE_INTEGER TimeStamp; +- UCHAR Rssi0; +- UCHAR Rssi1; +- UCHAR Rssi2; +- UCHAR Signal; +- UCHAR Channel; +- UCHAR Wcid; ++ u8 Rssi0; ++ u8 Rssi1; ++ u8 Rssi2; ++ u8 Signal; ++ u8 Channel; ++ u8 Wcid; + BOOLEAN Occupied; + } MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM; + + typedef struct _MLME_QUEUE { +- ULONG Num; +- ULONG Head; +- ULONG Tail; ++ unsigned long Num; ++ unsigned long Head; ++ unsigned long Tail; + NDIS_SPIN_LOCK Lock; + MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; + } MLME_QUEUE, *PMLME_QUEUE; + +-typedef VOID(*STATE_MACHINE_FUNC) (VOID * Adaptor, MLME_QUEUE_ELEM * Elem); ++typedef void(*STATE_MACHINE_FUNC) (void * Adaptor, MLME_QUEUE_ELEM * Elem); + + typedef struct _STATE_MACHINE { +- ULONG Base; +- ULONG NrState; +- ULONG NrMsg; +- ULONG CurrState; ++ unsigned long Base; ++ unsigned long NrState; ++ unsigned long NrMsg; ++ unsigned long CurrState; + STATE_MACHINE_FUNC *TransFunc; + } STATE_MACHINE, *PSTATE_MACHINE; + +@@ -864,33 +864,33 @@ typedef struct _STATE_MACHINE { + /* separate this under-trial settings away from pAd->StaActive so that once */ + /* this new attempt failed, driver can auto-recover back to the active settings. */ + typedef struct _MLME_AUX { +- UCHAR BssType; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR AutoReconnectSsid[MAX_LEN_OF_SSID]; +- UCHAR AutoReconnectSsidLen; +- USHORT Alg; +- UCHAR ScanType; +- UCHAR Channel; +- UCHAR CentralChannel; +- USHORT Aid; +- USHORT CapabilityInfo; +- USHORT BeaconPeriod; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; +- USHORT AtimWin; ++ u8 BssType; ++ u8 Ssid[MAX_LEN_OF_SSID]; ++ u8 SsidLen; ++ u8 Bssid[MAC_ADDR_LEN]; ++ u8 AutoReconnectSsid[MAX_LEN_OF_SSID]; ++ u8 AutoReconnectSsidLen; ++ u16 Alg; ++ u8 ScanType; ++ u8 Channel; ++ u8 CentralChannel; ++ u16 Aid; ++ u16 CapabilityInfo; ++ u16 BeaconPeriod; ++ u16 CfpMaxDuration; ++ u16 CfpPeriod; ++ u16 AtimWin; + + /* Copy supported rate from desired AP's beacon. We are trying to match */ + /* AP's supported and extended rate settings. */ +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 SupRateLen; ++ u8 ExtRateLen; + HT_CAPABILITY_IE HtCapability; +- UCHAR HtCapabilityLen; ++ u8 HtCapabilityLen; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR NewExtChannelOffset; ++ u8 NewExtChannelOffset; + /*RT_HT_CAPABILITY SupportedHtPhy; */ + + /* new for QOS */ +@@ -899,12 +899,12 @@ typedef struct _MLME_AUX { + QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ + + /* new to keep Ralink specific feature */ +- ULONG APRalinkIe; ++ unsigned long APRalinkIe; + + BSS_TABLE SsidBssTab; /* AP list for the same SSID */ + BSS_TABLE RoamTab; /* AP list eligible for roaming */ +- ULONG BssIdx; +- ULONG RoamIdx; ++ unsigned long BssIdx; ++ unsigned long RoamIdx; + + BOOLEAN CurrReqIsFromNdis; + +@@ -914,81 +914,81 @@ typedef struct _MLME_AUX { + } MLME_AUX, *PMLME_AUX; + + typedef struct _MLME_ADDBA_REQ_STRUCT { +- UCHAR Wcid; /* */ +- UCHAR pAddr[MAC_ADDR_LEN]; +- UCHAR BaBufSize; +- USHORT TimeOutValue; +- UCHAR TID; +- UCHAR Token; +- USHORT BaStartSeq; ++ u8 Wcid; /* */ ++ u8 pAddr[MAC_ADDR_LEN]; ++ u8 BaBufSize; ++ u16 TimeOutValue; ++ u8 TID; ++ u8 Token; ++ u16 BaStartSeq; + } MLME_ADDBA_REQ_STRUCT, *PMLME_ADDBA_REQ_STRUCT; + + typedef struct _MLME_DELBA_REQ_STRUCT { +- UCHAR Wcid; /* */ +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR TID; +- UCHAR Initiator; ++ u8 Wcid; /* */ ++ u8 Addr[MAC_ADDR_LEN]; ++ u8 TID; ++ u8 Initiator; + } MLME_DELBA_REQ_STRUCT, *PMLME_DELBA_REQ_STRUCT; + + /* assoc struct is equal to reassoc */ + typedef struct _MLME_ASSOC_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT CapabilityInfo; +- USHORT ListenIntv; +- ULONG Timeout; ++ u8 Addr[MAC_ADDR_LEN]; ++ u16 CapabilityInfo; ++ u16 ListenIntv; ++ unsigned long Timeout; + } MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, + *PMLME_REASSOC_REQ_STRUCT; + + typedef struct _MLME_DISASSOC_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; ++ u8 Addr[MAC_ADDR_LEN]; ++ u16 Reason; + } MLME_DISASSOC_REQ_STRUCT, *PMLME_DISASSOC_REQ_STRUCT; + + typedef struct _MLME_AUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Alg; +- ULONG Timeout; ++ u8 Addr[MAC_ADDR_LEN]; ++ u16 Alg; ++ unsigned long Timeout; + } MLME_AUTH_REQ_STRUCT, *PMLME_AUTH_REQ_STRUCT; + + typedef struct _MLME_DEAUTH_REQ_STRUCT { +- UCHAR Addr[MAC_ADDR_LEN]; +- USHORT Reason; ++ u8 Addr[MAC_ADDR_LEN]; ++ u16 Reason; + } MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT; + + typedef struct { +- ULONG BssIdx; ++ unsigned long BssIdx; + } MLME_JOIN_REQ_STRUCT; + + typedef struct _MLME_SCAN_REQ_STRUCT { +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR BssType; +- UCHAR ScanType; +- UCHAR SsidLen; +- CHAR Ssid[MAX_LEN_OF_SSID]; ++ u8 Bssid[MAC_ADDR_LEN]; ++ u8 BssType; ++ u8 ScanType; ++ u8 SsidLen; ++ char Ssid[MAX_LEN_OF_SSID]; + } MLME_SCAN_REQ_STRUCT, *PMLME_SCAN_REQ_STRUCT; + + typedef struct _MLME_START_REQ_STRUCT { +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; ++ char Ssid[MAX_LEN_OF_SSID]; ++ u8 SsidLen; + } MLME_START_REQ_STRUCT, *PMLME_START_REQ_STRUCT; + + typedef struct PACKED { +- UCHAR Eid; +- UCHAR Len; +- UCHAR Octet[1]; ++ u8 Eid; ++ u8 Len; ++ u8 Octet[1]; + } EID_STRUCT, *PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; + + typedef struct PACKED _RTMP_TX_RATE_SWITCH { +- UCHAR ItemNo; +- UCHAR STBC:1; +- UCHAR ShortGI:1; +- UCHAR BW:1; +- UCHAR Rsv1:1; +- UCHAR Mode:2; +- UCHAR Rsv2:2; +- UCHAR CurrMCS; +- UCHAR TrainUp; +- UCHAR TrainDown; ++ u8 ItemNo; ++ u8 STBC:1; ++ u8 ShortGI:1; ++ u8 BW:1; ++ u8 Rsv1:1; ++ u8 Mode:2; ++ u8 Rsv2:2; ++ u8 CurrMCS; ++ u8 TrainUp; ++ u8 TrainDown; + } RRTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH; + + /* ========================== AP mlme.h =============================== */ +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index ba72141..05a71f0 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -135,7 +135,7 @@ typedef enum _NDIS_802_11_STATUS_TYPE { + Ndis802_11StatusTypeMax /* not a real type, defined as an upper bound */ + } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; + +-typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; ++typedef u8 NDIS_802_11_MAC_ADDRESS[6]; + + typedef struct _NDIS_802_11_STATUS_INDICATION { + NDIS_802_11_STATUS_TYPE StatusType; +@@ -150,20 +150,20 @@ typedef struct _NDIS_802_11_STATUS_INDICATION { + #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E + + typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST { +- ULONG Length; /* Length of structure */ ++ unsigned long Length; /* Length of structure */ + NDIS_802_11_MAC_ADDRESS Bssid; +- ULONG Flags; ++ unsigned long Flags; + } NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; + + /*Added new types for PMKID Candidate lists. */ + typedef struct _PMKID_CANDIDATE { + NDIS_802_11_MAC_ADDRESS BSSID; +- ULONG Flags; ++ unsigned long Flags; + } PMKID_CANDIDATE, *PPMKID_CANDIDATE; + + typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST { +- ULONG Version; /* Version of the structure */ +- ULONG NumCandidates; /* No. of pmkid candidates */ ++ unsigned long Version; /* Version of the structure */ ++ unsigned long NumCandidates; /* No. of pmkid candidates */ + PMKID_CANDIDATE CandidateList[1]; + } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; + +@@ -183,7 +183,7 @@ typedef enum _NDIS_802_11_NETWORK_TYPE { + } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; + + typedef struct _NDIS_802_11_NETWORK_TYPE_LIST { +- UINT NumberOfItems; /* in list below, at least 1 */ ++ u32 NumberOfItems; /* in list below, at least 1 */ + NDIS_802_11_NETWORK_TYPE NetworkType[1]; + } NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST; + +@@ -195,30 +195,30 @@ typedef enum _NDIS_802_11_POWER_MODE { + Ndis802_11PowerModeMax /* not a real mode, defined as an upper bound */ + } NDIS_802_11_POWER_MODE, *PNDIS_802_11_POWER_MODE; + +-typedef ULONG NDIS_802_11_TX_POWER_LEVEL; /* in milliwatts */ ++typedef unsigned long NDIS_802_11_TX_POWER_LEVEL; /* in milliwatts */ + + /* */ + /* Received Signal Strength Indication */ + /* */ +-typedef LONG NDIS_802_11_RSSI; /* in dBm */ ++typedef long NDIS_802_11_RSSI; /* in dBm */ + + typedef struct _NDIS_802_11_CONFIGURATION_FH { +- ULONG Length; /* Length of structure */ +- ULONG HopPattern; /* As defined by 802.11, MSB set */ +- ULONG HopSet; /* to one if non-802.11 */ +- ULONG DwellTime; /* units are Kusec */ ++ unsigned long Length; /* Length of structure */ ++ unsigned long HopPattern; /* As defined by 802.11, MSB set */ ++ unsigned long HopSet; /* to one if non-802.11 */ ++ unsigned long DwellTime; /* units are Kusec */ + } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; + + typedef struct _NDIS_802_11_CONFIGURATION { +- ULONG Length; /* Length of structure */ +- ULONG BeaconPeriod; /* units are Kusec */ +- ULONG ATIMWindow; /* units are Kusec */ +- ULONG DSConfig; /* Frequency, units are kHz */ ++ unsigned long Length; /* Length of structure */ ++ unsigned long BeaconPeriod; /* units are Kusec */ ++ unsigned long ATIMWindow; /* units are Kusec */ ++ unsigned long DSConfig; /* Frequency, units are kHz */ + NDIS_802_11_CONFIGURATION_FH FHConfig; + } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; + + typedef struct _NDIS_802_11_STATISTICS { +- ULONG Length; /* Length of structure */ ++ unsigned long Length; /* Length of structure */ + LARGE_INTEGER TransmittedFragmentCount; + LARGE_INTEGER MulticastTransmittedFrameCount; + LARGE_INTEGER FailedCount; +@@ -242,69 +242,69 @@ typedef struct _NDIS_802_11_STATISTICS { + LARGE_INTEGER FourWayHandshakeFailures; + } NDIS_802_11_STATISTICS, *PNDIS_802_11_STATISTICS; + +-typedef ULONG NDIS_802_11_KEY_INDEX; +-typedef ULONGLONG NDIS_802_11_KEY_RSC; ++typedef unsigned long NDIS_802_11_KEY_INDEX; ++typedef unsigned long long NDIS_802_11_KEY_RSC; + + #define MAX_RADIUS_SRV_NUM 2 /* 802.1x failover number */ + + typedef struct PACKED _RADIUS_SRV_INFO { +- UINT32 radius_ip; +- UINT32 radius_port; +- UCHAR radius_key[64]; +- UCHAR radius_key_len; ++ u32 radius_ip; ++ u32 radius_port; ++ u8 radius_key[64]; ++ u8 radius_key_len; + } RADIUS_SRV_INFO, *PRADIUS_SRV_INFO; + + typedef struct PACKED _RADIUS_KEY_INFO { +- UCHAR radius_srv_num; ++ u8 radius_srv_num; + RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; +- UCHAR ieee8021xWEP; /* dynamic WEP */ +- UCHAR key_index; +- UCHAR key_length; /* length of key in bytes */ +- UCHAR key_material[13]; ++ u8 ieee8021xWEP; /* dynamic WEP */ ++ u8 key_index; ++ u8 key_length; /* length of key in bytes */ ++ u8 key_material[13]; + } RADIUS_KEY_INFO, *PRADIUS_KEY_INFO; + + /* It's used by 802.1x daemon to require relative configuration */ + typedef struct PACKED _RADIUS_CONF { +- UINT32 Length; /* Length of this structure */ +- UCHAR mbss_num; /* indicate multiple BSS number */ +- UINT32 own_ip_addr; +- UINT32 retry_interval; +- UINT32 session_timeout_interval; +- UCHAR EAPifname[8][IFNAMSIZ]; +- UCHAR EAPifname_len[8]; +- UCHAR PreAuthifname[8][IFNAMSIZ]; +- UCHAR PreAuthifname_len[8]; ++ u32 Length; /* Length of this structure */ ++ u8 mbss_num; /* indicate multiple BSS number */ ++ u32 own_ip_addr; ++ u32 retry_interval; ++ u32 session_timeout_interval; ++ u8 EAPifname[8][IFNAMSIZ]; ++ u8 EAPifname_len[8]; ++ u8 PreAuthifname[8][IFNAMSIZ]; ++ u8 PreAuthifname_len[8]; + RADIUS_KEY_INFO RadiusInfo[8]; + } RADIUS_CONF, *PRADIUS_CONF; + + /* Key mapping keys require a BSSID */ + typedef struct _NDIS_802_11_KEY { +- UINT Length; /* Length of this structure */ +- UINT KeyIndex; +- UINT KeyLength; /* length of key in bytes */ ++ u32 Length; /* Length of this structure */ ++ u32 KeyIndex; ++ u32 KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; + NDIS_802_11_KEY_RSC KeyRSC; +- UCHAR KeyMaterial[1]; /* variable length depending on above field */ ++ u8 KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_KEY, *PNDIS_802_11_KEY; + + typedef struct _NDIS_802_11_PASSPHRASE { +- UINT KeyLength; /* length of key in bytes */ ++ u32 KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; +- UCHAR KeyMaterial[1]; /* variable length depending on above field */ ++ u8 KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; + + typedef struct _NDIS_802_11_REMOVE_KEY { +- UINT Length; /* Length of this structure */ +- UINT KeyIndex; ++ u32 Length; /* Length of this structure */ ++ u32 KeyIndex; + NDIS_802_11_MAC_ADDRESS BSSID; + } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; + + typedef struct _NDIS_802_11_WEP { +- UINT Length; /* Length of this structure */ +- UINT KeyIndex; /* 0 is the per-client key, 1-N are the */ ++ u32 Length; /* Length of this structure */ ++ u32 KeyIndex; /* 0 is the per-client key, 1-N are the */ + /* global keys */ +- UINT KeyLength; /* length of key in bytes */ +- UCHAR KeyMaterial[1]; /* variable length depending on above field */ ++ u32 KeyLength; /* length of key in bytes */ ++ u8 KeyMaterial[1]; /* variable length depending on above field */ + } NDIS_802_11_WEP, *PNDIS_802_11_WEP; + + typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { +@@ -330,21 +330,21 @@ typedef enum _NDIS_802_11_AUTHENTICATION_MODE { + Ndis802_11AuthModeMax /* Not a real mode, defined as upper bound */ + } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE; + +-typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; /* Set of 8 data rates */ +-typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; /* Set of 16 data rates */ ++typedef u8 NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; /* Set of 8 data rates */ ++typedef u8 NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; /* Set of 16 data rates */ + + typedef struct PACKED _NDIS_802_11_SSID { +- UINT SsidLength; /* length of SSID field below, in bytes; */ ++ u32 SsidLength; /* length of SSID field below, in bytes; */ + /* this can be zero. */ +- UCHAR Ssid[NDIS_802_11_LENGTH_SSID]; /* SSID information field */ ++ u8 Ssid[NDIS_802_11_LENGTH_SSID]; /* SSID information field */ + } NDIS_802_11_SSID, *PNDIS_802_11_SSID; + + typedef struct PACKED _NDIS_WLAN_BSSID { +- ULONG Length; /* Length of this structure */ ++ unsigned long Length; /* Length of this structure */ + NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ +- UCHAR Reserved[2]; ++ u8 Reserved[2]; + NDIS_802_11_SSID Ssid; /* SSID */ +- ULONG Privacy; /* WEP encryption requirement */ ++ unsigned long Privacy; /* WEP encryption requirement */ + NDIS_802_11_RSSI Rssi; /* receive signal strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; + NDIS_802_11_CONFIGURATION Configuration; +@@ -353,49 +353,49 @@ typedef struct PACKED _NDIS_WLAN_BSSID { + } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; + + typedef struct PACKED _NDIS_802_11_BSSID_LIST { +- UINT NumberOfItems; /* in list below, at least 1 */ ++ u32 NumberOfItems; /* in list below, at least 1 */ + NDIS_WLAN_BSSID Bssid[1]; + } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; + + /* Added Capabilities, IELength and IEs for each BSSID */ + typedef struct PACKED _NDIS_WLAN_BSSID_EX { +- ULONG Length; /* Length of this structure */ ++ unsigned long Length; /* Length of this structure */ + NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ +- UCHAR Reserved[2]; ++ u8 Reserved[2]; + NDIS_802_11_SSID Ssid; /* SSID */ +- UINT Privacy; /* WEP encryption requirement */ ++ u32 Privacy; /* WEP encryption requirement */ + NDIS_802_11_RSSI Rssi; /* receive signal */ + /* strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; + NDIS_802_11_CONFIGURATION Configuration; + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; + NDIS_802_11_RATES_EX SupportedRates; +- ULONG IELength; +- UCHAR IEs[1]; ++ unsigned long IELength; ++ u8 IEs[1]; + } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; + + typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX { +- UINT NumberOfItems; /* in list below, at least 1 */ ++ u32 NumberOfItems; /* in list below, at least 1 */ + NDIS_WLAN_BSSID_EX Bssid[1]; + } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; + + typedef struct PACKED _NDIS_802_11_FIXED_IEs { +- UCHAR Timestamp[8]; +- USHORT BeaconInterval; +- USHORT Capabilities; ++ u8 Timestamp[8]; ++ u16 BeaconInterval; ++ u16 Capabilities; + } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; + + typedef struct _NDIS_802_11_VARIABLE_IEs { +- UCHAR ElementID; +- UCHAR Length; /* Number of bytes in data field */ +- UCHAR data[1]; ++ u8 ElementID; ++ u8 Length; /* Number of bytes in data field */ ++ u8 data[1]; + } NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; + +-typedef ULONG NDIS_802_11_FRAGMENTATION_THRESHOLD; ++typedef unsigned long NDIS_802_11_FRAGMENTATION_THRESHOLD; + +-typedef ULONG NDIS_802_11_RTS_THRESHOLD; ++typedef unsigned long NDIS_802_11_RTS_THRESHOLD; + +-typedef ULONG NDIS_802_11_ANTENNA; ++typedef unsigned long NDIS_802_11_ANTENNA; + + typedef enum _NDIS_802_11_PRIVACY_FILTER { + Ndis802_11PrivFilterAcceptAll, +@@ -437,27 +437,27 @@ typedef enum _NDIS_802_11_RELOAD_DEFAULTS { + #define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 + + typedef struct _NDIS_802_11_AI_REQFI { +- USHORT Capabilities; +- USHORT ListenInterval; ++ u16 Capabilities; ++ u16 ListenInterval; + NDIS_802_11_MAC_ADDRESS CurrentAPAddress; + } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; + + typedef struct _NDIS_802_11_AI_RESFI { +- USHORT Capabilities; +- USHORT StatusCode; +- USHORT AssociationId; ++ u16 Capabilities; ++ u16 StatusCode; ++ u16 AssociationId; + } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; + + typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION { +- ULONG Length; +- USHORT AvailableRequestFixedIEs; ++ unsigned long Length; ++ u16 AvailableRequestFixedIEs; + NDIS_802_11_AI_REQFI RequestFixedIEs; +- ULONG RequestIELength; +- ULONG OffsetRequestIEs; +- USHORT AvailableResponseFixedIEs; ++ unsigned long RequestIELength; ++ unsigned long OffsetRequestIEs; ++ u16 AvailableResponseFixedIEs; + NDIS_802_11_AI_RESFI ResponseFixedIEs; +- ULONG ResponseIELength; +- ULONG OffsetResponseIEs; ++ unsigned long ResponseIELength; ++ unsigned long OffsetResponseIEs; + } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; + + typedef struct _NDIS_802_11_AUTHENTICATION_EVENT { +@@ -472,7 +472,7 @@ typedef enum _NDIS_802_11_MEDIA_STREAM_MODE { + } NDIS_802_11_MEDIA_STREAM_MODE, *PNDIS_802_11_MEDIA_STREAM_MODE; + + /* PMKID Structures */ +-typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; ++typedef u8 NDIS_802_11_PMKID_VALUE[16]; + + typedef struct _BSSID_INFO { + NDIS_802_11_MAC_ADDRESS BSSID; +@@ -480,8 +480,8 @@ typedef struct _BSSID_INFO { + } BSSID_INFO, *PBSSID_INFO; + + typedef struct _NDIS_802_11_PMKID { +- UINT Length; +- UINT BSSIDInfoCount; ++ u32 Length; ++ u32 BSSIDInfoCount; + BSSID_INFO BSSIDInfo[1]; + } NDIS_802_11_PMKID, *PNDIS_802_11_PMKID; + +@@ -492,10 +492,10 @@ typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION { + *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; + + typedef struct _NDIS_802_11_CAPABILITY { +- ULONG Length; +- ULONG Version; +- ULONG NoOfPMKIDs; +- ULONG NoOfAuthEncryptPairsSupported; ++ unsigned long Length; ++ unsigned long Version; ++ unsigned long NoOfPMKIDs; ++ unsigned long NoOfAuthEncryptPairsSupported; + NDIS_802_11_AUTHENTICATION_ENCRYPTION + AuthenticationEncryptionSupported[1]; + } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; +@@ -561,16 +561,16 @@ enum { + /* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ + typedef union _HTTRANSMIT_SETTING { + struct { +- USHORT MCS:7; /* MCS */ +- USHORT BW:1; /*channel bandwidth 20MHz or 40 MHz */ +- USHORT ShortGI:1; +- USHORT STBC:2; /*SPACE */ +-/* USHORT rsv:3; */ +- USHORT rsv:2; +- USHORT TxBF:1; +- USHORT MODE:2; /* Use definition MODE_xxx. */ ++ u16 MCS:7; /* MCS */ ++ u16 BW:1; /*channel bandwidth 20MHz or 40 MHz */ ++ u16 ShortGI:1; ++ u16 STBC:2; /*SPACE */ ++/* u16 rsv:3; */ ++ u16 rsv:2; ++ u16 TxBF:1; ++ u16 MODE:2; /* Use definition MODE_xxx. */ + } field; +- USHORT word; ++ u16 word; + } HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING; + + typedef enum _RT_802_11_PREAMBLE { +@@ -596,122 +596,122 @@ typedef enum _RT_802_11_PHY_MODE { + + /* put all proprietery for-query objects here to reduce # of Query_OID */ + typedef struct _RT_802_11_LINK_STATUS { +- ULONG CurrTxRate; /* in units of 0.5Mbps */ +- ULONG ChannelQuality; /* 0..100 % */ +- ULONG TxByteCount; /* both ok and fail */ +- ULONG RxByteCount; /* both ok and fail */ +- ULONG CentralChannel; /* 40MHz central channel number */ ++ unsigned long CurrTxRate; /* in units of 0.5Mbps */ ++ unsigned long ChannelQuality; /* 0..100 % */ ++ unsigned long TxByteCount; /* both ok and fail */ ++ unsigned long RxByteCount; /* both ok and fail */ ++ unsigned long CentralChannel; /* 40MHz central channel number */ + } RT_802_11_LINK_STATUS, *PRT_802_11_LINK_STATUS; + + typedef struct _RT_802_11_EVENT_LOG { + LARGE_INTEGER SystemTime; /* timestammp via NdisGetCurrentSystemTime() */ +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Event; /* EVENT_xxx */ ++ u8 Addr[MAC_ADDR_LENGTH]; ++ u16 Event; /* EVENT_xxx */ + } RT_802_11_EVENT_LOG, *PRT_802_11_EVENT_LOG; + + typedef struct _RT_802_11_EVENT_TABLE { +- ULONG Num; +- ULONG Rsv; /* to align Log[] at LARGE_INEGER boundary */ ++ unsigned long Num; ++ unsigned long Rsv; /* to align Log[] at LARGE_INEGER boundary */ + RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; + } RT_802_11_EVENT_TABLE, PRT_802_11_EVENT_TABLE; + + /* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ + typedef union _MACHTTRANSMIT_SETTING { + struct { +- USHORT MCS:7; /* MCS */ +- USHORT BW:1; /*channel bandwidth 20MHz or 40 MHz */ +- USHORT ShortGI:1; +- USHORT STBC:2; /*SPACE */ +- USHORT rsv:3; +- USHORT MODE:2; /* Use definition MODE_xxx. */ ++ u16 MCS:7; /* MCS */ ++ u16 BW:1; /*channel bandwidth 20MHz or 40 MHz */ ++ u16 ShortGI:1; ++ u16 STBC:2; /*SPACE */ ++ u16 rsv:3; ++ u16 MODE:2; /* Use definition MODE_xxx. */ + } field; +- USHORT word; ++ u16 word; + } MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; + + typedef struct _RT_802_11_MAC_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- UCHAR Aid; +- UCHAR Psm; /* 0:PWR_ACTIVE, 1:PWR_SAVE */ +- UCHAR MimoPs; /* 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled */ +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- UINT32 ConnectedTime; ++ u8 Addr[MAC_ADDR_LENGTH]; ++ u8 Aid; ++ u8 Psm; /* 0:PWR_ACTIVE, 1:PWR_SAVE */ ++ u8 MimoPs; /* 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled */ ++ char AvgRssi0; ++ char AvgRssi1; ++ char AvgRssi2; ++ u32 ConnectedTime; + MACHTTRANSMIT_SETTING TxRate; + } RT_802_11_MAC_ENTRY, *PRT_802_11_MAC_ENTRY; + + typedef struct _RT_802_11_MAC_TABLE { +- ULONG Num; ++ unsigned long Num; + RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; + } RT_802_11_MAC_TABLE, *PRT_802_11_MAC_TABLE; + + /* structure for query/set hardware register - MAC, BBP, RF register */ + typedef struct _RT_802_11_HARDWARE_REGISTER { +- ULONG HardwareType; /* 0:MAC, 1:BBP, 2:RF register, 3:EEPROM */ +- ULONG Offset; /* Q/S register offset addr */ +- ULONG Data; /* R/W data buffer */ ++ unsigned long HardwareType; /* 0:MAC, 1:BBP, 2:RF register, 3:EEPROM */ ++ unsigned long Offset; /* Q/S register offset addr */ ++ unsigned long Data; /* R/W data buffer */ + } RT_802_11_HARDWARE_REGISTER, *PRT_802_11_HARDWARE_REGISTER; + + typedef struct _RT_802_11_AP_CONFIG { +- ULONG EnableTxBurst; /* 0-disable, 1-enable */ +- ULONG EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ +- ULONG IsolateInterStaTraffic; /* 0-disable, 1-enable isolation */ +- ULONG HideSsid; /* 0-disable, 1-enable hiding */ +- ULONG UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ +- ULONG UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time */ +- ULONG Rsv1; /* must be 0 */ +- ULONG SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ ++ unsigned long EnableTxBurst; /* 0-disable, 1-enable */ ++ unsigned long EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ ++ unsigned long IsolateInterStaTraffic; /* 0-disable, 1-enable isolation */ ++ unsigned long HideSsid; /* 0-disable, 1-enable hiding */ ++ unsigned long UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ ++ unsigned long UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time */ ++ unsigned long Rsv1; /* must be 0 */ ++ unsigned long SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ + } RT_802_11_AP_CONFIG, *PRT_802_11_AP_CONFIG; + + /* structure to query/set STA_CONFIG */ + typedef struct _RT_802_11_STA_CONFIG { +- ULONG EnableTxBurst; /* 0-disable, 1-enable */ +- ULONG EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ +- ULONG UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ +- ULONG UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time when applicable */ +- ULONG AdhocMode; /* 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only */ +- ULONG HwRadioStatus; /* 0-OFF, 1-ON, default is 1, Read-Only */ +- ULONG Rsv1; /* must be 0 */ +- ULONG SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ ++ unsigned long EnableTxBurst; /* 0-disable, 1-enable */ ++ unsigned long EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ ++ unsigned long UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ ++ unsigned long UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time when applicable */ ++ unsigned long AdhocMode; /* 0-11b rates only (WIFI spec), 1 - b/g mixed, 2 - g only */ ++ unsigned long HwRadioStatus; /* 0-OFF, 1-ON, default is 1, Read-Only */ ++ unsigned long Rsv1; /* must be 0 */ ++ unsigned long SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ + } RT_802_11_STA_CONFIG, *PRT_802_11_STA_CONFIG; + + /* */ + /* For OID Query or Set about BA structure */ + /* */ + typedef struct _OID_BACAP_STRUC { +- UCHAR RxBAWinLimit; +- UCHAR TxBAWinLimit; +- UCHAR Policy; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ +- UCHAR MpduDensity; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ +- UCHAR AmsduEnable; /*Enable AMSDU transmisstion */ +- UCHAR AmsduSize; /* 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935}; */ +- UCHAR MMPSmode; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */ ++ u8 RxBAWinLimit; ++ u8 TxBAWinLimit; ++ u8 Policy; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ ++ u8 MpduDensity; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ ++ u8 AmsduEnable; /*Enable AMSDU transmisstion */ ++ u8 AmsduSize; /* 0:3839, 1:7935 bytes. u32 MSDUSizeToBytes[] = { 3839, 7935}; */ ++ u8 MMPSmode; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */ + BOOLEAN AutoBA; /* Auto BA will automatically */ + } OID_BACAP_STRUC, *POID_BACAP_STRUC; + + typedef struct _RT_802_11_ACL_ENTRY { +- UCHAR Addr[MAC_ADDR_LENGTH]; +- USHORT Rsv; ++ u8 Addr[MAC_ADDR_LENGTH]; ++ u16 Rsv; + } RT_802_11_ACL_ENTRY, *PRT_802_11_ACL_ENTRY; + + typedef struct PACKED _RT_802_11_ACL { +- ULONG Policy; /* 0-disable, 1-positive list, 2-negative list */ +- ULONG Num; ++ unsigned long Policy; /* 0-disable, 1-positive list, 2-negative list */ ++ unsigned long Num; + RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; + } RT_802_11_ACL, *PRT_802_11_ACL; + + typedef struct _RT_802_11_WDS { +- ULONG Num; ++ unsigned long Num; + NDIS_802_11_MAC_ADDRESS Entry[24 /*MAX_NUM_OF_WDS_LINK */ ]; +- ULONG KeyLength; +- UCHAR KeyMaterial[32]; ++ unsigned long KeyLength; ++ u8 KeyMaterial[32]; + } RT_802_11_WDS, *PRT_802_11_WDS; + + typedef struct _RT_802_11_TX_RATES_ { +- UCHAR SupRateLen; +- UCHAR SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; +- UCHAR ExtRateLen; +- UCHAR ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; ++ u8 SupRateLen; ++ u8 SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; ++ u8 ExtRateLen; ++ u8 ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; + } RT_802_11_TX_RATES, *PRT_802_11_TX_RATES; + + /* Definition of extra information code */ +@@ -734,14 +734,14 @@ typedef struct _RT_802_11_TX_RATES_ { + /* This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. */ + typedef struct { + RT_802_11_PHY_MODE PhyMode; /* */ +- UCHAR TransmitNo; +- UCHAR HtMode; /*HTMODE_GF or HTMODE_MM */ +- UCHAR ExtOffset; /*extension channel above or below */ +- UCHAR MCS; +- UCHAR BW; +- UCHAR STBC; +- UCHAR SHORTGI; +- UCHAR rsv; ++ u8 TransmitNo; ++ u8 HtMode; /*HTMODE_GF or HTMODE_MM */ ++ u8 ExtOffset; /*extension channel above or below */ ++ u8 MCS; ++ u8 BW; ++ u8 STBC; ++ u8 SHORTGI; ++ u8 rsv; + } OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE; + + #define MAX_CUSTOM_LEN 128 +@@ -753,26 +753,26 @@ typedef enum _RT_802_11_D_CLIENT_MODE { + } RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE; + + typedef struct _RT_CHANNEL_LIST_INFO { +- UCHAR ChannelList[MAX_NUM_OF_CHS]; /* list all supported channels for site survey */ +- UCHAR ChannelListNum; /* number of channel in ChannelList[] */ ++ u8 ChannelList[MAX_NUM_OF_CHS]; /* list all supported channels for site survey */ ++ u8 ChannelListNum; /* number of channel in ChannelList[] */ + } RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; + + /* WSC configured credential */ + typedef struct _WSC_CREDENTIAL { + NDIS_802_11_SSID SSID; /* mandatory */ +- USHORT AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */ +- USHORT EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */ +- UCHAR Key[64]; /* mandatory, Maximum 64 byte */ +- USHORT KeyLength; +- UCHAR MacAddr[6]; /* mandatory, AP MAC address */ +- UCHAR KeyIndex; /* optional, default is 1 */ +- UCHAR Rsvd[3]; /* Make alignment */ ++ u16 AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */ ++ u16 EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */ ++ u8 Key[64]; /* mandatory, Maximum 64 byte */ ++ u16 KeyLength; ++ u8 MacAddr[6]; /* mandatory, AP MAC address */ ++ u8 KeyIndex; /* optional, default is 1 */ ++ u8 Rsvd[3]; /* Make alignment */ + } WSC_CREDENTIAL, *PWSC_CREDENTIAL; + + /* WSC configured profiles */ + typedef struct _WSC_PROFILE { +- UINT ProfileCnt; +- UINT ApplyProfileIdx; /* add by johnli, fix WPS test plan 5.1.1 */ ++ u32 ProfileCnt; ++ u32 ApplyProfileIdx; /* add by johnli, fix WPS test plan 5.1.1 */ + WSC_CREDENTIAL Profile[8]; /* Support up to 8 profiles */ + } WSC_PROFILE, *PWSC_PROFILE; + +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 76c71f1..24f939d 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -52,13 +52,13 @@ MODULE_ALIAS("rt3090sta"); + extern int rt28xx_close(IN struct net_device *net_dev); + extern int rt28xx_open(struct net_device *net_dev); + +-static VOID __devexit rt2860_remove_one(struct pci_dev *pci_dev); +-static INT __devinit rt2860_probe(struct pci_dev *pci_dev, ++static void __devexit rt2860_remove_one(struct pci_dev *pci_dev); ++static int __devinit rt2860_probe(struct pci_dev *pci_dev, + const struct pci_device_id *ent); + static void __exit rt2860_cleanup_module(void); + static int __init rt2860_init_module(void); + +-static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, ++static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, + IN PRTMP_ADAPTER pAd); + + #ifdef CONFIG_PM +@@ -123,7 +123,7 @@ resume:rt2860_resume, + ***************************************************************************/ + #ifdef CONFIG_PM + +-VOID RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { + /* clear PS packets */ + /* clear TxSw packets */ +@@ -133,7 +133,7 @@ static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; +- INT32 retval = 0; ++ int retval = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); + +@@ -185,7 +185,7 @@ static int rt2860_resume(struct pci_dev *pci_dev) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; +- INT32 retval; ++ int retval; + + /* set the power state of a PCI device */ + /* PCI has 4 power states, DO (normal) ~ D3(less power) */ +@@ -246,7 +246,7 @@ static int rt2860_resume(struct pci_dev *pci_dev) + } + #endif /* CONFIG_PM // */ + +-static INT __init rt2860_init_module(VOID) ++static int __init rt2860_init_module(void) + { + return pci_register_driver(&rt2860_driver); + } +@@ -254,7 +254,7 @@ static INT __init rt2860_init_module(VOID) + /* */ + /* Driver module unload function */ + /* */ +-static VOID __exit rt2860_cleanup_module(VOID) ++static void __exit rt2860_cleanup_module(void) + { + pci_unregister_driver(&rt2860_driver); + } +@@ -265,15 +265,15 @@ module_exit(rt2860_cleanup_module); + /* */ + /* PCI device probe & initialization function */ + /* */ +-static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, ++static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, + IN const struct pci_device_id *pci_id) + { + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; + struct net_device *net_dev; +- PVOID handle; +- PSTRING print_name; +- ULONG csr_addr; +- INT rv = 0; ++ void *handle; ++ char *print_name; ++ unsigned long csr_addr; ++ int rv = 0; + RTMP_OS_NETDEV_OP_HOOK netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); +@@ -286,7 +286,7 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + return rv; + } + +- print_name = (PSTRING) pci_name(pci_dev); ++ print_name = (char *)pci_name(pci_dev); + + if ((rv = pci_request_regions(pci_dev, print_name)) != 0) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -300,14 +300,14 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + if (!csr_addr) { + DBGPRINT(RT_DEBUG_ERROR, + ("ioremap failed for device %s, region 0x%lX @ 0x%lX\n", +- print_name, (ULONG) pci_resource_len(pci_dev, 0), +- (ULONG) pci_resource_start(pci_dev, 0))); ++ print_name, (unsigned long)pci_resource_len(pci_dev, 0), ++ (unsigned long)pci_resource_start(pci_dev, 0))); + goto err_out_free_res; + } else { + DBGPRINT(RT_DEBUG_TRACE, + ("%s: at 0x%lx, VA 0x%lx, IRQ %d. \n", print_name, +- (ULONG) pci_resource_start(pci_dev, 0), +- (ULONG) csr_addr, pci_dev->irq)); ++ (unsigned long)pci_resource_start(pci_dev, 0), ++ (unsigned long)csr_addr, pci_dev->irq)); + } + + /* Set DMA master */ +@@ -329,10 +329,10 @@ static INT __devinit rt2860_probe(IN struct pci_dev *pci_dev, + if (rv != NDIS_STATUS_SUCCESS) + goto err_out_iounmap; + /* Here are the RTMP_ADAPTER structure with pci-bus specific parameters. */ +- pAd->CSRBaseAddress = (PUCHAR) csr_addr; ++ pAd->CSRBaseAddress = (u8 *)csr_addr; + DBGPRINT(RT_DEBUG_ERROR, + ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", +- (ULONG) pAd->CSRBaseAddress, csr_addr)); ++ (unsigned long)pAd->CSRBaseAddress, csr_addr)); + RtmpRaDevCtrlInit(pAd, RTMP_DEV_INF_PCI); + + /*NetDevInit============================================== */ +@@ -389,11 +389,11 @@ err_out: + return -ENODEV; /* probe fail */ + } + +-static VOID __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) ++static void __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + { + PNET_DEV net_dev = pci_get_drvdata(pci_dev); + RTMP_ADAPTER *pAd = NULL; +- ULONG csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ ++ unsigned long csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -456,9 +456,9 @@ BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + * PCIe device initialization related procedures. + * + ***************************************************************************/ +-static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) ++static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + { +- USHORT device_id; ++ u16 device_id; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -477,7 +477,7 @@ static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + (device_id == NIC3092_PCIe_DEVICE_ID) || + #endif /* RT3090 // */ + 0) { +- UINT32 MacCsr0 = 0, Index = 0; ++ u32 MacCsr0 = 0, Index = 0; + do { + RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0); + +@@ -495,11 +495,11 @@ static VOID RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + } + } + +-VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) ++void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + { +- INT pos; +- USHORT reg16, data2, PCIePowerSaveLevel, Configuration; +- UINT32 MacValue; ++ int pos; ++ u16 reg16, data2, PCIePowerSaveLevel, Configuration; ++ u32 MacValue; + BOOLEAN bFindIntel = FALSE; + POS_COOKIE pObj; + +@@ -536,7 +536,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + ("====> Write 0x83 = 0x%x.\n", + PCIePowerSaveLevel)); + AsicSendCommandToMcu(pAd, 0x83, 0xff, +- (UCHAR) PCIePowerSaveLevel, 0x00); ++ (u8)PCIePowerSaveLevel, 0x00); + RT28xx_EEPROM_READ16(pAd, 0x22, PCIePowerSaveLevel); + PCIePowerSaveLevel &= 0xff; + PCIePowerSaveLevel = PCIePowerSaveLevel >> 6; +@@ -570,7 +570,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + PCIePowerSaveLevel)); + + AsicSendCommandToMcu(pAd, 0x83, 0xff, +- (UCHAR) PCIePowerSaveLevel, ++ (u8)PCIePowerSaveLevel, + 0x00); + } + DBGPRINT(RT_DEBUG_TRACE, +@@ -578,7 +578,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + pAd->LnkCtrlBitMask)); + } + } else if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { +- UCHAR LinkCtrlSetting = 0; ++ u8 LinkCtrlSetting = 0; + + /* Check 3090E special setting chip. */ + RT28xx_EEPROM_READ16(pAd, 0x24, data2); +@@ -630,7 +630,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + /* 1. read setting from inf file. */ + + PCIePowerSaveLevel = +- (USHORT) pAd->StaCfg.PSControl.field.rt30xxPowerMode; ++ (u16)pAd->StaCfg.PSControl.field.rt30xxPowerMode; + DBGPRINT(RT_DEBUG_ERROR, + ("====> rt30xx Read PowerLevelMode = 0x%x.\n", + PCIePowerSaveLevel)); +@@ -642,13 +642,13 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + && (pAd->b3090ESpecialChip == FALSE)) { + /* Chip Version E only allow 1, So force set 1. */ + PCIePowerSaveLevel &= 0x1; +- pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; ++ pAd->PCIePowerSaveLevel = (u16)PCIePowerSaveLevel; + DBGPRINT(RT_DEBUG_TRACE, + ("====> rt30xx E Write 0x83 Command = 0x%x.\n", + PCIePowerSaveLevel)); + + AsicSendCommandToMcu(pAd, 0x83, 0xff, +- (UCHAR) PCIePowerSaveLevel, 0x00); ++ (u8)PCIePowerSaveLevel, 0x00); + } else { + /* Chip Version F and after only allow 1 or 2 or 3. This might be modified after new chip version come out. */ + if (! +@@ -658,7 +658,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_ERROR, + ("====> rt30xx F Write 0x83 Command = 0x%x.\n", + PCIePowerSaveLevel)); +- pAd->PCIePowerSaveLevel = (USHORT) PCIePowerSaveLevel; ++ pAd->PCIePowerSaveLevel = (u16)PCIePowerSaveLevel; + /* for 3090F , we need to add high-byte arg for 0x83 command to indicate the link control setting in */ + /* PCI Configuration Space. Because firmware can't read PCI Configuration Space */ + if ((pAd->Rt3xxRalinkLinkCtrl & 0x2) +@@ -669,7 +669,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + ("====> rt30xxF LinkCtrlSetting = 0x%x.\n", + LinkCtrlSetting)); + AsicSendCommandToMcu(pAd, 0x83, 0xff, +- (UCHAR) PCIePowerSaveLevel, ++ (u8)PCIePowerSaveLevel, + LinkCtrlSetting); + } + } +@@ -702,7 +702,7 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + + RTMPFindHostPCIDev(pAd); + if (pObj->parent_pci_dev) { +- USHORT vendor_id; ++ u16 vendor_id; + + pci_read_config_word(pObj->parent_pci_dev, + PCI_VENDOR_ID, &vendor_id); +@@ -810,11 +810,11 @@ VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + } + } + +-VOID RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) ++void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) + { +- USHORT reg16; +- UCHAR reg8; +- UINT DevFn; ++ u16 reg16; ++ u8 reg8; ++ u32 DevFn; + PPCI_DEV pPci_dev; + POS_COOKIE pObj; + +@@ -856,10 +856,10 @@ VOID RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) ++void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level) + { +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; ++ u16 PCIePowerSaveLevel, reg16; ++ u16 Configuration; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -950,10 +950,10 @@ VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level) + + ======================================================================== + */ +-VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) ++void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max) + { +- USHORT PCIePowerSaveLevel, reg16; +- USHORT Configuration; ++ u16 PCIePowerSaveLevel, reg16; ++ u16 Configuration; + POS_COOKIE pObj; + + pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -1076,14 +1076,14 @@ VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max) + + ======================================================================== + */ +-VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) ++void RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + { + +- ULONG HostConfiguration = 0; +- ULONG Configuration; ++ unsigned long HostConfiguration = 0; ++ unsigned long Configuration; + POS_COOKIE pObj; +- INT pos; +- USHORT reg16; ++ int pos; ++ u16 reg16; + + pObj = (POS_COOKIE) pAd->OS_Cookie; + +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 8413998..5f781f5 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -28,7 +28,7 @@ + #include + #include "rt_config.h" + +-ULONG RTDebugLevel = RT_DEBUG_ERROR; ++unsigned long RTDebugLevel = RT_DEBUG_ERROR; + + /* for wireless system event message */ + char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { +@@ -80,7 +80,7 @@ char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { + }; + + /* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout) + { + timeout = ((timeout * OS_HZ) / 1000); +@@ -89,16 +89,16 @@ VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, + } + + /* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ +-VOID RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, + IN NDIS_MINIPORT_TIMER * pTimer, +- IN TIMER_FUNCTION function, IN PVOID data) ++ IN TIMER_FUNCTION function, void *data) + { + init_timer(pTimer); + pTimer->data = (unsigned long)data; + pTimer->function = function; + } + +-VOID RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout) + { + if (timer_pending(pTimer)) +@@ -109,14 +109,14 @@ VOID RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + add_timer(pTimer); + } + +-VOID RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout) + { + timeout = ((timeout * OS_HZ) / 1000); + mod_timer(pTimer, jiffies + timeout); + } + +-VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + OUT BOOLEAN * pCancelled) + { + if (timer_pending(pTimer)) { +@@ -127,15 +127,15 @@ VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + + } + +-VOID RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry) ++void RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry) + { + /*RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); */ + } + + /* Unify all delay routine by using udelay */ +-VOID RTMPusecDelay(IN ULONG usec) ++void RTMPusecDelay(unsigned long usec) + { +- ULONG i; ++ unsigned long i; + + for (i = 0; i < (usec / 50); i++) + udelay(50); +@@ -150,9 +150,9 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time) + } + + /* pAd MUST allow to be NULL */ +-NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, OUT UCHAR ** mem, IN ULONG size) ++int os_alloc_mem(IN RTMP_ADAPTER * pAd, u8 ** mem, unsigned long size) + { +- *mem = (PUCHAR) kmalloc(size, GFP_ATOMIC); ++ *mem = (u8 *)kmalloc(size, GFP_ATOMIC); + if (*mem) + return (NDIS_STATUS_SUCCESS); + else +@@ -160,7 +160,7 @@ NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, OUT UCHAR ** mem, IN ULONG size) + } + + /* pAd MUST allow to be NULL */ +-NDIS_STATUS os_free_mem(IN PRTMP_ADAPTER pAd, IN PVOID mem) ++int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem) + { + + ASSERT(mem); +@@ -178,7 +178,7 @@ PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) + } + + PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length) ++ unsigned long Length) + { + struct sk_buff *pkt; + +@@ -197,9 +197,9 @@ PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, + } + + PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress) ++ void ** VirtualAddress) + { + struct sk_buff *pkt; + +@@ -212,17 +212,17 @@ PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, + + if (pkt) { + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- *VirtualAddress = (PVOID) pkt->data; ++ *VirtualAddress = (void *)pkt->data; + } else { +- *VirtualAddress = (PVOID) NULL; ++ *VirtualAddress = (void *)NULL; + } + + return (PNDIS_PACKET) pkt; + } + +-VOID build_tx_packet(IN PRTMP_ADAPTER pAd, ++void build_tx_packet(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, IN ULONG FrameLen) ++ u8 *pFrame, unsigned long FrameLen) + { + + struct sk_buff *pTxPkt; +@@ -233,7 +233,7 @@ VOID build_tx_packet(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(skb_put(pTxPkt, FrameLen), pFrame, FrameLen); + } + +-VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) ++void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + { + POS_COOKIE os_cookie; + int index; +@@ -292,7 +292,7 @@ BOOLEAN OS_Need_Clone_Packet(void) + + ======================================================================== + */ +-NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, + IN PNDIS_PACKET pInPacket, + OUT PNDIS_PACKET * ppOutPacket) +@@ -323,11 +323,11 @@ NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + } + + /* the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() */ +-NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + OUT PNDIS_PACKET * ppPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, IN UINT DataLen) ++ u8 *pHeader, ++ u32 HeaderLen, ++ u8 *pData, u32 DataLen) + { + PNDIS_PACKET pPacket; + ASSERT(pData); +@@ -367,7 +367,7 @@ NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + corresponding NDIS_BUFFER and allocated memory. + ======================================================================== + */ +-VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { + dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); + } +@@ -375,19 +375,19 @@ VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + /* IRQL = DISPATCH_LEVEL */ + /* NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same */ + /* scatter gather buffer */ +-NDIS_STATUS Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, OUT PUCHAR pByte1) ++int Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++ u8 DesiredOffset, ++ u8 *pByte0, u8 *pByte1) + { +- *pByte0 = *(PUCHAR) (pFirstBuffer + DesiredOffset); +- *pByte1 = *(PUCHAR) (pFirstBuffer + DesiredOffset + 1); ++ *pByte0 = *(u8 *)(pFirstBuffer + DesiredOffset); ++ *pByte1 = *(u8 *)(pFirstBuffer + DesiredOffset + 1); + + return NDIS_STATUS_SUCCESS; + } + + void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, + OUT PACKET_INFO * pPacketInfo, +- OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen) ++ u8 ** pSrcBufVA, u32 * pSrcBufLen) + { + pPacketInfo->BufferCount = 1; + pPacketInfo->pFirstBuffer = (PNDIS_BUFFER) GET_OS_PKT_DATAPTR(pPacket); +@@ -400,7 +400,7 @@ void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, + + void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, + OUT PACKET_INFO * pPacketInfo, +- OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen) ++ u8 ** pSrcBufVA, u32 * pSrcBufLen) + { + PNDIS_PACKET pPacket = NULL; + +@@ -430,15 +430,15 @@ void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, + } + + PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID) ++ IN PNDIS_PACKET pPacket, u8 FromWhichBSSID) + { + struct sk_buff *skb; + PNDIS_PACKET pRetPacket = NULL; +- USHORT DataSize; +- UCHAR *pData; ++ u16 DataSize; ++ u8 *pData; + +- DataSize = (USHORT) GET_OS_PKT_LEN(pPacket); +- pData = (PUCHAR) GET_OS_PKT_DATAPTR(pPacket); ++ DataSize = (u16)GET_OS_PKT_LEN(pPacket); ++ pData = (u8 *)GET_OS_PKT_DATAPTR(pPacket); + + skb = skb_clone(RTPKT_TO_OSPKT(pPacket), MEM_ALLOC_FLAG); + if (skb) { +@@ -451,10 +451,10 @@ PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, + } + + PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, IN UCHAR FromWhichBSSID) ++ u8 *pHeader802_3, ++ u32 HdrLen, ++ u8 *pData, ++ unsigned long DataSize, u8 FromWhichBSSID) + { + struct sk_buff *skb; + PNDIS_PACKET pPacket = NULL; +@@ -499,7 +499,7 @@ PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, + + PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, IN ULONG DataSize) ++ u8 *pData, unsigned long DataSize) + { + struct sk_buff *pRxPkt; + struct sk_buff *pClonedPkt; +@@ -525,7 +525,7 @@ PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + /* change OS packet DataPtr and DataLen */ + /* */ + void update_os_packet_info(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + struct sk_buff *pOSPkt; + +@@ -540,8 +540,8 @@ void update_os_packet_info(IN PRTMP_ADAPTER pAd, + + void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID) ++ u8 *pHeader802_3, ++ u8 FromWhichBSSID) + { + struct sk_buff *pOSPkt; + +@@ -628,15 +628,15 @@ void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen) + + ======================================================================== + */ +-VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, +- IN USHORT Event_flag, +- IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi) ++void RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, ++ u16 Event_flag, ++ u8 *pAddr, u8 BssIdx, char Rssi) + { + + /*union iwreq_data wrqu; */ +- PSTRING pBuf = NULL, pBufPtr = NULL; +- USHORT event, type, BufLen; +- UCHAR event_table_len = 0; ++ char *pBuf = NULL, *pBufPtr = NULL; ++ u16 event, type, BufLen; ++ u8 event_table_len = 0; + + type = Event_flag & 0xFF00; + event = Event_flag & 0x00FF; +@@ -705,7 +705,7 @@ VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, + BufLen = pBufPtr - pBuf; + + RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, Event_flag, NULL, +- (PUCHAR) pBuf, BufLen); ++ (u8 *)pBuf, BufLen); + /*DBGPRINT(RT_DEBUG_TRACE, ("%s : %s\n", __func__, pBuf)); */ + + kfree(pBuf); +@@ -720,8 +720,8 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + struct sk_buff *pOSPkt; + wlan_ng_prism2_header *ph; + int rate_index = 0; +- USHORT header_len = 0; +- UCHAR temp_header[40] = { 0 }; ++ u16 header_len = 0; ++ u8 temp_header[40] = { 0 }; + + u_int32_t ralinkrate[256] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 109, 110, 111, 112, 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, 27, 54, 81, 108, 162, 216, 243, 270, /* Last 38 */ + 54, 108, 162, 216, 324, 432, 486, 540, 14, 29, 43, 57, 87, 115, +@@ -816,7 +816,7 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + ph->msgcode = DIDmsg_lnxind_wlansniffrm; + ph->msglen = sizeof(wlan_ng_prism2_header); +- strcpy((PSTRING) ph->devname, (PSTRING) pAd->net_dev->name); ++ strcpy((char *)ph->devname, (char *)pAd->net_dev->name); + + ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; + ph->hosttime.status = 0; +@@ -865,13 +865,13 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + if (pRxBlk->pRxWI->PHYMODE >= MODE_HTMIX) { + rate_index = +- 16 + ((UCHAR) pRxBlk->pRxWI->BW * 16) + +- ((UCHAR) pRxBlk->pRxWI->ShortGI * 32) + +- ((UCHAR) pRxBlk->pRxWI->MCS); ++ 16 + ((u8)pRxBlk->pRxWI->BW * 16) + ++ ((u8)pRxBlk->pRxWI->ShortGI * 32) + ++ ((u8)pRxBlk->pRxWI->MCS); + } else if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM) +- rate_index = (UCHAR) (pRxBlk->pRxWI->MCS) + 4; ++ rate_index = (u8)(pRxBlk->pRxWI->MCS) + 4; + else +- rate_index = (UCHAR) (pRxBlk->pRxWI->MCS); ++ rate_index = (u8)(pRxBlk->pRxWI->MCS); + if (rate_index < 0) + rate_index = 0; + if (rate_index > 255) +@@ -1005,7 +1005,7 @@ int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) + Task create/management/kill related functions. + + *******************************************************************************/ +-NDIS_STATUS RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) ++int RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) + { + RTMP_ADAPTER *pAd; + int ret = NDIS_STATUS_FAILURE; +@@ -1043,7 +1043,7 @@ NDIS_STATUS RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) + + } + +-INT RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask) ++int RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask) + { + + #ifndef KTHREAD_SUPPORT +@@ -1058,7 +1058,7 @@ void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask) + + #ifndef KTHREAD_SUPPORT + +- daemonize((PSTRING) & pTask->taskName[0] /*"%s",pAd->net_dev->name */ ); ++ daemonize((char *)& pTask->taskName[0] /*"%s",pAd->net_dev->name */ ); + + allow_signal(SIGTERM); + allow_signal(SIGKILL); +@@ -1070,10 +1070,10 @@ void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask) + #endif + } + +-NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + IN int (*fn) (void *), IN void *arg) + { +- NDIS_STATUS status = NDIS_STATUS_SUCCESS; ++ int status = NDIS_STATUS_SUCCESS; + + #ifdef KTHREAD_SUPPORT + pTask->task_killed = 0; +@@ -1098,15 +1098,15 @@ NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + return status; + } + +-NDIS_STATUS RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, +- IN PSTRING pTaskName, IN VOID * pPriv) ++int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++ char *pTaskName, void * pPriv) + { + int len; + + ASSERT(pTask); + + #ifndef KTHREAD_SUPPORT +- NdisZeroMemory((PUCHAR) (pTask), sizeof(RTMP_OS_TASK)); ++ NdisZeroMemory((u8 *)(pTask), sizeof(RTMP_OS_TASK)); + #endif + + len = strlen(pTaskName); +@@ -1142,10 +1142,10 @@ void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd) + } + + int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, IN UINT32 dataLen) ++ u32 eventType, ++ int flags, ++ u8 *pSrcMac, ++ u8 *pData, u32 dataLen) + { + union iwreq_data wrqu; + +@@ -1164,7 +1164,7 @@ int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, + return 0; + } + +-int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr) ++int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, u8 *pMacAddr) + { + struct net_device *net_dev; + RTMP_ADAPTER *pAd; +@@ -1189,11 +1189,11 @@ int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr) + */ + static int RtmpOSNetDevRequestName(IN RTMP_ADAPTER * pAd, + IN PNET_DEV dev, +- IN PSTRING pPrefixStr, IN INT devIdx) ++ char *pPrefixStr, int devIdx) + { + PNET_DEV existNetDev; +- STRING suffixName[IFNAMSIZ]; +- STRING desiredName[IFNAMSIZ]; ++ char suffixName[IFNAMSIZ]; ++ char desiredName[IFNAMSIZ]; + int ifNameIdx, prefixLen, slotNameLen; + int Status; + +@@ -1243,7 +1243,7 @@ void RtmpOSNetDevFree(PNET_DEV pNetDev) + free_netdev(pNetDev); + } + +-INT RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, IN UINT32 privDataSize) ++int RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, u32 privDataSize) + { + /* assign it as null first. */ + *new_dev_p = NULL; +@@ -1258,7 +1258,7 @@ INT RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, IN UINT32 privDataSize) + return NDIS_STATUS_FAILURE; + } + +-PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, PSTRING pDevName) ++PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, char *pDevName) + { + PNET_DEV pTargetNetDev = NULL; + +@@ -1278,7 +1278,7 @@ void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) + dev_put(pNetDev); + } + +-INT RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) ++int RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) + { + + /* TODO: Need to fix this */ +@@ -1332,9 +1332,9 @@ int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, + } + + PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, IN PSTRING pNamePrefix) ++ int devType, ++ int devNum, ++ int privMemSize, char *pNamePrefix) + { + struct net_device *pNetDev = NULL; + int status; +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index 1e27c66..629310a 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -99,7 +99,6 @@ extern const struct iw_handler_def rt28xx_iw_handler_def; + #define IN + #define OUT + #define INOUT +-#define NDIS_STATUS INT + + /*********************************************************************************** + * OS Specific definitions and data structures +@@ -390,7 +389,7 @@ typedef void (*TIMER_FUNCTION) (unsigned long); + + #define ONE_TICK 1 + +-static inline void NdisGetSystemUpTime(ULONG * time) ++static inline void NdisGetSystemUpTime(unsigned long * time) + { + *time = jiffies; + } +@@ -403,7 +402,7 @@ struct os_cookie { + #ifdef RTMP_MAC_PCI + struct pci_dev *pci_dev; + struct pci_dev *parent_pci_dev; +- USHORT DeviceID; ++ u16 DeviceID; + dma_addr_t pAd_pa; + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +@@ -427,8 +426,8 @@ struct os_cookie { + #endif /* RTMP_MAC_USB // */ + + unsigned long apd_pid; /*802.1x daemon pid */ +- INT ioctl_if_type; +- INT ioctl_if; ++ int ioctl_if_type; ++ int ioctl_if; + }; + + typedef struct os_cookie *POS_COOKIE; +@@ -440,7 +439,7 @@ typedef struct os_cookie *POS_COOKIE; + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] + + #ifdef DBG +-extern ULONG RTDebugLevel; ++extern unsigned long RTDebugLevel; + + #define DBGPRINT_RAW(Level, Fmt) \ + do{ \ +@@ -503,39 +502,39 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + dev_alloc_skb(_length) + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +-#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0 ++#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (unsigned long)0 + + #define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) + #endif /* RTMP_MAC_USB // */ + + /* +- * ULONG ++ * unsigned long + * RTMP_GetPhysicalAddressLow( + * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); + */ + #define RTMP_GetPhysicalAddressLow(PhysicalAddress) (PhysicalAddress) + + /* +- * ULONG ++ * unsigned long + * RTMP_GetPhysicalAddressHigh( + * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); + */ + #define RTMP_GetPhysicalAddressHigh(PhysicalAddress) (0) + + /* +- * VOID ++ * void + * RTMP_SetPhysicalAddressLow( + * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); ++ * unsigned long Value); + */ + #define RTMP_SetPhysicalAddressLow(PhysicalAddress, Value) \ + PhysicalAddress = Value; + + /* +- * VOID ++ * void + * RTMP_SetPhysicalAddressHigh( + * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, +- * IN ULONG Value); ++ * unsigned long Value); + */ + #define RTMP_SetPhysicalAddressHigh(PhysicalAddress, Value) + +@@ -572,7 +571,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + { \ + if ((_A)->bPCIclkOff == FALSE) \ + { \ +- UINT Val; \ ++ u32 Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writel((_V), (void *)((_A)->CSRBaseAddress + (_R))); \ + } \ +@@ -580,7 +579,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + + #define RTMP_IO_FORCE_WRITE32(_A, _R, _V) \ + { \ +- UINT Val; \ ++ u32 Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ + writel(_V, (void *)((_A)->CSRBaseAddress + (_R))); \ + } +@@ -588,51 +587,51 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + #if defined(RALINK_2880) || defined(RALINK_3052) + #define RTMP_IO_WRITE8(_A, _R, _V) \ + { \ +- ULONG Val; \ +- UCHAR _i; \ ++ unsigned long Val; \ ++ u8 _i; \ + _i = ((_R) & 0x3); \ + Val = readl((void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ + Val = Val & (~(0x000000ff << ((_i)*8))); \ +- Val = Val | ((ULONG)(_V) << ((_i)*8)); \ ++ Val = Val | ((unsigned long)(_V) << ((_i)*8)); \ + writel((Val), (void *)((_A)->CSRBaseAddress + ((_R) - _i))); \ + } + #else + #define RTMP_IO_WRITE8(_A, _R, _V) \ + { \ +- UINT Val; \ ++ u32 Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writeb((_V), (PUCHAR)((_A)->CSRBaseAddress + (_R))); \ ++ writeb((_V), (u8 *)((_A)->CSRBaseAddress + (_R))); \ + } + #endif /* #if defined(BRCM_6358) || defined(RALINK_2880) // */ + + #define RTMP_IO_WRITE16(_A, _R, _V) \ + { \ +- UINT Val; \ ++ u32 Val; \ + Val = readl((void *)((_A)->CSRBaseAddress + MAC_CSR0)); \ +- writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ ++ writew((_V), (u16 *)((_A)->CSRBaseAddress + (_R))); \ + } + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + /*Patch for ASIC turst read/write bug, needs to remove after metel fix */ + #define RTMP_IO_READ32(_A, _R, _pV) \ +- RTUSBReadMACRegister((_A), (_R), (PUINT32) (_pV)) ++ RTUSBReadMACRegister((_A), (_R), (u32 *)(_pV)) + + #define RTMP_IO_READ8(_A, _R, _pV) \ + { \ + } + + #define RTMP_IO_WRITE32(_A, _R, _V) \ +- RTUSBWriteMACRegister((_A), (_R), (UINT32) (_V)) ++ RTUSBWriteMACRegister((_A), (_R), (u32)(_V)) + + #define RTMP_IO_WRITE8(_A, _R, _V) \ + { \ +- USHORT _Val = _V; \ +- RTUSBSingleWrite((_A), (_R), (USHORT) (_Val)); \ ++ u16 _Val = _V; \ ++ RTUSBSingleWrite((_A), (_R), (u16)(_Val)); \ + } + + #define RTMP_IO_WRITE16(_A, _R, _V) \ + { \ +- RTUSBSingleWrite((_A), (_R), (USHORT) (_V)); \ ++ RTUSBSingleWrite((_A), (_R), (u16)(_V)); \ + } + #endif /* RTMP_MAC_USB // */ + +@@ -687,7 +686,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + #define GET_OS_PKT_DATATAIL(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->tail) + #define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ +- ((RTPKT_TO_OSPKT(_pkt))->tail) = (PUCHAR)((_start) + (_len)) ++ ((RTPKT_TO_OSPKT(_pkt))->tail) = (u8 *)((_start) + (_len)) + + #define GET_OS_PKT_HEAD(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->head) +@@ -731,7 +730,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + /*(this value also as MAC(on-chip WCID) table index) */ + /* 0x80~0xff: TX to a WDS link. b0~6: WDS index */ + #define RTMP_SET_PACKET_WCID(_p, _wdsidx) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2] = _wdsidx) +-#define RTMP_GET_PACKET_WCID(_p) ((UCHAR)(RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2])) ++#define RTMP_GET_PACKET_WCID(_p) ((u8)(RTPKT_TO_OSPKT(_p)->cb[CB_OFF+2])) + + /* 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet */ + #define RTMP_SET_PACKET_SOURCE(_p, _pktsrc) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+3] = _pktsrc) +@@ -862,7 +861,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb); + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); + #endif /* RTMP_MAC_PCI // */ + +-INT rt28xx_sta_ioctl(IN PNET_DEV net_dev, IN OUT struct ifreq *rq, IN INT cmd); ++int rt28xx_sta_ioctl(IN PNET_DEV net_dev, IN OUT struct ifreq *rq, int cmd); + + extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char * buf); + extern int ra_mtd_read(int num, loff_t from, size_t len, u_char * buf); +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 84be9d0..21313ee 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -41,8 +41,8 @@ + /* Private Variables Used */ + /*---------------------------------------------------------------------*/ + +-PSTRING mac = ""; /* default 00:00:00:00:00:00 */ +-PSTRING hostname = ""; /* default CMPC */ ++char *mac = ""; /* default 00:00:00:00:00:00 */ ++char *hostname = ""; /* default CMPC */ + module_param(mac, charp, 0); + MODULE_PARM_DESC(mac, "rt28xx: wireless mac addr"); + +@@ -55,7 +55,7 @@ int rt28xx_close(IN struct net_device *net_dev); + int rt28xx_open(struct net_device *net_dev); + + /* private function prototype */ +-static INT rt28xx_send_packets(IN struct sk_buff *skb_p, ++static int rt28xx_send_packets(IN struct sk_buff *skb_p, + IN struct net_device *net_dev); + + static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device +@@ -213,7 +213,7 @@ int rt28xx_close(IN PNET_DEV dev) + struct net_device *net_dev = (struct net_device *)dev; + RTMP_ADAPTER *pAd = NULL; + BOOLEAN Cancelled; +- UINT32 i = 0; ++ u32 i = 0; + + #ifdef RTMP_MAC_USB + DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); +@@ -304,7 +304,7 @@ int rt28xx_close(IN PNET_DEV dev) + #ifdef RTMP_MAC_PCI + { + BOOLEAN brc; +- /* ULONG Value; */ ++ /* unsigned long Value; */ + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE)) { + RTMP_ASIC_INTERRUPT_DISABLE(pAd); +@@ -418,14 +418,14 @@ int rt28xx_open(IN PNET_DEV dev) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_START_UP); + + { +- UINT32 reg = 0; ++ u32 reg = 0; + RTMP_IO_READ32(pAd, 0x1300, ®); /* clear garbage interrupts */ + printk("0x1300 = %08x\n", reg); + } + + { + /* u32 reg; */ +-/* UINT8 byte; */ ++/* u8 byte; */ + /* u16 tmp; */ + + /* RTMP_IO_READ32(pAd, XIFS_TIME_CFG, ®); */ +@@ -463,7 +463,7 @@ PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook) + { + struct net_device *net_dev = NULL; +-/* NDIS_STATUS Status; */ ++/* int Status; */ + + net_dev = + RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), +@@ -480,7 +480,7 @@ PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + pNetDevHook->priv_flags = INT_MAIN; + pNetDevHook->needProtcted = FALSE; + +- net_dev->ml_priv = (PVOID) pAd; ++ net_dev->ml_priv = (void *)pAd; + pAd->net_dev = net_dev; + + netif_stop_queue(net_dev); +@@ -571,7 +571,7 @@ static int rt28xx_send_packets(IN struct sk_buff *skb_p, + return NETDEV_TX_OK; + } + +- NdisZeroMemory((PUCHAR) & skb_p->cb[CB_OFF], 15); ++ NdisZeroMemory((u8 *)& skb_p->cb[CB_OFF], 15); + RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); + + return rt28xx_packet_xmit(skb_p); +@@ -721,10 +721,10 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd) ++int AdapterBlockAllocateMemory(void *handle, void ** ppAd) + { + +- *ppAd = (PVOID) vmalloc(sizeof(RTMP_ADAPTER)); /*pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); */ ++ *ppAd = (void *)vmalloc(sizeof(RTMP_ADAPTER)); /*pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); */ + + if (*ppAd) { + NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index 0f75c3f..8df44ba 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -78,54 +78,54 @@ static void fifo_statistic_full_tasklet(unsigned long data); + **************************************************************************/ + /* Function for TxDesc Memory allocation. */ + void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, ++ u32 Index, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + *VirtualAddress = +- (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, + PhysicalAddress); + + } + + /* Function for MgmtDesc Memory allocation. */ + void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + *VirtualAddress = +- (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, + PhysicalAddress); + + } + + /* Function for RxDesc Memory allocation. */ + void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + *VirtualAddress = +- (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, + PhysicalAddress); + + } + + /* Function for free allocated Desc Memory. */ + void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, ++ unsigned long Length, ++ void *VirtualAddress, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -136,23 +136,23 @@ void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + + /* Function for TxData DMA Memory allocation. */ + void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, ++ u32 Index, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + *VirtualAddress = +- (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, + PhysicalAddress); + } + + void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- IN PVOID VirtualAddress, ++ void *VirtualAddress, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -171,15 +171,15 @@ void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, + * PhysicalAddress: Physical address corresponding to virtual address + */ + void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + *VirtualAddress = +- (PVOID) pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, ++ (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, + PhysicalAddress); + } + +@@ -195,9 +195,9 @@ void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, + * Cached is ignored: always cached memory + */ + PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS + PhysicalAddress) + { +@@ -212,19 +212,19 @@ PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, + + if (pkt) { + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); +- *VirtualAddress = (PVOID) pkt->data; ++ *VirtualAddress = (void *)pkt->data; + *PhysicalAddress = + PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, + PCI_DMA_FROMDEVICE); + } else { +- *VirtualAddress = (PVOID) NULL; ++ *VirtualAddress = (void *)NULL; + *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; + } + + return (PNDIS_PACKET) pkt; + } + +-VOID Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, IN ULONG VirtualAddress) ++void Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, unsigned long VirtualAddress) + { + NDIS_PHYSICAL_ADDRESS PhysicalAddress; + +@@ -233,7 +233,7 @@ VOID Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, IN ULONG VirtualAddress) + RX_BUFFER_NORMSIZE - 1600, -1, PCI_DMA_FROMDEVICE); + } + +-NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj; + +@@ -273,7 +273,7 @@ void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + tasklet_kill(&pObj->fifo_statistic_full_task); + } + +-NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) + { + + return NDIS_STATUS_SUCCESS; +@@ -293,7 +293,7 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + { + + return; +@@ -401,7 +401,7 @@ static void rx_done_tasklet(unsigned long data) + return; + } + +- /* enable RxINT again */ ++ /* enable Rxint again */ + rt2860_int_enable(pAd, INT_RX); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); + +@@ -434,7 +434,7 @@ void fifo_statistic_full_tasklet(unsigned long data) + return; + } + +- /* enable RxINT again */ ++ /* enable Rxint again */ + + rt2860_int_enable(pAd, FifoStaFullInt); + RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +@@ -712,7 +712,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + if (IntSource.word & INT_RX) { + if ((pAd->int_disable_mask & INT_RX) == 0) { + +- /* mask RxINT */ ++ /* mask Rxint */ + rt2860_int_disable(pAd, INT_RX); + tasklet_hi_schedule(&pObj->rx_done_task); + } +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +index e4668dc..2db7d6e 100644 +--- a/drivers/staging/rt2860/rt_usb.c ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -77,10 +77,10 @@ Return Value: + Note: + ======================================================================== + */ +-NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) + { + RTMP_OS_TASK *pTask; +- NDIS_STATUS status; ++ int status; + + /* + Creat TimerQ Thread, We need init timerQ related structure before create the timer thread. +@@ -133,9 +133,9 @@ Return Value: + Note: + ======================================================================== + */ +-VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + { +- INT ret; ++ int ret; + RTMP_OS_TASK *pTask; + + /* Sleep 50 milliseconds so pending io might finish normally */ +@@ -201,8 +201,8 @@ static void rtusb_dataout_complete(unsigned long data) + purbb_t pUrb; + POS_COOKIE pObj; + PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId; +- NTSTATUS Status; ++ u8 BulkOutPipeId; ++ int Status; + unsigned long IrqFlags; + + pUrb = (purbb_t) data; +@@ -235,7 +235,7 @@ static void rtusb_dataout_complete(unsigned long data) + + } else /* STATUS_OTHER */ + { +- PUCHAR pBuf; ++ u8 *pBuf; + + pAd->BulkOutCompleteOther++; + +@@ -297,7 +297,7 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PTX_CONTEXT pNullContext; + purbb_t pUrb; +- NTSTATUS Status; ++ int Status; + unsigned long irqFlag; + + pUrb = (purbb_t) data; +@@ -346,7 +346,7 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PTX_CONTEXT pRTSContext; + purbb_t pUrb; +- NTSTATUS Status; ++ int Status; + unsigned long irqFlag; + + pUrb = (purbb_t) data; +@@ -396,7 +396,7 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PTX_CONTEXT pPsPollContext; + purbb_t pUrb; +- NTSTATUS Status; ++ int Status; + + pUrb = (purbb_t) data; + pPsPollContext = (PTX_CONTEXT) pUrb->context; +@@ -455,7 +455,7 @@ static void rx_done_tasklet(unsigned long data) + purbb_t pUrb; + PRX_CONTEXT pRxContext; + PRTMP_ADAPTER pAd; +- NTSTATUS Status; ++ int Status; + unsigned int IrqFlags; + + pUrb = (purbb_t) data; +@@ -519,7 +519,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + int index; + PNDIS_PACKET pPacket; + purbb_t pUrb; +- NTSTATUS Status; ++ int Status; + unsigned long IrqFlags; + + pUrb = (purbb_t) data; +@@ -597,7 +597,7 @@ static void rtusb_ac3_dma_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 3; ++ u8 BulkOutPipeId = 3; + purbb_t pUrb; + + pUrb = (purbb_t) data; +@@ -637,7 +637,7 @@ static void rtusb_ac2_dma_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 2; ++ u8 BulkOutPipeId = 2; + purbb_t pUrb; + + pUrb = (purbb_t) data; +@@ -677,7 +677,7 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 1; ++ u8 BulkOutPipeId = 1; + purbb_t pUrb; + + pUrb = (purbb_t) data; +@@ -717,7 +717,7 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; +- UCHAR BulkOutPipeId = 0; ++ u8 BulkOutPipeId = 0; + purbb_t pUrb; + + pUrb = (purbb_t) data; +@@ -753,12 +753,12 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + + } + +-NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + /* Create receive tasklet */ +- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG) pAd); ++ tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); + tasklet_init(&pObj->mgmt_dma_done_task, rtusb_mgmt_dma_done_tasklet, + (unsigned long)pAd); + tasklet_init(&pObj->ac0_dma_done_task, rtusb_ac0_dma_done_tasklet, +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 2ac9663..6acd29f 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -62,100 +62,100 @@ typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; + + extern unsigned char SNAP_AIRONET[]; + extern unsigned char CISCO_OUI[]; +-extern UCHAR BaSizeArray[4]; ++extern u8 BaSizeArray[4]; + +-extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; +-extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; +-extern ULONG BIT32[32]; +-extern UCHAR BIT8[8]; ++extern u8 BROADCAST_ADDR[MAC_ADDR_LEN]; ++extern u8 ZERO_MAC_ADDR[MAC_ADDR_LEN]; ++extern unsigned long BIT32[32]; ++extern u8 BIT8[8]; + extern char *CipherName[]; + extern char *MCSToMbps[]; +-extern UCHAR RxwiMCSToOfdmRate[12]; +-extern UCHAR SNAP_802_1H[6]; +-extern UCHAR SNAP_BRIDGE_TUNNEL[6]; +-extern UCHAR SNAP_AIRONET[8]; +-extern UCHAR CKIP_LLC_SNAP[8]; +-extern UCHAR EAPOL_LLC_SNAP[8]; +-extern UCHAR EAPOL[2]; +-extern UCHAR IPX[2]; +-extern UCHAR APPLE_TALK[2]; +-extern UCHAR RateIdToPlcpSignal[12]; /* see IEEE802.11a-1999 p.14 */ +-extern UCHAR OfdmRateToRxwiMCS[]; +-extern UCHAR OfdmSignalToRateId[16]; +-extern UCHAR default_cwmin[4]; +-extern UCHAR default_cwmax[4]; +-extern UCHAR default_sta_aifsn[4]; +-extern UCHAR MapUserPriorityToAccessCategory[8]; +- +-extern USHORT RateUpPER[]; +-extern USHORT RateDownPER[]; +-extern UCHAR Phy11BNextRateDownward[]; +-extern UCHAR Phy11BNextRateUpward[]; +-extern UCHAR Phy11BGNextRateDownward[]; +-extern UCHAR Phy11BGNextRateUpward[]; +-extern UCHAR Phy11ANextRateDownward[]; +-extern UCHAR Phy11ANextRateUpward[]; +-extern CHAR RssiSafeLevelForTxRate[]; +-extern UCHAR RateIdToMbps[]; +-extern USHORT RateIdTo500Kbps[]; +- +-extern UCHAR CipherSuiteWpaNoneTkip[]; +-extern UCHAR CipherSuiteWpaNoneTkipLen; +- +-extern UCHAR CipherSuiteWpaNoneAes[]; +-extern UCHAR CipherSuiteWpaNoneAesLen; +- +-extern UCHAR SsidIe; +-extern UCHAR SupRateIe; +-extern UCHAR ExtRateIe; +- +-extern UCHAR HtCapIe; +-extern UCHAR AddHtInfoIe; +-extern UCHAR NewExtChanIe; +- +-extern UCHAR ErpIe; +-extern UCHAR DsIe; +-extern UCHAR TimIe; +-extern UCHAR WpaIe; +-extern UCHAR Wpa2Ie; +-extern UCHAR IbssIe; +-extern UCHAR Ccx2Ie; +-extern UCHAR WapiIe; +- +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WAPI_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR Ccx2IeInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR PowerConstraintIE[]; +- +-extern UCHAR RateSwitchTable[]; +-extern UCHAR RateSwitchTable11B[]; +-extern UCHAR RateSwitchTable11G[]; +-extern UCHAR RateSwitchTable11BG[]; +- +-extern UCHAR RateSwitchTable11BGN1S[]; +-extern UCHAR RateSwitchTable11BGN2S[]; +-extern UCHAR RateSwitchTable11BGN2SForABand[]; +-extern UCHAR RateSwitchTable11N1S[]; +-extern UCHAR RateSwitchTable11N2S[]; +-extern UCHAR RateSwitchTable11N2SForABand[]; +- +-extern UCHAR PRE_N_HT_OUI[]; ++extern u8 RxwiMCSToOfdmRate[12]; ++extern u8 SNAP_802_1H[6]; ++extern u8 SNAP_BRIDGE_TUNNEL[6]; ++extern u8 SNAP_AIRONET[8]; ++extern u8 CKIP_LLC_SNAP[8]; ++extern u8 EAPOL_LLC_SNAP[8]; ++extern u8 EAPOL[2]; ++extern u8 IPX[2]; ++extern u8 APPLE_TALK[2]; ++extern u8 RateIdToPlcpSignal[12]; /* see IEEE802.11a-1999 p.14 */ ++extern u8 OfdmRateToRxwiMCS[]; ++extern u8 OfdmSignalToRateId[16]; ++extern u8 default_cwmin[4]; ++extern u8 default_cwmax[4]; ++extern u8 default_sta_aifsn[4]; ++extern u8 MapUserPriorityToAccessCategory[8]; ++ ++extern u16 RateUpPER[]; ++extern u16 RateDownPER[]; ++extern u8 Phy11BNextRateDownward[]; ++extern u8 Phy11BNextRateUpward[]; ++extern u8 Phy11BGNextRateDownward[]; ++extern u8 Phy11BGNextRateUpward[]; ++extern u8 Phy11ANextRateDownward[]; ++extern u8 Phy11ANextRateUpward[]; ++extern char RssiSafeLevelForTxRate[]; ++extern u8 RateIdToMbps[]; ++extern u16 RateIdTo500Kbps[]; ++ ++extern u8 CipherSuiteWpaNoneTkip[]; ++extern u8 CipherSuiteWpaNoneTkipLen; ++ ++extern u8 CipherSuiteWpaNoneAes[]; ++extern u8 CipherSuiteWpaNoneAesLen; ++ ++extern u8 SsidIe; ++extern u8 SupRateIe; ++extern u8 ExtRateIe; ++ ++extern u8 HtCapIe; ++extern u8 AddHtInfoIe; ++extern u8 NewExtChanIe; ++ ++extern u8 ErpIe; ++extern u8 DsIe; ++extern u8 TimIe; ++extern u8 WpaIe; ++extern u8 Wpa2Ie; ++extern u8 IbssIe; ++extern u8 Ccx2Ie; ++extern u8 WapiIe; ++ ++extern u8 WPA_OUI[]; ++extern u8 RSN_OUI[]; ++extern u8 WAPI_OUI[]; ++extern u8 WME_INFO_ELEM[]; ++extern u8 WME_PARM_ELEM[]; ++extern u8 Ccx2QosInfo[]; ++extern u8 Ccx2IeInfo[]; ++extern u8 RALINK_OUI[]; ++extern u8 PowerConstraintIE[]; ++ ++extern u8 RateSwitchTable[]; ++extern u8 RateSwitchTable11B[]; ++extern u8 RateSwitchTable11G[]; ++extern u8 RateSwitchTable11BG[]; ++ ++extern u8 RateSwitchTable11BGN1S[]; ++extern u8 RateSwitchTable11BGN2S[]; ++extern u8 RateSwitchTable11BGN2SForABand[]; ++extern u8 RateSwitchTable11N1S[]; ++extern u8 RateSwitchTable11N2S[]; ++extern u8 RateSwitchTable11N2SForABand[]; ++ ++extern u8 PRE_N_HT_OUI[]; + + typedef struct _RSSI_SAMPLE { +- CHAR LastRssi0; /* last received RSSI */ +- CHAR LastRssi1; /* last received RSSI */ +- CHAR LastRssi2; /* last received RSSI */ +- CHAR AvgRssi0; +- CHAR AvgRssi1; +- CHAR AvgRssi2; +- SHORT AvgRssi0X8; +- SHORT AvgRssi1X8; +- SHORT AvgRssi2X8; ++ char LastRssi0; /* last received RSSI */ ++ char LastRssi1; /* last received RSSI */ ++ char LastRssi2; /* last received RSSI */ ++ char AvgRssi0; ++ char AvgRssi1; ++ char AvgRssi2; ++ short AvgRssi0X8; ++ short AvgRssi1X8; ++ short AvgRssi2X8; + } RSSI_SAMPLE; + + /* */ +@@ -169,7 +169,7 @@ typedef struct _QUEUE_ENTRY { + typedef struct _QUEUE_HEADER { + PQUEUE_ENTRY Head; + PQUEUE_ENTRY Tail; +- ULONG Number; ++ unsigned long Number; + } QUEUE_HEADER, *PQUEUE_HEADER; + + #define InitializeQueueHeader(QueueHeader) \ +@@ -280,14 +280,14 @@ typedef struct _QUEUE_HEADER { + _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \ + _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \ + _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \ +- NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\ ++ NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(u8)* 16);\ + } + + #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \ + { \ +- _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \ +- _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \ +- _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ ++ _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (u8)(_pHtCapability->HtCapInfo.AMsduSize); \ ++ _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (u8)(_pHtCapability->HtCapInfo.MimoPs); \ ++ _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (u8)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ + } + + /* */ +@@ -295,13 +295,13 @@ typedef struct _QUEUE_HEADER { + /* */ + /* Usage : RTMP_IO_READ32( */ + /* PRTMP_ADAPTER pAd, */ +-/* ULONG Register_Offset, */ +-/* PULONG pValue) */ ++/* unsigned long Register_Offset, */ ++/* unsigned long * pValue) */ + /* */ + /* RTMP_IO_WRITE32( */ + /* PRTMP_ADAPTER pAd, */ +-/* ULONG Register_Offset, */ +-/* ULONG Value) */ ++/* unsigned long Register_Offset, */ ++/* unsigned long Value) */ + /* */ + + /* */ +@@ -312,14 +312,14 @@ typedef struct _QUEUE_HEADER { + #define NIC_MAX_PHYS_BUF_COUNT 8 + + typedef struct _RTMP_SCATTER_GATHER_ELEMENT { +- PVOID Address; +- ULONG Length; +- PULONG Reserved; ++ void *Address; ++ unsigned long Length; ++ unsigned long *Reserved; + } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT; + + typedef struct _RTMP_SCATTER_GATHER_LIST { +- ULONG NumberOfElements; +- PULONG Reserved; ++ unsigned long NumberOfElements; ++ unsigned long *Reserved; + RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; + } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; + +@@ -405,13 +405,13 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \ + NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \ + { \ +- PUCHAR pProto = _pData + 6; \ ++ u8 *pProto = _pData + 6; \ + \ + if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \ + NdisEqualMemory(SNAP_802_1H, _pData, 6)) \ + { \ +- LLC_Len[0] = (UCHAR)(_DataSize / 256); \ +- LLC_Len[1] = (UCHAR)(_DataSize % 256); \ ++ LLC_Len[0] = (u8)(_DataSize / 256); \ ++ LLC_Len[1] = (u8)(_DataSize % 256); \ + MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ + } \ + else \ +@@ -424,8 +424,8 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + } \ + else \ + { \ +- LLC_Len[0] = (UCHAR)(_DataSize / 256); \ +- LLC_Len[1] = (UCHAR)(_DataSize % 256); \ ++ LLC_Len[0] = (u8)(_DataSize / 256); \ ++ LLC_Len[1] = (u8)(_DataSize % 256); \ + MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ + } \ + } +@@ -436,21 +436,21 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + #ifdef RTMP_MAC_PCI + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ +- UINT32 High32TSF, Low32TSF; \ ++ u32 High32TSF, Low32TSF; \ + RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \ + RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ +- MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ ++ MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1,(u8)_Rssi2,_FrameSize, _pFrame, (u8)_PlcpSignal); \ + } + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ + { \ +- UINT32 High32TSF=0, Low32TSF=0; \ +- MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ ++ u32 High32TSF=0, Low32TSF=0; \ ++ MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1,(u8)_Rssi2,_FrameSize, _pFrame, (u8)_PlcpSignal); \ + } + #endif /* RTMP_MAC_USB // */ + +-#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) ++#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((void *)(pAddr1), (void *)(pAddr2), MAC_ADDR_LEN) + #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) + + /* */ +@@ -477,8 +477,8 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + /* Both DMA to / from CPU use the same structure. */ + /* */ + typedef struct _RTMP_DMABUF { +- ULONG AllocSize; +- PVOID AllocVa; /* TxBuf virtual address */ ++ unsigned long AllocSize; ++ void *AllocVa; /* TxBuf virtual address */ + NDIS_PHYSICAL_ADDRESS AllocPa; /* TxBuf physical address */ + } RTMP_DMABUF, *PRTMP_DMABUF; + +@@ -491,8 +491,8 @@ typedef struct _RTMP_DMABUF { + /* which driver should ACK upper layer when the tx is physically done or failed. */ + /* */ + typedef struct _RTMP_DMACB { +- ULONG AllocSize; /* Control block size */ +- PVOID AllocVa; /* Control block virtual address */ ++ unsigned long AllocSize; /* Control block size */ ++ void *AllocVa; /* Control block virtual address */ + NDIS_PHYSICAL_ADDRESS AllocPa; /* Control block physical address */ + PNDIS_PACKET pNdisPacket; + PNDIS_PACKET pNextNdisPacket; +@@ -502,23 +502,23 @@ typedef struct _RTMP_DMACB { + + typedef struct _RTMP_TX_RING { + RTMP_DMACB Cell[TX_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; /* software next free tx index */ ++ u32 TxCpuIdx; ++ u32 TxDmaIdx; ++ u32 TxSwFreeIdx; /* software next free tx index */ + } RTMP_TX_RING, *PRTMP_TX_RING; + + typedef struct _RTMP_RX_RING { + RTMP_DMACB Cell[RX_RING_SIZE]; +- UINT32 RxCpuIdx; +- UINT32 RxDmaIdx; +- INT32 RxSwReadIdx; /* software next read index */ ++ u32 RxCpuIdx; ++ u32 RxDmaIdx; ++ int RxSwReadIdx; /* software next read index */ + } RTMP_RX_RING, *PRTMP_RX_RING; + + typedef struct _RTMP_MGMT_RING { + RTMP_DMACB Cell[MGMT_RING_SIZE]; +- UINT32 TxCpuIdx; +- UINT32 TxDmaIdx; +- UINT32 TxSwFreeIdx; /* software next free tx index */ ++ u32 TxCpuIdx; ++ u32 TxDmaIdx; ++ u32 TxSwFreeIdx; /* software next free tx index */ + } RTMP_MGMT_RING, *PRTMP_MGMT_RING; + + /* */ +@@ -526,21 +526,21 @@ typedef struct _RTMP_MGMT_RING { + /* */ + typedef struct _COUNTER_802_3 { + /* General Stats */ +- ULONG GoodTransmits; +- ULONG GoodReceives; +- ULONG TxErrors; +- ULONG RxErrors; +- ULONG RxNoBuffer; ++ unsigned long GoodTransmits; ++ unsigned long GoodReceives; ++ unsigned long TxErrors; ++ unsigned long RxErrors; ++ unsigned long RxNoBuffer; + + /* Ethernet Stats */ +- ULONG RcvAlignmentErrors; +- ULONG OneCollision; +- ULONG MoreCollisions; ++ unsigned long RcvAlignmentErrors; ++ unsigned long OneCollision; ++ unsigned long MoreCollisions; + + } COUNTER_802_3, *PCOUNTER_802_3; + + typedef struct _COUNTER_802_11 { +- ULONG Length; ++ unsigned long Length; + LARGE_INTEGER LastTransmittedFragmentCount; + LARGE_INTEGER TransmittedFragmentCount; + LARGE_INTEGER MulticastTransmittedFrameCount; +@@ -557,59 +557,59 @@ typedef struct _COUNTER_802_11 { + } COUNTER_802_11, *PCOUNTER_802_11; + + typedef struct _COUNTER_RALINK { +- ULONG TransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ +- ULONG ReceivedByteCount; /* both CRC okay and CRC error, used to calculate RX throughput */ +- ULONG BeenDisassociatedCount; +- ULONG BadCQIAutoRecoveryCount; +- ULONG PoorCQIRoamingCount; +- ULONG MgmtRingFullCount; +- ULONG RxCountSinceLastNULL; +- ULONG RxCount; +- ULONG RxRingErrCount; +- ULONG KickTxCount; +- ULONG TxRingErrCount; ++ unsigned long TransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ ++ unsigned long ReceivedByteCount; /* both CRC okay and CRC error, used to calculate RX throughput */ ++ unsigned long BeenDisassociatedCount; ++ unsigned long BadCQIAutoRecoveryCount; ++ unsigned long PoorCQIRoamingCount; ++ unsigned long MgmtRingFullCount; ++ unsigned long RxCountSinceLastNULL; ++ unsigned long RxCount; ++ unsigned long RxRingErrCount; ++ unsigned long KickTxCount; ++ unsigned long TxRingErrCount; + LARGE_INTEGER RealFcsErrCount; +- ULONG PendingNdisPacketCount; +- +- ULONG OneSecOsTxCount[NUM_OF_TX_RING]; +- ULONG OneSecDmaDoneCount[NUM_OF_TX_RING]; +- UINT32 OneSecTxDoneCount; +- ULONG OneSecRxCount; +- UINT32 OneSecTxAggregationCount; +- UINT32 OneSecRxAggregationCount; +- UINT32 OneSecReceivedByteCount; +- UINT32 OneSecFrameDuplicateCount; +- +- UINT32 OneSecTransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 OneSecFalseCCACnt; /* CCA error count, for debug purpose, might move to global counter */ +- UINT32 OneSecRxOkCnt; /* RX without error */ +- UINT32 OneSecRxOkDataCnt; /* unicast-to-me DATA frame count */ +- UINT32 OneSecRxFcsErrCnt; /* CRC error */ +- UINT32 OneSecBeaconSentCnt; +- UINT32 LastOneSecTotalTxCount; /* OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount */ +- UINT32 LastOneSecRxOkDataCnt; /* OneSecRxOkDataCnt */ +- ULONG DuplicateRcv; +- ULONG TxAggCount; +- ULONG TxNonAggCount; +- ULONG TxAgg1MPDUCount; +- ULONG TxAgg2MPDUCount; +- ULONG TxAgg3MPDUCount; +- ULONG TxAgg4MPDUCount; +- ULONG TxAgg5MPDUCount; +- ULONG TxAgg6MPDUCount; +- ULONG TxAgg7MPDUCount; +- ULONG TxAgg8MPDUCount; +- ULONG TxAgg9MPDUCount; +- ULONG TxAgg10MPDUCount; +- ULONG TxAgg11MPDUCount; +- ULONG TxAgg12MPDUCount; +- ULONG TxAgg13MPDUCount; +- ULONG TxAgg14MPDUCount; +- ULONG TxAgg15MPDUCount; +- ULONG TxAgg16MPDUCount; ++ unsigned long PendingNdisPacketCount; ++ ++ unsigned long OneSecOsTxCount[NUM_OF_TX_RING]; ++ unsigned long OneSecDmaDoneCount[NUM_OF_TX_RING]; ++ u32 OneSecTxDoneCount; ++ unsigned long OneSecRxCount; ++ u32 OneSecTxAggregationCount; ++ u32 OneSecRxAggregationCount; ++ u32 OneSecReceivedByteCount; ++ u32 OneSecFrameDuplicateCount; ++ ++ u32 OneSecTransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ ++ u32 OneSecTxNoRetryOkCount; ++ u32 OneSecTxRetryOkCount; ++ u32 OneSecTxFailCount; ++ u32 OneSecFalseCCACnt; /* CCA error count, for debug purpose, might move to global counter */ ++ u32 OneSecRxOkCnt; /* RX without error */ ++ u32 OneSecRxOkDataCnt; /* unicast-to-me DATA frame count */ ++ u32 OneSecRxFcsErrCnt; /* CRC error */ ++ u32 OneSecBeaconSentCnt; ++ u32 LastOneSecTotalTxCount; /* OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount */ ++ u32 LastOneSecRxOkDataCnt; /* OneSecRxOkDataCnt */ ++ unsigned long DuplicateRcv; ++ unsigned long TxAggCount; ++ unsigned long TxNonAggCount; ++ unsigned long TxAgg1MPDUCount; ++ unsigned long TxAgg2MPDUCount; ++ unsigned long TxAgg3MPDUCount; ++ unsigned long TxAgg4MPDUCount; ++ unsigned long TxAgg5MPDUCount; ++ unsigned long TxAgg6MPDUCount; ++ unsigned long TxAgg7MPDUCount; ++ unsigned long TxAgg8MPDUCount; ++ unsigned long TxAgg9MPDUCount; ++ unsigned long TxAgg10MPDUCount; ++ unsigned long TxAgg11MPDUCount; ++ unsigned long TxAgg12MPDUCount; ++ unsigned long TxAgg13MPDUCount; ++ unsigned long TxAgg14MPDUCount; ++ unsigned long TxAgg15MPDUCount; ++ unsigned long TxAgg16MPDUCount; + + LARGE_INTEGER TransmittedOctetsInAMSDU; + LARGE_INTEGER TransmittedAMSDUCount; +@@ -623,37 +623,37 @@ typedef struct _COUNTER_RALINK { + + typedef struct _COUNTER_DRS { + /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; +- UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ +- ULONG CurrTxRateStableTime; /* # of second in current TX rate */ ++ u16 TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; ++ u8 PER[MAX_STEP_OF_TX_RATE_SWITCH]; ++ u8 TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ ++ unsigned long CurrTxRateStableTime; /* # of second in current TX rate */ + BOOLEAN fNoisyEnvironment; + BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ +- UCHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ +- ULONG LastTxOkCount; ++ u8 LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ ++ u8 LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ ++ unsigned long LastTxOkCount; + } COUNTER_DRS, *PCOUNTER_DRS; + + /*************************************************************************** + * security key related data structure + **************************************************************************/ + typedef struct _CIPHER_KEY { +- UCHAR Key[16]; /* right now we implement 4 keys, 128 bits max */ +- UCHAR RxMic[8]; /* make alignment */ +- UCHAR TxMic[8]; +- UCHAR TxTsc[6]; /* 48bit TSC value */ +- UCHAR RxTsc[6]; /* 48bit TSC value */ +- UCHAR CipherAlg; /* 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 */ +- UCHAR KeyLen; +- UCHAR BssId[6]; ++ u8 Key[16]; /* right now we implement 4 keys, 128 bits max */ ++ u8 RxMic[8]; /* make alignment */ ++ u8 TxMic[8]; ++ u8 TxTsc[6]; /* 48bit TSC value */ ++ u8 RxTsc[6]; /* 48bit TSC value */ ++ u8 CipherAlg; /* 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128 */ ++ u8 KeyLen; ++ u8 BssId[6]; + /* Key length for each key, 0: entry is invalid */ +- UCHAR Type; /* Indicate Pairwise/Group when reporting MIC error */ ++ u8 Type; /* Indicate Pairwise/Group when reporting MIC error */ + } CIPHER_KEY, *PCIPHER_KEY; + + /* structure to define WPA Group Key Rekey Interval */ + typedef struct PACKED _RT_802_11_WPA_REKEY { +- ULONG ReKeyMethod; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ +- ULONG ReKeyInterval; /* time-based: seconds, packet-based: kilo-packets */ ++ unsigned long ReKeyMethod; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ unsigned long ReKeyInterval; /* time-based: seconds, packet-based: kilo-packets */ + } RT_WPA_REKEY, *PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; + + #ifdef RTMP_MAC_USB +@@ -661,22 +661,22 @@ typedef struct PACKED _RT_802_11_WPA_REKEY { + * RTUSB I/O related data structure + **************************************************************************/ + typedef struct _RT_SET_ASIC_WCID { +- ULONG WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ +- ULONG SetTid; /* time-based: seconds, packet-based: kilo-packets */ +- ULONG DeleteTid; /* time-based: seconds, packet-based: kilo-packets */ +- UCHAR Addr[MAC_ADDR_LEN]; /* avoid in interrupt when write key */ ++ unsigned long WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ unsigned long SetTid; /* time-based: seconds, packet-based: kilo-packets */ ++ unsigned long DeleteTid; /* time-based: seconds, packet-based: kilo-packets */ ++ u8 Addr[MAC_ADDR_LEN]; /* avoid in interrupt when write key */ + } RT_SET_ASIC_WCID, *PRT_SET_ASIC_WCID; + + typedef struct _RT_SET_ASIC_WCID_ATTRI { +- ULONG WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ +- ULONG Cipher; /* ASIC Cipher definition */ +- UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; ++ unsigned long WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ++ unsigned long Cipher; /* ASIC Cipher definition */ ++ u8 Addr[ETH_LENGTH_OF_ADDRESS]; + } RT_SET_ASIC_WCID_ATTRI, *PRT_SET_ASIC_WCID_ATTRI; + + /* for USB interface, avoid in interrupt when write key */ + typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { +- UCHAR MacAddr[6]; +- USHORT MacTabMatchWCID; /* ASIC */ ++ u8 MacAddr[6]; ++ u16 MacTabMatchWCID; /* ASIC */ + CIPHER_KEY CipherKey; + } RT_ADD_PAIRWISE_KEY_ENTRY, *PRT_ADD_PAIRWISE_KEY_ENTRY; + +@@ -692,8 +692,8 @@ typedef enum _RT_802_11_CIPHER_SUITE_TYPE { + #endif /* RTMP_MAC_USB // */ + + typedef struct { +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR ErrorCode[2]; /*00 01-Invalid authentication type */ ++ u8 Addr[MAC_ADDR_LEN]; ++ u8 ErrorCode[2]; /*00 01-Invalid authentication type */ + /*00 02-Authentication timeout */ + /*00 03-Challenge from AP failed */ + /*00 04-Challenge to AP failed */ +@@ -701,7 +701,7 @@ typedef struct { + } ROGUEAP_ENTRY, *PROGUEAP_ENTRY; + + typedef struct { +- UCHAR RogueApNr; ++ u8 RogueApNr; + ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; + } ROGUEAP_TABLE, *PROGUEAP_TABLE; + +@@ -709,19 +709,19 @@ typedef struct { + /* Cisco IAPP format */ + /* */ + typedef struct _CISCO_IAPP_CONTENT_ { +- USHORT Length; /*IAPP Length */ +- UCHAR MessageType; /*IAPP type */ +- UCHAR FunctionCode; /*IAPP function type */ +- UCHAR DestinaionMAC[MAC_ADDR_LEN]; +- UCHAR SourceMAC[MAC_ADDR_LEN]; +- USHORT Tag; /*Tag(element IE) - Adjacent AP report */ +- USHORT TagLength; /*Length of element not including 4 byte header */ +- UCHAR OUI[4]; /*0x00, 0x40, 0x96, 0x00 */ +- UCHAR PreviousAP[MAC_ADDR_LEN]; /*MAC Address of access point */ +- USHORT Channel; +- USHORT SsidLen; +- UCHAR Ssid[MAX_LEN_OF_SSID]; +- USHORT Seconds; /*Seconds that the client has been disassociated. */ ++ u16 Length; /*IAPP Length */ ++ u8 MessageType; /*IAPP type */ ++ u8 FunctionCode; /*IAPP function type */ ++ u8 DestinaionMAC[MAC_ADDR_LEN]; ++ u8 SourceMAC[MAC_ADDR_LEN]; ++ u16 Tag; /*Tag(element IE) - Adjacent AP report */ ++ u16 TagLength; /*Length of element not including 4 byte header */ ++ u8 OUI[4]; /*0x00, 0x40, 0x96, 0x00 */ ++ u8 PreviousAP[MAC_ADDR_LEN]; /*MAC Address of access point */ ++ u16 Channel; ++ u16 SsidLen; ++ u8 Ssid[MAX_LEN_OF_SSID]; ++ u16 Seconds; /*Seconds that the client has been disassociated. */ + } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; + + /* +@@ -729,19 +729,19 @@ typedef struct _CISCO_IAPP_CONTENT_ { + */ + typedef struct _FRAGMENT_FRAME { + PNDIS_PACKET pFragPacket; +- ULONG RxSize; +- USHORT Sequence; +- USHORT LastFrag; +- ULONG Flags; /* Some extra frame information. bit 0: LLC presented */ ++ unsigned long RxSize; ++ u16 Sequence; ++ u16 LastFrag; ++ unsigned long Flags; /* Some extra frame information. bit 0: LLC presented */ + } FRAGMENT_FRAME, *PFRAGMENT_FRAME; + + /* */ + /* Packet information for NdisQueryPacket */ + /* */ + typedef struct _PACKET_INFO { +- UINT PhysicalBufferCount; /* Physical breaks of buffer descripor chained */ +- UINT BufferCount; /* Number of Buffer descriptor chained */ +- UINT TotalPacketLength; /* Self explained */ ++ u32 PhysicalBufferCount; /* Physical breaks of buffer descripor chained */ ++ u32 BufferCount; /* Number of Buffer descriptor chained */ ++ u32 TotalPacketLength; /* Self explained */ + PNDIS_BUFFER pFirstBuffer; /* Pointer to first buffer descriptor */ + } PACKET_INFO, *PPACKET_INFO; + +@@ -749,36 +749,36 @@ typedef struct _PACKET_INFO { + /* Arcfour Structure Added by PaulWu */ + /* */ + typedef struct _ARCFOUR { +- UINT X; +- UINT Y; +- UCHAR STATE[256]; ++ u32 X; ++ u32 Y; ++ u8 STATE[256]; + } ARCFOURCONTEXT, *PARCFOURCONTEXT; + + /* */ + /* Tkip Key structure which RC4 key & MIC calculation */ + /* */ + typedef struct _TKIP_KEY_INFO { +- UINT nBytesInM; /* # bytes in M for MICKEY */ +- ULONG IV16; +- ULONG IV32; +- ULONG K0; /* for MICKEY Low */ +- ULONG K1; /* for MICKEY Hig */ +- ULONG L; /* Current state for MICKEY */ +- ULONG R; /* Current state for MICKEY */ +- ULONG M; /* Message accumulator for MICKEY */ +- UCHAR RC4KEY[16]; +- UCHAR MIC[8]; ++ u32 nBytesInM; /* # bytes in M for MICKEY */ ++ unsigned long IV16; ++ unsigned long IV32; ++ unsigned long K0; /* for MICKEY Low */ ++ unsigned long K1; /* for MICKEY Hig */ ++ unsigned long L; /* Current state for MICKEY */ ++ unsigned long R; /* Current state for MICKEY */ ++ unsigned long M; /* Message accumulator for MICKEY */ ++ u8 RC4KEY[16]; ++ u8 MIC[8]; + } TKIP_KEY_INFO, *PTKIP_KEY_INFO; + + /* */ + /* Private / Misc data, counters for driver internal use */ + /* */ + typedef struct __PRIVATE_STRUC { +- UINT SystemResetCnt; /* System reset counter */ +- UINT TxRingFullCnt; /* Tx ring full occurrance number */ +- UINT PhyRxErrCnt; /* PHY Rx error count, for debug purpose, might move to global counter */ ++ u32 SystemResetCnt; /* System reset counter */ ++ u32 TxRingFullCnt; /* Tx ring full occurrance number */ ++ u32 PhyRxErrCnt; /* PHY Rx error count, for debug purpose, might move to global counter */ + /* Variables for WEP encryption / decryption in rtmp_wep.c */ +- UINT FCSCRC32; ++ u32 FCSCRC32; + ARCFOURCONTEXT WEPCONTEXT; + /* Tkip stuff */ + TKIP_KEY_INFO Tx; +@@ -791,44 +791,44 @@ typedef struct __PRIVATE_STRUC { + /* structure to tune BBP R66 (BBP TUNING) */ + typedef struct _BBP_R66_TUNING { + BOOLEAN bEnable; +- USHORT FalseCcaLowerThreshold; /* default 100 */ +- USHORT FalseCcaUpperThreshold; /* default 512 */ +- UCHAR R66Delta; +- UCHAR R66CurrentValue; ++ u16 FalseCcaLowerThreshold; /* default 100 */ ++ u16 FalseCcaUpperThreshold; /* default 512 */ ++ u8 R66Delta; ++ u8 R66CurrentValue; + BOOLEAN R66LowerUpperSelect; /*Before LinkUp, Used LowerBound or UpperBound as R66 value. */ + } BBP_R66_TUNING, *PBBP_R66_TUNING; + + /* structure to store channel TX power */ + typedef struct _CHANNEL_TX_POWER { +- USHORT RemainingTimeForUse; /*unit: sec */ +- UCHAR Channel; +- CHAR Power; +- CHAR Power2; +- UCHAR MaxTxPwr; +- UCHAR DfsReq; ++ u16 RemainingTimeForUse; /*unit: sec */ ++ u8 Channel; ++ char Power; ++ char Power2; ++ u8 MaxTxPwr; ++ u8 DfsReq; + } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; + + /* structure to store 802.11j channel TX power */ + typedef struct _CHANNEL_11J_TX_POWER { +- UCHAR Channel; +- UCHAR BW; /* BW_10 or BW_20 */ +- CHAR Power; +- CHAR Power2; +- USHORT RemainingTimeForUse; /*unit: sec */ ++ u8 Channel; ++ u8 BW; /* BW_10 or BW_20 */ ++ char Power; ++ char Power2; ++ u16 RemainingTimeForUse; /*unit: sec */ + } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; + + typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { +- UCHAR EvaluatePeriod; /* 0:not evalute status, 1: evaluate status, 2: switching status */ +- UCHAR EvaluateStableCnt; +- UCHAR Pair1PrimaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ +- UCHAR Pair1SecondaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ +- UCHAR Pair2PrimaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ +- UCHAR Pair2SecondaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ +- SHORT Pair1AvgRssi[2]; /* AvgRssi[0]:E1, AvgRssi[1]:E2 */ +- SHORT Pair2AvgRssi[2]; /* AvgRssi[0]:E3, AvgRssi[1]:E4 */ +- SHORT Pair1LastAvgRssi; /* */ +- SHORT Pair2LastAvgRssi; /* */ +- ULONG RcvPktNumWhenEvaluate; ++ u8 EvaluatePeriod; /* 0:not evalute status, 1: evaluate status, 2: switching status */ ++ u8 EvaluateStableCnt; ++ u8 Pair1PrimaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ ++ u8 Pair1SecondaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ ++ u8 Pair2PrimaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ ++ u8 Pair2SecondaryRxAnt; /* 0:Ant-E3, 1:Ant-E4 */ ++ short Pair1AvgRssi[2]; /* AvgRssi[0]:E1, AvgRssi[1]:E2 */ ++ short Pair2AvgRssi[2]; /* AvgRssi[0]:E3, AvgRssi[1]:E4 */ ++ short Pair1LastAvgRssi; /* */ ++ short Pair2LastAvgRssi; /* */ ++ unsigned long RcvPktNumWhenEvaluate; + BOOLEAN FirstPktArrivedWhenEvaluate; + RALINK_TIMER_STRUCT RxAntDiversityTimer; + } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; +@@ -838,22 +838,22 @@ typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { + **************************************************************************/ + typedef struct _RADAR_DETECT_STRUCT { + /*BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h */ +- UCHAR CSCount; /*Channel switch counter */ +- UCHAR CSPeriod; /*Channel switch period (beacon count) */ +- UCHAR RDCount; /*Radar detection counter */ +- UCHAR RDMode; /*Radar Detection mode */ +- UCHAR RDDurRegion; /*Radar detection duration region */ +- UCHAR BBPR16; +- UCHAR BBPR17; +- UCHAR BBPR18; +- UCHAR BBPR21; +- UCHAR BBPR22; +- UCHAR BBPR64; +- ULONG InServiceMonitorCount; /* unit: sec */ +- UINT8 DfsSessionTime; ++ u8 CSCount; /*Channel switch counter */ ++ u8 CSPeriod; /*Channel switch period (beacon count) */ ++ u8 RDCount; /*Radar detection counter */ ++ u8 RDMode; /*Radar Detection mode */ ++ u8 RDDurRegion; /*Radar detection duration region */ ++ u8 BBPR16; ++ u8 BBPR17; ++ u8 BBPR18; ++ u8 BBPR21; ++ u8 BBPR22; ++ u8 BBPR64; ++ unsigned long InServiceMonitorCount; /* unit: sec */ ++ u8 DfsSessionTime; + BOOLEAN bFastDfs; +- UINT8 ChMovingTime; +- UINT8 LongPulseRadarTh; ++ u8 ChMovingTime; ++ u8 LongPulseRadarTh; + } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; + + typedef enum _ABGBAND_STATE_ { +@@ -866,14 +866,14 @@ typedef enum _ABGBAND_STATE_ { + /* Power save method control */ + typedef union _PS_CONTROL { + struct { +- ULONG EnablePSinIdle:1; /* Enable radio off when not connect to AP. radio on only when sitesurvey, */ +- ULONG EnableNewPS:1; /* Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. */ +- ULONG rt30xxPowerMode:2; /* Power Level Mode for rt30xx chip */ +- ULONG rt30xxFollowHostASPM:1; /* Card Follows Host's setting for rt30xx chip. */ +- ULONG rt30xxForceASPMTest:1; /* Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. */ +- ULONG rsv:26; /* Radio Measurement Enable */ ++ unsigned long EnablePSinIdle:1; /* Enable radio off when not connect to AP. radio on only when sitesurvey, */ ++ unsigned long EnableNewPS:1; /* Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe. */ ++ unsigned long rt30xxPowerMode:2; /* Power Level Mode for rt30xx chip */ ++ unsigned long rt30xxFollowHostASPM:1; /* Card Follows Host's setting for rt30xx chip. */ ++ unsigned long rt30xxForceASPMTest:1; /* Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode. */ ++ unsigned long rsv:26; /* Radio Measurement Enable */ + } field; +- ULONG word; ++ unsigned long word; + } PS_CONTROL, *PPS_CONTROL; + #endif /* RTMP_MAC_PCI // */ + +@@ -901,36 +901,36 @@ typedef struct _MLME_STRUCT { + STATE_MACHINE WpaMachine; + STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; + +- ULONG ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ +- ULONG Now32; /* latch the value of NdisGetSystemUpTime() */ +- ULONG LastSendNULLpsmTime; ++ unsigned long ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ ++ unsigned long Now32; /* latch the value of NdisGetSystemUpTime() */ ++ unsigned long LastSendNULLpsmTime; + + BOOLEAN bRunning; + NDIS_SPIN_LOCK TaskLock; + MLME_QUEUE Queue; + +- UINT ShiftReg; ++ u32 ShiftReg; + + RALINK_TIMER_STRUCT PeriodicTimer; + RALINK_TIMER_STRUCT APSDPeriodicTimer; + RALINK_TIMER_STRUCT LinkDownTimer; + RALINK_TIMER_STRUCT LinkUpTimer; + #ifdef RTMP_MAC_PCI +- UCHAR bPsPollTimerRunning; ++ u8 bPsPollTimerRunning; + RALINK_TIMER_STRUCT PsPollTimer; + RALINK_TIMER_STRUCT RadioOnOffTimer; + #endif /* RTMP_MAC_PCI // */ +- ULONG PeriodicRound; +- ULONG OneSecPeriodicRound; ++ unsigned long PeriodicRound; ++ unsigned long OneSecPeriodicRound; + +- UCHAR RealRxPath; ++ u8 RealRxPath; + BOOLEAN bLowThroughput; + BOOLEAN bEnableAutoAntennaCheck; + RALINK_TIMER_STRUCT RxAntEvalTimer; + + #ifdef RT30xx +- UCHAR CaliBW40RfR24; +- UCHAR CaliBW20RfR24; ++ u8 CaliBW40RfR24; ++ u8 CaliBW20RfR24; + #endif /* RT30xx // */ + + #ifdef RTMP_MAC_USB +@@ -955,7 +955,7 @@ struct reordering_list { + }; + + struct reordering_mpdu_pool { +- PVOID mem; ++ void *mem; + NDIS_SPIN_LOCK lock; + struct reordering_list freelist; + }; +@@ -975,97 +975,97 @@ typedef enum _ORI_BLOCKACK_STATUS { + } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS; + + typedef struct _BA_ORI_ENTRY { +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; +- UCHAR Token; ++ u8 Wcid; ++ u8 TID; ++ u8 BAWinSize; ++ u8 Token; + /* Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. */ +- USHORT Sequence; +- USHORT TimeOutValue; ++ u16 Sequence; ++ u16 TimeOutValue; + ORI_BLOCKACK_STATUS ORI_BA_Status; + RALINK_TIMER_STRUCT ORIBATimer; +- PVOID pAdapter; ++ void *pAdapter; + } BA_ORI_ENTRY, *PBA_ORI_ENTRY; + + typedef struct _BA_REC_ENTRY { +- UCHAR Wcid; +- UCHAR TID; +- UCHAR BAWinSize; /* 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. */ +- /*UCHAR NumOfRxPkt; */ +- /*UCHAR Curindidx; // the head in the RX reordering buffer */ +- USHORT LastIndSeq; +-/* USHORT LastIndSeqAtTimer; */ +- USHORT TimeOutValue; ++ u8 Wcid; ++ u8 TID; ++ u8 BAWinSize; /* 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. */ ++ /*u8 NumOfRxPkt; */ ++ /*u8 Curindidx; // the head in the RX reordering buffer */ ++ u16 LastIndSeq; ++/* u16 LastIndSeqAtTimer; */ ++ u16 TimeOutValue; + RALINK_TIMER_STRUCT RECBATimer; +- ULONG LastIndSeqAtTimer; +- ULONG nDropPacket; +- ULONG rcvSeq; ++ unsigned long LastIndSeqAtTimer; ++ unsigned long nDropPacket; ++ unsigned long rcvSeq; + REC_BLOCKACK_STATUS REC_BA_Status; +-/* UCHAR RxBufIdxUsed; */ ++/* u8 RxBufIdxUsed; */ + /* corresponding virtual address for RX reordering packet storage. */ + /*RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; */ + NDIS_SPIN_LOCK RxReRingLock; /* Rx Ring spinlock */ + /* struct _BA_REC_ENTRY *pNext; */ +- PVOID pAdapter; ++ void *pAdapter; + struct reordering_list list; + } BA_REC_ENTRY, *PBA_REC_ENTRY; + + typedef struct { +- ULONG numAsRecipient; /* I am recipient of numAsRecipient clients. These client are in the BARecEntry[] */ +- ULONG numAsOriginator; /* I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] */ +- ULONG numDoneOriginator; /* count Done Originator sessions */ ++ unsigned long numAsRecipient; /* I am recipient of numAsRecipient clients. These client are in the BARecEntry[] */ ++ unsigned long numAsOriginator; /* I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] */ ++ unsigned long numDoneOriginator; /* count Done Originator sessions */ + BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; + BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; + } BA_TABLE, *PBA_TABLE; + + /*For QureyBATableOID use; */ + typedef struct PACKED _OID_BA_REC_ENTRY { +- UCHAR MACAddr[MAC_ADDR_LEN]; +- UCHAR BaBitmap; /* if (BaBitmap&(1<> 3; \ +- UCHAR bit_offset = wcid & 0x7; \ ++ { u8 tim_offset = wcid >> 3; \ ++ u8 bit_offset = wcid & 0x7; \ + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); } + + /* set a station PS TIM bit */ + #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \ +- { UCHAR tim_offset = wcid >> 3; \ +- UCHAR bit_offset = wcid & 0x7; \ ++ { u8 tim_offset = wcid >> 3; \ ++ u8 bit_offset = wcid & 0x7; \ + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } + + /* configuration common to OPMODE_AP as well as OPMODE_STA */ + typedef struct _COMMON_CONFIG { + + BOOLEAN bCountryFlag; +- UCHAR CountryCode[3]; +- UCHAR Geography; +- UCHAR CountryRegion; /* Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel */ +- UCHAR CountryRegionForABand; /* Enum of country region for A band */ +- UCHAR PhyMode; /* PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED */ +- USHORT Dsifs; /* in units of usec */ +- ULONG PacketFilter; /* Packet filter for receiving */ +- UINT8 RegulatoryClass; +- +- CHAR Ssid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ +- UCHAR SsidLen; /* the actual ssid length in used */ +- UCHAR LastSsidLen; /* the actual ssid length in used */ +- CHAR LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ +- UCHAR LastBssid[MAC_ADDR_LEN]; +- +- UCHAR Bssid[MAC_ADDR_LEN]; +- USHORT BeaconPeriod; +- UCHAR Channel; +- UCHAR CentralChannel; /* Central Channel when using 40MHz is indicating. not real channel. */ +- +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen; +- UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; /* OID_802_11_DESIRED_RATES */ +- UCHAR MaxDesiredRate; +- UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; +- +- ULONG BasicRateBitmap; /* backup basic ratebitmap */ ++ u8 CountryCode[3]; ++ u8 Geography; ++ u8 CountryRegion; /* Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel */ ++ u8 CountryRegionForABand; /* Enum of country region for A band */ ++ u8 PhyMode; /* PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED */ ++ u16 Dsifs; /* in units of usec */ ++ unsigned long PacketFilter; /* Packet filter for receiving */ ++ u8 RegulatoryClass; ++ ++ char Ssid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ ++ u8 SsidLen; /* the actual ssid length in used */ ++ u8 LastSsidLen; /* the actual ssid length in used */ ++ char LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ ++ u8 LastBssid[MAC_ADDR_LEN]; ++ ++ u8 Bssid[MAC_ADDR_LEN]; ++ u16 BeaconPeriod; ++ u8 Channel; ++ u8 CentralChannel; /* Central Channel when using 40MHz is indicating. not real channel. */ ++ ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 SupRateLen; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 ExtRateLen; ++ u8 DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; /* OID_802_11_DESIRED_RATES */ ++ u8 MaxDesiredRate; ++ u8 ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ ++ unsigned long BasicRateBitmap; /* backup basic ratebitmap */ + + BOOLEAN bAPSDCapable; + BOOLEAN bInServicePeriod; +@@ -1217,45 +1217,45 @@ typedef struct _COMMON_CONFIG { + + BOOLEAN bNeedSendTriggerFrame; + BOOLEAN bAPSDForcePowerSave; /* Force power save mode, should only use in APSD-STAUT */ +- ULONG TriggerTimerCount; +- UCHAR MaxSPLength; +- UCHAR BBPCurrentBW; /* BW_10, BW_20, BW_40 */ ++ unsigned long TriggerTimerCount; ++ u8 MaxSPLength; ++ u8 BBPCurrentBW; /* BW_10, BW_20, BW_40 */ + /* move to MULTISSID_STRUCT for MBSS */ + /*HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI. */ + REG_TRANSMIT_SETTING RegTransmitSetting; /*registry transmit setting. this is for reading registry setting only. not useful. */ +- /*UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode */ +- UCHAR TxRate; /* Same value to fill in TXD. TxRate is 6-bit */ +- UCHAR MaxTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ +- UCHAR TxRateIndex; /* Tx rate index in RateSwitchTable */ +- UCHAR TxRateTableSize; /* Valid Tx rate table size in RateSwitchTable */ ++ /*u8 FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode */ ++ u8 TxRate; /* Same value to fill in TXD. TxRate is 6-bit */ ++ u8 MaxTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ ++ u8 TxRateIndex; /* Tx rate index in RateSwitchTable */ ++ u8 TxRateTableSize; /* Valid Tx rate table size in RateSwitchTable */ + /*BOOLEAN bAutoTxRateSwitch; */ +- UCHAR MinTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ +- UCHAR RtsRate; /* RATE_xxx */ ++ u8 MinTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ ++ u8 RtsRate; /* RATE_xxx */ + HTTRANSMIT_SETTING MlmeTransmit; /* MGMT frame PHY rate setting when operatin at Ht rate. */ +- UCHAR MlmeRate; /* RATE_xxx, used to send MLME frames */ +- UCHAR BasicMlmeRate; /* Default Rate for sending MLME frames */ ++ u8 MlmeRate; /* RATE_xxx, used to send MLME frames */ ++ u8 BasicMlmeRate; /* Default Rate for sending MLME frames */ + +- USHORT RtsThreshold; /* in unit of BYTE */ +- USHORT FragmentThreshold; /* in unit of BYTE */ ++ u16 RtsThreshold; /* in unit of BYTE */ ++ u16 FragmentThreshold; /* in unit of BYTE */ + +- UCHAR TxPower; /* in unit of mW */ +- ULONG TxPowerPercentage; /* 0~100 % */ +- ULONG TxPowerDefault; /* keep for TxPowerPercentage */ +- UINT8 PwrConstraint; ++ u8 TxPower; /* in unit of mW */ ++ unsigned long TxPowerPercentage; /* 0~100 % */ ++ unsigned long TxPowerDefault; /* keep for TxPowerPercentage */ ++ u8 PwrConstraint; + + BACAP_STRUC BACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ + BACAP_STRUC REGBACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ + + IOT_STRUC IOTestParm; /* 802.11n InterOpbility Test Parameter; */ +- ULONG TxPreamble; /* Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto */ ++ unsigned long TxPreamble; /* Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto */ + BOOLEAN bUseZeroToDisableFragment; /* Microsoft use 0 as disable */ +- ULONG UseBGProtection; /* 0: auto, 1: always use, 2: always not use */ ++ unsigned long UseBGProtection; /* 0: auto, 1: always use, 2: always not use */ + BOOLEAN bUseShortSlotTime; /* 0: disable, 1 - use short slot (9us) */ + BOOLEAN bEnableTxBurst; /* 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST */ + BOOLEAN bAggregationCapable; /* 1: enable TX aggregation when the peer supports it */ + BOOLEAN bPiggyBackCapable; /* 1: enable TX piggy-back according MAC's version */ + BOOLEAN bIEEE80211H; /* 1: enable IEEE802.11h spec. */ +- ULONG DisableOLBCDetect; /* 0: enable OLBC detect; 1 disable OLBC detect */ ++ unsigned long DisableOLBCDetect; /* 0: enable OLBC detect; 1 disable OLBC detect */ + + BOOLEAN bRdg; + +@@ -1263,13 +1263,13 @@ typedef struct _COMMON_CONFIG { + QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ + EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ + QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ +- UCHAR AckPolicy[4]; /* ACK policy of the specified AC. see ACK_xxx */ ++ u8 AckPolicy[4]; /* ACK policy of the specified AC. see ACK_xxx */ + BOOLEAN bDLSCapable; /* 0:disable DLS, 1:enable DLS */ + /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ + /* BOOLEAN control, either ON or OFF. These flags should always be accessed via */ + /* OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. */ + /* see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition */ +- ULONG OpStatusFlags; ++ unsigned long OpStatusFlags; + + BOOLEAN NdisRadioStateOff; /*For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. */ + ABGBAND_STATE BandState; /* For setting BBP used on B/G or A mode. */ +@@ -1278,7 +1278,7 @@ typedef struct _COMMON_CONFIG { + RADAR_DETECT_STRUCT RadarDetect; + + /* HT */ +- UCHAR BASize; /* USer desired BAWindowSize. Should not exceed our max capability */ ++ u8 BASize; /* USer desired BAWindowSize. Should not exceed our max capability */ + /*RT_HT_CAPABILITY SupportedHtPhy; */ + RT_HT_CAPABILITY DesiredHtPhy; + HT_CAPABILITY_IE HtCapability; +@@ -1297,34 +1297,34 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bForty_Mhz_Intolerant; + BOOLEAN bExtChannelSwitchAnnouncement; + BOOLEAN bRcvBSSWidthTriggerEvents; +- ULONG LastRcvBSSWidthTriggerEventsTime; ++ unsigned long LastRcvBSSWidthTriggerEventsTime; + +- UCHAR TxBASize; ++ u8 TxBASize; + + /* Enable wireless event */ + BOOLEAN bWirelessEvent; + BOOLEAN bWiFiTest; /* Enable this parameter for WiFi test */ + + /* Tx & Rx Stream number selection */ +- UCHAR TxStream; +- UCHAR RxStream; ++ u8 TxStream; ++ u8 RxStream; + + BOOLEAN bHardwareRadio; /* Hardware controlled Radio enabled */ + + #ifdef RTMP_MAC_USB + BOOLEAN bMultipleIRP; /* Multiple Bulk IN flag */ +- UCHAR NumOfBulkInIRP; /* if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 */ ++ u8 NumOfBulkInIRP; /* if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 */ + RT_HT_CAPABILITY SupportedHtPhy; +- ULONG MaxPktOneTxBulk; +- UCHAR TxBulkFactor; +- UCHAR RxBulkFactor; ++ unsigned long MaxPktOneTxBulk; ++ u8 TxBulkFactor; ++ u8 RxBulkFactor; + + BOOLEAN IsUpdateBeacon; + BEACON_SYNC_STRUCT *pBeaconSync; + RALINK_TIMER_STRUCT BeaconUpdateTimer; +- UINT32 BeaconAdjust; +- UINT32 BeaconFactor; +- UINT32 BeaconRemain; ++ u32 BeaconAdjust; ++ u32 BeaconFactor; ++ u32 BeaconRemain; + #endif /* RTMP_MAC_USB // */ + + NDIS_SPIN_LOCK MeasureReqTabLock; +@@ -1337,7 +1337,7 @@ typedef struct _COMMON_CONFIG { + + #if defined(RT305x)||defined(RT30xx) + /* request by Gary, for High Power issue */ +- UCHAR HighPowerPatchDisabled; ++ u8 HighPowerPatchDisabled; + #endif + + BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ +@@ -1352,31 +1352,31 @@ typedef struct _STA_ADMIN_CONFIG { + /* settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either */ + /* AP or IBSS holder). */ + /* Once initialized, user configuration can only be changed via OID_xxx */ +- UCHAR BssType; /* BSS_INFRA or BSS_ADHOC */ +- USHORT AtimWin; /* used when starting a new IBSS */ ++ u8 BssType; /* BSS_INFRA or BSS_ADHOC */ ++ u16 AtimWin; /* used when starting a new IBSS */ + + /* GROUP 2 - */ + /* User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe */ + /* the user intended configuration, and should be always applied to the final */ + /* settings in ACTIVE BSS without compromising with the BSS holder. */ + /* Once initialized, user configuration can only be changed via OID_xxx */ +- UCHAR RssiTrigger; +- UCHAR RssiTriggerMode; /* RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD */ +- USHORT DefaultListenCount; /* default listen count; */ +- ULONG WindowsPowerMode; /* Power mode for AC power */ +- ULONG WindowsBatteryPowerMode; /* Power mode for battery if exists */ ++ u8 RssiTrigger; ++ u8 RssiTriggerMode; /* RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD */ ++ u16 DefaultListenCount; /* default listen count; */ ++ unsigned long WindowsPowerMode; /* Power mode for AC power */ ++ unsigned long WindowsBatteryPowerMode; /* Power mode for battery if exists */ + BOOLEAN bWindowsACCAMEnable; /* Enable CAM power mode when AC on */ + BOOLEAN bAutoReconnect; /* Set to TRUE when setting OID_802_11_SSID with no matching BSSID */ +- ULONG WindowsPowerProfile; /* Windows power profile, for NDIS5.1 PnP */ ++ unsigned long WindowsPowerProfile; /* Windows power profile, for NDIS5.1 PnP */ + + /* MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1) */ +- USHORT Psm; /* power management mode (PWR_ACTIVE|PWR_SAVE) */ +- USHORT DisassocReason; +- UCHAR DisassocSta[MAC_ADDR_LEN]; +- USHORT DeauthReason; +- UCHAR DeauthSta[MAC_ADDR_LEN]; +- USHORT AuthFailReason; +- UCHAR AuthFailSta[MAC_ADDR_LEN]; ++ u16 Psm; /* power management mode (PWR_ACTIVE|PWR_SAVE) */ ++ u16 DisassocReason; ++ u8 DisassocSta[MAC_ADDR_LEN]; ++ u16 DeauthReason; ++ u8 DeauthSta[MAC_ADDR_LEN]; ++ u16 AuthFailReason; ++ u8 AuthFailSta[MAC_ADDR_LEN]; + + NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ +@@ -1387,45 +1387,45 @@ typedef struct _STA_ADMIN_CONFIG { + NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Multicast cipher suite */ + NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher suite */ + BOOLEAN bMixCipher; /* Indicate current Pair & Group use different cipher suites */ +- USHORT RsnCapability; ++ u16 RsnCapability; + + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + +- UCHAR WpaPassPhrase[64]; /* WPA PSK pass phrase */ +- UINT WpaPassPhraseLen; /* the length of WPA PSK pass phrase */ +- UCHAR PMK[32]; /* WPA PSK mode PMK */ +- UCHAR PTK[64]; /* WPA PSK mode PTK */ +- UCHAR GTK[32]; /* GTK from authenticator */ ++ u8 WpaPassPhrase[64]; /* WPA PSK pass phrase */ ++ u32 WpaPassPhraseLen; /* the length of WPA PSK pass phrase */ ++ u8 PMK[32]; /* WPA PSK mode PMK */ ++ u8 PTK[64]; /* WPA PSK mode PTK */ ++ u8 GTK[32]; /* GTK from authenticator */ + BSSID_INFO SavedPMK[PMKID_NO]; +- UINT SavedPMKNum; /* Saved PMKID number */ ++ u32 SavedPMKNum; /* Saved PMKID number */ + +- UCHAR DefaultKeyId; ++ u8 DefaultKeyId; + + /* WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED */ +- UCHAR PortSecured; ++ u8 PortSecured; + + /* For WPA countermeasures */ +- ULONG LastMicErrorTime; /* record last MIC error time */ +- ULONG MicErrCnt; /* Should be 0, 1, 2, then reset to zero (after disassoiciation). */ ++ unsigned long LastMicErrorTime; /* record last MIC error time */ ++ unsigned long MicErrCnt; /* Should be 0, 1, 2, then reset to zero (after disassoiciation). */ + BOOLEAN bBlockAssoc; /* Block associate attempt for 60 seconds after counter measure occurred. */ + /* For WPA-PSK supplicant state */ + WPA_STATE WpaState; /* Default is SS_NOTUSE and handled by microsoft 802.1x */ +- UCHAR ReplayCounter[8]; +- UCHAR ANonce[32]; /* ANonce for WPA-PSK from aurhenticator */ +- UCHAR SNonce[32]; /* SNonce for WPA-PSK */ ++ u8 ReplayCounter[8]; ++ u8 ANonce[32]; /* ANonce for WPA-PSK from aurhenticator */ ++ u8 SNonce[32]; /* SNonce for WPA-PSK */ + +- UCHAR LastSNR0; /* last received BEACON's SNR */ +- UCHAR LastSNR1; /* last received BEACON's SNR for 2nd antenna */ ++ u8 LastSNR0; /* last received BEACON's SNR */ ++ u8 LastSNR1; /* last received BEACON's SNR for 2nd antenna */ + RSSI_SAMPLE RssiSample; +- ULONG NumOfAvgRssiSample; ++ unsigned long NumOfAvgRssiSample; + +- ULONG LastBeaconRxTime; /* OS's timestamp of the last BEACON RX time */ +- ULONG Last11bBeaconRxTime; /* OS's timestamp of the last 11B BEACON RX time */ +- ULONG Last11gBeaconRxTime; /* OS's timestamp of the last 11G BEACON RX time */ +- ULONG Last20NBeaconRxTime; /* OS's timestamp of the last 20MHz N BEACON RX time */ ++ unsigned long LastBeaconRxTime; /* OS's timestamp of the last BEACON RX time */ ++ unsigned long Last11bBeaconRxTime; /* OS's timestamp of the last 11B BEACON RX time */ ++ unsigned long Last11gBeaconRxTime; /* OS's timestamp of the last 11G BEACON RX time */ ++ unsigned long Last20NBeaconRxTime; /* OS's timestamp of the last 20MHz N BEACON RX time */ + +- ULONG LastScanTime; /* Record last scan time for issue BSSID_SCAN_LIST */ +- ULONG ScanCnt; /* Scan counts since most recent SSID, BSSID, SCAN OID request */ ++ unsigned long LastScanTime; /* Record last scan time for issue BSSID_SCAN_LIST */ ++ unsigned long ScanCnt; /* Scan counts since most recent SSID, BSSID, SCAN OID request */ + BOOLEAN bSwRadio; /* Software controlled Radio On/Off, TRUE: On */ + BOOLEAN bHwRadio; /* Hardware controlled Radio On/Off, TRUE: On */ + BOOLEAN bRadio; /* Radio state, And of Sw & Hw radio state */ +@@ -1435,33 +1435,33 @@ typedef struct _STA_ADMIN_CONFIG { + /* New for WPA, windows want us to keep association information and */ + /* Fixed IEs from last association response */ + NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; +- USHORT ReqVarIELen; /* Length of next VIE include EID & Length */ +- UCHAR ReqVarIEs[MAX_VIE_LEN]; /* The content saved here should be little-endian format. */ +- USHORT ResVarIELen; /* Length of next VIE include EID & Length */ +- UCHAR ResVarIEs[MAX_VIE_LEN]; ++ u16 ReqVarIELen; /* Length of next VIE include EID & Length */ ++ u8 ReqVarIEs[MAX_VIE_LEN]; /* The content saved here should be little-endian format. */ ++ u16 ResVarIELen; /* Length of next VIE include EID & Length */ ++ u8 ResVarIEs[MAX_VIE_LEN]; + +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; /* The content saved here should be little-endian format. */ ++ u8 RSNIE_Len; ++ u8 RSN_IE[MAX_LEN_OF_RSNIE]; /* The content saved here should be little-endian format. */ + +- ULONG CLBusyBytes; /* Save the total bytes received durning channel load scan time */ +- USHORT RPIDensity[8]; /* Array for RPI density collection */ ++ unsigned long CLBusyBytes; /* Save the total bytes received durning channel load scan time */ ++ u16 RPIDensity[8]; /* Array for RPI density collection */ + +- UCHAR RMReqCnt; /* Number of measurement request saved. */ +- UCHAR CurrentRMReqIdx; /* Number of measurement request saved. */ ++ u8 RMReqCnt; /* Number of measurement request saved. */ ++ u8 CurrentRMReqIdx; /* Number of measurement request saved. */ + BOOLEAN ParallelReq; /* Parallel measurement, only one request performed, */ + /* It must be the same channel with maximum duration */ +- USHORT ParallelDuration; /* Maximum duration for parallel measurement */ +- UCHAR ParallelChannel; /* Only one channel with parallel measurement */ +- USHORT IAPPToken; /* IAPP dialog token */ ++ u16 ParallelDuration; /* Maximum duration for parallel measurement */ ++ u8 ParallelChannel; /* Only one channel with parallel measurement */ ++ u16 IAPPToken; /* IAPP dialog token */ + /* Hack for channel load and noise histogram parameters */ +- UCHAR NHFactor; /* Parameter for Noise histogram */ +- UCHAR CLFactor; /* Parameter for channel load */ ++ u8 NHFactor; /* Parameter for Noise histogram */ ++ u8 CLFactor; /* Parameter for channel load */ + + RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; + BOOLEAN StaQuickResponeForRateUpTimerRunning; + +- UCHAR DtimCount; /* 0.. DtimPeriod-1 */ +- UCHAR DtimPeriod; /* default = 3 */ ++ u8 DtimCount; /* 0.. DtimPeriod-1 */ ++ u8 DtimPeriod; /* default = 3 */ + + /*////////////////////////////////////////////////////////////////////////////////////// */ + /* This is only for WHQL test. */ +@@ -1471,22 +1471,22 @@ typedef struct _STA_ADMIN_CONFIG { + RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; + /* Fast Roaming */ + BOOLEAN bAutoRoaming; /* 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI */ +- CHAR dBmToRoam; /* the condition to roam when receiving Rssi less than this value. It's negative value. */ ++ char dBmToRoam; /* the condition to roam when receiving Rssi less than this value. It's negative value. */ + + BOOLEAN IEEE8021X; + BOOLEAN IEEE8021x_required_keys; + CIPHER_KEY DesireSharedKey[4]; /* Record user desired WEP keys */ +- UCHAR DesireSharedKeyId; ++ u8 DesireSharedKeyId; + + /* 0: driver ignores wpa_supplicant */ + /* 1: wpa_supplicant initiates scanning and AP selection */ + /* 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters */ +- UCHAR WpaSupplicantUP; +- UCHAR WpaSupplicantScanCount; ++ u8 WpaSupplicantUP; ++ u8 WpaSupplicantScanCount; + BOOLEAN bRSN_IE_FromWpaSupplicant; + +- CHAR dev_name[16]; +- USHORT OriDevType; ++ char dev_name[16]; ++ u16 OriDevType; + + BOOLEAN bTGnWifiTest; + BOOLEAN bScanReqIsFromWebUI; +@@ -1497,7 +1497,7 @@ typedef struct _STA_ADMIN_CONFIG { + BOOLEAN bAutoTxRateSwitch; + + #ifdef RTMP_MAC_PCI +- UCHAR BBPR3; ++ u8 BBPR3; + /* PS Control has 2 meanings for advanced power save function. */ + /* 1. EnablePSinIdle : When no connection, always radio off except need to do site survey. */ + /* 2. EnableNewPS : will save more current in sleep or radio off mode. */ +@@ -1505,7 +1505,7 @@ typedef struct _STA_ADMIN_CONFIG { + #endif /* RTMP_MAC_PCI // */ + + BOOLEAN bAutoConnectByBssid; +- ULONG BeaconLostTime; /* seconds */ ++ unsigned long BeaconLostTime; /* seconds */ + BOOLEAN bForceTxBurst; /* 1: force enble TX PACKET BURST, 0: disable */ + } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; + +@@ -1516,18 +1516,18 @@ typedef struct _STA_ADMIN_CONFIG { + /* Normally, after SCAN or failed roaming attempts, we need to recover back to */ + /* the current active settings. */ + typedef struct _STA_ACTIVE_CONFIG { +- USHORT Aid; +- USHORT AtimWin; /* in kusec; IBSS parameter set element */ +- USHORT CapabilityInfo; +- USHORT CfpMaxDuration; +- USHORT CfpPeriod; ++ u16 Aid; ++ u16 AtimWin; /* in kusec; IBSS parameter set element */ ++ u16 CapabilityInfo; ++ u16 CfpMaxDuration; ++ u16 CfpPeriod; + + /* Copy supported rate from desired AP's beacon. We are trying to match */ + /* AP's supported and extended rate settings. */ +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen; +- UCHAR ExtRateLen; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 SupRateLen; ++ u8 ExtRateLen; + /* Copy supported ht from desired AP's beacon. We are trying to match */ + RT_HT_PHY_INFO SupportedPhyInfo; + RT_HT_CAPABILITY SupportedHtPhy; +@@ -1543,18 +1543,18 @@ typedef struct _MAC_TABLE_ENTRY { + BOOLEAN isCached; + BOOLEAN bIAmBadAtheros; /* Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. */ + +- UCHAR EnqueueEapolStartTimerRunning; /* Enqueue EAPoL-Start for triggering EAP SM */ ++ u8 EnqueueEapolStartTimerRunning; /* Enqueue EAPoL-Start for triggering EAP SM */ + /*jan for wpa */ + /* record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB */ +- UCHAR CMTimerRunning; +- UCHAR apidx; /* MBSS number */ +- UCHAR RSNIE_Len; +- UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; +- UCHAR ANonce[LEN_KEY_DESC_NONCE]; +- UCHAR SNonce[LEN_KEY_DESC_NONCE]; +- UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; +- UCHAR PTK[64]; +- UCHAR ReTryCounter; ++ u8 CMTimerRunning; ++ u8 apidx; /* MBSS number */ ++ u8 RSNIE_Len; ++ u8 RSN_IE[MAX_LEN_OF_RSNIE]; ++ u8 ANonce[LEN_KEY_DESC_NONCE]; ++ u8 SNonce[LEN_KEY_DESC_NONCE]; ++ u8 R_Counter[LEN_KEY_DESC_REPLAY]; ++ u8 PTK[64]; ++ u8 ReTryCounter; + RALINK_TIMER_STRUCT RetryTimer; + RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; /* A timer which enqueue EAPoL-Start for triggering PSK SM */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ +@@ -1562,113 +1562,113 @@ typedef struct _MAC_TABLE_ENTRY { + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; + AP_WPA_STATE WpaState; + GTK_STATE GTKState; +- USHORT PortSecured; ++ u16 PortSecured; + NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ + CIPHER_KEY PairwiseKey; +- PVOID pAd; +- INT PMKID_CacheIdx; +- UCHAR PMKID[LEN_PMKID]; ++ void *pAd; ++ int PMKID_CacheIdx; ++ u8 PMKID[LEN_PMKID]; + +- UCHAR Addr[MAC_ADDR_LEN]; +- UCHAR PsMode; ++ u8 Addr[MAC_ADDR_LEN]; ++ u8 PsMode; + SST Sst; + AUTH_STATE AuthState; /* for SHARED KEY authentication state machine used only */ + BOOLEAN IsReassocSta; /* Indicate whether this is a reassociation procedure */ +- USHORT Aid; +- USHORT CapabilityInfo; +- UCHAR LastRssi; +- ULONG NoDataIdleCount; +- UINT16 StationKeepAliveCount; /* unit: second */ +- ULONG PsQIdleCount; ++ u16 Aid; ++ u16 CapabilityInfo; ++ u8 LastRssi; ++ unsigned long NoDataIdleCount; ++ u16 StationKeepAliveCount; /* unit: second */ ++ unsigned long PsQIdleCount; + QUEUE_HEADER PsQueue; + +- UINT32 StaConnectTime; /* the live time of this station since associated with AP */ ++ u32 StaConnectTime; /* the live time of this station since associated with AP */ + + BOOLEAN bSendBAR; +- USHORT NoBADataCountDown; ++ u16 NoBADataCountDown; + +- UINT32 CachedBuf[16]; /* UINT (4 bytes) for alignment */ +- UINT TxBFCount; /* 3*3 */ +- UINT FIFOCount; +- UINT DebugFIFOCount; +- UINT DebugTxCount; ++ u32 CachedBuf[16]; /* u32 (4 bytes) for alignment */ ++ u32 TxBFCount; /* 3*3 */ ++ u32 FIFOCount; ++ u32 DebugFIFOCount; ++ u32 DebugTxCount; + BOOLEAN bDlsInit; + + /*==================================================== */ + /*WDS entry needs these */ + /* if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab */ +- UINT MatchWDSTabIdx; +- UCHAR MaxSupportedRate; +- UCHAR CurrTxRate; +- UCHAR CurrTxRateIndex; ++ u32 MatchWDSTabIdx; ++ u8 MaxSupportedRate; ++ u8 CurrTxRate; ++ u8 CurrTxRateIndex; + /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ +- USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; +-/* USHORT OneSecTxOkCount; */ +- UINT32 OneSecTxNoRetryOkCount; +- UINT32 OneSecTxRetryOkCount; +- UINT32 OneSecTxFailCount; +- UINT32 ContinueTxFailCnt; +- UINT32 CurrTxRateStableTime; /* # of second in current TX rate */ +- UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ ++ u16 TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; ++/* u16 OneSecTxOkCount; */ ++ u32 OneSecTxNoRetryOkCount; ++ u32 OneSecTxRetryOkCount; ++ u32 OneSecTxFailCount; ++ u32 ContinueTxFailCnt; ++ u32 CurrTxRateStableTime; /* # of second in current TX rate */ ++ u8 TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ + /*==================================================== */ + + BOOLEAN fNoisyEnvironment; + BOOLEAN fLastSecAccordingRSSI; +- UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ +- CHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ +- ULONG LastTxOkCount; +- UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH]; ++ u8 LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ ++ char LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ ++ unsigned long LastTxOkCount; ++ u8 PER[MAX_STEP_OF_TX_RATE_SWITCH]; + + /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ + /* BOOLEAN control, either ON or OFF. These flags should always be accessed via */ + /* CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. */ + /* see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED */ +- ULONG ClientStatusFlags; ++ unsigned long ClientStatusFlags; + + HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ + + /* HT EWC MIMO-N used parameters */ +- USHORT RXBAbitmap; /* fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format */ +- USHORT TXBAbitmap; /* This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI */ +- USHORT TXAutoBAbitmap; +- USHORT BADeclineBitmap; +- USHORT BARecWcidArray[NUM_OF_TID]; /* The mapping wcid of recipient session. if RXBAbitmap bit is masked */ +- USHORT BAOriWcidArray[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ +- USHORT BAOriSequence[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ ++ u16 RXBAbitmap; /* fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format */ ++ u16 TXBAbitmap; /* This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI */ ++ u16 TXAutoBAbitmap; ++ u16 BADeclineBitmap; ++ u16 BARecWcidArray[NUM_OF_TID]; /* The mapping wcid of recipient session. if RXBAbitmap bit is masked */ ++ u16 BAOriWcidArray[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ ++ u16 BAOriSequence[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ + + /* 802.11n features. */ +- UCHAR MpduDensity; +- UCHAR MaxRAmpduFactor; +- UCHAR AMsduSize; +- UCHAR MmpsMode; /* MIMO power save more. */ ++ u8 MpduDensity; ++ u8 MaxRAmpduFactor; ++ u8 AMsduSize; ++ u8 MmpsMode; /* MIMO power save more. */ + + HT_CAPABILITY_IE HTCapability; + + BOOLEAN bAutoTxRateSwitch; + +- UCHAR RateLen; ++ u8 RateLen; + struct _MAC_TABLE_ENTRY *pNext; +- USHORT TxSeq[NUM_OF_TID]; +- USHORT NonQosDataSeq; ++ u16 TxSeq[NUM_OF_TID]; ++ u16 NonQosDataSeq; + + RSSI_SAMPLE RssiSample; + +- UINT32 TXMCSExpected[16]; +- UINT32 TXMCSSuccessful[16]; +- UINT32 TXMCSFailed[16]; +- UINT32 TXMCSAutoFallBack[16][16]; ++ u32 TXMCSExpected[16]; ++ u32 TXMCSSuccessful[16]; ++ u32 TXMCSFailed[16]; ++ u32 TXMCSAutoFallBack[16][16]; + +- ULONG LastBeaconRxTime; ++ unsigned long LastBeaconRxTime; + +- ULONG AssocDeadLine; ++ unsigned long AssocDeadLine; + } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; + + typedef struct _MAC_TABLE { +- USHORT Size; ++ u16 Size; + MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE]; + MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; + QUEUE_HEADER McastPsQueue; +- ULONG PsQIdleCount; ++ unsigned long PsQIdleCount; + BOOLEAN fAnyStationInPsm; + BOOLEAN fAnyStationBadAtheros; /* Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. */ + BOOLEAN fAnyTxOPForceDisable; /* Check if it is necessary to disable BE TxOP */ +@@ -1688,19 +1688,19 @@ struct wificonf { + }; + + typedef struct _RTMP_DEV_INFO_ { +- UCHAR chipName[16]; ++ u8 chipName[16]; + RTMP_INF_TYPE infType; + } RTMP_DEV_INFO; + + struct _RTMP_CHIP_OP_ { + /* Calibration access related callback functions */ + int (*eeinit) (RTMP_ADAPTER * pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ +- int (*eeread) (RTMP_ADAPTER * pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */ ++ int (*eeread) (RTMP_ADAPTER * pAd, u16 offset, u16 *pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, u16 *pValue); */ + + /* MCU related callback functions */ + int (*loadFirmware) (RTMP_ADAPTER * pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ + int (*eraseFirmware) (RTMP_ADAPTER * pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ +- int (*sendCommandToMcu) (RTMP_ADAPTER * pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */ ++ int (*sendCommandToMcu) (RTMP_ADAPTER * pAd, u8 cmd, u8 token, u8 arg0, u8 arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, u8 cmd, u8 token, u8 arg0, u8 arg1); */ + + /* RF access related callback functions */ + REG_PAIR *pRFRegTable; +@@ -1715,40 +1715,40 @@ struct _RTMP_CHIP_OP_ { + /* The miniport adapter structure */ + /* */ + struct _RTMP_ADAPTER { +- PVOID OS_Cookie; /* save specific structure relative to OS */ ++ void *OS_Cookie; /* save specific structure relative to OS */ + PNET_DEV net_dev; +- ULONG VirtualIfCnt; ++ unsigned long VirtualIfCnt; + + RTMP_CHIP_OP chipOps; +- USHORT ThisTbttNumToNextWakeUp; ++ u16 ThisTbttNumToNextWakeUp; + + #ifdef RTMP_MAC_PCI + /*****************************************************************************************/ + /* PCI related parameters */ + /*****************************************************************************************/ +- PUCHAR CSRBaseAddress; /* PCI MMIO Base Address, all access will use */ ++ u8 *CSRBaseAddress; /* PCI MMIO Base Address, all access will use */ + unsigned int irq_num; + +- USHORT LnkCtrlBitMask; +- USHORT RLnkCtrlConfiguration; +- USHORT RLnkCtrlOffset; +- USHORT HostLnkCtrlConfiguration; +- USHORT HostLnkCtrlOffset; +- USHORT PCIePowerSaveLevel; +- ULONG Rt3xxHostLinkCtrl; /* USed for 3090F chip */ +- ULONG Rt3xxRalinkLinkCtrl; /* USed for 3090F chip */ +- USHORT DeviceID; /* Read from PCI config */ +- ULONG AccessBBPFailCount; ++ u16 LnkCtrlBitMask; ++ u16 RLnkCtrlConfiguration; ++ u16 RLnkCtrlOffset; ++ u16 HostLnkCtrlConfiguration; ++ u16 HostLnkCtrlOffset; ++ u16 PCIePowerSaveLevel; ++ unsigned long Rt3xxHostLinkCtrl; /* USed for 3090F chip */ ++ unsigned long Rt3xxRalinkLinkCtrl; /* USed for 3090F chip */ ++ u16 DeviceID; /* Read from PCI config */ ++ unsigned long AccessBBPFailCount; + BOOLEAN bPCIclkOff; /* flag that indicate if the PICE power status in Configuration SPace.. */ + BOOLEAN bPCIclkOffDisableTx; /* */ + + BOOLEAN brt30xxBanMcuCmd; /*when = 0xff means all commands are ok to set . */ + BOOLEAN b3090ESpecialChip; /*3090E special chip that write EEPROM 0x24=0x9280. */ +- ULONG CheckDmaBusyCount; /* Check Interrupt Status Register Count. */ ++ unsigned long CheckDmaBusyCount; /* Check Interrupt Status Register Count. */ + +- UINT int_enable_reg; +- UINT int_disable_mask; +- UINT int_pending; ++ u32 int_enable_reg; ++ u32 int_disable_mask; ++ u32 int_pending; + + RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; /* Shared memory of all 1st pre-allocated TxBuf associated with each TXD */ + RTMP_DMABUF RxDescRing; /* Shared memory for RX descriptors */ +@@ -1757,23 +1757,23 @@ struct _RTMP_ADAPTER { + #endif /* RTMP_MAC_PCI // */ + + NDIS_SPIN_LOCK irq_lock; +- UCHAR irq_disabled; ++ u8 irq_disabled; + + #ifdef RTMP_MAC_USB + /*****************************************************************************************/ + /* USB related parameters */ + /*****************************************************************************************/ + struct usb_config_descriptor *config; +- UINT BulkInEpAddr; /* bulk-in endpoint address */ +- UINT BulkOutEpAddr[6]; /* bulk-out endpoint address */ ++ u32 BulkInEpAddr; /* bulk-in endpoint address */ ++ u32 BulkOutEpAddr[6]; /* bulk-out endpoint address */ + +- UINT NumberOfPipes; +- USHORT BulkOutMaxPacketSize; +- USHORT BulkInMaxPacketSize; ++ u32 NumberOfPipes; ++ u16 BulkOutMaxPacketSize; ++ u16 BulkInMaxPacketSize; + + /*======Control Flags */ +- LONG PendingIoCount; +- ULONG BulkFlags; ++ long PendingIoCount; ++ unsigned long BulkFlags; + BOOLEAN bUsbTxBulkAggre; /* Flags for bulk out data priority */ + + /*======Cmd Thread */ +@@ -1783,7 +1783,7 @@ struct _RTMP_ADAPTER { + + /*======Semaphores (event) */ + RTMP_OS_SEM UsbVendorReq_semaphore; +- PVOID UsbVendorReqBuf; ++ void *UsbVendorReqBuf; + wait_queue_head_t *wait; + #endif /* RTMP_MAC_USB // */ + +@@ -1823,12 +1823,12 @@ struct _RTMP_ADAPTER { + NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ + + /* 4 sets of Bulk Out index and pending flag */ +- UCHAR NextBulkOutIndex[4]; /* only used for 4 EDCA bulkout pipe */ ++ u8 NextBulkOutIndex[4]; /* only used for 4 EDCA bulkout pipe */ + + BOOLEAN BulkOutPending[6]; /* used for total 6 bulkout pipe */ +- UCHAR bulkResetPipeid; ++ u8 bulkResetPipeid; + BOOLEAN MgmtBulkPending; +- ULONG bulkResetReq[6]; ++ unsigned long bulkResetReq[6]; + #endif /* RTMP_MAC_USB // */ + + /* resource for software backlog queues */ +@@ -1853,41 +1853,41 @@ struct _RTMP_ADAPTER { + #ifdef RTMP_MAC_USB + RX_CONTEXT RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ + NDIS_SPIN_LOCK BulkInLock; /* BulkIn spinlock for 4 ACs */ +- UCHAR PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ +- UCHAR NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ +- UCHAR NextRxBulkInReadIndex; /* Indicate the current RxContext Index which driver can read & process it. */ +- ULONG NextRxBulkInPosition; /* Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. */ +- ULONG TransferBufferLength; /* current length of the packet buffer */ +- ULONG ReadPosition; /* current read position in a packet buffer */ ++ u8 PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ ++ u8 NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ ++ u8 NextRxBulkInReadIndex; /* Indicate the current RxContext Index which driver can read & process it. */ ++ unsigned long NextRxBulkInPosition; /* Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. */ ++ unsigned long TransferBufferLength; /* current length of the packet buffer */ ++ unsigned long ReadPosition; /* current read position in a packet buffer */ + #endif /* RTMP_MAC_USB // */ + + /*****************************************************************************************/ + /* ASIC related parameters */ + /*****************************************************************************************/ +- UINT32 MACVersion; /* MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. */ ++ u32 MACVersion; /* MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. */ + + /* --------------------------- */ + /* E2PROM */ + /* --------------------------- */ +- ULONG EepromVersion; /* byte 0: version, byte 1: revision, byte 2~3: unused */ +- ULONG FirmwareVersion; /* byte 0: Minor version, byte 1: Major version, otherwise unused. */ +- USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; +- UCHAR EEPROMAddressNum; /* 93c46=6 93c66=8 */ ++ unsigned long EepromVersion; /* byte 0: version, byte 1: revision, byte 2~3: unused */ ++ unsigned long FirmwareVersion; /* byte 0: Minor version, byte 1: Major version, otherwise unused. */ ++ u16 EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; ++ u8 EEPROMAddressNum; /* 93c46=6 93c66=8 */ + BOOLEAN EepromAccess; +- UCHAR EFuseTag; ++ u8 EFuseTag; + + /* --------------------------- */ + /* BBP Control */ + /* --------------------------- */ +- UCHAR BbpWriteLatch[140]; /* record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID */ +- CHAR BbpRssiToDbmDelta; /* change from UCHAR to CHAR for high power */ ++ u8 BbpWriteLatch[140]; /* record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID */ ++ char BbpRssiToDbmDelta; /* change from u8 to char for high power */ + BBP_R66_TUNING BbpTuning; + + /* ---------------------------- */ + /* RFIC control */ + /* ---------------------------- */ +- UCHAR RfIcType; /* RFIC_xxx */ +- ULONG RfFreqOffset; /* Frequency offset for channel switching */ ++ u8 RfIcType; /* RFIC_xxx */ ++ unsigned long RfFreqOffset; /* Frequency offset for channel switching */ + RTMP_RF_REGS LatchRfRegs; /* latch th latest RF programming value since RF IC doesn't support READ */ + + EEPROM_ANTENNA_STRUC Antenna; /* Since ANtenna definition is different for a & g. We need to save it for future reference. */ +@@ -1897,73 +1897,73 @@ struct _RTMP_ADAPTER { + /* RX Antenna = DIVERSITY ON */ + SOFT_RX_ANT_DIVERSITY RxAnt; + +- UCHAR RFProgSeq; ++ u8 RFProgSeq; + CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; /* Store Tx power value for all channels. */ + CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; /* list all supported channels for site survey */ + CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; /* 802.11j channel and bw */ + CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; /* list all supported channels for site survey */ + +- UCHAR ChannelListNum; /* number of channel in ChannelList[] */ +- UCHAR Bbp94; ++ u8 ChannelListNum; /* number of channel in ChannelList[] */ ++ u8 Bbp94; + BOOLEAN BbpForCCK; +- ULONG Tx20MPwrCfgABand[5]; +- ULONG Tx20MPwrCfgGBand[5]; +- ULONG Tx40MPwrCfgABand[5]; +- ULONG Tx40MPwrCfgGBand[5]; ++ unsigned long Tx20MPwrCfgABand[5]; ++ unsigned long Tx20MPwrCfgGBand[5]; ++ unsigned long Tx40MPwrCfgABand[5]; ++ unsigned long Tx40MPwrCfgGBand[5]; + + BOOLEAN bAutoTxAgcA; /* Enable driver auto Tx Agc control */ +- UCHAR TssiRefA; /* Store Tssi reference value as 25 temperature. */ +- UCHAR TssiPlusBoundaryA[5]; /* Tssi boundary for increase Tx power to compensate. */ +- UCHAR TssiMinusBoundaryA[5]; /* Tssi boundary for decrease Tx power to compensate. */ +- UCHAR TxAgcStepA; /* Store Tx TSSI delta increment / decrement value */ +- CHAR TxAgcCompensateA; /* Store the compensation (TxAgcStep * (idx-1)) */ ++ u8 TssiRefA; /* Store Tssi reference value as 25 temperature. */ ++ u8 TssiPlusBoundaryA[5]; /* Tssi boundary for increase Tx power to compensate. */ ++ u8 TssiMinusBoundaryA[5]; /* Tssi boundary for decrease Tx power to compensate. */ ++ u8 TxAgcStepA; /* Store Tx TSSI delta increment / decrement value */ ++ char TxAgcCompensateA; /* Store the compensation (TxAgcStep * (idx-1)) */ + + BOOLEAN bAutoTxAgcG; /* Enable driver auto Tx Agc control */ +- UCHAR TssiRefG; /* Store Tssi reference value as 25 temperature. */ +- UCHAR TssiPlusBoundaryG[5]; /* Tssi boundary for increase Tx power to compensate. */ +- UCHAR TssiMinusBoundaryG[5]; /* Tssi boundary for decrease Tx power to compensate. */ +- UCHAR TxAgcStepG; /* Store Tx TSSI delta increment / decrement value */ +- CHAR TxAgcCompensateG; /* Store the compensation (TxAgcStep * (idx-1)) */ +- +- CHAR BGRssiOffset0; /* Store B/G RSSI#0 Offset value on EEPROM 0x46h */ +- CHAR BGRssiOffset1; /* Store B/G RSSI#1 Offset value */ +- CHAR BGRssiOffset2; /* Store B/G RSSI#2 Offset value */ +- +- CHAR ARssiOffset0; /* Store A RSSI#0 Offset value on EEPROM 0x4Ah */ +- CHAR ARssiOffset1; /* Store A RSSI#1 Offset value */ +- CHAR ARssiOffset2; /* Store A RSSI#2 Offset value */ +- +- CHAR BLNAGain; /* Store B/G external LNA#0 value on EEPROM 0x44h */ +- CHAR ALNAGain0; /* Store A external LNA#0 value for ch36~64 */ +- CHAR ALNAGain1; /* Store A external LNA#1 value for ch100~128 */ +- CHAR ALNAGain2; /* Store A external LNA#2 value for ch132~165 */ ++ u8 TssiRefG; /* Store Tssi reference value as 25 temperature. */ ++ u8 TssiPlusBoundaryG[5]; /* Tssi boundary for increase Tx power to compensate. */ ++ u8 TssiMinusBoundaryG[5]; /* Tssi boundary for decrease Tx power to compensate. */ ++ u8 TxAgcStepG; /* Store Tx TSSI delta increment / decrement value */ ++ char TxAgcCompensateG; /* Store the compensation (TxAgcStep * (idx-1)) */ ++ ++ char BGRssiOffset0; /* Store B/G RSSI#0 Offset value on EEPROM 0x46h */ ++ char BGRssiOffset1; /* Store B/G RSSI#1 Offset value */ ++ char BGRssiOffset2; /* Store B/G RSSI#2 Offset value */ ++ ++ char ARssiOffset0; /* Store A RSSI#0 Offset value on EEPROM 0x4Ah */ ++ char ARssiOffset1; /* Store A RSSI#1 Offset value */ ++ char ARssiOffset2; /* Store A RSSI#2 Offset value */ ++ ++ char BLNAGain; /* Store B/G external LNA#0 value on EEPROM 0x44h */ ++ char ALNAGain0; /* Store A external LNA#0 value for ch36~64 */ ++ char ALNAGain1; /* Store A external LNA#1 value for ch100~128 */ ++ char ALNAGain2; /* Store A external LNA#2 value for ch132~165 */ + #ifdef RT30xx + /* for 3572 */ +- UCHAR Bbp25; +- UCHAR Bbp26; ++ u8 Bbp25; ++ u8 Bbp26; + +- UCHAR TxMixerGain24G; /* Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G */ +- UCHAR TxMixerGain5G; ++ u8 TxMixerGain24G; /* Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G */ ++ u8 TxMixerGain5G; + #endif /* RT30xx // */ + /* ---------------------------- */ + /* LED control */ + /* ---------------------------- */ + MCU_LEDCS_STRUC LedCntl; +- USHORT Led1; /* read from EEPROM 0x3c */ +- USHORT Led2; /* EEPROM 0x3e */ +- USHORT Led3; /* EEPROM 0x40 */ +- UCHAR LedIndicatorStrength; +- UCHAR RssiSingalstrengthOffet; ++ u16 Led1; /* read from EEPROM 0x3c */ ++ u16 Led2; /* EEPROM 0x3e */ ++ u16 Led3; /* EEPROM 0x40 */ ++ u8 LedIndicatorStrength; ++ u8 RssiSingalstrengthOffet; + BOOLEAN bLedOnScanning; +- UCHAR LedStatus; ++ u8 LedStatus; + + /*****************************************************************************************/ + /* 802.11 related parameters */ + /*****************************************************************************************/ + /* outgoing BEACON frame buffer and corresponding TXD */ + TXWI_STRUC BeaconTxWI; +- PUCHAR BeaconBuf; +- USHORT BeaconOffset[HW_BEACON_MAX_COUNT]; ++ u8 *BeaconBuf; ++ u16 BeaconOffset[HW_BEACON_MAX_COUNT]; + + /* pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. */ + PSPOLL_FRAME PsPollFrame; +@@ -1985,21 +1985,21 @@ struct _RTMP_ADAPTER { + /* ----------------------------------------------- */ + STA_ADMIN_CONFIG StaCfg; /* user desired settings */ + STA_ACTIVE_CONFIG StaActive; /* valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) */ +- CHAR nickname[IW_ESSID_MAX_SIZE + 1]; /* nickname, only used in the iwconfig i/f */ +- NDIS_MEDIA_STATE PreMediaState; ++ char nickname[IW_ESSID_MAX_SIZE + 1]; /* nickname, only used in the iwconfig i/f */ ++ int PreMediaState; + + /*=======Common=========== */ + /* OP mode: either AP or STA */ +- UCHAR OpMode; /* OPMODE_STA, OPMODE_AP */ ++ u8 OpMode; /* OPMODE_STA, OPMODE_AP */ + +- NDIS_MEDIA_STATE IndicateMediaState; /* Base on Indication state, default is NdisMediaStateDisConnected */ ++ int IndicateMediaState; /* Base on Indication state, default is NdisMediaStateDisConnected */ + + /* MAT related parameters */ + + /* configuration: read from Registry & E2PROM */ + BOOLEAN bLocalAdminMAC; /* Use user changed MAC */ +- UCHAR PermanentAddress[MAC_ADDR_LEN]; /* Factory default MAC address */ +- UCHAR CurrentAddress[MAC_ADDR_LEN]; /* User changed MAC address */ ++ u8 PermanentAddress[MAC_ADDR_LEN]; /* Factory default MAC address */ ++ u8 CurrentAddress[MAC_ADDR_LEN]; /* User changed MAC address */ + + /* ------------------------------------------------------ */ + /* common configuration to both OPMODE_STA and OPMODE_AP */ +@@ -2034,27 +2034,27 @@ struct _RTMP_ADAPTER { + PRIVATE_STRUC PrivateInfo; /* Private information & counters */ + + /* flags, see fRTMP_ADAPTER_xxx flags */ +- ULONG Flags; /* Represent current device status */ +- ULONG PSFlags; /* Power Save operation flag. */ ++ unsigned long Flags; /* Represent current device status */ ++ unsigned long PSFlags; /* Power Save operation flag. */ + + /* current TX sequence # */ +- USHORT Sequence; ++ u16 Sequence; + + /* Control disconnect / connect event generation */ + /*+++Didn't used anymore */ +- ULONG LinkDownTime; ++ unsigned long LinkDownTime; + /*--- */ +- ULONG LastRxRate; +- ULONG LastTxRate; ++ unsigned long LastRxRate; ++ unsigned long LastTxRate; + /*+++Used only for Station */ + BOOLEAN bConfigChanged; /* Config Change flag for the same SSID setting */ + /*--- */ + +- ULONG ExtraInfo; /* Extra information for displaying status */ +- ULONG SystemErrorBitmap; /* b0: E2PROM version error */ ++ unsigned long ExtraInfo; /* Extra information for displaying status */ ++ unsigned long SystemErrorBitmap; /* b0: E2PROM version error */ + + /*+++Didn't used anymore */ +- ULONG MacIcVersion; /* MAC/BBP serial interface issue solved after ver.D */ ++ unsigned long MacIcVersion; /* MAC/BBP serial interface issue solved after ver.D */ + /*--- */ + + /* --------------------------- */ +@@ -2068,33 +2068,33 @@ struct _RTMP_ADAPTER { + /* Statistic related parameters */ + /*****************************************************************************************/ + #ifdef RTMP_MAC_USB +- ULONG BulkOutDataOneSecCount; +- ULONG BulkInDataOneSecCount; +- ULONG BulkLastOneSecCount; /* BulkOutDataOneSecCount + BulkInDataOneSecCount */ +- ULONG watchDogRxCnt; +- ULONG watchDogRxOverFlowCnt; +- ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; +- INT TransferedLength[NUM_OF_TX_RING]; ++ unsigned long BulkOutDataOneSecCount; ++ unsigned long BulkInDataOneSecCount; ++ unsigned long BulkLastOneSecCount; /* BulkOutDataOneSecCount + BulkInDataOneSecCount */ ++ unsigned long watchDogRxCnt; ++ unsigned long watchDogRxOverFlowCnt; ++ unsigned long watchDogTxPendingCnt[NUM_OF_TX_RING]; ++ int TransferedLength[NUM_OF_TX_RING]; + #endif /* RTMP_MAC_USB // */ + + BOOLEAN bUpdateBcnCntDone; +- ULONG watchDogMacDeadlock; /* prevent MAC/BBP into deadlock condition */ ++ unsigned long watchDogMacDeadlock; /* prevent MAC/BBP into deadlock condition */ + /* ---------------------------- */ + /* DEBUG paramerts */ + /* ---------------------------- */ +- /*ULONG DebugSetting[4]; */ ++ /*unsigned long DebugSetting[4]; */ + BOOLEAN bBanAllBaSetup; + BOOLEAN bPromiscuous; + + /* ---------------------------- */ + /* rt2860c emulation-use Parameters */ + /* ---------------------------- */ +- /*ULONG rtsaccu[30]; */ +- /*ULONG ctsaccu[30]; */ +- /*ULONG cfendaccu[30]; */ +- /*ULONG bacontent[16]; */ +- /*ULONG rxint[RX_RING_SIZE+1]; */ +- /*UCHAR rcvba[60]; */ ++ /*unsigned long rtsaccu[30]; */ ++ /*unsigned long ctsaccu[30]; */ ++ /*unsigned long cfendaccu[30]; */ ++ /*unsigned long bacontent[16]; */ ++ /*unsigned long rxint[RX_RING_SIZE+1]; */ ++ /*u8 rcvba[60]; */ + BOOLEAN bLinkAdapt; + BOOLEAN bForcePrintTX; + BOOLEAN bForcePrintRX; +@@ -2103,20 +2103,20 @@ struct _RTMP_ADAPTER { + BOOLEAN bProtectionTest; + BOOLEAN bBroadComHT; + /*+++Following add from RT2870 USB. */ +- ULONG BulkOutReq; +- ULONG BulkOutComplete; +- ULONG BulkOutCompleteOther; +- ULONG BulkOutCompleteCancel; /* seems not use now? */ +- ULONG BulkInReq; +- ULONG BulkInComplete; +- ULONG BulkInCompleteFail; ++ unsigned long BulkOutReq; ++ unsigned long BulkOutComplete; ++ unsigned long BulkOutCompleteOther; ++ unsigned long BulkOutCompleteCancel; /* seems not use now? */ ++ unsigned long BulkInReq; ++ unsigned long BulkInComplete; ++ unsigned long BulkInCompleteFail; + /*--- */ + + struct wificonf WIFItestbed; + + struct reordering_mpdu_pool mpdu_blk_pool; + +- ULONG OneSecondnonBEpackets; /* record non BE packets per second */ ++ unsigned long OneSecondnonBEpackets; /* record non BE packets per second */ + + #ifdef LINUX + struct iw_statistics iw_stats; +@@ -2124,25 +2124,25 @@ struct _RTMP_ADAPTER { + struct net_device_stats stats; + #endif /* LINUX // */ + +- ULONG TbttTickCount; ++ unsigned long TbttTickCount; + #ifdef PCI_MSI_SUPPORT + BOOLEAN HaveMsi; + #endif /* PCI_MSI_SUPPORT // */ + +- UCHAR is_on; ++ u8 is_on; + + #define TIME_BASE (1000000/OS_HZ) + #define TIME_ONE_SECOND (1000000/TIME_BASE) +- UCHAR flg_be_adjust; +- ULONG be_adjust_last_time; ++ u8 flg_be_adjust; ++ unsigned long be_adjust_last_time; + +- UINT8 FlgCtsEnabled; +- UINT8 PM_FlgSuspend; ++ u8 FlgCtsEnabled; ++ u8 PM_FlgSuspend; + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + BOOLEAN bUseEfuse; +- UCHAR EEPROMImage[1024]; ++ u8 EEPROMImage[1024]; + #endif /* RTMP_EFUSE_SUPPORT // */ + #endif /* RT30xx // */ + }; +@@ -2171,10 +2171,10 @@ typedef struct _RX_BLK_ { + PRXWI_STRUC pRxWI; + PHEADER_802_11 pHeader; + PNDIS_PACKET pRxPacket; +- UCHAR *pData; +- USHORT DataSize; +- USHORT Flags; +- UCHAR UserPriority; /* for calculate TKIP MIC using */ ++ u8 *pData; ++ u16 DataSize; ++ u16 Flags; ++ u8 UserPriority; /* for calculate TKIP MIC using */ + } RX_BLK; + + #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) +@@ -2212,11 +2212,11 @@ typedef struct _RX_BLK_ { + + /* Currently the sizeof(TX_BLK) is 148 bytes. */ + typedef struct _TX_BLK_ { +- UCHAR QueIdx; +- UCHAR TxFrameType; /* Indicate the Transmission type of the all frames in one batch */ +- UCHAR TotalFrameNum; /* Total frame number want to send-out in one batch */ +- USHORT TotalFragNum; /* Total frame fragments required in one batch */ +- USHORT TotalFrameLen; /* Total length of all frames want to send-out in one batch */ ++ u8 QueIdx; ++ u8 TxFrameType; /* Indicate the Transmission type of the all frames in one batch */ ++ u8 TotalFrameNum; /* Total frame number want to send-out in one batch */ ++ u16 TotalFragNum; /* Total frame fragments required in one batch */ ++ u16 TotalFrameLen; /* Total length of all frames want to send-out in one batch */ + + QUEUE_HEADER TxPacketList; + MAC_TABLE_ENTRY *pMacEntry; /* NULL: packet with 802.11 RA field is multicast/broadcast address */ +@@ -2224,29 +2224,29 @@ typedef struct _TX_BLK_ { + + /* Following structure used for the characteristics of a specific packet. */ + PNDIS_PACKET pPacket; +- PUCHAR pSrcBufHeader; /* Reference to the head of sk_buff->data */ +- PUCHAR pSrcBufData; /* Reference to the sk_buff->data, will changed depends on hanlding progresss */ +- UINT SrcBufLen; /* Length of packet payload which not including Layer 2 header */ +- PUCHAR pExtraLlcSnapEncap; /* NULL means no extra LLC/SNAP is required */ +- UCHAR HeaderBuf[128]; /* TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP */ ++ u8 *pSrcBufHeader; /* Reference to the head of sk_buff->data */ ++ u8 *pSrcBufData; /* Reference to the sk_buff->data, will changed depends on hanlding progresss */ ++ u32 SrcBufLen; /* Length of packet payload which not including Layer 2 header */ ++ u8 *pExtraLlcSnapEncap; /* NULL means no extra LLC/SNAP is required */ ++ u8 HeaderBuf[128]; /* TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP */ + /*RT2870 2.1.0.0 uses only 80 bytes */ + /*RT3070 2.1.1.0 uses only 96 bytes */ + /*RT3090 2.1.0.0 uses only 96 bytes */ +- UCHAR MpduHeaderLen; /* 802.11 header length NOT including the padding */ +- UCHAR HdrPadLen; /* recording Header Padding Length; */ +- UCHAR apidx; /* The interface associated to this packet */ +- UCHAR Wcid; /* The MAC entry associated to this packet */ +- UCHAR UserPriority; /* priority class of packet */ +- UCHAR FrameGap; /* what kind of IFS this packet use */ +- UCHAR MpduReqNum; /* number of fragments of this frame */ +- UCHAR TxRate; /* TODO: Obsoleted? Should change to MCS? */ +- UCHAR CipherAlg; /* cipher alogrithm */ ++ u8 MpduHeaderLen; /* 802.11 header length NOT including the padding */ ++ u8 HdrPadLen; /* recording Header Padding Length; */ ++ u8 apidx; /* The interface associated to this packet */ ++ u8 Wcid; /* The MAC entry associated to this packet */ ++ u8 UserPriority; /* priority class of packet */ ++ u8 FrameGap; /* what kind of IFS this packet use */ ++ u8 MpduReqNum; /* number of fragments of this frame */ ++ u8 TxRate; /* TODO: Obsoleted? Should change to MCS? */ ++ u8 CipherAlg; /* cipher alogrithm */ + PCIPHER_KEY pKey; + +- USHORT Flags; /*See following definitions for detail. */ ++ u16 Flags; /*See following definitions for detail. */ + + /*YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. */ +- ULONG Priv; /* Hardware specific value saved in here. */ ++ unsigned long Priv; /* Hardware specific value saved in here. */ + } TX_BLK, *PTX_BLK; + + #define fTX_bRtsRequired 0x0001 /* Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. */ +@@ -2266,9 +2266,9 @@ typedef struct _TX_BLK_ { + /*************************************************************************** + * Other static inline function definitions + **************************************************************************/ +-static inline VOID ConvertMulticastIP2MAC(IN PUCHAR pIpAddr, +- IN PUCHAR * ppMacAddr, +- IN UINT16 ProtoType) ++static inline void ConvertMulticastIP2MAC(u8 *pIpAddr, ++ u8 ** ppMacAddr, ++ u16 ProtoType) + { + if (pIpAddr == NULL) + return; +@@ -2308,141 +2308,141 @@ char *GetBW(int BW); + /* */ + /* Private routines in rtmp_init.c */ + /* */ +-NDIS_STATUS RTMPAllocAdapterBlock(IN PVOID handle, ++int RTMPAllocAdapterBlock(void *handle, + OUT PRTMP_ADAPTER * ppAdapter); + +-NDIS_STATUS RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd); ++int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd); + +-VOID RTMPFreeAdapter(IN PRTMP_ADAPTER pAd); ++void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++int NICReadRegParameters(IN PRTMP_ADAPTER pAd, + IN NDIS_HANDLE WrapperConfigurationContext); + + #ifdef RTMP_RF_RW_SUPPORT +-VOID NICInitRFRegisters(IN PRTMP_ADAPTER pAd); ++void NICInitRFRegisters(IN PRTMP_ADAPTER pAd); + +-VOID RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd); ++void RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd); + +-NDIS_STATUS RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, IN UCHAR value); ++int RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++ u8 regID, u8 value); + +-NDIS_STATUS RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR regID, IN PUCHAR pValue); ++int RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++ u8 regID, u8 *pValue); + #endif /* RTMP_RF_RW_SUPPORT // */ + +-VOID NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, IN PUCHAR mac_addr); ++void NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, u8 *mac_addr); + +-VOID NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd); ++void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); ++int NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); + +-NDIS_STATUS NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); ++int NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); + +-VOID NICIssueReset(IN PRTMP_ADAPTER pAd); ++void NICIssueReset(IN PRTMP_ADAPTER pAd); + +-VOID RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, IN UCHAR RingType); ++void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType); + +-VOID UserCfgInit(IN PRTMP_ADAPTER pAd); ++void UserCfgInit(IN PRTMP_ADAPTER pAd); + +-VOID NICResetFromError(IN PRTMP_ADAPTER pAd); ++void NICResetFromError(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICLoadFirmware(IN PRTMP_ADAPTER pAd); ++int NICLoadFirmware(IN PRTMP_ADAPTER pAd); + +-VOID NICEraseFirmware(IN PRTMP_ADAPTER pAd); ++void NICEraseFirmware(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd); ++int NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd); + + BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd); + +-VOID NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd); ++void NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd); + +-VOID NICUpdateRawCounters(IN PRTMP_ADAPTER pAd); ++void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd); + +-VOID RTMPZeroMemory(IN PVOID pSrc, IN ULONG Length); ++void RTMPZeroMemory(void *pSrc, unsigned long Length); + +-ULONG RTMPCompareMemory(IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length); ++unsigned long RTMPCompareMemory(void *pSrc1, void *pSrc2, unsigned long Length); + +-VOID RTMPMoveMemory(OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length); ++void RTMPMoveMemory(void *pDest, void *pSrc, unsigned long Length); + +-VOID AtoH(PSTRING src, PUCHAR dest, int destlen); ++void AtoH(char *src, u8 *dest, int destlen); + +-UCHAR BtoH(char ch); ++u8 BtoH(char ch); + +-VOID RTMPPatchMacBbpBug(IN PRTMP_ADAPTER pAd); ++void RTMPPatchMacBbpBug(IN PRTMP_ADAPTER pAd); + +-VOID RTMPInitTimer(IN PRTMP_ADAPTER pAd, ++void RTMPInitTimer(IN PRTMP_ADAPTER pAd, + IN PRALINK_TIMER_STRUCT pTimer, +- IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat); ++ void *pTimerFunc, void *pData, IN BOOLEAN Repeat); + +-VOID RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); ++void RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value); + +-VOID RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); ++void RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value); + +-VOID RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled); ++void RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled); + +-VOID RTMPSetLED(IN PRTMP_ADAPTER pAd, IN UCHAR Status); ++void RTMPSetLED(IN PRTMP_ADAPTER pAd, u8 Status); + +-VOID RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm); ++void RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm); + +-VOID RTMPEnableRxTx(IN PRTMP_ADAPTER pAd); ++void RTMPEnableRxTx(IN PRTMP_ADAPTER pAd); + + /* */ + /* prototype in action.c */ + /* */ +-VOID ActionStateMachineInit(IN PRTMP_ADAPTER pAd, ++void ActionStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, + OUT STATE_MACHINE_FUNC Trans[]); + +-VOID MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID SendPSMPAction(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp); ++void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp); + +-VOID PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID RECBATimerTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void RECBATimerTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID ORIBATimerTimeout(IN PRTMP_ADAPTER pAd); ++void ORIBATimerTimeout(IN PRTMP_ADAPTER pAd); + +-VOID SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); + +-VOID ActHeaderInit(IN PRTMP_ADAPTER pAd, ++void ActHeaderInit(IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +- IN PUCHAR Addr1, IN PUCHAR Addr2, IN PUCHAR Addr3); ++ u8 *Addr1, u8 *Addr2, u8 *Addr3); + +-VOID BarHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, IN PUCHAR pDA, IN PUCHAR pSA); ++void BarHeaderInit(IN PRTMP_ADAPTER pAd, ++ IN OUT PFRAME_BAR pCntlBar, u8 *pDA, u8 *pSA); + +-VOID InsertActField(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, IN UINT8 Category, IN UINT8 ActCode); ++void InsertActField(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, u8 Category, u8 ActCode); + + BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg); ++ unsigned long Wcid, ++ unsigned long MsgLen, IN PFRAME_BA_REQ pMsg); + + /* */ + /* Private routines in rtmp_data.c */ +@@ -2450,139 +2450,139 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + BOOLEAN RTMPHandleRxDoneInterrupt(IN PRTMP_ADAPTER pAd); + + BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, +- IN INT_SOURCE_CSR_STRUC TxRingBitmap); ++ INT_SOURCE_CSR_STRUC TxRingBitmap); + +-VOID RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd); + +-VOID RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd); + +-VOID RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd); + + void RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd); + +-VOID RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd); + + BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pPrevAddr1, IN PUCHAR p8023hdr); ++ u8 *pPrevAddr1, u8 *p8023hdr); + + BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, +- IN ULONG TxRate, IN PMAC_TABLE_ENTRY pMacEntry); ++ unsigned long TxRate, IN PMAC_TABLE_ENTRY pMacEntry); + +-NDIS_STATUS Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, +- IN UCHAR DesiredOffset, +- OUT PUCHAR pByte0, OUT PUCHAR pByte1); ++int Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++ u8 DesiredOffset, ++ u8 *pByte0, u8 *pByte1); + +-NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++int STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +-VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, IN UINT NumberOfPackets); ++void STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, ++ IN PPNDIS_PACKET ppPacketArray, u32 NumberOfPackets); + +-VOID RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, ++void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bIntContext, +- IN UCHAR QueIdx, IN UCHAR Max_Tx_Packets); ++ u8 QueIdx, u8 Max_Tx_Packets); + +-NDIS_STATUS RTMPHardTransmit(IN PRTMP_ADAPTER pAd, ++int RTMPHardTransmit(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN UCHAR QueIdx, OUT PULONG pFreeTXDLeft); ++ u8 QueIdx, unsigned long *pFreeTXDLeft); + +-NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, IN UCHAR QueIdx); ++int STAHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, u8 QueIdx); + +-VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, ++void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + +-NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR RingType, +- IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs); ++int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ u8 RingType, ++ u8 NumberRequired, u8 *FreeNumberIs); + +-NDIS_STATUS MlmeHardTransmit(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket); + +-NDIS_STATUS MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket); + + #ifdef RTMP_MAC_PCI +-NDIS_STATUS MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket); + +-NDIS_STATUS MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); ++int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, IN PNDIS_PACKET pPacket); + +-VOID RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, IN UCHAR QSEL); ++void RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, ++ IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, u8 QSEL); + #endif /* RTMP_MAC_PCI // */ + +-USHORT RTMPCalcDuration(IN PRTMP_ADAPTER pAd, IN UCHAR Rate, IN ULONG Size); ++u16 RTMPCalcDuration(IN PRTMP_ADAPTER pAd, u8 Rate, unsigned long Size); + +-VOID RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ +- IN UCHAR BASize, +- IN UCHAR WCID, +- IN ULONG Length, +- IN UCHAR PID, +- IN UCHAR TID, +- IN UCHAR TxRate, +- IN UCHAR Txopmode, ++void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ ++ u8 BASize, ++ u8 WCID, ++ unsigned long Length, ++ u8 PID, ++ u8 TID, ++ u8 TxRate, ++ u8 Txopmode, + IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit); + +-VOID RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); + +-VOID RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); + +-VOID RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd); ++void RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd); + +-VOID RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd); ++void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS MiniportMMRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN PUCHAR pData, IN UINT Length); ++int MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u8 *pData, u32 Length); + + /*+++mark by shiang, now this function merge to MiniportMMRequest() */ + /*---mark by shiang, now this function merge to MiniportMMRequest() */ + +-VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, IN BOOLEAN bQosNull); ++void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++ u8 TxRate, IN BOOLEAN bQosNull); + +-VOID RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd); ++void RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd); + +-VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, ++void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, + IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, +- IN UCHAR QueIdx, IN UCHAR FrameGap); ++ u8 TxRate, ++ u8 RTSRate, ++ u16 AckDuration, ++ u8 QueIdx, u8 FrameGap); + +-PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, OUT UCHAR * QueIdx); ++PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, u8 * QueIdx); + +-VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey); ++void RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey); + +-VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++void WpaDisassocApAndBlockAssoc(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + +-VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd); ++void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd); + +-VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd); ++void WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, + IN PNDIS_PACKET pInPacket, + OUT PNDIS_PACKET * ppOutPacket); + +-NDIS_STATUS RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET * pPacket, +- IN PUCHAR pHeader, +- IN UINT HeaderLen, +- IN PUCHAR pData, IN UINT DataLen); ++ u8 *pHeader, ++ u32 HeaderLen, ++ u8 *pData, u32 DataLen); + +-VOID RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +-BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx); ++BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx); + + BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +@@ -2591,33 +2591,33 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + /* */ + /* Private routines in rtmp_wep.c */ + /* */ +-VOID RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN UCHAR KeyId, IN UCHAR KeyLen, IN PUCHAR pDest); ++void RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pKey, ++ u8 KeyId, u8 KeyLen, u8 *pDest); + +-VOID RTMPEncryptData(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, IN PUCHAR pDest, IN UINT Len); ++void RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++ u8 *pSrc, u8 *pDest, u32 Len); + + BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, IN PCIPHER_KEY pGroupKey); ++ u8 *pData, ++ unsigned long DataByteCnt, IN PCIPHER_KEY pGroupKey); + +-VOID RTMPSetICV(IN PRTMP_ADAPTER pAd, IN PUCHAR pDest); ++void RTMPSetICV(IN PRTMP_ADAPTER pAd, u8 *pDest); + +-VOID ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, IN PUCHAR pKey, IN UINT KeyLen); ++void ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, u8 *pKey, u32 KeyLen); + +-UCHAR ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx); ++u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx); + +-VOID ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len); + +-VOID ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len); + +-VOID WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, +- IN PUCHAR pDest, IN PUCHAR pSrc, IN UINT Len); ++void WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++ u8 *pDest, u8 *pSrc, u32 Len); + +-UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len); ++u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len); + + /* */ + /* MLME routines */ +@@ -2625,190 +2625,190 @@ UINT RTMP_CALC_FCS32(IN UINT Fcs, IN PUCHAR Cp, IN INT Len); + + /* Asic/RF/BBP related functions */ + +-VOID AsicAdjustTxPower(IN PRTMP_ADAPTER pAd); ++void AsicAdjustTxPower(IN PRTMP_ADAPTER pAd); + +-VOID AsicUpdateProtect(IN PRTMP_ADAPTER pAd, +- IN USHORT OperaionMode, +- IN UCHAR SetMask, ++void AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++ u16 OperaionMode, ++ u8 SetMask, + IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist); + +-VOID AsicSwitchChannel(IN PRTMP_ADAPTER pAd, +- IN UCHAR Channel, IN BOOLEAN bScan); ++void AsicSwitchChannel(IN PRTMP_ADAPTER pAd, ++ u8 Channel, IN BOOLEAN bScan); + +-VOID AsicLockChannel(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); ++void AsicLockChannel(IN PRTMP_ADAPTER pAd, u8 Channel); + +-VOID AsicRfTuningExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void AsicRfTuningExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID AsicResetBBPAgent(IN PRTMP_ADAPTER pAd); ++void AsicResetBBPAgent(IN PRTMP_ADAPTER pAd); + +-VOID AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); ++void AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp); + +-VOID AsicForceSleep(IN PRTMP_ADAPTER pAd); ++void AsicForceSleep(IN PRTMP_ADAPTER pAd); + +-VOID AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); + +-VOID AsicSetBssid(IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid); ++void AsicSetBssid(IN PRTMP_ADAPTER pAd, u8 *pBssid); + +-VOID AsicSetMcastWC(IN PRTMP_ADAPTER pAd); ++void AsicSetMcastWC(IN PRTMP_ADAPTER pAd); + +-VOID AsicDelWcidTab(IN PRTMP_ADAPTER pAd, IN UCHAR Wcid); ++void AsicDelWcidTab(IN PRTMP_ADAPTER pAd, u8 Wcid); + +-VOID AsicEnableRDG(IN PRTMP_ADAPTER pAd); ++void AsicEnableRDG(IN PRTMP_ADAPTER pAd); + +-VOID AsicDisableRDG(IN PRTMP_ADAPTER pAd); ++void AsicDisableRDG(IN PRTMP_ADAPTER pAd); + +-VOID AsicDisableSync(IN PRTMP_ADAPTER pAd); ++void AsicDisableSync(IN PRTMP_ADAPTER pAd); + +-VOID AsicEnableBssSync(IN PRTMP_ADAPTER pAd); ++void AsicEnableBssSync(IN PRTMP_ADAPTER pAd); + +-VOID AsicEnableIbssSync(IN PRTMP_ADAPTER pAd); ++void AsicEnableIbssSync(IN PRTMP_ADAPTER pAd); + +-VOID AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm); ++void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm); + +-VOID AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime); ++void AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime); + +-VOID AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, +- IN PUCHAR pKey, IN PUCHAR pTxMic, IN PUCHAR pRxMic); ++void AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIndex, ++ u8 KeyIdx, ++ u8 CipherAlg, ++ u8 *pKey, u8 *pTxMic, u8 *pRxMic); + +-VOID AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIndex, IN UCHAR KeyIdx); ++void AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIndex, u8 KeyIdx); + +-VOID AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR CipherAlg, ++void AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, ++ u16 WCID, ++ u8 BssIndex, ++ u8 CipherAlg, + IN BOOLEAN bUsePairewiseKeyTable); + +-VOID AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, IN ULONG uIV, IN ULONG uEIV); ++void AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, ++ u16 WCID, unsigned long uIV, unsigned long uEIV); + +-VOID AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, IN PUCHAR pAddr); ++void AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, ++ u16 WCID, u8 *pAddr); + +-VOID AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, +- IN USHORT WCID, +- IN UCHAR BssIndex, +- IN UCHAR KeyIdx, ++void AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, ++ u16 WCID, ++ u8 BssIndex, ++ u8 KeyIdx, + IN PCIPHER_KEY pCipherKey, + IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey); + +-VOID AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr, +- IN UCHAR WCID, IN CIPHER_KEY * pCipherKey); ++void AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 *pAddr, ++ u8 WCID, IN CIPHER_KEY * pCipherKey); + +-VOID AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, IN UCHAR Wcid); ++void AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIdx, u8 Wcid); + + BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1); ++ u8 Command, ++ u8 Token, u8 Arg0, u8 Arg1); + + #ifdef RTMP_MAC_PCI +-BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, IN UCHAR Command); ++BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, u8 Command); + #endif /* RTMP_MAC_PCI // */ + +-VOID MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr); ++void MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, u8 *pAddr); + +-VOID MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, ++void MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, + IN OUT PHEADER_802_11 pHdr80211, +- IN UCHAR SubType, +- IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid); ++ u8 SubType, ++ u8 ToDs, u8 *pDA, u8 *pBssid); + +-VOID MlmeRadioOff(IN PRTMP_ADAPTER pAd); ++void MlmeRadioOff(IN PRTMP_ADAPTER pAd); + +-VOID MlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void MlmeRadioOn(IN PRTMP_ADAPTER pAd); + +-VOID BssTableInit(IN BSS_TABLE * Tab); ++void BssTableInit(IN BSS_TABLE * Tab); + +-VOID BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab); ++void BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab); + +-ULONG BssTableSearch(IN BSS_TABLE * Tab, IN PUCHAR pBssid, IN UCHAR Channel); ++unsigned long BssTableSearch(IN BSS_TABLE * Tab, u8 *pBssid, u8 Channel); + +-ULONG BssSsidTableSearch(IN BSS_TABLE * Tab, +- IN PUCHAR pBssid, +- IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel); ++unsigned long BssSsidTableSearch(IN BSS_TABLE * Tab, ++ u8 *pBssid, ++ u8 *pSsid, u8 SsidLen, u8 Channel); + +-ULONG BssTableSearchWithSSID(IN BSS_TABLE * Tab, +- IN PUCHAR Bssid, +- IN PUCHAR pSsid, +- IN UCHAR SsidLen, IN UCHAR Channel); ++unsigned long BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++ u8 *Bssid, ++ u8 *pSsid, ++ u8 SsidLen, u8 Channel); + +-ULONG BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, +- IN PUCHAR pSsid, IN UCHAR SsidLen); ++unsigned long BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++ u8 *pSsid, u8 SsidLen); + +-VOID BssTableDeleteEntry(IN OUT PBSS_TABLE pTab, +- IN PUCHAR pBssid, IN UCHAR Channel); ++void BssTableDeleteEntry(IN OUT PBSS_TABLE pTab, ++ u8 *pBssid, u8 Channel); + +-VOID BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, ++void BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IN BA_ORI_ENTRY * pBAORIEntry); + +-VOID BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN PCF_PARM CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, ++void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN PCF_PARM CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 HtCapabilityLen, ++ u8 AddHtInfoLen, ++ u8 NewExtChanOffset, ++ u8 Channel, ++ char Rssi, + IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, ++ u8 CkipFlag, + IN PEDCA_PARM pEdcaParm, + IN PQOS_CAPABILITY_PARM pQosCapability, + IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); +- +-ULONG BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, IN PUCHAR pBssid, IN CHAR Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN USHORT BeaconPeriod, IN CF_PARM * CfParm, IN USHORT AtimWin, IN USHORT CapabilityInfo, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- IN UCHAR HtCapabilityLen, +- IN UCHAR AddHtInfoLen, +- IN UCHAR NewExtChanOffset, +- IN UCHAR Channel, +- IN CHAR Rssi, ++ u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ ++unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN CF_PARM * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 HtCapabilityLen, ++ u8 AddHtInfoLen, ++ u8 NewExtChanOffset, ++ u8 Channel, ++ char Rssi, + IN LARGE_INTEGER TimeStamp, +- IN UCHAR CkipFlag, ++ u8 CkipFlag, + IN PEDCA_PARM pEdcaParm, + IN PQOS_CAPABILITY_PARM pQosCapability, + IN PQBSS_LOAD_PARM pQbssLoad, +- IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); + +-VOID BATableInsertEntry(IN PRTMP_ADAPTER pAd, +- IN USHORT Aid, +- IN USHORT TimeOutValue, +- IN USHORT StartingSeq, +- IN UCHAR TID, +- IN UCHAR BAWinSize, +- IN UCHAR OriginatorStatus, IN BOOLEAN IsRecipient); ++void BATableInsertEntry(IN PRTMP_ADAPTER pAd, ++ u16 Aid, ++ u16 TimeOutValue, ++ u16 StartingSeq, ++ u8 TID, ++ u8 BAWinSize, ++ u8 OriginatorStatus, IN BOOLEAN IsRecipient); + +-VOID BssTableSsidSort(IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE * OutTab, IN CHAR Ssid[], IN UCHAR SsidLen); ++void BssTableSsidSort(IN PRTMP_ADAPTER pAd, ++ OUT BSS_TABLE * OutTab, char Ssid[], u8 SsidLen); + +-VOID BssTableSortByRssi(IN OUT BSS_TABLE * OutTab); ++void BssTableSortByRssi(IN OUT BSS_TABLE * OutTab); + +-VOID BssCipherParse(IN OUT PBSS_ENTRY pBss); ++void BssCipherParse(IN OUT PBSS_ENTRY pBss); + +-NDIS_STATUS MlmeQueueInit(IN MLME_QUEUE * Queue); ++int MlmeQueueInit(IN MLME_QUEUE * Queue); + +-VOID MlmeQueueDestroy(IN MLME_QUEUE * Queue); ++void MlmeQueueDestroy(IN MLME_QUEUE * Queue); + + BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, +- IN ULONG Machine, +- IN ULONG MsgType, IN ULONG MsgLen, IN VOID * Msg); ++ unsigned long Machine, ++ unsigned long MsgType, unsigned long MsgLen, void * Msg); + + BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, +- IN ULONG Wcid, +- IN ULONG TimeStampHigh, +- IN ULONG TimeStampLow, +- IN UCHAR Rssi0, +- IN UCHAR Rssi1, +- IN UCHAR Rssi2, +- IN ULONG MsgLen, IN PVOID Msg, IN UCHAR Signal); ++ unsigned long Wcid, ++ unsigned long TimeStampHigh, ++ unsigned long TimeStampLow, ++ u8 Rssi0, ++ u8 Rssi1, ++ u8 Rssi2, ++ unsigned long MsgLen, void *Msg, u8 Signal); + + BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem); + +-VOID MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd); ++void MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd); + + BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue); + +@@ -2816,121 +2816,121 @@ BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue); + + BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + IN PFRAME_802_11 pFrame, +- OUT INT * Machine, OUT INT * MsgType); ++ int * Machine, int * MsgType); + +-VOID StateMachineInit(IN STATE_MACHINE * Sm, ++void StateMachineInit(IN STATE_MACHINE * Sm, + IN STATE_MACHINE_FUNC Trans[], +- IN ULONG StNr, +- IN ULONG MsgNr, ++ unsigned long StNr, ++ unsigned long MsgNr, + IN STATE_MACHINE_FUNC DefFunc, +- IN ULONG InitState, IN ULONG Base); ++ unsigned long InitState, unsigned long Base); + +-VOID StateMachineSetAction(IN STATE_MACHINE * S, +- IN ULONG St, ULONG Msg, IN STATE_MACHINE_FUNC F); ++void StateMachineSetAction(IN STATE_MACHINE * S, ++ unsigned long St, unsigned long Msg, IN STATE_MACHINE_FUNC F); + +-VOID StateMachinePerformAction(IN PRTMP_ADAPTER pAd, ++void StateMachinePerformAction(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem); + +-VOID Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, ++void AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, + OUT STATE_MACHINE_FUNC Trans[]); + +-VOID ReassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void ReassocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID AssocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void AssocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID DisassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void DisassocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + + /*---------------------------------------------- */ +-VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID Cls3errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); ++void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr); + +-VOID InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, ++void InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem); + + #ifdef RTMP_MAC_USB +-VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg); ++void MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, unsigned long MsgType, u16 Msg); + #endif /* RTMP_MAC_USB // */ + +-VOID ComposePsPoll(IN PRTMP_ADAPTER pAd); ++void ComposePsPoll(IN PRTMP_ADAPTER pAd); + +-VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd); ++void ComposeNullFrame(IN PRTMP_ADAPTER pAd); + +-VOID AssocPostProc(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pAddr2, +- IN USHORT CapabilityInfo, +- IN USHORT Aid, +- IN UCHAR SupRate[], +- IN UCHAR SupRateLen, +- IN UCHAR ExtRate[], +- IN UCHAR ExtRateLen, ++void AssocPostProc(IN PRTMP_ADAPTER pAd, ++ u8 *pAddr2, ++ u16 CapabilityInfo, ++ u16 Aid, ++ u8 SupRate[], ++ u8 SupRateLen, ++ u8 ExtRate[], ++ u8 ExtRateLen, + IN PEDCA_PARM pEdcaParm, + IN HT_CAPABILITY_IE * pHtCapability, +- IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo); ++ u8 HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo); + +-VOID AuthStateMachineInit(IN PRTMP_ADAPTER pAd, ++void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, + IN PSTATE_MACHINE sm, OUT STATE_MACHINE_FUNC Trans[]); + +-VOID AuthTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void AuthTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); ++void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr); + +-VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /*============================================= */ + +-VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, ++void AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + IN PSTATE_MACHINE Sm, + IN STATE_MACHINE_FUNC Trans[]); + +-VOID PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, ++void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, IN USHORT Status); ++ u16 Alg, ++ u16 Seq, ++ u16 Reason, u16 Status); + + /* */ + /* Private routines in dls.c */ +@@ -2938,691 +2938,691 @@ VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + + /*======================================== */ + +-VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, ++void SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, + OUT STATE_MACHINE_FUNC Trans[]); + +-VOID BeaconTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void BeaconTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID ScanTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void ScanTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd); ++void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd); + + BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd); + /*========================================= */ + +-VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, ++void MlmeCntlInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]); + +-VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, ++void MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, + IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType); ++void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType); + +-VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP); ++void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP); + +-VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd); ++void IterateOnBssTab(IN PRTMP_ADAPTER pAd); + +-VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd);; ++void IterateOnBssTab2(IN PRTMP_ADAPTER pAd);; + +-VOID JoinParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, IN ULONG BssIdx); ++void JoinParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, unsigned long BssIdx); + +-VOID AssocParmFill(IN PRTMP_ADAPTER pAd, ++void AssocParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, +- IN PUCHAR pAddr, +- IN USHORT CapabilityInfo, +- IN ULONG Timeout, IN USHORT ListenIntv); ++ u8 *pAddr, ++ u16 CapabilityInfo, ++ unsigned long Timeout, u16 ListenIntv); + +-VOID ScanParmFill(IN PRTMP_ADAPTER pAd, ++void ScanParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, IN UCHAR BssType, IN UCHAR ScanType); ++ char Ssid[], ++ u8 SsidLen, u8 BssType, u8 ScanType); + +-VOID DisassocParmFill(IN PRTMP_ADAPTER pAd, ++void DisassocParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, +- IN PUCHAR pAddr, IN USHORT Reason); ++ u8 *pAddr, u16 Reason); + +-VOID StartParmFill(IN PRTMP_ADAPTER pAd, ++void StartParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_START_REQ_STRUCT * StartReq, +- IN CHAR Ssid[], IN UCHAR SsidLen); ++ char Ssid[], u8 SsidLen); + +-VOID AuthParmFill(IN PRTMP_ADAPTER pAd, ++void AuthParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, +- IN PUCHAR pAddr, IN USHORT Alg); ++ u8 *pAddr, u16 Alg); + +-VOID EnqueuePsPoll(IN PRTMP_ADAPTER pAd); ++void EnqueuePsPoll(IN PRTMP_ADAPTER pAd); + +-VOID EnqueueBeaconFrame(IN PRTMP_ADAPTER pAd); ++void EnqueueBeaconFrame(IN PRTMP_ADAPTER pAd); + +-VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + +-VOID ScanNextChannel(IN PRTMP_ADAPTER pAd); ++void ScanNextChannel(IN PRTMP_ADAPTER pAd); + +-ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd); ++unsigned long MakeIbssBeacon(IN PRTMP_ADAPTER pAd); + + BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT UCHAR * BssType, +- OUT CHAR ssid[], +- OUT UCHAR * SsidLen, OUT UCHAR * ScanType); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 * BssType, ++ char ssid[], ++ u8 * SsidLen, u8 * ScanType); + + BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- IN UCHAR MsgChannel, +- OUT PUCHAR pAddr2, +- OUT PUCHAR pBssid, +- OUT CHAR Ssid[], +- OUT UCHAR * pSsidLen, +- OUT UCHAR * pBssType, +- OUT USHORT * pBeaconPeriod, +- OUT UCHAR * pChannel, +- OUT UCHAR * pNewChannel, ++ void * Msg, ++ unsigned long MsgLen, ++ u8 MsgChannel, ++ u8 *pAddr2, ++ u8 *pBssid, ++ char Ssid[], ++ u8 * pSsidLen, ++ u8 * pBssType, ++ u16 * pBeaconPeriod, ++ u8 * pChannel, ++ u8 * pNewChannel, + OUT LARGE_INTEGER * pTimestamp, + OUT CF_PARM * pCfParm, +- OUT USHORT * pAtimWin, +- OUT USHORT * pCapabilityInfo, +- OUT UCHAR * pErp, +- OUT UCHAR * pDtimCount, +- OUT UCHAR * pDtimPeriod, +- OUT UCHAR * pBcastFlag, +- OUT UCHAR * pMessageToMe, +- OUT UCHAR SupRate[], +- OUT UCHAR * pSupRateLen, +- OUT UCHAR ExtRate[], +- OUT UCHAR * pExtRateLen, +- OUT UCHAR * pCkipFlag, +- OUT UCHAR * pAironetCellPowerLimit, ++ u16 * pAtimWin, ++ u16 * pCapabilityInfo, ++ u8 * pErp, ++ u8 * pDtimCount, ++ u8 * pDtimPeriod, ++ u8 * pBcastFlag, ++ u8 * pMessageToMe, ++ u8 SupRate[], ++ u8 * pSupRateLen, ++ u8 ExtRate[], ++ u8 * pExtRateLen, ++ u8 * pCkipFlag, ++ u8 * pAironetCellPowerLimit, + OUT PEDCA_PARM pEdcaParm, + OUT PQBSS_LOAD_PARM pQbssLoad, + OUT PQOS_CAPABILITY_PARM pQosCapability, +- OUT ULONG * pRalinkIe, +- OUT UCHAR * pHtCapabilityLen, +- OUT UCHAR * pPreNHtCapabilityLen, ++ unsigned long * pRalinkIe, ++ u8 * pHtCapabilityLen, ++ u8 * pPreNHtCapabilityLen, + OUT HT_CAPABILITY_IE * pHtCapability, +- OUT UCHAR * AddHtInfoLen, ++ u8 * AddHtInfoLen, + OUT ADD_HT_INFO_IE * AddHtInfo, +- OUT UCHAR * NewExtChannel, +- OUT USHORT * LengthVIE, ++ u8 * NewExtChannel, ++ u16 * LengthVIE, + OUT PNDIS_802_11_VARIABLE_IEs pVIE); + + BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, +- IN ULONG MsgLen, OUT PUCHAR pAddr2); ++ void * pMsg, ++ unsigned long MsgLen, u8 *pAddr2); + + BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * pMsg, IN ULONG MsgLen); ++ void * pMsg, unsigned long MsgLen); + + BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, IN VOID * pMsg, IN ULONG MsgLen); ++ u8 Wcid, void * pMsg, unsigned long MsgLen); + + BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pApAddr, +- OUT USHORT * CapabilityInfo, +- OUT ULONG * Timeout, OUT USHORT * ListenIntv); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pApAddr, ++ u16 * CapabilityInfo, ++ unsigned long * Timeout, u16 * ListenIntv); + + BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT ULONG * Timeout, OUT USHORT * Alg); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr, ++ unsigned long * Timeout, u16 * Alg); + + BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], OUT UCHAR * Ssidlen); ++ void * Msg, ++ unsigned long MsgLen, ++ char Ssid[], u8 * Ssidlen); + + BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr, +- OUT USHORT * Alg, +- OUT USHORT * Seq, +- OUT USHORT * Status, OUT CHAR ChlgText[]); +- +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- OUT UCHAR * pHtCapabilityLen, +- OUT UCHAR * pAddHtInfoLen, +- OUT UCHAR * pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, OUT UCHAR * pCkipFlag); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr, ++ u16 * Alg, ++ u16 * Seq, ++ u16 * Status, char ChlgText[]); ++ ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 * pHtCapabilityLen, ++ u8 * pAddHtInfoLen, ++ u8 * pNewExtChannelOffset, ++ OUT PEDCA_PARM pEdcaParm, u8 * pCkipFlag); + + BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, OUT USHORT * Reason); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, u16 * Reason); + + BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + IN PEAPOL_PACKET pMsg, +- IN ULONG MsgLen, +- IN UCHAR MsgType, IN MAC_TABLE_ENTRY * pEntry); ++ unsigned long MsgLen, ++ u8 MsgType, IN MAC_TABLE_ENTRY * pEntry); + + BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, OUT USHORT * Reason); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, u16 * Reason); + + BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], OUT UCHAR * pSsidLen); ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, ++ char Ssid[], u8 * pSsidLen); + +-BOOLEAN GetTimBit(IN CHAR * Ptr, +- IN USHORT Aid, +- OUT UCHAR * TimLen, +- OUT UCHAR * BcastFlag, +- OUT UCHAR * DtimCount, +- OUT UCHAR * DtimPeriod, OUT UCHAR * MessageToMe); ++BOOLEAN GetTimBit(char * Ptr, ++ u16 Aid, ++ u8 * TimLen, ++ u8 * BcastFlag, ++ u8 * DtimCount, ++ u8 * DtimPeriod, u8 * MessageToMe); + +-UCHAR ChannelSanity(IN PRTMP_ADAPTER pAd, IN UCHAR channel); ++u8 ChannelSanity(IN PRTMP_ADAPTER pAd, u8 channel); + + NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss); + + BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, IN ULONG MsgLen); ++ void * Msg, unsigned long MsgLen); + + BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2); ++ void * Msg, unsigned long MsgLen, u8 *pAddr2); + +-ULONG MakeOutgoingFrame(OUT UCHAR * Buffer, OUT ULONG * Length, ...); ++unsigned long MakeOutgoingFrame(u8 * Buffer, unsigned long * Length, ...); + +-VOID LfsrInit(IN PRTMP_ADAPTER pAd, IN ULONG Seed); ++void LfsrInit(IN PRTMP_ADAPTER pAd, unsigned long Seed); + +-UCHAR RandomByte(IN PRTMP_ADAPTER pAd); ++u8 RandomByte(IN PRTMP_ADAPTER pAd); + +-VOID AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, IN PUCHAR pTxRate); ++void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pTxRate); + +-VOID MlmePeriodicExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void MlmePeriodicExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID LinkDownExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void LinkDownExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID STAMlmePeriodicExec(PRTMP_ADAPTER pAd); ++void STAMlmePeriodicExec(PRTMP_ADAPTER pAd); + +-VOID MlmeAutoScan(IN PRTMP_ADAPTER pAd); ++void MlmeAutoScan(IN PRTMP_ADAPTER pAd); + +-VOID MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd); ++void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd); + +-BOOLEAN MlmeValidateSSID(IN PUCHAR pSsid, IN UCHAR SsidLen); ++BOOLEAN MlmeValidateSSID(u8 *pSsid, u8 SsidLen); + +-VOID MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, IN ULONG Now32); ++void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32); + + BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd); + +-VOID MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd); ++void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd); + +-VOID MlmeSetTxRate(IN PRTMP_ADAPTER pAd, ++void MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate); + +-VOID MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, ++void MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR * ppTable, +- IN PUCHAR pTableSize, IN PUCHAR pInitTxRateIdx); ++ u8 ** ppTable, ++ u8 *pTableSize, u8 *pInitTxRateIdx); + +-VOID MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, IN ULONG Now); ++void MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, ++ IN PMAC_TABLE_ENTRY pMacEntry, unsigned long Now); + +-VOID MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, IN ULONG Now32); ++void MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, unsigned long Now32); + +-VOID MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, IN USHORT psm); ++void MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, u16 psm); + +-VOID MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble); ++void MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, u16 TxPreamble); + +-VOID UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAd); ++void UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAd); + +-VOID MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, +- IN BOOLEAN bLinkUp, IN UCHAR apidx); ++void MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, ++ IN BOOLEAN bLinkUp, u8 apidx); + +-VOID MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, IN UCHAR apidx); ++void MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, u8 apidx); + +-VOID RTMPCheckRates(IN PRTMP_ADAPTER pAd, +- IN OUT UCHAR SupRate[], IN OUT UCHAR * SupRateLen); ++void RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++ IN u8 SupRate[], IN u8 * SupRateLen); + + BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, +- IN UCHAR CentralChannel, IN UCHAR Channel); ++ u8 CentralChannel, u8 Channel); + + BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, ++ u8 Wcid, + IN OUT HT_CAPABILITY_IE * pHtCapability, + IN OUT ADD_HT_INFO_IE * pAddHtInfo); + +-VOID StaQuickResponeForRateUpExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++void StaQuickResponeForRateUpExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + +-VOID RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd); ++void RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd); + +-CHAR RTMPMaxRssi(IN PRTMP_ADAPTER pAd, +- IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2); ++char RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++ char Rssi0, char Rssi1, char Rssi2); + + #ifdef RT30xx +-VOID AsicSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); ++void AsicSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant); + +-VOID RTMPFilterCalibration(IN PRTMP_ADAPTER pAd); ++void RTMPFilterCalibration(IN PRTMP_ADAPTER pAd); + + #ifdef RTMP_EFUSE_SUPPORT + /*2008/09/11:KH add to support efuse<-- */ +-INT set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, char *arg); + +-INT set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, char *arg); + +-VOID eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, +- IN USHORT Length, OUT USHORT * pData); ++void eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++ u16 Offset, ++ u16 Length, u16 * pData); + + int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd); + +-VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, PUINT EfuseFreeBlock); ++void eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, u32 *EfuseFreeBlock); + +-INT eFuse_init(IN PRTMP_ADAPTER pAd); ++int eFuse_init(IN PRTMP_ADAPTER pAd); + /*2008/09/11:KH add to support efuse--> */ + #endif /* RTMP_EFUSE_SUPPORT // */ + + /* add by johnli, RF power sequence setup */ +-VOID RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd); + /* end johnli */ + + #ifdef RT3070 +-VOID NICInitRT3070RFRegisters(IN RTMP_ADAPTER * pAd); ++void NICInitRT3070RFRegisters(IN RTMP_ADAPTER * pAd); + #endif /* RT3070 // */ + #ifdef RT3090 +-VOID NICInitRT3090RFRegisters(IN RTMP_ADAPTER * pAd); ++void NICInitRT3090RFRegisters(IN RTMP_ADAPTER * pAd); + #endif /* RT3090 // */ + +-VOID RT30xxHaltAction(IN PRTMP_ADAPTER pAd); ++void RT30xxHaltAction(IN PRTMP_ADAPTER pAd); + +-VOID RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, IN UCHAR Ant); ++void RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant); + #endif /* RT30xx // */ + +-VOID AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd); ++void AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd); + +-VOID AsicRxAntEvalTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void AsicRxAntEvalTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID APSDPeriodicExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void APSDPeriodicExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + + BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry); + +-UCHAR RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); ++u8 RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); + +-VOID RTMPUpdateLegacyTxSetting(UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry); ++void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, PMAC_TABLE_ENTRY pEntry); + + BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS MlmeInit(IN PRTMP_ADAPTER pAd); ++int MlmeInit(IN PRTMP_ADAPTER pAd); + +-VOID MlmeHandler(IN PRTMP_ADAPTER pAd); ++void MlmeHandler(IN PRTMP_ADAPTER pAd); + +-VOID MlmeHalt(IN PRTMP_ADAPTER pAd); ++void MlmeHalt(IN PRTMP_ADAPTER pAd); + +-VOID MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd); ++void MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd); + +-VOID BuildChannelList(IN PRTMP_ADAPTER pAd); ++void BuildChannelList(IN PRTMP_ADAPTER pAd); + +-UCHAR FirstChannel(IN PRTMP_ADAPTER pAd); ++u8 FirstChannel(IN PRTMP_ADAPTER pAd); + +-UCHAR NextChannel(IN PRTMP_ADAPTER pAd, IN UCHAR channel); ++u8 NextChannel(IN PRTMP_ADAPTER pAd, u8 channel); + +-VOID ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, +- IN UCHAR AironetCellPowerLimit); ++void ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++ u8 AironetCellPowerLimit); + + /* */ + /* Prototypes of function definition in rtmp_tkip.c */ + /* */ +-VOID RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pTKey, +- IN UCHAR KeyId, +- IN PUCHAR pTA, +- IN PUCHAR pMICKey, +- IN PUCHAR pTSC, OUT PULONG pIV16, OUT PULONG pIV32); +- +-VOID RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKey, +- IN PUCHAR pDA, +- IN PUCHAR pSA, IN UCHAR UserPriority, IN PUCHAR pMICKey); ++void RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pTKey, ++ u8 KeyId, ++ u8 *pTA, ++ u8 *pMICKey, ++ u8 *pTSC, unsigned long *pIV16, unsigned long *pIV32); ++ ++void RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++ u8 *pKey, ++ u8 *pDA, ++ u8 *pSA, u8 UserPriority, u8 *pMICKey); + + BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pSrc, +- IN PUCHAR pDA, +- IN PUCHAR pSA, +- IN PUCHAR pMICKey, +- IN UCHAR UserPriority, IN UINT Len); ++ u8 *pSrc, ++ u8 *pDA, ++ u8 *pSA, ++ u8 *pMICKey, ++ u8 UserPriority, u32 Len); + +-VOID RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pEncap, +- IN PCIPHER_KEY pKey, IN UCHAR apidx); ++ u8 *pEncap, ++ IN PCIPHER_KEY pKey, u8 apidx); + +-VOID RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar); ++void RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, u8 uChar); + +-VOID RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes); ++void RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, u8 *pSrc, u32 nBytes); + +-VOID RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip); ++void RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip); + + BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, +- IN UCHAR UserPriority, IN PCIPHER_KEY pWpaKey); ++ u8 *pData, ++ unsigned long DataByteCnt, ++ u8 UserPriority, IN PCIPHER_KEY pWpaKey); + + BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, +- IN ULONG DataByteCnt, IN PCIPHER_KEY pWpaKey); ++ u8 *pData, ++ unsigned long DataByteCnt, IN PCIPHER_KEY pWpaKey); + + /* */ + /* Prototypes of function definition in cmm_info.c */ + /* */ +-INT RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band); ++int RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, char *arg, int band); + +-INT RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, char *arg); + +-INT RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, char *arg); + +-INT RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, +- IN PSTRING keyString, +- IN CIPHER_KEY * pSharedKey, IN INT keyIdx); ++int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++ char *keyString, ++ IN CIPHER_KEY * pSharedKey, int keyIdx); + +-INT RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, +- IN PSTRING keyString, +- IN UCHAR * pHashStr, +- IN INT hashStrLen, OUT PUCHAR pPMKBuf); ++int RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++ char *keyString, ++ u8 * pHashStr, ++ int hashStrLen, u8 *pPMKBuf); + + /* */ + /* Prototypes of function definition in cmm_info.c */ + /* */ +-VOID RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd); ++void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd); + +-VOID RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, IN ULONG phymode); ++void RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, unsigned long phymode); + +-VOID RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, +- IN UCHAR * pMcsSet, ++void RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++ u8 * pMcsSet, + OUT HT_CAPABILITY_IE * pHtCapability, + OUT ADD_HT_INFO_IE * pAddHtInfo); + +-VOID RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, +- IN UCHAR BssIdx, +- IN UCHAR KeyIdx, +- IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY * pEntry); ++void RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++ u8 BssIdx, ++ u8 KeyIdx, ++ u8 CipherAlg, IN MAC_TABLE_ENTRY * pEntry); + +-PSTRING GetEncryptType(CHAR enc); ++char *GetEncryptType(char enc); + +-PSTRING GetAuthMode(CHAR auth); ++char *GetAuthMode(char auth); + +-VOID RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode); ++void RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode); + +-VOID RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, IN UCHAR apidx); ++void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx); + +-VOID RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, +- IN USHORT Event_flag, +- IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi); ++void RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, ++ u16 Event_flag, ++ u8 *pAddr, u8 BssIdx, char Rssi); + +-CHAR ConvertToRssi(IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber); ++char ConvertToRssi(IN PRTMP_ADAPTER pAd, char Rssi, u8 RssiNumber); + + /*=================================== + Function prototype in cmm_wpa.c + =================================== */ +-VOID RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, ++void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN UINT DataLen, IN BOOLEAN bClearFrame); ++ u8 *pHeader802_3, ++ u32 HdrLen, ++ u8 *pData, ++ u32 DataLen, IN BOOLEAN bClearFrame); + +-VOID WpaDerivePTK(IN PRTMP_ADAPTER pAd, +- IN UCHAR * PMK, +- IN UCHAR * ANonce, +- IN UCHAR * AA, +- IN UCHAR * SNonce, +- IN UCHAR * SA, OUT UCHAR * output, IN UINT len); ++void WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++ u8 * PMK, ++ u8 * ANonce, ++ u8 * AA, ++ u8 * SNonce, ++ u8 * SA, u8 * output, u32 len); + +-VOID GenRandom(IN PRTMP_ADAPTER pAd, IN UCHAR * macAddr, OUT UCHAR * random); ++void GenRandom(IN PRTMP_ADAPTER pAd, u8 * macAddr, u8 * random); + + BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pData, +- IN ULONG DataByteCount, IN UCHAR FromWhichBSSID); ++ u8 *pData, ++ unsigned long DataByteCount, u8 FromWhichBSSID); + +-VOID AES_GTK_KEY_UNWRAP(IN UCHAR * key, +- OUT UCHAR * plaintext, +- IN UINT32 c_len, IN UCHAR * ciphertext); ++void AES_GTK_KEY_UNWRAP(u8 * key, ++ u8 * plaintext, ++ u32 c_len, u8 * ciphertext); + + BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pKeyData, +- IN UCHAR KeyDataLen, +- IN UCHAR GroupKeyIndex, +- IN UCHAR MsgType, ++ u8 *pKeyData, ++ u8 KeyDataLen, ++ u8 GroupKeyIndex, ++ u8 MsgType, + IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry); + +-VOID ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR GroupKeyWepStatus, +- IN UCHAR MsgType, +- IN UCHAR DefaultKeyIdx, +- IN UCHAR * KeyNonce, +- IN UCHAR * TxRSC, +- IN UCHAR * GTK, +- IN UCHAR * RSNIE, +- IN UCHAR RSNIE_Len, OUT PEAPOL_PACKET pMsg); +- +-NDIS_STATUS RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, ++void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++ u8 GroupKeyWepStatus, ++ u8 MsgType, ++ u8 DefaultKeyIdx, ++ u8 * KeyNonce, ++ u8 * TxRSC, ++ u8 * GTK, ++ u8 * RSNIE, ++ u8 RSNIE_Len, OUT PEAPOL_PACKET pMsg); ++ ++int RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, + IN NDIS_802_11_ENCRYPTION_STATUS + GroupCipher, + IN PCIPHER_KEY pShard_key); + +-VOID RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, +- IN UINT AuthMode, IN UINT WepStatus, IN UCHAR apidx); ++void RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++ u32 AuthMode, u32 WepStatus, u8 apidx); + + /* */ + /* function prototype in ap_wpa.c */ + /* */ +-VOID RTMPGetTxTscFromAsic(IN PRTMP_ADAPTER pAd, +- IN UCHAR apidx, OUT PUCHAR pTxTsc); ++void RTMPGetTxTscFromAsic(IN PRTMP_ADAPTER pAd, ++ u8 apidx, u8 *pTxTsc); + +-VOID APInstallPairwiseKey(PRTMP_ADAPTER pAd, PMAC_TABLE_ENTRY pEntry); ++void APInstallPairwiseKey(PRTMP_ADAPTER pAd, PMAC_TABLE_ENTRY pEntry); + +-UINT APValidateRSNIE(IN PRTMP_ADAPTER pAd, ++u32 APValidateRSNIE(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN PUCHAR pRsnIe, IN UCHAR rsnie_len); ++ u8 *pRsnIe, u8 rsnie_len); + +-VOID HandleCounterMeasure(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void HandleCounterMeasure(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); + +-VOID WPAStart4WayHS(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN ULONG TimeInterval); ++void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, ++ IN MAC_TABLE_ENTRY * pEntry, unsigned long TimeInterval); + +-VOID WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); + +-VOID PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, ++void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, ++void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, IN MLME_QUEUE_ELEM * Elem); + +-VOID PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, ++void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN VOID * Msg, IN UINT MsgLen); ++ void * Msg, u32 MsgLen); + +-VOID WpaDeriveGTK(IN UCHAR * PMK, +- IN UCHAR * GNonce, +- IN UCHAR * AA, OUT UCHAR * output, IN UINT len); ++void WpaDeriveGTK(u8 * PMK, ++ u8 * GNonce, ++ u8 * AA, u8 * output, u32 len); + +-VOID AES_GTK_KEY_WRAP(IN UCHAR * key, +- IN UCHAR * plaintext, +- IN UINT32 p_len, OUT UCHAR * ciphertext); ++void AES_GTK_KEY_WRAP(u8 * key, ++ u8 * plaintext, ++ u32 p_len, u8 * ciphertext); + + /*typedef void (*TIMER_FUNCTION)(unsigned long); */ + + /* timeout -- ms */ +-VOID RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout); + +-VOID RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, + IN NDIS_MINIPORT_TIMER * pTimer, +- IN TIMER_FUNCTION function, IN PVOID data); ++ IN TIMER_FUNCTION function, void *data); + +-VOID RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout); + +-VOID RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + IN unsigned long timeout); + +-VOID RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + OUT BOOLEAN * pCancelled); + +-VOID RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry); ++void RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry); + +-VOID RTMPusecDelay(IN ULONG usec); ++void RTMPusecDelay(unsigned long usec); + +-NDIS_STATUS os_alloc_mem(IN RTMP_ADAPTER * pAd, +- OUT UCHAR ** mem, IN ULONG size); ++int os_alloc_mem(IN RTMP_ADAPTER * pAd, ++ u8 ** mem, unsigned long size); + +-NDIS_STATUS os_free_mem(IN PRTMP_ADAPTER pAd, IN PVOID mem); ++int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem); + + void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + +-VOID RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd); ++void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS AdapterBlockAllocateMemory(IN PVOID handle, OUT PVOID * ppAd); ++int AdapterBlockAllocateMemory(void *handle, void ** ppAd); + + void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, ++ u32 Index, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + + void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, +- IN UINT Index, +- IN ULONG Length, ++ u32 Index, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + + void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- IN PVOID VirtualAddress, ++ void *VirtualAddress, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); + + void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + + void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); + + void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, +- IN PVOID VirtualAddress, ++ unsigned long Length, ++ void *VirtualAddress, + IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); + + PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size); + + PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress, ++ void ** VirtualAddress, + OUT PNDIS_PHYSICAL_ADDRESS + PhysicalAddress); + + PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length, ++ unsigned long Length, + IN BOOLEAN Cached, +- OUT PVOID * VirtualAddress); ++ void ** VirtualAddress); + + PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, +- IN ULONG Length); ++ unsigned long Length); + + void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, + OUT PACKET_INFO * pPacketInfo, +- OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen); ++ u8 ** pSrcBufVA, u32 * pSrcBufLen); + + void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, + OUT PACKET_INFO * pPacketInfo, +- OUT PUCHAR * pSrcBufVA, OUT UINT * pSrcBufLen); ++ u8 ** pSrcBufVA, u32 * pSrcBufLen); + + BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk); + +@@ -3631,57 +3631,57 @@ rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST * sg); + + void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +-UINT BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); + +-PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID); ++PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID); + + PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, IN UCHAR FromWhichBSSID); ++ u8 *pHeader802_3, ++ u32 HdrLen, ++ u8 *pData, ++ unsigned long DataSize, u8 FromWhichBSSID); + + PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pOldPkt); + + void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, +- IN ULONG Now32); ++ unsigned long Now32); + +-VOID BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, ++void BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN UCHAR TID, +- IN USHORT TimeOut, +- IN ULONG DelayTime, IN BOOLEAN isForced); ++ u8 TID, ++ u16 TimeOut, ++ unsigned long DelayTime, IN BOOLEAN isForced); + +-VOID BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid); ++void BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, u8 Wcid); + + BOOLEAN OS_Need_Clone_Packet(void); + +-VOID build_tx_packet(IN PRTMP_ADAPTER pAd, ++void build_tx_packet(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pFrame, IN ULONG FrameLen); ++ u8 *pFrame, unsigned long FrameLen); + +-VOID BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, +- IN UCHAR TID, ++void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ u8 Wcid, ++ u8 TID, + IN BOOLEAN bPassive, IN BOOLEAN bForceSend); + +-VOID BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, +- IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive); ++void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++ u8 Wcid, u8 TID, IN BOOLEAN bPassive); + + BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); + void ba_reordering_resource_release(PRTMP_ADAPTER pAd); + +-PSTRING rstrtok(IN PSTRING s, IN const PSTRING ct); ++char *rstrtok(char *s, IN const char *ct); + + /*//////// common ioctl functions ////////// */ +-INT SetCommonHT(IN PRTMP_ADAPTER pAd); ++int SetCommonHT(IN PRTMP_ADAPTER pAd); + +-INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet); ++int WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++ u8 *pFrame, u16 FrameLen, u16 OffSet); + +-VOID WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, ++void WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bUnicast); + + int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd); +@@ -3689,37 +3689,37 @@ int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd); + BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc); + + /* AMPDU packet indication */ +-VOID Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++void Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + + /* AMSDU packet indication */ +-VOID Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++void Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + + /* Normal legacy Rx packet indication */ +-VOID Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + +-VOID Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++void Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + + void update_os_packet_info(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + + void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, +- IN PUCHAR pHeader802_3, +- IN UCHAR FromWhichBSSID); ++ u8 *pHeader802_3, ++ u8 FromWhichBSSID); + + /* remove LLC and get 802_3 Header */ + #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ + { \ +- PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \ ++ u8 *_pRemovedLLCSNAP = NULL, *_pDA, *_pSA; \ + \ + if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \ + { \ + _pDA = _pRxBlk->pHeader->Addr3; \ +- _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \ ++ _pSA = (u8 *)_pRxBlk->pHeader + sizeof(HEADER_802_11); \ + } \ + else \ + { \ +@@ -3742,36 +3742,36 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + _pRxBlk->DataSize, _pRemovedLLCSNAP); \ + } + +-VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID); ++ u8 FromWhichBSSID); + + #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ + Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); + /*announce_802_3_packet(_pAd, _pPacket); */ + + PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID); ++ IN PNDIS_PACKET pPacket, u8 FromWhichBSSID); + + PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pData, IN ULONG DataSize); ++ u8 *pData, unsigned long DataSize); + + /* Normal, AMPDU or AMSDU */ +-VOID CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++void CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + +-VOID CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, ++void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID); ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID); + +-VOID Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, ++void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI); + + PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, +- IN OUT UINT32 * pRxPending); ++ IN u32 * pRxPending); + + PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); + +@@ -3798,17 +3798,17 @@ enum { + + /* Definition from madwifi */ + typedef struct { +- UINT32 did; +- UINT16 status; +- UINT16 len; +- UINT32 data; ++ u32 did; ++ u16 status; ++ u16 len; ++ u32 data; + } p80211item_uint32_t; + + typedef struct { +- UINT32 msgcode; +- UINT32 msglen; ++ u32 msgcode; ++ u32 msglen; + #define WLAN_DEVNAMELEN_MAX 16 +- UINT8 devname[WLAN_DEVNAMELEN_MAX]; ++ u8 devname[WLAN_DEVNAMELEN_MAX]; + p80211item_uint32_t hosttime; + p80211item_uint32_t mactime; + p80211item_uint32_t channel; +@@ -3823,18 +3823,18 @@ typedef struct { + + /* The radio capture header precedes the 802.11 header. */ + typedef struct PACKED _ieee80211_radiotap_header { +- UINT8 it_version; /* Version 0. Only increases ++ u8 it_version; /* Version 0. Only increases + * for drastic changes, + * introduction of compatible + * new fields does not count. + */ +- UINT8 it_pad; +- UINT16 it_len; /* length of the whole ++ u8 it_pad; ++ u16 it_len; /* length of the whole + * header in bytes, including + * it_version, it_pad, + * it_len, and data fields. + */ +- UINT32 it_present; /* A bitmap telling which ++ u32 it_present; /* A bitmap telling which + * fields are present. Set bit 31 + * (0x80000000) to extend the + * bitmap by another 32 bits. +@@ -3868,38 +3868,38 @@ enum ieee80211_radiotap_type { + + typedef struct _wlan_radiotap_header { + ieee80211_radiotap_header wt_ihdr; +- INT64 wt_tsft; +- UINT8 wt_flags; +- UINT8 wt_rate; ++ long long wt_tsft; ++ u8 wt_flags; ++ u8 wt_rate; + } wlan_radiotap_header; + /* Definition from madwifi */ + + void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); + +-VOID RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, IN LONG Rates); ++void RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, long Rates); + +-INT Set_FixedTxMode_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int Set_FixedTxMode_Proc(IN PRTMP_ADAPTER pAd, char *arg); + + BOOLEAN RT28XXChipsetCheck(IN void *_dev_p); + +-VOID RT28XXDMADisable(IN RTMP_ADAPTER * pAd); ++void RT28XXDMADisable(IN RTMP_ADAPTER * pAd); + +-VOID RT28XXDMAEnable(IN RTMP_ADAPTER * pAd); ++void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd); + +-VOID RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, +- IN INT apidx, +- IN ULONG BeaconLen, IN ULONG UpdatePos); ++void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++ int apidx, ++ unsigned long BeaconLen, unsigned long UpdatePos); + + int rt28xx_init(IN PRTMP_ADAPTER pAd, +- IN PSTRING pDefaultMac, IN PSTRING pHostName); ++ char *pDefaultMac, char *pHostName); + +-NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAPTER * pAd); ++int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd); + +-VOID RtmpNetTaskExit(IN PRTMP_ADAPTER pAd); ++void RtmpNetTaskExit(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd); ++int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd); + +-VOID RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd); ++void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd); + + void tbtt_tasklet(unsigned long data); + +@@ -3908,7 +3908,7 @@ PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + + BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev); + +-INT RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); ++int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); + + BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd); + +@@ -3916,317 +3916,317 @@ BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd); + /* */ + /* Function Prototype in cmm_data_pci.c */ + /* */ +-USHORT RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ IN BOOLEAN bIsLast, u16 * FreeNumber); + +-USHORT RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, +- OUT USHORT * FreeNumber); ++ u16 * FreeNumber); + +-USHORT RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR frameNum, OUT USHORT * FreeNumber); ++ u8 frameNum, u16 * FreeNumber); + +-USHORT RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR fragNum, OUT USHORT * FreeNumber); ++ u8 fragNum, u16 * FreeNumber); + +-USHORT RtmpPCI_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpPCI_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ IN BOOLEAN bIsLast, u16 * FreeNumber); + +-VOID RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++void RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx); ++ u16 totalMPDUSize, ++ u16 FirstTxIdx); + +-VOID RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN USHORT LastTxIdx); ++void RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u16 LastTxIdx); + +-VOID RtmpPCIDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, IN UCHAR QueIdx); ++void RtmpPCIDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, u8 QueIdx); + + int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, ++ u8 QueIdx, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, IN UINT SrcBufLen); ++ u8 *pSrcBufVA, u32 SrcBufLen); + +-NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHeader, + IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD); + + BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, IN USHORT TbttNumToNextWakeUp); ++ u8 Level, u16 TbttNumToNextWakeUp); + +-BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, IN UCHAR Level); ++BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level); + +-VOID RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd); ++void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd); + +-VOID RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd); ++void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd); + +-VOID RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, IN UCHAR Level); ++void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level); + +-VOID RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, IN USHORT Max); ++void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max); + +-VOID RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd); ++void RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd); + +-VOID PsPollWakeExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void PsPollWakeExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID RadioOnExec(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); ++void RadioOnExec(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3); + +-VOID RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); + +-VOID RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); ++void RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp); + +-VOID RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd); + +-VOID RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd); ++void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd); + #endif /* RTMP_MAC_PCI // */ + + #ifdef RTMP_MAC_USB + /* */ + /* Function Prototype in rtusb_bulk.c */ + /* */ +-VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, ++void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + IN PTX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, IN usb_complete_t Func); ++ u8 BulkOutPipeId, IN usb_complete_t Func); + +-VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, ++void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + IN PHT_TX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN ULONG BulkOutSize, IN usb_complete_t Func); ++ u8 BulkOutPipeId, ++ unsigned long BulkOutSize, IN usb_complete_t Func); + +-VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); ++void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); + +-VOID RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd); ++void RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, IN UCHAR Index); ++void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++ u8 BulkOutPipeId, u8 Index); + +-VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutRTSFrame(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutRTSFrame(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index); ++void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index); + +-VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd); ++void RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd); ++void RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkReceive(IN PRTMP_ADAPTER pAd); + +-VOID DoBulkIn(IN RTMP_ADAPTER * pAd); ++void DoBulkIn(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); ++void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); + +-VOID RTUSBBulkRxHandle(IN unsigned long data); ++void RTUSBBulkRxHandle(IN unsigned long data); + + /* */ + /* Function Prototype in rtusb_io.c */ + /* */ +-NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); ++int RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length); + +-NTSTATUS RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData, IN USHORT length); ++int RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length); + +-NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData); ++int RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData); + +-NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, IN PUCHAR pValue); ++int RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++ u8 Id, u8 *pValue); + +-NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, IN UCHAR Value); ++int RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++ u8 Id, u8 Value); + +-NTSTATUS RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, IN UINT32 Value); ++int RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, u32 Value); + +-NTSTATUS RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, +- IN UINT32 TransferFlags, +- IN UCHAR ReservedBits, +- IN UCHAR Request, +- IN USHORT Value, +- IN USHORT Index, +- IN PVOID TransferBuffer, +- IN UINT32 TransferBufferLength); ++int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++ u32 TransferFlags, ++ u8 ReservedBits, ++ u8 Request, ++ u16 Value, ++ u16 Index, ++ void *TransferBuffer, ++ u32 TransferBufferLength); + +-NTSTATUS RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); ++int RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length); + +-NTSTATUS RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData, IN USHORT length); ++int RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length); + +-VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd); ++void RTUSBPutToSleep(IN PRTMP_ADAPTER pAd); + +-NTSTATUS RTUSBWakeUp(IN PRTMP_ADAPTER pAd); ++int RTUSBWakeUp(IN PRTMP_ADAPTER pAd); + +-VOID RTUSBInitializeCmdQ(IN PCmdQ cmdq); ++void RTUSBInitializeCmdQ(IN PCmdQ cmdq); + +-NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + IN NDIS_OID Oid, + IN BOOLEAN SetInformation, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength); ++ void *pInformationBuffer, ++ u32 InformationBufferLength); + +-NDIS_STATUS RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, + IN NDIS_OID Oid, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength); ++ void *pInformationBuffer, ++ u32 InformationBufferLength); + +-VOID RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt); ++void RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt); + +-INT RTUSBCmdThread(IN OUT PVOID Context); ++int RTUSBCmdThread(IN void *Context); + +-VOID RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd); + +-VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd); ++void RTUSBWatchDog(IN RTMP_ADAPTER * pAd); + +-NTSTATUS RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN UINT32 Value); ++int RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u32 Value); + +-NTSTATUS RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUINT32 pValue); ++int RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u32 *pValue); + +-NTSTATUS RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, +- IN USHORT Offset, IN USHORT Value); ++int RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++ u16 Offset, u16 Value); + +-NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFwImage, IN ULONG FwLen); ++int RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++ u8 *pFwImage, unsigned long FwLen); + +-NTSTATUS RTUSBVenderReset(IN PRTMP_ADAPTER pAd); ++int RTUSBVenderReset(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RTUSBSetHardWareRegister(IN PRTMP_ADAPTER pAdapter, IN PVOID pBuf); ++int RTUSBSetHardWareRegister(IN PRTMP_ADAPTER pAdapter, void *pBuf); + +-NDIS_STATUS RTUSBQueryHardWareRegister(IN PRTMP_ADAPTER pAdapter, +- IN PVOID pBuf); ++int RTUSBQueryHardWareRegister(IN PRTMP_ADAPTER pAdapter, ++ void *pBuf); + +-VOID CMDHandler(IN PRTMP_ADAPTER pAd); ++void CMDHandler(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAdapter); ++int RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAdapter); + +-VOID MacTableInitialize(IN PRTMP_ADAPTER pAd); ++void MacTableInitialize(IN PRTMP_ADAPTER pAd); + +-VOID MlmeSetPsm(IN PRTMP_ADAPTER pAd, IN USHORT psm); ++void MlmeSetPsm(IN PRTMP_ADAPTER pAd, u16 psm); + +-NDIS_STATUS RTMPWPAAddKeyProc(IN PRTMP_ADAPTER pAd, IN PVOID pBuf); ++int RTMPWPAAddKeyProc(IN PRTMP_ADAPTER pAd, void *pBuf); + +-VOID AsicRxAntEvalAction(IN PRTMP_ADAPTER pAd); ++void AsicRxAntEvalAction(IN PRTMP_ADAPTER pAd); + + void append_pkt(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pHeader802_3, +- IN UINT HdrLen, +- IN PUCHAR pData, +- IN ULONG DataSize, OUT PNDIS_PACKET * ppPacket); ++ u8 *pHeader802_3, ++ u32 HdrLen, ++ u8 *pData, ++ unsigned long DataSize, OUT PNDIS_PACKET * ppPacket); + +-UINT deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + PNDIS_PACKET pPacket, +- IN PUCHAR pData, IN ULONG DataSize); ++ u8 *pData, unsigned long DataSize); + +-NDIS_STATUS RTMPCheckRxError(IN PRTMP_ADAPTER pAd, ++int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHeader, + IN PRXWI_STRUC pRxWI, + IN PRT28XX_RXD_STRUC pRxINFO); + +-VOID RTUSBMlmeHardTransmit(IN PRTMP_ADAPTER pAd, IN PMGMT_STRUC pMgmt); ++void RTUSBMlmeHardTransmit(IN PRTMP_ADAPTER pAd, IN PMGMT_STRUC pMgmt); + +-INT MlmeThread(IN PVOID Context); ++int MlmeThread(void *Context); + + /* */ + /* Function Prototype in rtusb_data.c */ + /* */ +-NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UINT32 NumberRequired); ++int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++ u8 BulkOutPipeId, ++ u32 NumberRequired); + +-BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId); ++BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, u8 BulkOutPipeId); + +-VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + IN PTXINFO_STRUC pTxInfo, +- IN USHORT USBDMApktLen, ++ u16 USBDMApktLen, + IN BOOLEAN bWiv, +- IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst); ++ u8 QueueSel, u8 NextValid, u8 TxBurst); + + /* */ + /* Function Prototype in cmm_data_usb.c */ + /* */ +-USHORT RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN BOOLEAN bIsLast, OUT USHORT * FreeNumber); ++ IN BOOLEAN bIsLast, u16 * FreeNumber); + +-USHORT RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, + IN BOOLEAN bIsLast, +- OUT USHORT * FreeNumber); ++ u16 * FreeNumber); + +-USHORT RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR fragNum, OUT USHORT * FreeNumber); ++ u8 fragNum, u16 * FreeNumber); + +-USHORT RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, ++u16 RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN UCHAR frameNum, OUT USHORT * FreeNumber); ++ u8 frameNum, u16 * FreeNumber); + +-VOID RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, ++void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, +- IN USHORT totalMPDUSize, IN USHORT TxIdx); ++ u16 totalMPDUSize, u16 TxIdx); + +-VOID RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, IN USHORT TxIdx); ++void RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, u16 TxIdx); + +-VOID RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, IN UCHAR QueIdx); ++void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, u8 QueIdx); + + int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, ++ u8 QueIdx, + IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, IN UINT SrcBufLen); ++ u8 *pSrcBufVA, u32 SrcBufLen); + +-VOID RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, +- IN UCHAR QueIdx, +- IN UCHAR * pNullFrame, IN UINT32 frameLen); ++void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++ u8 QueIdx, ++ u8 * pNullFrame, u32 frameLen); + +-VOID RtmpUsbStaAsicForceWakeupTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + +-VOID RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); + +-VOID RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp); ++void RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++ u16 TbttNumToNextWakeUp); + +-VOID RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd); + +-VOID RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd); ++void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd); + #endif /* RTMP_MAC_USB // */ + +-VOID AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); ++void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel); + +-VOID AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, IN UCHAR Channel); ++void AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, u8 Channel); + + #ifdef RTMP_TIMER_TASK_SUPPORT +-INT RtmpTimerQThread(IN OUT PVOID Context); ++int RtmpTimerQThread(IN void *Context); + + RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, + IN RALINK_TIMER_STRUCT * pTimer); +@@ -4239,28 +4239,28 @@ void RtmpTimerQExit(IN RTMP_ADAPTER * pAd); + void RtmpTimerQInit(IN RTMP_ADAPTER * pAd); + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + +-VOID AsicStaBbpTuning(IN PRTMP_ADAPTER pAd); ++void AsicStaBbpTuning(IN PRTMP_ADAPTER pAd); + + BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, ++ u8 MaxSupportedRateIn500Kbps, + IN HT_CAPABILITY_IE * pHtCapability, +- IN UCHAR HtCapabilityLen, ++ u8 HtCapabilityLen, + IN ADD_HT_INFO_IE * pAddHtInfo, +- IN UCHAR AddHtInfoLen, IN USHORT CapabilityInfo); ++ u8 AddHtInfoLen, u16 CapabilityInfo); + + BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + IN PMLME_QUEUE_ELEM pElem, + IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, IN ULONG ElementLen); ++ char *pSMName, ++ u16 SeqNo, ++ u8 *pNewElement, unsigned long ElementLen); + + void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd); + +-VOID ReSyncBeaconTime(IN PRTMP_ADAPTER pAd); ++void ReSyncBeaconTime(IN PRTMP_ADAPTER pAd); + +-VOID RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, IN UCHAR BandWidth); ++void RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, u8 BandWidth); + + int rt28xx_close(IN PNET_DEV dev); + int rt28xx_open(IN PNET_DEV dev); +@@ -4270,7 +4270,7 @@ int rt28xx_open(IN PNET_DEV dev); + #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) + + #ifdef LINUX +-__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) ++__inline int VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) + { + if (VIRTUAL_IF_NUM(pAd) == 0) { + if (rt28xx_open(pAd->net_dev) != 0) { +@@ -4284,7 +4284,7 @@ __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) + return 0; + } + +-__inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) ++__inline void VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + { + VIRTUAL_IF_DEC(pAd); + if (VIRTUAL_IF_NUM(pAd) == 0) +@@ -4298,12 +4298,12 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + TODO: Maybe we need to move these function prototypes to other proper place. + */ + int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, +- IN UINT32 eventType, +- IN INT flags, +- IN PUCHAR pSrcMac, +- IN PUCHAR pData, IN UINT32 dataLen); ++ u32 eventType, ++ int flags, ++ u8 *pSrcMac, ++ u8 *pData, u32 dataLen); + +-int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, IN PUCHAR pMacAddr); ++int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, u8 *pMacAddr); + + int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, + IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook); +@@ -4312,32 +4312,32 @@ void RtmpOSNetDevClose(IN PNET_DEV pNetDev); + + void RtmpOSNetDevDetach(IN PNET_DEV pNetDev); + +-INT RtmpOSNetDevAlloc(IN PNET_DEV * pNewNetDev, IN UINT32 privDataSize); ++int RtmpOSNetDevAlloc(IN PNET_DEV * pNewNetDev, u32 privDataSize); + + void RtmpOSNetDevFree(IN PNET_DEV pNetDev); + +-PNET_DEV RtmpOSNetDevGetByName(IN PNET_DEV pNetDev, IN PSTRING pDevName); ++PNET_DEV RtmpOSNetDevGetByName(IN PNET_DEV pNetDev, char *pDevName); + + void RtmpOSNetDeviceRefPut(IN PNET_DEV pNetDev); + + PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, +- IN INT devType, +- IN INT devNum, +- IN INT privMemSize, IN PSTRING pNamePrefix); ++ int devType, ++ int devNum, ++ int privMemSize, char *pNamePrefix); + + /* + Task operation related function prototypes + */ + void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask); + +-INT RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask); ++int RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask); + +-NDIS_STATUS RtmpOSTaskKill(IN RTMP_OS_TASK * pTask); ++int RtmpOSTaskKill(IN RTMP_OS_TASK * pTask); + +-NDIS_STATUS RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, +- PSTRING pTaskName, VOID * pPriv); ++int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++ char *pTaskName, void * pPriv); + +-NDIS_STATUS RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + IN int (*fn) (void *), IN void *arg); + + /* +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index ea8d2ed..a089472 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -161,7 +161,7 @@ + * EEPROM operation related marcos + */ + #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ +- (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value)) ++ (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (u16)(_offset), (u16 *)&(_value)) + + /* ------------------------------------------------------------------- */ + /* E2PROM data layout */ +@@ -172,10 +172,10 @@ + /* */ + typedef union _MCU_LEDCS_STRUC { + struct { +- UCHAR LedMode:7; +- UCHAR Polarity:1; ++ u8 LedMode:7; ++ u8 Polarity:1; + } field; +- UCHAR word; ++ u8 word; + } MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC; + + /* */ +@@ -183,32 +183,32 @@ typedef union _MCU_LEDCS_STRUC { + /* */ + typedef union _EEPROM_ANTENNA_STRUC { + struct { +- USHORT RxPath:4; /* 1: 1R, 2: 2R, 3: 3R */ +- USHORT TxPath:4; /* 1: 1T, 2: 2T */ +- USHORT RfIcType:4; /* see E2PROM document */ +- USHORT Rsv:4; ++ u16 RxPath:4; /* 1: 1R, 2: 2R, 3: 3R */ ++ u16 TxPath:4; /* 1: 1T, 2: 2T */ ++ u16 RfIcType:4; /* see E2PROM document */ ++ u16 Rsv:4; + } field; +- USHORT word; ++ u16 word; + } EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC; + + typedef union _EEPROM_NIC_CINFIG2_STRUC { + struct { +- USHORT HardwareRadioControl:1; /* 1:enable, 0:disable */ +- USHORT DynamicTxAgcControl:1; /* */ +- USHORT ExternalLNAForG:1; /* */ +- USHORT ExternalLNAForA:1; /* external LNA enable for 2.4G */ +- USHORT CardbusAcceleration:1; /* !!! NOTE: 0 - enable, 1 - disable */ +- USHORT BW40MSidebandForG:1; +- USHORT BW40MSidebandForA:1; +- USHORT EnableWPSPBC:1; /* WPS PBC Control bit */ +- USHORT BW40MAvailForG:1; /* 0:enable, 1:disable */ +- USHORT BW40MAvailForA:1; /* 0:enable, 1:disable */ +- USHORT Rsv1:1; /* must be 0 */ +- USHORT AntDiversity:1; /* Antenna diversity */ +- USHORT Rsv2:3; /* must be 0 */ +- USHORT DACTestBit:1; /* control if driver should patch the DAC issue */ ++ u16 HardwareRadioControl:1; /* 1:enable, 0:disable */ ++ u16 DynamicTxAgcControl:1; /* */ ++ u16 ExternalLNAForG:1; /* */ ++ u16 ExternalLNAForA:1; /* external LNA enable for 2.4G */ ++ u16 CardbusAcceleration:1; /* !!! NOTE: 0 - enable, 1 - disable */ ++ u16 BW40MSidebandForG:1; ++ u16 BW40MSidebandForA:1; ++ u16 EnableWPSPBC:1; /* WPS PBC Control bit */ ++ u16 BW40MAvailForG:1; /* 0:enable, 1:disable */ ++ u16 BW40MAvailForA:1; /* 0:enable, 1:disable */ ++ u16 Rsv1:1; /* must be 0 */ ++ u16 AntDiversity:1; /* Antenna diversity */ ++ u16 Rsv2:3; /* must be 0 */ ++ u16 DACTestBit:1; /* control if driver should patch the DAC issue */ + } field; +- USHORT word; ++ u16 word; + } EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC; + + /* */ +@@ -216,43 +216,43 @@ typedef union _EEPROM_NIC_CINFIG2_STRUC { + /* */ + typedef union _EEPROM_TX_PWR_STRUC { + struct { +- CHAR Byte0; /* Low Byte */ +- CHAR Byte1; /* High Byte */ ++ char Byte0; /* Low Byte */ ++ char Byte1; /* High Byte */ + } field; +- USHORT word; ++ u16 word; + } EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC; + + typedef union _EEPROM_VERSION_STRUC { + struct { +- UCHAR FaeReleaseNumber; /* Low Byte */ +- UCHAR Version; /* High Byte */ ++ u8 FaeReleaseNumber; /* Low Byte */ ++ u8 Version; /* High Byte */ + } field; +- USHORT word; ++ u16 word; + } EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC; + + typedef union _EEPROM_LED_STRUC { + struct { +- USHORT PolarityRDY_G:1; /* Polarity RDY_G setting. */ +- USHORT PolarityRDY_A:1; /* Polarity RDY_A setting. */ +- USHORT PolarityACT:1; /* Polarity ACT setting. */ +- USHORT PolarityGPIO_0:1; /* Polarity GPIO#0 setting. */ +- USHORT PolarityGPIO_1:1; /* Polarity GPIO#1 setting. */ +- USHORT PolarityGPIO_2:1; /* Polarity GPIO#2 setting. */ +- USHORT PolarityGPIO_3:1; /* Polarity GPIO#3 setting. */ +- USHORT PolarityGPIO_4:1; /* Polarity GPIO#4 setting. */ +- USHORT LedMode:5; /* Led mode. */ +- USHORT Rsvd:3; /* Reserved */ ++ u16 PolarityRDY_G:1; /* Polarity RDY_G setting. */ ++ u16 PolarityRDY_A:1; /* Polarity RDY_A setting. */ ++ u16 PolarityACT:1; /* Polarity ACT setting. */ ++ u16 PolarityGPIO_0:1; /* Polarity GPIO#0 setting. */ ++ u16 PolarityGPIO_1:1; /* Polarity GPIO#1 setting. */ ++ u16 PolarityGPIO_2:1; /* Polarity GPIO#2 setting. */ ++ u16 PolarityGPIO_3:1; /* Polarity GPIO#3 setting. */ ++ u16 PolarityGPIO_4:1; /* Polarity GPIO#4 setting. */ ++ u16 LedMode:5; /* Led mode. */ ++ u16 Rsvd:3; /* Reserved */ + } field; +- USHORT word; ++ u16 word; + } EEPROM_LED_STRUC, *PEEPROM_LED_STRUC; + + typedef union _EEPROM_TXPOWER_DELTA_STRUC { + struct { +- UCHAR DeltaValue:6; /* Tx Power dalta value (MAX=4) */ +- UCHAR Type:1; /* 1: plus the delta value, 0: minus the delta value */ +- UCHAR TxPowerEnable:1; /* Enable */ ++ u8 DeltaValue:6; /* Tx Power dalta value (MAX=4) */ ++ u8 Type:1; /* 1: plus the delta value, 0: minus the delta value */ ++ u8 TxPowerEnable:1; /* Enable */ + } field; +- UCHAR value; ++ u8 value; + } EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC; + + #endif /* __RTMP_CHIP_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_ckipmic.h b/drivers/staging/rt2860/rtmp_ckipmic.h +index a8108f7..301ba5f 100644 +--- a/drivers/staging/rt2860/rtmp_ckipmic.h ++++ b/drivers/staging/rt2860/rtmp_ckipmic.h +@@ -39,25 +39,25 @@ + + typedef struct _MIC_CONTEXT { + /* --- MMH context */ +- UCHAR CK[16]; /* the key */ +- UCHAR coefficient[16]; /* current aes counter mode coefficients */ +- ULONGLONG accum; /* accumulated mic, reduced to u32 in final() */ +- UINT position; /* current position (byte offset) in message */ +- UCHAR part[4]; /* for conversion of message to u32 for mmh */ ++ u8 CK[16]; /* the key */ ++ u8 coefficient[16]; /* current aes counter mode coefficients */ ++ unsigned long long accum; /* accumulated mic, reduced to u32 in final() */ ++ u32 position; /* current position (byte offset) in message */ ++ u8 part[4]; /* for conversion of message to u32 for mmh */ + } MIC_CONTEXT, *PMIC_CONTEXT; + +-VOID xor_128(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out); ++void xor_128(u8 *a, u8 *b, u8 *out); + +-UCHAR RTMPCkipSbox(IN UCHAR a); ++u8 RTMPCkipSbox(u8 a); + +-VOID xor_32(IN PUCHAR a, IN PUCHAR b, OUT PUCHAR out); ++void xor_32(u8 *a, u8 *b, u8 *out); + +-VOID next_key(IN PUCHAR key, IN INT round); ++void next_key(u8 *key, int round); + +-VOID byte_sub(IN PUCHAR in, OUT PUCHAR out); ++void byte_sub(u8 *in, u8 *out); + +-VOID shift_row(IN PUCHAR in, OUT PUCHAR out); ++void shift_row(u8 *in, u8 *out); + +-VOID mix_column(IN PUCHAR in, OUT PUCHAR out); ++void mix_column(u8 *in, u8 *out); + + #endif /*__RTMP_CKIPMIC_H__ */ +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index 39c27f9..92f6114 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -51,8 +51,8 @@ + #define RT_DEBUG_INFO 4 + #define RT_DEBUG_LOUD 5 + +-#define NIC_TAG ((ULONG)'0682') +-#define NIC_DBG_STRING ("**RT28xx**") ++#define NIC_TAG ((unsigned long)'0682') ++#define NIC_DBG_char ("**RT28xx**") + + #ifdef RTMP_MAC_USB + #define TX_RING_SIZE 8 /* 1 */ +@@ -65,9 +65,9 @@ + + /*#define PACKED */ + +-#define RALINK_2883_VERSION ((UINT32)0x28830300) +-#define RALINK_2880E_VERSION ((UINT32)0x28720200) +-#define RALINK_3070_VERSION ((UINT32)0x30700200) ++#define RALINK_2883_VERSION ((u32)0x28830300) ++#define RALINK_2880E_VERSION ((u32)0x28720200) ++#define RALINK_3070_VERSION ((u32)0x30700200) + + #define MAX_RX_PKT_LEN 1520 + +@@ -453,7 +453,7 @@ + /* Reason code definitions */ + #define REASON_RESERVED 0 + #define REASON_UNSPECIFY 1 +-#define REASON_NO_LONGER_VALID 2 ++#define REASON_NO_longER_VALID 2 + #define REASON_DEAUTH_STA_LEAVING 3 + #define REASON_DISASSOC_INACTIVE 4 + #define REASON_DISASSPC_AP_UNABLE 5 +@@ -533,7 +533,7 @@ + #define IE_TCLAS 14 /* 802.11e d9 */ + #define IE_SCHEDULE 15 /* 802.11e d9 */ + #define IE_CHALLENGE_TEXT 16 +-#define IE_POWER_CONSTRAINT 32 /* 802.11h d3.3 */ ++#define IE_POWER_CONSTRAint 32 /* 802.11h d3.3 */ + #define IE_POWER_CAPABILITY 33 /* 802.11h d3.3 */ + #define IE_TPC_REQUEST 34 /* 802.11h d3.3 */ + #define IE_TPC_REPORT 35 /* 802.11h d3.3 */ +@@ -980,10 +980,10 @@ + #define MODE_HTGREENFIELD 3 + + /* MCS for CCK. BW.SGI.STBC are reserved */ +-#define MCS_LONGP_RATE_1 0 /* long preamble CCK 1Mbps */ +-#define MCS_LONGP_RATE_2 1 /* long preamble CCK 1Mbps */ +-#define MCS_LONGP_RATE_5_5 2 +-#define MCS_LONGP_RATE_11 3 ++#define MCS_longP_RATE_1 0 /* long preamble CCK 1Mbps */ ++#define MCS_longP_RATE_2 1 /* long preamble CCK 1Mbps */ ++#define MCS_longP_RATE_5_5 2 ++#define MCS_longP_RATE_11 3 + #define MCS_SHORTP_RATE_1 4 /* long preamble CCK 1Mbps. short is forbidden in 1Mbps */ + #define MCS_SHORTP_RATE_2 5 /* short preamble CCK 2Mbps */ + #define MCS_SHORTP_RATE_5_5 6 +@@ -1109,7 +1109,7 @@ + #define IFS_BACKOFF 3 + + /* pTxD->RetryMode */ +-#define LONG_RETRY 1 ++#define long_RETRY 1 + #define SHORT_RETRY 0 + + /* Country Region definition */ +@@ -1211,7 +1211,7 @@ + + /* ========================= AP rtmp_def.h =========================== */ + /* value domain for pAd->EventTab.Log[].Event */ +-#define EVENT_RESET_ACCESS_POINT 0 /* Log = "hh:mm:ss Restart Access Point" */ ++#define EVENT_RESET_ACCESS_POint 0 /* Log = "hh:mm:ss Restart Access Point" */ + #define EVENT_ASSOCIATED 1 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 associated" */ + #define EVENT_DISASSOCIATED 2 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 left this BSS" */ + #define EVENT_AGED_OUT 3 /* Log = "hh:mm:ss STA 00:01:02:03:04:05 was aged-out and removed from this BSS" */ +@@ -1356,34 +1356,34 @@ + + /* Endian byte swapping codes */ + #define SWAP16(x) \ +- ((UINT16)( \ +- (((UINT16)(x) & (UINT16) 0x00ffU) << 8) | \ +- (((UINT16)(x) & (UINT16) 0xff00U) >> 8) )) ++ ((u16)( \ ++ (((u16)(x) & (u16)0x00ffU) << 8) | \ ++ (((u16)(x) & (u16)0xff00U) >> 8) )) + + #define SWAP32(x) \ +- ((UINT32)( \ +- (((UINT32)(x) & (UINT32) 0x000000ffUL) << 24) | \ +- (((UINT32)(x) & (UINT32) 0x0000ff00UL) << 8) | \ +- (((UINT32)(x) & (UINT32) 0x00ff0000UL) >> 8) | \ +- (((UINT32)(x) & (UINT32) 0xff000000UL) >> 24) )) ++ ((u32)( \ ++ (((u32)(x) & (u32)0x000000ffUL) << 24) | \ ++ (((u32)(x) & (u32)0x0000ff00UL) << 8) | \ ++ (((u32)(x) & (u32)0x00ff0000UL) >> 8) | \ ++ (((u32)(x) & (u32)0xff000000UL) >> 24) )) + + #define SWAP64(x) \ +- ((UINT64)( \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00000000000000ffULL) << 56) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x000000000000ff00ULL) << 40) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x0000000000ff0000ULL) << 24) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00000000ff000000ULL) << 8) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x000000ff00000000ULL) >> 8) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x0000ff0000000000ULL) >> 24) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0x00ff000000000000ULL) >> 40) | \ +- (UINT64)(((UINT64)(x) & (UINT64) 0xff00000000000000ULL) >> 56) )) +- +-#define cpu2le64(x) ((UINT64)(x)) +-#define le2cpu64(x) ((UINT64)(x)) +-#define cpu2le32(x) ((UINT32)(x)) +-#define le2cpu32(x) ((UINT32)(x)) +-#define cpu2le16(x) ((UINT16)(x)) +-#define le2cpu16(x) ((UINT16)(x)) ++ ((u64)( \ ++ (u64)(((u64)(x) & (u64)0x00000000000000ffULL) << 56) | \ ++ (u64)(((u64)(x) & (u64)0x000000000000ff00ULL) << 40) | \ ++ (u64)(((u64)(x) & (u64)0x0000000000ff0000ULL) << 24) | \ ++ (u64)(((u64)(x) & (u64)0x00000000ff000000ULL) << 8) | \ ++ (u64)(((u64)(x) & (u64)0x000000ff00000000ULL) >> 8) | \ ++ (u64)(((u64)(x) & (u64)0x0000ff0000000000ULL) >> 24) | \ ++ (u64)(((u64)(x) & (u64)0x00ff000000000000ULL) >> 40) | \ ++ (u64)(((u64)(x) & (u64)0xff00000000000000ULL) >> 56) )) ++ ++#define cpu2le64(x) ((u64)(x)) ++#define le2cpu64(x) ((u64)(x)) ++#define cpu2le32(x) ((u32)(x)) ++#define le2cpu32(x) ((u32)(x)) ++#define cpu2le16(x) ((u16)(x)) ++#define le2cpu16(x) ((u16)(x)) + #define cpu2be64(x) SWAP64((x)) + #define be2cpu64(x) SWAP64((x)) + #define cpu2be32(x) SWAP32((x)) +@@ -1395,7 +1395,7 @@ + + #define A2Dec(_X, _p) \ + { \ +- UCHAR *p; \ ++ u8 *p; \ + _X = 0; \ + p = _p; \ + while (((*p >= '0') && (*p <= '9'))) \ +diff --git a/drivers/staging/rt2860/rtmp_dot11.h b/drivers/staging/rt2860/rtmp_dot11.h +index fd9c720..e970343 100644 +--- a/drivers/staging/rt2860/rtmp_dot11.h ++++ b/drivers/staging/rt2860/rtmp_dot11.h +@@ -32,69 +32,69 @@ + + /* 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. */ + typedef struct PACKED { +- UINT32 MA:1; /*management action payload exist in (QoS Null+HTC) */ +- UINT32 TRQ:1; /*sounding request */ +- UINT32 MRQ:1; /*MCS feedback. Request for a MCS feedback */ +- UINT32 MRSorASI:3; /* MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. */ +- UINT32 MFS:3; /*SET to the received value of MRS. 0x111 for unsolicited MFB. */ +- UINT32 MFBorASC:7; /*Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available */ +- UINT32 CalPos:2; /* calibration position */ +- UINT32 CalSeq:2; /*calibration sequence */ +- UINT32 FBKReq:2; /*feedback request */ +- UINT32 CSISTEERING:2; /*CSI/ STEERING */ +- UINT32 ZLFAnnouce:1; /* ZLF announcement */ +- UINT32 rsv:5; /*calibration sequence */ +- UINT32 ACConstraint:1; /*feedback request */ +- UINT32 RDG:1; /*RDG / More PPDU */ ++ u32 MA:1; /*management action payload exist in (QoS Null+HTC) */ ++ u32 TRQ:1; /*sounding request */ ++ u32 MRQ:1; /*MCS feedback. Request for a MCS feedback */ ++ u32 MRSorASI:3; /* MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110. */ ++ u32 MFS:3; /*SET to the received value of MRS. 0x111 for unsolicited MFB. */ ++ u32 MFBorASC:7; /*Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available */ ++ u32 CalPos:2; /* calibration position */ ++ u32 CalSeq:2; /*calibration sequence */ ++ u32 FBKReq:2; /*feedback request */ ++ u32 CSISTEERING:2; /*CSI/ STEERING */ ++ u32 ZLFAnnouce:1; /* ZLF announcement */ ++ u32 rsv:5; /*calibration sequence */ ++ u32 ACConstraint:1; /*feedback request */ ++ u32 RDG:1; /*RDG / More PPDU */ + } HT_CONTROL, *PHT_CONTROL; + + /* 2-byte QOS CONTROL field */ + typedef struct PACKED { +- USHORT TID:4; +- USHORT EOSP:1; +- USHORT AckPolicy:2; /*0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA */ +- USHORT AMsduPresent:1; +- USHORT Txop_QueueSize:8; ++ u16 TID:4; ++ u16 EOSP:1; ++ u16 AckPolicy:2; /*0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA */ ++ u16 AMsduPresent:1; ++ u16 Txop_QueueSize:8; + } QOS_CONTROL, *PQOS_CONTROL; + + /* 2-byte Frame control field */ + typedef struct PACKED { +- USHORT Ver:2; /* Protocol version */ +- USHORT Type:2; /* MSDU type */ +- USHORT SubType:4; /* MSDU subtype */ +- USHORT ToDs:1; /* To DS indication */ +- USHORT FrDs:1; /* From DS indication */ +- USHORT MoreFrag:1; /* More fragment bit */ +- USHORT Retry:1; /* Retry status bit */ +- USHORT PwrMgmt:1; /* Power management bit */ +- USHORT MoreData:1; /* More data bit */ +- USHORT Wep:1; /* Wep data */ +- USHORT Order:1; /* Strict order expected */ ++ u16 Ver:2; /* Protocol version */ ++ u16 Type:2; /* MSDU type */ ++ u16 SubType:4; /* MSDU subtype */ ++ u16 ToDs:1; /* To DS indication */ ++ u16 FrDs:1; /* From DS indication */ ++ u16 MoreFrag:1; /* More fragment bit */ ++ u16 Retry:1; /* Retry status bit */ ++ u16 PwrMgmt:1; /* Power management bit */ ++ u16 MoreData:1; /* More data bit */ ++ u16 Wep:1; /* Wep data */ ++ u16 Order:1; /* Strict order expected */ + } FRAME_CONTROL, *PFRAME_CONTROL; + + typedef struct PACKED _HEADER_802_11 { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR Addr3[MAC_ADDR_LEN]; +- USHORT Frag:4; +- USHORT Sequence:12; +- UCHAR Octet[0]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u8 Addr3[MAC_ADDR_LEN]; ++ u16 Frag:4; ++ u16 Sequence:12; ++ u8 Octet[0]; + } HEADER_802_11, *PHEADER_802_11; + + typedef struct PACKED _PSPOLL_FRAME { + FRAME_CONTROL FC; +- USHORT Aid; +- UCHAR Bssid[MAC_ADDR_LEN]; +- UCHAR Ta[MAC_ADDR_LEN]; ++ u16 Aid; ++ u8 Bssid[MAC_ADDR_LEN]; ++ u8 Ta[MAC_ADDR_LEN]; + } PSPOLL_FRAME, *PPSPOLL_FRAME; + + typedef struct PACKED _RTS_FRAME { + FRAME_CONTROL FC; +- USHORT Duration; +- UCHAR Addr1[MAC_ADDR_LEN]; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 Duration; ++ u8 Addr1[MAC_ADDR_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; + } RTS_FRAME, *PRTS_FRAME; + + #endif /* __DOT11_BASE_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_iface.h b/drivers/staging/rt2860/rtmp_iface.h +index 84b08a0..cafb618 100644 +--- a/drivers/staging/rt2860/rtmp_iface.h ++++ b/drivers/staging/rt2860/rtmp_iface.h +@@ -50,8 +50,8 @@ typedef struct _INF_PCI_CONFIG_ { + } INF_PCI_CONFIG; + + typedef struct _INF_USB_CONFIG_ { +- UINT8 BulkInEpAddr; /* bulk-in endpoint address */ +- UINT8 BulkOutEpAddr[6]; /* bulk-out endpoint address */ ++ u8 BulkInEpAddr; /* bulk-in endpoint address */ ++ u8 BulkOutEpAddr[6]; /* bulk-out endpoint address */ + } INF_USB_CONFIG; + + typedef struct _INF_RBUS_CONFIG_ { +diff --git a/drivers/staging/rt2860/rtmp_mcu.h b/drivers/staging/rt2860/rtmp_mcu.h +index 1c31700..378f01e 100644 +--- a/drivers/staging/rt2860/rtmp_mcu.h ++++ b/drivers/staging/rt2860/rtmp_mcu.h +@@ -38,12 +38,12 @@ + #ifndef __RTMP_MCU_H__ + #define __RTMP_MCU_H__ + +-INT RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd); ++int RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd); + +-NDIS_STATUS RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd); ++int RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd); + +-INT RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, +- IN UCHAR Command, +- IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1); ++int RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++ u8 Command, ++ u8 Token, u8 Arg0, u8 Arg1); + + #endif /* __RTMP_MCU_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +index e136576..441571d 100644 +--- a/drivers/staging/rt2860/rtmp_timer.h ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -55,10 +55,10 @@ + /* submit to ctrl pipe). So we need a wrapper function to take care it. */ + + #ifdef RTMP_TIMER_TASK_SUPPORT +-typedef VOID(*RTMP_TIMER_TASK_HANDLE) (IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3); ++typedef void(*RTMP_TIMER_TASK_HANDLE) (void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3); + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + + typedef struct _RALINK_TIMER_STRUCT { +@@ -67,8 +67,8 @@ typedef struct _RALINK_TIMER_STRUCT { + BOOLEAN State; /* True if timer cancelled */ + BOOLEAN PeriodicType; /* True if timer is periodic timer */ + BOOLEAN Repeat; /* True if periodic timer */ +- ULONG TimerValue; /* Timer value in milliseconds */ +- ULONG cookie; /* os specific object */ ++ unsigned long TimerValue; /* Timer value in milliseconds */ ++ unsigned long cookie; /* os specific object */ + #ifdef RTMP_TIMER_TASK_SUPPORT + RTMP_TIMER_TASK_HANDLE handle; + void *pAd; +@@ -109,7 +109,7 @@ void rtmp_timer_##_func(unsigned long data) \ + { \ + PRALINK_TIMER_STRUCT pTimer = (PRALINK_TIMER_STRUCT) data; \ + \ +- _func(NULL, (PVOID) pTimer->cookie, NULL, pTimer); \ ++ _func(NULL, (void *)pTimer->cookie, NULL, pTimer); \ + if (pTimer->Repeat) \ + RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ + } +diff --git a/drivers/staging/rt2860/rtmp_type.h b/drivers/staging/rt2860/rtmp_type.h +index 11e3591..8de1428 100644 +--- a/drivers/staging/rt2860/rtmp_type.h ++++ b/drivers/staging/rt2860/rtmp_type.h +@@ -38,100 +38,51 @@ + #ifndef __RTMP_TYPE_H__ + #define __RTMP_TYPE_H__ + +-#define PACKED __attribute__ ((packed)) +- +-#ifdef LINUX +-/* Put platform dependent declaration here */ +-/* For example, linux type definition */ +-typedef unsigned char UINT8; +-typedef unsigned short UINT16; +-typedef unsigned int UINT32; +-typedef unsigned long long UINT64; +-typedef int INT32; +-typedef long long INT64; +-#endif /* LINUX // */ +- +-typedef unsigned char *PUINT8; +-typedef unsigned short *PUINT16; +-typedef unsigned int *PUINT32; +-typedef unsigned long long *PUINT64; +-typedef int *PINT32; +-typedef long long *PINT64; +- +-/* modified for fixing compile warning on Sigma 8634 platform */ +-typedef char STRING; +-typedef signed char CHAR; +- +-typedef signed short SHORT; +-typedef signed int INT; +-typedef signed long LONG; +-typedef signed long long LONGLONG; ++#include + +-#ifdef LINUX +-typedef unsigned char UCHAR; +-typedef unsigned short USHORT; +-typedef unsigned int UINT; +-typedef unsigned long ULONG; +-#endif /* LINUX // */ +-typedef unsigned long long ULONGLONG; ++#define PACKED __attribute__ ((packed)) + + typedef unsigned char BOOLEAN; +-#ifdef LINUX +-typedef void VOID; +-#endif /* LINUX // */ +- +-typedef char *PSTRING; +-typedef VOID *PVOID; +-typedef CHAR *PCHAR; +-typedef UCHAR *PUCHAR; +-typedef USHORT *PUSHORT; +-typedef LONG *PLONG; +-typedef ULONG *PULONG; +-typedef UINT *PUINT; +- +-typedef unsigned int NDIS_MEDIA_STATE; + + typedef union _LARGE_INTEGER { + struct { +- UINT LowPart; +- INT32 HighPart; ++ u32 LowPart; ++ int HighPart; + } u; +- INT64 QuadPart; ++ long long QuadPart; + } LARGE_INTEGER; + + /* */ + /* Register set pair for initialzation register set definition */ + /* */ + typedef struct _RTMP_REG_PAIR { +- ULONG Register; +- ULONG Value; ++ unsigned long Register; ++ unsigned long Value; + } RTMP_REG_PAIR, *PRTMP_REG_PAIR; + + typedef struct _REG_PAIR { +- UCHAR Register; +- UCHAR Value; ++ u8 Register; ++ u8 Value; + } REG_PAIR, *PREG_PAIR; + + /* */ + /* Register set pair for initialzation register set definition */ + /* */ + typedef struct _RTMP_RF_REGS { +- UCHAR Channel; +- ULONG R1; +- ULONG R2; +- ULONG R3; +- ULONG R4; ++ u8 Channel; ++ unsigned long R1; ++ unsigned long R2; ++ unsigned long R3; ++ unsigned long R4; + } RTMP_RF_REGS, *PRTMP_RF_REGS; + + typedef struct _FREQUENCY_ITEM { +- UCHAR Channel; +- UCHAR N; +- UCHAR R; +- UCHAR K; ++ u8 Channel; ++ u8 N; ++ u8 R; ++ u8 K; + } FREQUENCY_ITEM, *PFREQUENCY_ITEM; + +-typedef int NTSTATUS; +- + #define STATUS_SUCCESS 0x00 + #define STATUS_UNSUCCESSFUL 0x01 + +diff --git a/drivers/staging/rt2860/rtusb_io.h b/drivers/staging/rt2860/rtusb_io.h +index ec1ffba..547f6ab 100644 +--- a/drivers/staging/rt2860/rtusb_io.h ++++ b/drivers/staging/rt2860/rtusb_io.h +@@ -79,25 +79,25 @@ + /*CMDTHREAD_VENDOR_EEPROM_READ */ + /*CMDTHREAD_VENDOR_EEPROM_WRITE */ + typedef struct _CMDHandler_TLV { +- USHORT Offset; +- USHORT Length; +- UCHAR DataFirst; ++ u16 Offset; ++ u16 Length; ++ u8 DataFirst; + } CMDHandler_TLV, *PCMDHandler_TLV; + + typedef struct _CmdQElmt { +- UINT command; +- PVOID buffer; +- ULONG bufferlength; ++ u32 command; ++ void *buffer; ++ unsigned long bufferlength; + BOOLEAN CmdFromNdis; + BOOLEAN SetOperation; + struct _CmdQElmt *next; + } CmdQElmt, *PCmdQElmt; + + typedef struct _CmdQ { +- UINT size; ++ u32 size; + CmdQElmt *head; + CmdQElmt *tail; +- UINT32 CmdQState; ++ u32 CmdQState; + } CmdQ, *PCmdQ; + + #define EnqueueCmd(cmdq, cmdqelmt) \ +diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h +index b1e3ba0..b4e9fbc 100644 +--- a/drivers/staging/rt2860/spectrum.h ++++ b/drivers/staging/rt2860/spectrum.h +@@ -31,7 +31,7 @@ + #include "rtmp_type.h" + #include "spectrum_def.h" + +-CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); ++char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); + + /* + ========================================================================== +@@ -45,16 +45,16 @@ CHAR RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); + Return : None. + ========================================================================== + */ +-VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pOutBuffer, +- OUT PULONG pFrameLen, +- IN UINT8 TotalLen, +- IN UINT8 Category, +- IN UINT8 Action, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 NumOfRepetitions); ++void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++ u8 *pOutBuffer, ++ unsigned long *pFrameLen, ++ u8 TotalLen, ++ u8 Category, ++ u8 Action, ++ u8 MeasureToken, ++ u8 MeasureReqMode, ++ u8 MeasureReqType, ++ u8 NumOfRepetitions); + + /* + ========================================================================== +@@ -68,13 +68,13 @@ VOID MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, +- IN UINT8 MeasureToken, +- IN UINT8 MeasureReqMode, +- IN UINT8 MeasureReqType, +- IN UINT8 ReportInfoLen, IN PUINT8 pReportInfo); ++void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, ++ u8 DialogToken, ++ u8 MeasureToken, ++ u8 MeasureReqMode, ++ u8 MeasureReqType, ++ u8 ReportInfoLen, u8 *pReportInfo); + + /* + ========================================================================== +@@ -88,7 +88,7 @@ VOID EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken); ++void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken); + + /* + ========================================================================== +@@ -102,9 +102,9 @@ VOID EnqueueTPCReq(IN PRTMP_ADAPTER pAd, IN PUCHAR pDA, IN UCHAR DialogToken); + Return : None. + ========================================================================== + */ +-VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, +- IN UINT8 DialogToken, IN UINT8 TxPwr, IN UINT8 LinkMargin); ++void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, ++ u8 DialogToken, u8 TxPwr, u8 LinkMargin); + + /* + ========================================================================== +@@ -120,8 +120,8 @@ VOID EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, IN UINT8 ChSwMode, IN UINT8 NewCh); ++void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, u8 ChSwMode, u8 NewCh); + + /* + ========================================================================== +@@ -135,7 +135,7 @@ VOID EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + + /* + ========================================================================== +@@ -146,44 +146,44 @@ VOID PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + Return : None. + ========================================================================== + */ +-INT Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg); + +-INT Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, char *arg); + +-INT Set_PwrConstraint(IN PRTMP_ADAPTER pAd, IN PSTRING arg); ++int Set_PwrConstraint(IN PRTMP_ADAPTER pAd, char *arg); + +-VOID MeasureReqTabInit(IN PRTMP_ADAPTER pAd); ++void MeasureReqTabInit(IN PRTMP_ADAPTER pAd); + +-VOID MeasureReqTabExit(IN PRTMP_ADAPTER pAd); ++void MeasureReqTabExit(IN PRTMP_ADAPTER pAd); + +-PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); ++PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken); + +-PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); ++PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken); + +-VOID MeasureReqDelete(IN PRTMP_ADAPTER pAd, IN UINT8 DialogToken); ++void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken); + +-VOID InsertChannelRepIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PSTRING pCountry, IN UINT8 RegulatoryClass); ++void InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ char *pCountry, u8 RegulatoryClass); + +-VOID InsertTpcReportIE(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN UINT8 TxPwr, IN UINT8 LinkMargin); ++void InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 TxPwr, u8 LinkMargin); + +-VOID InsertDialogToken(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, IN UINT8 DialogToken); ++void InsertDialogToken(IN PRTMP_ADAPTER pAd, ++ u8 *pFrameBuf, ++ unsigned long *pFrameLen, u8 DialogToken); + +-VOID TpcReqTabInit(IN PRTMP_ADAPTER pAd); ++void TpcReqTabInit(IN PRTMP_ADAPTER pAd); + +-VOID TpcReqTabExit(IN PRTMP_ADAPTER pAd); ++void TpcReqTabExit(IN PRTMP_ADAPTER pAd); + +-VOID NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pRA, +- IN PUCHAR pTA, IN UINT8 ChSwMode, IN UINT8 Channel); ++void NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++ u8 *pRA, ++ u8 *pTA, u8 ChSwMode, u8 Channel); + +-VOID RguClass_BuildBcnChList(IN PRTMP_ADAPTER pAd, +- OUT PUCHAR pBuf, OUT PULONG pBufLen); ++void RguClass_BuildBcnChList(IN PRTMP_ADAPTER pAd, ++ u8 *pBuf, unsigned long *pBufLen); + #endif /* __SPECTRUM_H__ // */ +diff --git a/drivers/staging/rt2860/spectrum_def.h b/drivers/staging/rt2860/spectrum_def.h +index d100c31..30678b9 100644 +--- a/drivers/staging/rt2860/spectrum_def.h ++++ b/drivers/staging/rt2860/spectrum_def.h +@@ -55,40 +55,40 @@ + + typedef struct _MEASURE_REQ_ENTRY { + struct _MEASURE_REQ_ENTRY *pNext; +- ULONG lastTime; ++ unsigned long lastTime; + BOOLEAN Valid; +- UINT8 DialogToken; +- UINT8 MeasureDialogToken[3]; /* 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. */ ++ u8 DialogToken; ++ u8 MeasureDialogToken[3]; /* 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. */ + } MEASURE_REQ_ENTRY, *PMEASURE_REQ_ENTRY; + + typedef struct _MEASURE_REQ_TAB { +- UCHAR Size; ++ u8 Size; + PMEASURE_REQ_ENTRY Hash[MAX_HASH_MEASURE_REQ_TAB_SIZE]; + MEASURE_REQ_ENTRY Content[MAX_MEASURE_REQ_TAB_SIZE]; + } MEASURE_REQ_TAB, *PMEASURE_REQ_TAB; + + typedef struct _TPC_REQ_ENTRY { + struct _TPC_REQ_ENTRY *pNext; +- ULONG lastTime; ++ unsigned long lastTime; + BOOLEAN Valid; +- UINT8 DialogToken; ++ u8 DialogToken; + } TPC_REQ_ENTRY, *PTPC_REQ_ENTRY; + + typedef struct _TPC_REQ_TAB { +- UCHAR Size; ++ u8 Size; + PTPC_REQ_ENTRY Hash[MAX_HASH_TPC_REQ_TAB_SIZE]; + TPC_REQ_ENTRY Content[MAX_TPC_REQ_TAB_SIZE]; + } TPC_REQ_TAB, *PTPC_REQ_TAB; + + /* The regulatory information */ + typedef struct _DOT11_CHANNEL_SET { +- UCHAR NumberOfChannels; +- UINT8 MaxTxPwr; +- UCHAR ChannelList[16]; ++ u8 NumberOfChannels; ++ u8 MaxTxPwr; ++ u8 ChannelList[16]; + } DOT11_CHANNEL_SET, *PDOT11_CHANNEL_SET; + + typedef struct _DOT11_REGULATORY_INFORMATION { +- UCHAR RegulatoryClass; ++ u8 RegulatoryClass; + DOT11_CHANNEL_SET ChannelSet; + } DOT11_REGULATORY_INFORMATION, *PDOT11_REGULATORY_INFORMATION; + +@@ -102,97 +102,97 @@ typedef struct _DOT11_REGULATORY_INFORMATION { + #define RM_NOISE_HISTOGRAM 4 + + typedef struct PACKED _TPC_REPORT_INFO { +- UINT8 TxPwr; +- UINT8 LinkMargin; ++ u8 TxPwr; ++ u8 LinkMargin; + } TPC_REPORT_INFO, *PTPC_REPORT_INFO; + + typedef struct PACKED _CH_SW_ANN_INFO { +- UINT8 ChSwMode; +- UINT8 Channel; +- UINT8 ChSwCnt; ++ u8 ChSwMode; ++ u8 Channel; ++ u8 ChSwCnt; + } CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; + + typedef union PACKED _MEASURE_REQ_MODE { + struct PACKED { +- UINT8 Parallel:1; +- UINT8 Enable:1; +- UINT8 Request:1; +- UINT8 Report:1; +- UINT8 DurationMandatory:1; +- UINT8:3; ++ u8 Parallel:1; ++ u8 Enable:1; ++ u8 Request:1; ++ u8 Report:1; ++ u8 DurationMandatory:1; ++ u8:3; + } field; +- UINT8 word; ++ u8 word; + } MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; + + typedef struct PACKED _MEASURE_REQ { +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; ++ u8 ChNum; ++ u64 MeasureStartTime; ++ u16 MeasureDuration; + } MEASURE_REQ, *PMEASURE_REQ; + + typedef struct PACKED _MEASURE_REQ_INFO { +- UINT8 Token; ++ u8 Token; + MEASURE_REQ_MODE ReqMode; +- UINT8 ReqType; +- UINT8 Oct[0]; ++ u8 ReqType; ++ u8 Oct[0]; + } MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; + + typedef union PACKED _MEASURE_BASIC_REPORT_MAP { + struct PACKED { +- UINT8 BSS:1; ++ u8 BSS:1; + +- UINT8 OfdmPreamble:1; +- UINT8 UnidentifiedSignal:1; +- UINT8 Radar:1; +- UINT8 Unmeasure:1; +- UINT8 Rev:3; ++ u8 OfdmPreamble:1; ++ u8 UnidentifiedSignal:1; ++ u8 Radar:1; ++ u8 Unmeasure:1; ++ u8 Rev:3; + } field; +- UINT8 word; ++ u8 word; + } MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; + + typedef struct PACKED _MEASURE_BASIC_REPORT { +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; ++ u8 ChNum; ++ u64 MeasureStartTime; ++ u16 MeasureDuration; + MEASURE_BASIC_REPORT_MAP Map; + } MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; + + typedef struct PACKED _MEASURE_CCA_REPORT { +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 CCA_Busy_Fraction; ++ u8 ChNum; ++ u64 MeasureStartTime; ++ u16 MeasureDuration; ++ u8 CCA_Busy_Fraction; + } MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; + + typedef struct PACKED _MEASURE_RPI_REPORT { +- UINT8 ChNum; +- UINT64 MeasureStartTime; +- UINT16 MeasureDuration; +- UINT8 RPI_Density[8]; ++ u8 ChNum; ++ u64 MeasureStartTime; ++ u16 MeasureDuration; ++ u8 RPI_Density[8]; + } MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; + + typedef union PACKED _MEASURE_REPORT_MODE { + struct PACKED { +- UINT8 Late:1; +- UINT8 Incapable:1; +- UINT8 Refused:1; +- UINT8 Rev:5; ++ u8 Late:1; ++ u8 Incapable:1; ++ u8 Refused:1; ++ u8 Rev:5; + } field; +- UINT8 word; ++ u8 word; + } MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; + + typedef struct PACKED _MEASURE_REPORT_INFO { +- UINT8 Token; +- UINT8 ReportMode; +- UINT8 ReportType; +- UINT8 Octect[0]; ++ u8 Token; ++ u8 ReportMode; ++ u8 ReportType; ++ u8 Octect[0]; + } MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; + + typedef struct PACKED _QUIET_INFO { +- UINT8 QuietCnt; +- UINT8 QuietPeriod; +- UINT16 QuietDuration; +- UINT16 QuietOffset; ++ u8 QuietCnt; ++ u8 QuietPeriod; ++ u16 QuietDuration; ++ u16 QuietOffset; + } QUIET_INFO, *PQUIET_INFO; + + #endif /* __SPECTRUM_DEF_H__ // */ +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index c5a1738..f2192ff 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -36,7 +36,7 @@ + */ + #include "../rt_config.h" + +-UCHAR CipherWpaTemplate[] = { ++u8 CipherWpaTemplate[] = { + 0xdd, /* WPA IE */ + 0x16, /* Length */ + 0x00, 0x50, 0xf2, 0x01, /* oui */ +@@ -48,7 +48,7 @@ UCHAR CipherWpaTemplate[] = { + 0x00, 0x50, 0xf2, 0x01 /* authentication */ + }; + +-UCHAR CipherWpa2Template[] = { ++u8 CipherWpa2Template[] = { + 0x30, /* RSN IE */ + 0x14, /* Length */ + 0x01, 0x00, /* Version */ +@@ -60,7 +60,7 @@ UCHAR CipherWpa2Template[] = { + 0x00, 0x00, /* RSN capability */ + }; + +-UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; ++u8 Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; + + /* + ========================================================================== +@@ -73,7 +73,7 @@ UCHAR Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; + + ========================================================================== + */ +-VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, ++void AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(S, Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, +@@ -165,9 +165,9 @@ VOID AssocStateMachineInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID AssocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void AssocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -193,9 +193,9 @@ VOID AssocTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID ReassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void ReassocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -221,9 +221,9 @@ VOID ReassocTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID DisassocTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void DisassocTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -259,23 +259,23 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR ApAddr[6]; ++ u8 ApAddr[6]; + HEADER_802_11 AssocHdr; +- UCHAR WmeIe[9] = ++ u8 WmeIe[9] = + { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, + 0x00 }; +- USHORT ListenIntv; +- ULONG Timeout; +- USHORT CapabilityInfo; ++ u16 ListenIntv; ++ unsigned long Timeout; ++ u16 CapabilityInfo; + BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- ULONG tmp; +- USHORT VarIesOffset; +- USHORT Status; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen = 0; ++ unsigned long tmp; ++ u16 VarIesOffset; ++ u16 Status; + + /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { +@@ -377,9 +377,9 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* HT */ + if ((pAd->MlmeAux.HtCapabilityLen > 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { +- ULONG TmpLen; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ unsigned long TmpLen; ++ u8 HtLen; ++ u8 BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; + if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) { + HtLen = SIZE_HT_CAP_IE + 4; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -409,8 +409,8 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pAd->CommonCfg.bAggregationCapable) { + if ((pAd->CommonCfg.bPiggyBackCapable) + && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, + 0x03, 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -418,8 +418,8 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + END_OF_ARGS); + FrameLen += TmpLen; + } else if (pAd->MlmeAux.APRalinkIe & 0x00000001) { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, + 0x01, 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -428,8 +428,8 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FrameLen += TmpLen; + } + } else { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x06, + 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, 9, +@@ -450,7 +450,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; + QosInfo.MaxSPLength = + pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR) & QosInfo; ++ WmeIe[8] |= *(u8 *)& QosInfo; + } else { + /* The Parameter Set Count is set to ¡§0¡¨ in the association request frames */ + /* WmeIe[8] |= (pAd->MlmeAux.APEdcaParm.EdcaUpdateCount & 0x0f); */ +@@ -472,7 +472,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) + ) + ) { +- UCHAR RSNIe = IE_WPA; ++ u8 RSNIe = IE_WPA; + + if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) + || (pAd->StaCfg.AuthMode == +@@ -488,7 +488,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + /* Check for WPA PMK cache list */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) { +- INT idx; ++ int idx; + BOOLEAN FoundPMK = FALSE; + /* Search chched PMKID, append it if existed */ + for (idx = 0; idx < PMKID_NO; idx++) { +@@ -502,7 +502,7 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + if (FoundPMK) { + /* Set PMK number */ +- *(PUSHORT) & pAd->StaCfg.RSN_IE[pAd-> ++ *(u16 *)& pAd->StaCfg.RSN_IE[pAd-> + StaCfg. + RSNIE_Len] + = 1; +@@ -589,21 +589,21 @@ VOID MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR ApAddr[6]; ++ u8 ApAddr[6]; + HEADER_802_11 ReassocHdr; +- UCHAR WmeIe[9] = ++ u8 WmeIe[9] = + { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, + 0x00 }; +- USHORT CapabilityInfo, ListenIntv; +- ULONG Timeout; +- ULONG FrameLen = 0; ++ u16 CapabilityInfo, ListenIntv; ++ unsigned long Timeout; ++ unsigned long FrameLen = 0; + BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- ULONG tmp; +- PUCHAR pOutBuffer = NULL; +- USHORT Status; ++ int NStatus; ++ unsigned long tmp; ++ u8 *pOutBuffer = NULL; ++ u16 Status; + + /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { +@@ -669,7 +669,7 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + QosInfo.UAPSD_AC_VO = pAd->CommonCfg.bAPSDAC_VO; + QosInfo.MaxSPLength = + pAd->CommonCfg.MaxSPLength; +- WmeIe[8] |= *(PUCHAR) & QosInfo; ++ WmeIe[8] |= *(u8 *)& QosInfo; + } + + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, +@@ -679,9 +679,9 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* HT */ + if ((pAd->MlmeAux.HtCapabilityLen > 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { +- ULONG TmpLen; +- UCHAR HtLen; +- UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ unsigned long TmpLen; ++ u8 HtLen; ++ u8 BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; + if (pAd->StaActive.SupportedPhyInfo.bPreNHt == TRUE) { + HtLen = SIZE_HT_CAP_IE + 4; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -711,8 +711,8 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pAd->CommonCfg.bAggregationCapable) { + if ((pAd->CommonCfg.bPiggyBackCapable) + && ((pAd->MlmeAux.APRalinkIe & 0x00000003) == 3)) { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, + 0x03, 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -720,8 +720,8 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + END_OF_ARGS); + FrameLen += TmpLen; + } else if (pAd->MlmeAux.APRalinkIe & 0x00000001) { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, + 0x01, 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, +@@ -730,8 +730,8 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FrameLen += TmpLen; + } + } else { +- ULONG TmpLen; +- UCHAR RalinkIe[9] = ++ unsigned long TmpLen; ++ u8 RalinkIe[9] = + { IE_VENDOR_SPECIFIC, 7, 0x00, 0x0c, 0x43, 0x04, + 0x00, 0x00, 0x00 }; + MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen, 9, +@@ -765,17 +765,17 @@ VOID MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + PMLME_DISASSOC_REQ_STRUCT pDisassocReq; + HEADER_802_11 DisassocHdr; + PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; ++ u8 *pOutBuffer = NULL; ++ unsigned long FrameLen = 0; ++ int NStatus; + BOOLEAN TimerCancelled; +- ULONG Timeout = 500; +- USHORT Status; ++ unsigned long Timeout = 500; ++ u16 Status; + + /* skip sanity check */ + pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT) (Elem->Msg); +@@ -835,20 +835,20 @@ VOID MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT CapabilityInfo, Status, Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; ++ u16 CapabilityInfo, Status, Aid; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; ++ u8 Addr2[MAC_ADDR_LEN]; + BOOLEAN TimerCancelled; +- UCHAR CkipFlag; ++ u8 CkipFlag; + EDCA_PARM EdcaParm; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR HtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; ++ u8 HtCapabilityLen = 0; ++ u8 AddHtInfoLen; ++ u8 NewExtChannelOffset = 0xff; + + if (PeerAssocRspSanity + (pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, +@@ -870,8 +870,8 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &TimerCancelled); + + if (Status == MLME_SUCCESS) { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; ++ u8 MaxSupportedRateIn500Kbps = 0; ++ u8 idx; + + /* supported rates array may not be sorted. sort it and find the maximum rate */ + for (idx = 0; idx < SupRateLen; idx++) { +@@ -924,22 +924,22 @@ VOID PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT CapabilityInfo; +- USHORT Status; +- USHORT Aid; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; +- UCHAR Addr2[MAC_ADDR_LEN]; +- UCHAR CkipFlag; ++ u16 CapabilityInfo; ++ u16 Status; ++ u16 Aid; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES], ExtRateLen; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u8 CkipFlag; + BOOLEAN TimerCancelled; + EDCA_PARM EdcaParm; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR HtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; ++ u8 HtCapabilityLen; ++ u8 AddHtInfoLen; ++ u8 NewExtChannelOffset = 0xff; + + if (PeerAssocRspSanity + (pAd, Elem->Msg, Elem->MsgLen, Addr2, &CapabilityInfo, &Status, +@@ -994,9 +994,9 @@ VOID PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityInfo, IN USHORT Aid, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) /* AP might use this additional ht info IE */ ++void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, u8 HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) /* AP might use this additional ht info IE */ + { +- ULONG Idx; ++ unsigned long Idx; + + pAd->MlmeAux.BssType = BSS_INFRA; + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pAddr2); +@@ -1067,8 +1067,8 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + /* Store appropriate RSN_IE for WPA SM negotiation later */ + if ((pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) + && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) { +- PUCHAR pVIE; +- USHORT len; ++ u8 *pVIE; ++ u16 len; + PEID_STRUCT pEid; + + pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; +@@ -1144,10 +1144,10 @@ VOID AssocPostProc(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityI + + ========================================================================== + */ +-VOID PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u16 Reason; + + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - PeerDisassocAction()\n")); + if (PeerDisassocSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) { +@@ -1189,9 +1189,9 @@ VOID PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -1207,9 +1207,9 @@ VOID AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -1225,9 +1225,9 @@ VOID ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - DisassocTimeoutAction\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_SUCCESS; +@@ -1235,9 +1235,9 @@ VOID DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &Status); + } + +-VOID InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - InvalidStateWhenAssoc(state=%ld), reset ASSOC state machine\n", + pAd->Mlme.AssocMachine.CurrState)); +@@ -1246,9 +1246,9 @@ VOID InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); + } + +-VOID InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - InvalidStateWhenReassoc(state=%ld), reset ASSOC state machine\n", + pAd->Mlme.AssocMachine.CurrState)); +@@ -1257,10 +1257,10 @@ VOID InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); + } + +-VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, ++void InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, + IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("ASSOC - InvalidStateWhenDisassoc(state=%ld), reset ASSOC state machine\n", + pAd->Mlme.AssocMachine.CurrState)); +@@ -1283,14 +1283,14 @@ VOID InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID Cls3errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) ++void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + { + HEADER_802_11 DisassocHdr; + PHEADER_802_11 pDisassocHdr; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; +- NDIS_STATUS NStatus; +- USHORT Reason = REASON_CLS3ERR; ++ u8 *pOutBuffer = NULL; ++ unsigned long FrameLen = 0; ++ int NStatus; ++ u16 Reason = REASON_CLS3ERR; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) +@@ -1336,13 +1336,13 @@ int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd) + + BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + IN PMAC_TABLE_ENTRY pEntry, +- IN UCHAR MaxSupportedRateIn500Kbps, ++ u8 MaxSupportedRateIn500Kbps, + IN HT_CAPABILITY_IE * pHtCapability, +- IN UCHAR HtCapabilityLen, ++ u8 HtCapabilityLen, + IN ADD_HT_INFO_IE * pAddHtInfo, +- IN UCHAR AddHtInfoLen, IN USHORT CapabilityInfo) ++ u8 AddHtInfoLen, u16 CapabilityInfo) + { +- UCHAR MaxSupportedRate = RATE_11; ++ u8 MaxSupportedRate = RATE_11; + + if (ADHOC_ON(pAd)) + CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); +@@ -1448,8 +1448,8 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + /* If this Entry supports 802.11n, upgrade to HT rate. */ + if ((HtCapabilityLen != 0) + && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { +- UCHAR j, bitmask; /*k,bitmask; */ +- CHAR i; ++ u8 j, bitmask; /*k,bitmask; */ ++ char i; + + if (ADHOC_ON(pAd)) + CLIENT_STATUS_SET_FLAG(pEntry, +@@ -1526,8 +1526,8 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity; + pEntry->MaxRAmpduFactor = + pHtCapability->HtCapParm.MaxRAmpduFactor; +- pEntry->MmpsMode = (UCHAR) pHtCapability->HtCapInfo.MimoPs; +- pEntry->AMsduSize = (UCHAR) pHtCapability->HtCapInfo.AMsduSize; ++ pEntry->MmpsMode = (u8)pHtCapability->HtCapInfo.MimoPs; ++ pEntry->AMsduSize = (u8)pHtCapability->HtCapInfo.AMsduSize; + pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; + + if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable +@@ -1567,8 +1567,8 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + + /* Set asic auto fall back */ + if (pAd->StaCfg.bAutoTxRateSwitch == TRUE) { +- PUCHAR pTable; +- UCHAR TableSize = 0; ++ u8 *pTable; ++ u8 TableSize = 0; + + MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, + &pEntry->CurrTxRateIndex); +@@ -1579,7 +1579,7 @@ BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, + pEntry->bAutoTxRateSwitch = FALSE; + + /* If the legacy mode is set, overwrite the transmit setting of this entry. */ +- RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. ++ RTMPUpdateLegacyTxSetting((u8)pAd->StaCfg. + DesiredTransmitSetting.field. + FixedTxMode, pEntry); + } +diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c +index a69b6a7..ddb357a 100644 +--- a/drivers/staging/rt2860/sta/auth.c ++++ b/drivers/staging/rt2860/sta/auth.c +@@ -95,9 +95,9 @@ void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID AuthTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void AuthTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -125,13 +125,13 @@ VOID AuthTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + if (AUTH_ReqSend + (pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) + pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ2; + else { +- USHORT Status; ++ u16 Status; + + pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; + Status = MLME_INVALID_FORMAT; +@@ -148,23 +148,23 @@ VOID MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Seq, Status, RemoteStatus, Alg; +- UCHAR ChlgText[CIPHER_TEXT_LEN]; +- UCHAR CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; +- UCHAR Element[2]; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u16 Seq, Status, RemoteStatus, Alg; ++ u8 ChlgText[CIPHER_TEXT_LEN]; ++ u8 CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; ++ u8 Element[2]; + HEADER_802_11 AuthHdr; + BOOLEAN TimerCancelled; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status2; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen = 0; ++ u16 Status2; + + if (PeerAuthSanity + (pAd, Elem->Msg, Elem->MsgLen, Addr2, &Alg, &Seq, &Status, +- (PCHAR) ChlgText)) { ++ (char *)ChlgText)) { + if (MAC_ADDR_EQUAL(pAd->MlmeAux.Bssid, Addr2) && Seq == 2) { + DBGPRINT(RT_DEBUG_TRACE, + ("AUTH - Receive AUTH_RSP seq#2 to me (Alg=%d, Status=%d)\n", +@@ -224,18 +224,18 @@ VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + KeyLen, + CyperChlgText); + +- Alg = cpu2le16(*(USHORT *) & Alg); +- Seq = cpu2le16(*(USHORT *) & Seq); ++ Alg = cpu2le16(*(u16 *) & Alg); ++ Seq = cpu2le16(*(u16 *) & Seq); + RemoteStatus = +- cpu2le16(*(USHORT *) & ++ cpu2le16(*(u16 *) & + RemoteStatus); + +- RTMPEncryptData(pAd, (PUCHAR) & Alg, ++ RTMPEncryptData(pAd, (u8 *)& Alg, + CyperChlgText + 4, 2); +- RTMPEncryptData(pAd, (PUCHAR) & Seq, ++ RTMPEncryptData(pAd, (u8 *)& Seq, + CyperChlgText + 6, 2); + RTMPEncryptData(pAd, +- (PUCHAR) & RemoteStatus, ++ (u8 *)& RemoteStatus, + CyperChlgText + 8, 2); + Element[0] = 16; + Element[1] = 128; +@@ -282,11 +282,11 @@ VOID PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Alg, Seq, Status; +- CHAR ChlgText[CIPHER_TEXT_LEN]; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u16 Alg, Seq, Status; ++ char ChlgText[CIPHER_TEXT_LEN]; + BOOLEAN TimerCancelled; + + if (PeerAuthSanity +@@ -321,14 +321,14 @@ VOID PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_DEAUTH_REQ_STRUCT *pInfo; + HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Status; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen = 0; ++ u16 Status; + + pInfo = (MLME_DEAUTH_REQ_STRUCT *) Elem->Msg; + +@@ -374,9 +374,9 @@ VOID MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeoutAction\n")); + pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -391,9 +391,9 @@ VOID AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("AUTH - InvalidStateWhenAuth (state=%ld), reset AUTH state machine\n", + pAd->Mlme.AuthMachine.CurrState)); +@@ -414,13 +414,13 @@ VOID InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) ++void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + { + HEADER_802_11 DeauthHdr; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- USHORT Reason = REASON_CLS2ERR; ++ u8 *pOutBuffer = NULL; ++ int NStatus; ++ unsigned long FrameLen = 0; ++ u16 Reason = REASON_CLS2ERR; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) +@@ -442,18 +442,18 @@ VOID Cls2errAction(IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr) + BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + IN PMLME_QUEUE_ELEM pElem, + IN PRALINK_TIMER_STRUCT pAuthTimer, +- IN PSTRING pSMName, +- IN USHORT SeqNo, +- IN PUCHAR pNewElement, IN ULONG ElementLen) ++ char *pSMName, ++ u16 SeqNo, ++ u8 *pNewElement, unsigned long ElementLen) + { +- USHORT Alg, Seq, Status; +- UCHAR Addr[6]; +- ULONG Timeout; ++ u16 Alg, Seq, Status; ++ u8 Addr[6]; ++ unsigned long Timeout; + HEADER_802_11 AuthHdr; + BOOLEAN TimerCancelled; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0, tmp = 0; ++ int NStatus; ++ u8 *pOutBuffer = NULL; ++ unsigned long FrameLen = 0, tmp = 0; + + /* Block all authentication request durning WPA block period */ + if (pAd->StaCfg.bBlockAssoc == TRUE) { +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index e3c07a4..d155dc6 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -47,7 +47,7 @@ + + ========================================================================== + */ +-VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, ++void AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + IN PSTATE_MACHINE Sm, + IN STATE_MACHINE_FUNC Trans[]) + { +@@ -73,16 +73,16 @@ VOID AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, ++void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + IN PHEADER_802_11 pHdr80211, +- IN USHORT Alg, +- IN USHORT Seq, +- IN USHORT Reason, IN USHORT Status) ++ u16 Alg, ++ u16 Seq, ++ u16 Reason, u16 Status) + { + HEADER_802_11 AuthHdr; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; ++ unsigned long FrameLen = 0; ++ u8 *pOutBuffer = NULL; ++ int NStatus; + + if (Reason != MLME_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n")); +@@ -110,10 +110,10 @@ VOID PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) ++void PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- USHORT Reason; ++ u8 Addr2[MAC_ADDR_LEN]; ++ u16 Reason; + + if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) { + if (INFRA_ON(pAd) +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 29906be..c11389f 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -36,7 +36,7 @@ + */ + #include "../rt_config.h" + +-UCHAR CipherSuiteWpaNoneTkip[] = { ++u8 CipherSuiteWpaNoneTkip[] = { + 0x00, 0x50, 0xf2, 0x01, /* oui */ + 0x01, 0x00, /* Version */ + 0x00, 0x50, 0xf2, 0x02, /* Multicast */ +@@ -46,10 +46,10 @@ UCHAR CipherSuiteWpaNoneTkip[] = { + 0x00, 0x50, 0xf2, 0x00 /* authentication */ + }; + +-UCHAR CipherSuiteWpaNoneTkipLen = +- (sizeof(CipherSuiteWpaNoneTkip) / sizeof(UCHAR)); ++u8 CipherSuiteWpaNoneTkipLen = ++ (sizeof(CipherSuiteWpaNoneTkip) / sizeof(u8)); + +-UCHAR CipherSuiteWpaNoneAes[] = { ++u8 CipherSuiteWpaNoneAes[] = { + 0x00, 0x50, 0xf2, 0x01, /* oui */ + 0x01, 0x00, /* Version */ + 0x00, 0x50, 0xf2, 0x04, /* Multicast */ +@@ -59,8 +59,8 @@ UCHAR CipherSuiteWpaNoneAes[] = { + 0x00, 0x50, 0xf2, 0x00 /* authentication */ + }; + +-UCHAR CipherSuiteWpaNoneAesLen = +- (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR)); ++u8 CipherSuiteWpaNoneAesLen = ++ (sizeof(CipherSuiteWpaNoneAes) / sizeof(u8)); + + /* The following MACRO is called after 1. starting an new IBSS, 2. succesfully JOIN an IBSS, */ + /* or 3. succesfully ASSOCIATE to a BSS, 4. successfully RE_ASSOCIATE to a BSS */ +@@ -102,7 +102,7 @@ UCHAR CipherSuiteWpaNoneAesLen = + + ========================================================================== + */ +-VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, ++void MlmeCntlInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) + { + /* Control state machine differs from other state machines, the interface */ +@@ -118,7 +118,7 @@ VOID MlmeCntlInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, ++void MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * S, + IN MLME_QUEUE_ELEM * Elem) + { +@@ -204,7 +204,7 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + /* Check if we can connect to. */ + /* */ + BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, +- (CHAR *) pAd->MlmeAux. ++ (char *) pAd->MlmeAux. + AutoReconnectSsid, + pAd->MlmeAux.AutoReconnectSsidLen); + if (pAd->MlmeAux.SsidBssTab.BssNr > 0) { +@@ -228,7 +228,7 @@ VOID MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_DISASSOC_REQ_STRUCT DisassocReq; + +@@ -281,10 +281,10 @@ VOID CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_SCAN_REQ_STRUCT ScanReq; +- ULONG BssIdx = BSS_NOT_FOUND; ++ unsigned long BssIdx = BSS_NOT_FOUND; + BSS_ENTRY CurrBss; + + /* record current BSS if network is connected. */ +@@ -292,7 +292,7 @@ VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) { + BssIdx = + BssSsidTableSearch(&pAd->ScanTab, pAd->CommonCfg.Bssid, +- (PUCHAR) pAd->CommonCfg.Ssid, ++ (u8 *)pAd->CommonCfg.Ssid, + pAd->CommonCfg.SsidLen, + pAd->CommonCfg.Channel); + if (BssIdx != BSS_NOT_FOUND) { +@@ -313,7 +313,7 @@ VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->ScanTab.BssNr = 1; + } + +- ScanParmFill(pAd, &ScanReq, (PSTRING) Elem->Msg, Elem->MsgLen, BSS_ANY, ++ ScanParmFill(pAd, &ScanReq, (char *)Elem->Msg, Elem->MsgLen, BSS_ANY, + SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, + sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +@@ -329,16 +329,16 @@ VOID CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + PNDIS_802_11_SSID pOidSsid = (NDIS_802_11_SSID *) Elem->Msg; + MLME_DISASSOC_REQ_STRUCT DisassocReq; +- ULONG Now; ++ unsigned long Now; + + /* Step 1. record the desired user settings to MlmeAux */ + NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); + NdisMoveMemory(pAd->MlmeAux.Ssid, pOidSsid->Ssid, pOidSsid->SsidLength); +- pAd->MlmeAux.SsidLen = (UCHAR) pOidSsid->SsidLength; ++ pAd->MlmeAux.SsidLen = (u8)pOidSsid->SsidLength; + NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN); + pAd->MlmeAux.BssType = pAd->StaCfg.BssType; + +@@ -355,7 +355,7 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* step 2. find all matching BSS in the lastest SCAN result (inBssTab) */ + /* & log them into MlmeAux.SsidBssTab for later-on iteration. Sort by RSSI order */ + BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, +- (PCHAR) pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); ++ (char *)pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen); + + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - %d BSS of %d BSS match the desire (%d)SSID - %s\n", +@@ -481,7 +481,7 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, ++ ScanParmFill(pAd, &ScanReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen, BSS_ANY, + SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +@@ -505,10 +505,10 @@ VOID CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- ULONG BssIdx; +- PUCHAR pOidBssid = (PUCHAR) Elem->Msg; ++ unsigned long BssIdx; ++ u8 *pOidBssid = (u8 *)Elem->Msg; + MLME_DISASSOC_REQ_STRUCT DisassocReq; + MLME_JOIN_REQ_STRUCT JoinReq; + +@@ -527,7 +527,7 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - BSSID not found. start a new scan\n")); +- ScanParmFill(pAd, &ScanReq, (PSTRING) pAd->MlmeAux.Ssid, ++ ScanParmFill(pAd, &ScanReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, + sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); +@@ -675,9 +675,9 @@ VOID CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* or been corrupted by other "SET OID"? */ + /* */ + /* IRQL = DISPATCH_LEVEL */ +-VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR BBPValue = 0; ++ u8 BBPValue = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Roaming in MlmeAux.RoamTab...\n")); + +@@ -705,7 +705,7 @@ VOID CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MLME_START_REQ_STRUCT StartReq; + +@@ -726,7 +726,7 @@ VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - No matching BSS, start a new ADHOC (Ssid=%s)...\n", + pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR) pAd->MlmeAux.Ssid, ++ StartParmFill(pAd, &StartReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, + sizeof(MLME_START_REQ_STRUCT), &StartReq); +@@ -749,13 +749,13 @@ VOID CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; ++ u16 Reason; + MLME_AUTH_REQ_STRUCT AuthReq; + + if (Elem->MsgType == MT2_JOIN_CONF) { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); + if (Reason == MLME_SUCCESS) { + /* 1. joined an IBSS, we are pretty much done here */ + if (pAd->MlmeAux.BssType == BSS_ADHOC) { +@@ -832,12 +832,12 @@ VOID CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Result; ++ u16 Result; + + if (Elem->MsgType == MT2_START_CONF) { +- NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Result, Elem->Msg, sizeof(u16)); + if (Result == MLME_SUCCESS) { + /* */ + /* 5G bands rules of Japan: */ +@@ -925,14 +925,14 @@ VOID CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; ++ u16 Reason; + MLME_ASSOC_REQ_STRUCT AssocReq; + MLME_AUTH_REQ_STRUCT AuthReq; + + if (Elem->MsgType == MT2_AUTH_CONF) { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); + if (Reason == MLME_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); + AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, +@@ -989,14 +989,14 @@ VOID CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; ++ u16 Reason; + MLME_ASSOC_REQ_STRUCT AssocReq; + MLME_AUTH_REQ_STRUCT AuthReq; + + if (Elem->MsgType == MT2_AUTH_CONF) { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); + if (Reason == MLME_SUCCESS) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH OK\n")); + AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, +@@ -1047,12 +1047,12 @@ VOID CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Reason; ++ u16 Reason; + + if (Elem->MsgType == MT2_ASSOC_CONF) { +- NdisMoveMemory(&Reason, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); + if (Reason == MLME_SUCCESS) { + if (pAd->CommonCfg.bWirelessEvent) { + RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, +@@ -1085,12 +1085,12 @@ VOID CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Result; ++ u16 Result; + + if (Elem->MsgType == MT2_REASSOC_CONF) { +- NdisMoveMemory(&Result, Elem->Msg, sizeof(USHORT)); ++ NdisMoveMemory(&Result, Elem->Msg, sizeof(u16)); + if (Result == MLME_SUCCESS) { + /* send wireless event - for association */ + if (pAd->CommonCfg.bWirelessEvent) +@@ -1121,7 +1121,7 @@ VOID CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) ++void AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) + { + #define AC0_DEF_TXOP 0 + #define AC1_DEF_TXOP 0 +@@ -1162,12 +1162,12 @@ VOID AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) ++void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType) + { +- ULONG Now; +- UINT32 Data; ++ unsigned long Now; ++ u32 Data; + BOOLEAN Cancelled; +- UCHAR Value = 0, idx = 0, HashIdx = 0; ++ u8 Value = 0, idx = 0, HashIdx = 0; + MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; + + /* Init ChannelQuality to prevent DEAD_CQI at initial LinkUp */ +@@ -1408,8 +1408,8 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + /* Fill in Shared Key Table(offset: 0x6c00) and Shared Key Mode(offset: 0x7000) */ + + if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) { +- PUCHAR Key; +- UCHAR CipherAlg; ++ u8 *Key; ++ u8 CipherAlg; + + for (idx = 0; idx < SHARE_KEY_NUM; idx++) { + CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +@@ -1511,7 +1511,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + /* Key will be set after 4-way handshake. */ + /* */ + if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA) { +- ULONG IV; ++ unsigned long IV; + + /* Remove all WPA keys */ + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); +@@ -1548,8 +1548,8 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) || + ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE) && + (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled))) { +- PUCHAR Key; +- UCHAR CipherAlg; ++ u8 *Key; ++ u8 CipherAlg; + + for (idx = 0; idx < SHARE_KEY_NUM; idx++) { + CipherAlg = pAd->SharedKey[BSS0][idx].CipherAlg; +@@ -1697,8 +1697,8 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + /* Set asic auto fall back */ + { +- PUCHAR pTable; +- UCHAR TableSize = 0; ++ u8 *pTable; ++ u8 TableSize = 0; + + MlmeSelectTxRateTable(pAd, &pAd->MacTab.Content[BSSID_WCID], + &pTable, &TableSize, +@@ -1721,7 +1721,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + /* If the legacy mode is set, overwrite the transmit setting of this entry. */ + if (pEntry->HTPhyMode.field.MODE <= MODE_OFDM) +- RTMPUpdateLegacyTxSetting((UCHAR) pAd->StaCfg. ++ RTMPUpdateLegacyTxSetting((u8)pAd->StaCfg. + DesiredTransmitSetting.field. + FixedTxMode, pEntry); + } else +@@ -1729,7 +1729,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + NdisReleaseSpinLock(&pAd->MacTabLock); + + /* Let Link Status Page display first initial rate. */ +- pAd->LastTxRate = (USHORT) (pEntry->HTPhyMode.word); ++ pAd->LastTxRate = (u16)(pEntry->HTPhyMode.word); + /* Select DAC according to HT or Legacy */ + if (pAd->StaActive.SupportedPhyInfo.MCSSet[0] != 0x00) { + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &Value); +@@ -1796,7 +1796,7 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + && ((STA_WEP_ON(pAd)) || (STA_TKIP_ON(pAd)))) { + pAd->CommonCfg.IOTestParm.bNextDisableRxBA = TRUE; + if (pAd->CommonCfg.bEnableTxBurst) { +- UINT32 MACValue = 0; ++ u32 MACValue = 0; + /* Force disable TXOP value in this case. The same action in MLMEUpdateProtect too. */ + /* I didn't change PBF_MAX_PCNT setting. */ + RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &MACValue); +@@ -1873,9 +1873,9 @@ VOID LinkUp(IN PRTMP_ADAPTER pAd, IN UCHAR BssType) + + ========================================================================== + */ +-VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) ++void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + { +- UCHAR i, ByteValue = 0; ++ u8 i, ByteValue = 0; + + /* Do nothing if monitor mode is on */ + if (MONITOR_ON(pAd)) +@@ -2122,11 +2122,11 @@ VOID LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + + ========================================================================== + */ +-VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) ++void IterateOnBssTab(IN PRTMP_ADAPTER pAd) + { + MLME_START_REQ_STRUCT StartReq; + MLME_JOIN_REQ_STRUCT JoinReq; +- ULONG BssIdx; ++ unsigned long BssIdx; + + /* Change the wepstatus to original wepstatus */ + pAd->StaCfg.WepStatus = pAd->StaCfg.OrigWepStatus; +@@ -2206,7 +2206,7 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - All BSS fail; start a new ADHOC (Ssid=%s)...\n", + pAd->MlmeAux.Ssid)); +- StartParmFill(pAd, &StartReq, (PCHAR) pAd->MlmeAux.Ssid, ++ StartParmFill(pAd, &StartReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, + sizeof(MLME_START_REQ_STRUCT), &StartReq); +@@ -2228,10 +2228,10 @@ VOID IterateOnBssTab(IN PRTMP_ADAPTER pAd) + + /* for re-association only */ + /* IRQL = DISPATCH_LEVEL */ +-VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) ++void IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + { + MLME_REASSOC_REQ_STRUCT ReassocReq; +- ULONG BssIdx; ++ unsigned long BssIdx; + BSS_ENTRY *pBss; + + BssIdx = pAd->MlmeAux.RoamIdx; +@@ -2276,8 +2276,8 @@ VOID IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-VOID JoinParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, IN ULONG BssIdx) ++void JoinParmFill(IN PRTMP_ADAPTER pAd, ++ IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, unsigned long BssIdx) + { + JoinReq->BssIdx = BssIdx; + } +@@ -2290,10 +2290,10 @@ VOID JoinParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID ScanParmFill(IN PRTMP_ADAPTER pAd, ++void ScanParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, +- IN STRING Ssid[], +- IN UCHAR SsidLen, IN UCHAR BssType, IN UCHAR ScanType) ++ char Ssid[], ++ u8 SsidLen, u8 BssType, u8 ScanType) + { + NdisZeroMemory(ScanReq->Ssid, MAX_LEN_OF_SSID); + ScanReq->SsidLen = SsidLen; +@@ -2310,9 +2310,9 @@ VOID ScanParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID StartParmFill(IN PRTMP_ADAPTER pAd, ++void StartParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_START_REQ_STRUCT * StartReq, +- IN CHAR Ssid[], IN UCHAR SsidLen) ++ char Ssid[], u8 SsidLen) + { + ASSERT(SsidLen <= MAX_LEN_OF_SSID); + NdisMoveMemory(StartReq->Ssid, Ssid, SsidLen); +@@ -2327,9 +2327,9 @@ VOID StartParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID AuthParmFill(IN PRTMP_ADAPTER pAd, ++void AuthParmFill(IN PRTMP_ADAPTER pAd, + IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, +- IN PUCHAR pAddr, IN USHORT Alg) ++ u8 *pAddr, u16 Alg) + { + COPY_MAC_ADDR(AuthReq->Addr, pAddr); + AuthReq->Alg = Alg; +@@ -2345,7 +2345,7 @@ VOID AuthParmFill(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + #ifdef RTMP_MAC_PCI +-VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) ++void ComposePsPoll(IN PRTMP_ADAPTER pAd) + { + NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); + pAd->PsPollFrame.FC.Type = BTYPE_CNTL; +@@ -2356,7 +2356,7 @@ VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) ++void ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { + NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; +@@ -2368,13 +2368,13 @@ VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + } + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +-VOID MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg) ++void MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, unsigned long MsgType, u16 Msg) + { +- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), ++ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(u16), + &Msg); + } + +-VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) ++void ComposePsPoll(IN PRTMP_ADAPTER pAd) + { + PTXINFO_STRUC pTxInfo; + PTXWI_STRUC pTxWI; +@@ -2395,14 +2395,14 @@ VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + (PTXINFO_STRUC) & pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (USHORT) (sizeof(PSPOLL_FRAME) + TXWI_SIZE), TRUE, ++ (u16)(sizeof(PSPOLL_FRAME) + TXWI_SIZE), TRUE, + EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxWI = + (PTXWI_STRUC) & pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, + BSSID_WCID, (sizeof(PSPOLL_FRAME)), 0, 0, +- (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[TXWI_SIZE + TXINFO_SIZE], +@@ -2413,7 +2413,7 @@ VOID ComposePsPoll(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) ++void ComposeNullFrame(IN PRTMP_ADAPTER pAd) + { + PTXINFO_STRUC pTxInfo; + PTXWI_STRUC pTxWI; +@@ -2431,14 +2431,14 @@ VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + (PTXINFO_STRUC) & pAd->NullContext.TransferBuffer->field. + WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (USHORT) (sizeof(HEADER_802_11) + TXWI_SIZE), TRUE, ++ (u16)(sizeof(HEADER_802_11) + TXWI_SIZE), TRUE, + EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxWI = + (PTXWI_STRUC) & pAd->NullContext.TransferBuffer->field. + WirelessPacket[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, + BSSID_WCID, (sizeof(HEADER_802_11)), 0, 0, +- (UCHAR) pAd->CommonCfg.MlmeTransmit.field.MCS, ++ (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field. + WirelessPacket[TXWI_SIZE + TXINFO_SIZE], &pAd->NullFrame, +@@ -2458,22 +2458,22 @@ VOID ComposeNullFrame(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) ++unsigned long MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + { +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = { IE_ERP, 1, 0x04 }; ++ u8 DsLen = 1, IbssLen = 2; ++ u8 LocalErpIe[3] = { IE_ERP, 1, 0x04 }; + HEADER_802_11 BcnHdr; +- USHORT CapabilityInfo; ++ u16 CapabilityInfo; + LARGE_INTEGER FakeTimestamp; +- ULONG FrameLen = 0; ++ unsigned long FrameLen = 0; + PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; +- UCHAR *pBeaconFrame = pAd->BeaconBuf; ++ u8 *pBeaconFrame = pAd->BeaconBuf; + BOOLEAN Privacy; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen = 0; +- UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR ExtRateLen = 0; +- UCHAR RSNIe = IE_WPA; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 SupRateLen = 0; ++ u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; ++ u8 ExtRateLen = 0; ++ u8 RSNIe = IE_WPA; + + if ((pAd->CommonCfg.PhyMode == PHY_11B) + && (pAd->CommonCfg.Channel <= 14)) { +@@ -2560,7 +2560,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + + /* add ERP_IE and EXT_RAE IE of in 802.11g */ + if (ExtRateLen) { +- ULONG tmp; ++ unsigned long tmp; + + MakeOutgoingFrame(pBeaconFrame + FrameLen, &tmp, + 3, LocalErpIe, +@@ -2571,7 +2571,7 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + } + /* If adhoc secruity is set for WPA-None, append the cipher suite IE */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { +- ULONG tmp; ++ unsigned long tmp; + RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, + BSS0); + +@@ -2584,8 +2584,8 @@ ULONG MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + } + + if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)) { +- ULONG TmpLen; +- UCHAR HtLen, HtLen1; ++ unsigned long TmpLen; ++ u8 HtLen, HtLen1; + + /* add HT Capability IE */ + HtLen = sizeof(pAd->CommonCfg.HtCapability); +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index db65188..b40e511 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -36,13 +36,13 @@ + */ + #include "../rt_config.h" + +-VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, ++void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- UCHAR *pTmpBuf; ++ u8 *pTmpBuf; + + if (pAd->StaCfg.WpaSupplicantUP) { + /* All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon) */ +@@ -54,8 +54,8 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + WpaCheckEapCode(pAd, pRxBlk->pData, + pRxBlk->DataSize, + LENGTH_802_1_H))) { +- PUCHAR Key; +- UCHAR CipherAlg; ++ u8 *Key; ++ u8 CipherAlg; + int idx = 0; + + DBGPRINT_RAW(RT_DEBUG_TRACE, +@@ -138,7 +138,7 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + WepKey.keyinfo.KeyLength = len; + pAd->SharedKey[BSS0][idx]. + KeyLen = +- (UCHAR) (len <= 5 ? 5 : 13); ++ (u8)(len <= 5 ? 5 : 13); + + pAd->IndicateMediaState = + NdisMediaStateConnected; +@@ -202,9 +202,9 @@ VOID STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + + } + +-VOID STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, ++void STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, IN UCHAR FromWhichBSSID) ++ IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { + + /* non-EAP frame */ +@@ -269,11 +269,11 @@ BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + IN MAC_TABLE_ENTRY * pEntry, IN RX_BLK * pRxBlk) + { + PHEADER_802_11 pHeader = pRxBlk->pHeader; +- UCHAR *pData = pRxBlk->pData; +- USHORT DataSize = pRxBlk->DataSize; +- UCHAR UserPriority = pRxBlk->UserPriority; ++ u8 *pData = pRxBlk->pData; ++ u16 DataSize = pRxBlk->DataSize; ++ u8 UserPriority = pRxBlk->UserPriority; + PCIPHER_KEY pWpaKey; +- UCHAR *pDA, *pSA; ++ u8 *pDA, *pSA; + + pWpaKey = &pAd->SharedKey[BSS0][pRxBlk->pRxWI->KeyIndex]; + +@@ -318,7 +318,7 @@ BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + /* 3. set payload size including LLC to DataSize */ + /* 4. set some flags with RX_BLK_SET_FLAG() */ + /* */ +-VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +@@ -326,8 +326,8 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; + BOOLEAN bFragment = FALSE; + MAC_TABLE_ENTRY *pEntry = NULL; +- UCHAR FromWhichBSSID = BSS0; +- UCHAR UserPriority = 0; ++ u8 FromWhichBSSID = BSS0; ++ u8 UserPriority = 0; + + { + /* before LINK UP, all DATA frames are rejected */ +@@ -351,11 +351,11 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + if (pAd->CommonCfg.bAPSDCapable + && pAd->CommonCfg.APEdcaParm.bAPSDCapable + && (pHeader->FC.SubType & 0x08)) { +- UCHAR *pData; ++ u8 *pData; + DBGPRINT(RT_DEBUG_INFO, ("bAPSDCapable\n")); + + /* Qos bit 4 */ +- pData = (PUCHAR) pHeader + LENGTH_802_11; ++ pData = (u8 *)pHeader + LENGTH_802_11; + if ((*pData >> 4) & 0x01) { + DBGPRINT(RT_DEBUG_INFO, + ("RxDone- Rcv EOSP frame, driver may fall into sleep\n")); +@@ -363,14 +363,14 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + /* Force driver to fall into sleep mode when rcv EOSP frame */ + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { +- USHORT TbttNumToNextWakeUp; +- USHORT NextDtim = ++ u16 TbttNumToNextWakeUp; ++ u16 NextDtim = + pAd->StaCfg.DtimPeriod; +- ULONG Now; ++ unsigned long Now; + + NdisGetSystemUpTime(&Now); + NextDtim -= +- (USHORT) (Now - ++ (u16)(Now - + pAd->StaCfg. + LastBeaconRxTime) / + pAd->CommonCfg.BeaconPeriod; +@@ -459,7 +459,7 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + } + } + +- pRxBlk->pData = (UCHAR *) pHeader; ++ pRxBlk->pData = (u8 *) pHeader; + + /* */ + /* update RxBlk->pData, DataSize */ +@@ -553,7 +553,7 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + return; + } else if (pRxD->U2M) { + pAd->LastRxRate = +- (USHORT) ((pRxWI->MCS) + (pRxWI->BW << 7) + ++ (u16)((pRxWI->MCS) + (pRxWI->BW << 7) + + (pRxWI->ShortGI << 8) + (pRxWI->PHYMODE << 14)); + + if (ADHOC_ON(pAd)) { +@@ -565,8 +565,8 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); + +- pAd->StaCfg.LastSNR0 = (UCHAR) (pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR) (pRxWI->SNR1); ++ pAd->StaCfg.LastSNR0 = (u8)(pRxWI->SNR0); ++ pAd->StaCfg.LastSNR1 = (u8)(pRxWI->SNR1); + + pAd->RalinkCounters.OneSecRxOkDataCnt++; + +@@ -610,7 +610,7 @@ VOID STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + } + +-VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +@@ -637,8 +637,8 @@ VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + && (pAd->RxAnt.EvaluatePeriod == 0)) { + Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); + +- pAd->StaCfg.LastSNR0 = (UCHAR) (pRxWI->SNR0); +- pAd->StaCfg.LastSNR1 = (UCHAR) (pRxWI->SNR1); ++ pAd->StaCfg.LastSNR0 = (u8)(pRxWI->SNR0); ++ pAd->StaCfg.LastSNR1 = (u8)(pRxWI->SNR1); + } + + /* First check the size, it MUST not exceed the mlme queue size */ +@@ -656,7 +656,7 @@ VOID STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); + } + +-VOID STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + PHEADER_802_11 pHeader = pRxBlk->pHeader; +@@ -700,11 +700,11 @@ VOID STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + */ + BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + { +- NDIS_STATUS Status; +- UINT32 RxProcessed, RxPending; ++ int Status; ++ u32 RxProcessed, RxPending; + BOOLEAN bReschedule = FALSE; + RT28XX_RXD_STRUC *pRxD; +- UCHAR *pData; ++ u8 *pData; + PRXWI_STRUC pRxWI; + PNDIS_PACKET pRxPacket; + PHEADER_802_11 pHeader; +@@ -757,7 +757,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + RxCell.pRxWI = pRxWI; + RxCell.pHeader = pHeader; + RxCell.pRxPacket = pRxPacket; +- RxCell.pData = (UCHAR *) pHeader; ++ RxCell.pData = (u8 *) pHeader; + RxCell.DataSize = pRxWI->MPDUtotalByteCount; + RxCell.Flags = 0; + +@@ -833,7 +833,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + + ======================================================================== + */ +-VOID RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd) + { + AsicForceWakeup(pAd, FALSE); + } +@@ -846,7 +846,7 @@ Routine Description: + Arguments: + NDIS_HANDLE MiniportAdapterContext Pointer refer to the device handle, i.e., the pAd. + PPNDIS_PACKET ppPacketArray The packet array need to do transmission. +- UINT NumberOfPackets Number of packet in packet array. ++ u32 NumberOfPackets Number of packet in packet array. + + Return Value: + NONE +@@ -856,10 +856,10 @@ Note: + You only can put OS-depened & STA related code in here. + ======================================================================== + */ +-VOID STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, IN UINT NumberOfPackets) ++void STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, ++ IN PPNDIS_PACKET ppPacketArray, u32 NumberOfPackets) + { +- UINT Index; ++ u32 Index; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; + PNDIS_PACKET pPacket; + BOOLEAN allowToSend = FALSE; +@@ -920,19 +920,19 @@ Note: + You only can put OS-indepened & STA related code in here. + ======================================================================== + */ +-NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++int STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + { + PACKET_INFO PacketInfo; +- PUCHAR pSrcBufVA; +- UINT SrcBufLen; +- UINT AllowFragSize; +- UCHAR NumberOfFrag; +- UCHAR RTSRequired; +- UCHAR QueIdx, UserPriority; ++ u8 *pSrcBufVA; ++ u32 SrcBufLen; ++ u32 AllowFragSize; ++ u8 NumberOfFrag; ++ u8 RTSRequired; ++ u8 QueIdx, UserPriority; + MAC_TABLE_ENTRY *pEntry = NULL; + unsigned int IrqFlags; +- UCHAR FlgIsIP = 0; +- UCHAR Rate; ++ u8 FlgIsIP = 0; ++ u8 Rate; + + /* Prepare packet information structure for buffer descriptor */ + /* chained within a single NDIS packet. */ +@@ -986,7 +986,7 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + + if (ADHOC_ON(pAd) + ) { +- RTMP_SET_PACKET_WCID(pPacket, (UCHAR) pEntry->Aid); ++ RTMP_SET_PACKET_WCID(pPacket, (u8)pEntry->Aid); + } + /* */ + /* Check the Ethernet Frame type of this packet, and set the RTMP_SET_PACKET_SPECIFIC flags. */ +@@ -1079,12 +1079,12 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + QueIdx = QID_AC_BE; + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && + CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) { +- USHORT Protocol; +- UCHAR LlcSnapLen = 0, Byte0, Byte1; ++ u16 Protocol; ++ u8 LlcSnapLen = 0, Byte0, Byte1; + do { + /* get Ethernet protocol field */ + Protocol = +- (USHORT) ((pSrcBufVA[12] << 8) + pSrcBufVA[13]); ++ (u16)((pSrcBufVA[12] << 8) + pSrcBufVA[13]); + if (Protocol <= 1500) { + /* get Ethernet protocol field from LLC/SNAP */ + if (Sniff2BytesFromNdisBuffer +@@ -1092,7 +1092,7 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + &Byte0, &Byte1) != NDIS_STATUS_SUCCESS) + break; + +- Protocol = (USHORT) ((Byte0 << 8) + Byte1); ++ Protocol = (u16)((Byte0 << 8) + Byte1); + LlcSnapLen = 8; + } + /* always AC_BE for non-IP packet */ +@@ -1189,12 +1189,12 @@ NDIS_STATUS STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + ======================================================================== + */ + #ifdef RTMP_MAC_PCI +-NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs) ++int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, ++ u8 NumberRequired, u8 *FreeNumberIs) + { +- ULONG FreeNumber = 0; +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ unsigned long FreeNumber = 0; ++ int Status = NDIS_STATUS_FAILURE; + + switch (QueIdx) { + case QID_AC_BK: +@@ -1234,7 +1234,7 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + ("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); + break; + } +- *FreeNumberIs = (UCHAR) FreeNumber; ++ *FreeNumberIs = (u8)FreeNumber; + + return (Status); + } +@@ -1244,12 +1244,12 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + Actually, this function used to check if the TxHardware Queue still has frame need to send. + If no frame need to send, go to sleep, else, still wake up. + */ +-NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs) ++int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++ u8 QueIdx, ++ u8 NumberRequired, u8 *FreeNumberIs) + { +- /*ULONG FreeNumber = 0; */ +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++ /*unsigned long FreeNumber = 0; */ ++ int Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; + +@@ -1289,15 +1289,15 @@ NDIS_STATUS RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + } + #endif /* RTMP_MAC_USB // */ + +-VOID RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd) ++void RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd) + { + } + +-VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, +- IN UCHAR TxRate, IN BOOLEAN bQosNull) ++void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++ u8 TxRate, IN BOOLEAN bQosNull) + { +- UCHAR NullFrame[48]; +- ULONG Length; ++ u8 NullFrame[48]; ++ unsigned long Length; + PHEADER_802_11 pHeader_802_11; + + /* WPA 802.1x secured port control */ +@@ -1349,12 +1349,12 @@ VOID RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pDA, ++void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++ u8 *pDA, + IN unsigned int NextMpduSize, +- IN UCHAR TxRate, +- IN UCHAR RTSRate, +- IN USHORT AckDuration, IN UCHAR QueIdx, IN UCHAR FrameGap) ++ u8 TxRate, ++ u8 RTSRate, ++ u16 AckDuration, u8 QueIdx, u8 FrameGap) + { + } + +@@ -1367,12 +1367,12 @@ VOID RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, + /* In Cisco CCX 2.0 Leap Authentication */ + /* WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey */ + /* Instead of the SharedKey, SharedKey Length may be Zero. */ +-VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + NDIS_802_11_ENCRYPTION_STATUS Cipher; /* To indicate cipher used for this packet */ +- UCHAR CipherAlg = CIPHER_NONE; /* cipher alogrithm */ +- UCHAR KeyIdx = 0xff; +- PUCHAR pSrcBufVA; ++ u8 CipherAlg = CIPHER_NONE; /* cipher alogrithm */ ++ u8 KeyIdx = 0xff; ++ u8 *pSrcBufVA; + PCIPHER_KEY pKey = NULL; + + pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket); +@@ -1429,7 +1429,7 @@ VOID STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pTxBlk->pKey = pKey; + } + +-VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + HEADER_802_11 *pHeader_802_11; + +@@ -1510,8 +1510,8 @@ VOID STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-VOID STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, +- IN TX_BLK * pTxBlk, IN UCHAR * pHeader) ++void STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, ++ IN TX_BLK * pTxBlk, u8 * pHeader) + { + MAC_TABLE_ENTRY *pMacEntry; + PHEADER_802_11 pHeader80211; +@@ -1556,13 +1556,13 @@ VOID STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, + pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, ++static inline u8 *STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; ++ u8 *pHeaderBufPtr; + HEADER_802_11 *pHeader_802_11; + PNDIS_PACKET pNextPacket; +- UINT32 nextBufLen; ++ u32 nextBufLen; + PQUEUE_ENTRY pQEntry; + + STAFindCipherAlgorithm(pAd, pTxBlk); +@@ -1588,9 +1588,9 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + pTxBlk->MpduHeaderLen += 2; + } + /* padding at front of LLC header. LLC header should at 4-bytes aligment. */ +- pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr; ++ pHeaderBufPtr = (u8 *)ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + /* For RA Aggregation, */ + /* put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format */ +@@ -1600,8 +1600,8 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + if (RTMP_GET_PACKET_VLAN(pNextPacket)) + nextBufLen -= LENGTH_802_1Q; + +- *pHeaderBufPtr = (UCHAR) nextBufLen & 0xff; +- *(pHeaderBufPtr + 1) = (UCHAR) (nextBufLen >> 8); ++ *pHeaderBufPtr = (u8)nextBufLen & 0xff; ++ *(pHeaderBufPtr + 1) = (u8)(nextBufLen >> 8); + + pHeaderBufPtr += 2; + pTxBlk->MpduHeaderLen += 2; +@@ -1610,10 +1610,10 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + + } + +-static inline PUCHAR STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, ++static inline u8 *STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, + IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; /*, pSaveBufPtr; */ ++ u8 *pHeaderBufPtr; /*, pSaveBufPtr; */ + HEADER_802_11 *pHeader_802_11; + + STAFindCipherAlgorithm(pAd, pTxBlk); +@@ -1647,19 +1647,19 @@ static inline PUCHAR STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, + /* */ + /* @@@ MpduHeaderLen excluding padding @@@ */ + /* */ +- pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr; ++ pHeaderBufPtr = (u8 *)ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + return pHeaderBufPtr; + + } + +-VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; ++ u8 *pHeaderBufPtr; ++ u16 FreeNumber; + MAC_TABLE_ENTRY *pMacEntry; + BOOLEAN bVLANPkt; + PQUEUE_ENTRY pQEntry; +@@ -1681,12 +1681,12 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pMacEntry = pTxBlk->pMacEntry; + if (pMacEntry->isCached) { + /* NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! */ +- NdisMoveMemory((PUCHAR) & pTxBlk-> ++ NdisMoveMemory((u8 *)& pTxBlk-> + HeaderBuf[TXINFO_SIZE], +- (PUCHAR) & pMacEntry->CachedBuf[0], ++ (u8 *)& pMacEntry->CachedBuf[0], + TXWI_SIZE + sizeof(HEADER_802_11)); + pHeaderBufPtr = +- (PUCHAR) (&pTxBlk-> ++ (u8 *)(&pTxBlk-> + HeaderBuf[TXINFO_SIZE + TXWI_SIZE]); + STABuildCache802_11Header(pAd, pTxBlk, pHeaderBufPtr); + } else { +@@ -1745,9 +1745,9 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + /* */ + /* @@@ MpduHeaderLen excluding padding @@@ */ + /* */ +- pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr; ++ pHeaderBufPtr = (u8 *)ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + +@@ -1784,13 +1784,13 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + [TXINFO_SIZE]), + pTxBlk); + +- NdisZeroMemory((PUCHAR) (&pMacEntry->CachedBuf[0]), ++ NdisZeroMemory((u8 *)(&pMacEntry->CachedBuf[0]), + sizeof(pMacEntry->CachedBuf)); +- NdisMoveMemory((PUCHAR) (&pMacEntry->CachedBuf[0]), +- (PUCHAR) (&pTxBlk-> ++ NdisMoveMemory((u8 *)(&pMacEntry->CachedBuf[0]), ++ (u8 *)(&pTxBlk-> + HeaderBuf[TXINFO_SIZE]), + (pHeaderBufPtr - +- (PUCHAR) (&pTxBlk-> ++ (u8 *)(&pTxBlk-> + HeaderBuf[TXINFO_SIZE]))); + pMacEntry->isCached = TRUE; + } +@@ -1819,15 +1819,15 @@ VOID STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + } + +-VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT subFramePayloadLen = 0; /* AMSDU Subframe length without AMSDU-Header / Padding. */ +- USHORT totalMPDUSize = 0; +- UCHAR *subFrameHeader; +- UCHAR padding = 0; +- USHORT FirstTx = 0, LastTxIdx = 0; ++ u8 *pHeaderBufPtr; ++ u16 FreeNumber; ++ u16 subFramePayloadLen = 0; /* AMSDU Subframe length without AMSDU-Header / Padding. */ ++ u16 totalMPDUSize = 0; ++ u8 *subFrameHeader; ++ u8 padding = 0; ++ u16 FirstTx = 0, LastTxIdx = 0; + BOOLEAN bVLANPkt; + int frameNum = 0; + PQUEUE_ENTRY pQEntry; +@@ -1951,11 +1951,11 @@ VOID STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +-VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { + HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; ++ u8 *pHeaderBufPtr; ++ u16 FreeNumber; + BOOLEAN bVLANPkt; + PQUEUE_ENTRY pQEntry; + +@@ -2014,9 +2014,9 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pTxBlk->MpduHeaderLen += 2; + } + /* The remaining content of MPDU header should locate at 4-octets aligment */ +- pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr; ++ pHeaderBufPtr = (u8 *)ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + { + +@@ -2030,7 +2030,7 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, + pTxBlk->pExtraLlcSnapEncap); + if (pTxBlk->pExtraLlcSnapEncap) { +- UCHAR vlan_size; ++ u8 vlan_size; + + NdisMoveMemory(pHeaderBufPtr, + pTxBlk->pExtraLlcSnapEncap, 6); +@@ -2069,12 +2069,12 @@ VOID STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +-VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + { +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- USHORT totalMPDUSize = 0; +- USHORT FirstTx, LastTxIdx; ++ u8 *pHeaderBufPtr; ++ u16 FreeNumber; ++ u16 totalMPDUSize = 0; ++ u16 FirstTx, LastTxIdx; + int frameNum = 0; + BOOLEAN bVLANPkt; + PQUEUE_ENTRY pQEntry; +@@ -2186,17 +2186,17 @@ VOID STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + } + +-VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) ++void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + { + HEADER_802_11 *pHeader_802_11; +- PUCHAR pHeaderBufPtr; +- USHORT FreeNumber; +- UCHAR fragNum = 0; ++ u8 *pHeaderBufPtr; ++ u16 FreeNumber; ++ u8 fragNum = 0; + PACKET_INFO PacketInfo; +- USHORT EncryptionOverhead = 0; +- UINT32 FreeMpduSize, SrcRemainingBytes; +- USHORT AckDuration; +- UINT NextMpduSize; ++ u16 EncryptionOverhead = 0; ++ u32 FreeMpduSize, SrcRemainingBytes; ++ u16 AckDuration; ++ u32 NextMpduSize; + BOOLEAN bVLANPkt; + PQUEUE_ENTRY pQEntry; + HTTRANSMIT_SETTING *pTransmit; +@@ -2255,9 +2255,9 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + /* padding at front of LLC header */ + /* LLC header should locate at 4-octets aligment */ + /* */ +- pTxBlk->HdrPadLen = (ULONG) pHeaderBufPtr; +- pHeaderBufPtr = (PUCHAR) ROUND_UP(pHeaderBufPtr, 4); +- pTxBlk->HdrPadLen = (ULONG) (pHeaderBufPtr - pTxBlk->HdrPadLen); ++ pTxBlk->HdrPadLen = (unsigned long)pHeaderBufPtr; ++ pHeaderBufPtr = (u8 *)ROUND_UP(pHeaderBufPtr, 4); ++ pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + /* */ + /* Insert LLC-SNAP encapsulation - 8 octets */ +@@ -2269,7 +2269,7 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, + pTxBlk->pExtraLlcSnapEncap); + if (pTxBlk->pExtraLlcSnapEncap) { +- UCHAR vlan_size; ++ u8 vlan_size; + + NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6); + pHeaderBufPtr += 6; +@@ -2360,8 +2360,8 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pTxBlk->SrcBufLen = FreeMpduSize; + + NextMpduSize = +- min(((UINT) SrcRemainingBytes - pTxBlk->SrcBufLen), +- ((UINT) pAd->CommonCfg.FragmentThreshold)); ++ min(((u32)SrcRemainingBytes - pTxBlk->SrcBufLen), ++ ((u32)pAd->CommonCfg.FragmentThreshold)); + pHeader_802_11->FC.MoreFrag = 1; + pHeader_802_11->Duration = + (3 * pAd->CommonCfg.Dsifs) + (2 * AckDuration) + +@@ -2434,8 +2434,8 @@ VOID STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + ======================================================================== + */ +-NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, IN UCHAR QueIdx) ++int STAHardTransmit(IN PRTMP_ADAPTER pAd, ++ IN TX_BLK * pTxBlk, u8 QueIdx) + { + NDIS_PACKET *pPacket; + PQUEUE_ENTRY pQEntry; +@@ -2523,7 +2523,7 @@ NDIS_STATUS STAHardTransmit(IN PRTMP_ADAPTER pAd, + + } + +-ULONG HashBytesPolynomial(UCHAR * value, unsigned int len) ++unsigned long HashBytesPolynomial(u8 * value, unsigned int len) + { + unsigned char *word = value; + unsigned int ret = 0; +@@ -2537,9 +2537,9 @@ ULONG HashBytesPolynomial(UCHAR * value, unsigned int len) + return ret; + } + +-VOID Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, + IN PNDIS_PACKET pPacket, +- IN UCHAR FromWhichBSSID) ++ u8 FromWhichBSSID) + { + if (TRUE) { + announce_802_3_packet(pAd, pPacket); +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index ba6eaf6..a79348f 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -36,15 +36,15 @@ + */ + #include "../rt_config.h" + +-extern UCHAR CISCO_OUI[]; ++extern u8 CISCO_OUI[]; + +-extern UCHAR WPA_OUI[]; +-extern UCHAR RSN_OUI[]; +-extern UCHAR WME_INFO_ELEM[]; +-extern UCHAR WME_PARM_ELEM[]; +-extern UCHAR Ccx2QosInfo[]; +-extern UCHAR RALINK_OUI[]; +-extern UCHAR BROADCOM_OUI[]; ++extern u8 WPA_OUI[]; ++extern u8 RSN_OUI[]; ++extern u8 WME_INFO_ELEM[]; ++extern u8 WME_PARM_ELEM[]; ++extern u8 Ccx2QosInfo[]; ++extern u8 RALINK_OUI[]; ++extern u8 BROADCOM_OUI[]; + + /* + ========================================================================== +@@ -55,9 +55,9 @@ extern UCHAR BROADCOM_OUI[]; + ========================================================================== + */ + BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT CHAR Ssid[], OUT UCHAR * pSsidLen) ++ void * Msg, ++ unsigned long MsgLen, ++ char Ssid[], u8 * pSsidLen) + { + MLME_START_REQ_STRUCT *Info; + +@@ -86,22 +86,22 @@ BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT * pCapabilityInfo, OUT USHORT * pStatus, OUT USHORT * pAid, OUT UCHAR SupRate[], OUT UCHAR * pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ +- OUT UCHAR * pHtCapabilityLen, +- OUT UCHAR * pAddHtInfoLen, +- OUT UCHAR * pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, OUT UCHAR * pCkipFlag) ++BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++ u8 * pHtCapabilityLen, ++ u8 * pAddHtInfoLen, ++ u8 * pNewExtChannelOffset, ++ OUT PEDCA_PARM pEdcaParm, u8 * pCkipFlag) + { +- CHAR IeType, *Ptr; ++ char IeType, *Ptr; + PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; + PEID_STRUCT pEid; +- ULONG Length = 0; ++ unsigned long Length = 0; + + *pNewExtChannelOffset = 0xff; + *pHtCapabilityLen = 0; + *pAddHtInfoLen = 0; + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +- Ptr = (PCHAR) pFrame->Octet; ++ Ptr = (char *)pFrame->Octet; + Length += LENGTH_802_11; + + NdisMoveMemory(pCapabilityInfo, &pFrame->Octet[0], 2); +@@ -155,11 +155,11 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + NdisMoveMemory(pHtCapability, pEid->Octet, + SIZE_HT_CAP_IE); + +- *(USHORT *) (&pHtCapability->HtCapInfo) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pHtCapability->HtCapInfo) = ++ cpu2le16(*(u16 *) + (&pHtCapability->HtCapInfo)); +- *(USHORT *) (&pHtCapability->ExtHtCapInfo) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pHtCapability->ExtHtCapInfo) = ++ cpu2le16(*(u16 *) + (&pHtCapability->ExtHtCapInfo)); + + *pHtCapabilityLen = SIZE_HT_CAP_IE; +@@ -177,11 +177,11 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + NdisMoveMemory(pAddHtInfo, pEid->Octet, + sizeof(ADD_HT_INFO_IE)); + +- *(USHORT *) (&pAddHtInfo->AddHtInfo2) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pAddHtInfo->AddHtInfo2) = ++ cpu2le16(*(u16 *) + (&pAddHtInfo->AddHtInfo2)); +- *(USHORT *) (&pAddHtInfo->AddHtInfo3) = +- cpu2le16(*(USHORT *) ++ *(u16 *) (&pAddHtInfo->AddHtInfo3) = ++ cpu2le16(*(u16 *) + (&pAddHtInfo->AddHtInfo3)); + + *pAddHtInfoLen = SIZE_ADD_HT_INFO_IE; +@@ -204,7 +204,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + /* handle WME PARAMTER ELEMENT */ + if (NdisEqualMemory(pEid->Octet, WME_PARM_ELEM, 6) + && (pEid->Len == 24)) { +- PUCHAR ptr; ++ u8 *ptr; + int i; + + /* parsing EDCA parameters */ +@@ -217,9 +217,9 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + pEid->Octet[6] & 0x0f; + pEdcaParm->bAPSDCapable = + (pEid->Octet[6] & 0x80) ? 1 : 0; +- ptr = (PUCHAR) & pEid->Octet[8]; ++ ptr = (u8 *)& pEid->Octet[8]; + for (i = 0; i < 4; i++) { +- UCHAR aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ ++ u8 aci = (*ptr & 0x60) >> 5; /* b5~6 is AC INDEX */ + pEdcaParm->bACM[aci] = (((*ptr) & 0x10) == 0x10); /* b5 is ACM */ + pEdcaParm->Aifsn[aci] = (*ptr) & 0x0f; /* b0~3 is AIFSN */ + pEdcaParm->Cwmin[aci] = *(ptr + 1) & 0x0f; /* b0~4 is Cwmin */ +@@ -237,7 +237,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + } + + Length = Length + 2 + pEid->Len; +- pEid = (PEID_STRUCT) ((UCHAR *) pEid + 2 + pEid->Len); ++ pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); + } + + return TRUE; +@@ -255,14 +255,14 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, IN VOID * pMsg, IN ULONG MsgLen + ========================================================================== + */ + BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, +- IN VOID * Msg, +- IN ULONG MsgLen, +- OUT PUCHAR pAddr2, +- OUT CHAR Ssid[], OUT UCHAR * pSsidLen) ++ void * Msg, ++ unsigned long MsgLen, ++ u8 *pAddr2, ++ char Ssid[], u8 * pSsidLen) + { +- UCHAR Idx; +- UCHAR RateLen; +- CHAR IeType; ++ u8 Idx; ++ u8 RateLen; ++ char IeType; + PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; + + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); +@@ -304,15 +304,15 @@ BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN GetTimBit(IN CHAR * Ptr, +- IN USHORT Aid, +- OUT UCHAR * TimLen, +- OUT UCHAR * BcastFlag, +- OUT UCHAR * DtimCount, +- OUT UCHAR * DtimPeriod, OUT UCHAR * MessageToMe) ++BOOLEAN GetTimBit(char * Ptr, ++ u16 Aid, ++ u8 * TimLen, ++ u8 * BcastFlag, ++ u8 * DtimCount, ++ u8 * DtimPeriod, u8 * MessageToMe) + { +- UCHAR BitCntl, N1, N2, MyByte, MyBit; +- CHAR *IdxPtr; ++ u8 BitCntl, N1, N2, MyByte, MyBit; ++ char *IdxPtr; + + IdxPtr = Ptr; + +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index 12ab2d4..448e75f 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -50,7 +50,7 @@ + + ========================================================================== + */ +-VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, ++void SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, +@@ -111,9 +111,9 @@ VOID SyncStateMachineInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-VOID BeaconTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void BeaconTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -126,7 +126,7 @@ VOID BeaconTimeout(IN PVOID SystemSpecific1, + + if ((pAd->CommonCfg.BBPCurrentBW == BW_40) + ) { +- UCHAR BBPValue = 0; ++ u8 BBPValue = 0; + AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue); +@@ -151,9 +151,9 @@ VOID BeaconTimeout(IN PVOID SystemSpecific1, + + ========================================================================== + */ +-VOID ScanTimeout(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) ++void ScanTimeout(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; + +@@ -183,15 +183,15 @@ VOID ScanTimeout(IN PVOID SystemSpecific1, + MLME SCAN req state machine procedure + ========================================================================== + */ +-VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; ++ u8 Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; + BOOLEAN TimerCancelled; +- ULONG Now; +- USHORT Status; ++ unsigned long Now; ++ u16 Status; + PHEADER_802_11 pHdr80211; +- PUCHAR pOutBuffer = NULL; +- NDIS_STATUS NStatus; ++ u8 *pOutBuffer = NULL; ++ int NStatus; + + /* Check the total scan tries for one single OID command */ + /* If this is the CCX 2.0 Case, skip that! */ +@@ -225,7 +225,7 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (MlmeScanReqSanity(pAd, + Elem->Msg, + Elem->MsgLen, +- &BssType, (PCHAR) Ssid, &SsidLen, &ScanType)) { ++ &BssType, (char *)Ssid, &SsidLen, &ScanType)) { + + /* Check for channel load and noise hist request */ + /* Suspend MSDU only at scan request, not the last two mentioned */ +@@ -239,7 +239,7 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* */ + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) + && (INFRA_ON(pAd))) { +- NStatus = MlmeAllocateMemory(pAd, (PVOID) & pOutBuffer); ++ NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); + if (NStatus == NDIS_STATUS_SUCCESS) { + pHdr80211 = (PHEADER_802_11) pOutBuffer; + MgtMacHeaderInit(pAd, pHdr80211, +@@ -297,21 +297,21 @@ VOID MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME JOIN req state machine procedure + ========================================================================== + */ +-VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR BBPValue = 0; ++ u8 BBPValue = 0; + BSS_ENTRY *pBss; + BOOLEAN TimerCancelled; + HEADER_802_11 Hdr80211; +- NDIS_STATUS NStatus; +- ULONG FrameLen = 0; +- PUCHAR pOutBuffer = NULL; +- PUCHAR pSupRate = NULL; +- UCHAR SupRateLen; +- PUCHAR pExtRate = NULL; +- UCHAR ExtRateLen; +- UCHAR ASupRate[] = { 0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C }; +- UCHAR ASupRateLen = sizeof(ASupRate) / sizeof(UCHAR); ++ int NStatus; ++ unsigned long FrameLen = 0; ++ u8 *pOutBuffer = NULL; ++ u8 *pSupRate = NULL; ++ u8 SupRateLen; ++ u8 *pExtRate = NULL; ++ u8 ExtRateLen; ++ u8 ASupRate[] = { 0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C }; ++ u8 ASupRateLen = sizeof(ASupRate) / sizeof(u8); + MLME_JOIN_REQ_STRUCT *pInfo = (MLME_JOIN_REQ_STRUCT *) (Elem->Msg); + + DBGPRINT(RT_DEBUG_TRACE, +@@ -409,7 +409,7 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + END_OF_ARGS); + + if (ExtRateLen) { +- ULONG Tmp; ++ unsigned long Tmp; + MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp, + 1, &ExtRateIe, + 1, &ExtRateLen, +@@ -437,17 +437,17 @@ VOID MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME START Request state machine procedure, starting an IBSS + ========================================================================== + */ +-VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen; ++ u8 Ssid[MAX_LEN_OF_SSID], SsidLen; + BOOLEAN TimerCancelled; + + /* New for WPA security suites */ +- UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ ++ u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + LARGE_INTEGER TimeStamp; + BOOLEAN Privacy; +- USHORT Status; ++ u16 Status; + + /* Init Variable IE structure */ + pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; +@@ -456,7 +456,7 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + TimeStamp.u.HighPart = 0; + + if (MlmeStartReqSanity +- (pAd, Elem->Msg, Elem->MsgLen, (PCHAR) Ssid, &SsidLen)) { ++ (pAd, Elem->Msg, Elem->MsgLen, (char *)Ssid, &SsidLen)) { + /* reset all the timers */ + RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); + RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &TimerCancelled); +@@ -550,33 +550,33 @@ VOID MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + peer sends beacon back when scanning + ========================================================================== + */ +-VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, ++ u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ u8 Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, + SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe; + CF_PARM CfParm; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; ++ u16 BeaconPeriod, AtimWin, CapabilityInfo; + PFRAME_802_11 pFrame; + LARGE_INTEGER TimeStamp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ u8 Erp; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], + ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- USHORT LenVIE; +- UCHAR CkipFlag; +- UCHAR AironetCellPowerLimit; ++ u8 SupRateLen, ExtRateLen; ++ u16 LenVIE; ++ u8 CkipFlag; ++ u8 AironetCellPowerLimit; + EDCA_PARM EdcaParm; + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; +- UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ ++ unsigned long RalinkIe; ++ u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; ++ u8 HtCapabilityLen = 0, PreNHtCapabilityLen = 0; ++ u8 AddHtInfoLen; ++ u8 NewExtChannelOffset = 0xff; + + /* NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); */ + pFrame = (PFRAME_802_11) Elem->Msg; +@@ -593,7 +593,7 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Elem->Channel, + Addr2, + Bssid, +- (PCHAR) Ssid, ++ (char *)Ssid, + &SsidLen, + &BssType, + &BeaconPeriod, +@@ -624,8 +624,8 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &AddHtInfoLen, + &AddHtInfo, + &NewExtChannelOffset, &LenVIE, pVIE)) { +- ULONG Idx; +- CHAR Rssi = 0; ++ unsigned long Idx; ++ char Rssi = 0; + + Idx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); + if (Idx != BSS_NOT_FOUND) +@@ -640,7 +640,7 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + HtCapabilityLen = SIZE_HT_CAP_IE; + + Idx = +- BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (PCHAR) Ssid, ++ BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, (char *)Ssid, + SsidLen, BssType, BeaconPeriod, &CfParm, + AtimWin, CapabilityInfo, SupRate, + SupRateLen, ExtRate, ExtRateLen, +@@ -668,36 +668,36 @@ VOID PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + When waiting joining the (I)BSS, beacon received from external + ========================================================================== + */ +-VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- UCHAR Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, ++ u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ u8 Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, + DtimCount, DtimPeriod, BcastFlag, NewChannel; + LARGE_INTEGER TimeStamp; +- USHORT BeaconPeriod, AtimWin, CapabilityInfo; ++ u16 BeaconPeriod, AtimWin, CapabilityInfo; + CF_PARM Cf; + BOOLEAN TimerCancelled; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ u8 Erp; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], + ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; ++ u8 SupRateLen, ExtRateLen; ++ u8 CkipFlag; ++ u16 LenVIE; ++ u8 AironetCellPowerLimit; + EDCA_PARM EdcaParm; + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- USHORT Status; +- UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ ++ u16 Status; ++ u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- ULONG RalinkIe; +- ULONG Idx; ++ unsigned long RalinkIe; ++ unsigned long Idx; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; +- UCHAR CentralChannel; ++ u8 HtCapabilityLen = 0, PreNHtCapabilityLen = 0; ++ u8 AddHtInfoLen; ++ u8 NewExtChannelOffset = 0xff; ++ u8 CentralChannel; + BOOLEAN bAllowNrate = FALSE; + + /* Init Variable IE structure */ +@@ -712,7 +712,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Elem->Channel, + Addr2, + Bssid, +- (PCHAR) Ssid, ++ (char *)Ssid, + &SsidLen, + &BssType, + &BeaconPeriod, +@@ -798,7 +798,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Channel); + + if (Idx == BSS_NOT_FOUND) { +- CHAR Rssi = 0; ++ char Rssi = 0; + Rssi = + RTMPMaxRssi(pAd, + ConvertToRssi(pAd, +@@ -816,7 +816,7 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Idx = + BssTableSetEntry(pAd, &pAd->ScanTab, + Bssid, +- (CHAR *) Ssid, ++ (char *) Ssid, + SsidLen, BssType, + BeaconPeriod, &Cf, + AtimWin, +@@ -1041,35 +1041,35 @@ VOID PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; ++ u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; ++ char Ssid[MAX_LEN_OF_SSID]; + CF_PARM CfParm; +- UCHAR SsidLen, MessageToMe = 0, BssType, Channel, NewChannel, index = 0; +- UCHAR DtimCount = 0, DtimPeriod = 0, BcastFlag = 0; +- USHORT CapabilityInfo, AtimWin, BeaconPeriod; ++ u8 SsidLen, MessageToMe = 0, BssType, Channel, NewChannel, index = 0; ++ u8 DtimCount = 0, DtimPeriod = 0, BcastFlag = 0; ++ u16 CapabilityInfo, AtimWin, BeaconPeriod; + LARGE_INTEGER TimeStamp; +- USHORT TbttNumToNextWakeUp; +- UCHAR Erp; +- UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES], ++ u16 TbttNumToNextWakeUp; ++ u8 Erp; ++ u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], + ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; +- UCHAR SupRateLen, ExtRateLen; +- UCHAR CkipFlag; +- USHORT LenVIE; +- UCHAR AironetCellPowerLimit; ++ u8 SupRateLen, ExtRateLen; ++ u8 CkipFlag; ++ u16 LenVIE; ++ u8 AironetCellPowerLimit; + EDCA_PARM EdcaParm; + QBSS_LOAD_PARM QbssLoad; + QOS_CAPABILITY_PARM QosCapability; +- ULONG RalinkIe; ++ unsigned long RalinkIe; + /* New for WPA security suites */ +- UCHAR VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ ++ u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ + NDIS_802_11_VARIABLE_IEs *pVIE = NULL; + HT_CAPABILITY_IE HtCapability; + ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ +- UCHAR HtCapabilityLen, PreNHtCapabilityLen; +- UCHAR AddHtInfoLen; +- UCHAR NewExtChannelOffset = 0xff; ++ u8 HtCapabilityLen, PreNHtCapabilityLen; ++ u8 AddHtInfoLen; ++ u8 NewExtChannelOffset = 0xff; + + if (!(INFRA_ON(pAd) || ADHOC_ON(pAd) + )) +@@ -1119,9 +1119,9 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &AddHtInfo, + &NewExtChannelOffset, &LenVIE, pVIE)) { + BOOLEAN is_my_bssid, is_my_ssid; +- ULONG Bssidx, Now; ++ unsigned long Bssidx, Now; + BSS_ENTRY *pBss; +- CHAR RealRssi = ++ char RealRssi = + RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), + ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), + ConvertToRssi(pAd, Elem->Rssi2, RSSI_2)); +@@ -1214,7 +1214,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* if the ssid matched & bssid unmatched, we should select the bssid with large value. */ + /* This might happened when two STA start at the same time */ + if ((!is_my_bssid) && ADHOC_ON(pAd)) { +- INT i; ++ int i; + + /* Add the safeguard against the mismatch of adhoc wep status */ + if (pAd->StaCfg.WepStatus != +@@ -1279,8 +1279,8 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) { +- UCHAR MaxSupportedRateIn500Kbps = 0; +- UCHAR idx; ++ u8 MaxSupportedRateIn500Kbps = 0; ++ u8 idx; + MAC_TABLE_ENTRY *pEntry; + + /* supported rates array may not be sorted. sort it and find the maximum rate */ +@@ -1516,7 +1516,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeSetTxPreamble(pAd, + Rt802_11PreambleLong); + DBGPRINT(RT_DEBUG_TRACE, +- ("SYNC - AP forced to use LONG preamble\n")); ++ ("SYNC - AP forced to use long preamble\n")); + } + + if (OPSTATUS_TEST_FLAG +@@ -1543,7 +1543,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* only INFRASTRUCTURE mode support power-saving feature */ + if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) + || (pAd->CommonCfg.bAPSDForcePowerSave)) { +- UCHAR FreeNumber; ++ u8 FreeNumber; + /* 1. AP has backlogged unicast-to-me frame, stay AWAKE, send PSPOLL */ + /* 2. AP has backlogged broadcast/multicast frame and we want those frames, stay AWAKE */ + /* 3. we have outgoing frames in TxRing or MgmtRing, better stay AWAKE */ +@@ -1660,7 +1660,7 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + due to MaxSPLength. + */ + } else { +- USHORT NextDtim = DtimCount; ++ u16 NextDtim = DtimCount; + + if (NextDtim == 0) + NextDtim = DtimPeriod; +@@ -1703,22 +1703,22 @@ VOID PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Receive PROBE REQ from remote peer when operating in IBSS mode + ========================================================================== + */ +-VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- UCHAR Addr2[MAC_ADDR_LEN]; +- CHAR Ssid[MAX_LEN_OF_SSID]; +- UCHAR SsidLen; +- UCHAR HtLen, AddHtLen, NewExtLen; ++ u8 Addr2[MAC_ADDR_LEN]; ++ char Ssid[MAX_LEN_OF_SSID]; ++ u8 SsidLen; ++ u8 HtLen, AddHtLen, NewExtLen; + HEADER_802_11 ProbeRspHdr; +- NDIS_STATUS NStatus; +- PUCHAR pOutBuffer = NULL; +- ULONG FrameLen = 0; ++ int NStatus; ++ u8 *pOutBuffer = NULL; ++ unsigned long FrameLen = 0; + LARGE_INTEGER FakeTimestamp; +- UCHAR DsLen = 1, IbssLen = 2; +- UCHAR LocalErpIe[3] = { IE_ERP, 1, 0 }; ++ u8 DsLen = 1, IbssLen = 2; ++ u8 LocalErpIe[3] = { IE_ERP, 1, 0 }; + BOOLEAN Privacy; +- USHORT CapabilityInfo; +- UCHAR RSNIe = IE_WPA; ++ u16 CapabilityInfo; ++ u8 RSNIe = IE_WPA; + + if (!ADHOC_ON(pAd)) + return; +@@ -1764,7 +1764,7 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &pAd->StaActive.AtimWin, END_OF_ARGS); + + if (pAd->StaActive.ExtRateLen) { +- ULONG tmp; ++ unsigned long tmp; + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, + 3, LocalErpIe, + 1, &ExtRateIe, +@@ -1776,7 +1776,7 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + /* If adhoc secruity is set for WPA-None, append the cipher suite IE */ + if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) { +- ULONG tmp; ++ unsigned long tmp; + MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp, + 1, &RSNIe, + 1, &pAd->StaCfg.RSNIE_Len, +@@ -1787,8 +1787,8 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) { +- ULONG TmpLen; +- UCHAR BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; ++ unsigned long TmpLen; ++ u8 BROADCOM[4] = { 0x0, 0x90, 0x4c, 0x33 }; + HtLen = sizeof(pAd->CommonCfg.HtCapability); + AddHtLen = sizeof(pAd->CommonCfg.AddHTInfo); + NewExtLen = 1; +@@ -1833,9 +1833,9 @@ VOID PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-VOID BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeoutAtJoinAction\n")); + pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE; + Status = MLME_REJ_TIMEOUT; +@@ -1848,7 +1848,7 @@ VOID BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Scan timeout procedure. basically add channel index by 1 and rescan + ========================================================================== + */ +-VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel); + +@@ -1868,9 +1868,9 @@ VOID ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-VOID InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("AYNC - InvalidStateWhenScan(state=%ld). Reset SYNC machine\n", + pAd->Mlme.SyncMachine.CurrState)); +@@ -1884,9 +1884,9 @@ VOID InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-VOID InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("InvalidStateWhenJoin(state=%ld). Reset SYNC machine\n", + pAd->Mlme.SyncMachine.CurrState)); +@@ -1900,9 +1900,9 @@ VOID InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- USHORT Status; ++ u16 Status; + DBGPRINT(RT_DEBUG_TRACE, + ("InvalidStateWhenStart(state=%ld). Reset SYNC machine\n", + pAd->Mlme.SyncMachine.CurrState)); +@@ -1919,12 +1919,12 @@ VOID InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-VOID EnqueuePsPoll(IN PRTMP_ADAPTER pAd) ++void EnqueuePsPoll(IN PRTMP_ADAPTER pAd) + { + + if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP) + pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; +- MiniportMMRequest(pAd, 0, (PUCHAR) & pAd->PsPollFrame, ++ MiniportMMRequest(pAd, 0, (u8 *)& pAd->PsPollFrame, + sizeof(PSPOLL_FRAME)); + } + +@@ -1933,11 +1933,11 @@ VOID EnqueuePsPoll(IN PRTMP_ADAPTER pAd) + Description: + ========================================================================== + */ +-VOID EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) ++void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) + { +- NDIS_STATUS NState; +- PUCHAR pOutBuffer; +- ULONG FrameLen = 0; ++ int NState; ++ u8 *pOutBuffer; ++ unsigned long FrameLen = 0; + HEADER_802_11 Hdr80211; + + DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n")); +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index 15ed01e..abc730b 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -37,7 +37,7 @@ + */ + #include "../rt_config.h" + +-void inc_byte_array(UCHAR * counter, int len); ++void inc_byte_array(u8 * counter, int len); + + /* + ======================================================================== +@@ -58,10 +58,10 @@ void inc_byte_array(UCHAR * counter, int len); + + ======================================================================== + */ +-VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) ++void RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + { +- ULONG Now; +- UCHAR unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1 : 0); ++ unsigned long Now; ++ u8 unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1 : 0); + + /* Record Last MIC error time and count */ + NdisGetSystemUpTime(&Now); +@@ -113,12 +113,12 @@ VOID RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + + #define LENGTH_EAP_H 4 + /* If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). */ +-INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet) ++int WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++ u8 *pFrame, u16 FrameLen, u16 OffSet) + { + +- PUCHAR pData; +- INT result = 0; ++ u8 *pData; ++ int result = 0; + + if (FrameLen < OffSet + LENGTH_EAPOL_H + LENGTH_EAP_H) + return result; +@@ -133,7 +133,7 @@ INT WpaCheckEapCode(IN PRTMP_ADAPTER pAd, + return result; + } + +-VOID WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) ++void WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) + { + char custom[IW_CUSTOM_MAX] = { 0 }; + +@@ -141,19 +141,19 @@ VOID WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) + if (bUnicast) + sprintf(custom, "%s unicast", custom); + +- RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (PUCHAR) custom, ++ RtmpOSWrielessEventSend(pAd, IWEVCUSTOM, -1, NULL, (u8 *)custom, + strlen(custom)); + + return; + } + +-VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { +- PUCHAR pOutBuffer = NULL; +- UCHAR Header802_3[14]; +- ULONG FrameLen = 0; ++ u8 *pOutBuffer = NULL; ++ u8 Header802_3[14]; ++ unsigned long FrameLen = 0; + EAPOL_PACKET Packet; +- UCHAR Mic[16]; ++ u8 Mic[16]; + BOOLEAN bUnicast; + + DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame ----->\n")); +@@ -190,30 +190,30 @@ VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Packet.KeyDesc.KeyInfo.Error = 1; + + /* Update packet length after decide Key data payload */ +- SET_UINT16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) ++ SET_u16_TO_ARRARY(Packet.Body_Len, LEN_EAPOL_KEY_MSG) + /* Key Replay Count */ + NdisMoveMemory(Packet.KeyDesc.ReplayCounter, + pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY); + inc_byte_array(pAd->StaCfg.ReplayCounter, 8); + + /* Convert to little-endian format. */ +- *((USHORT *) & Packet.KeyDesc.KeyInfo) = +- cpu2le16(*((USHORT *) & Packet.KeyDesc.KeyInfo)); ++ *((u16 *) & Packet.KeyDesc.KeyInfo) = ++ cpu2le16(*((u16 *) & Packet.KeyDesc.KeyInfo)); + +- MlmeAllocateMemory(pAd, (PUCHAR *) & pOutBuffer); /* allocate memory */ ++ MlmeAllocateMemory(pAd, (u8 **) & pOutBuffer); /* allocate memory */ + if (pOutBuffer == NULL) { + return; + } + /* Prepare EAPOL frame for MIC calculation */ + /* Be careful, only EAPOL frame is counted for MIC calculation */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, &Packet, ++ CONV_ARRARY_TO_u16(Packet.Body_Len) + 4, &Packet, + END_OF_ARGS); + + /* Prepare and Fill MIC value */ + NdisZeroMemory(Mic, sizeof(Mic)); + if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) { /* AES */ +- UCHAR digest[20] = { 0 }; ++ u8 digest[20] = { 0 }; + HMAC_SHA1(pAd->StaCfg.PTK, LEN_EAP_MICK, pOutBuffer, FrameLen, + digest, SHA1_DIGEST_SIZE); + NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC); +@@ -226,10 +226,10 @@ VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* copy frame to Tx ring and send MIC failure report frame to authenticator */ + RTMPToWirelessSta(pAd, &pAd->MacTab.Content[BSSID_WCID], + Header802_3, LENGTH_802_3, +- (PUCHAR) & Packet, +- CONV_ARRARY_TO_UINT16(Packet.Body_Len) + 4, FALSE); ++ (u8 *)& Packet, ++ CONV_ARRARY_TO_u16(Packet.Body_Len) + 4, FALSE); + +- MlmeFreeMemory(pAd, (PUCHAR) pOutBuffer); ++ MlmeFreeMemory(pAd, (u8 *)pOutBuffer); + + DBGPRINT(RT_DEBUG_TRACE, ("WpaMicFailureReportFrame <-----\n")); + } +@@ -243,7 +243,7 @@ VOID WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + * rolling over to more significant bytes if the byte was incremented from + * 0xff to 0x00. + */ +-void inc_byte_array(UCHAR * counter, int len) ++void inc_byte_array(u8 * counter, int len) + { + int pos = len - 1; + while (pos >= 0) { +@@ -254,10 +254,10 @@ void inc_byte_array(UCHAR * counter, int len) + } + } + +-VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) ++void WpaDisassocApAndBlockAssoc(void *SystemSpecific1, ++ void *FunctionContext, ++ void *SystemSpecific2, ++ void *SystemSpecific3) + { + RTMP_ADAPTER *pAd = (PRTMP_ADAPTER) FunctionContext; + MLME_DISASSOC_REQ_STRUCT DisassocReq; +@@ -274,7 +274,7 @@ VOID WpaDisassocApAndBlockAssoc(IN PVOID SystemSpecific1, + pAd->StaCfg.bBlockAssoc = TRUE; + } + +-VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) ++void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + { + PCIPHER_KEY pSharedKey; + PMAC_TABLE_ENTRY pEntry; +@@ -330,7 +330,7 @@ VOID WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + + } + +-VOID WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) ++void WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) + { + PCIPHER_KEY pSharedKey; + +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index d92a41e..88a7922 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -40,7 +40,7 @@ + #include "rt_config.h" + + #ifdef DBG +-extern ULONG RTDebugLevel; ++extern unsigned long RTDebugLevel; + #endif + + #define NR_WEP_KEYS 4 +@@ -49,16 +49,16 @@ extern ULONG RTDebugLevel; + + #define GROUP_KEY_NO 4 + +-extern UCHAR CipherWpa2Template[]; ++extern u8 CipherWpa2Template[]; + + typedef struct PACKED _RT_VERSION_INFO { +- UCHAR DriverVersionW; +- UCHAR DriverVersionX; +- UCHAR DriverVersionY; +- UCHAR DriverVersionZ; +- UINT DriverBuildYear; +- UINT DriverBuildMonth; +- UINT DriverBuildDay; ++ u8 DriverVersionW; ++ u8 DriverVersionX; ++ u8 DriverVersionY; ++ u8 DriverVersionZ; ++ u32 DriverBuildYear; ++ u32 DriverBuildMonth; ++ u32 DriverBuildDay; + } RT_VERSION_INFO, *PRT_VERSION_INFO; + + static __s32 ralinkrate[] = { 2, 4, 11, 22, /* CCK */ +@@ -73,13 +73,13 @@ static __s32 ralinkrate[] = { 2, 4, 11, 22, /* CCK */ + 90, 180, 270, 360, 540, 720, 810, 900 + }; + +-INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); ++int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg); + +-INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); ++int Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, char *arg); + +-VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) ++void RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + { +- ULONG KeyIdx; ++ unsigned long KeyIdx; + MAC_TABLE_ENTRY *pEntry; + + DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); +@@ -260,8 +260,8 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + } + } else /* dynamic WEP from wpa_supplicant */ + { +- UCHAR CipherAlg; +- PUCHAR Key; ++ u8 CipherAlg; ++ u8 *Key; + + if (pKey->KeyLength == 32) + goto end; +@@ -279,7 +279,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + + /* set key material and key length */ + pEntry->PairwiseKey.KeyLen = +- (UCHAR) pKey->KeyLength; ++ (u8)pKey->KeyLength; + NdisMoveMemory(pEntry->PairwiseKey.Key, + &pKey->KeyMaterial, + pKey->KeyLength); +@@ -295,7 +295,7 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + /* Add Pair-wise key to Asic */ + AsicAddPairwiseKeyEntry(pAd, + pEntry->Addr, +- (UCHAR) pEntry-> ++ (u8)pEntry-> + Aid, + &pEntry-> + PairwiseKey); +@@ -310,11 +310,11 @@ VOID RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + } + } else { + /* Default key for tx (shared key) */ +- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx; ++ pAd->StaCfg.DefaultKeyId = (u8)KeyIdx; + + /* set key material and key length */ + pAd->SharedKey[BSS0][KeyIdx].KeyLen = +- (UCHAR) pKey->KeyLength; ++ (u8)pKey->KeyLength; + NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, + &pKey->KeyMaterial, + pKey->KeyLength); +@@ -408,8 +408,8 @@ int rt_ioctl_giwfreq(struct net_device *dev, + struct iw_freq *freq, char *extra) + { + PRTMP_ADAPTER pAdapter = NULL; +- UCHAR ch; +- ULONG m = 2412000; ++ u8 ch; ++ unsigned long m = 2412000; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -613,7 +613,7 @@ int rt_ioctl_siwap(struct net_device *dev, + MlmeEnqueue(pAdapter, + MLME_CNTL_STATE_MACHINE, + OID_802_11_BSSID, +- sizeof(NDIS_802_11_MAC_ADDRESS), (VOID *) & Bssid); ++ sizeof(NDIS_802_11_MAC_ADDRESS), (void *) & Bssid); + + DBGPRINT(RT_DEBUG_TRACE, + ("IOCTL::SIOCSIWAP %02x:%02x:%02x:%02x:%02x:%02x\n", Bssid[0], +@@ -728,7 +728,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + { + PRTMP_ADAPTER pAdapter = NULL; + +- ULONG Now; ++ unsigned long Now; + int Status = NDIS_STATUS_SUCCESS; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -804,10 +804,10 @@ int rt_ioctl_giwscan(struct net_device *dev, + { + PRTMP_ADAPTER pAdapter = NULL; + int i = 0; +- PSTRING current_ev = extra, previous_ev = extra; +- PSTRING end_buf; +- PSTRING current_val; +- STRING custom[MAX_CUSTOM_LEN] = { 0 }; ++ char *current_ev = extra, *previous_ev = extra; ++ char *end_buf; ++ char *current_val; ++ char custom[MAX_CUSTOM_LEN] = { 0 }; + struct iw_event iwe; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -945,7 +945,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + previous_ev = current_ev; + current_ev = + iwe_stream_add_point(info, current_ev, end_buf, &iwe, +- (PSTRING) pAdapter->ScanTab. ++ (char *)pAdapter->ScanTab. + BssEntry[i].Ssid); + if (current_ev == previous_ev) + return -E2BIG; +@@ -1027,7 +1027,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + /*Bit Rate */ + /*================================ */ + if (pAdapter->ScanTab.BssEntry[i].SupRateLen) { +- UCHAR tmpRate = ++ u8 tmpRate = + pAdapter->ScanTab.BssEntry[i].SupRate[pAdapter-> + ScanTab. + BssEntry[i]. +@@ -1062,8 +1062,8 @@ int rt_ioctl_giwscan(struct net_device *dev, + pAdapter->ScanTab.BssEntry[i].HtCapability. + MCSSet[1] ? 15 : 7; + int rate_index = +- 12 + ((UCHAR) capInfo.ChannelWidth * 24) + +- ((UCHAR) shortGI * 48) + ((UCHAR) maxMCS); ++ 12 + ((u8)capInfo.ChannelWidth * 24) + ++ ((u8)shortGI * 48) + ((u8)maxMCS); + if (rate_index < 0) + rate_index = 0; + if (rate_index > rate_count) +@@ -1140,7 +1140,7 @@ int rt_ioctl_siwessid(struct net_device *dev, + } + + if (data->flags) { +- PSTRING pSsidString = NULL; ++ char *pSsidString = NULL; + + /* Includes null character. */ + if (data->length > (IW_ESSID_MAX_SIZE + 1)) +@@ -1231,8 +1231,8 @@ int rt_ioctl_giwnickn(struct net_device *dev, + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +- if (data->length > strlen((PSTRING) pAdapter->nickname) + 1) +- data->length = strlen((PSTRING) pAdapter->nickname) + 1; ++ if (data->length > strlen((char *)pAdapter->nickname) + 1) ++ data->length = strlen((char *)pAdapter->nickname) + 1; + if (data->length > 0) { + memcpy(nickname, pAdapter->nickname, data->length - 1); + nickname[data->length - 1] = '\0'; +@@ -1506,9 +1506,9 @@ rt_ioctl_giwencode(struct net_device *dev, + + } + +-void getBaInfo(IN PRTMP_ADAPTER pAd, IN PSTRING pOutBuf) ++void getBaInfo(IN PRTMP_ADAPTER pAd, char *pOutBuf) + { +- INT i, j; ++ int i, j; + BA_ORI_ENTRY *pOriBAEntry; + BA_REC_ENTRY *pRecBAEntry; + +@@ -1816,8 +1816,8 @@ int rt_ioctl_giwauth(struct net_device *dev, + } + + void fnSetCipherKey(IN PRTMP_ADAPTER pAdapter, +- IN INT keyIdx, +- IN UCHAR CipherAlg, ++ int keyIdx, ++ u8 CipherAlg, + IN BOOLEAN bGTK, IN struct iw_encode_ext *ext) + { + NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); +@@ -1881,7 +1881,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + AsicRemovePairwiseKeyEntry(pAdapter, BSS0, BSSID_WCID); + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = 0; + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_NONE; +- AsicRemoveSharedKeyEntry(pAdapter, 0, (UCHAR) keyIdx); ++ AsicRemoveSharedKeyEntry(pAdapter, 0, (u8)keyIdx); + NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], + sizeof(CIPHER_KEY)); + DBGPRINT(RT_DEBUG_TRACE, +@@ -2019,7 +2019,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + union iwreq_data *wrqu, char *extra) + { + PRTMP_ADAPTER pAd = NULL; +- PCHAR pKey = NULL; ++ char *pKey = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + int idx, max_key_len; +@@ -2063,7 +2063,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + return -E2BIG; + else { + ext->key_len = pAd->SharedKey[BSS0][idx].KeyLen; +- pKey = (PCHAR) & (pAd->SharedKey[BSS0][idx].Key[0]); ++ pKey = (char *)& (pAd->SharedKey[BSS0][idx].Key[0]); + } + break; + case Ndis802_11Encryption2Enabled: +@@ -2077,7 +2077,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + return -E2BIG; + else { + ext->key_len = 32; +- pKey = (PCHAR) & pAd->StaCfg.PMK[0]; ++ pKey = (char *)& pAd->StaCfg.PMK[0]; + } + break; + default: +@@ -2140,7 +2140,7 @@ int rt_ioctl_giwgenie(struct net_device *dev, + wrqu->data.length = pAd->StaCfg.RSNIE_Len; + memcpy(extra, &pAd->StaCfg.RSN_IE[0], pAd->StaCfg.RSNIE_Len); + } else { +- UCHAR RSNIe = IE_WPA; ++ u8 RSNIe = IE_WPA; + + if (wrqu->data.length < (pAd->StaCfg.RSNIE_Len + 2)) /* ID, Len */ + return -E2BIG; +@@ -2165,7 +2165,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + { + PRTMP_ADAPTER pAd = NULL; + struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer; +- INT CachedIdx = 0, idx = 0; ++ int CachedIdx = 0, idx = 0; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -2268,7 +2268,7 @@ int rt_ioctl_siwrate(struct net_device *dev, + union iwreq_data *wrqu, char *extra) + { + PRTMP_ADAPTER pAd = NULL; +- UINT32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; ++ u32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -2359,15 +2359,15 @@ int rt_ioctl_giwrate(struct net_device *dev, + pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word; + + if (ht_setting.field.MODE >= MODE_HTMIX) { +-/* rate_index = 12 + ((UCHAR)ht_setting.field.BW *16) + ((UCHAR)ht_setting.field.ShortGI *32) + ((UCHAR)ht_setting.field.MCS); */ ++/* rate_index = 12 + ((u8)ht_setting.field.BW *16) + ((u8)ht_setting.field.ShortGI *32) + ((u8)ht_setting.field.MCS); */ + rate_index = +- 12 + ((UCHAR) ht_setting.field.BW * 24) + +- ((UCHAR) ht_setting.field.ShortGI * 48) + +- ((UCHAR) ht_setting.field.MCS); ++ 12 + ((u8)ht_setting.field.BW * 24) + ++ ((u8)ht_setting.field.ShortGI * 48) + ++ ((u8)ht_setting.field.MCS); + } else if (ht_setting.field.MODE == MODE_OFDM) +- rate_index = (UCHAR) (ht_setting.field.MCS) + 4; ++ rate_index = (u8)(ht_setting.field.MCS) + 4; + else if (ht_setting.field.MODE == MODE_CCK) +- rate_index = (UCHAR) (ht_setting.field.MCS); ++ rate_index = (u8)(ht_setting.field.MCS); + + if (rate_index < 0) + rate_index = 0; +@@ -2447,14 +2447,14 @@ const struct iw_handler_def rt28xx_iw_handler_def = { + #endif + }; + +-INT rt28xx_sta_ioctl(IN struct net_device *net_dev, +- IN OUT struct ifreq *rq, IN INT cmd) ++int rt28xx_sta_ioctl(IN struct net_device *net_dev, ++ IN OUT struct ifreq *rq, int cmd) + { + POS_COOKIE pObj; + RTMP_ADAPTER *pAd = NULL; + struct iwreq *wrq = (struct iwreq *)rq; + BOOLEAN StateMachineTouched = FALSE; +- INT Status = NDIS_STATUS_SUCCESS; ++ int Status = NDIS_STATUS_SUCCESS; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -2522,7 +2522,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + { + struct iw_point *erq = NULL; + erq = &wrq->u.data; +- erq->length = strlen((PSTRING) pAd->nickname); ++ erq->length = strlen((char *)pAd->nickname); + Status = + copy_to_user(erq->pointer, pAd->nickname, + erq->length); +@@ -2639,7 +2639,7 @@ INT rt28xx_sta_ioctl(IN struct net_device *net_dev, + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) ++int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) + { + NDIS_802_11_SSID Ssid, *pSsid = NULL; + BOOLEAN StateMachineTouched = FALSE; +@@ -2669,18 +2669,18 @@ INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + + if ((pAdapter->StaCfg.WpaPassPhraseLen >= 8) && + (pAdapter->StaCfg.WpaPassPhraseLen <= 64)) { +- STRING passphrase_str[65] = { 0 }; +- UCHAR keyMaterial[40]; ++ char passphrase_str[65] = { 0 }; ++ u8 keyMaterial[40]; + + RTMPMoveMemory(passphrase_str, + pAdapter->StaCfg.WpaPassPhrase, + pAdapter->StaCfg.WpaPassPhraseLen); + RTMPZeroMemory(pAdapter->StaCfg.PMK, 32); + if (pAdapter->StaCfg.WpaPassPhraseLen == 64) { +- AtoH((PSTRING) pAdapter->StaCfg.WpaPassPhrase, ++ AtoH((char *)pAdapter->StaCfg.WpaPassPhrase, + pAdapter->StaCfg.PMK, 32); + } else { +- PasswordHash((PSTRING) pAdapter->StaCfg. ++ PasswordHash((char *)pAdapter->StaCfg. + WpaPassPhrase, Ssid.Ssid, + Ssid.SsidLength, keyMaterial); + NdisMoveMemory(pAdapter->StaCfg.PMK, +@@ -2695,7 +2695,7 @@ INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + MlmeEnqueue(pAdapter, + MLME_CNTL_STATE_MACHINE, + OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), (VOID *) pSsid); ++ sizeof(NDIS_802_11_SSID), (void *) pSsid); + + StateMachineTouched = TRUE; + DBGPRINT(RT_DEBUG_TRACE, +@@ -2718,9 +2718,9 @@ INT Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) ++int Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) + { +- UINT32 Value = 0; ++ u32 Value = 0; + + if (strcmp(arg, "Adhoc") == 0) { + if (pAdapter->StaCfg.BssType != BSS_ADHOC) { +@@ -2789,7 +2789,7 @@ INT Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, IN PSTRING arg) + DBGPRINT(RT_DEBUG_TRACE, + ("===>Set_NetworkType_Proc::(INFRA)\n")); + } else if (strcmp(arg, "Monitor") == 0) { +- UCHAR bbpValue = 0; ++ u8 bbpValue = 0; + BCN_TIME_CFG_STRUC csr; + OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAdapter, fOP_STATUS_ADHOC_ON); +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 74529d1..4e387d5 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -143,7 +143,7 @@ struct usb_device_id rtusb_usb_id[] = { + {} /* Terminating entry */ + }; + +-INT const rtusb_usb_id_len = ++int const rtusb_usb_id_len = + sizeof(rtusb_usb_id) / sizeof(struct usb_device_id); + + MODULE_DEVICE_TABLE(usb, rtusb_usb_id); +@@ -185,7 +185,7 @@ BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + { + struct usb_interface *intf = (struct usb_interface *)_dev_p; + struct usb_device *dev_p = interface_to_usbdev(intf); +- UINT32 i; ++ u32 i; + + for (i = 0; i < rtusb_usb_id_len; i++) { + if (dev_p->descriptor.idVendor == rtusb_usb_id[i].idVendor && +@@ -225,8 +225,8 @@ static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + IN RTMP_ADAPTER * pAd) + { + struct usb_host_interface *iface_desc; +- ULONG BulkOutIdx; +- UINT32 i; ++ unsigned long BulkOutIdx; ++ u32 i; + + /* get the active interface descriptor */ + iface_desc = intf->cur_altsetting; +@@ -338,7 +338,7 @@ resume:rt2870_resume, + + #ifdef CONFIG_PM + +-VOID RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) + { + /* clear PS packets */ + /* clear TxSw packets */ +@@ -382,14 +382,14 @@ static int rt2870_resume(struct usb_interface *intf) + #endif /* CONFIG_PM // */ + + /* Init driver module */ +-INT __init rtusb_init(void) ++int __init rtusb_init(void) + { + printk("rtusb init --->\n"); + return usb_register(&rtusb_driver); + } + + /* Deinit driver module */ +-VOID __exit rtusb_exit(void) ++void __exit rtusb_exit(void) + { + usb_deregister(&rtusb_driver); + printk("<--- rtusb exit\n"); +@@ -416,7 +416,7 @@ Return Value: + Note: + ======================================================================== + */ +-INT MlmeThread(IN void *Context) ++int MlmeThread(IN void *Context) + { + RTMP_ADAPTER *pAd; + RTMP_OS_TASK *pTask; +@@ -485,7 +485,7 @@ Return Value: + Note: + ======================================================================== + */ +-INT RTUSBCmdThread(IN void *Context) ++int RTUSBCmdThread(IN void *Context) + { + RTMP_ADAPTER *pAd; + RTMP_OS_TASK *pTask; +@@ -533,13 +533,13 @@ INT RTUSBCmdThread(IN void *Context) + if (pCmdQElmt->buffer != NULL) + os_free_mem(pAd, + pCmdQElmt->buffer); +- os_free_mem(pAd, (PUCHAR) pCmdQElmt); ++ os_free_mem(pAd, (u8 *)pCmdQElmt); + } else { + if ((pCmdQElmt->buffer != NULL) + && (pCmdQElmt->bufferlength != 0)) + os_free_mem(pAd, + pCmdQElmt->buffer); +- os_free_mem(pAd, (PUCHAR) pCmdQElmt); ++ os_free_mem(pAd, (u8 *)pCmdQElmt); + } + } + } +@@ -570,15 +570,15 @@ INT RTUSBCmdThread(IN void *Context) + + } + +-VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) ++void RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + { + PHT_TX_CONTEXT pHTTXContext; + int idx; +- ULONG irqFlags; ++ unsigned long irqFlags; + PURB pUrb; + BOOLEAN needDumpSeq = FALSE; +- UINT32 MACValue; +- UINT32 TxRxQ_Pcnt; ++ u32 MACValue; ++ u32 TxRxQ_Pcnt; + + idx = 0; + RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); +@@ -621,7 +621,7 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + RTMP_IRQ_LOCK(&pAd->BulkOutLock[idx], irqFlags); + if ((pAd->BulkOutPending[idx] == TRUE) + && pAd->watchDogTxPendingCnt) { +- INT actual_length = 0, transfer_buffer_length = 0; ++ int actual_length = 0, transfer_buffer_length = 0; + BOOLEAN isDataPacket = FALSE; + pAd->watchDogTxPendingCnt[idx]++; + +@@ -723,9 +723,9 @@ VOID RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + + /* For Sigma debug, dump the ba_reordering sequence. */ + if ((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) { +- USHORT Idx; ++ u16 Idx; + PBA_REC_ENTRY pBAEntry = NULL; +- UCHAR count = 0; ++ u8 count = 0; + struct reordering_mpdu *mpdu_blk; + + Idx = pAd->MacTab.Content[BSSID_WCID].BARecWcidArray[0]; +@@ -809,8 +809,8 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + { + struct net_device *net_dev = NULL; + RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) NULL; +- INT status, rv; +- PVOID handle; ++ int status, rv; ++ void *handle; + RTMP_OS_NETDEV_OP_HOOK netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n")); +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index 5f998c7..05254c8 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -158,18 +158,18 @@ + + #ifndef ROUND_UP + #define ROUND_UP(__x, __y) \ +- (((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1))) ++ (((unsigned long)((__x)+((__y)-1))) & ((unsigned long)~((__y)-1))) + #endif + +-#define SET_UINT16_TO_ARRARY(_V, _LEN) \ ++#define SET_u16_TO_ARRARY(_V, _LEN) \ + { \ + _V[0] = (_LEN & 0xFF00) >> 8; \ + _V[1] = (_LEN & 0xFF); \ + } + +-#define INC_UINT16_TO_ARRARY(_V, _LEN) \ ++#define INC_u16_TO_ARRARY(_V, _LEN) \ + { \ +- UINT16 var_len; \ ++ u16 var_len; \ + \ + var_len = (_V[0]<<8) | (_V[1]); \ + var_len += _LEN; \ +@@ -178,11 +178,11 @@ + _V[1] = (var_len & 0xFF); \ + } + +-#define CONV_ARRARY_TO_UINT16(_V) ((_V[0]<<8) | (_V[1])) ++#define CONV_ARRARY_TO_u16(_V) ((_V[0]<<8) | (_V[1])) + + #define ADD_ONE_To_64BIT_VAR(_V) \ + { \ +- UCHAR cnt = LEN_KEY_DESC_REPLAY; \ ++ u8 cnt = LEN_KEY_DESC_REPLAY; \ + do \ + { \ + cnt--; \ +@@ -196,105 +196,105 @@ + + /* EAPOL Key Information definition within Key descriptor format */ + typedef struct PACKED _KEY_INFO { +- UCHAR KeyMic:1; +- UCHAR Secure:1; +- UCHAR Error:1; +- UCHAR Request:1; +- UCHAR EKD_DL:1; /* EKD for AP; DL for STA */ +- UCHAR Rsvd:3; +- UCHAR KeyDescVer:3; +- UCHAR KeyType:1; +- UCHAR KeyIndex:2; +- UCHAR Install:1; +- UCHAR KeyAck:1; ++ u8 KeyMic:1; ++ u8 Secure:1; ++ u8 Error:1; ++ u8 Request:1; ++ u8 EKD_DL:1; /* EKD for AP; DL for STA */ ++ u8 Rsvd:3; ++ u8 KeyDescVer:3; ++ u8 KeyType:1; ++ u8 KeyIndex:2; ++ u8 Install:1; ++ u8 KeyAck:1; + } KEY_INFO, *PKEY_INFO; + + /* EAPOL Key descriptor format */ + typedef struct PACKED _KEY_DESCRIPTER { +- UCHAR Type; ++ u8 Type; + KEY_INFO KeyInfo; +- UCHAR KeyLength[2]; +- UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; +- UCHAR KeyNonce[LEN_KEY_DESC_NONCE]; +- UCHAR KeyIv[LEN_KEY_DESC_IV]; +- UCHAR KeyRsc[LEN_KEY_DESC_RSC]; +- UCHAR KeyId[LEN_KEY_DESC_ID]; +- UCHAR KeyMic[LEN_KEY_DESC_MIC]; +- UCHAR KeyDataLen[2]; +- UCHAR KeyData[MAX_LEN_OF_RSNIE]; ++ u8 KeyLength[2]; ++ u8 ReplayCounter[LEN_KEY_DESC_REPLAY]; ++ u8 KeyNonce[LEN_KEY_DESC_NONCE]; ++ u8 KeyIv[LEN_KEY_DESC_IV]; ++ u8 KeyRsc[LEN_KEY_DESC_RSC]; ++ u8 KeyId[LEN_KEY_DESC_ID]; ++ u8 KeyMic[LEN_KEY_DESC_MIC]; ++ u8 KeyDataLen[2]; ++ u8 KeyData[MAX_LEN_OF_RSNIE]; + } KEY_DESCRIPTER, *PKEY_DESCRIPTER; + + typedef struct PACKED _EAPOL_PACKET { +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; ++ u8 ProVer; ++ u8 ProType; ++ u8 Body_Len[2]; + KEY_DESCRIPTER KeyDesc; + } EAPOL_PACKET, *PEAPOL_PACKET; + + /*802.11i D10 page 83 */ + typedef struct PACKED _GTK_ENCAP { +- UCHAR Kid:2; +- UCHAR tx:1; +- UCHAR rsv:5; +- UCHAR rsv1; +- UCHAR GTK[TKIP_GTK_LENGTH]; ++ u8 Kid:2; ++ u8 tx:1; ++ u8 rsv:5; ++ u8 rsv1; ++ u8 GTK[TKIP_GTK_LENGTH]; + } GTK_ENCAP, *PGTK_ENCAP; + + typedef struct PACKED _KDE_ENCAP { +- UCHAR Type; +- UCHAR Len; +- UCHAR OUI[3]; +- UCHAR DataType; ++ u8 Type; ++ u8 Len; ++ u8 OUI[3]; ++ u8 DataType; + GTK_ENCAP GTKEncap; + } KDE_ENCAP, *PKDE_ENCAP; + + /* For WPA1 */ + typedef struct PACKED _RSNIE { +- UCHAR oui[4]; +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; ++ u8 oui[4]; ++ u16 version; ++ u8 mcast[4]; ++ u16 ucount; + struct PACKED { +- UCHAR oui[4]; ++ u8 oui[4]; + } ucast[1]; + } RSNIE, *PRSNIE; + + /* For WPA2 */ + typedef struct PACKED _RSNIE2 { +- USHORT version; +- UCHAR mcast[4]; +- USHORT ucount; ++ u16 version; ++ u8 mcast[4]; ++ u16 ucount; + struct PACKED { +- UCHAR oui[4]; ++ u8 oui[4]; + } ucast[1]; + } RSNIE2, *PRSNIE2; + + /* AKM Suite */ + typedef struct PACKED _RSNIE_AUTH { +- USHORT acount; ++ u16 acount; + struct PACKED { +- UCHAR oui[4]; ++ u8 oui[4]; + } auth[1]; + } RSNIE_AUTH, *PRSNIE_AUTH; + + typedef union PACKED _RSN_CAPABILITIES { + struct PACKED { +- USHORT PreAuth:1; +- USHORT No_Pairwise:1; +- USHORT PTKSA_R_Counter:2; +- USHORT GTKSA_R_Counter:2; +- USHORT Rsvd:10; ++ u16 PreAuth:1; ++ u16 No_Pairwise:1; ++ u16 PTKSA_R_Counter:2; ++ u16 GTKSA_R_Counter:2; ++ u16 Rsvd:10; + } field; +- USHORT word; ++ u16 word; + } RSN_CAPABILITIES, *PRSN_CAPABILITIES; + + typedef struct PACKED _EAP_HDR { +- UCHAR ProVer; +- UCHAR ProType; +- UCHAR Body_Len[2]; +- UCHAR code; +- UCHAR identifier; +- UCHAR length[2]; /* including code and identifier, followed by length-2 octets of data */ ++ u8 ProVer; ++ u8 ProType; ++ u8 Body_Len[2]; ++ u8 code; ++ u8 identifier; ++ u8 length[2]; /* including code and identifier, followed by length-2 octets of data */ + } EAP_HDR, *PEAP_HDR; + + /* For supplicant state machine states. 802.11i Draft 4.1, p. 97 */ +@@ -339,55 +339,55 @@ typedef enum _WpaMixPairCipher { + } WPA_MIX_PAIR_CIPHER; + + typedef struct PACKED _RSN_IE_HEADER_STRUCT { +- UCHAR Eid; +- UCHAR Length; +- USHORT Version; /* Little endian format */ ++ u8 Eid; ++ u8 Length; ++ u16 Version; /* Little endian format */ + } RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; + + /* Cipher suite selector types */ + typedef struct PACKED _CIPHER_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; ++ u8 Oui[3]; ++ u8 Type; + } CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; + + /* Authentication and Key Management suite selector */ + typedef struct PACKED _AKM_SUITE_STRUCT { +- UCHAR Oui[3]; +- UCHAR Type; ++ u8 Oui[3]; ++ u8 Type; + } AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; + + /* RSN capability */ + typedef struct PACKED _RSN_CAPABILITY { +- USHORT Rsv:10; +- USHORT GTKSAReplayCnt:2; +- USHORT PTKSAReplayCnt:2; +- USHORT NoPairwise:1; +- USHORT PreAuth:1; ++ u16 Rsv:10; ++ u16 GTKSAReplayCnt:2; ++ u16 PTKSAReplayCnt:2; ++ u16 NoPairwise:1; ++ u16 PreAuth:1; + } RSN_CAPABILITY, *PRSN_CAPABILITY; + + /*======================================== + The prototype is defined in cmm_wpa.c + ========================================*/ +-BOOLEAN WpaMsgTypeSubst(IN UCHAR EAPType, OUT INT * MsgType); ++BOOLEAN WpaMsgTypeSubst(u8 EAPType, int * MsgType); + +-VOID PRF(IN UCHAR * key, +- IN INT key_len, +- IN UCHAR * prefix, +- IN INT prefix_len, +- IN UCHAR * data, IN INT data_len, OUT UCHAR * output, IN INT len); ++void PRF(u8 * key, ++ int key_len, ++ u8 * prefix, ++ int prefix_len, ++ u8 * data, int data_len, u8 * output, int len); + + int PasswordHash(char *password, + unsigned char *ssid, int ssidlength, unsigned char *output); + +-PUINT8 GetSuiteFromRSNIE(IN PUINT8 rsnie, +- IN UINT rsnie_len, IN UINT8 type, OUT UINT8 * count); ++u8 *GetSuiteFromRSNIE(u8 *rsnie, ++ u32 rsnie_len, u8 type, u8 * count); + +-VOID WpaShowAllsuite(IN PUINT8 rsnie, IN UINT rsnie_len); ++void WpaShowAllsuite(u8 *rsnie, u32 rsnie_len); + +-VOID RTMPInsertRSNIE(IN PUCHAR pFrameBuf, +- OUT PULONG pFrameLen, +- IN PUINT8 rsnie_ptr, +- IN UINT8 rsnie_len, +- IN PUINT8 pmkid_ptr, IN UINT8 pmkid_len); ++void RTMPInsertRSNIE(u8 *pFrameBuf, ++ unsigned long *pFrameLen, ++ u8 *rsnie_ptr, ++ u8 rsnie_len, ++ u8 *pmkid_ptr, u8 pmkid_len); + + #endif +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index a45f648..b180f13 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -41,7 +41,7 @@ + + #include "../rt_config.h" + /* Match total 6 bulkout endpoint to corresponding queue. */ +-UCHAR EpToQueue[6] = ++u8 EpToQueue[6] = + { FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT }; + + /*static BOOLEAN SingleBulkOut = FALSE; */ +@@ -58,12 +58,12 @@ void RTUSB_FILL_BULK_URB(struct urb *pUrb, + + } + +-VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, ++void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + IN PTX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, IN usb_complete_t Func) ++ u8 BulkOutPipeId, IN usb_complete_t Func) + { + PURB pUrb; +- PUCHAR pSrc = NULL; ++ u8 *pSrc = NULL; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; +@@ -76,7 +76,7 @@ VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + pSrc = &pTxContext->TransferBuffer->Aggregation[2]; + } else { + pSrc = +- (PUCHAR) pTxContext->TransferBuffer->field.WirelessPacket; ++ (u8 *)pTxContext->TransferBuffer->field.WirelessPacket; + } + + /*Initialize a tx bulk urb */ +@@ -96,13 +96,13 @@ VOID RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + + } + +-VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, ++void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + IN PHT_TX_CONTEXT pTxContext, +- IN UCHAR BulkOutPipeId, +- IN ULONG BulkOutSize, IN usb_complete_t Func) ++ u8 BulkOutPipeId, ++ unsigned long BulkOutSize, IN usb_complete_t Func) + { + PURB pUrb; +- PUCHAR pSrc = NULL; ++ u8 *pSrc = NULL; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; +@@ -128,11 +128,11 @@ VOID RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + + } + +-VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) ++void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + { + PURB pUrb; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +- ULONG RX_bulk_size; ++ unsigned long RX_bulk_size; + + pUrb = pRxContext->pUrb; + ASSERT(pUrb); +@@ -179,8 +179,8 @@ VOID RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + if(1 /*!(in_interrupt() & 0xffff0000)*/) \ + RTMP_IRQ_UNLOCK((pLock), IrqFlags); + +-VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, IN UCHAR Index) ++void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++ u8 BulkOutPipeId, u8 Index) + { + + PHT_TX_CONTEXT pHTTXContext; +@@ -188,11 +188,11 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + int ret = 0; + PTXINFO_STRUC pTxInfo, pLastTxInfo = NULL; + PTXWI_STRUC pTxWI; +- ULONG TmpBulkEndPos, ThisBulkSize; ++ unsigned long TmpBulkEndPos, ThisBulkSize; + unsigned long IrqFlags = 0, IrqFlags2 = 0; +- PUCHAR pWirelessPkt, pAppendant; ++ u8 *pWirelessPkt, *pAppendant; + BOOLEAN bTxQLastRound = FALSE; +- UCHAR allzero[4] = { 0x0, 0x0, 0x0, 0x0 }; ++ u8 allzero[4] = { 0x0, 0x0, 0x0, 0x0 }; + + BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags); + if ((pAd->BulkOutPending[BulkOutPipeId] == TRUE) +@@ -334,7 +334,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + pHTTXContext->ENextBulkOutPosition, + pHTTXContext->bCopySavePad)); + hex_dump("Wrong QSel Pkt:", +- (PUCHAR) & pWirelessPkt[TmpBulkEndPos], ++ (u8 *)& pWirelessPkt[TmpBulkEndPos], + (pHTTXContext->CurWritePosition - + pHTTXContext->NextBulkOutPosition)); + } +@@ -429,7 +429,7 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + ENextBulkOutPosition], 8); + pHTTXContext->bCopySavePad = TRUE; + if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero, 4)) { +- PUCHAR pBuf = &pHTTXContext->SavedPad[0]; ++ u8 *pBuf = &pHTTXContext->SavedPad[0]; + DBGPRINT_RAW(RT_DEBUG_ERROR, + ("WARNING-Zero-3:%02x%02x%02x%02x%02x%02x%02x%02x,CWPos=%ld, CWRPos=%ld, bCW=%d, NBPos=%ld, TBPos=%ld, TBSize=%ld\n", + pBuf[0], pBuf[1], pBuf[2], pBuf[3], +@@ -495,12 +495,12 @@ VOID RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + + } + +-VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PHT_TX_CONTEXT pHTTXContext; + PRTMP_ADAPTER pAd; + POS_COOKIE pObj; +- UCHAR BulkOutPipeId; ++ u8 BulkOutPipeId; + + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; +@@ -544,7 +544,7 @@ VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + { + PTX_CONTEXT pNullContext = &(pAd->NullContext); + PURB pUrb; +@@ -589,11 +589,11 @@ VOID RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + } + + /* NULL frame use BulkOutPipeId = 0 */ +-VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pNullContext; +- NTSTATUS Status; ++ int Status; + POS_COOKIE pObj; + + pNullContext = (PTX_CONTEXT) pUrb->context; +@@ -618,7 +618,7 @@ VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) ++void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index) + { + PTX_CONTEXT pMLMEContext; + PURB pUrb; +@@ -684,11 +684,11 @@ VOID RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, IN UCHAR Index) + /* printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); */ + } + +-VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PTX_CONTEXT pMLMEContext; + PRTMP_ADAPTER pAd; +- NTSTATUS Status; ++ int Status; + POS_COOKIE pObj; + int index; + +@@ -716,7 +716,7 @@ VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + { + PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); + PURB pUrb; +@@ -758,11 +758,11 @@ VOID RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + } + + /* PS-Poll frame use BulkOutPipeId = 0 */ +-VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pPsPollContext; +- NTSTATUS Status; ++ int Status; + POS_COOKIE pObj; + + pPsPollContext = (PTX_CONTEXT) pUrb->context; +@@ -774,7 +774,7 @@ VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) + tasklet_hi_schedule(&pObj->pspoll_frame_complete_task); + } + +-VOID DoBulkIn(IN RTMP_ADAPTER * pAd) ++void DoBulkIn(IN RTMP_ADAPTER * pAd) + { + PRX_CONTEXT pRxContext; + PURB pUrb; +@@ -845,7 +845,7 @@ VOID DoBulkIn(IN RTMP_ADAPTER * pAd) + fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_RESET_IN_PROGRESS | \ + fRTMP_ADAPTER_REMOVE_IN_PROGRESS) + +-VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + { + PRX_CONTEXT pRxContext; + unsigned long IrqFlags; +@@ -912,7 +912,7 @@ VOID RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + Always returns STATUS_MORE_PROCESSING_REQUIRED + ======================================================================== + */ +-VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) ++void RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + { + /* use a receive tasklet to handle received packets; */ + /* or sometimes hardware IRQ will be disabled here, so we can not */ +@@ -943,7 +943,7 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) ++void RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + { + /* BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX) +@@ -1033,9 +1033,9 @@ VOID RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) ++void RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) + { +- UCHAR Idx; ++ u8 Idx; + PHT_TX_CONTEXT pTxContext; + + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpDataBulkOutQueue\n")); +@@ -1066,7 +1066,7 @@ VOID RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) ++void RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpMLMEBulkOutQueue\n")); + DBGPRINT(RT_DEBUG_TRACE, ("<---CleanUpMLMEBulkOutQueue\n")); +@@ -1085,7 +1085,7 @@ VOID RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) + { + RTUSBCancelPendingBulkInIRP(pAd); + RTUSBCancelPendingBulkOutIRP(pAd); +@@ -1104,10 +1104,10 @@ VOID RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) + { + PRX_CONTEXT pRxContext; +- UINT i; ++ u32 i; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->RTUSBCancelPendingBulkInIRP\n")); + for (i = 0; i < (RX_RING_SIZE); i++) { +@@ -1136,7 +1136,7 @@ VOID RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + { + PHT_TX_CONTEXT pHTTXContext; + PTX_CONTEXT pMLMEContext; +@@ -1144,7 +1144,7 @@ VOID RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pNullContext; + PTX_CONTEXT pPsPollContext; + PTX_CONTEXT pRTSContext; +- UINT i, Idx; ++ u32 i, Idx; + /* unsigned int IrqFlags; */ + /* NDIS_SPIN_LOCK *pLock; */ + /* BOOLEAN *pPending; */ +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index e6b0afc..c58201f 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -41,14 +41,14 @@ + + #include "../rt_config.h" + +-extern UCHAR Phy11BGNextRateUpward[]; /* defined in mlme.c */ +-extern UCHAR EpToQueue[]; ++extern u8 Phy11BGNextRateUpward[]; /* defined in mlme.c */ ++extern u8 EpToQueue[]; + +-VOID REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pData, IN ULONG DataSize) ++void REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, ++ u8 *pData, unsigned long DataSize) + { + PNDIS_PACKET pPacket; +- UINT nMSDU; ++ u32 nMSDU; + struct sk_buff *pSkb; + + nMSDU = 0; +@@ -85,13 +85,13 @@ VOID REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, +- IN UCHAR BulkOutPipeId, +- IN UINT32 NumberRequired) ++int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++ u8 BulkOutPipeId, ++ u32 NumberRequired) + { +-/* UCHAR FreeNumber = 0; */ +-/* UINT Index; */ +- NDIS_STATUS Status = NDIS_STATUS_FAILURE; ++/* u8 FreeNumber = 0; */ ++/* u32 Index; */ ++ int Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; + +@@ -127,8 +127,8 @@ NDIS_STATUS RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, + return (Status); + } + +-NDIS_STATUS RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, +- IN UCHAR BulkOutPipeId) ++int RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, ++ u8 BulkOutPipeId) + { + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; +@@ -141,7 +141,7 @@ NDIS_STATUS RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, + return (NDIS_STATUS_SUCCESS); + } + +-BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId) ++BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, u8 BulkOutPipeId) + { + unsigned long IrqFlags; + HT_TX_CONTEXT *pHTTXContext; +@@ -191,9 +191,9 @@ BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, IN UCHAR BulkOutPipeId) + + ======================================================================== + */ +-VOID RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) + { +- UCHAR Index; ++ u8 Index; + PQUEUE_ENTRY pEntry; + PNDIS_PACKET pPacket; + PQUEUE_HEADER pQueue; +@@ -240,11 +240,11 @@ VOID RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) + ======================================================================== + */ + +-VOID RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, ++void RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + IN PTXINFO_STRUC pTxInfo, +- IN USHORT USBDMApktLen, ++ u16 USBDMApktLen, + IN BOOLEAN bWiv, +- IN UCHAR QueueSel, IN UCHAR NextValid, IN UCHAR TxBurst) ++ u8 QueueSel, u8 NextValid, u8 TxBurst) + { + pTxInfo->USBDMATxPktLen = USBDMApktLen; + pTxInfo->QSEL = QueueSel; +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index dd2e0d0..861b6b1 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -56,9 +56,9 @@ + ======================================================================== + */ + +-static NTSTATUS RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) ++static int RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; ++ int Status; + + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -83,13 +83,13 @@ static NTSTATUS RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, +- IN PUCHAR pFwImage, IN ULONG FwLen) ++int RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++ u8 *pFwImage, unsigned long FwLen) + { +- UINT32 MacReg; +- NTSTATUS Status; +-/* ULONG i; */ +- USHORT writeLen; ++ u32 MacReg; ++ int Status; ++/* unsigned long i; */ ++ u16 writeLen; + + Status = RTUSBReadMACRegister(pAd, MAC_CSR0, &MacReg); + +@@ -109,9 +109,9 @@ NTSTATUS RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, + return Status; + } + +-NTSTATUS RTUSBVenderReset(IN PRTMP_ADAPTER pAd) ++int RTUSBVenderReset(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; ++ int Status; + DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n")); + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -137,10 +137,10 @@ NTSTATUS RTUSBVenderReset(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) ++int RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length) + { +- NTSTATUS Status; ++ int Status; + + Status = RTUSB_VendorRequest(pAd, + (USBD_TRANSFER_DIRECTION_IN | +@@ -166,10 +166,10 @@ NTSTATUS RTUSBMultiRead(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData) ++int RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData) + { +- NTSTATUS Status; ++ int Status; + + /* TODO: In 2870, use this funciton carefully cause it's not stable. */ + Status = RTUSB_VendorRequest(pAd, +@@ -180,19 +180,19 @@ NTSTATUS RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, + return Status; + } + +-NTSTATUS RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData, IN USHORT length) ++int RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length) + { +- NTSTATUS Status; ++ int Status; + +- USHORT index = 0, Value; +- PUCHAR pSrc = pData; +- USHORT resude = 0; ++ u16 index = 0, Value; ++ u8 *pSrc = pData; ++ u16 resude = 0; + + resude = length % 2; + length += resude; + do { +- Value = (USHORT) (*pSrc | (*(pSrc + 1) << 8)); ++ Value = (u16)(*pSrc | (*(pSrc + 1) << 8)); + Status = RTUSBSingleWrite(pAd, Offset + index, Value); + index += 2; + length -= 2; +@@ -202,10 +202,10 @@ NTSTATUS RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, + return Status; + } + +-NTSTATUS RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, +- IN USHORT Offset, IN USHORT Value) ++int RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++ u16 Offset, u16 Value) + { +- NTSTATUS Status; ++ int Status; + + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -231,11 +231,11 @@ NTSTATUS RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUINT32 pValue) ++int RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u32 *pValue) + { +- NTSTATUS Status = 0; +- UINT32 localVal; ++ int Status = 0; ++ u32 localVal; + + Status = RTUSB_VendorRequest(pAd, + (USBD_TRANSFER_DIRECTION_IN | +@@ -266,18 +266,18 @@ NTSTATUS RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN UINT32 Value) ++int RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u32 Value) + { +- NTSTATUS Status; +- UINT32 localVal; ++ int Status; ++ u32 localVal; + + localVal = Value; + +- Status = RTUSBSingleWrite(pAd, Offset, (USHORT) (localVal & 0xffff)); ++ Status = RTUSBSingleWrite(pAd, Offset, (u16)(localVal & 0xffff)); + Status = + RTUSBSingleWrite(pAd, Offset + 2, +- (USHORT) ((localVal & 0xffff0000) >> 16)); ++ (u16)((localVal & 0xffff0000) >> 16)); + + return Status; + } +@@ -297,12 +297,12 @@ NTSTATUS RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, IN PUCHAR pValue) ++int RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++ u8 Id, u8 *pValue) + { + BBP_CSR_CFG_STRUC BbpCsr; +- UINT i = 0; +- NTSTATUS status; ++ u32 i = 0; ++ int status; + + /* Verify the busy condition */ + do { +@@ -342,7 +342,7 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); + if (status >= 0) { + if (!(BbpCsr.field.Busy == BUSY)) { +- *pValue = (UCHAR) BbpCsr.field.Value; ++ *pValue = (u8)BbpCsr.field.Value; + break; + } + } +@@ -383,12 +383,12 @@ NTSTATUS RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, +- IN UCHAR Id, IN UCHAR Value) ++int RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++ u8 Id, u8 Value) + { + BBP_CSR_CFG_STRUC BbpCsr; +- UINT i = 0; +- NTSTATUS status; ++ u32 i = 0; ++ int status; + /* Verify the busy condition */ + do { + status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word); +@@ -438,11 +438,11 @@ NTSTATUS RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, IN UINT32 Value) ++int RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, u32 Value) + { + PHY_CSR4_STRUC PhyCsr4; +- UINT i = 0; +- NTSTATUS status; ++ u32 i = 0; ++ int status; + + NdisZeroMemory(&PhyCsr4, sizeof(PHY_CSR4_STRUC)); + do { +@@ -486,10 +486,10 @@ NTSTATUS RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, IN UINT32 Value) + + ======================================================================== + */ +-NTSTATUS RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, OUT PUCHAR pData, IN USHORT length) ++int RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length) + { +- NTSTATUS Status = STATUS_SUCCESS; ++ int Status = STATUS_SUCCESS; + + Status = RTUSB_VendorRequest(pAd, + (USBD_TRANSFER_DIRECTION_IN | +@@ -515,10 +515,10 @@ NTSTATUS RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, +- IN USHORT Offset, IN PUCHAR pData, IN USHORT length) ++int RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++ u16 Offset, u8 *pData, u16 length) + { +- NTSTATUS Status = STATUS_SUCCESS; ++ int Status = STATUS_SUCCESS; + + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -528,13 +528,13 @@ NTSTATUS RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, + return Status; + } + +-NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, +- IN USHORT offset, OUT PUSHORT pData) ++int RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++ u16 offset, u16 *pData) + { +- NTSTATUS status; +- USHORT localData; ++ int status; ++ u16 localData; + +- status = RTUSBReadEEPROM(pAd, offset, (PUCHAR) (&localData), 2); ++ status = RTUSBReadEEPROM(pAd, offset, (u8 *)(&localData), 2); + if (status == STATUS_SUCCESS) + *pData = le2cpu16(localData); + +@@ -557,9 +557,9 @@ NTSTATUS RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) ++void RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) + { +- UINT32 value; ++ u32 value; + + /* Timeout 0x40 x 50us */ + value = (SLEEPCID << 16) + (OWNERMCU << 24) + (0x40 << 8) + 1; +@@ -585,9 +585,9 @@ VOID RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-NTSTATUS RTUSBWakeUp(IN PRTMP_ADAPTER pAd) ++int RTUSBWakeUp(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status; ++ int Status; + + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, +@@ -612,7 +612,7 @@ NTSTATUS RTUSBWakeUp(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-VOID RTUSBInitializeCmdQ(IN PCmdQ cmdq) ++void RTUSBInitializeCmdQ(IN PCmdQ cmdq) + { + cmdq->head = NULL; + cmdq->tail = NULL; +@@ -635,13 +635,13 @@ VOID RTUSBInitializeCmdQ(IN PCmdQ cmdq) + + ======================================================================== + */ +-NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + IN NDIS_OID Oid, + IN BOOLEAN SetInformation, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength) ++ void *pInformationBuffer, ++ u32 InformationBufferLength) + { +- NDIS_STATUS status; ++ int status; + PCmdQElmt cmdqelmt = NULL; + RTMP_OS_TASK *pTask = &pAd->cmdQTask; + +@@ -654,14 +654,14 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + #endif + return (NDIS_STATUS_RESOURCES); + +- status = os_alloc_mem(pAd, (PUCHAR *) (&cmdqelmt), sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (u8 **) (&cmdqelmt), sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + + cmdqelmt->buffer = NULL; + if (pInformationBuffer != NULL) { + status = +- os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt->buffer, ++ os_alloc_mem(pAd, (u8 **) & cmdqelmt->buffer, + InformationBufferLength); + if ((status != NDIS_STATUS_SUCCESS) + || (cmdqelmt->buffer == NULL)) { +@@ -716,22 +716,22 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NDIS_STATUS RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, + IN NDIS_OID Oid, +- IN PVOID pInformationBuffer, +- IN UINT32 InformationBufferLength) ++ void *pInformationBuffer, ++ u32 InformationBufferLength) + { +- NDIS_STATUS status; ++ int status; + PCmdQElmt cmdqelmt = NULL; + +- status = os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt, sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (u8 **) & cmdqelmt, sizeof(CmdQElmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt)); + + if (InformationBufferLength > 0) { + status = +- os_alloc_mem(pAd, (PUCHAR *) & cmdqelmt->buffer, ++ os_alloc_mem(pAd, (u8 **) & cmdqelmt->buffer, + InformationBufferLength); + if ((status != NDIS_STATUS_SUCCESS) + || (cmdqelmt->buffer == NULL)) { +@@ -785,7 +785,7 @@ NDIS_STATUS RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-VOID RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) ++void RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) + { + *pcmdqelmt = cmdq->head; + +@@ -833,14 +833,14 @@ VOID RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) + + ======================================================================== + */ +-NTSTATUS RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, +- IN UINT32 TransferFlags, +- IN UCHAR RequestType, +- IN UCHAR Request, +- IN USHORT Value, +- IN USHORT Index, +- IN PVOID TransferBuffer, +- IN UINT32 TransferBufferLength) ++int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++ u32 TransferFlags, ++ u8 RequestType, ++ u8 Request, ++ u16 Value, ++ u16 Index, ++ void *TransferBuffer, ++ u32 TransferBufferLength) + { + int ret = 0; + POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; +@@ -954,22 +954,22 @@ NTSTATUS RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NTSTATUS RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) ++int RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) + { +- NTSTATUS Status = TRUE; ++ int Status = TRUE; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->USB_ResetDevice\n")); + /*RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); */ + return Status; + } + +-VOID CMDHandler(IN PRTMP_ADAPTER pAd) ++void CMDHandler(IN PRTMP_ADAPTER pAd) + { + PCmdQElmt cmdqelmt; +- PUCHAR pData; +- NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS; +-/* ULONG Now = 0; */ +- NTSTATUS ntStatus; ++ u8 *pData; ++ int NdisStatus = NDIS_STATUS_SUCCESS; ++/* unsigned long Now = 0; */ ++ int ntStatus; + /* unsigned long IrqFlags; */ + + while (pAd && pAd->CmdQ.size > 0) { +@@ -990,7 +990,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + switch (cmdqelmt->command) { + case CMDTHREAD_CHECK_GPIO: + { +- UINT32 data; ++ u32 data; + + { + /* Read GPIO pin2 as Hardware controlled radio state */ +@@ -1052,8 +1052,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + case CMDTHREAD_RESET_BULK_OUT: + { +- UINT32 MACValue; +- UCHAR Index; ++ u32 MACValue; ++ u8 Index; + int ret = 0; + PHT_TX_CONTEXT pHTTXContext; + /* RTMP_TX_RING *pTxRing; */ +@@ -1273,7 +1273,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + if (pAd-> + bulkResetPipeid == + 0) { +- UCHAR ++ u8 + pendingContext + = 0; + PHT_TX_CONTEXT +@@ -1377,7 +1377,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + if ((atomic_read(&pAd->PendingRx) == 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) + { +- UCHAR i; ++ u8 i; + RTUSBRxPacket(pAd); + pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index + pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer +@@ -1405,7 +1405,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + /* All transfers must be aborted or cancelled before attempting to reset the pipe. */ + { +- UINT32 MACValue; ++ u32 MACValue; + + { + /*while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) */ +@@ -1440,7 +1440,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + | + fRTMP_ADAPTER_NIC_NOT_EXIST))))) + { +- UCHAR i; ++ u8 i; + + if (RTMP_TEST_FLAG + (pAd, +@@ -1607,8 +1607,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + case CMDTHREAD_SET_ASIC_WCID: + { + RT_SET_ASIC_WCID SetAsicWcid; +- USHORT offset; +- UINT32 MACValue, MACRValue = 0; ++ u16 offset; ++ u32 MACValue, MACRValue = 0; + SetAsicWcid = + *((PRT_SET_ASIC_WCID) (pData)); + +@@ -1618,7 +1618,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + offset = + MAC_WCID_BASE + +- ((UCHAR) SetAsicWcid.WCID) * ++ ((u8)SetAsicWcid.WCID) * + HW_WCID_ENTRY_SIZE; + + DBGPRINT_RAW(RT_DEBUG_TRACE, +@@ -1673,8 +1673,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + case CMDTHREAD_SET_ASIC_WCID_CIPHER: + { + RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; +- USHORT offset; +- UINT32 MACRValue = 0; ++ u16 offset; ++ u32 MACRValue = 0; + SHAREDKEY_MODE_STRUC csr1; + SetAsicWcidAttri = + *((PRT_SET_ASIC_WCID_ATTRI) +@@ -1686,7 +1686,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + offset = + MAC_WCID_ATTRIBUTE_BASE + +- ((UCHAR) SetAsicWcidAttri.WCID) * ++ ((u8)SetAsicWcidAttri.WCID) * + HW_WCID_ATTRI_SIZE; + + DBGPRINT_RAW(RT_DEBUG_TRACE, +@@ -1698,7 +1698,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + &MACRValue); + MACRValue = 0; + MACRValue |= +- (((UCHAR) SetAsicWcidAttri. ++ (((u8)SetAsicWcidAttri. + Cipher) << 1); + + RTUSBWriteMACRegister(pAd, offset, +@@ -1709,7 +1709,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + offset = + PAIRWISE_IVEIV_TABLE_BASE + +- ((UCHAR) SetAsicWcidAttri.WCID) * ++ ((u8)SetAsicWcidAttri.WCID) * + HW_IVEIV_ENTRY_SIZE; + MACRValue = 0; + if ((SetAsicWcidAttri.Cipher <= +@@ -1738,7 +1738,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + &MACRValue); + MACRValue &= (~0xe); + MACRValue |= +- (((UCHAR) SetAsicWcidAttri. ++ (((u8)SetAsicWcidAttri. + Cipher) << 1); + + RTUSBWriteMACRegister(pAd, +@@ -1779,7 +1779,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + (pData)); + AsicAddPairwiseKeyEntry(pAd, + KeyInfo.MacAddr, +- (UCHAR) KeyInfo. ++ (u8)KeyInfo. + MacTabMatchWCID, + &KeyInfo. + CipherKey); +@@ -1789,9 +1789,9 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + case RT_CMD_SET_RX_WCID_TABLE: /*General call for RTMPAddWcidAttributeEntry() */ + { + PMAC_TABLE_ENTRY pEntry; +- UCHAR KeyIdx = 0; +- UCHAR CipherAlg = CIPHER_NONE; +- UCHAR ApIdx = BSS0; ++ u8 KeyIdx = 0; ++ u8 CipherAlg = CIPHER_NONE; ++ u8 ApIdx = BSS0; + + pEntry = (PMAC_TABLE_ENTRY) (pData); + +@@ -1813,7 +1813,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + AsicRemovePairwiseKeyEntry(pAd, + pEntry-> + apidx, +- (UCHAR) ++ (u8) + pEntry-> + Aid); + if ((pEntry->AuthMode <= +@@ -1821,10 +1821,10 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + && (pEntry->WepStatus == + Ndis802_11Encryption1Enabled)) + { +- UINT32 uIV = 1; +- PUCHAR ptr; ++ u32 uIV = 1; ++ u8 *ptr; + +- ptr = (PUCHAR) & uIV; ++ ptr = (u8 *)& uIV; + *(ptr + 3) = + (pAd->StaCfg. + DefaultKeyId << 6); +@@ -1844,10 +1844,10 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + } else if (pEntry->AuthMode == + Ndis802_11AuthModeWPANone) + { +- UINT32 uIV = 1; +- PUCHAR ptr; ++ u32 uIV = 1; ++ u8 *ptr; + +- ptr = (PUCHAR) & uIV; ++ ptr = (u8 *)& uIV; + *(ptr + 3) = + (pAd->StaCfg. + DefaultKeyId << 6); +@@ -1869,7 +1869,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + /* Other case, disable engine. */ + /* Don't worry WPA key, we will add WPA Key after 4-Way handshaking. */ + /* */ +- USHORT offset; ++ u16 offset; + offset = + MAC_WCID_ATTRIBUTE_BASE + + +@@ -1906,8 +1906,8 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + case OID_802_11_ADD_WEP: + { +- UINT i; +- UINT32 KeyIdx; ++ u32 i; ++ u32 KeyIdx; + PNDIS_802_11_WEP pWepKey; + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1926,10 +1926,10 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_ERROR, + ("CmdThread::OID_802_11_ADD_WEP, INVALID_DATA!!\n")); + } else { +- UCHAR CipherAlg; ++ u8 CipherAlg; + pAd->SharedKey[BSS0][KeyIdx]. + KeyLen = +- (UCHAR) pWepKey->KeyLength; ++ (u8)pWepKey->KeyLength; + NdisMoveMemory(pAd-> + SharedKey[BSS0] + [KeyIdx].Key, +@@ -1969,14 +1969,14 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + if (pWepKey-> + KeyIndex & 0x80000000) { + /* Default key for tx (shared key) */ +- UCHAR IVEIV[8]; +- UINT32 WCIDAttri, Value; +- USHORT offset, offset2; ++ u8 IVEIV[8]; ++ u32 WCIDAttri, Value; ++ u16 offset, offset2; + NdisZeroMemory(IVEIV, + 8); + pAd->StaCfg. + DefaultKeyId = +- (UCHAR) KeyIdx; ++ (u8)KeyIdx; + /* Add BSSID to WCTable. because this is Tx wep key. */ + /* WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 */ + WCIDAttri = +@@ -1993,7 +1993,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + WCIDAttri); + /* 1. IV/EIV */ + /* Specify key index to find shared key. */ +- IVEIV[3] = (UCHAR) (KeyIdx << 6); /*WEP Eiv bit off. groupkey index is not 0 */ ++ IVEIV[3] = (u8)(KeyIdx << 6); /*WEP Eiv bit off. groupkey index is not 0 */ + offset = + PAIRWISE_IVEIV_TABLE_BASE + + +@@ -2052,7 +2052,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + } + AsicAddSharedKeyEntry(pAd, BSS0, +- (UCHAR) ++ (u8) + KeyIdx, + CipherAlg, + pWepKey-> +@@ -2080,7 +2080,7 @@ VOID CMDHandler(IN PRTMP_ADAPTER pAd) + + case CMDTHREAD_SET_PSM_BIT: + { +- USHORT *pPsm = (USHORT *) pData; ++ u16 *pPsm = (u16 *) pData; + MlmeSetPsmBit(pAd, *pPsm); + } + break; +diff --git a/drivers/staging/rt3070/md4.h b/drivers/staging/rt3070/md4.h +index f1e5b52..a9cc7b0 100644 +--- a/drivers/staging/rt3070/md4.h ++++ b/drivers/staging/rt3070/md4.h +@@ -30,13 +30,13 @@ + + /* MD4 context. */ + typedef struct _MD4_CTX_ { +- ULONG state[4]; /* state (ABCD) */ +- ULONG count[2]; /* number of bits, modulo 2^64 (lsb first) */ +- UCHAR buffer[64]; /* input buffer */ ++ unsigned long state[4]; /* state (ABCD) */ ++ unsigned long count[2]; /* number of bits, modulo 2^64 (lsb first) */ ++ u8 buffer[64]; /* input buffer */ + } MD4_CTX; + +-VOID MD4Init (MD4_CTX *); +-VOID MD4Update (MD4_CTX *, PUCHAR, UINT); +-VOID MD4Final (UCHAR [16], MD4_CTX *); ++void MD4Init (MD4_CTX *); ++void MD4Update (MD4_CTX *, u8 *, UINT); ++void MD4Final (u8 [16], MD4_CTX *); + + #endif //__MD4_H__ +\ No newline at end of file +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch b/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch new file mode 100644 index 000000000..2f8c4ea1c --- /dev/null +++ b/debian/patches/features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch @@ -0,0 +1,2928 @@ +From 2b0d9735eb1a1f8d79b73f47015f5b5d979c9f0c Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:15 -0800 +Subject: [PATCH 27/42] Staging: rt28x0: remove typedefs (part two) + +commit 8a10a54656aff69de3530efa793cbec8d2b51d02 upstream. + +Remove typedefs from rt_linux.h and rtmp_usb.h. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chip/mac_usb.h | 2 +- + drivers/staging/rt2860/common/ba_action.c | 4 +- + drivers/staging/rt2860/common/cmm_data.c | 40 +++--- + drivers/staging/rt2860/common/cmm_data_pci.c | 20 ++-- + drivers/staging/rt2860/common/cmm_data_usb.c | 6 +- + drivers/staging/rt2860/common/cmm_mac_pci.c | 26 ++-- + drivers/staging/rt2860/common/cmm_mac_usb.c | 6 +- + drivers/staging/rt2860/common/cmm_tkip.c | 4 +- + drivers/staging/rt2860/common/cmm_wpa.c | 4 +- + drivers/staging/rt2860/common/rtmp_init.c | 6 +- + drivers/staging/rt2860/iface/rtmp_pci.h | 6 +- + drivers/staging/rt2860/iface/rtmp_usb.h | 18 +-- + drivers/staging/rt2860/mlme.h | 2 +- + drivers/staging/rt2860/pci_main_dev.c | 34 ++-- + drivers/staging/rt2860/rt_linux.c | 124 ++++++++-------- + drivers/staging/rt2860/rt_linux.h | 60 +++----- + drivers/staging/rt2860/rt_main_dev.c | 16 +- + drivers/staging/rt2860/rt_pci_rbus.c | 86 ++++++------ + drivers/staging/rt2860/rt_usb.c | 52 +++--- + drivers/staging/rt2860/rtmp.h | 210 +++++++++++++------------- + drivers/staging/rt2860/rtmp_os.h | 8 +- + drivers/staging/rt2860/rtmp_timer.h | 2 +- + drivers/staging/rt2860/sta/rtmp_data.c | 28 ++-- + drivers/staging/rt2860/sta_ioctl.c | 4 +- + drivers/staging/rt2860/usb_main_dev.c | 2 +- + drivers/staging/rt2870/common/rtusb_bulk.c | 38 +++--- + drivers/staging/rt2870/common/rtusb_data.c | 6 +- + drivers/staging/rt2870/common/rtusb_io.c | 2 +- + 28 files changed, 394 insertions(+), 422 deletions(-) + +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +index b902074..f146232 100644 +--- a/drivers/staging/rt2860/chip/mac_usb.h ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -198,7 +198,7 @@ typedef struct _RX_CONTEXT { + BOOLEAN Readable; /* Receive Complete back. OK for driver to indicate receiving packet. */ + BOOLEAN IRPPending; /* TODO: To be removed */ + atomic_t IrpLock; +- NDIS_SPIN_LOCK RxContextLock; ++ spinlock_t RxContextLock; + dma_addr_t data_dma; /* urb dma on linux */ + } RX_CONTEXT, *PRX_CONTEXT; + +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index 1ffa176..f90d709 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -100,7 +100,7 @@ void BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, + void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, + IN struct reordering_mpdu *mpdu) + { +- PNDIS_PACKET pPacket; ++ void *pPacket; + + pPacket = mpdu->pPacket; + +@@ -1388,7 +1388,7 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + u8 + FromWhichBSSID) + { +- PNDIS_PACKET pRxPkt; ++ void *pRxPkt; + u8 Header802_3[LENGTH_802_3]; + + /* 1. get 802.3 Header */ +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index cd000fb..64b2177 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -107,7 +107,7 @@ QID_AC_VO, QID_AC_VO }; + int MiniportMMRequest(IN PRTMP_ADAPTER pAd, + u8 QueIdx, u8 *pData, u32 Length) + { +- PNDIS_PACKET pPacket; ++ void *pPacket; + int Status = NDIS_STATUS_SUCCESS; + unsigned long FreeNum; + u8 rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; /*RTMP_HW_HDR_LEN]; */ +@@ -243,7 +243,7 @@ int MiniportMMRequest(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket) ++ u8 QueIdx, void *pPacket) + { + PACKET_INFO PacketInfo; + u8 *pSrcBufVA; +@@ -271,7 +271,7 @@ int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, + } + + int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket) ++ u8 QueIdx, void *pPacket) + { + PACKET_INFO PacketInfo; + u8 *pSrcBufVA; +@@ -506,7 +506,7 @@ int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + (2).Normal + ======================================================================== + */ +-static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) ++static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, void *pPacket) + { + u8 TxFrameType = TX_UNKOWN_FRAME; + u8 Wcid; +@@ -557,7 +557,7 @@ static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, IN PNDIS_PACKET pPacket) + BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + { + PACKET_INFO PacketInfo; +- PNDIS_PACKET pPacket; ++ void *pPacket; + PMAC_TABLE_ENTRY pMacEntry = NULL; + + pPacket = pTxBlk->pPacket; +@@ -663,7 +663,7 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + } + + BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, +- IN NDIS_PACKET * pPacket, IN TX_BLK * pTxBlk) ++ char * pPacket, IN TX_BLK * pTxBlk) + { + + /*DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); */ +@@ -716,7 +716,7 @@ void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, u8 QIdx, /* + u8 Max_Tx_Packets) + { + PQUEUE_ENTRY pEntry = NULL; +- PNDIS_PACKET pPacket; ++ void *pPacket; + int Status = NDIS_STATUS_SUCCESS; + u8 Count = 0; + PQUEUE_HEADER pQueue; +@@ -1380,7 +1380,7 @@ void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + } + + u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pData, unsigned long DataSize) + { + u16 PayloadSize; +@@ -1390,7 +1390,7 @@ u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + u8 Header802_3[14]; + + u8 *pPayload, *pDA, *pSA, *pRemovedLLCSNAP; +- PNDIS_PACKET pClonePacket; ++ void *pClonePacket; + + nMSDU = 0; + +@@ -1479,7 +1479,7 @@ u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + return nMSDU; + } + +-u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, void *pPacket) + { + u8 *pData; + u16 DataSize; +@@ -1853,7 +1853,7 @@ void DisassocParmFill(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + +-BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, void *pPacket) + { + PACKET_INFO PacketInfo; + unsigned long NumberOfBytesRead = 0; +@@ -1908,7 +1908,7 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + return TRUE; + } + +-BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, void *pPacket) + { + u16 TypeLen; + u8 Byte0, Byte1; +@@ -1938,7 +1938,7 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + */ + if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA + && pSrcBuf[2] == 0x03) { +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 6, ++ Sniff2BytesFromNdisBuffer((char *)pSrcBuf, 6, + &Byte0, &Byte1); + RTMP_SET_PACKET_LLCSNAP(pPacket, 1); + TypeLen = (u16)((Byte0 << 8) + Byte1); +@@ -1961,7 +1961,7 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + Frame Check Sequence (4-bytes) */ + + RTMP_SET_PACKET_VLAN(pPacket, 1); +- Sniff2BytesFromNdisBuffer((PNDIS_BUFFER) pSrcBuf, 2, &Byte0, ++ Sniff2BytesFromNdisBuffer((char *)pSrcBuf, 2, &Byte0, + &Byte1); + TypeLen = (u16)((Byte0 << 8) + Byte1); + +@@ -2043,7 +2043,7 @@ void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + IN RX_BLK * pRxBlk, u8 FromWhichBSSID) + { +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ void *pRxPacket = pRxBlk->pRxPacket; + u8 Header802_3[LENGTH_802_3]; + + /* 1. get 802.3 Header */ +@@ -2135,7 +2135,7 @@ void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + u16 Msdu2Size; + u16 Payload1Size, Payload2Size; + u8 *pData2; +- PNDIS_PACKET pPacket2 = NULL; ++ void *pPacket2 = NULL; + + Msdu2Size = *(pRxBlk->pData) + (*(pRxBlk->pData + 1) << 8); + +@@ -2192,13 +2192,13 @@ void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + _fragFrame.Flags = 0; \ + } + +-PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void *RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ void *pRxPacket = pRxBlk->pRxPacket; + u8 *pData = pRxBlk->pData; + u16 DataSize = pRxBlk->DataSize; +- PNDIS_PACKET pRetPacket = NULL; ++ void *pRetPacket = NULL; + u8 *pFragBuffer = NULL; + BOOLEAN bReassDone = FALSE; + u8 HeaderRoom = 0; +@@ -2273,7 +2273,7 @@ done: + /* return defragmented packet if packet is reassembled completely */ + /* otherwise return NULL */ + if (bReassDone) { +- PNDIS_PACKET pNewFragPacket; ++ void *pNewFragPacket; + + /* allocate a new packet buffer for fragment */ + pNewFragPacket = +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index 19eb928..b254947 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -343,7 +343,7 @@ u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + */ + int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + u8 QueIdx, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen) + { + PTXD_STRUC pTxD; +@@ -520,7 +520,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) + { + PRTMP_TX_RING pTxRing; + PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; ++ void *pPacket; + u8 FREE = 0; + TXD_STRUC TxD, *pOriTxD; + /*unsigned long IrqFlags; */ +@@ -664,7 +664,7 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, + void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + { + PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; ++ void *pPacket; + /* int i; */ + u8 FREE = 0; + PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; +@@ -773,16 +773,16 @@ void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); + } + +-PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending) + { + PRXD_STRUC pRxD; +- PNDIS_PACKET pRxPacket = NULL; +- PNDIS_PACKET pNewPacket; ++ void *pRxPacket = NULL; ++ void *pNewPacket; + void *AllocVa; +- NDIS_PHYSICAL_ADDRESS AllocPa; ++ dma_addr_t AllocPa; + BOOLEAN bReschedule = FALSE; + RTMP_DMACB *pRxCell; + +@@ -834,7 +834,7 @@ PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + pRxPacket = pRxCell->pNdisPacket; + + pRxCell->DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE; +- pRxCell->pNdisPacket = (PNDIS_PACKET) pNewPacket; ++ pRxCell->pNdisPacket = (void *)pNewPacket; + pRxCell->DmaBuf.AllocVa = AllocVa; + pRxCell->DmaBuf.AllocPa = AllocPa; + /* update SDP0 to new buffer of rx packet */ +@@ -865,7 +865,7 @@ done: + } + + int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket) ++ u8 QueIdx, void *pPacket) + { + PACKET_INFO PacketInfo; + u8 *pSrcBufVA; +@@ -1041,7 +1041,7 @@ int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + } + + int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket) ++ u8 QueIdx, void *pPacket) + { + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) + ) { +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +index 7906756..f3a7208 100644 +--- a/drivers/staging/rt2860/common/cmm_data_usb.c ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -575,7 +575,7 @@ void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, + */ + int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + u8 QueIdx, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen) + { + PTXINFO_STRUC pTxInfo; +@@ -707,13 +707,13 @@ Return Value: + Note: + ======================================================================== + */ +-PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending) + { + PRX_CONTEXT pRxContext; +- PNDIS_PACKET pSkb; ++ void *pSkb; + u8 *pData; + unsigned long ThisFrameLen; + unsigned long RxBufferLength; +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index c7f4be1..f005342 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -60,7 +60,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + unsigned long ErrorValue = 0; + PRTMP_TX_RING pTxRing; + PRTMP_DMABUF pDmaBuf; +- PNDIS_PACKET pPacket; ++ void *pPacket; + /* PRTMP_REORDERBUF pReorderBuf; */ + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); +@@ -405,7 +405,7 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + PTXD_STRUC pTxD; + PRXD_STRUC pRxD; + PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; ++ void *pPacket; + int i; + PRTMP_TX_RING pTxRing; + unsigned long IrqFlags; +@@ -428,8 +428,8 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + { + pTxD = (PTXD_STRUC) pTxRing->Cell[i].AllocVa; + +- pPacket = (PNDIS_PACKET) pTxRing->Cell[i].pNdisPacket; +- /* release scatter-and-gather NDIS_PACKET */ ++ pPacket = (void *)pTxRing->Cell[i].pNdisPacket; ++ /* release scatter-and-gather char */ + if (pPacket) { + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_FAILURE); +@@ -437,8 +437,8 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + } + + pPacket = +- (PNDIS_PACKET) pTxRing->Cell[i].pNextNdisPacket; +- /* release scatter-and-gather NDIS_PACKET */ ++ (void *)pTxRing->Cell[i].pNextNdisPacket; ++ /* release scatter-and-gather char */ + if (pPacket) { + RELEASE_NDIS_PACKET(pAd, pPacket, + NDIS_STATUS_FAILURE); +@@ -474,8 +474,8 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[i].AllocVa; + + pPacket = +- (PNDIS_PACKET) pAd->MgmtRing.Cell[i].pNdisPacket; +- /* rlease scatter-and-gather NDIS_PACKET */ ++ (void *)pAd->MgmtRing.Cell[i].pNdisPacket; ++ /* rlease scatter-and-gather char */ + if (pPacket) { + PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, + pTxD->SDLen0, +@@ -486,9 +486,9 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + pAd->MgmtRing.Cell[i].pNdisPacket = NULL; + + pPacket = +- (PNDIS_PACKET) pAd->MgmtRing.Cell[i]. ++ (void *)pAd->MgmtRing.Cell[i]. + pNextNdisPacket; +- /* release scatter-and-gather NDIS_PACKET */ ++ /* release scatter-and-gather char */ + if (pPacket) { + PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, + pTxD->SDLen1, +@@ -538,17 +538,17 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + int index, num, j; + PRTMP_TX_RING pTxRing; + PTXD_STRUC pTxD; +- PNDIS_PACKET pPacket; ++ void *pPacket; + unsigned int IrqFlags; + +- /*POS_COOKIE pObj =(POS_COOKIE) pAd->OS_Cookie; */ ++ /*struct os_cookie *pObj =(struct os_cookie *)pAd->OS_Cookie; */ + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPFreeTxRxRingMemory\n")); + + /* Free TxSwQueue Packet */ + for (index = 0; index < NUM_OF_TX_RING; index++) { + PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; ++ void *pPacket; + PQUEUE_HEADER pQueue; + + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index d5bc37d..251debb 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -52,7 +52,7 @@ int NICInitRecv(IN PRTMP_ADAPTER pAd) + { + u8 i; + int Status = NDIS_STATUS_SUCCESS; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n")); + pObj = pObj; +@@ -166,7 +166,7 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pRTSContext = &(pAd->RTSContext); + PTX_CONTEXT pMLMEContext = NULL; + /* PHT_TX_CONTEXT pHTTXContext = NULL; */ +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + void *RingBaseVa; + /* RTMP_TX_RING *pTxRing; */ + RTMP_MGMT_RING *pMgmtRing; +@@ -538,7 +538,7 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pRTSContext = &pAd->RTSContext; + /* PHT_TX_CONTEXT pHTTXContext; */ + /*PRTMP_REORDERBUF pReorderBuf; */ +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + /* RTMP_TX_RING *pTxRing; */ + + DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index ab00a0c..0ac9d74 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -487,7 +487,7 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + + Arguments: + pAd Pointer to our adapter +- PNDIS_PACKET Pointer to Ndis Packet for MIC calculation ++ void * Pointer to Ndis Packet for MIC calculation + pEncap Pointer to LLC encap data + LenEncap Total encap length, might be 0 which indicates no encap + +@@ -501,7 +501,7 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pEncap, + IN PCIPHER_KEY pKey, u8 apidx) + { +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 3fce5a7..6daccd9 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -347,7 +347,7 @@ void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + Arguments: + pAd Pointer to our adapter +- PNDIS_PACKET Pointer to outgoing Ndis frame ++ void * Pointer to outgoing Ndis frame + NumberOfFrag Number of fragment required + + Return Value: +@@ -363,7 +363,7 @@ void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + u32 HdrLen, + u8 *pData, u32 DataLen, IN BOOLEAN bClearFrame) + { +- PNDIS_PACKET pPacket; ++ void *pPacket; + int Status; + + if ((!pEntry) || ((!pEntry->ValidAsCLI) && (!pEntry->ValidAsApCli))) +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 5735dd7..5cda0ea 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -651,7 +651,7 @@ void RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + ======================================================================== + */ + int NICReadRegParameters(IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext) ++ void *WrapperConfigurationContext) + { + int Status = NDIS_STATUS_SUCCESS; + DBGPRINT_S(Status, ("<-- NICReadRegParameters, Status=%x\n", Status)); +@@ -3544,9 +3544,9 @@ BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) + } + + /* not yet support MBSS */ +-PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID) ++struct net_device *get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID) + { +- PNET_DEV dev_p = NULL; ++ struct net_device *dev_p = NULL; + + { + dev_p = pAd->net_dev; +diff --git a/drivers/staging/rt2860/iface/rtmp_pci.h b/drivers/staging/rt2860/iface/rtmp_pci.h +index 4f42158..7759d56 100644 +--- a/drivers/staging/rt2860/iface/rtmp_pci.h ++++ b/drivers/staging/rt2860/iface/rtmp_pci.h +@@ -29,7 +29,7 @@ + #define __RTMP_PCI_H__ + + #define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ +- ((POS_COOKIE)handle)->pci_dev = dev_p; ++ ((struct os_cookie *)handle)->pci_dev = dev_p; + + #ifdef LINUX + // set driver data +@@ -41,12 +41,12 @@ + + #ifdef PCI_MSI_SUPPORT + #define RTMP_MSI_ENABLE(_pAd) \ +- { POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ ++ { struct os_cookie *_pObj = (struct os_cookie *)(_pAd->OS_Cookie); \ + (_pAd)->HaveMsi = pci_enable_msi(_pObj->pci_dev) == 0 ? TRUE : FALSE; \ + } + + #define RTMP_MSI_DISABLE(_pAd) \ +- { POS_COOKIE _pObj = (POS_COOKIE)(_pAd->OS_Cookie); \ ++ { struct os_cookie *_pObj = (struct os_cookie *)(_pAd->OS_Cookie); \ + if (_pAd->HaveMsi == TRUE) \ + pci_disable_msi(_pObj->pci_dev); \ + _pAd->HaveMsi = FALSE; \ +diff --git a/drivers/staging/rt2860/iface/rtmp_usb.h b/drivers/staging/rt2860/iface/rtmp_usb.h +index 40d7d01..f2955a2 100644 +--- a/drivers/staging/rt2860/iface/rtmp_usb.h ++++ b/drivers/staging/rt2860/iface/rtmp_usb.h +@@ -32,10 +32,6 @@ + + #ifdef LINUX + #include +- +-typedef struct usb_device *PUSB_DEV; +-typedef struct urb *purbb_t; +-typedef struct usb_ctrlrequest devctrlrequest; + #endif // LINUX // + + extern u8 EpToQueue[6]; +@@ -108,7 +104,7 @@ extern void dump_urb(struct urb *purb); + #define USBD_TRANSFER_DIRECTION_OUT 0 + #define USBD_TRANSFER_DIRECTION_IN 0 + #define USBD_SHORT_TRANSFER_OK 0 +-#define PURB purbb_t ++#define PURB struct urb * + + #define PIRP void * + #define NDIS_OID u32 +@@ -120,12 +116,12 @@ extern void dump_urb(struct urb *purb); + #define CONTROL_TIMEOUT_JIFFIES ( (100 * OS_HZ) / 1000) + #define UNLINK_TIMEOUT_MS 3 + +-void RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs); +-void RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-void RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-void RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-void RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs); +-void RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutDataPacketComplete(struct urb *purb, struct pt_regs *pt_regs); ++void RTUSBBulkOutMLMEPacketComplete(struct urb *pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutNullFrameComplete(struct urb *pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutRTSFrameComplete(struct urb *pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkOutPsPollComplete(struct urb *pUrb, struct pt_regs *pt_regs); ++void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs); + + #ifdef KTHREAD_SUPPORT + #define RTUSBMlmeUp(pAd) \ +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index 3be1bc8..09e326e 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -843,7 +843,7 @@ typedef struct _MLME_QUEUE { + unsigned long Num; + unsigned long Head; + unsigned long Tail; +- NDIS_SPIN_LOCK Lock; ++ spinlock_t Lock; + MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; + } MLME_QUEUE, *PMLME_QUEUE; + +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 24f939d..20db402 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -160,7 +160,7 @@ static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); + + /* take down the device */ +- rt28xx_close((PNET_DEV) net_dev); ++ rt28xx_close((struct net_device *)net_dev); + + RT_MOD_DEC_USE_COUNT(); + } +@@ -223,7 +223,7 @@ static int rt2860_resume(struct pci_dev *pci_dev) + /* mark device as attached from system and restart if needed */ + netif_device_attach(net_dev); + +- if (rt28xx_open((PNET_DEV) net_dev) != 0) { ++ if (rt28xx_open((struct net_device *)net_dev) != 0) { + /* open fail */ + DBGPRINT(RT_DEBUG_TRACE, + ("<=== rt2860_resume()\n")); +@@ -323,7 +323,7 @@ static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, + goto err_out_iounmap; + } + +- ((POS_COOKIE) handle)->pci_dev = pci_dev; ++ ((struct os_cookie *)handle)->pci_dev = pci_dev; + + rv = RTMPAllocAdapterBlock(handle, &pAd); /*shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" */ + if (rv != NDIS_STATUS_SUCCESS) +@@ -391,7 +391,7 @@ err_out: + + static void __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + { +- PNET_DEV net_dev = pci_get_drvdata(pci_dev); ++ struct net_device *net_dev = pci_get_drvdata(pci_dev); + RTMP_ADAPTER *pAd = NULL; + unsigned long csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ + +@@ -459,9 +459,9 @@ BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + { + u16 device_id; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + pci_read_config_word(pci_dev, PCI_DEVICE_ID, &device_id); + device_id = le2cpu16(device_id); + pObj->DeviceID = device_id; +@@ -501,9 +501,9 @@ void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + u16 reg16, data2, PCIePowerSaveLevel, Configuration; + u32 MacValue; + BOOLEAN bFindIntel = FALSE; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; +@@ -815,10 +815,10 @@ void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) + u16 reg16; + u8 reg8; + u32 DevFn; +- PPCI_DEV pPci_dev; +- POS_COOKIE pObj; ++ struct pci_dev *pPci_dev; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; +@@ -860,9 +860,9 @@ void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level) + { + u16 PCIePowerSaveLevel, reg16; + u16 Configuration; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; +@@ -954,9 +954,9 @@ void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max) + { + u16 PCIePowerSaveLevel, reg16; + u16 Configuration; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_PCIE_DEVICE)) + return; +@@ -1081,11 +1081,11 @@ void RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) + + unsigned long HostConfiguration = 0; + unsigned long Configuration; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + int pos; + u16 reg16; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + DBGPRINT(RT_DEBUG_INFO, + ("RTMPrt3xSetPCIePowerLinkCtrl.===> %lx\n", +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 5f781f5..4c28117 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -80,7 +80,7 @@ char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { + }; + + /* timeout -- ms */ +-void RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_SetPeriodicTimer(struct timer_list * pTimer, + IN unsigned long timeout) + { + timeout = ((timeout * OS_HZ) / 1000); +@@ -90,7 +90,7 @@ void RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, + + /* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ + void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER * pTimer, ++ struct timer_list * pTimer, + IN TIMER_FUNCTION function, void *data) + { + init_timer(pTimer); +@@ -98,7 +98,7 @@ void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, + pTimer->function = function; + } + +-void RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Add_Timer(struct timer_list * pTimer, + IN unsigned long timeout) + { + if (timer_pending(pTimer)) +@@ -109,14 +109,14 @@ void RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, + add_timer(pTimer); + } + +-void RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Mod_Timer(struct timer_list * pTimer, + IN unsigned long timeout) + { + timeout = ((timeout * OS_HZ) / 1000); + mod_timer(pTimer, jiffies + timeout); + } + +-void RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Del_Timer(struct timer_list * pTimer, + OUT BOOLEAN * pCancelled) + { + if (timer_pending(pTimer)) { +@@ -168,16 +168,16 @@ int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem) + return (NDIS_STATUS_SUCCESS); + } + +-PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) ++void *RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) + { + struct sk_buff *skb; + /* Add 2 more bytes for ip header alignment */ + skb = dev_alloc_skb(size + 2); + +- return ((PNDIS_PACKET) skb); ++ return ((void *)skb); + } + +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length) + { + struct sk_buff *pkt; +@@ -193,10 +193,10 @@ PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pkt), PKTSRC_NDIS); + } + +- return (PNDIS_PACKET) pkt; ++ return (void *)pkt; + } + +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress) +@@ -217,11 +217,11 @@ PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, + *VirtualAddress = (void *)NULL; + } + +- return (PNDIS_PACKET) pkt; ++ return (void *)pkt; + } + + void build_tx_packet(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pFrame, unsigned long FrameLen) + { + +@@ -235,10 +235,10 @@ void build_tx_packet(IN PRTMP_ADAPTER pAd, + + void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + { +- POS_COOKIE os_cookie; ++ struct os_cookie *os_cookie; + int index; + +- os_cookie = (POS_COOKIE) pAd->OS_Cookie; ++ os_cookie = (struct os_cookie *)pAd->OS_Cookie; + + if (pAd->BeaconBuf) + kfree(pAd->BeaconBuf); +@@ -277,7 +277,7 @@ BOOLEAN OS_Need_Clone_Packet(void) + clone an input NDIS PACKET to another one. The new internally created NDIS PACKET + must have only one NDIS BUFFER + return - byte copied. 0 means can't create NDIS PACKET +- NOTE: internally created NDIS_PACKET should be destroyed by RTMPFreeNdisPacket ++ NOTE: internally created char should be destroyed by RTMPFreeNdisPacket + + Arguments: + pAd Pointer to our adapter +@@ -294,8 +294,8 @@ BOOLEAN OS_Need_Clone_Packet(void) + */ + int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET * ppOutPacket) ++ void *pInPacket, ++ void ** ppOutPacket) + { + + struct sk_buff *pkt; +@@ -324,18 +324,18 @@ int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + + /* the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() */ + int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, +- OUT PNDIS_PACKET * ppPacket, ++ void ** ppPacket, + u8 *pHeader, + u32 HeaderLen, + u8 *pData, u32 DataLen) + { +- PNDIS_PACKET pPacket; ++ void *pPacket; + ASSERT(pData); + ASSERT(DataLen); + + /* 1. Allocate a packet */ + pPacket = +- (PNDIS_PACKET *) dev_alloc_skb(HeaderLen + DataLen + ++ (void **) dev_alloc_skb(HeaderLen + DataLen + + RTMP_PKT_TAIL_PADDING); + if (pPacket == NULL) { + *ppPacket = NULL; +@@ -363,11 +363,11 @@ int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + /* + ======================================================================== + Description: +- This routine frees a miniport internally allocated NDIS_PACKET and its ++ This routine frees a miniport internally allocated char and its + corresponding NDIS_BUFFER and allocated memory. + ======================================================================== + */ +-void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, void *pPacket) + { + dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); + } +@@ -375,7 +375,7 @@ void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + /* IRQL = DISPATCH_LEVEL */ + /* NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same */ + /* scatter gather buffer */ +-int Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++int Sniff2BytesFromNdisBuffer(char *pFirstBuffer, + u8 DesiredOffset, + u8 *pByte0, u8 *pByte1) + { +@@ -385,12 +385,12 @@ int Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, + return NDIS_STATUS_SUCCESS; + } + +-void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, ++void RTMP_QueryPacketInfo(void *pPacket, + OUT PACKET_INFO * pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen) + { + pPacketInfo->BufferCount = 1; +- pPacketInfo->pFirstBuffer = (PNDIS_BUFFER) GET_OS_PKT_DATAPTR(pPacket); ++ pPacketInfo->pFirstBuffer = (char *)GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + +@@ -398,11 +398,11 @@ void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, + *pSrcBufLen = GET_OS_PKT_LEN(pPacket); + } + +-void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, ++void RTMP_QueryNextPacketInfo(void ** ppPacket, + OUT PACKET_INFO * pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen) + { +- PNDIS_PACKET pPacket = NULL; ++ void *pPacket = NULL; + + if (*ppPacket) + pPacket = GET_OS_PKT_NEXT(*ppPacket); +@@ -410,7 +410,7 @@ void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, + if (pPacket) { + pPacketInfo->BufferCount = 1; + pPacketInfo->pFirstBuffer = +- (PNDIS_BUFFER) GET_OS_PKT_DATAPTR(pPacket); ++ (char *)GET_OS_PKT_DATAPTR(pPacket); + pPacketInfo->PhysicalBufferCount = 1; + pPacketInfo->TotalPacketLength = GET_OS_PKT_LEN(pPacket); + +@@ -429,11 +429,11 @@ void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, + } + } + +-PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, u8 FromWhichBSSID) ++void *DuplicatePacket(IN PRTMP_ADAPTER pAd, ++ void *pPacket, u8 FromWhichBSSID) + { + struct sk_buff *skb; +- PNDIS_PACKET pRetPacket = NULL; ++ void *pRetPacket = NULL; + u16 DataSize; + u8 *pData; + +@@ -450,14 +450,14 @@ PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, + + } + +-PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt(IN PRTMP_ADAPTER pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, + unsigned long DataSize, u8 FromWhichBSSID) + { + struct sk_buff *skb; +- PNDIS_PACKET pPacket = NULL; ++ void *pPacket = NULL; + + if ((skb = + __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) { +@@ -474,8 +474,8 @@ PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, + } + + #define TKIP_TX_MIC_SIZE 8 +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket) ++void *duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++ void *pPacket) + { + struct sk_buff *skb, *newskb; + +@@ -497,8 +497,8 @@ PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, + return OSPKT_TO_RTPKT(skb); + } + +-PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++void *ClonePacket(IN PRTMP_ADAPTER pAd, ++ void *pPacket, + u8 *pData, unsigned long DataSize) + { + struct sk_buff *pRxPkt; +@@ -564,7 +564,7 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + LENGTH_802_3); + } + +-void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++void announce_802_3_packet(IN PRTMP_ADAPTER pAd, void *pPacket) + { + + struct sk_buff *pRxPkt; +@@ -580,7 +580,7 @@ void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) + } + + PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST * sg) ++rt_get_sg_list_from_packet(void *pPacket, RTMP_SCATTER_GATHER_LIST * sg) + { + sg->NumberOfElements = 1; + sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); +@@ -905,7 +905,7 @@ err_free_sk_buff: + Device IRQ related functions. + + *******************************************************************************/ +-int RtmpOSIRQRequest(IN PNET_DEV pNetDev) ++int RtmpOSIRQRequest(struct net_device *pNetDev) + { + #ifdef RTMP_PCI_SUPPORT + struct net_device *net_dev = pNetDev; +@@ -917,7 +917,7 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + ASSERT(pAd); + + if (pAd->infType == RTMP_DEV_INF_PCI) { +- POS_COOKIE _pObj = (POS_COOKIE) (pAd->OS_Cookie); ++ struct os_cookie *_pObj = (struct os_cookie *)(pAd->OS_Cookie); + RTMP_MSI_ENABLE(pAd); + retval = + request_irq(_pObj->pci_dev->irq, rt2860_interrupt, SA_SHIRQ, +@@ -932,7 +932,7 @@ int RtmpOSIRQRequest(IN PNET_DEV pNetDev) + #endif + } + +-int RtmpOSIRQRelease(IN PNET_DEV pNetDev) ++int RtmpOSIRQRelease(struct net_device *pNetDev) + { + struct net_device *net_dev = pNetDev; + PRTMP_ADAPTER pAd = NULL; +@@ -943,7 +943,7 @@ int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + + #ifdef RTMP_PCI_SUPPORT + if (pAd->infType == RTMP_DEV_INF_PCI) { +- POS_COOKIE pObj = (POS_COOKIE) (pAd->OS_Cookie); ++ struct os_cookie *pObj = (struct os_cookie *)(pAd->OS_Cookie); + synchronize_irq(pObj->pci_dev->irq); + free_irq(pObj->pci_dev->irq, (net_dev)); + RTMP_MSI_DISABLE(pAd); +@@ -958,7 +958,7 @@ int RtmpOSIRQRelease(IN PNET_DEV pNetDev) + File open/close related functions. + + *******************************************************************************/ +-RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) ++struct file *RtmpOSFileOpen(char *pPath, int flag, int mode) + { + struct file *filePtr; + +@@ -969,21 +969,21 @@ RTMP_OS_FD RtmpOSFileOpen(char *pPath, int flag, int mode) + -PTR_ERR(filePtr), pPath)); + } + +- return (RTMP_OS_FD) filePtr; ++ return (struct file *)filePtr; + } + +-int RtmpOSFileClose(RTMP_OS_FD osfd) ++int RtmpOSFileClose(struct file *osfd) + { + filp_close(osfd, NULL); + return 0; + } + +-void RtmpOSFileSeek(RTMP_OS_FD osfd, int offset) ++void RtmpOSFileSeek(struct file *osfd, int offset) + { + osfd->f_pos = offset; + } + +-int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) ++int RtmpOSFileRead(struct file *osfd, char *pDataPtr, int readLen) + { + /* The object must have a read method */ + if (osfd->f_op && osfd->f_op->read) { +@@ -994,7 +994,7 @@ int RtmpOSFileRead(RTMP_OS_FD osfd, char *pDataPtr, int readLen) + } + } + +-int RtmpOSFileWrite(RTMP_OS_FD osfd, char *pDataPtr, int writeLen) ++int RtmpOSFileWrite(struct file *osfd, char *pDataPtr, int writeLen) + { + return osfd->f_op->write(osfd, pDataPtr, (size_t) writeLen, + &osfd->f_pos); +@@ -1164,7 +1164,7 @@ int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, + return 0; + } + +-int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, u8 *pMacAddr) ++int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr) + { + struct net_device *net_dev; + RTMP_ADAPTER *pAd; +@@ -1188,10 +1188,10 @@ int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, u8 *pMacAddr) + * Assign the network dev name for created Ralink WiFi interface. + */ + static int RtmpOSNetDevRequestName(IN RTMP_ADAPTER * pAd, +- IN PNET_DEV dev, ++ struct net_device *dev, + char *pPrefixStr, int devIdx) + { +- PNET_DEV existNetDev; ++ struct net_device *existNetDev; + char suffixName[IFNAMSIZ]; + char desiredName[IFNAMSIZ]; + int ifNameIdx, prefixLen, slotNameLen; +@@ -1231,19 +1231,19 @@ static int RtmpOSNetDevRequestName(IN RTMP_ADAPTER * pAd, + return Status; + } + +-void RtmpOSNetDevClose(IN PNET_DEV pNetDev) ++void RtmpOSNetDevClose(struct net_device *pNetDev) + { + dev_close(pNetDev); + } + +-void RtmpOSNetDevFree(PNET_DEV pNetDev) ++void RtmpOSNetDevFree(struct net_device *pNetDev) + { + ASSERT(pNetDev); + + free_netdev(pNetDev); + } + +-int RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, u32 privDataSize) ++int RtmpOSNetDevAlloc(struct net_device ** new_dev_p, u32 privDataSize) + { + /* assign it as null first. */ + *new_dev_p = NULL; +@@ -1258,16 +1258,16 @@ int RtmpOSNetDevAlloc(IN PNET_DEV * new_dev_p, u32 privDataSize) + return NDIS_STATUS_FAILURE; + } + +-PNET_DEV RtmpOSNetDevGetByName(PNET_DEV pNetDev, char *pDevName) ++struct net_device *RtmpOSNetDevGetByName(struct net_device *pNetDev, char *pDevName) + { +- PNET_DEV pTargetNetDev = NULL; ++ struct net_device *pTargetNetDev = NULL; + + pTargetNetDev = dev_get_by_name(dev_net(pNetDev), pDevName); + + return pTargetNetDev; + } + +-void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) ++void RtmpOSNetDeviceRefPut(struct net_device *pNetDev) + { + /* + every time dev_get_by_name is called, and it has returned a valid struct +@@ -1278,7 +1278,7 @@ void RtmpOSNetDeviceRefPut(PNET_DEV pNetDev) + dev_put(pNetDev); + } + +-int RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) ++int RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, struct net_device *pNetDev) + { + + /* TODO: Need to fix this */ +@@ -1286,12 +1286,12 @@ int RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, IN PNET_DEV pNetDev) + return 0; + } + +-void RtmpOSNetDevDetach(PNET_DEV pNetDev) ++void RtmpOSNetDevDetach(struct net_device *pNetDev) + { + unregister_netdev(pNetDev); + } + +-int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, ++int RtmpOSNetDevAttach(struct net_device *pNetDev, + IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook) + { + int ret, rtnl_locked = FALSE; +@@ -1331,7 +1331,7 @@ int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, + return NDIS_STATUS_FAILURE; + } + +-PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, + int devType, + int devNum, + int privMemSize, char *pNamePrefix) +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index 629310a..d63ac7d 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -103,18 +103,6 @@ extern const struct iw_handler_def rt28xx_iw_handler_def; + /*********************************************************************************** + * OS Specific definitions and data structures + ***********************************************************************************/ +-typedef struct pci_dev *PPCI_DEV; +-typedef struct net_device *PNET_DEV; +-typedef void *PNDIS_PACKET; +-typedef char NDIS_PACKET; +-typedef PNDIS_PACKET *PPNDIS_PACKET; +-typedef dma_addr_t NDIS_PHYSICAL_ADDRESS; +-typedef dma_addr_t *PNDIS_PHYSICAL_ADDRESS; +-typedef void *NDIS_HANDLE; +-typedef char *PNDIS_BUFFER; +-typedef struct pid *RTMP_OS_PID; +-typedef struct semaphore RTMP_OS_SEM; +- + typedef int (*HARD_START_XMIT_FUNC) (struct sk_buff * skb, + struct net_device * net_dev); + +@@ -196,8 +184,6 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev); + /*********************************************************************************** + * OS file operation related data structure definitions + ***********************************************************************************/ +-typedef struct file *RTMP_OS_FD; +- + typedef struct _RTMP_OS_FS_INFO_ { + int fsuid; + int fsgid; +@@ -214,8 +200,6 @@ struct os_lock { + unsigned long flags; + }; + +-typedef spinlock_t NDIS_SPIN_LOCK; +- + /* */ + /* spin_lock enhanced for Nested spin lock */ + /* */ +@@ -349,23 +333,17 @@ do { \ + ***********************************************************************************/ + #define RTMP_OS_MGMT_TASK_FLAGS CLONE_VM + +-typedef struct pid *THREAD_PID; + #define THREAD_PID_INIT_VALUE NULL + #define GET_PID(_v) find_get_pid((_v)) + #define GET_PID_NUMBER(_v) pid_nr((_v)) + #define CHECK_PID_LEGALITY(_pid) if (pid_nr((_pid)) > 0) + #define KILL_THREAD_PID(_A, _B, _C) kill_pid((_A), (_B), (_C)) + +-typedef struct tasklet_struct RTMP_NET_TASK_STRUCT; +-typedef struct tasklet_struct *PRTMP_NET_TASK_STRUCT; +- + /*********************************************************************************** + * Timer related definitions and data structures. + **********************************************************************************/ + #define OS_HZ HZ + +-typedef struct timer_list NDIS_MINIPORT_TIMER; +-typedef struct timer_list RTMP_OS_TIMER; + typedef void (*TIMER_FUNCTION) (unsigned long); + + #define OS_WAIT(_time) \ +@@ -409,20 +387,20 @@ struct os_cookie { + struct usb_device *pUsb_Dev; + #endif /* RTMP_MAC_USB // */ + +- RTMP_NET_TASK_STRUCT rx_done_task; +- RTMP_NET_TASK_STRUCT mgmt_dma_done_task; +- RTMP_NET_TASK_STRUCT ac0_dma_done_task; +- RTMP_NET_TASK_STRUCT ac1_dma_done_task; +- RTMP_NET_TASK_STRUCT ac2_dma_done_task; +- RTMP_NET_TASK_STRUCT ac3_dma_done_task; +- RTMP_NET_TASK_STRUCT tbtt_task; ++ struct tasklet_struct rx_done_task; ++ struct tasklet_struct mgmt_dma_done_task; ++ struct tasklet_struct ac0_dma_done_task; ++ struct tasklet_struct ac1_dma_done_task; ++ struct tasklet_struct ac2_dma_done_task; ++ struct tasklet_struct ac3_dma_done_task; ++ struct tasklet_struct tbtt_task; + #ifdef RTMP_MAC_PCI +- RTMP_NET_TASK_STRUCT fifo_statistic_full_task; ++ struct tasklet_struct fifo_statistic_full_task; + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- RTMP_NET_TASK_STRUCT null_frame_complete_task; +- RTMP_NET_TASK_STRUCT rts_frame_complete_task; +- RTMP_NET_TASK_STRUCT pspoll_frame_complete_task; ++ struct tasklet_struct null_frame_complete_task; ++ struct tasklet_struct rts_frame_complete_task; ++ struct tasklet_struct pspoll_frame_complete_task; + #endif /* RTMP_MAC_USB // */ + + unsigned long apd_pid; /*802.1x daemon pid */ +@@ -430,8 +408,6 @@ struct os_cookie { + int ioctl_if; + }; + +-typedef struct os_cookie *POS_COOKIE; +- + /*********************************************************************************** + * OS debugging and printing related definitions and data structure + ***********************************************************************************/ +@@ -510,21 +486,21 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + /* + * unsigned long + * RTMP_GetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ * dma_addr_t PhysicalAddress); + */ + #define RTMP_GetPhysicalAddressLow(PhysicalAddress) (PhysicalAddress) + + /* + * unsigned long + * RTMP_GetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ * dma_addr_t PhysicalAddress); + */ + #define RTMP_GetPhysicalAddressHigh(PhysicalAddress) (0) + + /* + * void + * RTMP_SetPhysicalAddressLow( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, ++ * dma_addr_t PhysicalAddress, + * unsigned long Value); + */ + #define RTMP_SetPhysicalAddressLow(PhysicalAddress, Value) \ +@@ -533,7 +509,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + /* + * void + * RTMP_SetPhysicalAddressHigh( +- * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress, ++ * dma_addr_t PhysicalAddress, + * unsigned long Value); + */ + #define RTMP_SetPhysicalAddressHigh(PhysicalAddress, Value) +@@ -652,7 +628,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + #define RTMP_OS_NETDEV_CARRIER_OFF(_pNetDev) netif_carrier_off((_pNetDev)) + + #define QUEUE_ENTRY_TO_PACKET(pEntry) \ +- (PNDIS_PACKET)(pEntry) ++ (void *)(pEntry) + + #define PACKET_TO_QUEUE_ENTRY(pPacket) \ + (PQUEUE_ENTRY)(pPacket) +@@ -671,7 +647,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + * os packet to rt packet + */ + #define RTPKT_TO_OSPKT(_p) ((struct sk_buff *)(_p)) +-#define OSPKT_TO_RTPKT(_p) ((PNDIS_PACKET)(_p)) ++#define OSPKT_TO_RTPKT(_p) ((void *)(_p)) + + #define GET_OS_PKT_DATAPTR(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->data) +@@ -861,7 +837,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb); + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance); + #endif /* RTMP_MAC_PCI // */ + +-int rt28xx_sta_ioctl(IN PNET_DEV net_dev, IN OUT struct ifreq *rq, int cmd); ++int rt28xx_sta_ioctl(struct net_device *net_dev, IN OUT struct ifreq *rq, int cmd); + + extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char * buf); + extern int ra_mtd_read(int num, loff_t from, size_t len, u_char * buf); +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 21313ee..3472799 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -208,7 +208,7 @@ Note: + (3) BA Reordering: ba_reordering_resource_release() + ======================================================================== + */ +-int rt28xx_close(IN PNET_DEV dev) ++int rt28xx_close(struct net_device *dev) + { + struct net_device *net_dev = (struct net_device *)dev; + RTMP_ADAPTER *pAd = NULL; +@@ -378,12 +378,12 @@ Return Value: + Note: + ======================================================================== + */ +-int rt28xx_open(IN PNET_DEV dev) ++int rt28xx_open(struct net_device *dev) + { + struct net_device *net_dev = (struct net_device *)dev; + PRTMP_ADAPTER pAd = NULL; + int retval = 0; +- /*POS_COOKIE pObj; */ ++ /*struct os_cookie *pObj; */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -459,7 +459,7 @@ static const struct net_device_ops rt2860_netdev_ops = { + .ndo_start_xmit = rt28xx_send_packets, + }; + +-PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook) + { + struct net_device *net_dev = NULL; +@@ -511,7 +511,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + struct net_device *net_dev = skb->dev; + PRTMP_ADAPTER pAd = NULL; + int status = NETDEV_TX_OK; +- PNDIS_PACKET pPacket = (PNDIS_PACKET) skb; ++ void *pPacket = (void *)skb; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -534,7 +534,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb) + } + + RTMP_SET_PACKET_5VT(pPacket, 0); +- STASendPackets((NDIS_HANDLE) pAd, (PPNDIS_PACKET) & pPacket, 1); ++ STASendPackets((void *)pAd, (void **)& pPacket, 1); + + status = NETDEV_TX_OK; + done: +@@ -566,7 +566,7 @@ static int rt28xx_send_packets(IN struct sk_buff *skb_p, + GET_PAD_FROM_NET_DEV(pAd, net_dev); + + if (!(net_dev->flags & IFF_UP)) { +- RELEASE_NDIS_PACKET(pAd, (PNDIS_PACKET) skb_p, ++ RELEASE_NDIS_PACKET(pAd, (void *)skb_p, + NDIS_STATUS_FAILURE); + return NETDEV_TX_OK; + } +@@ -690,7 +690,7 @@ static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device + return NULL; + } + +-BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev) ++BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, struct net_device *net_dev) + { + + /* Unregister network device */ +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index 8df44ba..7494df4 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -82,9 +82,9 @@ void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t *PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + *VirtualAddress = + (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, +@@ -97,9 +97,9 @@ void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t *PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + *VirtualAddress = + (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, +@@ -112,9 +112,9 @@ void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t *PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + *VirtualAddress = + (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, +@@ -126,9 +126,9 @@ void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + void *VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, + PhysicalAddress); +@@ -140,9 +140,9 @@ void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t *PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + *VirtualAddress = + (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, +@@ -153,9 +153,9 @@ void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void *VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + pci_free_consistent(pObj->pci_dev, Length, VirtualAddress, + PhysicalAddress); +@@ -174,9 +174,9 @@ void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress) ++ dma_addr_t *PhysicalAddress) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + *VirtualAddress = + (void *)pci_alloc_consistent(pObj->pci_dev, sizeof(char) * Length, +@@ -194,11 +194,11 @@ void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, + * Notes: + * Cached is ignored: always cached memory + */ +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS ++ OUT dma_addr_t * + PhysicalAddress) + { + struct sk_buff *pkt; +@@ -218,15 +218,15 @@ PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, + PCI_DMA_FROMDEVICE); + } else { + *VirtualAddress = (void *)NULL; +- *PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL; ++ *PhysicalAddress = (dma_addr_t)NULL; + } + +- return (PNDIS_PACKET) pkt; ++ return (void *)pkt; + } + + void Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, unsigned long VirtualAddress) + { +- NDIS_PHYSICAL_ADDRESS PhysicalAddress; ++ dma_addr_t PhysicalAddress; + + PhysicalAddress = + PCI_MAP_SINGLE(pAd, (void *)(VirtualAddress + 1600), +@@ -235,9 +235,9 @@ void Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, unsigned long VirtualAddress + + int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); + tasklet_init(&pObj->mgmt_dma_done_task, mgmt_dma_done_tasklet, +@@ -259,9 +259,9 @@ int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + + void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + { +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + tasklet_kill(&pObj->rx_done_task); + tasklet_kill(&pObj->mgmt_dma_done_task); +@@ -339,7 +339,7 @@ static void mgmt_dma_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -347,7 +347,7 @@ static void mgmt_dma_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* printk("mgmt_dma_done_process\n"); */ + IntSource.word = 0; +@@ -378,7 +378,7 @@ static void rx_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + BOOLEAN bReschedule = 0; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -386,7 +386,7 @@ static void rx_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + pAd->int_pending &= ~(INT_RX); + bReschedule = STARxDoneInterruptHandle(pAd, 0); +@@ -411,7 +411,7 @@ void fifo_statistic_full_tasklet(unsigned long data) + { + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -419,7 +419,7 @@ void fifo_statistic_full_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + pAd->int_pending &= ~(FifoStaFullInt); + NICUpdateFifoStaCounters(pAd); +@@ -446,7 +446,7 @@ static void ac3_dma_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + BOOLEAN bReschedule = 0; + + /* Do nothing if the driver is starting halt state. */ +@@ -455,7 +455,7 @@ static void ac3_dma_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; +@@ -484,7 +484,7 @@ static void ac2_dma_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + BOOLEAN bReschedule = 0; + + /* Do nothing if the driver is starting halt state. */ +@@ -493,7 +493,7 @@ static void ac2_dma_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + IntSource.word = 0; + IntSource.field.Ac2DmaDone = 1; +@@ -522,7 +522,7 @@ static void ac1_dma_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + BOOLEAN bReschedule = 0; + + /* Do nothing if the driver is starting halt state. */ +@@ -531,7 +531,7 @@ static void ac1_dma_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; +@@ -560,7 +560,7 @@ static void ac0_dma_done_tasklet(unsigned long data) + unsigned long flags; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + BOOLEAN bReschedule = 0; + + /* Do nothing if the driver is starting halt state. */ +@@ -569,7 +569,7 @@ static void ac0_dma_done_tasklet(unsigned long data) + (pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)) + return; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* printk("ac0_dma_done_process\n"); */ + IntSource.word = 0; +@@ -606,11 +606,11 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + struct net_device *net_dev = (struct net_device *)dev_instance; + PRTMP_ADAPTER pAd = NULL; + INT_SOURCE_CSR_STRUC IntSource; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* Note 03312008: we can not return here before + RTMP_IO_READ32(pAd, INT_SOURCE_CSR, &IntSource.word); +@@ -794,7 +794,7 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, + int sd_idx, int direction) + { + PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + /* + ------ Porting Information ------ +@@ -813,7 +813,7 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, + */ + + pAd = (PRTMP_ADAPTER) handle; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (sd_idx == 1) { + PTX_BLK pTxBlk; +@@ -830,10 +830,10 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + int direction) + { + PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + pAd = (PRTMP_ADAPTER) handle; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); + +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +index 2db7d6e..68f6f48 100644 +--- a/drivers/staging/rt2860/rt_usb.c ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -198,17 +198,17 @@ void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + static void rtusb_dataout_complete(unsigned long data) + { + PRTMP_ADAPTER pAd; +- purbb_t pUrb; +- POS_COOKIE pObj; ++ struct urb *pUrb; ++ struct os_cookie *pObj; + PHT_TX_CONTEXT pHTTXContext; + u8 BulkOutPipeId; + int Status; + unsigned long IrqFlags; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + Status = pUrb->status; + + /* Store BulkOut PipeId */ +@@ -296,11 +296,11 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pNullContext; +- purbb_t pUrb; ++ struct urb *pUrb; + int Status; + unsigned long irqFlag; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pNullContext = (PTX_CONTEXT) pUrb->context; + pAd = pNullContext->pAd; + Status = pUrb->status; +@@ -345,11 +345,11 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pRTSContext; +- purbb_t pUrb; ++ struct urb *pUrb; + int Status; + unsigned long irqFlag; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pRTSContext = (PTX_CONTEXT) pUrb->context; + pAd = pRTSContext->pAd; + Status = pUrb->status; +@@ -395,10 +395,10 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pPsPollContext; +- purbb_t pUrb; ++ struct urb *pUrb; + int Status; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pPsPollContext = (PTX_CONTEXT) pUrb->context; + pAd = pPsPollContext->pAd; + Status = pUrb->status; +@@ -452,13 +452,13 @@ Note: + */ + static void rx_done_tasklet(unsigned long data) + { +- purbb_t pUrb; ++ struct urb *pUrb; + PRX_CONTEXT pRxContext; + PRTMP_ADAPTER pAd; + int Status; + unsigned int IrqFlags; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pRxContext = (PRX_CONTEXT) pUrb->context; + pAd = pRxContext->pAd; + Status = pUrb->status; +@@ -517,12 +517,12 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PTX_CONTEXT pMLMEContext; + int index; +- PNDIS_PACKET pPacket; +- purbb_t pUrb; ++ void *pPacket; ++ struct urb *pUrb; + int Status; + unsigned long IrqFlags; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pMLMEContext = (PTX_CONTEXT) pUrb->context; + pAd = pMLMEContext->pAd; + Status = pUrb->status; +@@ -598,9 +598,9 @@ static void rtusb_ac3_dma_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; + u8 BulkOutPipeId = 3; +- purbb_t pUrb; ++ struct urb *pUrb; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; + +@@ -638,9 +638,9 @@ static void rtusb_ac2_dma_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; + u8 BulkOutPipeId = 2; +- purbb_t pUrb; ++ struct urb *pUrb; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; + +@@ -678,9 +678,9 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; + u8 BulkOutPipeId = 1; +- purbb_t pUrb; ++ struct urb *pUrb; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; + +@@ -718,9 +718,9 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + PRTMP_ADAPTER pAd; + PHT_TX_CONTEXT pHTTXContext; + u8 BulkOutPipeId = 0; +- purbb_t pUrb; ++ struct urb *pUrb; + +- pUrb = (purbb_t) data; ++ pUrb = (struct urb *)data; + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; + +@@ -755,7 +755,7 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + + int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + { +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* Create receive tasklet */ + tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (unsigned long)pAd); +@@ -782,9 +782,9 @@ int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + + void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + { +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + tasklet_kill(&pObj->rx_done_task); + tasklet_kill(&pObj->mgmt_dma_done_task); +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 6acd29f..8182b2a 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -479,23 +479,23 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + typedef struct _RTMP_DMABUF { + unsigned long AllocSize; + void *AllocVa; /* TxBuf virtual address */ +- NDIS_PHYSICAL_ADDRESS AllocPa; /* TxBuf physical address */ ++ dma_addr_t AllocPa; /* TxBuf physical address */ + } RTMP_DMABUF, *PRTMP_DMABUF; + + /* */ + /* Control block (Descriptor) for all ring descriptor DMA operation, buffer must be */ +-/* contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor */ ++/* contiguous physical memory. char stored the binding Rx packet descriptor */ + /* which won't be released, driver has to wait until upper layer return the packet */ + /* before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair */ +-/* to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor */ ++/* to describe the packet buffer. For Tx, char stored the tx packet descriptor */ + /* which driver should ACK upper layer when the tx is physically done or failed. */ + /* */ + typedef struct _RTMP_DMACB { + unsigned long AllocSize; /* Control block size */ + void *AllocVa; /* Control block virtual address */ +- NDIS_PHYSICAL_ADDRESS AllocPa; /* Control block physical address */ +- PNDIS_PACKET pNdisPacket; +- PNDIS_PACKET pNextNdisPacket; ++ dma_addr_t AllocPa; /* Control block physical address */ ++ void *pNdisPacket; ++ void *pNextNdisPacket; + + RTMP_DMABUF DmaBuf; /* Associated DMA buffer structure */ + } RTMP_DMACB, *PRTMP_DMACB; +@@ -728,7 +728,7 @@ typedef struct _CISCO_IAPP_CONTENT_ { + * Fragment Frame structure + */ + typedef struct _FRAGMENT_FRAME { +- PNDIS_PACKET pFragPacket; ++ void *pFragPacket; + unsigned long RxSize; + u16 Sequence; + u16 LastFrag; +@@ -742,7 +742,7 @@ typedef struct _PACKET_INFO { + u32 PhysicalBufferCount; /* Physical breaks of buffer descripor chained */ + u32 BufferCount; /* Number of Buffer descriptor chained */ + u32 TotalPacketLength; /* Self explained */ +- PNDIS_BUFFER pFirstBuffer; /* Pointer to first buffer descriptor */ ++ char *pFirstBuffer; /* Pointer to first buffer descriptor */ + } PACKET_INFO, *PPACKET_INFO; + + /* */ +@@ -906,7 +906,7 @@ typedef struct _MLME_STRUCT { + unsigned long LastSendNULLpsmTime; + + BOOLEAN bRunning; +- NDIS_SPIN_LOCK TaskLock; ++ spinlock_t TaskLock; + MLME_QUEUE Queue; + + u32 ShiftReg; +@@ -944,7 +944,7 @@ typedef struct _MLME_STRUCT { + **************************************************************************/ + struct reordering_mpdu { + struct reordering_mpdu *next; +- PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ ++ void *pPacket; /* coverted to 802.3 frame */ + int Sequence; /* sequence number of MPDU */ + BOOLEAN bAMSDU; + }; +@@ -956,7 +956,7 @@ struct reordering_list { + + struct reordering_mpdu_pool { + void *mem; +- NDIS_SPIN_LOCK lock; ++ spinlock_t lock; + struct reordering_list freelist; + }; + +@@ -1004,7 +1004,7 @@ typedef struct _BA_REC_ENTRY { + /* u8 RxBufIdxUsed; */ + /* corresponding virtual address for RX reordering packet storage. */ + /*RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; */ +- NDIS_SPIN_LOCK RxReRingLock; /* Rx Ring spinlock */ ++ spinlock_t RxReRingLock; /* Rx Ring spinlock */ + /* struct _BA_REC_ENTRY *pNext; */ + void *pAdapter; + struct reordering_list list; +@@ -1327,10 +1327,10 @@ typedef struct _COMMON_CONFIG { + u32 BeaconRemain; + #endif /* RTMP_MAC_USB // */ + +- NDIS_SPIN_LOCK MeasureReqTabLock; ++ spinlock_t MeasureReqTabLock; + PMEASURE_REQ_TAB pMeasureReqTab; + +- NDIS_SPIN_LOCK TpcReqTabLock; ++ spinlock_t TpcReqTabLock; + PTPC_REQ_TAB pTpcReqTab; + + BOOLEAN PSPXlink; /* 0: Disable. 1: Enable */ +@@ -1716,7 +1716,7 @@ struct _RTMP_CHIP_OP_ { + /* */ + struct _RTMP_ADAPTER { + void *OS_Cookie; /* save specific structure relative to OS */ +- PNET_DEV net_dev; ++ struct net_device *net_dev; + unsigned long VirtualIfCnt; + + RTMP_CHIP_OP chipOps; +@@ -1756,7 +1756,7 @@ struct _RTMP_ADAPTER { + RTMP_TX_RING TxRing[NUM_OF_TX_RING]; /* AC0~4 + HCCA */ + #endif /* RTMP_MAC_PCI // */ + +- NDIS_SPIN_LOCK irq_lock; ++ spinlock_t irq_lock; + u8 irq_disabled; + + #ifdef RTMP_MAC_USB +@@ -1778,11 +1778,11 @@ struct _RTMP_ADAPTER { + + /*======Cmd Thread */ + CmdQ CmdQ; +- NDIS_SPIN_LOCK CmdQLock; /* CmdQLock spinlock */ ++ spinlock_t CmdQLock; /* CmdQLock spinlock */ + RTMP_OS_TASK cmdQTask; + + /*======Semaphores (event) */ +- RTMP_OS_SEM UsbVendorReq_semaphore; ++ struct semaphore UsbVendorReq_semaphore; + void *UsbVendorReqBuf; + wait_queue_head_t *wait; + #endif /* RTMP_MAC_USB // */ +@@ -1804,7 +1804,7 @@ struct _RTMP_ADAPTER { + #ifdef RTMP_TIMER_TASK_SUPPORT + /* If you want use timer task to handle the timer related jobs, enable this. */ + RTMP_TIMER_TASK_QUEUE TimerQ; +- NDIS_SPIN_LOCK TimerQLock; ++ spinlock_t TimerQLock; + RTMP_OS_TASK timerTask; + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + +@@ -1812,15 +1812,15 @@ struct _RTMP_ADAPTER { + /* Tx related parameters */ + /*****************************************************************************************/ + BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; /* for ensuring RTUSBDeQueuePacket get call once */ +- NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; ++ spinlock_t DeQueueLock[NUM_OF_TX_RING]; + + #ifdef RTMP_MAC_USB + /* Data related context and AC specified, 4 AC supported */ +- NDIS_SPIN_LOCK BulkOutLock[6]; /* BulkOut spinlock for 4 ACs */ +- NDIS_SPIN_LOCK MLMEBulkOutLock; /* MLME BulkOut lock */ ++ spinlock_t BulkOutLock[6]; /* BulkOut spinlock for 4 ACs */ ++ spinlock_t MLMEBulkOutLock; /* MLME BulkOut lock */ + + HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; +- NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ ++ spinlock_t TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ + + /* 4 sets of Bulk Out index and pending flag */ + u8 NextBulkOutIndex[4]; /* only used for 4 EDCA bulkout pipe */ +@@ -1833,11 +1833,11 @@ struct _RTMP_ADAPTER { + + /* resource for software backlog queues */ + QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; /* 4 AC + 1 HCCA */ +- NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; /* TxSwQueue spinlock */ ++ spinlock_t TxSwQueueLock[NUM_OF_TX_RING]; /* TxSwQueue spinlock */ + + RTMP_DMABUF MgmtDescRing; /* Shared memory for MGMT descriptors */ + RTMP_MGMT_RING MgmtRing; +- NDIS_SPIN_LOCK MgmtRingLock; /* Prio Ring spinlock */ ++ spinlock_t MgmtRingLock; /* Prio Ring spinlock */ + + /*****************************************************************************************/ + /* Rx related parameters */ +@@ -1845,14 +1845,14 @@ struct _RTMP_ADAPTER { + + #ifdef RTMP_MAC_PCI + RTMP_RX_RING RxRing; +- NDIS_SPIN_LOCK RxRingLock; /* Rx Ring spinlock */ ++ spinlock_t RxRingLock; /* Rx Ring spinlock */ + #ifdef RT3090 +- NDIS_SPIN_LOCK McuCmdLock; /*MCU Command Queue spinlock */ ++ spinlock_t McuCmdLock; /*MCU Command Queue spinlock */ + #endif /* RT3090 // */ + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB + RX_CONTEXT RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ +- NDIS_SPIN_LOCK BulkInLock; /* BulkIn spinlock for 4 ACs */ ++ spinlock_t BulkInLock; /* BulkIn spinlock for 4 ACs */ + u8 PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ + u8 NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ + u8 NextRxBulkInReadIndex; /* Indicate the current RxContext Index which driver can read & process it. */ +@@ -2013,11 +2013,11 @@ struct _RTMP_ADAPTER { + + /*About MacTab, the sta driver will use #0 and #1 for multicast and AP. */ + MAC_TABLE MacTab; /* ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. */ +- NDIS_SPIN_LOCK MacTabLock; ++ spinlock_t MacTabLock; + + BA_TABLE BATable; + +- NDIS_SPIN_LOCK BATabLock; ++ spinlock_t BATabLock; + RALINK_TIMER_STRUCT RECBATimer; + + /* encryption/decryption KEY tables */ +@@ -2170,7 +2170,7 @@ typedef struct _RX_BLK_ { + RT28XX_RXD_STRUC RxD; + PRXWI_STRUC pRxWI; + PHEADER_802_11 pHeader; +- PNDIS_PACKET pRxPacket; ++ void *pRxPacket; + u8 *pData; + u16 DataSize; + u16 Flags; +@@ -2223,7 +2223,7 @@ typedef struct _TX_BLK_ { + HTTRANSMIT_SETTING *pTransmit; + + /* Following structure used for the characteristics of a specific packet. */ +- PNDIS_PACKET pPacket; ++ void *pPacket; + u8 *pSrcBufHeader; /* Reference to the head of sk_buff->data */ + u8 *pSrcBufData; /* Reference to the sk_buff->data, will changed depends on hanlding progresss */ + u32 SrcBufLen; /* Length of packet payload which not including Layer 2 header */ +@@ -2316,7 +2316,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd); + void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd); + + int NICReadRegParameters(IN PRTMP_ADAPTER pAd, +- IN NDIS_HANDLE WrapperConfigurationContext); ++ void *WrapperConfigurationContext); + + #ifdef RTMP_RF_RW_SUPPORT + void NICInitRFRegisters(IN PRTMP_ADAPTER pAd); +@@ -2468,21 +2468,21 @@ BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, + BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, + unsigned long TxRate, IN PMAC_TABLE_ENTRY pMacEntry); + +-int Sniff2BytesFromNdisBuffer(IN PNDIS_BUFFER pFirstBuffer, ++int Sniff2BytesFromNdisBuffer(char *pFirstBuffer, + u8 DesiredOffset, + u8 *pByte0, u8 *pByte1); + +-int STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket); + +-void STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, u32 NumberOfPackets); ++void STASendPackets(void *MiniportAdapterContext, ++ void **ppPacketArray, u32 NumberOfPackets); + + void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN bIntContext, + u8 QueIdx, u8 Max_Tx_Packets); + + int RTMPHardTransmit(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 QueIdx, unsigned long *pFreeTXDLeft); + + int STAHardTransmit(IN PRTMP_ADAPTER pAd, +@@ -2497,17 +2497,17 @@ int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + u8 NumberRequired, u8 *FreeNumberIs); + + int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket); ++ u8 QueIdx, void *pPacket); + + int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket); ++ u8 QueIdx, void *pPacket); + + #ifdef RTMP_MAC_PCI + int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket); ++ u8 QueIdx, void *pPacket); + + int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, +- u8 QueIdx, IN PNDIS_PACKET pPacket); ++ u8 QueIdx, void *pPacket); + + void RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, + IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, u8 QSEL); +@@ -2571,22 +2571,22 @@ void WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd); + + int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + IN BOOLEAN pInsAMSDUHdr, +- IN PNDIS_PACKET pInPacket, +- OUT PNDIS_PACKET * ppOutPacket); ++ void *pInPacket, ++ void ** ppOutPacket); + + int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET * pPacket, ++ void ** pPacket, + u8 *pHeader, + u32 HeaderLen, + u8 *pData, u32 DataLen); + +-void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, void *pPacket); + + BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx); + +-BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, void *pPacket); + +-BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, void *pPacket); + + /* */ + /* Private routines in rtmp_wep.c */ +@@ -3356,7 +3356,7 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + u8 UserPriority, u32 Len); + + void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pEncap, + IN PCIPHER_KEY pKey, u8 apidx); + +@@ -3527,20 +3527,20 @@ void AES_GTK_KEY_WRAP(u8 * key, + /*typedef void (*TIMER_FUNCTION)(unsigned long); */ + + /* timeout -- ms */ +-void RTMP_SetPeriodicTimer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_SetPeriodicTimer(struct timer_list * pTimer, + IN unsigned long timeout); + + void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, +- IN NDIS_MINIPORT_TIMER * pTimer, ++ struct timer_list * pTimer, + IN TIMER_FUNCTION function, void *data); + +-void RTMP_OS_Add_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Add_Timer(struct timer_list * pTimer, + IN unsigned long timeout); + +-void RTMP_OS_Mod_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Mod_Timer(struct timer_list * pTimer, + IN unsigned long timeout); + +-void RTMP_OS_Del_Timer(IN NDIS_MINIPORT_TIMER * pTimer, ++void RTMP_OS_Del_Timer(struct timer_list * pTimer, + OUT BOOLEAN * pCancelled); + + void RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry); +@@ -3556,7 +3556,7 @@ void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t *PhysicalAddress); + + void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd); + +@@ -3567,82 +3567,82 @@ void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t *PhysicalAddress); + + void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, + u32 Index, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t *PhysicalAddress); + + void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void *VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t PhysicalAddress); + + void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t *PhysicalAddress); + + void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t *PhysicalAddress); + + void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + unsigned long Length, + void *VirtualAddress, +- IN NDIS_PHYSICAL_ADDRESS PhysicalAddress); ++ dma_addr_t PhysicalAddress); + +-PNDIS_PACKET RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size); ++void *RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size); + +-PNDIS_PACKET RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +- OUT PNDIS_PHYSICAL_ADDRESS ++ OUT dma_addr_t * + PhysicalAddress); + +-PNDIS_PACKET RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress); + +-PNDIS_PACKET RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, + unsigned long Length); + +-void RTMP_QueryPacketInfo(IN PNDIS_PACKET pPacket, ++void RTMP_QueryPacketInfo(void *pPacket, + OUT PACKET_INFO * pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen); + +-void RTMP_QueryNextPacketInfo(IN PNDIS_PACKET * ppPacket, ++void RTMP_QueryNextPacketInfo(void ** ppPacket, + OUT PACKET_INFO * pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen); + + BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk); + + PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST * sg); ++rt_get_sg_list_from_packet(void *pPacket, RTMP_SCATTER_GATHER_LIST * sg); + +-void announce_802_3_packet(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++void announce_802_3_packet(IN PRTMP_ADAPTER pAd, void *pPacket); + +-u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); ++u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, void *pPacket); + +-PNET_DEV get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID); ++struct net_device *get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID); + +-PNDIS_PACKET duplicate_pkt(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt(IN PRTMP_ADAPTER pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, + unsigned long DataSize, u8 FromWhichBSSID); + +-PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pOldPkt); ++void *duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++ void *pOldPkt); + + void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + IN PBA_REC_ENTRY pBAEntry, +@@ -3659,7 +3659,7 @@ void BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, u8 Wcid); + BOOLEAN OS_Need_Clone_Packet(void); + + void build_tx_packet(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pFrame, unsigned long FrameLen); + + void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, +@@ -3743,18 +3743,18 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + } + + void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 FromWhichBSSID); + + #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ + Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); + /*announce_802_3_packet(_pAd, _pPacket); */ + +-PNDIS_PACKET DuplicatePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, u8 FromWhichBSSID); ++void *DuplicatePacket(IN PRTMP_ADAPTER pAd, ++ void *pPacket, u8 FromWhichBSSID); + +-PNDIS_PACKET ClonePacket(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++void *ClonePacket(IN PRTMP_ADAPTER pAd, ++ void *pPacket, + u8 *pData, unsigned long DataSize); + + /* Normal, AMPDU or AMSDU */ +@@ -3768,12 +3768,12 @@ void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI); + +-PNDIS_PACKET GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending); + +-PNDIS_PACKET RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); ++void *RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); + + enum { + DIDmsg_lnxind_wlansniffrm = 0x00000044, +@@ -3903,10 +3903,10 @@ void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd); + + void tbtt_tasklet(unsigned long data); + +-PNET_DEV RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + IN RTMP_OS_NETDEV_OP_HOOK * pNetHook); + +-BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, IN PNET_DEV net_dev); ++BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, struct net_device *net_dev); + + int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); + +@@ -3950,7 +3950,7 @@ void RtmpPCIDataKickOut(IN PRTMP_ADAPTER pAd, + + int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + u8 QueIdx, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen); + + int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +@@ -4137,10 +4137,10 @@ void append_pkt(IN PRTMP_ADAPTER pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, +- unsigned long DataSize, OUT PNDIS_PACKET * ppPacket); ++ unsigned long DataSize, void ** ppPacket); + + u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, +- PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pData, unsigned long DataSize); + + int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +@@ -4199,7 +4199,7 @@ void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, + + int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + u8 QueIdx, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen); + + void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, +@@ -4262,8 +4262,8 @@ void ReSyncBeaconTime(IN PRTMP_ADAPTER pAd); + + void RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, u8 BandWidth); + +-int rt28xx_close(IN PNET_DEV dev); +-int rt28xx_open(IN PNET_DEV dev); ++int rt28xx_close(struct net_device *dev); ++int rt28xx_open(struct net_device *dev); + + #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) + #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) +@@ -4303,24 +4303,24 @@ int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, + u8 *pSrcMac, + u8 *pData, u32 dataLen); + +-int RtmpOSNetDevAddrSet(IN PNET_DEV pNetDev, u8 *pMacAddr); ++int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr); + +-int RtmpOSNetDevAttach(IN PNET_DEV pNetDev, ++int RtmpOSNetDevAttach(struct net_device *pNetDev, + IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook); + +-void RtmpOSNetDevClose(IN PNET_DEV pNetDev); ++void RtmpOSNetDevClose(struct net_device *pNetDev); + +-void RtmpOSNetDevDetach(IN PNET_DEV pNetDev); ++void RtmpOSNetDevDetach(struct net_device *pNetDev); + +-int RtmpOSNetDevAlloc(IN PNET_DEV * pNewNetDev, u32 privDataSize); ++int RtmpOSNetDevAlloc(struct net_device ** pNewNetDev, u32 privDataSize); + +-void RtmpOSNetDevFree(IN PNET_DEV pNetDev); ++void RtmpOSNetDevFree(struct net_device *pNetDev); + +-PNET_DEV RtmpOSNetDevGetByName(IN PNET_DEV pNetDev, char *pDevName); ++struct net_device *RtmpOSNetDevGetByName(struct net_device *pNetDev, char *pDevName); + +-void RtmpOSNetDeviceRefPut(IN PNET_DEV pNetDev); ++void RtmpOSNetDeviceRefPut(struct net_device *pNetDev); + +-PNET_DEV RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, + int devType, + int devNum, + int privMemSize, char *pNamePrefix); +@@ -4343,14 +4343,14 @@ int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + /* + File operation related function prototypes + */ +-RTMP_OS_FD RtmpOSFileOpen(IN char *pPath, IN int flag, IN int mode); ++struct file *RtmpOSFileOpen(IN char *pPath, IN int flag, IN int mode); + +-int RtmpOSFileClose(IN RTMP_OS_FD osfd); ++int RtmpOSFileClose(struct file *osfd); + +-void RtmpOSFileSeek(IN RTMP_OS_FD osfd, IN int offset); ++void RtmpOSFileSeek(struct file *osfd, IN int offset); + +-int RtmpOSFileRead(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int readLen); ++int RtmpOSFileRead(struct file *osfd, IN char *pDataPtr, IN int readLen); + +-int RtmpOSFileWrite(IN RTMP_OS_FD osfd, IN char *pDataPtr, IN int writeLen); ++int RtmpOSFileWrite(struct file *osfd, IN char *pDataPtr, IN int writeLen); + + #endif /* __RTMP_H__ */ +diff --git a/drivers/staging/rt2860/rtmp_os.h b/drivers/staging/rt2860/rtmp_os.h +index eb79e6f..cff0128 100644 +--- a/drivers/staging/rt2860/rtmp_os.h ++++ b/drivers/staging/rt2860/rtmp_os.h +@@ -72,8 +72,8 @@ typedef struct _RTMP_OS_TASK_ { + /*unsigned long taskFlags; */ + RTMP_TASK_STATUS taskStatus; + #ifndef KTHREAD_SUPPORT +- RTMP_OS_SEM taskSema; +- RTMP_OS_PID taskPID; ++ struct semaphore taskSema; ++ struct pid *taskPID; + struct completion taskComplete; + #endif + unsigned char task_killed; +@@ -84,7 +84,7 @@ typedef struct _RTMP_OS_TASK_ { + #endif + } RTMP_OS_TASK; + +-int RtmpOSIRQRequest(IN PNET_DEV pNetDev); +-int RtmpOSIRQRelease(IN PNET_DEV pNetDev); ++int RtmpOSIRQRequest(struct net_device *pNetDev); ++int RtmpOSIRQRelease(struct net_device *pNetDev); + + #endif /* __RMTP_OS_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +index 441571d..c81e507 100644 +--- a/drivers/staging/rt2860/rtmp_timer.h ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -62,7 +62,7 @@ typedef void(*RTMP_TIMER_TASK_HANDLE) (void *SystemSpecific1, + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + + typedef struct _RALINK_TIMER_STRUCT { +- RTMP_OS_TIMER TimerObj; /* Ndis Timer object */ ++ struct timer_list TimerObj; /* Ndis Timer object */ + BOOLEAN Valid; /* Set to True when call RTMPInitTimer */ + BOOLEAN State; /* True if timer cancelled */ + BOOLEAN PeriodicType; /* True if timer is periodic timer */ +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index b40e511..3d2d678 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -323,7 +323,7 @@ void STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ void *pRxPacket = pRxBlk->pRxPacket; + BOOLEAN bFragment = FALSE; + MAC_TABLE_ENTRY *pEntry = NULL; + u8 FromWhichBSSID = BSS0; +@@ -615,7 +615,7 @@ void STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ void *pRxPacket = pRxBlk->pRxPacket; + + do { + +@@ -660,7 +660,7 @@ void STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + PRXWI_STRUC pRxWI = pRxBlk->pRxWI; + PHEADER_802_11 pHeader = pRxBlk->pHeader; +- PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket; ++ void *pRxPacket = pRxBlk->pRxPacket; + + switch (pHeader->FC.SubType) { + case SUBTYPE_BLOCK_ACK_REQ: +@@ -706,7 +706,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + RT28XX_RXD_STRUC *pRxD; + u8 *pData; + PRXWI_STRUC pRxWI; +- PNDIS_PACKET pRxPacket; ++ void *pRxPacket; + PHEADER_802_11 pHeader; + RX_BLK RxCell; + +@@ -844,8 +844,8 @@ Routine Description: + Early checking and OS-depened parsing for Tx packet send to our STA driver. + + Arguments: +- NDIS_HANDLE MiniportAdapterContext Pointer refer to the device handle, i.e., the pAd. +- PPNDIS_PACKET ppPacketArray The packet array need to do transmission. ++ void * MiniportAdapterContext Pointer refer to the device handle, i.e., the pAd. ++ void ** ppPacketArray The packet array need to do transmission. + u32 NumberOfPackets Number of packet in packet array. + + Return Value: +@@ -856,12 +856,12 @@ Note: + You only can put OS-depened & STA related code in here. + ======================================================================== + */ +-void STASendPackets(IN NDIS_HANDLE MiniportAdapterContext, +- IN PPNDIS_PACKET ppPacketArray, u32 NumberOfPackets) ++void STASendPackets(void *MiniportAdapterContext, ++ void **ppPacketArray, u32 NumberOfPackets) + { + u32 Index; + PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; +- PNDIS_PACKET pPacket; ++ void *pPacket; + BOOLEAN allowToSend = FALSE; + + for (Index = 0; Index < NumberOfPackets; Index++) { +@@ -920,7 +920,7 @@ Note: + You only can put OS-indepened & STA related code in here. + ======================================================================== + */ +-int STASendPacket(IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket) ++int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket) + { + PACKET_INFO PacketInfo; + u8 *pSrcBufVA; +@@ -1561,7 +1561,7 @@ static inline u8 *STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + { + u8 *pHeaderBufPtr; + HEADER_802_11 *pHeader_802_11; +- PNDIS_PACKET pNextPacket; ++ void *pNextPacket; + u32 nextBufLen; + PQUEUE_ENTRY pQEntry; + +@@ -2422,7 +2422,7 @@ void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + Arguments: + pAd Pointer to our adapter +- PNDIS_PACKET Pointer to outgoing Ndis frame ++ void * Pointer to outgoing Ndis frame + NumberOfFrag Number of fragment required + + Return Value: +@@ -2437,7 +2437,7 @@ void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + int STAHardTransmit(IN PRTMP_ADAPTER pAd, + IN TX_BLK * pTxBlk, u8 QueIdx) + { +- NDIS_PACKET *pPacket; ++ char *pPacket; + PQUEUE_ENTRY pQEntry; + + /* --------------------------------------------- */ +@@ -2538,7 +2538,7 @@ unsigned long HashBytesPolynomial(u8 * value, unsigned int len) + } + + void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, +- IN PNDIS_PACKET pPacket, ++ void *pPacket, + u8 FromWhichBSSID) + { + if (TRUE) { +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index 88a7922..d542f4f 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -2450,7 +2450,7 @@ const struct iw_handler_def rt28xx_iw_handler_def = { + int rt28xx_sta_ioctl(IN struct net_device *net_dev, + IN OUT struct ifreq *rq, int cmd) + { +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + RTMP_ADAPTER *pAd = NULL; + struct iwreq *wrq = (struct iwreq *)rq; + BOOLEAN StateMachineTouched = FALSE; +@@ -2458,7 +2458,7 @@ int rt28xx_sta_ioctl(IN struct net_device *net_dev, + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /*check if the interface is down */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 4e387d5..65b0fd7 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -827,7 +827,7 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + ("rt2870_probe(): Allocate memory for os handle failed!\n"); + return -ENOMEM; + } +- ((POS_COOKIE) handle)->pUsb_Dev = usb_dev; ++ ((struct os_cookie *)handle)->pUsb_Dev = usb_dev; + + rv = RTMPAllocAdapterBlock(handle, &pAd); + if (rv != NDIS_STATUS_SUCCESS) { +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index b180f13..d2e967b 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -64,7 +64,7 @@ void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + { + PURB pUrb; + u8 *pSrc = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; + ASSERT(pUrb); +@@ -103,7 +103,7 @@ void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + { + PURB pUrb; + u8 *pSrc = NULL; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + pUrb = pTxContext->pUrb; + ASSERT(pUrb); +@@ -131,7 +131,7 @@ void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + { + PURB pUrb; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + unsigned long RX_bulk_size; + + pUrb = pRxContext->pUrb; +@@ -495,16 +495,16 @@ void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + + } + +-void RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutDataPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { + PHT_TX_CONTEXT pHTTXContext; + PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + u8 BulkOutPipeId; + + pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; + pAd = pHTTXContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + /* Store BulkOut PipeId */ + BulkOutPipeId = pHTTXContext->BulkOutPipeId; +@@ -589,18 +589,18 @@ void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + } + + /* NULL frame use BulkOutPipeId = 0 */ +-void RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutNullFrameComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pNullContext; + int Status; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + pNullContext = (PTX_CONTEXT) pUrb->context; + pAd = pNullContext->pAd; + Status = pUrb->status; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + pObj->null_frame_complete_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->null_frame_complete_task); + } +@@ -684,18 +684,18 @@ void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index) + /* printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); */ + } + +-void RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutMLMEPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { + PTX_CONTEXT pMLMEContext; + PRTMP_ADAPTER pAd; + int Status; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + int index; + + /*DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); */ + pMLMEContext = (PTX_CONTEXT) pUrb->context; + pAd = pMLMEContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + Status = pUrb->status; + index = pMLMEContext->SelfIdx; + +@@ -758,18 +758,18 @@ void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + } + + /* PS-Poll frame use BulkOutPipeId = 0 */ +-void RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs * pt_regs) ++void RTUSBBulkOutPsPollComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { + PRTMP_ADAPTER pAd; + PTX_CONTEXT pPsPollContext; + int Status; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + pPsPollContext = (PTX_CONTEXT) pUrb->context; + pAd = pPsPollContext->pAd; + Status = pUrb->status; + +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + pObj->pspoll_frame_complete_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->pspoll_frame_complete_task); + } +@@ -912,18 +912,18 @@ void RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) + Always returns STATUS_MORE_PROCESSING_REQUIRED + ======================================================================== + */ +-void RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs) ++void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs) + { + /* use a receive tasklet to handle received packets; */ + /* or sometimes hardware IRQ will be disabled here, so we can not */ + /* use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< */ + PRX_CONTEXT pRxContext; + PRTMP_ADAPTER pAd; +- POS_COOKIE pObj; ++ struct os_cookie *pObj; + + pRxContext = (PRX_CONTEXT) pUrb->context; + pAd = pRxContext->pAd; +- pObj = (POS_COOKIE) pAd->OS_Cookie; ++ pObj = (struct os_cookie *)pAd->OS_Cookie; + + pObj->rx_done_task.data = (unsigned long)pUrb; + tasklet_hi_schedule(&pObj->rx_done_task); +@@ -1146,7 +1146,7 @@ void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + PTX_CONTEXT pRTSContext; + u32 i, Idx; + /* unsigned int IrqFlags; */ +-/* NDIS_SPIN_LOCK *pLock; */ ++/* spinlock_t *pLock; */ + /* BOOLEAN *pPending; */ + + /* pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; */ +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index c58201f..471fd4e 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -47,14 +47,14 @@ extern u8 EpToQueue[]; + void REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, + u8 *pData, unsigned long DataSize) + { +- PNDIS_PACKET pPacket; ++ void *pPacket; + u32 nMSDU; + struct sk_buff *pSkb; + + nMSDU = 0; + /* allocate a rx packet */ + pSkb = dev_alloc_skb(RX_BUFFER_AGGRESIZE); +- pPacket = (PNDIS_PACKET) OSPKT_TO_RTPKT(pSkb); ++ pPacket = (void *)OSPKT_TO_RTPKT(pSkb); + if (pSkb) { + + /* convert 802.11 to 802.3 packet */ +@@ -195,7 +195,7 @@ void RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) + { + u8 Index; + PQUEUE_ENTRY pEntry; +- PNDIS_PACKET pPacket; ++ void *pPacket; + PQUEUE_HEADER pQueue; + + for (Index = 0; Index < 4; Index++) { +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index 861b6b1..d15a92e 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -843,7 +843,7 @@ int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, + u32 TransferBufferLength) + { + int ret = 0; +- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; ++ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + DBGPRINT(RT_DEBUG_ERROR, ("device disconnected\n")); +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch b/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch new file mode 100644 index 000000000..50f408dea --- /dev/null +++ b/debian/patches/features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch @@ -0,0 +1,21194 @@ +From 77f0bcb602bae5148de99f8fedb23f81007e6ae2 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Fri, 11 Dec 2009 12:23:16 -0800 +Subject: [PATCH 28/42] Staging: rt28x0: remove typedefs (part three) + +commit 62eb734b490c3851deb5cdba99e477f102549b68 upstream. + +Remove misc typedefs. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/ap.h | 14 +- + drivers/staging/rt2860/chip/mac_pci.h | 8 +- + drivers/staging/rt2860/chip/mac_usb.h | 52 +- + drivers/staging/rt2860/chip/rt30xx.h | 2 +- + drivers/staging/rt2860/chip/rtmp_mac.h | 27 +- + drivers/staging/rt2860/chip/rtmp_phy.h | 4 +- + drivers/staging/rt2860/chips/rt3070.c | 2 +- + drivers/staging/rt2860/chips/rt3090.c | 2 +- + drivers/staging/rt2860/chips/rt30xx.c | 16 +- + drivers/staging/rt2860/chlist.h | 28 +- + drivers/staging/rt2860/common/action.c | 100 +- + drivers/staging/rt2860/common/action.h | 12 +- + drivers/staging/rt2860/common/ba_action.c | 204 ++-- + drivers/staging/rt2860/common/cmm_aes.c | 18 +- + drivers/staging/rt2860/common/cmm_asic.c | 92 +- + drivers/staging/rt2860/common/cmm_cfg.c | 14 +- + drivers/staging/rt2860/common/cmm_data.c | 168 ++-- + drivers/staging/rt2860/common/cmm_data_pci.c | 134 +- + drivers/staging/rt2860/common/cmm_data_usb.c | 132 +- + drivers/staging/rt2860/common/cmm_info.c | 34 +- + drivers/staging/rt2860/common/cmm_mac_pci.c | 96 +- + drivers/staging/rt2860/common/cmm_mac_usb.c | 184 ++-- + drivers/staging/rt2860/common/cmm_sanity.c | 118 +- + drivers/staging/rt2860/common/cmm_sync.c | 50 +- + drivers/staging/rt2860/common/cmm_tkip.c | 34 +- + drivers/staging/rt2860/common/cmm_wep.c | 36 +- + drivers/staging/rt2860/common/cmm_wpa.c | 272 ++-- + drivers/staging/rt2860/common/crypt_hmac.c | 16 +- + drivers/staging/rt2860/common/crypt_md5.c | 16 +- + drivers/staging/rt2860/common/crypt_sha2.c | 22 +- + drivers/staging/rt2860/common/dfs.c | 2 +- + drivers/staging/rt2860/common/ee_efuse.c | 18 +- + drivers/staging/rt2860/common/ee_prom.c | 16 +- + drivers/staging/rt2860/common/eeprom.c | 4 +- + drivers/staging/rt2860/common/mlme.c | 316 +++--- + drivers/staging/rt2860/common/rt_channel.c | 38 +- + drivers/staging/rt2860/common/rt_rf.c | 10 +- + drivers/staging/rt2860/common/rtmp_init.c | 96 +- + drivers/staging/rt2860/common/rtmp_mcu.c | 6 +- + drivers/staging/rt2860/common/rtmp_timer.c | 42 +- + drivers/staging/rt2860/common/spectrum.c | 338 +++--- + drivers/staging/rt2860/crypt_md5.h | 13 +- + drivers/staging/rt2860/crypt_sha2.h | 12 +- + drivers/staging/rt2860/dfs.h | 2 +- + drivers/staging/rt2860/eeprom.h | 8 +- + drivers/staging/rt2860/iface/rtmp_usb.h | 8 +- + drivers/staging/rt2860/mlme.h | 420 +++--- + drivers/staging/rt2860/oid.h | 231 ++-- + drivers/staging/rt2860/pci_main_dev.c | 36 +- + drivers/staging/rt2860/rt_linux.c | 110 +- + drivers/staging/rt2860/rt_linux.h | 10 +- + drivers/staging/rt2860/rt_main_dev.c | 42 +- + drivers/staging/rt2860/rt_pci_rbus.c | 58 +- + drivers/staging/rt2860/rt_usb.c | 72 +- + drivers/staging/rt2860/rtmp.h | 1854 +++++++++++++------------- + drivers/staging/rt2860/rtmp_chip.h | 2 +- + drivers/staging/rt2860/rtmp_ckipmic.h | 4 +- + drivers/staging/rt2860/rtmp_def.h | 4 +- + drivers/staging/rt2860/rtmp_dot11.h | 30 +- + drivers/staging/rt2860/rtmp_iface.h | 18 +- + drivers/staging/rt2860/rtmp_mcu.h | 6 +- + drivers/staging/rt2860/rtmp_os.h | 8 +- + drivers/staging/rt2860/rtmp_timer.h | 32 +- + drivers/staging/rt2860/rtmp_type.h | 16 +- + drivers/staging/rt2860/rtusb_io.h | 38 +- + drivers/staging/rt2860/spectrum.h | 44 +- + drivers/staging/rt2860/spectrum_def.h | 78 +- + drivers/staging/rt2860/sta/assoc.c | 108 +- + drivers/staging/rt2860/sta/auth.c | 46 +- + drivers/staging/rt2860/sta/auth_rsp.c | 14 +- + drivers/staging/rt2860/sta/connect.c | 220 ++-- + drivers/staging/rt2860/sta/rtmp_data.c | 200 ++-- + drivers/staging/rt2860/sta/sanity.c | 28 +- + drivers/staging/rt2860/sta/sync.c | 160 ++-- + drivers/staging/rt2860/sta/wpa.c | 32 +- + drivers/staging/rt2860/sta_ioctl.c | 128 +- + drivers/staging/rt2860/usb_main_dev.c | 64 +- + drivers/staging/rt2860/wpa.h | 60 +- + drivers/staging/rt2870/common/rtusb_bulk.c | 104 +- + drivers/staging/rt2870/common/rtusb_data.c | 26 +- + drivers/staging/rt2870/common/rtusb_io.c | 112 +- + 81 files changed, 3628 insertions(+), 3623 deletions(-) + +diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h +index fb6ab69..3f744a5 100644 +--- a/drivers/staging/rt2860/ap.h ++++ b/drivers/staging/rt2860/ap.h +@@ -41,8 +41,8 @@ + #define __AP_H__ + + /* ap_wpa.c */ +-void WpaStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]); ++void WpaStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, OUT STATE_MACHINE_FUNC Trans[]); + + #ifdef RTMP_MAC_USB + void BeaconUpdateExec(void *SystemSpecific1, +@@ -50,17 +50,17 @@ void BeaconUpdateExec(void *SystemSpecific1, + void *SystemSpecific2, void *SystemSpecific3); + #endif /* RTMP_MAC_USB // */ + +-void RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack); ++void RTMPSetPiggyBack(struct rt_rtmp_adapter *pAd, IN BOOLEAN bPiggyBack); + +-void MacTableReset(IN PRTMP_ADAPTER pAd); ++void MacTableReset(struct rt_rtmp_adapter *pAd); + +-MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, ++struct rt_mac_table_entry *MacTableInsertEntry(struct rt_rtmp_adapter *pAd, + u8 *pAddr, + u8 apidx, IN BOOLEAN CleanAll); + +-BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, ++BOOLEAN MacTableDeleteEntry(struct rt_rtmp_adapter *pAd, + u16 wcid, u8 *pAddr); + +-MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, u8 *pAddr); ++struct rt_mac_table_entry *MacTableLookup(struct rt_rtmp_adapter *pAd, u8 *pAddr); + + #endif /* __AP_H__ */ +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index 2d55327..8dbadd0 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -69,7 +69,7 @@ + // + // TX descriptor format, Tx ring, Mgmt Ring + // +-typedef struct PACKED _TXD_STRUC { ++struct PACKED rt_txd { + // Word 0 + u32 SDPtr0; + // Word 1 +@@ -89,12 +89,12 @@ typedef struct PACKED _TXD_STRUC { + u32 TCO:1; /* */ + u32 UCO:1; /* */ + u32 ICO:1; /* */ +-} TXD_STRUC, *PTXD_STRUC; ++}; + + // + // Rx descriptor format, Rx Ring + // +-typedef struct PACKED _RXD_STRUC { ++typedef struct PACKED rt_rxd { + // Word 0 + u32 SDP0; + // Word 1 +@@ -125,7 +125,7 @@ typedef struct PACKED _RXD_STRUC { + u32 PlcpSignal:1; /* To be moved */ + u32 PlcpRssil:1; /* To be moved */ + u32 Rsv1:13; +-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; ++} RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + typedef union _TX_ATTENUATION_CTRL_STRUC { + struct { +diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h +index f146232..0b67c0b 100644 +--- a/drivers/staging/rt2860/chip/mac_usb.h ++++ b/drivers/staging/rt2860/chip/mac_usb.h +@@ -61,7 +61,7 @@ + #define RXINFO_SIZE 4 + #define RT2870_RXDMALEN_FIELD_SIZE 4 + +-typedef struct PACKED _RXINFO_STRUC { ++typedef struct PACKED rt_rxinfo { + u32 BA:1; + u32 DATA:1; + u32 NULLDATA:1; +@@ -82,14 +82,14 @@ typedef struct PACKED _RXINFO_STRUC { + u32 CipherAlg:1; + u32 LastAMSDU:1; + u32 PlcpSignal:12; +-} RXINFO_STRUC, *PRXINFO_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; ++} RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC; + + /* */ + /* TXINFO */ + /* */ + #define TXINFO_SIZE 4 + +-typedef struct _TXINFO_STRUC { ++struct rt_txinfo { + /* Word 0 */ + u32 USBDMATxPktLen:16; /*used ONLY in USB bulk Aggregation, Total byte counts of all sub-frame. */ + u32 rsv:8; +@@ -99,47 +99,47 @@ typedef struct _TXINFO_STRUC { + u32 rsv2:2; /* Software use. */ + u32 USBDMANextVLD:1; /*used ONLY in USB bulk Aggregation, NextValid */ + u32 USBDMATxburst:1; /*used ONLY in USB bulk Aggre. Force USB DMA transmit frame from current selected endpoint */ +-} TXINFO_STRUC, *PTXINFO_STRUC; ++}; + + /* */ + /* Management ring buffer format */ + /* */ +-typedef struct _MGMT_STRUC { ++struct rt_mgmt { + BOOLEAN Valid; + u8 *pBuffer; + unsigned long Length; +-} MGMT_STRUC, *PMGMT_STRUC; ++}; + + /*////////////////////////////////////////////////////////////////////////// */ +-/* The TX_BUFFER structure forms the transmitted USB packet to the device */ ++/* The struct rt_tx_buffer structure forms the transmitted USB packet to the device */ + /*////////////////////////////////////////////////////////////////////////// */ +-typedef struct __TX_BUFFER { ++struct rt_tx_buffer { + union { + u8 WirelessPacket[TX_BUFFER_NORMSIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; ++ struct rt_header_802_11 NullFrame; ++ struct rt_pspoll_frame PsPollPacket; ++ struct rt_rts_frame RTSFrame; + } field; + u8 Aggregation[4]; /*Buffer for save Aggregation size. */ +-} TX_BUFFER, *PTX_BUFFER; ++}; + +-typedef struct __HTTX_BUFFER { ++struct rt_httx_buffer { + union { + u8 WirelessPacket[MAX_TXBULK_SIZE]; +- HEADER_802_11 NullFrame; +- PSPOLL_FRAME PsPollPacket; +- RTS_FRAME RTSFrame; ++ struct rt_header_802_11 NullFrame; ++ struct rt_pspoll_frame PsPollPacket; ++ struct rt_rts_frame RTSFrame; + } field; + u8 Aggregation[4]; /*Buffer for save Aggregation size. */ +-} HTTX_BUFFER, *PHTTX_BUFFER; ++}; + + /* used to track driver-generated write irps */ +-typedef struct _TX_CONTEXT { ++struct rt_tx_context { + void *pAd; /*Initialized in MiniportInitialize */ + PURB pUrb; /*Initialized in MiniportInitialize */ + PIRP pIrp; /*used to cancel pending bulk out. */ + /*Initialized in MiniportInitialize */ +- PTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ ++ struct rt_tx_buffer *TransferBuffer; /*Initialized in MiniportInitialize */ + unsigned long BulkOutSize; + u8 BulkOutPipeId; + u8 SelfIdx; +@@ -155,15 +155,15 @@ typedef struct _TX_CONTEXT { + u32 TxRate; + dma_addr_t data_dma; /* urb dma on linux */ + +-} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT; ++}; + + /* used to track driver-generated write irps */ +-typedef struct _HT_TX_CONTEXT { ++struct rt_ht_tx_context { + void *pAd; /*Initialized in MiniportInitialize */ + PURB pUrb; /*Initialized in MiniportInitialize */ + PIRP pIrp; /*used to cancel pending bulk out. */ + /*Initialized in MiniportInitialize */ +- PHTTX_BUFFER TransferBuffer; /*Initialized in MiniportInitialize */ ++ struct rt_httx_buffer *TransferBuffer; /*Initialized in MiniportInitialize */ + unsigned long BulkOutSize; /* Indicate the total bulk-out size in bytes in one bulk-transmission */ + u8 BulkOutPipeId; + BOOLEAN IRPPending; +@@ -179,13 +179,13 @@ typedef struct _HT_TX_CONTEXT { + unsigned long ENextBulkOutPosition; /* Indicate the buffer end offset of a bulk-transmission */ + u32 TxRate; + dma_addr_t data_dma; /* urb dma on linux */ +-} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT; ++}; + + /* */ + /* Structure to keep track of receive packets and buffers to indicate */ + /* receive data to the protocol. */ + /* */ +-typedef struct _RX_CONTEXT { ++struct rt_rx_context { + u8 *TransferBuffer; + void *pAd; + PIRP pIrp; /*used to cancel pending bulk in. */ +@@ -200,7 +200,7 @@ typedef struct _RX_CONTEXT { + atomic_t IrpLock; + spinlock_t RxContextLock; + dma_addr_t data_dma; /* urb dma on linux */ +-} RX_CONTEXT, *PRX_CONTEXT; ++}; + + /****************************************************************************** + +@@ -309,7 +309,7 @@ typedef struct _RX_CONTEXT { + RTUSBMlmeUp(pAd); + + #define RTMP_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ +- { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(MAC_TABLE_ENTRY)); \ ++ { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(struct rt_mac_table_entry)); \ + RTUSBMlmeUp(_pAd); \ + } + +diff --git a/drivers/staging/rt2860/chip/rt30xx.h b/drivers/staging/rt2860/chip/rt30xx.h +index 04c92ab..02e1d72 100644 +--- a/drivers/staging/rt2860/chip/rt30xx.h ++++ b/drivers/staging/rt2860/chip/rt30xx.h +@@ -39,7 +39,7 @@ + + #ifdef RT30xx + +-extern REG_PAIR RT30xx_RFRegTable[]; ++extern struct rt_reg_pair RT30xx_RFRegTable[]; + extern u8 NUM_RF_REG_PARMS; + + #endif /* RT30xx // */ +diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h +index 5efe501..f6a7258 100644 +--- a/drivers/staging/rt2860/chip/rtmp_mac.h ++++ b/drivers/staging/rt2860/chip/rtmp_mac.h +@@ -54,7 +54,7 @@ + /*txop : for txop mode */ + /* 0:txop for the MPDU frame will be handles by ASIC by register */ + /* 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS */ +-typedef struct PACKED _TXWI_STRUC { ++struct PACKED rt_txwi { + /* Word 0 */ + /* ex: 00 03 00 40 means txop = 3, PHYMODE = 1 */ + u32 FRAG:1; /* 1 to inform TKIP engine this is a fragment. */ +@@ -88,12 +88,12 @@ typedef struct PACKED _TXWI_STRUC { + u32 IV; + /*Word3 */ + u32 EIV; +-} TXWI_STRUC, *PTXWI_STRUC; ++}; + + /* */ + /* RXWI wireless information format, in PBF. invisible in driver. */ + /* */ +-typedef struct PACKED _RXWI_STRUC { ++struct PACKED rt_rxwi { + /* Word 0 */ + u32 WirelessCliID:8; + u32 KeyIndex:2; +@@ -121,7 +121,7 @@ typedef struct PACKED _RXWI_STRUC { + u32 FOFFSET:8; /* RT35xx */ + u32 rsv2:8; + /*u32 rsv2:16; */ +-} RXWI_STRUC, *PRXWI_STRUC; ++}; + + /* ================================================================================= */ + /* Register format */ +@@ -999,40 +999,41 @@ typedef union _SHAREDKEY_MODE_STRUC { + } field; + u32 word; + } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; +-/* 64-entry for pairwise key table */ +-typedef struct _HW_WCID_ENTRY { /* 8-byte per entry */ ++ ++/* 8-byte per entry, 64-entry for pairwise key table */ ++struct rt_hw_wcid_entry { + u8 Address[6]; + u8 Rsv[2]; +-} HW_WCID_ENTRY, PHW_WCID_ENTRY; ++}; + + /* ================================================================================= */ + /* WCID format */ + /* ================================================================================= */ + /*7.1 WCID ENTRY format : 8bytes */ +-typedef struct _WCID_ENTRY_STRUC { ++struct rt_wcid_entry { + u8 RXBABitmap7; /* bit0 for TID8, bit7 for TID 15 */ + u8 RXBABitmap0; /* bit0 for TID0, bit7 for TID 7 */ + u8 MAC[6]; /* 0 for shared key table. 1 for pairwise key table */ +-} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC; ++}; + + /*8.1.1 SECURITY KEY format : 8DW */ + /* 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table */ +-typedef struct _HW_KEY_ENTRY { /* 32-byte per entry */ ++struct rt_hw_key_entry { + u8 Key[16]; + u8 TxMic[8]; + u8 RxMic[8]; +-} HW_KEY_ENTRY, *PHW_KEY_ENTRY; ++}; + + /*8.1.2 IV/EIV format : 2DW */ + + /*8.1.3 RX attribute entry format : 1DW */ +-typedef struct _MAC_ATTRIBUTE_STRUC { ++struct rt_mac_attribute { + u32 KeyTab:1; /* 0 for shared key table. 1 for pairwise key table */ + u32 PairKeyMode:3; + u32 BSSIDIdx:3; /*multipleBSS index for the WCID */ + u32 RXWIUDF:3; + u32 rsv:22; +-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC; ++}; + + /* ================================================================================= */ + /* HOST-MCU communication data structure */ +diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h +index 48d1860..8b8b0f4 100644 +--- a/drivers/staging/rt2860/chip/rtmp_phy.h ++++ b/drivers/staging/rt2860/chip/rtmp_phy.h +@@ -212,7 +212,7 @@ + #ifdef RTMP_MAC_PCI + /* + basic marco for BBP read operation. +- _pAd: the data structure pointer of RTMP_ADAPTER ++ _pAd: the data structure pointer of struct rt_rtmp_adapter + _bbpID : the bbp register ID + _pV: data pointer used to save the value of queried bbp register. + _bViaMCU: if we need access the bbp via the MCU. +@@ -370,7 +370,7 @@ + + /* + basic marco for BBP write operation. +- _pAd: the data structure pointer of RTMP_ADAPTER ++ _pAd: the data structure pointer of struct rt_rtmp_adapter + _bbpID : the bbp register ID + _pV: data used to save the value of queried bbp register. + _bViaMCU: if we need access the bbp via the MCU. +diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c +index beaaafa..627bad9 100644 +--- a/drivers/staging/rt2860/chips/rt3070.c ++++ b/drivers/staging/rt2860/chips/rt3070.c +@@ -43,7 +43,7 @@ + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif /* RTMP_RF_RW_SUPPORT // */ + +-void NICInitRT3070RFRegisters(IN PRTMP_ADAPTER pAd) ++void NICInitRT3070RFRegisters(struct rt_rtmp_adapter *pAd) + { + int i; + u8 RFValue; +diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c +index b80928c..5927ba4 100644 +--- a/drivers/staging/rt2860/chips/rt3090.c ++++ b/drivers/staging/rt2860/chips/rt3090.c +@@ -43,7 +43,7 @@ + #error "You Should Enable compile flag RTMP_RF_RW_SUPPORT for this chip" + #endif /* RTMP_RF_RW_SUPPORT // */ + +-void NICInitRT3090RFRegisters(IN PRTMP_ADAPTER pAd) ++void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd) + { + int i; + /* Driver must read EEPROM to get RfIcType before initial RF registers */ +diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c +index 39b483c..6e684a3 100644 +--- a/drivers/staging/rt2860/chips/rt30xx.c ++++ b/drivers/staging/rt2860/chips/rt30xx.c +@@ -46,7 +46,7 @@ + /* */ + /* RF register initialization set */ + /* */ +-REG_PAIR RT30xx_RFRegTable[] = { ++struct rt_reg_pair RT30xx_RFRegTable[] = { + {RF_R04, 0x40} + , + {RF_R05, 0x03} +@@ -87,7 +87,7 @@ REG_PAIR RT30xx_RFRegTable[] = { + , + }; + +-u8 NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); ++u8 NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(struct rt_reg_pair)); + + /* Antenna divesity use GPIO3 and EESK pin for control */ + /* Antenna and EEPROM access are both using EESK pin, */ +@@ -95,7 +95,7 @@ u8 NUM_RF_REG_PARMS = (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR)); + /* Then restore antenna after EEPROM access */ + /* The original name of this function is AsicSetRxAnt(), now change to */ + /*void AsicSetRxAnt( */ +-void RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) ++void RT30xxSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant) + { + u32 Value; + #ifdef RTMP_MAC_PCI +@@ -159,7 +159,7 @@ void RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) + + ======================================================================== + */ +-void RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) ++void RTMPFilterCalibration(struct rt_rtmp_adapter *pAd) + { + u8 R55x = 0, value, FilterTarget = 0x1E, BBPValue = 0; + u32 loop = 0, count = 0, loopcnt = 0, ReTry = 0; +@@ -306,7 +306,7 @@ void RTMPFilterCalibration(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxLoadRFNormalModeSetup(struct rt_rtmp_adapter *pAd) + { + u8 RFValue; + +@@ -372,7 +372,7 @@ void RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxLoadRFSleepModeSetup(struct rt_rtmp_adapter *pAd) + { + u8 RFValue; + u32 MACValue; +@@ -428,7 +428,7 @@ void RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) ++void RT30xxReverseRFSleepModeSetup(struct rt_rtmp_adapter *pAd) + { + u8 RFValue; + u32 MACValue; +@@ -493,7 +493,7 @@ void RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd) + + /* end johnli */ + +-void RT30xxHaltAction(IN PRTMP_ADAPTER pAd) ++void RT30xxHaltAction(struct rt_rtmp_adapter *pAd) + { + u32 TxPinCfg = 0x00050F0F; + +diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h +index 4183c8b..ada65e5 100644 +--- a/drivers/staging/rt2860/chlist.h ++++ b/drivers/staging/rt2860/chlist.h +@@ -49,28 +49,28 @@ + #define BAND_24G 1 + #define BAND_BOTH 2 + +-typedef struct _CH_DESP { ++struct rt_ch_desp { + u8 FirstChannel; + u8 NumOfCh; + char MaxTxPwr; /* dBm */ + u8 Geography; /* 0:out door, 1:in door, 2:both */ + BOOLEAN DfsReq; /* Dfs require, 0: No, 1: yes. */ +-} CH_DESP, *PCH_DESP; ++}; + +-typedef struct _CH_REGION { ++struct rt_ch_region { + u8 CountReg[3]; + u8 DfsType; /* 0: CE, 1: FCC, 2: JAP, 3:JAP_W53, JAP_W56 */ +- CH_DESP ChDesp[10]; +-} CH_REGION, *PCH_REGION; ++ struct rt_ch_desp ChDesp[10]; ++}; + +-extern CH_REGION ChRegion[]; ++extern struct rt_ch_region ChRegion[]; + +-typedef struct _CH_FREQ_MAP_ { ++struct rt_ch_freq_map { + u16 channel; + u16 freqKHz; +-} CH_FREQ_MAP; ++}; + +-extern CH_FREQ_MAP CH_HZ_ID_MAP[]; ++extern struct rt_ch_freq_map CH_HZ_ID_MAP[]; + extern int CH_HZ_ID_MAP_NUM; + + #define MAP_CHANNEL_ID_TO_KHZ(_ch, _khz) \ +@@ -103,15 +103,15 @@ extern int CH_HZ_ID_MAP_NUM; + (_ch) = 1; \ + }while(0) + +-void BuildChannelListEx(IN PRTMP_ADAPTER pAd); ++void BuildChannelListEx(struct rt_rtmp_adapter *pAd); + +-void BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++void BuildBeaconChList(struct rt_rtmp_adapter *pAd, + u8 *pBuf, unsigned long *pBufLen); + +-void N_ChannelCheck(IN PRTMP_ADAPTER pAd); ++void N_ChannelCheck(struct rt_rtmp_adapter *pAd); + +-void N_SetCenCh(IN PRTMP_ADAPTER pAd); ++void N_SetCenCh(struct rt_rtmp_adapter *pAd); + +-u8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, u8 channel); ++u8 GetCuntryMaxTxPwr(struct rt_rtmp_adapter *pAd, u8 channel); + + #endif /* __CHLIST_H__ */ +diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c +index 8928ee7..56ad236 100644 +--- a/drivers/staging/rt2860/common/action.c ++++ b/drivers/staging/rt2860/common/action.c +@@ -39,7 +39,7 @@ + #include "../rt_config.h" + #include "action.h" + +-static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++static void ReservedAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + /* + ========================================================================== +@@ -58,8 +58,8 @@ static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + MT2_CLS3ERR cls3err_action + ========================================================================== + */ +-void ActionStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, ++void ActionStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, + OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(S, (STATE_MACHINE_FUNC *) Trans, MAX_ACT_STATE, +@@ -98,19 +98,19 @@ void ActionStateMachineInit(IN PRTMP_ADAPTER pAd, + (STATE_MACHINE_FUNC) MlmeInvalidAction); + } + +-void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeADDBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_ADDBA_REQ_STRUCT *pInfo; ++ struct rt_mlme_addba_req *pInfo; + u8 Addr[6]; + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long Idx; +- FRAME_ADDBA_REQ Frame; ++ struct rt_frame_addba_req Frame; + unsigned long FrameLen; +- BA_ORI_ENTRY *pBAEntry = NULL; ++ struct rt_ba_ori_entry *pBAEntry = NULL; + +- pInfo = (MLME_ADDBA_REQ_STRUCT *) Elem->Msg; +- NdisZeroMemory(&Frame, sizeof(FRAME_ADDBA_REQ)); ++ pInfo = (struct rt_mlme_addba_req *)Elem->Msg; ++ NdisZeroMemory(&Frame, sizeof(struct rt_frame_addba_req)); + + if (MlmeAddBAReqSanity(pAd, Elem->Msg, Elem->MsgLen, Addr)) { + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ +@@ -161,7 +161,7 @@ void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Frame.BaStartSeq.word = cpu2le16(Frame.BaStartSeq.word); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_REQ), &Frame, END_OF_ARGS); ++ sizeof(struct rt_frame_addba_req), &Frame, END_OF_ARGS); + + MiniportMMRequest(pAd, + (MGMT_USE_QUEUE_FLAG | +@@ -182,26 +182,26 @@ void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + send DELBA and delete BaEntry if any + Parametrs: +- Elem - MLME message MLME_DELBA_REQ_STRUCT ++ Elem - MLME message struct rt_mlme_delba_req + + IRQL = DISPATCH_LEVEL + + ========================================================================== + */ +-void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDELBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_DELBA_REQ_STRUCT *pInfo; ++ struct rt_mlme_delba_req *pInfo; + u8 *pOutBuffer = NULL; + u8 *pOutBuffer2 = NULL; + int NStatus; + unsigned long Idx; +- FRAME_DELBA_REQ Frame; ++ struct rt_frame_delba_req Frame; + unsigned long FrameLen; +- FRAME_BAR FrameBar; ++ struct rt_frame_bar FrameBar; + +- pInfo = (MLME_DELBA_REQ_STRUCT *) Elem->Msg; ++ pInfo = (struct rt_mlme_delba_req *)Elem->Msg; + /* must send back DELBA */ +- NdisZeroMemory(&Frame, sizeof(FRAME_DELBA_REQ)); ++ NdisZeroMemory(&Frame, sizeof(struct rt_frame_delba_req)); + DBGPRINT(RT_DEBUG_TRACE, + ("==> MlmeDELBAAction(), Initiator(%d) \n", pInfo->Initiator)); + +@@ -236,7 +236,7 @@ void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FrameBar.BarControl.MTID = 0; /* make sure sequence not clear in DEL funciton. */ + + MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); ++ sizeof(struct rt_frame_bar), &FrameBar, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer2); + DBGPRINT(RT_DEBUG_TRACE, +@@ -269,7 +269,7 @@ void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Frame.ReasonCode = cpu2le16(Frame.ReasonCode); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_DELBA_REQ), &Frame, END_OF_ARGS); ++ sizeof(struct rt_frame_delba_req), &Frame, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + DBGPRINT(RT_DEBUG_TRACE, +@@ -278,25 +278,25 @@ void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +-void MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDLSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +-void MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeInvalidAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + /*u8 * pOutBuffer = NULL; */ + /*Return the receiving frame except the MSB of category filed set to 1. 7.3.1.11 */ + } + +-void PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +-void PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Action = Elem->Msg[LENGTH_802_11 + 1]; + +@@ -313,13 +313,13 @@ void PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerPublicAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) + return; + } + +-static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void ReservedAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Category; + +@@ -333,18 +333,18 @@ static void ReservedAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + hex_dump("Reserved Action Frame", &Elem->Msg[0], Elem->MsgLen); + } + +-void PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerRMAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + return; + } + +-static void respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++static void respond_ht_information_exchange_action(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem) + { + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen; +- FRAME_HT_INFO HTINFOframe, *pFrame; ++ struct rt_frame_ht_info HTINFOframe, *pFrame; + u8 *pAddr; + + /* 2. Always send back ADDBA Response */ +@@ -356,10 +356,10 @@ static void respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, + return; + } + /* get RA */ +- pFrame = (FRAME_HT_INFO *) & Elem->Msg[0]; ++ pFrame = (struct rt_frame_ht_info *) & Elem->Msg[0]; + pAddr = pFrame->Hdr.Addr2; + +- NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO)); ++ NdisZeroMemory(&HTINFOframe, sizeof(struct rt_frame_ht_info)); + /* 2-1. Prepare ADDBA Response frame. */ + { + if (ADHOC_ON(pAd)) +@@ -381,13 +381,13 @@ static void respond_ht_information_exchange_action(IN PRTMP_ADAPTER pAd, + pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_HT_INFO), &HTINFOframe, END_OF_ARGS); ++ sizeof(struct rt_frame_ht_info), &HTINFOframe, END_OF_ARGS); + + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + } + +-void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerHTAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Action = Elem->Msg[LENGTH_802_11 + 1]; + +@@ -436,10 +436,10 @@ void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + break; + case HT_INFO_EXCHANGE: + { +- HT_INFORMATION_OCTET *pHT_info; ++ struct rt_ht_information_octet *pHT_info; + + pHT_info = +- (HT_INFORMATION_OCTET *) & Elem->Msg[LENGTH_802_11 + ++ (struct rt_ht_information_octet *) & Elem->Msg[LENGTH_802_11 + + 2]; + /* 7.4.8.10 */ + DBGPRINT(RT_DEBUG_TRACE, +@@ -467,9 +467,9 @@ void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + FALSE , then continue indicaterx at this moment. + ========================================================================== + */ +-void ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) ++void ORIBATimerTimeout(struct rt_rtmp_adapter *pAd) + { +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_mac_table_entry *pEntry; + int i, total; + u8 TID; + +@@ -489,16 +489,16 @@ void ORIBATimerTimeout(IN PRTMP_ADAPTER pAd) + } + } + +-void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) ++void SendRefreshBAR(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry) + { +- FRAME_BAR FrameBar; ++ struct rt_frame_bar FrameBar; + unsigned long FrameLen; + int NStatus; + u8 *pOutBuffer = NULL; + u16 Sequence; + u8 i, TID; + u16 idx; +- BA_ORI_ENTRY *pBAEntry; ++ struct rt_ba_ori_entry *pBAEntry; + + for (i = 0; i < NUM_OF_TID; i++) { + idx = pEntry->BAOriWcidArray[i]; +@@ -529,7 +529,7 @@ void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + FrameBar.BarControl.TID = TID; /* make sure sequence not clear in DEL funciton. */ + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, ++ sizeof(struct rt_frame_bar), &FrameBar, + END_OF_ARGS); + /*if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET))) */ + if (1) /* Now we always send BAR. */ +@@ -547,11 +547,11 @@ void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + } + } + +-void ActHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, ++void ActHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u8 *Addr1, u8 *Addr2, u8 *Addr3) + { +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); ++ NdisZeroMemory(pHdr80211, sizeof(struct rt_header_802_11)); + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SUBTYPE_ACTION; + +@@ -560,10 +560,10 @@ void ActHeaderInit(IN PRTMP_ADAPTER pAd, + COPY_MAC_ADDR(pHdr80211->Addr3, Addr3); + } + +-void BarHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, u8 *pDA, u8 *pSA) ++void BarHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_frame_bar * pCntlBar, u8 *pDA, u8 *pSA) + { +- NdisZeroMemory(pCntlBar, sizeof(FRAME_BAR)); ++ NdisZeroMemory(pCntlBar, sizeof(struct rt_frame_bar)); + pCntlBar->FC.Type = BTYPE_CNTL; + pCntlBar->FC.SubType = SUBTYPE_BLOCK_ACK_REQ; + pCntlBar->BarControl.MTID = 0; +@@ -571,7 +571,7 @@ void BarHeaderInit(IN PRTMP_ADAPTER pAd, + pCntlBar->BarControl.ACKPolicy = 0; + + pCntlBar->Duration = +- 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(FRAME_BA)); ++ 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(struct rt_frame_ba)); + + COPY_MAC_ADDR(pCntlBar->Addr1, pDA); + COPY_MAC_ADDR(pCntlBar->Addr2, pSA); +@@ -591,7 +591,7 @@ void BarHeaderInit(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void InsertActField(IN PRTMP_ADAPTER pAd, ++void InsertActField(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, u8 Category, u8 ActCode) + { +diff --git a/drivers/staging/rt2860/common/action.h b/drivers/staging/rt2860/common/action.h +index f1d1ac7..974f8b8 100644 +--- a/drivers/staging/rt2860/common/action.h ++++ b/drivers/staging/rt2860/common/action.h +@@ -39,18 +39,18 @@ + #ifndef __ACTION_H__ + #define __ACTION_H__ + +-typedef struct PACKED __HT_INFO_OCTET { ++struct PACKED rt_ht_information_octet { + u8 Request:1; + u8 Forty_MHz_Intolerant:1; + u8 STA_Channel_Width:1; + u8 Reserved:5; +-} HT_INFORMATION_OCTET; ++}; + +-typedef struct PACKED __FRAME_HT_INFO { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_ht_info { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; +- HT_INFORMATION_OCTET HT_Info; +-} FRAME_HT_INFO, *PFRAME_HT_INFO; ++ struct rt_ht_information_octet HT_Info; ++}; + + #endif /* __ACTION_H__ */ +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index f90d709..69eea40 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -38,12 +38,12 @@ + + #define RESET_RCV_SEQ (0xFFFF) + +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, ++static void ba_mpdu_blk_free(struct rt_rtmp_adapter *pAd, + struct reordering_mpdu *mpdu_blk); + +-BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, u16 * Idx); ++struct rt_ba_ori_entry *BATableAllocOriEntry(struct rt_rtmp_adapter *pAd, u16 * Idx); + +-BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, u16 * Idx); ++struct rt_ba_rec_entry *BATableAllocRecEntry(struct rt_rtmp_adapter *pAd, u16 * Idx); + + void BAOriSessionSetupTimeout(void *SystemSpecific1, + void *FunctionContext, +@@ -61,8 +61,8 @@ BUILD_TIMER_FUNCTION(BARecSessionIdleTimeout); + #define ANNOUNCE_REORDERING_PACKET(_pAd, _mpdu_blk) \ + Announce_Reordering_Packet(_pAd, _mpdu_blk); + +-void BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntryPeer, u8 * pWinSize) ++void BA_MaxWinSizeReasign(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntryPeer, u8 * pWinSize) + { + u8 MaxSize; + +@@ -97,7 +97,7 @@ void BA_MaxWinSizeReasign(IN PRTMP_ADAPTER pAd, + } + } + +-void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd, ++void Announce_Reordering_Packet(struct rt_rtmp_adapter *pAd, + IN struct reordering_mpdu *mpdu) + { + void *pPacket; +@@ -194,10 +194,10 @@ static inline struct reordering_mpdu *ba_reordering_mpdu_probe(struct + /* + * free all resource for reordering mechanism + */ +-void ba_reordering_resource_release(PRTMP_ADAPTER pAd) ++void ba_reordering_resource_release(struct rt_rtmp_adapter *pAd) + { +- BA_TABLE *Tab; +- PBA_REC_ENTRY pBAEntry; ++ struct rt_ba_table *Tab; ++ struct rt_ba_rec_entry *pBAEntry; + struct reordering_mpdu *mpdu_blk; + int i; + +@@ -229,7 +229,7 @@ void ba_reordering_resource_release(PRTMP_ADAPTER pAd) + /* + * Allocate all resource for reordering mechanism + */ +-BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) ++BOOLEAN ba_reordering_resource_init(struct rt_rtmp_adapter *pAd, int num) + { + int i; + u8 *mem; +@@ -277,7 +277,7 @@ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num) + + /*static int blk_count=0; // sample take off, no use */ + +-static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd) ++static struct reordering_mpdu *ba_mpdu_blk_alloc(struct rt_rtmp_adapter *pAd) + { + struct reordering_mpdu *mpdu_blk; + +@@ -292,7 +292,7 @@ static struct reordering_mpdu *ba_mpdu_blk_alloc(PRTMP_ADAPTER pAd) + return mpdu_blk; + } + +-static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, ++static void ba_mpdu_blk_free(struct rt_rtmp_adapter *pAd, + struct reordering_mpdu *mpdu_blk) + { + ASSERT(mpdu_blk); +@@ -303,8 +303,8 @@ static void ba_mpdu_blk_free(PRTMP_ADAPTER pAd, + NdisReleaseSpinLock(&pAd->mpdu_blk_pool.lock); + } + +-static u16 ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, ++static u16 ba_indicate_reordering_mpdus_in_order(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry, + u16 StartSeq) + { + struct reordering_mpdu *mpdu_blk; +@@ -334,8 +334,8 @@ static u16 ba_indicate_reordering_mpdus_in_order(IN PRTMP_ADAPTER pAd, + return LastIndSeq; + } + +-static void ba_indicate_reordering_mpdus_le_seq(IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, ++static void ba_indicate_reordering_mpdus_le_seq(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry, + u16 Sequence) + { + struct reordering_mpdu *mpdu_blk; +@@ -358,8 +358,8 @@ static void ba_indicate_reordering_mpdus_le_seq(IN PRTMP_ADAPTER pAd, + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } + +-static void ba_refresh_reordering_mpdus(IN PRTMP_ADAPTER pAd, +- PBA_REC_ENTRY pBAEntry) ++static void ba_refresh_reordering_mpdus(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry) + { + struct reordering_mpdu *mpdu_blk; + +@@ -381,8 +381,8 @@ static void ba_refresh_reordering_mpdus(IN PRTMP_ADAPTER pAd, + } + + /*static */ +-void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, ++void ba_flush_reordering_timeout_mpdus(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry, + unsigned long Now32) + { + u16 Sequence; +@@ -440,14 +440,14 @@ void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, + * generate ADDBA request to + * set up BA agreement + */ +-void BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, ++void BAOriSessionSetUp(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 TID, + u16 TimeOut, + unsigned long DelayTime, IN BOOLEAN isForced) + { +- /*MLME_ADDBA_REQ_STRUCT AddbaReq; */ +- BA_ORI_ENTRY *pBAEntry = NULL; ++ /*struct rt_mlme_addba_req AddbaReq; */ ++ struct rt_ba_ori_entry *pBAEntry = NULL; + u16 Idx; + BOOLEAN Cancelled; + +@@ -506,17 +506,17 @@ void BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, + RTMPSetTimer(&pBAEntry->ORIBATimer, DelayTime); + } + +-void BAOriSessionAdd(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN PFRAME_ADDBA_RSP pFrame) ++void BAOriSessionAdd(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_frame_addba_rsp * pFrame) + { +- BA_ORI_ENTRY *pBAEntry = NULL; ++ struct rt_ba_ori_entry *pBAEntry = NULL; + BOOLEAN Cancelled; + u8 TID; + u16 Idx; + u8 *pOutBuffer2 = NULL; + int NStatus; + unsigned long FrameLen; +- FRAME_BAR FrameBar; ++ struct rt_frame_bar FrameBar; + + TID = pFrame->BaParm.TID; + Idx = pEntry->BAOriWcidArray[TID]; +@@ -562,7 +562,7 @@ void BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; /* make sure sequence not clear in DEL funciton. */ + FrameBar.BarControl.TID = pBAEntry->TID; /* make sure sequence not clear in DEL funciton. */ + MakeOutgoingFrame(pOutBuffer2, &FrameLen, +- sizeof(FRAME_BAR), &FrameBar, END_OF_ARGS); ++ sizeof(struct rt_frame_bar), &FrameBar, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer2, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer2); + +@@ -571,10 +571,10 @@ void BAOriSessionAdd(IN PRTMP_ADAPTER pAd, + } + } + +-BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN PFRAME_ADDBA_REQ pFrame) ++BOOLEAN BARecSessionAdd(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_frame_addba_req * pFrame) + { +- BA_REC_ENTRY *pBAEntry = NULL; ++ struct rt_ba_rec_entry *pBAEntry = NULL; + BOOLEAN Status = TRUE; + BOOLEAN Cancelled; + u16 Idx; +@@ -660,10 +660,10 @@ BOOLEAN BARecSessionAdd(IN PRTMP_ADAPTER pAd, + return (Status); + } + +-BA_REC_ENTRY *BATableAllocRecEntry(IN PRTMP_ADAPTER pAd, u16 * Idx) ++struct rt_ba_rec_entry *BATableAllocRecEntry(struct rt_rtmp_adapter *pAd, u16 * Idx) + { + int i; +- BA_REC_ENTRY *pBAEntry = NULL; ++ struct rt_ba_rec_entry *pBAEntry = NULL; + + NdisAcquireSpinLock(&pAd->BATabLock); + +@@ -690,10 +690,10 @@ done: + return pBAEntry; + } + +-BA_ORI_ENTRY *BATableAllocOriEntry(IN PRTMP_ADAPTER pAd, u16 * Idx) ++struct rt_ba_ori_entry *BATableAllocOriEntry(struct rt_rtmp_adapter *pAd, u16 * Idx) + { + int i; +- BA_ORI_ENTRY *pBAEntry = NULL; ++ struct rt_ba_ori_entry *pBAEntry = NULL; + + NdisAcquireSpinLock(&pAd->BATabLock); + +@@ -718,10 +718,10 @@ done: + return pBAEntry; + } + +-void BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) ++void BATableFreeOriEntry(struct rt_rtmp_adapter *pAd, unsigned long Idx) + { +- BA_ORI_ENTRY *pBAEntry = NULL; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_ba_ori_entry *pBAEntry = NULL; ++ struct rt_mac_table_entry *pEntry; + + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) + return; +@@ -752,10 +752,10 @@ void BATableFreeOriEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) + } + } + +-void BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) ++void BATableFreeRecEntry(struct rt_rtmp_adapter *pAd, unsigned long Idx) + { +- BA_REC_ENTRY *pBAEntry = NULL; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_ba_rec_entry *pBAEntry = NULL; ++ struct rt_mac_table_entry *pEntry; + + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_REC_TABLE)) + return; +@@ -777,13 +777,13 @@ void BATableFreeRecEntry(IN PRTMP_ADAPTER pAd, unsigned long Idx) + } + } + +-void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++void BAOriSessionTearDown(struct rt_rtmp_adapter *pAd, + u8 Wcid, + u8 TID, + IN BOOLEAN bPassive, IN BOOLEAN bForceSend) + { + unsigned long Idx = 0; +- BA_ORI_ENTRY *pBAEntry; ++ struct rt_ba_ori_entry *pBAEntry; + BOOLEAN Cancelled; + + if (Wcid >= MAX_LEN_OF_MAC_TABLE) { +@@ -796,13 +796,13 @@ void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + if ((Idx == 0) || (Idx >= MAX_LEN_OF_BA_ORI_TABLE)) { + if (bForceSend == TRUE) { + /* force send specified TID DelBA */ +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_delba_req DelbaReq; ++ struct rt_mlme_queue_elem *Elem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + if (Elem != NULL) { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ NdisZeroMemory(Elem, sizeof(struct rt_mlme_queue_elem)); + + COPY_MAC_ADDR(DelbaReq.Addr, + pAd->MacTab.Content[Wcid].Addr); +@@ -836,13 +836,13 @@ void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + /* */ + if ((bPassive == FALSE) && (TID == pBAEntry->TID) + && (pBAEntry->ORI_BA_Status == Originator_Done)) { +- MLME_DELBA_REQ_STRUCT DelbaReq; +- MLME_QUEUE_ELEM *Elem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_delba_req DelbaReq; ++ struct rt_mlme_queue_elem *Elem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + if (Elem != NULL) { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ NdisZeroMemory(Elem, sizeof(struct rt_mlme_queue_elem)); + + COPY_MAC_ADDR(DelbaReq.Addr, + pAd->MacTab.Content[Wcid].Addr); +@@ -867,11 +867,11 @@ void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + } + } + +-void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++void BARecSessionTearDown(struct rt_rtmp_adapter *pAd, + u8 Wcid, u8 TID, IN BOOLEAN bPassive) + { + unsigned long Idx = 0; +- BA_REC_ENTRY *pBAEntry; ++ struct rt_ba_rec_entry *pBAEntry; + + if (Wcid >= MAX_LEN_OF_MAC_TABLE) { + return; +@@ -895,7 +895,7 @@ void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + /* */ + if ((TID == pBAEntry->TID) + && (pBAEntry->REC_BA_Status == Recipient_Accept)) { +- MLME_DELBA_REQ_STRUCT DelbaReq; ++ struct rt_mlme_delba_req DelbaReq; + BOOLEAN Cancelled; + /*unsigned long offset; */ + /*u32 VALUE; */ +@@ -906,12 +906,12 @@ void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + /* 1. Send DELBA Action Frame */ + /* */ + if (bPassive == FALSE) { +- MLME_QUEUE_ELEM *Elem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_queue_elem *Elem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + if (Elem != NULL) { + NdisZeroMemory(&DelbaReq, sizeof(DelbaReq)); +- NdisZeroMemory(Elem, sizeof(MLME_QUEUE_ELEM)); ++ NdisZeroMemory(Elem, sizeof(struct rt_mlme_queue_elem)); + + COPY_MAC_ADDR(DelbaReq.Addr, + pAd->MacTab.Content[Wcid].Addr); +@@ -956,7 +956,7 @@ void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, + BATableFreeRecEntry(pAd, Idx); + } + +-void BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, u8 Wcid) ++void BASessionTearDownALL(struct rt_rtmp_adapter *pAd, u8 Wcid) + { + int i; + +@@ -985,9 +985,9 @@ void BAOriSessionSetupTimeout(void *SystemSpecific1, + void *SystemSpecific2, + void *SystemSpecific3) + { +- BA_ORI_ENTRY *pBAEntry = (BA_ORI_ENTRY *) FunctionContext; +- MAC_TABLE_ENTRY *pEntry; +- PRTMP_ADAPTER pAd; ++ struct rt_ba_ori_entry *pBAEntry = (struct rt_ba_ori_entry *)FunctionContext; ++ struct rt_mac_table_entry *pEntry; ++ struct rt_rtmp_adapter *pAd; + + if (pBAEntry == NULL) + return; +@@ -1004,7 +1004,7 @@ void BAOriSessionSetupTimeout(void *SystemSpecific1, + + if ((pBAEntry->ORI_BA_Status == Originator_WaitRes) + && (pBAEntry->Token < ORI_SESSION_MAX_RETRY)) { +- MLME_ADDBA_REQ_STRUCT AddbaReq; ++ struct rt_mlme_addba_req AddbaReq; + + NdisZeroMemory(&AddbaReq, sizeof(AddbaReq)); + COPY_MAC_ADDR(AddbaReq.pAddr, pEntry->Addr); +@@ -1015,7 +1015,7 @@ void BAOriSessionSetupTimeout(void *SystemSpecific1, + AddbaReq.TimeOutValue = 0; + AddbaReq.Token = pBAEntry->Token; + MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, +- sizeof(MLME_ADDBA_REQ_STRUCT), (void *)& AddbaReq); ++ sizeof(struct rt_mlme_addba_req), (void *)& AddbaReq); + RTMP_MLME_HANDLER(pAd); + DBGPRINT(RT_DEBUG_TRACE, + ("BA Ori Session Timeout(%d) : Send ADD BA again\n", +@@ -1047,8 +1047,8 @@ void BARecSessionIdleTimeout(void *SystemSpecific1, + void *SystemSpecific2, void *SystemSpecific3) + { + +- BA_REC_ENTRY *pBAEntry = (BA_REC_ENTRY *) FunctionContext; +- PRTMP_ADAPTER pAd; ++ struct rt_ba_rec_entry *pBAEntry = (struct rt_ba_rec_entry *)FunctionContext; ++ struct rt_rtmp_adapter *pAd; + unsigned long Now32; + + if (pBAEntry == NULL) +@@ -1070,20 +1070,20 @@ void BARecSessionIdleTimeout(void *SystemSpecific1, + } + } + +-void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAddBAReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + /* 7.4.4.1 */ + /*unsigned long Idx; */ + u8 Status = 1; + u8 pAddr[6]; +- FRAME_ADDBA_RSP ADDframe; ++ struct rt_frame_addba_rsp ADDframe; + u8 *pOutBuffer = NULL; + int NStatus; +- PFRAME_ADDBA_REQ pAddreqFrame = NULL; ++ struct rt_frame_addba_req * pAddreqFrame = NULL; + /*u8 BufSize; */ + unsigned long FrameLen; + unsigned long *ptemp; +- PMAC_TABLE_ENTRY pMacEntry; ++ struct rt_mac_table_entry *pMacEntry; + + DBGPRINT(RT_DEBUG_TRACE, + ("%s ==> (Wcid = %d)\n", __func__, Elem->Wcid)); +@@ -1103,7 +1103,7 @@ void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + if ((pAd->CommonCfg.bBADecline == FALSE) + && IS_HT_STA(pMacEntry)) { +- pAddreqFrame = (PFRAME_ADDBA_REQ) (&Elem->Msg[0]); ++ pAddreqFrame = (struct rt_frame_addba_req *) (&Elem->Msg[0]); + DBGPRINT(RT_DEBUG_OFF, + ("Rcv Wcid(%d) AddBAReq\n", Elem->Wcid)); + if (BARecSessionAdd +@@ -1120,7 +1120,7 @@ void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pAd->MacTab.Content[Elem->Wcid].ValidAsCLI) + ASSERT(pAd->MacTab.Content[Elem->Wcid].Sst == SST_ASSOC); + +- pAddreqFrame = (PFRAME_ADDBA_REQ) (&Elem->Msg[0]); ++ pAddreqFrame = (struct rt_frame_addba_req *) (&Elem->Msg[0]); + /* 2. Always send back ADDBA Response */ + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { +@@ -1129,7 +1129,7 @@ void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + return; + } + +- NdisZeroMemory(&ADDframe, sizeof(FRAME_ADDBA_RSP)); ++ NdisZeroMemory(&ADDframe, sizeof(struct rt_frame_addba_rsp)); + + /* 2-1. Prepare ADDBA Response frame. */ + { +@@ -1164,7 +1164,7 @@ void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADDframe.TimeOutValue = cpu2le16(ADDframe.TimeOutValue); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_ADDBA_RSP), &ADDframe, END_OF_ARGS); ++ sizeof(struct rt_frame_addba_rsp), &ADDframe, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + +@@ -1173,12 +1173,12 @@ void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ADDframe.BaParm.TID, ADDframe.BaParm.BufSize)); + } + +-void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAddBARspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + /*u8 Idx, i; */ + /*u8 * pOutBuffer = NULL; */ +- PFRAME_ADDBA_RSP pFrame = NULL; +- /*PBA_ORI_ENTRY pBAEntry; */ ++ struct rt_frame_addba_rsp * pFrame = NULL; ++ /*struct rt_ba_ori_entry *pBAEntry; */ + + /*ADDBA Response from unknown peer, ignore this. */ + if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE) +@@ -1189,7 +1189,7 @@ void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /*hex_dump("PeerAddBARspAction()", Elem->Msg, Elem->MsgLen); */ + + if (PeerAddBARspActionSanity(pAd, Elem->Msg, Elem->MsgLen)) { +- pFrame = (PFRAME_ADDBA_RSP) (&Elem->Msg[0]); ++ pFrame = (struct rt_frame_addba_rsp *) (&Elem->Msg[0]); + + DBGPRINT(RT_DEBUG_TRACE, + ("\t\t StatusCode = %d\n", pFrame->StatusCode)); +@@ -1216,16 +1216,16 @@ void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerDelBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + /*u8 Idx; */ + /*u8 * pOutBuffer = NULL; */ +- PFRAME_DELBA_REQ pDelFrame = NULL; ++ struct rt_frame_delba_req * pDelFrame = NULL; + + DBGPRINT(RT_DEBUG_TRACE, ("%s ==>\n", __func__)); + /*DELBA Request from unknown peer, ignore this. */ + if (PeerDelBAActionSanity(pAd, Elem->Wcid, Elem->Msg, Elem->MsgLen)) { +- pDelFrame = (PFRAME_DELBA_REQ) (&Elem->Msg[0]); ++ pDelFrame = (struct rt_frame_delba_req *) (&Elem->Msg[0]); + if (pDelFrame->DelbaParm.Initiator == ORIGINATOR) { + DBGPRINT(RT_DEBUG_TRACE, + ("BA - PeerDelBAAction----> ORIGINATOR\n")); +@@ -1243,14 +1243,14 @@ void PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++BOOLEAN CntlEnqueueForRecv(struct rt_rtmp_adapter *pAd, + unsigned long Wcid, +- unsigned long MsgLen, IN PFRAME_BA_REQ pMsg) ++ unsigned long MsgLen, struct rt_frame_ba_req * pMsg) + { +- PFRAME_BA_REQ pFrame = pMsg; ++ struct rt_frame_ba_req * pFrame = pMsg; + /*PRTMP_REORDERBUF pBuffer; */ + /*PRTMP_REORDERBUF pDmaBuf; */ +- PBA_REC_ENTRY pBAEntry; ++ struct rt_ba_rec_entry *pBAEntry; + /*BOOLEAN Result; */ + unsigned long Idx; + /*u8 NumRxPkt; */ +@@ -1271,10 +1271,10 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + if (MsgLen > MGMT_DMA_BUFFER_SIZE) { + DBGPRINT_ERR(("CntlEnqueueForRecv: frame too large, size = %ld \n", MsgLen)); + return FALSE; +- } else if (MsgLen != sizeof(FRAME_BA_REQ)) { ++ } else if (MsgLen != sizeof(struct rt_frame_ba_req)) { + DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); + return FALSE; +- } else if (MsgLen != sizeof(FRAME_BA_REQ)) { ++ } else if (MsgLen != sizeof(struct rt_frame_ba_req)) { + DBGPRINT_ERR(("CntlEnqueueForRecv: BlockAck Request frame length size = %ld incorrect\n", MsgLen)); + return FALSE; + } +@@ -1309,12 +1309,12 @@ BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, + /* + Description : Send PSMP Action frame If PSMP mode switches. + */ +-void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp) ++void SendPSMPAction(struct rt_rtmp_adapter *pAd, u8 Wcid, u8 Psmp) + { + u8 *pOutBuffer = NULL; + int NStatus; + /*unsigned long Idx; */ +- FRAME_PSMP_ACTION Frame; ++ struct rt_frame_psmp_action Frame; + unsigned long FrameLen; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ +@@ -1355,7 +1355,7 @@ void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp) + break; + } + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(FRAME_PSMP_ACTION), &Frame, END_OF_ARGS); ++ sizeof(struct rt_frame_psmp_action), &Frame, END_OF_ARGS); + MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); + DBGPRINT(RT_DEBUG_ERROR, ("HT - SendPSMPAction( %d ) \n", Frame.Psmp)); +@@ -1363,7 +1363,7 @@ void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp) + + #define RADIO_MEASUREMENT_REQUEST_ACTION 0 + +-typedef struct PACKED { ++struct PACKED rt_beacon_request { + u8 RegulatoryClass; + u8 ChannelNumber; + u16 RandomInterval; +@@ -1373,18 +1373,18 @@ typedef struct PACKED { + u8 ReportingCondition; + u8 Threshold; + u8 SSIDIE[2]; /* 2 byte */ +-} BEACON_REQUEST; ++}; + +-typedef struct PACKED { ++struct PACKED rt_measurement_req { + u8 ID; + u8 Length; + u8 Token; + u8 RequestMode; + u8 Type; +-} MEASUREMENT_REQ; ++}; + +-void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, ++void convert_reordering_packet_to_preAMSDU_or_802_3_packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, + u8 + FromWhichBSSID) + { +@@ -1436,9 +1436,9 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(IN PRTMP_ADAPTER pAd, + } \ + } while (0); + +-static void ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, +- IN RX_BLK * pRxBlk, ++static void ba_enqueue_reordering_packet(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry, ++ struct rt_rx_blk *pRxBlk, + u8 FromWhichBSSID) + { + struct reordering_mpdu *mpdu_blk; +@@ -1515,11 +1515,11 @@ static void ba_enqueue_reordering_packet(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + +-void Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void Indicate_AMPDU_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + u16 Idx; +- PBA_REC_ENTRY pBAEntry = NULL; ++ struct rt_ba_rec_entry *pBAEntry = NULL; + u16 Sequence = pRxBlk->pHeader->Sequence; + unsigned long Now32; + u8 Wcid = pRxBlk->pRxWI->WirelessCliID; +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +index 99b0b1b..6730d78 100644 +--- a/drivers/staging/rt2860/common/cmm_aes.c ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -37,11 +37,11 @@ + + #include "../rt_config.h" + +-typedef struct { ++struct aes_context { + u32 erk[64]; /* encryption round keys */ + u32 drk[64]; /* decryption round keys */ + int nr; /* number of rounds */ +-} aes_context; ++}; + + /*****************************/ + /******** SBOX Table *********/ +@@ -408,9 +408,9 @@ void construct_ctr_preload(unsigned char *ctr_preload, + + } + +-BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptAES(struct rt_rtmp_adapter *pAd, + u8 *pData, +- unsigned long DataByteCnt, IN PCIPHER_KEY pWpaKey) ++ unsigned long DataByteCnt, struct rt_cipher_key *pWpaKey) + { + u8 KeyID; + u32 HeaderLen; +@@ -878,7 +878,7 @@ static uint32 KT3[256]; + (b)[(i) + 3] = (uint8) ( (n) ); \ + } + +-int rt_aes_set_key(aes_context * ctx, uint8 * key, int nbits) ++int rt_aes_set_key(struct aes_context * ctx, uint8 * key, int nbits) + { + int i; + uint32 *RK, *SK; +@@ -1020,7 +1020,7 @@ int rt_aes_set_key(aes_context * ctx, uint8 * key, int nbits) + + /* AES 128-bit block encryption routine */ + +-void rt_aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) ++void rt_aes_encrypt(struct aes_context * ctx, uint8 input[16], uint8 output[16]) + { + uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + +@@ -1107,7 +1107,7 @@ void rt_aes_encrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) + + /* AES 128-bit block decryption routine */ + +-void rt_aes_decrypt(aes_context * ctx, uint8 input[16], uint8 output[16]) ++void rt_aes_decrypt(struct aes_context * ctx, uint8 input[16], uint8 output[16]) + { + uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + +@@ -1210,7 +1210,7 @@ void AES_GTK_KEY_WRAP(u8 * key, + u8 R[512]; + int num_blocks = p_len / 8; /* unit:64bits */ + int i, j; +- aes_context aesctx; ++ struct aes_context aesctx; + u8 xor; + + rt_aes_set_key(&aesctx, key, 128); +@@ -1271,7 +1271,7 @@ void AES_GTK_KEY_UNWRAP(u8 * key, + u8 A[8], BIN[16], BOUT[16]; + u8 xor; + int i, j; +- aes_context aesctx; ++ struct aes_context aesctx; + u8 *R; + int num_blocks = c_len / 8; /* unit:64bits */ + +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index ef7d2a6..fafba27 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -38,7 +38,7 @@ + #include "../rt_config.h" + + /* Reset the RFIC setting to new series */ +-RTMP_RF_REGS RF2850RegTable[] = { ++struct rt_rtmp_rf_regs RF2850RegTable[] = { + /* ch R1 R2 R3(TX0~4=0) R4 */ + {1, 0x98402ecc, 0x984c0786, 0x9816b455, 0x9800510b} + , +@@ -177,9 +177,9 @@ RTMP_RF_REGS RF2850RegTable[] = { + /* still lack of MMAC(Japan) ch 34,38,42,46 */ + }; + +-u8 NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS)); ++u8 NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(struct rt_rtmp_rf_regs)); + +-FREQUENCY_ITEM FreqItems3020[] = { ++struct rt_frequency_item FreqItems3020[] = { + /**************************************************/ + /* ISM : 2.4 to 2.483 GHz // */ + /**************************************************/ +@@ -216,16 +216,16 @@ FREQUENCY_ITEM FreqItems3020[] = { + , + }; + +-u8 NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM)); ++u8 NUM_OF_3020_CHNL = (sizeof(FreqItems3020) / sizeof(struct rt_frequency_item)); + +-void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pRateTable) ++void AsicUpdateAutoFallBackTable(struct rt_rtmp_adapter *pAd, u8 *pRateTable) + { + u8 i; + HT_FBK_CFG0_STRUC HtCfg0; + HT_FBK_CFG1_STRUC HtCfg1; + LG_FBK_CFG0_STRUC LgCfg0; + LG_FBK_CFG1_STRUC LgCfg1; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate; ++ struct rt_rtmp_tx_rate_switch *pCurrTxRate, *pNextTxRate; + + /* set to initial value */ + HtCfg0.word = 0x65432100; +@@ -233,9 +233,9 @@ void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pRateTable) + LgCfg0.word = 0xedcba988; + LgCfg1.word = 0x00002100; + +- pNextTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1; ++ pNextTxRate = (struct rt_rtmp_tx_rate_switch *) pRateTable + 1; + for (i = 1; i < *((u8 *)pRateTable); i++) { +- pCurrTxRate = (PRTMP_TX_RATE_SWITCH) pRateTable + 1 + i; ++ pCurrTxRate = (struct rt_rtmp_tx_rate_switch *) pRateTable + 1 + i; + switch (pCurrTxRate->Mode) { + case 0: /*CCK */ + break; +@@ -417,7 +417,7 @@ void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pRateTable) + we should choose not to use GF. But still set correct ASIC registers. + ======================================================================== + */ +-void AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++void AsicUpdateProtect(struct rt_rtmp_adapter *pAd, + u16 OperationMode, + u8 SetMask, + IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist) +@@ -631,13 +631,13 @@ void AsicUpdateProtect(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void AsicSwitchChannel(IN PRTMP_ADAPTER pAd, u8 Channel, IN BOOLEAN bScan) ++void AsicSwitchChannel(struct rt_rtmp_adapter *pAd, u8 Channel, IN BOOLEAN bScan) + { + unsigned long R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0; + char TxPwer = 0, TxPwer2 = DEFAULT_RF_TX_POWER; /*Bbp94 = BBPR94_DEFAULT, TxPwer2 = DEFAULT_RF_TX_POWER; */ + u8 index; + u32 Value = 0; /*BbpReg, Value; */ +- RTMP_RF_REGS *RFRegTable; ++ struct rt_rtmp_rf_regs *RFRegTable; + u8 RFValue; + + RFValue = 0; +@@ -1002,7 +1002,7 @@ void AsicSwitchChannel(IN PRTMP_ADAPTER pAd, u8 Channel, IN BOOLEAN bScan) + RTMPusecDelay(1000); + } + +-void AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) ++void AsicResetBBPAgent(struct rt_rtmp_adapter *pAd) + { + BBP_CSR_CFG_STRUC BbpCsr; + DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); +@@ -1025,7 +1025,7 @@ void AsicResetBBPAgent(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicLockChannel(IN PRTMP_ADAPTER pAd, u8 Channel) ++void AsicLockChannel(struct rt_rtmp_adapter *pAd, u8 Channel) + { + } + +@@ -1052,7 +1052,7 @@ void AsicRfTuningExec(void *SystemSpecific1, + it should be called AFTER MlmeDynamicTxRatSwitching() + ========================================================================== + */ +-void AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) ++void AsicAdjustTxPower(struct rt_rtmp_adapter *pAd) + { + int i, j; + char DeltaPwr = 0; +@@ -1277,7 +1277,7 @@ void AsicAdjustTxPower(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void AsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp) + { + RTMP_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp); +@@ -1291,7 +1291,7 @@ void AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, + in INFRA BSS, we should use AsicSleepThenAutoWakeup() instead. + ========================================================================== + */ +-void AsicForceSleep(IN PRTMP_ADAPTER pAd) ++void AsicForceSleep(struct rt_rtmp_adapter *pAd) + { + + } +@@ -1306,7 +1306,7 @@ void AsicForceSleep(IN PRTMP_ADAPTER pAd) + IRQL = DISPATCH_LEVEL + ========================================================================== + */ +-void AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void AsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx) + { + DBGPRINT(RT_DEBUG_INFO, ("--> AsicForceWakeup \n")); + RTMP_STA_FORCE_WAKEUP(pAd, bFromTx); +@@ -1321,7 +1321,7 @@ void AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + + ========================================================================== + */ +-void AsicSetBssid(IN PRTMP_ADAPTER pAd, u8 *pBssid) ++void AsicSetBssid(struct rt_rtmp_adapter *pAd, u8 *pBssid) + { + unsigned long Addr4; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1340,9 +1340,9 @@ void AsicSetBssid(IN PRTMP_ADAPTER pAd, u8 *pBssid) + RTMP_IO_WRITE32(pAd, MAC_BSSID_DW1, Addr4); + } + +-void AsicSetMcastWC(IN PRTMP_ADAPTER pAd) ++void AsicSetMcastWC(struct rt_rtmp_adapter *pAd) + { +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[MCAST_WCID]; ++ struct rt_mac_table_entry *pEntry = &pAd->MacTab.Content[MCAST_WCID]; + u16 offset; + + pEntry->Sst = SST_ASSOC; +@@ -1360,7 +1360,7 @@ void AsicSetMcastWC(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicDelWcidTab(IN PRTMP_ADAPTER pAd, u8 Wcid) ++void AsicDelWcidTab(struct rt_rtmp_adapter *pAd, u8 Wcid) + { + unsigned long Addr0 = 0x0, Addr1 = 0x0; + unsigned long offset; +@@ -1380,7 +1380,7 @@ void AsicDelWcidTab(IN PRTMP_ADAPTER pAd, u8 Wcid) + + ========================================================================== + */ +-void AsicEnableRDG(IN PRTMP_ADAPTER pAd) ++void AsicEnableRDG(struct rt_rtmp_adapter *pAd) + { + TX_LINK_CFG_STRUC TxLinkCfg; + u32 Data = 0; +@@ -1405,7 +1405,7 @@ void AsicEnableRDG(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicDisableRDG(IN PRTMP_ADAPTER pAd) ++void AsicDisableRDG(struct rt_rtmp_adapter *pAd) + { + TX_LINK_CFG_STRUC TxLinkCfg; + u32 Data = 0; +@@ -1441,7 +1441,7 @@ void AsicDisableRDG(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicDisableSync(IN PRTMP_ADAPTER pAd) ++void AsicDisableSync(struct rt_rtmp_adapter *pAd) + { + BCN_TIME_CFG_STRUC csr; + +@@ -1468,7 +1468,7 @@ void AsicDisableSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicEnableBssSync(IN PRTMP_ADAPTER pAd) ++void AsicEnableBssSync(struct rt_rtmp_adapter *pAd) + { + BCN_TIME_CFG_STRUC csr; + +@@ -1498,7 +1498,7 @@ void AsicEnableBssSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) ++void AsicEnableIbssSync(struct rt_rtmp_adapter *pAd) + { + BCN_TIME_CFG_STRUC csr9; + u8 *ptr; +@@ -1581,7 +1581,7 @@ void AsicEnableIbssSync(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) ++void AsicSetEdcaParm(struct rt_rtmp_adapter *pAd, struct rt_edca_parm *pEdcaParm) + { + EDCA_AC_CFG_STRUC Ac0Cfg, Ac1Cfg, Ac2Cfg, Ac3Cfg; + AC_TXOP_CSR0_STRUC csr0; +@@ -1676,7 +1676,7 @@ void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + + RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, 0x00002222); + +- NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(EDCA_PARM)); ++ NdisZeroMemory(&pAd->CommonCfg.APEdcaParm, sizeof(struct rt_edca_parm)); + } else { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WMM_INUSED); + /*======================================================== */ +@@ -1823,7 +1823,7 @@ void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word); + + NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, +- sizeof(EDCA_PARM)); ++ sizeof(struct rt_edca_parm)); + if (!ADHOC_ON(pAd)) { + DBGPRINT(RT_DEBUG_TRACE, + ("EDCA [#%d]: AIFSN CWmin CWmax TXOP(us) ACM\n", +@@ -1862,7 +1862,7 @@ void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm) + + ========================================================================== + */ +-void AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) ++void AsicSetSlotTime(struct rt_rtmp_adapter *pAd, IN BOOLEAN bUseShortSlotTime) + { + unsigned long SlotTime; + u32 RegValue = 0; +@@ -1930,7 +1930,7 @@ void AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime) + Return: + ======================================================================== + */ +-void AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddSharedKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIndex, + u8 KeyIdx, + u8 CipherAlg, +@@ -2048,7 +2048,7 @@ void AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-void AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicRemoveSharedKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIndex, u8 KeyIdx) + { + /*unsigned long SecCsr0; */ +@@ -2088,7 +2088,7 @@ void AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, + + } + +-void AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, ++void AsicUpdateWCIDAttribute(struct rt_rtmp_adapter *pAd, + u16 WCID, + u8 BssIndex, + u8 CipherAlg, +@@ -2106,7 +2106,7 @@ void AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); + } + +-void AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, ++void AsicUpdateWCIDIVEIV(struct rt_rtmp_adapter *pAd, + u16 WCID, unsigned long uIV, unsigned long uEIV) + { + unsigned long offset; +@@ -2117,7 +2117,7 @@ void AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, offset + 4, uEIV); + } + +-void AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, ++void AsicUpdateRxWCIDTable(struct rt_rtmp_adapter *pAd, + u16 WCID, u8 *pAddr) + { + unsigned long offset; +@@ -2163,11 +2163,11 @@ void AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, + For AP mode bTxKey must be always set to TRUE. + ======================================================================== + */ +-void AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddKeyEntry(struct rt_rtmp_adapter *pAd, + u16 WCID, + u8 BssIndex, + u8 KeyIdx, +- IN PCIPHER_KEY pCipherKey, ++ struct rt_cipher_key *pCipherKey, + IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey) + { + unsigned long offset; +@@ -2339,9 +2339,9 @@ void AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, + Return: + ======================================================================== + */ +-void AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddPairwiseKeyEntry(struct rt_rtmp_adapter *pAd, + u8 *pAddr, +- u8 WCID, IN CIPHER_KEY * pCipherKey) ++ u8 WCID, struct rt_cipher_key *pCipherKey) + { + int i; + unsigned long offset; +@@ -2422,7 +2422,7 @@ void AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + Return: + ======================================================================== + */ +-void AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicRemovePairwiseKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIdx, u8 Wcid) + { + unsigned long WCIDAttri; +@@ -2434,7 +2434,7 @@ void AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, + RTMP_IO_WRITE32(pAd, offset, WCIDAttri); + } + +-BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++BOOLEAN AsicSendCommandToMcu(struct rt_rtmp_adapter *pAd, + u8 Command, + u8 Token, u8 Arg0, u8 Arg1) + { +@@ -2445,7 +2445,7 @@ BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-void AsicSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) ++void AsicSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant) + { + #ifdef RT30xx + /* RT3572 ATE need not to do this. */ +@@ -2453,7 +2453,7 @@ void AsicSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant) + #endif /* RT30xx // */ + } + +-void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) ++void AsicTurnOffRFClk(struct rt_rtmp_adapter *pAd, u8 Channel) + { + if (pAd->chipOps.AsicRfTurnOff) { + pAd->chipOps.AsicRfTurnOff(pAd); +@@ -2461,7 +2461,7 @@ void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) + /* RF R2 bit 18 = 0 */ + u32 R1 = 0, R2 = 0, R3 = 0; + u8 index; +- RTMP_RF_REGS *RFRegTable; ++ struct rt_rtmp_rf_regs *RFRegTable; + + RFRegTable = RF2850RegTable; + +@@ -2507,12 +2507,12 @@ void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) + } + } + +-void AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, u8 Channel) ++void AsicTurnOnRFClk(struct rt_rtmp_adapter *pAd, u8 Channel) + { + /* RF R2 bit 18 = 0 */ + u32 R1 = 0, R2 = 0, R3 = 0; + u8 index; +- RTMP_RF_REGS *RFRegTable; ++ struct rt_rtmp_rf_regs *RFRegTable; + + #ifdef PCIE_PS_SUPPORT + /* The RF programming sequence is difference between 3xxx and 2xxx */ +diff --git a/drivers/staging/rt2860/common/cmm_cfg.c b/drivers/staging/rt2860/common/cmm_cfg.c +index 9c6b7ca..24f4393 100644 +--- a/drivers/staging/rt2860/common/cmm_cfg.c ++++ b/drivers/staging/rt2860/common/cmm_cfg.c +@@ -80,7 +80,7 @@ char *GetBW(int BW) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, char *arg, int band) ++int RT_CfgSetCountryRegion(struct rt_rtmp_adapter *pAd, char *arg, int band) + { + long region, regionMax; + u8 *pCountryRegion; +@@ -126,7 +126,7 @@ int RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, char *arg, int band) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, char *arg) ++int RT_CfgSetWirelessMode(struct rt_rtmp_adapter *pAd, char *arg) + { + int MaxPhyMode = PHY_11G; + long WirelessMode; +@@ -143,7 +143,7 @@ int RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, char *arg) + + } + +-int RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, char *arg) ++int RT_CfgSetShortSlot(struct rt_rtmp_adapter *pAd, char *arg) + { + long ShortSlot; + +@@ -167,9 +167,9 @@ int RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, char *arg) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++int RT_CfgSetWepKey(struct rt_rtmp_adapter *pAd, + char *keyString, +- IN CIPHER_KEY * pSharedKey, int keyIdx) ++ struct rt_cipher_key *pSharedKey, int keyIdx) + { + int KeyLen; + int i; +@@ -177,7 +177,7 @@ int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, + BOOLEAN bKeyIsHex = FALSE; + + /* TODO: Shall we do memset for the original key info?? */ +- memset(pSharedKey, 0, sizeof(CIPHER_KEY)); ++ memset(pSharedKey, 0, sizeof(struct rt_cipher_key)); + KeyLen = strlen(keyString); + switch (KeyLen) { + case 5: /*wep 40 Ascii type */ +@@ -230,7 +230,7 @@ int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++int RT_CfgSetWPAPSKKey(struct rt_rtmp_adapter *pAd, + char *keyString, + u8 * pHashStr, + int hashStrLen, u8 *pPMKBuf) +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 64b2177..2d2c311 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -104,7 +104,7 @@ QID_AC_VO, QID_AC_VO }; + + ======================================================================== + */ +-int MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++int MiniportMMRequest(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u8 *pData, u32 Length) + { + void *pPacket; +@@ -242,13 +242,13 @@ int MiniportMMRequest(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmit(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u8 *pSrcBufVA; + u32 SrcBufLen; +- PHEADER_802_11 pHeader_802_11; ++ struct rt_header_802_11 * pHeader_802_11; + + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) + ) { +@@ -259,7 +259,7 @@ int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, + if (pSrcBufVA == NULL) + return NDIS_STATUS_FAILURE; + +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); ++ pHeader_802_11 = (struct rt_header_802_11 *) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); + + #ifdef RTMP_MAC_PCI + if (pAd->MACVersion == 0x28600100) +@@ -270,17 +270,17 @@ int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, + + } + +-int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmitMgmtRing(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u8 *pSrcBufVA; + u32 SrcBufLen; +- PHEADER_802_11 pHeader_802_11; ++ struct rt_header_802_11 * pHeader_802_11; + BOOLEAN bAckRequired, bInsertTimestamp; + u8 MlmeRate; +- PTXWI_STRUC pFirstTxWI; +- MAC_TABLE_ENTRY *pMacEntry = NULL; ++ struct rt_txwi * pFirstTxWI; ++ struct rt_mac_table_entry *pMacEntry = NULL; + u8 PID; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); +@@ -299,8 +299,8 @@ int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + AsicForceWakeup(pAd, TRUE); + } + +- pFirstTxWI = (PTXWI_STRUC) (pSrcBufVA + TXINFO_SIZE); +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); /*TXWI_SIZE); */ ++ pFirstTxWI = (struct rt_txwi *) (pSrcBufVA + TXINFO_SIZE); ++ pHeader_802_11 = (struct rt_header_802_11 *) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); /*TXWI_SIZE); */ + + if (pHeader_802_11->Addr1[0] & 0x01) { + MlmeRate = pAd->CommonCfg.BasicMlmeRate; +@@ -506,11 +506,11 @@ int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, + (2).Normal + ======================================================================== + */ +-static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, void *pPacket) ++static u8 TxPktClassification(struct rt_rtmp_adapter *pAd, void *pPacket) + { + u8 TxFrameType = TX_UNKOWN_FRAME; + u8 Wcid; +- MAC_TABLE_ENTRY *pMacEntry = NULL; ++ struct rt_mac_table_entry *pMacEntry = NULL; + BOOLEAN bHTRate = FALSE; + + Wcid = RTMP_GET_PACKET_WCID(pPacket); +@@ -554,11 +554,11 @@ static u8 TxPktClassification(IN RTMP_ADAPTER * pAd, void *pPacket) + return TxFrameType; + } + +-BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) ++BOOLEAN RTMP_FillTxBlkInfo(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + void *pPacket; +- PMAC_TABLE_ENTRY pMacEntry = NULL; ++ struct rt_mac_table_entry *pMacEntry = NULL; + + pPacket = pTxBlk->pPacket; + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pTxBlk->pSrcBufHeader, +@@ -662,8 +662,8 @@ BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + return TRUE; + } + +-BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, +- char * pPacket, IN TX_BLK * pTxBlk) ++BOOLEAN CanDoAggregateTransmit(struct rt_rtmp_adapter *pAd, ++ char * pPacket, struct rt_tx_blk *pTxBlk) + { + + /*DBGPRINT(RT_DEBUG_TRACE, ("Check if can do aggregation! TxFrameType=%d!\n", pTxBlk->TxFrameType)); */ +@@ -712,20 +712,20 @@ BOOLEAN CanDoAggregateTransmit(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, u8 QIdx, /* BulkOutPipeId */ ++void RTMPDeQueuePacket(struct rt_rtmp_adapter *pAd, IN BOOLEAN bIntContext, u8 QIdx, /* BulkOutPipeId */ + u8 Max_Tx_Packets) + { +- PQUEUE_ENTRY pEntry = NULL; ++ struct rt_queue_entry *pEntry = NULL; + void *pPacket; + int Status = NDIS_STATUS_SUCCESS; + u8 Count = 0; +- PQUEUE_HEADER pQueue; ++ struct rt_queue_header *pQueue; + unsigned long FreeNumber[NUM_OF_TX_RING]; + u8 QueIdx, sQIdx, eQIdx; + unsigned long IrqFlags = 0; + BOOLEAN hasTxDesc = FALSE; +- TX_BLK TxBlk; +- TX_BLK *pTxBlk; ++ struct rt_tx_blk TxBlk; ++ struct rt_tx_blk *pTxBlk; + + if (QIdx == NUM_OF_TX_RING) { + sQIdx = 0; +@@ -780,7 +780,7 @@ void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, u8 QIdx, /* + } + + pTxBlk = &TxBlk; +- NdisZeroMemory((u8 *)pTxBlk, sizeof(TX_BLK)); ++ NdisZeroMemory((u8 *)pTxBlk, sizeof(struct rt_tx_blk)); + /*InitializeQueueHeader(&pTxBlk->TxPacketList); // Didn't need it because we already memzero it. */ + pTxBlk->QueIdx = QueIdx; + +@@ -908,7 +908,7 @@ void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, IN BOOLEAN bIntContext, u8 QIdx, /* + + ======================================================================== + */ +-u16 RTMPCalcDuration(IN PRTMP_ADAPTER pAd, u8 Rate, unsigned long Size) ++u16 RTMPCalcDuration(struct rt_rtmp_adapter *pAd, u8 Rate, unsigned long Size) + { + unsigned long Duration = 0; + +@@ -968,7 +968,7 @@ u16 RTMPCalcDuration(IN PRTMP_ADAPTER pAd, u8 Rate, unsigned long Size) + + ======================================================================== + */ +-void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ ++void RTMPWriteTxWI(struct rt_rtmp_adapter *pAd, struct rt_txwi * pOutTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ + u8 BASize, + u8 WCID, + unsigned long Length, +@@ -978,9 +978,9 @@ void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + u8 Txopmode, + IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit) + { +- PMAC_TABLE_ENTRY pMac = NULL; +- TXWI_STRUC TxWI; +- PTXWI_STRUC pTxWI; ++ struct rt_mac_table_entry *pMac = NULL; ++ struct rt_txwi TxWI; ++ struct rt_txwi * pTxWI; + + if (WCID < MAX_LEN_OF_MAC_TABLE) + pMac = &pAd->MacTab.Content[WCID]; +@@ -1053,14 +1053,14 @@ void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pOutTxWI, IN BOOLEAN FRA + } + + pTxWI->PacketId = pTxWI->MCS; +- NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC)); ++ NdisMoveMemory(pOutTxWI, &TxWI, sizeof(struct rt_txwi)); + } + +-void RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) ++void RTMPWriteTxWI_Data(struct rt_rtmp_adapter *pAd, ++ struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk) + { + HTTRANSMIT_SETTING *pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; ++ struct rt_mac_table_entry *pMacEntry; + u8 BASize; + + ASSERT(pTxWI); +@@ -1134,11 +1134,11 @@ void RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, + pTxWI->PacketId = pTxWI->MCS; + } + +-void RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk) ++void RTMPWriteTxWI_Cache(struct rt_rtmp_adapter *pAd, ++ struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk) + { + PHTTRANSMIT_SETTING /*pTxHTPhyMode, */ pTransmit; +- PMAC_TABLE_ENTRY pMacEntry; ++ struct rt_mac_table_entry *pMacEntry; + + /* */ + /* update TXWI */ +@@ -1194,7 +1194,7 @@ void RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, + /* 2. AGGREGATION_IN_USED */ + /* 3. Fragmentation not in used */ + /* 4. either no previous frame (pPrevAddr1=NULL) .OR. previoud frame is aggregatible */ +-BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, ++BOOLEAN TxFrameIsAggregatible(struct rt_rtmp_adapter *pAd, + u8 *pPrevAddr1, u8 *p8023hdr) + { + +@@ -1230,8 +1230,8 @@ BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, +- unsigned long TxRate, IN PMAC_TABLE_ENTRY pMacEntry) ++BOOLEAN PeerIsAggreOn(struct rt_rtmp_adapter *pAd, ++ unsigned long TxRate, struct rt_mac_table_entry *pMacEntry) + { + unsigned long AFlags = + (fCLIENT_STATUS_AMSDU_INUSED | fCLIENT_STATUS_AGGREGATION_CAPABLE); +@@ -1269,7 +1269,7 @@ BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, u8 *pQueIdx) ++struct rt_queue_header *RTMPCheckTxSwQueue(struct rt_rtmp_adapter *pAd, u8 *pQueIdx) + { + + unsigned long Number; +@@ -1317,7 +1317,7 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, u8 *pQueIdx) + + ======================================================================== + */ +-void RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) ++void RTMPSuspendMsduTransmission(struct rt_rtmp_adapter *pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("SCANNING, suspend MSDU transmission ...\n")); + +@@ -1354,7 +1354,7 @@ void RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) ++void RTMPResumeMsduTransmission(struct rt_rtmp_adapter *pAd) + { + /* u8 IrqState; */ + +@@ -1379,13 +1379,13 @@ void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd) + RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); + } + +-u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++u32 deaggregate_AMSDU_announce(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pData, unsigned long DataSize) + { + u16 PayloadSize; + u16 SubFrameSize; +- PHEADER_802_3 pAMSDUsubheader; ++ struct rt_header_802_3 * pAMSDUsubheader; + u32 nMSDU; + u8 Header802_3[14]; + +@@ -1399,7 +1399,7 @@ u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + nMSDU++; + + /*hex_dump("subheader", pData, 64); */ +- pAMSDUsubheader = (PHEADER_802_3) pData; ++ pAMSDUsubheader = (struct rt_header_802_3 *) pData; + /*pData += LENGTH_802_3; */ + PayloadSize = + pAMSDUsubheader->Octet[1] + +@@ -1421,8 +1421,8 @@ u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + + if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E)) { + /* avoid local heap overflow, use dyanamic allocation */ +- MLME_QUEUE_ELEM *Elem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_queue_elem *Elem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + if (Elem != NULL) { + memmove(Elem->Msg + +@@ -1479,7 +1479,7 @@ u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, + return nMSDU; + } + +-u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, void *pPacket) ++u32 BA_Reorder_AMSDU_Annnounce(struct rt_rtmp_adapter *pAd, void *pPacket) + { + u8 *pData; + u16 DataSize; +@@ -1501,10 +1501,10 @@ u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, void *pPacket) + pEntry - pointer to the MAC entry; NULL is not found + ========================================================================== + */ +-MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, u8 *pAddr) ++struct rt_mac_table_entry *MacTableLookup(struct rt_rtmp_adapter *pAd, u8 *pAddr) + { + unsigned long HashIdx; +- MAC_TABLE_ENTRY *pEntry = NULL; ++ struct rt_mac_table_entry *pEntry = NULL; + + HashIdx = MAC_ADDR_HASH_INDEX(pAddr); + pEntry = pAd->MacTab.Hash[HashIdx]; +@@ -1521,13 +1521,13 @@ MAC_TABLE_ENTRY *MacTableLookup(IN PRTMP_ADAPTER pAd, u8 *pAddr) + return pEntry; + } + +-MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, ++struct rt_mac_table_entry *MacTableInsertEntry(struct rt_rtmp_adapter *pAd, + u8 *pAddr, + u8 apidx, IN BOOLEAN CleanAll) + { + u8 HashIdx; + int i, FirstWcid; +- MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; ++ struct rt_mac_table_entry *pEntry = NULL, *pCurrEntry; + /* u16 offset; */ + /* unsigned long addr; */ + +@@ -1554,7 +1554,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + if (CleanAll == TRUE) { + pEntry->MaxSupportedRate = RATE_11; + pEntry->CurrTxRate = RATE_11; +- NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); ++ NdisZeroMemory(pEntry, sizeof(struct rt_mac_table_entry)); + pEntry->PairwiseKey.KeyLen = 0; + pEntry->PairwiseKey.CipherAlg = CIPHER_NONE; + } +@@ -1658,11 +1658,11 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(IN PRTMP_ADAPTER pAd, + Delete a specified client from MAC table + ========================================================================== + */ +-BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, ++BOOLEAN MacTableDeleteEntry(struct rt_rtmp_adapter *pAd, + u16 wcid, u8 *pAddr) + { + u16 HashIdx; +- MAC_TABLE_ENTRY *pEntry, *pPrevEntry, *pProbeEntry; ++ struct rt_mac_table_entry *pEntry, *pPrevEntry, *pProbeEntry; + BOOLEAN Cancelled; + /*u16 offset; // unused variable */ + /*u8 j; // unused variable */ +@@ -1722,7 +1722,7 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + EAPOL_START_DISABLE; + } + +- NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY)); ++ NdisZeroMemory(pEntry, sizeof(struct rt_mac_table_entry)); + pAd->MacTab.Size--; + DBGPRINT(RT_DEBUG_TRACE, + ("MacTableDeleteEntry1 - Total= %d\n", +@@ -1752,7 +1752,7 @@ BOOLEAN MacTableDeleteEntry(IN PRTMP_ADAPTER pAd, + the power-saving queues are freed here. + ========================================================================== + */ +-void MacTableReset(IN PRTMP_ADAPTER pAd) ++void MacTableReset(struct rt_rtmp_adapter *pAd) + { + int i; + +@@ -1790,8 +1790,8 @@ void MacTableReset(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void AssocParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, ++void AssocParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_assoc_req *AssocReq, + u8 *pAddr, + u16 CapabilityInfo, + unsigned long Timeout, u16 ListenIntv) +@@ -1811,8 +1811,8 @@ void AssocParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void DisassocParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, ++void DisassocParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_disassoc_req *DisassocReq, + u8 *pAddr, u16 Reason) + { + COPY_MAC_ADDR(DisassocReq->Addr, pAddr); +@@ -1853,9 +1853,9 @@ void DisassocParmFill(IN PRTMP_ADAPTER pAd, + ======================================================================== + */ + +-BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, void *pPacket) ++BOOLEAN RTMPCheckDHCPFrame(struct rt_rtmp_adapter *pAd, void *pPacket) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + unsigned long NumberOfBytesRead = 0; + unsigned long CurrentOffset = 0; + void *pVirtualAddress = NULL; +@@ -1908,7 +1908,7 @@ BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, void *pPacket) + return TRUE; + } + +-BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, void *pPacket) ++BOOLEAN RTMPCheckEtherType(struct rt_rtmp_adapter *pAd, void *pPacket) + { + u16 TypeLen; + u8 Byte0, Byte1; +@@ -2010,8 +2010,8 @@ BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, void *pPacket) + + } + +-void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI) ++void Update_Rssi_Sample(struct rt_rtmp_adapter *pAd, ++ struct rt_rssi_sample *pRssi, struct rt_rxwi * pRxWI) + { + char rssi0 = pRxWI->RSSI0; + char rssi1 = pRxWI->RSSI1; +@@ -2040,8 +2040,8 @@ void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, + } + + /* Normal legacy Rx packet indication */ +-void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void Indicate_Legacy_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + void *pRxPacket = pRxBlk->pRxPacket; + u8 Header802_3[LENGTH_802_3]; +@@ -2063,7 +2063,7 @@ void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + + #ifdef RTMP_MAC_USB + if (pAd->CommonCfg.bDisableReordering == 0) { +- PBA_REC_ENTRY pBAEntry; ++ struct rt_ba_rec_entry *pBAEntry; + unsigned long Now32; + u8 Wcid = pRxBlk->pRxWI->WirelessCliID; + u8 TID = pRxBlk->pRxWI->TID; +@@ -2111,8 +2111,8 @@ void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, + } + + /* Normal, AMPDU or AMSDU */ +-void CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void CmmRxnonRalinkFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) + && (pAd->CommonCfg.bDisableReordering == 0)) { +@@ -2127,9 +2127,9 @@ void CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + } + } + +-void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void CmmRxRalinkFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + u8 Header802_3[LENGTH_802_3]; + u16 Msdu2Size; +@@ -2192,9 +2192,9 @@ void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, + _fragFrame.Flags = 0; \ + } + +-void *RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void *RTMPDeFragmentDataFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk) + { +- PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ struct rt_header_802_11 * pHeader = pRxBlk->pHeader; + void *pRxPacket = pRxBlk->pRxPacket; + u8 *pData = pRxBlk->pData; + u16 DataSize = pRxBlk->DataSize; +@@ -2283,7 +2283,7 @@ done: + pRetPacket = pAd->FragFrame.pFragPacket; + pAd->FragFrame.pFragPacket = pNewFragPacket; + pRxBlk->pHeader = +- (PHEADER_802_11) GET_OS_PKT_DATAPTR(pRetPacket); ++ (struct rt_header_802_11 *) GET_OS_PKT_DATAPTR(pRetPacket); + pRxBlk->pData = (u8 *) pRxBlk->pHeader + HeaderRoom; + pRxBlk->DataSize = pAd->FragFrame.RxSize - HeaderRoom; + pRxBlk->pRxPacket = pRetPacket; +@@ -2295,8 +2295,8 @@ done: + return pRetPacket; + } + +-void Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void Indicate_AMSDU_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + u32 nMSDU; + +@@ -2307,10 +2307,10 @@ void Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, + pRxBlk->DataSize); + } + +-void Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void Indicate_EAPOL_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { +- MAC_TABLE_ENTRY *pEntry = NULL; ++ struct rt_mac_table_entry *pEntry = NULL; + + { + pEntry = &pAd->MacTab.Content[BSSID_WCID]; +@@ -2329,7 +2329,7 @@ void Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, + } + + #define BCN_TBTT_OFFSET 64 /*defer 64 us */ +-void ReSyncBeaconTime(IN PRTMP_ADAPTER pAd) ++void ReSyncBeaconTime(struct rt_rtmp_adapter *pAd) + { + + u32 Offset; +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index b254947..e6cb55a 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -32,16 +32,16 @@ + */ + #include "../rt_config.h" + +-u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, u16 * FreeNumber) + { + + u8 *pDMAHeaderBufVA; + u16 TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + u32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; ++ struct rt_rtmp_tx_ring *pTxRing; + u16 hwHeaderLen; + + /* */ +@@ -73,7 +73,7 @@ u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + /* build Tx Descriptor */ + /* */ + +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +@@ -97,17 +97,17 @@ u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, + return RetTxIdx; + } + +-u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, + u16 * FreeNumber) + { + + u8 *pDMAHeaderBufVA; + u16 TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + u32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; ++ struct rt_rtmp_tx_ring *pTxRing; + u16 hwHeaderLen; + + /* */ +@@ -132,7 +132,7 @@ u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + /* */ + /* build Tx Descriptor */ + /* */ +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +@@ -156,16 +156,16 @@ u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + return RetTxIdx; + } + +-u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 frameNum, u16 * FreeNumber) + { + BOOLEAN bIsLast; + u8 *pDMAHeaderBufVA; + u16 TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + u32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; ++ struct rt_rtmp_tx_ring *pTxRing; + u16 hwHdrLen; + u32 firstDMALen; + +@@ -210,7 +210,7 @@ u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + /* */ + /* build Tx Descriptor */ + /* */ +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + pTxD->SDPtr0 = BufBasePaLow; +@@ -235,28 +235,28 @@ u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + + } + +-void RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++void RtmpPCI_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u16 totalMPDUSize, u16 FirstTxIdx) + { + +- PTXWI_STRUC pTxWI; +- PRTMP_TX_RING pTxRing; ++ struct rt_txwi * pTxWI; ++ struct rt_rtmp_tx_ring *pTxRing; + + /* */ + /* get Tx Ring Resource */ + /* */ + pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; ++ pTxWI = (struct rt_txwi *) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; + pTxWI->MPDUtotalByteCount = totalMPDUSize; + + } + +-void RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++void RtmpPCIDataLastTxIdx(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u16 LastTxIdx) + { +- PTXD_STRUC pTxD; +- PRTMP_TX_RING pTxRing; ++ struct rt_txd * pTxD; ++ struct rt_rtmp_tx_ring *pTxRing; + + /* */ + /* get Tx Ring Resource */ +@@ -266,21 +266,21 @@ void RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, + /* */ + /* build Tx Descriptor */ + /* */ +- pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[LastTxIdx].AllocVa; + + pTxD->LastSec1 = 1; + + } + +-u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteFragTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 fragNum, u16 * FreeNumber) + { + u8 *pDMAHeaderBufVA; + u16 TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + u32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; ++ struct rt_rtmp_tx_ring *pTxRing; + u16 hwHeaderLen; + u32 firstDMALen; + +@@ -305,7 +305,7 @@ u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + /* */ + /* Build Tx Descriptor */ + /* */ +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[TxIdx].AllocVa; + NdisZeroMemory(pTxD, TXD_SIZE); + + if (fragNum == pTxBlk->TotalFragNum) { +@@ -341,15 +341,15 @@ u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + Must be run in Interrupt context + This function handle PCI specific TxDesc and cpu index update and kick the packet out. + */ +-int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, ++int RtmpPCIMgmtKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen) + { +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + unsigned long SwIdx = pAd->MgmtRing.TxCpuIdx; + +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ pTxD = (struct rt_txd *) pAd->MgmtRing.Cell[SwIdx].AllocVa; + + pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket; + pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL; +@@ -405,11 +405,11 @@ int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD) ++int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHeader, ++ struct rt_rxwi * pRxWI, IN PRT28XX_RXD_STRUC pRxD) + { +- PCIPHER_KEY pWpaKey; ++ struct rt_cipher_key *pWpaKey; + int dBm; + + /* Phy errors & CRC errors */ +@@ -516,13 +516,13 @@ int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, + return (NDIS_STATUS_SUCCESS); + } + +-BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) ++BOOLEAN RTMPFreeTXDUponTxDmaDone(struct rt_rtmp_adapter *pAd, u8 QueIdx) + { +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; ++ struct rt_rtmp_tx_ring *pTxRing; ++ struct rt_txd * pTxD; + void *pPacket; + u8 FREE = 0; +- TXD_STRUC TxD, *pOriTxD; ++ struct rt_txd TxD, *pOriTxD; + /*unsigned long IrqFlags; */ + BOOLEAN bReschedule = FALSE; + +@@ -541,9 +541,9 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) + /* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */ + FREE++; + pTxD = +- (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); ++ (struct rt_txd *) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa); + pOriTxD = pTxD; +- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC)); ++ NdisMoveMemory(&TxD, pTxD, sizeof(struct rt_txd)); + pTxD = &TxD; + + pTxD->DMADONE = 0; +@@ -584,7 +584,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) + /* get tx_tdx_idx again */ + RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, + &pTxRing->TxDmaIdx); +- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC)); ++ NdisMoveMemory(pOriTxD, pTxD, sizeof(struct rt_txd)); + + /* RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); */ + } +@@ -609,7 +609,7 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx) + + ======================================================================== + */ +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd, + INT_SOURCE_CSR_STRUC TxRingBitmap) + { + /* u8 Count = 0; */ +@@ -661,13 +661,13 @@ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleMgmtRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd) + { +- PTXD_STRUC pTxD; ++ struct rt_txd * pTxD; + void *pPacket; + /* int i; */ + u8 FREE = 0; +- PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing; ++ struct rt_rtmp_mgmt_ring *pMgmtRing = &pAd->MgmtRing; + + NdisAcquireSpinLock(&pAd->MgmtRingLock); + +@@ -675,7 +675,7 @@ void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + while (pMgmtRing->TxSwFreeIdx != pMgmtRing->TxDmaIdx) { + FREE++; + pTxD = +- (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx]. ++ (struct rt_txd *) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx]. + AllocVa); + pTxD->DMADONE = 0; + pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket; +@@ -713,7 +713,7 @@ void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleTBTTInterrupt(struct rt_rtmp_adapter *pAd) + { + { + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { +@@ -732,7 +732,7 @@ void RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandlePreTBTTInterrupt(struct rt_rtmp_adapter *pAd) + { + { + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) { +@@ -743,7 +743,7 @@ void RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd) + + } + +-void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleRxCoherentInterrupt(struct rt_rtmp_adapter *pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + +@@ -773,18 +773,18 @@ void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("<== RTMPHandleRxCoherentInterrupt \n")); + } + +-void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(struct rt_rtmp_adapter *pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending) + { +- PRXD_STRUC pRxD; ++ struct rt_rxd * pRxD; + void *pRxPacket = NULL; + void *pNewPacket; + void *AllocVa; + dma_addr_t AllocPa; + BOOLEAN bReschedule = FALSE; +- RTMP_DMACB *pRxCell; ++ struct rt_rtmp_dmacb *pRxCell; + + RTMP_SEM_LOCK(&pAd->RxRingLock); + +@@ -811,7 +811,7 @@ void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + pRxCell = &pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx]; + + /* Point to Rx indexed rx ring descriptor */ +- pRxD = (PRXD_STRUC) pRxCell->AllocVa; ++ pRxD = (struct rt_rxd *) pRxCell->AllocVa; + + if (pRxD->DDONE == 0) { + *pRxPending = 0; +@@ -864,24 +864,24 @@ done: + return pRxPacket; + } + +-int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmitTxRing(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u8 *pSrcBufVA; + u32 SrcBufLen; +- PTXD_STRUC pTxD; +- PHEADER_802_11 pHeader_802_11; ++ struct rt_txd * pTxD; ++ struct rt_header_802_11 * pHeader_802_11; + BOOLEAN bAckRequired, bInsertTimestamp; + unsigned long SrcBufPA; + /*u8 TxBufIdx; */ + u8 MlmeRate; + unsigned long SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; +- PTXWI_STRUC pFirstTxWI; ++ struct rt_txwi * pFirstTxWI; + /*unsigned long i; */ + /*HTTRANSMIT_SETTING MlmeTransmit; //Rate for this MGMT frame. */ + unsigned long FreeNum; +- MAC_TABLE_ENTRY *pMacEntry = NULL; ++ struct rt_mac_table_entry *pMacEntry = NULL; + + RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen); + +@@ -901,7 +901,7 @@ int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + + SwIdx = pAd->TxRing[QueIdx].TxCpuIdx; + +- pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; ++ pTxD = (struct rt_txd *) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa; + + if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket) { + DBGPRINT(RT_DEBUG_OFF, ("MlmeHardTransmit Error\n")); +@@ -915,9 +915,9 @@ int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) + AsicForceWakeup(pAd, TRUE); + } +- pFirstTxWI = (PTXWI_STRUC) pSrcBufVA; ++ pFirstTxWI = (struct rt_txwi *) pSrcBufVA; + +- pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE); ++ pHeader_802_11 = (struct rt_header_802_11 *) (pSrcBufVA + TXWI_SIZE); + if (pHeader_802_11->Addr1[0] & 0x01) { + MlmeRate = pAd->CommonCfg.BasicMlmeRate; + } else { +@@ -1040,7 +1040,7 @@ int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, + return NDIS_STATUS_SUCCESS; + } + +-int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++int MlmeDataHardTransmit(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket) + { + if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) +@@ -1078,8 +1078,8 @@ int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, ++void RTMPWriteTxDescriptor(struct rt_rtmp_adapter *pAd, ++ struct rt_txd * pTxD, + IN BOOLEAN bWIV, u8 QueueSEL) + { + /* */ +diff --git a/drivers/staging/rt2860/common/cmm_data_usb.c b/drivers/staging/rt2860/common/cmm_data_usb.c +index f3a7208..7c56c2f 100644 +--- a/drivers/staging/rt2860/common/cmm_data_usb.c ++++ b/drivers/staging/rt2860/common/cmm_data_usb.c +@@ -41,9 +41,9 @@ + => + => + */ +-static inline int RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, ++static inline int RtmpUSBCanDoWrite(struct rt_rtmp_adapter *pAd, + u8 QueIdx, +- IN HT_TX_CONTEXT * pHTTXContext) ++ struct rt_ht_tx_context *pHTTXContext) + { + int canWrite = NDIS_STATUS_RESOURCES; + +@@ -68,8 +68,8 @@ static inline int RtmpUSBCanDoWrite(IN RTMP_ADAPTER * pAd, + return canWrite; + } + +-u16 RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteSubTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, u16 * FreeNumber) + { + +@@ -78,15 +78,15 @@ u16 RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, + + } + +-u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteFragTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 fragNum, u16 * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + u16 hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ + u32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi *pTxWI; + u8 *pWirelessPacket = NULL; + u8 QueIdx; + int Status; +@@ -147,8 +147,8 @@ u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + } + + NdisZeroMemory((u8 *)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE); +- pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); +- pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ pTxInfo = (struct rt_txinfo *)(&pTxBlk->HeaderBuf[0]); ++ pTxWI = (struct rt_txwi *) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + + pWirelessPacket = + &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]; +@@ -215,16 +215,16 @@ u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, + + } + +-u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, + u16 * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + u16 hwHdrLen; + u32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi *pTxWI; + u8 *pWirelessPacket; + u8 QueIdx; + unsigned long IrqFlags; +@@ -249,8 +249,8 @@ u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + +- pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); +- pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ pTxInfo = (struct rt_txinfo *)(&pTxBlk->HeaderBuf[0]); ++ pTxWI = (struct rt_txwi *) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + + /* Reserve space for 8 bytes padding. */ + if ((pHTTXContext->ENextBulkOutPosition == +@@ -328,15 +328,15 @@ u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, + + } + +-u16 RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 frameNum, u16 * FreeNumber) + { +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + u16 hwHdrLen; /* The hwHdrLen consist of 802.11 header length plus the header padding length. */ + u32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi *pTxWI; + u8 *pWirelessPacket = NULL; + u8 QueIdx; + int Status; +@@ -357,8 +357,8 @@ u16 RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, + if (Status == NDIS_STATUS_SUCCESS) { + pHTTXContext->bCurWriting = TRUE; + +- pTxInfo = (PTXINFO_STRUC) (&pTxBlk->HeaderBuf[0]); +- pTxWI = (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); ++ pTxInfo = (struct rt_txinfo *)(&pTxBlk->HeaderBuf[0]); ++ pTxWI = (struct rt_txwi *) (&pTxBlk->HeaderBuf[TXINFO_SIZE]); + + /* Reserve space for 8 bytes padding. */ + if ((pHTTXContext->ENextBulkOutPosition == +@@ -467,15 +467,15 @@ done: + + } + +-void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++void RtmpUSB_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u16 totalMPDUSize, u16 TxIdx) + { + u8 QueIdx; +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + u32 fillOffset; +- TXINFO_STRUC *pTxInfo; +- TXWI_STRUC *pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi *pTxWI; + u32 USBDMApktLen, padding; + unsigned long IrqFlags; + u8 *pWirelessPacket; +@@ -502,7 +502,7 @@ void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + /* Update TxInfo->USBDMApktLen , */ + /* the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding */ + /* */ +- pTxInfo = (PTXINFO_STRUC) (pWirelessPacket); ++ pTxInfo = (struct rt_txinfo *)(pWirelessPacket); + + /* Calculate the bulk-out padding */ + USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE; +@@ -514,7 +514,7 @@ void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + /* */ + /* Update TXWI->MPDUtotalByteCount , */ + /* the length = 802.11 header + payload_of_all_batch_frames */ +- pTxWI = (PTXWI_STRUC) (pWirelessPacket + TXINFO_SIZE); ++ pTxWI = (struct rt_txwi *) (pWirelessPacket + TXINFO_SIZE); + pTxWI->MPDUtotalByteCount = totalMPDUSize; + + /* */ +@@ -547,7 +547,7 @@ void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, + + } + +-void RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++void RtmpUSBDataLastTxIdx(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u16 TxIdx) + { + /* DO nothing for USB. */ +@@ -561,8 +561,8 @@ void RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, + Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out. + + */ +-void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, u8 QueIdx) ++void RtmpUSBDataKickOut(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 QueIdx) + { + RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx)); + RTUSBKickBulkOut(pAd); +@@ -573,21 +573,21 @@ void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, + Must be run in Interrupt context + This function handle RT2870 specific TxDesc and cpu index update and kick the packet out. + */ +-int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, ++int RtmpUSBMgmtKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen) + { +- PTXINFO_STRUC pTxInfo; ++ struct rt_txinfo *pTxInfo; + unsigned long BulkOutSize; + u8 padLen; + u8 *pDest; + unsigned long SwIdx = pAd->MgmtRing.TxCpuIdx; +- PTX_CONTEXT pMLMEContext = +- (PTX_CONTEXT) pAd->MgmtRing.Cell[SwIdx].AllocVa; ++ struct rt_tx_context *pMLMEContext = ++ (struct rt_tx_context *)pAd->MgmtRing.Cell[SwIdx].AllocVa; + unsigned long IrqFlags; + +- pTxInfo = (PTXINFO_STRUC) (pSrcBufVA); ++ pTxInfo = (struct rt_txinfo *)(pSrcBufVA); + + /* Build our URB for USBD */ + BulkOutSize = SrcBufLen; +@@ -613,7 +613,7 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + + pAd->MgmtRing.Cell[pAd->MgmtRing.TxCpuIdx].pNdisPacket = pPacket; + pMLMEContext->TransferBuffer = +- (PTX_BUFFER) (GET_OS_PKT_DATAPTR(pPacket)); ++ (struct rt_tx_buffer *)(GET_OS_PKT_DATAPTR(pPacket)); + + /* Length in TxInfo should be 8 less than bulkout size. */ + pMLMEContext->BulkOutSize = BulkOutSize; +@@ -642,14 +642,14 @@ int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, + return 0; + } + +-void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++void RtmpUSBNullFrameKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + u8 * pNullFrame, u32 frameLen) + { + if (pAd->NullContext.InUse == FALSE) { +- PTX_CONTEXT pNullContext; +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; ++ struct rt_tx_context *pNullContext; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi * pTxWI; + u8 *pWirelessPkt; + + pNullContext = &(pAd->NullContext); +@@ -661,19 +661,19 @@ void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, + WirelessPacket[0]; + + RTMPZeroMemory(&pWirelessPkt[0], 100); +- pTxInfo = (PTXINFO_STRUC) & pWirelessPkt[0]; ++ pTxInfo = (struct rt_txinfo *)& pWirelessPkt[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (u16)(sizeof(HEADER_802_11) + TXWI_SIZE), ++ (u16)(sizeof(struct rt_header_802_11) + TXWI_SIZE), + TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxInfo->QSEL = FIFO_EDCA; +- pTxWI = (PTXWI_STRUC) & pWirelessPkt[TXINFO_SIZE]; ++ pTxWI = (struct rt_txwi *) & pWirelessPkt[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, +- FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), 0, ++ FALSE, 0, BSSID_WCID, (sizeof(struct rt_header_802_11)), 0, + 0, (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit); + + RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE + TXINFO_SIZE], +- &pAd->NullFrame, sizeof(HEADER_802_11)); ++ &pAd->NullFrame, sizeof(struct rt_header_802_11)); + pAd->NullContext.BulkOutSize = + TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + +@@ -707,17 +707,17 @@ Return Value: + Note: + ======================================================================== + */ +-void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(struct rt_rtmp_adapter *pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending) + { +- PRX_CONTEXT pRxContext; ++ struct rt_rx_context *pRxContext; + void *pSkb; + u8 *pData; + unsigned long ThisFrameLen; + unsigned long RxBufferLength; +- PRXWI_STRUC pRxWI; ++ struct rt_rxwi * pRxWI; + + pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex]; + if ((pRxContext->Readable == FALSE) || (pRxContext->InUse == TRUE)) +@@ -725,8 +725,8 @@ void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + + RxBufferLength = pRxContext->BulkInOffset - pAd->ReadPosition; + if (RxBufferLength < +- (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + +- sizeof(RXINFO_STRUC))) { ++ (RT2870_RXDMALEN_FIELD_SIZE + sizeof(struct rt_rxwi) + ++ sizeof(struct rt_rxinfo))) { + goto label_null; + } + +@@ -748,7 +748,7 @@ void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + goto label_null; + } + +- if ((ThisFrameLen + 8) > RxBufferLength) /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) */ ++ if ((ThisFrameLen + 8) > RxBufferLength) /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(struct rt_rxinfo)) */ + { + DBGPRINT(RT_DEBUG_TRACE, + ("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n", +@@ -761,7 +761,7 @@ void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + } + /* skip USB frame length field */ + pData += RT2870_RXDMALEN_FIELD_SIZE; +- pRxWI = (PRXWI_STRUC) pData; ++ pRxWI = (struct rt_rxwi *) pData; + if (pRxWI->MPDUtotalByteCount > ThisFrameLen) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n", +@@ -783,10 +783,10 @@ void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, + RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS); + + /* copy RxD */ +- *pSaveRxD = *(PRXINFO_STRUC) (pData + ThisFrameLen); ++ *pSaveRxD = *(struct rt_rxinfo *) (pData + ThisFrameLen); + + /* update next packet read position. */ +- pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC)) */ ++ pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); /* 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(struct rt_rxinfo)) */ + + return pSkb; + +@@ -812,11 +812,11 @@ label_null: + + ======================================================================== + */ +-int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxINFO) ++int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHeader, ++ struct rt_rxwi * pRxWI, IN PRT28XX_RXD_STRUC pRxINFO) + { +- PCIPHER_KEY pWpaKey; ++ struct rt_cipher_key *pWpaKey; + int dBm; + + if (pAd->bPromiscuous == TRUE) +@@ -909,7 +909,7 @@ void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, + void *SystemSpecific2, + void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + if (pAd && pAd->Mlme.AutoWakeupTimerRunning) { + AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02); +@@ -919,7 +919,7 @@ void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, + } + } + +-void RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void RT28xxUsbStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx) + { + BOOLEAN Canceled; + +@@ -931,7 +931,7 @@ void RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); + } + +-void RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void RT28xxUsbStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp) + { + +diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c +index 2178057..25302e8 100644 +--- a/drivers/staging/rt2860/common/cmm_info.c ++++ b/drivers/staging/rt2860/common/cmm_info.c +@@ -47,7 +47,7 @@ + + ======================================================================== + */ +-void RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, long Rates) ++void RTMPSetDesiredRates(struct rt_rtmp_adapter *pAdapter, long Rates) + { + NDIS_802_11_RATES aryRates; + +@@ -235,7 +235,7 @@ void RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, long Rates) + + ======================================================================== + */ +-void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) ++void RTMPWPARemoveAllKeys(struct rt_rtmp_adapter *pAd) + { + + u8 i; +@@ -262,7 +262,7 @@ void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, + ("remove %s key #%d\n", + CipherName[pAd->SharedKey[BSS0][i].CipherAlg], i)); +- NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(CIPHER_KEY)); ++ NdisZeroMemory(&pAd->SharedKey[BSS0][i], sizeof(struct rt_cipher_key)); + + AsicRemoveSharedKeyEntry(pAd, BSS0, i); + } +@@ -307,7 +307,7 @@ void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, unsigned long phymode) ++void RTMPSetPhyMode(struct rt_rtmp_adapter *pAd, unsigned long phymode) + { + int i; + /* the selected phymode must be supported by the RF IC encoded in E2PROM */ +@@ -435,7 +435,7 @@ void RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, unsigned long phymode) + + ======================================================================== + */ +-void RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) ++void RTMPSetHT(struct rt_rtmp_adapter *pAd, struct rt_oid_set_ht_phymode *pHTPhyMode) + { + /*unsigned long *pmcs; */ + u32 Value = 0; +@@ -648,9 +648,9 @@ void RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode) + + ======================================================================== + */ +-void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx) ++void RTMPSetIndividualHT(struct rt_rtmp_adapter *pAd, u8 apidx) + { +- PRT_HT_PHY_INFO pDesired_ht_phy = NULL; ++ struct rt_ht_phy_info *pDesired_ht_phy = NULL; + u8 TxStream = pAd->CommonCfg.TxStream; + u8 DesiredMcs = MCS_AUTO; + +@@ -669,7 +669,7 @@ void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx) + ("RTMPSetIndividualHT: invalid apidx(%d)\n", apidx)); + return; + } +- RTMPZeroMemory(pDesired_ht_phy, sizeof(RT_HT_PHY_INFO)); ++ RTMPZeroMemory(pDesired_ht_phy, sizeof(struct rt_ht_phy_info)); + + DBGPRINT(RT_DEBUG_TRACE, + ("RTMPSetIndividualHT : Desired MCS = %d\n", DesiredMcs)); +@@ -755,13 +755,13 @@ void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx) + + ======================================================================== + */ +-void RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++void RTMPUpdateHTIE(struct rt_ht_capability *pRtHt, + u8 * pMcsSet, +- OUT HT_CAPABILITY_IE * pHtCapability, +- OUT ADD_HT_INFO_IE * pAddHtInfo) ++ struct rt_ht_capability_ie * pHtCapability, ++ struct rt_add_ht_info_ie * pAddHtInfo) + { +- RTMPZeroMemory(pHtCapability, sizeof(HT_CAPABILITY_IE)); +- RTMPZeroMemory(pAddHtInfo, sizeof(ADD_HT_INFO_IE)); ++ RTMPZeroMemory(pHtCapability, sizeof(struct rt_ht_capability_ie)); ++ RTMPZeroMemory(pAddHtInfo, sizeof(struct rt_add_ht_info_ie)); + + pHtCapability->HtCapInfo.ChannelWidth = pRtHt->ChannelWidth; + pHtCapability->HtCapInfo.MimoPs = pRtHt->MimoPs; +@@ -790,10 +790,10 @@ void RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, + Return: + ======================================================================== + */ +-void RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++void RTMPAddWcidAttributeEntry(struct rt_rtmp_adapter *pAd, + u8 BssIdx, + u8 KeyIdx, +- u8 CipherAlg, IN MAC_TABLE_ENTRY * pEntry) ++ u8 CipherAlg, struct rt_mac_table_entry *pEntry) + { + u32 WCIDAttri = 0; + u16 offset; +@@ -914,9 +914,9 @@ char *GetAuthMode(char auth) + return "UNKNOW"; + } + +-int SetCommonHT(IN PRTMP_ADAPTER pAd) ++int SetCommonHT(struct rt_rtmp_adapter *pAd) + { +- OID_SET_HT_PHYMODE SetHT; ++ struct rt_oid_set_ht_phymode SetHT; + + if (pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) + return FALSE; +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index f005342..11dfdc5 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -48,18 +48,18 @@ + + ======================================================================== + */ +-int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++int RTMPAllocTxRxRingMemory(struct rt_rtmp_adapter *pAd) + { + int Status = NDIS_STATUS_SUCCESS; + unsigned long RingBasePaHigh; + unsigned long RingBasePaLow; + void *RingBaseVa; + int index, num; +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; ++ struct rt_txd * pTxD; ++ struct rt_rxd * pRxD; + unsigned long ErrorValue = 0; +- PRTMP_TX_RING pTxRing; +- PRTMP_DMABUF pDmaBuf; ++ struct rt_rtmp_tx_ring *pTxRing; ++ struct rt_rtmp_dmabuf *pDmaBuf; + void *pPacket; + /* PRTMP_REORDERBUF pReorderBuf; */ + +@@ -166,7 +166,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + /* link the pre-allocated TxBuf to TXD */ + pTxD = +- (PTXD_STRUC) pTxRing->Cell[index].AllocVa; ++ (struct rt_txd *) pTxRing->Cell[index].AllocVa; + pTxD->SDPtr0 = BufBasePaLow; + /* advance to next ring descriptor address */ + pTxD->DMADONE = 1; +@@ -231,7 +231,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + RingBaseVa = (u8 *)RingBaseVa + TXD_SIZE; + + /* link the pre-allocated TxBuf to TXD */ +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa; ++ pTxD = (struct rt_txd *) pAd->MgmtRing.Cell[index].AllocVa; + pTxD->DMADONE = 1; + + /* no pre-allocated buffer required in MgmtRing for scatter-gather case */ +@@ -312,7 +312,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + NdisZeroMemory(pDmaBuf->AllocVa, pDmaBuf->AllocSize); + + /* Write RxD buffer address & allocated buffer length */ +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa; ++ pRxD = (struct rt_rxd *) pAd->RxRing.Cell[index].AllocVa; + pRxD->SDP0 = + RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa); + pRxD->DDONE = 0; +@@ -324,7 +324,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + } while (FALSE); + +- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); ++ NdisZeroMemory(&pAd->FragFrame, sizeof(struct rt_fragment_frame)); + pAd->FragFrame.pFragPacket = + RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); + +@@ -400,14 +400,14 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) ++void RTMPRingCleanUp(struct rt_rtmp_adapter *pAd, u8 RingType) + { +- PTXD_STRUC pTxD; +- PRXD_STRUC pRxD; +- PQUEUE_ENTRY pEntry; ++ struct rt_txd * pTxD; ++ struct rt_rxd * pRxD; ++ struct rt_queue_entry *pEntry; + void *pPacket; + int i; +- PRTMP_TX_RING pTxRing; ++ struct rt_rtmp_tx_ring *pTxRing; + unsigned long IrqFlags; + /*u32 RxSwReadIdx; */ + +@@ -426,7 +426,7 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + /* We have to clean all descriptors in case some error happened with reset */ + for (i = 0; i < TX_RING_SIZE; i++) /* We have to scan all TX ring */ + { +- pTxD = (PTXD_STRUC) pTxRing->Cell[i].AllocVa; ++ pTxD = (struct rt_txd *) pTxRing->Cell[i].AllocVa; + + pPacket = (void *)pTxRing->Cell[i].pNdisPacket; + /* release scatter-and-gather char */ +@@ -471,7 +471,7 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + NdisAcquireSpinLock(&pAd->MgmtRingLock); + + for (i = 0; i < MGMT_RING_SIZE; i++) { +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[i].AllocVa; ++ pTxD = (struct rt_txd *) pAd->MgmtRing.Cell[i].AllocVa; + + pPacket = + (void *)pAd->MgmtRing.Cell[i].pNdisPacket; +@@ -514,7 +514,7 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + NdisAcquireSpinLock(&pAd->RxRingLock); + + for (i = 0; i < RX_RING_SIZE; i++) { +- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[i].AllocVa; ++ pRxD = (struct rt_rxd *) pAd->RxRing.Cell[i].AllocVa; + pRxD->DDONE = 0; + } + +@@ -533,11 +533,11 @@ void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType) + } + } + +-void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++void RTMPFreeTxRxRingMemory(struct rt_rtmp_adapter *pAd) + { + int index, num, j; +- PRTMP_TX_RING pTxRing; +- PTXD_STRUC pTxD; ++ struct rt_rtmp_tx_ring *pTxRing; ++ struct rt_txd * pTxD; + void *pPacket; + unsigned int IrqFlags; + +@@ -547,9 +547,9 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + /* Free TxSwQueue Packet */ + for (index = 0; index < NUM_OF_TX_RING; index++) { +- PQUEUE_ENTRY pEntry; ++ struct rt_queue_entry *pEntry; + void *pPacket; +- PQUEUE_HEADER pQueue; ++ struct rt_queue_header *pQueue; + + RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags); + pQueue = &pAd->TxSwQueue[index]; +@@ -566,7 +566,7 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + pTxRing = &pAd->TxRing[index]; + + for (j = 0; j < TX_RING_SIZE; j++) { +- pTxD = (PTXD_STRUC) (pTxRing->Cell[j].AllocVa); ++ pTxD = (struct rt_txd *) (pTxRing->Cell[j].AllocVa); + pPacket = pTxRing->Cell[j].pNdisPacket; + + if (pPacket) { +@@ -607,21 +607,21 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + NDIS_STATUS_SUCCESS); + } + } +- NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(RTMP_DMACB)); ++ NdisZeroMemory(pAd->RxRing.Cell, RX_RING_SIZE * sizeof(struct rt_rtmp_dmacb)); + + if (pAd->RxDescRing.AllocVa) { + RTMP_FreeDescMemory(pAd, pAd->RxDescRing.AllocSize, + pAd->RxDescRing.AllocVa, + pAd->RxDescRing.AllocPa); + } +- NdisZeroMemory(&pAd->RxDescRing, sizeof(RTMP_DMABUF)); ++ NdisZeroMemory(&pAd->RxDescRing, sizeof(struct rt_rtmp_dmabuf)); + + if (pAd->MgmtDescRing.AllocVa) { + RTMP_FreeDescMemory(pAd, pAd->MgmtDescRing.AllocSize, + pAd->MgmtDescRing.AllocVa, + pAd->MgmtDescRing.AllocPa); + } +- NdisZeroMemory(&pAd->MgmtDescRing, sizeof(RTMP_DMABUF)); ++ NdisZeroMemory(&pAd->MgmtDescRing, sizeof(struct rt_rtmp_dmabuf)); + + for (num = 0; num < NUM_OF_TX_RING; num++) { + if (pAd->TxBufSpace[num].AllocVa) { +@@ -631,14 +631,14 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + pAd->TxBufSpace[num].AllocVa, + pAd->TxBufSpace[num].AllocPa); + } +- NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(RTMP_DMABUF)); ++ NdisZeroMemory(&pAd->TxBufSpace[num], sizeof(struct rt_rtmp_dmabuf)); + + if (pAd->TxDescRing[num].AllocVa) { + RTMP_FreeDescMemory(pAd, pAd->TxDescRing[num].AllocSize, + pAd->TxDescRing[num].AllocVa, + pAd->TxDescRing[num].AllocPa); + } +- NdisZeroMemory(&pAd->TxDescRing[num], sizeof(RTMP_DMABUF)); ++ NdisZeroMemory(&pAd->TxDescRing[num], sizeof(struct rt_rtmp_dmabuf)); + } + + if (pAd->FragFrame.pFragPacket) +@@ -667,7 +667,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28XXDMADisable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMADisable(struct rt_rtmp_adapter *pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + +@@ -691,7 +691,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMAEnable(struct rt_rtmp_adapter *pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + int i = 0; +@@ -721,7 +721,7 @@ void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) + + } + +-BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, u8 Command) ++BOOLEAN AsicCheckCommanOk(struct rt_rtmp_adapter *pAd, u8 Command) + { + u32 CmdStatus = 0, CID = 0, i; + u32 ThisCIDMask = 0; +@@ -794,7 +794,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++void RT28xx_UpdateBeaconToAsic(struct rt_rtmp_adapter *pAd, + int apidx, + unsigned long FrameLen, unsigned long UpdatePos) + { +@@ -853,7 +853,7 @@ void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + } + +-void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) ++void RT28xxPciStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx) + { + AUTO_WAKEUP_STRUC AutoWakeupCfg; + +@@ -888,7 +888,7 @@ void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) + && IS_VERSION_AFTER_F(pAd)) { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps-> +@@ -949,7 +949,7 @@ void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx) + DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); + } + +-void RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void RT28xxPciStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp) + { + BOOLEAN brc; +@@ -1020,7 +1020,7 @@ void PsPollWakeExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + unsigned long flags; + + DBGPRINT(RT_DEBUG_TRACE, ("-->PsPollWakeExec \n")); +@@ -1048,8 +1048,8 @@ void RadioOnExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + WPDMA_GLO_CFG_STRUC DmaCfg; + BOOLEAN Cancelled; + +@@ -1164,7 +1164,7 @@ void RadioOnExec(void *SystemSpecific1, + + ========================================================================== + */ +-BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level) ++BOOLEAN RT28xxPciAsicRadioOn(struct rt_rtmp_adapter *pAd, u8 Level) + { + /*WPDMA_GLO_CFG_STRUC DmaCfg; */ + BOOLEAN Cancelled; +@@ -1223,7 +1223,7 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level) + + /* add by johnli, RF power sequence setup, load RF normal operation-mode setup */ + if ((IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd))) { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); +@@ -1286,7 +1286,7 @@ BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level) + + ========================================================================== + */ +-BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, ++BOOLEAN RT28xxPciAsicRadioOff(struct rt_rtmp_adapter *pAd, + u8 Level, u16 TbttNumToNextWakeUp) + { + WPDMA_GLO_CFG_STRUC DmaCfg; +@@ -1497,7 +1497,7 @@ BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-void RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void RT28xxPciMlmeRadioOn(struct rt_rtmp_adapter *pAd) + { + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; +@@ -1546,7 +1546,7 @@ void RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd) + } + } + +-void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) ++void RT28xxPciMlmeRadioOFF(struct rt_rtmp_adapter *pAd) + { + BOOLEAN brc = TRUE; + +@@ -1556,9 +1556,9 @@ void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + /* Link down first if any association exists */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *pMsgElem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_disassoc_req DisReq; ++ struct rt_mlme_queue_elem *pMsgElem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + + if (pMsgElem) { +@@ -1569,10 +1569,10 @@ void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + pMsgElem->Machine = ASSOC_STATE_MACHINE; + pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; + pMsgElem->MsgLen = +- sizeof(MLME_DISASSOC_REQ_STRUCT); ++ sizeof(struct rt_mlme_disassoc_req); + NdisMoveMemory(pMsgElem->Msg, &DisReq, + sizeof +- (MLME_DISASSOC_REQ_STRUCT)); ++ (struct rt_mlme_disassoc_req)); + + MlmeDisassocReqAction(pAd, pMsgElem); + kfree(pMsgElem); +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index 251debb..010c37c 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -43,12 +43,12 @@ Return Value: + + Note: + Initialize all receive releated private buffer, include those define +- in RTMP_ADAPTER structure and all private data structures. The mahor ++ in struct rt_rtmp_adapter structure and all private data structures. The mahor + work is to allocate buffer for each packet and chain buffer to + NDIS packet descriptor. + ======================================================================== + */ +-int NICInitRecv(IN PRTMP_ADAPTER pAd) ++int NICInitRecv(struct rt_rtmp_adapter *pAd) + { + u8 i; + int Status = NDIS_STATUS_SUCCESS; +@@ -64,7 +64,7 @@ int NICInitRecv(IN PRTMP_ADAPTER pAd) + pAd->NextRxBulkInPosition = 0; + + for (i = 0; i < (RX_RING_SIZE); i++) { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]); + + /*Allocate URB */ + pRxContext->pUrb = RTUSB_ALLOC_URB(0); +@@ -98,7 +98,7 @@ int NICInitRecv(IN PRTMP_ADAPTER pAd) + + out1: + for (i = 0; i < (RX_RING_SIZE); i++) { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]); + + if (NULL != pRxContext->TransferBuffer) { + RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, +@@ -132,7 +132,7 @@ Return Value: + Note: + ======================================================================== + */ +-int NICInitTransmit(IN PRTMP_ADAPTER pAd) ++int NICInitTransmit(struct rt_rtmp_adapter *pAd) + { + #define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \ + Context->pUrb = RTUSB_ALLOC_URB(0); \ +@@ -161,15 +161,15 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + + u8 i, acidx; + int Status = NDIS_STATUS_SUCCESS; +- PTX_CONTEXT pNullContext = &(pAd->NullContext); +- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); +- PTX_CONTEXT pRTSContext = &(pAd->RTSContext); +- PTX_CONTEXT pMLMEContext = NULL; +-/* PHT_TX_CONTEXT pHTTXContext = NULL; */ ++ struct rt_tx_context *pNullContext = &(pAd->NullContext); ++ struct rt_tx_context *pPsPollContext = &(pAd->PsPollContext); ++ struct rt_tx_context *pRTSContext = &(pAd->RTSContext); ++ struct rt_tx_context *pMLMEContext = NULL; ++/* struct rt_ht_tx_context *pHTTXContext = NULL; */ + struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + void *RingBaseVa; +-/* RTMP_TX_RING *pTxRing; */ +- RTMP_MGMT_RING *pMgmtRing; ++/* struct rt_rtmp_tx_ring *pTxRing; */ ++ struct rt_rtmp_mgmt_ring *pMgmtRing; + + DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n")); + pObj = pObj; +@@ -199,15 +199,15 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* TX_RING_SIZE, 4 ACs */ + /* */ + for (acidx = 0; acidx < 4; acidx++) { +- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); ++ struct rt_ht_tx_context *pHTTXContext = &(pAd->TxContext[acidx]); + +- NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT)); ++ NdisZeroMemory(pHTTXContext, sizeof(struct rt_ht_tx_context)); + /*Allocate URB */ +- LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, +- sizeof(HTTX_BUFFER), Status, ++ LM_USB_ALLOC(pObj, pHTTXContext, struct rt_httx_buffer *, ++ sizeof(struct rt_httx_buffer), Status, + ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", + acidx), done, +- ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", ++ ("<-- ERROR in Alloc TX TxContext[%d] struct rt_httx_buffer !! \n", + acidx), out1); + + NdisZeroMemory(pHTTXContext->TransferBuffer-> +@@ -232,7 +232,7 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + + /* Allocate MGMT ring descriptor's memory */ + pAd->MgmtDescRing.AllocSize = +- MGMT_RING_SIZE * sizeof(TX_CONTEXT); ++ MGMT_RING_SIZE * sizeof(struct rt_tx_context); + os_alloc_mem(pAd, (u8 **) (&pAd->MgmtDescRing.AllocVa), + pAd->MgmtDescRing.AllocSize); + if (pAd->MgmtDescRing.AllocVa == NULL) { +@@ -248,14 +248,14 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + pMgmtRing = &pAd->MgmtRing; + for (i = 0; i < MGMT_RING_SIZE; i++) { + /* link the pre-allocated Mgmt buffer to MgmtRing.Cell */ +- pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT); ++ pMgmtRing->Cell[i].AllocSize = sizeof(struct rt_tx_context); + pMgmtRing->Cell[i].AllocVa = RingBaseVa; + pMgmtRing->Cell[i].pNdisPacket = NULL; + pMgmtRing->Cell[i].pNextNdisPacket = NULL; + + /*Allocate URB for MLMEContext */ + pMLMEContext = +- (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ (struct rt_tx_context *)pAd->MgmtRing.Cell[i].AllocVa; + pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); + if (pMLMEContext->pUrb == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -274,7 +274,7 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + pMLMEContext->SelfIdx = i; + + /* Offset to next ring descriptor address */ +- RingBaseVa = (u8 *)RingBaseVa + sizeof(TX_CONTEXT); ++ RingBaseVa = (u8 *)RingBaseVa + sizeof(struct rt_tx_context); + } + DBGPRINT(RT_DEBUG_TRACE, + ("MGMT Ring: total %d entry allocated\n", i)); +@@ -289,16 +289,16 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* */ + for (i = 0; i < BEACON_RING_SIZE; i++) /* 2 */ + { +- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); ++ struct rt_tx_context *pBeaconContext = &(pAd->BeaconContext[i]); + +- NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT)); ++ NdisZeroMemory(pBeaconContext, sizeof(struct rt_tx_context)); + + /*Allocate URB */ +- LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, +- sizeof(TX_BUFFER), Status, ++ LM_USB_ALLOC(pObj, pBeaconContext, struct rt_tx_buffer *, ++ sizeof(struct rt_tx_buffer), Status, + ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", + i), out2, +- ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", ++ ("<-- ERROR in Alloc TX BeaconContext[%d] struct rt_tx_buffer !! \n", + i), out3); + + pBeaconContext->pAd = pAd; +@@ -310,14 +310,14 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* */ + /* NullContext */ + /* */ +- NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT)); ++ NdisZeroMemory(pNullContext, sizeof(struct rt_tx_context)); + + /*Allocate URB */ +- LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), ++ LM_USB_ALLOC(pObj, pNullContext, struct rt_tx_buffer *, sizeof(struct rt_tx_buffer), + Status, + ("<-- ERROR in Alloc TX NullContext urb!! \n"), + out3, +- ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"), ++ ("<-- ERROR in Alloc TX NullContext struct rt_tx_buffer !! \n"), + out4); + + pNullContext->pAd = pAd; +@@ -328,14 +328,14 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* */ + /* RTSContext */ + /* */ +- NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT)); ++ NdisZeroMemory(pRTSContext, sizeof(struct rt_tx_context)); + + /*Allocate URB */ +- LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), ++ LM_USB_ALLOC(pObj, pRTSContext, struct rt_tx_buffer *, sizeof(struct rt_tx_buffer), + Status, + ("<-- ERROR in Alloc TX RTSContext urb!! \n"), + out4, +- ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"), ++ ("<-- ERROR in Alloc TX RTSContext struct rt_tx_buffer !! \n"), + out5); + + pRTSContext->pAd = pAd; +@@ -346,13 +346,13 @@ int NICInitTransmit(IN PRTMP_ADAPTER pAd) + /* */ + /* PsPollContext */ + /* */ +- /*NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT)); */ ++ /*NdisZeroMemory(pPsPollContext, sizeof(struct rt_tx_context)); */ + /*Allocate URB */ +- LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, +- sizeof(TX_BUFFER), Status, ++ LM_USB_ALLOC(pObj, pPsPollContext, struct rt_tx_buffer *, ++ sizeof(struct rt_tx_buffer), Status, + ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), + out5, +- ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"), ++ ("<-- ERROR in Alloc TX PsPollContext struct rt_tx_buffer !! \n"), + out6); + + pPsPollContext->pAd = pAd; +@@ -371,19 +371,19 @@ done: + + /* --------------------------- ERROR HANDLE --------------------------- */ + out6: +- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pPsPollContext, sizeof(struct rt_tx_buffer)); + + out5: +- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pRTSContext, sizeof(struct rt_tx_buffer)); + + out4: +- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pNullContext, sizeof(struct rt_tx_buffer)); + + out3: + for (i = 0; i < BEACON_RING_SIZE; i++) { +- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); ++ struct rt_tx_context *pBeaconContext = &(pAd->BeaconContext[i]); + if (pBeaconContext) +- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pBeaconContext, sizeof(struct rt_tx_buffer)); + } + + out2: +@@ -391,10 +391,10 @@ out2: + pMgmtRing = &pAd->MgmtRing; + for (i = 0; i < MGMT_RING_SIZE; i++) { + pMLMEContext = +- (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ (struct rt_tx_context *)pAd->MgmtRing.Cell[i].AllocVa; + if (pMLMEContext) + LM_URB_FREE(pObj, pMLMEContext, +- sizeof(TX_BUFFER)); ++ sizeof(struct rt_tx_buffer)); + } + os_free_mem(pAd, pAd->MgmtDescRing.AllocVa); + pAd->MgmtDescRing.AllocVa = NULL; +@@ -402,9 +402,9 @@ out2: + + out1: + for (acidx = 0; acidx < 4; acidx++) { +- PHT_TX_CONTEXT pTxContext = &(pAd->TxContext[acidx]); ++ struct rt_ht_tx_context *pTxContext = &(pAd->TxContext[acidx]); + if (pTxContext) +- LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER)); ++ LM_URB_FREE(pObj, pTxContext, sizeof(struct rt_httx_buffer)); + } + + /* Here we didn't have any pre-allocated memory need to free. */ +@@ -428,16 +428,16 @@ Return Value: + Note: + ======================================================================== + */ +-int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++int RTMPAllocTxRxRingMemory(struct rt_rtmp_adapter *pAd) + { +-/* COUNTER_802_11 pCounter = &pAd->WlanCounters; */ ++/* struct rt_counter_802_11 pCounter = &pAd->WlanCounters; */ + int Status; + int num; + + DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n")); + + do { +- /* Init the CmdQ and CmdQLock */ ++ /* Init the struct rt_cmdq and CmdQLock */ + NdisAllocateSpinLock(&pAd->CmdQLock); + NdisAcquireSpinLock(&pAd->CmdQLock); + RTUSBInitializeCmdQ(&pAd->CmdQ); +@@ -490,7 +490,7 @@ int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + } while (FALSE); + +- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME)); ++ NdisZeroMemory(&pAd->FragFrame, sizeof(struct rt_fragment_frame)); + pAd->FragFrame.pFragPacket = + RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE); + +@@ -519,7 +519,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) ++void RTMPFreeTxRxRingMemory(struct rt_rtmp_adapter *pAd) + { + #define LM_URB_FREE(pObj, Context, BufferSize) \ + if (NULL != Context->pUrb) { \ +@@ -533,45 +533,45 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + Context->TransferBuffer = NULL; } + + u32 i, acidx; +- PTX_CONTEXT pNullContext = &pAd->NullContext; +- PTX_CONTEXT pPsPollContext = &pAd->PsPollContext; +- PTX_CONTEXT pRTSContext = &pAd->RTSContext; +-/* PHT_TX_CONTEXT pHTTXContext; */ ++ struct rt_tx_context *pNullContext = &pAd->NullContext; ++ struct rt_tx_context *pPsPollContext = &pAd->PsPollContext; ++ struct rt_tx_context *pRTSContext = &pAd->RTSContext; ++/* struct rt_ht_tx_context *pHTTXContext; */ + /*PRTMP_REORDERBUF pReorderBuf; */ + struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; +-/* RTMP_TX_RING *pTxRing; */ ++/* struct rt_rtmp_tx_ring *pTxRing; */ + + DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n")); + pObj = pObj; + + /* Free all resources for the RECEIVE buffer queue. */ + for (i = 0; i < (RX_RING_SIZE); i++) { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]); + if (pRxContext) + LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE); + } + + /* Free PsPoll frame resource */ +- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pPsPollContext, sizeof(struct rt_tx_buffer)); + + /* Free NULL frame resource */ +- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pNullContext, sizeof(struct rt_tx_buffer)); + + /* Free RTS frame resource */ +- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pRTSContext, sizeof(struct rt_tx_buffer)); + + /* Free beacon frame resource */ + for (i = 0; i < BEACON_RING_SIZE; i++) { +- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]); ++ struct rt_tx_context *pBeaconContext = &(pAd->BeaconContext[i]); + if (pBeaconContext) +- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER)); ++ LM_URB_FREE(pObj, pBeaconContext, sizeof(struct rt_tx_buffer)); + } + + /* Free mgmt frame resource */ + for (i = 0; i < MGMT_RING_SIZE; i++) { +- PTX_CONTEXT pMLMEContext = +- (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; +- /*LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER)); */ ++ struct rt_tx_context *pMLMEContext = ++ (struct rt_tx_context *)pAd->MgmtRing.Cell[i].AllocVa; ++ /*LM_URB_FREE(pObj, pMLMEContext, sizeof(struct rt_tx_buffer)); */ + if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket) { + RTMPFreeNdisPacket(pAd, + pAd->MgmtRing.Cell[i].pNdisPacket); +@@ -592,9 +592,9 @@ void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd) + + /* Free Tx frame resource */ + for (acidx = 0; acidx < 4; acidx++) { +- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]); ++ struct rt_ht_tx_context *pHTTXContext = &(pAd->TxContext[acidx]); + if (pHTTXContext) +- LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER)); ++ LM_URB_FREE(pObj, pHTTXContext, sizeof(struct rt_httx_buffer)); + } + + if (pAd->FragFrame.pFragPacket) +@@ -636,7 +636,7 @@ Return Value: + Note: + ======================================================================== + */ +-int RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAd) ++int RTUSBWriteHWMACAddress(struct rt_rtmp_adapter *pAd) + { + MAC_DW0_STRUC StaMacReg0; + MAC_DW1_STRUC StaMacReg1; +@@ -687,7 +687,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28XXDMADisable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMADisable(struct rt_rtmp_adapter *pAd) + { + /* no use */ + } +@@ -706,7 +706,7 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd) ++void RT28XXDMAEnable(struct rt_rtmp_adapter *pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + USB_DMA_CFG_STRUC UsbCfg; +@@ -767,14 +767,14 @@ Return Value: + Note: + ======================================================================== + */ +-void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++void RT28xx_UpdateBeaconToAsic(struct rt_rtmp_adapter *pAd, + int apidx, + unsigned long FrameLen, unsigned long UpdatePos) + { + u8 *pBeaconFrame = NULL; + u8 *ptr; + u32 i, padding; +- BEACON_SYNC_STRUCT *pBeaconSync = pAd->CommonCfg.pBeaconSync; ++ struct rt_beacon_sync *pBeaconSync = pAd->CommonCfg.pBeaconSync; + u32 longValue; + /* u16 shortValue; */ + BOOLEAN bBcnReq = FALSE; +@@ -849,9 +849,9 @@ void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, + + } + +-void RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconStop(struct rt_rtmp_adapter *pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; ++ struct rt_beacon_sync *pBeaconSync; + int i, offset; + BOOLEAN Cancelled = TRUE; + +@@ -883,10 +883,10 @@ void RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd) + } + } + +-void RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconStart(struct rt_rtmp_adapter *pAd) + { + int apidx; +- BEACON_SYNC_STRUCT *pBeaconSync; ++ struct rt_beacon_sync *pBeaconSync; + /* LARGE_INTEGER tsfTime, deltaTime; */ + + pBeaconSync = pAd->CommonCfg.pBeaconSync; +@@ -929,17 +929,17 @@ void RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd) + } + } + +-void RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconInit(struct rt_rtmp_adapter *pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; ++ struct rt_beacon_sync *pBeaconSync; + int i; + + os_alloc_mem(pAd, (u8 **) (&pAd->CommonCfg.pBeaconSync), +- sizeof(BEACON_SYNC_STRUCT)); +- /*NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(BEACON_SYNC_STRUCT), MEM_ALLOC_FLAG); */ ++ sizeof(struct rt_beacon_sync)); ++ /*NdisAllocMemory(pAd->CommonCfg.pBeaconSync, sizeof(struct rt_beacon_sync), MEM_ALLOC_FLAG); */ + if (pAd->CommonCfg.pBeaconSync) { + pBeaconSync = pAd->CommonCfg.pBeaconSync; +- NdisZeroMemory(pBeaconSync, sizeof(BEACON_SYNC_STRUCT)); ++ NdisZeroMemory(pBeaconSync, sizeof(struct rt_beacon_sync)); + for (i = 0; i < HW_BEACON_MAX_COUNT; i++) { + NdisZeroMemory(pBeaconSync->BeaconBuf[i], + HW_BEACON_OFFSET); +@@ -954,9 +954,9 @@ void RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd) + } + } + +-void RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd) ++void RTUSBBssBeaconExit(struct rt_rtmp_adapter *pAd) + { +- BEACON_SYNC_STRUCT *pBeaconSync; ++ struct rt_beacon_sync *pBeaconSync; + BOOLEAN Cancelled = TRUE; + int i; + +@@ -1001,7 +1001,7 @@ void BeaconUpdateExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + LARGE_INTEGER tsfTime_a; /*, tsfTime_b, deltaTime_exp, deltaTime_ab; */ + u32 delta, delta2MS, period2US, remain, remain_low, remain_high; + /* BOOLEAN positive; */ +@@ -1038,9 +1038,9 @@ void BeaconUpdateExec(void *SystemSpecific1, + * 2870 Radio on/off Related functions. + * + ********************************************************************/ +-void RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void RT28xxUsbMlmeRadioOn(struct rt_rtmp_adapter *pAd) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + + DBGPRINT(RT_DEBUG_TRACE, ("RT28xxUsbMlmeRadioOn()\n")); + +@@ -1068,7 +1068,7 @@ void RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd) + RTMPSetLED(pAd, LED_RADIO_ON); + } + +-void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) ++void RT28xxUsbMlmeRadioOFF(struct rt_rtmp_adapter *pAd) + { + WPDMA_GLO_CFG_STRUC GloCfg; + u32 Value, i; +@@ -1080,14 +1080,14 @@ void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + + /* Clear PMKID cache. */ + pAd->StaCfg.SavedPMKNum = 0; +- RTMPZeroMemory(pAd->StaCfg.SavedPMK, (PMKID_NO * sizeof(BSSID_INFO))); ++ RTMPZeroMemory(pAd->StaCfg.SavedPMK, (PMKID_NO * sizeof(struct rt_bssid_info))); + + /* Link down first if any association exists */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { + if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *pMsgElem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_disassoc_req DisReq; ++ struct rt_mlme_queue_elem *pMsgElem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + + if (pMsgElem) { +@@ -1098,10 +1098,10 @@ void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd) + pMsgElem->Machine = ASSOC_STATE_MACHINE; + pMsgElem->MsgType = MT2_MLME_DISASSOC_REQ; + pMsgElem->MsgLen = +- sizeof(MLME_DISASSOC_REQ_STRUCT); ++ sizeof(struct rt_mlme_disassoc_req); + NdisMoveMemory(pMsgElem->Msg, &DisReq, + sizeof +- (MLME_DISASSOC_REQ_STRUCT)); ++ (struct rt_mlme_disassoc_req)); + + MlmeDisassocReqAction(pAd, pMsgElem); + kfree(pMsgElem); +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index 16cc31a..556e3d0 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -58,14 +58,14 @@ extern u8 WPS_OUI[]; + + ========================================================================== + */ +-BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAddBAReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, unsigned long MsgLen, u8 *pAddr2) + { +- PMLME_ADDBA_REQ_STRUCT pInfo; ++ struct rt_mlme_addba_req *pInfo; + +- pInfo = (MLME_ADDBA_REQ_STRUCT *) Msg; ++ pInfo = (struct rt_mlme_addba_req *)Msg; + +- if ((MsgLen != sizeof(MLME_ADDBA_REQ_STRUCT))) { ++ if ((MsgLen != sizeof(struct rt_mlme_addba_req))) { + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeAddBAReqSanity fail - message lenght not correct.\n")); + return FALSE; +@@ -97,12 +97,12 @@ BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned long MsgLen) ++BOOLEAN MlmeDelBAReqSanity(struct rt_rtmp_adapter *pAd, void * Msg, unsigned long MsgLen) + { +- MLME_DELBA_REQ_STRUCT *pInfo; +- pInfo = (MLME_DELBA_REQ_STRUCT *) Msg; ++ struct rt_mlme_delba_req *pInfo; ++ pInfo = (struct rt_mlme_delba_req *)Msg; + +- if ((MsgLen != sizeof(MLME_DELBA_REQ_STRUCT))) { ++ if ((MsgLen != sizeof(struct rt_mlme_delba_req))) { + DBGPRINT(RT_DEBUG_ERROR, + ("MlmeDelBAReqSanity fail - message lenght not correct.\n")); + return FALSE; +@@ -131,14 +131,14 @@ BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned long MsgLe + return TRUE; + } + +-BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAddBAReqActionSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, u8 *pAddr2) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; +- PFRAME_ADDBA_REQ pAddFrame; +- pAddFrame = (PFRAME_ADDBA_REQ) (pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_REQ))) { ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) pMsg; ++ struct rt_frame_addba_req * pAddFrame; ++ pAddFrame = (struct rt_frame_addba_req *) (pMsg); ++ if (MsgLen < (sizeof(struct rt_frame_addba_req))) { + DBGPRINT(RT_DEBUG_ERROR, + ("PeerAddBAReqActionSanity: ADDBA Request frame length size = %ld incorrect\n", + MsgLen)); +@@ -171,13 +171,13 @@ BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, + return TRUE; + } + +-BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAddBARspActionSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, unsigned long MsgLen) + { +- PFRAME_ADDBA_RSP pAddFrame; ++ struct rt_frame_addba_rsp * pAddFrame; + +- pAddFrame = (PFRAME_ADDBA_RSP) (pMsg); +- if (MsgLen < (sizeof(FRAME_ADDBA_RSP))) { ++ pAddFrame = (struct rt_frame_addba_rsp *) (pMsg); ++ if (MsgLen < (sizeof(struct rt_frame_addba_rsp))) { + DBGPRINT(RT_DEBUG_ERROR, + ("PeerAddBARspActionSanity: ADDBA Response frame length size = %ld incorrect\n", + MsgLen)); +@@ -206,18 +206,18 @@ BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, + + } + +-BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDelBAActionSanity(struct rt_rtmp_adapter *pAd, + u8 Wcid, void * pMsg, unsigned long MsgLen) + { +- /*PFRAME_802_11 pFrame = (PFRAME_802_11)pMsg; */ +- PFRAME_DELBA_REQ pDelFrame; +- if (MsgLen != (sizeof(FRAME_DELBA_REQ))) ++ /*struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *)pMsg; */ ++ struct rt_frame_delba_req * pDelFrame; ++ if (MsgLen != (sizeof(struct rt_frame_delba_req))) + return FALSE; + + if (Wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; + +- pDelFrame = (PFRAME_DELBA_REQ) (pMsg); ++ pDelFrame = (struct rt_frame_delba_req *) (pMsg); + + *(u16 *) (&pDelFrame->DelbaParm) = + cpu2le16(*(u16 *) (&pDelFrame->DelbaParm)); +@@ -240,14 +240,14 @@ BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned long MsgLen, u8 MsgChannel, u8 *pAddr2, u8 *pBssid, char Ssid[], u8 * pSsidLen, u8 * pBssType, u16 * pBeaconPeriod, u8 * pChannel, u8 * pNewChannel, OUT LARGE_INTEGER * pTimestamp, OUT CF_PARM * pCfParm, u16 * pAtimWin, u16 * pCapabilityInfo, u8 * pErp, u8 * pDtimCount, u8 * pDtimPeriod, u8 * pBcastFlag, u8 * pMessageToMe, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, u8 * pCkipFlag, u8 * pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, unsigned long * pRalinkIe, u8 * pHtCapabilityLen, u8 * pPreNHtCapabilityLen, OUT HT_CAPABILITY_IE * pHtCapability, u8 * AddHtInfoLen, OUT ADD_HT_INFO_IE * AddHtInfo, u8 * NewExtChannelOffset, /* Ht extension channel offset(above or below) */ ++BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd, void * Msg, unsigned long MsgLen, u8 MsgChannel, u8 *pAddr2, u8 *pBssid, char Ssid[], u8 * pSsidLen, u8 * pBssType, u16 * pBeaconPeriod, u8 * pChannel, u8 * pNewChannel, OUT LARGE_INTEGER * pTimestamp, struct rt_cf_parm * pCfParm, u16 * pAtimWin, u16 * pCapabilityInfo, u8 * pErp, u8 * pDtimCount, u8 * pDtimPeriod, u8 * pBcastFlag, u8 * pMessageToMe, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, u8 * pCkipFlag, u8 * pAironetCellPowerLimit, struct rt_edca_parm *pEdcaParm, struct rt_qbss_load_parm *pQbssLoad, struct rt_qos_capability_parm *pQosCapability, unsigned long * pRalinkIe, u8 * pHtCapabilityLen, u8 * pPreNHtCapabilityLen, struct rt_ht_capability_ie * pHtCapability, u8 * AddHtInfoLen, struct rt_add_ht_info_ie * AddHtInfo, u8 * NewExtChannelOffset, /* Ht extension channel offset(above or below) */ + u16 * LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE) ++ struct rt_ndis_802_11_variable_ies *pVIE) + { + u8 *Ptr; + u8 TimLen; +- PFRAME_802_11 pFrame; +- PEID_STRUCT pEid; ++ struct rt_frame_802_11 * pFrame; ++ struct rt_eid * pEid; + u8 SubType; + u8 Sanity; + /*u8 ECWMin, ECWMax; */ +@@ -284,7 +284,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + pEdcaParm->bValid = FALSE; /* default: no IE_EDCA_PARAMETER found */ + pQosCapability->bValid = FALSE; /* default: no IE_QOS_CAPABILITY found */ + +- pFrame = (PFRAME_802_11) Msg; ++ pFrame = (struct rt_frame_802_11 *) Msg; + + /* get subtype from header */ + SubType = (u8)pFrame->Hdr.FC.SubType; +@@ -320,7 +320,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + else + *pBssType = BSS_ADHOC; + +- pEid = (PEID_STRUCT) Ptr; ++ pEid = (struct rt_eid *) Ptr; + + /* get variable fields from payload and advance the pointer */ + while ((Length + 2 + pEid->Len) <= MsgLen) { +@@ -374,7 +374,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension.!! */ + { + NdisMoveMemory(pHtCapability, pEid->Octet, +- sizeof(HT_CAPABILITY_IE)); ++ sizeof(struct rt_ht_capability_ie)); + *pHtCapabilityLen = SIZE_HT_CAP_IE; /* Nnow we only support 26 bytes. */ + + *(u16 *) (&pHtCapability->HtCapInfo) = +@@ -401,11 +401,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + + break; + case IE_ADD_HT: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { ++ if (pEid->Len >= sizeof(struct rt_add_ht_info_ie)) { + /* This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only */ +- /* copy first sizeof(ADD_HT_INFO_IE) */ ++ /* copy first sizeof(struct rt_add_ht_info_ie) */ + NdisMoveMemory(AddHtInfo, pEid->Octet, +- sizeof(ADD_HT_INFO_IE)); ++ sizeof(struct rt_add_ht_info_ie)); + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; + + CtrlChannel = AddHtInfo->ControlChan; +@@ -516,14 +516,14 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 30)) + { + { +- NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(HT_CAPABILITY_IE)); ++ NdisMoveMemory(pHtCapability, &pEid->Octet[4], sizeof(struct rt_ht_capability_ie)); + *pHtCapabilityLen = SIZE_HT_CAP_IE; // Nnow we only support 26 bytes. + } + } + if ((pEid->Octet[3] == OUI_BROADCOM_HT) && (pEid->Len >= 26)) + { + { +- NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(ADD_HT_INFO_IE)); ++ NdisMoveMemory(AddHtInfo, &pEid->Octet[4], sizeof(struct rt_add_ht_info_ie)); + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; // Nnow we only support 26 bytes. + } + } +@@ -552,7 +552,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + NdisMoveMemory(pHtCapability, + &pEid->Octet[4], + sizeof +- (HT_CAPABILITY_IE)); ++ (struct rt_ht_capability_ie)); + *pPreNHtCapabilityLen = SIZE_HT_CAP_IE; + } + +@@ -560,7 +560,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + && (pEid->Len >= 26)) { + NdisMoveMemory(AddHtInfo, + &pEid->Octet[4], +- sizeof(ADD_HT_INFO_IE)); ++ sizeof(struct rt_add_ht_info_ie)); + *AddHtInfoLen = SIZE_ADD_HT_INFO_IE; + } + } else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4)) { +@@ -696,7 +696,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + } + + Length = Length + 2 + pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ +- pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); ++ pEid = (struct rt_eid *) ((u8 *) pEid + 2 + pEid->Len); + } + + /* For some 11a AP. it did not have the channel EID, patch here */ +@@ -730,16 +730,16 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, void * Msg, unsigned l + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeScanReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 * pBssType, + char Ssid[], + u8 * pSsidLen, u8 * pScanType) + { +- MLME_SCAN_REQ_STRUCT *Info; ++ struct rt_mlme_scan_req *Info; + +- Info = (MLME_SCAN_REQ_STRUCT *) (Msg); ++ Info = (struct rt_mlme_scan_req *)(Msg); + *pBssType = Info->BssType; + *pSsidLen = Info->SsidLen; + NdisMoveMemory(Ssid, Info->Ssid, *pSsidLen); +@@ -757,7 +757,7 @@ BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-u8 ChannelSanity(IN PRTMP_ADAPTER pAd, u8 channel) ++u8 ChannelSanity(struct rt_rtmp_adapter *pAd, u8 channel) + { + int i; + +@@ -779,12 +779,12 @@ u8 ChannelSanity(IN PRTMP_ADAPTER pAd, u8 channel) + + ========================================================================== + */ +-BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDeauthSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, u16 * pReason) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) Msg; + + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); + NdisMoveMemory(pReason, &pFrame->Octet[0], 2); +@@ -803,7 +803,7 @@ BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAuthSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr, +@@ -811,7 +811,7 @@ BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, + u16 * pSeq, + u16 * pStatus, char * pChlgText) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) Msg; + + COPY_MAC_ADDR(pAddr, pFrame->Hdr.Addr2); + NdisMoveMemory(pAlg, &pFrame->Octet[0], 2); +@@ -853,15 +853,15 @@ BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAuthReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr, + unsigned long * pTimeout, u16 * pAlg) + { +- MLME_AUTH_REQ_STRUCT *pInfo; ++ struct rt_mlme_auth_req *pInfo; + +- pInfo = (MLME_AUTH_REQ_STRUCT *) Msg; ++ pInfo = (struct rt_mlme_auth_req *)Msg; + COPY_MAC_ADDR(pAddr, pInfo->Addr); + *pTimeout = pInfo->Timeout; + *pAlg = pInfo->Alg; +@@ -887,16 +887,16 @@ BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAssocReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pApAddr, + u16 * pCapabilityInfo, + unsigned long * pTimeout, u16 * pListenIntv) + { +- MLME_ASSOC_REQ_STRUCT *pInfo; ++ struct rt_mlme_assoc_req *pInfo; + +- pInfo = (MLME_ASSOC_REQ_STRUCT *) Msg; ++ pInfo = (struct rt_mlme_assoc_req *)Msg; + *pTimeout = pInfo->Timeout; /* timeout */ + COPY_MAC_ADDR(pApAddr, pInfo->Addr); /* AP address */ + *pCapabilityInfo = pInfo->CapabilityInfo; /* capability info */ +@@ -916,12 +916,12 @@ BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDisassocSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, u16 * pReason) + { +- PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) Msg; + + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); + NdisMoveMemory(pReason, &pFrame->Octet[0], 2); +@@ -946,7 +946,7 @@ BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) ++NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(struct rt_bss_entry *pBss) + { + NDIS_802_11_NETWORK_TYPE NetWorkType; + u8 rate, i; +@@ -1012,15 +1012,15 @@ NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss) + FALSE otherwise + ========================================================================== + */ +-BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, ++BOOLEAN PeerWpaMessageSanity(struct rt_rtmp_adapter *pAd, ++ struct rt_eapol_packet * pMsg, + unsigned long MsgLen, +- u8 MsgType, IN MAC_TABLE_ENTRY * pEntry) ++ u8 MsgType, struct rt_mac_table_entry *pEntry) + { + u8 mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE]; + BOOLEAN bReplayDiff = FALSE; + BOOLEAN bWPA2 = FALSE; +- KEY_INFO EapolKeyInfo; ++ struct rt_key_info EapolKeyInfo; + u8 GroupKeyIndex = 0; + + NdisZeroMemory(mic, sizeof(mic)); +@@ -1029,7 +1029,7 @@ BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, + NdisZeroMemory((u8 *)& EapolKeyInfo, sizeof(EapolKeyInfo)); + + NdisMoveMemory((u8 *)& EapolKeyInfo, +- (u8 *)& pMsg->KeyDesc.KeyInfo, sizeof(KEY_INFO)); ++ (u8 *)& pMsg->KeyDesc.KeyInfo, sizeof(struct rt_key_info)); + + *((u16 *) & EapolKeyInfo) = cpu2le16(*((u16 *) & EapolKeyInfo)); + +diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c +index 2d7f36a..f84194d 100644 +--- a/drivers/staging/rt2860/common/cmm_sync.c ++++ b/drivers/staging/rt2860/common/cmm_sync.c +@@ -105,13 +105,13 @@ u8 BaSizeArray[4] = { 8, 16, 32, 64 }; + + ========================================================================== + */ +-void BuildChannelList(IN PRTMP_ADAPTER pAd) ++void BuildChannelList(struct rt_rtmp_adapter *pAd) + { + u8 i, j, index = 0, num = 0; + u8 *pChannelList = NULL; + + NdisZeroMemory(pAd->ChannelList, +- MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER)); ++ MAX_NUM_OF_CHANNELS * sizeof(struct rt_channel_tx_power)); + + /* if not 11a-only mode, channel list starts from 2.4Ghz band */ + if ((pAd->CommonCfg.PhyMode != PHY_11A) +@@ -122,63 +122,63 @@ void BuildChannelList(IN PRTMP_ADAPTER pAd) + case REGION_0_BG_BAND: /* 1 -11 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_0_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_0_SIZE); + index += BG_BAND_REGION_0_SIZE; + break; + case REGION_1_BG_BAND: /* 1 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_1_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_1_SIZE); + index += BG_BAND_REGION_1_SIZE; + break; + case REGION_2_BG_BAND: /* 10 - 11 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_2_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_2_SIZE); + index += BG_BAND_REGION_2_SIZE; + break; + case REGION_3_BG_BAND: /* 10 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_3_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_3_SIZE); + index += BG_BAND_REGION_3_SIZE; + break; + case REGION_4_BG_BAND: /* 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_4_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_4_SIZE); + index += BG_BAND_REGION_4_SIZE; + break; + case REGION_5_BG_BAND: /* 1 - 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_5_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_5_SIZE); + index += BG_BAND_REGION_5_SIZE; + break; + case REGION_6_BG_BAND: /* 3 - 9 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_6_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_6_SIZE); + index += BG_BAND_REGION_6_SIZE; + break; + case REGION_7_BG_BAND: /* 5 - 13 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_7_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_7_SIZE); + index += BG_BAND_REGION_7_SIZE; + break; + case REGION_31_BG_BAND: /* 1 - 14 */ + NdisMoveMemory(&pAd->ChannelList[index], + &pAd->TxPower[BG_BAND_REGION_31_START], +- sizeof(CHANNEL_TX_POWER) * ++ sizeof(struct rt_channel_tx_power) * + BG_BAND_REGION_31_SIZE); + index += BG_BAND_REGION_31_SIZE; + break; +@@ -315,7 +315,7 @@ void BuildChannelList(IN PRTMP_ADAPTER pAd) + + i], + &pAd->TxPower[j], + sizeof +- (CHANNEL_TX_POWER)); ++ (struct rt_channel_tx_power)); + } + for (j = 0; j < 15; j++) { + if (pChannelList[i] == RadarCh[j]) +@@ -359,7 +359,7 @@ void BuildChannelList(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-u8 FirstChannel(IN PRTMP_ADAPTER pAd) ++u8 FirstChannel(struct rt_rtmp_adapter *pAd) + { + return pAd->ChannelList[0].Channel; + } +@@ -375,7 +375,7 @@ u8 FirstChannel(IN PRTMP_ADAPTER pAd) + return 0 if no more next channel + ========================================================================== + */ +-u8 NextChannel(IN PRTMP_ADAPTER pAd, u8 channel) ++u8 NextChannel(struct rt_rtmp_adapter *pAd, u8 channel) + { + int i; + u8 next_channel = 0; +@@ -408,7 +408,7 @@ u8 NextChannel(IN PRTMP_ADAPTER pAd, u8 channel) + the minimum value or next lower value. + ========================================================================== + */ +-void ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++void ChangeToCellPowerLimit(struct rt_rtmp_adapter *pAd, + u8 AironetCellPowerLimit) + { + /*valud 0xFF means that hasn't found power limit information */ +@@ -435,7 +435,7 @@ void ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, + + } + +-char ConvertToRssi(IN PRTMP_ADAPTER pAd, char Rssi, u8 RssiNumber) ++char ConvertToRssi(struct rt_rtmp_adapter *pAd, char Rssi, u8 RssiNumber) + { + u8 RssiOffset, LNAGain; + +@@ -469,15 +469,15 @@ char ConvertToRssi(IN PRTMP_ADAPTER pAd, char Rssi, u8 RssiNumber) + Scan next channel + ========================================================================== + */ +-void ScanNextChannel(IN PRTMP_ADAPTER pAd) ++void ScanNextChannel(struct rt_rtmp_adapter *pAd) + { +- HEADER_802_11 Hdr80211; ++ struct rt_header_802_11 Hdr80211; + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen = 0; + u8 SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0; + u16 Status; +- PHEADER_802_11 pHdr80211; ++ struct rt_header_802_11 * pHdr80211; + u32 ScanTimeIn5gChannel = SHORT_CHANNEL_TIME; + + { +@@ -522,7 +522,7 @@ void ScanNextChannel(IN PRTMP_ADAPTER pAd) + MlmeAllocateMemory(pAd, + (void *)& pOutBuffer); + if (NStatus == NDIS_STATUS_SUCCESS) { +- pHdr80211 = (PHEADER_802_11) pOutBuffer; ++ pHdr80211 = (struct rt_header_802_11 *) pOutBuffer; + MgtMacHeaderInit(pAd, pHdr80211, + SUBTYPE_NULL_FUNC, 1, + pAd->CommonCfg.Bssid, +@@ -535,7 +535,7 @@ void ScanNextChannel(IN PRTMP_ADAPTER pAd) + /* Send using priority queue */ + MiniportMMRequest(pAd, 0, pOutBuffer, + sizeof +- (HEADER_802_11)); ++ (struct rt_header_802_11)); + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeScanReqAction -- Send PSM Data frame\n")); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -642,7 +642,7 @@ void ScanNextChannel(IN PRTMP_ADAPTER pAd) + MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, + BROADCAST_ADDR, BROADCAST_ADDR); + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, 1, ++ sizeof(struct rt_header_802_11), &Hdr80211, 1, + &SsidIe, 1, &SsidLen, SsidLen, + pAd->MlmeAux.Ssid, 1, &SupRateIe, 1, + &pAd->CommonCfg.SupRateLen, +@@ -700,12 +700,12 @@ void ScanNextChannel(IN PRTMP_ADAPTER pAd) + } + } + +-void MgtProbReqMacHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, ++void MgtProbReqMacHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u8 SubType, + u8 ToDs, u8 *pDA, u8 *pBssid) + { +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); ++ NdisZeroMemory(pHdr80211, sizeof(struct rt_header_802_11)); + + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SubType; +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index 0ac9d74..7a2a48e 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -115,7 +115,7 @@ u32 Tkip_Sbox_Upper[256] = { + /* */ + /* Expanded IV for TKIP function. */ + /* */ +-typedef struct PACKED _IV_CONTROL_ { ++struct PACKED rt_tkip_iv { + union PACKED { + struct PACKED { + u8 rc0; +@@ -136,7 +136,7 @@ typedef struct PACKED _IV_CONTROL_ { + } IV16; + + unsigned long IV32; +-} TKIP_IV, *PTKIP_IV; ++}; + + /* + ======================================================================== +@@ -214,7 +214,7 @@ void RTMPTkipPutUInt32(IN u8 *pDst, unsigned long val) + + ======================================================================== + */ +-void RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, u8 *pMICKey) ++void RTMPTkipSetMICKey(struct rt_tkip_key_info *pTkip, u8 *pMICKey) + { + /* Set the key */ + pTkip->K0 = RTMPTkipGetUInt32(pMICKey); +@@ -245,7 +245,7 @@ void RTMPTkipSetMICKey(IN PTKIP_KEY_INFO pTkip, u8 *pMICKey) + + ======================================================================== + */ +-void RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, u8 uChar) ++void RTMPTkipAppendByte(struct rt_tkip_key_info *pTkip, u8 uChar) + { + /* Append the byte to our word-sized buffer */ + pTkip->M |= (uChar << (8 * pTkip->nBytesInM)); +@@ -289,7 +289,7 @@ void RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, u8 uChar) + + ======================================================================== + */ +-void RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, u8 *pSrc, u32 nBytes) ++void RTMPTkipAppend(struct rt_tkip_key_info *pTkip, u8 *pSrc, u32 nBytes) + { + /* This is simple */ + while (nBytes > 0) { +@@ -316,7 +316,7 @@ void RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, u8 *pSrc, u32 nBytes) + the MIC Value is store in pAd->PrivateInfo.MIC + ======================================================================== + */ +-void RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) ++void RTMPTkipGetMIC(struct rt_tkip_key_info *pTkip) + { + /* Append the minimum padding */ + RTMPTkipAppendByte(pTkip, 0x5a); +@@ -355,17 +355,17 @@ void RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip) + + ======================================================================== + */ +-void RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitTkipEngine(struct rt_rtmp_adapter *pAd, + u8 *pKey, + u8 KeyId, + u8 *pTA, + u8 *pMICKey, + u8 *pTSC, unsigned long *pIV16, unsigned long *pIV32) + { +- TKIP_IV tkipIv; ++ struct rt_tkip_iv tkipIv; + + /* Prepare 8 bytes TKIP encapsulation for MPDU */ +- NdisZeroMemory(&tkipIv, sizeof(TKIP_IV)); ++ NdisZeroMemory(&tkipIv, sizeof(struct rt_tkip_iv)); + tkipIv.IV16.field.rc0 = *(pTSC + 1); + tkipIv.IV16.field.rc1 = (tkipIv.IV16.field.rc0 | 0x20) & 0x7f; + tkipIv.IV16.field.rc2 = *pTSC; +@@ -399,7 +399,7 @@ void RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitMICEngine(struct rt_rtmp_adapter *pAd, + u8 *pKey, + u8 *pDA, + u8 *pSA, u8 UserPriority, u8 *pMICKey) +@@ -440,7 +440,7 @@ void RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPTkipCompareMICValue(struct rt_rtmp_adapter *pAd, + u8 *pSrc, + u8 *pDA, + u8 *pSA, +@@ -500,12 +500,12 @@ BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++void RTMPCalculateMICValue(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pEncap, +- IN PCIPHER_KEY pKey, u8 apidx) ++ struct rt_cipher_key *pKey, u8 apidx) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u8 *pSrcBufVA; + u32 SrcBufLen; + u8 *pSrc; +@@ -698,10 +698,10 @@ void RTMPTkipMixKey(u8 * key, u8 * ta, unsigned long pnl, /* Least significant 1 + /* TRUE: Success! */ + /* FALSE: Decrypt Error! */ + /* */ +-BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptTKIP(struct rt_rtmp_adapter *pAd, + u8 *pData, + unsigned long DataByteCnt, +- u8 UserPriority, IN PCIPHER_KEY pWpaKey) ++ u8 UserPriority, struct rt_cipher_key *pWpaKey) + { + u8 KeyID; + u32 HeaderLen; +@@ -726,7 +726,7 @@ BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, + unsigned long pnh; /* Most significant 32 bits of PN */ + u32 num_blocks; + u32 payload_remainder; +- ARCFOURCONTEXT ArcFourContext; ++ struct rt_arcfourcontext ArcFourContext; + u32 crc32 = 0; + u32 trailfcs = 0; + u8 MIC[8]; +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +index 05a9214..c728355 100644 +--- a/drivers/staging/rt2860/common/cmm_wep.c ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -135,7 +135,7 @@ u8 WEPKEY[] = { + + ======================================================================== + */ +-void RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitWepEngine(struct rt_rtmp_adapter *pAd, + u8 *pKey, + u8 KeyId, u8 KeyLen, IN u8 *pDest) + { +@@ -184,7 +184,7 @@ void RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++void RTMPEncryptData(struct rt_rtmp_adapter *pAd, + u8 *pSrc, u8 *pDest, u32 Len) + { + pAd->PrivateInfo.FCSCRC32 = +@@ -211,9 +211,9 @@ void RTMPEncryptData(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptWEP(struct rt_rtmp_adapter *pAd, + u8 *pData, +- unsigned long DataByteCnt, IN PCIPHER_KEY pGroupKey) ++ unsigned long DataByteCnt, struct rt_cipher_key *pGroupKey) + { + u32 trailfcs; + u32 crc32; +@@ -255,10 +255,10 @@ BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, + ======================================================================== + + Routine Description: +- The Stream Cipher Encryption Algorithm "ARCFOUR" initialize ++ The Stream Cipher Encryption Algorithm "struct rt_arcfour" initialize + + Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ Ctx Pointer to struct rt_arcfour CONTEXT (SBOX) + pKey Pointer to the WEP KEY + KeyLen Indicate the length fo the WEP KEY + +@@ -271,7 +271,7 @@ BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, u8 *pKey, u32 KeyLen) ++void ARCFOUR_INIT(struct rt_arcfourcontext *Ctx, u8 *pKey, u32 KeyLen) + { + u8 t, u; + u32 keyindex; +@@ -301,19 +301,19 @@ void ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, u8 *pKey, u32 KeyLen) + ======================================================================== + + Routine Description: +- Get bytes from ARCFOUR CONTEXT (S-BOX) ++ Get bytes from struct rt_arcfour CONTEXT (S-BOX) + + Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ Ctx Pointer to struct rt_arcfour CONTEXT (SBOX) + + Return Value: +- u8 - the value of the ARCFOUR CONTEXT (S-BOX) ++ u8 - the value of the struct rt_arcfour CONTEXT (S-BOX) + + Note: + + ======================================================================== + */ +-u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) ++u8 ARCFOUR_BYTE(struct rt_arcfourcontext *Ctx) + { + u32 x; + u32 y; +@@ -341,7 +341,7 @@ u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) + The Stream Cipher Decryption Algorithm + + Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ Ctx Pointer to struct rt_arcfour CONTEXT (SBOX) + pDest Pointer to the Destination + pSrc Pointer to the Source data + Len Indicate the length of the Source data +@@ -353,7 +353,7 @@ u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx) + + ======================================================================== + */ +-void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++void ARCFOUR_DECRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len) + { + u32 i; +@@ -369,7 +369,7 @@ void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, + The Stream Cipher Encryption Algorithm + + Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ Ctx Pointer to struct rt_arcfour CONTEXT (SBOX) + pDest Pointer to the Destination + pSrc Pointer to the Source data + Len Indicate the length of the Source dta +@@ -383,7 +383,7 @@ void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, + + ======================================================================== + */ +-void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++void ARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len) + { + u32 i; +@@ -399,7 +399,7 @@ void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + The Stream Cipher Encryption Algorithm which conform to the special requirement to encrypt GTK. + + Arguments: +- Ctx Pointer to ARCFOUR CONTEXT (SBOX) ++ Ctx Pointer to struct rt_arcfour CONTEXT (SBOX) + pDest Pointer to the Destination + pSrc Pointer to the Source data + Len Indicate the length of the Source dta +@@ -407,7 +407,7 @@ void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, + ======================================================================== + */ + +-void WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++void WPAARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len) + { + u32 i; +@@ -463,7 +463,7 @@ u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len) + + ======================================================================== + */ +-void RTMPSetICV(IN PRTMP_ADAPTER pAd, u8 *pDest) ++void RTMPSetICV(struct rt_rtmp_adapter *pAd, u8 *pDest) + { + pAd->PrivateInfo.FCSCRC32 ^= 0xffffffff; /* complement */ + pAd->PrivateInfo.FCSCRC32 = cpu2le32(pAd->PrivateInfo.FCSCRC32); +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 6daccd9..7b51be0 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -54,30 +54,30 @@ u8 OUI_WPA2_8021X_AKM[4] = { 0x00, 0x0F, 0xAC, 0x01 }; + u8 OUI_WPA2_PSK_AKM[4] = { 0x00, 0x0F, 0xAC, 0x02 }; + u8 OUI_WPA2_WEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 }; + +-static void ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++static void ConstructEapolKeyData(struct rt_mac_table_entry *pEntry, + u8 GroupKeyWepStatus, + u8 keyDescVer, + u8 MsgType, + u8 DefaultKeyIdx, + u8 * GTK, + u8 * RSNIE, +- u8 RSNIE_LEN, OUT PEAPOL_PACKET pMsg); ++ u8 RSNIE_LEN, struct rt_eapol_packet * pMsg); + + static void CalculateMIC(u8 KeyDescVer, +- u8 * PTK, OUT PEAPOL_PACKET pMsg); ++ u8 * PTK, struct rt_eapol_packet * pMsg); + +-static void WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPPacketAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-static void WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPOLASFAlertAction(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem); + +-static void WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPOLLogoffAction(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem); + +-static void WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPOLStartAction(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem); + +-static void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++static void WpaEAPOLKeyAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + /* + ========================================================================== +@@ -87,8 +87,8 @@ static void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + S - pointer to the association state machine + ========================================================================== + */ +-void WpaStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) ++void WpaStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(S, (STATE_MACHINE_FUNC *) Trans, MAX_WPA_PTK_STATE, + MAX_WPA_MSG, (STATE_MACHINE_FUNC) Drop, WPA_PTK, +@@ -115,15 +115,15 @@ void WpaStateMachineInit(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-void WpaEAPPacketAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPPacketAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +-void WpaEAPOLASFAlertAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLASFAlertAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +-void WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLLogoffAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +@@ -134,14 +134,14 @@ void WpaEAPOLLogoffAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return: + ========================================================================== + */ +-void WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLStartAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; ++ struct rt_mac_table_entry *pEntry; ++ struct rt_header_802_11 * pHeader; + + DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLStartAction ===> \n")); + +- pHeader = (PHEADER_802_11) Elem->Msg; ++ pHeader = (struct rt_header_802_11 *) Elem->Msg; + + /*For normaol PSK, we enqueue an EAPOL-Start command to trigger the process. */ + if (Elem->MsgLen == 6) +@@ -187,23 +187,23 @@ void WpaEAPOLStartAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return: + ========================================================================== + */ +-void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaEAPOLKeyAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MAC_TABLE_ENTRY *pEntry; +- PHEADER_802_11 pHeader; +- PEAPOL_PACKET pEapol_packet; +- KEY_INFO peerKeyInfo; ++ struct rt_mac_table_entry *pEntry; ++ struct rt_header_802_11 * pHeader; ++ struct rt_eapol_packet * pEapol_packet; ++ struct rt_key_info peerKeyInfo; + + DBGPRINT(RT_DEBUG_TRACE, ("WpaEAPOLKeyAction ===>\n")); + +- pHeader = (PHEADER_802_11) Elem->Msg; ++ pHeader = (struct rt_header_802_11 *) Elem->Msg; + pEapol_packet = +- (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + + NdisZeroMemory((u8 *)& peerKeyInfo, sizeof(peerKeyInfo)); + NdisMoveMemory((u8 *)& peerKeyInfo, + (u8 *)& pEapol_packet->KeyDesc.KeyInfo, +- sizeof(KEY_INFO)); ++ sizeof(struct rt_key_info)); + + hex_dump("Received Eapol frame", (unsigned char *)pEapol_packet, + (Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H)); +@@ -357,8 +357,8 @@ void WpaEAPOLKeyAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ======================================================================== + */ +-void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++void RTMPToWirelessSta(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, u32 DataLen, IN BOOLEAN bClearFrame) +@@ -433,11 +433,11 @@ void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, unsigned long TimeInterval) ++void WPAStart4WayHS(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, unsigned long TimeInterval) + { + u8 Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; ++ struct rt_eapol_packet EAPOLPKT; + u8 *pBssid = NULL; + u8 group_cipher = Ndis802_11WEPDisabled; + +@@ -472,7 +472,7 @@ void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + + /* Construct EAPoL message - Pairwise Msg 1 */ + /* EAPOL-Key(0,0,1,0,P,0,0,ANonce,0,DataKD_M1) */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_1, 0, /* Default key index */ + pEntry->ANonce, NULL, /* TxRSC */ + NULL, /* GTK */ +@@ -516,14 +516,14 @@ void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) ++void PeerPairMsg1Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem) + { + u8 PTK[80]; + u8 Header802_3[14]; +- PEAPOL_PACKET pMsg1; ++ struct rt_eapol_packet * pMsg1; + u32 MsgLen; +- EAPOL_PACKET EAPOLPKT; ++ struct rt_eapol_packet EAPOLPKT; + u8 *pCurrentAddr = NULL; + u8 *pmk_ptr = NULL; + u8 group_cipher = Ndis802_11WEPDisabled; +@@ -537,7 +537,7 @@ void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + + if (Elem->MsgLen < + (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + +- sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ sizeof(struct rt_key_descripter) - MAX_LEN_OF_RSNIE - 2)) + return; + + { +@@ -549,7 +549,7 @@ void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + } + + /* Store the received frame */ +- pMsg1 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pMsg1 = (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + /* Sanity Check peer Pairwise message 1 - Replay Counter */ +@@ -585,7 +585,7 @@ void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + + /* Construct EAPoL message - Pairwise Msg 2 */ + /* EAPOL-Key(0,1,0,0,P,0,0,SNonce,MIC,DataKD_M2) */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_2, 0, /* DefaultKeyIdx */ + pEntry->SNonce, NULL, /* TxRsc */ + NULL, /* GTK */ +@@ -609,14 +609,14 @@ void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) ++void PeerPairMsg2Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem) + { + u8 PTK[80]; + BOOLEAN Cancelled; +- PHEADER_802_11 pHeader; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg2; ++ struct rt_header_802_11 * pHeader; ++ struct rt_eapol_packet EAPOLPKT; ++ struct rt_eapol_packet * pMsg2; + u32 MsgLen; + u8 Header802_3[LENGTH_802_3]; + u8 TxTsc[6]; +@@ -635,7 +635,7 @@ void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + + if (Elem->MsgLen < + (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + +- sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ sizeof(struct rt_key_descripter) - MAX_LEN_OF_RSNIE - 2)) + return; + + /* check Entry in valid State */ +@@ -643,10 +643,10 @@ void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + return; + + /* pointer to 802.11 header */ +- pHeader = (PHEADER_802_11) Elem->Msg; ++ pHeader = (struct rt_header_802_11 *) Elem->Msg; + + /* skip 802.11_header(24-byte) and LLC_header(8) */ +- pMsg2 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pMsg2 = (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + /* Store SNonce */ +@@ -678,7 +678,7 @@ void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + + /* Construct EAPoL message - Pairwise Msg 3 */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, + group_cipher, + EAPOL_PAIR_MSG_3, +@@ -724,13 +724,13 @@ void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) ++void PeerPairMsg3Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem) + { +- PHEADER_802_11 pHeader; ++ struct rt_header_802_11 * pHeader; + u8 Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pMsg3; ++ struct rt_eapol_packet EAPOLPKT; ++ struct rt_eapol_packet * pMsg3; + u32 MsgLen; + u8 *pCurrentAddr = NULL; + u8 group_cipher = Ndis802_11WEPDisabled; +@@ -742,7 +742,7 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + + if (Elem->MsgLen < + (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + +- sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ sizeof(struct rt_key_descripter) - MAX_LEN_OF_RSNIE - 2)) + return; + + { +@@ -752,8 +752,8 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + } + + /* Record 802.11 header & the received EAPOL packet Msg3 */ +- pHeader = (PHEADER_802_11) Elem->Msg; +- pMsg3 = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pHeader = (struct rt_header_802_11 *) Elem->Msg; ++ pMsg3 = (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + /* Sanity Check peer Pairwise message 3 - Replay Counter, MIC, RSNIE */ +@@ -771,7 +771,7 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + return; + } + /* Construct EAPoL message - Pairwise Msg 4 */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, group_cipher, EAPOL_PAIR_MSG_4, 0, /* group key index not used in message 4 */ + NULL, /* Nonce not used in message 4 */ + NULL, /* TxRSC not used in message 4 */ +@@ -784,14 +784,14 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + + /* Update pairwise key */ + { +- PCIPHER_KEY pSharedKey; ++ struct rt_cipher_key *pSharedKey; + + pSharedKey = &pAd->SharedKey[BSS0][0]; + + NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); + + /* Prepare pair-wise key information into shared key table */ +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ NdisZeroMemory(pSharedKey, sizeof(struct rt_cipher_key)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], + LEN_TKIP_EK); +@@ -809,7 +809,7 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + else + pSharedKey->CipherAlg = CIPHER_NONE; + +- /* Update these related information to MAC_TABLE_ENTRY */ ++ /* Update these related information to struct rt_mac_table_entry */ + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], + LEN_TKIP_EK); +@@ -871,11 +871,11 @@ void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) ++void PeerPairMsg4Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem) + { +- PEAPOL_PACKET pMsg4; +- PHEADER_802_11 pHeader; ++ struct rt_eapol_packet * pMsg4; ++ struct rt_header_802_11 * pHeader; + u32 MsgLen; + BOOLEAN Cancelled; + u8 group_cipher = Ndis802_11WEPDisabled; +@@ -888,18 +888,18 @@ void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + + if (Elem->MsgLen < + (LENGTH_802_11 + LENGTH_802_1_H + LENGTH_EAPOL_H + +- sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE - 2)) ++ sizeof(struct rt_key_descripter) - MAX_LEN_OF_RSNIE - 2)) + break; + + if (pEntry->WpaState < AS_PTKINIT_NEGOTIATING) + break; + + /* pointer to 802.11 header */ +- pHeader = (PHEADER_802_11) Elem->Msg; ++ pHeader = (struct rt_header_802_11 *) Elem->Msg; + + /* skip 802.11_header(24-byte) and LLC_header(8) */ + pMsg4 = +- (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + /* Sanity Check peer Pairwise message 4 - Replay Counter, MIC */ +@@ -908,7 +908,7 @@ void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + break; + + /* 3. uses the MLME.SETKEYS.request to configure PTK into MAC */ +- NdisZeroMemory(&pEntry->PairwiseKey, sizeof(CIPHER_KEY)); ++ NdisZeroMemory(&pEntry->PairwiseKey, sizeof(struct rt_cipher_key)); + + /* reset IVEIV in Asic */ + AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, 1, 0); +@@ -990,11 +990,11 @@ void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) ++void WPAStart2WayGroupHS(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry) + { + u8 Header802_3[14]; + u8 TxTsc[6]; +- EAPOL_PACKET EAPOLPKT; ++ struct rt_eapol_packet EAPOLPKT; + u8 group_cipher = Ndis802_11WEPDisabled; + u8 default_key = 0; + u8 *gnonce_ptr = NULL; +@@ -1011,7 +1011,7 @@ void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + ADD_ONE_To_64BIT_VAR(pEntry->R_Counter); + + /* Construct EAPoL message - Group Msg 1 */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, + group_cipher, + EAPOL_GROUP_MSG_1, +@@ -1052,12 +1052,12 @@ void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry) + + ======================================================================== + */ +-void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem) ++void PeerGroupMsg1Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem) + { + u8 Header802_3[14]; +- EAPOL_PACKET EAPOLPKT; +- PEAPOL_PACKET pGroup; ++ struct rt_eapol_packet EAPOLPKT; ++ struct rt_eapol_packet * pGroup; + u32 MsgLen; + BOOLEAN Cancelled; + u8 default_key = 0; +@@ -1076,7 +1076,7 @@ void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + } + + /* Process Group Message 1 frame. skip 802.11 header(24) & LLC_SNAP header(8) */ +- pGroup = (PEAPOL_PACKET) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; ++ pGroup = (struct rt_eapol_packet *) & Elem->Msg[LENGTH_802_11 + LENGTH_802_1_H]; + MsgLen = Elem->MsgLen - LENGTH_802_11 - LENGTH_802_1_H; + + /* Sanity Check peer group message 1 - Replay Counter, MIC, RSNIE */ +@@ -1092,7 +1092,7 @@ void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + LEN_KEY_DESC_REPLAY); + + /* Construct EAPoL message - Group Msg 2 */ +- NdisZeroMemory(&EAPOLPKT, sizeof(EAPOL_PACKET)); ++ NdisZeroMemory(&EAPOLPKT, sizeof(struct rt_eapol_packet)); + ConstructEapolMsg(pEntry, group_cipher, EAPOL_GROUP_MSG_2, default_key, NULL, /* Nonce not used */ + NULL, /* TxRSC not used */ + NULL, /* GTK not used */ +@@ -1131,14 +1131,14 @@ void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, + Return: + ========================================================================== + */ +-void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, ++void PeerGroupMsg2Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + void * Msg, u32 MsgLen) + { + u32 Len; + u8 *pData; + BOOLEAN Cancelled; +- PEAPOL_PACKET pMsg2; ++ struct rt_eapol_packet * pMsg2; + u8 group_cipher = Ndis802_11WEPDisabled; + + DBGPRINT(RT_DEBUG_TRACE, ("===> PeerGroupMsg2Action \n")); +@@ -1148,7 +1148,7 @@ void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + break; + + if (MsgLen < +- (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(KEY_DESCRIPTER) - ++ (LENGTH_802_1_H + LENGTH_EAPOL_H + sizeof(struct rt_key_descripter) - + MAX_LEN_OF_RSNIE - 2)) + break; + +@@ -1156,7 +1156,7 @@ void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, + break; + + pData = (u8 *)Msg; +- pMsg2 = (PEAPOL_PACKET) (pData + LENGTH_802_1_H); ++ pMsg2 = (struct rt_eapol_packet *) (pData + LENGTH_802_1_H); + Len = MsgLen - LENGTH_802_1_H; + + /* Sanity Check peer group message 2 - Replay Counter, MIC */ +@@ -1399,7 +1399,7 @@ int PasswordHash(char *password, u8 *ssid, int ssidlength, u8 *output) + + ======================================================================== + */ +-void WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++void WpaDerivePTK(struct rt_rtmp_adapter *pAd, + u8 * PMK, + u8 * ANonce, + u8 * AA, +@@ -1478,7 +1478,7 @@ void WpaDerivePTK(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void GenRandom(IN PRTMP_ADAPTER pAd, u8 * macAddr, u8 * random) ++void GenRandom(struct rt_rtmp_adapter *pAd, u8 * macAddr, u8 * random) + { + int i, curr; + u8 local[80], KeyCounter[32]; +@@ -1537,7 +1537,7 @@ void GenRandom(IN PRTMP_ADAPTER pAd, u8 * macAddr, u8 * random) + + ======================================================================== + */ +-static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, ++static void RTMPMakeRsnIeCipher(struct rt_rtmp_adapter *pAd, + u8 ElementID, + u32 WepStatus, + IN BOOLEAN bMixCipher, +@@ -1550,7 +1550,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + + /* decide WPA2 or WPA1 */ + if (ElementID == Wpa2Ie) { +- RSNIE2 *pRsnie_cipher = (RSNIE2 *) pRsnIe; ++ struct rt_rsnie2 *pRsnie_cipher = (struct rt_rsnie2 *)pRsnIe; + + /* Assign the verson as 1 */ + pRsnie_cipher->version = 1; +@@ -1562,7 +1562,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + pRsnie_cipher->ucount = 1; + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA2_TKIP, 4); +- *rsn_len = sizeof(RSNIE2); ++ *rsn_len = sizeof(struct rt_rsnie2); + break; + + /* AES mode */ +@@ -1576,7 +1576,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + pRsnie_cipher->ucount = 1; + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA2_CCMP, 4); +- *rsn_len = sizeof(RSNIE2); ++ *rsn_len = sizeof(struct rt_rsnie2); + break; + + /* TKIP-AES mix mode */ +@@ -1602,7 +1602,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + } + + pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE2) + (4 * (PairwiseCnt - 1)); ++ *rsn_len = sizeof(struct rt_rsnie2) + (4 * (PairwiseCnt - 1)); + break; + } + +@@ -1625,7 +1625,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version); + pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount); + } else { +- RSNIE *pRsnie_cipher = (RSNIE *) pRsnIe; ++ struct rt_rsnie *pRsnie_cipher = (struct rt_rsnie *)pRsnIe; + + /* Assign OUI and version */ + NdisMoveMemory(pRsnie_cipher->oui, OUI_WPA_VERSION, 4); +@@ -1638,7 +1638,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + pRsnie_cipher->ucount = 1; + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA_TKIP, 4); +- *rsn_len = sizeof(RSNIE); ++ *rsn_len = sizeof(struct rt_rsnie); + break; + + /* AES mode */ +@@ -1652,7 +1652,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + pRsnie_cipher->ucount = 1; + NdisMoveMemory(pRsnie_cipher->ucast[0].oui, + OUI_WPA_CCMP, 4); +- *rsn_len = sizeof(RSNIE); ++ *rsn_len = sizeof(struct rt_rsnie); + break; + + /* TKIP-AES mix mode */ +@@ -1678,7 +1678,7 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + } + + pRsnie_cipher->ucount = PairwiseCnt; +- *rsn_len = sizeof(RSNIE) + (4 * (PairwiseCnt - 1)); ++ *rsn_len = sizeof(struct rt_rsnie) + (4 * (PairwiseCnt - 1)); + break; + } + +@@ -1722,16 +1722,16 @@ static void RTMPMakeRsnIeCipher(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static void RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, ++static void RTMPMakeRsnIeAKM(struct rt_rtmp_adapter *pAd, + u8 ElementID, + u32 AuthMode, + u8 apidx, + u8 *pRsnIe, u8 * rsn_len) + { +- RSNIE_AUTH *pRsnie_auth; ++ struct rt_rsnie_auth *pRsnie_auth; + u8 AkmCnt = 1; /* default as 1 */ + +- pRsnie_auth = (RSNIE_AUTH *) (pRsnIe + (*rsn_len)); ++ pRsnie_auth = (struct rt_rsnie_auth *) (pRsnIe + (*rsn_len)); + + /* decide WPA2 or WPA1 */ + if (ElementID == Wpa2Ie) { +@@ -1781,7 +1781,7 @@ static void RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, + pRsnie_auth->acount = cpu2le16(pRsnie_auth->acount); + + /* update current RSNIE length */ +- (*rsn_len) += (sizeof(RSNIE_AUTH) + (4 * (AkmCnt - 1))); ++ (*rsn_len) += (sizeof(struct rt_rsnie_auth) + (4 * (AkmCnt - 1))); + + } + +@@ -1803,7 +1803,7 @@ static void RTMPMakeRsnIeAKM(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static void RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, ++static void RTMPMakeRsnIeCap(struct rt_rtmp_adapter *pAd, + u8 ElementID, + u8 apidx, + u8 *pRsnIe, u8 * rsn_len) +@@ -1840,7 +1840,7 @@ static void RTMPMakeRsnIeCap(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++void RTMPMakeRSNIE(struct rt_rtmp_adapter *pAd, + u32 AuthMode, u32 WepStatus, u8 apidx) + { + u8 *pRsnIe = NULL; /* primary RSNIE */ +@@ -1932,8 +1932,8 @@ void RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, + FALSE - otherwise + ========================================================================== + */ +-BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++BOOLEAN RTMPCheckWPAframe(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 *pData, + unsigned long DataByteCount, u8 FromWhichBSSID) + { +@@ -2044,22 +2044,22 @@ char *GetEapolMsgType(char msg) + + ======================================================================== + */ +-BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPCheckRSNIE(struct rt_rtmp_adapter *pAd, + u8 *pData, + u8 DataLen, +- IN MAC_TABLE_ENTRY * pEntry, u8 * Offset) ++ struct rt_mac_table_entry *pEntry, u8 * Offset) + { + u8 *pVIE; + u8 len; +- PEID_STRUCT pEid; ++ struct rt_eid * pEid; + BOOLEAN result = FALSE; + + pVIE = pData; + len = DataLen; + *Offset = 0; + +- while (len > sizeof(RSNIE2)) { +- pEid = (PEID_STRUCT) pVIE; ++ while (len > sizeof(struct rt_rsnie2)) { ++ pEid = (struct rt_eid *) pVIE; + /* WPA RSN IE */ + if ((pEid->Eid == IE_WPA) + && (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))) { +@@ -2118,14 +2118,14 @@ BOOLEAN RTMPCheckRSNIE(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPParseEapolKeyData(struct rt_rtmp_adapter *pAd, + u8 *pKeyData, + u8 KeyDataLen, + u8 GroupKeyIndex, + u8 MsgType, +- IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry) ++ IN BOOLEAN bWPA2, struct rt_mac_table_entry *pEntry) + { +- PKDE_ENCAP pKDE = NULL; ++ struct rt_kde_encap * pKDE = NULL; + u8 *pMyKeyData = pKeyData; + u8 KeyDataLength = KeyDataLen; + u8 GTKLEN = 0; +@@ -2177,7 +2177,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + && (MsgType == EAPOL_PAIR_MSG_3 || MsgType == EAPOL_GROUP_MSG_1)) { + if (KeyDataLength >= 8) /* KDE format exclude GTK length */ + { +- pKDE = (PKDE_ENCAP) pMyKeyData; ++ pKDE = (struct rt_kde_encap *) pMyKeyData; + + DefaultIdx = pKDE->GTKEncap.Kid; + +@@ -2224,7 +2224,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + } + + { +- PCIPHER_KEY pSharedKey; ++ struct rt_cipher_key *pSharedKey; + + /* set key material, TxMic and RxMic */ + NdisMoveMemory(pAd->StaCfg.GTK, pMyKeyData, 32); +@@ -2233,7 +2233,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; + + /* Prepare pair-wise key information into shared key table */ +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ NdisZeroMemory(pSharedKey, sizeof(struct rt_cipher_key)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); + NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], +@@ -2320,7 +2320,7 @@ BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++void ConstructEapolMsg(struct rt_mac_table_entry *pEntry, + u8 GroupKeyWepStatus, + u8 MsgType, + u8 DefaultKeyIdx, +@@ -2328,7 +2328,7 @@ void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + u8 * TxRSC, + u8 * GTK, + u8 * RSNIE, +- u8 RSNIE_Len, OUT PEAPOL_PACKET pMsg) ++ u8 RSNIE_Len, struct rt_eapol_packet * pMsg) + { + BOOLEAN bWPA2 = FALSE; + u8 KeyDescVer; +@@ -2483,20 +2483,20 @@ void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + + ======================================================================== + */ +-void ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, ++void ConstructEapolKeyData(struct rt_mac_table_entry *pEntry, + u8 GroupKeyWepStatus, + u8 keyDescVer, + u8 MsgType, + u8 DefaultKeyIdx, + u8 * GTK, + u8 * RSNIE, +- u8 RSNIE_LEN, OUT PEAPOL_PACKET pMsg) ++ u8 RSNIE_LEN, struct rt_eapol_packet * pMsg) + { + u8 *mpool, *Key_Data, *Rc4GTK; + u8 ekey[(LEN_KEY_DESC_IV + LEN_EAP_EK)]; + unsigned long data_offset; + BOOLEAN bWPA2Capable = FALSE; +- PRTMP_ADAPTER pAd = pEntry->pAd; ++ struct rt_rtmp_adapter *pAd = pEntry->pAd; + BOOLEAN GTK_Included = FALSE; + + /* Choose WPA2 or not */ +@@ -2661,7 +2661,7 @@ void ConstructEapolKeyData(IN PMAC_TABLE_ENTRY pEntry, + ======================================================================== + */ + static void CalculateMIC(u8 KeyDescVer, +- u8 * PTK, OUT PEAPOL_PACKET pMsg) ++ u8 * PTK, struct rt_eapol_packet * pMsg) + { + u8 *OutBuffer; + unsigned long FrameLen = 0; +@@ -2714,12 +2714,12 @@ static void CalculateMIC(u8 KeyDescVer, + + ======================================================================== + */ +-int RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, ++int RTMPSoftDecryptBroadCastData(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, + IN NDIS_802_11_ENCRYPTION_STATUS +- GroupCipher, IN PCIPHER_KEY pShard_key) ++ GroupCipher, struct rt_cipher_key *pShard_key) + { +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ struct rt_rxwi * pRxWI = pRxBlk->pRxWI; + + /* handle WEP decryption */ + if (GroupCipher == Ndis802_11Encryption1Enabled) { +@@ -2777,15 +2777,15 @@ int RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, + u8 *GetSuiteFromRSNIE(u8 *rsnie, + u32 rsnie_len, u8 type, u8 * count) + { +- PEID_STRUCT pEid; ++ struct rt_eid * pEid; + int len; + u8 *pBuf; + int offset = 0; +- PRSNIE_AUTH pAkm; ++ struct rt_rsnie_auth *pAkm; + u16 acount; + BOOLEAN isWPA2 = FALSE; + +- pEid = (PEID_STRUCT) rsnie; ++ pEid = (struct rt_eid *) rsnie; + len = rsnie_len - 2; /* exclude IE and length */ + pBuf = (u8 *)& pEid->Octet[0]; + +@@ -2799,10 +2799,10 @@ u8 *GetSuiteFromRSNIE(u8 *rsnie, + } + /* Check WPA or WPA2 */ + if (pEid->Eid == IE_WPA) { +- PRSNIE pRsnie = (PRSNIE) pBuf; ++ struct rt_rsnie *pRsnie = (struct rt_rsnie *)pBuf; + u16 ucount; + +- if (len < sizeof(RSNIE)) { ++ if (len < sizeof(struct rt_rsnie)) { + DBGPRINT_ERR(("%s : The length is too short for WPA\n", + __func__)); + return NULL; +@@ -2827,15 +2827,15 @@ u8 *GetSuiteFromRSNIE(u8 *rsnie, + return pRsnie->ucast[0].oui; + } + +- offset = sizeof(RSNIE) + (4 * (ucount - 1)); ++ offset = sizeof(struct rt_rsnie) + (4 * (ucount - 1)); + + } else if (pEid->Eid == IE_RSN) { +- PRSNIE2 pRsnie = (PRSNIE2) pBuf; ++ struct rt_rsnie2 *pRsnie = (struct rt_rsnie2 *)pBuf; + u16 ucount; + + isWPA2 = TRUE; + +- if (len < sizeof(RSNIE2)) { ++ if (len < sizeof(struct rt_rsnie2)) { + DBGPRINT_ERR(("%s : The length is too short for WPA2\n", + __func__)); + return NULL; +@@ -2860,7 +2860,7 @@ u8 *GetSuiteFromRSNIE(u8 *rsnie, + return pRsnie->ucast[0].oui; + } + +- offset = sizeof(RSNIE2) + (4 * (ucount - 1)); ++ offset = sizeof(struct rt_rsnie2) + (4 * (ucount - 1)); + + } else { + DBGPRINT_ERR(("%s : Unknown IE (%d)\n", __func__, pEid->Eid)); +@@ -2871,13 +2871,13 @@ u8 *GetSuiteFromRSNIE(u8 *rsnie, + pBuf += offset; + len -= offset; + +- if (len < sizeof(RSNIE_AUTH)) { ++ if (len < sizeof(struct rt_rsnie_auth)) { + DBGPRINT_ERR(("%s : The length of RSNIE is too short\n", + __func__)); + return NULL; + } + /* pointer to AKM count */ +- pAkm = (PRSNIE_AUTH) pBuf; ++ pAkm = (struct rt_rsnie_auth *)pBuf; + + /* Get the count of pairwise cipher */ + acount = cpu2le16(pAkm->acount); +@@ -2893,7 +2893,7 @@ u8 *GetSuiteFromRSNIE(u8 *rsnie, + *count = acount; + return pAkm->auth[0].oui; + } +- offset = sizeof(RSNIE_AUTH) + (4 * (acount - 1)); ++ offset = sizeof(struct rt_rsnie_auth) + (4 * (acount - 1)); + + pBuf += offset; + len -= offset; +diff --git a/drivers/staging/rt2860/common/crypt_hmac.c b/drivers/staging/rt2860/common/crypt_hmac.c +index 6a086f9..d7ab08e 100644 +--- a/drivers/staging/rt2860/common/crypt_hmac.c ++++ b/drivers/staging/rt2860/common/crypt_hmac.c +@@ -51,14 +51,14 @@ void HMAC_SHA1(IN const u8 Key[], + IN const u8 Message[], + u32 MessageLen, u8 MAC[], u32 MACLen) + { +- SHA1_CTX_STRUC sha_ctx1; +- SHA1_CTX_STRUC sha_ctx2; ++ struct rt_sha1_ctx sha_ctx1; ++ struct rt_sha1_ctx sha_ctx2; + u8 K0[SHA1_BLOCK_SIZE]; + u8 Digest[SHA1_DIGEST_SIZE]; + u32 index; + +- NdisZeroMemory(&sha_ctx1, sizeof(SHA1_CTX_STRUC)); +- NdisZeroMemory(&sha_ctx2, sizeof(SHA1_CTX_STRUC)); ++ NdisZeroMemory(&sha_ctx1, sizeof(struct rt_sha1_ctx)); ++ NdisZeroMemory(&sha_ctx2, sizeof(struct rt_sha1_ctx)); + /* + * If the length of K = B(Block size): K0 = K. + * If the length of K > B: hash K to obtain an L byte string, +@@ -130,14 +130,14 @@ void HMAC_MD5(IN const u8 Key[], + IN const u8 Message[], + u32 MessageLen, u8 MAC[], u32 MACLen) + { +- MD5_CTX_STRUC md5_ctx1; +- MD5_CTX_STRUC md5_ctx2; ++ struct rt_md5_ctx_struc md5_ctx1; ++ struct rt_md5_ctx_struc md5_ctx2; + u8 K0[MD5_BLOCK_SIZE]; + u8 Digest[MD5_DIGEST_SIZE]; + u32 index; + +- NdisZeroMemory(&md5_ctx1, sizeof(MD5_CTX_STRUC)); +- NdisZeroMemory(&md5_ctx2, sizeof(MD5_CTX_STRUC)); ++ NdisZeroMemory(&md5_ctx1, sizeof(struct rt_md5_ctx_struc)); ++ NdisZeroMemory(&md5_ctx2, sizeof(struct rt_md5_ctx_struc)); + /* + * If the length of K = B(Block size): K0 = K. + * If the length of K > B: hash K to obtain an L byte string, +diff --git a/drivers/staging/rt2860/common/crypt_md5.c b/drivers/staging/rt2860/common/crypt_md5.c +index 433aaf2..6deab65 100644 +--- a/drivers/staging/rt2860/common/crypt_md5.c ++++ b/drivers/staging/rt2860/common/crypt_md5.c +@@ -79,7 +79,7 @@ Note: + None + ======================================================================== + */ +-void MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX) ++void MD5_Init(struct rt_md5_ctx_struc *pMD5_CTX) + { + NdisMoveMemory(pMD5_CTX->HashValue, MD5_DefaultHashValue, + sizeof(MD5_DefaultHashValue)); +@@ -103,7 +103,7 @@ Note: + T[i] := floor(abs(sin(i + 1)) * (2 pow 32)), i is number of round + ======================================================================== + */ +-void MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX) ++void MD5_Hash(struct rt_md5_ctx_struc *pMD5_CTX) + { + u32 X_i; + u32 X[16]; +@@ -227,7 +227,7 @@ Routine Description: + will be called. + + Arguments: +- pMD5_CTX Pointer to MD5_CTX_STRUC ++ pMD5_CTX Pointer to struct rt_md5_ctx_struc + message Message context + messageLen The length of message in bytes + +@@ -238,7 +238,7 @@ Note: + None + ======================================================================== + */ +-void MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++void MD5_Append(struct rt_md5_ctx_struc *pMD5_CTX, + IN const u8 Message[], u32 MessageLen) + { + u32 appendLen = 0; +@@ -271,7 +271,7 @@ Routine Description: + 3. Transform the Hash Value to digest message + + Arguments: +- pMD5_CTX Pointer to MD5_CTX_STRUC ++ pMD5_CTX Pointer to struct rt_md5_ctx_struc + + Return Value: + digestMessage Digest message +@@ -280,7 +280,7 @@ Note: + None + ======================================================================== + */ +-void MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, u8 DigestMessage[]) ++void MD5_End(struct rt_md5_ctx_struc *pMD5_CTX, u8 DigestMessage[]) + { + u32 index; + u64 message_length_bits; +@@ -326,9 +326,9 @@ Note: + void RT_MD5(IN const u8 Message[], + u32 MessageLen, u8 DigestMessage[]) + { +- MD5_CTX_STRUC md5_ctx; ++ struct rt_md5_ctx_struc md5_ctx; + +- NdisZeroMemory(&md5_ctx, sizeof(MD5_CTX_STRUC)); ++ NdisZeroMemory(&md5_ctx, sizeof(struct rt_md5_ctx_struc)); + MD5_Init(&md5_ctx); + MD5_Append(&md5_ctx, Message, MessageLen); + MD5_End(&md5_ctx, DigestMessage); +diff --git a/drivers/staging/rt2860/common/crypt_sha2.c b/drivers/staging/rt2860/common/crypt_sha2.c +index 9166ea0..fa83fb2 100644 +--- a/drivers/staging/rt2860/common/crypt_sha2.c ++++ b/drivers/staging/rt2860/common/crypt_sha2.c +@@ -52,10 +52,10 @@ static const u32 SHA1_DefaultHashValue[5] = { + /* + ======================================================================== + Routine Description: +- Initial SHA1_CTX_STRUC ++ Initial struct rt_sha1_ctx + + Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC ++ pSHA_CTX Pointer to struct rt_sha1_ctx + + Return Value: + None +@@ -64,7 +64,7 @@ Note: + None + ======================================================================== + */ +-void RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX) ++void RT_SHA1_Init(struct rt_sha1_ctx *pSHA_CTX) + { + NdisMoveMemory(pSHA_CTX->HashValue, SHA1_DefaultHashValue, + sizeof(SHA1_DefaultHashValue)); +@@ -79,7 +79,7 @@ Routine Description: + SHA1 computation for one block (512 bits) + + Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC ++ pSHA_CTX Pointer to struct rt_sha1_ctx + + Return Value: + None +@@ -88,7 +88,7 @@ Note: + None + ======================================================================== + */ +-void SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX) ++void SHA1_Hash(struct rt_sha1_ctx *pSHA_CTX) + { + u32 W_i, t, s; + u32 W[16]; +@@ -157,7 +157,7 @@ Routine Description: + will be called. + + Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC ++ pSHA_CTX Pointer to struct rt_sha1_ctx + message Message context + messageLen The length of message in bytes + +@@ -168,7 +168,7 @@ Note: + None + ======================================================================== + */ +-void SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++void SHA1_Append(struct rt_sha1_ctx *pSHA_CTX, + IN const u8 Message[], u32 MessageLen) + { + u32 appendLen = 0; +@@ -201,7 +201,7 @@ Routine Description: + 3. Transform the Hash Value to digest message + + Arguments: +- pSHA_CTX Pointer to SHA1_CTX_STRUC ++ pSHA_CTX Pointer to struct rt_sha1_ctx + + Return Value: + digestMessage Digest message +@@ -210,7 +210,7 @@ Note: + None + ======================================================================== + */ +-void SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, u8 DigestMessage[]) ++void SHA1_End(struct rt_sha1_ctx *pSHA_CTX, u8 DigestMessage[]) + { + u32 index; + u64 message_length_bits; +@@ -257,9 +257,9 @@ void RT_SHA1(IN const u8 Message[], + u32 MessageLen, u8 DigestMessage[]) + { + +- SHA1_CTX_STRUC sha_ctx; ++ struct rt_sha1_ctx sha_ctx; + +- NdisZeroMemory(&sha_ctx, sizeof(SHA1_CTX_STRUC)); ++ NdisZeroMemory(&sha_ctx, sizeof(struct rt_sha1_ctx)); + RT_SHA1_Init(&sha_ctx); + SHA1_Append(&sha_ctx, Message, MessageLen); + SHA1_End(&sha_ctx, DigestMessage); +diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c +index 8bee5cf..71cbb26 100644 +--- a/drivers/staging/rt2860/common/dfs.c ++++ b/drivers/staging/rt2860/common/dfs.c +@@ -52,7 +52,7 @@ + + ======================================================================== + */ +-BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, u8 Ch) ++BOOLEAN RadarChannelCheck(struct rt_rtmp_adapter *pAd, u8 Ch) + { + int i; + BOOLEAN result = FALSE; +diff --git a/drivers/staging/rt2860/common/ee_efuse.c b/drivers/staging/rt2860/common/ee_efuse.c +index b997151..03412f5 100644 +--- a/drivers/staging/rt2860/common/ee_efuse.c ++++ b/drivers/staging/rt2860/common/ee_efuse.c +@@ -73,7 +73,7 @@ typedef union _EFUSE_CTRL_STRUC { + + ======================================================================== + */ +-u8 eFuseReadRegisters(IN PRTMP_ADAPTER pAd, ++u8 eFuseReadRegisters(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 Length, u16 * pData) + { + EFUSE_CTRL_STRUC eFuseCtrlStruc; +@@ -149,7 +149,7 @@ u8 eFuseReadRegisters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++void eFusePhysicalReadRegisters(struct rt_rtmp_adapter *pAd, + u16 Offset, + u16 Length, u16 * pData) + { +@@ -214,7 +214,7 @@ void eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-static void eFuseReadPhysical(IN PRTMP_ADAPTER pAd, ++static void eFuseReadPhysical(struct rt_rtmp_adapter *pAd, + u16 *lpInBuffer, + unsigned long nInBufferSize, + u16 *lpOutBuffer, unsigned long nOutBufferSize) +@@ -244,7 +244,7 @@ static void eFuseReadPhysical(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, char *arg) ++int set_eFuseGetFreeBlockCount_Proc(struct rt_rtmp_adapter *pAd, char *arg) + { + u16 i; + u16 LogicalAddress; +@@ -268,7 +268,7 @@ int set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, char *arg) + return TRUE; + } + +-int set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, char *arg) ++int set_eFusedump_Proc(struct rt_rtmp_adapter *pAd, char *arg) + { + u16 InBuf[3]; + int i = 0; +@@ -287,14 +287,14 @@ int set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, char *arg) + return TRUE; + } + +-int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, ++int rtmp_ee_efuse_read16(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 * pValue) + { + eFuseReadRegisters(pAd, Offset, 2, pValue); + return (*pValue); + } + +-int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd) ++int RtmpEfuseSupportCheck(struct rt_rtmp_adapter *pAd) + { + u16 value; + +@@ -305,7 +305,7 @@ int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd) + return 0; + } + +-void eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, u32 *EfuseFreeBlock) ++void eFuseGetFreeBlockCount(struct rt_rtmp_adapter *pAd, u32 *EfuseFreeBlock) + { + u16 i; + u16 LogicalAddress; +@@ -331,7 +331,7 @@ void eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, u32 *EfuseFreeBlock) + ("eFuseGetFreeBlockCount is 0x%x\n", *EfuseFreeBlock)); + } + +-int eFuse_init(IN PRTMP_ADAPTER pAd) ++int eFuse_init(struct rt_rtmp_adapter *pAd) + { + u32 EfuseFreeBlock = 0; + DBGPRINT(RT_DEBUG_ERROR, +diff --git a/drivers/staging/rt2860/common/ee_prom.c b/drivers/staging/rt2860/common/ee_prom.c +index 8cd654c..2083740 100644 +--- a/drivers/staging/rt2860/common/ee_prom.c ++++ b/drivers/staging/rt2860/common/ee_prom.c +@@ -38,7 +38,7 @@ + #include "../rt_config.h" + + /* IRQL = PASSIVE_LEVEL */ +-static inline void RaiseClock(IN PRTMP_ADAPTER pAd, u32 * x) ++static inline void RaiseClock(struct rt_rtmp_adapter *pAd, u32 * x) + { + *x = *x | EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +@@ -46,7 +46,7 @@ static inline void RaiseClock(IN PRTMP_ADAPTER pAd, u32 * x) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline void LowerClock(IN PRTMP_ADAPTER pAd, u32 * x) ++static inline void LowerClock(struct rt_rtmp_adapter *pAd, u32 * x) + { + *x = *x & ~EESK; + RTMP_IO_WRITE32(pAd, E2PROM_CSR, *x); +@@ -54,7 +54,7 @@ static inline void LowerClock(IN PRTMP_ADAPTER pAd, u32 * x) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline u16 ShiftInBits(IN PRTMP_ADAPTER pAd) ++static inline u16 ShiftInBits(struct rt_rtmp_adapter *pAd) + { + u32 x, i; + u16 data = 0; +@@ -79,7 +79,7 @@ static inline u16 ShiftInBits(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline void ShiftOutBits(IN PRTMP_ADAPTER pAd, ++static inline void ShiftOutBits(struct rt_rtmp_adapter *pAd, + u16 data, u16 count) + { + u32 x, mask; +@@ -107,7 +107,7 @@ static inline void ShiftOutBits(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = PASSIVE_LEVEL */ +-static inline void EEpromCleanup(IN PRTMP_ADAPTER pAd) ++static inline void EEpromCleanup(struct rt_rtmp_adapter *pAd) + { + u32 x; + +@@ -120,7 +120,7 @@ static inline void EEpromCleanup(IN PRTMP_ADAPTER pAd) + LowerClock(pAd, &x); + } + +-static inline void EWEN(IN PRTMP_ADAPTER pAd) ++static inline void EWEN(struct rt_rtmp_adapter *pAd) + { + u32 x; + +@@ -141,7 +141,7 @@ static inline void EWEN(IN PRTMP_ADAPTER pAd) + EEpromCleanup(pAd); + } + +-static inline void EWDS(IN PRTMP_ADAPTER pAd) ++static inline void EWDS(struct rt_rtmp_adapter *pAd) + { + u32 x; + +@@ -163,7 +163,7 @@ static inline void EWDS(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = PASSIVE_LEVEL */ +-int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, ++int rtmp_ee_prom_read16(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 * pValue) + { + u32 x; +diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c +index 764de3a..9467007 100644 +--- a/drivers/staging/rt2860/common/eeprom.c ++++ b/drivers/staging/rt2860/common/eeprom.c +@@ -36,9 +36,9 @@ + */ + #include "../rt_config.h" + +-int RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, int infType) ++int RtmpChipOpsEepromHook(struct rt_rtmp_adapter *pAd, int infType) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT + u32 eFuseCtrl, MacCsr0; +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index fcf030b..8cd8f53 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -356,7 +356,7 @@ u8 ZeroSsid[32] = + + ========================================================================== + */ +-int MlmeInit(IN PRTMP_ADAPTER pAd) ++int MlmeInit(struct rt_rtmp_adapter *pAd) + { + int Status = NDIS_STATUS_SUCCESS; + +@@ -453,9 +453,9 @@ int MlmeInit(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void MlmeHandler(IN PRTMP_ADAPTER pAd) ++void MlmeHandler(struct rt_rtmp_adapter *pAd) + { +- MLME_QUEUE_ELEM *Elem = NULL; ++ struct rt_mlme_queue_elem *Elem = NULL; + + /* Only accept MLME and Frame from peer side, no other (control/data) frame should */ + /* get into this state machine */ +@@ -571,7 +571,7 @@ void MlmeHandler(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void MlmeHalt(IN PRTMP_ADAPTER pAd) ++void MlmeHalt(struct rt_rtmp_adapter *pAd) + { + BOOLEAN Cancelled; + +@@ -610,7 +610,7 @@ void MlmeHalt(IN PRTMP_ADAPTER pAd) + RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled); + + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + + /* Set LED */ + RTMPSetLED(pAd, LED_HALT); +@@ -639,7 +639,7 @@ void MlmeHalt(IN PRTMP_ADAPTER pAd) + DBGPRINT(RT_DEBUG_TRACE, ("<== MlmeHalt\n")); + } + +-void MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd) ++void MlmeResetRalinkCounters(struct rt_rtmp_adapter *pAd) + { + pAd->RalinkCounters.LastOneSecRxOkDataCnt = + pAd->RalinkCounters.OneSecRxOkDataCnt; +@@ -694,7 +694,7 @@ void MlmePeriodicExec(void *SystemSpecific1, + void *SystemSpecific2, void *SystemSpecific3) + { + unsigned long TxTotalCnt; +- PRTMP_ADAPTER pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + #ifdef RTMP_MAC_PCI + { +@@ -938,8 +938,8 @@ BOOLEAN MlmeValidateSSID(u8 *pSsid, u8 SsidLen) + return (TRUE); + } + +-void MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++void MlmeSelectTxRateTable(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 ** ppTable, + u8 *pTableSize, u8 *pInitTxRateIdx) + { +@@ -1144,7 +1144,7 @@ void MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, + } while (FALSE); + } + +-void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) ++void STAMlmePeriodicExec(struct rt_rtmp_adapter *pAd) + { + unsigned long TxTotalCnt; + int i; +@@ -1385,7 +1385,7 @@ void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME) + && OPSTATUS_TEST_FLAG(pAd, + fOP_STATUS_MEDIA_STATE_CONNECTED)) { +- MLME_START_REQ_STRUCT StartReq; ++ struct rt_mlme_start_req StartReq; + + DBGPRINT(RT_DEBUG_TRACE, + ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n")); +@@ -1395,12 +1395,12 @@ void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + (char *) pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, +- sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ sizeof(struct rt_mlme_start_req), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } + + for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++) { +- MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i]; ++ struct rt_mac_table_entry *pEntry = &pAd->MacTab.Content[i]; + + if (pEntry->ValidAsCLI == FALSE) + continue; +@@ -1429,7 +1429,7 @@ void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) { + if ((pAd->ScanTab.BssNr == 0) + && (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE)) { +- MLME_SCAN_REQ_STRUCT ScanReq; ++ struct rt_mlme_scan_req ScanReq; + + if (RTMP_TIME_AFTER + (pAd->Mlme.Now32, +@@ -1447,7 +1447,7 @@ void STAMlmePeriodicExec(PRTMP_ADAPTER pAd) + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, + MT2_MLME_SCAN_REQ, + sizeof +- (MLME_SCAN_REQ_STRUCT), ++ (struct rt_mlme_scan_req), + &ScanReq); + pAd->Mlme.CntlMachine.CurrState = + CNTL_WAIT_OID_LIST_SCAN; +@@ -1491,10 +1491,10 @@ void LinkDownExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + if (pAd != NULL) { +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ struct rt_mlme_disassoc_req DisassocReq; + + if ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) && + (INFRA_ON(pAd))) { +@@ -1505,7 +1505,7 @@ void LinkDownExec(void *SystemSpecific1, + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_disassoc_req), + &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + +@@ -1517,7 +1517,7 @@ void LinkDownExec(void *SystemSpecific1, + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeAutoScan(IN PRTMP_ADAPTER pAd) ++void MlmeAutoScan(struct rt_rtmp_adapter *pAd) + { + /* check CntlMachine.CurrState to avoid collision with NDIS SetOID request */ + if (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) { +@@ -1532,7 +1532,7 @@ void MlmeAutoScan(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) ++void MlmeAutoReconnectLastSSID(struct rt_rtmp_adapter *pAd) + { + if (pAd->StaCfg.bAutoConnectByBssid) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -1555,7 +1555,7 @@ void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + (MlmeValidateSSID + (pAd->MlmeAux.AutoReconnectSsid, + pAd->MlmeAux.AutoReconnectSsidLen) == TRUE)) { +- NDIS_802_11_SSID OidSsid; ++ struct rt_ndis_802_11_ssid OidSsid; + OidSsid.SsidLength = pAd->MlmeAux.AutoReconnectSsidLen; + NdisMoveMemory(OidSsid.Ssid, pAd->MlmeAux.AutoReconnectSsid, + pAd->MlmeAux.AutoReconnectSsidLen); +@@ -1565,7 +1565,7 @@ void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + pAd->MlmeAux.AutoReconnectSsid, + pAd->MlmeAux.AutoReconnectSsidLen)); + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), &OidSsid); ++ sizeof(struct rt_ndis_802_11_ssid), &OidSsid); + RTMP_MLME_HANDLER(pAd); + } + } +@@ -1582,11 +1582,11 @@ void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd) + Output: + ========================================================================== + */ +-void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32) ++void MlmeCheckForRoaming(struct rt_rtmp_adapter *pAd, unsigned long Now32) + { + u16 i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; ++ struct rt_bss_table *pRoamTab = &pAd->MlmeAux.RoamTab; ++ struct rt_bss_entry *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForRoaming\n")); + /* put all roaming candidates into RoamTab, and sort in RSSI order */ +@@ -1607,7 +1607,7 @@ void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32) + + /* AP passing all above rules is put into roaming candidate table */ + NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + pRoamTab->BssNr += 1; + } + +@@ -1640,11 +1640,11 @@ void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32) + Output: + ========================================================================== + */ +-BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) ++BOOLEAN MlmeCheckForFastRoaming(struct rt_rtmp_adapter *pAd) + { + u16 i; +- BSS_TABLE *pRoamTab = &pAd->MlmeAux.RoamTab; +- BSS_ENTRY *pBss; ++ struct rt_bss_table *pRoamTab = &pAd->MlmeAux.RoamTab; ++ struct rt_bss_entry *pBss; + + DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeCheckForFastRoaming\n")); + /* put all roaming candidates into RoamTab, and sort in RSSI order */ +@@ -1676,7 +1676,7 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + pBss->Rssi)); + /* AP passing all above rules is put into roaming candidate table */ + NdisMoveMemory(&pRoamTab->BssEntry[pRoamTab->BssNr], pBss, +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + pRoamTab->BssNr += 1; + } + +@@ -1699,8 +1699,8 @@ BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd) + return FALSE; + } + +-void MlmeSetTxRate(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate) ++void MlmeSetTxRate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_rtmp_tx_rate_switch * pTxRate) + { + u8 MaxMode = MODE_OFDM; + +@@ -1840,13 +1840,13 @@ void MlmeSetTxRate(IN PRTMP_ADAPTER pAd, + call this routine every second + ========================================================================== + */ +-void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) ++void MlmeDynamicTxRateSwitching(struct rt_rtmp_adapter *pAd) + { + u8 UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx; + unsigned long i, AccuTxTotalCnt = 0, TxTotalCnt; + unsigned long TxErrorRatio = 0; + BOOLEAN bTxRateChanged = FALSE, bUpgradeQuality = FALSE; +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; ++ struct rt_rtmp_tx_rate_switch *pCurrTxRate, *pNextTxRate = NULL; + u8 *pTable; + u8 TableSize = 0; + u8 InitTxRateIdx = 0, TrainUp, TrainDown; +@@ -1854,8 +1854,8 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + TX_STA_CNT1_STRUC StaTx1; + TX_STA_CNT0_STRUC TxStaCnt0; + unsigned long TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; +- RSSI_SAMPLE *pRssi = &pAd->StaCfg.RssiSample; ++ struct rt_mac_table_entry *pEntry; ++ struct rt_rssi_sample *pRssi = &pAd->StaCfg.RssiSample; + + /* */ + /* walk through MAC table, see if need to change AP's TX rate toward each entry */ +@@ -1982,7 +1982,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + /* When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex. */ + /* So need to sync here. */ + pCurrTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(CurrRateIdx + 1) * 5]; + if ((pEntry->HTPhyMode.field.MCS != pCurrTxRate->CurrMCS) + /*&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE) */ + ) { +@@ -1990,7 +1990,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + /* Need to sync Real Tx rate and our record. */ + /* Then return for next DRS. */ + pCurrTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(InitTxRateIdx + 1) ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(InitTxRateIdx + 1) + * 5]; + pEntry->CurrTxRateIndex = InitTxRateIdx; + MlmeSetTxRate(pAd, pEntry, pCurrTxRate); +@@ -2012,7 +2012,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + + pCurrTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(CurrRateIdx + 1) * 5]; + + if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) { + TrainUp = +@@ -2049,7 +2049,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + /* check the existence and index of each needed MCS */ + while (idx < pTable[0]) { + pCurrTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(idx + 1) * ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(idx + 1) * + 5]; + + if (pCurrTxRate->CurrMCS == MCS_0) { +@@ -2192,7 +2192,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + { + pEntry->CurrTxRateIndex = TxRateIdx; + pNextTxRate = +- (PRTMP_TX_RATE_SWITCH) & ++ (struct rt_rtmp_tx_rate_switch *) & + pTable[(pEntry->CurrTxRateIndex + 1) * 5]; + MlmeSetTxRate(pAd, pEntry, pNextTxRate); + } +@@ -2332,7 +2332,7 @@ void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd) + } + + pNextTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(tmpTxRate + 1) * ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(tmpTxRate + 1) * + 5]; + } + if (bTxRateChanged && pNextTxRate) { +@@ -2364,12 +2364,12 @@ void StaQuickResponeForRateUpExec(void *SystemSpecific1, + void *SystemSpecific2, + void *SystemSpecific3) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + u8 UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0; + unsigned long TxTotalCnt; + unsigned long TxErrorRatio = 0; + BOOLEAN bTxRateChanged; /*, bUpgradeQuality = FALSE; */ +- PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL; ++ struct rt_rtmp_tx_rate_switch *pCurrTxRate, *pNextTxRate = NULL; + u8 *pTable; + u8 TableSize = 0; + u8 InitTxRateIdx = 0, TrainUp, TrainDown; +@@ -2377,7 +2377,7 @@ void StaQuickResponeForRateUpExec(void *SystemSpecific1, + TX_STA_CNT0_STRUC TxStaCnt0; + char Rssi, ratio; + unsigned long TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_mac_table_entry *pEntry; + unsigned long i; + + pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE; +@@ -2421,7 +2421,7 @@ void StaQuickResponeForRateUpExec(void *SystemSpecific1, + } + + pCurrTxRate = +- (PRTMP_TX_RATE_SWITCH) & pTable[(CurrRateIdx + 1) * 5]; ++ (struct rt_rtmp_tx_rate_switch *) & pTable[(CurrRateIdx + 1) * 5]; + + if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX)) { + TrainUp = +@@ -2574,7 +2574,7 @@ void StaQuickResponeForRateUpExec(void *SystemSpecific1, + } + + pNextTxRate = +- (PRTMP_TX_RATE_SWITCH) & ++ (struct rt_rtmp_tx_rate_switch *) & + pTable[(pAd->CommonCfg.TxRateIndex + 1) * 5]; + if (bTxRateChanged && pNextTxRate) { + MlmeSetTxRate(pAd, pEntry, pNextTxRate); +@@ -2601,7 +2601,7 @@ void StaQuickResponeForRateUpExec(void *SystemSpecific1, + + ========================================================================== + */ +-void MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, unsigned long Now32) ++void MlmeCheckPsmChange(struct rt_rtmp_adapter *pAd, unsigned long Now32) + { + unsigned long PowerMode; + +@@ -2638,7 +2638,7 @@ void MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, unsigned long Now32) + + /* IRQL = PASSIVE_LEVEL */ + /* IRQL = DISPATCH_LEVEL */ +-void MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, u16 psm) ++void MlmeSetPsmBit(struct rt_rtmp_adapter *pAd, u16 psm) + { + AUTO_RSP_CFG_STRUC csr4; + +@@ -2669,14 +2669,14 @@ void MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, u16 psm) + channel quality based on the most up-to-date information + ========================================================================== + */ +-void MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, unsigned long Now32) ++void MlmeCalculateChannelQuality(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pMacEntry, unsigned long Now32) + { + unsigned long TxOkCnt, TxCnt, TxPER, TxPRR; + unsigned long RxCnt, RxPER; + u8 NorRssi; + char MaxRssi; +- RSSI_SAMPLE *pRssiSample = NULL; ++ struct rt_rssi_sample *pRssiSample = NULL; + u32 OneSecTxNoRetryOkCount = 0; + u32 OneSecTxRetryOkCount = 0; + u32 OneSecTxFailCount = 0; +@@ -2751,7 +2751,7 @@ void MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, u16 TxPreamble) ++void MlmeSetTxPreamble(struct rt_rtmp_adapter *pAd, u16 TxPreamble) + { + AUTO_RSP_CFG_STRUC csr4; + +@@ -2785,7 +2785,7 @@ void MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, u16 TxPreamble) + ========================================================================== + */ + +-void UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) ++void UpdateBasicRateBitmap(struct rt_rtmp_adapter *pAdapter) + { + int i, j; + /* 1 2 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ +@@ -2831,7 +2831,7 @@ void UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAdapter) + /* IRQL = DISPATCH_LEVEL */ + /* bLinkUp is to identify the inital link speed. */ + /* TRUE indicates the rate update at linkup, we should not try to set the rate at 54Mbps. */ +-void MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, u8 apidx) ++void MlmeUpdateTxRates(struct rt_rtmp_adapter *pAd, IN BOOLEAN bLinkUp, u8 apidx) + { + int i, num; + u8 Rate = RATE_6, MaxDesire = RATE_1, MaxSupport = RATE_1; +@@ -3292,15 +3292,15 @@ void MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, u8 apidx) + + ========================================================================== + */ +-void MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, u8 apidx) ++void MlmeUpdateHtTxRates(struct rt_rtmp_adapter *pAd, u8 apidx) + { + u8 StbcMcs; /*j, StbcMcs, bitmask; */ + char i; /* 3*3 */ +- RT_HT_CAPABILITY *pRtHtCap = NULL; +- RT_HT_PHY_INFO *pActiveHtPhy = NULL; ++ struct rt_ht_capability *pRtHtCap = NULL; ++ struct rt_ht_phy_info *pActiveHtPhy = NULL; + unsigned long BasicMCS; + u8 j, bitmask; +- PRT_HT_PHY_INFO pDesireHtPhy = NULL; ++ struct rt_ht_phy_info *pDesireHtPhy = NULL; + PHTTRANSMIT_SETTING pHtPhy = NULL; + PHTTRANSMIT_SETTING pMaxHtPhy = NULL; + PHTTRANSMIT_SETTING pMinHtPhy = NULL; +@@ -3444,7 +3444,7 @@ void MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, u8 apidx) + DBGPRINT(RT_DEBUG_TRACE, ("MlmeUpdateHtTxRates<=== \n")); + } + +-void BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) ++void BATableInit(struct rt_rtmp_adapter *pAd, struct rt_ba_table *Tab) + { + int i; + +@@ -3462,13 +3462,13 @@ void BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab) + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeRadioOff(IN PRTMP_ADAPTER pAd) ++void MlmeRadioOff(struct rt_rtmp_adapter *pAd) + { + RTMP_MLME_RADIO_OFF(pAd); + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeRadioOn(IN PRTMP_ADAPTER pAd) ++void MlmeRadioOn(struct rt_rtmp_adapter *pAd) + { + RTMP_MLME_RADIO_ON(pAd); + } +@@ -3487,14 +3487,14 @@ void MlmeRadioOn(IN PRTMP_ADAPTER pAd) + IRQL = DISPATCH_LEVEL + + */ +-void BssTableInit(IN BSS_TABLE * Tab) ++void BssTableInit(struct rt_bss_table *Tab) + { + int i; + + Tab->BssNr = 0; + Tab->BssOverlapNr = 0; + for (i = 0; i < MAX_LEN_OF_BSS_TABLE; i++) { +- NdisZeroMemory(&Tab->BssEntry[i], sizeof(BSS_ENTRY)); ++ NdisZeroMemory(&Tab->BssEntry[i], sizeof(struct rt_bss_entry)); + Tab->BssEntry[i].Rssi = -127; /* initial the rssi as a minimum value */ + } + } +@@ -3510,7 +3510,7 @@ void BssTableInit(IN BSS_TABLE * Tab) + IRQL = DISPATCH_LEVEL + + */ +-unsigned long BssTableSearch(IN BSS_TABLE * Tab, u8 *pBssid, u8 Channel) ++unsigned long BssTableSearch(struct rt_bss_table *Tab, u8 *pBssid, u8 Channel) + { + u8 i; + +@@ -3528,7 +3528,7 @@ unsigned long BssTableSearch(IN BSS_TABLE * Tab, u8 *pBssid, u8 Channel) + return (unsigned long)BSS_NOT_FOUND; + } + +-unsigned long BssSsidTableSearch(IN BSS_TABLE * Tab, ++unsigned long BssSsidTableSearch(struct rt_bss_table *Tab, + u8 *pBssid, + u8 *pSsid, u8 SsidLen, u8 Channel) + { +@@ -3550,7 +3550,7 @@ unsigned long BssSsidTableSearch(IN BSS_TABLE * Tab, + return (unsigned long)BSS_NOT_FOUND; + } + +-unsigned long BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++unsigned long BssTableSearchWithSSID(struct rt_bss_table *Tab, + u8 *Bssid, + u8 *pSsid, + u8 SsidLen, u8 Channel) +@@ -3575,7 +3575,7 @@ unsigned long BssTableSearchWithSSID(IN BSS_TABLE * Tab, + return (unsigned long)BSS_NOT_FOUND; + } + +-unsigned long BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++unsigned long BssSsidTableSearchBySSID(struct rt_bss_table *Tab, + u8 *pSsid, u8 SsidLen) + { + u8 i; +@@ -3591,7 +3591,7 @@ unsigned long BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, + } + + /* IRQL = DISPATCH_LEVEL */ +-void BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, ++void BssTableDeleteEntry(struct rt_bss_table *Tab, + u8 *pBssid, u8 Channel) + { + u8 i, j; +@@ -3602,10 +3602,10 @@ void BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, + for (j = i; j < Tab->BssNr - 1; j++) { + NdisMoveMemory(&(Tab->BssEntry[j]), + &(Tab->BssEntry[j + 1]), +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + } + NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr - 1]), +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + Tab->BssNr -= 1; + return; + } +@@ -3621,8 +3621,8 @@ void BssTableDeleteEntry(IN OUT BSS_TABLE * Tab, + // IRQL = DISPATCH_LEVEL + ======================================================================== + */ +-void BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY * pBAORIEntry) ++void BATableDeleteORIEntry(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_ori_entry *pBAORIEntry) + { + + if (pBAORIEntry->ORI_BA_Status != Originator_NONE) { +@@ -3652,7 +3652,7 @@ void BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + */ +-void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN PCF_PARM pCfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++void BssEntrySet(struct rt_rtmp_adapter *pAd, struct rt_bss_entry *pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * pCfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 HtCapabilityLen, + u8 AddHtInfoLen, + u8 NewExtChanOffset, +@@ -3660,10 +3660,10 @@ void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ss + char Rssi, + IN LARGE_INTEGER TimeStamp, + u8 CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_qos_capability_parm *pQosCapability, ++ struct rt_qbss_load_parm *pQbssLoad, ++ u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE) + { + COPY_MAC_ADDR(pBss->Bssid, pBssid); + /* Default Hidden SSID to be TRUE, it will be turned to FALSE after coping SSID */ +@@ -3761,27 +3761,27 @@ void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ss + + /* new for QOS */ + if (pEdcaParm) +- NdisMoveMemory(&pBss->EdcaParm, pEdcaParm, sizeof(EDCA_PARM)); ++ NdisMoveMemory(&pBss->EdcaParm, pEdcaParm, sizeof(struct rt_edca_parm)); + else + pBss->EdcaParm.bValid = FALSE; + if (pQosCapability) + NdisMoveMemory(&pBss->QosCapability, pQosCapability, +- sizeof(QOS_CAPABILITY_PARM)); ++ sizeof(struct rt_qos_capability_parm)); + else + pBss->QosCapability.bValid = FALSE; + if (pQbssLoad) + NdisMoveMemory(&pBss->QbssLoad, pQbssLoad, +- sizeof(QBSS_LOAD_PARM)); ++ sizeof(struct rt_qbss_load_parm)); + else + pBss->QbssLoad.bValid = FALSE; + + { +- PEID_STRUCT pEid; ++ struct rt_eid * pEid; + u16 Length = 0; + + NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN); + NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN); +- pEid = (PEID_STRUCT) pVIE; ++ pEid = (struct rt_eid *) pVIE; + while ((Length + 2 + (u16)pEid->Len) <= LengthVIE) { + switch (pEid->Eid) { + case IE_WPA: +@@ -3809,7 +3809,7 @@ void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ss + break; + } + Length = Length + 2 + (u16)pEid->Len; /* Eid[1] + Len[1]+ content[Len] */ +- pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); ++ pEid = (struct rt_eid *) ((u8 *) pEid + 2 + pEid->Len); + } + } + } +@@ -3837,7 +3837,7 @@ void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT BSS_ENTRY * pBss, u8 *pBssid, char Ss + IRQL = DISPATCH_LEVEL + + */ +-unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN CF_PARM * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++unsigned long BssTableSetEntry(struct rt_rtmp_adapter *pAd, struct rt_bss_table *Tab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 HtCapabilityLen, + u8 AddHtInfoLen, + u8 NewExtChanOffset, +@@ -3845,10 +3845,10 @@ unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, u8 *pB + char Rssi, + IN LARGE_INTEGER TimeStamp, + u8 CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE) ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_qos_capability_parm *pQosCapability, ++ struct rt_qbss_load_parm *pQbssLoad, ++ u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE) + { + unsigned long Idx; + +@@ -3924,14 +3924,14 @@ unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT BSS_TABLE * Tab, u8 *pB + } + + /* IRQL = DISPATCH_LEVEL */ +-void BssTableSsidSort(IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE * OutTab, char Ssid[], u8 SsidLen) ++void BssTableSsidSort(struct rt_rtmp_adapter *pAd, ++ struct rt_bss_table *OutTab, char Ssid[], u8 SsidLen) + { + int i; + BssTableInit(OutTab); + + for (i = 0; i < pAd->ScanTab.BssNr; i++) { +- BSS_ENTRY *pInBss = &pAd->ScanTab.BssEntry[i]; ++ struct rt_bss_entry *pInBss = &pAd->ScanTab.BssEntry[i]; + BOOLEAN bIsHiddenApIncluded = FALSE; + + if (((pAd->CommonCfg.bIEEE80211H == 1) && +@@ -3945,7 +3945,7 @@ void BssTableSsidSort(IN PRTMP_ADAPTER pAd, + if ((pInBss->BssType == pAd->StaCfg.BssType) && + (SSID_EQUAL(Ssid, SsidLen, pInBss->Ssid, pInBss->SsidLen) + || bIsHiddenApIncluded)) { +- BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; ++ struct rt_bss_entry *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + + /* 2.4G/5G N only mode */ + if ((pInBss->HtCapabilityLen == 0) && +@@ -4067,12 +4067,12 @@ void BssTableSsidSort(IN PRTMP_ADAPTER pAd, + } + } + /* copy matching BSS from InTab to OutTab */ +- NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); ++ NdisMoveMemory(pOutBss, pInBss, sizeof(struct rt_bss_entry)); + + OutTab->BssNr++; + } else if ((pInBss->BssType == pAd->StaCfg.BssType) + && (SsidLen == 0)) { +- BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; ++ struct rt_bss_entry *pOutBss = &OutTab->BssEntry[OutTab->BssNr]; + + /* 2.4G/5G N only mode */ + if ((pInBss->HtCapabilityLen == 0) && +@@ -4167,7 +4167,7 @@ void BssTableSsidSort(IN PRTMP_ADAPTER pAd, + } + } + /* copy matching BSS from InTab to OutTab */ +- NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY)); ++ NdisMoveMemory(pOutBss, pInBss, sizeof(struct rt_bss_entry)); + + OutTab->BssNr++; + } +@@ -4180,33 +4180,33 @@ void BssTableSsidSort(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-void BssTableSortByRssi(IN OUT BSS_TABLE * OutTab) ++void BssTableSortByRssi(struct rt_bss_table *OutTab) + { + int i, j; +- BSS_ENTRY TmpBss; ++ struct rt_bss_entry TmpBss; + + for (i = 0; i < OutTab->BssNr - 1; i++) { + for (j = i + 1; j < OutTab->BssNr; j++) { + if (OutTab->BssEntry[j].Rssi > OutTab->BssEntry[i].Rssi) { + NdisMoveMemory(&TmpBss, &OutTab->BssEntry[j], +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + NdisMoveMemory(&OutTab->BssEntry[j], + &OutTab->BssEntry[i], +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + NdisMoveMemory(&OutTab->BssEntry[i], &TmpBss, +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + } + } + } + } + +-void BssCipherParse(IN OUT PBSS_ENTRY pBss) ++void BssCipherParse(struct rt_bss_entry *pBss) + { +- PEID_STRUCT pEid; ++ struct rt_eid * pEid; + u8 *pTmp; +- PRSN_IE_HEADER_STRUCT pRsnHeader; +- PCIPHER_SUITE_STRUCT pCipher; +- PAKM_SUITE_STRUCT pAKM; ++ struct rt_rsn_ie_header * pRsnHeader; ++ struct rt_cipher_suite_struct * pCipher; ++ struct rt_akm_suite * pAKM; + u16 Count; + int Length; + NDIS_802_11_ENCRYPTION_STATUS TmpCipher; +@@ -4242,7 +4242,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + while (Length > 0) { + /* Parse cipher suite base on WPA1 & WPA2, they should be parsed differently */ + pTmp = ((u8 *)pBss->VarIEs) + pBss->VarIELen - Length; +- pEid = (PEID_STRUCT) pTmp; ++ pEid = (struct rt_eid *) pTmp; + switch (pEid->Eid) { + case IE_WPA: + if (NdisEqualMemory(pEid->Octet, SES_OUI, 3) +@@ -4380,15 +4380,15 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + break; + + case IE_RSN: +- pRsnHeader = (PRSN_IE_HEADER_STRUCT) pTmp; ++ pRsnHeader = (struct rt_rsn_ie_header *) pTmp; + + /* 0. Version must be 1 */ + if (le2cpu16(pRsnHeader->Version) != 1) + break; +- pTmp += sizeof(RSN_IE_HEADER_STRUCT); ++ pTmp += sizeof(struct rt_rsn_ie_header); + + /* 1. Check group cipher */ +- pCipher = (PCIPHER_SUITE_STRUCT) pTmp; ++ pCipher = (struct rt_cipher_suite_struct *) pTmp; + if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) + break; + +@@ -4414,7 +4414,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + break; + } + /* set to correct offset for next parsing */ +- pTmp += sizeof(CIPHER_SUITE_STRUCT); ++ pTmp += sizeof(struct rt_cipher_suite_struct); + + /* 2. Get pairwise cipher counts */ + /*Count = *(u16 *)pTmp; */ +@@ -4425,7 +4425,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + /* Parsing all unicast cipher suite */ + while (Count > 0) { + /* Skip OUI */ +- pCipher = (PCIPHER_SUITE_STRUCT) pTmp; ++ pCipher = (struct rt_cipher_suite_struct *) pTmp; + TmpCipher = Ndis802_11WEPDisabled; + switch (pCipher->Type) { + case 1: +@@ -4452,7 +4452,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + } else { + pBss->WPA2.PairCipherAux = TmpCipher; + } +- pTmp += sizeof(CIPHER_SUITE_STRUCT); ++ pTmp += sizeof(struct rt_cipher_suite_struct); + Count--; + } + +@@ -4464,7 +4464,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + /* 5. Get AKM ciphers */ + /* Parsing all AKM ciphers */ + while (Count > 0) { +- pAKM = (PAKM_SUITE_STRUCT) pTmp; ++ pAKM = (struct rt_akm_suite *) pTmp; + if (!RTMPEqualMemory(pTmp, RSN_OUI, 3)) + break; + +@@ -4499,7 +4499,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + Ndis802_11AuthModeMax; + break; + } +- pTmp += (Count * sizeof(AKM_SUITE_STRUCT)); ++ pTmp += (Count * sizeof(struct rt_akm_suite)); + Count--; + } + +@@ -4546,7 +4546,7 @@ void BssCipherParse(IN OUT PBSS_ENTRY pBss) + * \pre + * \post + */ +-void MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, u8 *pAddr) ++void MacAddrRandomBssid(struct rt_rtmp_adapter *pAd, u8 *pAddr) + { + int i; + +@@ -4572,12 +4572,12 @@ void MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, u8 *pAddr) + IRQL = DISPATCH_LEVEL + + */ +-void MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, ++void MgtMacHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u8 SubType, + u8 ToDs, u8 *pDA, u8 *pBssid) + { +- NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11)); ++ NdisZeroMemory(pHdr80211, sizeof(struct rt_header_802_11)); + + pHdr80211->FC.Type = BTYPE_MGMT; + pHdr80211->FC.SubType = SubType; +@@ -4650,7 +4650,7 @@ unsigned long MakeOutgoingFrame(u8 * Buffer, unsigned long * FrameLen, ...) + IRQL = PASSIVE_LEVEL + + */ +-int MlmeQueueInit(IN MLME_QUEUE * Queue) ++int MlmeQueueInit(struct rt_mlme_queue *Queue) + { + int i; + +@@ -4684,12 +4684,12 @@ int MlmeQueueInit(IN MLME_QUEUE * Queue) + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeEnqueue(struct rt_rtmp_adapter *pAd, + unsigned long Machine, + unsigned long MsgType, unsigned long MsgLen, void * Msg) + { + int Tail; +- MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; ++ struct rt_mlme_queue *Queue = (struct rt_mlme_queue *)& pAd->Mlme.Queue; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -4744,7 +4744,7 @@ BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeEnqueueForRecv(struct rt_rtmp_adapter *pAd, + unsigned long Wcid, + unsigned long TimeStampHigh, + unsigned long TimeStampLow, +@@ -4754,9 +4754,9 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + unsigned long MsgLen, void * Msg, u8 Signal) + { + int Tail, Machine; +- PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) Msg; + int MsgType; +- MLME_QUEUE *Queue = (MLME_QUEUE *) & pAd->Mlme.Queue; ++ struct rt_mlme_queue *Queue = (struct rt_mlme_queue *)& pAd->Mlme.Queue; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -4826,7 +4826,7 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem) ++BOOLEAN MlmeDequeue(struct rt_mlme_queue *Queue, struct rt_mlme_queue_elem ** Elem) + { + NdisAcquireSpinLock(&(Queue->Lock)); + *Elem = &(Queue->Entry[Queue->Head]); +@@ -4840,10 +4840,10 @@ BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem) + } + + /* IRQL = DISPATCH_LEVEL */ +-void MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) ++void MlmeRestartStateMachine(struct rt_rtmp_adapter *pAd) + { + #ifdef RTMP_MAC_PCI +- MLME_QUEUE_ELEM *Elem = NULL; ++ struct rt_mlme_queue_elem *Elem = NULL; + #endif /* RTMP_MAC_PCI // */ + BOOLEAN Cancelled; + +@@ -4919,7 +4919,7 @@ void MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd) + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue) ++BOOLEAN MlmeQueueEmpty(struct rt_mlme_queue *Queue) + { + BOOLEAN Ans; + +@@ -4940,7 +4940,7 @@ BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue) + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue) ++BOOLEAN MlmeQueueFull(struct rt_mlme_queue *Queue) + { + BOOLEAN Ans; + +@@ -4962,7 +4962,7 @@ BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue) + IRQL = PASSIVE_LEVEL + + */ +-void MlmeQueueDestroy(IN MLME_QUEUE * pQueue) ++void MlmeQueueDestroy(struct rt_mlme_queue *pQueue) + { + NdisAcquireSpinLock(&(pQueue->Lock)); + pQueue->Num = 0; +@@ -4983,8 +4983,8 @@ void MlmeQueueDestroy(IN MLME_QUEUE * pQueue) + IRQL = DISPATCH_LEVEL + + */ +-BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, ++BOOLEAN MsgTypeSubst(struct rt_rtmp_adapter *pAd, ++ struct rt_frame_802_11 * pFrame, + int * Machine, int * MsgType) + { + u16 Seq, Alg; +@@ -5097,7 +5097,7 @@ BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, + IRQL = PASSIVE_LEVEL + + */ +-void StateMachineInit(IN STATE_MACHINE * S, ++void StateMachineInit(struct rt_state_machine *S, + IN STATE_MACHINE_FUNC Trans[], + unsigned long StNr, + unsigned long MsgNr, +@@ -5135,7 +5135,7 @@ void StateMachineInit(IN STATE_MACHINE * S, + IRQL = PASSIVE_LEVEL + + */ +-void StateMachineSetAction(IN STATE_MACHINE * S, ++void StateMachineSetAction(struct rt_state_machine *S, + unsigned long St, + unsigned long Msg, IN STATE_MACHINE_FUNC Func) + { +@@ -5158,8 +5158,8 @@ void StateMachineSetAction(IN STATE_MACHINE * S, + IRQL = DISPATCH_LEVEL + + */ +-void StateMachinePerformAction(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem) ++void StateMachinePerformAction(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, struct rt_mlme_queue_elem *Elem) + { + (*(S->TransFunc[S->CurrState * S->NrMsg + Elem->MsgType - S->Base])) + (pAd, Elem); +@@ -5173,7 +5173,7 @@ void StateMachinePerformAction(IN PRTMP_ADAPTER pAd, + StateMachinePerformAction() + ========================================================================== + */ +-void Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void Drop(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + } + +@@ -5189,7 +5189,7 @@ void Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void LfsrInit(IN PRTMP_ADAPTER pAd, unsigned long Seed) ++void LfsrInit(struct rt_rtmp_adapter *pAd, unsigned long Seed) + { + if (Seed == 0) + pAd->Mlme.ShiftReg = 1; +@@ -5202,7 +5202,7 @@ void LfsrInit(IN PRTMP_ADAPTER pAd, unsigned long Seed) + Description: + ========================================================================== + */ +-u8 RandomByte(IN PRTMP_ADAPTER pAd) ++u8 RandomByte(struct rt_rtmp_adapter *pAd) + { + unsigned long i; + u8 R, Result; +@@ -5244,7 +5244,7 @@ u8 RandomByte(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++void RTMPCheckRates(struct rt_rtmp_adapter *pAd, + IN u8 SupRate[], IN u8 * SupRateLen) + { + u8 RateIdx, i, j; +@@ -5267,7 +5267,7 @@ void RTMPCheckRates(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(SupRate, NewRate, NewRateLen); + } + +-BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPCheckChannel(struct rt_rtmp_adapter *pAd, + u8 CentralChannel, u8 Channel) + { + u8 k; +@@ -5320,10 +5320,10 @@ BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPCheckHt(struct rt_rtmp_adapter *pAd, + u8 Wcid, +- IN HT_CAPABILITY_IE * pHtCapability, +- IN ADD_HT_INFO_IE * pAddHtInfo) ++ struct rt_ht_capability_ie * pHtCapability, ++ struct rt_add_ht_info_ie * pAddHtInfo) + { + if (Wcid >= MAX_LEN_OF_MAC_TABLE) + return FALSE; +@@ -5449,7 +5449,7 @@ BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) ++void RTMPUpdateMlmeRate(struct rt_rtmp_adapter *pAd) + { + u8 MinimumRate; + u8 ProperMlmeRate; /*= RATE_54; */ +@@ -5558,7 +5558,7 @@ void RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.MlmeTransmit.word)); + } + +-char RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++char RTMPMaxRssi(struct rt_rtmp_adapter *pAd, + char Rssi0, char Rssi1, char Rssi2) + { + char larger = -127; +@@ -5594,7 +5594,7 @@ char RTMPMaxRssi(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd) ++void AsicEvaluateRxAnt(struct rt_rtmp_adapter *pAd) + { + u8 BBPR3 = 0; + +@@ -5677,7 +5677,7 @@ void AsicRxAntEvalTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + u8 BBPR3 = 0; + char larger = -127, rssi0, rssi1, rssi2; + +@@ -5749,7 +5749,7 @@ void APSDPeriodicExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) + return; +@@ -5784,7 +5784,7 @@ void APSDPeriodicExec(void *SystemSpecific1, + + ======================================================================== + */ +-void RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack) ++void RTMPSetPiggyBack(struct rt_rtmp_adapter *pAd, IN BOOLEAN bPiggyBack) + { + TX_LINK_CFG_STRUC TxLinkCfg; + +@@ -5809,8 +5809,8 @@ void RTMPSetPiggyBack(IN PRTMP_ADAPTER pAd, IN BOOLEAN bPiggyBack) + + ======================================================================== + */ +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry) ++BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry) + { + BOOLEAN result = TRUE; + +@@ -5826,7 +5826,7 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, + return result; + } + +-BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd) ++BOOLEAN RTMPAutoRateSwitchCheck(struct rt_rtmp_adapter *pAd) + { + { + if (pAd->StaCfg.bAutoTxRateSwitch) +@@ -5850,7 +5850,7 @@ BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-u8 RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) ++u8 RTMPStaFixedTxMode(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry) + { + u8 tx_mode = FIXED_TXMODE_HT; + +@@ -5878,7 +5878,7 @@ u8 RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry) + + ======================================================================== + */ +-void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) ++void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, struct rt_mac_table_entry *pEntry) + { + HTTRANSMIT_SETTING TransmitSetting; + +@@ -5921,7 +5921,7 @@ void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, PMAC_TABLE_ENTRY pEntry) + + ========================================================================== + */ +-void AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) ++void AsicStaBbpTuning(struct rt_rtmp_adapter *pAd) + { + u8 OrigR66Value = 0, R66; /*, R66UpperBound = 0x30, R66LowerBound = 0x30; */ + char Rssi; +@@ -6033,7 +6033,7 @@ void AsicStaBbpTuning(IN PRTMP_ADAPTER pAd) + } + } + +-void RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, u8 BandWidth) ++void RTMPSetAGCInitValue(struct rt_rtmp_adapter *pAd, u8 BandWidth) + { + u8 R66 = 0x30; + +diff --git a/drivers/staging/rt2860/common/rt_channel.c b/drivers/staging/rt2860/common/rt_channel.c +index 3fe5d97..5387989 100644 +--- a/drivers/staging/rt2860/common/rt_channel.c ++++ b/drivers/staging/rt2860/common/rt_channel.c +@@ -26,7 +26,7 @@ + */ + #include "../rt_config.h" + +-CH_FREQ_MAP CH_HZ_ID_MAP[] = { ++struct rt_ch_freq_map CH_HZ_ID_MAP[] = { + {1, 2412} + , + {2, 2417} +@@ -144,9 +144,9 @@ CH_FREQ_MAP CH_HZ_ID_MAP[] = { + , /* Japan, means J16 */ + }; + +-int CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(CH_FREQ_MAP)); ++int CH_HZ_ID_MAP_NUM = (sizeof(CH_HZ_ID_MAP) / sizeof(struct rt_ch_freq_map)); + +-CH_REGION ChRegion[] = { ++struct rt_ch_region ChRegion[] = { + { /* Antigua and Berbuda */ + "AG", + CE, +@@ -1422,10 +1422,10 @@ CH_REGION ChRegion[] = { + , + }; + +-static PCH_REGION GetChRegion(u8 *CntryCode) ++static struct rt_ch_region *GetChRegion(u8 *CntryCode) + { + int loop = 0; +- PCH_REGION pChRegion = NULL; ++ struct rt_ch_region *pChRegion = NULL; + + while (strcmp((char *)ChRegion[loop].CountReg, "") != 0) { + if (strncmp +@@ -1461,8 +1461,8 @@ static void ChBandCheck(u8 PhyMode, u8 *pChType) + } + } + +-static u8 FillChList(IN PRTMP_ADAPTER pAd, +- IN PCH_DESP pChDesp, ++static u8 FillChList(struct rt_rtmp_adapter *pAd, ++ struct rt_ch_desp *pChDesp, + u8 Offset, u8 increment) + { + int i, j, l; +@@ -1494,12 +1494,12 @@ static u8 FillChList(IN PRTMP_ADAPTER pAd, + return j; + } + +-static inline void CreateChList(IN PRTMP_ADAPTER pAd, +- IN PCH_REGION pChRegion, u8 Geography) ++static inline void CreateChList(struct rt_rtmp_adapter *pAd, ++ struct rt_ch_region *pChRegion, u8 Geography) + { + int i; + u8 offset = 0; +- PCH_DESP pChDesp; ++ struct rt_ch_desp *pChDesp; + u8 ChType; + u8 increment; + +@@ -1532,21 +1532,21 @@ static inline void CreateChList(IN PRTMP_ADAPTER pAd, + } + } + +-void BuildChannelListEx(IN PRTMP_ADAPTER pAd) ++void BuildChannelListEx(struct rt_rtmp_adapter *pAd) + { +- PCH_REGION pChReg; ++ struct rt_ch_region *pChReg; + + pChReg = GetChRegion(pAd->CommonCfg.CountryCode); + CreateChList(pAd, pChReg, pAd->CommonCfg.Geography); + } + +-void BuildBeaconChList(IN PRTMP_ADAPTER pAd, ++void BuildBeaconChList(struct rt_rtmp_adapter *pAd, + u8 *pBuf, unsigned long *pBufLen) + { + int i; + unsigned long TmpLen; +- PCH_REGION pChRegion; +- PCH_DESP pChDesp; ++ struct rt_ch_region *pChRegion; ++ struct rt_ch_desp *pChDesp; + u8 ChType; + + pChRegion = GetChRegion(pAd->CommonCfg.CountryCode); +@@ -1581,7 +1581,7 @@ void BuildBeaconChList(IN PRTMP_ADAPTER pAd, + } + } + +-static BOOLEAN IsValidChannel(IN PRTMP_ADAPTER pAd, u8 channel) ++static BOOLEAN IsValidChannel(struct rt_rtmp_adapter *pAd, u8 channel) + { + int i; + +@@ -1608,7 +1608,7 @@ static u8 GetExtCh(u8 Channel, u8 Direction) + return ExtCh; + } + +-void N_ChannelCheck(IN PRTMP_ADAPTER pAd) ++void N_ChannelCheck(struct rt_rtmp_adapter *pAd) + { + /*u8 ChannelNum = pAd->ChannelListNum; */ + u8 Channel = pAd->CommonCfg.Channel; +@@ -1670,7 +1670,7 @@ void N_ChannelCheck(IN PRTMP_ADAPTER pAd) + + } + +-void N_SetCenCh(IN PRTMP_ADAPTER pAd) ++void N_SetCenCh(struct rt_rtmp_adapter *pAd) + { + if (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) { + if (pAd->CommonCfg.RegTransmitSetting.field.EXTCHA == +@@ -1690,7 +1690,7 @@ void N_SetCenCh(IN PRTMP_ADAPTER pAd) + } + } + +-u8 GetCuntryMaxTxPwr(IN PRTMP_ADAPTER pAd, u8 channel) ++u8 GetCuntryMaxTxPwr(struct rt_rtmp_adapter *pAd, u8 channel) + { + int i; + for (i = 0; i < pAd->ChannelListNum; i++) { +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index 6d6ca32..fb0ca88 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -53,7 +53,7 @@ + + ======================================================================== + */ +-int RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++int RT30xxWriteRFRegister(struct rt_rtmp_adapter *pAd, + u8 regID, u8 value) + { + RF_CSR_CFG_STRUC rfcsr; +@@ -101,7 +101,7 @@ int RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++int RT30xxReadRFRegister(struct rt_rtmp_adapter *pAd, + u8 regID, u8 *pValue) + { + RF_CSR_CFG_STRUC rfcsr; +@@ -139,15 +139,15 @@ int RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, + return STATUS_SUCCESS; + } + +-void NICInitRFRegisters(IN RTMP_ADAPTER * pAd) ++void NICInitRFRegisters(struct rt_rtmp_adapter *pAd) + { + if (pAd->chipOps.AsicRfInit) + pAd->chipOps.AsicRfInit(pAd); + } + +-void RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd) ++void RtmpChipOpsRFHook(struct rt_rtmp_adapter *pAd) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + + pChipOps->pRFRegTable = NULL; + pChipOps->AsicRfInit = NULL; +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 5cda0ea..46e7a2a 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -43,7 +43,7 @@ char *CipherName[] = + /* */ + /* BBP register initialization set */ + /* */ +-REG_PAIR BBPRegTable[] = { ++struct rt_reg_pair BBPRegTable[] = { + {BBP_R65, 0x2C}, /* fix rssi issue */ + {BBP_R66, 0x38}, /* Also set this default value to pAd->BbpTuning.R66CurrentValue at initial */ + {BBP_R69, 0x12}, +@@ -61,13 +61,13 @@ REG_PAIR BBPRegTable[] = { + {BBP_R106, 0x35}, /* for ShortGI throughput */ + }; + +-#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR)) ++#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(struct rt_reg_pair)) + + /* */ + /* ASIC register initialization sets */ + /* */ + +-RTMP_REG_PAIR MACRegTable[] = { ++struct rt_rtmp_reg_pair MACRegTable[] = { + #if defined(HW_BEACON_OFFSET) && (HW_BEACON_OFFSET == 0x200) + {BCN_OFFSET0, 0xf8f0e8e0}, /* 0x3800(e0), 0x3A00(e8), 0x3C00(f0), 0x3E00(f8), 512B for each beacon */ + {BCN_OFFSET1, 0x6f77d0c8}, /* 0x3200(c8), 0x3400(d0), 0x1DC0(77), 0x1BC0(6f), 512B for each beacon */ +@@ -124,20 +124,20 @@ RTMP_REG_PAIR MACRegTable[] = { + {PWR_PIN_CFG, 0x00000003}, /* patch for 2880-E */ + }; + +-RTMP_REG_PAIR STAMACRegTable[] = { ++struct rt_rtmp_reg_pair STAMACRegTable[] = { + {WMM_AIFSN_CFG, 0x00002273}, + {WMM_CWMIN_CFG, 0x00002344}, + {WMM_CWMAX_CFG, 0x000034aa}, + }; + +-#define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(RTMP_REG_PAIR)) +-#define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(RTMP_REG_PAIR)) ++#define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(struct rt_rtmp_reg_pair)) ++#define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(struct rt_rtmp_reg_pair)) + + /* + ======================================================================== + + Routine Description: +- Allocate RTMP_ADAPTER data block and do some initialization ++ Allocate struct rt_rtmp_adapter data block and do some initialization + + Arguments: + Adapter Pointer to our adapter +@@ -153,9 +153,9 @@ RTMP_REG_PAIR STAMACRegTable[] = { + ======================================================================== + */ + int RTMPAllocAdapterBlock(void *handle, +- OUT PRTMP_ADAPTER * ppAdapter) ++ struct rt_rtmp_adapter * * ppAdapter) + { +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_adapter *pAd; + int Status; + int index; + u8 *pBeaconBuf = NULL; +@@ -165,7 +165,7 @@ int RTMPAllocAdapterBlock(void *handle, + *ppAdapter = NULL; + + do { +- /* Allocate RTMP_ADAPTER memory block */ ++ /* Allocate struct rt_rtmp_adapter memory block */ + pBeaconBuf = kmalloc(MAX_BEACON_SIZE, MEM_ALLOC_FLAG); + if (pBeaconBuf == NULL) { + Status = NDIS_STATUS_FAILURE; +@@ -182,7 +182,7 @@ int RTMPAllocAdapterBlock(void *handle, + pAd->BeaconBuf = pBeaconBuf; + DBGPRINT(RT_DEBUG_OFF, + ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, +- (u32)sizeof(RTMP_ADAPTER))); ++ (u32)sizeof(struct rt_rtmp_adapter))); + + /* Init spin locks */ + NdisAllocateSpinLock(&pAd->MgmtRingLock); +@@ -230,7 +230,7 @@ int RTMPAllocAdapterBlock(void *handle, + + ======================================================================== + */ +-void RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) ++void RTMPReadTxPwrPerRate(struct rt_rtmp_adapter *pAd) + { + unsigned long data, Adata, Gdata; + u16 i, value, value2; +@@ -441,7 +441,7 @@ void RTMPReadTxPwrPerRate(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) ++void RTMPReadChannelPwr(struct rt_rtmp_adapter *pAd) + { + u8 i, choffset; + EEPROM_TX_PWR_STRUC Power; +@@ -650,7 +650,7 @@ void RTMPReadChannelPwr(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++int NICReadRegParameters(struct rt_rtmp_adapter *pAd, + void *WrapperConfigurationContext) + { + int Status = NDIS_STATUS_SUCCESS; +@@ -676,7 +676,7 @@ int NICReadRegParameters(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, u8 *mac_addr) ++void NICReadEEPROMParameters(struct rt_rtmp_adapter *pAd, u8 *mac_addr) + { + u32 data = 0; + u16 i, value, value2; +@@ -1133,7 +1133,7 @@ void NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, u8 *mac_addr) + + ======================================================================== + */ +-void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) ++void NICInitAsicFromEEPROM(struct rt_rtmp_adapter *pAd) + { + u32 data = 0; + u8 BBPR1 = 0; +@@ -1242,7 +1242,7 @@ void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + #ifdef RTMP_MAC_PCI + #ifdef RT30xx + if (IS_RT3090(pAd) || IS_RT3572(pAd) || IS_RT3390(pAd)) { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + if (pChipOps->AsicReverseRfFromSleepMode) + pChipOps->AsicReverseRfFromSleepMode(pAd); + } +@@ -1366,7 +1366,7 @@ void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) ++int NICInitializeAdapter(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset) + { + int Status = NDIS_STATUS_SUCCESS; + WPDMA_GLO_CFG_STRUC GloCfg; +@@ -1562,7 +1562,7 @@ retry: + + ======================================================================== + */ +-int NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) ++int NICInitializeAsic(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset) + { + unsigned long Index = 0; + u8 R0 = 0xff; +@@ -1929,7 +1929,7 @@ int NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset) + + ======================================================================== + */ +-void NICIssueReset(IN PRTMP_ADAPTER pAd) ++void NICIssueReset(struct rt_rtmp_adapter *pAd) + { + u32 Value = 0; + DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n")); +@@ -1965,15 +1965,15 @@ void NICIssueReset(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd) ++BOOLEAN NICCheckForHang(struct rt_rtmp_adapter *pAd) + { + return (FALSE); + } + +-void NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) ++void NICUpdateFifoStaCounters(struct rt_rtmp_adapter *pAd) + { + TX_STA_FIFO_STRUC StaFifo; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_mac_table_entry *pEntry; + u8 i = 0; + u8 pid = 0, wcid = 0; + char reTry; +@@ -2094,7 +2094,7 @@ void NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) ++void NICUpdateRawCounters(struct rt_rtmp_adapter *pAd) + { + u32 OldValue; /*, Value2; */ + /*unsigned long PageSum, OneSecTransmitCount; */ +@@ -2114,7 +2114,7 @@ void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + TX_AGG_CNT5_STRUC TxAggCnt5; + TX_AGG_CNT6_STRUC TxAggCnt6; + TX_AGG_CNT7_STRUC TxAggCnt7; +- COUNTER_RALINK *pRalinkCounters; ++ struct rt_counter_ralink *pRalinkCounters; + + pRalinkCounters = &pAd->RalinkCounters; + +@@ -2299,7 +2299,7 @@ void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void NICResetFromError(IN PRTMP_ADAPTER pAd) ++void NICResetFromError(struct rt_rtmp_adapter *pAd) + { + /* Reset BBP (according to alex, reset ASIC will force reset BBP */ + /* Therefore, skip the reset BBP */ +@@ -2317,7 +2317,7 @@ void NICResetFromError(IN PRTMP_ADAPTER pAd) + AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); + } + +-int NICLoadFirmware(IN PRTMP_ADAPTER pAd) ++int NICLoadFirmware(struct rt_rtmp_adapter *pAd) + { + int status = NDIS_STATUS_SUCCESS; + if (pAd->chipOps.loadFirmware) +@@ -2339,7 +2339,7 @@ int NICLoadFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void NICEraseFirmware(IN PRTMP_ADAPTER pAd) ++void NICEraseFirmware(struct rt_rtmp_adapter *pAd) + { + if (pAd->chipOps.eraseFirmware) + pAd->chipOps.eraseFirmware(pAd); +@@ -2367,7 +2367,7 @@ void NICEraseFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd) ++int NICLoadRateSwitchingParams(struct rt_rtmp_adapter *pAd) + { + return NDIS_STATUS_SUCCESS; + } +@@ -2500,7 +2500,7 @@ void RTMPMoveMemory(void *pDest, void *pSrc, unsigned long Length) + + ======================================================================== + */ +-void UserCfgInit(IN PRTMP_ADAPTER pAd) ++void UserCfgInit(struct rt_rtmp_adapter *pAd) + { + u32 key_index, bss_index; + +@@ -2673,7 +2673,7 @@ void UserCfgInit(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg.NdisRadioStateOff = FALSE; /* New to support microsoft disable radio with OID command */ + + pAd->StaCfg.RssiTrigger = 0; +- NdisZeroMemory(&pAd->StaCfg.RssiSample, sizeof(RSSI_SAMPLE)); ++ NdisZeroMemory(&pAd->StaCfg.RssiSample, sizeof(struct rt_rssi_sample)); + pAd->StaCfg.RssiTriggerMode = + RSSI_TRIGGERED_UPON_BELOW_THRESHOLD; + pAd->StaCfg.AtimWin = 0; +@@ -2793,7 +2793,7 @@ void UserCfgInit(IN PRTMP_ADAPTER pAd) + /*pAd->bTest1 = FALSE; */ + + /* initialize MAC table and allocate spin lock */ +- NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); ++ NdisZeroMemory(&pAd->MacTab, sizeof(struct rt_mac_table)); + InitializeQueueHeader(&pAd->MacTab.McastPsQueue); + NdisAllocateSpinLock(&pAd->MacTabLock); + +@@ -2875,8 +2875,8 @@ void AtoH(char *src, u8 *dest, int destlen) + + ======================================================================== + */ +-void RTMPInitTimer(IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, ++void RTMPInitTimer(struct rt_rtmp_adapter *pAd, ++ struct rt_ralink_timer *pTimer, + void *pTimerFunc, void *pData, IN BOOLEAN Repeat) + { + /* */ +@@ -2915,7 +2915,7 @@ void RTMPInitTimer(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) ++void RTMPSetTimer(struct rt_ralink_timer *pTimer, unsigned long Value) + { + if (pTimer->Valid) { + pTimer->TimerValue = Value; +@@ -2950,7 +2950,7 @@ void RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) + + ======================================================================== + */ +-void RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) ++void RTMPModTimer(struct rt_ralink_timer *pTimer, unsigned long Value) + { + BOOLEAN Cancel; + +@@ -2989,7 +2989,7 @@ void RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value) + + ======================================================================== + */ +-void RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) ++void RTMPCancelTimer(struct rt_ralink_timer *pTimer, OUT BOOLEAN * pCancelled) + { + if (pTimer->Valid) { + if (pTimer->State == FALSE) +@@ -3030,7 +3030,7 @@ void RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled) + + ======================================================================== + */ +-void RTMPSetLED(IN PRTMP_ADAPTER pAd, u8 Status) ++void RTMPSetLED(struct rt_rtmp_adapter *pAd, u8 Status) + { + /*unsigned long data; */ + u8 HighByte = 0; +@@ -3117,7 +3117,7 @@ void RTMPSetLED(IN PRTMP_ADAPTER pAd, u8 Status) + > -57 Excellent + ======================================================================== + */ +-void RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) ++void RTMPSetSignalLED(struct rt_rtmp_adapter *pAd, IN NDIS_802_11_RSSI Dbm) + { + u8 nLed = 0; + +@@ -3164,7 +3164,7 @@ void RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm) + Before Enable RX, make sure you have enabled Interrupt. + ======================================================================== + */ +-void RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) ++void RTMPEnableRxTx(struct rt_rtmp_adapter *pAd) + { + /* WPDMA_GLO_CFG_STRUC GloCfg; */ + /* unsigned long i = 0; */ +@@ -3193,12 +3193,12 @@ void RTMPEnableRxTx(IN PRTMP_ADAPTER pAd) + } + + /*+++Add by shiang, move from os/linux/rt_main_dev.c */ +-void CfgInitHook(PRTMP_ADAPTER pAd) ++void CfgInitHook(struct rt_rtmp_adapter *pAd) + { + pAd->bBroadComHT = TRUE; + } + +-int rt28xx_init(IN PRTMP_ADAPTER pAd, ++int rt28xx_init(struct rt_rtmp_adapter *pAd, + char *pDefaultMac, char *pHostName) + { + u32 index; +@@ -3476,12 +3476,12 @@ err0: + + /*---Add by shiang, move from os/linux/rt_main_dev.c */ + +-static int RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, int infType) ++static int RtmpChipOpsRegister(struct rt_rtmp_adapter *pAd, int infType) + { +- RTMP_CHIP_OP *pChipOps = &pAd->chipOps; ++ struct rt_rtmp_chip_op *pChipOps = &pAd->chipOps; + int status; + +- memset(pChipOps, 0, sizeof(RTMP_CHIP_OP)); ++ memset(pChipOps, 0, sizeof(struct rt_rtmp_chip_op)); + + /* set eeprom related hook functions */ + status = RtmpChipOpsEepromHook(pAd, infType); +@@ -3508,7 +3508,7 @@ static int RtmpChipOpsRegister(IN RTMP_ADAPTER * pAd, int infType) + return status; + } + +-int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) ++int RtmpRaDevCtrlInit(struct rt_rtmp_adapter *pAd, IN RTMP_INF_TYPE infType) + { + /*void *handle; */ + +@@ -3535,7 +3535,7 @@ int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType) + return 0; + } + +-BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) ++BOOLEAN RtmpRaDevCtrlExit(struct rt_rtmp_adapter *pAd) + { + + RTMPFreeAdapter(pAd); +@@ -3544,7 +3544,7 @@ BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd) + } + + /* not yet support MBSS */ +-struct net_device *get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID) ++struct net_device *get_netdev_from_bssid(struct rt_rtmp_adapter *pAd, u8 FromWhichBSSID) + { + struct net_device *dev_p = NULL; + +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 3d69527..683abad 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -80,7 +80,7 @@ + + ======================================================================== + */ +-int RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) ++int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd) + { + unsigned long i; + +@@ -107,7 +107,7 @@ int RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) ++int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd) + { + + int Status = NDIS_STATUS_SUCCESS; +@@ -172,7 +172,7 @@ int RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd) + return Status; + } + +-int RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++int RtmpAsicSendCommandToMcu(struct rt_rtmp_adapter *pAd, + u8 Command, + u8 Token, u8 Arg0, u8 Arg1) + { +diff --git a/drivers/staging/rt2860/common/rtmp_timer.c b/drivers/staging/rt2860/common/rtmp_timer.c +index d5648d8..42e47d9 100644 +--- a/drivers/staging/rt2860/common/rtmp_timer.c ++++ b/drivers/staging/rt2860/common/rtmp_timer.c +@@ -74,15 +74,15 @@ BUILD_TIMER_FUNCTION(LedCtrlMain); + #endif + + #ifdef RTMP_TIMER_TASK_SUPPORT +-static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) ++static void RtmpTimerQHandle(struct rt_rtmp_adapter *pAd) + { + #ifndef KTHREAD_SUPPORT + int status; + #endif +- RALINK_TIMER_STRUCT *pTimer; +- RTMP_TIMER_TASK_ENTRY *pEntry; ++ struct rt_ralink_timer *pTimer; ++ struct rt_rtmp_timer_task_entry *pEntry; + unsigned long irqFlag; +- RTMP_OS_TASK *pTask; ++ struct rt_rtmp_os_task *pTask; + + pTask = &pAd->timerTask; + while (!pTask->task_killed) { +@@ -140,11 +140,11 @@ static void RtmpTimerQHandle(RTMP_ADAPTER * pAd) + + int RtmpTimerQThread(IN void *Context) + { +- RTMP_OS_TASK *pTask; +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_os_task *pTask; ++ struct rt_rtmp_adapter *pAd; + +- pTask = (RTMP_OS_TASK *) Context; +- pAd = (PRTMP_ADAPTER) pTask->priv; ++ pTask = (struct rt_rtmp_os_task *)Context; ++ pAd = (struct rt_rtmp_adapter *)pTask->priv; + + RtmpOSTaskCustomize(pTask); + +@@ -174,12 +174,12 @@ int RtmpTimerQThread(IN void *Context) + + } + +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, +- IN RALINK_TIMER_STRUCT * pTimer) ++struct rt_rtmp_timer_task_entry *RtmpTimerQInsert(struct rt_rtmp_adapter *pAd, ++ struct rt_ralink_timer *pTimer) + { +- RTMP_TIMER_TASK_ENTRY *pQNode = NULL, *pQTail; ++ struct rt_rtmp_timer_task_entry *pQNode = NULL, *pQTail; + unsigned long irqFlags; +- RTMP_OS_TASK *pTask = &pAd->timerTask; ++ struct rt_rtmp_os_task *pTask = &pAd->timerTask; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); + if (pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT) { +@@ -211,9 +211,9 @@ RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, + return pQNode; + } + +-BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, IN RALINK_TIMER_STRUCT * pTimer) ++BOOLEAN RtmpTimerQRemove(struct rt_rtmp_adapter *pAd, struct rt_ralink_timer *pTimer) + { +- RTMP_TIMER_TASK_ENTRY *pNode, *pPrev = NULL; ++ struct rt_rtmp_timer_task_entry *pNode, *pPrev = NULL; + unsigned long irqFlags; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +@@ -245,9 +245,9 @@ BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, IN RALINK_TIMER_STRUCT * pTimer) + return TRUE; + } + +-void RtmpTimerQExit(RTMP_ADAPTER * pAd) ++void RtmpTimerQExit(struct rt_rtmp_adapter *pAd) + { +- RTMP_TIMER_TASK_ENTRY *pTimerQ; ++ struct rt_rtmp_timer_task_entry *pTimerQ; + unsigned long irqFlags; + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +@@ -267,10 +267,10 @@ void RtmpTimerQExit(RTMP_ADAPTER * pAd) + + } + +-void RtmpTimerQInit(RTMP_ADAPTER * pAd) ++void RtmpTimerQInit(struct rt_rtmp_adapter *pAd) + { + int i; +- RTMP_TIMER_TASK_ENTRY *pQNode, *pEntry; ++ struct rt_rtmp_timer_task_entry *pQNode, *pEntry; + unsigned long irqFlags; + + NdisAllocateSpinLock(&pAd->TimerQLock); +@@ -278,12 +278,12 @@ void RtmpTimerQInit(RTMP_ADAPTER * pAd) + NdisZeroMemory(&pAd->TimerQ, sizeof(pAd->TimerQ)); + + os_alloc_mem(pAd, &pAd->TimerQ.pTimerQPoll, +- sizeof(RTMP_TIMER_TASK_ENTRY) * TIMER_QUEUE_SIZE_MAX); ++ sizeof(struct rt_rtmp_timer_task_entry) * TIMER_QUEUE_SIZE_MAX); + if (pAd->TimerQ.pTimerQPoll) { + pEntry = NULL; +- pQNode = (RTMP_TIMER_TASK_ENTRY *) pAd->TimerQ.pTimerQPoll; ++ pQNode = (struct rt_rtmp_timer_task_entry *)pAd->TimerQ.pTimerQPoll; + NdisZeroMemory(pAd->TimerQ.pTimerQPoll, +- sizeof(RTMP_TIMER_TASK_ENTRY) * ++ sizeof(struct rt_rtmp_timer_task_entry) * + TIMER_QUEUE_SIZE_MAX); + + RTMP_INT_LOCK(&pAd->TimerQLock, irqFlags); +diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c +index b89ad5f..51e38d8 100644 +--- a/drivers/staging/rt2860/common/spectrum.c ++++ b/drivers/staging/rt2860/common/spectrum.c +@@ -40,7 +40,7 @@ + #include "action.h" + + /* The regulatory information in the USA (US) */ +-DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = { ++struct rt_dot11_regulatory_information USARegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ + {0, {0, 0, {0} + } +@@ -95,10 +95,10 @@ DOT11_REGULATORY_INFORMATION USARegulatoryInfo[] = { + } + }; + +-#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++#define USA_REGULATORY_INFO_SIZE (sizeof(USARegulatoryInfo) / sizeof(struct rt_dot11_regulatory_information)) + + /* The regulatory information in Europe */ +-DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = { ++struct rt_dot11_regulatory_information EuropeRegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ + {0, {0, 0, {0} + } +@@ -121,10 +121,10 @@ DOT11_REGULATORY_INFORMATION EuropeRegulatoryInfo[] = { + } + }; + +-#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++#define EU_REGULATORY_INFO_SIZE (sizeof(EuropeRegulatoryInfo) / sizeof(struct rt_dot11_regulatory_information)) + + /* The regulatory information in Japan */ +-DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = { ++struct rt_dot11_regulatory_information JapanRegulatoryInfo[] = { + /* "regulatory class" "number of channels" "Max Tx Pwr" "channel list" */ + {0, {0, 0, {0} + } +@@ -259,17 +259,17 @@ DOT11_REGULATORY_INFORMATION JapanRegulatoryInfo[] = { + } + }; + +-#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(DOT11_REGULATORY_INFORMATION)) ++#define JP_REGULATORY_INFO_SIZE (sizeof(JapanRegulatoryInfo) / sizeof(struct rt_dot11_regulatory_information)) + +-char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) ++char RTMP_GetTxPwr(struct rt_rtmp_adapter *pAd, IN HTTRANSMIT_SETTING HTTxMode) + { +- typedef struct __TX_PWR_CFG { ++ struct tx_pwr_cfg { + u8 Mode; + u8 MCS; + u16 req; + u8 shift; + u32 BitMask; +- } TX_PWR_CFG; ++ }; + + u32 Value; + int Idx; +@@ -279,7 +279,7 @@ char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + char DaltaPwr; + unsigned long TxPwr[5]; + +- TX_PWR_CFG TxPwrCfg[] = { ++ struct tx_pwr_cfg TxPwrCfg[] = { + {MODE_CCK, 0, 0, 4, 0x000000f0}, + {MODE_CCK, 1, 0, 0, 0x0000000f}, + {MODE_CCK, 2, 0, 12, 0x0000f000}, +@@ -310,7 +310,7 @@ char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + {MODE_HTMIX, 14, 3, 12, 0x0000f000}, + {MODE_HTMIX, 15, 3, 8, 0x00000f00} + }; +-#define MAX_TXPWR_TAB_SIZE (sizeof(TxPwrCfg) / sizeof(TX_PWR_CFG)) ++#define MAX_TXPWR_TAB_SIZE (sizeof(TxPwrCfg) / sizeof(struct tx_pwr_cfg)) + + CurTxPwr = 19; + +@@ -395,15 +395,15 @@ char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode) + return CurTxPwr; + } + +-void MeasureReqTabInit(IN PRTMP_ADAPTER pAd) ++void MeasureReqTabInit(struct rt_rtmp_adapter *pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + + pAd->CommonCfg.pMeasureReqTab = +- kmalloc(sizeof(MEASURE_REQ_TAB), GFP_ATOMIC); ++ kmalloc(sizeof(struct rt_measure_req_tab), GFP_ATOMIC); + if (pAd->CommonCfg.pMeasureReqTab) + NdisZeroMemory(pAd->CommonCfg.pMeasureReqTab, +- sizeof(MEASURE_REQ_TAB)); ++ sizeof(struct rt_measure_req_tab)); + else + DBGPRINT(RT_DEBUG_ERROR, + ("%s Fail to alloc memory for pAd->CommonCfg.pMeasureReqTab.\n", +@@ -412,7 +412,7 @@ void MeasureReqTabInit(IN PRTMP_ADAPTER pAd) + return; + } + +-void MeasureReqTabExit(IN PRTMP_ADAPTER pAd) ++void MeasureReqTabExit(struct rt_rtmp_adapter *pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.MeasureReqTabLock); + +@@ -423,12 +423,12 @@ void MeasureReqTabExit(IN PRTMP_ADAPTER pAd) + return; + } + +-PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++struct rt_measure_req_entry *MeasureReqLookUp(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { + u32 HashIdx; +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL; +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_measure_req_tab *pTab = pAd->CommonCfg.pMeasureReqTab; ++ struct rt_measure_req_entry *pEntry = NULL; ++ struct rt_measure_req_entry *pPrevEntry = NULL; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -455,12 +455,12 @@ PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) + return pEntry; + } + +-PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++struct rt_measure_req_entry *MeasureReqInsert(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { + int i; + unsigned long HashIdx; +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL, pCurrEntry; ++ struct rt_measure_req_tab *pTab = pAd->CommonCfg.pMeasureReqTab; ++ struct rt_measure_req_entry *pEntry = NULL, *pCurrEntry; + unsigned long Now; + + if (pTab == NULL) { +@@ -482,11 +482,11 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + lastTime + + MQ_REQ_AGE_OUT))) + { +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_measure_req_entry *pPrevEntry = NULL; + unsigned long HashIdx = + MQ_DIALOGTOKEN_HASH_INDEX(pEntry-> + DialogToken); +- PMEASURE_REQ_ENTRY pProbeEntry = ++ struct rt_measure_req_entry *pProbeEntry = + pTab->Hash[HashIdx]; + + /* update Hash list */ +@@ -507,7 +507,7 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + } while (pProbeEntry); + + NdisZeroMemory(pEntry, +- sizeof(MEASURE_REQ_ENTRY)); ++ sizeof(struct rt_measure_req_entry)); + pTab->Size--; + + break; +@@ -548,10 +548,10 @@ PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + return pEntry; + } + +-void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++void MeasureReqDelete(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { +- PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab; +- PMEASURE_REQ_ENTRY pEntry = NULL; ++ struct rt_measure_req_tab *pTab = pAd->CommonCfg.pMeasureReqTab; ++ struct rt_measure_req_entry *pEntry = NULL; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -566,9 +566,9 @@ void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + + pEntry = MeasureReqLookUp(pAd, DialogToken); + if (pEntry != NULL) { +- PMEASURE_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_measure_req_entry *pPrevEntry = NULL; + unsigned long HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PMEASURE_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; ++ struct rt_measure_req_entry *pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock); + /* update Hash list */ +@@ -586,7 +586,7 @@ void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- NdisZeroMemory(pEntry, sizeof(MEASURE_REQ_ENTRY)); ++ NdisZeroMemory(pEntry, sizeof(struct rt_measure_req_entry)); + pTab->Size--; + + RTMP_SEM_UNLOCK(&pAd->CommonCfg.MeasureReqTabLock); +@@ -595,13 +595,13 @@ void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + return; + } + +-void TpcReqTabInit(IN PRTMP_ADAPTER pAd) ++void TpcReqTabInit(struct rt_rtmp_adapter *pAd) + { + NdisAllocateSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +- pAd->CommonCfg.pTpcReqTab = kmalloc(sizeof(TPC_REQ_TAB), GFP_ATOMIC); ++ pAd->CommonCfg.pTpcReqTab = kmalloc(sizeof(struct rt_tpc_req_tab), GFP_ATOMIC); + if (pAd->CommonCfg.pTpcReqTab) +- NdisZeroMemory(pAd->CommonCfg.pTpcReqTab, sizeof(TPC_REQ_TAB)); ++ NdisZeroMemory(pAd->CommonCfg.pTpcReqTab, sizeof(struct rt_tpc_req_tab)); + else + DBGPRINT(RT_DEBUG_ERROR, + ("%s Fail to alloc memory for pAd->CommonCfg.pTpcReqTab.\n", +@@ -610,7 +610,7 @@ void TpcReqTabInit(IN PRTMP_ADAPTER pAd) + return; + } + +-void TpcReqTabExit(IN PRTMP_ADAPTER pAd) ++void TpcReqTabExit(struct rt_rtmp_adapter *pAd) + { + NdisFreeSpinLock(&pAd->CommonCfg.TpcReqTabLock); + +@@ -621,12 +621,12 @@ void TpcReqTabExit(IN PRTMP_ADAPTER pAd) + return; + } + +-static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++static struct rt_tpc_req_entry *TpcReqLookUp(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { + u32 HashIdx; +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL; +- PTPC_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_tpc_req_tab *pTab = pAd->CommonCfg.pTpcReqTab; ++ struct rt_tpc_req_entry *pEntry = NULL; ++ struct rt_tpc_req_entry *pPrevEntry = NULL; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -653,12 +653,12 @@ static PTPC_REQ_ENTRY TpcReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken) + return pEntry; + } + +-static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++static struct rt_tpc_req_entry *TpcReqInsert(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { + int i; + unsigned long HashIdx; +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL, pCurrEntry; ++ struct rt_tpc_req_tab *pTab = pAd->CommonCfg.pTpcReqTab; ++ struct rt_tpc_req_entry *pEntry = NULL, *pCurrEntry; + unsigned long Now; + + if (pTab == NULL) { +@@ -680,11 +680,11 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + lastTime + + TPC_REQ_AGE_OUT))) + { +- PTPC_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_tpc_req_entry *pPrevEntry = NULL; + unsigned long HashIdx = + TPC_DIALOGTOKEN_HASH_INDEX(pEntry-> + DialogToken); +- PTPC_REQ_ENTRY pProbeEntry = ++ struct rt_tpc_req_entry *pProbeEntry = + pTab->Hash[HashIdx]; + + /* update Hash list */ +@@ -704,7 +704,7 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY)); ++ NdisZeroMemory(pEntry, sizeof(struct rt_tpc_req_entry)); + pTab->Size--; + + break; +@@ -745,10 +745,10 @@ static PTPC_REQ_ENTRY TpcReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken) + return pEntry; + } + +-static void TpcReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) ++static void TpcReqDelete(struct rt_rtmp_adapter *pAd, u8 DialogToken) + { +- PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab; +- PTPC_REQ_ENTRY pEntry = NULL; ++ struct rt_tpc_req_tab *pTab = pAd->CommonCfg.pTpcReqTab; ++ struct rt_tpc_req_entry *pEntry = NULL; + + if (pTab == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -763,9 +763,9 @@ static void TpcReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + + pEntry = TpcReqLookUp(pAd, DialogToken); + if (pEntry != NULL) { +- PTPC_REQ_ENTRY pPrevEntry = NULL; ++ struct rt_tpc_req_entry *pPrevEntry = NULL; + unsigned long HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken); +- PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx]; ++ struct rt_tpc_req_entry *pProbeEntry = pTab->Hash[HashIdx]; + + RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock); + /* update Hash list */ +@@ -783,7 +783,7 @@ static void TpcReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY)); ++ NdisZeroMemory(pEntry, sizeof(struct rt_tpc_req_entry)); + pTab->Size--; + + RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock); +@@ -802,7 +802,7 @@ static void TpcReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken) + Return : Current Time Stamp. + ========================================================================== + */ +-static u64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) ++static u64 GetCurrentTimeStamp(struct rt_rtmp_adapter *pAd) + { + /* get current time stamp. */ + return 0; +@@ -818,7 +818,7 @@ static u64 GetCurrentTimeStamp(IN PRTMP_ADAPTER pAd) + Return : Current Time Stamp. + ========================================================================== + */ +-static u8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, u8 Wcid) ++static u8 GetCurTxPwr(struct rt_rtmp_adapter *pAd, u8 Wcid) + { + return 16; /* 16 dBm */ + } +@@ -833,7 +833,7 @@ static u8 GetCurTxPwr(IN PRTMP_ADAPTER pAd, u8 Wcid) + Return : Current Time Stamp. + ========================================================================== + */ +-void InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++void InsertChannelRepIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, + char *pCountry, u8 RegulatoryClass) +@@ -900,7 +900,7 @@ void InsertChannelRepIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void InsertDialogToken(IN PRTMP_ADAPTER pAd, ++void InsertDialogToken(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, u8 DialogToken) + { +@@ -924,7 +924,7 @@ void InsertDialogToken(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void InsertTpcReqIE(IN PRTMP_ADAPTER pAd, ++static void InsertTpcReqIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, unsigned long *pFrameLen) + { + unsigned long TempLen; +@@ -953,15 +953,15 @@ static void InsertTpcReqIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++void InsertTpcReportIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, + u8 TxPwr, u8 LinkMargin) + { + unsigned long TempLen; +- unsigned long Len = sizeof(TPC_REPORT_INFO); ++ unsigned long Len = sizeof(struct rt_tpc_report_info); + u8 ElementID = IE_TPC_REPORT; +- TPC_REPORT_INFO TpcReportIE; ++ struct rt_tpc_report_info TpcReportIE; + + TpcReportIE.TxPwr = TxPwr; + TpcReportIE.LinkMargin = LinkMargin; +@@ -990,16 +990,16 @@ void InsertTpcReportIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, ++static void InsertChSwAnnIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, + u8 ChSwMode, + u8 NewChannel, u8 ChSwCnt) + { + unsigned long TempLen; +- unsigned long Len = sizeof(CH_SW_ANN_INFO); ++ unsigned long Len = sizeof(struct rt_ch_sw_ann_info); + u8 ElementID = IE_CHANNEL_SWITCH_ANNOUNCEMENT; +- CH_SW_ANN_INFO ChSwAnnIE; ++ struct rt_ch_sw_ann_info ChSwAnnIE; + + ChSwAnnIE.ChSwMode = ChSwMode; + ChSwAnnIE.Channel = NewChannel; +@@ -1031,10 +1031,10 @@ static void InsertChSwAnnIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, ++static void InsertMeasureReqIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, +- u8 Len, IN PMEASURE_REQ_INFO pMeasureReqIE) ++ u8 Len, struct rt_measure_req_info * pMeasureReqIE) + { + unsigned long TempLen; + u8 ElementID = IE_MEASUREMENT_REQUEST; +@@ -1042,7 +1042,7 @@ static void InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &ElementID, + 1, &Len, +- sizeof(MEASURE_REQ_INFO), pMeasureReqIE, END_OF_ARGS); ++ sizeof(struct rt_measure_req_info), pMeasureReqIE, END_OF_ARGS); + + *pFrameLen = *pFrameLen + TempLen; + +@@ -1066,17 +1066,17 @@ static void InsertMeasureReqIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, ++static void InsertMeasureReportIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, +- IN PMEASURE_REPORT_INFO pMeasureReportIE, ++ struct rt_measure_report_info * pMeasureReportIE, + u8 ReportLnfoLen, u8 *pReportInfo) + { + unsigned long TempLen; + unsigned long Len; + u8 ElementID = IE_MEASUREMENT_REPORT; + +- Len = sizeof(MEASURE_REPORT_INFO) + ReportLnfoLen; ++ Len = sizeof(struct rt_measure_report_info) + ReportLnfoLen; + + MakeOutgoingFrame(pFrameBuf, &TempLen, + 1, &ElementID, +@@ -1105,7 +1105,7 @@ static void InsertMeasureReportIE(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++void MakeMeasurementReqFrame(struct rt_rtmp_adapter *pAd, + u8 *pOutBuffer, + unsigned long *pFrameLen, + u8 TotalLen, +@@ -1116,7 +1116,7 @@ void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + u8 MeasureReqType, u8 NumOfRepetitions) + { + unsigned long TempLen; +- MEASURE_REQ_INFO MeasureReqIE; ++ struct rt_measure_req_info MeasureReqIE; + + InsertActField(pAd, (pOutBuffer + *pFrameLen), pFrameLen, Category, + Action); +@@ -1133,7 +1133,7 @@ void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + *pFrameLen += TempLen; + } + /* prepare Measurement IE. */ +- NdisZeroMemory(&MeasureReqIE, sizeof(MEASURE_REQ_INFO)); ++ NdisZeroMemory(&MeasureReqIE, sizeof(struct rt_measure_req_info)); + MeasureReqIE.Token = MeasureToken; + MeasureReqIE.ReqMode.word = MeasureReqMode; + MeasureReqIE.ReqType = MeasureReqType; +@@ -1155,7 +1155,7 @@ void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++void EnqueueMeasurementRep(struct rt_rtmp_adapter *pAd, + u8 *pDA, + u8 DialogToken, + u8 MeasureToken, +@@ -1166,8 +1166,8 @@ void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen; +- HEADER_802_11 ActHdr; +- MEASURE_REPORT_INFO MeasureRepIE; ++ struct rt_header_802_11 ActHdr; ++ struct rt_measure_report_info MeasureRepIE; + + /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +@@ -1179,8 +1179,8 @@ void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(struct rt_header_802_11)); ++ FrameLen = sizeof(struct rt_header_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_MRP); +@@ -1189,7 +1189,7 @@ void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + InsertDialogToken(pAd, (pOutBuffer + FrameLen), &FrameLen, DialogToken); + + /* prepare Measurement IE. */ +- NdisZeroMemory(&MeasureRepIE, sizeof(MEASURE_REPORT_INFO)); ++ NdisZeroMemory(&MeasureRepIE, sizeof(struct rt_measure_report_info)); + MeasureRepIE.Token = MeasureToken; + MeasureRepIE.ReportMode = MeasureReqMode; + MeasureRepIE.ReportType = MeasureReqType; +@@ -1214,13 +1214,13 @@ void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken) ++void EnqueueTPCReq(struct rt_rtmp_adapter *pAd, u8 *pDA, u8 DialogToken) + { + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen; + +- HEADER_802_11 ActHdr; ++ struct rt_header_802_11 ActHdr; + + /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +@@ -1232,8 +1232,8 @@ void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken) + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(struct rt_header_802_11)); ++ FrameLen = sizeof(struct rt_header_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_TPCRQ); +@@ -1262,7 +1262,7 @@ void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken) + Return : None. + ========================================================================== + */ +-void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++void EnqueueTPCRep(struct rt_rtmp_adapter *pAd, + u8 *pDA, + u8 DialogToken, u8 TxPwr, u8 LinkMargin) + { +@@ -1270,7 +1270,7 @@ void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + int NStatus; + unsigned long FrameLen; + +- HEADER_802_11 ActHdr; ++ struct rt_header_802_11 ActHdr; + + /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +@@ -1282,8 +1282,8 @@ void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(struct rt_header_802_11)); ++ FrameLen = sizeof(struct rt_header_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_TPCRP); +@@ -1315,14 +1315,14 @@ void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++void EnqueueChSwAnn(struct rt_rtmp_adapter *pAd, + u8 *pDA, u8 ChSwMode, u8 NewCh) + { + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen; + +- HEADER_802_11 ActHdr; ++ struct rt_header_802_11 ActHdr; + + /* build action frame header. */ + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, pDA, +@@ -1334,8 +1334,8 @@ void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + ("%s() allocate memory failed \n", __func__)); + return; + } +- NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(struct rt_header_802_11)); ++ FrameLen = sizeof(struct rt_header_802_11); + + InsertActField(pAd, (pOutBuffer + FrameLen), &FrameLen, + CATEGORY_SPECTRUM, SPEC_CHANNEL_SWITCH); +@@ -1349,7 +1349,7 @@ void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + return; + } + +-static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, u8 Channel) ++static BOOLEAN DfsRequirementCheck(struct rt_rtmp_adapter *pAd, u8 Channel) + { + BOOLEAN Result = FALSE; + int i; +@@ -1376,13 +1376,13 @@ static BOOLEAN DfsRequirementCheck(IN PRTMP_ADAPTER pAd, u8 Channel) + return Result; + } + +-void NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++void NotifyChSwAnnToPeerAPs(struct rt_rtmp_adapter *pAd, + u8 *pRA, + u8 *pTA, u8 ChSwMode, u8 Channel) + { + } + +-static void StartDFSProcedure(IN PRTMP_ADAPTER pAd, ++static void StartDFSProcedure(struct rt_rtmp_adapter *pAd, + u8 Channel, u8 ChSwMode) + { + /* start DFS procedure */ +@@ -1415,18 +1415,18 @@ static void StartDFSProcedure(IN PRTMP_ADAPTER pAd, + +----+-----+-----------+------------+-----------+ + 1 1 1 1 1 + */ +-static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, ++static BOOLEAN PeerChSwAnnSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, +- OUT PCH_SW_ANN_INFO pChSwAnnInfo) ++ struct rt_ch_sw_ann_info * pChSwAnnInfo) + { +- PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; ++ struct rt_frame_802_11 * Fr = (struct rt_frame_802_11 *) pMsg; + u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; ++ struct rt_eid * eid_ptr; + + /* skip 802.11 header. */ +- MsgLen -= sizeof(HEADER_802_11); ++ MsgLen -= sizeof(struct rt_header_802_11); + + /* skip category and action code. */ + pFramePtr += 2; +@@ -1435,7 +1435,7 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + if (pChSwAnnInfo == NULL) + return result; + +- eid_ptr = (PEID_STRUCT) pFramePtr; ++ eid_ptr = (struct rt_eid *) pFramePtr; + while (((u8 *) eid_ptr + eid_ptr->Len + 1) < + ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { +@@ -1453,7 +1453,7 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (struct rt_eid *) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1472,23 +1472,23 @@ static BOOLEAN PeerChSwAnnSanity(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, ++static BOOLEAN PeerMeasureReqSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, + u8 *pDialogToken, +- OUT PMEASURE_REQ_INFO pMeasureReqInfo, +- OUT PMEASURE_REQ pMeasureReq) ++ struct rt_measure_req_info * pMeasureReqInfo, ++ struct rt_measure_req * pMeasureReq) + { +- PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; ++ struct rt_frame_802_11 * Fr = (struct rt_frame_802_11 *) pMsg; + u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; ++ struct rt_eid * eid_ptr; + u8 *ptr; + u64 MeasureStartTime; + u16 MeasureDuration; + + /* skip 802.11 header. */ +- MsgLen -= sizeof(HEADER_802_11); ++ MsgLen -= sizeof(struct rt_header_802_11); + + /* skip category and action code. */ + pFramePtr += 2; +@@ -1501,7 +1501,7 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT) pFramePtr; ++ eid_ptr = (struct rt_eid *) pFramePtr; + while (((u8 *) eid_ptr + eid_ptr->Len + 1) < + ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { +@@ -1526,7 +1526,7 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (struct rt_eid *) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1566,22 +1566,22 @@ static BOOLEAN PeerMeasureReqSanity(IN PRTMP_ADAPTER pAd, + +-----+---------------+---------------------+-------+------------+----------+ + 0 1 2 3 4 5-7 + */ +-static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, ++static BOOLEAN PeerMeasureReportSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, + u8 *pDialogToken, +- OUT PMEASURE_REPORT_INFO ++ struct rt_measure_report_info * + pMeasureReportInfo, + u8 *pReportBuf) + { +- PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; ++ struct rt_frame_802_11 * Fr = (struct rt_frame_802_11 *) pMsg; + u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; ++ struct rt_eid * eid_ptr; + u8 *ptr; + + /* skip 802.11 header. */ +- MsgLen -= sizeof(HEADER_802_11); ++ MsgLen -= sizeof(struct rt_header_802_11); + + /* skip category and action code. */ + pFramePtr += 2; +@@ -1594,7 +1594,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT) pFramePtr; ++ eid_ptr = (struct rt_eid *) pFramePtr; + while (((u8 *) eid_ptr + eid_ptr->Len + 1) < + ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { +@@ -1606,8 +1606,8 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(&pMeasureReportInfo->ReportType, + eid_ptr->Octet + 2, 1); + if (pMeasureReportInfo->ReportType == RM_BASIC) { +- PMEASURE_BASIC_REPORT pReport = +- (PMEASURE_BASIC_REPORT) pReportBuf; ++ struct rt_measure_basic_report * pReport = ++ (struct rt_measure_basic_report *) pReportBuf; + ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, +@@ -1617,8 +1617,8 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(&pReport->Map, ptr + 11, 1); + + } else if (pMeasureReportInfo->ReportType == RM_CCA) { +- PMEASURE_CCA_REPORT pReport = +- (PMEASURE_CCA_REPORT) pReportBuf; ++ struct rt_measure_cca_report * pReport = ++ (struct rt_measure_cca_report *) pReportBuf; + ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, +@@ -1630,8 +1630,8 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + + } else if (pMeasureReportInfo->ReportType == + RM_RPI_HISTOGRAM) { +- PMEASURE_RPI_REPORT pReport = +- (PMEASURE_RPI_REPORT) pReportBuf; ++ struct rt_measure_rpi_report * pReport = ++ (struct rt_measure_rpi_report *) pReportBuf; + ptr = (u8 *)(eid_ptr->Octet + 3); + NdisMoveMemory(&pReport->ChNum, ptr, 1); + NdisMoveMemory(&pReport->MeasureStartTime, +@@ -1647,7 +1647,7 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (struct rt_eid *) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1666,16 +1666,16 @@ static BOOLEAN PeerMeasureReportSanity(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, ++static BOOLEAN PeerTpcReqSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, u8 *pDialogToken) + { +- PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; ++ struct rt_frame_802_11 * Fr = (struct rt_frame_802_11 *) pMsg; + u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; ++ struct rt_eid * eid_ptr; + +- MsgLen -= sizeof(HEADER_802_11); ++ MsgLen -= sizeof(struct rt_header_802_11); + + /* skip category and action code. */ + pFramePtr += 2; +@@ -1688,7 +1688,7 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT) pFramePtr; ++ eid_ptr = (struct rt_eid *) pFramePtr; + while (((u8 *) eid_ptr + eid_ptr->Len + 1) < + ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { +@@ -1699,7 +1699,7 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (struct rt_eid *) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1719,18 +1719,18 @@ static BOOLEAN PeerTpcReqSanity(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, ++static BOOLEAN PeerTpcRepSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, + u8 *pDialogToken, +- OUT PTPC_REPORT_INFO pTpcRepInfo) ++ struct rt_tpc_report_info * pTpcRepInfo) + { +- PFRAME_802_11 Fr = (PFRAME_802_11) pMsg; ++ struct rt_frame_802_11 * Fr = (struct rt_frame_802_11 *) pMsg; + u8 *pFramePtr = Fr->Octet; + BOOLEAN result = FALSE; +- PEID_STRUCT eid_ptr; ++ struct rt_eid * eid_ptr; + +- MsgLen -= sizeof(HEADER_802_11); ++ MsgLen -= sizeof(struct rt_header_802_11); + + /* skip category and action code. */ + pFramePtr += 2; +@@ -1743,7 +1743,7 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + pFramePtr += 1; + MsgLen -= 1; + +- eid_ptr = (PEID_STRUCT) pFramePtr; ++ eid_ptr = (struct rt_eid *) pFramePtr; + while (((u8 *) eid_ptr + eid_ptr->Len + 1) < + ((u8 *)pFramePtr + MsgLen)) { + switch (eid_ptr->Eid) { +@@ -1757,7 +1757,7 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + default: + break; + } +- eid_ptr = (PEID_STRUCT) ((u8 *) eid_ptr + 2 + eid_ptr->Len); ++ eid_ptr = (struct rt_eid *) ((u8 *) eid_ptr + 2 + eid_ptr->Len); + } + + return result; +@@ -1774,14 +1774,14 @@ static BOOLEAN PeerTpcRepSanity(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerChSwAnnAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- CH_SW_ANN_INFO ChSwAnnInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; ++ struct rt_ch_sw_ann_info ChSwAnnInfo; ++ struct rt_frame_802_11 * pFr = (struct rt_frame_802_11 *) Elem->Msg; + u8 index = 0, Channel = 0, NewChannel = 0; + unsigned long Bssidx = 0; + +- NdisZeroMemory(&ChSwAnnInfo, sizeof(CH_SW_ANN_INFO)); ++ NdisZeroMemory(&ChSwAnnInfo, sizeof(struct rt_ch_sw_ann_info)); + if (!PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo)) { + DBGPRINT(RT_DEBUG_TRACE, + ("Invalid Channel Switch Action Frame.\n")); +@@ -1856,13 +1856,13 @@ static void PeerChSwAnnAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-static void PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++static void PeerMeasureReqAction(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem) + { +- PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; ++ struct rt_frame_802_11 * pFr = (struct rt_frame_802_11 *) Elem->Msg; + u8 DialogToken; +- MEASURE_REQ_INFO MeasureReqInfo; +- MEASURE_REQ MeasureReq; ++ struct rt_measure_req_info MeasureReqInfo; ++ struct rt_measure_req MeasureReq; + MEASURE_REPORT_MODE ReportMode; + + if (PeerMeasureReqSanity +@@ -1889,11 +1889,11 @@ static void PeerMeasureReqAction(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++static void PeerMeasureReportAction(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem) + { +- MEASURE_REPORT_INFO MeasureReportInfo; +- PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; ++ struct rt_measure_report_info MeasureReportInfo; ++ struct rt_frame_802_11 * pFr = (struct rt_frame_802_11 *) Elem->Msg; + u8 DialogToken; + u8 *pMeasureReportInfo; + +@@ -1901,20 +1901,20 @@ static void PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + /* return; */ + + if ((pMeasureReportInfo = +- kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL) { ++ kmalloc(sizeof(struct rt_measure_rpi_report), GFP_ATOMIC)) == NULL) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s unable to alloc memory for measure report buffer (size=%zu).\n", +- __func__, sizeof(MEASURE_RPI_REPORT))); ++ __func__, sizeof(struct rt_measure_rpi_report))); + return; + } + +- NdisZeroMemory(&MeasureReportInfo, sizeof(MEASURE_REPORT_INFO)); +- NdisZeroMemory(pMeasureReportInfo, sizeof(MEASURE_RPI_REPORT)); ++ NdisZeroMemory(&MeasureReportInfo, sizeof(struct rt_measure_report_info)); ++ NdisZeroMemory(pMeasureReportInfo, sizeof(struct rt_measure_rpi_report)); + if (PeerMeasureReportSanity + (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &MeasureReportInfo, + pMeasureReportInfo)) { + do { +- PMEASURE_REQ_ENTRY pEntry = NULL; ++ struct rt_measure_req_entry *pEntry = NULL; + + /* Not a autonomous measure report. */ + /* check the dialog token field. drop it if the dialog token doesn't match. */ +@@ -1927,8 +1927,8 @@ static void PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + MeasureReqDelete(pAd, pEntry->DialogToken); + + if (MeasureReportInfo.ReportType == RM_BASIC) { +- PMEASURE_BASIC_REPORT pBasicReport = +- (PMEASURE_BASIC_REPORT) pMeasureReportInfo; ++ struct rt_measure_basic_report * pBasicReport = ++ (struct rt_measure_basic_report *) pMeasureReportInfo; + if ((pBasicReport->Map.field.Radar) + && + (DfsRequirementCheck +@@ -1965,9 +1965,9 @@ static void PeerMeasureReportAction(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-static void PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerTpcReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- PFRAME_802_11 pFr = (PFRAME_802_11) Elem->Msg; ++ struct rt_frame_802_11 * pFr = (struct rt_frame_802_11 *) Elem->Msg; + u8 *pFramePtr = pFr->Octet; + u8 DialogToken; + u8 TxPwr = GetCurTxPwr(pAd, Elem->Wcid); +@@ -2007,13 +2007,13 @@ static void PeerTpcReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-static void PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++static void PeerTpcRepAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 DialogToken; +- TPC_REPORT_INFO TpcRepInfo; +- PTPC_REQ_ENTRY pEntry = NULL; ++ struct rt_tpc_report_info TpcRepInfo; ++ struct rt_tpc_req_entry *pEntry = NULL; + +- NdisZeroMemory(&TpcRepInfo, sizeof(TPC_REPORT_INFO)); ++ NdisZeroMemory(&TpcRepInfo, sizeof(struct rt_tpc_report_info)); + if (PeerTpcRepSanity + (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &TpcRepInfo)) { + if ((pEntry = TpcReqLookUp(pAd, DialogToken)) != NULL) { +@@ -2040,7 +2040,7 @@ static void PeerTpcRepAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerSpectrumAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + + u8 Action = Elem->Msg[LENGTH_802_11 + 1]; +@@ -2085,7 +2085,7 @@ void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Return : None. + ========================================================================== + */ +-int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) ++int Set_MeasureReq_Proc(struct rt_rtmp_adapter *pAd, char *arg) + { + u32 Aid = 1; + u32 ArgIdx; +@@ -2096,10 +2096,10 @@ int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) + u8 MeasureReqType = RM_BASIC; + u8 MeasureCh = 1; + u64 MeasureStartTime = GetCurrentTimeStamp(pAd); +- MEASURE_REQ MeasureReq; ++ struct rt_measure_req MeasureReq; + u8 TotalLen; + +- HEADER_802_11 ActHdr; ++ struct rt_header_802_11 ActHdr; + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen; +@@ -2153,13 +2153,13 @@ int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) + MgtMacHeaderInit(pAd, &ActHdr, SUBTYPE_ACTION, 0, + pAd->MacTab.Content[Aid].Addr, pAd->CurrentAddress); + +- NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(HEADER_802_11)); +- FrameLen = sizeof(HEADER_802_11); ++ NdisMoveMemory(pOutBuffer, (char *)& ActHdr, sizeof(struct rt_header_802_11)); ++ FrameLen = sizeof(struct rt_header_802_11); + +- TotalLen = sizeof(MEASURE_REQ_INFO) + sizeof(MEASURE_REQ); ++ TotalLen = sizeof(struct rt_measure_req_info) + sizeof(struct rt_measure_req); + + MakeMeasurementReqFrame(pAd, pOutBuffer, &FrameLen, +- sizeof(MEASURE_REQ_INFO), CATEGORY_RM, RM_BASIC, ++ sizeof(struct rt_measure_req_info), CATEGORY_RM, RM_BASIC, + MeasureReqToken, MeasureReqMode.word, + MeasureReqType, 0); + +@@ -2170,7 +2170,7 @@ int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) + { + unsigned long TempLen; + MakeOutgoingFrame(pOutBuffer + FrameLen, &TempLen, +- sizeof(MEASURE_REQ), &MeasureReq, ++ sizeof(struct rt_measure_req), &MeasureReq, + END_OF_ARGS); + FrameLen += TempLen; + } +@@ -2183,7 +2183,7 @@ END_OF_MEASURE_REQ: + return TRUE; + } + +-int Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, char *arg) ++int Set_TpcReq_Proc(struct rt_rtmp_adapter *pAd, char *arg) + { + u32 Aid; + +diff --git a/drivers/staging/rt2860/crypt_md5.h b/drivers/staging/rt2860/crypt_md5.h +index bbabf12..26f9745 100644 +--- a/drivers/staging/rt2860/crypt_md5.h ++++ b/drivers/staging/rt2860/crypt_md5.h +@@ -53,18 +53,19 @@ + #ifdef MD5_SUPPORT + #define MD5_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ + #define MD5_DIGEST_SIZE 16 /* 128 bits = 16 bytes */ +-typedef struct { ++ ++struct rt_md5_ctx_struc { + u32 HashValue[4]; + u64 MessageLen; + u8 Block[MD5_BLOCK_SIZE]; + u32 BlockLen; +-} MD5_CTX_STRUC, *PMD5_CTX_STRUC; ++}; + +-void MD5_Init(IN MD5_CTX_STRUC * pMD5_CTX); +-void MD5_Hash(IN MD5_CTX_STRUC * pMD5_CTX); +-void MD5_Append(IN MD5_CTX_STRUC * pMD5_CTX, ++void MD5_Init(struct rt_md5_ctx_struc *pMD5_CTX); ++void MD5_Hash(struct rt_md5_ctx_struc *pMD5_CTX); ++void MD5_Append(struct rt_md5_ctx_struc *pMD5_CTX, + IN const u8 Message[], u32 MessageLen); +-void MD5_End(IN MD5_CTX_STRUC * pMD5_CTX, u8 DigestMessage[]); ++void MD5_End(struct rt_md5_ctx_struc *pMD5_CTX, u8 DigestMessage[]); + void RT_MD5(IN const u8 Message[], + u32 MessageLen, u8 DigestMessage[]); + #endif /* MD5_SUPPORT */ +diff --git a/drivers/staging/rt2860/crypt_sha2.h b/drivers/staging/rt2860/crypt_sha2.h +index bfd88bc..20d11ab 100644 +--- a/drivers/staging/rt2860/crypt_sha2.h ++++ b/drivers/staging/rt2860/crypt_sha2.h +@@ -54,18 +54,18 @@ + #ifdef SHA1_SUPPORT + #define SHA1_BLOCK_SIZE 64 /* 512 bits = 64 bytes */ + #define SHA1_DIGEST_SIZE 20 /* 160 bits = 20 bytes */ +-typedef struct _SHA1_CTX_STRUC { ++struct rt_sha1_ctx { + u32 HashValue[5]; /* 5 = (SHA1_DIGEST_SIZE / 32) */ + u64 MessageLen; /* total size */ + u8 Block[SHA1_BLOCK_SIZE]; + u32 BlockLen; +-} SHA1_CTX_STRUC, *PSHA1_CTX_STRUC; ++}; + +-void RT_SHA1_Init(IN SHA1_CTX_STRUC * pSHA_CTX); +-void SHA1_Hash(IN SHA1_CTX_STRUC * pSHA_CTX); +-void SHA1_Append(IN SHA1_CTX_STRUC * pSHA_CTX, ++void RT_SHA1_Init(struct rt_sha1_ctx *pSHA_CTX); ++void SHA1_Hash(struct rt_sha1_ctx *pSHA_CTX); ++void SHA1_Append(struct rt_sha1_ctx *pSHA_CTX, + IN const u8 Message[], u32 MessageLen); +-void SHA1_End(IN SHA1_CTX_STRUC * pSHA_CTX, u8 DigestMessage[]); ++void SHA1_End(struct rt_sha1_ctx *pSHA_CTX, u8 DigestMessage[]); + void RT_SHA1(IN const u8 Message[], + u32 MessageLen, u8 DigestMessage[]); + #endif /* SHA1_SUPPORT */ +diff --git a/drivers/staging/rt2860/dfs.h b/drivers/staging/rt2860/dfs.h +index d094490..5fbab25 100644 +--- a/drivers/staging/rt2860/dfs.h ++++ b/drivers/staging/rt2860/dfs.h +@@ -36,4 +36,4 @@ + Fonchi 03-12-2007 created + */ + +-BOOLEAN RadarChannelCheck(IN PRTMP_ADAPTER pAd, u8 Ch); ++BOOLEAN RadarChannelCheck(struct rt_rtmp_adapter *pAd, u8 Ch); +diff --git a/drivers/staging/rt2860/eeprom.h b/drivers/staging/rt2860/eeprom.h +index 50df5a2..039801a 100644 +--- a/drivers/staging/rt2860/eeprom.h ++++ b/drivers/staging/rt2860/eeprom.h +@@ -41,20 +41,20 @@ + /************************************************************************* + * Public function declarations for prom-based chipset + ************************************************************************/ +-int rtmp_ee_prom_read16(IN PRTMP_ADAPTER pAd, ++int rtmp_ee_prom_read16(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 * pValue); + #endif /* RTMP_PCI_SUPPORT // */ + #ifdef RTMP_USB_SUPPORT + /************************************************************************* + * Public function declarations for usb-based prom chipset + ************************************************************************/ +-int RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++int RTUSBReadEEPROM16(struct rt_rtmp_adapter *pAd, + u16 offset, u16 *pData); + #endif /* RTMP_USB_SUPPORT // */ + + #ifdef RT30xx + #ifdef RTMP_EFUSE_SUPPORT +-int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, ++int rtmp_ee_efuse_read16(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 * pValue); + #endif /* RTMP_EFUSE_SUPPORT // */ + #endif /* RT30xx // */ +@@ -62,6 +62,6 @@ int rtmp_ee_efuse_read16(IN RTMP_ADAPTER * pAd, + /************************************************************************* + * Public function declarations for prom operation callback functions setting + ************************************************************************/ +-int RtmpChipOpsEepromHook(IN RTMP_ADAPTER * pAd, int infType); ++int RtmpChipOpsEepromHook(struct rt_rtmp_adapter *pAd, int infType); + + #endif /* __EEPROM_H__ // */ +diff --git a/drivers/staging/rt2860/iface/rtmp_usb.h b/drivers/staging/rt2860/iface/rtmp_usb.h +index f2955a2..6bb384a 100644 +--- a/drivers/staging/rt2860/iface/rtmp_usb.h ++++ b/drivers/staging/rt2860/iface/rtmp_usb.h +@@ -126,7 +126,7 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs); + #ifdef KTHREAD_SUPPORT + #define RTUSBMlmeUp(pAd) \ + do{ \ +- RTMP_OS_TASK *_pTask = &((pAd)->mlmeTask);\ ++ struct rt_rtmp_os_task *_pTask = &((pAd)->mlmeTask);\ + if (_pTask->kthread_task) \ + { \ + _pTask->kthread_running = TRUE; \ +@@ -136,7 +136,7 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs); + #else + #define RTUSBMlmeUp(pAd) \ + do{ \ +- RTMP_OS_TASK *_pTask = &((pAd)->mlmeTask);\ ++ struct rt_rtmp_os_task *_pTask = &((pAd)->mlmeTask);\ + CHECK_PID_LEGALITY(_pTask->taskPID) \ + { \ + RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \ +@@ -147,7 +147,7 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs); + #ifdef KTHREAD_SUPPORT + #define RTUSBCMDUp(pAd) \ + do{ \ +- RTMP_OS_TASK *_pTask = &((pAd)->cmdQTask); \ ++ struct rt_rtmp_os_task *_pTask = &((pAd)->cmdQTask); \ + { \ + _pTask->kthread_running = TRUE; \ + wake_up(&_pTask->kthread_q); \ +@@ -157,7 +157,7 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs); + #else + #define RTUSBCMDUp(pAd) \ + do{ \ +- RTMP_OS_TASK *_pTask = &((pAd)->cmdQTask); \ ++ struct rt_rtmp_os_task *_pTask = &((pAd)->cmdQTask); \ + CHECK_PID_LEGALITY(_pTask->taskPID) \ + {\ + RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \ +diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h +index 09e326e..1143413 100644 +--- a/drivers/staging/rt2860/mlme.h ++++ b/drivers/staging/rt2860/mlme.h +@@ -187,7 +187,7 @@ if (((__pEntry)) != NULL) \ + /* 802.11 frame formats */ + /* */ + /* HT Capability INFO field in HT Cap IE . */ +-typedef struct PACKED { ++struct PACKED rt_ht_cap_info { + u16 AdvCoding:1; + u16 ChannelWidth:1; + u16 MimoPs:2; /*momi power safe */ +@@ -202,17 +202,17 @@ typedef struct PACKED { + u16 PSMP:1; + u16 Forty_Mhz_Intolerant:1; + u16 LSIGTxopProSup:1; +-} HT_CAP_INFO, *PHT_CAP_INFO; ++}; + + /* HT Capability INFO field in HT Cap IE . */ +-typedef struct PACKED { ++struct PACKED rt_ht_cap_parm { + u8 MaxRAmpduFactor:2; + u8 MpduDensity:3; + u8 rsv:3; /*momi power safe */ +-} HT_CAP_PARM, *PHT_CAP_PARM; ++}; + + /* HT Capability INFO field in HT Cap IE . */ +-typedef struct PACKED { ++struct PACKED rt_ht_mcs_set { + u8 MCSSet[10]; + u8 SupRate[2]; /* unit : 1Mbps */ + u8 TxMCSSetDefined:1; +@@ -221,10 +221,10 @@ typedef struct PACKED { + u8 MpduDensity:1; + u8 rsv:3; + u8 rsv3[3]; +-} HT_MCS_SET, *PHT_MCS_SET; ++}; + + /* HT Capability INFO field in HT Cap IE . */ +-typedef struct PACKED { ++struct PACKED rt_ext_ht_cap_info { + u16 Pco:1; + u16 TranTime:2; + u16 rsv:5; /*momi power safe */ +@@ -232,10 +232,10 @@ typedef struct PACKED { + u16 PlusHTC:1; /*+HTC control field support */ + u16 RDGSupport:1; /*reverse Direction Grant support */ + u16 rsv2:4; +-} EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO; ++}; + + /* HT Beamforming field in HT Cap IE . */ +-typedef struct PACKED _HT_BF_CAP { ++struct PACKED rt_ht_bf_cap { + unsigned long TxBFRecCapable:1; + unsigned long RxSoundCapable:1; + unsigned long TxSoundCapable:1; +@@ -256,10 +256,10 @@ typedef struct PACKED _HT_BF_CAP { + unsigned long CSIRowBFSup:2; + unsigned long ChanEstimation:2; + unsigned long rsv:3; +-} HT_BF_CAP, *PHT_BF_CAP; ++}; + + /* HT antenna selection field in HT Cap IE . */ +-typedef struct PACKED _HT_AS_CAP { ++struct PACKED rt_ht_as_cap { + u8 AntSelect:1; + u8 ExpCSIFbkTxASEL:1; + u8 AntIndFbkTxASEL:1; +@@ -268,20 +268,20 @@ typedef struct PACKED _HT_AS_CAP { + u8 RxASel:1; + u8 TxSoundPPDU:1; + u8 rsv:1; +-} HT_AS_CAP, *PHT_AS_CAP; ++}; + + /* Draft 1.0 set IE length 26, but is extensible.. */ + #define SIZE_HT_CAP_IE 26 + /* The structure for HT Capability IE. */ +-typedef struct PACKED _HT_CAPABILITY_IE { +- HT_CAP_INFO HtCapInfo; +- HT_CAP_PARM HtCapParm; +-/* HT_MCS_SET HtMCSSet; */ ++struct PACKED rt_ht_capability_ie { ++ struct rt_ht_cap_info HtCapInfo; ++ struct rt_ht_cap_parm HtCapParm; ++/* struct rt_ht_mcs_set HtMCSSet; */ + u8 MCSSet[16]; +- EXT_HT_CAP_INFO ExtHtCapInfo; +- HT_BF_CAP TxBFCap; /* beamforming cap. rt2860c not support beamforming. */ +- HT_AS_CAP ASCap; /*antenna selection. */ +-} HT_CAPABILITY_IE, *PHT_CAPABILITY_IE; ++ struct rt_ext_ht_cap_info ExtHtCapInfo; ++ struct rt_ht_bf_cap TxBFCap; /* beamforming cap. rt2860c not support beamforming. */ ++ struct rt_ht_as_cap ASCap; /*antenna selection. */ ++}; + + /* 802.11n draft3 related structure definitions. */ + /* 7.3.2.60 */ +@@ -296,7 +296,7 @@ typedef struct PACKED _HT_CAPABILITY_IE { + /* (dot11BSSWidthChannelTransactionDelayFactor * dot11BSSWidthTriggerScanInterval) seconds without */ + /* being obligated to perform OBSS Scan operations. default is 25(== 0.25%) */ + +-typedef struct PACKED _OVERLAP_BSS_SCAN_IE { ++struct PACKED rt_overlap_bss_scan_ie { + u16 ScanPassiveDwell; + u16 ScanActiveDwell; + u16 TriggerScanInt; /* Trigger scan interval */ +@@ -304,7 +304,7 @@ typedef struct PACKED _OVERLAP_BSS_SCAN_IE { + u16 ActiveTalPerChannel; /* active total per channel */ + u16 DelayFactor; /* BSS width channel transition delay factor */ + u16 ScanActThre; /* Scan Activity threshold */ +-} OVERLAP_BSS_SCAN_IE, *POVERLAP_BSS_SCAN_IE; ++}; + + /* 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST */ + typedef union PACKED _BSS_2040_COEXIST_IE { +@@ -317,70 +317,70 @@ typedef union PACKED _BSS_2040_COEXIST_IE { + u8 word; + } BSS_2040_COEXIST_IE, *PBSS_2040_COEXIST_IE; + +-typedef struct _TRIGGER_EVENTA { ++struct rt_trigger_eventa { + BOOLEAN bValid; + u8 BSSID[6]; + u8 RegClass; /* Regulatory Class */ + u16 Channel; + unsigned long CDCounter; /* Maintain a seperate count down counter for each Event A. */ +-} TRIGGER_EVENTA, *PTRIGGER_EVENTA; ++}; + + /* 20/40 trigger event table */ + /* If one Event A delete or created, or if Event B is detected or not detected, STA should send 2040BSSCoexistence to AP. */ + #define MAX_TRIGGER_EVENT 64 +-typedef struct _TRIGGER_EVENT_TAB { ++struct rt_trigger_event_tab { + u8 EventANo; +- TRIGGER_EVENTA EventA[MAX_TRIGGER_EVENT]; ++ struct rt_trigger_eventa EventA[MAX_TRIGGER_EVENT]; + unsigned long EventBCountDown; /* Count down counter for Event B. */ +-} TRIGGER_EVENT_TAB, *PTRIGGER_EVENT_TAB; ++}; + + /* 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY). */ + /* This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0 */ +-typedef struct PACKED _EXT_CAP_INFO_ELEMENT { ++struct PACKED rt_ext_cap_info_element { + u8 BssCoexistMgmtSupport:1; + u8 rsv:1; + u8 ExtendChannelSwitch:1; + u8 rsv2:5; +-} EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT; ++}; + + /* 802.11n 7.3.2.61 */ +-typedef struct PACKED _BSS_2040_COEXIST_ELEMENT { ++struct PACKED rt_bss_2040_coexist_element { + u8 ElementID; /* ID = IE_2040_BSS_COEXIST = 72 */ + u8 Len; + BSS_2040_COEXIST_IE BssCoexistIe; +-} BSS_2040_COEXIST_ELEMENT, *PBSS_2040_COEXIST_ELEMENT; ++}; + + /*802.11n 7.3.2.59 */ +-typedef struct PACKED _BSS_2040_INTOLERANT_CH_REPORT { ++struct PACKED rt_bss_2040_intolerant_ch_report { + u8 ElementID; /* ID = IE_2040_BSS_INTOLERANT_REPORT = 73 */ + u8 Len; + u8 RegulatoryClass; + u8 ChList[0]; +-} BSS_2040_INTOLERANT_CH_REPORT, *PBSS_2040_INTOLERANT_CH_REPORT; ++}; + + /* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ +-typedef struct PACKED _CHA_SWITCH_ANNOUNCE_IE { ++struct PACKED rt_cha_switch_announce_ie { + u8 SwitchMode; /*channel switch mode */ + u8 NewChannel; /* */ + u8 SwitchCount; /* */ +-} CHA_SWITCH_ANNOUNCE_IE, *PCHA_SWITCH_ANNOUNCE_IE; ++}; + + /* The structure for channel switch annoucement IE. This is in 802.11n D3.03 */ +-typedef struct PACKED _SEC_CHA_OFFSET_IE { ++struct PACKED rt_sec_cha_offset_ie { + u8 SecondaryChannelOffset; /* 1: Secondary above, 3: Secondary below, 0: no Secondary */ +-} SEC_CHA_OFFSET_IE, *PSEC_CHA_OFFSET_IE; ++}; + +-/* This structure is extracted from struct RT_HT_CAPABILITY */ +-typedef struct { ++/* This structure is extracted from struct struct rt_ht_capability */ ++struct rt_ht_phy_info { + BOOLEAN bHtEnable; /* If we should use ht rate. */ + BOOLEAN bPreNHt; /* If we should use ht rate. */ + /*Substract from HT Capability IE */ + u8 MCSSet[16]; +-} RT_HT_PHY_INFO, *PRT_HT_PHY_INFO; ++}; + + /*This structure substracts ralink supports from all 802.11n-related features. */ + /*Features not listed here but contained in 802.11n spec are not supported in rt2860. */ +-typedef struct { ++struct rt_ht_capability { + u16 ChannelWidth:1; + u16 MimoPs:2; /*mimo power safe MMPS_ */ + u16 GF:1; /*green field */ +@@ -408,27 +408,27 @@ typedef struct { + u8 NewExtChannelOffset; + /* Extension Capability IE = 127 */ + u8 BSSCoexist2040; +-} RT_HT_CAPABILITY, *PRT_HT_CAPABILITY; ++}; + + /* field in Addtional HT Information IE . */ +-typedef struct PACKED { ++struct PACKED rt_add_htinfo { + u8 ExtChanOffset:2; + u8 RecomWidth:1; + u8 RifsMode:1; + u8 S_PSMPSup:1; /*Indicate support for scheduled PSMP */ + u8 SerInterGranu:3; /*service interval granularity */ +-} ADD_HTINFO, *PADD_HTINFO; ++}; + +-typedef struct PACKED { ++struct PACKED rt_add_htinfo2 { + u16 OperaionMode:2; + u16 NonGfPresent:1; + u16 rsv:1; + u16 OBSS_NonHTExist:1; + u16 rsv2:11; +-} ADD_HTINFO2, *PADD_HTINFO2; ++}; + + /* TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved. */ +-typedef struct PACKED { ++struct PACKED rt_add_htinfo3 { + u16 StbcMcs:6; + u16 DualBeacon:1; + u16 DualCTSProtect:1; +@@ -437,56 +437,56 @@ typedef struct PACKED { + u16 PcoActive:1; + u16 PcoPhase:1; + u16 rsv:4; +-} ADD_HTINFO3, *PADD_HTINFO3; ++}; + + #define SIZE_ADD_HT_INFO_IE 22 +-typedef struct PACKED { ++struct PACKED rt_add_ht_info_ie { + u8 ControlChan; +- ADD_HTINFO AddHtInfo; +- ADD_HTINFO2 AddHtInfo2; +- ADD_HTINFO3 AddHtInfo3; ++ struct rt_add_htinfo AddHtInfo; ++ struct rt_add_htinfo2 AddHtInfo2; ++ struct rt_add_htinfo3 AddHtInfo3; + u8 MCSSet[16]; /* Basic MCS set */ +-} ADD_HT_INFO_IE, *PADD_HT_INFO_IE; ++}; + +-typedef struct PACKED { ++struct PACKED rt_new_ext_chan_ie { + u8 NewExtChanOffset; +-} NEW_EXT_CHAN_IE, *PNEW_EXT_CHAN_IE; ++}; + +-typedef struct PACKED _FRAME_802_11 { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_802_11 { ++ struct rt_header_802_11 Hdr; + u8 Octet[1]; +-} FRAME_802_11, *PFRAME_802_11; ++}; + + /* QoSNull embedding of management action. When HT Control MA field set to 1. */ +-typedef struct PACKED _MA_BODY { ++struct PACKED rt_ma_body { + u8 Category; + u8 Action; + u8 Octet[1]; +-} MA_BODY, *PMA_BODY; ++}; + +-typedef struct PACKED _HEADER_802_3 { ++struct PACKED rt_header_802_3 { + u8 DAAddr1[MAC_ADDR_LEN]; + u8 SAAddr2[MAC_ADDR_LEN]; + u8 Octet[2]; +-} HEADER_802_3, *PHEADER_802_3; ++}; + /*//Block ACK related format */ + /* 2-byte BA Parameter field in DELBA frames to terminate an already set up bA */ +-typedef struct PACKED { ++struct PACKED rt_delba_parm { + u16 Rsv:11; /* always set to 0 */ + u16 Initiator:1; /* 1: originator 0:recipient */ + u16 TID:4; /* value of TC os TS */ +-} DELBA_PARM, *PDELBA_PARM; ++}; + + /* 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA */ +-typedef struct PACKED { ++struct PACKED rt_ba_parm { + u16 AMSDUSupported:1; /* 0: not permitted 1: permitted */ + u16 BAPolicy:1; /* 1: immediately BA 0:delayed BA */ + u16 TID:4; /* value of TC os TS */ + u16 BufSize:10; /* number of buffe of size 2304 octetsr */ +-} BA_PARM, *PBA_PARM; ++}; + + /* 2-byte BA Starting Seq CONTROL field */ +-typedef union PACKED { ++typedef union PACKED _BASEQ_CONTROL { + struct PACKED { + u16 FragNum:4; /* always set to 0 */ + u16 StartSeq:12; /* sequence number of the 1st MSDU for which this BAR is sent */ +@@ -496,177 +496,176 @@ typedef union PACKED { + + /*BAControl and BARControl are the same */ + /* 2-byte BA CONTROL field in BA frame */ +-typedef struct PACKED { ++struct PACKED rt_ba_control { + u16 ACKPolicy:1; /* only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK */ + u16 MTID:1; /*EWC V1.24 */ + u16 Compressed:1; + u16 Rsv:9; + u16 TID:4; +-} BA_CONTROL, *PBA_CONTROL; ++}; + + /* 2-byte BAR CONTROL field in BAR frame */ +-typedef struct PACKED { ++struct PACKED rt_bar_control { + u16 ACKPolicy:1; /* 0:normal ack, 1:no ack. */ +- u16 MTID:1; /*if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ */ ++ u16 MTID:1; /*if this bit1, use struct rt_frame_mtba_req, if 0, use struct rt_frame_ba_req */ + u16 Compressed:1; + u16 Rsv1:9; + u16 TID:4; +-} BAR_CONTROL, *PBAR_CONTROL; ++}; + + /* BARControl in MTBAR frame */ +-typedef struct PACKED { ++struct PACKED rt_mtbar_control { + u16 ACKPolicy:1; + u16 MTID:1; + u16 Compressed:1; + u16 Rsv1:9; + u16 NumTID:4; +-} MTBAR_CONTROL, *PMTBAR_CONTROL; ++}; + +-typedef struct PACKED { ++struct PACKED rt_per_tid_info { + u16 Rsv1:12; + u16 TID:4; +-} PER_TID_INFO, *PPER_TID_INFO; ++}; + +-typedef struct { +- PER_TID_INFO PerTID; ++struct rt_each_tid { ++ struct rt_per_tid_info PerTID; + BASEQ_CONTROL BAStartingSeq; +-} EACH_TID, *PEACH_TID; ++}; + + /* BAREQ AND MTBAREQ have the same subtype BAR, 802.11n BAR use compressed bitmap. */ +-typedef struct PACKED _FRAME_BA_REQ { +- FRAME_CONTROL FC; ++struct PACKED rt_frame_ba_req { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BARControl; ++ struct rt_bar_control BARControl; + BASEQ_CONTROL BAStartingSeq; +-} FRAME_BA_REQ, *PFRAME_BA_REQ; ++}; + +-typedef struct PACKED _FRAME_MTBA_REQ { +- FRAME_CONTROL FC; ++struct PACKED rt_frame_mtba_req { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +- MTBAR_CONTROL MTBARControl; +- PER_TID_INFO PerTIDInfo; ++ struct rt_mtbar_control MTBARControl; ++ struct rt_per_tid_info PerTIDInfo; + BASEQ_CONTROL BAStartingSeq; +-} FRAME_MTBA_REQ, *PFRAME_MTBA_REQ; ++}; + + /* Compressed format is mandantory in HT STA */ +-typedef struct PACKED _FRAME_MTBA { +- FRAME_CONTROL FC; ++struct PACKED rt_frame_mtba { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +- BA_CONTROL BAControl; ++ struct rt_ba_control BAControl; + BASEQ_CONTROL BAStartingSeq; + u8 BitMap[8]; +-} FRAME_MTBA, *PFRAME_MTBA; ++}; + +-typedef struct PACKED _FRAME_PSMP_ACTION { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_psmp_action { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; + u8 Psmp; /* 7.3.1.25 */ +-} FRAME_PSMP_ACTION, *PFRAME_PSMP_ACTION; ++}; + +-typedef struct PACKED _FRAME_ACTION_HDR { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_action_hdr { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; +-} FRAME_ACTION_HDR, *PFRAME_ACTION_HDR; ++}; + + /*Action Frame */ + /*Action Frame Category:Spectrum, Action:Channel Switch. 7.3.2.20 */ +-typedef struct PACKED _CHAN_SWITCH_ANNOUNCE { ++struct PACKED rt_chan_switch_announce { + u8 ElementID; /* ID = IE_CHANNEL_SWITCH_ANNOUNCEMENT = 37 */ + u8 Len; +- CHA_SWITCH_ANNOUNCE_IE CSAnnounceIe; +-} CHAN_SWITCH_ANNOUNCE, *PCHAN_SWITCH_ANNOUNCE; ++ struct rt_cha_switch_announce_ie CSAnnounceIe; ++}; + + /*802.11n : 7.3.2.20a */ +-typedef struct PACKED _SECOND_CHAN_OFFSET { ++struct PACKED rt_second_chan_offset { + u8 ElementID; /* ID = IE_SECONDARY_CH_OFFSET = 62 */ + u8 Len; +- SEC_CHA_OFFSET_IE SecChOffsetIe; +-} SECOND_CHAN_OFFSET, *PSECOND_CHAN_OFFSET; ++ struct rt_sec_cha_offset_ie SecChOffsetIe; ++}; + +-typedef struct PACKED _FRAME_SPETRUM_CS { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_spetrum_cs { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; +- CHAN_SWITCH_ANNOUNCE CSAnnounce; +- SECOND_CHAN_OFFSET SecondChannel; +-} FRAME_SPETRUM_CS, *PFRAME_SPETRUM_CS; ++ struct rt_chan_switch_announce CSAnnounce; ++ struct rt_second_chan_offset SecondChannel; ++}; + +-typedef struct PACKED _FRAME_ADDBA_REQ { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_addba_req { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; + u8 Token; /* 1 */ +- BA_PARM BaParm; /* 2 - 10 */ ++ struct rt_ba_parm BaParm; /* 2 - 10 */ + u16 TimeOutValue; /* 0 - 0 */ + BASEQ_CONTROL BaStartSeq; /* 0-0 */ +-} FRAME_ADDBA_REQ, *PFRAME_ADDBA_REQ; ++}; + +-typedef struct PACKED _FRAME_ADDBA_RSP { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_addba_rsp { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; + u8 Token; + u16 StatusCode; +- BA_PARM BaParm; /*0 - 2 */ ++ struct rt_ba_parm BaParm; /*0 - 2 */ + u16 TimeOutValue; +-} FRAME_ADDBA_RSP, *PFRAME_ADDBA_RSP; ++}; + +-typedef struct PACKED _FRAME_DELBA_REQ { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_delba_req { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; +- DELBA_PARM DelbaParm; ++ struct rt_delba_parm DelbaParm; + u16 ReasonCode; +-} FRAME_DELBA_REQ, *PFRAME_DELBA_REQ; ++}; + + /*7.2.1.7 */ +-typedef struct PACKED _FRAME_BAR { +- FRAME_CONTROL FC; ++struct PACKED rt_frame_bar { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; ++ struct rt_bar_control BarControl; + BASEQ_CONTROL StartingSeq; +-} FRAME_BAR, *PFRAME_BAR; ++}; + + /*7.2.1.7 */ +-typedef struct PACKED _FRAME_BA { +- FRAME_CONTROL FC; ++struct PACKED rt_frame_ba { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +- BAR_CONTROL BarControl; ++ struct rt_bar_control BarControl; + BASEQ_CONTROL StartingSeq; + u8 bitmask[8]; +-} FRAME_BA, *PFRAME_BA; ++}; + + /* Radio Measuement Request Frame Format */ +-typedef struct PACKED _FRAME_RM_REQ_ACTION { +- HEADER_802_11 Hdr; ++struct PACKED rt_frame_rm_req_action { ++ struct rt_header_802_11 Hdr; + u8 Category; + u8 Action; + u8 Token; + u16 Repetition; + u8 data[0]; +-} FRAME_RM_REQ_ACTION, *PFRAME_RM_REQ_ACTION; ++}; + +-typedef struct PACKED { ++struct PACKED rt_ht_ext_channel_switch_announcement_ie { + u8 ID; + u8 Length; + u8 ChannelSwitchMode; + u8 NewRegClass; + u8 NewChannelNum; + u8 ChannelSwitchCount; +-} HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE, +- *PHT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE; ++}; + + /* */ + /* _Limit must be the 2**n - 1 */ +@@ -681,24 +680,24 @@ typedef struct PACKED { + /* */ + /* Contention-free parameter (without ID and Length) */ + /* */ +-typedef struct PACKED { ++struct PACKED rt_cf_parm { + BOOLEAN bValid; /* 1: variable contains valid value */ + u8 CfpCount; + u8 CfpPeriod; + u16 CfpMaxDuration; + u16 CfpDurRemaining; +-} CF_PARM, *PCF_PARM; ++}; + +-typedef struct _CIPHER_SUITE { ++struct rt_cipher_suite { + NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher 1, this one has more secured cipher suite */ + NDIS_802_11_ENCRYPTION_STATUS PairCipherAux; /* Unicast cipher 2 if AP announce two unicast cipher suite */ + NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Group cipher */ + u16 RsnCapability; /* RSN capability from beacon */ + BOOLEAN bMixMode; /* Indicate Pair & Group cipher might be different */ +-} CIPHER_SUITE, *PCIPHER_SUITE; ++}; + + /* EDCA configuration from AP's BEACON/ProbeRsp */ +-typedef struct { ++struct rt_edca_parm { + BOOLEAN bValid; /* 1: variable contains valid value */ + BOOLEAN bAdd; /* 1: variable contains valid value */ + BOOLEAN bQAck; +@@ -712,18 +711,18 @@ typedef struct { + u8 Cwmax[4]; + u16 Txop[4]; /* in unit of 32-us */ + BOOLEAN bACM[4]; /* 1: Admission Control of AC_BK is mandattory */ +-} EDCA_PARM, *PEDCA_PARM; ++}; + + /* QBSS LOAD information from QAP's BEACON/ProbeRsp */ +-typedef struct { ++struct rt_qbss_load_parm { + BOOLEAN bValid; /* 1: variable contains valid value */ + u16 StaNum; + u8 ChannelUtilization; + u16 RemainingAdmissionControl; /* in unit of 32-us */ +-} QBSS_LOAD_PARM, *PQBSS_LOAD_PARM; ++}; + + /* QBSS Info field in QSTA's assoc req */ +-typedef struct PACKED { ++struct PACKED rt_qbss_sta_info_parm { + u8 UAPSD_AC_VO:1; + u8 UAPSD_AC_VI:1; + u8 UAPSD_AC_BK:1; +@@ -731,32 +730,32 @@ typedef struct PACKED { + u8 Rsv1:1; + u8 MaxSPLength:2; + u8 Rsv2:1; +-} QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM; ++}; + + /* QBSS Info field in QAP's Beacon/ProbeRsp */ +-typedef struct PACKED { ++struct PACKED rt_qbss_ap_info_parm { + u8 ParamSetCount:4; + u8 Rsv:3; + u8 UAPSD:1; +-} QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM; ++}; + + /* QOS Capability reported in QAP's BEACON/ProbeRsp */ + /* QOS Capability sent out in QSTA's AssociateReq/ReAssociateReq */ +-typedef struct { ++struct rt_qos_capability_parm { + BOOLEAN bValid; /* 1: variable contains valid value */ + BOOLEAN bQAck; + BOOLEAN bQueueRequest; + BOOLEAN bTxopRequest; + /* BOOLEAN bMoreDataAck; */ + u8 EdcaUpdateCount; +-} QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM; ++}; + +-typedef struct { ++struct rt_wpa_ie { + u8 IELen; + u8 IE[MAX_CUSTOM_LEN]; +-} WPA_IE_; ++}; + +-typedef struct { ++struct rt_bss_entry { + u8 Bssid[MAC_ADDR_LEN]; + u8 Channel; + u8 CentralChannel; /*Store the wide-band central channel for 40MHz. .used in 40MHz AP. Or this is the same as Channel. */ +@@ -768,9 +767,9 @@ typedef struct { + u8 SupRateLen; + u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; + u8 ExtRateLen; +- HT_CAPABILITY_IE HtCapability; ++ struct rt_ht_capability_ie HtCapability; + u8 HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 AddHtInfoLen; + u8 NewExtChanOffset; + char Rssi; +@@ -792,11 +791,11 @@ typedef struct { + BOOLEAN bSES; + + /* New for WPA2 */ +- CIPHER_SUITE WPA; /* AP announced WPA cipher suite */ +- CIPHER_SUITE WPA2; /* AP announced WPA2 cipher suite */ ++ struct rt_cipher_suite WPA; /* AP announced WPA cipher suite */ ++ struct rt_cipher_suite WPA2; /* AP announced WPA2 cipher suite */ + + /* New for microsoft WPA support */ +- NDIS_802_11_FIXED_IEs FixIEs; ++ struct rt_ndis_802_11_fixed_ies FixIEs; + NDIS_802_11_AUTHENTICATION_MODE AuthModeAux; /* Addition mode for WPA2 / WPA capable AP */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; + NDIS_802_11_WEP_STATUS WepStatus; /* Unicast Encryption Algorithm extract from VAR_IE */ +@@ -811,20 +810,20 @@ typedef struct { + u8 TTSF[8]; /* Target TSF */ + + /* 802.11e d9, and WMM */ +- EDCA_PARM EdcaParm; +- QOS_CAPABILITY_PARM QosCapability; +- QBSS_LOAD_PARM QbssLoad; +- WPA_IE_ WpaIE; +- WPA_IE_ RsnIE; +-} BSS_ENTRY, *PBSS_ENTRY; +- +-typedef struct { ++ struct rt_edca_parm EdcaParm; ++ struct rt_qos_capability_parm QosCapability; ++ struct rt_qbss_load_parm QbssLoad; ++ struct rt_wpa_ie WpaIE; ++ struct rt_wpa_ie RsnIE; ++}; ++ ++struct rt_bss_table { + u8 BssNr; + u8 BssOverlapNr; +- BSS_ENTRY BssEntry[MAX_LEN_OF_BSS_TABLE]; +-} BSS_TABLE, *PBSS_TABLE; ++ struct rt_bss_entry BssEntry[MAX_LEN_OF_BSS_TABLE]; ++}; + +-typedef struct _MLME_QUEUE_ELEM { ++struct rt_mlme_queue_elem { + unsigned long Machine; + unsigned long MsgType; + unsigned long MsgLen; +@@ -837,25 +836,25 @@ typedef struct _MLME_QUEUE_ELEM { + u8 Channel; + u8 Wcid; + BOOLEAN Occupied; +-} MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM; ++}; + +-typedef struct _MLME_QUEUE { ++struct rt_mlme_queue { + unsigned long Num; + unsigned long Head; + unsigned long Tail; + spinlock_t Lock; +- MLME_QUEUE_ELEM Entry[MAX_LEN_OF_MLME_QUEUE]; +-} MLME_QUEUE, *PMLME_QUEUE; ++ struct rt_mlme_queue_elem Entry[MAX_LEN_OF_MLME_QUEUE]; ++}; + +-typedef void(*STATE_MACHINE_FUNC) (void * Adaptor, MLME_QUEUE_ELEM * Elem); ++typedef void(*STATE_MACHINE_FUNC) (void * Adaptor, struct rt_mlme_queue_elem *Elem); + +-typedef struct _STATE_MACHINE { ++struct rt_state_machine { + unsigned long Base; + unsigned long NrState; + unsigned long NrMsg; + unsigned long CurrState; + STATE_MACHINE_FUNC *TransFunc; +-} STATE_MACHINE, *PSTATE_MACHINE; ++}; + + /* MLME AUX data structure that hold temporarliy settings during a connection attempt. */ + /* Once this attemp succeeds, all settings will be copy to pAd->StaActive. */ +@@ -863,7 +862,7 @@ typedef struct _STATE_MACHINE { + /* several steps (JOIN, AUTH, ASSOC or REASSOC) and may fail at any step. We purposely */ + /* separate this under-trial settings away from pAd->StaActive so that once */ + /* this new attempt failed, driver can auto-recover back to the active settings. */ +-typedef struct _MLME_AUX { ++struct rt_mlme_aux { + u8 BssType; + u8 Ssid[MAX_LEN_OF_SSID]; + u8 SsidLen; +@@ -887,33 +886,33 @@ typedef struct _MLME_AUX { + u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; + u8 SupRateLen; + u8 ExtRateLen; +- HT_CAPABILITY_IE HtCapability; ++ struct rt_ht_capability_ie HtCapability; + u8 HtCapabilityLen; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 NewExtChannelOffset; +- /*RT_HT_CAPABILITY SupportedHtPhy; */ ++ /*struct rt_ht_capability SupportedHtPhy; */ + + /* new for QOS */ +- QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ +- EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ +- QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ ++ struct rt_qos_capability_parm APQosCapability; /* QOS capability of the current associated AP */ ++ struct rt_edca_parm APEdcaParm; /* EDCA parameters of the current associated AP */ ++ struct rt_qbss_load_parm APQbssLoad; /* QBSS load of the current associated AP */ + + /* new to keep Ralink specific feature */ + unsigned long APRalinkIe; + +- BSS_TABLE SsidBssTab; /* AP list for the same SSID */ +- BSS_TABLE RoamTab; /* AP list eligible for roaming */ ++ struct rt_bss_table SsidBssTab; /* AP list for the same SSID */ ++ struct rt_bss_table RoamTab; /* AP list eligible for roaming */ + unsigned long BssIdx; + unsigned long RoamIdx; + + BOOLEAN CurrReqIsFromNdis; + +- RALINK_TIMER_STRUCT BeaconTimer, ScanTimer; +- RALINK_TIMER_STRUCT AuthTimer; +- RALINK_TIMER_STRUCT AssocTimer, ReassocTimer, DisassocTimer; +-} MLME_AUX, *PMLME_AUX; ++ struct rt_ralink_timer BeaconTimer, ScanTimer; ++ struct rt_ralink_timer AuthTimer; ++ struct rt_ralink_timer AssocTimer, ReassocTimer, DisassocTimer; ++}; + +-typedef struct _MLME_ADDBA_REQ_STRUCT { ++struct rt_mlme_addba_req { + u8 Wcid; /* */ + u8 pAddr[MAC_ADDR_LEN]; + u8 BaBufSize; +@@ -921,64 +920,63 @@ typedef struct _MLME_ADDBA_REQ_STRUCT { + u8 TID; + u8 Token; + u16 BaStartSeq; +-} MLME_ADDBA_REQ_STRUCT, *PMLME_ADDBA_REQ_STRUCT; ++}; + +-typedef struct _MLME_DELBA_REQ_STRUCT { ++struct rt_mlme_delba_req { + u8 Wcid; /* */ + u8 Addr[MAC_ADDR_LEN]; + u8 TID; + u8 Initiator; +-} MLME_DELBA_REQ_STRUCT, *PMLME_DELBA_REQ_STRUCT; ++}; + + /* assoc struct is equal to reassoc */ +-typedef struct _MLME_ASSOC_REQ_STRUCT { ++struct rt_mlme_assoc_req { + u8 Addr[MAC_ADDR_LEN]; + u16 CapabilityInfo; + u16 ListenIntv; + unsigned long Timeout; +-} MLME_ASSOC_REQ_STRUCT, *PMLME_ASSOC_REQ_STRUCT, MLME_REASSOC_REQ_STRUCT, +- *PMLME_REASSOC_REQ_STRUCT; ++}; + +-typedef struct _MLME_DISASSOC_REQ_STRUCT { ++struct rt_mlme_disassoc_req { + u8 Addr[MAC_ADDR_LEN]; + u16 Reason; +-} MLME_DISASSOC_REQ_STRUCT, *PMLME_DISASSOC_REQ_STRUCT; ++}; + +-typedef struct _MLME_AUTH_REQ_STRUCT { ++struct rt_mlme_auth_req { + u8 Addr[MAC_ADDR_LEN]; + u16 Alg; + unsigned long Timeout; +-} MLME_AUTH_REQ_STRUCT, *PMLME_AUTH_REQ_STRUCT; ++}; + +-typedef struct _MLME_DEAUTH_REQ_STRUCT { ++struct rt_mlme_deauth_req { + u8 Addr[MAC_ADDR_LEN]; + u16 Reason; +-} MLME_DEAUTH_REQ_STRUCT, *PMLME_DEAUTH_REQ_STRUCT; ++}; + +-typedef struct { ++struct rt_mlme_join_req { + unsigned long BssIdx; +-} MLME_JOIN_REQ_STRUCT; ++}; + +-typedef struct _MLME_SCAN_REQ_STRUCT { ++struct rt_mlme_scan_req { + u8 Bssid[MAC_ADDR_LEN]; + u8 BssType; + u8 ScanType; + u8 SsidLen; + char Ssid[MAX_LEN_OF_SSID]; +-} MLME_SCAN_REQ_STRUCT, *PMLME_SCAN_REQ_STRUCT; ++}; + +-typedef struct _MLME_START_REQ_STRUCT { ++struct rt_mlme_start_req { + char Ssid[MAX_LEN_OF_SSID]; + u8 SsidLen; +-} MLME_START_REQ_STRUCT, *PMLME_START_REQ_STRUCT; ++}; + +-typedef struct PACKED { ++struct PACKED rt_eid { + u8 Eid; + u8 Len; + u8 Octet[1]; +-} EID_STRUCT, *PEID_STRUCT, BEACON_EID_STRUCT, *PBEACON_EID_STRUCT; ++}; + +-typedef struct PACKED _RTMP_TX_RATE_SWITCH { ++struct PACKED rt_rtmp_tx_rate_switch { + u8 ItemNo; + u8 STBC:1; + u8 ShortGI:1; +@@ -989,7 +987,7 @@ typedef struct PACKED _RTMP_TX_RATE_SWITCH { + u8 CurrMCS; + u8 TrainUp; + u8 TrainDown; +-} RRTMP_TX_RATE_SWITCH, *PRTMP_TX_RATE_SWITCH; ++}; + + /* ========================== AP mlme.h =============================== */ + #define TBTT_PRELOAD_TIME 384 /* usec. LomgPreamble + 24-byte at 1Mbps */ +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index 05a71f0..fa4a2e6 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -137,9 +137,9 @@ typedef enum _NDIS_802_11_STATUS_TYPE { + + typedef u8 NDIS_802_11_MAC_ADDRESS[6]; + +-typedef struct _NDIS_802_11_STATUS_INDICATION { ++struct rt_ndis_802_11_status_indication { + NDIS_802_11_STATUS_TYPE StatusType; +-} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION; ++}; + + /* mask for authentication/integrity fields */ + #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f +@@ -149,23 +149,23 @@ typedef struct _NDIS_802_11_STATUS_INDICATION { + #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 + #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E + +-typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST { ++struct rt_ndis_802_11_authentication_request { + unsigned long Length; /* Length of structure */ + NDIS_802_11_MAC_ADDRESS Bssid; + unsigned long Flags; +-} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST; ++}; + + /*Added new types for PMKID Candidate lists. */ +-typedef struct _PMKID_CANDIDATE { ++struct rt_pmkid_candidate { + NDIS_802_11_MAC_ADDRESS BSSID; + unsigned long Flags; +-} PMKID_CANDIDATE, *PPMKID_CANDIDATE; ++}; + +-typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST { ++struct rt_ndis_802_11_pmkid_candidate_list { + unsigned long Version; /* Version of the structure */ + unsigned long NumCandidates; /* No. of pmkid candidates */ +- PMKID_CANDIDATE CandidateList[1]; +-} NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST; ++ struct rt_pmkid_candidate CandidateList[1]; ++}; + + /*Flags for PMKID Candidate list structure */ + #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 +@@ -182,10 +182,10 @@ typedef enum _NDIS_802_11_NETWORK_TYPE { + Ndis802_11NetworkTypeMax /* not a real type, defined as an upper bound */ + } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; + +-typedef struct _NDIS_802_11_NETWORK_TYPE_LIST { ++struct rt_ndis_802_11_network_type_list { + u32 NumberOfItems; /* in list below, at least 1 */ + NDIS_802_11_NETWORK_TYPE NetworkType[1]; +-} NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST; ++}; + + typedef enum _NDIS_802_11_POWER_MODE { + Ndis802_11PowerModeCAM, +@@ -202,22 +202,22 @@ typedef unsigned long NDIS_802_11_TX_POWER_LEVEL; /* in milliwatts */ + /* */ + typedef long NDIS_802_11_RSSI; /* in dBm */ + +-typedef struct _NDIS_802_11_CONFIGURATION_FH { ++struct rt_ndis_802_11_configuration_fh { + unsigned long Length; /* Length of structure */ + unsigned long HopPattern; /* As defined by 802.11, MSB set */ + unsigned long HopSet; /* to one if non-802.11 */ + unsigned long DwellTime; /* units are Kusec */ +-} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH; ++}; + +-typedef struct _NDIS_802_11_CONFIGURATION { ++struct rt_ndis_802_11_configuration { + unsigned long Length; /* Length of structure */ + unsigned long BeaconPeriod; /* units are Kusec */ + unsigned long ATIMWindow; /* units are Kusec */ + unsigned long DSConfig; /* Frequency, units are kHz */ +- NDIS_802_11_CONFIGURATION_FH FHConfig; +-} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION; ++ struct rt_ndis_802_11_configuration_fh FHConfig; ++}; + +-typedef struct _NDIS_802_11_STATISTICS { ++struct rt_ndis_802_11_statistics { + unsigned long Length; /* Length of structure */ + LARGE_INTEGER TransmittedFragmentCount; + LARGE_INTEGER MulticastTransmittedFrameCount; +@@ -240,31 +240,31 @@ typedef struct _NDIS_802_11_STATISTICS { + LARGE_INTEGER CCMPReplays; + LARGE_INTEGER CCMPDecryptErrors; + LARGE_INTEGER FourWayHandshakeFailures; +-} NDIS_802_11_STATISTICS, *PNDIS_802_11_STATISTICS; ++}; + + typedef unsigned long NDIS_802_11_KEY_INDEX; + typedef unsigned long long NDIS_802_11_KEY_RSC; + + #define MAX_RADIUS_SRV_NUM 2 /* 802.1x failover number */ + +-typedef struct PACKED _RADIUS_SRV_INFO { ++struct PACKED rt_radius_srv_info { + u32 radius_ip; + u32 radius_port; + u8 radius_key[64]; + u8 radius_key_len; +-} RADIUS_SRV_INFO, *PRADIUS_SRV_INFO; ++}; + +-typedef struct PACKED _RADIUS_KEY_INFO { ++struct PACKED rt_radius_key_info { + u8 radius_srv_num; +- RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; ++ struct rt_radius_srv_info radius_srv_info[MAX_RADIUS_SRV_NUM]; + u8 ieee8021xWEP; /* dynamic WEP */ + u8 key_index; + u8 key_length; /* length of key in bytes */ + u8 key_material[13]; +-} RADIUS_KEY_INFO, *PRADIUS_KEY_INFO; ++}; + + /* It's used by 802.1x daemon to require relative configuration */ +-typedef struct PACKED _RADIUS_CONF { ++struct PACKED rt_radius_conf { + u32 Length; /* Length of this structure */ + u8 mbss_num; /* indicate multiple BSS number */ + u32 own_ip_addr; +@@ -274,38 +274,38 @@ typedef struct PACKED _RADIUS_CONF { + u8 EAPifname_len[8]; + u8 PreAuthifname[8][IFNAMSIZ]; + u8 PreAuthifname_len[8]; +- RADIUS_KEY_INFO RadiusInfo[8]; +-} RADIUS_CONF, *PRADIUS_CONF; ++ struct rt_radius_key_info RadiusInfo[8]; ++}; + + /* Key mapping keys require a BSSID */ +-typedef struct _NDIS_802_11_KEY { ++struct rt_ndis_802_11_key { + u32 Length; /* Length of this structure */ + u32 KeyIndex; + u32 KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; + NDIS_802_11_KEY_RSC KeyRSC; + u8 KeyMaterial[1]; /* variable length depending on above field */ +-} NDIS_802_11_KEY, *PNDIS_802_11_KEY; ++}; + +-typedef struct _NDIS_802_11_PASSPHRASE { ++struct rt_ndis_802_11_passphrase { + u32 KeyLength; /* length of key in bytes */ + NDIS_802_11_MAC_ADDRESS BSSID; + u8 KeyMaterial[1]; /* variable length depending on above field */ +-} NDIS_802_11_PASSPHRASE, *PNDIS_802_11_PASSPHRASE; ++}; + +-typedef struct _NDIS_802_11_REMOVE_KEY { ++struct rt_ndis_802_11_remove_key { + u32 Length; /* Length of this structure */ + u32 KeyIndex; + NDIS_802_11_MAC_ADDRESS BSSID; +-} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY; ++}; + +-typedef struct _NDIS_802_11_WEP { ++struct rt_ndis_802_11_wep { + u32 Length; /* Length of this structure */ + u32 KeyIndex; /* 0 is the per-client key, 1-N are the */ + /* global keys */ + u32 KeyLength; /* length of key in bytes */ + u8 KeyMaterial[1]; /* variable length depending on above field */ +-} NDIS_802_11_WEP, *PNDIS_802_11_WEP; ++}; + + typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE { + Ndis802_11IBSS, +@@ -333,63 +333,63 @@ typedef enum _NDIS_802_11_AUTHENTICATION_MODE { + typedef u8 NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; /* Set of 8 data rates */ + typedef u8 NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; /* Set of 16 data rates */ + +-typedef struct PACKED _NDIS_802_11_SSID { ++struct PACKED rt_ndis_802_11_ssid { + u32 SsidLength; /* length of SSID field below, in bytes; */ + /* this can be zero. */ + u8 Ssid[NDIS_802_11_LENGTH_SSID]; /* SSID information field */ +-} NDIS_802_11_SSID, *PNDIS_802_11_SSID; ++}; + +-typedef struct PACKED _NDIS_WLAN_BSSID { ++struct PACKED rt_ndis_wlan_bssid { + unsigned long Length; /* Length of this structure */ + NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ + u8 Reserved[2]; +- NDIS_802_11_SSID Ssid; /* SSID */ ++ struct rt_ndis_802_11_ssid Ssid; /* SSID */ + unsigned long Privacy; /* WEP encryption requirement */ + NDIS_802_11_RSSI Rssi; /* receive signal strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; ++ struct rt_ndis_802_11_configuration Configuration; + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; + NDIS_802_11_RATES SupportedRates; +-} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID; ++}; + +-typedef struct PACKED _NDIS_802_11_BSSID_LIST { ++struct PACKED rt_ndis_802_11_bssid_list { + u32 NumberOfItems; /* in list below, at least 1 */ +- NDIS_WLAN_BSSID Bssid[1]; +-} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST; ++ struct rt_ndis_wlan_bssid Bssid[1]; ++}; + + /* Added Capabilities, IELength and IEs for each BSSID */ +-typedef struct PACKED _NDIS_WLAN_BSSID_EX { ++struct PACKED rt_ndis_wlan_bssid_ex { + unsigned long Length; /* Length of this structure */ + NDIS_802_11_MAC_ADDRESS MacAddress; /* BSSID */ + u8 Reserved[2]; +- NDIS_802_11_SSID Ssid; /* SSID */ ++ struct rt_ndis_802_11_ssid Ssid; /* SSID */ + u32 Privacy; /* WEP encryption requirement */ + NDIS_802_11_RSSI Rssi; /* receive signal */ + /* strength in dBm */ + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; +- NDIS_802_11_CONFIGURATION Configuration; ++ struct rt_ndis_802_11_configuration Configuration; + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; + NDIS_802_11_RATES_EX SupportedRates; + unsigned long IELength; + u8 IEs[1]; +-} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX; ++}; + +-typedef struct PACKED _NDIS_802_11_BSSID_LIST_EX { ++struct PACKED rt_ndis_802_11_bssid_list_ex { + u32 NumberOfItems; /* in list below, at least 1 */ +- NDIS_WLAN_BSSID_EX Bssid[1]; +-} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX; ++ struct rt_ndis_wlan_bssid_ex Bssid[1]; ++}; + +-typedef struct PACKED _NDIS_802_11_FIXED_IEs { ++struct PACKED rt_ndis_802_11_fixed_ies { + u8 Timestamp[8]; + u16 BeaconInterval; + u16 Capabilities; +-} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs; ++}; + +-typedef struct _NDIS_802_11_VARIABLE_IEs { ++struct rt_ndis_802_11_variable_ies { + u8 ElementID; + u8 Length; /* Number of bytes in data field */ + u8 data[1]; +-} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs; ++}; + + typedef unsigned long NDIS_802_11_FRAGMENTATION_THRESHOLD; + +@@ -436,34 +436,34 @@ typedef enum _NDIS_802_11_RELOAD_DEFAULTS { + #define NDIS_802_11_AI_RESFI_STATUSCODE 2 + #define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 + +-typedef struct _NDIS_802_11_AI_REQFI { ++struct rt_ndis_802_11_ai_reqfi { + u16 Capabilities; + u16 ListenInterval; + NDIS_802_11_MAC_ADDRESS CurrentAPAddress; +-} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; ++}; + +-typedef struct _NDIS_802_11_AI_RESFI { ++struct rt_ndis_802_11_ai_resfi { + u16 Capabilities; + u16 StatusCode; + u16 AssociationId; +-} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; ++}; + +-typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION { ++struct rt_ndis_802_11_association_information { + unsigned long Length; + u16 AvailableRequestFixedIEs; +- NDIS_802_11_AI_REQFI RequestFixedIEs; ++ struct rt_ndis_802_11_ai_reqfi RequestFixedIEs; + unsigned long RequestIELength; + unsigned long OffsetRequestIEs; + u16 AvailableResponseFixedIEs; +- NDIS_802_11_AI_RESFI ResponseFixedIEs; ++ struct rt_ndis_802_11_ai_resfi ResponseFixedIEs; + unsigned long ResponseIELength; + unsigned long OffsetResponseIEs; +-} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; ++}; + +-typedef struct _NDIS_802_11_AUTHENTICATION_EVENT { +- NDIS_802_11_STATUS_INDICATION Status; +- NDIS_802_11_AUTHENTICATION_REQUEST Request[1]; +-} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT; ++struct rt_ndis_802_11_authentication_event { ++ struct rt_ndis_802_11_status_indication Status; ++ struct rt_ndis_802_11_authentication_request Request[1]; ++}; + + /* 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE */ + typedef enum _NDIS_802_11_MEDIA_STREAM_MODE { +@@ -474,31 +474,30 @@ typedef enum _NDIS_802_11_MEDIA_STREAM_MODE { + /* PMKID Structures */ + typedef u8 NDIS_802_11_PMKID_VALUE[16]; + +-typedef struct _BSSID_INFO { ++struct rt_bssid_info { + NDIS_802_11_MAC_ADDRESS BSSID; + NDIS_802_11_PMKID_VALUE PMKID; +-} BSSID_INFO, *PBSSID_INFO; ++}; + +-typedef struct _NDIS_802_11_PMKID { ++struct rt_ndis_802_11_pmkid { + u32 Length; + u32 BSSIDInfoCount; +- BSSID_INFO BSSIDInfo[1]; +-} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID; ++ struct rt_bssid_info BSSIDInfo[1]; ++}; + +-typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION { ++struct rt_ndis_802_11_authentication_encryption { + NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported; + NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported; +-} NDIS_802_11_AUTHENTICATION_ENCRYPTION, +- *PNDIS_802_11_AUTHENTICATION_ENCRYPTION; ++}; + +-typedef struct _NDIS_802_11_CAPABILITY { ++struct rt_ndis_802_11_capability { + unsigned long Length; + unsigned long Version; + unsigned long NoOfPMKIDs; + unsigned long NoOfAuthEncryptPairsSupported; +- NDIS_802_11_AUTHENTICATION_ENCRYPTION ++ struct rt_ndis_802_11_authentication_encryption + AuthenticationEncryptionSupported[1]; +-} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY; ++}; + + #define RT_PRIV_IOCTL (SIOCIWFIRSTPRIV + 0x01) /* Sync. with AP for wsc upnp daemon */ + #define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02) +@@ -595,25 +594,25 @@ typedef enum _RT_802_11_PHY_MODE { + } RT_802_11_PHY_MODE; + + /* put all proprietery for-query objects here to reduce # of Query_OID */ +-typedef struct _RT_802_11_LINK_STATUS { ++struct rt_802_11_link_status { + unsigned long CurrTxRate; /* in units of 0.5Mbps */ + unsigned long ChannelQuality; /* 0..100 % */ + unsigned long TxByteCount; /* both ok and fail */ + unsigned long RxByteCount; /* both ok and fail */ + unsigned long CentralChannel; /* 40MHz central channel number */ +-} RT_802_11_LINK_STATUS, *PRT_802_11_LINK_STATUS; ++}; + +-typedef struct _RT_802_11_EVENT_LOG { ++struct rt_802_11_event_log { + LARGE_INTEGER SystemTime; /* timestammp via NdisGetCurrentSystemTime() */ + u8 Addr[MAC_ADDR_LENGTH]; + u16 Event; /* EVENT_xxx */ +-} RT_802_11_EVENT_LOG, *PRT_802_11_EVENT_LOG; ++}; + +-typedef struct _RT_802_11_EVENT_TABLE { ++struct rt_802_11_event_table { + unsigned long Num; + unsigned long Rsv; /* to align Log[] at LARGE_INEGER boundary */ +- RT_802_11_EVENT_LOG Log[MAX_NUMBER_OF_EVENT]; +-} RT_802_11_EVENT_TABLE, PRT_802_11_EVENT_TABLE; ++ struct rt_802_11_event_log Log[MAX_NUMBER_OF_EVENT]; ++}; + + /* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ + typedef union _MACHTTRANSMIT_SETTING { +@@ -628,7 +627,7 @@ typedef union _MACHTTRANSMIT_SETTING { + u16 word; + } MACHTTRANSMIT_SETTING, *PMACHTTRANSMIT_SETTING; + +-typedef struct _RT_802_11_MAC_ENTRY { ++struct rt_802_11_mac_entry { + u8 Addr[MAC_ADDR_LENGTH]; + u8 Aid; + u8 Psm; /* 0:PWR_ACTIVE, 1:PWR_SAVE */ +@@ -638,21 +637,21 @@ typedef struct _RT_802_11_MAC_ENTRY { + char AvgRssi2; + u32 ConnectedTime; + MACHTTRANSMIT_SETTING TxRate; +-} RT_802_11_MAC_ENTRY, *PRT_802_11_MAC_ENTRY; ++}; + +-typedef struct _RT_802_11_MAC_TABLE { ++struct rt_802_11_mac_table { + unsigned long Num; +- RT_802_11_MAC_ENTRY Entry[MAX_NUMBER_OF_MAC]; +-} RT_802_11_MAC_TABLE, *PRT_802_11_MAC_TABLE; ++ struct rt_802_11_mac_entry Entry[MAX_NUMBER_OF_MAC]; ++}; + + /* structure for query/set hardware register - MAC, BBP, RF register */ +-typedef struct _RT_802_11_HARDWARE_REGISTER { ++struct rt_802_11_hardware_register { + unsigned long HardwareType; /* 0:MAC, 1:BBP, 2:RF register, 3:EEPROM */ + unsigned long Offset; /* Q/S register offset addr */ + unsigned long Data; /* R/W data buffer */ +-} RT_802_11_HARDWARE_REGISTER, *PRT_802_11_HARDWARE_REGISTER; ++}; + +-typedef struct _RT_802_11_AP_CONFIG { ++struct rt_802_11_ap_config { + unsigned long EnableTxBurst; /* 0-disable, 1-enable */ + unsigned long EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ + unsigned long IsolateInterStaTraffic; /* 0-disable, 1-enable isolation */ +@@ -661,10 +660,10 @@ typedef struct _RT_802_11_AP_CONFIG { + unsigned long UseShortSlotTime; /* 0-no use, 1-use 9-us short slot time */ + unsigned long Rsv1; /* must be 0 */ + unsigned long SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ +-} RT_802_11_AP_CONFIG, *PRT_802_11_AP_CONFIG; ++}; + + /* structure to query/set STA_CONFIG */ +-typedef struct _RT_802_11_STA_CONFIG { ++struct rt_802_11_sta_config { + unsigned long EnableTxBurst; /* 0-disable, 1-enable */ + unsigned long EnableTurboRate; /* 0-disable, 1-enable 72/100mbps turbo rate */ + unsigned long UseBGProtection; /* 0-AUTO, 1-always ON, 2-always OFF */ +@@ -673,12 +672,12 @@ typedef struct _RT_802_11_STA_CONFIG { + unsigned long HwRadioStatus; /* 0-OFF, 1-ON, default is 1, Read-Only */ + unsigned long Rsv1; /* must be 0 */ + unsigned long SystemErrorBitmap; /* ignore upon SET, return system error upon QUERY */ +-} RT_802_11_STA_CONFIG, *PRT_802_11_STA_CONFIG; ++}; + + /* */ + /* For OID Query or Set about BA structure */ + /* */ +-typedef struct _OID_BACAP_STRUC { ++struct rt_oid_bacap { + u8 RxBAWinLimit; + u8 TxBAWinLimit; + u8 Policy; /* 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use. other value invalid */ +@@ -687,32 +686,32 @@ typedef struct _OID_BACAP_STRUC { + u8 AmsduSize; /* 0:3839, 1:7935 bytes. u32 MSDUSizeToBytes[] = { 3839, 7935}; */ + u8 MMPSmode; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */ + BOOLEAN AutoBA; /* Auto BA will automatically */ +-} OID_BACAP_STRUC, *POID_BACAP_STRUC; ++}; + +-typedef struct _RT_802_11_ACL_ENTRY { ++struct rt_802_11_acl_entry { + u8 Addr[MAC_ADDR_LENGTH]; + u16 Rsv; +-} RT_802_11_ACL_ENTRY, *PRT_802_11_ACL_ENTRY; ++}; + +-typedef struct PACKED _RT_802_11_ACL { ++struct PACKED rt_rt_802_11_acl { + unsigned long Policy; /* 0-disable, 1-positive list, 2-negative list */ + unsigned long Num; +- RT_802_11_ACL_ENTRY Entry[MAX_NUMBER_OF_ACL]; +-} RT_802_11_ACL, *PRT_802_11_ACL; ++ struct rt_802_11_acl_entry Entry[MAX_NUMBER_OF_ACL]; ++}; + +-typedef struct _RT_802_11_WDS { ++struct rt_802_11_wds { + unsigned long Num; + NDIS_802_11_MAC_ADDRESS Entry[24 /*MAX_NUM_OF_WDS_LINK */ ]; + unsigned long KeyLength; + u8 KeyMaterial[32]; +-} RT_802_11_WDS, *PRT_802_11_WDS; ++}; + +-typedef struct _RT_802_11_TX_RATES_ { ++struct rt_802_11_tx_rates { + u8 SupRateLen; + u8 SupRate[MAX_LENGTH_OF_SUPPORT_RATES]; + u8 ExtRateLen; + u8 ExtRate[MAX_LENGTH_OF_SUPPORT_RATES]; +-} RT_802_11_TX_RATES, *PRT_802_11_TX_RATES; ++}; + + /* Definition of extra information code */ + #define GENERAL_LINK_UP 0x0 /* Link is Up */ +@@ -732,7 +731,7 @@ typedef struct _RT_802_11_TX_RATES_ { + #define EXTRA_INFO_CLEAR 0xffffffff + + /* This is OID setting structure. So only GF or MM as Mode. This is valid when our wirelss mode has 802.11n in use. */ +-typedef struct { ++struct rt_oid_set_ht_phymode { + RT_802_11_PHY_MODE PhyMode; /* */ + u8 TransmitNo; + u8 HtMode; /*HTMODE_GF or HTMODE_MM */ +@@ -742,7 +741,7 @@ typedef struct { + u8 STBC; + u8 SHORTGI; + u8 rsv; +-} OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE; ++}; + + #define MAX_CUSTOM_LEN 128 + +@@ -752,14 +751,14 @@ typedef enum _RT_802_11_D_CLIENT_MODE { + Rt802_11_D_Strict, + } RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE; + +-typedef struct _RT_CHANNEL_LIST_INFO { ++struct rt_channel_list_info { + u8 ChannelList[MAX_NUM_OF_CHS]; /* list all supported channels for site survey */ + u8 ChannelListNum; /* number of channel in ChannelList[] */ +-} RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO; ++}; + + /* WSC configured credential */ +-typedef struct _WSC_CREDENTIAL { +- NDIS_802_11_SSID SSID; /* mandatory */ ++struct rt_wsc_credential { ++ struct rt_ndis_802_11_ssid SSID; /* mandatory */ + u16 AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */ + u16 EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */ + u8 Key[64]; /* mandatory, Maximum 64 byte */ +@@ -767,13 +766,13 @@ typedef struct _WSC_CREDENTIAL { + u8 MacAddr[6]; /* mandatory, AP MAC address */ + u8 KeyIndex; /* optional, default is 1 */ + u8 Rsvd[3]; /* Make alignment */ +-} WSC_CREDENTIAL, *PWSC_CREDENTIAL; ++}; + + /* WSC configured profiles */ +-typedef struct _WSC_PROFILE { ++struct rt_wsc_profile { + u32 ProfileCnt; + u32 ApplyProfileIdx; /* add by johnli, fix WPS test plan 5.1.1 */ +- WSC_CREDENTIAL Profile[8]; /* Support up to 8 profiles */ +-} WSC_PROFILE, *PWSC_PROFILE; ++ struct rt_wsc_credential Profile[8]; /* Support up to 8 profiles */ ++}; + + #endif /* _OID_H_ */ +diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c +index 20db402..6af4304 100644 +--- a/drivers/staging/rt2860/pci_main_dev.c ++++ b/drivers/staging/rt2860/pci_main_dev.c +@@ -59,7 +59,7 @@ static void __exit rt2860_cleanup_module(void); + static int __init rt2860_init_module(void); + + static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, +- IN PRTMP_ADAPTER pAd); ++ struct rt_rtmp_adapter *pAd); + + #ifdef CONFIG_PM + static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state); +@@ -123,7 +123,7 @@ resume:rt2860_resume, + ***************************************************************************/ + #ifdef CONFIG_PM + +-void RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RT2860RejectPendingPackets(struct rt_rtmp_adapter *pAd) + { + /* clear PS packets */ + /* clear TxSw packets */ +@@ -132,7 +132,7 @@ void RT2860RejectPendingPackets(IN PRTMP_ADAPTER pAd) + static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)NULL; + int retval = 0; + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_suspend()\n")); +@@ -184,7 +184,7 @@ static int rt2860_suspend(struct pci_dev *pci_dev, pm_message_t state) + static int rt2860_resume(struct pci_dev *pci_dev) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)NULL; + int retval; + + /* set the power state of a PCI device */ +@@ -268,13 +268,13 @@ module_exit(rt2860_cleanup_module); + static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, + IN const struct pci_device_id *pci_id) + { +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)NULL; + struct net_device *net_dev; + void *handle; + char *print_name; + unsigned long csr_addr; + int rv = 0; +- RTMP_OS_NETDEV_OP_HOOK netDevHook; ++ struct rt_rtmp_os_netdev_op_hook netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_probe\n")); + +@@ -314,7 +314,7 @@ static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, + pci_set_master(pci_dev); + + /*RtmpDevInit============================================== */ +- /* Allocate RTMP_ADAPTER adapter structure */ ++ /* Allocate struct rt_rtmp_adapter adapter structure */ + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); + if (handle == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +@@ -325,10 +325,10 @@ static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, + + ((struct os_cookie *)handle)->pci_dev = pci_dev; + +- rv = RTMPAllocAdapterBlock(handle, &pAd); /*shiang: we may need the pci_dev for allocate structure of "RTMP_ADAPTER" */ ++ rv = RTMPAllocAdapterBlock(handle, &pAd); /*shiang: we may need the pci_dev for allocate structure of "struct rt_rtmp_adapter" */ + if (rv != NDIS_STATUS_SUCCESS) + goto err_out_iounmap; +- /* Here are the RTMP_ADAPTER structure with pci-bus specific parameters. */ ++ /* Here are the struct rt_rtmp_adapter structure with pci-bus specific parameters. */ + pAd->CSRBaseAddress = (u8 *)csr_addr; + DBGPRINT(RT_DEBUG_ERROR, + ("pAd->CSRBaseAddress =0x%lx, csr_addr=0x%lx!\n", +@@ -369,7 +369,7 @@ err_out_free_netdev: + RtmpOSNetDevFree(net_dev); + + err_out_free_radev: +- /* free RTMP_ADAPTER strcuture and os_cookie */ ++ /* free struct rt_rtmp_adapter strcuture and os_cookie */ + RTMPFreeAdapter(pAd); + + err_out_iounmap: +@@ -392,7 +392,7 @@ err_out: + static void __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + { + struct net_device *net_dev = pci_get_drvdata(pci_dev); +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + unsigned long csr_addr = net_dev->base_addr; /* pAd->CSRBaseAddress; */ + + GET_PAD_FROM_NET_DEV(pAd, net_dev); +@@ -410,7 +410,7 @@ static void __devexit rt2860_remove_one(IN struct pci_dev *pci_dev) + release_mem_region(pci_resource_start(pci_dev, 0), + pci_resource_len(pci_dev, 0)); + +- /* Free RTMP_ADAPTER related structures. */ ++ /* Free struct rt_rtmp_adapter related structures. */ + RtmpRaDevCtrlExit(pAd); + + } else { +@@ -456,7 +456,7 @@ BOOLEAN RT28XXChipsetCheck(IN void *_dev_p) + * PCIe device initialization related procedures. + * + ***************************************************************************/ +-static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) ++static void RTMPInitPCIeDevice(struct pci_dev *pci_dev, struct rt_rtmp_adapter *pAd) + { + u16 device_id; + struct os_cookie *pObj; +@@ -495,7 +495,7 @@ static void RTMPInitPCIeDevice(IN struct pci_dev *pci_dev, IN PRTMP_ADAPTER pAd) + } + } + +-void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) ++void RTMPInitPCIeLinkCtrlValue(struct rt_rtmp_adapter *pAd) + { + int pos; + u16 reg16, data2, PCIePowerSaveLevel, Configuration; +@@ -810,7 +810,7 @@ void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd) + } + } + +-void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) ++void RTMPFindHostPCIDev(struct rt_rtmp_adapter *pAd) + { + u16 reg16; + u8 reg8; +@@ -856,7 +856,7 @@ void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level) ++void RTMPPCIeLinkCtrlValueRestore(struct rt_rtmp_adapter *pAd, u8 Level) + { + u16 PCIePowerSaveLevel, reg16; + u16 Configuration; +@@ -950,7 +950,7 @@ void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level) + + ======================================================================== + */ +-void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max) ++void RTMPPCIeLinkCtrlSetting(struct rt_rtmp_adapter *pAd, u16 Max) + { + u16 PCIePowerSaveLevel, reg16; + u16 Configuration; +@@ -1076,7 +1076,7 @@ void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max) + + ======================================================================== + */ +-void RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd) ++void RTMPrt3xSetPCIePowerLinkCtrl(struct rt_rtmp_adapter *pAd) + { + + unsigned long HostConfiguration = 0; +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 4c28117..a94593c 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -89,7 +89,7 @@ void RTMP_SetPeriodicTimer(struct timer_list * pTimer, + } + + /* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ +-void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd, + struct timer_list * pTimer, + IN TIMER_FUNCTION function, void *data) + { +@@ -127,7 +127,7 @@ void RTMP_OS_Del_Timer(struct timer_list * pTimer, + + } + +-void RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry) ++void RTMP_OS_Release_Packet(struct rt_rtmp_adapter *pAd, struct rt_queue_entry *pEntry) + { + /*RTMPFreeNdisPacket(pAd, (struct sk_buff *)pEntry); */ + } +@@ -150,7 +150,7 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time) + } + + /* pAd MUST allow to be NULL */ +-int os_alloc_mem(IN RTMP_ADAPTER * pAd, u8 ** mem, unsigned long size) ++int os_alloc_mem(struct rt_rtmp_adapter *pAd, u8 ** mem, unsigned long size) + { + *mem = (u8 *)kmalloc(size, GFP_ATOMIC); + if (*mem) +@@ -160,7 +160,7 @@ int os_alloc_mem(IN RTMP_ADAPTER * pAd, u8 ** mem, unsigned long size) + } + + /* pAd MUST allow to be NULL */ +-int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem) ++int os_free_mem(struct rt_rtmp_adapter *pAd, void *mem) + { + + ASSERT(mem); +@@ -168,7 +168,7 @@ int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem) + return (NDIS_STATUS_SUCCESS); + } + +-void *RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) ++void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size) + { + struct sk_buff *skb; + /* Add 2 more bytes for ip header alignment */ +@@ -177,7 +177,7 @@ void *RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size) + return ((void *)skb); + } + +-void *RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length) + { + struct sk_buff *pkt; +@@ -196,7 +196,7 @@ void *RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, + return (void *)pkt; + } + +-void *RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateTxPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress) +@@ -220,7 +220,7 @@ void *RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, + return (void *)pkt; + } + +-void build_tx_packet(IN PRTMP_ADAPTER pAd, ++void build_tx_packet(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pFrame, unsigned long FrameLen) + { +@@ -233,7 +233,7 @@ void build_tx_packet(IN PRTMP_ADAPTER pAd, + NdisMoveMemory(skb_put(pTxPkt, FrameLen), pFrame, FrameLen); + } + +-void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) ++void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd) + { + struct os_cookie *os_cookie; + int index; +@@ -260,7 +260,7 @@ void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd) + + NdisFreeSpinLock(&pAd->irq_lock); + +- vfree(pAd); /* pci_free_consistent(os_cookie->pci_dev,sizeof(RTMP_ADAPTER),pAd,os_cookie->pAd_pa); */ ++ vfree(pAd); /* pci_free_consistent(os_cookie->pci_dev,sizeof(struct rt_rtmp_adapter),pAd,os_cookie->pAd_pa); */ + if (os_cookie) + kfree(os_cookie); + } +@@ -292,7 +292,7 @@ BOOLEAN OS_Need_Clone_Packet(void) + + ======================================================================== + */ +-int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd, + IN BOOLEAN pInsAMSDUHdr, + void *pInPacket, + void ** ppOutPacket) +@@ -323,7 +323,7 @@ int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, + } + + /* the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() */ +-int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd, + void ** ppPacket, + u8 *pHeader, + u32 HeaderLen, +@@ -367,7 +367,7 @@ int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, + corresponding NDIS_BUFFER and allocated memory. + ======================================================================== + */ +-void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, void *pPacket) ++void RTMPFreeNdisPacket(struct rt_rtmp_adapter *pAd, void *pPacket) + { + dev_kfree_skb_any(RTPKT_TO_OSPKT(pPacket)); + } +@@ -386,7 +386,7 @@ int Sniff2BytesFromNdisBuffer(char *pFirstBuffer, + } + + void RTMP_QueryPacketInfo(void *pPacket, +- OUT PACKET_INFO * pPacketInfo, ++ struct rt_packet_info *pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen) + { + pPacketInfo->BufferCount = 1; +@@ -399,7 +399,7 @@ void RTMP_QueryPacketInfo(void *pPacket, + } + + void RTMP_QueryNextPacketInfo(void ** ppPacket, +- OUT PACKET_INFO * pPacketInfo, ++ struct rt_packet_info *pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen) + { + void *pPacket = NULL; +@@ -429,7 +429,7 @@ void RTMP_QueryNextPacketInfo(void ** ppPacket, + } + } + +-void *DuplicatePacket(IN PRTMP_ADAPTER pAd, ++void *DuplicatePacket(struct rt_rtmp_adapter *pAd, + void *pPacket, u8 FromWhichBSSID) + { + struct sk_buff *skb; +@@ -450,7 +450,7 @@ void *DuplicatePacket(IN PRTMP_ADAPTER pAd, + + } + +-void *duplicate_pkt(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt(struct rt_rtmp_adapter *pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, +@@ -474,7 +474,7 @@ void *duplicate_pkt(IN PRTMP_ADAPTER pAd, + } + + #define TKIP_TX_MIC_SIZE 8 +-void *duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt_with_TKIP_MIC(struct rt_rtmp_adapter *pAd, + void *pPacket) + { + struct sk_buff *skb, *newskb; +@@ -497,7 +497,7 @@ void *duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, + return OSPKT_TO_RTPKT(skb); + } + +-void *ClonePacket(IN PRTMP_ADAPTER pAd, ++void *ClonePacket(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pData, unsigned long DataSize) + { +@@ -524,8 +524,8 @@ void *ClonePacket(IN PRTMP_ADAPTER pAd, + /* */ + /* change OS packet DataPtr and DataLen */ + /* */ +-void update_os_packet_info(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void update_os_packet_info(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + struct sk_buff *pOSPkt; + +@@ -538,8 +538,8 @@ void update_os_packet_info(IN PRTMP_ADAPTER pAd, + pOSPkt->tail = pOSPkt->data + pOSPkt->len; + } + +-void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, ++void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, + u8 *pHeader802_3, + u8 FromWhichBSSID) + { +@@ -564,7 +564,7 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + LENGTH_802_3); + } + +-void announce_802_3_packet(IN PRTMP_ADAPTER pAd, void *pPacket) ++void announce_802_3_packet(struct rt_rtmp_adapter *pAd, void *pPacket) + { + + struct sk_buff *pRxPkt; +@@ -579,8 +579,8 @@ void announce_802_3_packet(IN PRTMP_ADAPTER pAd, void *pPacket) + netif_rx(pRxPkt); + } + +-PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(void *pPacket, RTMP_SCATTER_GATHER_LIST * sg) ++struct rt_rtmp_sg_list * ++rt_get_sg_list_from_packet(void *pPacket, struct rt_rtmp_sg_list *sg) + { + sg->NumberOfElements = 1; + sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); +@@ -628,7 +628,7 @@ void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen) + + ======================================================================== + */ +-void RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, ++void RTMPSendWirelessEvent(struct rt_rtmp_adapter *pAd, + u16 Event_flag, + u8 *pAddr, u8 BssIdx, char Rssi) + { +@@ -715,10 +715,10 @@ void RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, + __func__)); + } + +-void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void send_monitor_packets(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk) + { + struct sk_buff *pOSPkt; +- wlan_ng_prism2_header *ph; ++ struct rt_wlan_ng_prism2_header *ph; + int rate_index = 0; + u16 header_len = 0; + u8 temp_header[40] = { 0 }; +@@ -743,11 +743,11 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + goto err_free_sk_buff; + } + +- if (pRxBlk->DataSize + sizeof(wlan_ng_prism2_header) > ++ if (pRxBlk->DataSize + sizeof(struct rt_wlan_ng_prism2_header) > + RX_BUFFER_AGGRESIZE) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s : Size is too large! (%zu)\n", __func__, +- pRxBlk->DataSize + sizeof(wlan_ng_prism2_header))); ++ pRxBlk->DataSize + sizeof(struct rt_wlan_ng_prism2_header))); + goto err_free_sk_buff; + } + +@@ -795,9 +795,9 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + skb_pull(pOSPkt, (pRxBlk->pData - pOSPkt->data)); + } /*end if */ + +- if (skb_headroom(pOSPkt) < (sizeof(wlan_ng_prism2_header) + header_len)) { ++ if (skb_headroom(pOSPkt) < (sizeof(struct rt_wlan_ng_prism2_header) + header_len)) { + if (pskb_expand_head +- (pOSPkt, (sizeof(wlan_ng_prism2_header) + header_len), 0, ++ (pOSPkt, (sizeof(struct rt_wlan_ng_prism2_header) + header_len), 0, + GFP_ATOMIC)) { + DBGPRINT(RT_DEBUG_ERROR, + ("%s : Reallocate header size of sk_buff fail!\n", +@@ -810,12 +810,12 @@ void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + NdisMoveMemory(skb_push(pOSPkt, header_len), temp_header, + header_len); + +- ph = (wlan_ng_prism2_header *) skb_push(pOSPkt, +- sizeof(wlan_ng_prism2_header)); +- NdisZeroMemory(ph, sizeof(wlan_ng_prism2_header)); ++ ph = (struct rt_wlan_ng_prism2_header *)skb_push(pOSPkt, ++ sizeof(struct rt_wlan_ng_prism2_header)); ++ NdisZeroMemory(ph, sizeof(struct rt_wlan_ng_prism2_header)); + + ph->msgcode = DIDmsg_lnxind_wlansniffrm; +- ph->msglen = sizeof(wlan_ng_prism2_header); ++ ph->msglen = sizeof(struct rt_wlan_ng_prism2_header); + strcpy((char *)ph->devname, (char *)pAd->net_dev->name); + + ph->hosttime.did = DIDmsg_lnxind_wlansniffrm_hosttime; +@@ -909,7 +909,7 @@ int RtmpOSIRQRequest(struct net_device *pNetDev) + { + #ifdef RTMP_PCI_SUPPORT + struct net_device *net_dev = pNetDev; +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + int retval = 0; + + GET_PAD_FROM_NET_DEV(pAd, pNetDev); +@@ -935,7 +935,7 @@ int RtmpOSIRQRequest(struct net_device *pNetDev) + int RtmpOSIRQRelease(struct net_device *pNetDev) + { + struct net_device *net_dev = pNetDev; +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -1005,12 +1005,12 @@ int RtmpOSFileWrite(struct file *osfd, char *pDataPtr, int writeLen) + Task create/management/kill related functions. + + *******************************************************************************/ +-int RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) ++int RtmpOSTaskKill(struct rt_rtmp_os_task *pTask) + { +- RTMP_ADAPTER *pAd; ++ struct rt_rtmp_adapter *pAd; + int ret = NDIS_STATUS_FAILURE; + +- pAd = (RTMP_ADAPTER *) pTask->priv; ++ pAd = (struct rt_rtmp_adapter *)pTask->priv; + + #ifdef KTHREAD_SUPPORT + if (pTask->kthread_task) { +@@ -1043,7 +1043,7 @@ int RtmpOSTaskKill(IN RTMP_OS_TASK * pTask) + + } + +-int RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask) ++int RtmpOSTaskNotifyToExit(struct rt_rtmp_os_task *pTask) + { + + #ifndef KTHREAD_SUPPORT +@@ -1053,7 +1053,7 @@ int RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask) + return 0; + } + +-void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask) ++void RtmpOSTaskCustomize(struct rt_rtmp_os_task *pTask) + { + + #ifndef KTHREAD_SUPPORT +@@ -1070,7 +1070,7 @@ void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask) + #endif + } + +-int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskAttach(struct rt_rtmp_os_task *pTask, + IN int (*fn) (void *), IN void *arg) + { + int status = NDIS_STATUS_SUCCESS; +@@ -1098,7 +1098,7 @@ int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, + return status; + } + +-int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskInit(struct rt_rtmp_os_task *pTask, + char *pTaskName, void * pPriv) + { + int len; +@@ -1106,7 +1106,7 @@ int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, + ASSERT(pTask); + + #ifndef KTHREAD_SUPPORT +- NdisZeroMemory((u8 *)(pTask), sizeof(RTMP_OS_TASK)); ++ NdisZeroMemory((u8 *)(pTask), sizeof(struct rt_rtmp_os_task)); + #endif + + len = strlen(pTaskName); +@@ -1126,7 +1126,7 @@ int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, + return NDIS_STATUS_SUCCESS; + } + +-void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd) ++void RTMP_IndicateMediaState(struct rt_rtmp_adapter *pAd) + { + if (pAd->CommonCfg.bWirelessEvent) { + if (pAd->IndicateMediaState == NdisMediaStateConnected) { +@@ -1141,7 +1141,7 @@ void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd) + } + } + +-int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, ++int RtmpOSWrielessEventSend(struct rt_rtmp_adapter *pAd, + u32 eventType, + int flags, + u8 *pSrcMac, +@@ -1167,7 +1167,7 @@ int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, + int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr) + { + struct net_device *net_dev; +- RTMP_ADAPTER *pAd; ++ struct rt_rtmp_adapter *pAd; + + net_dev = pNetDev; + GET_PAD_FROM_NET_DEV(pAd, net_dev); +@@ -1187,7 +1187,7 @@ int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr) + /* + * Assign the network dev name for created Ralink WiFi interface. + */ +-static int RtmpOSNetDevRequestName(IN RTMP_ADAPTER * pAd, ++static int RtmpOSNetDevRequestName(struct rt_rtmp_adapter *pAd, + struct net_device *dev, + char *pPrefixStr, int devIdx) + { +@@ -1278,7 +1278,7 @@ void RtmpOSNetDeviceRefPut(struct net_device *pNetDev) + dev_put(pNetDev); + } + +-int RtmpOSNetDevDestory(IN RTMP_ADAPTER * pAd, struct net_device *pNetDev) ++int RtmpOSNetDevDestory(struct rt_rtmp_adapter *pAd, struct net_device *pNetDev) + { + + /* TODO: Need to fix this */ +@@ -1292,14 +1292,14 @@ void RtmpOSNetDevDetach(struct net_device *pNetDev) + } + + int RtmpOSNetDevAttach(struct net_device *pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook) ++ struct rt_rtmp_os_netdev_op_hook *pDevOpHook) + { + int ret, rtnl_locked = FALSE; + + DBGPRINT(RT_DEBUG_TRACE, ("RtmpOSNetDevAttach()--->\n")); + /* If we need hook some callback function to the net device structrue, now do it. */ + if (pDevOpHook) { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, pNetDev); + +@@ -1331,7 +1331,7 @@ int RtmpOSNetDevAttach(struct net_device *pNetDev, + return NDIS_STATUS_FAILURE; + } + +-struct net_device *RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpOSNetDevCreate(struct rt_rtmp_adapter *pAd, + int devType, + int devNum, + int privMemSize, char *pNamePrefix) +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index d63ac7d..e1eb740 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -184,11 +184,11 @@ struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev); + /*********************************************************************************** + * OS file operation related data structure definitions + ***********************************************************************************/ +-typedef struct _RTMP_OS_FS_INFO_ { ++struct rt_rtmp_os_fs_info { + int fsuid; + int fsgid; + mm_segment_t fs; +-} RTMP_OS_FS_INFO; ++}; + + #define IS_FILE_OPEN_ERR(_fd) IS_ERR((_fd)) + +@@ -373,7 +373,7 @@ static inline void NdisGetSystemUpTime(unsigned long * time) + } + + /*********************************************************************************** +- * OS specific cookie data structure binding to RTMP_ADAPTER ++ * OS specific cookie data structure binding to struct rt_rtmp_adapter + ***********************************************************************************/ + + struct os_cookie { +@@ -631,7 +631,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + (void *)(pEntry) + + #define PACKET_TO_QUEUE_ENTRY(pPacket) \ +- (PQUEUE_ENTRY)(pPacket) ++ (struct rt_queue_entry *)(pPacket) + + #define GET_SG_LIST_FROM_PACKET(_p, _sc) \ + rt_get_sg_list_from_packet(_p, _sc) +@@ -842,6 +842,6 @@ int rt28xx_sta_ioctl(struct net_device *net_dev, IN OUT struct ifreq *rq, int cm + extern int ra_mtd_write(int num, loff_t to, size_t len, const u_char * buf); + extern int ra_mtd_read(int num, loff_t from, size_t len, u_char * buf); + +-#define GET_PAD_FROM_NET_DEV(_pAd, _net_dev) (_pAd) = (PRTMP_ADAPTER)(_net_dev)->ml_priv; ++#define GET_PAD_FROM_NET_DEV(_pAd, _net_dev) (_pAd) = (struct rt_rtmp_adapter *)(_net_dev)->ml_priv; + + #endif /* __RT_LINUX_H__ // */ +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index 3472799..fbbec9d 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -83,7 +83,7 @@ Note: + */ + int MainVirtualIF_close(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -99,9 +99,9 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + + if (INFRA_ON(pAd) && + (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { +- MLME_DISASSOC_REQ_STRUCT DisReq; +- MLME_QUEUE_ELEM *MsgElem = +- (MLME_QUEUE_ELEM *) kmalloc(sizeof(MLME_QUEUE_ELEM), ++ struct rt_mlme_disassoc_req DisReq; ++ struct rt_mlme_queue_elem *MsgElem = ++ (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + MEM_ALLOC_FLAG); + + if (MsgElem) { +@@ -112,10 +112,10 @@ int MainVirtualIF_close(IN struct net_device *net_dev) + MsgElem->Machine = ASSOC_STATE_MACHINE; + MsgElem->MsgType = MT2_MLME_DISASSOC_REQ; + MsgElem->MsgLen = +- sizeof(MLME_DISASSOC_REQ_STRUCT); ++ sizeof(struct rt_mlme_disassoc_req); + NdisMoveMemory(MsgElem->Msg, &DisReq, + sizeof +- (MLME_DISASSOC_REQ_STRUCT)); ++ (struct rt_mlme_disassoc_req)); + + /* Prevent to connect AP again in STAMlmePeriodicExec */ + pAd->MlmeAux.AutoReconnectSsidLen = 32; +@@ -167,7 +167,7 @@ Note: + */ + int MainVirtualIF_open(IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -211,7 +211,7 @@ Note: + int rt28xx_close(struct net_device *dev) + { + struct net_device *net_dev = (struct net_device *)dev; +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + BOOLEAN Cancelled; + u32 i = 0; + +@@ -381,7 +381,7 @@ Note: + int rt28xx_open(struct net_device *dev) + { + struct net_device *net_dev = (struct net_device *)dev; +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + int retval = 0; + /*struct os_cookie *pObj; */ + +@@ -459,14 +459,14 @@ static const struct net_device_ops rt2860_netdev_ops = { + .ndo_start_xmit = rt28xx_send_packets, + }; + +-struct net_device *RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, +- IN RTMP_OS_NETDEV_OP_HOOK * pNetDevHook) ++struct net_device *RtmpPhyNetDevInit(struct rt_rtmp_adapter *pAd, ++ struct rt_rtmp_os_netdev_op_hook *pNetDevHook) + { + struct net_device *net_dev = NULL; + /* int Status; */ + + net_dev = +- RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(PRTMP_ADAPTER), ++ RtmpOSNetDevCreate(pAd, INT_MAIN, 0, sizeof(struct rt_rtmp_adapter *), + INF_MAIN_DEV_NAME); + if (net_dev == NULL) { + printk +@@ -475,7 +475,7 @@ struct net_device *RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, + } + + NdisZeroMemory((unsigned char *)pNetDevHook, +- sizeof(RTMP_OS_NETDEV_OP_HOOK)); ++ sizeof(struct rt_rtmp_os_netdev_op_hook)); + pNetDevHook->netdev_ops = &rt2860_netdev_ops; + pNetDevHook->priv_flags = INT_MAIN; + pNetDevHook->needProtcted = FALSE; +@@ -509,7 +509,7 @@ Note: + int rt28xx_packet_xmit(struct sk_buff *skb) + { + struct net_device *net_dev = skb->dev; +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + int status = NETDEV_TX_OK; + void *pPacket = (void *)skb; + +@@ -561,7 +561,7 @@ Note: + static int rt28xx_send_packets(IN struct sk_buff *skb_p, + IN struct net_device *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -580,7 +580,7 @@ static int rt28xx_send_packets(IN struct sk_buff *skb_p, + /* This function will be called when query /proc */ + struct iw_statistics *rt28xx_get_wireless_stats(IN struct net_device *net_dev) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, net_dev); + +@@ -643,7 +643,7 @@ void tbtt_tasklet(unsigned long data) + static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device + *net_dev) + { +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + if (net_dev) + GET_PAD_FROM_NET_DEV(pAd, net_dev); +@@ -690,7 +690,7 @@ static struct net_device_stats *RT28xx_get_ether_stats(IN struct net_device + return NULL; + } + +-BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, struct net_device *net_dev) ++BOOLEAN RtmpPhyNetDevExit(struct rt_rtmp_adapter *pAd, struct net_device *net_dev) + { + + /* Unregister network device */ +@@ -724,11 +724,11 @@ Note: + int AdapterBlockAllocateMemory(void *handle, void ** ppAd) + { + +- *ppAd = (void *)vmalloc(sizeof(RTMP_ADAPTER)); /*pci_alloc_consistent(pci_dev, sizeof(RTMP_ADAPTER), phy_addr); */ ++ *ppAd = (void *)vmalloc(sizeof(struct rt_rtmp_adapter)); /*pci_alloc_consistent(pci_dev, sizeof(struct rt_rtmp_adapter), phy_addr); */ + + if (*ppAd) { +- NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER)); +- ((PRTMP_ADAPTER) * ppAd)->OS_Cookie = handle; ++ NdisZeroMemory(*ppAd, sizeof(struct rt_rtmp_adapter)); ++ ((struct rt_rtmp_adapter *)* ppAd)->OS_Cookie = handle; + return (NDIS_STATUS_SUCCESS); + } else { + return (NDIS_STATUS_FAILURE); +diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c +index 7494df4..e0a0aee 100644 +--- a/drivers/staging/rt2860/rt_pci_rbus.c ++++ b/drivers/staging/rt2860/rt_pci_rbus.c +@@ -77,7 +77,7 @@ static void fifo_statistic_full_tasklet(unsigned long data); + * + **************************************************************************/ + /* Function for TxDesc Memory allocation. */ +-void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd, + u32 Index, + unsigned long Length, + IN BOOLEAN Cached, +@@ -93,7 +93,7 @@ void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, + } + + /* Function for MgmtDesc Memory allocation. */ +-void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +@@ -108,7 +108,7 @@ void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, + } + + /* Function for RxDesc Memory allocation. */ +-void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateRxDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +@@ -123,7 +123,7 @@ void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, + } + + /* Function for free allocated Desc Memory. */ +-void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_FreeDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + void *VirtualAddress, + dma_addr_t PhysicalAddress) +@@ -135,7 +135,7 @@ void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, + } + + /* Function for TxData DMA Memory allocation. */ +-void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateFirstTxBuffer(struct rt_rtmp_adapter *pAd, + u32 Index, + unsigned long Length, + IN BOOLEAN Cached, +@@ -149,7 +149,7 @@ void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, + PhysicalAddress); + } + +-void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void *VirtualAddress, +@@ -170,7 +170,7 @@ void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, + * VirtualAddress: Pointer to memory is returned here + * PhysicalAddress: Physical address corresponding to virtual address + */ +-void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +@@ -194,7 +194,7 @@ void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, + * Notes: + * Cached is ignored: always cached memory + */ +-void *RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateRxPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, +@@ -224,7 +224,7 @@ void *RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, + return (void *)pkt; + } + +-void Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, unsigned long VirtualAddress) ++void Invalid_Remaining_Packet(struct rt_rtmp_adapter *pAd, unsigned long VirtualAddress) + { + dma_addr_t PhysicalAddress; + +@@ -233,7 +233,7 @@ void Invalid_Remaining_Packet(IN PRTMP_ADAPTER pAd, unsigned long VirtualAddress + RX_BUFFER_NORMSIZE - 1600, -1, PCI_DMA_FROMDEVICE); + } + +-int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpNetTaskInit(struct rt_rtmp_adapter *pAd) + { + struct os_cookie *pObj; + +@@ -257,7 +257,7 @@ int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + return NDIS_STATUS_SUCCESS; + } + +-void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpNetTaskExit(struct rt_rtmp_adapter *pAd) + { + struct os_cookie *pObj; + +@@ -273,7 +273,7 @@ void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) + tasklet_kill(&pObj->fifo_statistic_full_task); + } + +-int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpMgmtTaskInit(struct rt_rtmp_adapter *pAd) + { + + return NDIS_STATUS_SUCCESS; +@@ -293,13 +293,13 @@ Return Value: + Note: + ======================================================================== + */ +-void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpMgmtTaskExit(struct rt_rtmp_adapter *pAd) + { + + return; + } + +-static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) ++static inline void rt2860_int_enable(struct rt_rtmp_adapter *pAd, unsigned int mode) + { + u32 regValue; + +@@ -316,7 +316,7 @@ static inline void rt2860_int_enable(PRTMP_ADAPTER pAd, unsigned int mode) + RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE); + } + +-static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) ++static inline void rt2860_int_disable(struct rt_rtmp_adapter *pAd, unsigned int mode) + { + u32 regValue; + +@@ -337,7 +337,7 @@ static inline void rt2860_int_disable(PRTMP_ADAPTER pAd, unsigned int mode) + static void mgmt_dma_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + +@@ -376,7 +376,7 @@ static void mgmt_dma_done_tasklet(unsigned long data) + static void rx_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + BOOLEAN bReschedule = 0; + struct os_cookie *pObj; + +@@ -410,7 +410,7 @@ static void rx_done_tasklet(unsigned long data) + void fifo_statistic_full_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + struct os_cookie *pObj; + + /* Do nothing if the driver is starting halt state. */ +@@ -444,7 +444,7 @@ void fifo_statistic_full_tasklet(unsigned long data) + static void ac3_dma_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + BOOLEAN bReschedule = 0; +@@ -482,7 +482,7 @@ static void ac3_dma_done_tasklet(unsigned long data) + static void ac2_dma_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + BOOLEAN bReschedule = 0; +@@ -520,7 +520,7 @@ static void ac2_dma_done_tasklet(unsigned long data) + static void ac1_dma_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + BOOLEAN bReschedule = 0; +@@ -558,7 +558,7 @@ static void ac1_dma_done_tasklet(unsigned long data) + static void ac0_dma_done_tasklet(unsigned long data) + { + unsigned long flags; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)data; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + BOOLEAN bReschedule = 0; +@@ -604,7 +604,7 @@ int print_int_count; + IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + { + struct net_device *net_dev = (struct net_device *)dev_instance; +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + INT_SOURCE_CSR_STRUC IntSource; + struct os_cookie *pObj; + +@@ -793,7 +793,7 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) + dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, + int sd_idx, int direction) + { +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_adapter *pAd; + struct os_cookie *pObj; + + /* +@@ -812,12 +812,12 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, + sd_idx = -1 + */ + +- pAd = (PRTMP_ADAPTER) handle; ++ pAd = (struct rt_rtmp_adapter *)handle; + pObj = (struct os_cookie *)pAd->OS_Cookie; + + if (sd_idx == 1) { +- PTX_BLK pTxBlk; +- pTxBlk = (PTX_BLK) ptr; ++ struct rt_tx_blk *pTxBlk; ++ pTxBlk = (struct rt_tx_blk *)ptr; + return pci_map_single(pObj->pci_dev, pTxBlk->pSrcBufData, + pTxBlk->SrcBufLen, direction); + } else { +@@ -829,10 +829,10 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, + void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + int direction) + { +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_adapter *pAd; + struct os_cookie *pObj; + +- pAd = (PRTMP_ADAPTER) handle; ++ pAd = (struct rt_rtmp_adapter *)handle; + pObj = (struct os_cookie *)pAd->OS_Cookie; + + pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); +diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c +index 68f6f48..01a7eb4 100644 +--- a/drivers/staging/rt2860/rt_usb.c ++++ b/drivers/staging/rt2860/rt_usb.c +@@ -77,9 +77,9 @@ Return Value: + Note: + ======================================================================== + */ +-int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpMgmtTaskInit(struct rt_rtmp_adapter *pAd) + { +- RTMP_OS_TASK *pTask; ++ struct rt_rtmp_os_task *pTask; + int status; + + /* +@@ -133,10 +133,10 @@ Return Value: + Note: + ======================================================================== + */ +-void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpMgmtTaskExit(struct rt_rtmp_adapter *pAd) + { + int ret; +- RTMP_OS_TASK *pTask; ++ struct rt_rtmp_os_task *pTask; + + /* Sleep 50 milliseconds so pending io might finish normally */ + RTMPusecDelay(50000); +@@ -197,16 +197,16 @@ void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd) + + static void rtusb_dataout_complete(unsigned long data) + { +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_adapter *pAd; + struct urb *pUrb; + struct os_cookie *pObj; +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + u8 BulkOutPipeId; + int Status; + unsigned long IrqFlags; + + pUrb = (struct urb *)data; +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + pObj = (struct os_cookie *)pAd->OS_Cookie; + Status = pUrb->status; +@@ -294,14 +294,14 @@ static void rtusb_dataout_complete(unsigned long data) + + static void rtusb_null_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pNullContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pNullContext; + struct urb *pUrb; + int Status; + unsigned long irqFlag; + + pUrb = (struct urb *)data; +- pNullContext = (PTX_CONTEXT) pUrb->context; ++ pNullContext = (struct rt_tx_context *)pUrb->context; + pAd = pNullContext->pAd; + Status = pUrb->status; + +@@ -343,14 +343,14 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) + + static void rtusb_rts_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pRTSContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pRTSContext; + struct urb *pUrb; + int Status; + unsigned long irqFlag; + + pUrb = (struct urb *)data; +- pRTSContext = (PTX_CONTEXT) pUrb->context; ++ pRTSContext = (struct rt_tx_context *)pUrb->context; + pAd = pRTSContext->pAd; + Status = pUrb->status; + +@@ -393,13 +393,13 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) + + static void rtusb_pspoll_frame_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pPsPollContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pPsPollContext; + struct urb *pUrb; + int Status; + + pUrb = (struct urb *)data; +- pPsPollContext = (PTX_CONTEXT) pUrb->context; ++ pPsPollContext = (struct rt_tx_context *)pUrb->context; + pAd = pPsPollContext->pAd; + Status = pUrb->status; + +@@ -453,13 +453,13 @@ Note: + static void rx_done_tasklet(unsigned long data) + { + struct urb *pUrb; +- PRX_CONTEXT pRxContext; +- PRTMP_ADAPTER pAd; ++ struct rt_rx_context *pRxContext; ++ struct rt_rtmp_adapter *pAd; + int Status; + unsigned int IrqFlags; + + pUrb = (struct urb *)data; +- pRxContext = (PRX_CONTEXT) pUrb->context; ++ pRxContext = (struct rt_rx_context *)pUrb->context; + pAd = pRxContext->pAd; + Status = pUrb->status; + +@@ -514,8 +514,8 @@ static void rx_done_tasklet(unsigned long data) + + static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pMLMEContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pMLMEContext; + int index; + void *pPacket; + struct urb *pUrb; +@@ -523,7 +523,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + unsigned long IrqFlags; + + pUrb = (struct urb *)data; +- pMLMEContext = (PTX_CONTEXT) pUrb->context; ++ pMLMEContext = (struct rt_tx_context *)pUrb->context; + pAd = pMLMEContext->pAd; + Status = pUrb->status; + index = pMLMEContext->SelfIdx; +@@ -595,13 +595,13 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) + + static void rtusb_ac3_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_ht_tx_context *pHTTXContext; + u8 BulkOutPipeId = 3; + struct urb *pUrb; + + pUrb = (struct urb *)data; +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); +@@ -635,13 +635,13 @@ static void rtusb_ac3_dma_done_tasklet(unsigned long data) + + static void rtusb_ac2_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_ht_tx_context *pHTTXContext; + u8 BulkOutPipeId = 2; + struct urb *pUrb; + + pUrb = (struct urb *)data; +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); +@@ -675,13 +675,13 @@ static void rtusb_ac2_dma_done_tasklet(unsigned long data) + + static void rtusb_ac1_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_ht_tx_context *pHTTXContext; + u8 BulkOutPipeId = 1; + struct urb *pUrb; + + pUrb = (struct urb *)data; +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); +@@ -715,13 +715,13 @@ static void rtusb_ac1_dma_done_tasklet(unsigned long data) + + static void rtusb_ac0_dma_done_tasklet(unsigned long data) + { +- PRTMP_ADAPTER pAd; +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_ht_tx_context *pHTTXContext; + u8 BulkOutPipeId = 0; + struct urb *pUrb; + + pUrb = (struct urb *)data; +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + + rtusb_dataout_complete((unsigned long)pUrb); +@@ -753,7 +753,7 @@ static void rtusb_ac0_dma_done_tasklet(unsigned long data) + + } + +-int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) ++int RtmpNetTaskInit(struct rt_rtmp_adapter *pAd) + { + struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; + +@@ -780,7 +780,7 @@ int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd) + return NDIS_STATUS_SUCCESS; + } + +-void RtmpNetTaskExit(IN RTMP_ADAPTER * pAd) ++void RtmpNetTaskExit(struct rt_rtmp_adapter *pAd) + { + struct os_cookie *pObj; + +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 8182b2a..c50abf4 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -44,10 +44,7 @@ + #include "rtmp_dot11.h" + #include "rtmp_chip.h" + +-typedef struct _RTMP_ADAPTER RTMP_ADAPTER; +-typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; +- +-typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; ++struct rt_rtmp_adapter; + + /*#define DBG 1 */ + +@@ -146,7 +143,7 @@ extern u8 RateSwitchTable11N2SForABand[]; + + extern u8 PRE_N_HT_OUI[]; + +-typedef struct _RSSI_SAMPLE { ++struct rt_rssi_sample { + char LastRssi0; /* last received RSSI */ + char LastRssi1; /* last received RSSI */ + char LastRssi2; /* last received RSSI */ +@@ -156,21 +153,23 @@ typedef struct _RSSI_SAMPLE { + short AvgRssi0X8; + short AvgRssi1X8; + short AvgRssi2X8; +-} RSSI_SAMPLE; ++}; + + /* */ + /* Queue structure and macros */ + /* */ +-typedef struct _QUEUE_ENTRY { +- struct _QUEUE_ENTRY *Next; +-} QUEUE_ENTRY, *PQUEUE_ENTRY; ++struct rt_queue_entry; ++ ++struct rt_queue_entry { ++ struct rt_queue_entry *Next; ++}; + + /* Queue structure */ +-typedef struct _QUEUE_HEADER { +- PQUEUE_ENTRY Head; +- PQUEUE_ENTRY Tail; ++struct rt_queue_header { ++ struct rt_queue_entry *Head; ++ struct rt_queue_entry *Tail; + unsigned long Number; +-} QUEUE_HEADER, *PQUEUE_HEADER; ++}; + + #define InitializeQueueHeader(QueueHeader) \ + { \ +@@ -181,7 +180,7 @@ typedef struct _QUEUE_HEADER { + #define RemoveHeadQueue(QueueHeader) \ + (QueueHeader)->Head; \ + { \ +- PQUEUE_ENTRY pNext; \ ++ struct rt_queue_entry *pNext; \ + if ((QueueHeader)->Head != NULL) \ + { \ + pNext = (QueueHeader)->Head->Next; \ +@@ -195,32 +194,32 @@ typedef struct _QUEUE_HEADER { + + #define InsertHeadQueue(QueueHeader, QueueEntry) \ + { \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ ++ ((struct rt_queue_entry *)QueueEntry)->Next = (QueueHeader)->Head; \ ++ (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \ + if ((QueueHeader)->Tail == NULL) \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \ + (QueueHeader)->Number++; \ + } + + #define InsertTailQueue(QueueHeader, QueueEntry) \ + { \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ ++ ((struct rt_queue_entry *)QueueEntry)->Next = NULL; \ + if ((QueueHeader)->Tail) \ +- (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Tail->Next = (struct rt_queue_entry *)(QueueEntry); \ + else \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \ ++ (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \ + (QueueHeader)->Number++; \ + } + + #define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \ + { \ +- ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ ++ ((struct rt_queue_entry *)QueueEntry)->Next = NULL; \ + if ((QueueHeader)->Tail) \ +- (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Tail->Next = (struct rt_queue_entry *)(QueueEntry); \ + else \ +- (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ +- (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ ++ (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \ ++ (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \ + (QueueHeader)->Number++; \ + } + +@@ -294,12 +293,12 @@ typedef struct _QUEUE_HEADER { + /* MACRO for 32-bit PCI register read / write */ + /* */ + /* Usage : RTMP_IO_READ32( */ +-/* PRTMP_ADAPTER pAd, */ ++/* struct rt_rtmp_adapter *pAd, */ + /* unsigned long Register_Offset, */ + /* unsigned long * pValue) */ + /* */ + /* RTMP_IO_WRITE32( */ +-/* PRTMP_ADAPTER pAd, */ ++/* struct rt_rtmp_adapter *pAd, */ + /* unsigned long Register_Offset, */ + /* unsigned long Value) */ + /* */ +@@ -307,21 +306,21 @@ typedef struct _QUEUE_HEADER { + /* */ + /* Common fragment list structure - Identical to the scatter gather frag list structure */ + /* */ +-/*#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT */ +-/*#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT */ ++/*#define struct rt_rtmp_sg_element SCATTER_GATHER_ELEMENT */ ++/*#define struct rt_rtmp_sg_element *PSCATTER_GATHER_ELEMENT */ + #define NIC_MAX_PHYS_BUF_COUNT 8 + +-typedef struct _RTMP_SCATTER_GATHER_ELEMENT { ++struct rt_rtmp_sg_element { + void *Address; + unsigned long Length; + unsigned long *Reserved; +-} RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT; ++}; + +-typedef struct _RTMP_SCATTER_GATHER_LIST { ++struct rt_rtmp_sg_list { + unsigned long NumberOfElements; + unsigned long *Reserved; +- RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; +-} RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; ++ struct rt_rtmp_sg_element Elements[NIC_MAX_PHYS_BUF_COUNT]; ++}; + + /* */ + /* Some utility macros */ +@@ -476,11 +475,11 @@ typedef struct _RTMP_SCATTER_GATHER_LIST { + /* Data buffer for DMA operation, the buffer must be contiguous physical memory */ + /* Both DMA to / from CPU use the same structure. */ + /* */ +-typedef struct _RTMP_DMABUF { ++struct rt_rtmp_dmabuf { + unsigned long AllocSize; + void *AllocVa; /* TxBuf virtual address */ + dma_addr_t AllocPa; /* TxBuf physical address */ +-} RTMP_DMABUF, *PRTMP_DMABUF; ++}; + + /* */ + /* Control block (Descriptor) for all ring descriptor DMA operation, buffer must be */ +@@ -490,41 +489,41 @@ typedef struct _RTMP_DMABUF { + /* to describe the packet buffer. For Tx, char stored the tx packet descriptor */ + /* which driver should ACK upper layer when the tx is physically done or failed. */ + /* */ +-typedef struct _RTMP_DMACB { ++struct rt_rtmp_dmacb { + unsigned long AllocSize; /* Control block size */ + void *AllocVa; /* Control block virtual address */ + dma_addr_t AllocPa; /* Control block physical address */ + void *pNdisPacket; + void *pNextNdisPacket; + +- RTMP_DMABUF DmaBuf; /* Associated DMA buffer structure */ +-} RTMP_DMACB, *PRTMP_DMACB; ++ struct rt_rtmp_dmabuf DmaBuf; /* Associated DMA buffer structure */ ++}; + +-typedef struct _RTMP_TX_RING { +- RTMP_DMACB Cell[TX_RING_SIZE]; ++struct rt_rtmp_tx_ring { ++ struct rt_rtmp_dmacb Cell[TX_RING_SIZE]; + u32 TxCpuIdx; + u32 TxDmaIdx; + u32 TxSwFreeIdx; /* software next free tx index */ +-} RTMP_TX_RING, *PRTMP_TX_RING; ++}; + +-typedef struct _RTMP_RX_RING { +- RTMP_DMACB Cell[RX_RING_SIZE]; ++struct rt_rtmp_rx_ring { ++ struct rt_rtmp_dmacb Cell[RX_RING_SIZE]; + u32 RxCpuIdx; + u32 RxDmaIdx; + int RxSwReadIdx; /* software next read index */ +-} RTMP_RX_RING, *PRTMP_RX_RING; ++}; + +-typedef struct _RTMP_MGMT_RING { +- RTMP_DMACB Cell[MGMT_RING_SIZE]; ++struct rt_rtmp_mgmt_ring { ++ struct rt_rtmp_dmacb Cell[MGMT_RING_SIZE]; + u32 TxCpuIdx; + u32 TxDmaIdx; + u32 TxSwFreeIdx; /* software next free tx index */ +-} RTMP_MGMT_RING, *PRTMP_MGMT_RING; ++}; + + /* */ + /* Statistic counter structure */ + /* */ +-typedef struct _COUNTER_802_3 { ++struct rt_counter_802_3 { + /* General Stats */ + unsigned long GoodTransmits; + unsigned long GoodReceives; +@@ -537,9 +536,9 @@ typedef struct _COUNTER_802_3 { + unsigned long OneCollision; + unsigned long MoreCollisions; + +-} COUNTER_802_3, *PCOUNTER_802_3; ++}; + +-typedef struct _COUNTER_802_11 { ++struct rt_counter_802_11 { + unsigned long Length; + LARGE_INTEGER LastTransmittedFragmentCount; + LARGE_INTEGER TransmittedFragmentCount; +@@ -554,9 +553,9 @@ typedef struct _COUNTER_802_11 { + LARGE_INTEGER ReceivedFragmentCount; + LARGE_INTEGER MulticastReceivedFrameCount; + LARGE_INTEGER FCSErrorCount; +-} COUNTER_802_11, *PCOUNTER_802_11; ++}; + +-typedef struct _COUNTER_RALINK { ++struct rt_counter_ralink { + unsigned long TransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ + unsigned long ReceivedByteCount; /* both CRC okay and CRC error, used to calculate RX throughput */ + unsigned long BeenDisassociatedCount; +@@ -619,9 +618,9 @@ typedef struct _COUNTER_RALINK { + LARGE_INTEGER TransmittedMPDUsInAMPDUCount; + LARGE_INTEGER TransmittedOctetsInAMPDUCount; + LARGE_INTEGER MPDUInReceivedAMPDUCount; +-} COUNTER_RALINK, *PCOUNTER_RALINK; ++}; + +-typedef struct _COUNTER_DRS { ++struct rt_counter_drs { + /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ + u16 TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; + u8 PER[MAX_STEP_OF_TX_RATE_SWITCH]; +@@ -632,12 +631,12 @@ typedef struct _COUNTER_DRS { + u8 LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ + u8 LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ + unsigned long LastTxOkCount; +-} COUNTER_DRS, *PCOUNTER_DRS; ++}; + + /*************************************************************************** + * security key related data structure + **************************************************************************/ +-typedef struct _CIPHER_KEY { ++struct rt_cipher_key { + u8 Key[16]; /* right now we implement 4 keys, 128 bits max */ + u8 RxMic[8]; /* make alignment */ + u8 TxMic[8]; +@@ -648,37 +647,37 @@ typedef struct _CIPHER_KEY { + u8 BssId[6]; + /* Key length for each key, 0: entry is invalid */ + u8 Type; /* Indicate Pairwise/Group when reporting MIC error */ +-} CIPHER_KEY, *PCIPHER_KEY; ++}; + + /* structure to define WPA Group Key Rekey Interval */ +-typedef struct PACKED _RT_802_11_WPA_REKEY { ++struct PACKED rt_802_11_wpa_rekey { + unsigned long ReKeyMethod; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ + unsigned long ReKeyInterval; /* time-based: seconds, packet-based: kilo-packets */ +-} RT_WPA_REKEY, *PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; ++}; + + #ifdef RTMP_MAC_USB + /*************************************************************************** + * RTUSB I/O related data structure + **************************************************************************/ +-typedef struct _RT_SET_ASIC_WCID { ++struct rt_set_asic_wcid { + unsigned long WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ + unsigned long SetTid; /* time-based: seconds, packet-based: kilo-packets */ + unsigned long DeleteTid; /* time-based: seconds, packet-based: kilo-packets */ + u8 Addr[MAC_ADDR_LEN]; /* avoid in interrupt when write key */ +-} RT_SET_ASIC_WCID, *PRT_SET_ASIC_WCID; ++}; + +-typedef struct _RT_SET_ASIC_WCID_ATTRI { ++struct rt_set_asic_wcid_attri { + unsigned long WCID; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ + unsigned long Cipher; /* ASIC Cipher definition */ + u8 Addr[ETH_LENGTH_OF_ADDRESS]; +-} RT_SET_ASIC_WCID_ATTRI, *PRT_SET_ASIC_WCID_ATTRI; ++}; + + /* for USB interface, avoid in interrupt when write key */ +-typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { ++struct rt_add_pairwise_key_entry { + u8 MacAddr[6]; + u16 MacTabMatchWCID; /* ASIC */ +- CIPHER_KEY CipherKey; +-} RT_ADD_PAIRWISE_KEY_ENTRY, *PRT_ADD_PAIRWISE_KEY_ENTRY; ++ struct rt_cipher_key CipherKey; ++}; + + /* Cipher suite type for mixed mode group cipher, P802.11i-2004 */ + typedef enum _RT_802_11_CIPHER_SUITE_TYPE { +@@ -691,24 +690,24 @@ typedef enum _RT_802_11_CIPHER_SUITE_TYPE { + } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE; + #endif /* RTMP_MAC_USB // */ + +-typedef struct { ++struct rt_rogueap_entry { + u8 Addr[MAC_ADDR_LEN]; + u8 ErrorCode[2]; /*00 01-Invalid authentication type */ + /*00 02-Authentication timeout */ + /*00 03-Challenge from AP failed */ + /*00 04-Challenge to AP failed */ + BOOLEAN Reported; +-} ROGUEAP_ENTRY, *PROGUEAP_ENTRY; ++}; + +-typedef struct { ++struct rt_rogueap_table { + u8 RogueApNr; +- ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; +-} ROGUEAP_TABLE, *PROGUEAP_TABLE; ++ struct rt_rogueap_entry RogueApEntry[MAX_LEN_OF_BSS_TABLE]; ++}; + + /* */ + /* Cisco IAPP format */ + /* */ +-typedef struct _CISCO_IAPP_CONTENT_ { ++struct rt_cisco_iapp_content { + u16 Length; /*IAPP Length */ + u8 MessageType; /*IAPP type */ + u8 FunctionCode; /*IAPP function type */ +@@ -722,42 +721,42 @@ typedef struct _CISCO_IAPP_CONTENT_ { + u16 SsidLen; + u8 Ssid[MAX_LEN_OF_SSID]; + u16 Seconds; /*Seconds that the client has been disassociated. */ +-} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT; ++}; + + /* + * Fragment Frame structure + */ +-typedef struct _FRAGMENT_FRAME { ++struct rt_fragment_frame { + void *pFragPacket; + unsigned long RxSize; + u16 Sequence; + u16 LastFrag; + unsigned long Flags; /* Some extra frame information. bit 0: LLC presented */ +-} FRAGMENT_FRAME, *PFRAGMENT_FRAME; ++}; + + /* */ + /* Packet information for NdisQueryPacket */ + /* */ +-typedef struct _PACKET_INFO { ++struct rt_packet_info { + u32 PhysicalBufferCount; /* Physical breaks of buffer descripor chained */ + u32 BufferCount; /* Number of Buffer descriptor chained */ + u32 TotalPacketLength; /* Self explained */ + char *pFirstBuffer; /* Pointer to first buffer descriptor */ +-} PACKET_INFO, *PPACKET_INFO; ++}; + + /* */ + /* Arcfour Structure Added by PaulWu */ + /* */ +-typedef struct _ARCFOUR { ++struct rt_arcfourcontext { + u32 X; + u32 Y; + u8 STATE[256]; +-} ARCFOURCONTEXT, *PARCFOURCONTEXT; ++}; + + /* */ + /* Tkip Key structure which RC4 key & MIC calculation */ + /* */ +-typedef struct _TKIP_KEY_INFO { ++struct rt_tkip_key_info { + u32 nBytesInM; /* # bytes in M for MICKEY */ + unsigned long IV16; + unsigned long IV32; +@@ -768,56 +767,56 @@ typedef struct _TKIP_KEY_INFO { + unsigned long M; /* Message accumulator for MICKEY */ + u8 RC4KEY[16]; + u8 MIC[8]; +-} TKIP_KEY_INFO, *PTKIP_KEY_INFO; ++}; + + /* */ + /* Private / Misc data, counters for driver internal use */ + /* */ +-typedef struct __PRIVATE_STRUC { ++struct rt_private { + u32 SystemResetCnt; /* System reset counter */ + u32 TxRingFullCnt; /* Tx ring full occurrance number */ + u32 PhyRxErrCnt; /* PHY Rx error count, for debug purpose, might move to global counter */ + /* Variables for WEP encryption / decryption in rtmp_wep.c */ + u32 FCSCRC32; +- ARCFOURCONTEXT WEPCONTEXT; ++ struct rt_arcfourcontext WEPCONTEXT; + /* Tkip stuff */ +- TKIP_KEY_INFO Tx; +- TKIP_KEY_INFO Rx; +-} PRIVATE_STRUC, *PPRIVATE_STRUC; ++ struct rt_tkip_key_info Tx; ++ struct rt_tkip_key_info Rx; ++}; + + /*************************************************************************** + * Channel and BBP related data structures + **************************************************************************/ + /* structure to tune BBP R66 (BBP TUNING) */ +-typedef struct _BBP_R66_TUNING { ++struct rt_bbp_r66_tuning { + BOOLEAN bEnable; + u16 FalseCcaLowerThreshold; /* default 100 */ + u16 FalseCcaUpperThreshold; /* default 512 */ + u8 R66Delta; + u8 R66CurrentValue; + BOOLEAN R66LowerUpperSelect; /*Before LinkUp, Used LowerBound or UpperBound as R66 value. */ +-} BBP_R66_TUNING, *PBBP_R66_TUNING; ++}; + + /* structure to store channel TX power */ +-typedef struct _CHANNEL_TX_POWER { ++struct rt_channel_tx_power { + u16 RemainingTimeForUse; /*unit: sec */ + u8 Channel; + char Power; + char Power2; + u8 MaxTxPwr; + u8 DfsReq; +-} CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; ++}; + + /* structure to store 802.11j channel TX power */ +-typedef struct _CHANNEL_11J_TX_POWER { ++struct rt_channel_11j_tx_power { + u8 Channel; + u8 BW; /* BW_10 or BW_20 */ + char Power; + char Power2; + u16 RemainingTimeForUse; /*unit: sec */ +-} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; ++}; + +-typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { ++struct rt_soft_rx_ant_diversity { + u8 EvaluatePeriod; /* 0:not evalute status, 1: evaluate status, 2: switching status */ + u8 EvaluateStableCnt; + u8 Pair1PrimaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ +@@ -830,13 +829,13 @@ typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { + short Pair2LastAvgRssi; /* */ + unsigned long RcvPktNumWhenEvaluate; + BOOLEAN FirstPktArrivedWhenEvaluate; +- RALINK_TIMER_STRUCT RxAntDiversityTimer; +-} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; ++ struct rt_ralink_timer RxAntDiversityTimer; ++}; + + /*************************************************************************** + * structure for radar detection and channel switch + **************************************************************************/ +-typedef struct _RADAR_DETECT_STRUCT { ++struct rt_radar_detect { + /*BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h */ + u8 CSCount; /*Channel switch counter */ + u8 CSPeriod; /*Channel switch period (beacon count) */ +@@ -854,7 +853,7 @@ typedef struct _RADAR_DETECT_STRUCT { + BOOLEAN bFastDfs; + u8 ChMovingTime; + u8 LongPulseRadarTh; +-} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; ++}; + + typedef enum _ABGBAND_STATE_ { + UNKNOWN_BAND, +@@ -880,25 +879,25 @@ typedef union _PS_CONTROL { + /*************************************************************************** + * structure for MLME state machine + **************************************************************************/ +-typedef struct _MLME_STRUCT { ++struct rt_mlme { + /* STA state machines */ +- STATE_MACHINE CntlMachine; +- STATE_MACHINE AssocMachine; +- STATE_MACHINE AuthMachine; +- STATE_MACHINE AuthRspMachine; +- STATE_MACHINE SyncMachine; +- STATE_MACHINE WpaPskMachine; +- STATE_MACHINE LeapMachine; ++ struct rt_state_machine CntlMachine; ++ struct rt_state_machine AssocMachine; ++ struct rt_state_machine AuthMachine; ++ struct rt_state_machine AuthRspMachine; ++ struct rt_state_machine SyncMachine; ++ struct rt_state_machine WpaPskMachine; ++ struct rt_state_machine LeapMachine; + STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; + STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; + STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; + STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; + STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; + /* Action */ +- STATE_MACHINE ActMachine; ++ struct rt_state_machine ActMachine; + + /* common WPA state machine */ +- STATE_MACHINE WpaMachine; ++ struct rt_state_machine WpaMachine; + STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; + + unsigned long ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ +@@ -907,18 +906,18 @@ typedef struct _MLME_STRUCT { + + BOOLEAN bRunning; + spinlock_t TaskLock; +- MLME_QUEUE Queue; ++ struct rt_mlme_queue Queue; + + u32 ShiftReg; + +- RALINK_TIMER_STRUCT PeriodicTimer; +- RALINK_TIMER_STRUCT APSDPeriodicTimer; +- RALINK_TIMER_STRUCT LinkDownTimer; +- RALINK_TIMER_STRUCT LinkUpTimer; ++ struct rt_ralink_timer PeriodicTimer; ++ struct rt_ralink_timer APSDPeriodicTimer; ++ struct rt_ralink_timer LinkDownTimer; ++ struct rt_ralink_timer LinkUpTimer; + #ifdef RTMP_MAC_PCI + u8 bPsPollTimerRunning; +- RALINK_TIMER_STRUCT PsPollTimer; +- RALINK_TIMER_STRUCT RadioOnOffTimer; ++ struct rt_ralink_timer PsPollTimer; ++ struct rt_ralink_timer RadioOnOffTimer; + #endif /* RTMP_MAC_PCI // */ + unsigned long PeriodicRound; + unsigned long OneSecPeriodicRound; +@@ -926,7 +925,7 @@ typedef struct _MLME_STRUCT { + u8 RealRxPath; + BOOLEAN bLowThroughput; + BOOLEAN bEnableAutoAntennaCheck; +- RALINK_TIMER_STRUCT RxAntEvalTimer; ++ struct rt_ralink_timer RxAntEvalTimer; + + #ifdef RT30xx + u8 CaliBW40RfR24; +@@ -934,10 +933,10 @@ typedef struct _MLME_STRUCT { + #endif /* RT30xx // */ + + #ifdef RTMP_MAC_USB +- RALINK_TIMER_STRUCT AutoWakeupTimer; ++ struct rt_ralink_timer AutoWakeupTimer; + BOOLEAN AutoWakeupTimerRunning; + #endif /* RTMP_MAC_USB // */ +-} MLME_STRUCT, *PMLME_STRUCT; ++}; + + /*************************************************************************** + * 802.11 N related data structures +@@ -974,7 +973,7 @@ typedef enum _ORI_BLOCKACK_STATUS { + Originator_Done + } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS; + +-typedef struct _BA_ORI_ENTRY { ++struct rt_ba_ori_entry { + u8 Wcid; + u8 TID; + u8 BAWinSize; +@@ -983,11 +982,11 @@ typedef struct _BA_ORI_ENTRY { + u16 Sequence; + u16 TimeOutValue; + ORI_BLOCKACK_STATUS ORI_BA_Status; +- RALINK_TIMER_STRUCT ORIBATimer; ++ struct rt_ralink_timer ORIBATimer; + void *pAdapter; +-} BA_ORI_ENTRY, *PBA_ORI_ENTRY; ++}; + +-typedef struct _BA_REC_ENTRY { ++struct rt_ba_rec_entry { + u8 Wcid; + u8 TID; + u8 BAWinSize; /* 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. */ +@@ -996,7 +995,7 @@ typedef struct _BA_REC_ENTRY { + u16 LastIndSeq; + /* u16 LastIndSeqAtTimer; */ + u16 TimeOutValue; +- RALINK_TIMER_STRUCT RECBATimer; ++ struct rt_ralink_timer RECBATimer; + unsigned long LastIndSeqAtTimer; + unsigned long nDropPacket; + unsigned long rcvSeq; +@@ -1008,40 +1007,40 @@ typedef struct _BA_REC_ENTRY { + /* struct _BA_REC_ENTRY *pNext; */ + void *pAdapter; + struct reordering_list list; +-} BA_REC_ENTRY, *PBA_REC_ENTRY; ++}; + +-typedef struct { ++struct rt_ba_table { + unsigned long numAsRecipient; /* I am recipient of numAsRecipient clients. These client are in the BARecEntry[] */ + unsigned long numAsOriginator; /* I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] */ + unsigned long numDoneOriginator; /* count Done Originator sessions */ +- BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; +- BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; +-} BA_TABLE, *PBA_TABLE; ++ struct rt_ba_ori_entry BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; ++ struct rt_ba_rec_entry BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; ++}; + + /*For QureyBATableOID use; */ +-typedef struct PACKED _OID_BA_REC_ENTRY { ++struct PACKED rt_oid_ba_rec_entry { + u8 MACAddr[MAC_ADDR_LEN]; + u8 BaBitmap; /* if (BaBitmap&(1<MaxHTPhyMode.field.MODE >= MODE_HTMIX) +@@ -1079,7 +1078,7 @@ typedef struct { + (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) + + /*This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) */ +-typedef struct _IOT_STRUC { ++struct rt_iot { + u8 Threshold[2]; + u8 ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; /* compare with threshold[0] */ + u8 RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; /* compare with threshold[1] */ +@@ -1096,7 +1095,7 @@ typedef struct _IOT_STRUC { + BOOLEAN bNowAtherosBurstOn; + BOOLEAN bNextDisableRxBA; + BOOLEAN bToggle; +-} IOT_STRUC, *PIOT_STRUC; ++}; + + /* This is the registry setting for 802.11n transmit setting. Used in advanced page. */ + typedef union _REG_TRANSMIT_SETTING { +@@ -1131,7 +1130,7 @@ typedef union _DESIRED_TRANSMIT_SETTING { + * USB-based chip Beacon related data structures + **************************************************************************/ + #define BEACON_BITMAP_MASK 0xff +-typedef struct _BEACON_SYNC_STRUCT_ { ++struct rt_beacon_sync { + u8 BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET]; + u8 BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE]; + unsigned long TimIELocationInBeacon[HW_BEACON_MAX_COUNT]; +@@ -1139,7 +1138,7 @@ typedef struct _BEACON_SYNC_STRUCT_ { + BOOLEAN EnableBeacon; /* trigger to enable beacon transmission. */ + u8 BeaconBitMap; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ + u8 DtimBitOn; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ +-} BEACON_SYNC_STRUCT; ++}; + #endif /* RTMP_MAC_USB // */ + + /*************************************************************************** +@@ -1169,7 +1168,7 @@ typedef struct _BEACON_SYNC_STRUCT_ { + ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } + + /* configuration common to OPMODE_AP as well as OPMODE_STA */ +-typedef struct _COMMON_CONFIG { ++struct rt_common_config { + + BOOLEAN bCountryFlag; + u8 CountryCode[3]; +@@ -1246,7 +1245,7 @@ typedef struct _COMMON_CONFIG { + BACAP_STRUC BACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ + BACAP_STRUC REGBACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ + +- IOT_STRUC IOTestParm; /* 802.11n InterOpbility Test Parameter; */ ++ struct rt_iot IOTestParm; /* 802.11n InterOpbility Test Parameter; */ + unsigned long TxPreamble; /* Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto */ + BOOLEAN bUseZeroToDisableFragment; /* Microsoft use 0 as disable */ + unsigned long UseBGProtection; /* 0: auto, 1: always use, 2: always not use */ +@@ -1260,9 +1259,9 @@ typedef struct _COMMON_CONFIG { + BOOLEAN bRdg; + + BOOLEAN bWmmCapable; /* 0:disable WMM, 1:enable WMM */ +- QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ +- EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ +- QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ ++ struct rt_qos_capability_parm APQosCapability; /* QOS capability of the current associated AP */ ++ struct rt_edca_parm APEdcaParm; /* EDCA parameters of the current associated AP */ ++ struct rt_qbss_load_parm APQbssLoad; /* QBSS load of the current associated AP */ + u8 AckPolicy[4]; /* ACK policy of the specified AC. see ACK_xxx */ + BOOLEAN bDLSCapable; /* 0:disable DLS, 1:enable DLS */ + /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ +@@ -1275,17 +1274,17 @@ typedef struct _COMMON_CONFIG { + ABGBAND_STATE BandState; /* For setting BBP used on B/G or A mode. */ + + /* IEEE802.11H--DFS. */ +- RADAR_DETECT_STRUCT RadarDetect; ++ struct rt_radar_detect RadarDetect; + + /* HT */ + u8 BASize; /* USer desired BAWindowSize. Should not exceed our max capability */ +- /*RT_HT_CAPABILITY SupportedHtPhy; */ +- RT_HT_CAPABILITY DesiredHtPhy; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHTInfo; /* Useful as AP. */ ++ /*struct rt_ht_capability SupportedHtPhy; */ ++ struct rt_ht_capability DesiredHtPhy; ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHTInfo; /* Useful as AP. */ + /*This IE is used with channel switch announcement element when changing to a new 40MHz. */ + /*This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. */ +- NEW_EXT_CHAN_IE NewExtChanOffset; /*7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present */ ++ struct rt_new_ext_chan_ie NewExtChanOffset; /*7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present */ + + BOOLEAN bHTProtect; + BOOLEAN bMIMOPSEnable; +@@ -1314,24 +1313,24 @@ typedef struct _COMMON_CONFIG { + #ifdef RTMP_MAC_USB + BOOLEAN bMultipleIRP; /* Multiple Bulk IN flag */ + u8 NumOfBulkInIRP; /* if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 */ +- RT_HT_CAPABILITY SupportedHtPhy; ++ struct rt_ht_capability SupportedHtPhy; + unsigned long MaxPktOneTxBulk; + u8 TxBulkFactor; + u8 RxBulkFactor; + + BOOLEAN IsUpdateBeacon; +- BEACON_SYNC_STRUCT *pBeaconSync; +- RALINK_TIMER_STRUCT BeaconUpdateTimer; ++ struct rt_beacon_sync *pBeaconSync; ++ struct rt_ralink_timer BeaconUpdateTimer; + u32 BeaconAdjust; + u32 BeaconFactor; + u32 BeaconRemain; + #endif /* RTMP_MAC_USB // */ + + spinlock_t MeasureReqTabLock; +- PMEASURE_REQ_TAB pMeasureReqTab; ++ struct rt_measure_req_tab *pMeasureReqTab; + + spinlock_t TpcReqTabLock; +- PTPC_REQ_TAB pTpcReqTab; ++ struct rt_tpc_req_tab *pTpcReqTab; + + BOOLEAN PSPXlink; /* 0: Disable. 1: Enable */ + +@@ -1341,11 +1340,11 @@ typedef struct _COMMON_CONFIG { + #endif + + BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ +-} COMMON_CONFIG, *PCOMMON_CONFIG; ++}; + + /* Modified by Wu Xi-Kun 4/21/2006 */ + /* STA configuration and status */ +-typedef struct _STA_ADMIN_CONFIG { ++struct rt_sta_admin_config { + /* GROUP 1 - */ + /* User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe */ + /* the user intended configuration, but not necessary fully equal to the final */ +@@ -1396,7 +1395,7 @@ typedef struct _STA_ADMIN_CONFIG { + u8 PMK[32]; /* WPA PSK mode PMK */ + u8 PTK[64]; /* WPA PSK mode PTK */ + u8 GTK[32]; /* GTK from authenticator */ +- BSSID_INFO SavedPMK[PMKID_NO]; ++ struct rt_bssid_info SavedPMK[PMKID_NO]; + u32 SavedPMKNum; /* Saved PMKID number */ + + u8 DefaultKeyId; +@@ -1416,7 +1415,7 @@ typedef struct _STA_ADMIN_CONFIG { + + u8 LastSNR0; /* last received BEACON's SNR */ + u8 LastSNR1; /* last received BEACON's SNR for 2nd antenna */ +- RSSI_SAMPLE RssiSample; ++ struct rt_rssi_sample RssiSample; + unsigned long NumOfAvgRssiSample; + + unsigned long LastBeaconRxTime; /* OS's timestamp of the last BEACON RX time */ +@@ -1434,7 +1433,7 @@ typedef struct _STA_ADMIN_CONFIG { + + /* New for WPA, windows want us to keep association information and */ + /* Fixed IEs from last association response */ +- NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; ++ struct rt_ndis_802_11_association_information AssocInfo; + u16 ReqVarIELen; /* Length of next VIE include EID & Length */ + u8 ReqVarIEs[MAX_VIE_LEN]; /* The content saved here should be little-endian format. */ + u16 ResVarIELen; /* Length of next VIE include EID & Length */ +@@ -1457,7 +1456,7 @@ typedef struct _STA_ADMIN_CONFIG { + u8 NHFactor; /* Parameter for Noise histogram */ + u8 CLFactor; /* Parameter for channel load */ + +- RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; ++ struct rt_ralink_timer StaQuickResponeForRateUpTimer; + BOOLEAN StaQuickResponeForRateUpTimerRunning; + + u8 DtimCount; /* 0.. DtimPeriod-1 */ +@@ -1468,14 +1467,14 @@ typedef struct _STA_ADMIN_CONFIG { + BOOLEAN WhqlTest; + /*////////////////////////////////////////////////////////////////////////////////////// */ + +- RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; ++ struct rt_ralink_timer WpaDisassocAndBlockAssocTimer; + /* Fast Roaming */ + BOOLEAN bAutoRoaming; /* 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI */ + char dBmToRoam; /* the condition to roam when receiving Rssi less than this value. It's negative value. */ + + BOOLEAN IEEE8021X; + BOOLEAN IEEE8021x_required_keys; +- CIPHER_KEY DesireSharedKey[4]; /* Record user desired WEP keys */ ++ struct rt_cipher_key DesireSharedKey[4]; /* Record user desired WEP keys */ + u8 DesireSharedKeyId; + + /* 0: driver ignores wpa_supplicant */ +@@ -1493,7 +1492,7 @@ typedef struct _STA_ADMIN_CONFIG { + + HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ + DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; +- RT_HT_PHY_INFO DesiredHtPhyInfo; ++ struct rt_ht_phy_info DesiredHtPhyInfo; + BOOLEAN bAutoTxRateSwitch; + + #ifdef RTMP_MAC_PCI +@@ -1507,7 +1506,7 @@ typedef struct _STA_ADMIN_CONFIG { + BOOLEAN bAutoConnectByBssid; + unsigned long BeaconLostTime; /* seconds */ + BOOLEAN bForceTxBurst; /* 1: force enble TX PACKET BURST, 0: disable */ +-} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; ++}; + + /* This data structure keep the current active BSS/IBSS's configuration that this STA */ + /* had agreed upon joining the network. Which means these parameters are usually decided */ +@@ -1515,7 +1514,7 @@ typedef struct _STA_ADMIN_CONFIG { + /* is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE. */ + /* Normally, after SCAN or failed roaming attempts, we need to recover back to */ + /* the current active settings. */ +-typedef struct _STA_ACTIVE_CONFIG { ++struct rt_sta_active_config { + u16 Aid; + u16 AtimWin; /* in kusec; IBSS parameter set element */ + u16 CapabilityInfo; +@@ -1529,11 +1528,13 @@ typedef struct _STA_ACTIVE_CONFIG { + u8 SupRateLen; + u8 ExtRateLen; + /* Copy supported ht from desired AP's beacon. We are trying to match */ +- RT_HT_PHY_INFO SupportedPhyInfo; +- RT_HT_CAPABILITY SupportedHtPhy; +-} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; ++ struct rt_ht_phy_info SupportedPhyInfo; ++ struct rt_ht_capability SupportedHtPhy; ++}; + +-typedef struct _MAC_TABLE_ENTRY { ++struct rt_mac_table_entry; ++ ++struct rt_mac_table_entry { + /*Choose 1 from ValidAsWDS and ValidAsCLI to validize. */ + BOOLEAN ValidAsCLI; /* Sta mode, set this TRUE after Linkup,too. */ + BOOLEAN ValidAsWDS; /* This is WDS Entry. only for AP mode. */ +@@ -1555,8 +1556,8 @@ typedef struct _MAC_TABLE_ENTRY { + u8 R_Counter[LEN_KEY_DESC_REPLAY]; + u8 PTK[64]; + u8 ReTryCounter; +- RALINK_TIMER_STRUCT RetryTimer; +- RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; /* A timer which enqueue EAPoL-Start for triggering PSK SM */ ++ struct rt_ralink_timer RetryTimer; ++ struct rt_ralink_timer EnqueueStartForPSKTimer; /* A timer which enqueue EAPoL-Start for triggering PSK SM */ + NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ + NDIS_802_11_WEP_STATUS WepStatus; + NDIS_802_11_WEP_STATUS GroupKeyWepStatus; +@@ -1564,7 +1565,7 @@ typedef struct _MAC_TABLE_ENTRY { + GTK_STATE GTKState; + u16 PortSecured; + NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ +- CIPHER_KEY PairwiseKey; ++ struct rt_cipher_key PairwiseKey; + void *pAd; + int PMKID_CacheIdx; + u8 PMKID[LEN_PMKID]; +@@ -1580,7 +1581,7 @@ typedef struct _MAC_TABLE_ENTRY { + unsigned long NoDataIdleCount; + u16 StationKeepAliveCount; /* unit: second */ + unsigned long PsQIdleCount; +- QUEUE_HEADER PsQueue; ++ struct rt_queue_header PsQueue; + + u32 StaConnectTime; /* the live time of this station since associated with AP */ + +@@ -1642,16 +1643,16 @@ typedef struct _MAC_TABLE_ENTRY { + u8 AMsduSize; + u8 MmpsMode; /* MIMO power save more. */ + +- HT_CAPABILITY_IE HTCapability; ++ struct rt_ht_capability_ie HTCapability; + + BOOLEAN bAutoTxRateSwitch; + + u8 RateLen; +- struct _MAC_TABLE_ENTRY *pNext; ++ struct rt_mac_table_entry *pNext; + u16 TxSeq[NUM_OF_TID]; + u16 NonQosDataSeq; + +- RSSI_SAMPLE RssiSample; ++ struct rt_rssi_sample RssiSample; + + u32 TXMCSExpected[16]; + u32 TXMCSSuccessful[16]; +@@ -1661,13 +1662,13 @@ typedef struct _MAC_TABLE_ENTRY { + unsigned long LastBeaconRxTime; + + unsigned long AssocDeadLine; +-} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; ++}; + +-typedef struct _MAC_TABLE { ++struct rt_mac_table { + u16 Size; +- MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE]; +- MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; +- QUEUE_HEADER McastPsQueue; ++ struct rt_mac_table_entry *Hash[HASH_TABLE_SIZE]; ++ struct rt_mac_table_entry Content[MAX_LEN_OF_MAC_TABLE]; ++ struct rt_queue_header McastPsQueue; + unsigned long PsQIdleCount; + BOOLEAN fAnyStationInPsm; + BOOLEAN fAnyStationBadAtheros; /* Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. */ +@@ -1680,46 +1681,46 @@ typedef struct _MAC_TABLE { + BOOLEAN fAnyBASession; /* Check if there is BA session. Force turn on RTS/CTS */ + /*2008/10/28: KH add to support Antenna power-saving of AP<-- */ + /*2008/10/28: KH add to support Antenna power-saving of AP--> */ +-} MAC_TABLE, *PMAC_TABLE; ++}; + + struct wificonf { + BOOLEAN bShortGI; + BOOLEAN bGreenField; + }; + +-typedef struct _RTMP_DEV_INFO_ { ++struct rt_rtmp_dev_info { + u8 chipName[16]; + RTMP_INF_TYPE infType; +-} RTMP_DEV_INFO; ++}; + +-struct _RTMP_CHIP_OP_ { ++struct rt_rtmp_chip_op { + /* Calibration access related callback functions */ +- int (*eeinit) (RTMP_ADAPTER * pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */ +- int (*eeread) (RTMP_ADAPTER * pAd, u16 offset, u16 *pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, u16 *pValue); */ ++ int (*eeinit) (struct rt_rtmp_adapter *pAd); /* int (*eeinit)(struct rt_rtmp_adapter *pAd); */ ++ int (*eeread) (struct rt_rtmp_adapter *pAd, u16 offset, u16 *pValue); /* int (*eeread)(struct rt_rtmp_adapter *pAd, int offset, u16 *pValue); */ + + /* MCU related callback functions */ +- int (*loadFirmware) (RTMP_ADAPTER * pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */ +- int (*eraseFirmware) (RTMP_ADAPTER * pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */ +- int (*sendCommandToMcu) (RTMP_ADAPTER * pAd, u8 cmd, u8 token, u8 arg0, u8 arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, u8 cmd, u8 token, u8 arg0, u8 arg1); */ ++ int (*loadFirmware) (struct rt_rtmp_adapter *pAd); /* int (*loadFirmware)(struct rt_rtmp_adapter *pAd); */ ++ int (*eraseFirmware) (struct rt_rtmp_adapter *pAd); /* int (*eraseFirmware)(struct rt_rtmp_adapter *pAd); */ ++ int (*sendCommandToMcu) (struct rt_rtmp_adapter *pAd, u8 cmd, u8 token, u8 arg0, u8 arg1);; /* int (*sendCommandToMcu)(struct rt_rtmp_adapter *pAd, u8 cmd, u8 token, u8 arg0, u8 arg1); */ + + /* RF access related callback functions */ +- REG_PAIR *pRFRegTable; +- void (*AsicRfInit) (RTMP_ADAPTER * pAd); +- void (*AsicRfTurnOn) (RTMP_ADAPTER * pAd); +- void (*AsicRfTurnOff) (RTMP_ADAPTER * pAd); +- void (*AsicReverseRfFromSleepMode) (RTMP_ADAPTER * pAd); +- void (*AsicHaltAction) (RTMP_ADAPTER * pAd); ++ struct rt_reg_pair *pRFRegTable; ++ void (*AsicRfInit) (struct rt_rtmp_adapter *pAd); ++ void (*AsicRfTurnOn) (struct rt_rtmp_adapter *pAd); ++ void (*AsicRfTurnOff) (struct rt_rtmp_adapter *pAd); ++ void (*AsicReverseRfFromSleepMode) (struct rt_rtmp_adapter *pAd); ++ void (*AsicHaltAction) (struct rt_rtmp_adapter *pAd); + }; + + /* */ + /* The miniport adapter structure */ + /* */ +-struct _RTMP_ADAPTER { ++struct rt_rtmp_adapter { + void *OS_Cookie; /* save specific structure relative to OS */ + struct net_device *net_dev; + unsigned long VirtualIfCnt; + +- RTMP_CHIP_OP chipOps; ++ struct rt_rtmp_chip_op chipOps; + u16 ThisTbttNumToNextWakeUp; + + #ifdef RTMP_MAC_PCI +@@ -1750,10 +1751,10 @@ struct _RTMP_ADAPTER { + u32 int_disable_mask; + u32 int_pending; + +- RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; /* Shared memory of all 1st pre-allocated TxBuf associated with each TXD */ +- RTMP_DMABUF RxDescRing; /* Shared memory for RX descriptors */ +- RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; /* Shared memory for Tx descriptors */ +- RTMP_TX_RING TxRing[NUM_OF_TX_RING]; /* AC0~4 + HCCA */ ++ struct rt_rtmp_dmabuf TxBufSpace[NUM_OF_TX_RING]; /* Shared memory of all 1st pre-allocated TxBuf associated with each TXD */ ++ struct rt_rtmp_dmabuf RxDescRing; /* Shared memory for RX descriptors */ ++ struct rt_rtmp_dmabuf TxDescRing[NUM_OF_TX_RING]; /* Shared memory for Tx descriptors */ ++ struct rt_rtmp_tx_ring TxRing[NUM_OF_TX_RING]; /* AC0~4 + HCCA */ + #endif /* RTMP_MAC_PCI // */ + + spinlock_t irq_lock; +@@ -1777,9 +1778,9 @@ struct _RTMP_ADAPTER { + BOOLEAN bUsbTxBulkAggre; /* Flags for bulk out data priority */ + + /*======Cmd Thread */ +- CmdQ CmdQ; ++ struct rt_cmdq CmdQ; + spinlock_t CmdQLock; /* CmdQLock spinlock */ +- RTMP_OS_TASK cmdQTask; ++ struct rt_rtmp_os_task cmdQTask; + + /*======Semaphores (event) */ + struct semaphore UsbVendorReq_semaphore; +@@ -1794,18 +1795,18 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + /* Both PCI/USB related parameters */ + /*****************************************************************************************/ +- /*RTMP_DEV_INFO chipInfo; */ ++ /*struct rt_rtmp_dev_info chipInfo; */ + RTMP_INF_TYPE infType; + + /*****************************************************************************************/ + /* Driver Mgmt related parameters */ + /*****************************************************************************************/ +- RTMP_OS_TASK mlmeTask; ++ struct rt_rtmp_os_task mlmeTask; + #ifdef RTMP_TIMER_TASK_SUPPORT + /* If you want use timer task to handle the timer related jobs, enable this. */ +- RTMP_TIMER_TASK_QUEUE TimerQ; ++ struct rt_rtmp_timer_task_queue TimerQ; + spinlock_t TimerQLock; +- RTMP_OS_TASK timerTask; ++ struct rt_rtmp_os_task timerTask; + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + + /*****************************************************************************************/ +@@ -1819,7 +1820,7 @@ struct _RTMP_ADAPTER { + spinlock_t BulkOutLock[6]; /* BulkOut spinlock for 4 ACs */ + spinlock_t MLMEBulkOutLock; /* MLME BulkOut lock */ + +- HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; ++ struct rt_ht_tx_context TxContext[NUM_OF_TX_RING]; + spinlock_t TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ + + /* 4 sets of Bulk Out index and pending flag */ +@@ -1832,11 +1833,11 @@ struct _RTMP_ADAPTER { + #endif /* RTMP_MAC_USB // */ + + /* resource for software backlog queues */ +- QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; /* 4 AC + 1 HCCA */ ++ struct rt_queue_header TxSwQueue[NUM_OF_TX_RING]; /* 4 AC + 1 HCCA */ + spinlock_t TxSwQueueLock[NUM_OF_TX_RING]; /* TxSwQueue spinlock */ + +- RTMP_DMABUF MgmtDescRing; /* Shared memory for MGMT descriptors */ +- RTMP_MGMT_RING MgmtRing; ++ struct rt_rtmp_dmabuf MgmtDescRing; /* Shared memory for MGMT descriptors */ ++ struct rt_rtmp_mgmt_ring MgmtRing; + spinlock_t MgmtRingLock; /* Prio Ring spinlock */ + + /*****************************************************************************************/ +@@ -1844,14 +1845,14 @@ struct _RTMP_ADAPTER { + /*****************************************************************************************/ + + #ifdef RTMP_MAC_PCI +- RTMP_RX_RING RxRing; ++ struct rt_rtmp_rx_ring RxRing; + spinlock_t RxRingLock; /* Rx Ring spinlock */ + #ifdef RT3090 + spinlock_t McuCmdLock; /*MCU Command Queue spinlock */ + #endif /* RT3090 // */ + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +- RX_CONTEXT RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ ++ struct rt_rx_context RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ + spinlock_t BulkInLock; /* BulkIn spinlock for 4 ACs */ + u8 PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ + u8 NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ +@@ -1881,27 +1882,27 @@ struct _RTMP_ADAPTER { + /* --------------------------- */ + u8 BbpWriteLatch[140]; /* record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID */ + char BbpRssiToDbmDelta; /* change from u8 to char for high power */ +- BBP_R66_TUNING BbpTuning; ++ struct rt_bbp_r66_tuning BbpTuning; + + /* ---------------------------- */ + /* RFIC control */ + /* ---------------------------- */ + u8 RfIcType; /* RFIC_xxx */ + unsigned long RfFreqOffset; /* Frequency offset for channel switching */ +- RTMP_RF_REGS LatchRfRegs; /* latch th latest RF programming value since RF IC doesn't support READ */ ++ struct rt_rtmp_rf_regs LatchRfRegs; /* latch th latest RF programming value since RF IC doesn't support READ */ + + EEPROM_ANTENNA_STRUC Antenna; /* Since ANtenna definition is different for a & g. We need to save it for future reference. */ + EEPROM_NIC_CONFIG2_STRUC NicConfig2; + + /* This soft Rx Antenna Diversity mechanism is used only when user set */ + /* RX Antenna = DIVERSITY ON */ +- SOFT_RX_ANT_DIVERSITY RxAnt; ++ struct rt_soft_rx_ant_diversity RxAnt; + + u8 RFProgSeq; +- CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; /* Store Tx power value for all channels. */ +- CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; /* list all supported channels for site survey */ +- CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; /* 802.11j channel and bw */ +- CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; /* list all supported channels for site survey */ ++ struct rt_channel_tx_power TxPower[MAX_NUM_OF_CHANNELS]; /* Store Tx power value for all channels. */ ++ struct rt_channel_tx_power ChannelList[MAX_NUM_OF_CHANNELS]; /* list all supported channels for site survey */ ++ struct rt_channel_11j_tx_power TxPower11J[MAX_NUM_OF_11JCHANNELS]; /* 802.11j channel and bw */ ++ struct rt_channel_11j_tx_power ChannelList11J[MAX_NUM_OF_11JCHANNELS]; /* list all supported channels for site survey */ + + u8 ChannelListNum; /* number of channel in ChannelList[] */ + u8 Bbp94; +@@ -1961,19 +1962,19 @@ struct _RTMP_ADAPTER { + /* 802.11 related parameters */ + /*****************************************************************************************/ + /* outgoing BEACON frame buffer and corresponding TXD */ +- TXWI_STRUC BeaconTxWI; ++ struct rt_txwi BeaconTxWI; + u8 *BeaconBuf; + u16 BeaconOffset[HW_BEACON_MAX_COUNT]; + + /* pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. */ +- PSPOLL_FRAME PsPollFrame; +- HEADER_802_11 NullFrame; ++ struct rt_pspoll_frame PsPollFrame; ++ struct rt_header_802_11 NullFrame; + + #ifdef RTMP_MAC_USB +- TX_CONTEXT BeaconContext[BEACON_RING_SIZE]; +- TX_CONTEXT NullContext; +- TX_CONTEXT PsPollContext; +- TX_CONTEXT RTSContext; ++ struct rt_tx_context BeaconContext[BEACON_RING_SIZE]; ++ struct rt_tx_context NullContext; ++ struct rt_tx_context PsPollContext; ++ struct rt_tx_context RTSContext; + #endif /* RTMP_MAC_USB // */ + + /*=========AP=========== */ +@@ -1983,8 +1984,8 @@ struct _RTMP_ADAPTER { + /* STA specific configuration & operation status */ + /* used only when pAd->OpMode == OPMODE_STA */ + /* ----------------------------------------------- */ +- STA_ADMIN_CONFIG StaCfg; /* user desired settings */ +- STA_ACTIVE_CONFIG StaActive; /* valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) */ ++ struct rt_sta_admin_config StaCfg; /* user desired settings */ ++ struct rt_sta_active_config StaActive; /* valid only when ADHOC_ON(pAd) || INFRA_ON(pAd) */ + char nickname[IW_ESSID_MAX_SIZE + 1]; /* nickname, only used in the iwconfig i/f */ + int PreMediaState; + +@@ -2004,34 +2005,34 @@ struct _RTMP_ADAPTER { + /* ------------------------------------------------------ */ + /* common configuration to both OPMODE_STA and OPMODE_AP */ + /* ------------------------------------------------------ */ +- COMMON_CONFIG CommonCfg; +- MLME_STRUCT Mlme; ++ struct rt_common_config CommonCfg; ++ struct rt_mlme Mlme; + + /* AP needs those vaiables for site survey feature. */ +- MLME_AUX MlmeAux; /* temporary settings used during MLME state machine */ +- BSS_TABLE ScanTab; /* store the latest SCAN result */ ++ struct rt_mlme_aux MlmeAux; /* temporary settings used during MLME state machine */ ++ struct rt_bss_table ScanTab; /* store the latest SCAN result */ + + /*About MacTab, the sta driver will use #0 and #1 for multicast and AP. */ +- MAC_TABLE MacTab; /* ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. */ ++ struct rt_mac_table MacTab; /* ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. */ + spinlock_t MacTabLock; + +- BA_TABLE BATable; ++ struct rt_ba_table BATable; + + spinlock_t BATabLock; +- RALINK_TIMER_STRUCT RECBATimer; ++ struct rt_ralink_timer RECBATimer; + + /* encryption/decryption KEY tables */ +- CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; /* STA always use SharedKey[BSS0][0..3] */ ++ struct rt_cipher_key SharedKey[MAX_MBSSID_NUM][4]; /* STA always use SharedKey[BSS0][0..3] */ + + /* RX re-assembly buffer for fragmentation */ +- FRAGMENT_FRAME FragFrame; /* Frame storage for fragment frame */ ++ struct rt_fragment_frame FragFrame; /* Frame storage for fragment frame */ + + /* various Counters */ +- COUNTER_802_3 Counters8023; /* 802.3 counters */ +- COUNTER_802_11 WlanCounters; /* 802.11 MIB counters */ +- COUNTER_RALINK RalinkCounters; /* Ralink propriety counters */ +- COUNTER_DRS DrsCounters; /* counters for Dynamic TX Rate Switching */ +- PRIVATE_STRUC PrivateInfo; /* Private information & counters */ ++ struct rt_counter_802_3 Counters8023; /* 802.3 counters */ ++ struct rt_counter_802_11 WlanCounters; /* 802.11 MIB counters */ ++ struct rt_counter_ralink RalinkCounters; /* Ralink propriety counters */ ++ struct rt_counter_drs DrsCounters; /* counters for Dynamic TX Rate Switching */ ++ struct rt_private PrivateInfo; /* Private information & counters */ + + /* flags, see fRTMP_ADAPTER_xxx flags */ + unsigned long Flags; /* Represent current device status */ +@@ -2060,7 +2061,7 @@ struct _RTMP_ADAPTER { + /* --------------------------- */ + /* System event log */ + /* --------------------------- */ +- RT_802_11_EVENT_TABLE EventTab; ++ struct rt_802_11_event_table EventTab; + + BOOLEAN HTCEnable; + +@@ -2165,17 +2166,16 @@ struct _RTMP_ADAPTER { + /*************************************************************************** + * Rx Path software control block related data structures + **************************************************************************/ +-typedef struct _RX_BLK_ { +-/* RXD_STRUC RxD; // sample */ ++struct rt_rx_blk { + RT28XX_RXD_STRUC RxD; +- PRXWI_STRUC pRxWI; +- PHEADER_802_11 pHeader; ++ struct rt_rxwi * pRxWI; ++ struct rt_header_802_11 * pHeader; + void *pRxPacket; + u8 *pData; + u16 DataSize; + u16 Flags; + u8 UserPriority; /* for calculate TKIP MIC using */ +-} RX_BLK; ++}; + + #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) + #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag) +@@ -2210,16 +2210,16 @@ typedef struct _RX_BLK_ { + #define TX_RALINK_FRAME 0x10 + #define TX_FRAG_FRAME 0x20 + +-/* Currently the sizeof(TX_BLK) is 148 bytes. */ +-typedef struct _TX_BLK_ { ++/* Currently the sizeof(struct rt_tx_blk) is 148 bytes. */ ++struct rt_tx_blk { + u8 QueIdx; + u8 TxFrameType; /* Indicate the Transmission type of the all frames in one batch */ + u8 TotalFrameNum; /* Total frame number want to send-out in one batch */ + u16 TotalFragNum; /* Total frame fragments required in one batch */ + u16 TotalFrameLen; /* Total length of all frames want to send-out in one batch */ + +- QUEUE_HEADER TxPacketList; +- MAC_TABLE_ENTRY *pMacEntry; /* NULL: packet with 802.11 RA field is multicast/broadcast address */ ++ struct rt_queue_header TxPacketList; ++ struct rt_mac_table_entry *pMacEntry; /* NULL: packet with 802.11 RA field is multicast/broadcast address */ + HTTRANSMIT_SETTING *pTransmit; + + /* Following structure used for the characteristics of a specific packet. */ +@@ -2241,13 +2241,13 @@ typedef struct _TX_BLK_ { + u8 MpduReqNum; /* number of fragments of this frame */ + u8 TxRate; /* TODO: Obsoleted? Should change to MCS? */ + u8 CipherAlg; /* cipher alogrithm */ +- PCIPHER_KEY pKey; ++ struct rt_cipher_key *pKey; + + u16 Flags; /*See following definitions for detail. */ + + /*YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. */ + unsigned long Priv; /* Hardware specific value saved in here. */ +-} TX_BLK, *PTX_BLK; ++}; + + #define fTX_bRtsRequired 0x0001 /* Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. */ + #define fTX_bAckRequired 0x0002 /* the packet need ack response */ +@@ -2309,54 +2309,54 @@ char *GetBW(int BW); + /* Private routines in rtmp_init.c */ + /* */ + int RTMPAllocAdapterBlock(void *handle, +- OUT PRTMP_ADAPTER * ppAdapter); ++ struct rt_rtmp_adapter * * ppAdapter); + +-int RTMPAllocTxRxRingMemory(IN PRTMP_ADAPTER pAd); ++int RTMPAllocTxRxRingMemory(struct rt_rtmp_adapter *pAd); + +-void RTMPFreeAdapter(IN PRTMP_ADAPTER pAd); ++void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd); + +-int NICReadRegParameters(IN PRTMP_ADAPTER pAd, ++int NICReadRegParameters(struct rt_rtmp_adapter *pAd, + void *WrapperConfigurationContext); + + #ifdef RTMP_RF_RW_SUPPORT +-void NICInitRFRegisters(IN PRTMP_ADAPTER pAd); ++void NICInitRFRegisters(struct rt_rtmp_adapter *pAd); + +-void RtmpChipOpsRFHook(IN RTMP_ADAPTER * pAd); ++void RtmpChipOpsRFHook(struct rt_rtmp_adapter *pAd); + +-int RT30xxWriteRFRegister(IN PRTMP_ADAPTER pAd, ++int RT30xxWriteRFRegister(struct rt_rtmp_adapter *pAd, + u8 regID, u8 value); + +-int RT30xxReadRFRegister(IN PRTMP_ADAPTER pAd, ++int RT30xxReadRFRegister(struct rt_rtmp_adapter *pAd, + u8 regID, u8 *pValue); + #endif /* RTMP_RF_RW_SUPPORT // */ + +-void NICReadEEPROMParameters(IN PRTMP_ADAPTER pAd, u8 *mac_addr); ++void NICReadEEPROMParameters(struct rt_rtmp_adapter *pAd, u8 *mac_addr); + +-void NICInitAsicFromEEPROM(IN PRTMP_ADAPTER pAd); ++void NICInitAsicFromEEPROM(struct rt_rtmp_adapter *pAd); + +-int NICInitializeAdapter(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); ++int NICInitializeAdapter(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset); + +-int NICInitializeAsic(IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); ++int NICInitializeAsic(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset); + +-void NICIssueReset(IN PRTMP_ADAPTER pAd); ++void NICIssueReset(struct rt_rtmp_adapter *pAd); + +-void RTMPRingCleanUp(IN PRTMP_ADAPTER pAd, u8 RingType); ++void RTMPRingCleanUp(struct rt_rtmp_adapter *pAd, u8 RingType); + +-void UserCfgInit(IN PRTMP_ADAPTER pAd); ++void UserCfgInit(struct rt_rtmp_adapter *pAd); + +-void NICResetFromError(IN PRTMP_ADAPTER pAd); ++void NICResetFromError(struct rt_rtmp_adapter *pAd); + +-int NICLoadFirmware(IN PRTMP_ADAPTER pAd); ++int NICLoadFirmware(struct rt_rtmp_adapter *pAd); + +-void NICEraseFirmware(IN PRTMP_ADAPTER pAd); ++void NICEraseFirmware(struct rt_rtmp_adapter *pAd); + +-int NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd); ++int NICLoadRateSwitchingParams(struct rt_rtmp_adapter *pAd); + +-BOOLEAN NICCheckForHang(IN PRTMP_ADAPTER pAd); ++BOOLEAN NICCheckForHang(struct rt_rtmp_adapter *pAd); + +-void NICUpdateFifoStaCounters(IN PRTMP_ADAPTER pAd); ++void NICUpdateFifoStaCounters(struct rt_rtmp_adapter *pAd); + +-void NICUpdateRawCounters(IN PRTMP_ADAPTER pAd); ++void NICUpdateRawCounters(struct rt_rtmp_adapter *pAd); + + void RTMPZeroMemory(void *pSrc, unsigned long Length); + +@@ -2368,154 +2368,154 @@ void AtoH(char *src, u8 *dest, int destlen); + + u8 BtoH(char ch); + +-void RTMPPatchMacBbpBug(IN PRTMP_ADAPTER pAd); ++void RTMPPatchMacBbpBug(struct rt_rtmp_adapter *pAd); + +-void RTMPInitTimer(IN PRTMP_ADAPTER pAd, +- IN PRALINK_TIMER_STRUCT pTimer, ++void RTMPInitTimer(struct rt_rtmp_adapter *pAd, ++ struct rt_ralink_timer *pTimer, + void *pTimerFunc, void *pData, IN BOOLEAN Repeat); + +-void RTMPSetTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value); ++void RTMPSetTimer(struct rt_ralink_timer *pTimer, unsigned long Value); + +-void RTMPModTimer(IN PRALINK_TIMER_STRUCT pTimer, unsigned long Value); ++void RTMPModTimer(struct rt_ralink_timer *pTimer, unsigned long Value); + +-void RTMPCancelTimer(IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN * pCancelled); ++void RTMPCancelTimer(struct rt_ralink_timer *pTimer, OUT BOOLEAN * pCancelled); + +-void RTMPSetLED(IN PRTMP_ADAPTER pAd, u8 Status); ++void RTMPSetLED(struct rt_rtmp_adapter *pAd, u8 Status); + +-void RTMPSetSignalLED(IN PRTMP_ADAPTER pAd, IN NDIS_802_11_RSSI Dbm); ++void RTMPSetSignalLED(struct rt_rtmp_adapter *pAd, IN NDIS_802_11_RSSI Dbm); + +-void RTMPEnableRxTx(IN PRTMP_ADAPTER pAd); ++void RTMPEnableRxTx(struct rt_rtmp_adapter *pAd); + + /* */ + /* prototype in action.c */ + /* */ +-void ActionStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, ++void ActionStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, + OUT STATE_MACHINE_FUNC Trans[]); + +-void MlmeADDBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeADDBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeDELBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDELBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeDLSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDLSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeInvalidAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeInvalidAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAddBAReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAddBAReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAddBARspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAddBARspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerDelBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDelBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerBAAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void SendPSMPAction(IN PRTMP_ADAPTER pAd, u8 Wcid, u8 Psmp); ++void SendPSMPAction(struct rt_rtmp_adapter *pAd, u8 Wcid, u8 Psmp); + +-void PeerRMAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerRMAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerPublicAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerPublicAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerHTAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerHTAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerQOSAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + void RECBATimerTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void ORIBATimerTimeout(IN PRTMP_ADAPTER pAd); ++void ORIBATimerTimeout(struct rt_rtmp_adapter *pAd); + +-void SendRefreshBAR(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void SendRefreshBAR(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); + +-void ActHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, ++void ActHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u8 *Addr1, u8 *Addr2, u8 *Addr3); + +-void BarHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PFRAME_BAR pCntlBar, u8 *pDA, u8 *pSA); ++void BarHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_frame_bar * pCntlBar, u8 *pDA, u8 *pSA); + +-void InsertActField(IN PRTMP_ADAPTER pAd, ++void InsertActField(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, u8 Category, u8 ActCode); + +-BOOLEAN CntlEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++BOOLEAN CntlEnqueueForRecv(struct rt_rtmp_adapter *pAd, + unsigned long Wcid, +- unsigned long MsgLen, IN PFRAME_BA_REQ pMsg); ++ unsigned long MsgLen, struct rt_frame_ba_req * pMsg); + + /* */ + /* Private routines in rtmp_data.c */ + /* */ +-BOOLEAN RTMPHandleRxDoneInterrupt(IN PRTMP_ADAPTER pAd); ++BOOLEAN RTMPHandleRxDoneInterrupt(struct rt_rtmp_adapter *pAd); + +-BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd, + INT_SOURCE_CSR_STRUC TxRingBitmap); + +-void RTMPHandleMgmtRingDmaDoneInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleMgmtRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd); + +-void RTMPHandleTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleTBTTInterrupt(struct rt_rtmp_adapter *pAd); + +-void RTMPHandlePreTBTTInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandlePreTBTTInterrupt(struct rt_rtmp_adapter *pAd); + +-void RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleTwakeupInterrupt(struct rt_rtmp_adapter *pAd); + +-void RTMPHandleRxCoherentInterrupt(IN PRTMP_ADAPTER pAd); ++void RTMPHandleRxCoherentInterrupt(struct rt_rtmp_adapter *pAd); + +-BOOLEAN TxFrameIsAggregatible(IN PRTMP_ADAPTER pAd, ++BOOLEAN TxFrameIsAggregatible(struct rt_rtmp_adapter *pAd, + u8 *pPrevAddr1, u8 *p8023hdr); + +-BOOLEAN PeerIsAggreOn(IN PRTMP_ADAPTER pAd, +- unsigned long TxRate, IN PMAC_TABLE_ENTRY pMacEntry); ++BOOLEAN PeerIsAggreOn(struct rt_rtmp_adapter *pAd, ++ unsigned long TxRate, struct rt_mac_table_entry *pMacEntry); + + int Sniff2BytesFromNdisBuffer(char *pFirstBuffer, + u8 DesiredOffset, + u8 *pByte0, u8 *pByte1); + +-int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket); ++int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket); + + void STASendPackets(void *MiniportAdapterContext, + void **ppPacketArray, u32 NumberOfPackets); + +-void RTMPDeQueuePacket(IN PRTMP_ADAPTER pAd, ++void RTMPDeQueuePacket(struct rt_rtmp_adapter *pAd, + IN BOOLEAN bIntContext, + u8 QueIdx, u8 Max_Tx_Packets); + +-int RTMPHardTransmit(IN PRTMP_ADAPTER pAd, ++int RTMPHardTransmit(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 QueIdx, unsigned long *pFreeTXDLeft); + +-int STAHardTransmit(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, u8 QueIdx); ++int STAHardTransmit(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 QueIdx); + +-void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void STARxEAPOLFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++int RTMPFreeTXDRequest(struct rt_rtmp_adapter *pAd, + u8 RingType, + u8 NumberRequired, u8 *FreeNumberIs); + +-int MlmeHardTransmit(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmit(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket); + +-int MlmeHardTransmitMgmtRing(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmitMgmtRing(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket); + + #ifdef RTMP_MAC_PCI +-int MlmeHardTransmitTxRing(IN PRTMP_ADAPTER pAd, ++int MlmeHardTransmitTxRing(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket); + +-int MlmeDataHardTransmit(IN PRTMP_ADAPTER pAd, ++int MlmeDataHardTransmit(struct rt_rtmp_adapter *pAd, + u8 QueIdx, void *pPacket); + +-void RTMPWriteTxDescriptor(IN PRTMP_ADAPTER pAd, +- IN PTXD_STRUC pTxD, IN BOOLEAN bWIV, u8 QSEL); ++void RTMPWriteTxDescriptor(struct rt_rtmp_adapter *pAd, ++ struct rt_txd * pTxD, IN BOOLEAN bWIV, u8 QSEL); + #endif /* RTMP_MAC_PCI // */ + +-u16 RTMPCalcDuration(IN PRTMP_ADAPTER pAd, u8 Rate, unsigned long Size); ++u16 RTMPCalcDuration(struct rt_rtmp_adapter *pAd, u8 Rate, unsigned long Size); + +-void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ ++void RTMPWriteTxWI(struct rt_rtmp_adapter *pAd, struct rt_txwi * pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ + u8 BASize, + u8 WCID, + unsigned long Length, +@@ -2525,28 +2525,28 @@ void RTMPWriteTxWI(IN PRTMP_ADAPTER pAd, IN PTXWI_STRUC pTxWI, IN BOOLEAN FRAG, + u8 Txopmode, + IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit); + +-void RTMPWriteTxWI_Data(IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); ++void RTMPWriteTxWI_Data(struct rt_rtmp_adapter *pAd, ++ struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk); + +-void RTMPWriteTxWI_Cache(IN PRTMP_ADAPTER pAd, +- IN OUT PTXWI_STRUC pTxWI, IN TX_BLK * pTxBlk); ++void RTMPWriteTxWI_Cache(struct rt_rtmp_adapter *pAd, ++ struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk); + +-void RTMPSuspendMsduTransmission(IN PRTMP_ADAPTER pAd); ++void RTMPSuspendMsduTransmission(struct rt_rtmp_adapter *pAd); + +-void RTMPResumeMsduTransmission(IN PRTMP_ADAPTER pAd); ++void RTMPResumeMsduTransmission(struct rt_rtmp_adapter *pAd); + +-int MiniportMMRequest(IN PRTMP_ADAPTER pAd, ++int MiniportMMRequest(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u8 *pData, u32 Length); + + /*+++mark by shiang, now this function merge to MiniportMMRequest() */ + /*---mark by shiang, now this function merge to MiniportMMRequest() */ + +-void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++void RTMPSendNullFrame(struct rt_rtmp_adapter *pAd, + u8 TxRate, IN BOOLEAN bQosNull); + +-void RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd); ++void RTMPSendDisassociationFrame(struct rt_rtmp_adapter *pAd); + +-void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++void RTMPSendRTSFrame(struct rt_rtmp_adapter *pAd, + u8 *pDA, + IN unsigned int NextMpduSize, + u8 TxRate, +@@ -2554,67 +2554,67 @@ void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, + u16 AckDuration, + u8 QueIdx, u8 FrameGap); + +-PQUEUE_HEADER RTMPCheckTxSwQueue(IN PRTMP_ADAPTER pAd, u8 * QueIdx); ++struct rt_queue_header *RTMPCheckTxSwQueue(struct rt_rtmp_adapter *pAd, u8 * QueIdx); + +-void RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey); ++void RTMPReportMicError(struct rt_rtmp_adapter *pAd, struct rt_cipher_key *pWpaKey); + +-void WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void WpaMicFailureReportFrame(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + void WpaDisassocApAndBlockAssoc(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, + void *SystemSpecific3); + +-void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd); ++void WpaStaPairwiseKeySetting(struct rt_rtmp_adapter *pAd); + +-void WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd); ++void WpaStaGroupKeySetting(struct rt_rtmp_adapter *pAd); + +-int RTMPCloneNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd, + IN BOOLEAN pInsAMSDUHdr, + void *pInPacket, + void ** ppOutPacket); + +-int RTMPAllocateNdisPacket(IN PRTMP_ADAPTER pAd, ++int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd, + void ** pPacket, + u8 *pHeader, + u32 HeaderLen, + u8 *pData, u32 DataLen); + +-void RTMPFreeNdisPacket(IN PRTMP_ADAPTER pAd, void *pPacket); ++void RTMPFreeNdisPacket(struct rt_rtmp_adapter *pAd, void *pPacket); + +-BOOLEAN RTMPFreeTXDUponTxDmaDone(IN PRTMP_ADAPTER pAd, u8 QueIdx); ++BOOLEAN RTMPFreeTXDUponTxDmaDone(struct rt_rtmp_adapter *pAd, u8 QueIdx); + +-BOOLEAN RTMPCheckDHCPFrame(IN PRTMP_ADAPTER pAd, void *pPacket); ++BOOLEAN RTMPCheckDHCPFrame(struct rt_rtmp_adapter *pAd, void *pPacket); + +-BOOLEAN RTMPCheckEtherType(IN PRTMP_ADAPTER pAd, void *pPacket); ++BOOLEAN RTMPCheckEtherType(struct rt_rtmp_adapter *pAd, void *pPacket); + + /* */ + /* Private routines in rtmp_wep.c */ + /* */ +-void RTMPInitWepEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitWepEngine(struct rt_rtmp_adapter *pAd, + u8 *pKey, + u8 KeyId, u8 KeyLen, u8 *pDest); + +-void RTMPEncryptData(IN PRTMP_ADAPTER pAd, ++void RTMPEncryptData(struct rt_rtmp_adapter *pAd, + u8 *pSrc, u8 *pDest, u32 Len); + +-BOOLEAN RTMPSoftDecryptWEP(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptWEP(struct rt_rtmp_adapter *pAd, + u8 *pData, +- unsigned long DataByteCnt, IN PCIPHER_KEY pGroupKey); ++ unsigned long DataByteCnt, struct rt_cipher_key *pGroupKey); + +-void RTMPSetICV(IN PRTMP_ADAPTER pAd, u8 *pDest); ++void RTMPSetICV(struct rt_rtmp_adapter *pAd, u8 *pDest); + +-void ARCFOUR_INIT(IN PARCFOURCONTEXT Ctx, u8 *pKey, u32 KeyLen); ++void ARCFOUR_INIT(struct rt_arcfourcontext *Ctx, u8 *pKey, u32 KeyLen); + +-u8 ARCFOUR_BYTE(IN PARCFOURCONTEXT Ctx); ++u8 ARCFOUR_BYTE(struct rt_arcfourcontext *Ctx); + +-void ARCFOUR_DECRYPT(IN PARCFOURCONTEXT Ctx, ++void ARCFOUR_DECRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len); + +-void ARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++void ARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len); + +-void WPAARCFOUR_ENCRYPT(IN PARCFOURCONTEXT Ctx, ++void WPAARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx, + u8 *pDest, u8 *pSrc, u32 Len); + + u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len); +@@ -2625,130 +2625,130 @@ u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len); + + /* Asic/RF/BBP related functions */ + +-void AsicAdjustTxPower(IN PRTMP_ADAPTER pAd); ++void AsicAdjustTxPower(struct rt_rtmp_adapter *pAd); + +-void AsicUpdateProtect(IN PRTMP_ADAPTER pAd, ++void AsicUpdateProtect(struct rt_rtmp_adapter *pAd, + u16 OperaionMode, + u8 SetMask, + IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist); + +-void AsicSwitchChannel(IN PRTMP_ADAPTER pAd, ++void AsicSwitchChannel(struct rt_rtmp_adapter *pAd, + u8 Channel, IN BOOLEAN bScan); + +-void AsicLockChannel(IN PRTMP_ADAPTER pAd, u8 Channel); ++void AsicLockChannel(struct rt_rtmp_adapter *pAd, u8 Channel); + + void AsicRfTuningExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void AsicResetBBPAgent(IN PRTMP_ADAPTER pAd); ++void AsicResetBBPAgent(struct rt_rtmp_adapter *pAd); + +-void AsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void AsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp); + +-void AsicForceSleep(IN PRTMP_ADAPTER pAd); ++void AsicForceSleep(struct rt_rtmp_adapter *pAd); + +-void AsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void AsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx); + +-void AsicSetBssid(IN PRTMP_ADAPTER pAd, u8 *pBssid); ++void AsicSetBssid(struct rt_rtmp_adapter *pAd, u8 *pBssid); + +-void AsicSetMcastWC(IN PRTMP_ADAPTER pAd); ++void AsicSetMcastWC(struct rt_rtmp_adapter *pAd); + +-void AsicDelWcidTab(IN PRTMP_ADAPTER pAd, u8 Wcid); ++void AsicDelWcidTab(struct rt_rtmp_adapter *pAd, u8 Wcid); + +-void AsicEnableRDG(IN PRTMP_ADAPTER pAd); ++void AsicEnableRDG(struct rt_rtmp_adapter *pAd); + +-void AsicDisableRDG(IN PRTMP_ADAPTER pAd); ++void AsicDisableRDG(struct rt_rtmp_adapter *pAd); + +-void AsicDisableSync(IN PRTMP_ADAPTER pAd); ++void AsicDisableSync(struct rt_rtmp_adapter *pAd); + +-void AsicEnableBssSync(IN PRTMP_ADAPTER pAd); ++void AsicEnableBssSync(struct rt_rtmp_adapter *pAd); + +-void AsicEnableIbssSync(IN PRTMP_ADAPTER pAd); ++void AsicEnableIbssSync(struct rt_rtmp_adapter *pAd); + +-void AsicSetEdcaParm(IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm); ++void AsicSetEdcaParm(struct rt_rtmp_adapter *pAd, struct rt_edca_parm *pEdcaParm); + +-void AsicSetSlotTime(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime); ++void AsicSetSlotTime(struct rt_rtmp_adapter *pAd, IN BOOLEAN bUseShortSlotTime); + +-void AsicAddSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddSharedKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIndex, + u8 KeyIdx, + u8 CipherAlg, + u8 *pKey, u8 *pTxMic, u8 *pRxMic); + +-void AsicRemoveSharedKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicRemoveSharedKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIndex, u8 KeyIdx); + +-void AsicUpdateWCIDAttribute(IN PRTMP_ADAPTER pAd, ++void AsicUpdateWCIDAttribute(struct rt_rtmp_adapter *pAd, + u16 WCID, + u8 BssIndex, + u8 CipherAlg, + IN BOOLEAN bUsePairewiseKeyTable); + +-void AsicUpdateWCIDIVEIV(IN PRTMP_ADAPTER pAd, ++void AsicUpdateWCIDIVEIV(struct rt_rtmp_adapter *pAd, + u16 WCID, unsigned long uIV, unsigned long uEIV); + +-void AsicUpdateRxWCIDTable(IN PRTMP_ADAPTER pAd, ++void AsicUpdateRxWCIDTable(struct rt_rtmp_adapter *pAd, + u16 WCID, u8 *pAddr); + +-void AsicAddKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddKeyEntry(struct rt_rtmp_adapter *pAd, + u16 WCID, + u8 BssIndex, + u8 KeyIdx, +- IN PCIPHER_KEY pCipherKey, ++ struct rt_cipher_key *pCipherKey, + IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey); + +-void AsicAddPairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicAddPairwiseKeyEntry(struct rt_rtmp_adapter *pAd, + u8 *pAddr, +- u8 WCID, IN CIPHER_KEY * pCipherKey); ++ u8 WCID, struct rt_cipher_key *pCipherKey); + +-void AsicRemovePairwiseKeyEntry(IN PRTMP_ADAPTER pAd, ++void AsicRemovePairwiseKeyEntry(struct rt_rtmp_adapter *pAd, + u8 BssIdx, u8 Wcid); + +-BOOLEAN AsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++BOOLEAN AsicSendCommandToMcu(struct rt_rtmp_adapter *pAd, + u8 Command, + u8 Token, u8 Arg0, u8 Arg1); + + #ifdef RTMP_MAC_PCI +-BOOLEAN AsicCheckCommanOk(IN PRTMP_ADAPTER pAd, u8 Command); ++BOOLEAN AsicCheckCommanOk(struct rt_rtmp_adapter *pAd, u8 Command); + #endif /* RTMP_MAC_PCI // */ + +-void MacAddrRandomBssid(IN PRTMP_ADAPTER pAd, u8 *pAddr); ++void MacAddrRandomBssid(struct rt_rtmp_adapter *pAd, u8 *pAddr); + +-void MgtMacHeaderInit(IN PRTMP_ADAPTER pAd, +- IN OUT PHEADER_802_11 pHdr80211, ++void MgtMacHeaderInit(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u8 SubType, + u8 ToDs, u8 *pDA, u8 *pBssid); + +-void MlmeRadioOff(IN PRTMP_ADAPTER pAd); ++void MlmeRadioOff(struct rt_rtmp_adapter *pAd); + +-void MlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void MlmeRadioOn(struct rt_rtmp_adapter *pAd); + +-void BssTableInit(IN BSS_TABLE * Tab); ++void BssTableInit(struct rt_bss_table *Tab); + +-void BATableInit(IN PRTMP_ADAPTER pAd, IN BA_TABLE * Tab); ++void BATableInit(struct rt_rtmp_adapter *pAd, struct rt_ba_table *Tab); + +-unsigned long BssTableSearch(IN BSS_TABLE * Tab, u8 *pBssid, u8 Channel); ++unsigned long BssTableSearch(struct rt_bss_table *Tab, u8 *pBssid, u8 Channel); + +-unsigned long BssSsidTableSearch(IN BSS_TABLE * Tab, ++unsigned long BssSsidTableSearch(struct rt_bss_table *Tab, + u8 *pBssid, + u8 *pSsid, u8 SsidLen, u8 Channel); + +-unsigned long BssTableSearchWithSSID(IN BSS_TABLE * Tab, ++unsigned long BssTableSearchWithSSID(struct rt_bss_table *Tab, + u8 *Bssid, + u8 *pSsid, + u8 SsidLen, u8 Channel); + +-unsigned long BssSsidTableSearchBySSID(IN BSS_TABLE * Tab, ++unsigned long BssSsidTableSearchBySSID(struct rt_bss_table *Tab, + u8 *pSsid, u8 SsidLen); + +-void BssTableDeleteEntry(IN OUT PBSS_TABLE pTab, ++void BssTableDeleteEntry(struct rt_bss_table *pTab, + u8 *pBssid, u8 Channel); + +-void BATableDeleteORIEntry(IN OUT PRTMP_ADAPTER pAd, +- IN BA_ORI_ENTRY * pBAORIEntry); ++void BATableDeleteORIEntry(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_ori_entry *pBAORIEntry); + +-void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN PCF_PARM CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++void BssEntrySet(struct rt_rtmp_adapter *pAd, struct rt_bss_entry *pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 HtCapabilityLen, + u8 AddHtInfoLen, + u8 NewExtChanOffset, +@@ -2756,12 +2756,12 @@ void BssEntrySet(IN PRTMP_ADAPTER pAd, OUT PBSS_ENTRY pBss, u8 *pBssid, char Ssi + char Rssi, + IN LARGE_INTEGER TimeStamp, + u8 CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_qos_capability_parm *pQosCapability, ++ struct rt_qbss_load_parm *pQbssLoad, ++ u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE); + +-unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, IN CF_PARM * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN HT_CAPABILITY_IE * pHtCapability, IN ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++unsigned long BssTableSetEntry(struct rt_rtmp_adapter *pAd, struct rt_bss_table *pTab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 HtCapabilityLen, + u8 AddHtInfoLen, + u8 NewExtChanOffset, +@@ -2769,12 +2769,12 @@ unsigned long BssTableSetEntry(IN PRTMP_ADAPTER pAd, OUT PBSS_TABLE pTab, u8 *pB + char Rssi, + IN LARGE_INTEGER TimeStamp, + u8 CkipFlag, +- IN PEDCA_PARM pEdcaParm, +- IN PQOS_CAPABILITY_PARM pQosCapability, +- IN PQBSS_LOAD_PARM pQbssLoad, +- u16 LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_qos_capability_parm *pQosCapability, ++ struct rt_qbss_load_parm *pQbssLoad, ++ u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE); + +-void BATableInsertEntry(IN PRTMP_ADAPTER pAd, ++void BATableInsertEntry(struct rt_rtmp_adapter *pAd, + u16 Aid, + u16 TimeOutValue, + u16 StartingSeq, +@@ -2782,22 +2782,22 @@ void BATableInsertEntry(IN PRTMP_ADAPTER pAd, + u8 BAWinSize, + u8 OriginatorStatus, IN BOOLEAN IsRecipient); + +-void BssTableSsidSort(IN PRTMP_ADAPTER pAd, +- OUT BSS_TABLE * OutTab, char Ssid[], u8 SsidLen); ++void BssTableSsidSort(struct rt_rtmp_adapter *pAd, ++ struct rt_bss_table *OutTab, char Ssid[], u8 SsidLen); + +-void BssTableSortByRssi(IN OUT BSS_TABLE * OutTab); ++void BssTableSortByRssi(struct rt_bss_table *OutTab); + +-void BssCipherParse(IN OUT PBSS_ENTRY pBss); ++void BssCipherParse(struct rt_bss_entry *pBss); + +-int MlmeQueueInit(IN MLME_QUEUE * Queue); ++int MlmeQueueInit(struct rt_mlme_queue *Queue); + +-void MlmeQueueDestroy(IN MLME_QUEUE * Queue); ++void MlmeQueueDestroy(struct rt_mlme_queue *Queue); + +-BOOLEAN MlmeEnqueue(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeEnqueue(struct rt_rtmp_adapter *pAd, + unsigned long Machine, + unsigned long MsgType, unsigned long MsgLen, void * Msg); + +-BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeEnqueueForRecv(struct rt_rtmp_adapter *pAd, + unsigned long Wcid, + unsigned long TimeStampHigh, + unsigned long TimeStampLow, +@@ -2806,35 +2806,35 @@ BOOLEAN MlmeEnqueueForRecv(IN PRTMP_ADAPTER pAd, + u8 Rssi2, + unsigned long MsgLen, void *Msg, u8 Signal); + +-BOOLEAN MlmeDequeue(IN MLME_QUEUE * Queue, OUT MLME_QUEUE_ELEM ** Elem); ++BOOLEAN MlmeDequeue(struct rt_mlme_queue *Queue, struct rt_mlme_queue_elem ** Elem); + +-void MlmeRestartStateMachine(IN PRTMP_ADAPTER pAd); ++void MlmeRestartStateMachine(struct rt_rtmp_adapter *pAd); + +-BOOLEAN MlmeQueueEmpty(IN MLME_QUEUE * Queue); ++BOOLEAN MlmeQueueEmpty(struct rt_mlme_queue *Queue); + +-BOOLEAN MlmeQueueFull(IN MLME_QUEUE * Queue); ++BOOLEAN MlmeQueueFull(struct rt_mlme_queue *Queue); + +-BOOLEAN MsgTypeSubst(IN PRTMP_ADAPTER pAd, +- IN PFRAME_802_11 pFrame, ++BOOLEAN MsgTypeSubst(struct rt_rtmp_adapter *pAd, ++ struct rt_frame_802_11 * pFrame, + int * Machine, int * MsgType); + +-void StateMachineInit(IN STATE_MACHINE * Sm, ++void StateMachineInit(struct rt_state_machine *Sm, + IN STATE_MACHINE_FUNC Trans[], + unsigned long StNr, + unsigned long MsgNr, + IN STATE_MACHINE_FUNC DefFunc, + unsigned long InitState, unsigned long Base); + +-void StateMachineSetAction(IN STATE_MACHINE * S, ++void StateMachineSetAction(struct rt_state_machine *S, + unsigned long St, unsigned long Msg, IN STATE_MACHINE_FUNC F); + +-void StateMachinePerformAction(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, IN MLME_QUEUE_ELEM * Elem); ++void StateMachinePerformAction(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, struct rt_mlme_queue_elem *Elem); + +-void Drop(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void Drop(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void AssocStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * Sm, ++void AssocStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, + OUT STATE_MACHINE_FUNC Trans[]); + + void ReassocTimeout(void *SystemSpecific1, +@@ -2850,42 +2850,42 @@ void DisassocTimeout(void *SystemSpecific1, + void *SystemSpecific2, void *SystemSpecific3); + + /*---------------------------------------------- */ +-void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeAssocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeReassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDisassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAssocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerReassocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDisassocAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void DisassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void AssocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void ReassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr); ++void Cls3errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr); + +-void InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenAssoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenReassoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenDisassociate(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem); + + #ifdef RTMP_MAC_USB +-void MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, unsigned long MsgType, u16 Msg); ++void MlmeCntlConfirm(struct rt_rtmp_adapter *pAd, unsigned long MsgType, u16 Msg); + #endif /* RTMP_MAC_USB // */ + +-void ComposePsPoll(IN PRTMP_ADAPTER pAd); ++void ComposePsPoll(struct rt_rtmp_adapter *pAd); + +-void ComposeNullFrame(IN PRTMP_ADAPTER pAd); ++void ComposeNullFrame(struct rt_rtmp_adapter *pAd); + +-void AssocPostProc(IN PRTMP_ADAPTER pAd, ++void AssocPostProc(struct rt_rtmp_adapter *pAd, + u8 *pAddr2, + u16 CapabilityInfo, + u16 Aid, +@@ -2893,41 +2893,41 @@ void AssocPostProc(IN PRTMP_ADAPTER pAd, + u8 SupRateLen, + u8 ExtRate[], + u8 ExtRateLen, +- IN PEDCA_PARM pEdcaParm, +- IN HT_CAPABILITY_IE * pHtCapability, +- u8 HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo); ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_ht_capability_ie * pHtCapability, ++ u8 HtCapabilityLen, struct rt_add_ht_info_ie * pAddHtInfo); + +-void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE sm, OUT STATE_MACHINE_FUNC Trans[]); ++void AuthStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *sm, OUT STATE_MACHINE_FUNC Trans[]); + + void AuthTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeAuthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAuthRspAtSeq2Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerAuthRspAtSeq4Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void AuthTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr); ++void Cls2errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr); + +-void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeDeauthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenAuth(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + /*============================================= */ + +-void AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, ++void AuthRspStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, + IN STATE_MACHINE_FUNC Trans[]); + +-void PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerDeauthAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, ++void PeerAuthSimpleRspGenAndSend(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u16 Alg, + u16 Seq, + u16 Reason, u16 Status); +@@ -2938,8 +2938,8 @@ void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + + /*======================================== */ + +-void SyncStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * Sm, ++void SyncStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, + OUT STATE_MACHINE_FUNC Trans[]); + + void BeaconTimeout(void *SystemSpecific1, +@@ -2950,116 +2950,116 @@ void ScanTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenScan(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenJoin(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void InvalidStateWhenStart(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd); ++void EnqueueProbeRequest(struct rt_rtmp_adapter *pAd); + +-BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd); ++BOOLEAN ScanRunning(struct rt_rtmp_adapter *pAd); + /*========================================= */ + +-void MlmeCntlInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]); ++void MlmeCntlInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, OUT STATE_MACHINE_FUNC Trans[]); + +-void MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, +- IN MLME_QUEUE_ELEM * Elem); ++void MlmeCntlMachinePerformAction(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, ++ struct rt_mlme_queue_elem *Elem); + +-void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlIdleProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidScanProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidSsidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlOidRTBssidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlMlmeRoamingProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitDisassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitJoinProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitReassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitStartProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAuthProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAuthProc2(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void CntlWaitAssocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType); ++void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType); + +-void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP); ++void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP); + +-void IterateOnBssTab(IN PRTMP_ADAPTER pAd); ++void IterateOnBssTab(struct rt_rtmp_adapter *pAd); + +-void IterateOnBssTab2(IN PRTMP_ADAPTER pAd);; ++void IterateOnBssTab2(struct rt_rtmp_adapter *pAd);; + +-void JoinParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, unsigned long BssIdx); ++void JoinParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_join_req *JoinReq, unsigned long BssIdx); + +-void AssocParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_ASSOC_REQ_STRUCT * AssocReq, ++void AssocParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_assoc_req *AssocReq, + u8 *pAddr, + u16 CapabilityInfo, + unsigned long Timeout, u16 ListenIntv); + +-void ScanParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, ++void ScanParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_scan_req *ScanReq, + char Ssid[], + u8 SsidLen, u8 BssType, u8 ScanType); + +-void DisassocParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_DISASSOC_REQ_STRUCT * DisassocReq, ++void DisassocParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_disassoc_req *DisassocReq, + u8 *pAddr, u16 Reason); + +-void StartParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT * StartReq, ++void StartParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_start_req *StartReq, + char Ssid[], u8 SsidLen); + +-void AuthParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, ++void AuthParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_auth_req *AuthReq, + u8 *pAddr, u16 Alg); + +-void EnqueuePsPoll(IN PRTMP_ADAPTER pAd); ++void EnqueuePsPoll(struct rt_rtmp_adapter *pAd); + +-void EnqueueBeaconFrame(IN PRTMP_ADAPTER pAd); ++void EnqueueBeaconFrame(struct rt_rtmp_adapter *pAd); + +-void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeJoinReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeScanReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void MlmeStartReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void ScanTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void BeaconTimeoutAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeaconAtScanAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeaconAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerBeacon(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerProbeReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + +-void ScanNextChannel(IN PRTMP_ADAPTER pAd); ++void ScanNextChannel(struct rt_rtmp_adapter *pAd); + +-unsigned long MakeIbssBeacon(IN PRTMP_ADAPTER pAd); ++unsigned long MakeIbssBeacon(struct rt_rtmp_adapter *pAd); + +-BOOLEAN MlmeScanReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeScanReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 * BssType, + char ssid[], + u8 * SsidLen, u8 * ScanType); + +-BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 MsgChannel, +@@ -3072,7 +3072,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, + u8 * pChannel, + u8 * pNewChannel, + OUT LARGE_INTEGER * pTimestamp, +- OUT CF_PARM * pCfParm, ++ struct rt_cf_parm * pCfParm, + u16 * pAtimWin, + u16 * pCapabilityInfo, + u8 * pErp, +@@ -3086,48 +3086,48 @@ BOOLEAN PeerBeaconAndProbeRspSanity(IN PRTMP_ADAPTER pAd, + u8 * pExtRateLen, + u8 * pCkipFlag, + u8 * pAironetCellPowerLimit, +- OUT PEDCA_PARM pEdcaParm, +- OUT PQBSS_LOAD_PARM pQbssLoad, +- OUT PQOS_CAPABILITY_PARM pQosCapability, ++ struct rt_edca_parm *pEdcaParm, ++ struct rt_qbss_load_parm *pQbssLoad, ++ struct rt_qos_capability_parm *pQosCapability, + unsigned long * pRalinkIe, + u8 * pHtCapabilityLen, + u8 * pPreNHtCapabilityLen, +- OUT HT_CAPABILITY_IE * pHtCapability, ++ struct rt_ht_capability_ie * pHtCapability, + u8 * AddHtInfoLen, +- OUT ADD_HT_INFO_IE * AddHtInfo, ++ struct rt_add_ht_info_ie * AddHtInfo, + u8 * NewExtChannel, + u16 * LengthVIE, +- OUT PNDIS_802_11_VARIABLE_IEs pVIE); ++ struct rt_ndis_802_11_variable_ies *pVIE); + +-BOOLEAN PeerAddBAReqActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAddBAReqActionSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, + unsigned long MsgLen, u8 *pAddr2); + +-BOOLEAN PeerAddBARspActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAddBARspActionSanity(struct rt_rtmp_adapter *pAd, + void * pMsg, unsigned long MsgLen); + +-BOOLEAN PeerDelBAActionSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDelBAActionSanity(struct rt_rtmp_adapter *pAd, + u8 Wcid, void * pMsg, unsigned long MsgLen); + +-BOOLEAN MlmeAssocReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAssocReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pApAddr, + u16 * CapabilityInfo, + unsigned long * Timeout, u16 * ListenIntv); + +-BOOLEAN MlmeAuthReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAuthReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr, + unsigned long * Timeout, u16 * Alg); + +-BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeStartReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + char Ssid[], u8 * Ssidlen); + +-BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerAuthSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr, +@@ -3135,28 +3135,28 @@ BOOLEAN PeerAuthSanity(IN PRTMP_ADAPTER pAd, + u16 * Seq, + u16 * Status, char ChlgText[]); + +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 * pHtCapabilityLen, + u8 * pAddHtInfoLen, + u8 * pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, u8 * pCkipFlag); ++ struct rt_edca_parm *pEdcaParm, u8 * pCkipFlag); + +-BOOLEAN PeerDisassocSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDisassocSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, u16 * Reason); + +-BOOLEAN PeerWpaMessageSanity(IN PRTMP_ADAPTER pAd, +- IN PEAPOL_PACKET pMsg, ++BOOLEAN PeerWpaMessageSanity(struct rt_rtmp_adapter *pAd, ++ struct rt_eapol_packet * pMsg, + unsigned long MsgLen, +- u8 MsgType, IN MAC_TABLE_ENTRY * pEntry); ++ u8 MsgType, struct rt_mac_table_entry *pEntry); + +-BOOLEAN PeerDeauthSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerDeauthSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, u16 * Reason); + +-BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerProbeReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, +@@ -3169,23 +3169,23 @@ BOOLEAN GetTimBit(char * Ptr, + u8 * DtimCount, + u8 * DtimPeriod, u8 * MessageToMe); + +-u8 ChannelSanity(IN PRTMP_ADAPTER pAd, u8 channel); ++u8 ChannelSanity(struct rt_rtmp_adapter *pAd, u8 channel); + +-NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(IN PBSS_ENTRY pBss); ++NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(struct rt_bss_entry *pBss); + +-BOOLEAN MlmeDelBAReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeDelBAReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, unsigned long MsgLen); + +-BOOLEAN MlmeAddBAReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeAddBAReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, unsigned long MsgLen, u8 *pAddr2); + + unsigned long MakeOutgoingFrame(u8 * Buffer, unsigned long * Length, ...); + +-void LfsrInit(IN PRTMP_ADAPTER pAd, unsigned long Seed); ++void LfsrInit(struct rt_rtmp_adapter *pAd, unsigned long Seed); + +-u8 RandomByte(IN PRTMP_ADAPTER pAd); ++u8 RandomByte(struct rt_rtmp_adapter *pAd); + +-void AsicUpdateAutoFallBackTable(IN PRTMP_ADAPTER pAd, u8 *pTxRate); ++void AsicUpdateAutoFallBackTable(struct rt_rtmp_adapter *pAd, u8 *pTxRate); + + void MlmePeriodicExec(void *SystemSpecific1, + void *FunctionContext, +@@ -3195,109 +3195,109 @@ void LinkDownExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void STAMlmePeriodicExec(PRTMP_ADAPTER pAd); ++void STAMlmePeriodicExec(struct rt_rtmp_adapter *pAd); + +-void MlmeAutoScan(IN PRTMP_ADAPTER pAd); ++void MlmeAutoScan(struct rt_rtmp_adapter *pAd); + +-void MlmeAutoReconnectLastSSID(IN PRTMP_ADAPTER pAd); ++void MlmeAutoReconnectLastSSID(struct rt_rtmp_adapter *pAd); + + BOOLEAN MlmeValidateSSID(u8 *pSsid, u8 SsidLen); + +-void MlmeCheckForRoaming(IN PRTMP_ADAPTER pAd, unsigned long Now32); ++void MlmeCheckForRoaming(struct rt_rtmp_adapter *pAd, unsigned long Now32); + +-BOOLEAN MlmeCheckForFastRoaming(IN PRTMP_ADAPTER pAd); ++BOOLEAN MlmeCheckForFastRoaming(struct rt_rtmp_adapter *pAd); + +-void MlmeDynamicTxRateSwitching(IN PRTMP_ADAPTER pAd); ++void MlmeDynamicTxRateSwitching(struct rt_rtmp_adapter *pAd); + +-void MlmeSetTxRate(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, IN PRTMP_TX_RATE_SWITCH pTxRate); ++void MlmeSetTxRate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_rtmp_tx_rate_switch * pTxRate); + +-void MlmeSelectTxRateTable(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++void MlmeSelectTxRateTable(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 ** ppTable, + u8 *pTableSize, u8 *pInitTxRateIdx); + +-void MlmeCalculateChannelQuality(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pMacEntry, unsigned long Now); ++void MlmeCalculateChannelQuality(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pMacEntry, unsigned long Now); + +-void MlmeCheckPsmChange(IN PRTMP_ADAPTER pAd, unsigned long Now32); ++void MlmeCheckPsmChange(struct rt_rtmp_adapter *pAd, unsigned long Now32); + +-void MlmeSetPsmBit(IN PRTMP_ADAPTER pAd, u16 psm); ++void MlmeSetPsmBit(struct rt_rtmp_adapter *pAd, u16 psm); + +-void MlmeSetTxPreamble(IN PRTMP_ADAPTER pAd, u16 TxPreamble); ++void MlmeSetTxPreamble(struct rt_rtmp_adapter *pAd, u16 TxPreamble); + +-void UpdateBasicRateBitmap(IN PRTMP_ADAPTER pAd); ++void UpdateBasicRateBitmap(struct rt_rtmp_adapter *pAd); + +-void MlmeUpdateTxRates(IN PRTMP_ADAPTER pAd, ++void MlmeUpdateTxRates(struct rt_rtmp_adapter *pAd, + IN BOOLEAN bLinkUp, u8 apidx); + +-void MlmeUpdateHtTxRates(IN PRTMP_ADAPTER pAd, u8 apidx); ++void MlmeUpdateHtTxRates(struct rt_rtmp_adapter *pAd, u8 apidx); + +-void RTMPCheckRates(IN PRTMP_ADAPTER pAd, ++void RTMPCheckRates(struct rt_rtmp_adapter *pAd, + IN u8 SupRate[], IN u8 * SupRateLen); + +-BOOLEAN RTMPCheckChannel(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPCheckChannel(struct rt_rtmp_adapter *pAd, + u8 CentralChannel, u8 Channel); + +-BOOLEAN RTMPCheckHt(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPCheckHt(struct rt_rtmp_adapter *pAd, + u8 Wcid, +- IN OUT HT_CAPABILITY_IE * pHtCapability, +- IN OUT ADD_HT_INFO_IE * pAddHtInfo); ++ struct rt_ht_capability_ie * pHtCapability, ++ struct rt_add_ht_info_ie * pAddHtInfo); + + void StaQuickResponeForRateUpExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, + void *SystemSpecific3); + +-void RTMPUpdateMlmeRate(IN PRTMP_ADAPTER pAd); ++void RTMPUpdateMlmeRate(struct rt_rtmp_adapter *pAd); + +-char RTMPMaxRssi(IN PRTMP_ADAPTER pAd, ++char RTMPMaxRssi(struct rt_rtmp_adapter *pAd, + char Rssi0, char Rssi1, char Rssi2); + + #ifdef RT30xx +-void AsicSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant); ++void AsicSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant); + +-void RTMPFilterCalibration(IN PRTMP_ADAPTER pAd); ++void RTMPFilterCalibration(struct rt_rtmp_adapter *pAd); + + #ifdef RTMP_EFUSE_SUPPORT + /*2008/09/11:KH add to support efuse<-- */ +-int set_eFuseGetFreeBlockCount_Proc(IN PRTMP_ADAPTER pAd, char *arg); ++int set_eFuseGetFreeBlockCount_Proc(struct rt_rtmp_adapter *pAd, char *arg); + +-int set_eFusedump_Proc(IN PRTMP_ADAPTER pAd, char *arg); ++int set_eFusedump_Proc(struct rt_rtmp_adapter *pAd, char *arg); + +-void eFusePhysicalReadRegisters(IN PRTMP_ADAPTER pAd, ++void eFusePhysicalReadRegisters(struct rt_rtmp_adapter *pAd, + u16 Offset, + u16 Length, u16 * pData); + +-int RtmpEfuseSupportCheck(IN RTMP_ADAPTER * pAd); ++int RtmpEfuseSupportCheck(struct rt_rtmp_adapter *pAd); + +-void eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd, u32 *EfuseFreeBlock); ++void eFuseGetFreeBlockCount(struct rt_rtmp_adapter *pAd, u32 *EfuseFreeBlock); + +-int eFuse_init(IN PRTMP_ADAPTER pAd); ++int eFuse_init(struct rt_rtmp_adapter *pAd); + /*2008/09/11:KH add to support efuse--> */ + #endif /* RTMP_EFUSE_SUPPORT // */ + + /* add by johnli, RF power sequence setup */ +-void RT30xxLoadRFNormalModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxLoadRFNormalModeSetup(struct rt_rtmp_adapter *pAd); + +-void RT30xxLoadRFSleepModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxLoadRFSleepModeSetup(struct rt_rtmp_adapter *pAd); + +-void RT30xxReverseRFSleepModeSetup(IN PRTMP_ADAPTER pAd); ++void RT30xxReverseRFSleepModeSetup(struct rt_rtmp_adapter *pAd); + /* end johnli */ + + #ifdef RT3070 +-void NICInitRT3070RFRegisters(IN RTMP_ADAPTER * pAd); ++void NICInitRT3070RFRegisters(struct rt_rtmp_adapter *pAd); + #endif /* RT3070 // */ + #ifdef RT3090 +-void NICInitRT3090RFRegisters(IN RTMP_ADAPTER * pAd); ++void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd); + #endif /* RT3090 // */ + +-void RT30xxHaltAction(IN PRTMP_ADAPTER pAd); ++void RT30xxHaltAction(struct rt_rtmp_adapter *pAd); + +-void RT30xxSetRxAnt(IN PRTMP_ADAPTER pAd, u8 Ant); ++void RT30xxSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant); + #endif /* RT30xx // */ + +-void AsicEvaluateRxAnt(IN PRTMP_ADAPTER pAd); ++void AsicEvaluateRxAnt(struct rt_rtmp_adapter *pAd); + + void AsicRxAntEvalTimeout(void *SystemSpecific1, + void *FunctionContext, +@@ -3307,88 +3307,88 @@ void APSDPeriodicExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry); ++BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry); + +-u8 RTMPStaFixedTxMode(IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); ++u8 RTMPStaFixedTxMode(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); + +-void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, PMAC_TABLE_ENTRY pEntry); ++void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, struct rt_mac_table_entry *pEntry); + +-BOOLEAN RTMPAutoRateSwitchCheck(IN PRTMP_ADAPTER pAd); ++BOOLEAN RTMPAutoRateSwitchCheck(struct rt_rtmp_adapter *pAd); + +-int MlmeInit(IN PRTMP_ADAPTER pAd); ++int MlmeInit(struct rt_rtmp_adapter *pAd); + +-void MlmeHandler(IN PRTMP_ADAPTER pAd); ++void MlmeHandler(struct rt_rtmp_adapter *pAd); + +-void MlmeHalt(IN PRTMP_ADAPTER pAd); ++void MlmeHalt(struct rt_rtmp_adapter *pAd); + +-void MlmeResetRalinkCounters(IN PRTMP_ADAPTER pAd); ++void MlmeResetRalinkCounters(struct rt_rtmp_adapter *pAd); + +-void BuildChannelList(IN PRTMP_ADAPTER pAd); ++void BuildChannelList(struct rt_rtmp_adapter *pAd); + +-u8 FirstChannel(IN PRTMP_ADAPTER pAd); ++u8 FirstChannel(struct rt_rtmp_adapter *pAd); + +-u8 NextChannel(IN PRTMP_ADAPTER pAd, u8 channel); ++u8 NextChannel(struct rt_rtmp_adapter *pAd, u8 channel); + +-void ChangeToCellPowerLimit(IN PRTMP_ADAPTER pAd, ++void ChangeToCellPowerLimit(struct rt_rtmp_adapter *pAd, + u8 AironetCellPowerLimit); + + /* */ + /* Prototypes of function definition in rtmp_tkip.c */ + /* */ +-void RTMPInitTkipEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitTkipEngine(struct rt_rtmp_adapter *pAd, + u8 *pTKey, + u8 KeyId, + u8 *pTA, + u8 *pMICKey, + u8 *pTSC, unsigned long *pIV16, unsigned long *pIV32); + +-void RTMPInitMICEngine(IN PRTMP_ADAPTER pAd, ++void RTMPInitMICEngine(struct rt_rtmp_adapter *pAd, + u8 *pKey, + u8 *pDA, + u8 *pSA, u8 UserPriority, u8 *pMICKey); + +-BOOLEAN RTMPTkipCompareMICValue(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPTkipCompareMICValue(struct rt_rtmp_adapter *pAd, + u8 *pSrc, + u8 *pDA, + u8 *pSA, + u8 *pMICKey, + u8 UserPriority, u32 Len); + +-void RTMPCalculateMICValue(IN PRTMP_ADAPTER pAd, ++void RTMPCalculateMICValue(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pEncap, +- IN PCIPHER_KEY pKey, u8 apidx); ++ struct rt_cipher_key *pKey, u8 apidx); + +-void RTMPTkipAppendByte(IN PTKIP_KEY_INFO pTkip, u8 uChar); ++void RTMPTkipAppendByte(struct rt_tkip_key_info *pTkip, u8 uChar); + +-void RTMPTkipAppend(IN PTKIP_KEY_INFO pTkip, u8 *pSrc, u32 nBytes); ++void RTMPTkipAppend(struct rt_tkip_key_info *pTkip, u8 *pSrc, u32 nBytes); + +-void RTMPTkipGetMIC(IN PTKIP_KEY_INFO pTkip); ++void RTMPTkipGetMIC(struct rt_tkip_key_info *pTkip); + +-BOOLEAN RTMPSoftDecryptTKIP(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptTKIP(struct rt_rtmp_adapter *pAd, + u8 *pData, + unsigned long DataByteCnt, +- u8 UserPriority, IN PCIPHER_KEY pWpaKey); ++ u8 UserPriority, struct rt_cipher_key *pWpaKey); + +-BOOLEAN RTMPSoftDecryptAES(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPSoftDecryptAES(struct rt_rtmp_adapter *pAd, + u8 *pData, +- unsigned long DataByteCnt, IN PCIPHER_KEY pWpaKey); ++ unsigned long DataByteCnt, struct rt_cipher_key *pWpaKey); + + /* */ + /* Prototypes of function definition in cmm_info.c */ + /* */ +-int RT_CfgSetCountryRegion(IN PRTMP_ADAPTER pAd, char *arg, int band); ++int RT_CfgSetCountryRegion(struct rt_rtmp_adapter *pAd, char *arg, int band); + +-int RT_CfgSetWirelessMode(IN PRTMP_ADAPTER pAd, char *arg); ++int RT_CfgSetWirelessMode(struct rt_rtmp_adapter *pAd, char *arg); + +-int RT_CfgSetShortSlot(IN PRTMP_ADAPTER pAd, char *arg); ++int RT_CfgSetShortSlot(struct rt_rtmp_adapter *pAd, char *arg); + +-int RT_CfgSetWepKey(IN PRTMP_ADAPTER pAd, ++int RT_CfgSetWepKey(struct rt_rtmp_adapter *pAd, + char *keyString, +- IN CIPHER_KEY * pSharedKey, int keyIdx); ++ struct rt_cipher_key *pSharedKey, int keyIdx); + +-int RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, ++int RT_CfgSetWPAPSKKey(struct rt_rtmp_adapter *pAd, + char *keyString, + u8 * pHashStr, + int hashStrLen, u8 *pPMKBuf); +@@ -3396,55 +3396,55 @@ int RT_CfgSetWPAPSKKey(IN RTMP_ADAPTER * pAd, + /* */ + /* Prototypes of function definition in cmm_info.c */ + /* */ +-void RTMPWPARemoveAllKeys(IN PRTMP_ADAPTER pAd); ++void RTMPWPARemoveAllKeys(struct rt_rtmp_adapter *pAd); + +-void RTMPSetPhyMode(IN PRTMP_ADAPTER pAd, unsigned long phymode); ++void RTMPSetPhyMode(struct rt_rtmp_adapter *pAd, unsigned long phymode); + +-void RTMPUpdateHTIE(IN RT_HT_CAPABILITY * pRtHt, ++void RTMPUpdateHTIE(struct rt_ht_capability *pRtHt, + u8 * pMcsSet, +- OUT HT_CAPABILITY_IE * pHtCapability, +- OUT ADD_HT_INFO_IE * pAddHtInfo); ++ struct rt_ht_capability_ie * pHtCapability, ++ struct rt_add_ht_info_ie * pAddHtInfo); + +-void RTMPAddWcidAttributeEntry(IN PRTMP_ADAPTER pAd, ++void RTMPAddWcidAttributeEntry(struct rt_rtmp_adapter *pAd, + u8 BssIdx, + u8 KeyIdx, +- u8 CipherAlg, IN MAC_TABLE_ENTRY * pEntry); ++ u8 CipherAlg, struct rt_mac_table_entry *pEntry); + + char *GetEncryptType(char enc); + + char *GetAuthMode(char auth); + +-void RTMPSetHT(IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE * pHTPhyMode); ++void RTMPSetHT(struct rt_rtmp_adapter *pAd, struct rt_oid_set_ht_phymode *pHTPhyMode); + +-void RTMPSetIndividualHT(IN PRTMP_ADAPTER pAd, u8 apidx); ++void RTMPSetIndividualHT(struct rt_rtmp_adapter *pAd, u8 apidx); + +-void RTMPSendWirelessEvent(IN PRTMP_ADAPTER pAd, ++void RTMPSendWirelessEvent(struct rt_rtmp_adapter *pAd, + u16 Event_flag, + u8 *pAddr, u8 BssIdx, char Rssi); + +-char ConvertToRssi(IN PRTMP_ADAPTER pAd, char Rssi, u8 RssiNumber); ++char ConvertToRssi(struct rt_rtmp_adapter *pAd, char Rssi, u8 RssiNumber); + + /*=================================== + Function prototype in cmm_wpa.c + =================================== */ +-void RTMPToWirelessSta(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++void RTMPToWirelessSta(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, + u32 DataLen, IN BOOLEAN bClearFrame); + +-void WpaDerivePTK(IN PRTMP_ADAPTER pAd, ++void WpaDerivePTK(struct rt_rtmp_adapter *pAd, + u8 * PMK, + u8 * ANonce, + u8 * AA, + u8 * SNonce, + u8 * SA, u8 * output, u32 len); + +-void GenRandom(IN PRTMP_ADAPTER pAd, u8 * macAddr, u8 * random); ++void GenRandom(struct rt_rtmp_adapter *pAd, u8 * macAddr, u8 * random); + +-BOOLEAN RTMPCheckWPAframe(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++BOOLEAN RTMPCheckWPAframe(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 *pData, + unsigned long DataByteCount, u8 FromWhichBSSID); + +@@ -3452,14 +3452,14 @@ void AES_GTK_KEY_UNWRAP(u8 * key, + u8 * plaintext, + u32 c_len, u8 * ciphertext); + +-BOOLEAN RTMPParseEapolKeyData(IN PRTMP_ADAPTER pAd, ++BOOLEAN RTMPParseEapolKeyData(struct rt_rtmp_adapter *pAd, + u8 *pKeyData, + u8 KeyDataLen, + u8 GroupKeyIndex, + u8 MsgType, +- IN BOOLEAN bWPA2, IN MAC_TABLE_ENTRY * pEntry); ++ IN BOOLEAN bWPA2, struct rt_mac_table_entry *pEntry); + +-void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, ++void ConstructEapolMsg(struct rt_mac_table_entry *pEntry, + u8 GroupKeyWepStatus, + u8 MsgType, + u8 DefaultKeyIdx, +@@ -3467,53 +3467,53 @@ void ConstructEapolMsg(IN PMAC_TABLE_ENTRY pEntry, + u8 * TxRSC, + u8 * GTK, + u8 * RSNIE, +- u8 RSNIE_Len, OUT PEAPOL_PACKET pMsg); ++ u8 RSNIE_Len, struct rt_eapol_packet * pMsg); + +-int RTMPSoftDecryptBroadCastData(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, ++int RTMPSoftDecryptBroadCastData(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, + IN NDIS_802_11_ENCRYPTION_STATUS + GroupCipher, +- IN PCIPHER_KEY pShard_key); ++ struct rt_cipher_key *pShard_key); + +-void RTMPMakeRSNIE(IN PRTMP_ADAPTER pAd, ++void RTMPMakeRSNIE(struct rt_rtmp_adapter *pAd, + u32 AuthMode, u32 WepStatus, u8 apidx); + + /* */ + /* function prototype in ap_wpa.c */ + /* */ +-void RTMPGetTxTscFromAsic(IN PRTMP_ADAPTER pAd, ++void RTMPGetTxTscFromAsic(struct rt_rtmp_adapter *pAd, + u8 apidx, u8 *pTxTsc); + +-void APInstallPairwiseKey(PRTMP_ADAPTER pAd, PMAC_TABLE_ENTRY pEntry); ++void APInstallPairwiseKey(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); + +-u32 APValidateRSNIE(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++u32 APValidateRSNIE(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 *pRsnIe, u8 rsnie_len); + +-void HandleCounterMeasure(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void HandleCounterMeasure(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); + +-void WPAStart4WayHS(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, unsigned long TimeInterval); ++void WPAStart4WayHS(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, unsigned long TimeInterval); + +-void WPAStart2WayGroupHS(IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY * pEntry); ++void WPAStart2WayGroupHS(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); + +-void PeerPairMsg1Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++void PeerPairMsg1Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem); + +-void PeerPairMsg2Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++void PeerPairMsg2Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem); + +-void PeerPairMsg3Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++void PeerPairMsg3Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem); + +-void PeerPairMsg4Action(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN MLME_QUEUE_ELEM * Elem); ++void PeerPairMsg4Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem); + +-void PeerGroupMsg1Action(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, IN MLME_QUEUE_ELEM * Elem); ++void PeerGroupMsg1Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem); + +-void PeerGroupMsg2Action(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++void PeerGroupMsg2Action(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + void * Msg, u32 MsgLen); + + void WpaDeriveGTK(u8 * PMK, +@@ -3530,7 +3530,7 @@ void AES_GTK_KEY_WRAP(u8 * key, + void RTMP_SetPeriodicTimer(struct timer_list * pTimer, + IN unsigned long timeout); + +-void RTMP_OS_Init_Timer(IN PRTMP_ADAPTER pAd, ++void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd, + struct timer_list * pTimer, + IN TIMER_FUNCTION function, void *data); + +@@ -3543,171 +3543,171 @@ void RTMP_OS_Mod_Timer(struct timer_list * pTimer, + void RTMP_OS_Del_Timer(struct timer_list * pTimer, + OUT BOOLEAN * pCancelled); + +-void RTMP_OS_Release_Packet(IN PRTMP_ADAPTER pAd, IN PQUEUE_ENTRY pEntry); ++void RTMP_OS_Release_Packet(struct rt_rtmp_adapter *pAd, struct rt_queue_entry *pEntry); + + void RTMPusecDelay(unsigned long usec); + +-int os_alloc_mem(IN RTMP_ADAPTER * pAd, ++int os_alloc_mem(struct rt_rtmp_adapter *pAd, + u8 ** mem, unsigned long size); + +-int os_free_mem(IN PRTMP_ADAPTER pAd, void *mem); ++int os_free_mem(struct rt_rtmp_adapter *pAd, void *mem); + +-void RTMP_AllocateSharedMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + dma_addr_t *PhysicalAddress); + +-void RTMPFreeTxRxRingMemory(IN PRTMP_ADAPTER pAd); ++void RTMPFreeTxRxRingMemory(struct rt_rtmp_adapter *pAd); + + int AdapterBlockAllocateMemory(void *handle, void ** ppAd); + +-void RTMP_AllocateTxDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd, + u32 Index, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + dma_addr_t *PhysicalAddress); + +-void RTMP_AllocateFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateFirstTxBuffer(struct rt_rtmp_adapter *pAd, + u32 Index, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + dma_addr_t *PhysicalAddress); + +-void RTMP_FreeFirstTxBuffer(IN PRTMP_ADAPTER pAd, ++void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void *VirtualAddress, + dma_addr_t PhysicalAddress); + +-void RTMP_AllocateMgmtDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + dma_addr_t *PhysicalAddress); + +-void RTMP_AllocateRxDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_AllocateRxDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + dma_addr_t *PhysicalAddress); + +-void RTMP_FreeDescMemory(IN PRTMP_ADAPTER pAd, ++void RTMP_FreeDescMemory(struct rt_rtmp_adapter *pAd, + unsigned long Length, + void *VirtualAddress, + dma_addr_t PhysicalAddress); + +-void *RtmpOSNetPktAlloc(IN RTMP_ADAPTER * pAd, IN int size); ++void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size); + +-void *RTMP_AllocateRxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateRxPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress, + OUT dma_addr_t * + PhysicalAddress); + +-void *RTMP_AllocateTxPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateTxPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length, + IN BOOLEAN Cached, + void ** VirtualAddress); + +-void *RTMP_AllocateFragPacketBuffer(IN PRTMP_ADAPTER pAd, ++void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd, + unsigned long Length); + + void RTMP_QueryPacketInfo(void *pPacket, +- OUT PACKET_INFO * pPacketInfo, ++ struct rt_packet_info *pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen); + + void RTMP_QueryNextPacketInfo(void ** ppPacket, +- OUT PACKET_INFO * pPacketInfo, ++ struct rt_packet_info *pPacketInfo, + u8 ** pSrcBufVA, u32 * pSrcBufLen); + +-BOOLEAN RTMP_FillTxBlkInfo(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk); ++BOOLEAN RTMP_FillTxBlkInfo(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk); + +-PRTMP_SCATTER_GATHER_LIST +-rt_get_sg_list_from_packet(void *pPacket, RTMP_SCATTER_GATHER_LIST * sg); ++struct rt_rtmp_sg_list * ++rt_get_sg_list_from_packet(void *pPacket, struct rt_rtmp_sg_list *sg); + +-void announce_802_3_packet(IN PRTMP_ADAPTER pAd, void *pPacket); ++void announce_802_3_packet(struct rt_rtmp_adapter *pAd, void *pPacket); + +-u32 BA_Reorder_AMSDU_Annnounce(IN PRTMP_ADAPTER pAd, void *pPacket); ++u32 BA_Reorder_AMSDU_Annnounce(struct rt_rtmp_adapter *pAd, void *pPacket); + +-struct net_device *get_netdev_from_bssid(IN PRTMP_ADAPTER pAd, u8 FromWhichBSSID); ++struct net_device *get_netdev_from_bssid(struct rt_rtmp_adapter *pAd, u8 FromWhichBSSID); + +-void *duplicate_pkt(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt(struct rt_rtmp_adapter *pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, + unsigned long DataSize, u8 FromWhichBSSID); + +-void *duplicate_pkt_with_TKIP_MIC(IN PRTMP_ADAPTER pAd, ++void *duplicate_pkt_with_TKIP_MIC(struct rt_rtmp_adapter *pAd, + void *pOldPkt); + +-void ba_flush_reordering_timeout_mpdus(IN PRTMP_ADAPTER pAd, +- IN PBA_REC_ENTRY pBAEntry, ++void ba_flush_reordering_timeout_mpdus(struct rt_rtmp_adapter *pAd, ++ struct rt_ba_rec_entry *pBAEntry, + unsigned long Now32); + +-void BAOriSessionSetUp(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, ++void BAOriSessionSetUp(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 TID, + u16 TimeOut, + unsigned long DelayTime, IN BOOLEAN isForced); + +-void BASessionTearDownALL(IN OUT PRTMP_ADAPTER pAd, u8 Wcid); ++void BASessionTearDownALL(struct rt_rtmp_adapter *pAd, u8 Wcid); + + BOOLEAN OS_Need_Clone_Packet(void); + +-void build_tx_packet(IN PRTMP_ADAPTER pAd, ++void build_tx_packet(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pFrame, unsigned long FrameLen); + +-void BAOriSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++void BAOriSessionTearDown(struct rt_rtmp_adapter *pAd, + u8 Wcid, + u8 TID, + IN BOOLEAN bPassive, IN BOOLEAN bForceSend); + +-void BARecSessionTearDown(IN OUT PRTMP_ADAPTER pAd, ++void BARecSessionTearDown(struct rt_rtmp_adapter *pAd, + u8 Wcid, u8 TID, IN BOOLEAN bPassive); + +-BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); +-void ba_reordering_resource_release(PRTMP_ADAPTER pAd); ++BOOLEAN ba_reordering_resource_init(struct rt_rtmp_adapter *pAd, int num); ++void ba_reordering_resource_release(struct rt_rtmp_adapter *pAd); + + char *rstrtok(char *s, IN const char *ct); + + /*//////// common ioctl functions ////////// */ +-int SetCommonHT(IN PRTMP_ADAPTER pAd); ++int SetCommonHT(struct rt_rtmp_adapter *pAd); + +-int WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++int WpaCheckEapCode(struct rt_rtmp_adapter *pAd, + u8 *pFrame, u16 FrameLen, u16 OffSet); + +-void WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, ++void WpaSendMicFailureToWpaSupplicant(struct rt_rtmp_adapter *pAd, + IN BOOLEAN bUnicast); + +-int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd); ++int wext_notify_event_assoc(struct rt_rtmp_adapter *pAd); + +-BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc); ++BOOLEAN STARxDoneInterruptHandle(struct rt_rtmp_adapter *pAd, IN BOOLEAN argc); + + /* AMPDU packet indication */ +-void Indicate_AMPDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void Indicate_AMPDU_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + + /* AMSDU packet indication */ +-void Indicate_AMSDU_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void Indicate_AMSDU_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + + /* Normal legacy Rx packet indication */ +-void Indicate_Legacy_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void Indicate_Legacy_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-void Indicate_EAPOL_Packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void Indicate_EAPOL_Packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-void update_os_packet_info(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void update_os_packet_info(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, ++void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, + u8 *pHeader802_3, + u8 FromWhichBSSID); + +@@ -3719,7 +3719,7 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \ + { \ + _pDA = _pRxBlk->pHeader->Addr3; \ +- _pSA = (u8 *)_pRxBlk->pHeader + sizeof(HEADER_802_11); \ ++ _pSA = (u8 *)_pRxBlk->pHeader + sizeof(struct rt_header_802_11); \ + } \ + else \ + { \ +@@ -3742,7 +3742,7 @@ void wlan_802_11_to_802_3_packet(IN PRTMP_ADAPTER pAd, + _pRxBlk->DataSize, _pRemovedLLCSNAP); \ + } + +-void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++void Sta_Announce_or_Forward_802_3_Packet(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 FromWhichBSSID); + +@@ -3750,30 +3750,30 @@ void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, + Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); + /*announce_802_3_packet(_pAd, _pPacket); */ + +-void *DuplicatePacket(IN PRTMP_ADAPTER pAd, ++void *DuplicatePacket(struct rt_rtmp_adapter *pAd, + void *pPacket, u8 FromWhichBSSID); + +-void *ClonePacket(IN PRTMP_ADAPTER pAd, ++void *ClonePacket(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pData, unsigned long DataSize); + + /* Normal, AMPDU or AMSDU */ +-void CmmRxnonRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void CmmRxnonRalinkFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-void CmmRxRalinkFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID); ++void CmmRxRalinkFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID); + +-void Update_Rssi_Sample(IN PRTMP_ADAPTER pAd, +- IN RSSI_SAMPLE * pRssi, IN PRXWI_STRUC pRxWI); ++void Update_Rssi_Sample(struct rt_rtmp_adapter *pAd, ++ struct rt_rssi_sample *pRssi, struct rt_rxwi * pRxWI); + +-void *GetPacketFromRxRing(IN PRTMP_ADAPTER pAd, ++void *GetPacketFromRxRing(struct rt_rtmp_adapter *pAd, + OUT PRT28XX_RXD_STRUC pSaveRxD, + OUT BOOLEAN * pbReschedule, + IN u32 * pRxPending); + +-void *RTMPDeFragmentDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); ++void *RTMPDeFragmentDataFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk); + + enum { + DIDmsg_lnxind_wlansniffrm = 0x00000044, +@@ -3797,32 +3797,32 @@ enum { + }; + + /* Definition from madwifi */ +-typedef struct { ++struct rt_p80211item_uint32 { + u32 did; + u16 status; + u16 len; + u32 data; +-} p80211item_uint32_t; ++}; + +-typedef struct { ++struct rt_wlan_ng_prism2_header { + u32 msgcode; + u32 msglen; + #define WLAN_DEVNAMELEN_MAX 16 + u8 devname[WLAN_DEVNAMELEN_MAX]; +- p80211item_uint32_t hosttime; +- p80211item_uint32_t mactime; +- p80211item_uint32_t channel; +- p80211item_uint32_t rssi; +- p80211item_uint32_t sq; +- p80211item_uint32_t signal; +- p80211item_uint32_t noise; +- p80211item_uint32_t rate; +- p80211item_uint32_t istx; +- p80211item_uint32_t frmlen; +-} wlan_ng_prism2_header; ++ struct rt_p80211item_uint32 hosttime; ++ struct rt_p80211item_uint32 mactime; ++ struct rt_p80211item_uint32 channel; ++ struct rt_p80211item_uint32 rssi; ++ struct rt_p80211item_uint32 sq; ++ struct rt_p80211item_uint32 signal; ++ struct rt_p80211item_uint32 noise; ++ struct rt_p80211item_uint32 rate; ++ struct rt_p80211item_uint32 istx; ++ struct rt_p80211item_uint32 frmlen; ++}; + + /* The radio capture header precedes the 802.11 header. */ +-typedef struct PACKED _ieee80211_radiotap_header { ++struct PACKED rt_ieee80211_radiotap_header { + u8 it_version; /* Version 0. Only increases + * for drastic changes, + * introduction of compatible +@@ -3841,7 +3841,7 @@ typedef struct PACKED _ieee80211_radiotap_header { + * Additional extensions are made + * by setting bit 31. + */ +-} ieee80211_radiotap_header; ++}; + + enum ieee80211_radiotap_type { + IEEE80211_RADIOTAP_TSFT = 0, +@@ -3866,111 +3866,111 @@ enum ieee80211_radiotap_type { + (1 << IEEE80211_RADIOTAP_RATE) | \ + 0) + +-typedef struct _wlan_radiotap_header { +- ieee80211_radiotap_header wt_ihdr; ++struct rt_wlan_radiotap_header { ++ struct rt_ieee80211_radiotap_header wt_ihdr; + long long wt_tsft; + u8 wt_flags; + u8 wt_rate; +-} wlan_radiotap_header; ++}; + /* Definition from madwifi */ + +-void send_monitor_packets(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk); ++void send_monitor_packets(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk); + +-void RTMPSetDesiredRates(IN PRTMP_ADAPTER pAdapter, long Rates); ++void RTMPSetDesiredRates(struct rt_rtmp_adapter *pAdapter, long Rates); + +-int Set_FixedTxMode_Proc(IN PRTMP_ADAPTER pAd, char *arg); ++int Set_FixedTxMode_Proc(struct rt_rtmp_adapter *pAd, char *arg); + + BOOLEAN RT28XXChipsetCheck(IN void *_dev_p); + +-void RT28XXDMADisable(IN RTMP_ADAPTER * pAd); ++void RT28XXDMADisable(struct rt_rtmp_adapter *pAd); + +-void RT28XXDMAEnable(IN RTMP_ADAPTER * pAd); ++void RT28XXDMAEnable(struct rt_rtmp_adapter *pAd); + +-void RT28xx_UpdateBeaconToAsic(IN RTMP_ADAPTER * pAd, ++void RT28xx_UpdateBeaconToAsic(struct rt_rtmp_adapter *pAd, + int apidx, + unsigned long BeaconLen, unsigned long UpdatePos); + +-int rt28xx_init(IN PRTMP_ADAPTER pAd, ++int rt28xx_init(struct rt_rtmp_adapter *pAd, + char *pDefaultMac, char *pHostName); + +-int RtmpNetTaskInit(IN RTMP_ADAPTER * pAd); ++int RtmpNetTaskInit(struct rt_rtmp_adapter *pAd); + +-void RtmpNetTaskExit(IN PRTMP_ADAPTER pAd); ++void RtmpNetTaskExit(struct rt_rtmp_adapter *pAd); + +-int RtmpMgmtTaskInit(IN RTMP_ADAPTER * pAd); ++int RtmpMgmtTaskInit(struct rt_rtmp_adapter *pAd); + +-void RtmpMgmtTaskExit(IN RTMP_ADAPTER * pAd); ++void RtmpMgmtTaskExit(struct rt_rtmp_adapter *pAd); + + void tbtt_tasklet(unsigned long data); + +-struct net_device *RtmpPhyNetDevInit(IN RTMP_ADAPTER * pAd, +- IN RTMP_OS_NETDEV_OP_HOOK * pNetHook); ++struct net_device *RtmpPhyNetDevInit(struct rt_rtmp_adapter *pAd, ++ struct rt_rtmp_os_netdev_op_hook *pNetHook); + +-BOOLEAN RtmpPhyNetDevExit(IN RTMP_ADAPTER * pAd, struct net_device *net_dev); ++BOOLEAN RtmpPhyNetDevExit(struct rt_rtmp_adapter *pAd, struct net_device *net_dev); + +-int RtmpRaDevCtrlInit(IN RTMP_ADAPTER * pAd, IN RTMP_INF_TYPE infType); ++int RtmpRaDevCtrlInit(struct rt_rtmp_adapter *pAd, IN RTMP_INF_TYPE infType); + +-BOOLEAN RtmpRaDevCtrlExit(IN RTMP_ADAPTER * pAd); ++BOOLEAN RtmpRaDevCtrlExit(struct rt_rtmp_adapter *pAd); + + #ifdef RTMP_MAC_PCI + /* */ + /* Function Prototype in cmm_data_pci.c */ + /* */ +-u16 RtmpPCI_WriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, u16 * FreeNumber); + +-u16 RtmpPCI_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, + u16 * FreeNumber); + +-u16 RtmpPCI_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 frameNum, u16 * FreeNumber); + +-u16 RtmpPCI_WriteFragTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteFragTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 fragNum, u16 * FreeNumber); + +-u16 RtmpPCI_WriteSubTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpPCI_WriteSubTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, u16 * FreeNumber); + +-void RtmpPCI_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++void RtmpPCI_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u16 totalMPDUSize, + u16 FirstTxIdx); + +-void RtmpPCIDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++void RtmpPCIDataLastTxIdx(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u16 LastTxIdx); + +-void RtmpPCIDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, u8 QueIdx); ++void RtmpPCIDataKickOut(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 QueIdx); + +-int RtmpPCIMgmtKickOut(IN RTMP_ADAPTER * pAd, ++int RtmpPCIMgmtKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen); + +-int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, IN PRT28XX_RXD_STRUC pRxD); ++int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHeader, ++ struct rt_rxwi * pRxWI, IN PRT28XX_RXD_STRUC pRxD); + +-BOOLEAN RT28xxPciAsicRadioOff(IN PRTMP_ADAPTER pAd, ++BOOLEAN RT28xxPciAsicRadioOff(struct rt_rtmp_adapter *pAd, + u8 Level, u16 TbttNumToNextWakeUp); + +-BOOLEAN RT28xxPciAsicRadioOn(IN PRTMP_ADAPTER pAd, u8 Level); ++BOOLEAN RT28xxPciAsicRadioOn(struct rt_rtmp_adapter *pAd, u8 Level); + +-void RTMPInitPCIeLinkCtrlValue(IN PRTMP_ADAPTER pAd); ++void RTMPInitPCIeLinkCtrlValue(struct rt_rtmp_adapter *pAd); + +-void RTMPFindHostPCIDev(IN PRTMP_ADAPTER pAd); ++void RTMPFindHostPCIDev(struct rt_rtmp_adapter *pAd); + +-void RTMPPCIeLinkCtrlValueRestore(IN PRTMP_ADAPTER pAd, u8 Level); ++void RTMPPCIeLinkCtrlValueRestore(struct rt_rtmp_adapter *pAd, u8 Level); + +-void RTMPPCIeLinkCtrlSetting(IN PRTMP_ADAPTER pAd, u16 Max); ++void RTMPPCIeLinkCtrlSetting(struct rt_rtmp_adapter *pAd, u16 Max); + +-void RTMPrt3xSetPCIePowerLinkCtrl(IN PRTMP_ADAPTER pAd); ++void RTMPrt3xSetPCIePowerLinkCtrl(struct rt_rtmp_adapter *pAd); + + void PsPollWakeExec(void *SystemSpecific1, + void *FunctionContext, +@@ -3980,83 +3980,83 @@ void RadioOnExec(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3); + +-void RT28xxPciStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void RT28xxPciStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx); + +-void RT28xxPciStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void RT28xxPciStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp); + +-void RT28xxPciMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void RT28xxPciMlmeRadioOn(struct rt_rtmp_adapter *pAd); + +-void RT28xxPciMlmeRadioOFF(IN PRTMP_ADAPTER pAd); ++void RT28xxPciMlmeRadioOFF(struct rt_rtmp_adapter *pAd); + #endif /* RTMP_MAC_PCI // */ + + #ifdef RTMP_MAC_USB + /* */ + /* Function Prototype in rtusb_bulk.c */ + /* */ +-void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, +- IN PTX_CONTEXT pTxContext, ++void RTUSBInitTxDesc(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_context *pTxContext, + u8 BulkOutPipeId, IN usb_complete_t Func); + +-void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, +- IN PHT_TX_CONTEXT pTxContext, ++void RTUSBInitHTTxDesc(struct rt_rtmp_adapter *pAd, ++ struct rt_ht_tx_context *pTxContext, + u8 BulkOutPipeId, + unsigned long BulkOutSize, IN usb_complete_t Func); + +-void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); ++void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext); + +-void RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd); ++void RTUSBCleanUpDataBulkOutQueue(struct rt_rtmp_adapter *pAd); + +-void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingBulkOutIRP(struct rt_rtmp_adapter *pAd); + +-void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, + u8 BulkOutPipeId, u8 Index); + +-void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutNullFrame(struct rt_rtmp_adapter *pAd); + +-void RTUSBBulkOutRTSFrame(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutRTSFrame(struct rt_rtmp_adapter *pAd); + +-void RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingBulkInIRP(struct rt_rtmp_adapter *pAd); + +-void RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd); ++void RTUSBCancelPendingIRPs(struct rt_rtmp_adapter *pAd); + +-void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index); ++void RTUSBBulkOutMLMEPacket(struct rt_rtmp_adapter *pAd, u8 Index); + +-void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkOutPsPoll(struct rt_rtmp_adapter *pAd); + +-void RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd); ++void RTUSBCleanUpMLMEBulkOutQueue(struct rt_rtmp_adapter *pAd); + +-void RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd); ++void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd); + +-void RTUSBBulkReceive(IN PRTMP_ADAPTER pAd); ++void RTUSBBulkReceive(struct rt_rtmp_adapter *pAd); + +-void DoBulkIn(IN RTMP_ADAPTER * pAd); ++void DoBulkIn(struct rt_rtmp_adapter *pAd); + +-void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); ++void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext); + + void RTUSBBulkRxHandle(IN unsigned long data); + + /* */ + /* Function Prototype in rtusb_io.c */ + /* */ +-int RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiRead(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length); + +-int RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length); + +-int RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData); + +-int RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd, + u8 Id, u8 *pValue); + +-int RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteBBPRegister(struct rt_rtmp_adapter *pAd, + u8 Id, u8 Value); + +-int RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, u32 Value); ++int RTUSBWriteRFRegister(struct rt_rtmp_adapter *pAd, u32 Value); + +-int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++int RTUSB_VendorRequest(struct rt_rtmp_adapter *pAd, + u32 TransferFlags, + u8 ReservedBits, + u8 Request, +@@ -4065,104 +4065,104 @@ int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, + void *TransferBuffer, + u32 TransferBufferLength); + +-int RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++int RTUSBReadEEPROM(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length); + +-int RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteEEPROM(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length); + +-void RTUSBPutToSleep(IN PRTMP_ADAPTER pAd); ++void RTUSBPutToSleep(struct rt_rtmp_adapter *pAd); + +-int RTUSBWakeUp(IN PRTMP_ADAPTER pAd); ++int RTUSBWakeUp(struct rt_rtmp_adapter *pAd); + +-void RTUSBInitializeCmdQ(IN PCmdQ cmdq); ++void RTUSBInitializeCmdQ(struct rt_cmdq *cmdq); + +-int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd, + IN NDIS_OID Oid, + IN BOOLEAN SetInformation, + void *pInformationBuffer, + u32 InformationBufferLength); + +-int RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd, + IN NDIS_OID Oid, + void *pInformationBuffer, + u32 InformationBufferLength); + +-void RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt); ++void RTUSBDequeueCmd(struct rt_cmdq *cmdq, struct rt_cmdqelmt * * pcmdqelmt); + + int RTUSBCmdThread(IN void *Context); + +-void RTUSBBssBeaconExit(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconExit(struct rt_rtmp_adapter *pAd); + +-void RTUSBBssBeaconStop(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconStop(struct rt_rtmp_adapter *pAd); + +-void RTUSBBssBeaconStart(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconStart(struct rt_rtmp_adapter *pAd); + +-void RTUSBBssBeaconInit(IN RTMP_ADAPTER * pAd); ++void RTUSBBssBeaconInit(struct rt_rtmp_adapter *pAd); + +-void RTUSBWatchDog(IN RTMP_ADAPTER * pAd); ++void RTUSBWatchDog(struct rt_rtmp_adapter *pAd); + +-int RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteMACRegister(struct rt_rtmp_adapter *pAd, + u16 Offset, u32 Value); + +-int RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBReadMACRegister(struct rt_rtmp_adapter *pAd, + u16 Offset, u32 *pValue); + +-int RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 Value); + +-int RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd, + u8 *pFwImage, unsigned long FwLen); + +-int RTUSBVenderReset(IN PRTMP_ADAPTER pAd); ++int RTUSBVenderReset(struct rt_rtmp_adapter *pAd); + +-int RTUSBSetHardWareRegister(IN PRTMP_ADAPTER pAdapter, void *pBuf); ++int RTUSBSetHardWareRegister(struct rt_rtmp_adapter *pAdapter, void *pBuf); + +-int RTUSBQueryHardWareRegister(IN PRTMP_ADAPTER pAdapter, ++int RTUSBQueryHardWareRegister(struct rt_rtmp_adapter *pAdapter, + void *pBuf); + +-void CMDHandler(IN PRTMP_ADAPTER pAd); ++void CMDHandler(struct rt_rtmp_adapter *pAd); + +-int RTUSBWriteHWMACAddress(IN PRTMP_ADAPTER pAdapter); ++int RTUSBWriteHWMACAddress(struct rt_rtmp_adapter *pAdapter); + +-void MacTableInitialize(IN PRTMP_ADAPTER pAd); ++void MacTableInitialize(struct rt_rtmp_adapter *pAd); + +-void MlmeSetPsm(IN PRTMP_ADAPTER pAd, u16 psm); ++void MlmeSetPsm(struct rt_rtmp_adapter *pAd, u16 psm); + +-int RTMPWPAAddKeyProc(IN PRTMP_ADAPTER pAd, void *pBuf); ++int RTMPWPAAddKeyProc(struct rt_rtmp_adapter *pAd, void *pBuf); + +-void AsicRxAntEvalAction(IN PRTMP_ADAPTER pAd); ++void AsicRxAntEvalAction(struct rt_rtmp_adapter *pAd); + +-void append_pkt(IN PRTMP_ADAPTER pAd, ++void append_pkt(struct rt_rtmp_adapter *pAd, + u8 *pHeader802_3, + u32 HdrLen, + u8 *pData, + unsigned long DataSize, void ** ppPacket); + +-u32 deaggregate_AMSDU_announce(IN PRTMP_ADAPTER pAd, ++u32 deaggregate_AMSDU_announce(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 *pData, unsigned long DataSize); + +-int RTMPCheckRxError(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, ++int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHeader, ++ struct rt_rxwi * pRxWI, + IN PRT28XX_RXD_STRUC pRxINFO); + +-void RTUSBMlmeHardTransmit(IN PRTMP_ADAPTER pAd, IN PMGMT_STRUC pMgmt); ++void RTUSBMlmeHardTransmit(struct rt_rtmp_adapter *pAd, struct rt_mgmt *pMgmt); + + int MlmeThread(void *Context); + + /* */ + /* Function Prototype in rtusb_data.c */ + /* */ +-int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++int RTUSBFreeDescriptorRequest(struct rt_rtmp_adapter *pAd, + u8 BulkOutPipeId, + u32 NumberRequired); + +-BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, u8 BulkOutPipeId); ++BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId); + +-void RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, +- IN PTXINFO_STRUC pTxInfo, ++void RTMPWriteTxInfo(struct rt_rtmp_adapter *pAd, ++ struct rt_txinfo *pTxInfo, + u16 USBDMApktLen, + IN BOOLEAN bWiv, + u8 QueueSel, u8 NextValid, u8 TxBurst); +@@ -4170,39 +4170,39 @@ void RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, + /* */ + /* Function Prototype in cmm_data_usb.c */ + /* */ +-u16 RtmpUSB_WriteSubTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteSubTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, u16 * FreeNumber); + +-u16 RtmpUSB_WriteSingleTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + IN BOOLEAN bIsLast, + u16 * FreeNumber); + +-u16 RtmpUSB_WriteFragTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteFragTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 fragNum, u16 * FreeNumber); + +-u16 RtmpUSB_WriteMultiTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++u16 RtmpUSB_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u8 frameNum, u16 * FreeNumber); + +-void RtmpUSB_FinalWriteTxResource(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, ++void RtmpUSB_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, + u16 totalMPDUSize, u16 TxIdx); + +-void RtmpUSBDataLastTxIdx(IN PRTMP_ADAPTER pAd, ++void RtmpUSBDataLastTxIdx(struct rt_rtmp_adapter *pAd, + u8 QueIdx, u16 TxIdx); + +-void RtmpUSBDataKickOut(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, u8 QueIdx); ++void RtmpUSBDataKickOut(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 QueIdx); + +-int RtmpUSBMgmtKickOut(IN RTMP_ADAPTER * pAd, ++int RtmpUSBMgmtKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + void *pPacket, + u8 *pSrcBufVA, u32 SrcBufLen); + +-void RtmpUSBNullFrameKickOut(IN RTMP_ADAPTER * pAd, ++void RtmpUSBNullFrameKickOut(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + u8 * pNullFrame, u32 frameLen); + +@@ -4211,56 +4211,56 @@ void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, + void *SystemSpecific2, + void *SystemSpecific3); + +-void RT28xxUsbStaAsicForceWakeup(IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); ++void RT28xxUsbStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx); + +-void RT28xxUsbStaAsicSleepThenAutoWakeup(IN PRTMP_ADAPTER pAd, ++void RT28xxUsbStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd, + u16 TbttNumToNextWakeUp); + +-void RT28xxUsbMlmeRadioOn(IN PRTMP_ADAPTER pAd); ++void RT28xxUsbMlmeRadioOn(struct rt_rtmp_adapter *pAd); + +-void RT28xxUsbMlmeRadioOFF(IN PRTMP_ADAPTER pAd); ++void RT28xxUsbMlmeRadioOFF(struct rt_rtmp_adapter *pAd); + #endif /* RTMP_MAC_USB // */ + +-void AsicTurnOffRFClk(IN PRTMP_ADAPTER pAd, u8 Channel); ++void AsicTurnOffRFClk(struct rt_rtmp_adapter *pAd, u8 Channel); + +-void AsicTurnOnRFClk(IN PRTMP_ADAPTER pAd, u8 Channel); ++void AsicTurnOnRFClk(struct rt_rtmp_adapter *pAd, u8 Channel); + + #ifdef RTMP_TIMER_TASK_SUPPORT + int RtmpTimerQThread(IN void *Context); + +-RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(IN RTMP_ADAPTER * pAd, +- IN RALINK_TIMER_STRUCT * pTimer); ++struct rt_rtmp_timer_task_entry *RtmpTimerQInsert(struct rt_rtmp_adapter *pAd, ++ struct rt_ralink_timer *pTimer); + +-BOOLEAN RtmpTimerQRemove(IN RTMP_ADAPTER * pAd, +- IN RALINK_TIMER_STRUCT * pTimer); ++BOOLEAN RtmpTimerQRemove(struct rt_rtmp_adapter *pAd, ++ struct rt_ralink_timer *pTimer); + +-void RtmpTimerQExit(IN RTMP_ADAPTER * pAd); ++void RtmpTimerQExit(struct rt_rtmp_adapter *pAd); + +-void RtmpTimerQInit(IN RTMP_ADAPTER * pAd); ++void RtmpTimerQInit(struct rt_rtmp_adapter *pAd); + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + +-void AsicStaBbpTuning(IN PRTMP_ADAPTER pAd); ++void AsicStaBbpTuning(struct rt_rtmp_adapter *pAd); + +-BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++BOOLEAN StaAddMacTableEntry(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE * pHtCapability, ++ struct rt_ht_capability_ie * pHtCapability, + u8 HtCapabilityLen, +- IN ADD_HT_INFO_IE * pAddHtInfo, ++ struct rt_add_ht_info_ie * pAddHtInfo, + u8 AddHtInfoLen, u16 CapabilityInfo); + +-BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, ++BOOLEAN AUTH_ReqSend(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *pElem, ++ struct rt_ralink_timer *pAuthTimer, + char *pSMName, + u16 SeqNo, + u8 *pNewElement, unsigned long ElementLen); + +-void RTMP_IndicateMediaState(IN PRTMP_ADAPTER pAd); ++void RTMP_IndicateMediaState(struct rt_rtmp_adapter *pAd); + +-void ReSyncBeaconTime(IN PRTMP_ADAPTER pAd); ++void ReSyncBeaconTime(struct rt_rtmp_adapter *pAd); + +-void RTMPSetAGCInitValue(IN PRTMP_ADAPTER pAd, u8 BandWidth); ++void RTMPSetAGCInitValue(struct rt_rtmp_adapter *pAd, u8 BandWidth); + + int rt28xx_close(struct net_device *dev); + int rt28xx_open(struct net_device *dev); +@@ -4270,7 +4270,7 @@ int rt28xx_open(struct net_device *dev); + #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) + + #ifdef LINUX +-__inline int VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) ++__inline int VIRTUAL_IF_UP(struct rt_rtmp_adapter *pAd) + { + if (VIRTUAL_IF_NUM(pAd) == 0) { + if (rt28xx_open(pAd->net_dev) != 0) { +@@ -4284,7 +4284,7 @@ __inline int VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) + return 0; + } + +-__inline void VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) ++__inline void VIRTUAL_IF_DOWN(struct rt_rtmp_adapter *pAd) + { + VIRTUAL_IF_DEC(pAd); + if (VIRTUAL_IF_NUM(pAd) == 0) +@@ -4297,7 +4297,7 @@ __inline void VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd) + OS Related funciton prototype definitions. + TODO: Maybe we need to move these function prototypes to other proper place. + */ +-int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, ++int RtmpOSWrielessEventSend(struct rt_rtmp_adapter *pAd, + u32 eventType, + int flags, + u8 *pSrcMac, +@@ -4306,7 +4306,7 @@ int RtmpOSWrielessEventSend(IN RTMP_ADAPTER * pAd, + int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr); + + int RtmpOSNetDevAttach(struct net_device *pNetDev, +- IN RTMP_OS_NETDEV_OP_HOOK * pDevOpHook); ++ struct rt_rtmp_os_netdev_op_hook *pDevOpHook); + + void RtmpOSNetDevClose(struct net_device *pNetDev); + +@@ -4320,7 +4320,7 @@ struct net_device *RtmpOSNetDevGetByName(struct net_device *pNetDev, char *pDevN + + void RtmpOSNetDeviceRefPut(struct net_device *pNetDev); + +-struct net_device *RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, ++struct net_device *RtmpOSNetDevCreate(struct rt_rtmp_adapter *pAd, + int devType, + int devNum, + int privMemSize, char *pNamePrefix); +@@ -4328,16 +4328,16 @@ struct net_device *RtmpOSNetDevCreate(IN RTMP_ADAPTER * pAd, + /* + Task operation related function prototypes + */ +-void RtmpOSTaskCustomize(IN RTMP_OS_TASK * pTask); ++void RtmpOSTaskCustomize(struct rt_rtmp_os_task *pTask); + +-int RtmpOSTaskNotifyToExit(IN RTMP_OS_TASK * pTask); ++int RtmpOSTaskNotifyToExit(struct rt_rtmp_os_task *pTask); + +-int RtmpOSTaskKill(IN RTMP_OS_TASK * pTask); ++int RtmpOSTaskKill(struct rt_rtmp_os_task *pTask); + +-int RtmpOSTaskInit(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskInit(struct rt_rtmp_os_task *pTask, + char *pTaskName, void * pPriv); + +-int RtmpOSTaskAttach(IN RTMP_OS_TASK * pTask, ++int RtmpOSTaskAttach(struct rt_rtmp_os_task *pTask, + IN int (*fn) (void *), IN void *arg); + + /* +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index a089472..32ff350 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -161,7 +161,7 @@ + * EEPROM operation related marcos + */ + #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \ +- (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (u16)(_offset), (u16 *)&(_value)) ++ (_pAd)->chipOps.eeread((struct rt_rtmp_adapter *)(_pAd), (u16)(_offset), (u16 *)&(_value)) + + /* ------------------------------------------------------------------- */ + /* E2PROM data layout */ +diff --git a/drivers/staging/rt2860/rtmp_ckipmic.h b/drivers/staging/rt2860/rtmp_ckipmic.h +index 301ba5f..6ff935d 100644 +--- a/drivers/staging/rt2860/rtmp_ckipmic.h ++++ b/drivers/staging/rt2860/rtmp_ckipmic.h +@@ -37,14 +37,14 @@ + #ifndef __RTMP_CKIPMIC_H__ + #define __RTMP_CKIPMIC_H__ + +-typedef struct _MIC_CONTEXT { ++struct rt_mic_context { + /* --- MMH context */ + u8 CK[16]; /* the key */ + u8 coefficient[16]; /* current aes counter mode coefficients */ + unsigned long long accum; /* accumulated mic, reduced to u32 in final() */ + u32 position; /* current position (byte offset) in message */ + u8 part[4]; /* for conversion of message to u32 for mmh */ +-} MIC_CONTEXT, *PMIC_CONTEXT; ++}; + + void xor_128(u8 *a, u8 *b, u8 *out); + +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index 92f6114..c79eceb 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -144,7 +144,7 @@ + #define APNORMAL 0x15f97 + #define PSPXLINK 0x17f93 + /* */ +-/* RTMP_ADAPTER flags */ ++/* struct rt_rtmp_adapter flags */ + /* */ + #define fRTMP_ADAPTER_MAP_REGISTER 0x00000001 + #define fRTMP_ADAPTER_INTERRUPT_IN_USE 0x00000002 +@@ -197,7 +197,7 @@ + #define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE fOP_STATUS_PCIE_DEVICE + + /* */ +-/* RTMP_ADAPTER PSFlags : related to advanced power save. */ ++/* struct rt_rtmp_adapter PSFlags : related to advanced power save. */ + /* */ + /* Indicate whether driver can go to sleep mode from now. This flag is useful AFTER link up */ + #define fRTMP_PS_CAN_GO_SLEEP 0x00000001 +diff --git a/drivers/staging/rt2860/rtmp_dot11.h b/drivers/staging/rt2860/rtmp_dot11.h +index e970343..4f8abd7 100644 +--- a/drivers/staging/rt2860/rtmp_dot11.h ++++ b/drivers/staging/rt2860/rtmp_dot11.h +@@ -31,7 +31,7 @@ + #include "rtmp_type.h" + + /* 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1. */ +-typedef struct PACKED { ++struct PACKED rt_ht_control { + u32 MA:1; /*management action payload exist in (QoS Null+HTC) */ + u32 TRQ:1; /*sounding request */ + u32 MRQ:1; /*MCS feedback. Request for a MCS feedback */ +@@ -46,19 +46,19 @@ typedef struct PACKED { + u32 rsv:5; /*calibration sequence */ + u32 ACConstraint:1; /*feedback request */ + u32 RDG:1; /*RDG / More PPDU */ +-} HT_CONTROL, *PHT_CONTROL; ++}; + + /* 2-byte QOS CONTROL field */ +-typedef struct PACKED { ++struct PACKED rt_qos_control { + u16 TID:4; + u16 EOSP:1; + u16 AckPolicy:2; /*0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA */ + u16 AMsduPresent:1; + u16 Txop_QueueSize:8; +-} QOS_CONTROL, *PQOS_CONTROL; ++}; + + /* 2-byte Frame control field */ +-typedef struct PACKED { ++struct PACKED rt_frame_control { + u16 Ver:2; /* Protocol version */ + u16 Type:2; /* MSDU type */ + u16 SubType:4; /* MSDU subtype */ +@@ -70,10 +70,10 @@ typedef struct PACKED { + u16 MoreData:1; /* More data bit */ + u16 Wep:1; /* Wep data */ + u16 Order:1; /* Strict order expected */ +-} FRAME_CONTROL, *PFRAME_CONTROL; ++}; + +-typedef struct PACKED _HEADER_802_11 { +- FRAME_CONTROL FC; ++struct PACKED rt_header_802_11 { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +@@ -81,20 +81,20 @@ typedef struct PACKED _HEADER_802_11 { + u16 Frag:4; + u16 Sequence:12; + u8 Octet[0]; +-} HEADER_802_11, *PHEADER_802_11; ++}; + +-typedef struct PACKED _PSPOLL_FRAME { +- FRAME_CONTROL FC; ++struct PACKED rt_pspoll_frame { ++ struct rt_frame_control FC; + u16 Aid; + u8 Bssid[MAC_ADDR_LEN]; + u8 Ta[MAC_ADDR_LEN]; +-} PSPOLL_FRAME, *PPSPOLL_FRAME; ++}; + +-typedef struct PACKED _RTS_FRAME { +- FRAME_CONTROL FC; ++struct PACKED rt_rts_frame { ++ struct rt_frame_control FC; + u16 Duration; + u8 Addr1[MAC_ADDR_LEN]; + u8 Addr2[MAC_ADDR_LEN]; +-} RTS_FRAME, *PRTS_FRAME; ++}; + + #endif /* __DOT11_BASE_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_iface.h b/drivers/staging/rt2860/rtmp_iface.h +index cafb618..808c055 100644 +--- a/drivers/staging/rt2860/rtmp_iface.h ++++ b/drivers/staging/rt2860/rtmp_iface.h +@@ -44,20 +44,20 @@ + #include "iface/rtmp_usb.h" + #endif /* RTMP_USB_SUPPORT // */ + +-typedef struct _INF_PCI_CONFIG_ { ++struct rt_inf_pci_config { + unsigned long CSRBaseAddress; /* PCI MMIO Base Address, all access will use */ + unsigned int irq_num; +-} INF_PCI_CONFIG; ++}; + +-typedef struct _INF_USB_CONFIG_ { ++struct rt_inf_usb_config { + u8 BulkInEpAddr; /* bulk-in endpoint address */ + u8 BulkOutEpAddr[6]; /* bulk-out endpoint address */ +-} INF_USB_CONFIG; ++}; + +-typedef struct _INF_RBUS_CONFIG_ { ++struct rt_inf_rbus_config { + unsigned long csr_addr; + unsigned int irq; +-} INF_RBUS_CONFIG; ++}; + + typedef enum _RTMP_INF_TYPE_ { + RTMP_DEV_INF_UNKNOWN = 0, +@@ -67,9 +67,9 @@ typedef enum _RTMP_INF_TYPE_ { + } RTMP_INF_TYPE; + + typedef union _RTMP_INF_CONFIG_ { +- struct _INF_PCI_CONFIG_ pciConfig; +- struct _INF_USB_CONFIG_ usbConfig; +- struct _INF_RBUS_CONFIG_ rbusConfig; ++ struct rt_inf_pci_config pciConfig; ++ struct rt_inf_usb_config usbConfig; ++ struct rt_inf_rbus_config rbusConfig; + } RTMP_INF_CONFIG; + + #endif /* __RTMP_IFACE_H__ // */ +diff --git a/drivers/staging/rt2860/rtmp_mcu.h b/drivers/staging/rt2860/rtmp_mcu.h +index 378f01e..d0987e5 100644 +--- a/drivers/staging/rt2860/rtmp_mcu.h ++++ b/drivers/staging/rt2860/rtmp_mcu.h +@@ -38,11 +38,11 @@ + #ifndef __RTMP_MCU_H__ + #define __RTMP_MCU_H__ + +-int RtmpAsicEraseFirmware(IN PRTMP_ADAPTER pAd); ++int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd); + +-int RtmpAsicLoadFirmware(IN PRTMP_ADAPTER pAd); ++int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd); + +-int RtmpAsicSendCommandToMcu(IN PRTMP_ADAPTER pAd, ++int RtmpAsicSendCommandToMcu(struct rt_rtmp_adapter *pAd, + u8 Command, + u8 Token, u8 Arg0, u8 Arg1); + +diff --git a/drivers/staging/rt2860/rtmp_os.h b/drivers/staging/rt2860/rtmp_os.h +index cff0128..94c30c8 100644 +--- a/drivers/staging/rt2860/rtmp_os.h ++++ b/drivers/staging/rt2860/rtmp_os.h +@@ -48,14 +48,14 @@ + The definition of this data structure may various depends on different + OS. Use it carefully. + */ +-typedef struct _RTMP_OS_NETDEV_OP_HOOK_ { ++struct rt_rtmp_os_netdev_op_hook { + const struct net_device_ops *netdev_ops; + void *priv; + int priv_flags; + unsigned char devAddr[6]; + unsigned char devName[16]; + unsigned char needProtcted; +-} RTMP_OS_NETDEV_OP_HOOK, *PRTMP_OS_NETDEV_OP_HOOK; ++}; + + typedef enum _RTMP_TASK_STATUS_ { + RTMP_TASK_STAT_UNKNOWN = 0, +@@ -66,7 +66,7 @@ typedef enum _RTMP_TASK_STATUS_ { + #define RTMP_TASK_CAN_DO_INSERT (RTMP_TASK_STAT_INITED |RTMP_TASK_STAT_RUNNING) + + #define RTMP_OS_TASK_NAME_LEN 16 +-typedef struct _RTMP_OS_TASK_ { ++struct rt_rtmp_os_task { + char taskName[RTMP_OS_TASK_NAME_LEN]; + void *priv; + /*unsigned long taskFlags; */ +@@ -82,7 +82,7 @@ typedef struct _RTMP_OS_TASK_ { + wait_queue_head_t kthread_q; + BOOLEAN kthread_running; + #endif +-} RTMP_OS_TASK; ++}; + + int RtmpOSIRQRequest(struct net_device *pNetDev); + int RtmpOSIRQRelease(struct net_device *pNetDev); +diff --git a/drivers/staging/rt2860/rtmp_timer.h b/drivers/staging/rt2860/rtmp_timer.h +index c81e507..28b8ac6 100644 +--- a/drivers/staging/rt2860/rtmp_timer.h ++++ b/drivers/staging/rt2860/rtmp_timer.h +@@ -61,7 +61,7 @@ typedef void(*RTMP_TIMER_TASK_HANDLE) (void *SystemSpecific1, + void *SystemSpecific3); + #endif /* RTMP_TIMER_TASK_SUPPORT // */ + +-typedef struct _RALINK_TIMER_STRUCT { ++struct rt_ralink_timer { + struct timer_list TimerObj; /* Ndis Timer object */ + BOOLEAN Valid; /* Set to True when call RTMPInitTimer */ + BOOLEAN State; /* True if timer cancelled */ +@@ -73,32 +73,32 @@ typedef struct _RALINK_TIMER_STRUCT { + RTMP_TIMER_TASK_HANDLE handle; + void *pAd; + #endif /* RTMP_TIMER_TASK_SUPPORT // */ +-} RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; ++}; + + #ifdef RTMP_TIMER_TASK_SUPPORT +-typedef struct _RTMP_TIMER_TASK_ENTRY_ { +- RALINK_TIMER_STRUCT *pRaTimer; +- struct _RTMP_TIMER_TASK_ENTRY_ *pNext; +-} RTMP_TIMER_TASK_ENTRY; ++struct rt_rtmp_timer_task_entry { ++ struct rt_ralink_timer *pRaTimer; ++ struct rt_rtmp_timer_task_entry *pNext; ++}; + + #define TIMER_QUEUE_SIZE_MAX 128 +-typedef struct _RTMP_TIMER_TASK_QUEUE_ { ++struct rt_rtmp_timer_task_queue { + unsigned int status; + unsigned char *pTimerQPoll; +- RTMP_TIMER_TASK_ENTRY *pQPollFreeList; +- RTMP_TIMER_TASK_ENTRY *pQHead; +- RTMP_TIMER_TASK_ENTRY *pQTail; +-} RTMP_TIMER_TASK_QUEUE; ++ struct rt_rtmp_timer_task_entry *pQPollFreeList; ++ struct rt_rtmp_timer_task_entry *pQHead; ++ struct rt_rtmp_timer_task_entry *pQTail; ++}; + + #define BUILD_TIMER_FUNCTION(_func) \ + void rtmp_timer_##_func(unsigned long data) \ + { \ +- PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \ +- RTMP_TIMER_TASK_ENTRY *_pQNode; \ +- RTMP_ADAPTER *_pAd; \ ++ struct rt_ralink_timer *_pTimer = (struct rt_ralink_timer *)data; \ ++ struct rt_rtmp_timer_task_entry *_pQNode; \ ++ struct rt_rtmp_adapter *_pAd; \ + \ + _pTimer->handle = _func; \ +- _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \ ++ _pAd = (struct rt_rtmp_adapter *)_pTimer->pAd; \ + _pQNode = RtmpTimerQInsert(_pAd, _pTimer); \ + if ((_pQNode == NULL) && (_pAd->TimerQ.status & RTMP_TASK_CAN_DO_INSERT)) \ + RTMP_OS_Add_Timer(&_pTimer->TimerObj, OS_HZ); \ +@@ -107,7 +107,7 @@ void rtmp_timer_##_func(unsigned long data) \ + #define BUILD_TIMER_FUNCTION(_func) \ + void rtmp_timer_##_func(unsigned long data) \ + { \ +- PRALINK_TIMER_STRUCT pTimer = (PRALINK_TIMER_STRUCT) data; \ ++ struct rt_ralink_timer *pTimer = (struct rt_ralink_timer *)data; \ + \ + _func(NULL, (void *)pTimer->cookie, NULL, pTimer); \ + if (pTimer->Repeat) \ +diff --git a/drivers/staging/rt2860/rtmp_type.h b/drivers/staging/rt2860/rtmp_type.h +index 8de1428..d9bb2d6 100644 +--- a/drivers/staging/rt2860/rtmp_type.h ++++ b/drivers/staging/rt2860/rtmp_type.h +@@ -55,33 +55,33 @@ typedef union _LARGE_INTEGER { + /* */ + /* Register set pair for initialzation register set definition */ + /* */ +-typedef struct _RTMP_REG_PAIR { ++struct rt_rtmp_reg_pair { + unsigned long Register; + unsigned long Value; +-} RTMP_REG_PAIR, *PRTMP_REG_PAIR; ++}; + +-typedef struct _REG_PAIR { ++struct rt_reg_pair { + u8 Register; + u8 Value; +-} REG_PAIR, *PREG_PAIR; ++}; + + /* */ + /* Register set pair for initialzation register set definition */ + /* */ +-typedef struct _RTMP_RF_REGS { ++struct rt_rtmp_rf_regs { + u8 Channel; + unsigned long R1; + unsigned long R2; + unsigned long R3; + unsigned long R4; +-} RTMP_RF_REGS, *PRTMP_RF_REGS; ++}; + +-typedef struct _FREQUENCY_ITEM { ++struct rt_frequency_item { + u8 Channel; + u8 N; + u8 R; + u8 K; +-} FREQUENCY_ITEM, *PFREQUENCY_ITEM; ++}; + + #define STATUS_SUCCESS 0x00 + #define STATUS_UNSUCCESSFUL 0x01 +diff --git a/drivers/staging/rt2860/rtusb_io.h b/drivers/staging/rt2860/rtusb_io.h +index 547f6ab..64a2fe4 100644 +--- a/drivers/staging/rt2860/rtusb_io.h ++++ b/drivers/staging/rt2860/rtusb_io.h +@@ -78,27 +78,29 @@ + /*CMDTHREAD_MULTI_WRITE_MAC */ + /*CMDTHREAD_VENDOR_EEPROM_READ */ + /*CMDTHREAD_VENDOR_EEPROM_WRITE */ +-typedef struct _CMDHandler_TLV { ++struct rt_cmdhandler_tlv { + u16 Offset; + u16 Length; + u8 DataFirst; +-} CMDHandler_TLV, *PCMDHandler_TLV; ++}; + +-typedef struct _CmdQElmt { ++struct rt_cmdqelmt; ++ ++struct rt_cmdqelmt { + u32 command; + void *buffer; + unsigned long bufferlength; + BOOLEAN CmdFromNdis; + BOOLEAN SetOperation; +- struct _CmdQElmt *next; +-} CmdQElmt, *PCmdQElmt; ++ struct rt_cmdqelmt *next; ++}; + +-typedef struct _CmdQ { ++struct rt_cmdq { + u32 size; +- CmdQElmt *head; +- CmdQElmt *tail; ++ struct rt_cmdqelmt *head; ++ struct rt_cmdqelmt *tail; + u32 CmdQState; +-} CmdQ, *PCmdQ; ++}; + + #define EnqueueCmd(cmdq, cmdqelmt) \ + { \ +@@ -118,17 +120,17 @@ typedef struct _CmdQ { + ******************************************************************************/ + /* reset MAC of a station entry to 0xFFFFFFFFFFFF */ + #define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ +- { RT_SET_ASIC_WCID SetAsicWcid; \ ++ { struct rt_set_asic_wcid SetAsicWcid; \ + SetAsicWcid.WCID = Wcid; \ + SetAsicWcid.SetTid = 0xffffffff; \ + SetAsicWcid.DeleteTid = 0xffffffff; \ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID, \ +- &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); } ++ &SetAsicWcid, sizeof(struct rt_set_asic_wcid)); } + + /* add this entry into ASIC RX WCID search table */ + #define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY, \ +- pEntry, sizeof(MAC_TABLE_ENTRY)); ++ pEntry, sizeof(struct rt_mac_table_entry)); + + /* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ + /* Set MAC register value according operation mode */ +@@ -144,7 +146,7 @@ typedef struct _CmdQ { + #define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ + { RTMP_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid); \ + if (pEntry->Aid >= 1) { \ +- RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; \ ++ struct rt_set_asic_wcid_attri SetAsicWcidAttri; \ + SetAsicWcidAttri.WCID = pEntry->Aid; \ + if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && \ + (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) \ +@@ -158,26 +160,26 @@ typedef struct _CmdQ { + else SetAsicWcidAttri.Cipher = 0; \ + DBGPRINT(RT_DEBUG_TRACE, ("aid cipher = %ld\n",SetAsicWcidAttri.Cipher)); \ + RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER, \ +- &SetAsicWcidAttri, sizeof(RT_SET_ASIC_WCID_ATTRI)); } } ++ &SetAsicWcidAttri, sizeof(struct rt_set_asic_wcid_attri)); } } + + /* Insert the BA bitmap to ASIC for the Wcid entry */ + #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ + do{ \ +- RT_SET_ASIC_WCID SetAsicWcid; \ ++ struct rt_set_asic_wcid SetAsicWcid; \ + SetAsicWcid.WCID = (_Aid); \ + SetAsicWcid.SetTid = (0x10000<<(_TID)); \ + SetAsicWcid.DeleteTid = 0xffffffff; \ +- RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ ++ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(struct rt_set_asic_wcid)); \ + }while(0) + + /* Remove the BA bitmap from ASIC for the Wcid entry */ + #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ + do{ \ +- RT_SET_ASIC_WCID SetAsicWcid; \ ++ struct rt_set_asic_wcid SetAsicWcid; \ + SetAsicWcid.WCID = (_Wcid); \ + SetAsicWcid.SetTid = (0xffffffff); \ + SetAsicWcid.DeleteTid = (0x10000<<(_TID) ); \ +- RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ ++ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(struct rt_set_asic_wcid)); \ + }while(0) + + #endif /* __RTUSB_IO_H__ // */ +diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h +index b4e9fbc..648fd63 100644 +--- a/drivers/staging/rt2860/spectrum.h ++++ b/drivers/staging/rt2860/spectrum.h +@@ -31,7 +31,7 @@ + #include "rtmp_type.h" + #include "spectrum_def.h" + +-char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); ++char RTMP_GetTxPwr(struct rt_rtmp_adapter *pAd, IN HTTRANSMIT_SETTING HTTxMode); + + /* + ========================================================================== +@@ -45,7 +45,7 @@ char RTMP_GetTxPwr(IN PRTMP_ADAPTER pAd, IN HTTRANSMIT_SETTING HTTxMode); + Return : None. + ========================================================================== + */ +-void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, ++void MakeMeasurementReqFrame(struct rt_rtmp_adapter *pAd, + u8 *pOutBuffer, + unsigned long *pFrameLen, + u8 TotalLen, +@@ -68,7 +68,7 @@ void MakeMeasurementReqFrame(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, ++void EnqueueMeasurementRep(struct rt_rtmp_adapter *pAd, + u8 *pDA, + u8 DialogToken, + u8 MeasureToken, +@@ -88,7 +88,7 @@ void EnqueueMeasurementRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken); ++void EnqueueTPCReq(struct rt_rtmp_adapter *pAd, u8 *pDA, u8 DialogToken); + + /* + ========================================================================== +@@ -102,7 +102,7 @@ void EnqueueTPCReq(IN PRTMP_ADAPTER pAd, u8 *pDA, u8 DialogToken); + Return : None. + ========================================================================== + */ +-void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, ++void EnqueueTPCRep(struct rt_rtmp_adapter *pAd, + u8 *pDA, + u8 DialogToken, u8 TxPwr, u8 LinkMargin); + +@@ -120,7 +120,7 @@ void EnqueueTPCRep(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, ++void EnqueueChSwAnn(struct rt_rtmp_adapter *pAd, + u8 *pDA, u8 ChSwMode, u8 NewCh); + + /* +@@ -135,7 +135,7 @@ void EnqueueChSwAnn(IN PRTMP_ADAPTER pAd, + Return : None. + ========================================================================== + */ +-void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); ++void PeerSpectrumAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); + + /* + ========================================================================== +@@ -146,44 +146,44 @@ void PeerSpectrumAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); + Return : None. + ========================================================================== + */ +-int Set_MeasureReq_Proc(IN PRTMP_ADAPTER pAd, char *arg); ++int Set_MeasureReq_Proc(struct rt_rtmp_adapter *pAd, char *arg); + +-int Set_TpcReq_Proc(IN PRTMP_ADAPTER pAd, char *arg); ++int Set_TpcReq_Proc(struct rt_rtmp_adapter *pAd, char *arg); + +-int Set_PwrConstraint(IN PRTMP_ADAPTER pAd, char *arg); ++int Set_PwrConstraint(struct rt_rtmp_adapter *pAd, char *arg); + +-void MeasureReqTabInit(IN PRTMP_ADAPTER pAd); ++void MeasureReqTabInit(struct rt_rtmp_adapter *pAd); + +-void MeasureReqTabExit(IN PRTMP_ADAPTER pAd); ++void MeasureReqTabExit(struct rt_rtmp_adapter *pAd); + +-PMEASURE_REQ_ENTRY MeasureReqLookUp(IN PRTMP_ADAPTER pAd, u8 DialogToken); ++struct rt_measure_req_entry *MeasureReqLookUp(struct rt_rtmp_adapter *pAd, u8 DialogToken); + +-PMEASURE_REQ_ENTRY MeasureReqInsert(IN PRTMP_ADAPTER pAd, u8 DialogToken); ++struct rt_measure_req_entry *MeasureReqInsert(struct rt_rtmp_adapter *pAd, u8 DialogToken); + +-void MeasureReqDelete(IN PRTMP_ADAPTER pAd, u8 DialogToken); ++void MeasureReqDelete(struct rt_rtmp_adapter *pAd, u8 DialogToken); + +-void InsertChannelRepIE(IN PRTMP_ADAPTER pAd, ++void InsertChannelRepIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, + char *pCountry, u8 RegulatoryClass); + +-void InsertTpcReportIE(IN PRTMP_ADAPTER pAd, ++void InsertTpcReportIE(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, + u8 TxPwr, u8 LinkMargin); + +-void InsertDialogToken(IN PRTMP_ADAPTER pAd, ++void InsertDialogToken(struct rt_rtmp_adapter *pAd, + u8 *pFrameBuf, + unsigned long *pFrameLen, u8 DialogToken); + +-void TpcReqTabInit(IN PRTMP_ADAPTER pAd); ++void TpcReqTabInit(struct rt_rtmp_adapter *pAd); + +-void TpcReqTabExit(IN PRTMP_ADAPTER pAd); ++void TpcReqTabExit(struct rt_rtmp_adapter *pAd); + +-void NotifyChSwAnnToPeerAPs(IN PRTMP_ADAPTER pAd, ++void NotifyChSwAnnToPeerAPs(struct rt_rtmp_adapter *pAd, + u8 *pRA, + u8 *pTA, u8 ChSwMode, u8 Channel); + +-void RguClass_BuildBcnChList(IN PRTMP_ADAPTER pAd, ++void RguClass_BuildBcnChList(struct rt_rtmp_adapter *pAd, + u8 *pBuf, unsigned long *pBufLen); + #endif /* __SPECTRUM_H__ // */ +diff --git a/drivers/staging/rt2860/spectrum_def.h b/drivers/staging/rt2860/spectrum_def.h +index 30678b9..8ffcfb0 100644 +--- a/drivers/staging/rt2860/spectrum_def.h ++++ b/drivers/staging/rt2860/spectrum_def.h +@@ -53,44 +53,48 @@ + #define TPC_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_HASH_TPC_REQ_TAB_SIZE) + #define MQ_DIALOGTOKEN_HASH_INDEX(_DialogToken) ((_DialogToken) % MAX_MEASURE_REQ_TAB_SIZE) + +-typedef struct _MEASURE_REQ_ENTRY { +- struct _MEASURE_REQ_ENTRY *pNext; ++struct rt_measure_req_entry; ++ ++struct rt_measure_req_entry { ++ struct rt_measure_req_entry *pNext; + unsigned long lastTime; + BOOLEAN Valid; + u8 DialogToken; + u8 MeasureDialogToken[3]; /* 0:basic measure, 1: CCA measure, 2: RPI_Histogram measure. */ +-} MEASURE_REQ_ENTRY, *PMEASURE_REQ_ENTRY; ++}; + +-typedef struct _MEASURE_REQ_TAB { ++struct rt_measure_req_tab { + u8 Size; +- PMEASURE_REQ_ENTRY Hash[MAX_HASH_MEASURE_REQ_TAB_SIZE]; +- MEASURE_REQ_ENTRY Content[MAX_MEASURE_REQ_TAB_SIZE]; +-} MEASURE_REQ_TAB, *PMEASURE_REQ_TAB; ++ struct rt_measure_req_entry *Hash[MAX_HASH_MEASURE_REQ_TAB_SIZE]; ++ struct rt_measure_req_entry Content[MAX_MEASURE_REQ_TAB_SIZE]; ++}; ++ ++struct rt_tpc_req_entry; + +-typedef struct _TPC_REQ_ENTRY { +- struct _TPC_REQ_ENTRY *pNext; ++struct rt_tpc_req_entry { ++ struct rt_tpc_req_entry *pNext; + unsigned long lastTime; + BOOLEAN Valid; + u8 DialogToken; +-} TPC_REQ_ENTRY, *PTPC_REQ_ENTRY; ++}; + +-typedef struct _TPC_REQ_TAB { ++struct rt_tpc_req_tab { + u8 Size; +- PTPC_REQ_ENTRY Hash[MAX_HASH_TPC_REQ_TAB_SIZE]; +- TPC_REQ_ENTRY Content[MAX_TPC_REQ_TAB_SIZE]; +-} TPC_REQ_TAB, *PTPC_REQ_TAB; ++ struct rt_tpc_req_entry *Hash[MAX_HASH_TPC_REQ_TAB_SIZE]; ++ struct rt_tpc_req_entry Content[MAX_TPC_REQ_TAB_SIZE]; ++}; + + /* The regulatory information */ +-typedef struct _DOT11_CHANNEL_SET { ++struct rt_dot11_channel_set { + u8 NumberOfChannels; + u8 MaxTxPwr; + u8 ChannelList[16]; +-} DOT11_CHANNEL_SET, *PDOT11_CHANNEL_SET; ++}; + +-typedef struct _DOT11_REGULATORY_INFORMATION { ++struct rt_dot11_regulatory_information { + u8 RegulatoryClass; +- DOT11_CHANNEL_SET ChannelSet; +-} DOT11_REGULATORY_INFORMATION, *PDOT11_REGULATORY_INFORMATION; ++ struct rt_dot11_channel_set ChannelSet; ++}; + + #define RM_TPC_REQ 0 + #define RM_MEASURE_REQ 1 +@@ -101,16 +105,16 @@ typedef struct _DOT11_REGULATORY_INFORMATION { + #define RM_CH_LOAD 3 + #define RM_NOISE_HISTOGRAM 4 + +-typedef struct PACKED _TPC_REPORT_INFO { ++struct PACKED rt_tpc_report_info { + u8 TxPwr; + u8 LinkMargin; +-} TPC_REPORT_INFO, *PTPC_REPORT_INFO; ++}; + +-typedef struct PACKED _CH_SW_ANN_INFO { ++struct PACKED rt_ch_sw_ann_info { + u8 ChSwMode; + u8 Channel; + u8 ChSwCnt; +-} CH_SW_ANN_INFO, *PCH_SW_ANN_INFO; ++}; + + typedef union PACKED _MEASURE_REQ_MODE { + struct PACKED { +@@ -124,18 +128,18 @@ typedef union PACKED _MEASURE_REQ_MODE { + u8 word; + } MEASURE_REQ_MODE, *PMEASURE_REQ_MODE; + +-typedef struct PACKED _MEASURE_REQ { ++struct PACKED rt_measure_req { + u8 ChNum; + u64 MeasureStartTime; + u16 MeasureDuration; +-} MEASURE_REQ, *PMEASURE_REQ; ++}; + +-typedef struct PACKED _MEASURE_REQ_INFO { ++struct PACKED rt_measure_req_info { + u8 Token; + MEASURE_REQ_MODE ReqMode; + u8 ReqType; + u8 Oct[0]; +-} MEASURE_REQ_INFO, *PMEASURE_REQ_INFO; ++}; + + typedef union PACKED _MEASURE_BASIC_REPORT_MAP { + struct PACKED { +@@ -150,26 +154,26 @@ typedef union PACKED _MEASURE_BASIC_REPORT_MAP { + u8 word; + } MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP; + +-typedef struct PACKED _MEASURE_BASIC_REPORT { ++struct PACKED rt_measure_basic_report { + u8 ChNum; + u64 MeasureStartTime; + u16 MeasureDuration; + MEASURE_BASIC_REPORT_MAP Map; +-} MEASURE_BASIC_REPORT, *PMEASURE_BASIC_REPORT; ++}; + +-typedef struct PACKED _MEASURE_CCA_REPORT { ++struct PACKED rt_measure_cca_report { + u8 ChNum; + u64 MeasureStartTime; + u16 MeasureDuration; + u8 CCA_Busy_Fraction; +-} MEASURE_CCA_REPORT, *PMEASURE_CCA_REPORT; ++}; + +-typedef struct PACKED _MEASURE_RPI_REPORT { ++struct PACKED rt_measure_rpi_report { + u8 ChNum; + u64 MeasureStartTime; + u16 MeasureDuration; + u8 RPI_Density[8]; +-} MEASURE_RPI_REPORT, *PMEASURE_RPI_REPORT; ++}; + + typedef union PACKED _MEASURE_REPORT_MODE { + struct PACKED { +@@ -181,18 +185,18 @@ typedef union PACKED _MEASURE_REPORT_MODE { + u8 word; + } MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE; + +-typedef struct PACKED _MEASURE_REPORT_INFO { ++struct PACKED rt_measure_report_info { + u8 Token; + u8 ReportMode; + u8 ReportType; + u8 Octect[0]; +-} MEASURE_REPORT_INFO, *PMEASURE_REPORT_INFO; ++}; + +-typedef struct PACKED _QUIET_INFO { ++struct PACKED rt_quiet_info { + u8 QuietCnt; + u8 QuietPeriod; + u16 QuietDuration; + u16 QuietOffset; +-} QUIET_INFO, *PQUIET_INFO; ++}; + + #endif /* __SPECTRUM_DEF_H__ // */ +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index f2192ff..733bc08 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -73,8 +73,8 @@ u8 Ccx2IeInfo[] = { 0x00, 0x40, 0x96, 0x03, 0x02 }; + + ========================================================================== + */ +-void AssocStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) ++void AssocStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(S, Trans, MAX_ASSOC_STATE, MAX_ASSOC_MSG, + (STATE_MACHINE_FUNC) Drop, ASSOC_IDLE, +@@ -169,7 +169,7 @@ void AssocTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -197,7 +197,7 @@ void ReassocTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -225,7 +225,7 @@ void DisassocTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -259,10 +259,10 @@ void DisassocTimeout(void *SystemSpecific1, + + ========================================================================== + */ +-void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeAssocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 ApAddr[6]; +- HEADER_802_11 AssocHdr; ++ struct rt_header_802_11 AssocHdr; + u8 WmeIe[9] = + { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, + 0x00 }; +@@ -306,7 +306,7 @@ void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + /* Add by James 03/06/27 */ + pAd->StaCfg.AssocInfo.Length = +- sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ sizeof(struct rt_ndis_802_11_association_information); + /* Association don't need to report MAC address */ + pAd->StaCfg.AssocInfo.AvailableRequestFixedIEs = + NDIS_802_11_AI_REQFI_CAPABILITIES | +@@ -318,7 +318,7 @@ void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* Only reassociate need this */ + /*COPY_MAC_ADDR(pAd->StaCfg.AssocInfo.RequestFixedIEs.CurrentAPAddress, ApAddr); */ + pAd->StaCfg.AssocInfo.OffsetRequestIEs = +- sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ sizeof(struct rt_ndis_802_11_association_information); + + NdisZeroMemory(pAd->StaCfg.ReqVarIEs, MAX_VIE_LEN); + /* First add SSID */ +@@ -355,7 +355,7 @@ void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + /* Build basic frame first */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &AssocHdr, ++ sizeof(struct rt_header_802_11), &AssocHdr, + 2, &CapabilityInfo, + 2, &ListenIntv, + 1, &SsidIe, +@@ -440,10 +440,10 @@ void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pAd->MlmeAux.APEdcaParm.bValid) { + if (pAd->CommonCfg.bAPSDCapable + && pAd->MlmeAux.APEdcaParm.bAPSDCapable) { +- QBSS_STA_INFO_PARM QosInfo; ++ struct rt_qbss_sta_info_parm QosInfo; + + NdisZeroMemory(&QosInfo, +- sizeof(QBSS_STA_INFO_PARM)); ++ sizeof(struct rt_qbss_sta_info_parm)); + QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; + QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; + QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; +@@ -589,10 +589,10 @@ void MlmeAssocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeReassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 ApAddr[6]; +- HEADER_802_11 ReassocHdr; ++ struct rt_header_802_11 ReassocHdr; + u8 WmeIe[9] = + { IE_VENDOR_SPECIFIC, 0x07, 0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, + 0x00 }; +@@ -638,7 +638,7 @@ void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ("ASSOC - Send RE-ASSOC request...\n")); + MgtMacHeaderInit(pAd, &ReassocHdr, SUBTYPE_REASSOC_REQ, 0, + ApAddr, ApAddr); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11), + &ReassocHdr, 2, &CapabilityInfo, 2, + &ListenIntv, MAC_ADDR_LEN, ApAddr, 1, &SsidIe, + 1, &pAd->MlmeAux.SsidLen, +@@ -659,10 +659,10 @@ void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (pAd->MlmeAux.APEdcaParm.bValid) { + if (pAd->CommonCfg.bAPSDCapable + && pAd->MlmeAux.APEdcaParm.bAPSDCapable) { +- QBSS_STA_INFO_PARM QosInfo; ++ struct rt_qbss_sta_info_parm QosInfo; + + NdisZeroMemory(&QosInfo, +- sizeof(QBSS_STA_INFO_PARM)); ++ sizeof(struct rt_qbss_sta_info_parm)); + QosInfo.UAPSD_AC_BE = pAd->CommonCfg.bAPSDAC_BE; + QosInfo.UAPSD_AC_BK = pAd->CommonCfg.bAPSDAC_BK; + QosInfo.UAPSD_AC_VI = pAd->CommonCfg.bAPSDAC_VI; +@@ -765,11 +765,11 @@ void MlmeReassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDisassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- PMLME_DISASSOC_REQ_STRUCT pDisassocReq; +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; ++ struct rt_mlme_disassoc_req *pDisassocReq; ++ struct rt_header_802_11 DisassocHdr; ++ struct rt_header_802_11 * pDisassocHdr; + u8 *pOutBuffer = NULL; + unsigned long FrameLen = 0; + int NStatus; +@@ -778,7 +778,7 @@ void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u16 Status; + + /* skip sanity check */ +- pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT) (Elem->Msg); ++ pDisassocReq = (struct rt_mlme_disassoc_req *)(Elem->Msg); + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { +@@ -801,14 +801,14 @@ void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pDisassocReq->Reason)); + MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pDisassocReq->Addr, pDisassocReq->Addr); /* patch peap ttls switching issue */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DisassocHdr, ++ sizeof(struct rt_header_802_11), &DisassocHdr, + 2, &pDisassocReq->Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + + /* To patch Instance and Buffalo(N) AP */ + /* Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine */ + /* Therefore, we send both of them. */ +- pDisassocHdr = (PHEADER_802_11) pOutBuffer; ++ pDisassocHdr = (struct rt_header_802_11 *) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +@@ -835,7 +835,7 @@ void MlmeDisassocReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAssocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 CapabilityInfo, Status, Aid; + u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], SupRateLen; +@@ -843,9 +843,9 @@ void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u8 Addr2[MAC_ADDR_LEN]; + BOOLEAN TimerCancelled; + u8 CkipFlag; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_edca_parm EdcaParm; ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 HtCapabilityLen = 0; + u8 AddHtInfoLen; + u8 NewExtChannelOffset = 0xff; +@@ -924,7 +924,7 @@ void PeerAssocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerReassocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 CapabilityInfo; + u16 Status; +@@ -934,9 +934,9 @@ void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u8 Addr2[MAC_ADDR_LEN]; + u8 CkipFlag; + BOOLEAN TimerCancelled; +- EDCA_PARM EdcaParm; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_edca_parm EdcaParm; ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 HtCapabilityLen; + u8 AddHtInfoLen; + u8 NewExtChannelOffset = 0xff; +@@ -994,7 +994,7 @@ void PeerReassocRspAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, IN PEDCA_PARM pEdcaParm, IN HT_CAPABILITY_IE * pHtCapability, u8 HtCapabilityLen, IN ADD_HT_INFO_IE * pAddHtInfo) /* AP might use this additional ht info IE */ ++void AssocPostProc(struct rt_rtmp_adapter *pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_edca_parm *pEdcaParm, struct rt_ht_capability_ie * pHtCapability, u8 HtCapabilityLen, struct rt_add_ht_info_ie * pAddHtInfo) /* AP might use this additional ht info IE */ + { + unsigned long Idx; + +@@ -1029,7 +1029,7 @@ void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid + + } + +- NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM)); ++ NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(struct rt_edca_parm)); + + /* filter out un-supported rates */ + pAd->MlmeAux.SupRateLen = SupRateLen; +@@ -1069,7 +1069,7 @@ void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid + && (pAd->ScanTab.BssEntry[Idx].VarIELen != 0)) { + u8 *pVIE; + u16 len; +- PEID_STRUCT pEid; ++ struct rt_eid * pEid; + + pVIE = pAd->ScanTab.BssEntry[Idx].VarIEs; + len = pAd->ScanTab.BssEntry[Idx].VarIELen; +@@ -1079,7 +1079,7 @@ void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid + RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); + + while (len > 0) { +- pEid = (PEID_STRUCT) pVIE; ++ pEid = (struct rt_eid *) pVIE; + /* For WPA/WPAPSK */ + if ((pEid->Eid == IE_WPA) + && +@@ -1144,7 +1144,7 @@ void AssocPostProc(IN PRTMP_ADAPTER pAd, u8 *pAddr2, u16 CapabilityInfo, u16 Aid + + ========================================================================== + */ +-void PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerDisassocAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Addr2[MAC_ADDR_LEN]; + u16 Reason; +@@ -1189,7 +1189,7 @@ void PeerDisassocAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void AssocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - AssocTimeoutAction\n")); +@@ -1207,7 +1207,7 @@ void AssocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void ReassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - ReassocTimeoutAction\n")); +@@ -1225,7 +1225,7 @@ void ReassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void DisassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - DisassocTimeoutAction\n")); +@@ -1235,7 +1235,7 @@ void DisassocTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &Status); + } + +-void InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenAssoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1246,7 +1246,7 @@ void InvalidStateWhenAssoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status); + } + +-void InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenReassoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1257,8 +1257,8 @@ void InvalidStateWhenReassoc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status); + } + +-void InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, +- IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenDisassociate(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1283,10 +1283,10 @@ void InvalidStateWhenDisassociate(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) ++void Cls3errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr) + { +- HEADER_802_11 DisassocHdr; +- PHEADER_802_11 pDisassocHdr; ++ struct rt_header_802_11 DisassocHdr; ++ struct rt_header_802_11 * pDisassocHdr; + u8 *pOutBuffer = NULL; + unsigned long FrameLen = 0; + int NStatus; +@@ -1300,14 +1300,14 @@ void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + ("ASSOC - Class 3 Error, Send DISASSOC frame\n")); + MgtMacHeaderInit(pAd, &DisassocHdr, SUBTYPE_DISASSOC, 0, pAddr, pAd->CommonCfg.Bssid); /* patch peap ttls switching issue */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &DisassocHdr, ++ sizeof(struct rt_header_802_11), &DisassocHdr, + 2, &Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + + /* To patch Instance and Buffalo(N) AP */ + /* Driver has to send deauth to Instance AP, but Buffalo(N) needs to send disassoc to reset Authenticator's state machine */ + /* Therefore, we send both of them. */ +- pDisassocHdr = (PHEADER_802_11) pOutBuffer; ++ pDisassocHdr = (struct rt_header_802_11 *) pOutBuffer; + pDisassocHdr->FC.SubType = SUBTYPE_DEAUTH; + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + +@@ -1317,7 +1317,7 @@ void Cls3errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + COPY_MAC_ADDR(pAd->StaCfg.DisassocSta, pAddr); + } + +-int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd) ++int wext_notify_event_assoc(struct rt_rtmp_adapter *pAd) + { + char custom[IW_CUSTOM_MAX] = { 0 }; + +@@ -1334,12 +1334,12 @@ int wext_notify_event_assoc(IN RTMP_ADAPTER * pAd) + + } + +-BOOLEAN StaAddMacTableEntry(IN PRTMP_ADAPTER pAd, +- IN PMAC_TABLE_ENTRY pEntry, ++BOOLEAN StaAddMacTableEntry(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, + u8 MaxSupportedRateIn500Kbps, +- IN HT_CAPABILITY_IE * pHtCapability, ++ struct rt_ht_capability_ie * pHtCapability, + u8 HtCapabilityLen, +- IN ADD_HT_INFO_IE * pAddHtInfo, ++ struct rt_add_ht_info_ie * pAddHtInfo, + u8 AddHtInfoLen, u16 CapabilityInfo) + { + u8 MaxSupportedRate = RATE_11; +diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c +index ddb357a..404bd22 100644 +--- a/drivers/staging/rt2860/sta/auth.c ++++ b/drivers/staging/rt2860/sta/auth.c +@@ -55,8 +55,8 @@ + ========================================================================== + */ + +-void AuthStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]) ++void AuthStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(Sm, Trans, MAX_AUTH_STATE, MAX_AUTH_MSG, + (STATE_MACHINE_FUNC) Drop, AUTH_REQ_IDLE, +@@ -99,7 +99,7 @@ void AuthTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeout\n")); + +@@ -125,7 +125,7 @@ void AuthTimeout(void *SystemSpecific1, + + ========================================================================== + */ +-void MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeAuthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + if (AUTH_ReqSend + (pAd, Elem, &pAd->MlmeAux.AuthTimer, "AUTH", 1, NULL, 0)) +@@ -148,14 +148,14 @@ void MlmeAuthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAuthRspAtSeq2Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Addr2[MAC_ADDR_LEN]; + u16 Seq, Status, RemoteStatus, Alg; + u8 ChlgText[CIPHER_TEXT_LEN]; + u8 CyperChlgText[CIPHER_TEXT_LEN + 8 + 8]; + u8 Element[2]; +- HEADER_802_11 AuthHdr; ++ struct rt_header_802_11 AuthHdr; + BOOLEAN TimerCancelled; + u8 *pOutBuffer = NULL; + int NStatus; +@@ -246,7 +246,7 @@ void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + 128); + RTMPSetICV(pAd, CyperChlgText + 140); + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), ++ sizeof(struct rt_header_802_11), + &AuthHdr, + CIPHER_TEXT_LEN + 16, + CyperChlgText, +@@ -282,7 +282,7 @@ void PeerAuthRspAtSeq2Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerAuthRspAtSeq4Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Addr2[MAC_ADDR_LEN]; + u16 Alg, Seq, Status; +@@ -321,16 +321,16 @@ void PeerAuthRspAtSeq4Action(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeDeauthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_DEAUTH_REQ_STRUCT *pInfo; +- HEADER_802_11 DeauthHdr; ++ struct rt_mlme_deauth_req *pInfo; ++ struct rt_header_802_11 DeauthHdr; + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen = 0; + u16 Status; + +- pInfo = (MLME_DEAUTH_REQ_STRUCT *) Elem->Msg; ++ pInfo = (struct rt_mlme_deauth_req *)Elem->Msg; + + NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); /*Get an unused nonpaged memory */ + if (NStatus != NDIS_STATUS_SUCCESS) { +@@ -348,7 +348,7 @@ void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pInfo->Reason)); + MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pInfo->Addr, + pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11), + &DeauthHdr, 2, &pInfo->Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -374,7 +374,7 @@ void MlmeDeauthReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void AuthTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("AUTH - AuthTimeoutAction\n")); +@@ -391,7 +391,7 @@ void AuthTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenAuth(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -414,9 +414,9 @@ void InvalidStateWhenAuth(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) ++void Cls2errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr) + { +- HEADER_802_11 DeauthHdr; ++ struct rt_header_802_11 DeauthHdr; + u8 *pOutBuffer = NULL; + int NStatus; + unsigned long FrameLen = 0; +@@ -430,7 +430,7 @@ void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + ("AUTH - Class 2 error, Send DEAUTH frame...\n")); + MgtMacHeaderInit(pAd, &DeauthHdr, SUBTYPE_DEAUTH, 0, pAddr, + pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11), + &DeauthHdr, 2, &Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -439,9 +439,9 @@ void Cls2errAction(IN PRTMP_ADAPTER pAd, u8 *pAddr) + COPY_MAC_ADDR(pAd->StaCfg.DeauthSta, pAddr); + } + +-BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, +- IN PMLME_QUEUE_ELEM pElem, +- IN PRALINK_TIMER_STRUCT pAuthTimer, ++BOOLEAN AUTH_ReqSend(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_queue_elem *pElem, ++ struct rt_ralink_timer *pAuthTimer, + char *pSMName, + u16 SeqNo, + u8 *pNewElement, unsigned long ElementLen) +@@ -449,7 +449,7 @@ BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + u16 Alg, Seq, Status; + u8 Addr[6]; + unsigned long Timeout; +- HEADER_802_11 AuthHdr; ++ struct rt_header_802_11 AuthHdr; + BOOLEAN TimerCancelled; + int NStatus; + u8 *pOutBuffer = NULL; +@@ -492,7 +492,7 @@ BOOLEAN AUTH_ReqSend(IN PRTMP_ADAPTER pAd, + Alg)); + MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, Addr, + pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11), + &AuthHdr, 2, &Alg, 2, &Seq, 2, &Status, + END_OF_ARGS); + +diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c +index d155dc6..5b018b7 100644 +--- a/drivers/staging/rt2860/sta/auth_rsp.c ++++ b/drivers/staging/rt2860/sta/auth_rsp.c +@@ -47,8 +47,8 @@ + + ========================================================================== + */ +-void AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN PSTATE_MACHINE Sm, ++void AuthRspStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, + IN STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(Sm, Trans, MAX_AUTH_RSP_STATE, MAX_AUTH_RSP_MSG, +@@ -73,13 +73,13 @@ void AuthRspStateMachineInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHdr80211, ++void PeerAuthSimpleRspGenAndSend(struct rt_rtmp_adapter *pAd, ++ struct rt_header_802_11 * pHdr80211, + u16 Alg, + u16 Seq, + u16 Reason, u16 Status) + { +- HEADER_802_11 AuthHdr; ++ struct rt_header_802_11 AuthHdr; + unsigned long FrameLen = 0; + u8 *pOutBuffer = NULL; + int NStatus; +@@ -96,7 +96,7 @@ void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + DBGPRINT(RT_DEBUG_TRACE, ("Send AUTH response (seq#2)...\n")); + MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, pHdr80211->Addr2, + pAd->MlmeAux.Bssid); +- MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(HEADER_802_11), ++ MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11), + &AuthHdr, 2, &Alg, 2, &Seq, 2, &Reason, END_OF_ARGS); + MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -110,7 +110,7 @@ void PeerAuthSimpleRspGenAndSend(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void PeerDeauthAction(IN PRTMP_ADAPTER pAd, IN PMLME_QUEUE_ELEM Elem) ++void PeerDeauthAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Addr2[MAC_ADDR_LEN]; + u16 Reason; +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index c11389f..9c77520 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -84,9 +84,9 @@ u8 CipherSuiteWpaNoneAesLen = + NdisMoveMemory((_pAd)->StaActive.SupRate, (_pAd)->MlmeAux.SupRate, (_pAd)->MlmeAux.SupRateLen);\ + (_pAd)->StaActive.ExtRateLen = (_pAd)->MlmeAux.ExtRateLen; \ + NdisMoveMemory((_pAd)->StaActive.ExtRate, (_pAd)->MlmeAux.ExtRate, (_pAd)->MlmeAux.ExtRateLen);\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APEdcaParm, &(_pAd)->MlmeAux.APEdcaParm, sizeof(EDCA_PARM));\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APQosCapability, &(_pAd)->MlmeAux.APQosCapability, sizeof(QOS_CAPABILITY_PARM));\ +- NdisMoveMemory(&(_pAd)->CommonCfg.APQbssLoad, &(_pAd)->MlmeAux.APQbssLoad, sizeof(QBSS_LOAD_PARM));\ ++ NdisMoveMemory(&(_pAd)->CommonCfg.APEdcaParm, &(_pAd)->MlmeAux.APEdcaParm, sizeof(struct rt_edca_parm));\ ++ NdisMoveMemory(&(_pAd)->CommonCfg.APQosCapability, &(_pAd)->MlmeAux.APQosCapability, sizeof(struct rt_qos_capability_parm));\ ++ NdisMoveMemory(&(_pAd)->CommonCfg.APQbssLoad, &(_pAd)->MlmeAux.APQbssLoad, sizeof(struct rt_qbss_load_parm));\ + COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].Addr, (_pAd)->MlmeAux.Bssid); \ + (_pAd)->MacTab.Content[BSSID_WCID].Aid = (_pAd)->MlmeAux.Aid; \ + (_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = (_pAd)->StaCfg.PairCipher;\ +@@ -102,8 +102,8 @@ u8 CipherSuiteWpaNoneAesLen = + + ========================================================================== + */ +-void MlmeCntlInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, OUT STATE_MACHINE_FUNC Trans[]) ++void MlmeCntlInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, OUT STATE_MACHINE_FUNC Trans[]) + { + /* Control state machine differs from other state machines, the interface */ + /* follows the standard interface */ +@@ -118,9 +118,9 @@ void MlmeCntlInit(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * S, +- IN MLME_QUEUE_ELEM * Elem) ++void MlmeCntlMachinePerformAction(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *S, ++ struct rt_mlme_queue_elem *Elem) + { + switch (pAd->Mlme.CntlMachine.CurrState) { + case CNTL_IDLE: +@@ -228,9 +228,9 @@ void MlmeCntlMachinePerformAction(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlIdleProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ struct rt_mlme_disassoc_req DisassocReq; + + if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) + return; +@@ -252,7 +252,7 @@ void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ sizeof(struct rt_mlme_disassoc_req), &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; + + if (pAd->StaCfg.WpaSupplicantUP != +@@ -281,11 +281,11 @@ void CntlIdleProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidScanProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_SCAN_REQ_STRUCT ScanReq; ++ struct rt_mlme_scan_req ScanReq; + unsigned long BssIdx = BSS_NOT_FOUND; +- BSS_ENTRY CurrBss; ++ struct rt_bss_entry CurrBss; + + /* record current BSS if network is connected. */ + /* 2003-2-13 do not include current IBSS if this is the only STA in this IBSS. */ +@@ -297,7 +297,7 @@ void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->CommonCfg.Channel); + if (BssIdx != BSS_NOT_FOUND) { + NdisMoveMemory(&CurrBss, &pAd->ScanTab.BssEntry[BssIdx], +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + } + } + /* clean up previous SCAN result, add current BSS back to table if any */ +@@ -309,14 +309,14 @@ void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* appended to the list of BSSIDs in the NIC's database. */ + /* To ensure this, we append this BSS as the first entry in SCAN result */ + NdisMoveMemory(&pAd->ScanTab.BssEntry[0], &CurrBss, +- sizeof(BSS_ENTRY)); ++ sizeof(struct rt_bss_entry)); + pAd->ScanTab.BssNr = 1; + } + + ScanParmFill(pAd, &ScanReq, (char *)Elem->Msg, Elem->MsgLen, BSS_ANY, + SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +- sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ sizeof(struct rt_mlme_scan_req), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; + } + +@@ -329,10 +329,10 @@ void CntlOidScanProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidSsidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- PNDIS_802_11_SSID pOidSsid = (NDIS_802_11_SSID *) Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ struct rt_ndis_802_11_ssid * pOidSsid = (struct rt_ndis_802_11_ssid *) Elem->Msg; ++ struct rt_mlme_disassoc_req DisassocReq; + unsigned long Now; + + /* Step 1. record the desired user settings to MlmeAux */ +@@ -390,7 +390,7 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_disassoc_req), + &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + } else if (pAd->bConfigChanged == TRUE) { +@@ -402,7 +402,7 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_disassoc_req), + &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + } else { +@@ -455,7 +455,7 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ sizeof(struct rt_mlme_disassoc_req), &DisassocReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + } else { + if (ADHOC_ON(pAd)) { +@@ -477,7 +477,7 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) + == TRUE) + ) { +- MLME_SCAN_REQ_STRUCT ScanReq; ++ struct rt_mlme_scan_req ScanReq; + + DBGPRINT(RT_DEBUG_TRACE, + ("CntlOidSsidProc():CNTL - No matching BSS, start a new scan\n")); +@@ -485,7 +485,7 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.SsidLen, BSS_ANY, + SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +- sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ sizeof(struct rt_mlme_scan_req), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = + CNTL_WAIT_OID_LIST_SCAN; + /* Reset Missed scan number */ +@@ -505,12 +505,12 @@ void CntlOidSsidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlOidRTBssidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + unsigned long BssIdx; + u8 *pOidBssid = (u8 *)Elem->Msg; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; +- MLME_JOIN_REQ_STRUCT JoinReq; ++ struct rt_mlme_disassoc_req DisassocReq; ++ struct rt_mlme_join_req JoinReq; + + /* record user desired settings */ + COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid); +@@ -519,7 +519,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* find the desired BSS in the latest SCAN result table */ + BssIdx = BssTableSearch(&pAd->ScanTab, pOidBssid, pAd->MlmeAux.Channel); + if (BssIdx == BSS_NOT_FOUND) { +- MLME_SCAN_REQ_STRUCT ScanReq; ++ struct rt_mlme_scan_req ScanReq; + + DBGPRINT(RT_DEBUG_TRACE, + ("CNTL - BSSID not found. reply NDIS_STATUS_NOT_ACCEPTED\n")); +@@ -530,7 +530,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + ScanParmFill(pAd, &ScanReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen, BSS_ANY, SCAN_ACTIVE); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, +- sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq); ++ sizeof(struct rt_mlme_scan_req), &ScanReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN; + /* Reset Missed scan number */ + NdisGetSystemUpTime(&pAd->StaCfg.LastScanTime); +@@ -551,7 +551,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + pAd->MlmeAux.BssIdx = 0; + pAd->MlmeAux.SsidBssTab.BssNr = 1; + NdisMoveMemory(&pAd->MlmeAux.SsidBssTab.BssEntry[0], +- &pAd->ScanTab.BssEntry[BssIdx], sizeof(BSS_ENTRY)); ++ &pAd->ScanTab.BssEntry[BssIdx], sizeof(struct rt_bss_entry)); + + /* Add SSID into MlmeAux for site surey joining hidden SSID */ + pAd->MlmeAux.SsidLen = pAd->ScanTab.BssEntry[BssIdx].SsidLen; +@@ -568,7 +568,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + REASON_DISASSOC_STA_LEAVING); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_disassoc_req), + &DisassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; +@@ -660,7 +660,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + JoinParmFill(pAd, &JoinReq, pAd->MlmeAux.BssIdx); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, +- sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); ++ sizeof(struct rt_mlme_join_req), &JoinReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; + } +@@ -675,7 +675,7 @@ void CntlOidRTBssidProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* or been corrupted by other "SET OID"? */ + /* */ + /* IRQL = DISPATCH_LEVEL */ +-void CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlMlmeRoamingProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 BBPValue = 0; + +@@ -705,9 +705,9 @@ void CntlMlmeRoamingProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitDisassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { +- MLME_START_REQ_STRUCT StartReq; ++ struct rt_mlme_start_req StartReq; + + if (Elem->MsgType == MT2_DISASSOC_CONF) { + DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Dis-associate successful\n")); +@@ -729,7 +729,7 @@ void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + StartParmFill(pAd, &StartReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, +- sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ sizeof(struct rt_mlme_start_req), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } + /* case 2. try each matched BSS */ +@@ -749,10 +749,10 @@ void CntlWaitDisassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitJoinProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Reason; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ struct rt_mlme_auth_req AuthReq; + + if (Elem->MsgType == MT2_JOIN_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); +@@ -809,7 +809,7 @@ void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, + MT2_MLME_AUTH_REQ, + sizeof +- (MLME_AUTH_REQ_STRUCT), ++ (struct rt_mlme_auth_req), + &AuthReq); + } + +@@ -832,7 +832,7 @@ void CntlWaitJoinProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitStartProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Result; + +@@ -859,7 +859,7 @@ void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + SetCommonHT(pAd); + NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, + &pAd->CommonCfg.AddHTInfo, +- sizeof(ADD_HT_INFO_IE)); ++ sizeof(struct rt_add_ht_info_ie)); + RTMPCheckHt(pAd, BSSID_WCID, + &pAd->CommonCfg.HtCapability, + &pAd->CommonCfg.AddHTInfo); +@@ -925,11 +925,11 @@ void CntlWaitStartProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAuthProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ struct rt_mlme_assoc_req AssocReq; ++ struct rt_mlme_auth_req AuthReq; + + if (Elem->MsgType == MT2_AUTH_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); +@@ -943,7 +943,7 @@ void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_assoc_req), + &AssocReq); + + pAd->Mlme.CntlMachine.CurrState = +@@ -972,7 +972,7 @@ void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, + MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), ++ sizeof(struct rt_mlme_auth_req), + &AuthReq); + + } +@@ -989,11 +989,11 @@ void CntlWaitAuthProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAuthProc2(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Reason; +- MLME_ASSOC_REQ_STRUCT AssocReq; +- MLME_AUTH_REQ_STRUCT AuthReq; ++ struct rt_mlme_assoc_req AssocReq; ++ struct rt_mlme_auth_req AuthReq; + + if (Elem->MsgType == MT2_AUTH_CONF) { + NdisMoveMemory(&Reason, Elem->Msg, sizeof(u16)); +@@ -1006,7 +1006,7 @@ void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + { + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, + MT2_MLME_ASSOC_REQ, +- sizeof(MLME_ASSOC_REQ_STRUCT), ++ sizeof(struct rt_mlme_assoc_req), + &AssocReq); + + pAd->Mlme.CntlMachine.CurrState = +@@ -1022,7 +1022,7 @@ void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Ndis802_11AuthModeOpen); + MlmeEnqueue(pAd, AUTH_STATE_MACHINE, + MT2_MLME_AUTH_REQ, +- sizeof(MLME_AUTH_REQ_STRUCT), ++ sizeof(struct rt_mlme_auth_req), + &AuthReq); + + pAd->Mlme.CntlMachine.CurrState = +@@ -1047,7 +1047,7 @@ void CntlWaitAuthProc2(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitAssocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Reason; + +@@ -1085,7 +1085,7 @@ void CntlWaitAssocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void CntlWaitReassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Result; + +@@ -1121,7 +1121,7 @@ void CntlWaitReassocProc(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) ++void AdhocTurnOnQos(struct rt_rtmp_adapter *pAd) + { + #define AC0_DEF_TXOP 0 + #define AC1_DEF_TXOP 0 +@@ -1162,13 +1162,13 @@ void AdhocTurnOnQos(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType) ++void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + { + unsigned long Now; + u32 Data; + BOOLEAN Cancelled; + u8 Value = 0, idx = 0, HashIdx = 0; +- MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry = NULL; ++ struct rt_mac_table_entry *pEntry = NULL, *pCurrEntry = NULL; + + /* Init ChannelQuality to prevent DEAD_CQI at initial LinkUp */ + pAd->Mlme.ChannelQuality = 50; +@@ -1373,7 +1373,7 @@ void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType) + FALSE); + } + +- NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS)); ++ NdisZeroMemory(&pAd->DrsCounters, sizeof(struct rt_counter_drs)); + + NdisGetSystemUpTime(&Now); + pAd->StaCfg.LastBeaconRxTime = Now; /* last RX timestamp */ +@@ -1439,7 +1439,7 @@ void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType) + pAd->StaCfg.DefaultKeyId = 0; /* always be zero */ + + NdisZeroMemory(&pAd->SharedKey[BSS0][0], +- sizeof(CIPHER_KEY)); ++ sizeof(struct rt_cipher_key)); + pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, + pAd->StaCfg.PMK, LEN_TKIP_EK); +@@ -1873,7 +1873,7 @@ void LinkUp(IN PRTMP_ADAPTER pAd, u8 BssType) + + ========================================================================== + */ +-void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) ++void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP) + { + u8 i, ByteValue = 0; + +@@ -1996,8 +1996,8 @@ void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + pAd->CommonCfg.SsidLen = 0; + } + +- NdisZeroMemory(&pAd->MlmeAux.HtCapability, sizeof(HT_CAPABILITY_IE)); +- NdisZeroMemory(&pAd->MlmeAux.AddHtInfo, sizeof(ADD_HT_INFO_IE)); ++ NdisZeroMemory(&pAd->MlmeAux.HtCapability, sizeof(struct rt_ht_capability_ie)); ++ NdisZeroMemory(&pAd->MlmeAux.AddHtInfo, sizeof(struct rt_add_ht_info_ie)); + pAd->MlmeAux.HtCapabilityLen = 0; + pAd->MlmeAux.NewExtChannelOffset = 0xff; + +@@ -2030,7 +2030,7 @@ void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + } + + NdisAcquireSpinLock(&pAd->MacTabLock); +- NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE)); ++ NdisZeroMemory(&pAd->MacTab, sizeof(struct rt_mac_table)); + pAd->MacTab.Content[BSSID_WCID].PortSecured = pAd->StaCfg.PortSecured; + NdisReleaseSpinLock(&pAd->MacTabLock); + +@@ -2048,9 +2048,9 @@ void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + + /* Clean association information */ + NdisZeroMemory(&pAd->StaCfg.AssocInfo, +- sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); ++ sizeof(struct rt_ndis_802_11_association_information)); + pAd->StaCfg.AssocInfo.Length = +- sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); ++ sizeof(struct rt_ndis_802_11_association_information); + pAd->StaCfg.ReqVarIELen = 0; + pAd->StaCfg.ResVarIELen = 0; + +@@ -2122,10 +2122,10 @@ void LinkDown(IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP) + + ========================================================================== + */ +-void IterateOnBssTab(IN PRTMP_ADAPTER pAd) ++void IterateOnBssTab(struct rt_rtmp_adapter *pAd) + { +- MLME_START_REQ_STRUCT StartReq; +- MLME_JOIN_REQ_STRUCT JoinReq; ++ struct rt_mlme_start_req StartReq; ++ struct rt_mlme_join_req JoinReq; + unsigned long BssIdx; + + /* Change the wepstatus to original wepstatus */ +@@ -2200,7 +2200,7 @@ void IterateOnBssTab(IN PRTMP_ADAPTER pAd) + pAd->MlmeAux.SsidBssTab.BssNr)); + JoinParmFill(pAd, &JoinReq, BssIdx); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_JOIN_REQ, +- sizeof(MLME_JOIN_REQ_STRUCT), &JoinReq); ++ sizeof(struct rt_mlme_join_req), &JoinReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_JOIN; + } else if (pAd->StaCfg.BssType == BSS_ADHOC) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -2209,7 +2209,7 @@ void IterateOnBssTab(IN PRTMP_ADAPTER pAd) + StartParmFill(pAd, &StartReq, (char *)pAd->MlmeAux.Ssid, + pAd->MlmeAux.SsidLen); + MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, +- sizeof(MLME_START_REQ_STRUCT), &StartReq); ++ sizeof(struct rt_mlme_start_req), &StartReq); + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START; + } else /* no more BSS */ + { +@@ -2228,11 +2228,11 @@ void IterateOnBssTab(IN PRTMP_ADAPTER pAd) + + /* for re-association only */ + /* IRQL = DISPATCH_LEVEL */ +-void IterateOnBssTab2(IN PRTMP_ADAPTER pAd) ++void IterateOnBssTab2(struct rt_rtmp_adapter *pAd) + { +- MLME_REASSOC_REQ_STRUCT ReassocReq; ++ struct rt_mlme_assoc_req ReassocReq; + unsigned long BssIdx; +- BSS_ENTRY *pBss; ++ struct rt_bss_entry *pBss; + + BssIdx = pAd->MlmeAux.RoamIdx; + pBss = &pAd->MlmeAux.RoamTab.BssEntry[BssIdx]; +@@ -2250,7 +2250,7 @@ void IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + pBss->CapabilityInfo, ASSOC_TIMEOUT, + pAd->StaCfg.DefaultListenCount); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ, +- sizeof(MLME_REASSOC_REQ_STRUCT), &ReassocReq); ++ sizeof(struct rt_mlme_assoc_req), &ReassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC; + } else /* no more BSS */ +@@ -2276,8 +2276,8 @@ void IterateOnBssTab2(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-void JoinParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_JOIN_REQ_STRUCT * JoinReq, unsigned long BssIdx) ++void JoinParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_join_req *JoinReq, unsigned long BssIdx) + { + JoinReq->BssIdx = BssIdx; + } +@@ -2290,8 +2290,8 @@ void JoinParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void ScanParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_SCAN_REQ_STRUCT * ScanReq, ++void ScanParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_scan_req *ScanReq, + char Ssid[], + u8 SsidLen, u8 BssType, u8 ScanType) + { +@@ -2310,8 +2310,8 @@ void ScanParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void StartParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_START_REQ_STRUCT * StartReq, ++void StartParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_start_req *StartReq, + char Ssid[], u8 SsidLen) + { + ASSERT(SsidLen <= MAX_LEN_OF_SSID); +@@ -2327,8 +2327,8 @@ void StartParmFill(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-void AuthParmFill(IN PRTMP_ADAPTER pAd, +- IN OUT MLME_AUTH_REQ_STRUCT * AuthReq, ++void AuthParmFill(struct rt_rtmp_adapter *pAd, ++ struct rt_mlme_auth_req *AuthReq, + u8 *pAddr, u16 Alg) + { + COPY_MAC_ADDR(AuthReq->Addr, pAddr); +@@ -2345,9 +2345,9 @@ void AuthParmFill(IN PRTMP_ADAPTER pAd, + ========================================================================== + */ + #ifdef RTMP_MAC_PCI +-void ComposePsPoll(IN PRTMP_ADAPTER pAd) ++void ComposePsPoll(struct rt_rtmp_adapter *pAd) + { +- NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ NdisZeroMemory(&pAd->PsPollFrame, sizeof(struct rt_pspoll_frame)); + pAd->PsPollFrame.FC.Type = BTYPE_CNTL; + pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL; + pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000; +@@ -2356,9 +2356,9 @@ void ComposePsPoll(IN PRTMP_ADAPTER pAd) + } + + /* IRQL = DISPATCH_LEVEL */ +-void ComposeNullFrame(IN PRTMP_ADAPTER pAd) ++void ComposeNullFrame(struct rt_rtmp_adapter *pAd) + { +- NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); ++ NdisZeroMemory(&pAd->NullFrame, sizeof(struct rt_header_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; + pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC; + pAd->NullFrame.FC.ToDs = 1; +@@ -2368,19 +2368,19 @@ void ComposeNullFrame(IN PRTMP_ADAPTER pAd) + } + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +-void MlmeCntlConfirm(IN PRTMP_ADAPTER pAd, unsigned long MsgType, u16 Msg) ++void MlmeCntlConfirm(struct rt_rtmp_adapter *pAd, unsigned long MsgType, u16 Msg) + { + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(u16), + &Msg); + } + +-void ComposePsPoll(IN PRTMP_ADAPTER pAd) ++void ComposePsPoll(struct rt_rtmp_adapter *pAd) + { +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi * pTxWI; + + DBGPRINT(RT_DEBUG_TRACE, ("ComposePsPoll\n")); +- NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ NdisZeroMemory(&pAd->PsPollFrame, sizeof(struct rt_pspoll_frame)); + + pAd->PsPollFrame.FC.PwrMgmt = 0; + pAd->PsPollFrame.FC.Type = BTYPE_CNTL; +@@ -2392,33 +2392,33 @@ void ComposePsPoll(IN PRTMP_ADAPTER pAd) + RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[0], 100); + pTxInfo = +- (PTXINFO_STRUC) & pAd->PsPollContext.TransferBuffer->field. ++ (struct rt_txinfo *)& pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (u16)(sizeof(PSPOLL_FRAME) + TXWI_SIZE), TRUE, ++ (u16)(sizeof(struct rt_pspoll_frame) + TXWI_SIZE), TRUE, + EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxWI = +- (PTXWI_STRUC) & pAd->PsPollContext.TransferBuffer->field. ++ (struct rt_txwi *) & pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, +- BSSID_WCID, (sizeof(PSPOLL_FRAME)), 0, 0, ++ BSSID_WCID, (sizeof(struct rt_pspoll_frame)), 0, 0, + (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field. + WirelessPacket[TXWI_SIZE + TXINFO_SIZE], +- &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); ++ &pAd->PsPollFrame, sizeof(struct rt_pspoll_frame)); + /* Append 4 extra zero bytes. */ + pAd->PsPollContext.BulkOutSize = +- TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; ++ TXINFO_SIZE + TXWI_SIZE + sizeof(struct rt_pspoll_frame) + 4; + } + + /* IRQL = DISPATCH_LEVEL */ +-void ComposeNullFrame(IN PRTMP_ADAPTER pAd) ++void ComposeNullFrame(struct rt_rtmp_adapter *pAd) + { +- PTXINFO_STRUC pTxInfo; +- PTXWI_STRUC pTxWI; ++ struct rt_txinfo *pTxInfo; ++ struct rt_txwi * pTxWI; + +- NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); ++ NdisZeroMemory(&pAd->NullFrame, sizeof(struct rt_header_802_11)); + pAd->NullFrame.FC.Type = BTYPE_DATA; + pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC; + pAd->NullFrame.FC.ToDs = 1; +@@ -2428,21 +2428,21 @@ void ComposeNullFrame(IN PRTMP_ADAPTER pAd) + RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field. + WirelessPacket[0], 100); + pTxInfo = +- (PTXINFO_STRUC) & pAd->NullContext.TransferBuffer->field. ++ (struct rt_txinfo *)& pAd->NullContext.TransferBuffer->field. + WirelessPacket[0]; + RTMPWriteTxInfo(pAd, pTxInfo, +- (u16)(sizeof(HEADER_802_11) + TXWI_SIZE), TRUE, ++ (u16)(sizeof(struct rt_header_802_11) + TXWI_SIZE), TRUE, + EpToQueue[MGMTPIPEIDX], FALSE, FALSE); + pTxWI = +- (PTXWI_STRUC) & pAd->NullContext.TransferBuffer->field. ++ (struct rt_txwi *) & pAd->NullContext.TransferBuffer->field. + WirelessPacket[TXINFO_SIZE]; + RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, +- BSSID_WCID, (sizeof(HEADER_802_11)), 0, 0, ++ BSSID_WCID, (sizeof(struct rt_header_802_11)), 0, 0, + (u8)pAd->CommonCfg.MlmeTransmit.field.MCS, + IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); + RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field. + WirelessPacket[TXWI_SIZE + TXINFO_SIZE], &pAd->NullFrame, +- sizeof(HEADER_802_11)); ++ sizeof(struct rt_header_802_11)); + pAd->NullContext.BulkOutSize = + TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; + } +@@ -2458,15 +2458,15 @@ void ComposeNullFrame(IN PRTMP_ADAPTER pAd) + + ========================================================================== + */ +-unsigned long MakeIbssBeacon(IN PRTMP_ADAPTER pAd) ++unsigned long MakeIbssBeacon(struct rt_rtmp_adapter *pAd) + { + u8 DsLen = 1, IbssLen = 2; + u8 LocalErpIe[3] = { IE_ERP, 1, 0x04 }; +- HEADER_802_11 BcnHdr; ++ struct rt_header_802_11 BcnHdr; + u16 CapabilityInfo; + LARGE_INTEGER FakeTimestamp; + unsigned long FrameLen = 0; +- PTXWI_STRUC pTxWI = &pAd->BeaconTxWI; ++ struct rt_txwi * pTxWI = &pAd->BeaconTxWI; + u8 *pBeaconFrame = pAd->BeaconBuf; + BOOLEAN Privacy; + u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES]; +@@ -2542,7 +2542,7 @@ unsigned long MakeIbssBeacon(IN PRTMP_ADAPTER pAd) + 0, 0); + + MakeOutgoingFrame(pBeaconFrame, &FrameLen, +- sizeof(HEADER_802_11), &BcnHdr, ++ sizeof(struct rt_header_802_11), &BcnHdr, + TIMESTAMP_LEN, &FakeTimestamp, + 2, &pAd->CommonCfg.BeaconPeriod, + 2, &CapabilityInfo, +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index 3d2d678..8c0ab2d 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -36,12 +36,12 @@ + */ + #include "../rt_config.h" + +-void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void STARxEAPOLFrameIndicate(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; ++ struct rt_rxwi * pRxWI = pRxBlk->pRxWI; + u8 *pTmpBuf; + + if (pAd->StaCfg.WpaSupplicantUP) { +@@ -76,7 +76,7 @@ void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + if (pAd->StaCfg.DesireSharedKey[idx]. + KeyLen > 0) { + #ifdef RTMP_MAC_PCI +- MAC_TABLE_ENTRY *pEntry = ++ struct rt_mac_table_entry *pEntry = + &pAd->MacTab. + Content[BSSID_WCID]; + +@@ -109,11 +109,11 @@ void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + #ifdef RTMP_MAC_USB + union { + char buf[sizeof +- (NDIS_802_11_WEP) ++ (struct rt_ndis_802_11_wep) + + + MAX_LEN_OF_KEY + - 1]; +- NDIS_802_11_WEP keyinfo; ++ struct rt_ndis_802_11_wep keyinfo; + } + WepKey; + int len; +@@ -202,9 +202,9 @@ void STARxEAPOLFrameIndicate(IN PRTMP_ADAPTER pAd, + + } + +-void STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, +- IN RX_BLK * pRxBlk, u8 FromWhichBSSID) ++void STARxDataFrameAnnounce(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, ++ struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID) + { + + /* non-EAP frame */ +@@ -265,14 +265,14 @@ void STARxDataFrameAnnounce(IN PRTMP_ADAPTER pAd, + } + + /* For TKIP frame, calculate the MIC value */ +-BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, +- IN MAC_TABLE_ENTRY * pEntry, IN RX_BLK * pRxBlk) ++BOOLEAN STACheckTkipMICValue(struct rt_rtmp_adapter *pAd, ++ struct rt_mac_table_entry *pEntry, struct rt_rx_blk *pRxBlk) + { +- PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ struct rt_header_802_11 * pHeader = pRxBlk->pHeader; + u8 *pData = pRxBlk->pData; + u16 DataSize = pRxBlk->DataSize; + u8 UserPriority = pRxBlk->UserPriority; +- PCIPHER_KEY pWpaKey; ++ struct rt_cipher_key *pWpaKey; + u8 *pDA, *pSA; + + pWpaKey = &pAd->SharedKey[BSS0][pRxBlk->pRxWI->KeyIndex]; +@@ -311,21 +311,21 @@ BOOLEAN STACheckTkipMICValue(IN PRTMP_ADAPTER pAd, + } + + /* */ +-/* All Rx routines use RX_BLK structure to hande rx events */ ++/* All Rx routines use struct rt_rx_blk structure to hande rx events */ + /* It is very important to build pRxBlk attributes */ + /* 1. pHeader pointer to 802.11 Header */ + /* 2. pData pointer to payload including LLC (just skip Header) */ + /* 3. set payload size including LLC to DataSize */ + /* 4. set some flags with RX_BLK_SET_FLAG() */ + /* */ +-void STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxDataFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ struct rt_rxwi * pRxWI = pRxBlk->pRxWI; ++ struct rt_header_802_11 * pHeader = pRxBlk->pHeader; + void *pRxPacket = pRxBlk->pRxPacket; + BOOLEAN bFragment = FALSE; +- MAC_TABLE_ENTRY *pEntry = NULL; ++ struct rt_mac_table_entry *pEntry = NULL; + u8 FromWhichBSSID = BSS0; + u8 UserPriority = 0; + +@@ -610,11 +610,11 @@ void STAHandleRxDataFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_FAILURE); + } + +-void STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxMgmtFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk) + { + PRT28XX_RXD_STRUC pRxD = &(pRxBlk->RxD); +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ struct rt_rxwi * pRxWI = pRxBlk->pRxWI; ++ struct rt_header_802_11 * pHeader = pRxBlk->pHeader; + void *pRxPacket = pRxBlk->pRxPacket; + + do { +@@ -656,10 +656,10 @@ void STAHandleRxMgmtFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS); + } + +-void STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) ++void STAHandleRxControlFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk) + { +- PRXWI_STRUC pRxWI = pRxBlk->pRxWI; +- PHEADER_802_11 pHeader = pRxBlk->pHeader; ++ struct rt_rxwi * pRxWI = pRxBlk->pRxWI; ++ struct rt_header_802_11 * pHeader = pRxBlk->pHeader; + void *pRxPacket = pRxBlk->pRxPacket; + + switch (pHeader->FC.SubType) { +@@ -667,7 +667,7 @@ void STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + { + CntlEnqueueForRecv(pAd, pRxWI->WirelessCliID, + (pRxWI->MPDUtotalByteCount), +- (PFRAME_BA_REQ) pHeader); ++ (struct rt_frame_ba_req *) pHeader); + } + break; + case SUBTYPE_BLOCK_ACK: +@@ -698,17 +698,17 @@ void STAHandleRxControlFrame(IN PRTMP_ADAPTER pAd, IN RX_BLK * pRxBlk) + Need to consider QOS DATA format when converting to 802.3 + ======================================================================== + */ +-BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) ++BOOLEAN STARxDoneInterruptHandle(struct rt_rtmp_adapter *pAd, IN BOOLEAN argc) + { + int Status; + u32 RxProcessed, RxPending; + BOOLEAN bReschedule = FALSE; +- RT28XX_RXD_STRUC *pRxD; ++ PRT28XX_RXD_STRUC pRxD; + u8 *pData; +- PRXWI_STRUC pRxWI; ++ struct rt_rxwi * pRxWI; + void *pRxPacket; +- PHEADER_802_11 pHeader; +- RX_BLK RxCell; ++ struct rt_header_802_11 * pHeader; ++ struct rt_rx_blk RxCell; + + RxProcessed = RxPending = 0; + +@@ -750,8 +750,8 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + pRxD = &(RxCell.RxD); + /* get rx data buffer */ + pData = GET_OS_PKT_DATAPTR(pRxPacket); +- pRxWI = (PRXWI_STRUC) pData; +- pHeader = (PHEADER_802_11) (pData + RXWI_SIZE); ++ pRxWI = (struct rt_rxwi *) pData; ++ pHeader = (struct rt_header_802_11 *) (pData + RXWI_SIZE); + + /* build RxCell */ + RxCell.pRxWI = pRxWI; +@@ -833,7 +833,7 @@ BOOLEAN STARxDoneInterruptHandle(IN PRTMP_ADAPTER pAd, IN BOOLEAN argc) + + ======================================================================== + */ +-void RTMPHandleTwakeupInterrupt(IN PRTMP_ADAPTER pAd) ++void RTMPHandleTwakeupInterrupt(struct rt_rtmp_adapter *pAd) + { + AsicForceWakeup(pAd, FALSE); + } +@@ -860,7 +860,7 @@ void STASendPackets(void *MiniportAdapterContext, + void **ppPacketArray, u32 NumberOfPackets) + { + u32 Index; +- PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) MiniportAdapterContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)MiniportAdapterContext; + void *pPacket; + BOOLEAN allowToSend = FALSE; + +@@ -920,16 +920,16 @@ Note: + You only can put OS-indepened & STA related code in here. + ======================================================================== + */ +-int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket) ++int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket) + { +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u8 *pSrcBufVA; + u32 SrcBufLen; + u32 AllowFragSize; + u8 NumberOfFrag; + u8 RTSRequired; + u8 QueIdx, UserPriority; +- MAC_TABLE_ENTRY *pEntry = NULL; ++ struct rt_mac_table_entry *pEntry = NULL; + unsigned int IrqFlags; + u8 FlgIsIP = 0; + u8 Rate; +@@ -1144,7 +1144,7 @@ int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket) + + if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE) && + IS_HT_STA(pEntry)) { +- /*PMAC_TABLE_ENTRY pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; */ ++ /*struct rt_mac_table_entry *pMacEntry = &pAd->MacTab.Content[BSSID_WCID]; */ + if (((pEntry->TXBAbitmap & (1 << UserPriority)) == 0) && + ((pEntry->BADeclineBitmap & (1 << UserPriority)) == 0) && + (pEntry->PortSecured == WPA_802_1X_PORT_SECURED) +@@ -1189,7 +1189,7 @@ int STASendPacket(IN PRTMP_ADAPTER pAd, void *pPacket) + ======================================================================== + */ + #ifdef RTMP_MAC_PCI +-int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++int RTMPFreeTXDRequest(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + u8 NumberRequired, u8 *FreeNumberIs) + { +@@ -1244,14 +1244,14 @@ int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + Actually, this function used to check if the TxHardware Queue still has frame need to send. + If no frame need to send, go to sleep, else, still wake up. + */ +-int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, ++int RTMPFreeTXDRequest(struct rt_rtmp_adapter *pAd, + u8 QueIdx, + u8 NumberRequired, u8 *FreeNumberIs) + { + /*unsigned long FreeNumber = 0; */ + int Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + + switch (QueIdx) { + case QID_AC_BK: +@@ -1289,16 +1289,16 @@ int RTMPFreeTXDRequest(IN PRTMP_ADAPTER pAd, + } + #endif /* RTMP_MAC_USB // */ + +-void RTMPSendDisassociationFrame(IN PRTMP_ADAPTER pAd) ++void RTMPSendDisassociationFrame(struct rt_rtmp_adapter *pAd) + { + } + +-void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, ++void RTMPSendNullFrame(struct rt_rtmp_adapter *pAd, + u8 TxRate, IN BOOLEAN bQosNull) + { + u8 NullFrame[48]; + unsigned long Length; +- PHEADER_802_11 pHeader_802_11; ++ struct rt_header_802_11 * pHeader_802_11; + + /* WPA 802.1x secured port control */ + if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || +@@ -1311,9 +1311,9 @@ void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + } + + NdisZeroMemory(NullFrame, 48); +- Length = sizeof(HEADER_802_11); ++ Length = sizeof(struct rt_header_802_11); + +- pHeader_802_11 = (PHEADER_802_11) NullFrame; ++ pHeader_802_11 = (struct rt_header_802_11 *) NullFrame; + + pHeader_802_11->FC.Type = BTYPE_DATA; + pHeader_802_11->FC.SubType = SUBTYPE_NULL_FUNC; +@@ -1349,7 +1349,7 @@ void RTMPSendNullFrame(IN PRTMP_ADAPTER pAd, + } + + /* IRQL = DISPATCH_LEVEL */ +-void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, ++void RTMPSendRTSFrame(struct rt_rtmp_adapter *pAd, + u8 *pDA, + IN unsigned int NextMpduSize, + u8 TxRate, +@@ -1367,13 +1367,13 @@ void RTMPSendRTSFrame(IN PRTMP_ADAPTER pAd, + /* In Cisco CCX 2.0 Leap Authentication */ + /* WepStatus is Ndis802_11Encryption1Enabled but the key will use PairwiseKey */ + /* Instead of the SharedKey, SharedKey Length may be Zero. */ +-void STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STAFindCipherAlgorithm(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { + NDIS_802_11_ENCRYPTION_STATUS Cipher; /* To indicate cipher used for this packet */ + u8 CipherAlg = CIPHER_NONE; /* cipher alogrithm */ + u8 KeyIdx = 0xff; + u8 *pSrcBufVA; +- PCIPHER_KEY pKey = NULL; ++ struct rt_cipher_key *pKey = NULL; + + pSrcBufVA = GET_OS_PKT_DATAPTR(pTxBlk->pPacket); + +@@ -1429,21 +1429,21 @@ void STAFindCipherAlgorithm(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pTxBlk->pKey = pKey; + } + +-void STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STABuildCommon802_11Header(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + + /* */ + /* MAKE A COMMON 802.11 HEADER */ + /* */ + + /* normal wlan header size : 24 octets */ +- pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); ++ pTxBlk->MpduHeaderLen = sizeof(struct rt_header_802_11); + + pHeader_802_11 = +- (HEADER_802_11 *) & pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; ++ (struct rt_header_802_11 *) & pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + +- NdisZeroMemory(pHeader_802_11, sizeof(HEADER_802_11)); ++ NdisZeroMemory(pHeader_802_11, sizeof(struct rt_header_802_11)); + + pHeader_802_11->FC.FrDs = 0; + pHeader_802_11->FC.Type = BTYPE_DATA; +@@ -1510,13 +1510,13 @@ void STABuildCommon802_11Header(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-void STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, +- IN TX_BLK * pTxBlk, u8 * pHeader) ++void STABuildCache802_11Header(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 * pHeader) + { +- MAC_TABLE_ENTRY *pMacEntry; +- PHEADER_802_11 pHeader80211; ++ struct rt_mac_table_entry *pMacEntry; ++ struct rt_header_802_11 * pHeader80211; + +- pHeader80211 = (PHEADER_802_11) pHeader; ++ pHeader80211 = (struct rt_header_802_11 *) pHeader; + pMacEntry = pTxBlk->pMacEntry; + + /* */ +@@ -1524,7 +1524,7 @@ void STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, + /* */ + + /* normal wlan header size : 24 octets */ +- pTxBlk->MpduHeaderLen = sizeof(HEADER_802_11); ++ pTxBlk->MpduHeaderLen = sizeof(struct rt_header_802_11); + + /* More Bit */ + pHeader80211->FC.MoreData = TX_BLK_TEST_FLAG(pTxBlk, fTX_bMoreData); +@@ -1556,20 +1556,20 @@ void STABuildCache802_11Header(IN RTMP_ADAPTER * pAd, + pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE); + } + +-static inline u8 *STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, +- IN TX_BLK * pTxBlk) ++static inline u8 *STA_Build_ARalink_Frame_Header(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk) + { + u8 *pHeaderBufPtr; +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + void *pNextPacket; + u32 nextBufLen; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; ++ pHeader_802_11 = (struct rt_header_802_11 *) pHeaderBufPtr; + + /* steal "order" bit to mark "aggregation" */ + pHeader_802_11->FC.Order = 1; +@@ -1593,7 +1593,7 @@ static inline u8 *STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + pTxBlk->HdrPadLen = (unsigned long)(pHeaderBufPtr - pTxBlk->HdrPadLen); + + /* For RA Aggregation, */ +- /* put the 2nd MSDU length(extra 2-byte field) after QOS_CONTROL in little endian format */ ++ /* put the 2nd MSDU length(extra 2-byte field) after struct rt_qos_control in little endian format */ + pQEntry = pTxBlk->TxPacketList.Head; + pNextPacket = QUEUE_ENTRY_TO_PACKET(pQEntry); + nextBufLen = GET_OS_PKT_LEN(pNextPacket); +@@ -1610,17 +1610,17 @@ static inline u8 *STA_Build_ARalink_Frame_Header(IN RTMP_ADAPTER * pAd, + + } + +-static inline u8 *STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, +- IN TX_BLK * pTxBlk) ++static inline u8 *STA_Build_AMSDU_Frame_Header(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk) + { + u8 *pHeaderBufPtr; /*, pSaveBufPtr; */ +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + + STAFindCipherAlgorithm(pAd, pTxBlk); + STABuildCommon802_11Header(pAd, pTxBlk); + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; ++ pHeader_802_11 = (struct rt_header_802_11 *) pHeaderBufPtr; + + /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; +@@ -1655,14 +1655,14 @@ static inline u8 *STA_Build_AMSDU_Frame_Header(IN RTMP_ADAPTER * pAd, + + } + +-void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_AMPDU_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + u8 *pHeaderBufPtr; + u16 FreeNumber; +- MAC_TABLE_ENTRY *pMacEntry; ++ struct rt_mac_table_entry *pMacEntry; + BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + ASSERT(pTxBlk); + +@@ -1684,7 +1684,7 @@ void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + NdisMoveMemory((u8 *)& pTxBlk-> + HeaderBuf[TXINFO_SIZE], + (u8 *)& pMacEntry->CachedBuf[0], +- TXWI_SIZE + sizeof(HEADER_802_11)); ++ TXWI_SIZE + sizeof(struct rt_header_802_11)); + pHeaderBufPtr = + (u8 *)(&pTxBlk-> + HeaderBuf[TXINFO_SIZE + TXWI_SIZE]); +@@ -1697,7 +1697,7 @@ void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; + } + +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; ++ pHeader_802_11 = (struct rt_header_802_11 *) pHeaderBufPtr; + + /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; +@@ -1773,13 +1773,13 @@ void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + if (pMacEntry->isCached) { + RTMPWriteTxWI_Cache(pAd, +- (PTXWI_STRUC) (&pTxBlk-> ++ (struct rt_txwi *) (&pTxBlk-> + HeaderBuf + [TXINFO_SIZE]), + pTxBlk); + } else { + RTMPWriteTxWI_Data(pAd, +- (PTXWI_STRUC) (&pTxBlk-> ++ (struct rt_txwi *) (&pTxBlk-> + HeaderBuf + [TXINFO_SIZE]), + pTxBlk); +@@ -1819,7 +1819,7 @@ void STA_AMPDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + } + +-void STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_AMSDU_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { + u8 *pHeaderBufPtr; + u16 FreeNumber; +@@ -1830,7 +1830,7 @@ void STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + u16 FirstTx = 0, LastTxIdx = 0; + BOOLEAN bVLANPkt; + int frameNum = 0; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + ASSERT(pTxBlk); + +@@ -1864,7 +1864,7 @@ void STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + /* NOTE: TxWI->MPDUtotalByteCount will be updated after final frame was handled. */ + RTMPWriteTxWI_Data(pAd, +- (PTXWI_STRUC) (&pTxBlk-> ++ (struct rt_txwi *) (&pTxBlk-> + HeaderBuf + [TXINFO_SIZE]), + pTxBlk); +@@ -1951,13 +1951,13 @@ void STA_AMSDU_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +-void STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_Legacy_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + u8 *pHeaderBufPtr; + u16 FreeNumber; + BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + ASSERT(pTxBlk); + +@@ -1996,7 +1996,7 @@ void STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + } + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; ++ pHeader_802_11 = (struct rt_header_802_11 *) pHeaderBufPtr; + + /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; +@@ -2052,7 +2052,7 @@ void STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + /* use Wcid as Key Index */ + /* */ + +- RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC) (&pTxBlk->HeaderBuf[TXINFO_SIZE]), ++ RTMPWriteTxWI_Data(pAd, (struct rt_txwi *) (&pTxBlk->HeaderBuf[TXINFO_SIZE]), + pTxBlk); + + /*FreeNumber = GET_TXRING_FREENO(pAd, QueIdx); */ +@@ -2069,7 +2069,7 @@ void STA_Legacy_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); + } + +-void STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) ++void STA_ARalink_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { + u8 *pHeaderBufPtr; + u16 FreeNumber; +@@ -2077,7 +2077,7 @@ void STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + u16 FirstTx, LastTxIdx; + int frameNum = 0; + BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + ASSERT(pTxBlk); + +@@ -2115,7 +2115,7 @@ void STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + /* It's ok write the TxWI here, because the TxWI->MPDUtotalByteCount */ + /* will be updated after final frame was handled. */ + RTMPWriteTxWI_Data(pAd, +- (PTXWI_STRUC) (&pTxBlk-> ++ (struct rt_txwi *) (&pTxBlk-> + HeaderBuf + [TXINFO_SIZE]), + pTxBlk); +@@ -2186,19 +2186,19 @@ void STA_ARalink_Frame_Tx(IN PRTMP_ADAPTER pAd, IN TX_BLK * pTxBlk) + + } + +-void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) ++void STA_Fragment_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + { +- HEADER_802_11 *pHeader_802_11; ++ struct rt_header_802_11 *pHeader_802_11; + u8 *pHeaderBufPtr; + u16 FreeNumber; + u8 fragNum = 0; +- PACKET_INFO PacketInfo; ++ struct rt_packet_info PacketInfo; + u16 EncryptionOverhead = 0; + u32 FreeMpduSize, SrcRemainingBytes; + u16 AckDuration; + u32 NextMpduSize; + BOOLEAN bVLANPkt; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + HTTRANSMIT_SETTING *pTransmit; + + ASSERT(pTxBlk); +@@ -2236,7 +2236,7 @@ void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + } + + pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE]; +- pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr; ++ pHeader_802_11 = (struct rt_header_802_11 *) pHeaderBufPtr; + + /* skip common header */ + pHeaderBufPtr += pTxBlk->MpduHeaderLen; +@@ -2375,7 +2375,7 @@ void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + pTxBlk->FrameGap = IFS_SIFS; + + RTMPWriteTxWI_Data(pAd, +- (PTXWI_STRUC) (&pTxBlk-> ++ (struct rt_txwi *) (&pTxBlk-> + HeaderBuf[TXINFO_SIZE]), + pTxBlk); + +@@ -2434,11 +2434,11 @@ void STA_Fragment_Frame_Tx(IN RTMP_ADAPTER * pAd, IN TX_BLK * pTxBlk) + + ======================================================================== + */ +-int STAHardTransmit(IN PRTMP_ADAPTER pAd, +- IN TX_BLK * pTxBlk, u8 QueIdx) ++int STAHardTransmit(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_blk *pTxBlk, u8 QueIdx) + { + char *pPacket; +- PQUEUE_ENTRY pQEntry; ++ struct rt_queue_entry *pQEntry; + + /* --------------------------------------------- */ + /* STEP 0. DO SANITY CHECK AND SOME EARLY PREPARATION. */ +@@ -2537,7 +2537,7 @@ unsigned long HashBytesPolynomial(u8 * value, unsigned int len) + return ret; + } + +-void Sta_Announce_or_Forward_802_3_Packet(IN PRTMP_ADAPTER pAd, ++void Sta_Announce_or_Forward_802_3_Packet(struct rt_rtmp_adapter *pAd, + void *pPacket, + u8 FromWhichBSSID) + { +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index a79348f..64a0e87 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -54,14 +54,14 @@ extern u8 BROADCOM_OUI[]; + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN MlmeStartReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + char Ssid[], u8 * pSsidLen) + { +- MLME_START_REQ_STRUCT *Info; ++ struct rt_mlme_start_req *Info; + +- Info = (MLME_START_REQ_STRUCT *) (Msg); ++ Info = (struct rt_mlme_start_req *)(Msg); + + if (Info->SsidLen > MAX_LEN_OF_SSID) { + DBGPRINT(RT_DEBUG_TRACE, +@@ -86,15 +86,15 @@ BOOLEAN MlmeStartReqSanity(IN PRTMP_ADAPTER pAd, + + ========================================================================== + */ +-BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, OUT HT_CAPABILITY_IE * pHtCapability, OUT ADD_HT_INFO_IE * pAddHtInfo, /* AP might use this additional ht info IE */ ++BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ + u8 * pHtCapabilityLen, + u8 * pAddHtInfoLen, + u8 * pNewExtChannelOffset, +- OUT PEDCA_PARM pEdcaParm, u8 * pCkipFlag) ++ struct rt_edca_parm *pEdcaParm, u8 * pCkipFlag) + { + char IeType, *Ptr; +- PFRAME_802_11 pFrame = (PFRAME_802_11) pMsg; +- PEID_STRUCT pEid; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) pMsg; ++ struct rt_eid * pEid; + unsigned long Length = 0; + + *pNewExtChannelOffset = 0xff; +@@ -136,7 +136,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgL + + /* many AP implement proprietary IEs in non-standard order, we'd better */ + /* tolerate mis-ordered IEs to get best compatibility */ +- pEid = (PEID_STRUCT) & pFrame->Octet[8 + (*pSupRateLen)]; ++ pEid = (struct rt_eid *) & pFrame->Octet[8 + (*pSupRateLen)]; + + /* get variable fields from payload and advance the pointer */ + while ((Length + 2 + pEid->Len) <= MsgLen) { +@@ -171,11 +171,11 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgL + break; + case IE_ADD_HT: + case IE_ADD_HT2: +- if (pEid->Len >= sizeof(ADD_HT_INFO_IE)) { ++ if (pEid->Len >= sizeof(struct rt_add_ht_info_ie)) { + /* This IE allows extension, but we can ignore extra bytes beyond our knowledge , so only */ +- /* copy first sizeof(ADD_HT_INFO_IE) */ ++ /* copy first sizeof(struct rt_add_ht_info_ie) */ + NdisMoveMemory(pAddHtInfo, pEid->Octet, +- sizeof(ADD_HT_INFO_IE)); ++ sizeof(struct rt_add_ht_info_ie)); + + *(u16 *) (&pAddHtInfo->AddHtInfo2) = + cpu2le16(*(u16 *) +@@ -237,7 +237,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgL + } + + Length = Length + 2 + pEid->Len; +- pEid = (PEID_STRUCT) ((u8 *) pEid + 2 + pEid->Len); ++ pEid = (struct rt_eid *) ((u8 *) pEid + 2 + pEid->Len); + } + + return TRUE; +@@ -254,7 +254,7 @@ BOOLEAN PeerAssocRspSanity(IN PRTMP_ADAPTER pAd, void * pMsg, unsigned long MsgL + + ========================================================================== + */ +-BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, ++BOOLEAN PeerProbeReqSanity(struct rt_rtmp_adapter *pAd, + void * Msg, + unsigned long MsgLen, + u8 *pAddr2, +@@ -263,7 +263,7 @@ BOOLEAN PeerProbeReqSanity(IN PRTMP_ADAPTER pAd, + u8 Idx; + u8 RateLen; + char IeType; +- PFRAME_802_11 pFrame = (PFRAME_802_11) Msg; ++ struct rt_frame_802_11 * pFrame = (struct rt_frame_802_11 *) Msg; + + COPY_MAC_ADDR(pAddr2, pFrame->Hdr.Addr2); + +diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c +index 448e75f..cbe90a6 100644 +--- a/drivers/staging/rt2860/sta/sync.c ++++ b/drivers/staging/rt2860/sta/sync.c +@@ -50,8 +50,8 @@ + + ========================================================================== + */ +-void SyncStateMachineInit(IN PRTMP_ADAPTER pAd, +- IN STATE_MACHINE * Sm, OUT STATE_MACHINE_FUNC Trans[]) ++void SyncStateMachineInit(struct rt_rtmp_adapter *pAd, ++ struct rt_state_machine *Sm, OUT STATE_MACHINE_FUNC Trans[]) + { + StateMachineInit(Sm, Trans, MAX_SYNC_STATE, MAX_SYNC_MSG, + (STATE_MACHINE_FUNC) Drop, SYNC_IDLE, +@@ -115,7 +115,7 @@ void BeaconTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeout\n")); + +@@ -155,7 +155,7 @@ void ScanTimeout(void *SystemSpecific1, + void *FunctionContext, + void *SystemSpecific2, void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) FunctionContext; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; + + /* Do nothing if the driver is starting halt state. */ + /* This might happen when timer already been fired before cancel timer with mlmehalt */ +@@ -183,13 +183,13 @@ void ScanTimeout(void *SystemSpecific1, + MLME SCAN req state machine procedure + ========================================================================== + */ +-void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeScanReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType, BBPValue = 0; + BOOLEAN TimerCancelled; + unsigned long Now; + u16 Status; +- PHEADER_802_11 pHdr80211; ++ struct rt_header_802_11 * pHdr80211; + u8 *pOutBuffer = NULL; + int NStatus; + +@@ -241,7 +241,7 @@ void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + && (INFRA_ON(pAd))) { + NStatus = MlmeAllocateMemory(pAd, (void *)& pOutBuffer); + if (NStatus == NDIS_STATUS_SUCCESS) { +- pHdr80211 = (PHEADER_802_11) pOutBuffer; ++ pHdr80211 = (struct rt_header_802_11 *) pOutBuffer; + MgtMacHeaderInit(pAd, pHdr80211, + SUBTYPE_NULL_FUNC, 1, + pAd->CommonCfg.Bssid, +@@ -252,7 +252,7 @@ void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + /* Send using priority queue */ + MiniportMMRequest(pAd, 0, pOutBuffer, +- sizeof(HEADER_802_11)); ++ sizeof(struct rt_header_802_11)); + DBGPRINT(RT_DEBUG_TRACE, + ("MlmeScanReqAction -- Send PSM Data frame for off channel RM\n")); + MlmeFreeMemory(pAd, pOutBuffer); +@@ -297,12 +297,12 @@ void MlmeScanReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME JOIN req state machine procedure + ========================================================================== + */ +-void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeJoinReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 BBPValue = 0; +- BSS_ENTRY *pBss; ++ struct rt_bss_entry *pBss; + BOOLEAN TimerCancelled; +- HEADER_802_11 Hdr80211; ++ struct rt_header_802_11 Hdr80211; + int NStatus; + unsigned long FrameLen = 0; + u8 *pOutBuffer = NULL; +@@ -312,7 +312,7 @@ void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u8 ExtRateLen; + u8 ASupRate[] = { 0x8C, 0x12, 0x98, 0x24, 0xb0, 0x48, 0x60, 0x6C }; + u8 ASupRateLen = sizeof(ASupRate) / sizeof(u8); +- MLME_JOIN_REQ_STRUCT *pInfo = (MLME_JOIN_REQ_STRUCT *) (Elem->Msg); ++ struct rt_mlme_join_req *pInfo = (struct rt_mlme_join_req *)(Elem->Msg); + + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); +@@ -400,7 +400,7 @@ void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + BROADCAST_ADDR); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, ++ sizeof(struct rt_header_802_11), &Hdr80211, + 1, &SsidIe, + 1, &pAd->MlmeAux.SsidLen, + pAd->MlmeAux.SsidLen, +@@ -437,20 +437,20 @@ void MlmeJoinReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MLME START Request state machine procedure, starting an IBSS + ========================================================================== + */ +-void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void MlmeStartReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Ssid[MAX_LEN_OF_SSID], SsidLen; + BOOLEAN TimerCancelled; + + /* New for WPA security suites */ + u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ struct rt_ndis_802_11_variable_ies *pVIE = NULL; + LARGE_INTEGER TimeStamp; + BOOLEAN Privacy; + u16 Status; + + /* Init Variable IE structure */ +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; ++ pVIE = (struct rt_ndis_802_11_variable_ies *)VarIE; + pVIE->Length = 0; + TimeStamp.u.LowPart = 0; + TimeStamp.u.HighPart = 0; +@@ -506,7 +506,7 @@ void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], + &pAd->MlmeAux.HtCapability, + &pAd->MlmeAux.AddHtInfo); +- pAd->MlmeAux.HtCapabilityLen = sizeof(HT_CAPABILITY_IE); ++ pAd->MlmeAux.HtCapabilityLen = sizeof(struct rt_ht_capability_ie); + /* Not turn pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE here. */ + DBGPRINT(RT_DEBUG_TRACE, + ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n")); +@@ -517,11 +517,11 @@ void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + MCSSet[0], 16); + } + /* temporarily not support QOS in IBSS */ +- NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(EDCA_PARM)); ++ NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, sizeof(struct rt_edca_parm)); + NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, +- sizeof(QBSS_LOAD_PARM)); ++ sizeof(struct rt_qbss_load_parm)); + NdisZeroMemory(&pAd->MlmeAux.APQosCapability, +- sizeof(QOS_CAPABILITY_PARM)); ++ sizeof(struct rt_qos_capability_parm)); + + AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, FALSE); + AsicLockChannel(pAd, pAd->MlmeAux.Channel); +@@ -550,14 +550,14 @@ void MlmeStartReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + peer sends beacon back when scanning + ========================================================================== + */ +-void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeaconAtScanAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; + u8 Ssid[MAX_LEN_OF_SSID], BssType, Channel, NewChannel, + SsidLen, DtimCount, DtimPeriod, BcastFlag, MessageToMe; +- CF_PARM CfParm; ++ struct rt_cf_parm CfParm; + u16 BeaconPeriod, AtimWin, CapabilityInfo; +- PFRAME_802_11 pFrame; ++ struct rt_frame_802_11 * pFrame; + LARGE_INTEGER TimeStamp; + u8 Erp; + u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], +@@ -566,26 +566,26 @@ void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u16 LenVIE; + u8 CkipFlag; + u8 AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; ++ struct rt_edca_parm EdcaParm; ++ struct rt_qbss_load_parm QbssLoad; ++ struct rt_qos_capability_parm QosCapability; + unsigned long RalinkIe; + u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_ndis_802_11_variable_ies *pVIE = NULL; ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 HtCapabilityLen = 0, PreNHtCapabilityLen = 0; + u8 AddHtInfoLen; + u8 NewExtChannelOffset = 0xff; + + /* NdisFillMemory(Ssid, MAX_LEN_OF_SSID, 0x00); */ +- pFrame = (PFRAME_802_11) Elem->Msg; ++ pFrame = (struct rt_frame_802_11 *) Elem->Msg; + /* Init Variable IE structure */ +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; ++ pVIE = (struct rt_ndis_802_11_variable_ies *)VarIE; + pVIE->Length = 0; + + RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); ++ RTMPZeroMemory(&AddHtInfo, sizeof(struct rt_add_ht_info_ie)); + + if (PeerBeaconAndProbeRspSanity(pAd, + Elem->Msg, +@@ -668,14 +668,14 @@ void PeerBeaconAtScanAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + When waiting joining the (I)BSS, beacon received from external + ========================================================================== + */ +-void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeaconAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; + u8 Ssid[MAX_LEN_OF_SSID], SsidLen, BssType, Channel, MessageToMe, + DtimCount, DtimPeriod, BcastFlag, NewChannel; + LARGE_INTEGER TimeStamp; + u16 BeaconPeriod, AtimWin, CapabilityInfo; +- CF_PARM Cf; ++ struct rt_cf_parm Cf; + BOOLEAN TimerCancelled; + u8 Erp; + u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES], +@@ -684,16 +684,16 @@ void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u8 CkipFlag; + u16 LenVIE; + u8 AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; ++ struct rt_edca_parm EdcaParm; ++ struct rt_qbss_load_parm QbssLoad; ++ struct rt_qos_capability_parm QosCapability; + u16 Status; + u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; ++ struct rt_ndis_802_11_variable_ies *pVIE = NULL; + unsigned long RalinkIe; + unsigned long Idx; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 HtCapabilityLen = 0, PreNHtCapabilityLen = 0; + u8 AddHtInfoLen; + u8 NewExtChannelOffset = 0xff; +@@ -701,10 +701,10 @@ void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + BOOLEAN bAllowNrate = FALSE; + + /* Init Variable IE structure */ +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; ++ pVIE = (struct rt_ndis_802_11_variable_ies *)VarIE; + pVIE->Length = 0; + RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); ++ RTMPZeroMemory(&AddHtInfo, sizeof(struct rt_add_ht_info_ie)); + + if (PeerBeaconAndProbeRspSanity(pAd, + Elem->Msg, +@@ -993,20 +993,20 @@ void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + ) { + NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, +- &EdcaParm, sizeof(EDCA_PARM)); ++ &EdcaParm, sizeof(struct rt_edca_parm)); + NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, + &QbssLoad, +- sizeof(QBSS_LOAD_PARM)); ++ sizeof(struct rt_qbss_load_parm)); + NdisMoveMemory(&pAd->MlmeAux.APQosCapability, + &QosCapability, +- sizeof(QOS_CAPABILITY_PARM)); ++ sizeof(struct rt_qos_capability_parm)); + } else { + NdisZeroMemory(&pAd->MlmeAux.APEdcaParm, +- sizeof(EDCA_PARM)); ++ sizeof(struct rt_edca_parm)); + NdisZeroMemory(&pAd->MlmeAux.APQbssLoad, +- sizeof(QBSS_LOAD_PARM)); ++ sizeof(struct rt_qbss_load_parm)); + NdisZeroMemory(&pAd->MlmeAux.APQosCapability, +- sizeof(QOS_CAPABILITY_PARM)); ++ sizeof(struct rt_qos_capability_parm)); + } + + DBGPRINT(RT_DEBUG_TRACE, +@@ -1041,11 +1041,11 @@ void PeerBeaconAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerBeacon(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Bssid[MAC_ADDR_LEN], Addr2[MAC_ADDR_LEN]; + char Ssid[MAX_LEN_OF_SSID]; +- CF_PARM CfParm; ++ struct rt_cf_parm CfParm; + u8 SsidLen, MessageToMe = 0, BssType, Channel, NewChannel, index = 0; + u8 DtimCount = 0, DtimPeriod = 0, BcastFlag = 0; + u16 CapabilityInfo, AtimWin, BeaconPeriod; +@@ -1058,15 +1058,15 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + u8 CkipFlag; + u16 LenVIE; + u8 AironetCellPowerLimit; +- EDCA_PARM EdcaParm; +- QBSS_LOAD_PARM QbssLoad; +- QOS_CAPABILITY_PARM QosCapability; ++ struct rt_edca_parm EdcaParm; ++ struct rt_qbss_load_parm QbssLoad; ++ struct rt_qos_capability_parm QosCapability; + unsigned long RalinkIe; + /* New for WPA security suites */ + u8 VarIE[MAX_VIE_LEN]; /* Total VIE length = MAX_VIE_LEN - -5 */ +- NDIS_802_11_VARIABLE_IEs *pVIE = NULL; +- HT_CAPABILITY_IE HtCapability; +- ADD_HT_INFO_IE AddHtInfo; /* AP might use this additional ht info IE */ ++ struct rt_ndis_802_11_variable_ies *pVIE = NULL; ++ struct rt_ht_capability_ie HtCapability; ++ struct rt_add_ht_info_ie AddHtInfo; /* AP might use this additional ht info IE */ + u8 HtCapabilityLen, PreNHtCapabilityLen; + u8 AddHtInfoLen; + u8 NewExtChannelOffset = 0xff; +@@ -1076,10 +1076,10 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + return; + + /* Init Variable IE structure */ +- pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE; ++ pVIE = (struct rt_ndis_802_11_variable_ies *)VarIE; + pVIE->Length = 0; + RTMPZeroMemory(&HtCapability, sizeof(HtCapability)); +- RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE)); ++ RTMPZeroMemory(&AddHtInfo, sizeof(struct rt_add_ht_info_ie)); + + if (PeerBeaconAndProbeRspSanity(pAd, + Elem->Msg, +@@ -1120,7 +1120,7 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &NewExtChannelOffset, &LenVIE, pVIE)) { + BOOLEAN is_my_bssid, is_my_ssid; + unsigned long Bssidx, Now; +- BSS_ENTRY *pBss; ++ struct rt_bss_entry *pBss; + char RealRssi = + RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), + ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), +@@ -1251,7 +1251,7 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* BEACON from my BSSID - either IBSS or INFRA network */ + /* */ + if (is_my_bssid) { +- RXWI_STRUC RxWI; ++ struct rt_rxwi RxWI; + + pAd->StaCfg.DtimCount = DtimCount; + pAd->StaCfg.DtimPeriod = DtimPeriod; +@@ -1281,7 +1281,7 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) { + u8 MaxSupportedRateIn500Kbps = 0; + u8 idx; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_mac_table_entry *pEntry; + + /* supported rates array may not be sorted. sort it and find the maximum rate */ + for (idx = 0; idx < SupRateLen; idx++) { +@@ -1535,10 +1535,10 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + /* copy QOS related information */ + NdisMoveMemory(&pAd->CommonCfg.APQbssLoad, + &QbssLoad, +- sizeof(QBSS_LOAD_PARM)); ++ sizeof(struct rt_qbss_load_parm)); + NdisMoveMemory(&pAd->CommonCfg.APQosCapability, + &QosCapability, +- sizeof(QOS_CAPABILITY_PARM)); ++ sizeof(struct rt_qos_capability_parm)); + } + /* only INFRASTRUCTURE mode support power-saving feature */ + if ((INFRA_ON(pAd) && (pAd->StaCfg.Psm == PWR_SAVE)) +@@ -1703,13 +1703,13 @@ void PeerBeacon(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Receive PROBE REQ from remote peer when operating in IBSS mode + ========================================================================== + */ +-void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void PeerProbeReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 Addr2[MAC_ADDR_LEN]; + char Ssid[MAX_LEN_OF_SSID]; + u8 SsidLen; + u8 HtLen, AddHtLen, NewExtLen; +- HEADER_802_11 ProbeRspHdr; ++ struct rt_header_802_11 ProbeRspHdr; + int NStatus; + u8 *pOutBuffer = NULL; + unsigned long FrameLen = 0; +@@ -1748,7 +1748,7 @@ void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Rt802_11PreambleShort), 0, 0); + + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &ProbeRspHdr, ++ sizeof(struct rt_header_802_11), &ProbeRspHdr, + TIMESTAMP_LEN, &FakeTimestamp, + 2, &pAd->CommonCfg.BeaconPeriod, + 2, &CapabilityInfo, +@@ -1807,19 +1807,19 @@ void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + &TmpLen, 1, &HtCapIe, + 1, &HtLen, + sizeof +- (HT_CAPABILITY_IE), ++ (struct rt_ht_capability_ie), + &pAd->CommonCfg. + HtCapability, 1, + &AddHtInfoIe, 1, + &AddHtLen, + sizeof +- (ADD_HT_INFO_IE), ++ (struct rt_add_ht_info_ie), + &pAd->CommonCfg. + AddHTInfo, 1, + &NewExtChanIe, 1, + &NewExtLen, + sizeof +- (NEW_EXT_CHAN_IE), ++ (struct rt_new_ext_chan_ie), + &pAd->CommonCfg. + NewExtChanOffset, + END_OF_ARGS); +@@ -1833,7 +1833,7 @@ void PeerProbeReqAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + } + } + +-void BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void BeaconTimeoutAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, ("SYNC - BeaconTimeoutAtJoinAction\n")); +@@ -1848,7 +1848,7 @@ void BeaconTimeoutAtJoinAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Scan timeout procedure. basically add channel index by 1 and rescan + ========================================================================== + */ +-void ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void ScanTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + pAd->MlmeAux.Channel = NextChannel(pAd, pAd->MlmeAux.Channel); + +@@ -1868,7 +1868,7 @@ void ScanTimeoutAction(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-void InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenScan(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1884,7 +1884,7 @@ void InvalidStateWhenScan(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-void InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenJoin(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1900,7 +1900,7 @@ void InvalidStateWhenJoin(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + Description: + ========================================================================== + */ +-void InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void InvalidStateWhenStart(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u16 Status; + DBGPRINT(RT_DEBUG_TRACE, +@@ -1919,13 +1919,13 @@ void InvalidStateWhenStart(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) + + ========================================================================== + */ +-void EnqueuePsPoll(IN PRTMP_ADAPTER pAd) ++void EnqueuePsPoll(struct rt_rtmp_adapter *pAd) + { + + if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP) + pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE; + MiniportMMRequest(pAd, 0, (u8 *)& pAd->PsPollFrame, +- sizeof(PSPOLL_FRAME)); ++ sizeof(struct rt_pspoll_frame)); + } + + /* +@@ -1933,12 +1933,12 @@ void EnqueuePsPoll(IN PRTMP_ADAPTER pAd) + Description: + ========================================================================== + */ +-void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) ++void EnqueueProbeRequest(struct rt_rtmp_adapter *pAd) + { + int NState; + u8 *pOutBuffer; + unsigned long FrameLen = 0; +- HEADER_802_11 Hdr80211; ++ struct rt_header_802_11 Hdr80211; + + DBGPRINT(RT_DEBUG_TRACE, ("force out a ProbeRequest ...\n")); + +@@ -1949,7 +1949,7 @@ void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) + + /* this ProbeRequest explicitly specify SSID to reduce unwanted ProbeResponse */ + MakeOutgoingFrame(pOutBuffer, &FrameLen, +- sizeof(HEADER_802_11), &Hdr80211, ++ sizeof(struct rt_header_802_11), &Hdr80211, + 1, &SsidIe, + 1, &pAd->CommonCfg.SsidLen, + pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid, +@@ -1963,7 +1963,7 @@ void EnqueueProbeRequest(IN PRTMP_ADAPTER pAd) + + } + +-BOOLEAN ScanRunning(IN PRTMP_ADAPTER pAd) ++BOOLEAN ScanRunning(struct rt_rtmp_adapter *pAd) + { + return (pAd->Mlme.SyncMachine.CurrState == SCAN_LISTEN) ? TRUE : FALSE; + } +diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c +index abc730b..69b8a24 100644 +--- a/drivers/staging/rt2860/sta/wpa.c ++++ b/drivers/staging/rt2860/sta/wpa.c +@@ -58,7 +58,7 @@ void inc_byte_array(u8 * counter, int len); + + ======================================================================== + */ +-void RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) ++void RTMPReportMicError(struct rt_rtmp_adapter *pAd, struct rt_cipher_key *pWpaKey) + { + unsigned long Now; + u8 unicastKey = (pWpaKey->Type == PAIRWISE_KEY ? 1 : 0); +@@ -113,7 +113,7 @@ void RTMPReportMicError(IN PRTMP_ADAPTER pAd, IN PCIPHER_KEY pWpaKey) + + #define LENGTH_EAP_H 4 + /* If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)). */ +-int WpaCheckEapCode(IN PRTMP_ADAPTER pAd, ++int WpaCheckEapCode(struct rt_rtmp_adapter *pAd, + u8 *pFrame, u16 FrameLen, u16 OffSet) + { + +@@ -133,7 +133,7 @@ int WpaCheckEapCode(IN PRTMP_ADAPTER pAd, + return result; + } + +-void WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) ++void WpaSendMicFailureToWpaSupplicant(struct rt_rtmp_adapter *pAd, IN BOOLEAN bUnicast) + { + char custom[IW_CUSTOM_MAX] = { 0 }; + +@@ -147,12 +147,12 @@ void WpaSendMicFailureToWpaSupplicant(IN PRTMP_ADAPTER pAd, IN BOOLEAN bUnicast) + return; + } + +-void WpaMicFailureReportFrame(IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem) ++void WpaMicFailureReportFrame(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem) + { + u8 *pOutBuffer = NULL; + u8 Header802_3[14]; + unsigned long FrameLen = 0; +- EAPOL_PACKET Packet; ++ struct rt_eapol_packet Packet; + u8 Mic[16]; + BOOLEAN bUnicast; + +@@ -259,8 +259,8 @@ void WpaDisassocApAndBlockAssoc(void *SystemSpecific1, + void *SystemSpecific2, + void *SystemSpecific3) + { +- RTMP_ADAPTER *pAd = (PRTMP_ADAPTER) FunctionContext; +- MLME_DISASSOC_REQ_STRUCT DisassocReq; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)FunctionContext; ++ struct rt_mlme_disassoc_req DisassocReq; + + /* disassoc from current AP first */ + DBGPRINT(RT_DEBUG_TRACE, +@@ -268,16 +268,16 @@ void WpaDisassocApAndBlockAssoc(void *SystemSpecific1, + DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, + REASON_MIC_FAILURE); + MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, +- sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq); ++ sizeof(struct rt_mlme_disassoc_req), &DisassocReq); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_DISASSOC; + pAd->StaCfg.bBlockAssoc = TRUE; + } + +-void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) ++void WpaStaPairwiseKeySetting(struct rt_rtmp_adapter *pAd) + { +- PCIPHER_KEY pSharedKey; +- PMAC_TABLE_ENTRY pEntry; ++ struct rt_cipher_key *pSharedKey; ++ struct rt_mac_table_entry *pEntry; + + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + +@@ -287,7 +287,7 @@ void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + NdisMoveMemory(pAd->StaCfg.PTK, pEntry->PTK, LEN_PTK); + + /* Prepare pair-wise key information into shared key table */ +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ NdisZeroMemory(pSharedKey, sizeof(struct rt_cipher_key)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, &pAd->StaCfg.PTK[32], LEN_TKIP_EK); + NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.PTK[48], +@@ -303,7 +303,7 @@ void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + else + pSharedKey->CipherAlg = CIPHER_NONE; + +- /* Update these related information to MAC_TABLE_ENTRY */ ++ /* Update these related information to struct rt_mac_table_entry */ + NdisMoveMemory(pEntry->PairwiseKey.Key, &pAd->StaCfg.PTK[32], + LEN_TKIP_EK); + NdisMoveMemory(pEntry->PairwiseKey.RxMic, &pAd->StaCfg.PTK[48], +@@ -330,14 +330,14 @@ void WpaStaPairwiseKeySetting(IN PRTMP_ADAPTER pAd) + + } + +-void WpaStaGroupKeySetting(IN PRTMP_ADAPTER pAd) ++void WpaStaGroupKeySetting(struct rt_rtmp_adapter *pAd) + { +- PCIPHER_KEY pSharedKey; ++ struct rt_cipher_key *pSharedKey; + + pSharedKey = &pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId]; + + /* Prepare pair-wise key information into shared key table */ +- NdisZeroMemory(pSharedKey, sizeof(CIPHER_KEY)); ++ NdisZeroMemory(pSharedKey, sizeof(struct rt_cipher_key)); + pSharedKey->KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pSharedKey->Key, pAd->StaCfg.GTK, LEN_TKIP_EK); + NdisMoveMemory(pSharedKey->RxMic, &pAd->StaCfg.GTK[16], +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index d542f4f..04f81bd 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -51,7 +51,7 @@ extern unsigned long RTDebugLevel; + + extern u8 CipherWpa2Template[]; + +-typedef struct PACKED _RT_VERSION_INFO { ++struct PACKED rt_version_info { + u8 DriverVersionW; + u8 DriverVersionX; + u8 DriverVersionY; +@@ -59,7 +59,7 @@ typedef struct PACKED _RT_VERSION_INFO { + u32 DriverBuildYear; + u32 DriverBuildMonth; + u32 DriverBuildDay; +-} RT_VERSION_INFO, *PRT_VERSION_INFO; ++}; + + static __s32 ralinkrate[] = { 2, 4, 11, 22, /* CCK */ + 12, 18, 24, 36, 48, 72, 96, 108, /* OFDM */ +@@ -73,14 +73,14 @@ static __s32 ralinkrate[] = { 2, 4, 11, 22, /* CCK */ + 90, 180, 270, 360, 540, 720, 810, 900 + }; + +-int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg); ++int Set_SSID_Proc(struct rt_rtmp_adapter *pAdapter, char *arg); + +-int Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, char *arg); ++int Set_NetworkType_Proc(struct rt_rtmp_adapter *pAdapter, char *arg); + +-void RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) ++void RTMPAddKey(struct rt_rtmp_adapter *pAd, struct rt_ndis_802_11_key *pKey) + { + unsigned long KeyIdx; +- MAC_TABLE_ENTRY *pEntry; ++ struct rt_mac_table_entry *pEntry; + + DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n")); + +@@ -95,7 +95,7 @@ void RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + } + /* Update PTK */ + NdisZeroMemory(&pAd->SharedKey[BSS0][0], +- sizeof(CIPHER_KEY)); ++ sizeof(struct rt_cipher_key)); + pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, + pKey->KeyMaterial, LEN_TKIP_EK); +@@ -129,7 +129,7 @@ void RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + else + pAd->SharedKey[BSS0][0].CipherAlg = CIPHER_NONE; + +- /* Update these related information to MAC_TABLE_ENTRY */ ++ /* Update these related information to struct rt_mac_table_entry */ + pEntry = &pAd->MacTab.Content[BSSID_WCID]; + NdisMoveMemory(pEntry->PairwiseKey.Key, + pAd->SharedKey[BSS0][0].Key, +@@ -174,7 +174,7 @@ void RTMPAddKey(IN PRTMP_ADAPTER pAd, IN PNDIS_802_11_KEY pKey) + NdisZeroMemory(&pAd-> + SharedKey[BSS0][pAd->StaCfg. + DefaultKeyId], +- sizeof(CIPHER_KEY)); ++ sizeof(struct rt_cipher_key)); + pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = + LEN_TKIP_EK; + NdisMoveMemory(pAd-> +@@ -373,7 +373,7 @@ int rt_ioctl_siwfreq(struct net_device *dev, + struct iw_request_info *info, + struct iw_freq *freq, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + int chan = -1; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -407,7 +407,7 @@ int rt_ioctl_giwfreq(struct net_device *dev, + struct iw_request_info *info, + struct iw_freq *freq, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + u8 ch; + unsigned long m = 2412000; + +@@ -426,7 +426,7 @@ int rt_ioctl_giwfreq(struct net_device *dev, + int rt_ioctl_siwmode(struct net_device *dev, + struct iw_request_info *info, __u32 * mode, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -462,7 +462,7 @@ int rt_ioctl_siwmode(struct net_device *dev, + int rt_ioctl_giwmode(struct net_device *dev, + struct iw_request_info *info, __u32 * mode, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -482,7 +482,7 @@ int rt_ioctl_giwmode(struct net_device *dev, + int rt_ioctl_siwsens(struct net_device *dev, + struct iw_request_info *info, char *name, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -505,7 +505,7 @@ int rt_ioctl_giwrange(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + struct iw_range *range = (struct iw_range *)extra; + u16 val; + int i; +@@ -586,7 +586,7 @@ int rt_ioctl_siwap(struct net_device *dev, + struct iw_request_info *info, + struct sockaddr *ap_addr, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + NDIS_802_11_MAC_ADDRESS Bssid; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -626,7 +626,7 @@ int rt_ioctl_giwap(struct net_device *dev, + struct iw_request_info *info, + struct sockaddr *ap_addr, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -662,7 +662,7 @@ int rt_ioctl_giwap(struct net_device *dev, + * NB: various calculations are based on the orinoco/wavelan + * drivers for compatibility + */ +-static void set_quality(PRTMP_ADAPTER pAdapter, ++static void set_quality(struct rt_rtmp_adapter *pAdapter, + struct iw_quality *iq, signed char rssi) + { + __u8 ChannelQuality; +@@ -689,7 +689,7 @@ int rt_ioctl_iwaplist(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + struct sockaddr addr[IW_MAX_AP]; + struct iw_quality qual[IW_MAX_AP]; +@@ -726,7 +726,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + unsigned long Now; + int Status = NDIS_STATUS_SUCCESS; +@@ -802,7 +802,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + int i = 0; + char *current_ev = extra, *previous_ev = extra; + char *end_buf; +@@ -867,7 +867,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + iwe.cmd = SIOCGIWNAME; + + { +- PBSS_ENTRY pBssEntry = &pAdapter->ScanTab.BssEntry[i]; ++ struct rt_bss_entry *pBssEntry = &pAdapter->ScanTab.BssEntry[i]; + BOOLEAN isGonly = FALSE; + int rateCnt = 0; + +@@ -1052,7 +1052,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + 0) { + int rate_count = + sizeof(ralinkrate) / sizeof(__s32); +- HT_CAP_INFO capInfo = ++ struct rt_ht_cap_info capInfo = + pAdapter->ScanTab.BssEntry[i].HtCapability. + HtCapInfo; + int shortGI = +@@ -1129,7 +1129,7 @@ int rt_ioctl_siwessid(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *essid) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1166,7 +1166,7 @@ int rt_ioctl_giwessid(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *essid) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1204,7 +1204,7 @@ int rt_ioctl_siwnickn(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *nickname) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1227,7 +1227,7 @@ int rt_ioctl_giwnickn(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *data, char *nickname) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1244,7 +1244,7 @@ int rt_ioctl_siwrts(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *rts, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + u16 val; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -1274,7 +1274,7 @@ int rt_ioctl_giwrts(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *rts, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1295,7 +1295,7 @@ int rt_ioctl_siwfrag(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *frag, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + u16 val; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -1324,7 +1324,7 @@ int rt_ioctl_giwfrag(struct net_device *dev, + struct iw_request_info *info, + struct iw_param *frag, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1347,7 +1347,7 @@ int rt_ioctl_siwencode(struct net_device *dev, + struct iw_request_info *info, + struct iw_point *erq, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1451,7 +1451,7 @@ rt_ioctl_giwencode(struct net_device *dev, + struct iw_point *erq, char *key) + { + int kid; +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); + +@@ -1506,14 +1506,14 @@ rt_ioctl_giwencode(struct net_device *dev, + + } + +-void getBaInfo(IN PRTMP_ADAPTER pAd, char *pOutBuf) ++void getBaInfo(struct rt_rtmp_adapter *pAd, char *pOutBuf) + { + int i, j; +- BA_ORI_ENTRY *pOriBAEntry; +- BA_REC_ENTRY *pRecBAEntry; ++ struct rt_ba_ori_entry *pOriBAEntry; ++ struct rt_ba_rec_entry *pRecBAEntry; + + for (i = 0; i < MAX_LEN_OF_MAC_TABLE; i++) { +- PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i]; ++ struct rt_mac_table_entry *pEntry = &pAd->MacTab.Content[i]; + if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) + && (pEntry->Sst == SST_ASSOC)) + || (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh)) { +@@ -1566,11 +1566,11 @@ int rt_ioctl_siwmlme(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + struct iw_mlme *pMlme = (struct iw_mlme *)wrqu->data.pointer; +- MLME_QUEUE_ELEM MsgElem; +- MLME_DISASSOC_REQ_STRUCT DisAssocReq; +- MLME_DEAUTH_REQ_STRUCT DeAuthReq; ++ struct rt_mlme_queue_elem MsgElem; ++ struct rt_mlme_disassoc_req DisAssocReq; ++ struct rt_mlme_deauth_req DeAuthReq; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -1586,9 +1586,9 @@ int rt_ioctl_siwmlme(struct net_device *dev, + ("====> %s - IW_MLME_DEAUTH\n", __func__)); + COPY_MAC_ADDR(DeAuthReq.Addr, pAd->CommonCfg.Bssid); + DeAuthReq.Reason = pMlme->reason_code; +- MsgElem.MsgLen = sizeof(MLME_DEAUTH_REQ_STRUCT); ++ MsgElem.MsgLen = sizeof(struct rt_mlme_deauth_req); + NdisMoveMemory(MsgElem.Msg, &DeAuthReq, +- sizeof(MLME_DEAUTH_REQ_STRUCT)); ++ sizeof(struct rt_mlme_deauth_req)); + MlmeDeauthReqAction(pAd, &MsgElem); + if (INFRA_ON(pAd)) { + LinkDown(pAd, FALSE); +@@ -1605,9 +1605,9 @@ int rt_ioctl_siwmlme(struct net_device *dev, + + MsgElem.Machine = ASSOC_STATE_MACHINE; + MsgElem.MsgType = MT2_MLME_DISASSOC_REQ; +- MsgElem.MsgLen = sizeof(MLME_DISASSOC_REQ_STRUCT); ++ MsgElem.MsgLen = sizeof(struct rt_mlme_disassoc_req); + NdisMoveMemory(MsgElem.Msg, &DisAssocReq, +- sizeof(MLME_DISASSOC_REQ_STRUCT)); ++ sizeof(struct rt_mlme_disassoc_req)); + + pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC; + MlmeDisassocReqAction(pAd, &MsgElem); +@@ -1626,7 +1626,7 @@ int rt_ioctl_siwauth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + struct iw_param *param = &wrqu->param; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -1776,7 +1776,7 @@ int rt_ioctl_giwauth(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + struct iw_param *param = &wrqu->param; + + GET_PAD_FROM_NET_DEV(pAdapter, dev); +@@ -1815,12 +1815,12 @@ int rt_ioctl_giwauth(struct net_device *dev, + return 0; + } + +-void fnSetCipherKey(IN PRTMP_ADAPTER pAdapter, ++void fnSetCipherKey(struct rt_rtmp_adapter *pAdapter, + int keyIdx, + u8 CipherAlg, + IN BOOLEAN bGTK, IN struct iw_encode_ext *ext) + { +- NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY)); ++ NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(struct rt_cipher_key)); + pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK; + NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, + LEN_TKIP_EK); +@@ -1862,7 +1862,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAdapter = NULL; ++ struct rt_rtmp_adapter *pAdapter = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; + int keyIdx, alg = ext->alg; +@@ -1883,7 +1883,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev, + pAdapter->SharedKey[BSS0][keyIdx].CipherAlg = CIPHER_NONE; + AsicRemoveSharedKeyEntry(pAdapter, 0, (u8)keyIdx); + NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], +- sizeof(CIPHER_KEY)); ++ sizeof(struct rt_cipher_key)); + DBGPRINT(RT_DEBUG_TRACE, + ("%s::Remove all keys!(encoding->flags = %x)\n", + __func__, encoding->flags)); +@@ -2018,7 +2018,7 @@ rt_ioctl_giwencodeext(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + char *pKey = NULL; + struct iw_point *encoding = &wrqu->encoding; + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; +@@ -2096,7 +2096,7 @@ int rt_ioctl_siwgenie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -2123,7 +2123,7 @@ int rt_ioctl_giwgenie(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + + GET_PAD_FROM_NET_DEV(pAd, dev); + +@@ -2163,7 +2163,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + struct iw_pmksa *pPmksa = (struct iw_pmksa *)wrqu->data.pointer; + int CachedIdx = 0, idx = 0; + +@@ -2176,7 +2176,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + switch (pPmksa->cmd) { + case IW_PMKSA_FLUSH: + NdisZeroMemory(pAd->StaCfg.SavedPMK, +- sizeof(BSSID_INFO) * PMKID_NO); ++ sizeof(struct rt_bssid_info) * PMKID_NO); + DBGPRINT(RT_DEBUG_TRACE, + ("rt_ioctl_siwpmksa - IW_PMKSA_FLUSH\n")); + break; +@@ -2267,7 +2267,7 @@ int rt_ioctl_siwrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + u32 rate = wrqu->bitrate.value, fixed = wrqu->bitrate.fixed; + + GET_PAD_FROM_NET_DEV(pAd, dev); +@@ -2323,7 +2323,7 @@ int rt_ioctl_giwrate(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) + { +- PRTMP_ADAPTER pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + int rate_index = 0, rate_count = 0; + HTTRANSMIT_SETTING ht_setting; + /* Remove to global variable +@@ -2451,7 +2451,7 @@ int rt28xx_sta_ioctl(IN struct net_device *net_dev, + IN OUT struct ifreq *rq, int cmd) + { + struct os_cookie *pObj; +- RTMP_ADAPTER *pAd = NULL; ++ struct rt_rtmp_adapter *pAd = NULL; + struct iwreq *wrq = (struct iwreq *)rq; + BOOLEAN StateMachineTouched = FALSE; + int Status = NDIS_STATUS_SUCCESS; +@@ -2639,14 +2639,14 @@ int rt28xx_sta_ioctl(IN struct net_device *net_dev, + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) ++int Set_SSID_Proc(struct rt_rtmp_adapter *pAdapter, char *arg) + { +- NDIS_802_11_SSID Ssid, *pSsid = NULL; ++ struct rt_ndis_802_11_ssid Ssid, *pSsid = NULL; + BOOLEAN StateMachineTouched = FALSE; + int success = TRUE; + + if (strlen(arg) <= MAX_LEN_OF_SSID) { +- NdisZeroMemory(&Ssid, sizeof(NDIS_802_11_SSID)); ++ NdisZeroMemory(&Ssid, sizeof(struct rt_ndis_802_11_ssid)); + if (strlen(arg) != 0) { + NdisMoveMemory(Ssid.Ssid, arg, strlen(arg)); + Ssid.SsidLength = strlen(arg); +@@ -2695,7 +2695,7 @@ int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) + MlmeEnqueue(pAdapter, + MLME_CNTL_STATE_MACHINE, + OID_802_11_SSID, +- sizeof(NDIS_802_11_SSID), (void *) pSsid); ++ sizeof(struct rt_ndis_802_11_ssid), (void *) pSsid); + + StateMachineTouched = TRUE; + DBGPRINT(RT_DEBUG_TRACE, +@@ -2718,7 +2718,7 @@ int Set_SSID_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) + TRUE if all parameters are OK, FALSE otherwise + ========================================================================== + */ +-int Set_NetworkType_Proc(IN PRTMP_ADAPTER pAdapter, char *arg) ++int Set_NetworkType_Proc(struct rt_rtmp_adapter *pAdapter, char *arg) + { + u32 Value = 0; + +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 65b0fd7..c1d1fb5 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -148,12 +148,12 @@ int const rtusb_usb_id_len = + + MODULE_DEVICE_TABLE(usb, rtusb_usb_id); + +-static void rt2870_disconnect(IN struct usb_device *dev, IN PRTMP_ADAPTER pAd); ++static void rt2870_disconnect(struct usb_device *dev, struct rt_rtmp_adapter *pAd); + + static int __devinit rt2870_probe(IN struct usb_interface *intf, + IN struct usb_device *usb_dev, + IN const struct usb_device_id *dev_id, +- IN RTMP_ADAPTER ** ppAd); ++ struct rt_rtmp_adapter ** ppAd); + + #ifndef PF_NOFREEZE + #define PF_NOFREEZE 0 +@@ -164,7 +164,7 @@ extern int rt28xx_open(struct net_device *net_dev); + + static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + IN struct usb_interface *intf, +- IN RTMP_ADAPTER * pAd); ++ struct rt_rtmp_adapter *pAd); + + /* + ======================================================================== +@@ -222,7 +222,7 @@ static void rtusb_disconnect(struct usb_interface *intf); + + static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + IN struct usb_interface *intf, +- IN RTMP_ADAPTER * pAd) ++ struct rt_rtmp_adapter *pAd) + { + struct usb_host_interface *iface_desc; + unsigned long BulkOutIdx; +@@ -299,7 +299,7 @@ static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + static int rtusb_probe(struct usb_interface *intf, + const struct usb_device_id *id) + { +- RTMP_ADAPTER *pAd; ++ struct rt_rtmp_adapter *pAd; + struct usb_device *dev; + int rv; + +@@ -316,7 +316,7 @@ static int rtusb_probe(struct usb_interface *intf, + static void rtusb_disconnect(struct usb_interface *intf) + { + struct usb_device *dev = interface_to_usbdev(intf); +- PRTMP_ADAPTER pAd; ++ struct rt_rtmp_adapter *pAd; + + pAd = usb_get_intfdata(intf); + usb_set_intfdata(intf, NULL); +@@ -338,7 +338,7 @@ resume:rt2870_resume, + + #ifdef CONFIG_PM + +-void RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RT2870RejectPendingPackets(struct rt_rtmp_adapter *pAd) + { + /* clear PS packets */ + /* clear TxSw packets */ +@@ -347,7 +347,7 @@ void RT2870RejectPendingPackets(IN PRTMP_ADAPTER pAd) + static int rt2870_suspend(struct usb_interface *intf, pm_message_t state) + { + struct net_device *net_dev; +- PRTMP_ADAPTER pAd = usb_get_intfdata(intf); ++ struct rt_rtmp_adapter *pAd = usb_get_intfdata(intf); + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_suspend()\n")); + net_dev = pAd->net_dev; +@@ -365,7 +365,7 @@ static int rt2870_suspend(struct usb_interface *intf, pm_message_t state) + static int rt2870_resume(struct usb_interface *intf) + { + struct net_device *net_dev; +- PRTMP_ADAPTER pAd = usb_get_intfdata(intf); ++ struct rt_rtmp_adapter *pAd = usb_get_intfdata(intf); + + DBGPRINT(RT_DEBUG_TRACE, ("===> rt2870_resume()\n")); + +@@ -418,13 +418,13 @@ Note: + */ + int MlmeThread(IN void *Context) + { +- RTMP_ADAPTER *pAd; +- RTMP_OS_TASK *pTask; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_rtmp_os_task *pTask; + int status; + status = 0; + +- pTask = (RTMP_OS_TASK *) Context; +- pAd = (PRTMP_ADAPTER) pTask->priv; ++ pTask = (struct rt_rtmp_os_task *)Context; ++ pAd = (struct rt_rtmp_adapter *)pTask->priv; + + RtmpOSTaskCustomize(pTask); + +@@ -487,13 +487,13 @@ Note: + */ + int RTUSBCmdThread(IN void *Context) + { +- RTMP_ADAPTER *pAd; +- RTMP_OS_TASK *pTask; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_rtmp_os_task *pTask; + int status; + status = 0; + +- pTask = (RTMP_OS_TASK *) Context; +- pAd = (PRTMP_ADAPTER) pTask->priv; ++ pTask = (struct rt_rtmp_os_task *)Context; ++ pAd = (struct rt_rtmp_adapter *)pTask->priv; + + RtmpOSTaskCustomize(pTask); + +@@ -522,7 +522,7 @@ int RTUSBCmdThread(IN void *Context) + } + + if (pAd && !pAd->PM_FlgSuspend) { /* Clear the CmdQElements. */ +- CmdQElmt *pCmdQElmt = NULL; ++ struct rt_cmdqelmt *pCmdQElmt = NULL; + + NdisAcquireSpinLock(&pAd->CmdQLock); + pAd->CmdQ.CmdQState = RTMP_TASK_STAT_STOPED; +@@ -570,9 +570,9 @@ int RTUSBCmdThread(IN void *Context) + + } + +-void RTUSBWatchDog(IN RTMP_ADAPTER * pAd) ++void RTUSBWatchDog(struct rt_rtmp_adapter *pAd) + { +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + int idx; + unsigned long irqFlags; + PURB pUrb; +@@ -635,7 +635,7 @@ void RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + ) { + /* FIXME: Following code just support single bulk out. If you wanna support multiple bulk out. Modify it! */ + pHTTXContext = +- (PHT_TX_CONTEXT) (&pAd->TxContext[idx]); ++ (struct rt_ht_tx_context *)(&pAd->TxContext[idx]); + if (pHTTXContext->IRPPending) { /* Check TxContext. */ + pUrb = pHTTXContext->pUrb; + +@@ -644,19 +644,19 @@ void RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + pUrb->transfer_buffer_length; + isDataPacket = TRUE; + } else if (idx == MGMTPIPEIDX) { +- PTX_CONTEXT pMLMEContext, pNULLContext, +- pPsPollContext; ++ struct rt_tx_context *pMLMEContext, *pNULLContext, ++ *pPsPollContext; + + /*Check MgmtContext. */ + pMLMEContext = +- (PTX_CONTEXT) (pAd->MgmtRing. ++ (struct rt_tx_context *)(pAd->MgmtRing. + Cell[pAd->MgmtRing. + TxDmaIdx]. + AllocVa); + pPsPollContext = +- (PTX_CONTEXT) (&pAd->PsPollContext); ++ (struct rt_tx_context *)(&pAd->PsPollContext); + pNULLContext = +- (PTX_CONTEXT) (&pAd->NullContext); ++ (struct rt_tx_context *)(&pAd->NullContext); + + if (pMLMEContext->IRPPending) { + ASSERT(pMLMEContext-> +@@ -724,7 +724,7 @@ void RTUSBWatchDog(IN RTMP_ADAPTER * pAd) + /* For Sigma debug, dump the ba_reordering sequence. */ + if ((needDumpSeq == TRUE) && (pAd->CommonCfg.bDisableReordering == 0)) { + u16 Idx; +- PBA_REC_ENTRY pBAEntry = NULL; ++ struct rt_ba_rec_entry *pBAEntry = NULL; + u8 count = 0; + struct reordering_mpdu *mpdu_blk; + +@@ -768,7 +768,7 @@ Return Value: + Note: + ======================================================================== + */ +-static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) ++static void rt2870_disconnect(struct usb_device *dev, struct rt_rtmp_adapter *pAd) + { + DBGPRINT(RT_DEBUG_ERROR, + ("rtusb_disconnect: unregister usbnet usb-%s-%s\n", +@@ -805,13 +805,13 @@ static void rt2870_disconnect(struct usb_device *dev, PRTMP_ADAPTER pAd) + static int __devinit rt2870_probe(IN struct usb_interface *intf, + IN struct usb_device *usb_dev, + IN const struct usb_device_id *dev_id, +- IN RTMP_ADAPTER ** ppAd) ++ struct rt_rtmp_adapter ** ppAd) + { + struct net_device *net_dev = NULL; +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *) NULL; ++ struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)NULL; + int status, rv; + void *handle; +- RTMP_OS_NETDEV_OP_HOOK netDevHook; ++ struct rt_rtmp_os_netdev_op_hook netDevHook; + + DBGPRINT(RT_DEBUG_TRACE, ("===>rt2870_probe()!\n")); + +@@ -820,7 +820,7 @@ static int __devinit rt2870_probe(IN struct usb_interface *intf, + /* goto err_out; */ + + /*RtmpDevInit============================================= */ +- /* Allocate RTMP_ADAPTER adapter structure */ ++ /* Allocate struct rt_rtmp_adapter adapter structure */ + handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL); + if (handle == NULL) { + printk +diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h +index 05254c8..6199ae6 100644 +--- a/drivers/staging/rt2860/wpa.h ++++ b/drivers/staging/rt2860/wpa.h +@@ -48,7 +48,7 @@ + + /* The length is the EAPoL-Key frame except key data field. */ + /* Please refer to 802.11i-2004 ,Figure 43u in p.78 */ +-#define LEN_EAPOL_KEY_MSG (sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE) ++#define LEN_EAPOL_KEY_MSG (sizeof(struct rt_key_descripter) - MAX_LEN_OF_RSNIE) + + /* EAP Code Type. */ + #define EAP_CODE_REQUEST 1 +@@ -195,7 +195,7 @@ + #define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) + + /* EAPOL Key Information definition within Key descriptor format */ +-typedef struct PACKED _KEY_INFO { ++struct PACKED rt_key_info { + u8 KeyMic:1; + u8 Secure:1; + u8 Error:1; +@@ -207,12 +207,12 @@ typedef struct PACKED _KEY_INFO { + u8 KeyIndex:2; + u8 Install:1; + u8 KeyAck:1; +-} KEY_INFO, *PKEY_INFO; ++}; + + /* EAPOL Key descriptor format */ +-typedef struct PACKED _KEY_DESCRIPTER { ++struct PACKED rt_key_descripter { + u8 Type; +- KEY_INFO KeyInfo; ++ struct rt_key_info KeyInfo; + u8 KeyLength[2]; + u8 ReplayCounter[LEN_KEY_DESC_REPLAY]; + u8 KeyNonce[LEN_KEY_DESC_NONCE]; +@@ -222,34 +222,34 @@ typedef struct PACKED _KEY_DESCRIPTER { + u8 KeyMic[LEN_KEY_DESC_MIC]; + u8 KeyDataLen[2]; + u8 KeyData[MAX_LEN_OF_RSNIE]; +-} KEY_DESCRIPTER, *PKEY_DESCRIPTER; ++}; + +-typedef struct PACKED _EAPOL_PACKET { ++struct PACKED rt_eapol_packet { + u8 ProVer; + u8 ProType; + u8 Body_Len[2]; +- KEY_DESCRIPTER KeyDesc; +-} EAPOL_PACKET, *PEAPOL_PACKET; ++ struct rt_key_descripter KeyDesc; ++}; + + /*802.11i D10 page 83 */ +-typedef struct PACKED _GTK_ENCAP { ++struct PACKED rt_gtk_encap { + u8 Kid:2; + u8 tx:1; + u8 rsv:5; + u8 rsv1; + u8 GTK[TKIP_GTK_LENGTH]; +-} GTK_ENCAP, *PGTK_ENCAP; ++}; + +-typedef struct PACKED _KDE_ENCAP { ++struct PACKED rt_kde_encap { + u8 Type; + u8 Len; + u8 OUI[3]; + u8 DataType; +- GTK_ENCAP GTKEncap; +-} KDE_ENCAP, *PKDE_ENCAP; ++ struct rt_gtk_encap GTKEncap; ++}; + + /* For WPA1 */ +-typedef struct PACKED _RSNIE { ++struct PACKED rt_rsnie { + u8 oui[4]; + u16 version; + u8 mcast[4]; +@@ -257,25 +257,25 @@ typedef struct PACKED _RSNIE { + struct PACKED { + u8 oui[4]; + } ucast[1]; +-} RSNIE, *PRSNIE; ++}; + + /* For WPA2 */ +-typedef struct PACKED _RSNIE2 { ++struct PACKED rt_rsnie2 { + u16 version; + u8 mcast[4]; + u16 ucount; + struct PACKED { + u8 oui[4]; + } ucast[1]; +-} RSNIE2, *PRSNIE2; ++}; + + /* AKM Suite */ +-typedef struct PACKED _RSNIE_AUTH { ++struct PACKED rt_rsnie_auth { + u16 acount; + struct PACKED { + u8 oui[4]; + } auth[1]; +-} RSNIE_AUTH, *PRSNIE_AUTH; ++}; + + typedef union PACKED _RSN_CAPABILITIES { + struct PACKED { +@@ -288,14 +288,14 @@ typedef union PACKED _RSN_CAPABILITIES { + u16 word; + } RSN_CAPABILITIES, *PRSN_CAPABILITIES; + +-typedef struct PACKED _EAP_HDR { ++struct PACKED rt_eap_hdr { + u8 ProVer; + u8 ProType; + u8 Body_Len[2]; + u8 code; + u8 identifier; + u8 length[2]; /* including code and identifier, followed by length-2 octets of data */ +-} EAP_HDR, *PEAP_HDR; ++}; + + /* For supplicant state machine states. 802.11i Draft 4.1, p. 97 */ + /* We simplified it */ +@@ -338,32 +338,32 @@ typedef enum _WpaMixPairCipher { + WPA_TKIPAES_WPA2_TKIPAES = 0x0F, + } WPA_MIX_PAIR_CIPHER; + +-typedef struct PACKED _RSN_IE_HEADER_STRUCT { ++struct PACKED rt_rsn_ie_header { + u8 Eid; + u8 Length; + u16 Version; /* Little endian format */ +-} RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; ++}; + + /* Cipher suite selector types */ +-typedef struct PACKED _CIPHER_SUITE_STRUCT { ++struct PACKED rt_cipher_suite_struct { + u8 Oui[3]; + u8 Type; +-} CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; ++}; + + /* Authentication and Key Management suite selector */ +-typedef struct PACKED _AKM_SUITE_STRUCT { ++struct PACKED rt_akm_suite { + u8 Oui[3]; + u8 Type; +-} AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; ++}; + + /* RSN capability */ +-typedef struct PACKED _RSN_CAPABILITY { ++struct PACKED rt_rsn_capability { + u16 Rsv:10; + u16 GTKSAReplayCnt:2; + u16 PTKSAReplayCnt:2; + u16 NoPairwise:1; + u16 PreAuth:1; +-} RSN_CAPABILITY, *PRSN_CAPABILITY; ++}; + + /*======================================== + The prototype is defined in cmm_wpa.c +diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c +index d2e967b..379780c 100644 +--- a/drivers/staging/rt2870/common/rtusb_bulk.c ++++ b/drivers/staging/rt2870/common/rtusb_bulk.c +@@ -58,8 +58,8 @@ void RTUSB_FILL_BULK_URB(struct urb *pUrb, + + } + +-void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, +- IN PTX_CONTEXT pTxContext, ++void RTUSBInitTxDesc(struct rt_rtmp_adapter *pAd, ++ struct rt_tx_context *pTxContext, + u8 BulkOutPipeId, IN usb_complete_t Func) + { + PURB pUrb; +@@ -96,8 +96,8 @@ void RTUSBInitTxDesc(IN PRTMP_ADAPTER pAd, + + } + +-void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, +- IN PHT_TX_CONTEXT pTxContext, ++void RTUSBInitHTTxDesc(struct rt_rtmp_adapter *pAd, ++ struct rt_ht_tx_context *pTxContext, + u8 BulkOutPipeId, + unsigned long BulkOutSize, IN usb_complete_t Func) + { +@@ -128,7 +128,7 @@ void RTUSBInitHTTxDesc(IN PRTMP_ADAPTER pAd, + + } + +-void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) ++void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext) + { + PURB pUrb; + struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; +@@ -179,15 +179,15 @@ void RTUSBInitRxDesc(IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext) + if(1 /*!(in_interrupt() & 0xffff0000)*/) \ + RTMP_IRQ_UNLOCK((pLock), IrqFlags); + +-void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, ++void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, + u8 BulkOutPipeId, u8 Index) + { + +- PHT_TX_CONTEXT pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + PURB pUrb; + int ret = 0; +- PTXINFO_STRUC pTxInfo, pLastTxInfo = NULL; +- PTXWI_STRUC pTxWI; ++ struct rt_txinfo *pTxInfo, *pLastTxInfo = NULL; ++ struct rt_txwi * pTxWI; + unsigned long TmpBulkEndPos, ThisBulkSize; + unsigned long IrqFlags = 0, IrqFlags2 = 0; + u8 *pWirelessPkt, *pAppendant; +@@ -273,9 +273,9 @@ void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + } + + do { +- pTxInfo = (PTXINFO_STRUC) & pWirelessPkt[TmpBulkEndPos]; ++ pTxInfo = (struct rt_txinfo *)& pWirelessPkt[TmpBulkEndPos]; + pTxWI = +- (PTXWI_STRUC) & pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; ++ (struct rt_txwi *) & pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; + + if (pAd->bForcePrintTX == TRUE) + DBGPRINT(RT_DEBUG_TRACE, +@@ -497,12 +497,12 @@ void RTUSBBulkOutDataPacket(IN PRTMP_ADAPTER pAd, + + void RTUSBBulkOutDataPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { +- PHT_TX_CONTEXT pHTTXContext; +- PRTMP_ADAPTER pAd; ++ struct rt_ht_tx_context *pHTTXContext; ++ struct rt_rtmp_adapter *pAd; + struct os_cookie *pObj; + u8 BulkOutPipeId; + +- pHTTXContext = (PHT_TX_CONTEXT) pUrb->context; ++ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context; + pAd = pHTTXContext->pAd; + pObj = (struct os_cookie *)pAd->OS_Cookie; + +@@ -544,9 +544,9 @@ void RTUSBBulkOutDataPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkOutNullFrame(struct rt_rtmp_adapter *pAd) + { +- PTX_CONTEXT pNullContext = &(pAd->NullContext); ++ struct rt_tx_context *pNullContext = &(pAd->NullContext); + PURB pUrb; + int ret = 0; + unsigned long IrqFlags; +@@ -591,12 +591,12 @@ void RTUSBBulkOutNullFrame(IN PRTMP_ADAPTER pAd) + /* NULL frame use BulkOutPipeId = 0 */ + void RTUSBBulkOutNullFrameComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pNullContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pNullContext; + int Status; + struct os_cookie *pObj; + +- pNullContext = (PTX_CONTEXT) pUrb->context; ++ pNullContext = (struct rt_tx_context *)pUrb->context; + pAd = pNullContext->pAd; + Status = pUrb->status; + +@@ -618,15 +618,15 @@ void RTUSBBulkOutNullFrameComplete(struct urb *pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index) ++void RTUSBBulkOutMLMEPacket(struct rt_rtmp_adapter *pAd, u8 Index) + { +- PTX_CONTEXT pMLMEContext; ++ struct rt_tx_context *pMLMEContext; + PURB pUrb; + int ret = 0; + unsigned long IrqFlags; + + pMLMEContext = +- (PTX_CONTEXT) pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; ++ (struct rt_tx_context *)pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa; + pUrb = pMLMEContext->pUrb; + + if ((pAd->MgmtRing.TxSwFreeIdx >= MGMT_RING_SIZE) || +@@ -686,14 +686,14 @@ void RTUSBBulkOutMLMEPacket(IN PRTMP_ADAPTER pAd, u8 Index) + + void RTUSBBulkOutMLMEPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { +- PTX_CONTEXT pMLMEContext; +- PRTMP_ADAPTER pAd; ++ struct rt_tx_context *pMLMEContext; ++ struct rt_rtmp_adapter *pAd; + int Status; + struct os_cookie *pObj; + int index; + + /*DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); */ +- pMLMEContext = (PTX_CONTEXT) pUrb->context; ++ pMLMEContext = (struct rt_tx_context *)pUrb->context; + pAd = pMLMEContext->pAd; + pObj = (struct os_cookie *)pAd->OS_Cookie; + Status = pUrb->status; +@@ -716,9 +716,9 @@ void RTUSBBulkOutMLMEPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs) + + ======================================================================== + */ +-void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkOutPsPoll(struct rt_rtmp_adapter *pAd) + { +- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext); ++ struct rt_tx_context *pPsPollContext = &(pAd->PsPollContext); + PURB pUrb; + int ret = 0; + unsigned long IrqFlags; +@@ -760,12 +760,12 @@ void RTUSBBulkOutPsPoll(IN PRTMP_ADAPTER pAd) + /* PS-Poll frame use BulkOutPipeId = 0 */ + void RTUSBBulkOutPsPollComplete(struct urb *pUrb, struct pt_regs * pt_regs) + { +- PRTMP_ADAPTER pAd; +- PTX_CONTEXT pPsPollContext; ++ struct rt_rtmp_adapter *pAd; ++ struct rt_tx_context *pPsPollContext; + int Status; + struct os_cookie *pObj; + +- pPsPollContext = (PTX_CONTEXT) pUrb->context; ++ pPsPollContext = (struct rt_tx_context *)pUrb->context; + pAd = pPsPollContext->pAd; + Status = pUrb->status; + +@@ -774,9 +774,9 @@ void RTUSBBulkOutPsPollComplete(struct urb *pUrb, struct pt_regs * pt_regs) + tasklet_hi_schedule(&pObj->pspoll_frame_complete_task); + } + +-void DoBulkIn(IN RTMP_ADAPTER * pAd) ++void DoBulkIn(struct rt_rtmp_adapter *pAd) + { +- PRX_CONTEXT pRxContext; ++ struct rt_rx_context *pRxContext; + PURB pUrb; + int ret = 0; + unsigned long IrqFlags; +@@ -845,9 +845,9 @@ void DoBulkIn(IN RTMP_ADAPTER * pAd) + fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_RESET_IN_PROGRESS | \ + fRTMP_ADAPTER_REMOVE_IN_PROGRESS) + +-void RTUSBBulkReceive(IN PRTMP_ADAPTER pAd) ++void RTUSBBulkReceive(struct rt_rtmp_adapter *pAd) + { +- PRX_CONTEXT pRxContext; ++ struct rt_rx_context *pRxContext; + unsigned long IrqFlags; + + /* sanity check */ +@@ -917,11 +917,11 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs) + /* use a receive tasklet to handle received packets; */ + /* or sometimes hardware IRQ will be disabled here, so we can not */ + /* use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< */ +- PRX_CONTEXT pRxContext; +- PRTMP_ADAPTER pAd; ++ struct rt_rx_context *pRxContext; ++ struct rt_rtmp_adapter *pAd; + struct os_cookie *pObj; + +- pRxContext = (PRX_CONTEXT) pUrb->context; ++ pRxContext = (struct rt_rx_context *)pUrb->context; + pAd = pRxContext->pAd; + pObj = (struct os_cookie *)pAd->OS_Cookie; + +@@ -943,7 +943,7 @@ void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs) + + ======================================================================== + */ +-void RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) ++void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd) + { + /* BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. */ + if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX) +@@ -1033,10 +1033,10 @@ void RTUSBKickBulkOut(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) ++void RTUSBCleanUpDataBulkOutQueue(struct rt_rtmp_adapter *pAd) + { + u8 Idx; +- PHT_TX_CONTEXT pTxContext; ++ struct rt_ht_tx_context *pTxContext; + + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpDataBulkOutQueue\n")); + +@@ -1066,7 +1066,7 @@ void RTUSBCleanUpDataBulkOutQueue(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) ++void RTUSBCleanUpMLMEBulkOutQueue(struct rt_rtmp_adapter *pAd) + { + DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpMLMEBulkOutQueue\n")); + DBGPRINT(RT_DEBUG_TRACE, ("<---CleanUpMLMEBulkOutQueue\n")); +@@ -1085,7 +1085,7 @@ void RTUSBCleanUpMLMEBulkOutQueue(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingIRPs(struct rt_rtmp_adapter *pAd) + { + RTUSBCancelPendingBulkInIRP(pAd); + RTUSBCancelPendingBulkOutIRP(pAd); +@@ -1104,9 +1104,9 @@ void RTUSBCancelPendingIRPs(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingBulkInIRP(struct rt_rtmp_adapter *pAd) + { +- PRX_CONTEXT pRxContext; ++ struct rt_rx_context *pRxContext; + u32 i; + + DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->RTUSBCancelPendingBulkInIRP\n")); +@@ -1136,14 +1136,14 @@ void RTUSBCancelPendingBulkInIRP(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) ++void RTUSBCancelPendingBulkOutIRP(struct rt_rtmp_adapter *pAd) + { +- PHT_TX_CONTEXT pHTTXContext; +- PTX_CONTEXT pMLMEContext; +- PTX_CONTEXT pBeaconContext; +- PTX_CONTEXT pNullContext; +- PTX_CONTEXT pPsPollContext; +- PTX_CONTEXT pRTSContext; ++ struct rt_ht_tx_context *pHTTXContext; ++ struct rt_tx_context *pMLMEContext; ++ struct rt_tx_context *pBeaconContext; ++ struct rt_tx_context *pNullContext; ++ struct rt_tx_context *pPsPollContext; ++ struct rt_tx_context *pRTSContext; + u32 i, Idx; + /* unsigned int IrqFlags; */ + /* spinlock_t *pLock; */ +@@ -1173,7 +1173,7 @@ void RTUSBCancelPendingBulkOutIRP(IN PRTMP_ADAPTER pAd) + + /*RTMP_IRQ_LOCK(pLock, IrqFlags); */ + for (i = 0; i < MGMT_RING_SIZE; i++) { +- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa; ++ pMLMEContext = (struct rt_tx_context *)pAd->MgmtRing.Cell[i].AllocVa; + if (pMLMEContext && (pMLMEContext->IRPPending == TRUE)) { + + /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */ +diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c +index 471fd4e..4583764 100644 +--- a/drivers/staging/rt2870/common/rtusb_data.c ++++ b/drivers/staging/rt2870/common/rtusb_data.c +@@ -44,7 +44,7 @@ + extern u8 Phy11BGNextRateUpward[]; /* defined in mlme.c */ + extern u8 EpToQueue[]; + +-void REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, ++void REPORT_AMSDU_FRAMES_TO_LLC(struct rt_rtmp_adapter *pAd, + u8 *pData, unsigned long DataSize) + { + void *pPacket; +@@ -85,7 +85,7 @@ void REPORT_AMSDU_FRAMES_TO_LLC(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, ++int RTUSBFreeDescriptorRequest(struct rt_rtmp_adapter *pAd, + u8 BulkOutPipeId, + u32 NumberRequired) + { +@@ -93,7 +93,7 @@ int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, + /* u32 Index; */ + int Status = NDIS_STATUS_FAILURE; + unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +@@ -127,11 +127,11 @@ int RTUSBFreeDescriptorRequest(IN PRTMP_ADAPTER pAd, + return (Status); + } + +-int RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, ++int RTUSBFreeDescriptorRelease(struct rt_rtmp_adapter *pAd, + u8 BulkOutPipeId) + { + unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; + RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); +@@ -141,10 +141,10 @@ int RTUSBFreeDescriptorRelease(IN RTMP_ADAPTER * pAd, + return (NDIS_STATUS_SUCCESS); + } + +-BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, u8 BulkOutPipeId) ++BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId) + { + unsigned long IrqFlags; +- HT_TX_CONTEXT *pHTTXContext; ++ struct rt_ht_tx_context *pHTTXContext; + BOOLEAN needQueBack = FALSE; + + pHTTXContext = &pAd->TxContext[BulkOutPipeId]; +@@ -191,17 +191,17 @@ BOOLEAN RTUSBNeedQueueBackForAgg(IN RTMP_ADAPTER * pAd, u8 BulkOutPipeId) + + ======================================================================== + */ +-void RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) ++void RTUSBRejectPendingPackets(struct rt_rtmp_adapter *pAd) + { + u8 Index; +- PQUEUE_ENTRY pEntry; ++ struct rt_queue_entry *pEntry; + void *pPacket; +- PQUEUE_HEADER pQueue; ++ struct rt_queue_header *pQueue; + + for (Index = 0; Index < 4; Index++) { + NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]); + while (pAd->TxSwQueue[Index].Head != NULL) { +- pQueue = (PQUEUE_HEADER) & (pAd->TxSwQueue[Index]); ++ pQueue = (struct rt_queue_header *)& (pAd->TxSwQueue[Index]); + pEntry = RemoveHeadQueue(pQueue); + pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); +@@ -240,8 +240,8 @@ void RTUSBRejectPendingPackets(IN PRTMP_ADAPTER pAd) + ======================================================================== + */ + +-void RTMPWriteTxInfo(IN PRTMP_ADAPTER pAd, +- IN PTXINFO_STRUC pTxInfo, ++void RTMPWriteTxInfo(struct rt_rtmp_adapter *pAd, ++ struct rt_txinfo *pTxInfo, + u16 USBDMApktLen, + IN BOOLEAN bWiv, + u8 QueueSel, u8 NextValid, u8 TxBurst) +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index d15a92e..34443f2 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -56,7 +56,7 @@ + ======================================================================== + */ + +-static int RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) ++static int RTUSBFirmwareRun(struct rt_rtmp_adapter *pAd) + { + int Status; + +@@ -83,7 +83,7 @@ static int RTUSBFirmwareRun(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, ++int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd, + u8 *pFwImage, unsigned long FwLen) + { + u32 MacReg; +@@ -109,7 +109,7 @@ int RTUSBFirmwareWrite(IN PRTMP_ADAPTER pAd, + return Status; + } + +-int RTUSBVenderReset(IN PRTMP_ADAPTER pAd) ++int RTUSBVenderReset(struct rt_rtmp_adapter *pAd) + { + int Status; + DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n")); +@@ -137,7 +137,7 @@ int RTUSBVenderReset(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int RTUSBMultiRead(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiRead(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length) + { + int Status; +@@ -166,7 +166,7 @@ int RTUSBMultiRead(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData) + { + int Status; +@@ -180,7 +180,7 @@ int RTUSBMultiWrite_OneByte(IN PRTMP_ADAPTER pAd, + return Status; + } + +-int RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, ++int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length) + { + int Status; +@@ -202,7 +202,7 @@ int RTUSBMultiWrite(IN PRTMP_ADAPTER pAd, + return Status; + } + +-int RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, ++int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 Value) + { + int Status; +@@ -231,7 +231,7 @@ int RTUSBSingleWrite(IN RTMP_ADAPTER * pAd, + + ======================================================================== + */ +-int RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBReadMACRegister(struct rt_rtmp_adapter *pAd, + u16 Offset, u32 *pValue) + { + int Status = 0; +@@ -266,7 +266,7 @@ int RTUSBReadMACRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteMACRegister(struct rt_rtmp_adapter *pAd, + u16 Offset, u32 Value) + { + int Status; +@@ -297,7 +297,7 @@ int RTUSBWriteMACRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd, + u8 Id, u8 *pValue) + { + BBP_CSR_CFG_STRUC BbpCsr; +@@ -383,7 +383,7 @@ int RTUSBReadBBPRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteBBPRegister(struct rt_rtmp_adapter *pAd, + u8 Id, u8 Value) + { + BBP_CSR_CFG_STRUC BbpCsr; +@@ -438,7 +438,7 @@ int RTUSBWriteBBPRegister(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, u32 Value) ++int RTUSBWriteRFRegister(struct rt_rtmp_adapter *pAd, u32 Value) + { + PHY_CSR4_STRUC PhyCsr4; + u32 i = 0; +@@ -486,7 +486,7 @@ int RTUSBWriteRFRegister(IN PRTMP_ADAPTER pAd, u32 Value) + + ======================================================================== + */ +-int RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, ++int RTUSBReadEEPROM(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length) + { + int Status = STATUS_SUCCESS; +@@ -515,7 +515,7 @@ int RTUSBReadEEPROM(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, ++int RTUSBWriteEEPROM(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length) + { + int Status = STATUS_SUCCESS; +@@ -528,7 +528,7 @@ int RTUSBWriteEEPROM(IN PRTMP_ADAPTER pAd, + return Status; + } + +-int RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, ++int RTUSBReadEEPROM16(struct rt_rtmp_adapter *pAd, + u16 offset, u16 *pData) + { + int status; +@@ -557,7 +557,7 @@ int RTUSBReadEEPROM16(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) ++void RTUSBPutToSleep(struct rt_rtmp_adapter *pAd) + { + u32 value; + +@@ -585,7 +585,7 @@ void RTUSBPutToSleep(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-int RTUSBWakeUp(IN PRTMP_ADAPTER pAd) ++int RTUSBWakeUp(struct rt_rtmp_adapter *pAd) + { + int Status; + +@@ -612,7 +612,7 @@ int RTUSBWakeUp(IN PRTMP_ADAPTER pAd) + + ======================================================================== + */ +-void RTUSBInitializeCmdQ(IN PCmdQ cmdq) ++void RTUSBInitializeCmdQ(struct rt_cmdq *cmdq) + { + cmdq->head = NULL; + cmdq->tail = NULL; +@@ -635,15 +635,15 @@ void RTUSBInitializeCmdQ(IN PCmdQ cmdq) + + ======================================================================== + */ +-int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd, + IN NDIS_OID Oid, + IN BOOLEAN SetInformation, + void *pInformationBuffer, + u32 InformationBufferLength) + { + int status; +- PCmdQElmt cmdqelmt = NULL; +- RTMP_OS_TASK *pTask = &pAd->cmdQTask; ++ struct rt_cmdqelmt *cmdqelmt = NULL; ++ struct rt_rtmp_os_task *pTask = &pAd->cmdQTask; + + #ifdef KTHREAD_SUPPORT + if (pTask->kthread_task == NULL) +@@ -654,7 +654,7 @@ int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + #endif + return (NDIS_STATUS_RESOURCES); + +- status = os_alloc_mem(pAd, (u8 **) (&cmdqelmt), sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (u8 **) (&cmdqelmt), sizeof(struct rt_cmdqelmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); + +@@ -716,18 +716,18 @@ int RTUSBEnqueueCmdFromNdis(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, ++int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd, + IN NDIS_OID Oid, + void *pInformationBuffer, + u32 InformationBufferLength) + { + int status; +- PCmdQElmt cmdqelmt = NULL; ++ struct rt_cmdqelmt *cmdqelmt = NULL; + +- status = os_alloc_mem(pAd, (u8 **) & cmdqelmt, sizeof(CmdQElmt)); ++ status = os_alloc_mem(pAd, (u8 **) & cmdqelmt, sizeof(struct rt_cmdqelmt)); + if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) + return (NDIS_STATUS_RESOURCES); +- NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt)); ++ NdisZeroMemory(cmdqelmt, sizeof(struct rt_cmdqelmt)); + + if (InformationBufferLength > 0) { + status = +@@ -785,7 +785,7 @@ int RTUSBEnqueueInternalCmd(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-void RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) ++void RTUSBDequeueCmd(struct rt_cmdq *cmdq, struct rt_cmdqelmt * * pcmdqelmt) + { + *pcmdqelmt = cmdq->head; + +@@ -833,7 +833,7 @@ void RTUSBDequeueCmd(IN PCmdQ cmdq, OUT PCmdQElmt * pcmdqelmt) + + ======================================================================== + */ +-int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, ++int RTUSB_VendorRequest(struct rt_rtmp_adapter *pAd, + u32 TransferFlags, + u8 RequestType, + u8 Request, +@@ -954,7 +954,7 @@ int RTUSB_VendorRequest(IN PRTMP_ADAPTER pAd, + + ======================================================================== + */ +-int RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) ++int RTUSB_ResetDevice(struct rt_rtmp_adapter *pAd) + { + int Status = TRUE; + +@@ -963,9 +963,9 @@ int RTUSB_ResetDevice(IN PRTMP_ADAPTER pAd) + return Status; + } + +-void CMDHandler(IN PRTMP_ADAPTER pAd) ++void CMDHandler(struct rt_rtmp_adapter *pAd) + { +- PCmdQElmt cmdqelmt; ++ struct rt_cmdqelmt *cmdqelmt; + u8 *pData; + int NdisStatus = NDIS_STATUS_SUCCESS; + /* unsigned long Now = 0; */ +@@ -1055,8 +1055,8 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + u32 MACValue; + u8 Index; + int ret = 0; +- PHT_TX_CONTEXT pHTTXContext; +-/* RTMP_TX_RING *pTxRing; */ ++ struct rt_ht_tx_context *pHTTXContext; ++/* struct rt_rtmp_tx_ring *pTxRing; */ + unsigned long IrqFlags; + + DBGPRINT_RAW(RT_DEBUG_TRACE, +@@ -1276,34 +1276,34 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + u8 + pendingContext + = 0; +- PHT_TX_CONTEXT ++ struct rt_ht_tx_context * + pHTTXContext + = +- (PHT_TX_CONTEXT) ++ (struct rt_ht_tx_context *) + (&pAd-> + TxContext + [pAd-> + bulkResetPipeid]); +- PTX_CONTEXT ++ struct rt_tx_context * + pMLMEContext + = +- (PTX_CONTEXT) ++ (struct rt_tx_context *) + (pAd-> + MgmtRing. + Cell[pAd-> + MgmtRing. + TxDmaIdx]. + AllocVa); +- PTX_CONTEXT ++ struct rt_tx_context * + pNULLContext + = +- (PTX_CONTEXT) ++ (struct rt_tx_context *) + (&pAd-> + PsPollContext); +- PTX_CONTEXT ++ struct rt_tx_context * + pPsPollContext + = +- (PTX_CONTEXT) ++ (struct rt_tx_context *) + (&pAd-> + NullContext); + +@@ -1383,7 +1383,7 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer + for (i = 0; i < (RX_RING_SIZE); i++) + { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]); + + pRxContext->pAd = pAd; + pRxContext->InUse = FALSE; +@@ -1490,7 +1490,7 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer + for (i = 0; i < (RX_RING_SIZE); i++) + { +- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); ++ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]); + + pRxContext->pAd = pAd; + pRxContext->InUse = FALSE; +@@ -1506,7 +1506,7 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + pAd->CommonCfg. + NumOfBulkInIRP; i++) { + /*RTUSBBulkReceive(pAd); */ +- PRX_CONTEXT pRxContext; ++ struct rt_rx_context *pRxContext; + PURB pUrb; + int ret = 0; + unsigned long IrqFlags; +@@ -1606,11 +1606,11 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + + case CMDTHREAD_SET_ASIC_WCID: + { +- RT_SET_ASIC_WCID SetAsicWcid; ++ struct rt_set_asic_wcid SetAsicWcid; + u16 offset; + u32 MACValue, MACRValue = 0; + SetAsicWcid = +- *((PRT_SET_ASIC_WCID) (pData)); ++ *((struct rt_set_asic_wcid *)(pData)); + + if (SetAsicWcid.WCID >= + MAX_LEN_OF_MAC_TABLE) +@@ -1672,12 +1672,12 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + + case CMDTHREAD_SET_ASIC_WCID_CIPHER: + { +- RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; ++ struct rt_set_asic_wcid_attri SetAsicWcidAttri; + u16 offset; + u32 MACRValue = 0; + SHAREDKEY_MODE_STRUC csr1; + SetAsicWcidAttri = +- *((PRT_SET_ASIC_WCID_ATTRI) ++ *((struct rt_set_asic_wcid_attri *) + (pData)); + + if (SetAsicWcidAttri.WCID >= +@@ -1773,9 +1773,9 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + /*Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> */ + case RT_CMD_SET_KEY_TABLE: /*General call for AsicAddPairwiseKeyEntry() */ + { +- RT_ADD_PAIRWISE_KEY_ENTRY KeyInfo; ++ struct rt_add_pairwise_key_entry KeyInfo; + KeyInfo = +- *((PRT_ADD_PAIRWISE_KEY_ENTRY) ++ *((struct rt_add_pairwise_key_entry *) + (pData)); + AsicAddPairwiseKeyEntry(pAd, + KeyInfo.MacAddr, +@@ -1788,12 +1788,12 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + + case RT_CMD_SET_RX_WCID_TABLE: /*General call for RTMPAddWcidAttributeEntry() */ + { +- PMAC_TABLE_ENTRY pEntry; ++ struct rt_mac_table_entry *pEntry; + u8 KeyIdx = 0; + u8 CipherAlg = CIPHER_NONE; + u8 ApIdx = BSS0; + +- pEntry = (PMAC_TABLE_ENTRY) (pData); ++ pEntry = (struct rt_mac_table_entry *)(pData); + + RTMPAddWcidAttributeEntry(pAd, + ApIdx, +@@ -1806,8 +1806,8 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + + case CMDTHREAD_SET_CLIENT_MAC_ENTRY: + { +- MAC_TABLE_ENTRY *pEntry; +- pEntry = (MAC_TABLE_ENTRY *) pData; ++ struct rt_mac_table_entry *pEntry; ++ pEntry = (struct rt_mac_table_entry *)pData; + + { + AsicRemovePairwiseKeyEntry(pAd, +@@ -1908,12 +1908,12 @@ void CMDHandler(IN PRTMP_ADAPTER pAd) + { + u32 i; + u32 KeyIdx; +- PNDIS_802_11_WEP pWepKey; ++ struct rt_ndis_802_11_wep *pWepKey; + + DBGPRINT(RT_DEBUG_TRACE, + ("CmdThread::OID_802_11_ADD_WEP \n")); + +- pWepKey = (PNDIS_802_11_WEP) pData; ++ pWepKey = (struct rt_ndis_802_11_wep *)pData; + KeyIdx = pWepKey->KeyIndex & 0x0fffffff; + + /* it is a shared key */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch b/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch new file mode 100644 index 000000000..e40e311e2 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch @@ -0,0 +1,51 @@ +From 8dd16dd0927be159d12fd610ca191805bb3e12ce Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= +Date: Fri, 6 Nov 2009 14:49:00 +0100 +Subject: [PATCH 29/42] Staging: rt2860: remove remainders of /etc reading stuff +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit ad26848142950277172a983e7e525fa8806a6300 upstream. + +The stuff that tries to read a file from /etc is already removed, so +this patch just removes the last remainders. + +Signed-off-by: Sebastian Dalfuß +Bartlomiej Zolnierkiewicz +--- + drivers/staging/rt2860/TODO | 1 - + drivers/staging/rt2860/rt_linux.h | 2 -- + 2 files changed, 0 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/rt2860/TODO b/drivers/staging/rt2860/TODO +index 6158dc2..8e2f6ee 100644 +--- a/drivers/staging/rt2860/TODO ++++ b/drivers/staging/rt2860/TODO +@@ -9,7 +9,6 @@ TODO: + - checkpatch.pl clean + - sparse clean + - port to in-kernel 80211 stack and common rt2x00 infrastructure +- - remove reading from /etc/ config files + - review by the wireless developer community + + Please send any patches or complaints about this driver to Greg +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index e1eb740..7efc109 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -80,11 +80,9 @@ + ***********************************************************************************/ + + #ifdef RTMP_MAC_PCI +-#define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" + #define STA_DRIVER_VERSION "2.1.0.0" + #endif /* RTMP_MAC_PCI // */ + #ifdef RTMP_MAC_USB +-#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" + #define STA_DRIVER_VERSION "2.1.0.0" + /* RT3070 version: 2.1.1.0 */ + #endif /* RTMP_MAC_USB // */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch b/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch new file mode 100644 index 000000000..52a26bc6c --- /dev/null +++ b/debian/patches/features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch @@ -0,0 +1,65 @@ +From 3d283405b185f624a030e7495c8da0ed53bd5004 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= +Date: Fri, 6 Nov 2009 14:49:28 +0100 +Subject: [PATCH 30/42] Staging: rt2860: remove superfluous newlines +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit d6dbc0126beedc43f19abb5870c892f7bd105b2c upstream. + +This patch is based on next-20091106. +This tiny patch removes a few quite unnecessary extra newlines from +DBGPRINT() and printk() strings. + +Signed-off-by: Sebastian Dalfuß +Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/rtmp_init.c | 2 +- + drivers/staging/rt2860/common/rtmp_mcu.c | 2 +- + drivers/staging/rt2860/rt_linux.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index 46e7a2a..d3c7c17 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -181,7 +181,7 @@ int RTMPAllocAdapterBlock(void *handle, + } + pAd->BeaconBuf = pBeaconBuf; + DBGPRINT(RT_DEBUG_OFF, +- ("\n\n=== pAd = %p, size = %d ===\n\n", pAd, ++ ("=== pAd = %p, size = %d ===\n", pAd, + (u32)sizeof(struct rt_rtmp_adapter))); + + /* Init spin locks */ +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 683abad..9f03901 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -163,7 +163,7 @@ int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd) + + if (Index > 1000) { + DBGPRINT(RT_DEBUG_ERROR, +- ("NICLoadFirmware: MCU is not ready\n\n\n")); ++ ("NICLoadFirmware: MCU is not ready\n")); + Status = NDIS_STATUS_FAILURE; + } + +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index a94593c..d84ac32 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -340,7 +340,7 @@ int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd, + if (pPacket == NULL) { + *ppPacket = NULL; + #ifdef DEBUG +- printk("RTMPAllocateNdisPacket Fail\n\n"); ++ printk("RTMPAllocateNdisPacket Fail\n"); + #endif + return NDIS_STATUS_FAILURE; + } +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch b/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch new file mode 100644 index 000000000..7c64e7d1c --- /dev/null +++ b/debian/patches/features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch @@ -0,0 +1,189 @@ +From 4891eb9a786182e5cd08a40b9d0b3ee0f1a8c7d7 Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Mon, 9 Nov 2009 17:19:45 +0100 +Subject: [PATCH 31/42] Staging: rt28x0: fix comments in chip/mac_pci.h + +commit 956cd45d03efd10f8b780d54b6e5e28d0afc2ef9 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/chip/mac_pci.h | 72 ++++++++++++++++---------------- + 1 files changed, 36 insertions(+), 36 deletions(-) + +diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h +index 8dbadd0..bc704ac 100644 +--- a/drivers/staging/rt2860/chip/mac_pci.h ++++ b/drivers/staging/rt2860/chip/mac_pci.h +@@ -43,10 +43,10 @@ + #include "../rtmp_iface.h" + #include "../rtmp_dot11.h" + +-// +-// Device ID & Vendor ID related definitions, +-// NOTE: you should not add the new VendorID/DeviceID here unless you not sure it belongs to what chip. +-// ++/* */ ++/* Device ID & Vendor ID related definitions, */ ++/* NOTE: you should not add the new VendorID/DeviceID here unless you not sure it belongs to what chip. */ ++/* */ + #define NIC_PCI_VENDOR_ID 0x1814 + #define PCIBUS_INTEL_VENDOR 0x8086 + +@@ -66,22 +66,22 @@ + + #define AUX_CTRL 0x10c + +-// +-// TX descriptor format, Tx ring, Mgmt Ring +-// ++/* */ ++/* TX descriptor format, Tx ring, Mgmt Ring */ ++/* */ + struct PACKED rt_txd { +- // Word 0 ++ /* Word 0 */ + u32 SDPtr0; +- // Word 1 ++ /* Word 1 */ + u32 SDLen1:14; + u32 LastSec1:1; + u32 Burst:1; + u32 SDLen0:14; + u32 LastSec0:1; + u32 DMADONE:1; +- //Word2 ++ /*Word2 */ + u32 SDPtr1; +- //Word3 ++ /*Word3 */ + u32 rsv2:24; + u32 WIV:1; /* Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition */ + u32 QSEL:2; /* select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA */ +@@ -91,21 +91,21 @@ struct PACKED rt_txd { + u32 ICO:1; /* */ + }; + +-// +-// Rx descriptor format, Rx Ring +-// ++/* */ ++/* Rx descriptor format, Rx Ring */ ++/* */ + typedef struct PACKED rt_rxd { +- // Word 0 ++ /* Word 0 */ + u32 SDP0; +- // Word 1 ++ /* Word 1 */ + u32 SDL1:14; + u32 Rsv:2; + u32 SDL0:14; + u32 LS0:1; + u32 DDONE:1; +- // Word 2 ++ /* Word 2 */ + u32 SDP1; +- // Word 3 ++ /* Word 3 */ + u32 BA:1; + u32 DATA:1; + u32 NULLDATA:1; +@@ -141,9 +141,9 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + + /* ----------------- EEPROM Related MACRO ----------------- */ + +-// 8051 firmware image for RT2860 - base address = 0x4000 ++/* 8051 firmware image for RT2860 - base address = 0x4000 */ + #define FIRMWARE_IMAGE_BASE 0x2000 +-#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte ++#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 /* 8kbyte */ + + /* ----------------- Frimware Related MACRO ----------------- */ + #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ +@@ -222,25 +222,25 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + /* ----------------- RX Related MACRO ----------------- */ + + /* ----------------- ASIC Related MACRO ----------------- */ +-// reset MAC of a station entry to 0x000000000000 ++/* reset MAC of a station entry to 0x000000000000 */ + #define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid) \ + AsicDelWcidTab(pAd, Wcid); + +-// add this entry into ASIC RX WCID search table ++/* add this entry into ASIC RX WCID search table */ + #define RTMP_STA_ENTRY_ADD(pAd, pEntry) \ + AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr); + +-// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet +-// Set MAC register value according operation mode ++/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */ ++/* Set MAC register value according operation mode */ + #define RTMP_UPDATE_PROTECT(pAd) \ + AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0); +-// end johnli ++/* end johnli */ + +-// remove Pair-wise key material from ASIC ++/* remove Pair-wise key material from ASIC */ + #define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid) \ + AsicRemovePairwiseKeyEntry(pAd, BssIdx, (u8)Wcid); + +-// add Client security information into ASIC WCID table and IVEIV table ++/* add Client security information into ASIC WCID table and IVEIV table */ + #define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ + RTMPAddWcidAttributeEntry(pAd, apidx, KeyID, \ + pAd->SharedKey[apidx][KeyID].CipherAlg, pEntry); +@@ -257,7 +257,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + pAd->SharedKey[apidx][KeyID].CipherAlg, \ + pEntry); } + +-// Insert the BA bitmap to ASIC for the Wcid entry ++/* Insert the BA bitmap to ASIC for the Wcid entry */ + #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ + do{ \ + u32 _Value = 0, _Offset; \ +@@ -267,8 +267,8 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + RTMP_IO_WRITE32((_pAd), _Offset, _Value);\ + }while(0) + +-// Remove the BA bitmap from ASIC for the Wcid entry +-// bitmap field starts at 0x10000 in ASIC WCID table ++/* Remove the BA bitmap from ASIC for the Wcid entry */ ++/* bitmap field starts at 0x10000 in ASIC WCID table */ + #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ + do{ \ + u32 _Value = 0, _Offset; \ +@@ -280,10 +280,10 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + + /* ----------------- Interface Related MACRO ----------------- */ + +-// +-// Enable & Disable NIC interrupt via writing interrupt mask register +-// Since it use ADAPTER structure, it have to be put after structure definition. +-// ++/* */ ++/* Enable & Disable NIC interrupt via writing interrupt mask register */ ++/* Since it use ADAPTER structure, it have to be put after structure definition. */ ++/* */ + #define RTMP_ASIC_INTERRUPT_DISABLE(_pAd) \ + do{ \ + RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, 0x0); /* 0: disable */ \ +@@ -324,7 +324,7 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + /* ----------------- Power Save Related MACRO ----------------- */ + #define RTMP_PS_POLL_ENQUEUE(pAd) EnqueuePsPoll(pAd) + +-// For RTMPPCIePowerLinkCtrlRestore () function ++/* For RTMPPCIePowerLinkCtrlRestore () function */ + #define RESTORE_HALT 1 + #define RESTORE_WAKEUP 2 + #define RESTORE_CLOSE 3 +@@ -352,4 +352,4 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { + #define RTMP_MLME_RADIO_OFF(pAd) \ + RT28xxPciMlmeRadioOFF(pAd); + +-#endif //__MAC_PCI_H__ // ++#endif /*__MAC_PCI_H__ // */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch b/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch new file mode 100644 index 000000000..c0a5433ff --- /dev/null +++ b/debian/patches/features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch @@ -0,0 +1,830 @@ +From 765924a54d765b8ba92b14ce5e47ffedf7a38c96 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dalfu=C3=9F?= +Date: Sat, 7 Nov 2009 17:31:12 +0100 +Subject: [PATCH 32/42] Staging: rt2860: reduce superfluous exclamation marks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit 06aea994cf03ec589b198ff718ae7fee4ec41659 upstream. + +This removes superfluous exclamation marks from strings and comments, and +also three spelling typos. + +Signed-off-by: Sebastian Dalfuß +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/ba_action.c | 4 +- + drivers/staging/rt2860/common/cmm_aes.c | 2 +- + drivers/staging/rt2860/common/cmm_asic.c | 2 +- + drivers/staging/rt2860/common/cmm_data.c | 8 ++-- + drivers/staging/rt2860/common/cmm_data_2860.c | 2 +- + drivers/staging/rt2860/common/cmm_data_pci.c | 2 +- + drivers/staging/rt2860/common/cmm_mac_pci.c | 2 +- + drivers/staging/rt2860/common/cmm_mac_usb.c | 22 +++++++------- + drivers/staging/rt2860/common/cmm_sanity.c | 4 +- + drivers/staging/rt2860/common/cmm_tkip.c | 2 +- + drivers/staging/rt2860/common/cmm_wep.c | 2 +- + drivers/staging/rt2860/common/cmm_wpa.c | 4 +- + drivers/staging/rt2860/common/mlme.c | 8 ++-- + drivers/staging/rt2860/common/rt_rf.c | 2 +- + drivers/staging/rt2860/common/rtmp_init.c | 6 ++-- + drivers/staging/rt2860/oid.h | 4 +- + drivers/staging/rt2860/rt_linux.c | 4 +- + drivers/staging/rt2860/rt_linux.h | 2 +- + drivers/staging/rt2860/rt_main_dev.c | 2 +- + drivers/staging/rt2860/rtmp_chip.h | 2 +- + drivers/staging/rt2860/rtmp_def.h | 2 +- + drivers/staging/rt2860/sta/assoc.c | 4 +- + drivers/staging/rt2860/sta/connect.c | 40 ++++++++++++------------ + drivers/staging/rt2860/sta/rtmp_data.c | 12 ++++---- + drivers/staging/rt2860/sta/sanity.c | 2 +- + drivers/staging/rt2860/sta_ioctl.c | 14 ++++---- + drivers/staging/rt2860/usb_main_dev.c | 4 +- + 27 files changed, 82 insertions(+), 82 deletions(-) + +diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c +index 69eea40..174f2a7 100644 +--- a/drivers/staging/rt2860/common/ba_action.c ++++ b/drivers/staging/rt2860/common/ba_action.c +@@ -1481,7 +1481,7 @@ static void ba_enqueue_reordering_packet(struct rt_rtmp_adapter *pAd, + NdisReleaseSpinLock(&pBAEntry->RxReRingLock); + } else { + DBGPRINT(RT_DEBUG_ERROR, +- ("!!! (%d) Can't allocate reordering mpdu blk\n", ++ (" (%d) Can't allocate reordering mpdu blk\n", + pBAEntry->list.qlen)); + + /* +@@ -1542,7 +1542,7 @@ void Indicate_AMPDU_Packet(struct rt_rtmp_adapter *pAd, + } + pBAEntry = &pAd->BATable.BARecEntry[Idx]; + } else { +- /* impossible !!! */ ++ /* impossible ! */ + ASSERT(0); + /* release packet */ + RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, +diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c +index 6730d78..250357c 100644 +--- a/drivers/staging/rt2860/common/cmm_aes.c ++++ b/drivers/staging/rt2860/common/cmm_aes.c +@@ -1279,7 +1279,7 @@ void AES_GTK_KEY_UNWRAP(u8 * key, + + if (R == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +- ("!!!AES_GTK_KEY_UNWRAP: no memory!!!\n")); ++ ("AES_GTK_KEY_UNWRAP: no memory!\n")); + return; + } + /* End of if */ +diff --git a/drivers/staging/rt2860/common/cmm_asic.c b/drivers/staging/rt2860/common/cmm_asic.c +index fafba27..4d77e83 100644 +--- a/drivers/staging/rt2860/common/cmm_asic.c ++++ b/drivers/staging/rt2860/common/cmm_asic.c +@@ -1005,7 +1005,7 @@ void AsicSwitchChannel(struct rt_rtmp_adapter *pAd, u8 Channel, IN BOOLEAN bScan + void AsicResetBBPAgent(struct rt_rtmp_adapter *pAd) + { + BBP_CSR_CFG_STRUC BbpCsr; +- DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit.!! \n")); ++ DBGPRINT(RT_DEBUG_ERROR, ("Reset BBP Agent busy bit!\n")); + /* Still need to find why BBP agent keeps busy, but in fact, hardware still function ok. Now clear busy first. */ + RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word); + BbpCsr.field.Busy = 0; +diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c +index 2d2c311..68263ce 100644 +--- a/drivers/staging/rt2860/common/cmm_data.c ++++ b/drivers/staging/rt2860/common/cmm_data.c +@@ -397,7 +397,7 @@ int MlmeHardTransmitMgmtRing(struct rt_rtmp_adapter *pAd, + && (pAd->CommonCfg.bIEEE80211H == 1) + && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { + DBGPRINT(RT_DEBUG_ERROR, +- ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++ ("MlmeHardTransmit --> radar detect not in normal mode!\n")); + /* if (!IrqState) */ + RTMP_SEM_UNLOCK(&pAd->MgmtRingLock); + return (NDIS_STATUS_FAILURE); +@@ -964,7 +964,7 @@ u16 RTMPCalcDuration(struct rt_rtmp_adapter *pAd, u8 Rate, unsigned long Size) + IRQL = PASSIVE_LEVEL + IRQL = DISPATCH_LEVEL + +- See also : BASmartHardTransmit() !!! ++ See also : BASmartHardTransmit() ! + + ======================================================================== + */ +@@ -1708,7 +1708,7 @@ BOOLEAN MacTableDeleteEntry(struct rt_rtmp_adapter *pAd, + pProbeEntry = pProbeEntry->pNext; + } while (pProbeEntry); + +- /* not found !!! */ ++ /* not found ! */ + ASSERT(pProbeEntry != NULL); + + RTMP_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid); +@@ -1729,7 +1729,7 @@ BOOLEAN MacTableDeleteEntry(struct rt_rtmp_adapter *pAd, + pAd->MacTab.Size)); + } else { + DBGPRINT(RT_DEBUG_OFF, +- ("\n%s: Impossible Wcid = %d !!!!!\n", ++ ("\n%s: Impossible Wcid = %d !\n", + __func__, wcid)); + } + } +diff --git a/drivers/staging/rt2860/common/cmm_data_2860.c b/drivers/staging/rt2860/common/cmm_data_2860.c +index 857ff45..d3ae7ca 100644 +--- a/drivers/staging/rt2860/common/cmm_data_2860.c ++++ b/drivers/staging/rt2860/common/cmm_data_2860.c +@@ -847,7 +847,7 @@ VOID RT28xxPciStaAsicForceWakeup( + AutoWakeupCfg.word = 0; + RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); + +- // If this is called from Halt. ALWAYS force wakeup!!! ++ // If this is called from Halt. ALWAYS force wakeup! + if (Level == RTMP_HALT) + { + RT28xxPciAsicRadioOn(pAd, RTMP_HALT); +diff --git a/drivers/staging/rt2860/common/cmm_data_pci.c b/drivers/staging/rt2860/common/cmm_data_pci.c +index e6cb55a..43d73a0 100644 +--- a/drivers/staging/rt2860/common/cmm_data_pci.c ++++ b/drivers/staging/rt2860/common/cmm_data_pci.c +@@ -979,7 +979,7 @@ int MlmeHardTransmitTxRing(struct rt_rtmp_adapter *pAd, + && (pAd->CommonCfg.bIEEE80211H == 1) + && (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)) { + DBGPRINT(RT_DEBUG_ERROR, +- ("MlmeHardTransmit --> radar detect not in normal mode !!!\n")); ++ ("MlmeHardTransmit --> radar detect not in normal mode!\n")); + /*NdisReleaseSpinLock(&pAd->TxRingLock); */ + return (NDIS_STATUS_FAILURE); + } +diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c +index 11dfdc5..560ebd3 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_pci.c ++++ b/drivers/staging/rt2860/common/cmm_mac_pci.c +@@ -1650,7 +1650,7 @@ void RT28xxPciMlmeRadioOFF(struct rt_rtmp_adapter *pAd) + + if (brc == FALSE) { + DBGPRINT(RT_DEBUG_ERROR, +- ("%s call RT28xxPciAsicRadioOff fail !!\n", ++ ("%s call RT28xxPciAsicRadioOff fail!\n", + __func__)); + } + } +diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c +index 010c37c..9dd6959 100644 +--- a/drivers/staging/rt2860/common/cmm_mac_usb.c ++++ b/drivers/staging/rt2860/common/cmm_mac_usb.c +@@ -205,9 +205,9 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + /*Allocate URB */ + LM_USB_ALLOC(pObj, pHTTXContext, struct rt_httx_buffer *, + sizeof(struct rt_httx_buffer), Status, +- ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", ++ ("<-- ERROR in Alloc TX TxContext[%d] urb!\n", + acidx), done, +- ("<-- ERROR in Alloc TX TxContext[%d] struct rt_httx_buffer !! \n", ++ ("<-- ERROR in Alloc TX TxContext[%d] struct rt_httx_buffer!\n", + acidx), out1); + + NdisZeroMemory(pHTTXContext->TransferBuffer-> +@@ -259,7 +259,7 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + pMLMEContext->pUrb = RTUSB_ALLOC_URB(0); + if (pMLMEContext->pUrb == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +- ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", ++ ("<-- ERROR in Alloc TX MLMEContext[%d] urb!\n", + i)); + Status = NDIS_STATUS_RESOURCES; + goto out2; +@@ -296,9 +296,9 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + /*Allocate URB */ + LM_USB_ALLOC(pObj, pBeaconContext, struct rt_tx_buffer *, + sizeof(struct rt_tx_buffer), Status, +- ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", ++ ("<-- ERROR in Alloc TX BeaconContext[%d] urb!\n", + i), out2, +- ("<-- ERROR in Alloc TX BeaconContext[%d] struct rt_tx_buffer !! \n", ++ ("<-- ERROR in Alloc TX BeaconContext[%d] struct rt_tx_buffer!\n", + i), out3); + + pBeaconContext->pAd = pAd; +@@ -315,9 +315,9 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + /*Allocate URB */ + LM_USB_ALLOC(pObj, pNullContext, struct rt_tx_buffer *, sizeof(struct rt_tx_buffer), + Status, +- ("<-- ERROR in Alloc TX NullContext urb!! \n"), ++ ("<-- ERROR in Alloc TX NullContext urb!\n"), + out3, +- ("<-- ERROR in Alloc TX NullContext struct rt_tx_buffer !! \n"), ++ ("<-- ERROR in Alloc TX NullContext struct rt_tx_buffer!\n"), + out4); + + pNullContext->pAd = pAd; +@@ -333,9 +333,9 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + /*Allocate URB */ + LM_USB_ALLOC(pObj, pRTSContext, struct rt_tx_buffer *, sizeof(struct rt_tx_buffer), + Status, +- ("<-- ERROR in Alloc TX RTSContext urb!! \n"), ++ ("<-- ERROR in Alloc TX RTSContext urb!\n"), + out4, +- ("<-- ERROR in Alloc TX RTSContext struct rt_tx_buffer !! \n"), ++ ("<-- ERROR in Alloc TX RTSContext struct rt_tx_buffer!\n"), + out5); + + pRTSContext->pAd = pAd; +@@ -350,9 +350,9 @@ int NICInitTransmit(struct rt_rtmp_adapter *pAd) + /*Allocate URB */ + LM_USB_ALLOC(pObj, pPsPollContext, struct rt_tx_buffer *, + sizeof(struct rt_tx_buffer), Status, +- ("<-- ERROR in Alloc TX PsPollContext urb!! \n"), ++ ("<-- ERROR in Alloc TX PsPollContext urb!\n"), + out5, +- ("<-- ERROR in Alloc TX PsPollContext struct rt_tx_buffer !! \n"), ++ ("<-- ERROR in Alloc TX PsPollContext struct rt_tx_buffer!\n"), + out6); + + pPsPollContext->pAd = pAd; +diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c +index 556e3d0..6b003c9 100644 +--- a/drivers/staging/rt2860/common/cmm_sanity.c ++++ b/drivers/staging/rt2860/common/cmm_sanity.c +@@ -256,7 +256,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd, void * Msg, uns + + /* For some 11a AP which didn't have DS_IE, we use two conditions to decide the channel */ + /* 1. If the AP is 11n enabled, then check the control channel. */ +- /* 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!!) */ ++ /* 2. If the AP didn't have any info about channel, use the channel we received this frame as the channel. (May inaccuracy!) */ + u8 CtrlChannel = 0; + + /* Add for 3 necessary EID field check */ +@@ -371,7 +371,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd, void * Msg, uns + break; + + case IE_HT_CAP: +- if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension.!! */ ++ if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension! */ + { + NdisMoveMemory(pHtCapability, pEid->Octet, + sizeof(struct rt_ht_capability_ie)); +diff --git a/drivers/staging/rt2860/common/cmm_tkip.c b/drivers/staging/rt2860/common/cmm_tkip.c +index 7a2a48e..4881ef9 100644 +--- a/drivers/staging/rt2860/common/cmm_tkip.c ++++ b/drivers/staging/rt2860/common/cmm_tkip.c +@@ -828,6 +828,6 @@ BOOLEAN RTMPSoftDecryptTKIP(struct rt_rtmp_adapter *pAd, + /*RTMPReportMicError(pAd, &pWpaKey[KeyID]); // marked by AlbertY @ 20060630 */ + return (FALSE); + } +- /*DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!!\n"); */ ++ /*DBGPRINT(RT_DEBUG_TRACE, "RTMPSoftDecryptTKIP Decript done!\n"); */ + return TRUE; + } +diff --git a/drivers/staging/rt2860/common/cmm_wep.c b/drivers/staging/rt2860/common/cmm_wep.c +index c728355..76f880c 100644 +--- a/drivers/staging/rt2860/common/cmm_wep.c ++++ b/drivers/staging/rt2860/common/cmm_wep.c +@@ -245,7 +245,7 @@ BOOLEAN RTMPSoftDecryptWEP(struct rt_rtmp_adapter *pAd, + crc32 ^= 0xffffffff; /* complement */ + + if (crc32 != cpu2le32(trailfcs)) { +- DBGPRINT(RT_DEBUG_TRACE, ("! WEP Data CRC Error !\n")); /*CRC error. */ ++ DBGPRINT(RT_DEBUG_TRACE, ("WEP Data CRC Error!\n")); /*CRC error. */ + return (FALSE); + } + return (TRUE); +diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c +index 7b51be0..94e119f 100644 +--- a/drivers/staging/rt2860/common/cmm_wpa.c ++++ b/drivers/staging/rt2860/common/cmm_wpa.c +@@ -1292,7 +1292,7 @@ void PRF(u8 * key, + os_alloc_mem(NULL, (u8 **) & input, 1024); + + if (input == NULL) { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!PRF: no memory!!!\n")); ++ DBGPRINT(RT_DEBUG_ERROR, ("PRF: no memory!\n")); + return; + } + /* Generate concatenation input */ +@@ -2672,7 +2672,7 @@ static void CalculateMIC(u8 KeyDescVer, + os_alloc_mem(NULL, (u8 **) & OutBuffer, 512); + + if (OutBuffer == NULL) { +- DBGPRINT(RT_DEBUG_ERROR, ("!!!CalculateMIC: no memory!!!\n")); ++ DBGPRINT(RT_DEBUG_ERROR, ("CalculateMIC: no memory!\n")); + return; + } + /* make a frame for calculating MIC. */ +diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c +index 8cd8f53..9fc34a8 100644 +--- a/drivers/staging/rt2860/common/mlme.c ++++ b/drivers/staging/rt2860/common/mlme.c +@@ -483,7 +483,7 @@ void MlmeHandler(struct rt_rtmp_adapter *pAd) + #ifdef RTMP_MAC_USB + if (Elem->MsgType == MT2_RESET_CONF) { + DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("!!! reset MLME state machine !!!\n")); ++ ("reset MLME state machine!\n")); + MlmeRestartStateMachine(pAd); + Elem->Occupied = FALSE; + Elem->MsgLen = 0; +@@ -4042,7 +4042,7 @@ void BssTableSsidSort(struct rt_rtmp_adapter *pAd, + } + /* Since the AP is using hidden SSID, and we are trying to connect to ANY */ + /* It definitely will fail. So, skip it. */ +- /* CCX also require not even try to connect it!! */ ++ /* CCX also require not even try to connect it! */ + if (SsidLen == 0) + continue; + +@@ -4600,8 +4600,8 @@ void MgtMacHeaderInit(struct rt_rtmp_adapter *pAd, + * input params: + * Buffer - pointer to a pre-allocated memory segment + * args - a list of pairs. +- * NOTE NOTE NOTE!!!! the last argument must be NULL, otherwise this +- * function will FAIL!!! ++ * NOTE NOTE NOTE! the last argument must be NULL, otherwise this ++ * function will FAIL! + * return: + * Size of the buffer + * usage: +diff --git a/drivers/staging/rt2860/common/rt_rf.c b/drivers/staging/rt2860/common/rt_rf.c +index fb0ca88..519121d 100644 +--- a/drivers/staging/rt2860/common/rt_rf.c ++++ b/drivers/staging/rt2860/common/rt_rf.c +@@ -72,7 +72,7 @@ int RT30xxWriteRFRegister(struct rt_rtmp_adapter *pAd, + if ((i == RETRY_LIMIT) + || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) { + DBGPRINT_RAW(RT_DEBUG_ERROR, +- ("Retry count exhausted or device removed!!!\n")); ++ ("Retry count exhausted or device removed!\n")); + return STATUS_UNSUCCESSFUL; + } + +diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c +index d3c7c17..21a95ff 100644 +--- a/drivers/staging/rt2860/common/rtmp_init.c ++++ b/drivers/staging/rt2860/common/rtmp_init.c +@@ -75,7 +75,7 @@ struct rt_rtmp_reg_pair MACRegTable[] = { + {BCN_OFFSET0, 0xece8e4e0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ + {BCN_OFFSET1, 0xfcf8f4f0}, /* 0x3800, 0x3A00, 0x3C00, 0x3E00, 512B for each beacon */ + #else +-#error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]!!! ++#error You must re-calculate new value for BCN_OFFSET0 & BCN_OFFSET1 in MACRegTable[]! + #endif /* HW_BEACON_OFFSET // */ + + {LEGACY_BASIC_RATE, 0x0000013f}, /* Basic rate set bitmap */ +@@ -1272,7 +1272,7 @@ void NICInitAsicFromEEPROM(struct rt_rtmp_adapter *pAd) + pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; + /* */ + /* Since BBP has been progamed, to make sure BBP setting will be */ +- /* upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! */ ++ /* upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND! */ + /* */ + pAd->CommonCfg.BandState = UNKNOWN_BAND; + +@@ -3470,7 +3470,7 @@ err1: + err0: + #endif /* ST // */ + +- DBGPRINT(RT_DEBUG_ERROR, ("!!! rt28xx Initialized fail !!!\n")); ++ DBGPRINT(RT_DEBUG_ERROR, ("rt28xx Initialized fail!\n")); + return FALSE; + } + +diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h +index fa4a2e6..fd1c141 100644 +--- a/drivers/staging/rt2860/oid.h ++++ b/drivers/staging/rt2860/oid.h +@@ -557,7 +557,7 @@ enum { + /* New for MeetingHouse Api support */ + #define OID_MH_802_1X_SUPPORTED 0xFFEDC100 + +-/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ ++/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition! */ + typedef union _HTTRANSMIT_SETTING { + struct { + u16 MCS:7; /* MCS */ +@@ -614,7 +614,7 @@ struct rt_802_11_event_table { + struct rt_802_11_event_log Log[MAX_NUMBER_OF_EVENT]; + }; + +-/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!! */ ++/* MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition! */ + typedef union _MACHTTRANSMIT_SETTING { + struct { + u16 MCS:7; /* MCS */ +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index d84ac32..9357fb2 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -51,7 +51,7 @@ char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = { + "connects with our wireless client", /* IW_STA_LINKUP_EVENT_FLAG */ + "disconnects with our wireless client", /* IW_STA_LINKDOWN_EVENT_FLAG */ + "scan completed" /* IW_SCAN_COMPLETED_EVENT_FLAG */ +- "scan terminate!! Busy!! Enqueue fail!!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ ++ "scan terminate! Busy! Enqueue fail!" /* IW_SCAN_ENQUEUE_FAIL_EVENT_FLAG */ + }; + + /* for wireless IDS_spoof_attack event message */ +@@ -1282,7 +1282,7 @@ int RtmpOSNetDevDestory(struct rt_rtmp_adapter *pAd, struct net_device *pNetDev) + { + + /* TODO: Need to fix this */ +- printk("WARNING: This function(%s) not implement yet!!!\n", __func__); ++ printk("WARNING: This function(%s) not implement yet!\n", __func__); + return 0; + } + +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index 7efc109..f85508d 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -427,7 +427,7 @@ do{ \ + + #define DBGPRINT_ERR(Fmt) \ + { \ +- printk("ERROR!!! "); \ ++ printk("ERROR! "); \ + printk Fmt; \ + } + +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index fbbec9d..c3d9280 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -321,7 +321,7 @@ int rt28xx_close(struct net_device *dev) + + if (brc == FALSE) { + DBGPRINT(RT_DEBUG_ERROR, +- ("%s call RT28xxPciAsicRadioOff fail !!\n", ++ ("%s call RT28xxPciAsicRadioOff fail!\n", + __func__)); + } + } +diff --git a/drivers/staging/rt2860/rtmp_chip.h b/drivers/staging/rt2860/rtmp_chip.h +index 32ff350..0adf2cd 100644 +--- a/drivers/staging/rt2860/rtmp_chip.h ++++ b/drivers/staging/rt2860/rtmp_chip.h +@@ -197,7 +197,7 @@ typedef union _EEPROM_NIC_CINFIG2_STRUC { + u16 DynamicTxAgcControl:1; /* */ + u16 ExternalLNAForG:1; /* */ + u16 ExternalLNAForA:1; /* external LNA enable for 2.4G */ +- u16 CardbusAcceleration:1; /* !!! NOTE: 0 - enable, 1 - disable */ ++ u16 CardbusAcceleration:1; /* ! NOTE: 0 - enable, 1 - disable */ + u16 BW40MSidebandForG:1; + u16 BW40MSidebandForA:1; + u16 EnableWPSPBC:1; /* WPS PBC Control bit */ +diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h +index c79eceb..9c54bac 100644 +--- a/drivers/staging/rt2860/rtmp_def.h ++++ b/drivers/staging/rt2860/rtmp_def.h +@@ -409,7 +409,7 @@ + #define MAX_LEN_OF_MAC_TABLE MAX_NUMBER_OF_MAC /* if MAX_MBSSID_NUM is 8, this value can't be larger than 211 */ + + #if MAX_LEN_OF_MAC_TABLE>MAX_AVAILABLE_CLIENT_WCID +-#error MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID!!!! ++#error MAX_LEN_OF_MAC_TABLE can not be larger than MAX_AVAILABLE_CLIENT_WCID! + #endif + + #define MAX_NUM_OF_WDS_LINK_PERBSSID 3 +diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c +index 733bc08..7055f22 100644 +--- a/drivers/staging/rt2860/sta/assoc.c ++++ b/drivers/staging/rt2860/sta/assoc.c +@@ -563,7 +563,7 @@ void MlmeAssocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem * + pAd->Mlme.AssocMachine.CurrState = ASSOC_WAIT_RSP; + } else { + DBGPRINT(RT_DEBUG_TRACE, +- ("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!!!!!! \n")); ++ ("ASSOC - MlmeAssocReqAction() sanity check failed. BUG!\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_INVALID_FORMAT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, +@@ -746,7 +746,7 @@ void MlmeReassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem + pAd->Mlme.AssocMachine.CurrState = REASSOC_WAIT_RSP; + } else { + DBGPRINT(RT_DEBUG_TRACE, +- ("ASSOC - MlmeReassocReqAction() sanity check failed. BUG!!!! \n")); ++ ("ASSOC - MlmeReassocReqAction() sanity check failed. BUG!\n")); + pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE; + Status = MLME_INVALID_FORMAT; + MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, +diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c +index 9c77520..17e59ba 100644 +--- a/drivers/staging/rt2860/sta/connect.c ++++ b/drivers/staging/rt2860/sta/connect.c +@@ -214,7 +214,7 @@ void MlmeCntlMachinePerformAction(struct rt_rtmp_adapter *pAd, + break; + #endif /* RTMP_MAC_USB // */ + default: +- DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", ++ DBGPRINT_ERR(("ERROR! CNTL - Illegal message type(=%ld)", + Elem->MsgType)); + break; + } +@@ -911,7 +911,7 @@ void CntlWaitStartProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *E + pAd->CommonCfg.Bssid[5])); + } else { + DBGPRINT(RT_DEBUG_TRACE, +- ("CNTL - Start IBSS fail. BUG!!!!!\n")); ++ ("CNTL - Start IBSS fail. BUG!\n")); + pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; + } + } +@@ -1184,7 +1184,7 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + /* */ + /* ASSOC - DisassocTimeoutAction */ + /* CNTL - Dis-associate successful */ +- /* !!! LINK DOWN !!! */ ++ /* ! LINK DOWN ! */ + /* [88888] OID_802_11_SSID should have returned NDTEST_WEP_AP2(Returned: ) */ + /* */ + /* To prevent DisassocTimeoutAction to call Link down after we link up, */ +@@ -1218,12 +1218,12 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) + AdhocTurnOnQos(pAd); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("Adhoc LINK UP!\n")); + } else { + OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); + +- DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("Infra LINK UP!\n")); + } + + /* 3*3 */ +@@ -1262,11 +1262,11 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("rt2860C !\n")); + } + + DBGPRINT(RT_DEBUG_TRACE, +- ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", ++ ("40MHz Lower LINK UP! Control Channel at Below. Central = %d \n", + pAd->CommonCfg.CentralChannel)); + } else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) + && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == +@@ -1296,11 +1296,11 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("rt2860C !\n")); + } + + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", ++ ("40MHz Upper LINK UP! Control Channel at UpperCentral = %d \n", + pAd->CommonCfg.CentralChannel)); + } else { + pAd->CommonCfg.BBPCurrentBW = BW_20; +@@ -1327,10 +1327,10 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08); + RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11); +- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("rt2860C !\n")); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("20MHz LINK UP!\n")); + } + + RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW); +@@ -1342,12 +1342,12 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + &pAd->BbpTuning.R66CurrentValue); + + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", ++ ("LINK UP! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n", + BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, + pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel)); + + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! LINK UP !!! (Density =%d, )\n", ++ ("LINK UP! (Density =%d, )\n", + pAd->MacTab.Content[BSSID_WCID].MpduDensity)); + + AsicSetBssid(pAd, pAd->CommonCfg.Bssid); +@@ -1634,13 +1634,13 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + NdisReleaseSpinLock(&pAd->MacTabLock); + + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! LINK UP !!! ClientStatusFlags=%lx)\n", ++ ("LINK UP! ClientStatusFlags=%lx)\n", + pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags)); + + MlmeUpdateTxRates(pAd, TRUE, BSS0); + MlmeUpdateHtTxRates(pAd, BSS0); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", ++ ("LINK UP! (StaActive.bHtEnable =%d, )\n", + pAd->StaActive.SupportedPhyInfo.bHtEnable)); + + if (pAd->CommonCfg.bAggregationCapable) { +@@ -1811,7 +1811,7 @@ void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType) + pAd->CommonCfg.IOTestParm.bLastAtheros = FALSE; + COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!!pAd->bNextDisableRxBA= %d \n", ++ ("pAd->bNextDisableRxBA= %d \n", + pAd->CommonCfg.IOTestParm.bNextDisableRxBA)); + /* BSSID add in one MAC entry too. Because in Tx, ASIC need to check Cipher and IV/EIV, BAbitmap */ + /* Pther information in MACTab.Content[BSSID_WCID] is not necessary for driver. */ +@@ -1893,7 +1893,7 @@ void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP) + BSS0, 0); + } + +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("LINK DOWN!\n")); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); + + #ifdef RTMP_MAC_PCI +@@ -1921,7 +1921,7 @@ void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP) + + if (ADHOC_ON(pAd)) /* Adhoc mode link down */ + { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("LINK DOWN 1!\n")); + + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +@@ -1931,10 +1931,10 @@ void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP) + BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, + pAd->CommonCfg.Channel); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size)); ++ (" MacTab.Size=%d !\n", pAd->MacTab.Size)); + } else /* Infra structure mode */ + { +- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 2!!!\n")); ++ DBGPRINT(RT_DEBUG_TRACE, ("LINK DOWN 2!\n")); + + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); + OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); +diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c +index 8c0ab2d..c503947 100644 +--- a/drivers/staging/rt2860/sta/rtmp_data.c ++++ b/drivers/staging/rt2860/sta/rtmp_data.c +@@ -192,7 +192,7 @@ void STARxEAPOLFrameIndicate(struct rt_rtmp_adapter *pAd, + pRxWI->RSSI1, pRxWI->RSSI2, + pRxD->PlcpSignal); + DBGPRINT_RAW(RT_DEBUG_TRACE, +- ("!!! report EAPOL/AIRONET DATA to MLME (len=%d) !!!\n", ++ ("report EAPOL/AIRONET DATA to MLME (len=%d) !\n", + pRxBlk->DataSize)); + } + } +@@ -940,7 +940,7 @@ int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket) + + if (pSrcBufVA == NULL) { + DBGPRINT(RT_DEBUG_ERROR, +- ("STASendPacket --> pSrcBufVA == NULL !!!SrcBufLen=%x\n", ++ ("STASendPacket --> pSrcBufVA == NULL !SrcBufLen=%x\n", + SrcBufLen)); + /* Resourece is low, system did not allocate virtual address */ + /* return NDIS_STATUS_FAILURE directly to upper layer */ +@@ -950,7 +950,7 @@ int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket) + + if (SrcBufLen < 14) { + DBGPRINT(RT_DEBUG_ERROR, +- ("STASendPacket --> Ndis Packet buffer error !!!\n")); ++ ("STASendPacket --> Ndis Packet buffer error!\n")); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + return (NDIS_STATUS_FAILURE); + } +@@ -1007,7 +1007,7 @@ int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket) + && (RTMP_GET_PACKET_EAPOL(pPacket) == FALSE) + ) { + DBGPRINT(RT_DEBUG_TRACE, +- ("STASendPacket --> Drop packet before port secured !!!\n")); ++ ("STASendPacket --> Drop packet before port secured!\n")); + RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); + + return (NDIS_STATUS_FAILURE); +@@ -1680,7 +1680,7 @@ void STA_AMPDU_Frame_Tx(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk) + + pMacEntry = pTxBlk->pMacEntry; + if (pMacEntry->isCached) { +- /* NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]!!!! */ ++ /* NOTE: Please make sure the size of pMacEntry->CachedBuf[] is smaller than pTxBlk->HeaderBuf[]! */ + NdisMoveMemory((u8 *)& pTxBlk-> + HeaderBuf[TXINFO_SIZE], + (u8 *)& pMacEntry->CachedBuf[0], +@@ -2506,7 +2506,7 @@ int STAHardTransmit(struct rt_rtmp_adapter *pAd, + { + /* It should not happened! */ + DBGPRINT(RT_DEBUG_ERROR, +- ("Send a pacekt was not classified!! It should not happen!\n")); ++ ("Send a packet was not classified! It should not happen!\n")); + while (pTxBlk->TxPacketList.Number) { + pQEntry = + RemoveHeadQueue(&pTxBlk->TxPacketList); +diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c +index 64a0e87..8f9fd19 100644 +--- a/drivers/staging/rt2860/sta/sanity.c ++++ b/drivers/staging/rt2860/sta/sanity.c +@@ -150,7 +150,7 @@ BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void * pMsg, unsigned lo + + case IE_HT_CAP: + case IE_HT_CAP2: +- if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension.!! */ ++ if (pEid->Len >= SIZE_HT_CAP_IE) /*Note: allow extension! */ + { + NdisMoveMemory(pHtCapability, pEid->Octet, + SIZE_HT_CAP_IE); +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index 04f81bd..d8fbe6c 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -600,7 +600,7 @@ int rt_ioctl_siwap(struct net_device *dev, + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { + RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! MLME busy, reset MLME state machine !!!\n")); ++ ("MLME busy, reset MLME state machine!\n")); + } + /* tell CNTL state machine to call NdisMSetInformationComplete() after completing */ + /* this request, because this request is initiated by NDIS. */ +@@ -741,7 +741,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + + if (MONITOR_ON(pAdapter)) { + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! Driver is in Monitor Mode now !!!\n")); ++ ("Driver is in Monitor Mode now!\n")); + return -EINVAL; + } + +@@ -758,7 +758,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) + && (pAdapter->StaCfg.WpaSupplicantScanCount > 3)) { + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! WpaSupplicantScanCount > 3\n")); ++ ("WpaSupplicantScanCount > 3\n")); + Status = NDIS_STATUS_SUCCESS; + break; + } +@@ -771,7 +771,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + && (pAdapter->StaCfg.PortSecured == + WPA_802_1X_PORT_NOT_SECURED)) { + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); ++ ("Link UP, Port Not Secured! ignore this set::OID_802_11_BSSID_LIST_SCAN\n")); + Status = NDIS_STATUS_SUCCESS; + break; + } +@@ -779,7 +779,7 @@ int rt_ioctl_siwscan(struct net_device *dev, + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { + RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! MLME busy, reset MLME state machine !!!\n")); ++ ("MLME busy, reset MLME state machine!\n")); + } + /* tell CNTL state machine to call NdisMSetInformationComplete() after completing */ + /* this request, because this request is initiated by NDIS. */ +@@ -2256,7 +2256,7 @@ int rt_ioctl_siwpmksa(struct net_device *dev, + break; + default: + DBGPRINT(RT_DEBUG_TRACE, +- ("rt_ioctl_siwpmksa - Unknow Command!!\n")); ++ ("rt_ioctl_siwpmksa - Unknown Command!\n")); + break; + } + +@@ -2664,7 +2664,7 @@ int Set_SSID_Proc(struct rt_rtmp_adapter *pAdapter, char *arg) + if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE) { + RTMP_MLME_RESET_STATE_MACHINE(pAdapter); + DBGPRINT(RT_DEBUG_TRACE, +- ("!!! MLME busy, reset MLME state machine !!!\n")); ++ ("MLME busy, reset MLME state machine!\n")); + } + + if ((pAdapter->StaCfg.WpaPassPhraseLen >= 8) && +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index c1d1fb5..925a236 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -584,7 +584,7 @@ void RTUSBWatchDog(struct rt_rtmp_adapter *pAd) + RTMP_IO_READ32(pAd, TXRXQ_PCNT, &MACValue); + if ((MACValue & 0xff) != 0) { + DBGPRINT(RT_DEBUG_TRACE, +- ("TX QUEUE 0 Not EMPTY(Value=0x%0x). !!!!!!!!!!!!!!!\n", ++ ("TX QUEUE 0 Not EMPTY(Value=0x%0x)!\n", + MACValue)); + RTMP_IO_WRITE32(pAd, PBF_CFG, 0xf40012); + while ((MACValue & 0xff) != 0 && (idx++ < 10)) { +@@ -707,7 +707,7 @@ void RTUSBWatchDog(struct rt_rtmp_adapter *pAd) + } + } else { + DBGPRINT(RT_DEBUG_ERROR, +- ("Unkonw bulkOut URB maybe hanged!!!!!!!!!!!!\n")); ++ ("Unknown bulkOut URB maybe hanged!\n")); + } + } else { + RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[idx], +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch b/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch new file mode 100644 index 000000000..69172a1ef --- /dev/null +++ b/debian/patches/features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch @@ -0,0 +1,1222 @@ +From cb52d4ac2060d0a3ce14a94f8af815e276640d6f Mon Sep 17 00:00:00 2001 +From: Bartlomiej Zolnierkiewicz +Date: Mon, 9 Nov 2009 17:20:39 +0100 +Subject: [PATCH 33/42] Staging: rt28x0: remove no longer needed common/cmm_data_2860.c + +commit cdbf3a394ca2f6e3464bc19676e959a92a725eb0 upstream. + +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/cmm_data_2860.c | 1199 ------------------------- + 1 files changed, 0 insertions(+), 1199 deletions(-) + delete mode 100644 drivers/staging/rt2860/common/cmm_data_2860.c + +diff --git a/drivers/staging/rt2860/common/cmm_data_2860.c b/drivers/staging/rt2860/common/cmm_data_2860.c +deleted file mode 100644 +index d3ae7ca..0000000 +--- a/drivers/staging/rt2860/common/cmm_data_2860.c ++++ /dev/null +@@ -1,1199 +0,0 @@ +-/* +- ************************************************************************* +- * Ralink Tech Inc. +- * 5F., No.36, Taiyuan St., Jhubei City, +- * Hsinchu County 302, +- * Taiwan, R.O.C. +- * +- * (c) Copyright 2002-2007, Ralink Technology, Inc. +- * +- * This program is free software; you can redistribute it and/or modify * +- * it under the terms of the GNU General Public License as published by * +- * the Free Software Foundation; either version 2 of the License, or * +- * (at your option) any later version. * +- * * +- * 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., * +- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +- * * +- ************************************************************************* +-*/ +- +-/* +- All functions in this file must be PCI-depended, or you should out your function +- in other files. +- +-*/ +-#include "../rt_config.h" +- +-extern RTMP_RF_REGS RF2850RegTable[]; +-extern UCHAR NUM_OF_2850_CHNL; +- +-USHORT RtmpPCI_WriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- { +- hwHeaderLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- } +- else +- { +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- } +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +- +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +-} +- +- +-USHORT RtmpPCI_WriteSingleTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN BOOLEAN bIsLast, +- OUT USHORT *FreeNumber) +-{ +- +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHeaderLen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +-} +- +- +-USHORT RtmpPCI_WriteMultiTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR frameNum, +- OUT USHORT *FreeNumber) +-{ +- BOOLEAN bIsLast; +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHdrLen; +- UINT32 firstDMALen; +- +- bIsLast = ((frameNum == (pTxBlk->TotalFrameNum - 1)) ? 1 : 0); +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- if (frameNum == 0) +- { +- // copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD; +- else if (pTxBlk->TxFrameType == TX_RALINK_FRAME) +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD; +- hwHdrLen = pTxBlk->MpduHeaderLen - LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD; +- else +- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4); +- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHdrLen; +- } +- else +- { +- firstDMALen = pTxBlk->MpduHeaderLen; +- } +- +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); +- +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- +- // +- // build Tx Descriptor +- // +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);; +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = (bIsLast) ? 1 : 0; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +- RetTxIdx = TxIdx; +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +- +-} +- +- +-VOID RtmpPCI_FinalWriteTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN USHORT totalMPDUSize, +- IN USHORT FirstTxIdx) +-{ +- +- PTXWI_STRUC pTxWI; +- PRTMP_TX_RING pTxRing; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa; +- pTxWI->MPDUtotalByteCount = totalMPDUSize; +-} +- +- +-VOID RtmpPCIDataLastTxIdx( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR QueIdx, +- IN USHORT LastTxIdx) +-{ +- PTXD_STRUC pTxD; +- PRTMP_TX_RING pTxRing; +- +- // +- // get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[QueIdx]; +- +- // +- // build Tx Descriptor +- // +- pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa; +- +- pTxD->LastSec1 = 1; +-} +- +- +-USHORT RtmpPCI_WriteFragTxResource( +- IN PRTMP_ADAPTER pAd, +- IN TX_BLK *pTxBlk, +- IN UCHAR fragNum, +- OUT USHORT *FreeNumber) +-{ +- UCHAR *pDMAHeaderBufVA; +- USHORT TxIdx, RetTxIdx; +- PTXD_STRUC pTxD; +- UINT32 BufBasePaLow; +- PRTMP_TX_RING pTxRing; +- USHORT hwHeaderLen; +- UINT32 firstDMALen; +- +- // +- // Get Tx Ring Resource +- // +- pTxRing = &pAd->TxRing[pTxBlk->QueIdx]; +- TxIdx = pAd->TxRing[pTxBlk->QueIdx].TxCpuIdx; +- pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa; +- BufBasePaLow = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa); +- +- // +- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer +- // +- hwHeaderLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen; +- +- firstDMALen = TXINFO_SIZE + TXWI_SIZE + hwHeaderLen; +- NdisMoveMemory(pDMAHeaderBufVA, pTxBlk->HeaderBuf, firstDMALen); +- +- +- // +- // Build Tx Descriptor +- // +- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa; +- +- NdisZeroMemory(pTxD, TXD_SIZE); +- +- if (fragNum == pTxBlk->TotalFragNum) +- { +- pTxRing->Cell[TxIdx].pNdisPacket = pTxBlk->pPacket; +- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL; +- } +- +- pTxD->SDPtr0 = BufBasePaLow; +- pTxD->SDLen0 = firstDMALen; // include padding +- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE); +- pTxD->SDLen1 = pTxBlk->SrcBufLen; +- pTxD->LastSec0 = 0; +- pTxD->LastSec1 = 1; +- +- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA); +- +- RetTxIdx = TxIdx; +- pTxBlk->Priv += pTxBlk->SrcBufLen; +- +- // +- // Update Tx index +- // +- INC_RING_INDEX(TxIdx, TX_RING_SIZE); +- pTxRing->TxCpuIdx = TxIdx; +- +- *FreeNumber -= 1; +- +- return RetTxIdx; +- +-} +- +-/* +- Must be run in Interrupt context +- This function handle PCI specific TxDesc and cpu index update and kick the packet out. +- */ +-int RtmpPCIMgmtKickOut( +- IN RTMP_ADAPTER *pAd, +- IN UCHAR QueIdx, +- IN PNDIS_PACKET pPacket, +- IN PUCHAR pSrcBufVA, +- IN UINT SrcBufLen) +-{ +- PTXD_STRUC pTxD; +- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx; +- +- pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa; +- if (!pTxD) +- return 0; +- +- pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket; +- pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL; +- +- RTMPWriteTxDescriptor(pAd, pTxD, TRUE, FIFO_MGMT); +- pTxD->LastSec0 = 1; +- pTxD->LastSec1 = 1; +- pTxD->DMADONE = 0; +- pTxD->SDLen1 = 0; +- pTxD->SDPtr0 = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE);; +- pTxD->SDLen0 = SrcBufLen; +- +- pAd->RalinkCounters.KickTxCount++; +- pAd->RalinkCounters.OneSecTxDoneCount++; +- +- // Increase TX_CTX_IDX, but write to register later. +- INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE); +- +- RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); +- +- return 0; +-} +- +-/* +- ======================================================================== +- +- Routine Description: +- Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound +- +- Arguments: +- pRxD Pointer to the Rx descriptor +- +- Return Value: +- NDIS_STATUS_SUCCESS No err +- NDIS_STATUS_FAILURE Error +- +- Note: +- +- ======================================================================== +-*/ +-NDIS_STATUS RTMPCheckRxError( +- IN PRTMP_ADAPTER pAd, +- IN PHEADER_802_11 pHeader, +- IN PRXWI_STRUC pRxWI, +- IN PRT28XX_RXD_STRUC pRxD) +-{ +- PCIPHER_KEY pWpaKey; +- INT dBm; +- +- // Phy errors & CRC errors +- if (/*(pRxD->PhyErr) ||*/ (pRxD->Crc)) +- { +- // Check RSSI for Noise Hist statistic collection. +- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta; +- if (dBm <= -87) +- pAd->StaCfg.RPIDensity[0] += 1; +- else if (dBm <= -82) +- pAd->StaCfg.RPIDensity[1] += 1; +- else if (dBm <= -77) +- pAd->StaCfg.RPIDensity[2] += 1; +- else if (dBm <= -72) +- pAd->StaCfg.RPIDensity[3] += 1; +- else if (dBm <= -67) +- pAd->StaCfg.RPIDensity[4] += 1; +- else if (dBm <= -62) +- pAd->StaCfg.RPIDensity[5] += 1; +- else if (dBm <= -57) +- pAd->StaCfg.RPIDensity[6] += 1; +- else if (dBm > -57) +- pAd->StaCfg.RPIDensity[7] += 1; +- +- return(NDIS_STATUS_FAILURE); +- } +- +- // Add Rx size to channel load counter, we should ignore error counts +- pAd->StaCfg.CLBusyBytes += (pRxD->SDL0 + 14); +- +- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics +- if (pHeader != NULL) +- { +- if (pHeader->FC.ToDs) +- { +- return(NDIS_STATUS_FAILURE); +- } +- } +- +- // Drop not U2M frames, cant's drop here because we will drop beacon in this case +- // I am kind of doubting the U2M bit operation +- // if (pRxD->U2M == 0) +- // return(NDIS_STATUS_FAILURE); +- +- // drop decyption fail frame +- if (pRxD->CipherErr) +- { +- if (pRxD->CipherErr == 2) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV ok but MICErr "));} +- else if (pRxD->CipherErr == 1) +- {DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: ICV Err "));} +- else if (pRxD->CipherErr == 3) +- DBGPRINT_RAW(RT_DEBUG_TRACE,("pRxD ERROR: Key not valid ")); +- +- if (((pRxD->CipherErr & 1) == 1) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_ICV_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_TRACE,(" %d (len=%d, Mcast=%d, MyBss=%d, Wcid=%d, KeyId=%d)\n", +- pRxD->CipherErr, +- pRxD->SDL0, +- pRxD->Mcast | pRxD->Bcast, +- pRxD->MyBss, +- pRxWI->WirelessCliID, +- pRxWI->KeyIndex)); +- +- // +- // MIC Error +- // +- if (pRxD->CipherErr == 2) +- { +- pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex]; +- +- if (pAd->StaCfg.WpaSupplicantUP) +- WpaSendMicFailureToWpaSupplicant(pAd, +- (pWpaKey->Type == PAIRWISEKEY) ? TRUE:FALSE); +- else +- RTMPReportMicError(pAd, pWpaKey); +- +- if (((pRxD->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd)) +- RTMPSendWirelessEvent(pAd, IW_MIC_ERROR_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0); +- +- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n")); +- } +- +- if (pHeader == NULL) +- return(NDIS_STATUS_SUCCESS); +- +- return(NDIS_STATUS_FAILURE); +- } +- +- return(NDIS_STATUS_SUCCESS); +-} +- +-/* +- ========================================================================== +- Description: +- This routine sends command to firmware and turn our chip to power save mode. +- Both RadioOff and .11 power save function needs to call this routine. +- Input: +- Level = GUIRADIO_OFF : GUI Radio Off mode +- Level = DOT11POWERSAVE : 802.11 power save mode +- Level = RTMP_HALT : When Disable device. +- +- ========================================================================== +- */ +-VOID RT28xxPciAsicRadioOff( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level, +- IN USHORT TbttNumToNextWakeUp) +-{ +- WPDMA_GLO_CFG_STRUC DmaCfg; +- UCHAR i, tempBBP_R3 = 0; +- BOOLEAN brc = FALSE, Cancelled; +- UINT32 TbTTTime = 0; +- UINT32 PsPollTime = 0, MACValue; +- ULONG BeaconPeriodTime; +- UINT32 RxDmaIdx, RxCpuIdx; +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> TxCpuIdx = %d, TxDmaIdx = %d. RxCpuIdx = %d, RxDmaIdx = %d.\n", pAd->TxRing[0].TxCpuIdx, pAd->TxRing[0].TxDmaIdx, pAd->RxRing.RxCpuIdx, pAd->RxRing.RxDmaIdx)); +- +- // Check Rx DMA busy status, if more than half is occupied, give up this radio off. +- RTMP_IO_READ32(pAd, RX_DRX_IDX , &RxDmaIdx); +- RTMP_IO_READ32(pAd, RX_CRX_IDX , &RxCpuIdx); +- if ((RxDmaIdx > RxCpuIdx) && ((RxDmaIdx - RxCpuIdx) > RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return1. RxDmaIdx = %d , RxCpuIdx = %d. \n", RxDmaIdx, RxCpuIdx)); +- return; +- } +- else if ((RxCpuIdx >= RxDmaIdx) && ((RxCpuIdx - RxDmaIdx) < RX_RING_SIZE/3)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("AsicRadioOff ===> return2. RxCpuIdx = %d. RxDmaIdx = %d , \n", RxCpuIdx, RxDmaIdx)); +- return; +- } +- +- // Once go into this function, disable tx because don't want too many packets in queue to prevent HW stops. +- RTMP_SET_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- +- if (Level == DOT11POWERSAVE) +- { +- RTMP_IO_READ32(pAd, TBTT_TIMER, &TbTTTime); +- TbTTTime &= 0x1ffff; +- // 00. check if need to do sleep in this DTIM period. If next beacon will arrive within 30ms , ...doesn't necessarily sleep. +- // TbTTTime uint = 64us, LEAD_TIME unit = 1024us, PsPollTime unit = 1ms +- if (((64*TbTTTime) <((LEAD_TIME*1024) + 40000)) && (TbttNumToNextWakeUp == 0)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("TbTTTime = 0x%x , give up this sleep. \n", TbTTTime)); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +- return; +- } +- else +- { +- PsPollTime = (64*TbTTTime- LEAD_TIME*1024)/1000; +- PsPollTime -= 3; +- +- BeaconPeriodTime = pAd->CommonCfg.BeaconPeriod*102/100; +- if (TbttNumToNextWakeUp > 0) +- PsPollTime += ((TbttNumToNextWakeUp -1) * BeaconPeriodTime); +- +- pAd->Mlme.bPsPollTimerRunning = TRUE; +- RTMPSetTimer(&pAd->Mlme.PsPollTimer, PsPollTime); +- } +- } +- } +- +- // 0. Disable Tx DMA. +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- DmaCfg.field.EnableTxDMA = 0; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); +- +- // 1. Wait DMA not busy +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- if ((DmaCfg.field.TxDMABusy == 0) && (DmaCfg.field.RxDMABusy == 0)) +- break; +- RTMPusecDelay(20); +- i++; +- }while(i < 50); +- +- if (i >= 50) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("DMA keeps busy. return on RT28xxPciAsicRadioOff ()\n")); +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- DmaCfg.field.EnableTxDMA = 1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); +- pAd->CheckDmaBusyCount++; +- return; +- } +- else +- { +- pAd->CheckDmaBusyCount = 0; +- } +- +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- +- // Set to 1R. +- if (pAd->Antenna.field.RxPath > 1) +- { +- tempBBP_R3 = (pAd->StaCfg.BBPR3 & 0xE7); +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, tempBBP_R3); +- } +- +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); +- } +- +- if (Level != RTMP_HALT) +- { +- // Change Interrupt bitmask. +- RTMP_IO_WRITE32(pAd, INT_MASK_CSR, AutoWakeupInt); +- } +- else +- { +- NICDisableInterrupt(pAd); +- } +- +- RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); +- // Disable MAC Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL , &MACValue); +- MACValue &= 0xf7; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL , MACValue); +- +- // 2. Send Sleep command +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_STATUS, 0xffffffff); +- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CID, 0xffffffff); +- // send POWER-SAVE command to MCU. high-byte = 1 save power as much as possible. high byte = 0 save less power +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x1); +- // 2-1. Wait command success +- // Status = 1 : success, Status = 2, already sleep, Status = 3, Maybe MAC is busy so can't finish this task. +- brc = AsicCheckCommanOk(pAd, PowerSafeCID); +- +- if (brc == FALSE) +- { +- // try again +- AsicSendCommandToMcu(pAd, 0x30, PowerSafeCID, 0xff, 0x01); // send POWER-SAVE command to MCU. Timeout unit:40us. +- //RTMPusecDelay(200); +- brc = AsicCheckCommanOk(pAd, PowerSafeCID); +- } +- +- // 3. After 0x30 command is ok, send radio off command. lowbyte = 0 for power safe. +- // If 0x30 command is not ok this time, we can ignore 0x35 command. It will make sure not cause firmware'r problem. +- if ((Level == DOT11POWERSAVE) && (brc == TRUE)) +- { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 0, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success +- AsicCheckCommanOk(pAd, PowerRadioOffCID); +- } +- else if (brc == TRUE) +- { +- AsicSendCommandToMcu(pAd, 0x35, PowerRadioOffCID, 1, 0x00); // lowbyte = 0 means to do power safe, NOT turn off radio. +- // 3-1. Wait command success +- AsicCheckCommanOk(pAd, PowerRadioOffCID); +- } +- +- // Wait DMA not busy +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- if ((DmaCfg.field.RxDMABusy == 0) && (DmaCfg.field.TxDMABusy == 0)) +- break; +- RTMPusecDelay(20); +- i++; +- }while(i < 50); +- +- if (i >= 50) +- { +- pAd->CheckDmaBusyCount++; +- DBGPRINT(RT_DEBUG_TRACE, ("DMA Rx keeps busy. on RT28xxPciAsicRadioOff ()\n")); +- } +- else +- { +- pAd->CheckDmaBusyCount = 0; +- } +- +- if (Level == DOT11POWERSAVE) +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- //RTMPSetTimer(&pAd->Mlme.PsPollTimer, 90); +- +- // we have decided to SLEEP, so at least do it for a BEACON period. +- if (TbttNumToNextWakeUp == 0) +- TbttNumToNextWakeUp = 1; +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- // 1. Set auto wake up timer. +- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; +- AutoWakeupCfg.field.EnableAutoWakeup = 1; +- AutoWakeupCfg.field.AutoLeadTime = LEAD_TIME; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- } +- +- // 4-1. If it's to disable our device. Need to restore PCI Configuration Space to its original value. +- if (Level == RTMP_HALT) +- { +- if ((brc == TRUE) && (i < 50)) +- RTMPPCIeLinkCtrlSetting(pAd, 0); +- } +- // 4. Set PCI configuration Space Link Comtrol fields. Only Radio Off needs to call this function +- else +- { +- if ((brc == TRUE) && (i < 50)) +- RTMPPCIeLinkCtrlSetting(pAd, 3); +- } +- +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_DISABLE_TX); +-} +- +- +-/* +- ========================================================================== +- Description: +- This routine sends command to firmware and turn our chip to wake up mode from power save mode. +- Both RadioOn and .11 power save function needs to call this routine. +- Input: +- Level = GUIRADIO_OFF : call this function is from Radio Off to Radio On. Need to restore PCI host value. +- Level = other value : normal wake up function. +- +- ========================================================================== +- */ +-BOOLEAN RT28xxPciAsicRadioOn( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) +-{ +- WPDMA_GLO_CFG_STRUC DmaCfg; +- BOOLEAN Cancelled, brv = TRUE; +- UINT32 MACValue; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- if ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE) +- || (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n")); +- // 1. Set PCI Link Control in Configuration Space. +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(6000); +- } +- } +- +- pAd->bPCIclkOff = FALSE; +- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x3a80); +- // 2. Send wake up command. +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- +- // 2-1. wait command ok. +- brv = AsicCheckCommanOk(pAd, PowerWakeCID); +- if (brv) +- { +- NICEnableInterrupt(pAd); +- +- // 3. Enable Tx DMA. +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- DmaCfg.field.EnableTxDMA = 1; +- DmaCfg.field.EnableRxDMA = 1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); +- +- // Eable MAC Rx +- RTMP_IO_READ32(pAd, MAC_SYS_CTRL , &MACValue); +- MACValue |= 0x8; +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL , MACValue); +- +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF); +- if (Level == GUI_IDLE_POWER_SAVE) +- { +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +- } +- return TRUE; +- } +- else +- return FALSE; +-} +- +-VOID RT28xxPciStaAsicForceWakeup( +- IN PRTMP_ADAPTER pAd, +- IN UCHAR Level) +-{ +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); +- return; +- } +- +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- // Support PCIe Advance Power Save +- if (((Level == FROM_TX) && (pAd->Mlme.bPsPollTimerRunning == TRUE)) || +- (Level == RTMP_HALT)) +- { +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- RTMPusecDelay(5000); +- DBGPRINT(RT_DEBUG_TRACE, ("=======AsicForceWakeup===bFromTx\n")); +- } +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- +- // If this is called from Halt. ALWAYS force wakeup! +- if (Level == RTMP_HALT) +- { +- RT28xxPciAsicRadioOn(pAd, RTMP_HALT); +- } +- else +- { +- if (RT28xxPciAsicRadioOn(pAd, DOT11POWERSAVE)) +- { +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +- } +- } +- } +- else +- { +- // PCI, 2860-PCIe +- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x00); +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- } +- +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW); +- DBGPRINT(RT_DEBUG_TRACE, ("<=======RT28xxPciStaAsicForceWakeup\n")); +-} +- +-VOID RT28xxPciStaAsicSleepThenAutoWakeup( +- IN PRTMP_ADAPTER pAd, +- IN USHORT TbttNumToNextWakeUp) +-{ +- if (pAd->StaCfg.bRadio == FALSE) +- { +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- return; +- } +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- ULONG Now = 0; +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WAKEUP_NOW)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("waking up now!\n")); +- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE); +- return; +- } +- +- NdisGetSystemUpTime(&Now); +- // If last send NULL fram time is too close to this receiving beacon (within 8ms), don't go to sleep for this DTM. +- // Because Some AP can't queuing outgoing frames immediately. +- if (((pAd->Mlme.LastSendNULLpsmTime + 8) >= Now) && (pAd->Mlme.LastSendNULLpsmTime <= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu : RxCountSinceLastNULL = %lu. \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); +- return; +- } +- else if ((pAd->RalinkCounters.RxCountSinceLastNULL > 0) && ((pAd->Mlme.LastSendNULLpsmTime + pAd->CommonCfg.BeaconPeriod) >= Now)) +- { +- DBGPRINT(RT_DEBUG_TRACE, ("Now = %lu, LastSendNULLpsmTime=%lu: RxCountSinceLastNULL = %lu > 0 \n", Now, pAd->Mlme.LastSendNULLpsmTime, pAd->RalinkCounters.RxCountSinceLastNULL)); +- return; +- } +- +- RT28xxPciAsicRadioOff(pAd, DOT11POWERSAVE, TbttNumToNextWakeUp); +- } +- else +- { +- AUTO_WAKEUP_STRUC AutoWakeupCfg; +- // we have decided to SLEEP, so at least do it for a BEACON period. +- if (TbttNumToNextWakeUp == 0) +- TbttNumToNextWakeUp = 1; +- +- AutoWakeupCfg.word = 0; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1; +- AutoWakeupCfg.field.EnableAutoWakeup = 1; +- AutoWakeupCfg.field.AutoLeadTime = 5; +- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word); +- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x00); // send POWER-SAVE command to MCU. Timeout 40us. +- DBGPRINT(RT_DEBUG_TRACE, ("<-- %s, TbttNumToNextWakeUp=%d \n", __func__, TbttNumToNextWakeUp)); +- } +- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE); +-} +- +-VOID PsPollWakeExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- unsigned long flags; +- +- DBGPRINT(RT_DEBUG_TRACE,("-->PsPollWakeExec \n")); +- RTMP_INT_LOCK(&pAd->irq_lock, flags); +- if (pAd->Mlme.bPsPollTimerRunning) +- { +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- } +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMP_INT_UNLOCK(&pAd->irq_lock, flags); +-} +- +-VOID RadioOnExec( +- IN PVOID SystemSpecific1, +- IN PVOID FunctionContext, +- IN PVOID SystemSpecific2, +- IN PVOID SystemSpecific3) +-{ +- RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext; +- WPDMA_GLO_CFG_STRUC DmaCfg; +- BOOLEAN Cancelled; +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on fOP_STATUS_DOZE == TRUE; \n")); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- return; +- } +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->RadioOnExec() return on SCAN_IN_PROGRESS; \n")); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- return; +- } +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- if (pAd->StaCfg.bRadio == TRUE) +- { +- pAd->bPCIclkOff = FALSE; +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- // 2. Send wake up command. +- AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02); +- // 2-1. wait command ok. +- AsicCheckCommanOk(pAd, PowerWakeCID); +- +- // When PCI clock is off, don't want to service interrupt. So when back to clock on, enable interrupt. +- NICEnableInterrupt(pAd); +- +- // 3. Enable Tx DMA. +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &DmaCfg.word); +- DmaCfg.field.EnableTxDMA = 1; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word); +- +- // In Radio Off, we turn off RF clk, So now need to call ASICSwitchChannel again. +- if (INFRA_ON(pAd) && (pAd->CommonCfg.CentralChannel != pAd->CommonCfg.Channel) +- && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40)) +- { +- // Must using 40MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE); +- AsicLockChannel(pAd, pAd->CommonCfg.Channel); +- } +- +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +- +- if (pAd->StaCfg.Psm == PWR_ACTIVE) +- { +- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); +- } +- } +- else +- { +- RT28xxPciAsicRadioOff(pAd, GUIRADIO_OFF, 0); +- } +-} +- +-VOID RT28xxPciMlmeRadioOn( +- IN PRTMP_ADAPTER pAd) +-{ +- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); +- +- if ((pAd->OpMode == OPMODE_AP) || +- ((pAd->OpMode == OPMODE_STA) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)))) +- { +- NICResetFromError(pAd); +- +- /* +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- */ +- +- // Enable Tx/Rx +- RTMPEnableRxTx(pAd); +- +- // Clear Radio off flag +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_ON); +- } +- +- if ((pAd->OpMode == OPMODE_STA) && +- (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))) +- { +- BOOLEAN Cancelled; +- +- RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_WAKEUP); +- +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10); +- } +-} +- +-VOID RT28xxPciMlmeRadioOFF( +- IN PRTMP_ADAPTER pAd) +-{ +- WPDMA_GLO_CFG_STRUC GloCfg; +- UINT32 i; +- +- if (pAd->StaCfg.bRadio == TRUE) +- { +- DBGPRINT(RT_DEBUG_TRACE,("-->MlmeRadioOff() return on bRadio == TRUE; \n")); +- return; +- } +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) +- return; +- +- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __func__)); +- +- // Set LED +- RTMPSetLED(pAd, LED_RADIO_OFF); +- +- { +- BOOLEAN Cancelled; +- +- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) +- { +- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled); +- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); +- } +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- BOOLEAN Cancelled; +- +- // Always radio on since the NIC needs to set the MCU command (LED_RADIO_OFF). +- if ((pAd->OpMode == OPMODE_STA) && +- (IDLE_ON(pAd)) && +- (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))) +- { +- RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); +- } +- +- pAd->Mlme.bPsPollTimerRunning = FALSE; +- RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled); +- RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled); +- } +- +- // Link down first if any association exists +- if (INFRA_ON(pAd) || ADHOC_ON(pAd)) +- LinkDown(pAd, FALSE); +- RTMPusecDelay(10000); +- //========================================== +- // Clean up old bss table +- BssTableInit(&pAd->ScanTab); +- +- RTMPRingCleanUp(pAd, QID_AC_BK); +- RTMPRingCleanUp(pAd, QID_AC_BE); +- RTMPRingCleanUp(pAd, QID_AC_VI); +- RTMPRingCleanUp(pAd, QID_AC_VO); +- RTMPRingCleanUp(pAd, QID_HCCA); +- RTMPRingCleanUp(pAd, QID_MGMT); +- RTMPRingCleanUp(pAd, QID_RX); +- +- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) +- { +- RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 500); +- return; +- } +- } +- +- // Set Radio off flag +- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); +- +- // Disable Tx/Rx DMA +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA +- GloCfg.field.EnableTxDMA = 0; +- GloCfg.field.EnableRxDMA = 0; +- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings +- +- +- // MAC_SYS_CTRL => value = 0x0 => 40mA +- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0); +- +- // PWR_PIN_CFG => value = 0x0 => 40mA +- RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0); +- +- // TX_PIN_CFG => value = 0x0 => 20mA +- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, 0); +- +- if (pAd->CommonCfg.BBPCurrentBW == BW_40) +- { +- // Must using 40MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel); +- } +- else +- { +- // Must using 20MHz. +- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel); +- } +- +- // Waiting for DMA idle +- i = 0; +- do +- { +- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); +- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) +- break; +- +- RTMPusecDelay(1000); +- }while (i++ < 100); +-} +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch b/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch new file mode 100644 index 000000000..14f754e46 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch @@ -0,0 +1,32 @@ +From dab868d7bd18571cf8510ce8566c503a73d8e86d Mon Sep 17 00:00:00 2001 +From: Roel Kluin +Date: Sat, 26 Dec 2009 20:00:47 +0100 +Subject: [PATCH 34/42] Staging: rt2860: test off by one in RtmpAsicSendCommandToMcu() + +commit 23a51a8061567a47347ade59edf2a0bde0eece30 upstream. + +`i' reaches 101 after the loop, so if it was 100 then it succeeded in +the last iteration. This is probably unlikely to cause problems. + +Signed-off-by: Roel Kluin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/common/rtmp_mcu.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index 9f03901..e80f587 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -221,7 +221,7 @@ int RtmpAsicSendCommandToMcu(struct rt_rtmp_adapter *pAd, + ("AsicSendCommanToMcu::Mail box is busy\n")); + } while (i++ < 100); + +- if (i >= 100) { ++ if (i > 100) { + DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n")); + return FALSE; + } +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch b/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch new file mode 100644 index 000000000..99c50d188 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch @@ -0,0 +1,37 @@ +From 584d8be9af3bc71abe5bd2977c0f6f22935a7ab2 Mon Sep 17 00:00:00 2001 +From: Simon Horman +Date: Wed, 23 Dec 2009 19:54:50 +1100 +Subject: [PATCH 35/42] Staging: rt2870: rtusb_probe() should be in section __devinit + +commit c33c2065fc4d424e23547b58900ded5eb4444e9d upstream. + +$ make CONFIG_DEBUG_SECTION_MISMATCH=y +WARNING: drivers/staging/rt2870/rt2870sta.o(.text+0x2f4c5): Section +mismatch in reference from the function rtusb_probe() to the function .devinit.text:rt2870_probe() +The function rtusb_probe() references +the function __devinit rt2870_probe(). +This is often because rtusb_probe lacks a __devinit +annotation or the annotation of rt2870_probe is wrong. + +Signed-off-by: Simon Horman +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/usb_main_dev.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 925a236..1e6e8a3 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -296,7 +296,7 @@ static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + + } + +-static int rtusb_probe(struct usb_interface *intf, ++static int __devinit rtusb_probe(struct usb_interface *intf, + const struct usb_device_id *id) + { + struct rt_rtmp_adapter *pAd; +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch b/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch new file mode 100644 index 000000000..6fe8e266a --- /dev/null +++ b/debian/patches/features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch @@ -0,0 +1,33 @@ +From f2366b77e8324bd004fcd959f9fe787c7d731661 Mon Sep 17 00:00:00 2001 +From: Simon Horman +Date: Wed, 23 Dec 2009 19:54:51 +1100 +Subject: [PATCH 36/42] Staging: rt2870: Remove unnecessary forward declarations + +commit db15438cd5be7380cdf27c8adb8fc71a72da0210 upstream. + +Remove unnecessary forward declaration of rtusb_probe() and rtusb_disconnect() + +Signed-off-by: Simon Horman +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/usb_main_dev.c | 4 ---- + 1 files changed, 0 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 1e6e8a3..1873a79 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -216,10 +216,6 @@ static int rt2870_suspend(struct usb_interface *intf, pm_message_t state); + static int rt2870_resume(struct usb_interface *intf); + #endif /* CONFIG_PM // */ + +-static int rtusb_probe(struct usb_interface *intf, +- const struct usb_device_id *id); +-static void rtusb_disconnect(struct usb_interface *intf); +- + static BOOLEAN USBDevConfigInit(IN struct usb_device *dev, + IN struct usb_interface *intf, + struct rt_rtmp_adapter *pAd) +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch b/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch new file mode 100644 index 000000000..554cf4e90 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch @@ -0,0 +1,79 @@ +From b3fe9d6202b44962e47ede26231866d9d657b129 Mon Sep 17 00:00:00 2001 +From: Jeff Mahoney +Date: Mon, 11 Jan 2010 10:54:25 -0500 +Subject: [PATCH 37/42] Staging: rt2860: Use skb_tail_pointer + +commit 53cf8743d227283e78c27ada407b506014c9223d upstream. + +rt2860 uses skb->tail directly. This patch uses the tail pointer macros +instead. + +Signed-off-by: Jeff Mahoney +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/rt_linux.c | 10 +++++----- + drivers/staging/rt2860/rt_linux.h | 4 ++-- + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 9357fb2..9d763b4 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -462,9 +462,9 @@ void *duplicate_pkt(struct rt_rtmp_adapter *pAd, + if ((skb = + __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) { + skb_reserve(skb, 2); +- NdisMoveMemory(skb->tail, pHeader802_3, HdrLen); ++ NdisMoveMemory(skb_tail_pointer(skb), pHeader802_3, HdrLen); + skb_put(skb, HdrLen); +- NdisMoveMemory(skb->tail, pData, DataSize); ++ NdisMoveMemory(skb_tail_pointer(skb), pData, DataSize); + skb_put(skb, DataSize); + skb->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); + pPacket = OSPKT_TO_RTPKT(skb); +@@ -515,7 +515,7 @@ void *ClonePacket(struct rt_rtmp_adapter *pAd, + pClonedPkt->dev = pRxPkt->dev; + pClonedPkt->data = pData; + pClonedPkt->len = DataSize; +- pClonedPkt->tail = pClonedPkt->data + pClonedPkt->len; ++ skb_set_tail_pointer(pClonedPkt, DataSize) + ASSERT(DataSize < 1530); + } + return pClonedPkt; +@@ -535,7 +535,7 @@ void update_os_packet_info(struct rt_rtmp_adapter *pAd, + pOSPkt->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); + pOSPkt->data = pRxBlk->pData; + pOSPkt->len = pRxBlk->DataSize; +- pOSPkt->tail = pOSPkt->data + pOSPkt->len; ++ skb_set_tail_pointer(pOSPkt, pOSPkt->len); + } + + void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd, +@@ -553,7 +553,7 @@ void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd, + pOSPkt->dev = get_netdev_from_bssid(pAd, FromWhichBSSID); + pOSPkt->data = pRxBlk->pData; + pOSPkt->len = pRxBlk->DataSize; +- pOSPkt->tail = pOSPkt->data + pOSPkt->len; ++ skb_set_tail_pointer(pOSPkt, pOSPkt->len); + + /* */ + /* copy 802.3 header */ +diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h +index f85508d..a7c540f 100644 +--- a/drivers/staging/rt2860/rt_linux.h ++++ b/drivers/staging/rt2860/rt_linux.h +@@ -658,9 +658,9 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, + (RTPKT_TO_OSPKT(_pkt)->len) = (_len) + + #define GET_OS_PKT_DATATAIL(_pkt) \ +- (RTPKT_TO_OSPKT(_pkt)->tail) ++ (skb_tail_pointer(RTPKT_TO_OSPKT(_pkt)) + #define SET_OS_PKT_DATATAIL(_pkt, _start, _len) \ +- ((RTPKT_TO_OSPKT(_pkt))->tail) = (u8 *)((_start) + (_len)) ++ (skb_set_tail_pointer(RTPKT_TO_OSPKT(_pkt), _len)) + + #define GET_OS_PKT_HEAD(_pkt) \ + (RTPKT_TO_OSPKT(_pkt)->head) +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch b/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch new file mode 100644 index 000000000..b9690af65 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch @@ -0,0 +1,34 @@ +From 8245311036fd129a9b1fcd2821e091933339e7d2 Mon Sep 17 00:00:00 2001 +From: Roel Kluin +Date: Sun, 17 Jan 2010 16:44:37 +0100 +Subject: [PATCH 38/42] Staging: rt2860/sta_ioctl.c: Two branches the same in rt_ioctl_giwscan() + +commit a2c3fdb996a926a45622428405a042f011eb03ba upstream. + +Regardless of the condition, the branches execute the same code + +Signed-off-by: Roel Kluin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/sta_ioctl.c | 5 +---- + 1 files changed, 1 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c +index d8fbe6c..de4b627 100644 +--- a/drivers/staging/rt2860/sta_ioctl.c ++++ b/drivers/staging/rt2860/sta_ioctl.c +@@ -975,10 +975,7 @@ int rt_ioctl_giwscan(struct net_device *dev, + /*================================ */ + memset(&iwe, 0, sizeof(iwe)); + iwe.cmd = SIOCGIWFREQ; +- if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter)) +- iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel; +- else +- iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel; ++ iwe.u.freq.m = pAdapter->ScanTab.BssEntry[i].Channel; + iwe.u.freq.e = 0; + iwe.u.freq.i = 0; + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch b/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch new file mode 100644 index 000000000..717a0eb8e --- /dev/null +++ b/debian/patches/features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch @@ -0,0 +1,89 @@ +From 375932a0c499d5e0e1945327993cb47c150f1537 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Mon, 18 Jan 2010 02:50:24 +0000 +Subject: [PATCH 39/42] Staging: rt2870sta: constify RTUSBMultiWrite(), RTUSBFirmwareWrite() + +commit 8838d2560a8ccbc5e03688d55bf075793b36a04e upstream. + +These functions do not modify the data they are passed. + +Signed-off-by: Ben Hutchings +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/rtmp.h | 6 +++--- + drivers/staging/rt2870/common/rtusb_io.c | 10 +++++----- + 2 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index c50abf4..6c6503d 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -4043,10 +4043,10 @@ int RTUSBMultiRead(struct rt_rtmp_adapter *pAd, + u16 Offset, u8 *pData, u16 length); + + int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd, +- u16 Offset, u8 *pData, u16 length); ++ u16 Offset, const u8 *pData, u16 length); + + int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd, +- u16 Offset, u8 *pData); ++ u16 Offset, const u8 *pData); + + int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd, + u8 Id, u8 *pValue); +@@ -4112,7 +4112,7 @@ int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd, + u16 Offset, u16 Value); + + int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd, +- u8 *pFwImage, unsigned long FwLen); ++ const u8 *pFwImage, unsigned long FwLen); + + int RTUSBVenderReset(struct rt_rtmp_adapter *pAd); + +diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c +index 34443f2..cf0d2f5 100644 +--- a/drivers/staging/rt2870/common/rtusb_io.c ++++ b/drivers/staging/rt2870/common/rtusb_io.c +@@ -84,7 +84,7 @@ static int RTUSBFirmwareRun(struct rt_rtmp_adapter *pAd) + ======================================================================== + */ + int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd, +- u8 *pFwImage, unsigned long FwLen) ++ const u8 *pFwImage, unsigned long FwLen) + { + u32 MacReg; + int Status; +@@ -167,7 +167,7 @@ int RTUSBMultiRead(struct rt_rtmp_adapter *pAd, + ======================================================================== + */ + int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd, +- u16 Offset, u8 *pData) ++ u16 Offset, const u8 *pData) + { + int Status; + +@@ -175,18 +175,18 @@ int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd, + Status = RTUSB_VendorRequest(pAd, + USBD_TRANSFER_DIRECTION_OUT, + DEVICE_VENDOR_REQUEST_OUT, +- 0x6, 0, Offset, pData, 1); ++ 0x6, 0, Offset, (u8 *)pData, 1); + + return Status; + } + + int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd, +- u16 Offset, u8 *pData, u16 length) ++ u16 Offset, const u8 *pData, u16 length) + { + int Status; + + u16 index = 0, Value; +- u8 *pSrc = pData; ++ const u8 *pSrc = pData; + u16 resude = 0; + + resude = length % 2; +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch b/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch new file mode 100644 index 000000000..182c17614 --- /dev/null +++ b/debian/patches/features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch @@ -0,0 +1,291 @@ +From b31c3babea8aec7d093e23990041ca449a280841 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings +Date: Sun, 18 Jul 2010 03:38:41 +0100 +Subject: [PATCH 40/42] Staging: rt{2860,2870}sta: Use request_firmware() to load firmware + +commit c22202faade08b6b45f14fd86bfb57f79d73464c upstream. + +When originally introduced into staging, these drivers had custom +firmware-loading code which checked a version number and CRC at the +end of each blob. This reintroduces those checks, using crc-ccitt +instead of custom code. + +The removed firmware will be added to the linux-firmware.git +repository. + +Based on work by Darren Salt . + +Signed-off-by: Ben Hutchings +Tested-By: Darren Salt +Signed-off-by: Greg Kroah-Hartman +[bwh: Strip firmware; adjust for Debian's 2.6.32] +--- + drivers/staging/rt2860/Kconfig | 3 +- + drivers/staging/rt2860/common/rtmp_mcu.c | 165 +++++++++++++++++++----------- + drivers/staging/rt2860/rt_linux.c | 3 + + drivers/staging/rt2860/rtmp.h | 1 + + drivers/staging/rt2870/Kconfig | 3 +- + 5 files changed, 113 insertions(+), 62 deletions(-) + +diff --git a/drivers/staging/rt2860/Kconfig b/drivers/staging/rt2860/Kconfig +index 40200d2..1b19a5f 100644 +--- a/drivers/staging/rt2860/Kconfig ++++ b/drivers/staging/rt2860/Kconfig +@@ -1,7 +1,8 @@ + config RT2860 + tristate "Ralink 2860/3090 wireless support" +- depends on BROKEN + depends on PCI && X86 && WLAN ++ select CRC_CCITT ++ select FW_LOADER + ---help--- + This is an experimental driver for the Ralink 2860 and 3090 + wireless chips. +diff --git a/drivers/staging/rt2860/common/rtmp_mcu.c b/drivers/staging/rt2860/common/rtmp_mcu.c +index e80f587..844d4b9 100644 +--- a/drivers/staging/rt2860/common/rtmp_mcu.c ++++ b/drivers/staging/rt2860/common/rtmp_mcu.c +@@ -37,35 +37,38 @@ + + #include "../rt_config.h" + +-#if defined(RT2860) || defined(RT3090) +-#include "firmware.h" +-#include "../../rt3090/firmware.h" +-#endif +-#ifdef RT2870 +-#include "../../rt3070/firmware.h" +-#include "firmware_3070.h" +-#endif +- +-#include ++#include ++#include + + #ifdef RTMP_MAC_USB +-/* */ +-/* RT2870 Firmware Spec only used 1 oct for version expression */ +-/* */ +-#define FIRMWARE_MINOR_VERSION 7 +-#endif /* RTMP_MAC_USB // */ + +-/* New 8k byte firmware size for RT3071/RT3072 */ +-#define FIRMWAREIMAGE_MAX_LENGTH 0x2000 +-#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(u8)) +-#define FIRMWARE_MAJOR_VERSION 0 ++#define FIRMWAREIMAGE_LENGTH 0x1000 + +-#define FIRMWAREIMAGEV1_LENGTH 0x1000 +-#define FIRMWAREIMAGEV2_LENGTH 0x1000 ++#define FIRMWARE_2870_MIN_VERSION 12 ++#define FIRMWARE_2870_FILENAME "rt2870.bin" ++MODULE_FIRMWARE(FIRMWARE_2870_FILENAME); + +-#ifdef RTMP_MAC_PCI +-#define FIRMWARE_MINOR_VERSION 2 +-#endif /* RTMP_MAC_PCI // */ ++#define FIRMWARE_3070_MIN_VERSION 17 ++#define FIRMWARE_3070_FILENAME "rt3070.bin" ++MODULE_FIRMWARE(FIRMWARE_3070_FILENAME); ++ ++#define FIRMWARE_3071_MIN_VERSION 17 ++#define FIRMWARE_3071_FILENAME "rt3071.bin" /* for RT3071/RT3072 */ ++MODULE_FIRMWARE(FIRMWARE_3071_FILENAME); ++ ++#else /* RTMP_MAC_PCI */ ++ ++#define FIRMWAREIMAGE_LENGTH 0x2000 ++ ++#define FIRMWARE_2860_MIN_VERSION 11 ++#define FIRMWARE_2860_FILENAME "rt2860.bin" ++MODULE_FIRMWARE(FIRMWARE_2860_FILENAME); ++ ++#define FIRMWARE_3090_MIN_VERSION 19 ++#define FIRMWARE_3090_FILENAME "rt3090.bin" /* for RT3090/RT3390 */ ++MODULE_FIRMWARE(FIRMWARE_3090_FILENAME); ++ ++#endif + + /* + ======================================================================== +@@ -90,6 +93,78 @@ int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd) + return 0; + } + ++static const struct firmware *rtmp_get_firmware(struct rt_rtmp_adapter *adapter) ++{ ++ const char *name; ++ const struct firmware *fw = NULL; ++ u8 min_version; ++ struct device *dev; ++ int err; ++ ++ if (adapter->firmware) ++ return adapter->firmware; ++ ++#ifdef RTMP_MAC_USB ++ if (IS_RT3071(adapter)) { ++ name = FIRMWARE_3071_FILENAME; ++ min_version = FIRMWARE_3071_MIN_VERSION; ++ } else if (IS_RT3070(adapter)) { ++ name = FIRMWARE_3070_FILENAME; ++ min_version = FIRMWARE_3070_MIN_VERSION; ++ } else { ++ name = FIRMWARE_2870_FILENAME; ++ min_version = FIRMWARE_2870_MIN_VERSION; ++ } ++ dev = &((struct os_cookie *)adapter->OS_Cookie)->pUsb_Dev->dev; ++#else /* RTMP_MAC_PCI */ ++ if (IS_RT3090(adapter) || IS_RT3390(adapter)) { ++ name = FIRMWARE_3090_FILENAME; ++ min_version = FIRMWARE_3090_MIN_VERSION; ++ } else { ++ name = FIRMWARE_2860_FILENAME; ++ min_version = FIRMWARE_2860_MIN_VERSION; ++ } ++ dev = &((struct os_cookie *)adapter->OS_Cookie)->pci_dev->dev; ++#endif ++ ++ err = request_firmware(&fw, name, dev); ++ if (err) { ++ dev_err(dev, "firmware file %s request failed (%d)\n", ++ name, err); ++ return NULL; ++ } ++ ++ if (fw->size < FIRMWAREIMAGE_LENGTH) { ++ dev_err(dev, "firmware file %s size is invalid\n", name); ++ goto invalid; ++ } ++ ++ /* is it new enough? */ ++ adapter->FirmwareVersion = fw->data[FIRMWAREIMAGE_LENGTH - 3]; ++ if (adapter->FirmwareVersion < min_version) { ++ dev_err(dev, ++ "firmware file %s is too old;" ++ " driver requires v%d or later\n", ++ name, min_version); ++ goto invalid; ++ } ++ ++ /* is the internal CRC correct? */ ++ if (crc_ccitt(0xffff, fw->data, FIRMWAREIMAGE_LENGTH - 2) != ++ (fw->data[FIRMWAREIMAGE_LENGTH - 2] | ++ (fw->data[FIRMWAREIMAGE_LENGTH - 1] << 8))) { ++ dev_err(dev, "firmware file %s failed internal CRC\n", name); ++ goto invalid; ++ } ++ ++ adapter->firmware = fw; ++ return fw; ++ ++invalid: ++ release_firmware(fw); ++ return NULL; ++} ++ + /* + ======================================================================== + +@@ -109,46 +184,16 @@ int RtmpAsicEraseFirmware(struct rt_rtmp_adapter *pAd) + */ + int RtmpAsicLoadFirmware(struct rt_rtmp_adapter *pAd) + { +- ++ const struct firmware *fw; + int Status = NDIS_STATUS_SUCCESS; +- u8 *pFirmwareImage = NULL; +- unsigned long FileLength, Index; ++ unsigned long Index; + u32 MacReg = 0; +-#ifdef RTMP_MAC_USB +- u32 Version = (pAd->MACVersion >> 16); +-#endif + +- /* New 8k byte firmware size for RT3071/RT3072 */ +- { +-#ifdef RTMP_MAC_PCI +- if (IS_RT3090(pAd) || IS_RT3390(pAd)) { +- pFirmwareImage = FirmwareImage_3090; +- FileLength = FIRMWAREIMAGE_MAX_LENGTH; +- } else { +- pFirmwareImage = FirmwareImage_2860; +- FileLength = FIRMWAREIMAGE_MAX_LENGTH; +- } +-#endif /* RTMP_MAC_PCI // */ +-#ifdef RTMP_MAC_USB +- /* the firmware image consists of two parts */ +- if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070)) { /* use the second part */ +- /*printk("KH:Use New Version,part2\n"); */ +- pFirmwareImage = +- (u8 *)& +- FirmwareImage_3070[FIRMWAREIMAGEV1_LENGTH]; +- FileLength = FIRMWAREIMAGEV2_LENGTH; +- } else { +- /*printk("KH:Use New Version,part1\n"); */ +- if (Version == 0x3070) +- pFirmwareImage = FirmwareImage_3070; +- else +- pFirmwareImage = FirmwareImage_2870; +- FileLength = FIRMWAREIMAGEV1_LENGTH; +- } +-#endif /* RTMP_MAC_USB // */ +- } ++ fw = rtmp_get_firmware(pAd); ++ if (!fw) ++ return NDIS_STATUS_FAILURE; + +- RTMP_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength); ++ RTMP_WRITE_FIRMWARE(pAd, fw->data, FIRMWAREIMAGE_LENGTH); + + /* check if MCU is ready */ + Index = 0; +diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c +index 9d763b4..b5c78ae 100644 +--- a/drivers/staging/rt2860/rt_linux.c ++++ b/drivers/staging/rt2860/rt_linux.c +@@ -25,6 +25,7 @@ + ************************************************************************* + */ + ++#include + #include + #include "rt_config.h" + +@@ -260,6 +261,8 @@ void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd) + + NdisFreeSpinLock(&pAd->irq_lock); + ++ release_firmware(pAd->firmware); ++ + vfree(pAd); /* pci_free_consistent(os_cookie->pci_dev,sizeof(struct rt_rtmp_adapter),pAd,os_cookie->pAd_pa); */ + if (os_cookie) + kfree(os_cookie); +diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h +index 6c6503d..4401a55 100644 +--- a/drivers/staging/rt2860/rtmp.h ++++ b/drivers/staging/rt2860/rtmp.h +@@ -1719,6 +1719,7 @@ struct rt_rtmp_adapter { + void *OS_Cookie; /* save specific structure relative to OS */ + struct net_device *net_dev; + unsigned long VirtualIfCnt; ++ const struct firmware *firmware; + + struct rt_rtmp_chip_op chipOps; + u16 ThisTbttNumToNextWakeUp; +diff --git a/drivers/staging/rt2870/Kconfig b/drivers/staging/rt2870/Kconfig +index 05ee373..a0c9eb3 100644 +--- a/drivers/staging/rt2870/Kconfig ++++ b/drivers/staging/rt2870/Kconfig +@@ -1,6 +1,7 @@ + config RT2870 + tristate "Ralink 2870/3070 wireless support" +- depends on BROKEN + depends on USB && X86 && WLAN ++ select CRC_CCITT ++ select FW_LOADER + ---help--- + This is an experimental driver for the Ralink xx70 wireless chips. +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch b/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch new file mode 100644 index 000000000..e0c02017f --- /dev/null +++ b/debian/patches/features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch @@ -0,0 +1,35 @@ +From f08a92184c7ada338949b7cb682626f939853d7a Mon Sep 17 00:00:00 2001 +From: Yong Zhang +Date: Fri, 5 Feb 2010 21:52:40 +0800 +Subject: [PATCH 41/42] Staging: rt2860: correct onstack wait_queue_head declaration + +commit e41e5d601e1c035fde488f9543c978b8ae86e1be upstream. + +Use DECLARE_WAIT_QUEUE_HEAD_ONSTACK to make lockdep happy + +Signed-off-by: Yong Zhang +Cc: Greg Kroah-Hartman +Cc: Bartlomiej Zolnierkiewicz +Cc: Alexander Beregalov +Cc: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/rt_main_dev.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c +index c3d9280..fbddb00 100644 +--- a/drivers/staging/rt2860/rt_main_dev.c ++++ b/drivers/staging/rt2860/rt_main_dev.c +@@ -216,7 +216,7 @@ int rt28xx_close(struct net_device *dev) + u32 i = 0; + + #ifdef RTMP_MAC_USB +- DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup); ++ DECLARE_WAIT_QUEUE_HEAD_ONSTACK(unlink_wakeup); + DECLARE_WAITQUEUE(wait, current); + #endif /* RTMP_MAC_USB // */ + +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch b/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch new file mode 100644 index 000000000..a77f9c3cf --- /dev/null +++ b/debian/patches/features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch @@ -0,0 +1,31 @@ +From bd87a2b1bbd0352a8cfbb43edc878f45feadb555 Mon Sep 17 00:00:00 2001 +From: Chris Largret +Date: Wed, 3 Mar 2010 05:24:26 -0600 +Subject: [PATCH 42/42] Staging: rt2860: add Belkin F5D8055 Wireless-N USB Dongle device id + +commit 12840c63b0679f7fab88ea1cc26b52db8b574ce7 upstream. + +Add Belkin F5D8055 Wireless-N USB support to the rt2870 +staging driver. + +Signed-off-by: Chris Largret +Signed-off-by: Greg Kroah-Hartman +--- + drivers/staging/rt2860/usb_main_dev.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c +index 1873a79..740db0c 100644 +--- a/drivers/staging/rt2860/usb_main_dev.c ++++ b/drivers/staging/rt2860/usb_main_dev.c +@@ -63,6 +63,7 @@ struct usb_device_id rtusb_usb_id[] = { + {USB_DEVICE(0x07D1, 0x3C11)}, /* D-Link */ + {USB_DEVICE(0x14B2, 0x3C07)}, /* AL */ + {USB_DEVICE(0x050D, 0x8053)}, /* Belkin */ ++ {USB_DEVICE(0x050D, 0x825B)}, /* Belkin */ + {USB_DEVICE(0x14B2, 0x3C23)}, /* Airlink */ + {USB_DEVICE(0x14B2, 0x3C27)}, /* Airlink */ + {USB_DEVICE(0x07AA, 0x002F)}, /* Corega */ +-- +1.7.1 + diff --git a/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands b/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands new file mode 100644 index 000000000..be41ca986 --- /dev/null +++ b/debian/patches/features/all/rt28x0/remove-rt3090-driver.commands @@ -0,0 +1 @@ +rm drivers/staging/rt3090 diff --git a/debian/patches/series/18 b/debian/patches/series/18 index 80dc45079..ca96a3d76 100644 --- a/debian/patches/series/18 +++ b/debian/patches/series/18 @@ -15,3 +15,49 @@ + features/arm/arm-add-pci_sys_data.patch + features/arm/kirkwood-add-pcie1.patch + features/arm/kirkwood-factorize-pcie-init-code +- features/all/rt3090sta-use-request_firmware.patch +- features/all/rt28x0sta-use-request_firmware.patch +- features/all/rt28x0sta-constify-RTUSBMultiWrite-RTUSBFirmwareWrite.patch ++ features/all/rt28x0/0001-Staging-rt28x0-updates-from-vendor-s-V2.1.0.0-driver.patch ++ features/all/rt28x0/0002-Staging-rt28x0-remove-unused-code-from-common-dfs.c.patch ++ features/all/rt28x0/0003-Staging-rt2860-add-RT3090-chipset-support.patch ++ features/all/rt28x0/0004-Staging-remove-no-longer-needed-rt3090-driver.patch +X features/all/rt28x0/remove-rt3090-driver.commands ++ features/all/rt28x0/0005-Staging-rt28x0-remove-unused-eewrite-methods.patch ++ features/all/rt28x0/0006-Staging-rt28x0-remove-unused-code-from-common-ee_efu.patch ++ features/all/rt28x0/0007-Staging-rt28x0-remove-private-RTPRIV_IOCTL_SET-ioctl.patch ++ features/all/rt28x0/0008-Staging-rt28x0-remove-private-RTPRIV_IOCTL_GSITESURV.patch ++ features/all/rt28x0/0009-Staging-rt28x0-remove-private-WEXT-handlers.patch ++ features/all/rt28x0/0010-Staging-rt28x0-remove-support-for-private-driver-par.patch ++ features/all/rt28x0/0011-Staging-rt28x0-remove-optional-loading-of-EEPROM-fro.patch ++ features/all/rt28x0/0012-Staging-rt28x0-fix-some-build-warnings.patch ++ features/all/rt28x0/0013-Staging-rt28x0-remove-optional-cmm-profile-parameter.patch ++ features/all/rt28x0/0014-Staging-rt28x0-remove-dead-code-from-rtmp_phy.h.patch ++ features/all/rt28x0/0015-Staging-rt28x0-remove-unused-SHA256-code.patch ++ features/all/rt28x0/0016-Staging-rt28x0-remove-dead-code.patch ++ features/all/rt28x0/0017-Staging-rt28x0-remove-__LINE__-instances.patch ++ features/all/rt28x0/0018-Staging-rt28x0-run-.c-files-through-Lindent.patch ++ features/all/rt28x0/0019-Staging-rt28x0-run-common-.c-files-through-Lindent.patch ++ features/all/rt28x0/0020-Staging-rt28x0-run-sta-.c-files-through-Lindent.patch ++ features/all/rt28x0/0021-Staging-rt28x0-run-.h-files-through-Lindent.patch ++ features/all/rt28x0/0022-Staging-rt28x0-fix-comments-in-.c-files.patch ++ features/all/rt28x0/0023-Staging-rt28x0-fix-comments-in-common-.c-files.patch ++ features/all/rt28x0/0024-Staging-rt28x0-fix-comments-in-sta-.c-files.patch ++ features/all/rt28x0/0025-Staging-rt28x0-fix-comments-in-.h-files.patch ++ features/all/rt28x0/0026-Staging-rt28x0-remove-typedefs-part-one.patch ++ features/all/rt28x0/0027-Staging-rt28x0-remove-typedefs-part-two.patch ++ features/all/rt28x0/0028-Staging-rt28x0-remove-typedefs-part-three.patch ++ features/all/rt28x0/0029-Staging-rt2860-remove-remainders-of-etc-reading-stuf.patch ++ features/all/rt28x0/0030-Staging-rt2860-remove-superfluous-newlines.patch ++ features/all/rt28x0/0031-Staging-rt28x0-fix-comments-in-chip-mac_pci.h.patch ++ features/all/rt28x0/0032-Staging-rt2860-reduce-superfluous-exclamation-marks.patch ++ features/all/rt28x0/0033-Staging-rt28x0-remove-no-longer-needed-common-cmm_da.patch ++ features/all/rt28x0/0034-Staging-rt2860-test-off-by-one-in-RtmpAsicSendComman.patch ++ features/all/rt28x0/0035-Staging-rt2870-rtusb_probe-should-be-in-section-__de.patch ++ features/all/rt28x0/0036-Staging-rt2870-Remove-unnecessary-forward-declaratio.patch ++ features/all/rt28x0/0037-Staging-rt2860-Use-skb_tail_pointer.patch ++ features/all/rt28x0/0038-Staging-rt2860-sta_ioctl.c-Two-branches-the-same-in-.patch ++ features/all/rt28x0/0039-Staging-rt2870sta-constify-RTUSBMultiWrite-RTUSBFirm.patch ++ features/all/rt28x0/0040-Staging-rt-2860-2870-sta-Use-request_firmware-to-loa.patch ++ features/all/rt28x0/0041-Staging-rt2860-correct-onstack-wait_queue_head-decla.patch ++ features/all/rt28x0/0042-Staging-rt2860-add-Belkin-F5D8055-Wireless-N-USB-Don.patch